decocms 4.204.11 → 4.204.12
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-Db8FAhD0.js → AlertCircle-DjjCqWTc.js} +1 -1
- package/dist/client/assets/{AreaChart-CkHaA1qM.js → AreaChart-fGTYJPuT.js} +1 -1
- package/dist/client/assets/{ArrowLeft-BBdrIXTE.js → ArrowLeft-__1hzT2t.js} +1 -1
- package/dist/client/assets/{ArrowUp-DAgivKXe.js → ArrowUp-BTCrlYkK.js} +1 -1
- package/dist/client/assets/{ArrowUpRight-BAYKU_Mt.js → ArrowUpRight-OYKlt2ZS.js} +1 -1
- package/dist/client/assets/{Check-Ckh2J0Wj.js → Check-Dl3nr2uz.js} +1 -1
- package/dist/client/assets/{CheckCircle-DWW9c4n7.js → CheckCircle-C54n2t0T.js} +1 -1
- package/dist/client/assets/{ChevronDown-DcGz0OOE.js → ChevronDown-Dygc5v7h.js} +1 -1
- package/dist/client/assets/{ChevronRight-DPR4kcMe.js → ChevronRight-D_gwFZRd.js} +1 -1
- package/dist/client/assets/{ChevronUp-335oTLfl.js → ChevronUp-CpVAW_jK.js} +1 -1
- package/dist/client/assets/{Copy01-DCGFBPLU.js → Copy01-3BqZ4EmX.js} +1 -1
- package/dist/client/assets/{CpuChip01-CpN_p7ZK.js → CpuChip01-Dp3sp9YJ.js} +1 -1
- package/dist/client/assets/{CreditCard01-CA0IYAzI.js → CreditCard01-BeXrcdSu.js} +1 -1
- package/dist/client/assets/{DotsVertical-BdH2ws1v.js → DotsVertical-DHtz1IIs.js} +1 -1
- package/dist/client/assets/{Eye-Cd6Z4wr1.js → Eye-u-BLLRQS.js} +1 -1
- package/dist/client/assets/{FilterLines-CGfVuof0.js → FilterLines-BhI1K40e.js} +1 -1
- package/dist/client/assets/{Globe01-C6n_Eepd.js → Globe01-D_1IiEtd.js} +1 -1
- package/dist/client/assets/{Globe04-B1lizZTT.js → Globe04-Du-85nKQ.js} +1 -1
- package/dist/client/assets/{HardDrive-DzwjWFWh.js → HardDrive-B4eb7-LH.js} +1 -1
- package/dist/client/assets/{Key01-1GhbQsqk.js → Key01-YBrWL2YU.js} +1 -1
- package/dist/client/assets/{LayoutLeft-9QVSG_-K.js → LayoutLeft-CdFpxE6Z.js} +1 -1
- package/dist/client/assets/{LinkExternal01-DnTES2u_.js → LinkExternal01-DNnLbiWO.js} +1 -1
- package/dist/client/assets/{LogOut01-BLj4aSl9.js → LogOut01-Jz80eaxm.js} +1 -1
- package/dist/client/assets/{Monitor01-aQHufnwR.js → Monitor01-D-H1uw26.js} +1 -1
- package/dist/client/assets/{Palette-hUc3dCur.js → Palette-Cahof-Sf.js} +1 -1
- package/dist/client/assets/{Play-3BJ0NCnw.js → Play-BlJjBios.js} +1 -1
- package/dist/client/assets/{Plus-DSVjF-4R.js → Plus-DJC0wPXF.js} +1 -1
- package/dist/client/assets/{SearchLg-DeEuvWgr.js → SearchLg-Qkw3ZlT8.js} +1 -1
- package/dist/client/assets/{SearchMd-D3BEkIfl.js → SearchMd-DvHRdcjz.js} +1 -1
- package/dist/client/assets/{Settings02-Dd-GnwO4.js → Settings02-Ca-7qyxD.js} +1 -1
- package/dist/client/assets/{Share07-BK5jaJxR.js → Share07-D0UgY5wf.js} +1 -1
- package/dist/client/assets/{Shield01-CAAiZUxe.js → Shield01-DwCDKvgs.js} +1 -1
- package/dist/client/assets/{Star01-BD9GU6__.js → Star01-BXWZkI5L.js} +1 -1
- package/dist/client/assets/{Stars01-CsmqcIh0.js → Stars01-tPzCkINI.js} +1 -1
- package/dist/client/assets/{Stars02-Ddu22e9e.js → Stars02-DUzlv30G.js} +1 -1
- package/dist/client/assets/{Sun-CBbSD7eu.js → Sun-DuKrOQTe.js} +1 -1
- package/dist/client/assets/{SwitchHorizontal01-DdUa0KSY.js → SwitchHorizontal01-7ufko9EU.js} +1 -1
- package/dist/client/assets/{Tool01-DKQr2Ku4.js → Tool01-BfCRmYQe.js} +1 -1
- package/dist/client/assets/{Tool02-DkhywL9m.js → Tool02-CvqiHQ_I.js} +1 -1
- package/dist/client/assets/{Trash01-N83L9DVj.js → Trash01-B7BRpm_4.js} +1 -1
- package/dist/client/assets/{TrendUp01-5u9J7nxr.js → TrendUp01-DJXcBhgu.js} +1 -1
- package/dist/client/assets/{Upload01-BKUwtebR.js → Upload01-Dsuw7EXQ.js} +1 -1
- package/dist/client/assets/{User01-DH7Gp-RH.js → User01-Cp63nbSc.js} +1 -1
- package/dist/client/assets/{Users01-CewPDueJ.js → Users01-Cnl7lwYM.js} +1 -1
- package/dist/client/assets/{Users03-DqyOOoSg.js → Users03-CM7XkNHF.js} +1 -1
- package/dist/client/assets/{X-BmCvrF6m.js → X-Ctbb_BcX.js} +1 -1
- package/dist/client/assets/{XCircle-Dl4jNIuW.js → XCircle-BQL1LAf9.js} +1 -1
- package/dist/client/assets/{XClose-B91Wj--l.js → XClose-1OM6Bo58.js} +1 -1
- package/dist/client/assets/{Zap-Byhu3tNy.js → Zap-BWQNmPHL.js} +1 -1
- package/dist/client/assets/{ZapSquare-CcO7sK-p.js → ZapSquare-B9PPEQYj.js} +1 -1
- package/dist/client/assets/{access-gate-BghzSCnE.js → access-gate-DuFWoWCW.js} +1 -1
- package/dist/client/assets/{agent-icon-BAPsFhIR.js → agent-icon-DUriprwb.js} +1 -1
- package/dist/client/assets/{agents-list-CvmlZ194.js → agents-list-DfqLCwL_.js} +1 -1
- package/dist/client/assets/{ai-providers-CeK1aDD5.js → ai-providers-BX5KcH6i.js} +1 -1
- package/dist/client/assets/{alert-BmYNBm_2.js → alert-UUEzMkxC.js} +1 -1
- package/dist/client/assets/{alert-dialog-BCaZm96Z.js → alert-dialog-BzMccYwU.js} +1 -1
- package/dist/client/assets/{app-editor-BkS9quwq.js → app-editor-Bjy1G6Lj.js} +1 -1
- package/dist/client/assets/{auth-CLFO3_RL.js → auth-CPyD4J7X.js} +1 -1
- package/dist/client/assets/{auth-catchall-CQs_KDud.js → auth-catchall-R4Ks06oT.js} +1 -1
- package/dist/client/assets/{auth-entry-DSPq_zl2.js → auth-entry-DFqiOHe_.js} +1 -1
- package/dist/client/assets/{auth-split-layout-xD8HIOJV.js → auth-split-layout-B1yE53hR.js} +1 -1
- package/dist/client/assets/{authenticate-and-persist-oauth-CJL9FtIM.js → authenticate-and-persist-oauth-BNR500ny.js} +1 -1
- package/dist/client/assets/{automation-list-row-U2osdxyj.js → automation-list-row-DFa6j-jh.js} +1 -1
- package/dist/client/assets/{automation-runs-xPJB6zEu.js → automation-runs-Bu_CVSZb.js} +1 -1
- package/dist/client/assets/{automations-By5FdrRI.js → automations-CT-o-u2n.js} +1 -1
- package/dist/client/assets/{avatar-BlKd_wSy.js → avatar-Cst2Q7of.js} +1 -1
- package/dist/client/assets/{badge-j9XMC7le.js → badge-Q5xWVNFw.js} +1 -1
- package/dist/client/assets/{billing-Dzs5yrq4.js → billing-QzN_CEWp.js} +1 -1
- package/dist/client/assets/{block-document-BWa5Tlq2.js → block-document-ETb_yttJ.js} +1 -1
- package/dist/client/assets/{brand-context-CD_ONfXU.js → brand-context-CYVryUZO.js} +1 -1
- package/dist/client/assets/{buckets-DQHToByp.js → buckets-CJLW6FOr.js} +1 -1
- package/dist/client/assets/{bulk-category-panel-DLoyqlGA.js → bulk-category-panel-Csdd9Mwk.js} +1 -1
- package/dist/client/assets/{capability-load-error-CvMtarEx.js → capability-load-error-DYfzgTpY.js} +1 -1
- package/dist/client/assets/{card-BdxDDHfa.js → card-BwSSRhtr.js} +1 -1
- package/dist/client/assets/{cards-NVoopU1W.js → cards-B1-Cf7sC.js} +1 -1
- package/dist/client/assets/{category-editor-AYvl8iXa.js → category-editor-BVrzzUL2.js} +1 -1
- package/dist/client/assets/{chat-context-CeV8_oNw.js → chat-context-Cx6AggmM.js} +1 -1
- package/dist/client/assets/{checkbox-B1jaivmN.js → checkbox-DMjj7-uU.js} +1 -1
- package/dist/client/assets/{cli-auth-success-BL0Y-yea.js → cli-auth-success-C4z2bFr3.js} +1 -1
- package/dist/client/assets/{collection-detail-DCEdt-jZ.js → collection-detail-DdB2rVfB.js} +1 -1
- package/dist/client/assets/{collection-display-button-B9Ra2TL3.js → collection-display-button-BRMZbmfV.js} +1 -1
- package/dist/client/assets/{collection-search-DbKCI-82.js → collection-search-CEgXTbL_.js} +1 -1
- package/dist/client/assets/{collection-table-wrapper-BzshRiXk.js → collection-table-wrapper-BYDqqbqp.js} +1 -1
- package/dist/client/assets/{collection-tabs-B6YV6Wqg.js → collection-tabs-C68siu1U.js} +1 -1
- package/dist/client/assets/{command-BBDTtSLh.js → command-BTAhLGCl.js} +1 -1
- package/dist/client/assets/{commerce-onboarding-9EjLW7tV.js → commerce-onboarding-uRo9AkR-.js} +1 -1
- package/dist/client/assets/{connect-B2SH5zln.js → connect-0KNczvo2.js} +1 -1
- package/dist/client/assets/{connection-wwxku9Ff.js → connection-PRGc2OPI.js} +1 -1
- package/dist/client/assets/{connection-card-CwA9Uv3g.js → connection-card-Fa0OsjRL.js} +1 -1
- package/dist/client/assets/{connection-detail-DU1vjuZG.js → connection-detail-DqFjE2V0.js} +1 -1
- package/dist/client/assets/{connection-form-helpers-CahL0pvk.js → connection-form-helpers-zLK8xcV1.js} +1 -1
- package/dist/client/assets/{connections-VGzSR5ha.js → connections-CdsZyAxm.js} +1 -1
- package/dist/client/assets/{decopilot-sse-pool-PkdJDYdO.js → decopilot-sse-pool-CVVhENSx.js} +1 -1
- package/dist/client/assets/{dialog-DyuBQbz8.js → dialog-DS07XD1d.js} +1 -1
- package/dist/client/assets/{domain-settings-DrHioTEw.js → domain-settings-BjUYriep.js} +1 -1
- package/dist/client/assets/{drawer-ClGoEAYt.js → drawer-DFS6xKNI.js} +1 -1
- package/dist/client/assets/{dropdown-menu-CN40TAwh.js → dropdown-menu-C55vCOfZ.js} +1 -1
- package/dist/client/assets/{empty-state-DwUtvF_m.js → empty-state-C_uDehqR.js} +1 -1
- package/dist/client/assets/{extract-connection-data-De7mHrhF.js → extract-connection-data-CnVm8qvF.js} +1 -1
- package/dist/client/assets/{file-explorer-k1tulnag.js → file-explorer-BD3j_iY7.js} +1 -1
- package/dist/client/assets/{file-type-icon-BlQX_yUc.js → file-type-icon-CJ761AAG.js} +1 -1
- package/dist/client/assets/{form-6TwMc-HF.js → form-BwESzsbs.js} +1 -1
- package/dist/client/assets/{general-DCs0LngS.js → general-4_M8JYAC.js} +1 -1
- package/dist/client/assets/{github-repo-picker-CNbnvvQi.js → github-repo-picker-C0EpOG1r.js} +1 -1
- package/dist/client/assets/{hooks-C92XOaKP.js → hooks-BsgHz7Au.js} +1 -1
- package/dist/client/assets/{index-xKCaiUtp.js → index-BFpJvM6R.js} +1 -1
- package/dist/client/assets/{index-BBOexEq8.js → index-C4rlPpGK.js} +1 -1
- package/dist/client/assets/{index-gBiaWWBo.js → index-CDedG1bs.js} +1 -1
- package/dist/client/assets/{index-sqdSTtTR.js → index-CVxNsnq9.js} +1 -1
- package/dist/client/assets/{index-WGPk5Q7x.js → index-CaICdacs.js} +1 -1
- package/dist/client/assets/{index-CPQnHYL0.js → index-Cj6Ntn9Z.js} +1 -1
- package/dist/client/assets/{index-DNAkesNr.js → index-Cp_Y0RAP.js} +1 -1
- package/dist/client/assets/{index-Ciskbrba.js → index-CvyB6pTl.js} +5 -5
- package/dist/client/assets/{index-CuhGmwi3.js → index-D3Fe9BXe.js} +1 -1
- package/dist/client/assets/{index-DWXkCL-D.js → index-Dh-VR4BE.js} +3 -3
- package/dist/client/assets/{index-redirect-D3KtZ2UU.js → index-redirect-DjVkeNOx.js} +1 -1
- package/dist/client/assets/{input-Cw-Wyzjp.js → input-BDwkCtc7.js} +1 -1
- package/dist/client/assets/{integration-icon-CNs8rVds.js → integration-icon-pdxLRGa3.js} +1 -1
- package/dist/client/assets/{invite-member-dialog-CdBFNToB.js → invite-member-dialog-e0KwgMDZ.js} +1 -1
- package/dist/client/assets/{label-i-JCcQNn.js → label-DI1qLC0i.js} +1 -1
- package/dist/client/assets/{layout-BQy87mOk.js → layout-CmZJVZE9.js} +1 -1
- package/dist/client/assets/{login-B2eBh913.js → login-CUDLKidx.js} +1 -1
- package/dist/client/assets/{mcp-oauth-Cz8lm40c.js → mcp-oauth-c4-Wj7KS.js} +1 -1
- package/dist/client/assets/{members-DPfTwGjQ.js → members-DJ0wOrOM.js} +1 -1
- package/dist/client/assets/{monaco-editor-VJrBuRSN.js → monaco-editor-xZr_aBRa.js} +1 -1
- package/dist/client/assets/{monitoring-stats-row-CwxtC9n0.js → monitoring-stats-row-BmOn7Lsv.js} +1 -1
- package/dist/client/assets/{multi-select-uHF1SoQJ.js → multi-select-DwKssIbm.js} +1 -1
- package/dist/client/assets/{oauth-callback-ChWiHCSr.js → oauth-callback-DexxsiN7.js} +1 -1
- package/dist/client/assets/{oauth-callback-ai-provider-DFozECrw.js → oauth-callback-ai-provider-C_J2WA98.js} +1 -1
- package/dist/client/assets/{onboarding-D5VzaCtk.js → onboarding-DESuBGnE.js} +1 -1
- package/dist/client/assets/{org-layout-DfyhjR2o.js → org-layout-CO-1h4Xt.js} +1 -1
- package/dist/client/assets/{organization-choice-CMtQudk_.js → organization-choice-BZDfq6K_.js} +1 -1
- package/dist/client/assets/{orgs-BkOIA6ce.js → orgs-zk7s9MZZ.js} +1 -1
- package/dist/client/assets/{page-seo-form-B36Slu3i.js → page-seo-form-DbCllHqe.js} +1 -1
- package/dist/client/assets/{popover-DssDKn2g.js → popover-tCczitOG.js} +1 -1
- package/dist/client/assets/{post-editor-Z0tZ_f5B.js → post-editor-DjCOH1Qu.js} +1 -1
- package/dist/client/assets/{primitives-DthsGsSM.js → primitives-Cf2iqlYp.js} +1 -1
- package/dist/client/assets/{profile-B2j3m06h.js → profile-CzCsNeoI.js} +1 -1
- package/dist/client/assets/{project-app-view-BsoxDm6i.js → project-app-view-h9g1fnT9.js} +1 -1
- package/dist/client/assets/record-editor-Dx0niol9.js +1 -0
- package/dist/client/assets/{redirect-editor-uLmND-LU.js → redirect-editor-Wt0sbTWC.js} +1 -1
- package/dist/client/assets/registry-DVxBOUV2.js +2 -0
- package/dist/client/assets/{registry-layout-CsM7mO5K.js → registry-layout-CmpOyje1.js} +1 -1
- package/dist/client/assets/{reports-Cc9cfYJZ.js → reports-fkd2ftYC.js} +1 -1
- package/dist/client/assets/{require-capability-D9rxWmoq.js → require-capability-D01HokeW.js} +1 -1
- package/dist/client/assets/{required-auth-layout-Cx1dgRdu.js → required-auth-layout-bHxCyVmP.js} +1 -1
- package/dist/client/assets/{reset-password-CDbRR2NR.js → reset-password-BmIaRBMY.js} +1 -1
- package/dist/client/assets/{roles-D0yIPM2u.js → roles-D27GvDYl.js} +1 -1
- package/dist/client/assets/{search-input-9VIRkcfy.js → search-input-ekjNtXMC.js} +1 -1
- package/dist/client/assets/{secrets-BFiNOtCX.js → secrets-RF4I5SG7.js} +1 -1
- package/dist/client/assets/sections-editor-BiOsAKWS.js +2 -0
- package/dist/client/assets/{select-BPHj3yEG.js → select-mPIJlDQl.js} +1 -1
- package/dist/client/assets/{select-model-JbUCoNOJ.js → select-model-DMPl2R-i.js} +1 -1
- package/dist/client/assets/{self-tool-result-CqE4epjU.js → self-tool-result-DpAPMqbN.js} +1 -1
- package/dist/client/assets/{seo-editor-B_3PyxQG.js → seo-editor-BcM4Bn08.js} +1 -1
- package/dist/client/assets/{settings-layout-CKf6cgue.js → settings-layout-BOLHk4JT.js} +1 -1
- package/dist/client/assets/{settings-section-Dh7xkKg_.js → settings-section-DrkRD_0G.js} +1 -1
- package/dist/client/assets/{shell-controls-DosMkzwp.js → shell-controls-n8nrRrSD.js} +1 -1
- package/dist/client/assets/{shell-layout-DsCjXZuI.js → shell-layout-DwLxuD_g.js} +1 -1
- package/dist/client/assets/{sidebar-Bt6Ox8Tg.js → sidebar-6RBSqwja.js} +1 -1
- package/dist/client/assets/{skeleton-DaSU0LrF.js → skeleton-BSYnx5k6.js} +1 -1
- package/dist/client/assets/{spinner-tb9aLmXA.js → spinner-DkpC4Wlu.js} +1 -1
- package/dist/client/assets/{sso-CnjZk_8r.js → sso-sFLLqttW.js} +1 -1
- package/dist/client/assets/{store-ZS51GiQE.js → store-QTRfaM9U.js} +1 -1
- package/dist/client/assets/store-registry-BLKfuLU5.js +2 -0
- package/dist/client/assets/{studio-tools-2Ky28cSc.js → studio-tools-DmL7OF1Z.js} +1 -1
- package/dist/client/assets/{switch-BsgP2USk.js → switch-pUc5zHr9.js} +1 -1
- package/dist/client/assets/{synced-repos-B3eX6lrw.js → synced-repos-CMhaz2km.js} +1 -1
- package/dist/client/assets/{tab-id-Bg-2ZvlR.js → tab-id-Cp8B9V-5.js} +1 -1
- package/dist/client/assets/{table-DtygcXDr.js → table-B41Lgm0q.js} +1 -1
- package/dist/client/assets/{tabs-B-yQnDjy.js → tabs-B3US2yiT.js} +1 -1
- package/dist/client/assets/{textarea-CIIh3eCO.js → textarea-Bndryu5P.js} +1 -1
- package/dist/client/assets/{toggle-group-SpDgsjAy.js → toggle-group-D3vwusj1.js} +1 -1
- package/dist/client/assets/{toolbar-DoiNuzRz.js → toolbar-BMwfzNxl.js} +1 -1
- package/dist/client/assets/{tooltip-bNOyqjG-.js → tooltip-ByYCgCu2.js} +1 -1
- package/dist/client/assets/{use-ai-providers-fR1LNvFR.js → use-ai-providers-Ntgi8njd.js} +1 -1
- package/dist/client/assets/{use-automations-6PKQGIaU.js → use-automations-ZY_2b6Sa.js} +1 -1
- package/dist/client/assets/{use-autosave-Cyw8Zffh.js → use-autosave-DhLMee7V.js} +1 -1
- package/dist/client/assets/{use-capability-DKpeN9dM.js → use-capability-CUv6rXBj.js} +1 -1
- package/dist/client/assets/{use-clock-tick-Dunir5bW.js → use-clock-tick-WRb-A5oj.js} +1 -1
- package/dist/client/assets/{use-connection-CvELWTwk.js → use-connection-BG-DO5JP.js} +1 -1
- package/dist/client/assets/{use-copy-BZ4yfNM-.js → use-copy-CKXt3cYc.js} +1 -1
- package/dist/client/assets/{use-create-virtual-mcp-CZ2B3BXE.js → use-create-virtual-mcp-dC38vLn0.js} +1 -1
- package/dist/client/assets/{use-debounced-autosave-BoxizbC8.js → use-debounced-autosave-BHqO0aOo.js} +1 -1
- package/dist/client/assets/{use-debounced-value-CBrkrBVe.js → use-debounced-value-Bd6Nt4Fb.js} +1 -1
- package/dist/client/assets/{use-deco-credits-j4q9AuO0.js → use-deco-credits-D66FFgQI.js} +1 -1
- package/dist/client/assets/{use-decopilot-events-M2HCToeh.js → use-decopilot-events-B81tavjV.js} +1 -1
- package/dist/client/assets/{use-delete-connection-DMSO0MLQ.js → use-delete-connection-DioixEBQ.js} +1 -1
- package/dist/client/assets/{use-deployment-admin-CPnc7Qs9.js → use-deployment-admin-oJVXGEKg.js} +1 -1
- package/dist/client/assets/{use-file-configs-uSz0v_YV.js → use-file-configs-BbEiK7vg.js} +1 -1
- package/dist/client/assets/{use-infinite-scroll-Csqlp5hg.js → use-infinite-scroll-v2tc3KR1.js} +1 -1
- package/dist/client/assets/{use-join-requests-B9Eyqa2b.js → use-join-requests-DLc9Wv8g.js} +1 -1
- package/dist/client/assets/{use-mcp-client-DKp-llYX.js → use-mcp-client-UYoSLJNH.js} +1 -1
- package/dist/client/assets/{use-mcp-tools-C6yyPNEW.js → use-mcp-tools-B_91kkHc.js} +1 -1
- package/dist/client/assets/{use-members-DPZXIkQa.js → use-members-D2yL3fLd.js} +1 -1
- package/dist/client/assets/{use-mobile-6uCDoREK.js → use-mobile-Scr30Ps1.js} +1 -1
- package/dist/client/assets/{use-navigate-to-agent-i487hDEf.js → use-navigate-to-agent-9yDFRkvQ.js} +1 -1
- package/dist/client/assets/{use-open-billing-url-IyKhK2Ci.js → use-open-billing-url-Cr8LFH4j.js} +1 -1
- package/dist/client/assets/{use-org-auth-client-DrjcoPeu.js → use-org-auth-client-hvg3KZfA.js} +1 -1
- package/dist/client/assets/{use-org-sso-d3sj4htn.js → use-org-sso-B7qwIhux.js} +1 -1
- package/dist/client/assets/{use-organization-roles-rTKk2RPb.js → use-organization-roles-lbRXdlLH.js} +1 -1
- package/dist/client/assets/{use-organization-settings-mJokZoPl.js → use-organization-settings-BGFM1ij2.js} +1 -1
- package/dist/client/assets/{use-registry-connections-cg2WmvBD.js → use-registry-connections-BlMy8Tro.js} +1 -1
- package/dist/client/assets/{use-secrets--J9RYnhw.js → use-secrets-CYD4rFjT.js} +1 -1
- package/dist/client/assets/{use-section-preview-base-B-NvnIwC.js → use-section-preview-base-D25j4DPq.js} +1 -1
- package/dist/client/assets/{use-status-sounds-BX6vUIM6.js → use-status-sounds-BIFrACuz.js} +1 -1
- package/dist/client/assets/{use-tags-BpnhmQR6.js → use-tags-DwOqNtoT.js} +1 -1
- package/dist/client/assets/{use-view-mode-mAo2loN2.js → use-view-mode-D7Q2fciq.js} +1 -1
- package/dist/client/assets/{use-virtual-mcp-CoA0Ur0Z.js → use-virtual-mcp-DX5rhmVQ.js} +1 -1
- package/dist/client/assets/useInfiniteQuery-DGV9QM_M.js +1 -0
- package/dist/client/assets/{useRouterState-B4HUQS9e.js → useRouterState-CFtTqM_a.js} +1 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-Dluy5f90.js +1 -0
- package/dist/client/assets/{users-D1gGSsyv.js → users-5hnD9DKy.js} +1 -1
- package/dist/client/assets/{variant-calendar-CNgwTPu-.js → variant-calendar-hfW0LRI9.js} +1 -1
- package/dist/client/assets/{view-mode-toggle-D2v_6Pw8.js → view-mode-toggle-CnWwAGfk.js} +1 -1
- package/dist/client/index.html +1 -1
- package/dist/server/cli.js +3 -3
- package/dist/server/server.js +3 -3
- package/package.json +1 -1
- package/dist/client/assets/record-editor-By1O18Uh.js +0 -1
- package/dist/client/assets/registry-C1PE-N76.js +0 -2
- package/dist/client/assets/sections-editor-DJGlX2Yh.js +0 -2
- package/dist/client/assets/store-registry-Bl2J1FeF.js +0 -2
- package/dist/client/assets/useInfiniteQuery-DTZxXa2W.js +0 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-eryeyNHv.js +0 -1
package/dist/server/server.js
CHANGED
|
@@ -1405,7 +1405,7 @@ Guidelines:
|
|
|
1405
1405
|
Guidelines:
|
|
1406
1406
|
- Include file paths, function names, and specific code locations discovered during exploration.
|
|
1407
1407
|
- List concrete implementation steps in order.
|
|
1408
|
-
- Note any risks, dependencies, or trade-offs.`,hU0=_$({description:K34,inputSchema:$0(J34),outputSchema:$0(W34)})});function Y7($){return`studio-storage://${$}`}function Zn($){if($.startsWith("studio-storage://"))return $.slice(17);if($.startsWith("mesh-storage://"))return $.slice(15);return null}function om0(){return/(?:studio|mesh)-storage:\/\/([^\s"'<>[\]]+)/g}var zV=()=>{};var PV="https://chrome.browserless.io",AV=32000;import{z as NK}from"zod";function F34($,Z=!1){return{...$&&Z?{clip:{x:0,y:0,width:_G$.width,height:uU0}}:{fullPage:$},type:"jpeg",quality:N34}}function VG$($){if($[0]!==255||$[1]!==216)return null;let Z=new DataView($.buffer,$.byteOffset,$.byteLength),X=2;while(X+9<$.length){if($[X]!==255)return null;let Q=$[X+1];if(Q>=192&&Q<=207&&![196,200,204].includes(Q))return Z.getUint16(X+5);X+=2+Z.getUint16(X+2)}return null}function cU0($){if($>SG$){let Z=($/1048576).toFixed(1),X=SG$/1048576;throw Error(`Reference image too large: ${Z} MB (max ${X} MB). Use a smaller image.`)}}function O34($,Z){let X;try{X=new URL($)}catch{throw Error("Invalid image URL")}if(X.protocol!=="https:"&&!(Z&&X.protocol==="http:"))throw Error("Image URL must use HTTPS");for(let Q of w34)if(Q.test(X.hostname))throw Error("Image URL must not point to a private network address")}async function CG$($,Z){if(!Z?.getBytes)throw Error("Object storage read is not available");if(Z.head){let{size:Q}=await Z.head($);cU0(Q)}let X=await Z.getBytes($);return cU0(X.byteLength),X}async function B34($,Z){let X=Zn($);if(X!==null)return CG$(X,Z.objectStorage);let Q=$.match(H34);if(Q)return CG$(Q[1],Z.objectStorage);if($.startsWith("data:")){let J=$.match(/^data:[^;]+;base64,(.+)$/s);if(!J)throw Error("Invalid data: URI");let W=Buffer.from(J[1],"base64");return cU0(W.byteLength),W}O34($,Z.allowHttpExternalUrls===!0);let G=await fetch($,{signal:Z.abortSignal});if(!G.ok)throw Error(`Failed to fetch image from ${$}: ${G.status}`);let Y=new Uint8Array(await G.arrayBuffer());return cU0(Y.byteLength),Y}async function rm0($,Z){let{provider:X,imageModelInfo:Q,objectStorage:G}=Z,Y=X.aiSdk.imageModel(Q.id),J=$.referenceImages&&$.referenceImages.length>0,W=J?await Promise.all($.referenceImages.map((w)=>{let O=w.uri??w.url;if(!O)throw Error("Reference image missing uri");return B34(O,Z)})):[],K=J?{text:$.prompt,images:W}:$.prompt,H=await B50({model:Y,prompt:K,n:$.n??1,...$.aspectRatio?{aspectRatio:$.aspectRatio}:{},...Z.abortSignal?{abortSignal:Z.abortSignal}:{}});if(!G)throw Error("Object storage is unavailable; cannot persist the generated image.");let N=$.n??1,F=H.images.length>N?H.images.slice(-N):H.images;return{success:!0,images:await Promise.all(F.map(async(w)=>{let O=w.mediaType??"image/png",D=O.split("/")[1]??"png",L=`generated-images/${crypto.randomUUID()}.${D}`,E=Uint8Array.from(atob(w.base64),(j)=>j.charCodeAt(0));return await G.put(L,E,{contentType:O}),{uri:Y7(L),mediaType:O}})),prompt:$.prompt,model:Q.id,usage:{inputTokens:H.usage.inputTokens??0,outputTokens:H.usage.outputTokens??0},usedReferenceImages:J?$.referenceImages.length:0}}function lU0($,Z){return _$({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:$0(Xn),execute:async(X,Q)=>{let G=performance.now();try{return await rm0(X,Z)}finally{$.write({type:"data-tool-metadata",id:Q.toolCallId,data:{latencyMs:performance.now()-G}})}}})}function dU0($,Z){let{objectStorage:X,toolOutputMap:Q,pendingImages:G}=Z;return _$({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:$0(U34),execute:async(Y,J)=>{let W=performance.now();try{let K=Z.browserlessToken??process.env.BROWSERLESS_TOKEN;if(!K)return{success:!1,error:"BROWSERLESS_TOKEN is not configured."};let H=Y.fullPage??!1,N=async(j)=>await fetch(`${PV}/screenshot?token=${encodeURIComponent(K)}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({url:Y.url,options:F34(H,j),viewport:_G$})}),F=await N(!1);if(!F.ok){let j=await F.text().catch(()=>"Unknown error");return{success:!1,error:`Browserless screenshot failed (${F.status}): ${j}`,url:Y.url}}let U=new Uint8Array(await F.arrayBuffer()),w=VG$(U);if(H&&w!==null&&w>uU0){F=await N(!0);let j=F.ok?new Uint8Array(await F.arrayBuffer()):null;if(!j||(VG$(j)??0)>uU0)return{success:!1,error:`Full-page screenshot of ${Y.url} is ${w}px tall, over the ${uU0}px limit, and the clipped retry did not come back within it. Retry with fullPage: false.`,url:Y.url};U=j}let O="image/jpeg",D=`screenshots/${crypto.randomUUID()}.jpg`,L,E=null;if(X)try{await X.put(D,U,{contentType:O}),L=Y7(D),E=await X.presignedGetUrl?.(D,600)??null}catch(j){console.error("[take-screenshot] Failed to upload, using data: URI fallback",j),L=`data:${O};base64,${Buffer.from(U).toString("base64")}`}else L=`data:${O};base64,${Buffer.from(U).toString("base64")}`;if(!E)E=L.startsWith("data:")?L:`data:${O};base64,${Buffer.from(U).toString("base64")}`;return G.push({url:E,mediaType:O,pageUrl:Y.url}),Q.set(J.toolCallId,`Screenshot of ${Y.url} stored at ${L}`),{success:!0,image:{uri:L,mediaType:O},url:Y.url}}finally{$.write({type:"data-tool-metadata",id:J.toolCallId,data:{latencyMs:performance.now()-W}})}},toModelOutput({output:Y}){if(!Y.success)return{type:"text",value:Y.error??"Screenshot failed"};return{type:"text",value:`Screenshot of ${Y.url} captured successfully. The image is attached below.`}}})}var H34,SG$=20971520,_G$,N34=80,uU0=7000,Xn,U34,w34;var Rx=B(()=>{k4();k4();zV();H34=/\/api\/[^/]+\/files\/([^?#]+)/,_G$={width:1280,height:800};Xn=NK.object({prompt:NK.string().max(1e4).describe("Detailed description of the image to generate. Be specific about style, composition, colors, and subject matter."),referenceImages:NK.array(NK.object({uri:NK.string().describe("URI of the reference image (e.g. studio-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:NK.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:NK.number().int().min(1).max(4).optional().describe("Number of images to generate. Defaults to 1.")}),U34=NK.object({url:NK.string().url().describe("The URL of the web page to screenshot."),fullPage:NK.boolean().optional().describe("When true, captures the full scrollable page instead of just the viewport. Defaults to false.")}),w34=[/^127\./,/^10\./,/^172\.(1[6-9]|2\d|3[01])\./,/^192\.168\./,/^169\.254\./,/^0\./,/^\[::1\]$/,/^\[fd/,/^\[fe80:/,/^\[::ffff:/i,/^localhost$/i]});function vG$($,Z){return lU0($,{provider:Z.provider,imageModelInfo:Z.imageModelInfo,objectStorage:Z.objectStorage,allowHttpExternalUrls:Z.allowHttpExternalUrls})}var bG$=B(()=>{Rx()});import{z as D34}from"zod";function fG$($){return{background:!0,status:"started",jobId:$,note:L34}}function j34($){return!!$&&typeof $==="object"&&$.status==="started"&&$.background===!0}function Qn($,Z,X,Q,G){if(!Q)return X;let Y=X.execute,J=$0(Z.extend(E34)),K=Y.constructor.name==="AsyncGeneratorFunction"?async function*(N,F){let{background:U,...w}=N,O=async function*(){let{jobId:z}=await Q.start({toolName:$,input:w,toolCallId:F.toolCallId});yield fG$(z)};if(U){yield*O();return}let D=G?.(F.toolCallId);if(!D){yield*Y(w,F);return}let L=new AbortController,E=()=>L.abort();F.abortSignal?.addEventListener("abort",E,{once:!0});let j=Y(w,{...F,abortSignal:L.signal})[Symbol.asyncIterator]();try{let z=j.next(),A=z.then((P)=>({kind:"next",r:P}));while(!0){let P=await Promise.race([A,D.flipped.then(()=>({kind:"flip"}))]);if(P.kind==="flip"){L.abort(),A.catch(()=>{}),(async()=>{try{await z}catch{}try{await j.return?.(void 0)}catch{}})(),yield*O();return}if(P.r.done)return;yield P.r.value,z=j.next(),A=z.then((M)=>({kind:"next",r:M}))}}finally{F.abortSignal?.removeEventListener("abort",E),D.dispose()}}:async(N,F)=>{let{background:U,...w}=N;if(U){let{jobId:O}=await Q.start({toolName:$,input:w,toolCallId:F.toolCallId});return fG$(O)}return Y(w,F)};return{...X,inputSchema:J,execute:K,toModelOutput:(N)=>{if(j34(N.output))return{type:"text",value:N.output.note};if(X.toModelOutput)return X.toModelOutput(N);return{type:"text",value:JSON.stringify(N.output)}}}}var L34,E34;var am0=B(()=>{k4();L34="Running in the background. The result will appear in the conversation as "+"soon as it's ready \u2014 keep helping the user in the meantime, and do not "+"wait for it or call this tool again for the same request.",E34={background:D34.boolean().optional().describe("Run this in the BACKGROUND and return immediately instead of blocking this turn. Set true for long, fire-and-forget work whose result you do "+"NOT need in this same reply \u2014 it's delivered to the conversation when "+"it finishes and you'll be nudged to use it then. Leave false/omit when you need the result now to act on it this turn.")}});function xG$($,Z){let X=Gn.get($);if(!X)X=new Map,Gn.set($,X);let Q,G=new Promise((Y)=>{Q=Y});return X.set(Z,Q),{flipped:G,dispose(){let Y=Gn.get($);if(!Y)return;if(Y.delete(Z),Y.size===0)Gn.delete($)}}}function sm0($,Z){Gn.get($)?.get(Z)?.()}var Gn;var em0=B(()=>{Gn=new Map});import{z as yG$}from"zod";function $i0($,Z){let{researchJob:X,toolOutputMap:Q,taskId:G}=Z;return _$({description:Z.description??P34,inputSchema:$0(z34),execute:async(Y,J)=>{let W=performance.now(),K=(H)=>{$.write({type:"data-web-search",id:J.toolCallId,data:{text:H}})};try{let H=X({query:Y.query,taskId:G,toolCallId:J.toolCallId,abortSignal:J.abortSignal}),N=await H.next();while(!N.done)K(N.value.progress),N=await H.next();let F=N.value;return Q.set(J.toolCallId,F.text),A34({query:Y.query,text:F.text,citations:F.citations,usage:F.usage,resultUri:F.resultUri??null,preview:F.preview??""})}finally{let H=performance.now()-W;$.write({type:"data-tool-metadata",id:J.toolCallId,data:{latencyMs:H}})}}})}function A34($){if($.resultUri)return{success:!0,uri:$.resultUri,preview:$.preview,query:$.query,usage:$.usage,...$.citations.length>0&&{citations:$.citations}};return{success:!0,content:$.text,query:$.query,usage:$.usage,...$.citations.length>0&&{citations:$.citations}}}var z34,P34="Search the web for up-to-date information and synthesize a concise answer. Use this for quick lookups, fact-checking, current events, or when the answer requires knowledge beyond your training data and a fast response is enough. For exhaustive, multi-source reports prefer `deep_research` when available.";var gG$=B(()=>{k4();z34=yG$.object({query:yG$.string().max(1e4).describe("The research query. Be specific about what information you need. The research model will search the web and synthesize a comprehensive answer.")})});var hG$=B(()=>{Dm0()});var uG$=B(()=>{hG$()});function MG($,Z,X){let Q=Object.entries(X).filter(([,Y])=>Y!==void 0&&Y!==null).map(([Y,J])=>`${Y}=${typeof J==="string"?J:JSON.stringify(J)}`).join(" "),G=`[web-search] ${Z} ${Q}`.trim();if($==="error")console.error(G);else if($==="warn")console.warn(G);else console.log(G)}function Zi0($){let{provider:Z,modelInfo:X,ctx:Q,mode:G,toolName:Y}=$,J=X.id;return async function*(K){let H=Z.asyncResearch;if(G==="deep"&&H?.canHandle(J)===!0&&H)return yield*T34({params:K,asyncResearch:H,providerId:Z.info.id,modelId:J,toolName:Y,ctx:Q});return yield*I34({params:K,provider:Z,modelId:J,ctx:Q})}}async function*T34({params:$,asyncResearch:Z,providerId:X,modelId:Q,toolName:G,ctx:Y}){let{toolCallId:J,taskId:W}=$,K={tc:J,thread:W,provider:X,model:Q},H=await Y.storage.asyncResearchJobs.upsertPending({threadId:W,toolCallId:J,provider:X,modelId:Q,query:$.query});if(H.status==="completed"&&H.resultPreview!=null)return MG("info","replay-completed",{...K,job:H.id}),R34(H);if(H.status==="failed"||H.status==="cancelled")throw MG("warn",`replay-${H.status}`,{...K,job:H.id,err:H.lastError}),Error(H.lastError??`previous research ${H.status}`);if(!H.interactionId){MG("info","submit",{...K,job:H.id});let w;try{w=(await Z.start({modelId:Q,query:$.query,abortSignal:$.abortSignal})).jobId}catch(O){let D=O.message??String(O);throw await Y.storage.asyncResearchJobs.markFailed(J,D),MG("error","submit-failed",{...K,job:H.id,err:D}),O}await Y.storage.asyncResearchJobs.markPolling(J,w,{threadId:W,toolName:G,query:$.query}),H={...H,interactionId:w,status:"polling"},MG("info","polling-started",{...K,job:H.id,interaction:w})}else MG("info","polling-resumed",{...K,job:H.id,interaction:H.interactionId,attempts:H.attempts});let N=0,F=50,U=[];try{let w=!1,O,D=Z.resume({jobId:H.interactionId,abortSignal:$.abortSignal,onProgress:(P)=>{let M=Date.now();if(M-N>=F)N=M,U.push(P);Y.storage.asyncResearchJobs.recordPoll(J).catch((k)=>{MG("warn","record-poll-failed",{...K,job:H.id,err:k.message})})}}).catch((P)=>{O=P;return}).finally(()=>{w=!0});while(!w){while(U.length>0)yield{progress:U.shift()};await Promise.race([D,y$(F)])}while(U.length>0)yield{progress:U.shift()};if(await D,O!==void 0)throw O;let L=await D;if(yield{progress:L.text},L.text.trim()==="")throw MG("error","empty-result",{...K,job:H.id,tokens:L.usage.outputTokens}),new LV("research completed with empty result");let E={inputTokens:L.usage.inputTokens,outputTokens:L.usage.outputTokens},j=L.usage.outputTokens>AV&&Y.objectStorage!=null,z=null;if(j&&Y.objectStorage){let P=`web-search/${crypto.randomUUID()}.md`;try{await Y.objectStorage.put(P,new TextEncoder().encode(L.text),{contentType:"text/markdown"}),z=Y7(P)}catch(M){MG("warn","blob-upload-failed",{...K,job:H.id,err:M.message})}}let A=cX(L.text);return await Y.storage.asyncResearchJobs.markCompleted(J,{inputTokens:E.inputTokens,outputTokens:E.outputTokens,citations:L.citations,resultUri:z,resultPreview:A,resultContent:z?null:L.text}),MG("info","completed",{...K,job:H.id,tokens:E.outputTokens,citations:L.citations.length,uri:z??"inline"}),{text:L.text,citations:L.citations,usage:E,resultUri:z,preview:z?A:void 0}}catch(w){if($.abortSignal?.aborted)throw await Y.storage.asyncResearchJobs.markCancelled(J,"aborted"),MG("info","cancelled",{...K,job:H.id}),w;let O=w.message??String(w);if(w instanceof LV||w instanceof Error&&w.name==="AsyncResearchTerminalError")throw await Y.storage.asyncResearchJobs.markFailed(J,O),MG("error","terminal-failure",{...K,job:H.id,err:O}),w;throw await Y.storage.asyncResearchJobs.recordPoll(J,O).catch(()=>{}),MG("warn","transient-error",{...K,job:H.id,err:O}),w}}function R34($){if($.resultUri)return{text:"",citations:[],usage:{inputTokens:0,outputTokens:0},resultUri:$.resultUri,preview:$.resultPreview??""};return{text:$.resultContent??$.resultPreview??"",citations:[],usage:{inputTokens:0,outputTokens:0},resultUri:null}}async function*I34({params:$,provider:Z,modelId:X,ctx:Q}){let G=Z.aiSdk.languageModel(X),Y=Aw({model:G,prompt:$.query,abortSignal:$.abortSignal}),J="",W=0,K=50;for await(let L of Y.textStream){J+=L;let E=Date.now();if(E-W>=K)W=E,yield{progress:J}}yield{progress:J};let[H,N,F]=await Promise.all([Y.usage,Y.sources,Y.providerMetadata]),U=H.inputTokens??0,w=H.outputTokens??0;P$0(F);let O=[];if(N&&Array.isArray(N)){for(let L of N)if(L&&typeof L==="object"&&"sourceType"in L&&L.sourceType==="url"&&"url"in L&&typeof L.url==="string")O.push({url:L.url,title:"title"in L&&typeof L.title==="string"?L.title:void 0})}let D={inputTokens:U,outputTokens:w};if(w>AV&&Q.objectStorage){let L=`web-search/${crypto.randomUUID()}.md`,E=new TextEncoder().encode(J);try{return await Q.objectStorage.put(L,E,{contentType:"text/markdown"}),{text:J,citations:O,usage:D,resultUri:Y7(L),preview:cX(J)}}catch(j){console.error("[web-search] Failed to upload to storage, returning inline",j)}}return{text:J,citations:O,usage:D,resultUri:null}}var cG$=B(()=>{k4();E6();uG$();L8();zV();AN()});function lG$($,Z){return dU0($,{objectStorage:Z.objectStorage,toolOutputMap:Z.toolOutputMap,pendingImages:Z.pendingImages})}var dG$=B(()=>{Rx()});import{z as mG$}from"zod";function nG$($,Z){let{browserless:X,objectStorage:Q,toolOutputMap:G}=Z;return _$({description:"Scrape the rendered HTML content of a web page. Use this when you need to read the content, structure, or data from a website. Returns the full HTML of the page after JavaScript has been executed. "+"For very large pages the result may be truncated \u2014 use read_tool_output to access the full content.",inputSchema:$0(M34),execute:async(Y,J)=>{let W=performance.now();try{let K;try{K=await fetch(`${X.baseUrl}/content?token=${encodeURIComponent(X.token)}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({url:Y.url}),signal:AbortSignal.timeout(iG$)})}catch(F){return{success:!1,error:F instanceof Error&&F.name==="TimeoutError"?`Browserless content fetch timed out after ${iG$}ms`:`Browserless content fetch failed: ${F instanceof Error?F.message:String(F)}`,url:Y.url}}if(!K.ok){let F=await K.text().catch(()=>"Unknown error");return{success:!1,error:`Browserless content fetch failed (${K.status}): ${F.slice(0,q34)}`,url:Y.url}}let H=await K.text();G.set(J.toolCallId,H);let N=r7(H);if(N>AV){let F=`scraped-pages/${crypto.randomUUID()}.html`,U=new TextEncoder().encode(H);try{await Q.put(F,U,{contentType:"text/html"});let w=cX(H);return{success:!0,uri:Y7(F),preview:w,url:Y.url,tokenCount:N}}catch(w){console.error("[scrape-url] Failed to upload to storage, returning inline",w)}}return{success:!0,content:H,url:Y.url,tokenCount:N}}finally{let K=performance.now()-W;$.write({type:"data-tool-metadata",id:J.toolCallId,data:{latencyMs:K}})}}})}var iG$=45000,q34=500,M34;var pG$=B(()=>{k4();AN();zV();M34=mG$.object({url:mG$.string().url().describe("The URL of the web page to scrape.")})});import{z as mU0}from"zod";function S34($,Z){let X=Z.waitUntil??"networkidle2",Q=Z.evaluate?JSON.stringify(Z.evaluate):"null";return`
|
|
1408
|
+
- Note any risks, dependencies, or trade-offs.`,hU0=_$({description:K34,inputSchema:$0(J34),outputSchema:$0(W34)})});function Y7($){return`studio-storage://${$}`}function Zn($){if($.startsWith("studio-storage://"))return $.slice(17);if($.startsWith("mesh-storage://"))return $.slice(15);return null}function om0(){return/(?:studio|mesh)-storage:\/\/([^\s"'<>[\]]+)/g}var zV=()=>{};var PV="https://chrome.browserless.io",AV=32000;import{z as NK}from"zod";function F34($,Z=!1){return{...$&&Z?{clip:{x:0,y:0,width:_G$.width,height:uU0}}:{fullPage:$},type:"jpeg",quality:N34}}function VG$($){if($[0]!==255||$[1]!==216)return null;let Z=new DataView($.buffer,$.byteOffset,$.byteLength),X=2;while(X+9<$.length){if($[X]!==255)return null;let Q=$[X+1];if(Q>=192&&Q<=207&&![196,200,204].includes(Q))return Z.getUint16(X+5);X+=2+Z.getUint16(X+2)}return null}function cU0($){if($>SG$){let Z=($/1048576).toFixed(1),X=SG$/1048576;throw Error(`Reference image too large: ${Z} MB (max ${X} MB). Use a smaller image.`)}}function O34($,Z){let X;try{X=new URL($)}catch{throw Error("Invalid image URL")}if(X.protocol!=="https:"&&!(Z&&X.protocol==="http:"))throw Error("Image URL must use HTTPS");for(let Q of w34)if(Q.test(X.hostname))throw Error("Image URL must not point to a private network address")}async function CG$($,Z){if(!Z?.getBytes)throw Error("Object storage read is not available");if(Z.head){let{size:Q}=await Z.head($);cU0(Q)}let X=await Z.getBytes($);return cU0(X.byteLength),X}async function B34($,Z){let X=Zn($);if(X!==null)return CG$(X,Z.objectStorage);let Q=$.match(H34);if(Q)return CG$(Q[1],Z.objectStorage);if($.startsWith("data:")){let J=$.match(/^data:[^;]+;base64,(.+)$/s);if(!J)throw Error("Invalid data: URI");let W=Buffer.from(J[1],"base64");return cU0(W.byteLength),W}O34($,Z.allowHttpExternalUrls===!0);let G=await fetch($,{signal:Z.abortSignal});if(!G.ok)throw Error(`Failed to fetch image from ${$}: ${G.status}`);let Y=new Uint8Array(await G.arrayBuffer());return cU0(Y.byteLength),Y}async function rm0($,Z){let{provider:X,imageModelInfo:Q,objectStorage:G}=Z,Y=X.aiSdk.imageModel(Q.id),J=$.referenceImages&&$.referenceImages.length>0,W=J?await Promise.all($.referenceImages.map((w)=>{let O=w.uri??w.url;if(!O)throw Error("Reference image missing uri");return B34(O,Z)})):[],K=J?{text:$.prompt,images:W}:$.prompt,H=await B50({model:Y,prompt:K,n:$.n??1,...$.aspectRatio?{aspectRatio:$.aspectRatio}:{},...Z.abortSignal?{abortSignal:Z.abortSignal}:{}});if(!G)throw Error("Object storage is unavailable; cannot persist the generated image.");let N=$.n??1,F=H.images.length>N?H.images.slice(-N):H.images;return{success:!0,images:await Promise.all(F.map(async(w)=>{let O=w.mediaType??"image/png",D=O.split("/")[1]??"png",L=`generated-images/${crypto.randomUUID()}.${D}`,E=Uint8Array.from(atob(w.base64),(j)=>j.charCodeAt(0));return await G.put(L,E,{contentType:O}),{uri:Y7(L),mediaType:O}})),prompt:$.prompt,model:Q.id,usage:{inputTokens:H.usage.inputTokens??0,outputTokens:H.usage.outputTokens??0},usedReferenceImages:J?$.referenceImages.length:0}}function lU0($,Z){return _$({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:$0(Xn),execute:async(X,Q)=>{let G=performance.now();try{return await rm0(X,Z)}finally{$.write({type:"data-tool-metadata",id:Q.toolCallId,data:{latencyMs:performance.now()-G}})}}})}function dU0($,Z){let{objectStorage:X,toolOutputMap:Q,pendingImages:G}=Z;return _$({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:$0(U34),execute:async(Y,J)=>{let W=performance.now();try{let K=Z.browserlessToken??process.env.BROWSERLESS_TOKEN;if(!K)return{success:!1,error:"BROWSERLESS_TOKEN is not configured."};let H=Y.fullPage??!1,N=async(j)=>await fetch(`${PV}/screenshot?token=${encodeURIComponent(K)}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({url:Y.url,options:F34(H,j),viewport:_G$})}),F=await N(!1);if(!F.ok){let j=await F.text().catch(()=>"Unknown error");return{success:!1,error:`Browserless screenshot failed (${F.status}): ${j}`,url:Y.url}}let U=new Uint8Array(await F.arrayBuffer()),w=VG$(U);if(H&&w!==null&&w>uU0){F=await N(!0);let j=F.ok?new Uint8Array(await F.arrayBuffer()):null;if(!j||(VG$(j)??0)>uU0)return{success:!1,error:`Full-page screenshot of ${Y.url} is ${w}px tall, over the ${uU0}px limit, and the clipped retry did not come back within it. Retry with fullPage: false.`,url:Y.url};U=j}let O="image/jpeg",D=`screenshots/${crypto.randomUUID()}.jpg`,L,E=null;if(X)try{await X.put(D,U,{contentType:O}),L=Y7(D),E=await X.presignedGetUrl?.(D,600)??null}catch(j){console.error("[take-screenshot] Failed to upload, using data: URI fallback",j),L=`data:${O};base64,${Buffer.from(U).toString("base64")}`}else L=`data:${O};base64,${Buffer.from(U).toString("base64")}`;if(!E)E=L.startsWith("data:")?L:`data:${O};base64,${Buffer.from(U).toString("base64")}`;return G.push({url:E,mediaType:O,pageUrl:Y.url}),Q.set(J.toolCallId,`Screenshot of ${Y.url} stored at ${L}`),{success:!0,image:{uri:L,mediaType:O},url:Y.url}}finally{$.write({type:"data-tool-metadata",id:J.toolCallId,data:{latencyMs:performance.now()-W}})}},toModelOutput({output:Y}){if(!Y.success)return{type:"text",value:Y.error??"Screenshot failed"};return{type:"text",value:`Screenshot of ${Y.url} captured successfully. The image is attached below.`}}})}var H34,SG$=20971520,_G$,N34=80,uU0=7000,Xn,U34,w34;var Rx=B(()=>{k4();k4();zV();H34=/\/api\/[^/]+\/files\/([^?#]+)/,_G$={width:1280,height:800};Xn=NK.object({prompt:NK.string().max(1e4).describe("Detailed description of the image to generate. Be specific about style, composition, colors, and subject matter."),referenceImages:NK.array(NK.object({uri:NK.string().describe("URI of the reference image (e.g. studio-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:NK.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:NK.number().int().min(1).max(4).optional().describe("Number of images to generate. Defaults to 1.")}),U34=NK.object({url:NK.string().url().describe("The URL of the web page to screenshot."),fullPage:NK.boolean().optional().describe("When true, captures the full scrollable page instead of just the viewport. Defaults to false.")}),w34=[/^127\./,/^10\./,/^172\.(1[6-9]|2\d|3[01])\./,/^192\.168\./,/^169\.254\./,/^0\./,/^\[::1\]$/,/^\[fd/,/^\[fe80:/,/^\[::ffff:/i,/^localhost$/i]});function vG$($,Z){return lU0($,{provider:Z.provider,imageModelInfo:Z.imageModelInfo,objectStorage:Z.objectStorage,allowHttpExternalUrls:Z.allowHttpExternalUrls})}var bG$=B(()=>{Rx()});import{z as D34}from"zod";function fG$($){return{background:!0,status:"started",jobId:$,note:L34}}function j34($){return!!$&&typeof $==="object"&&$.status==="started"&&$.background===!0}function Qn($,Z,X,Q,G){if(!Q)return X;let Y=X.execute,J=$0(Z.extend(E34)),K=Y.constructor.name==="AsyncGeneratorFunction"?async function*(N,F){let{background:U,...w}=N,O=async function*(){let{jobId:z}=await Q.start({toolName:$,input:w,toolCallId:F.toolCallId});yield fG$(z)};if(U){yield*O();return}let D=G?.(F.toolCallId);if(!D){yield*Y(w,F);return}let L=new AbortController,E=()=>L.abort();F.abortSignal?.addEventListener("abort",E,{once:!0});let j=Y(w,{...F,abortSignal:L.signal})[Symbol.asyncIterator]();try{let z=j.next(),A=z.then((P)=>({kind:"next",r:P}));while(!0){let P=await Promise.race([A,D.flipped.then(()=>({kind:"flip"}))]);if(P.kind==="flip"){L.abort(),A.catch(()=>{}),(async()=>{try{await z}catch{}try{await j.return?.(void 0)}catch{}})(),yield*O();return}if(P.r.done)return;yield P.r.value,z=j.next(),A=z.then((M)=>({kind:"next",r:M}))}}finally{F.abortSignal?.removeEventListener("abort",E),D.dispose()}}:async(N,F)=>{let{background:U,...w}=N;if(U){let{jobId:O}=await Q.start({toolName:$,input:w,toolCallId:F.toolCallId});return fG$(O)}return Y(w,F)};return{...X,inputSchema:J,execute:K,toModelOutput:(N)=>{if(j34(N.output))return{type:"text",value:N.output.note};if(X.toModelOutput)return X.toModelOutput(N);return{type:"text",value:JSON.stringify(N.output)}}}}var L34,E34;var am0=B(()=>{k4();L34="Running in the background. The result will appear in the conversation as "+"soon as it's ready \u2014 keep helping the user in the meantime, and do not "+"wait for it or call this tool again for the same request.",E34={background:D34.boolean().optional().describe("Run this in the BACKGROUND and return immediately instead of blocking this turn. Set true for long, fire-and-forget work whose result you do "+"NOT need in this same reply \u2014 it's delivered to the conversation when "+"it finishes and you'll be nudged to use it then. Leave false/omit when you need the result now to act on it this turn.")}});function xG$($,Z){let X=Gn.get($);if(!X)X=new Map,Gn.set($,X);let Q,G=new Promise((Y)=>{Q=Y});return X.set(Z,Q),{flipped:G,dispose(){let Y=Gn.get($);if(!Y)return;if(Y.delete(Z),Y.size===0)Gn.delete($)}}}function sm0($,Z){Gn.get($)?.get(Z)?.()}var Gn;var em0=B(()=>{Gn=new Map});import{z as yG$}from"zod";function $i0($,Z){let{researchJob:X,toolOutputMap:Q,taskId:G}=Z;return _$({description:Z.description??P34,inputSchema:$0(z34),execute:async(Y,J)=>{let W=performance.now(),K=(H)=>{$.write({type:"data-web-search",id:J.toolCallId,data:{text:H}})};try{let H=X({query:Y.query,taskId:G,toolCallId:J.toolCallId,abortSignal:J.abortSignal}),N=await H.next();while(!N.done)K(N.value.progress),N=await H.next();let F=N.value;return Q.set(J.toolCallId,F.text),A34({query:Y.query,text:F.text,citations:F.citations,usage:F.usage,resultUri:F.resultUri??null,preview:F.preview??""})}finally{let H=performance.now()-W;$.write({type:"data-tool-metadata",id:J.toolCallId,data:{latencyMs:H}})}}})}function A34($){if($.resultUri)return{success:!0,uri:$.resultUri,preview:$.preview,query:$.query,usage:$.usage,...$.citations.length>0&&{citations:$.citations}};return{success:!0,content:$.text,query:$.query,usage:$.usage,...$.citations.length>0&&{citations:$.citations}}}var z34,P34="Search the web for up-to-date information and synthesize a concise answer. Use this for quick lookups, fact-checking, current events, or when the answer requires knowledge beyond your training data and a fast response is enough. For exhaustive, multi-source reports prefer `deep_research` when available.";var gG$=B(()=>{k4();z34=yG$.object({query:yG$.string().max(1e4).describe("The research query. Be specific about what information you need. The research model will search the web and synthesize a comprehensive answer.")})});var hG$=B(()=>{Dm0()});var uG$=B(()=>{hG$()});function MG($,Z,X){let Q=Object.entries(X).filter(([,Y])=>Y!==void 0&&Y!==null).map(([Y,J])=>`${Y}=${typeof J==="string"?J:JSON.stringify(J)}`).join(" "),G=`[web-search] ${Z} ${Q}`.trim();if($==="error")console.error(G);else if($==="warn")console.warn(G);else console.log(G)}function Zi0($){let{provider:Z,modelInfo:X,ctx:Q,mode:G,toolName:Y}=$,J=X.id;return async function*(K){let H=Z.asyncResearch;if(G==="deep"&&H?.canHandle(J)===!0&&H)return yield*T34({params:K,asyncResearch:H,providerId:Z.info.id,modelId:J,toolName:Y,ctx:Q});return yield*I34({params:K,provider:Z,modelId:J,ctx:Q})}}async function*T34({params:$,asyncResearch:Z,providerId:X,modelId:Q,toolName:G,ctx:Y}){let{toolCallId:J,taskId:W}=$,K={tc:J,thread:W,provider:X,model:Q},H=await Y.storage.asyncResearchJobs.upsertPending({threadId:W,toolCallId:J,provider:X,modelId:Q,query:$.query});if(H.status==="completed"&&H.resultPreview!=null)return MG("info","replay-completed",{...K,job:H.id}),R34(H);if(H.status==="failed"||H.status==="cancelled")throw MG("warn",`replay-${H.status}`,{...K,job:H.id,err:H.lastError}),Error(H.lastError??`previous research ${H.status}`);if(!H.interactionId){MG("info","submit",{...K,job:H.id});let w;try{w=(await Z.start({modelId:Q,query:$.query,abortSignal:$.abortSignal})).jobId}catch(O){let D=O.message??String(O);throw await Y.storage.asyncResearchJobs.markFailed(J,D),MG("error","submit-failed",{...K,job:H.id,err:D}),O}await Y.storage.asyncResearchJobs.markPolling(J,w,{threadId:W,toolName:G,query:$.query}),H={...H,interactionId:w,status:"polling"},MG("info","polling-started",{...K,job:H.id,interaction:w})}else MG("info","polling-resumed",{...K,job:H.id,interaction:H.interactionId,attempts:H.attempts});let N=0,F=50,U=[];try{let w=!1,O,D=Z.resume({jobId:H.interactionId,abortSignal:$.abortSignal,onProgress:(P)=>{let M=Date.now();if(M-N>=F)N=M,U.push(P);Y.storage.asyncResearchJobs.recordPoll(J).catch((k)=>{MG("warn","record-poll-failed",{...K,job:H.id,err:k.message})})}}).catch((P)=>{O=P;return}).finally(()=>{w=!0});while(!w){while(U.length>0)yield{progress:U.shift()};await Promise.race([D,y$(F)])}while(U.length>0)yield{progress:U.shift()};if(await D,O!==void 0)throw O;let L=await D;if(yield{progress:L.text},L.text.trim()==="")throw MG("error","empty-result",{...K,job:H.id,tokens:L.usage.outputTokens}),new LV("research completed with empty result");let E={inputTokens:L.usage.inputTokens,outputTokens:L.usage.outputTokens},j=L.usage.outputTokens>AV&&Y.objectStorage!=null,z=null;if(j&&Y.objectStorage){let P=`web-search/${crypto.randomUUID()}.md`;try{await Y.objectStorage.put(P,new TextEncoder().encode(L.text),{contentType:"text/markdown"}),z=Y7(P)}catch(M){MG("warn","blob-upload-failed",{...K,job:H.id,err:M.message})}}let A=cX(L.text);return await Y.storage.asyncResearchJobs.markCompleted(J,{inputTokens:E.inputTokens,outputTokens:E.outputTokens,citations:L.citations,resultUri:z,resultPreview:A,resultContent:z?null:L.text}),MG("info","completed",{...K,job:H.id,tokens:E.outputTokens,citations:L.citations.length,uri:z??"inline"}),{text:L.text,citations:L.citations,usage:E,resultUri:z,preview:z?A:void 0}}catch(w){if($.abortSignal?.aborted)throw await Y.storage.asyncResearchJobs.markCancelled(J,"aborted"),MG("info","cancelled",{...K,job:H.id}),w;let O=w.message??String(w);if(w instanceof LV||w instanceof Error&&w.name==="AsyncResearchTerminalError")throw await Y.storage.asyncResearchJobs.markFailed(J,O),MG("error","terminal-failure",{...K,job:H.id,err:O}),w;throw await Y.storage.asyncResearchJobs.recordPoll(J,O).catch(()=>{}),MG("warn","transient-error",{...K,job:H.id,err:O}),w}}function R34($){if($.resultUri)return{text:"",citations:[],usage:{inputTokens:0,outputTokens:0},resultUri:$.resultUri,preview:$.resultPreview??""};return{text:$.resultContent??$.resultPreview??"",citations:[],usage:{inputTokens:0,outputTokens:0},resultUri:null}}async function*I34({params:$,provider:Z,modelId:X,ctx:Q}){let G=Z.aiSdk.languageModel(X),Y=Aw({model:G,prompt:$.query,abortSignal:$.abortSignal}),J="",W=0,K=50;for await(let L of Y.textStream){J+=L;let E=Date.now();if(E-W>=K)W=E,yield{progress:J}}yield{progress:J};let[H,N,F]=await Promise.all([Y.usage,Y.sources,Y.providerMetadata]),U=H.inputTokens??0,w=H.outputTokens??0;P$0(F);let O=[];if(N&&Array.isArray(N)){for(let L of N)if(L&&typeof L==="object"&&"sourceType"in L&&L.sourceType==="url"&&"url"in L&&typeof L.url==="string")O.push({url:L.url,title:"title"in L&&typeof L.title==="string"?L.title:void 0})}let D={inputTokens:U,outputTokens:w};if(w>AV&&Q.objectStorage){let L=`web-search/${crypto.randomUUID()}.md`,E=new TextEncoder().encode(J);try{return await Q.objectStorage.put(L,E,{contentType:"text/markdown"}),{text:J,citations:O,usage:D,resultUri:Y7(L),preview:cX(J)}}catch(j){console.error("[web-search] Failed to upload to storage, returning inline",j)}}return{text:J,citations:O,usage:D,resultUri:null}}var cG$=B(()=>{k4();E6();uG$();L8();zV();AN()});function lG$($,Z){return dU0($,{objectStorage:Z.objectStorage,toolOutputMap:Z.toolOutputMap,pendingImages:Z.pendingImages})}var dG$=B(()=>{Rx()});import{z as mG$}from"zod";function nG$($,Z){let{browserless:X,objectStorage:Q,toolOutputMap:G}=Z;return _$({description:"Scrape the rendered HTML content of a web page. Use this when you need to read the content, structure, or data from a website. Returns the full HTML of the page after JavaScript has been executed. "+"For very large pages the result may be truncated \u2014 use read_tool_output to access the full content.",inputSchema:$0(M34),execute:async(Y,J)=>{let W=performance.now();try{let K;try{K=await fetch(`${X.baseUrl}/content?token=${encodeURIComponent(X.token)}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({url:Y.url}),signal:AbortSignal.timeout(iG$)})}catch(F){return{success:!1,error:F instanceof Error&&F.name==="TimeoutError"?`Browserless content fetch timed out after ${iG$}ms`:`Browserless content fetch failed: ${F instanceof Error?F.message:String(F)}`,url:Y.url}}if(!K.ok){let F=await K.text().catch(()=>"Unknown error");return{success:!1,error:`Browserless content fetch failed (${K.status}): ${F.slice(0,q34)}`,url:Y.url}}let H=await K.text();G.set(J.toolCallId,H);let N=r7(H);if(N>AV){let F=`scraped-pages/${crypto.randomUUID()}.html`,U=new TextEncoder().encode(H);try{await Q.put(F,U,{contentType:"text/html"});let w=cX(H);return{success:!0,uri:Y7(F),preview:w,url:Y.url,tokenCount:N}}catch(w){console.error("[scrape-url] Failed to upload to storage, returning inline",w)}}return{success:!0,content:H,url:Y.url,tokenCount:N}}finally{let K=performance.now()-W;$.write({type:"data-tool-metadata",id:J.toolCallId,data:{latencyMs:K}})}}})}var iG$=45000,q34=500,M34;var pG$=B(()=>{k4();AN();zV();M34=mG$.object({url:mG$.string().url().refine(($)=>/^https?:\/\//i.test($),{message:"URL must use http or https"}).describe("The URL of the web page to scrape.")})});import{z as mU0}from"zod";function S34($,Z){let X=Z.waitUntil??"networkidle2",Q=Z.evaluate?JSON.stringify(Z.evaluate):"null";return`
|
|
1409
1409
|
export default async function ({ page }) {
|
|
1410
1410
|
const consoleLogs = [];
|
|
1411
1411
|
const errors = [];
|
|
@@ -1450,7 +1450,7 @@ Guidelines:
|
|
|
1450
1450
|
}
|
|
1451
1451
|
return { consoleLogs, errors, evaluateResult };
|
|
1452
1452
|
}
|
|
1453
|
-
`,O=await fetch(`${PV}/function?token=${encodeURIComponent(H)}`,{method:"POST",headers:{"Content-Type":"application/javascript"},body:w});if(!O.ok){let j=await O.text().catch(()=>"Unknown error");return{success:!1,error:`Browserless function call failed (${O.status}): ${j}`,url:N.url}}let D=await O.json().catch(async()=>{return{error:`Browserless returned non-JSON response: ${(await O.text().catch(()=>"")).slice(0,200)}`}}),L=JSON.stringify(D,null,2);X.set(W.toolCallId,L);let E=r7(L);if(!("error"in D)&&E>ow&&Q){let j=`inspect-pages/${crypto.randomUUID()}.json`;return await Q.put(j,new TextEncoder().encode(L),{contentType:"application/json"}),{success:!0,uri:Y7(j),preview:cX(L),url:N.url,tokenCount:E,consoleLogCount:D.consoleLogs?.length??0,errorCount:D.errors?.length??0,hasEvaluateResult:D.evaluateResult!=null}}return{success:!("error"in D),...D,url:N.url,tokenCount:E}}finally{$.write({type:"data-tool-metadata",id:W.toolCallId,data:{latencyMs:performance.now()-K}})}}})}function sG$($){let{writer:Z,toolOutputMap:X,objectStorage:Q,pendingImages:G,imageTool:Y}=$,J={user_ask:xU0,todo_write:yU0,propose_plan:hU0,read_tool_output:vU0({toolOutputMap:X})};if(Y)J.generate_image=Qn("generate_image",Xn,lU0(Z,{...Y,objectStorage:Q}),null);if(process.env.BROWSERLESS_TOKEN){if(J.scrape_url=aG$(Z,{toolOutputMap:X,objectStorage:Q,kind:"scrape"}),J.inspect_page=aG$(Z,{toolOutputMap:X,objectStorage:Q,kind:"inspect"}),G)J.take_screenshot=dU0(Z,{objectStorage:Q,toolOutputMap:X,pendingImages:G})}return J}var eG$=B(()=>{k4();nm0();pm0();tm0();AN();zV();Rx();am0()});function Xi0($,Z=Date.now()){let X=new Date($.updated_at).getTime(),Q=$.last_progress_at?new Date($.last_progress_at).getTime():Number.NaN,G=Math.max(Number.isFinite(X)?X:Number.NEGATIVE_INFINITY,Number.isFinite(Q)?Q:Number.NEGATIVE_INFINITY);return!Number.isFinite(G)||Z-G>1800000}function yY($,Z=Date.now()){let X=$.status;if(X==="in_progress"&&Xi0($,Z))X="expired";return{id:$.id,organization_id:$.organization_id,title:$.title,description:$.description,created_at:$.created_at,updated_at:$.updated_at,created_by:$.created_by,updated_by:$.updated_by,hidden:$.hidden??!1,status:X,virtual_mcp_id:$.virtual_mcp_id||void 0,trigger_id:$.trigger_id,branch:$.branch,sandbox_provider_kind:$.sandbox_provider_kind,harness_id:$.harness_id,metadata:$.metadata&&Object.keys($.metadata).length>0?$.metadata:void 0,run_config:$.run_config}}var $Y$=1800000;var Qi0;var ZY$=B(()=>{Qi0=["in_progress","requires_action","failed","completed"]});import{z as T$}from"zod";var XY$,V34,QY$,FK,GY$,YY$;var TV=B(()=>{ZY$();XY$=T$.object({id:T$.string().describe("Unique message ID"),thread_id:T$.string().describe("ID of the parent thread"),metadata:T$.unknown().optional().describe("Optional message metadata"),parts:T$.array(T$.record(T$.string(),T$.unknown())).describe("Message content parts (AI SDK UIMessagePart format)"),role:T$.enum(["user","assistant","system"]).describe("Message role"),created_at:T$.string().datetime().describe("Timestamp of creation"),updated_at:T$.string().datetime().describe("Timestamp of last update")}),V34=T$.object({toolName:T$.string().describe("Fully qualified tool name"),appId:T$.string().describe("App ID that owns the tool"),args:T$.record(T$.string(),T$.unknown()).describe("Arguments used when expanding the tool"),expandedAt:T$.string().datetime().describe("When the tool was expanded")}),QY$=T$.object({expanded_tools:T$.array(V34).optional(),read_only:T$.boolean().optional().describe("The thread takes no further input (an autonomous run the user cannot continue)")}).catchall(T$.unknown()),FK=T$.object({id:T$.string().describe("Unique thread ID"),organization_id:T$.string().describe("Organization this thread belongs to"),title:T$.string().describe("Thread title"),description:T$.string().nullable().describe("Thread description"),created_at:T$.string().datetime().describe("Timestamp of creation"),updated_at:T$.string().datetime().describe("Timestamp of last update"),hidden:T$.boolean().optional().describe("Whether the thread is hidden"),status:T$.enum([...Qi0,"expired"]).describe("Thread execution status. 'expired' is virtual -- computed at read time for stale in_progress threads"),created_by:T$.string().describe("User ID who created the thread"),updated_by:T$.string().optional().describe("User ID who last updated the thread"),virtual_mcp_id:T$.string().optional().describe("Virtual MCP (agent) this thread was initiated with"),trigger_id:T$.string().nullable().optional().describe("Automation trigger that created this thread; null/absent for human-initiated threads."),branch:T$.string().nullable().optional().describe("Git branch this thread is pinned to (GitHub-linked vms only)"),sandbox_provider_kind:T$.string().nullable().optional().describe("Pinned on first message; identifies which sandbox provider to dispatch to (e.g. 'agent-sandbox', 'user-desktop')."),harness_id:T$.string().nullable().optional().describe("Pinned on first message; selects which harness runs the thread (e.g. 'claude-code', 'codex', 'decopilot')."),metadata:QY$.optional().describe("Free-form per-thread UI state (e.g. expanded_tools)"),run_config:T$.record(T$.string(),T$.unknown()).nullable().optional().describe("Persisted run configuration (contains agent and model info)")}),GY$=T$.object({id:T$.string().optional().describe("Optional custom ID for the thread"),title:T$.string().optional().describe("Thread title"),description:T$.string().nullish().describe("Thread description"),virtual_mcp_id:T$.string().describe("Virtual MCP (agent) this thread is bound to"),branch:T$.string().min(1).optional().describe("Preferred branch. Used only when the vMCP has a githubRepo; ignored otherwise. When omitted, the server picks the most-recently-touched branch from the user's sandboxMap, falling back to a freshly generated name.")}),YY$=T$.object({title:T$.string().optional().describe("New thread title"),description:T$.string().nullish().describe("New thread description"),hidden:T$.boolean().optional().describe("Whether the thread is hidden"),status:T$.enum(Qi0).optional().describe("New thread status (user-set override). 'expired' is a computed virtual status and cannot be set directly."),metadata:QY$.optional().describe("Full replacement of the thread's metadata object"),branch:T$.string().min(1).nullish().describe("New git branch for this thread"),virtual_mcp_id:T$.string().optional().describe("Re-point the thread at a different agent. Only meaningful for an unsent thread (changing the recipient of a new chat); the UI restricts it accordingly.")})});import{z as kG}from"zod";var C34,_34,RV;var Gi0=B(()=>{zY();v0();TV();C34=rJ.extend({where:kG.object({created_by:kG.string().optional(),trigger_ids:kG.array(kG.string()).optional(),virtual_mcp_id:kG.string().optional(),hidden:kG.boolean().optional(),has_trigger:kG.boolean().optional()}).optional(),startDate:kG.string().datetime().optional().describe("Filter threads updated at or after this ISO timestamp"),endDate:kG.string().datetime().optional().describe("Filter threads updated at or before this ISO timestamp"),search:kG.string().optional().describe("Full-text search on thread title (case-insensitive)"),status:kG.string().optional().describe("Filter by thread status (e.g. completed, failed, in_progress)"),userId:kG.string().optional().describe("Filter by the user who created the thread"),agentId:kG.string().optional().describe("Filter by agent (connection or virtual MCP) ID")}),_34=pH(FK),RV=m({name:"COLLECTION_THREADS_LIST",description:"List threads with filtering, sorting, and pagination.",annotations:{title:"List Threads",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:C34,outputSchema:_34,handler:async($,Z)=>{await Z.access.check();let X=Z.auth.user?.id;if(!X)throw Error("User ID required to list threads");r(Z);let Q=$.offset??0,G=$.limit??100,Y=$.where?.trigger_ids,J=$.where?.virtual_mcp_id,W=$.userId??($.where?.created_by==="me"?X:$.where?.created_by),{threads:K,total:H}=Y?.length?await Z.storage.threads.listByTriggerIds(Y,{limit:G,offset:Q}):await Z.storage.threads.list(W,{limit:G,offset:Q,virtualMcpId:J,startDate:$.startDate,endDate:$.endDate,search:$.search,status:$.status,agentId:$.agentId,includeArchived:$.where?.hidden,hasTrigger:$.where?.has_trigger}),N=Q+G<H,F=Date.now();return{items:K.map((U)=>yY(U,F)),totalCount:H,hasMore:N}}})});var v34,IV;var Yi0=B(()=>{zY();v0();TV();v34=Hm(FK),IV=m({name:"COLLECTION_THREADS_GET",description:"Get a thread's details and metadata by ID.",annotations:{title:"Get Thread",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:Km,outputSchema:v34,handler:async($,Z)=>{Z0(Z),r(Z),await Z.access.check();let X=await Z.storage.threads.get($.id);if(!X)return{item:null};return{item:yY(X)}}})});import{z as b34}from"zod";function JY$($){if(!$)return null;if("field"in $&&$.field[0]==="thread_id"&&$.operator==="eq")return String($.value);if("conditions"in $&&($.operator==="and"||$.operator==="or"))for(let Z of $.conditions){let X=JY$(Z);if(X)return X}return null}var f34,x34,qV;var Ji0=B(()=>{zY();v0();TV();f34=rJ.extend({thread_id:b34.string().optional().describe("ID of the thread to list messages for (required)")}),x34=pH(XY$),qV=m({name:"COLLECTION_THREAD_MESSAGES_LIST",description:"List messages in a thread with pagination. Requires thread_id. Returns messages in chronological order.",annotations:{title:"List Thread Messages",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:f34,outputSchema:x34,handler:async($,Z)=>{r(Z),await Z.access.check();let X=$.thread_id??JY$($.where);if(!X)throw Error("thread_id is required (provide as top-level param or in where clause)");let Q=$.offset??0,G=$.limit??100,Y=$.orderBy?.[0]?.direction??"asc",J=await Z.storage.threads.get(X);if(!J)return{items:[],totalCount:0,hasMore:!1};if(J.message_storage_version===2){let{messages:N,total:F}=await Z.storage.threads.messageParts().loadWindow(X,{limit:G,offset:Q,includeInFlight:!0});return{items:N.map((U)=>({id:U.id,thread_id:X,role:U.role,parts:U.parts,metadata:U.metadata??null,created_at:U.created_at,updated_at:U.created_at})),totalCount:F,hasMore:Q+G<F}}let{messages:W,total:K}=await Z.storage.threads.listMessages(X,{limit:G,offset:Q,sort:Y}),H=Q+G<K;return{items:W,totalCount:K,hasMore:H}}})});function WY$($){return{search_threads:_$({description:RV.description,inputSchema:$0(RV.inputSchema),execute:(Z)=>RV.execute(Z,$)}),get_thread:_$({description:IV.description,inputSchema:$0(IV.inputSchema),execute:(Z)=>IV.execute(Z,$)}),list_thread_messages:_$({description:qV.description,inputSchema:$0(qV.inputSchema),execute:(Z)=>qV.execute(Z,$)})}}var KY$=B(()=>{k4();Gi0();Yi0();Ji0()});async function g34($,Z,X){let{provider:Q,imageProvider:G,webSearchProvider:Y,deepResearchProvider:J,organization:W,models:K,toolApprovalLevel:H="auto",isPlanMode:N=!1,toolOutputMap:F,pendingImages:U,passthroughClient:w,vmContext:O,htmlArtifactBuffer:D,taskId:L,agentId:E,onChildUsage:j,backgroundDispatcher:z}=Z,A={isPlanMode:N},P=X.auth?.user?.id,M=sG$({writer:$,toolOutputMap:F,passthroughClient:w,toolApprovalLevel:H,isPlanMode:N,objectStorage:X.objectStorage});if(P)M.update_interests=MG$({write:async(_)=>{await X.storage.interests.setForAgent(_.orgId,_.agentId,_.userId,{interests:_.interests})},orgId:W.id,agentId:E,userId:P});Object.assign(M,WY$(X));let k=si(H,!1,A)!==!1,q;if(O){let _=await Ox(X,{virtualMcpId:O.virtualMcpId,branch:O.branch,userId:O.userId,syncTools:O.syncTools,threadId:O.threadId}),l=IG$(_);q=TG$({fs:l.fs,htmlArtifactBuffer:D,toolOutputMap:F,needsApproval:k,pendingImages:U,ctx:X,threadId:O.threadId,virtualMcpId:O.virtualMcpId}),Object.assign(M,q);let b=await hZ$({ctx:X,orgId:W.id,virtualMcpId:O.virtualMcpId,userId:O.userId,threadId:O.threadId,writer:$,rebindFs:async(x)=>{l.swap(await Ox(X,{virtualMcpId:O.virtualMcpId,branch:x,userId:O.userId,syncTools:O.syncTools,threadId:O.threadId}))}});if(b)M.load_repo=b}if(Q)M.subtask=Qn("subtask",Ki0,Hi0($,{provider:Q,organization:W,models:K,self:{id:E},currentThreadId:L,needsApproval:si(H,!1,A)!==!1,onChildUsage:j,vmTools:q,parentBuiltInParams:Z},X),z,(_)=>xG$(L,_));if(G&&K.image&&X.objectStorage)M.generate_image=Qn("generate_image",Xn,vG$($,{provider:G,imageModelInfo:K.image,objectStorage:X.objectStorage,allowHttpExternalUrls:c0().localMode}),z);if(Y&&K.webSearch){let _=Zi0({provider:Y,modelInfo:K.webSearch,ctx:X,mode:"quick",toolName:"web_search"});M.web_search=$i0($,{researchJob:_,toolOutputMap:F,taskId:L})}if(J&&K.deepResearch){let _=Zi0({provider:J,modelInfo:K.deepResearch,ctx:X,mode:"deep",toolName:"deep_research"});M.deep_research=$i0($,{researchJob:_,toolOutputMap:F,taskId:L,description:"Run in-depth, multi-source research and synthesize a comprehensive, cited report. Use this when the user needs thorough analysis, a literature/market review, or a question that warrants exploring many "+"sources \u2014 accuracy and depth matter more than latency. For quick "+"lookups or fact-checks, use `web_search` instead."})}if(process.env.BROWSERLESS_TOKEN){let _={baseUrl:PV,token:process.env.BROWSERLESS_TOKEN};if(M.take_screenshot=lG$($,{objectStorage:X.objectStorage,toolOutputMap:F,pendingImages:U}),X.objectStorage)M.scrape_url=nG$($,{browserless:_,objectStorage:X.objectStorage,toolOutputMap:F}),M.inspect_page=oG$($,{browserless:_,objectStorage:X.objectStorage,toolOutputMap:F})}return M}function h34($,Z,X){let Q=Z.organization.id,G=X.auth?.user?.id,Y={};for(let[J,W]of Object.entries($)){let K=W,H=K.execute;if(typeof H!=="function"){Y[J]=W;continue}let N=y34[J],F=H.constructor?.name==="AsyncGeneratorFunction",U=(O,D)=>{if(!Q||!G)return;y1.capture({distinctId:G,event:"tool_called",groups:{organization:Q},properties:{organization_id:Q,tool_source:"builtin",tool_name:J,tool_safe_name:J,read_only:N?.readOnly??null,destructive:N?.destructive??null,idempotent:null,open_world:null,latency_ms:Math.round(O),is_error:D}})},w=F?async function*(O,D){let L=performance.now(),E=!1;try{yield*H.call(K,O,D)}catch(j){throw E=!0,j}finally{U(performance.now()-L,E)}}:async(O,D)=>{let L=performance.now(),E=!1;try{return await H.call(K,O,D)}catch(j){throw E=!0,j}finally{U(performance.now()-L,E)}};Y[J]={...K,execute:w}}return Y}async function iU0($,Z,X){let Q=await g34($,Z,X),G=h34(Q,Z,X);if(!Z.isPlanMode){let{propose_plan:Y,...J}=G;return J}return G}function HY$($){let{ctx:Z,writer:X,toolOutputMap:Q,subtaskParams:G,planMode:Y}=$,J={user_ask:xU0,todo_write:yU0,read_tool_output:vU0({toolOutputMap:Q})};if(Y)J.propose_plan=hU0;if(G.provider)J.subtask=Hi0(X,G,Z);return J}var y34;var Wi0=B(()=>{f4();ei();AN();RG$();JU0();WU0();Ni0();nm0();pm0();kG$();tm0();bG$();am0();em0();Rx();gG$();cG$();dG$();pG$();rG$();eG$();KY$();S$();y34={read_tool_output:{readOnly:!0,destructive:!1},read_resource:{readOnly:!0,destructive:!1},read_prompt:{readOnly:!0,destructive:!1},web_search:{readOnly:!0,destructive:!1},deep_research:{readOnly:!0,destructive:!1},generate_image:{readOnly:!1,destructive:!1},open_in_agent:{readOnly:!1,destructive:!1},subtask:{readOnly:!1,destructive:!1},user_ask:{readOnly:!0,destructive:!1},propose_plan:{readOnly:!0,destructive:!1},enable_tool:{readOnly:!0,destructive:!1},todo_write:{readOnly:!1,destructive:!1},update_interests:{readOnly:!1,destructive:!1},load_repo:{readOnly:!1,destructive:!0},search_threads:{readOnly:!0,destructive:!1},get_thread:{readOnly:!0,destructive:!1},list_thread_messages:{readOnly:!0,destructive:!1}}});async function NY$($){let Z=$.toolOutputMap??new Map,{tools:X,nameMap:Q}=await fU0($.mcpClient,Z,$.writer,$.toolApprovalLevel,{disableOutputTruncation:!1,isPlanMode:$.planMode,timeoutMs:_U0,resolveArgs:$.resolveArgs,onToolCalled:$.onToolCalled,onPrOpened:$.onPrOpened}),G=$.fullBuiltInParams?await iU0($.writer,{...$.fullBuiltInParams,toolOutputMap:Z},$.ctx):HY$({ctx:$.ctx,writer:$.writer,toolOutputMap:Z,subtaskParams:$.subtaskParams,planMode:$.planMode}),Y=$.kind==="subagent"?Object.fromEntries(Object.entries(G).filter(([W])=>!u34.includes(W))):G;return{tools:{...X,...Y},toolOutputMap:Z,nameMap:Q}}var u34;var FY$=B(()=>{ei();Wi0();u34=["subtask","user_ask","propose_plan"]});var pU0={};N4(pU0,{waitForSeed:()=>r34,seedLocalMode:()=>p34,pruneUndecryptableJwks:()=>OY$,markSeedComplete:()=>o34,isLocalMode:()=>UK,healLocalJwks:()=>m34,getLocalAdminUser:()=>Fi0,getLocalAdminPassword:()=>nU0});import{symmetricDecrypt as c34}from"better-auth/crypto";import{sql as UY$}from"kysely";import{userInfo as l34}from"os";async function m34(){let $=c0();if(!$.localMode)return 0;if(!$.betterAuthSecret)return 0;return OY$(m8().db,$.betterAuthSecret)}async function OY$($,Z){let X;try{X=(await UY$`
|
|
1453
|
+
`,O=await fetch(`${PV}/function?token=${encodeURIComponent(H)}`,{method:"POST",headers:{"Content-Type":"application/javascript"},body:w});if(!O.ok){let j=await O.text().catch(()=>"Unknown error");return{success:!1,error:`Browserless function call failed (${O.status}): ${j}`,url:N.url}}let D=await O.json().catch(async()=>{return{error:`Browserless returned non-JSON response: ${(await O.text().catch(()=>"")).slice(0,200)}`}}),L=JSON.stringify(D,null,2);X.set(W.toolCallId,L);let E=r7(L);if(!("error"in D)&&E>ow&&Q){let j=`inspect-pages/${crypto.randomUUID()}.json`;return await Q.put(j,new TextEncoder().encode(L),{contentType:"application/json"}),{success:!0,uri:Y7(j),preview:cX(L),url:N.url,tokenCount:E,consoleLogCount:D.consoleLogs?.length??0,errorCount:D.errors?.length??0,hasEvaluateResult:D.evaluateResult!=null}}return{success:!("error"in D),...D,url:N.url,tokenCount:E}}finally{$.write({type:"data-tool-metadata",id:W.toolCallId,data:{latencyMs:performance.now()-K}})}}})}function sG$($){let{writer:Z,toolOutputMap:X,objectStorage:Q,pendingImages:G,imageTool:Y}=$,J={user_ask:xU0,todo_write:yU0,propose_plan:hU0,read_tool_output:vU0({toolOutputMap:X})};if(Y)J.generate_image=Qn("generate_image",Xn,lU0(Z,{...Y,objectStorage:Q}),null);if(process.env.BROWSERLESS_TOKEN){if(J.scrape_url=aG$(Z,{toolOutputMap:X,objectStorage:Q,kind:"scrape"}),J.inspect_page=aG$(Z,{toolOutputMap:X,objectStorage:Q,kind:"inspect"}),G)J.take_screenshot=dU0(Z,{objectStorage:Q,toolOutputMap:X,pendingImages:G})}return J}var eG$=B(()=>{k4();nm0();pm0();tm0();AN();zV();Rx();am0()});function Xi0($,Z=Date.now()){let X=new Date($.updated_at).getTime(),Q=$.last_progress_at?new Date($.last_progress_at).getTime():Number.NaN,G=Math.max(Number.isFinite(X)?X:Number.NEGATIVE_INFINITY,Number.isFinite(Q)?Q:Number.NEGATIVE_INFINITY);return!Number.isFinite(G)||Z-G>1800000}function yY($,Z=Date.now()){let X=$.status;if(X==="in_progress"&&Xi0($,Z))X="expired";return{id:$.id,organization_id:$.organization_id,title:$.title,description:$.description,created_at:$.created_at,updated_at:$.updated_at,created_by:$.created_by,updated_by:$.updated_by,hidden:$.hidden??!1,status:X,virtual_mcp_id:$.virtual_mcp_id||void 0,trigger_id:$.trigger_id,branch:$.branch,sandbox_provider_kind:$.sandbox_provider_kind,harness_id:$.harness_id,metadata:$.metadata&&Object.keys($.metadata).length>0?$.metadata:void 0,run_config:$.run_config}}var $Y$=1800000;var Qi0;var ZY$=B(()=>{Qi0=["in_progress","requires_action","failed","completed"]});import{z as T$}from"zod";var XY$,V34,QY$,FK,GY$,YY$;var TV=B(()=>{ZY$();XY$=T$.object({id:T$.string().describe("Unique message ID"),thread_id:T$.string().describe("ID of the parent thread"),metadata:T$.unknown().optional().describe("Optional message metadata"),parts:T$.array(T$.record(T$.string(),T$.unknown())).describe("Message content parts (AI SDK UIMessagePart format)"),role:T$.enum(["user","assistant","system"]).describe("Message role"),created_at:T$.string().datetime().describe("Timestamp of creation"),updated_at:T$.string().datetime().describe("Timestamp of last update")}),V34=T$.object({toolName:T$.string().describe("Fully qualified tool name"),appId:T$.string().describe("App ID that owns the tool"),args:T$.record(T$.string(),T$.unknown()).describe("Arguments used when expanding the tool"),expandedAt:T$.string().datetime().describe("When the tool was expanded")}),QY$=T$.object({expanded_tools:T$.array(V34).optional(),read_only:T$.boolean().optional().describe("The thread takes no further input (an autonomous run the user cannot continue)")}).catchall(T$.unknown()),FK=T$.object({id:T$.string().describe("Unique thread ID"),organization_id:T$.string().describe("Organization this thread belongs to"),title:T$.string().describe("Thread title"),description:T$.string().nullable().describe("Thread description"),created_at:T$.string().datetime().describe("Timestamp of creation"),updated_at:T$.string().datetime().describe("Timestamp of last update"),hidden:T$.boolean().optional().describe("Whether the thread is hidden"),status:T$.enum([...Qi0,"expired"]).describe("Thread execution status. 'expired' is virtual -- computed at read time for stale in_progress threads"),created_by:T$.string().describe("User ID who created the thread"),updated_by:T$.string().optional().describe("User ID who last updated the thread"),virtual_mcp_id:T$.string().optional().describe("Virtual MCP (agent) this thread was initiated with"),trigger_id:T$.string().nullable().optional().describe("Automation trigger that created this thread; null/absent for human-initiated threads."),branch:T$.string().nullable().optional().describe("Git branch this thread is pinned to (GitHub-linked vms only)"),sandbox_provider_kind:T$.string().nullable().optional().describe("Pinned on first message; identifies which sandbox provider to dispatch to (e.g. 'agent-sandbox', 'user-desktop')."),harness_id:T$.string().nullable().optional().describe("Pinned on first message; selects which harness runs the thread (e.g. 'claude-code', 'codex', 'decopilot')."),metadata:QY$.optional().describe("Free-form per-thread UI state (e.g. expanded_tools)"),run_config:T$.record(T$.string(),T$.unknown()).nullable().optional().describe("Persisted run configuration (contains agent and model info)")}),GY$=T$.object({id:T$.string().optional().describe("Optional custom ID for the thread"),title:T$.string().optional().describe("Thread title"),description:T$.string().nullish().describe("Thread description"),virtual_mcp_id:T$.string().describe("Virtual MCP (agent) this thread is bound to"),branch:T$.string().min(1).optional().describe("Preferred branch. Used only when the vMCP has a githubRepo; ignored otherwise. When omitted, the server picks the most-recently-touched branch from the user's sandboxMap, falling back to a freshly generated name.")}),YY$=T$.object({title:T$.string().optional().describe("New thread title"),description:T$.string().nullish().describe("New thread description"),hidden:T$.boolean().optional().describe("Whether the thread is hidden"),status:T$.enum(Qi0).optional().describe("New thread status (user-set override). 'expired' is a computed virtual status and cannot be set directly."),metadata:QY$.optional().describe("Full replacement of the thread's metadata object"),branch:T$.string().min(1).nullish().describe("New git branch for this thread"),virtual_mcp_id:T$.string().optional().describe("Re-point the thread at a different agent. Only meaningful for an unsent thread (changing the recipient of a new chat); the UI restricts it accordingly.")})});import{z as kG}from"zod";var C34,_34,RV;var Gi0=B(()=>{zY();v0();TV();C34=rJ.extend({where:kG.object({created_by:kG.string().optional(),trigger_ids:kG.array(kG.string()).max(1000).optional(),virtual_mcp_id:kG.string().optional(),hidden:kG.boolean().optional(),has_trigger:kG.boolean().optional()}).optional(),startDate:kG.string().datetime().optional().describe("Filter threads updated at or after this ISO timestamp"),endDate:kG.string().datetime().optional().describe("Filter threads updated at or before this ISO timestamp"),search:kG.string().optional().describe("Full-text search on thread title (case-insensitive)"),status:kG.string().optional().describe("Filter by thread status (e.g. completed, failed, in_progress)"),userId:kG.string().optional().describe("Filter by the user who created the thread"),agentId:kG.string().optional().describe("Filter by agent (connection or virtual MCP) ID")}),_34=pH(FK),RV=m({name:"COLLECTION_THREADS_LIST",description:"List threads with filtering, sorting, and pagination.",annotations:{title:"List Threads",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:C34,outputSchema:_34,handler:async($,Z)=>{await Z.access.check();let X=Z.auth.user?.id;if(!X)throw Error("User ID required to list threads");r(Z);let Q=$.offset??0,G=$.limit??100,Y=$.where?.trigger_ids,J=$.where?.virtual_mcp_id,W=$.userId??($.where?.created_by==="me"?X:$.where?.created_by),{threads:K,total:H}=Y?.length?await Z.storage.threads.listByTriggerIds(Y,{limit:G,offset:Q}):await Z.storage.threads.list(W,{limit:G,offset:Q,virtualMcpId:J,startDate:$.startDate,endDate:$.endDate,search:$.search,status:$.status,agentId:$.agentId,includeArchived:$.where?.hidden,hasTrigger:$.where?.has_trigger}),N=Q+G<H,F=Date.now();return{items:K.map((U)=>yY(U,F)),totalCount:H,hasMore:N}}})});var v34,IV;var Yi0=B(()=>{zY();v0();TV();v34=Hm(FK),IV=m({name:"COLLECTION_THREADS_GET",description:"Get a thread's details and metadata by ID.",annotations:{title:"Get Thread",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:Km,outputSchema:v34,handler:async($,Z)=>{Z0(Z),r(Z),await Z.access.check();let X=await Z.storage.threads.get($.id);if(!X)return{item:null};return{item:yY(X)}}})});import{z as b34}from"zod";function JY$($){if(!$)return null;if("field"in $&&$.field[0]==="thread_id"&&$.operator==="eq")return String($.value);if("conditions"in $&&($.operator==="and"||$.operator==="or"))for(let Z of $.conditions){let X=JY$(Z);if(X)return X}return null}var f34,x34,qV;var Ji0=B(()=>{zY();v0();TV();f34=rJ.extend({thread_id:b34.string().optional().describe("ID of the thread to list messages for (required)")}),x34=pH(XY$),qV=m({name:"COLLECTION_THREAD_MESSAGES_LIST",description:"List messages in a thread with pagination. Requires thread_id. Returns messages in chronological order.",annotations:{title:"List Thread Messages",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:f34,outputSchema:x34,handler:async($,Z)=>{r(Z),await Z.access.check();let X=$.thread_id??JY$($.where);if(!X)throw Error("thread_id is required (provide as top-level param or in where clause)");let Q=$.offset??0,G=$.limit??100,Y=$.orderBy?.[0]?.direction??"asc",J=await Z.storage.threads.get(X);if(!J)return{items:[],totalCount:0,hasMore:!1};if(J.message_storage_version===2){let{messages:N,total:F}=await Z.storage.threads.messageParts().loadWindow(X,{limit:G,offset:Q,includeInFlight:!0});return{items:N.map((U)=>({id:U.id,thread_id:X,role:U.role,parts:U.parts,metadata:U.metadata??null,created_at:U.created_at,updated_at:U.created_at})),totalCount:F,hasMore:Q+G<F}}let{messages:W,total:K}=await Z.storage.threads.listMessages(X,{limit:G,offset:Q,sort:Y}),H=Q+G<K;return{items:W,totalCount:K,hasMore:H}}})});function WY$($){return{search_threads:_$({description:RV.description,inputSchema:$0(RV.inputSchema),execute:(Z)=>RV.execute(Z,$)}),get_thread:_$({description:IV.description,inputSchema:$0(IV.inputSchema),execute:(Z)=>IV.execute(Z,$)}),list_thread_messages:_$({description:qV.description,inputSchema:$0(qV.inputSchema),execute:(Z)=>qV.execute(Z,$)})}}var KY$=B(()=>{k4();Gi0();Yi0();Ji0()});async function g34($,Z,X){let{provider:Q,imageProvider:G,webSearchProvider:Y,deepResearchProvider:J,organization:W,models:K,toolApprovalLevel:H="auto",isPlanMode:N=!1,toolOutputMap:F,pendingImages:U,passthroughClient:w,vmContext:O,htmlArtifactBuffer:D,taskId:L,agentId:E,onChildUsage:j,backgroundDispatcher:z}=Z,A={isPlanMode:N},P=X.auth?.user?.id,M=sG$({writer:$,toolOutputMap:F,passthroughClient:w,toolApprovalLevel:H,isPlanMode:N,objectStorage:X.objectStorage});if(P)M.update_interests=MG$({write:async(_)=>{await X.storage.interests.setForAgent(_.orgId,_.agentId,_.userId,{interests:_.interests})},orgId:W.id,agentId:E,userId:P});Object.assign(M,WY$(X));let k=si(H,!1,A)!==!1,q;if(O){let _=await Ox(X,{virtualMcpId:O.virtualMcpId,branch:O.branch,userId:O.userId,syncTools:O.syncTools,threadId:O.threadId}),l=IG$(_);q=TG$({fs:l.fs,htmlArtifactBuffer:D,toolOutputMap:F,needsApproval:k,pendingImages:U,ctx:X,threadId:O.threadId,virtualMcpId:O.virtualMcpId}),Object.assign(M,q);let b=await hZ$({ctx:X,orgId:W.id,virtualMcpId:O.virtualMcpId,userId:O.userId,threadId:O.threadId,writer:$,rebindFs:async(x)=>{l.swap(await Ox(X,{virtualMcpId:O.virtualMcpId,branch:x,userId:O.userId,syncTools:O.syncTools,threadId:O.threadId}))}});if(b)M.load_repo=b}if(Q)M.subtask=Qn("subtask",Ki0,Hi0($,{provider:Q,organization:W,models:K,self:{id:E},currentThreadId:L,needsApproval:si(H,!1,A)!==!1,onChildUsage:j,vmTools:q,parentBuiltInParams:Z},X),z,(_)=>xG$(L,_));if(G&&K.image&&X.objectStorage)M.generate_image=Qn("generate_image",Xn,vG$($,{provider:G,imageModelInfo:K.image,objectStorage:X.objectStorage,allowHttpExternalUrls:c0().localMode}),z);if(Y&&K.webSearch){let _=Zi0({provider:Y,modelInfo:K.webSearch,ctx:X,mode:"quick",toolName:"web_search"});M.web_search=$i0($,{researchJob:_,toolOutputMap:F,taskId:L})}if(J&&K.deepResearch){let _=Zi0({provider:J,modelInfo:K.deepResearch,ctx:X,mode:"deep",toolName:"deep_research"});M.deep_research=$i0($,{researchJob:_,toolOutputMap:F,taskId:L,description:"Run in-depth, multi-source research and synthesize a comprehensive, cited report. Use this when the user needs thorough analysis, a literature/market review, or a question that warrants exploring many "+"sources \u2014 accuracy and depth matter more than latency. For quick "+"lookups or fact-checks, use `web_search` instead."})}if(process.env.BROWSERLESS_TOKEN){let _={baseUrl:PV,token:process.env.BROWSERLESS_TOKEN};if(M.take_screenshot=lG$($,{objectStorage:X.objectStorage,toolOutputMap:F,pendingImages:U}),X.objectStorage)M.scrape_url=nG$($,{browserless:_,objectStorage:X.objectStorage,toolOutputMap:F}),M.inspect_page=oG$($,{browserless:_,objectStorage:X.objectStorage,toolOutputMap:F})}return M}function h34($,Z,X){let Q=Z.organization.id,G=X.auth?.user?.id,Y={};for(let[J,W]of Object.entries($)){let K=W,H=K.execute;if(typeof H!=="function"){Y[J]=W;continue}let N=y34[J],F=H.constructor?.name==="AsyncGeneratorFunction",U=(O,D)=>{if(!Q||!G)return;y1.capture({distinctId:G,event:"tool_called",groups:{organization:Q},properties:{organization_id:Q,tool_source:"builtin",tool_name:J,tool_safe_name:J,read_only:N?.readOnly??null,destructive:N?.destructive??null,idempotent:null,open_world:null,latency_ms:Math.round(O),is_error:D}})},w=F?async function*(O,D){let L=performance.now(),E=!1;try{yield*H.call(K,O,D)}catch(j){throw E=!0,j}finally{U(performance.now()-L,E)}}:async(O,D)=>{let L=performance.now(),E=!1;try{return await H.call(K,O,D)}catch(j){throw E=!0,j}finally{U(performance.now()-L,E)}};Y[J]={...K,execute:w}}return Y}async function iU0($,Z,X){let Q=await g34($,Z,X),G=h34(Q,Z,X);if(!Z.isPlanMode){let{propose_plan:Y,...J}=G;return J}return G}function HY$($){let{ctx:Z,writer:X,toolOutputMap:Q,subtaskParams:G,planMode:Y}=$,J={user_ask:xU0,todo_write:yU0,read_tool_output:vU0({toolOutputMap:Q})};if(Y)J.propose_plan=hU0;if(G.provider)J.subtask=Hi0(X,G,Z);return J}var y34;var Wi0=B(()=>{f4();ei();AN();RG$();JU0();WU0();Ni0();nm0();pm0();kG$();tm0();bG$();am0();em0();Rx();gG$();cG$();dG$();pG$();rG$();eG$();KY$();S$();y34={read_tool_output:{readOnly:!0,destructive:!1},read_resource:{readOnly:!0,destructive:!1},read_prompt:{readOnly:!0,destructive:!1},web_search:{readOnly:!0,destructive:!1},deep_research:{readOnly:!0,destructive:!1},generate_image:{readOnly:!1,destructive:!1},open_in_agent:{readOnly:!1,destructive:!1},subtask:{readOnly:!1,destructive:!1},user_ask:{readOnly:!0,destructive:!1},propose_plan:{readOnly:!0,destructive:!1},enable_tool:{readOnly:!0,destructive:!1},todo_write:{readOnly:!1,destructive:!1},update_interests:{readOnly:!1,destructive:!1},load_repo:{readOnly:!1,destructive:!0},search_threads:{readOnly:!0,destructive:!1},get_thread:{readOnly:!0,destructive:!1},list_thread_messages:{readOnly:!0,destructive:!1}}});async function NY$($){let Z=$.toolOutputMap??new Map,{tools:X,nameMap:Q}=await fU0($.mcpClient,Z,$.writer,$.toolApprovalLevel,{disableOutputTruncation:!1,isPlanMode:$.planMode,timeoutMs:_U0,resolveArgs:$.resolveArgs,onToolCalled:$.onToolCalled,onPrOpened:$.onPrOpened}),G=$.fullBuiltInParams?await iU0($.writer,{...$.fullBuiltInParams,toolOutputMap:Z},$.ctx):HY$({ctx:$.ctx,writer:$.writer,toolOutputMap:Z,subtaskParams:$.subtaskParams,planMode:$.planMode}),Y=$.kind==="subagent"?Object.fromEntries(Object.entries(G).filter(([W])=>!u34.includes(W))):G;return{tools:{...X,...Y},toolOutputMap:Z,nameMap:Q}}var u34;var FY$=B(()=>{ei();Wi0();u34=["subtask","user_ask","propose_plan"]});var pU0={};N4(pU0,{waitForSeed:()=>r34,seedLocalMode:()=>p34,pruneUndecryptableJwks:()=>OY$,markSeedComplete:()=>o34,isLocalMode:()=>UK,healLocalJwks:()=>m34,getLocalAdminUser:()=>Fi0,getLocalAdminPassword:()=>nU0});import{symmetricDecrypt as c34}from"better-auth/crypto";import{sql as UY$}from"kysely";import{userInfo as l34}from"os";async function m34(){let $=c0();if(!$.localMode)return 0;if(!$.betterAuthSecret)return 0;return OY$(m8().db,$.betterAuthSecret)}async function OY$($,Z){let X;try{X=(await UY$`
|
|
1454
1454
|
select id, "privateKey" from jwks
|
|
1455
1455
|
`.execute($)).rows}catch(G){if(G?.code==="42P01")return 0;return console.warn("[local-mode] JWKS heal skipped \u2014 could not read jwks:",G),0}let Q=0;for(let G of X){let Y=!0;try{await c34({key:Z,data:JSON.parse(G.privateKey)})}catch{Y=!1}if(Y)continue;try{await UY$`delete from jwks where id = ${G.id}`.execute($),Q++}catch(J){console.warn(`[local-mode] JWKS heal could not delete stale key ${G.id}:`,J)}}return Q}async function nU0(){return"local-mode-default"}function BY$(){try{return l34().username||"local"}catch{return"local"}}function i34($){return $.charAt(0).toUpperCase()+$.slice(1)}async function n34(){let $=m8(),Z=await $.db.selectFrom("user").select($.db.fn.countAll().as("count")).executeTakeFirst();return Number(Z?.count??0)===0}async function p34(){if(!await n34())return!1;let Z=BY$(),X=`${Z}@${wY$}`,Q=i34(Z),G=await nU0(),Y=await j8.api.signUpEmail({body:{email:X,password:G,name:Q}});if(!Y?.user?.id)throw Error("Failed to create local admin user");let J=Y.user.id,W=m8();await W.db.updateTable("user").set({role:"admin"}).where("id","=",J).execute();let K=`${Z}-local`.toLowerCase().replace(/[^a-z0-9-]/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,""),H=`${Q} Local`;return await W.db.updateTable("organization").set({name:H,slug:K}).where("id","in",(N)=>N.selectFrom("member").select("organizationId").where("userId","=",J)).execute(),!0}async function Fi0(){let $=m8(),Z=BY$(),X=await $.db.selectFrom("user").where("email","=",`${Z}@${wY$}`).selectAll().executeTakeFirst();if(X)return X;return $.db.selectFrom("user").where("email","=",`${Z}@${d34}`).selectAll().executeTakeFirst()}function UK(){return c0().localMode}function o34(){DY$()}function r34(){return t34}var wY$="localhost.studio",d34="localhost.mesh",DY$,t34;var MV=B(()=>{LY();S$();IY();t34=new Promise(($)=>{if(DY$=$,!UK())$()})});var LY$=B(()=>{zV()});function s34($){return $.type==="file"&&"mediaType"in $&&typeof $.mediaType==="string"&&a34.has($.mediaType)}function AY$($){let Z=$.match(/^data:([^;]+);base64,(.+)$/s);if(!Z)return null;let[,X,Q]=Z;try{let G=atob(Q),Y=new Uint8Array(G.length);for(let J=0;J<G.length;J++)Y[J]=G.charCodeAt(J);return{mimeType:X,bytes:Y}}catch{return null}}function Ui0($){return{"image/png":"png","image/jpeg":"jpg","image/gif":"gif","image/webp":"webp","image/svg+xml":"svg","application/pdf":"pdf","text/plain":"txt","text/html":"html","application/json":"json"}[$]??"bin"}async function e34($,Z,X,Q){if(!Q.objectStorage)return null;try{return await Q.objectStorage.put(Z,$,{contentType:X}),Z}catch(G){return console.error("[file-materializer] Failed to upload file:",G),null}}async function Yn($,Z){if(!Z.objectStorage)return null;try{return await Z.objectStorage.presignedGetUrl($,$W4)}catch(X){return console.error("[file-materializer] Failed to generate presigned URL:",X),null}}function TY$($){try{return decodeURIComponent($)}catch{return $}}function jY$($,Z){let X=typeof $.filename==="string"&&$.filename.trim()?$.filename:`attachment.${Ui0(Z)}`,Q=X.match(ZW4);if(Q?.[1])X=TY$(Q[1]);return[...X.split(/[\\/]/).pop()??X].filter((J)=>(J.codePointAt(0)??0)>=32).join("").trim()||`attachment.${Ui0(Z)}`}function zY$($,Z){if(!Z.has($))return Z.add($),$;let X=$.lastIndexOf("."),Q=X>0?$.slice(0,X):$,G=X>0?$.slice(X):"";for(let Y=2;;Y++){let J=`${Q} (${Y})${G}`;if(!Z.has(J))return Z.add(J),J}}async function PY$($,Z,X,Q,G){if(!G||!Q.orgFs)return console.warn("[file-materializer] uploads-volume write skipped",{hasThreadId:Boolean(G),hasOrgFs:Boolean(Q.orgFs)}),null;try{let Y=`${G}/${X}`;return await Q.orgFs.write("uploads",Y,$,{actor:Q.auth?.user?.id??"unknown",contentType:Z}),{key:WW("uploads",Y),sandboxPath:`org/upload/${X}`}}catch(Y){return console.error("[file-materializer] uploads-volume write failed:",Y),null}}async function tU0($,Z,X){if(!Z.organization)return $;let Q=Z.organization.slug;if(!Q)return $;let G=$.findLastIndex((A)=>A.role==="user");if(G===-1)return $;let Y=$[G],J=Y.parts.filter((A)=>A.type==="file"&&("url"in A)&&typeof A.url==="string"&&A.url.startsWith("data:")),K=Boolean(X?.threadId&&Z.orgFs)?Y.parts.flatMap((A)=>{if(A.type!=="text"||!("text"in A)||typeof A.text!=="string")return[];let P=A.text.match(XW4);if(!P?.[1]||P[2]===void 0)return[];return[{name:TY$(P[1]),content:P[2]}]}):[];if(J.length===0&&K.length===0)return $;let H=new Set,N=J.flatMap((A)=>{if(A.type!=="file"||!("url"in A)||typeof A.url!=="string")return[];let P=AY$(A.url);if(!P)return[];let M=zY$(jY$(A,P.mimeType),H);return[{dataUrl:A.url,parsed:P,filename:M}]}),F=K.map(({name:A,content:P})=>({filename:zY$(jY$({filename:A},"text/plain"),H),content:P})),w=(await Promise.all([...N.map(async({dataUrl:A,parsed:P,filename:M})=>{let k=await PY$(P.bytes,P.mimeType,M,Z,X?.threadId);if(!k)return null;return{dataUrl:A,studioStorageUrl:Y7(k.key),redirectUrl:wv(Z.baseUrl,Q,k.key),filename:M,sandboxPath:k.sandboxPath}}),...F.map(async({filename:A,content:P})=>{let M=await PY$(new TextEncoder().encode(P),DZ(A),A,Z,X?.threadId);if(!M)return null;return{dataUrl:null,studioStorageUrl:Y7(M.key),redirectUrl:wv(Z.baseUrl,Q,M.key),filename:A,sandboxPath:M.sandboxPath}})])).filter((A)=>A!==null);if(w.length===0)return $;let O=w.map((A)=>A.sandboxPath?`- ${A.filename}: ${A.sandboxPath} (tool URL: ${A.studioStorageUrl})`:`- ${A.filename}: ${A.studioStorageUrl}`).join(`
|
|
1456
1456
|
`),D=w.some((A)=>A.sandboxPath)?`[Attached files \u2014 already inside your sandbox; read them at the given path. The tool URL is only for tools that take a URL argument]
|
|
@@ -2726,7 +2726,7 @@ Do NOT require review (requiresReview = false) when the changes are low-risk, su
|
|
|
2726
2726
|
|
|
2727
2727
|
When unsure between the two, lean toward NOT requiring review for small frontend-only diffs, and toward requiring it for anything backend or large.
|
|
2728
2728
|
|
|
2729
|
-
Respond with the structured verdict and a short reason.`,a_$;var e_$=B(()=>{k4();mw();Q41();g86=G41.object({requiresReview:G41.boolean().describe("true if the changes should go through pull-request review"),reason:G41.string().describe("One short sentence explaining the decision (max ~120 chars)")});a_$={requiresReview:!1,reason:""}});function l86($){if(!$||$.includes(".."))return!1;return c86.test($)}function $v$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!l86(Z))return null;let{__resolveType:X,...Q}=$;return{resolveType:Z,payload:Q}}function Zv$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var c86;var Xv$=B(()=>{c86=/^[\w./@-]+$/});function Y41($){let Z;try{Z=new URL($)}catch{return null}if(!Z.hostname.endsWith(".localhost"))return null;let X=Z.host;return Z.hostname="127.0.0.1",{url:Z.toString(),hostHeader:X}}function Qv$($,Z){let X=$?.githubRepo;if(!X?.owner||!X?.name)return null;if(!X.connectionId)return X;if(!Z.includes(X.connectionId))return null;return X}async function Gv$($,Z,X,Q){if(!Q.connectionId)throw new ig("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let G=$.organization?.id;if(!G)throw new ig(d7);await Rw({ctx:$,connectionId:Q.connectionId,organizationId:G,forceRefresh:!0,onLegacyMintError:(N)=>{let F=N instanceof Error?N.message:d7;throw new ig(F)}});let{cloneUrl:Y,gitUserName:J,gitUserEmail:W}=await Iw(Q.connectionId,Q.owner,Q.name,$.db,$.vault),K=zj0($),H=await Z.proxyDaemonRequest(X,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{repository:{cloneUrl:Y},identity:{userName:J,userEmail:W}},...K?{operator:K}:{}})});if(!H.ok){let N=await lw(H,d86).catch(()=>H.statusText);throw Error(`Failed to refresh sandbox git credentials (${H.status}): ${N}`)}}var d86=10485760,ig;var Yv$=B(()=>{YN();r81();bi();rf();ig=class ig extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function i86($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!m86.test(Z))throw Error(`Invalid branch name: ${$}`)}function lC($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(p86)])}function dC($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}function J41($,Z){let Q=(Pj0.get($)??Promise.resolve()).catch(()=>{}).then(Z),G=Q.catch(()=>{});return Pj0.set($,G),G.finally(()=>{if(Pj0.get($)===G)Pj0.delete($)}),Q}async function fZ($,Z,X){let Q=dC($);if(Q instanceof Response)return Q;let{claimName:G,userId:Y,projectRef:J}=$.get("vmClaim"),W=X?.method??"POST",K=null,H=new Headers;if(X?.jsonBody!==void 0)K=X.jsonBody,H.set("content-type","application/json");else if(X?.forwardJsonBody)K=await $.req.text(),H.set("content-type","application/json");let N=X?.signal,F={method:W,headers:H,body:K,...N?{signal:N}:{}},U=async()=>{let w=await Q.proxyDaemonRequest(G,Z,F);if(X?.map404to410&&w.status===404){try{await w.body?.cancel()}catch{}if(await Q.adoptLiveClaim?.({userId:Y,projectRef:J},G))w=await Q.proxyDaemonRequest(G,Z,F);if(w.status===404){try{await w.body?.cancel()}catch{}return new Response(JSON.stringify({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."}),{status:410,headers:{"content-type":"application/json",...cG}})}}let O=await w.text(),D=X?.redactRepoDirUnlessDesktop&&Q.kind!=="user-desktop"?o86(O):O,L=w.headers.get("content-type")??"application/json";return new Response(D,{status:w.status,headers:{"content-type":L,...cG}})};try{if(N){let w=U();return w.catch(()=>{}),await Promise.race([w,new Promise((D,L)=>{if(N.aborted)return L(N.reason);N.addEventListener("abort",()=>L(N.reason),{once:!0})})])}return await U()}catch(w){let O=w instanceof Error?w.message:String(w);return $.json({error:`Daemon unreachable: ${O}`},502)}}function o86($){try{let Z=JSON.parse($);if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&"repoDir"in Z)return JSON.stringify({...Z,repoDir:null})}catch{}return $}async function Aj0($,Z,X,Q="GET",G){let Y=await $.proxyDaemonRequest(Z,X,{method:Q,headers:new Headers,body:null});if(Y.status===404&&G){try{await Y.body?.cancel()}catch{}if(await $.adoptLiveClaim?.(G,Z))Y=await $.proxyDaemonRequest(Z,X,{method:Q,headers:new Headers,body:null})}if(Y.status===404){try{await Y.body?.cancel()}catch{}throw Error("SANDBOX_GONE")}let J=await Y.text();if(!Y.ok){let W=`Daemon error (${Y.status})`;try{W=JSON.parse(J).error??W}catch{}throw Error(W)}return JSON.parse(J)}function r86($){return Kv$.includes($)}var m86,Jv$=524288,n86=65536,p86=1e4,Wv$=2000,t86,Pj0,cG,Kv$,Hv$=()=>{let $=new B1;return $.use("/:virtualMcpId/:branch/*",t86),$.post("/:virtualMcpId/:branch/write",(Z)=>fZ(Z,"/_sandbox/write",{forwardJsonBody:!0,signal:lC(Z)})),$.post("/:virtualMcpId/:branch/unlink",(Z)=>fZ(Z,"/_sandbox/unlink",{forwardJsonBody:!0,signal:lC(Z)})),$.post("/:virtualMcpId/:branch/mkdir",(Z)=>fZ(Z,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:lC(Z)})),$.post("/:virtualMcpId/:branch/rename",(Z)=>fZ(Z,"/_sandbox/rename",{forwardJsonBody:!0,signal:lC(Z)})),$.post("/:virtualMcpId/:branch/read",(Z)=>fZ(Z,"/_sandbox/read",{forwardJsonBody:!0,signal:lC(Z)})),$.post("/:virtualMcpId/:branch/glob",(Z)=>fZ(Z,"/_sandbox/glob",{forwardJsonBody:!0,signal:lC(Z)})),$.post("/:virtualMcpId/:branch/grep",(Z)=>fZ(Z,"/_sandbox/grep",{forwardJsonBody:!0,signal:lC(Z)})),$.post("/:virtualMcpId/:branch/exec/:script",async(Z)=>{let X=Z.req.param("script");if(!X)return Z.json({error:"missing script name"},400);return fZ(Z,`/_sandbox/exec/${encodeURIComponent(X)}`)}),$.post("/:virtualMcpId/:branch/exec/:script/kill",async(Z)=>{let X=Z.req.param("script");if(!X)return Z.json({error:"missing script name"},400);return fZ(Z,`/_sandbox/exec/${encodeURIComponent(X)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(Z)=>fZ(Z,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDirUnlessDesktop:!0})),$.put("/:virtualMcpId/:branch/config",(Z)=>fZ(Z,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(Z)=>{let X=Z.req.param("step");if(!X||!r86(X))return Z.json({error:`step must be one of: ${Kv$.join(", ")}`},400);if(X==="start"){let Q=Z.get("vmClaim");if(Q.runner){let G=r(Z.var.studioContext),Y=rF0(Q.virtualMcpMetadata);try{await sF0({ctx:Z.var.studioContext,runner:Q.runner,handle:Q.claimName,orgId:G.id,userId:Q.callerUserId,entries:Y})}catch(J){let W=J instanceof Error?J.message:String(J);return Z.json({error:`Failed to push env to daemon: ${W}`},502)}}}return fZ(Z,`/_sandbox/setup/${X}`,{signal:Z.req.raw.signal,map404to410:!0})}),$.get("/:virtualMcpId/:branch/events",(Z)=>{let X=Z.get("vmClaim");if(!X.runner)return QF(Z,async(Q)=>{await Q.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this studio instance."})})});return i_$(Z,{ctx:Z.var.studioContext,claimName:X.claimName,runner:X.runner,virtualMcpId:X.virtualMcpId,branch:X.branch,userId:X.userId,projectRef:X.projectRef,virtualMcpMetadata:X.virtualMcpMetadata})}),$.get("/:virtualMcpId/:branch/git/status",(Z)=>fZ(Z,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([Z.req.raw.signal,AbortSignal.timeout(Wv$)])})),$.post("/:virtualMcpId/:branch/git/status",(Z)=>fZ(Z,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([Z.req.raw.signal,AbortSignal.timeout(Wv$)])})),$.post("/:virtualMcpId/:branch/git/diff",(Z)=>fZ(Z,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/git/publish",async(Z)=>{let X=dC(Z);if(X instanceof Response)return X;let{claimName:Q,virtualMcpMetadata:G,connectionIds:Y}=Z.get("vmClaim"),J=Z.var.studioContext;return J41(Q,async()=>{try{await a81(J,X,Q);let W=Qv$(G,Y);if(W)await Gv$(J,X,Q,W)}catch(W){if(W instanceof ig)return Z.json({error:W.message},403,cG);let K=W instanceof Error?W.message:String(W);return Z.json({error:K},502,cG)}return fZ(Z,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",(Z)=>{let{claimName:X}=Z.get("vmClaim");return J41(X,()=>fZ(Z,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(Z)=>{let X=dC(Z);if(X instanceof Response)return X;let{claimName:Q}=Z.get("vmClaim"),G=Z.var.studioContext;return J41(Q,async()=>{try{await a81(G,X,Q)}catch(Y){let J=Y instanceof Error?Y.message:String(Y);return Z.json({error:J},502,cG)}return fZ(Z,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",HZ({maxSize:Jv$,onError:(Z)=>Z.json({error:"Payload too large"},413,cG)}),async(Z)=>{let X=dC(Z);if(X instanceof Response)return X;let{claimName:Q,userId:G,projectRef:Y}=Z.get("vmClaim"),J=Z.var.studioContext;try{let W=await Z.req.json().catch(()=>({})),K=W.status,H=W.diff,N=H!=null&&typeof H.diffs==="object"&&H.diffs!==null,[F,U]=$41(K)&&N?[K,H]:await Promise.all([Aj0(X,Q,"/_sandbox/git/status","GET",{userId:G,projectRef:Y}),Aj0(X,Q,"/_sandbox/git/diff","GET",{userId:G,projectRef:Y})]),w=await r_$(J,F,U);return Z.json(w,200,cG)}catch(W){let K=W instanceof Error?W.message:String(W);if(K==="SANDBOX_GONE")return Z.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,cG);return Z.json({error:K},502,cG)}}),$.post("/:virtualMcpId/:branch/git/judge-review",HZ({maxSize:Jv$,onError:(Z)=>Z.json({error:"Payload too large"},413,cG)}),async(Z)=>{let X=dC(Z);if(X instanceof Response)return X;let{claimName:Q,userId:G,projectRef:Y}=Z.get("vmClaim"),J=Z.var.studioContext;try{let W=await Z.req.json().catch(()=>({})),K=W.status,H=W.diff,N=H!=null&&typeof H.diffs==="object"&&H.diffs!==null,[F,U]=$41(K)&&N?[K,H]:await Promise.all([Aj0(X,Q,"/_sandbox/git/status","GET",{userId:G,projectRef:Y}),Aj0(X,Q,"/_sandbox/git/diff","GET",{userId:G,projectRef:Y})]),w=await s_$(J,F,U,typeof W.language==="string"?W.language:void 0);return Z.json(w,200,cG)}catch(W){let K=W instanceof Error?W.message:String(W);if(K==="SANDBOX_GONE")return Z.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,cG);return Z.json({error:K},502,cG)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(Z)=>{let X=dC(Z);if(X instanceof Response)return X;let{claimName:Q}=Z.get("vmClaim"),G=Z.req.query("path");if(!G||!G.startsWith("/")||G.startsWith("//")||G.includes("..")||G.includes("\\"))return Z.json({error:"Path not allowed"},403);let Y;try{Y=await X.getPreviewUrl(Q)}catch{return Z.json({error:"Preview not available"},502)}if(!Y)return Z.json({error:"Preview not available"},502);let J=Y.replace(/\/+$/,""),W=Y41(`${J}${G}`),K;try{K=await fetch(W?.url??`${J}${G}`,{...W?{headers:{host:W.hostHeader}}:{}})}catch{return Z.json({error:"Preview unreachable"},502)}let H;try{H=await K.text()}catch{return Z.json({error:"Preview unreachable"},502)}return new Response(H,{status:K.status,headers:{"content-type":K.headers.get("content-type")??"application/json"}})}),$.post("/:virtualMcpId/:branch/preview-invoke",HZ({maxSize:n86,onError:(Z)=>Z.json({error:"Payload too large"},413)}),async(Z)=>{let X=dC(Z);if(X instanceof Response)return X;let{claimName:Q}=Z.get("vmClaim"),G;try{G=await X.getPreviewUrl(Q)}catch{return Z.json({error:"Preview not available"},502)}if(!G)return Z.json({error:"Preview not available"},502);let Y;try{Y=await Z.req.json()}catch{return Z.json({error:"Invalid JSON body"},400)}if(!Y||typeof Y!=="object"||Array.isArray(Y))return Z.json({error:"Invalid JSON body"},400);let J=$v$(Y);if(!J)return Z.json({error:"Invalid or missing __resolveType"},400);let W=Zv$(G,J.resolveType),K=Y41(W),H;try{H=await fetch(K?.url??W,{method:"POST",headers:{"content-type":"application/json",...K?{host:K.hostHeader}:{}},body:JSON.stringify(J.payload),signal:AbortSignal.timeout(30000)})}catch{return Z.json({error:"Preview unreachable"},502)}let N;try{N=await H.text()}catch{return Z.json({error:"Preview unreachable"},502)}return new Response(N,{status:H.status,headers:{"content-type":H.headers.get("content-type")??"application/json"}})}),$};var Nv$=B(()=>{y8();mO();mg();c_$();GN();d_$();j3();gw();m_$();n_$();vd0();_i();Q41();e_$();Xv$();Yv$();m86=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;t86=u_$(async($,Z)=>{let X=$.var.studioContext;try{Z0(X)}catch{return $.json({error:"Unauthorized"},401)}let Q=W1(X);if(!Q)return $.json({error:"Unauthorized"},401);let G;try{G=r(X)}catch{return $.json({error:"Organization scope required"},403)}let Y=$.req.param("virtualMcpId"),J=$.req.param("branch");if(!Y||!J)return $.json({error:"virtualMcpId and branch are required"},400);try{i86(J)}catch(w){let O=w instanceof Error?w.message:String(w);return $.json({error:O},400)}let W=await X.storage.virtualMcps.findById(Y);if(!W||W.organization_id!==G.id)return $.json({error:"Virtual MCP not found"},404);let K=em({orgId:G.id,virtualMcpId:Y,branch:J}),H=await ON(X,J,Q),N=l_$({userId:H,projectRef:K}),F=W.metadata??null,U;try{U=(await uX(X,{userId:H,branch:J,virtualMcpMetadata:F})).provider}catch{U=null}if(!U)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:N,callerUserId:Q,runner:U,virtualMcpId:Y,branch:J,userId:H,projectRef:K,virtualMcpMetadata:F,connectionIds:W.connections?.map((w)=>w.connection_id)??[]}),Z()});Pj0=new Map;cG={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};Kv$=["clone","install","start"]});var Fv$=($)=>{let Z=new B1;if(Z.use("*",vC),Z.route("/",yE0()),Z.route("/",RS$()),Z.route("/",M_$()),Z.route("/",R_$()),Z.route("/",Lj0()),Z.route("/tools",b_$()),Z.route("/",C_$()),Z.route("/",J_$({kvStorage:$.kvStorage})),Z.route("/",G_$()),Z.route("/fs",L_$({getConnection:$.getNatsConnection})),Z.route("/sandbox",Hv$()),Z.route("/",P_$()),Z.route("/deco-sites",hE0()),Z.route("/sso",CE0()),Z.route("/",Ej0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",DS$()),$.mountDevAssets)Z.route("/dev-assets",uE0({orgFromPath:!0}));return Z.use("/mcp/:connectionId?",$.mcpAuth),Z.use("/mcp/:connectionId/ui-resource",$.mcpAuth),Z.use("/mcp/gateway/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/virtual-mcp/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/self",$.mcpAuth),Z.use("/mcp/task-run/:threadId",$.mcpAuth),Z.route("/",OM$()),Z.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",$.betterAuthProtectedResourceHandler),Z.get("/mcp/.well-known/oauth-protected-resource",$.betterAuthProtectedResourceHandler),Z.route("/mcp/task-run",j_$()),Z.route("/mcp",$O0()),Z.route("/mcp/self",Dj0()),Z.route("/mcp",QO0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var Uv$=B(()=>{y8();L$1();LS$();A$1();cE0();Ho();B$1();Y_$();W_$();E_$();Pn();W$1();GO0();d81();z_$();A_$();I_$();k_$();__$();i81();f_$();n81();ZO0();Nv$()});function s86($){return $.filter((Z)=>Z.vendors?.alias).map((Z)=>({name:Z.name,title:Z.title,description:Z.description,logo:Z.logo,category:Z.category,vendor:{alias:Z.vendors.alias,url:Z.vendors.url}}))}async function e86($,Z){let X=await fetch(`${$}/rest/v1/apps?select=name,title,description,logo,category,vendors(alias,url)`,{headers:{apikey:Z,Authorization:`Bearer ${Z}`,Accept:"application/json"},signal:AbortSignal.timeout(a86)});if(!X.ok){let Q=await X.text().catch(()=>X.statusText);throw console.error(`[deco-apps] Supabase error (${X.status}): ${Q.slice(0,200)}`),Error(`External service error (${X.status})`)}return await X.json()}var a86=1e4,$46=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},wv$=()=>{let $=new B1;return $.use("*",$46),$.get("/",async(Z)=>{let X=c0(),Q=X.decoSupabaseUrl,G=X.decoSupabaseServiceKey;if(!Q||!G)return Z.json({apps:[]});try{let Y=await e86(Q,G);return Z.json({apps:s86(Y)})}catch(Y){return console.error("[deco-apps] GET error:",Y),Z.json({error:"Failed to fetch apps"},502)}}),$};var Ov$=B(()=>{y8();S$()});import{z as M1}from"zod";function cK($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function N46($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let X=$.substring(0,Z),Q=$.substring(Z+1);if(!X||!Q)return null;return{credentialId:X,modelId:Q}}function F46($,Z,X){try{return JSON.parse($)}catch{throw new Lv$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function U46($){let Z={};for(let X of $)if(X.role==="assistant"&&X.tool_calls)for(let Q of X.tool_calls)Z[Q.id]=Q.function.name;return $.map((X)=>{switch(X.role){case"system":return{role:"system",content:X.content};case"user":if(typeof X.content==="string")return{role:"user",content:X.content};return{role:"user",content:X.content.map((G)=>{if(G.type==="text")return{type:"text",text:G.text};return{type:"image",image:G.image_url.url}})};case"assistant":if(X.tool_calls&&X.tool_calls.length>0)return{role:"assistant",content:X.tool_calls.map((G)=>({type:"tool-call",toolCallId:G.id,toolName:G.function.name,input:F46(G.function.arguments,G.id,G.function.name)}))};return{role:"assistant",content:X.content??""};case"tool":let Q=Z[X.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:X.tool_call_id,toolName:Q,output:{type:"text",value:X.content}}]}}})}function w46($){let Z=$.map((X)=>{let Q=X.function.parameters?PG(X.function.parameters):PG({type:"object",properties:{}});return[X.function.name,_$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function O46($){if(!$)return;return{openai:{response_format:$}}}function B46(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function Bv$($,Z,X,Q,G,Y){let J={model:$,messages:Z,tools:X,temperature:Q.temperature,maxTokens:Q.max_tokens,topP:Q.top_p,frequencyPenalty:Q.frequency_penalty,presencePenalty:Q.presence_penalty,stopSequences:Q.stop?Array.isArray(Q.stop)?Q.stop:[Q.stop]:void 0,abortSignal:Y};return G?{...J,providerOptions:G}:J}function Dv$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var Z46=256,X46,Q46,G46,Y46,J46,W46,K46,H46,Lv$,Ev$,jv$;var zv$=B(()=>{k4();y8();mg();xN();X46=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),Q46=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),G46=M1.discriminatedUnion("role",[M1.object({role:M1.literal("system"),content:M1.string(),name:M1.string().optional()}),M1.object({role:M1.literal("user"),content:M1.union([M1.string(),M1.array(M1.union([M1.object({type:M1.literal("text"),text:M1.string()}),M1.object({type:M1.literal("image_url"),image_url:M1.object({url:M1.string(),detail:M1.string().optional()})})]))]),name:M1.string().optional()}),M1.object({role:M1.literal("assistant"),content:M1.string().nullable().optional(),name:M1.string().optional(),tool_calls:M1.array(Q46).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),Y46=M1.object({type:M1.literal("text")}),J46=M1.object({type:M1.literal("json_object")}),W46=M1.object({type:M1.literal("json_schema"),json_schema:M1.object({name:M1.string(),description:M1.string().optional(),schema:M1.record(M1.string(),M1.unknown()),strict:M1.boolean().optional()})}),K46=M1.union([Y46,J46,W46]),H46=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(G46),stream:M1.boolean().optional().default(!1),temperature:M1.number().min(0).max(2).optional(),max_tokens:M1.number().positive().optional(),top_p:M1.number().min(0).max(1).optional(),frequency_penalty:M1.number().min(-2).max(2).optional(),presence_penalty:M1.number().min(-2).max(2).optional(),stop:M1.union([M1.string(),M1.array(M1.string())]).optional(),tools:M1.array(X46).optional(),tool_choice:M1.union([M1.literal("auto"),M1.literal("none"),M1.literal("required"),M1.object({type:M1.literal("function"),function:M1.object({name:M1.string()})})]).optional(),response_format:K46.optional(),user:M1.string().optional()});Lv$=class Lv$ extends Error{constructor($){super($);this.name="MessageConversionError"}};Ev$=new B1;Ev$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(cK("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(cK("Organization context is required. Ensure your API key has organization metadata.","invalid_request_error","organization"),400);if((Z.organization.slug??Z.organization.id)!==X)return $.json(cK("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),G=H46.safeParse(Q);if(!G.success){let L=G.error.issues[0]??{message:"Invalid request",path:[]};return $.json(cK(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let Y=G.data,J=N46(Y.model);if(!J)return $.json(cK("Invalid model format. Expected 'model_id' or 'credential_id:model_id' (e.g., 'claude-sonnet-4-6' or 'key_abc123:claude-sonnet-4-6')","invalid_request_error","model"),400);let{credentialId:W}=J,{modelId:K}=J;if(!W){let E=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((j)=>QD(j.providerId));if(!E)return $.json(cK("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);W=E.id}let H;try{H=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(cK(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let N=H.aiSdk.languageModel(K),F=U46(Y.messages),U=Y.tools?w46(Y.tools):void 0,w=O46(Y.response_format),O=B46(),D=Math.floor(Date.now()/1000);if(Y.stream)return QF($,async(L)=>{let E=Bv$(N,F,U,Y,w,$.req.raw.signal);try{let j=Aw(E),z=!1,A=0,P="",M=async()=>{if(P.length===0)return;let k=P;P="",await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Y.model,choices:[{index:0,delta:{content:k},finish_reason:null}]})})};for await(let k of j.fullStream){if(!z&&(k.type==="text-delta"||k.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Y.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(k.type==="text-delta"){if(P+=k.text,P.length>=Z46)await M()}else if(k.type==="tool-call"){await M();let q=A++;await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Y.model,choices:[{index:0,delta:{tool_calls:[{index:q,id:k.toolCallId,type:"function",function:{name:k.toolName,arguments:JSON.stringify(k.input)}}]},finish_reason:null}]})})}else if(k.type==="finish")await M(),await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Y.model,choices:[{index:0,delta:{},finish_reason:Dv$(k.finishReason)}],usage:k.totalUsage?{prompt_tokens:k.totalUsage.inputTokens??0,completion_tokens:k.totalUsage.outputTokens??0,total_tokens:k.totalUsage.totalTokens??0}:void 0})})}await M(),await L.writeSSE({data:"[DONE]"})}catch(j){let z=j;console.error("[openai-compat:stream] Error:",z.message),await L.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let L=Bv$(N,F,U,Y,w,$.req.raw.signal),E=await zw(L),j={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)j.tool_calls=E.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),j.content=null;return $.json({id:O,object:"chat.completion",created:D,model:Y.model,choices:[{index:0,message:j,finish_reason:Dv$(E.finishReason)}],usage:{prompt_tokens:E.usage?.inputTokens??0,completion_tokens:E.usage?.outputTokens??0,total_tokens:E.usage?.totalTokens??0}})}}catch(Q){let G=Q;if(G.name==="AbortError")return $.json(cK("Request aborted","invalid_request_error"),400);if(G.name==="MessageConversionError")return $.json(cK(G.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",G.message,G.stack),$.json(cK(G.message,"server_error"),500)}});jv$=Ev$});var Av$;var Pv$=B(()=>{Av$={name:"decocms",version:"4.204.11",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function E46(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??L46}}var Tv$,L46="https://ph.studio.decocms.com",Rv$;var Iv$=B(()=>{y8();hx0();MV();jZ();S$();X$1();Pv$();Tv$=new B1;Tv$.get("/",($)=>{let Z={version:Av$.version,theme:Gu1(),...pD().logo&&{logo:pD().logo},...UK()&&{internalUrl:vq1()},...c0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!c0().firecrawlApiKey,auth:bk$(),posthog:E46(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!UK()&&c0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});Rv$=Tv$});function ng($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function W41($){return(ng($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function Mv$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(ng($))}&sz=${Z}`}function qv$($,Z){let X=$.trim();if(X.length<=Z)return X;let Q=X.slice(0,Z-1),G=Q.lastIndexOf(" ");return`${(G>Z*0.6?Q.slice(0,G):Q).trimEnd()}\u2026`}function kv$($){let{brand:Z,domain:X,score:Q,verdict:G}=$,Y=typeof Q==="number"?`${Z} commerce report \u2014 ${Math.round(Q)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,J=`See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,W=G?.trim()?qv$(`${G.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):qv$(`How does ${X} really perform? ${J}`,200);return{title:Y,description:W}}import{z as l0}from"zod";var mC,j46,z46,P46,A46,Sv$;var Vv$=B(()=>{mC=l0.enum(["good","bad","neutral"]),j46=l0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},l0.object({kind:l0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:l0.coerce.string().optional(),tone:mC.optional(),muted:l0.boolean().optional(),delta:l0.coerce.string().optional(),deltaDir:l0.enum(["up","down","neutral"]).optional(),points:l0.array(l0.coerce.number()).optional(),label:l0.coerce.string().optional()}).transform(($)=>{if($.kind==="badge"&&$.label==null)$.label=$.value??"";if($.kind==="score"){let Z=Number($.value);if(Number.isNaN(Z))return{...$,kind:"text"}}return $})),z46=l0.preprocess(($)=>{let Z=$;if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&Array.isArray(Z.cells))Z=Z.cells;if(Array.isArray(Z)&&Z.length===1&&Array.isArray(Z[0]))Z=Z[0];if(Array.isArray(Z))return Z;if(Z&&typeof Z==="object")return Object.values(Z);return Z},l0.array(j46)),P46={key:l0.coerce.string(),title:l0.coerce.string(),eyebrow:l0.coerce.string().optional(),headline:l0.coerce.string(),annotation:l0.coerce.string().optional(),methodology:l0.coerce.string().optional(),sources:l0.array(l0.object({name:l0.coerce.string(),logoUrl:l0.coerce.string()})).optional()},A46=l0.discriminatedUnion("template",[l0.object({template:l0.literal("cover"),score:l0.object({value:l0.coerce.number(),max:l0.coerce.number().optional(),grade:l0.coerce.string().optional(),label:l0.coerce.string().optional()}).optional(),brandImage:l0.coerce.string().optional(),screenshot:l0.coerce.string().optional(),mobileScreenshot:l0.coerce.string().optional()}),l0.object({template:l0.literal("cta"),ctaUrl:l0.coerce.string().optional(),ctaLabel:l0.coerce.string().optional(),bullets:l0.array(l0.coerce.string()).optional()}),l0.object({template:l0.literal("series"),points:l0.array(l0.coerce.number()).min(2),xLabels:l0.array(l0.coerce.string()).min(1),unit:l0.coerce.string().optional(),callout:l0.object({index:l0.coerce.number(),value:l0.coerce.string(),tone:mC.optional()})}),l0.object({template:l0.literal("threshold"),value:l0.coerce.string().default(""),metricLabel:l0.coerce.string().optional(),ratio:l0.coerce.number(),thresholdRatio:l0.coerce.number().optional(),thresholdLabel:l0.coerce.string().default(""),tone:mC.optional()}),l0.object({template:l0.literal("stats"),stats:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),tone:mC.optional()})).min(1)}),l0.object({template:l0.literal("bars"),items:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),ratio:l0.coerce.number(),tone:mC.optional()})).min(1)}),l0.object({template:l0.literal("gauges"),gauges:l0.array(l0.object({label:l0.coerce.string(),value:l0.coerce.string(),status:l0.enum(["good","warn","bad"]).catch("warn"),caption:l0.coerce.string().optional(),ratio:l0.coerce.number().optional()})).min(1)}),l0.object({template:l0.literal("checklist"),checks:l0.array(l0.object({label:l0.coerce.string(),status:l0.enum(["pass","fail","warn"]).catch("fail"),value:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("table"),columns:l0.array(l0.object({label:l0.coerce.string(),align:l0.enum(["left","right"]).optional()})).min(1),rows:l0.array(z46).min(1),highlightRow:l0.coerce.number().optional()}),l0.object({template:l0.literal("products"),products:l0.array(l0.object({name:l0.coerce.string(),price:l0.coerce.string().optional(),image:l0.coerce.string().optional(),url:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("list"),entries:l0.array(l0.object({label:l0.coerce.string(),severity:l0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:l0.coerce.number().optional()}),l0.object({template:l0.literal("keywords"),volumeLabel:l0.coerce.string().optional(),keywords:l0.array(l0.object({term:l0.coerce.string(),volume:l0.coerce.string(),position:l0.coerce.number().catch(0)})).min(1)}),l0.object({template:l0.literal("competitor"),metricLabel:l0.coerce.string().optional(),competitors:l0.array(l0.object({name:l0.coerce.string(),value:l0.coerce.string(),tone:mC.optional(),isYou:l0.boolean().optional()})).min(1)}),l0.object({template:l0.literal("scorecard"),rivalLabel:l0.coerce.string().optional(),dimensions:l0.array(l0.object({label:l0.coerce.string(),you:l0.coerce.string(),rival:l0.coerce.string().optional(),rivalName:l0.coerce.string().optional(),tone:mC.optional()})).min(1)})]),Sv$=l0.object({...P46,template:A46})});function Tj0($){let Z=[],X=[...$.sections].sort((G,Y)=>G.position-Y.position).map((G)=>{let Y=Sv$.safeParse(G.props);if(Y.success)return Y.data;let J=Y.error.issues[0];return Z.push({section_type:G.section_type,position:G.position,reason:J?`${J.path.join(".")||"(root)"}: ${J.message}`:"contract violation"}),null}).filter((G)=>G!==null),Q=X.filter((G)=>G.template.template!=="cover"&&G.template.template!=="cta").map((G)=>({key:G.key,title:G.title}));return{deck:{meta:{...$.meta,scores:$.summary?.scores,scannedAt:$.scanned_at,toc:Q},slides:X},drops:Z}}var K41=B(()=>{Vv$()});import{join as Cv$}from"path";async function R46($){try{let Z=await fetch(`${xW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(T46)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=Tj0(X);if(!Q.slides.length)return null;let G=Q.slides.find((W)=>W.template.template==="cover"),Y=G?.template,J=Y&&Y.template==="cover"?Y:void 0;return{brand:Q.meta.brand?.trim()||W41($),score:Q.meta.scores?.cover??J?.score?.value,verdict:G?.annotation?.trim()||G?.headline?.trim()||void 0}}catch{return null}}function lG($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function I46($,Z){let X=ng($),Q=Z?.brand?.trim()||W41(X),G=Mv$(X,128),J=`${(c0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=kv$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),H=`${J}/og.png`,N=`${Q} commerce report by decocms`;return[`<title>${lG(W)}</title>`,`<meta name="description" content="${lG(K)}" />`,'<meta name="robots" content="noindex, follow" />','<meta property="og:type" content="website" />','<meta property="og:site_name" content="decocms" />',`<meta property="og:title" content="${lG(W)}" />`,`<meta property="og:description" content="${lG(K)}" />`,`<meta property="og:url" content="${lG(J)}" />`,`<meta property="og:image" content="${lG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${lG(N)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${lG(W)}" />`,`<meta name="twitter:description" content="${lG(K)}" />`,`<meta name="twitter:image" content="${lG(H)}" />`,`<meta name="twitter:image:alt" content="${lG(N)}" />`,`<link rel="canonical" href="${lG(J)}" />`,`<link rel="icon" href="${lG(G)}" sizes="any" />`].join(`
|
|
2729
|
+
Respond with the structured verdict and a short reason.`,a_$;var e_$=B(()=>{k4();mw();Q41();g86=G41.object({requiresReview:G41.boolean().describe("true if the changes should go through pull-request review"),reason:G41.string().describe("One short sentence explaining the decision (max ~120 chars)")});a_$={requiresReview:!1,reason:""}});function l86($){if(!$||$.includes(".."))return!1;return c86.test($)}function $v$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!l86(Z))return null;let{__resolveType:X,...Q}=$;return{resolveType:Z,payload:Q}}function Zv$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var c86;var Xv$=B(()=>{c86=/^[\w./@-]+$/});function Y41($){let Z;try{Z=new URL($)}catch{return null}if(!Z.hostname.endsWith(".localhost"))return null;let X=Z.host;return Z.hostname="127.0.0.1",{url:Z.toString(),hostHeader:X}}function Qv$($,Z){let X=$?.githubRepo;if(!X?.owner||!X?.name)return null;if(!X.connectionId)return X;if(!Z.includes(X.connectionId))return null;return X}async function Gv$($,Z,X,Q){if(!Q.connectionId)throw new ig("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let G=$.organization?.id;if(!G)throw new ig(d7);await Rw({ctx:$,connectionId:Q.connectionId,organizationId:G,forceRefresh:!0,onLegacyMintError:(N)=>{let F=N instanceof Error?N.message:d7;throw new ig(F)}});let{cloneUrl:Y,gitUserName:J,gitUserEmail:W}=await Iw(Q.connectionId,Q.owner,Q.name,$.db,$.vault),K=zj0($),H=await Z.proxyDaemonRequest(X,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{repository:{cloneUrl:Y},identity:{userName:J,userEmail:W}},...K?{operator:K}:{}})});if(!H.ok){let N=await lw(H,d86).catch(()=>H.statusText);throw Error(`Failed to refresh sandbox git credentials (${H.status}): ${N}`)}}var d86=10485760,ig;var Yv$=B(()=>{YN();r81();bi();rf();ig=class ig extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function i86($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!m86.test(Z))throw Error(`Invalid branch name: ${$}`)}function lC($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(p86)])}function dC($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}function J41($,Z){let Q=(Pj0.get($)??Promise.resolve()).catch(()=>{}).then(Z),G=Q.catch(()=>{});return Pj0.set($,G),G.finally(()=>{if(Pj0.get($)===G)Pj0.delete($)}),Q}async function fZ($,Z,X){let Q=dC($);if(Q instanceof Response)return Q;let{claimName:G,userId:Y,projectRef:J}=$.get("vmClaim"),W=X?.method??"POST",K=null,H=new Headers;if(X?.jsonBody!==void 0)K=X.jsonBody,H.set("content-type","application/json");else if(X?.forwardJsonBody)K=await $.req.text(),H.set("content-type","application/json");let N=X?.signal,F={method:W,headers:H,body:K,...N?{signal:N}:{}},U=async()=>{let w=await Q.proxyDaemonRequest(G,Z,F);if(X?.map404to410&&w.status===404){try{await w.body?.cancel()}catch{}if(await Q.adoptLiveClaim?.({userId:Y,projectRef:J},G))w=await Q.proxyDaemonRequest(G,Z,F);if(w.status===404){try{await w.body?.cancel()}catch{}return new Response(JSON.stringify({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."}),{status:410,headers:{"content-type":"application/json",...cG}})}}let O=await w.text(),D=X?.redactRepoDirUnlessDesktop&&Q.kind!=="user-desktop"?o86(O):O,L=w.headers.get("content-type")??"application/json";return new Response(D,{status:w.status,headers:{"content-type":L,...cG}})};try{if(N){let w=U();return w.catch(()=>{}),await Promise.race([w,new Promise((D,L)=>{if(N.aborted)return L(N.reason);N.addEventListener("abort",()=>L(N.reason),{once:!0})})])}return await U()}catch(w){let O=w instanceof Error?w.message:String(w);return $.json({error:`Daemon unreachable: ${O}`},502)}}function o86($){try{let Z=JSON.parse($);if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&"repoDir"in Z)return JSON.stringify({...Z,repoDir:null})}catch{}return $}async function Aj0($,Z,X,Q="GET",G){let Y=await $.proxyDaemonRequest(Z,X,{method:Q,headers:new Headers,body:null});if(Y.status===404&&G){try{await Y.body?.cancel()}catch{}if(await $.adoptLiveClaim?.(G,Z))Y=await $.proxyDaemonRequest(Z,X,{method:Q,headers:new Headers,body:null})}if(Y.status===404){try{await Y.body?.cancel()}catch{}throw Error("SANDBOX_GONE")}let J=await Y.text();if(!Y.ok){let W=`Daemon error (${Y.status})`;try{W=JSON.parse(J).error??W}catch{}throw Error(W)}return JSON.parse(J)}function r86($){return Kv$.includes($)}var m86,Jv$=524288,n86=65536,p86=1e4,Wv$=2000,t86,Pj0,cG,Kv$,Hv$=()=>{let $=new B1;return $.use("/:virtualMcpId/:branch/*",t86),$.post("/:virtualMcpId/:branch/write",(Z)=>fZ(Z,"/_sandbox/write",{forwardJsonBody:!0,signal:lC(Z)})),$.post("/:virtualMcpId/:branch/unlink",(Z)=>fZ(Z,"/_sandbox/unlink",{forwardJsonBody:!0,signal:lC(Z)})),$.post("/:virtualMcpId/:branch/mkdir",(Z)=>fZ(Z,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:lC(Z)})),$.post("/:virtualMcpId/:branch/rename",(Z)=>fZ(Z,"/_sandbox/rename",{forwardJsonBody:!0,signal:lC(Z)})),$.post("/:virtualMcpId/:branch/read",(Z)=>fZ(Z,"/_sandbox/read",{forwardJsonBody:!0,signal:lC(Z)})),$.post("/:virtualMcpId/:branch/glob",(Z)=>fZ(Z,"/_sandbox/glob",{forwardJsonBody:!0,signal:lC(Z)})),$.post("/:virtualMcpId/:branch/grep",(Z)=>fZ(Z,"/_sandbox/grep",{forwardJsonBody:!0,signal:lC(Z)})),$.post("/:virtualMcpId/:branch/exec/:script",async(Z)=>{let X=Z.req.param("script");if(!X)return Z.json({error:"missing script name"},400);return fZ(Z,`/_sandbox/exec/${encodeURIComponent(X)}`)}),$.post("/:virtualMcpId/:branch/exec/:script/kill",async(Z)=>{let X=Z.req.param("script");if(!X)return Z.json({error:"missing script name"},400);return fZ(Z,`/_sandbox/exec/${encodeURIComponent(X)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(Z)=>fZ(Z,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDirUnlessDesktop:!0})),$.put("/:virtualMcpId/:branch/config",(Z)=>fZ(Z,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(Z)=>{let X=Z.req.param("step");if(!X||!r86(X))return Z.json({error:`step must be one of: ${Kv$.join(", ")}`},400);if(X==="start"){let Q=Z.get("vmClaim");if(Q.runner){let G=r(Z.var.studioContext),Y=rF0(Q.virtualMcpMetadata);try{await sF0({ctx:Z.var.studioContext,runner:Q.runner,handle:Q.claimName,orgId:G.id,userId:Q.callerUserId,entries:Y})}catch(J){let W=J instanceof Error?J.message:String(J);return Z.json({error:`Failed to push env to daemon: ${W}`},502)}}}return fZ(Z,`/_sandbox/setup/${X}`,{signal:Z.req.raw.signal,map404to410:!0})}),$.get("/:virtualMcpId/:branch/events",(Z)=>{let X=Z.get("vmClaim");if(!X.runner)return QF(Z,async(Q)=>{await Q.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this studio instance."})})});return i_$(Z,{ctx:Z.var.studioContext,claimName:X.claimName,runner:X.runner,virtualMcpId:X.virtualMcpId,branch:X.branch,userId:X.userId,projectRef:X.projectRef,virtualMcpMetadata:X.virtualMcpMetadata})}),$.get("/:virtualMcpId/:branch/git/status",(Z)=>fZ(Z,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([Z.req.raw.signal,AbortSignal.timeout(Wv$)])})),$.post("/:virtualMcpId/:branch/git/status",(Z)=>fZ(Z,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([Z.req.raw.signal,AbortSignal.timeout(Wv$)])})),$.post("/:virtualMcpId/:branch/git/diff",(Z)=>fZ(Z,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/git/publish",async(Z)=>{let X=dC(Z);if(X instanceof Response)return X;let{claimName:Q,virtualMcpMetadata:G,connectionIds:Y}=Z.get("vmClaim"),J=Z.var.studioContext;return J41(Q,async()=>{try{await a81(J,X,Q);let W=Qv$(G,Y);if(W)await Gv$(J,X,Q,W)}catch(W){if(W instanceof ig)return Z.json({error:W.message},403,cG);let K=W instanceof Error?W.message:String(W);return Z.json({error:K},502,cG)}return fZ(Z,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",(Z)=>{let{claimName:X}=Z.get("vmClaim");return J41(X,()=>fZ(Z,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(Z)=>{let X=dC(Z);if(X instanceof Response)return X;let{claimName:Q}=Z.get("vmClaim"),G=Z.var.studioContext;return J41(Q,async()=>{try{await a81(G,X,Q)}catch(Y){let J=Y instanceof Error?Y.message:String(Y);return Z.json({error:J},502,cG)}return fZ(Z,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",HZ({maxSize:Jv$,onError:(Z)=>Z.json({error:"Payload too large"},413,cG)}),async(Z)=>{let X=dC(Z);if(X instanceof Response)return X;let{claimName:Q,userId:G,projectRef:Y}=Z.get("vmClaim"),J=Z.var.studioContext;try{let W=await Z.req.json().catch(()=>({})),K=W.status,H=W.diff,N=H!=null&&typeof H.diffs==="object"&&H.diffs!==null,[F,U]=$41(K)&&N?[K,H]:await Promise.all([Aj0(X,Q,"/_sandbox/git/status","GET",{userId:G,projectRef:Y}),Aj0(X,Q,"/_sandbox/git/diff","GET",{userId:G,projectRef:Y})]),w=await r_$(J,F,U);return Z.json(w,200,cG)}catch(W){let K=W instanceof Error?W.message:String(W);if(K==="SANDBOX_GONE")return Z.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,cG);return Z.json({error:K},502,cG)}}),$.post("/:virtualMcpId/:branch/git/judge-review",HZ({maxSize:Jv$,onError:(Z)=>Z.json({error:"Payload too large"},413,cG)}),async(Z)=>{let X=dC(Z);if(X instanceof Response)return X;let{claimName:Q,userId:G,projectRef:Y}=Z.get("vmClaim"),J=Z.var.studioContext;try{let W=await Z.req.json().catch(()=>({})),K=W.status,H=W.diff,N=H!=null&&typeof H.diffs==="object"&&H.diffs!==null,[F,U]=$41(K)&&N?[K,H]:await Promise.all([Aj0(X,Q,"/_sandbox/git/status","GET",{userId:G,projectRef:Y}),Aj0(X,Q,"/_sandbox/git/diff","GET",{userId:G,projectRef:Y})]),w=await s_$(J,F,U,typeof W.language==="string"?W.language:void 0);return Z.json(w,200,cG)}catch(W){let K=W instanceof Error?W.message:String(W);if(K==="SANDBOX_GONE")return Z.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,cG);return Z.json({error:K},502,cG)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(Z)=>{let X=dC(Z);if(X instanceof Response)return X;let{claimName:Q}=Z.get("vmClaim"),G=Z.req.query("path");if(!G||!G.startsWith("/")||G.startsWith("//")||G.includes("..")||G.includes("\\"))return Z.json({error:"Path not allowed"},403);let Y;try{Y=await X.getPreviewUrl(Q)}catch{return Z.json({error:"Preview not available"},502)}if(!Y)return Z.json({error:"Preview not available"},502);let J=Y.replace(/\/+$/,""),W=Y41(`${J}${G}`),K;try{K=await fetch(W?.url??`${J}${G}`,{...W?{headers:{host:W.hostHeader}}:{}})}catch{return Z.json({error:"Preview unreachable"},502)}let H;try{H=await K.text()}catch{return Z.json({error:"Preview unreachable"},502)}return new Response(H,{status:K.status,headers:{"content-type":K.headers.get("content-type")??"application/json"}})}),$.post("/:virtualMcpId/:branch/preview-invoke",HZ({maxSize:n86,onError:(Z)=>Z.json({error:"Payload too large"},413)}),async(Z)=>{let X=dC(Z);if(X instanceof Response)return X;let{claimName:Q}=Z.get("vmClaim"),G;try{G=await X.getPreviewUrl(Q)}catch{return Z.json({error:"Preview not available"},502)}if(!G)return Z.json({error:"Preview not available"},502);let Y;try{Y=await Z.req.json()}catch{return Z.json({error:"Invalid JSON body"},400)}if(!Y||typeof Y!=="object"||Array.isArray(Y))return Z.json({error:"Invalid JSON body"},400);let J=$v$(Y);if(!J)return Z.json({error:"Invalid or missing __resolveType"},400);let W=Zv$(G,J.resolveType),K=Y41(W),H;try{H=await fetch(K?.url??W,{method:"POST",headers:{"content-type":"application/json",...K?{host:K.hostHeader}:{}},body:JSON.stringify(J.payload),signal:AbortSignal.timeout(30000)})}catch{return Z.json({error:"Preview unreachable"},502)}let N;try{N=await H.text()}catch{return Z.json({error:"Preview unreachable"},502)}return new Response(N,{status:H.status,headers:{"content-type":H.headers.get("content-type")??"application/json"}})}),$};var Nv$=B(()=>{y8();mO();mg();c_$();GN();d_$();j3();gw();m_$();n_$();vd0();_i();Q41();e_$();Xv$();Yv$();m86=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;t86=u_$(async($,Z)=>{let X=$.var.studioContext;try{Z0(X)}catch{return $.json({error:"Unauthorized"},401)}let Q=W1(X);if(!Q)return $.json({error:"Unauthorized"},401);let G;try{G=r(X)}catch{return $.json({error:"Organization scope required"},403)}let Y=$.req.param("virtualMcpId"),J=$.req.param("branch");if(!Y||!J)return $.json({error:"virtualMcpId and branch are required"},400);try{i86(J)}catch(w){let O=w instanceof Error?w.message:String(w);return $.json({error:O},400)}let W=await X.storage.virtualMcps.findById(Y);if(!W||W.organization_id!==G.id)return $.json({error:"Virtual MCP not found"},404);let K=em({orgId:G.id,virtualMcpId:Y,branch:J}),H=await ON(X,J,Q),N=l_$({userId:H,projectRef:K}),F=W.metadata??null,U;try{U=(await uX(X,{userId:H,branch:J,virtualMcpMetadata:F})).provider}catch{U=null}if(!U)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:N,callerUserId:Q,runner:U,virtualMcpId:Y,branch:J,userId:H,projectRef:K,virtualMcpMetadata:F,connectionIds:W.connections?.map((w)=>w.connection_id)??[]}),Z()});Pj0=new Map;cG={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};Kv$=["clone","install","start"]});var Fv$=($)=>{let Z=new B1;if(Z.use("*",vC),Z.route("/",yE0()),Z.route("/",RS$()),Z.route("/",M_$()),Z.route("/",R_$()),Z.route("/",Lj0()),Z.route("/tools",b_$()),Z.route("/",C_$()),Z.route("/",J_$({kvStorage:$.kvStorage})),Z.route("/",G_$()),Z.route("/fs",L_$({getConnection:$.getNatsConnection})),Z.route("/sandbox",Hv$()),Z.route("/",P_$()),Z.route("/deco-sites",hE0()),Z.route("/sso",CE0()),Z.route("/",Ej0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",DS$()),$.mountDevAssets)Z.route("/dev-assets",uE0({orgFromPath:!0}));return Z.use("/mcp/:connectionId?",$.mcpAuth),Z.use("/mcp/:connectionId/ui-resource",$.mcpAuth),Z.use("/mcp/gateway/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/virtual-mcp/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/self",$.mcpAuth),Z.use("/mcp/task-run/:threadId",$.mcpAuth),Z.route("/",OM$()),Z.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",$.betterAuthProtectedResourceHandler),Z.get("/mcp/.well-known/oauth-protected-resource",$.betterAuthProtectedResourceHandler),Z.route("/mcp/task-run",j_$()),Z.route("/mcp",$O0()),Z.route("/mcp/self",Dj0()),Z.route("/mcp",QO0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var Uv$=B(()=>{y8();L$1();LS$();A$1();cE0();Ho();B$1();Y_$();W_$();E_$();Pn();W$1();GO0();d81();z_$();A_$();I_$();k_$();__$();i81();f_$();n81();ZO0();Nv$()});function s86($){return $.filter((Z)=>Z.vendors?.alias).map((Z)=>({name:Z.name,title:Z.title,description:Z.description,logo:Z.logo,category:Z.category,vendor:{alias:Z.vendors.alias,url:Z.vendors.url}}))}async function e86($,Z){let X=await fetch(`${$}/rest/v1/apps?select=name,title,description,logo,category,vendors(alias,url)`,{headers:{apikey:Z,Authorization:`Bearer ${Z}`,Accept:"application/json"},signal:AbortSignal.timeout(a86)});if(!X.ok){let Q=await X.text().catch(()=>X.statusText);throw console.error(`[deco-apps] Supabase error (${X.status}): ${Q.slice(0,200)}`),Error(`External service error (${X.status})`)}return await X.json()}var a86=1e4,$46=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},wv$=()=>{let $=new B1;return $.use("*",$46),$.get("/",async(Z)=>{let X=c0(),Q=X.decoSupabaseUrl,G=X.decoSupabaseServiceKey;if(!Q||!G)return Z.json({apps:[]});try{let Y=await e86(Q,G);return Z.json({apps:s86(Y)})}catch(Y){return console.error("[deco-apps] GET error:",Y),Z.json({error:"Failed to fetch apps"},502)}}),$};var Ov$=B(()=>{y8();S$()});import{z as M1}from"zod";function cK($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function N46($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let X=$.substring(0,Z),Q=$.substring(Z+1);if(!X||!Q)return null;return{credentialId:X,modelId:Q}}function F46($,Z,X){try{return JSON.parse($)}catch{throw new Lv$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function U46($){let Z={};for(let X of $)if(X.role==="assistant"&&X.tool_calls)for(let Q of X.tool_calls)Z[Q.id]=Q.function.name;return $.map((X)=>{switch(X.role){case"system":return{role:"system",content:X.content};case"user":if(typeof X.content==="string")return{role:"user",content:X.content};return{role:"user",content:X.content.map((G)=>{if(G.type==="text")return{type:"text",text:G.text};return{type:"image",image:G.image_url.url}})};case"assistant":if(X.tool_calls&&X.tool_calls.length>0)return{role:"assistant",content:X.tool_calls.map((G)=>({type:"tool-call",toolCallId:G.id,toolName:G.function.name,input:F46(G.function.arguments,G.id,G.function.name)}))};return{role:"assistant",content:X.content??""};case"tool":let Q=Z[X.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:X.tool_call_id,toolName:Q,output:{type:"text",value:X.content}}]}}})}function w46($){let Z=$.map((X)=>{let Q=X.function.parameters?PG(X.function.parameters):PG({type:"object",properties:{}});return[X.function.name,_$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function O46($){if(!$)return;return{openai:{response_format:$}}}function B46(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function Bv$($,Z,X,Q,G,Y){let J={model:$,messages:Z,tools:X,temperature:Q.temperature,maxTokens:Q.max_tokens,topP:Q.top_p,frequencyPenalty:Q.frequency_penalty,presencePenalty:Q.presence_penalty,stopSequences:Q.stop?Array.isArray(Q.stop)?Q.stop:[Q.stop]:void 0,abortSignal:Y};return G?{...J,providerOptions:G}:J}function Dv$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var Z46=256,X46,Q46,G46,Y46,J46,W46,K46,H46,Lv$,Ev$,jv$;var zv$=B(()=>{k4();y8();mg();xN();X46=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),Q46=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),G46=M1.discriminatedUnion("role",[M1.object({role:M1.literal("system"),content:M1.string(),name:M1.string().optional()}),M1.object({role:M1.literal("user"),content:M1.union([M1.string(),M1.array(M1.union([M1.object({type:M1.literal("text"),text:M1.string()}),M1.object({type:M1.literal("image_url"),image_url:M1.object({url:M1.string(),detail:M1.string().optional()})})]))]),name:M1.string().optional()}),M1.object({role:M1.literal("assistant"),content:M1.string().nullable().optional(),name:M1.string().optional(),tool_calls:M1.array(Q46).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),Y46=M1.object({type:M1.literal("text")}),J46=M1.object({type:M1.literal("json_object")}),W46=M1.object({type:M1.literal("json_schema"),json_schema:M1.object({name:M1.string(),description:M1.string().optional(),schema:M1.record(M1.string(),M1.unknown()),strict:M1.boolean().optional()})}),K46=M1.union([Y46,J46,W46]),H46=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(G46),stream:M1.boolean().optional().default(!1),temperature:M1.number().min(0).max(2).optional(),max_tokens:M1.number().positive().optional(),top_p:M1.number().min(0).max(1).optional(),frequency_penalty:M1.number().min(-2).max(2).optional(),presence_penalty:M1.number().min(-2).max(2).optional(),stop:M1.union([M1.string(),M1.array(M1.string())]).optional(),tools:M1.array(X46).optional(),tool_choice:M1.union([M1.literal("auto"),M1.literal("none"),M1.literal("required"),M1.object({type:M1.literal("function"),function:M1.object({name:M1.string()})})]).optional(),response_format:K46.optional(),user:M1.string().optional()});Lv$=class Lv$ extends Error{constructor($){super($);this.name="MessageConversionError"}};Ev$=new B1;Ev$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(cK("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(cK("Organization context is required. Ensure your API key has organization metadata.","invalid_request_error","organization"),400);if((Z.organization.slug??Z.organization.id)!==X)return $.json(cK("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),G=H46.safeParse(Q);if(!G.success){let L=G.error.issues[0]??{message:"Invalid request",path:[]};return $.json(cK(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let Y=G.data,J=N46(Y.model);if(!J)return $.json(cK("Invalid model format. Expected 'model_id' or 'credential_id:model_id' (e.g., 'claude-sonnet-4-6' or 'key_abc123:claude-sonnet-4-6')","invalid_request_error","model"),400);let{credentialId:W}=J,{modelId:K}=J;if(!W){let E=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((j)=>QD(j.providerId));if(!E)return $.json(cK("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);W=E.id}let H;try{H=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(cK(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let N=H.aiSdk.languageModel(K),F=U46(Y.messages),U=Y.tools?w46(Y.tools):void 0,w=O46(Y.response_format),O=B46(),D=Math.floor(Date.now()/1000);if(Y.stream)return QF($,async(L)=>{let E=Bv$(N,F,U,Y,w,$.req.raw.signal);try{let j=Aw(E),z=!1,A=0,P="",M=async()=>{if(P.length===0)return;let k=P;P="",await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Y.model,choices:[{index:0,delta:{content:k},finish_reason:null}]})})};for await(let k of j.fullStream){if(!z&&(k.type==="text-delta"||k.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Y.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(k.type==="text-delta"){if(P+=k.text,P.length>=Z46)await M()}else if(k.type==="tool-call"){await M();let q=A++;await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Y.model,choices:[{index:0,delta:{tool_calls:[{index:q,id:k.toolCallId,type:"function",function:{name:k.toolName,arguments:JSON.stringify(k.input)}}]},finish_reason:null}]})})}else if(k.type==="finish")await M(),await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Y.model,choices:[{index:0,delta:{},finish_reason:Dv$(k.finishReason)}],usage:k.totalUsage?{prompt_tokens:k.totalUsage.inputTokens??0,completion_tokens:k.totalUsage.outputTokens??0,total_tokens:k.totalUsage.totalTokens??0}:void 0})})}await M(),await L.writeSSE({data:"[DONE]"})}catch(j){let z=j;console.error("[openai-compat:stream] Error:",z.message),await L.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let L=Bv$(N,F,U,Y,w,$.req.raw.signal),E=await zw(L),j={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)j.tool_calls=E.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),j.content=null;return $.json({id:O,object:"chat.completion",created:D,model:Y.model,choices:[{index:0,message:j,finish_reason:Dv$(E.finishReason)}],usage:{prompt_tokens:E.usage?.inputTokens??0,completion_tokens:E.usage?.outputTokens??0,total_tokens:E.usage?.totalTokens??0}})}}catch(Q){let G=Q;if(G.name==="AbortError")return $.json(cK("Request aborted","invalid_request_error"),400);if(G.name==="MessageConversionError")return $.json(cK(G.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",G.message,G.stack),$.json(cK(G.message,"server_error"),500)}});jv$=Ev$});var Av$;var Pv$=B(()=>{Av$={name:"decocms",version:"4.204.12",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function E46(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??L46}}var Tv$,L46="https://ph.studio.decocms.com",Rv$;var Iv$=B(()=>{y8();hx0();MV();jZ();S$();X$1();Pv$();Tv$=new B1;Tv$.get("/",($)=>{let Z={version:Av$.version,theme:Gu1(),...pD().logo&&{logo:pD().logo},...UK()&&{internalUrl:vq1()},...c0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!c0().firecrawlApiKey,auth:bk$(),posthog:E46(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!UK()&&c0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});Rv$=Tv$});function ng($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function W41($){return(ng($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function Mv$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(ng($))}&sz=${Z}`}function qv$($,Z){let X=$.trim();if(X.length<=Z)return X;let Q=X.slice(0,Z-1),G=Q.lastIndexOf(" ");return`${(G>Z*0.6?Q.slice(0,G):Q).trimEnd()}\u2026`}function kv$($){let{brand:Z,domain:X,score:Q,verdict:G}=$,Y=typeof Q==="number"?`${Z} commerce report \u2014 ${Math.round(Q)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,J=`See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,W=G?.trim()?qv$(`${G.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):qv$(`How does ${X} really perform? ${J}`,200);return{title:Y,description:W}}import{z as l0}from"zod";var mC,j46,z46,P46,A46,Sv$;var Vv$=B(()=>{mC=l0.enum(["good","bad","neutral"]),j46=l0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},l0.object({kind:l0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:l0.coerce.string().optional(),tone:mC.optional(),muted:l0.boolean().optional(),delta:l0.coerce.string().optional(),deltaDir:l0.enum(["up","down","neutral"]).optional(),points:l0.array(l0.coerce.number()).optional(),label:l0.coerce.string().optional()}).transform(($)=>{if($.kind==="badge"&&$.label==null)$.label=$.value??"";if($.kind==="score"){let Z=Number($.value);if(Number.isNaN(Z))return{...$,kind:"text"}}return $})),z46=l0.preprocess(($)=>{let Z=$;if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&Array.isArray(Z.cells))Z=Z.cells;if(Array.isArray(Z)&&Z.length===1&&Array.isArray(Z[0]))Z=Z[0];if(Array.isArray(Z))return Z;if(Z&&typeof Z==="object")return Object.values(Z);return Z},l0.array(j46)),P46={key:l0.coerce.string(),title:l0.coerce.string(),eyebrow:l0.coerce.string().optional(),headline:l0.coerce.string(),annotation:l0.coerce.string().optional(),methodology:l0.coerce.string().optional(),sources:l0.array(l0.object({name:l0.coerce.string(),logoUrl:l0.coerce.string()})).optional()},A46=l0.discriminatedUnion("template",[l0.object({template:l0.literal("cover"),score:l0.object({value:l0.coerce.number(),max:l0.coerce.number().optional(),grade:l0.coerce.string().optional(),label:l0.coerce.string().optional()}).optional(),brandImage:l0.coerce.string().optional(),screenshot:l0.coerce.string().optional(),mobileScreenshot:l0.coerce.string().optional()}),l0.object({template:l0.literal("cta"),ctaUrl:l0.coerce.string().optional(),ctaLabel:l0.coerce.string().optional(),bullets:l0.array(l0.coerce.string()).optional()}),l0.object({template:l0.literal("series"),points:l0.array(l0.coerce.number()).min(2),xLabels:l0.array(l0.coerce.string()).min(1),unit:l0.coerce.string().optional(),callout:l0.object({index:l0.coerce.number(),value:l0.coerce.string(),tone:mC.optional()})}),l0.object({template:l0.literal("threshold"),value:l0.coerce.string().default(""),metricLabel:l0.coerce.string().optional(),ratio:l0.coerce.number(),thresholdRatio:l0.coerce.number().optional(),thresholdLabel:l0.coerce.string().default(""),tone:mC.optional()}),l0.object({template:l0.literal("stats"),stats:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),tone:mC.optional()})).min(1)}),l0.object({template:l0.literal("bars"),items:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),ratio:l0.coerce.number(),tone:mC.optional()})).min(1)}),l0.object({template:l0.literal("gauges"),gauges:l0.array(l0.object({label:l0.coerce.string(),value:l0.coerce.string(),status:l0.enum(["good","warn","bad"]).catch("warn"),caption:l0.coerce.string().optional(),ratio:l0.coerce.number().optional()})).min(1)}),l0.object({template:l0.literal("checklist"),checks:l0.array(l0.object({label:l0.coerce.string(),status:l0.enum(["pass","fail","warn"]).catch("fail"),value:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("table"),columns:l0.array(l0.object({label:l0.coerce.string(),align:l0.enum(["left","right"]).optional()})).min(1),rows:l0.array(z46).min(1),highlightRow:l0.coerce.number().optional()}),l0.object({template:l0.literal("products"),products:l0.array(l0.object({name:l0.coerce.string(),price:l0.coerce.string().optional(),image:l0.coerce.string().optional(),url:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("list"),entries:l0.array(l0.object({label:l0.coerce.string(),severity:l0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:l0.coerce.number().optional()}),l0.object({template:l0.literal("keywords"),volumeLabel:l0.coerce.string().optional(),keywords:l0.array(l0.object({term:l0.coerce.string(),volume:l0.coerce.string(),position:l0.coerce.number().catch(0)})).min(1)}),l0.object({template:l0.literal("competitor"),metricLabel:l0.coerce.string().optional(),competitors:l0.array(l0.object({name:l0.coerce.string(),value:l0.coerce.string(),tone:mC.optional(),isYou:l0.boolean().optional()})).min(1)}),l0.object({template:l0.literal("scorecard"),rivalLabel:l0.coerce.string().optional(),dimensions:l0.array(l0.object({label:l0.coerce.string(),you:l0.coerce.string(),rival:l0.coerce.string().optional(),rivalName:l0.coerce.string().optional(),tone:mC.optional()})).min(1)})]),Sv$=l0.object({...P46,template:A46})});function Tj0($){let Z=[],X=[...$.sections].sort((G,Y)=>G.position-Y.position).map((G)=>{let Y=Sv$.safeParse(G.props);if(Y.success)return Y.data;let J=Y.error.issues[0];return Z.push({section_type:G.section_type,position:G.position,reason:J?`${J.path.join(".")||"(root)"}: ${J.message}`:"contract violation"}),null}).filter((G)=>G!==null),Q=X.filter((G)=>G.template.template!=="cover"&&G.template.template!=="cta").map((G)=>({key:G.key,title:G.title}));return{deck:{meta:{...$.meta,scores:$.summary?.scores,scannedAt:$.scanned_at,toc:Q},slides:X},drops:Z}}var K41=B(()=>{Vv$()});import{join as Cv$}from"path";async function R46($){try{let Z=await fetch(`${xW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(T46)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=Tj0(X);if(!Q.slides.length)return null;let G=Q.slides.find((W)=>W.template.template==="cover"),Y=G?.template,J=Y&&Y.template==="cover"?Y:void 0;return{brand:Q.meta.brand?.trim()||W41($),score:Q.meta.scores?.cover??J?.score?.value,verdict:G?.annotation?.trim()||G?.headline?.trim()||void 0}}catch{return null}}function lG($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function I46($,Z){let X=ng($),Q=Z?.brand?.trim()||W41(X),G=Mv$(X,128),J=`${(c0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=kv$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),H=`${J}/og.png`,N=`${Q} commerce report by decocms`;return[`<title>${lG(W)}</title>`,`<meta name="description" content="${lG(K)}" />`,'<meta name="robots" content="noindex, follow" />','<meta property="og:type" content="website" />','<meta property="og:site_name" content="decocms" />',`<meta property="og:title" content="${lG(W)}" />`,`<meta property="og:description" content="${lG(K)}" />`,`<meta property="og:url" content="${lG(J)}" />`,`<meta property="og:image" content="${lG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${lG(N)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${lG(W)}" />`,`<meta name="twitter:description" content="${lG(K)}" />`,`<meta name="twitter:image" content="${lG(H)}" />`,`<meta name="twitter:image:alt" content="${lG(N)}" />`,`<link rel="canonical" href="${lG(J)}" />`,`<link rel="icon" href="${lG(G)}" sizes="any" />`].join(`
|
|
2730
2730
|
`)}function q46($,Z){return $.replace(/<title>[\s\S]*?<\/title>\s*/i,"").replace(/<meta\s+name="(?:description|twitter:[^"]*)"[^>]*>\s*/gi,"").replace(/<meta\s+property="og:[^"]*"[^>]*>\s*/gi,"").replace(/<link\s+rel="icon"[^>]*>\s*/gi,"").replace("</head>",` ${Z}
|
|
2731
2731
|
</head>`)}function _v$($){let Z=new B1;return Z.get("/:domain/og.png",async(X)=>{let Q=ng(X.req.param("domain")),G=async()=>{let Y=$?Bun.file(Cv$($,"report-og-fallback.png")):null;if(!Y||!await Y.exists())return X.notFound();return X.body(new Uint8Array(await Y.arrayBuffer()),200,{"Content-Type":"image/png","Cache-Control":"public, max-age=0, s-maxage=3600"})};try{let Y=await fetch(`${xW({})}/api/v2/public/diagnostics/${encodeURIComponent(Q)}/og.png`,{signal:AbortSignal.timeout(M46)}),J=Y.headers.get("content-type")??"";if(!Y.ok||!J.startsWith("image/")||!Y.body)return G();return X.body(Y.body,200,{"Content-Type":J,"Cache-Control":"public, max-age=0, s-maxage=604800"})}catch{return G()}}),Z.get("/:domain",async(X)=>{let Q=X.req.param("domain"),G=$?Cv$($,"index.html"):null,Y=G?Bun.file(G):null;if(!Y||!await Y.exists())return X.notFound();let J=await Y.text();try{let W=await R46(ng(Q)),K=I46(Q,W);return X.html(q46(J,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return X.html(J)}}),Z}var T46=2500,M46=1e4;var vv$=B(()=>{y8();K41();WL();S$()});function xo($,Z){return fetch(`${xW({})}${$}`,Z)}async function k46($,Z,X){let Q=new URLSearchParams;if(Z)Q.set("pw",Z);if(X)Q.set("lang",X);let G=Q.toString()?`?${Q.toString()}`:"",Y=await xo(`/api/v2/public/diagnostics/${encodeURIComponent($)}${G}`,{headers:{Accept:"application/json"}});if(Y.status===404)return{status:"not_found",deck:null,scanned_at:null,drops:[]};if(!Y.ok)throw Error(`report read HTTP ${Y.status}`);let J=await Y.json(),{deck:W,drops:K}=Tj0(J);return{status:W.slides.length?"ready":"empty",deck:W,scanned_at:J.scanned_at,drops:K}}var S46,i3,Rj0=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},bv$;var fv$=B(()=>{y8();IY();WL();K41();S46=new Set(["complete","errored","terminated","unknown"]),i3=new B1;i3.use("*",async($,Z)=>{let X=await j8.api.getSession({headers:$.req.raw.headers});$.set("reportUser",X?.user?.id?{email:X.user.email}:void 0),await Z(),$.header("Cache-Control","private, no-store"),$.header("Vary","Cookie");return});i3.use("/run",Rj0);i3.use("/status",Rj0);i3.use("/link-token/*",Rj0);i3.use("/suggest",Rj0);i3.get("/site/:domain",async($)=>{let Z=$.req.param("domain").trim();if(!Z)return $.json({error:"domain is required"},400);let X=$.get("reportUser"),Q=$.req.query("key")?.trim()||void 0,G=$.req.query("lang")?.trim()||void 0;try{let Y=await k46(Z,Q,G);if($.header("Cache-Control","private, no-store"),X||!Y.deck)return $.json(Y);return $.json({...Y,deck:{...Y.deck,slides:Y.deck.slides.slice(0,1)},truncated:Y.status==="ready"})}catch{return $.json({error:"report read failed"},502)}});i3.post("/run",async($)=>{let Z=$.get("reportUser"),X;try{X=await $.req.json()}catch{return $.json({error:"invalid JSON"},400)}let Q=typeof X.domain==="string"?X.domain.trim():"";if(!Q)return $.json({error:"domain is required"},400);let G=Z.email,Y=typeof X.distinctId==="string"&&X.distinctId.trim()&&X.distinctId.length<=200?X.distinctId.trim():void 0;try{let J=await xo("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${JL({})}`},body:JSON.stringify({url:Q,email:G,distinct_id:Y})});if(!J.ok)return $.json({error:`run HTTP ${J.status}`},502);let W=await J.json(),K=W.blocked?{state:"blocked"}:W.status==="fresh"?{state:"fresh"}:W.mode==="sync"?{state:"sync"}:{state:"running",id:W.id??null};return $.json(K)}catch{return $.json({error:"run failed"},502)}});i3.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let X=await xo(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${JL({})}`}});if(!X.ok)return $.json({error:`status HTTP ${X.status}`},502);let G=(await X.json()).status??"unknown",Y={done:S46.has(G),status:G};return $.json(Y)}catch{return $.json({error:"status failed"},502)}});i3.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let X=await xo(`/api/v2/public/link-tokens/${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(X.status===404)return $.json(null);if(!X.ok)return $.json({error:`link token HTTP ${X.status}`},502);return $.json(await X.json())}catch{return $.json({error:"link token resolve failed"},502)}});i3.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let X=await xo(`/api/v2/public/suggest?q=${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(!X.ok)return $.json({suggestions:[]});let Q=await X.json();return $.json({suggestions:Array.isArray(Q.suggestions)?Q.suggestions:[]})}catch{return $.json({suggestions:[]})}});bv$=i3});import{createHmac as V46,timingSafeEqual as C46}from"crypto";function yv$($,Z,X,Q=Date.now()){if(!Z||!X)return!1;let G,Y=[];for(let H of Z.split(",")){let N=H.indexOf("=");if(N<=0)continue;let F=H.slice(0,N).trim(),U=H.slice(N+1).trim();if(F==="t")G=U;else if(F==="v1")Y.push(U)}if(!G||Y.length===0)return!1;let J=Number(G);if(!Number.isFinite(J)||Math.abs(Q/1000-J)>_46)return!1;let W=V46("sha256",X).update(`${G}.${$}`).digest("hex"),K=Buffer.from(W,"hex");return Y.some((H)=>{let N=Buffer.from(H,"hex");return K.length===N.length&&C46(K,N)})}function gv$($){let Z;try{Z=JSON.parse($)}catch{return null}let X=QJ(Z),Q=QJ(QJ(X?.data)?.object);if(!X||typeof X.type!=="string"||!Q)return null;return{id:lK(X.id),type:X.type,created:typeof X.created==="number"?X.created:void 0,livemode:typeof X.livemode==="boolean"?X.livemode:void 0,data:{object:Q}}}function hv$($){switch($){case"active":case"trialing":return"active";case"past_due":return"past_due";default:return"canceled"}}function lK($){return typeof $==="string"?$:void 0}function QJ($){return typeof $==="object"&&$!==null?$:void 0}function Ij0($){return typeof $==="number"?new Date($*1000):null}function F41($){return lK($)??lK(QJ($)?.id)}function v46($){return F41($.subscription)??lK(QJ(QJ($.parent)?.subscription_details)?.subscription)}function b46($){let Z=Ij0($.current_period_end);if(Z)return Z;let X=QJ($.items)?.data;if(!Array.isArray(X))return null;let Q=0;for(let G of X){let Y=QJ(G)?.current_period_end;if(typeof Y==="number"&&Y>Q)Q=Y}return Q>0?new Date(Q*1000):null}function H41($,Z){let X=Ij0($.created);return!!X&&!!Z.lastStripeEventAt&&X<Z.lastStripeEventAt}function N41($,Z){let X=Ij0($.created);if(!X)return;return Z.lastStripeEventAt&&Z.lastStripeEventAt>X?void 0:X}async function f46($,Z){let X=Z.data.object;switch(Z.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":{let Q=lK(QJ(X.metadata)?.orgId);if(!Q)return{handled:!1,reason:"no orgId"};if(lK(QJ(X.metadata)?.kind)==="topup"){if(X.mode!=="payment")return{handled:!1,reason:"topup with wrong mode"};if(lK(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let J=lK(X.id);if(!J)return console.error("stripe webhook: topup session without id",{eventId:Z.id,organizationId:Q}),{handled:!1,reason:"topup session without id"};let W=Number(QJ(X.metadata)?.creditCents);if(!Number.isInteger(W)||W<=0)return console.error("stripe webhook: paid topup with bad metadata \u2014 credit NOT applied",{eventId:Z.id,organizationId:Q,creditCents:QJ(X.metadata)?.creditCents}),{handled:!1,reason:"bad topup metadata"};return{handled:!0,organizationId:Q,topUp:{creditCents:W,referenceId:`stripe-topup:${J}`}}}if(X.mode!=="subscription")return{handled:!1,reason:"not a subscription checkout"};if(lK(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let G=await $.getBilling(Q);if(!G)return{handled:!1,reason:"unknown org"};let Y=F41(X.subscription);if(G.stripeSubscriptionId&&Y&&G.stripeSubscriptionId!==Y)return console.error("stripe webhook: refused checkout rebind",{organizationId:Q,eventId:Z.id}),{handled:!1,reason:"org already bound to another subscription",orphanSubscriptionId:Y};if(H41(Z,G))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Q,{stripeCustomerId:F41(X.customer),stripeSubscriptionId:Y,status:"active",lastStripeEventAt:N41(Z,G)}),{handled:!0,organizationId:Q}}case"customer.subscription.updated":case"customer.subscription.deleted":{let Q=lK(X.id);if(!Q)return{handled:!1,reason:"no sub id"};let G=await $.getBillingByStripeSubscriptionId(Q);if(!G)return{handled:!1,reason:"unknown subscription"};let Y=Z.type==="customer.subscription.deleted";if(!Y&&H41(Z,G))return{handled:!1,reason:"stale event"};let J=Y?"canceled":hv$(X.status);return await $.updateStripeState(G.organizationId,{status:J,currentPeriodEnd:b46(X),...Y&&{stripeSubscriptionId:null},lastStripeEventAt:N41(Z,G)}),{handled:!0,organizationId:G.organizationId}}case"invoice.paid":{let Q=v46(X);if(!Q)return{handled:!1,reason:"no sub id"};let G=await $.getBillingByStripeSubscriptionId(Q);if(!G)return{handled:!1,reason:"unknown subscription"};if(H41(Z,G))return{handled:!1,reason:"stale event"};return await $.updateStripeState(G.organizationId,{status:"active",currentPeriodEnd:Ij0(X.period_end),lastStripeEventAt:N41(Z,G)}),{handled:!0,organizationId:G.organizationId}}default:return{handled:!1,reason:`unhandled event ${Z.type}`}}}function x46($,Z){if(!Z.handled||$.livemode===!1)return null;let X=$.data.object;if(Z.topUp)return{name:"credits_topup_succeeded",organizationId:Z.organizationId,properties:{credit_cents:Z.topUp.creditCents}};switch($.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":return{name:"subscription_started",organizationId:Z.organizationId,properties:{}};case"customer.subscription.deleted":return{name:"subscription_canceled",organizationId:Z.organizationId,properties:{}};case"customer.subscription.updated":return{name:"subscription_updated",organizationId:Z.organizationId,properties:{status:hv$(X.status),...typeof X.cancel_at_period_end==="boolean"?{cancel_at_period_end:X.cancel_at_period_end}:{}}};case"invoice.paid":if(X.billing_reason==="subscription_create")return null;return{name:"subscription_renewed",organizationId:Z.organizationId,properties:{}};default:return null}}function xv$($,Z){let X=x46($,Z);if(!X)return;nJ({event:X.name,organizationId:X.organizationId,...$.id?{uuid:Ul1(`stripe:${$.id}:${X.name}`)}:{},...$.created?{timestamp:new Date($.created*1000)}:{},properties:X.properties})}async function uv$($){let Z=new _W(m8().db),X=await f46(Z,$);if(!(X.handled&&X.topUp))xv$($,X);if(X.handled&&X.topUp)await jF$({organizationId:X.organizationId,amountCents:X.topUp.creditCents,referenceId:X.topUp.referenceId}),xv$($,X);if(!X.handled&&X.orphanSubscriptionId)try{await Mt1(X.orphanSubscriptionId),console.error("stripe webhook: canceled orphan subscription",{subscriptionId:X.orphanSubscriptionId,eventId:$.id})}catch(Q){if(!(Q instanceof X3&&(Q.status===400||Q.status===404)))throw Q}return X}var _46=300;var cv$=B(()=>{LY();f4();h80();km();ao0()});var y46=1048576,U41;var lv$=B(()=>{y8();mO();S$();cv$();U41=new B1;U41.post("/webhook",HZ({maxSize:y46,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=c0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let X=await $.req.text();if(!yv$(X,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let G=gv$(X);if(!G)return $.json({error:"invalid payload"},400);let Y=await uv$(G);return console.log("stripe webhook",{eventId:G.id,type:G.type,livemode:G.livemode,...Y}),$.json({received:!0})})});import{timingSafeEqual as g46}from"crypto";function u46($,Z,X){if(!Z?.startsWith("sha256="))return!1;let Q=new Bun.CryptoHasher("sha256",X).update($).digest("hex"),G=Z.slice(7);if(G.length!==Q.length)return!1;return g46(Buffer.from(G),Buffer.from(Q))}var h46=5242880,w41;var dv$=B(()=>{y8();mO();Si();w41=new B1;w41.post("/webhook",HZ({maxSize:h46,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=process.env.GITHUB_WEBHOOK_SECRET;if(!Z)return $.json({error:"github webhook not configured"},503);let X=await $.req.text();if(!u46(X,$.req.header("x-hub-signature-256"),Z))return $.json({error:"invalid signature"},400);if($.req.header("x-github-event")!=="push")return $.json({ok:!0,ignored:"event"});let Q;try{Q=JSON.parse(X)}catch{return $.json({error:"invalid payload"},400)}let G=Q.ref,Y=Q.repository?.full_name;if(!G||!Y)return $.json({ok:!0,ignored:"shape"});let W=(await Md0())?.markTenantPoolsDirty(Y,G)??[];return $.json({ok:!0,pools:W})})});function mv$($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var iv$,c46,l46,nv$;var pv$=B(()=>{y8();iJ();qx();Sf();iv$=new B1,c46=["range","if-none-match","if-modified-since"],l46=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];iv$.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),X=Z.organization?.id;if(!Z.auth?.user?.id){if(Ig($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new Q$(401,{message:"Authentication required"})}if(!X)throw new Q$(401,{message:"Organization context required"});let Q=$.req.path.replace(/^.*\/files\//,"");if(!Q)throw new Q$(400,{message:"Missing file key"});let G=await Yn(Q,Z);if(!G)throw new Q$(503,{message:"Object storage not configured"});if(G.startsWith("data:")&&aJ()){let K=G.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new Q$(500,{message:"Invalid data URL from storage"});let[,H,N]=K,F=Buffer.from(N,"base64"),U=new Headers({"Content-Type":H,"Cache-Control":"private, max-age=86400"});return mv$(U,H),new Response(F,{status:200,headers:U})}let Y=new Headers;for(let K of c46){let H=$.req.header(K);if(H)Y.set(K,H)}let J=await fetch(G,{headers:Y});if(J.status===403||J.status===404)throw new Q$(404,{message:"File not found"});if(!J.ok&&J.status!==304&&J.status!==416)throw console.error(`[files] upstream storage error ${J.status} for key:`,Q),new Q$(502,{message:"Upstream storage error"});let W=new Headers;for(let K of l46){let H=J.headers.get(K);if(H)W.set(K,H)}return W.set("Cache-Control","private, max-age=86400"),mv$(W,W.get("content-type")??""),new Response(J.body,{status:J.status,headers:W})});nv$=iv$});var yo=C((iC)=>{var d46=iC&&iC.__createBinding||(Object.create?function($,Z,X,Q){if(Q===void 0)Q=X;var G=Object.getOwnPropertyDescriptor(Z,X);if(!G||("get"in G?!Z.__esModule:G.writable||G.configurable))G={enumerable:!0,get:function(){return Z[X]}};Object.defineProperty($,Q,G)}:function($,Z,X,Q){if(Q===void 0)Q=X;$[Q]=Z[X]}),m46=iC&&iC.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))d46(Z,$,X)};Object.defineProperty(iC,"__esModule",{value:!0});m46($G(),iC)});var rv$=C((tv$)=>{Object.defineProperty(tv$,"__esModule",{value:!0});tv$.version=void 0;tv$.version="3.4.0"});var ev$=C((dK)=>{var i46=dK&&dK.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(dK,"__esModule",{value:!0});dK.NodeTransport=dK.VERSION=void 0;dK.nodeResolveHost=a46;var d6=yo(),n46=z0("net"),O41=z0("tls"),p46=z0("path"),av$=z0("fs"),t46=i46(z0("dns")),o46=rv$();dK.VERSION=o46.version;var r46="nats.js";class sv${socket;version;lang;yields=[];signal=(0,d6.deferred)();closedNotification=(0,d6.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=r46,this.version=dK.VERSION}async connect($,Z){this.tlsName=$.tlsName,this.options=Z;let{tls:X}=this.options,{handshakeFirst:Q}=X||{};try{if(Q===!0)this.socket=await this.tlsFirst($);else this.socket=await this.dial($);if(this.done)this.socket?.destroy();let G=await this.peekInfo();(0,d6.checkOptions)(G,Z);let{tls_required:Y,tls_available:J}=G,W=J===!0&&Z.tls!==null;if(!Q&&(Y||W))this.socket=await this.startTLS();if(this.done)this.socket?.destroy();if(Y&&this.socket.encrypted!==!0)throw d6.errors.InvalidArgumentError.format("tls","is not available on this server");return this.connected=!0,this.setupHandlers(),this.signal.resolve(),Promise.resolve()}catch(G){let Y=G;if(!Y)Y=new d6.errors.ConnectionError("error connecting - node provided an undefined error");let{code:J}=Y,W=J==="ECONNREFUSED"?new d6.errors.ConnectionError("connection refused",{cause:Y}):Y;throw this.socket?.destroy(),W}}dial($){let Z=(0,d6.deferred)(),X,Q=(0,n46.createConnection)($.port,$.hostname,()=>{Z.resolve(Q),Q.removeAllListeners()});return Q.on("error",(G)=>{X=G}),Q.on("close",()=>{Q.removeAllListeners(),Z.reject(X)}),Q.setNoDelay(!0),Z}get isClosed(){return this.done}close($){return this._closed($,!1)}peekInfo(){let $=(0,d6.deferred)(),Z;return this.socket.on("data",(X)=>{this.yields.push(X);let Q=d6.DataBuffer.concat(...this.yields),G=(0,d6.extractProtocolMessage)(Q);if(G!=="")try{let Y=d6.INFO.exec(G);if(!Y)throw Error("unexpected response from server");let J=JSON.parse(Y[1]);$.resolve(J)}catch(Y){$.reject(Y)}finally{this.socket.removeAllListeners()}}),this.socket.on("error",(X)=>{Z=X}),this.socket.on("close",()=>{this.socket.removeAllListeners(),$.reject(Z)}),$}loadFile($){if(!$)return Promise.resolve();let Z=(0,d6.deferred)();try{if($=(0,p46.resolve)($),!(0,av$.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,av$.readFile)($,(X,Q)=>{if(X)return Z.reject(X);Z.resolve(Q)})}catch(X){Z.reject(X)}return Z}async loadClientCerts(){let $={},{certFile:Z,cert:X,caFile:Q,ca:G,keyFile:Y,key:J}=this.options.tls;try{if(Z){let W=await this.loadFile(Z);if(W)$.cert=W}else if(X)$.cert=X;if(Y){let W=await this.loadFile(Y);if(W)$.key=W}else if(J)$.key=J;if(Q){let W=await this.loadFile(Q);if(W)$.ca=[W]}else if(G)$.ca=G;return Promise.resolve($)}catch(W){return Promise.reject(W)}}async tlsFirst($){let Z,X={servername:this.tlsName,rejectUnauthorized:!0};if(this.socket)X.socket=this.socket;if(typeof this.options.tls==="object")try{let G=await this.loadClientCerts()||{};X=(0,d6.extend)(X,this.options.tls,G)}catch(G){return Promise.reject(new d6.errors.ConnectionError(G.message,{cause:G}))}let Q=(0,d6.deferred)();try{let G=(0,O41.connect)($.port,$.hostname,X,()=>{G.removeAllListeners(),Q.resolve(G)});G.on("error",(Y)=>{Z=Y}),G.on("secureConnect",()=>{if(X.rejectUnauthorized===!1)return;if(!G.authorized)throw G.authorizationError}),G.on("close",()=>{Q.reject(Z),G.removeAllListeners()}),G.setNoDelay(!0)}catch(G){Q.reject(new d6.errors.ConnectionError(G.message,{cause:G}))}return Q}async startTLS(){let $,Z={socket:this.socket,servername:this.tlsName,rejectUnauthorized:!0};if(typeof this.options.tls==="object")try{let Q=await this.loadClientCerts()||{};Z=(0,d6.extend)(Z,this.options.tls,Q)}catch(Q){return Promise.reject(new d6.errors.ConnectionError(Q.message,{cause:Q}))}let X=(0,d6.deferred)();try{let Q=(0,O41.connect)(Z,()=>{Q.removeAllListeners(),X.resolve(Q)});Q.on("error",(G)=>{$=G}),Q.on("secureConnect",()=>{if(Z.rejectUnauthorized===!1)return;if(!Q.authorized)throw Q.authorizationError}),Q.on("close",()=>{X.reject($),Q.removeAllListeners()})}catch(Q){X.reject(new d6.errors.ConnectionError(Q.message,{cause:Q}))}return X}setupHandlers(){let $;this.socket.on("data",(Z)=>{return this.yields.push(Z),this.signal.resolve()}),this.socket.on("error",(Z)=>{$=Z}),this.socket.on("end",()=>{if(this.socket?.destroyed)return;this.socket?.write(new Uint8Array(0),()=>{this.socket?.end()})}),this.socket.on("close",()=>{this._closed($,!1)})}[Symbol.asyncIterator](){return this.iterate()}async*iterate(){while(!0){if(this.yields.length===0)await this.signal;let $=this.yields;this.yields=[];for(let Z=0;Z<$.length;Z++){if(this.options.debug)console.info(`> ${(0,d6.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,d6.deferred)()}}discard(){if(this.done=!0,this.socket)try{this.socket.removeAllListeners(),this.socket.destroy()}catch{}}disconnect(){this._closed(void 0,!0).then().catch()}isEncrypted(){return this.socket instanceof O41.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,d6.render)($)}`);let Z=(0,d6.deferred)();try{this.socket.write($,(X)=>{if(X){if(this.options.debug)console.error(`!!! ${(0,d6.render)($)}: ${X}`);return Z.reject(X)}return Z.resolve()})}catch(X){if(this.options.debug)console.error(`!!! ${(0,d6.render)($)}: ${X}`);Z.reject(X)}return Z}send($){this._send($).catch((X)=>{})}async _closed($,Z=!0){if(!this.connected)return;if(this.done){this.socket?.destroy();return}if(this.closeError=$,!$&&this.socket&&Z)try{await this._send(new TextEncoder().encode(""))}catch(X){if(this.options.debug)console.log("transport close terminated with an error",X)}try{if(this.socket)this.socket.removeAllListeners(),this.socket?.destroy(),this.socket=void 0}catch(X){console.log(X)}this.done=!0,this.closedNotification.resolve(this.closeError)}closed(){return this.closedNotification}}dK.NodeTransport=sv$;function a46($){let Z=(0,d6.deferred)();return t46.default.lookup($,{all:!0},(X,Q)=>{if(X){Z.reject(X);return}let G=[];for(let Y of Q)G.push(Y.address);if(G.length===0)G.push($);Z.resolve(G)}),Z}});var Gb$=C((Qb$)=>{Object.defineProperty(Qb$,"__esModule",{value:!0});Qb$.connect=s46;var $b$=ev$(),Zb$=yo(),Xb$=yo();function s46($={}){if((0,Xb$.hasWsProtocol)($))return Promise.reject(Xb$.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,Zb$.setTransportFactory)({factory:()=>{return new $b$.NodeTransport},dnsResolveFn:$b$.nodeResolveHost}),Zb$.NatsConnectionImpl.connect($)}});var Yb$=C((GF)=>{var $66=GF&&GF.__createBinding||(Object.create?function($,Z,X,Q){if(Q===void 0)Q=X;var G=Object.getOwnPropertyDescriptor(Z,X);if(!G||("get"in G?!Z.__esModule:G.writable||G.configurable))G={enumerable:!0,get:function(){return Z[X]}};Object.defineProperty($,Q,G)}:function($,Z,X,Q){if(Q===void 0)Q=X;$[Q]=Z[X]}),Z66=GF&&GF.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))$66(Z,$,X)};Object.defineProperty(GF,"__esModule",{value:!0});GF.connect=void 0;var X66=Gb$();Object.defineProperty(GF,"connect",{enumerable:!0,get:function(){return X66.connect}});Z66(yo(),GF)});function Hb$($){let Z=$?.connectFn??J66,X=null,Q=null,G=!1,Y=!1,J=!1,W=[];function K(){return X!==null&&!X.isClosed()&&!X.isDraining()&&!J}function H(){console.log(`[NatsProvider] fireReady: ${W.length} callbacks`);for(let U of W)try{U()}catch{}}function N(U){(async()=>{for await(let w of U.status())if(w.type==="disconnect")console.log("[NatsProvider] Disconnected"),J=!0;else if(w.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),J=!1,Q=null,H()})().catch(()=>{})}async function F(U,w){let O=0;while(!Y)try{X=await Z({servers:U,timeout:Y66,reconnect:!0,maxReconnectAttempts:-1,...w?{authenticator:w}:{}}),console.log(`[NatsProvider] Connected to ${X.getServer()} after ${O} attempt(s)`),Q=null,J=!1,N(X),H();return}catch{O++;let D=HX(G66,Q66,O-1,2,0.5);await y$(D)}}return{init(U,w){if(G)return;G=!0,Y=!1;let O=w?.creds?Jb$.credsAuthenticator(new TextEncoder().encode(w.creds)):void 0;F(U,O).catch(()=>{})},isConnected(){return K()},getConnection(){return K()?X:null},getJetStream(){if(!K())return null;if(!Q)Q=Kb$.jetstream(X);return Q},onReady(U){if(W.push(U),K())try{U()}catch{}},async drain(){if(Y=!0,G=!1,Q=null,J=!1,X){let U=X;X=null,await U.drain().catch(()=>{})}}}}function J66($){return Wb$.connect($)}var Jb$,Wb$,Kb$,Q66=100,G66=3000,Y66=3000;var Nb$=B(()=>{E6();Jb$=S(Eh(),1),Wb$=S(Yb$(),1),Kb$=S(FB(),1)});function B41($,Z){return`${$}.${Z}`}class D41{cache;constructor($){this.cache=Fg({ttlMs:$?.ttlMs??W66,maxSize:$?.maxSize??K66})}async get($,Z){return this.cache.get(B41($,Z))??null}async set($,Z,X){this.cache.set(B41($,Z),X)}async invalidate($,Z){this.cache.delete(B41($,Z))}teardown(){this.cache.clear()}}var W66=600000,K66=5000;var Fb$=()=>{};function qj0($,Z){return`${$}:${Z}`}function L41($){let Z=Fg({ttlMs:$?.ttlMs??H66,maxSize:$?.maxSize??N66}),X=$?.getConnection,Q=crypto.randomUUID(),G=new TextEncoder,Y=new TextDecoder,J=null;function W(K,H){let N=X?.();if(!N)return;try{N.publish(Ub$,G.encode(JSON.stringify({organizationId:K,keyId:H,originId:Q})))}catch(F){console.warn("[ProviderKeyCache] Publish failed (non-critical):",F)}}return{get(K,H){return Z.get(qj0(K,H))},set(K,H,N){Z.set(qj0(K,H),N)},invalidate(K,H){Z.delete(qj0(K,H)),W(K,H)},start(){if(J)return;let K=X?.();if(!K)return;J=K.subscribe(Ub$),(async()=>{for await(let H of J)try{let N=JSON.parse(Y.decode(H.data));if(N.originId===Q)continue;Z.delete(qj0(N.organizationId,N.keyId))}catch{}})().catch(console.error)},teardown(){J?.unsubscribe(),J=null,Z.clear()}}}var Ub$="studio.ai-provider-keys.invalidate",H66=30000,N66=5000;var wb$=()=>{};class E41{options;subscriptions=[];onCancel=null;encoder=new TextEncoder;originId=crypto.randomUUID();seenMessageIds=new Set;constructor($){this.options=$}async start($){if($)this.onCancel=$;if(this.subscriptions.length>0)return;if(!this.onCancel)return;let Z=this.options.getConnection();if(!Z)return;let X=new TextDecoder;this.subscriptions=Ob$.map((Q)=>Z.subscribe(Q));for(let Q of this.subscriptions)(async()=>{for await(let G of Q)try{let Y=JSON.parse(X.decode(G.data));if(Y.originId===this.originId)continue;if(Y.messageId&&this.hasSeen(Y.messageId))continue;this.onCancel?.(Y.taskId)}catch{}})().catch(console.error)}broadcast($){if(/[.*>\s]/.test($)){console.warn("[NatsCancelBroadcast] Invalid threadId, skipping broadcast");return}this.onCancel?.($);try{let Z=this.options.getConnection();if(!Z)return;let X=this.encoder.encode(JSON.stringify({taskId:$,originId:this.originId,messageId:crypto.randomUUID()}));for(let Q of Ob$)Z.publish(Q,X)}catch(Z){console.warn("[NatsCancelBroadcast] Publish failed (non-critical):",Z)}}publishControlFrame($,Z){}async stop(){for(let $ of this.subscriptions)$.unsubscribe();this.subscriptions=[],this.seenMessageIds.clear(),this.onCancel=null}hasSeen($){if(this.seenMessageIds.has($))return!0;if(this.seenMessageIds.add($),this.seenMessageIds.size>1000){let Z=this.seenMessageIds.values().next().value;if(Z)this.seenMessageIds.delete(Z)}return!1}}var Ob$;var Bb$=B(()=>{Ob$=["studio.decopilot.cancel","mesh.decopilot.cancel"]});var Db$=($)=>{let Z;return()=>Z??=$()},j41,z41;var Lb$=B(()=>{Z5();j41=Db$(()=>K8.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),z41=Db$(()=>K8.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function L66(){return{name:IN,subjects:[`${Pw0}.>`],storage:n3.StorageType.File,max_age:w66,max_bytes:B66,max_msgs_per_subject:D66,discard:n3.DiscardPolicy.Old,retention:n3.RetentionPolicy.Limits,duplicate_window:O66,num_replicas:1}}class zb${chunks=0;encodeMs=0;maxMs=0;bytes=0;windowStart=performance.now();constructor(){setInterval(()=>this.flush(),1e4).unref?.()}record($,Z){if(this.chunks++,this.encodeMs+=$,$>this.maxMs)this.maxMs=$;this.bytes+=Z}flush(){let $=performance.now(),Z=$-this.windowStart;if(this.chunks>0&&Z>0)console.warn(JSON.stringify({msg:"stream-encode-trace",windowMs:Math.round(Z),chunks:this.chunks,encodeMs:Math.round(this.encodeMs),pctOfLoop:+(this.encodeMs/Z*100).toFixed(1),maxChunkMs:+this.maxMs.toFixed(2),mbEncoded:+(this.bytes/1048576).toFixed(2)}));this.chunks=0,this.encodeMs=0,this.maxMs=0,this.bytes=0,this.windowStart=$}}function Eb$($){let Z=jb$.headers();for(let[X,Q]of Object.entries($))Z.set(X,Q);return Z}function P66($,Z){let X=0;return{publish(Q,G,Y,J){Q.publish(G,Y,J?{headers:J}:void 0).catch((W)=>{if(X++,U66().add(1,{"org.id":Z??"unknown"}),X===1||X%100===0)console.warn(`[Decopilot] JetStream publish failed for thread ${$} (${X} total):`,W)})},get errorCount(){return X}}}function A66($){if(!($ instanceof Error))return!1;if($.name==="TimeoutError")return!0;return/timeout|no responders|503/i.test($.message)}class P41{options;js=null;jsm=null;constructor($){this.options=$}async init(){let $=this.options.getConnection();if(!$){console.log("[Decopilot] StreamBuffer.init skipped: NATS not connected yet");return}let Z=L66(),X=await gZ(async()=>{let Q=this.options.getJetStreamManager?await this.options.getJetStreamManager():await n3.jetstreamManager($);try{await Q.streams.info(IN),await Q.streams.update(IN,Z)}catch(G){if(G instanceof Error&&G.message.includes("stream not found"))await Q.streams.add(Z);else if(G instanceof Error&&/can ?not change.*storage|storage type/i.test(G.message))await Q.streams.delete(IN),await Q.streams.add(Z);else throw G}return Q},{maxAttempts:5,minTimeout:250,maxTimeout:4000,jitter:0.5,isRetriable:A66});this.js=this.options.getJetStream(),this.jsm=X,console.log(`[Decopilot] StreamBuffer.init ${this.js?"ready":"degraded (js=null)"}`)}pump($,Z,X,Q){let G=this.js;if(!G)return console.warn(`[Decopilot] pump: JetStream client unavailable for thread ${Z}; chunks NOT published to NATS`),Promise.resolve();let Y=P66(Z,Q),J=!1,W=()=>{if(J)return;J=!0;let H=G3$(Z);G.publish(H.subject,H.data).catch(()=>{})};X.addEventListener("abort",W,{once:!0});let K=(H)=>{let N=performance.now(),F=oi0(H,{runId:Z}),U=performance.now()-N;if(j41().record(U),z41().add(1,{"org.id":Q??"unknown"}),z66?.record(U,F.reduce((w,O)=>w+O.data.length,0)),F.length===0){console.warn(`[Decopilot] dropping oversized stream chunk for thread ${Z}`);return}for(let w of F)Y.publish(G,w.subject,w.data,w.headers?Eb$(w.headers):void 0)};return(async()=>{let H=$.getReader(),N=0,F=0,U;try{while(!0){let{done:w,value:O}=await H.read();if(w)break;if(K(O),F++,++N>=64)N=0,await new Promise((D)=>setImmediate(D))}}catch(w){U=w,console.warn(`[Decopilot] stream pump error for thread ${Z}:`,w?.message??w)}finally{if(H.releaseLock(),W(),j66)console.warn(JSON.stringify({msg:"decopilot-stream-diag",event:"pump-done",taskId:Z,publishedChunks:F,publishErrors:Y.errorCount}))}if(U!==void 0)throw U})()}async publishRawChunk($,Z,X){let Q=this.js;if(!Q)return!1;let G=performance.now(),Y=oi0(Z,{runId:$,dedup:X});if(j41().record(performance.now()-G),z41().add(1),Y.length===0)return console.warn(`[Decopilot] dropping oversized raw chunk for thread ${$} (> MAX_CHUNKED_BYTES)`),!0;for(let J of Y)await Q.publish(J.subject,J.data,{...J.headers?{headers:Eb$(J.headers)}:{},...J.msgId?{msgID:J.msgId}:{}});return!0}async publishDone($,Z,X){let Q=this.js;if(!Q)return!1;let G=Q3$({runId:$,fenceToken:Z,finalSeq:X});return await Q.publish(G.subject,G.data,{msgID:G.msgId}),!0}async createTailStream($,Z,X){let Q=this.js;if(!Q)return console.warn(`[Decopilot] createTailStream: JetStream client unavailable for thread ${$}; no live tail`),null;let G=X?.deliverPolicy==="new"?n3.DeliverPolicy.New:n3.DeliverPolicy.All,Y=X?.closeOnDone??!1,J=GO($),W;try{W=await(await Q.consumers.get(IN,{filter_subjects:J,deliver_policy:G})).consume()}catch(D){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",D?.message??D),null}let N=qw0({messages:async function*(){try{for await(let D of W)yield{subject:D.subject,data:D.data,headers:D.headers}}finally{W.stop()}}(),onCancel:()=>W.stop()}).pipeThrough(Aw0()).pipeThrough(Tw0()).getReader(),F=!1,U=()=>{if(F)return;F=!0;try{N.releaseLock()}catch{}},w=!1,O=()=>{if(w)return;w=!0,W.stop(),N.cancel().catch(()=>{}),U()};return Z?.addEventListener("abort",O,{once:!0}),new ReadableStream({async pull(D){for(;;){let{done:L,value:E}=await N.read();if(L){O(),D.close();return}let j=E;if(j.kind==="done"){if(Y){O(),D.close();return}continue}D.enqueue(j.chunk);return}},cancel(){O()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge(IN,{filter:GO($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var n3,jb$,F66=($)=>{let Z;return()=>Z??=$()},U66,w66=86400000000000,O66=120000000000,B66=4294967296,D66=500000,E66,j66,z66;var Pb$=B(()=>{E6();ri0();Mw0();Rw0();Z5();Lb$();n3=S(FB(),1),jb$=S(Eh(),1),U66=F66(()=>K8.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"}));E66=process.env.STREAM_ENCODE_TRACE==="1",j66=process.env.DECOPILOT_STREAM_TRACE==="1";z66=E66?new zb$:null});function Mj0($,Z,X,Q){if(!Q)return!1;return $.emit(Z,BW(X,Q.status,{title:Q.title??void 0,virtualMcpId:Q.virtual_mcp_id??void 0,createdBy:Q.created_by??void 0,triggerId:Q.trigger_id??null,branch:Q.branch??null,harnessId:Q.harness_id??void 0,createdAt:Q.created_at,updatedAt:Q.updated_at})),!0}var Ab$=B(()=>{L8()});class A41{storage;options;timer=null;constructor($,Z={}){this.storage=$;this.options=Z}start(){if(this.timer)return;let $=this.options.intervalMs??300000;this.timer=setInterval(()=>{this.runOnce()},$)}async runOnce(){let $=this.options.staleAfterMs??3600000;try{let Z=await this.storage.sweepAbandoned($);if(Z>0)console.log(`[async-research-sweeper] marked ${Z} stale jobs as abandoned`);return Z}catch(Z){return console.error("[async-research-sweeper] sweep failed",Z),0}}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}function k66($){return $ instanceof LQ}class T41{taskBoard;contextFactory;options;timer=null;running=!1;cursor=null;constructor($,Z,X={}){this.taskBoard=$;this.contextFactory=Z;this.options=X}start(){if(this.timer)return;let $=this.options.intervalMs??T66;this.timer=setInterval(()=>{this.runOnce()},$),this.timer.unref()}async runOnce(){if(this.running)return 0;this.running=!0;let $=0;try{let Z=this.options.batchSize??I66,X=this.options.itemIntervalMs??R66,Q=await this.taskBoard.listItemsPendingReview(Z,this.cursor,new Date(Date.now()-X)),G=Q.at(-1);this.cursor=Q.length===Z&&G?{updatedAt:G.updatedAt,id:G.id}:null;for(let{id:Y,organizationId:J}of Q)try{if(await this.reconcileItem(Y,J))$++}catch(W){console.error(`[task-board-review-sweeper] ${Y} failed`,W)}await this.reapNeverStartedThreads(Z),$+=await this.dispatchDueRetries(Z),await this.reactToUnhandledFailures(Z)}catch(Z){console.error("[task-board-review-sweeper] sweep failed",Z)}finally{this.running=!1}return $}async reapNeverStartedThreads($){try{let Z=await this.taskBoard.failNeverStartedLinkedThreads($,new Date(Date.now()-$Y$),Vn0);for(let X of Z)console.warn(`[task-board-review-sweeper] failed never-started thread ${X.threadId} on ${X.itemId}`)}catch(Z){console.error("[task-board-review-sweeper] reaping failed",Z)}}async reactToUnhandledFailures($){let Z=await this.taskBoard.listItemsStuckAfterFailure($,new Date(Date.now()-M66));for(let{id:X,organizationId:Q,threadId:G}of Z)try{console.warn(`[task-board-review-sweeper] reacting to an unhandled failure on ${X}`),await ji0(this.taskBoard,G,Q)}catch(Y){console.error(`[task-board-review-sweeper] unhandled-failure reaction for ${X} failed`,Y)}}async dispatchDueRetries($){let Z=0,X=await this.taskBoard.listItemsDueForRetry($,new Date);for(let{id:Q,organizationId:G,attempts:Y}of X)try{if(!await this.taskBoard.claimDueRetry(Q,G,new Date))continue;let J=await this.taskBoard.getById(Q,G);if(!J||J.status!=="in_progress"||J.assigneeId!==d4)continue;let W=await this.contextFactory(G,J.assignedBy??J.createdBy);if(!W)continue;await qN(W,J,{runClass:"retry"}),Z++,console.warn(`[task-board-review-sweeper] re-dispatched ${Q} after a failure (attempt ${Y})`)}catch(J){if(console.error(`[task-board-review-sweeper] retry dispatch for ${Q} failed`,J),k66(J)){await this.returnToTodo(Q,G,J instanceof Error?J.message:String(J));continue}await this.taskBoard.scheduleRunRetry(Q,G,Y,new Date(Date.now()+q66)).catch((W)=>console.error(`[task-board-review-sweeper] re-arming ${Q} failed`,W))}return Z}async returnToTodo($,Z,X){try{let Q=await this.taskBoard.getById($,Z);if(!Q||Q.status!=="in_progress")return;let G=await this.taskBoard.returnToTodoAfterFailure($,Z,Q.updatedBy);if(!G)return;await this.taskBoard.recordActivity({taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:"in_progress",to:"todo",reason:X}}).catch(()=>{}),x4(Z,G)}catch(Q){console.error(`[task-board-review-sweeper] returning ${$} to todo failed`,Q)}}async reconcileItem($,Z){let X=await this.taskBoard.getById($,Z);if(!X)return!1;if(X.status!=="in_review"||X.assigneeId!==d4)return!1;await this.taskBoard.markSwept($,Z);let Q=await this.taskBoard.listPrs($,Z);if(Q.length===0)return!1;let G=await this.contextFactory(Z,X.assignedBy??X.createdBy);if(!G)return!1;if(await FW$(G,X))return!0;let Y=await Promise.all(Q.map(async(J)=>({...J,...await Mn0(G,Z,J)})));if(Y.every((J)=>J.state===null))console.warn(`[task-board-review-sweeper] ${$}: no live PR state from GitHub (${Y.length} PR(s)) \u2014 proceeding on unknown`);if(!qn0(Y))return!1;return await vw0(G,X),!0}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}var T66=60000,R66=300000,I66=50,q66=60000,M66=120000;var Tb$=B(()=>{qZ();jn0();YO();cw0();e9();G3();Cn0();yx()});import{readdir as S66,rm as kj0}from"fs/promises";import{join as Sj0}from"path";async function Vj0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-V66),Z.setUTCHours(0,0,0,0);let X=0;try{let Q=await nC($);for(let G of Q)if(/^\d{4}$/.test(G))X+=await Rb$($,G,Z);else if(!G.startsWith(".")){let Y=Sj0($,G),J=await nC(Y);for(let K of J){if(!/^\d{4}$/.test(K))continue;X+=await Rb$(Y,K,Z)}if((await nC(Y)).length===0)await kj0(Y,{recursive:!0,force:!0})}}catch(Q){console.warn("monitoring retention cleanup failed:",Q)}return X}async function Rb$($,Z,X){let Q=0,G=Sj0($,Z),Y=await nC(G);for(let W of Y){if(!/^\d{2}$/.test(W))continue;let K=Sj0(G,W),H=await nC(K);for(let F of H){if(!/^\d{2}$/.test(F))continue;let U=new Date(`${Z}-${W}-${F}T00:00:00Z`);if(isNaN(U.getTime()))continue;if(U<X){let w=Sj0(K,F);await kj0(w,{recursive:!0,force:!0}),Q++}}if((await nC(K)).length===0)await kj0(K,{recursive:!0,force:!0})}if((await nC(G)).length===0)await kj0(G,{recursive:!0,force:!0});return Q}async function nC($){try{return(await S66($)).filter((X)=>!X.startsWith("."))}catch{return[]}}var V66=30;var R41=()=>{};import{DBOS as I41,SchedulerMode as C66}from"@dbos-inc/dbos-sdk";async function v66(){let $=[KJ(),pC(),iK()],Z=0;for(let X of $)try{Z+=await Vj0(X)}catch(Q){console.error("[monitoring-retention] cleanup failed:",Q)}return console.log(`[monitoring-retention] deleted ${Z} day-dir(s) across ${$.length} signal dir(s)`),{deleted:Z,dirs:$.length}}async function b66($,Z){await I41.runStep(()=>v66(),{name:"monitoringRetention"})}function qb$(){if(Ib$)return;Ib$=!0;let $=I41.registerWorkflow(b66,{name:"monitoringRetentionWorkflow"});I41.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:_66,mode:C66.ExactlyOncePerIntervalWhenActive})}var _66="23 4 * * *",Ib$=!1;var Mb$=B(()=>{rQ();R41()});function kb$($){return async(Z,X)=>{let Q=await $.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["member.role","organization.id as orgId","organization.slug as orgSlug","organization.name as orgName"]).where("member.userId","=",X).where("member.organizationId","=",Z).executeTakeFirst();if(!Q)return console.warn(`[automationContextFactory] User ${X} not found in org ${Z} \u2014 returning null`),null;let G=await xK.create();G.auth.user={id:X,role:Q.role},G.organization={id:Q.orgId,slug:Q.orgSlug,name:Q.orgName};let Y=await d11($.db,Z,Q.role);return G.boundAuth=l11({auth:G.authInstance,headers:new Headers,role:Q.role,permissions:Y,userId:X}),G.access=new dD(X,void 0,G.boundAuth,Q.role,"self"),Tg(G,{id:Q.orgId,slug:Q.orgSlug}),G}}var Sb$=B(()=>{mD();Dg()});function f66(){return{services:[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}],migrationsStatus:"pending",serverUrl:null,logs:[]}}function y66(){for(let $ of x66)$()}function Vb$($){let Z=[...q41.logs,$];q41={...q41,logs:Z.length>500?Z.slice(-500):Z},y66()}function M41(){return g66}var q41,x66,g66=!1;var k41=B(()=>{q41=f66(),x66=new Set});import{EventEmitter as h66}from"events";var S41;var Cb$=B(()=>{k41();S41=new h66;S41.on("request",($)=>{Vb$($)})});function _b$(){return async($,Z)=>{let X=Date.now(),Q=$.req.method,G=$.req.path;if(G==="/api/auth/get-session"||G.includes("favicon")){await Z();return}let Y="",J=!1;if(G.startsWith("/mcp")&&Q==="POST"){J=!0;try{if($.req.header("Content-Type")?.includes("application/json")){let U=await $.req.raw.clone().json();if(U.method==="tools/call"&&U.params?.name){let w=pg(U.params.name),O=U.params.arguments||{},D=Object.keys(O).map((E)=>pg(E)),L=D.length>0?D.slice(0,3).join(",")+(D.length>3?"\u2026":""):"";Y=`${e6.tool}${w}${e6.dim}(${L})${e6.reset}`}else if(U.method)Y=`${e6.dim}${pg(U.method)}${e6.reset}`}}catch{}}let W=pg(G);if(G.startsWith("/mcp/conn_")){let N=G.split("/")[2]??"";W=`/mcp/${e6.mcp}${pg(N.slice(0,12))}\u2026${e6.reset}`}else if(G==="/mcp")W=`${e6.mcp}/mcp${e6.reset}`;else if(G==="/mcp/registry")W=`${e6.mcp}/mcp/registry${e6.reset}`;let K=c66(Q),H=J?"\u25C0":"\u2190";if(!M41())console.log(`${e6.dim}${H}${e6.reset} ${K}${Q}${e6.reset} ${W}${Y?` ${Y}`:""}`);try{await Z()}finally{let N=Date.now()-X,F=$.res.status,U=u66(F),w=N<1000?`${N}ms`:`${(N/1000).toFixed(1)}s`,O=J?"\u25B6":"\u2192";if(!M41())console.log(`${e6.dim}${O}${e6.reset} ${K}${Q}${e6.reset} ${W}${Y?` ${Y}`:""} ${U}${F}${e6.reset} ${e6.duration}${w}${e6.reset}`);S41.emit("request",{method:Q,path:pg(G),status:F,duration:N,timestamp:new Date})}}}var e6,u66=($)=>{if($>=500)return e6.serverError;if($>=400)return e6.clientError;if($>=300)return e6.redirect;return e6.ok},c66=($)=>{return e6[$]||e6.reset},pg=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var vb$=B(()=>{k41();Cb$();e6={reset:"\x1B[0m",dim:"\x1B[2m",bold:"\x1B[1m",GET:"\x1B[36m",POST:"\x1B[33m",PUT:"\x1B[35m",DELETE:"\x1B[31m",ok:"\x1B[32m",redirect:"\x1B[36m",clientError:"\x1B[33m",serverError:"\x1B[31m",mcp:"\x1B[35m",tool:"\x1B[96m",duration:"\x1B[90m"}});import{createHmac as yb$}from"crypto";import{mkdir as l66,readdir as d66,rm as bb$,stat as gb$}from"fs/promises";import{join as C41,relative as m66}from"path";import{z as E$}from"zod";function ub$($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return C41(i66,Z)}function cb$($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function V41($,Z){let X=ub$($),Q=cb$(Z);return C41(X,Q)}function n66($,Z,X,Q){let G=c0().encryptionKey||"dev-secret",Y=`${$}:${Z}:${X}:${Q}`;return yb$("sha256",G).update(Y).digest("hex")}function xb$($,Z,X,Q,G){let Y=Math.floor(Date.now()/1000)+Q,J=n66(Z,X,Y,G),W=new URL(`/api/dev-assets/${Z}/${cb$(X)}`,$);return W.searchParams.set("expires",Y.toString()),W.searchParams.set("signature",J),W.searchParams.set("method",G),W.toString()}function lb$($,Z,X){let Q=`${$}:${Z.getTime()}:${X}`;return`"${yb$("md5","etag").update(Q).digest("hex")}"`}async function db$($,Z,X,Q,G){try{let Y=await d66($,{withFileTypes:!0});for(let J of Y){let W=C41($,J.name),H=m66(Z,W).replace(/\\/g,"/");if(X&&!H.startsWith(X))continue;if(J.isDirectory())if(Q){let N=H+"/";if(!X||N.startsWith(X)){if(!(X?H.slice(X.length):H).includes("/"))G.commonPrefixes.add(N)}}else await db$(W,Z,X,Q,G);else if(J.isFile()){if(Q&&X){let N=H.slice(X.length);if(N.includes(Q)){let F=N.indexOf(Q),U=X+N.slice(0,F+1);G.commonPrefixes.add(U);continue}}try{let N=await gb$(W);G.objects.push({key:H,size:N.size,lastModified:N.mtime.toISOString(),etag:lb$(W,N.mtime,N.size)})}catch{}}}}catch{}}function mb$($,Z){let Q=r($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:E$.object({prefix:E$.string().optional(),maxKeys:E$.number().optional().default(1000),continuationToken:E$.string().optional(),delimiter:E$.string().optional()}),outputSchema:E$.object({objects:E$.array(E$.object({key:E$.string(),size:E$.number(),lastModified:E$.string(),etag:E$.string()})),nextContinuationToken:E$.string().optional(),isTruncated:E$.boolean(),commonPrefixes:E$.array(E$.string()).optional()}),handler:async(G)=>{let Y=G,J=Y.prefix||"",W=Y.maxKeys??1000,K=Y.delimiter,H=Y.continuationToken,N=ub$(Q);await l66(N,{recursive:!0});let F={objects:[],commonPrefixes:new Set};await db$(N,N,J,K,F),F.objects.sort((L,E)=>L.key.localeCompare(E.key));let U=0;if(H){if(U=F.objects.findIndex((L)=>L.key>H),U===-1)U=F.objects.length}let w=F.objects.slice(U,U+W),O=U+W<F.objects.length,D=O?w[w.length-1]?.key:void 0;return{objects:w,isTruncated:O,nextContinuationToken:D,commonPrefixes:Array.from(F.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:E$.object({key:E$.string()}),outputSchema:E$.object({contentType:E$.string().optional(),contentLength:E$.number(),lastModified:E$.string(),etag:E$.string(),metadata:E$.record(E$.string(),E$.string()).optional()}),handler:async(G)=>{let Y=G,J=V41(Q,Y.key),W=await gb$(J);return{contentType:R$1(Y.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:lb$(J,W.mtime,W.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:E$.object({key:E$.string(),expiresIn:E$.number().optional()}),outputSchema:E$.object({url:E$.string(),expiresIn:E$.number()}),handler:async(G)=>{let Y=G,J=Y.expiresIn??fb$;return{url:xb$(Z,Q,Y.key,J,"GET"),expiresIn:J}}},{name:"PUT_PRESIGNED_URL",description:"Generate a presigned URL for uploading a file to local storage",inputSchema:E$.object({key:E$.string(),expiresIn:E$.number().optional(),contentType:E$.string().optional()}),outputSchema:E$.object({url:E$.string(),expiresIn:E$.number()}),handler:async(G)=>{let Y=G,J=Y.expiresIn??fb$;return{url:xb$(Z,Q,Y.key,J,"PUT"),expiresIn:J}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:E$.object({key:E$.string()}),outputSchema:E$.object({success:E$.boolean(),key:E$.string()}),handler:async(G)=>{let Y=G,J=V41(Q,Y.key);try{return await bb$(J),{success:!0,key:Y.key}}catch{return{success:!1,key:Y.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:E$.object({keys:E$.array(E$.string()).max(1000)}),outputSchema:E$.object({deleted:E$.array(E$.string()),errors:E$.array(E$.object({key:E$.string(),message:E$.string()}))}),handler:async(G)=>{let Y=G,J=[],W=[];return await Promise.all(Y.keys.map(async(K)=>{let H=V41(Q,K);try{await bb$(H),J.push(K)}catch(N){W.push({key:K,message:N instanceof Error?N.message:"Unknown error"})}})),{deleted:J,errors:W}}}]}async function _41($,Z,X){let Q=mb$(Z,X),G=new AW({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:Y5});for(let J of Q){let W="shape"in J.inputSchema?J.inputSchema.shape:E$.object({}).shape,K=J.outputSchema&&"shape"in J.outputSchema?J.outputSchema.shape:E$.object({}).shape;G.registerTool(J.name,{description:J.description??"",inputSchema:W,outputSchema:K,annotations:J.annotations,_meta:J._meta},async(H)=>{try{let N=await J.handler(H);return{content:[{type:"text",text:JSON.stringify(N)}],structuredContent:N}}catch(N){return{content:[{type:"text",text:`Error: ${N.message}`}],isError:!0}}})}let Y=new lX({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await G.connect(Y),lY(G,Y,$,"mcp:dev-assets")}async function ib$($,Z,X,Q){let Y=mb$(X,Q).find((J)=>J.name===$);if(!Y)return{content:[{type:"text",text:`Tool not found: ${$}`}],isError:!0};try{let J=await Y.handler(Z);return{content:[{type:"text",text:JSON.stringify(J)}]}}catch(J){return{content:[{type:"text",text:J instanceof Error?J.message:String(J)}],isError:!0}}}var i66="./data/assets",fb$=3600,hb$,nb$;var pb$=B(()=>{S$();lx();y8();dc();bV();RX();cE0();hb$=new B1;hb$.all("/",async($)=>{let Z=$.get("studioContext"),X=new URL($.req.url),Q=`${X.protocol}//${X.host}`;return _41($.req.raw,Z,Q)});nb$=hb$});var tb$={};N4(tb$,{mountDevRoutes:()=>p66});function p66($,Z){$.all("/mcp/:connectionId{.*_dev-assets$}",Z,async(Q)=>{let G=Q.get("studioContext"),Y=new URL(Q.req.url),J=`${Y.protocol}//${Y.host}`;return _41(Q.req.raw,G,J)}),$.all("/mcp/:connectionId{.*_dev-assets$}/call-tool/:toolName",Z,async(Q)=>{let G=Q.get("studioContext"),Y=new URL(Q.req.url),J=`${Y.protocol}//${Y.host}`,W=Q.req.param("toolName");if(!W)return Q.json({error:"Missing tool name"},400);let K=await Q.req.json(),H=await ib$(W,K,G,J);if(H.isError)return Q.json(H.content,500);return Q.json(H.content)}),$.use("/mcp/dev-assets",Z),$.route("/mcp/dev-assets",nb$);let X=new B1;X.use("*",d3({mountPath:"/api/dev-assets"})),X.route("/",uE0({orgFromPath:!1})),$.route("/api/dev-assets",X)}var ob$=B(()=>{y8();D$1();cE0();pb$()});import{sql as t66}from"kysely";import{randomUUID as rb$}from"crypto";import{z as o66}from"zod";async function a66($){let Z=new Date().toISOString(),X=rb$(),Q=h4.SELF($.organizationId),G="registry.publish_request.created",Y={requestId:$.request.id,requestedId:$.request.requested_id,title:$.request.title,status:$.request.status,createdAt:$.request.created_at,requester:{name:$.request.requester_name,email:$.request.requester_email}};await $.db.insertInto("events").values({id:X,organization_id:$.organizationId,type:"registry.publish_request.created",source:Q,specversion:"1.0",subject:$.request.id,time:Z,datacontenttype:"application/json",dataschema:null,data:JSON.stringify(Y),cron:null,status:"pending",attempts:0,last_error:null,next_retry_at:null,created_at:Z,updated_at:Z}).execute();let J=await $.db.selectFrom("event_subscriptions").select(["id"]).where("organization_id","=",$.organizationId).where("enabled","=",1).where("event_type","=","registry.publish_request.created").where((W)=>W.or([W("publisher","is",null),W("publisher","=",Q)])).execute();if(J.length>0)await $.db.insertInto("event_deliveries").values(J.map((W)=>({id:rb$(),event_id:X,subscription_id:W.id,status:"pending",attempts:0,last_error:null,delivered_at:null,next_retry_at:null,created_at:Z}))).execute();try{await t66`SELECT
|
|
2732
2732
|
pg_notify('studio_events', ${X}),
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c as L,b as R,j as r}from"./index-DWXkCL-D.js";import{I as A}from"./input-Cw-Wyzjp.js";import{L as I}from"./label-i-JCcQNn.js";import{S as z,a as J,b as O,c as V,d as $}from"./select-BPHj3yEG.js";import{T as D}from"./textarea-CIIh3eCO.js";import{R as M,T as U,U as W,J as q,W as G,$ as H}from"./index-Ciskbrba.js";import{s as F}from"./primitives-DthsGsSM.js";import{u as Q}from"./use-autosave-Cyw8Zffh.js";import"./tooltip-bNOyqjG-.js";import"./Check-Ckh2J0Wj.js";import"./ChevronDown-DcGz0OOE.js";import"./ChevronUp-335oTLfl.js";import"./ArrowUp-DAgivKXe.js";import"./chat-context-CeV8_oNw.js";import"./tab-id-Bg-2ZvlR.js";import"./dialog-DyuBQbz8.js";import"./X-BmCvrF6m.js";import"./Copy01-DCGFBPLU.js";import"./hooks-C92XOaKP.js";import"./use-mcp-client-DKp-llYX.js";import"./auth-CLFO3_RL.js";import"./decopilot-sse-pool-PkdJDYdO.js";import"./backoff-CrEUbyZT.js";import"./delay-CnY5UFtP.js";import"./use-is-desktop-app-BNujXJc_.js";import"./use-virtual-mcp-CoA0Ur0Z.js";import"./use-ai-providers-fR1LNvFR.js";import"./studio-tools-2Ky28cSc.js";import"./use-decopilot-events-M2HCToeh.js";import"./use-organization-settings-mJokZoPl.js";import"./automation-runs-xPJB6zEu.js";import"./agent-icon-BAPsFhIR.js";import"./AlertCircle-Db8FAhD0.js";import"./Tool01-DKQr2Ku4.js";import"./ArrowLeft-BBdrIXTE.js";import"./Tool02-DkhywL9m.js";import"./XCircle-Dl4jNIuW.js";import"./ArrowUpRight-BAYKU_Mt.js";import"./TrendUp01-5u9J7nxr.js";import"./ZapSquare-CcO7sK-p.js";import"./Users03-DqyOOoSg.js";import"./CheckCircle-DWW9c4n7.js";import"./ChevronRight-DPR4kcMe.js";import"./DotsVertical-BdH2ws1v.js";import"./Stars02-Ddu22e9e.js";import"./CpuChip01-CpN_p7ZK.js";import"./CreditCard01-CA0IYAzI.js";import"./Globe01-C6n_Eepd.js";import"./Settings02-Dd-GnwO4.js";import"./Eye-Cd6Z4wr1.js";import"./FilterLines-CGfVuof0.js";import"./Share07-BK5jaJxR.js";import"./Star01-BD9GU6__.js";import"./Globe04-B1lizZTT.js";import"./SwitchHorizontal01-DdUa0KSY.js";import"./HardDrive-DzwjWFWh.js";import"./Key01-1GhbQsqk.js";import"./LayoutLeft-9QVSG_-K.js";import"./LinkExternal01-DnTES2u_.js";import"./LogOut01-BLj4aSl9.js";import"./Monitor01-aQHufnwR.js";import"./Sun-CBbSD7eu.js";import"./Palette-hUc3dCur.js";import"./Play-3BJ0NCnw.js";import"./Plus-DSVjF-4R.js";import"./SearchLg-DeEuvWgr.js";import"./SearchMd-D3BEkIfl.js";import"./Shield01-CAAiZUxe.js";import"./Stars01-CsmqcIh0.js";import"./Trash01-N83L9DVj.js";import"./Upload01-BKUwtebR.js";import"./User01-DH7Gp-RH.js";import"./Users01-CewPDueJ.js";import"./XClose-B91Wj--l.js";import"./Zap-Byhu3tNy.js";import"./useInfiniteQuery-DTZxXa2W.js";import"./use-infinite-scroll-Csqlp5hg.js";import"./use-connection-CvELWTwk.js";import"./card-BdxDDHfa.js";import"./sidebar-Bt6Ox8Tg.js";import"./use-mobile-6uCDoREK.js";import"./table-DtygcXDr.js";import"./empty-state-DwUtvF_m.js";import"./use-members-DPZXIkQa.js";import"./use-org-auth-client-DrjcoPeu.js";import"./use-clock-tick-Dunir5bW.js";import"./use-automations-6PKQGIaU.js";import"./useSuspenseInfiniteQuery-eryeyNHv.js";import"./avatar-BlKd_wSy.js";import"./format-time-BnbuEtat.js";import"./differenceInSeconds-NQ4PDo0z.js";import"./use-copy-BZ4yfNM-.js";import"./monaco-editor-VJrBuRSN.js";import"./spinner-tb9aLmXA.js";import"./index-CuhGmwi3.js";import"./shell-layout-DsCjXZuI.js";import"./required-auth-layout-Cx1dgRdu.js";import"./use-org-sso-d3sj4htn.js";import"./integration-icon-CNs8rVds.js";import"./use-navigate-to-agent-i487hDEf.js";import"./reusable-new-chat-CouMjkYR.js";import"./AreaChart-CkHaA1qM.js";import"./form-6TwMc-HF.js";import"./file-type-icon-BlQX_yUc.js";import"./drawer-ClGoEAYt.js";import"./collection-search-DbKCI-82.js";import"./tabs-B-yQnDjy.js";import"./toggle-group-SpDgsjAy.js";import"./use-deco-credits-j4q9AuO0.js";import"./popover-DssDKn2g.js";import"./alert-dialog-BCaZm96Z.js";import"./toolbar-DoiNuzRz.js";import"./skeleton-DaSU0LrF.js";import"./github-repo-picker-CNbnvvQi.js";import"./use-debounced-value-CBrkrBVe.js";import"./authenticate-and-persist-oauth-CJL9FtIM.js";import"./mcp-oauth-Cz8lm40c.js";import"./use-mcp-tools-C6yyPNEW.js";import"./extract-connection-data-De7mHrhF.js";import"./metadata-dUsYcpuu.js";import"./provision-repo-scoped-github-connection-ufuvpGD9.js";import"./agent-capabilities-cXfbMfjV.js";import"./connection-card-CwA9Uv3g.js";import"./use-registry-connections-cg2WmvBD.js";import"./retry-CErkP7V6.js";import"./connection-slug-eyAPH6o3.js";import"./connection-form-helpers-CahL0pvk.js";import"./collection-tabs-B6YV6Wqg.js";import"./badge-j9XMC7le.js";import"./use-open-billing-url-IyKhK2Ci.js";import"./select-model-JbUCoNOJ.js";import"./checkbox-B1jaivmN.js";import"./ai-providers-logos-DD3qZ33J.js";import"./settings-section-Dh7xkKg_.js";import"./cards-NVoopU1W.js";import"./dropdown-menu-CN40TAwh.js";import"./question-004-sINsf4GQ.js";import"./use-status-sounds-BX6vUIM6.js";import"./deco-site-production-url-CaKZ7xBn.js";import"./use-capability-DKpeN9dM.js";import"./pt-BR-CLy76QW2.js";import"./switch-BsgP2USk.js";import"./use-debounced-autosave-BoxizbC8.js";import"./index-gBiaWWBo.js";import"./search-input-9VIRkcfy.js";import"./index-BBOexEq8.js";import"./use-secrets--J9RYnhw.js";import"./self-tool-result-CqE4epjU.js";import"./use-tags-BpnhmQR6.js";import"./get-initials-D-f_fDFw.js";import"./command-BBDTtSLh.js";import"./index-sqdSTtTR.js";import"./use-file-configs-uSz0v_YV.js";import"./automation-list-row-U2osdxyj.js";const X={authors:[{key:"name",labelKey:"sandbox.recordEditor.fieldName",widget:"text"},{key:"type",labelKey:"sandbox.recordEditor.fieldType",widget:"select",options:[{value:"Person",labelKey:"sandbox.recordEditor.optionPerson"},{value:"Organization",labelKey:"sandbox.recordEditor.optionOrganization"}]},{key:"email",labelKey:"sandbox.recordEditor.fieldEmail",widget:"text",placeholderKey:"sandbox.recordEditor.placeholderEmail"},{key:"jobTitle",labelKey:"sandbox.recordEditor.fieldJobTitle",widget:"text"},{key:"company",labelKey:"sandbox.recordEditor.fieldCompany",widget:"text"},{key:"avatar",labelKey:"sandbox.recordEditor.fieldAvatar",widget:"image"}]},Y={authors:"sandbox.recordEditor.titleAuthor"};function Wr(C){const t=L.c(40),{orgSlug:K,virtualMcpId:h,branch:w,kind:a,blockKey:g,block:f}=C,i=R(),P=M(h);let b;t[0]!==w||t[1]!==K||t[2]!==P||t[3]!==h?(b={orgSlug:K,virtualMcpId:h,branch:w,packagePath:P},t[0]=w,t[1]=K,t[2]=P,t[3]=h,t[4]=b):b=t[4];const p=U(b);let k;t[5]!==f||t[6]!==a?(k=W(f,a),t[5]=f,t[6]=a,t[7]=k):k=t[7];const B=k;let v;t[8]!==g||t[9]!==a||t[10]!==p?(v=l=>{p.mutate({blockKey:g,data:G(g,a,l)})},t[8]=g,t[9]=a,t[10]=p,t[11]=v):v=t[11];const[e,S]=Q(B,v);let j;t[12]!==e||t[13]!==S?(j=(l,o)=>S({...e,[l]:o}),t[12]=e,t[13]=S,t[14]=j):j=t[14];const s=j,T=Y[a];let n;t[15]!==i||t[16]!==T?(n=i(T),t[15]=i,t[16]=T,t[17]=n):n=t[17];let c;t[18]!==n?(c=r.jsx("span",{className:"text-sm font-medium",children:n}),t[18]=n,t[19]=c):c=t[19];let d;t[20]!==p.isError||t[21]!==p.isPending?(d=r.jsx(q,{isPending:p.isPending,isError:p.isError}),t[20]=p.isError,t[21]=p.isPending,t[22]=d):d=t[22];let y;t[23]!==c||t[24]!==d?(y=r.jsxs("div",{className:"flex h-12 shrink-0 items-center justify-between border-b px-6",children:[c,d]}),t[23]=c,t[24]=d,t[25]=y):y=t[25];const N=X[a];let x;if(t[26]!==e||t[27]!==s||t[28]!==i||t[29]!==N){let l;t[31]!==e||t[32]!==s||t[33]!==i?(l=o=>r.jsx("div",{className:"space-y-2",children:o.widget==="image"?r.jsx(H,{schema:{type:"string",format:"image-uri",title:i(o.labelKey)},value:e[o.key],onChange:m=>s(o.key,m),path:o.key,label:i(o.labelKey)}):o.widget==="select"?r.jsxs(r.Fragment,{children:[r.jsx(I,{htmlFor:o.key,children:i(o.labelKey)}),r.jsxs(z,{value:F(e[o.key])||o.options?.[0]?.value,onValueChange:m=>s(o.key,m),children:[r.jsx(J,{id:o.key,className:"h-10 w-full",children:r.jsx(O,{placeholder:i(o.labelKey)})}),r.jsx(V,{children:(o.options??[]).map(m=>r.jsx($,{value:m.value,children:i(m.labelKey)},m.value))})]})]}):r.jsxs(r.Fragment,{children:[r.jsx(I,{htmlFor:o.key,children:i(o.labelKey)}),o.widget==="textarea"?r.jsx(D,{id:o.key,value:F(e[o.key]),onChange:m=>s(o.key,m.target.value),rows:3}):r.jsx(A,{id:o.key,value:F(e[o.key]),placeholder:o.placeholderKey?i(o.placeholderKey):void 0,onChange:m=>s(o.key,m.target.value),className:"h-10"})]})},o.key),t[31]=e,t[32]=s,t[33]=i,t[34]=l):l=t[34],x=N.map(l),t[26]=e,t[27]=s,t[28]=i,t[29]=N,t[30]=x}else x=t[30];let u;t[35]!==x?(u=r.jsx("div",{className:"min-w-0 flex-1 overflow-y-auto px-6 py-6",children:r.jsx("div",{className:"mx-auto max-w-xl space-y-6",children:x})}),t[35]=x,t[36]=u):u=t[36];let E;return t[37]!==y||t[38]!==u?(E=r.jsxs("div",{className:"flex h-full flex-col",children:[y,u]}),t[37]=y,t[38]=u,t[39]=E):E=t[39],E}export{Wr as RecordEditor};
|