decocms 4.39.1 → 4.40.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-u_fBOVyY.js → AlertCircle-BQoAJ7Pc.js} +1 -1
- package/dist/client/assets/{ArrowUpRight-B7oqacnu.js → ArrowUpRight-CfcRtZ8o.js} +1 -1
- package/dist/client/assets/{Check-CoeNm-Fb.js → Check-ByMMRPdN.js} +1 -1
- package/dist/client/assets/{CheckCircle-D_qX7Wu-.js → CheckCircle-uSDvDj68.js} +1 -1
- package/dist/client/assets/{ChevronDown-De7XvT4B.js → ChevronDown-Ds93wwRe.js} +1 -1
- package/dist/client/assets/{ChevronRight-CURMncBH.js → ChevronRight-BUqzT2AZ.js} +1 -1
- package/dist/client/assets/{ChevronUp-CBTUYzCz.js → ChevronUp-hSMVM7_9.js} +1 -1
- package/dist/client/assets/{Circle-D4-xS1r1.js → Circle-CIBa1C-R.js} +1 -1
- package/dist/client/assets/{Copy01-CdPaRTEu.js → Copy01-Dn74k5DV.js} +1 -1
- package/dist/client/assets/{DotsVertical-Pp2jpB6T.js → DotsVertical-OqISO6nN.js} +1 -1
- package/dist/client/assets/{Eye-CAidyk-u.js → Eye-DMTaYgfE.js} +1 -1
- package/dist/client/assets/{FilterLines-BQ5DO5nV.js → FilterLines-BmSHEouM.js} +1 -1
- package/dist/client/assets/{Globe01-BY0HwssS.js → Globe01-DCyvmziv.js} +1 -1
- package/dist/client/assets/{Globe04-DTFhdAUV.js → Globe04-iXXVu6cY.js} +1 -1
- package/dist/client/assets/{HardDrive-BBhbfxpB.js → HardDrive-BOMqphCJ.js} +1 -1
- package/dist/client/assets/{Key01-v43zM8GB.js → Key01-CyxwtgAw.js} +1 -1
- package/dist/client/assets/{LayoutLeft-DMuh3dol.js → LayoutLeft-Lv2ZhZwN.js} +1 -1
- package/dist/client/assets/{LinkExternal01-DizJBzRa.js → LinkExternal01-CqYi3PbY.js} +1 -1
- package/dist/client/assets/{List-BSfxSA_P.js → List-CjQLqVV2.js} +1 -1
- package/dist/client/assets/{Loading02-1br334Ls.js → Loading02-Br4Qsbis.js} +1 -1
- package/dist/client/assets/{Monitor01-6wkZ31Ga.js → Monitor01-Dj7mHFbg.js} +1 -1
- package/dist/client/assets/{Palette-BNMTzJmO.js → Palette-CYfpdldc.js} +1 -1
- package/dist/client/assets/{Play-DNu8WeXr.js → Play-Ct1jkZWO.js} +1 -1
- package/dist/client/assets/{Plus-K-wmvAph.js → Plus-BdYdKkzh.js} +1 -1
- package/dist/client/assets/{SearchLg-E-6v51_h.js → SearchLg-BKceB_7Q.js} +1 -1
- package/dist/client/assets/{SearchMd-D-sOvAyR.js → SearchMd-CIebSZD2.js} +1 -1
- package/dist/client/assets/{Settings02-BkQsQUx_.js → Settings02-CO032VQ5.js} +1 -1
- package/dist/client/assets/{Shield01-0vcfP_Bj.js → Shield01-BOKAaJ_3.js} +1 -1
- package/dist/client/assets/{Star01-BVxO1Myt.js → Star01-BEjXt6EU.js} +1 -1
- package/dist/client/assets/{Stars01-lwVetYeP.js → Stars01-CCdr3QPh.js} +1 -1
- package/dist/client/assets/{Stars02-Dd_WQduu.js → Stars02-RAKDMyiv.js} +1 -1
- package/dist/client/assets/{Sun-Cw73nfMa.js → Sun-CZYFQMTR.js} +1 -1
- package/dist/client/assets/{SwitchHorizontal01-QAtj-Il1.js → SwitchHorizontal01-ypxOAaEV.js} +1 -1
- package/dist/client/assets/{Tool01-C8xQpUIZ.js → Tool01-BjsyNNOX.js} +1 -1
- package/dist/client/assets/{Trash01-DPFi9PA4.js → Trash01-CkdTj_48.js} +1 -1
- package/dist/client/assets/{Upload01-lC6xtRQw.js → Upload01-pwMs2gu0.js} +1 -1
- package/dist/client/assets/{User01-hJOcKNxa.js → User01-CJUJXUar.js} +1 -1
- package/dist/client/assets/{Users01-tGq2wTZ6.js → Users01-DXfhOPWM.js} +1 -1
- package/dist/client/assets/{Users03-DzN7dj32.js → Users03-BgboQghl.js} +1 -1
- package/dist/client/assets/{X-4sgEVVNt.js → X-BsHMY5bm.js} +1 -1
- package/dist/client/assets/{XCircle-DaV6PtAS.js → XCircle-C_yScwcR.js} +1 -1
- package/dist/client/assets/{XClose-BCR3rChr.js → XClose-CAJh-urJ.js} +1 -1
- package/dist/client/assets/{Zap-DpBPv-ox.js → Zap-dPP-v905.js} +1 -1
- package/dist/client/assets/{ZapSquare-BGPnf4f0.js → ZapSquare-BXCU0Zkc.js} +1 -1
- package/dist/client/assets/{ZoomOut-Ctpx1YvP.js → ZoomOut-Z_A5DKtk.js} +1 -1
- package/dist/client/assets/{access-gate-SvUJFN_C.js → access-gate-AdoS_2mp.js} +1 -1
- package/dist/client/assets/{add-section-modal-DMeqUcX5.js → add-section-modal-D_ZZ5oen.js} +1 -1
- package/dist/client/assets/{agent-capabilities-DZ9kv69B.js → agent-capabilities-Bbkrqncd.js} +1 -1
- package/dist/client/assets/{agent-icon-ar_vJnIP.js → agent-icon-7Bw2_U9B.js} +1 -1
- package/dist/client/assets/{agents-list-DuZxV2OE.js → agents-list-B7x2LOrI.js} +1 -1
- package/dist/client/assets/{ai-providers-BbAGlQkI.js → ai-providers-Dz-kVb5L.js} +1 -1
- package/dist/client/assets/{alert-L0pO38Q3.js → alert-Bkzkh_iw.js} +1 -1
- package/dist/client/assets/{alert-dialog-BqKvCtM1.js → alert-dialog-Byb-84-w.js} +1 -1
- package/dist/client/assets/{app-editor-Dvz0WEKA.js → app-editor-BHj37cnk.js} +1 -1
- package/dist/client/assets/{auth-XFHkSh-o.js → auth-B4QHxlg3.js} +1 -1
- package/dist/client/assets/{auth-catchall-C5j5k2Uy.js → auth-catchall-BzSqMvEC.js} +1 -1
- package/dist/client/assets/{auth-entry-Dg5NAy5Y.js → auth-entry-D_mlfJVE.js} +1 -1
- package/dist/client/assets/{auth-split-layout-Cp-Q0sSh.js → auth-split-layout-B8OLwRqq.js} +1 -1
- package/dist/client/assets/{authenticate-and-persist-oauth-DaM8HjE5.js → authenticate-and-persist-oauth-BnshO0o5.js} +1 -1
- package/dist/client/assets/{automation-list-row-BVBayvZE.js → automation-list-row-BaV_jeUH.js} +1 -1
- package/dist/client/assets/{automation-runs-B9xnQLue.js → automation-runs-BTJrtjXJ.js} +1 -1
- package/dist/client/assets/{automations-DRAmpohs.js → automations-Biqrif9W.js} +1 -1
- package/dist/client/assets/{autosend-CClgXIaj.js → autosend-DQZl8KyP.js} +1 -1
- package/dist/client/assets/{avatar-6ATnmAM3.js → avatar-Btcoxp_w.js} +1 -1
- package/dist/client/assets/{badge-C7P9yqxq.js → badge-Be_N2FuK.js} +1 -1
- package/dist/client/assets/{block-document-Bu0cjWKg.js → block-document-DxWYxLCB.js} +1 -1
- package/dist/client/assets/{brand-context-DDMqW6nj.js → brand-context-Dgf9CN4T.js} +1 -1
- package/dist/client/assets/{breadcrumb-OQ_aByE1.js → breadcrumb-C8UiQMDq.js} +1 -1
- package/dist/client/assets/{buckets-DVVplzuB.js → buckets-CybWqIzM.js} +1 -1
- package/dist/client/assets/{bulk-category-panel-B9GoqJbh.js → bulk-category-panel-BoL-CJ9Q.js} +1 -1
- package/dist/client/assets/{calendar-CcjjQI7a.js → calendar-C4lHCPAe.js} +1 -1
- package/dist/client/assets/{capability-load-error-CSHglNC_.js → capability-load-error-pQOhA0uu.js} +1 -1
- package/dist/client/assets/{card-B-GsvtgE.js → card-DhyAaYbH.js} +1 -1
- package/dist/client/assets/{category-editor-1JIZXYD5.js → category-editor-Bf6cCUx0.js} +1 -1
- package/dist/client/assets/{chat-context-BbsnjVFp.js → chat-context-CSDQ2V59.js} +1 -1
- package/dist/client/assets/{checkbox-DEsoCucY.js → checkbox-CAOM_6bX.js} +1 -1
- package/dist/client/assets/{cli-auth-success-C1OQ45jV.js → cli-auth-success-Dpmw0i2r.js} +1 -1
- package/dist/client/assets/{collection-detail-FJFCh4jK.js → collection-detail-Dn9SOp1e.js} +1 -1
- package/dist/client/assets/{collection-display-button-lHCkGO13.js → collection-display-button-CHYrGfBD.js} +1 -1
- package/dist/client/assets/{collection-search-EaTm0p-o.js → collection-search-Dq5OTSM6.js} +1 -1
- package/dist/client/assets/{collection-table-wrapper-C7blT0Cf.js → collection-table-wrapper-VRqIBkXR.js} +1 -1
- package/dist/client/assets/{collection-tabs-DNSQSjy1.js → collection-tabs-C-L6t4af.js} +1 -1
- package/dist/client/assets/{command-DAt6J9ad.js → command-CzaPqse4.js} +1 -1
- package/dist/client/assets/{commerce-onboarding-ACT0JClu.js → commerce-onboarding-CCMdnsEm.js} +1 -1
- package/dist/client/assets/{connect-desktop-dialog-lfHtL5V0.js → connect-desktop-dialog-B05P9T9A.js} +1 -1
- package/dist/client/assets/{connection-card-CS0hSMex.js → connection-card-uIsG5TxJ.js} +1 -1
- package/dist/client/assets/{connection-detail-MCrFPO3s.js → connection-detail-BdYVs7Y7.js} +1 -1
- package/dist/client/assets/{connection-form-helpers-CBDpOYpL.js → connection-form-helpers-BEcWB5x3.js} +1 -1
- package/dist/client/assets/{connections-D8VFh-6r.js → connections-Can6s0sB.js} +1 -1
- package/dist/client/assets/{decopilot-sse-pool-mvuZVxgM.js → decopilot-sse-pool-C_JJ7Vcr.js} +1 -1
- package/dist/client/assets/{dialog-ENiMgywK.js → dialog-DCS2OMH4.js} +1 -1
- package/dist/client/assets/{domain-settings-B4hug6b9.js → domain-settings-DWf_GZRj.js} +1 -1
- package/dist/client/assets/{drawer-Czd0mkY1.js → drawer-3OE7N_2G.js} +1 -1
- package/dist/client/assets/{dropdown-menu-DUhff13i.js → dropdown-menu-DcvaX3-F.js} +1 -1
- package/dist/client/assets/{empty-state-wAVi1oUS.js → empty-state-hC3dFQXj.js} +1 -1
- package/dist/client/assets/{extract-connection-data-apQAx4DA.js → extract-connection-data-qlF7ZWrt.js} +1 -1
- package/dist/client/assets/{file-explorer-CiG9XFV_.js → file-explorer-QRM6gqgi.js} +1 -1
- package/dist/client/assets/{file-type-icon-ecASEjUt.js → file-type-icon-DOhIggRJ.js} +1 -1
- package/dist/client/assets/{files-BK-o9pIS.js → files-DMPByaM3.js} +1 -1
- package/dist/client/assets/{form-D6BYzENq.js → form-TXHpDJV5.js} +1 -1
- package/dist/client/assets/{general-XTC0xCpQ.js → general-CBUVeNez.js} +1 -1
- package/dist/client/assets/{github-repo-picker-C5oGcq8M.js → github-repo-picker-ks7lf0Ye.js} +1 -1
- package/dist/client/assets/{hooks-D54tQot2.js → hooks-BQcGIBer.js} +1 -1
- package/dist/client/assets/{index-3E41hDS1.js → index-2kogngRp.js} +1 -1
- package/dist/client/assets/{index-BQAU4Nbt.js → index-7o2IzKac.js} +1 -1
- package/dist/client/assets/{index-CfNswDhg.js → index-AQ-qvM9M.js} +28 -28
- package/dist/client/assets/{index-Bx3uS_hZ.js → index-BS7P87_E.js} +1 -1
- package/dist/client/assets/{index-CO6RkIly.js → index-B_hBmOqK.js} +1 -1
- package/dist/client/assets/{index-DnCtpqhS.js → index-BbP2mJoY.js} +1 -1
- package/dist/client/assets/{index-BJnhhuIA.js → index-BveuunA1.js} +1 -1
- package/dist/client/assets/index-C2ybUFaX.css +1 -0
- package/dist/client/assets/{index-BBt8lO9v.js → index-CN-uq_6E.js} +1 -1
- package/dist/client/assets/{index-Dt1LnJS8.js → index-CXah3T6b.js} +1 -1
- package/dist/client/assets/{index-DQUYX0YL.js → index-CZiyq9bL.js} +10 -10
- package/dist/client/assets/{index-DRv-sra6.js → index-CbYZTRTc.js} +1 -1
- package/dist/client/assets/{index-DERK7GTO.js → index-DBpZEK7p.js} +1 -1
- package/dist/client/assets/{index-Dt6td9Rx.js → index-Jx11C7Wo.js} +1 -1
- package/dist/client/assets/{index-redirect-B0_lzWog.js → index-redirect-D0BYIrK2.js} +1 -1
- package/dist/client/assets/{index-DI5Oa957.js → index-v5fWJqXW.js} +1 -1
- package/dist/client/assets/{input-Cjb2J9MM.js → input-DnW5bl5u.js} +1 -1
- package/dist/client/assets/{integration-icon-BDkigt_p.js → integration-icon-BSkS97aB.js} +1 -1
- package/dist/client/assets/{invite-member-dialog-DXEYeLiW.js → invite-member-dialog-BaE04Tgl.js} +1 -1
- package/dist/client/assets/{label-DshozH4Q.js → label-DeNhnW1K.js} +1 -1
- package/dist/client/assets/{login-mVLPfpi4.js → login-D7-Umlvc.js} +1 -1
- package/dist/client/assets/{mcp-oauth-Ci4vNgUa.js → mcp-oauth-B6n4lY5H.js} +1 -1
- package/dist/client/assets/{members-DadWxPGo.js → members-D6b_SyPY.js} +1 -1
- package/dist/client/assets/{monaco-editor-CI8y-igE.js → monaco-editor-CP8nMfPS.js} +1 -1
- package/dist/client/assets/{monitoring-stats-row-DpvV6PNU.js → monitoring-stats-row-Bx24pOuR.js} +1 -1
- package/dist/client/assets/{oauth-callback-DVFijaUR.js → oauth-callback-DpPxlohU.js} +1 -1
- package/dist/client/assets/{oauth-callback-ai-provider-jLxs4KCm.js → oauth-callback-ai-provider-DI_CjOsa.js} +1 -1
- package/dist/client/assets/{onboarding-lpkBL8R3.js → onboarding-DatxqVBu.js} +1 -1
- package/dist/client/assets/{org-install-BWVD--Xy.js → org-install-CN9xltsE.js} +1 -1
- package/dist/client/assets/{org-layout-D0R478VI.js → org-layout-CkUoNFto.js} +1 -1
- package/dist/client/assets/{organization-choice-BxIzdNDd.js → organization-choice-DsGaGCSI.js} +1 -1
- package/dist/client/assets/{page-seo-form-BQEqaV_k.js → page-seo-form-BAwWoCrB.js} +1 -1
- package/dist/client/assets/page-seo-sheet-DlP_RlkU.js +1 -0
- package/dist/client/assets/{popover-BOKW5zFu.js → popover-BtkVBk9O.js} +1 -1
- package/dist/client/assets/{post-editor-CvMS-D4q.js → post-editor-DSGnoUmA.js} +1 -1
- package/dist/client/assets/{primitives-t1DKG8dx.js → primitives-DaNtYP9L.js} +1 -1
- package/dist/client/assets/{profile-D_uy-Vyw.js → profile-C0fMGjjc.js} +1 -1
- package/dist/client/assets/project-app-view-D3NA74TU.js +1 -0
- package/dist/client/assets/record-editor-BDKvL12x.js +1 -0
- package/dist/client/assets/registry-DqY4gr9J.js +2 -0
- package/dist/client/assets/{registry-layout-CGxevo1O.js → registry-layout-BOz2CQvs.js} +1 -1
- package/dist/client/assets/{require-capability-DckhRYrY.js → require-capability-x8Fj1OOf.js} +1 -1
- package/dist/client/assets/{required-auth-layout-B6P8BZXx.js → required-auth-layout-DGg5Hfsv.js} +1 -1
- package/dist/client/assets/{reset-password-nPds93A3.js → reset-password-DS17zoPA.js} +1 -1
- package/dist/client/assets/{roles-CWuTh0lN.js → roles-Dkepi16W.js} +1 -1
- package/dist/client/assets/{search-input-BwgNLY_Z.js → search-input-DbIhh1K9.js} +1 -1
- package/dist/client/assets/{secrets-DHX_Z_Rl.js → secrets-D3_ZBUEY.js} +1 -1
- package/dist/client/assets/{sections-editor-CMgMh_5f.js → sections-editor-BXA6IVl3.js} +1 -1
- package/dist/client/assets/{select-CHw1rZxb.js → select-BloW6tH6.js} +1 -1
- package/dist/client/assets/{select-model-8aoQk-W0.js → select-model-CXs0fKE0.js} +1 -1
- package/dist/client/assets/{seo-editor-DLmnsMEU.js → seo-editor-gYApNiNE.js} +1 -1
- package/dist/client/assets/{settings-layout-uEIvGUb6.js → settings-layout-Dijgs1Xz.js} +1 -1
- package/dist/client/assets/{settings-section-DiWtqSxc.js → settings-section-C9xZekaQ.js} +1 -1
- package/dist/client/assets/{shell-controls-CKuPzLz9.js → shell-controls--WEatP4X.js} +1 -1
- package/dist/client/assets/shell-layout-DzGqfR6q.js +1 -0
- package/dist/client/assets/{sidebar-CxCBNA0Y.js → sidebar-Dvoriw7V.js} +1 -1
- package/dist/client/assets/{skeleton-DwBLPSUq.js → skeleton-Ky3jBeUP.js} +1 -1
- package/dist/client/assets/{sso-lsEoZG3T.js → sso-DQVCony7.js} +1 -1
- package/dist/client/assets/{store-C96y8SQi.js → store-6qk4XsXB.js} +1 -1
- package/dist/client/assets/store-registry-CBjkyCS6.js +2 -0
- package/dist/client/assets/{studio-tools-Cxn-a01z.js → studio-tools-rhnNh1x_.js} +1 -1
- package/dist/client/assets/{switch-BRacOW5j.js → switch-BSaVqgeH.js} +1 -1
- package/dist/client/assets/{tab-id-DAJ8K7VA.js → tab-id-C4S0EPFu.js} +1 -1
- package/dist/client/assets/{table-iCoLNVVy.js → table-BPvxLDuP.js} +1 -1
- package/dist/client/assets/{tabs-D9Lr9O1h.js → tabs-BwxHAAl0.js} +1 -1
- package/dist/client/assets/{textarea-B0qrNygS.js → textarea-ByYUJCqn.js} +1 -1
- package/dist/client/assets/{toggle-group-D23mMoI6.js → toggle-group-Dh7bEZa1.js} +1 -1
- package/dist/client/assets/{toolbar-DYlczvVF.js → toolbar-BR5ie4nh.js} +1 -1
- package/dist/client/assets/{toolbar-icon-button-DzZ5dxV7.js → toolbar-icon-button-CD0nzSrw.js} +1 -1
- package/dist/client/assets/{tools-list-CkdOIN8c.js → tools-list-CfZBf99o.js} +1 -1
- package/dist/client/assets/{tooltip-BLSNbZdl.js → tooltip-BvZsaZo1.js} +1 -1
- package/dist/client/assets/{types-Bp4JL_Ou.js → types-tGK3rxv3.js} +1 -1
- package/dist/client/assets/{use-ai-providers-NXHygcqK.js → use-ai-providers-Df_6Lv76.js} +1 -1
- package/dist/client/assets/{use-automations-RupZQqjF.js → use-automations-CX4ke4Gn.js} +1 -1
- package/dist/client/assets/{use-capability-CrNuEAVC.js → use-capability-WrhvLN3Q.js} +1 -1
- package/dist/client/assets/{use-clock-tick-ZPm6Gk-T.js → use-clock-tick-Co2laZ_v.js} +1 -1
- package/dist/client/assets/{use-collections-n-kV5xPU.js → use-collections-0y8z6h6B.js} +1 -1
- package/dist/client/assets/{use-connection-BZ5Hc_30.js → use-connection-D6vKxP6c.js} +1 -1
- package/dist/client/assets/{use-copy-CM5rjPLd.js → use-copy-DEsN1JWA.js} +1 -1
- package/dist/client/assets/{use-create-virtual-mcp-DYXZurHd.js → use-create-virtual-mcp-CjfdEFEm.js} +1 -1
- package/dist/client/assets/{use-debounced-autosave-BWfuMVS_.js → use-debounced-autosave-ykAA77u8.js} +1 -1
- package/dist/client/assets/{use-debounced-value-oaJxOL2O.js → use-debounced-value-BpYGxCFi.js} +1 -1
- package/dist/client/assets/{use-decopilot-events-BDS8ty0S.js → use-decopilot-events-DepdMgPX.js} +1 -1
- package/dist/client/assets/{use-delete-connection-CrldCg6G.js → use-delete-connection-DRyaCpbw.js} +1 -1
- package/dist/client/assets/{use-file-configs-DEd-s0z6.js → use-file-configs-DKRnyJ3w.js} +1 -1
- package/dist/client/assets/{use-infinite-scroll-Cr6_ft35.js → use-infinite-scroll-CAwsvAnT.js} +1 -1
- package/dist/client/assets/{use-join-requests-Ct_gFOYj.js → use-join-requests-DDC__CaF.js} +1 -1
- package/dist/client/assets/{use-mcp-client-CpTzznaF.js → use-mcp-client-B3WRhZdt.js} +1 -1
- package/dist/client/assets/{use-mcp-prompts-Dm8_CGFp.js → use-mcp-prompts-C1R-WVFz.js} +1 -1
- package/dist/client/assets/{use-mcp-tools-TTqCbNGf.js → use-mcp-tools-BVxAk373.js} +1 -1
- package/dist/client/assets/{use-members-qEf3D3hd.js → use-members-Cf18JViN.js} +1 -1
- package/dist/client/assets/{use-mobile-BLGI6cd7.js → use-mobile-Cpcc36Em.js} +1 -1
- package/dist/client/assets/{use-navigate-to-agent-DHOVC_lu.js → use-navigate-to-agent-IHN5iTDI.js} +1 -1
- package/dist/client/assets/{use-org-auth-client-DSy7H3jw.js → use-org-auth-client-C3YxdmcM.js} +1 -1
- package/dist/client/assets/{use-org-sso-Bh2WqSJu.js → use-org-sso-reL-KJxj.js} +1 -1
- package/dist/client/assets/{use-organization-roles-z0R4zAAW.js → use-organization-roles--3C-OX-U.js} +1 -1
- package/dist/client/assets/{use-organization-settings-Cf6pG73i.js → use-organization-settings-D6NjaCfk.js} +1 -1
- package/dist/client/assets/{use-registry-connections-2NoDBIvH.js → use-registry-connections-Cs9PospA.js} +1 -1
- package/dist/client/assets/{use-secrets-mefXmSZ3.js → use-secrets-kk5sLuVp.js} +1 -1
- package/dist/client/assets/{use-status-sounds-DTNSxrs_.js → use-status-sounds-I1tajHMm.js} +1 -1
- package/dist/client/assets/{use-view-mode-BwFQhw8j.js → use-view-mode-CEB4Lc4b.js} +1 -1
- package/dist/client/assets/{use-virtual-mcp-Byf6ClWt.js → use-virtual-mcp-vpIsUoOg.js} +1 -1
- package/dist/client/assets/useInfiniteQuery-oZPFa0FQ.js +1 -0
- package/dist/client/assets/useSuspenseInfiniteQuery-fOtFcKQk.js +1 -0
- package/dist/client/assets/{variant-calendar-CQSPkAH1.js → variant-calendar-BMmdw5vi.js} +1 -1
- package/dist/client/assets/{view-mode-toggle-C_0ldD9g.js → view-mode-toggle-CjXL0rHJ.js} +1 -1
- package/dist/client/index.html +2 -2
- package/dist/server/cli.js +2 -2
- package/dist/server/server.js +2 -2
- package/package.json +1 -1
- package/dist/client/assets/index-DhHJ9QL9.css +0 -1
- package/dist/client/assets/page-seo-sheet-BTlFX_ru.js +0 -1
- package/dist/client/assets/project-app-view-IjNB9Kfk.js +0 -1
- package/dist/client/assets/record-editor-8NkYrju9.js +0 -1
- package/dist/client/assets/registry-CP-FGFMC.js +0 -2
- package/dist/client/assets/shell-layout-DGWDI1nA.js +0 -1
- package/dist/client/assets/store-registry-Y6SRWXOa.js +0 -2
- package/dist/client/assets/useInfiniteQuery-vMkQSqBy.js +0 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-7aSzUOf1.js +0 -1
package/dist/server/cli.js
CHANGED
|
@@ -84433,7 +84433,7 @@ ${d}`;h(N);return}if(E(null,y),t.strategy==="count"){if($--,$===0)h()}if(t.strat
|
|
|
84433
84433
|
SELECT * FROM link_sandboxes WHERE handle = $handle
|
|
84434
84434
|
`);function h(_){if(t===void 0)return!0;let v=IM(_),n=v&&IM(t)?Qru(t):t,D=v?Qru(_):Hru(_),O=Tbt(n,D);return O===""||!O.startsWith("..")&&!ybt(O)}return{upsert(_){f.run({$handle:_.handle,$status:_.status,$sandboxPath:_.sandboxPath,$port:_.port??null,$previewUrl:_.previewUrl??null,$repoCloneUrl:_.repoCloneUrl??null,$branch:_.branch??null,$projectName:_.projectName??null,$error:_.error??null,$now:Date.now()})},list(){return l.all().map(t1i)},reconcile(){let _=Date.now();for(let v of l.all().map(t1i)){if(!h(v.sandboxPath)){c.run({$handle:v.handle,$now:_});continue}if(!IM(v.sandboxPath)){E.run({$handle:v.handle,$now:_});continue}if(v.status==="spawning"||v.status==="ready"||v.status==="failed"||v.status==="missing")d.run({$handle:v.handle,$now:_})}return l.all().map(t1i)},prune(_){let v=[],n=[],D=this.reconcile();for(let O of D){if(!h(O.sandboxPath)){n.push({handle:O.handle,sandboxPath:O.sandboxPath,reason:"outside_root",deletedFiles:!1});continue}if(_.missing&&O.status==="missing"){$.run({$handle:O.handle}),v.push({handle:O.handle,sandboxPath:O.sandboxPath,reason:"missing",deletedFiles:!1});continue}if(!_.merged||!IM(O.sandboxPath))continue;if(O.branch===null||O.branch.trim()===""){n.push({handle:O.handle,sandboxPath:O.sandboxPath,reason:"no_branch",deletedFiles:!1});continue}if(!w2(O.sandboxPath,["rev-parse","--is-inside-work-tree"]).ok){n.push({handle:O.handle,sandboxPath:O.sandboxPath,reason:"git_unavailable",deletedFiles:!1});continue}let N=w2(O.sandboxPath,["status","--porcelain"]);if(!N.ok){n.push({handle:O.handle,sandboxPath:O.sandboxPath,reason:"git_unavailable",deletedFiles:!1});continue}if(N.stdout.trim()!==""){n.push({handle:O.handle,sandboxPath:O.sandboxPath,reason:"dirty_worktree",deletedFiles:!1});continue}let y=Rru(O.sandboxPath,O.branch);if(y===null){n.push({handle:O.handle,sandboxPath:O.sandboxPath,reason:"git_unavailable",deletedFiles:!1});continue}if(!y){n.push({handle:O.handle,sandboxPath:O.sandboxPath,reason:"branch_not_merged",deletedFiles:!1});continue}Obt(O.sandboxPath,{recursive:!0,force:!0}),$.run({$handle:O.handle}),v.push({handle:O.handle,sandboxPath:O.sandboxPath,reason:"merged",deletedFiles:!0})}return{removed:v,skipped:n}},delete(_){$.run({$handle:_})},inspect(_){let v=w.get({$handle:_});if(v===null)return null;let n=t1i(v),D=0,O=null;if(IM(n.sandboxPath)&&w2(n.sandboxPath,["rev-parse","--is-inside-work-tree"]).ok){let N=w2(n.sandboxPath,["status","--porcelain"]);if(N.ok){let y=N.stdout.trim();D=y===""?0:y.split(`
|
|
84435
84435
|
`).length}if(n.branch!==null&&n.branch.trim()!=="")O=Rru(n.sandboxPath,n.branch)}return{handle:n.handle,branch:n.branch,sandboxPath:n.sandboxPath,dirtyCount:D,merged:O}},close(){u.close()}}}var eHi=()=>{};function Ibt(i,u){return u?[["umount","-f",i]]:[["fusermount","-uz",i],["umount","-l",i]]}function Mru(i,u){if(process.platform==="win32")return;for(let t of Ibt(i,u))if(Bun.spawnSync(t,{stdout:"ignore",stderr:"ignore",timeout:5000}).exitCode===0)break}var qru=()=>{};import{existsSync as Pbt,readdirSync as Abt}from"fs";import{rm as xbt}from"fs/promises";import{join as Vru}from"path";async function rru(i,u={}){let t=u.detach??kbt,f=u.exists??Pbt,l=u.readdir??((d)=>Abt(d)),c=u.rm??((d)=>xbt(d,{recursive:!0,force:!0})),E=Vru(i,"org");if(f(E))for(let d of l(E))t(Vru(E,d));await c(i)}var kbt=(i)=>Mru(i,process.platform==="darwin");var mru=g(()=>{qru()});import{join as Gbt}from"path";function eru(i){let u=i.purge??rru;return{stopSandbox(t){return i.provider.deleteSandbox(t)},inspectSandbox(t){return i.registry.inspect(t)},async removeSandbox(t){try{return await Z1(async()=>{if(await i.provider.deleteSandbox(t),i.provider.hasHandle(t))throw Error("Can't delete \u2014 run in progress");let l=i.registry.inspect(t)?.sandboxPath??Gbt(i.dataDir,"sandboxes",t);await u(l)},{maxAttempts:2,minTimeout:250,jitter:0}),i.registry.delete(t),{ok:!0}}catch(f){let l=f instanceof Jc?f.cause:f;return{ok:!1,error:l instanceof Error?l.message:String(l)}}}}}var aru=g(()=>{B4();mru()});import{randomBytes as Sbt}from"crypto";import{mkdir as jbt}from"fs/promises";import{createServer as Kbt}from"net";import{join as Jbt}from"path";function oru(i,u){return Error(`sandbox failed to start: ${i}`,{cause:u})}function Xbt(i){if(!(i instanceof Error))return!1;return i.name==="TimeoutError"||/timed out|timeout|operation was aborted|aborted/i.test(i.message)}function sru(i){if(i instanceof Error){let u=i.cause;if(u instanceof Error&&u.message)return u.message;return i.message}return String(i)}function Lbt(i){if(!i)return null;let u=i.trim().replace(/\/+$/,"");if(!u)return null;let t=u.split(/[/:]/).filter(Boolean).at(-1);if(!t)return null;return t.replace(/\.git$/i,"")||null}function Wbt(i){return{repoCloneUrl:i.repo?.cloneUrl??null,branch:i.repo?.branch??null,projectName:Lbt(i.repo?.cloneUrl)}}function pru(i){let u=i.maxSandboxes??20,t=new Map,f=i.pickPort??Ybt,l=i.fetchImpl??fetch,c=i.resolvePreviewUrl??((D,O)=>`http://127.0.0.1:${O}`),E=(D)=>Jbt(i.dataDir,"sandboxes",D),d=(D)=>{try{i.registry?.upsert(D)}catch(O){console.warn(`[user-desktop] failed to persist sandbox lifecycle handle=${D.handle} status=${D.status}:`,O)}},$=(D)=>{try{i.onEvent?.(D)}catch{}},w=async(D)=>{let O=new AbortController,N=setTimeout(()=>O.abort(),1500);try{let y=await l(`${D}/health`,{signal:O.signal});if(!y.ok)console.warn(`[user-desktop] probe ${D}/health \u2192 ${y.status} (treating as dead)`);return y.ok}catch(y){return console.warn(`[user-desktop] probe ${D}/health failed: ${y instanceof Error?y.message:String(y)} (treating as dead)`),!1}finally{clearTimeout(N)}},h=(D)=>{console.warn(`[user-desktop] evicting dead daemon handle=${D.handle} port=${D.port}`);try{D.process.kill("SIGTERM")}catch{}if(t.get(D.handle)===D)t.delete(D.handle),d({handle:D.handle,status:"stopped",sandboxPath:E(D.handle),port:null,previewUrl:null,...D.registryMetadata,error:null}),$({handle:D.handle,phase:"evicted"})},_=new Map;function v(){if(t.size<u)return;let D=[...t.values()].filter((N)=>N.activeDispatchCount===0).sort((N,y)=>N.lastUsedAt-y.lastUsedAt);if(D.length===0){console.warn(`[user-desktop] at cap ${t.size}/${u} but every sandbox is pinned (active dispatch) \u2014 exceeding cap temporarily`);return}let O=D[0];console.log(`[user-desktop] evicting LRU victim handle=${O.handle} port=${O.port} (cap ${u} reached, size=${t.size})`);try{O.process.kill("SIGTERM")}catch{}t.delete(O.handle),d({handle:O.handle,status:"stopped",sandboxPath:E(O.handle),port:null,previewUrl:null,...O.registryMetadata,error:null}),$({handle:O.handle,phase:"evicted"})}let n=async(D)=>{let O=Wbt(D),N=E(D.handle);d({handle:D.handle,status:"spawning",sandboxPath:N,port:null,previewUrl:null,...O,error:null}),$({handle:D.handle,phase:"spawning",sandboxPath:N,projectName:O.projectName,branch:O.branch}),v();let y,Z=null,T;try{await jbt(N,{recursive:!0}),console.log(`[user-desktop] ensure handle=${D.handle} repo=${D.repo?.cloneUrl??"(none)"} branch=${D.repo?.branch??"(none)"} runtime=${D.workload?.runtime??"(autodetect)"} pm=${D.workload?.packageManager??"(autodetect)"}`),T=Sbt(24).toString("hex");let[S,A]=await Promise.all([f(),f()]);y=S,console.log(`[user-desktop] spawn handle=${D.handle} port=${y} devPort=${A} workdir=${N}`),Z=await Promise.resolve(i.spawnDaemon({workdir:N,handle:D.handle,port:y,daemonToken:T,offloadAllowedHosts:D.offloadAllowedHosts??[],offloadAllowSameHostDev:D.offloadAllowSameHostDev??!1,orgFsConfigJson:D.orgFsConfigJson}));try{await i.waitForHealth(y)}catch(k){throw oru("the sandbox didn't come online in time",k)}console.log(`[user-desktop] healthy handle=${D.handle} port=${y} \u2014 posting config`);try{await i.postConfig(y,A,{repo:D.repo,workload:D.workload,operator:D.operator},T)}catch(k){throw oru(Xbt(k)?"configuration timed out":"the sandbox rejected its configuration",k)}}catch(S){if(console.error(`[user-desktop] sandbox bring-up failed handle=${D.handle} port=${y??"(none)"}${Z?" (killing daemon)":""}:`,S),Z)try{Z.kill("SIGKILL")}catch{}throw $({handle:D.handle,phase:"failed",error:sru(S),sandboxPath:N,projectName:O.projectName,branch:O.branch}),d({handle:D.handle,status:"failed",sandboxPath:N,port:null,previewUrl:null,...O,error:sru(S)}),S}if(!Z||y===void 0)throw Error("sandbox bring-up invariant violated");let B=`http://127.0.0.1:${y}`,F=c(D.handle,y);console.log(`[user-desktop] ready handle=${D.handle} port=${y} sandboxApiUrl=${B} previewUrl=${F}`);let P={handle:D.handle,port:y,process:Z,sandboxApiUrl:B,previewUrl:F,lastUsedAt:Date.now(),activeDispatchCount:0,daemonToken:T,registryMetadata:O};if(t.set(D.handle,P),d({handle:D.handle,status:"ready",sandboxPath:N,port:y,previewUrl:F,...O,error:null}),$({handle:D.handle,phase:"ready",port:y,previewUrl:F,sandboxPath:N,projectName:O.projectName,branch:O.branch}),Z.exited)Z.exited.then(()=>{if(t.get(D.handle)===P)console.warn(`[user-desktop] daemon process exited unexpectedly handle=${D.handle} port=${y} \u2014 removing from cache`),t.delete(D.handle),d({handle:D.handle,status:"stopped",sandboxPath:N,port:null,previewUrl:null,...O,error:null}),$({handle:D.handle,phase:"evicted"});else console.log(`[user-desktop] daemon process exited handle=${D.handle} port=${y} (already replaced/removed)`)});return{sandboxApiUrl:B,previewUrl:F,port:y}};return{async ensureSandbox(D){let O=t.get(D.handle);if(O){if(await w(O.sandboxApiUrl))return console.log(`[user-desktop] cache hit handle=${D.handle} port=${O.port} (alive)`),O.lastUsedAt=Date.now(),{sandboxApiUrl:O.sandboxApiUrl,previewUrl:O.previewUrl,port:O.port};console.warn(`[user-desktop] cache stale handle=${D.handle} port=${O.port} \u2014 respawning`),h(O)}let N=_.get(D.handle);if(N)return console.log(`[user-desktop] joining in-flight ensure handle=${D.handle}`),N;let y=n(D).finally(()=>{_.delete(D.handle)});return _.set(D.handle,y),y},proxyPort(D){let O=t.get(D);if(O)O.lastUsedAt=Date.now();return O?.port??null},getDaemonToken(D){return t.get(D)?.daemonToken??null},hasHandle(D){return t.has(D)||_.has(D)},recordHit(D){let O=t.get(D);if(O)O.lastUsedAt=Date.now()},acquireDispatch(D){let O=t.get(D);if(!O)return()=>{};O.activeDispatchCount+=1;let N=!1;return()=>{if(N)return;N=!0;let y=t.get(D);if(y)y.activeDispatchCount=Math.max(0,y.activeDispatchCount-1)}},listSandboxes(){return[...t.values()]},async deleteSandbox(D){let O=t.get(D);if(!O){console.log(`[user-desktop] delete handle=${D} (not found, no-op)`);return}if(O.activeDispatchCount>0){console.warn(`[user-desktop] delete handle=${D} port=${O.port} REFUSED \u2014 ${O.activeDispatchCount} active dispatch(es) in flight`);return}console.log(`[user-desktop] delete handle=${D} port=${O.port}`);try{O.process.kill("SIGTERM")}catch{}t.delete(D),d({handle:D,status:"stopped",sandboxPath:E(D),port:null,previewUrl:null,repoCloneUrl:null,branch:null,projectName:null,error:null}),$({handle:D,phase:"deleted"})},async shutdown(){console.log(`[user-desktop] shutdown \u2014 killing ${t.size} sandbox(es)`);for(let D of t.values())try{D.process.kill("SIGTERM")}catch{}t.clear()}}}function Ybt(){return new Promise((i,u)=>{let t=Kbt();t.unref(),t.on("error",u),t.listen(0,"127.0.0.1",()=>{let f=t.address();if(f&&typeof f==="object"){let l=f.port;t.close(()=>i(l))}else t.close(()=>u(Error("could not allocate port")))})})}var imu=()=>{};import{randomUUID as zbt}from"crypto";import{hostname as Qbt}from"os";async function umu(i){let u=Qbt()||void 0;i.monitor?.onMachine?.(u??"this machine");let t=Lbu(i.dataDir,{outFd:i.logFd,perSandboxLog:i.perSandboxLogs,hotReload:i.hotReload}),f=l1i({path:f1i(i.dataDir),managedSandboxRoot:`${i.dataDir}/sandboxes`}),l=!1,c=()=>{if(l)return;l=!0;try{f.close()}catch{}};try{let E=0,d=pru({dataDir:i.dataDir,registry:f,resolvePreviewUrl:(k,M)=>E>0?`http://${k}.localhost:${E}`:`http://127.0.0.1:${M}`,spawnDaemon:async(k)=>{let M={DAEMON_BOOT_ID:zbt(),APP_ROOT:k.workdir,PROXY_PORT:String(k.port),DAEMON_TOKEN:k.daemonToken,OFFLOAD_ALLOWED_HOSTS:k.offloadAllowedHosts.join(","),...k.offloadAllowSameHostDev?{OFFLOAD_ALLOW_SAME_HOST_DEV:"1"}:{}};if(k.orgFsConfigJson){let W=await Qbu(i.dataDir);if(W)M.ORGFS_CONFIG=k.orgFsConfigJson,M.ORGFS_RCLONE_PATH=W}let J=await t({workdir:k.workdir,env:M,daemonPort:k.port});return{port:k.port,kill:(W)=>J.kill(W),exited:J.exited.then(()=>{return})}},postConfig:async(k,M,J,W)=>{let m={port:M};if(J.workload)m.runtime=J.workload.runtime,m.packageManager={name:J.workload.packageManager,...J.workload.packageManagerPath?{path:J.workload.packageManagerPath}:{}};let z={application:m},di=fh(J.operator??null);if(di)z.operator=di;if(J.repo)z.git={repository:{cloneUrl:J.repo.cloneUrl,branch:J.repo.branch},...J.repo.userName&&J.repo.userEmail?{identity:{userName:J.repo.userName,userEmail:J.repo.userEmail}}:{}};await s8(`http://127.0.0.1:${k}`,W,z)},waitForHealth:async(k)=>{await fli(`http://127.0.0.1:${k}`)},maxSandboxes:20,onEvent:i.monitor?.onEvent}),$=await xru({port:i.port,lookupSandboxPort:(k)=>d.proxyPort(k)});E=$.port,console.log(`Local ingress listening on http://127.0.0.1:${$.port} (use http://<handle>.localhost:${$.port}/)`),i.monitor?.onIngress?.($.port);let w=bbu({provider:d}),h=async()=>{let k=await o8({dataDir:i.dataDir,target:i.clusterBaseUrl});if(!k)throw Object.assign(Error(`Session for ${i.clusterBaseUrl} is no longer valid \u2014 run \`deco auth login --target ${i.clusterBaseUrl}\` and restart \`deco link\`.`),{fatal:!0});return k.accessToken},_=await Yru(i.dataDir),v=process.env.npm_package_version??"0.0.0",n=await mHi(),D=Lru(n,{onChange:(k)=>{console.log(`[link-daemon] capabilities detected: +${k.join(",")} (now: ${n.join(",")})`)}}),O=Wzi({path:`${i.dataDir}/link/outbox.sqlite`});O.clear();let N=()=>{},y=new AbortController,Z={clusterBaseUrl:i.clusterBaseUrl,getAccessToken:h,provider:d,outbox:O,controlHandler:w,capabilities:n,machineId:_,cliVersion:v,previewPort:$.port,onConnected:()=>{i.monitor?.onCluster?.("linked"),console.log(`Linked to ${i.clusterBaseUrl}`)},onShutdown:()=>N(),runLifetimeSignal:y.signal};console.log(`[link-daemon] transport=tunnel cluster=${i.clusterBaseUrl}`);let T=await gru(Z);console.log("[link-daemon] active transport=tunnel");let B,F=new Promise((k)=>{B=k}),P=!1,S=async()=>{if(P)return;P=!0,y.abort(),console.log(`
|
|
84436
|
-
Shutting down\u2026`),D();try{await T.close()}catch{}try{await $.stop()}catch{}try{await d.shutdown()}catch{}try{O.close()}catch{}c(),B(0)};process.on("SIGINT",()=>void S()),process.on("SIGTERM",()=>void S()),N=()=>{console.log("Disconnect requested from the Studio web UI \u2014 shutting down. Run `bunx decocms@latest link` to reconnect."),S()},T.closed.then(()=>{if(i.monitor?.onCluster?.("closed"),!P)console.error("Cluster connection closed permanently; exiting."),S()});let A=eru({provider:d,registry:f,dataDir:i.dataDir});return{stopped:F,stop:S,stopSandbox:A.stopSandbox,removeSandbox:A.removeSandbox,inspectSandbox:A.inspectSandbox}}catch(E){throw c(),E}}var tmu=g(()=>{Gzi();rC();Wbu();Hbu();Rbu();Yzi();Oru();kru();Wru();zru();VC();eHi();aru();imu()});function aHi(i){return i.map((u)=>typeof u==="string"?u:String(u)).join(" ")}var JL;var c1i=g(()=>{JL={name:"decocms",version:"4.39.1",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/mesh"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:'bun run migrate && concurrently "bun run dev:client" "bun run dev:server"',"dev:servers":'concurrently "bun run dev:client" "bun run dev:server"',"dev:client":"vite dev","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts","build:client":"bun --bun vite build","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","db:migrate":"bun run ./dist/server/migrate.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts",test:"bun test","test:ct":"playwright test -c playwright-ct.config.ts","test:ct:ui":"playwright test -c playwright-ct.config.ts --ui","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts","smoke:link":"bun run scripts/smoke-link.ts",prepublishOnly:"bun run build:client && bun run build:server"},optionalDependencies:{"@anthropic-ai/claude-agent-sdk":"^0.3.181","@duckdb/node-api":"^1.5.0-r.1","@openai/codex":"0.144.3","@openai/codex-darwin-arm64":"npm:@openai/codex@0.144.3-darwin-arm64","@openai/codex-darwin-x64":"npm:@openai/codex@0.144.3-darwin-x64","@openai/codex-linux-arm64":"npm:@openai/codex@0.144.3-linux-arm64","@openai/codex-linux-x64":"npm:@openai/codex@0.144.3-linux-x64","@openai/codex-win32-arm64":"npm:@openai/codex@0.144.3-win32-arm64","@openai/codex-win32-x64":"npm:@openai/codex@0.144.3-win32-x64"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@dnd-kit/core":"^6.3.1","@dnd-kit/sortable":"^10.0.0","@dnd-kit/utilities":"^3.2.2","@inkjs/ui":"^2.0.0","@modelcontextprotocol/ext-apps":"^1.7.1","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","@tanstack/react-virtual":"3.13.24","@tiptap/extension-text-align":"3.20.2","@xterm/addon-fit":"^0.11.0","@xterm/xterm":"^6.0.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","node-pty":"^1.0.0","posthog-js":"^1.371.1","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6","use-stick-to-bottom":"^1.1.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@ai-sdk/react":"^3.0.210","@better-auth/sso":"1.4.1","@daveyplate/better-auth-ui":"^3.2.7","@deco/ui":"workspace:*","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/harness":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/mesh-sdk":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/std":"workspace:*","@decocms/tunnel":"workspace:*","@floating-ui/react":"^0.27.16","@happy-dom/global-registrator":"^20.9.0","@hookform/resolvers":"^5.2.2","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@monaco-editor/react":"^4.7.0","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@playwright/experimental-ct-react":"1.59.1","@playwright/test":"^1.58.2","@radix-ui/react-avatar":"^1.1.10","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-dropdown-menu":"^2.1.16","@radix-ui/react-label":"^2.1.7","@radix-ui/react-select":"^2.2.6","@radix-ui/react-separator":"^1.1.7","@radix-ui/react-slot":"^1.2.3","@radix-ui/react-tabs":"^1.1.13","@rjsf/shadcn":"^6.6.2","@rjsf/utils":"^6.6.2","@rjsf/validator-ajv8":"^6.6.2","@tailwindcss/vite":"^4.1.17","@tanstack/react-query":"5.100.10","@tanstack/react-router":"1.169.2","@testing-library/jest-dom":"^6.9.1","@testing-library/react":"^16.3.2","@tiptap/core":"3.20.2","@tiptap/extension-placeholder":"3.20.2","@tiptap/pm":"3.20.2","@tiptap/react":"3.20.2","@tiptap/starter-kit":"3.20.2","@tiptap/suggestion":"3.20.2","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@untitledui/icons":"^0.0.19","@vercel/nft":"^1.1.1","@vitejs/plugin-react":"^5.1.0",ai:"^6.0.208","babel-plugin-react-compiler":"^1.0.0","better-auth":"1.4.22","class-variance-authority":"^0.7.1",clsx:"^2.1.1",concurrently:"^9.2.1",croner:"^9.1.0","date-fns":"^4.1.0",degit:"^2.8.4",hono:"^4.10.7","input-otp":"^1.4.2",jose:"^6.0.11","lucide-react":"^0.468.0",marked:"^15.0.6",nanoid:"^5.1.6",pg:"^8.16.3",prettier:"^3.4.2","react-hook-form":"^7.66.0","react-markdown":"^10.1.0","react-resizable-panels":"^2.1.7","react-syntax-highlighter":"^15.6.1",recharts:"^3.6.0","rehype-raw":"^7.0.0","remark-gfm":"^4.0.0","sass-embedded":"^1.97.2",sonner:"^2.0.7","tailwind-merge":"^3.3.1",tailwindcss:"^4.1.17",typescript:"^5.9.3",vite:"^7.2.1","vite-tsconfig-paths":"^5.1.4",zod:"^4.0.0"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","mesh","tools"],license:"MIT",publishConfig:{access:"public"}}});var PM={};Wi(PM,{printBanner:()=>Rbt,bannerLines:()=>fmu,BANNER_LINES:()=>E1i,BANNER_GRADIENT:()=>d1i});function bbt(i){let u=Number.parseInt(i.slice(1),16);return[u>>16&255,u>>8&255,u&255]}function fmu(i){let u=E1i.map((t,f)=>{let[l,c,E]=bbt(d1i[f]);return`\x1B[38;2;${l};${c};${E}m${t}\x1B[39m`});if(i!==void 0)u.push(`\x1B[2m v${i}\x1B[22m`);return u}function Rbt(i){console.log("");for(let u of fmu(i))console.log(u);console.log("")}var E1i,d1i;var XL=g(()=>{E1i=[" \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 "],d1i=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"]});import{Box as Cbt,Text as lmu}from"ink";import{jsx as Mbt,jsxs as cmu}from"react/jsx-runtime";function $1i({version:i}){return cmu(Cbt,{flexDirection:"column",marginTop:1,children:[E1i.map((u,t)=>Mbt(lmu,{color:d1i[t],children:u},t)),cmu(lmu,{dimColor:!0,children:[" v",i]})]})}var oHi=g(()=>{XL()});function Emu(i){let u=i.branch??i.handle,t=[];if(i.dirtyCount>0)t.push(`${i.dirtyCount} uncommitted file${i.dirtyCount===1?"":"s"}`);if(i.merged===!1)t.push("branch not merged");return t.length>0?`\u26A0 ${t.join(", ")} \u2014 delete ${u}? (y/n)`:`Delete ${u}? (y/n)`}function LL(i){return[...i.values()].map((u)=>u.handle).sort((u,t)=>u.localeCompare(t))}function dmu(i,u,t){if(i.length===0)return null;let f=u===null?-1:i.indexOf(u);if(f===-1)return t>0?i[0]:i[i.length-1];let l=Math.max(0,Math.min(i.length-1,f+t));return i[l]}function $mu(i,u,t){if(t!==u)return t;let f=i.indexOf(u);if(f===-1)return t;return i[f+1]??i[f-1]??null}var ubi={};Wi(ubi,{subscribeLinkState:()=>sHi,setSelectedHandle:()=>pHi,setRemoving:()=>_1i,setPersistedSandboxes:()=>iRt,setPendingConfirm:()=>xM,setMachine:()=>abt,setLogPath:()=>sbt,setLinkActions:()=>pbt,setIngress:()=>ebt,setDaemonError:()=>obt,setClusterUrl:()=>mbt,setCluster:()=>rbt,setActionError:()=>h1i,resetLinkStateForTests:()=>tRt,removeSandboxRow:()=>ibi,pushSandboxEvent:()=>uRt,getLinkState:()=>AM,applySandboxEvent:()=>wmu});function Vbt(i){return i==="spawning"||i==="ready"||i==="failed"}function wmu(i,u){let t=new Map(i),f=t.get(u.handle);if(u.phase==="evicted"||u.phase==="deleted"){if(f)t.set(u.handle,{...f,port:null,previewUrl:null,status:"stopped",error:null});return t}return t.set(u.handle,{handle:u.handle,port:u.port??f?.port??null,previewUrl:u.previewUrl??f?.previewUrl??null,status:u.phase,error:u.phase==="failed"?u.error??"failed":null,projectName:u.projectName??f?.projectName??null,branch:u.branch??f?.branch??null,sandboxPath:u.sandboxPath??f?.sandboxPath??null}),t}function hmu(){return{cluster:"connecting",clusterUrl:null,ingressUrl:null,ingressPort:null,machine:null,cap:qbt,sandboxes:new Map,daemonError:null,logPath:null,selectedHandle:null,pendingConfirm:null,removingHandles:new Set,actionError:null,actions:null}}function Xd(){for(let i of w1i)i()}function AM(){return tf}function sHi(i){return w1i.add(i),()=>w1i.delete(i)}function rbt(i){tf={...tf,cluster:i},Xd()}function mbt(i){tf={...tf,clusterUrl:i},Xd()}function ebt(i,u){tf={...tf,ingressPort:i,ingressUrl:u},Xd()}function abt(i){tf={...tf,machine:i},Xd()}function obt(i){tf={...tf,daemonError:i},Xd()}function sbt(i){tf={...tf,logPath:i},Xd()}function pHi(i){tf={...tf,selectedHandle:i},Xd()}function xM(i){tf={...tf,pendingConfirm:i},Xd()}function h1i(i){tf={...tf,actionError:i},Xd()}function _1i(i,u){if(tf.removingHandles.has(i)===u)return;let t=new Set(tf.removingHandles);if(u)t.add(i);else t.delete(i);tf={...tf,removingHandles:t},Xd()}function pbt(i){tf={...tf,actions:i},Xd()}function ibi(i){let u=LL(tf.sandboxes),t=$mu(u,i,tf.selectedHandle),f=new Map(tf.sandboxes);f.delete(i);let l=new Set(tf.removingHandles);l.delete(i),tf={...tf,sandboxes:f,selectedHandle:t,pendingConfirm:null,removingHandles:l},Xd()}function iRt(i){let u=new Map;for(let t of i)u.set(t.handle,{handle:t.handle,port:t.port,previewUrl:t.previewUrl,status:t.status,error:t.error,projectName:t.projectName,branch:t.branch,sandboxPath:t.sandboxPath});for(let[t,f]of tf.sandboxes)if(Vbt(f.status))u.set(t,f);tf={...tf,sandboxes:u},Xd()}function uRt(i){tf={...tf,sandboxes:wmu(tf.sandboxes,i)},Xd()}function tRt(){tf=hmu(),w1i.clear()}var qbt=20,tf,w1i;var kM=g(()=>{tf=hmu(),w1i=new Set});import{spawn as fRt}from"child_process";function lRt(i){if(i==="darwin")return"open";if(i==="win32")return"start";return"xdg-open"}function _mu(i,u=process.platform){let t=lRt(u);try{fRt(t,[i],{stdio:"ignore",detached:!0}).unref()}catch{}}var vmu=()=>{};function nmu(i,u={}){let t=u.openUrl??_mu,f=AM(),l=LL(f.sandboxes),c=f.selectedHandle!==null&&l.includes(f.selectedHandle)?f.selectedHandle:l[0]??null,E=f.actions;switch(i.type){case"move":pHi(dmu(l,f.selectedHandle,i.delta));return;case"open":{if(c===null)return;let d=f.sandboxes.get(c);if(d?.status==="ready"&&d.previewUrl)t(d.previewUrl);return}case"stop":if(c!==null&&E)E.stopSandbox(c);return;case"delete":{if(c===null||!E)return;let d=E.inspectSandbox(c),$=f.sandboxes.get(c);h1i(null),xM({handle:c,branch:d?.branch??$?.branch??null,dirtyCount:d?.dirtyCount??0,merged:d?.merged??null});return}case"confirmYes":{let d=f.pendingConfirm;if(xM(null),d===null||!E)return;_1i(d.handle,!0),E.removeSandbox(d.handle).then(($)=>{if($.ok)ibi(d.handle);else _1i(d.handle,!1),h1i($.error)});return}case"confirmNo":xM(null);return;case"quit":if(E)E.quit();return}}var Dmu=g(()=>{kM();vmu()});function gmu(i,u,t){if(t)return i==="y"||i==="Y"?{type:"confirmYes"}:{type:"confirmNo"};if(u.upArrow||i==="k")return{type:"move",delta:-1};if(u.downArrow||i==="j")return{type:"move",delta:1};if(i==="s")return{type:"stop"};if(i==="d")return{type:"delete"};if(i==="o")return{type:"open"};if(i==="q"||u.ctrl===!0&&i==="c")return{type:"quit"};return null}var Omu={};Wi(Omu,{LinkApp:()=>$Rt});import{Box as bl,Text as d1,useInput as cRt}from"ink";import{useSyncExternalStore as ERt}from"react";import{jsx as Pf,jsxs as Dh}from"react/jsx-runtime";function dRt(i,u){if(u)return{color:"yellow",text:"\u25CC Removing\u2026"};if(i.status==="ready")return{color:"green",text:"\u25CF Live"};if(i.status==="spawning")return{color:"yellow",text:"\u25CC Starting\u2026"};if(i.status==="stopped")return{color:"gray",text:"\u25A0 Stopped"};if(i.status==="missing")return{color:"yellow",text:"\u25A1 Missing"};if(i.status==="merged")return{color:"cyan",text:"\u2713 Merged"};if(i.status==="invalid")return{color:"red",text:"\u2717 Invalid"};if(i.status==="failed")return{color:"red",text:`\u2717 Failed: ${i.error??"failed"}`};return{color:"red",text:`\u2717 Error: ${i.error??""}`}}function $Rt(){let i=ERt(sHi,AM),u=[...i.sandboxes.values()].sort((l,c)=>l.handle.localeCompare(c.handle)),t=LL(i.sandboxes),f=i.selectedHandle!==null&&t.includes(i.selectedHandle)?i.selectedHandle:t[0]??null;return cRt((l,c)=>{let E=gmu(l,c,i.pendingConfirm!==null);if(E!==null)nmu(E)}),Dh(bl,{flexDirection:"column",children:[Pf($1i,{version:JL.version}),Pf(bl,{marginBottom:1,children:Pf(d1,{dimColor:!0,children:"\u2500".repeat(80)})}),Pf(bl,{children:i.cluster==="linked"?Dh(d1,{color:"green",children:["\u2713 Connected to ",i.clusterUrl??"deco"]}):i.cluster==="connecting"?Dh(d1,{color:"yellow",children:["\u25CC Connecting to ",i.clusterUrl??"deco","\u2026"]}):Dh(d1,{color:"red",children:["\u2717 Disconnected from ",i.clusterUrl??"deco"]})}),Pf(bl,{children:i.ingressUrl?Dh(d1,{color:"green",children:["\u2713 Serving at ",i.ingressUrl]}):Pf(d1,{dimColor:!0,children:"\u25CC Starting local server\u2026"})}),Pf(bl,{marginBottom:1,children:Pf(d1,{dimColor:!0,children:`${"Computer".padEnd(16)}${i.machine??"this computer"} \xB7 ${u.length} of ${i.cap} previews`})}),u.length===0?Pf(d1,{dimColor:!0,children:"No previews running yet."}):Dh(bl,{flexDirection:"column",children:[Dh(bl,{children:[Pf(bl,{width:2,flexShrink:0}),Pf(bl,{width:WL.project,flexShrink:0,marginRight:1,children:Pf(d1,{dimColor:!0,wrap:"truncate-end",children:"PROJECT"})}),Pf(bl,{width:WL.branch,flexShrink:0,marginRight:1,children:Pf(d1,{dimColor:!0,wrap:"truncate-end",children:"BRANCH"})}),Pf(bl,{width:WL.status,flexShrink:0,marginRight:1,children:Pf(d1,{dimColor:!0,wrap:"truncate-end",children:"STATUS"})}),Pf(bl,{flexGrow:1,children:Pf(d1,{dimColor:!0,wrap:"truncate-end",children:"PREVIEW URL"})})]}),u.map((l)=>{let c=dRt(l,i.removingHandles.has(l.handle)),E=l.handle===f;return Dh(bl,{children:[Pf(bl,{width:2,flexShrink:0,children:Pf(d1,{color:"cyan",children:E?"\u203A":" "})}),Pf(bl,{width:WL.project,flexShrink:0,marginRight:1,children:Pf(d1,{bold:E,wrap:"truncate-end",children:l.projectName??l.handle})}),Pf(bl,{width:WL.branch,flexShrink:0,marginRight:1,children:Pf(d1,{bold:E,wrap:"truncate-end",children:l.branch??"\u2014"})}),Pf(bl,{width:WL.status,flexShrink:0,marginRight:1,children:Pf(d1,{color:c.color,bold:E,wrap:"truncate-end",children:c.text})}),Pf(bl,{flexGrow:1,children:Pf(d1,{dimColor:!0,wrap:"truncate-end",children:l.previewUrl??"\u2014"})})]},l.handle)})]}),i.daemonError?Pf(bl,{marginTop:1,children:Dh(d1,{color:"red",children:["\u26A0 ",i.daemonError]})}):null,i.logPath?Pf(bl,{marginTop:1,children:Dh(d1,{dimColor:!0,children:["Logs: ",i.logPath]})}):null,i.pendingConfirm?Pf(bl,{marginTop:1,children:Pf(d1,{color:"yellow",children:Emu(i.pendingConfirm)})}):null,i.actionError?Pf(bl,{marginTop:1,children:Dh(d1,{color:"red",children:["\u2717 ",i.actionError]})}):null,Pf(bl,{marginTop:1,children:Pf(d1,{dimColor:!0,children:"\u2191\u2193 move \xB7 s stop \xB7 d delete \xB7 o open \xB7 q quit"})})]})}var WL;var Nmu=g(()=>{c1i();oHi();Dmu();kM();WL={project:18,branch:22,status:14}});var ymu={};Wi(ymu,{runLinkCommand:()=>ORt});import{closeSync as wRt,mkdirSync as hRt,openSync as _Rt,writeSync as vRt}from"fs";import{homedir as nRt}from"os";import{join as tbi}from"path";function DRt(i,u){let t={log:console.log,warn:console.warn,error:console.error},f=(l)=>{if(u===void 0)return;try{vRt(u,`${aHi(l)}
|
|
84436
|
+
Shutting down\u2026`),D();try{await T.close()}catch{}try{await $.stop()}catch{}try{await d.shutdown()}catch{}try{O.close()}catch{}c(),B(0)};process.on("SIGINT",()=>void S()),process.on("SIGTERM",()=>void S()),N=()=>{console.log("Disconnect requested from the Studio web UI \u2014 shutting down. Run `bunx decocms@latest link` to reconnect."),S()},T.closed.then(()=>{if(i.monitor?.onCluster?.("closed"),!P)console.error("Cluster connection closed permanently; exiting."),S()});let A=eru({provider:d,registry:f,dataDir:i.dataDir});return{stopped:F,stop:S,stopSandbox:A.stopSandbox,removeSandbox:A.removeSandbox,inspectSandbox:A.inspectSandbox}}catch(E){throw c(),E}}var tmu=g(()=>{Gzi();rC();Wbu();Hbu();Rbu();Yzi();Oru();kru();Wru();zru();VC();eHi();aru();imu()});function aHi(i){return i.map((u)=>typeof u==="string"?u:String(u)).join(" ")}var JL;var c1i=g(()=>{JL={name:"decocms",version:"4.40.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/mesh"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:'bun run migrate && concurrently "bun run dev:client" "bun run dev:server"',"dev:servers":'concurrently "bun run dev:client" "bun run dev:server"',"dev:client":"vite dev","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts","build:client":"bun --bun vite build","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","db:migrate":"bun run ./dist/server/migrate.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts",test:"bun test","test:ct":"playwright test -c playwright-ct.config.ts","test:ct:ui":"playwright test -c playwright-ct.config.ts --ui","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts","smoke:link":"bun run scripts/smoke-link.ts",prepublishOnly:"bun run build:client && bun run build:server"},optionalDependencies:{"@anthropic-ai/claude-agent-sdk":"^0.3.181","@duckdb/node-api":"^1.5.0-r.1","@openai/codex":"0.144.3","@openai/codex-darwin-arm64":"npm:@openai/codex@0.144.3-darwin-arm64","@openai/codex-darwin-x64":"npm:@openai/codex@0.144.3-darwin-x64","@openai/codex-linux-arm64":"npm:@openai/codex@0.144.3-linux-arm64","@openai/codex-linux-x64":"npm:@openai/codex@0.144.3-linux-x64","@openai/codex-win32-arm64":"npm:@openai/codex@0.144.3-win32-arm64","@openai/codex-win32-x64":"npm:@openai/codex@0.144.3-win32-x64"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@dnd-kit/core":"^6.3.1","@dnd-kit/sortable":"^10.0.0","@dnd-kit/utilities":"^3.2.2","@inkjs/ui":"^2.0.0","@modelcontextprotocol/ext-apps":"^1.7.1","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","@tanstack/react-virtual":"3.13.24","@tiptap/extension-text-align":"3.20.2","@xterm/addon-fit":"^0.11.0","@xterm/xterm":"^6.0.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","node-pty":"^1.0.0","posthog-js":"^1.371.1","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6","use-stick-to-bottom":"^1.1.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@ai-sdk/react":"^3.0.210","@better-auth/sso":"1.4.1","@daveyplate/better-auth-ui":"^3.2.7","@deco/ui":"workspace:*","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/harness":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/mesh-sdk":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/std":"workspace:*","@decocms/tunnel":"workspace:*","@floating-ui/react":"^0.27.16","@happy-dom/global-registrator":"^20.9.0","@hookform/resolvers":"^5.2.2","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@monaco-editor/react":"^4.7.0","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@playwright/experimental-ct-react":"1.59.1","@playwright/test":"^1.58.2","@radix-ui/react-avatar":"^1.1.10","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-dropdown-menu":"^2.1.16","@radix-ui/react-label":"^2.1.7","@radix-ui/react-select":"^2.2.6","@radix-ui/react-separator":"^1.1.7","@radix-ui/react-slot":"^1.2.3","@radix-ui/react-tabs":"^1.1.13","@rjsf/shadcn":"^6.6.2","@rjsf/utils":"^6.6.2","@rjsf/validator-ajv8":"^6.6.2","@tailwindcss/vite":"^4.1.17","@tanstack/react-query":"5.100.10","@tanstack/react-router":"1.169.2","@testing-library/jest-dom":"^6.9.1","@testing-library/react":"^16.3.2","@tiptap/core":"3.20.2","@tiptap/extension-placeholder":"3.20.2","@tiptap/pm":"3.20.2","@tiptap/react":"3.20.2","@tiptap/starter-kit":"3.20.2","@tiptap/suggestion":"3.20.2","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@untitledui/icons":"^0.0.19","@vercel/nft":"^1.1.1","@vitejs/plugin-react":"^5.1.0",ai:"^6.0.208","babel-plugin-react-compiler":"^1.0.0","better-auth":"1.4.22","class-variance-authority":"^0.7.1",clsx:"^2.1.1",concurrently:"^9.2.1",croner:"^9.1.0","date-fns":"^4.1.0",degit:"^2.8.4",hono:"^4.10.7","input-otp":"^1.4.2",jose:"^6.0.11","lucide-react":"^0.468.0",marked:"^15.0.6",nanoid:"^5.1.6",pg:"^8.16.3",prettier:"^3.4.2","react-hook-form":"^7.66.0","react-markdown":"^10.1.0","react-resizable-panels":"^2.1.7","react-syntax-highlighter":"^15.6.1",recharts:"^3.6.0","rehype-raw":"^7.0.0","remark-gfm":"^4.0.0","sass-embedded":"^1.97.2",sonner:"^2.0.7","tailwind-merge":"^3.3.1",tailwindcss:"^4.1.17",typescript:"^5.9.3",vite:"^7.2.1","vite-tsconfig-paths":"^5.1.4",zod:"^4.0.0"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","mesh","tools"],license:"MIT",publishConfig:{access:"public"}}});var PM={};Wi(PM,{printBanner:()=>Rbt,bannerLines:()=>fmu,BANNER_LINES:()=>E1i,BANNER_GRADIENT:()=>d1i});function bbt(i){let u=Number.parseInt(i.slice(1),16);return[u>>16&255,u>>8&255,u&255]}function fmu(i){let u=E1i.map((t,f)=>{let[l,c,E]=bbt(d1i[f]);return`\x1B[38;2;${l};${c};${E}m${t}\x1B[39m`});if(i!==void 0)u.push(`\x1B[2m v${i}\x1B[22m`);return u}function Rbt(i){console.log("");for(let u of fmu(i))console.log(u);console.log("")}var E1i,d1i;var XL=g(()=>{E1i=[" \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 "],d1i=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"]});import{Box as Cbt,Text as lmu}from"ink";import{jsx as Mbt,jsxs as cmu}from"react/jsx-runtime";function $1i({version:i}){return cmu(Cbt,{flexDirection:"column",marginTop:1,children:[E1i.map((u,t)=>Mbt(lmu,{color:d1i[t],children:u},t)),cmu(lmu,{dimColor:!0,children:[" v",i]})]})}var oHi=g(()=>{XL()});function Emu(i){let u=i.branch??i.handle,t=[];if(i.dirtyCount>0)t.push(`${i.dirtyCount} uncommitted file${i.dirtyCount===1?"":"s"}`);if(i.merged===!1)t.push("branch not merged");return t.length>0?`\u26A0 ${t.join(", ")} \u2014 delete ${u}? (y/n)`:`Delete ${u}? (y/n)`}function LL(i){return[...i.values()].map((u)=>u.handle).sort((u,t)=>u.localeCompare(t))}function dmu(i,u,t){if(i.length===0)return null;let f=u===null?-1:i.indexOf(u);if(f===-1)return t>0?i[0]:i[i.length-1];let l=Math.max(0,Math.min(i.length-1,f+t));return i[l]}function $mu(i,u,t){if(t!==u)return t;let f=i.indexOf(u);if(f===-1)return t;return i[f+1]??i[f-1]??null}var ubi={};Wi(ubi,{subscribeLinkState:()=>sHi,setSelectedHandle:()=>pHi,setRemoving:()=>_1i,setPersistedSandboxes:()=>iRt,setPendingConfirm:()=>xM,setMachine:()=>abt,setLogPath:()=>sbt,setLinkActions:()=>pbt,setIngress:()=>ebt,setDaemonError:()=>obt,setClusterUrl:()=>mbt,setCluster:()=>rbt,setActionError:()=>h1i,resetLinkStateForTests:()=>tRt,removeSandboxRow:()=>ibi,pushSandboxEvent:()=>uRt,getLinkState:()=>AM,applySandboxEvent:()=>wmu});function Vbt(i){return i==="spawning"||i==="ready"||i==="failed"}function wmu(i,u){let t=new Map(i),f=t.get(u.handle);if(u.phase==="evicted"||u.phase==="deleted"){if(f)t.set(u.handle,{...f,port:null,previewUrl:null,status:"stopped",error:null});return t}return t.set(u.handle,{handle:u.handle,port:u.port??f?.port??null,previewUrl:u.previewUrl??f?.previewUrl??null,status:u.phase,error:u.phase==="failed"?u.error??"failed":null,projectName:u.projectName??f?.projectName??null,branch:u.branch??f?.branch??null,sandboxPath:u.sandboxPath??f?.sandboxPath??null}),t}function hmu(){return{cluster:"connecting",clusterUrl:null,ingressUrl:null,ingressPort:null,machine:null,cap:qbt,sandboxes:new Map,daemonError:null,logPath:null,selectedHandle:null,pendingConfirm:null,removingHandles:new Set,actionError:null,actions:null}}function Xd(){for(let i of w1i)i()}function AM(){return tf}function sHi(i){return w1i.add(i),()=>w1i.delete(i)}function rbt(i){tf={...tf,cluster:i},Xd()}function mbt(i){tf={...tf,clusterUrl:i},Xd()}function ebt(i,u){tf={...tf,ingressPort:i,ingressUrl:u},Xd()}function abt(i){tf={...tf,machine:i},Xd()}function obt(i){tf={...tf,daemonError:i},Xd()}function sbt(i){tf={...tf,logPath:i},Xd()}function pHi(i){tf={...tf,selectedHandle:i},Xd()}function xM(i){tf={...tf,pendingConfirm:i},Xd()}function h1i(i){tf={...tf,actionError:i},Xd()}function _1i(i,u){if(tf.removingHandles.has(i)===u)return;let t=new Set(tf.removingHandles);if(u)t.add(i);else t.delete(i);tf={...tf,removingHandles:t},Xd()}function pbt(i){tf={...tf,actions:i},Xd()}function ibi(i){let u=LL(tf.sandboxes),t=$mu(u,i,tf.selectedHandle),f=new Map(tf.sandboxes);f.delete(i);let l=new Set(tf.removingHandles);l.delete(i),tf={...tf,sandboxes:f,selectedHandle:t,pendingConfirm:null,removingHandles:l},Xd()}function iRt(i){let u=new Map;for(let t of i)u.set(t.handle,{handle:t.handle,port:t.port,previewUrl:t.previewUrl,status:t.status,error:t.error,projectName:t.projectName,branch:t.branch,sandboxPath:t.sandboxPath});for(let[t,f]of tf.sandboxes)if(Vbt(f.status))u.set(t,f);tf={...tf,sandboxes:u},Xd()}function uRt(i){tf={...tf,sandboxes:wmu(tf.sandboxes,i)},Xd()}function tRt(){tf=hmu(),w1i.clear()}var qbt=20,tf,w1i;var kM=g(()=>{tf=hmu(),w1i=new Set});import{spawn as fRt}from"child_process";function lRt(i){if(i==="darwin")return"open";if(i==="win32")return"start";return"xdg-open"}function _mu(i,u=process.platform){let t=lRt(u);try{fRt(t,[i],{stdio:"ignore",detached:!0}).unref()}catch{}}var vmu=()=>{};function nmu(i,u={}){let t=u.openUrl??_mu,f=AM(),l=LL(f.sandboxes),c=f.selectedHandle!==null&&l.includes(f.selectedHandle)?f.selectedHandle:l[0]??null,E=f.actions;switch(i.type){case"move":pHi(dmu(l,f.selectedHandle,i.delta));return;case"open":{if(c===null)return;let d=f.sandboxes.get(c);if(d?.status==="ready"&&d.previewUrl)t(d.previewUrl);return}case"stop":if(c!==null&&E)E.stopSandbox(c);return;case"delete":{if(c===null||!E)return;let d=E.inspectSandbox(c),$=f.sandboxes.get(c);h1i(null),xM({handle:c,branch:d?.branch??$?.branch??null,dirtyCount:d?.dirtyCount??0,merged:d?.merged??null});return}case"confirmYes":{let d=f.pendingConfirm;if(xM(null),d===null||!E)return;_1i(d.handle,!0),E.removeSandbox(d.handle).then(($)=>{if($.ok)ibi(d.handle);else _1i(d.handle,!1),h1i($.error)});return}case"confirmNo":xM(null);return;case"quit":if(E)E.quit();return}}var Dmu=g(()=>{kM();vmu()});function gmu(i,u,t){if(t)return i==="y"||i==="Y"?{type:"confirmYes"}:{type:"confirmNo"};if(u.upArrow||i==="k")return{type:"move",delta:-1};if(u.downArrow||i==="j")return{type:"move",delta:1};if(i==="s")return{type:"stop"};if(i==="d")return{type:"delete"};if(i==="o")return{type:"open"};if(i==="q"||u.ctrl===!0&&i==="c")return{type:"quit"};return null}var Omu={};Wi(Omu,{LinkApp:()=>$Rt});import{Box as bl,Text as d1,useInput as cRt}from"ink";import{useSyncExternalStore as ERt}from"react";import{jsx as Pf,jsxs as Dh}from"react/jsx-runtime";function dRt(i,u){if(u)return{color:"yellow",text:"\u25CC Removing\u2026"};if(i.status==="ready")return{color:"green",text:"\u25CF Live"};if(i.status==="spawning")return{color:"yellow",text:"\u25CC Starting\u2026"};if(i.status==="stopped")return{color:"gray",text:"\u25A0 Stopped"};if(i.status==="missing")return{color:"yellow",text:"\u25A1 Missing"};if(i.status==="merged")return{color:"cyan",text:"\u2713 Merged"};if(i.status==="invalid")return{color:"red",text:"\u2717 Invalid"};if(i.status==="failed")return{color:"red",text:`\u2717 Failed: ${i.error??"failed"}`};return{color:"red",text:`\u2717 Error: ${i.error??""}`}}function $Rt(){let i=ERt(sHi,AM),u=[...i.sandboxes.values()].sort((l,c)=>l.handle.localeCompare(c.handle)),t=LL(i.sandboxes),f=i.selectedHandle!==null&&t.includes(i.selectedHandle)?i.selectedHandle:t[0]??null;return cRt((l,c)=>{let E=gmu(l,c,i.pendingConfirm!==null);if(E!==null)nmu(E)}),Dh(bl,{flexDirection:"column",children:[Pf($1i,{version:JL.version}),Pf(bl,{marginBottom:1,children:Pf(d1,{dimColor:!0,children:"\u2500".repeat(80)})}),Pf(bl,{children:i.cluster==="linked"?Dh(d1,{color:"green",children:["\u2713 Connected to ",i.clusterUrl??"deco"]}):i.cluster==="connecting"?Dh(d1,{color:"yellow",children:["\u25CC Connecting to ",i.clusterUrl??"deco","\u2026"]}):Dh(d1,{color:"red",children:["\u2717 Disconnected from ",i.clusterUrl??"deco"]})}),Pf(bl,{children:i.ingressUrl?Dh(d1,{color:"green",children:["\u2713 Serving at ",i.ingressUrl]}):Pf(d1,{dimColor:!0,children:"\u25CC Starting local server\u2026"})}),Pf(bl,{marginBottom:1,children:Pf(d1,{dimColor:!0,children:`${"Computer".padEnd(16)}${i.machine??"this computer"} \xB7 ${u.length} of ${i.cap} previews`})}),u.length===0?Pf(d1,{dimColor:!0,children:"No previews running yet."}):Dh(bl,{flexDirection:"column",children:[Dh(bl,{children:[Pf(bl,{width:2,flexShrink:0}),Pf(bl,{width:WL.project,flexShrink:0,marginRight:1,children:Pf(d1,{dimColor:!0,wrap:"truncate-end",children:"PROJECT"})}),Pf(bl,{width:WL.branch,flexShrink:0,marginRight:1,children:Pf(d1,{dimColor:!0,wrap:"truncate-end",children:"BRANCH"})}),Pf(bl,{width:WL.status,flexShrink:0,marginRight:1,children:Pf(d1,{dimColor:!0,wrap:"truncate-end",children:"STATUS"})}),Pf(bl,{flexGrow:1,children:Pf(d1,{dimColor:!0,wrap:"truncate-end",children:"PREVIEW URL"})})]}),u.map((l)=>{let c=dRt(l,i.removingHandles.has(l.handle)),E=l.handle===f;return Dh(bl,{children:[Pf(bl,{width:2,flexShrink:0,children:Pf(d1,{color:"cyan",children:E?"\u203A":" "})}),Pf(bl,{width:WL.project,flexShrink:0,marginRight:1,children:Pf(d1,{bold:E,wrap:"truncate-end",children:l.projectName??l.handle})}),Pf(bl,{width:WL.branch,flexShrink:0,marginRight:1,children:Pf(d1,{bold:E,wrap:"truncate-end",children:l.branch??"\u2014"})}),Pf(bl,{width:WL.status,flexShrink:0,marginRight:1,children:Pf(d1,{color:c.color,bold:E,wrap:"truncate-end",children:c.text})}),Pf(bl,{flexGrow:1,children:Pf(d1,{dimColor:!0,wrap:"truncate-end",children:l.previewUrl??"\u2014"})})]},l.handle)})]}),i.daemonError?Pf(bl,{marginTop:1,children:Dh(d1,{color:"red",children:["\u26A0 ",i.daemonError]})}):null,i.logPath?Pf(bl,{marginTop:1,children:Dh(d1,{dimColor:!0,children:["Logs: ",i.logPath]})}):null,i.pendingConfirm?Pf(bl,{marginTop:1,children:Pf(d1,{color:"yellow",children:Emu(i.pendingConfirm)})}):null,i.actionError?Pf(bl,{marginTop:1,children:Dh(d1,{color:"red",children:["\u2717 ",i.actionError]})}):null,Pf(bl,{marginTop:1,children:Pf(d1,{dimColor:!0,children:"\u2191\u2193 move \xB7 s stop \xB7 d delete \xB7 o open \xB7 q quit"})})]})}var WL;var Nmu=g(()=>{c1i();oHi();Dmu();kM();WL={project:18,branch:22,status:14}});var ymu={};Wi(ymu,{runLinkCommand:()=>ORt});import{closeSync as wRt,mkdirSync as hRt,openSync as _Rt,writeSync as vRt}from"fs";import{homedir as nRt}from"os";import{join as tbi}from"path";function DRt(i,u){let t={log:console.log,warn:console.warn,error:console.error},f=(l)=>{if(u===void 0)return;try{vRt(u,`${aHi(l)}
|
|
84437
84437
|
`)}catch{}};return console.log=(...l)=>f(l),console.warn=(...l)=>f(l),console.error=(...l)=>{f(l),i(aHi(l))},()=>{console.log=t.log,console.warn=t.warn,console.error=t.error}}async function gRt(i,u){let t;try{t=await fetch(`${i}/api/links/me`,{headers:{authorization:`Bearer ${u}`},signal:AbortSignal.timeout(1e4)})}catch{return}if(t.status===401||t.status===403)throw Error(`Authentication rejected by ${i} \u2014 the session token was not accepted. `+`Run \`deco auth login --target ${i}\` and try again.`)}async function ORt(i={}){let u=i.port??5174,t=i.dataDir??process.env.DATA_DIR??process.env.DECOCMS_HOME??tbi(nRt(),"deco"),f=i.clusterBaseUrl??process.env.MESH_CLUSTER_URL??"https://studio.decocms.com",l,c,E,d=()=>{if(E===void 0)return;try{E.close()}catch{}finally{E=void 0}};try{let $=tbi(t,"sandboxes");E=l1i({path:f1i(t),managedSandboxRoot:$});let w=await p4i({dataDir:t,intent:"Link",target:f});if(process.env.DECOCMS_LINK_MANAGED!=="1")await gRt(f,w.accessToken);let h=E.reconcile();if(i.prune){let D=E.prune({missing:!0,merged:!0});if(!i.tui)console.log(`Pruned local sandboxes: removed ${D.removed.length}, skipped ${D.skipped.length}.`);h=E.reconcile()}let _;if(i.tui){let{render:D}=await import("ink"),{createElement:O}=await import("react"),{LinkApp:N}=await Promise.resolve().then(() => (Nmu(),Omu)),{pushSandboxEvent:y,setCluster:Z,setClusterUrl:T,setDaemonError:B,setIngress:F,setLogPath:P,setMachine:S,setPersistedSandboxes:A}=await Promise.resolve().then(() => (kM(),ubi));hRt(t,{recursive:!0});let k=tbi(t,"link.log");c=_Rt(k,"w"),P(k),A(h),T(f),Z("connecting"),_={onEvent:(M)=>y(M),onIngress:(M)=>F(M,`http://127.0.0.1:${M}`),onCluster:(M)=>Z(M),onMachine:(M)=>S(M)},l=DRt(B,c),D(O(N),{patchConsole:!1})}else if(i.banner!==!1){let{printBanner:D}=await Promise.resolve().then(() => (XL(),PM));D(i.version??"0.0.0")}d();let v=process.env.DECOCMS_LINK_MANAGED!=="1",n=await umu({port:u,clusterBaseUrl:f,dataDir:t,session:w,monitor:_,logFd:c,perSandboxLogs:v,hotReload:i.hotReload});if(i.tui){let{setLinkActions:D}=await Promise.resolve().then(() => (kM(),ubi));D({stopSandbox:n.stopSandbox,removeSandbox:n.removeSandbox,inspectSandbox:n.inspectSandbox,quit:n.stop})}return await n.stopped}catch($){return l?.(),console.error($ instanceof Error?$.message:String($)),1}finally{if(l?.(),c!==void 0)try{wRt(c)}catch{}d()}}var Zmu=g(()=>{kzi();tmu();eHi()});var $bi={};Wi($bi,{resolveDevLinkClusterUrl:()=>TRt,populateDevLinkToxiProxy:()=>Pmu,isDevLinkToxiProxyEnabled:()=>ZRt,ensureDevLinkToxiProxy:()=>PRt,buildDevLinkToxiProxyConfig:()=>Umu,DEV_LINK_TOXIPROXY_SERVICE_NAME:()=>Bmu,DEV_LINK_TOXIPROXY_PROXY_NAME:()=>Fmu});function ZRt(i=process.env){return i.DECO_DEV_LINK_TOXIPROXY==="1"}function fbi(i,u){if(!Number.isInteger(i)||i<1||i>65535)throw Error(`${u} must be an integer port in 1..65535`);return i}function Umu(i){let u=new URL(i.serverUrl);if(u.protocol!=="http:")throw Error("DECO_DEV_LINK_TOXIPROXY only supports http local Studio URLs");let t=fbi(i.apiPort,"apiPort"),f=fbi(i.listenPort,"listenPort");if(u.port.length===0)throw Error("serverUrl must include an explicit valid port");let l=fbi(Number.parseInt(u.port,10),"upstreamPort"),c=`http://127.0.0.1:${l}`,E=`http://127.0.0.1:${f}`;return{serviceName:Bmu,proxyName:Fmu,apiUrl:`http://127.0.0.1:${t}`,listen:`0.0.0.0:${f}`,upstream:`host.docker.internal:${l}`,publicTargetUrl:c,clusterUrl:E,logLine:`[dev-link-toxiproxy] ready: ${E} -> ${c}`}}function TRt(i){return i.toxiproxy?.clusterUrl??i.serverUrl}async function lbi(i,u,t){if(i.ok)return;let f=await i.text();throw Error(`ToxiProxy ${u} failed for ${t}: status=${i.status} statusText=${i.statusText} body=${f}`)}function dbi(i){if(i instanceof Error)return i.name==="Error"?i.message:`${i.name}: ${i.message}`;return String(i)}function Imu(i){if(!(i instanceof Error))return!1;if(i.name==="TimeoutError")return!0;return Imu(i.cause)}async function cbi(i,u,t,f){try{return await i(t,f)}catch(l){throw Error(`ToxiProxy ${u} failed for ${t}: ${dbi(l)}`,{cause:l})}}async function Pmu(i,u=fetch){let t=`${i.apiUrl}/reset`,f=await cbi(u,"reset",t,{method:"POST"});await lbi(f,"reset",t);let l=`${i.apiUrl}/populate`,c=await cbi(u,"populate",l,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify([{name:i.proxyName,listen:i.listen,upstream:i.upstream,enabled:!0}])});await lbi(c,"populate",l)}async function BRt(i,u){let t=`${i.apiUrl}/version`;try{await Z1(async()=>{let f=await cbi(u,"readiness check",t,{method:"GET",signal:AbortSignal.timeout(yRt)});await lbi(f,"readiness check",t)},{maxAttempts:NRt,minTimeout:Tmu,maxTimeout:Tmu,multiplier:1,jitter:0,isRetriable:(f)=>!Imu(f)})}catch(f){let l=f instanceof Jc?f.cause:f;throw Error(`ToxiProxy API did not become ready at ${t}: ${dbi(l)}`,{cause:l})}}async function FRt(i){if(i===null)return"";return await new Response(i).text()}async function Ebi(i,u={}){let t=["docker",...i].join(" "),f=(()=>{try{return Bun.spawn(["docker",...i],{stdout:"ignore",stderr:"pipe"})}catch(d){throw Error(`Docker command failed to start (${t}): ${dbi(d)}`,{cause:d})}})(),[l,c]=await Promise.all([f.exited,FRt(f.stderr)]);if(l===0||u.ignoreFailure===!0)return;let E=c.trim().length>0?`: ${c.trim()}`:"";throw Error(`Docker command failed (${t}) with exit ${l}${E}`)}async function URt(i,u){let t=`deco-dev-link-toxiproxy-${i}`;await Ebi(["rm","-f",t],{ignoreFailure:!0}),await Ebi(["run","--rm","-d","--name",t,"-p",`127.0.0.1:${i}:8474`,"-p",`127.0.0.1:${u}:${u}`,"ghcr.io/shopify/toxiproxy:2.12.0","-host=0.0.0.0"])}async function IRt(i,u){let t=`deco-dev-link-toxiproxy-${i}`;await Ebi(["rm","-f",t],{ignoreFailure:!0})}async function PRt(i){let u=Umu(i),t=i.startDaemon??URt,f=i.stopDaemon??(i.startDaemon===void 0?IRt:void 0);await t(i.apiPort,i.listenPort);let l=i.fetchImpl??fetch;try{await BRt(u,l),await Pmu(u,l)}catch(c){if(f!==void 0)try{await f(i.apiPort,i.listenPort)}catch{}throw c}return{config:u,stop:async()=>{if(f!==void 0)await f(i.apiPort,i.listenPort)}}}var Bmu="ToxiProxy",Fmu="dev_link_studio",NRt=20,Tmu=100,yRt=100;var wbi=g(()=>{B4()});var Amu={};Wi(Amu,{migrateBetterAuth:()=>hbi});import{getMigrations as ARt}from"better-auth/db";import{sso as xRt}from"@better-auth/sso";import{organization as kRt}from"@decocms/better-auth/plugins";import{admin as GRt,apiKey as SRt,jwt as jRt,magicLink as KRt,mcp as JRt,openAPI as XRt}from"better-auth/plugins";import{emailOTP as LRt}from"better-auth/plugins/email-otp";async function hbi(i){let t={database:HC(i||r8()),plugins:[kRt({dynamicAccessControl:{enabled:!0,enableCustomResources:!0}}),GRt(),SRt(),jRt(),XRt(),JRt({loginPage:"/login"}),xRt(),KRt({sendMagicLink:async()=>{}}),LRt({sendVerificationOTP:async()=>{}})]},{toBeAdded:f,toBeCreated:l,runMigrations:c}=await ARt(t);if(!f.length&&!l.length)return"up to date";return await c(),`${l.length+f.length} table(s) migrated`}var _bi=g(()=>{HE()});var vbi={};Wi(vbi,{up:()=>WRt,down:()=>YRt});import{sql as p_}from"kysely";async function WRt(i){await i.schema.createTable("connections").addColumn("id","text",(u)=>u.primaryKey()).addColumn("organizationId","text",(u)=>u.notNull().references("organization.id").onDelete("cascade")).addColumn("createdById","text",(u)=>u.notNull().references("user.id").onDelete("cascade")).addColumn("name","text",(u)=>u.notNull()).addColumn("description","text").addColumn("icon","text").addColumn("appName","text").addColumn("appId","text").addColumn("connectionType","text",(u)=>u.notNull()).addColumn("connectionUrl","text",(u)=>u.notNull()).addColumn("connectionToken","text").addColumn("connectionHeaders","text").addColumn("oauthConfig","text").addColumn("metadata","text").addColumn("tools","text").addColumn("bindings","text").addColumn("status","text",(u)=>u.notNull().defaultTo("active")).addColumn("createdAt","text",(u)=>u.notNull().defaultTo(p_`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(u)=>u.notNull().defaultTo(p_`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("api_keys").addColumn("id","text",(u)=>u.primaryKey()).addColumn("userId","text",(u)=>u.notNull().references("user.id").onDelete("cascade")).addColumn("name","text",(u)=>u.notNull()).addColumn("hashedKey","text",(u)=>u.notNull().unique()).addColumn("permissions","text",(u)=>u.notNull()).addColumn("expiresAt","text").addColumn("remaining","integer").addColumn("metadata","text").addColumn("createdAt","text",(u)=>u.notNull().defaultTo(p_`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(u)=>u.notNull().defaultTo(p_`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("audit_logs").addColumn("id","text",(u)=>u.primaryKey()).addColumn("organizationId","text").addColumn("userId","text",(u)=>u.references("user.id").onDelete("set null")).addColumn("connectionId","text",(u)=>u.references("connections.id").onDelete("set null")).addColumn("toolName","text",(u)=>u.notNull()).addColumn("allowed","integer",(u)=>u.notNull()).addColumn("duration","integer").addColumn("timestamp","text",(u)=>u.notNull().defaultTo(p_`CURRENT_TIMESTAMP`)).addColumn("requestMetadata","text").execute(),await i.schema.createTable("oauth_clients").addColumn("id","text",(u)=>u.primaryKey()).addColumn("clientId","text",(u)=>u.notNull().unique()).addColumn("clientSecret","text").addColumn("clientName","text",(u)=>u.notNull()).addColumn("redirectUris","text",(u)=>u.notNull()).addColumn("grantTypes","text",(u)=>u.notNull()).addColumn("scope","text").addColumn("clientUri","text").addColumn("logoUri","text").addColumn("createdAt","text",(u)=>u.notNull().defaultTo(p_`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("oauth_authorization_codes").addColumn("code","text",(u)=>u.primaryKey()).addColumn("clientId","text",(u)=>u.notNull().references("oauth_clients.clientId").onDelete("cascade")).addColumn("userId","text",(u)=>u.notNull().references("user.id").onDelete("cascade")).addColumn("redirectUri","text",(u)=>u.notNull()).addColumn("scope","text").addColumn("codeChallenge","text").addColumn("codeChallengeMethod","text").addColumn("expiresAt","text",(u)=>u.notNull()).addColumn("createdAt","text",(u)=>u.notNull().defaultTo(p_`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("oauth_refresh_tokens").addColumn("token","text",(u)=>u.primaryKey()).addColumn("clientId","text",(u)=>u.notNull().references("oauth_clients.clientId").onDelete("cascade")).addColumn("userId","text",(u)=>u.notNull().references("user.id").onDelete("cascade")).addColumn("scope","text").addColumn("expiresAt","text").addColumn("createdAt","text",(u)=>u.notNull().defaultTo(p_`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("downstream_tokens").addColumn("id","text",(u)=>u.primaryKey()).addColumn("connectionId","text",(u)=>u.notNull().references("connections.id").onDelete("cascade")).addColumn("userId","text",(u)=>u.references("user.id").onDelete("cascade")).addColumn("accessToken","text",(u)=>u.notNull()).addColumn("refreshToken","text").addColumn("scope","text").addColumn("expiresAt","text").addColumn("createdAt","text",(u)=>u.notNull().defaultTo(p_`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(u)=>u.notNull().defaultTo(p_`CURRENT_TIMESTAMP`)).execute(),await i.schema.createIndex("idx_connections_organizationId").on("connections").column("organizationId").execute(),await i.schema.createIndex("idx_audit_logs_organizationId").on("audit_logs").column("organizationId").execute(),await i.schema.createIndex("idx_audit_logs_userId").on("audit_logs").column("userId").execute(),await i.schema.createIndex("idx_audit_logs_timestamp").on("audit_logs").column("timestamp").execute()}async function YRt(i){await i.schema.dropTable("downstream_tokens").execute(),await i.schema.dropTable("oauth_refresh_tokens").execute(),await i.schema.dropTable("oauth_authorization_codes").execute(),await i.schema.dropTable("oauth_clients").execute(),await i.schema.dropTable("audit_logs").execute(),await i.schema.dropTable("api_keys").execute(),await i.schema.dropTable("connections").execute()}var xmu=()=>{};var nbi={};Wi(nbi,{up:()=>zRt,down:()=>QRt});import{sql as kmu}from"kysely";async function zRt(i){await i.schema.createTable("organization_settings").addColumn("organizationId","text",(u)=>u.primaryKey().references("organization.id").onDelete("cascade")).addColumn("modelsBindingConnectionId","text",(u)=>u.references("connections.id").onDelete("set null")).addColumn("createdAt","text",(u)=>u.notNull().defaultTo(kmu`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(u)=>u.notNull().defaultTo(kmu`CURRENT_TIMESTAMP`)).execute()}async function QRt(i){await i.schema.dropTable("organization_settings").execute()}var Gmu=()=>{};var Dbi={};Wi(Dbi,{up:()=>HRt,down:()=>bRt});async function HRt(i){await i.schema.alterTable("connections").renameColumn("name","title").execute(),await i.schema.alterTable("connections").renameColumn("createdById","created_by").execute(),await i.schema.alterTable("connections").renameColumn("createdAt","created_at").execute(),await i.schema.alterTable("connections").renameColumn("updatedAt","updated_at").execute(),await i.schema.alterTable("connections").renameColumn("organizationId","organization_id").execute(),await i.schema.alterTable("connections").renameColumn("connectionType","connection_type").execute(),await i.schema.alterTable("connections").renameColumn("connectionUrl","connection_url").execute(),await i.schema.alterTable("connections").renameColumn("connectionToken","connection_token").execute(),await i.schema.alterTable("connections").renameColumn("connectionHeaders","connection_headers").execute(),await i.schema.alterTable("connections").renameColumn("oauthConfig","oauth_config").execute(),await i.schema.alterTable("connections").renameColumn("appName","app_name").execute(),await i.schema.alterTable("connections").renameColumn("appId","app_id").execute()}async function bRt(i){await i.schema.alterTable("connections").renameColumn("title","name").execute(),await i.schema.alterTable("connections").renameColumn("created_by","createdById").execute(),await i.schema.alterTable("connections").renameColumn("created_at","createdAt").execute(),await i.schema.alterTable("connections").renameColumn("updated_at","updatedAt").execute(),await i.schema.alterTable("connections").renameColumn("organization_id","organizationId").execute(),await i.schema.alterTable("connections").renameColumn("connection_type","connectionType").execute(),await i.schema.alterTable("connections").renameColumn("connection_url","connectionUrl").execute(),await i.schema.alterTable("connections").renameColumn("connection_token","connectionToken").execute(),await i.schema.alterTable("connections").renameColumn("connection_headers","connectionHeaders").execute(),await i.schema.alterTable("connections").renameColumn("oauth_config","oauthConfig").execute(),await i.schema.alterTable("connections").renameColumn("app_name","appName").execute(),await i.schema.alterTable("connections").renameColumn("app_id","appId").execute()}var gbi={};Wi(gbi,{up:()=>RRt,down:()=>CRt});async function RRt(i){await i.schema.createTable("organization_settings_new").addColumn("organizationId","text",(u)=>u.primaryKey().references("organization.id").onDelete("cascade")).addColumn("createdAt","text",(u)=>u.notNull()).addColumn("updatedAt","text",(u)=>u.notNull()).execute(),await i.insertInto("organization_settings_new").columns(["organizationId","createdAt","updatedAt"]).expression((u)=>u.selectFrom("organization_settings").select(["organizationId","createdAt","updatedAt"])).execute(),await i.schema.dropTable("organization_settings").execute(),await i.schema.alterTable("organization_settings_new").renameTo("organization_settings").execute()}async function CRt(i){await i.schema.createTable("organization_settings_new").addColumn("organizationId","text",(u)=>u.primaryKey().references("organization.id").onDelete("cascade")).addColumn("modelsBindingConnectionId","text",(u)=>u.references("connections.id").onDelete("set null")).addColumn("createdAt","text",(u)=>u.notNull()).addColumn("updatedAt","text",(u)=>u.notNull()).execute(),await i.insertInto("organization_settings_new").columns(["organizationId","modelsBindingConnectionId","createdAt","updatedAt"]).expression((u)=>u.selectFrom("organization_settings").select(["organizationId",u.val(null).as("modelsBindingConnectionId"),"createdAt","updatedAt"])).execute(),await i.schema.dropTable("organization_settings").execute(),await i.schema.alterTable("organization_settings_new").renameTo("organization_settings").execute()}var Obi={};Wi(Obi,{up:()=>MRt,down:()=>qRt});async function MRt(i){await i.schema.alterTable("connections").addColumn("configuration_state","text").execute(),await i.schema.alterTable("connections").addColumn("configuration_scopes","text").execute()}async function qRt(i){await i.schema.alterTable("connections").dropColumn("configuration_state").execute(),await i.schema.alterTable("connections").dropColumn("configuration_scopes").execute()}var Nbi={};Wi(Nbi,{up:()=>rRt,down:()=>mRt});import{sql as VRt}from"kysely";async function rRt(i){await i.schema.alterTable("organization_settings").addColumn("sidebar_items",VRt`text`).execute()}async function mRt(i){await i.schema.alterTable("organization_settings").dropColumn("sidebar_items").execute()}var Smu=()=>{};var ybi={};Wi(ybi,{up:()=>eRt,down:()=>aRt});async function eRt(i){await i.schema.createTable("monitoring_logs").addColumn("id","text",(u)=>u.primaryKey()).addColumn("organization_id","text",(u)=>u.notNull().references("organization.id").onDelete("cascade")).addColumn("connection_id","text",(u)=>u.notNull().references("connections.id").onDelete("cascade")).addColumn("connection_title","text",(u)=>u.notNull()).addColumn("tool_name","text",(u)=>u.notNull()).addColumn("input","text",(u)=>u.notNull()).addColumn("output","text",(u)=>u.notNull()).addColumn("is_error","integer",(u)=>u.notNull()).addColumn("error_message","text").addColumn("duration_ms","integer",(u)=>u.notNull()).addColumn("timestamp","text",(u)=>u.notNull()).addColumn("user_id","text").addColumn("request_id","text",(u)=>u.notNull()).execute(),await i.schema.createIndex("monitoring_logs_org_timestamp").on("monitoring_logs").columns(["organization_id","timestamp"]).execute(),await i.schema.createIndex("monitoring_logs_connection_timestamp").on("monitoring_logs").columns(["connection_id","timestamp"]).execute(),await i.schema.createIndex("monitoring_logs_is_error").on("monitoring_logs").columns(["organization_id","is_error","timestamp"]).execute()}async function aRt(i){await i.schema.dropIndex("monitoring_logs_is_error").execute(),await i.schema.dropIndex("monitoring_logs_connection_timestamp").execute(),await i.schema.dropIndex("monitoring_logs_org_timestamp").execute(),await i.schema.dropTable("monitoring_logs").execute()}var Zbi={};Wi(Zbi,{up:()=>oRt,down:()=>sRt});import{sql as GM}from"kysely";async function oRt(i){await i.schema.createTable("events").addColumn("id","text",(u)=>u.primaryKey()).addColumn("organization_id","text",(u)=>u.notNull().references("organization.id").onDelete("cascade")).addColumn("type","text",(u)=>u.notNull()).addColumn("source","text",(u)=>u.notNull()).addColumn("specversion","text",(u)=>u.notNull().defaultTo("1.0")).addColumn("subject","text").addColumn("time","text",(u)=>u.notNull()).addColumn("datacontenttype","text",(u)=>u.notNull().defaultTo("application/json")).addColumn("dataschema","text").addColumn("data","text").addColumn("cron","varchar(255)").addColumn("status","text",(u)=>u.notNull().defaultTo("pending")).addColumn("attempts","integer",(u)=>u.notNull().defaultTo(0)).addColumn("last_error","text").addColumn("next_retry_at","text").addColumn("created_at","text",(u)=>u.notNull().defaultTo(GM`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(u)=>u.notNull().defaultTo(GM`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("event_subscriptions").addColumn("id","text",(u)=>u.primaryKey()).addColumn("organization_id","text",(u)=>u.notNull().references("organization.id").onDelete("cascade")).addColumn("connection_id","text",(u)=>u.notNull().references("connections.id").onDelete("cascade")).addColumn("publisher","text").addColumn("event_type","text",(u)=>u.notNull()).addColumn("filter","text").addColumn("enabled","integer",(u)=>u.notNull().defaultTo(1)).addColumn("created_at","text",(u)=>u.notNull().defaultTo(GM`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(u)=>u.notNull().defaultTo(GM`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("event_deliveries").addColumn("id","text",(u)=>u.primaryKey()).addColumn("event_id","text",(u)=>u.notNull()).addColumn("subscription_id","text",(u)=>u.notNull().references("event_subscriptions.id").onDelete("cascade")).addColumn("status","text",(u)=>u.notNull().defaultTo("pending")).addColumn("attempts","integer",(u)=>u.notNull().defaultTo(0)).addColumn("last_error","text").addColumn("delivered_at","text").addColumn("next_retry_at","text").addColumn("created_at","text",(u)=>u.notNull().defaultTo(GM`CURRENT_TIMESTAMP`)).execute(),await i.schema.createIndex("idx_events_org_status").on("events").columns(["organization_id","status"]).execute(),await i.schema.createIndex("idx_events_source").on("events").columns(["source"]).execute(),await i.schema.createIndex("idx_events_type").on("events").columns(["type"]).execute(),await i.schema.createIndex("idx_events_retry").on("events").columns(["status","next_retry_at"]).execute(),await i.schema.createIndex("idx_subscriptions_connection").on("event_subscriptions").columns(["connection_id"]).execute(),await i.schema.createIndex("idx_subscriptions_type").on("event_subscriptions").columns(["event_type"]).execute(),await i.schema.createIndex("idx_subscriptions_org_enabled").on("event_subscriptions").columns(["organization_id","enabled"]).execute(),await i.schema.createIndex("idx_subscriptions_unique").on("event_subscriptions").columns(["connection_id","event_type","publisher","filter"]).unique().execute(),await i.schema.createIndex("idx_deliveries_event").on("event_deliveries").columns(["event_id"]).execute(),await i.schema.createIndex("idx_deliveries_subscription_status").on("event_deliveries").columns(["subscription_id","status"]).execute(),await i.schema.createIndex("idx_deliveries_retry").on("event_deliveries").columns(["status","next_retry_at"]).execute()}async function sRt(i){await i.schema.dropIndex("idx_deliveries_retry").execute(),await i.schema.dropIndex("idx_deliveries_subscription_status").execute(),await i.schema.dropIndex("idx_deliveries_event").execute(),await i.schema.dropIndex("idx_subscriptions_unique").execute(),await i.schema.dropIndex("idx_subscriptions_org_enabled").execute(),await i.schema.dropIndex("idx_subscriptions_type").execute(),await i.schema.dropIndex("idx_subscriptions_connection").execute(),await i.schema.dropIndex("idx_events_retry").execute(),await i.schema.dropIndex("idx_events_type").execute(),await i.schema.dropIndex("idx_events_source").execute(),await i.schema.dropIndex("idx_events_org_status").execute(),await i.schema.dropTable("event_deliveries").execute(),await i.schema.dropTable("event_subscriptions").execute(),await i.schema.dropTable("events").execute()}var jmu=()=>{};var Tbi={};Wi(Tbi,{up:()=>iCt,down:()=>uCt});import{sql as pRt}from"kysely";async function iCt(i){await i.schema.dropTable("audit_logs").ifExists().execute()}async function uCt(i){await i.schema.createTable("audit_logs").ifNotExists().addColumn("id","text",(u)=>u.primaryKey()).addColumn("organizationId","text").addColumn("userId","text",(u)=>u.references("user.id").onDelete("set null")).addColumn("connectionId","text",(u)=>u.references("connections.id").onDelete("set null")).addColumn("toolName","text",(u)=>u.notNull()).addColumn("allowed","integer",(u)=>u.notNull()).addColumn("duration","integer").addColumn("timestamp","text",(u)=>u.notNull().defaultTo(pRt`CURRENT_TIMESTAMP`)).addColumn("requestMetadata","text").execute(),await i.schema.createIndex("idx_audit_logs_organizationId").on("audit_logs").column("organizationId").execute(),await i.schema.createIndex("idx_audit_logs_userId").on("audit_logs").column("userId").execute(),await i.schema.createIndex("idx_audit_logs_timestamp").on("audit_logs").column("timestamp").execute()}var Kmu=()=>{};var Bbi={};Wi(Bbi,{up:()=>tCt,down:()=>fCt});import{sql as v1i}from"kysely";async function tCt(i){await i.schema.createTable("gateways").addColumn("id","text",(u)=>u.primaryKey()).addColumn("organization_id","text",(u)=>u.notNull().references("organization.id").onDelete("cascade")).addColumn("title","text",(u)=>u.notNull()).addColumn("description","text").addColumn("tool_selection_strategy","text").addColumn("status","text",(u)=>u.notNull().defaultTo("active")).addColumn("is_default","integer",(u)=>u.notNull().defaultTo(0)).addColumn("created_at","text",(u)=>u.notNull().defaultTo(v1i`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(u)=>u.notNull().defaultTo(v1i`CURRENT_TIMESTAMP`)).addColumn("created_by","text",(u)=>u.notNull().references("user.id").onDelete("cascade")).addColumn("updated_by","text").execute(),await i.schema.createTable("gateway_connections").addColumn("id","text",(u)=>u.primaryKey()).addColumn("gateway_id","text",(u)=>u.notNull().references("gateways.id").onDelete("cascade")).addColumn("connection_id","text",(u)=>u.notNull().references("connections.id").onDelete("cascade")).addColumn("selected_tools","text").addColumn("created_at","text",(u)=>u.notNull().defaultTo(v1i`CURRENT_TIMESTAMP`)).execute(),await i.schema.createIndex("idx_gateways_org").on("gateways").columns(["organization_id"]).execute(),await i.schema.createIndex("idx_gateways_org_status").on("gateways").columns(["organization_id","status"]).execute(),await v1i`CREATE UNIQUE INDEX idx_gateways_default_per_org ON gateways (organization_id) WHERE is_default = 1`.execute(i),await i.schema.createIndex("idx_gateway_connections_gateway").on("gateway_connections").columns(["gateway_id"]).execute(),await i.schema.createIndex("idx_gateway_connections_connection").on("gateway_connections").columns(["connection_id"]).execute(),await i.schema.createIndex("idx_gateway_connections_unique").on("gateway_connections").columns(["gateway_id","connection_id"]).unique().execute()}async function fCt(i){await i.schema.dropIndex("idx_gateway_connections_unique").execute(),await i.schema.dropIndex("idx_gateway_connections_connection").execute(),await i.schema.dropIndex("idx_gateway_connections_gateway").execute(),await i.schema.dropIndex("idx_gateways_default_per_org").execute(),await i.schema.dropIndex("idx_gateways_org_status").execute(),await i.schema.dropIndex("idx_gateways_org").execute(),await i.schema.dropTable("gateway_connections").execute(),await i.schema.dropTable("gateways").execute()}var Jmu=()=>{};var Fbi={};Wi(Fbi,{up:()=>lCt,down:()=>cCt});async function lCt(i){await i.schema.alterTable("gateways").addColumn("icon","text").execute()}async function cCt(i){await i.schema.alterTable("gateways").dropColumn("icon").execute()}var Ubi={};Wi(Ubi,{up:()=>ECt,down:()=>dCt});import{sql as n1i}from"kysely";async function ECt(i){await i.schema.alterTable("gateways").addColumn("tool_selection_mode","text",(u)=>u.notNull().defaultTo("inclusion")).execute(),await n1i`
|
|
84438
84438
|
UPDATE gateways
|
|
84439
84439
|
SET tool_selection_mode = CASE
|
|
@@ -86458,7 +86458,7 @@ ${w}`:w;return{...E,description:h,inputExamples:t?void 0:E.inputExamples}});retu
|
|
|
86458
86458
|
`)},flush(i){i.enqueue(`data: [DONE]
|
|
86459
86459
|
|
|
86460
86460
|
`)}})}},mtu={"content-type":"text/event-stream","cache-control":"no-cache",connection:"keep-alive","x-vercel-ai-ui-message-stream":"v1","x-accel-buffering":"no"};Na=Du.record(Du.string(),zy.optional()),etu=Ji(()=>gi(Du.union([Du.strictObject({type:Du.literal("text-start"),id:Du.string(),providerMetadata:O0.optional()}),Du.strictObject({type:Du.literal("text-delta"),id:Du.string(),delta:Du.string(),providerMetadata:O0.optional()}),Du.strictObject({type:Du.literal("text-end"),id:Du.string(),providerMetadata:O0.optional()}),Du.strictObject({type:Du.literal("error"),errorText:Du.string()}),Du.strictObject({type:Du.literal("tool-input-start"),toolCallId:Du.string(),toolName:Du.string(),providerExecuted:Du.boolean().optional(),providerMetadata:O0.optional(),toolMetadata:Na.optional(),dynamic:Du.boolean().optional(),title:Du.string().optional()}),Du.strictObject({type:Du.literal("tool-input-delta"),toolCallId:Du.string(),inputTextDelta:Du.string()}),Du.strictObject({type:Du.literal("tool-input-available"),toolCallId:Du.string(),toolName:Du.string(),input:Du.unknown(),providerExecuted:Du.boolean().optional(),providerMetadata:O0.optional(),toolMetadata:Na.optional(),dynamic:Du.boolean().optional(),title:Du.string().optional()}),Du.strictObject({type:Du.literal("tool-input-error"),toolCallId:Du.string(),toolName:Du.string(),input:Du.unknown(),providerExecuted:Du.boolean().optional(),providerMetadata:O0.optional(),toolMetadata:Na.optional(),dynamic:Du.boolean().optional(),errorText:Du.string(),title:Du.string().optional()}),Du.strictObject({type:Du.literal("tool-approval-request"),approvalId:Du.string(),toolCallId:Du.string(),signature:Du.string().optional()}),Du.strictObject({type:Du.literal("tool-output-available"),toolCallId:Du.string(),output:Du.unknown(),providerExecuted:Du.boolean().optional(),providerMetadata:O0.optional(),toolMetadata:Na.optional(),dynamic:Du.boolean().optional(),preliminary:Du.boolean().optional()}),Du.strictObject({type:Du.literal("tool-output-error"),toolCallId:Du.string(),errorText:Du.string(),providerExecuted:Du.boolean().optional(),providerMetadata:O0.optional(),toolMetadata:Na.optional(),dynamic:Du.boolean().optional()}),Du.strictObject({type:Du.literal("tool-output-denied"),toolCallId:Du.string()}),Du.strictObject({type:Du.literal("reasoning-start"),id:Du.string(),providerMetadata:O0.optional()}),Du.strictObject({type:Du.literal("reasoning-delta"),id:Du.string(),delta:Du.string(),providerMetadata:O0.optional()}),Du.strictObject({type:Du.literal("reasoning-end"),id:Du.string(),providerMetadata:O0.optional()}),Du.strictObject({type:Du.literal("source-url"),sourceId:Du.string(),url:Du.string(),title:Du.string().optional(),providerMetadata:O0.optional()}),Du.strictObject({type:Du.literal("source-document"),sourceId:Du.string(),mediaType:Du.string(),title:Du.string(),filename:Du.string().optional(),providerMetadata:O0.optional()}),Du.strictObject({type:Du.literal("file"),url:Du.string(),mediaType:Du.string(),providerMetadata:O0.optional()}),Du.strictObject({type:Du.custom((i)=>typeof i==="string"&&i.startsWith("data-"),{message:'Type must start with "data-"'}),id:Du.string().optional(),data:Du.unknown(),transient:Du.boolean().optional()}),Du.strictObject({type:Du.literal("start-step")}),Du.strictObject({type:Du.literal("finish-step")}),Du.strictObject({type:Du.literal("start"),messageId:Du.string().optional(),messageMetadata:Du.unknown().optional()}),Du.strictObject({type:Du.literal("finish"),finishReason:Du.enum(["stop","length","content-filter","tool-calls","error","other"]).optional(),messageMetadata:Du.unknown().optional()}),Du.strictObject({type:Du.literal("abort"),reason:Du.string().optional()}),Du.strictObject({type:Du.literal("message-metadata"),messageMetadata:Du.unknown()})])));xGf=P3;kGf=Ta;SGf=eh({prefix:"aitxt",size:24}),jGf={file:!0,source:!0,"text-start":!0,"text-end":!0,"text-delta":!0,"reasoning-start":!0,"reasoning-end":!0,"reasoning-delta":!0,"tool-input-start":!0,"tool-input-end":!0,"tool-input-delta":!0,"tool-approval-request":!0,"tool-call":!0,"tool-result":!0,"tool-error":!0,"stream-start":!1,"response-metadata":!1,finish:!1,error:!1,raw:!1};E$=Zi.record(Zi.string(),zy.optional()),WGf=Ji(()=>gi(Zi.array(Zi.object({id:Zi.string(),role:Zi.enum(["system","user","assistant"]),metadata:Zi.unknown().optional(),parts:Zi.array(Zi.union([Zi.object({type:Zi.literal("text"),text:Zi.string(),state:Zi.enum(["streaming","done"]).optional(),providerMetadata:O0.optional()}),Zi.object({type:Zi.literal("reasoning"),text:Zi.string(),state:Zi.enum(["streaming","done"]).optional(),providerMetadata:O0.optional()}),Zi.object({type:Zi.literal("source-url"),sourceId:Zi.string(),url:Zi.string(),title:Zi.string().optional(),providerMetadata:O0.optional()}),Zi.object({type:Zi.literal("source-document"),sourceId:Zi.string(),mediaType:Zi.string(),title:Zi.string(),filename:Zi.string().optional(),providerMetadata:O0.optional()}),Zi.object({type:Zi.literal("file"),mediaType:Zi.string(),filename:Zi.string().optional(),url:Zi.string(),providerMetadata:O0.optional()}),Zi.object({type:Zi.literal("step-start")}),Zi.object({type:Zi.string().startsWith("data-"),id:Zi.string().optional(),data:Zi.unknown()}),Zi.object({type:Zi.literal("dynamic-tool"),toolName:Zi.string(),toolCallId:Zi.string(),toolMetadata:E$.optional(),state:Zi.literal("input-streaming"),input:Zi.unknown().optional(),providerExecuted:Zi.boolean().optional(),callProviderMetadata:O0.optional(),output:Zi.never().optional(),errorText:Zi.never().optional(),approval:Zi.never().optional()}),Zi.object({type:Zi.literal("dynamic-tool"),toolName:Zi.string(),toolCallId:Zi.string(),toolMetadata:E$.optional(),state:Zi.literal("input-available"),input:Zi.unknown(),providerExecuted:Zi.boolean().optional(),output:Zi.never().optional(),errorText:Zi.never().optional(),callProviderMetadata:O0.optional(),approval:Zi.never().optional()}),Zi.object({type:Zi.literal("dynamic-tool"),toolName:Zi.string(),toolCallId:Zi.string(),toolMetadata:E$.optional(),state:Zi.literal("approval-requested"),input:Zi.unknown(),providerExecuted:Zi.boolean().optional(),output:Zi.never().optional(),errorText:Zi.never().optional(),callProviderMetadata:O0.optional(),approval:Zi.object({id:Zi.string(),approved:Zi.never().optional(),reason:Zi.never().optional(),signature:Zi.string().optional()})}),Zi.object({type:Zi.literal("dynamic-tool"),toolName:Zi.string(),toolCallId:Zi.string(),toolMetadata:E$.optional(),state:Zi.literal("approval-responded"),input:Zi.unknown(),providerExecuted:Zi.boolean().optional(),output:Zi.never().optional(),errorText:Zi.never().optional(),callProviderMetadata:O0.optional(),approval:Zi.object({id:Zi.string(),approved:Zi.boolean(),reason:Zi.string().optional(),signature:Zi.string().optional()})}),Zi.object({type:Zi.literal("dynamic-tool"),toolName:Zi.string(),toolCallId:Zi.string(),toolMetadata:E$.optional(),state:Zi.literal("output-available"),input:Zi.unknown(),providerExecuted:Zi.boolean().optional(),output:Zi.unknown(),errorText:Zi.never().optional(),callProviderMetadata:O0.optional(),resultProviderMetadata:O0.optional(),preliminary:Zi.boolean().optional(),approval:Zi.object({id:Zi.string(),approved:Zi.literal(!0),reason:Zi.string().optional(),signature:Zi.string().optional()}).optional()}),Zi.object({type:Zi.literal("dynamic-tool"),toolName:Zi.string(),toolCallId:Zi.string(),toolMetadata:E$.optional(),state:Zi.literal("output-error"),input:Zi.unknown().optional(),rawInput:Zi.unknown().optional(),providerExecuted:Zi.boolean().optional(),output:Zi.never().optional(),errorText:Zi.string(),callProviderMetadata:O0.optional(),resultProviderMetadata:O0.optional(),approval:Zi.object({id:Zi.string(),approved:Zi.literal(!0),reason:Zi.string().optional(),signature:Zi.string().optional()}).optional()}),Zi.object({type:Zi.literal("dynamic-tool"),toolName:Zi.string(),toolCallId:Zi.string(),toolMetadata:E$.optional(),state:Zi.literal("output-denied"),input:Zi.unknown(),providerExecuted:Zi.boolean().optional(),output:Zi.never().optional(),errorText:Zi.never().optional(),callProviderMetadata:O0.optional(),approval:Zi.object({id:Zi.string(),approved:Zi.literal(!1),reason:Zi.string().optional(),signature:Zi.string().optional()})}),Zi.object({type:Zi.string().startsWith("tool-"),toolCallId:Zi.string(),toolMetadata:E$.optional(),state:Zi.literal("input-streaming"),providerExecuted:Zi.boolean().optional(),callProviderMetadata:O0.optional(),input:Zi.unknown().optional(),output:Zi.never().optional(),errorText:Zi.never().optional(),approval:Zi.never().optional()}),Zi.object({type:Zi.string().startsWith("tool-"),toolCallId:Zi.string(),toolMetadata:E$.optional(),state:Zi.literal("input-available"),providerExecuted:Zi.boolean().optional(),input:Zi.unknown(),output:Zi.never().optional(),errorText:Zi.never().optional(),callProviderMetadata:O0.optional(),approval:Zi.never().optional()}),Zi.object({type:Zi.string().startsWith("tool-"),toolCallId:Zi.string(),toolMetadata:E$.optional(),state:Zi.literal("approval-requested"),input:Zi.unknown(),providerExecuted:Zi.boolean().optional(),output:Zi.never().optional(),errorText:Zi.never().optional(),callProviderMetadata:O0.optional(),approval:Zi.object({id:Zi.string(),approved:Zi.never().optional(),reason:Zi.never().optional(),signature:Zi.string().optional()})}),Zi.object({type:Zi.string().startsWith("tool-"),toolCallId:Zi.string(),toolMetadata:E$.optional(),state:Zi.literal("approval-responded"),input:Zi.unknown(),providerExecuted:Zi.boolean().optional(),output:Zi.never().optional(),errorText:Zi.never().optional(),callProviderMetadata:O0.optional(),approval:Zi.object({id:Zi.string(),approved:Zi.boolean(),reason:Zi.string().optional(),signature:Zi.string().optional()})}),Zi.object({type:Zi.string().startsWith("tool-"),toolCallId:Zi.string(),toolMetadata:E$.optional(),state:Zi.literal("output-available"),providerExecuted:Zi.boolean().optional(),input:Zi.unknown(),output:Zi.unknown(),errorText:Zi.never().optional(),callProviderMetadata:O0.optional(),resultProviderMetadata:O0.optional(),preliminary:Zi.boolean().optional(),approval:Zi.object({id:Zi.string(),approved:Zi.literal(!0),reason:Zi.string().optional(),signature:Zi.string().optional()}).optional()}),Zi.object({type:Zi.string().startsWith("tool-"),toolCallId:Zi.string(),toolMetadata:E$.optional(),state:Zi.literal("output-error"),providerExecuted:Zi.boolean().optional(),input:Zi.unknown().optional(),rawInput:Zi.unknown().optional(),output:Zi.never().optional(),errorText:Zi.string(),callProviderMetadata:O0.optional(),resultProviderMetadata:O0.optional(),approval:Zi.object({id:Zi.string(),approved:Zi.literal(!0),reason:Zi.string().optional(),signature:Zi.string().optional()}).optional()}),Zi.object({type:Zi.string().startsWith("tool-"),toolCallId:Zi.string(),toolMetadata:E$.optional(),state:Zi.literal("output-denied"),providerExecuted:Zi.boolean().optional(),input:Zi.unknown(),output:Zi.never().optional(),errorText:Zi.never().optional(),callProviderMetadata:O0.optional(),approval:Zi.object({id:Zi.string(),approved:Zi.literal(!1),reason:Zi.string().optional(),signature:Zi.string().optional()})})])).nonempty("Message must contain at least one part")})).nonempty("Messages array must not be empty")));qGf=b3i,VGf={type:"no-schema",jsonSchema:async()=>{return},async validatePartialResult({value:i,textDelta:u}){return{success:!0,value:{partial:i,textDelta:u}}},async validateFinalResult(i,u){return i===void 0?{success:!1,error:new $$({message:"No object generated: response did not match schema.",text:u.text,response:u.response,usage:u.usage,finishReason:u.finishReason})}:{success:!0,value:i}},createElementStream(){throw new Zf({functionality:"element streams in no-schema mode"})}};aGf=eh({prefix:"aiobj",size:24});uSf=eh({prefix:"aiobj",size:24});lSf=class extends c7{constructor({data:i,mediaType:u}){super({data:i,mediaType:u});let t="mp3";if(u){let f=u.split("/");if(f.length===2){if(u!=="audio/mpeg")t=f[1]}}if(!t)throw Error("Audio format must be provided or determinable from media type");this.format=t}};dSf={word:/\S+\s+/m,line:/\n+/m};wSf=tfu();xSf=WT0,zT0=`vercel.ai.error.${YT0}`,kSf=Symbol.for(zT0),HT0=class extends jf{constructor({modelId:i,modelType:u,providerId:t,availableProviders:f,message:l=`No such provider: ${t} (available providers: ${f.join()})`}){super({errorName:YT0,modelId:i,modelType:u,message:l});this[QT0]=!0,this.providerId=t,this.availableProviders=f}static isInstance(i){return Tu.hasMarker(i,zT0)}};QT0=kSf;GSf=bT0;KSf=tfu();CT0=class extends cfu{constructor(i={}){super(i)}processResponseStream(i){return iD({stream:i,schema:etu}).pipeThrough(new TransformStream({async transform(u,t){if(!u.success)throw u.error;t.enqueue(u.value)}}))}};CSf=class extends cfu{constructor(i={}){super(i)}processResponseStream(i){return RSf({stream:i.pipeThrough(new TextDecoderStream)})}}});function R3i(i){return{type:"data-title-result",data:{title:i},transient:!0}}function dfu(i){return i.type==="data-title-input"}function $fu(i){return i.type==="data-title-result"}async function*MT0(i,u){let t=u.persistTitle??((l,c)=>u.ctx.storage.threads.update(l,{title:c}).then(()=>{})),f=!1;for await(let l of i){if(dfu(l)){console.warn("[title-interceptor] harness emitted deprecated data-title-input chunk; ignoring");continue}if($fu(l)){if(f){console.warn("[title-interceptor] harness emitted multiple data-title-result chunks; ignoring extra");continue}if(f=!0,u.currentThreadTitle!==on)continue;let c=l.data.title;if(!c)continue;await t(u.threadId,c).catch((E)=>{console.error("[title-interceptor] persist failed for thread",u.threadId,E)});try{await u.onTitleUpdated?.(c)}catch(E){console.error("[title-interceptor] onTitleUpdated callback failed",E)}if(!u.isStreamFinished())try{u.writer.write({type:"data-thread-title",data:{title:c},transient:!0})}catch(E){console.error("[title-interceptor] writer.write failed",E)}continue}yield l}}function qT0(i,u){let t=u.persistTitle??((l,c)=>u.ctx.storage.threads.update(l,{title:c}).then(()=>{})),f=!1;return i.pipeThrough(new TransformStream({async transform(l,c){if(dfu(l)){console.warn("[title-interceptor] harness emitted deprecated data-title-input chunk; ignoring");return}if($fu(l)){if(f){console.warn("[title-interceptor] harness emitted multiple data-title-result chunks; ignoring extra");return}if(f=!0,u.currentThreadTitle!==on)return;let E=l.data.title;if(!E)return;await t(u.threadId,E).catch((d)=>{console.error("[title-interceptor] persist failed for thread",u.threadId,d)});try{await u.onTitleUpdated?.(E)}catch(d){console.error("[title-interceptor] onTitleUpdated callback failed",d)}if(!u.isStreamFinished())try{u.writer.write({type:"data-thread-title",data:{title:E},transient:!0})}catch(d){console.error("[title-interceptor] writer.write failed",d)}return}c.enqueue(l)}}))}var VT0=g(()=>{kg()});function MSf(i){let u=i[Symbol.asyncIterator]();return new ReadableStream({async pull(t){try{let{value:f,done:l}=await u.next();if(l)t.close();else t.enqueue(f)}catch(f){t.error(f)}},async cancel(t){await u.return?.(t)}})}function qSf(i,u){let t=i.getReader(),f=!1,l=()=>{if(f)return;f=!0,t.releaseLock()};return new ReadableStream({async pull(c){try{let{done:E,value:d}=await t.read();if(E)l(),c.close();else c.enqueue(d)}catch(E){u(),l(),c.error(E)}},async cancel(c){await t.cancel(c),l()}})}function VSf(i){let u=i.metadata?.usage;if(!u||typeof u!=="object"||Array.isArray(u))return null;let t=u,f=(l)=>typeof l==="number"?l:0;return{...t,inputTokens:f(t.inputTokens),outputTokens:f(t.outputTokens),totalTokens:f(t.totalTokens)}}function C3i(i){let u=[],t=!1,f=!1,l=!1,c=!0,E=i.errorMessageId??crypto.randomUUID(),d,$=new Promise((Z)=>{d=Z});if(!i.chunks&&!i.chunkStream)throw Error("consumeHarnessStream requires chunks or chunkStream");let w=i.chunks?async function*(){try{yield*i.chunks}catch(Z){throw l=!0,Z}}():null,h=i.chunkStream?qSf(i.chunkStream,()=>{l=!0}):null,_=i.originalMessages?.at(-1),v=!i.generateMessageId&&_?.role==="assistant"?_.id:void 0,n=new Map,D=null,O=(Z)=>{if(i.generateMessageId){let T=n.get(Z);if(T===void 0)T=i.generateMessageId(),n.set(Z,T);return T}if(D===null)D=Z;return v&&Z===D?v:Z},N=(Z)=>({...Z,id:O(Z.id)});return{uiStream:ptu({originalMessages:i.originalMessages,execute:({writer:Z})=>{let T={ctx:null,isStreamFinished:()=>t,currentThreadTitle:i.title.currentThreadTitle,threadId:i.title.threadId,writer:Z,onTitleUpdated:i.title.onTitleUpdated,persistTitle:i.title.persistTitle};if(h){Z.merge(qT0(h,T));return}let B=MT0(w,T);Z.merge(MSf(B))},onStepFinish:({responseMessage:Z})=>{let T=N(Z);u.push(i.persistence.emitStepParts(T).catch((B)=>{c=!1,console.error("[consume-harness-stream] emitStepParts failed",B)})),u.push(Promise.resolve(i.hooks?.onStep?.(T)).catch((B)=>console.error("[consume-harness-stream] onStep hook failed",B)))},onFinish:async({responseMessage:Z,finishReason:T})=>{t=!0,await Promise.allSettled(u);let B=N(Z);if(!f){if(T)B.metadata={...B.metadata??{},finishReason:T};await i.persistence.emitFinal(B).catch((P)=>{c=!1,console.error("[consume-harness-stream] emitFinal failed",P)})}let F=VSf(B);if(F)await Promise.resolve(i.hooks?.onUsage?.(F)).catch((P)=>console.error("[consume-harness-stream] onUsage hook failed",P));if(!l)await Promise.resolve(i.hooks?.onFinish?.(B,T,{persistenceOk:c})).catch((P)=>console.error("[consume-harness-stream] onFinish hook failed",P));d()},onError:(Z)=>{t=!0;let T=Z instanceof Error?Z.message:String(Z);if(!f)f=!0,u.push(i.persistence.emitError(E,T).catch((B)=>{c=!1,console.error("[consume-harness-stream] emitError failed",B)})),u.push(Promise.resolve(i.hooks?.onError?.(Z)).catch((B)=>console.error("[consume-harness-stream] onError hook failed",B)));return i.sanitizeErrorText?i.sanitizeErrorText(Z):T}}),whenComplete:$,isStreamFinished:()=>t}}var wfu=g(()=>{qf();VT0()});function rSf(i){return{type:"data-user-message",data:i}}function rT0(i){if(!i||typeof i!=="object")return!1;return i.type==="data-user-message"}async function mT0(i,u,t){if(!i)return;try{await i.publishRawChunk(u,rSf(t))}catch{}}function eT0(i){return jO0(i)||rT0(i)}async function mSf(i){let u=i.getReader();try{while(!0){let{done:t}=await u.read();if(t)break}}finally{u.releaseLock()}}function eSf(i,u){let t=i.getReader(),f=!1,l=()=>{if(f)return;f=!0,t.releaseLock()};return new ReadableStream({async pull(c){try{let{done:E,value:d}=await t.read();if(E)l(),c.close();else c.enqueue(d)}catch(E){u(E),l(),c.error(E)}},async cancel(c){await t.cancel(c),l()}})}async function aT0(i){if(!i.chunks&&!i.chunkStream)throw Error("projectChunks requires chunks or chunkStream");let u=null,t=!1,f=void 0,l={inputTokens:0,outputTokens:0,totalTokens:0},c=[],E=null,d=(D)=>{if(E===null)E=D;throw D},$=i.chunks?async function*(){try{for await(let D of i.chunks){if(eT0(D))continue;yield D}}catch(D){throw u=D,D}}():void 0,w=i.chunkStream?eSf(i.chunkStream,(D)=>{u=D}).pipeThrough(new TransformStream({transform(D,O){if(!eT0(D))O.enqueue(D)}})):void 0,h={emitStepParts:(D)=>i.persistence.emitStepParts(D).catch(d),emitFinal:(D)=>i.persistence.emitFinal(D).catch(d),emitError:(D,O)=>i.persistence.emitError(D,O).catch(d)},{uiStream:_,whenComplete:v}=C3i({chunks:$,chunkStream:w,originalMessages:i.originalMessages??[],title:i.title?{currentThreadTitle:i.title.currentThreadTitle,threadId:i.title.threadId,persistTitle:i.title.persistTitle}:{currentThreadTitle:void 0,threadId:"projector",persistTitle:async()=>{}},persistence:h,sanitizeErrorText:i.sanitizeErrorText,errorMessageId:i.errorMessageId,generateMessageId:i.generateMessageId,hooks:{onUsage:(D)=>{l={inputTokens:D.inputTokens,outputTokens:D.outputTokens,totalTokens:D.totalTokens}},onError:()=>{t=!0},onFinish:(D,O)=>{f=O,c=Array.isArray(D.parts)?D.parts.filter((N)=>N!=null&&typeof N==="object"&&("type"in N)):[]}}});if(await mSf(_).catch(()=>{}),await v,E!==null)throw E;if(u!==null)throw u;return{failed:t&&f===void 0,finishReason:f,usage:l,finalParts:c}}var oT0=g(()=>{wfu();wa()});var ZD="DECOPILOT_STREAMS";var hfu=()=>{};function sT0(i,u){return new TransformStream({transform(t,f){if(t.runId!==i||t.fenceToken!==u)return;f.enqueue(t)}})}function pT0(){let i=1;return new TransformStream({transform(u,t){if(u.kind==="done"){t.enqueue(u);return}if(u.seq===null){t.error(Error("projector chunk missing seq"));return}if(u.seq<i)return;if(u.seq>i){t.error(new Aa(i,u.seq));return}i++,t.enqueue(u)}})}function iB0(i){let u=i.getReader(),t=!1,f=0,l=()=>{if(t)return;t=!0,u.releaseLock()};return new ReadableStream({async pull(c){for(;;){let{done:E,value:d}=await u.read();if(E){await u.cancel(),l(),c.error(Error("reader stopped before done"));return}let $=d;if($.kind==="done"){if(!($.envelopeFinalSeq!=null&&$.envelopeFinalSeq===$.msgIdFinalSeq))continue;if($.envelopeFinalSeq!==f){await u.cancel(),l(),c.error(new Aa(f+1,null));return}await u.cancel(),l(),c.close();return}f=$.seq??f,c.enqueue($.chunk);return}},async cancel(c){await u.cancel(c),l()}})}function aSf(i){if(Symbol.asyncIterator in i)return i[Symbol.asyncIterator]();let u=i[Symbol.iterator]();return{next:async()=>u.next(),return:async(t)=>u.return?u.return(t):{done:!0,value:t}}}function q3i(i){let u=aSf(i.messages),t=i.idleTimeoutMs,f=!1,l=(c)=>{if(f)return;f=!0,u.return?.(c).catch(()=>{}),i.onCancel?.()};return new ReadableStream({async pull(c){if(t===void 0){let{done:h,value:_}=await u.next();if(h){c.close();return}c.enqueue(_);return}let E=new AbortController,d=u.next().then((h)=>{return E.abort(),h}),$=F0(t,{signal:E.signal}).then(()=>"idle").catch(()=>"cancelled"),w=await Promise.race([d,$]);if(w==="idle"){c.error(new M3i(t));return}if(w==="cancelled")return;if(w.done){c.close();return}c.enqueue(w.value)},async cancel(c){l(c)}})}var M3i,Aa;var V3i=g(()=>{B4();M3i=class M3i extends Error{idleTimeoutMs;constructor(i){super("producer produced no output before timeout");this.idleTimeoutMs=i;this.name="StreamIdleTimeoutError"}};Aa=class Aa extends Error{expectedSeq;gotSeq;constructor(i,u){super(u===null?`missing seq ${i} (stream ended at the fenced done)`:`missing seq ${i} (next delivered is ${u})`);this.expectedSeq=i;this.gotSeq=u;this.name="StreamGapError"}}});function oSf(i){let t=q3i({messages:i.messages,idleTimeoutMs:i.idleTimeoutMs,onCancel:i.onDone}).pipeThrough(sli()).pipeThrough(pli()).pipeThrough(sT0(i.runId,i.fenceToken)).pipeThrough(pT0());return iB0(t)}async function tB0(i){let t=await(await i.js.consumers.get(ZD,{filter_subjects:$2(i.runId),deliver_policy:uB0.DeliverPolicy.All})).consume();async function*f(){try{for await(let l of t)yield{subject:l.subject,data:l.data,headers:l.headers}}finally{t.stop()}}return oSf({messages:f(),runId:i.runId,fenceToken:i.fenceToken,idleTimeoutMs:i.idleTimeoutMs,onDone:()=>t.stop()})}var uB0;var fB0=g(()=>{hfu();V3i();i1i();uB0=G(d2(),1)});function vfu(i){let u=i.type;if(typeof u!=="string")return!1;if(u==="text"||u==="reasoning")return i.state!=="streaming";if(u==="step-start")return!1;if(u.startsWith("tool-")||u==="dynamic-tool")return i.state==="approval-requested"||u==="tool-user_ask"&&i.state==="input-available"||i.state==="output-available"||i.state==="output-error"||i.state==="output-denied";return!0}function _fu(i){let u=i.type??"";if(u==="reasoning")return"reasoning";if(u==="file")return"file";if(u.startsWith("tool-")||u==="dynamic-tool")return i.state==="output-available"||i.state==="output-error"||i.state==="output-denied"?"tool_result":"tool_call";return"text"}class nfu{ctx;base;seqByPart=new Map;emitted=new Set;finished=new Set;partKeyByRowId=new Map;finishMessageIdByRowId=new Map;nextSeq=0;constructor(i){this.ctx=i;this.base=i.baseTimeMs??Date.now()}hasEmittedContentFor(i){let u=`${i}#`;for(let t of this.emitted)if(t.startsWith(u))return!0;return!1}seqFor(i){let u=this.seqByPart.get(i);if(u!==void 0)return u;let t=this.nextSeq++;return this.seqByPart.set(i,t),t}row(i,u,t,f,l,c=null){return{id:`${this.ctx.runId}:${i}:${t}`,seq:t,org_id:this.ctx.orgId,thread_id:this.ctx.threadId,run_id:this.ctx.runId,message_id:i,role:u,kind:f,payload:l,payload_ref:null,metadata:c,created_at:new Date(this.base+t).toISOString()}}emitMessageParts(i){let u=i.parts??[],t=[];for(let f=0;f<u.length;f++){let l=u[f];if(!vfu(l))continue;let c=`${i.id}#${f}`;if(this.emitted.has(c))continue;let E=this.seqFor(c),d=this.row(i.id,i.role,E,_fu(l),l);this.partKeyByRowId.set(d.id,c),t.push(d)}return t}emitRequestMessageParts(i){let u=i.parts??[],t=[];for(let f=0;f<u.length;f++){let l=u[f],c=`${i.id}#${f}`,E=this.seqFor(c),d=this.row(i.id,i.role,E,_fu(l),l);this.partKeyByRowId.set(d.id,c),t.push(d)}return t}markFinished(i,u,t=null){if(this.finished.has(i))return[];let f=this.seqFor(`${i}#finish`),l=this.row(i,u,f,"finish",{},t);return this.finishMessageIdByRowId.set(l.id,i),[l]}markRequestFinished(i,u,t=null){let f=this.seqFor(`${i}#finish`),l=this.row(i,u,f,"finish",{},t);return this.finishMessageIdByRowId.set(l.id,i),[l]}acknowledge(i){for(let u of i){let t=this.partKeyByRowId.get(u.id);if(t!==void 0)this.emitted.add(t);let f=this.finishMessageIdByRowId.get(u.id);if(f!==void 0)this.finished.add(f)}}emitUserMessage(i){return[...this.emitMessageParts(i),...this.markFinished(i.id,i.role,i.metadata??null)]}emitRequestMessage(i){return[...this.emitRequestMessageParts(i),...this.markRequestFinished(i.id,i.role,i.metadata??null)]}emitStepParts(i){return this.emitMessageParts(i)}emitFinal(i){let u=this.emitMessageParts(i);if(u.length===0&&!this.hasEmittedContentFor(i.id))return u;return[...u,...this.markFinished(i.id,i.role,i.metadata??null)]}emitFinalSnapshot(i){let u=i.parts??[],t=[];for(let c=0;c<u.length;c++){let E=u[c];if(!vfu(E))continue;let d=`${i.id}#${c}`,$=this.seqFor(d),w=this.row(i.id,i.role,$,_fu(E),E);this.partKeyByRowId.set(w.id,d),t.push(w)}if(t.length===0&&!this.hasEmittedContentFor(i.id))return t;let f=this.seqFor(`${i.id}#finish`),l=this.row(i.id,i.role,f,"finish",{},i.metadata??null);return this.finishMessageIdByRowId.set(l.id,i.id),[...t,l]}emitError(i,u){let t=`${i}#error`,f=[];if(!this.emitted.has(t)){let l=this.seqFor(t),c=this.row(i,"assistant",l,"error",{type:"text",text:`Error: ${u}`});this.partKeyByRowId.set(c.id,t),f.push(c)}return[...f,...this.markFinished(i,"assistant")]}}class n_{ctx;builder;constructor(i){this.ctx=i;this.builder=new nfu(i)}async appendBuiltRows(i){await this.ctx.storage.appendParts(i),this.builder.acknowledge(i)}async emitUserMessage(i){await this.appendBuiltRows(this.builder.emitUserMessage(i))}async emitRequestMessage(i){let u=this.builder.emitRequestMessage(i);await this.ctx.storage.replaceMessageParts(this.ctx.threadId,i.id,u),this.builder.acknowledge(u)}async emitStepParts(i){await this.appendBuiltRows(this.builder.emitStepParts(i))}async emitFinal(i){await this.appendBuiltRows(this.builder.emitFinal(i))}async replaceFinal(i){let u=this.builder.emitFinalSnapshot(i);await this.ctx.storage.replaceMessageParts(this.ctx.threadId,i.id,u),this.builder.acknowledge(u)}async emitError(i,u){await this.appendBuiltRows(this.builder.emitError(i,u))}}var xa=()=>{};async function sSf(i){let t=(i.requestMessageId?await i.messageParts.maxCreatedAtMsForMessage(i.runId,i.requestMessageId):null)??await i.messageParts.maxCreatedAtMsForRun(i.runId);return new n_({storage:i.messageParts,orgId:i.orgId,threadId:i.runId,runId:i.runId,baseTimeMs:(t??Date.now())+1})}async function lB0(i){let u=await sSf(i),t=i.replaceFinal?(f)=>u.replaceFinal(f):(f)=>u.emitFinal(f);return{emitStepParts:(f)=>u.emitStepParts(f),emitFinal:t,emitError:(f,l)=>u.emitError(f,l)}}var cB0=g(()=>{xa()});function r3i(i,u){pSf.add(1,{"org.id":u??"unknown"})}var pSf;var EB0=g(()=>{kl();pSf=Tt.createCounter("decopilot.projector.poison_runs",{description:"Number of decopilot runs that exhausted retries and were sent to the DLQ",unit:"{runs}"})});class Dfu{intervalMs;lastBumpMs=new Map;constructor(i=3000){this.intervalMs=i}shouldBump(i,u=Date.now()){let t=this.lastBumpMs.get(i);if(t!==void 0&&u-t<this.intervalMs)return!1;return this.lastBumpMs.set(i,u),!0}clear(i){this.lastBumpMs.delete(i)}}function dB0(i,u,t,f){return i.pipeThrough(new TransformStream({transform(l,c){if(t.shouldBump(u))f();c.enqueue(l)},flush(){t.clear(u)}}))}function m3i(i,u=[]){if(i==="stop")return u.filter((l)=>l.type==="text"&&l.text).map((l)=>l.text).join(`
|
|
86461
|
-
`).replace(/https?:\/\/[^\s)>\]]+/g,"").includes("?")?"requires_action":"completed";if(i==="tool-calls"){let t=u.some((l)=>l.type==="tool-user_ask"&&l.state==="input-available"),f=u.some((l)=>l.state==="approval-requested");return t||f?"requires_action":"completed"}return"failed"}function h7(i,u){return`error-${i}:${u}`}function e3i(i){return{id:i.id,role:i.role,parts:i.parts,metadata:i.metadata??void 0}}var gfu=()=>{};function ijf(i){return`liveness: no stream events for ${Math.round(i/60000)}m`}function Nfu(i){return i.runFenceToken!==null&&i.runFenceToken!==i.fenceToken}function $B0(i){Ofu=i}function wB0(){if(!Ofu)throw Error("[projector-workflow] runtime not initialized \u2014 setProjectorWorkflowRuntime() must run before workflows fire");return Ofu}function hB0(){return wB0()}async function _B0(i,u,t){let f=wB0(),l=f.getJetStream();if(!l)throw Error("JetStream unavailable");let c=(await f.messageParts.loadWindow(i.runId,{limit:500})).messages.map(e3i);return{chunkCount:0,attempts:1,outcome:await aT0({chunkStream:dB0(await tB0({js:l,runId:i.runId,fenceToken:i.fenceToken,idleTimeoutMs:i.idleTimeoutMs}),i.runId,ujf,()=>{f.bumpProgress({runId:i.runId,orgId:u}).catch(()=>{})}),persistence:await lB0({messageParts:f.messageParts,orgId:u,runId:i.runId,requestMessageId:i.messageId,replaceFinal:!0}),originalMessages:c,errorMessageId:h7(i.runId,i.fenceToken),title:{threadId:i.runId,currentThreadTitle:t,persistTitle:async(d,$)=>{await f.persistTitle(i.runId,u,$),await f.onTitleUpdated({runId:i.runId,orgId:u,title:$})}}})}}async function vB0(i,u,t){let f=await tjf(i,u);if("skip"in f)return;let l=f.row.orgId,c=f.row.createdBy??i.runId,E=f.row.title;try{let{outcome:d}=await t(i,l,E),$=d?.failed?"failed":d?.finishReason==null?"completed":m3i(d.finishReason,d.finalParts);if($==="failed"){let w=d?.finishReason?`harness reported an error: ${d.finishReason}`:"harness reported an error";if(r3i(i.runId,l),await u.markRunFailed(i.runId,l,w,"harness"))await u.recordFailed({runId:i.runId,orgId:l,distinctId:c,reason:w,kind:"harness"})}else if($==="requires_action")await u.markRunRequiresAction(i.runId,l),await u.clearSynthesizedError(i.runId,i.fenceToken);else{if(await u.completeRunIfNotCompleted(i.runId,l))await u.recordCompleted({runId:i.runId,orgId:l,distinctId:c,usage:d?.usage??{inputTokens:0,outputTokens:0,totalTokens:0}});await u.clearSynthesizedError(i.runId,i.fenceToken)}await u.purgeRun(i.runId,i.fenceToken)}catch(d){if(d instanceof Aa){let v=`stream truncated before projection could replay it: ${d.message}`;if(r3i(i.runId,l),await u.markRunFailed(i.runId,l,v,"projection"))await u.recordFailed({runId:i.runId,orgId:l,distinctId:c,reason:v,kind:"projection"});await u.purgeRun(i.runId,i.fenceToken);return}let $=d instanceof M3i;if($){let v=await u.resolveRun(i.runId).catch(()=>null);if(v!==null&&v.runFenceToken===i.fenceToken&&["completed","failed","requires_action"].includes(v.status)){await u.purgeRun(i.runId,i.fenceToken);return}}let w=$?ijf(d.idleTimeoutMs):d instanceof Error?d.message:String(d),h=$?"liveness":"projection";if(r3i(i.runId,l),await u.markRunFailed(i.runId,l,w,h))await u.recordFailed({runId:i.runId,orgId:l,distinctId:c,reason:w,kind:h});throw d}}async function tjf(i,u){let t=await u.resolveRun(i.runId);if(!t)return{skip:"missing"};if(Nfu({status:t.status,runFenceToken:t.runFenceToken,fenceToken:i.fenceToken}))return{skip:"stale",row:t};if(t.version!==2)return{skip:"legacy-v1",row:t};return{row:t}}var Ofu=null,ujf;var yfu=g(()=>{oT0();fB0();V3i();cB0();EB0();gfu();ujf=new Dfu});function nB0(i,u){switch(i.type){case"START":{let t={type:"RUN_STARTED",taskId:i.taskId,orgId:i.orgId,userId:i.userId,abortController:i.abortController,runConfig:i.runConfig,podId:i.podId,messageId:i.messageId};if(u?.status.tag==="running")return[{type:"PREVIOUS_RUN_ABORTED",taskId:i.taskId,orgId:u.orgId},t];return[t]}case"STEP_DONE":{if(u?.status.tag!=="running")return[];return[{type:"STEP_COMPLETED",taskId:i.taskId,orgId:u.orgId,stepCount:u.status.stepCount+1}]}case"FINISH":{if(u==null||u.status.tag!=="running")return[];let{stepCount:t}=u.status;if(i.threadStatus==="completed")return[{type:"RUN_COMPLETED",taskId:i.taskId,orgId:u.orgId,stepCount:t}];if(i.threadStatus==="requires_action")return[{type:"RUN_REQUIRES_ACTION",taskId:i.taskId,orgId:u.orgId,stepCount:t}];return[{type:"RUN_FAILED",taskId:i.taskId,orgId:u.orgId,reason:"error"}]}case"CANCEL":{if(u?.status.tag!=="running")return[];return[{type:"RUN_FAILED",taskId:i.taskId,orgId:u.orgId,reason:"cancelled"}]}case"RESUME":{if(u?.status.tag==="running")return[];return[{type:"RUN_RESUMED",taskId:i.taskId,orgId:i.orgId,userId:i.userId,abortController:i.abortController,podId:i.podId}]}case"FORCE_FAIL":{if(i.reason==="ghost")return[{type:"RUN_FAILED",taskId:i.taskId,orgId:u?.orgId??i.orgId,reason:i.reason}];if(u?.status.tag!=="running")return[];return[{type:"RUN_FAILED",taskId:i.taskId,orgId:u.orgId,reason:i.reason}]}}}function DB0(i,u,t=new Date){switch(u.type){case"RUN_STARTED":return{taskId:u.taskId,orgId:u.orgId,userId:u.userId,status:{tag:"running",abortController:u.abortController,stepCount:0,startedAt:t}};case"RUN_RESUMED":return{taskId:u.taskId,orgId:u.orgId,userId:u.userId,status:{tag:"running",abortController:u.abortController,stepCount:0,startedAt:t}};case"STEP_COMPLETED":if(i?.status.tag!=="running")return i;return{...i,status:{...i.status,stepCount:u.stepCount}};case"RUN_COMPLETED":return;case"RUN_REQUIRES_ACTION":return;case"RUN_FAILED":return;case"PREVIOUS_RUN_ABORTED":return}}async function gB0(i,u,t,f){let{storage:l,sseHub:c}=f,E=await l.get(i,u);c.emit(u,Jh(i,t,{virtualMcpId:E?.virtual_mcp_id??void 0,createdBy:E?.created_by,triggerId:E?.trigger_id,title:E?.title,branch:E?.branch??null,createdAt:E?.created_at,updatedAt:E?.updated_at})),c.emit(u,Cq(i,t))}async function ljf(i,u){let{storage:t,sseHub:f}=u;switch(i.type){case"RUN_STARTED":{await t.update(i.taskId,i.orgId,{status:"in_progress",run_config:i.runConfig??null,run_started_at:new Date().toISOString(),last_progress_at:null,failure_reason:null,failure_kind:null});let l=await t.get(i.taskId,i.orgId);f.emit(i.orgId,Jh(i.taskId,"in_progress",{virtualMcpId:l?.virtual_mcp_id??void 0,createdBy:l?.created_by,triggerId:l?.trigger_id,title:l?.title,branch:l?.branch??null,createdAt:l?.created_at,updatedAt:l?.updated_at,messageId:i.messageId}));return}case"RUN_RESUMED":{await t.update(i.taskId,i.orgId,{run_started_at:new Date().toISOString()});let l=await t.get(i.taskId,i.orgId);f.emit(i.orgId,Jh(i.taskId,"in_progress",{virtualMcpId:l?.virtual_mcp_id??void 0,createdBy:l?.created_by,triggerId:l?.trigger_id,title:l?.title,branch:l?.branch??null,createdAt:l?.created_at,updatedAt:l?.updated_at}));return}case"STEP_COMPLETED":f.emit(i.orgId,T6i(i.taskId,i.stepCount));return;case"RUN_COMPLETED":await gB0(i.taskId,i.orgId,"completed",u);return;case"RUN_REQUIRES_ACTION":await gB0(i.taskId,i.orgId,"requires_action",u);return;case"RUN_FAILED":{if(i.reason==="ghost"){if(!await t.forceFailIfInProgress(i.taskId,i.orgId))return;await t.update(i.taskId,i.orgId,{run_config:null,run_started_at:null})}else await t.update(i.taskId,i.orgId,{status:"failed",run_config:null,run_started_at:null,...i.reason==="reaped"?{failure_reason:fjf,failure_kind:"stall"}:{}});let l=await t.get(i.taskId,i.orgId);f.emit(i.orgId,Jh(i.taskId,"failed",{virtualMcpId:l?.virtual_mcp_id??void 0,createdBy:l?.created_by,triggerId:l?.trigger_id,title:l?.title,branch:l?.branch??null,createdAt:l?.created_at,updatedAt:l?.updated_at})),f.emit(i.orgId,Cq(i.taskId,"failed"));return}case"PREVIOUS_RUN_ABORTED":return}}async function OB0(i,u){for(let{event:t}of i)await ljf(t,u)}var fjf="Run stalled \u2014 no progress within the idle timeout window";var NB0=g(()=>{ff()});function yB0(i){return i.now-i.lastProgressAt>i.idleTimeoutMs}function ZB0(i){return Math.max(i.persistedLastProgressAt??Number.NEGATIVE_INFINITY,i.currentRunStartedAt)}class Tfu{deps;clock;states=new Map;reaperTimer=null;constructor(i,u=()=>new Date){this.deps=i;this.clock=u;this.reaperTimer=setInterval(()=>{this.reapStaleRuns().catch((t)=>{console.error("[RunRegistry] Reaper sweep failed",t)})},cjf)}async execute(i){let u=this.dispatch(i);return await this.react(u),u}dispatch(i){let u=this.states.get(i.taskId),t=nB0(i,u),f=[];for(let l of t){let c=this.states.get(l.taskId);if(l.type==="PREVIOUS_RUN_ABORTED"||l.type==="RUN_FAILED"){if(c?.status.tag==="running")c.status.abortController.abort()}let E=DB0(c,l,this.clock());if(E===void 0)this.states.delete(l.taskId);else this.states.set(l.taskId,E);if(f.push({event:l,state:E}),Ejf.has(l.type))TB0().add(1,{"org.id":l.orgId});else if(djf.has(l.type)&&c?.status.tag==="running")TB0().add(-1,{"org.id":l.orgId})}return f}react(i){return OB0(i,this.deps)}getAbortSignal(i){let u=this.states.get(i);if(u?.status.tag==="running")return u.status.abortController.signal;return null}isRunning(i){return this.states.get(i)?.status.tag==="running"}async stopAll(){for(let[,i]of this.states)if(i.status.tag==="running")i.status.abortController.abort();this.states.clear()}dispose(){if(this.reaperTimer)clearInterval(this.reaperTimer),this.reaperTimer=null}async reapStaleRuns(){let i=this.clock().getTime(),u=[...this.states].filter(([,t])=>t.status.tag==="running");for(let[t,f]of u){if(this.states.get(t)?.status.tag!=="running")continue;let c;try{let d=await this.deps.storage.getProgress(t,f.orgId);c=ZB0({persistedLastProgressAt:d?.lastProgressAt??null,currentRunStartedAt:f.status.startedAt.getTime()})}catch(d){console.warn(`[RunRegistry] Reaper progress read failed for ${t}; skipping`,d);continue}if(!yB0({lastProgressAt:c,now:i,idleTimeoutMs:a3i}))continue;let E=await this.deps.storage.get(t,f.orgId).catch(()=>null);if(E&&E.status!=="in_progress"){let d=this.states.get(t);if(d?.status.tag==="running")d.status.abortController.abort();this.states.delete(t);continue}console.warn(`[RunRegistry] Reaping stuck run for thread ${t} (idle > ${a3i/60000}m) ...`),$jf().add(1,{"org.id":f.orgId,reason:"idle_timeout"}),await this.execute({type:"FORCE_FAIL",taskId:t,reason:"reaped"}).catch((d)=>{console.error("[RunRegistry] Reaper execute failed",d)})}}}var cjf=300000,Zfu,a3i,Ejf,djf,BB0=(i)=>{let u;return()=>u??=i()},TB0,$jf;var Bfu=g(()=>{NB0();kl();Zfu=Number(process.env.RUN_IDLE_TIMEOUT_MS),a3i=Number.isFinite(Zfu)&&Zfu>0?Zfu:600000,Ejf=new Set(["RUN_STARTED","RUN_RESUMED"]),djf=new Set(["RUN_COMPLETED","RUN_FAILED","RUN_REQUIRES_ACTION","PREVIOUS_RUN_ABORTED"]),TB0=BB0(()=>Tt.createUpDownCounter("decopilot.stream.inflight",{description:"Number of in-flight decopilot stream requests",unit:"{requests}"})),$jf=BB0(()=>Tt.createCounter("decopilot.run.reaped",{description:"Number of decopilot runs force-failed by the progress-based reaper",unit:"{runs}"}))});async function FB0(i){let{runId:u}=i,t=hB0(),f=await t.resolveRun(u),l=i.fenceToken??f?.runFenceToken;if(!f||f.version!==2||l==null)return;if(Nfu({status:f.status,runFenceToken:f.runFenceToken,fenceToken:l}))return;if(!t.getJetStream())throw Error("JetStream unavailable for consume step");await vB0({runId:u,fenceToken:l,messageId:i.messageId,idleTimeoutMs:i.idleTimeoutMs??a3i},t,_B0)}var UB0=g(()=>{yfu();Bfu()});function Ffu(i){let u=Math.max(1,i),t=0,f=[];return{async acquire(){if(t<u)t++;else await new Promise((c)=>f.push(c));let l=!1;return()=>{if(l)return;l=!0;let c=f.shift();if(c)c();else t--}},get active(){return t},get pending(){return f.length}}}var wjf,IB0=()=>wjf.acquire();var Ufu=g(()=>{wjf=Ffu(Number(process.env.DECOPILOT_MAX_CONCURRENT_SUBAGENTS??4))});var Ifu,o3i,_7,PB0=()=>({active:_7.active,pending:_7.pending,max:o3i}),AB0=()=>{if(_7.active>=o3i)console.log("[hostedHarness] run parked at concurrency cap",{active:_7.active,pending:_7.pending,max:o3i});return _7.acquire()};var Pfu=g(()=>{Ufu();kl();Ifu=Number(process.env.DECOPILOT_MAX_CONCURRENT_HOSTED_RUNS),o3i=Number.isFinite(Ifu)&&Ifu>0?Ifu:3,_7=Ffu(o3i);Tt.createObservableGauge("hosted_runs.active",{description:"Hosted agent-loop runs executing on this pod",unit:"{runs}"}).addCallback((i)=>i.observe(_7.active));Tt.createObservableGauge("hosted_runs.pending",{description:"Hosted agent-loop runs parked waiting for a slot on this pod",unit:"{runs}"}).addCallback((i)=>i.observe(_7.pending))});import{DBOS as ka}from"@dbos-inc/dbos-sdk";function kfu(i){Afu=i}function xB0(){if(!Afu)throw Error("[hostedHarness] runtime not initialized \u2014 setHostedHarnessRuntime() must run before workflows fire");return Afu}async function hjf(i,u){let t=xB0(),{request:f}=i,l=u??await t.meshContextFactory(f.organizationId,f.userId);if(!l)throw Error("user membership lost mid-dispatch");if(f.runMetadata)l.metadata.runMetadata=f.runMetadata;let c=new AbortController,E=await AB0();try{await t.dispatchRunFn({...f,abortSignal:c.signal},l,t.deps)}finally{E()}}function _jf(i,u,t,f=1){let l=t instanceof Error?t.message:String(t);return{messageId:h7(i,u),errorChunk:{type:"error",errorText:l},seq:f,finalSeq:f}}function vjf(i){if(!(i instanceof Error))return;let u=i.lastAckSeq;return typeof u==="number"?u+1:void 0}async function njf(i,u){let t=xB0(),{streamBuffer:f}=t.deps,{messageId:l,errorChunk:c,seq:E,finalSeq:d}=_jf(i.runId,i.fenceToken,u,vjf(u));if(!f){console.error(`[hostedHarness] no streamBuffer configured; dropping terminal error for run=${i.runId} fence=${i.fenceToken} messageId=${l}`);return}if(!await f.publishRawChunk(i.runId,c,{fenceToken:i.fenceToken,seq:E})){console.error(`[hostedHarness] failed to publish terminal error chunk for run=${i.runId} fence=${i.fenceToken} messageId=${l}`);return}await f.publishDone(i.runId,i.fenceToken,d)}async function Djf(i){try{await ka.runStep(()=>hjf(i),{name:"runHostedHarness",retriesAllowed:!1})}catch(u){await ka.runStep(()=>njf(i,u),{name:"publishHostedHarnessFailure",retriesAllowed:!0}).catch((t)=>{console.error(`[hostedHarness] could not publish terminal error for run=${i.runId} fence=${i.fenceToken}`,t)})}}function kB0(i,u){return`decopilot-hosted:${i}:${u}`}async function GB0(i){return{workflowID:(await ka.startWorkflow(gjf,{workflowID:kB0(i.runId,i.fenceToken),queueName:In,enqueueOptions:{queuePartitionKey:i.threadId}})(i)).workflowID}}async function Gfu(i,u){await ka.cancelWorkflow(kB0(i,u))}var xfu=1,Afu=null,gjf;var Sfu=g(()=>{Pfu();gjf=ka.registerWorkflow(Djf,{name:"hostedHarnessWorkflow",maxRecoveryAttempts:1000})});import{DBOS as _Q}from"@dbos-inc/dbos-sdk";function Ojf(i){if(i.harnessId==="decopilot")return"cluster";if(i.isLinkCapable&&i.sandboxProviderKind==="user-desktop")return"sandbox";if((i.harnessId==="claude-code"||i.harnessId==="codex")&&i.sandboxProviderKind==="agent-sandbox")throw Error(`not implemented: CLI harness "${i.harnessId}" on an agent-sandbox (cloud-CLI is a planned follow-up)`);return"cluster"}function Jfu(i){jfu=i}function Njf(){if(!jfu)throw Error("[threadGate] runtime not initialized \u2014 setThreadGateRuntime() must run before workflows fire");return jfu}function yjf(i,u=y3i){let t=i.runFenceToken;if(t)return{runFenceToken:t,claimedRequest:i,shouldPersistFence:!1};let f=u();return{runFenceToken:f,claimedRequest:{...i,runFenceToken:f},shouldPersistFence:!0}}async function Zjf(i){let u=Njf(),{request:t}=i,f=t.taskId??i.threadId;if(SO0({harnessId:t.harnessId,sandboxProviderKind:t.target?.sandboxProviderKind}))await OD(u.deps.streamBuffer,f,"starting-run");let l=await u.meshContextFactory(t.organizationId,t.userId);if(!l)throw Error("user membership lost mid-dispatch");let c=u.workPublisher,E=u.prepareLinkWorkFn!=null&&c!=null,d=Ojf({isLinkCapable:E,sandboxProviderKind:t.target?.sandboxProviderKind,harnessId:t.harnessId}),$=t.taskId??i.threadId,{runFenceToken:w,claimedRequest:h,shouldPersistFence:_}=yjf(t);if(_)await l.storage.threads.setRunFence($,w);if(d==="cluster")return{runFenceToken:w,hostedEnqueue:{runId:f,fenceToken:w,threadId:i.threadId,request:h}};let v=i.timeoutMs??u.runTimeoutMs,n=new AbortController,D=v!=null?setTimeout(()=>n.abort(),v):null;try{let{taskId:O,runFenceToken:N,harnessInput:y,messagesRef:Z,sandboxConfig:T,orgSlug:B}=await u.prepareLinkWorkFn({...h,abortSignal:n.signal},l,u.deps);if(N!==w)throw Error(`prepareLinkWorkFn returned fence ${N}; expected ${w}`);let F={runId:O,threadId:t.taskId??i.threadId,orgId:t.organizationId,userId:t.userId,runFenceToken:N,harnessInput:y,...T?{sandbox:T}:{},orgSlug:B,...Z?{messagesRef:Z}:{}};try{await c.publish(t.userId,F,{signal:n.signal})}catch(P){return console.error(`[thread-gate] link work publish failed for run=${O}; marking failed`,P),await l.storage.threads.forceFailIfInProgress(O),{runFenceToken:w}}}finally{if(D!==null)clearTimeout(D)}return{runFenceToken:w}}async function Tjf(i){if(i.source!=="user-message")return;let{request:u}=i;su.capture({distinctId:u.userId,event:"chat_message_started",groups:{organization:u.organizationId},properties:{organization_id:u.organizationId,agent_id:u.agent,mode:u.mode,thread_id:u.taskId??i.threadId,credential_id:u.models.credentialId}})}async function Bjf(i,u){if(i.source!=="user-message")return;let{request:t}=i;su.capture({distinctId:t.userId,event:"chat_message_failed",groups:{organization:t.organizationId},properties:{organization_id:t.organizationId,thread_id:t.taskId??i.threadId,agent_id:t.agent,model_id:t.models.thinking.id,mode:t.mode,error_category:"setup",error_message:u}})}async function s3i(i){await _Q.runStep(()=>Tjf(i),{name:"trackMessageStarted"});let u;try{let l=i.request.target?.sandboxProviderKind!=="user-desktop";if(u=await _Q.runStep(()=>Zjf(i),{name:"dispatchRunAndWait",retriesAllowed:l}),u.hostedEnqueue)await GB0(u.hostedEnqueue)}catch(l){let c=l instanceof Error?l.message:String(l);throw await _Q.runStep(()=>Bjf(i,c),{name:"trackMessageFailed"}),l}let t=i.request.taskId??i.threadId,f="messages"in i.request?void 0:i.request.messageId;return await _Q.runStep(()=>FB0({runId:t,fenceToken:u.runFenceToken,messageId:f}),{name:"consumeRunProjection"}),{taskId:i.request.taskId??i.threadId}}async function Fjf(i){return s3i(i)}async function vQ(i,u){return{workflowID:(await _Q.startWorkflow(Ujf,{queueName:yh,enqueueOptions:{queuePartitionKey:i.threadId},workflowID:u?.workflowID})(i)).workflowID}}var Kfu=1,jfu=null,Ujf;var SB0=g(()=>{o4();wa();UB0();Sfu();Ujf=_Q.registerWorkflow(Fjf,{name:"threadGateWorkflow",maxRecoveryAttempts:1000})});var Ga=g(()=>{SB0();Sfu()});async function Xfu(i,u,t){let f;try{return await Promise.race([i.aiProviders.listModels(u,t),new Promise((c,E)=>{f=setTimeout(()=>E(Error("listModels timeout")),Ijf)})])}finally{if(f)clearTimeout(f)}}function Pjf(i,u){switch(i){case"fast":return u.chat.fast;case"smart":return u.chat.smart;case"thinking":return u.chat.thinking;case"image":return u.image;case"web_search":return u.webSearch;case"deep_research":return u.deepResearch}}function Lfu(i,u,t){let f=i.find((l)=>l.modelId===u);return{title:f?.title??t??u,providerId:f?.providerId,capabilities:f?.capabilities,limits:f?.limits??null}}async function TD(i,u){let t=i.organization?.id;if(!t)throw Error("resolveTier called without an organization");let l=(await i.storage.organizationSettings.get(t))?.simple_mode?.tiers?.[u]??null,c=await i.storage.aiProviderKeys.list({organizationId:t});if(l&&c.some((h)=>h.id===l.keyId)){let h=await Xfu(i,l.keyId,t).catch(()=>[]);return{credentialId:l.keyId,modelId:l.modelId,modelMeta:Lfu(h,l.modelId,l.title)}}if(c.length===0)throw new nQ(u);let E={};await Promise.all(c.map(async(h)=>{E[h.id]=await Xfu(i,h.id,t).catch(()=>[])}));let d=c.map((h)=>({id:h.id,providerId:h.providerId,label:h.label,presetId:h.presetId,createdBy:h.createdBy,createdAt:h.createdAt})),$=Gri(d,E),w=Pjf(u,$);if(!w)throw new nQ(u);return{credentialId:w.keyId,modelId:w.modelId,modelMeta:Lfu(E[w.keyId]??[],w.modelId,w.title)}}async function jB0(i,u,t){let f=i.organization?.id;if(!f)throw Error("resolveSpecificModel called without an organization");let l=await Xfu(i,u,f).catch(()=>[]);return{credentialId:u,modelId:t,modelMeta:Lfu(l,t)}}async function x3(i,u){try{return await TD(i,u)}catch(t){if(t instanceof nQ)return null;return console.warn(`[resolveTier] tier "${u}" resolution failed:`,t),null}}var nQ,Ijf=5000;var Sa=g(()=>{ff();nQ=class nQ extends Error{tier;constructor(i){super(`No model available for tier "${i}". Connect a provider or configure the tier in organization settings.`);this.tier=i;this.name="TierUnavailableError"}}});import{z as Ajf}from"zod";function BD(i){return i==="cluster"?"agent-sandbox":i}function Wfu(i){return`${i.userId}:${i.projectRef}`}var xjf;var p3i=g(()=>{xjf=Ajf.enum(["agent-sandbox","user-desktop"])});class ihi{map=new Map;async run(i,u){let t=this.map.get(i);if(t)return t;let f=u();this.map.set(i,f);try{return await f}finally{this.map.delete(i)}}}function uhi(i,u,t,f){if(!i)return f(null);if(!i.withLock)return f(i);return i.withLock(u,t,f)}import{createHash as kjf}from"crypto";function Sjf(i,u=16){return kjf("sha256").update(Wfu(i)).digest("hex").slice(0,u)}function v7(i,u){let t=Sjf(i),f=jjf(u);return f?`${f}-${t}`:`s-${t}`}function jjf(i){if(!i)return"";return(i.split("/").pop()??"").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,Gjf).replace(/-+$/g,"")}var Gjf=24;var KB0=g(()=>{p3i()});function thi(i,u){let t=i.replace(/\/+$/,"");if(t.includes("{handle}"))return`${t.replace("{handle}",u)}/`;try{let f=new URL(t);return f.hostname=`${u}.${f.hostname}`,`${f.toString()}/`}catch{return`${t}/${u}/`}}function Yfu(i){let u=i.repo,t=u?{repository:{cloneUrl:u.cloneUrl,repoName:u.displayName??Kjf(u.cloneUrl),...u.branch?{branch:u.branch}:{}},identity:{userName:u.userName,userEmail:u.userEmail}}:void 0,f=i.tenant,l=fh({userName:f?.userName,userEmail:f?.userEmail})??void 0,c=i.packageManager?{name:i.packageManager.name,...i.packageManager.path?{path:i.packageManager.path}:{}}:void 0,E=c?{packageManager:c,runtime:i.runtime,...i.port!==void 0?{port:i.port}:{}}:void 0;if(!t&&!E&&!l)return null;return{...t?{git:t}:{},...l?{operator:l}:{},...E?{application:E}:{}}}function Kjf(i){try{let u=new URL(i);return u.pathname.replace(/^\/+/,"").replace(/\.git$/,"")||u.hostname}catch{return i}}var JB0=g(()=>{ili()});function Jjf(i){try{return new URL(i).username.length>0}catch{return!1}}function zfu(i){let u=i.repo?.cloneUrl;if(!u||!Jjf(u))return null;return{git:{repository:{cloneUrl:u}}}}var fhi=g(()=>{KB0();JB0()});function FD(i){if("threadId"in i){if(!i.threadId)throw Error("composeSandboxRef: threadId required");return`thread:${i.threadId}`}if(!i.orgId||!i.virtualMcpId||!i.branch)throw Error("composeSandboxRef: orgId, virtualMcpId and branch are all required for agent refs");return`agent:${i.orgId}:${i.virtualMcpId}:${i.branch}`}function Xjf(i){return(typeof i.timeout==="number"&&i.timeout>0?Math.min(i.timeout,120000):30000)+15000}function Ljf(i,u){if(i.aborted)return u.catch(()=>{}),Promise.reject(i.reason??Error("aborted"));return new Promise((t,f)=>{let l=()=>{u.catch(()=>{}),f(i.reason??Error("aborted"))};i.addEventListener("abort",l,{once:!0}),u.then(t,f).finally(()=>{i.removeEventListener("abort",l)})})}async function Wjf(i,u,t,f,l="POST",c){let E=c?.timeoutMs??Xjf(f??{}),d=AbortSignal.timeout(E),$=c?.signal?AbortSignal.any([c.signal,d]):d,w,h;try{let v={method:l,headers:new Headers({"content-type":"application/json"}),body:null,signal:$};if(l!=="GET"&&f!==null)v.body=JSON.stringify(f);({res:w,rawText:h}=await Ljf($,(async()=>{let n=await i.proxyDaemonRequest(u,t,v);return{res:n,rawText:await n.text()}})()))}catch(v){if(c?.signal?.aborted)throw v;if(d.aborted)throw Error(`Sandbox ${l} ${t} timed out after ${Math.round(E/1000)}s \u2014 the sandbox may be overloaded or its filesystem stalled. Retry, or use a smaller operation.`);throw new DQ(v)}let _;try{_=JSON.parse(h)}catch{console.error("[sandbox-fs-hooks] Failed to parse JSON response runner=%s path=%s status=%d rawText=%s",i.kind,t,w.status,h.slice(0,2000));let v=w.status>=500?" (server error)":w.status===0?" (no response)":"";throw Error(`Daemon ${t} returned invalid JSON (HTTP ${w.status}${v}): ${h.slice(0,800)}`)}if(!w.ok){console.error("[sandbox-fs-hooks] Non-OK response runner=%s path=%s status=%d body=%s",i.kind,t,w.status,h.slice(0,2000));let v=_.error??`Daemon ${t} failed (${w.status})`;if(w.status===404&&v==="sandbox not found")throw new DQ(Error(v));throw Error(v)}return _}function Yjf(i){let u=[];for(let t of i.split(`
|
|
86461
|
+
`).replace(/https?:\/\/[^\s)>\]]+/g,"").includes("?")?"requires_action":"completed";if(i==="tool-calls"){let t=u.some((l)=>l.type==="tool-user_ask"&&l.state==="input-available"),f=u.some((l)=>l.state==="approval-requested");return t||f?"requires_action":"completed"}return"failed"}function h7(i,u){return`error-${i}:${u}`}function e3i(i){return{id:i.id,role:i.role,parts:i.parts,metadata:i.metadata??void 0}}var gfu=()=>{};function ijf(i){return`liveness: no stream events for ${Math.round(i/60000)}m`}function Nfu(i){return i.runFenceToken!==null&&i.runFenceToken!==i.fenceToken}function $B0(i){Ofu=i}function wB0(){if(!Ofu)throw Error("[projector-workflow] runtime not initialized \u2014 setProjectorWorkflowRuntime() must run before workflows fire");return Ofu}function hB0(){return wB0()}async function _B0(i,u,t){let f=wB0(),l=f.getJetStream();if(!l)throw Error("JetStream unavailable");let c=(await f.messageParts.loadWindow(i.runId,{limit:500})).messages.map(e3i);return{chunkCount:0,attempts:1,outcome:await aT0({chunkStream:dB0(await tB0({js:l,runId:i.runId,fenceToken:i.fenceToken,idleTimeoutMs:i.idleTimeoutMs}),i.runId,ujf,()=>{f.bumpProgress({runId:i.runId,orgId:u}).catch(()=>{})}),persistence:await lB0({messageParts:f.messageParts,orgId:u,runId:i.runId,requestMessageId:i.messageId,replaceFinal:!0}),originalMessages:c,errorMessageId:h7(i.runId,i.fenceToken),title:{threadId:i.runId,currentThreadTitle:t,persistTitle:async(d,$)=>{await f.persistTitle(i.runId,u,$),await f.onTitleUpdated({runId:i.runId,orgId:u,title:$})}}})}}async function vB0(i,u,t){let f=await tjf(i,u);if("skip"in f)return;let l=f.row.orgId,c=f.row.createdBy??i.runId,E=f.row.title;try{let{outcome:d}=await t(i,l,E),$=d?.failed?"failed":d?.finishReason==null?"completed":m3i(d.finishReason,d.finalParts);if($==="failed"){let w=d?.finishReason?`harness reported an error: ${d.finishReason}`:"harness reported an error";if(r3i(i.runId,l),await u.markRunFailed(i.runId,l,w,"harness"))await u.recordFailed({runId:i.runId,orgId:l,distinctId:c,reason:w,kind:"harness"})}else if($==="requires_action")await u.markRunRequiresAction(i.runId,l),await u.clearSynthesizedError(i.runId,i.fenceToken);else{if(await u.completeRunIfNotCompleted(i.runId,l))await u.recordCompleted({runId:i.runId,orgId:l,distinctId:c,usage:d?.usage??{inputTokens:0,outputTokens:0,totalTokens:0}});await u.clearSynthesizedError(i.runId,i.fenceToken)}await u.purgeRun(i.runId,i.fenceToken)}catch(d){if(d instanceof Aa){let v=`stream truncated before projection could replay it: ${d.message}`;if(r3i(i.runId,l),await u.markRunFailed(i.runId,l,v,"projection"))await u.recordFailed({runId:i.runId,orgId:l,distinctId:c,reason:v,kind:"projection"});await u.purgeRun(i.runId,i.fenceToken);return}let $=d instanceof M3i;if($){let v=await u.resolveRun(i.runId).catch(()=>null);if(v!==null&&v.runFenceToken===i.fenceToken&&["completed","failed","requires_action"].includes(v.status)){await u.purgeRun(i.runId,i.fenceToken);return}}let w=$?ijf(d.idleTimeoutMs):d instanceof Error?d.message:String(d),h=$?"liveness":"projection";if(r3i(i.runId,l),await u.markRunFailed(i.runId,l,w,h))await u.recordFailed({runId:i.runId,orgId:l,distinctId:c,reason:w,kind:h});throw d}}async function tjf(i,u){let t=await u.resolveRun(i.runId);if(!t)return{skip:"missing"};if(Nfu({status:t.status,runFenceToken:t.runFenceToken,fenceToken:i.fenceToken}))return{skip:"stale",row:t};if(t.version!==2)return{skip:"legacy-v1",row:t};return{row:t}}var Ofu=null,ujf;var yfu=g(()=>{oT0();fB0();V3i();cB0();EB0();gfu();ujf=new Dfu});function nB0(i,u){switch(i.type){case"START":{let t={type:"RUN_STARTED",taskId:i.taskId,orgId:i.orgId,userId:i.userId,abortController:i.abortController,runConfig:i.runConfig,podId:i.podId,messageId:i.messageId};if(u?.status.tag==="running")return[{type:"PREVIOUS_RUN_ABORTED",taskId:i.taskId,orgId:u.orgId},t];return[t]}case"STEP_DONE":{if(u?.status.tag!=="running")return[];return[{type:"STEP_COMPLETED",taskId:i.taskId,orgId:u.orgId,stepCount:u.status.stepCount+1}]}case"FINISH":{if(u==null||u.status.tag!=="running")return[];let{stepCount:t}=u.status;if(i.threadStatus==="completed")return[{type:"RUN_COMPLETED",taskId:i.taskId,orgId:u.orgId,stepCount:t}];if(i.threadStatus==="requires_action")return[{type:"RUN_REQUIRES_ACTION",taskId:i.taskId,orgId:u.orgId,stepCount:t}];return[{type:"RUN_FAILED",taskId:i.taskId,orgId:u.orgId,reason:"error"}]}case"CANCEL":{if(u?.status.tag!=="running")return[];return[{type:"RUN_FAILED",taskId:i.taskId,orgId:u.orgId,reason:"cancelled"}]}case"RESUME":{if(u?.status.tag==="running")return[];return[{type:"RUN_RESUMED",taskId:i.taskId,orgId:i.orgId,userId:i.userId,abortController:i.abortController,podId:i.podId}]}case"FORCE_FAIL":{if(i.reason==="ghost")return[{type:"RUN_FAILED",taskId:i.taskId,orgId:u?.orgId??i.orgId,reason:i.reason}];if(u?.status.tag!=="running")return[];return[{type:"RUN_FAILED",taskId:i.taskId,orgId:u.orgId,reason:i.reason}]}}}function DB0(i,u,t=new Date){switch(u.type){case"RUN_STARTED":return{taskId:u.taskId,orgId:u.orgId,userId:u.userId,status:{tag:"running",abortController:u.abortController,stepCount:0,startedAt:t}};case"RUN_RESUMED":return{taskId:u.taskId,orgId:u.orgId,userId:u.userId,status:{tag:"running",abortController:u.abortController,stepCount:0,startedAt:t}};case"STEP_COMPLETED":if(i?.status.tag!=="running")return i;return{...i,status:{...i.status,stepCount:u.stepCount}};case"RUN_COMPLETED":return;case"RUN_REQUIRES_ACTION":return;case"RUN_FAILED":return;case"PREVIOUS_RUN_ABORTED":return}}async function gB0(i,u,t,f){let{storage:l,sseHub:c}=f,E=await l.get(i,u);c.emit(u,Jh(i,t,{virtualMcpId:E?.virtual_mcp_id??void 0,createdBy:E?.created_by,triggerId:E?.trigger_id,title:E?.title,branch:E?.branch??null,createdAt:E?.created_at,updatedAt:E?.updated_at})),c.emit(u,Cq(i,t))}async function ljf(i,u){let{storage:t,sseHub:f}=u;switch(i.type){case"RUN_STARTED":{await t.update(i.taskId,i.orgId,{status:"in_progress",run_config:i.runConfig??null,run_started_at:new Date().toISOString(),last_progress_at:null,failure_reason:null,failure_kind:null});let l=await t.get(i.taskId,i.orgId);f.emit(i.orgId,Jh(i.taskId,"in_progress",{virtualMcpId:l?.virtual_mcp_id??void 0,createdBy:l?.created_by,triggerId:l?.trigger_id,title:l?.title,branch:l?.branch??null,createdAt:l?.created_at,updatedAt:l?.updated_at,messageId:i.messageId}));return}case"RUN_RESUMED":{await t.update(i.taskId,i.orgId,{run_started_at:new Date().toISOString()});let l=await t.get(i.taskId,i.orgId);f.emit(i.orgId,Jh(i.taskId,"in_progress",{virtualMcpId:l?.virtual_mcp_id??void 0,createdBy:l?.created_by,triggerId:l?.trigger_id,title:l?.title,branch:l?.branch??null,createdAt:l?.created_at,updatedAt:l?.updated_at}));return}case"STEP_COMPLETED":f.emit(i.orgId,T6i(i.taskId,i.stepCount));return;case"RUN_COMPLETED":await gB0(i.taskId,i.orgId,"completed",u);return;case"RUN_REQUIRES_ACTION":await gB0(i.taskId,i.orgId,"requires_action",u);return;case"RUN_FAILED":{if(i.reason==="ghost"){if(!await t.forceFailIfInProgress(i.taskId,i.orgId))return;await t.update(i.taskId,i.orgId,{run_config:null,run_started_at:null})}else await t.update(i.taskId,i.orgId,{status:"failed",run_config:null,run_started_at:null,...i.reason==="reaped"?{failure_reason:fjf,failure_kind:"stall"}:{}});let l=await t.get(i.taskId,i.orgId);f.emit(i.orgId,Jh(i.taskId,"failed",{virtualMcpId:l?.virtual_mcp_id??void 0,createdBy:l?.created_by,triggerId:l?.trigger_id,title:l?.title,branch:l?.branch??null,createdAt:l?.created_at,updatedAt:l?.updated_at})),f.emit(i.orgId,Cq(i.taskId,"failed"));return}case"PREVIOUS_RUN_ABORTED":return}}async function OB0(i,u){for(let{event:t}of i)await ljf(t,u)}var fjf="Run stalled \u2014 no progress within the idle timeout window";var NB0=g(()=>{ff()});function yB0(i){return i.now-i.lastProgressAt>i.idleTimeoutMs}function ZB0(i){return Math.max(i.persistedLastProgressAt??Number.NEGATIVE_INFINITY,i.currentRunStartedAt)}class Tfu{deps;clock;states=new Map;reaperTimer=null;constructor(i,u=()=>new Date){this.deps=i;this.clock=u;this.reaperTimer=setInterval(()=>{this.reapStaleRuns().catch((t)=>{console.error("[RunRegistry] Reaper sweep failed",t)})},cjf)}async execute(i){let u=this.dispatch(i);return await this.react(u),u}dispatch(i){let u=this.states.get(i.taskId),t=nB0(i,u),f=[];for(let l of t){let c=this.states.get(l.taskId);if(l.type==="PREVIOUS_RUN_ABORTED"||l.type==="RUN_FAILED"){if(c?.status.tag==="running")c.status.abortController.abort()}let E=DB0(c,l,this.clock());if(E===void 0)this.states.delete(l.taskId);else this.states.set(l.taskId,E);if(f.push({event:l,state:E}),Ejf.has(l.type))TB0().add(1,{"org.id":l.orgId});else if(djf.has(l.type)&&c?.status.tag==="running")TB0().add(-1,{"org.id":l.orgId})}return f}react(i){return OB0(i,this.deps)}getAbortSignal(i){let u=this.states.get(i);if(u?.status.tag==="running")return u.status.abortController.signal;return null}isRunning(i){return this.states.get(i)?.status.tag==="running"}async stopAll(){for(let[,i]of this.states)if(i.status.tag==="running")i.status.abortController.abort();this.states.clear()}dispose(){if(this.reaperTimer)clearInterval(this.reaperTimer),this.reaperTimer=null}async reapStaleRuns(){let i=this.clock().getTime(),u=[...this.states].filter(([,t])=>t.status.tag==="running");for(let[t,f]of u){if(this.states.get(t)?.status.tag!=="running")continue;let c;try{let d=await this.deps.storage.getProgress(t,f.orgId);c=ZB0({persistedLastProgressAt:d?.lastProgressAt??null,currentRunStartedAt:f.status.startedAt.getTime()})}catch(d){console.warn(`[RunRegistry] Reaper progress read failed for ${t}; skipping`,d);continue}if(!yB0({lastProgressAt:c,now:i,idleTimeoutMs:a3i}))continue;let E=await this.deps.storage.get(t,f.orgId).catch(()=>null);if(E&&E.status!=="in_progress"){let d=this.states.get(t);if(d?.status.tag==="running")d.status.abortController.abort();this.states.delete(t);continue}console.warn(`[RunRegistry] Reaping stuck run for thread ${t} (idle > ${a3i/60000}m) ...`),$jf().add(1,{"org.id":f.orgId,reason:"idle_timeout"}),await this.execute({type:"FORCE_FAIL",taskId:t,reason:"reaped"}).catch((d)=>{console.error("[RunRegistry] Reaper execute failed",d)})}}}var cjf=300000,Zfu,a3i,Ejf,djf,BB0=(i)=>{let u;return()=>u??=i()},TB0,$jf;var Bfu=g(()=>{NB0();kl();Zfu=Number(process.env.RUN_IDLE_TIMEOUT_MS),a3i=Number.isFinite(Zfu)&&Zfu>0?Zfu:600000,Ejf=new Set(["RUN_STARTED","RUN_RESUMED"]),djf=new Set(["RUN_COMPLETED","RUN_FAILED","RUN_REQUIRES_ACTION","PREVIOUS_RUN_ABORTED"]),TB0=BB0(()=>Tt.createUpDownCounter("decopilot.stream.inflight",{description:"Number of in-flight decopilot stream requests",unit:"{requests}"})),$jf=BB0(()=>Tt.createCounter("decopilot.run.reaped",{description:"Number of decopilot runs force-failed by the progress-based reaper",unit:"{runs}"}))});async function FB0(i){let{runId:u}=i,t=hB0(),f=await t.resolveRun(u),l=i.fenceToken??f?.runFenceToken;if(!f||f.version!==2||l==null)return;if(Nfu({status:f.status,runFenceToken:f.runFenceToken,fenceToken:l}))return;if(!t.getJetStream())throw Error("JetStream unavailable for consume step");await vB0({runId:u,fenceToken:l,messageId:i.messageId,idleTimeoutMs:i.idleTimeoutMs??a3i},t,_B0)}var UB0=g(()=>{yfu();Bfu()});function Ffu(i){let u=Number.isFinite(i)?Math.max(1,i):1,t=0,f=[];return{async acquire(){if(t<u)t++;else await new Promise((c)=>f.push(c));let l=!1;return()=>{if(l)return;l=!0;let c=f.shift();if(c)c();else t--}},get active(){return t},get pending(){return f.length}}}var wjf,IB0=()=>wjf.acquire();var Ufu=g(()=>{wjf=Ffu(Number(process.env.DECOPILOT_MAX_CONCURRENT_SUBAGENTS??4))});var Ifu,o3i,_7,PB0=()=>({active:_7.active,pending:_7.pending,max:o3i}),AB0=()=>{if(_7.active>=o3i)console.log("[hostedHarness] run parked at concurrency cap",{active:_7.active,pending:_7.pending,max:o3i});return _7.acquire()};var Pfu=g(()=>{Ufu();kl();Ifu=Number(process.env.DECOPILOT_MAX_CONCURRENT_HOSTED_RUNS),o3i=Number.isFinite(Ifu)&&Ifu>0?Ifu:3,_7=Ffu(o3i);Tt.createObservableGauge("hosted_runs.active",{description:"Hosted agent-loop runs executing on this pod",unit:"{runs}"}).addCallback((i)=>i.observe(_7.active));Tt.createObservableGauge("hosted_runs.pending",{description:"Hosted agent-loop runs parked waiting for a slot on this pod",unit:"{runs}"}).addCallback((i)=>i.observe(_7.pending))});import{DBOS as ka}from"@dbos-inc/dbos-sdk";function kfu(i){Afu=i}function xB0(){if(!Afu)throw Error("[hostedHarness] runtime not initialized \u2014 setHostedHarnessRuntime() must run before workflows fire");return Afu}async function hjf(i,u){let t=xB0(),{request:f}=i,l=u??await t.meshContextFactory(f.organizationId,f.userId);if(!l)throw Error("user membership lost mid-dispatch");if(f.runMetadata)l.metadata.runMetadata=f.runMetadata;let c=new AbortController,E=await AB0();try{await t.dispatchRunFn({...f,abortSignal:c.signal},l,t.deps)}finally{E()}}function _jf(i,u,t,f=1){let l=t instanceof Error?t.message:String(t);return{messageId:h7(i,u),errorChunk:{type:"error",errorText:l},seq:f,finalSeq:f}}function vjf(i){if(!(i instanceof Error))return;let u=i.lastAckSeq;return typeof u==="number"?u+1:void 0}async function njf(i,u){let t=xB0(),{streamBuffer:f}=t.deps,{messageId:l,errorChunk:c,seq:E,finalSeq:d}=_jf(i.runId,i.fenceToken,u,vjf(u));if(!f){console.error(`[hostedHarness] no streamBuffer configured; dropping terminal error for run=${i.runId} fence=${i.fenceToken} messageId=${l}`);return}if(!await f.publishRawChunk(i.runId,c,{fenceToken:i.fenceToken,seq:E})){console.error(`[hostedHarness] failed to publish terminal error chunk for run=${i.runId} fence=${i.fenceToken} messageId=${l}`);return}await f.publishDone(i.runId,i.fenceToken,d)}async function Djf(i){try{await ka.runStep(()=>hjf(i),{name:"runHostedHarness",retriesAllowed:!1})}catch(u){await ka.runStep(()=>njf(i,u),{name:"publishHostedHarnessFailure",retriesAllowed:!0}).catch((t)=>{console.error(`[hostedHarness] could not publish terminal error for run=${i.runId} fence=${i.fenceToken}`,t)})}}function kB0(i,u){return`decopilot-hosted:${i}:${u}`}async function GB0(i){return{workflowID:(await ka.startWorkflow(gjf,{workflowID:kB0(i.runId,i.fenceToken),queueName:In,enqueueOptions:{queuePartitionKey:i.threadId}})(i)).workflowID}}async function Gfu(i,u){await ka.cancelWorkflow(kB0(i,u))}var xfu=1,Afu=null,gjf;var Sfu=g(()=>{Pfu();gjf=ka.registerWorkflow(Djf,{name:"hostedHarnessWorkflow",maxRecoveryAttempts:1000})});import{DBOS as _Q}from"@dbos-inc/dbos-sdk";function Ojf(i){if(i.harnessId==="decopilot")return"cluster";if(i.isLinkCapable&&i.sandboxProviderKind==="user-desktop")return"sandbox";if((i.harnessId==="claude-code"||i.harnessId==="codex")&&i.sandboxProviderKind==="agent-sandbox")throw Error(`not implemented: CLI harness "${i.harnessId}" on an agent-sandbox (cloud-CLI is a planned follow-up)`);return"cluster"}function Jfu(i){jfu=i}function Njf(){if(!jfu)throw Error("[threadGate] runtime not initialized \u2014 setThreadGateRuntime() must run before workflows fire");return jfu}function yjf(i,u=y3i){let t=i.runFenceToken;if(t)return{runFenceToken:t,claimedRequest:i,shouldPersistFence:!1};let f=u();return{runFenceToken:f,claimedRequest:{...i,runFenceToken:f},shouldPersistFence:!0}}async function Zjf(i){let u=Njf(),{request:t}=i,f=t.taskId??i.threadId;if(SO0({harnessId:t.harnessId,sandboxProviderKind:t.target?.sandboxProviderKind}))await OD(u.deps.streamBuffer,f,"starting-run");let l=await u.meshContextFactory(t.organizationId,t.userId);if(!l)throw Error("user membership lost mid-dispatch");let c=u.workPublisher,E=u.prepareLinkWorkFn!=null&&c!=null,d=Ojf({isLinkCapable:E,sandboxProviderKind:t.target?.sandboxProviderKind,harnessId:t.harnessId}),$=t.taskId??i.threadId,{runFenceToken:w,claimedRequest:h,shouldPersistFence:_}=yjf(t);if(_)await l.storage.threads.setRunFence($,w);if(d==="cluster")return{runFenceToken:w,hostedEnqueue:{runId:f,fenceToken:w,threadId:i.threadId,request:h}};let v=i.timeoutMs??u.runTimeoutMs,n=new AbortController,D=v!=null?setTimeout(()=>n.abort(),v):null;try{let{taskId:O,runFenceToken:N,harnessInput:y,messagesRef:Z,sandboxConfig:T,orgSlug:B}=await u.prepareLinkWorkFn({...h,abortSignal:n.signal},l,u.deps);if(N!==w)throw Error(`prepareLinkWorkFn returned fence ${N}; expected ${w}`);let F={runId:O,threadId:t.taskId??i.threadId,orgId:t.organizationId,userId:t.userId,runFenceToken:N,harnessInput:y,...T?{sandbox:T}:{},orgSlug:B,...Z?{messagesRef:Z}:{}};try{await c.publish(t.userId,F,{signal:n.signal})}catch(P){return console.error(`[thread-gate] link work publish failed for run=${O}; marking failed`,P),await l.storage.threads.forceFailIfInProgress(O),{runFenceToken:w}}}finally{if(D!==null)clearTimeout(D)}return{runFenceToken:w}}async function Tjf(i){if(i.source!=="user-message")return;let{request:u}=i;su.capture({distinctId:u.userId,event:"chat_message_started",groups:{organization:u.organizationId},properties:{organization_id:u.organizationId,agent_id:u.agent,mode:u.mode,thread_id:u.taskId??i.threadId,credential_id:u.models.credentialId}})}async function Bjf(i,u){if(i.source!=="user-message")return;let{request:t}=i;su.capture({distinctId:t.userId,event:"chat_message_failed",groups:{organization:t.organizationId},properties:{organization_id:t.organizationId,thread_id:t.taskId??i.threadId,agent_id:t.agent,model_id:t.models.thinking.id,mode:t.mode,error_category:"setup",error_message:u}})}async function s3i(i){await _Q.runStep(()=>Tjf(i),{name:"trackMessageStarted"});let u;try{let l=i.request.target?.sandboxProviderKind!=="user-desktop";if(u=await _Q.runStep(()=>Zjf(i),{name:"dispatchRunAndWait",retriesAllowed:l}),u.hostedEnqueue)await GB0(u.hostedEnqueue)}catch(l){let c=l instanceof Error?l.message:String(l);throw await _Q.runStep(()=>Bjf(i,c),{name:"trackMessageFailed"}),l}let t=i.request.taskId??i.threadId,f="messages"in i.request?void 0:i.request.messageId;return await _Q.runStep(()=>FB0({runId:t,fenceToken:u.runFenceToken,messageId:f}),{name:"consumeRunProjection"}),{taskId:i.request.taskId??i.threadId}}async function Fjf(i){return s3i(i)}async function vQ(i,u){return{workflowID:(await _Q.startWorkflow(Ujf,{queueName:yh,enqueueOptions:{queuePartitionKey:i.threadId},workflowID:u?.workflowID})(i)).workflowID}}var Kfu=1,jfu=null,Ujf;var SB0=g(()=>{o4();wa();UB0();Sfu();Ujf=_Q.registerWorkflow(Fjf,{name:"threadGateWorkflow",maxRecoveryAttempts:1000})});var Ga=g(()=>{SB0();Sfu()});async function Xfu(i,u,t){let f;try{return await Promise.race([i.aiProviders.listModels(u,t),new Promise((c,E)=>{f=setTimeout(()=>E(Error("listModels timeout")),Ijf)})])}finally{if(f)clearTimeout(f)}}function Pjf(i,u){switch(i){case"fast":return u.chat.fast;case"smart":return u.chat.smart;case"thinking":return u.chat.thinking;case"image":return u.image;case"web_search":return u.webSearch;case"deep_research":return u.deepResearch}}function Lfu(i,u,t){let f=i.find((l)=>l.modelId===u);return{title:f?.title??t??u,providerId:f?.providerId,capabilities:f?.capabilities,limits:f?.limits??null}}async function TD(i,u){let t=i.organization?.id;if(!t)throw Error("resolveTier called without an organization");let l=(await i.storage.organizationSettings.get(t))?.simple_mode?.tiers?.[u]??null,c=await i.storage.aiProviderKeys.list({organizationId:t});if(l&&c.some((h)=>h.id===l.keyId)){let h=await Xfu(i,l.keyId,t).catch(()=>[]);return{credentialId:l.keyId,modelId:l.modelId,modelMeta:Lfu(h,l.modelId,l.title)}}if(c.length===0)throw new nQ(u);let E={};await Promise.all(c.map(async(h)=>{E[h.id]=await Xfu(i,h.id,t).catch(()=>[])}));let d=c.map((h)=>({id:h.id,providerId:h.providerId,label:h.label,presetId:h.presetId,createdBy:h.createdBy,createdAt:h.createdAt})),$=Gri(d,E),w=Pjf(u,$);if(!w)throw new nQ(u);return{credentialId:w.keyId,modelId:w.modelId,modelMeta:Lfu(E[w.keyId]??[],w.modelId,w.title)}}async function jB0(i,u,t){let f=i.organization?.id;if(!f)throw Error("resolveSpecificModel called without an organization");let l=await Xfu(i,u,f).catch(()=>[]);return{credentialId:u,modelId:t,modelMeta:Lfu(l,t)}}async function x3(i,u){try{return await TD(i,u)}catch(t){if(t instanceof nQ)return null;return console.warn(`[resolveTier] tier "${u}" resolution failed:`,t),null}}var nQ,Ijf=5000;var Sa=g(()=>{ff();nQ=class nQ extends Error{tier;constructor(i){super(`No model available for tier "${i}". Connect a provider or configure the tier in organization settings.`);this.tier=i;this.name="TierUnavailableError"}}});import{z as Ajf}from"zod";function BD(i){return i==="cluster"?"agent-sandbox":i}function Wfu(i){return`${i.userId}:${i.projectRef}`}var xjf;var p3i=g(()=>{xjf=Ajf.enum(["agent-sandbox","user-desktop"])});class ihi{map=new Map;async run(i,u){let t=this.map.get(i);if(t)return t;let f=u();this.map.set(i,f);try{return await f}finally{this.map.delete(i)}}}function uhi(i,u,t,f){if(!i)return f(null);if(!i.withLock)return f(i);return i.withLock(u,t,f)}import{createHash as kjf}from"crypto";function Sjf(i,u=16){return kjf("sha256").update(Wfu(i)).digest("hex").slice(0,u)}function v7(i,u){let t=Sjf(i),f=jjf(u);return f?`${f}-${t}`:`s-${t}`}function jjf(i){if(!i)return"";return(i.split("/").pop()??"").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,Gjf).replace(/-+$/g,"")}var Gjf=24;var KB0=g(()=>{p3i()});function thi(i,u){let t=i.replace(/\/+$/,"");if(t.includes("{handle}"))return`${t.replace("{handle}",u)}/`;try{let f=new URL(t);return f.hostname=`${u}.${f.hostname}`,`${f.toString()}/`}catch{return`${t}/${u}/`}}function Yfu(i){let u=i.repo,t=u?{repository:{cloneUrl:u.cloneUrl,repoName:u.displayName??Kjf(u.cloneUrl),...u.branch?{branch:u.branch}:{}},identity:{userName:u.userName,userEmail:u.userEmail}}:void 0,f=i.tenant,l=fh({userName:f?.userName,userEmail:f?.userEmail})??void 0,c=i.packageManager?{name:i.packageManager.name,...i.packageManager.path?{path:i.packageManager.path}:{}}:void 0,E=c?{packageManager:c,runtime:i.runtime,...i.port!==void 0?{port:i.port}:{}}:void 0;if(!t&&!E&&!l)return null;return{...t?{git:t}:{},...l?{operator:l}:{},...E?{application:E}:{}}}function Kjf(i){try{let u=new URL(i);return u.pathname.replace(/^\/+/,"").replace(/\.git$/,"")||u.hostname}catch{return i}}var JB0=g(()=>{ili()});function Jjf(i){try{return new URL(i).username.length>0}catch{return!1}}function zfu(i){let u=i.repo?.cloneUrl;if(!u||!Jjf(u))return null;return{git:{repository:{cloneUrl:u}}}}var fhi=g(()=>{KB0();JB0()});function FD(i){if("threadId"in i){if(!i.threadId)throw Error("composeSandboxRef: threadId required");return`thread:${i.threadId}`}if(!i.orgId||!i.virtualMcpId||!i.branch)throw Error("composeSandboxRef: orgId, virtualMcpId and branch are all required for agent refs");return`agent:${i.orgId}:${i.virtualMcpId}:${i.branch}`}function Xjf(i){return(typeof i.timeout==="number"&&i.timeout>0?Math.min(i.timeout,120000):30000)+15000}function Ljf(i,u){if(i.aborted)return u.catch(()=>{}),Promise.reject(i.reason??Error("aborted"));return new Promise((t,f)=>{let l=()=>{u.catch(()=>{}),f(i.reason??Error("aborted"))};i.addEventListener("abort",l,{once:!0}),u.then(t,f).finally(()=>{i.removeEventListener("abort",l)})})}async function Wjf(i,u,t,f,l="POST",c){let E=c?.timeoutMs??Xjf(f??{}),d=AbortSignal.timeout(E),$=c?.signal?AbortSignal.any([c.signal,d]):d,w,h;try{let v={method:l,headers:new Headers({"content-type":"application/json"}),body:null,signal:$};if(l!=="GET"&&f!==null)v.body=JSON.stringify(f);({res:w,rawText:h}=await Ljf($,(async()=>{let n=await i.proxyDaemonRequest(u,t,v);return{res:n,rawText:await n.text()}})()))}catch(v){if(c?.signal?.aborted)throw v;if(d.aborted)throw Error(`Sandbox ${l} ${t} timed out after ${Math.round(E/1000)}s \u2014 the sandbox may be overloaded or its filesystem stalled. Retry, or use a smaller operation.`);throw new DQ(v)}let _;try{_=JSON.parse(h)}catch{console.error("[sandbox-fs-hooks] Failed to parse JSON response runner=%s path=%s status=%d rawText=%s",i.kind,t,w.status,h.slice(0,2000));let v=w.status>=500?" (server error)":w.status===0?" (no response)":"";throw Error(`Daemon ${t} returned invalid JSON (HTTP ${w.status}${v}): ${h.slice(0,800)}`)}if(!w.ok){console.error("[sandbox-fs-hooks] Non-OK response runner=%s path=%s status=%d body=%s",i.kind,t,w.status,h.slice(0,2000));let v=_.error??`Daemon ${t} failed (${w.status})`;if(w.status===404&&v==="sandbox not found")throw new DQ(Error(v));throw Error(v)}return _}function Yjf(i){let u=[];for(let t of i.split(`
|
|
86462
86462
|
`)){if(!t)continue;let f=t.indexOf(":");if(f<0)continue;let l=t.indexOf(":",f+1);if(l<0)continue;let c=t.slice(0,f),E=Number.parseInt(t.slice(f+1,l),10);if(!Number.isFinite(E))continue;u.push({file:c,line:E,text:t.slice(l+1)})}return u}function Qfu(i,u){let{ensureHandle:t,invalidateHandle:f,canAutoRestart:l}=u,c=(d)=>{let $=d instanceof Error?d.message:String(d);return l?`Sandbox is unreachable and auto-restart did not recover it: ${$}`:"The sandbox is not running. Ask the user to start it by clicking the server button (left side of the header bar)."},E=async(d,$,w="POST",h)=>{let _=async(n)=>Wjf(i,n,d,$,w,{signal:h,timeoutMs:u.opTimeoutMs}),v=await t();try{return await _(v)}catch(n){if(!(n instanceof DQ)||!l){if(n instanceof DQ)throw Error(c(n.cause??n));throw n}console.warn(`[sandbox-fs-hooks] daemon ${d} unreachable \u2014 reaping sandbox and retrying once`,n.cause??n);try{await f()}catch(O){console.warn("[sandbox-fs-hooks] invalidateHandle failed",O)}let D;try{D=await t()}catch(O){throw Error(`Failed to restart sandbox: ${O instanceof Error?O.message:String(O)}`)}try{return await _(D)}catch(O){if(O instanceof DQ)throw Error(c(O.cause??O));throw O}}};return{onProxy:(d,$,w,h)=>E(d,$,w,h),onRead:async(d)=>{return(await E("/_sandbox/read",{path:d})).content},onWrite:async(d,$)=>{await E("/_sandbox/write",{path:d,content:$})},onEdit:async(d,$)=>{for(let w of $)await E("/_sandbox/edit",{path:d,old_string:w.oldText,new_string:w.newText,replace_all:w.replaceAll===!0})},onBash:async(d,$)=>{return await E("/_sandbox/bash",{command:d,...$?.cwd!==void 0?{cwd:$.cwd}:{},...$?.timeoutMs!==void 0?{timeout:$.timeoutMs}:{}})},onGlob:async(d)=>{return(await E("/_sandbox/glob",{pattern:d})).files},onGrep:async(d,$)=>{let w=await E("/_sandbox/grep",{pattern:d,output_mode:"content",...$?.path!==void 0?{path:$.path}:{},...$?.glob!==void 0?{glob:$.glob}:{},...$?.caseInsensitive?{ignore_case:!0}:{}});return Yjf(w.results)}}}var DQ;var XB0=g(()=>{DQ=class DQ extends Error{code="DAEMON_UNREACHABLE";constructor(i){super(i instanceof Error?i.message:"Daemon proxy failed");if(i instanceof Error)this.cause=i}}});function zjf(i){return i==="agent-sandbox"||i==="cluster"||i==="user-desktop"}function UD(){let i=process.env.STUDIO_SANDBOX_PROVIDER,u=i&&i.length>0?i:"user-desktop";if(!zjf(u))throw Error(`Unknown STUDIO_SANDBOX_PROVIDER="${i}" \u2014 expected "agent-sandbox", "cluster", or "user-desktop".`);return BD(u)}var nw=g(()=>{p3i();p3i();fhi();XB0()});function lhi(i){return BD(i.sandboxProviderKind)==="user-desktop"?{sandboxProviderKind:"user-desktop"}:{sandboxProviderKind:"agent-sandbox"}}var Hfu=g(()=>{nw()});function bfu(i){let u=new AbortController,t=gQ.get(i);if(!t)t=new Set,gQ.set(i,t);return t.add(u),u}function Rfu(i,u){let t=gQ.get(i);if(!t)return;if(t.delete(u),t.size===0)gQ.delete(i)}function chi(i){let u=gQ.get(i);if(!u)return;for(let t of u)t.abort();gQ.delete(i)}var gQ;var Ehi=g(()=>{gQ=new Map});function j6(i){return`mesh-storage://${i}`}function ja(i){if(!i.startsWith("mesh-storage://"))return null;return i.slice(15)}function Cfu(){return/mesh-storage:\/\/([^\s"'<>[\]]+)/g}var qy="https://chrome.browserless.io",Vy=32000;import{z as f5}from"zod";function dhi(i){if(i>LB0){let u=(i/1048576).toFixed(1),t=LB0/1048576;throw Error(`Reference image too large: ${u} MB (max ${t} MB). Use a smaller image.`)}}function Mjf(i,u){let t;try{t=new URL(i)}catch{throw Error("Invalid image URL")}if(t.protocol!=="https:"&&!(u&&t.protocol==="http:"))throw Error("Image URL must use HTTPS");for(let f of Cjf)if(f.test(t.hostname))throw Error("Image URL must not point to a private network address")}async function WB0(i,u){if(!u?.getBytes)throw Error("Object storage read is not available");if(u.head){let{size:f}=await u.head(i);dhi(f)}let t=await u.getBytes(i);return dhi(t.byteLength),t}async function qjf(i,u){let t=ja(i);if(t!==null)return WB0(t,u.objectStorage);let f=i.match(Qjf);if(f)return WB0(f[1],u.objectStorage);if(i.startsWith("data:")){let E=i.match(/^data:[^;]+;base64,(.+)$/s);if(!E)throw Error("Invalid data: URI");let d=Buffer.from(E[1],"base64");return dhi(d.byteLength),d}Mjf(i,u.allowHttpExternalUrls===!0);let l=await fetch(i,{signal:u.abortSignal});if(!l.ok)throw Error(`Failed to fetch image from ${i}: ${l.status}`);let c=new Uint8Array(await l.arrayBuffer());return dhi(c.byteLength),c}async function Mfu(i,u){let{provider:t,imageModelInfo:f,objectStorage:l}=u,c=t.aiSdk.imageModel(f.id),E=i.referenceImages&&i.referenceImages.length>0,d=E?await Promise.all(i.referenceImages.map((n)=>{let D=n.uri??n.url;if(!D)throw Error("Reference image missing uri");return qjf(D,u)})):[],$=E?{text:i.prompt,images:d}:i.prompt,w=await b3i({model:c,prompt:$,n:i.n??1,...i.aspectRatio?{aspectRatio:i.aspectRatio}:{},...u.abortSignal?{abortSignal:u.abortSignal}:{}});if(!l)throw Error("Object storage is unavailable; cannot persist the generated image.");let h=i.n??1,_=w.images.length>h?w.images.slice(-h):w.images;return{success:!0,images:await Promise.all(_.map(async(n)=>{let D=n.mediaType??"image/png",O=D.split("/")[1]??"png",N=`generated-images/${crypto.randomUUID()}.${O}`,y=Uint8Array.from(atob(n.base64),(Z)=>Z.charCodeAt(0));return await l.put(N,y,{contentType:D}),{uri:j6(N),mediaType:D}})),prompt:i.prompt,model:f.id,usage:{inputTokens:w.usage.inputTokens??0,outputTokens:w.usage.outputTokens??0},usedReferenceImages:E?i.referenceImages.length:0}}function $hi(i,u){return Et({description:"Generate an image from a text description, optionally using reference images. Use this when the user asks you to create, generate, draw, or design an image. If the user has attached images and wants to modify or use them as a reference, pass them as referenceImages. "+"The image is displayed automatically by the UI \u2014 do NOT include image URLs or markdown images in your response.",inputSchema:gi(ry),execute:async(t,f)=>{let l=performance.now();try{return await Mfu(t,u)}finally{i.write({type:"data-tool-metadata",id:f.toolCallId,data:{latencyMs:performance.now()-l}})}}})}function whi(i,u){let{objectStorage:t,toolOutputMap:f,pendingImages:l}=u;return Et({description:"Take a screenshot of a web page. Use this when you need to visually see a website, check its layout, verify a deployment, or inspect a page's appearance. "+"The screenshot is displayed automatically by the UI \u2014 do NOT include image URLs or markdown images in your response.",inputSchema:gi(Rjf),execute:async(c,E)=>{let d=performance.now();try{let $=u.browserlessToken??process.env.BROWSERLESS_TOKEN;if(!$)return{success:!1,error:"BROWSERLESS_TOKEN is not configured."};let w=await fetch(`${qy}/screenshot?token=${encodeURIComponent($)}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({url:c.url,options:{fullPage:c.fullPage??!1,type:"jpeg",quality:bjf},viewport:Hjf})});if(!w.ok){let O=await w.text().catch(()=>"Unknown error");return{success:!1,error:`Browserless screenshot failed (${w.status}): ${O}`,url:c.url}}let h=new Uint8Array(await w.arrayBuffer()),_="image/jpeg",v=`screenshots/${crypto.randomUUID()}.jpg`,n,D=null;if(t)try{await t.put(v,h,{contentType:_}),n=j6(v),D=await t.presignedGetUrl?.(v,600)??null}catch(O){console.error("[take-screenshot] Failed to upload, using data: URI fallback",O),n=`data:${_};base64,${Buffer.from(h).toString("base64")}`}else n=`data:${_};base64,${Buffer.from(h).toString("base64")}`;if(!D)D=n.startsWith("data:")?n:`data:${_};base64,${Buffer.from(h).toString("base64")}`;return l.push({url:D,mediaType:_,pageUrl:c.url}),f.set(E.toolCallId,`Screenshot of ${c.url} stored at ${n}`),{success:!0,image:{uri:n,mediaType:_},url:c.url}}finally{i.write({type:"data-tool-metadata",id:E.toolCallId,data:{latencyMs:performance.now()-d}})}},toModelOutput({output:c}){if(!c.success)return{type:"text",value:c.error??"Screenshot failed"};return{type:"text",value:`Screenshot of ${c.url} captured successfully. The image is attached below.`}}})}var Qjf,LB0=20971520,Hjf,bjf=80,ry,Rjf,Cjf;var my=g(()=>{qf();qf();Qjf=/\/api\/[^/]+\/files\/([^?#]+)/,Hjf={width:1280,height:800},ry=f5.object({prompt:f5.string().max(1e4).describe("Detailed description of the image to generate. Be specific about style, composition, colors, and subject matter."),referenceImages:f5.array(f5.object({uri:f5.string().describe("URI of the reference image (e.g. mesh-storage://generated-images/uuid.png).")})).optional().describe("Reference images to use as input for image-to-image generation. Pass the URI of any image from the conversation (uploaded files, previously generated images, etc.) when the user wants to modify, transform, or use an existing image as a starting point."),aspectRatio:f5.enum(["1:1","16:9","9:16","4:3","3:4","3:2","2:3"]).optional().describe("Aspect ratio for the generated image. Defaults to 1:1."),n:f5.number().int().min(1).max(4).optional().describe("Number of images to generate. Defaults to 1.")}),Rjf=f5.object({url:f5.string().url().describe("The URL of the web page to screenshot."),fullPage:f5.boolean().optional().describe("When true, captures the full scrollable page instead of just the viewport. Defaults to false.")}),Cjf=[/^127\./,/^10\./,/^172\.(1[6-9]|2\d|3[01])\./,/^192\.168\./,/^169\.254\./,/^0\./,/^\[::1\]$/,/^\[fd/,/^\[fe80:/,/^\[::ffff:/i,/^localhost$/i]});function Dw(i){if(i instanceof Error)return i.message;if(typeof i==="object"&&i!==null)try{return JSON.stringify(i)}catch{return"[unserializable object]"}return String(i)}function YB0(i){let t=i.split(/\.\s+/).filter((l)=>!/https?:\/\//i.test(l)&&!/openrouter/i.test(l));if(t.length===0)return i;let f=t.join(". ").trim();return f.endsWith(".")?f:`${f}.`}function zB0(i){if(i instanceof Error)return{message:i.message,statusCode:i.statusCode};if(typeof i==="object"&&i!==null){let u=i,t=typeof u.message==="string"?u.message:Dw(i),f=typeof u.statusCode==="number"?u.statusCode:typeof u.code==="number"?u.code:void 0;return{message:t,statusCode:f}}return{message:String(i)}}function hhi(i){let{message:u,statusCode:t}=zB0(i),f=u.toLowerCase();return t===402||f.includes("credit")||f.includes("insufficient funds")||f.includes("insufficient balance")||f.includes("billing")||f.includes("quota exceeded")||f.includes("key limit")||f.includes("payment required")}function QB0(i){let{message:u}=zB0(i);if(hhi(i))return`[CREDITS] ${YB0(u)}`;return YB0(u)}function HB0(i){let u=i.indexOf(qfu);if(u===-1)return{baseId:i,signature:null};return{baseId:i.slice(0,u),signature:i.slice(u+qfu.length)}}function Vjf(i,u){return`${i}${qfu}${u}`}function rjf(i,u){return{...i,google:{...i?.google??{},thoughtSignature:u}}}function mjf(i){let u=i?.google?.thoughtSignature;return typeof u==="string"?u:null}function bB0(i){let{baseId:u,signature:t}=HB0(i.toolCallId);if(t===null)return i;return{...i,toolCallId:u,providerMetadata:rjf(i.providerMetadata,t)}}function ejf(i){switch(i.type){case"tool-input-start":case"tool-input-delta":case"tool-input-end":{let{baseId:u,signature:t}=HB0(i.id);return t===null?i:{...i,id:u}}case"tool-call":return bB0(i);default:return i}}function ajf(i){let u=new Map;for(let f of i.prompt){if(f.role!=="assistant")continue;for(let l of f.content){if(l.type!=="tool-call")continue;let c=mjf(l.providerOptions);if(c)u.set(l.toolCallId,c)}}if(u.size===0)return i;let t=i.prompt.map((f)=>{if(f.role!=="assistant"&&f.role!=="tool")return f;let l=f.content.map((c)=>{if(c.type!=="tool-call"&&c.type!=="tool-result")return c;let E=u.get(c.toolCallId);return E?{...c,toolCallId:Vjf(c.toolCallId,E)}:c});return{...f,content:l}});return{...i,prompt:t}}function ojf(){return{specificationVersion:"v3",transformParams:async({params:i})=>ajf(i),wrapStream:async({doStream:i})=>{let{stream:u,...t}=await i();return{...t,stream:u.pipeThrough(new TransformStream({transform(f,l){l.enqueue(ejf(f))}}))}},wrapGenerate:async({doGenerate:i})=>{let u=await i(),t=u.content.map((f)=>f.type==="tool-call"?bB0(f):f);return{...u,content:t}}}}function RB0(i){return My({model:i,middleware:ojf()})}var qfu="__thought__";var CB0=g(()=>{qf()});function pjf(i,u){return My({model:i,middleware:{specificationVersion:"v3",wrapStream:async({doStream:f,params:l})=>{try{return await f()}catch(c){if(!hhi(c))throw c;return u.doStream(l)}},wrapGenerate:async({doGenerate:f,params:l})=>{try{return await f()}catch(c){if(!hhi(c))throw c;return u.doGenerate(l)}}}})}function _hi(i,u){let t={};if(u.capabilities?.reasoning!==!1)t.reasoning={enabled:!0,effort:"medium"};let f=i.info?.id==="openrouter"&&u.id!==Vfu;if(f)t.models=[u.id,Vfu];let l=(d,$)=>$&&Object.keys($).length>0?i.aiSdk.languageModel(d,$):i.aiSdk.languageModel(d),c=l(u.id,t),E=f?pjf(c,l(Vfu)):c;return i.info?.id&&sjf.has(i.info.id)?RB0(E):E}var Vfu="openrouter/free",sjf;var rfu=g(()=>{qf();CB0();sjf=new Set(["openai-compatible","openrouter","deco","llmapi"])});function MB0(i,u){let t=i?.maxOutputTokens??32768,f=i?.contextWindow;if(!f)return t;let l=f-u*2;return Math.max(1024,Math.min(t,l))}var vhi=300000;import{z as mfu}from"zod";function nhi(i){let{toolOutputMap:u}=i;return Et({description:"Filter a tool output that was too large to display inline. Returns all lines matching the given regular expression pattern (grep-like). You may call this tool multiple times with different patterns to extract different pieces of information.",inputExamples:[{input:{tool_call_id:"id_1",pattern:"error|warning"}},{input:{tool_call_id:"id_2",pattern:'"status":\\s*"failed"'}}],inputSchema:gi(mfu.object({tool_call_id:mfu.string(),pattern:mfu.string().min(1).describe("Regular expression pattern to filter tool output lines. Returns all matching lines.")})),execute:async({tool_call_id:t,pattern:f})=>{if(!u.has(t))return{result:`Tool output not found for tool call id: ${t}. Available ids: ${[...u.keys()].join(", ")||"(none)"}`,matchCount:0,totalLines:0};let l=u.get(t),c;try{c=new RegExp(f)}catch{return{result:`Invalid regex pattern: ${f}`,matchCount:0,totalLines:0}}let E=l.split(`
|
|
86463
86463
|
`),d=E.filter((h)=>c.test(h)),$=d.join(`
|
|
86464
86464
|
`),w=UE($);if(w>n7){let h=wd($);return{result:`Output is still too long (${w} tokens), use a more specific pattern to reduce output.
|