decocms 3.103.0 → 3.103.2

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.
Files changed (218) hide show
  1. package/dist/client/assets/{AlertCircle-a-vR_1FH.js → AlertCircle-B7YwjVuv.js} +1 -1
  2. package/dist/client/assets/{ArrowUpRight-C6PaikAY.js → ArrowUpRight-DvElag-V.js} +1 -1
  3. package/dist/client/assets/{CheckCircle-DuFphk_L.js → CheckCircle-DIxU9fNb.js} +1 -1
  4. package/dist/client/assets/{ChevronDown-C2BfMFj-.js → ChevronDown-D7t2IbgZ.js} +1 -1
  5. package/dist/client/assets/{ChevronLeft-1icJ8otS.js → ChevronLeft-DnVztwcc.js} +1 -1
  6. package/dist/client/assets/{ChevronRight-Dwj0GLk6.js → ChevronRight-Cw6r4eF5.js} +1 -1
  7. package/dist/client/assets/{ChevronUp-BF12r_5T.js → ChevronUp-DrHOs0IB.js} +1 -1
  8. package/dist/client/assets/{DotsVertical-CrxHFBG_.js → DotsVertical-p5cw6bzY.js} +1 -1
  9. package/dist/client/assets/{Eye-BP9Sfn-G.js → Eye-CPb9WDyf.js} +1 -1
  10. package/dist/client/assets/{FilterLines-BAwKn3mF.js → FilterLines-2uX2Gf4U.js} +1 -1
  11. package/dist/client/assets/{Globe01-DHIJpR1n.js → Globe01-D51Pf1ib.js} +1 -1
  12. package/dist/client/assets/{Globe04-BOTQR4EH.js → Globe04-8CmI5zRW.js} +1 -1
  13. package/dist/client/assets/{HardDrive-DpKUIeTU.js → HardDrive-fBNuw9RE.js} +1 -1
  14. package/dist/client/assets/{Key01-dSck2fXn.js → Key01-B-V8oh6M.js} +1 -1
  15. package/dist/client/assets/{LayoutLeft-ZU9brebS.js → LayoutLeft-B7KWV4nT.js} +1 -1
  16. package/dist/client/assets/{LinkExternal01-ByHnE064.js → LinkExternal01-Cd3gNz9H.js} +1 -1
  17. package/dist/client/assets/{Monitor01-CwM1oQZE.js → Monitor01-BzxQo8OV.js} +1 -1
  18. package/dist/client/assets/{Palette-De7iXBv9.js → Palette-TV4PomkE.js} +1 -1
  19. package/dist/client/assets/{Play-CkF-LSWc.js → Play-B9WHtGRe.js} +1 -1
  20. package/dist/client/assets/{Plus-Cu5Qx9bH.js → Plus-DrCr8atg.js} +1 -1
  21. package/dist/client/assets/{SearchLg-BlQzlk8z.js → SearchLg-C45t9PQZ.js} +1 -1
  22. package/dist/client/assets/{SearchMd-9JqOx0vf.js → SearchMd-C5JuA4Q_.js} +1 -1
  23. package/dist/client/assets/{Settings02-Dq2L1eRV.js → Settings02-CWsiKyfu.js} +1 -1
  24. package/dist/client/assets/{Shield01-CegV3sPz.js → Shield01-BP8Krja8.js} +1 -1
  25. package/dist/client/assets/{Star01-jl5974Pz.js → Star01-BvLdWUOq.js} +1 -1
  26. package/dist/client/assets/{Stars01-CnpuGsR_.js → Stars01-ledCttL2.js} +1 -1
  27. package/dist/client/assets/{Stars02-Dzh25VWh.js → Stars02-CZ3C1sQr.js} +1 -1
  28. package/dist/client/assets/{Sun-CGet92vQ.js → Sun-DPnjEA61.js} +1 -1
  29. package/dist/client/assets/{SwitchHorizontal01-Cho0JvG4.js → SwitchHorizontal01-fTq_Xj_0.js} +1 -1
  30. package/dist/client/assets/{Tool01-BoOtnkZl.js → Tool01-MvyjXDCb.js} +1 -1
  31. package/dist/client/assets/{Trash01-Bwi4fXvt.js → Trash01-C3HJx9Eu.js} +1 -1
  32. package/dist/client/assets/{Upload01-3eA1Ncxz.js → Upload01-DvSZDpgm.js} +1 -1
  33. package/dist/client/assets/{User01-DXRIHbfu.js → User01-TldGh0YP.js} +1 -1
  34. package/dist/client/assets/{Users01-ksBJAyfL.js → Users01-B63UEiqj.js} +1 -1
  35. package/dist/client/assets/{Users03-7i52kT3p.js → Users03-BiIAwLFR.js} +1 -1
  36. package/dist/client/assets/{X-qJIM3wpw.js → X-D1lT84o6.js} +1 -1
  37. package/dist/client/assets/{XCircle-8JtBxZfD.js → XCircle-B1aV7AX3.js} +1 -1
  38. package/dist/client/assets/{XClose-1YAudtzA.js → XClose-9xeu7JIP.js} +1 -1
  39. package/dist/client/assets/{Zap-CAS-UyCD.js → Zap-C8z5Nmtq.js} +1 -1
  40. package/dist/client/assets/{ZapSquare-BGJ4B5KU.js → ZapSquare-C-BUl6mg.js} +1 -1
  41. package/dist/client/assets/{ZoomOut-B8xi1xbE.js → ZoomOut-DnuKetHD.js} +1 -1
  42. package/dist/client/assets/{access-gate-eByItBIe.js → access-gate-BY3tN2ja.js} +1 -1
  43. package/dist/client/assets/{add-section-modal-V99idNXv.js → add-section-modal-B07Xr2Kn.js} +1 -1
  44. package/dist/client/assets/{agent-icon-HV030aXf.js → agent-icon-SFzfjqT3.js} +1 -1
  45. package/dist/client/assets/{agents-list-wKNDiV6t.js → agents-list-DjZyRbNh.js} +1 -1
  46. package/dist/client/assets/{ai-providers-txJ57nZ_.js → ai-providers-CKzZgnvl.js} +1 -1
  47. package/dist/client/assets/{alert-CX4bs3ts.js → alert-Xi4tmGdJ.js} +1 -1
  48. package/dist/client/assets/{alert-dialog-07-YnAaX.js → alert-dialog-Dv-S36Xs.js} +1 -1
  49. package/dist/client/assets/app-editor-DkeeVFb9.js +1 -0
  50. package/dist/client/assets/{auth-C512TjMm.js → auth-B9AdzGWs.js} +1 -1
  51. package/dist/client/assets/{auth-catchall-CozmiwOm.js → auth-catchall-0TYVm2fW.js} +1 -1
  52. package/dist/client/assets/{auth-entry-B-03mJbR.js → auth-entry-DnJxnsQa.js} +1 -1
  53. package/dist/client/assets/{auth-split-layout-53lVB52j.js → auth-split-layout-CRM5rJ4I.js} +1 -1
  54. package/dist/client/assets/{authenticate-and-persist-oauth-BchYkTF2.js → authenticate-and-persist-oauth-CWwDFJ5t.js} +1 -1
  55. package/dist/client/assets/{automation-list-row-C_pALM6R.js → automation-list-row-CsaQkLKW.js} +1 -1
  56. package/dist/client/assets/{automation-runs--Ic7AVrz.js → automation-runs-B7uMDF25.js} +1 -1
  57. package/dist/client/assets/{automations-Dtba0rrU.js → automations-Dss23VYg.js} +1 -1
  58. package/dist/client/assets/{avatar-Fi31oqON.js → avatar-CdYywjB8.js} +1 -1
  59. package/dist/client/assets/{badge-C4plLe5t.js → badge-Dxlv54DZ.js} +1 -1
  60. package/dist/client/assets/{block-document-B6LNZi6b.js → block-document-DmBsan0A.js} +1 -1
  61. package/dist/client/assets/{brand-context-BoMMAxcz.js → brand-context-BXcXRl5I.js} +1 -1
  62. package/dist/client/assets/{buckets-BGSon2E4.js → buckets-bgNzTmcE.js} +1 -1
  63. package/dist/client/assets/{capability-load-error-Pc0KmQA1.js → capability-load-error-CFxZVJfo.js} +1 -1
  64. package/dist/client/assets/{card-BfPYpJZg.js → card-Dt5JuJj0.js} +1 -1
  65. package/dist/client/assets/category-editor-4VhAzI64.js +1 -0
  66. package/dist/client/assets/{chat-context-BX3H5kjS.js → chat-context-rSGx0F1S.js} +1 -1
  67. package/dist/client/assets/{checkbox-CWuh092s.js → checkbox-D5qKxHwE.js} +1 -1
  68. package/dist/client/assets/{cli-auth-success-DLdzGE75.js → cli-auth-success-fK-z6B11.js} +1 -1
  69. package/dist/client/assets/{collection-detail-BY_8Qt4K.js → collection-detail-CKsULKt8.js} +1 -1
  70. package/dist/client/assets/{collection-display-button-BPYtYCHp.js → collection-display-button-D1GAS3K4.js} +1 -1
  71. package/dist/client/assets/{collection-search-dbq5kU3E.js → collection-search-Yx1Vcd74.js} +1 -1
  72. package/dist/client/assets/{collection-tabs-DLFvn36O.js → collection-tabs-DEvCjzY2.js} +1 -1
  73. package/dist/client/assets/{command-n0XKosK9.js → command--DrDkfnb.js} +1 -1
  74. package/dist/client/assets/{commerce-onboarding-BNPL0zIL.js → commerce-onboarding-C0r_RGc5.js} +1 -1
  75. package/dist/client/assets/{connect-desktop-dialog-YMslH841.js → connect-desktop-dialog-Ny2ddpDi.js} +1 -1
  76. package/dist/client/assets/{connection-card-BWkd3wku.js → connection-card-DGJrNSMY.js} +1 -1
  77. package/dist/client/assets/{connection-detail-CKP7SAGT.js → connection-detail-CrxMas_a.js} +1 -1
  78. package/dist/client/assets/{connection-form-helpers-oqhfDx95.js → connection-form-helpers-Cco6Qbpt.js} +1 -1
  79. package/dist/client/assets/{connections-BDwXVRPQ.js → connections-D2DZU5GB.js} +1 -1
  80. package/dist/client/assets/{context-menu-CibmMzkh.js → context-menu-BLuGnyVu.js} +1 -1
  81. package/dist/client/assets/{decopilot-BZPuRnSp.js → decopilot-DMutZh6M.js} +1 -1
  82. package/dist/client/assets/{decopilot-sse-pool-BsWkTJtv.js → decopilot-sse-pool--1mtBHxz.js} +1 -1
  83. package/dist/client/assets/{dialog-BaTe3e0i.js → dialog-Dy6eXpKe.js} +1 -1
  84. package/dist/client/assets/{domain-settings-Bvl1buYU.js → domain-settings-C1eV-9a-.js} +1 -1
  85. package/dist/client/assets/{drawer-DZsf-myZ.js → drawer-Dvd-9Sja.js} +1 -1
  86. package/dist/client/assets/{dropdown-menu-DVBbKPWb.js → dropdown-menu-OVr8TMr_.js} +1 -1
  87. package/dist/client/assets/{empty-state-RuM2DUgk.js → empty-state-DQfglbNM.js} +1 -1
  88. package/dist/client/assets/{extract-connection-data-CNb492lQ.js → extract-connection-data-DrUVsxqd.js} +1 -1
  89. package/dist/client/assets/{file-explorer-Bt-0IRvN.js → file-explorer-CkPnNmO8.js} +1 -1
  90. package/dist/client/assets/{file-type-icon-qiB7tLz1.js → file-type-icon-SP0v8UlM.js} +1 -1
  91. package/dist/client/assets/{files-BP0dPHJS.js → files-Wz-xIRKZ.js} +1 -1
  92. package/dist/client/assets/{form-CPJlZ8gm.js → form-CkEHHrgu.js} +1 -1
  93. package/dist/client/assets/{general-Bm4xe5kW.js → general-DdP8ztNk.js} +1 -1
  94. package/dist/client/assets/{github-repo-picker-Bx3PH9wk.js → github-repo-picker-DSR-TwBo.js} +1 -1
  95. package/dist/client/assets/{hooks-BYCrj8Je.js → hooks-o8yCDzJC.js} +1 -1
  96. package/dist/client/assets/{import-from-deco-dialog-pH1GY8sR.js → import-from-deco-dialog-CEW3ZJjT.js} +1 -1
  97. package/dist/client/assets/{index-DbWLk0C9.js → index-B6kdF_L8.js} +1 -1
  98. package/dist/client/assets/{index-CHmZLZbP.js → index-BFhrz-f4.js} +1 -1
  99. package/dist/client/assets/{index-D1V8a8SL.js → index-C0th2ciG.js} +1 -1
  100. package/dist/client/assets/{index-BGMnz0nc.js → index-D3y2G80O.js} +1 -1
  101. package/dist/client/assets/{index-C7Ycdp6h.js → index-DgC1qvp3.js} +1 -1
  102. package/dist/client/assets/{index-mLOYq0-B.js → index-Dp_9MLtk.js} +1 -1
  103. package/dist/client/assets/{index-B-L72X3x.js → index-DrmUu6Oi.js} +1 -1
  104. package/dist/client/assets/{index-BCw36lgd.js → index-DuwRwNmr.js} +1 -1
  105. package/dist/client/assets/{index-dFmhSjxq.js → index-XoC6Mv98.js} +1 -1
  106. package/dist/client/assets/{index-BGZPQKPy.js → index-Z9ET5M46.js} +1 -1
  107. package/dist/client/assets/index-_cWo9NQL.js +503 -0
  108. package/dist/client/assets/{index-Bw_3hvcK.js → index-_iXFFHGt.js} +1 -1
  109. package/dist/client/assets/{index-6Ms5icf_.js → index-j1EmgqV8.js} +3 -3
  110. package/dist/client/assets/{index-ASEVNwDG.js → index-kU0DbGlO.js} +1 -1
  111. package/dist/client/assets/{index-redirect-C7Ygy3w_.js → index-redirect-Cq22Ou3t.js} +1 -1
  112. package/dist/client/assets/{input-D8vyZlmq.js → input-zUoMTUjz.js} +1 -1
  113. package/dist/client/assets/{integration-icon-DFGEP0Lg.js → integration-icon-Cpv4CIQ_.js} +1 -1
  114. package/dist/client/assets/{label-Dd5fDeWg.js → label-DIdfff7-.js} +1 -1
  115. package/dist/client/assets/{login-9Bnk3uQn.js → login-0NOIPa_i.js} +1 -1
  116. package/dist/client/assets/{mcp-oauth-6Qawf9vM.js → mcp-oauth-iKgiXli9.js} +1 -1
  117. package/dist/client/assets/{members-CXb8COd_.js → members-CnFYAz0Z.js} +1 -1
  118. package/dist/client/assets/{monaco-editor-Bs4VDXaD.js → monaco-editor-DvDR9w-L.js} +1 -1
  119. package/dist/client/assets/{monitoring-stats-row-Djz1qbHP.js → monitoring-stats-row-BbY_q-eo.js} +1 -1
  120. package/dist/client/assets/{oauth-callback-B6RVjo5-.js → oauth-callback-BPtayFiR.js} +1 -1
  121. package/dist/client/assets/{oauth-callback-ai-provider-ttp82rp9.js → oauth-callback-ai-provider-K5aCOvaH.js} +1 -1
  122. package/dist/client/assets/{onboarding-CoDgT1Lc.js → onboarding-ZiU6JGv-.js} +1 -1
  123. package/dist/client/assets/{org-install-DX8Z3cjg.js → org-install-Cy54wLGw.js} +1 -1
  124. package/dist/client/assets/{org-layout-Co8FcicL.js → org-layout-D-P2tcqC.js} +1 -1
  125. package/dist/client/assets/{organization-choice-C78Udhsf.js → organization-choice-C1y80Okj.js} +1 -1
  126. package/dist/client/assets/{page-seo-form-DGMnURW-.js → page-seo-form-xc_ndIWR.js} +1 -1
  127. package/dist/client/assets/page-seo-sheet-CL3gCFpf.js +1 -0
  128. package/dist/client/assets/{popover-A2RlI-p_.js → popover-DU5qAOzi.js} +1 -1
  129. package/dist/client/assets/{post-editor-D_8S4mL1.js → post-editor-Bu1uK3RV.js} +1 -1
  130. package/dist/client/assets/{preview-dialog-BxsyNK36.js → preview-dialog-C9-3VKyJ.js} +1 -1
  131. package/dist/client/assets/{primitives-BHWTr-Lr.js → primitives-CykDcCCX.js} +1 -1
  132. package/dist/client/assets/{profile-CPE426z_.js → profile-BKoUm-g9.js} +1 -1
  133. package/dist/client/assets/project-app-view-y5DH-I8K.js +1 -0
  134. package/dist/client/assets/record-editor-CvDeMQ2G.js +1 -0
  135. package/dist/client/assets/registry-BaFm0L19.js +2 -0
  136. package/dist/client/assets/{registry-layout-CIG_nA03.js → registry-layout-B9FmRjJz.js} +1 -1
  137. package/dist/client/assets/{require-capability-BpRcFa8Q.js → require-capability-CehH7jAZ.js} +1 -1
  138. package/dist/client/assets/{required-auth-layout-u_vTlzld.js → required-auth-layout-CU8fve_K.js} +1 -1
  139. package/dist/client/assets/{reset-password-CWwIm4hk.js → reset-password-zdekZmVd.js} +1 -1
  140. package/dist/client/assets/{roles-CEklxBS_.js → roles-D-x_wkGo.js} +1 -1
  141. package/dist/client/assets/{scroll-area-C_bbXuZa.js → scroll-area-BAz3Rj9i.js} +1 -1
  142. package/dist/client/assets/{search-input-BqgD3o_B.js → search-input-DRzQD01R.js} +1 -1
  143. package/dist/client/assets/{secrets-BqTYtF5B.js → secrets-CuUGkNhM.js} +1 -1
  144. package/dist/client/assets/sections-editor-DPVFX_7V.js +2 -0
  145. package/dist/client/assets/{select-model-U3CYyB5R.js → select-model-Dq-JstQ8.js} +1 -1
  146. package/dist/client/assets/{select-a9ufxSlc.js → select-svPYG6Bw.js} +1 -1
  147. package/dist/client/assets/{seo-editor-RUwIcGP1.js → seo-editor-BFJub-eW.js} +1 -1
  148. package/dist/client/assets/{settings-layout-CQAIaLgS.js → settings-layout-a74u_hLy.js} +1 -1
  149. package/dist/client/assets/{settings-section-Crwr1bDH.js → settings-section-CNscyKHW.js} +1 -1
  150. package/dist/client/assets/{sheet-BawlyGxJ.js → sheet-DahuGsa4.js} +1 -1
  151. package/dist/client/assets/{shell-controls-Kc5UsPCa.js → shell-controls-K52T5sMB.js} +1 -1
  152. package/dist/client/assets/{shell-layout-CtjSuPfA.js → shell-layout-Buk6j896.js} +1 -1
  153. package/dist/client/assets/{shell-route-loading-Bzc5NHYu.js → shell-route-loading-B0z1lBof.js} +1 -1
  154. package/dist/client/assets/{sidebar-Bq9ao_xE.js → sidebar-D5j5gPeI.js} +1 -1
  155. package/dist/client/assets/{skeleton-BpPhQatD.js → skeleton-U2Av8cLZ.js} +1 -1
  156. package/dist/client/assets/{sortable.esm-CMXcSVaO.js → sortable.esm-DHLm3dqa.js} +1 -1
  157. package/dist/client/assets/{sso-zjwvENNS.js → sso-BoRzwrWA.js} +1 -1
  158. package/dist/client/assets/store-registry-3H_xbQFv.js +2 -0
  159. package/dist/client/assets/{store-NKaJRnDh.js → store-vubGBkGy.js} +1 -1
  160. package/dist/client/assets/{studio-tools-Dc1p1o3l.js → studio-tools-BAmwKCdT.js} +1 -1
  161. package/dist/client/assets/{switch-47Tp9h8M.js → switch-CjEoRRuC.js} +1 -1
  162. package/dist/client/assets/{table-DJEimqTh.js → table-T8p77nDy.js} +1 -1
  163. package/dist/client/assets/{tabs-CuJkXGpj.js → tabs-DDAkKuLU.js} +1 -1
  164. package/dist/client/assets/{task-status-DpUcj3v-.js → task-status-Dc-JFjIj.js} +1 -1
  165. package/dist/client/assets/{textarea-DpEKguHm.js → textarea-BrxTK711.js} +1 -1
  166. package/dist/client/assets/{toggle-group-VEpLQl2Q.js → toggle-group-r5JjNYaj.js} +1 -1
  167. package/dist/client/assets/{toolbar-CX-MgQ9A.js → toolbar-Cd-zT0GV.js} +1 -1
  168. package/dist/client/assets/{tooltip-CmT4sPVG.js → tooltip-D2IcwsrW.js} +1 -1
  169. package/dist/client/assets/{types-mcbWEpuD.js → types-DdqgwoF-.js} +1 -1
  170. package/dist/client/assets/{use-ai-providers-Dt6yQJuE.js → use-ai-providers-B7DE5RlO.js} +1 -1
  171. package/dist/client/assets/{use-automations-BmyuEPTL.js → use-automations-BaLowkA-.js} +1 -1
  172. package/dist/client/assets/{use-capability-F7EUba-q.js → use-capability-BYfWBphf.js} +1 -1
  173. package/dist/client/assets/{use-clock-tick-CNlDEqpG.js → use-clock-tick-vJNeZS2R.js} +1 -1
  174. package/dist/client/assets/{use-collections-KHENvxRN.js → use-collections-DOhjyZoW.js} +1 -1
  175. package/dist/client/assets/{use-connection-DbpVSBkT.js → use-connection-a48WkDyi.js} +1 -1
  176. package/dist/client/assets/{use-copy-BoyDG3RO.js → use-copy-Dm0W_H8p.js} +1 -1
  177. package/dist/client/assets/{use-create-virtual-mcp-DK16CUjb.js → use-create-virtual-mcp-BRQVpCUG.js} +1 -1
  178. package/dist/client/assets/{use-debounced-autosave-D2brCtUy.js → use-debounced-autosave-oRzID6xD.js} +1 -1
  179. package/dist/client/assets/{use-debounced-value-DpFAtTDl.js → use-debounced-value-B1GdK5fU.js} +1 -1
  180. package/dist/client/assets/{use-delete-connection-DEF0lPjJ.js → use-delete-connection-CKYm7fJS.js} +1 -1
  181. package/dist/client/assets/{use-file-configs-C_Pt5uPf.js → use-file-configs-F_Lh19IF.js} +1 -1
  182. package/dist/client/assets/{use-infinite-scroll-By--Xgf5.js → use-infinite-scroll-Cs1p0W0X.js} +1 -1
  183. package/dist/client/assets/{use-join-requests-DGdwjgnR.js → use-join-requests-Cx83Qjv9.js} +1 -1
  184. package/dist/client/assets/{use-mcp-client-B1D2WVEt.js → use-mcp-client-B1E7Nyjd.js} +1 -1
  185. package/dist/client/assets/{use-mcp-prompts-Cz76t3bh.js → use-mcp-prompts-B4idSZTh.js} +1 -1
  186. package/dist/client/assets/{use-mcp-tools-DXcysFUT.js → use-mcp-tools-CqHv2Xxs.js} +1 -1
  187. package/dist/client/assets/{use-members-qnss8-tR.js → use-members-BqgoI8LN.js} +1 -1
  188. package/dist/client/assets/{use-mobile-47bis9AY.js → use-mobile-CWv_pUWp.js} +1 -1
  189. package/dist/client/assets/{use-navigate-to-agent-B-yOHE-_.js → use-navigate-to-agent-CWpJGmq-.js} +1 -1
  190. package/dist/client/assets/{use-org-auth-client-BcvL3aML.js → use-org-auth-client-C3mEUOcx.js} +1 -1
  191. package/dist/client/assets/{use-org-sso-B9dFg3pD.js → use-org-sso-Dop9y0HC.js} +1 -1
  192. package/dist/client/assets/{use-organization-roles-D35x9dMW.js → use-organization-roles-BJ74MotE.js} +1 -1
  193. package/dist/client/assets/{use-organization-settings-CgHZKJD7.js → use-organization-settings-8LInvXec.js} +1 -1
  194. package/dist/client/assets/{use-registry-connections-yk7K5hzB.js → use-registry-connections-D2DhXJmA.js} +1 -1
  195. package/dist/client/assets/{use-secrets-pTFZVpfk.js → use-secrets-BLkb7BZG.js} +1 -1
  196. package/dist/client/assets/{use-status-sounds-Dtje6GBy.js → use-status-sounds-MjzDR8jw.js} +1 -1
  197. package/dist/client/assets/{use-view-mode-CPVAjUN-.js → use-view-mode-pvlDGqxN.js} +1 -1
  198. package/dist/client/assets/{use-virtual-mcp-BbFXGgd-.js → use-virtual-mcp-BcsK_V5p.js} +1 -1
  199. package/dist/client/assets/useInfiniteQuery-QT7BExxx.js +1 -0
  200. package/dist/client/assets/useSuspenseInfiniteQuery-CVusVKT2.js +1 -0
  201. package/dist/client/assets/{useSuspenseQueries-DHRzuT6I.js → useSuspenseQueries-C20MRsU9.js} +1 -1
  202. package/dist/client/assets/{variant-calendar-C_6IUdTa.js → variant-calendar-Dnj2EkPc.js} +1 -1
  203. package/dist/client/assets/{view-mode-toggle-BhMtTNtY.js → view-mode-toggle-DQyCEqbJ.js} +1 -1
  204. package/dist/client/index.html +1 -1
  205. package/dist/server/cli.js +3 -3
  206. package/dist/server/server.js +2 -2
  207. package/package.json +1 -1
  208. package/dist/client/assets/app-editor-DcGOAT5n.js +0 -1
  209. package/dist/client/assets/category-editor-qE3dD0Bv.js +0 -1
  210. package/dist/client/assets/index-D1MfMZee.js +0 -503
  211. package/dist/client/assets/page-seo-sheet-DlInYsnr.js +0 -1
  212. package/dist/client/assets/project-app-view-Bgs4Zjm0.js +0 -1
  213. package/dist/client/assets/record-editor-dEvbFD7J.js +0 -1
  214. package/dist/client/assets/registry-BJJKTWWG.js +0 -2
  215. package/dist/client/assets/sections-editor-DUj_6r8N.js +0 -2
  216. package/dist/client/assets/store-registry-BWalKvel.js +0 -2
  217. package/dist/client/assets/useInfiniteQuery-BWsroIps.js +0 -1
  218. package/dist/client/assets/useSuspenseInfiniteQuery-BH5HJDwS.js +0 -1
@@ -81229,7 +81229,7 @@ ${$}`;_(Z);return}if(E(null,B),t.strategy==="count"){if(w--,w===0)_()}if(t.strat
81229
81229
  SELECT * FROM link_sandboxes WHERE handle = $handle
81230
81230
  `);function _(v){if(t===void 0)return!0;let h=hM(v),D=h&&hM(t)?MVu(t):t,g=h?MVu(v):qVu(v),O=azt(D,g);return O===""||!O.startsWith("..")&&!mzt(O)}return{upsert(v){f.run({$handle:v.handle,$status:v.status,$sandboxPath:v.sandboxPath,$port:v.port??null,$previewUrl:v.previewUrl??null,$repoCloneUrl:v.repoCloneUrl??null,$branch:v.branch??null,$projectName:v.projectName??null,$error:v.error??null,$now:Date.now()})},list(){return l.all().map(L1i)},reconcile(){let v=Date.now();for(let h of l.all().map(L1i)){if(!_(h.sandboxPath)){c.run({$handle:h.handle,$now:v});continue}if(!hM(h.sandboxPath)){E.run({$handle:h.handle,$now:v});continue}if(h.status==="spawning"||h.status==="ready"||h.status==="failed"||h.status==="missing")$.run({$handle:h.handle,$now:v})}return l.all().map(L1i)},prune(v){let h=[],D=[],g=this.reconcile();for(let O of g){if(!_(O.sandboxPath)){D.push({handle:O.handle,sandboxPath:O.sandboxPath,reason:"outside_root",deletedFiles:!1});continue}if(v.missing&&O.status==="missing"){w.run({$handle:O.handle}),h.push({handle:O.handle,sandboxPath:O.sandboxPath,reason:"missing",deletedFiles:!1});continue}if(!v.merged||!hM(O.sandboxPath))continue;if(O.branch===null||O.branch.trim()===""){D.push({handle:O.handle,sandboxPath:O.sandboxPath,reason:"no_branch",deletedFiles:!1});continue}if(!t7(O.sandboxPath,["rev-parse","--is-inside-work-tree"]).ok){D.push({handle:O.handle,sandboxPath:O.sandboxPath,reason:"git_unavailable",deletedFiles:!1});continue}let Z=t7(O.sandboxPath,["status","--porcelain"]);if(!Z.ok){D.push({handle:O.handle,sandboxPath:O.sandboxPath,reason:"git_unavailable",deletedFiles:!1});continue}if(Z.stdout.trim()!==""){D.push({handle:O.handle,sandboxPath:O.sandboxPath,reason:"dirty_worktree",deletedFiles:!1});continue}let B=rVu(O.sandboxPath,O.branch);if(B===null){D.push({handle:O.handle,sandboxPath:O.sandboxPath,reason:"git_unavailable",deletedFiles:!1});continue}if(!B){D.push({handle:O.handle,sandboxPath:O.sandboxPath,reason:"branch_not_merged",deletedFiles:!1});continue}Vzt(O.sandboxPath,{recursive:!0,force:!0}),w.run({$handle:O.handle}),h.push({handle:O.handle,sandboxPath:O.sandboxPath,reason:"merged",deletedFiles:!0})}return{removed:h,skipped:D}},delete(v){w.run({$handle:v})},inspect(v){let h=d.get({$handle:v});if(h===null)return null;let D=L1i(h),g=0,O=null;if(hM(D.sandboxPath)&&t7(D.sandboxPath,["rev-parse","--is-inside-work-tree"]).ok){let Z=t7(D.sandboxPath,["status","--porcelain"]);if(Z.ok){let B=Z.stdout.trim();g=B===""?0:B.split(`
81231
81231
  `).length}if(D.branch!==null&&D.branch.trim()!=="")O=rVu(D.sandboxPath,D.branch)}return{handle:D.handle,branch:D.branch,sandboxPath:D.sandboxPath,dirtyCount:g,merged:O}},close(){u.close()}}}var FHi=()=>{};function eVu(i,u){let t=u?[["umount","-f",i]]:[["fusermount","-u",i],["umount",i]];for(let f of t)if(Bun.spawnSync(f,{stdout:"ignore",stderr:"ignore",timeout:5000}).exitCode===0)break}import{existsSync as iHt,readdirSync as uHt}from"fs";import{rm as tHt}from"fs/promises";import{join as aVu}from"path";async function oVu(i,u={}){let t=u.detach??fHt,f=u.exists??iHt,l=u.readdir??(($)=>uHt($)),c=u.rm??(($)=>tHt($,{recursive:!0,force:!0})),E=aVu(i,"org");if(f(E))for(let $ of l(E))t(aVu(E,$));await c(i)}var fHt=(i)=>eVu(i,process.platform==="darwin");var sVu=()=>{};import{join as lHt}from"path";function pVu(i){let u=i.purge??oVu;return{stopSandbox(t){return i.provider.deleteSandbox(t)},inspectSandbox(t){return i.registry.inspect(t)},async removeSandbox(t){try{return await u6(async()=>{if(await i.provider.deleteSandbox(t),i.provider.hasHandle(t))throw Error("Can't delete \u2014 run in progress");let l=i.registry.inspect(t)?.sandboxPath??lHt(i.dataDir,"sandboxes",t);await u(l)},{maxAttempts:2,minTimeout:250,jitter:0}),i.registry.delete(t),{ok:!0}}catch(f){let l=f instanceof J6?f.cause:f;return{ok:!1,error:l instanceof Error?l.message:String(l)}}}}}var iru=N(()=>{Bl();sVu()});import{randomBytes as cHt}from"crypto";import{mkdir as EHt}from"fs/promises";import{createServer as $Ht}from"net";import{join as wHt}from"path";function uru(i,u){return Error(`sandbox failed to start: ${i}`,{cause:u})}function dHt(i){if(!(i instanceof Error))return!1;return i.name==="TimeoutError"||/timed out|timeout|operation was aborted|aborted/i.test(i.message)}function tru(i){if(i instanceof Error){let u=i.cause;if(u instanceof Error&&u.message)return u.message;return i.message}return String(i)}function _Ht(i){if(!i)return null;let u=i.trim().replace(/\/+$/,"");if(!u)return null;let t=u.split(/[/:]/).filter(Boolean).at(-1);if(!t)return null;return t.replace(/\.git$/i,"")||null}function vHt(i){return{repoCloneUrl:i.repo?.cloneUrl??null,branch:i.repo?.branch??null,projectName:_Ht(i.repo?.cloneUrl)}}function fru(i){let u=i.maxSandboxes??20,t=new Map,f=i.pickPort??hHt,l=i.fetchImpl??fetch,c=i.resolvePreviewUrl??((g,O)=>`http://127.0.0.1:${O}`),E=(g)=>wHt(i.dataDir,"sandboxes",g),$=(g)=>{try{i.registry?.upsert(g)}catch(O){console.warn(`[user-desktop] failed to persist sandbox lifecycle handle=${g.handle} status=${g.status}:`,O)}},w=(g)=>{try{i.onEvent?.(g)}catch{}},d=async(g)=>{let O=new AbortController,Z=setTimeout(()=>O.abort(),1500);try{let B=await l(`${g}/health`,{signal:O.signal});if(!B.ok)console.warn(`[user-desktop] probe ${g}/health \u2192 ${B.status} (treating as dead)`);return B.ok}catch(B){return console.warn(`[user-desktop] probe ${g}/health failed: ${B instanceof Error?B.message:String(B)} (treating as dead)`),!1}finally{clearTimeout(Z)}},_=(g)=>{console.warn(`[user-desktop] evicting dead daemon handle=${g.handle} port=${g.port}`);try{g.process.kill("SIGTERM")}catch{}if(t.get(g.handle)===g)t.delete(g.handle),$({handle:g.handle,status:"stopped",sandboxPath:E(g.handle),port:null,previewUrl:null,...g.registryMetadata,error:null}),w({handle:g.handle,phase:"evicted"})},v=new Map;function h(){if(t.size<u)return;let g=[...t.values()].filter((Z)=>Z.activeDispatchCount===0).sort((Z,B)=>Z.lastUsedAt-B.lastUsedAt);if(g.length===0){console.warn(`[user-desktop] at cap ${t.size}/${u} but every sandbox is pinned (active dispatch) \u2014 exceeding cap temporarily`);return}let O=g[0];console.log(`[user-desktop] evicting LRU victim handle=${O.handle} port=${O.port} (cap ${u} reached, size=${t.size})`);try{O.process.kill("SIGTERM")}catch{}t.delete(O.handle),$({handle:O.handle,status:"stopped",sandboxPath:E(O.handle),port:null,previewUrl:null,...O.registryMetadata,error:null}),w({handle:O.handle,phase:"evicted"})}let D=async(g)=>{let O=vHt(g),Z=E(g.handle);$({handle:g.handle,status:"spawning",sandboxPath:Z,port:null,previewUrl:null,...O,error:null}),w({handle:g.handle,phase:"spawning"}),h();let B,y=null,F;try{await EHt(Z,{recursive:!0}),console.log(`[user-desktop] ensure handle=${g.handle} repo=${g.repo?.cloneUrl??"(none)"} branch=${g.repo?.branch??"(none)"} runtime=${g.workload?.runtime??"(autodetect)"} pm=${g.workload?.packageManager??"(autodetect)"}`),F=cHt(24).toString("hex");let[j,A]=await Promise.all([f(),f()]);B=j,console.log(`[user-desktop] spawn handle=${g.handle} port=${B} devPort=${A} workdir=${Z}`),y=await Promise.resolve(i.spawnDaemon({workdir:Z,handle:g.handle,port:B,daemonToken:F,offloadAllowedHosts:g.offloadAllowedHosts??[],offloadAllowSameHostDev:g.offloadAllowSameHostDev??!1,orgFsConfigJson:g.orgFsConfigJson}));try{await i.waitForHealth(B)}catch(G){throw uru("the sandbox didn't come online in time",G)}console.log(`[user-desktop] healthy handle=${g.handle} port=${B} \u2014 posting config`);try{await i.postConfig(B,A,{repo:g.repo,workload:g.workload,operator:g.operator},F)}catch(G){throw uru(dHt(G)?"configuration timed out":"the sandbox rejected its configuration",G)}}catch(j){if(console.error(`[user-desktop] sandbox bring-up failed handle=${g.handle} port=${B??"(none)"}${y?" (killing daemon)":""}:`,j),y)try{y.kill("SIGKILL")}catch{}throw w({handle:g.handle,phase:"failed",error:tru(j)}),$({handle:g.handle,status:"failed",sandboxPath:Z,port:null,previewUrl:null,...O,error:tru(j)}),j}if(!y||B===void 0)throw Error("sandbox bring-up invariant violated");let T=`http://127.0.0.1:${B}`,U=c(g.handle,B);console.log(`[user-desktop] ready handle=${g.handle} port=${B} sandboxApiUrl=${T} previewUrl=${U}`);let I={handle:g.handle,port:B,process:y,sandboxApiUrl:T,previewUrl:U,lastUsedAt:Date.now(),activeDispatchCount:0,daemonToken:F,registryMetadata:O};if(t.set(g.handle,I),$({handle:g.handle,status:"ready",sandboxPath:Z,port:B,previewUrl:U,...O,error:null}),w({handle:g.handle,phase:"ready",port:B,previewUrl:U}),y.exited)y.exited.then(()=>{if(t.get(g.handle)===I)console.warn(`[user-desktop] daemon process exited unexpectedly handle=${g.handle} port=${B} \u2014 removing from cache`),t.delete(g.handle),$({handle:g.handle,status:"stopped",sandboxPath:Z,port:null,previewUrl:null,...O,error:null}),w({handle:g.handle,phase:"evicted"});else console.log(`[user-desktop] daemon process exited handle=${g.handle} port=${B} (already replaced/removed)`)});return{sandboxApiUrl:T,previewUrl:U,port:B}};return{async ensureSandbox(g){let O=t.get(g.handle);if(O){if(await d(O.sandboxApiUrl))return console.log(`[user-desktop] cache hit handle=${g.handle} port=${O.port} (alive)`),O.lastUsedAt=Date.now(),{sandboxApiUrl:O.sandboxApiUrl,previewUrl:O.previewUrl,port:O.port};console.warn(`[user-desktop] cache stale handle=${g.handle} port=${O.port} \u2014 respawning`),_(O)}let Z=v.get(g.handle);if(Z)return console.log(`[user-desktop] joining in-flight ensure handle=${g.handle}`),Z;let B=D(g).finally(()=>{v.delete(g.handle)});return v.set(g.handle,B),B},proxyPort(g){let O=t.get(g);if(O)O.lastUsedAt=Date.now();return O?.port??null},getDaemonToken(g){return t.get(g)?.daemonToken??null},hasHandle(g){return t.has(g)||v.has(g)},recordHit(g){let O=t.get(g);if(O)O.lastUsedAt=Date.now()},acquireDispatch(g){let O=t.get(g);if(!O)return()=>{};O.activeDispatchCount+=1;let Z=!1;return()=>{if(Z)return;Z=!0;let B=t.get(g);if(B)B.activeDispatchCount=Math.max(0,B.activeDispatchCount-1)}},listSandboxes(){return[...t.values()]},async deleteSandbox(g){let O=t.get(g);if(!O){console.log(`[user-desktop] delete handle=${g} (not found, no-op)`);return}if(O.activeDispatchCount>0){console.warn(`[user-desktop] delete handle=${g} port=${O.port} REFUSED \u2014 ${O.activeDispatchCount} active dispatch(es) in flight`);return}console.log(`[user-desktop] delete handle=${g} port=${O.port}`);try{O.process.kill("SIGTERM")}catch{}t.delete(g),$({handle:g,status:"stopped",sandboxPath:E(g),port:null,previewUrl:null,repoCloneUrl:null,branch:null,projectName:null,error:null}),w({handle:g,phase:"deleted"})},async shutdown(){console.log(`[user-desktop] shutdown \u2014 killing ${t.size} sandbox(es)`);for(let g of t.values())try{g.process.kill("SIGTERM")}catch{}t.clear()}}}function hHt(){return new Promise((i,u)=>{let t=$Ht();t.unref(),t.on("error",u),t.listen(0,"127.0.0.1",()=>{let f=t.address();if(f&&typeof f==="object"){let l=f.port;t.close(()=>i(l))}else t.close(()=>u(Error("could not allocate port")))})})}var lru=()=>{};import{randomUUID as DHt}from"crypto";import{hostname as gHt}from"os";async function cru(i){let u=gHt()||void 0;i.monitor?.onMachine?.(u??"this machine");let t=HHu(i.dataDir,{outFd:i.logFd,perSandboxLog:i.perSandboxLogs,hotReload:i.hotReload}),f=z1i({path:Q1i(i.dataDir),managedSandboxRoot:`${i.dataDir}/sandboxes`}),l=!1,c=()=>{if(l)return;l=!0;try{f.close()}catch{}};try{let E=0,$=fru({dataDir:i.dataDir,registry:f,resolvePreviewUrl:(G,q)=>E>0?`http://${G}.localhost:${E}`:`http://127.0.0.1:${q}`,spawnDaemon:async(G)=>{let q={DAEMON_BOOT_ID:DHt(),APP_ROOT:G.workdir,PROXY_PORT:String(G.port),DAEMON_TOKEN:G.daemonToken,OFFLOAD_ALLOWED_HOSTS:G.offloadAllowedHosts.join(","),...G.offloadAllowSameHostDev?{OFFLOAD_ALLOW_SAME_HOST_DEV:"1"}:{}};if(G.orgFsConfigJson){let Y=await MHu(i.dataDir);if(Y)q.ORGFS_CONFIG=G.orgFsConfigJson,q.ORGFS_RCLONE_PATH=Y}let S=await t({workdir:G.workdir,env:q,daemonPort:G.port});return{port:G.port,kill:(Y)=>S.kill(Y),exited:S.exited.then(()=>{return})}},postConfig:async(G,q,S,Y)=>{let V={port:q};if(S.workload)V.runtime=S.workload.runtime,V.packageManager={name:S.workload.packageManager,...S.workload.packageManagerPath?{path:S.workload.packageManagerPath}:{}};let L={application:V},$i=i_(S.operator??null);if($i)L.operator=$i;if(S.repo)L.git={repository:{cloneUrl:S.repo.cloneUrl,branch:S.repo.branch},...S.repo.userName&&S.repo.userEmail?{identity:{userName:S.repo.userName,userEmail:S.repo.userEmail}}:{}};await _O(`http://127.0.0.1:${G}`,Y,L)},waitForHealth:async(G)=>{await z4i(`http://127.0.0.1:${G}`)},maxSandboxes:20,onEvent:i.monitor?.onEvent}),w=await JVu({port:i.port,lookupSandboxPort:(G)=>$.proxyPort(G)});E=w.port,console.log(`Local ingress listening on http://127.0.0.1:${w.port} (use http://<handle>.localhost:${w.port}/)`),i.monitor?.onIngress?.(w.port);let d=VHu({provider:$}),_=async()=>{let G=await q2({dataDir:i.dataDir,target:i.clusterBaseUrl});if(!G)throw Object.assign(Error(`Session for ${i.clusterBaseUrl} is no longer valid \u2014 run \`deco auth login --target ${i.clusterBaseUrl}\` and restart \`deco link\`.`),{fatal:!0});return G.accessToken},v=await RVu(i.dataDir),h=process.env.npm_package_version??"0.0.0",D=await yHi(),g=HVu(D,{onChange:(G)=>{console.log(`[link-daemon] capabilities detected: +${G.join(",")} (now: ${D.join(",")})`)}}),O=wQi({path:`${i.dataDir}/link/outbox.sqlite`});O.clear();let Z=()=>{},B=new AbortController,y={clusterBaseUrl:i.clusterBaseUrl,getAccessToken:_,provider:$,outbox:O,controlHandler:d,capabilities:D,machineId:v,cliVersion:h,previewPort:w.port,onConnected:()=>{i.monitor?.onCluster?.("linked"),console.log(`Linked to ${i.clusterBaseUrl}`)},onShutdown:()=>Z(),runLifetimeSignal:B.signal};console.log(`[link-daemon] transport=tunnel cluster=${i.clusterBaseUrl}`);let F=await FVu(y);console.log("[link-daemon] active transport=tunnel");let T,U=new Promise((G)=>{T=G}),I=!1,j=async()=>{if(I)return;I=!0,B.abort(),console.log(`
81232
- Shutting down\u2026`),g();try{await F.close()}catch{}try{await w.stop()}catch{}try{await $.shutdown()}catch{}try{O.close()}catch{}c(),T(0)};process.on("SIGINT",()=>void j()),process.on("SIGTERM",()=>void j()),Z=()=>{console.log("Disconnect requested from the Studio web UI \u2014 shutting down. Run `bunx decocms@latest link` to reconnect."),j()},F.closed.then(()=>{if(i.monitor?.onCluster?.("closed"),!I)console.error("Cluster connection closed permanently; exiting."),j()});let A=pVu({provider:$,registry:f,dataDir:i.dataDir});return{stopped:U,stop:j,stopSandbox:A.stopSandbox,removeSandbox:A.removeSandbox,inspectSandbox:A.inspectSandbox}}catch(E){throw c(),E}}var Eru=N(()=>{uQi();WC();bHu();qHu();rHu();dQi();TVu();KVu();bVu();CVu();YC();FHi();iru();lru()});function THi(i){return i.map((u)=>typeof u==="string"?u:String(u)).join(" ")}var H1i;var UHi=N(()=>{H1i={name:"decocms",version:"3.103.0",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/mesh"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:'bun run migrate && concurrently "bun run dev:client" "bun run dev:server"',"dev:servers":'concurrently "bun run dev:client" "bun run dev:server"',"dev:client":"vite dev","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts","build:client":"bun --bun vite build","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","db:migrate":"bun run ./dist/server/migrate.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts",test:"bun test","test:ct":"playwright test -c playwright-ct.config.ts","test:ct:ui":"playwright test -c playwright-ct.config.ts --ui","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts","smoke:link":"bun run scripts/smoke-link.ts",prepublishOnly:"bun run build:client && bun run build:server"},optionalDependencies:{"@anthropic-ai/claude-agent-sdk":"^0.3.181","@duckdb/node-api":"^1.5.0-r.1","@openai/codex":"0.141.0","@openai/codex-darwin-arm64":"npm:@openai/codex@0.141.0-darwin-arm64","@openai/codex-darwin-x64":"npm:@openai/codex@0.141.0-darwin-x64","@openai/codex-linux-arm64":"npm:@openai/codex@0.141.0-linux-arm64","@openai/codex-linux-x64":"npm:@openai/codex@0.141.0-linux-x64","@openai/codex-win32-arm64":"npm:@openai/codex@0.141.0-win32-arm64","@openai/codex-win32-x64":"npm:@openai/codex@0.141.0-win32-x64"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@dnd-kit/core":"^6.3.1","@dnd-kit/sortable":"^10.0.0","@dnd-kit/utilities":"^3.2.2","@inkjs/ui":"^2.0.0","@modelcontextprotocol/ext-apps":"^1.7.1","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","@tanstack/react-virtual":"3.13.24","@xterm/addon-fit":"^0.11.0","@xterm/xterm":"^6.0.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.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",kysely:"^0.28.12","node-pty":"^1.0.0","posthog-js":"^1.371.1","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@ai-sdk/react":"^3.0.210","@better-auth/sso":"1.4.1","@daveyplate/better-auth-ui":"^3.2.7","@deco/ui":"workspace:*","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/harness":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/mesh-sdk":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/std":"workspace:*","@decocms/tunnel":"workspace:*","@floating-ui/react":"^0.27.16","@happy-dom/global-registrator":"^20.9.0","@hookform/resolvers":"^5.2.2","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@monaco-editor/react":"^4.7.0","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@playwright/experimental-ct-react":"1.59.1","@playwright/test":"^1.58.2","@radix-ui/react-avatar":"^1.1.10","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-dropdown-menu":"^2.1.16","@radix-ui/react-label":"^2.1.7","@radix-ui/react-select":"^2.2.6","@radix-ui/react-separator":"^1.1.7","@radix-ui/react-slot":"^1.2.3","@radix-ui/react-tabs":"^1.1.13","@rjsf/shadcn":"^6.6.2","@rjsf/utils":"^6.6.2","@rjsf/validator-ajv8":"^6.6.2","@tailwindcss/vite":"^4.1.17","@tanstack/react-query":"5.100.10","@tanstack/react-router":"1.169.2","@testing-library/jest-dom":"^6.9.1","@testing-library/react":"^16.3.2","@tiptap/core":"3.20.2","@tiptap/extension-placeholder":"3.20.2","@tiptap/pm":"3.20.2","@tiptap/react":"3.20.2","@tiptap/starter-kit":"3.20.2","@tiptap/suggestion":"3.20.2","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@untitledui/icons":"^0.0.19","@vercel/nft":"^1.1.1","@vitejs/plugin-react":"^5.1.0",ai:"^6.0.208","babel-plugin-react-compiler":"^1.0.0","better-auth":"1.4.22","class-variance-authority":"^0.7.1",clsx:"^2.1.1",concurrently:"^9.2.1",croner:"^9.1.0","date-fns":"^4.1.0",degit:"^2.8.4",hono:"^4.10.7","input-otp":"^1.4.2",jose:"^6.0.11","lucide-react":"^0.468.0",marked:"^15.0.6",nanoid:"^5.1.6",pg:"^8.16.3",prettier:"^3.4.2","react-hook-form":"^7.66.0","react-markdown":"^10.1.0","react-resizable-panels":"^2.1.7","react-syntax-highlighter":"^15.6.1",recharts:"^3.6.0","rehype-raw":"^7.0.0","remark-gfm":"^4.0.0","sass-embedded":"^1.97.2",sonner:"^2.0.7","tailwind-merge":"^3.3.1",tailwindcss:"^4.1.17",typescript:"^5.9.3",vite:"^7.2.1","vite-tsconfig-paths":"^5.1.4",zod:"^4.0.0"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","mesh","tools"],license:"MIT",publishConfig:{access:"public"}}});var DM={};zi(DM,{printBanner:()=>ZHt,bannerLines:()=>$ru,BANNER_LINES:()=>b1i,BANNER_GRADIENT:()=>R1i});function OHt(i){let u=Number.parseInt(i.slice(1),16);return[u>>16&255,u>>8&255,u&255]}function $ru(i){let u=b1i.map((t,f)=>{let[l,c,E]=OHt(R1i[f]);return`\x1B[38;2;${l};${c};${E}m${t}\x1B[39m`});if(i!==void 0)u.push(`\x1B[2m v${i}\x1B[22m`);return u}function ZHt(i){console.log("");for(let u of $ru(i))console.log(u);console.log("")}var b1i,R1i;var xY=N(()=>{b1i=[" \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588 ","\u2591\u2591\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588 \u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588\u2588\u2588 "," \u2591\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2588 \u2591 \u2588\u2588\u2588 \u2591\u2591\u2591 \u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2591\u2591\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591 \u2588\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588 "," \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2591\u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2591 ","\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591 "],R1i=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"]});import{Box as BHt,Text as wru}from"ink";import{jsx as yHt,jsxs as dru}from"react/jsx-runtime";function C1i({version:i}){return dru(BHt,{flexDirection:"column",marginTop:1,children:[b1i.map((u,t)=>yHt(wru,{color:R1i[t],children:u},t)),dru(wru,{dimColor:!0,children:[" v",i]})]})}var PHi=N(()=>{xY()});function _ru(i){let u=i.branch??i.handle,t=[];if(i.dirtyCount>0)t.push(`${i.dirtyCount} uncommitted file${i.dirtyCount===1?"":"s"}`);if(i.merged===!1)t.push("branch not merged");return t.length>0?`\u26A0 ${t.join(", ")} \u2014 delete ${u}? (y/n)`:`Delete ${u}? (y/n)`}function IY(i){return[...i.values()].map((u)=>u.handle).sort((u,t)=>u.localeCompare(t))}function vru(i,u,t){if(i.length===0)return null;let f=u===null?-1:i.indexOf(u);if(f===-1)return t>0?i[0]:i[i.length-1];let l=Math.max(0,Math.min(i.length-1,f+t));return i[l]}function hru(i,u,t){if(t!==u)return t;let f=i.indexOf(u);if(f===-1)return t;return i[f+1]??i[f-1]??null}var nHi={};zi(nHi,{subscribeLinkState:()=>xHi,setSelectedHandle:()=>IHi,setRemoving:()=>V1i,setPersistedSandboxes:()=>kHt,setPendingConfirm:()=>NM,setMachine:()=>IHt,setLogPath:()=>nHt,setLinkActions:()=>GHt,setIngress:()=>xHt,setDaemonError:()=>AHt,setClusterUrl:()=>PHt,setCluster:()=>UHt,setActionError:()=>q1i,resetLinkStateForTests:()=>XHt,removeSandboxRow:()=>AHi,pushSandboxEvent:()=>jHt,getLinkState:()=>gM,applySandboxEvent:()=>Dru});function THt(i){return i==="spawning"||i==="ready"||i==="failed"}function Dru(i,u){let t=new Map(i),f=t.get(u.handle);if(u.phase==="evicted"||u.phase==="deleted"){if(f)t.set(u.handle,{...f,port:null,previewUrl:null,status:"stopped",error:null});return t}return t.set(u.handle,{handle:u.handle,port:u.port??f?.port??null,previewUrl:u.previewUrl??f?.previewUrl??null,status:u.phase,error:u.phase==="failed"?u.error??"failed":null,projectName:f?.projectName??null,branch:f?.branch??null,sandboxPath:f?.sandboxPath??null}),t}function gru(){return{cluster:"connecting",clusterUrl:null,ingressUrl:null,ingressPort:null,machine:null,cap:FHt,sandboxes:new Map,daemonError:null,logPath:null,selectedHandle:null,pendingConfirm:null,removingHandles:new Set,actionError:null,actions:null}}function J$(){for(let i of M1i)i()}function gM(){return tf}function xHi(i){return M1i.add(i),()=>M1i.delete(i)}function UHt(i){tf={...tf,cluster:i},J$()}function PHt(i){tf={...tf,clusterUrl:i},J$()}function xHt(i,u){tf={...tf,ingressPort:i,ingressUrl:u},J$()}function IHt(i){tf={...tf,machine:i},J$()}function AHt(i){tf={...tf,daemonError:i},J$()}function nHt(i){tf={...tf,logPath:i},J$()}function IHi(i){tf={...tf,selectedHandle:i},J$()}function NM(i){tf={...tf,pendingConfirm:i},J$()}function q1i(i){tf={...tf,actionError:i},J$()}function V1i(i,u){if(tf.removingHandles.has(i)===u)return;let t=new Set(tf.removingHandles);if(u)t.add(i);else t.delete(i);tf={...tf,removingHandles:t},J$()}function GHt(i){tf={...tf,actions:i},J$()}function AHi(i){let u=IY(tf.sandboxes),t=hru(u,i,tf.selectedHandle),f=new Map(tf.sandboxes);f.delete(i);let l=new Set(tf.removingHandles);l.delete(i),tf={...tf,sandboxes:f,selectedHandle:t,pendingConfirm:null,removingHandles:l},J$()}function kHt(i){let u=new Map;for(let t of i)u.set(t.handle,{handle:t.handle,port:t.port,previewUrl:t.previewUrl,status:t.status,error:t.error,projectName:t.projectName,branch:t.branch,sandboxPath:t.sandboxPath});for(let[t,f]of tf.sandboxes)if(THt(f.status))u.set(t,f);tf={...tf,sandboxes:u},J$()}function jHt(i){tf={...tf,sandboxes:Dru(tf.sandboxes,i)},J$()}function XHt(){tf=gru(),M1i.clear()}var FHt=20,tf,M1i;var OM=N(()=>{tf=gru(),M1i=new Set});import{spawn as JHt}from"child_process";function KHt(i){if(i==="darwin")return"open";if(i==="win32")return"start";return"xdg-open"}function Nru(i,u=process.platform){let t=KHt(u);try{JHt(t,[i],{stdio:"ignore",detached:!0}).unref()}catch{}}var Oru=()=>{};function Zru(i,u={}){let t=u.openUrl??Nru,f=gM(),l=IY(f.sandboxes),c=f.selectedHandle!==null&&l.includes(f.selectedHandle)?f.selectedHandle:l[0]??null,E=f.actions;switch(i.type){case"move":IHi(vru(l,f.selectedHandle,i.delta));return;case"open":{if(c===null)return;let $=f.sandboxes.get(c);if($?.status==="ready"&&$.previewUrl)t($.previewUrl);return}case"stop":if(c!==null&&E)E.stopSandbox(c);return;case"delete":{if(c===null||!E)return;let $=E.inspectSandbox(c),w=f.sandboxes.get(c);q1i(null),NM({handle:c,branch:$?.branch??w?.branch??null,dirtyCount:$?.dirtyCount??0,merged:$?.merged??null});return}case"confirmYes":{let $=f.pendingConfirm;if(NM(null),$===null||!E)return;V1i($.handle,!0),E.removeSandbox($.handle).then((w)=>{if(w.ok)AHi($.handle);else V1i($.handle,!1),q1i(w.error)});return}case"confirmNo":NM(null);return;case"quit":if(E)E.quit();return}}var Bru=N(()=>{OM();Oru()});function yru(i,u,t){if(t)return i==="y"||i==="Y"?{type:"confirmYes"}:{type:"confirmNo"};if(u.upArrow||i==="k")return{type:"move",delta:-1};if(u.downArrow||i==="j")return{type:"move",delta:1};if(i==="s")return{type:"stop"};if(i==="d")return{type:"delete"};if(i==="o")return{type:"open"};if(i==="q"||u.ctrl===!0&&i==="c")return{type:"quit"};return null}var Fru={};zi(Fru,{LinkApp:()=>LHt});import{Box as H1,Text as cl,useInput as SHt}from"ink";import{useSyncExternalStore as YHt}from"react";import{jsx as xf,jsxs as v_}from"react/jsx-runtime";function WHt(i,u){if(u)return{color:"yellow",text:"\u25CC Removing\u2026"};if(i.status==="ready")return{color:"green",text:"\u25CF Live"};if(i.status==="spawning")return{color:"yellow",text:"\u25CC Starting\u2026"};if(i.status==="stopped")return{color:"gray",text:"\u25A0 Stopped"};if(i.status==="missing")return{color:"yellow",text:"\u25A1 Missing"};if(i.status==="merged")return{color:"cyan",text:"\u2713 Merged"};if(i.status==="invalid")return{color:"red",text:"\u2717 Invalid"};if(i.status==="failed")return{color:"red",text:`\u2717 Failed: ${i.error??"failed"}`};return{color:"red",text:`\u2717 Error: ${i.error??""}`}}function LHt(){let i=YHt(xHi,gM),u=[...i.sandboxes.values()].sort((l,c)=>l.handle.localeCompare(c.handle)),t=IY(i.sandboxes),f=i.selectedHandle!==null&&t.includes(i.selectedHandle)?i.selectedHandle:t[0]??null;return SHt((l,c)=>{let E=yru(l,c,i.pendingConfirm!==null);if(E!==null)Zru(E)}),v_(H1,{flexDirection:"column",children:[xf(C1i,{version:H1i.version}),xf(H1,{marginBottom:1,children:xf(cl,{dimColor:!0,children:"\u2500".repeat(80)})}),xf(H1,{children:i.cluster==="linked"?v_(cl,{color:"green",children:["\u2713 Connected to ",i.clusterUrl??"deco"]}):i.cluster==="connecting"?v_(cl,{color:"yellow",children:["\u25CC Connecting to ",i.clusterUrl??"deco","\u2026"]}):v_(cl,{color:"red",children:["\u2717 Disconnected from ",i.clusterUrl??"deco"]})}),xf(H1,{children:i.ingressUrl?v_(cl,{color:"green",children:["\u2713 Serving at ",i.ingressUrl]}):xf(cl,{dimColor:!0,children:"\u25CC Starting local server\u2026"})}),xf(H1,{marginBottom:1,children:xf(cl,{dimColor:!0,children:`${"Computer".padEnd(16)}${i.machine??"this computer"} \xB7 ${u.length} of ${i.cap} previews`})}),u.length===0?xf(cl,{dimColor:!0,children:"No previews running yet."}):v_(H1,{flexDirection:"column",children:[v_(H1,{children:[xf(H1,{width:2,flexShrink:0}),xf(H1,{width:AY.project,flexShrink:0,marginRight:1,children:xf(cl,{dimColor:!0,wrap:"truncate-end",children:"PROJECT"})}),xf(H1,{width:AY.branch,flexShrink:0,marginRight:1,children:xf(cl,{dimColor:!0,wrap:"truncate-end",children:"BRANCH"})}),xf(H1,{width:AY.status,flexShrink:0,marginRight:1,children:xf(cl,{dimColor:!0,wrap:"truncate-end",children:"STATUS"})}),xf(H1,{flexGrow:1,children:xf(cl,{dimColor:!0,wrap:"truncate-end",children:"PREVIEW URL"})})]}),u.map((l)=>{let c=WHt(l,i.removingHandles.has(l.handle)),E=l.handle===f;return v_(H1,{children:[xf(H1,{width:2,flexShrink:0,children:xf(cl,{color:"cyan",children:E?"\u203A":" "})}),xf(H1,{width:AY.project,flexShrink:0,marginRight:1,children:xf(cl,{bold:E,wrap:"truncate-end",children:l.projectName??l.handle})}),xf(H1,{width:AY.branch,flexShrink:0,marginRight:1,children:xf(cl,{bold:E,wrap:"truncate-end",children:l.branch??"\u2014"})}),xf(H1,{width:AY.status,flexShrink:0,marginRight:1,children:xf(cl,{color:c.color,bold:E,wrap:"truncate-end",children:c.text})}),xf(H1,{flexGrow:1,children:xf(cl,{dimColor:!0,wrap:"truncate-end",children:l.previewUrl??"\u2014"})})]},l.handle)})]}),i.daemonError?xf(H1,{marginTop:1,children:v_(cl,{color:"red",children:["\u26A0 ",i.daemonError]})}):null,i.logPath?xf(H1,{marginTop:1,children:v_(cl,{dimColor:!0,children:["Logs: ",i.logPath]})}):null,i.pendingConfirm?xf(H1,{marginTop:1,children:xf(cl,{color:"yellow",children:_ru(i.pendingConfirm)})}):null,i.actionError?xf(H1,{marginTop:1,children:v_(cl,{color:"red",children:["\u2717 ",i.actionError]})}):null,xf(H1,{marginTop:1,children:xf(cl,{dimColor:!0,children:"\u2191\u2193 move \xB7 s stop \xB7 d delete \xB7 o open \xB7 q quit"})})]})}var AY;var Tru=N(()=>{UHi();PHi();Bru();OM();AY={project:18,branch:22,status:14}});var Uru={};zi(Uru,{runLinkCommand:()=>qHt});import{closeSync as QHt,mkdirSync as zHt,openSync as HHt,writeSync as bHt}from"fs";import{homedir as RHt}from"os";import{join as GHi}from"path";function CHt(i,u){let t={log:console.log,warn:console.warn,error:console.error},f=(l)=>{if(u===void 0)return;try{bHt(u,`${THi(l)}
81232
+ Shutting down\u2026`),g();try{await F.close()}catch{}try{await w.stop()}catch{}try{await $.shutdown()}catch{}try{O.close()}catch{}c(),T(0)};process.on("SIGINT",()=>void j()),process.on("SIGTERM",()=>void j()),Z=()=>{console.log("Disconnect requested from the Studio web UI \u2014 shutting down. Run `bunx decocms@latest link` to reconnect."),j()},F.closed.then(()=>{if(i.monitor?.onCluster?.("closed"),!I)console.error("Cluster connection closed permanently; exiting."),j()});let A=pVu({provider:$,registry:f,dataDir:i.dataDir});return{stopped:U,stop:j,stopSandbox:A.stopSandbox,removeSandbox:A.removeSandbox,inspectSandbox:A.inspectSandbox}}catch(E){throw c(),E}}var Eru=N(()=>{uQi();WC();bHu();qHu();rHu();dQi();TVu();KVu();bVu();CVu();YC();FHi();iru();lru()});function THi(i){return i.map((u)=>typeof u==="string"?u:String(u)).join(" ")}var H1i;var UHi=N(()=>{H1i={name:"decocms",version:"3.103.2",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/mesh"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:'bun run migrate && concurrently "bun run dev:client" "bun run dev:server"',"dev:servers":'concurrently "bun run dev:client" "bun run dev:server"',"dev:client":"vite dev","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts","build:client":"bun --bun vite build","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","db:migrate":"bun run ./dist/server/migrate.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts",test:"bun test","test:ct":"playwright test -c playwright-ct.config.ts","test:ct:ui":"playwright test -c playwright-ct.config.ts --ui","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts","smoke:link":"bun run scripts/smoke-link.ts",prepublishOnly:"bun run build:client && bun run build:server"},optionalDependencies:{"@anthropic-ai/claude-agent-sdk":"^0.3.181","@duckdb/node-api":"^1.5.0-r.1","@openai/codex":"0.141.0","@openai/codex-darwin-arm64":"npm:@openai/codex@0.141.0-darwin-arm64","@openai/codex-darwin-x64":"npm:@openai/codex@0.141.0-darwin-x64","@openai/codex-linux-arm64":"npm:@openai/codex@0.141.0-linux-arm64","@openai/codex-linux-x64":"npm:@openai/codex@0.141.0-linux-x64","@openai/codex-win32-arm64":"npm:@openai/codex@0.141.0-win32-arm64","@openai/codex-win32-x64":"npm:@openai/codex@0.141.0-win32-x64"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@dnd-kit/core":"^6.3.1","@dnd-kit/sortable":"^10.0.0","@dnd-kit/utilities":"^3.2.2","@inkjs/ui":"^2.0.0","@modelcontextprotocol/ext-apps":"^1.7.1","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","@tanstack/react-virtual":"3.13.24","@xterm/addon-fit":"^0.11.0","@xterm/xterm":"^6.0.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.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",kysely:"^0.28.12","node-pty":"^1.0.0","posthog-js":"^1.371.1","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@ai-sdk/react":"^3.0.210","@better-auth/sso":"1.4.1","@daveyplate/better-auth-ui":"^3.2.7","@deco/ui":"workspace:*","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/harness":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/mesh-sdk":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/std":"workspace:*","@decocms/tunnel":"workspace:*","@floating-ui/react":"^0.27.16","@happy-dom/global-registrator":"^20.9.0","@hookform/resolvers":"^5.2.2","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@monaco-editor/react":"^4.7.0","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@playwright/experimental-ct-react":"1.59.1","@playwright/test":"^1.58.2","@radix-ui/react-avatar":"^1.1.10","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-dropdown-menu":"^2.1.16","@radix-ui/react-label":"^2.1.7","@radix-ui/react-select":"^2.2.6","@radix-ui/react-separator":"^1.1.7","@radix-ui/react-slot":"^1.2.3","@radix-ui/react-tabs":"^1.1.13","@rjsf/shadcn":"^6.6.2","@rjsf/utils":"^6.6.2","@rjsf/validator-ajv8":"^6.6.2","@tailwindcss/vite":"^4.1.17","@tanstack/react-query":"5.100.10","@tanstack/react-router":"1.169.2","@testing-library/jest-dom":"^6.9.1","@testing-library/react":"^16.3.2","@tiptap/core":"3.20.2","@tiptap/extension-placeholder":"3.20.2","@tiptap/pm":"3.20.2","@tiptap/react":"3.20.2","@tiptap/starter-kit":"3.20.2","@tiptap/suggestion":"3.20.2","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@untitledui/icons":"^0.0.19","@vercel/nft":"^1.1.1","@vitejs/plugin-react":"^5.1.0",ai:"^6.0.208","babel-plugin-react-compiler":"^1.0.0","better-auth":"1.4.22","class-variance-authority":"^0.7.1",clsx:"^2.1.1",concurrently:"^9.2.1",croner:"^9.1.0","date-fns":"^4.1.0",degit:"^2.8.4",hono:"^4.10.7","input-otp":"^1.4.2",jose:"^6.0.11","lucide-react":"^0.468.0",marked:"^15.0.6",nanoid:"^5.1.6",pg:"^8.16.3",prettier:"^3.4.2","react-hook-form":"^7.66.0","react-markdown":"^10.1.0","react-resizable-panels":"^2.1.7","react-syntax-highlighter":"^15.6.1",recharts:"^3.6.0","rehype-raw":"^7.0.0","remark-gfm":"^4.0.0","sass-embedded":"^1.97.2",sonner:"^2.0.7","tailwind-merge":"^3.3.1",tailwindcss:"^4.1.17",typescript:"^5.9.3",vite:"^7.2.1","vite-tsconfig-paths":"^5.1.4",zod:"^4.0.0"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","mesh","tools"],license:"MIT",publishConfig:{access:"public"}}});var DM={};zi(DM,{printBanner:()=>ZHt,bannerLines:()=>$ru,BANNER_LINES:()=>b1i,BANNER_GRADIENT:()=>R1i});function OHt(i){let u=Number.parseInt(i.slice(1),16);return[u>>16&255,u>>8&255,u&255]}function $ru(i){let u=b1i.map((t,f)=>{let[l,c,E]=OHt(R1i[f]);return`\x1B[38;2;${l};${c};${E}m${t}\x1B[39m`});if(i!==void 0)u.push(`\x1B[2m v${i}\x1B[22m`);return u}function ZHt(i){console.log("");for(let u of $ru(i))console.log(u);console.log("")}var b1i,R1i;var xY=N(()=>{b1i=[" \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588 ","\u2591\u2591\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588 \u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588\u2588\u2588 "," \u2591\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2588 \u2591 \u2588\u2588\u2588 \u2591\u2591\u2591 \u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2591\u2591\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591 \u2588\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588 "," \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2591\u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2591 ","\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591 "],R1i=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"]});import{Box as BHt,Text as wru}from"ink";import{jsx as yHt,jsxs as dru}from"react/jsx-runtime";function C1i({version:i}){return dru(BHt,{flexDirection:"column",marginTop:1,children:[b1i.map((u,t)=>yHt(wru,{color:R1i[t],children:u},t)),dru(wru,{dimColor:!0,children:[" v",i]})]})}var PHi=N(()=>{xY()});function _ru(i){let u=i.branch??i.handle,t=[];if(i.dirtyCount>0)t.push(`${i.dirtyCount} uncommitted file${i.dirtyCount===1?"":"s"}`);if(i.merged===!1)t.push("branch not merged");return t.length>0?`\u26A0 ${t.join(", ")} \u2014 delete ${u}? (y/n)`:`Delete ${u}? (y/n)`}function IY(i){return[...i.values()].map((u)=>u.handle).sort((u,t)=>u.localeCompare(t))}function vru(i,u,t){if(i.length===0)return null;let f=u===null?-1:i.indexOf(u);if(f===-1)return t>0?i[0]:i[i.length-1];let l=Math.max(0,Math.min(i.length-1,f+t));return i[l]}function hru(i,u,t){if(t!==u)return t;let f=i.indexOf(u);if(f===-1)return t;return i[f+1]??i[f-1]??null}var nHi={};zi(nHi,{subscribeLinkState:()=>xHi,setSelectedHandle:()=>IHi,setRemoving:()=>V1i,setPersistedSandboxes:()=>kHt,setPendingConfirm:()=>NM,setMachine:()=>IHt,setLogPath:()=>nHt,setLinkActions:()=>GHt,setIngress:()=>xHt,setDaemonError:()=>AHt,setClusterUrl:()=>PHt,setCluster:()=>UHt,setActionError:()=>q1i,resetLinkStateForTests:()=>XHt,removeSandboxRow:()=>AHi,pushSandboxEvent:()=>jHt,getLinkState:()=>gM,applySandboxEvent:()=>Dru});function THt(i){return i==="spawning"||i==="ready"||i==="failed"}function Dru(i,u){let t=new Map(i),f=t.get(u.handle);if(u.phase==="evicted"||u.phase==="deleted"){if(f)t.set(u.handle,{...f,port:null,previewUrl:null,status:"stopped",error:null});return t}return t.set(u.handle,{handle:u.handle,port:u.port??f?.port??null,previewUrl:u.previewUrl??f?.previewUrl??null,status:u.phase,error:u.phase==="failed"?u.error??"failed":null,projectName:f?.projectName??null,branch:f?.branch??null,sandboxPath:f?.sandboxPath??null}),t}function gru(){return{cluster:"connecting",clusterUrl:null,ingressUrl:null,ingressPort:null,machine:null,cap:FHt,sandboxes:new Map,daemonError:null,logPath:null,selectedHandle:null,pendingConfirm:null,removingHandles:new Set,actionError:null,actions:null}}function J$(){for(let i of M1i)i()}function gM(){return tf}function xHi(i){return M1i.add(i),()=>M1i.delete(i)}function UHt(i){tf={...tf,cluster:i},J$()}function PHt(i){tf={...tf,clusterUrl:i},J$()}function xHt(i,u){tf={...tf,ingressPort:i,ingressUrl:u},J$()}function IHt(i){tf={...tf,machine:i},J$()}function AHt(i){tf={...tf,daemonError:i},J$()}function nHt(i){tf={...tf,logPath:i},J$()}function IHi(i){tf={...tf,selectedHandle:i},J$()}function NM(i){tf={...tf,pendingConfirm:i},J$()}function q1i(i){tf={...tf,actionError:i},J$()}function V1i(i,u){if(tf.removingHandles.has(i)===u)return;let t=new Set(tf.removingHandles);if(u)t.add(i);else t.delete(i);tf={...tf,removingHandles:t},J$()}function GHt(i){tf={...tf,actions:i},J$()}function AHi(i){let u=IY(tf.sandboxes),t=hru(u,i,tf.selectedHandle),f=new Map(tf.sandboxes);f.delete(i);let l=new Set(tf.removingHandles);l.delete(i),tf={...tf,sandboxes:f,selectedHandle:t,pendingConfirm:null,removingHandles:l},J$()}function kHt(i){let u=new Map;for(let t of i)u.set(t.handle,{handle:t.handle,port:t.port,previewUrl:t.previewUrl,status:t.status,error:t.error,projectName:t.projectName,branch:t.branch,sandboxPath:t.sandboxPath});for(let[t,f]of tf.sandboxes)if(THt(f.status))u.set(t,f);tf={...tf,sandboxes:u},J$()}function jHt(i){tf={...tf,sandboxes:Dru(tf.sandboxes,i)},J$()}function XHt(){tf=gru(),M1i.clear()}var FHt=20,tf,M1i;var OM=N(()=>{tf=gru(),M1i=new Set});import{spawn as JHt}from"child_process";function KHt(i){if(i==="darwin")return"open";if(i==="win32")return"start";return"xdg-open"}function Nru(i,u=process.platform){let t=KHt(u);try{JHt(t,[i],{stdio:"ignore",detached:!0}).unref()}catch{}}var Oru=()=>{};function Zru(i,u={}){let t=u.openUrl??Nru,f=gM(),l=IY(f.sandboxes),c=f.selectedHandle!==null&&l.includes(f.selectedHandle)?f.selectedHandle:l[0]??null,E=f.actions;switch(i.type){case"move":IHi(vru(l,f.selectedHandle,i.delta));return;case"open":{if(c===null)return;let $=f.sandboxes.get(c);if($?.status==="ready"&&$.previewUrl)t($.previewUrl);return}case"stop":if(c!==null&&E)E.stopSandbox(c);return;case"delete":{if(c===null||!E)return;let $=E.inspectSandbox(c),w=f.sandboxes.get(c);q1i(null),NM({handle:c,branch:$?.branch??w?.branch??null,dirtyCount:$?.dirtyCount??0,merged:$?.merged??null});return}case"confirmYes":{let $=f.pendingConfirm;if(NM(null),$===null||!E)return;V1i($.handle,!0),E.removeSandbox($.handle).then((w)=>{if(w.ok)AHi($.handle);else V1i($.handle,!1),q1i(w.error)});return}case"confirmNo":NM(null);return;case"quit":if(E)E.quit();return}}var Bru=N(()=>{OM();Oru()});function yru(i,u,t){if(t)return i==="y"||i==="Y"?{type:"confirmYes"}:{type:"confirmNo"};if(u.upArrow||i==="k")return{type:"move",delta:-1};if(u.downArrow||i==="j")return{type:"move",delta:1};if(i==="s")return{type:"stop"};if(i==="d")return{type:"delete"};if(i==="o")return{type:"open"};if(i==="q"||u.ctrl===!0&&i==="c")return{type:"quit"};return null}var Fru={};zi(Fru,{LinkApp:()=>LHt});import{Box as H1,Text as cl,useInput as SHt}from"ink";import{useSyncExternalStore as YHt}from"react";import{jsx as xf,jsxs as v_}from"react/jsx-runtime";function WHt(i,u){if(u)return{color:"yellow",text:"\u25CC Removing\u2026"};if(i.status==="ready")return{color:"green",text:"\u25CF Live"};if(i.status==="spawning")return{color:"yellow",text:"\u25CC Starting\u2026"};if(i.status==="stopped")return{color:"gray",text:"\u25A0 Stopped"};if(i.status==="missing")return{color:"yellow",text:"\u25A1 Missing"};if(i.status==="merged")return{color:"cyan",text:"\u2713 Merged"};if(i.status==="invalid")return{color:"red",text:"\u2717 Invalid"};if(i.status==="failed")return{color:"red",text:`\u2717 Failed: ${i.error??"failed"}`};return{color:"red",text:`\u2717 Error: ${i.error??""}`}}function LHt(){let i=YHt(xHi,gM),u=[...i.sandboxes.values()].sort((l,c)=>l.handle.localeCompare(c.handle)),t=IY(i.sandboxes),f=i.selectedHandle!==null&&t.includes(i.selectedHandle)?i.selectedHandle:t[0]??null;return SHt((l,c)=>{let E=yru(l,c,i.pendingConfirm!==null);if(E!==null)Zru(E)}),v_(H1,{flexDirection:"column",children:[xf(C1i,{version:H1i.version}),xf(H1,{marginBottom:1,children:xf(cl,{dimColor:!0,children:"\u2500".repeat(80)})}),xf(H1,{children:i.cluster==="linked"?v_(cl,{color:"green",children:["\u2713 Connected to ",i.clusterUrl??"deco"]}):i.cluster==="connecting"?v_(cl,{color:"yellow",children:["\u25CC Connecting to ",i.clusterUrl??"deco","\u2026"]}):v_(cl,{color:"red",children:["\u2717 Disconnected from ",i.clusterUrl??"deco"]})}),xf(H1,{children:i.ingressUrl?v_(cl,{color:"green",children:["\u2713 Serving at ",i.ingressUrl]}):xf(cl,{dimColor:!0,children:"\u25CC Starting local server\u2026"})}),xf(H1,{marginBottom:1,children:xf(cl,{dimColor:!0,children:`${"Computer".padEnd(16)}${i.machine??"this computer"} \xB7 ${u.length} of ${i.cap} previews`})}),u.length===0?xf(cl,{dimColor:!0,children:"No previews running yet."}):v_(H1,{flexDirection:"column",children:[v_(H1,{children:[xf(H1,{width:2,flexShrink:0}),xf(H1,{width:AY.project,flexShrink:0,marginRight:1,children:xf(cl,{dimColor:!0,wrap:"truncate-end",children:"PROJECT"})}),xf(H1,{width:AY.branch,flexShrink:0,marginRight:1,children:xf(cl,{dimColor:!0,wrap:"truncate-end",children:"BRANCH"})}),xf(H1,{width:AY.status,flexShrink:0,marginRight:1,children:xf(cl,{dimColor:!0,wrap:"truncate-end",children:"STATUS"})}),xf(H1,{flexGrow:1,children:xf(cl,{dimColor:!0,wrap:"truncate-end",children:"PREVIEW URL"})})]}),u.map((l)=>{let c=WHt(l,i.removingHandles.has(l.handle)),E=l.handle===f;return v_(H1,{children:[xf(H1,{width:2,flexShrink:0,children:xf(cl,{color:"cyan",children:E?"\u203A":" "})}),xf(H1,{width:AY.project,flexShrink:0,marginRight:1,children:xf(cl,{bold:E,wrap:"truncate-end",children:l.projectName??l.handle})}),xf(H1,{width:AY.branch,flexShrink:0,marginRight:1,children:xf(cl,{bold:E,wrap:"truncate-end",children:l.branch??"\u2014"})}),xf(H1,{width:AY.status,flexShrink:0,marginRight:1,children:xf(cl,{color:c.color,bold:E,wrap:"truncate-end",children:c.text})}),xf(H1,{flexGrow:1,children:xf(cl,{dimColor:!0,wrap:"truncate-end",children:l.previewUrl??"\u2014"})})]},l.handle)})]}),i.daemonError?xf(H1,{marginTop:1,children:v_(cl,{color:"red",children:["\u26A0 ",i.daemonError]})}):null,i.logPath?xf(H1,{marginTop:1,children:v_(cl,{dimColor:!0,children:["Logs: ",i.logPath]})}):null,i.pendingConfirm?xf(H1,{marginTop:1,children:xf(cl,{color:"yellow",children:_ru(i.pendingConfirm)})}):null,i.actionError?xf(H1,{marginTop:1,children:v_(cl,{color:"red",children:["\u2717 ",i.actionError]})}):null,xf(H1,{marginTop:1,children:xf(cl,{dimColor:!0,children:"\u2191\u2193 move \xB7 s stop \xB7 d delete \xB7 o open \xB7 q quit"})})]})}var AY;var Tru=N(()=>{UHi();PHi();Bru();OM();AY={project:18,branch:22,status:14}});var Uru={};zi(Uru,{runLinkCommand:()=>qHt});import{closeSync as QHt,mkdirSync as zHt,openSync as HHt,writeSync as bHt}from"fs";import{homedir as RHt}from"os";import{join as GHi}from"path";function CHt(i,u){let t={log:console.log,warn:console.warn,error:console.error},f=(l)=>{if(u===void 0)return;try{bHt(u,`${THi(l)}
81233
81233
  `)}catch{}};return console.log=(...l)=>f(l),console.warn=(...l)=>f(l),console.error=(...l)=>{f(l),i(THi(l))},()=>{console.log=t.log,console.warn=t.warn,console.error=t.error}}async function MHt(i,u){let t;try{t=await fetch(`${i}/api/links/me`,{headers:{authorization:`Bearer ${u}`},signal:AbortSignal.timeout(1e4)})}catch{return}if(t.status===401||t.status===403)throw Error(`Authentication rejected by ${i} \u2014 the session token was not accepted. `+`Run \`deco auth login --target ${i}\` and try again.`)}async function qHt(i={}){let u=i.port??5174,t=i.dataDir??process.env.DATA_DIR??process.env.DECOCMS_HOME??GHi(RHt(),"deco"),f=i.clusterBaseUrl??process.env.MESH_CLUSTER_URL??"https://studio.decocms.com",l,c,E,$=()=>{if(E===void 0)return;try{E.close()}catch{}finally{E=void 0}};try{let w=GHi(t,"sandboxes");E=z1i({path:Q1i(t),managedSandboxRoot:w});let d=await Y4i({dataDir:t,intent:"Link",target:f});if(process.env.DECOCMS_LINK_MANAGED!=="1")await MHt(f,d.accessToken);let _=E.reconcile();if(i.prune){let g=E.prune({missing:!0,merged:!0});if(!i.tui)console.log(`Pruned local sandboxes: removed ${g.removed.length}, skipped ${g.skipped.length}.`);_=E.reconcile()}let v;if(i.tui){let{render:g}=await import("ink"),{createElement:O}=await import("react"),{LinkApp:Z}=await Promise.resolve().then(() => (Tru(),Fru)),{pushSandboxEvent:B,setCluster:y,setClusterUrl:F,setDaemonError:T,setIngress:U,setLogPath:I,setMachine:j,setPersistedSandboxes:A}=await Promise.resolve().then(() => (OM(),nHi));zHt(t,{recursive:!0});let G=GHi(t,"link.log");c=HHt(G,"w"),I(G),A(_),F(f),y("connecting"),v={onEvent:(q)=>B(q),onIngress:(q)=>U(q,`http://127.0.0.1:${q}`),onCluster:(q)=>y(q),onMachine:(q)=>j(q)},l=CHt(T,c),g(O(Z),{patchConsole:!1})}else if(i.banner!==!1){let{printBanner:g}=await Promise.resolve().then(() => (xY(),DM));g(i.version??"0.0.0")}$();let h=process.env.DECOCMS_LINK_MANAGED!=="1",D=await cru({port:u,clusterBaseUrl:f,dataDir:t,session:d,monitor:v,logFd:c,perSandboxLogs:h,hotReload:i.hotReload});if(i.tui){let{setLinkActions:g}=await Promise.resolve().then(() => (OM(),nHi));g({stopSandbox:D.stopSandbox,removeSandbox:D.removeSandbox,inspectSandbox:D.inspectSandbox,quit:D.stop})}return await D.stopped}catch(w){return l?.(),console.error(w instanceof Error?w.message:String(w)),1}finally{if(l?.(),c!==void 0)try{QHt(c)}catch{}$()}}var Pru=N(()=>{iQi();Eru();FHi()});var SHi={};zi(SHi,{resolveDevLinkClusterUrl:()=>eHt,populateDevLinkToxiProxy:()=>kru,isDevLinkToxiProxyEnabled:()=>mHt,ensureDevLinkToxiProxy:()=>ibt,buildDevLinkToxiProxyConfig:()=>nru,DEV_LINK_TOXIPROXY_SERVICE_NAME:()=>Iru,DEV_LINK_TOXIPROXY_PROXY_NAME:()=>Aru});function mHt(i=process.env){return i.DECO_DEV_LINK_TOXIPROXY==="1"}function kHi(i,u){if(!Number.isInteger(i)||i<1||i>65535)throw Error(`${u} must be an integer port in 1..65535`);return i}function nru(i){let u=new URL(i.serverUrl);if(u.protocol!=="http:")throw Error("DECO_DEV_LINK_TOXIPROXY only supports http local Studio URLs");let t=kHi(i.apiPort,"apiPort"),f=kHi(i.listenPort,"listenPort");if(u.port.length===0)throw Error("serverUrl must include an explicit valid port");let l=kHi(Number.parseInt(u.port,10),"upstreamPort"),c=`http://127.0.0.1:${l}`,E=`http://127.0.0.1:${f}`;return{serviceName:Iru,proxyName:Aru,apiUrl:`http://127.0.0.1:${t}`,listen:`0.0.0.0:${f}`,upstream:`host.docker.internal:${l}`,publicTargetUrl:c,clusterUrl:E,logLine:`[dev-link-toxiproxy] ready: ${E} -> ${c}`}}function eHt(i){return i.toxiproxy?.clusterUrl??i.serverUrl}async function jHi(i,u,t){if(i.ok)return;let f=await i.text();throw Error(`ToxiProxy ${u} failed for ${t}: status=${i.status} statusText=${i.statusText} body=${f}`)}function KHi(i){if(i instanceof Error)return i.name==="Error"?i.message:`${i.name}: ${i.message}`;return String(i)}function Gru(i){if(!(i instanceof Error))return!1;if(i.name==="TimeoutError")return!0;return Gru(i.cause)}async function XHi(i,u,t,f){try{return await i(t,f)}catch(l){throw Error(`ToxiProxy ${u} failed for ${t}: ${KHi(l)}`,{cause:l})}}async function kru(i,u=fetch){let t=`${i.apiUrl}/reset`,f=await XHi(u,"reset",t,{method:"POST"});await jHi(f,"reset",t);let l=`${i.apiUrl}/populate`,c=await XHi(u,"populate",l,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify([{name:i.proxyName,listen:i.listen,upstream:i.upstream,enabled:!0}])});await jHi(c,"populate",l)}async function aHt(i,u){let t=`${i.apiUrl}/version`;try{await u6(async()=>{let f=await XHi(u,"readiness check",t,{method:"GET",signal:AbortSignal.timeout(rHt)});await jHi(f,"readiness check",t)},{maxAttempts:VHt,minTimeout:xru,maxTimeout:xru,multiplier:1,jitter:0,isRetriable:(f)=>!Gru(f)})}catch(f){let l=f instanceof J6?f.cause:f;throw Error(`ToxiProxy API did not become ready at ${t}: ${KHi(l)}`,{cause:l})}}async function oHt(i){if(i===null)return"";return await new Response(i).text()}async function JHi(i,u={}){let t=["docker",...i].join(" "),f=(()=>{try{return Bun.spawn(["docker",...i],{stdout:"ignore",stderr:"pipe"})}catch($){throw Error(`Docker command failed to start (${t}): ${KHi($)}`,{cause:$})}})(),[l,c]=await Promise.all([f.exited,oHt(f.stderr)]);if(l===0||u.ignoreFailure===!0)return;let E=c.trim().length>0?`: ${c.trim()}`:"";throw Error(`Docker command failed (${t}) with exit ${l}${E}`)}async function sHt(i,u){let t=`deco-dev-link-toxiproxy-${i}`;await JHi(["rm","-f",t],{ignoreFailure:!0}),await JHi(["run","--rm","-d","--name",t,"-p",`127.0.0.1:${i}:8474`,"-p",`127.0.0.1:${u}:${u}`,"ghcr.io/shopify/toxiproxy:2.12.0","-host=0.0.0.0"])}async function pHt(i,u){let t=`deco-dev-link-toxiproxy-${i}`;await JHi(["rm","-f",t],{ignoreFailure:!0})}async function ibt(i){let u=nru(i),t=i.startDaemon??sHt,f=i.stopDaemon??(i.startDaemon===void 0?pHt:void 0);await t(i.apiPort,i.listenPort);let l=i.fetchImpl??fetch;try{await aHt(u,l),await kru(u,l)}catch(c){if(f!==void 0)try{await f(i.apiPort,i.listenPort)}catch{}throw c}return{config:u,stop:async()=>{if(f!==void 0)await f(i.apiPort,i.listenPort)}}}var Iru="ToxiProxy",Aru="dev_link_studio",VHt=20,xru=100,rHt=100;var YHi=N(()=>{Bl()});var jru={};zi(jru,{migrateBetterAuth:()=>WHi});import{getMigrations as ubt}from"better-auth/db";import{sso as tbt}from"@better-auth/sso";import{organization as fbt}from"@decocms/better-auth/plugins";import{admin as lbt,apiKey as cbt,jwt as Ebt,magicLink as $bt,mcp as wbt,openAPI as dbt}from"better-auth/plugins";import{emailOTP as _bt}from"better-auth/plugins/email-otp";async function WHi(i){let t={database:kC(i||b2()),plugins:[fbt({dynamicAccessControl:{enabled:!0,enableCustomResources:!0}}),lbt(),cbt(),Ebt(),dbt(),wbt({loginPage:"/login"}),tbt(),$bt({sendMagicLink:async()=>{}}),_bt({sendVerificationOTP:async()=>{}})]},{toBeAdded:f,toBeCreated:l,runMigrations:c}=await ubt(t);if(!f.length&&!l.length)return"up to date";return await c(),`${l.length+f.length} table(s) migrated`}var LHi=N(()=>{QE()});var QHi={};zi(QHi,{up:()=>vbt,down:()=>hbt});import{sql as a5}from"kysely";async function vbt(i){await i.schema.createTable("connections").addColumn("id","text",(u)=>u.primaryKey()).addColumn("organizationId","text",(u)=>u.notNull().references("organization.id").onDelete("cascade")).addColumn("createdById","text",(u)=>u.notNull().references("user.id").onDelete("cascade")).addColumn("name","text",(u)=>u.notNull()).addColumn("description","text").addColumn("icon","text").addColumn("appName","text").addColumn("appId","text").addColumn("connectionType","text",(u)=>u.notNull()).addColumn("connectionUrl","text",(u)=>u.notNull()).addColumn("connectionToken","text").addColumn("connectionHeaders","text").addColumn("oauthConfig","text").addColumn("metadata","text").addColumn("tools","text").addColumn("bindings","text").addColumn("status","text",(u)=>u.notNull().defaultTo("active")).addColumn("createdAt","text",(u)=>u.notNull().defaultTo(a5`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(u)=>u.notNull().defaultTo(a5`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("api_keys").addColumn("id","text",(u)=>u.primaryKey()).addColumn("userId","text",(u)=>u.notNull().references("user.id").onDelete("cascade")).addColumn("name","text",(u)=>u.notNull()).addColumn("hashedKey","text",(u)=>u.notNull().unique()).addColumn("permissions","text",(u)=>u.notNull()).addColumn("expiresAt","text").addColumn("remaining","integer").addColumn("metadata","text").addColumn("createdAt","text",(u)=>u.notNull().defaultTo(a5`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(u)=>u.notNull().defaultTo(a5`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("audit_logs").addColumn("id","text",(u)=>u.primaryKey()).addColumn("organizationId","text").addColumn("userId","text",(u)=>u.references("user.id").onDelete("set null")).addColumn("connectionId","text",(u)=>u.references("connections.id").onDelete("set null")).addColumn("toolName","text",(u)=>u.notNull()).addColumn("allowed","integer",(u)=>u.notNull()).addColumn("duration","integer").addColumn("timestamp","text",(u)=>u.notNull().defaultTo(a5`CURRENT_TIMESTAMP`)).addColumn("requestMetadata","text").execute(),await i.schema.createTable("oauth_clients").addColumn("id","text",(u)=>u.primaryKey()).addColumn("clientId","text",(u)=>u.notNull().unique()).addColumn("clientSecret","text").addColumn("clientName","text",(u)=>u.notNull()).addColumn("redirectUris","text",(u)=>u.notNull()).addColumn("grantTypes","text",(u)=>u.notNull()).addColumn("scope","text").addColumn("clientUri","text").addColumn("logoUri","text").addColumn("createdAt","text",(u)=>u.notNull().defaultTo(a5`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("oauth_authorization_codes").addColumn("code","text",(u)=>u.primaryKey()).addColumn("clientId","text",(u)=>u.notNull().references("oauth_clients.clientId").onDelete("cascade")).addColumn("userId","text",(u)=>u.notNull().references("user.id").onDelete("cascade")).addColumn("redirectUri","text",(u)=>u.notNull()).addColumn("scope","text").addColumn("codeChallenge","text").addColumn("codeChallengeMethod","text").addColumn("expiresAt","text",(u)=>u.notNull()).addColumn("createdAt","text",(u)=>u.notNull().defaultTo(a5`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("oauth_refresh_tokens").addColumn("token","text",(u)=>u.primaryKey()).addColumn("clientId","text",(u)=>u.notNull().references("oauth_clients.clientId").onDelete("cascade")).addColumn("userId","text",(u)=>u.notNull().references("user.id").onDelete("cascade")).addColumn("scope","text").addColumn("expiresAt","text").addColumn("createdAt","text",(u)=>u.notNull().defaultTo(a5`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("downstream_tokens").addColumn("id","text",(u)=>u.primaryKey()).addColumn("connectionId","text",(u)=>u.notNull().references("connections.id").onDelete("cascade")).addColumn("userId","text",(u)=>u.references("user.id").onDelete("cascade")).addColumn("accessToken","text",(u)=>u.notNull()).addColumn("refreshToken","text").addColumn("scope","text").addColumn("expiresAt","text").addColumn("createdAt","text",(u)=>u.notNull().defaultTo(a5`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(u)=>u.notNull().defaultTo(a5`CURRENT_TIMESTAMP`)).execute(),await i.schema.createIndex("idx_connections_organizationId").on("connections").column("organizationId").execute(),await i.schema.createIndex("idx_audit_logs_organizationId").on("audit_logs").column("organizationId").execute(),await i.schema.createIndex("idx_audit_logs_userId").on("audit_logs").column("userId").execute(),await i.schema.createIndex("idx_audit_logs_timestamp").on("audit_logs").column("timestamp").execute()}async function hbt(i){await i.schema.dropTable("downstream_tokens").execute(),await i.schema.dropTable("oauth_refresh_tokens").execute(),await i.schema.dropTable("oauth_authorization_codes").execute(),await i.schema.dropTable("oauth_clients").execute(),await i.schema.dropTable("audit_logs").execute(),await i.schema.dropTable("api_keys").execute(),await i.schema.dropTable("connections").execute()}var Xru=()=>{};var zHi={};zi(zHi,{up:()=>Dbt,down:()=>gbt});import{sql as Jru}from"kysely";async function Dbt(i){await i.schema.createTable("organization_settings").addColumn("organizationId","text",(u)=>u.primaryKey().references("organization.id").onDelete("cascade")).addColumn("modelsBindingConnectionId","text",(u)=>u.references("connections.id").onDelete("set null")).addColumn("createdAt","text",(u)=>u.notNull().defaultTo(Jru`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(u)=>u.notNull().defaultTo(Jru`CURRENT_TIMESTAMP`)).execute()}async function gbt(i){await i.schema.dropTable("organization_settings").execute()}var Kru=()=>{};var HHi={};zi(HHi,{up:()=>Nbt,down:()=>Obt});async function Nbt(i){await i.schema.alterTable("connections").renameColumn("name","title").execute(),await i.schema.alterTable("connections").renameColumn("createdById","created_by").execute(),await i.schema.alterTable("connections").renameColumn("createdAt","created_at").execute(),await i.schema.alterTable("connections").renameColumn("updatedAt","updated_at").execute(),await i.schema.alterTable("connections").renameColumn("organizationId","organization_id").execute(),await i.schema.alterTable("connections").renameColumn("connectionType","connection_type").execute(),await i.schema.alterTable("connections").renameColumn("connectionUrl","connection_url").execute(),await i.schema.alterTable("connections").renameColumn("connectionToken","connection_token").execute(),await i.schema.alterTable("connections").renameColumn("connectionHeaders","connection_headers").execute(),await i.schema.alterTable("connections").renameColumn("oauthConfig","oauth_config").execute(),await i.schema.alterTable("connections").renameColumn("appName","app_name").execute(),await i.schema.alterTable("connections").renameColumn("appId","app_id").execute()}async function Obt(i){await i.schema.alterTable("connections").renameColumn("title","name").execute(),await i.schema.alterTable("connections").renameColumn("created_by","createdById").execute(),await i.schema.alterTable("connections").renameColumn("created_at","createdAt").execute(),await i.schema.alterTable("connections").renameColumn("updated_at","updatedAt").execute(),await i.schema.alterTable("connections").renameColumn("organization_id","organizationId").execute(),await i.schema.alterTable("connections").renameColumn("connection_type","connectionType").execute(),await i.schema.alterTable("connections").renameColumn("connection_url","connectionUrl").execute(),await i.schema.alterTable("connections").renameColumn("connection_token","connectionToken").execute(),await i.schema.alterTable("connections").renameColumn("connection_headers","connectionHeaders").execute(),await i.schema.alterTable("connections").renameColumn("oauth_config","oauthConfig").execute(),await i.schema.alterTable("connections").renameColumn("app_name","appName").execute(),await i.schema.alterTable("connections").renameColumn("app_id","appId").execute()}var bHi={};zi(bHi,{up:()=>Zbt,down:()=>Bbt});async function Zbt(i){await i.schema.createTable("organization_settings_new").addColumn("organizationId","text",(u)=>u.primaryKey().references("organization.id").onDelete("cascade")).addColumn("createdAt","text",(u)=>u.notNull()).addColumn("updatedAt","text",(u)=>u.notNull()).execute(),await i.insertInto("organization_settings_new").columns(["organizationId","createdAt","updatedAt"]).expression((u)=>u.selectFrom("organization_settings").select(["organizationId","createdAt","updatedAt"])).execute(),await i.schema.dropTable("organization_settings").execute(),await i.schema.alterTable("organization_settings_new").renameTo("organization_settings").execute()}async function Bbt(i){await i.schema.createTable("organization_settings_new").addColumn("organizationId","text",(u)=>u.primaryKey().references("organization.id").onDelete("cascade")).addColumn("modelsBindingConnectionId","text",(u)=>u.references("connections.id").onDelete("set null")).addColumn("createdAt","text",(u)=>u.notNull()).addColumn("updatedAt","text",(u)=>u.notNull()).execute(),await i.insertInto("organization_settings_new").columns(["organizationId","modelsBindingConnectionId","createdAt","updatedAt"]).expression((u)=>u.selectFrom("organization_settings").select(["organizationId",u.val(null).as("modelsBindingConnectionId"),"createdAt","updatedAt"])).execute(),await i.schema.dropTable("organization_settings").execute(),await i.schema.alterTable("organization_settings_new").renameTo("organization_settings").execute()}var RHi={};zi(RHi,{up:()=>ybt,down:()=>Fbt});async function ybt(i){await i.schema.alterTable("connections").addColumn("configuration_state","text").execute(),await i.schema.alterTable("connections").addColumn("configuration_scopes","text").execute()}async function Fbt(i){await i.schema.alterTable("connections").dropColumn("configuration_state").execute(),await i.schema.alterTable("connections").dropColumn("configuration_scopes").execute()}var CHi={};zi(CHi,{up:()=>Ubt,down:()=>Pbt});import{sql as Tbt}from"kysely";async function Ubt(i){await i.schema.alterTable("organization_settings").addColumn("sidebar_items",Tbt`text`).execute()}async function Pbt(i){await i.schema.alterTable("organization_settings").dropColumn("sidebar_items").execute()}var Sru=()=>{};var MHi={};zi(MHi,{up:()=>xbt,down:()=>Ibt});async function xbt(i){await i.schema.createTable("monitoring_logs").addColumn("id","text",(u)=>u.primaryKey()).addColumn("organization_id","text",(u)=>u.notNull().references("organization.id").onDelete("cascade")).addColumn("connection_id","text",(u)=>u.notNull().references("connections.id").onDelete("cascade")).addColumn("connection_title","text",(u)=>u.notNull()).addColumn("tool_name","text",(u)=>u.notNull()).addColumn("input","text",(u)=>u.notNull()).addColumn("output","text",(u)=>u.notNull()).addColumn("is_error","integer",(u)=>u.notNull()).addColumn("error_message","text").addColumn("duration_ms","integer",(u)=>u.notNull()).addColumn("timestamp","text",(u)=>u.notNull()).addColumn("user_id","text").addColumn("request_id","text",(u)=>u.notNull()).execute(),await i.schema.createIndex("monitoring_logs_org_timestamp").on("monitoring_logs").columns(["organization_id","timestamp"]).execute(),await i.schema.createIndex("monitoring_logs_connection_timestamp").on("monitoring_logs").columns(["connection_id","timestamp"]).execute(),await i.schema.createIndex("monitoring_logs_is_error").on("monitoring_logs").columns(["organization_id","is_error","timestamp"]).execute()}async function Ibt(i){await i.schema.dropIndex("monitoring_logs_is_error").execute(),await i.schema.dropIndex("monitoring_logs_connection_timestamp").execute(),await i.schema.dropIndex("monitoring_logs_org_timestamp").execute(),await i.schema.dropTable("monitoring_logs").execute()}var qHi={};zi(qHi,{up:()=>Abt,down:()=>nbt});import{sql as ZM}from"kysely";async function Abt(i){await i.schema.createTable("events").addColumn("id","text",(u)=>u.primaryKey()).addColumn("organization_id","text",(u)=>u.notNull().references("organization.id").onDelete("cascade")).addColumn("type","text",(u)=>u.notNull()).addColumn("source","text",(u)=>u.notNull()).addColumn("specversion","text",(u)=>u.notNull().defaultTo("1.0")).addColumn("subject","text").addColumn("time","text",(u)=>u.notNull()).addColumn("datacontenttype","text",(u)=>u.notNull().defaultTo("application/json")).addColumn("dataschema","text").addColumn("data","text").addColumn("cron","varchar(255)").addColumn("status","text",(u)=>u.notNull().defaultTo("pending")).addColumn("attempts","integer",(u)=>u.notNull().defaultTo(0)).addColumn("last_error","text").addColumn("next_retry_at","text").addColumn("created_at","text",(u)=>u.notNull().defaultTo(ZM`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(u)=>u.notNull().defaultTo(ZM`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("event_subscriptions").addColumn("id","text",(u)=>u.primaryKey()).addColumn("organization_id","text",(u)=>u.notNull().references("organization.id").onDelete("cascade")).addColumn("connection_id","text",(u)=>u.notNull().references("connections.id").onDelete("cascade")).addColumn("publisher","text").addColumn("event_type","text",(u)=>u.notNull()).addColumn("filter","text").addColumn("enabled","integer",(u)=>u.notNull().defaultTo(1)).addColumn("created_at","text",(u)=>u.notNull().defaultTo(ZM`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(u)=>u.notNull().defaultTo(ZM`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("event_deliveries").addColumn("id","text",(u)=>u.primaryKey()).addColumn("event_id","text",(u)=>u.notNull()).addColumn("subscription_id","text",(u)=>u.notNull().references("event_subscriptions.id").onDelete("cascade")).addColumn("status","text",(u)=>u.notNull().defaultTo("pending")).addColumn("attempts","integer",(u)=>u.notNull().defaultTo(0)).addColumn("last_error","text").addColumn("delivered_at","text").addColumn("next_retry_at","text").addColumn("created_at","text",(u)=>u.notNull().defaultTo(ZM`CURRENT_TIMESTAMP`)).execute(),await i.schema.createIndex("idx_events_org_status").on("events").columns(["organization_id","status"]).execute(),await i.schema.createIndex("idx_events_source").on("events").columns(["source"]).execute(),await i.schema.createIndex("idx_events_type").on("events").columns(["type"]).execute(),await i.schema.createIndex("idx_events_retry").on("events").columns(["status","next_retry_at"]).execute(),await i.schema.createIndex("idx_subscriptions_connection").on("event_subscriptions").columns(["connection_id"]).execute(),await i.schema.createIndex("idx_subscriptions_type").on("event_subscriptions").columns(["event_type"]).execute(),await i.schema.createIndex("idx_subscriptions_org_enabled").on("event_subscriptions").columns(["organization_id","enabled"]).execute(),await i.schema.createIndex("idx_subscriptions_unique").on("event_subscriptions").columns(["connection_id","event_type","publisher","filter"]).unique().execute(),await i.schema.createIndex("idx_deliveries_event").on("event_deliveries").columns(["event_id"]).execute(),await i.schema.createIndex("idx_deliveries_subscription_status").on("event_deliveries").columns(["subscription_id","status"]).execute(),await i.schema.createIndex("idx_deliveries_retry").on("event_deliveries").columns(["status","next_retry_at"]).execute()}async function nbt(i){await i.schema.dropIndex("idx_deliveries_retry").execute(),await i.schema.dropIndex("idx_deliveries_subscription_status").execute(),await i.schema.dropIndex("idx_deliveries_event").execute(),await i.schema.dropIndex("idx_subscriptions_unique").execute(),await i.schema.dropIndex("idx_subscriptions_org_enabled").execute(),await i.schema.dropIndex("idx_subscriptions_type").execute(),await i.schema.dropIndex("idx_subscriptions_connection").execute(),await i.schema.dropIndex("idx_events_retry").execute(),await i.schema.dropIndex("idx_events_type").execute(),await i.schema.dropIndex("idx_events_source").execute(),await i.schema.dropIndex("idx_events_org_status").execute(),await i.schema.dropTable("event_deliveries").execute(),await i.schema.dropTable("event_subscriptions").execute(),await i.schema.dropTable("events").execute()}var Yru=()=>{};var VHi={};zi(VHi,{up:()=>kbt,down:()=>jbt});import{sql as Gbt}from"kysely";async function kbt(i){await i.schema.dropTable("audit_logs").ifExists().execute()}async function jbt(i){await i.schema.createTable("audit_logs").ifNotExists().addColumn("id","text",(u)=>u.primaryKey()).addColumn("organizationId","text").addColumn("userId","text",(u)=>u.references("user.id").onDelete("set null")).addColumn("connectionId","text",(u)=>u.references("connections.id").onDelete("set null")).addColumn("toolName","text",(u)=>u.notNull()).addColumn("allowed","integer",(u)=>u.notNull()).addColumn("duration","integer").addColumn("timestamp","text",(u)=>u.notNull().defaultTo(Gbt`CURRENT_TIMESTAMP`)).addColumn("requestMetadata","text").execute(),await i.schema.createIndex("idx_audit_logs_organizationId").on("audit_logs").column("organizationId").execute(),await i.schema.createIndex("idx_audit_logs_userId").on("audit_logs").column("userId").execute(),await i.schema.createIndex("idx_audit_logs_timestamp").on("audit_logs").column("timestamp").execute()}var Wru=()=>{};var rHi={};zi(rHi,{up:()=>Xbt,down:()=>Jbt});import{sql as r1i}from"kysely";async function Xbt(i){await i.schema.createTable("gateways").addColumn("id","text",(u)=>u.primaryKey()).addColumn("organization_id","text",(u)=>u.notNull().references("organization.id").onDelete("cascade")).addColumn("title","text",(u)=>u.notNull()).addColumn("description","text").addColumn("tool_selection_strategy","text").addColumn("status","text",(u)=>u.notNull().defaultTo("active")).addColumn("is_default","integer",(u)=>u.notNull().defaultTo(0)).addColumn("created_at","text",(u)=>u.notNull().defaultTo(r1i`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(u)=>u.notNull().defaultTo(r1i`CURRENT_TIMESTAMP`)).addColumn("created_by","text",(u)=>u.notNull().references("user.id").onDelete("cascade")).addColumn("updated_by","text").execute(),await i.schema.createTable("gateway_connections").addColumn("id","text",(u)=>u.primaryKey()).addColumn("gateway_id","text",(u)=>u.notNull().references("gateways.id").onDelete("cascade")).addColumn("connection_id","text",(u)=>u.notNull().references("connections.id").onDelete("cascade")).addColumn("selected_tools","text").addColumn("created_at","text",(u)=>u.notNull().defaultTo(r1i`CURRENT_TIMESTAMP`)).execute(),await i.schema.createIndex("idx_gateways_org").on("gateways").columns(["organization_id"]).execute(),await i.schema.createIndex("idx_gateways_org_status").on("gateways").columns(["organization_id","status"]).execute(),await r1i`CREATE UNIQUE INDEX idx_gateways_default_per_org ON gateways (organization_id) WHERE is_default = 1`.execute(i),await i.schema.createIndex("idx_gateway_connections_gateway").on("gateway_connections").columns(["gateway_id"]).execute(),await i.schema.createIndex("idx_gateway_connections_connection").on("gateway_connections").columns(["connection_id"]).execute(),await i.schema.createIndex("idx_gateway_connections_unique").on("gateway_connections").columns(["gateway_id","connection_id"]).unique().execute()}async function Jbt(i){await i.schema.dropIndex("idx_gateway_connections_unique").execute(),await i.schema.dropIndex("idx_gateway_connections_connection").execute(),await i.schema.dropIndex("idx_gateway_connections_gateway").execute(),await i.schema.dropIndex("idx_gateways_default_per_org").execute(),await i.schema.dropIndex("idx_gateways_org_status").execute(),await i.schema.dropIndex("idx_gateways_org").execute(),await i.schema.dropTable("gateway_connections").execute(),await i.schema.dropTable("gateways").execute()}var Lru=()=>{};var mHi={};zi(mHi,{up:()=>Kbt,down:()=>Sbt});async function Kbt(i){await i.schema.alterTable("gateways").addColumn("icon","text").execute()}async function Sbt(i){await i.schema.alterTable("gateways").dropColumn("icon").execute()}var eHi={};zi(eHi,{up:()=>Ybt,down:()=>Wbt});import{sql as m1i}from"kysely";async function Ybt(i){await i.schema.alterTable("gateways").addColumn("tool_selection_mode","text",(u)=>u.notNull().defaultTo("inclusion")).execute(),await m1i`
81234
81234
  UPDATE gateways
81235
81235
  SET tool_selection_mode = CASE
@@ -84628,7 +84628,7 @@ The expected part count is based on the byte-count of the input.params.Body,
84628
84628
  which was read from ${E} and is ${c}.
84629
84629
  If this is not correct, provide an override value by setting a number
84630
84630
  to input.params.ContentLength in bytes.
84631
- `);this.uploadedParts.sort((w,d)=>w.PartNumber-d.PartNumber);let $={...this.params,Body:void 0,UploadId:this.uploadId,MultipartUpload:{Parts:this.uploadedParts}};if(t=await this.client.send(new RS($)),typeof t?.Location==="string"&&t.Location.includes("%2F"))t.Location=t.Location.replace(/%2F/g,"/")}else t=this.singleUploadResult;if(this.abortMultipartUploadCommand=null,this.tags.length)await this.client.send(new mS({...this.params,Tagging:{TagSet:this.tags}}));return t}async markUploadAsAborted(){if(this.uploadId&&!this.leavePartsOnError&&this.abortMultipartUploadCommand!==null)await this.client.send(this.abortMultipartUploadCommand),this.abortMultipartUploadCommand=null}__notifyProgress(i){if(this.uploadEvent)this.emit(this.uploadEvent,i)}async __abortTimeout(i){return new Promise((u,t)=>{i.onabort=()=>{let f=Error("Upload aborted.");f.name="AbortError",t(f)}})}__validateUploadPart(i){let u=zs(i.data);if(u===void 0)throw Error(`A dataPart was generated without a measurable data chunk size for part number ${i.partNumber}`);if(i.partNumber===1&&i.lastPart)return;if(!i.lastPart&&u!==this.partSize)throw Error(`The byte size for part number ${i.partNumber}, size ${u} does not match expected size ${this.partSize}`)}__validateInput(){if(!this.client)throw Error("InputError: Upload requires a AWS client to do uploads with.");if(this.partSize<tb.MIN_PART_SIZE)throw Error(`EntityTooSmall: Your proposed upload part size [${this.partSize}] is smaller than the minimum allowed size [${tb.MIN_PART_SIZE}] (5MB)`);if(this.queueSize<1)throw Error("Queue size: Must have at least one uploading queue.")}}});var Ps0=()=>{};var xs0=N(()=>{Us0();Ps0()});import{randomUUID as lI4}from"crypto";function Is0(i,u){if(!cI4.has(i))throw new _K(`Content type "${i}" is not allowed.`);if(!Number.isFinite(u)||u<=0)throw new _K("File size must be a positive number.");if(u>vK)throw new _K(`File too large: ${u} bytes (max ${vK}).`)}function EI4(i){let u=i.normalize("NFKD").replace(/[\u0300-\u036f]/g,"").toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/-+/g,"-").replace(/^[-.]+|[-.]+$/g,"");if(u.length<=80)return u||"file";let t=u.lastIndexOf(".");if(t>0&&u.length-t<=10){let f=u.slice(t);return u.slice(0,80-f.length)+f}return u.slice(0,80)}function As0(i){let u=new Date,t=u.getUTCFullYear().toString(),f=String(u.getUTCMonth()+1).padStart(2,"0"),l=lI4(),c=EI4(i.filename),E=`${t}/${f}/${l}-${c}`;return i.prefix?`${i.prefix}${E}`:E}var vK=104857600,cI4,_K;var ns0=N(()=>{cI4=new Set(["image/png","image/jpeg","image/gif","image/webp","image/svg+xml","image/avif","video/mp4","video/webm","video/quicktime","audio/mpeg","audio/wav","audio/ogg","application/pdf","application/json","application/zip","text/plain","text/csv","text/markdown","font/woff","font/woff2","font/ttf","font/otf"]);_K=class _K extends Error{constructor(i){super(i);this.name="UploadRejected"}}});var Gs0=()=>{let i=new Hu;return i.post("/file-configs/:id/upload",async(u)=>{let t=u.get("meshContext");if(!t.auth?.user?.id)throw new P0(401,{message:"Unauthorized"});let l=t.organization?.id;if(!l)throw new P0(400,{message:"Organization required"});await t.access.check("FILE_CONFIG_UPDATE");let c=u.req.param("id");if(!c)throw new P0(400,{message:"Missing config id"});let E=u.req.query("filename");if(!E)throw new P0(400,{message:"Missing `filename` query parameter"});let $=u.req.header("content-type")||"application/octet-stream",w=u.req.header("content-length"),d=w?Number(w):NaN;if(!Number.isFinite(d)||d<=0)throw new P0(411,{message:"Content-Length required and must be a positive number"});try{Is0($,d)}catch(B){if(B instanceof _K)throw new P0(d>vK?413:400,{message:B.message});throw B}let _=u.req.raw.body;if(!_)throw new P0(400,{message:"Empty request body"});let v=0,h=!1,D=_.pipeThrough(new TransformStream({transform(B,y){if(v+=B.byteLength,v>vK){h=!0,y.error(new _K(`File too large: stream exceeded ${vK} bytes.`));return}y.enqueue(B)}})),g;try{g=await MUi(t.storage.orgFileConfigs,t.storage.orgSites,c,l)}catch(B){if(B instanceof CUi)throw new P0(403,{message:B.message});throw B}let O=As0({prefix:g.info.prefix,filename:E}),Z=twu(g);try{await new tb({client:Z,params:{Bucket:g.info.bucket,Key:O,Body:D,ContentType:$},partSize:8388608,queueSize:4}).done()}catch(B){if(h)throw new P0(413,{message:`File too large: stream exceeded ${vK} bytes.`});throw new P0(502,{message:`Upload to bucket failed: ${B instanceof Error?B.message:String(B)}`})}return u.json({key:O,publicUrl:RUi(g.info,O),contentType:$,size:v})}),i};var ks0=N(()=>{xs0();sf();J_();lwu();ns0()});function js0(i){let u=new Hu;return u.get("/kv/:key",async(t)=>{let l=t.get("meshContext").organization?.id;if(!l)return t.json({error:"Organization required"},400);let c=t.req.param("key");if(__u(c))return t.json({error:"Reserved key"},403);let E=await i.kvStorage.get(l,c);if(E===null)return t.json({error:"Not found"},404);return t.json({key:c,value:E})}),u.put("/kv/:key",Fw({maxSize:$I4,onError:(t)=>t.json({error:"Payload too large"},413)}),async(t)=>{let l=t.get("meshContext").organization?.id;if(!l)return t.json({error:"Organization required"},400);let c=t.req.param("key");if(__u(c))return t.json({error:"Reserved key"},403);let E;try{E=await t.req.json()}catch{return t.json({error:"Invalid JSON body"},400)}return await i.kvStorage.set(l,c,E),t.json({ok:!0})}),u.delete("/kv/:key",async(t)=>{let l=t.get("meshContext").organization?.id;if(!l)return t.json({error:"Organization required"},400);let c=t.req.param("key");if(__u(c))return t.json({error:"Reserved key"},403);return await i.kvStorage.delete(l,c),t.json({ok:!0})}),u}var $I4=1048576,wI4,__u=(i)=>wI4.some((u)=>i.startsWith(u));var Xs0=N(()=>{sf();bH();wI4=[X_0]});function v_u(i,u){if(/[.*>\s]/.test(i)||/[.*>\s]/.test(u))return null;return`mesh.org-fs.changes.${i}.${u}`}function Hs(i,u,t){if(!i)return;let f=v_u(u,t);if(!f)return;try{i.publish(f)}catch{}}function Ys0(i,u,t,f){let l=W6(t),c={"Content-Type":l,"Cache-Control":f?"public, max-age=0, must-revalidate":"private, max-age=0"};if(l.startsWith("text/html"))c["Content-Security-Policy"]="sandbox allow-scripts allow-modals";return i.body(Buffer.from(u),200,c)}function Ls0(i,u){let t=fb.get(i);return!!t&&Date.now()<=t.resetAt&&t.count>=u}function OI4(i,u){return!Ls0(i,DI4)&&!Ls0(u,gI4)}function Qs0(i,u){let t=fb.get(i);if(!t||u>t.resetAt)fb.set(i,{count:1,resetAt:u+NI4});else t.count++}function ZI4(i,u){let t=Date.now();if(fb.size>5000){for(let[f,l]of fb)if(t>l.resetAt)fb.delete(f)}Qs0(i,t),Qs0(u,t)}function BI4(i){return i.req.header("cf-connecting-ip")||i.req.header("x-real-ip")||i.req.header("x-forwarded-for")?.split(",")[0]?.trim()||"unknown"}function yI4(i){if(i.req.header("x-forwarded-proto")==="https")return!0;try{return new URL(i.req.url).protocol==="https:"}catch{return!1}}function FI4(i,u,t,f){let l=TW(i,kCi(u,t,f.govPath));if(!l)return!1;return cau(l,{org:u,volume:t,secret:f.secret,nowSec:Math.floor(Date.now()/1000)})?.govPath===f.govPath}function D_u(i,u,t=401){let f=`/api/${encodeURIComponent(u.orgSlug)}/fs/${encodeURIComponent(u.volume)}/unlock?path=${encodeURIComponent(u.path)}`,l=`<!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Password required</title><style>
84631
+ `);this.uploadedParts.sort((w,d)=>w.PartNumber-d.PartNumber);let $={...this.params,Body:void 0,UploadId:this.uploadId,MultipartUpload:{Parts:this.uploadedParts}};if(t=await this.client.send(new RS($)),typeof t?.Location==="string"&&t.Location.includes("%2F"))t.Location=t.Location.replace(/%2F/g,"/")}else t=this.singleUploadResult;if(this.abortMultipartUploadCommand=null,this.tags.length)await this.client.send(new mS({...this.params,Tagging:{TagSet:this.tags}}));return t}async markUploadAsAborted(){if(this.uploadId&&!this.leavePartsOnError&&this.abortMultipartUploadCommand!==null)await this.client.send(this.abortMultipartUploadCommand),this.abortMultipartUploadCommand=null}__notifyProgress(i){if(this.uploadEvent)this.emit(this.uploadEvent,i)}async __abortTimeout(i){return new Promise((u,t)=>{i.onabort=()=>{let f=Error("Upload aborted.");f.name="AbortError",t(f)}})}__validateUploadPart(i){let u=zs(i.data);if(u===void 0)throw Error(`A dataPart was generated without a measurable data chunk size for part number ${i.partNumber}`);if(i.partNumber===1&&i.lastPart)return;if(!i.lastPart&&u!==this.partSize)throw Error(`The byte size for part number ${i.partNumber}, size ${u} does not match expected size ${this.partSize}`)}__validateInput(){if(!this.client)throw Error("InputError: Upload requires a AWS client to do uploads with.");if(this.partSize<tb.MIN_PART_SIZE)throw Error(`EntityTooSmall: Your proposed upload part size [${this.partSize}] is smaller than the minimum allowed size [${tb.MIN_PART_SIZE}] (5MB)`);if(this.queueSize<1)throw Error("Queue size: Must have at least one uploading queue.")}}});var Ps0=()=>{};var xs0=N(()=>{Us0();Ps0()});import{randomUUID as lI4}from"crypto";function Is0(i,u){if(!cI4.has(i))throw new _K(`Content type "${i}" is not allowed.`);if(!Number.isFinite(u)||u<=0)throw new _K("File size must be a positive number.");if(u>vK)throw new _K(`File too large: ${u} bytes (max ${vK}).`)}function EI4(i){let u=i.normalize("NFKD").replace(/[\u0300-\u036f]/g,"").toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/-+/g,"-").replace(/^[-.]+|[-.]+$/g,"");if(u.length<=80)return u||"file";let t=u.lastIndexOf(".");if(t>0&&u.length-t<=10){let f=u.slice(t);return u.slice(0,80-f.length)+f}return u.slice(0,80)}function As0(i){let u=new Date,t=u.getUTCFullYear().toString(),f=String(u.getUTCMonth()+1).padStart(2,"0"),l=lI4(),c=EI4(i.filename),E=`${t}/${f}/${l}-${c}`;return i.prefix?`${i.prefix}${E}`:E}var vK=104857600,cI4,_K;var ns0=N(()=>{cI4=new Set(["image/png","image/jpeg","image/gif","image/webp","image/svg+xml","image/avif","video/mp4","video/webm","video/quicktime","audio/mpeg","audio/wav","audio/ogg","application/pdf","application/json","application/zip","text/plain","text/csv","text/markdown","font/woff","font/woff2","font/ttf","font/otf"]);_K=class _K extends Error{constructor(i){super(i);this.name="UploadRejected"}}});var Gs0=()=>{let i=new Hu;return i.post("/file-configs/:id/upload",async(u)=>{let t=u.get("meshContext");if(!t.auth?.user?.id)throw new P0(401,{message:"Unauthorized"});let l=t.organization?.id;if(!l)throw new P0(400,{message:"Organization required"});await t.access.check("FILE_CONFIG_UPDATE");let c=u.req.param("id");if(!c)throw new P0(400,{message:"Missing config id"});let E=u.req.query("filename");if(!E)throw new P0(400,{message:"Missing `filename` query parameter"});let $=u.req.header("content-type")||"application/octet-stream",w=u.req.header("content-length"),d=w?Number(w):NaN;if(!Number.isFinite(d)||d<=0)throw new P0(411,{message:"Content-Length required and must be a positive number"});try{Is0($,d)}catch(B){if(B instanceof _K)throw new P0(d>vK?413:400,{message:B.message});throw B}let _=u.req.raw.body;if(!_)throw new P0(400,{message:"Empty request body"});let v=0,h=!1,D=_.pipeThrough(new TransformStream({transform(B,y){if(v+=B.byteLength,v>vK){h=!0,y.error(new _K(`File too large: stream exceeded ${vK} bytes.`));return}y.enqueue(B)}})),g;try{g=await MUi(t.storage.orgFileConfigs,t.storage.orgSites,c,l)}catch(B){if(B instanceof CUi)throw new P0(403,{message:B.message});throw B}let O=As0({prefix:g.info.prefix,filename:E}),Z=twu(g);try{await new tb({client:Z,params:{Bucket:g.info.bucket,Key:O,Body:D,ContentType:$},partSize:8388608,queueSize:4}).done()}catch(B){if(h)throw new P0(413,{message:`File too large: stream exceeded ${vK} bytes.`});throw new P0(502,{message:`Upload to bucket failed: ${B instanceof Error?B.message:String(B)}`})}return u.json({key:O,publicUrl:RUi(g.info,O),contentType:$,size:v})}),i};var ks0=N(()=>{xs0();sf();J_();lwu();ns0()});function js0(i){let u=new Hu;return u.get("/kv/:key",async(t)=>{let l=t.get("meshContext").organization?.id;if(!l)return t.json({error:"Organization required"},400);let c=t.req.param("key");if(__u(c))return t.json({error:"Reserved key"},403);let E=await i.kvStorage.get(l,c);if(E===null)return t.json({error:"Not found"},404);return t.json({key:c,value:E})}),u.put("/kv/:key",Fw({maxSize:$I4,onError:(t)=>t.json({error:"Payload too large"},413)}),async(t)=>{let l=t.get("meshContext").organization?.id;if(!l)return t.json({error:"Organization required"},400);let c=t.req.param("key");if(__u(c))return t.json({error:"Reserved key"},403);let E;try{E=await t.req.json()}catch{return t.json({error:"Invalid JSON body"},400)}return await i.kvStorage.set(l,c,E),t.json({ok:!0})}),u.delete("/kv/:key",async(t)=>{let l=t.get("meshContext").organization?.id;if(!l)return t.json({error:"Organization required"},400);let c=t.req.param("key");if(__u(c))return t.json({error:"Reserved key"},403);return await i.kvStorage.delete(l,c),t.json({ok:!0})}),u}var $I4=1048576,wI4,__u=(i)=>wI4.some((u)=>i.startsWith(u));var Xs0=N(()=>{sf();bH();wI4=[X_0]});function v_u(i,u){if(/[.*>\s]/.test(i)||/[.*>\s]/.test(u))return null;return`mesh.org-fs.changes.${i}.${u}`}function Hs(i,u,t){if(!i)return;let f=v_u(u,t);if(!f)return;try{i.publish(f)}catch{}}function Ys0(i,u,t,f){let l=W6(t),c={"Content-Type":l,"Cache-Control":f?"public, max-age=0, must-revalidate":"private, max-age=0"};if(l.startsWith("text/html"))c["Content-Security-Policy"]="sandbox allow-scripts allow-modals allow-same-origin";return i.body(Buffer.from(u),200,c)}function Ls0(i,u){let t=fb.get(i);return!!t&&Date.now()<=t.resetAt&&t.count>=u}function OI4(i,u){return!Ls0(i,DI4)&&!Ls0(u,gI4)}function Qs0(i,u){let t=fb.get(i);if(!t||u>t.resetAt)fb.set(i,{count:1,resetAt:u+NI4});else t.count++}function ZI4(i,u){let t=Date.now();if(fb.size>5000){for(let[f,l]of fb)if(t>l.resetAt)fb.delete(f)}Qs0(i,t),Qs0(u,t)}function BI4(i){return i.req.header("cf-connecting-ip")||i.req.header("x-real-ip")||i.req.header("x-forwarded-for")?.split(",")[0]?.trim()||"unknown"}function yI4(i){if(i.req.header("x-forwarded-proto")==="https")return!0;try{return new URL(i.req.url).protocol==="https:"}catch{return!1}}function FI4(i,u,t,f){let l=TW(i,kCi(u,t,f.govPath));if(!l)return!1;return cau(l,{org:u,volume:t,secret:f.secret,nowSec:Math.floor(Date.now()/1000)})?.govPath===f.govPath}function D_u(i,u,t=401){let f=`/api/${encodeURIComponent(u.orgSlug)}/fs/${encodeURIComponent(u.volume)}/unlock?path=${encodeURIComponent(u.path)}`,l=`<!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Password required</title><style>
84632
84632
  :root{color-scheme:light dark}
84633
84633
  body{margin:0;min-height:100vh;display:grid;place-items:center;font:15px/1.5 ui-sans-serif,system-ui,sans-serif;background:#f6f6f7;color:#18181b}
84634
84634
  @media(prefers-color-scheme:dark){body{background:#0b0b0c;color:#fafafa}}
@@ -84674,7 +84674,7 @@ ${l}`:f}}catch{let t=u.split(`
84674
84674
  Return ONLY valid JSON with this shape:
84675
84675
  {"title":"Short imperative commit title (max 72 chars)","body":"1-3 sentence PR description explaining what changed and why"}
84676
84676
 
84677
- Use sentence case for the title. No markdown fences.`;var vp0=N(()=>{Cf();ha()});function VI4(i){return i&&typeof i==="object"&&!Array.isArray(i)?i:null}function rI4(i){if(!i||i.includes(".."))return!1;return qI4.test(i)}function hp0(i){let u=typeof i.__resolveType==="string"?i.__resolveType:null;if(!u||!rI4(u))return null;let t=VI4(i.props);if(t)return{resolveType:u,payload:{props:t}};let{__resolveType:f,...l}=i;return{resolveType:u,payload:l}}function Dp0(i,u){return`${i.replace(/\/+$/,"")}/deco/invoke/${encodeURIComponent(u)}`}var qI4;var gp0=N(()=>{qI4=/^[\w./@-]+$/});function Np0(i,u){let t=i?.githubRepo;if(!t?.owner||!t?.name)return null;if(!t.connectionId)return t;if(!u.includes(t.connectionId))return null;return t}async function Op0(i,u,t,f){if(!f.connectionId)throw new lb("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let l=i.organization?.id;if(!l)throw new lb(ZE);await Az({ctx:i,connectionId:f.connectionId,organizationId:l,forceRefresh:!0,onLegacyMintError:(_)=>{let v=_ instanceof Error?_.message:ZE;throw new lb(v)}});let{cloneUrl:c,gitUserName:E,gitUserEmail:$}=await nz(f.connectionId,f.owner,f.name,i.db,i.vault),w=Txi(i),d=await u.proxyDaemonRequest(t,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{repository:{cloneUrl:c},identity:{userName:E,userEmail:$}},...w?{operator:w}:{}})});if(!d.ok){let _=await d.text().catch(()=>d.statusText);throw Error(`Failed to refresh sandbox git credentials (${d.status}): ${_}`)}}var lb;var Zp0=N(()=>{R9();F_u();Fyi();lb=class lb extends Error{constructor(i){super(i);this.name="GitPushAuthError"}}});function eI4(i){if(!i||i.length>255||i.includes("..")||i.startsWith("/")||i.endsWith("/")||i.endsWith(".lock")||!mI4.test(i))throw Error(`Invalid branch name: ${i}`)}function cb(i){return AbortSignal.any([i.req.raw.signal,AbortSignal.timeout(sI4)])}function Eb(i){let{runner:u}=i.get("vmClaim");if(!u)return i.json({error:"No sandbox runner configured"},503);return u}async function Rc(i,u,t){let f=Eb(i);if(f instanceof Response)return f;let{claimName:l,userId:c,projectRef:E}=i.get("vmClaim"),$=t?.method??"POST",w=null,d=new Headers;if(t?.jsonBody!==void 0)w=t.jsonBody,d.set("content-type","application/json");else if(t?.forwardJsonBody)w=await i.req.text(),d.set("content-type","application/json");let _=t?.signal,v={method:$,headers:d,body:w,..._?{signal:_}:{}},h=async()=>{let D=await f.proxyDaemonRequest(l,u,v);if(t?.map404to410&&D.status===404){try{await D.body?.cancel()}catch{}if(await f.adoptLiveClaim?.({userId:c,projectRef:E},l))D=await f.proxyDaemonRequest(l,u,v);if(D.status===404){try{await D.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",...e8}})}}let g=await D.text(),O=t?.redactRepoDirUnlessDesktop&&f.kind!=="user-desktop"?iA4(g):g,Z=D.headers.get("content-type")??"application/json";return new Response(O,{status:D.status,headers:{"content-type":Z,...e8}})};try{if(_){let D=h();return D.catch(()=>{}),await Promise.race([D,new Promise((O,Z)=>{if(_.aborted)return Z(_.reason);_.addEventListener("abort",()=>Z(_.reason),{once:!0})})])}return await h()}catch(D){let g=D instanceof Error?D.message:String(D);return i.json({error:`Daemon unreachable: ${g}`},502)}}function iA4(i){try{let u=JSON.parse(i);if(u&&typeof u==="object"&&!Array.isArray(u)&&"repoDir"in u)return JSON.stringify({...u,repoDir:null})}catch{}return i}async function yp0(i,u,t,f="GET",l){let c=await i.proxyDaemonRequest(u,t,{method:f,headers:new Headers,body:null});if(c.status===404&&l){try{await c.body?.cancel()}catch{}if(await i.adoptLiveClaim?.(l,u))c=await i.proxyDaemonRequest(u,t,{method:f,headers:new Headers,body:null})}if(c.status===404){try{await c.body?.cancel()}catch{}throw Error("SANDBOX_GONE")}let E=await c.text();if(!c.ok)try{let $=JSON.parse(E);throw Error($.error??`Daemon error (${c.status})`)}catch($){if($ instanceof Error&&$.message!==E)throw $;throw Error(`Daemon error (${c.status})`)}return JSON.parse(E)}function uA4(i){return Fp0.includes(i)}var mI4,aI4=524288,oI4=65536,sI4=1e4,Bp0=2000,pI4,e8,Fp0,Tp0=()=>{let i=new Hu;return i.use("/:virtualMcpId/:branch/*",pI4),i.post("/:virtualMcpId/:branch/write",(u)=>Rc(u,"/_sandbox/write",{forwardJsonBody:!0,signal:cb(u)})),i.post("/:virtualMcpId/:branch/unlink",(u)=>Rc(u,"/_sandbox/unlink",{forwardJsonBody:!0,signal:cb(u)})),i.post("/:virtualMcpId/:branch/mkdir",(u)=>Rc(u,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:cb(u)})),i.post("/:virtualMcpId/:branch/rename",(u)=>Rc(u,"/_sandbox/rename",{forwardJsonBody:!0,signal:cb(u)})),i.post("/:virtualMcpId/:branch/read",(u)=>Rc(u,"/_sandbox/read",{forwardJsonBody:!0,signal:cb(u)})),i.post("/:virtualMcpId/:branch/glob",(u)=>Rc(u,"/_sandbox/glob",{forwardJsonBody:!0,signal:cb(u)})),i.post("/:virtualMcpId/:branch/exec/:script",(u)=>{let t=u.req.param("script");if(!t)return u.json({error:"missing script name"},400);return Rc(u,`/_sandbox/exec/${encodeURIComponent(t)}`)}),i.post("/:virtualMcpId/:branch/exec/:script/kill",(u)=>{let t=u.req.param("script");if(!t)return u.json({error:"missing script name"},400);return Rc(u,`/_sandbox/exec/${encodeURIComponent(t)}/kill`)}),i.get("/:virtualMcpId/:branch/config",(u)=>Rc(u,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDirUnlessDesktop:!0})),i.put("/:virtualMcpId/:branch/config",(u)=>Rc(u,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),i.post("/:virtualMcpId/:branch/setup/:step",async(u)=>{let t=u.req.param("step");if(!t||!uA4(t))return u.json({error:`step must be one of: ${Fp0.join(", ")}`},400);if(t==="start"){let f=u.get("vmClaim");if(f.runner){let l=Bi(u.var.meshContext),c=Oyi(f.virtualMcpMetadata);try{await Byi({ctx:u.var.meshContext,runner:f.runner,handle:f.claimName,orgId:l.id,userId:f.userId,entries:c})}catch(E){let $=E instanceof Error?E.message:String(E);return u.json({error:`Failed to push env to daemon: ${$}`},502)}}}return Rc(u,`/_sandbox/setup/${t}`,{signal:u.req.raw.signal,map404to410:!0})}),i.get("/:virtualMcpId/:branch/events",(u)=>{let t=u.get("vmClaim");if(!t.runner)return zd(u,async(f)=>{await f.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this mesh."})})});return lp0(u,{ctx:u.var.meshContext,claimName:t.claimName,runner:t.runner,virtualMcpId:t.virtualMcpId,branch:t.branch,userId:t.userId,projectRef:t.projectRef,virtualMcpMetadata:t.virtualMcpMetadata})}),i.get("/:virtualMcpId/:branch/git/status",(u)=>Rc(u,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([u.req.raw.signal,AbortSignal.timeout(Bp0)])})),i.post("/:virtualMcpId/:branch/git/status",(u)=>Rc(u,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([u.req.raw.signal,AbortSignal.timeout(Bp0)])})),i.post("/:virtualMcpId/:branch/git/diff",(u)=>Rc(u,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})),i.post("/:virtualMcpId/:branch/git/publish",async(u)=>{let t=Eb(u);if(t instanceof Response)return t;let{claimName:f,virtualMcpMetadata:l,connectionIds:c}=u.get("vmClaim"),E=u.var.meshContext;try{await T_u(E,t,f);let $=Np0(l,c);if($)await Op0(E,t,f,$)}catch($){if($ instanceof lb)return u.json({error:$.message},403,e8);let w=$ instanceof Error?$.message:String($);return u.json({error:w},502,e8)}return Rc(u,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})}),i.post("/:virtualMcpId/:branch/git/discard",(u)=>Rc(u,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0})),i.post("/:virtualMcpId/:branch/git/rebase",async(u)=>{let t=Eb(u);if(t instanceof Response)return t;let{claimName:f}=u.get("vmClaim"),l=u.var.meshContext;try{await T_u(l,t,f)}catch(c){let E=c instanceof Error?c.message:String(c);return u.json({error:E},502,e8)}return Rc(u,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})}),i.post("/:virtualMcpId/:branch/git/suggest-commit",Fw({maxSize:aI4,onError:(u)=>u.json({error:"Payload too large"},413,e8)}),async(u)=>{let t=Eb(u);if(t instanceof Response)return t;let{claimName:f,userId:l,projectRef:c}=u.get("vmClaim"),E=u.var.meshContext;try{let $=await u.req.json().catch(()=>({})),w=$.status,d=$.diff,_=d!=null&&typeof d.diffs==="object"&&d.diffs!==null,[v,h]=wp0(w)&&_?[w,d]:await Promise.all([yp0(t,f,"/_sandbox/git/status","GET",{userId:l,projectRef:c}),yp0(t,f,"/_sandbox/git/diff","GET",{userId:l,projectRef:c})]),D=await _p0(E,v,h);return u.json(D,200,e8)}catch($){let w=$ instanceof Error?$.message:String($);if(w==="SANDBOX_GONE")return u.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,e8);return u.json({error:w},502,e8)}}),i.get("/:virtualMcpId/:branch/preview-fetch",async(u)=>{let t=Eb(u);if(t instanceof Response)return t;let{claimName:f}=u.get("vmClaim"),l=u.req.query("path");if(l!=="/.decofile")return u.json({error:"Path not allowed"},403);let c;try{c=await t.getPreviewUrl(f)}catch{return u.json({error:"Preview not available"},502)}if(!c)return u.json({error:"Preview not available"},502);let E=c.replace(/\/+$/,""),$;try{$=await fetch(`${E}${l}`)}catch{return u.json({error:"Preview unreachable"},502)}let w;try{w=await $.text()}catch{return u.json({error:"Preview unreachable"},502)}return new Response(w,{status:$.status,headers:{"content-type":$.headers.get("content-type")??"application/json"}})}),i.post("/:virtualMcpId/:branch/preview-invoke",Fw({maxSize:oI4,onError:(u)=>u.json({error:"Payload too large"},413)}),async(u)=>{let t=Eb(u);if(t instanceof Response)return t;let{claimName:f}=u.get("vmClaim"),l;try{l=await t.getPreviewUrl(f)}catch{return u.json({error:"Preview not available"},502)}if(!l)return u.json({error:"Preview not available"},502);let c;try{c=await u.req.json()}catch{return u.json({error:"Invalid JSON body"},400)}if(!c||typeof c!=="object"||Array.isArray(c))return u.json({error:"Invalid JSON body"},400);let E=hp0(c);if(!E)return u.json({error:"Invalid or missing __resolveType"},400);let $;try{$=await fetch(Dp0(l,E.resolveType),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(E.payload),signal:AbortSignal.timeout(30000)})}catch{return u.json({error:"Preview unreachable"},502)}let w;try{w=await $.text()}catch{return u.json({error:"Preview unreachable"},502)}return new Response(w,{status:$.status,headers:{"content-type":$.headers.get("content-type")??"application/json"}})}),i};var Up0=N(()=>{sf();bH();hK();tp0();h3();gPi();xz();fp0();cp0();P1u();Iz();vp0();gp0();Zp0();mI4=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;pI4=up0(async(i,u)=>{let t=i.var.meshContext;try{Xi(t)}catch{return i.json({error:"Unauthorized"},401)}let f=Vu(t);if(!f)return i.json({error:"Unauthorized"},401);let l;try{l=Bi(t)}catch{return i.json({error:"Organization scope required"},403)}let c=i.req.param("virtualMcpId"),E=i.req.param("branch");if(!c||!E)return i.json({error:"virtualMcpId and branch are required"},400);try{eI4(E)}catch(h){let D=h instanceof Error?h.message:String(h);return i.json({error:D},400)}let $=await t.storage.virtualMcps.findById(c);if(!$||$.organization_id!==l.id)return i.json({error:"Virtual MCP not found"},404);let w=O8({orgId:l.id,virtualMcpId:c,branch:E}),d=jH({userId:f,projectRef:w},E),_=$.metadata??null,v;try{v=(await N5(t,{userId:f,branch:E,virtualMcpMetadata:_})).provider}catch{v=null}if(!v)return i.json({error:"No sandbox runner found"},404);return i.set("vmClaim",{claimName:d,runner:v,virtualMcpId:c,branch:E,userId:f,projectRef:w,virtualMcpMetadata:_,connectionIds:$.connections?.map((h)=>h.connection_id)??[]}),u()});e8={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};Fp0=["clone","install","start"]});var Pp0=(i)=>{let u=new Hu;if(u.use("*",fK),u.route("/",QPi()),u.route("/",ae0()),u.route("/",Bxi()),u.route("/tools",es0()),u.route("/",Vs0()),u.route("/",js0({kvStorage:i.kvStorage})),u.route("/",Gs0()),u.route("/fs",Hs0({getConnection:i.getNatsConnection})),u.route("/sandbox",Tp0()),u.route("/",Rs0()),u.route("/deco-sites",HPi()),u.route("/sso",_Pi()),u.route("/",yxi({tokenStorage:i.tokenStorage,automationEventDispatcher:i.automationEventDispatcher})),u.route("/webhooks",He0()),i.mountDevAssets)u.route("/dev-assets",bPi({orgFromPath:!0}));return u.use("/mcp/:connectionId?",i.mcpAuth),u.use("/mcp/:connectionId/ui-resource",i.mcpAuth),u.use("/mcp/gateway/:virtualMcpId?",i.mcpAuth),u.use("/mcp/virtual-mcp/:virtualMcpId?",i.mcpAuth),u.use("/mcp/self",i.mcpAuth),u.route("/",U70()),u.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",i.betterAuthProtectedResourceHandler),u.route("/mcp",oyi()),u.route("/mcp/self",Zxi()),u.route("/mcp",iFi()),u.all("/oauth-proxy/:connectionId/*",i.oauthProxyHandler),u.get("/watch",i.watchHandler),u};var xp0=N(()=>{sf();C3u();be0();m3u();RPi();oe0();b3u();ks0();Xs0();bs0();Ie();Vwu();uFi();g_u();Cs0();rs0();N_u();as0();O_u();syi();Up0()});async function Ip0(i,u){let t=new Headers({authorization:`Bearer ${i}`,"X-MCP-Session-Auth":"true"}),f=await u.getMcpSession({headers:t}).catch(()=>null);if(f?.userId)return f.userId;let l=await u.verifyApiKey({body:{key:i}}).catch(()=>null);if(l?.valid&&l.key?.userId)return l.key.userId;return null}function I_u(i){try{i?.clear?.()}catch{}}async function Ap0({accountJwt:i,accountSigningKey:u,expiresAt:t,permissions:f,userId:l,allowedConnectionTypes:c=["WEBSOCKET"]}){let E=Vhu(i),$=nAi(E.sub),w=Hb(new TextEncoder().encode(u)),d=sp();try{let _=await pp(l,d,$,{pub:{allow:f.publish.allow},sub:{allow:f.subscribe.allow},allowed_connection_types:c},{algorithm:Vc.v2,exp:Math.floor(t.getTime()/1000),signer:w});return new TextDecoder().decode(iii(_,d))}finally{I_u(d),I_u(w),I_u($)}}var np0=N(()=>{KAi()});function tA4(i){return/^wss?:\/\//i.test(i.trim())?["WEBSOCKET"]:["STANDARD","WEBSOCKET"]}function Gp0(){let i=new Hu;return i.post("/links/session",async(u)=>{let f=u.get("meshContext").auth?.user?.id;if(!f)return u.json({error:"Unauthorized"},401);let l=Fu();if(!l.natsTunnelPublicEnabled)return u.json(A_u(),503);if(!l.natsPublicUrl)return u.json(A_u(),503);if(!l.natsAccountJwt||!l.natsAccountSigningKey){if(!l.localMode)return u.json(A_u(),503)}let c=E_(f),E;if(l.natsAccountJwt&&l.natsAccountSigningKey){let $=new Date(Date.now()+l.natsTunnelSessionTtlSeconds*1000);E=await Ap0({accountJwt:l.natsAccountJwt,accountSigningKey:l.natsAccountSigningKey,expiresAt:$,permissions:xMu(c),userId:f,allowedConnectionTypes:tA4(l.natsPublicUrl)})}return u.json(IMu({publicUrl:l.natsPublicUrl,userId:f,ttlSeconds:l.natsTunnelSessionTtlSeconds,credentials:E}))}),i}var A_u=()=>({error:"link session unavailable"});var kp0=N(()=>{sf();xt();jzi();np0()});async function cA4(i,u){try{return!await i.alive(u)}catch(t){return console.warn(`[vm-events] alive probe failed for ${u}; assuming alive: ${t instanceof Error?t.message:String(t)}`),!1}}async function EA4(i){let{ctx:u,runner:t,claimName:f,userId:l,projectRef:c,sandboxProviderKind:E}=i;try{await t.delete(f)}catch($){console.warn(`[vm-events] runner.delete failed for ${f}: ${$ instanceof Error?$.message:String($)}`)}try{await new $g(u.db).delete({userId:l,projectRef:c},E)}catch($){console.warn(`[vm-events] sandbox_runner_state delete failed for ${l}/${c}/${E}: ${$ instanceof Error?$.message:String($)}`)}}async function $A4(i){let{stream:u,claimName:t,runner:f,signal:l}=i;return new Promise((c)=>{let E=!1,$=!1,w=null,d=(h)=>{if(E)return;E=!0,clearTimeout(_),l.removeEventListener("abort",v),w?.unsubscribe(),c(h)},_=setTimeout(()=>{if($||E)return;u.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"claim-never-created",message:"Sandbox claim was never created. The SANDBOX_START call may have failed earlier \u2014 check the start error."})}).catch(()=>{}),d(!1)},fA4),v=()=>d(!1);l.addEventListener("abort",v,{once:!0}),w=La(f,t,(h)=>{if(E)return;if(h.kind!=="claiming")$=!0;if(u.writeSSE({event:"phase",data:JSON.stringify(h)}).catch(()=>{}),h.kind==="ready")d(!0);else if(h.kind==="failed")d(!1)})})}async function wA4(i){let{stream:u,runner:t,claimName:f,signal:l}=i,c=Date.now(),E=null;while(!l.aborted){let w=null;try{w=await t.proxyDaemonRequest(f,"/_sandbox/events",{method:"GET",headers:new Headers({accept:"text/event-stream"}),body:null,signal:l})}catch(d){if(l.aborted)return;if(Date.now()-c<jp0){await Zt(Xp0,{signal:l}).catch(()=>{});continue}let _=d instanceof Error?d.message:String(d);await u.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:`Upstream daemon SSE error: ${_}`})}).catch(()=>{});return}if(w.status===404){try{await w.body?.cancel()}catch{}if(Date.now()-c<jp0){await Zt(Xp0,{signal:l}).catch(()=>{});continue}await u.writeSSE({event:"gone",data:""}).catch(()=>{});return}if(!w.ok||!w.body){try{await w.body?.cancel()}catch{}await u.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:`Upstream daemon SSE failed (${w.status}).`})}).catch(()=>{});return}E=w;break}if(!E||!E.body)return;let $=E.body.getReader();try{while(!l.aborted){let{value:w,done:d}=await $.read();if(d)break;if(w)await u.write(w)}}catch{}finally{try{$.releaseLock()}catch{}}}var fA4=90000,lA4=15000,Jp0=()=>{let i=new Hu;return i.get("/",async(u)=>{let t=u.var.meshContext;try{Xi(t)}catch{return u.json({error:"Unauthorized"},401)}let f=Vu(t);if(!f)return u.json({error:"Unauthorized"},401);let l;try{l=Bi(t)}catch{return u.json({error:"Organization scope required"},403)}let c=u.req.query("virtualMcpId"),E=u.req.query("branch");if(!c||!E)return u.json({error:"virtualMcpId and branch are required"},400);let $=await t.storage.virtualMcps.findById(c);if(!$||$.organization_id!==l.id)return u.json({error:"Virtual MCP not found"},404);let w=O8({orgId:l.id,virtualMcpId:c,branch:E}),d=jH({userId:f,projectRef:w},E),_=$.metadata??null,v,h=null,D=null;try{let Z=await N5(t,{userId:f,branch:E,virtualMcpMetadata:_});v=Z.provider,h=Z.kind}catch(Z){D=Z instanceof Error?Z:Error(String(Z)),v=null}let g=h&&y8(T6(_),f,E,h),O=!!g&&g.sandboxHandle===d;if(!v)return zd(u,async(Z)=>{await Z.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:D?.message??"No sandbox runner configured on this mesh."})})});return u.header("X-Accel-Buffering","no"),u.header("Content-Encoding","identity"),zd(u,async(Z)=>{let B=new AbortController,y=setInterval(()=>{Z.writeSSE({event:"keepalive",data:""}).catch(()=>{clearInterval(y)})},lA4);Z.onAbort(()=>{B.abort(),clearInterval(y)});try{if(O&&h){if(await cA4(v,d)){await EA4({ctx:t,runner:v,claimName:d,userId:f,projectRef:w,sandboxProviderKind:h}),await Z.writeSSE({event:"gone",data:""}).catch(()=>{});return}}if(!await $A4({stream:Z,claimName:d,runner:v,signal:B.signal})||B.signal.aborted)return;await wA4({stream:Z,runner:v,claimName:d,signal:B.signal})}finally{clearInterval(y)}})}),i},jp0=60000,Xp0=500;var Kp0=N(()=>{sf();hK();h3();Bl();gPi();Qa();xz();Vdi();Id()});function _A4(i){return i.filter((u)=>u.vendors?.alias).map((u)=>({name:u.name,title:u.title,description:u.description,logo:u.logo,category:u.category,vendor:{alias:u.vendors.alias,url:u.vendors.url}}))}async function vA4(i,u){let t=await fetch(`${i}/rest/v1/apps?select=name,title,description,logo,category,vendors(alias,url)`,{headers:{apikey:u,Authorization:`Bearer ${u}`,Accept:"application/json"},signal:AbortSignal.timeout(dA4)});if(!t.ok){let f=await t.text().catch(()=>t.statusText);throw console.error(`[deco-apps] Supabase error (${t.status}): ${f.slice(0,200)}`),Error(`External service error (${t.status})`)}return await t.json()}var dA4=1e4,hA4=async(i,u)=>{if(!i.get("meshContext").auth.user?.id)return i.json({error:"Unauthorized"},401);return u()},Sp0=()=>{let i=new Hu;return i.use("*",hA4),i.get("/",async(u)=>{let t=Fu(),f=t.decoSupabaseUrl,l=t.decoSupabaseServiceKey;if(!f||!l)return u.json({apps:[]});try{let c=await vA4(f,l);return u.json({apps:_A4(c)})}catch(c){return console.error("[deco-apps] GET error:",c),u.json({error:"Failed to fetch apps"},502)}}),i};var Yp0=N(()=>{sf();xt()});import{z as Lu}from"zod";function Gh(i,u="invalid_request_error",t=null,f=null){return{error:{message:i,type:u,param:t,code:f}}}function UA4(i){if(!i)return null;let u=i.indexOf(":");if(u===-1)return{credentialId:null,modelId:i};let t=i.substring(0,u),f=i.substring(u+1);if(!t||!f)return null;return{credentialId:t,modelId:f}}function PA4(i,u,t){try{return JSON.parse(i)}catch{throw new Qp0(`Invalid JSON in tool call arguments for function '${t}' (tool_call_id: ${u}): ${i}`)}}function xA4(i){let u={};for(let t of i)if(t.role==="assistant"&&t.tool_calls)for(let f of t.tool_calls)u[f.id]=f.function.name;return i.map((t)=>{switch(t.role){case"system":return{role:"system",content:t.content};case"user":if(typeof t.content==="string")return{role:"user",content:t.content};return{role:"user",content:t.content.map((l)=>{if(l.type==="text")return{type:"text",text:l.text};return{type:"image",image:l.image_url.url}})};case"assistant":if(t.tool_calls&&t.tool_calls.length>0)return{role:"assistant",content:t.tool_calls.map((l)=>({type:"tool-call",toolCallId:l.id,toolName:l.function.name,input:PA4(l.function.arguments,l.id,l.function.name)}))};return{role:"assistant",content:t.content??""};case"tool":let f=u[t.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:t.tool_call_id,toolName:f,output:{type:"text",value:t.content}}]}}})}function IA4(i){let u=i.map((t)=>{let f=t.function.parameters?u3(t.function.parameters):u3({type:"object",properties:{}});return[t.function.name,ft({description:t.function.description,inputSchema:f})]});return Object.fromEntries(u)}function AA4(i){if(!i)return;return{openai:{response_format:i}}}function nA4(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function Wp0(i,u,t,f,l,c){let E={model:i,messages:u,tools:t,temperature:f.temperature,maxTokens:f.max_tokens,topP:f.top_p,frequencyPenalty:f.frequency_penalty,presencePenalty:f.presence_penalty,stopSequences:f.stop?Array.isArray(f.stop)?f.stop:[f.stop]:void 0,abortSignal:c};return l?{...E,providerOptions:l}:E}function Lp0(i){if(i==="tool-calls")return"tool_calls";if(i==="length")return"length";return"stop"}var DA4=256,gA4,NA4,OA4,ZA4,BA4,yA4,FA4,TA4,Qp0,zp0,Hp0;var bp0=N(()=>{Cf();sf();hK();gA4=Lu.object({type:Lu.literal("function"),function:Lu.object({name:Lu.string(),description:Lu.string().optional(),parameters:Lu.record(Lu.string(),Lu.unknown()).optional()})}),NA4=Lu.object({id:Lu.string(),type:Lu.literal("function"),function:Lu.object({name:Lu.string(),arguments:Lu.string()})}),OA4=Lu.discriminatedUnion("role",[Lu.object({role:Lu.literal("system"),content:Lu.string(),name:Lu.string().optional()}),Lu.object({role:Lu.literal("user"),content:Lu.union([Lu.string(),Lu.array(Lu.union([Lu.object({type:Lu.literal("text"),text:Lu.string()}),Lu.object({type:Lu.literal("image_url"),image_url:Lu.object({url:Lu.string(),detail:Lu.string().optional()})})]))]),name:Lu.string().optional()}),Lu.object({role:Lu.literal("assistant"),content:Lu.string().nullable().optional(),name:Lu.string().optional(),tool_calls:Lu.array(NA4).optional()}),Lu.object({role:Lu.literal("tool"),content:Lu.string(),tool_call_id:Lu.string()})]),ZA4=Lu.object({type:Lu.literal("text")}),BA4=Lu.object({type:Lu.literal("json_object")}),yA4=Lu.object({type:Lu.literal("json_schema"),json_schema:Lu.object({name:Lu.string(),description:Lu.string().optional(),schema:Lu.record(Lu.string(),Lu.unknown()),strict:Lu.boolean().optional()})}),FA4=Lu.union([ZA4,BA4,yA4]),TA4=Lu.object({model:Lu.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:Lu.array(OA4),stream:Lu.boolean().optional().default(!1),temperature:Lu.number().min(0).max(2).optional(),max_tokens:Lu.number().positive().optional(),top_p:Lu.number().min(0).max(1).optional(),frequency_penalty:Lu.number().min(-2).max(2).optional(),presence_penalty:Lu.number().min(-2).max(2).optional(),stop:Lu.union([Lu.string(),Lu.array(Lu.string())]).optional(),tools:Lu.array(gA4).optional(),tool_choice:Lu.union([Lu.literal("auto"),Lu.literal("none"),Lu.literal("required"),Lu.object({type:Lu.literal("function"),function:Lu.object({name:Lu.string()})})]).optional(),response_format:FA4.optional(),user:Lu.string().optional()});Qp0=class Qp0 extends Error{constructor(i){super(i);this.name="MessageConversionError"}};zp0=new Hu;zp0.post("/:org/v1/chat/completions",async(i)=>{let u=i.get("meshContext"),t=i.req.param("org");try{if(!u.auth.apiKey?.id)return i.json(Gh("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!u.organization)return i.json(Gh("Organization context is required. Ensure your API key has organization metadata.","invalid_request_error","organization"),400);if((u.organization.slug??u.organization.id)!==t)return i.json(Gh("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let f=await i.req.json(),l=TA4.safeParse(f);if(!l.success){let Z=l.error.issues[0]??{message:"Invalid request",path:[]};return i.json(Gh(`Invalid request: ${Z.message}`,"invalid_request_error",Z.path.length>0?Z.path.join("."):null),400)}let c=l.data,E=UA4(c.model);if(!E)return i.json(Gh("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:$}=E,{modelId:w}=E;if(!$){let Z=await u.storage.aiProviderKeys.list({organizationId:u.organization.id});if(Z.length===0)return i.json(Gh("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);$=Z[0].id}let d;try{d=await u.aiProviders.activate($,u.organization.id)}catch{return i.json(Gh(`AI provider credential not found or inaccessible: ${$}`,"invalid_request_error","model"),404)}let _=d.aiSdk.languageModel(w),v=xA4(c.messages),h=c.tools?IA4(c.tools):void 0,D=AA4(c.response_format),g=nA4(),O=Math.floor(Date.now()/1000);if(c.stream)return zd(i,async(Z)=>{let B=Wp0(_,v,h,c,D,i.req.raw.signal);try{let y=Pd(B),F=!1,T=0,U="",I=async()=>{if(U.length===0)return;let j=U;U="",await Z.writeSSE({data:JSON.stringify({id:g,object:"chat.completion.chunk",created:O,model:c.model,choices:[{index:0,delta:{content:j},finish_reason:null}]})})};for await(let j of y.fullStream){if(!F&&(j.type==="text-delta"||j.type==="tool-call"))await Z.writeSSE({data:JSON.stringify({id:g,object:"chat.completion.chunk",created:O,model:c.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),F=!0;if(j.type==="text-delta"){if(U+=j.text,U.length>=DA4)await I()}else if(j.type==="tool-call"){await I();let A=T++;await Z.writeSSE({data:JSON.stringify({id:g,object:"chat.completion.chunk",created:O,model:c.model,choices:[{index:0,delta:{tool_calls:[{index:A,id:j.toolCallId,type:"function",function:{name:j.toolName,arguments:JSON.stringify(j.input)}}]},finish_reason:null}]})})}else if(j.type==="finish")await I(),await Z.writeSSE({data:JSON.stringify({id:g,object:"chat.completion.chunk",created:O,model:c.model,choices:[{index:0,delta:{},finish_reason:Lp0(j.finishReason)}],usage:j.totalUsage?{prompt_tokens:j.totalUsage.inputTokens??0,completion_tokens:j.totalUsage.outputTokens??0,total_tokens:j.totalUsage.totalTokens??0}:void 0})})}await I(),await Z.writeSSE({data:"[DONE]"})}catch(y){let F=y;console.error("[openai-compat:stream] Error:",F.message),await Z.writeSSE({data:JSON.stringify({error:{message:F.message,type:"server_error"}})})}});else{let Z=Wp0(_,v,h,c,D,i.req.raw.signal),B=await ug(Z),y={role:"assistant",content:B.text||null};if(B.toolCalls&&B.toolCalls.length>0)y.tool_calls=B.toolCalls.map((F)=>({id:F.toolCallId,type:"function",function:{name:F.toolName,arguments:JSON.stringify("input"in F?F.input:{})}})),y.content=null;return i.json({id:g,object:"chat.completion",created:O,model:c.model,choices:[{index:0,message:y,finish_reason:Lp0(B.finishReason)}],usage:{prompt_tokens:B.usage?.inputTokens??0,completion_tokens:B.usage?.outputTokens??0,total_tokens:B.usage?.totalTokens??0}})}}catch(f){let l=f;if(l.name==="AbortError")return i.json(Gh("Request aborted","invalid_request_error"),400);if(l.name==="MessageConversionError")return i.json(Gh(l.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",l.message,l.stack),i.json(Gh(l.message,"server_error"),500)}});Hp0=zp0});function kA4(){let i=process.env.POSTHOG_KEY;if(!i)return null;return{key:i,host:process.env.POSTHOG_HOST??GA4}}var Rp0,GA4="https://ph.studio.decocms.com",Cp0;var Mp0=N(()=>{sf();Ori();Pg();HE();xt();Rwu();Rp0=new Hu;Rp0.get("/",(i)=>{let u={theme:vf0(),...sO().logo&&{logo:sO().logo},...Gd()&&{internalUrl:j4i()},...Fu().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!Fu().firecrawlApiKey,auth:bV0(),posthog:kA4(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!Gd()&&Fu().sandboxProviderKind==="agent-sandbox"}};return i.json({success:!0,config:u})});Cp0=Rp0});function qp0(i,u){if(u.startsWith("text/html")||u.startsWith("image/svg"))i.set("Content-Security-Policy","sandbox allow-scripts allow-modals")}var Vp0,jA4,XA4,rp0;var mp0=N(()=>{sf();J_();jz();BW();Vp0=new Hu,jA4=["range","if-none-match","if-modified-since"],XA4=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];Vp0.get("/:org/files/*",async(i)=>{let u=i.get("meshContext"),t=u.organization?.id;if(!u.auth?.user?.id){if(HH(i))return i.redirect(`/login?next=${encodeURIComponent(i.req.path)}`,302);throw new P0(401,{message:"Authentication required"})}if(!t)throw new P0(401,{message:"Organization context required"});let f=i.req.path.replace(/^.*\/files\//,"");if(!f)throw new P0(400,{message:"Missing file key"});let l=await Ma(f,u);if(!l)throw new P0(503,{message:"Object storage not configured"});if(l.startsWith("data:")&&X_()){let w=l.match(/^data:([^;]+);base64,(.+)$/s);if(!w)throw new P0(500,{message:"Invalid data URL from storage"});let[,d,_]=w,v=Buffer.from(_,"base64"),h=new Headers({"Content-Type":d,"Cache-Control":"private, max-age=86400"});return qp0(h,d),new Response(v,{status:200,headers:h})}let c=new Headers;for(let w of jA4){let d=i.req.header(w);if(d)c.set(w,d)}let E=await fetch(l,{headers:c});if(E.status===403||E.status===404)throw new P0(404,{message:"File not found"});if(!E.ok&&E.status!==304&&E.status!==416)throw console.error(`[files] upstream storage error ${E.status} for key:`,f),new P0(502,{message:"Upstream storage error"});let $=new Headers;for(let w of XA4){let d=E.headers.get(w);if(d)$.set(w,d)}return $.set("Cache-Control","private, max-age=86400"),qp0($,$.get("content-type")??""),new Response(E.body,{status:E.status,headers:$})});rp0=Vp0});function sp0(i){let u=i?.connectFn??YA4,t=null,f=null,l=!1,c=!1,E=!1,$=[];function w(){return t!==null&&!t.isClosed()&&!t.isDraining()&&!E}function d(){console.log(`[NatsProvider] fireReady: ${$.length} callbacks`);for(let h of $)try{h()}catch{}}function _(h){(async()=>{for await(let D of h.status())if(D.type==="disconnect")console.log("[NatsProvider] Disconnected"),E=!0;else if(D.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),E=!1,f=null,d()})().catch(()=>{})}async function v(h,D){let g=0;while(!c)try{t=await u({servers:h,timeout:SA4,reconnect:!0,maxReconnectAttempts:-1,...D?{authenticator:D}:{}}),console.log(`[NatsProvider] Connected to ${t.getServer()} after ${g} attempt(s)`),f=null,E=!1,_(t),d();return}catch{g++;let O=uc(KA4,JA4,g-1,2,0.5);await Zt(O)}}return{init(h,D){if(l)return;l=!0,c=!1;let g=D?.creds?ep0.credsAuthenticator(new TextEncoder().encode(D.creds)):void 0;v(h,g).catch(()=>{})},isConnected(){return w()},getConnection(){return w()?t:null},getJetStream(){if(!w())return null;if(!f)f=op0.jetstream(t);return f},onReady(h){if($.push(h),w())try{h()}catch{}},async drain(){if(c=!0,l=!1,f=null,E=!1,t){let h=t;t=null,await h.drain().catch(()=>{})}}}}function YA4(i){return ap0.connect(i)}var ep0,ap0,op0,JA4=100,KA4=3000,SA4=3000;var pp0=N(()=>{Bl();ep0=k(yO(),1),ap0=k(kzi(),1),op0=k(i7(),1)});function $b(i){let u=i?.ttlMs??60000,t=i?.maxSize??1e4,f=i?.updateRecencyOnGet??!1,l=new Map;function c(){if(l.size<=t)return;let E=Date.now();for(let[$,w]of l)if(w.expiresAt<=E)l.delete($);while(l.size>t){let $=l.keys().next().value;if($===void 0)break;l.delete($)}}return{get(E){let $=l.get(E);if(!$)return;if($.expiresAt<=Date.now()){l.delete(E);return}if(f)l.delete(E),l.set(E,$);return $.value},set(E,$){l.delete(E),l.set(E,{value:$,expiresAt:Date.now()+u}),c()},delete(E){l.delete(E)},clear(){l.clear()},size(){return l.size}}}function n_u(i,u){return`${i}.${u}`}class G_u{cache;constructor(i){this.cache=$b({ttlMs:i?.ttlMs??WA4,maxSize:i?.maxSize??LA4})}async get(i,u){return this.cache.get(n_u(i,u))??null}async set(i,u,t){this.cache.set(n_u(i,u),t)}async invalidate(i,u){this.cache.delete(n_u(i,u))}teardown(){this.cache.clear()}}var WA4=600000,LA4=5000;var iit=()=>{};function Uxi(i,u){return`${i}:${u}`}function k_u(i){let u=$b({ttlMs:i?.ttlMs??QA4,maxSize:i?.maxSize??zA4}),t=i?.getConnection,f=crypto.randomUUID(),l=new TextEncoder,c=new TextDecoder,E=null;function $(w,d){let _=t?.();if(!_)return;try{_.publish(uit,l.encode(JSON.stringify({organizationId:w,keyId:d,originId:f})))}catch(v){console.warn("[ProviderKeyCache] Publish failed (non-critical):",v)}}return{get(w,d){return u.get(Uxi(w,d))},set(w,d,_){u.set(Uxi(w,d),_)},invalidate(w,d){u.delete(Uxi(w,d)),$(w,d)},start(){if(E)return;let w=t?.();if(!w)return;E=w.subscribe(uit),(async()=>{for await(let d of E)try{let _=JSON.parse(c.decode(d.data));if(_.originId===f)continue;u.delete(Uxi(_.organizationId,_.keyId))}catch{}})().catch(console.error)},teardown(){E?.unsubscribe(),E=null,u.clear()}}}var uit="studio.ai-provider-keys.invalidate",QA4=30000,zA4=5000;var tit=()=>{};class j_u{options;sub=null;onCancel=null;encoder=new TextEncoder;originId=crypto.randomUUID();constructor(i){this.options=i}async start(i){if(i)this.onCancel=i;if(this.sub)return;if(!this.onCancel)return;let u=this.options.getConnection();if(!u)return;this.sub=u.subscribe("mesh.decopilot.cancel");let t=new TextDecoder;(async()=>{for await(let f of this.sub)try{let l=JSON.parse(t.decode(f.data));if(l.originId===this.originId)continue;this.onCancel?.(l.taskId)}catch{}})().catch(console.error)}broadcast(i){if(/[.*>\s]/.test(i)){console.warn("[NatsCancelBroadcast] Invalid threadId, skipping broadcast");return}this.onCancel?.(i);try{let u=this.options.getConnection();if(!u)return;u.publish("mesh.decopilot.cancel",this.encoder.encode(JSON.stringify({taskId:i,originId:this.originId})))}catch(u){console.warn("[NatsCancelBroadcast] Publish failed (non-critical):",u)}}publishControlFrame(i,u){}async stop(){this.sub?.unsubscribe(),this.sub=null,this.onCancel=null}}function VA4(){return{name:D8,subjects:[`${fHi}.>`],storage:G5.StorageType.File,max_age:RA4,max_bytes:MA4,max_msgs_per_subject:qA4,discard:G5.DiscardPolicy.Old,retention:G5.RetentionPolicy.Limits,duplicate_window:CA4,num_replicas:1}}class cit{chunks=0;encodeMs=0;maxMs=0;bytes=0;windowStart=performance.now();constructor(){setInterval(()=>this.flush(),1e4).unref?.()}record(i,u){if(this.chunks++,this.encodeMs+=i,i>this.maxMs)this.maxMs=i;this.bytes+=u}flush(){let i=performance.now(),u=i-this.windowStart;if(this.chunks>0&&u>0)console.warn(JSON.stringify({msg:"stream-encode-trace",windowMs:Math.round(u),chunks:this.chunks,encodeMs:Math.round(this.encodeMs),pctOfLoop:+(this.encodeMs/u*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=i}}function fit(i){let u=lit.headers();for(let[t,f]of Object.entries(i))u.set(t,f);return u}function aA4(i,u){let t=0;return{publish(f,l,c,E){f.publish(l,c,E?{headers:E}:void 0).catch(($)=>{if(t++,bA4().add(1,{"org.id":u??"unknown"}),t===1||t%100===0)console.warn(`[Decopilot] JetStream publish failed for thread ${i} (${t} total):`,$)})},get errorCount(){return t}}}class X_u{options;js=null;jsm=null;constructor(i){this.options=i}async init(){let i=this.options.getConnection();if(!i){console.log("[Decopilot] StreamBuffer.init skipped: NATS not connected yet");return}let u=this.options.getJetStreamManager?await this.options.getJetStreamManager():await G5.jetstreamManager(i),t=VA4();try{await u.streams.info(D8),await u.streams.update(D8,t)}catch(f){if(f instanceof Error&&f.message.includes("stream not found"))await u.streams.add(t);else if(f instanceof Error&&/can ?not change.*storage|storage type/i.test(f.message))await u.streams.delete(D8),await u.streams.add(t);else throw f}this.js=this.options.getJetStream(),this.jsm=u,console.log(`[Decopilot] StreamBuffer.init ${this.js?"ready":"degraded (js=null)"}`)}pump(i,u,t,f){let l=this.js;if(!l){console.warn(`[Decopilot] pump: JetStream client unavailable for thread ${u}; chunks NOT published to NATS`);return}let c=aA4(u,f),E=!1,$=()=>{if(E)return;E=!0;let d=squ(u);l.publish(d.subject,d.data).catch(()=>{})};t.addEventListener("abort",$,{once:!0});let w=(d)=>{let _=performance.now(),v=UY(d,{runId:u}),h=performance.now()-_;if(_M().record(h),vM().add(1,{"org.id":f??"unknown"}),eA4?.record(h,v.reduce((D,g)=>D+g.data.length,0)),v.length===0){console.warn(`[Decopilot] dropping oversized stream chunk for thread ${u}`);return}for(let D of v)c.publish(l,D.subject,D.data,D.headers?fit(D.headers):void 0)};(async()=>{let d=i.getReader(),_=0,v=0;try{while(!0){let{done:h,value:D}=await d.read();if(h)break;if(w(D),v++,++_>=64)_=0,await new Promise((g)=>setImmediate(g))}}catch(h){console.warn(`[Decopilot] stream pump error for thread ${u}:`,h?.message??h)}finally{if(d.releaseLock(),$(),mA4)console.warn(JSON.stringify({msg:"decopilot-stream-diag",event:"pump-done",taskId:u,publishedChunks:v,publishErrors:c.errorCount}))}})()}async publishRawChunk(i,u,t){let f=this.js;if(!f)return!1;let l=performance.now(),c=UY(u,{runId:i,dedup:t});if(_M().record(performance.now()-l),vM().add(1),c.length===0)return console.warn(`[Decopilot] dropping oversized raw chunk for thread ${i} (> MAX_CHUNKED_BYTES)`),!0;for(let E of c)await f.publish(E.subject,E.data,{...E.headers?{headers:fit(E.headers)}:{},...E.msgId?{msgID:E.msgId}:{}});return!0}async publishDone(i,u,t){let f=this.js;if(!f)return!1;let l=J1i({runId:i,fenceToken:u,finalSeq:t});return await f.publish(l.subject,l.data,{msgID:l.msgId}),!0}async createTailStream(i,u,t){let f=this.js;if(!f)return console.warn(`[Decopilot] createTailStream: JetStream client unavailable for thread ${i}; no live tail`),null;let l=t?.deliverPolicy==="new"?G5.DeliverPolicy.New:G5.DeliverPolicy.All,c=t?.closeOnDone??!1,E=u7(i),$;try{$=await(await f.consumers.get(D8,{filter_subjects:E,deliver_policy:l})).consume()}catch(O){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",O?.message??O),null}let _=Fdi({messages:async function*(){try{for await(let O of $)yield{subject:O.subject,data:O.data,headers:O.headers}}finally{$.stop()}}(),onCancel:()=>$.stop()}).pipeThrough(K1i()).pipeThrough(S1i()).getReader(),v=!1,h=()=>{if(v)return;v=!0;try{_.releaseLock()}catch{}},D=!1,g=()=>{if(D)return;D=!0,$.stop(),_.cancel().catch(()=>{}),h()};return u?.addEventListener("abort",g,{once:!0}),new ReadableStream({async pull(O){for(;;){let{done:Z,value:B}=await _.read();if(Z){g(),O.close();return}let y=B;if(y.kind==="done"){if(c){g(),O.close();return}continue}O.enqueue(y.chunk);return}},cancel(){g()}})}purge(i){if(!this.jsm)return;this.jsm.streams.purge(D8,{filter:u7(i)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var G5,lit,HA4=(i)=>{let u;return()=>u??=i()},bA4,RA4=86400000000000,CA4=120000000000,MA4=4294967296,qA4=500000,rA4,mA4,eA4;var Eit=N(()=>{Ptu();xtu();Y1i();z1();$Hi();G5=k(i7(),1),lit=k(yO(),1),bA4=HA4(()=>Mt.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"}));rA4=process.env.STREAM_ENCODE_TRACE==="1",mA4=process.env.DECOPILOT_STREAM_TRACE==="1";eA4=rA4?new cit:null});function $it(i){let u=i.createFetch??oA4,t=i.timeoutMs??2000;return async(f)=>{try{let l=i.getConnection();if(!l)return J_u;let c=E_(f),$=await u(l,t)(`tunnel://${c}/api/links/status`,{method:"GET"});if(!$.ok)return J_u;let w=await $.json();return{online:!0,hostname:w.hostname,capabilities:w.capabilities??[],cliVersion:w.cliVersion}}catch{return J_u}}}var J_u,oA4=(i,u)=>V2({connection:i,firstFrameTimeoutMs:u});var wit=N(()=>{bC();uM();J_u={online:!1,capabilities:[]}});async function*sA4(i){if(!i.body){yield{headers:{status:i.status,headers:Object.fromEntries(i.headers.entries())}};return}let u=i.body.getReader(),t=!1;try{yield{headers:{status:i.status,headers:Object.fromEntries(i.headers.entries())}};while(!0){let{done:f,value:l}=await u.read();if(f){t=!0;return}yield{data:Buffer.from(l).toString("base64")}}}finally{try{if(!t)await u.cancel()}catch{}finally{u.releaseLock()}}}function dit(i){let u=i.createFetch??((t)=>V2({connection:t,idleTimeoutMs:pA4}));return async function*(f,l,c){let E=i.getConnection();if(!E)throw Error("link_unavailable: NATS unavailable");let $=E_(f),w=u(E),d={method:l.method,headers:l.headers,signal:c?.signal};if(l.body!=null)d.body=l.body;let _=await w(`tunnel://${$}${l.path}`,d);yield*sA4(_)}}var pA4=45000;var _it=N(()=>{bC();uM()});function vit(i){let u=i.createFetch??((t)=>V2({connection:t,idleTimeoutMs:in4}));return{async publish(t,f,l){let c=i.getConnection();if(!c)throw Error("link_unavailable: NATS unavailable");let E=E_(t),w=await u(c)(`tunnel://${E}/api/links/work`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(f),signal:l?.signal});if(!w.ok){let d=await w.text().catch(()=>"");throw Error(`tunnel work publish failed (${w.status})${d?`: ${d}`:""}`)}await w.body?.cancel().catch(()=>{})}}}function hit(i){let u=i.createFetch??V2;return{async publishControlFrame(t,f,l){let c=i.getConnection();if(!c)throw Error("link_unavailable: NATS unavailable");let E=E_(t),w=await u(c)(`tunnel://${E}/api/links/control`,{method:"POST",headers:{"content-type":"application/json"},body:gVu(f),signal:l?.signal});if(!w.ok){let d=await w.text().catch(()=>"");throw Error(`tunnel control publish failed (${w.status})${d?`: ${d}`:""}`)}await w.body?.cancel().catch(()=>{})}}}var in4=45000;var Dit=N(()=>{bC();DHi();uM()});function git(i,u){switch(i.type){case"START":{let t={type:"RUN_STARTED",taskId:i.taskId,orgId:i.orgId,userId:i.userId,abortController:i.abortController,runConfig:i.runConfig,podId:i.podId};if(u?.status.tag==="running")return[{type:"PREVIOUS_RUN_ABORTED",taskId:i.taskId,orgId:u.orgId},t];return[t]}case"STEP_DONE":{if(u?.status.tag!=="running")return[];return[{type:"STEP_COMPLETED",taskId:i.taskId,orgId:u.orgId,stepCount:u.status.stepCount+1}]}case"FINISH":{if(u==null||u.status.tag!=="running")return[];let{stepCount:t}=u.status;if(i.threadStatus==="completed")return[{type:"RUN_COMPLETED",taskId:i.taskId,orgId:u.orgId,stepCount:t}];if(i.threadStatus==="requires_action")return[{type:"RUN_REQUIRES_ACTION",taskId:i.taskId,orgId:u.orgId,stepCount:t}];return[{type:"RUN_FAILED",taskId:i.taskId,orgId:u.orgId,reason:"error"}]}case"CANCEL":{if(u?.status.tag!=="running")return[];return[{type:"RUN_FAILED",taskId:i.taskId,orgId:u.orgId,reason:"cancelled"}]}case"RESUME":{if(u?.status.tag==="running")return[];return[{type:"RUN_RESUMED",taskId:i.taskId,orgId:i.orgId,userId:i.userId,abortController:i.abortController,podId:i.podId}]}case"FORCE_FAIL":{if(i.reason==="ghost")return[{type:"RUN_FAILED",taskId:i.taskId,orgId:u?.orgId??i.orgId,reason:i.reason}];if(u?.status.tag!=="running")return[];return[{type:"RUN_FAILED",taskId:i.taskId,orgId:u.orgId,reason:i.reason}]}}}function Nit(i,u,t=new Date){switch(u.type){case"RUN_STARTED":return{taskId:u.taskId,orgId:u.orgId,userId:u.userId,status:{tag:"running",abortController:u.abortController,stepCount:0,startedAt:t}};case"RUN_RESUMED":return{taskId:u.taskId,orgId:u.orgId,userId:u.userId,status:{tag:"running",abortController:u.abortController,stepCount:0,startedAt:t}};case"STEP_COMPLETED":if(i?.status.tag!=="running")return i;return{...i,status:{...i.status,stepCount:u.stepCount}};case"RUN_COMPLETED":return;case"RUN_REQUIRES_ACTION":return;case"RUN_FAILED":return;case"PREVIOUS_RUN_ABORTED":return}}async function Oit(i,u,t,f){let{storage:l,sseHub:c}=f,E=await l.get(i,u);c.emit(u,j_(i,t,{virtualMcpId:E?.virtual_mcp_id??void 0,createdBy:E?.created_by,triggerId:E?.trigger_id,title:E?.title,branch:E?.branch??null,createdAt:E?.created_at,updatedAt:E?.updated_at})),c.emit(u,Xq(i,t))}async function tn4(i,u){let{storage:t,sseHub:f}=u;switch(i.type){case"RUN_STARTED":{await t.update(i.taskId,i.orgId,{status:"in_progress",run_config:i.runConfig??null,run_started_at:new Date().toISOString(),last_progress_at:null,failure_reason:null,failure_kind:null});let l=await t.get(i.taskId,i.orgId);f.emit(i.orgId,j_(i.taskId,"in_progress",{virtualMcpId:l?.virtual_mcp_id??void 0,createdBy:l?.created_by,triggerId:l?.trigger_id,title:l?.title,branch:l?.branch??null,createdAt:l?.created_at,updatedAt:l?.updated_at}));return}case"RUN_RESUMED":{await t.update(i.taskId,i.orgId,{run_started_at:new Date().toISOString()});let l=await t.get(i.taskId,i.orgId);f.emit(i.orgId,j_(i.taskId,"in_progress",{virtualMcpId:l?.virtual_mcp_id??void 0,createdBy:l?.created_by,triggerId:l?.trigger_id,title:l?.title,branch:l?.branch??null,createdAt:l?.created_at,updatedAt:l?.updated_at}));return}case"STEP_COMPLETED":f.emit(i.orgId,uci(i.taskId,i.stepCount));return;case"RUN_COMPLETED":await Oit(i.taskId,i.orgId,"completed",u);return;case"RUN_REQUIRES_ACTION":await Oit(i.taskId,i.orgId,"requires_action",u);return;case"RUN_FAILED":{if(i.reason==="ghost"){if(!await t.forceFailIfInProgress(i.taskId,i.orgId))return;await t.update(i.taskId,i.orgId,{run_config:null,run_started_at:null})}else await t.update(i.taskId,i.orgId,{status:"failed",run_config:null,run_started_at:null,...i.reason==="reaped"?{failure_reason:un4,failure_kind:"stall"}:{}});let l=await t.get(i.taskId,i.orgId);f.emit(i.orgId,j_(i.taskId,"failed",{virtualMcpId:l?.virtual_mcp_id??void 0,createdBy:l?.created_by,triggerId:l?.trigger_id,title:l?.title,branch:l?.branch??null,createdAt:l?.created_at,updatedAt:l?.updated_at})),f.emit(i.orgId,Xq(i.taskId,"failed"));return}case"PREVIOUS_RUN_ABORTED":return}}async function Zit(i,u){for(let{event:t}of i)await tn4(t,u)}var un4="Run stalled \u2014 no progress within the idle timeout window";var Bit=N(()=>{wf()});function yit(i){return i.now-i.lastProgressAt>i.idleTimeoutMs}function Fit(i){return Math.max(i.persistedLastProgressAt??Number.NEGATIVE_INFINITY,i.currentRunStartedAt)}class K_u{deps;clock;states=new Map;reaperTimer=null;constructor(i,u=()=>new Date){this.deps=i;this.clock=u;this.reaperTimer=setInterval(()=>{this.reapStaleRuns().catch((t)=>{console.error("[RunRegistry] Reaper sweep failed",t)})},fn4)}async execute(i){let u=this.dispatch(i);return await this.react(u),u}dispatch(i){let u=this.states.get(i.taskId),t=git(i,u),f=[];for(let l of t){let c=this.states.get(l.taskId);if(l.type==="PREVIOUS_RUN_ABORTED"||l.type==="RUN_FAILED"){if(c?.status.tag==="running")c.status.abortController.abort()}let E=Nit(c,l,this.clock());if(E===void 0)this.states.delete(l.taskId);else this.states.set(l.taskId,E);if(f.push({event:l,state:E}),ln4.has(l.type))Uit().add(1,{"org.id":l.orgId});else if(cn4.has(l.type)&&c?.status.tag==="running")Uit().add(-1,{"org.id":l.orgId})}return f}react(i){return Zit(i,this.deps)}getAbortSignal(i){let u=this.states.get(i);if(u?.status.tag==="running")return u.status.abortController.signal;return null}isRunning(i){return this.states.get(i)?.status.tag==="running"}async stopAll(){for(let[,i]of this.states)if(i.status.tag==="running")i.status.abortController.abort();this.states.clear()}dispose(){if(this.reaperTimer)clearInterval(this.reaperTimer),this.reaperTimer=null}async reapStaleRuns(){let i=this.clock().getTime(),u=[...this.states].filter(([,t])=>t.status.tag==="running");for(let[t,f]of u){if(this.states.get(t)?.status.tag!=="running")continue;let c;try{let $=await this.deps.storage.getProgress(t,f.orgId);c=Fit({persistedLastProgressAt:$?.lastProgressAt??null,currentRunStartedAt:f.status.startedAt.getTime()})}catch($){console.warn(`[RunRegistry] Reaper progress read failed for ${t}; skipping`,$);continue}if(!yit({lastProgressAt:c,now:i,idleTimeoutMs:Tit}))continue;let E=await this.deps.storage.get(t,f.orgId).catch(()=>null);if(E&&E.status!=="in_progress"){let $=this.states.get(t);if($?.status.tag==="running")$.status.abortController.abort();this.states.delete(t);continue}console.warn(`[RunRegistry] Reaping stuck run for thread ${t} (idle > ${Tit/60000}m) ...`),En4().add(1,{"org.id":f.orgId,reason:"idle_timeout"}),await this.execute({type:"FORCE_FAIL",taskId:t,reason:"reaped"}).catch(($)=>{console.error("[RunRegistry] Reaper execute failed",$)})}}}var fn4=300000,Tit=600000,ln4,cn4,Pit=(i)=>{let u;return()=>u??=i()},Uit,En4;var xit=N(()=>{Bit();z1();ln4=new Set(["RUN_STARTED","RUN_RESUMED"]),cn4=new Set(["RUN_COMPLETED","RUN_FAILED","RUN_REQUIRES_ACTION","PREVIOUS_RUN_ABORTED"]),Uit=Pit(()=>Mt.createUpDownCounter("decopilot.stream.inflight",{description:"Number of in-flight decopilot stream requests",unit:"{requests}"})),En4=Pit(()=>Mt.createCounter("decopilot.run.reaped",{description:"Number of decopilot runs force-failed by the progress-based reaper",unit:"{runs}"}))});function Pxi(i,u,t,f){if(!f)return!1;return i.emit(u,j_(t,f.status,{title:f.title??void 0,virtualMcpId:f.virtual_mcp_id??void 0,createdBy:f.created_by??void 0,triggerId:f.trigger_id??null,branch:f.branch??null,createdAt:f.created_at,updatedAt:f.updated_at})),!0}var Iit=N(()=>{wf()});class S_u{storage;options;timer=null;constructor(i,u={}){this.storage=i;this.options=u}start(){if(this.timer)return;let i=this.options.intervalMs??300000;this.timer=setInterval(()=>{this.runOnce()},i)}async runOnce(){let i=this.options.staleAfterMs??3600000;try{let u=await this.storage.sweepAbandoned(i);if(u>0)console.log(`[async-research-sweeper] marked ${u} stale jobs as abandoned`);return u}catch(u){return console.error("[async-research-sweeper] sweep failed",u),0}}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}import{readdir as $n4,rm as xxi}from"fs/promises";import{join as Ixi}from"path";async function Axi(i){let u=new Date;u.setUTCDate(u.getUTCDate()-wn4),u.setUTCHours(0,0,0,0);let t=0;try{let f=await DK(i);for(let l of f)if(/^\d{4}$/.test(l))t+=await Ait(i,l,u);else if(!l.startsWith(".")){let c=Ixi(i,l),E=await DK(c);for(let w of E){if(!/^\d{4}$/.test(w))continue;t+=await Ait(c,w,u)}if((await DK(c)).length===0)await xxi(c,{recursive:!0,force:!0})}}catch(f){console.warn("monitoring retention cleanup failed:",f)}return t}async function Ait(i,u,t){let f=0,l=Ixi(i,u),c=await DK(l);for(let $ of c){if(!/^\d{2}$/.test($))continue;let w=Ixi(l,$),d=await DK(w);for(let v of d){if(!/^\d{2}$/.test(v))continue;let h=new Date(`${u}-${$}-${v}T00:00:00Z`);if(isNaN(h.getTime()))continue;if(h<t){let D=Ixi(w,v);await xxi(D,{recursive:!0,force:!0}),f++}}if((await DK(w)).length===0)await xxi(w,{recursive:!0,force:!0})}if((await DK(l)).length===0)await xxi(l,{recursive:!0,force:!0});return f}async function DK(i){try{return(await $n4(i)).filter((t)=>!t.startsWith("."))}catch{return[]}}var wn4=30;var Y_u=()=>{};import{DBOS as W_u,SchedulerMode as dn4}from"@dbos-inc/dbos-sdk";async function vn4(){let i=[pd(),pS(),_D()],u=0;for(let t of i)try{u+=await Axi(t)}catch(f){console.error("[monitoring-retention] cleanup failed:",f)}return console.log(`[monitoring-retention] deleted ${u} day-dir(s) across ${i.length} signal dir(s)`),{deleted:u,dirs:i.length}}async function hn4(i,u){await W_u.runStep(()=>vn4(),{name:"monitoringRetention"})}function Git(){if(nit)return;nit=!0;let i=W_u.registerWorkflow(hn4,{name:"monitoringRetentionWorkflow"});W_u.registerScheduled(i,{name:"monitoringRetentionWorkflow",crontab:_n4,mode:dn4.ExactlyOncePerIntervalWhenActive})}var _n4="23 4 * * *",nit=!1;var kit=N(()=>{Sw();Y_u()});function jit(i){return async(u,t)=>{let f=await i.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","=",t).where("member.organizationId","=",u).executeTakeFirst();if(!f)return console.warn(`[automationContextFactory] User ${t} not found in org ${u} \u2014 returning null`),null;let l=await H9.create();l.auth.user={id:t,role:f.role},l.organization={id:f.orgId,slug:f.orgSlug,name:f.orgName};let c=await Siu(i.db,u,f.role);return l.boundAuth=Kiu({auth:l.authInstance,headers:new Headers,role:f.role,permissions:c,userId:t}),l.access=new LZ(t,void 0,l.boundAuth,f.role,"self"),w3i(l,{id:f.orgId,slug:f.orgSlug}),l}}var Xit=N(()=>{QZ();Ue()});import{EventEmitter as Dn4}from"events";var L_u;var Jit=N(()=>{nO();L_u=new Dn4;L_u.on("request",(i)=>{uv(i)})});function Kit(){return async(i,u)=>{let t=Date.now(),f=i.req.method,l=i.req.path;if(l==="/api/auth/get-session"||l.includes("favicon")){await u();return}let c="",E=!1;if(l.startsWith("/mcp")&&f==="POST"){E=!0;try{if(i.req.header("Content-Type")?.includes("application/json")){let h=await i.req.raw.clone().json();if(h.method==="tools/call"&&h.params?.name){let D=wb(h.params.name),g=h.params.arguments||{},O=Object.keys(g).map((B)=>wb(B)),Z=O.length>0?O.slice(0,3).join(",")+(O.length>3?"\u2026":""):"";c=`${v1.tool}${D}${v1.dim}(${Z})${v1.reset}`}else if(h.method)c=`${v1.dim}${wb(h.method)}${v1.reset}`}}catch{}}let $=wb(l);if(l.startsWith("/mcp/conn_")){let _=l.split("/")[2]??"";$=`/mcp/${v1.mcp}${wb(_.slice(0,12))}\u2026${v1.reset}`}else if(l==="/mcp")$=`${v1.mcp}/mcp${v1.reset}`;else if(l==="/mcp/registry")$=`${v1.mcp}/mcp/registry${v1.reset}`;let w=Nn4(f),d=E?"\u25C0":"\u2190";if(!$li())console.log(`${v1.dim}${d}${v1.reset} ${w}${f}${v1.reset} ${$}${c?` ${c}`:""}`);try{await u()}finally{let _=Date.now()-t,v=i.res.status,h=gn4(v),D=_<1000?`${_}ms`:`${(_/1000).toFixed(1)}s`,g=E?"\u25B6":"\u2192";if(!$li())console.log(`${v1.dim}${g}${v1.reset} ${w}${f}${v1.reset} ${$}${c?` ${c}`:""} ${h}${v}${v1.reset} ${v1.duration}${D}${v1.reset}`);L_u.emit("request",{method:f,path:wb(l),status:v,duration:_,timestamp:new Date})}}}var v1,gn4=(i)=>{if(i>=500)return v1.serverError;if(i>=400)return v1.clientError;if(i>=300)return v1.redirect;return v1.ok},Nn4=(i)=>{return v1[i]||v1.reset},wb=(i)=>{return i.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var Sit=N(()=>{nO();Jit();v1={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 Qit}from"crypto";import{mkdir as On4,readdir as Zn4,rm as Yit,stat as zit}from"fs/promises";import{join as z_u,relative as Bn4}from"path";import{z as I0}from"zod";function bit(i){let u=i.replace(/[^a-zA-Z0-9_-]/g,"_");return z_u(yn4,u)}function Rit(i){return i.replace(/^\/+/,"").replace(/\.\./g,"")}function Q_u(i,u){let t=bit(i),f=Rit(u);return z_u(t,f)}function Fn4(i,u,t,f){let l=Fu().encryptionKey||"dev-secret",c=`${i}:${u}:${t}:${f}`;return Qit("sha256",l).update(c).digest("hex")}function Lit(i,u,t,f,l){let c=Math.floor(Date.now()/1000)+f,E=Fn4(u,t,c,l),$=new URL(`/api/dev-assets/${u}/${Rit(t)}`,i);return $.searchParams.set("expires",c.toString()),$.searchParams.set("signature",E),$.searchParams.set("method",l),$.toString()}function Cit(i,u,t){let f=`${i}:${u.getTime()}:${t}`;return`"${Qit("md5","etag").update(f).digest("hex")}"`}async function Mit(i,u,t,f,l){try{let c=await Zn4(i,{withFileTypes:!0});for(let E of c){let $=z_u(i,E.name),d=Bn4(u,$).replace(/\\/g,"/");if(t&&!d.startsWith(t))continue;if(E.isDirectory())if(f){let _=d+"/";if(!t||_.startsWith(t)){if(!(t?d.slice(t.length):d).includes("/"))l.commonPrefixes.add(_)}}else await Mit($,u,t,f,l);else if(E.isFile()){if(f&&t){let _=d.slice(t.length);if(_.includes(f)){let v=_.indexOf(f),h=t+_.slice(0,v+1);l.commonPrefixes.add(h);continue}}try{let _=await zit($);l.objects.push({key:d,size:_.size,lastModified:_.mtime.toISOString(),etag:Cit($,_.mtime,_.size)})}catch{}}}}catch{}}function qit(i,u){let f=Bi(i).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:I0.object({prefix:I0.string().optional(),maxKeys:I0.number().optional().default(1000),continuationToken:I0.string().optional(),delimiter:I0.string().optional()}),outputSchema:I0.object({objects:I0.array(I0.object({key:I0.string(),size:I0.number(),lastModified:I0.string(),etag:I0.string()})),nextContinuationToken:I0.string().optional(),isTruncated:I0.boolean(),commonPrefixes:I0.array(I0.string()).optional()}),handler:async(l)=>{let c=l,E=c.prefix||"",$=c.maxKeys??1000,w=c.delimiter,d=c.continuationToken,_=bit(f);await On4(_,{recursive:!0});let v={objects:[],commonPrefixes:new Set};await Mit(_,_,E,w,v),v.objects.sort((Z,B)=>Z.key.localeCompare(B.key));let h=0;if(d){if(h=v.objects.findIndex((Z)=>Z.key>d),h===-1)h=v.objects.length}let D=v.objects.slice(h,h+$),g=h+$<v.objects.length,O=g?D[D.length-1]?.key:void 0;return{objects:D,isTruncated:g,nextContinuationToken:O,commonPrefixes:Array.from(v.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:I0.object({key:I0.string()}),outputSchema:I0.object({contentType:I0.string().optional(),contentLength:I0.number(),lastModified:I0.string(),etag:I0.string(),metadata:I0.record(I0.string(),I0.string()).optional()}),handler:async(l)=>{let c=l,E=Q_u(f,c.key),$=await zit(E);return{contentType:e3u(c.key),contentLength:$.size,lastModified:$.mtime.toISOString(),etag:Cit(E,$.mtime,$.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:I0.object({key:I0.string(),expiresIn:I0.number().optional()}),outputSchema:I0.object({url:I0.string(),expiresIn:I0.number()}),handler:async(l)=>{let c=l,E=c.expiresIn??Wit;return{url:Lit(u,f,c.key,E,"GET"),expiresIn:E}}},{name:"PUT_PRESIGNED_URL",description:"Generate a presigned URL for uploading a file to local storage",inputSchema:I0.object({key:I0.string(),expiresIn:I0.number().optional(),contentType:I0.string().optional()}),outputSchema:I0.object({url:I0.string(),expiresIn:I0.number()}),handler:async(l)=>{let c=l,E=c.expiresIn??Wit;return{url:Lit(u,f,c.key,E,"PUT"),expiresIn:E}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:I0.object({key:I0.string()}),outputSchema:I0.object({success:I0.boolean(),key:I0.string()}),handler:async(l)=>{let c=l,E=Q_u(f,c.key);try{return await Yit(E),{success:!0,key:c.key}}catch{return{success:!1,key:c.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:I0.object({keys:I0.array(I0.string()).max(1000)}),outputSchema:I0.object({deleted:I0.array(I0.string()),errors:I0.array(I0.object({key:I0.string(),message:I0.string()}))}),handler:async(l)=>{let c=l,E=[],$=[];return await Promise.all(c.keys.map(async(w)=>{let d=Q_u(f,w);try{await Yit(d),E.push(w)}catch(_){$.push({key:w,message:_ instanceof Error?_.message:"Unknown error"})}})),{deleted:E,errors:$}}}]}async function H_u(i,u,t){let f=qit(u,t),l=new jD({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:k1});for(let E of f){let $="shape"in E.inputSchema?E.inputSchema.shape:I0.object({}).shape,w=E.outputSchema&&"shape"in E.outputSchema?E.outputSchema.shape:I0.object({}).shape;l.registerTool(E.name,{description:E.description??"",inputSchema:$,outputSchema:w,annotations:E.annotations,_meta:E._meta},async(d)=>{try{let _=await E.handler(d);return{content:[{type:"text",text:JSON.stringify(_)}],structuredContent:_}}catch(_){return{content:[{type:"text",text:`Error: ${_.message}`}],isError:!0}}})}let c=new y3({enableJsonResponse:i.headers.get("Accept")?.includes("application/json")??!1});return await l.connect(c),$h(l,c,i,"mcp:dev-assets")}async function Vit(i,u,t,f){let c=qit(t,f).find((E)=>E.name===i);if(!c)return{content:[{type:"text",text:`Tool not found: ${i}`}],isError:!0};try{let E=await c.handler(u);return{content:[{type:"text",text:JSON.stringify(E)}]}}catch(E){return{content:[{type:"text",text:E instanceof Error?E.message:String(E)}],isError:!0}}}var yn4="./data/assets",Wit=3600,Hit,rit;var mit=N(()=>{xt();ma();sf();Kq();Sz();mE();RPi();Hit=new Hu;Hit.all("/",async(i)=>{let u=i.get("meshContext"),t=new URL(i.req.url),f=`${t.protocol}//${t.host}`;return H_u(i.req.raw,u,f)});rit=Hit});var eit={};zi(eit,{mountDevRoutes:()=>Tn4});function Tn4(i,u){i.all("/mcp/:connectionId{.*_dev-assets$}",u,async(f)=>{let l=f.get("meshContext"),c=new URL(f.req.url),E=`${c.protocol}//${c.host}`;return H_u(f.req.raw,l,E)}),i.all("/mcp/:connectionId{.*_dev-assets$}/call-tool/:toolName",u,async(f)=>{let l=f.get("meshContext"),c=new URL(f.req.url),E=`${c.protocol}//${c.host}`,$=f.req.param("toolName");if(!$)return f.json({error:"Missing tool name"},400);let w=await f.req.json(),d=await Vit($,w,l,E);if(d.isError)return f.json(d.content,500);return f.json(d.content)}),i.use("/mcp/dev-assets",u),i.route("/mcp/dev-assets",rit);let t=new Hu;t.use("*",Qd({mountPath:"/api/dev-assets"})),t.route("/",bPi({orgFromPath:!1})),i.route("/api/dev-assets",t)}var ait=N(()=>{sf();R3u();RPi();mit()});var oit=N(()=>{tuu();fuu();yB()});var nxi=N(()=>{oit()});var pit={};zi(pit,{streamAgent:()=>sit,createDecopilotClient:()=>Pn4});async function Un4(i){let{parseJsonEventStream:u,uiMessageChunkSchema:t}=await Promise.resolve().then(() => (Cf(),ytu));return u({stream:i,schema:t}).pipeThrough(new TransformStream({transform(f,l){if(!f.success)throw f.error;l.enqueue(f.value)}}))}async function sit(i,u,t,f,l){let{readUIMessageStream:c}=await Promise.resolve().then(() => (Cf(),ytu)),E=t.value??t.id;if(!E)throw Error("Agent binding has no id or value \u2014 cannot resolve agent");let $=f.credentialId??t.credentialId,w=f.thinking??t.thinking,d=w?.id,_={messages:f.messages,...d?{models:{credentialId:$,thinking:w,...f.fast??t.fast?{fast:f.fast??t.fast}:{}}}:{},agent:{id:E},temperature:f.temperature??t.temperature,toolApprovalLevel:f.toolApprovalLevel??t.toolApprovalLevel,mode:f.mode??t.mode??"default",...f.memory?{memory:f.memory}:{},...f.thread_id?{thread_id:f.thread_id}:{}},v=await fetch(i,{method:"POST",headers:{"Content-Type":"application/json","x-mesh-token":u,Authorization:`Bearer ${u}`},body:JSON.stringify(_),signal:l?.signal});if(!v.ok){let D=await v.text().catch(()=>""),g=`HTTP ${v.status}`;try{let O=JSON.parse(D);if(O?.error)g=O.error}catch{if(D)g=D}throw Error(g)}if(!v.body)throw Error("Empty response body from decopilot stream");let h=await Un4(v.body);return c({stream:h})}function Pn4(i){let{baseUrl:u,orgSlug:t,token:f}=i,l=`${u}/${t}/decopilot/runtime/stream`;return{stream(c,E){let $={__type:"@deco/agent",id:c.agent.id,credentialId:c.credentialId??"",thinking:c.thinking??{id:"",title:""},fast:c.fast,toolApprovalLevel:c.toolApprovalLevel,mode:c.mode,temperature:c.temperature};return sit(l,f,$,c,E)}}}import{z as Pw}from"zod";function iut(i){let u=i.properties;if(!u)return i;for(let t of Object.values(u)){let f=t.properties;if(!f?.__type?.const)continue;let l=f.__type.const,c=xn4.get(l);if(!c)continue;let E=c.map(($)=>({name:String($.name),...$.inputSchema&&{inputSchema:Pw.toJSONSchema($.inputSchema)},...$.outputSchema&&{outputSchema:Pw.toJSONSchema($.outputSchema)}}));f.__binding={const:E}}return i}var xn4,eJ6,In4=(i)=>{return typeof i==="object"&&i!==null&&i.__type==="@deco/agent"},R_u=(i)=>{return typeof i==="object"&&i!==null&&typeof i.__type==="string"&&i.__type!=="@deco/agent"&&typeof i.value==="string"},Gxi=(i,u,t)=>{let f=t?{"x-caller-app":t}:void 0;if(u.cookie)f??={},f.cookie=u.cookie;if(u.token)f??={},f["x-mesh-token"]=u.token;return{type:"HTTP",url:new URL(`/mcp/${i}`,u.meshUrl).href,token:u.token,headers:f}},An4=(i,u,t)=>{let f=Gxi(i,u,t);return new Proxy(HQ.forConnection(f),{get(l,c){if(c==="value")return i;if(c==="__type")return t;return l[c]}})},nn4=(i,u)=>{let t=u.organizationSlug;if(!t)throw Error("organizationSlug is required for agent bindings");let f=`${u.meshUrl}/api/${t}/decopilot/runtime/stream`;return{STREAM:async(l,c)=>{let{streamAgent:E}=await Promise.resolve().then(() => pit);return E(f,u.token,i,l,c)}}},b_u=(i,u)=>{if(i===null||i===void 0)return i;if(Array.isArray(i))return i.map((t)=>b_u(t,u));if(typeof i==="object"){if(In4(i))return nn4(i,u);if(R_u(i))return An4(i.value,u,i.__type);let t={};for(let[f,l]of Object.entries(i))t[f]=b_u(l,u);return t}return i},uut=(i)=>{return b_u(i.state,i)};var db=N(()=>{nxi();xn4=new Map;eJ6=Pw.object({id:Pw.string(),title:Pw.string(),capabilities:Pw.object({vision:Pw.boolean().optional(),text:Pw.boolean().optional(),tools:Pw.boolean().optional(),reasoning:Pw.boolean().optional()}).passthrough().optional(),provider:Pw.string().optional().nullable(),limits:Pw.object({contextWindow:Pw.number().optional(),maxOutputTokens:Pw.number().optional()}).passthrough().optional()})});var Gn4,tut=(i,u,t)=>{if(!u)return null;if(i===void 0||i==="*")return"*";if(typeof i==="string")return i===u?i:null;if(Array.isArray(i))return i.includes(u)?u:null;if(typeof i==="function")return i(u,t)??null;return null},kn4=(i,u,t)=>{let f=u.headers.get("Origin"),l=tut(t.origin,f,u);if(l)i.set("Access-Control-Allow-Origin",l);if(t.credentials)i.set("Access-Control-Allow-Credentials","true");if(t.exposeHeaders?.length)i.set("Access-Control-Expose-Headers",t.exposeHeaders.join(", "))},fut=(i,u)=>{let t=new Headers,f=i.headers.get("Origin"),l=tut(u.origin,f,i);if(l)t.set("Access-Control-Allow-Origin",l);if(u.credentials)t.set("Access-Control-Allow-Credentials","true");let c=u.allowMethods??Gn4;t.set("Access-Control-Allow-Methods",c.join(", "));let E=i.headers.get("Access-Control-Request-Headers");if(u.allowHeaders?.length)t.set("Access-Control-Allow-Headers",u.allowHeaders.join(", "));else if(E)t.set("Access-Control-Allow-Headers",E);if(u.maxAge!==void 0)t.set("Access-Control-Max-Age",u.maxAge.toString());return new Response(null,{status:204,headers:t})},lut=(i,u,t)=>{let f=new Headers(i.headers);return kn4(f,u,t),new Response(i.body,{status:i.status,statusText:i.statusText,headers:f})};var cut=N(()=>{Gn4=["GET","HEAD","PUT","POST","DELETE","PATCH"]});function Eut(i=32){let t=new Uint8Array(i);return crypto.getRandomValues(t),Array.from(t,(f)=>"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"[f%62]).join("")}function jn4(i){try{let u=new URL(i);return u.protocol==="https:"||u.hostname==="localhost"||u.hostname.endsWith(".localhost")||u.hostname==="127.0.0.1"||!u.protocol.startsWith("http")}catch{return!1}}function $ut(i){return btoa(JSON.stringify(i)).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function wut(i){try{let u=i.replace(/-/g,"+").replace(/_/g,"/");return JSON.parse(atob(u))}catch{return null}}function dut(i){return{handleProtectedResourceMetadata:(d)=>{let _=kh(new URL(d.url)),v=`${_.origin}/mcp`;return Response.json({resource:v,authorization_servers:[_.origin],scopes_supported:["*"],bearer_methods_supported:["header"],resource_signing_alg_values_supported:["RS256","none"]})},handleAuthorizationServerMetadata:(d)=>{let v=kh(new URL(d.url)).origin;return Response.json({issuer:v,authorization_endpoint:`${v}/authorize`,token_endpoint:`${v}/token`,registration_endpoint:`${v}/register`,scopes_supported:["*"],response_types_supported:["code"],response_modes_supported:["query"],grant_types_supported:["authorization_code","refresh_token"],token_endpoint_auth_methods_supported:["none","client_secret_post"],code_challenge_methods_supported:["S256","plain"]})},handleAuthorize:(d)=>{let _=kh(new URL(d.url)),v=_.searchParams.get("redirect_uri"),h=_.searchParams.get("response_type"),D=_.searchParams.get("state"),g=_.searchParams.get("code_challenge"),O=_.searchParams.get("code_challenge_method");if(!v)return Response.json({error:"invalid_request",error_description:"redirect_uri required"},{status:400});if(h!=="code")return Response.json({error:"unsupported_response_type",error_description:"Only 'code' is supported"},{status:400});let Z=kh(new URL(`${_.origin}/oauth/callback`)),B=Z.toString(),F=$ut({redirectUri:v,clientState:D??void 0,codeChallenge:g??void 0,codeChallengeMethod:O??void 0,oauthCallbackUri:B});Z.searchParams.set("state",F);let T=i.authorizationUrl(Z.toString());return Response.redirect(T,302)},handleOAuthCallback:async(d)=>{let _=kh(new URL(d.url)),v=_.searchParams.get("code"),h=_.searchParams.get("state"),D=_.searchParams.get("error"),g=h?wut(h):null;if(D){let O=_.searchParams.get("error_description")??"Authorization failed";if(g?.redirectUri){let Z=kh(new URL(g.redirectUri));if(Z.searchParams.set("error",D),Z.searchParams.set("error_description",O),g.clientState)Z.searchParams.set("state",g.clientState);return Response.redirect(Z.toString(),302)}return Response.json({error:D,error_description:O},{status:400})}if(!v||!g)return Response.json({error:"invalid_request",error_description:"Missing code or state"},{status:400});try{let O=g.oauthCallbackUri??kh(new URL(`${_.origin}/oauth/callback`)).toString(),Z={code:v,redirect_uri:O},B=await i.exchangeCode(Z),y={accessToken:B.access_token,tokenType:B.token_type,refreshToken:B.refresh_token,expiresIn:B.expires_in,scope:B.scope,codeChallenge:g.codeChallenge,codeChallengeMethod:g.codeChallengeMethod},F=$ut(y),T=kh(new URL(g.redirectUri));if(T.searchParams.set("code",F),g.clientState)T.searchParams.set("state",g.clientState);return Response.redirect(T.toString(),302)}catch(O){console.error("OAuth callback error:",O);let Z=kh(new URL(g.redirectUri));if(Z.searchParams.set("error","server_error"),Z.searchParams.set("error_description","Failed to exchange authorization code"),g.clientState)Z.searchParams.set("state",g.clientState);return Response.redirect(Z.toString(),302)}},handleToken:async(d)=>{try{let _=d.headers.get("content-type")??"",v;if(_.includes("application/x-www-form-urlencoded")){let y=await d.formData();v=Object.fromEntries(y.entries())}else{let y=await d.json();if(typeof y!=="object"||y===null||Array.isArray(y))return Response.json({error:"invalid_request",error_description:"Request body must be a JSON object"},{status:400});v=y}let{code:h,code_verifier:D,grant_type:g,refresh_token:O}=v;if(g==="refresh_token"){if(typeof O!=="string"||!O)return Response.json({error:"invalid_request",error_description:"refresh_token is required and must be a string"},{status:400});if(!i.refreshToken)return Response.json({error:"unsupported_grant_type",error_description:"refresh_token grant not supported"},{status:400});let y;try{y=await i.refreshToken(O)}catch(T){if(T instanceof C_u)return Response.json({error:T.error,...T.errorDescription?{error_description:T.errorDescription}:{}},{status:400});throw T}let F={access_token:y.access_token,token_type:y.token_type};if(y.refresh_token)F.refresh_token=y.refresh_token;if(y.expires_in!==void 0)F.expires_in=y.expires_in;if(y.scope)F.scope=y.scope;return Response.json(F,{headers:{"Cache-Control":"no-store",Pragma:"no-cache"}})}if(g!=="authorization_code")return Response.json({error:"unsupported_grant_type",error_description:"Only authorization_code and refresh_token supported"},{status:400});if(typeof h!=="string"||!h)return Response.json({error:"invalid_request",error_description:"code is required and must be a string"},{status:400});let Z=wut(h);if(!Z||!Z.accessToken)return Response.json({error:"invalid_grant",error_description:"Invalid or expired code"},{status:400});if(Z.codeChallenge){if(typeof D!=="string"||!D)return Response.json({error:"invalid_grant",error_description:"code_verifier required and must be a string"},{status:400});let y;if(Z.codeChallengeMethod==="S256"){let T=new TextEncoder().encode(D),U=await crypto.subtle.digest("SHA-256",T);y=btoa(String.fromCharCode(...new Uint8Array(U))).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}else y=D;if(y!==Z.codeChallenge)return Response.json({error:"invalid_grant",error_description:"Invalid code_verifier"},{status:400})}let B={access_token:Z.accessToken,token_type:Z.tokenType};if(Z.refreshToken)B.refresh_token=Z.refreshToken;if(Z.expiresIn!==void 0)B.expires_in=Z.expiresIn;if(Z.scope)B.scope=Z.scope;return Response.json(B,{headers:{"Cache-Control":"no-store",Pragma:"no-cache"}})}catch(_){return console.error("Token exchange error:",_),Response.json({error:"server_error",error_description:"Failed to process token request"},{status:500})}},handleClientRegistration:async(d)=>{try{let _=await d.json();if(!_.redirect_uris||_.redirect_uris.length===0)return Response.json({error:"invalid_redirect_uri",error_description:"At least one redirect_uri is required"},{status:400});for(let O of _.redirect_uris)if(!jn4(O))return Response.json({error:"invalid_redirect_uri",error_description:`Invalid redirect URI: ${O}`},{status:400});let v=Eut(32),h=_.token_endpoint_auth_method!=="none"?Eut(32):void 0,D=Math.floor(Date.now()/1000),g={client_id:v,client_secret:h,client_name:_.client_name,redirect_uris:_.redirect_uris,grant_types:_.grant_types??["authorization_code"],response_types:_.response_types??["code"],token_endpoint_auth_method:_.token_endpoint_auth_method??"client_secret_post",scope:_.scope,client_id_issued_at:D,client_secret_expires_at:0};if(i.persistence)await i.persistence.saveClient(g);return new Response(JSON.stringify(g),{status:201,headers:{"Content-Type":"application/json","Cache-Control":"no-store",Pragma:"no-cache"}})}catch(_){return console.error("Client registration error:",_),Response.json({error:"invalid_client_metadata",error_description:"Invalid client registration request"},{status:400})}},createUnauthorizedResponse:(d)=>{let h=`Bearer resource_metadata="${`${kh(new URL(d.url)).origin}/.well-known/oauth-protected-resource`}", scope="*"`;return Response.json({jsonrpc:"2.0",error:{code:-32000,message:"Unauthorized: Authentication required"},id:null},{status:401,headers:{"WWW-Authenticate":h,"Access-Control-Expose-Headers":"WWW-Authenticate"}})},hasAuth:(d)=>d.headers.has("Authorization")}}var C_u,kh=(i)=>{if(!(i.hostname==="localhost"||i.hostname.endsWith(".localhost")||i.hostname==="127.0.0.1"))i.protocol="https:";return i};var M_u=N(()=>{C_u=class C_u extends Error{error;errorDescription;constructor(i="invalid_grant",u){super(u??i);this.name="OAuthInvalidGrantError",this.error=i,this.errorDescription=u}}});import{AsyncLocalStorage as Xn4}from"async_hooks";var _ut,Ms;var q_u=N(()=>{_ut=new Xn4,Ms={getStore:()=>{return _ut.getStore()},run:(i,u,...t)=>_ut.run(i,u,...t)}});var hut="SELF",jxi=(i)=>{return typeof i==="object"&&i!==null&&"handler"in i&&"events"in i&&typeof i.handler==="function"&&Array.isArray(i.events)},Dut=(i)=>{return typeof i==="object"&&i!==null&&"handler"in i&&"events"in i&&typeof i.handler==="function"&&Array.isArray(i.events)},vut="::",gut=(i)=>{let u=i.indexOf(vut);if(u===-1)return null;let t=i.substring(0,u),f=i.substring(u+vut.length);return[t,f]},Jn4=(i)=>{if(!i.startsWith("cron/"))return null;let u=i.substring(5),t=u.indexOf("/");if(t===-1)return null;let f=u.substring(0,t),l=u.substring(t+1);return[f,l]},Nut=(i)=>{if(jxi(i))return[];return Object.keys(i)},Kn4=(i,u)=>{if(jxi(i))return i.events;let t=i[u];if(!t)return[];if(Dut(t))return t.events;return Object.keys(t)},kxi=(i,u,t)=>{if(i===hut){if(!t)return console.warn("[Event] SELF binding used but no connectionId available"),null;return t}let f=u[i];if(!R_u(f))return console.warn(`[Event] Binding "${i}" not found in state`),null;return f.value},Sn4=(i,u,t)=>{let f=u;if(jxi(i)){let c=[];for(let E of i.events){let $=gut(E);if(!$){console.warn(`[Event] Global handler event "${E}" must be prefixed with BINDING:: (e.g., "SELF::${E}" or "DATABASE::${E}")`);continue}let[w,d]=$,_=kxi(w,f,t);if(!_)continue;c.push({eventType:d,publisher:_})}return c}let l=[];for(let c of Nut(i)){let E=kxi(c,f,t);if(!E)continue;let $=Kn4(i,c);for(let w of $)l.push({eventType:w,publisher:E})}return l},Yn4=(i)=>{let u=new Map;for(let t of i){let f=t.source,l=u.get(f)||[];l.push(t),u.set(f,l)}return u},Wn4=(i)=>{let u=new Map;for(let t of i){let f=t.type,l=u.get(f)||[];l.push(t),u.set(f,l)}return u},Ln4=(i)=>{let u={},t={},f=!1,l=0,c=[];for(let E of i){if(E.results)Object.assign(t,E.results);if(E.success===!1){if(f=!0,E.error)c.push(E.error)}if(E.processedCount!==void 0)l+=E.processedCount}if(Object.keys(t).length>0)u.results=t;if(u.success=!f,c.length>0)u.error=c.join("; ");if(l>0)u.processedCount=l;return u},Qn4=async(i,u,t,f,l)=>{let c=f;if(jxi(i)){let _=new Set;for(let h of i.events){let D=gut(h);if(!D)continue;let[g,O]=D,Z=kxi(g,c,l);if(!Z)continue;_.add(`${Z}:${O}`)}let v=u.filter((h)=>{let D=`${h.source}:${h.type}`;return _.has(D)});if(v.length===0)return{success:!0};try{return await i.handler({events:v},t)}catch(h){return{success:!1,error:h instanceof Error?h.message:String(h)}}}let E=new Map;for(let _ of Nut(i)){let v=kxi(_,c,l);if(v)E.set(v,_)}let $=Yn4(u),w=[];for(let[_,v]of $){let h=E.get(_);if(!h)continue;let D=i[h];if(!D)continue;if(Dut(D)){w.push((async()=>{try{return await D.handler({events:v},t)}catch(Z){let B={};for(let y of v)B[y.id]={success:!1,error:Z instanceof Error?Z.message:String(Z)};return{results:B}}})());continue}let g=D,O=Wn4(v);for(let[Z,B]of O){let y=g[Z];if(!y)continue;w.push((async()=>{try{let F=await y({events:B},t),T={};for(let U of B)T[U.id]=F;return{results:T}}catch(F){let T={};for(let U of B)T[U.id]={success:!1,error:F instanceof Error?F.message:String(F)};return{results:T}}})())}}let d=await Promise.all(w);if(d.length===0)return{success:!0};return Ln4(d)},Out;var V_u=N(()=>{db();Out={subscriptions:Sn4,execute:Qn4,parseCron:Jn4}});function zn4(i,u){let t=Gxi("self",{meshUrl:i,token:u});return HQ.forConnection(t)}function Hn4(i,u){switch(u.type){case"cron":return{automation_id:i,type:"cron",cron_expression:u.cron};case"event":return{automation_id:i,type:"event",connection_id:u.connectionId,event_type:u.eventType,params:u.params};case"webhook":return{automation_id:i,type:"webhook"}}}function Zut(i,u,t){return async(f)=>{if(!i)throw Error("createAgent: missing meshUrl in MESH_REQUEST_CONTEXT");let l=zn4(i,u),E=(await l.COLLECTION_VIRTUAL_MCP_LIST({where:{operator:"and",conditions:[{field:["title"],operator:"eq",value:f.name}]},limit:1})).items.find((_)=>_.title===f.name);if(E)return{id:E.id,automations:[],automationIds:[],alreadyExisted:!0};let $=f.tools&&f.tools.length>0?f.tools.map((_)=>({connection_id:_.connectionId,selected_tools:_.tools??null,selected_resources:null,selected_prompts:null})):t?[{connection_id:t,selected_tools:null,selected_resources:null,selected_prompts:null}]:[],{item:w}=await l.COLLECTION_VIRTUAL_MCP_CREATE({data:{title:f.name,description:f.description,metadata:f.instructions?{instructions:f.instructions}:void 0,connections:$}}),d=[];for(let _ of f.automations??[]){let v=await l.AUTOMATION_CREATE({name:_.name,virtual_mcp_id:w.id,messages:_.messages,models:_.models,tools:_.tools,active:_.active??!0}),h=[];for(let D of _.triggers??[])try{let g=await l.AUTOMATION_TRIGGER_ADD(Hn4(v.id,D));h.push({type:D.type,ok:!0,id:g.id,webhook:g.webhook??void 0})}catch(g){h.push({type:D.type,ok:!1,error:g instanceof Error?g.message:String(g)})}d.push({id:v.id,name:_.name,triggers:h})}return{id:w.id,automations:d,automationIds:d.map((_)=>_.id),alreadyExisted:!1}}}var r_u=N(()=>{db();nxi()});import{z as n6}from"zod";function a8(i){return{...i,execute:(u)=>{let t=qs(u.runtimeContext);return i.execute({...u,runtimeContext:t},t)}}}var qs=(i)=>{let u=Ms.getStore();if(!u){if(i)return i;throw Error("Missing context, did you forget to call State.bind?")}return u},But=(i)=>{let u=i.runtimeContext.env.MESH_REQUEST_CONTEXT;return{connectionId:u?.connectionId,meshUrl:u?.meshUrl,token:u?.token}},bn4=({events:i,configuration:{state:u,scopes:t,onChange:f,onInstall:l}={}}={})=>{let c=u?iut(n6.toJSONSchema(u)):{type:"object",properties:{}};return[...f||l||i?[a8({id:"ON_MCP_CONFIGURATION",description:"MCP Configuration On Change",inputSchema:n6.object({state:u??n6.unknown(),scopes:n6.array(n6.string()).describe("Array of scopes in format 'KEY::SCOPE' (e.g., 'GMAIL::GetCurrentUser')"),firstRun:n6.boolean().optional().describe("True on the first configuration save for this connection \u2014 fires onInstall."),vault:n6.object({baseUrl:n6.string(),org:n6.string(),subjectConnectionId:n6.string(),token:n6.string()}).optional()}),outputSchema:n6.object({}),execute:async(E)=>{let $=E.context.state,w=E.context.vault;if(await f?.(E.runtimeContext.env,{state:$,scopes:E.context.scopes,vault:w}),l&&E.context.firstRun){let{meshUrl:d,token:_,connectionId:v}=But(E);await l(E.runtimeContext.env,{createAgent:Zut(d,_,v),vault:w})}return Promise.resolve({})}})]:[],...i?.handlers?[a8({id:"ON_EVENTS",description:"Receive and process CloudEvents from the event bus. Returns per-event or batch results.",inputSchema:j3i,outputSchema:X3i,execute:async(E)=>{let $=E.runtimeContext.env,w=$.MESH_REQUEST_CONTEXT?.state,{connectionId:d}=But(E);return Out.execute(i.handlers,E.context.events,$,w,d)}})]:[],a8({id:"MCP_CONFIGURATION",description:"MCP Configuration",inputSchema:n6.object({}),outputSchema:n6.object({stateSchema:n6.unknown(),scopes:n6.array(n6.string()).optional()}),execute:()=>{return Promise.resolve({stateSchema:c,scopes:[...t??[]]})}})]},yut=(i)=>{let u=null,t=null,f=null,l=!1,c=()=>{if(!l)console.warn("[runtime] Passing factory functions to tools/prompts/resources is deprecated. Pass createTool()/createPrompt()/createResource() instances directly."),l=!0},E=(D)=>typeof D==="object"&&D!==null&&(("id"in D)||("name"in D)||("uri"in D));async function $(D,g){if(!D)return[];return(await Promise.all(D.flatMap(async(O)=>{if(E(O))return[O];c();let Z=await O(g);if(Array.isArray(Z))return Z;return[Z]}))).flat()}let w=async(D)=>{if(u)return u;if(t)return t;return t=(async()=>{try{let g;if(typeof i.tools==="function")c(),g=await i.tools(D);else g=await $(i.tools,D);g.push(...bn4({...i}));let O;if(typeof i.prompts==="function")c(),O=await i.prompts(D);else O=await $(i.prompts,D);let Z;if(typeof i.resources==="function")c(),Z=await i.resources(D);else Z=await $(i.resources,D);let B={tools:g,prompts:O,resources:Z};return u=B,B}catch(g){throw t=null,g}})(),t},d=(D,g)=>{for(let O of g.tools)D.registerTool(O.id,{_meta:O._meta,title:O.title,description:O.description,annotations:O.annotations,inputSchema:O.inputSchema&&"shape"in O.inputSchema?O.inputSchema:n6.object({}),outputSchema:O.outputSchema&&typeof O.outputSchema==="object"&&"shape"in O.outputSchema?O.outputSchema:void 0},async(Z)=>{let B=qs(),y=await O.execute({context:Z,runtimeContext:B},B);if(y!=null&&typeof y==="object"&&"content"in y&&Array.isArray(y.content)&&y.content.every((F)=>F!=null&&typeof F==="object"&&("type"in F)&&typeof F.type==="string"))return y;return{structuredContent:y,content:[{type:"text",text:JSON.stringify(y)}]}});for(let O of g.prompts)D.registerPrompt(O.name,{title:O.title,description:O.description,argsSchema:O.argsSchema?O.argsSchema:n6.object({}).shape},async(Z)=>{let B=qs();return await O.execute({args:Z,runtimeContext:B},B)});for(let O of g.resources)D.resource(O.name,O.uri,{description:O.description,mimeType:O.mimeType},async(Z)=>{let B=qs(),y=await O.read({uri:Z,runtimeContext:B},B),F=y._meta??void 0;if(y.text!==void 0)return{contents:[{uri:y.uri,mimeType:y.mimeType,text:y.text,...F!==void 0?{_meta:F}:{}}]};else if(y.blob!==void 0)return{contents:[{uri:y.uri,mimeType:y.mimeType,blob:y.blob,...F!==void 0?{_meta:F}:{}}]};return{contents:[{uri:y.uri,mimeType:y.mimeType,text:""}]}})},_=async(D)=>{await i.before?.(D);let{instructions:g,...O}=i.serverInfo??{},Z=new jD({...O,name:O.name??"@deco/mcp-api",version:O.version??"1.0.0"},{capabilities:{tools:{},prompts:{},resources:{}},jsonSchemaValidator:k1,...g&&{instructions:g}}),B=await w(D);d(Z,B);let y="tools/list",F=Z.server._requestHandlers,T=F.get(y);if(T)F.set(y,async(U,I)=>{if(!f)f=await T(U,I);return f});return{server:Z,...B}};return{fetch:async(D,g)=>{let{server:O}=await _(g),Z=new y3;await O.connect(Z);let B=()=>{try{Z.close?.()}catch{}try{O.close?.()}catch{}};try{let y=await Z.handleRequest(D),F=y.headers.get("content-type");if(!(F?.includes("text/event-stream")||F?.includes("application/json-rpc"))||!y.body)return B(),y;let{readable:U,writable:I}=new TransformStream;return y.body.pipeTo(I).catch(()=>{}).finally(B),new Response(U,{status:y.status,statusText:y.statusText,headers:y.headers})}catch(y){throw B(),y}},callTool:async({toolCallId:D,toolCallInput:g})=>{let O=Ms.getStore();if(!O)throw Error("Missing state, did you forget to call State.bind?");let Z=O?.env,{tools:B}=await w(Z),F=B.find((U)=>U.id===D)?.execute;if(!F)throw Error(`Tool ${D} not found or does not have an execute function`);let T=qs();return F({context:g,runtimeContext:T},T)}}};var Xxi=N(()=>{$uu();mE();Kq();Sz();db();V_u();q_u();r_u();V_u();r_u()});import{decodeJwt as Fut}from"jose";var Rn4=({env:i,server:u,url:t})=>{i.SELF=new Proxy({},{get:(f,l)=>{if(l==="toJSON")return null;return async(c)=>{return await u.callTool({toolCallId:l,toolCallInput:c})}}}),i.IS_LOCAL=(t?.startsWith("http://localhost")||t?.startsWith("http://127.0.0.1"))??!1},Tut=(i)=>()=>{return{...i??{}}},Cn4=({env:i,server:u,tokenOrContext:t,url:f,authToken:l})=>{let c=i,E=l?l.split(" ")[1]:void 0,$;if(typeof t==="string"){let w=Fut(t),d=w.metadata??{};$={authorization:E,state:w.state??d.state??{},token:t,meshUrl:w.meshUrl??d.meshUrl,connectionId:w.connectionId??d.connectionId,organizationId:w.organizationId??d.organizationId,organizationName:w.organizationName??d.organizationName,organizationSlug:w.organizationSlug??d.organizationSlug,ensureAuthenticated:Tut(w.user??w.sub)}}else if(typeof t==="object"){$=t;let w=Fut(t.token),d=w.metadata??{},_=w.appName;$.authorization??=E,$.callerApp=_,$.connectionId??=w.connectionId??d.connectionId,$.organizationId??=w.organizationId??d.organizationId,$.organizationName??=w.organizationName??d.organizationName,$.organizationSlug??=w.organizationSlug??d.organizationSlug,$.ensureAuthenticated=Tut(w.user??w.sub)}else $={state:{},authorization:E,token:void 0,meshUrl:void 0,connectionId:void 0,ensureAuthenticated:()=>{throw Error("Unauthorized")}};return c.MESH_REQUEST_CONTEXT=$,$.state=uut($),Rn4({env:c,server:u,url:f}),c},Mn4,Uut=(i)=>{let u=yut(i),t=i.cors??Mn4,f=i.oauth,l=f?dut(f):null,c=async(E,$,w)=>{let d=new URL(E.url);if(l){if(d.pathname==="/.well-known/oauth-protected-resource"||d.pathname==="/mcp/.well-known/oauth-protected-resource")return l.handleProtectedResourceMetadata(E);if(d.pathname==="/.well-known/oauth-authorization-server")return l.handleAuthorizationServerMetadata(E);if(d.pathname==="/authorize")return l.handleAuthorize(E);if(d.pathname==="/oauth/callback")return l.handleOAuthCallback(E);if(d.pathname==="/token"&&E.method==="POST")return l.handleToken(E);if((d.pathname==="/register"||d.pathname==="/mcp/register")&&E.method==="POST")return l.handleClientRegistration(E)}if(d.pathname==="/mcp"){if(E.method==="GET")return new Response("Method not allowed",{status:405});if(l&&!l.hasAuth(E)){let _=E.clone();try{if((await _.json())?.method!=="tools/list")return l.createUnauthorizedResponse(E)}catch{return l.createUnauthorizedResponse(E)}}return u.fetch(E,$,w)}if(d.pathname.startsWith("/mcp/call-tool")){let _=d.pathname.split("/").pop();if(!_)return new Response("Not found",{status:404});let v=await E.json(),h=await u.callTool({toolCallId:_,toolCallInput:v});return new Response(JSON.stringify(h),{headers:{"Content-Type":"application/json"}})}return i.fetch?.(E,$,w)||new Response("Not found",{status:404})};return{fetch:async(E,$,w)=>{if(new URL(E.url).pathname==="/_healthcheck")return new Response("OK",{status:200});if(t!==!1&&E.method==="OPTIONS")return fut(E,t??{});let d=Cn4({authToken:E.headers.get("authorization")??null,env:{...process.env,...$},server:u,tokenOrContext:E.headers.get("x-mesh-token")??void 0,url:E.url}),_=await Ms.run({req:E,env:d,ctx:w},async()=>await c(E,d,w));if(t!==!1)return lut(_,E,t??{});return _}}};var Put=N(()=>{db();cut();M_u();M_u();q_u();Xxi();Xxi();db();nxi();Mn4={origin:(i)=>{if(i.includes("localhost")||i.includes("127.0.0.1"))return i;return i},credentials:!0,allowMethods:["GET","POST","PUT","DELETE","OPTIONS"],allowHeaders:["Content-Type","Authorization","mcp-protocol-version"]}});import{z as m_u}from"zod";function rn4(i,u){let t=a8({id:"COLLECTION_REGISTRY_APP_LIST",description:"List public registry items",annotations:{readOnlyHint:!0,idempotentHint:!0},inputSchema:IH,outputSchema:AH,execute:async({context:$})=>{let w={limit:$.limit,offset:$.offset,cursor:$.cursor,tags:$.tags,categories:$.categories,where:$.where},d=`${u}:${JSON.stringify(w)}`,_=xut.get(d);if(_)return _;let v=await i.listPublic(u,w);return xut.set(d,v),v}}),f=a8({id:"COLLECTION_REGISTRY_APP_GET",description:"Get a public registry item by ID or name",annotations:{readOnlyHint:!0,idempotentHint:!0},inputSchema:Fh,outputSchema:sJ,execute:async({context:$})=>{let w=$.id??$.name;if(!w)return{item:null};let d=await i.findByIdOrName(u,w);if(d&&d.is_public)return{item:d};return{item:null}}}),l=a8({id:"COLLECTION_REGISTRY_APP_VERSIONS",description:"Get available versions of a public registry item",annotations:{readOnlyHint:!0,idempotentHint:!0},inputSchema:Fh,outputSchema:m_u.object({versions:m_u.array(sJ.shape.item)}),execute:async({context:$})=>{let w=$.id??$.name;if(!w)return{versions:[]};let d=await i.findByIdOrName(u,w);if(d&&d.is_public)return{versions:[d]};return{versions:[]}}}),c=a8({id:"COLLECTION_REGISTRY_APP_SEARCH",description:"Search public registry items returning minimal data (id, title, tags, categories, is_public). Use this instead of LIST when you need to find items efficiently without loading full details.",annotations:{readOnlyHint:!0,idempotentHint:!0},inputSchema:aUi,outputSchema:oUi,execute:async({context:$})=>{return await i.search(u,$,{publicOnly:!0})}}),E=a8({id:"COLLECTION_REGISTRY_APP_FILTERS",description:"Get available tags and categories for public registry items",annotations:{readOnlyHint:!0,idempotentHint:!0},inputSchema:m_u.object({}),outputSchema:nH,execute:async()=>{return await i.getFilters(u,{publicOnly:!0})}});return[t,c,f,l,E]}function Iut(i){let u=i.db,t=new bL(u);return async(f)=>{let l=f.req.param("orgSlug")??f.req.param("org");if(!l)return f.json({error:"Organization not found"},404);let c=await u.selectFrom("organization").select(["id","slug","name"]).where("slug","=",l).executeTakeFirst();if(!c)return f.json({error:"Organization not found"},404);let E=rn4(t,c.id),$=Uut({tools:E}),w=new URL(f.req.url),d=f.req.path.indexOf("/registry"),_=d>=0?f.req.path.slice(d+9):"",v=new URL(_||"/",w.origin);w.searchParams.forEach((g,O)=>{v.searchParams.set(O,g)});let h=new Request(v.toString(),{method:f.req.method,headers:f.req.raw.headers,body:f.req.method!=="GET"&&f.req.method!=="HEAD"?f.req.raw.body:void 0}),D={organizationId:c.id,db:u,MESH_REQUEST_CONTEXT:{},MESH_APP_DEPLOYMENT_ID:"public-registry",IS_LOCAL:!1};return await $.fetch(h,D,f)}}var qn4=3600000,Vn4=500,xut;var Aut=N(()=>{Put();Xxi();voi();Ol();xut=$b({ttlMs:qn4,maxSize:Vn4,updateRecencyOnGet:!0})});import{sql as mn4}from"kysely";import{randomUUID as nut}from"crypto";import{z as en4}from"zod";async function on4(i){let u=new Date().toISOString(),t=nut(),f=U4.SELF(i.organizationId),l="registry.publish_request.created",c={requestId:i.request.id,requestedId:i.request.requested_id,title:i.request.title,status:i.request.status,createdAt:i.request.created_at,requester:{name:i.request.requester_name,email:i.request.requester_email}};await i.db.insertInto("events").values({id:t,organization_id:i.organizationId,type:"registry.publish_request.created",source:f,specversion:"1.0",subject:i.request.id,time:u,datacontenttype:"application/json",dataschema:null,data:JSON.stringify(c),cron:null,status:"pending",attempts:0,last_error:null,next_retry_at:null,created_at:u,updated_at:u}).execute();let E=await i.db.selectFrom("event_subscriptions").select(["id"]).where("organization_id","=",i.organizationId).where("enabled","=",1).where("event_type","=","registry.publish_request.created").where(($)=>$.or([$("publisher","is",null),$("publisher","=",f)])).execute();if(E.length>0)await i.db.insertInto("event_deliveries").values(E.map(($)=>({id:nut(),event_id:t,subscription_id:$.id,status:"pending",attempts:0,last_error:null,delivered_at:null,next_retry_at:null,created_at:u}))).execute();try{await mn4`SELECT pg_notify('mesh_events', ${t})`.execute(i.db)}catch{}}async function sn4(i,u){let f=(await i.selectFrom("organization").select(["id"]).where("id","=",u).execute())[0];if(f?.id)return f.id;return(await i.selectFrom("organization").select(["id"]).where("slug","=",u).execute())[0]?.id??null}async function pn4(i,u){let t=await i.selectFrom("virtual_mcp_plugin_configs").innerJoin("connections","connections.id","virtual_mcp_plugin_configs.virtual_mcp_id").select(["virtual_mcp_plugin_configs.settings as settings"]).where("connections.organization_id","=",u).where("virtual_mcp_plugin_configs.plugin_id","=",pJ).execute();for(let f of t){let l=f.settings,c=typeof l==="string"?(()=>{try{return JSON.parse(l)}catch{return{}}})():l??{};if(c.acceptPublishRequests===!0){let E=c.rateLimitWindow==="minute"?"minute":"hour",$=c.rateLimitMax,w=typeof $==="number"&&Number.isFinite($)&&$>=1?Math.floor($):kut;return{acceptPublishRequests:!0,requireApiToken:c.requireApiToken===!0,rateLimitEnabled:c.rateLimitEnabled===void 0?Gut:c.rateLimitEnabled===!0,rateLimitWindow:E,rateLimitMax:w}}}return{acceptPublishRequests:!1,requireApiToken:!1,rateLimitEnabled:Gut,rateLimitWindow:an4,rateLimitMax:kut}}async function iG4(i,u,t){let f=t==="minute"?60000:3600000,l=new Date(Date.now()-f).toISOString(),c=await i.selectFrom("private_registry_publish_request").select((E)=>E.fn.countAll().as("count")).where("organization_id","=",u).where("created_at",">=",l).executeTakeFirst();return Number(c?.count??0)}async function uG4(i,u,t,f){let l=await i.selectFrom("private_registry_item").select(["id","title"]).where("organization_id","=",u).where((c)=>c.or([c("id","=",t),c("title","=",f)])).executeTakeFirst();return l?{id:String(l.id),title:String(l.title)}:null}function jut(i){let{db:u,db:t}=i,f=new RL(t),l=new CL(t);return async(c)=>{let E=c.req.param("orgRef")??c.req.param("org");if(!E)return c.json({error:"Organization not found"},404);let $=await sn4(u,E);if(!$)return c.json({error:"Organization not found"},404);let w=await pn4(u,$);if(!w.acceptPublishRequests)return c.json({error:"Publish requests are not enabled for this registry."},403);if(w.requireApiToken){let D=c.req.header("Authorization"),g=D?.startsWith("Bearer ")?D.slice(7).trim():null;if(!g)return c.json({error:"API key required. Use Authorization: Bearer <key>"},401);if(!await l.validate($,g))return c.json({error:"Invalid API key"},401)}if(w.rateLimitEnabled){if(await iG4(t,$,w.rateLimitWindow)>=w.rateLimitMax)return c.json({error:"Too many publish requests. Please try again later.",retryAfterSeconds:w.rateLimitWindow==="minute"?60:3600},429)}let d;try{d=await c.req.json()}catch{return c.json({error:"Invalid JSON body"},400)}let _=aC0.safeParse(d);if(!_.success)return c.json({error:"Invalid publish request payload",details:en4.treeifyError(_.error)},400);let v=await uG4(t,$,_.data.data.id,_.data.data.title);if(v)return c.json({error:"A registry item with the same id or title already exists. Please use a different name/id.",conflict:v},409);let h=await f.createOrUpdate({organization_id:$,requested_id:_.data.data.id,title:_.data.data.title,description:_.data.data.description??null,_meta:_.data.data._meta,server:_.data.data.server,requester_name:_.data.requester?.name??null,requester_email:_.data.requester?.email??null});try{await on4({db:u,organizationId:$,request:h})}catch(D){console.warn("[private-registry] failed to emit publish-request event:",D)}return ou.capture({distinctId:_.data.requester?.email??`org:${$}`,event:"registry_publish_request_submitted",groups:{organization:$},properties:{organization_id:$,request_id:h.id,requested_id:h.requested_id,title:_.data.data.title,requester_email:_.data.requester?.email??null}}),c.json({id:h.id,requested_id:h.requested_id,status:h.status},201)}}var Gut=!0,an4="hour",kut=100;var Xut=N(()=>{e4();wf();GH();hoi();Doi();Ol()});var Jut={};zi(Jut,{createPublishRequestHandler:()=>jut,createPublicMCPHandler:()=>Iut});var Kut=N(()=>{Aut();Xut()});var F1u={};zi(F1u,{watchHandler:()=>Qut,getProxyDispatch:()=>cG4,createApp:()=>DG4});import{readFileSync as tG4}from"fs";import{PrometheusSerializer as fG4}from"@opentelemetry/exporter-prometheus";import{DBOS as Vs}from"@dbos-inc/dbos-sdk";import{oAuthDiscoveryMetadata as dG4,oAuthProtectedResourceMetadata as _G4}from"better-auth/plugins";async function lG4(i){let u=i.connect(),t;try{t=await Promise.race([u,Yut(Sut)])}catch{return u.then((f)=>f.release(!0)).catch(()=>{}),!1}try{return await Promise.race([t.query("SELECT 1"),Yut(Sut)]),t.release(),!0}catch{return t.release(!0),!1}}function Yut(i){return new Promise((u,t)=>setTimeout(()=>t(Error("pg health-check timeout")),i))}function cG4(){if(!e_u)throw Error("getProxyDispatch() called before createApp() or without NATS \u2014 proxy dispatch unavailable");return e_u}async function EG4(i,u){let{items:t}=await i.storage.connections.list(u,{where:{field:["connection_url"],operator:"like",value:`${Ot0}%`},limit:1}),f=t[0];if(!f?.configuration_state)return null;return f.configuration_state.project_locator}function $G4(i){let u=new URLSearchParams;if(i){let[t,f]=i.split("/");if(t)u.set("workspace_hint",t);if(f)u.set("project_hint",f)}else u.set("auto_personal","true");return u.set("force_new","true"),u}async function DG4(i={}){let u=i.database??qt(),t=!1;A6.stop().catch((M)=>{console.error("[SSEHub] Error stopping previous broadcast (HMR cleanup):",M)});let f,l,c=new G_u,E,$,w,d,_,v=null;if(i.disableNats)E=k_u(),f={get:async()=>null,set:async()=>{},invalidate:async()=>{},teardown:()=>{}},l=new ea,$={start:async()=>{},broadcast:()=>{},publishControlFrame:()=>{},stop:async()=>{}},_=void 0,w={init:async()=>{},pump:(M)=>{(async()=>{let e=M.getReader();try{while(!0){let{done:Ki}=await e.read();if(Ki)break}}catch{}finally{e.releaseLock()}})()},publishRawChunk:async()=>!1,publishDone:async()=>!1,createTailStream:async()=>null,purge:()=>{},teardown:()=>{}};else{v=sp0();let M=Fu().natsCredsPath,e;if(M)try{e=tG4(M,"utf8")}catch(Qu){console.error(`[app] failed to read NATS_CREDS at ${M}; connecting anonymously`,Qu)}v.init(Fu().natsUrls,e?{creds:e}:void 0);let Ki=yoi()?new _ei({getJetStream:()=>v.getJetStream()}):null;Ki?.init().catch(()=>{}),f=Ki;let Li=new Dlu({getJetStream:()=>v.getJetStream()});Li.init().catch(()=>{}),l=Li,E=k_u({getConnection:()=>v.getConnection()}),$=new j_u({getConnection:()=>v.getConnection()}),w=new X_u({getConnection:()=>v.getConnection(),getJetStream:()=>v.getJetStream()}),d=$it({getConnection:()=>v.getConnection()}),_=vit({getConnection:()=>v.getConnection()});let oi=hit({getConnection:()=>v.getConnection()}),iu=$;$={start:(Qu)=>iu.start(Qu),broadcast:(Qu)=>iu.broadcast(Qu),publishControlFrame:(Qu,ht)=>{oi.publishControlFrame(Qu,ht).catch((X4)=>{console.warn("[TunnelControl] publishControlFrame failed (non-critical):",X4)})},stop:()=>iu.stop()},TV0(v),v.onReady(()=>{Ki?.init().catch((Qu)=>{console.error("[McpListCache] Deferred init failed:",Qu)}),Li.init().catch((Qu)=>{console.error("[ConnectionCircuitStore] Deferred init failed:",Qu)}),E.start(),m_0(()=>v.getConnection()),w.init().catch((Qu)=>{console.warn("[Decopilot] StreamBuffer init failed (late-join disabled):",Qu)})})}if(_b)await _b();vei(f),glu(l);let D={storage:new eL(u.db),sseHub:A6},g=new K_u(D),O=new ar(u.db),Z=new S_u(O);Z.start(),$.start((M)=>{Jdi(M),g.execute({type:"CANCEL",taskId:M}).catch((e)=>{console.error("[Decopilot] CancelBroadcast execute failed:",e)})}).catch((M)=>{console.error("[Decopilot] CancelBroadcast start failed:",M)}),v?.onReady(()=>{$.start().catch((M)=>{console.error("[CancelBroadcast] Deferred start failed:",M)})}),w.init().catch((M)=>{console.warn("[Decopilot] StreamBuffer init failed, attach/late-join disabled:",M)}),_b=async()=>{await g.stopAll(),g.dispose(),Z.dispose(),$.stop().catch(()=>{}),w.teardown(),f?.teardown(),c.teardown(),E.teardown(),e_0(),l.teardown(),vei(null),glu(null)};let B=new Hu;if(B.use("*",_ri({enabled:(M)=>TW(M,"debug")==="1"})),B.use("*",SLi),B.use("/*",uf0({origin:(M)=>{if(M.includes("localhost")||M.includes("127.0.0.1"))return M;return M},credentials:!0,allowMethods:["GET","POST","PUT","DELETE","OPTIONS"],allowHeaders:["Content-Type","Authorization","mcp-protocol-version"],exposeHeaders:["WWW-Authenticate"]})),B.use("*",async(M,e)=>{if(await e(),M.req.path.includes("/files/"))return;if(M.req.path.includes("/fs/")&&M.req.path.endsWith("/read"))return;M.header("X-Frame-Options","DENY"),M.header("Content-Security-Policy","frame-ancestors 'none'")}),!Fu().noTui)B.use("*",Kit());B.use("*",async(M,e)=>{if(await e(),TC(M.req.path))return;if(M.res.status>=500){let Li=await M.res.clone().text();console.error(`[5xx Response] ${M.req.method} ${M.req.path} - ${M.res.status}:`,Li)}}),B.get(Yw.HEALTH,(M)=>{if(t)return M.json({status:"shutting_down"},503);return M.json({status:"ok"})}),B.get(Yw.HEALTH_LIVE,(M)=>{return M.json({status:"ok"})}),B.get(Yw.HEALTH_READY,async(M)=>{if(t)return M.json({status:"shutting_down"},503);let e={};if(e.postgres={status:await lG4(u.pool)?"up":"down"},v)e.nats=v.isConnected()?{status:"up"}:{status:"down"};else e.nats={status:"down"};let Ki=e.postgres.status==="up",Li=Ki?200:503;return M.json({status:Ki?"ready":"not_ready",services:e},Li)}),B.get(Yw.METRICS,async(M)=>{try{let e=await QLi.collect(),Ki=wG4.serialize(e.resourceMetrics);return M.text(Ki,200,{"Content-Type":"text/plain; version=0.0.4; charset=utf-8"})}catch(e){return console.error("Failed to collect metrics:",e),M.text("# Error collecting metrics",500)}}),B.route("/api/config",Cp0),B.route("/api/auth/custom",RV0),B.all("/api/auth/*",async(M)=>{return await w4.handler(M.req.raw)});let y=T70();y.use("/.well-known/oauth-protected-resource/mcp/:connectionId",tK),y.use("/mcp/:connectionId/.well-known/oauth-protected-resource",tK),B.route("/",y),B.get("/.well-known/oauth-protected-resource/api/:org/mcp/:connectionId",Pe),B.route("/",I70()),B.use("/oauth-proxy/:connectionId/*",tK),B.all("/oauth-proxy/:connectionId/*",Wut);let F=async(M)=>{let Ki=await vG4()(M.req.raw),Li=await Ki.json();return Response.json(Li,Ki)};B.use("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",tK),B.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",F);let T=async(M)=>{let Ki=await hG4()(M.req.raw),Li=await Ki.json();return Response.json(Li,Ki)};B.get("/.well-known/oauth-authorization-server/*/:gateway?/:connectionId?",T);let U=ZV0({ttlMs:120000}),I=await $70({db:u.db,auth:w4,encryption:{key:Fu().encryptionKey},observability:{tracer:z2,meter:Mt},modelListCache:c,providerKeyCache:E,memberRoleCache:U,linkStatusProbe:d,publishLinkControlFrame:(M,e)=>$.publishControlFrame(M,e)});H9.set(I);let j=new wZ(Fu().encryptionKey);dau({db:u.db,baseUrl:M5()});let A=T$i(u.db),G=new Rr(u.db),q=jit({db:u.db});wlu({storage:A,meshContextFactory:q}),Htu({meshContextFactory:q,deps:{runRegistry:g,cancelBroadcast:$,streamBuffer:w,sseHub:A6},prepareLinkWorkFn:ne0,workPublisher:_}),Ytu({dispatchRunFn:Ie0,meshContextFactory:q,deps:{runRegistry:g,cancelBroadcast:$,streamBuffer:w,sseHub:A6}});let S=new eL(u.db);my0({getJetStream:()=>v?.getJetStream()??null,getJetStreamManager:async()=>{let M=v?.getConnection();return M?await Lut.jetstreamManager(M):null},messageParts:S.messageParts(),resolveRun:async(M)=>{let e=await u.db.selectFrom("threads").select(["organization_id","created_by","message_storage_version","status","run_fence_token","title"]).where("id","=",M).executeTakeFirst();return e?{orgId:e.organization_id,createdBy:e.created_by,version:e.message_storage_version??1,status:e.status,runFenceToken:e.run_fence_token,title:e.title??null}:null},completeRunIfNotCompleted:async(M,e)=>{let Ki=await S.completeRunIfNotCompleted(M,e);return Pxi(A6,e,M,Ki),Ki},markRunRequiresAction:async(M,e)=>{let Ki=await S.requiresActionIfInProgress(M,e);return Pxi(A6,e,M,Ki),Ki},markRunFailed:async(M,e,Ki,Li)=>{let oi=await S.markRunFailed(M,e,Ki,Li);return Pxi(A6,e,M,oi),oi},persistTitle:(M,e,Ki)=>S.update(M,e,{title:Ki}),onTitleUpdated:async({runId:M,orgId:e,title:Ki})=>{let Li=await S.get(M,e).catch(()=>null);A6.emit(e,j_(M,Li?.status??"in_progress",{title:Ki,virtualMcpId:Li?.virtual_mcp_id??void 0,createdBy:Li?.created_by,triggerId:Li?.trigger_id,branch:Li?.branch??null,createdAt:Li?.created_at,updatedAt:Li?.updated_at}))},bumpProgress:async({runId:M,orgId:e})=>{await S.bumpProgress(M,e)},recordCompleted:async({runId:M,orgId:e,distinctId:Ki,usage:Li})=>{ou.capture({distinctId:Ki,event:"chat_message_completed",groups:{organization:e},properties:{organization_id:e,thread_id:M,transport:"projector",input_tokens:Li.inputTokens,output_tokens:Li.outputTokens,total_tokens:Li.totalTokens}})},recordFailed:async({runId:M,orgId:e,distinctId:Ki,reason:Li,kind:oi})=>{ou.capture({distinctId:Ki,event:"chat_message_failed",groups:{organization:e},properties:{organization_id:e,thread_id:M,transport:"projector",error_category:oi,error_message:Li}})},purgeRun:async(M)=>{w.purge(M)}}),gk0({meshContextFactory:q,systemDatabaseUrl:qLi(Fu().databaseUrl,Fu().databasePgSsl),streamBuffer:w}),Git(),_au();let Y=async(M,e,Ki)=>{let Li=await A.findById(M,e);if(!Li)throw Error("Automation not found");return vlu({automationId:Li.id,organizationId:Li.organization_id,triggerId:null})},V=new RH(A,({automation:M,trigger:e,contextMessages:Ki,idempotencyKey:Li})=>ra({automationId:M.id,organizationId:M.organization_id,triggerId:e.id,contextMessages:Ki},{idempotencyKey:Li})),L=[pd(),pS(),_D()];for(let M of L)Axi(M).then(()=>{}).catch((e)=>console.error("[monitoring] Retention cleanup failed:",e));let $i=()=>u.db.deleteFrom("apikey").where("expiresAt","<",new Date).execute().then(()=>{}).catch((M)=>console.error("[auth] Expired API key cleanup failed:",M));$i(),setInterval($i,86400000).unref(),B.use("*",async(M,e)=>{if(JLi(M.req.path))return e();let Ki={measure:async(oi,iu)=>{ud(M,oi);try{return await iu()}finally{Vw(M,oi)}}},Li=await H9.create(M.req.raw,{timings:Ki});Li.automationRunner=Y,M.set("meshContext",Li);try{await e()}finally{let oi=Li.pendingRevalidations;if(oi.length>0)Promise.race([Promise.allSettled(oi),new Promise((Qu)=>setTimeout(Qu,30000))]).catch((Qu)=>console.error("[mesh] revalidation cleanup error:",Qu))}}),B.use("/api/:org/decopilot/*",fK),B.use("/api/:org/v1/*",fK),B.use("/api/:org/files/*",fK),B.use("*",async(M,e)=>{let Ki=M.req.path;if(Ki.startsWith("/api/org-sso/")||Ki.startsWith("/api/auth/")||Ki.startsWith("/api/tools/management")||Ki.startsWith("/oauth-proxy/"))return e();let Li=M.get("meshContext");if(!Li?.organization?.id||!Li?.auth?.user?.id)return e();if(!(await Li.storage.orgSsoConfig.getByOrgId(Li.organization.id))?.enforced)return e();if(!await Li.storage.orgSsoSessions.isValid(Li.auth.user.id,Li.organization.id))return M.json({error:"SSO authentication required for this organization"},403);return e()});let wi=new Hu;wi.use("*",Qd({mountPath:"/api/org-sso"})),wi.route("/",_Pi()),B.route("/api/org-sso",wi),B.get("/api/tools/management",(M)=>{return M.json({tools:hri,grouped:oO()})}),B.use("/mcp/*",async(M,e)=>{ud(M,"mcp");try{return await e()}finally{Vw(M,"mcp")}});let ci=async(M,e)=>{let Ki=M.var.meshContext;if(!Ki.auth.user?.id&&!Ki.auth.apiKey?.id){let Li=new URL(M.req.url);return M.res=new Response(null,{status:401,headers:{"WWW-Authenticate":`Bearer realm="mcp",resource_metadata="${Li.origin}${Li.pathname}/.well-known/oauth-protected-resource"`}})}return await e()};if(B.use("/mcp/:connectionId?",ci),B.use("/mcp/gateway/:virtualMcpId?",ci),B.use("/mcp/virtual-mcp/:virtualMcpId?",ci),B.use("/mcp/self",ci),X_()){let{mountDevRoutes:M}=(ait(),zxi(eit));M(B,ci)}let ii=new Hu;ii.use("*",Qd({mountPath:"/mcp"})),ii.route("/",oyi()),B.route("/mcp",ii);let m=new Hu;m.use("*",Qd({mountPath:"/mcp/self"})),m.route("/",Zxi()),B.route("/mcp/self",m);let Oi=new Hu;Oi.use("*",Qd({mountPath:"/mcp"})),Oi.route("/",iFi()),B.route("/mcp",Oi),B.use("/api/:org/models/*",async(M,e)=>{ud(M,"llm_models");try{return await e()}finally{Vw(M,"llm_models")}});let _i=H3u({cancelBroadcast:$,streamBuffer:w,runRegistry:g,linkStatusProbe:d});if(B.route("/api",_i),v!=null)e_u=dit({getConnection:()=>v?.getConnection()??null});B.route("/api",Gp0()),B.get("/api/links/me",async(M)=>{try{let e=M.req.header("authorization")??"",Ki=/^Bearer\s+(.+)$/i.exec(e),Li=null;if(Ki){let iu=(Ki[1]??"").trim();Li=await Ip0(iu,w4.api)}else Li=M.get("meshContext")?.auth?.user?.id??null;if(!Li)return M.json({error:"unauthorized"},401);let oi=d?await d(Li):{online:!1,capabilities:[]};if(!oi.online)return M.json(null);return M.json({hostname:oi.hostname,cliVersion:oi.cliVersion})}catch(e){return console.error("[links/me] presence probe failed; reporting offline:",e instanceof Error?e.message:String(e)),M.json(null)}}),B.use("/api/:org/files/*",fK),B.route("/api",rp0);let Ii=new Hu;Ii.use("*",Qd({mountPath:"/api"})),Ii.route("/",Bxi()),B.route("/api",Ii),B.route("/api",Hp0);let Vi=new Hu;Vi.use("*",Qd({mountPath:"/api"})),Vi.route("/",yxi({tokenStorage:G,automationEventDispatcher:V})),B.route("/api",Vi);let Wi=new Mr(u.db),ri=new Hu;ri.use("*",Qd({mountPath:"/api"})),ri.route("/",QPi()),B.route("/api",ri),B.route("/api/deco-sites",qe0()),B.route("/api/deco-apps",Sp0());let gi=new Hu;gi.use("*",Qd({mountPath:"/api/deco-sites"})),gi.route("/",HPi()),B.route("/api/deco-sites",gi);let Ji=new Hu;Ji.use("*",Qd({mountPath:"/api/vm-events"})),Ji.route("/",Jp0()),B.route("/api/vm-events",Ji);let{createPublishRequestHandler:ni,createPublicMCPHandler:Di}=await Promise.resolve().then(() => (Kut(),Jut)),di={db:u.db,vault:{encrypt:(M)=>j.encrypt(M),decrypt:(M)=>j.decrypt(M)}},fi=ni(di),ji=Di(di);B.use("/org/:orgRef/registry/publish-request",tK),B.post("/org/:orgRef/registry/publish-request",fi),B.use("/org/:orgSlug/registry/*",tK),B.all("/org/:orgSlug/registry/*",ji),B.post("/api/:org/registry/publish-request",fi),B.all("/api/:org/registry/*",ji);let a=Pp0({kvStorage:Wi,runRegistry:g,streamBuffer:w,sseHub:A6,cancelBroadcast:$,tokenStorage:G,automationEventDispatcher:V,mountDevAssets:X_(),mcpAuth:ci,oauthProxyHandler:Wut,watchHandler:Qut,betterAuthProtectedResourceHandler:F,getNatsConnection:()=>v?.getConnection()??null});return B.route("/api/:org",a),B.notFound((M)=>{return M.json({error:"Not Found",path:M.req.path},404)}),B.onError(Je0),Object.assign(B,{markShuttingDown:()=>{t=!0},shutdown:async()=>{if(console.log("[shutdown] Stopping workers..."),await Promise.allSettled([A6.stop(),_b?Promise.resolve(_b()).finally(()=>{_b=null}):Promise.resolve()]),v)await v.drain().catch((M)=>console.error("[shutdown] NATS drain error:",M));console.log("[shutdown] Flushing telemetry..."),await C3().catch((M)=>console.error("[shutdown] Telemetry flush error:",M)),console.log("[shutdown] Closing database..."),await R2(u).catch((M)=>console.error("[shutdown] Database close error:",M)),console.log("[shutdown] Cleanup complete.")},initDbos:async()=>{await Vs.registerQueue(N_,{partitionQueue:!0,concurrency:clu,minPollingIntervalMs:Elu}),await Vs.registerQueue(tv,{partitionQueue:!0,concurrency:ztu}),await Vs.registerQueue(E7,{partitionQueue:!0,concurrency:Stu}),await Vs.registerQueue(jO,{partitionQueue:!0,concurrency:Dk0}),await M3u(A),await Promise.allSettled(["automations-gate","automations-global"].map((M)=>Vs.deleteQueue(M))),await $lu(u.pool),zc0().catch((M)=>{console.error("[studio-pack-backfill] failed:",M)}),vau().catch((M)=>{console.error("[org-fs] public-sets boot sync kick failed:",M)})}})}var Lut,Sut=5000,e_u=null,_b=null,Wut=async(i)=>{let u=i.req.param("connectionId");if(!u)return i.json({error:"Missing connectionId"},400);let t=i.req.path.split("/").filter(Boolean),f=t[t.length-1],l=i.get("meshContext");if(!l)l=await H9.create(i.req.raw),i.set("meshContext",l);let c=i.req.param("org")?l.organization?.id:void 0,E=await l.storage.connections.findById(u,c);if(!E?.connection_url)return i.json({error:"Connection not found"},404);let $=await JQ(E.connection_url),w,d=new URL(E.connection_url);if($.ok)w=(await $.json()).authorization_servers?.[0];if(!w)w=d.origin;let _=await xe(w);if(!_.ok)return i.json({error:"Failed to get auth server metadata"},502);let v=await _.json(),h;if(f==="authorize")h=v.authorization_endpoint;else if(f==="token")h=v.token_endpoint;else if(f==="register")h=v.registration_endpoint;if(!h)return i.json({error:`Unknown OAuth endpoint: ${f}`},404);let D=new URL(h),g=new URL(i.req.url);if(D.search=g.search,f==="authorize"){let A=D.searchParams.get("redirect_uri");if(A){let G=Fu().baseUrl??g.origin;try{let q=new URL(A),S=new URL(G);if(!(q.origin===S.origin||q.hostname==="localhost"))return i.json({error:"invalid_request",error_description:"redirect_uri is not allowed"},400)}catch{return i.json({error:"invalid_request",error_description:"redirect_uri is malformed"},400)}D.searchParams.set("redirect_uri",A)}if(D.searchParams.has("resource"))D.searchParams.set("resource",E.connection_url);if(Zt0(E.connection_url))try{let G=await EG4(l,E.organization_id),q=$G4(G);for(let[S,Y]of q)D.searchParams.set(S,Y)}catch(G){console.warn("[oauth-proxy] Failed to get smart OAuth params, proceeding without:",G)}return i.redirect(D.toString(),302)}let O={Accept:i.req.header("Accept")||"application/json"},Z=i.req.header("Content-Type");if(Z)O["Content-Type"]=Z;let B=i.req.header("Authorization");if(B)O.Authorization=B;let y,F=null,T=null;if(i.req.method!=="GET"&&i.req.method!=="HEAD")if(f==="token"&&Z?.includes("application/x-www-form-urlencoded")){if(B?.toLowerCase().startsWith("basic "))try{let Y=atob(B.slice(6).trim()),V=Y.indexOf(":");if(V!==-1){let L=decodeURIComponent(Y.slice(0,V)),$i=decodeURIComponent(Y.slice(V+1));F=L||null,T=$i||null}}catch{}let A=await i.req.formData();if(A.has("resource"))A.set("resource",E.connection_url);let G=A.get("client_id"),q=A.get("client_secret");if(typeof G==="string"&&G)F=G;if(typeof q==="string"&&q)T=q;let S=new URLSearchParams;for(let[Y,V]of A.entries())S.append(Y,V.toString());y=S.toString()}else if(f==="register"&&Z?.toLowerCase().includes("application/json")){let A=await l.db.selectFrom("organization").select(["id","slug","name"]).where("id","=",E.organization_id).executeTakeFirst(),G=await i.req.text(),q={};try{q=G?JSON.parse(G):{}}catch{y=G}let S=typeof q==="object"&&q!==null&&!Array.isArray(q);if(y===void 0&&!S)y=G;if(y===void 0){let Y=q,V=Y.metadata&&typeof Y.metadata==="object"?Y.metadata:{};Y.metadata={...V,organization_id:E.organization_id,...A?.slug?{organization_slug:A.slug}:{},...A?.name?{organization_name:A.name}:{}},y=JSON.stringify(Y),O["Content-Type"]="application/json"}}else y=i.req.raw.body??void 0;let U=await fetch(D.toString(),{method:i.req.method,headers:O,body:y,duplex:"half",redirect:"manual"}),I=new Headers,j=["connection","keep-alive","transfer-encoding","content-encoding","content-length"];for(let[A,G]of U.headers.entries())if(!j.includes(A.toLowerCase()))I.set(A,G);if(f==="token"&&U.ok){let A=await U.text();try{let G=JSON.parse(A);if(typeof G.access_token==="string"&&G.access_token){let q=typeof G.expires_in==="number"?new Date(Date.now()+G.expires_in*1000):null,S=null;try{S=await KQ(E.connection_url)??h}catch{S=h}let Y={connectionId:u,accessToken:G.access_token,refreshToken:typeof G.refresh_token==="string"?G.refresh_token:null,scope:typeof G.scope==="string"?G.scope:null,expiresAt:q,clientId:F,clientSecret:T,tokenEndpoint:S};await new q1(l.db,l.vault).upsert(Y)}}catch(G){console.error("[oauth-proxy] failed to persist downstream token:",G)}return new Response(A,{status:U.status,statusText:U.statusText,headers:I})}return new Response(U.body,{status:U.status,statusText:U.statusText,headers:I})},Qut=async(i)=>{let u=i.var.meshContext;if(!(u.auth.user?.id??u.auth.apiKey?.userId))return i.json({error:"Unauthorized"},401);let f=u.organization?.id;if(!f)return i.json({error:"organization id missing"},400);let l=i.req.query("types"),c=l?l.split(",").map(($)=>$.trim()).filter(Boolean):null,E=crypto.randomUUID();return zd(i,async($)=>{if(await $.writeSSE({event:"connected",data:JSON.stringify({listenerId:E,organizationId:f,typePatterns:c,connectedAt:new Date().toISOString()})}),!A6.add({id:E,organizationId:f,typePatterns:c?.length?c:null,push:(_)=>{$.writeSSE({id:_.id,event:_.type,data:JSON.stringify(_)}).catch(()=>{A6.remove(f,E)})}})){await $.writeSSE({event:"error",data:JSON.stringify({error:"Too many connections",message:"SSE connection limit reached. Try again later."})});return}let d=setInterval(()=>{$.writeSSE({event:"keepalive",data:""}).catch(()=>{clearInterval(d)})},30000);await new Promise((_)=>{$.onAbort(()=>{clearInterval(d),A6.remove(f,E),_()})})})},wG4,vG4=()=>_G4(w4),hG4=()=>dG4(w4);var T1u=N(()=>{xt();hau();HE();BW();wf();sf();Oci();tf0();vri();w8();Ue();Ywu();QE();z1();e4();Rwu();Vwu();je0();b3u();u5();d3i();R3u();Ke0();C3u();xp0();kp0();Kp0();m3u();Yp0();syi();Ie();bp0();uFi();O_u();Mp0();mp0();N_u();g_u();y4i();iEi();pp0();ew();z$i();Vr();Olu();iit();tit();Eit();wit();_it();Dit();xit();Iit();Joi();Loi();kit();_Ei();Y_u();Sw();q3u();va();Jtu();_Ei();L3u();toi();foi();Xit();UW();Sit();hK();Ywu();Xz();Kdi();Lut=k(i7(),1);wG4=new fG4});var Rut={};zi(Rut,{resolveClientDir:()=>FG4,resolveAssetPathWithTraversalCheck:()=>but,isPathWithinDirectory:()=>Hut,createAssetHandler:()=>TG4});import{resolve as rs,dirname as gG4,join as NG4,extname as OG4,basename as ZG4,sep as zut}from"path";function BG4(i,u){if(i===u||ZG4(i)==="index.html")return{"Cache-Control":"no-cache"};if(i.includes(`${zut}assets${zut}`))return{"Cache-Control":"public, max-age=31536000, immutable"};return{}}function Hut(i,u){let t=rs(u),f=rs(i);return f===t||f.startsWith(t+"/")}function but({requestPath:i,clientDir:u}){let t=i.startsWith("/")?i.slice(1):i,f=rs(u,t);if(!Hut(f,u))return null;return f}function FG4(i,u="../client"){let t=new URL(i),f=gG4(t.pathname);return rs(f,u)}function TG4(i={}){let{env:u="production",clientDir:t=yG4,isServerPath:f=()=>!1}=i;if(u==="development")return async function(c){return null};return async function(c){if(c.method!=="GET")return null;let E=new URL(c.url),$;try{$=decodeURIComponent(E.pathname)}catch{return null}if(f($))return null;let w=but({requestPath:$,clientDir:t});if(!w)return null;let d=NG4(w,"index.html"),_=rs(t,"index.html"),v=c.headers.get("accept"),D=v?.includes("text/html")||v?.includes("*/*")&&["",".html"].includes(OG4(w))?[d,_]:[];for(let g of[w,...D])try{let O=Bun.file(g);if(await O.exists())return new Response(O,{headers:BG4(g,_)})}catch{}if($.includes("/assets/"))return new Response("Not Found",{status:404,headers:{"Cache-Control":"no-store"}});return null}}var yG4="./dist/client";var Cut=()=>{};var Mut={};zi(Mut,{tryUpgradePreviewWs:()=>GG4,tryHandlePreviewHttp:()=>nG4,previewWebSocketHandler:()=>kG4,parsePreviewBaseDomain:()=>AG4,isPreviewWsData:()=>Jxi,extractHandleFromHost:()=>a_u});function xG4(i){if(i.method!=="GET")return!1;return(i.headers.get("accept")??"").includes("text/html")}function IG4(){return new Response(PG4,{status:503,headers:{"content-type":"text/html; charset=utf-8","cache-control":"no-store","retry-after":"1","access-control-allow-origin":"*"}})}function AG4(i){if(!i||i.trim()==="")return null;let u=i.includes("{handle}")?i.replace("{handle}","__handle__"):i,t;try{t=new URL(u)}catch{return null}let f=t.hostname;if(i.includes("{handle}")){let l=f.indexOf(".");if(l<=0||l===f.length-1)return null;return f.slice(l+1)}return f}function a_u(i,u){if(!i||!u)return null;let t=i.indexOf(":"),f=(t>=0?i.slice(0,t):i).toLowerCase(),c=`.${u.toLowerCase().replace(/^\.+|\.+$/g,"")}`;if(!f.endsWith(c))return null;let E=f.slice(0,f.length-c.length);if(!E||E.includes("."))return null;return E}async function nG4(i,u){let t=a_u(i.headers.get("host"),u.baseDomain);if(!t)return null;let f=await u.getRunner();if(!f)return es(503,"preview proxy not configured");let l=await f.proxyPreviewRequest(t,i);if(l.headers.get(OJ)&&xG4(i))return IG4();return l.headers.delete(OJ),l}function es(i,u){return new Response(JSON.stringify({error:u}),{status:i,headers:{"content-type":"application/json","access-control-allow-origin":"*"}})}function Jxi(i){return typeof i==="object"&&i!==null&&i.kind==="preview"}async function GG4(i,u,t){if((i.headers.get("upgrade")??"").toLowerCase()!=="websocket")return null;let f=a_u(i.headers.get("host"),t.baseDomain);if(!f)return null;let l=await t.getRunner();if(!l)return es(503,"preview proxy not configured");let c=await l.resolvePreviewUpstreamUrl(f);if(!c)return es(404,"sandbox not found");let E=new URL(i.url);if(E.pathname.startsWith("/_sandbox")||E.pathname.startsWith("/_decopilot_vm"))return es(404,"not found");let $=`${c.replace(/^http/,"ws")}${E.pathname}${E.search}`,w=i.headers.get("sec-websocket-protocol"),d=w?w.split(",").map((h)=>h.trim()).filter(Boolean):[],_={kind:"preview",upstreamUrl:$,upstreamProtocols:d,pending:[],upstream:null,closed:!1};if(!u.upgrade(i,{data:_}))return es(426,"upgrade failed");return}function ms(i,u,t,f){if(u.closed)return;u.closed=!0;try{i.close(t,f)}catch{}try{u.upstream?.close()}catch{}}var UG4=256,PG4='<!DOCTYPE html><html><head><meta charset="utf-8"><title>Connecting\u2026</title><style>body{font-family:system-ui,sans-serif;display:flex;align-items:center;justify-content:center;min-height:100vh;margin:0;background:#fafafa;color:#555}div{text-align:center;max-width:420px;padding:24px}h3{margin:0 0 8px}p{margin:0;font-size:14px;color:#999;line-height:1.5}</style></head><body><div><h3>Connecting to sandbox\u2026</h3><p>Waiting for the sandbox to come online. This page refreshes automatically.</p></div><script>setTimeout(function(){window.location.reload()},1500)</script></body></html>',kG4;var qut=N(()=>{O1u();kG4={open(i){let u=i.data;if(!Jxi(u))return;let t;try{t=u.upstreamProtocols.length>0?new WebSocket(u.upstreamUrl,u.upstreamProtocols):new WebSocket(u.upstreamUrl)}catch(f){console.warn(`[preview-ws] failed to dial upstream ${u.upstreamUrl}: ${f instanceof Error?f.message:String(f)}`),ms(i,u,1011,"upstream connect failed");return}t.binaryType="arraybuffer",u.upstream=t,t.addEventListener("open",()=>{while(u.pending.length>0){let f=u.pending.shift();if(f!==void 0)t.send(f)}}),t.addEventListener("message",(f)=>{if(u.closed)return;i.send(f.data)}),t.addEventListener("close",(f)=>{ms(i,u,f.code||1000,f.reason||"")}),t.addEventListener("error",()=>{ms(i,u,1011,"upstream error")})},message(i,u){let t=i.data;if(!Jxi(t))return;let f=t.upstream;if(f&&f.readyState===WebSocket.OPEN){f.send(u);return}if(t.pending.length>=UG4){ms(i,t,1011,"preview ws backlog overflow");return}t.pending.push(u)},close(i){let u=i.data;if(!Jxi(u))return;ms(i,u,1000,"")}}});var rut={};zi(rut,{bootstrapDevLinkSession:()=>QG4});import{existsSync as jG4}from"fs";import{chmod as XG4,mkdir as JG4,rename as KG4,writeFile as SG4}from"fs/promises";import{dirname as YG4,join as Vut}from"path";function WG4(i){return Vut(i,"dev-link")}function LG4(i){let u=process.env.DEV_LINK_SESSION_PATH;if(u&&u.trim()!=="")return u;return Vut(WG4(i),"session.json")}async function QG4(i,u){let t=LG4(i),f=qt().db,l=Gd()?await Ca():await f.selectFrom("user").select(["id","email","name"]).orderBy("createdAt","desc").executeTakeFirst();if(!l?.id)return null;if(jG4(t))try{let d=await Bun.file(t).json(),_=d.user?.sub,v=d.accessToken;if(_===l.id&&typeof v==="string"){if(await w4.api.verifyApiKey({body:{key:v}}).then((D)=>D?.valid===!0).catch(()=>!1))return{path:t,userSub:_}}}catch{}let c=null;try{c=await w4.api.createApiKey({body:{name:"dev-link (auto-minted by bun run dev)",userId:l.id,permissions:{"*":["*"]},expiresIn:2592000,rateLimitEnabled:!1}})}catch(w){return console.warn("[dev-link] failed to mint API key:",w instanceof Error?w.message:String(w)),null}if(!c?.key)return null;let E={target:u,clientId:"dev-link",user:{sub:l.id,...l.email?{email:l.email}:{},...l.name?{name:l.name}:{}},accessToken:c.key,createdAt:new Date().toISOString()};await JG4(YG4(t),{recursive:!0});let $=`${t}.tmp`;return await SG4($,JSON.stringify(E,null,2),{mode:384}),await XG4($,384),await KG4($,t),{path:t,userSub:l.id}}var mut=N(()=>{QE();w8();Pg()});var lk4={};import{existsSync as VG4}from"fs";function put(i,u){if(!u)return i;let t=new URL(i);if(!t.searchParams.has("sslmode"))t.searchParams.set("sslmode","verify-full");return t.toString()}function aG4(i){let u=new Headers(i.headers);for(let[t,f]of Object.entries(eG4))u.set(t,f);return new Response(i.body,{status:i.status,statusText:i.statusText,headers:u})}async function fk4(i){let u;try{u=await zG4.create({systemDatabaseUrl:put(I3.databaseUrl,I3.databasePgSsl),systemDatabaseSchemaName:"dbos"});let t=await u.listWorkflows({status:"PENDING",queueName:tv,executorId:i,loadInput:!1,loadOutput:!1});if(t.length===0){console.log(`[shutdown] no in-flight thread-gate gates to hand off (executor ${i})`);return}let f=t.map((l)=>l.workflowID);await u.resumeWorkflows(f,{queueName:tv}),console.log(`[shutdown] re-enqueued ${f.length} in-flight thread-gate gate(s) for re-adoption by a live executor (from ${i}):`,f)}catch(t){console.error("[shutdown] thread-gate handoff failed:",t)}finally{await u?.destroy().catch(()=>{})}}async function Sxi(i){if(sut)return;sut=!0,console.log(`
84677
+ Use sentence case for the title. No markdown fences.`;var vp0=N(()=>{Cf();ha()});function VI4(i){return i&&typeof i==="object"&&!Array.isArray(i)?i:null}function rI4(i){if(!i||i.includes(".."))return!1;return qI4.test(i)}function hp0(i){let u=typeof i.__resolveType==="string"?i.__resolveType:null;if(!u||!rI4(u))return null;let t=VI4(i.props);if(t)return{resolveType:u,payload:{props:t}};let{__resolveType:f,...l}=i;return{resolveType:u,payload:l}}function Dp0(i,u){return`${i.replace(/\/+$/,"")}/deco/invoke/${encodeURIComponent(u)}`}var qI4;var gp0=N(()=>{qI4=/^[\w./@-]+$/});function Np0(i,u){let t=i?.githubRepo;if(!t?.owner||!t?.name)return null;if(!t.connectionId)return t;if(!u.includes(t.connectionId))return null;return t}async function Op0(i,u,t,f){if(!f.connectionId)throw new lb("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let l=i.organization?.id;if(!l)throw new lb(ZE);await Az({ctx:i,connectionId:f.connectionId,organizationId:l,forceRefresh:!0,onLegacyMintError:(_)=>{let v=_ instanceof Error?_.message:ZE;throw new lb(v)}});let{cloneUrl:c,gitUserName:E,gitUserEmail:$}=await nz(f.connectionId,f.owner,f.name,i.db,i.vault),w=Txi(i),d=await u.proxyDaemonRequest(t,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{repository:{cloneUrl:c},identity:{userName:E,userEmail:$}},...w?{operator:w}:{}})});if(!d.ok){let _=await d.text().catch(()=>d.statusText);throw Error(`Failed to refresh sandbox git credentials (${d.status}): ${_}`)}}var lb;var Zp0=N(()=>{R9();F_u();Fyi();lb=class lb extends Error{constructor(i){super(i);this.name="GitPushAuthError"}}});function eI4(i){if(!i||i.length>255||i.includes("..")||i.startsWith("/")||i.endsWith("/")||i.endsWith(".lock")||!mI4.test(i))throw Error(`Invalid branch name: ${i}`)}function cb(i){return AbortSignal.any([i.req.raw.signal,AbortSignal.timeout(sI4)])}function Eb(i){let{runner:u}=i.get("vmClaim");if(!u)return i.json({error:"No sandbox runner configured"},503);return u}async function Rc(i,u,t){let f=Eb(i);if(f instanceof Response)return f;let{claimName:l,userId:c,projectRef:E}=i.get("vmClaim"),$=t?.method??"POST",w=null,d=new Headers;if(t?.jsonBody!==void 0)w=t.jsonBody,d.set("content-type","application/json");else if(t?.forwardJsonBody)w=await i.req.text(),d.set("content-type","application/json");let _=t?.signal,v={method:$,headers:d,body:w,..._?{signal:_}:{}},h=async()=>{let D=await f.proxyDaemonRequest(l,u,v);if(t?.map404to410&&D.status===404){try{await D.body?.cancel()}catch{}if(await f.adoptLiveClaim?.({userId:c,projectRef:E},l))D=await f.proxyDaemonRequest(l,u,v);if(D.status===404){try{await D.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",...e8}})}}let g=await D.text(),O=t?.redactRepoDirUnlessDesktop&&f.kind!=="user-desktop"?iA4(g):g,Z=D.headers.get("content-type")??"application/json";return new Response(O,{status:D.status,headers:{"content-type":Z,...e8}})};try{if(_){let D=h();return D.catch(()=>{}),await Promise.race([D,new Promise((O,Z)=>{if(_.aborted)return Z(_.reason);_.addEventListener("abort",()=>Z(_.reason),{once:!0})})])}return await h()}catch(D){let g=D instanceof Error?D.message:String(D);return i.json({error:`Daemon unreachable: ${g}`},502)}}function iA4(i){try{let u=JSON.parse(i);if(u&&typeof u==="object"&&!Array.isArray(u)&&"repoDir"in u)return JSON.stringify({...u,repoDir:null})}catch{}return i}async function yp0(i,u,t,f="GET",l){let c=await i.proxyDaemonRequest(u,t,{method:f,headers:new Headers,body:null});if(c.status===404&&l){try{await c.body?.cancel()}catch{}if(await i.adoptLiveClaim?.(l,u))c=await i.proxyDaemonRequest(u,t,{method:f,headers:new Headers,body:null})}if(c.status===404){try{await c.body?.cancel()}catch{}throw Error("SANDBOX_GONE")}let E=await c.text();if(!c.ok)try{let $=JSON.parse(E);throw Error($.error??`Daemon error (${c.status})`)}catch($){if($ instanceof Error&&$.message!==E)throw $;throw Error(`Daemon error (${c.status})`)}return JSON.parse(E)}function uA4(i){return Fp0.includes(i)}var mI4,aI4=524288,oI4=65536,sI4=1e4,Bp0=2000,pI4,e8,Fp0,Tp0=()=>{let i=new Hu;return i.use("/:virtualMcpId/:branch/*",pI4),i.post("/:virtualMcpId/:branch/write",(u)=>Rc(u,"/_sandbox/write",{forwardJsonBody:!0,signal:cb(u)})),i.post("/:virtualMcpId/:branch/unlink",(u)=>Rc(u,"/_sandbox/unlink",{forwardJsonBody:!0,signal:cb(u)})),i.post("/:virtualMcpId/:branch/mkdir",(u)=>Rc(u,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:cb(u)})),i.post("/:virtualMcpId/:branch/rename",(u)=>Rc(u,"/_sandbox/rename",{forwardJsonBody:!0,signal:cb(u)})),i.post("/:virtualMcpId/:branch/read",(u)=>Rc(u,"/_sandbox/read",{forwardJsonBody:!0,signal:cb(u)})),i.post("/:virtualMcpId/:branch/glob",(u)=>Rc(u,"/_sandbox/glob",{forwardJsonBody:!0,signal:cb(u)})),i.post("/:virtualMcpId/:branch/exec/:script",(u)=>{let t=u.req.param("script");if(!t)return u.json({error:"missing script name"},400);return Rc(u,`/_sandbox/exec/${encodeURIComponent(t)}`)}),i.post("/:virtualMcpId/:branch/exec/:script/kill",(u)=>{let t=u.req.param("script");if(!t)return u.json({error:"missing script name"},400);return Rc(u,`/_sandbox/exec/${encodeURIComponent(t)}/kill`)}),i.get("/:virtualMcpId/:branch/config",(u)=>Rc(u,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDirUnlessDesktop:!0})),i.put("/:virtualMcpId/:branch/config",(u)=>Rc(u,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),i.post("/:virtualMcpId/:branch/setup/:step",async(u)=>{let t=u.req.param("step");if(!t||!uA4(t))return u.json({error:`step must be one of: ${Fp0.join(", ")}`},400);if(t==="start"){let f=u.get("vmClaim");if(f.runner){let l=Bi(u.var.meshContext),c=Oyi(f.virtualMcpMetadata);try{await Byi({ctx:u.var.meshContext,runner:f.runner,handle:f.claimName,orgId:l.id,userId:f.userId,entries:c})}catch(E){let $=E instanceof Error?E.message:String(E);return u.json({error:`Failed to push env to daemon: ${$}`},502)}}}return Rc(u,`/_sandbox/setup/${t}`,{signal:u.req.raw.signal,map404to410:!0})}),i.get("/:virtualMcpId/:branch/events",(u)=>{let t=u.get("vmClaim");if(!t.runner)return zd(u,async(f)=>{await f.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this mesh."})})});return lp0(u,{ctx:u.var.meshContext,claimName:t.claimName,runner:t.runner,virtualMcpId:t.virtualMcpId,branch:t.branch,userId:t.userId,projectRef:t.projectRef,virtualMcpMetadata:t.virtualMcpMetadata})}),i.get("/:virtualMcpId/:branch/git/status",(u)=>Rc(u,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([u.req.raw.signal,AbortSignal.timeout(Bp0)])})),i.post("/:virtualMcpId/:branch/git/status",(u)=>Rc(u,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([u.req.raw.signal,AbortSignal.timeout(Bp0)])})),i.post("/:virtualMcpId/:branch/git/diff",(u)=>Rc(u,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})),i.post("/:virtualMcpId/:branch/git/publish",async(u)=>{let t=Eb(u);if(t instanceof Response)return t;let{claimName:f,virtualMcpMetadata:l,connectionIds:c}=u.get("vmClaim"),E=u.var.meshContext;try{await T_u(E,t,f);let $=Np0(l,c);if($)await Op0(E,t,f,$)}catch($){if($ instanceof lb)return u.json({error:$.message},403,e8);let w=$ instanceof Error?$.message:String($);return u.json({error:w},502,e8)}return Rc(u,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})}),i.post("/:virtualMcpId/:branch/git/discard",(u)=>Rc(u,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0})),i.post("/:virtualMcpId/:branch/git/rebase",async(u)=>{let t=Eb(u);if(t instanceof Response)return t;let{claimName:f}=u.get("vmClaim"),l=u.var.meshContext;try{await T_u(l,t,f)}catch(c){let E=c instanceof Error?c.message:String(c);return u.json({error:E},502,e8)}return Rc(u,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})}),i.post("/:virtualMcpId/:branch/git/suggest-commit",Fw({maxSize:aI4,onError:(u)=>u.json({error:"Payload too large"},413,e8)}),async(u)=>{let t=Eb(u);if(t instanceof Response)return t;let{claimName:f,userId:l,projectRef:c}=u.get("vmClaim"),E=u.var.meshContext;try{let $=await u.req.json().catch(()=>({})),w=$.status,d=$.diff,_=d!=null&&typeof d.diffs==="object"&&d.diffs!==null,[v,h]=wp0(w)&&_?[w,d]:await Promise.all([yp0(t,f,"/_sandbox/git/status","GET",{userId:l,projectRef:c}),yp0(t,f,"/_sandbox/git/diff","GET",{userId:l,projectRef:c})]),D=await _p0(E,v,h);return u.json(D,200,e8)}catch($){let w=$ instanceof Error?$.message:String($);if(w==="SANDBOX_GONE")return u.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,e8);return u.json({error:w},502,e8)}}),i.get("/:virtualMcpId/:branch/preview-fetch",async(u)=>{let t=Eb(u);if(t instanceof Response)return t;let{claimName:f}=u.get("vmClaim"),l=u.req.query("path");if(l!=="/.decofile")return u.json({error:"Path not allowed"},403);let c;try{c=await t.getPreviewUrl(f)}catch{return u.json({error:"Preview not available"},502)}if(!c)return u.json({error:"Preview not available"},502);let E=c.replace(/\/+$/,""),$;try{$=await fetch(`${E}${l}`)}catch{return u.json({error:"Preview unreachable"},502)}let w;try{w=await $.text()}catch{return u.json({error:"Preview unreachable"},502)}return new Response(w,{status:$.status,headers:{"content-type":$.headers.get("content-type")??"application/json"}})}),i.post("/:virtualMcpId/:branch/preview-invoke",Fw({maxSize:oI4,onError:(u)=>u.json({error:"Payload too large"},413)}),async(u)=>{let t=Eb(u);if(t instanceof Response)return t;let{claimName:f}=u.get("vmClaim"),l;try{l=await t.getPreviewUrl(f)}catch{return u.json({error:"Preview not available"},502)}if(!l)return u.json({error:"Preview not available"},502);let c;try{c=await u.req.json()}catch{return u.json({error:"Invalid JSON body"},400)}if(!c||typeof c!=="object"||Array.isArray(c))return u.json({error:"Invalid JSON body"},400);let E=hp0(c);if(!E)return u.json({error:"Invalid or missing __resolveType"},400);let $;try{$=await fetch(Dp0(l,E.resolveType),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(E.payload),signal:AbortSignal.timeout(30000)})}catch{return u.json({error:"Preview unreachable"},502)}let w;try{w=await $.text()}catch{return u.json({error:"Preview unreachable"},502)}return new Response(w,{status:$.status,headers:{"content-type":$.headers.get("content-type")??"application/json"}})}),i};var Up0=N(()=>{sf();bH();hK();tp0();h3();gPi();xz();fp0();cp0();P1u();Iz();vp0();gp0();Zp0();mI4=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;pI4=up0(async(i,u)=>{let t=i.var.meshContext;try{Xi(t)}catch{return i.json({error:"Unauthorized"},401)}let f=Vu(t);if(!f)return i.json({error:"Unauthorized"},401);let l;try{l=Bi(t)}catch{return i.json({error:"Organization scope required"},403)}let c=i.req.param("virtualMcpId"),E=i.req.param("branch");if(!c||!E)return i.json({error:"virtualMcpId and branch are required"},400);try{eI4(E)}catch(h){let D=h instanceof Error?h.message:String(h);return i.json({error:D},400)}let $=await t.storage.virtualMcps.findById(c);if(!$||$.organization_id!==l.id)return i.json({error:"Virtual MCP not found"},404);let w=O8({orgId:l.id,virtualMcpId:c,branch:E}),d=jH({userId:f,projectRef:w},E),_=$.metadata??null,v;try{v=(await N5(t,{userId:f,branch:E,virtualMcpMetadata:_})).provider}catch{v=null}if(!v)return i.json({error:"No sandbox runner found"},404);return i.set("vmClaim",{claimName:d,runner:v,virtualMcpId:c,branch:E,userId:f,projectRef:w,virtualMcpMetadata:_,connectionIds:$.connections?.map((h)=>h.connection_id)??[]}),u()});e8={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};Fp0=["clone","install","start"]});var Pp0=(i)=>{let u=new Hu;if(u.use("*",fK),u.route("/",QPi()),u.route("/",ae0()),u.route("/",Bxi()),u.route("/tools",es0()),u.route("/",Vs0()),u.route("/",js0({kvStorage:i.kvStorage})),u.route("/",Gs0()),u.route("/fs",Hs0({getConnection:i.getNatsConnection})),u.route("/sandbox",Tp0()),u.route("/",Rs0()),u.route("/deco-sites",HPi()),u.route("/sso",_Pi()),u.route("/",yxi({tokenStorage:i.tokenStorage,automationEventDispatcher:i.automationEventDispatcher})),u.route("/webhooks",He0()),i.mountDevAssets)u.route("/dev-assets",bPi({orgFromPath:!0}));return u.use("/mcp/:connectionId?",i.mcpAuth),u.use("/mcp/:connectionId/ui-resource",i.mcpAuth),u.use("/mcp/gateway/:virtualMcpId?",i.mcpAuth),u.use("/mcp/virtual-mcp/:virtualMcpId?",i.mcpAuth),u.use("/mcp/self",i.mcpAuth),u.route("/",U70()),u.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",i.betterAuthProtectedResourceHandler),u.route("/mcp",oyi()),u.route("/mcp/self",Zxi()),u.route("/mcp",iFi()),u.all("/oauth-proxy/:connectionId/*",i.oauthProxyHandler),u.get("/watch",i.watchHandler),u};var xp0=N(()=>{sf();C3u();be0();m3u();RPi();oe0();b3u();ks0();Xs0();bs0();Ie();Vwu();uFi();g_u();Cs0();rs0();N_u();as0();O_u();syi();Up0()});async function Ip0(i,u){let t=new Headers({authorization:`Bearer ${i}`,"X-MCP-Session-Auth":"true"}),f=await u.getMcpSession({headers:t}).catch(()=>null);if(f?.userId)return f.userId;let l=await u.verifyApiKey({body:{key:i}}).catch(()=>null);if(l?.valid&&l.key?.userId)return l.key.userId;return null}function I_u(i){try{i?.clear?.()}catch{}}async function Ap0({accountJwt:i,accountSigningKey:u,expiresAt:t,permissions:f,userId:l,allowedConnectionTypes:c=["WEBSOCKET"]}){let E=Vhu(i),$=nAi(E.sub),w=Hb(new TextEncoder().encode(u)),d=sp();try{let _=await pp(l,d,$,{pub:{allow:f.publish.allow},sub:{allow:f.subscribe.allow},allowed_connection_types:c},{algorithm:Vc.v2,exp:Math.floor(t.getTime()/1000),signer:w});return new TextDecoder().decode(iii(_,d))}finally{I_u(d),I_u(w),I_u($)}}var np0=N(()=>{KAi()});function tA4(i){return/^wss?:\/\//i.test(i.trim())?["WEBSOCKET"]:["STANDARD","WEBSOCKET"]}function Gp0(){let i=new Hu;return i.post("/links/session",async(u)=>{let f=u.get("meshContext").auth?.user?.id;if(!f)return u.json({error:"Unauthorized"},401);let l=Fu();if(!l.natsTunnelPublicEnabled)return u.json(A_u(),503);if(!l.natsPublicUrl)return u.json(A_u(),503);if(!l.natsAccountJwt||!l.natsAccountSigningKey){if(!l.localMode)return u.json(A_u(),503)}let c=E_(f),E;if(l.natsAccountJwt&&l.natsAccountSigningKey){let $=new Date(Date.now()+l.natsTunnelSessionTtlSeconds*1000);E=await Ap0({accountJwt:l.natsAccountJwt,accountSigningKey:l.natsAccountSigningKey,expiresAt:$,permissions:xMu(c),userId:f,allowedConnectionTypes:tA4(l.natsPublicUrl)})}return u.json(IMu({publicUrl:l.natsPublicUrl,userId:f,ttlSeconds:l.natsTunnelSessionTtlSeconds,credentials:E}))}),i}var A_u=()=>({error:"link session unavailable"});var kp0=N(()=>{sf();xt();jzi();np0()});async function cA4(i,u){try{return!await i.alive(u)}catch(t){return console.warn(`[vm-events] alive probe failed for ${u}; assuming alive: ${t instanceof Error?t.message:String(t)}`),!1}}async function EA4(i){let{ctx:u,runner:t,claimName:f,userId:l,projectRef:c,sandboxProviderKind:E}=i;try{await t.delete(f)}catch($){console.warn(`[vm-events] runner.delete failed for ${f}: ${$ instanceof Error?$.message:String($)}`)}try{await new $g(u.db).delete({userId:l,projectRef:c},E)}catch($){console.warn(`[vm-events] sandbox_runner_state delete failed for ${l}/${c}/${E}: ${$ instanceof Error?$.message:String($)}`)}}async function $A4(i){let{stream:u,claimName:t,runner:f,signal:l}=i;return new Promise((c)=>{let E=!1,$=!1,w=null,d=(h)=>{if(E)return;E=!0,clearTimeout(_),l.removeEventListener("abort",v),w?.unsubscribe(),c(h)},_=setTimeout(()=>{if($||E)return;u.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"claim-never-created",message:"Sandbox claim was never created. The SANDBOX_START call may have failed earlier \u2014 check the start error."})}).catch(()=>{}),d(!1)},fA4),v=()=>d(!1);l.addEventListener("abort",v,{once:!0}),w=La(f,t,(h)=>{if(E)return;if(h.kind!=="claiming")$=!0;if(u.writeSSE({event:"phase",data:JSON.stringify(h)}).catch(()=>{}),h.kind==="ready")d(!0);else if(h.kind==="failed")d(!1)})})}async function wA4(i){let{stream:u,runner:t,claimName:f,signal:l}=i,c=Date.now(),E=null;while(!l.aborted){let w=null;try{w=await t.proxyDaemonRequest(f,"/_sandbox/events",{method:"GET",headers:new Headers({accept:"text/event-stream"}),body:null,signal:l})}catch(d){if(l.aborted)return;if(Date.now()-c<jp0){await Zt(Xp0,{signal:l}).catch(()=>{});continue}let _=d instanceof Error?d.message:String(d);await u.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:`Upstream daemon SSE error: ${_}`})}).catch(()=>{});return}if(w.status===404){try{await w.body?.cancel()}catch{}if(Date.now()-c<jp0){await Zt(Xp0,{signal:l}).catch(()=>{});continue}await u.writeSSE({event:"gone",data:""}).catch(()=>{});return}if(!w.ok||!w.body){try{await w.body?.cancel()}catch{}await u.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:`Upstream daemon SSE failed (${w.status}).`})}).catch(()=>{});return}E=w;break}if(!E||!E.body)return;let $=E.body.getReader();try{while(!l.aborted){let{value:w,done:d}=await $.read();if(d)break;if(w)await u.write(w)}}catch{}finally{try{$.releaseLock()}catch{}}}var fA4=90000,lA4=15000,Jp0=()=>{let i=new Hu;return i.get("/",async(u)=>{let t=u.var.meshContext;try{Xi(t)}catch{return u.json({error:"Unauthorized"},401)}let f=Vu(t);if(!f)return u.json({error:"Unauthorized"},401);let l;try{l=Bi(t)}catch{return u.json({error:"Organization scope required"},403)}let c=u.req.query("virtualMcpId"),E=u.req.query("branch");if(!c||!E)return u.json({error:"virtualMcpId and branch are required"},400);let $=await t.storage.virtualMcps.findById(c);if(!$||$.organization_id!==l.id)return u.json({error:"Virtual MCP not found"},404);let w=O8({orgId:l.id,virtualMcpId:c,branch:E}),d=jH({userId:f,projectRef:w},E),_=$.metadata??null,v,h=null,D=null;try{let Z=await N5(t,{userId:f,branch:E,virtualMcpMetadata:_});v=Z.provider,h=Z.kind}catch(Z){D=Z instanceof Error?Z:Error(String(Z)),v=null}let g=h&&y8(T6(_),f,E,h),O=!!g&&g.sandboxHandle===d;if(!v)return zd(u,async(Z)=>{await Z.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:D?.message??"No sandbox runner configured on this mesh."})})});return u.header("X-Accel-Buffering","no"),u.header("Content-Encoding","identity"),zd(u,async(Z)=>{let B=new AbortController,y=setInterval(()=>{Z.writeSSE({event:"keepalive",data:""}).catch(()=>{clearInterval(y)})},lA4);Z.onAbort(()=>{B.abort(),clearInterval(y)});try{if(O&&h){if(await cA4(v,d)){await EA4({ctx:t,runner:v,claimName:d,userId:f,projectRef:w,sandboxProviderKind:h}),await Z.writeSSE({event:"gone",data:""}).catch(()=>{});return}}if(!await $A4({stream:Z,claimName:d,runner:v,signal:B.signal})||B.signal.aborted)return;await wA4({stream:Z,runner:v,claimName:d,signal:B.signal})}finally{clearInterval(y)}})}),i},jp0=60000,Xp0=500;var Kp0=N(()=>{sf();hK();h3();Bl();gPi();Qa();xz();Vdi();Id()});function _A4(i){return i.filter((u)=>u.vendors?.alias).map((u)=>({name:u.name,title:u.title,description:u.description,logo:u.logo,category:u.category,vendor:{alias:u.vendors.alias,url:u.vendors.url}}))}async function vA4(i,u){let t=await fetch(`${i}/rest/v1/apps?select=name,title,description,logo,category,vendors(alias,url)`,{headers:{apikey:u,Authorization:`Bearer ${u}`,Accept:"application/json"},signal:AbortSignal.timeout(dA4)});if(!t.ok){let f=await t.text().catch(()=>t.statusText);throw console.error(`[deco-apps] Supabase error (${t.status}): ${f.slice(0,200)}`),Error(`External service error (${t.status})`)}return await t.json()}var dA4=1e4,hA4=async(i,u)=>{if(!i.get("meshContext").auth.user?.id)return i.json({error:"Unauthorized"},401);return u()},Sp0=()=>{let i=new Hu;return i.use("*",hA4),i.get("/",async(u)=>{let t=Fu(),f=t.decoSupabaseUrl,l=t.decoSupabaseServiceKey;if(!f||!l)return u.json({apps:[]});try{let c=await vA4(f,l);return u.json({apps:_A4(c)})}catch(c){return console.error("[deco-apps] GET error:",c),u.json({error:"Failed to fetch apps"},502)}}),i};var Yp0=N(()=>{sf();xt()});import{z as Lu}from"zod";function Gh(i,u="invalid_request_error",t=null,f=null){return{error:{message:i,type:u,param:t,code:f}}}function UA4(i){if(!i)return null;let u=i.indexOf(":");if(u===-1)return{credentialId:null,modelId:i};let t=i.substring(0,u),f=i.substring(u+1);if(!t||!f)return null;return{credentialId:t,modelId:f}}function PA4(i,u,t){try{return JSON.parse(i)}catch{throw new Qp0(`Invalid JSON in tool call arguments for function '${t}' (tool_call_id: ${u}): ${i}`)}}function xA4(i){let u={};for(let t of i)if(t.role==="assistant"&&t.tool_calls)for(let f of t.tool_calls)u[f.id]=f.function.name;return i.map((t)=>{switch(t.role){case"system":return{role:"system",content:t.content};case"user":if(typeof t.content==="string")return{role:"user",content:t.content};return{role:"user",content:t.content.map((l)=>{if(l.type==="text")return{type:"text",text:l.text};return{type:"image",image:l.image_url.url}})};case"assistant":if(t.tool_calls&&t.tool_calls.length>0)return{role:"assistant",content:t.tool_calls.map((l)=>({type:"tool-call",toolCallId:l.id,toolName:l.function.name,input:PA4(l.function.arguments,l.id,l.function.name)}))};return{role:"assistant",content:t.content??""};case"tool":let f=u[t.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:t.tool_call_id,toolName:f,output:{type:"text",value:t.content}}]}}})}function IA4(i){let u=i.map((t)=>{let f=t.function.parameters?u3(t.function.parameters):u3({type:"object",properties:{}});return[t.function.name,ft({description:t.function.description,inputSchema:f})]});return Object.fromEntries(u)}function AA4(i){if(!i)return;return{openai:{response_format:i}}}function nA4(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function Wp0(i,u,t,f,l,c){let E={model:i,messages:u,tools:t,temperature:f.temperature,maxTokens:f.max_tokens,topP:f.top_p,frequencyPenalty:f.frequency_penalty,presencePenalty:f.presence_penalty,stopSequences:f.stop?Array.isArray(f.stop)?f.stop:[f.stop]:void 0,abortSignal:c};return l?{...E,providerOptions:l}:E}function Lp0(i){if(i==="tool-calls")return"tool_calls";if(i==="length")return"length";return"stop"}var DA4=256,gA4,NA4,OA4,ZA4,BA4,yA4,FA4,TA4,Qp0,zp0,Hp0;var bp0=N(()=>{Cf();sf();hK();gA4=Lu.object({type:Lu.literal("function"),function:Lu.object({name:Lu.string(),description:Lu.string().optional(),parameters:Lu.record(Lu.string(),Lu.unknown()).optional()})}),NA4=Lu.object({id:Lu.string(),type:Lu.literal("function"),function:Lu.object({name:Lu.string(),arguments:Lu.string()})}),OA4=Lu.discriminatedUnion("role",[Lu.object({role:Lu.literal("system"),content:Lu.string(),name:Lu.string().optional()}),Lu.object({role:Lu.literal("user"),content:Lu.union([Lu.string(),Lu.array(Lu.union([Lu.object({type:Lu.literal("text"),text:Lu.string()}),Lu.object({type:Lu.literal("image_url"),image_url:Lu.object({url:Lu.string(),detail:Lu.string().optional()})})]))]),name:Lu.string().optional()}),Lu.object({role:Lu.literal("assistant"),content:Lu.string().nullable().optional(),name:Lu.string().optional(),tool_calls:Lu.array(NA4).optional()}),Lu.object({role:Lu.literal("tool"),content:Lu.string(),tool_call_id:Lu.string()})]),ZA4=Lu.object({type:Lu.literal("text")}),BA4=Lu.object({type:Lu.literal("json_object")}),yA4=Lu.object({type:Lu.literal("json_schema"),json_schema:Lu.object({name:Lu.string(),description:Lu.string().optional(),schema:Lu.record(Lu.string(),Lu.unknown()),strict:Lu.boolean().optional()})}),FA4=Lu.union([ZA4,BA4,yA4]),TA4=Lu.object({model:Lu.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:Lu.array(OA4),stream:Lu.boolean().optional().default(!1),temperature:Lu.number().min(0).max(2).optional(),max_tokens:Lu.number().positive().optional(),top_p:Lu.number().min(0).max(1).optional(),frequency_penalty:Lu.number().min(-2).max(2).optional(),presence_penalty:Lu.number().min(-2).max(2).optional(),stop:Lu.union([Lu.string(),Lu.array(Lu.string())]).optional(),tools:Lu.array(gA4).optional(),tool_choice:Lu.union([Lu.literal("auto"),Lu.literal("none"),Lu.literal("required"),Lu.object({type:Lu.literal("function"),function:Lu.object({name:Lu.string()})})]).optional(),response_format:FA4.optional(),user:Lu.string().optional()});Qp0=class Qp0 extends Error{constructor(i){super(i);this.name="MessageConversionError"}};zp0=new Hu;zp0.post("/:org/v1/chat/completions",async(i)=>{let u=i.get("meshContext"),t=i.req.param("org");try{if(!u.auth.apiKey?.id)return i.json(Gh("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!u.organization)return i.json(Gh("Organization context is required. Ensure your API key has organization metadata.","invalid_request_error","organization"),400);if((u.organization.slug??u.organization.id)!==t)return i.json(Gh("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let f=await i.req.json(),l=TA4.safeParse(f);if(!l.success){let Z=l.error.issues[0]??{message:"Invalid request",path:[]};return i.json(Gh(`Invalid request: ${Z.message}`,"invalid_request_error",Z.path.length>0?Z.path.join("."):null),400)}let c=l.data,E=UA4(c.model);if(!E)return i.json(Gh("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:$}=E,{modelId:w}=E;if(!$){let Z=await u.storage.aiProviderKeys.list({organizationId:u.organization.id});if(Z.length===0)return i.json(Gh("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);$=Z[0].id}let d;try{d=await u.aiProviders.activate($,u.organization.id)}catch{return i.json(Gh(`AI provider credential not found or inaccessible: ${$}`,"invalid_request_error","model"),404)}let _=d.aiSdk.languageModel(w),v=xA4(c.messages),h=c.tools?IA4(c.tools):void 0,D=AA4(c.response_format),g=nA4(),O=Math.floor(Date.now()/1000);if(c.stream)return zd(i,async(Z)=>{let B=Wp0(_,v,h,c,D,i.req.raw.signal);try{let y=Pd(B),F=!1,T=0,U="",I=async()=>{if(U.length===0)return;let j=U;U="",await Z.writeSSE({data:JSON.stringify({id:g,object:"chat.completion.chunk",created:O,model:c.model,choices:[{index:0,delta:{content:j},finish_reason:null}]})})};for await(let j of y.fullStream){if(!F&&(j.type==="text-delta"||j.type==="tool-call"))await Z.writeSSE({data:JSON.stringify({id:g,object:"chat.completion.chunk",created:O,model:c.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),F=!0;if(j.type==="text-delta"){if(U+=j.text,U.length>=DA4)await I()}else if(j.type==="tool-call"){await I();let A=T++;await Z.writeSSE({data:JSON.stringify({id:g,object:"chat.completion.chunk",created:O,model:c.model,choices:[{index:0,delta:{tool_calls:[{index:A,id:j.toolCallId,type:"function",function:{name:j.toolName,arguments:JSON.stringify(j.input)}}]},finish_reason:null}]})})}else if(j.type==="finish")await I(),await Z.writeSSE({data:JSON.stringify({id:g,object:"chat.completion.chunk",created:O,model:c.model,choices:[{index:0,delta:{},finish_reason:Lp0(j.finishReason)}],usage:j.totalUsage?{prompt_tokens:j.totalUsage.inputTokens??0,completion_tokens:j.totalUsage.outputTokens??0,total_tokens:j.totalUsage.totalTokens??0}:void 0})})}await I(),await Z.writeSSE({data:"[DONE]"})}catch(y){let F=y;console.error("[openai-compat:stream] Error:",F.message),await Z.writeSSE({data:JSON.stringify({error:{message:F.message,type:"server_error"}})})}});else{let Z=Wp0(_,v,h,c,D,i.req.raw.signal),B=await ug(Z),y={role:"assistant",content:B.text||null};if(B.toolCalls&&B.toolCalls.length>0)y.tool_calls=B.toolCalls.map((F)=>({id:F.toolCallId,type:"function",function:{name:F.toolName,arguments:JSON.stringify("input"in F?F.input:{})}})),y.content=null;return i.json({id:g,object:"chat.completion",created:O,model:c.model,choices:[{index:0,message:y,finish_reason:Lp0(B.finishReason)}],usage:{prompt_tokens:B.usage?.inputTokens??0,completion_tokens:B.usage?.outputTokens??0,total_tokens:B.usage?.totalTokens??0}})}}catch(f){let l=f;if(l.name==="AbortError")return i.json(Gh("Request aborted","invalid_request_error"),400);if(l.name==="MessageConversionError")return i.json(Gh(l.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",l.message,l.stack),i.json(Gh(l.message,"server_error"),500)}});Hp0=zp0});function kA4(){let i=process.env.POSTHOG_KEY;if(!i)return null;return{key:i,host:process.env.POSTHOG_HOST??GA4}}var Rp0,GA4="https://ph.studio.decocms.com",Cp0;var Mp0=N(()=>{sf();Ori();Pg();HE();xt();Rwu();Rp0=new Hu;Rp0.get("/",(i)=>{let u={theme:vf0(),...sO().logo&&{logo:sO().logo},...Gd()&&{internalUrl:j4i()},...Fu().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!Fu().firecrawlApiKey,auth:bV0(),posthog:kA4(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!Gd()&&Fu().sandboxProviderKind==="agent-sandbox"}};return i.json({success:!0,config:u})});Cp0=Rp0});function qp0(i,u){if(u.startsWith("text/html")||u.startsWith("image/svg"))i.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var Vp0,jA4,XA4,rp0;var mp0=N(()=>{sf();J_();jz();BW();Vp0=new Hu,jA4=["range","if-none-match","if-modified-since"],XA4=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];Vp0.get("/:org/files/*",async(i)=>{let u=i.get("meshContext"),t=u.organization?.id;if(!u.auth?.user?.id){if(HH(i))return i.redirect(`/login?next=${encodeURIComponent(i.req.path)}`,302);throw new P0(401,{message:"Authentication required"})}if(!t)throw new P0(401,{message:"Organization context required"});let f=i.req.path.replace(/^.*\/files\//,"");if(!f)throw new P0(400,{message:"Missing file key"});let l=await Ma(f,u);if(!l)throw new P0(503,{message:"Object storage not configured"});if(l.startsWith("data:")&&X_()){let w=l.match(/^data:([^;]+);base64,(.+)$/s);if(!w)throw new P0(500,{message:"Invalid data URL from storage"});let[,d,_]=w,v=Buffer.from(_,"base64"),h=new Headers({"Content-Type":d,"Cache-Control":"private, max-age=86400"});return qp0(h,d),new Response(v,{status:200,headers:h})}let c=new Headers;for(let w of jA4){let d=i.req.header(w);if(d)c.set(w,d)}let E=await fetch(l,{headers:c});if(E.status===403||E.status===404)throw new P0(404,{message:"File not found"});if(!E.ok&&E.status!==304&&E.status!==416)throw console.error(`[files] upstream storage error ${E.status} for key:`,f),new P0(502,{message:"Upstream storage error"});let $=new Headers;for(let w of XA4){let d=E.headers.get(w);if(d)$.set(w,d)}return $.set("Cache-Control","private, max-age=86400"),qp0($,$.get("content-type")??""),new Response(E.body,{status:E.status,headers:$})});rp0=Vp0});function sp0(i){let u=i?.connectFn??YA4,t=null,f=null,l=!1,c=!1,E=!1,$=[];function w(){return t!==null&&!t.isClosed()&&!t.isDraining()&&!E}function d(){console.log(`[NatsProvider] fireReady: ${$.length} callbacks`);for(let h of $)try{h()}catch{}}function _(h){(async()=>{for await(let D of h.status())if(D.type==="disconnect")console.log("[NatsProvider] Disconnected"),E=!0;else if(D.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),E=!1,f=null,d()})().catch(()=>{})}async function v(h,D){let g=0;while(!c)try{t=await u({servers:h,timeout:SA4,reconnect:!0,maxReconnectAttempts:-1,...D?{authenticator:D}:{}}),console.log(`[NatsProvider] Connected to ${t.getServer()} after ${g} attempt(s)`),f=null,E=!1,_(t),d();return}catch{g++;let O=uc(KA4,JA4,g-1,2,0.5);await Zt(O)}}return{init(h,D){if(l)return;l=!0,c=!1;let g=D?.creds?ep0.credsAuthenticator(new TextEncoder().encode(D.creds)):void 0;v(h,g).catch(()=>{})},isConnected(){return w()},getConnection(){return w()?t:null},getJetStream(){if(!w())return null;if(!f)f=op0.jetstream(t);return f},onReady(h){if($.push(h),w())try{h()}catch{}},async drain(){if(c=!0,l=!1,f=null,E=!1,t){let h=t;t=null,await h.drain().catch(()=>{})}}}}function YA4(i){return ap0.connect(i)}var ep0,ap0,op0,JA4=100,KA4=3000,SA4=3000;var pp0=N(()=>{Bl();ep0=k(yO(),1),ap0=k(kzi(),1),op0=k(i7(),1)});function $b(i){let u=i?.ttlMs??60000,t=i?.maxSize??1e4,f=i?.updateRecencyOnGet??!1,l=new Map;function c(){if(l.size<=t)return;let E=Date.now();for(let[$,w]of l)if(w.expiresAt<=E)l.delete($);while(l.size>t){let $=l.keys().next().value;if($===void 0)break;l.delete($)}}return{get(E){let $=l.get(E);if(!$)return;if($.expiresAt<=Date.now()){l.delete(E);return}if(f)l.delete(E),l.set(E,$);return $.value},set(E,$){l.delete(E),l.set(E,{value:$,expiresAt:Date.now()+u}),c()},delete(E){l.delete(E)},clear(){l.clear()},size(){return l.size}}}function n_u(i,u){return`${i}.${u}`}class G_u{cache;constructor(i){this.cache=$b({ttlMs:i?.ttlMs??WA4,maxSize:i?.maxSize??LA4})}async get(i,u){return this.cache.get(n_u(i,u))??null}async set(i,u,t){this.cache.set(n_u(i,u),t)}async invalidate(i,u){this.cache.delete(n_u(i,u))}teardown(){this.cache.clear()}}var WA4=600000,LA4=5000;var iit=()=>{};function Uxi(i,u){return`${i}:${u}`}function k_u(i){let u=$b({ttlMs:i?.ttlMs??QA4,maxSize:i?.maxSize??zA4}),t=i?.getConnection,f=crypto.randomUUID(),l=new TextEncoder,c=new TextDecoder,E=null;function $(w,d){let _=t?.();if(!_)return;try{_.publish(uit,l.encode(JSON.stringify({organizationId:w,keyId:d,originId:f})))}catch(v){console.warn("[ProviderKeyCache] Publish failed (non-critical):",v)}}return{get(w,d){return u.get(Uxi(w,d))},set(w,d,_){u.set(Uxi(w,d),_)},invalidate(w,d){u.delete(Uxi(w,d)),$(w,d)},start(){if(E)return;let w=t?.();if(!w)return;E=w.subscribe(uit),(async()=>{for await(let d of E)try{let _=JSON.parse(c.decode(d.data));if(_.originId===f)continue;u.delete(Uxi(_.organizationId,_.keyId))}catch{}})().catch(console.error)},teardown(){E?.unsubscribe(),E=null,u.clear()}}}var uit="studio.ai-provider-keys.invalidate",QA4=30000,zA4=5000;var tit=()=>{};class j_u{options;sub=null;onCancel=null;encoder=new TextEncoder;originId=crypto.randomUUID();constructor(i){this.options=i}async start(i){if(i)this.onCancel=i;if(this.sub)return;if(!this.onCancel)return;let u=this.options.getConnection();if(!u)return;this.sub=u.subscribe("mesh.decopilot.cancel");let t=new TextDecoder;(async()=>{for await(let f of this.sub)try{let l=JSON.parse(t.decode(f.data));if(l.originId===this.originId)continue;this.onCancel?.(l.taskId)}catch{}})().catch(console.error)}broadcast(i){if(/[.*>\s]/.test(i)){console.warn("[NatsCancelBroadcast] Invalid threadId, skipping broadcast");return}this.onCancel?.(i);try{let u=this.options.getConnection();if(!u)return;u.publish("mesh.decopilot.cancel",this.encoder.encode(JSON.stringify({taskId:i,originId:this.originId})))}catch(u){console.warn("[NatsCancelBroadcast] Publish failed (non-critical):",u)}}publishControlFrame(i,u){}async stop(){this.sub?.unsubscribe(),this.sub=null,this.onCancel=null}}function VA4(){return{name:D8,subjects:[`${fHi}.>`],storage:G5.StorageType.File,max_age:RA4,max_bytes:MA4,max_msgs_per_subject:qA4,discard:G5.DiscardPolicy.Old,retention:G5.RetentionPolicy.Limits,duplicate_window:CA4,num_replicas:1}}class cit{chunks=0;encodeMs=0;maxMs=0;bytes=0;windowStart=performance.now();constructor(){setInterval(()=>this.flush(),1e4).unref?.()}record(i,u){if(this.chunks++,this.encodeMs+=i,i>this.maxMs)this.maxMs=i;this.bytes+=u}flush(){let i=performance.now(),u=i-this.windowStart;if(this.chunks>0&&u>0)console.warn(JSON.stringify({msg:"stream-encode-trace",windowMs:Math.round(u),chunks:this.chunks,encodeMs:Math.round(this.encodeMs),pctOfLoop:+(this.encodeMs/u*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=i}}function fit(i){let u=lit.headers();for(let[t,f]of Object.entries(i))u.set(t,f);return u}function aA4(i,u){let t=0;return{publish(f,l,c,E){f.publish(l,c,E?{headers:E}:void 0).catch(($)=>{if(t++,bA4().add(1,{"org.id":u??"unknown"}),t===1||t%100===0)console.warn(`[Decopilot] JetStream publish failed for thread ${i} (${t} total):`,$)})},get errorCount(){return t}}}class X_u{options;js=null;jsm=null;constructor(i){this.options=i}async init(){let i=this.options.getConnection();if(!i){console.log("[Decopilot] StreamBuffer.init skipped: NATS not connected yet");return}let u=this.options.getJetStreamManager?await this.options.getJetStreamManager():await G5.jetstreamManager(i),t=VA4();try{await u.streams.info(D8),await u.streams.update(D8,t)}catch(f){if(f instanceof Error&&f.message.includes("stream not found"))await u.streams.add(t);else if(f instanceof Error&&/can ?not change.*storage|storage type/i.test(f.message))await u.streams.delete(D8),await u.streams.add(t);else throw f}this.js=this.options.getJetStream(),this.jsm=u,console.log(`[Decopilot] StreamBuffer.init ${this.js?"ready":"degraded (js=null)"}`)}pump(i,u,t,f){let l=this.js;if(!l){console.warn(`[Decopilot] pump: JetStream client unavailable for thread ${u}; chunks NOT published to NATS`);return}let c=aA4(u,f),E=!1,$=()=>{if(E)return;E=!0;let d=squ(u);l.publish(d.subject,d.data).catch(()=>{})};t.addEventListener("abort",$,{once:!0});let w=(d)=>{let _=performance.now(),v=UY(d,{runId:u}),h=performance.now()-_;if(_M().record(h),vM().add(1,{"org.id":f??"unknown"}),eA4?.record(h,v.reduce((D,g)=>D+g.data.length,0)),v.length===0){console.warn(`[Decopilot] dropping oversized stream chunk for thread ${u}`);return}for(let D of v)c.publish(l,D.subject,D.data,D.headers?fit(D.headers):void 0)};(async()=>{let d=i.getReader(),_=0,v=0;try{while(!0){let{done:h,value:D}=await d.read();if(h)break;if(w(D),v++,++_>=64)_=0,await new Promise((g)=>setImmediate(g))}}catch(h){console.warn(`[Decopilot] stream pump error for thread ${u}:`,h?.message??h)}finally{if(d.releaseLock(),$(),mA4)console.warn(JSON.stringify({msg:"decopilot-stream-diag",event:"pump-done",taskId:u,publishedChunks:v,publishErrors:c.errorCount}))}})()}async publishRawChunk(i,u,t){let f=this.js;if(!f)return!1;let l=performance.now(),c=UY(u,{runId:i,dedup:t});if(_M().record(performance.now()-l),vM().add(1),c.length===0)return console.warn(`[Decopilot] dropping oversized raw chunk for thread ${i} (> MAX_CHUNKED_BYTES)`),!0;for(let E of c)await f.publish(E.subject,E.data,{...E.headers?{headers:fit(E.headers)}:{},...E.msgId?{msgID:E.msgId}:{}});return!0}async publishDone(i,u,t){let f=this.js;if(!f)return!1;let l=J1i({runId:i,fenceToken:u,finalSeq:t});return await f.publish(l.subject,l.data,{msgID:l.msgId}),!0}async createTailStream(i,u,t){let f=this.js;if(!f)return console.warn(`[Decopilot] createTailStream: JetStream client unavailable for thread ${i}; no live tail`),null;let l=t?.deliverPolicy==="new"?G5.DeliverPolicy.New:G5.DeliverPolicy.All,c=t?.closeOnDone??!1,E=u7(i),$;try{$=await(await f.consumers.get(D8,{filter_subjects:E,deliver_policy:l})).consume()}catch(O){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",O?.message??O),null}let _=Fdi({messages:async function*(){try{for await(let O of $)yield{subject:O.subject,data:O.data,headers:O.headers}}finally{$.stop()}}(),onCancel:()=>$.stop()}).pipeThrough(K1i()).pipeThrough(S1i()).getReader(),v=!1,h=()=>{if(v)return;v=!0;try{_.releaseLock()}catch{}},D=!1,g=()=>{if(D)return;D=!0,$.stop(),_.cancel().catch(()=>{}),h()};return u?.addEventListener("abort",g,{once:!0}),new ReadableStream({async pull(O){for(;;){let{done:Z,value:B}=await _.read();if(Z){g(),O.close();return}let y=B;if(y.kind==="done"){if(c){g(),O.close();return}continue}O.enqueue(y.chunk);return}},cancel(){g()}})}purge(i){if(!this.jsm)return;this.jsm.streams.purge(D8,{filter:u7(i)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var G5,lit,HA4=(i)=>{let u;return()=>u??=i()},bA4,RA4=86400000000000,CA4=120000000000,MA4=4294967296,qA4=500000,rA4,mA4,eA4;var Eit=N(()=>{Ptu();xtu();Y1i();z1();$Hi();G5=k(i7(),1),lit=k(yO(),1),bA4=HA4(()=>Mt.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"}));rA4=process.env.STREAM_ENCODE_TRACE==="1",mA4=process.env.DECOPILOT_STREAM_TRACE==="1";eA4=rA4?new cit:null});function $it(i){let u=i.createFetch??oA4,t=i.timeoutMs??2000;return async(f)=>{try{let l=i.getConnection();if(!l)return J_u;let c=E_(f),$=await u(l,t)(`tunnel://${c}/api/links/status`,{method:"GET"});if(!$.ok)return J_u;let w=await $.json();return{online:!0,hostname:w.hostname,capabilities:w.capabilities??[],cliVersion:w.cliVersion}}catch{return J_u}}}var J_u,oA4=(i,u)=>V2({connection:i,firstFrameTimeoutMs:u});var wit=N(()=>{bC();uM();J_u={online:!1,capabilities:[]}});async function*sA4(i){if(!i.body){yield{headers:{status:i.status,headers:Object.fromEntries(i.headers.entries())}};return}let u=i.body.getReader(),t=!1;try{yield{headers:{status:i.status,headers:Object.fromEntries(i.headers.entries())}};while(!0){let{done:f,value:l}=await u.read();if(f){t=!0;return}yield{data:Buffer.from(l).toString("base64")}}}finally{try{if(!t)await u.cancel()}catch{}finally{u.releaseLock()}}}function dit(i){let u=i.createFetch??((t)=>V2({connection:t,idleTimeoutMs:pA4}));return async function*(f,l,c){let E=i.getConnection();if(!E)throw Error("link_unavailable: NATS unavailable");let $=E_(f),w=u(E),d={method:l.method,headers:l.headers,signal:c?.signal};if(l.body!=null)d.body=l.body;let _=await w(`tunnel://${$}${l.path}`,d);yield*sA4(_)}}var pA4=45000;var _it=N(()=>{bC();uM()});function vit(i){let u=i.createFetch??((t)=>V2({connection:t,idleTimeoutMs:in4}));return{async publish(t,f,l){let c=i.getConnection();if(!c)throw Error("link_unavailable: NATS unavailable");let E=E_(t),w=await u(c)(`tunnel://${E}/api/links/work`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(f),signal:l?.signal});if(!w.ok){let d=await w.text().catch(()=>"");throw Error(`tunnel work publish failed (${w.status})${d?`: ${d}`:""}`)}await w.body?.cancel().catch(()=>{})}}}function hit(i){let u=i.createFetch??V2;return{async publishControlFrame(t,f,l){let c=i.getConnection();if(!c)throw Error("link_unavailable: NATS unavailable");let E=E_(t),w=await u(c)(`tunnel://${E}/api/links/control`,{method:"POST",headers:{"content-type":"application/json"},body:gVu(f),signal:l?.signal});if(!w.ok){let d=await w.text().catch(()=>"");throw Error(`tunnel control publish failed (${w.status})${d?`: ${d}`:""}`)}await w.body?.cancel().catch(()=>{})}}}var in4=45000;var Dit=N(()=>{bC();DHi();uM()});function git(i,u){switch(i.type){case"START":{let t={type:"RUN_STARTED",taskId:i.taskId,orgId:i.orgId,userId:i.userId,abortController:i.abortController,runConfig:i.runConfig,podId:i.podId};if(u?.status.tag==="running")return[{type:"PREVIOUS_RUN_ABORTED",taskId:i.taskId,orgId:u.orgId},t];return[t]}case"STEP_DONE":{if(u?.status.tag!=="running")return[];return[{type:"STEP_COMPLETED",taskId:i.taskId,orgId:u.orgId,stepCount:u.status.stepCount+1}]}case"FINISH":{if(u==null||u.status.tag!=="running")return[];let{stepCount:t}=u.status;if(i.threadStatus==="completed")return[{type:"RUN_COMPLETED",taskId:i.taskId,orgId:u.orgId,stepCount:t}];if(i.threadStatus==="requires_action")return[{type:"RUN_REQUIRES_ACTION",taskId:i.taskId,orgId:u.orgId,stepCount:t}];return[{type:"RUN_FAILED",taskId:i.taskId,orgId:u.orgId,reason:"error"}]}case"CANCEL":{if(u?.status.tag!=="running")return[];return[{type:"RUN_FAILED",taskId:i.taskId,orgId:u.orgId,reason:"cancelled"}]}case"RESUME":{if(u?.status.tag==="running")return[];return[{type:"RUN_RESUMED",taskId:i.taskId,orgId:i.orgId,userId:i.userId,abortController:i.abortController,podId:i.podId}]}case"FORCE_FAIL":{if(i.reason==="ghost")return[{type:"RUN_FAILED",taskId:i.taskId,orgId:u?.orgId??i.orgId,reason:i.reason}];if(u?.status.tag!=="running")return[];return[{type:"RUN_FAILED",taskId:i.taskId,orgId:u.orgId,reason:i.reason}]}}}function Nit(i,u,t=new Date){switch(u.type){case"RUN_STARTED":return{taskId:u.taskId,orgId:u.orgId,userId:u.userId,status:{tag:"running",abortController:u.abortController,stepCount:0,startedAt:t}};case"RUN_RESUMED":return{taskId:u.taskId,orgId:u.orgId,userId:u.userId,status:{tag:"running",abortController:u.abortController,stepCount:0,startedAt:t}};case"STEP_COMPLETED":if(i?.status.tag!=="running")return i;return{...i,status:{...i.status,stepCount:u.stepCount}};case"RUN_COMPLETED":return;case"RUN_REQUIRES_ACTION":return;case"RUN_FAILED":return;case"PREVIOUS_RUN_ABORTED":return}}async function Oit(i,u,t,f){let{storage:l,sseHub:c}=f,E=await l.get(i,u);c.emit(u,j_(i,t,{virtualMcpId:E?.virtual_mcp_id??void 0,createdBy:E?.created_by,triggerId:E?.trigger_id,title:E?.title,branch:E?.branch??null,createdAt:E?.created_at,updatedAt:E?.updated_at})),c.emit(u,Xq(i,t))}async function tn4(i,u){let{storage:t,sseHub:f}=u;switch(i.type){case"RUN_STARTED":{await t.update(i.taskId,i.orgId,{status:"in_progress",run_config:i.runConfig??null,run_started_at:new Date().toISOString(),last_progress_at:null,failure_reason:null,failure_kind:null});let l=await t.get(i.taskId,i.orgId);f.emit(i.orgId,j_(i.taskId,"in_progress",{virtualMcpId:l?.virtual_mcp_id??void 0,createdBy:l?.created_by,triggerId:l?.trigger_id,title:l?.title,branch:l?.branch??null,createdAt:l?.created_at,updatedAt:l?.updated_at}));return}case"RUN_RESUMED":{await t.update(i.taskId,i.orgId,{run_started_at:new Date().toISOString()});let l=await t.get(i.taskId,i.orgId);f.emit(i.orgId,j_(i.taskId,"in_progress",{virtualMcpId:l?.virtual_mcp_id??void 0,createdBy:l?.created_by,triggerId:l?.trigger_id,title:l?.title,branch:l?.branch??null,createdAt:l?.created_at,updatedAt:l?.updated_at}));return}case"STEP_COMPLETED":f.emit(i.orgId,uci(i.taskId,i.stepCount));return;case"RUN_COMPLETED":await Oit(i.taskId,i.orgId,"completed",u);return;case"RUN_REQUIRES_ACTION":await Oit(i.taskId,i.orgId,"requires_action",u);return;case"RUN_FAILED":{if(i.reason==="ghost"){if(!await t.forceFailIfInProgress(i.taskId,i.orgId))return;await t.update(i.taskId,i.orgId,{run_config:null,run_started_at:null})}else await t.update(i.taskId,i.orgId,{status:"failed",run_config:null,run_started_at:null,...i.reason==="reaped"?{failure_reason:un4,failure_kind:"stall"}:{}});let l=await t.get(i.taskId,i.orgId);f.emit(i.orgId,j_(i.taskId,"failed",{virtualMcpId:l?.virtual_mcp_id??void 0,createdBy:l?.created_by,triggerId:l?.trigger_id,title:l?.title,branch:l?.branch??null,createdAt:l?.created_at,updatedAt:l?.updated_at})),f.emit(i.orgId,Xq(i.taskId,"failed"));return}case"PREVIOUS_RUN_ABORTED":return}}async function Zit(i,u){for(let{event:t}of i)await tn4(t,u)}var un4="Run stalled \u2014 no progress within the idle timeout window";var Bit=N(()=>{wf()});function yit(i){return i.now-i.lastProgressAt>i.idleTimeoutMs}function Fit(i){return Math.max(i.persistedLastProgressAt??Number.NEGATIVE_INFINITY,i.currentRunStartedAt)}class K_u{deps;clock;states=new Map;reaperTimer=null;constructor(i,u=()=>new Date){this.deps=i;this.clock=u;this.reaperTimer=setInterval(()=>{this.reapStaleRuns().catch((t)=>{console.error("[RunRegistry] Reaper sweep failed",t)})},fn4)}async execute(i){let u=this.dispatch(i);return await this.react(u),u}dispatch(i){let u=this.states.get(i.taskId),t=git(i,u),f=[];for(let l of t){let c=this.states.get(l.taskId);if(l.type==="PREVIOUS_RUN_ABORTED"||l.type==="RUN_FAILED"){if(c?.status.tag==="running")c.status.abortController.abort()}let E=Nit(c,l,this.clock());if(E===void 0)this.states.delete(l.taskId);else this.states.set(l.taskId,E);if(f.push({event:l,state:E}),ln4.has(l.type))Uit().add(1,{"org.id":l.orgId});else if(cn4.has(l.type)&&c?.status.tag==="running")Uit().add(-1,{"org.id":l.orgId})}return f}react(i){return Zit(i,this.deps)}getAbortSignal(i){let u=this.states.get(i);if(u?.status.tag==="running")return u.status.abortController.signal;return null}isRunning(i){return this.states.get(i)?.status.tag==="running"}async stopAll(){for(let[,i]of this.states)if(i.status.tag==="running")i.status.abortController.abort();this.states.clear()}dispose(){if(this.reaperTimer)clearInterval(this.reaperTimer),this.reaperTimer=null}async reapStaleRuns(){let i=this.clock().getTime(),u=[...this.states].filter(([,t])=>t.status.tag==="running");for(let[t,f]of u){if(this.states.get(t)?.status.tag!=="running")continue;let c;try{let $=await this.deps.storage.getProgress(t,f.orgId);c=Fit({persistedLastProgressAt:$?.lastProgressAt??null,currentRunStartedAt:f.status.startedAt.getTime()})}catch($){console.warn(`[RunRegistry] Reaper progress read failed for ${t}; skipping`,$);continue}if(!yit({lastProgressAt:c,now:i,idleTimeoutMs:Tit}))continue;let E=await this.deps.storage.get(t,f.orgId).catch(()=>null);if(E&&E.status!=="in_progress"){let $=this.states.get(t);if($?.status.tag==="running")$.status.abortController.abort();this.states.delete(t);continue}console.warn(`[RunRegistry] Reaping stuck run for thread ${t} (idle > ${Tit/60000}m) ...`),En4().add(1,{"org.id":f.orgId,reason:"idle_timeout"}),await this.execute({type:"FORCE_FAIL",taskId:t,reason:"reaped"}).catch(($)=>{console.error("[RunRegistry] Reaper execute failed",$)})}}}var fn4=300000,Tit=600000,ln4,cn4,Pit=(i)=>{let u;return()=>u??=i()},Uit,En4;var xit=N(()=>{Bit();z1();ln4=new Set(["RUN_STARTED","RUN_RESUMED"]),cn4=new Set(["RUN_COMPLETED","RUN_FAILED","RUN_REQUIRES_ACTION","PREVIOUS_RUN_ABORTED"]),Uit=Pit(()=>Mt.createUpDownCounter("decopilot.stream.inflight",{description:"Number of in-flight decopilot stream requests",unit:"{requests}"})),En4=Pit(()=>Mt.createCounter("decopilot.run.reaped",{description:"Number of decopilot runs force-failed by the progress-based reaper",unit:"{runs}"}))});function Pxi(i,u,t,f){if(!f)return!1;return i.emit(u,j_(t,f.status,{title:f.title??void 0,virtualMcpId:f.virtual_mcp_id??void 0,createdBy:f.created_by??void 0,triggerId:f.trigger_id??null,branch:f.branch??null,createdAt:f.created_at,updatedAt:f.updated_at})),!0}var Iit=N(()=>{wf()});class S_u{storage;options;timer=null;constructor(i,u={}){this.storage=i;this.options=u}start(){if(this.timer)return;let i=this.options.intervalMs??300000;this.timer=setInterval(()=>{this.runOnce()},i)}async runOnce(){let i=this.options.staleAfterMs??3600000;try{let u=await this.storage.sweepAbandoned(i);if(u>0)console.log(`[async-research-sweeper] marked ${u} stale jobs as abandoned`);return u}catch(u){return console.error("[async-research-sweeper] sweep failed",u),0}}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}import{readdir as $n4,rm as xxi}from"fs/promises";import{join as Ixi}from"path";async function Axi(i){let u=new Date;u.setUTCDate(u.getUTCDate()-wn4),u.setUTCHours(0,0,0,0);let t=0;try{let f=await DK(i);for(let l of f)if(/^\d{4}$/.test(l))t+=await Ait(i,l,u);else if(!l.startsWith(".")){let c=Ixi(i,l),E=await DK(c);for(let w of E){if(!/^\d{4}$/.test(w))continue;t+=await Ait(c,w,u)}if((await DK(c)).length===0)await xxi(c,{recursive:!0,force:!0})}}catch(f){console.warn("monitoring retention cleanup failed:",f)}return t}async function Ait(i,u,t){let f=0,l=Ixi(i,u),c=await DK(l);for(let $ of c){if(!/^\d{2}$/.test($))continue;let w=Ixi(l,$),d=await DK(w);for(let v of d){if(!/^\d{2}$/.test(v))continue;let h=new Date(`${u}-${$}-${v}T00:00:00Z`);if(isNaN(h.getTime()))continue;if(h<t){let D=Ixi(w,v);await xxi(D,{recursive:!0,force:!0}),f++}}if((await DK(w)).length===0)await xxi(w,{recursive:!0,force:!0})}if((await DK(l)).length===0)await xxi(l,{recursive:!0,force:!0});return f}async function DK(i){try{return(await $n4(i)).filter((t)=>!t.startsWith("."))}catch{return[]}}var wn4=30;var Y_u=()=>{};import{DBOS as W_u,SchedulerMode as dn4}from"@dbos-inc/dbos-sdk";async function vn4(){let i=[pd(),pS(),_D()],u=0;for(let t of i)try{u+=await Axi(t)}catch(f){console.error("[monitoring-retention] cleanup failed:",f)}return console.log(`[monitoring-retention] deleted ${u} day-dir(s) across ${i.length} signal dir(s)`),{deleted:u,dirs:i.length}}async function hn4(i,u){await W_u.runStep(()=>vn4(),{name:"monitoringRetention"})}function Git(){if(nit)return;nit=!0;let i=W_u.registerWorkflow(hn4,{name:"monitoringRetentionWorkflow"});W_u.registerScheduled(i,{name:"monitoringRetentionWorkflow",crontab:_n4,mode:dn4.ExactlyOncePerIntervalWhenActive})}var _n4="23 4 * * *",nit=!1;var kit=N(()=>{Sw();Y_u()});function jit(i){return async(u,t)=>{let f=await i.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","=",t).where("member.organizationId","=",u).executeTakeFirst();if(!f)return console.warn(`[automationContextFactory] User ${t} not found in org ${u} \u2014 returning null`),null;let l=await H9.create();l.auth.user={id:t,role:f.role},l.organization={id:f.orgId,slug:f.orgSlug,name:f.orgName};let c=await Siu(i.db,u,f.role);return l.boundAuth=Kiu({auth:l.authInstance,headers:new Headers,role:f.role,permissions:c,userId:t}),l.access=new LZ(t,void 0,l.boundAuth,f.role,"self"),w3i(l,{id:f.orgId,slug:f.orgSlug}),l}}var Xit=N(()=>{QZ();Ue()});import{EventEmitter as Dn4}from"events";var L_u;var Jit=N(()=>{nO();L_u=new Dn4;L_u.on("request",(i)=>{uv(i)})});function Kit(){return async(i,u)=>{let t=Date.now(),f=i.req.method,l=i.req.path;if(l==="/api/auth/get-session"||l.includes("favicon")){await u();return}let c="",E=!1;if(l.startsWith("/mcp")&&f==="POST"){E=!0;try{if(i.req.header("Content-Type")?.includes("application/json")){let h=await i.req.raw.clone().json();if(h.method==="tools/call"&&h.params?.name){let D=wb(h.params.name),g=h.params.arguments||{},O=Object.keys(g).map((B)=>wb(B)),Z=O.length>0?O.slice(0,3).join(",")+(O.length>3?"\u2026":""):"";c=`${v1.tool}${D}${v1.dim}(${Z})${v1.reset}`}else if(h.method)c=`${v1.dim}${wb(h.method)}${v1.reset}`}}catch{}}let $=wb(l);if(l.startsWith("/mcp/conn_")){let _=l.split("/")[2]??"";$=`/mcp/${v1.mcp}${wb(_.slice(0,12))}\u2026${v1.reset}`}else if(l==="/mcp")$=`${v1.mcp}/mcp${v1.reset}`;else if(l==="/mcp/registry")$=`${v1.mcp}/mcp/registry${v1.reset}`;let w=Nn4(f),d=E?"\u25C0":"\u2190";if(!$li())console.log(`${v1.dim}${d}${v1.reset} ${w}${f}${v1.reset} ${$}${c?` ${c}`:""}`);try{await u()}finally{let _=Date.now()-t,v=i.res.status,h=gn4(v),D=_<1000?`${_}ms`:`${(_/1000).toFixed(1)}s`,g=E?"\u25B6":"\u2192";if(!$li())console.log(`${v1.dim}${g}${v1.reset} ${w}${f}${v1.reset} ${$}${c?` ${c}`:""} ${h}${v}${v1.reset} ${v1.duration}${D}${v1.reset}`);L_u.emit("request",{method:f,path:wb(l),status:v,duration:_,timestamp:new Date})}}}var v1,gn4=(i)=>{if(i>=500)return v1.serverError;if(i>=400)return v1.clientError;if(i>=300)return v1.redirect;return v1.ok},Nn4=(i)=>{return v1[i]||v1.reset},wb=(i)=>{return i.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var Sit=N(()=>{nO();Jit();v1={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 Qit}from"crypto";import{mkdir as On4,readdir as Zn4,rm as Yit,stat as zit}from"fs/promises";import{join as z_u,relative as Bn4}from"path";import{z as I0}from"zod";function bit(i){let u=i.replace(/[^a-zA-Z0-9_-]/g,"_");return z_u(yn4,u)}function Rit(i){return i.replace(/^\/+/,"").replace(/\.\./g,"")}function Q_u(i,u){let t=bit(i),f=Rit(u);return z_u(t,f)}function Fn4(i,u,t,f){let l=Fu().encryptionKey||"dev-secret",c=`${i}:${u}:${t}:${f}`;return Qit("sha256",l).update(c).digest("hex")}function Lit(i,u,t,f,l){let c=Math.floor(Date.now()/1000)+f,E=Fn4(u,t,c,l),$=new URL(`/api/dev-assets/${u}/${Rit(t)}`,i);return $.searchParams.set("expires",c.toString()),$.searchParams.set("signature",E),$.searchParams.set("method",l),$.toString()}function Cit(i,u,t){let f=`${i}:${u.getTime()}:${t}`;return`"${Qit("md5","etag").update(f).digest("hex")}"`}async function Mit(i,u,t,f,l){try{let c=await Zn4(i,{withFileTypes:!0});for(let E of c){let $=z_u(i,E.name),d=Bn4(u,$).replace(/\\/g,"/");if(t&&!d.startsWith(t))continue;if(E.isDirectory())if(f){let _=d+"/";if(!t||_.startsWith(t)){if(!(t?d.slice(t.length):d).includes("/"))l.commonPrefixes.add(_)}}else await Mit($,u,t,f,l);else if(E.isFile()){if(f&&t){let _=d.slice(t.length);if(_.includes(f)){let v=_.indexOf(f),h=t+_.slice(0,v+1);l.commonPrefixes.add(h);continue}}try{let _=await zit($);l.objects.push({key:d,size:_.size,lastModified:_.mtime.toISOString(),etag:Cit($,_.mtime,_.size)})}catch{}}}}catch{}}function qit(i,u){let f=Bi(i).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:I0.object({prefix:I0.string().optional(),maxKeys:I0.number().optional().default(1000),continuationToken:I0.string().optional(),delimiter:I0.string().optional()}),outputSchema:I0.object({objects:I0.array(I0.object({key:I0.string(),size:I0.number(),lastModified:I0.string(),etag:I0.string()})),nextContinuationToken:I0.string().optional(),isTruncated:I0.boolean(),commonPrefixes:I0.array(I0.string()).optional()}),handler:async(l)=>{let c=l,E=c.prefix||"",$=c.maxKeys??1000,w=c.delimiter,d=c.continuationToken,_=bit(f);await On4(_,{recursive:!0});let v={objects:[],commonPrefixes:new Set};await Mit(_,_,E,w,v),v.objects.sort((Z,B)=>Z.key.localeCompare(B.key));let h=0;if(d){if(h=v.objects.findIndex((Z)=>Z.key>d),h===-1)h=v.objects.length}let D=v.objects.slice(h,h+$),g=h+$<v.objects.length,O=g?D[D.length-1]?.key:void 0;return{objects:D,isTruncated:g,nextContinuationToken:O,commonPrefixes:Array.from(v.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:I0.object({key:I0.string()}),outputSchema:I0.object({contentType:I0.string().optional(),contentLength:I0.number(),lastModified:I0.string(),etag:I0.string(),metadata:I0.record(I0.string(),I0.string()).optional()}),handler:async(l)=>{let c=l,E=Q_u(f,c.key),$=await zit(E);return{contentType:e3u(c.key),contentLength:$.size,lastModified:$.mtime.toISOString(),etag:Cit(E,$.mtime,$.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:I0.object({key:I0.string(),expiresIn:I0.number().optional()}),outputSchema:I0.object({url:I0.string(),expiresIn:I0.number()}),handler:async(l)=>{let c=l,E=c.expiresIn??Wit;return{url:Lit(u,f,c.key,E,"GET"),expiresIn:E}}},{name:"PUT_PRESIGNED_URL",description:"Generate a presigned URL for uploading a file to local storage",inputSchema:I0.object({key:I0.string(),expiresIn:I0.number().optional(),contentType:I0.string().optional()}),outputSchema:I0.object({url:I0.string(),expiresIn:I0.number()}),handler:async(l)=>{let c=l,E=c.expiresIn??Wit;return{url:Lit(u,f,c.key,E,"PUT"),expiresIn:E}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:I0.object({key:I0.string()}),outputSchema:I0.object({success:I0.boolean(),key:I0.string()}),handler:async(l)=>{let c=l,E=Q_u(f,c.key);try{return await Yit(E),{success:!0,key:c.key}}catch{return{success:!1,key:c.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:I0.object({keys:I0.array(I0.string()).max(1000)}),outputSchema:I0.object({deleted:I0.array(I0.string()),errors:I0.array(I0.object({key:I0.string(),message:I0.string()}))}),handler:async(l)=>{let c=l,E=[],$=[];return await Promise.all(c.keys.map(async(w)=>{let d=Q_u(f,w);try{await Yit(d),E.push(w)}catch(_){$.push({key:w,message:_ instanceof Error?_.message:"Unknown error"})}})),{deleted:E,errors:$}}}]}async function H_u(i,u,t){let f=qit(u,t),l=new jD({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:k1});for(let E of f){let $="shape"in E.inputSchema?E.inputSchema.shape:I0.object({}).shape,w=E.outputSchema&&"shape"in E.outputSchema?E.outputSchema.shape:I0.object({}).shape;l.registerTool(E.name,{description:E.description??"",inputSchema:$,outputSchema:w,annotations:E.annotations,_meta:E._meta},async(d)=>{try{let _=await E.handler(d);return{content:[{type:"text",text:JSON.stringify(_)}],structuredContent:_}}catch(_){return{content:[{type:"text",text:`Error: ${_.message}`}],isError:!0}}})}let c=new y3({enableJsonResponse:i.headers.get("Accept")?.includes("application/json")??!1});return await l.connect(c),$h(l,c,i,"mcp:dev-assets")}async function Vit(i,u,t,f){let c=qit(t,f).find((E)=>E.name===i);if(!c)return{content:[{type:"text",text:`Tool not found: ${i}`}],isError:!0};try{let E=await c.handler(u);return{content:[{type:"text",text:JSON.stringify(E)}]}}catch(E){return{content:[{type:"text",text:E instanceof Error?E.message:String(E)}],isError:!0}}}var yn4="./data/assets",Wit=3600,Hit,rit;var mit=N(()=>{xt();ma();sf();Kq();Sz();mE();RPi();Hit=new Hu;Hit.all("/",async(i)=>{let u=i.get("meshContext"),t=new URL(i.req.url),f=`${t.protocol}//${t.host}`;return H_u(i.req.raw,u,f)});rit=Hit});var eit={};zi(eit,{mountDevRoutes:()=>Tn4});function Tn4(i,u){i.all("/mcp/:connectionId{.*_dev-assets$}",u,async(f)=>{let l=f.get("meshContext"),c=new URL(f.req.url),E=`${c.protocol}//${c.host}`;return H_u(f.req.raw,l,E)}),i.all("/mcp/:connectionId{.*_dev-assets$}/call-tool/:toolName",u,async(f)=>{let l=f.get("meshContext"),c=new URL(f.req.url),E=`${c.protocol}//${c.host}`,$=f.req.param("toolName");if(!$)return f.json({error:"Missing tool name"},400);let w=await f.req.json(),d=await Vit($,w,l,E);if(d.isError)return f.json(d.content,500);return f.json(d.content)}),i.use("/mcp/dev-assets",u),i.route("/mcp/dev-assets",rit);let t=new Hu;t.use("*",Qd({mountPath:"/api/dev-assets"})),t.route("/",bPi({orgFromPath:!1})),i.route("/api/dev-assets",t)}var ait=N(()=>{sf();R3u();RPi();mit()});var oit=N(()=>{tuu();fuu();yB()});var nxi=N(()=>{oit()});var pit={};zi(pit,{streamAgent:()=>sit,createDecopilotClient:()=>Pn4});async function Un4(i){let{parseJsonEventStream:u,uiMessageChunkSchema:t}=await Promise.resolve().then(() => (Cf(),ytu));return u({stream:i,schema:t}).pipeThrough(new TransformStream({transform(f,l){if(!f.success)throw f.error;l.enqueue(f.value)}}))}async function sit(i,u,t,f,l){let{readUIMessageStream:c}=await Promise.resolve().then(() => (Cf(),ytu)),E=t.value??t.id;if(!E)throw Error("Agent binding has no id or value \u2014 cannot resolve agent");let $=f.credentialId??t.credentialId,w=f.thinking??t.thinking,d=w?.id,_={messages:f.messages,...d?{models:{credentialId:$,thinking:w,...f.fast??t.fast?{fast:f.fast??t.fast}:{}}}:{},agent:{id:E},temperature:f.temperature??t.temperature,toolApprovalLevel:f.toolApprovalLevel??t.toolApprovalLevel,mode:f.mode??t.mode??"default",...f.memory?{memory:f.memory}:{},...f.thread_id?{thread_id:f.thread_id}:{}},v=await fetch(i,{method:"POST",headers:{"Content-Type":"application/json","x-mesh-token":u,Authorization:`Bearer ${u}`},body:JSON.stringify(_),signal:l?.signal});if(!v.ok){let D=await v.text().catch(()=>""),g=`HTTP ${v.status}`;try{let O=JSON.parse(D);if(O?.error)g=O.error}catch{if(D)g=D}throw Error(g)}if(!v.body)throw Error("Empty response body from decopilot stream");let h=await Un4(v.body);return c({stream:h})}function Pn4(i){let{baseUrl:u,orgSlug:t,token:f}=i,l=`${u}/${t}/decopilot/runtime/stream`;return{stream(c,E){let $={__type:"@deco/agent",id:c.agent.id,credentialId:c.credentialId??"",thinking:c.thinking??{id:"",title:""},fast:c.fast,toolApprovalLevel:c.toolApprovalLevel,mode:c.mode,temperature:c.temperature};return sit(l,f,$,c,E)}}}import{z as Pw}from"zod";function iut(i){let u=i.properties;if(!u)return i;for(let t of Object.values(u)){let f=t.properties;if(!f?.__type?.const)continue;let l=f.__type.const,c=xn4.get(l);if(!c)continue;let E=c.map(($)=>({name:String($.name),...$.inputSchema&&{inputSchema:Pw.toJSONSchema($.inputSchema)},...$.outputSchema&&{outputSchema:Pw.toJSONSchema($.outputSchema)}}));f.__binding={const:E}}return i}var xn4,eJ6,In4=(i)=>{return typeof i==="object"&&i!==null&&i.__type==="@deco/agent"},R_u=(i)=>{return typeof i==="object"&&i!==null&&typeof i.__type==="string"&&i.__type!=="@deco/agent"&&typeof i.value==="string"},Gxi=(i,u,t)=>{let f=t?{"x-caller-app":t}:void 0;if(u.cookie)f??={},f.cookie=u.cookie;if(u.token)f??={},f["x-mesh-token"]=u.token;return{type:"HTTP",url:new URL(`/mcp/${i}`,u.meshUrl).href,token:u.token,headers:f}},An4=(i,u,t)=>{let f=Gxi(i,u,t);return new Proxy(HQ.forConnection(f),{get(l,c){if(c==="value")return i;if(c==="__type")return t;return l[c]}})},nn4=(i,u)=>{let t=u.organizationSlug;if(!t)throw Error("organizationSlug is required for agent bindings");let f=`${u.meshUrl}/api/${t}/decopilot/runtime/stream`;return{STREAM:async(l,c)=>{let{streamAgent:E}=await Promise.resolve().then(() => pit);return E(f,u.token,i,l,c)}}},b_u=(i,u)=>{if(i===null||i===void 0)return i;if(Array.isArray(i))return i.map((t)=>b_u(t,u));if(typeof i==="object"){if(In4(i))return nn4(i,u);if(R_u(i))return An4(i.value,u,i.__type);let t={};for(let[f,l]of Object.entries(i))t[f]=b_u(l,u);return t}return i},uut=(i)=>{return b_u(i.state,i)};var db=N(()=>{nxi();xn4=new Map;eJ6=Pw.object({id:Pw.string(),title:Pw.string(),capabilities:Pw.object({vision:Pw.boolean().optional(),text:Pw.boolean().optional(),tools:Pw.boolean().optional(),reasoning:Pw.boolean().optional()}).passthrough().optional(),provider:Pw.string().optional().nullable(),limits:Pw.object({contextWindow:Pw.number().optional(),maxOutputTokens:Pw.number().optional()}).passthrough().optional()})});var Gn4,tut=(i,u,t)=>{if(!u)return null;if(i===void 0||i==="*")return"*";if(typeof i==="string")return i===u?i:null;if(Array.isArray(i))return i.includes(u)?u:null;if(typeof i==="function")return i(u,t)??null;return null},kn4=(i,u,t)=>{let f=u.headers.get("Origin"),l=tut(t.origin,f,u);if(l)i.set("Access-Control-Allow-Origin",l);if(t.credentials)i.set("Access-Control-Allow-Credentials","true");if(t.exposeHeaders?.length)i.set("Access-Control-Expose-Headers",t.exposeHeaders.join(", "))},fut=(i,u)=>{let t=new Headers,f=i.headers.get("Origin"),l=tut(u.origin,f,i);if(l)t.set("Access-Control-Allow-Origin",l);if(u.credentials)t.set("Access-Control-Allow-Credentials","true");let c=u.allowMethods??Gn4;t.set("Access-Control-Allow-Methods",c.join(", "));let E=i.headers.get("Access-Control-Request-Headers");if(u.allowHeaders?.length)t.set("Access-Control-Allow-Headers",u.allowHeaders.join(", "));else if(E)t.set("Access-Control-Allow-Headers",E);if(u.maxAge!==void 0)t.set("Access-Control-Max-Age",u.maxAge.toString());return new Response(null,{status:204,headers:t})},lut=(i,u,t)=>{let f=new Headers(i.headers);return kn4(f,u,t),new Response(i.body,{status:i.status,statusText:i.statusText,headers:f})};var cut=N(()=>{Gn4=["GET","HEAD","PUT","POST","DELETE","PATCH"]});function Eut(i=32){let t=new Uint8Array(i);return crypto.getRandomValues(t),Array.from(t,(f)=>"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"[f%62]).join("")}function jn4(i){try{let u=new URL(i);return u.protocol==="https:"||u.hostname==="localhost"||u.hostname.endsWith(".localhost")||u.hostname==="127.0.0.1"||!u.protocol.startsWith("http")}catch{return!1}}function $ut(i){return btoa(JSON.stringify(i)).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function wut(i){try{let u=i.replace(/-/g,"+").replace(/_/g,"/");return JSON.parse(atob(u))}catch{return null}}function dut(i){return{handleProtectedResourceMetadata:(d)=>{let _=kh(new URL(d.url)),v=`${_.origin}/mcp`;return Response.json({resource:v,authorization_servers:[_.origin],scopes_supported:["*"],bearer_methods_supported:["header"],resource_signing_alg_values_supported:["RS256","none"]})},handleAuthorizationServerMetadata:(d)=>{let v=kh(new URL(d.url)).origin;return Response.json({issuer:v,authorization_endpoint:`${v}/authorize`,token_endpoint:`${v}/token`,registration_endpoint:`${v}/register`,scopes_supported:["*"],response_types_supported:["code"],response_modes_supported:["query"],grant_types_supported:["authorization_code","refresh_token"],token_endpoint_auth_methods_supported:["none","client_secret_post"],code_challenge_methods_supported:["S256","plain"]})},handleAuthorize:(d)=>{let _=kh(new URL(d.url)),v=_.searchParams.get("redirect_uri"),h=_.searchParams.get("response_type"),D=_.searchParams.get("state"),g=_.searchParams.get("code_challenge"),O=_.searchParams.get("code_challenge_method");if(!v)return Response.json({error:"invalid_request",error_description:"redirect_uri required"},{status:400});if(h!=="code")return Response.json({error:"unsupported_response_type",error_description:"Only 'code' is supported"},{status:400});let Z=kh(new URL(`${_.origin}/oauth/callback`)),B=Z.toString(),F=$ut({redirectUri:v,clientState:D??void 0,codeChallenge:g??void 0,codeChallengeMethod:O??void 0,oauthCallbackUri:B});Z.searchParams.set("state",F);let T=i.authorizationUrl(Z.toString());return Response.redirect(T,302)},handleOAuthCallback:async(d)=>{let _=kh(new URL(d.url)),v=_.searchParams.get("code"),h=_.searchParams.get("state"),D=_.searchParams.get("error"),g=h?wut(h):null;if(D){let O=_.searchParams.get("error_description")??"Authorization failed";if(g?.redirectUri){let Z=kh(new URL(g.redirectUri));if(Z.searchParams.set("error",D),Z.searchParams.set("error_description",O),g.clientState)Z.searchParams.set("state",g.clientState);return Response.redirect(Z.toString(),302)}return Response.json({error:D,error_description:O},{status:400})}if(!v||!g)return Response.json({error:"invalid_request",error_description:"Missing code or state"},{status:400});try{let O=g.oauthCallbackUri??kh(new URL(`${_.origin}/oauth/callback`)).toString(),Z={code:v,redirect_uri:O},B=await i.exchangeCode(Z),y={accessToken:B.access_token,tokenType:B.token_type,refreshToken:B.refresh_token,expiresIn:B.expires_in,scope:B.scope,codeChallenge:g.codeChallenge,codeChallengeMethod:g.codeChallengeMethod},F=$ut(y),T=kh(new URL(g.redirectUri));if(T.searchParams.set("code",F),g.clientState)T.searchParams.set("state",g.clientState);return Response.redirect(T.toString(),302)}catch(O){console.error("OAuth callback error:",O);let Z=kh(new URL(g.redirectUri));if(Z.searchParams.set("error","server_error"),Z.searchParams.set("error_description","Failed to exchange authorization code"),g.clientState)Z.searchParams.set("state",g.clientState);return Response.redirect(Z.toString(),302)}},handleToken:async(d)=>{try{let _=d.headers.get("content-type")??"",v;if(_.includes("application/x-www-form-urlencoded")){let y=await d.formData();v=Object.fromEntries(y.entries())}else{let y=await d.json();if(typeof y!=="object"||y===null||Array.isArray(y))return Response.json({error:"invalid_request",error_description:"Request body must be a JSON object"},{status:400});v=y}let{code:h,code_verifier:D,grant_type:g,refresh_token:O}=v;if(g==="refresh_token"){if(typeof O!=="string"||!O)return Response.json({error:"invalid_request",error_description:"refresh_token is required and must be a string"},{status:400});if(!i.refreshToken)return Response.json({error:"unsupported_grant_type",error_description:"refresh_token grant not supported"},{status:400});let y;try{y=await i.refreshToken(O)}catch(T){if(T instanceof C_u)return Response.json({error:T.error,...T.errorDescription?{error_description:T.errorDescription}:{}},{status:400});throw T}let F={access_token:y.access_token,token_type:y.token_type};if(y.refresh_token)F.refresh_token=y.refresh_token;if(y.expires_in!==void 0)F.expires_in=y.expires_in;if(y.scope)F.scope=y.scope;return Response.json(F,{headers:{"Cache-Control":"no-store",Pragma:"no-cache"}})}if(g!=="authorization_code")return Response.json({error:"unsupported_grant_type",error_description:"Only authorization_code and refresh_token supported"},{status:400});if(typeof h!=="string"||!h)return Response.json({error:"invalid_request",error_description:"code is required and must be a string"},{status:400});let Z=wut(h);if(!Z||!Z.accessToken)return Response.json({error:"invalid_grant",error_description:"Invalid or expired code"},{status:400});if(Z.codeChallenge){if(typeof D!=="string"||!D)return Response.json({error:"invalid_grant",error_description:"code_verifier required and must be a string"},{status:400});let y;if(Z.codeChallengeMethod==="S256"){let T=new TextEncoder().encode(D),U=await crypto.subtle.digest("SHA-256",T);y=btoa(String.fromCharCode(...new Uint8Array(U))).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}else y=D;if(y!==Z.codeChallenge)return Response.json({error:"invalid_grant",error_description:"Invalid code_verifier"},{status:400})}let B={access_token:Z.accessToken,token_type:Z.tokenType};if(Z.refreshToken)B.refresh_token=Z.refreshToken;if(Z.expiresIn!==void 0)B.expires_in=Z.expiresIn;if(Z.scope)B.scope=Z.scope;return Response.json(B,{headers:{"Cache-Control":"no-store",Pragma:"no-cache"}})}catch(_){return console.error("Token exchange error:",_),Response.json({error:"server_error",error_description:"Failed to process token request"},{status:500})}},handleClientRegistration:async(d)=>{try{let _=await d.json();if(!_.redirect_uris||_.redirect_uris.length===0)return Response.json({error:"invalid_redirect_uri",error_description:"At least one redirect_uri is required"},{status:400});for(let O of _.redirect_uris)if(!jn4(O))return Response.json({error:"invalid_redirect_uri",error_description:`Invalid redirect URI: ${O}`},{status:400});let v=Eut(32),h=_.token_endpoint_auth_method!=="none"?Eut(32):void 0,D=Math.floor(Date.now()/1000),g={client_id:v,client_secret:h,client_name:_.client_name,redirect_uris:_.redirect_uris,grant_types:_.grant_types??["authorization_code"],response_types:_.response_types??["code"],token_endpoint_auth_method:_.token_endpoint_auth_method??"client_secret_post",scope:_.scope,client_id_issued_at:D,client_secret_expires_at:0};if(i.persistence)await i.persistence.saveClient(g);return new Response(JSON.stringify(g),{status:201,headers:{"Content-Type":"application/json","Cache-Control":"no-store",Pragma:"no-cache"}})}catch(_){return console.error("Client registration error:",_),Response.json({error:"invalid_client_metadata",error_description:"Invalid client registration request"},{status:400})}},createUnauthorizedResponse:(d)=>{let h=`Bearer resource_metadata="${`${kh(new URL(d.url)).origin}/.well-known/oauth-protected-resource`}", scope="*"`;return Response.json({jsonrpc:"2.0",error:{code:-32000,message:"Unauthorized: Authentication required"},id:null},{status:401,headers:{"WWW-Authenticate":h,"Access-Control-Expose-Headers":"WWW-Authenticate"}})},hasAuth:(d)=>d.headers.has("Authorization")}}var C_u,kh=(i)=>{if(!(i.hostname==="localhost"||i.hostname.endsWith(".localhost")||i.hostname==="127.0.0.1"))i.protocol="https:";return i};var M_u=N(()=>{C_u=class C_u extends Error{error;errorDescription;constructor(i="invalid_grant",u){super(u??i);this.name="OAuthInvalidGrantError",this.error=i,this.errorDescription=u}}});import{AsyncLocalStorage as Xn4}from"async_hooks";var _ut,Ms;var q_u=N(()=>{_ut=new Xn4,Ms={getStore:()=>{return _ut.getStore()},run:(i,u,...t)=>_ut.run(i,u,...t)}});var hut="SELF",jxi=(i)=>{return typeof i==="object"&&i!==null&&"handler"in i&&"events"in i&&typeof i.handler==="function"&&Array.isArray(i.events)},Dut=(i)=>{return typeof i==="object"&&i!==null&&"handler"in i&&"events"in i&&typeof i.handler==="function"&&Array.isArray(i.events)},vut="::",gut=(i)=>{let u=i.indexOf(vut);if(u===-1)return null;let t=i.substring(0,u),f=i.substring(u+vut.length);return[t,f]},Jn4=(i)=>{if(!i.startsWith("cron/"))return null;let u=i.substring(5),t=u.indexOf("/");if(t===-1)return null;let f=u.substring(0,t),l=u.substring(t+1);return[f,l]},Nut=(i)=>{if(jxi(i))return[];return Object.keys(i)},Kn4=(i,u)=>{if(jxi(i))return i.events;let t=i[u];if(!t)return[];if(Dut(t))return t.events;return Object.keys(t)},kxi=(i,u,t)=>{if(i===hut){if(!t)return console.warn("[Event] SELF binding used but no connectionId available"),null;return t}let f=u[i];if(!R_u(f))return console.warn(`[Event] Binding "${i}" not found in state`),null;return f.value},Sn4=(i,u,t)=>{let f=u;if(jxi(i)){let c=[];for(let E of i.events){let $=gut(E);if(!$){console.warn(`[Event] Global handler event "${E}" must be prefixed with BINDING:: (e.g., "SELF::${E}" or "DATABASE::${E}")`);continue}let[w,d]=$,_=kxi(w,f,t);if(!_)continue;c.push({eventType:d,publisher:_})}return c}let l=[];for(let c of Nut(i)){let E=kxi(c,f,t);if(!E)continue;let $=Kn4(i,c);for(let w of $)l.push({eventType:w,publisher:E})}return l},Yn4=(i)=>{let u=new Map;for(let t of i){let f=t.source,l=u.get(f)||[];l.push(t),u.set(f,l)}return u},Wn4=(i)=>{let u=new Map;for(let t of i){let f=t.type,l=u.get(f)||[];l.push(t),u.set(f,l)}return u},Ln4=(i)=>{let u={},t={},f=!1,l=0,c=[];for(let E of i){if(E.results)Object.assign(t,E.results);if(E.success===!1){if(f=!0,E.error)c.push(E.error)}if(E.processedCount!==void 0)l+=E.processedCount}if(Object.keys(t).length>0)u.results=t;if(u.success=!f,c.length>0)u.error=c.join("; ");if(l>0)u.processedCount=l;return u},Qn4=async(i,u,t,f,l)=>{let c=f;if(jxi(i)){let _=new Set;for(let h of i.events){let D=gut(h);if(!D)continue;let[g,O]=D,Z=kxi(g,c,l);if(!Z)continue;_.add(`${Z}:${O}`)}let v=u.filter((h)=>{let D=`${h.source}:${h.type}`;return _.has(D)});if(v.length===0)return{success:!0};try{return await i.handler({events:v},t)}catch(h){return{success:!1,error:h instanceof Error?h.message:String(h)}}}let E=new Map;for(let _ of Nut(i)){let v=kxi(_,c,l);if(v)E.set(v,_)}let $=Yn4(u),w=[];for(let[_,v]of $){let h=E.get(_);if(!h)continue;let D=i[h];if(!D)continue;if(Dut(D)){w.push((async()=>{try{return await D.handler({events:v},t)}catch(Z){let B={};for(let y of v)B[y.id]={success:!1,error:Z instanceof Error?Z.message:String(Z)};return{results:B}}})());continue}let g=D,O=Wn4(v);for(let[Z,B]of O){let y=g[Z];if(!y)continue;w.push((async()=>{try{let F=await y({events:B},t),T={};for(let U of B)T[U.id]=F;return{results:T}}catch(F){let T={};for(let U of B)T[U.id]={success:!1,error:F instanceof Error?F.message:String(F)};return{results:T}}})())}}let d=await Promise.all(w);if(d.length===0)return{success:!0};return Ln4(d)},Out;var V_u=N(()=>{db();Out={subscriptions:Sn4,execute:Qn4,parseCron:Jn4}});function zn4(i,u){let t=Gxi("self",{meshUrl:i,token:u});return HQ.forConnection(t)}function Hn4(i,u){switch(u.type){case"cron":return{automation_id:i,type:"cron",cron_expression:u.cron};case"event":return{automation_id:i,type:"event",connection_id:u.connectionId,event_type:u.eventType,params:u.params};case"webhook":return{automation_id:i,type:"webhook"}}}function Zut(i,u,t){return async(f)=>{if(!i)throw Error("createAgent: missing meshUrl in MESH_REQUEST_CONTEXT");let l=zn4(i,u),E=(await l.COLLECTION_VIRTUAL_MCP_LIST({where:{operator:"and",conditions:[{field:["title"],operator:"eq",value:f.name}]},limit:1})).items.find((_)=>_.title===f.name);if(E)return{id:E.id,automations:[],automationIds:[],alreadyExisted:!0};let $=f.tools&&f.tools.length>0?f.tools.map((_)=>({connection_id:_.connectionId,selected_tools:_.tools??null,selected_resources:null,selected_prompts:null})):t?[{connection_id:t,selected_tools:null,selected_resources:null,selected_prompts:null}]:[],{item:w}=await l.COLLECTION_VIRTUAL_MCP_CREATE({data:{title:f.name,description:f.description,metadata:f.instructions?{instructions:f.instructions}:void 0,connections:$}}),d=[];for(let _ of f.automations??[]){let v=await l.AUTOMATION_CREATE({name:_.name,virtual_mcp_id:w.id,messages:_.messages,models:_.models,tools:_.tools,active:_.active??!0}),h=[];for(let D of _.triggers??[])try{let g=await l.AUTOMATION_TRIGGER_ADD(Hn4(v.id,D));h.push({type:D.type,ok:!0,id:g.id,webhook:g.webhook??void 0})}catch(g){h.push({type:D.type,ok:!1,error:g instanceof Error?g.message:String(g)})}d.push({id:v.id,name:_.name,triggers:h})}return{id:w.id,automations:d,automationIds:d.map((_)=>_.id),alreadyExisted:!1}}}var r_u=N(()=>{db();nxi()});import{z as n6}from"zod";function a8(i){return{...i,execute:(u)=>{let t=qs(u.runtimeContext);return i.execute({...u,runtimeContext:t},t)}}}var qs=(i)=>{let u=Ms.getStore();if(!u){if(i)return i;throw Error("Missing context, did you forget to call State.bind?")}return u},But=(i)=>{let u=i.runtimeContext.env.MESH_REQUEST_CONTEXT;return{connectionId:u?.connectionId,meshUrl:u?.meshUrl,token:u?.token}},bn4=({events:i,configuration:{state:u,scopes:t,onChange:f,onInstall:l}={}}={})=>{let c=u?iut(n6.toJSONSchema(u)):{type:"object",properties:{}};return[...f||l||i?[a8({id:"ON_MCP_CONFIGURATION",description:"MCP Configuration On Change",inputSchema:n6.object({state:u??n6.unknown(),scopes:n6.array(n6.string()).describe("Array of scopes in format 'KEY::SCOPE' (e.g., 'GMAIL::GetCurrentUser')"),firstRun:n6.boolean().optional().describe("True on the first configuration save for this connection \u2014 fires onInstall."),vault:n6.object({baseUrl:n6.string(),org:n6.string(),subjectConnectionId:n6.string(),token:n6.string()}).optional()}),outputSchema:n6.object({}),execute:async(E)=>{let $=E.context.state,w=E.context.vault;if(await f?.(E.runtimeContext.env,{state:$,scopes:E.context.scopes,vault:w}),l&&E.context.firstRun){let{meshUrl:d,token:_,connectionId:v}=But(E);await l(E.runtimeContext.env,{createAgent:Zut(d,_,v),vault:w})}return Promise.resolve({})}})]:[],...i?.handlers?[a8({id:"ON_EVENTS",description:"Receive and process CloudEvents from the event bus. Returns per-event or batch results.",inputSchema:j3i,outputSchema:X3i,execute:async(E)=>{let $=E.runtimeContext.env,w=$.MESH_REQUEST_CONTEXT?.state,{connectionId:d}=But(E);return Out.execute(i.handlers,E.context.events,$,w,d)}})]:[],a8({id:"MCP_CONFIGURATION",description:"MCP Configuration",inputSchema:n6.object({}),outputSchema:n6.object({stateSchema:n6.unknown(),scopes:n6.array(n6.string()).optional()}),execute:()=>{return Promise.resolve({stateSchema:c,scopes:[...t??[]]})}})]},yut=(i)=>{let u=null,t=null,f=null,l=!1,c=()=>{if(!l)console.warn("[runtime] Passing factory functions to tools/prompts/resources is deprecated. Pass createTool()/createPrompt()/createResource() instances directly."),l=!0},E=(D)=>typeof D==="object"&&D!==null&&(("id"in D)||("name"in D)||("uri"in D));async function $(D,g){if(!D)return[];return(await Promise.all(D.flatMap(async(O)=>{if(E(O))return[O];c();let Z=await O(g);if(Array.isArray(Z))return Z;return[Z]}))).flat()}let w=async(D)=>{if(u)return u;if(t)return t;return t=(async()=>{try{let g;if(typeof i.tools==="function")c(),g=await i.tools(D);else g=await $(i.tools,D);g.push(...bn4({...i}));let O;if(typeof i.prompts==="function")c(),O=await i.prompts(D);else O=await $(i.prompts,D);let Z;if(typeof i.resources==="function")c(),Z=await i.resources(D);else Z=await $(i.resources,D);let B={tools:g,prompts:O,resources:Z};return u=B,B}catch(g){throw t=null,g}})(),t},d=(D,g)=>{for(let O of g.tools)D.registerTool(O.id,{_meta:O._meta,title:O.title,description:O.description,annotations:O.annotations,inputSchema:O.inputSchema&&"shape"in O.inputSchema?O.inputSchema:n6.object({}),outputSchema:O.outputSchema&&typeof O.outputSchema==="object"&&"shape"in O.outputSchema?O.outputSchema:void 0},async(Z)=>{let B=qs(),y=await O.execute({context:Z,runtimeContext:B},B);if(y!=null&&typeof y==="object"&&"content"in y&&Array.isArray(y.content)&&y.content.every((F)=>F!=null&&typeof F==="object"&&("type"in F)&&typeof F.type==="string"))return y;return{structuredContent:y,content:[{type:"text",text:JSON.stringify(y)}]}});for(let O of g.prompts)D.registerPrompt(O.name,{title:O.title,description:O.description,argsSchema:O.argsSchema?O.argsSchema:n6.object({}).shape},async(Z)=>{let B=qs();return await O.execute({args:Z,runtimeContext:B},B)});for(let O of g.resources)D.resource(O.name,O.uri,{description:O.description,mimeType:O.mimeType},async(Z)=>{let B=qs(),y=await O.read({uri:Z,runtimeContext:B},B),F=y._meta??void 0;if(y.text!==void 0)return{contents:[{uri:y.uri,mimeType:y.mimeType,text:y.text,...F!==void 0?{_meta:F}:{}}]};else if(y.blob!==void 0)return{contents:[{uri:y.uri,mimeType:y.mimeType,blob:y.blob,...F!==void 0?{_meta:F}:{}}]};return{contents:[{uri:y.uri,mimeType:y.mimeType,text:""}]}})},_=async(D)=>{await i.before?.(D);let{instructions:g,...O}=i.serverInfo??{},Z=new jD({...O,name:O.name??"@deco/mcp-api",version:O.version??"1.0.0"},{capabilities:{tools:{},prompts:{},resources:{}},jsonSchemaValidator:k1,...g&&{instructions:g}}),B=await w(D);d(Z,B);let y="tools/list",F=Z.server._requestHandlers,T=F.get(y);if(T)F.set(y,async(U,I)=>{if(!f)f=await T(U,I);return f});return{server:Z,...B}};return{fetch:async(D,g)=>{let{server:O}=await _(g),Z=new y3;await O.connect(Z);let B=()=>{try{Z.close?.()}catch{}try{O.close?.()}catch{}};try{let y=await Z.handleRequest(D),F=y.headers.get("content-type");if(!(F?.includes("text/event-stream")||F?.includes("application/json-rpc"))||!y.body)return B(),y;let{readable:U,writable:I}=new TransformStream;return y.body.pipeTo(I).catch(()=>{}).finally(B),new Response(U,{status:y.status,statusText:y.statusText,headers:y.headers})}catch(y){throw B(),y}},callTool:async({toolCallId:D,toolCallInput:g})=>{let O=Ms.getStore();if(!O)throw Error("Missing state, did you forget to call State.bind?");let Z=O?.env,{tools:B}=await w(Z),F=B.find((U)=>U.id===D)?.execute;if(!F)throw Error(`Tool ${D} not found or does not have an execute function`);let T=qs();return F({context:g,runtimeContext:T},T)}}};var Xxi=N(()=>{$uu();mE();Kq();Sz();db();V_u();q_u();r_u();V_u();r_u()});import{decodeJwt as Fut}from"jose";var Rn4=({env:i,server:u,url:t})=>{i.SELF=new Proxy({},{get:(f,l)=>{if(l==="toJSON")return null;return async(c)=>{return await u.callTool({toolCallId:l,toolCallInput:c})}}}),i.IS_LOCAL=(t?.startsWith("http://localhost")||t?.startsWith("http://127.0.0.1"))??!1},Tut=(i)=>()=>{return{...i??{}}},Cn4=({env:i,server:u,tokenOrContext:t,url:f,authToken:l})=>{let c=i,E=l?l.split(" ")[1]:void 0,$;if(typeof t==="string"){let w=Fut(t),d=w.metadata??{};$={authorization:E,state:w.state??d.state??{},token:t,meshUrl:w.meshUrl??d.meshUrl,connectionId:w.connectionId??d.connectionId,organizationId:w.organizationId??d.organizationId,organizationName:w.organizationName??d.organizationName,organizationSlug:w.organizationSlug??d.organizationSlug,ensureAuthenticated:Tut(w.user??w.sub)}}else if(typeof t==="object"){$=t;let w=Fut(t.token),d=w.metadata??{},_=w.appName;$.authorization??=E,$.callerApp=_,$.connectionId??=w.connectionId??d.connectionId,$.organizationId??=w.organizationId??d.organizationId,$.organizationName??=w.organizationName??d.organizationName,$.organizationSlug??=w.organizationSlug??d.organizationSlug,$.ensureAuthenticated=Tut(w.user??w.sub)}else $={state:{},authorization:E,token:void 0,meshUrl:void 0,connectionId:void 0,ensureAuthenticated:()=>{throw Error("Unauthorized")}};return c.MESH_REQUEST_CONTEXT=$,$.state=uut($),Rn4({env:c,server:u,url:f}),c},Mn4,Uut=(i)=>{let u=yut(i),t=i.cors??Mn4,f=i.oauth,l=f?dut(f):null,c=async(E,$,w)=>{let d=new URL(E.url);if(l){if(d.pathname==="/.well-known/oauth-protected-resource"||d.pathname==="/mcp/.well-known/oauth-protected-resource")return l.handleProtectedResourceMetadata(E);if(d.pathname==="/.well-known/oauth-authorization-server")return l.handleAuthorizationServerMetadata(E);if(d.pathname==="/authorize")return l.handleAuthorize(E);if(d.pathname==="/oauth/callback")return l.handleOAuthCallback(E);if(d.pathname==="/token"&&E.method==="POST")return l.handleToken(E);if((d.pathname==="/register"||d.pathname==="/mcp/register")&&E.method==="POST")return l.handleClientRegistration(E)}if(d.pathname==="/mcp"){if(E.method==="GET")return new Response("Method not allowed",{status:405});if(l&&!l.hasAuth(E)){let _=E.clone();try{if((await _.json())?.method!=="tools/list")return l.createUnauthorizedResponse(E)}catch{return l.createUnauthorizedResponse(E)}}return u.fetch(E,$,w)}if(d.pathname.startsWith("/mcp/call-tool")){let _=d.pathname.split("/").pop();if(!_)return new Response("Not found",{status:404});let v=await E.json(),h=await u.callTool({toolCallId:_,toolCallInput:v});return new Response(JSON.stringify(h),{headers:{"Content-Type":"application/json"}})}return i.fetch?.(E,$,w)||new Response("Not found",{status:404})};return{fetch:async(E,$,w)=>{if(new URL(E.url).pathname==="/_healthcheck")return new Response("OK",{status:200});if(t!==!1&&E.method==="OPTIONS")return fut(E,t??{});let d=Cn4({authToken:E.headers.get("authorization")??null,env:{...process.env,...$},server:u,tokenOrContext:E.headers.get("x-mesh-token")??void 0,url:E.url}),_=await Ms.run({req:E,env:d,ctx:w},async()=>await c(E,d,w));if(t!==!1)return lut(_,E,t??{});return _}}};var Put=N(()=>{db();cut();M_u();M_u();q_u();Xxi();Xxi();db();nxi();Mn4={origin:(i)=>{if(i.includes("localhost")||i.includes("127.0.0.1"))return i;return i},credentials:!0,allowMethods:["GET","POST","PUT","DELETE","OPTIONS"],allowHeaders:["Content-Type","Authorization","mcp-protocol-version"]}});import{z as m_u}from"zod";function rn4(i,u){let t=a8({id:"COLLECTION_REGISTRY_APP_LIST",description:"List public registry items",annotations:{readOnlyHint:!0,idempotentHint:!0},inputSchema:IH,outputSchema:AH,execute:async({context:$})=>{let w={limit:$.limit,offset:$.offset,cursor:$.cursor,tags:$.tags,categories:$.categories,where:$.where},d=`${u}:${JSON.stringify(w)}`,_=xut.get(d);if(_)return _;let v=await i.listPublic(u,w);return xut.set(d,v),v}}),f=a8({id:"COLLECTION_REGISTRY_APP_GET",description:"Get a public registry item by ID or name",annotations:{readOnlyHint:!0,idempotentHint:!0},inputSchema:Fh,outputSchema:sJ,execute:async({context:$})=>{let w=$.id??$.name;if(!w)return{item:null};let d=await i.findByIdOrName(u,w);if(d&&d.is_public)return{item:d};return{item:null}}}),l=a8({id:"COLLECTION_REGISTRY_APP_VERSIONS",description:"Get available versions of a public registry item",annotations:{readOnlyHint:!0,idempotentHint:!0},inputSchema:Fh,outputSchema:m_u.object({versions:m_u.array(sJ.shape.item)}),execute:async({context:$})=>{let w=$.id??$.name;if(!w)return{versions:[]};let d=await i.findByIdOrName(u,w);if(d&&d.is_public)return{versions:[d]};return{versions:[]}}}),c=a8({id:"COLLECTION_REGISTRY_APP_SEARCH",description:"Search public registry items returning minimal data (id, title, tags, categories, is_public). Use this instead of LIST when you need to find items efficiently without loading full details.",annotations:{readOnlyHint:!0,idempotentHint:!0},inputSchema:aUi,outputSchema:oUi,execute:async({context:$})=>{return await i.search(u,$,{publicOnly:!0})}}),E=a8({id:"COLLECTION_REGISTRY_APP_FILTERS",description:"Get available tags and categories for public registry items",annotations:{readOnlyHint:!0,idempotentHint:!0},inputSchema:m_u.object({}),outputSchema:nH,execute:async()=>{return await i.getFilters(u,{publicOnly:!0})}});return[t,c,f,l,E]}function Iut(i){let u=i.db,t=new bL(u);return async(f)=>{let l=f.req.param("orgSlug")??f.req.param("org");if(!l)return f.json({error:"Organization not found"},404);let c=await u.selectFrom("organization").select(["id","slug","name"]).where("slug","=",l).executeTakeFirst();if(!c)return f.json({error:"Organization not found"},404);let E=rn4(t,c.id),$=Uut({tools:E}),w=new URL(f.req.url),d=f.req.path.indexOf("/registry"),_=d>=0?f.req.path.slice(d+9):"",v=new URL(_||"/",w.origin);w.searchParams.forEach((g,O)=>{v.searchParams.set(O,g)});let h=new Request(v.toString(),{method:f.req.method,headers:f.req.raw.headers,body:f.req.method!=="GET"&&f.req.method!=="HEAD"?f.req.raw.body:void 0}),D={organizationId:c.id,db:u,MESH_REQUEST_CONTEXT:{},MESH_APP_DEPLOYMENT_ID:"public-registry",IS_LOCAL:!1};return await $.fetch(h,D,f)}}var qn4=3600000,Vn4=500,xut;var Aut=N(()=>{Put();Xxi();voi();Ol();xut=$b({ttlMs:qn4,maxSize:Vn4,updateRecencyOnGet:!0})});import{sql as mn4}from"kysely";import{randomUUID as nut}from"crypto";import{z as en4}from"zod";async function on4(i){let u=new Date().toISOString(),t=nut(),f=U4.SELF(i.organizationId),l="registry.publish_request.created",c={requestId:i.request.id,requestedId:i.request.requested_id,title:i.request.title,status:i.request.status,createdAt:i.request.created_at,requester:{name:i.request.requester_name,email:i.request.requester_email}};await i.db.insertInto("events").values({id:t,organization_id:i.organizationId,type:"registry.publish_request.created",source:f,specversion:"1.0",subject:i.request.id,time:u,datacontenttype:"application/json",dataschema:null,data:JSON.stringify(c),cron:null,status:"pending",attempts:0,last_error:null,next_retry_at:null,created_at:u,updated_at:u}).execute();let E=await i.db.selectFrom("event_subscriptions").select(["id"]).where("organization_id","=",i.organizationId).where("enabled","=",1).where("event_type","=","registry.publish_request.created").where(($)=>$.or([$("publisher","is",null),$("publisher","=",f)])).execute();if(E.length>0)await i.db.insertInto("event_deliveries").values(E.map(($)=>({id:nut(),event_id:t,subscription_id:$.id,status:"pending",attempts:0,last_error:null,delivered_at:null,next_retry_at:null,created_at:u}))).execute();try{await mn4`SELECT pg_notify('mesh_events', ${t})`.execute(i.db)}catch{}}async function sn4(i,u){let f=(await i.selectFrom("organization").select(["id"]).where("id","=",u).execute())[0];if(f?.id)return f.id;return(await i.selectFrom("organization").select(["id"]).where("slug","=",u).execute())[0]?.id??null}async function pn4(i,u){let t=await i.selectFrom("virtual_mcp_plugin_configs").innerJoin("connections","connections.id","virtual_mcp_plugin_configs.virtual_mcp_id").select(["virtual_mcp_plugin_configs.settings as settings"]).where("connections.organization_id","=",u).where("virtual_mcp_plugin_configs.plugin_id","=",pJ).execute();for(let f of t){let l=f.settings,c=typeof l==="string"?(()=>{try{return JSON.parse(l)}catch{return{}}})():l??{};if(c.acceptPublishRequests===!0){let E=c.rateLimitWindow==="minute"?"minute":"hour",$=c.rateLimitMax,w=typeof $==="number"&&Number.isFinite($)&&$>=1?Math.floor($):kut;return{acceptPublishRequests:!0,requireApiToken:c.requireApiToken===!0,rateLimitEnabled:c.rateLimitEnabled===void 0?Gut:c.rateLimitEnabled===!0,rateLimitWindow:E,rateLimitMax:w}}}return{acceptPublishRequests:!1,requireApiToken:!1,rateLimitEnabled:Gut,rateLimitWindow:an4,rateLimitMax:kut}}async function iG4(i,u,t){let f=t==="minute"?60000:3600000,l=new Date(Date.now()-f).toISOString(),c=await i.selectFrom("private_registry_publish_request").select((E)=>E.fn.countAll().as("count")).where("organization_id","=",u).where("created_at",">=",l).executeTakeFirst();return Number(c?.count??0)}async function uG4(i,u,t,f){let l=await i.selectFrom("private_registry_item").select(["id","title"]).where("organization_id","=",u).where((c)=>c.or([c("id","=",t),c("title","=",f)])).executeTakeFirst();return l?{id:String(l.id),title:String(l.title)}:null}function jut(i){let{db:u,db:t}=i,f=new RL(t),l=new CL(t);return async(c)=>{let E=c.req.param("orgRef")??c.req.param("org");if(!E)return c.json({error:"Organization not found"},404);let $=await sn4(u,E);if(!$)return c.json({error:"Organization not found"},404);let w=await pn4(u,$);if(!w.acceptPublishRequests)return c.json({error:"Publish requests are not enabled for this registry."},403);if(w.requireApiToken){let D=c.req.header("Authorization"),g=D?.startsWith("Bearer ")?D.slice(7).trim():null;if(!g)return c.json({error:"API key required. Use Authorization: Bearer <key>"},401);if(!await l.validate($,g))return c.json({error:"Invalid API key"},401)}if(w.rateLimitEnabled){if(await iG4(t,$,w.rateLimitWindow)>=w.rateLimitMax)return c.json({error:"Too many publish requests. Please try again later.",retryAfterSeconds:w.rateLimitWindow==="minute"?60:3600},429)}let d;try{d=await c.req.json()}catch{return c.json({error:"Invalid JSON body"},400)}let _=aC0.safeParse(d);if(!_.success)return c.json({error:"Invalid publish request payload",details:en4.treeifyError(_.error)},400);let v=await uG4(t,$,_.data.data.id,_.data.data.title);if(v)return c.json({error:"A registry item with the same id or title already exists. Please use a different name/id.",conflict:v},409);let h=await f.createOrUpdate({organization_id:$,requested_id:_.data.data.id,title:_.data.data.title,description:_.data.data.description??null,_meta:_.data.data._meta,server:_.data.data.server,requester_name:_.data.requester?.name??null,requester_email:_.data.requester?.email??null});try{await on4({db:u,organizationId:$,request:h})}catch(D){console.warn("[private-registry] failed to emit publish-request event:",D)}return ou.capture({distinctId:_.data.requester?.email??`org:${$}`,event:"registry_publish_request_submitted",groups:{organization:$},properties:{organization_id:$,request_id:h.id,requested_id:h.requested_id,title:_.data.data.title,requester_email:_.data.requester?.email??null}}),c.json({id:h.id,requested_id:h.requested_id,status:h.status},201)}}var Gut=!0,an4="hour",kut=100;var Xut=N(()=>{e4();wf();GH();hoi();Doi();Ol()});var Jut={};zi(Jut,{createPublishRequestHandler:()=>jut,createPublicMCPHandler:()=>Iut});var Kut=N(()=>{Aut();Xut()});var F1u={};zi(F1u,{watchHandler:()=>Qut,getProxyDispatch:()=>cG4,createApp:()=>DG4});import{readFileSync as tG4}from"fs";import{PrometheusSerializer as fG4}from"@opentelemetry/exporter-prometheus";import{DBOS as Vs}from"@dbos-inc/dbos-sdk";import{oAuthDiscoveryMetadata as dG4,oAuthProtectedResourceMetadata as _G4}from"better-auth/plugins";async function lG4(i){let u=i.connect(),t;try{t=await Promise.race([u,Yut(Sut)])}catch{return u.then((f)=>f.release(!0)).catch(()=>{}),!1}try{return await Promise.race([t.query("SELECT 1"),Yut(Sut)]),t.release(),!0}catch{return t.release(!0),!1}}function Yut(i){return new Promise((u,t)=>setTimeout(()=>t(Error("pg health-check timeout")),i))}function cG4(){if(!e_u)throw Error("getProxyDispatch() called before createApp() or without NATS \u2014 proxy dispatch unavailable");return e_u}async function EG4(i,u){let{items:t}=await i.storage.connections.list(u,{where:{field:["connection_url"],operator:"like",value:`${Ot0}%`},limit:1}),f=t[0];if(!f?.configuration_state)return null;return f.configuration_state.project_locator}function $G4(i){let u=new URLSearchParams;if(i){let[t,f]=i.split("/");if(t)u.set("workspace_hint",t);if(f)u.set("project_hint",f)}else u.set("auto_personal","true");return u.set("force_new","true"),u}async function DG4(i={}){let u=i.database??qt(),t=!1;A6.stop().catch((M)=>{console.error("[SSEHub] Error stopping previous broadcast (HMR cleanup):",M)});let f,l,c=new G_u,E,$,w,d,_,v=null;if(i.disableNats)E=k_u(),f={get:async()=>null,set:async()=>{},invalidate:async()=>{},teardown:()=>{}},l=new ea,$={start:async()=>{},broadcast:()=>{},publishControlFrame:()=>{},stop:async()=>{}},_=void 0,w={init:async()=>{},pump:(M)=>{(async()=>{let e=M.getReader();try{while(!0){let{done:Ki}=await e.read();if(Ki)break}}catch{}finally{e.releaseLock()}})()},publishRawChunk:async()=>!1,publishDone:async()=>!1,createTailStream:async()=>null,purge:()=>{},teardown:()=>{}};else{v=sp0();let M=Fu().natsCredsPath,e;if(M)try{e=tG4(M,"utf8")}catch(Qu){console.error(`[app] failed to read NATS_CREDS at ${M}; connecting anonymously`,Qu)}v.init(Fu().natsUrls,e?{creds:e}:void 0);let Ki=yoi()?new _ei({getJetStream:()=>v.getJetStream()}):null;Ki?.init().catch(()=>{}),f=Ki;let Li=new Dlu({getJetStream:()=>v.getJetStream()});Li.init().catch(()=>{}),l=Li,E=k_u({getConnection:()=>v.getConnection()}),$=new j_u({getConnection:()=>v.getConnection()}),w=new X_u({getConnection:()=>v.getConnection(),getJetStream:()=>v.getJetStream()}),d=$it({getConnection:()=>v.getConnection()}),_=vit({getConnection:()=>v.getConnection()});let oi=hit({getConnection:()=>v.getConnection()}),iu=$;$={start:(Qu)=>iu.start(Qu),broadcast:(Qu)=>iu.broadcast(Qu),publishControlFrame:(Qu,ht)=>{oi.publishControlFrame(Qu,ht).catch((X4)=>{console.warn("[TunnelControl] publishControlFrame failed (non-critical):",X4)})},stop:()=>iu.stop()},TV0(v),v.onReady(()=>{Ki?.init().catch((Qu)=>{console.error("[McpListCache] Deferred init failed:",Qu)}),Li.init().catch((Qu)=>{console.error("[ConnectionCircuitStore] Deferred init failed:",Qu)}),E.start(),m_0(()=>v.getConnection()),w.init().catch((Qu)=>{console.warn("[Decopilot] StreamBuffer init failed (late-join disabled):",Qu)})})}if(_b)await _b();vei(f),glu(l);let D={storage:new eL(u.db),sseHub:A6},g=new K_u(D),O=new ar(u.db),Z=new S_u(O);Z.start(),$.start((M)=>{Jdi(M),g.execute({type:"CANCEL",taskId:M}).catch((e)=>{console.error("[Decopilot] CancelBroadcast execute failed:",e)})}).catch((M)=>{console.error("[Decopilot] CancelBroadcast start failed:",M)}),v?.onReady(()=>{$.start().catch((M)=>{console.error("[CancelBroadcast] Deferred start failed:",M)})}),w.init().catch((M)=>{console.warn("[Decopilot] StreamBuffer init failed, attach/late-join disabled:",M)}),_b=async()=>{await g.stopAll(),g.dispose(),Z.dispose(),$.stop().catch(()=>{}),w.teardown(),f?.teardown(),c.teardown(),E.teardown(),e_0(),l.teardown(),vei(null),glu(null)};let B=new Hu;if(B.use("*",_ri({enabled:(M)=>TW(M,"debug")==="1"})),B.use("*",SLi),B.use("/*",uf0({origin:(M)=>{if(M.includes("localhost")||M.includes("127.0.0.1"))return M;return M},credentials:!0,allowMethods:["GET","POST","PUT","DELETE","OPTIONS"],allowHeaders:["Content-Type","Authorization","mcp-protocol-version"],exposeHeaders:["WWW-Authenticate"]})),B.use("*",async(M,e)=>{if(await e(),M.req.path.includes("/files/"))return;if(M.req.path.includes("/fs/")&&M.req.path.endsWith("/read"))return;M.header("X-Frame-Options","DENY"),M.header("Content-Security-Policy","frame-ancestors 'none'")}),!Fu().noTui)B.use("*",Kit());B.use("*",async(M,e)=>{if(await e(),TC(M.req.path))return;if(M.res.status>=500){let Li=await M.res.clone().text();console.error(`[5xx Response] ${M.req.method} ${M.req.path} - ${M.res.status}:`,Li)}}),B.get(Yw.HEALTH,(M)=>{if(t)return M.json({status:"shutting_down"},503);return M.json({status:"ok"})}),B.get(Yw.HEALTH_LIVE,(M)=>{return M.json({status:"ok"})}),B.get(Yw.HEALTH_READY,async(M)=>{if(t)return M.json({status:"shutting_down"},503);let e={};if(e.postgres={status:await lG4(u.pool)?"up":"down"},v)e.nats=v.isConnected()?{status:"up"}:{status:"down"};else e.nats={status:"down"};let Ki=e.postgres.status==="up",Li=Ki?200:503;return M.json({status:Ki?"ready":"not_ready",services:e},Li)}),B.get(Yw.METRICS,async(M)=>{try{let e=await QLi.collect(),Ki=wG4.serialize(e.resourceMetrics);return M.text(Ki,200,{"Content-Type":"text/plain; version=0.0.4; charset=utf-8"})}catch(e){return console.error("Failed to collect metrics:",e),M.text("# Error collecting metrics",500)}}),B.route("/api/config",Cp0),B.route("/api/auth/custom",RV0),B.all("/api/auth/*",async(M)=>{return await w4.handler(M.req.raw)});let y=T70();y.use("/.well-known/oauth-protected-resource/mcp/:connectionId",tK),y.use("/mcp/:connectionId/.well-known/oauth-protected-resource",tK),B.route("/",y),B.get("/.well-known/oauth-protected-resource/api/:org/mcp/:connectionId",Pe),B.route("/",I70()),B.use("/oauth-proxy/:connectionId/*",tK),B.all("/oauth-proxy/:connectionId/*",Wut);let F=async(M)=>{let Ki=await vG4()(M.req.raw),Li=await Ki.json();return Response.json(Li,Ki)};B.use("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",tK),B.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",F);let T=async(M)=>{let Ki=await hG4()(M.req.raw),Li=await Ki.json();return Response.json(Li,Ki)};B.get("/.well-known/oauth-authorization-server/*/:gateway?/:connectionId?",T);let U=ZV0({ttlMs:120000}),I=await $70({db:u.db,auth:w4,encryption:{key:Fu().encryptionKey},observability:{tracer:z2,meter:Mt},modelListCache:c,providerKeyCache:E,memberRoleCache:U,linkStatusProbe:d,publishLinkControlFrame:(M,e)=>$.publishControlFrame(M,e)});H9.set(I);let j=new wZ(Fu().encryptionKey);dau({db:u.db,baseUrl:M5()});let A=T$i(u.db),G=new Rr(u.db),q=jit({db:u.db});wlu({storage:A,meshContextFactory:q}),Htu({meshContextFactory:q,deps:{runRegistry:g,cancelBroadcast:$,streamBuffer:w,sseHub:A6},prepareLinkWorkFn:ne0,workPublisher:_}),Ytu({dispatchRunFn:Ie0,meshContextFactory:q,deps:{runRegistry:g,cancelBroadcast:$,streamBuffer:w,sseHub:A6}});let S=new eL(u.db);my0({getJetStream:()=>v?.getJetStream()??null,getJetStreamManager:async()=>{let M=v?.getConnection();return M?await Lut.jetstreamManager(M):null},messageParts:S.messageParts(),resolveRun:async(M)=>{let e=await u.db.selectFrom("threads").select(["organization_id","created_by","message_storage_version","status","run_fence_token","title"]).where("id","=",M).executeTakeFirst();return e?{orgId:e.organization_id,createdBy:e.created_by,version:e.message_storage_version??1,status:e.status,runFenceToken:e.run_fence_token,title:e.title??null}:null},completeRunIfNotCompleted:async(M,e)=>{let Ki=await S.completeRunIfNotCompleted(M,e);return Pxi(A6,e,M,Ki),Ki},markRunRequiresAction:async(M,e)=>{let Ki=await S.requiresActionIfInProgress(M,e);return Pxi(A6,e,M,Ki),Ki},markRunFailed:async(M,e,Ki,Li)=>{let oi=await S.markRunFailed(M,e,Ki,Li);return Pxi(A6,e,M,oi),oi},persistTitle:(M,e,Ki)=>S.update(M,e,{title:Ki}),onTitleUpdated:async({runId:M,orgId:e,title:Ki})=>{let Li=await S.get(M,e).catch(()=>null);A6.emit(e,j_(M,Li?.status??"in_progress",{title:Ki,virtualMcpId:Li?.virtual_mcp_id??void 0,createdBy:Li?.created_by,triggerId:Li?.trigger_id,branch:Li?.branch??null,createdAt:Li?.created_at,updatedAt:Li?.updated_at}))},bumpProgress:async({runId:M,orgId:e})=>{await S.bumpProgress(M,e)},recordCompleted:async({runId:M,orgId:e,distinctId:Ki,usage:Li})=>{ou.capture({distinctId:Ki,event:"chat_message_completed",groups:{organization:e},properties:{organization_id:e,thread_id:M,transport:"projector",input_tokens:Li.inputTokens,output_tokens:Li.outputTokens,total_tokens:Li.totalTokens}})},recordFailed:async({runId:M,orgId:e,distinctId:Ki,reason:Li,kind:oi})=>{ou.capture({distinctId:Ki,event:"chat_message_failed",groups:{organization:e},properties:{organization_id:e,thread_id:M,transport:"projector",error_category:oi,error_message:Li}})},purgeRun:async(M)=>{w.purge(M)}}),gk0({meshContextFactory:q,systemDatabaseUrl:qLi(Fu().databaseUrl,Fu().databasePgSsl),streamBuffer:w}),Git(),_au();let Y=async(M,e,Ki)=>{let Li=await A.findById(M,e);if(!Li)throw Error("Automation not found");return vlu({automationId:Li.id,organizationId:Li.organization_id,triggerId:null})},V=new RH(A,({automation:M,trigger:e,contextMessages:Ki,idempotencyKey:Li})=>ra({automationId:M.id,organizationId:M.organization_id,triggerId:e.id,contextMessages:Ki},{idempotencyKey:Li})),L=[pd(),pS(),_D()];for(let M of L)Axi(M).then(()=>{}).catch((e)=>console.error("[monitoring] Retention cleanup failed:",e));let $i=()=>u.db.deleteFrom("apikey").where("expiresAt","<",new Date).execute().then(()=>{}).catch((M)=>console.error("[auth] Expired API key cleanup failed:",M));$i(),setInterval($i,86400000).unref(),B.use("*",async(M,e)=>{if(JLi(M.req.path))return e();let Ki={measure:async(oi,iu)=>{ud(M,oi);try{return await iu()}finally{Vw(M,oi)}}},Li=await H9.create(M.req.raw,{timings:Ki});Li.automationRunner=Y,M.set("meshContext",Li);try{await e()}finally{let oi=Li.pendingRevalidations;if(oi.length>0)Promise.race([Promise.allSettled(oi),new Promise((Qu)=>setTimeout(Qu,30000))]).catch((Qu)=>console.error("[mesh] revalidation cleanup error:",Qu))}}),B.use("/api/:org/decopilot/*",fK),B.use("/api/:org/v1/*",fK),B.use("/api/:org/files/*",fK),B.use("*",async(M,e)=>{let Ki=M.req.path;if(Ki.startsWith("/api/org-sso/")||Ki.startsWith("/api/auth/")||Ki.startsWith("/api/tools/management")||Ki.startsWith("/oauth-proxy/"))return e();let Li=M.get("meshContext");if(!Li?.organization?.id||!Li?.auth?.user?.id)return e();if(!(await Li.storage.orgSsoConfig.getByOrgId(Li.organization.id))?.enforced)return e();if(!await Li.storage.orgSsoSessions.isValid(Li.auth.user.id,Li.organization.id))return M.json({error:"SSO authentication required for this organization"},403);return e()});let wi=new Hu;wi.use("*",Qd({mountPath:"/api/org-sso"})),wi.route("/",_Pi()),B.route("/api/org-sso",wi),B.get("/api/tools/management",(M)=>{return M.json({tools:hri,grouped:oO()})}),B.use("/mcp/*",async(M,e)=>{ud(M,"mcp");try{return await e()}finally{Vw(M,"mcp")}});let ci=async(M,e)=>{let Ki=M.var.meshContext;if(!Ki.auth.user?.id&&!Ki.auth.apiKey?.id){let Li=new URL(M.req.url);return M.res=new Response(null,{status:401,headers:{"WWW-Authenticate":`Bearer realm="mcp",resource_metadata="${Li.origin}${Li.pathname}/.well-known/oauth-protected-resource"`}})}return await e()};if(B.use("/mcp/:connectionId?",ci),B.use("/mcp/gateway/:virtualMcpId?",ci),B.use("/mcp/virtual-mcp/:virtualMcpId?",ci),B.use("/mcp/self",ci),X_()){let{mountDevRoutes:M}=(ait(),zxi(eit));M(B,ci)}let ii=new Hu;ii.use("*",Qd({mountPath:"/mcp"})),ii.route("/",oyi()),B.route("/mcp",ii);let m=new Hu;m.use("*",Qd({mountPath:"/mcp/self"})),m.route("/",Zxi()),B.route("/mcp/self",m);let Oi=new Hu;Oi.use("*",Qd({mountPath:"/mcp"})),Oi.route("/",iFi()),B.route("/mcp",Oi),B.use("/api/:org/models/*",async(M,e)=>{ud(M,"llm_models");try{return await e()}finally{Vw(M,"llm_models")}});let _i=H3u({cancelBroadcast:$,streamBuffer:w,runRegistry:g,linkStatusProbe:d});if(B.route("/api",_i),v!=null)e_u=dit({getConnection:()=>v?.getConnection()??null});B.route("/api",Gp0()),B.get("/api/links/me",async(M)=>{try{let e=M.req.header("authorization")??"",Ki=/^Bearer\s+(.+)$/i.exec(e),Li=null;if(Ki){let iu=(Ki[1]??"").trim();Li=await Ip0(iu,w4.api)}else Li=M.get("meshContext")?.auth?.user?.id??null;if(!Li)return M.json({error:"unauthorized"},401);let oi=d?await d(Li):{online:!1,capabilities:[]};if(!oi.online)return M.json(null);return M.json({hostname:oi.hostname,cliVersion:oi.cliVersion})}catch(e){return console.error("[links/me] presence probe failed; reporting offline:",e instanceof Error?e.message:String(e)),M.json(null)}}),B.use("/api/:org/files/*",fK),B.route("/api",rp0);let Ii=new Hu;Ii.use("*",Qd({mountPath:"/api"})),Ii.route("/",Bxi()),B.route("/api",Ii),B.route("/api",Hp0);let Vi=new Hu;Vi.use("*",Qd({mountPath:"/api"})),Vi.route("/",yxi({tokenStorage:G,automationEventDispatcher:V})),B.route("/api",Vi);let Wi=new Mr(u.db),ri=new Hu;ri.use("*",Qd({mountPath:"/api"})),ri.route("/",QPi()),B.route("/api",ri),B.route("/api/deco-sites",qe0()),B.route("/api/deco-apps",Sp0());let gi=new Hu;gi.use("*",Qd({mountPath:"/api/deco-sites"})),gi.route("/",HPi()),B.route("/api/deco-sites",gi);let Ji=new Hu;Ji.use("*",Qd({mountPath:"/api/vm-events"})),Ji.route("/",Jp0()),B.route("/api/vm-events",Ji);let{createPublishRequestHandler:ni,createPublicMCPHandler:Di}=await Promise.resolve().then(() => (Kut(),Jut)),di={db:u.db,vault:{encrypt:(M)=>j.encrypt(M),decrypt:(M)=>j.decrypt(M)}},fi=ni(di),ji=Di(di);B.use("/org/:orgRef/registry/publish-request",tK),B.post("/org/:orgRef/registry/publish-request",fi),B.use("/org/:orgSlug/registry/*",tK),B.all("/org/:orgSlug/registry/*",ji),B.post("/api/:org/registry/publish-request",fi),B.all("/api/:org/registry/*",ji);let a=Pp0({kvStorage:Wi,runRegistry:g,streamBuffer:w,sseHub:A6,cancelBroadcast:$,tokenStorage:G,automationEventDispatcher:V,mountDevAssets:X_(),mcpAuth:ci,oauthProxyHandler:Wut,watchHandler:Qut,betterAuthProtectedResourceHandler:F,getNatsConnection:()=>v?.getConnection()??null});return B.route("/api/:org",a),B.notFound((M)=>{return M.json({error:"Not Found",path:M.req.path},404)}),B.onError(Je0),Object.assign(B,{markShuttingDown:()=>{t=!0},shutdown:async()=>{if(console.log("[shutdown] Stopping workers..."),await Promise.allSettled([A6.stop(),_b?Promise.resolve(_b()).finally(()=>{_b=null}):Promise.resolve()]),v)await v.drain().catch((M)=>console.error("[shutdown] NATS drain error:",M));console.log("[shutdown] Flushing telemetry..."),await C3().catch((M)=>console.error("[shutdown] Telemetry flush error:",M)),console.log("[shutdown] Closing database..."),await R2(u).catch((M)=>console.error("[shutdown] Database close error:",M)),console.log("[shutdown] Cleanup complete.")},initDbos:async()=>{await Vs.registerQueue(N_,{partitionQueue:!0,concurrency:clu,minPollingIntervalMs:Elu}),await Vs.registerQueue(tv,{partitionQueue:!0,concurrency:ztu}),await Vs.registerQueue(E7,{partitionQueue:!0,concurrency:Stu}),await Vs.registerQueue(jO,{partitionQueue:!0,concurrency:Dk0}),await M3u(A),await Promise.allSettled(["automations-gate","automations-global"].map((M)=>Vs.deleteQueue(M))),await $lu(u.pool),zc0().catch((M)=>{console.error("[studio-pack-backfill] failed:",M)}),vau().catch((M)=>{console.error("[org-fs] public-sets boot sync kick failed:",M)})}})}var Lut,Sut=5000,e_u=null,_b=null,Wut=async(i)=>{let u=i.req.param("connectionId");if(!u)return i.json({error:"Missing connectionId"},400);let t=i.req.path.split("/").filter(Boolean),f=t[t.length-1],l=i.get("meshContext");if(!l)l=await H9.create(i.req.raw),i.set("meshContext",l);let c=i.req.param("org")?l.organization?.id:void 0,E=await l.storage.connections.findById(u,c);if(!E?.connection_url)return i.json({error:"Connection not found"},404);let $=await JQ(E.connection_url),w,d=new URL(E.connection_url);if($.ok)w=(await $.json()).authorization_servers?.[0];if(!w)w=d.origin;let _=await xe(w);if(!_.ok)return i.json({error:"Failed to get auth server metadata"},502);let v=await _.json(),h;if(f==="authorize")h=v.authorization_endpoint;else if(f==="token")h=v.token_endpoint;else if(f==="register")h=v.registration_endpoint;if(!h)return i.json({error:`Unknown OAuth endpoint: ${f}`},404);let D=new URL(h),g=new URL(i.req.url);if(D.search=g.search,f==="authorize"){let A=D.searchParams.get("redirect_uri");if(A){let G=Fu().baseUrl??g.origin;try{let q=new URL(A),S=new URL(G);if(!(q.origin===S.origin||q.hostname==="localhost"))return i.json({error:"invalid_request",error_description:"redirect_uri is not allowed"},400)}catch{return i.json({error:"invalid_request",error_description:"redirect_uri is malformed"},400)}D.searchParams.set("redirect_uri",A)}if(D.searchParams.has("resource"))D.searchParams.set("resource",E.connection_url);if(Zt0(E.connection_url))try{let G=await EG4(l,E.organization_id),q=$G4(G);for(let[S,Y]of q)D.searchParams.set(S,Y)}catch(G){console.warn("[oauth-proxy] Failed to get smart OAuth params, proceeding without:",G)}return i.redirect(D.toString(),302)}let O={Accept:i.req.header("Accept")||"application/json"},Z=i.req.header("Content-Type");if(Z)O["Content-Type"]=Z;let B=i.req.header("Authorization");if(B)O.Authorization=B;let y,F=null,T=null;if(i.req.method!=="GET"&&i.req.method!=="HEAD")if(f==="token"&&Z?.includes("application/x-www-form-urlencoded")){if(B?.toLowerCase().startsWith("basic "))try{let Y=atob(B.slice(6).trim()),V=Y.indexOf(":");if(V!==-1){let L=decodeURIComponent(Y.slice(0,V)),$i=decodeURIComponent(Y.slice(V+1));F=L||null,T=$i||null}}catch{}let A=await i.req.formData();if(A.has("resource"))A.set("resource",E.connection_url);let G=A.get("client_id"),q=A.get("client_secret");if(typeof G==="string"&&G)F=G;if(typeof q==="string"&&q)T=q;let S=new URLSearchParams;for(let[Y,V]of A.entries())S.append(Y,V.toString());y=S.toString()}else if(f==="register"&&Z?.toLowerCase().includes("application/json")){let A=await l.db.selectFrom("organization").select(["id","slug","name"]).where("id","=",E.organization_id).executeTakeFirst(),G=await i.req.text(),q={};try{q=G?JSON.parse(G):{}}catch{y=G}let S=typeof q==="object"&&q!==null&&!Array.isArray(q);if(y===void 0&&!S)y=G;if(y===void 0){let Y=q,V=Y.metadata&&typeof Y.metadata==="object"?Y.metadata:{};Y.metadata={...V,organization_id:E.organization_id,...A?.slug?{organization_slug:A.slug}:{},...A?.name?{organization_name:A.name}:{}},y=JSON.stringify(Y),O["Content-Type"]="application/json"}}else y=i.req.raw.body??void 0;let U=await fetch(D.toString(),{method:i.req.method,headers:O,body:y,duplex:"half",redirect:"manual"}),I=new Headers,j=["connection","keep-alive","transfer-encoding","content-encoding","content-length"];for(let[A,G]of U.headers.entries())if(!j.includes(A.toLowerCase()))I.set(A,G);if(f==="token"&&U.ok){let A=await U.text();try{let G=JSON.parse(A);if(typeof G.access_token==="string"&&G.access_token){let q=typeof G.expires_in==="number"?new Date(Date.now()+G.expires_in*1000):null,S=null;try{S=await KQ(E.connection_url)??h}catch{S=h}let Y={connectionId:u,accessToken:G.access_token,refreshToken:typeof G.refresh_token==="string"?G.refresh_token:null,scope:typeof G.scope==="string"?G.scope:null,expiresAt:q,clientId:F,clientSecret:T,tokenEndpoint:S};await new q1(l.db,l.vault).upsert(Y)}}catch(G){console.error("[oauth-proxy] failed to persist downstream token:",G)}return new Response(A,{status:U.status,statusText:U.statusText,headers:I})}return new Response(U.body,{status:U.status,statusText:U.statusText,headers:I})},Qut=async(i)=>{let u=i.var.meshContext;if(!(u.auth.user?.id??u.auth.apiKey?.userId))return i.json({error:"Unauthorized"},401);let f=u.organization?.id;if(!f)return i.json({error:"organization id missing"},400);let l=i.req.query("types"),c=l?l.split(",").map(($)=>$.trim()).filter(Boolean):null,E=crypto.randomUUID();return zd(i,async($)=>{if(await $.writeSSE({event:"connected",data:JSON.stringify({listenerId:E,organizationId:f,typePatterns:c,connectedAt:new Date().toISOString()})}),!A6.add({id:E,organizationId:f,typePatterns:c?.length?c:null,push:(_)=>{$.writeSSE({id:_.id,event:_.type,data:JSON.stringify(_)}).catch(()=>{A6.remove(f,E)})}})){await $.writeSSE({event:"error",data:JSON.stringify({error:"Too many connections",message:"SSE connection limit reached. Try again later."})});return}let d=setInterval(()=>{$.writeSSE({event:"keepalive",data:""}).catch(()=>{clearInterval(d)})},30000);await new Promise((_)=>{$.onAbort(()=>{clearInterval(d),A6.remove(f,E),_()})})})},wG4,vG4=()=>_G4(w4),hG4=()=>dG4(w4);var T1u=N(()=>{xt();hau();HE();BW();wf();sf();Oci();tf0();vri();w8();Ue();Ywu();QE();z1();e4();Rwu();Vwu();je0();b3u();u5();d3i();R3u();Ke0();C3u();xp0();kp0();Kp0();m3u();Yp0();syi();Ie();bp0();uFi();O_u();Mp0();mp0();N_u();g_u();y4i();iEi();pp0();ew();z$i();Vr();Olu();iit();tit();Eit();wit();_it();Dit();xit();Iit();Joi();Loi();kit();_Ei();Y_u();Sw();q3u();va();Jtu();_Ei();L3u();toi();foi();Xit();UW();Sit();hK();Ywu();Xz();Kdi();Lut=k(i7(),1);wG4=new fG4});var Rut={};zi(Rut,{resolveClientDir:()=>FG4,resolveAssetPathWithTraversalCheck:()=>but,isPathWithinDirectory:()=>Hut,createAssetHandler:()=>TG4});import{resolve as rs,dirname as gG4,join as NG4,extname as OG4,basename as ZG4,sep as zut}from"path";function BG4(i,u){if(i===u||ZG4(i)==="index.html")return{"Cache-Control":"no-cache"};if(i.includes(`${zut}assets${zut}`))return{"Cache-Control":"public, max-age=31536000, immutable"};return{}}function Hut(i,u){let t=rs(u),f=rs(i);return f===t||f.startsWith(t+"/")}function but({requestPath:i,clientDir:u}){let t=i.startsWith("/")?i.slice(1):i,f=rs(u,t);if(!Hut(f,u))return null;return f}function FG4(i,u="../client"){let t=new URL(i),f=gG4(t.pathname);return rs(f,u)}function TG4(i={}){let{env:u="production",clientDir:t=yG4,isServerPath:f=()=>!1}=i;if(u==="development")return async function(c){return null};return async function(c){if(c.method!=="GET")return null;let E=new URL(c.url),$;try{$=decodeURIComponent(E.pathname)}catch{return null}if(f($))return null;let w=but({requestPath:$,clientDir:t});if(!w)return null;let d=NG4(w,"index.html"),_=rs(t,"index.html"),v=c.headers.get("accept"),D=v?.includes("text/html")||v?.includes("*/*")&&["",".html"].includes(OG4(w))?[d,_]:[];for(let g of[w,...D])try{let O=Bun.file(g);if(await O.exists())return new Response(O,{headers:BG4(g,_)})}catch{}if($.includes("/assets/"))return new Response("Not Found",{status:404,headers:{"Cache-Control":"no-store"}});return null}}var yG4="./dist/client";var Cut=()=>{};var Mut={};zi(Mut,{tryUpgradePreviewWs:()=>GG4,tryHandlePreviewHttp:()=>nG4,previewWebSocketHandler:()=>kG4,parsePreviewBaseDomain:()=>AG4,isPreviewWsData:()=>Jxi,extractHandleFromHost:()=>a_u});function xG4(i){if(i.method!=="GET")return!1;return(i.headers.get("accept")??"").includes("text/html")}function IG4(){return new Response(PG4,{status:503,headers:{"content-type":"text/html; charset=utf-8","cache-control":"no-store","retry-after":"1","access-control-allow-origin":"*"}})}function AG4(i){if(!i||i.trim()==="")return null;let u=i.includes("{handle}")?i.replace("{handle}","__handle__"):i,t;try{t=new URL(u)}catch{return null}let f=t.hostname;if(i.includes("{handle}")){let l=f.indexOf(".");if(l<=0||l===f.length-1)return null;return f.slice(l+1)}return f}function a_u(i,u){if(!i||!u)return null;let t=i.indexOf(":"),f=(t>=0?i.slice(0,t):i).toLowerCase(),c=`.${u.toLowerCase().replace(/^\.+|\.+$/g,"")}`;if(!f.endsWith(c))return null;let E=f.slice(0,f.length-c.length);if(!E||E.includes("."))return null;return E}async function nG4(i,u){let t=a_u(i.headers.get("host"),u.baseDomain);if(!t)return null;let f=await u.getRunner();if(!f)return es(503,"preview proxy not configured");let l=await f.proxyPreviewRequest(t,i);if(l.headers.get(OJ)&&xG4(i))return IG4();return l.headers.delete(OJ),l}function es(i,u){return new Response(JSON.stringify({error:u}),{status:i,headers:{"content-type":"application/json","access-control-allow-origin":"*"}})}function Jxi(i){return typeof i==="object"&&i!==null&&i.kind==="preview"}async function GG4(i,u,t){if((i.headers.get("upgrade")??"").toLowerCase()!=="websocket")return null;let f=a_u(i.headers.get("host"),t.baseDomain);if(!f)return null;let l=await t.getRunner();if(!l)return es(503,"preview proxy not configured");let c=await l.resolvePreviewUpstreamUrl(f);if(!c)return es(404,"sandbox not found");let E=new URL(i.url);if(E.pathname.startsWith("/_sandbox")||E.pathname.startsWith("/_decopilot_vm"))return es(404,"not found");let $=`${c.replace(/^http/,"ws")}${E.pathname}${E.search}`,w=i.headers.get("sec-websocket-protocol"),d=w?w.split(",").map((h)=>h.trim()).filter(Boolean):[],_={kind:"preview",upstreamUrl:$,upstreamProtocols:d,pending:[],upstream:null,closed:!1};if(!u.upgrade(i,{data:_}))return es(426,"upgrade failed");return}function ms(i,u,t,f){if(u.closed)return;u.closed=!0;try{i.close(t,f)}catch{}try{u.upstream?.close()}catch{}}var UG4=256,PG4='<!DOCTYPE html><html><head><meta charset="utf-8"><title>Connecting\u2026</title><style>body{font-family:system-ui,sans-serif;display:flex;align-items:center;justify-content:center;min-height:100vh;margin:0;background:#fafafa;color:#555}div{text-align:center;max-width:420px;padding:24px}h3{margin:0 0 8px}p{margin:0;font-size:14px;color:#999;line-height:1.5}</style></head><body><div><h3>Connecting to sandbox\u2026</h3><p>Waiting for the sandbox to come online. This page refreshes automatically.</p></div><script>setTimeout(function(){window.location.reload()},1500)</script></body></html>',kG4;var qut=N(()=>{O1u();kG4={open(i){let u=i.data;if(!Jxi(u))return;let t;try{t=u.upstreamProtocols.length>0?new WebSocket(u.upstreamUrl,u.upstreamProtocols):new WebSocket(u.upstreamUrl)}catch(f){console.warn(`[preview-ws] failed to dial upstream ${u.upstreamUrl}: ${f instanceof Error?f.message:String(f)}`),ms(i,u,1011,"upstream connect failed");return}t.binaryType="arraybuffer",u.upstream=t,t.addEventListener("open",()=>{while(u.pending.length>0){let f=u.pending.shift();if(f!==void 0)t.send(f)}}),t.addEventListener("message",(f)=>{if(u.closed)return;i.send(f.data)}),t.addEventListener("close",(f)=>{ms(i,u,f.code||1000,f.reason||"")}),t.addEventListener("error",()=>{ms(i,u,1011,"upstream error")})},message(i,u){let t=i.data;if(!Jxi(t))return;let f=t.upstream;if(f&&f.readyState===WebSocket.OPEN){f.send(u);return}if(t.pending.length>=UG4){ms(i,t,1011,"preview ws backlog overflow");return}t.pending.push(u)},close(i){let u=i.data;if(!Jxi(u))return;ms(i,u,1000,"")}}});var rut={};zi(rut,{bootstrapDevLinkSession:()=>QG4});import{existsSync as jG4}from"fs";import{chmod as XG4,mkdir as JG4,rename as KG4,writeFile as SG4}from"fs/promises";import{dirname as YG4,join as Vut}from"path";function WG4(i){return Vut(i,"dev-link")}function LG4(i){let u=process.env.DEV_LINK_SESSION_PATH;if(u&&u.trim()!=="")return u;return Vut(WG4(i),"session.json")}async function QG4(i,u){let t=LG4(i),f=qt().db,l=Gd()?await Ca():await f.selectFrom("user").select(["id","email","name"]).orderBy("createdAt","desc").executeTakeFirst();if(!l?.id)return null;if(jG4(t))try{let d=await Bun.file(t).json(),_=d.user?.sub,v=d.accessToken;if(_===l.id&&typeof v==="string"){if(await w4.api.verifyApiKey({body:{key:v}}).then((D)=>D?.valid===!0).catch(()=>!1))return{path:t,userSub:_}}}catch{}let c=null;try{c=await w4.api.createApiKey({body:{name:"dev-link (auto-minted by bun run dev)",userId:l.id,permissions:{"*":["*"]},expiresIn:2592000,rateLimitEnabled:!1}})}catch(w){return console.warn("[dev-link] failed to mint API key:",w instanceof Error?w.message:String(w)),null}if(!c?.key)return null;let E={target:u,clientId:"dev-link",user:{sub:l.id,...l.email?{email:l.email}:{},...l.name?{name:l.name}:{}},accessToken:c.key,createdAt:new Date().toISOString()};await JG4(YG4(t),{recursive:!0});let $=`${t}.tmp`;return await SG4($,JSON.stringify(E,null,2),{mode:384}),await XG4($,384),await KG4($,t),{path:t,userSub:l.id}}var mut=N(()=>{QE();w8();Pg()});var lk4={};import{existsSync as VG4}from"fs";function put(i,u){if(!u)return i;let t=new URL(i);if(!t.searchParams.has("sslmode"))t.searchParams.set("sslmode","verify-full");return t.toString()}function aG4(i){let u=new Headers(i.headers);for(let[t,f]of Object.entries(eG4))u.set(t,f);return new Response(i.body,{status:i.status,statusText:i.statusText,headers:u})}async function fk4(i){let u;try{u=await zG4.create({systemDatabaseUrl:put(I3.databaseUrl,I3.databasePgSsl),systemDatabaseSchemaName:"dbos"});let t=await u.listWorkflows({status:"PENDING",queueName:tv,executorId:i,loadInput:!1,loadOutput:!1});if(t.length===0){console.log(`[shutdown] no in-flight thread-gate gates to hand off (executor ${i})`);return}let f=t.map((l)=>l.workflowID);await u.resumeWorkflows(f,{queueName:tv}),console.log(`[shutdown] re-enqueued ${f.length} in-flight thread-gate gate(s) for re-adoption by a live executor (from ${i}):`,f)}catch(t){console.error("[shutdown] thread-gate handoff failed:",t)}finally{await u?.destroy().catch(()=>{})}}async function Sxi(i){if(sut)return;sut=!0,console.log(`
84678
84678
  [shutdown] Received ${i}, shutting down gracefully...`);let u=Number(process.env.SHUTDOWN_GRACE_SECONDS??60)*1000,t=Math.max(u-5000,1e4),f=setTimeout(()=>{console.error(`[shutdown] Timed out after ${t}ms, forcing exit.`),process.exit(1)},t);f.unref?.();let l=0;try{tk4(),Kxi.markShuttingDown();let c=Number(process.env.SHUTDOWN_DRAIN_MS??Math.floor(t*0.6));await Zt(c),await uk4.stop(!0);let E=as.executorID;await as.shutdown(),await fk4(E),await Kxi.shutdown()}catch(c){console.error("[shutdown] Error during shutdown:",c),l=1}clearTimeout(f),process.exit(l)}var I3,as,zG4,HG4,bG4,RG4,CG4,MG4,i0t,qG4,eut,rG4,mG4,eG4,oG4,sG4,pG4,o_u,s_u,ik4,u0t,aut,Kxi,p_u,out,uk4,tk4,sut=!1;var t0t=N(async()=>{Bl();Reu();xt();z1();eeu();I3=Fu();Wzu();({DBOS:as,DBOSClient:zG4}=await import("@dbos-inc/dbos-sdk"));HG4=[N_,tv,E7,jO],bG4=I3.dispatchRole==="worker"?HG4:I3.dispatchRole==="api"?[]:void 0;as.setConfig(beu({systemDatabaseUrl:put(I3.databaseUrl,I3.databasePgSsl),poolSize:Number(process.env.DBOS_POOL_SIZE??5),executorID:I3.podName,listenQueues:bG4}));({createApp:RG4}=await Promise.resolve().then(() => (T1u(),F1u))),{isServerPath:CG4}=await Promise.resolve().then(() => (y4i(),yzu)),{createAssetHandler:MG4,resolveClientDir:i0t}=await Promise.resolve().then(() => (Cut(),Rut)),qG4=I3.port,eut=i0t(import.meta.url,"../client"),rG4=VG4(eut)?eut:i0t(import.meta.url,"../dist/client"),mG4=MG4({clientDir:rG4,isServerPath:CG4}),eG4={"X-Frame-Options":"DENY","Content-Security-Policy":"frame-ancestors 'none'"};({parsePreviewBaseDomain:oG4,tryHandlePreviewHttp:sG4,tryUpgradePreviewWs:pG4,previewWebSocketHandler:o_u,isPreviewWsData:s_u}=await Promise.resolve().then(() => (qut(),Mut))),{getOrInitSharedRunner:ik4}=await Promise.resolve().then(() => (Qa(),DG0)),u0t=oG4(process.env.STUDIO_SANDBOX_PREVIEW_URL_PATTERN),aut={baseDomain:u0t??"",getRunner:ik4},Kxi=await RG4(),p_u=process.env.DBOS_CONDUCTOR_KEY?.trim(),out=process.env.DBOS_CONDUCTOR_URL?.trim();await as.launch({...p_u?{conductorKey:p_u}:{},...p_u&&out?{conductorURL:out}:{}});console.log(`[dbos] application version: ${as.applicationVersion}`);await Kxi.initDbos();if(!I3.isCli){let{bannerLines:i}=await Promise.resolve().then(() => (xY(),DM));console.log("");for(let u of i())console.log(u)}uk4=Bun.serve({idleTimeout:0,port:qG4,hostname:"0.0.0.0",fetch:async(i,u)=>{if(u0t){let f=await pG4(i,u,aut);if(f===void 0)return;if(f)return f;let l=await sG4(i,aut);if(l)return l}let t=await mG4(i);if(t)return aG4(t);return Kxi.fetch(i,{server:u})},websocket:{open(i){if(s_u(i.data))o_u.open(i)},message(i,u){if(s_u(i.data))o_u.message(i,u)},close(i){if(s_u(i.data))o_u.close(i)}},development:!1}),tk4=meu();if(I3.localMode)Promise.resolve().then(() => (Pg(),Xyi)).then(async({seedLocalMode:i,markSeedComplete:u})=>{try{let t=await i();if(process.env.DEV_LINK_SESSION_PATH)try{let{bootstrapDevLinkSession:f}=await Promise.resolve().then(() => (mut(),rut)),l=I3.baseUrl??`http://localhost:${I3.port}`,c=await f(I3.dataDir,l);if(c)console.log(`[dev-link] session ready at ${c.path} (userSub=${c.userSub})`);else console.warn("[dev-link] no admin user yet \u2014 skipping session bootstrap. The auto-spawned link will refuse to start until an admin exists.")}catch(f){console.error("[dev-link] bootstrap failed:",f)}}catch(t){console.error("Failed to seed local mode:",t)}finally{u()}}).catch(async(i)=>{console.error("Failed to load local-mode module:",i);try{let{markSeedComplete:u}=await Promise.resolve().then(() => (Pg(),Xyi));u()}catch{}});process.on("SIGTERM",()=>Sxi("SIGTERM"));process.on("SIGINT",()=>Sxi("SIGINT"));process.on("SIGHUP",()=>Sxi("SIGHUP"));process.on("unhandledRejection",(i)=>{console.error("[process] Unhandled rejection:",i)});process.on("uncaughtException",(i)=>{console.error("[process] Uncaught exception:",i),Sxi("uncaughtException")})});var i5u={};zi(i5u,{startServer:()=>$k4,interceptConsoleForTui:()=>Ek4});function ck4(i){return i.replace(/\x1b\[[0-9;]*m/g,"")}function Ek4(){let{log:i,warn:u,error:t}=console;function f(...l){let c=l.map((E)=>typeof E==="string"?E:Bun.inspect(E)).join(" ");for(let E of c.split(`
84679
84679
  `)){let $=ck4(E).trim();if(!$)continue;uv({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:$})}}return console.log=f,console.warn=f,console.error=f,Eli(!0),()=>{console.log=i,console.warn=u,console.error=t,Eli(!1)}}async function $k4(i){let u=await GO(Number(i.port)),{settings:t,services:f}=await cli({port:String(u),home:i.home,localMode:i.localMode,skipMigrations:i.skipMigrations,noTui:i.noTui});for(let l of f)iv({name:l.name,status:"ready",port:l.port});AM(),await t0t().then(() => lk4),nM(`http://localhost:${t.port}`)}var u5u=N(()=>{hCi();nO();OCi()});import{parseArgs as wk4}from"util";import{homedir as os}from"os";import{join as Yxi}from"path";function ss(i){if(i.noTui)return!1;return i.isTty===!0}var{values:v4,positionals:vb}=wk4({args:process.argv.slice(2),options:{port:{type:"string",short:"p",default:process.env.PORT||"3000"},"vite-port":{type:"string",default:process.env.VITE_PORT||"4000"},home:{type:"string"},"base-url":{type:"string"},help:{type:"boolean",short:"h",default:!1},version:{type:"boolean",short:"v",default:!1},"skip-migrations":{type:"boolean",default:!1},"no-tui":{type:"boolean",default:!1},"no-local-mode":{type:"boolean",default:!1},"local-sandbox-provider":{type:"boolean",default:!1},hot:{type:"boolean",default:!1},prune:{type:"boolean",default:!1},target:{type:"string"},env:{type:"string",short:"e"},"dry-run":{type:"boolean",default:!1},batch:{type:"string"},limit:{type:"string"},org:{type:"string"}},allowPositionals:!0});if(v4.help)console.log(`
84680
84680
  Deco CMS \u2014 Open-source control plane for your AI agents