decocms 4.391.0 → 4.392.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-C7XYh1LP.js → AlertCircle-BkKLjYOC.js} +1 -1
- package/dist/client/assets/{AreaChart-C4sq-vdL.js → AreaChart-4FTrmWBy.js} +1 -1
- package/dist/client/assets/{ArrowLeft-DKFKdEhW.js → ArrowLeft-D4nwRJ7-.js} +1 -1
- package/dist/client/assets/{ArrowRight-C3zict5j.js → ArrowRight-nQPozIrY.js} +1 -1
- package/dist/client/assets/{ArrowUp-CxvPahwH.js → ArrowUp-Csn5SgJE.js} +1 -1
- package/dist/client/assets/{CartesianChart-C8NgDV6x.js → CartesianChart-CHtKyIdH.js} +1 -1
- package/dist/client/assets/{Check-BwfKMLPG.js → Check-DprX_HgP.js} +1 -1
- package/dist/client/assets/{CheckCircle-DEKqa3kd.js → CheckCircle-CwAfwIdO.js} +1 -1
- package/dist/client/assets/{ChevronUp-q4oPKOr-.js → ChevronUp-CyHQIeNg.js} +1 -1
- package/dist/client/assets/{Copy01-917cUj_E.js → Copy01-DR_-PStN.js} +1 -1
- package/dist/client/assets/{CreditCard01-hELMg_Sx.js → CreditCard01-FkjJLYf6.js} +1 -1
- package/dist/client/assets/{DotsVertical-CjkUMOgL.js → DotsVertical-Dh229HKQ.js} +1 -1
- package/dist/client/assets/{Download01-CPeKzo-8.js → Download01-lVVtAHBG.js} +1 -1
- package/dist/client/assets/{ErrorBarContext-CsBQXAp7.js → ErrorBarContext-DDcgfLvN.js} +1 -1
- package/dist/client/assets/{Eye-DCYC67JM.js → Eye-D9WzxUGv.js} +1 -1
- package/dist/client/assets/{Globe04-DoMDE8nx.js → Globe04-Bk2xL1SC.js} +1 -1
- package/dist/client/assets/{Image01-DxuQg5ZH.js → Image01-O4A1bE82.js} +1 -1
- package/dist/client/assets/{Key01-BfSgijgm.js → Key01-WM4N1I8T.js} +1 -1
- package/dist/client/assets/{LayoutLeft-DjraUMOt.js → LayoutLeft-CBXXkPNJ.js} +1 -1
- package/dist/client/assets/{Line-kqxWGZSf.js → Line-BXcAkRE_.js} +1 -1
- package/dist/client/assets/{Link01-BWLuQcpR.js → Link01-rd8UL2Hq.js} +1 -1
- package/dist/client/assets/{LinkExternal01-B9ClJ_Qg.js → LinkExternal01-OC7bJzsH.js} +1 -1
- package/dist/client/assets/{Monitor01-DOO4XwwF.js → Monitor01-BOIxDnr9.js} +1 -1
- package/dist/client/assets/{Package-DRQz4wLi.js → Package-DJRudEqC.js} +1 -1
- package/dist/client/assets/{Palette-Dvhh2dSK.js → Palette-VrU8myRy.js} +1 -1
- package/dist/client/assets/{Plus-Ba6qwkMK.js → Plus-EIOtFjq1.js} +1 -1
- package/dist/client/assets/{SearchLg-CMgR0JDw.js → SearchLg-Cy2aS2d4.js} +1 -1
- package/dist/client/assets/{SearchMd-Txysqj2G.js → SearchMd-Dwq1kb4C.js} +1 -1
- package/dist/client/assets/{Sector-DGonhzTP.js → Sector-BaFN9F45.js} +1 -1
- package/dist/client/assets/{Share07-Bk6B9aSm.js → Share07-Ur7Alsr-.js} +1 -1
- package/dist/client/assets/{Stars01-B4M5Dqxf.js → Stars01-saCtWzGm.js} +1 -1
- package/dist/client/assets/{Sun--gVdMihW.js → Sun-Bmp5okv3.js} +1 -1
- package/dist/client/assets/{Tool01-BHCuYnNd.js → Tool01-CqjpAjrJ.js} +1 -1
- package/dist/client/assets/{Trash01-CsCfpAji.js → Trash01-MoXZVaMM.js} +1 -1
- package/dist/client/assets/{Upload01-CSXC71XX.js → Upload01-Z35KMD6X.js} +1 -1
- package/dist/client/assets/{User01-Dw-e2hAE.js → User01-_Z4o9XPX.js} +1 -1
- package/dist/client/assets/{UserSquare-CwnA5RxT.js → UserSquare-ByDmpErs.js} +1 -1
- package/dist/client/assets/{Users01-CeFLwGnt.js → Users01-B2otW_h5.js} +1 -1
- package/dist/client/assets/{X-OWtKWzrO.js → X-BRHZvFk-.js} +1 -1
- package/dist/client/assets/{XCircle-DSYCUNqi.js → XCircle-68p2HGyq.js} +1 -1
- package/dist/client/assets/{XClose-CYkHWH70.js → XClose-B_-S5kSO.js} +1 -1
- package/dist/client/assets/{Zap-W432e5DT.js → Zap-BGStwy0Y.js} +1 -1
- package/dist/client/assets/{ZoomOut-t3-E-TJP.js → ZoomOut-Dk-PLGvk.js} +1 -1
- package/dist/client/assets/{access-gate-Cg_ZEu1m.js → access-gate-CkZodJF2.js} +1 -1
- package/dist/client/assets/{add-connection-dialog-BFpQrV1k.js → add-connection-dialog-jtuixO8U.js} +1 -1
- package/dist/client/assets/{agent-analytics-D1EjitJe.js → agent-analytics-BtqK3hRG.js} +1 -1
- package/dist/client/assets/agent-app-DlfFJWt-.js +1 -0
- package/dist/client/assets/{agent-assets-B2PIS79l.js → agent-assets-maHEov_K.js} +1 -1
- package/dist/client/assets/{agent-automation-B37IfcjV.js → agent-automation-bf2OG2sM.js} +1 -1
- package/dist/client/assets/{agent-automations-UJ7wVYS6.js → agent-automations-NSSJ8UC8.js} +1 -1
- package/dist/client/assets/{agent-connect-sources-DtkW9_19.js → agent-connect-sources-BrGwcHvu.js} +1 -1
- package/dist/client/assets/agent-deck-D09g0smk.js +1 -0
- package/dist/client/assets/{agent-e2e-C60x1wsY.js → agent-e2e-CuKF4QOK.js} +1 -1
- package/dist/client/assets/{agent-experiments-C0Ha4-43.js → agent-experiments-s7oZkl1k.js} +1 -1
- package/dist/client/assets/agent-file-qAWPqT7R.js +1 -0
- package/dist/client/assets/{agent-git-ChsmxB_p.js → agent-git-CWSuOyJy.js} +1 -1
- package/dist/client/assets/{agent-hosting-BTt1UCz2.js → agent-hosting-Di77sQHu.js} +1 -1
- package/dist/client/assets/{agent-icon-CewaSqRN.js → agent-icon-6AdBkGaO.js} +1 -1
- package/dist/client/assets/agent-library-file-BLnRCE8n.js +1 -0
- package/dist/client/assets/{agent-monitor-Dmt-MVQY.js → agent-monitor-B9o0fejZ.js} +1 -1
- package/dist/client/assets/{agent-overview-BXFbKQLp.js → agent-overview-OWVwHS4B.js} +1 -1
- package/dist/client/assets/agent-settings-ew-LCSM1.js +1 -0
- package/dist/client/assets/{agent-site-editor-B2yXdhY9.js → agent-site-editor-BOk2KLbD.js} +1 -1
- package/dist/client/assets/agent-site-editor-code-D_NxFHDa.js +2 -0
- package/dist/client/assets/{agent-site-editor-content-UlMqjZ3O.js → agent-site-editor-content-BOIzBWOR.js} +2 -2
- package/dist/client/assets/{agent-site-editor-preview-DiTZwOol.js → agent-site-editor-preview-DUYI8NnI.js} +3 -3
- package/dist/client/assets/agent-view-PkFXJhDQ.js +1 -0
- package/dist/client/assets/{agent-view-guard-DMzVSbsJ.js → agent-view-guard-Db4nVuK3.js} +1 -1
- package/dist/client/assets/{agents-list-BnlBae8r.js → agents-list-CjHfhGVC.js} +1 -1
- package/dist/client/assets/{ai-providers-D8qSbVhm.js → ai-providers-DcpVLn7E.js} +1 -1
- package/dist/client/assets/{alert-dialog-KH9mOL8K.js → alert-dialog-D0e9AwWt.js} +1 -1
- package/dist/client/assets/{alert-ChROIeKI.js → alert-icE3dxLJ.js} +1 -1
- package/dist/client/assets/{api-keys-CZbYOMZG.js → api-keys-9OgC6BZu.js} +1 -1
- package/dist/client/assets/api-keys-owtIrYeb.js +1 -0
- package/dist/client/assets/app-editor-PEm397pW.js +1 -0
- package/dist/client/assets/{asset-utils-DqvmEDqL.js → asset-utils-BqzLBcE9.js} +1 -1
- package/dist/client/assets/{auth-tV1hCKGk.js → auth-OYBtHxwv.js} +1 -1
- package/dist/client/assets/{auth-catchall-axyosd37.js → auth-catchall-DhoM1zX4.js} +1 -1
- package/dist/client/assets/{auth-entry-C3FjXF1z.js → auth-entry-BbQarBsO.js} +1 -1
- package/dist/client/assets/{auth-split-layout-ClAafGt_.js → auth-split-layout-V3Czx8-D.js} +1 -1
- package/dist/client/assets/{authenticate-and-persist-oauth-CQZSXOm4.js → authenticate-and-persist-oauth-DLAycEKw.js} +1 -1
- package/dist/client/assets/{automation-list-row-D2yNk0A6.js → automation-list-row-BZH2n_9j.js} +1 -1
- package/dist/client/assets/{automation-runs-n2c8AyrZ.js → automation-runs-CsHp5Z2T.js} +1 -1
- package/dist/client/assets/{automations-ChT4kwhx.js → automations-ZsdWSFCZ.js} +1 -1
- package/dist/client/assets/{autosend-BDpreygY.js → autosend-CgTirNYr.js} +1 -1
- package/dist/client/assets/{avatar-rHLwoa5q.js → avatar-CN207mly.js} +1 -1
- package/dist/client/assets/{badge-Ebj_JDGo.js → badge-qd39z3zD.js} +1 -1
- package/dist/client/assets/{block-document-D8lBFBEJ.js → block-document-DQfXGg6f.js} +1 -1
- package/dist/client/assets/{blocks-preview-workspace-context-1mgSOVZ1.js → blocks-preview-workspace-context-CCbECGmW.js} +1 -1
- package/dist/client/assets/{breadcrumb-IWYYE82J.js → breadcrumb-DdnuJbqz.js} +1 -1
- package/dist/client/assets/{buckets-BEOrP3so.js → buckets-BR6Bor58.js} +1 -1
- package/dist/client/assets/{build-improve-prompt-doc-DjnFeIXb.js → build-improve-prompt-doc-BmD45xRb.js} +1 -1
- package/dist/client/assets/{bulk-category-panel-DG1PiULV.js → bulk-category-panel-D9ckxB_H.js} +1 -1
- package/dist/client/assets/{calendar-DdzLC-JC.js → calendar-B37S6JBq.js} +1 -1
- package/dist/client/assets/{capability-load-error-D-DecLGu.js → capability-load-error-BRZrVLZD.js} +1 -1
- package/dist/client/assets/{category-editor-DN0tRUvD.js → category-editor-BHWnzcXa.js} +1 -1
- package/dist/client/assets/{chart-C5by6Kji.js → chart-BXZqqDJp.js} +1 -1
- package/dist/client/assets/{chat-context-Ca0p-LeW.js → chat-context-B7SXSssX.js} +1 -1
- package/dist/client/assets/{chat-draft-CqAn_Vfs.js → chat-draft-9Q2iU_8d.js} +1 -1
- package/dist/client/assets/{checkbox-D4TitUUf.js → checkbox-CDGwwz7A.js} +1 -1
- package/dist/client/assets/{choose-editor-Brxm1-_M.js → choose-editor-BoqBTmuM.js} +1 -1
- package/dist/client/assets/{claim-phase-copy-CBG91KTW.js → claim-phase-copy-CxXmb5l0.js} +1 -1
- package/dist/client/assets/{cli-auth-success-3FFVHifo.js → cli-auth-success-rYkvOpEH.js} +1 -1
- package/dist/client/assets/{client-icons-HzHax-dy.js → client-icons-bX5Gp6OB.js} +1 -1
- package/dist/client/assets/{collapsible-BFyLpGJL.js → collapsible-BiiGqDaH.js} +1 -1
- package/dist/client/assets/{collection-detail-BOk6G1-2.js → collection-detail-DXJwKJBF.js} +1 -1
- package/dist/client/assets/{collection-display-button-Dwy7g0C4.js → collection-display-button-D25UtbFW.js} +1 -1
- package/dist/client/assets/{collection-search-CD1yqrrY.js → collection-search-DRwcgF3_.js} +1 -1
- package/dist/client/assets/{collection-table-wrapper-CkK5eldi.js → collection-table-wrapper-D7taL9RN.js} +1 -1
- package/dist/client/assets/{collection-tabs-Caw1XzY7.js → collection-tabs-BUetX-HR.js} +1 -1
- package/dist/client/assets/{combobox-BtRPybRg.js → combobox-Da5PqudH.js} +1 -1
- package/dist/client/assets/{command-BNilmTZt.js → command-DUn50fWV.js} +1 -1
- package/dist/client/assets/{companion-mcps-section-JVn9bFto.js → companion-mcps-section-CFpWWxNF.js} +1 -1
- package/dist/client/assets/{connect-BvHDasOC.js → connect-DHf61HXd.js} +1 -1
- package/dist/client/assets/{connect-layout-CRRbDj2T.js → connect-layout-DK-_F95J.js} +1 -1
- package/dist/client/assets/{connection-BLi7jQlA.js → connection-ByM_Wxez.js} +1 -1
- package/dist/client/assets/{connection-card-CkuD5goh.js → connection-card-D1WSVVai.js} +1 -1
- package/dist/client/assets/{connection-detail-DSNfYQGP.js → connection-detail-XoTcYGJg.js} +1 -1
- package/dist/client/assets/{connection-form-helpers-Cxrr2Bda.js → connection-form-helpers-LZzOtsqA.js} +1 -1
- package/dist/client/assets/{connections-Bq3GdwN4.js → connections-Dc7VgZut.js} +1 -1
- package/dist/client/assets/{create-organization-dialog-BpWZlGx5.js → create-organization-dialog-BlsBTS9F.js} +1 -1
- package/dist/client/assets/{decofile-api-D_m1F5Sh.js → decofile-api-D_h3Gblx.js} +1 -1
- package/dist/client/assets/{decopilot-Bvwnv_0E.js → decopilot-BQM8zkXa.js} +1 -1
- package/dist/client/assets/{dialog-BiHCD51F.js → dialog-CEQ8xYb3.js} +1 -1
- package/dist/client/assets/{discover-LrqJpVdG.js → discover-B6FPiTo_.js} +1 -1
- package/dist/client/assets/{domain-settings-BQkUypwg.js → domain-settings-D6so49Vx.js} +1 -1
- package/dist/client/assets/{download-app-dialog-BQ7HWcho.js → download-app-dialog-BOUSactv.js} +1 -1
- package/dist/client/assets/{drawer-HIpVVhTG.js → drawer-CNUtN90U.js} +1 -1
- package/dist/client/assets/{editor-VChyWwG_.js → editor-8v48sdVc.js} +1 -1
- package/dist/client/assets/{empty-state-DsElBMMJ.js → empty-state-DLvt1AQB.js} +1 -1
- package/dist/client/assets/{empty-state-DNI9ET09.js → empty-state-QFwDYr7H.js} +1 -1
- package/dist/client/assets/{extract-connection-data-BU2XiGI0.js → extract-connection-data-DP-zmz5Q.js} +1 -1
- package/dist/client/assets/{feature-gate-B0K-1NS-.js → feature-gate-B8bhUftk.js} +1 -1
- package/dist/client/assets/{feature-paywall-rzCx2Z5k.js → feature-paywall-BF1C4cYL.js} +1 -1
- package/dist/client/assets/{file-explorer-DRSvz84I.js → file-explorer-tJcKXm9O.js} +1 -1
- package/dist/client/assets/{file-preview-CZuyFB46.js → file-preview-GeE7dLFh.js} +1 -1
- package/dist/client/assets/{file-share-button-FPPBVpL5.js → file-share-button-DK5pFiIR.js} +1 -1
- package/dist/client/assets/{file-type-icon-CCjwL9Av.js → file-type-icon-C9z8EvLi.js} +1 -1
- package/dist/client/assets/{folder-icon-WLjnWVkJ.js → folder-icon-Cl7zUUMu.js} +1 -1
- package/dist/client/assets/{form-AcJZamdD.js → form-ICzsWaOl.js} +1 -1
- package/dist/client/assets/{gateway-client-DoWzklSe.js → gateway-client-CMZ4oDRs.js} +1 -1
- package/dist/client/assets/{general-DGfXMRcM.js → general-BTklTVWC.js} +1 -1
- package/dist/client/assets/{github-icon-B2uCnmRP.js → github-icon-Pp60gmhg.js} +1 -1
- package/dist/client/assets/{home-Cgik3wDb.js → home-Ck6f_BFT.js} +1 -1
- package/dist/client/assets/{hooks-CSI_fDo2.js → hooks-3t4Zk0rP.js} +1 -1
- package/dist/client/assets/{hooks-DKYPCdyl.js → hooks-BEHfl18c.js} +1 -1
- package/dist/client/assets/{icon-button-Nlg6U8EQ.js → icon-button-CEyo5F-q.js} +1 -1
- package/dist/client/assets/{index-5B52xTOA.js → index-BXjVPuWq.js} +2 -2
- package/dist/client/assets/{index-CGY-kq-c.js → index-C7k3ti7I.js} +1 -1
- package/dist/client/assets/{index-DegK9iwb.js → index-CBaY8-yx.js} +1 -1
- package/dist/client/assets/{index-Cgykainw.js → index-D313xBO7.js} +1 -1
- package/dist/client/assets/{index-BNXm3Ibu.js → index-D49Ap67e.js} +1 -1
- package/dist/client/assets/{index-DJ6iEqkv.js → index-DKSgz6Qe.js} +1 -1
- package/dist/client/assets/{index-CWlUHRjI.js → index-DQPolR15.js} +1 -1
- package/dist/client/assets/{index-DNgF6jv5.js → index-DXnwcsgu.js} +1 -1
- package/dist/client/assets/{index-BnUF69Xj.js → index-Dd7YA0wO.js} +1 -1
- package/dist/client/assets/{index-BwHxRbrA.js → index-DhsHr6CQ.js} +1 -1
- package/dist/client/assets/{index-BPIh7S-h.js → index-DjDdMrVR.js} +1 -1
- package/dist/client/assets/{index-B63HDk2l.js → index-DmHYU5Jv.js} +1 -1
- package/dist/client/assets/{index-BJcmrbaj.js → index-KiFQUocN.js} +1 -1
- package/dist/client/assets/{index-DWriZztG.js → index-hrky3hw7.js} +1 -1
- package/dist/client/assets/{index-redirect-CLTJoOM7.js → index-redirect-BcfqEAXA.js} +1 -1
- package/dist/client/assets/{infiniteQueryObserver-DBtLPG-c.js → infiniteQueryObserver-Dtc-EzzV.js} +1 -1
- package/dist/client/assets/{infra-billing-BLcNotql.js → infra-billing-CVI-zBju.js} +1 -1
- package/dist/client/assets/{input-Cgb0vElp.js → input-5Vh9A50N.js} +1 -1
- package/dist/client/assets/{input-Ch7PZbUp.js → input-Cz6PEVOa.js} +1 -1
- package/dist/client/assets/{input-BYNWWBGn.js → input-jA0cyLeu.js} +1 -1
- package/dist/client/assets/{integration-icon-BRrj_nQ-.js → integration-icon-DpGaJPqf.js} +1 -1
- package/dist/client/assets/{label-C-VUR_VH.js → label-B-hIAyEG.js} +1 -1
- package/dist/client/assets/{last-preview-page-DmKL_HCV.js → last-preview-page-D_5WShZX.js} +1 -1
- package/dist/client/assets/{layout-Dndl7jJ6.js → layout-EBsFU16Q.js} +1 -1
- package/dist/client/assets/{legacy-agents-deep-DbUHvQXm.js → legacy-agents-deep-DHZFMgtx.js} +1 -1
- package/dist/client/assets/{legacy-main-redirect-BDHkK4M3.js → legacy-main-redirect-TARyxreh.js} +1 -1
- package/dist/client/assets/{library-BJd5CNj1.js → library-DiDgWybK.js} +1 -1
- package/dist/client/assets/{login-zkd8IBqZ.js → login-Du05c0lX.js} +1 -1
- package/dist/client/assets/{markdown-DY9ms4Kt.js → markdown-JyzoCkIb.js} +1 -1
- package/dist/client/assets/{mcp-app-renderer-Ca7_cQUC.js → mcp-app-renderer-Dho2sriU.js} +1 -1
- package/dist/client/assets/{mcp-oauth-ByCC8Qls.js → mcp-oauth-BsYwCxip.js} +1 -1
- package/dist/client/assets/{members-a_7qKrc3.js → members-D777BHbd.js} +1 -1
- package/dist/client/assets/{message-templates-DiFOx0xp.js → message-templates-m5gmdutf.js} +1 -1
- package/dist/client/assets/{mini-report-page-_9d-KnLe.js → mini-report-page-DD4E9yua.js} +1 -1
- package/dist/client/assets/{mock-board-Cl3QcdfQ.js → mock-board-CU2MT2Cn.js} +3 -3
- package/dist/client/assets/{monaco-editor-xdEx-cEX.js → monaco-editor-UNL8fcds.js} +1 -1
- package/dist/client/assets/{monitoring-stats-row-C-ERvfTT.js → monitoring-stats-row-hfHeWldd.js} +1 -1
- package/dist/client/assets/{multi-select-BdEksOFD.js → multi-select-D1S6DpsY.js} +1 -1
- package/dist/client/assets/{mustache-BKQuQMuu.js → mustache-B3VPKOlY.js} +1 -1
- package/dist/client/assets/{oauth-callback-CEUMbLnm.js → oauth-callback-BJ1FZDuV.js} +1 -1
- package/dist/client/assets/{oauth-callback-ai-provider-8aWeFFWU.js → oauth-callback-ai-provider-Cj0C-sHE.js} +1 -1
- package/dist/client/assets/{onboarding-3uv-gOaj.js → onboarding-CNFRIIYZ.js} +1 -1
- package/dist/client/assets/{optimistic-project-sidebar-views-xseDJWMX.js → optimistic-project-sidebar-views-BZWLlGP7.js} +1 -1
- package/dist/client/assets/{org-file-open-context-B29htGOp.js → org-file-open-context-CLLI0osj.js} +1 -1
- package/dist/client/assets/{organization-choice-DchBMlW8.js → organization-choice-Co_olCzF.js} +1 -1
- package/dist/client/assets/{orgs-DYC7jWHm.js → orgs-BbFiiSvG.js} +1 -1
- package/dist/client/assets/{page-seo-form-CTIEkIEt.js → page-seo-form-Ct1PF3Wn.js} +1 -1
- package/dist/client/assets/{pair-M2hhQDoi.js → pair-Cj8MO08M.js} +1 -1
- package/dist/client/assets/{plan-ladder-CPVLeaon.js → plan-ladder-CroHkgan.js} +1 -1
- package/dist/client/assets/{popover-NaqlKnjU.js → popover-BXcek1Hz.js} +1 -1
- package/dist/client/assets/{post-calendar-BfUoToPJ.js → post-calendar-DkjO4N15.js} +1 -1
- package/dist/client/assets/{post-editor-Ue8krvKh.js → post-editor-Zf0e0QhC.js} +1 -1
- package/dist/client/assets/{preview-content-DS5Ompc6.js → preview-content-LUVEaNWA.js} +1 -1
- package/dist/client/assets/{preview-dialog-BTzt83qx.js → preview-dialog-B_N4Wm8H.js} +1 -1
- package/dist/client/assets/{primitives-1pmXVOYN.js → primitives-B9g5mKnw.js} +1 -1
- package/dist/client/assets/{profile-B9oH7nfx.js → profile-CkRx-pZP.js} +1 -1
- package/dist/client/assets/{project-app-view-1JBqF3nD.js → project-app-view-CtK00PMV.js} +1 -1
- package/dist/client/assets/{project-feed-SXSGQo-T.js → project-feed-CmnBizbK.js} +1 -1
- package/dist/client/assets/{project-icon-BP9y_bVa.js → project-icon-BAgtAQdl.js} +1 -1
- package/dist/client/assets/project-reports-BnzGDwbR.js +1 -0
- package/dist/client/assets/project-tasks-DnQYBYTz.js +1 -0
- package/dist/client/assets/{prompts-uMiCY1xV.js → prompts-9g8ZK7sg.js} +1 -1
- package/dist/client/assets/record-editor-p8nwikHU.js +1 -0
- package/dist/client/assets/{redirect-editor-DNG5nxGs.js → redirect-editor-CPoPIede.js} +1 -1
- package/dist/client/assets/reports-CslYQZhU.js +1 -0
- package/dist/client/assets/{reports-DUu4ahpn.js → reports-DZ5oU-3M.js} +1 -1
- package/dist/client/assets/{reports-onboarding-iaeaNf3d.js → reports-onboarding-TtEiw8JU.js} +1 -1
- package/dist/client/assets/{reports-tab-CZptCQUr.js → reports-tab-B3En1ZDA.js} +2 -2
- package/dist/client/assets/{repositories-Hw7C6ZgN.js → repositories-C1ZMb5NE.js} +1 -1
- package/dist/client/assets/{repository-import-picker-hQls-kLa.js → repository-import-picker-BT3rxmLN.js} +1 -1
- package/dist/client/assets/{repository-picker-D9AC6JjL.js → repository-picker-DuHE2dO-.js} +1 -1
- package/dist/client/assets/{require-capability-CSIXPRnh.js → require-capability-B7I2060A.js} +1 -1
- package/dist/client/assets/{required-auth-layout-DbtOtVgf.js → required-auth-layout-C-UkwO5v.js} +1 -1
- package/dist/client/assets/{reset-password-BosYJf-x.js → reset-password-B-cj7Men.js} +1 -1
- package/dist/client/assets/{resizable-BW_ZfeKg.js → resizable-BJUgDs8n.js} +1 -1
- package/dist/client/assets/{review-settings-CyXxb_JJ.js → review-settings-Bb8NJMQz.js} +1 -1
- package/dist/client/assets/{rich-text-link-control-Cx23rF91.js → rich-text-link-control-DJ14cUam.js} +1 -1
- package/dist/client/assets/{roles-DYB6kIkD.js → roles-C1NH-XPz.js} +1 -1
- package/dist/client/assets/{route-BFj4AjyI.js → route-B2ePzPd-.js} +1 -1
- package/dist/client/assets/{route-CqVARKbP.js → route-BThmSbvN.js} +1 -1
- package/dist/client/assets/{route-DreSOndn.js → route-QXcz4ooq.js} +1 -1
- package/dist/client/assets/{route-page-header-C4PBl-Ei.js → route-page-header-DVc7qqV3.js} +1 -1
- package/dist/client/assets/{runnable-block-editor-BYvjt7bK.js → runnable-block-editor-D4VmOeE6.js} +1 -1
- package/dist/client/assets/{sandbox-lifecycle-context-CrFzAnv2.js → sandbox-lifecycle-context-AITt9SFn.js} +1 -1
- package/dist/client/assets/{schema-DKsfkUZc.js → schema-HvsPHig2.js} +1 -1
- package/dist/client/assets/{scroll-area-CT2uLFlc.js → scroll-area-B9TNVFOh.js} +1 -1
- package/dist/client/assets/{search-input-CpUyBIsL.js → search-input-BYznh7fn.js} +1 -1
- package/dist/client/assets/{search-toggle-ICz_71ey.js → search-toggle-D2dsQJ72.js} +1 -1
- package/dist/client/assets/{secret-picker-nvhL5xBH.js → secret-picker-xlltrCiX.js} +1 -1
- package/dist/client/assets/{secrets-BsGL5oXU.js → secrets-B5RaQlDi.js} +1 -1
- package/dist/client/assets/{sections-editor-BNZOfvDP.js → sections-editor-kuSvf51k.js} +1 -1
- package/dist/client/assets/{select-co_8WMTl.js → select-CEIWIlq5.js} +1 -1
- package/dist/client/assets/{select-model-BBqA9ay-.js → select-model-qRI3mSHf.js} +1 -1
- package/dist/client/assets/{seo-editor-Bx4CKLoh.js → seo-editor-CWlzswz5.js} +1 -1
- package/dist/client/assets/{separator-DKH_YXVG.js → separator-Cpj5oE0e.js} +1 -1
- package/dist/client/assets/{settings-tab-BIz8TjB6.js → settings-tab-BooHFZvX.js} +1 -1
- package/dist/client/assets/{sheet-D9m0P3zo.js → sheet-CZl-3Y9o.js} +1 -1
- package/dist/client/assets/{shell-layout-AEte0VG5.js → shell-layout-BSxIDFaG.js} +1 -1
- package/dist/client/assets/{sidebar-D8Tc1UVx.js → sidebar-7CWbl_bl.js} +1 -1
- package/dist/client/assets/{skill-preview-B86S1JCw.js → skill-preview-Tgm7mXyM.js} +1 -1
- package/dist/client/assets/{skills-o02v8rby.js → skills-C4ZfRjYT.js} +1 -1
- package/dist/client/assets/{sso-xeQB96hz.js → sso-cHp0zbQ3.js} +1 -1
- package/dist/client/assets/{switch-C79E3ozz.js → switch-CMovvBtT.js} +1 -1
- package/dist/client/assets/{synced-repos-CPP8uZb_.js → synced-repos-Bb1D53Kk.js} +1 -1
- package/dist/client/assets/{table-B2xlqq1s.js → table-Mxzf5xaU.js} +1 -1
- package/dist/client/assets/{tabs-BTbWvXbF.js → tabs-DFQVgSff.js} +1 -1
- package/dist/client/assets/{task-board-DA1OXSBE.js → task-board-DUUzYgHL.js} +1 -1
- package/dist/client/assets/{task-route-aKPomJc2.js → task-route-BX8w2Rjd.js} +1 -1
- package/dist/client/assets/{task-status-DKGIHoqf.js → task-status-CBoZVvlo.js} +1 -1
- package/dist/client/assets/{taskboard-analytics-DXJiOTGC.js → taskboard-analytics-C-0wNMBq.js} +1 -1
- package/dist/client/assets/{tasks-mKRo1giX.js → tasks-CAoYJ069.js} +1 -1
- package/dist/client/assets/tasks-D_s9KqLA.js +1 -0
- package/dist/client/assets/{textarea--CRK0SIu.js → textarea-CFGSOAdM.js} +1 -1
- package/dist/client/assets/{thread-button-D-I-zXqG.js → thread-button-BPN32umw.js} +1 -1
- package/dist/client/assets/{thread-intent-DaU5iLn7.js → thread-intent-CL-RZ3xC.js} +1 -1
- package/dist/client/assets/{thread-route-CQon9zXo.js → thread-route-BeNaYBi6.js} +1 -1
- package/dist/client/assets/{thread-route-CwQ1im2n.js → thread-route-D6veYgnC.js} +1 -1
- package/dist/client/assets/{thread-sheet-body-OK14moQD.js → thread-sheet-body-3yp_eW9s.js} +1 -1
- package/dist/client/assets/{toggle-group-BLjpDOou.js → toggle-group-FgYkeeMJ.js} +1 -1
- package/dist/client/assets/{toolbar-icon-button-Ck3bLZJt.js → toolbar-icon-button-D8s1qsiv.js} +1 -1
- package/dist/client/assets/{tooltip-CHcv7vpK.js → tooltip-DQkrtNIS.js} +1 -1
- package/dist/client/assets/{track-DiO9emD6.js → track-CvTgjFSl.js} +1 -1
- package/dist/client/assets/{types-BV0w2KFI.js → types-DOmOcfmj.js} +1 -1
- package/dist/client/assets/{usage-stats-wWvfQfpH.js → usage-stats-ChzSEknt.js} +1 -1
- package/dist/client/assets/{use-ai-providers-IgWeF_Yp.js → use-ai-providers-PA3bKtu9.js} +1 -1
- package/dist/client/assets/{use-automations-BfH1FiaI.js → use-automations-DQiLrhFA.js} +1 -1
- package/dist/client/assets/{use-autosave-BdAGMOMk.js → use-autosave-B9KyuBmH.js} +1 -1
- package/dist/client/assets/{use-connect-companion-BqdT6eBl.js → use-connect-companion-BAlQ75Fu.js} +1 -1
- package/dist/client/assets/{use-connection-BEwzIksW.js → use-connection-Bmf_twoJ.js} +1 -1
- package/dist/client/assets/{use-copy-DMwFFOiz.js → use-copy-Dkez88Q7.js} +1 -1
- package/dist/client/assets/{use-create-virtual-mcp-BhmqvSWN.js → use-create-virtual-mcp-irWGimzn.js} +1 -1
- package/dist/client/assets/{use-date-fns-locale-LLY33UYn.js → use-date-fns-locale-DhZXbX1s.js} +1 -1
- package/dist/client/assets/{use-debounced-autosave-DFCrc7Hc.js → use-debounced-autosave-CUIz7iBP.js} +1 -1
- package/dist/client/assets/{use-debounced-value-C3kyQhaa.js → use-debounced-value-gQqkvdtq.js} +1 -1
- package/dist/client/assets/{use-deco-credits-CnJjtOEx.js → use-deco-credits-DBkXeLio.js} +1 -1
- package/dist/client/assets/{use-decopilot-events-quQMn9Rz.js → use-decopilot-events-8DtCOkHI.js} +1 -1
- package/dist/client/assets/{use-delete-connection-CGCA29gw.js → use-delete-connection-CULlkGbi.js} +1 -1
- package/dist/client/assets/{use-deployment-admin-C3JAYevP.js → use-deployment-admin-CuEPP_O7.js} +1 -1
- package/dist/client/assets/{use-entitlements-D0BQDImb.js → use-entitlements-BDw_aV7K.js} +1 -1
- package/dist/client/assets/{use-fast-preview-draft-url-DnkLv2gW.js → use-fast-preview-draft-url-lIYWJxyh.js} +1 -1
- package/dist/client/assets/{use-file-configs-CqSvS8B1.js → use-file-configs-DbNVJwRU.js} +1 -1
- package/dist/client/assets/{use-in-settings-DrFPuBfp.js → use-in-settings-HYmS00zY.js} +1 -1
- package/dist/client/assets/{use-infinite-scroll-BJrYoU-n.js → use-infinite-scroll-DI9sJuoF.js} +1 -1
- package/dist/client/assets/{use-join-requests-NBzlLqHC.js → use-join-requests-DnWpYGfz.js} +1 -1
- package/dist/client/assets/{use-main-panel-tabs-BoZrmxBr.js → use-main-panel-tabs-bowMf_Wl.js} +1 -1
- package/dist/client/assets/{use-mcp-auth-status-aufdX61a.js → use-mcp-auth-status-15vEZFK8.js} +1 -1
- package/dist/client/assets/{use-mcp-client-9whVU7s_.js → use-mcp-client-CEfXtGHX.js} +1 -1
- package/dist/client/assets/{use-mcp-prompts-FcI-EfBr.js → use-mcp-prompts-DYXFxZm3.js} +1 -1
- package/dist/client/assets/{use-mcp-tools-BluO18uV.js → use-mcp-tools-DhPgK81T.js} +1 -1
- package/dist/client/assets/{use-members-B-Krz1vH.js → use-members-Bqs9AXxu.js} +1 -1
- package/dist/client/assets/{use-mobile-BokN3khf.js → use-mobile-B9UMtXTk.js} +1 -1
- package/dist/client/assets/{use-navigate-to-agent-BaR6MzKD.js → use-navigate-to-agent-B1JvOWsV.js} +1 -1
- package/dist/client/assets/{use-open-billing-url-K-Rdvgdr.js → use-open-billing-url-7xCMgLwn.js} +1 -1
- package/dist/client/assets/{use-org-auth-client-lynMCVmX.js → use-org-auth-client-i-ldXIGA.js} +1 -1
- package/dist/client/assets/{use-org-fs-XPr29KJT.js → use-org-fs-CindHBpT.js} +1 -1
- package/dist/client/assets/{use-org-repo-syncs-zQQE7FPx.js → use-org-repo-syncs-ryZodKfG.js} +1 -1
- package/dist/client/assets/{use-org-sso-BGw8bd5o.js → use-org-sso-DwHFwpP3.js} +1 -1
- package/dist/client/assets/{use-organization-roles-BQf-ZmCb.js → use-organization-roles-DwmKsrtO.js} +1 -1
- package/dist/client/assets/{use-organization-settings-C3DPM_fy.js → use-organization-settings-CHoxVZzD.js} +1 -1
- package/dist/client/assets/{use-panel-navigate-LbotBi2g.js → use-panel-navigate-DCNzNKpd.js} +1 -1
- package/dist/client/assets/{use-project-native-view-presence-CdsjA_Hh.js → use-project-native-view-presence-jSr_D6a5.js} +1 -1
- package/dist/client/assets/{use-project-scope-DRX-2oGI.js → use-project-scope-DSz7-cMo.js} +1 -1
- package/dist/client/assets/{use-releases-BTCtYDrn.js → use-releases-B4_a2Wbs.js} +1 -1
- package/dist/client/assets/{use-reports-diagnostic-CQ7iP30h.js → use-reports-diagnostic-CayVLjSF.js} +1 -1
- package/dist/client/assets/{use-route-default-main-DwKotY2X.js → use-route-default-main-Bp27auUh.js} +1 -1
- package/dist/client/assets/{use-secrets-Dc5jrOaj.js → use-secrets-DvfFzb9R.js} +1 -1
- package/dist/client/assets/{use-section-preview-base-Rm-klB36.js → use-section-preview-base-LWWxqaRh.js} +1 -1
- package/dist/client/assets/{use-session-runtime-B9APT_KV.js → use-session-runtime--s9nNGg_.js} +1 -1
- package/dist/client/assets/{use-tags-BPI1SCn2.js → use-tags-liibMW90.js} +1 -1
- package/dist/client/assets/{use-task-board-analytics-DCCDxEFW.js → use-task-board-analytics-BfaotLHv.js} +1 -1
- package/dist/client/assets/{use-task-metadata-D9xWgzqM.js → use-task-metadata-DzOggew3.js} +1 -1
- package/dist/client/assets/{use-thread-outputs-CCVACMN4.js → use-thread-outputs-ByWpU3bY.js} +1 -1
- package/dist/client/assets/{use-virtual-mcp-BHMUr50m.js → use-virtual-mcp-jn9aVKmB.js} +1 -1
- package/dist/client/assets/useInfiniteQuery-5ulNHqM2.js +1 -0
- package/dist/client/assets/{useQueries-BDbrh3nq.js → useQueries-Wm7PFE53.js} +1 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-f3QGNJ2Y.js +1 -0
- package/dist/client/assets/{users-CdmDAxqG.js → users-BwXBAOd3.js} +1 -1
- package/dist/client/assets/{utils-DzlNpEnS.js → utils-Bx4oeOWP.js} +1 -1
- package/dist/client/assets/{variant-calendar-LRgRK_pr.js → variant-calendar-C64D2VEe.js} +1 -1
- package/dist/client/assets/{variant-matcher-override-DaA1IQ19.js → variant-matcher-override-CRrwy0fz.js} +1 -1
- package/dist/client/assets/{view-mode-toggle-CRJbz_JG.js → view-mode-toggle-SPa1NLBA.js} +1 -1
- package/dist/client/assets/{virtual-mcp-CvQogmVE.js → virtual-mcp-BxG5l8hm.js} +1 -1
- package/dist/client/index.html +1 -1
- package/dist/server/cli.js +2 -2
- package/dist/server/server.js +2 -2
- package/package.json +1 -1
- package/dist/client/assets/agent-app-BcFdYaLo.js +0 -1
- package/dist/client/assets/agent-deck-CqCZ2x7G.js +0 -1
- package/dist/client/assets/agent-file-CNeACefi.js +0 -1
- package/dist/client/assets/agent-library-file--vWeiKWs.js +0 -1
- package/dist/client/assets/agent-settings-CnZ-S3Vz.js +0 -1
- package/dist/client/assets/agent-site-editor-code-DPsDecNC.js +0 -2
- package/dist/client/assets/agent-view-an830Uqi.js +0 -1
- package/dist/client/assets/api-keys-BMKbKOJm.js +0 -1
- package/dist/client/assets/app-editor-CTsyrIFH.js +0 -1
- package/dist/client/assets/project-reports-B90QYi1D.js +0 -1
- package/dist/client/assets/project-tasks-IhGM501W.js +0 -1
- package/dist/client/assets/record-editor-CykxZI4S.js +0 -1
- package/dist/client/assets/reports-0zqQqIQH.js +0 -1
- package/dist/client/assets/tasks-D_7zBKxD.js +0 -1
- package/dist/client/assets/useInfiniteQuery-DHlpZiWe.js +0 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-Balc4sSo.js +0 -1
package/dist/server/server.js
CHANGED
|
@@ -1578,7 +1578,7 @@ ${Y}`:Y}case"media":return"";case"mediaSingle":case"mediaGroup":return uc($U(Q),
|
|
|
1578
1578
|
`),E=Z.description&&F?hT0(Z.description):Z.description,z=Z.description&&E?uT0(Z.description,E):null,T=[...F?[]:[j,""],`Task title: ${Z.title}`,E?`
|
|
1579
1579
|
Task description:
|
|
1580
1580
|
${E}
|
|
1581
|
-
`:"",...z?[z,""]:[],"How to work:",`- Call \`${B}\` with the task id below to find the pull request under review.`,H?`- The repository ${H.owner}/${H.name} is already cloned at your working directory and \`git\` and its CLI (\`gh\` for GitHub, \`glab\` for GitLab; Bitbucket has no CLI \u2014 use the REST API with \`curl\` and \`$BITBUCKET_TOKEN\`) are authenticated \u2014 check the PR's branch out there to inspect / exercise the change. ${Rs}`:F?`- Your working directory is EMPTY. Call \`mcp__studio__TASK_ADD_REPO\` ${N?`with id \`${N}\` (${Z.repo}) FIRST \u2014 do NOT call it with no arguments, that only lists the org's repositories and costs you a turn.`:"with the id of the PR's repository FIRST;"} it clones the repository and waits for the checkout, and \`git\` and its CLI are authenticated once it returns. ${Rs}`:"- Load the PR's repository to inspect / exercise the change.",`- ${aK$}`,...U>0?[`- This is a RE-REVIEW. You already reviewed an earlier version of this pull request and asked for changes, and there are more commits since (a human re-delegated the card, or your own fixes from that round are in the history). Read your own previous notes with \`${w}\`, then review WHAT MOVED SINCE \u2014 \`gh pr diff <number>\` still shows the whole PR, so narrow it with \`git log --since='${new Date(U).toISOString()}' --oneline\` and diff only those commits. Confirm your earlier notes were addressed and check the new commits for their own problems. Do NOT re-read the parts of the PR you already cleared.`]:[],"- Fix the issues you find on the PR's branch, run the repository's own checks, and push to that same PR. You are the last automated run on this task \u2014 nothing picks up findings you only describe.",`- THEN exercise the change. If the PR has a deploy \`previewUrl\` (from \`${B}\`), use it \u2014 re-read it after your push so you get the preview of YOUR commit, wait for it if it is still building, and deep-link to the page/route the task affects (not root). If there is NO preview, exercise it in the sandbox instead: run the repository's own checks, and for a UI change build and serve it locally and capture it (a Flutter app
|
|
1581
|
+
`:"",...z?[z,""]:[],"How to work:",`- Call \`${B}\` with the task id below to find the pull request under review.`,H?`- The repository ${H.owner}/${H.name} is already cloned at your working directory and \`git\` and its CLI (\`gh\` for GitHub, \`glab\` for GitLab; Bitbucket has no CLI \u2014 use the REST API with \`curl\` and \`$BITBUCKET_TOKEN\`) are authenticated \u2014 check the PR's branch out there to inspect / exercise the change. ${Rs}`:F?`- Your working directory is EMPTY. Call \`mcp__studio__TASK_ADD_REPO\` ${N?`with id \`${N}\` (${Z.repo}) FIRST \u2014 do NOT call it with no arguments, that only lists the org's repositories and costs you a turn.`:"with the id of the PR's repository FIRST;"} it clones the repository and waits for the checkout, and \`git\` and its CLI are authenticated once it returns. ${Rs}`:"- Load the PR's repository to inspect / exercise the change.",`- ${aK$}`,...U>0?[`- This is a RE-REVIEW. You already reviewed an earlier version of this pull request and asked for changes, and there are more commits since (a human re-delegated the card, or your own fixes from that round are in the history). Read your own previous notes with \`${w}\`, then review WHAT MOVED SINCE \u2014 \`gh pr diff <number>\` still shows the whole PR, so narrow it with \`git log --since='${new Date(U).toISOString()}' --oneline\` and diff only those commits. Confirm your earlier notes were addressed and check the new commits for their own problems. Do NOT re-read the parts of the PR you already cleared.`]:[],"- Fix the issues you find on the PR's branch, run the repository's own checks, and push to that same PR. You are the last automated run on this task \u2014 nothing picks up findings you only describe.",`- THEN exercise the change. If the PR has a deploy \`previewUrl\` (from \`${B}\`), use it \u2014 re-read it after your push so you get the preview of YOUR commit, wait for it if it is still building, and deep-link to the page/route the task affects (not root). If there is NO preview, exercise it in the sandbox instead: run the repository's own checks, and for a UI change build and serve it locally and capture it (a Flutter app runs on an Android emulator, but only on the Android sandbox image \u2014 see the \`flutter-app\` skill). Either way, if you cannot exercise it at all, do NOT approve \u2014 \`request_changes\` saying which path you tried and what blocked it.`,"- For a VISUAL change, capture before/after by running `qa-screenshot <url> org/output/qa/<name>.png [--mobile] [--full] [--selector=<css>] [--console]` (headless Chromium, baked into the sandbox; also works against a dev server you started on localhost \u2014 none is running by default, this pod is a checkout). Choose the framing: default is the top viewport, `--full` is the whole page, and `--selector='<css>'` frames just the component you changed (best for a focused before/after). Add `--mobile` too for a responsive change, and `--console` to catch the runtime errors a screenshot alone reports as a pass. WRITE them under `org/output/` \u2014 that's what surfaces them on the task. Then `Read` the files to actually LOOK at them: a screenshot you never opened is not verification. To INTERACT with a page \u2014 click, hit-test with `document.elementFromPoint`, fill a form \u2014 `qa-screenshot` is not enough, but the browser it drives is yours: write a throwaway node script that requires the global playwright-core: `const { chromium } = require(\"/usr/local/lib/node_modules/playwright-core\"); chromium.launch({ executablePath: \"/usr/bin/chromium\", args: [\"--no-sandbox\"] })`. Do NOT report a check as impossible because Playwright is missing \u2014 it is installed.",`- Record what you validated with \`${L}\` (scenarios + pass/fail, the exact URL + viewport, and anything you couldn't verify) BEFORE your decision. EMBED the before/after shots inline as markdown images referencing their org/output path, and put each before/after PAIR in a two-column table so they render side by side, e.g.:
|
|
1582
1582
|
|
|
1583
1583
|
| Before | After |
|
|
1584
1584
|
| --- | --- |
|
|
@@ -3365,7 +3365,7 @@ Respond with ONLY a JSON object of this shape, and nothing else:
|
|
|
3365
3365
|
${J.join(`
|
|
3366
3366
|
`)}`:Y}function Zy6($){let Z=new Set;for(let Q of $)for(let X of Q.split(`
|
|
3367
3367
|
`)){let Y=X.trim();if(/^Co-authored-by:\s/i.test(Y))Z.add(Y)}return[...Z]}var l$8=200,if6=12,nf6,of6=300,Nk0=3;var QF1=D(()=>{hZ();D8();Uk0();nf6={aheadBy:0,behindBy:0,files:[]}});function Xy6($){if(!$||$.includes(".."))return!1;return Qy6.test($)}function d$8($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!Xy6(Z))return null;let{__resolveType:Q,...X}=$;return{resolveType:Z,payload:X}}function m$8($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var Qy6;var i$8=D(()=>{Qy6=/^[\w./@-]+$/});function I80($,Z){let Q=$?.githubRepo;if(!Q?.owner||!Q?.name)return null;if(!Q.connectionId)return Q;if(!Z.includes(Q.connectionId))return null;return Q}async function n$8($,Z,Q,X){let Y=$.organization?.id;if(!Y)throw new nj(B7);let J=await bw($.storage,Y,X);if(J&&await AB($.storage,J)){let F=await hF($,J,{forceRefresh:!0}).catch((U)=>{throw new nj(U instanceof Error?U.message:B7)});await p$8($,Z,Q,F);return}let G=X.connectionId??J?.legacyConnectionId;if(!G)throw new nj("Push requires a connected git account. Connect the repository's provider for this project and restart the sandbox.");await sl({ctx:$,connectionId:G,organizationId:Y,forceRefresh:!0,onLegacyMintError:(F)=>{let U=F instanceof Error?F.message:B7;throw new nj(U)}});let{cloneUrl:W,gitUserName:K,gitUserEmail:H}=await uF(G,X.owner,X.name,$.db,$.vault).catch((F)=>{let{code:U,message:N}=iF$(F instanceof Error?F.message:String(F));throw U?new nj(N):F});await p$8($,Z,Q,{cloneUrl:W,gitUserName:K,gitUserEmail:H})}async function p$8($,Z,Q,X){let{cloneUrl:Y,gitUserName:J,gitUserEmail:G}=X,W=im($),K=await Z.proxyDaemonRequest(Q,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{repository:{cloneUrl:Y},identity:{userName:J,userEmail:G}},...W?{operator:W}:{}})});if(!K.ok){let H=await Qj(K,Yy6).catch(()=>K.statusText);throw Error(`Failed to refresh sandbox git credentials (${K.status}): ${H}`)}}var Yy6=10485760,nj;var XF1=D(()=>{t3();Qk0();Y00();UW0();ss();hZ();nj=class nj extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function Gy6($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!Jy6.test(Z))throw Error(`Invalid branch name: ${$}`)}function hf($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(Ky6)])}async function Fy6($,Z){let Q=$.var.studioContext,X=tF(Z.branch),Y=$.req.query("thread")??X,J=Y&&Y===X?Z.branchThread:Y?await Q.storage.threads.get(Y).catch(()=>null):null,G=J?.virtual_mcp_id===Z.virtualMcpId?J:null,W=Hx(G?.metadata?.runtime);if(W)return W;let K=$T0(Z.virtualMcpMetadata),H=K==="cms"?await fH1(Q,{claimName:Z.claimName}):"alive",F=K==="cms"&&H!=="alive"?"cms":"sandbox",U=!!G&&(H==="gone"||H==="alive"&&K==="cms");if(U&&G)J00(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 Uy6($){let Z=$.get("vmClaim");if(Z.runner)return Z.runner;try{return await LY($.var.studioContext)}catch{return null}}function uf($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}async function rm($){let{virtualMcpMetadata:Z,connectionIds:Q}=$.get("vmClaim"),X=$.var.studioContext,Y=I80(Z,Q);if(!Y)throw new y0({provider:"github",status:404,message:"Project has no GitHub repository"});let J=K0(X);return ol(X,J.id,Y)}function YF1($,Z){let Q=Z instanceof Error?Z.message:String(Z),X=NH$(Z);if(X!==void 0)return $.json({error:Q},429,{...t5,...X===null?{}:{"Retry-After":String(Math.ceil(X/1000))}});if(Z instanceof l6)return $.json({error:Q},409,t5);let Y=e3(Z);if(Y!==null){let J=Y===404?404:Y===409||Y===422?409:502;return $.json({error:Q},J,t5)}return $.json({error:Q},502,t5)}async function r$8($,Z,Q){let X;try{X=await fetch(Z,Q)}catch{return $.json({error:"Preview unreachable"},502)}let Y;try{Y=await X.text()}catch{return $.json({error:"Preview unreachable"},502)}return new Response(Y,{status:X.status,headers:{"content-type":X.headers.get("content-type")??"application/json"}})}async function a$8($){try{let Z=await rm($),Q=await Bk0(Z,$.get("vmClaim").branch);return $.json(Q,200,t5)}catch(Z){return YF1($,Z)}}function V80($,Z){let X=(Lk0.get($)??Promise.resolve()).catch(()=>{}).then(Z),Y=X.catch(()=>{});return Lk0.set($,Y),Y.finally(()=>{if(Lk0.get($)===Y)Lk0.delete($)}),X}async function o7($,Z,Q){if(!Q?.runner&&$.get("vmClaim").runtime==="cms")return $.json({error:"sandbox not found: this session is sandbox-less"},404,t5);let X=Q?.runner??uf($);if(X instanceof Response)return X;let{claimName:Y,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 X.proxyDaemonRequest(Y,Z,U);if(Q?.map404to410&&B.status===404){try{await B.body?.cancel()}catch{}if(await X.adoptLiveClaim({userId:J,projectRef:G},Y))B=await X.proxyDaemonRequest(Y,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",...t5}})}}let O=await B.text(),L=Q?.redactRepoDir?Ny6(O):O,w=B.headers.get("content-type")??"application/json";return new Response(L,{status:B.status,headers:{"content-type":w,...t5}})};try{if(F){let B=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 Ny6($){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 wk0($,Z,Q,X="GET",Y){let J=await $.proxyDaemonRequest(Z,Q,{method:X,headers:new Headers,body:null});if(J.status===404&&Y){try{await J.body?.cancel()}catch{}if(await $.adoptLiveClaim(Y,Z))J=await $.proxyDaemonRequest(Z,Q,{method:X,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 By6($){return s$8.includes($)}var Jy6,t$8=524288,Wy6=65536,Ky6=1e4,o$8=2000,Hy6,Lk0,t5,s$8,e$8=()=>{let $=new X1;$.use("/:virtualMcpId/:branch/*",Hy6),$.post("/:virtualMcpId/:branch/write",(Q)=>o7(Q,"/_sandbox/write",{forwardJsonBody:!0,signal:hf(Q)})),$.post("/:virtualMcpId/:branch/unlink",(Q)=>o7(Q,"/_sandbox/unlink",{forwardJsonBody:!0,signal:hf(Q)})),$.post("/:virtualMcpId/:branch/mkdir",(Q)=>o7(Q,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:hf(Q)})),$.post("/:virtualMcpId/:branch/rename",(Q)=>o7(Q,"/_sandbox/rename",{forwardJsonBody:!0,signal:hf(Q)})),$.post("/:virtualMcpId/:branch/read",(Q)=>o7(Q,"/_sandbox/read",{forwardJsonBody:!0,signal:hf(Q)})),$.post("/:virtualMcpId/:branch/glob",(Q)=>o7(Q,"/_sandbox/glob",{forwardJsonBody:!0,signal:hf(Q)})),$.post("/:virtualMcpId/:branch/grep",(Q)=>o7(Q,"/_sandbox/grep",{forwardJsonBody:!0,signal:hf(Q)})),$.post("/:virtualMcpId/:branch/exec/:script",async(Q)=>{let X=Q.req.param("script");if(!X)return Q.json({error:"missing script name"},400);return o7(Q,`/_sandbox/exec/${encodeURIComponent(X)}`)}),$.post("/:virtualMcpId/:branch/exec/:script/kill",async(Q)=>{let X=Q.req.param("script");if(!X)return Q.json({error:"missing script name"},400);return o7(Q,`/_sandbox/exec/${encodeURIComponent(X)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(Q)=>o7(Q,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDir:!0})),$.put("/:virtualMcpId/:branch/config",(Q)=>o7(Q,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(Q)=>{let X=Q.req.param("step");if(!X||!By6(X))return Q.json({error:`step must be one of: ${s$8.join(", ")}`},400);let Y=Q.get("vmClaim"),J=await fH1(Q.var.studioContext,{claimName:Y.claimName})==="gone"?null:await Uy6(Q);if(!J)return Q.json({error:"sandbox not found: nothing is running at this ref"},404,t5);if(X==="start"){let G=K0(Q.var.studioContext),W=bc(Y.virtualMcpMetadata);try{await rA0({ctx:Q.var.studioContext,runner:J,handle:Y.claimName,orgId:G.id,userId:Y.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 o7(Q,`/_sandbox/setup/${X}`,{signal:Q.req.raw.signal,map404to410:!0,runner:J})}),$.get("/:virtualMcpId/:branch/events",(Q)=>{let X=Q.get("vmClaim");if(!X.runner)return OO(Q,async(Y)=>{await Y.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this studio instance."})})});return s18(Q,{ctx:Q.var.studioContext,claimName:X.claimName,runner:X.runner,virtualMcpId:X.virtualMcpId,branch:X.branch,userId:X.userId,projectRef:X.projectRef,virtualMcpMetadata:X.virtualMcpMetadata})}),$.get("/:virtualMcpId/:branch/git/status",(Q)=>{if(Q.get("vmClaim").runtime==="cms")return a$8(Q);return Z(Q)});let Z=(Q)=>o7(Q,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([Q.req.raw.signal,AbortSignal.timeout(o$8)])});return $.post("/:virtualMcpId/:branch/git/status",(Q)=>{if(Q.get("vmClaim").runtime==="cms")return a$8(Q);return o7(Q,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([Q.req.raw.signal,AbortSignal.timeout(o$8)])})}),$.post("/:virtualMcpId/:branch/git/diff",async(Q)=>{let X=Q.get("vmClaim");if(X.runtime==="cms")try{let Y=await Q.req.json().catch(()=>({})),J=await rm(Q),G=await Ok0(J,X.branch,Y.base);return Q.json(G,200,t5)}catch(Y){return YF1(Q,Y)}return o7(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,t5);let X=uf(Q);if(X instanceof Response)return X;let{claimName:Y,virtualMcpMetadata:J,connectionIds:G}=Q.get("vmClaim"),W=Q.var.studioContext;return V80(Y,async()=>{try{await yH1(W,X,Y);let K=I80(J,G);if(K)await n$8(W,X,Y,K)}catch(K){if(K instanceof nj)return Q.json({error:K.message},403,t5);let H=K instanceof Error?K.message:String(K);return Q.json({error:H},502,t5)}return o7(Q,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",async(Q)=>{let X=Q.get("vmClaim");if(X.runtime==="cms")return V80(X.claimName,async()=>{let Y=await Q.req.json().catch(()=>({})),J=Array.isArray(Y.filepaths)?Y.filepaths.filter((G)=>typeof G==="string"):[];if(J.length===0)return Q.json({error:"filepaths is required"},400,t5);try{let G=await rm(Q);return await c$8(G,X.branch,J),Q.json({ok:!0},200,t5)}catch(G){let W=e3(G)===409||G instanceof l6?409:502,K=G instanceof Error?G.message:String(G);return Q.json({error:K},W,t5)}});return V80(X.claimName,()=>o7(Q,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(Q)=>{let X=Q.get("vmClaim");if(X.runtime==="cms")return V80(X.claimName,async()=>{try{let W=await Q.req.json().catch(()=>({})),K=await rm(Q),H=W.base??await K.getDefaultBranch();return await Dk0(K,X.branch,H),Q.json({ok:!0},200,t5)}catch(W){return YF1(Q,W)}});let Y=uf(Q);if(Y instanceof Response)return Y;let{claimName:J}=Q.get("vmClaim"),G=Q.var.studioContext;return V80(J,async()=>{try{await yH1(G,Y,J)}catch(W){let K=W instanceof Error?W.message:String(W);return Q.json({error:K},502,t5)}return o7(Q,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",H9({maxSize:t$8,onError:(Q)=>Q.json({error:"Payload too large"},413,t5)}),async(Q)=>{let X=Q.get("vmClaim"),Y=null;if(X.runtime!=="cms"){let H=uf(Q);if(H instanceof Response)return H;Y=H}let{claimName:J,userId:G,projectRef:W}=X,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]=uH1(F)&&N?[F,U]:Y?await Promise.all([wk0(Y,J,"/_sandbox/git/status","GET",{userId:G,projectRef:W}),wk0(Y,J,"/_sandbox/git/diff","GET",{userId:G,projectRef:W})]):await(async()=>{let w=await rm(Q);return Promise.all([Bk0(w,X.branch),Ok0(w,X.branch)])})();await IK(K,K0(K).id,"suggesting a commit message");let L=await X$8(K,B,O);return Q.json(L,200,t5)}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,t5);return Q.json({error:F},502,t5)}}),$.post("/:virtualMcpId/:branch/git/judge-review",H9({maxSize:t$8,onError:(Q)=>Q.json({error:"Payload too large"},413,t5)}),async(Q)=>{let X=Q.get("vmClaim"),Y=null;if(X.runtime!=="cms"){let H=uf(Q);if(H instanceof Response)return H;Y=H}let{claimName:J,userId:G,projectRef:W}=X,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]=uH1(F)&&N?[F,U]:Y?await Promise.all([wk0(Y,J,"/_sandbox/git/status","GET",{userId:G,projectRef:W}),wk0(Y,J,"/_sandbox/git/diff","GET",{userId:G,projectRef:W})]):await(async()=>{let w=await rm(Q);return Promise.all([Bk0(w,X.branch),Ok0(w,X.branch)])})();await IK(K,K0(K).id,"judging whether a change needs review");let L=await J$8(K,B,O,typeof H.language==="string"?H.language:void 0);return Q.json(L,200,t5)}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,t5);return Q.json({error:F},502,t5)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(Q)=>{let X=uf(Q);if(X instanceof Response)return X;let{claimName:Y}=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 X.getPreviewUrl(Y)}catch{return Q.json({error:"Preview not available"},502)}if(!G)return Q.json({error:"Preview not available"},502);let W=G.replace(/\/+$/,"");return r$8(Q,`${W}${J}`)}),$.post("/:virtualMcpId/:branch/preview-invoke",H9({maxSize:Wy6,onError:(Q)=>Q.json({error:"Payload too large"},413)}),async(Q)=>{let X=uf(Q);if(X instanceof Response)return X;let{claimName:Y}=Q.get("vmClaim"),J;try{J=await X.getPreviewUrl(Y)}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=d$8(G);if(!W)return Q.json({error:"Invalid or missing __resolveType"},400);let K=m$8(J,W.resolveType);return r$8(Q,K,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(W.payload),signal:AbortSignal.timeout(30000)})}),$};var $88=D(()=>{X8();FH();mm();xH1();Z00();o18();JW();xc();r18();dK();RF();a18();e18();q61();X00();dH1();G$8();hZ();N5();QF1();i$8();XF1();Jy6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;Hy6=Zk0(async($,Z)=>{let Q=$.var.studioContext;try{Q0(Q)}catch{return $.json({error:"Unauthorized"},401)}let X=p0(Q);if(!X)return $.json({error:"Unauthorized"},401);let Y;try{Y=K0(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{Gy6(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!==Y.id)return $.json({error:"Virtual MCP not found"},404);let K=Te({orgId:Y.id,virtualMcpId:J,branch:G}),H=await a81(Q,G),F=s81(H,X),U=t18({userId:F,projectRef:K}),N=W.metadata??null,B=await Fy6($,{claimName:U,branch:G,virtualMcpId:J,sandboxUserId:F,virtualMcpMetadata:N,branchThread:H});if(B==="cms")return $.set("vmClaim",{claimName:U,callerUserId:X,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 LY(Q)}catch{O=null}if(!O)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:U,callerUserId:X,runner:O,virtualMcpId:J,branch:G,userId:F,projectRef:K,virtualMcpMetadata:N,connectionIds:W.connections?.map((L)=>L.connection_id)??[],runtime:B}),Z()});Lk0=new Map;t5={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};s$8=["clone","install","start"]});function Z88($,Z,Q){let X=JF1.get($);if(!X)X={pending:null,running:!1},JF1.set($,X);if(!X.pending)X.pending={set:new Map,del:new Set,deps:Z,resolvers:[],rejecters:[]};let Y=X.pending;Y.deps=Z;for(let[G,W]of Object.entries(Q.set??{}))Y.set.set(G,W),Y.del.delete(G);for(let G of Q.delete??[])Y.del.add(G),Y.set.delete(G);let J=new Promise((G,W)=>{Y.resolvers.push(G),Y.rejecters.push(W)});if(!X.running)Dy6($,X);return J}async function Dy6($,Z){Z.running=!0;try{while(Z.pending){let Q=Z.pending;Z.pending=null;try{let X=await Ly6(Q);for(let Y of Q.resolvers)Y(X)}catch(X){for(let Y of Q.rejecters)Y(X)}}}finally{if(Z.running=!1,!Z.pending)JF1.delete($)}}async function Ly6($){let{client:Z,branch:Q,packagePath:X}=$.deps,Y=new Map;for(let J=0;;J++){let G=await om(Z,Q),W=await Z.listDecofileEntries(G,X),K=eH1(W,X),H=[],F=new Map(K.map((N)=>[N.path,{stem:N.stem,sha:N.sha}]));for(let[N,B]of $.set){let O=$F1(K,N),L=`${JSON.stringify(B,null,2)}
|
|
3368
|
-
`;await y$8(Z.repo,L);let w=O[0]??`${Fk0(X)}/${pH1(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 $F1(K,N))H.push({path:B,deleted:!0}),F.delete(B);if(H.length===0)return G;let U=X?`${X}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((N)=>N.type==="blob"&&N.path===U)){let N=await g$8(Z,F.values(),Y),{decofile:B,skipped:O}=A80(N);if(O.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:kK(Z.repo),branch:Q,packagePath:X,blocks:O.map((L)=>L.key)});H.push({path:U,content:B})}try{let{sha:N}=await Z.commitFiles({branch:Q,message:wy6($),expectedHead:G,changes:H});return N}catch(N){if(!(N instanceof l6)||J>=Oy6-1)throw N;await c$(a7(2000,200,J,2,0.5))}}}function wy6($){let Z=(Y)=>{let J=Y.slice(0,3).join(", ");return Y.length>3?`${J} (+${Y.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 X=`chore(decofile): ${Q.join("; ")}`;return P81(X,$.deps.coAuthor)}var Oy6=3,JF1;var Q88=D(()=>{gP0();Yk0();w6();D8();hZ();Uk0();JF1=new Map});import{createHmac as X88,randomBytes as jy6,timingSafeEqual as Ey6}from"crypto";function Y88(){if(jk0)return jk0;let $;try{let Z=E0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return jk0=$?Buffer.from($):jy6(32),jk0}function GF1($){let Z=$.nowMs??Date.now(),Q={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+zy6)/1000)},X=Buffer.from(JSON.stringify(Q)).toString("base64url"),Y=X88("sha256",Y88()).update(X).digest("base64url");return`${X}.${Y}`}function J88($,Z){let Q=$.indexOf(".");if(Q<0)return!1;let X=$.slice(0,Q),Y=Buffer.from($.slice(Q+1)),J=Buffer.from(X88("sha256",Y88()).update(X).digest("base64url"));if(Y.length!==J.length||!Ey6(Y,J))return!1;let G;try{G=JSON.parse(Buffer.from(X,"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 zy6=21600000,jk0=null;var G88=D(()=>{U$()});import{z as am}from"zod";function Ay6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&Py6.test($)}function U88($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function k80($){let Z=$.get("decofileScope");return ol($.var.studioContext,Z.organizationId,Z.githubRepo)}function S80($,Z){let Q=Z instanceof Error?Z.message:String(Z);if(Z instanceof l6)return $.json({error:Q},409);let X=e3(Z);if(X!==null){let Y=X===404?404:X===409||X===422?409:502;return $.json({error:Q},Y)}return $.json({error:Q},500)}function N88(){let $=new X1;return $.use("/:virtualMcpId/:branch",F88),$.use("/:virtualMcpId/:branch/*",F88),$.get("/:virtualMcpId/:branch",async(Z)=>{let Q=Z.get("decofileScope");try{let X=await k80(Z),Y=await h$8(X,Q.branch,Q.packagePath,{createBranchIfMissing:!!Q.userId}),J={ETag:`"${Y.sha}"`,"Cache-Control":"no-store","Access-Control-Allow-Origin":"*"};if(Z.req.header("if-none-match")===`"${Y.sha}"`)return Z.body(null,304,J);if(!Q.userId)return Z.body(Y.decofile,200,{...J,"content-type":"application/json"});let G=GF1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(G)},"apiHost":${JSON.stringify(U88(Z))},"decofile":${Y.decofile}}`,200,{...J,"content-type":"application/json"})}catch(X){return S80(Z,X)}}),$.get("/:virtualMcpId/:branch/meta",async(Z)=>{let Q=Z.get("decofileScope"),X=Q.packagePath?`${Q.packagePath}/.deco/meta.gen.json`:".deco/meta.gen.json";try{let Y=await k80(Z),J=await Y.readFileAtRef(Q.branch,X);if(J===null){let G=await Y.getDefaultBranch();if(G!==Q.branch)J=await Y.readFileAtRef(G,X)}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(Y){return S80(Z,Y)}}),$.patch("/:virtualMcpId/:branch",Ry6,async(Z)=>{let Q=Z.get("decofileScope"),X=Z.var.studioContext,Y=qy6.safeParse(await Z.req.json().catch(()=>null));if(!Y.success)return Z.json({error:"Invalid body",details:Y.error.issues},400);let J=Y.data;for(let G of[...Object.keys(J.set??{}),...J.delete??[]])try{Xk0(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(iH1(G))return Z.json({error:`Block key "${G}" collides with a framework resolver module and cannot be written`},400)}try{let G=await k80(Z),W=await Z88(`${Q.organizationId}/${Q.virtualMcpId}/${Q.branch}`,{client:G,branch:Q.branch,packagePath:Q.packagePath,coAuthor:im(X)},J),K=GF1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.json({version:W,token:K,apiHost:U88(Z)})}catch(G){return S80(Z,G)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let Q=Z.get("decofileScope");try{let X=await k80(Z),Y=await X.getDefaultBranch();if(Y===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 X.mergeBranches(Y,Q.branch,J)}catch(W){if(e3(W)!==409)throw W;await Dk0(X,Q.branch,Y),G=await X.mergeBranches(Y,Q.branch,J)}return G?Z.json({result:"merged",sha:G}):Z.json({result:"up-to-date"})}catch(G){if(e3(G)===409)return Z.json({error:"merge-conflict"},409);if(e3(G)===405){let K=await X.findOpenChangeRequest(Y,Q.branch)??await X.createChangeRequest({base:Y,head:Q.branch,title:`Publish ${Q.branch}`});return Z.json({result:"pull-request",number:K.number,url:K.url})}throw G}}catch(X){return S80(Z,X)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let Q=Z.get("decofileScope");try{let X=await k80(Z),Y=await X.getDefaultBranch();if(Y===Q.branch)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0,lastCommitAt:null});try{let[{aheadBy:J,behindBy:G},W]=await Promise.all([X.compare(Y,Q.branch),X.getBranch(Q.branch)]);return Z.json({baseBranch:Y,aheadBy:J,behindBy:G,lastCommitAt:W?.committedAt??null})}catch(J){if(e3(J)===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0,lastCommitAt:null});throw J}}catch(X){return S80(Z,X)}}),$}var Py6,W88=500,K88=1048576,H88=1024,Ty6=8388608,Ry6,qy6,F88;var B88=D(()=>{M61();Yk0();X8();FH();xH1();Qk0();XF1();hZ();Q88();G88();QF1();Uk0();RF();Py6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;Ry6=H9({maxSize:Ty6,onError:($)=>$.json({error:"Payload too large"},413)}),qy6=am.object({set:am.record(am.string(),am.unknown()).optional(),delete:am.array(am.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)<=W88,{message:`Patch cannot touch more than ${W88} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=K88),{message:`Each block must be at most ${K88} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=H88),{message:`Each block key must be at most ${H88} characters`}),F88=Zk0(async($,Z)=>{let Q=$.var.studioContext,X=Q.organization;if(!X)return $.json({error:"Organization scope required"},500);let Y=$.req.param("virtualMcpId"),J=$.req.param("branch");if(!Y||!J)return $.json({error:"virtualMcpId and branch are required"},400);if(!Ay6(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||!J88(B,{organizationId:X.id,virtualMcpId:Y,branch:J}))return $.json({error:"Unauthorized"},401)}if(!await d3(Q,X.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(Y);if(!W||W.organization_id!==X.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!eA0(K))return $.json({error:"Project has no preview server configured"},404);let F=W.connections?.map((B)=>B.connection_id)??[],U=I80(K,F);if(!U)return $.json({error:"Project has no GitHub repository"},404);let N=K?.runtime;return $.set("decofileScope",{organizationId:X.id,virtualMcpId:Y,branch:J,packagePath:N?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:U,userId:G}),Z()})});var O88=($)=>{let Z=new X1;if(Z.use("*",Am),Z.use("*",ma$),Z.route("/",FV0()),Z.route("/",Ms$()),Z.route("/",Ns$()),Z.route("/",x18()),Z.route("/",I18()),Z.route("/",v18()),Z.route("/",k18()),Z.route("/",sV0()),Z.route("/tools",c18()),Z.route("/",h18()),Z.route("/",J18({kvStorage:$.kvStorage})),Z.route("/",X18()),Z.route("/fs",j18({getConnection:$.getNatsConnection})),Z.route("/sandbox",e$8()),Z.route("/decofile",N88()),Z.route("/",R18()),Z.route("/",z18()),Z.route("/deco-sites",NV0()),Z.route("/hosting",Zs$()),Z.route("/monitor",Ks$()),Z.route("/sso",JV0()),Z.route("/",eV0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",ra$()),$.mountDevAssets)Z.route("/dev-assets",LV0({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("/",$o$()),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",A18()),Z.route("/mcp",JR0()),Z.route("/mcp/self",tV0()),Z.route("/mcp",KR0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var D88=D(()=>{X8();ia$();tI0();aa$();QK1();Qs$();Hs$();wV0();If();aW1();WK1();Y18();G18();E18();P18();O10();iW1();HR0();MH1();T18();q18();V18();S18();kH1();f18();u18();SH1();d18();CH1();GR0();$88();B88()});function My6($){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 Iy6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},L88=()=>{let $=new X1;return $.use("*",Iy6),$.get("/",async(Z)=>{let Q=E0(),X=Q.decoSupabaseUrl,Y=Q.decoSupabaseServiceKey;if(!X||!Y)return Z.json({apps:[]});try{let J=await CJ(X,Y,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:My6(J)})}catch(J){return console.error("[deco-apps] GET error:",J),Z.json({error:"Failed to fetch apps"},502)}}),$};var w88=D(()=>{X8();U$();ZI0()});import{z as b1}from"zod";function kU($,Z="invalid_request_error",Q=null,X=null){return{error:{message:$,type:Z,param:Q,code:X}}}function yy6($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let Q=$.substring(0,Z),X=$.substring(Z+1);if(!Q||!X)return null;return{credentialId:Q,modelId:X}}function gy6($,Z,Q){try{return JSON.parse($)}catch{throw new z88(`Invalid JSON in tool call arguments for function '${Q}' (tool_call_id: ${Z}): ${$}`)}}function hy6($){let Z={};for(let Q of $)if(Q.role==="assistant"&&Q.tool_calls)for(let X of Q.tool_calls)Z[X.id]=X.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((Y)=>{if(Y.type==="text")return{type:"text",text:Y.text};return{type:"image",image:Y.image_url.url}})};case"assistant":if(Q.tool_calls&&Q.tool_calls.length>0)return{role:"assistant",content:Q.tool_calls.map((Y)=>({type:"tool-call",toolCallId:Y.id,toolName:Y.function.name,input:gy6(Y.function.arguments,Y.id,Y.function.name)}))};return{role:"assistant",content:Q.content??""};case"tool":let X=Z[Q.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:Q.tool_call_id,toolName:X,output:{type:"text",value:Q.content}}]}}})}function uy6($){let Z=$.map((Q)=>{let X=Q.function.parameters?KF(Q.function.parameters):KF({type:"object",properties:{}});return[Q.function.name,u$({description:Q.function.description,inputSchema:X})]});return Object.fromEntries(Z)}function ly6($){if(!$)return;return{openai:{response_format:$}}}function cy6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function j88($,Z,Q,X,Y,J){let G={model:$,instructions:Z.filter((W)=>W.role==="system"),messages:Z.filter((W)=>W.role!=="system"),tools:Q,temperature:X.temperature,maxOutputTokens:X.max_tokens,topP:X.top_p,frequencyPenalty:X.frequency_penalty,presencePenalty:X.presence_penalty,stopSequences:X.stop?Array.isArray(X.stop)?X.stop:[X.stop]:void 0,abortSignal:J};return Y?{...G,providerOptions:Y}:G}function E88($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var Vy6=256,ky6,Sy6,Cy6,_y6,vy6,by6,xy6,fy6,z88,P88,A88;var T88=D(()=>{$6();X8();mm();sK();ky6=b1.object({type:b1.literal("function"),function:b1.object({name:b1.string(),description:b1.string().optional(),parameters:b1.record(b1.string(),b1.unknown()).optional()})}),Sy6=b1.object({id:b1.string(),type:b1.literal("function"),function:b1.object({name:b1.string(),arguments:b1.string()})}),Cy6=b1.discriminatedUnion("role",[b1.object({role:b1.literal("system"),content:b1.string(),name:b1.string().optional()}),b1.object({role:b1.literal("user"),content:b1.union([b1.string(),b1.array(b1.union([b1.object({type:b1.literal("text"),text:b1.string()}),b1.object({type:b1.literal("image_url"),image_url:b1.object({url:b1.string(),detail:b1.string().optional()})})]))]),name:b1.string().optional()}),b1.object({role:b1.literal("assistant"),content:b1.string().nullable().optional(),name:b1.string().optional(),tool_calls:b1.array(Sy6).optional()}),b1.object({role:b1.literal("tool"),content:b1.string(),tool_call_id:b1.string()})]),_y6=b1.object({type:b1.literal("text")}),vy6=b1.object({type:b1.literal("json_object")}),by6=b1.object({type:b1.literal("json_schema"),json_schema:b1.object({name:b1.string(),description:b1.string().optional(),schema:b1.record(b1.string(),b1.unknown()),strict:b1.boolean().optional()})}),xy6=b1.union([_y6,vy6,by6]),fy6=b1.object({model:b1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:b1.array(Cy6),stream:b1.boolean().optional().default(!1),temperature:b1.number().min(0).max(2).optional(),max_tokens:b1.number().positive().optional(),top_p:b1.number().min(0).max(1).optional(),frequency_penalty:b1.number().min(-2).max(2).optional(),presence_penalty:b1.number().min(-2).max(2).optional(),stop:b1.union([b1.string(),b1.array(b1.string())]).optional(),tools:b1.array(ky6).optional(),tool_choice:b1.union([b1.literal("auto"),b1.literal("none"),b1.literal("required"),b1.object({type:b1.literal("function"),function:b1.object({name:b1.string()})})]).optional(),response_format:xy6.optional(),user:b1.string().optional()});z88=class z88 extends Error{constructor($){super($);this.name="MessageConversionError"}};P88=new X1;P88.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),Q=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(kU("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(kU("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(kU("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let X=await $.req.json(),Y=fy6.safeParse(X);if(!Y.success){let w=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(kU(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let J=Y.data,G=yy6(J.model);if(!G)return $.json(kU("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)=>Kz(E.providerId));if(!j)return $.json(kU("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(kU(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),U=hy6(J.messages),N=J.tools?uy6(J.tools):void 0,B=ly6(J.response_format),O=cy6(),L=Math.floor(Date.now()/1000);if(J.stream)return OO($,async(w)=>{let j=j88(F,U,N,J,B,$.req.raw.signal);try{let E=_c(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>=Vy6)await A()}else if(q.type==="tool-call"){await A();let x=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:x,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:E88(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=j88(F,U,N,J,B,$.req.raw.signal),j=await Cc(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:E88(j.finishReason)}],usage:{prompt_tokens:j.usage?.inputTokens??0,completion_tokens:j.usage?.outputTokens??0,total_tokens:j.usage?.totalTokens??0}})}}catch(X){let Y=X;if(Y.name==="AbortError")return $.json(kU("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(kU(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(kU(Y.message,"server_error"),500)}});A88=P88});function dy6($){if(typeof $!=="object"||$===null)return!1;let Q=$.githubRepo?.url;return typeof Q==="string"&&Q.length>0}function R88(){let $=new X1;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"),X=p0(Q);if(!X)return Z.json({error:"Authentication required"},401);let J=(Z.req.query("site")??"").trim().toLowerCase();if(!N7(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","=",X).execute(),W=[];for(let H of G){if(!H.slug||w9(H))continue;let F=await Q.storage.virtualMcps.list(H.id);for(let U of F){if(T30(U)!==J)continue;if(!dy6(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 q88=D(()=>{X8();o3()});var I88;var M88=D(()=>{I88={name:"decocms",version:"4.391.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 py6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??iy6}}var V88,iy6="https://ph.studio.decocms.com",k88;var S88=D(()=>{X8();yo();kx();D9();U$();CW1();M88();V88=new X1;V88.get("/",($)=>{let Z={version:I88.version,theme:J1$(),...NK().logo&&{logo:NK().logo},...dB()&&{internalUrl:yl1()},...E0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!E0().firecrawlApiKey,hostingEnabled:!!E0().controlplaneRestUrl&&!!E0().controlplaneServiceToken,hostingControlPlaneGa:E0().hostingControlPlaneGa,monitorEnabled:!!E0().clickhouseAnalyticsUrl&&!!E0().clickhouseAnalyticsPassword,monitorGa:E0().monitorGa,plansEnabled:E0().plansEnabled,auth:ir$(),posthog:py6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:MO()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});k88=V88});function sm($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function WF1($){return(sm($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((Q)=>Q.charAt(0).toUpperCase()+Q.slice(1)).join(" ")}function _88($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(sm($))}&sz=${Z}`}function C88($,Z){let Q=$.trim();if(Q.length<=Z)return Q;let X=Q.slice(0,Z-1),Y=X.lastIndexOf(" ");return`${(Y>Z*0.6?X.slice(0,Y):X).trimEnd()}\u2026`}function v88($){let{brand:Z,domain:Q,score:X,verdict:Y}=$,J=typeof X==="number"?`${Z} commerce report \u2014 ${Math.round(X)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,G=`See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,W=Y?.trim()?C88(`${Y.trim().replace(/\s+/g," ")} \u2014 ${G}`,200):C88(`How does ${Q} really perform? ${G}`,200);return{title:J,description:W}}import{z as n0}from"zod";var lf,ny6,ty6,oy6,ry6,b88;var x88=D(()=>{lf=n0.enum(["good","bad","neutral"]),ny6=n0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((Q)=>Q!==null&&typeof Q!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},n0.object({kind:n0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:n0.coerce.string().optional(),tone:lf.optional(),muted:n0.boolean().optional(),delta:n0.coerce.string().optional(),deltaDir:n0.enum(["up","down","neutral"]).optional(),points:n0.array(n0.coerce.number()).optional(),label:n0.coerce.string().optional()}).transform(($)=>{if($.kind==="badge"&&$.label==null)$.label=$.value??"";if($.kind==="score"){let Z=Number($.value);if(Number.isNaN(Z))return{...$,kind:"text"}}return $})),ty6=n0.preprocess(($)=>{let Z=$;if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&Array.isArray(Z.cells))Z=Z.cells;if(Array.isArray(Z)&&Z.length===1&&Array.isArray(Z[0]))Z=Z[0];if(Array.isArray(Z))return Z;if(Z&&typeof Z==="object")return Object.values(Z);return Z},n0.array(ny6)),oy6={key:n0.coerce.string(),title:n0.coerce.string(),eyebrow:n0.coerce.string().optional(),headline:n0.coerce.string(),annotation:n0.coerce.string().optional(),methodology:n0.coerce.string().optional(),sources:n0.array(n0.object({name:n0.coerce.string(),logoUrl:n0.coerce.string()})).optional()},ry6=n0.discriminatedUnion("template",[n0.object({template:n0.literal("cover"),score:n0.object({value:n0.coerce.number(),max:n0.coerce.number().optional(),grade:n0.coerce.string().optional(),label:n0.coerce.string().optional()}).optional(),brandImage:n0.coerce.string().optional(),screenshot:n0.coerce.string().optional(),mobileScreenshot:n0.coerce.string().optional()}),n0.object({template:n0.literal("cta"),ctaUrl:n0.coerce.string().optional(),ctaLabel:n0.coerce.string().optional(),bullets:n0.array(n0.coerce.string()).optional()}),n0.object({template:n0.literal("series"),points:n0.array(n0.coerce.number()).min(2),xLabels:n0.array(n0.coerce.string()).min(1),unit:n0.coerce.string().optional(),callout:n0.object({index:n0.coerce.number(),value:n0.coerce.string(),tone:lf.optional()})}),n0.object({template:n0.literal("threshold"),value:n0.coerce.string().default(""),metricLabel:n0.coerce.string().optional(),ratio:n0.coerce.number(),thresholdRatio:n0.coerce.number().optional(),thresholdLabel:n0.coerce.string().default(""),tone:lf.optional()}),n0.object({template:n0.literal("stats"),stats:n0.array(n0.object({value:n0.coerce.string(),label:n0.coerce.string(),tone:lf.optional()})).min(1)}),n0.object({template:n0.literal("bars"),items:n0.array(n0.object({value:n0.coerce.string(),label:n0.coerce.string(),ratio:n0.coerce.number(),tone:lf.optional()})).min(1)}),n0.object({template:n0.literal("gauges"),gauges:n0.array(n0.object({label:n0.coerce.string(),value:n0.coerce.string(),status:n0.enum(["good","warn","bad"]).catch("warn"),caption:n0.coerce.string().optional(),ratio:n0.coerce.number().optional()})).min(1)}),n0.object({template:n0.literal("checklist"),checks:n0.array(n0.object({label:n0.coerce.string(),status:n0.enum(["pass","fail","warn"]).catch("fail"),value:n0.coerce.string().optional()})).min(1)}),n0.object({template:n0.literal("table"),columns:n0.array(n0.object({label:n0.coerce.string(),align:n0.enum(["left","right"]).optional()})).min(1),rows:n0.array(ty6).min(1),highlightRow:n0.coerce.number().optional()}),n0.object({template:n0.literal("products"),products:n0.array(n0.object({name:n0.coerce.string(),price:n0.coerce.string().optional(),image:n0.coerce.string().optional(),url:n0.coerce.string().optional()})).min(1)}),n0.object({template:n0.literal("list"),entries:n0.array(n0.object({label:n0.coerce.string(),severity:n0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:n0.coerce.number().optional()}),n0.object({template:n0.literal("keywords"),volumeLabel:n0.coerce.string().optional(),keywords:n0.array(n0.object({term:n0.coerce.string(),volume:n0.coerce.string(),position:n0.coerce.number().catch(0)})).min(1)}),n0.object({template:n0.literal("competitor"),metricLabel:n0.coerce.string().optional(),competitors:n0.array(n0.object({name:n0.coerce.string(),value:n0.coerce.string(),tone:lf.optional(),isYou:n0.boolean().optional()})).min(1)}),n0.object({template:n0.literal("scorecard"),rivalLabel:n0.coerce.string().optional(),dimensions:n0.array(n0.object({label:n0.coerce.string(),you:n0.coerce.string(),rival:n0.coerce.string().optional(),rivalName:n0.coerce.string().optional(),tone:lf.optional()})).min(1)})]),b88=n0.object({...oy6,template:ry6})});function Ek0($){let Z=[],Q=[...$.sections].sort((Y,J)=>Y.position-J.position).map((Y)=>{let J=b88.safeParse(Y.props);if(J.success)return J.data;let G=J.error.issues[0];return Z.push({section_type:Y.section_type,position:Y.position,reason:G?`${G.path.join(".")||"(root)"}: ${G.message}`:"contract violation"}),null}).filter((Y)=>Y!==null),X=Q.filter((Y)=>Y.template.template!=="cover"&&Y.template.template!=="cta").map((Y)=>({key:Y.key,title:Y.title}));return{deck:{meta:{...$.meta,scores:$.summary?.scores,scannedAt:$.scanned_at,toc:X},slides:Q},drops:Z}}var KF1=D(()=>{x88()});import{join as f88}from"path";async function sy6($){try{let Z=await fetch(`${qF({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(ay6)});if(!Z.ok)return null;let Q=await Z.json(),{deck:X}=Ek0(Q);if(!X.slides.length)return null;let Y=X.slides.find((W)=>W.template.template==="cover"),J=Y?.template,G=J&&J.template==="cover"?J:void 0;return{brand:X.meta.brand?.trim()||WF1($),score:X.meta.scores?.cover??G?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function aG($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function ey6($,Z){let Q=sm($),X=Z?.brand?.trim()||WF1(Q),Y=_88(Q,128),G=`${(E0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(Q)}`,{title:W,description:K}=v88({brand:X,domain:Q,score:Z?.score,verdict:Z?.verdict}),H=`${G}/og.png`,F=`${X} commerce report by decocms`;return[`<title>${aG(W)}</title>`,`<meta name="description" content="${aG(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="${aG(W)}" />`,`<meta property="og:description" content="${aG(K)}" />`,`<meta property="og:url" content="${aG(G)}" />`,`<meta property="og:image" content="${aG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${aG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${aG(W)}" />`,`<meta name="twitter:description" content="${aG(K)}" />`,`<meta name="twitter:image" content="${aG(H)}" />`,`<meta name="twitter:image:alt" content="${aG(F)}" />`,`<link rel="canonical" href="${aG(G)}" />`,`<link rel="icon" href="${aG(Y)}" sizes="any" />`].join(`
|
|
3368
|
+
`;await y$8(Z.repo,L);let w=O[0]??`${Fk0(X)}/${pH1(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 $F1(K,N))H.push({path:B,deleted:!0}),F.delete(B);if(H.length===0)return G;let U=X?`${X}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((N)=>N.type==="blob"&&N.path===U)){let N=await g$8(Z,F.values(),Y),{decofile:B,skipped:O}=A80(N);if(O.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:kK(Z.repo),branch:Q,packagePath:X,blocks:O.map((L)=>L.key)});H.push({path:U,content:B})}try{let{sha:N}=await Z.commitFiles({branch:Q,message:wy6($),expectedHead:G,changes:H});return N}catch(N){if(!(N instanceof l6)||J>=Oy6-1)throw N;await c$(a7(2000,200,J,2,0.5))}}}function wy6($){let Z=(Y)=>{let J=Y.slice(0,3).join(", ");return Y.length>3?`${J} (+${Y.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 X=`chore(decofile): ${Q.join("; ")}`;return P81(X,$.deps.coAuthor)}var Oy6=3,JF1;var Q88=D(()=>{gP0();Yk0();w6();D8();hZ();Uk0();JF1=new Map});import{createHmac as X88,randomBytes as jy6,timingSafeEqual as Ey6}from"crypto";function Y88(){if(jk0)return jk0;let $;try{let Z=E0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return jk0=$?Buffer.from($):jy6(32),jk0}function GF1($){let Z=$.nowMs??Date.now(),Q={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+zy6)/1000)},X=Buffer.from(JSON.stringify(Q)).toString("base64url"),Y=X88("sha256",Y88()).update(X).digest("base64url");return`${X}.${Y}`}function J88($,Z){let Q=$.indexOf(".");if(Q<0)return!1;let X=$.slice(0,Q),Y=Buffer.from($.slice(Q+1)),J=Buffer.from(X88("sha256",Y88()).update(X).digest("base64url"));if(Y.length!==J.length||!Ey6(Y,J))return!1;let G;try{G=JSON.parse(Buffer.from(X,"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 zy6=21600000,jk0=null;var G88=D(()=>{U$()});import{z as am}from"zod";function Ay6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&Py6.test($)}function U88($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function k80($){let Z=$.get("decofileScope");return ol($.var.studioContext,Z.organizationId,Z.githubRepo)}function S80($,Z){let Q=Z instanceof Error?Z.message:String(Z);if(Z instanceof l6)return $.json({error:Q},409);let X=e3(Z);if(X!==null){let Y=X===404?404:X===409||X===422?409:502;return $.json({error:Q},Y)}return $.json({error:Q},500)}function N88(){let $=new X1;return $.use("/:virtualMcpId/:branch",F88),$.use("/:virtualMcpId/:branch/*",F88),$.get("/:virtualMcpId/:branch",async(Z)=>{let Q=Z.get("decofileScope");try{let X=await k80(Z),Y=await h$8(X,Q.branch,Q.packagePath,{createBranchIfMissing:!!Q.userId}),J={ETag:`"${Y.sha}"`,"Cache-Control":"no-store","Access-Control-Allow-Origin":"*"};if(Z.req.header("if-none-match")===`"${Y.sha}"`)return Z.body(null,304,J);if(!Q.userId)return Z.body(Y.decofile,200,{...J,"content-type":"application/json"});let G=GF1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(G)},"apiHost":${JSON.stringify(U88(Z))},"decofile":${Y.decofile}}`,200,{...J,"content-type":"application/json"})}catch(X){return S80(Z,X)}}),$.get("/:virtualMcpId/:branch/meta",async(Z)=>{let Q=Z.get("decofileScope"),X=Q.packagePath?`${Q.packagePath}/.deco/meta.gen.json`:".deco/meta.gen.json";try{let Y=await k80(Z),J=await Y.readFileAtRef(Q.branch,X);if(J===null){let G=await Y.getDefaultBranch();if(G!==Q.branch)J=await Y.readFileAtRef(G,X)}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(Y){return S80(Z,Y)}}),$.patch("/:virtualMcpId/:branch",Ry6,async(Z)=>{let Q=Z.get("decofileScope"),X=Z.var.studioContext,Y=qy6.safeParse(await Z.req.json().catch(()=>null));if(!Y.success)return Z.json({error:"Invalid body",details:Y.error.issues},400);let J=Y.data;for(let G of[...Object.keys(J.set??{}),...J.delete??[]])try{Xk0(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(iH1(G))return Z.json({error:`Block key "${G}" collides with a framework resolver module and cannot be written`},400)}try{let G=await k80(Z),W=await Z88(`${Q.organizationId}/${Q.virtualMcpId}/${Q.branch}`,{client:G,branch:Q.branch,packagePath:Q.packagePath,coAuthor:im(X)},J),K=GF1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.json({version:W,token:K,apiHost:U88(Z)})}catch(G){return S80(Z,G)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let Q=Z.get("decofileScope");try{let X=await k80(Z),Y=await X.getDefaultBranch();if(Y===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 X.mergeBranches(Y,Q.branch,J)}catch(W){if(e3(W)!==409)throw W;await Dk0(X,Q.branch,Y),G=await X.mergeBranches(Y,Q.branch,J)}return G?Z.json({result:"merged",sha:G}):Z.json({result:"up-to-date"})}catch(G){if(e3(G)===409)return Z.json({error:"merge-conflict"},409);if(e3(G)===405){let K=await X.findOpenChangeRequest(Y,Q.branch)??await X.createChangeRequest({base:Y,head:Q.branch,title:`Publish ${Q.branch}`});return Z.json({result:"pull-request",number:K.number,url:K.url})}throw G}}catch(X){return S80(Z,X)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let Q=Z.get("decofileScope");try{let X=await k80(Z),Y=await X.getDefaultBranch();if(Y===Q.branch)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0,lastCommitAt:null});try{let[{aheadBy:J,behindBy:G},W]=await Promise.all([X.compare(Y,Q.branch),X.getBranch(Q.branch)]);return Z.json({baseBranch:Y,aheadBy:J,behindBy:G,lastCommitAt:W?.committedAt??null})}catch(J){if(e3(J)===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0,lastCommitAt:null});throw J}}catch(X){return S80(Z,X)}}),$}var Py6,W88=500,K88=1048576,H88=1024,Ty6=8388608,Ry6,qy6,F88;var B88=D(()=>{M61();Yk0();X8();FH();xH1();Qk0();XF1();hZ();Q88();G88();QF1();Uk0();RF();Py6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;Ry6=H9({maxSize:Ty6,onError:($)=>$.json({error:"Payload too large"},413)}),qy6=am.object({set:am.record(am.string(),am.unknown()).optional(),delete:am.array(am.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)<=W88,{message:`Patch cannot touch more than ${W88} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=K88),{message:`Each block must be at most ${K88} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=H88),{message:`Each block key must be at most ${H88} characters`}),F88=Zk0(async($,Z)=>{let Q=$.var.studioContext,X=Q.organization;if(!X)return $.json({error:"Organization scope required"},500);let Y=$.req.param("virtualMcpId"),J=$.req.param("branch");if(!Y||!J)return $.json({error:"virtualMcpId and branch are required"},400);if(!Ay6(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||!J88(B,{organizationId:X.id,virtualMcpId:Y,branch:J}))return $.json({error:"Unauthorized"},401)}if(!await d3(Q,X.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(Y);if(!W||W.organization_id!==X.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!eA0(K))return $.json({error:"Project has no preview server configured"},404);let F=W.connections?.map((B)=>B.connection_id)??[],U=I80(K,F);if(!U)return $.json({error:"Project has no GitHub repository"},404);let N=K?.runtime;return $.set("decofileScope",{organizationId:X.id,virtualMcpId:Y,branch:J,packagePath:N?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:U,userId:G}),Z()})});var O88=($)=>{let Z=new X1;if(Z.use("*",Am),Z.use("*",ma$),Z.route("/",FV0()),Z.route("/",Ms$()),Z.route("/",Ns$()),Z.route("/",x18()),Z.route("/",I18()),Z.route("/",v18()),Z.route("/",k18()),Z.route("/",sV0()),Z.route("/tools",c18()),Z.route("/",h18()),Z.route("/",J18({kvStorage:$.kvStorage})),Z.route("/",X18()),Z.route("/fs",j18({getConnection:$.getNatsConnection})),Z.route("/sandbox",e$8()),Z.route("/decofile",N88()),Z.route("/",R18()),Z.route("/",z18()),Z.route("/deco-sites",NV0()),Z.route("/hosting",Zs$()),Z.route("/monitor",Ks$()),Z.route("/sso",JV0()),Z.route("/",eV0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",ra$()),$.mountDevAssets)Z.route("/dev-assets",LV0({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("/",$o$()),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",A18()),Z.route("/mcp",JR0()),Z.route("/mcp/self",tV0()),Z.route("/mcp",KR0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var D88=D(()=>{X8();ia$();tI0();aa$();QK1();Qs$();Hs$();wV0();If();aW1();WK1();Y18();G18();E18();P18();O10();iW1();HR0();MH1();T18();q18();V18();S18();kH1();f18();u18();SH1();d18();CH1();GR0();$88();B88()});function My6($){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 Iy6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},L88=()=>{let $=new X1;return $.use("*",Iy6),$.get("/",async(Z)=>{let Q=E0(),X=Q.decoSupabaseUrl,Y=Q.decoSupabaseServiceKey;if(!X||!Y)return Z.json({apps:[]});try{let J=await CJ(X,Y,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:My6(J)})}catch(J){return console.error("[deco-apps] GET error:",J),Z.json({error:"Failed to fetch apps"},502)}}),$};var w88=D(()=>{X8();U$();ZI0()});import{z as b1}from"zod";function kU($,Z="invalid_request_error",Q=null,X=null){return{error:{message:$,type:Z,param:Q,code:X}}}function yy6($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let Q=$.substring(0,Z),X=$.substring(Z+1);if(!Q||!X)return null;return{credentialId:Q,modelId:X}}function gy6($,Z,Q){try{return JSON.parse($)}catch{throw new z88(`Invalid JSON in tool call arguments for function '${Q}' (tool_call_id: ${Z}): ${$}`)}}function hy6($){let Z={};for(let Q of $)if(Q.role==="assistant"&&Q.tool_calls)for(let X of Q.tool_calls)Z[X.id]=X.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((Y)=>{if(Y.type==="text")return{type:"text",text:Y.text};return{type:"image",image:Y.image_url.url}})};case"assistant":if(Q.tool_calls&&Q.tool_calls.length>0)return{role:"assistant",content:Q.tool_calls.map((Y)=>({type:"tool-call",toolCallId:Y.id,toolName:Y.function.name,input:gy6(Y.function.arguments,Y.id,Y.function.name)}))};return{role:"assistant",content:Q.content??""};case"tool":let X=Z[Q.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:Q.tool_call_id,toolName:X,output:{type:"text",value:Q.content}}]}}})}function uy6($){let Z=$.map((Q)=>{let X=Q.function.parameters?KF(Q.function.parameters):KF({type:"object",properties:{}});return[Q.function.name,u$({description:Q.function.description,inputSchema:X})]});return Object.fromEntries(Z)}function ly6($){if(!$)return;return{openai:{response_format:$}}}function cy6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function j88($,Z,Q,X,Y,J){let G={model:$,instructions:Z.filter((W)=>W.role==="system"),messages:Z.filter((W)=>W.role!=="system"),tools:Q,temperature:X.temperature,maxOutputTokens:X.max_tokens,topP:X.top_p,frequencyPenalty:X.frequency_penalty,presencePenalty:X.presence_penalty,stopSequences:X.stop?Array.isArray(X.stop)?X.stop:[X.stop]:void 0,abortSignal:J};return Y?{...G,providerOptions:Y}:G}function E88($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var Vy6=256,ky6,Sy6,Cy6,_y6,vy6,by6,xy6,fy6,z88,P88,A88;var T88=D(()=>{$6();X8();mm();sK();ky6=b1.object({type:b1.literal("function"),function:b1.object({name:b1.string(),description:b1.string().optional(),parameters:b1.record(b1.string(),b1.unknown()).optional()})}),Sy6=b1.object({id:b1.string(),type:b1.literal("function"),function:b1.object({name:b1.string(),arguments:b1.string()})}),Cy6=b1.discriminatedUnion("role",[b1.object({role:b1.literal("system"),content:b1.string(),name:b1.string().optional()}),b1.object({role:b1.literal("user"),content:b1.union([b1.string(),b1.array(b1.union([b1.object({type:b1.literal("text"),text:b1.string()}),b1.object({type:b1.literal("image_url"),image_url:b1.object({url:b1.string(),detail:b1.string().optional()})})]))]),name:b1.string().optional()}),b1.object({role:b1.literal("assistant"),content:b1.string().nullable().optional(),name:b1.string().optional(),tool_calls:b1.array(Sy6).optional()}),b1.object({role:b1.literal("tool"),content:b1.string(),tool_call_id:b1.string()})]),_y6=b1.object({type:b1.literal("text")}),vy6=b1.object({type:b1.literal("json_object")}),by6=b1.object({type:b1.literal("json_schema"),json_schema:b1.object({name:b1.string(),description:b1.string().optional(),schema:b1.record(b1.string(),b1.unknown()),strict:b1.boolean().optional()})}),xy6=b1.union([_y6,vy6,by6]),fy6=b1.object({model:b1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:b1.array(Cy6),stream:b1.boolean().optional().default(!1),temperature:b1.number().min(0).max(2).optional(),max_tokens:b1.number().positive().optional(),top_p:b1.number().min(0).max(1).optional(),frequency_penalty:b1.number().min(-2).max(2).optional(),presence_penalty:b1.number().min(-2).max(2).optional(),stop:b1.union([b1.string(),b1.array(b1.string())]).optional(),tools:b1.array(ky6).optional(),tool_choice:b1.union([b1.literal("auto"),b1.literal("none"),b1.literal("required"),b1.object({type:b1.literal("function"),function:b1.object({name:b1.string()})})]).optional(),response_format:xy6.optional(),user:b1.string().optional()});z88=class z88 extends Error{constructor($){super($);this.name="MessageConversionError"}};P88=new X1;P88.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),Q=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(kU("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(kU("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(kU("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let X=await $.req.json(),Y=fy6.safeParse(X);if(!Y.success){let w=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(kU(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let J=Y.data,G=yy6(J.model);if(!G)return $.json(kU("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)=>Kz(E.providerId));if(!j)return $.json(kU("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(kU(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),U=hy6(J.messages),N=J.tools?uy6(J.tools):void 0,B=ly6(J.response_format),O=cy6(),L=Math.floor(Date.now()/1000);if(J.stream)return OO($,async(w)=>{let j=j88(F,U,N,J,B,$.req.raw.signal);try{let E=_c(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>=Vy6)await A()}else if(q.type==="tool-call"){await A();let x=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:x,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:E88(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=j88(F,U,N,J,B,$.req.raw.signal),j=await Cc(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:E88(j.finishReason)}],usage:{prompt_tokens:j.usage?.inputTokens??0,completion_tokens:j.usage?.outputTokens??0,total_tokens:j.usage?.totalTokens??0}})}}catch(X){let Y=X;if(Y.name==="AbortError")return $.json(kU("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(kU(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(kU(Y.message,"server_error"),500)}});A88=P88});function dy6($){if(typeof $!=="object"||$===null)return!1;let Q=$.githubRepo?.url;return typeof Q==="string"&&Q.length>0}function R88(){let $=new X1;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"),X=p0(Q);if(!X)return Z.json({error:"Authentication required"},401);let J=(Z.req.query("site")??"").trim().toLowerCase();if(!N7(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","=",X).execute(),W=[];for(let H of G){if(!H.slug||w9(H))continue;let F=await Q.storage.virtualMcps.list(H.id);for(let U of F){if(T30(U)!==J)continue;if(!dy6(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 q88=D(()=>{X8();o3()});var I88;var M88=D(()=>{I88={name:"decocms",version:"4.392.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 py6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??iy6}}var V88,iy6="https://ph.studio.decocms.com",k88;var S88=D(()=>{X8();yo();kx();D9();U$();CW1();M88();V88=new X1;V88.get("/",($)=>{let Z={version:I88.version,theme:J1$(),...NK().logo&&{logo:NK().logo},...dB()&&{internalUrl:yl1()},...E0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!E0().firecrawlApiKey,hostingEnabled:!!E0().controlplaneRestUrl&&!!E0().controlplaneServiceToken,hostingControlPlaneGa:E0().hostingControlPlaneGa,monitorEnabled:!!E0().clickhouseAnalyticsUrl&&!!E0().clickhouseAnalyticsPassword,monitorGa:E0().monitorGa,plansEnabled:E0().plansEnabled,auth:ir$(),posthog:py6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:MO()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});k88=V88});function sm($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function WF1($){return(sm($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((Q)=>Q.charAt(0).toUpperCase()+Q.slice(1)).join(" ")}function _88($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(sm($))}&sz=${Z}`}function C88($,Z){let Q=$.trim();if(Q.length<=Z)return Q;let X=Q.slice(0,Z-1),Y=X.lastIndexOf(" ");return`${(Y>Z*0.6?X.slice(0,Y):X).trimEnd()}\u2026`}function v88($){let{brand:Z,domain:Q,score:X,verdict:Y}=$,J=typeof X==="number"?`${Z} commerce report \u2014 ${Math.round(X)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,G=`See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,W=Y?.trim()?C88(`${Y.trim().replace(/\s+/g," ")} \u2014 ${G}`,200):C88(`How does ${Q} really perform? ${G}`,200);return{title:J,description:W}}import{z as n0}from"zod";var lf,ny6,ty6,oy6,ry6,b88;var x88=D(()=>{lf=n0.enum(["good","bad","neutral"]),ny6=n0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((Q)=>Q!==null&&typeof Q!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},n0.object({kind:n0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:n0.coerce.string().optional(),tone:lf.optional(),muted:n0.boolean().optional(),delta:n0.coerce.string().optional(),deltaDir:n0.enum(["up","down","neutral"]).optional(),points:n0.array(n0.coerce.number()).optional(),label:n0.coerce.string().optional()}).transform(($)=>{if($.kind==="badge"&&$.label==null)$.label=$.value??"";if($.kind==="score"){let Z=Number($.value);if(Number.isNaN(Z))return{...$,kind:"text"}}return $})),ty6=n0.preprocess(($)=>{let Z=$;if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&Array.isArray(Z.cells))Z=Z.cells;if(Array.isArray(Z)&&Z.length===1&&Array.isArray(Z[0]))Z=Z[0];if(Array.isArray(Z))return Z;if(Z&&typeof Z==="object")return Object.values(Z);return Z},n0.array(ny6)),oy6={key:n0.coerce.string(),title:n0.coerce.string(),eyebrow:n0.coerce.string().optional(),headline:n0.coerce.string(),annotation:n0.coerce.string().optional(),methodology:n0.coerce.string().optional(),sources:n0.array(n0.object({name:n0.coerce.string(),logoUrl:n0.coerce.string()})).optional()},ry6=n0.discriminatedUnion("template",[n0.object({template:n0.literal("cover"),score:n0.object({value:n0.coerce.number(),max:n0.coerce.number().optional(),grade:n0.coerce.string().optional(),label:n0.coerce.string().optional()}).optional(),brandImage:n0.coerce.string().optional(),screenshot:n0.coerce.string().optional(),mobileScreenshot:n0.coerce.string().optional()}),n0.object({template:n0.literal("cta"),ctaUrl:n0.coerce.string().optional(),ctaLabel:n0.coerce.string().optional(),bullets:n0.array(n0.coerce.string()).optional()}),n0.object({template:n0.literal("series"),points:n0.array(n0.coerce.number()).min(2),xLabels:n0.array(n0.coerce.string()).min(1),unit:n0.coerce.string().optional(),callout:n0.object({index:n0.coerce.number(),value:n0.coerce.string(),tone:lf.optional()})}),n0.object({template:n0.literal("threshold"),value:n0.coerce.string().default(""),metricLabel:n0.coerce.string().optional(),ratio:n0.coerce.number(),thresholdRatio:n0.coerce.number().optional(),thresholdLabel:n0.coerce.string().default(""),tone:lf.optional()}),n0.object({template:n0.literal("stats"),stats:n0.array(n0.object({value:n0.coerce.string(),label:n0.coerce.string(),tone:lf.optional()})).min(1)}),n0.object({template:n0.literal("bars"),items:n0.array(n0.object({value:n0.coerce.string(),label:n0.coerce.string(),ratio:n0.coerce.number(),tone:lf.optional()})).min(1)}),n0.object({template:n0.literal("gauges"),gauges:n0.array(n0.object({label:n0.coerce.string(),value:n0.coerce.string(),status:n0.enum(["good","warn","bad"]).catch("warn"),caption:n0.coerce.string().optional(),ratio:n0.coerce.number().optional()})).min(1)}),n0.object({template:n0.literal("checklist"),checks:n0.array(n0.object({label:n0.coerce.string(),status:n0.enum(["pass","fail","warn"]).catch("fail"),value:n0.coerce.string().optional()})).min(1)}),n0.object({template:n0.literal("table"),columns:n0.array(n0.object({label:n0.coerce.string(),align:n0.enum(["left","right"]).optional()})).min(1),rows:n0.array(ty6).min(1),highlightRow:n0.coerce.number().optional()}),n0.object({template:n0.literal("products"),products:n0.array(n0.object({name:n0.coerce.string(),price:n0.coerce.string().optional(),image:n0.coerce.string().optional(),url:n0.coerce.string().optional()})).min(1)}),n0.object({template:n0.literal("list"),entries:n0.array(n0.object({label:n0.coerce.string(),severity:n0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:n0.coerce.number().optional()}),n0.object({template:n0.literal("keywords"),volumeLabel:n0.coerce.string().optional(),keywords:n0.array(n0.object({term:n0.coerce.string(),volume:n0.coerce.string(),position:n0.coerce.number().catch(0)})).min(1)}),n0.object({template:n0.literal("competitor"),metricLabel:n0.coerce.string().optional(),competitors:n0.array(n0.object({name:n0.coerce.string(),value:n0.coerce.string(),tone:lf.optional(),isYou:n0.boolean().optional()})).min(1)}),n0.object({template:n0.literal("scorecard"),rivalLabel:n0.coerce.string().optional(),dimensions:n0.array(n0.object({label:n0.coerce.string(),you:n0.coerce.string(),rival:n0.coerce.string().optional(),rivalName:n0.coerce.string().optional(),tone:lf.optional()})).min(1)})]),b88=n0.object({...oy6,template:ry6})});function Ek0($){let Z=[],Q=[...$.sections].sort((Y,J)=>Y.position-J.position).map((Y)=>{let J=b88.safeParse(Y.props);if(J.success)return J.data;let G=J.error.issues[0];return Z.push({section_type:Y.section_type,position:Y.position,reason:G?`${G.path.join(".")||"(root)"}: ${G.message}`:"contract violation"}),null}).filter((Y)=>Y!==null),X=Q.filter((Y)=>Y.template.template!=="cover"&&Y.template.template!=="cta").map((Y)=>({key:Y.key,title:Y.title}));return{deck:{meta:{...$.meta,scores:$.summary?.scores,scannedAt:$.scanned_at,toc:X},slides:Q},drops:Z}}var KF1=D(()=>{x88()});import{join as f88}from"path";async function sy6($){try{let Z=await fetch(`${qF({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(ay6)});if(!Z.ok)return null;let Q=await Z.json(),{deck:X}=Ek0(Q);if(!X.slides.length)return null;let Y=X.slides.find((W)=>W.template.template==="cover"),J=Y?.template,G=J&&J.template==="cover"?J:void 0;return{brand:X.meta.brand?.trim()||WF1($),score:X.meta.scores?.cover??G?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function aG($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function ey6($,Z){let Q=sm($),X=Z?.brand?.trim()||WF1(Q),Y=_88(Q,128),G=`${(E0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(Q)}`,{title:W,description:K}=v88({brand:X,domain:Q,score:Z?.score,verdict:Z?.verdict}),H=`${G}/og.png`,F=`${X} commerce report by decocms`;return[`<title>${aG(W)}</title>`,`<meta name="description" content="${aG(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="${aG(W)}" />`,`<meta property="og:description" content="${aG(K)}" />`,`<meta property="og:url" content="${aG(G)}" />`,`<meta property="og:image" content="${aG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${aG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${aG(W)}" />`,`<meta name="twitter:description" content="${aG(K)}" />`,`<meta name="twitter:image" content="${aG(H)}" />`,`<meta name="twitter:image:alt" content="${aG(F)}" />`,`<link rel="canonical" href="${aG(G)}" />`,`<link rel="icon" href="${aG(Y)}" sizes="any" />`].join(`
|
|
3369
3369
|
`)}function $g6($,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}
|
|
3370
3370
|
</head>`)}function y88($){let Z=new X1;return Z.get("/:domain/og.png",async(Q)=>{let X=sm(Q.req.param("domain")),Y=async()=>{let J=$?Bun.file(f88($,"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(`${qF({})}/api/v2/public/diagnostics/${encodeURIComponent(X)}/og.png`,{signal:AbortSignal.timeout(Zg6)}),G=J.headers.get("content-type")??"";if(!J.ok||!G.startsWith("image/")||!J.body)return Y();return Q.body(J.body,200,{"Content-Type":G,"Cache-Control":"public, max-age=0, s-maxage=604800"})}catch{return Y()}}),Z.get("/:domain",async(Q)=>{let X=Q.req.param("domain"),Y=$?f88($,"index.html"):null,J=Y?Bun.file(Y):null;if(!J||!await J.exists())return Q.notFound();let G=await J.text();try{let W=await sy6(sm(X)),K=ey6(X,W);return Q.html($g6(G,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return Q.html(G)}}),Z}var ay6=2500,Zg6=1e4;var g88=D(()=>{X8();KF1();nP();U$()});function C80($,Z){return fetch(`${qF({})}${$}`,Z)}async function Qg6($,Z,Q){let X=new URLSearchParams;if(Z)X.set("pw",Z);if(Q)X.set("lang",Q);let Y=X.toString()?`?${X.toString()}`:"",J=await C80(`/api/v2/public/diagnostics/${encodeURIComponent($)}${Y}`,{headers:{Accept:"application/json"}});if(J.status===404)return{status:"not_found",deck:null,scanned_at:null,drops:[]};if(!J.ok)throw Error(`report read HTTP ${J.status}`);let G=await J.json(),{deck:W,drops:K}=Ek0(G);return{status:W.slides.length?"ready":"empty",deck:W,scanned_at:G.scanned_at,drops:K}}var Xg6,LO,h88=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},u88;var l88=D(()=>{X8();qG();nP();KF1();Xg6=new Set(["complete","errored","terminated","unknown"]),LO=new X1;LO.use("*",async($,Z)=>{let Q=await V8.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});LO.use("/link-token/*",h88);LO.use("/suggest",h88);LO.get("/site/:domain",async($)=>{let Z=$.req.param("domain").trim();if(!Z)return $.json({error:"domain is required"},400);let Q=$.get("reportUser"),X=$.req.query("key")?.trim()||void 0,Y=$.req.query("lang")?.trim()||void 0;try{let J=await Qg6(Z,X,Y);if($.header("Cache-Control","private, no-store"),Q||!J.deck)return $.json(J);return $.json({...J,deck:{...J.deck,slides:J.deck.slides.slice(0,1)},truncated:J.status==="ready"})}catch{return $.json({error:"report read failed"},502)}});LO.post("/run",async($)=>{let Z=$.get("reportUser"),Q;try{Q=await $.req.json()}catch{return $.json({error:"invalid JSON"},400)}let X=typeof Q.domain==="string"?Q.domain.trim():"";if(!X)return $.json({error:"domain is required"},400);let Y=Z?.email,J=typeof Q.distinctId==="string"&&Q.distinctId.trim()&&Q.distinctId.length<=200?Q.distinctId.trim():void 0;try{let G=await C80("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${pP({})}`},body:JSON.stringify({url:X,...Y?{email:Y}:{},distinct_id:J})});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)}});LO.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let Q=await C80(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${pP({})}`}});if(!Q.ok)return $.json({error:`status HTTP ${Q.status}`},502);let Y=(await Q.json()).status??"unknown",J={done:Xg6.has(Y),status:Y};return $.json(J)}catch{return $.json({error:"status failed"},502)}});LO.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let Q=await C80(`/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)}});LO.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let Q=await C80(`/api/v2/public/suggest?q=${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(!Q.ok)return $.json({suggestions:[]});let X=await Q.json();return $.json({suggestions:Array.isArray(X.suggestions)?X.suggestions:[]})}catch{return $.json({suggestions:[]})}});u88=LO});var Yg6=1048576,HF1;var c88=D(()=>{X8();FH();U$();LW1();HF1=new X1;HF1.post("/webhook",H9({maxSize:Yg6,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=E0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let Q=await $.req.text();if(!Yr$(Q,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let Y=Jr$(Q);if(!Y)return $.json({error:"invalid payload"},400);let J=await Gr$(Y);return console.log("stripe webhook",{eventId:Y.id,type:Y.type,livemode:Y.livemode,...J}),$.json({received:!0})})});import{timingSafeEqual as Jg6}from"crypto";function Kg6($,Z,Q){if(!Z?.startsWith("sha256="))return!1;let X=new Bun.CryptoHasher("sha256",Q).update($).digest("hex"),Y=Z.slice(7);if(Y.length!==X.length)return!1;return Jg6(Buffer.from(Y),Buffer.from(X))}function Hg6($,Z){let Q=Z,X=Q?.repository?.name,Y=Q?.repository?.owner?.login;if(typeof X!=="string"||typeof Y!=="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:Y,repoName:X,number:G}))}function d88($){let Z=new X1;return Z.post("/webhook",H9({maxSize:Gg6,onError:(Q)=>Q.json({error:"payload too large"},413)}),async(Q)=>{let X=process.env.GITHUB_WEBHOOK_SECRET;if(!X)return Q.json({error:"github webhook not configured"},503);let Y=await Q.req.text();if(!Kg6(Y,Q.req.header("x-hub-signature-256"),X))return Q.json({error:"invalid signature"},400);let J=Q.req.header("x-github-event");if(J!=="push"&&!Wg6.has(J??""))return Q.json({ok:!0,ignored:"event"});let G;try{G=JSON.parse(Y)}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"});let N=(await p81())?.markTenantPoolsDirty(F,H)??[];return Q.json({ok:!0,pools:N})}let W=Hg6(J??"",G);if(W.length===0)return Q.json({ok:!0,ignored:"no-pr"});let K=await Fg6($,W);return Q.json({ok:!0,refreshed:K})}),Z}async function Fg6($,Z){let Q=0;for(let X of Z){let Y=$.taskBoard(),J;try{J=await Y.findPrLinks(X)}catch(G){console.error("[github-webhook] pr link lookup failed:",G);continue}for(let G of J)try{let W=await Y.getById(G.taskBoardItemId,G.organizationId),K=W?await $.contextFactory()(G.organizationId,W.assignedBy??W.createdBy):null;if(!K)continue;if(await zI$(K,G.organizationId,G.taskBoardItemId)!==null)Q++}catch(W){console.error(`[github-webhook] pr card refresh failed for ${G.taskBoardItemId}:`,W)}}return Q}var Gg6=5242880,Wg6;var m88=D(()=>{X8();FH();dK();L7();Wg6=new Set(["check_suite","issue_comment"])});function i88($){let Z=new YO($.db,new aJ($.encryptionKey)),Q=new X1;return Q.get("/attachments/:token",async(X)=>{let Y=gq$(X.req.param("token"));if(!Y)return X.json({error:"Invalid or expired link"},404);let J=await Z.getByOrg(Y.organizationId);if(!J)return X.json({error:"Jira is not connected"},404);let W=await new wY(J.siteUrl,J.email,J.apiToken).downloadAttachment(Y.attachmentId);if(!W.ok||!W.body)return X.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 p88=D(()=>{X8();Gz();s61();Gj()});function n88($){let Z=new YO($.db,new aJ($.encryptionKey));async function Q(Y,J){let G=ai$(J);if(!G)return;let W=await Z.getByWebhookSecret(Y);if(!W?.enabled)return;let K=await HW($.db,W.organizationId);if(!K)return;if(await YI0(K,W,G)==="started")console.log(`[jira-webhook] started a run for ${G.issueKey} entering "${G.toStatus}"`)}let X=new X1;return X.post("/webhook/:secret",H9({maxSize:Ug6}),async(Y)=>{let J=Y.req.param("secret");if(!await Z.getByWebhookSecret(J))return Y.json({error:"Unknown webhook"},404);let W;try{W=await Y.req.json()}catch{return Y.json({error:"Body must be JSON"},400)}return Q(J,W).catch((K)=>{console.error("[jira-webhook] trigger failed",K)}),Y.body(null,202)}),X}var Ug6=1048576;var t88=D(()=>{X8();FH();Gz();JI0();Tx()});import{DBOS as zk0,SchedulerMode as Ng6}from"@dbos-inc/dbos-sdk";function r88($){UF1=$}function a88(){if(!UF1)throw Error("[jira-trigger] runtime not initialized \u2014 setJiraTriggerSweepRuntime() must run before the workflow fires");return UF1}function s88(){let $=a88();return new YO($.db,new aJ($.encryptionKey))}async function Dg6($,Z){try{let Q=await s88().getById($);if(!Q?.enabled||!Q.boardId)return{integrationId:$,started:0};let X=await HW(a88().db,Q.organizationId);if(!X)return{integrationId:$,started:0};if((await X.storage.jiraIntegrations.listAutomations(Q.organizationId)).length===0)return{integrationId:$,started:0};let J=new wY(Q.siteUrl,Q.email,Q.apiToken),W=`(${await J.getBoardScopeJql(Q.boardId)}) AND status CHANGED AFTER "-${o88}m"`,K=0,H;for(let F=0;F<Og6;F++){let U=await J.searchIssues({jql:W,nextPageToken:H,expandChangelog:!0});for(let N of U.issues){let B=si$(N,N.changelog?.histories??[],Z);for(let O of B)if(await YI0(X,Q,O)==="started")K++}if(H=U.nextPageToken??void 0,!H)break}return{integrationId:$,started:K}}catch(Q){return{integrationId:$,started:0,error:Q instanceof Error?Q.message:String(Q)}}}async function Lg6($,Z){let Q=new Date($.getTime()-o88*60000),X=await zk0.runStep(()=>s88().listEnabledIds(),{name:"loadJiraIntegrations"});if(X.length===0)return;let Y=await Promise.all(X.map((J)=>zk0.runStep(()=>Dg6(J,Q),{name:`sweepJira:${J}`})));for(let J of Y)if(J.error)console.warn(`[jira-trigger] integration ${J.integrationId} failed: ${J.error}`);else if(J.started>0)console.log(`[jira-trigger] integration ${J.integrationId} started ${J.started} run(s) the webhook missed`)}function e88(){if(FF1)return;FF1=zk0.registerWorkflow(Lg6,{name:"jiraTriggerSweepWorkflow"}),zk0.registerScheduled(FF1,{name:"jiraTriggerSweepWorkflow",crontab:Bg6,mode:Ng6.ExactlyOncePerIntervalWhenActive})}var Bg6="7-59/10 * * * *",o88=35,Og6=5,UF1=null,FF1=null;var $48=D(()=>{Gz();Tx();Gj();JI0()});function Z48($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var Q48,wg6,jg6,X48;var Y48=D(()=>{X8();UK();$d();kl();Q48=new X1,wg6=["range","if-none-match","if-modified-since"],jg6=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];Q48.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),Q=Z.organization?.id;if(!Z.auth?.user?.id){if(Pm($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new A$(401,{message:"Authentication required"})}if(!Q)throw new A$(401,{message:"Organization context required"});let X=$.req.path.replace(/^.*\/files\//,"");if(!X)throw new A$(400,{message:"Missing file key"});let Y=await n00(X,Z);if(!Y)throw new A$(503,{message:"Object storage not configured"});if(Y.startsWith("data:")&&p3()){let K=Y.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new A$(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 Z48(N,H),new Response(U,{status:200,headers:N})}let J=new Headers;for(let K of wg6){let H=$.req.header(K);if(H)J.set(K,H)}let G=await fetch(Y,{headers:J});if(G.status===403||G.status===404)throw new A$(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:`,X),new A$(502,{message:"Upstream storage error"});let W=new Headers;for(let K of jg6){let H=G.headers.get(K);if(H)W.set(K,H)}return W.set("Cache-Control","private, max-age=86400"),Z48(W,W.get("content-type")??""),new Response(G.body,{status:G.status,headers:W})});X48=Q48});var _80=b((cf)=>{var Eg6=cf&&cf.__createBinding||(Object.create?function($,Z,Q,X){if(X===void 0)X=Q;var Y=Object.getOwnPropertyDescriptor(Z,Q);if(!Y||("get"in Y?!Z.__esModule:Y.writable||Y.configurable))Y={enumerable:!0,get:function(){return Z[Q]}};Object.defineProperty($,X,Y)}:function($,Z,Q,X){if(X===void 0)X=Q;$[X]=Z[Q]}),zg6=cf&&cf.__exportStar||function($,Z){for(var Q in $)if(Q!=="default"&&!Object.prototype.hasOwnProperty.call(Z,Q))Eg6(Z,$,Q)};Object.defineProperty(cf,"__esModule",{value:!0});zg6(lJ(),cf)});var W48=b((J48)=>{Object.defineProperty(J48,"__esModule",{value:!0});J48.version=void 0;J48.version="3.4.0"});var F48=b((SU)=>{var Pg6=SU&&SU.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(SU,"__esModule",{value:!0});SU.NodeTransport=SU.VERSION=void 0;SU.nodeResolveHost=Ig6;var g5=_80(),Ag6=q0("net"),NF1=q0("tls"),Tg6=q0("path"),K48=q0("fs"),Rg6=Pg6(q0("dns")),qg6=W48();SU.VERSION=qg6.version;var Mg6="nats.js";class H48{socket;version;lang;yields=[];signal=(0,g5.deferred)();closedNotification=(0,g5.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=Mg6,this.version=SU.VERSION}async connect($,Z){this.tlsName=$.tlsName,this.options=Z;let{tls:Q}=this.options,{handshakeFirst:X}=Q||{};try{if(X===!0)this.socket=await this.tlsFirst($);else this.socket=await this.dial($);if(this.done)this.socket?.destroy();let Y=await this.peekInfo();(0,g5.checkOptions)(Y,Z);let{tls_required:J,tls_available:G}=Y,W=G===!0&&Z.tls!==null;if(!X&&(J||W))this.socket=await this.startTLS();if(this.done)this.socket?.destroy();if(J&&this.socket.encrypted!==!0)throw g5.errors.InvalidArgumentError.format("tls","is not available on this server");return this.connected=!0,this.setupHandlers(),this.signal.resolve(),Promise.resolve()}catch(Y){let J=Y;if(!J)J=new g5.errors.ConnectionError("error connecting - node provided an undefined error");let{code:G}=J,W=G==="ECONNREFUSED"?new g5.errors.ConnectionError("connection refused",{cause:J}):J;throw this.socket?.destroy(),W}}dial($){let Z=(0,g5.deferred)(),Q,X=(0,Ag6.createConnection)($.port,$.hostname,()=>{Z.resolve(X),X.removeAllListeners()});return X.on("error",(Y)=>{Q=Y}),X.on("close",()=>{X.removeAllListeners(),Z.reject(Q)}),X.setNoDelay(!0),Z}get isClosed(){return this.done}close($){return this._closed($,!1)}peekInfo(){let $=(0,g5.deferred)(),Z;return this.socket.on("data",(Q)=>{this.yields.push(Q);let X=g5.DataBuffer.concat(...this.yields),Y=(0,g5.extractProtocolMessage)(X);if(Y!=="")try{let J=g5.INFO.exec(Y);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,g5.deferred)();try{if($=(0,Tg6.resolve)($),!(0,K48.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,K48.readFile)($,(Q,X)=>{if(Q)return Z.reject(Q);Z.resolve(X)})}catch(Q){Z.reject(Q)}return Z}async loadClientCerts(){let $={},{certFile:Z,cert:Q,caFile:X,ca:Y,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(X){let W=await this.loadFile(X);if(W)$.ca=[W]}else if(Y)$.ca=Y;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 Y=await this.loadClientCerts()||{};Q=(0,g5.extend)(Q,this.options.tls,Y)}catch(Y){return Promise.reject(new g5.errors.ConnectionError(Y.message,{cause:Y}))}let X=(0,g5.deferred)();try{let Y=(0,NF1.connect)($.port,$.hostname,Q,()=>{Y.removeAllListeners(),X.resolve(Y)});Y.on("error",(J)=>{Z=J}),Y.on("secureConnect",()=>{if(Q.rejectUnauthorized===!1)return;if(!Y.authorized)throw Y.authorizationError}),Y.on("close",()=>{X.reject(Z),Y.removeAllListeners()}),Y.setNoDelay(!0)}catch(Y){X.reject(new g5.errors.ConnectionError(Y.message,{cause:Y}))}return X}async startTLS(){let $,Z={socket:this.socket,servername:this.tlsName,rejectUnauthorized:!0};if(typeof this.options.tls==="object")try{let X=await this.loadClientCerts()||{};Z=(0,g5.extend)(Z,this.options.tls,X)}catch(X){return Promise.reject(new g5.errors.ConnectionError(X.message,{cause:X}))}let Q=(0,g5.deferred)();try{let X=(0,NF1.connect)(Z,()=>{X.removeAllListeners(),Q.resolve(X)});X.on("error",(Y)=>{$=Y}),X.on("secureConnect",()=>{if(Z.rejectUnauthorized===!1)return;if(!X.authorized)throw X.authorizationError}),X.on("close",()=>{Q.reject($),X.removeAllListeners()})}catch(X){Q.reject(new g5.errors.ConnectionError(X.message,{cause:X}))}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,g5.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,g5.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 NF1.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,g5.render)($)}`);let Z=(0,g5.deferred)();try{this.socket.write($,(Q)=>{if(Q){if(this.options.debug)console.error(`!!! ${(0,g5.render)($)}: ${Q}`);return Z.reject(Q)}return Z.resolve()})}catch(Q){if(this.options.debug)console.error(`!!! ${(0,g5.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}}SU.NodeTransport=H48;function Ig6($){let Z=(0,g5.deferred)();return Rg6.default.lookup($,{all:!0},(Q,X)=>{if(Q){Z.reject(Q);return}let Y=[];for(let J of X)Y.push(J.address);if(Y.length===0)Y.push($);Z.resolve(Y)}),Z}});var D48=b((O48)=>{Object.defineProperty(O48,"__esModule",{value:!0});O48.connect=Vg6;var U48=F48(),N48=_80(),B48=_80();function Vg6($={}){if((0,B48.hasWsProtocol)($))return Promise.reject(B48.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,N48.setTransportFactory)({factory:()=>{return new U48.NodeTransport},dnsResolveFn:U48.nodeResolveHost}),N48.NatsConnectionImpl.connect($)}});var L48=b((wO)=>{var Sg6=wO&&wO.__createBinding||(Object.create?function($,Z,Q,X){if(X===void 0)X=Q;var Y=Object.getOwnPropertyDescriptor(Z,Q);if(!Y||("get"in Y?!Z.__esModule:Y.writable||Y.configurable))Y={enumerable:!0,get:function(){return Z[Q]}};Object.defineProperty($,X,Y)}:function($,Z,Q,X){if(X===void 0)X=Q;$[X]=Z[Q]}),Cg6=wO&&wO.__exportStar||function($,Z){for(var Q in $)if(Q!=="default"&&!Object.prototype.hasOwnProperty.call(Z,Q))Sg6(Z,$,Q)};Object.defineProperty(wO,"__esModule",{value:!0});wO.connect=void 0;var _g6=D48();Object.defineProperty(wO,"connect",{enumerable:!0,get:function(){return _g6.connect}});Cg6(_80(),wO)});function z48($){let Z=$?.connectFn??fg6,Q=null,X=null,Y=!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,X=null,H()})().catch(()=>{})}async function U(N,B){let O=0;while(!J)try{Q=await Z({servers:N,timeout:xg6,reconnect:!0,maxReconnectAttempts:-1,...B?{authenticator:B}:{}}),console.log(`[NatsProvider] Connected to ${Q.getServer()} after ${O} attempt(s)`),X=null,G=!1,F(Q),H();return}catch{O++;let L=a7(bg6,vg6,O-1,2,0.5);await c$(L)}}return{init(N,B){if(Y)return;Y=!0,J=!1;let O=B?.creds?w48.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(!X)X=E48.jetstream(Q);return X},onReady(N){if(W.push(N),K())try{N()}catch{}},async drain(){if(J=!0,Y=!1,X=null,G=!1,Q){let N=Q;Q=null,await N.drain().catch(()=>{})}}}}function fg6($){return j48.connect($)}var w48,j48,E48,vg6=100,bg6=3000,xg6=3000;var P48=D(()=>{D8();w48=C(Vi(),1),j48=C(L48(),1),E48=C(mU(),1)});function Pk0($){let Z=$?.ttlMs??60000,Q=$?.maxSize??1e4,X=$?.updateRecencyOnGet??!1,Y=new Map;function J(){if(Y.size<=Q)return;let G=Date.now();for(let[W,K]of Y)if(K.expiresAt<=G)Y.delete(W);while(Y.size>Q){let W=Y.keys().next().value;if(W===void 0)break;Y.delete(W)}}return{get(G){let W=Y.get(G);if(!W)return;if(W.expiresAt<=Date.now()){Y.delete(G);return}if(X)Y.delete(G),Y.set(G,W);return W.value},set(G,W){Y.delete(G),Y.set(G,{value:W,expiresAt:Date.now()+Z}),J()},delete(G){Y.delete(G)},clear(){Y.clear()},size(){return Y.size}}}function Ak0($,Z){return`${$}.${Z}`}class BF1{cache;constructor($){this.cache=Pk0({ttlMs:$?.ttlMs??yg6,maxSize:$?.maxSize??gg6})}async get($,Z){return this.cache.get(Ak0($,Z))??null}async set($,Z,Q){this.cache.set(Ak0($,Z),Q)}async invalidate($,Z){this.cache.delete(Ak0($,Z)),this.cache.delete(Ak0($,`${Z}:decisions`))}teardown(){this.cache.clear()}}var yg6=600000,gg6=5000;var A48=()=>{};function Tk0($,Z){return`${$}:${Z}`}function OF1($){let Z=Pk0({ttlMs:$?.ttlMs??hg6,maxSize:$?.maxSize??ug6}),Q=$?.getConnection,X=crypto.randomUUID(),Y=new TextEncoder,J=new TextDecoder,G=null;function W(K,H){let F=Q?.();if(!F)return;try{F.publish(T48,Y.encode(JSON.stringify({organizationId:K,keyId:H,originId:X})))}catch(U){console.warn("[ProviderKeyCache] Publish failed (non-critical):",U)}}return{get(K,H){return Z.get(Tk0(K,H))},set(K,H,F){Z.set(Tk0(K,H),F)},invalidate(K,H){Z.delete(Tk0(K,H)),W(K,H)},start(){if(G)return;let K=Q?.();if(!K)return;G=K.subscribe(T48),(async()=>{for await(let H of G)try{let F=JSON.parse(J.decode(H.data));if(F.originId===X)continue;Z.delete(Tk0(F.organizationId,F.keyId))}catch{}})().catch(console.error)},teardown(){G?.unsubscribe(),G=null,Z.clear()}}}var T48="studio.ai-provider-keys.invalidate",hg6=30000,ug6=5000;var R48=()=>{};class DF1{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,X=Z.subscribe("studio.decopilot.cancel");this.subscription=X,(async()=>{for await(let Y of X)try{let J=JSON.parse(Q.decode(Y.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 q48=($)=>{let Z;return()=>Z??=$()},LF1,wF1;var M48=D(()=>{R6();LF1=q48(()=>z$.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),wF1=q48(()=>z$.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function ng6($=k48){return{name:JU,subjects:[`${r91}.>`],storage:BH.StorageType.File,max_age:dg6,max_bytes:ig6,max_msgs_per_subject:pg6,discard:BH.DiscardPolicy.Old,retention:BH.RetentionPolicy.Limits,duplicate_window:mg6,num_replicas:$}}class S48{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 I48($){let Z=V48.headers();for(let[Q,X]of Object.entries($))Z.set(Q,X);return Z}function ag6($,Z){let Q=0;return{publish(X,Y,J,G){X.publish(Y,J,G?{headers:G}:void 0).catch((W)=>{if(Q++,cg6().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 sg6($,Z){return $.info?.cluster?Z:1}function eg6($){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 jF1{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(X,Y)=>{let J=ng6(Y);try{await X.streams.info(JU),await X.streams.update(JU,J)}catch(G){if(G instanceof Error&&G.message.includes("stream not found"))await X.streams.add(J),await X.streams.update(JU,J);else if(G instanceof Error&&/can ?not change.*storage|storage type/i.test(G.message))await X.streams.delete(JU),await X.streams.add(J);else throw G}},Q=await c8(async()=>{let X=this.options.getJetStreamManager?await this.options.getJetStreamManager():await BH.jetstreamManager($),Y=sg6($,k48);try{await Z(X,Y)}catch(J){if(Y<=1||!eg6(J))throw J;console.warn(`[Decopilot] StreamBuffer: NATS rejected num_replicas=${Y} (${J.message}); falling back to an unreplicated stream`),await Z(X,1)}return X},{maxAttempts:5,minTimeout:250,maxTimeout:4000,jitter:0.5,isRetriable:Hd});this.js=this.options.getJetStream(),this.jsm=Q,console.log(`[Decopilot] StreamBuffer.init ${this.js?"ready":"degraded (js=null)"}`)}pump($,Z,Q,X){let Y=this.js;if(!Y)return console.warn(`[Decopilot] pump: JetStream client unavailable for thread ${Z}; chunks NOT published to NATS`),Promise.resolve();let J=ag6(Z,X),G=!1,W=()=>{if(G)return;G=!0;let H=YS$(Z);Y.publish(H.subject,H.data).catch(()=>{})};Q.addEventListener("abort",W,{once:!0});let K=(H)=>{let F=performance.now(),U=s91(H,{runId:Z}),N=performance.now()-F;LF1().record(N),wF1().add(1,{"org.id":X??"unknown"}),rg6?.record(N,U.reduce((B,O)=>B+O.data.length,0));for(let B of U)J.publish(Y,B.subject,B.data,B.headers?I48(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(),og6)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 c8(()=>$.publish(Z.subject,Z.data,{...Z.headers?{headers:I48(Z.headers)}:{},...Z.msgId?{msgID:Z.msgId}:{}}),{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:Hd}),!0}catch(Q){return console.error(`[Decopilot] publish failed after retries subject=${Z.subject}`,Q),!1}}async publishRawChunk($,Z,Q){let X=this.js;if(!X)return!1;let Y=performance.now(),J=s91(Z,{runId:$,dedup:Q});LF1().record(performance.now()-Y),wF1().add(1);for(let G of J)if(!await this.publishSerialized(X,G))return!1;return!0}async publishDone($,Z,Q){let X=this.js;if(!X)return!1;let Y=XS$({runId:$,fenceToken:Z,finalSeq:Q});return await this.publishSerialized(X,Y)}async createTailStream($,Z,Q){let X=this.js;if(!X)return console.warn(`[Decopilot] createTailStream: JetStream client unavailable for thread ${$}; no live tail`),null;let Y=Q?.deliverPolicy==="new"?BH.DeliverPolicy.New:BH.DeliverPolicy.All,J=Q?.closeOnDone??!1,G=Oj($),W;try{W=await c8(async()=>{return(await X.consumers.get(JU,{filter_subjects:G,deliver_policy:Y})).consume()},{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:Hd})}catch(L){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",L?.message??L),null}let F=S20({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(M20()).pipeThrough(I20()).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(JU,{filter:Oj($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var BH,V48,lg6=($)=>{let Z;return()=>Z??=$()},cg6,dg6=86400000000000,mg6=120000000000,ig6=4294967296,k48,pg6=500000,tg6,og6,rg6;var C48=D(()=>{D8();e91();C20();V20();R6();M48();BH=C(mU(),1),V48=C(Vi(),1),cg6=lg6(()=>z$.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"})),k48=Math.max(1,Number(process.env.DECOPILOT_STREAM_REPLICAS??3)||3);tg6=process.env.STREAM_ENCODE_TRACE==="1",og6=process.env.DECOPILOT_STREAM_TRACE==="1";rg6=tg6?new S48:null});function Rk0($,Z,Q,X){if(!X)return!1;return $.emit(Z,bH(Q,X.status,{title:X.title??void 0,virtualMcpId:X.virtual_mcp_id??void 0,createdBy:X.created_by??void 0,triggerId:X.trigger_id??null,branch:X.branch??null,harnessId:X.harness_id??void 0,createdAt:X.created_at,updatedAt:X.updated_at})),!0}var _48=D(()=>{r8()});class EF1{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 $h6($,Z){let Q=$.startsWith("thread:")?mK($):$;return[...new Set([Z,Q].filter((X)=>!!X))]}async function v48($,Z){let Q=Z.organizationId;try{let X=await $.storage.taskBoard.linkedThreadIds(Z.id,Q);for(let Y of X){let J=await oF($,Y);if(!J?.owner||!J?.name)continue;let G=await $.storage.threads.get(Y),W=await Dc($,{threadId:Y,runBranch:G?.branch}),K=$h6(W,await oP0($,Y)),H=await ts($,Q,E11(J)).catch(()=>null);if(!H){console.warn(`[task-board] no credential for ${J.owner}/${J.name} \u2014 `+`cannot look up ${Z.id}'s change request by branch`);continue}for(let F of K){let U=await H.readForBranch(F).catch(()=>null);if(!U)continue;return await $.storage.taskBoard.linkPr({taskBoardItemId:Z.id,organizationId:Q,url:U.url,prNumber:U.number,repo:H.repo}),await $.storage.taskBoard.openReviewCycleIfInProgress(Z.id,Q),await gG(Q).catch(()=>{}),console.log(`[task-board] ${Z.id}: linked ${U.url} found on branch ${F}`),!0}}}catch(X){console.error("[task-board] PR lookup by branch failed",X)}return!1}var b48=D(()=>{hZ();JW();L7()});async function x48($,Z,Q){let X=Z.organizationId;if(!zJ(Z))return!1;if(!Rx(Q))return!1;if(await $.storage.taskBoard.hasHumanRejectedDone(Z.id,X))return!1;let Y=await $.storage.organizationSettings.get(X),J=fF(Y?.flags),G=await $.storage.taskBoard.update(Z.id,X,{status:J},Z.updatedBy);return await c6($,{taskBoardItemId:Z.id,action:"status_changed",actorId:null,data:{from:Z.status,to:J,reason:"pr_merged"}}),L8(X,G),console.log(`[task-board-review-sweeper] ${Z.id}: linked PR already merged \u2014 moved to ${J}`),!0}var f48=D(()=>{V4();PX();nc();oK();R9()});function Wh6($){return $ instanceof HY}function Kh6($,Z){return Z-$>=Jh6}class zF1{taskBoard;contextFactory;billing;options;timer=null;running=!1;cursor=null;constructor($,Z,Q,X={}){this.taskBoard=$;this.contextFactory=Z;this.billing=Q;this.options=X}start(){if(this.timer)return;let $=this.options.intervalMs??Zh6;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??Xh6,Q=this.options.itemIntervalMs??Qh6,X=new Date(Date.now()-Q),Y=await this.taskBoard.listItemsPendingReview(Z,this.cursor,X),J=Y.at(-1);this.cursor=Y.length===Z&&J?{updatedAt:J.updatedAt,id:J.id}:null;for(let{id:G,organizationId:W}of Y)try{if(await this.reconcileItem(G,W,X))$++}catch(K){console.error(`[task-board-review-sweeper] ${G} failed`,K)}await this.reapNeverStartedThreads(Z),$+=await this.dispatchDueRetries(Z),await this.reactToUnhandledFailures(Z)}catch(Z){console.error("[task-board-review-sweeper] sweep failed",Z)}finally{this.running=!1}return $}async reapNeverStartedThreads($){try{let Z=await this.taskBoard.failNeverStartedLinkedThreads($,new Date(Date.now()-p61),J91);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()-Gh6));for(let{id:Q,organizationId:X,threadId:Y}of Z)try{console.warn(`[task-board-review-sweeper] reacting to an unhandled failure on ${Q}`),await Q91(this.taskBoard,Y,X),await X91(this.taskBoard,this.billing,Y,X)}catch(J){console.error(`[task-board-review-sweeper] unhandled-failure reaction for ${Q} failed`,J)}}async dispatchDueRetries($){let Z=0,Q=await this.taskBoard.listItemsDueForRetry($,new Date);for(let{id:X,organizationId:Y,attempts:J}of Q)try{if(!await this.taskBoard.claimDueRetry(X,Y,new Date))continue;let G=await this.taskBoard.getById(X,Y);if(!G||G.status!==f$.progress||G.assigneeId!==P8)continue;let W=await this.contextFactory(Y,G.assignedBy??G.createdBy);if(!W)continue;await rK(W,G,{runClass:"retry"}),Z++,console.warn(`[task-board-review-sweeper] re-dispatched ${X} after a failure (attempt ${J})`)}catch(G){if(console.error(`[task-board-review-sweeper] retry dispatch for ${X} failed`,G),Wh6(G)){await this.returnToTodo(X,Y,G instanceof Error?G.message:String(G));continue}await this.taskBoard.scheduleRunRetry(X,Y,J,new Date(Date.now()+Yh6)).catch((W)=>console.error(`[task-board-review-sweeper] re-arming ${X} failed`,W))}return Z}async returnToTodo($,Z,Q){try{let X=await this.taskBoard.getById($,Z);if(!X||X.status!==f$.progress)return;let Y=await this.taskBoard.returnToTodoAfterFailure($,Z,X.updatedBy);if(!Y)return;await this.taskBoard.recordActivity({taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:"in_progress",to:"todo",reason:Q}}).catch(()=>{}),L8(Z,Y)}catch(X){console.error(`[task-board-review-sweeper] returning ${$} to todo failed`,X)}}async handOffReviewWithoutPr($,Z){let Q=await this.taskBoard.listActivity(Z.id,Z.organizationId);if(!Kh6(OB(Q,Z.reviewCycleStartedAt),Date.now()))return;await QU($,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 X=await this.taskBoard.getById($,Z);if(!X)return!1;if(!zJ(X))return!1;let Y=X.assigneeId===P8,J=await this.taskBoard.listPrs($,Z),G=await this.contextFactory(Z,X.assignedBy??X.createdBy);if(!G)return!1;if(J.length===0){if(await v48(G,X))J=await this.taskBoard.listPrs($,Z);if(J.length===0){if(Y)await this.handOffReviewWithoutPr(G,X);return!1}}let W=await Promise.all(J.map(async(K)=>({...K,...await rc(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 x48(G,X,W))return!0;if(await KC$(G,X))return!0;if(await this.resolveConflictFromSweep(G,X,W))return!0;if(!Y)return!1;if(!s51(W))return!1;return await tc(G,X,{previewMatchesHead:e51(W)}),!0}async resolveConflictFromSweep($,Z,Q){let X=Q.find((Y)=>Y.state!=="closed"&&Y.conflict===!0);if(!X)return!1;return await Fj($,Z.organizationId,Z,{pr:{number:X.number,url:X.url},conflict:!0}).catch((Y)=>{return console.error("[task-board-review-sweeper] conflict resolve failed",Y),!1})}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}var Zh6=60000,Qh6=300000,Xh6=50,Yh6=60000,Jh6=900000,Gh6=120000;var y48=D(()=>{V4();dT0();b48();XU();Y10();oK();f48();R9();s3();G91();L7();S00();oc()});import{readdir as Hh6,rm as qk0}from"fs/promises";import{join as Mk0}from"path";async function Ik0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-Fh6),Z.setUTCHours(0,0,0,0);let Q=0;try{let X=await df($);for(let Y of X)if(/^\d{4}$/.test(Y))Q+=await g48($,Y,Z);else if(!Y.startsWith(".")){let J=Mk0($,Y),G=await df(J);for(let K of G){if(!/^\d{4}$/.test(K))continue;Q+=await g48(J,K,Z)}if((await df(J)).length===0)await qk0(J,{recursive:!0,force:!0})}}catch(X){console.warn("monitoring retention cleanup failed:",X)}return Q}async function g48($,Z,Q){let X=0,Y=Mk0($,Z),J=await df(Y);for(let W of J){if(!/^\d{2}$/.test(W))continue;let K=Mk0(Y,W),H=await df(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=Mk0(K,U);await qk0(B,{recursive:!0,force:!0}),X++}}if((await df(K)).length===0)await qk0(K,{recursive:!0,force:!0})}if((await df(Y)).length===0)await qk0(Y,{recursive:!0,force:!0});return X}async function df($){try{return(await Hh6($)).filter((Q)=>!Q.startsWith("."))}catch{return[]}}var Fh6=30;var PF1=()=>{};import{DBOS as AF1,SchedulerMode as Uh6}from"@dbos-inc/dbos-sdk";async function Bh6(){let $=[VW(),ef(),yU()],Z=0;for(let Q of $)try{Z+=await Ik0(Q)}catch(X){console.error("[monitoring-retention] cleanup failed:",X)}return console.log(`[monitoring-retention] deleted ${Z} day-dir(s) across ${$.length} signal dir(s)`),{deleted:Z,dirs:$.length}}async function Oh6($,Z){await AF1.runStep(()=>Bh6(),{name:"monitoringRetention"})}function u48(){if(h48)return;h48=!0;let $=AF1.registerWorkflow(Oh6,{name:"monitoringRetentionWorkflow"});AF1.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:Nh6,mode:Uh6.ExactlyOncePerIntervalWhenActive})}var Nh6="23 4 * * *",h48=!1;var l48=D(()=>{Z3();PF1()});function c48($){return async(Z,Q)=>{let X=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(!X)return console.warn(`[automationContextFactory] User ${Q} not found in org ${Z} \u2014 returning null`),null;let Y=await IQ.create();Y.auth.user={id:Q,role:X.role},Y.organization={id:X.orgId,slug:X.orgSlug,name:X.orgName};let J=await XA($.db,Z,X.role);return Y.boundAuth=KW1({auth:Y.authInstance,headers:new Headers,role:X.role,permissions:J,userId:Q}),Y.access=new lz(Q,void 0,Y.boundAuth,X.role,"self"),Hj(Y,{id:X.orgId,slug:X.orgSlug}),Y}}var d48=D(()=>{ZK();vF()});function Dh6(){return[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}]}function Lh6(){return{services:Dh6(),migrationsStatus:"pending",serverUrl:null,logs:[]}}function jh6(){for(let $ of wh6)$()}function m48($){let Z=[...TF1.logs,$];TF1={...TF1,logs:Z.length>500?Z.slice(-500):Z},jh6()}function RF1(){return Eh6}var TF1,wh6,Eh6=!1;var qF1=D(()=>{TF1=Lh6(),wh6=new Set});import{EventEmitter as zh6}from"events";var MF1;var i48=D(()=>{qF1();MF1=new zh6;MF1.on("request",($)=>{m48($)})});function p48(){return async($,Z)=>{let Q=Date.now(),X=$.req.method,Y=$.req.path;if(Y==="/api/auth/get-session"||Y.includes("favicon")){await Z();return}let J="",G=!1;if(Y.startsWith("/mcp")&&X==="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=em(N.params.name),O=N.params.arguments||{},L=Object.keys(O).map((j)=>em(j)),w=L.length>0?L.slice(0,3).join(",")+(L.length>3?"\u2026":""):"";J=`${o5.tool}${B}${o5.dim}(${w})${o5.reset}`}else if(N.method)J=`${o5.dim}${em(N.method)}${o5.reset}`}}catch{}}let W=em(Y);if(Y.startsWith("/mcp/conn_")){let F=Y.split("/")[2]??"";W=`/mcp/${o5.mcp}${em(F.slice(0,12))}\u2026${o5.reset}`}else if(Y==="/mcp")W=`${o5.mcp}/mcp${o5.reset}`;else if(Y==="/mcp/registry")W=`${o5.mcp}/mcp/registry${o5.reset}`;let K=Ah6(X),H=G?"\u25C0":"\u2190";if(!RF1())console.log(`${o5.dim}${H}${o5.reset} ${K}${X}${o5.reset} ${W}${J?` ${J}`:""}`);try{await Z()}finally{let F=Date.now()-Q,U=$.res.status,N=Ph6(U),B=F<1000?`${F}ms`:`${(F/1000).toFixed(1)}s`,O=G?"\u25B6":"\u2192";if(!RF1())console.log(`${o5.dim}${O}${o5.reset} ${K}${X}${o5.reset} ${W}${J?` ${J}`:""} ${N}${U}${o5.reset} ${o5.duration}${B}${o5.reset}`);MF1.emit("request",{method:X,path:em(Y),status:U,duration:F,timestamp:new Date})}}}var o5,Ph6=($)=>{if($>=500)return o5.serverError;if($>=400)return o5.clientError;if($>=300)return o5.redirect;return o5.ok},Ah6=($)=>{return o5[$]||o5.reset},em=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var n48=D(()=>{qF1();i48();o5={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 a48}from"crypto";import{mkdir as Th6,readdir as Rh6,rm as t48,stat as s48}from"fs/promises";import{join as VF1,relative as qh6}from"path";import{z as t$}from"zod";function $68($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return VF1(Mh6,Z)}function Z68($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function IF1($,Z){let Q=$68($),X=Z68(Z);return VF1(Q,X)}function Ih6($,Z,Q,X){let Y=E0().encryptionKey||"dev-secret",J=`${$}:${Z}:${Q}:${X}`;return a48("sha256",Y).update(J).digest("hex")}function r48($,Z,Q,X,Y){let J=Math.floor(Date.now()/1000)+X,G=Ih6(Z,Q,J,Y),W=new URL(`/api/dev-assets/${Z}/${Z68(Q)}`,$);return W.searchParams.set("expires",J.toString()),W.searchParams.set("signature",G),W.searchParams.set("method",Y),W.toString()}function Q68($,Z,Q){let X=`${$}:${Z.getTime()}:${Q}`;return`"${a48("md5","etag").update(X).digest("hex")}"`}async function X68($,Z,Q,X,Y){try{let J=await Rh6($,{withFileTypes:!0});for(let G of J){let W=VF1($,G.name),H=qh6(Z,W).replace(/\\/g,"/");if(Q&&!H.startsWith(Q))continue;if(G.isDirectory())if(X){let F=H+"/";if(!Q||F.startsWith(Q)){if(!(Q?H.slice(Q.length):H).includes("/"))Y.commonPrefixes.add(F)}}else await X68(W,Z,Q,X,Y);else if(G.isFile()){if(X&&Q){let F=H.slice(Q.length);if(F.includes(X)){let U=F.indexOf(X),N=Q+F.slice(0,U+1);Y.commonPrefixes.add(N);continue}}try{let F=await s48(W);Y.objects.push({key:H,size:F.size,lastModified:F.mtime.toISOString(),etag:Q68(W,F.mtime,F.size)})}catch{}}}}catch{}}function Y68($,Z){let X=K0($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:t$.object({prefix:t$.string().optional(),maxKeys:t$.number().optional().default(1000),continuationToken:t$.string().optional(),delimiter:t$.string().optional()}),outputSchema:t$.object({objects:t$.array(t$.object({key:t$.string(),size:t$.number(),lastModified:t$.string(),etag:t$.string()})),nextContinuationToken:t$.string().optional(),isTruncated:t$.boolean(),commonPrefixes:t$.array(t$.string()).optional()}),handler:async(Y)=>{let J=Y,G=J.prefix||"",W=J.maxKeys??1000,K=J.delimiter,H=J.continuationToken,F=$68(X);await Th6(F,{recursive:!0});let U={objects:[],commonPrefixes:new Set};await X68(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:t$.object({key:t$.string()}),outputSchema:t$.object({contentType:t$.string().optional(),contentLength:t$.number(),lastModified:t$.string(),etag:t$.string(),metadata:t$.record(t$.string(),t$.string()).optional()}),handler:async(Y)=>{let J=Y,G=IF1(X,J.key),W=await s48(G);return{contentType:JK1(J.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:Q68(G,W.mtime,W.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:t$.object({key:t$.string(),expiresIn:t$.number().optional()}),outputSchema:t$.object({url:t$.string(),expiresIn:t$.number()}),handler:async(Y)=>{let J=Y,G=J.expiresIn??o48;return{url:r48(Z,X,J.key,G,"GET"),expiresIn:G}}},{name:"PUT_PRESIGNED_URL",description:"Generate a presigned URL for uploading a file to local storage",inputSchema:t$.object({key:t$.string(),expiresIn:t$.number().optional(),contentType:t$.string().optional()}),outputSchema:t$.object({url:t$.string(),expiresIn:t$.number()}),handler:async(Y)=>{let J=Y,G=J.expiresIn??o48;return{url:r48(Z,X,J.key,G,"PUT"),expiresIn:G}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:t$.object({key:t$.string()}),outputSchema:t$.object({success:t$.boolean(),key:t$.string()}),handler:async(Y)=>{let J=Y,G=IF1(X,J.key);try{return await t48(G),{success:!0,key:J.key}}catch{return{success:!1,key:J.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:t$.object({keys:t$.array(t$.string()).max(1000)}),outputSchema:t$.object({deleted:t$.array(t$.string()),errors:t$.array(t$.object({key:t$.string(),message:t$.string()}))}),handler:async(Y)=>{let J=Y,G=[],W=[];return await Promise.all(J.keys.map(async(K)=>{let H=IF1(X,K);try{await t48(H),G.push(K)}catch(F){W.push({key:K,message:F instanceof Error?F.message:"Unknown error"})}})),{deleted:G,errors:W}}}]}async function kF1($,Z,Q){let X=Y68(Z,Q),Y=new GL({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:DZ});for(let G of X){let W="shape"in G.inputSchema?G.inputSchema.shape:t$.object({}).shape,K=G.outputSchema&&"shape"in G.outputSchema?G.outputSchema.shape:t$.object({}).shape;Y.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 dG({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await Y.connect(J),DW(Y,J,$,"mcp:dev-assets")}async function J68($,Z,Q,X){let J=Y68(Q,X).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 Mh6="./data/assets",o48=3600,e48,G68;var W68=D(()=>{U$();Ld();X8();DX0();Dd();uY();wV0();e48=new X1;e48.all("/",async($)=>{let Z=$.get("studioContext"),Q=new URL($.req.url),X=`${Q.protocol}//${Q.host}`;return kF1($.req.raw,Z,X)});G68=e48});var K68={};E6(K68,{mountDevRoutes:()=>Vh6});function Vh6($,Z){$.all("/mcp/:connectionId{.*_dev-assets$}",Z,async(X)=>{let Y=X.get("studioContext"),J=new URL(X.req.url),G=`${J.protocol}//${J.host}`;return kF1(X.req.raw,Y,G)}),$.all("/mcp/:connectionId{.*_dev-assets$}/call-tool/:toolName",Z,async(X)=>{let Y=X.get("studioContext"),J=new URL(X.req.url),G=`${J.protocol}//${J.host}`,W=X.req.param("toolName");if(!W)return X.json({error:"Missing tool name"},400);let K=await X.req.json(),H=await J68(W,K,Y,G);if(H.isError)return X.json(H.content,500);return X.json(H.content)}),$.use("/mcp/dev-assets",Z),$.route("/mcp/dev-assets",G68);let Q=new X1;Q.use("*",UH({mountPath:"/api/dev-assets"})),Q.route("/",LV0({orgFromPath:!1})),$.route("/api/dev-assets",Q)}var H68=D(()=>{X8();sW1();wV0();W68()});var E68={};E6(E68,{watchHandler:()=>j68,resolveCorsOrigin:()=>L68,isSsoExemptPath:()=>O68,isAllowedOAuthRedirectUri:()=>w68,createApp:()=>gh6});import{readFileSync as kh6}from"fs";import{PrometheusSerializer as Sh6}from"@opentelemetry/exporter-prometheus";import{DBOS as jO}from"@dbos-inc/dbos-sdk";import{oAuthDiscoveryMetadata as vh6,oAuthProtectedResourceMetadata as bh6}from"better-auth/plugins";async function Ch6($){let Z=$.connect(),Q;try{Q=await Promise.race([Z,U68(F68)])}catch{return Z.then((X)=>X.release(!0)).catch(()=>{}),!1}try{return await Promise.race([Q.query("SELECT 1"),U68(F68)]),Q.release(),!0}catch{return Q.release(!0),!1}}function U68($){return new Promise((Z,Q)=>setTimeout(()=>Q(Error("pg health-check timeout")),$))}function O68($){return $.startsWith("/api/org-sso/")||/^\/api\/[^/]+\/sso\//.test($)||$.startsWith("/api/auth/")||$.startsWith("/api/tools/management")||$.startsWith("/oauth-proxy/")||/^\/api\/[^/]+\/oauth-proxy\//.test($)||$.startsWith(`${QV0}/`)||$.startsWith(`${aI0}/`)}function D68($){return $==="local.studio.decocms.com"}function L68($,{baseUrl:Z,requestOrigin:Q}){let X;try{X=new URL($).hostname}catch{return null}if(X==="localhost"||X==="127.0.0.1")return $;if(D68(X))return $;let Y=Z??Q;try{if(new URL(Y).origin===$)return $}catch{}return null}function w68($,Z){return $.origin===new URL(Z).origin||$.hostname==="localhost"||D68($.hostname)}async function gh6($={}){let Z=$.database??I8(),Q=!1;K9.stop().catch((Z0)=>{console.error("[SSEHub] Error stopping previous broadcast (HMR cleanup):",Z0)});let X,Y,J,G,W=new BF1,K,H,F,U=null;if($.disableNats)K=OF1(),X={get:async()=>null,set:async()=>{},invalidate:async()=>{},teardown:()=>{}},Y=null,J=null,G=new B10,H={start:async()=>{},broadcast:()=>{},stop:async()=>{}},F={init:async()=>{},pump:(Z0)=>{return(async()=>{let w0=Z0.getReader();try{while(!0){let{done:s}=await w0.read();if(s)break}}catch{}finally{w0.releaseLock()}})()},publishRawChunk:async()=>!1,publishDone:async()=>!1,createTailStream:async()=>null,purge:()=>{},teardown:()=>{}};else{U=z48();let Z0=E0().natsCredsPath,w0;if(Z0)try{w0=kh6(Z0,"utf8")}catch(f0){console.error(`[app] failed to read NATS_CREDS at ${Z0}; connecting anonymously`,f0)}U.init(E0().natsUrls,w0?{creds:w0}:void 0);let s=Ue0()?new ts0({getJetStream:()=>U.getJetStream()}):null;s?.init().catch(()=>{}),X=s;let i=new W41({getJetStream:()=>U.getJetStream()});i.init().catch(()=>{}),Y=i;let d0=new Mx(p51,{getJetStream:()=>U.getJetStream()}),I0=new Mx(C00,{getJetStream:()=>U.getJetStream()});d0.init().catch(()=>{}),I0.init().catch(()=>{}),J={reads:d0,cards:I0};let o0=new T71({getJetStream:()=>U.getJetStream()});o0.init().catch(()=>{}),G=o0,K=OF1({getConnection:()=>U.getConnection()}),H=new DF1({getConnection:()=>U.getConnection()}),F=new jF1({getConnection:()=>U.getConnection(),getJetStream:()=>U.getJetStream()}),Mr$(U),U.onReady(()=>{s?.init().catch((f0)=>{console.error("[McpListCache] Deferred init failed:",f0)}),i.init().catch((f0)=>{console.error("[SkillCatalogCache] Deferred init failed:",f0)}),d0.init().catch((f0)=>{console.error("[PrReadCache] Deferred init failed:",f0)}),I0.init().catch((f0)=>{console.error("[PrCardCache] Deferred init failed:",f0)}),o0.init().catch((f0)=>{console.error("[ConnectionCircuitStore] Deferred init failed:",f0)}),K.start(),_W$(()=>U.getConnection()),F.init().catch((f0)=>{console.warn("[Decopilot] StreamBuffer init failed (late-join disabled):",f0)})})}if(tj)await tj();os0(X),H41(Y),n51(J),R71(G);let B={storage:new hg(Z.db),sseHub:K9,onThreadFinished:async(Z0,w0)=>sc(new yG(Z.db),Z0,w0,new QG(Z.db))},O=new JZ1(B),L=new _$0(Z.db),w=new EF1(L);w.start(),GC$(H),H.start((Z0)=>{D20(Z0),O.execute({type:"CANCEL",taskId:Z0}).catch((w0)=>{console.error("[Decopilot] CancelBroadcast execute failed:",w0)})}).catch((Z0)=>{console.error("[Decopilot] CancelBroadcast start failed:",Z0)}),U?.onReady(()=>{H.start().catch((Z0)=>{console.error("[CancelBroadcast] Deferred start failed:",Z0)})});let j=()=>U?.getConnection()??null;tW1(j),U?.onReady(()=>tW1(j)),QQ1(j),U?.onReady(()=>QQ1(j)),F.init().catch((Z0)=>{console.warn("[Decopilot] StreamBuffer init failed, attach/late-join disabled:",Z0)}),tj=async()=>{await O.stopAll(),O.dispose(),w.dispose(),H.stop().catch(()=>{}),ya$(),F.teardown(),X?.teardown(),Y?.teardown(),J?.reads.teardown(),J?.cards.teardown(),W.teardown(),K.teardown(),vW$(),G.teardown(),os0(null),H41(null),n51(null),R71(null)};let E=new X1;if(E.use("*",z71({enabled:(Z0)=>zm(Z0,"debug")==="1"})),E.use("*",ok0),E.use("/*",Pr$({origin:(Z0,w0)=>L68(Z0,{baseUrl:E0().baseUrl,requestOrigin:new URL(w0.req.url).origin}),credentials:!0,allowMethods:["GET","POST","PUT","DELETE","OPTIONS"],allowHeaders:["Content-Type","Authorization","mcp-protocol-version"],exposeHeaders:["WWW-Authenticate"]})),E.use("*",async(Z0,w0)=>{if(await w0(),Z0.req.path.includes("/files/"))return;if(Z0.req.path.includes("/fs/")&&Z0.req.path.endsWith("/read"))return;Z0.header("X-Frame-Options","DENY"),Z0.header("Content-Security-Policy","frame-ancestors 'none'")}),!E0().noTui)E.use("*",p48());E.use("*",async(Z0,w0)=>{if(await w0(),Hi(Z0.req.path))return;if(Z0.res.status>=500){let i=await Z0.res.clone().text();console.error(`[5xx Response] ${Z0.req.method} ${Z0.req.path} - ${Z0.res.status}:`,i)}}),E.get(_X.HEALTH,(Z0)=>{if(Q)return Z0.json({status:"shutting_down"},503);return Z0.json({status:"ok"})}),E.get(_X.HEALTH_LIVE,(Z0)=>{return Z0.json({status:"ok"})}),E.get(_X.HEALTH_READY,async(Z0)=>{if(Q)return Z0.json({status:"shutting_down"},503);let w0={};if(w0.postgres={status:await Ch6(Z.pool)?"up":"down"},U)w0.nats=U.isConnected()?{status:"up"}:{status:"down"};else w0.nats={status:"down"};let s=w0.postgres.status==="up",i=s?200:503;return Z0.json({status:s?"ready":"not_ready",services:w0},i)}),E.get(_X.METRICS,async(Z0)=>{try{let w0=await ek0.collect(),s=_h6.serialize(w0.resourceMetrics);return Z0.text(s,200,{"Content-Type":"text/plain; version=0.0.4; charset=utf-8"})}catch(w0){return console.error("Failed to collect metrics:",w0),Z0.text("# Error collecting metrics",500)}});let z=1800000;E.get(`${_X.DBOS_QUEUE_DEPTH_PREFIX}:queueName`,async(Z0)=>{let w0=Z0.req.param("queueName");if(!xh6.has(w0))return Z0.json({error:`Unknown queue: ${w0}`},404);let[s,i]=await Promise.all([jO.listQueuedWorkflows({queueName:w0,status:"ENQUEUED",loadInput:!1,loadOutput:!1}),jO.listQueuedWorkflows({queueName:w0,status:"PENDING",loadInput:!1,loadOutput:!1,dequeuedAfter:new Date(Date.now()-z).toISOString()})]);return Z0.json({queue_length:s.length,in_flight:i.length})}),E.route("/api/config",k88),E.route("/api/_reports",u88),E.route("/api/_stripe",HF1),E.route("/api/_github",d88({taskBoard:()=>n,contextFactory:()=>g})),E.route("/api/_git",Vm);let T={db:Z.db,encryptionKey:E0().encryptionKey};E.route("/api/_jira",n88(T)),E.route("/api/_jira",i88(T)),E.route("/report",y88($.clientDir)),E.route("/api/auth/custom",pr$),E.route("/api/auth/desktop",rr$),E.all("/api/auth/admin/*",Ta$),E.all("/api/auth/*",async(Z0)=>{return await V8.handler(Z0.req.raw)});let P=et$();P.use("/.well-known/oauth-protected-resource/mcp/:connectionId",p$0),P.use("/mcp/:connectionId/.well-known/oauth-protected-resource",p$0),E.route("/",P),E.get("/.well-known/oauth-protected-resource/api/:org/mcp/:connectionId",V$0),E.route("/",Yo$()),E.use("/oauth-proxy/:connectionId/*",p$0),E.all("/oauth-proxy/:connectionId/*",N68);let A=async(Z0)=>{let s=await fh6()(Z0.req.raw),i=await s.json();return Response.json(i,s)};E.use("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",p$0),E.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",A);let q=async(Z0)=>{let s=await yh6()(Z0.req.raw),i=await s.json();return Response.json(i,s)};E.get("/.well-known/oauth-authorization-server/*/:gateway?/:connectionId?",q);let x=Tr$({ttlMs:120000}),_=await to$({db:Z.db,auth:V8,encryption:{key:E0().encryptionKey},observability:{tracer:IO,meter:z$},modelListCache:W,providerKeyCache:K,memberRoleCache:x});IQ.set(_),Ml1({db:Z.db,baseUrl:S5()}),oo$({db:Z.db}),eo$({db:Z.db}),Wr$({db:Z.db}),r88({db:Z.db,encryptionKey:E0().encryptionKey}),yM$({db:Z.db}),Br$({db:Z.db}),GI$({db:Z.db});let V=YQ0(Z.db),y=new ut(Z.db),g=c48({db:Z.db});L71({storage:V,studioContextFactory:g}),DZ1({systemDatabaseUrl:Dt0(E0().databaseUrl,E0().databasePgSsl),studioContextFactory:g,deps:{runRegistry:O,cancelBroadcast:H,streamBuffer:F,sseHub:K9}}),KZ1({dispatchRunFn:rk$,studioContextFactory:g,deps:{runRegistry:O,cancelBroadcast:H,streamBuffer:F,sseHub:K9}});let u=new hg(Z.db),n=new yG(Z.db),p=new QG(Z.db),F0=new zF1(n,g,p);if(E0().taskBoardReviewSweeperEnabled){F0.start();let Z0=tj;tj=async()=>{await Z0?.(),F0.dispose()}}wS$({getJetStream:()=>U?.getJetStream()??null,getJetStreamManager:async()=>{let Z0=U?.getConnection();return Z0?await B68.jetstreamManager(Z0):null},messageParts:u.messageParts(),resolveRun:async(Z0)=>{let w0=await Z.db.selectFrom("threads").select(["organization_id","created_by","message_storage_version","status","run_fence_token","title"]).where("id","=",Z0).executeTakeFirst();return w0?{orgId:w0.organization_id,createdBy:w0.created_by,version:w0.message_storage_version??1,status:w0.status,runFenceToken:w0.run_fence_token,title:w0.title??null}:null},completeRunIfNotCompleted:async(Z0,w0)=>{let s=await u.completeRunIfNotCompleted(Z0,w0);if(Rk0(K9,w0,Z0,s),s)await sc(n,Z0,w0,p);return s},markRunRequiresAction:async(Z0,w0)=>{let s=await u.requiresActionIfInProgress(Z0,w0);return Rk0(K9,w0,Z0,s),s},markRunFailed:async(Z0,w0,s,i)=>{let d0=await u.markRunFailed(Z0,w0,s,i);if(Rk0(K9,w0,Z0,d0),d0)await sc(n,Z0,w0,p);return d0},clearSynthesizedError:async(Z0,w0)=>{await u.messageParts().replaceMessageParts(Z0,Bj(Z0,w0),[])},persistTitle:(Z0,w0,s)=>u.update(Z0,w0,{title:s}),onTitleUpdated:async({runId:Z0,orgId:w0,title:s})=>{let i=await u.get(Z0,w0).catch(()=>null);K9.emit(w0,bH(Z0,i?.status??"in_progress",{title:s,virtualMcpId:i?.virtual_mcp_id??void 0,createdBy:i?.created_by,triggerId:i?.trigger_id,branch:i?.branch??null,harnessId:i?.harness_id??void 0,createdAt:i?.created_at,updatedAt:i?.updated_at}))},bumpProgress:async({runId:Z0,orgId:w0})=>{await u.bumpProgress(Z0,w0)},recordCompleted:async({runId:Z0,orgId:w0,distinctId:s,usage:i})=>{y1.capture({distinctId:s,event:"chat_message_completed",groups:{organization:w0},properties:{organization_id:w0,thread_id:Z0,transport:"projector",input_tokens:i.inputTokens,output_tokens:i.outputTokens,total_tokens:i.totalTokens}})},recordFailed:async({runId:Z0,orgId:w0,distinctId:s,reason:i,kind:d0})=>{y1.capture({distinctId:s,event:"chat_message_failed",groups:{organization:w0},properties:{organization_id:w0,thread_id:Z0,transport:"projector",error_category:d0,error_message:i}})},purgeRun:async(Z0)=>{F.purge(Z0)}}),Ak$({studioContextFactory:g,systemDatabaseUrl:Dt0(E0().databaseUrl,E0().databasePgSsl),streamBuffer:F}),u48(),Il1(),ao$(),Zr$(),Hr$(),e88(),cM$(),Dr$(),WI$();let V0=async(Z0,w0,s)=>{let i=await V.findById(Z0,w0);if(!i)throw Error("Automation not found");return E71({automationId:i.id,organizationId:i.organization_id,triggerId:null})},G0=new Mm(V,({automation:Z0,trigger:w0,contextMessages:s,idempotencyKey:i})=>N10({automationId:Z0.id,organizationId:Z0.organization_id,triggerId:w0.id,contextMessages:s},{idempotencyKey:i})),H0=[VW(),ef(),yU()];for(let Z0 of H0)Ik0(Z0).then(()=>{}).catch((w0)=>console.error("[monitoring] Retention cleanup failed:",w0));let Y0=()=>V8.api.deleteAllExpiredApiKeys().catch((Z0)=>console.error("[auth] Expired API key cleanup failed:",Z0));Y0(),setInterval(Y0,86400000).unref(),E.use("*",async(Z0,w0)=>{if(nk0(Z0.req.path))return w0();let s={measure:async(d0,I0)=>{OW(Z0,d0);try{return await I0()}finally{mG(Z0,d0)}}},i=await IQ.create(Z0.req.raw,{timings:s});i.automationRunner=V0,Z0.set("studioContext",i);try{await w0()}finally{let d0=i.pendingRevalidations;if(d0.length>0)Promise.race([Promise.allSettled(d0),c$(30000)]).catch((o0)=>console.error("[studio] revalidation cleanup error:",o0))}}),E.use("/api/:org/decopilot/*",Am),E.use("/api/:org/v1/*",Am),E.use("/api/:org/files/*",Am),E.use("*",async(Z0,w0)=>{if(O68(Z0.req.path))return w0();let s=Z0.get("studioContext");if(!s?.organization?.id||!s?.auth?.user?.id)return w0();if(!(await s.storage.orgSsoConfig.getByOrgId(s.organization.id))?.enforced)return w0();if(!await s.storage.orgSsoSessions.isValid(s.auth.user.id,s.organization.id))return Z0.json({error:"SSO authentication required for this organization"},403);return w0()});let $0=new X1;$0.use("*",UH({mountPath:"/api/org-sso"})),$0.route("/",JV0()),E.route("/api/org-sso",$0),E.get("/api/tools/management",(Z0)=>{return Z0.json({tools:rm0,grouped:uz()})}),E.use("/mcp/*",async(Z0,w0)=>{OW(Z0,"mcp");try{return await w0()}finally{mG(Z0,"mcp")}});let X0=async(Z0,w0)=>{let s=Z0.var.studioContext;if(!s.auth.user?.id&&!s.auth.apiKey?.id){let i=new URL(Z0.req.url),d0=Z0.req.header("x-forwarded-proto")?.split(",")[0]?.trim(),I0=d0?`${d0}://${i.host}`:i.origin;return Z0.res=new Response(null,{status:401,headers:{"WWW-Authenticate":`Bearer realm="mcp",resource_metadata="${I0}${i.pathname}/.well-known/oauth-protected-resource"`}})}return await w0()};if(E.use("/mcp/:connectionId?",X0),E.use("/mcp/gateway/:virtualMcpId?",X0),E.use("/mcp/virtual-mcp/:virtualMcpId?",X0),E.use("/mcp/self",X0),p3()){let{mountDevRoutes:Z0}=(H68(),xk0(K68));Z0(E,X0)}let o=new X1;o.use("*",UH({mountPath:"/mcp"})),o.route("/",JR0()),E.route("/mcp",o);let J0=new X1;J0.use("*",UH({mountPath:"/mcp/self"})),J0.route("/",tV0()),E.route("/mcp/self",J0);let c0=new X1;c0.use("*",UH({mountPath:"/mcp"})),c0.route("/",KR0()),E.route("/mcp",c0),E.use("/api/:org/models/*",async(Z0,w0)=>{OW(Z0,"llm_models");try{return await w0()}finally{mG(Z0,"llm_models")}});let k0=ha$({cancelBroadcast:H,streamBuffer:F,runRegistry:O});E.route("/api",k0),E.route("/api",X48);let E1=new X1;E1.use("*",UH({mountPath:"/api"})),E1.route("/",sV0()),E.route("/api",E1),E.route("/api",A88);let m0=new X1;m0.use("*",UH({mountPath:"/api"})),m0.route("/",eV0({tokenStorage:y,automationEventDispatcher:G0})),E.route("/api",m0);let L0=new ct(Z.db),j0=new X1;j0.use("*",UH({mountPath:"/api"})),j0.route("/",FV0()),E.route("/api",j0),E.route("/api/deco-sites",ea$()),E.route("/api/deco-apps",L88());let e0=new X1;e0.use("*",UH({mountPath:"/api/deco-sites"})),e0.route("/",NV0()),E.route("/api/deco-sites",e0),E.route(QV0,Ra$()),E.route(C18,b18()),E.route("/api/_editor-resolve",R88()),E.route(sr$,er$()),E.route(aI0,Ha$());let A1=O88({kvStorage:L0,runRegistry:O,streamBuffer:F,sseHub:K9,cancelBroadcast:H,tokenStorage:y,automationEventDispatcher:G0,mountDevAssets:p3(),mcpAuth:X0,oauthProxyHandler:N68,watchHandler:j68,betterAuthProtectedResourceHandler:A,getNatsConnection:()=>U?.getConnection()??null});return E.route("/api/:org",A1),E.notFound((Z0)=>{return Z0.json({error:"Not Found",path:Z0.req.path},404)}),E.onError(ca$),Object.assign(E,{markShuttingDown:()=>{Q=!0},shutdown:async()=>{if(console.log("[shutdown] Stopping workers..."),await Promise.allSettled([K9.stop(),tj?Promise.resolve(tj()).finally(()=>{tj=null}):Promise.resolve()]),U)await U.drain().catch((Z0)=>console.error("[shutdown] NATS drain error:",Z0));console.log("[shutdown] Flushing telemetry..."),await RY().catch((Z0)=>console.error("[shutdown] Telemetry flush error:",Z0)),console.log("[shutdown] Closing database..."),await P8$(Z).catch((Z0)=>console.error("[shutdown] Database close error:",Z0)),console.log("[shutdown] Cleanup complete.")},initDbos:async()=>{await jO.registerQueue($3,{partitionQueue:!0,concurrency:B71,minPollingIntervalMs:O71}),await jO.registerQueue(eG,{partitionQueue:!0,concurrency:BZ1,priorityEnabled:!0}),await jO.registerQueue(xU,{workerConcurrency:E0().decopilotMaxConcurrentHostedRuns,priorityEnabled:!0}),await jO.registerQueue(fU,{workerConcurrency:E0().sandboxMaxConcurrentHostedRuns,priorityEnabled:!0}),await jO.registerQueue(qO,{partitionQueue:!0,concurrency:Pk$}),await jO.registerQueue(ej,JI$),await eW1(V),await Promise.allSettled(["automations-gate","automations-global","jira-push"].map((Z0)=>jO.deleteQueue(Z0))),await D71(Z.pool),l5$().catch((Z0)=>{console.error("[studio-pack-backfill] failed:",Z0)}),Vl1().catch((Z0)=>{console.error("[org-fs] public-sets boot sync kick failed:",Z0)})}})}var B68,F68=5000,tj=null,N68=async($)=>{let Z=$.req.param("connectionId");if(!Z)return $.json({error:"Missing connectionId"},400);let Q=$.req.path.split("/").filter(Boolean),X=Q[Q.length-1],Y=$.get("studioContext");if(!Y)Y=await IQ.create($.req.raw),$.set("studioContext",Y);let J=$.req.param("org")?Y.organization?.id:void 0,G=await Y.storage.connections.findById(Z,J);if(!G?.connection_url)return $.json({error:"Connection not found"},404);if(X==="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 Lm(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 k$0(K);if(!N.ok)return $.json({error:"Failed to get auth server metadata"},502);let B=await N.json(),O;if(X==="authorize")O=B.authorization_endpoint;else if(X==="token")O=B.token_endpoint;else if(X==="register")O=B.registration_endpoint;if(!O)return $.json({error:`Unknown OAuth endpoint: ${X}`},404);let L=Xo$(O);if(L)return L;let w=new URL(O),j=new URL($.req.url);if(w.search=j.search,X==="authorize"){let y=w.searchParams.get("redirect_uri");if(y){let g=E0().baseUrl??j.origin;try{if(!w68(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(wr$(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(X==="token"&&z?.includes("application/x-www-form-urlencoded")){if(T?.toLowerCase().startsWith("basic "))try{let p=atob(T.slice(6).trim()),F0=p.indexOf(":");if(F0!==-1){let V0=decodeURIComponent(p.slice(0,F0)),G0=decodeURIComponent(p.slice(F0+1));A=V0||null,q=G0||null}}catch{}let y=await $.req.formData();if(y.has("resource"))y.set("resource",U);let g=y.get("client_id"),u=y.get("client_secret");if(typeof g==="string"&&g)A=g;if(typeof u==="string"&&u)q=u;let n=new URLSearchParams;for(let[p,F0]of y.entries())n.append(p,F0.toString());P=n.toString()}else if(X==="register"&&z?.toLowerCase().includes("application/json")){let y=await Y.db.selectFrom("organization").select(["id","slug","name"]).where("id","=",G.organization_id).executeTakeFirst(),g=await $.req.text(),u={};try{u=g?JSON.parse(g):{}}catch{P=g}let n=typeof u==="object"&&u!==null&&!Array.isArray(u);if(P===void 0&&!n)P=g;if(P===void 0){let p=u,F0=p.metadata&&typeof p.metadata==="object"?p.metadata:{};p.metadata={...F0,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 x=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 x.headers.entries())if(!V.includes(y.toLowerCase()))_.set(y,g);if(X==="token"&&x.ok){let y=await x.text();try{let g=JSON.parse(y);if(typeof g.access_token==="string"&&g.access_token){let u=typeof g.expires_in==="number"?new Date(Date.now()+g.expires_in*1000):null,n=null;try{n=await wm(G.connection_url)??O}catch{n=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:u,clientId:A,clientSecret:q,tokenEndpoint:n};await new Y9(Y.db,Y.vault).upsert(p)}}catch(g){console.error("[oauth-proxy] failed to persist downstream token:",g)}return new Response(y,{status:x.status,statusText:x.statusText,headers:_})}return new Response(x.body,{status:x.status,statusText:x.statusText,headers:_})},j68=async($)=>{let Z=$.var.studioContext;if(!(Z.auth.user?.id??Z.auth.apiKey?.userId))return $.json({error:"Unauthorized"},401);let X=Z.organization?.id;if(!X)return $.json({error:"organization id missing"},400);let Y=$.req.query("types"),J=Y?Y.split(",").map((W)=>W.trim()).filter(Boolean):null,G=crypto.randomUUID();return OO($,async(W)=>{if(await W.writeSSE({event:"connected",data:JSON.stringify({listenerId:G,organizationId:X,typePatterns:J,connectedAt:new Date().toISOString()})}),!K9.add({id:G,organizationId:X,typePatterns:J?.length?J:null,push:(F)=>{W.writeSSE({id:F.id,event:F.type,data:JSON.stringify(F)}).catch(()=>{K9.remove(X,G)})}})){await W.writeSSE({event:"error",data:JSON.stringify({error:"Too many connections",message:"SSE connection limit reached. Try again later."})});return}let H=setInterval(()=>{W.writeSSE({event:"keepalive",data:""}).catch(()=>{clearInterval(H)})},30000);await new Promise((F)=>{W.onAbort(()=>{clearInterval(H),K9.remove(X,G),F()})})})},_h6,xh6,fh6=()=>bh6(V8),yh6=()=>vh6(V8);var z68=D(()=>{D8();U$();kl1();so$();Qr$();Fr$();j10();k51();Lr$();S00();D9();kl();r8();X8();pI0();Ar$();P71();qG();vF();RW1();S3();R6();W6();CW1();ar$();$a$();Fa$();yW1();qa$();iW1();ua$();aW1();_K();kI0();sW1();da$();tI0();D88();QK1();w88();GR0();O10();T88();HR0();CH1();q88();kH1();S88();g88();l88();c88();m88();p88();t88();$48();WK1();Y48();SH1();MH1();t80();P48();XJ();HA0();o51();Us();Bs();M71();A48();R48();oW1();C48();GZ1();_48();Tn();mt();lB();R9();m31();y48();l48();cY0();PF1();Z3();$K1();uB();XZ1();cY0();q20();gm0();hm0();d48();uh();n48();mm();RW1();Wd();L20();B68=C(mU(),1);_h6=new Sh6,xh6=new Set([$3,eG,xU,fU,qO,ej])});var R68={};E6(R68,{resolveClientDir:()=>ih6,resolveAssetPathWithTraversalCheck:()=>T68,isPathWithinDirectory:()=>A68,createAssetHandler:()=>ph6});import{resolve as v80,dirname as hh6,join as uh6,extname as lh6,basename as ch6,sep as P68}from"path";function dh6($,Z){if($===Z||ch6($)==="index.html")return{"Cache-Control":"no-cache"};if($.includes(`${P68}assets${P68}`))return{"Cache-Control":"public, max-age=31536000, immutable"};return{}}function A68($,Z){let Q=v80(Z),X=v80($);return X===Q||X.startsWith(Q+"/")}function T68({requestPath:$,clientDir:Z}){let Q=$.startsWith("/")?$.slice(1):$,X=v80(Z,Q);if(!A68(X,Z))return null;return X}function ih6($,Z="../client"){let Q=new URL($),X=hh6(Q.pathname);return v80(X,Z)}function ph6($={}){let{env:Z="production",clientDir:Q=mh6,isServerPath:X=()=>!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(X(W))return null;let K=T68({requestPath:W,clientDir:Q});if(!K)return null;let H=uh6(K,"index.html"),F=v80(Q,"index.html"),U=J.headers.get("accept"),B=U?.includes("text/html")||U?.includes("*/*")&&["",".html"].includes(lh6(K))?[H,F]:[];for(let O of[K,...B])try{let L=Bun.file(O);if(await L.exists())return new Response(L,{headers:dh6(O,F)})}catch{}if(W.includes("/assets/"))return new Response("Not Found",{status:404,headers:{"Cache-Control":"no-store"}});return null}}var mh6="./dist/client";var q68=()=>{};var M68={};E6(M68,{tryUpgradePreviewWs:()=>eh6,tryHandlePreviewHttp:()=>sh6,previewWebSocketHandler:()=>$u6,parsePreviewBaseDomain:()=>ah6,isPreviewWsData:()=>Vk0,extractHandleFromHost:()=>SF1});function oh6($){if($.method!=="GET")return!1;return($.headers.get("accept")??"").includes("text/html")}function rh6(){return new Response(th6,{status:503,headers:{"content-type":"text/html; charset=utf-8","cache-control":"no-store","retry-after":"1","access-control-allow-origin":"*"}})}function ah6($){if(!$||$.trim()==="")return null;let Z=$.includes("{handle}")?$.replace("{handle}","__handle__"):$,Q;try{Q=new URL(Z)}catch{return null}let X=Q.hostname;if($.includes("{handle}")){let Y=X.indexOf(".");if(Y<=0||Y===X.length-1)return null;return X.slice(Y+1)}return X}function SF1($,Z){if(!$||!Z)return null;let Q=$.indexOf(":"),X=(Q>=0?$.slice(0,Q):$).toLowerCase(),J=`.${Z.toLowerCase().replace(/^\.+|\.+$/g,"")}`;if(!X.endsWith(J))return null;let G=X.slice(0,X.length-J.length);if(!G||G.includes("."))return null;return G}async function sh6($,Z){let Q=SF1($.headers.get("host"),Z.baseDomain);if(!Q)return null;let X=await Z.getRunner();if(!X)return x80(503,"preview proxy not configured");let Y=await X.proxyPreviewRequest(Q,$);if(Y.headers.get($x)&&oh6($))return rh6();return Y.headers.delete($x),Y}function x80($,Z){return new Response(JSON.stringify({error:Z}),{status:$,headers:{"content-type":"application/json","access-control-allow-origin":"*"}})}function Vk0($){return typeof $==="object"&&$!==null&&$.kind==="preview"}async function eh6($,Z,Q){if(($.headers.get("upgrade")??"").toLowerCase()!=="websocket")return null;let X=SF1($.headers.get("host"),Q.baseDomain);if(!X)return null;let Y=await Q.getRunner();if(!Y)return x80(503,"preview proxy not configured");let J=await Y.resolvePreviewUpstreamUrl(X);if(!J)return x80(404,"sandbox not found");let G=new URL($.url);if(G.pathname.startsWith("/_sandbox"))return x80(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 x80(426,"upgrade failed");return}function b80($,Z,Q,X){if(Z.closed)return;Z.closed=!0;try{$.close(Q,X)}catch{}try{Z.upstream?.close()}catch{}}var nh6=256,th6='<!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>',$u6;var I68=D(()=>{l81();$u6={open($){let Z=$.data;if(!Vk0(Z))return;let Q;try{Q=Z.upstreamProtocols.length>0?new WebSocket(Z.upstreamUrl,Z.upstreamProtocols):new WebSocket(Z.upstreamUrl)}catch(X){console.warn(`[preview-ws] failed to dial upstream ${Z.upstreamUrl}: ${X instanceof Error?X.message:String(X)}`),b80($,Z,1011,"upstream connect failed");return}Q.binaryType="arraybuffer",Z.upstream=Q,Q.addEventListener("open",()=>{while(Z.pending.length>0){let X=Z.pending.shift();if(X!==void 0)Q.send(X)}}),Q.addEventListener("message",(X)=>{if(Z.closed)return;$.send(X.data)}),Q.addEventListener("close",(X)=>{b80($,Z,X.code||1000,X.reason||"")}),Q.addEventListener("error",()=>{b80($,Z,1011,"upstream error")})},message($,Z){let Q=$.data;if(!Vk0(Q))return;let X=Q.upstream;if(X&&X.readyState===WebSocket.OPEN){X.send(Z);return}if(Q.pending.length>=nh6){b80($,Q,1011,"preview ws backlog overflow");return}Q.pending.push(Z)},close($){let Z=$.data;if(!Vk0(Z))return;b80($,Z,1000,"")}}});var C68={};E6(C68,{printBanner:()=>Qu6,bannerLines:()=>S68,BANNER_LINES:()=>V68,BANNER_GRADIENT:()=>k68});function Zu6($){let Z=Number.parseInt($.slice(1),16);return[Z>>16&255,Z>>8&255,Z&255]}function S68($){let Z=V68.map((Q,X)=>{let[Y,J,G]=Zu6(k68[X]);return`\x1B[38;2;${Y};${J};${G}m${Q}\x1B[39m`});if($!==void 0)Z.push(`\x1B[2m v${$}\x1B[22m`);return Z}function Qu6($){console.log("");for(let Z of S68($))console.log(Z);console.log("")}var V68,k68;var _68=D(()=>{V68=[" \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 "],k68=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"]});D8();var dF1="13";function mF1($){return{name:"decocms",systemDatabaseUrl:$.systemDatabaseUrl,systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:$.poolSize,runAdminServer:!1,executorID:$.executorID,applicationVersion:dF1,...$.listenQueues!==void 0?{listenQueues:$.listenQueues}:{}}}D8();import r68 from"pg";var iF1=8314027461559302n,a68=600000,s68=500;async function pF1($,Z){let{databaseUrl:Q,lockTimeoutMs:X=a68}=$,Y=$.log??((K)=>console.log(K)),J=new r68.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",[iF1.toString()])).rows[0]?.locked===!0,W)break;if(Date.now()-G>=X)throw Error(`Timed out after ${X}ms waiting for the DBOS migration lock. Another process is still migrating the dbos schema; this pod will restart and retry.`);await c$(s68)}let K=Date.now()-G;if(K>1000)Y(`[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)",[iF1.toString()])}catch{}await J.end().catch(()=>{})}}U$();hk0();R6();function r58(){let $=(process.env.BUN_OPTIONS??"").split(/\s+/).filter(Boolean);return[...process.argv.slice(1),...$]}function QS0($,Z){for(let Q=0;Q<$.length;Q++){let X=$[Q];if(X===void 0)continue;if(X===Z)return $[Q+1];if(X.startsWith(`${Z}=`))return X.slice(Z.length+1)}return}function kU1(){let $=r58();if($.includes("--cpu-prof")){console.log(JSON.stringify({msg:"cpu-profiling-active",dir:QS0($,"--cpu-prof-dir")??process.cwd(),name:QS0($,"--cpu-prof-name"),markdown:$.includes("--cpu-prof-md"),intervalUs:Number(QS0($,"--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.'}))}JS0();var a80;function gU1(){if(process.env.HEAP_WATCH!=="1")return()=>{};let $=Number(process.env.HEAP_WATCH_INTERVAL_MS??60000),Z=async()=>{let Q=QE();if(!Q)return;let X={};try{let{heapStats:Y}=await import("bun:jsc"),J=Y(),G=Object.entries(J.objectTypeCounts).sort((W,K)=>K[1]-W[1]).slice(0,20);X={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,...X}))};return Z().catch(()=>{}),a80=setInterval(()=>void Z().catch(()=>{}),$),a80.unref?.(),process.on("SIGUSR2",()=>{try{let Q=Bun.generateHeapSnapshot("v8"),X=typeof Q==="string"?Q:JSON.stringify(Q),Y=`/tmp/heap-${process.pid}-${Date.now()}.heapsnapshot`;Bun.write(Y,X),console.log(JSON.stringify({msg:"heap-snapshot-written",path:Y}))}catch(Q){console.error("[heap-watch] snapshot failed:",Q)}}),()=>{if(a80)clearInterval(a80)}}import*as e58 from"bun:jsc";var{startSamplingProfiler:$98,samplingProfilerStackTraces:Z98}=e58;function hU1(){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{$98()}catch(J){return console.error("[stall-watchdog] failed to start sampling profiler:",J),()=>{}}let Q,X=performance.now()+Z,Y=()=>{let J=performance.now(),G=J-X;X=J+Z;let W=[];try{W=Z98()?.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(Y,Z),Q.unref?.()};return Q=setTimeout(Y,Z),Q.unref?.(),()=>{if(Q)clearTimeout(Q)}}function uU1(){kU1();let $=[gU1(),yU1(),hU1()];return()=>{for(let Z of $)Z()}}import{existsSync as Fu6}from"fs";var vJ=E0();MU1();var{DBOS:f80,DBOSClient:Xu6}=await import("@dbos-inc/dbos-sdk");function fF1($,Z){if(!Z)return $;let Q=new URL($);if(!Q.searchParams.has("sslmode"))Q.searchParams.set("sslmode","verify-full");return Q.toString()}var Yu6=[$3,eG,xU,fU,qO,ej],Ju6=vJ.dispatchRole==="worker"?Yu6:vJ.dispatchRole==="api"?[]:void 0;f80.setConfig(mF1({systemDatabaseUrl:fF1(vJ.databaseUrl,vJ.databasePgSsl),poolSize:vJ.dbosPoolSize,executorID:vJ.podName,listenQueues:Ju6}));var{createApp:Gu6}=await Promise.resolve().then(() => (z68(),E68)),{isServerPath:Wu6}=await Promise.resolve().then(() => (t80(),HU1)),{createAssetHandler:Ku6,resolveClientDir:y68}=await Promise.resolve().then(() => (q68(),R68)),Hu6=vJ.port,v68=y68(import.meta.url,"../client"),g68=Fu6(v68)?v68:y68(import.meta.url,"../dist/client"),Uu6=Ku6({clientDir:g68,isServerPath:Wu6}),Nu6={"X-Frame-Options":"DENY","Content-Security-Policy":"frame-ancestors 'none'"};function Bu6($){let Z=new Headers($.headers);for(let[Q,X]of Object.entries(Nu6))Z.set(Q,X);return new Response($.body,{status:$.status,statusText:$.statusText,headers:Z})}var{parsePreviewBaseDomain:Ou6,tryHandlePreviewHttp:Du6,tryUpgradePreviewWs:Lu6,previewWebSocketHandler:CF1,isPreviewWsData:_F1}=await Promise.resolve().then(() => (I68(),M68)),{getOrInitSharedRunner:h68}=await Promise.resolve().then(() => (dK(),Ej$)),u68=Ou6(process.env.STUDIO_SANDBOX_PREVIEW_URL_PATTERN),b68={baseDomain:u68??"",getRunner:h68};if(process.env.STUDIO_SANDBOX_TENANT_POOLS?.trim())h68().catch(($)=>{console.warn("[lifecycle] eager sandbox provider init for tenant pools failed:",$ instanceof Error?$.message:String($))});var kk0=await Gu6({clientDir:g68}),vF1=process.env.DBOS_CONDUCTOR_KEY?.trim(),x68=process.env.DBOS_CONDUCTOR_URL?.trim();await pF1({databaseUrl:fF1(vJ.databaseUrl,vJ.databasePgSsl)},()=>f80.launch({...vF1?{conductorKey:vF1}:{},...vF1&&x68?{conductorURL:x68}:{}}));console.log(`[dbos] application version: ${f80.applicationVersion}`);var bF1=5,xF1=0;await c8(async()=>{xF1++;try{return await kk0.initDbos()}catch($){let Z=xF1>=bF1?"giving up":"retrying";throw console.warn(`[dbos] initDbos attempt ${xF1}/${bF1} failed, ${Z}`,$),$}},{maxAttempts:bF1,minTimeout:1000,maxTimeout:1e4,jitter:0.5});if(!vJ.isCli){let{bannerLines:$}=await Promise.resolve().then(() => (_68(),C68));console.log("");for(let Z of $())console.log(Z)}var wu6=Bun.serve({idleTimeout:0,port:Hu6,hostname:"0.0.0.0",fetch:async($,Z)=>{if(u68){let X=await Lu6($,Z,b68);if(X===void 0)return;if(X)return X;let Y=await Du6($,b68);if(Y)return Y}let Q=await Uu6($);if(Q)return Bu6(Q);return kk0.fetch($,{server:Z})},websocket:{open($){if(_F1($.data))CF1.open($)},message($,Z){if(_F1($.data))CF1.message($,Z)},close($){if(_F1($.data))CF1.close($)}},development:!1}),ju6=uU1();if(vJ.localMode)Promise.resolve().then(() => (kx(),X20)).then(async({seedLocalMode:$,markSeedComplete:Z,healLocalJwks:Q})=>{try{let X=await Q();if(X>0)console.log(`[local-mode] cleared ${X} undecryptable JWKS key(s); Better Auth will generate a fresh one`);let Y=await $()}catch(X){console.error("Failed to seed local mode:",X)}finally{Z()}}).catch(async($)=>{console.error("Failed to load local-mode module:",$);try{let{markSeedComplete:Z}=await Promise.resolve().then(() => (kx(),X20));Z()}catch{}});var f68=!1;async function Eu6($){let Z;try{Z=await Xu6.create({systemDatabaseUrl:fF1(vJ.databaseUrl,vJ.databasePgSsl),systemDatabaseSchemaName:"dbos"});let Q=await Z.listWorkflows({status:"PENDING",queueName:eG,executorId:$,loadInput:!1,loadOutput:!1});if(Q.length===0){console.log(`[shutdown] no in-flight thread-gate gates to hand off (executor ${$})`);return}let X=Q.map((Y)=>Y.workflowID);await Z.resumeWorkflows(X,{queueName:eG}),console.log(`[shutdown] re-enqueued ${X.length} in-flight thread-gate gate(s) for re-adoption by a live executor (from ${$}):`,X)}catch(Q){console.error("[shutdown] thread-gate handoff failed:",Q)}finally{await Z?.destroy().catch(()=>{})}}async function Sk0($){if(f68)return;f68=!0,console.log(`
|
|
3371
3371
|
[shutdown] Received ${$}, shutting down gracefully...`);let Z=Number(process.env.SHUTDOWN_GRACE_SECONDS??60)*1000,Q=Math.max(Z-5000,1e4),X=setTimeout(()=>{console.error(`[shutdown] Timed out after ${Q}ms, forcing exit.`),process.exit(1)},Q);X.unref?.();let Y=0;try{ju6(),kk0.markShuttingDown();let J=tF1(vJ.dispatchRole,Q,process.env.SHUTDOWN_DRAIN_MS);await c$(J),await wu6.stop(!0);let G=f80.executorID;await f80.shutdown(),await Eu6(G),await kk0.shutdown()}catch(J){console.error("[shutdown] Error during shutdown:",J),Y=1}clearTimeout(X),process.exit(Y)}process.on("SIGTERM",()=>Sk0("SIGTERM"));process.on("SIGINT",()=>Sk0("SIGINT"));process.on("SIGHUP",()=>Sk0("SIGHUP"));process.on("unhandledRejection",($)=>{console.error("[process] Unhandled rejection:",$)});process.on("uncaughtException",($)=>{console.error("[process] Uncaught exception:",$),Sk0("uncaughtException")});
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c,j as s,X as u}from"./index-5B52xTOA.js";import{C as f}from"./index-BnUF69Xj.js";import{a as x}from"./thread-route-CQon9zXo.js";import{u as g}from"./use-task-metadata-D9xWgzqM.js";import{AppViewContent as h}from"./project-app-view-1JBqF3nD.js";import"./use-mobile-BokN3khf.js";import"./thread-button-D-I-zXqG.js";import"./sidebar-D8Tc1UVx.js";import"./LayoutLeft-DjraUMOt.js";import"./sheet-D9m0P3zo.js";import"./X-OWtKWzrO.js";import"./tooltip-CHcv7vpK.js";import"./index-DWriZztG.js";import"./use-panel-navigate-LbotBi2g.js";import"./use-project-scope-DRX-2oGI.js";import"./use-virtual-mcp-BHMUr50m.js";import"./use-mcp-client-9whVU7s_.js";import"./auth-tV1hCKGk.js";import"./github-repo-BknN0SVI.js";import"./use-route-default-main-DwKotY2X.js";import"./hooks-DKYPCdyl.js";import"./backoff-8mStPHYB.js";import"./task-board-DA1OXSBE.js";import"./schema-DKsfkUZc.js";import"./agent-icon-CewaSqRN.js";import"./AlertCircle-C7XYh1LP.js";import"./Tool01-BHCuYnNd.js";import"./ArrowUp-CxvPahwH.js";import"./ArrowLeft-DKFKdEhW.js";import"./ArrowRight-C3zict5j.js";import"./XCircle-DSYCUNqi.js";import"./ZoomOut-t3-E-TJP.js";import"./Globe04-DoMDE8nx.js";import"./CheckCircle-DEKqa3kd.js";import"./Check-BwfKMLPG.js";import"./ChevronUp-q4oPKOr-.js";import"./UserSquare-CwnA5RxT.js";import"./Copy01-917cUj_E.js";import"./CreditCard01-hELMg_Sx.js";import"./DotsVertical-CjkUMOgL.js";import"./Download01-CPeKzo-8.js";import"./Eye-DCYC67JM.js";import"./Share07-Bk6B9aSm.js";import"./XClose-CYkHWH70.js";import"./Image01-DxuQg5ZH.js";import"./Key01-BfSgijgm.js";import"./Link01-BWLuQcpR.js";import"./LinkExternal01-B9ClJ_Qg.js";import"./Monitor01-DOO4XwwF.js";import"./Sun--gVdMihW.js";import"./Package-DRQz4wLi.js";import"./Palette-Dvhh2dSK.js";import"./Plus-Ba6qwkMK.js";import"./SearchLg-CMgR0JDw.js";import"./SearchMd-Txysqj2G.js";import"./Stars01-B4M5Dqxf.js";import"./Trash01-CsCfpAji.js";import"./Upload01-CSXC71XX.js";import"./User01-Dw-e2hAE.js";import"./Users01-CeFLwGnt.js";import"./Zap-W432e5DT.js";import"./toolbar-icon-button-Ck3bLZJt.js";import"./use-in-settings-DrFPuBfp.js";import"./shell-layout-AEte0VG5.js";import"./avatar-rHLwoa5q.js";import"./download-app-dialog-BQ7HWcho.js";import"./dialog-BiHCD51F.js";import"./command-BNilmTZt.js";import"./index-CWlUHRjI.js";import"./integration-icon-BRrj_nQ-.js";import"./project-icon-BP9y_bVa.js";import"./use-is-desktop-app-BNujXJc_.js";import"./required-auth-layout-DbtOtVgf.js";import"./autosend-BDpreygY.js";import"./use-org-sso-BGw8bd5o.js";import"./resizable-BW_ZfeKg.js";import"./route-page-header-C4PBl-Ei.js";import"./gateway-client-DoWzklSe.js";import"./tool-namespace-DmnQIdtF.js";import"./use-mcp-tools-BluO18uV.js";import"./sandbox-lifecycle-context-CrFzAnv2.js";import"./use-session-runtime-B9APT_KV.js";import"./thread-intent-DaU5iLn7.js";import"./slugify-CEUa2lfQ.js";import"./chat-context-Ca0p-LeW.js";import"./use-entitlements-D0BQDImb.js";import"./use-ai-providers-IgWeF_Yp.js";import"./location-oTTXFrSF.js";import"./use-decopilot-events-quQMn9Rz.js";import"./use-organization-settings-C3DPM_fy.js";import"./sandbox-url-D3mC8qhT.js";import"./sandbox-start-errors-BK_aDCyt.js";import"./content-blocks-o63cs2vh.js";import"./mcp-app-renderer-Ca7_cQUC.js";import"./types-BV0w2KFI.js";import"./site-url-en5df9c-.js";import"./use-connect-companion-BqdT6eBl.js";import"./companions-core-BnuxEm_5.js";import"./metadata-D72DunRR.js";import"./github-repo-scope-C8GSbvaz.js";import"./form-AcJZamdD.js";import"./label-C-VUR_VH.js";import"./input-Ch7PZbUp.js";import"./use-debounced-value-C3kyQhaa.js";import"./provision-repo-scoped-github-connection-B6zdkC6p.js";import"./useQueries-BDbrh3nq.js";import"./authenticate-and-persist-oauth-CQZSXOm4.js";import"./mcp-oauth-ByCC8Qls.js";import"./track-DiO9emD6.js";import"./extract-connection-data-BU2XiGI0.js";import"./connection-BLi7jQlA.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 _o(){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{_o as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c,j as e,aR as b,u as g}from"./index-5B52xTOA.js";import{C as j}from"./index-BnUF69Xj.js";import{F as v,H as S}from"./file-share-button-FPPBVpL5.js";import{u as k,b as y,e as _}from"./use-org-fs-XPr29KJT.js";import{S as w}from"./settings-tab-BIz8TjB6.js";import{b as M}from"./thread-route-CQon9zXo.js";import"./use-mobile-BokN3khf.js";import"./thread-button-D-I-zXqG.js";import"./sidebar-D8Tc1UVx.js";import"./LayoutLeft-DjraUMOt.js";import"./sheet-D9m0P3zo.js";import"./X-OWtKWzrO.js";import"./tooltip-CHcv7vpK.js";import"./index-DWriZztG.js";import"./use-panel-navigate-LbotBi2g.js";import"./use-project-scope-DRX-2oGI.js";import"./use-virtual-mcp-BHMUr50m.js";import"./use-mcp-client-9whVU7s_.js";import"./auth-tV1hCKGk.js";import"./github-repo-BknN0SVI.js";import"./use-route-default-main-DwKotY2X.js";import"./hooks-DKYPCdyl.js";import"./backoff-8mStPHYB.js";import"./task-board-DA1OXSBE.js";import"./schema-DKsfkUZc.js";import"./agent-icon-CewaSqRN.js";import"./AlertCircle-C7XYh1LP.js";import"./Tool01-BHCuYnNd.js";import"./ArrowUp-CxvPahwH.js";import"./ArrowLeft-DKFKdEhW.js";import"./ArrowRight-C3zict5j.js";import"./XCircle-DSYCUNqi.js";import"./ZoomOut-t3-E-TJP.js";import"./Globe04-DoMDE8nx.js";import"./CheckCircle-DEKqa3kd.js";import"./Check-BwfKMLPG.js";import"./ChevronUp-q4oPKOr-.js";import"./UserSquare-CwnA5RxT.js";import"./Copy01-917cUj_E.js";import"./CreditCard01-hELMg_Sx.js";import"./DotsVertical-CjkUMOgL.js";import"./Download01-CPeKzo-8.js";import"./Eye-DCYC67JM.js";import"./Share07-Bk6B9aSm.js";import"./XClose-CYkHWH70.js";import"./Image01-DxuQg5ZH.js";import"./Key01-BfSgijgm.js";import"./Link01-BWLuQcpR.js";import"./LinkExternal01-B9ClJ_Qg.js";import"./Monitor01-DOO4XwwF.js";import"./Sun--gVdMihW.js";import"./Package-DRQz4wLi.js";import"./Palette-Dvhh2dSK.js";import"./Plus-Ba6qwkMK.js";import"./SearchLg-CMgR0JDw.js";import"./SearchMd-Txysqj2G.js";import"./Stars01-B4M5Dqxf.js";import"./Trash01-CsCfpAji.js";import"./Upload01-CSXC71XX.js";import"./User01-Dw-e2hAE.js";import"./Users01-CeFLwGnt.js";import"./Zap-W432e5DT.js";import"./toolbar-icon-button-Ck3bLZJt.js";import"./use-in-settings-DrFPuBfp.js";import"./shell-layout-AEte0VG5.js";import"./avatar-rHLwoa5q.js";import"./download-app-dialog-BQ7HWcho.js";import"./dialog-BiHCD51F.js";import"./command-BNilmTZt.js";import"./index-CWlUHRjI.js";import"./integration-icon-BRrj_nQ-.js";import"./project-icon-BP9y_bVa.js";import"./use-is-desktop-app-BNujXJc_.js";import"./required-auth-layout-DbtOtVgf.js";import"./autosend-BDpreygY.js";import"./use-org-sso-BGw8bd5o.js";import"./resizable-BW_ZfeKg.js";import"./route-page-header-C4PBl-Ei.js";import"./input-Ch7PZbUp.js";import"./popover-NaqlKnjU.js";import"./scroll-area-CT2uLFlc.js";import"./select-co_8WMTl.js";import"./breadcrumb-IWYYE82J.js";import"./extract-connection-data-BU2XiGI0.js";import"./metadata-D72DunRR.js";import"./connection-BLi7jQlA.js";import"./chat-context-Ca0p-LeW.js";import"./thread-intent-DaU5iLn7.js";import"./slugify-CEUa2lfQ.js";import"./use-entitlements-D0BQDImb.js";import"./use-ai-providers-IgWeF_Yp.js";import"./location-oTTXFrSF.js";import"./use-decopilot-events-quQMn9Rz.js";import"./use-organization-settings-C3DPM_fy.js";import"./build-improve-prompt-doc-DjnFeIXb.js";import"./empty-state-DsElBMMJ.js";import"./use-date-fns-locale-LLY33UYn.js";import"./differenceInSeconds-C3x8sHUj.js";import"./use-connection-BEwzIksW.js";import"./mcp-oauth-ByCC8Qls.js";import"./alert-dialog-KH9mOL8K.js";import"./textarea--CRK0SIu.js";import"./use-debounced-autosave-DFCrc7Hc.js";import"./add-connection-dialog-BFpQrV1k.js";import"./collection-search-CD1yqrrY.js";import"./connection-card-CkuD5goh.js";import"./useInfiniteQuery-DHlpZiWe.js";import"./infiniteQueryObserver-DBtLPG-c.js";import"./connection-slug-CITJ0kGN.js";import"./drawer-HIpVVhTG.js";import"./form-AcJZamdD.js";import"./label-C-VUR_VH.js";import"./connection-form-helpers-Cxrr2Bda.js";import"./authenticate-and-persist-oauth-CQZSXOm4.js";import"./collection-tabs-Caw1XzY7.js";import"./badge-Ebj_JDGo.js";import"./use-infinite-scroll-BJrYoU-n.js";import"./useSuspenseInfiniteQuery-Balc4sSo.js";import"./file-type-icon-CCjwL9Av.js";import"./checkbox-D4TitUUf.js";import"./search-input-CpUyBIsL.js";import"./use-mcp-auth-status-aufdX61a.js";import"./types-BV0w2KFI.js";import"./use-mcp-tools-BluO18uV.js";import"./use-mcp-prompts-FcI-EfBr.js";import"./utils-CVEq3hMx.js";import"./switch-C79E3ozz.js";import"./use-project-native-view-presence-CdsjA_Hh.js";import"./match-site-slug-config-D3fUJ6vX.js";import"./use-file-configs-CqSvS8B1.js";import"./site-slug-uya6Wp4-.js";import"./optimistic-project-sidebar-views-xseDJWMX.js";import"./virtual-mcp-CvQogmVE.js";import"./repository-import-picker-hQls-kLa.js";import"./use-navigate-to-agent-BaR6MzKD.js";import"./repository-picker-D9AC6JjL.js";import"./github-icon-B2uCnmRP.js";import"./use-debounced-value-C3kyQhaa.js";import"./sandbox-url-D3mC8qhT.js";import"./secret-picker-nvhL5xBH.js";import"./use-secrets-Dc5jrOaj.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 R(){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 fr(){const i=c.c(1);let t;return i[0]===Symbol.for("react.memo_cache_sentinel")?(t=e.jsx(j.Content,{children:e.jsx(R,{})}),i[0]=t):t=i[0],t}export{fr as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c as U,b as B,j as t,B as I,u as K}from"./index-5B52xTOA.js";import{C as M}from"./index-BnUF69Xj.js";import{T as R,a as $,c as A}from"./tooltip-CHcv7vpK.js";import{n as L}from"./Download01-CPeKzo-8.js";import{n as O}from"./LinkExternal01-B9ClJ_Qg.js";import{s as V}from"./XClose-CYkHWH70.js";import{F as E}from"./file-type-icon-CCjwL9Av.js";import{a as q,F as D,f as G}from"./file-preview-CZuyFB46.js";import{a as H}from"./use-thread-outputs-CCVACMN4.js";import{a as J}from"./use-panel-navigate-LbotBi2g.js";import{S as Q}from"./settings-tab-BIz8TjB6.js";import{b as W,a as X}from"./thread-route-CQon9zXo.js";import"./use-mobile-BokN3khf.js";import"./thread-button-D-I-zXqG.js";import"./sidebar-D8Tc1UVx.js";import"./LayoutLeft-DjraUMOt.js";import"./sheet-D9m0P3zo.js";import"./X-OWtKWzrO.js";import"./use-route-default-main-DwKotY2X.js";import"./hooks-DKYPCdyl.js";import"./use-mcp-client-9whVU7s_.js";import"./auth-tV1hCKGk.js";import"./backoff-8mStPHYB.js";import"./task-board-DA1OXSBE.js";import"./schema-DKsfkUZc.js";import"./agent-icon-CewaSqRN.js";import"./AlertCircle-C7XYh1LP.js";import"./Tool01-BHCuYnNd.js";import"./ArrowUp-CxvPahwH.js";import"./ArrowLeft-DKFKdEhW.js";import"./ArrowRight-C3zict5j.js";import"./XCircle-DSYCUNqi.js";import"./ZoomOut-t3-E-TJP.js";import"./Globe04-DoMDE8nx.js";import"./CheckCircle-DEKqa3kd.js";import"./Check-BwfKMLPG.js";import"./ChevronUp-q4oPKOr-.js";import"./UserSquare-CwnA5RxT.js";import"./Copy01-917cUj_E.js";import"./CreditCard01-hELMg_Sx.js";import"./DotsVertical-CjkUMOgL.js";import"./Eye-DCYC67JM.js";import"./Share07-Bk6B9aSm.js";import"./Image01-DxuQg5ZH.js";import"./Key01-BfSgijgm.js";import"./Link01-BWLuQcpR.js";import"./Monitor01-DOO4XwwF.js";import"./Sun--gVdMihW.js";import"./Package-DRQz4wLi.js";import"./Palette-Dvhh2dSK.js";import"./Plus-Ba6qwkMK.js";import"./SearchLg-CMgR0JDw.js";import"./SearchMd-Txysqj2G.js";import"./Stars01-B4M5Dqxf.js";import"./Trash01-CsCfpAji.js";import"./Upload01-CSXC71XX.js";import"./User01-Dw-e2hAE.js";import"./Users01-CeFLwGnt.js";import"./Zap-W432e5DT.js";import"./toolbar-icon-button-Ck3bLZJt.js";import"./use-in-settings-DrFPuBfp.js";import"./shell-layout-AEte0VG5.js";import"./avatar-rHLwoa5q.js";import"./download-app-dialog-BQ7HWcho.js";import"./dialog-BiHCD51F.js";import"./use-project-scope-DRX-2oGI.js";import"./use-virtual-mcp-BHMUr50m.js";import"./github-repo-BknN0SVI.js";import"./command-BNilmTZt.js";import"./index-CWlUHRjI.js";import"./integration-icon-BRrj_nQ-.js";import"./project-icon-BP9y_bVa.js";import"./use-is-desktop-app-BNujXJc_.js";import"./required-auth-layout-DbtOtVgf.js";import"./autosend-BDpreygY.js";import"./use-org-sso-BGw8bd5o.js";import"./resizable-BW_ZfeKg.js";import"./route-page-header-C4PBl-Ei.js";import"./index-DWriZztG.js";import"./use-org-fs-XPr29KJT.js";import"./utils-DzlNpEnS.js";import"./editor-VChyWwG_.js";import"./markdown-DY9ms4Kt.js";import"./org-file-open-context-B29htGOp.js";import"./chat-context-Ca0p-LeW.js";import"./thread-intent-DaU5iLn7.js";import"./slugify-CEUa2lfQ.js";import"./use-entitlements-D0BQDImb.js";import"./use-ai-providers-IgWeF_Yp.js";import"./location-oTTXFrSF.js";import"./use-decopilot-events-quQMn9Rz.js";import"./use-organization-settings-C3DPM_fy.js";import"./input-Ch7PZbUp.js";import"./popover-NaqlKnjU.js";import"./scroll-area-CT2uLFlc.js";import"./select-co_8WMTl.js";import"./breadcrumb-IWYYE82J.js";import"./extract-connection-data-BU2XiGI0.js";import"./metadata-D72DunRR.js";import"./connection-BLi7jQlA.js";import"./build-improve-prompt-doc-DjnFeIXb.js";import"./empty-state-DsElBMMJ.js";import"./use-date-fns-locale-LLY33UYn.js";import"./differenceInSeconds-C3x8sHUj.js";import"./use-connection-BEwzIksW.js";import"./mcp-oauth-ByCC8Qls.js";import"./alert-dialog-KH9mOL8K.js";import"./textarea--CRK0SIu.js";import"./use-debounced-autosave-DFCrc7Hc.js";import"./add-connection-dialog-BFpQrV1k.js";import"./collection-search-CD1yqrrY.js";import"./connection-card-CkuD5goh.js";import"./useInfiniteQuery-DHlpZiWe.js";import"./infiniteQueryObserver-DBtLPG-c.js";import"./connection-slug-CITJ0kGN.js";import"./drawer-HIpVVhTG.js";import"./form-AcJZamdD.js";import"./label-C-VUR_VH.js";import"./connection-form-helpers-Cxrr2Bda.js";import"./authenticate-and-persist-oauth-CQZSXOm4.js";import"./collection-tabs-Caw1XzY7.js";import"./badge-Ebj_JDGo.js";import"./use-infinite-scroll-BJrYoU-n.js";import"./useSuspenseInfiniteQuery-Balc4sSo.js";import"./checkbox-D4TitUUf.js";import"./search-input-CpUyBIsL.js";import"./use-mcp-auth-status-aufdX61a.js";import"./types-BV0w2KFI.js";import"./use-mcp-tools-BluO18uV.js";import"./use-mcp-prompts-FcI-EfBr.js";import"./utils-CVEq3hMx.js";import"./switch-C79E3ozz.js";import"./use-project-native-view-presence-CdsjA_Hh.js";import"./match-site-slug-config-D3fUJ6vX.js";import"./use-file-configs-CqSvS8B1.js";import"./site-slug-uya6Wp4-.js";import"./optimistic-project-sidebar-views-xseDJWMX.js";import"./virtual-mcp-CvQogmVE.js";import"./repository-import-picker-hQls-kLa.js";import"./use-navigate-to-agent-BaR6MzKD.js";import"./repository-picker-D9AC6JjL.js";import"./github-icon-B2uCnmRP.js";import"./use-debounced-value-C3kyQhaa.js";import"./sandbox-url-D3mC8qhT.js";import"./secret-picker-nvhL5xBH.js";import"./use-secrets-Dc5jrOaj.js";import"./omit-sandbox-map-jj4lCB2U.js";import"./serial-task-queue-CGOeQgpr.js";function Y(r){const e=U.c(60),{file:o,onClose:v}=r,i=B();let l,m;e[0]!==o.filename?(l=t.jsx(E,{filename:o.filename,className:"h-4.5 w-3.5 shrink-0"}),m=t.jsx("span",{className:"truncate text-xs font-medium text-foreground",children:o.filename}),e[0]=o.filename,e[1]=l,e[2]=m):(l=e[1],m=e[2]);let k;e[3]!==o.size?(k=G(o.size),e[3]=o.size,e[4]=k):k=e[4];let x;e[5]!==k?(x=t.jsx("span",{className:"shrink-0 text-xs text-muted-foreground",children:k}),e[5]=k,e[6]=x):x=e[6];let p;e[7]!==l||e[8]!==m||e[9]!==x?(p=t.jsxs("div",{className:"flex min-w-0 flex-1 items-center gap-2 px-2",children:[l,m,x]}),e[7]=l,e[8]=m,e[9]=x,e[10]=p):p=e[10];let u;e[11]!==i?(u=i("mainPanelTabs.fileTab.download"),e[11]=i,e[12]=u):u=e[12];let b;e[13]===Symbol.for("react.memo_cache_sentinel")?(b=t.jsx(L,{size:14}),e[13]=b):b=e[13];let a;e[14]!==o.downloadUrl||e[15]!==o.filename?(a=t.jsx("a",{href:o.downloadUrl,download:o.filename,children:b}),e[14]=o.downloadUrl,e[15]=o.filename,e[16]=a):a=e[16];let n;e[17]!==u||e[18]!==a?(n=t.jsx(R,{asChild:!0,children:t.jsx(I,{variant:"ghost",size:"icon","aria-label":u,asChild:!0,children:a})}),e[17]=u,e[18]=a,e[19]=n):n=e[19];let j;e[20]!==i?(j=i("mainPanelTabs.fileTab.download"),e[20]=i,e[21]=j):j=e[21];let s;e[22]!==j?(s=t.jsx($,{side:"bottom",children:j}),e[22]=j,e[23]=s):s=e[23];let f;e[24]!==s||e[25]!==n?(f=t.jsxs(A,{children:[n,s]}),e[24]=s,e[25]=n,e[26]=f):f=e[26];let c;e[27]!==i?(c=i("mainPanelTabs.fileTab.openInNewTab"),e[27]=i,e[28]=c):c=e[28];let d;e[29]!==o.downloadUrl?(d=()=>window.open(o.downloadUrl,"_blank","noopener"),e[29]=o.downloadUrl,e[30]=d):d=e[30];let T;e[31]===Symbol.for("react.memo_cache_sentinel")?(T=t.jsx(O,{size:14}),e[31]=T):T=e[31];let h;e[32]!==c||e[33]!==d?(h=t.jsx(R,{asChild:!0,children:t.jsx(I,{variant:"ghost",size:"icon","aria-label":c,onClick:d,children:T})}),e[32]=c,e[33]=d,e[34]=h):h=e[34];let g;e[35]!==i?(g=i("mainPanelTabs.fileTab.openInNewTab"),e[35]=i,e[36]=g):g=e[36];let w;e[37]!==g?(w=t.jsx($,{side:"bottom",children:g}),e[37]=g,e[38]=w):w=e[38];let y;e[39]!==h||e[40]!==w?(y=t.jsxs(A,{children:[h,w]}),e[39]=h,e[40]=w,e[41]=y):y=e[41];let C;e[42]!==i?(C=i("mainPanelTabs.fileTab.close"),e[42]=i,e[43]=C):C=e[43];let S;e[44]===Symbol.for("react.memo_cache_sentinel")?(S=t.jsx(V,{size:14}),e[44]=S):S=e[44];let N;e[45]!==v||e[46]!==C?(N=t.jsx(R,{asChild:!0,children:t.jsx(I,{variant:"ghost",size:"icon","aria-label":C,onClick:v,children:S})}),e[45]=v,e[46]=C,e[47]=N):N=e[47];let P;e[48]!==i?(P=i("mainPanelTabs.fileTab.close"),e[48]=i,e[49]=P):P=e[49];let _;e[50]!==P?(_=t.jsx($,{side:"bottom",children:P}),e[50]=P,e[51]=_):_=e[51];let z;e[52]!==N||e[53]!==_?(z=t.jsxs(A,{children:[N,_]}),e[52]=N,e[53]=_,e[54]=z):z=e[54];let F;return e[55]!==f||e[56]!==y||e[57]!==z||e[58]!==p?(F=t.jsxs("div",{className:"flex h-9 shrink-0 items-center gap-1 border-b border-border/60 px-2",children:[p,f,y,z]}),e[55]=f,e[56]=y,e[57]=z,e[58]=p,e[59]=F):F=e[59],F}function Z(r){const e=U.c(31),{fileKey:o,taskId:v}=r,i=B(),{closePanel:l}=J(),{data:m,isPending:k}=H(v);let x;e[0]!==o||e[1]!==m?(x=m?.find(s=>s.key===o)??null,e[0]=o,e[1]=m,e[2]=x):x=e[2];const p=x;let u;e[3]!==l?(u=()=>l(),e[3]=l,e[4]=u):u=e[4];const b=u;if(!p){if(k){let w;return e[5]===Symbol.for("react.memo_cache_sentinel")?(w=t.jsx("div",{className:"h-full w-full bg-background",children:t.jsx(q,{})}),e[5]=w):w=e[5],w}let s;e[6]!==o?(s=o.split("/").pop()??o,e[6]=o,e[7]=s):s=e[7];let f;e[8]!==s?(f=t.jsx(E,{filename:s,className:"h-7.5 w-6"}),e[8]=s,e[9]=f):f=e[9];let c;e[10]!==i?(c=i("mainPanelTabs.fileTab.fileNotAvailable"),e[10]=i,e[11]=c):c=e[11];let d;e[12]!==c?(d=t.jsx("span",{className:"text-sm text-muted-foreground",children:c}),e[12]=c,e[13]=d):d=e[13];let T;e[14]!==i?(T=i("mainPanelTabs.fileTab.close"),e[14]=i,e[15]=T):T=e[15];let h;e[16]!==b||e[17]!==T?(h=t.jsx(I,{variant:"ghost",size:"sm",onClick:b,children:T}),e[16]=b,e[17]=T,e[18]=h):h=e[18];let g;return e[19]!==f||e[20]!==d||e[21]!==h?(g=t.jsxs("div",{className:"flex h-full w-full flex-col items-center justify-center gap-2 bg-background",children:[f,d,h]}),e[19]=f,e[20]=d,e[21]=h,e[22]=g):g=e[22],g}let a;e[23]!==p||e[24]!==b?(a=t.jsx(Y,{file:p,onClose:b}),e[23]=p,e[24]=b,e[25]=a):a=e[25];let n;e[26]!==p?(n=t.jsx("div",{className:"relative min-h-0 flex-1",children:t.jsx(D,{file:p})}),e[26]=p,e[27]=n):n=e[27];let j;return e[28]!==a||e[29]!==n?(j=t.jsxs("div",{className:"flex h-full w-full flex-col bg-background",children:[a,n]}),e[28]=a,e[29]=n,e[30]=j):j=e[30],j}function ee(){const r=U.c(5);let e;r[0]===Symbol.for("react.memo_cache_sentinel")?(e={strict:!1},r[0]=e):e=r[0];const o=K(e),v=W(),i=X(),l="key"in o&&typeof o.key=="string"?o.key:void 0;let m;return r[1]!==i||r[2]!==l||r[3]!==v?(m=l?t.jsx(Z,{fileKey:l,taskId:i},l):t.jsx(Q,{virtualMcpId:v}),r[1]=i,r[2]=l,r[3]=v,r[4]=m):m=r[4],m}function Li(){const r=U.c(1);let e;return r[0]===Symbol.for("react.memo_cache_sentinel")?(e=t.jsx(M.Content,{children:t.jsx(ee,{})}),r[0]=e):e=r[0],e}export{Li as default};
|