decocms 4.220.10 → 4.220.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-Ca7MM0i3.js → AlertCircle-bTmSO7L_.js} +1 -1
- package/dist/client/assets/{AreaChart-CtO3UJSP.js → AreaChart-CCcfr0tr.js} +1 -1
- package/dist/client/assets/{ArrowLeft-BCbgWYCu.js → ArrowLeft-_1XEMG4W.js} +1 -1
- package/dist/client/assets/{ArrowUp-B2f3A5eK.js → ArrowUp-CnfzTAph.js} +1 -1
- package/dist/client/assets/{ArrowUpRight-AkaHL8YQ.js → ArrowUpRight-CdKsPebR.js} +1 -1
- package/dist/client/assets/{Check-Df9dKS9L.js → Check-Be9VUyhl.js} +1 -1
- package/dist/client/assets/{CheckCircle-CgXk3dkM.js → CheckCircle-CN_nlz9p.js} +1 -1
- package/dist/client/assets/{ChevronDown-DZcB_Qdd.js → ChevronDown-BVLGEGYA.js} +1 -1
- package/dist/client/assets/{ChevronRight-7hX3WtB8.js → ChevronRight-pnZJ-0td.js} +1 -1
- package/dist/client/assets/{ChevronUp-DZyfOy7c.js → ChevronUp-Bv7OFQSx.js} +1 -1
- package/dist/client/assets/{Copy01-Blolk4fx.js → Copy01-W1WiGpWi.js} +1 -1
- package/dist/client/assets/{CpuChip01-Bo4lHhO2.js → CpuChip01-DdHp3D0r.js} +1 -1
- package/dist/client/assets/{CreditCard01-Bz0aW7-3.js → CreditCard01-DgnjR8fp.js} +1 -1
- package/dist/client/assets/{DotsVertical-HkNEKMnv.js → DotsVertical-D5kx5tYx.js} +1 -1
- package/dist/client/assets/{Eye-Bb15j-a3.js → Eye-BMbjOooL.js} +1 -1
- package/dist/client/assets/{FilterLines-C4xAKdXV.js → FilterLines-Bu1shc4B.js} +1 -1
- package/dist/client/assets/{Globe01-DxqX9WeP.js → Globe01-C-AZT2Li.js} +1 -1
- package/dist/client/assets/{Globe04-FCkVxKJA.js → Globe04-CjVHzPo4.js} +1 -1
- package/dist/client/assets/{HardDrive-Wm_09Som.js → HardDrive-OV2b9H_a.js} +1 -1
- package/dist/client/assets/{Key01-B9i7aqtI.js → Key01-BE7B0cZn.js} +1 -1
- package/dist/client/assets/{LayoutLeft-kJjIb0We.js → LayoutLeft-BGPHHeii.js} +1 -1
- package/dist/client/assets/{LinkExternal01-Dxsdb3eS.js → LinkExternal01-DLXlYN_X.js} +1 -1
- package/dist/client/assets/{LogOut01-WSaitCm6.js → LogOut01-PFGvzq9r.js} +1 -1
- package/dist/client/assets/{Monitor01-DKE83_gn.js → Monitor01-DyY0tcLV.js} +1 -1
- package/dist/client/assets/{Palette-CKBWHo1H.js → Palette-CsD6aj_r.js} +1 -1
- package/dist/client/assets/{Play-C9T5oLID.js → Play-B2zaZod-.js} +1 -1
- package/dist/client/assets/{Plus-8AxuNmG-.js → Plus-m9FUvDhj.js} +1 -1
- package/dist/client/assets/{SearchLg-Du_L7T4g.js → SearchLg-y6zF4yUY.js} +1 -1
- package/dist/client/assets/{SearchMd-B91y1qMO.js → SearchMd-0yvemzUb.js} +1 -1
- package/dist/client/assets/{Settings02-DIKxh1YU.js → Settings02-yk81NxMo.js} +1 -1
- package/dist/client/assets/{Share07-CeS22SZl.js → Share07-es2vu0Sq.js} +1 -1
- package/dist/client/assets/{Shield01-C1f3aFCW.js → Shield01-iIaRdQNP.js} +1 -1
- package/dist/client/assets/{Star01-DJa2M9of.js → Star01-D-4GCj4v.js} +1 -1
- package/dist/client/assets/{Stars01-DTCZws_y.js → Stars01-SFloZbjr.js} +1 -1
- package/dist/client/assets/{Stars02-BIDF_Sxk.js → Stars02-CZFHNzqg.js} +1 -1
- package/dist/client/assets/{Sun-nUCXel8G.js → Sun-Bjc0V7st.js} +1 -1
- package/dist/client/assets/{SwitchHorizontal01-BBz4vQGr.js → SwitchHorizontal01-Dtrsr6Wz.js} +1 -1
- package/dist/client/assets/{Tool01-iiho1Sl4.js → Tool01-DqDl_aK4.js} +1 -1
- package/dist/client/assets/{Tool02-D-X-sFWj.js → Tool02-DOFrA-CO.js} +1 -1
- package/dist/client/assets/{Trash01-BLPMXZBO.js → Trash01-TYTvqnTo.js} +1 -1
- package/dist/client/assets/{TrendUp01-CqO6HybQ.js → TrendUp01-yMViSlv_.js} +1 -1
- package/dist/client/assets/{Upload01-CBSWfm8t.js → Upload01-CKxAvsTz.js} +1 -1
- package/dist/client/assets/{User01-CH2Bkoff.js → User01-DcVcOGgB.js} +1 -1
- package/dist/client/assets/{Users01--0Fvo0PW.js → Users01-CYnPFtqw.js} +1 -1
- package/dist/client/assets/{Users03-CNimYJV4.js → Users03-CAzPq0rr.js} +1 -1
- package/dist/client/assets/{X-ZuDvXo1r.js → X-KXRws6SD.js} +1 -1
- package/dist/client/assets/{XCircle-BZp9DxmZ.js → XCircle-DAvG5Hoz.js} +1 -1
- package/dist/client/assets/{XClose-DdhJb5QZ.js → XClose-BkRx9gwQ.js} +1 -1
- package/dist/client/assets/{YAxis-r8dS2-vp.js → YAxis-s_jAQU4b.js} +1 -1
- package/dist/client/assets/{Zap-B5X8rAwo.js → Zap-CUspsGAB.js} +1 -1
- package/dist/client/assets/{ZapSquare-BIfBS0jE.js → ZapSquare-BpiyqnEF.js} +1 -1
- package/dist/client/assets/{access-gate-Q1zamhcg.js → access-gate-CUlKAjjx.js} +1 -1
- package/dist/client/assets/{agent-icon-BatKEXoz.js → agent-icon-D7nbnKaj.js} +1 -1
- package/dist/client/assets/{agents-list-DBer11TX.js → agents-list-D-ZKSr6b.js} +1 -1
- package/dist/client/assets/{ai-providers-keFZJ5Kj.js → ai-providers-BhuWf5cj.js} +1 -1
- package/dist/client/assets/{alert-DUovFTkV.js → alert-CHlPkx0O.js} +1 -1
- package/dist/client/assets/{alert-dialog-W2c5HM_H.js → alert-dialog-C7xqirxv.js} +1 -1
- package/dist/client/assets/{api-keys-P9hM4H_q.js → api-keys-CFdy5vrL.js} +1 -1
- package/dist/client/assets/{app-editor-DPdrnqn0.js → app-editor-Bnx6VvwL.js} +1 -1
- package/dist/client/assets/{auth-DXtsM36n.js → auth-CelSsBfJ.js} +1 -1
- package/dist/client/assets/{auth-catchall-DACsaoBF.js → auth-catchall-B3SMHdVs.js} +1 -1
- package/dist/client/assets/{auth-entry-BoJj1WbK.js → auth-entry-BTPNrlN2.js} +1 -1
- package/dist/client/assets/{auth-split-layout-CHp7o8i-.js → auth-split-layout-DguyBAzg.js} +1 -1
- package/dist/client/assets/{authenticate-and-persist-oauth-C04f0J6t.js → authenticate-and-persist-oauth-CBcPHiB0.js} +1 -1
- package/dist/client/assets/{automation-list-row-JOvTRybw.js → automation-list-row-BOU9XaAe.js} +1 -1
- package/dist/client/assets/{automation-runs-Cm7U_XK4.js → automation-runs-WNe22lqR.js} +1 -1
- package/dist/client/assets/{automations-bHM_J_VT.js → automations-Dk_BP0s3.js} +1 -1
- package/dist/client/assets/{avatar-fwHx5fCY.js → avatar-DO6MOLsb.js} +1 -1
- package/dist/client/assets/{badge-ByA1rI15.js → badge-9BWmkM_w.js} +1 -1
- package/dist/client/assets/{billing-g_GfJMn8.js → billing-CDhw_Txd.js} +1 -1
- package/dist/client/assets/{block-document-D4ZmdQcj.js → block-document-BLXbxono.js} +1 -1
- package/dist/client/assets/{brand-context-CQRW2bdJ.js → brand-context-Cyc_l19e.js} +1 -1
- package/dist/client/assets/{buckets-ANhpcisd.js → buckets-DsNmSPQJ.js} +1 -1
- package/dist/client/assets/{bulk-category-panel-BmyEri-6.js → bulk-category-panel-NlRTLdoP.js} +1 -1
- package/dist/client/assets/{capability-load-error-B31isfIf.js → capability-load-error-BZq5lYek.js} +1 -1
- package/dist/client/assets/{card-BrZ_JSRC.js → card-BL1QGwV-.js} +1 -1
- package/dist/client/assets/{cards-DCo7ZEX0.js → cards-CPBv5aYB.js} +1 -1
- package/dist/client/assets/{category-editor-CMQCavEs.js → category-editor-2BVLhBHV.js} +1 -1
- package/dist/client/assets/{chart-Csbl-HGq.js → chart-CFyiTyv8.js} +1 -1
- package/dist/client/assets/{chat-context-D3-ggdoV.js → chat-context-DmWAG8OK.js} +1 -1
- package/dist/client/assets/{checkbox-bHvzhYK7.js → checkbox-Br8cdypB.js} +1 -1
- package/dist/client/assets/{cli-auth-success-Czj7AW04.js → cli-auth-success-CgMZO1o3.js} +1 -1
- package/dist/client/assets/{collection-detail-CBermvNJ.js → collection-detail-YyNqUkCM.js} +1 -1
- package/dist/client/assets/{collection-display-button-oilqq7Yr.js → collection-display-button-w1ih-EXJ.js} +1 -1
- package/dist/client/assets/{collection-search-xKAzSuv3.js → collection-search-Bm5Pfs_J.js} +1 -1
- package/dist/client/assets/{collection-table-wrapper-keawsLm6.js → collection-table-wrapper-BFKHuhvL.js} +1 -1
- package/dist/client/assets/{collection-tabs-DkjwlPpT.js → collection-tabs-EQ701fke.js} +1 -1
- package/dist/client/assets/{command-Brrv6P0f.js → command-C1kXq6wY.js} +1 -1
- package/dist/client/assets/{commerce-onboarding-CFKEqdbm.js → commerce-onboarding-Cxk_F-Vw.js} +1 -1
- package/dist/client/assets/{connect-DR4I9u4U.js → connect-B4qOU5t4.js} +1 -1
- package/dist/client/assets/{connection-B79jaD53.js → connection-DzSV2vUj.js} +1 -1
- package/dist/client/assets/{connection-card-DapyRP5e.js → connection-card-CgdlsuHc.js} +1 -1
- package/dist/client/assets/{connection-detail-CcSzN5lO.js → connection-detail-B-A3GEDR.js} +1 -1
- package/dist/client/assets/{connection-form-helpers-BWj-fRSg.js → connection-form-helpers-DJuRkY2a.js} +1 -1
- package/dist/client/assets/{connections-zXV5EMEr.js → connections-BLVu30ee.js} +1 -1
- package/dist/client/assets/{decopilot-sse-pool-BF39w-nT.js → decopilot-sse-pool-DFzPCg-J.js} +1 -1
- package/dist/client/assets/{dialog-BJ_KHNHA.js → dialog-C1KnbNLF.js} +1 -1
- package/dist/client/assets/{domain-settings-BkcaTra7.js → domain-settings-ZYjAbuhF.js} +1 -1
- package/dist/client/assets/{drawer-DQW14SUE.js → drawer-BG8Fh68A.js} +1 -1
- package/dist/client/assets/{dropdown-menu-3frE49ZS.js → dropdown-menu-Cp46j4Fx.js} +1 -1
- package/dist/client/assets/{empty-state-CcIBIf-f.js → empty-state-CfEwrQsu.js} +1 -1
- package/dist/client/assets/{extract-connection-data-NIJvjhdL.js → extract-connection-data-b4vLWo_Y.js} +1 -1
- package/dist/client/assets/{file-explorer-D_8mRnyR.js → file-explorer-DAYjJCCb.js} +1 -1
- package/dist/client/assets/{file-type-icon-Q8DkZd2h.js → file-type-icon-CfCNW8yU.js} +1 -1
- package/dist/client/assets/{form-BoqtQuSL.js → form-81JPw6Mc.js} +1 -1
- package/dist/client/assets/{general-DYTgdgf3.js → general-Clr9oofX.js} +1 -1
- package/dist/client/assets/{github-repo-picker-N3ti44LC.js → github-repo-picker-CTlJea-f.js} +1 -1
- package/dist/client/assets/{hooks-Sc6_nFDK.js → hooks-D52dKlmq.js} +1 -1
- package/dist/client/assets/{index-BflfHu8f.js → index-BHXkRCQo.js} +43 -43
- package/dist/client/assets/{index-DhfTwHGD.js → index-BXPaSoNd.js} +1 -1
- package/dist/client/assets/{index-C8hfl2Sb.js → index-BfDb5CM9.js} +3 -3
- package/dist/client/assets/{index-CPA2flu2.js → index-BhUK0Tx4.js} +1 -1
- package/dist/client/assets/{index-CnljP-2j.js → index-BySIrRG-.js} +1 -1
- package/dist/client/assets/{index-DpkGpZe-.js → index-CBY7yz31.js} +1 -1
- package/dist/client/assets/{index-BVq0N7Bc.js → index-CKNTk7ir.js} +1 -1
- package/dist/client/assets/{index-CE64SXmE.js → index-DmCu3FtG.js} +1 -1
- package/dist/client/assets/{index-Cqhpsndk.js → index-IkT3br3l.js} +1 -1
- package/dist/client/assets/{index-Rvygt_1W.js → index-dQIMuwOO.js} +1 -1
- package/dist/client/assets/{index-redirect-D0G_ZDdX.js → index-redirect-BAZvFF0n.js} +1 -1
- package/dist/client/assets/{infra-billing-D0Tz55ol.js → infra-billing-M9q6hYab.js} +1 -1
- package/dist/client/assets/{input-BCzroQIh.js → input-Dbk-zewZ.js} +1 -1
- package/dist/client/assets/{integration-icon-BmYfoH6w.js → integration-icon-Xv6OpHut.js} +1 -1
- package/dist/client/assets/{invite-member-dialog-C5E5oJvu.js → invite-member-dialog-BlAbia0I.js} +1 -1
- package/dist/client/assets/{label-xqR_UGot.js → label-B6A1hCgq.js} +1 -1
- package/dist/client/assets/{layout-G8qYnf57.js → layout-BZmpxIRR.js} +1 -1
- package/dist/client/assets/{login-l3wbxw4D.js → login-DK3iPMUT.js} +1 -1
- package/dist/client/assets/{mcp-oauth-CPZm-E3D.js → mcp-oauth-CeGuvv7F.js} +1 -1
- package/dist/client/assets/{members-P0eW9EFD.js → members-CC6x02K8.js} +1 -1
- package/dist/client/assets/{monaco-editor-BOl_A_p1.js → monaco-editor-BSBsd2Fy.js} +1 -1
- package/dist/client/assets/{monitoring-stats-row-4sEYt4xt.js → monitoring-stats-row-B7bGqike.js} +1 -1
- package/dist/client/assets/{multi-select-504L9OJX.js → multi-select-CxgVp2JU.js} +1 -1
- package/dist/client/assets/{oauth-callback-BAKHLqgp.js → oauth-callback-DF0lY2dg.js} +1 -1
- package/dist/client/assets/{oauth-callback-ai-provider-C2bgcTPw.js → oauth-callback-ai-provider-D-iJu-A6.js} +1 -1
- package/dist/client/assets/{onboarding-BfOHKQPY.js → onboarding-0Hs3BpDh.js} +1 -1
- package/dist/client/assets/{org-layout-DnmvJ101.js → org-layout-ChV1irh1.js} +1 -1
- package/dist/client/assets/{organization-choice-D4OqseCu.js → organization-choice-7et6dYoE.js} +1 -1
- package/dist/client/assets/{orgs-BBOzfh0B.js → orgs-CAcDjIRF.js} +1 -1
- package/dist/client/assets/{page-seo-form-B4ZkFNWl.js → page-seo-form-BYbDSKJQ.js} +1 -1
- package/dist/client/assets/{popover-ilFNSOKv.js → popover-CFgyr3aN.js} +1 -1
- package/dist/client/assets/{post-editor-B1n26n1E.js → post-editor-DbF-35Km.js} +1 -1
- package/dist/client/assets/{primitives-1sCk15Qy.js → primitives-Fd87NiRC.js} +1 -1
- package/dist/client/assets/{profile-hQKlW-vX.js → profile-C3KCcr7q.js} +1 -1
- package/dist/client/assets/{project-app-view-X8VVbq_J.js → project-app-view-B2erRTAy.js} +1 -1
- package/dist/client/assets/record-editor-G3E9HoVM.js +1 -0
- package/dist/client/assets/{redirect-editor-k-UxPkMz.js → redirect-editor-BRVubWxX.js} +1 -1
- package/dist/client/assets/registry-CfmqFvu8.js +2 -0
- package/dist/client/assets/{registry-layout-BOxD6qyt.js → registry-layout-BMpe7QQR.js} +1 -1
- package/dist/client/assets/{reports-Bvz60NlB.js → reports-YHnzkOCB.js} +1 -1
- package/dist/client/assets/{require-capability-5LocJd_6.js → require-capability-CeKVVHqw.js} +1 -1
- package/dist/client/assets/{required-auth-layout-S7T69ii9.js → required-auth-layout-DigjJzRn.js} +1 -1
- package/dist/client/assets/{reset-password-BKe9IELx.js → reset-password-B8IEly4D.js} +1 -1
- package/dist/client/assets/{roles-0QIrhii4.js → roles-CDuLjmtl.js} +1 -1
- package/dist/client/assets/{search-input-DxkFzU2l.js → search-input-Vk_Unqse.js} +1 -1
- package/dist/client/assets/{secrets-DA2y3iTO.js → secrets-DJBY9_T1.js} +1 -1
- package/dist/client/assets/{sections-editor-CTquujM5.js → sections-editor-BAu1AKDG.js} +1 -1
- package/dist/client/assets/{select-model-6RIRsAzf.js → select-model-Boa2pNuu.js} +1 -1
- package/dist/client/assets/{select-B3uggBuM.js → select-uCoYPpHt.js} +1 -1
- package/dist/client/assets/{self-tool-result-gaGqwQpi.js → self-tool-result-ub_U99ax.js} +1 -1
- package/dist/client/assets/{seo-editor-C343ft4k.js → seo-editor-B4NIKC8L.js} +1 -1
- package/dist/client/assets/{settings-layout-C90-n8Cj.js → settings-layout-hM5BTuV4.js} +1 -1
- package/dist/client/assets/{settings-section-C4az5lE_.js → settings-section-CDmFFJ0U.js} +1 -1
- package/dist/client/assets/{shell-controls-BpSZ0-S7.js → shell-controls-CLzKdW9D.js} +1 -1
- package/dist/client/assets/{shell-layout-CqchXVQo.js → shell-layout-D3VSg8vB.js} +1 -1
- package/dist/client/assets/{sidebar-C-golrQD.js → sidebar-BvkezN_j.js} +1 -1
- package/dist/client/assets/{skeleton-CAB9m9ue.js → skeleton-Bmt-uB4P.js} +1 -1
- package/dist/client/assets/{spinner-B0WV_YKG.js → spinner-OzGplugR.js} +1 -1
- package/dist/client/assets/{sso-D5LD95iT.js → sso-BPnfGEKo.js} +1 -1
- package/dist/client/assets/{store-Df8gAj5c.js → store-DJ4JRbY1.js} +1 -1
- package/dist/client/assets/store-registry-CTTjfbXo.js +2 -0
- package/dist/client/assets/{studio-tools-p6uEawPA.js → studio-tools-CZnfyNyQ.js} +1 -1
- package/dist/client/assets/{switch-pL4enKbt.js → switch-T61KBYXa.js} +1 -1
- package/dist/client/assets/{synced-repos-C2968cwi.js → synced-repos-Be1Yx3BW.js} +1 -1
- package/dist/client/assets/{tab-id-CYSw5EZL.js → tab-id-qek0IoVg.js} +1 -1
- package/dist/client/assets/{table-BGSVDVxS.js → table-Ba6vKQhQ.js} +1 -1
- package/dist/client/assets/{tabs-Bvt_vQ0i.js → tabs-DTzgfvnO.js} +1 -1
- package/dist/client/assets/{textarea-7jbVHOJS.js → textarea-DN9foayW.js} +1 -1
- package/dist/client/assets/{toggle-group-DL8xUUhL.js → toggle-group-DWCWiMLs.js} +1 -1
- package/dist/client/assets/{toolbar-DekdT7JF.js → toolbar-BmjJhLgT.js} +1 -1
- package/dist/client/assets/{tooltip-CEPa_36I.js → tooltip-DssTtUXs.js} +1 -1
- package/dist/client/assets/{track-DJaMCWBC.js → track-xlReHU7x.js} +1 -1
- package/dist/client/assets/{types-ruUduJPq.js → types-ChDBWaRt.js} +1 -1
- package/dist/client/assets/{use-ai-providers-xVbemEUH.js → use-ai-providers-C_nI0Iys.js} +1 -1
- package/dist/client/assets/{use-api-keys-D9ptdVhU.js → use-api-keys-C2-JUxh5.js} +1 -1
- package/dist/client/assets/{use-automations-DFwfNqds.js → use-automations-BivUqOFX.js} +1 -1
- package/dist/client/assets/{use-autosave-CKPpE0LG.js → use-autosave-BxLxVuip.js} +1 -1
- package/dist/client/assets/{use-capability-CqeXASJr.js → use-capability-Dp3312VR.js} +1 -1
- package/dist/client/assets/{use-clock-tick-Csi-XroX.js → use-clock-tick-BPTbGmZN.js} +1 -1
- package/dist/client/assets/{use-connection-B6eFwnYY.js → use-connection-CN2syLSe.js} +1 -1
- package/dist/client/assets/{use-copy-Dil_9pn_.js → use-copy-BaxqvaOl.js} +1 -1
- package/dist/client/assets/{use-create-virtual-mcp-DJte0r4c.js → use-create-virtual-mcp-rO9H3E4R.js} +1 -1
- package/dist/client/assets/{use-debounced-autosave-CNKctZZk.js → use-debounced-autosave-42Ql6cgk.js} +1 -1
- package/dist/client/assets/{use-debounced-value-DY4C-7Fj.js → use-debounced-value-8jnp0XI6.js} +1 -1
- package/dist/client/assets/{use-deco-credits-wIrhg6Q7.js → use-deco-credits-1SxzWtRE.js} +1 -1
- package/dist/client/assets/{use-decopilot-events-UyXd8TYN.js → use-decopilot-events-DoMqG6X5.js} +1 -1
- package/dist/client/assets/{use-delete-connection-T7W5MBIl.js → use-delete-connection-BWHejXHq.js} +1 -1
- package/dist/client/assets/{use-deployment-admin-2zQn4Bqk.js → use-deployment-admin-17QXBd9Z.js} +1 -1
- package/dist/client/assets/{use-file-configs-jnx7-dH3.js → use-file-configs-BFphHB0i.js} +1 -1
- package/dist/client/assets/{use-infinite-scroll-BC840QUR.js → use-infinite-scroll-DlbSXA6c.js} +1 -1
- package/dist/client/assets/{use-infra-billing-DEzj2-Iy.js → use-infra-billing-CyDTnmkS.js} +1 -1
- package/dist/client/assets/{use-join-requests-B2o9J929.js → use-join-requests-BYuyxAzq.js} +1 -1
- package/dist/client/assets/{use-mcp-client-B-AZmNGg.js → use-mcp-client-HsCJslKN.js} +1 -1
- package/dist/client/assets/{use-mcp-tools-ikuB65SB.js → use-mcp-tools-CU8G9CY5.js} +1 -1
- package/dist/client/assets/{use-members-DjCBQjzS.js → use-members-B6tg1bWY.js} +1 -1
- package/dist/client/assets/{use-mobile-CRnOh4ez.js → use-mobile-BIrjwY6i.js} +1 -1
- package/dist/client/assets/{use-navigate-to-agent-CBlHam0q.js → use-navigate-to-agent-B9Vf2LAh.js} +1 -1
- package/dist/client/assets/{use-open-billing-url-D9rQC4Lf.js → use-open-billing-url-FHmBeW6g.js} +1 -1
- package/dist/client/assets/{use-org-auth-client-D_KM9BY2.js → use-org-auth-client-Bnrv0M0I.js} +1 -1
- package/dist/client/assets/{use-org-sso-Dmk7hRps.js → use-org-sso-CGfZevof.js} +1 -1
- package/dist/client/assets/{use-organization-roles-DxAWEDJu.js → use-organization-roles-CSEGfry6.js} +1 -1
- package/dist/client/assets/{use-organization-settings-UdFZwUZM.js → use-organization-settings-TPqU9eYL.js} +1 -1
- package/dist/client/assets/{use-registry-connections-DkjBj3jy.js → use-registry-connections-CwHw-7f4.js} +1 -1
- package/dist/client/assets/{use-secrets-7OJ2G20N.js → use-secrets-DXOjV2Ed.js} +1 -1
- package/dist/client/assets/{use-section-preview-base-DVpD2oko.js → use-section-preview-base-C_BVFAon.js} +1 -1
- package/dist/client/assets/{use-status-sounds-CG22VRth.js → use-status-sounds-CKkTmJzu.js} +1 -1
- package/dist/client/assets/{use-tags-l7VhCueG.js → use-tags-BTEZ2T0S.js} +1 -1
- package/dist/client/assets/{use-view-mode-vTvOYNAM.js → use-view-mode-DEd_zuNC.js} +1 -1
- package/dist/client/assets/{use-virtual-mcp-DlVUhl_E.js → use-virtual-mcp-_850mnZ5.js} +1 -1
- package/dist/client/assets/useInfiniteQuery-B0_Rn7Go.js +1 -0
- package/dist/client/assets/{useRouterState-BmsPFxF7.js → useRouterState-Bj2vQYEt.js} +1 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-DjlQZlSn.js +1 -0
- package/dist/client/assets/{users-CbyVz0aM.js → users-CTou5GA1.js} +1 -1
- package/dist/client/assets/{variant-calendar-DWS4YYh1.js → variant-calendar-ClEdATi0.js} +1 -1
- package/dist/client/assets/{view-mode-toggle-B6DGC2bJ.js → view-mode-toggle-COYalE_Y.js} +1 -1
- package/dist/client/index.html +1 -1
- package/dist/server/cli.js +403 -403
- package/dist/server/server.js +1 -1
- package/package.json +1 -1
- package/dist/client/assets/record-editor-D9_YIyYs.js +0 -1
- package/dist/client/assets/registry-0gY7ctle.js +0 -2
- package/dist/client/assets/store-registry-DkBxIEZz.js +0 -2
- package/dist/client/assets/useInfiniteQuery-CdvxrpQM.js +0 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-Bk7gbtRd.js +0 -1
package/dist/server/server.js
CHANGED
|
@@ -2752,7 +2752,7 @@ Do NOT require review (requiresReview = false) when the changes are low-risk, su
|
|
|
2752
2752
|
When unsure between the two, lean toward NOT requiring review for small frontend-only diffs, and toward requiring it for anything backend or large.
|
|
2753
2753
|
|
|
2754
2754
|
Respond with the structured verdict and a short reason.`,rb$;var sb$=w(()=>{C4();ZB();U51();R76=O51.object({requiresReview:O51.boolean().describe("true if the changes should go through pull-request review"),reason:O51.string().describe("One short sentence explaining the decision (max ~120 chars)")});rb$={requiresReview:!1,reason:""}});function eb$($){let Z=$?.trim();if(!Z)return null;try{let X=new URL(Z);if(X.protocol!=="http:"&&X.protocol!=="https:")return null;return X.href}catch{return null}}function lz0($){return eb$($?.previewServerUrl)??eb$($?.productionUrl)}function $x$(){return process.env.GITHUB_API_BASE_URL??"https://api.github.com"}function Zx$($,Z){return $==="GET"&&!Z.includes("/git/blobs/")&&!Z.includes("/git/trees/")&&!Z.includes("/tarball/")}function Xx$($){let Z=zh.get($);if(!Z)return;zh.delete($),B51-=Z.bytes}function V76($,Z,X){let Q;try{Q=JSON.stringify(X)?.length??0}catch{return}if(Xx$($),Q>S76)return;zh.set($,{etag:Z,body:X,bytes:Q}),B51+=Q;while(B51>k76||zh.size>M76){let Y=zh.keys().next().value;if(Y===void 0)break;Xx$(Y)}}function Qx$($){let{owner:Z,repo:X,accessToken:Q}=$,Y=`/repos/${Z}/${X}`,G=null;async function J(W,K,H,F){let N=`${$x$()}${K}`,U=Zx$(W,K)?zh.get(N):void 0,O=await fetch(N,{method:W,headers:{Accept:"application/vnd.github+json","User-Agent":"studio-decofile",Authorization:`token ${Q}`,...U?{"If-None-Match":U.etag}:{},...H!==void 0?{"content-type":"application/json"}:{}},body:H!==void 0?JSON.stringify(H):void 0,signal:AbortSignal.timeout(15000)});if(U&&O.status===304)return{status:200,json:U.body};if(!O.ok&&!F?.allow?.includes(O.status)){let D=await O.text().catch(()=>""),L=D;try{L=JSON.parse(D).message??D}catch{}throw new C6(O.status,W,K,L)}let B=O.status===204?void 0:await O.json();if(O.status===200&&Zx$(W,K)){let D=O.headers.get("etag");if(D)V76(N,D,B)}return{status:O.status,json:B}}return{owner:Z,repo:X,async getDefaultBranch(){if(G)return G;let{json:W}=await J("GET",Y);return G=W.default_branch,G},async getHeadSha(W){let{json:K}=await J("GET",`${Y}/git/ref/heads/${J_(W)}`);return K.object.sha},async getTarballStream(W){let K=`${Y}/tarball/${J_(W)}`,H=await fetch(`${$x$()}${K}`,{headers:{"User-Agent":"studio-decofile",Authorization:`token ${Q}`},signal:AbortSignal.timeout(60000)});if(!H.ok){let F=await H.text().catch(()=>"");throw new C6(H.status,"GET",K,F.slice(0,300))}if(!H.body)throw new C6(502,"GET",K,"tarball had no body");return H.body},async getCommitTreeSha(W){let{json:K}=await J("GET",`${Y}/git/commits/${W}`);return K.tree.sha},async getTreeRecursive(W){let{json:K}=await J("GET",`${Y}/git/trees/${W}?recursive=1`);if(K.truncated)throw new C6(502,"GET",`${Y}/git/trees/${W}`,"tree listing truncated by GitHub; repo too large for recursive read");return K.tree},async getBlobText(W){let{json:K}=await J("GET",`${Y}/git/blobs/${W}`);if(K.encoding!=="base64")throw new C6(502,"GET",`${Y}/git/blobs/${W}`,`unexpected blob encoding ${K.encoding}`);return Buffer.from(K.content,"base64").toString("utf-8")},async createBlob(W){let{json:K}=await J("POST",`${Y}/git/blobs`,{content:W,encoding:"utf-8"});return K.sha},async createTree(W,K){let{json:H}=await J("POST",`${Y}/git/trees`,{base_tree:W,tree:K});return H.sha},async createCommit({message:W,treeSha:K,parentShas:H}){let{json:F}=await J("POST",`${Y}/git/commits`,{message:W,tree:K,parents:H});return F.sha},async updateRef(W,K){await J("PATCH",`${Y}/git/refs/heads/${J_(W)}`,{sha:K,force:!1})},async createRef(W,K){await J("POST",`${Y}/git/refs`,{ref:`refs/heads/${W}`,sha:K})},async mergeBranch(W,K,H){let{status:F,json:N}=await J("POST",`${Y}/merges`,{base:W,head:K,commit_message:H},{allow:[204]});return F===204?null:N?.sha??null},async createPullRequest({base:W,head:K,title:H}){let{json:F}=await J("POST",`${Y}/pulls`,{base:W,head:K,title:H});return{number:F.number,html_url:F.html_url}},async findOpenPullRequest(W,K){let{json:H}=await J("GET",`${Y}/pulls?state=open&base=${encodeURIComponent(W)}&head=${encodeURIComponent(`${Z}:${K}`)}`),F=H[0];return F?{number:F.number,html_url:F.html_url}:null},async compare(W,K){let{json:H}=await J("GET",`${Y}/compare/${J_(W)}...${J_(K)}`);return{aheadBy:H.ahead_by,behindBy:H.behind_by}},async compareDetailed(W,K){let{json:H}=await J("GET",`${Y}/compare/${J_(W)}...${J_(K)}`);return{aheadBy:H.ahead_by,behindBy:H.behind_by,mergeBaseSha:H.merge_base_commit.sha,files:(H.files??[]).map((F)=>({filename:F.filename,status:F.status,sha:F.sha,...F.previous_filename?{previousFilename:F.previous_filename}:{}}))}}}}function J_($){return $.split("/").map(encodeURIComponent).join("/")}var M76=512,k76=8388608,S76=262144,zh,B51=0,C6;var W_=w(()=>{zh=new Map;C6=class C6 extends Error{status;method;path;constructor($,Z,X,Q){super(`GitHub ${Z} ${X} failed (${$}): ${Q}`);this.status=$;this.method=Z;this.path=X;this.name="GitHubApiError"}}});async function dz0($,Z,X){if(!X.connectionId)throw new C6(401,"AUTH","connection","Project's GitHub connection is missing \u2014 reconnect GitHub");let Q=await $.storage.connections.findById(X.connectionId,Z);if(!Q)throw new C6(401,"AUTH","connection","Project's GitHub connection is missing \u2014 reconnect GitHub");let Y=await C76($,Q);if(!Y)throw new C6(401,"AUTH","connection",CZ);return Qx$({owner:X.owner,repo:X.name,accessToken:Y})}async function C76($,Z){if(A5(Z)?.sourceConnectionId)return Px($,Z);return(await fY({connectionId:Z.id,connectionUrl:Z.connection_url,tokenStorage:new q6($.db,$.vault)})).accessToken}var w51=w(()=>{jQ();A90();XK();MY();W_()});function _76($){if(!$||$.includes("\\")||$.includes("..")||$.includes("\x00"))return!0;try{let Z=decodeURIComponent($);if(Z.includes("\\")||Z.includes("..")||Z.includes("\x00"))return!0;if(Z!==$&&Z.includes("/")){let X=($.match(/\//g)??[]).length;if((Z.match(/\//g)??[]).length>X)return!0}return!1}catch{return!0}}function mz0($){if(_76($))throw Error(`Invalid block key: ${$||"(empty)"}`)}function Rr($){let Z=$;for(;;){let X;try{X=decodeURIComponent(Z)}catch{return Z}if(X===Z)return Z;Z=X}}function D51($){return mz0($),encodeURIComponent($)}function Ir($){let Z=[...$].sort((Y,G)=>{let J=`${Y.stem}.json`,W=`${G.stem}.json`;return J<W?-1:J>W?1:0}),X="{",Q=!0;for(let Y of Z){let G=Y.content.trim();if(G.length===0)continue;if(!Q)X+=",";Q=!1,X+=`${JSON.stringify(Rr(Y.stem))}:${G}`}return`${X}}`}var Yx$=()=>{};var iz0=w(()=>{Yx$()});function v76($){return $.startsWith("merged/")?"merged":"blobs"}function L51($,Z){let X=new Map;for(let G of $){let J=X.get(G.path);if(!J||G.mtimeMs>=J.mtimeMs)X.set(G.path,{bytes:G.bytes,mtimeMs:G.mtimeMs})}let Q=[...X.entries()].sort((G,J)=>G[1].mtimeMs-J[1].mtimeMs),Y={config:Z,entries:new Map,totalBytes:0,areaBytes:{blobs:0,merged:0}};for(let[G,{bytes:J}]of Q){let W=v76(G);Y.entries.set(G,{bytes:J,area:W}),Y.totalBytes+=J,Y.areaBytes[W]+=J}return Y}function Gx$($,Z){let X=$.entries.get(Z);if(!X)return;$.entries.delete(Z),$.entries.set(Z,X)}function Ph($,Z){let X=$.entries.get(Z);if(!X)return;$.entries.delete(Z),$.totalBytes-=X.bytes,$.areaBytes[X.area]-=X.bytes}function Jx$($,Z){let{path:X,bytes:Q,area:Y}=Z,{config:G}=$;if(!Number.isFinite(Q)||Q<0||Q>G.maxEntryBytes[Y]||Q>G.maxTotalBytes||Y==="merged"&&Q>G.maxMergedBytes)return{admitted:!1,evict:[]};let W=$.entries.get(X),K=$.totalBytes-(W?.bytes??0),H=$.areaBytes.merged-(W?.area==="merged"?W.bytes:0),F=[],N=new Set;if(Y==="merged")for(let[U,O]of $.entries){if(H+Q<=G.maxMergedBytes)break;if(U===X||O.area!=="merged")continue;F.push(U),N.add(U),H-=O.bytes,K-=O.bytes}for(let[U,O]of $.entries){if(K+Q<=G.maxTotalBytes)break;if(U===X||N.has(U))continue;F.push(U),N.add(U),K-=O.bytes}for(let U of F)Ph($,U);return Ph($,X),$.entries.set(X,{bytes:Q,area:Y}),$.totalBytes+=Q,$.areaBytes[Y]+=Q,{admitted:!0,evict:F}}function qr($){if($==="")throw TypeError("cache path segment must not be empty");let Z=$.toLowerCase(),X="";for(let Q of new TextEncoder().encode(Z)){let Y=String.fromCharCode(Q);X+=/[a-z0-9._-]/.test(Y)?Y:`%${Q.toString(16).padStart(2,"0")}`}if(X==="."||X==="..")X=X.replaceAll(".","%2e");return X}function E51($){return/^[0-9a-f]{40}$/.test($)}import{randomUUID as Ux$}from"crypto";import{mkdir as Mr,readdir as f76,readFile as b76,rename as x76,rm as Ox$,stat as Bx$,statfs as y76,unlink as g76,writeFile as h76}from"fs/promises";import{tmpdir as u76}from"os";import{dirname as c76,join as T7}from"path";function Ah($,Z){let X=Bun.env[$];if(X===void 0||X==="")return Z;let Q=Number(X);return Number.isFinite(Q)&&Q>=0?Math.floor(Q):Z}function m76(){if(nz0)return nz0;let $=Bun.env.FAST_PREVIEW_CACHE_DIR,Z=$===void 0?T7(u76(),"studio-fast-preview-cache"):$;return nz0={enabled:Z!=="",root:Z,index:{maxTotalBytes:Ah("FAST_PREVIEW_CACHE_MAX_BYTES",2*Wx$),maxMergedBytes:Ah("FAST_PREVIEW_CACHE_MERGED_MAX_BYTES",512*pz0),maxEntryBytes:{blobs:Ah("FAST_PREVIEW_CACHE_MAX_BLOB_BYTES",pz0),merged:Ah("FAST_PREVIEW_CACHE_MAX_MERGED_BYTES",32*pz0)}},freeFloorBytes:Ah("FAST_PREVIEW_CACHE_FREE_FLOOR_BYTES",Wx$),sweepIntervalMs:Ah("FAST_PREVIEW_CACHE_SWEEP_INTERVAL_MS",600000)},nz0}function i76(){return{hits:{blobs:0,merged:0},misses:{blobs:0,merged:0},evictions:0,errors:0,floorSkips:0,invalidKeySkips:0,admissionRefusals:0}}function n76(){if(Ww)return;Ww={hits:S$.createCounter("fast_preview_cache_hits",{description:"Decofile disk cache hits by area",unit:"{reads}"}),misses:S$.createCounter("fast_preview_cache_misses",{description:"Decofile disk cache misses by area",unit:"{reads}"}),evictions:S$.createCounter("fast_preview_cache_evictions",{description:"Decofile disk cache entries evicted",unit:"{entries}"}),errors:S$.createCounter("fast_preview_cache_errors",{description:"Decofile disk cache swallowed errors by operation",unit:"{errors}"}),floorSkips:S$.createCounter("fast_preview_cache_floor_skips",{description:"Decofile disk cache writes skipped by the free-space floor",unit:"{writes}"})},S$.createObservableGauge("fast_preview_cache_bytes",{description:"Decofile disk cache bytes by area",unit:"By"}).addCallback(($)=>{if(!Th)return;$.observe(Th.index.areaBytes.blobs,{area:"blobs"}),$.observe(Th.index.areaBytes.merged,{area:"merged"})}),S$.createObservableGauge("fast_preview_cache_entries",{description:"Decofile disk cache entry count by area",unit:"{entries}"}).addCallback(($)=>{if(!Th)return;let Z={blobs:0,merged:0};for(let X of Th.index.entries.values())Z[X.area]+=1;$.observe(Z.blobs,{area:"blobs"}),$.observe(Z.merged,{area:"merged"})})}function p76($){K_.hits[$]+=1,Ww?.hits.add(1,{area:$})}function Kx$($){K_.misses[$]+=1,Ww?.misses.add(1,{area:$})}function j51(){K_.evictions+=1,Ww?.evictions.add(1)}function ON($){K_.errors+=1,Ww?.errors.add(1,{op:$})}function t76($){K_.invalidKeySkips+=1,Ww?.errors.add(1,{op:`${$}_invalid_key`})}function z51(){return Hx$??=r76(),Hx$}async function r76(){let $=m76();if(!$.enabled)return null;n76();try{await Mr(T7($.root,"blobs"),{recursive:!0}),await Mr(T7($.root,"merged"),{recursive:!0}),await Mr(T7($.root,"tmp"),{recursive:!0})}catch{return ON("init"),null}let Z=[];try{Z=await wx$($.root)}catch{ON("scan"),Z=[]}let X={root:$.root,index:L51(Z,$.index),cfg:$};return Th=X,e76(X),X}async function tz0($){try{return await f76($)}catch{return[]}}async function wx$($){let Z=[];for(let X of["blobs","merged"]){let Q=T7($,X);for(let Y of await tz0(Q)){let G=T7(Q,Y);for(let J of await tz0(G)){let W=T7(G,J);for(let K of await tz0(W))try{let H=await Bx$(T7(W,K));if(!H.isFile())continue;Z.push({path:`${X}/${Y}/${J}/${K}`,bytes:H.size,mtimeMs:H.mtimeMs})}catch{}}}}return Z}function Dx$($,Z,X){if(!E51(X))return null;try{return`blobs/${qr($)}/${qr(Z)}/${X}`}catch{return null}}function Lx$($,Z,X){if(!E51(X))return null;try{return`merged/${qr($)}/${qr(Z)}/${X}.json`}catch{return null}}async function Ex$($,Z){try{let X=await z51();if(!X)return null;if(Z===null)return Kx$($),null;try{let Q=await b76(T7(X.root,Z),"utf8");return Gx$(X.index,Z),p76($),Q}catch{return Kx$($),null}}catch{return ON(`get_${$}`),null}}function jx$($,Z,X){return Ex$("blobs",Dx$($,Z,X))}function zx$($,Z,X){return Ex$("merged",Lx$($,Z,X))}async function a76($){if($.cfg.freeFloorBytes<=0)return!0;try{let Z=await y76($.root);return Z.bavail*Z.bsize>=$.cfg.freeFloorBytes}catch{return!0}}async function oz0($){try{await g76($)}catch{}}async function s76($){try{let Z=$.cfg.index.maxTotalBytes/2;while($.index.totalBytes>Z){let X=$.index.entries.keys().next();if(X.done)break;Ph($.index,X.value),await oz0(T7($.root,X.value)),j51()}}catch{ON("emergency_evict")}}async function Px$($,Z,X,Q){try{let Y=await z51();if(!Y)return;if(X===null){t76(Z);return}if(!await a76(Y)){K_.floorSkips+=1,Ww?.floorSkips.add(1);return}let G=Buffer.byteLength(Q,"utf8"),J=Jx$(Y.index,{path:X,bytes:G,area:$});if(!J.admitted){K_.admissionRefusals+=1;return}for(let K of J.evict)await oz0(T7(Y.root,K)),j51();let W=T7(Y.root,"tmp",`stage-${Ux$()}`);try{await h76(W,Q,"utf8");let K=T7(Y.root,X);await Mr(c76(K),{recursive:!0}),await x76(W,K)}catch(K){if(Ph(Y.index,X),await oz0(W),ON(Z),K?.code==="ENOSPC")await s76(Y)}}catch{ON(Z)}}function rz0($,Z,X,Q){return Px$("blobs","put_blob",Dx$($,Z,X),Q)}function Ax$($,Z,X,Q){return Px$("merged","put_merged",Lx$($,Z,X),Q)}async function Tx$(){try{let $=await z51();if(!$)return null;let Z=T7($.root,"tmp",Ux$());return await Mr(Z,{recursive:!0}),Z}catch{return ON("make_scratch"),null}}async function Rx$($){try{await Ox$($,{recursive:!0,force:!0})}catch{ON("remove_scratch")}}function e76($){let Z=$.cfg.sweepIntervalMs;if(Z<=0)return;Fx$=new AbortController,I$(Math.random()*Z,{signal:Fx$.signal}).then(()=>{Nx$($);let X=setInterval(()=>void Nx$($),Z);X.unref?.(),o76=X}).catch(()=>{})}async function Nx$($){try{let Z=L51(await wx$($.root),$.cfg.index),X=$.cfg.index;for(let[G,J]of Z.entries){let W=Z.totalBytes>X.maxTotalBytes,K=Z.areaBytes.merged>X.maxMergedBytes;if(!W&&!K)break;if(!W&&K&&J.area!=="merged")continue;Ph(Z,G),await oz0(T7($.root,G)),j51()}$.index=Z;let Q=T7($.root,"tmp"),Y=Date.now();for(let G of await tz0(Q)){let J=T7(Q,G);try{let W=await Bx$(J);if(Y-W.mtimeMs>d76)await Ox$(J,{recursive:!0,force:!0})}catch{}}}catch{ON("sweep")}}var l76=1024,pz0,Wx$,d76=3600000,nz0=null,Ww=null,K_,Hx$=null,Th=null,o76=null,Fx$=null;var Ix$=w(()=>{t4();f6();pz0=1024*l76,Wx$=1024*pz0;K_=i76()});function qx$(){let $=new Map;return{run(Z,X){let Q=$.get(Z);if(Q)return Q;let Y=Promise.resolve().then(X).finally(()=>{$.delete(Z)});return $.set(Z,Y),Y}}}import{readdir as $X6,stat as ZX6}from"fs/promises";import{join as Mx$}from"path";function XX6($,Z,X){let Q=["-xz","--strip-components=1","-C",Z];return $==="gnu"?[...Q,"--wildcards",X]:[...Q,X]}function QX6(){return kx$??=(async()=>{try{let $=Bun.spawn(["tar","--version"],{stdin:"ignore",stdout:"pipe",stderr:"ignore"}),Z=await new Response($.stdout).text();return await $.exited,Z.includes("GNU")?"gnu":"bsd"}catch{return"bsd"}})(),kx$}async function Sx$($,Z,X){let Q=X.replace(/^\.\//,"").replace(/^\/+/,"").replace(/\/+$/,"");if(Q===""||Q.split("/").includes(".."))throw new kr(`invalid blocks path prefix: ${X}`);let Y=await QX6(),G=`*/${Q}/*.json`,J=()=>Bun.spawn(["tar",...XX6(Y,Z,G)],{stdin:$,stdout:"ignore",stderr:"pipe"}),W;try{W=J()}catch(N){throw new kr("failed to spawn tar",{cause:N})}let K=new Response(W.stderr).text().catch(()=>""),H=await W.exited;if(H!==0){let N=(await K).trim().slice(0,500);throw new kr(`tar exited with code ${H}${N?`: ${N}`:""}`)}let F=await YX6(Z,Q);if(F.length===0)throw new kr(`tar extracted no ${G} members into ${Z}`);return F}async function YX6($,Z){let X=Mx$($,...Z.split("/")),Q;try{Q=await $X6(X)}catch{return[]}let Y=[];for(let G of Q){if(!G.endsWith(".json"))continue;let J=Mx$(X,G);try{if(!(await ZX6(J)).isFile())continue}catch{continue}Y.push({path:`${Z}/${G}`,diskPath:J})}return Y.sort((G,J)=>G.path.localeCompare(J.path))}var kr,kx$=null;var Vx$=w(()=>{kr=class kr extends Error{constructor($,Z){super($,Z);this.name="TarExtractError"}}});import{createHash as GX6}from"crypto";import{readFile as JX6}from"fs/promises";async function Sr($,Z){try{return await $.getHeadSha(Z)}catch(Q){if(!(Q instanceof C6)||Q.status!==404)throw Q}let X=await $.getHeadSha(await $.getDefaultBranch());try{return await $.createRef(Z,X),X}catch(Q){if(Q instanceof C6&&Q.status===422)return $.getHeadSha(Z);throw Q}}function KX6(){let $=Bun.env.FAST_PREVIEW_COLD_TARBALL_MAX_BYTES;if($===void 0||$==="")return _x$;let Z=Number($);return Number.isFinite(Z)&&Z>=0?Math.floor(Z):_x$}function HX6($){vx$??=S$.createCounter("decofile_cold_reads",{description:"Decofile cold snapshot reads by resolution path",unit:"{reads}"}),vx$.add(1,{path:$})}async function az0($,Z,X){let Q=Array($.length),Y=0,G=Array.from({length:Math.min(Z,$.length)},async()=>{for(;;){let J=Y++;if(J>=$.length)return;Q[J]=await X($[J])}});return await Promise.all(G),Q}function sz0($){return $?`${$}/.deco/blocks`:".deco/blocks"}function P51($,Z){let X=`${sz0(Z)}/`,Q=[];for(let Y of $){if(Y.type!=="blob"||!Y.path.startsWith(X))continue;let G=Y.path.slice(X.length);if(G.includes("/"))continue;if(!G.toLowerCase().endsWith(".json"))continue;Q.push({stem:G.slice(0,-5),sha:Y.sha,path:Y.path,size:Y.size})}return Q}function A51($,Z){return $.filter((X)=>Rr(X.stem)===Z).map((X)=>X.path).sort()}function fx$($,Z,X,Q){return rz0($,Z,X,Q)}function FX6($,Z){if(!Z)return $;return GX6("sha1").update(`${$}:${Z}`).digest("hex")}async function bx$($,Z,X,Q){let Y=Q?.createBranchIfMissing?await Sr($,Z):await $.getHeadSha(Z);return NX6.run(`${$.owner}/${$.repo}@${Y}:${X??""}`,()=>UX6($,Y,X))}async function UX6($,Z,X){let{owner:Q,repo:Y}=$,G=FX6(Z,X),J=await zx$(Q,Y,G);if(J!==null)return{sha:Z,decofile:J};let W=await $.getCommitTreeSha(Z),K=await $.getTreeRecursive(W),H=P51(K,X),F=new Map;if(await az0(H,Cx$,async(B)=>{let D=await jx$(Q,Y,B.sha);if(D!==null)F.set(B.path,D)}),H.length-F.size>WX6){let B=await OX6($,Z,X,H);if(HX6(B!==null?"tarball":"blobs"),B!==null)for(let[D,L]of B)F.set(D,L)}let U=await az0(H,Cx$,async(B)=>{let D=F.get(B.path);if(D!==void 0)return{stem:B.stem,content:D};let L=await $.getBlobText(B.sha);return await rz0(Q,Y,B.sha,L),{stem:B.stem,content:L}}),O=Ir(U);return await Ax$(Q,Y,G,O),{sha:Z,decofile:O}}async function OX6($,Z,X,Q){let Y=`${$.owner}/${$.repo}`,G=KX6(),J=0;for(let K of Q){if(K.size===void 0)return console.warn("decofile cold read: tarball skipped (tree entry missing size; cannot pre-validate)",{repo:Y,sha:Z,path:K.path}),null;J+=K.size}if(J>G)return console.warn("decofile cold read: tarball skipped (blocks over FAST_PREVIEW_COLD_TARBALL_MAX_BYTES)",{repo:Y,sha:Z,aggregateBytes:J,maxBytes:G}),null;let W=await Tx$();if(W===null)return null;try{let K=await $.getTarballStream(Z),H=await Sx$(K,W,sz0(X)),F=new Map(Q.map((U)=>[U.path,U.sha])),N=new Map;for(let U of H){let O=F.get(U.path);if(O===void 0)continue;let B=await JX6(U.diskPath,"utf8");await rz0($.owner,$.repo,O,B),N.set(U.path,B)}return N}catch(K){return console.warn("decofile cold read: tarball path failed; falling back to blob fetches",{repo:Y,sha:Z,error:K instanceof Error?K.message:String(K)}),null}finally{await Rx$(W)}}var Cx$=12,WX6=50,_x$=134217728,vx$=null,NX6;var ez0=w(()=>{iz0();f6();Ix$();W_();Vx$();NX6=qx$()});async function $P0($,Z){let X=await $.getDefaultBranch(),Q=await Sr($,Z),Y=X===Z?{aheadBy:0,behindBy:0}:await $.compare(X,Z);return{not_added:[],conflicted:[],created:[],deleted:[],modified:[],renamed:[],files:[],staged:[],ahead:0,behind:0,current:Z,tracking:`origin/${Z}`,detached:!1,base:X,aheadOfBase:Y.aheadBy,behindBase:Y.behindBy,headSha:Q,unpushed:0}}async function ZP0($,Z,X){let Q=X??await $.getDefaultBranch(),Y=await $.compareDetailed(Q,Z),G=Y.files.slice(0,BX6),J=await $.getCommitTreeSha(Y.mergeBaseSha),W=await $.getTreeRecursive(J),K=new Map(W.filter((F)=>F.type==="blob").map((F)=>[F.path,F.sha])),H=await az0(G,wX6,async(F)=>{let N=F.previousFilename??F.filename,U=F.status==="added"?void 0:K.get(N),O=U?await $.getBlobText(U):null,B=F.status==="removed"?null:await $.getBlobText(F.sha);return[F.filename,{from:O,to:B}]});return{diffs:Object.fromEntries(H),mergeBaseSha:Y.mergeBaseSha}}async function xx$($,Z,X,Q="fail"){try{await $.mergeBranch(Z,X,`chore(decofile): merge ${X} into ${Z}`);return}catch(Y){if(!(Y instanceof C6&&Y.status===409))throw Y;if(Q!=="branch-wins")throw new C6(409,"POST","merges",`Merge conflict updating ${Z} from ${X} \u2014 resolve on GitHub`)}await EX6($,Z,X)}async function EX6($,Z,X){for(let Q=1;;Q++){let Y=await $.getHeadSha(Z),G=await $.getHeadSha(X),{files:J}=await $.compareDetailed(X,Z);if(J.length>=DX6)throw new C6(409,"POST","merges",`Too many changed files on ${Z} to auto-merge (${J.length}); resolve on GitHub`);let W=await $.getTreeRecursive(await $.getCommitTreeSha(Y)),K=new Map(W.filter((U)=>U.type==="blob").map((U)=>[U.path,U])),H=[];for(let U of J){let O=K.get(U.filename);if(U.status==="removed"||!O)H.push({path:U.filename,mode:"100644",type:"blob",sha:null});else H.push({path:U.filename,mode:"100644",type:"blob",sha:O.sha});if(U.previousFilename&&U.previousFilename!==U.filename)H.push({path:U.previousFilename,mode:"100644",type:"blob",sha:null})}let F=await $.createTree(await $.getCommitTreeSha(G),H),N=await $.createCommit({message:`chore(decofile): merge ${X} into ${Z} (branch content wins)`,treeSha:F,parentShas:[Y,G]});try{await $.updateRef(Z,N);return}catch(U){if(U instanceof C6&&U.status===422&&Q<LX6)continue;throw U}}}var BX6=200,wX6=12,DX6=300,LX6=3;var yx$=w(()=>{W_();ez0()});function zX6($){if(!$||$.includes(".."))return!1;return jX6.test($)}function gx$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!zX6(Z))return null;let{__resolveType:X,...Q}=$;return{resolveType:Z,payload:Q}}function hx$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var jX6;var ux$=w(()=>{jX6=/^[\w./@-]+$/});function T51($){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 Vr($,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 cx$($,Z,X,Q){if(!Q.connectionId)throw new H_("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let Y=$.organization?.id;if(!Y)throw new H_(CZ);await bO({ctx:$,connectionId:Q.connectionId,organizationId:Y,forceRefresh:!0,onLegacyMintError:(F)=>{let N=F instanceof Error?F.message:CZ;throw new H_(N)}});let{cloneUrl:G,gitUserName:J,gitUserEmail:W}=await xO(Q.connectionId,Q.owner,Q.name,$.db,$.vault).catch((F)=>{let{code:N,message:U}=Y8$(F instanceof Error?F.message:String(F));throw N?new H_(U):F}),K=jh($),H=await Z.proxyDaemonRequest(X,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{repository:{cloneUrl:G},identity:{userName:J,userEmail:W}},...K?{operator:K}:{}})});if(!H.ok){let F=await eO(H,PX6).catch(()=>H.statusText);throw Error(`Failed to refresh sandbox git credentials (${H.status}): ${F}`)}}var PX6=10485760,H_;var R51=w(()=>{XK();cz0();Nn();Zd0();Ax();H_=class H_ extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function TX6($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!AX6.test(Z))throw Error(`Invalid branch name: ${$}`)}function F_($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(IX6)])}function N_($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}async function Cr($){let{virtualMcpMetadata:Z,connectionIds:X}=$.get("vmClaim"),Q=$.var.studioContext,Y=Vr(Z,X);if(!Y)throw new C6(404,"AUTH","repo","Project has no GitHub repository");let G=t(Q);return dz0(Q,G.id,Y)}function I51($,Z){if(Z instanceof C6){let Q=Z.status===404?404:Z.status===409||Z.status===422?409:502;return $.json({error:Z.message},Q,A9)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},502,A9)}async function mx$($){try{let Z=await Cr($),X=await $P0(Z,$.get("vmClaim").branch);return $.json(X,200,A9)}catch(Z){return I51($,Z)}}function QP0($,Z){let Q=(XP0.get($)??Promise.resolve()).catch(()=>{}).then(Z),Y=Q.catch(()=>{});return XP0.set($,Y),Y.finally(()=>{if(XP0.get($)===Y)XP0.delete($)}),Q}async function hZ($,Z,X){if($.get("vmClaim").fastPreview)return $.json({error:"sandbox not found: Fast Preview projects are sandbox-less"},404,A9);let Q=N_($);if(Q instanceof Response)return Q;let{claimName:Y,userId:G,projectRef:J}=$.get("vmClaim"),W=X?.method??"POST",K=null,H=new Headers;if(X?.jsonBody!==void 0)K=X.jsonBody,H.set("content-type","application/json");else if(X?.forwardJsonBody)K=await $.req.text(),H.set("content-type","application/json");let F=X?.signal,N={method:W,headers:H,body:K,...F?{signal:F}:{}},U=async()=>{let O=await Q.proxyDaemonRequest(Y,Z,N);if(X?.map404to410&&O.status===404){try{await O.body?.cancel()}catch{}if(await Q.adoptLiveClaim?.({userId:G,projectRef:J},Y))O=await Q.proxyDaemonRequest(Y,Z,N);if(O.status===404){try{await O.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",...A9}})}}let B=await O.text(),D=X?.redactRepoDirUnlessDesktop&&Q.kind!=="user-desktop"?MX6(B):B,L=O.headers.get("content-type")??"application/json";return new Response(D,{status:O.status,headers:{"content-type":L,...A9}})};try{if(F){let O=U();return O.catch(()=>{}),await Promise.race([O,new Promise((D,L)=>{if(F.aborted)return L(F.reason);F.addEventListener("abort",()=>L(F.reason),{once:!0})})])}return await U()}catch(O){let B=O instanceof Error?O.message:String(O);return $.json({error:`Daemon unreachable: ${B}`},502)}}function MX6($){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 YP0($,Z,X,Q="GET",Y){let G=await $.proxyDaemonRequest(Z,X,{method:Q,headers:new Headers,body:null});if(G.status===404&&Y){try{await G.body?.cancel()}catch{}if(await $.adoptLiveClaim?.(Y,Z))G=await $.proxyDaemonRequest(Z,X,{method:Q,headers:new Headers,body:null})}if(G.status===404){try{await G.body?.cancel()}catch{}throw Error("SANDBOX_GONE")}let J=await G.text();if(!G.ok){let W=`Daemon error (${G.status})`;try{W=JSON.parse(J).error??W}catch{}throw Error(W)}return JSON.parse(J)}function kX6($){return ix$.includes($)}var AX6,lx$=524288,RX6=65536,IX6=1e4,dx$=2000,qX6,XP0,A9,ix$,nx$=()=>{let $=new U1;$.use("/:virtualMcpId/:branch/*",qX6),$.post("/:virtualMcpId/:branch/write",(X)=>hZ(X,"/_sandbox/write",{forwardJsonBody:!0,signal:F_(X)})),$.post("/:virtualMcpId/:branch/unlink",(X)=>hZ(X,"/_sandbox/unlink",{forwardJsonBody:!0,signal:F_(X)})),$.post("/:virtualMcpId/:branch/mkdir",(X)=>hZ(X,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:F_(X)})),$.post("/:virtualMcpId/:branch/rename",(X)=>hZ(X,"/_sandbox/rename",{forwardJsonBody:!0,signal:F_(X)})),$.post("/:virtualMcpId/:branch/read",(X)=>hZ(X,"/_sandbox/read",{forwardJsonBody:!0,signal:F_(X)})),$.post("/:virtualMcpId/:branch/glob",(X)=>hZ(X,"/_sandbox/glob",{forwardJsonBody:!0,signal:F_(X)})),$.post("/:virtualMcpId/:branch/grep",(X)=>hZ(X,"/_sandbox/grep",{forwardJsonBody:!0,signal:F_(X)})),$.post("/:virtualMcpId/:branch/exec/:script",async(X)=>{let Q=X.req.param("script");if(!Q)return X.json({error:"missing script name"},400);return hZ(X,`/_sandbox/exec/${encodeURIComponent(Q)}`)}),$.post("/:virtualMcpId/:branch/exec/:script/kill",async(X)=>{let Q=X.req.param("script");if(!Q)return X.json({error:"missing script name"},400);return hZ(X,`/_sandbox/exec/${encodeURIComponent(Q)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(X)=>hZ(X,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDirUnlessDesktop:!0})),$.put("/:virtualMcpId/:branch/config",(X)=>hZ(X,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(X)=>{let Q=X.req.param("step");if(!Q||!kX6(Q))return X.json({error:`step must be one of: ${ix$.join(", ")}`},400);if(Q==="start"){let Y=X.get("vmClaim");if(Y.runner){let G=t(X.var.studioContext),J=hx(Y.virtualMcpMetadata);try{await eU0({ctx:X.var.studioContext,runner:Y.runner,handle:Y.claimName,orgId:G.id,userId:Y.callerUserId,entries:J})}catch(W){let K=W instanceof Error?W.message:String(W);return X.json({error:`Failed to push env to daemon: ${K}`},502)}}}return hZ(X,`/_sandbox/setup/${Q}`,{signal:X.req.raw.signal,map404to410:!0})}),$.get("/:virtualMcpId/:branch/events",(X)=>{let Q=X.get("vmClaim");if(!Q.runner)return UN(X,async(Y)=>{await Y.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this studio instance."})})});return mb$(X,{ctx:X.var.studioContext,claimName:Q.claimName,runner:Q.runner,virtualMcpId:Q.virtualMcpId,branch:Q.branch,userId:Q.userId,projectRef:Q.projectRef,virtualMcpMetadata:Q.virtualMcpMetadata})}),$.get("/:virtualMcpId/:branch/git/status",(X)=>{if(X.get("vmClaim").fastPreview)return mx$(X);return Z(X)});let Z=(X)=>hZ(X,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([X.req.raw.signal,AbortSignal.timeout(dx$)])});return $.post("/:virtualMcpId/:branch/git/status",(X)=>{if(X.get("vmClaim").fastPreview)return mx$(X);return hZ(X,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([X.req.raw.signal,AbortSignal.timeout(dx$)])})}),$.post("/:virtualMcpId/:branch/git/diff",async(X)=>{let Q=X.get("vmClaim");if(Q.fastPreview)try{let Y=await X.req.json().catch(()=>({})),G=await Cr(X),J=await ZP0(G,Q.branch,Y.base);return X.json(J,200,A9)}catch(Y){return I51(X,Y)}return hZ(X,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})}),$.post("/:virtualMcpId/:branch/git/publish",async(X)=>{if(X.get("vmClaim").fastPreview)return X.json({ok:!0},200,A9);let Q=N_(X);if(Q instanceof Response)return Q;let{claimName:Y,virtualMcpMetadata:G,connectionIds:J}=X.get("vmClaim"),W=X.var.studioContext;return QP0(Y,async()=>{try{await J51(W,Q,Y);let K=Vr(G,J);if(K)await cx$(W,Q,Y,K)}catch(K){if(K instanceof H_)return X.json({error:K.message},403,A9);let H=K instanceof Error?K.message:String(K);return X.json({error:H},502,A9)}return hZ(X,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",async(X)=>{let{claimName:Q,fastPreview:Y}=X.get("vmClaim");if(Y)return X.json({error:"Nothing to discard: Fast Preview projects have no working tree"},400,A9);return QP0(Q,()=>hZ(X,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(X)=>{let Q=X.get("vmClaim");if(Q.fastPreview)return QP0(Q.claimName,async()=>{try{let W=await X.req.json().catch(()=>({})),K=await Cr(X),H=W.base??await K.getDefaultBranch();return await xx$(K,Q.branch,H,W.onConflict==="branch-wins"?"branch-wins":"fail"),X.json({ok:!0},200,A9)}catch(W){return I51(X,W)}});let Y=N_(X);if(Y instanceof Response)return Y;let{claimName:G}=X.get("vmClaim"),J=X.var.studioContext;return QP0(G,async()=>{try{await J51(J,Y,G)}catch(W){let K=W instanceof Error?W.message:String(W);return X.json({error:K},502,A9)}return hZ(X,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",BZ({maxSize:lx$,onError:(X)=>X.json({error:"Payload too large"},413,A9)}),async(X)=>{let Q=X.get("vmClaim"),Y=null;if(!Q.fastPreview){let H=N_(X);if(H instanceof Response)return H;Y=H}let{claimName:G,userId:J,projectRef:W}=Q,K=X.var.studioContext;try{let H=await X.req.json().catch(()=>({})),F=H.status,N=H.diff,U=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[O,B]=H51(F)&&U?[F,N]:Y?await Promise.all([YP0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:W}),YP0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:W})]):await(async()=>{let L=await Cr(X);return Promise.all([$P0(L,Q.branch),ZP0(L,Q.branch)])})(),D=await ob$(K,O,B);return X.json(D,200,A9)}catch(H){let F=H instanceof Error?H.message:String(H);if(F==="SANDBOX_GONE")return X.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,A9);return X.json({error:F},502,A9)}}),$.post("/:virtualMcpId/:branch/git/judge-review",BZ({maxSize:lx$,onError:(X)=>X.json({error:"Payload too large"},413,A9)}),async(X)=>{let Q=X.get("vmClaim"),Y=null;if(!Q.fastPreview){let H=N_(X);if(H instanceof Response)return H;Y=H}let{claimName:G,userId:J,projectRef:W}=Q,K=X.var.studioContext;try{let H=await X.req.json().catch(()=>({})),F=H.status,N=H.diff,U=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[O,B]=H51(F)&&U?[F,N]:Y?await Promise.all([YP0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:W}),YP0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:W})]):await(async()=>{let L=await Cr(X);return Promise.all([$P0(L,Q.branch),ZP0(L,Q.branch)])})(),D=await ab$(K,O,B,typeof H.language==="string"?H.language:void 0);return X.json(D,200,A9)}catch(H){let F=H instanceof Error?H.message:String(H);if(F==="SANDBOX_GONE")return X.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,A9);return X.json({error:F},502,A9)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(X)=>{let Q=N_(X);if(Q instanceof Response)return Q;let{claimName:Y}=X.get("vmClaim"),G=X.req.query("path");if(!G||!G.startsWith("/")||G.startsWith("//")||G.includes("..")||G.includes("\\"))return X.json({error:"Path not allowed"},403);let J;try{J=await Q.getPreviewUrl(Y)}catch{return X.json({error:"Preview not available"},502)}if(!J)return X.json({error:"Preview not available"},502);let W=J.replace(/\/+$/,""),K=T51(`${W}${G}`),H;try{H=await fetch(K?.url??`${W}${G}`,{...K?{headers:{host:K.hostHeader}}:{}})}catch{return X.json({error:"Preview unreachable"},502)}let F;try{F=await H.text()}catch{return X.json({error:"Preview unreachable"},502)}return new Response(F,{status:H.status,headers:{"content-type":H.headers.get("content-type")??"application/json"}})}),$.post("/:virtualMcpId/:branch/preview-invoke",BZ({maxSize:RX6,onError:(X)=>X.json({error:"Payload too large"},413)}),async(X)=>{let Q=N_(X);if(Q instanceof Response)return Q;let{claimName:Y}=X.get("vmClaim"),G;try{G=await Q.getPreviewUrl(Y)}catch{return X.json({error:"Preview not available"},502)}if(!G)return X.json({error:"Preview not available"},502);let J;try{J=await X.req.json()}catch{return X.json({error:"Invalid JSON body"},400)}if(!J||typeof J!=="object"||Array.isArray(J))return X.json({error:"Invalid JSON body"},400);let W=gx$(J);if(!W)return X.json({error:"Invalid or missing __resolveType"},400);let K=hx$(G,W.resolveType),H=T51(K),F;try{F=await fetch(H?.url??K,{method:"POST",headers:{"content-type":"application/json",...H?{host:H.hostHeader}:{}},body:JSON.stringify(W.payload),signal:AbortSignal.timeout(30000)})}catch{return X.json({error:"Preview unreachable"},502)}let N;try{N=await F.text()}catch{return X.json({error:"Preview unreachable"},502)}return new Response(N,{status:F.status,headers:{"content-type":F.headers.get("content-type")??"application/json"}})}),$};var px$=w(()=>{C8();Xw();Eh();G51();BF();lb$();M3();oO();db$();ib$();Pi0();Hn();U51();sb$();w51();W_();yx$();ux$();R51();AX6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;qX6=uz0(async($,Z)=>{let X=$.var.studioContext;try{e(X)}catch{return $.json({error:"Unauthorized"},401)}let Q=W1(X);if(!Q)return $.json({error:"Unauthorized"},401);let Y;try{Y=t(X)}catch{return $.json({error:"Organization scope required"},403)}let G=$.req.param("virtualMcpId"),J=$.req.param("branch");if(!G||!J)return $.json({error:"virtualMcpId and branch are required"},400);try{TX6(J)}catch(O){let B=O instanceof Error?O.message:String(O);return $.json({error:B},400)}let W=await X.storage.virtualMcps.findById(G);if(!W||W.organization_id!==Y.id)return $.json({error:"Virtual MCP not found"},404);let K=Vi({orgId:Y.id,virtualMcpId:G,branch:J}),H=await TF(X,J,Q),F=cb$({userId:H,projectRef:K}),N=W.metadata??null;if(N?.fastPreview===!0&&lz0(N))return $.set("vmClaim",{claimName:F,callerUserId:Q,runner:null,virtualMcpId:G,branch:J,userId:H,projectRef:K,virtualMcpMetadata:N,connectionIds:W.connections?.map((O)=>O.connection_id)??[],fastPreview:!0}),Z();let U;try{U=(await pX(X,{userId:H,branch:J,virtualMcpMetadata:N})).provider}catch{U=null}if(!U)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:F,callerUserId:Q,runner:U,virtualMcpId:G,branch:J,userId:H,projectRef:K,virtualMcpMetadata:N,connectionIds:W.connections?.map((O)=>O.connection_id)??[]}),Z()});XP0=new Map;A9={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};ix$=["clone","install","start"]});function tx$($,Z,X){let Q=q51.get($);if(!Q)Q={pending:null,running:!1},q51.set($,Q);if(!Q.pending)Q.pending={set:new Map,del:new Set,deps:Z,resolvers:[],rejecters:[]};let Y=Q.pending;Y.deps=Z;for(let[J,W]of Object.entries(X.set??{}))Y.set.set(J,W),Y.del.delete(J);for(let J of X.delete??[])Y.del.add(J),Y.set.delete(J);let G=new Promise((J,W)=>{Y.resolvers.push(J),Y.rejecters.push(W)});if(!Q.running)VX6($,Q);return G}async function VX6($,Z){Z.running=!0;try{while(Z.pending){let X=Z.pending;Z.pending=null;try{let Q=await CX6(X);for(let Y of X.resolvers)Y(Q)}catch(Q){for(let Y of X.rejecters)Y(Q)}}}finally{if(Z.running=!1,!Z.pending)q51.delete($)}}async function CX6($){let{client:Z,branch:X,packagePath:Q}=$.deps;for(let Y=0;;Y++){let G=await Sr(Z,X),J=await Z.getCommitTreeSha(G),W=await Z.getTreeRecursive(J),K=P51(W,Q),H=[],F=new Map(K.map((B)=>[B.path,{stem:B.stem,sha:B.sha}]));for(let[B,D]of $.set){let L=A51(K,B),E=`${JSON.stringify(D,null,2)}
|
|
2755
|
-
`,j=await Z.createBlob(E);await fx$(Z.owner,Z.repo,j,E);let z=L[0]??`${sz0(Q)}/${D51(B)}.json`;H.push({path:z,mode:"100644",type:"blob",sha:j});let A=z.slice(z.lastIndexOf("/")+1,-5);F.set(z,{stem:A,sha:j,content:E});for(let P of L.slice(1))H.push({path:P,mode:"100644",type:"blob",sha:null}),F.delete(P)}for(let B of $.del)for(let D of A51(K,B))H.push({path:D,mode:"100644",type:"blob",sha:null}),F.delete(D);if(H.length===0)return G;let N=Q?`${Q}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((B)=>B.type==="blob"&&B.path===N)){let B=await Promise.all([...F.values()].map(async(L)=>({stem:L.stem,content:L.content??await Z.getBlobText(L.sha)}))),D=await Z.createBlob(Ir(B));H.push({path:N,mode:"100644",type:"blob",sha:D})}let U=await Z.createTree(J,H),O=await Z.createCommit({message:_X6($),treeSha:U,parentShas:[G]});try{return await Z.updateRef(X,O),O}catch(B){if(!(B instanceof C6&&B.status===422)||Y>=SX6-1)throw B;await I$(lZ(2000,200,Y,2,0.5))}}}function _X6($){let Z=(Y)=>{let G=Y.slice(0,3).join(", ");return Y.length>3?`${G} (+${Y.length-3} more)`:G},X=[];if($.set.size>0)X.push(`update ${Z([...$.set.keys()])}`);if($.del.size>0)X.push(`delete ${Z([...$.del])}`);let Q=`chore(decofile): ${X.join("; ")}`;return nl0(Q,$.deps.coAuthor)}var SX6=3,q51;var ox$=w(()=>{nU0();iz0();t4();W_();ez0();q51=new Map});import{createHmac as rx$,randomBytes as vX6,timingSafeEqual as fX6}from"crypto";function ax$(){if(GP0)return GP0;let $;try{let Z=b0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return GP0=$?Buffer.from($):vX6(32),GP0}function M51($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+bX6)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=rx$("sha256",ax$()).update(Q).digest("base64url");return`${Q}.${Y}`}function sx$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(rx$("sha256",ax$()).update(Q).digest("base64url"));if(Y.length!==G.length||!fX6(Y,G))return!1;let J;try{J=JSON.parse(Buffer.from(Q,"base64url").toString())}catch{return!1}let W=Math.floor((Z.nowMs??Date.now())/1000);return J.o===Z.organizationId&&J.m===Z.virtualMcpId&&J.b===Z.branch&&typeof J.e==="number"&&J.e>=W}var bX6=21600000,GP0=null;var ex$=w(()=>{P$()});import{z as Rh}from"zod";function yX6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&xX6.test($)}function Zy$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function JP0($){let Z=$.get("decofileScope");return dz0($.var.studioContext,Z.organizationId,Z.githubRepo)}function WP0($,Z){if(Z instanceof C6){let Q=Z.status===404?404:Z.status===409?409:Z.status===422?409:502;return $.json({error:Z.message},Q)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},500)}function Xy$(){let $=new U1;return $.use("/:virtualMcpId/:branch",$y$),$.use("/:virtualMcpId/:branch/*",$y$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await JP0(Z),Y=await bx$(Q,X.branch,X.packagePath,{createBranchIfMissing:!!X.userId}),G={ETag:`"${Y.sha}"`,"Cache-Control":"no-store","Access-Control-Allow-Origin":"*"};if(Z.req.header("if-none-match")===`"${Y.sha}"`)return Z.body(null,304,G);if(!X.userId)return Z.body(Y.decofile,200,{...G,"content-type":"application/json"});let J=M51({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(Zy$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return WP0(Z,Q)}}),$.patch("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=gX6.safeParse(await Z.req.json().catch(()=>null));if(!Y.success)return Z.json({error:"Invalid body",details:Y.error.issues},400);let G=Y.data;for(let J of[...Object.keys(G.set??{}),...G.delete??[]])try{mz0(J)}catch(W){let K=W instanceof Error?W.message:String(W);return Z.json({error:K},400)}for(let[J,W]of Object.entries(G.set??{}))if(typeof W!=="object"||W===null||Array.isArray(W))return Z.json({error:`Block "${J}" must be a JSON object`},400);try{let J=await JP0(Z),W=await tx$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:jh(Q)},G),K=M51({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:W,token:K,apiHost:Zy$(Z)})}catch(J){return WP0(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await JP0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({error:"Branch is already the default branch"},400);try{let G=await Q.mergeBranch(Y,X.branch,`chore(decofile): publish ${X.branch}`);return G?Z.json({result:"merged",sha:G}):Z.json({result:"up-to-date"})}catch(G){if(G instanceof C6&&G.status===409)return Z.json({error:"merge-conflict"},409);if(G instanceof C6&&G.status===405){let W=await Q.findOpenPullRequest(Y,X.branch)??await Q.createPullRequest({base:Y,head:X.branch,title:`Publish ${X.branch}`});return Z.json({result:"pull-request",number:W.number,url:W.html_url})}throw G}}catch(Q){return WP0(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await JP0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});try{let{aheadBy:G,behindBy:J}=await Q.compare(Y,X.branch);return Z.json({baseBranch:Y,aheadBy:G,behindBy:J})}catch(G){if(G instanceof C6&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});throw G}}catch(Q){return WP0(Z,Q)}}),$}var xX6,gX6,$y$;var Qy$=w(()=>{iz0();C8();G51();cz0();R51();w51();ox$();ex$();W_();ez0();xX6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;gX6=Rh.object({set:Rh.record(Rh.string(),Rh.unknown()).optional(),delete:Rh.array(Rh.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}),$y$=uz0(async($,Z)=>{let X=$.var.studioContext,Q=X.organization;if(!Q)return $.json({error:"Organization scope required"},500);let Y=$.req.param("virtualMcpId"),G=$.req.param("branch");if(!Y||!G)return $.json({error:"virtualMcpId and branch are required"},400);if(!yX6(G))return $.json({error:`Invalid branch name: ${G}`},400);let J=X.auth?.user?.id??null;if(!J){let O=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!O||!sx$(O,{organizationId:Q.id,virtualMcpId:Y,branch:G}))return $.json({error:"Unauthorized"},401)}let W=await X.storage.virtualMcps.findById(Y);if(!W||W.organization_id!==Q.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!lz0(K)||K?.fastPreview!==!0)return $.json({error:"Fast Preview is not enabled for this project"},404);let F=W.connections?.map((O)=>O.connection_id)??[],N=Vr(K,F);if(!N)return $.json({error:"Project has no GitHub repository"},404);let U=K?.runtime;return $.set("decofileScope",{organizationId:Q.id,virtualMcpId:Y,branch:G,packagePath:U?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:N,userId:J}),Z()})});var Yy$=($)=>{let Z=new U1;if(Z.use("*",eC),Z.route("/",Qz0()),Z.route("/",k_$()),Z.route("/",kb$()),Z.route("/",Ib$()),Z.route("/",yz0()),Z.route("/tools",bb$()),Z.route("/",_b$()),Z.route("/",Wb$({kvStorage:$.kvStorage})),Z.route("/",Gb$()),Z.route("/fs",Eb$({getConnection:$.getNatsConnection})),Z.route("/sandbox",nx$()),Z.route("/decofile",Xy$()),Z.route("/",Ab$()),Z.route("/deco-sites",Gz0()),Z.route("/sso",aj0()),Z.route("/",gz0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",z_$()),$.mountDevAssets)Z.route("/dev-assets",Jz0({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("/",JV$()),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",zb$()),Z.route("/mcp",Bw0()),Z.route("/mcp/self",xz0()),Z.route("/mcp",Lw0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var Gy$=w(()=>{C8();M41();P_$();C41();Wz0();ao();I41();Jb$();Kb$();jb$();Wp();L41();Ew0();s61();Pb$();Tb$();qb$();Sb$();vb$();$51();xb$();Z51();ww0();px$();Qy$()});function uX6($){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 cX6($,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(hX6)});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 hX6=1e4,lX6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},Jy$=()=>{let $=new U1;return $.use("*",lX6),$.get("/",async(Z)=>{let X=b0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await cX6(Q,Y);return Z.json({apps:uX6(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var Wy$=w(()=>{C8();P$()});import{z as M1}from"zod";function tK($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function sX6($){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 eX6($,Z,X){try{return JSON.parse($)}catch{throw new Fy$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function $Q6($){let Z={};for(let X of $)if(X.role==="assistant"&&X.tool_calls)for(let Q of X.tool_calls)Z[Q.id]=Q.function.name;return $.map((X)=>{switch(X.role){case"system":return{role:"system",content:X.content};case"user":if(typeof X.content==="string")return{role:"user",content:X.content};return{role:"user",content:X.content.map((Y)=>{if(Y.type==="text")return{type:"text",text:Y.text};return{type:"image",image:Y.image_url.url}})};case"assistant":if(X.tool_calls&&X.tool_calls.length>0)return{role:"assistant",content:X.tool_calls.map((Y)=>({type:"tool-call",toolCallId:Y.id,toolName:Y.function.name,input:eX6(Y.function.arguments,Y.id,Y.function.name)}))};return{role:"assistant",content:X.content??""};case"tool":let Q=Z[X.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:X.tool_call_id,toolName:Q,output:{type:"text",value:X.content}}]}}})}function ZQ6($){let Z=$.map((X)=>{let Q=X.function.parameters?_Y(X.function.parameters):_Y({type:"object",properties:{}});return[X.function.name,f$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function XQ6($){if(!$)return;return{openai:{response_format:$}}}function QQ6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function Ky$($,Z,X,Q,Y,G){let J={model:$,messages:Z,tools:X,temperature:Q.temperature,maxTokens:Q.max_tokens,topP:Q.top_p,frequencyPenalty:Q.frequency_penalty,presencePenalty:Q.presence_penalty,stopSequences:Q.stop?Array.isArray(Q.stop)?Q.stop:[Q.stop]:void 0,abortSignal:G};return Y?{...J,providerOptions:Y}:J}function Hy$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var dX6=256,mX6,iX6,nX6,pX6,tX6,oX6,rX6,aX6,Fy$,Ny$,Uy$;var Oy$=w(()=>{C4();C8();Eh();nF();mX6=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),iX6=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),nX6=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(iX6).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),pX6=M1.object({type:M1.literal("text")}),tX6=M1.object({type:M1.literal("json_object")}),oX6=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()})}),rX6=M1.union([pX6,tX6,oX6]),aX6=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(nX6),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(mX6).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:rX6.optional(),user:M1.string().optional()});Fy$=class Fy$ extends Error{constructor($){super($);this.name="MessageConversionError"}};Ny$=new U1;Ny$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(tK("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(tK("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(tK("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=aX6.safeParse(Q);if(!Y.success){let L=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(tK(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let G=Y.data,J=sX6(G.model);if(!J)return $.json(tK("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)=>LD(j.providerId));if(!E)return $.json(tK("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(tK(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),N=$Q6(G.messages),U=G.tools?ZQ6(G.tools):void 0,O=XQ6(G.response_format),B=QQ6(),D=Math.floor(Date.now()/1000);if(G.stream)return UN($,async(L)=>{let E=Ky$(F,N,U,G,O,$.req.raw.signal);try{let j=vO(E),z=!1,A=0,P="",q=async()=>{if(P.length===0)return;let M=P;P="",await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{content:M},finish_reason:null}]})})};for await(let M of j.fullStream){if(!z&&(M.type==="text-delta"||M.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(M.type==="text-delta"){if(P+=M.text,P.length>=dX6)await q()}else if(M.type==="tool-call"){await q();let k=A++;await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{tool_calls:[{index:k,id:M.toolCallId,type:"function",function:{name:M.toolName,arguments:JSON.stringify(M.input)}}]},finish_reason:null}]})})}else if(M.type==="finish")await q(),await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{},finish_reason:Hy$(M.finishReason)}],usage:M.totalUsage?{prompt_tokens:M.totalUsage.inputTokens??0,completion_tokens:M.totalUsage.outputTokens??0,total_tokens:M.totalUsage.totalTokens??0}:void 0})})}await q(),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=Ky$(F,N,U,G,O,$.req.raw.signal),E=await CO(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:B,object:"chat.completion",created:D,model:G.model,choices:[{index:0,message:j,finish_reason:Hy$(E.finishReason)}],usage:{prompt_tokens:E.usage?.inputTokens??0,completion_tokens:E.usage?.outputTokens??0,total_tokens:E.usage?.totalTokens??0}})}}catch(Q){let Y=Q;if(Y.name==="AbortError")return $.json(tK("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(tK(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(tK(Y.message,"server_error"),500)}});Uy$=Ny$});var wy$;var By$=w(()=>{wy$={name:"decocms",version:"4.220.10",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 JQ6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??GQ6}}var Dy$,GQ6="https://ph.studio.decocms.com",Ly$;var Ey$=w(()=>{C8();qg0();dV();t9();P$();U41();By$();Dy$=new U1;Dy$.get("/",($)=>{let Z={version:wy$.version,theme:Tl1(),...WL().logo&&{logo:WL().logo},...LK()&&{internalUrl:ek1()},...b0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!b0().firecrawlApiKey,auth:yC$(),posthog:JQ6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!LK()&&b0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});Ly$=Dy$});function Ih($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function k51($){return(Ih($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function zy$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Ih($))}&sz=${Z}`}function jy$($,Z){let X=$.trim();if(X.length<=Z)return X;let Q=X.slice(0,Z-1),Y=Q.lastIndexOf(" ");return`${(Y>Z*0.6?Q.slice(0,Y):Q).trimEnd()}\u2026`}function Py$($){let{brand:Z,domain:X,score:Q,verdict:Y}=$,G=typeof Q==="number"?`${Z} commerce report \u2014 ${Math.round(Q)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,J=`See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,W=Y?.trim()?jy$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):jy$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as l0}from"zod";var U_,WQ6,KQ6,HQ6,FQ6,Ay$;var Ty$=w(()=>{U_=l0.enum(["good","bad","neutral"]),WQ6=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:U_.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 $})),KQ6=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(WQ6)),HQ6={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()},FQ6=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:U_.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:U_.optional()}),l0.object({template:l0.literal("stats"),stats:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),tone:U_.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:U_.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(KQ6).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:U_.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:U_.optional()})).min(1)})]),Ay$=l0.object({...HQ6,template:FQ6})});function KP0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=Ay$.safeParse(Y.props);if(G.success)return G.data;let J=G.error.issues[0];return Z.push({section_type:Y.section_type,position:Y.position,reason:J?`${J.path.join(".")||"(root)"}: ${J.message}`:"contract violation"}),null}).filter((Y)=>Y!==null),Q=X.filter((Y)=>Y.template.template!=="cover"&&Y.template.template!=="cta").map((Y)=>({key:Y.key,title:Y.title}));return{deck:{meta:{...$.meta,scores:$.summary?.scores,scannedAt:$.scanned_at,toc:Q},slides:X},drops:Z}}var S51=w(()=>{Ty$()});import{join as Ry$}from"path";async function UQ6($){try{let Z=await fetch(`${cW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(NQ6)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=KP0(X);if(!Q.slides.length)return null;let Y=Q.slides.find((W)=>W.template.template==="cover"),G=Y?.template,J=G&&G.template==="cover"?G:void 0;return{brand:Q.meta.brand?.trim()||k51($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function ZG($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function OQ6($,Z){let X=Ih($),Q=Z?.brand?.trim()||k51(X),Y=zy$(X,128),J=`${(b0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=Py$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),H=`${J}/og.png`,F=`${Q} commerce report by decocms`;return[`<title>${ZG(W)}</title>`,`<meta name="description" content="${ZG(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="${ZG(W)}" />`,`<meta property="og:description" content="${ZG(K)}" />`,`<meta property="og:url" content="${ZG(J)}" />`,`<meta property="og:image" content="${ZG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${ZG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${ZG(W)}" />`,`<meta name="twitter:description" content="${ZG(K)}" />`,`<meta name="twitter:image" content="${ZG(H)}" />`,`<meta name="twitter:image:alt" content="${ZG(F)}" />`,`<link rel="canonical" href="${ZG(J)}" />`,`<link rel="icon" href="${ZG(Y)}" sizes="any" />`].join(`
|
|
2755
|
+
`,j=await Z.createBlob(E);await fx$(Z.owner,Z.repo,j,E);let z=L[0]??`${sz0(Q)}/${D51(B)}.json`;H.push({path:z,mode:"100644",type:"blob",sha:j});let A=z.slice(z.lastIndexOf("/")+1,-5);F.set(z,{stem:A,sha:j,content:E});for(let P of L.slice(1))H.push({path:P,mode:"100644",type:"blob",sha:null}),F.delete(P)}for(let B of $.del)for(let D of A51(K,B))H.push({path:D,mode:"100644",type:"blob",sha:null}),F.delete(D);if(H.length===0)return G;let N=Q?`${Q}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((B)=>B.type==="blob"&&B.path===N)){let B=await Promise.all([...F.values()].map(async(L)=>({stem:L.stem,content:L.content??await Z.getBlobText(L.sha)}))),D=await Z.createBlob(Ir(B));H.push({path:N,mode:"100644",type:"blob",sha:D})}let U=await Z.createTree(J,H),O=await Z.createCommit({message:_X6($),treeSha:U,parentShas:[G]});try{return await Z.updateRef(X,O),O}catch(B){if(!(B instanceof C6&&B.status===422)||Y>=SX6-1)throw B;await I$(lZ(2000,200,Y,2,0.5))}}}function _X6($){let Z=(Y)=>{let G=Y.slice(0,3).join(", ");return Y.length>3?`${G} (+${Y.length-3} more)`:G},X=[];if($.set.size>0)X.push(`update ${Z([...$.set.keys()])}`);if($.del.size>0)X.push(`delete ${Z([...$.del])}`);let Q=`chore(decofile): ${X.join("; ")}`;return nl0(Q,$.deps.coAuthor)}var SX6=3,q51;var ox$=w(()=>{nU0();iz0();t4();W_();ez0();q51=new Map});import{createHmac as rx$,randomBytes as vX6,timingSafeEqual as fX6}from"crypto";function ax$(){if(GP0)return GP0;let $;try{let Z=b0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return GP0=$?Buffer.from($):vX6(32),GP0}function M51($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+bX6)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=rx$("sha256",ax$()).update(Q).digest("base64url");return`${Q}.${Y}`}function sx$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(rx$("sha256",ax$()).update(Q).digest("base64url"));if(Y.length!==G.length||!fX6(Y,G))return!1;let J;try{J=JSON.parse(Buffer.from(Q,"base64url").toString())}catch{return!1}let W=Math.floor((Z.nowMs??Date.now())/1000);return J.o===Z.organizationId&&J.m===Z.virtualMcpId&&J.b===Z.branch&&typeof J.e==="number"&&J.e>=W}var bX6=21600000,GP0=null;var ex$=w(()=>{P$()});import{z as Rh}from"zod";function yX6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&xX6.test($)}function Zy$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function JP0($){let Z=$.get("decofileScope");return dz0($.var.studioContext,Z.organizationId,Z.githubRepo)}function WP0($,Z){if(Z instanceof C6){let Q=Z.status===404?404:Z.status===409?409:Z.status===422?409:502;return $.json({error:Z.message},Q)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},500)}function Xy$(){let $=new U1;return $.use("/:virtualMcpId/:branch",$y$),$.use("/:virtualMcpId/:branch/*",$y$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await JP0(Z),Y=await bx$(Q,X.branch,X.packagePath,{createBranchIfMissing:!!X.userId}),G={ETag:`"${Y.sha}"`,"Cache-Control":"no-store","Access-Control-Allow-Origin":"*"};if(Z.req.header("if-none-match")===`"${Y.sha}"`)return Z.body(null,304,G);if(!X.userId)return Z.body(Y.decofile,200,{...G,"content-type":"application/json"});let J=M51({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(Zy$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return WP0(Z,Q)}}),$.patch("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=gX6.safeParse(await Z.req.json().catch(()=>null));if(!Y.success)return Z.json({error:"Invalid body",details:Y.error.issues},400);let G=Y.data;for(let J of[...Object.keys(G.set??{}),...G.delete??[]])try{mz0(J)}catch(W){let K=W instanceof Error?W.message:String(W);return Z.json({error:K},400)}for(let[J,W]of Object.entries(G.set??{}))if(typeof W!=="object"||W===null||Array.isArray(W))return Z.json({error:`Block "${J}" must be a JSON object`},400);try{let J=await JP0(Z),W=await tx$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:jh(Q)},G),K=M51({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:W,token:K,apiHost:Zy$(Z)})}catch(J){return WP0(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await JP0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({error:"Branch is already the default branch"},400);try{let G=await Q.mergeBranch(Y,X.branch,`chore(decofile): publish ${X.branch}`);return G?Z.json({result:"merged",sha:G}):Z.json({result:"up-to-date"})}catch(G){if(G instanceof C6&&G.status===409)return Z.json({error:"merge-conflict"},409);if(G instanceof C6&&G.status===405){let W=await Q.findOpenPullRequest(Y,X.branch)??await Q.createPullRequest({base:Y,head:X.branch,title:`Publish ${X.branch}`});return Z.json({result:"pull-request",number:W.number,url:W.html_url})}throw G}}catch(Q){return WP0(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await JP0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});try{let{aheadBy:G,behindBy:J}=await Q.compare(Y,X.branch);return Z.json({baseBranch:Y,aheadBy:G,behindBy:J})}catch(G){if(G instanceof C6&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});throw G}}catch(Q){return WP0(Z,Q)}}),$}var xX6,gX6,$y$;var Qy$=w(()=>{iz0();C8();G51();cz0();R51();w51();ox$();ex$();W_();ez0();xX6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;gX6=Rh.object({set:Rh.record(Rh.string(),Rh.unknown()).optional(),delete:Rh.array(Rh.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}),$y$=uz0(async($,Z)=>{let X=$.var.studioContext,Q=X.organization;if(!Q)return $.json({error:"Organization scope required"},500);let Y=$.req.param("virtualMcpId"),G=$.req.param("branch");if(!Y||!G)return $.json({error:"virtualMcpId and branch are required"},400);if(!yX6(G))return $.json({error:`Invalid branch name: ${G}`},400);let J=X.auth?.user?.id??null;if(!J){let O=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!O||!sx$(O,{organizationId:Q.id,virtualMcpId:Y,branch:G}))return $.json({error:"Unauthorized"},401)}let W=await X.storage.virtualMcps.findById(Y);if(!W||W.organization_id!==Q.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!lz0(K)||K?.fastPreview!==!0)return $.json({error:"Fast Preview is not enabled for this project"},404);let F=W.connections?.map((O)=>O.connection_id)??[],N=Vr(K,F);if(!N)return $.json({error:"Project has no GitHub repository"},404);let U=K?.runtime;return $.set("decofileScope",{organizationId:Q.id,virtualMcpId:Y,branch:G,packagePath:U?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:N,userId:J}),Z()})});var Yy$=($)=>{let Z=new U1;if(Z.use("*",eC),Z.route("/",Qz0()),Z.route("/",k_$()),Z.route("/",kb$()),Z.route("/",Ib$()),Z.route("/",yz0()),Z.route("/tools",bb$()),Z.route("/",_b$()),Z.route("/",Wb$({kvStorage:$.kvStorage})),Z.route("/",Gb$()),Z.route("/fs",Eb$({getConnection:$.getNatsConnection})),Z.route("/sandbox",nx$()),Z.route("/decofile",Xy$()),Z.route("/",Ab$()),Z.route("/deco-sites",Gz0()),Z.route("/sso",aj0()),Z.route("/",gz0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",z_$()),$.mountDevAssets)Z.route("/dev-assets",Jz0({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("/",JV$()),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",zb$()),Z.route("/mcp",Bw0()),Z.route("/mcp/self",xz0()),Z.route("/mcp",Lw0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var Gy$=w(()=>{C8();M41();P_$();C41();Wz0();ao();I41();Jb$();Kb$();jb$();Wp();L41();Ew0();s61();Pb$();Tb$();qb$();Sb$();vb$();$51();xb$();Z51();ww0();px$();Qy$()});function uX6($){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 cX6($,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(hX6)});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 hX6=1e4,lX6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},Jy$=()=>{let $=new U1;return $.use("*",lX6),$.get("/",async(Z)=>{let X=b0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await cX6(Q,Y);return Z.json({apps:uX6(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var Wy$=w(()=>{C8();P$()});import{z as M1}from"zod";function tK($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function sX6($){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 eX6($,Z,X){try{return JSON.parse($)}catch{throw new Fy$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function $Q6($){let Z={};for(let X of $)if(X.role==="assistant"&&X.tool_calls)for(let Q of X.tool_calls)Z[Q.id]=Q.function.name;return $.map((X)=>{switch(X.role){case"system":return{role:"system",content:X.content};case"user":if(typeof X.content==="string")return{role:"user",content:X.content};return{role:"user",content:X.content.map((Y)=>{if(Y.type==="text")return{type:"text",text:Y.text};return{type:"image",image:Y.image_url.url}})};case"assistant":if(X.tool_calls&&X.tool_calls.length>0)return{role:"assistant",content:X.tool_calls.map((Y)=>({type:"tool-call",toolCallId:Y.id,toolName:Y.function.name,input:eX6(Y.function.arguments,Y.id,Y.function.name)}))};return{role:"assistant",content:X.content??""};case"tool":let Q=Z[X.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:X.tool_call_id,toolName:Q,output:{type:"text",value:X.content}}]}}})}function ZQ6($){let Z=$.map((X)=>{let Q=X.function.parameters?_Y(X.function.parameters):_Y({type:"object",properties:{}});return[X.function.name,f$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function XQ6($){if(!$)return;return{openai:{response_format:$}}}function QQ6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function Ky$($,Z,X,Q,Y,G){let J={model:$,messages:Z,tools:X,temperature:Q.temperature,maxTokens:Q.max_tokens,topP:Q.top_p,frequencyPenalty:Q.frequency_penalty,presencePenalty:Q.presence_penalty,stopSequences:Q.stop?Array.isArray(Q.stop)?Q.stop:[Q.stop]:void 0,abortSignal:G};return Y?{...J,providerOptions:Y}:J}function Hy$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var dX6=256,mX6,iX6,nX6,pX6,tX6,oX6,rX6,aX6,Fy$,Ny$,Uy$;var Oy$=w(()=>{C4();C8();Eh();nF();mX6=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),iX6=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),nX6=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(iX6).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),pX6=M1.object({type:M1.literal("text")}),tX6=M1.object({type:M1.literal("json_object")}),oX6=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()})}),rX6=M1.union([pX6,tX6,oX6]),aX6=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(nX6),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(mX6).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:rX6.optional(),user:M1.string().optional()});Fy$=class Fy$ extends Error{constructor($){super($);this.name="MessageConversionError"}};Ny$=new U1;Ny$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(tK("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(tK("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(tK("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=aX6.safeParse(Q);if(!Y.success){let L=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(tK(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let G=Y.data,J=sX6(G.model);if(!J)return $.json(tK("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)=>LD(j.providerId));if(!E)return $.json(tK("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(tK(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),N=$Q6(G.messages),U=G.tools?ZQ6(G.tools):void 0,O=XQ6(G.response_format),B=QQ6(),D=Math.floor(Date.now()/1000);if(G.stream)return UN($,async(L)=>{let E=Ky$(F,N,U,G,O,$.req.raw.signal);try{let j=vO(E),z=!1,A=0,P="",q=async()=>{if(P.length===0)return;let M=P;P="",await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{content:M},finish_reason:null}]})})};for await(let M of j.fullStream){if(!z&&(M.type==="text-delta"||M.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(M.type==="text-delta"){if(P+=M.text,P.length>=dX6)await q()}else if(M.type==="tool-call"){await q();let k=A++;await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{tool_calls:[{index:k,id:M.toolCallId,type:"function",function:{name:M.toolName,arguments:JSON.stringify(M.input)}}]},finish_reason:null}]})})}else if(M.type==="finish")await q(),await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{},finish_reason:Hy$(M.finishReason)}],usage:M.totalUsage?{prompt_tokens:M.totalUsage.inputTokens??0,completion_tokens:M.totalUsage.outputTokens??0,total_tokens:M.totalUsage.totalTokens??0}:void 0})})}await q(),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=Ky$(F,N,U,G,O,$.req.raw.signal),E=await CO(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:B,object:"chat.completion",created:D,model:G.model,choices:[{index:0,message:j,finish_reason:Hy$(E.finishReason)}],usage:{prompt_tokens:E.usage?.inputTokens??0,completion_tokens:E.usage?.outputTokens??0,total_tokens:E.usage?.totalTokens??0}})}}catch(Q){let Y=Q;if(Y.name==="AbortError")return $.json(tK("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(tK(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(tK(Y.message,"server_error"),500)}});Uy$=Ny$});var wy$;var By$=w(()=>{wy$={name:"decocms",version:"4.220.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 JQ6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??GQ6}}var Dy$,GQ6="https://ph.studio.decocms.com",Ly$;var Ey$=w(()=>{C8();qg0();dV();t9();P$();U41();By$();Dy$=new U1;Dy$.get("/",($)=>{let Z={version:wy$.version,theme:Tl1(),...WL().logo&&{logo:WL().logo},...LK()&&{internalUrl:ek1()},...b0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!b0().firecrawlApiKey,auth:yC$(),posthog:JQ6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!LK()&&b0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});Ly$=Dy$});function Ih($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function k51($){return(Ih($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function zy$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Ih($))}&sz=${Z}`}function jy$($,Z){let X=$.trim();if(X.length<=Z)return X;let Q=X.slice(0,Z-1),Y=Q.lastIndexOf(" ");return`${(Y>Z*0.6?Q.slice(0,Y):Q).trimEnd()}\u2026`}function Py$($){let{brand:Z,domain:X,score:Q,verdict:Y}=$,G=typeof Q==="number"?`${Z} commerce report \u2014 ${Math.round(Q)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,J=`See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,W=Y?.trim()?jy$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):jy$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as l0}from"zod";var U_,WQ6,KQ6,HQ6,FQ6,Ay$;var Ty$=w(()=>{U_=l0.enum(["good","bad","neutral"]),WQ6=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:U_.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 $})),KQ6=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(WQ6)),HQ6={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()},FQ6=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:U_.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:U_.optional()}),l0.object({template:l0.literal("stats"),stats:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),tone:U_.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:U_.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(KQ6).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:U_.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:U_.optional()})).min(1)})]),Ay$=l0.object({...HQ6,template:FQ6})});function KP0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=Ay$.safeParse(Y.props);if(G.success)return G.data;let J=G.error.issues[0];return Z.push({section_type:Y.section_type,position:Y.position,reason:J?`${J.path.join(".")||"(root)"}: ${J.message}`:"contract violation"}),null}).filter((Y)=>Y!==null),Q=X.filter((Y)=>Y.template.template!=="cover"&&Y.template.template!=="cta").map((Y)=>({key:Y.key,title:Y.title}));return{deck:{meta:{...$.meta,scores:$.summary?.scores,scannedAt:$.scanned_at,toc:Q},slides:X},drops:Z}}var S51=w(()=>{Ty$()});import{join as Ry$}from"path";async function UQ6($){try{let Z=await fetch(`${cW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(NQ6)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=KP0(X);if(!Q.slides.length)return null;let Y=Q.slides.find((W)=>W.template.template==="cover"),G=Y?.template,J=G&&G.template==="cover"?G:void 0;return{brand:Q.meta.brand?.trim()||k51($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function ZG($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function OQ6($,Z){let X=Ih($),Q=Z?.brand?.trim()||k51(X),Y=zy$(X,128),J=`${(b0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=Py$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),H=`${J}/og.png`,F=`${Q} commerce report by decocms`;return[`<title>${ZG(W)}</title>`,`<meta name="description" content="${ZG(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="${ZG(W)}" />`,`<meta property="og:description" content="${ZG(K)}" />`,`<meta property="og:url" content="${ZG(J)}" />`,`<meta property="og:image" content="${ZG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${ZG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${ZG(W)}" />`,`<meta name="twitter:description" content="${ZG(K)}" />`,`<meta name="twitter:image" content="${ZG(H)}" />`,`<meta name="twitter:image:alt" content="${ZG(F)}" />`,`<link rel="canonical" href="${ZG(J)}" />`,`<link rel="icon" href="${ZG(Y)}" sizes="any" />`].join(`
|
|
2756
2756
|
`)}function BQ6($,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}
|
|
2757
2757
|
</head>`)}function Iy$($){let Z=new U1;return Z.get("/:domain/og.png",async(X)=>{let Q=Ih(X.req.param("domain")),Y=async()=>{let G=$?Bun.file(Ry$($,"report-og-fallback.png")):null;if(!G||!await G.exists())return X.notFound();return X.body(new Uint8Array(await G.arrayBuffer()),200,{"Content-Type":"image/png","Cache-Control":"public, max-age=0, s-maxage=3600"})};try{let G=await fetch(`${cW({})}/api/v2/public/diagnostics/${encodeURIComponent(Q)}/og.png`,{signal:AbortSignal.timeout(wQ6)}),J=G.headers.get("content-type")??"";if(!G.ok||!J.startsWith("image/")||!G.body)return Y();return X.body(G.body,200,{"Content-Type":J,"Cache-Control":"public, max-age=0, s-maxage=604800"})}catch{return Y()}}),Z.get("/:domain",async(X)=>{let Q=X.req.param("domain"),Y=$?Ry$($,"index.html"):null,G=Y?Bun.file(Y):null;if(!G||!await G.exists())return X.notFound();let J=await G.text();try{let W=await UQ6(Ih(Q)),K=OQ6(Q,W);return X.html(BQ6(J,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return X.html(J)}}),Z}var NQ6=2500,wQ6=1e4;var qy$=w(()=>{C8();S51();PL();P$()});function _r($,Z){return fetch(`${cW({})}${$}`,Z)}async function DQ6($,Z,X){let Q=new URLSearchParams;if(Z)Q.set("pw",Z);if(X)Q.set("lang",X);let Y=Q.toString()?`?${Q.toString()}`:"",G=await _r(`/api/v2/public/diagnostics/${encodeURIComponent($)}${Y}`,{headers:{Accept:"application/json"}});if(G.status===404)return{status:"not_found",deck:null,scanned_at:null,drops:[]};if(!G.ok)throw Error(`report read HTTP ${G.status}`);let J=await G.json(),{deck:W,drops:K}=KP0(J);return{status:W.slides.length?"ready":"empty",deck:W,scanned_at:J.scanned_at,drops:K}}var LQ6,BN,My$=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},ky$;var Sy$=w(()=>{C8();bG();PL();S51();LQ6=new Set(["complete","errored","terminated","unknown"]),BN=new U1;BN.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});BN.use("/link-token/*",My$);BN.use("/suggest",My$);BN.get("/site/:domain",async($)=>{let Z=$.req.param("domain").trim();if(!Z)return $.json({error:"domain is required"},400);let X=$.get("reportUser"),Q=$.req.query("key")?.trim()||void 0,Y=$.req.query("lang")?.trim()||void 0;try{let G=await DQ6(Z,Q,Y);if($.header("Cache-Control","private, no-store"),X||!G.deck)return $.json(G);return $.json({...G,deck:{...G.deck,slides:G.deck.slides.slice(0,1)},truncated:G.status==="ready"})}catch{return $.json({error:"report read failed"},502)}});BN.post("/run",async($)=>{let Z=$.get("reportUser"),X;try{X=await $.req.json()}catch{return $.json({error:"invalid JSON"},400)}let Q=typeof X.domain==="string"?X.domain.trim():"";if(!Q)return $.json({error:"domain is required"},400);let Y=Z?.email,G=typeof X.distinctId==="string"&&X.distinctId.trim()&&X.distinctId.length<=200?X.distinctId.trim():void 0;try{let J=await _r("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${zL({})}`},body:JSON.stringify({url:Q,...Y?{email:Y}:{},distinct_id:G})});if(!J.ok)return $.json({error:`run HTTP ${J.status}`},502);let W=await J.json(),K=W.blocked?{state:"blocked"}:W.status==="fresh"?{state:"fresh"}:W.mode==="sync"?{state:"sync"}:{state:"running",id:W.id??null};return $.json(K)}catch{return $.json({error:"run failed"},502)}});BN.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let X=await _r(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${zL({})}`}});if(!X.ok)return $.json({error:`status HTTP ${X.status}`},502);let Y=(await X.json()).status??"unknown",G={done:LQ6.has(Y),status:Y};return $.json(G)}catch{return $.json({error:"status failed"},502)}});BN.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let X=await _r(`/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)}});BN.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let X=await _r(`/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:[]})}});ky$=BN});import{createHmac as EQ6,timingSafeEqual as jQ6}from"crypto";function Cy$($,Z,X,Q=Date.now()){if(!Z||!X)return!1;let Y,G=[];for(let H of Z.split(",")){let F=H.indexOf("=");if(F<=0)continue;let N=H.slice(0,F).trim(),U=H.slice(F+1).trim();if(N==="t")Y=U;else if(N==="v1")G.push(U)}if(!Y||G.length===0)return!1;let J=Number(Y);if(!Number.isFinite(J)||Math.abs(Q/1000-J)>zQ6)return!1;let W=EQ6("sha256",X).update(`${Y}.${$}`).digest("hex"),K=Buffer.from(W,"hex");return G.some((H)=>{let F=Buffer.from(H,"hex");return K.length===F.length&&jQ6(K,F)})}function _y$($){let Z;try{Z=JSON.parse($)}catch{return null}let X=DJ(Z),Q=DJ(DJ(X?.data)?.object);if(!X||typeof X.type!=="string"||!Q)return null;return{id:oK(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 vy$($){switch($){case"active":case"trialing":return"active";case"past_due":return"past_due";default:return"canceled"}}function oK($){return typeof $==="string"?$:void 0}function DJ($){return typeof $==="object"&&$!==null?$:void 0}function HP0($){return typeof $==="number"?new Date($*1000):null}function _51($){return oK($)??oK(DJ($)?.id)}function PQ6($){return _51($.subscription)??oK(DJ(DJ($.parent)?.subscription_details)?.subscription)}function AQ6($){let Z=HP0($.current_period_end);if(Z)return Z;let X=DJ($.items)?.data;if(!Array.isArray(X))return null;let Q=0;for(let Y of X){let G=DJ(Y)?.current_period_end;if(typeof G==="number"&&G>Q)Q=G}return Q>0?new Date(Q*1000):null}function V51($,Z){let X=HP0($.created);return!!X&&!!Z.lastStripeEventAt&&X<Z.lastStripeEventAt}function C51($,Z){let X=HP0($.created);if(!X)return;return Z.lastStripeEventAt&&Z.lastStripeEventAt>X?void 0:X}async function TQ6($,Z){let X=Z.data.object;switch(Z.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":{let Q=oK(DJ(X.metadata)?.orgId);if(!Q)return{handled:!1,reason:"no orgId"};if(oK(DJ(X.metadata)?.kind)==="topup"){if(X.mode!=="payment")return{handled:!1,reason:"topup with wrong mode"};if(oK(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let J=oK(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(DJ(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:DJ(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(oK(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let Y=await $.getBilling(Q);if(!Y)return{handled:!1,reason:"unknown org"};let G=_51(X.subscription);if(Y.stripeSubscriptionId&&G&&Y.stripeSubscriptionId!==G)return console.error("stripe webhook: refused checkout rebind",{organizationId:Q,eventId:Z.id}),{handled:!1,reason:"org already bound to another subscription",orphanSubscriptionId:G};if(V51(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Q,{stripeCustomerId:_51(X.customer),stripeSubscriptionId:G,status:"active",lastStripeEventAt:C51(Z,Y)}),{handled:!0,organizationId:Q}}case"customer.subscription.updated":case"customer.subscription.deleted":{let Q=oK(X.id);if(!Q)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(Q);if(!Y)return{handled:!1,reason:"unknown subscription"};let G=Z.type==="customer.subscription.deleted";if(!G&&V51(Z,Y))return{handled:!1,reason:"stale event"};let J=G?"canceled":vy$(X.status);return await $.updateStripeState(Y.organizationId,{status:J,currentPeriodEnd:AQ6(X),...G&&{stripeSubscriptionId:null},lastStripeEventAt:C51(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}case"invoice.paid":{let Q=PQ6(X);if(!Q)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(Q);if(!Y)return{handled:!1,reason:"unknown subscription"};if(V51(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Y.organizationId,{status:"active",currentPeriodEnd:HP0(X.period_end),lastStripeEventAt:C51(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}default:return{handled:!1,reason:`unhandled event ${Z.type}`}}}function RQ6($,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:vy$(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 Vy$($,Z){let X=RQ6($,Z);if(!X)return;TY({event:X.name,organizationId:X.organizationId,...$.id?{uuid:Cm1(`stripe:${$.id}:${X.name}`)}:{},...$.created?{timestamp:new Date($.created*1000)}:{},properties:X.properties})}async function fy$($){let Z=new yW(m8().db),X=await TQ6(Z,$);if(!(X.handled&&X.topUp))Vy$($,X);if(X.handled&&X.topUp)await oO$({organizationId:X.organizationId,amountCents:X.topUp.creditCents,referenceId:X.topUp.referenceId}),Vy$($,X);if(!X.handled&&X.orphanSubscriptionId)try{await mr1(X.orphanSubscriptionId),console.error("stripe webhook: canceled orphan subscription",{subscriptionId:X.orphanSubscriptionId,eventId:$.id})}catch(Q){if(!(Q instanceof SY&&(Q.status===400||Q.status===404)))throw Q}return X}var zQ6=300;var by$=w(()=>{VG();q4();f40();VL();na0()});var IQ6=1048576,v51;var xy$=w(()=>{C8();Xw();P$();by$();v51=new U1;v51.post("/webhook",BZ({maxSize:IQ6,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=b0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let X=await $.req.text();if(!Cy$(X,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let Y=_y$(X);if(!Y)return $.json({error:"invalid payload"},400);let G=await fy$(Y);return console.log("stripe webhook",{eventId:Y.id,type:Y.type,livemode:Y.livemode,...G}),$.json({received:!0})})});import{timingSafeEqual as qQ6}from"crypto";function kQ6($,Z,X){if(!Z?.startsWith("sha256="))return!1;let Q=new Bun.CryptoHasher("sha256",X).update($).digest("hex"),Y=Z.slice(7);if(Y.length!==Q.length)return!1;return qQ6(Buffer.from(Y),Buffer.from(Q))}var MQ6=5242880,f51;var yy$=w(()=>{C8();Xw();Jn();f51=new U1;f51.post("/webhook",BZ({maxSize:MQ6,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(!kQ6(X,$.req.header("x-hub-signature-256"),Z))return $.json({error:"invalid signature"},400);if($.req.header("x-github-event")!=="push")return $.json({ok:!0,ignored:"event"});let Q;try{Q=JSON.parse(X)}catch{return $.json({error:"invalid payload"},400)}let Y=Q.ref,G=Q.repository?.full_name;if(!Y||!G)return $.json({ok:!0,ignored:"shape"});let W=(await wi0())?.markTenantPoolsDirty(G,Y)??[];return $.json({ok:!0,pools:W})})});function gy$($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var hy$,SQ6,VQ6,uy$;var cy$=w(()=>{C8();Y3();$y();eb();hy$=new U1,SQ6=["range","if-none-match","if-modified-since"],VQ6=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];hy$.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),X=Z.organization?.id;if(!Z.auth?.user?.id){if($h($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new e1(401,{message:"Authentication required"})}if(!X)throw new e1(401,{message:"Organization context required"});let Q=$.req.path.replace(/^.*\/files\//,"");if(!Q)throw new e1(400,{message:"Missing file key"});let Y=await yn(Q,Z);if(!Y)throw new e1(503,{message:"Object storage not configured"});if(Y.startsWith("data:")&&H3()){let K=Y.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new e1(500,{message:"Invalid data URL from storage"});let[,H,F]=K,N=Buffer.from(F,"base64"),U=new Headers({"Content-Type":H,"Cache-Control":"private, max-age=86400"});return gy$(U,H),new Response(N,{status:200,headers:U})}let G=new Headers;for(let K of SQ6){let H=$.req.header(K);if(H)G.set(K,H)}let J=await fetch(Y,{headers:G});if(J.status===403||J.status===404)throw new e1(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 e1(502,{message:"Upstream storage error"});let W=new Headers;for(let K of VQ6){let H=J.headers.get(K);if(H)W.set(K,H)}return W.set("Cache-Control","private, max-age=86400"),gy$(W,W.get("content-type")??""),new Response(J.body,{status:J.status,headers:W})});uy$=hy$});var vr=C((O_)=>{var CQ6=O_&&O_.__createBinding||(Object.create?function($,Z,X,Q){if(Q===void 0)Q=X;var Y=Object.getOwnPropertyDescriptor(Z,X);if(!Y||("get"in Y?!Z.__esModule:Y.writable||Y.configurable))Y={enumerable:!0,get:function(){return Z[X]}};Object.defineProperty($,Q,Y)}:function($,Z,X,Q){if(Q===void 0)Q=X;$[Q]=Z[X]}),_Q6=O_&&O_.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))CQ6(Z,$,X)};Object.defineProperty(O_,"__esModule",{value:!0});_Q6(KY(),O_)});var my$=C((ly$)=>{Object.defineProperty(ly$,"__esModule",{value:!0});ly$.version=void 0;ly$.version="3.4.0"});var py$=C((rK)=>{var vQ6=rK&&rK.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(rK,"__esModule",{value:!0});rK.NodeTransport=rK.VERSION=void 0;rK.nodeResolveHost=hQ6;var p6=vr(),fQ6=z0("net"),b51=z0("tls"),bQ6=z0("path"),iy$=z0("fs"),xQ6=vQ6(z0("dns")),yQ6=my$();rK.VERSION=yQ6.version;var gQ6="nats.js";class ny${socket;version;lang;yields=[];signal=(0,p6.deferred)();closedNotification=(0,p6.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=gQ6,this.version=rK.VERSION}async connect($,Z){this.tlsName=$.tlsName,this.options=Z;let{tls:X}=this.options,{handshakeFirst:Q}=X||{};try{if(Q===!0)this.socket=await this.tlsFirst($);else this.socket=await this.dial($);if(this.done)this.socket?.destroy();let Y=await this.peekInfo();(0,p6.checkOptions)(Y,Z);let{tls_required:G,tls_available:J}=Y,W=J===!0&&Z.tls!==null;if(!Q&&(G||W))this.socket=await this.startTLS();if(this.done)this.socket?.destroy();if(G&&this.socket.encrypted!==!0)throw p6.errors.InvalidArgumentError.format("tls","is not available on this server");return this.connected=!0,this.setupHandlers(),this.signal.resolve(),Promise.resolve()}catch(Y){let G=Y;if(!G)G=new p6.errors.ConnectionError("error connecting - node provided an undefined error");let{code:J}=G,W=J==="ECONNREFUSED"?new p6.errors.ConnectionError("connection refused",{cause:G}):G;throw this.socket?.destroy(),W}}dial($){let Z=(0,p6.deferred)(),X,Q=(0,fQ6.createConnection)($.port,$.hostname,()=>{Z.resolve(Q),Q.removeAllListeners()});return Q.on("error",(Y)=>{X=Y}),Q.on("close",()=>{Q.removeAllListeners(),Z.reject(X)}),Q.setNoDelay(!0),Z}get isClosed(){return this.done}close($){return this._closed($,!1)}peekInfo(){let $=(0,p6.deferred)(),Z;return this.socket.on("data",(X)=>{this.yields.push(X);let Q=p6.DataBuffer.concat(...this.yields),Y=(0,p6.extractProtocolMessage)(Q);if(Y!=="")try{let G=p6.INFO.exec(Y);if(!G)throw Error("unexpected response from server");let J=JSON.parse(G[1]);$.resolve(J)}catch(G){$.reject(G)}finally{this.socket.removeAllListeners()}}),this.socket.on("error",(X)=>{Z=X}),this.socket.on("close",()=>{this.socket.removeAllListeners(),$.reject(Z)}),$}loadFile($){if(!$)return Promise.resolve();let Z=(0,p6.deferred)();try{if($=(0,bQ6.resolve)($),!(0,iy$.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,iy$.readFile)($,(X,Q)=>{if(X)return Z.reject(X);Z.resolve(Q)})}catch(X){Z.reject(X)}return Z}async loadClientCerts(){let $={},{certFile:Z,cert:X,caFile:Q,ca:Y,keyFile:G,key:J}=this.options.tls;try{if(Z){let W=await this.loadFile(Z);if(W)$.cert=W}else if(X)$.cert=X;if(G){let W=await this.loadFile(G);if(W)$.key=W}else if(J)$.key=J;if(Q){let W=await this.loadFile(Q);if(W)$.ca=[W]}else if(Y)$.ca=Y;return Promise.resolve($)}catch(W){return Promise.reject(W)}}async tlsFirst($){let Z,X={servername:this.tlsName,rejectUnauthorized:!0};if(this.socket)X.socket=this.socket;if(typeof this.options.tls==="object")try{let Y=await this.loadClientCerts()||{};X=(0,p6.extend)(X,this.options.tls,Y)}catch(Y){return Promise.reject(new p6.errors.ConnectionError(Y.message,{cause:Y}))}let Q=(0,p6.deferred)();try{let Y=(0,b51.connect)($.port,$.hostname,X,()=>{Y.removeAllListeners(),Q.resolve(Y)});Y.on("error",(G)=>{Z=G}),Y.on("secureConnect",()=>{if(X.rejectUnauthorized===!1)return;if(!Y.authorized)throw Y.authorizationError}),Y.on("close",()=>{Q.reject(Z),Y.removeAllListeners()}),Y.setNoDelay(!0)}catch(Y){Q.reject(new p6.errors.ConnectionError(Y.message,{cause:Y}))}return Q}async startTLS(){let $,Z={socket:this.socket,servername:this.tlsName,rejectUnauthorized:!0};if(typeof this.options.tls==="object")try{let Q=await this.loadClientCerts()||{};Z=(0,p6.extend)(Z,this.options.tls,Q)}catch(Q){return Promise.reject(new p6.errors.ConnectionError(Q.message,{cause:Q}))}let X=(0,p6.deferred)();try{let Q=(0,b51.connect)(Z,()=>{Q.removeAllListeners(),X.resolve(Q)});Q.on("error",(Y)=>{$=Y}),Q.on("secureConnect",()=>{if(Z.rejectUnauthorized===!1)return;if(!Q.authorized)throw Q.authorizationError}),Q.on("close",()=>{X.reject($),Q.removeAllListeners()})}catch(Q){X.reject(new p6.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,p6.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,p6.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 b51.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,p6.render)($)}`);let Z=(0,p6.deferred)();try{this.socket.write($,(X)=>{if(X){if(this.options.debug)console.error(`!!! ${(0,p6.render)($)}: ${X}`);return Z.reject(X)}return Z.resolve()})}catch(X){if(this.options.debug)console.error(`!!! ${(0,p6.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}}rK.NodeTransport=ny$;function hQ6($){let Z=(0,p6.deferred)();return xQ6.default.lookup($,{all:!0},(X,Q)=>{if(X){Z.reject(X);return}let Y=[];for(let G of Q)Y.push(G.address);if(Y.length===0)Y.push($);Z.resolve(Y)}),Z}});var sy$=C((ay$)=>{Object.defineProperty(ay$,"__esModule",{value:!0});ay$.connect=uQ6;var ty$=py$(),oy$=vr(),ry$=vr();function uQ6($={}){if((0,ry$.hasWsProtocol)($))return Promise.reject(ry$.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,oy$.setTransportFactory)({factory:()=>{return new ty$.NodeTransport},dnsResolveFn:ty$.nodeResolveHost}),oy$.NatsConnectionImpl.connect($)}});var ey$=C((wN)=>{var lQ6=wN&&wN.__createBinding||(Object.create?function($,Z,X,Q){if(Q===void 0)Q=X;var Y=Object.getOwnPropertyDescriptor(Z,X);if(!Y||("get"in Y?!Z.__esModule:Y.writable||Y.configurable))Y={enumerable:!0,get:function(){return Z[X]}};Object.defineProperty($,Q,Y)}:function($,Z,X,Q){if(Q===void 0)Q=X;$[Q]=Z[X]}),dQ6=wN&&wN.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))lQ6(Z,$,X)};Object.defineProperty(wN,"__esModule",{value:!0});wN.connect=void 0;var mQ6=sy$();Object.defineProperty(wN,"connect",{enumerable:!0,get:function(){return mQ6.connect}});dQ6(vr(),wN)});function Qg$($){let Z=$?.connectFn??tQ6,X=null,Q=null,Y=!1,G=!1,J=!1,W=[];function K(){return X!==null&&!X.isClosed()&&!X.isDraining()&&!J}function H(){console.log(`[NatsProvider] fireReady: ${W.length} callbacks`);for(let U of W)try{U()}catch{}}function F(U){(async()=>{for await(let O of U.status())if(O.type==="disconnect")console.log("[NatsProvider] Disconnected"),J=!0;else if(O.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),J=!1,Q=null,H()})().catch(()=>{})}async function N(U,O){let B=0;while(!G)try{X=await Z({servers:U,timeout:pQ6,reconnect:!0,maxReconnectAttempts:-1,...O?{authenticator:O}:{}}),console.log(`[NatsProvider] Connected to ${X.getServer()} after ${B} attempt(s)`),Q=null,J=!1,F(X),H();return}catch{B++;let D=lZ(nQ6,iQ6,B-1,2,0.5);await I$(D)}}return{init(U,O){if(Y)return;Y=!0,G=!1;let B=O?.creds?$g$.credsAuthenticator(new TextEncoder().encode(O.creds)):void 0;N(U,B).catch(()=>{})},isConnected(){return K()},getConnection(){return K()?X:null},getJetStream(){if(!K())return null;if(!Q)Q=Xg$.jetstream(X);return Q},onReady(U){if(W.push(U),K())try{U()}catch{}},async drain(){if(G=!0,Y=!1,Q=null,J=!1,X){let U=X;X=null,await U.drain().catch(()=>{})}}}}function tQ6($){return Zg$.connect($)}var $g$,Zg$,Xg$,iQ6=100,nQ6=3000,pQ6=3000;var Yg$=w(()=>{t4();$g$=S(rh(),1),Zg$=S(ey$(),1),Xg$=S(Iw(),1)});function x51($,Z){return`${$}.${Z}`}class y51{cache;constructor($){this.cache=lg({ttlMs:$?.ttlMs??oQ6,maxSize:$?.maxSize??rQ6})}async get($,Z){return this.cache.get(x51($,Z))??null}async set($,Z,X){this.cache.set(x51($,Z),X)}async invalidate($,Z){this.cache.delete(x51($,Z))}teardown(){this.cache.clear()}}var oQ6=600000,rQ6=5000;var Gg$=()=>{};function FP0($,Z){return`${$}:${Z}`}function g51($){let Z=lg({ttlMs:$?.ttlMs??aQ6,maxSize:$?.maxSize??sQ6}),X=$?.getConnection,Q=crypto.randomUUID(),Y=new TextEncoder,G=new TextDecoder,J=null;function W(K,H){let F=X?.();if(!F)return;try{F.publish(Jg$,Y.encode(JSON.stringify({organizationId:K,keyId:H,originId:Q})))}catch(N){console.warn("[ProviderKeyCache] Publish failed (non-critical):",N)}}return{get(K,H){return Z.get(FP0(K,H))},set(K,H,F){Z.set(FP0(K,H),F)},invalidate(K,H){Z.delete(FP0(K,H)),W(K,H)},start(){if(J)return;let K=X?.();if(!K)return;J=K.subscribe(Jg$),(async()=>{for await(let H of J)try{let F=JSON.parse(G.decode(H.data));if(F.originId===Q)continue;Z.delete(FP0(F.organizationId,F.keyId))}catch{}})().catch(console.error)},teardown(){J?.unsubscribe(),J=null,Z.clear()}}}var Jg$="studio.ai-provider-keys.invalidate",aQ6=30000,sQ6=5000;var Wg$=()=>{};class h51{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=Kg$.map((Q)=>Z.subscribe(Q));for(let Q of this.subscriptions)(async()=>{for await(let Y of Q)try{let G=JSON.parse(X.decode(Y.data));if(G.originId===this.originId)continue;if(G.messageId&&this.hasSeen(G.messageId))continue;this.onCancel?.(G.taskId)}catch{}})().catch(console.error)}broadcast($){if(/[.*>\s]/.test($)){console.warn("[NatsCancelBroadcast] Invalid threadId, skipping broadcast");return}this.onCancel?.($);try{let Z=this.options.getConnection();if(!Z)return;let X=this.encoder.encode(JSON.stringify({taskId:$,originId:this.originId,messageId:crypto.randomUUID()}));for(let Q of Kg$)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 Kg$;var Hg$=w(()=>{Kg$=["studio.decopilot.cancel","mesh.decopilot.cancel"]});var Fg$=($)=>{let Z;return()=>Z??=$()},u51,c51;var Ng$=w(()=>{f6();u51=Fg$(()=>S$.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),c51=Fg$(()=>S$.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function GY6(){return{name:fF,subjects:[`${_B0}.>`],storage:s3.StorageType.File,max_age:ZY6,max_bytes:QY6,max_msgs_per_subject:YY6,discard:s3.DiscardPolicy.Old,retention:s3.RetentionPolicy.Limits,duplicate_window:XY6,num_replicas:1}}class Bg${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 Ug$($){let Z=Og$.headers();for(let[X,Q]of Object.entries($))Z.set(X,Q);return Z}function HY6($,Z){let X=0;return{publish(Q,Y,G,J){Q.publish(Y,G,J?{headers:J}:void 0).catch((W)=>{if(X++,$Y6().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 FY6($){if(!($ instanceof Error))return!1;if($.name==="TimeoutError")return!0;return/timeout|no responders|503/i.test($.message)}class l51{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=GY6(),X=await dZ(async()=>{let Q=this.options.getJetStreamManager?await this.options.getJetStreamManager():await s3.jetstreamManager($);try{await Q.streams.info(fF),await Q.streams.update(fF,Z)}catch(Y){if(Y instanceof Error&&Y.message.includes("stream not found"))await Q.streams.add(Z);else if(Y instanceof Error&&/can ?not change.*storage|storage type/i.test(Y.message))await Q.streams.delete(fF),await Q.streams.add(Z);else throw Y}return Q},{maxAttempts:5,minTimeout:250,maxTimeout:4000,jitter:0.5,isRetriable:FY6});this.js=this.options.getJetStream(),this.jsm=X,console.log(`[Decopilot] StreamBuffer.init ${this.js?"ready":"degraded (js=null)"}`)}pump($,Z,X,Q){let Y=this.js;if(!Y)return console.warn(`[Decopilot] pump: JetStream client unavailable for thread ${Z}; chunks NOT published to NATS`),Promise.resolve();let G=HY6(Z,Q),J=!1,W=()=>{if(J)return;J=!0;let H=MK$(Z);Y.publish(H.subject,H.data).catch(()=>{})};X.addEventListener("abort",W,{once:!0});let K=(H)=>{let F=performance.now(),N=hp0(H,{runId:Z}),U=performance.now()-F;if(u51().record(U),c51().add(1,{"org.id":Q??"unknown"}),KY6?.record(U,N.reduce((O,B)=>O+B.data.length,0)),N.length===0){console.warn(`[Decopilot] dropping oversized stream chunk for thread ${Z}`);return}for(let O of N)G.publish(Y,O.subject,O.data,O.headers?Ug$(O.headers):void 0)};return(async()=>{let H=$.getReader(),F=0,N=0,U;try{while(!0){let{done:O,value:B}=await H.read();if(O)break;if(K(B),N++,++F>=64)F=0,await new Promise((D)=>setImmediate(D))}}catch(O){U=O,console.warn(`[Decopilot] stream pump error for thread ${Z}:`,O?.message??O)}finally{if(H.releaseLock(),W(),WY6)console.warn(JSON.stringify({msg:"decopilot-stream-diag",event:"pump-done",taskId:Z,publishedChunks:N,publishErrors:G.errorCount}))}if(U!==void 0)throw U})()}async publishRawChunk($,Z,X){let Q=this.js;if(!Q)return!1;let Y=performance.now(),G=hp0(Z,{runId:$,dedup:X});if(u51().record(performance.now()-Y),c51().add(1),G.length===0)return console.warn(`[Decopilot] dropping oversized raw chunk for thread ${$} (> MAX_CHUNKED_BYTES)`),!0;for(let J of G)await Q.publish(J.subject,J.data,{...J.headers?{headers:Ug$(J.headers)}:{},...J.msgId?{msgID:J.msgId}:{}});return!0}async publishDone($,Z,X){let Q=this.js;if(!Q)return!1;let Y=qK$({runId:$,fenceToken:Z,finalSeq:X});return await Q.publish(Y.subject,Y.data,{msgID:Y.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 Y=X?.deliverPolicy==="new"?s3.DeliverPolicy.New:s3.DeliverPolicy.All,G=X?.closeOnDone??!1,J=BB($),W;try{W=await(await Q.consumers.get(fF,{filter_subjects:J,deliver_policy:Y})).consume()}catch(D){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",D?.message??D),null}let F=yB0({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(vB0()).pipeThrough(fB0()).getReader(),N=!1,U=()=>{if(N)return;N=!0;try{F.releaseLock()}catch{}},O=!1,B=()=>{if(O)return;O=!0,W.stop(),F.cancel().catch(()=>{}),U()};return Z?.addEventListener("abort",B,{once:!0}),new ReadableStream({async pull(D){for(;;){let{done:L,value:E}=await F.read();if(L){B(),D.close();return}let j=E;if(j.kind==="done"){if(G){B(),D.close();return}continue}D.enqueue(j.chunk);return}},cancel(){B()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge(fF,{filter:BB($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var s3,Og$,eQ6=($)=>{let Z;return()=>Z??=$()},$Y6,ZY6=86400000000000,XY6=120000000000,QY6=4294967296,YY6=500000,JY6,WY6,KY6;var wg$=w(()=>{t4();up0();gB0();bB0();f6();Ng$();s3=S(Iw(),1),Og$=S(rh(),1),$Y6=eQ6(()=>S$.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"}));JY6=process.env.STREAM_ENCODE_TRACE==="1",WY6=process.env.DECOPILOT_STREAM_TRACE==="1";KY6=JY6?new Bg$:null});function NP0($,Z,X,Q){if(!Q)return!1;return $.emit(Z,zW(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 Dg$=w(()=>{L8()});class d51{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 LY6($){return $ instanceof i7}function EY6($,Z){return Z-$>=wY6}class m51{taskBoard;contextFactory;billing;options;timer=null;running=!1;cursor=null;constructor($,Z,X,Q={}){this.taskBoard=$;this.contextFactory=Z;this.billing=X;this.options=Q}start(){if(this.timer)return;let $=this.options.intervalMs??NY6;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??OY6,X=this.options.itemIntervalMs??UY6,Q=new Date(Date.now()-X),Y=await this.taskBoard.listItemsPendingReview(Z,this.cursor,Q),G=Y.at(-1);this.cursor=Y.length===Z&&G?{updatedAt:G.updatedAt,id:G.id}:null;for(let{id:J,organizationId:W}of Y)try{if(await this.reconcileItem(J,W,Q))$++}catch(K){console.error(`[task-board-review-sweeper] ${J} failed`,K)}await this.reapNeverStartedThreads(Z),$+=await this.dispatchDueRetries(Z),await this.reactToUnhandledFailures(Z)}catch(Z){console.error("[task-board-review-sweeper] sweep failed",Z)}finally{this.running=!1}return $}async reapNeverStartedThreads($){try{let Z=await this.taskBoard.failNeverStartedLinkedThreads($,new Date(Date.now()-A3$),It0);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()-DY6));for(let{id:X,organizationId:Q,threadId:Y}of Z)try{console.warn(`[task-board-review-sweeper] reacting to an unhandled failure on ${X}`),await Wp0(this.taskBoard,Y,Q),await Kp0(this.taskBoard,this.billing,Y,Q)}catch(G){console.error(`[task-board-review-sweeper] unhandled-failure reaction for ${X} failed`,G)}}async dispatchDueRetries($){let Z=0,X=await this.taskBoard.listItemsDueForRetry($,new Date);for(let{id:Q,organizationId:Y,attempts:G}of X)try{if(!await this.taskBoard.claimDueRetry(Q,Y,new Date))continue;let J=await this.taskBoard.getById(Q,Y);if(!J||J.status!=="in_progress"||J.assigneeId!==E4)continue;let W=await this.contextFactory(Y,J.assignedBy??J.createdBy);if(!W)continue;await bF(W,J,{runClass:"retry"}),Z++,console.warn(`[task-board-review-sweeper] re-dispatched ${Q} after a failure (attempt ${G})`)}catch(J){if(console.error(`[task-board-review-sweeper] retry dispatch for ${Q} failed`,J),LY6(J)){await this.returnToTodo(Q,Y,J instanceof Error?J.message:String(J));continue}await this.taskBoard.scheduleRunRetry(Q,Y,G,new Date(Date.now()+BY6)).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 Y=await this.taskBoard.returnToTodoAfterFailure($,Z,Q.updatedBy);if(!Y)return;await this.taskBoard.recordActivity({taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:"in_progress",to:"todo",reason:X}}).catch(()=>{}),p8(Z,Y)}catch(Q){console.error(`[task-board-review-sweeper] returning ${$} to todo failed`,Q)}}async handOffReviewWithoutPr($,Z){let X=await this.taskBoard.listActivity(Z.id,Z.organizationId);if(!EY6(KF(X),Date.now()))return;await EK($,Z,"no pull request is linked to this task \u2014 there is nothing for a "+"reviewer to review")}async reconcileItem($,Z,X){if(!await this.taskBoard.claimSweep($,Z,X))return!1;let Q=await this.taskBoard.getById($,Z);if(!Q)return!1;if(Q.status!=="in_review")return!1;let Y=Q.assigneeId===E4,G=await this.taskBoard.listPrs($,Z),J=await this.contextFactory(Z,Q.assignedBy??Q.createdBy);if(!J)return!1;if(G.length===0){if(Y)await this.handOffReviewWithoutPr(J,Q);return!1}if(await uH$(J,Q))return!0;if(!Y)return!1;let W=await Promise.all(G.map(async(K)=>({...K,...await Uy(Z,K)})));if(W.every((K)=>K.state===null))console.warn(`[task-board-review-sweeper] ${$}: no live PR state from GitHub (${W.length} PR(s)) \u2014 proceeding on unknown`);if(!Pt0(W))return!1;return await mB0(J,Q,{previewMatchesHead:At0(W)}),!0}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}var NY6=60000,UY6=300000,OY6=50,BY6=60000,wY6=900000,DY6=120000;var Lg$=w(()=>{e9();Ot0();wB();Xp();P9();B3();qt0();zK();an()});import{readdir as jY6,rm as UP0}from"fs/promises";import{join as OP0}from"path";async function BP0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-zY6),Z.setUTCHours(0,0,0,0);let X=0;try{let Q=await B_($);for(let Y of Q)if(/^\d{4}$/.test(Y))X+=await Eg$($,Y,Z);else if(!Y.startsWith(".")){let G=OP0($,Y),J=await B_(G);for(let K of J){if(!/^\d{4}$/.test(K))continue;X+=await Eg$(G,K,Z)}if((await B_(G)).length===0)await UP0(G,{recursive:!0,force:!0})}}catch(Q){console.warn("monitoring retention cleanup failed:",Q)}return X}async function Eg$($,Z,X){let Q=0,Y=OP0($,Z),G=await B_(Y);for(let W of G){if(!/^\d{2}$/.test(W))continue;let K=OP0(Y,W),H=await B_(K);for(let N of H){if(!/^\d{2}$/.test(N))continue;let U=new Date(`${Z}-${W}-${N}T00:00:00Z`);if(isNaN(U.getTime()))continue;if(U<X){let O=OP0(K,N);await UP0(O,{recursive:!0,force:!0}),Q++}}if((await B_(K)).length===0)await UP0(K,{recursive:!0,force:!0})}if((await B_(Y)).length===0)await UP0(Y,{recursive:!0,force:!0});return Q}async function B_($){try{return(await jY6($)).filter((X)=>!X.startsWith("."))}catch{return[]}}var zY6=30;var i51=()=>{};import{DBOS as n51,SchedulerMode as PY6}from"@dbos-inc/dbos-sdk";async function TY6(){let $=[PJ(),D_(),eK()],Z=0;for(let X of $)try{Z+=await BP0(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 RY6($,Z){await n51.runStep(()=>TY6(),{name:"monitoringRetention"})}function zg$(){if(jg$)return;jg$=!0;let $=n51.registerWorkflow(RY6,{name:"monitoringRetentionWorkflow"});n51.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:AY6,mode:PY6.ExactlyOncePerIntervalWhenActive})}var AY6="23 4 * * *",jg$=!1;var Pg$=w(()=>{YY();i51()});function Ag$($){return async(Z,X)=>{let Q=await $.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["member.role","organization.id as orgId","organization.slug as orgSlug","organization.name as orgName"]).where("member.userId","=",X).where("member.organizationId","=",Z).executeTakeFirst();if(!Q)return console.warn(`[automationContextFactory] User ${X} not found in org ${Z} \u2014 returning null`),null;let Y=await oG.create();Y.auth.user={id:X,role:Q.role},Y.organization={id:Q.orgId,slug:Q.orgSlug,name:Q.orgName};let G=await t81($.db,Z,Q.role);return Y.boundAuth=p81({auth:Y.authInstance,headers:new Headers,role:Q.role,permissions:G,userId:X}),Y.access=new QL(X,void 0,Y.boundAuth,Q.role,"self"),DB(Y,{id:Q.orgId,slug:Q.orgSlug}),Y}}var Tg$=w(()=>{YL();nV()});function IY6(){return{services:[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}],migrationsStatus:"pending",serverUrl:null,logs:[]}}function MY6(){for(let $ of qY6)$()}function Rg$($){let Z=[...p51.logs,$];p51={...p51,logs:Z.length>500?Z.slice(-500):Z},MY6()}function t51(){return kY6}var p51,qY6,kY6=!1;var o51=w(()=>{p51=IY6(),qY6=new Set});import{EventEmitter as SY6}from"events";var r51;var Ig$=w(()=>{o51();r51=new SY6;r51.on("request",($)=>{Rg$($)})});function qg$(){return async($,Z)=>{let X=Date.now(),Q=$.req.method,Y=$.req.path;if(Y==="/api/auth/get-session"||Y.includes("favicon")){await Z();return}let G="",J=!1;if(Y.startsWith("/mcp")&&Q==="POST"){J=!0;try{if($.req.header("Content-Type")?.includes("application/json")){let U=await $.req.raw.clone().json();if(U.method==="tools/call"&&U.params?.name){let O=qh(U.params.name),B=U.params.arguments||{},D=Object.keys(B).map((E)=>qh(E)),L=D.length>0?D.slice(0,3).join(",")+(D.length>3?"\u2026":""):"";G=`${Q5.tool}${O}${Q5.dim}(${L})${Q5.reset}`}else if(U.method)G=`${Q5.dim}${qh(U.method)}${Q5.reset}`}}catch{}}let W=qh(Y);if(Y.startsWith("/mcp/conn_")){let F=Y.split("/")[2]??"";W=`/mcp/${Q5.mcp}${qh(F.slice(0,12))}\u2026${Q5.reset}`}else if(Y==="/mcp")W=`${Q5.mcp}/mcp${Q5.reset}`;else if(Y==="/mcp/registry")W=`${Q5.mcp}/mcp/registry${Q5.reset}`;let K=CY6(Q),H=J?"\u25C0":"\u2190";if(!t51())console.log(`${Q5.dim}${H}${Q5.reset} ${K}${Q}${Q5.reset} ${W}${G?` ${G}`:""}`);try{await Z()}finally{let F=Date.now()-X,N=$.res.status,U=VY6(N),O=F<1000?`${F}ms`:`${(F/1000).toFixed(1)}s`,B=J?"\u25B6":"\u2192";if(!t51())console.log(`${Q5.dim}${B}${Q5.reset} ${K}${Q}${Q5.reset} ${W}${G?` ${G}`:""} ${U}${N}${Q5.reset} ${Q5.duration}${O}${Q5.reset}`);r51.emit("request",{method:Q,path:qh(Y),status:N,duration:F,timestamp:new Date})}}}var Q5,VY6=($)=>{if($>=500)return Q5.serverError;if($>=400)return Q5.clientError;if($>=300)return Q5.redirect;return Q5.ok},CY6=($)=>{return Q5[$]||Q5.reset},qh=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var Mg$=w(()=>{o51();Ig$();Q5={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 Cg$}from"crypto";import{mkdir as _Y6,readdir as vY6,rm as kg$,stat as _g$}from"fs/promises";import{join as s51,relative as fY6}from"path";import{z as E$}from"zod";function fg$($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return s51(bY6,Z)}function bg$($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function a51($,Z){let X=fg$($),Q=bg$(Z);return s51(X,Q)}function xY6($,Z,X,Q){let Y=b0().encryptionKey||"dev-secret",G=`${$}:${Z}:${X}:${Q}`;return Cg$("sha256",Y).update(G).digest("hex")}function Vg$($,Z,X,Q,Y){let G=Math.floor(Date.now()/1000)+Q,J=xY6(Z,X,G,Y),W=new URL(`/api/dev-assets/${Z}/${bg$(X)}`,$);return W.searchParams.set("expires",G.toString()),W.searchParams.set("signature",J),W.searchParams.set("method",Y),W.toString()}function xg$($,Z,X){let Q=`${$}:${Z.getTime()}:${X}`;return`"${Cg$("md5","etag").update(Q).digest("hex")}"`}async function yg$($,Z,X,Q,Y){try{let G=await vY6($,{withFileTypes:!0});for(let J of G){let W=s51($,J.name),H=fY6(Z,W).replace(/\\/g,"/");if(X&&!H.startsWith(X))continue;if(J.isDirectory())if(Q){let F=H+"/";if(!X||F.startsWith(X)){if(!(X?H.slice(X.length):H).includes("/"))Y.commonPrefixes.add(F)}}else await yg$(W,Z,X,Q,Y);else if(J.isFile()){if(Q&&X){let F=H.slice(X.length);if(F.includes(Q)){let N=F.indexOf(Q),U=X+F.slice(0,N+1);Y.commonPrefixes.add(U);continue}}try{let F=await _g$(W);Y.objects.push({key:H,size:F.size,lastModified:F.mtime.toISOString(),etag:xg$(W,F.mtime,F.size)})}catch{}}}}catch{}}function gg$($,Z){let Q=t($).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(Y)=>{let G=Y,J=G.prefix||"",W=G.maxKeys??1000,K=G.delimiter,H=G.continuationToken,F=fg$(Q);await _Y6(F,{recursive:!0});let N={objects:[],commonPrefixes:new Set};await yg$(F,F,J,K,N),N.objects.sort((L,E)=>L.key.localeCompare(E.key));let U=0;if(H){if(U=N.objects.findIndex((L)=>L.key>H),U===-1)U=N.objects.length}let O=N.objects.slice(U,U+W),B=U+W<N.objects.length,D=B?O[O.length-1]?.key:void 0;return{objects:O,isTruncated:B,nextContinuationToken:D,commonPrefixes:Array.from(N.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(Y)=>{let G=Y,J=a51(Q,G.key),W=await _g$(J);return{contentType:v41(G.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:xg$(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(Y)=>{let G=Y,J=G.expiresIn??Sg$;return{url:Vg$(Z,Q,G.key,J,"GET"),expiresIn:J}}},{name:"PUT_PRESIGNED_URL",description:"Generate a presigned URL for uploading a file to local storage",inputSchema:E$.object({key:E$.string(),expiresIn:E$.number().optional(),contentType:E$.string().optional()}),outputSchema:E$.object({url:E$.string(),expiresIn:E$.number()}),handler:async(Y)=>{let G=Y,J=G.expiresIn??Sg$;return{url:Vg$(Z,Q,G.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(Y)=>{let G=Y,J=a51(Q,G.key);try{return await kg$(J),{success:!0,key:G.key}}catch{return{success:!1,key:G.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(Y)=>{let G=Y,J=[],W=[];return await Promise.all(G.keys.map(async(K)=>{let H=a51(Q,K);try{await kg$(H),J.push(K)}catch(F){W.push({key:K,message:F instanceof Error?F.message:"Unknown error"})}})),{deleted:J,errors:W}}}]}async function e51($,Z,X){let Q=gg$(Z,X),Y=new MW({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:K5});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;Y.registerTool(J.name,{description:J.description??"",inputSchema:W,outputSchema:K,annotations:J.annotations,_meta:J._meta},async(H)=>{try{let F=await J.handler(H);return{content:[{type:"text",text:JSON.stringify(F)}],structuredContent:F}}catch(F){return{content:[{type:"text",text:`Error: ${F.message}`}],isError:!0}}})}let G=new oX({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await Y.connect(G),ZJ(Y,G,$,"mcp:dev-assets")}async function hg$($,Z,X,Q){let G=gg$(X,Q).find((J)=>J.name===$);if(!G)return{content:[{type:"text",text:`Tool not found: ${$}`}],isError:!0};try{let J=await G.handler(Z);return{content:[{type:"text",text:JSON.stringify(J)}]}}catch(J){return{content:[{type:"text",text:J instanceof Error?J.message:String(J)}],isError:!0}}}var bY6="./data/assets",Sg$=3600,vg$,ug$;var cg$=w(()=>{P$();Ey();C8();Pl();aV();VX();Wz0();vg$=new U1;vg$.all("/",async($)=>{let Z=$.get("studioContext"),X=new URL($.req.url),Q=`${X.protocol}//${X.host}`;return e51($.req.raw,Z,Q)});ug$=vg$});var lg$={};N4(lg$,{mountDevRoutes:()=>yY6});function yY6($,Z){$.all("/mcp/:connectionId{.*_dev-assets$}",Z,async(Q)=>{let Y=Q.get("studioContext"),G=new URL(Q.req.url),J=`${G.protocol}//${G.host}`;return e51(Q.req.raw,Y,J)}),$.all("/mcp/:connectionId{.*_dev-assets$}/call-tool/:toolName",Z,async(Q)=>{let Y=Q.get("studioContext"),G=new URL(Q.req.url),J=`${G.protocol}//${G.host}`,W=Q.req.param("toolName");if(!W)return Q.json({error:"Missing tool name"},400);let K=await Q.req.json(),H=await hg$(W,K,Y,J);if(H.isError)return Q.json(H.content,500);return Q.json(H.content)}),$.use("/mcp/dev-assets",Z),$.route("/mcp/dev-assets",ug$);let X=new U1;X.use("*",r3({mountPath:"/api/dev-assets"})),X.route("/",Jz0({orgFromPath:!1})),$.route("/api/dev-assets",X)}var dg$=w(()=>{C8();q41();Wz0();cg$()});import{sql as gY6}from"kysely";import{randomUUID as mg$}from"crypto";import{z as hY6}from"zod";async function cY6($){let Z=new Date().toISOString(),X=mg$(),Q=u4.SELF($.organizationId),Y="registry.publish_request.created",G={requestId:$.request.id,requestedId:$.request.requested_id,title:$.request.title,status:$.request.status,createdAt:$.request.created_at,requester:{name:$.request.requester_name,email:$.request.requester_email}};await $.db.insertInto("events").values({id:X,organization_id:$.organizationId,type:"registry.publish_request.created",source:Q,specversion:"1.0",subject:$.request.id,time:Z,datacontenttype:"application/json",dataschema:null,data:JSON.stringify(G),cron:null,status:"pending",attempts:0,last_error:null,next_retry_at:null,created_at:Z,updated_at:Z}).execute();let J=await $.db.selectFrom("event_subscriptions").select(["id"]).where("organization_id","=",$.organizationId).where("enabled","=",1).where("event_type","=","registry.publish_request.created").where((W)=>W.or([W("publisher","is",null),W("publisher","=",Q)])).execute();if(J.length>0)await $.db.insertInto("event_deliveries").values(J.map((W)=>({id:mg$(),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 gY6`SELECT
|
|
2758
2758
|
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-C8hfl2Sb.js";import{I as A}from"./input-BCzroQIh.js";import{L as I}from"./label-xqR_UGot.js";import{S as z,a as J,b as O,c as V,d as $}from"./select-B3uggBuM.js";import{T as D}from"./textarea-7jbVHOJS.js";import{R as M,T as U,U as W,J as q,W as G,$ as H}from"./index-BflfHu8f.js";import{s as F}from"./primitives-1sCk15Qy.js";import{u as Q}from"./use-autosave-CKPpE0LG.js";import"./tooltip-CEPa_36I.js";import"./Check-Df9dKS9L.js";import"./ChevronDown-DZcB_Qdd.js";import"./ChevronUp-DZyfOy7c.js";import"./ArrowUp-B2f3A5eK.js";import"./chat-context-D3-ggdoV.js";import"./tab-id-CYSw5EZL.js";import"./dialog-BJ_KHNHA.js";import"./X-ZuDvXo1r.js";import"./Copy01-Blolk4fx.js";import"./hooks-Sc6_nFDK.js";import"./use-mcp-client-B-AZmNGg.js";import"./auth-DXtsM36n.js";import"./decopilot-sse-pool-BF39w-nT.js";import"./backoff-CrEUbyZT.js";import"./delay-CnY5UFtP.js";import"./use-is-desktop-app-BNujXJc_.js";import"./use-virtual-mcp-DlVUhl_E.js";import"./use-ai-providers-xVbemEUH.js";import"./studio-tools-p6uEawPA.js";import"./use-decopilot-events-UyXd8TYN.js";import"./use-organization-settings-UdFZwUZM.js";import"./automation-runs-Cm7U_XK4.js";import"./agent-icon-BatKEXoz.js";import"./AlertCircle-Ca7MM0i3.js";import"./Tool01-iiho1Sl4.js";import"./ArrowLeft-BCbgWYCu.js";import"./Tool02-D-X-sFWj.js";import"./XCircle-BZp9DxmZ.js";import"./ArrowUpRight-AkaHL8YQ.js";import"./TrendUp01-CqO6HybQ.js";import"./ZapSquare-BIfBS0jE.js";import"./Users03-CNimYJV4.js";import"./CheckCircle-CgXk3dkM.js";import"./ChevronRight-7hX3WtB8.js";import"./DotsVertical-HkNEKMnv.js";import"./Stars02-BIDF_Sxk.js";import"./CpuChip01-Bo4lHhO2.js";import"./CreditCard01-Bz0aW7-3.js";import"./Globe01-DxqX9WeP.js";import"./Settings02-DIKxh1YU.js";import"./Eye-Bb15j-a3.js";import"./FilterLines-C4xAKdXV.js";import"./Share07-CeS22SZl.js";import"./Star01-DJa2M9of.js";import"./Globe04-FCkVxKJA.js";import"./SwitchHorizontal01-BBz4vQGr.js";import"./HardDrive-Wm_09Som.js";import"./Key01-B9i7aqtI.js";import"./LayoutLeft-kJjIb0We.js";import"./LinkExternal01-Dxsdb3eS.js";import"./LogOut01-WSaitCm6.js";import"./Monitor01-DKE83_gn.js";import"./Sun-nUCXel8G.js";import"./Palette-CKBWHo1H.js";import"./Play-C9T5oLID.js";import"./Plus-8AxuNmG-.js";import"./SearchLg-Du_L7T4g.js";import"./SearchMd-B91y1qMO.js";import"./Shield01-C1f3aFCW.js";import"./Stars01-DTCZws_y.js";import"./Trash01-BLPMXZBO.js";import"./Upload01-CBSWfm8t.js";import"./User01-CH2Bkoff.js";import"./Users01--0Fvo0PW.js";import"./XClose-DdhJb5QZ.js";import"./Zap-B5X8rAwo.js";import"./useInfiniteQuery-CdvxrpQM.js";import"./use-infinite-scroll-BC840QUR.js";import"./use-connection-B6eFwnYY.js";import"./card-BrZ_JSRC.js";import"./sidebar-C-golrQD.js";import"./use-mobile-CRnOh4ez.js";import"./table-BGSVDVxS.js";import"./empty-state-CcIBIf-f.js";import"./use-members-DjCBQjzS.js";import"./use-org-auth-client-D_KM9BY2.js";import"./use-clock-tick-Csi-XroX.js";import"./use-automations-DFwfNqds.js";import"./useSuspenseInfiniteQuery-Bk7gbtRd.js";import"./avatar-fwHx5fCY.js";import"./format-time-BnbuEtat.js";import"./differenceInSeconds-NQ4PDo0z.js";import"./use-copy-Dil_9pn_.js";import"./monaco-editor-BOl_A_p1.js";import"./spinner-B0WV_YKG.js";import"./types-ruUduJPq.js";import"./shell-layout-CqchXVQo.js";import"./required-auth-layout-S7T69ii9.js";import"./use-org-sso-Dmk7hRps.js";import"./integration-icon-BmYfoH6w.js";import"./use-navigate-to-agent-CBlHam0q.js";import"./reusable-new-chat-CouMjkYR.js";import"./chart-Csbl-HGq.js";import"./index-DhfTwHGD.js";import"./form-BoqtQuSL.js";import"./file-type-icon-Q8DkZd2h.js";import"./drawer-DQW14SUE.js";import"./collection-search-xKAzSuv3.js";import"./deco-site-production-url-BjY4ZYd-.js";import"./tabs-Bvt_vQ0i.js";import"./toggle-group-DL8xUUhL.js";import"./use-deco-credits-wIrhg6Q7.js";import"./popover-ilFNSOKv.js";import"./self-tool-result-gaGqwQpi.js";import"./alert-dialog-W2c5HM_H.js";import"./extract-connection-data-NIJvjhdL.js";import"./metadata-dUsYcpuu.js";import"./provision-repo-scoped-github-connection-C2HwF4Ce.js";import"./use-debounced-value-DY4C-7Fj.js";import"./authenticate-and-persist-oauth-C04f0J6t.js";import"./mcp-oauth-CPZm-E3D.js";import"./track-DJaMCWBC.js";import"./toolbar-DekdT7JF.js";import"./skeleton-CAB9m9ue.js";import"./github-repo-picker-N3ti44LC.js";import"./use-mcp-tools-ikuB65SB.js";import"./agent-capabilities-cXfbMfjV.js";import"./connection-card-DapyRP5e.js";import"./use-registry-connections-DkjBj3jy.js";import"./retry-CErkP7V6.js";import"./connection-slug-eyAPH6o3.js";import"./connection-form-helpers-BWj-fRSg.js";import"./collection-tabs-DkjwlPpT.js";import"./badge-ByA1rI15.js";import"./use-open-billing-url-D9rQC4Lf.js";import"./select-model-6RIRsAzf.js";import"./checkbox-bHvzhYK7.js";import"./ai-providers-logos-DD3qZ33J.js";import"./settings-section-C4az5lE_.js";import"./cards-DCo7ZEX0.js";import"./dropdown-menu-3frE49ZS.js";import"./question-004-sINsf4GQ.js";import"./use-status-sounds-CG22VRth.js";import"./use-capability-CqeXASJr.js";import"./pt-BR-CLy76QW2.js";import"./switch-pL4enKbt.js";import"./use-debounced-autosave-CNKctZZk.js";import"./index-CnljP-2j.js";import"./search-input-DxkFzU2l.js";import"./index-CE64SXmE.js";import"./use-secrets-7OJ2G20N.js";import"./AreaChart-CtO3UJSP.js";import"./use-tags-l7VhCueG.js";import"./get-initials-D-f_fDFw.js";import"./command-Brrv6P0f.js";import"./index-DpkGpZe-.js";import"./use-file-configs-jnx7-dH3.js";import"./automation-list-row-JOvTRybw.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 Hr(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{Hr as RecordEditor};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/registry-layout-BOxD6qyt.js","assets/index-C8hfl2Sb.js","assets/index-Dncm6IaE.css","assets/Tool02-D-X-sFWj.js","assets/CheckCircle-CgXk3dkM.js","assets/Settings02-DIKxh1YU.js","assets/use-mcp-client-B-AZmNGg.js","assets/auth-DXtsM36n.js","assets/useInfiniteQuery-CdvxrpQM.js","assets/use-infinite-scroll-BC840QUR.js","assets/studio-tools-p6uEawPA.js","assets/badge-ByA1rI15.js","assets/input-BCzroQIh.js","assets/dropdown-menu-3frE49ZS.js","assets/Check-Df9dKS9L.js","assets/ChevronRight-7hX3WtB8.js","assets/DotsVertical-HkNEKMnv.js","assets/table-BGSVDVxS.js","assets/toggle-group-DL8xUUhL.js","assets/use-view-mode-vTvOYNAM.js","assets/use-mobile-CRnOh4ez.js","assets/FilterLines-C4xAKdXV.js","assets/Globe01-DxqX9WeP.js","assets/SearchMd-B91y1qMO.js","assets/dialog-BJ_KHNHA.js","assets/X-ZuDvXo1r.js","assets/AlertCircle-Ca7MM0i3.js","assets/Upload01-CBSWfm8t.js","assets/metadata-dUsYcpuu.js","assets/alert-dialog-W2c5HM_H.js","assets/card-BrZ_JSRC.js","assets/Trash01-BLPMXZBO.js","assets/label-xqR_UGot.js","assets/select-B3uggBuM.js","assets/tooltip-CEPa_36I.js","assets/ChevronDown-DZcB_Qdd.js","assets/ChevronUp-DZyfOy7c.js","assets/switch-pL4enKbt.js","assets/textarea-7jbVHOJS.js","assets/ArrowLeft-BCbgWYCu.js","assets/XCircle-BZp9DxmZ.js","assets/checkbox-bHvzhYK7.js","assets/Eye-Bb15j-a3.js","assets/LinkExternal01-Dxsdb3eS.js","assets/use-copy-Dil_9pn_.js","assets/Copy01-Blolk4fx.js","assets/Key01-B9i7aqtI.js","assets/Plus-8AxuNmG-.js","assets/mcp-oauth-CPZm-E3D.js","assets/Play-C9T5oLID.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{c as i,j as e,r as s,k as a,aG as o}from"./index-C8hfl2Sb.js";import{R as m}from"./require-capability-5LocJd_6.js";import"./use-capability-CqeXASJr.js";import"./access-gate-Q1zamhcg.js";import"./capability-load-error-B31isfIf.js";const n=s.lazy(()=>o(()=>import("./registry-layout-BOxD6qyt.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49])));function f(){const r=i.c(1);let t;return r[0]===Symbol.for("react.memo_cache_sentinel")?(t=e.jsx(m,{capability:"registry:manage",area:"the registry",children:e.jsx(s.Suspense,{fallback:e.jsx("div",{className:"flex-1 flex items-center justify-center",children:e.jsx(a,{size:20,className:"animate-spin text-muted-foreground"})}),children:e.jsx(n,{})})}),r[0]=t):t=r[0],t}export{f as default};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/registry-layout-BOxD6qyt.js","assets/index-C8hfl2Sb.js","assets/index-Dncm6IaE.css","assets/Tool02-D-X-sFWj.js","assets/CheckCircle-CgXk3dkM.js","assets/Settings02-DIKxh1YU.js","assets/use-mcp-client-B-AZmNGg.js","assets/auth-DXtsM36n.js","assets/useInfiniteQuery-CdvxrpQM.js","assets/use-infinite-scroll-BC840QUR.js","assets/studio-tools-p6uEawPA.js","assets/badge-ByA1rI15.js","assets/input-BCzroQIh.js","assets/dropdown-menu-3frE49ZS.js","assets/Check-Df9dKS9L.js","assets/ChevronRight-7hX3WtB8.js","assets/DotsVertical-HkNEKMnv.js","assets/table-BGSVDVxS.js","assets/toggle-group-DL8xUUhL.js","assets/use-view-mode-vTvOYNAM.js","assets/use-mobile-CRnOh4ez.js","assets/FilterLines-C4xAKdXV.js","assets/Globe01-DxqX9WeP.js","assets/SearchMd-B91y1qMO.js","assets/dialog-BJ_KHNHA.js","assets/X-ZuDvXo1r.js","assets/AlertCircle-Ca7MM0i3.js","assets/Upload01-CBSWfm8t.js","assets/metadata-dUsYcpuu.js","assets/alert-dialog-W2c5HM_H.js","assets/card-BrZ_JSRC.js","assets/Trash01-BLPMXZBO.js","assets/label-xqR_UGot.js","assets/select-B3uggBuM.js","assets/tooltip-CEPa_36I.js","assets/ChevronDown-DZcB_Qdd.js","assets/ChevronUp-DZyfOy7c.js","assets/switch-pL4enKbt.js","assets/textarea-7jbVHOJS.js","assets/ArrowLeft-BCbgWYCu.js","assets/XCircle-BZp9DxmZ.js","assets/checkbox-bHvzhYK7.js","assets/Eye-Bb15j-a3.js","assets/LinkExternal01-Dxsdb3eS.js","assets/use-copy-Dil_9pn_.js","assets/Copy01-Blolk4fx.js","assets/Key01-B9i7aqtI.js","assets/Plus-8AxuNmG-.js","assets/mcp-oauth-CPZm-E3D.js","assets/Play-C9T5oLID.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{c as m,d as n,f as c,j as t,k as f,r as l,aG as p}from"./index-C8hfl2Sb.js";import{R as u}from"./require-capability-5LocJd_6.js";import"./use-capability-CqeXASJr.js";import"./access-gate-Q1zamhcg.js";import"./capability-load-error-B31isfIf.js";const g=l.lazy(()=>p(()=>import("./registry-layout-BOxD6qyt.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49])));function j(){const e=m.c(5),i=n();let s;e[0]===Symbol.for("react.memo_cache_sentinel")?(s={from:"/shell/$org"},e[0]=s):s=e[0];const{org:o}=c(s);let r;e[1]===Symbol.for("react.memo_cache_sentinel")?(r=t.jsx("div",{className:"h-full flex items-center justify-center",children:t.jsx(f,{size:20,className:"animate-spin text-muted-foreground"})}),e[1]=r):r=e[1];let a;return e[2]!==i||e[3]!==o?(a=t.jsx(u,{capability:"registry:manage",area:"the registry",children:t.jsx(l.Suspense,{fallback:r,children:t.jsx(g,{onBack:()=>i({to:"/$org/settings/store",params:{org:o}})})})}),e[2]=i,e[3]=o,e[4]=a):a=e[4],a}export{j as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{I as u}from"./use-infinite-scroll-BC840QUR.js";import{e6 as i}from"./index-C8hfl2Sb.js";function t(e,r){return i(e,u,r)}export{t as u};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{I as s}from"./use-infinite-scroll-BC840QUR.js";import{e6 as u,b3 as n}from"./index-C8hfl2Sb.js";function a(e,r){return u({...e,enabled:!0,suspense:!0,throwOnError:n},s,r)}export{a as u};
|