decocms 4.102.0 → 4.104.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (245) hide show
  1. package/dist/client/assets/{AlertCircle-C_nk91tH.js → AlertCircle-BRqx3xep.js} +1 -1
  2. package/dist/client/assets/{AreaChart-CmrBd_oc.js → AreaChart-CTIAAql6.js} +1 -1
  3. package/dist/client/assets/{ArrowRight-x5eFsUyE.js → ArrowRight-BvfxmFPm.js} +1 -1
  4. package/dist/client/assets/{ArrowUp-B_NkVhQy.js → ArrowUp-D9gId7O2.js} +1 -1
  5. package/dist/client/assets/{ArrowUpRight-Bjz3wM7_.js → ArrowUpRight-i87r5MHo.js} +1 -1
  6. package/dist/client/assets/{Check-CmXcFUFA.js → Check-CKEgzuW7.js} +1 -1
  7. package/dist/client/assets/{CheckCircle-GzoutZzh.js → CheckCircle-DUFed_ZY.js} +1 -1
  8. package/dist/client/assets/{ChevronDown-BU2ru4r_.js → ChevronDown-BtwsJF3q.js} +1 -1
  9. package/dist/client/assets/{ChevronRight-BLHTQ9Db.js → ChevronRight-NUnWKoQ_.js} +1 -1
  10. package/dist/client/assets/{ChevronUp-3FMqPib6.js → ChevronUp-DihHtLht.js} +1 -1
  11. package/dist/client/assets/{Copy01-BzXUnxIt.js → Copy01-C5bN0aQx.js} +1 -1
  12. package/dist/client/assets/{DotsVertical-BXRC3vMY.js → DotsVertical-hq3t58jm.js} +1 -1
  13. package/dist/client/assets/{Eye-DZiWXjzc.js → Eye-D6wgl9MG.js} +1 -1
  14. package/dist/client/assets/{FilterLines-Dw3b3U6U.js → FilterLines-kzf7tlKR.js} +1 -1
  15. package/dist/client/assets/{Globe01-Ct1oKJdh.js → Globe01-BryNz0dd.js} +1 -1
  16. package/dist/client/assets/{Globe04-BiqYhKIv.js → Globe04-DUBgGRbs.js} +1 -1
  17. package/dist/client/assets/{HardDrive-DV_SLLYZ.js → HardDrive-B-Cz-BH_.js} +1 -1
  18. package/dist/client/assets/{Image01-BoP1xUXy.js → Image01-C-5icdHD.js} +1 -1
  19. package/dist/client/assets/{Key01-C1HipuOz.js → Key01-zw1UNPHV.js} +1 -1
  20. package/dist/client/assets/{LayoutLeft-CxYJNTGI.js → LayoutLeft-ClXrwu6i.js} +1 -1
  21. package/dist/client/assets/{LinkExternal01-CGrGeU4Q.js → LinkExternal01-CUrTcP_i.js} +1 -1
  22. package/dist/client/assets/{Monitor01-C6zpq4qC.js → Monitor01-BntiOroW.js} +1 -1
  23. package/dist/client/assets/{Package-nklzvxt3.js → Package-CyI3pPtY.js} +1 -1
  24. package/dist/client/assets/{Palette-vt3KT1N3.js → Palette-Bf9UBt-Z.js} +1 -1
  25. package/dist/client/assets/{Play-C8mWR1Az.js → Play-cf98mvjp.js} +1 -1
  26. package/dist/client/assets/{Plus-7RPIQWLb.js → Plus-6kDymf85.js} +1 -1
  27. package/dist/client/assets/{SearchLg-CWLjZme7.js → SearchLg-Ca6Gs9PO.js} +1 -1
  28. package/dist/client/assets/{SearchMd-4O6fg9oW.js → SearchMd-Bq5ma3BB.js} +1 -1
  29. package/dist/client/assets/{Settings02-DU8SxETa.js → Settings02-DJcNlPiV.js} +1 -1
  30. package/dist/client/assets/{Shield01-oWOP2zLR.js → Shield01-BOWKmWSM.js} +1 -1
  31. package/dist/client/assets/{Star01-kfwc8V_o.js → Star01-4luDViOK.js} +1 -1
  32. package/dist/client/assets/{Stars01-C1l0RlUa.js → Stars01-DbhvFj37.js} +1 -1
  33. package/dist/client/assets/{Stars02-C3tFxKGI.js → Stars02-CSMCax45.js} +1 -1
  34. package/dist/client/assets/{Sun-CkVbwhKo.js → Sun-BS_t5Sm5.js} +1 -1
  35. package/dist/client/assets/{SwitchHorizontal01-BP51S8DS.js → SwitchHorizontal01-B78Wff9t.js} +1 -1
  36. package/dist/client/assets/{Tool01-DE3j460t.js → Tool01-CSTeisaV.js} +1 -1
  37. package/dist/client/assets/{Tool02-BQUR2DKB.js → Tool02-BFPH6-tL.js} +1 -1
  38. package/dist/client/assets/{Trash01-cB1sS901.js → Trash01-D6SSf8SM.js} +1 -1
  39. package/dist/client/assets/{TrendUp01-Ddu99xHU.js → TrendUp01-uCNtQJGh.js} +1 -1
  40. package/dist/client/assets/{Upload01-CYVHio4I.js → Upload01-IWZGSkQD.js} +1 -1
  41. package/dist/client/assets/{User01-CtR14f1U.js → User01-h19-qQKE.js} +1 -1
  42. package/dist/client/assets/{Users01-BqyJARKJ.js → Users01-BVosV5Zq.js} +1 -1
  43. package/dist/client/assets/{Users03-CQdAxDaw.js → Users03-BnKaYSKo.js} +1 -1
  44. package/dist/client/assets/{X-CAmHDMPk.js → X-Cl_lyAjH.js} +1 -1
  45. package/dist/client/assets/{XCircle-CANBtGHI.js → XCircle-DrkKVisl.js} +1 -1
  46. package/dist/client/assets/{XClose-BAfFl7aF.js → XClose-Bqw0j4zC.js} +1 -1
  47. package/dist/client/assets/{Zap-YiLxlwec.js → Zap-CRHRXn7z.js} +1 -1
  48. package/dist/client/assets/{ZapSquare-DkWTs6ms.js → ZapSquare-BNsFa87S.js} +1 -1
  49. package/dist/client/assets/{ZoomOut-C_3JH0WD.js → ZoomOut-Bdun-ybj.js} +1 -1
  50. package/dist/client/assets/{access-gate-D9ZNkrgA.js → access-gate-BqRQWMeI.js} +1 -1
  51. package/dist/client/assets/{add-section-modal-D-r-HB6h.js → add-section-modal-DmyUgFgN.js} +1 -1
  52. package/dist/client/assets/{agent-icon-VQci6jYK.js → agent-icon-gGMqm39Y.js} +1 -1
  53. package/dist/client/assets/{agents-list-BBAnTAXz.js → agents-list-DJkGR1B7.js} +1 -1
  54. package/dist/client/assets/{ai-providers-CfWuGi9h.js → ai-providers-FXkuA6xr.js} +1 -1
  55. package/dist/client/assets/{alert-DqafSjaL.js → alert-EqBw_yIC.js} +1 -1
  56. package/dist/client/assets/{alert-dialog-GMDN2a2p.js → alert-dialog-BhTFO1xE.js} +3 -3
  57. package/dist/client/assets/app-editor-CLJXkmZ1.js +1 -0
  58. package/dist/client/assets/{auth-D3hjVX0I.js → auth-CC0hVF1j.js} +1 -1
  59. package/dist/client/assets/{auth-catchall-DCIWbV2r.js → auth-catchall-qFVbHjsU.js} +1 -1
  60. package/dist/client/assets/{auth-entry-CzwaudQl.js → auth-entry-B0eRh6Z1.js} +1 -1
  61. package/dist/client/assets/{auth-split-layout-B15UCYf9.js → auth-split-layout-Dps5LnFV.js} +1 -1
  62. package/dist/client/assets/{authenticate-and-persist-oauth-B6DLU1uJ.js → authenticate-and-persist-oauth-CHxJhIDr.js} +1 -1
  63. package/dist/client/assets/{automation-list-row-C69OPCMn.js → automation-list-row-DDcgXspJ.js} +1 -1
  64. package/dist/client/assets/{automation-runs-jf4CQyxT.js → automation-runs-C-RCLuKF.js} +14 -14
  65. package/dist/client/assets/{automations-38lwJ0Pb.js → automations-CYBxh7wL.js} +1 -1
  66. package/dist/client/assets/{autosend-CrLNAcK4.js → autosend-B9JChviy.js} +1 -1
  67. package/dist/client/assets/{avatar-DGoq0KTj.js → avatar-D2Ibs6zj.js} +1 -1
  68. package/dist/client/assets/{badge-ICotptLx.js → badge-WaoanX2u.js} +1 -1
  69. package/dist/client/assets/{block-document-_k2vMK-w.js → block-document-DxcFxi9r.js} +1 -1
  70. package/dist/client/assets/{brand-context-B9pILASi.js → brand-context-NxGH-6zR.js} +1 -1
  71. package/dist/client/assets/{buckets-DwIjpZ7F.js → buckets-cqrj_dAj.js} +1 -1
  72. package/dist/client/assets/bulk-category-panel-Ca_By5bp.js +1 -0
  73. package/dist/client/assets/{calendar-BFIHiiFD.js → calendar-yjvySUql.js} +1 -1
  74. package/dist/client/assets/{capability-load-error-CghFcLQ5.js → capability-load-error-CoZ48QgK.js} +1 -1
  75. package/dist/client/assets/{card-DeRX92PE.js → card-gNDjFGep.js} +1 -1
  76. package/dist/client/assets/category-editor-BH2HxeFP.js +1 -0
  77. package/dist/client/assets/{chat-context-B9cQc_h3.js → chat-context-B5rz213z.js} +1 -1
  78. package/dist/client/assets/{checkbox-CvYv_Km6.js → checkbox-D4JNeDbC.js} +1 -1
  79. package/dist/client/assets/{cli-auth-success-DbrcSaQM.js → cli-auth-success-BIuDb680.js} +1 -1
  80. package/dist/client/assets/{collection-detail-D_jZAWBQ.js → collection-detail-TexT8fDE.js} +1 -1
  81. package/dist/client/assets/{collection-display-button-C91SGRBy.js → collection-display-button-BmTCVJk9.js} +1 -1
  82. package/dist/client/assets/{collection-search-tV8cd3K2.js → collection-search-OxgUuTDC.js} +1 -1
  83. package/dist/client/assets/{collection-table-wrapper-B0sW2nuq.js → collection-table-wrapper-6MozrKcJ.js} +1 -1
  84. package/dist/client/assets/{collection-tabs-CORSMF6h.js → collection-tabs-wFROlbKE.js} +1 -1
  85. package/dist/client/assets/{command-BOlKzV0V.js → command-CPJ3-fx9.js} +1 -1
  86. package/dist/client/assets/commerce-onboarding-CKbgdpWn.js +1 -0
  87. package/dist/client/assets/{companions-core-oBQaybV8.js → companions-core-Cpw1YNEa.js} +1 -1
  88. package/dist/client/assets/{connect-DoEAuWku.js → connect-PjtNV5Et.js} +1 -1
  89. package/dist/client/assets/{connect-desktop-dialog-dbCJQTWC.js → connect-desktop-dialog-D1LywKPY.js} +1 -1
  90. package/dist/client/assets/{connection-card-NrIXzO1v.js → connection-card-BTp_Mexf.js} +1 -1
  91. package/dist/client/assets/{connection-detail-DJ_6dzel.js → connection-detail-h2UhV5I3.js} +1 -1
  92. package/dist/client/assets/{connection-form-helpers-Dq97qH29.js → connection-form-helpers-pJAJWYOQ.js} +1 -1
  93. package/dist/client/assets/{connections-DJIWkSt4.js → connections-I0rMCbY8.js} +1 -1
  94. package/dist/client/assets/{decopilot-sse-pool-DNUfg0HV.js → decopilot-sse-pool-BKYCROku.js} +1 -1
  95. package/dist/client/assets/{dialog-CtcL8Rge.js → dialog-ZqiHDqPF.js} +1 -1
  96. package/dist/client/assets/{domain-settings-CENW7GQu.js → domain-settings-BrXjZEu1.js} +1 -1
  97. package/dist/client/assets/{drawer-C31EzZAL.js → drawer-DQaSiCfP.js} +1 -1
  98. package/dist/client/assets/{dropdown-menu-BqJxwxsq.js → dropdown-menu-Def3XQ2r.js} +1 -1
  99. package/dist/client/assets/{empty-state-BoA_YW3D.js → empty-state-Bv0o4pop.js} +1 -1
  100. package/dist/client/assets/{extract-connection-data--_aU5sYg.js → extract-connection-data-DliliWWi.js} +1 -1
  101. package/dist/client/assets/file-explorer-CgJTQxdk.js +2 -0
  102. package/dist/client/assets/{file-type-icon-BqEXVrTQ.js → file-type-icon-K2dXxjrg.js} +1 -1
  103. package/dist/client/assets/{files-Bye5Bbv6.js → files-BpUaRdzk.js} +1 -1
  104. package/dist/client/assets/{form-B5plGGFv.js → form-hSS6YV_K.js} +1 -1
  105. package/dist/client/assets/{general-Jd2yB-b8.js → general-mfcsqfrX.js} +1 -1
  106. package/dist/client/assets/github-repo-picker-gznstzb9.js +1 -0
  107. package/dist/client/assets/{hooks-v_4liDIo.js → hooks-C3cd-7It.js} +1 -1
  108. package/dist/client/assets/{index-DA5rV0RV.js → index-0_RcfZs5.js} +1 -1
  109. package/dist/client/assets/{index-BnE6Altg.js → index-5q66t9__.js} +1 -1
  110. package/dist/client/assets/{index-BAxO0Mwx.js → index-B9cuRTAq.js} +1 -1
  111. package/dist/client/assets/{index-Dt1PB5Sc.js → index-Bs1Iy52V.js} +1 -1
  112. package/dist/client/assets/{index-Chb0IZth.js → index-CPmAFNBC.js} +1 -1
  113. package/dist/client/assets/index-CriTplNU.js +1 -0
  114. package/dist/client/assets/{index-yINFUQcR.js → index-DV5sb8rn.js} +1 -1
  115. package/dist/client/assets/{index-Bpt5-Vj-.js → index-DawtOaQW.js} +1 -1
  116. package/dist/client/assets/index-DxLKWgfK.js +517 -0
  117. package/dist/client/assets/{index-BzyW0JhV.js → index-NnDGnKWr.js} +1 -1
  118. package/dist/client/assets/index-bQ7eQRAG.js +8 -0
  119. package/dist/client/assets/{index-82forbXV.js → index-raAj8hl6.js} +1 -1
  120. package/dist/client/assets/{index-redirect--8WvwlkD.js → index-redirect-D2qMNgI3.js} +1 -1
  121. package/dist/client/assets/{index-CmUMOI85.js → index-zLQ_KwUp.js} +4 -4
  122. package/dist/client/assets/{input-Cf6f3BmN.js → input-_d3dZcaj.js} +1 -1
  123. package/dist/client/assets/{integration-icon-dAGuZlLn.js → integration-icon-BW4ZUBDF.js} +1 -1
  124. package/dist/client/assets/{invite-member-dialog-DHMIvCZa.js → invite-member-dialog-B4i_qrPG.js} +1 -1
  125. package/dist/client/assets/{label-VkdXgHd7.js → label-BSqo1nfb.js} +1 -1
  126. package/dist/client/assets/{layout-Ci8_KpkR.js → layout-Du_0a-mS.js} +1 -1
  127. package/dist/client/assets/{login-DYMzVGTT.js → login-C1sweMWO.js} +1 -1
  128. package/dist/client/assets/{mcp-oauth-DUnhZRN8.js → mcp-oauth-CJiL395p.js} +1 -1
  129. package/dist/client/assets/{members-C_dKp9cE.js → members-zHaMXlc4.js} +1 -1
  130. package/dist/client/assets/{monaco-editor-Du7tJEjc.js → monaco-editor-B__egIpZ.js} +2 -2
  131. package/dist/client/assets/{monitoring-stats-row-CGa_Hf8X.js → monitoring-stats-row-COOk7YGw.js} +1 -1
  132. package/dist/client/assets/{multi-select-CKCzXjXB.js → multi-select-C-FSYlSF.js} +1 -1
  133. package/dist/client/assets/{oauth-callback-YH1uSwt3.js → oauth-callback-BL-L6UI-.js} +1 -1
  134. package/dist/client/assets/{oauth-callback-ai-provider-CfCAwFe_.js → oauth-callback-ai-provider-C_HMNOh9.js} +1 -1
  135. package/dist/client/assets/{onboarding-BOzlNnjb.js → onboarding-tsx5LMke.js} +1 -1
  136. package/dist/client/assets/{org-install-Bh_jspMI.js → org-install-D_rzgEnE.js} +1 -1
  137. package/dist/client/assets/{org-layout-phPHQXN7.js → org-layout-CYcTViI4.js} +1 -1
  138. package/dist/client/assets/{organization-choice-b-1zF0V4.js → organization-choice-DXt7QQPT.js} +1 -1
  139. package/dist/client/assets/{orgs-BNj-B7ZU.js → orgs-BIM3XY2Q.js} +1 -1
  140. package/dist/client/assets/{page-seo-form-DEBPMXNg.js → page-seo-form-VLW_NzAm.js} +1 -1
  141. package/dist/client/assets/page-seo-sheet-D75ZAusC.js +1 -0
  142. package/dist/client/assets/{popover-RUk1Jxx9.js → popover-BLlzoM5T.js} +1 -1
  143. package/dist/client/assets/post-editor-MhFXsnxa.js +1 -0
  144. package/dist/client/assets/{primitives-DjhzqWF2.js → primitives-BwYP-BE9.js} +1 -1
  145. package/dist/client/assets/{profile-zgo76jeb.js → profile-C0nTmLiS.js} +1 -1
  146. package/dist/client/assets/project-app-view-CRipBtzb.js +1 -0
  147. package/dist/client/assets/record-editor-DwE3lAwY.js +1 -0
  148. package/dist/client/assets/redirect-editor-BGHY1mAE.js +1 -0
  149. package/dist/client/assets/registry-CllMiCFB.js +2 -0
  150. package/dist/client/assets/{registry-layout-BYEc0-pE.js → registry-layout-0J0a2Ujw.js} +1 -1
  151. package/dist/client/assets/{reports-DKgwgjGZ.js → reports-BDrtR7vy.js} +1 -1
  152. package/dist/client/assets/{require-capability-tPbQgnBt.js → require-capability-iEGLG_o_.js} +1 -1
  153. package/dist/client/assets/{required-auth-layout-Bw_23wtD.js → required-auth-layout-BBQqJQ3M.js} +1 -1
  154. package/dist/client/assets/{reset-password-C_05Hu8v.js → reset-password-B2OeOUDh.js} +1 -1
  155. package/dist/client/assets/{roles-BVMrqSER.js → roles-ZGYesZ44.js} +1 -1
  156. package/dist/client/assets/{search-input-D1vvih4b.js → search-input-jKTRliwf.js} +1 -1
  157. package/dist/client/assets/{secrets-BLPRuVeZ.js → secrets-B2GJpjmZ.js} +1 -1
  158. package/dist/client/assets/{sections-editor-qd7Dwqwc.js → sections-editor-B9WQ_qSW.js} +2 -2
  159. package/dist/client/assets/{select-DQl8Nkd-.js → select-LJtxIB-u.js} +1 -1
  160. package/dist/client/assets/{select-model-DDvi29I3.js → select-model-BxAY6ZVn.js} +1 -1
  161. package/dist/client/assets/self-tool-result-B4zU4shH.js +1 -0
  162. package/dist/client/assets/seo-editor-Cv-AlrO0.js +1 -0
  163. package/dist/client/assets/{settings-layout-Bn989CC7.js → settings-layout-Bqxe7Le8.js} +1 -1
  164. package/dist/client/assets/{settings-section-BUqk0nQQ.js → settings-section-DiO-ilon.js} +1 -1
  165. package/dist/client/assets/{shell-controls-B8ZbVsnA.js → shell-controls-BO1iBU8O.js} +1 -1
  166. package/dist/client/assets/{shell-layout-_h-q07bi.js → shell-layout-B-ggkJxp.js} +1 -1
  167. package/dist/client/assets/{sidebar-CCp56Env.js → sidebar-CMBLFeKd.js} +1 -1
  168. package/dist/client/assets/{skeleton-BOpN06w4.js → skeleton-CK77xki0.js} +1 -1
  169. package/dist/client/assets/{sso-BkvAY4e8.js → sso-20c3PF9y.js} +1 -1
  170. package/dist/client/assets/{store-CMf550pL.js → store-fph_z5c6.js} +1 -1
  171. package/dist/client/assets/store-registry-ePKba1tj.js +2 -0
  172. package/dist/client/assets/{studio-tools-BVRXDcEz.js → studio-tools-BDPy4sbt.js} +1 -1
  173. package/dist/client/assets/{switch-BM-HDdky.js → switch-DAZLVlwZ.js} +1 -1
  174. package/dist/client/assets/{table-zJH1gBbm.js → table-DpElKEEr.js} +1 -1
  175. package/dist/client/assets/{tabs-CELqSRxW.js → tabs-BTnvaiWr.js} +1 -1
  176. package/dist/client/assets/{textarea-PL3tBRfL.js → textarea-Ci575ef_.js} +1 -1
  177. package/dist/client/assets/{toggle-group-DSJnwILX.js → toggle-group-j1ezUTaN.js} +1 -1
  178. package/dist/client/assets/{toolbar-XFnqI6aL.js → toolbar-_ubtVWm6.js} +1 -1
  179. package/dist/client/assets/{toolbar-icon-button-Drpylp7y.js → toolbar-icon-button-CzwvD8BJ.js} +1 -1
  180. package/dist/client/assets/{tooltip-DLvHocW9.js → tooltip-y2P8oLl6.js} +1 -1
  181. package/dist/client/assets/{use-ai-providers-DB0PWqc_.js → use-ai-providers-B8Bw0Tf-.js} +1 -1
  182. package/dist/client/assets/{use-api-keys-dCJwGqEj.js → use-api-keys-BhyKb5WG.js} +1 -1
  183. package/dist/client/assets/{use-automations-DHjQTH3C.js → use-automations-_qY82s9O.js} +1 -1
  184. package/dist/client/assets/{use-autosave-BbOXI1wB.js → use-autosave-DsJinH0F.js} +1 -1
  185. package/dist/client/assets/{use-capability-ZRZyXZT2.js → use-capability-BaUd0xWe.js} +1 -1
  186. package/dist/client/assets/{use-clock-tick-DeftYEin.js → use-clock-tick-gdHsdqwN.js} +1 -1
  187. package/dist/client/assets/{use-connection-BvbWEpu1.js → use-connection-BA0SHZq4.js} +1 -1
  188. package/dist/client/assets/{use-copy-_PBbl_ae.js → use-copy-Cn6MReyw.js} +1 -1
  189. package/dist/client/assets/{use-create-virtual-mcp-CsZebPFO.js → use-create-virtual-mcp-qP-tA4jh.js} +1 -1
  190. package/dist/client/assets/{use-debounced-autosave-DpFFxhds.js → use-debounced-autosave-BDgaG6ie.js} +1 -1
  191. package/dist/client/assets/{use-debounced-value-RZv6Czrq.js → use-debounced-value-Z46cTfvU.js} +1 -1
  192. package/dist/client/assets/{use-deco-credits-CPmWdsys.js → use-deco-credits-eJFjSf8h.js} +1 -1
  193. package/dist/client/assets/{use-decopilot-events-Bp76K5aB.js → use-decopilot-events-DIb8-xa4.js} +1 -1
  194. package/dist/client/assets/{use-delete-connection-DM4ddJG8.js → use-delete-connection-BRgvmH64.js} +1 -1
  195. package/dist/client/assets/{use-deployment-admin-CzIxD_pk.js → use-deployment-admin-CFSaL5ar.js} +1 -1
  196. package/dist/client/assets/{use-file-configs-CIAOsadi.js → use-file-configs-CXDDq-eK.js} +1 -1
  197. package/dist/client/assets/{use-infinite-scroll-UBZNLC2q.js → use-infinite-scroll-CSB5LAvZ.js} +1 -1
  198. package/dist/client/assets/{use-join-requests-Df1KaVAV.js → use-join-requests-CVHRtviB.js} +1 -1
  199. package/dist/client/assets/{use-mcp-auth-status-xCpfo047.js → use-mcp-auth-status-CMaGVn6x.js} +1 -1
  200. package/dist/client/assets/{use-mcp-client-FpSZFiJp.js → use-mcp-client-MwuAGCP0.js} +1 -1
  201. package/dist/client/assets/{use-mcp-tools-Bfgi1tbs.js → use-mcp-tools-BLLnaQRh.js} +1 -1
  202. package/dist/client/assets/{use-members-CUYuiUkk.js → use-members-DJzFLRoA.js} +1 -1
  203. package/dist/client/assets/{use-mobile-Bwjx_QMs.js → use-mobile-C13C4uh-.js} +1 -1
  204. package/dist/client/assets/{use-navigate-to-agent-Dlk0IC9Q.js → use-navigate-to-agent-CDRQ3LGW.js} +1 -1
  205. package/dist/client/assets/{use-org-auth-client-B6uCBHg4.js → use-org-auth-client-B3ECJOc5.js} +1 -1
  206. package/dist/client/assets/{use-org-sso-BhLu2IJL.js → use-org-sso-DwM8K-hN.js} +1 -1
  207. package/dist/client/assets/{use-organization-roles-DRWNxAn0.js → use-organization-roles-BoQYsJwI.js} +1 -1
  208. package/dist/client/assets/{use-organization-settings-CNDPvDWL.js → use-organization-settings-BxFrc-MV.js} +1 -1
  209. package/dist/client/assets/{use-registry-app-8Rk9qQRz.js → use-registry-app-F_eDYFGU.js} +1 -1
  210. package/dist/client/assets/{use-registry-connections-Bp9WZcYU.js → use-registry-connections-DRdZgjEN.js} +1 -1
  211. package/dist/client/assets/{use-secrets-C2xWkrG-.js → use-secrets-JzPHoSYH.js} +1 -1
  212. package/dist/client/assets/{use-status-sounds-Cil-9RHI.js → use-status-sounds-CRrS5x2x.js} +1 -1
  213. package/dist/client/assets/{use-view-mode-Dtt2tGe0.js → use-view-mode-BLv7KScm.js} +1 -1
  214. package/dist/client/assets/{use-virtual-mcp-BO12Buo0.js → use-virtual-mcp-DkfSN5A7.js} +1 -1
  215. package/dist/client/assets/useInfiniteQuery-Bulr5qLo.js +1 -0
  216. package/dist/client/assets/useQueries-Daf1r_8_.js +1 -0
  217. package/dist/client/assets/{useRouterState-Sf-Gnpuq.js → useRouterState-id8js3QE.js} +1 -1
  218. package/dist/client/assets/useSuspenseInfiniteQuery-CbOAXJqn.js +1 -0
  219. package/dist/client/assets/{users-C1aTmE5Y.js → users-BKPEAP3d.js} +1 -1
  220. package/dist/client/assets/{variant-calendar-D_jp21Fc.js → variant-calendar-BlplYmKq.js} +1 -1
  221. package/dist/client/assets/{view-mode-toggle-CdCRem0B.js → view-mode-toggle-BMwXmXt9.js} +1 -1
  222. package/dist/client/index.html +1 -1
  223. package/dist/server/cli.js +3 -3
  224. package/dist/server/server.js +3 -3
  225. package/package.json +1 -1
  226. package/dist/client/assets/app-editor-CdS1tGJ2.js +0 -1
  227. package/dist/client/assets/bulk-category-panel-7Z7LJBC2.js +0 -1
  228. package/dist/client/assets/category-editor-DHD2RkWu.js +0 -1
  229. package/dist/client/assets/commerce-onboarding-BkltthW8.js +0 -1
  230. package/dist/client/assets/file-explorer-Dd9gHOUu.js +0 -2
  231. package/dist/client/assets/github-repo-picker-Cy6gXTqi.js +0 -1
  232. package/dist/client/assets/index-Bnc4IoFE.js +0 -517
  233. package/dist/client/assets/index-BqJMq6o8.js +0 -1
  234. package/dist/client/assets/index-C-7MA5rL.js +0 -8
  235. package/dist/client/assets/page-seo-sheet-CMU3RR2I.js +0 -1
  236. package/dist/client/assets/post-editor-BYA6kioK.js +0 -1
  237. package/dist/client/assets/project-app-view-CaeNKaZB.js +0 -1
  238. package/dist/client/assets/record-editor-3_i-4UK5.js +0 -1
  239. package/dist/client/assets/redirect-editor-C87YqCVU.js +0 -1
  240. package/dist/client/assets/registry-Xj97xqvk.js +0 -2
  241. package/dist/client/assets/self-tool-result-DgDO0CYL.js +0 -1
  242. package/dist/client/assets/seo-editor-wLb7dDyd.js +0 -1
  243. package/dist/client/assets/store-registry-DwtUD-KU.js +0 -2
  244. package/dist/client/assets/useInfiniteQuery-C3F84whK.js +0 -1
  245. package/dist/client/assets/useSuspenseInfiniteQuery-CHz5LFPW.js +0 -1
@@ -174,7 +174,7 @@ Reference: https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-sso.ht
174
174
  Then retry.`);console.error(`[ensurePostgres] pg.initialise() failed. dataDir=${f}`,h);let v=Hw(i,"postgres");if(v&&CE(v.pid,"postgres"))return u.state="running",u.pid=v.pid,u.port=v.port,u.owner="managed",u;throw h}await $.start();try{await $.createDatabase(DRu)}catch(h){if(!(h instanceof Error?h.message:String(h)).includes("already exists"))throw h}await uM(c);let d=null;if(K$(l)){let h=pC(l,"utf8").split(`
175
175
  `)[0]?.trim();if(h)d=Number.parseInt(h,10)}if(d)_li(i,"postgres",{pid:d,port:c,startedAt:new Date().toISOString()}),u.pid=d;return u.state="running",u.owner="managed",u}async function JKt(i){let u=Hw(i,"postgres");if(u===null){console.log("PostgreSQL: not running");return}let{pid:t,port:f}=u;if(!Qc(t)){console.log("PostgreSQL: process already dead, cleaning up state"),await I1(i,"postgres");return}if(!CE(t,"postgres")){console.log(`PostgreSQL: PID ${t} no longer belongs to postgres (possible PID reuse), cleaning up state`),await I1(i,"postgres");return}console.log(`PostgreSQL: stopping (PID ${t}, port ${f})...`);let l=Y4(J$(i),"postgres","data");try{await new(await import("embedded-postgres")).default({databaseDir:l,port:f,user:bQi,password:CQi,persistent:!0}).stop()}catch{console.log("PostgreSQL: embedded-postgres stop failed, sending SIGTERM...");try{if(!CE(t,"postgres"))console.log(`PostgreSQL: PID ${t} is no longer postgres, skipping signal`);else{process.kill(t,"SIGTERM");let c=Date.now();while(Date.now()-c<5000&&Qc(t))await N0(200);if(Qc(t)&&CE(t,"postgres"))process.kill(t,"SIGKILL")}}catch{}}await I1(i,"postgres"),console.log("PostgreSQL stopped")}function XKt(){let i=hli(),u=RQi(),t={darwin:"darwin",linux:"linux",win32:"windows"},f={arm64:"arm64",x64:"amd64"},l=t[i],c=f[u];if(!l||!c)throw Error(`Unsupported platform: ${i}/${u}`);return`nats-server-${nRu}-${l}-${c}.${l==="windows"?"zip":"tar.gz"}`}function LKt(i){return Y4(J$(i),"nats","bin",`nats-server${VQi}`)}async function WKt(i){let u=LKt(i);if(K$(u))return u;let t=Y4(J$(i),"nats","bin");TD(t);let f=XKt(),l=`https://github.com/nats-io/nats-server/releases/download/${nRu}/${f}`,c=await fetch(l);if(!c.ok)throw Error(`Failed to download NATS: ${c.status} ${c.statusText}`);let E=Y4(t,f),$=await c.arrayBuffer();JL(E,Buffer.from($));let w=Y4(t,f.replace(/\.(zip|tar\.gz)$/,""));if(_h)await Bun.spawn(["powershell","-Command",`Expand-Archive -Path '${E}' -DestinationPath '${t}' -Force`]).exited;else await Bun.spawn(["tar","-xzf",E,"-C",t]).exited;if(!K$(u)){let d=Y4(w,`nats-server${VQi}`);if(K$(d))hRu(d,u)}if(FKt(w,{recursive:!0,force:!0}),await vRu(E).catch(()=>{}),!_h)await _Ru(u,493);if(!K$(u))throw Error(`NATS binary not found at ${u} after extraction`);return u}function tM(i){return Y4(J$(i),"nats","jwt")}function YKt(i){return Y4(tM(i),"keys.json")}function ERu(i){return Y4(tM(i),"nats-server.conf")}function QKt(i){return Y4(tM(i),"cluster.creds")}function zKt(i){let u=YKt(i);if(K$(u))try{let f=JSON.parse(pC(u,"utf8"));if(v2u(f))return f}catch{}let t=_2u();return TD(tM(i)),JL(u,JSON.stringify(t,null,2),{mode:384}),t}function $Ru(i,u,t){return{publicUrl:`nats://127.0.0.1:${u}`,accountJwt:i.tunnelAccountJwt,accountSigningKey:i.tunnelSigningSeed,operatorJwt:i.operatorJwt,credsPath:t}}async function HKt(i){let u={name:"NATS",state:"stopped",pid:null,port:0,owner:"none"},t=zKt(i),f=await D2u(t),l=QKt(i),c=uui()?"0.0.0.0":"127.0.0.1",E=Hw(i,"nats");if(E!==null)if(CE(E.pid,"nats-server")){if(c==="127.0.0.1")return u.state="running",u.pid=E.pid,u.port=E.port,u.owner="managed",{info:u,tunnel:$Ru(f,E.port,l)};await NRu(i)}else await I1(i,"nats");let $=await iM(),w=await iM();u.port=$;let d=await WKt(i),h=Y4(J$(i),"nats","data"),_=Y4(J$(i),"nats");TD(h),TD(tM(i)),JL(l,f.clusterCreds,{mode:384});let v=n2u({tcpPort:$,wsPort:w,storeDir:h,bindHost:c,artifacts:f});JL(ERu(i),v);let D=Bun.file(Y4(_,"nats.log")),n=Bun.spawn([d,"-c",ERu(i)],{stdout:D,stderr:D});return _li(i,"nats",{pid:n.pid,port:$,wsPort:w,startedAt:new Date().toISOString()}),await uM($),await uM(w),u.state="running",u.pid=n.pid,u.owner="managed",{info:u,tunnel:$Ru(f,$,l)}}async function NRu(i){let u=Hw(i,"nats");if(u===null){console.log("NATS: not running");return}let{pid:t}=u;if(!Qc(t)){console.log("NATS: process already dead, cleaning up state"),await I1(i,"nats");return}if(!CE(t,"nats-server")){console.log(`NATS: PID ${t} no longer belongs to nats-server (possible PID reuse), cleaning up state`),await I1(i,"nats");return}if(console.log(`NATS: stopping (PID ${t})...`),_h)Bun.spawn(["taskkill","/PID",String(t)]);else process.kill(t,"SIGTERM");let f=Date.now();while(Date.now()-f<5000&&Qc(t))await N0(200);if(Qc(t)&&CE(t,"nats-server"))if(console.log("NATS: force killing..."),_h)Bun.spawn(["taskkill","/PID",String(t),"/F"]);else process.kill(t,"SIGKILL");await I1(i,"nats"),console.log("NATS stopped")}function ORu(i,u){return i==="win32"?"minio.exe":"minio"}function yRu(i,u){let t={darwin:"darwin",linux:"linux",win32:"windows"},f={arm64:"arm64",x64:"amd64"},l=t[i],c=f[u];if(!l||!c)throw Error(`Unsupported platform for MinIO: ${i}/${u}`);let E=ORu(i,u);return`https://dl.min.io/server/minio/release/${l}-${c}/${E}`}function RKt(i){return i===void 0||i===""||i==="true"||i==="1"}function bKt(i){return Y4(J$(i),"minio","bin",`minio${VQi}`)}async function CKt(i){let u=bKt(i);if(K$(u))return u;let t=Y4(J$(i),"minio","bin");TD(t);let f=yRu(hli(),RQi()),l=await fetch(f);if(!l.ok)throw Error(`Failed to download MinIO: ${l.status} ${l.statusText}`);let c=await l.arrayBuffer(),E=`${u}.download-${process.pid}`;if(JL(E,Buffer.from(c)),!_h)await _Ru(E,493);if(hRu(E,u),!K$(u))throw Error(`MinIO binary not found at ${u} after download`);return u}async function MKt(i,u=30000){let t=`http://127.0.0.1:${i}/minio/health/ready`,f=Date.now();while(Date.now()-f<u){try{if((await fetch(t)).status===200)return}catch{}await N0(200).catch(()=>{})}throw Error(`Timed out waiting for MinIO readiness at ${t}`)}async function wRu(i){let{S3Client:u,CreateBucketCommand:t}=await Promise.resolve().then(() => (sC(),cRu)),f=new u({endpoint:i,region:"auto",credentials:{accessKeyId:MQi,secretAccessKey:qQi},forcePathStyle:!0});try{await bl(()=>f.send(new t({Bucket:gRu})),{maxAttempts:5,minTimeout:200,maxTimeout:3000,isRetriable:(l)=>l instanceof Error&&/ECONNREFUSED|ECONNRESET|EPIPE|socket|fetch failed|timed out|network/i.test(`${l.name??""} ${l.message}`)})}catch(l){let c=l&&typeof l==="object"&&"name"in l?String(l.name):"";if(c!=="BucketAlreadyOwnedByUs"&&c!=="BucketAlreadyExists"&&!(l instanceof Error&&l.message.includes("already")))throw f.destroy(),l}f.destroy()}async function qKt(i){let u={name:"MinIO",state:"stopped",pid:null,port:0,owner:"none"},t=Hw(i,"minio");if(t!==null){if(CE(t.pid,"minio"))return u.state="running",u.pid=t.pid,u.port=t.port,u.owner="managed",await wRu(`http://127.0.0.1:${t.port}`),u;await I1(i,"minio")}let f=await iM();u.port=f;let l=await CKt(i),c=Y4(J$(i),"minio","data"),E=Y4(J$(i),"minio");TD(c);let $=Bun.file(Y4(E,"minio.log")),w=Bun.spawn([l,"server",c,"--address",`:${f}`],{env:{...process.env,MINIO_ROOT_USER:MQi,MINIO_ROOT_PASSWORD:qQi},stdout:$,stderr:$});return _li(i,"minio",{pid:w.pid,port:f,startedAt:new Date().toISOString()}),await MKt(f),await wRu(`http://127.0.0.1:${f}`),u.state="running",u.pid=w.pid,u.owner="managed",u}async function VKt(i){let u=Hw(i,"minio");if(u===null){console.log("MinIO: not running");return}let{pid:t}=u;if(!Qc(t)){console.log("MinIO: process already dead, cleaning up state"),await I1(i,"minio");return}if(!CE(t,"minio")){console.log(`MinIO: PID ${t} no longer belongs to minio (possible PID reuse), cleaning up state`),await I1(i,"minio");return}if(console.log(`MinIO: stopping (PID ${t})...`),_h)Bun.spawn(["taskkill","/PID",String(t)]);else process.kill(t,"SIGTERM");let f=Date.now();while(Date.now()-f<5000&&Qc(t))await N0(200);if(Qc(t)&&CE(t,"minio"))if(console.log("MinIO: force killing..."),_h)Bun.spawn(["taskkill","/PID",String(t),"/F"]);else process.kill(t,"SIGKILL");await I1(i,"minio"),console.log("MinIO stopped")}function ZRu(i){let u=i.hotReload===!0?["--hot"]:[],t=i.hotReload===!0?["--hot"]:[];return["bun",...u,"run","--cwd=apps/mesh","src/cli.ts","link",i.clusterUrl,"--port",String(i.port),"--no-tui",...t]}async function rKt(i){let u={name:"Link",state:"stopped",pid:null,port:0,owner:"none"},t=Hw(i.home,"link");if(t!==null){if(CE(t.pid,HQi,"args"))return u.state="running",u.pid=t.pid,u.port=t.port,u.owner="managed",{info:u,proc:null};await I1(i.home,"link")}if(i.beforeSpawn)await i.beforeSpawn();let f=await iM();u.port=f;let l=Bun.spawn(ZRu({clusterUrl:i.clusterUrl,port:f,hotReload:i.hotReload}),{cwd:i.repoRoot,env:{...process.env,MESH_CLUSTER_URL:i.clusterUrl,DATA_DIR:i.linkDataDir,DECOCMS_HOME:i.linkDataDir,DECOCMS_LINK_MANAGED:"1"},stdio:i.stdio??["inherit","inherit","inherit"]});_li(i.home,"link",{pid:l.pid,port:f,startedAt:new Date().toISOString()}),i.onSpawn?.(l);try{await uM(f)}catch(c){try{l.kill()}catch{}throw await I1(i.home,"link"),c}return u.state="running",u.pid=l.pid,u.owner="managed",{info:u,proc:l}}async function TRu(i){let u=Hw(i,"link");if(u===null){console.log("Link: not running");return}let{pid:t}=u;if(!Qc(t)){console.log("Link: process already dead, cleaning up state"),await I1(i,"link");return}if(!CE(t,HQi,"args")){console.log(`Link: PID ${t} no longer belongs to the link daemon (possible PID reuse), cleaning up state`),await I1(i,"link");return}if(console.log(`Link: stopping (PID ${t})...`),_h)Bun.spawn(["taskkill","/PID",String(t)]);else process.kill(t,"SIGTERM");let f=Date.now();while(Date.now()-f<5000&&Qc(t))await N0(200);if(Qc(t)&&CE(t,HQi,"args"))if(console.log("Link: force killing..."),_h)Bun.spawn(["taskkill","/PID",String(t),"/F"]);else process.kill(t,"SIGKILL");await I1(i,"link"),console.log("Link stopped")}function dRu(i){return c6(eKt,mKt,i,2,0.5)}function oKt(i,u){if(u.aborted)return Promise.resolve();return new Promise((t)=>{let f=()=>{u.removeEventListener("abort",f),t()};u.addEventListener("abort",f,{once:!0}),i.exited.then(()=>{u.removeEventListener("abort",f),t()})})}async function sKt(i,u){while(!u.aborted&&Qc(i))await N0(2000,{signal:u}).catch(()=>{})}async function pKt(i){let u=0;while(!i.signal.aborted){let t=Date.now(),f;try{f=await rKt(i)}catch($){if(i.onDown?.(),i.onLog?.(`[link] daemon failed to start: ${$ instanceof Error?$.message:String($)} \u2014 retrying`),i.signal.aborted)return;await N0(dRu(u++),{signal:i.signal}).catch(()=>{});continue}let l=new AbortController,c=()=>l.abort();if(i.signal.addEventListener("abort",c,{once:!0}),uM(f.info.port,30000,l.signal).then(()=>{if(!l.signal.aborted)i.onReady?.(f.info.port)}).catch(()=>{}),f.proc)await oKt(f.proc,i.signal);else if(f.info.pid!==null)await sKt(f.info.pid,i.signal);if(l.abort(),i.signal.removeEventListener("abort",c),i.signal.aborted)return;i.onDown?.();let E=Date.now()-t;if(E>=aKt)u=0;i.onLog?.(`[link] daemon exited after ${Math.round(E/1000)}s \u2014 respawning`),await N0(dRu(u++),{signal:i.signal}).catch(()=>{})}}function zQi(i,u){try{let t=new URL(i);return t.port?Number.parseInt(t.port,10):u}catch{return u}}async function iJt(i){TD(J$(i.home));let u=i.externalDatabaseUrl!==null,t=i.externalNatsUrl!==null,f=Boolean(process.env.S3_ENDPOINT&&process.env.S3_BUCKET&&process.env.S3_ACCESS_KEY_ID&&process.env.S3_SECRET_ACCESS_KEY),l=i.skipMinio===!0||f,c=u?{name:"PostgreSQL",state:"external",pid:null,port:zQi(i.externalDatabaseUrl,5432),owner:"external"}:await KKt(i.home),E=null,$;if(t)$={name:"NATS",state:"external",pid:null,port:zQi(i.externalNatsUrl,4222),owner:"external"};else{let v=await HKt(i.home);if($=v.info,E=v.tunnel,uui()&&E){let D=await T2u({natsPort:$.port});E={...E,publicUrl:D.config.publicUrl},console.log(`[dev-nats-toxiproxy] daemon NATS routed through ${D.config.publicUrl} -> ${D.config.upstream} (admin ${D.config.apiUrl})`)}}let w=[c,$],d=null;if(f){w.push({name:"MinIO",state:"external",pid:null,port:zQi(process.env.S3_ENDPOINT,kKt),owner:"external"});let v=RKt(process.env.S3_FORCE_PATH_STYLE);d={endpoint:process.env.S3_ENDPOINT,bucket:process.env.S3_BUCKET,accessKeyId:process.env.S3_ACCESS_KEY_ID,secretAccessKey:process.env.S3_SECRET_ACCESS_KEY,forcePathStyle:v}}else if(!l){let v=await qKt(i.home);w.push(v),d={endpoint:`http://127.0.0.1:${v.port}`,bucket:gRu,accessKeyId:MQi,secretAccessKey:qQi,forcePathStyle:!0}}if(d){if(process.env.S3_ENDPOINT=d.endpoint,process.env.S3_BUCKET=d.bucket,process.env.S3_ACCESS_KEY_ID=d.accessKeyId,process.env.S3_SECRET_ACCESS_KEY=d.secretAccessKey,d.forcePathStyle)process.env.S3_FORCE_PATH_STYLE="true"}if(E)process.env.NATS_PUBLIC_URL=E.publicUrl,process.env.NATS_ACCOUNT_JWT=E.accountJwt,process.env.NATS_ACCOUNT_SIGNING_KEY=E.accountSigningKey,process.env.NATS_OPERATOR_JWT=E.operatorJwt,process.env.NATS_TUNNEL_PUBLIC_ENABLED="true",process.env.NATS_CREDS=E.credsPath;let h=u?i.externalDatabaseUrl:SKt(c.port),_=t?i.externalNatsUrl:`nats://localhost:${$.port}`;return{services:w,outputs:{databaseUrl:h,natsUrls:[_],s3:d,natsTunnel:E}}}async function uJt(i){if(await TRu(i),await JKt(i),await NRu(i),await VKt(i),uui())await B2u().catch(()=>{});console.log(`
176
176
  All managed services stopped.`)}async function tJt(i){let u=[],t=Hw(i,"postgres");if(t!==null&&Qc(t.pid))u.push({name:"PostgreSQL",state:"running",pid:t.pid,port:t.port,owner:"managed"});else{if(t!==null)await I1(i,"postgres");u.push({name:"PostgreSQL",state:"stopped",pid:null,port:0,owner:"none"})}let f=Hw(i,"nats");if(f!==null&&Qc(f.pid))u.push({name:"NATS",state:"running",pid:f.pid,port:f.port,owner:"managed"});else{if(f!==null)await I1(i,"nats");u.push({name:"NATS",state:"stopped",pid:null,port:0,owner:"none"})}let l=Hw(i,"minio");if(l!==null&&Qc(l.pid))u.push({name:"MinIO",state:"running",pid:l.pid,port:l.port,owner:"managed"});else{if(l!==null)await I1(i,"minio");u.push({name:"MinIO",state:"stopped",pid:null,port:0,owner:"none"})}let c=Hw(i,"link");if(c!==null&&Qc(c.pid))u.push({name:"Link",state:"running",pid:c.pid,port:c.port,owner:"managed"});else{if(c!==null)await I1(i,"link");u.push({name:"Link",state:"stopped",pid:null,port:0,owner:"none"})}return u}function fJt(i){console.log("Service State PID Port Owner"),console.log("---------- ---------- ----- ----- ----------");for(let f of i){let l=f.name.padEnd(10),c=f.state.padEnd(10),E=(f.pid?.toString()??"-").padEnd(5),$=(f.port?String(f.port):"-").padEnd(5),w=f.owner;console.log(`${l} ${c} ${E} ${$} ${w}`)}}var bQi="postgres",CQi="postgres",DRu="postgres",nRu="v2.14.2",MQi="minioadmin",qQi="minioadmin",gRu="studio-dev",kKt=9000,_h,VQi,HQi="cli.ts link",mKt=500,eKt=30000,aKt=30000;var kN=g(()=>{O4();g2u();F2u();_h=hli()==="win32",VQi=_h?".exe":""});var FRu={};Ji(FRu,{servicesCommand:()=>lJt});function BRu(i){if(!i)return null;try{let t=new URL(i).hostname;if(t==="localhost"||t==="127.0.0.1"||t==="::1")return null;return i}catch{return null}}async function lJt(i){let{subcommand:u,home:t}=i,{ensureServices:f,stopServices:l,getStatus:c,printTable:E}=await Promise.resolve().then(() => (kN(),xN));switch(u){case"up":{await f({home:t,externalDatabaseUrl:BRu(process.env.DATABASE_URL),externalNatsUrl:BRu(process.env.NATS_URL)});break}case"down":{await l(t);break}case"status":{let $=await c(t);E($);break}default:console.error(`Unknown services subcommand: ${u}
177
- Usage: deco services <up|down|status>`),process.exit(1)}}import{homedir as cJt}from"os";function $Jt(i){let u=(i??"").trim();return EJt.has(u)?u:"all"}function PRu(i,u,t){return Number(t??(i==="worker"?0:Math.floor(u*0.6)))}function XL(i){return i==="true"||i==="1"}function wJt(i){if(i===void 0||i==="")return;return XL(i)}function dJt(i,u,t){if(u===void 0||u==="")return t;let f=Number(u);if(!Number.isSafeInteger(f)||f<=0)throw Error(`${i} must be a positive integer`);return f}function hJt(i,u){if(i===void 0||i==="")return u;return i==="true"||i==="1"}function URu(i){if(!i)return null;try{let t=new URL(i).hostname;if(t==="localhost"||t==="127.0.0.1"||t==="::1")return null;return i}catch{return null}}function vJt(i){let u=i&&i.length>0?i:"user-desktop";if(u==="cluster")return"agent-sandbox";if(!_Jt.has(u))throw Error(`Unknown STUDIO_SANDBOX_PROVIDER="${i}" \u2014 expected "agent-sandbox", legacy "cluster", or "user-desktop".`);return u}function vli(i,u){let t=i.home||u.DATA_DIR||u.DECOCMS_HOME||`${cJt()}/deco`,f=i.localMode,l=i.nodeEnv||u.NODE_ENV||"development",c=u.NATS_URL||"nats://localhost:4222",E=wJt(u.NATS_TUNNEL_PUBLIC_ENABLED)??!!u.NATS_PUBLIC_URL;return{settings:{nodeEnv:l,port:Number(i.port)||Number(u.PORT)||3000,baseUrl:i.baseUrl||u.BASE_URL,dataDir:t,databasePgSsl:XL(u.DATABASE_PG_SSL),databasePoolMax:Number(u.DATABASE_POOL_MAX)||5,betterAuthSecret:u.BETTER_AUTH_SECRET||"",encryptionKey:u.ENCRYPTION_KEY||"",meshJwtSecret:u.MESH_JWT_SECRET,localMode:f,disableRateLimit:XL(u.DISABLE_RATE_LIMIT),studioProvisionSecretKey:u.STUDIO_PROVISION_SECRET_KEY,deploymentAdminEmails:(u.DEPLOYMENT_ADMIN_EMAILS??"").split(",").map((w)=>w.trim().toLowerCase()).filter(Boolean),clickhouseUrl:u.CLICKHOUSE_URL,clickhouseMaxMemoryUsage:Number(u.CLICKHOUSE_MAX_MEMORY_USAGE)||void 0,monitoringOtlpEndpoint:u.MONITORING_OTLP_ENDPOINT,otelServiceName:u.OTEL_SERVICE_NAME||"studio",natsPublicUrl:u.NATS_PUBLIC_URL,natsTunnelPublicEnabled:E,natsTunnelSessionTtlSeconds:dJt("NATS_TUNNEL_SESSION_TTL_SECONDS",u.NATS_TUNNEL_SESSION_TTL_SECONDS,900),natsOperatorJwt:u.NATS_OPERATOR_JWT,natsAccountJwt:u.NATS_ACCOUNT_JWT,natsAccountSigningKey:u.NATS_ACCOUNT_SIGNING_KEY,natsCredsPath:u.NATS_CREDS,configPath:u.CONFIG_PATH||"./config.json",aiGatewayEnabled:XL(u.DECO_AI_GATEWAY_ENABLED),aiGatewayUrl:u.DECO_AI_GATEWAY_URL||"https://ai-site.deco.site",enableDecoImport:XL(u.ENABLE_DECO_IMPORT),mcpCacheEnabled:hJt(u.MCP_CACHE_ENABLED,l!=="development"),orgFsPublicSetsJson:u.ORGFS_PUBLIC_SETS,orgFsMountsDisabled:XL(u.DISABLE_ORGFS_MOUNTS),s3Endpoint:u.S3_ENDPOINT,s3Bucket:u.S3_BUCKET,s3Region:u.S3_REGION||"auto",s3AccessKeyId:u.S3_ACCESS_KEY_ID,s3SecretAccessKey:u.S3_SECRET_ACCESS_KEY,s3ForcePathStyle:u.S3_FORCE_PATH_STYLE===void 0||u.S3_FORCE_PATH_STYLE===""||u.S3_FORCE_PATH_STYLE==="true"||u.S3_FORCE_PATH_STYLE==="1",monitoringS3Bucket:u.MONITORING_S3_BUCKET,monitoringS3Endpoint:u.MONITORING_S3_ENDPOINT,monitoringS3Region:u.MONITORING_S3_REGION,monitoringS3AccessKeyId:u.MONITORING_S3_ACCESS_KEY_ID,monitoringS3SecretAccessKey:u.MONITORING_S3_SECRET_ACCESS_KEY,monitoringS3Prefix:u.MONITORING_S3_PREFIX,duckdbExtensionDirectory:u.DUCKDB_EXTENSION_DIRECTORY||"/opt/duckdb/extensions",duckdbMemoryLimit:u.DUCKDB_MEMORY_LIMIT||void 0,duckdbThreads:u.DUCKDB_THREADS?Number(u.DUCKDB_THREADS):void 0,isCli:!0,noTui:i.noTui===!0,podName:u.POD_NAME??crypto.randomUUID(),dispatchRole:$Jt(u.MESH_DISPATCH_ROLE),sandboxProviderKind:vJt(u.STUDIO_SANDBOX_PROVIDER),decoSupabaseUrl:u.DECO_SUPABASE_URL,decoSupabaseServiceKey:u.DECO_SUPABASE_SERVICE_KEY,firecrawlApiKey:u.FIRECRAWL_API_KEY,commerceDiscoveryInternalApiUrl:u.COMMERCE_DISCOVERY_INTERNAL_API_URL,commerceDiscoveryInternalApiKey:u.COMMERCE_DISCOVERY_INTERNAL_API_KEY,s3TenantBucket:u.S3_TENANT_BUCKET||"new-deco-sites-assets",s3TenantRegion:u.S3_TENANT_REGION||"us-west-2",s3TenantEndpoint:u.S3_TENANT_ENDPOINT,s3TenantPublicUrlBase:u.S3_TENANT_PUBLIC_URL_BASE||"https://decoims.com",awsS3TenantRoleArn:u.AWS_S3_TENANT_ROLE_ARN,awsS3TenantProvisionerAccessKeyId:u.AWS_S3_TENANT_PROVISIONER_ACCESS_KEY_ID,awsS3TenantProvisionerSecretAccessKey:u.AWS_S3_TENANT_PROVISIONER_SECRET_ACCESS_KEY},externalDatabaseUrl:URu(u.DATABASE_URL),externalNatsUrl:URu(c),skipMigrations:i.skipMigrations}}var EJt,_Jt;var Dli=g(()=>{EJt=new Set(["all","worker","api"]);_Jt=new Set(["agent-sandbox","user-desktop"])});function ARu(i){fM=Object.freeze(i)}function yu(){if(!fM)DJt();return fM}function DJt(){if(fM)return;let i={...process.env},u=vli({port:i.PORT||"3000",home:i.DATA_DIR||i.DECOCMS_HOME||"",localMode:i.DECOCMS_LOCAL_MODE==="true",skipMigrations:!0,noTui:i.DECO_NO_TUI==="true",vitePort:i.VITE_PORT,baseUrl:i.BASE_URL},i);fM=Object.freeze({...u.settings,databaseUrl:i.DATABASE_URL??"postgresql://postgres:postgres@localhost:5432/postgres",natsUrls:(i.NATS_URL||"nats://localhost:4222").split(",").map((t)=>t.trim()).filter(Boolean)})}var fM=null;var vt=g(()=>{Dli()});import{context as nJt,propagation as gJt,SpanKind as NJt,SpanStatusCode as mQi}from"@opentelemetry/api";function yJt(i,u){let t=i instanceof Error?i.name:void 0;if(t==="TimeoutError")return"timeout";if(t==="AbortError")return"cancelled";if(u?.aborted)return"cancelled";return null}function ZJt(i,u){if(u.startsWith("/_sandbox/")){if(i===404)return"daemon_gone";if(i===409)return"daemon_not_ready"}if(i===404&&u.includes("/sandboxclaims/"))return"claim_gone";return null}function TJt(i,u){if(i===404&&(u==="/.decofile"||u==="/live/_meta"))return"not_a_deco_site";return null}function BJt(i){if(!(i instanceof Error))return!1;if(i.message.includes("socket connection was closed"))return!0;let u=i.code;return u==="ECONNRESET"||u==="EPIPE"}async function FJt(i,u){let t,f;if(i instanceof Request)t=new URL(i.url),f=u?.method??i.method;else if(i instanceof URL)t=i,f=u?.method??"GET";else t=new URL(i),f=u?.method??"GET";let l=`${f} ${t.host}`;return s2.startActiveSpan(l,{kind:NJt.CLIENT,attributes:{"http.request.method":f,"url.full":t.href,"url.scheme":t.protocol.replace(":",""),"url.path":t.pathname,"url.query":t.search||void 0,"server.address":t.hostname,"server.port":t.port?Number(t.port):void 0}},async(c)=>{try{let E=new Headers(u?.headers??(i instanceof Request?i.headers:{}));gJt.inject(nJt.active(),E,{set:(v,D,n)=>v.set(D,n)});let $={...u,headers:E},w=await OJt(i,$);c.setAttribute("http.response.status_code",w.status);let d=w.status===405&&f==="GET"&&(E.get("accept")??"").includes("text/event-stream"),h=w.status>=400?ZJt(w.status,t.pathname):null,_=w.status>=400?TJt(w.status,t.pathname):null;if(w.status>=400&&!d&&!h&&!_)c.setStatus({code:mQi.ERROR,message:`HTTP ${w.status}`});else{if(h)c.setAttribute("sandbox.lifecycle",h);if(_)c.setAttribute("preview.probe",_);c.setStatus({code:mQi.OK})}return w}catch(E){let $=u?.signal??(i instanceof Request?i.signal:void 0),w=yJt(E,$??void 0);if(w)c.setAttribute("abort.reason",w);else if(BJt(E)&&t.pathname.startsWith("/_sandbox/"))c.setAttribute("sandbox.lifecycle","connection_closed");else c.recordException(E),c.setStatus({code:mQi.ERROR,message:E instanceof Error?E.message:"Fetch failed"});throw E}finally{c.end()}})}function IRu(){globalThis.fetch=FJt}var OJt;var xRu=g(()=>{jl();OJt=globalThis.fetch});import{join as aQi}from"path";function vh(){return aQi(yu().dataDir,"logs")}function LL(){return aQi(yu().dataDir,"traces")}function BD(){return aQi(yu().dataDir,"metrics")}function p2(i,u){let t=i[u];return t!=null?String(t):""}function lM(i,u){let t=i[u];return t!=null&&t!==""?String(t):null}function kRu(i){let{attributes:u}=i,t=u[If.IS_ERROR],f=u[If.DURATION_MS];return{v:1,id:i.id,type:p2(u,If.TYPE)||cM,organization_id:p2(u,If.ORGANIZATION_ID),connection_id:p2(u,If.CONNECTION_ID),connection_title:p2(u,If.CONNECTION_TITLE),tool_name:p2(u,If.TOOL_NAME),input:p2(u,If.INPUT),output:p2(u,If.OUTPUT),is_error:t===!0||t===1||t==="true"?1:0,error_message:lM(u,If.ERROR_MESSAGE),duration_ms:typeof f==="number"?f:Number(f)||0,timestamp:new Date(Number(i.timestampNano/1000000n)).toISOString(),user_id:lM(u,If.USER_ID),request_id:p2(u,If.REQUEST_ID),user_agent:lM(u,If.USER_AGENT),virtual_mcp_id:lM(u,If.VIRTUAL_MCP_ID),properties:lM(u,If.PROPERTIES)}}function gli(i){return i[0]*1000+i[1]/1e6}function YL(i){return new Date(gli(i)).toISOString()}var eQi="mcp.proxy.callTool",If,cM="tool_call",WL="llm_call",nli="decopilot";var Rw=g(()=>{vt();If={TYPE:"studio.monitoring.type",ORGANIZATION_ID:"studio.monitoring.organization_id",CONNECTION_ID:"studio.monitoring.connection_id",CONNECTION_TITLE:"studio.monitoring.connection_title",TOOL_NAME:"studio.monitoring.tool_name",INPUT:"studio.monitoring.input",OUTPUT:"studio.monitoring.output",IS_ERROR:"studio.monitoring.is_error",ERROR_MESSAGE:"studio.monitoring.error_message",DURATION_MS:"studio.monitoring.duration_ms",USER_ID:"studio.monitoring.user_id",REQUEST_ID:"studio.monitoring.request_id",USER_AGENT:"studio.monitoring.user_agent",VIRTUAL_MCP_ID:"studio.monitoring.virtual_mcp_id",PROPERTIES:"studio.monitoring.properties"}});import{ExportResultCode as Nli}from"@opentelemetry/core";import{mkdir as UJt,rename as PJt,writeFile as AJt}from"fs/promises";import{join as Oli}from"path";class GN{bufferItems=[];bufferBytes=0;flushTimer=null;flushQueue=Promise.resolve();basePath;flushThreshold;maxBufferBytes;isShutdown=!1;knownDirs=new Set;partitionKey;constructor(i){this.basePath=i.basePath,this.flushThreshold=i.flushThreshold??1000,this.maxBufferBytes=i.maxBufferBytes??10485760,this.partitionKey=i.partitionKey;let u=i.flushIntervalMs??60000;if(u>0&&u<3600000){if(this.flushTimer=setInterval(()=>{this.flush().catch((t)=>{console.error("[NDJSONExporter] Timer flush failed:",t)})},u),this.flushTimer&&typeof this.flushTimer==="object"&&"unref"in this.flushTimer)this.flushTimer.unref()}}exportRows(i){if(this.isShutdown)return Promise.resolve({code:Nli.FAILED});for(let u of i){let t=JSON.stringify(u),f=this.partitionKey?this.partitionKey(u):"";this.bufferItems.push({partition:f,json:t}),this.bufferBytes+=Buffer.byteLength(t,"utf8")+1}if(this.bufferItems.length>=this.flushThreshold||this.bufferBytes>=this.maxBufferBytes)return this.flush().then(()=>({code:Nli.SUCCESS})).catch((u)=>{return console.error("[NDJSONExporter] Flush failed:",u),{code:Nli.FAILED}});return Promise.resolve({code:Nli.SUCCESS})}async shutdown(){if(this.isShutdown=!0,this.flushTimer)clearInterval(this.flushTimer),this.flushTimer=null;try{await this.flushQueue}catch{}if(this.bufferItems.length>0)await this.flush()}async forceFlush(){try{await this.flushQueue}catch{}if(this.bufferItems.length>0)await this.flush()}flush(){let u=this.flushQueue.catch(()=>{}).then(()=>this.doFlush());return this.flushQueue=u,u}async doFlush(){if(this.bufferItems.length===0)return;let i=this.bufferItems;this.bufferItems=[],this.bufferBytes=0;let u=new Map;for(let l of i){let c=u.get(l.partition);if(!c)c=[],u.set(l.partition,c);c.push(l.json)}let t=await Promise.allSettled(Array.from(u.entries()).map(([l,c])=>this.writeNDJSON(c,l).then(()=>l))),f=t.find((l)=>l.status==="rejected");if(f){let l=new Set;for(let E of t)if(E.status==="fulfilled")l.add(E.value);let c=i.filter((E)=>!l.has(E.partition));this.bufferItems=c.concat(this.bufferItems),this.bufferBytes=0;for(let E of this.bufferItems)this.bufferBytes+=Buffer.byteLength(E.json,"utf8")+1;throw f.reason}}async writeNDJSON(i,u){let t=new Date,f=[String(t.getUTCFullYear()),String(t.getUTCMonth()+1).padStart(2,"0"),String(t.getUTCDate()).padStart(2,"0"),String(t.getUTCHours()).padStart(2,"0")],l=u?Oli(this.basePath,u,...f):Oli(this.basePath,...f);if(!this.knownDirs.has(l))await UJt(l,{recursive:!0,mode:448}),this.knownDirs.add(l);let c=`${crypto.randomUUID()}.ndjson`,E=Oli(l,`.${c}.tmp`),$=Oli(l,c),w=i.join(`
177
+ Usage: deco services <up|down|status>`),process.exit(1)}}import{homedir as cJt}from"os";function $Jt(i){let u=(i??"").trim();return EJt.has(u)?u:"all"}function PRu(i,u,t){return Number(t??(i==="worker"?0:Math.floor(u*0.6)))}function XL(i){return i==="true"||i==="1"}function wJt(i){if(i===void 0||i==="")return;return XL(i)}function dJt(i,u,t){if(u===void 0||u==="")return t;let f=Number(u);if(!Number.isSafeInteger(f)||f<=0)throw Error(`${i} must be a positive integer`);return f}function hJt(i,u){if(i===void 0||i==="")return u;return i==="true"||i==="1"}function URu(i){if(!i)return null;try{let t=new URL(i).hostname;if(t==="localhost"||t==="127.0.0.1"||t==="::1")return null;return i}catch{return null}}function vJt(i){let u=i&&i.length>0?i:"user-desktop";if(u==="cluster")return"agent-sandbox";if(!_Jt.has(u))throw Error(`Unknown STUDIO_SANDBOX_PROVIDER="${i}" \u2014 expected "agent-sandbox", legacy "cluster", or "user-desktop".`);return u}function vli(i,u){let t=i.home||u.DATA_DIR||u.DECOCMS_HOME||`${cJt()}/deco`,f=i.localMode,l=i.nodeEnv||u.NODE_ENV||"development",c=u.NATS_URL||"nats://localhost:4222",E=wJt(u.NATS_TUNNEL_PUBLIC_ENABLED)??!!u.NATS_PUBLIC_URL;return{settings:{nodeEnv:l,port:Number(i.port)||Number(u.PORT)||3000,baseUrl:i.baseUrl||u.BASE_URL,dataDir:t,databasePgSsl:XL(u.DATABASE_PG_SSL),databasePoolMax:Number(u.DATABASE_POOL_MAX)||5,betterAuthSecret:u.BETTER_AUTH_SECRET||"",encryptionKey:u.ENCRYPTION_KEY||"",meshJwtSecret:u.MESH_JWT_SECRET,localMode:f,disableRateLimit:XL(u.DISABLE_RATE_LIMIT),studioProvisionSecretKey:u.STUDIO_PROVISION_SECRET_KEY,deploymentAdminEmails:(u.DEPLOYMENT_ADMIN_EMAILS??"").split(",").map((w)=>w.trim().toLowerCase()).filter(Boolean),clickhouseUrl:u.CLICKHOUSE_URL,clickhouseMaxMemoryUsage:Number(u.CLICKHOUSE_MAX_MEMORY_USAGE)||void 0,monitoringOtlpEndpoint:u.MONITORING_OTLP_ENDPOINT,otelServiceName:u.OTEL_SERVICE_NAME||"studio",natsPublicUrl:u.NATS_PUBLIC_URL,natsTunnelPublicEnabled:E,natsTunnelSessionTtlSeconds:dJt("NATS_TUNNEL_SESSION_TTL_SECONDS",u.NATS_TUNNEL_SESSION_TTL_SECONDS,900),natsOperatorJwt:u.NATS_OPERATOR_JWT,natsAccountJwt:u.NATS_ACCOUNT_JWT,natsAccountSigningKey:u.NATS_ACCOUNT_SIGNING_KEY,natsCredsPath:u.NATS_CREDS,configPath:u.CONFIG_PATH||"./config.json",aiGatewayEnabled:XL(u.DECO_AI_GATEWAY_ENABLED),aiGatewayUrl:u.DECO_AI_GATEWAY_URL||"https://ai-site.deco.site",enableDecoImport:XL(u.ENABLE_DECO_IMPORT),mcpCacheEnabled:hJt(u.MCP_CACHE_ENABLED,l!=="development"),orgFsPublicSetsJson:u.ORGFS_PUBLIC_SETS,orgFsMountsDisabled:XL(u.DISABLE_ORGFS_MOUNTS),s3Endpoint:u.S3_ENDPOINT,s3Bucket:u.S3_BUCKET,s3Region:u.S3_REGION||"auto",s3AccessKeyId:u.S3_ACCESS_KEY_ID,s3SecretAccessKey:u.S3_SECRET_ACCESS_KEY,s3ForcePathStyle:u.S3_FORCE_PATH_STYLE===void 0||u.S3_FORCE_PATH_STYLE===""||u.S3_FORCE_PATH_STYLE==="true"||u.S3_FORCE_PATH_STYLE==="1",monitoringS3Bucket:u.MONITORING_S3_BUCKET,monitoringS3Endpoint:u.MONITORING_S3_ENDPOINT,monitoringS3Region:u.MONITORING_S3_REGION,monitoringS3AccessKeyId:u.MONITORING_S3_ACCESS_KEY_ID,monitoringS3SecretAccessKey:u.MONITORING_S3_SECRET_ACCESS_KEY,monitoringS3Prefix:u.MONITORING_S3_PREFIX,duckdbExtensionDirectory:u.DUCKDB_EXTENSION_DIRECTORY||"/opt/duckdb/extensions",duckdbMemoryLimit:u.DUCKDB_MEMORY_LIMIT||void 0,duckdbThreads:u.DUCKDB_THREADS?Number(u.DUCKDB_THREADS):void 0,isCli:!0,noTui:i.noTui===!0,podName:u.POD_NAME??crypto.randomUUID(),dispatchRole:$Jt(u.MESH_DISPATCH_ROLE),sandboxProviderKind:vJt(u.STUDIO_SANDBOX_PROVIDER),decoSupabaseUrl:u.DECO_SUPABASE_URL,decoSupabaseServiceKey:u.DECO_SUPABASE_SERVICE_KEY,firecrawlApiKey:u.FIRECRAWL_API_KEY,commerceDiscoveryInternalApiUrl:u.COMMERCE_DISCOVERY_INTERNAL_API_URL,commerceDiscoveryInternalApiKey:u.COMMERCE_DISCOVERY_INTERNAL_API_KEY,s3TenantBucket:u.S3_TENANT_BUCKET||"new-deco-sites-assets",s3TenantRegion:u.S3_TENANT_REGION||"us-west-2",s3TenantEndpoint:u.S3_TENANT_ENDPOINT,s3TenantPublicUrlBase:u.S3_TENANT_PUBLIC_URL_BASE||"https://decoims.com",awsS3TenantRoleArn:u.AWS_S3_TENANT_ROLE_ARN,awsS3TenantProvisionerAccessKeyId:u.AWS_S3_TENANT_PROVISIONER_ACCESS_KEY_ID,awsS3TenantProvisionerSecretAccessKey:u.AWS_S3_TENANT_PROVISIONER_SECRET_ACCESS_KEY},externalDatabaseUrl:URu(u.DATABASE_URL),externalNatsUrl:URu(c),skipMigrations:i.skipMigrations}}var EJt,_Jt;var Dli=g(()=>{EJt=new Set(["all","worker","api"]);_Jt=new Set(["agent-sandbox","user-desktop"])});function ARu(i){fM=Object.freeze(i)}function yu(){if(!fM)DJt();return fM}function DJt(){if(fM)return;let i={...process.env},u=vli({port:i.PORT||"3000",home:i.DATA_DIR||i.DECOCMS_HOME||"",localMode:i.DECOCMS_LOCAL_MODE==="true",skipMigrations:!0,noTui:i.DECO_NO_TUI==="true",vitePort:i.VITE_PORT,baseUrl:i.BASE_URL},i);fM=Object.freeze({...u.settings,databaseUrl:i.DATABASE_URL??"postgresql://postgres:postgres@localhost:5432/postgres",natsUrls:(i.NATS_URL||"nats://localhost:4222").split(",").map((t)=>t.trim()).filter(Boolean)})}var fM=null;var vt=g(()=>{Dli()});import{context as nJt,propagation as gJt,SpanKind as NJt,SpanStatusCode as mQi}from"@opentelemetry/api";function yJt(i,u){let t=i instanceof Error?i.name:void 0;if(t==="TimeoutError")return"timeout";if(t==="AbortError")return"cancelled";if(u?.aborted)return"cancelled";return null}function ZJt(i,u){if(u.startsWith("/_sandbox/")){if(i===404)return"daemon_gone";if(i===409)return"daemon_not_ready"}if(i===404&&u.includes("/sandboxclaims/"))return"claim_gone";return null}function TJt(i,u){if(i===404&&(u==="/.decofile"||u==="/live/_meta"||u==="/sprites.svg"))return"not_a_deco_site";return null}function BJt(i){if(!(i instanceof Error))return!1;if(i.message.includes("socket connection was closed"))return!0;let u=i.code;return u==="ECONNRESET"||u==="EPIPE"}async function FJt(i,u){let t,f;if(i instanceof Request)t=new URL(i.url),f=u?.method??i.method;else if(i instanceof URL)t=i,f=u?.method??"GET";else t=new URL(i),f=u?.method??"GET";let l=`${f} ${t.host}`;return s2.startActiveSpan(l,{kind:NJt.CLIENT,attributes:{"http.request.method":f,"url.full":t.href,"url.scheme":t.protocol.replace(":",""),"url.path":t.pathname,"url.query":t.search||void 0,"server.address":t.hostname,"server.port":t.port?Number(t.port):void 0}},async(c)=>{try{let E=new Headers(u?.headers??(i instanceof Request?i.headers:{}));gJt.inject(nJt.active(),E,{set:(v,D,n)=>v.set(D,n)});let $={...u,headers:E},w=await OJt(i,$);c.setAttribute("http.response.status_code",w.status);let d=w.status===405&&f==="GET"&&(E.get("accept")??"").includes("text/event-stream"),h=w.status>=400?ZJt(w.status,t.pathname):null,_=w.status>=400?TJt(w.status,t.pathname):null;if(w.status>=400&&!d&&!h&&!_)c.setStatus({code:mQi.ERROR,message:`HTTP ${w.status}`});else{if(h)c.setAttribute("sandbox.lifecycle",h);if(_)c.setAttribute("preview.probe",_);c.setStatus({code:mQi.OK})}return w}catch(E){let $=u?.signal??(i instanceof Request?i.signal:void 0),w=yJt(E,$??void 0);if(w)c.setAttribute("abort.reason",w);else if(BJt(E)&&t.pathname.startsWith("/_sandbox/"))c.setAttribute("sandbox.lifecycle","connection_closed");else c.recordException(E),c.setStatus({code:mQi.ERROR,message:E instanceof Error?E.message:"Fetch failed"});throw E}finally{c.end()}})}function IRu(){globalThis.fetch=FJt}var OJt;var xRu=g(()=>{jl();OJt=globalThis.fetch});import{join as aQi}from"path";function vh(){return aQi(yu().dataDir,"logs")}function LL(){return aQi(yu().dataDir,"traces")}function BD(){return aQi(yu().dataDir,"metrics")}function p2(i,u){let t=i[u];return t!=null?String(t):""}function lM(i,u){let t=i[u];return t!=null&&t!==""?String(t):null}function kRu(i){let{attributes:u}=i,t=u[If.IS_ERROR],f=u[If.DURATION_MS];return{v:1,id:i.id,type:p2(u,If.TYPE)||cM,organization_id:p2(u,If.ORGANIZATION_ID),connection_id:p2(u,If.CONNECTION_ID),connection_title:p2(u,If.CONNECTION_TITLE),tool_name:p2(u,If.TOOL_NAME),input:p2(u,If.INPUT),output:p2(u,If.OUTPUT),is_error:t===!0||t===1||t==="true"?1:0,error_message:lM(u,If.ERROR_MESSAGE),duration_ms:typeof f==="number"?f:Number(f)||0,timestamp:new Date(Number(i.timestampNano/1000000n)).toISOString(),user_id:lM(u,If.USER_ID),request_id:p2(u,If.REQUEST_ID),user_agent:lM(u,If.USER_AGENT),virtual_mcp_id:lM(u,If.VIRTUAL_MCP_ID),properties:lM(u,If.PROPERTIES)}}function gli(i){return i[0]*1000+i[1]/1e6}function YL(i){return new Date(gli(i)).toISOString()}var eQi="mcp.proxy.callTool",If,cM="tool_call",WL="llm_call",nli="decopilot";var Rw=g(()=>{vt();If={TYPE:"studio.monitoring.type",ORGANIZATION_ID:"studio.monitoring.organization_id",CONNECTION_ID:"studio.monitoring.connection_id",CONNECTION_TITLE:"studio.monitoring.connection_title",TOOL_NAME:"studio.monitoring.tool_name",INPUT:"studio.monitoring.input",OUTPUT:"studio.monitoring.output",IS_ERROR:"studio.monitoring.is_error",ERROR_MESSAGE:"studio.monitoring.error_message",DURATION_MS:"studio.monitoring.duration_ms",USER_ID:"studio.monitoring.user_id",REQUEST_ID:"studio.monitoring.request_id",USER_AGENT:"studio.monitoring.user_agent",VIRTUAL_MCP_ID:"studio.monitoring.virtual_mcp_id",PROPERTIES:"studio.monitoring.properties"}});import{ExportResultCode as Nli}from"@opentelemetry/core";import{mkdir as UJt,rename as PJt,writeFile as AJt}from"fs/promises";import{join as Oli}from"path";class GN{bufferItems=[];bufferBytes=0;flushTimer=null;flushQueue=Promise.resolve();basePath;flushThreshold;maxBufferBytes;isShutdown=!1;knownDirs=new Set;partitionKey;constructor(i){this.basePath=i.basePath,this.flushThreshold=i.flushThreshold??1000,this.maxBufferBytes=i.maxBufferBytes??10485760,this.partitionKey=i.partitionKey;let u=i.flushIntervalMs??60000;if(u>0&&u<3600000){if(this.flushTimer=setInterval(()=>{this.flush().catch((t)=>{console.error("[NDJSONExporter] Timer flush failed:",t)})},u),this.flushTimer&&typeof this.flushTimer==="object"&&"unref"in this.flushTimer)this.flushTimer.unref()}}exportRows(i){if(this.isShutdown)return Promise.resolve({code:Nli.FAILED});for(let u of i){let t=JSON.stringify(u),f=this.partitionKey?this.partitionKey(u):"";this.bufferItems.push({partition:f,json:t}),this.bufferBytes+=Buffer.byteLength(t,"utf8")+1}if(this.bufferItems.length>=this.flushThreshold||this.bufferBytes>=this.maxBufferBytes)return this.flush().then(()=>({code:Nli.SUCCESS})).catch((u)=>{return console.error("[NDJSONExporter] Flush failed:",u),{code:Nli.FAILED}});return Promise.resolve({code:Nli.SUCCESS})}async shutdown(){if(this.isShutdown=!0,this.flushTimer)clearInterval(this.flushTimer),this.flushTimer=null;try{await this.flushQueue}catch{}if(this.bufferItems.length>0)await this.flush()}async forceFlush(){try{await this.flushQueue}catch{}if(this.bufferItems.length>0)await this.flush()}flush(){let u=this.flushQueue.catch(()=>{}).then(()=>this.doFlush());return this.flushQueue=u,u}async doFlush(){if(this.bufferItems.length===0)return;let i=this.bufferItems;this.bufferItems=[],this.bufferBytes=0;let u=new Map;for(let l of i){let c=u.get(l.partition);if(!c)c=[],u.set(l.partition,c);c.push(l.json)}let t=await Promise.allSettled(Array.from(u.entries()).map(([l,c])=>this.writeNDJSON(c,l).then(()=>l))),f=t.find((l)=>l.status==="rejected");if(f){let l=new Set;for(let E of t)if(E.status==="fulfilled")l.add(E.value);let c=i.filter((E)=>!l.has(E.partition));this.bufferItems=c.concat(this.bufferItems),this.bufferBytes=0;for(let E of this.bufferItems)this.bufferBytes+=Buffer.byteLength(E.json,"utf8")+1;throw f.reason}}async writeNDJSON(i,u){let t=new Date,f=[String(t.getUTCFullYear()),String(t.getUTCMonth()+1).padStart(2,"0"),String(t.getUTCDate()).padStart(2,"0"),String(t.getUTCHours()).padStart(2,"0")],l=u?Oli(this.basePath,u,...f):Oli(this.basePath,...f);if(!this.knownDirs.has(l))await UJt(l,{recursive:!0,mode:448}),this.knownDirs.add(l);let c=`${crypto.randomUUID()}.ndjson`,E=Oli(l,`.${c}.tmp`),$=Oli(l,c),w=i.join(`
178
178
  `)+`
179
179
  `;await AJt(E,w,{mode:384}),await PJt(E,$)}}var yli=()=>{};import{ExportResultCode as IJt}from"@opentelemetry/core";class oQi{inner;constructor(i){this.inner=new GN({...i,partitionKey:(u)=>u.organization_id})}export(i,u){let t=[];for(let f of i){if(!xJt.has(f.attributes[If.TYPE]))continue;let l={};for(let[w,d]of Object.entries(f.attributes))if(typeof d==="string"||typeof d==="number"||typeof d==="boolean")l[w]=d;let c=f.spanContext?.spanId??crypto.randomUUID(),E=f.hrTime,$=BigInt(E[0])*1000000000n+BigInt(E[1]);t.push(kRu({id:c,timestampNano:$,attributes:l}))}this.inner.exportRows(t).then((f)=>u(f)).catch(()=>u({code:IJt.FAILED}))}async shutdown(){await this.inner.shutdown()}async forceFlush(){await this.inner.forceFlush()}}var xJt;var GRu=g(()=>{Rw();yli();xJt=new Set([cM,WL])});import{ExportResultCode as kJt}from"@opentelemetry/core";import{AggregationTemporality as GJt,DataPointType as jRu}from"@opentelemetry/sdk-metrics";class sQi{inner;constructor(i){this.inner=new GN({...i,partitionKey:(u)=>u.organization_id})}selectAggregationTemporality(i){return GJt.DELTA}export(i,u){let t=[];for(let f of i.scopeMetrics)for(let l of f.metrics){let{descriptor:c,dataPointType:E}=l;if(E===jRu.SUM)for(let $ of l.dataPoints){let w=$.attributes;t.push({v:1,name:c.name,type:"sum",unit:c.unit,timestamp:YL($.endTime),organization_id:String(w["organization.id"]??""),connection_id:String(w["connection.id"]??""),tool_name:String(w["tool.name"]??""),status:String(w.status??""),error_type:String(w["error.type"]??""),value:$.value,hist_count:0,hist_sum:0,hist_min:0,hist_max:0,hist_boundaries:"[]",hist_bucket_counts:"[]"})}else if(E===jRu.HISTOGRAM)for(let $ of l.dataPoints){let{attributes:w,value:d}=$;t.push({v:1,name:c.name,type:"histogram",unit:c.unit,timestamp:YL($.endTime),organization_id:String(w["organization.id"]??""),connection_id:String(w["connection.id"]??""),tool_name:String(w["tool.name"]??""),status:String(w.status??""),error_type:String(w["error.type"]??""),value:d.count,hist_count:d.count,hist_sum:d.sum??0,hist_min:d.min??0,hist_max:d.max??0,hist_boundaries:JSON.stringify(d.buckets.boundaries),hist_bucket_counts:JSON.stringify(d.buckets.counts)})}}this.inner.exportRows(t).then((f)=>u(f)).catch(()=>u({code:kJt.FAILED}))}async shutdown(){await this.inner.shutdown()}async forceFlush(){await this.inner.forceFlush()}}var SRu=g(()=>{Rw();yli()});import{ExportResultCode as jJt}from"@opentelemetry/core";function SJt(i){let u=i.resource,t=u.attributes["service.name"]??"unknown";return{v:1,trace_id:i.spanContext().traceId,span_id:i.spanContext().spanId,parent_span_id:i.parentSpanContext?.spanId||null,name:i.name,kind:i.kind,status:i.status.code,status_message:i.status.message||null,start_time:YL(i.startTime),end_time:YL(i.endTime),duration_ms:gli(i.endTime)-gli(i.startTime),service_name:t,attributes:JSON.stringify(i.attributes),events:JSON.stringify(i.events),links:JSON.stringify(i.links),resource:JSON.stringify(u.attributes)}}class pQi{inner;constructor(i){this.inner=new GN(i)}export(i,u){let t=i.map(SJt);this.inner.exportRows(t).then((f)=>u(f)).catch(()=>u({code:jJt.FAILED}))}async shutdown(){await this.inner.shutdown()}async forceFlush(){await this.inner.forceFlush()}}var KRu=g(()=>{Rw();yli()});function QL(i,u=65536){if(i.length<=u&&Buffer.byteLength(i,"utf8")<=u)return i;let t=u-KJt;if(t<=0)return"... [TRUNCATED]".slice(0,u);let f=0,l=0;for(let c of i){let E=c.charCodeAt(0)<=127?1:Buffer.byteLength(c,"utf8");if(f+E>t)break;f+=E,l+=c.length}return i.slice(0,l)+"... [TRUNCATED]"}var KJt;var izi=g(()=>{KJt=Buffer.byteLength("... [TRUNCATED]","utf8")});import{NOOP_LOGGER as JJt}from"@opentelemetry/api-logs";function XRu(i){JRu=i.getLogger(XJt,LJt)}function LRu(){return JRu}var XJt="studio.monitoring",LJt="1.0.0",JRu;var uzi=g(()=>{JRu=JJt});var QRu={};Ji(QRu,{shouldSkipStudioContext:()=>tzi,isServerPath:()=>YJt,isHealthPath:()=>EM,SYSTEM_PATHS:()=>D6});function EM(i){return i===D6.HEALTH||i===D6.HEALTH_LIVE||i===D6.HEALTH_READY}function WRu(i){return i===D6.HEALTH||i===D6.HEALTH_LIVE||i===D6.HEALTH_READY||i===D6.METRICS||i.startsWith(jN.WELL_KNOWN)||i.startsWith(D6.DBOS_QUEUE_DEPTH_PREFIX)||i===D6.HOSTED_RUN_PENDING}function YRu(i){return i.startsWith(jN.API)}function YJt(i){return YRu(i)||i==="/mcp"||i.startsWith(jN.MCP)||i.startsWith(jN.OAUTH_PROXY)||i.startsWith(jN.ORG)||i.startsWith(jN.REPORT)||WRu(i)}function tzi(i){return i==="/"||i.startsWith(jN.API_AUTH)||i==="/api/trigger-callback"||WRu(i)||!YRu(i)&&WJt.test(i)}var D6,jN,WJt;var Zli=g(()=>{D6={HEALTH:"/health",HEALTH_LIVE:"/health/live",HEALTH_READY:"/health/ready",METRICS:"/metrics",DBOS_QUEUE_DEPTH_PREFIX:"/dbos-queue-depth/",HOSTED_RUN_PENDING:"/hosted-run-pending"},jN={API:"/api/",API_AUTH:"/api/auth/",MCP:"/mcp/",OAUTH_PROXY:"/oauth-proxy/",WELL_KNOWN:"/.well-known",ORG:"/org/",REPORT:"/report/"},WJt=/\.(html|css|js|ico|svg|png|jpg|jpeg|gif|webp|woff|woff2)$/});import{SpanStatusCode as fzi}from"@opentelemetry/api";var QJt,zJt=()=>QJt??=Bt.createHistogram("http.server.request.duration",{description:"Duration of inbound HTTP requests handled by the API.",unit:"s",advice:{explicitBucketBoundaries:[0.005,0.01,0.025,0.05,0.075,0.1,0.25,0.5,0.75,1,2.5,5,7.5,10]}}),lzi=async(i,u)=>{if(EM(i.req.path))return u();let t=i.req.raw,f=new URL(t.url),l=performance.now(),c=RRu(t),E=czi(t),$={"http.request.url":t.url,"http.request.method":t.method,"http.request.body.size":t.headers.get("content-length")??void 0,"url.scheme":f.protocol.replace(":",""),"server.address":f.host,"url.query":f.search||void 0,"url.path":f.pathname,"user_agent.original":t.headers.get("user-agent")??void 0,"request.internal":t.headers.has("traceparent"),...E?{"trace.debug.id":E}:{}};await s2.startActiveSpan(`${t.method} ${f.pathname}`,{attributes:$},c,async(w)=>{i.set("rootSpan",w);try{await u()}catch(d){w.recordException(d),w.setStatus({code:fzi.ERROR});let h=typeof d==="object"&&d&&"message"in d?String(d.message):JSON.stringify(d);throw console.error("error: ",h,$),d}finally{let d=i.res?.status??500,h=d>=500;w.setStatus({code:h?fzi.ERROR:fzi.OK}),w.setAttribute("http.response.status_code",d);let _=i.get("studioContext");if(_){if(_.auth.user?.id)w.setAttribute("studio.user.id",_.auth.user.id);if(_.auth.apiKey?.id)w.setAttribute("studio.api_key.id",_.auth.apiKey.id);if(_.organization?.id)w.setAttribute("studio.organization.id",_.organization.id)}if(E)HRu(i.res.headers,E);zJt().record((performance.now()-l)/1000,{"http.request.method":t.method,"http.route":i.req.routePath,"http.response.status_code":d}),w.end()}})};var zRu=g(()=>{jl();Zli()});import{createContextKey as HJt,metrics as mRu,propagation as RJt,ROOT_CONTEXT as bJt,SpanStatusCode as bRu,trace as $zi}from"@opentelemetry/api";import{logs as eRu,SeverityNumber as vM}from"@opentelemetry/api-logs";import{OTLPLogExporter as CRu}from"@opentelemetry/exporter-logs-otlp-proto";import{PrometheusExporter as CJt}from"@opentelemetry/exporter-prometheus";import{OTLPTraceExporter as MJt}from"@opentelemetry/exporter-trace-otlp-proto";import{RuntimeNodeInstrumentation as qJt}from"@opentelemetry/instrumentation-runtime-node";import{BatchLogRecordProcessor as Ezi,LoggerProvider as MRu}from"@opentelemetry/sdk-logs";import{detectResources as VJt,envDetector as rJt,hostDetector as mJt,osDetector as eJt,processDetector as aJt,resourceFromAttributes as qRu}from"@opentelemetry/resources";import{PeriodicExportingMetricReader as oJt}from"@opentelemetry/sdk-metrics";import{NodeSDK as sJt}from"@opentelemetry/sdk-node";import{BatchSpanProcessor as VRu,SamplingDecision as zL}from"@opentelemetry/sdk-trace-base";class oRu{inner;ratio;constructor(i,u){this.inner=i;this.ratio=u}onEmit(i,u){if(i.severityNumber!==void 0&&i.severityNumber>=vM.ERROR||Math.random()<this.ratio)this.inner.onEmit(i,u)}forceFlush(){return this.inner.forceFlush()}shutdown(){return this.inner.shutdown()}}class sRu{inner;maxBytes;constructor(i,u){this.inner=i;this.maxBytes=u}onEmit(i,u){let t=If.OUTPUT,f=i.attributes?.[t];if(typeof f==="string"&&f.length>this.maxBytes){let l=QL(f,this.maxBytes);this.inner.onEmit({...i,attributes:{...i.attributes,[t]:l}},u)}else this.inner.onEmit(i,u)}forceFlush(){return this.inner.forceFlush()}shutdown(){return this.inner.shutdown()}}class pRu{inner;constructor(i){this.inner=i}shouldSample(i,u,t,f,l,c){let E=i.getValue(aRu);if(!E){if(this.inner)return this.inner.shouldSample(i,u,t,f,l,c);return{decision:zL.RECORD_AND_SAMPLED}}let $=czi(E);if($)return{decision:zL.RECORD_AND_SAMPLED,attributes:{"trace.debug.id":$}};if(this.inner){let w=this.inner.shouldSample(i,u,t,f,l,c);if(w.decision===zL.RECORD_AND_SAMPLED){let d=crypto.randomUUID();w.attributes={...w.attributes??{},"trace.debug.id":d}}return w}return{decision:zL.NOT_RECORD}}toString(){return"DebugSampler"}}class ibu{ratio;constructor(i){this.ratio=i}shouldSample(){if(Math.random()<this.ratio)return{decision:zL.RECORD_AND_SAMPLED};return{decision:zL.NOT_RECORD}}toString(){return`RatioSampler(${this.ratio})`}}function ubu(){if(rRu)return;let i=yu(),u=!!process.env.OTEL_EXPORTER_OTLP_ENDPOINT,t=u?new MJt:void 0;$M=i.nodeEnv==="test"?null:new oQi({basePath:vh()}),wM=i.nodeEnv==="test"?null:new pQi({basePath:LL()}),dM=i.nodeEnv==="test"?null:new sQi({basePath:BD()}),hM=dM?new oJt({exporter:dM,exportIntervalMillis:60000}):null;let f=process.env.STUDIO_ENV??"production"??"unknown",l={};if(!process.env.OTEL_RESOURCE_ATTRIBUTES?.includes("deployment.environment"))l["deployment.environment"]=f;new sJt({serviceName:i.otelServiceName,resource:qRu(l),metricReaders:[wzi,...hM?[hM]:[]],sampler:uXt,spanProcessors:[...t?[new VRu(t,{scheduledDelayMillis:60000,maxExportBatchSize:1000})]:[],...wM?[new VRu(wM,{scheduledDelayMillis:60000,maxExportBatchSize:250})]:[]],instrumentations:[new qJt]}).start(),Bt=mRu.getMeter("studio","1.0.0"),s2=$zi.getTracer("studio","1.0.0");let E=VJt({detectors:[rJt,mJt,eJt,aJt]}).merge(qRu({"service.name":i.otelServiceName,...l})),$=[];if(u){let _=f==="prod"||f==="production"?1:0.1,v=process.env.INFRA_LOG_SAMPLE_RATIO,D=_;if(v!==void 0){let n=Number(v);if(Number.isFinite(n)&&n>=0&&n<=1)D=n;else console.warn(`[observability] Ignoring invalid INFRA_LOG_SAMPLE_RATIO="${v}" (expected 0..1); using ${_}`)}$.push(new oRu(new Ezi(new CRu),D))}_M=new MRu({resource:E,processors:$}),eRu.setGlobalLoggerProvider(_M),tbu=_M.getLogger("studio","1.0.0");let w=i.monitoringOtlpEndpoint??process.env.OTEL_EXPORTER_OTLP_ENDPOINT,d=[];if(w){let h=w.replace(/\/$/,""),_=h.endsWith("/v1/logs")?h:`${h}/v1/logs`;d.push(new sRu(new Ezi(new CRu({url:_})),8000))}if($M)d.push(new Ezi($M,{scheduledDelayMillis:60000,maxExportBatchSize:250}));Tli=new MRu({resource:E,processors:d}),XRu(Tli),IRu(),rRu=!0}async function i3(){let u=(await Promise.allSettled([_M?_M.forceFlush():Promise.resolve(),(async()=>{if(Tli)await Tli.forceFlush();if($M)await $M.forceFlush()})(),(async()=>{let t=$zi.getTracerProvider();if("forceFlush"in t)await t.forceFlush();if(wM)await wM.forceFlush()})(),(async()=>{if(hM)await hM.forceFlush();if(dM)await dM.forceFlush()})()])).find((t)=>t.status==="rejected");if(u)throw u.reason}function _zi(i,u,t){return s2.startActiveSpan(i,{attributes:t},async(f)=>{try{let l=await u(f);return f.setStatus({code:bRu.OK}),l}catch(l){let c=l instanceof Error?l:Error(String(l??"unknown"));throw f.setStatus({code:bRu.ERROR,message:c.message}),f.recordException(c),l}finally{f.end()}})}var pJt="__d",aRu,iXt=1,czi=(i)=>{let t=new URL(i.url).searchParams.get(pJt);if(t==="")return crypto.randomUUID();if(!t)t=i.headers.get("x-trace-debug-id");return t},HRu=(i,u)=>{try{i.set("x-trace-debug-id",u)}catch{}},wzi,uXt,$M=null,wM=null,dM=null,hM=null,_M=null,Tli=null,rRu=!1,s2,Bt,tbu,dzi=(i,u,t)=>{let f={},l=t,c=t[t.length-1];if(c!==null&&typeof c==="object"&&!Array.isArray(c)&&!(c instanceof Error)&&Object.getPrototypeOf(c)===Object.prototype)f=c,l=t.slice(0,-1);let E=l.map(($)=>{if($ instanceof Error)return`${$.name}: ${$.message}`;if(typeof $==="object")try{return JSON.stringify($)}catch{return"[Object]"}return String($)}).join(" ");tbu.emit({severityNumber:i,severityText:u,body:E,attributes:{"log.source":"console",...f}})},hzi,RRu=(i)=>{return RJt.extract(bJt,i.headers,{get:(t,f)=>t.get(f)??void 0,keys:(t)=>[...t.keys()]}).setValue(aRu,i)};var jl=g(()=>{xRu();GRu();SRu();KRu();Rw();izi();vt();uzi();zRu();aRu=HJt("Current request");wzi=new CJt({preventServerStart:!0}),uXt=new pRu(new ibu(iXt));s2=$zi.getTracer("studio","1.0.0"),Bt=mRu.getMeter("studio","1.0.0"),tbu=eRu.getLogger("studio","1.0.0"),hzi={error:console.error.bind(console),warn:console.warn.bind(console),debug:console.debug.bind(console)};console.error=(...i)=>{dzi(vM.ERROR,"ERROR",i),hzi.error(...i)};console.warn=(...i)=>{dzi(vM.WARN,"WARN",i),hzi.warn(...i)};console.debug=(...i)=>{dzi(vM.DEBUG,"DEBUG",i),hzi.debug(...i)}});function SN(){try{return process.memoryUsage()}catch{return null}}import{Session as tXt}from"inspector";function KN(i,u){return new Promise((t,f)=>HL.post(i,u,(l,c)=>l?f(l):t(c??{})))}async function fbu(i){try{return HL=new tXt,HL.connect(),await KN("Profiler.enable"),await KN("Profiler.setSamplingInterval",{interval:i}),await KN("Profiler.start"),bL=!0,!0}catch{return bL=!1,HL=null,!1}}function fXt(i,u){let{nodes:t,samples:f,timeDeltas:l}=i;if(!f?.length)return null;let c=new Map,E=new Map;for(let N of t){c.set(N.id,N);for(let O of N.children??[])E.set(O,N.id)}let $=Math.max(1,u)*1000,w=0,d=new Map;for(let N=f.length-1;N>=0;N--){w+=l[N]??0;let O=f[N];if(O!==void 0)d.set(O,(d.get(O)??0)+1);if(w>=$)break}let h=-1,_=0;for(let[N,O]of d)if(O>_)_=O,h=N;if(h<0)return null;let v=[],D=new Set,n=h;while(n!=null&&!D.has(n)){D.add(n);let N=c.get(n);if(!N)break;let O=N.callFrame,y=O.url?` ${O.url}:${O.lineNumber+1}`:"";v.push(`${O.functionName||"(anonymous)"}${y}`),n=E.get(n)}return v}async function lbu(i){if(!bL||!HL||RL)return null;RL=!0;try{let{profile:u}=await KN("Profiler.stop"),t=u?fXt(u,i):null;return await KN("Profiler.start"),t}catch{return bL=!1,null}finally{RL=!1}}async function cbu(){if(!bL||!HL||RL)return;RL=!0;try{await KN("Profiler.stop"),await KN("Profiler.start")}catch{bL=!1}finally{RL=!1}}var HL=null,bL=!1,RL=!1;var Ebu=()=>{};function wbu(){if(vzi)return;let i=performance.now()+Dzi;vzi=setInterval(()=>{let u=performance.now();$bu=Math.max(0,u-i),i=u+Dzi},Dzi),vzi.unref?.()}function dbu(){return wbu(),$bu}function hbu(){if(wbu(),process.env.EVENT_LOOP_MONITOR!=="1")return()=>{};let i=Number(process.env.EVENT_LOOP_INTERVAL_MS??250),u=Number(process.env.EVENT_LOOP_SPIKE_MS??100),t=process.env.EVENT_LOOP_PROFILE==="1",f=Number(process.env.EVENT_LOOP_PROFILE_MS??1000),l=Number(process.env.EVENT_LOOP_PROFILE_INTERVAL_US??1e4),c=30000,E=performance.now();if(t)fbu(l).then((d)=>{console.warn(JSON.stringify({msg:"event-loop-profiler",status:d?"started":"unavailable",intervalUs:l}))});let $=Bt.createHistogram("eventloop.delay",{description:"Event-loop lag measured as timer scheduling drift",unit:"ms"}),w=performance.now()+i;return Bli=setInterval(()=>{let d=performance.now(),h=Math.max(0,d-w);if(w=d+i,$.record(h),h>u){let _=SN();console.warn(JSON.stringify({msg:"event-loop-stall",ts:new Date().toISOString(),lagMs:Math.round(h),rss:_?.rss,heapUsed:_?.heapUsed,heapTotal:_?.heapTotal,external:_?.external}))}if(t){if(h>f)lbu(Math.round(h)).then((_)=>{if(_?.length)console.warn(JSON.stringify({msg:"event-loop-stall-profile",ts:new Date().toISOString(),lagMs:Math.round(h),stack:_}))}),E=d;else if(d-E>c)cbu(),E=d}},i),Bli.unref?.(),()=>{if(Bli)clearInterval(Bli)}}var Bli,vzi,$bu=0,Dzi=500;var nzi=g(()=>{jl();Ebu()});var ybu={};Ji(ybu,{withSslmode:()=>gzi,getDbDialect:()=>nM,getDb:()=>Ft,getDatabaseUrl:()=>un,createDatabase:()=>Obu,closeDatabase:()=>tn});import{Kysely as lXt,PostgresDialect as Dbu}from"kysely";import{Pool as nbu}from"pg";function wXt(i){let u=i.connect.bind(i);return i.connect=(t)=>{if(typeof t==="function")return u(t);let f=performance.now(),l=Fli(),c=i.idleCount===0&&i.totalCount>=l,E=i.idleCount;return u().then(($)=>{let w=performance.now()-f;if(_bu().record(w,{"db.pool.outcome":c?"contended":"available"}),w>EXt)if(c)console.error("Slow db pool acquire \u2014 pool saturated:",{waitMs:w,total:i.totalCount,idle:i.idleCount,waiting:i.waitingCount,max:l});else console.warn("Slow db pool acquire \u2014 event-loop lag (not pool):",{waitMs:w,idleAtStart:E,total:i.totalCount,max:l});return $},($)=>{throw _bu().record(performance.now()-f,{"db.pool.outcome":"error"}),$})},i}function Nbu(){try{return yu().databasePgSsl}catch{return!1}}function Fli(){try{return yu().databasePoolMax}catch{return 10}}function dXt(i){let u=wXt(new nbu({connectionString:i,max:Fli(),ssl:Nbu(),...gbu})),t=new Dbu({pool:u});return{type:"postgres",db:new lXt({dialect:t,log:$Xt(u)}),pool:u}}function un(){return yu().databaseUrl}function gzi(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 nM(i){let u=i||un();return new Dbu({pool:new nbu({connectionString:u,max:Fli(),ssl:Nbu(),...gbu})})}function Obu(i){let u=i||un();return dXt(u)}async function tn(i){if(await i.db.destroy(),!i.pool.ended)await i.pool.end();if(i===DM)DM=null}function Ft(){if(!DM)DM=Obu(un());return DM}var cXt=()=>Bt.createHistogram("db.query.duration",{description:"Database query execution duration in milliseconds",unit:"ms"}),_bu=()=>Bt.createHistogram("db.pool.acquire.duration",{description:"Time spent waiting to acquire a connection from the pool",unit:"ms"}),vbu=400,EXt=100,$Xt=(i)=>(u)=>{let t={"db.statement":u.query.sql,"db.status":u.level==="error"?"error":"success"};if(u.queryDurationMillis>vbu){let f=dbu(),l=f>vbu/2;console.error(l?"Slow query measurement \u2014 likely event-loop lag, not slow SQL:":"Slow query detected:",{durationMs:u.queryDurationMillis,eventLoopLagMs:Math.round(f),sql:u.query.sql,pool:{total:i.totalCount,idle:i.idleCount,waiting:i.waitingCount,max:Fli()}})}if(cXt().record(u.queryDurationMillis,t),u.level==="error")console.error("Query failed:",{durationMs:u.queryDurationMillis,error:u.error,sql:u.query.sql})},gbu,DM=null;var cE=g(()=>{vt();jl();nzi();gbu={keepAlive:!0,keepAliveInitialDelayMillis:1e4,idleTimeoutMillis:300000,connectionTimeoutMillis:30000,allowExitOnIdle:!0}});function Tbu(i){let{port:u,query:t}=i,{protocol:f,path:l,hostname:c}=i;if(f&&f.slice(-1)!==":")f+=":";if(u)c+=`:${u}`;if(l&&l.charAt(0)!=="/")l=`/${l}`;let E=t?Zbu.buildQueryString(t):"";if(E&&E[0]!=="?")E=`?${E}`;let $="";if(i.username!=null||i.password!=null){let d=i.username??"",h=i.password??"";$=`${d}:${h}@`}let w="";if(i.fragment)w=`#${i.fragment}`;return`${f}//${$}${c}${l}${E}${w}`}var Zbu;var Bbu=g(()=>{Zbu=G(vui(),1)});var Fbu="UNSIGNED-PAYLOAD",Ubu="X-Amz-Content-Sha256";class Uli{signer;constructor(i){let u={service:i.signingName||i.service||"s3",uriEscapePath:i.uriEscapePath||!1,applyChecksum:i.applyChecksum||!1,...i};this.signer=new Pbu.SignatureV4MultiRegion(u)}presign(i,{unsignableHeaders:u=new Set,hoistableHeaders:t=new Set,unhoistableHeaders:f=new Set,...l}={}){return this.prepareRequest(i,{unsignableHeaders:u,unhoistableHeaders:f,hoistableHeaders:t}),this.signer.presign(i,{expiresIn:900,unsignableHeaders:u,unhoistableHeaders:f,...l})}presignWithCredentials(i,u,{unsignableHeaders:t=new Set,hoistableHeaders:f=new Set,unhoistableHeaders:l=new Set,...c}={}){return this.prepareRequest(i,{unsignableHeaders:t,unhoistableHeaders:l,hoistableHeaders:f}),this.signer.presignWithCredentials(i,u,{expiresIn:900,unsignableHeaders:t,unhoistableHeaders:l,...c})}prepareRequest(i,{unsignableHeaders:u=new Set,unhoistableHeaders:t=new Set,hoistableHeaders:f=new Set}={}){u.add("content-type"),Object.keys(i.headers).map(($)=>$.toLowerCase()).filter(($)=>$.startsWith("x-amz-server-side-encryption")).forEach(($)=>{if(!f.has($))t.add($)}),i.headers[Ubu]=Fbu;let l=i.headers.host,c=i.port,E=`${i.hostname}${i.port!=null?":"+c:""}`;if(!l||l===i.hostname&&i.port!=null)i.headers.host=E}}var Pbu;var Nzi=g(()=>{Pbu=G(iL(),1)});var Abu,Ibu,Pli=async(i,u,t={})=>{let f,l;if(typeof i.config.endpointProvider==="function"){let v=(await Abu.getEndpointFromInstructions(u.input,u.constructor,i.config)).properties?.authSchemes?.[0];if(v?.name==="sigv4a")l=v?.signingRegionSet?.join(",");else l=v?.signingRegion;f=new Uli({...i.config,signingName:v?.signingName,region:async()=>l})}else f=new Uli(i.config);let c=(_,v)=>async(D)=>{let{request:n}=D;if(!Ibu.HttpRequest.isInstance(n))throw Error("Request to be presigned is not an valid HTTP request.");delete n.headers["amz-sdk-invocation-id"],delete n.headers["amz-sdk-request"],delete n.headers["x-amz-user-agent"];let N,O={...t,signingRegion:t.signingRegion??v.signing_region??l,signingService:t.signingService??v.signing_service};if(v.s3ExpressIdentity)N=await f.presignWithCredentials(n,v.s3ExpressIdentity,O);else N=await f.presign(n,O);return{response:{},output:{$metadata:{httpStatusCode:200},presigned:N}}},E="presignInterceptMiddleware",$=i.middlewareStack.clone();$.addRelativeTo(c,{name:E,relation:"before",toMiddleware:"awsAuthMiddleware",override:!0});let w=u.resolveMiddleware($,i.config,{}),{output:d}=await w({input:u.input}),{presigned:h}=d;return Tbu(h)};var xbu=g(()=>{Bbu();Nzi();Abu=G(nu(),1),Ibu=G(m4(),1)});var kbu=g(()=>{xbu();Nzi()});import{extname as hXt}from"path";function iv(i){let u;try{u=decodeURIComponent(i)}catch{u=i}let f=u.replace(/\0/g,"").replace(/[\x00-\x1f\x7f]/g,"").replace(/\\/g,"/").split("/"),l=[];for(let c of f)if(c==="..")l.pop();else if(c!=="."&&c!=="")l.push(c);return l.join("/")}function fn(i,u){let t=iv(u);if(!t)throw Error("Key is empty after sanitization");return`${i}/${t}`}function Gbu(i,u){if(!u)return`${i}/`;let t=iv(u);return`${i}/${t}${t.endsWith("/")?"":"/"}`}function CL(i,u,t){let f=t.split("/").map(encodeURIComponent).join("/");return`${i}/api/${encodeURIComponent(u)}/files/${f}`}function Ozi(i,u){let t=`${i}/`;if(u.startsWith(t))return u.slice(t.length);return u}function zc(i){let u=hXt(i).toLowerCase();return _Xt[u]??"application/octet-stream"}function Ali(i){let u=i.split(";")[0].trim();if(vXt.has(u))return!0;if(u.startsWith("text/"))return!0;return!1}var _Xt,vXt;var uv=g(()=>{_Xt={".json":"application/json",".html":"text/html",".htm":"text/html",".css":"text/css",".js":"application/javascript",".mjs":"application/javascript",".ts":"text/typescript",".txt":"text/plain",".md":"text/markdown",".csv":"text/csv",".xml":"application/xml",".svg":"image/svg+xml",".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".gif":"image/gif",".webp":"image/webp",".pdf":"application/pdf",".zip":"application/zip",".gz":"application/gzip",".tar":"application/x-tar",".wasm":"application/wasm",".yaml":"application/yaml",".yml":"application/yaml",".toml":"application/toml"};vXt=new Set(["application/json","text/html","text/css","application/javascript","text/typescript","text/plain","text/markdown","text/csv","application/xml","image/svg+xml","application/yaml","application/toml"])});class yzi{client;bucket;constructor(i){this.bucket=i.bucket,this.client=new lE({endpoint:i.endpoint,region:i.region,credentials:{accessKeyId:i.accessKeyId,secretAccessKey:i.secretAccessKey},forcePathStyle:i.forcePathStyle})}async getBytesOrPresign(i,u,t){let f=fn(i,u),l=await this.client.send(new hh({Bucket:this.bucket,Key:f})),c=l.ContentLength??0,E=l.ContentType??zc(u);if(c>t.presignWhenLargerThan){let h=await Pli(this.client,new ZD({Bucket:this.bucket,Key:f}),{expiresIn:t.presignExpiresIn??3600});return{error:"FILE_TOO_LARGE",size:c,maxInlineSize:t.presignWhenLargerThan,presignedUrl:h,contentType:E}}let w=await(await this.client.send(new ZD({Bucket:this.bucket,Key:f}))).Body.transformToByteArray(),d=Ali(E);return{content:d?new TextDecoder().decode(w):Buffer.from(w).toString("base64"),contentType:E,encoding:d?"utf-8":"base64",size:c,lastModified:l.LastModified,etag:l.ETag}}async getBytes(i,u){let t=fn(i,u);return(await this.client.send(new ZD({Bucket:this.bucket,Key:t}))).Body.transformToByteArray()}async put(i,u,t,f){let l=fn(i,u),c=f?.contentType??zc(u);return{etag:(await this.client.send(new p_({Bucket:this.bucket,Key:l,Body:typeof t==="string"?Buffer.from(t,"utf-8"):t,ContentType:c}))).ETag,key:u}}async list(i,u){let t=Gbu(i,u?.prefix),f=await this.client.send(new zw({Bucket:this.bucket,Prefix:t,MaxKeys:u?.maxKeys??1000,ContinuationToken:u?.continuationToken,Delimiter:u?.delimiter})),l=f.CommonPrefixes?.map((c)=>Ozi(i,c.Prefix??"")).filter(Boolean);return{objects:(f.Contents??[]).map((c)=>({key:Ozi(i,c.Key??""),size:c.Size??0,lastModified:c.LastModified,etag:c.ETag})),isTruncated:f.IsTruncated??!1,nextContinuationToken:f.NextContinuationToken,commonPrefixes:l&&l.length>0?l:void 0}}async delete(i,u){let t=fn(i,u);await this.client.send(new IL({Bucket:this.bucket,Key:t}))}async head(i,u){let t=fn(i,u),f=await this.client.send(new hh({Bucket:this.bucket,Key:t}));return{contentType:f.ContentType??zc(u),size:f.ContentLength??0,lastModified:f.LastModified,etag:f.ETag}}async presignedGetUrl(i,u,t=3600,f){let l=fn(i,u);return Pli(this.client,new ZD({Bucket:this.bucket,Key:l}),{expiresIn:t})}async presignedPutUrl(i,u,t=3600,f){let l=fn(i,u);return Pli(this.client,new p_({Bucket:this.bucket,Key:l,ContentType:f}),{expiresIn:t})}}var jbu=g(()=>{sC();kbu();uv()});function DXt(){let i=yu();return!!(i.s3Endpoint&&i.s3Bucket&&i.s3AccessKeyId&&i.s3SecretAccessKey)}function ME(){if(gM!==void 0)return gM;if(!DXt())return gM=null,null;let i=yu();return gM=new yzi({endpoint:i.s3Endpoint,bucket:i.s3Bucket,region:i.s3Region,accessKeyId:i.s3AccessKeyId,secretAccessKey:i.s3SecretAccessKey,forcePathStyle:i.s3ForcePathStyle}),gM}var gM;var ln=g(()=>{vt();jbu()});function bw(i,u){return{getBytesOrPresign:(t,f)=>i.getBytesOrPresign(u,t,f),getBytes:(t)=>i.getBytes(u,t),put:(t,f,l)=>i.put(u,t,f,l),list:(t)=>i.list(u,t),delete:(t)=>i.delete(u,t),head:(t)=>i.head(u,t),presignedGetUrl:(t,f,l)=>i.presignedGetUrl(u,t,f,l),presignedPutUrl:(t,f,l)=>i.presignedPutUrl(u,t,f,l)}}import{createHash as nXt}from"crypto";function Sbu(i){let u=i;while(u?.[Ili])u=u[Ili];return u}function OM(i){let{objectStorage:u,baseUrl:t,orgSlug:f,prefix:l="connection-icons",maxBytes:c=NXt,dryRun:E=!1}=i;return async($)=>{if(typeof $!=="string")return $;let w=$.match(gXt);if(!w)return $;if(!u||!f)return $;let[,d,h]=w,_=d.toLowerCase(),v=yXt[_];if(!v)return $;if(Math.floor(h.length*3/4)>c)return console.warn(`[asset-hoister] asset exceeds ${c} bytes, keeping inline`),$;let D=Buffer.from(h,"base64"),n=nXt("sha256").update(D).digest("hex"),N=`${l}/${n}.${v}`;if(E)return CL(t,f,N);try{return await u.put(N,D,{contentType:_}),CL(t,f,N)}catch(O){return console.error("[asset-hoister] upload failed, keeping inline asset:",O),$}}}async function xli(i,u,t=0){if(t>OXt)return i;if(typeof i==="string")return await u(i)??i;if(Array.isArray(i)){let f=await Promise.all(i.map((l)=>xli(l,u,t+1)));return f.some((l,c)=>l!==i[c])?f:i}if(i!==null&&typeof i==="object"){let f=Object.entries(i),l=await Promise.all(f.map(([,$])=>xli($,u,t+1))),c=!1,E={};return f.forEach(([$,w],d)=>{if(E[$]=l[d],l[d]!==w)c=!0}),c?E:i}return i}function kli(i,u){return xli(i,u)}async function NM(i,u){let t={...i};if(typeof t.icon==="string")t.icon=await u(t.icon);if(t.metadata!==null&&typeof t.metadata==="object")t.metadata=await xli(t.metadata,u);return t}function ZXt(i,u){return new Proxy(i,{get(t,f,l){if(f===Ili)return t;if(f==="create")return async(E)=>t.create(await NM(E,u));if(f==="createNew")return async(E)=>t.createNew(await NM(E,u));if(f==="update")return async(E,$)=>t.update(E,await NM($,u));let c=Reflect.get(t,f,l);return typeof c==="function"?c.bind(t):c}})}function TXt(i,u){return new Proxy(i,{get(t,f,l){if(f===Ili)return t;if(f==="create")return async(E,$,w,d)=>t.create(E,$,await NM(w,u),d);if(f==="update")return async(E,$,w)=>t.update(E,$,await NM(w,u));let c=Reflect.get(t,f,l);return typeof c==="function"?c.bind(t):c}})}function Zzi(i,u){let t=OM(u);if(Kbu(i.connections))i.connections=ZXt(Sbu(i.connections),t);if(Kbu(i.virtualMcps))i.virtualMcps=TXt(Sbu(i.virtualMcps),t)}function Kbu(i){return i!==null&&typeof i==="object"}var gXt,NXt=5242880,OXt=64,Ili,yXt;var Gli=g(()=>{uv();gXt=/^data:((?:image|audio|video)\/[^;,]+)(?:;[^,]+)?;base64,(.+)$/is,Ili=Symbol("assetHoistingTarget"),yXt={"image/png":"png","image/jpeg":"jpg","image/gif":"gif","image/webp":"webp","image/x-icon":"ico","image/vnd.microsoft.icon":"ico","audio/mpeg":"mp3","audio/mp4":"m4a","audio/wav":"wav","audio/x-wav":"wav","audio/ogg":"ogg","audio/webm":"weba","audio/aac":"aac","video/mp4":"mp4","video/webm":"webm","video/ogg":"ogv","video/quicktime":"mov"}});function w1(){let i=yu();if(i.baseUrl)return i.baseUrl;return`http://localhost:${i.port??3000}`}function jli(){return`http://localhost:${yu().port??3000}`}function Dh(){return process.env.MESH_PUBLIC_URL??w1()}var n6=g(()=>{vt()});var Jbu={};Ji(Jbu,{backfillThreadAssetsCommand:()=>BXt});import{sql as Tzi}from"kysely";async function BXt(i){let{dryRun:u,batch:t}=i,f=i.baseUrl??w1(),l=ME();if(!l)return console.error("[backfill-assets] Object storage (S3) is not configured \u2014 cannot hoist "+"inline media. Set S3_ENDPOINT/S3_BUCKET/S3_ACCESS_KEY_ID/S3_SECRET_ACCESS_KEY and retry."),1;if(/^https?:\/\/localhost(:|\/|$)/.test(f))console.warn(`[backfill-assets] base URL resolves to "${f}" \u2014 set BASE_URL `+"(or pass --base-url) to the public origin, or stored media URLs will be wrong.");let c=Ft(),{db:E}=c,$;if(i.org){let N=await E.selectFrom("organization").select(["id","slug"]).where((O)=>O.or([O("id","=",i.org),O("slug","=",i.org)])).executeTakeFirst();if(!N)return console.error(`[backfill-assets] org "${i.org}" not found (slug or id).`),await tn(c).catch(()=>{}),1;$=N.id,console.log(`[backfill-assets] scoped to org ${N.slug??N.id} (${N.id})`)}console.log(`[backfill-assets] starting${u?" (dry-run)":""} \u2014 target=${i.target} baseUrl=${f} batch=${t}${i.limit?` limit=${i.limit}`:""}`);let w=new Map,d=(N,O,y)=>{let Z=`${y}\x00${N}`,T=w.get(Z);if(T)return T;let B=OM({objectStorage:bw(l,N),baseUrl:f,orgSlug:O??void 0,prefix:y,dryRun:u});return w.set(Z,B),B},h=async(N,O,y,Z)=>{let T="";for(;;){let B=i.limit?i.limit-y.scanned:1/0;if(B<=0)break;let F=await N(T,Math.min(t,B));if(F.length===0)break;for(let A of F)T=A.id,y.scanned++,await O(A);console.log(`[backfill-assets] ${Z}: scanned=${y.scanned} ${u?"would-change":"changed"}=${y.changed} errors=${y.errors} cursor=${T}`)}},_={scanned:0,changed:0,errors:0},v={scanned:0,changed:0,errors:0},D={scanned:0,changed:0,errors:0};try{if(i.target==="all"||i.target==="threads")await h((N,O)=>E.selectFrom("thread_messages as tm").innerJoin("threads as t","t.id","tm.thread_id").innerJoin("organization as o","o.id","t.organization_id").select(["tm.id as id",Tzi`tm.parts`.as("parts"),Tzi`tm.metadata`.as("metadata"),"t.organization_id as orgId","o.slug as orgSlug"]).where("tm.id",">",N).$if(!!$,(y)=>y.where("t.organization_id","=",$)).orderBy("tm.id","asc").limit(O).execute(),async(N)=>{try{if(!yM(N.parts)&&!yM(N.metadata))return;let O=d(N.orgId,N.orgSlug,"thread-assets"),y=JSON.parse(N.parts),Z=await kli(y,O),T=Z!==y,B=N.metadata!==null?JSON.parse(N.metadata):null,F=await kli(B,O),A=F!==B;if(!T&&!A)return;if(_.changed++,u)return;await E.updateTable("thread_messages").set({parts:T?JSON.stringify(Z):N.parts,metadata:A?JSON.stringify(F):N.metadata}).where("id","=",N.id).execute()}catch(O){_.errors++,console.error(`[backfill-assets] thread_message ${N.id} failed, skipping:`,O)}},_,"threads");if(i.target==="all"||i.target==="connections")await h((N,O)=>E.selectFrom("connections as c").innerJoin("organization as o","o.id","c.organization_id").select(["c.id as id","c.icon as icon",Tzi`c.metadata`.as("metadata"),"c.organization_id as orgId","o.slug as orgSlug"]).where("c.id",">",N).$if(!!$,(y)=>y.where("c.organization_id","=",$)).orderBy("c.id","asc").limit(O).execute(),async(N)=>{try{if(!yM(N.icon)&&!yM(N.metadata))return;let O=d(N.orgId,N.orgSlug,"connection-icons"),y=N.icon!==null?await O(N.icon):N.icon,Z=y!==N.icon,T=N.metadata!==null?JSON.parse(N.metadata):null,B=await kli(T,O),F=B!==T;if(!Z&&!F)return;if(v.changed++,u)return;await E.updateTable("connections").set({icon:Z?y??null:N.icon,metadata:F?JSON.stringify(B):N.metadata}).where("id","=",N.id).execute()}catch(O){v.errors++,console.error(`[backfill-assets] connection ${N.id} failed, skipping:`,O)}},v,"connections");if(i.target==="all"||i.target==="organizations")await h((N,O)=>E.selectFrom("organization as o").select(["o.id as id","o.logo as logo","o.slug as orgSlug"]).where("o.id",">",N).$if(!!$,(y)=>y.where("o.id","=",$)).orderBy("o.id","asc").limit(O).execute(),async(N)=>{try{if(!yM(N.logo))return;let y=await d(N.id,N.orgSlug,"org-logos")(N.logo);if(y===N.logo)return;if(D.changed++,u)return;await E.updateTable("organization").set({logo:y??null}).where("id","=",N.id).execute()}catch(O){D.errors++,console.error(`[backfill-assets] organization ${N.id} failed, skipping:`,O)}},D,"organizations")}finally{await tn(c).catch(()=>{})}let n=u?"would-change":"changed";return console.log("[backfill-assets] done \u2014 "+`threads(scanned=${_.scanned} ${n}=${_.changed} errors=${_.errors}) connections(scanned=${v.scanned} ${n}=${v.changed} errors=${v.errors}) organizations(scanned=${D.scanned} ${n}=${D.changed} errors=${D.errors})`),_.errors+v.errors+D.errors>0?1:0}var yM=(i)=>i!==null&&(i.includes("data:image/")||i.includes("data:audio/")||i.includes("data:video/"));var Xbu=g(()=>{cE();ln();Gli();n6()});async function Lbu(i){let u,t,f=new Promise((E,$)=>{u=E,t=$});f.catch(()=>{});let l=!1,c=Bun.serve({port:i.port??0,hostname:"127.0.0.1",fetch(E){if(l)return new Response("",{status:204});let $=new URL(E.url),w=$.searchParams.get("code");if($.searchParams.get("state")!==i.expectedState)return l=!0,t(Error("OAuth state mismatch")),new Response("State mismatch \u2014 close this tab.",{status:400});if(!w)return l=!0,t(Error("OAuth callback missing code")),new Response("Missing code \u2014 close this tab.",{status:400});return l=!0,u({code:w}),new Response(null,{status:302,headers:{location:i.successRedirectUrl}})}});return{url:`http://127.0.0.1:${c.port}`,waitForCallback:()=>f,close:()=>c.stop(!0)}}import{createHash as FXt,randomBytes as UXt}from"crypto";function Ybu(){let i=Wbu(UXt(32)),u=Wbu(FXt("sha256").update(i).digest());return{verifier:i,challenge:u}}function Wbu(i){return i.toString("base64").replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}var Qbu=()=>{};import{chmod as PXt,mkdir as AXt,readdir as IXt,readFile as xXt,rename as kXt,rm as zbu,writeFile as GXt}from"fs/promises";import{dirname as jXt,join as Fzi}from"path";function Sli(i,u){if(!u)return Fzi(i,"session.json");return Fzi(i,`session.${SXt(u)}.json`)}function SXt(i){let u=i;try{u=new URL(i).host}catch{}return u.replace(/[^a-zA-Z0-9.-]/g,"_")||"default"}async function Bzi(i){try{let u=await xXt(i,"utf8"),t=JSON.parse(u);if(!KXt(t))return null;return t}catch{return null}}async function Hbu(i){try{return(await IXt(i)).filter((t)=>/^session(\..+)?\.json$/.test(t)).map((t)=>Fzi(i,t))}catch{return[]}}async function Kli(i,u){let t=await Bzi(Sli(i,u));if(t)return t;if(u)return Bzi(Sli(i));for(let f of await Hbu(i)){let l=await Bzi(f);if(l)return l}return null}async function ML(i,u){let t=Sli(i,u.target);await AXt(jXt(t),{recursive:!0});let f=`${t}.tmp`;await GXt(f,JSON.stringify(u,null,2),{mode:384}),await PXt(f,384),await kXt(f,t)}async function Rbu(i,u){if(u){await zbu(Sli(i,u),{force:!0});return}for(let t of await Hbu(i))await zbu(t,{force:!0})}function KXt(i){if(!i||typeof i!=="object")return!1;let u=i;if(typeof u.target!=="string"||typeof u.clientId!=="string"||typeof u.accessToken!=="string"||typeof u.createdAt!=="string")return!1;if(!u.user||typeof u.user!=="object")return!1;if(typeof u.user.sub!=="string")return!1;return!0}var ZM=()=>{};var bbu={};Ji(bbu,{performInteractiveLogin:()=>Jli,loginCommand:()=>YXt});import{spawn as JXt}from"child_process";import{randomUUID as XXt}from"crypto";async function Jli(i={}){let u=(i.target??LXt).replace(/\/$/,""),t=i.fetch??fetch,f=i.openBrowser??RXt,l=XXt(),c=Ybu(),E=await Lbu({expectedState:l,successRedirectUrl:`${u}/cli/auth-success`});try{let $=`${E.url}/`,w=await QXt(t,u,$),d=new URLSearchParams({client_id:w,redirect_uri:$,response_type:"code",state:l,scope:WXt,code_challenge:c.challenge,code_challenge_method:"S256"}),h=`${u}/login?${d.toString()}`;console.log(`Opening ${h} in your browser...`),await f(h);let{code:_}=await E.waitForCallback(),v=await zXt(t,u,w,_,$,c.verifier);if(!v.id_token)throw Error("Token endpoint returned no id_token");let D=HXt(v.id_token);return{target:u,clientId:w,user:{sub:D.sub,email:D.email,name:D.name},accessToken:v.access_token,refreshToken:v.refresh_token,expiresAt:v.expires_in?Math.floor(Date.now()/1000)+v.expires_in:void 0,createdAt:new Date().toISOString()}}finally{E.close()}}async function YXt(i){try{let u=await Jli({target:i.target,openBrowser:i.openBrowser,fetch:i.fetch});return await ML(i.dataDir,u),console.log(`Logged in as ${u.user.email??u.user.sub}.`),0}catch(u){return console.error(`Login failed: ${u instanceof Error?u.message:String(u)}`),1}}async function QXt(i,u,t){let f=await i(`${u}/api/auth/mcp/register`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({client_name:"decocms-cli",redirect_uris:[t],grant_types:["authorization_code","refresh_token"],response_types:["code"],token_endpoint_auth_method:"none",application_type:"native"})});if(!f.ok)throw Error(`Client registration failed: HTTP ${f.status} ${await f.text().catch(()=>"")}`);let l=await f.json();if(typeof l?.client_id!=="string")throw Error("Client registration returned no client_id");return l.client_id}async function zXt(i,u,t,f,l,c){let E=new URLSearchParams({grant_type:"authorization_code",code:f,redirect_uri:l,client_id:t,code_verifier:c}),$=await i(`${u}/api/auth/mcp/token`,{method:"POST",headers:{"content-type":"application/x-www-form-urlencoded"},body:E.toString()});if(!$.ok)throw Error(`Token exchange failed: HTTP ${$.status} ${await $.text().catch(()=>"")}`);let w=await $.json();if(typeof w?.access_token!=="string")throw Error("Token endpoint returned no access_token");return w}function HXt(i){let u=i.split(".");if(u.length!==3||!u[1])throw Error("id_token is not a valid JWT");let t=JSON.parse(Buffer.from(u[1],"base64url").toString("utf8"));if(typeof t.sub!=="string")throw Error("id_token has no sub claim");return{sub:t.sub,email:typeof t.email==="string"?t.email:void 0,name:typeof t.name==="string"?t.name:void 0}}async function RXt(i){let u,t;switch(process.platform){case"darwin":u="open",t=[i];break;case"win32":u="cmd",t=["/c","start","",i];break;default:u="xdg-open",t=[i];break}await new Promise((f)=>{let l=JXt(u,t,{stdio:"ignore",detached:!0});l.on("error",()=>{console.log(`Could not open browser automatically. Please open this URL manually:
180
180
  ${i}`),f()}),l.on("spawn",()=>{l.unref(),f()})})}var LXt="https://studio.decocms.com",WXt="openid profile email offline_access";var Uzi=g(()=>{Qbu();ZM()});async function Cbu(i,u=fetch,t=Date.now){if(!i.refreshToken)throw new u3("invalid_grant","Session has no refresh token");let f=new URLSearchParams({grant_type:"refresh_token",refresh_token:i.refreshToken,client_id:i.clientId}),l;try{l=await u(`${i.target}/api/auth/mcp/token`,{method:"POST",headers:{"content-type":"application/x-www-form-urlencoded"},body:f.toString()})}catch(E){throw new u3("transient",E instanceof Error?E.message:String(E))}if(!l.ok){let E=await l.text().catch(()=>"");if(l.status>=400&&l.status<500)throw new u3("invalid_grant",`HTTP ${l.status} ${E}`);throw new u3("transient",`HTTP ${l.status} ${E}`)}let c=await l.json();if(typeof c.access_token!=="string")throw new u3("transient","Token endpoint returned no access_token");return{...i,accessToken:c.access_token,refreshToken:c.refresh_token??i.refreshToken,expiresAt:c.expires_in?Math.floor(t()/1000)+c.expires_in:i.expiresAt}}var u3;var Xli=g(()=>{u3=class u3 extends Error{kind;constructor(i,u){super(u);this.name="RefreshFailedError",this.kind=i}}});async function cn(i){let u=await Kli(i.dataDir,i.target);if(!u)return null;let t=i.now??Date.now;if(!CXt(u,t()))return u;try{let f=await Cbu(u,i.fetch,t);return await ML(i.dataDir,f),f}catch(f){if(f instanceof u3&&f.kind==="invalid_grant")return null;throw f}}function CXt(i,u){if(i.expiresAt===void 0)return!1;let t=Math.floor(u/1000);return i.expiresAt-bXt<t}var bXt=60;var TM=g(()=>{Xli();ZM()});var Mbu={};Ji(Mbu,{whoamiCommand:()=>MXt});async function MXt(i){let u;try{u=await cn({dataDir:i.dataDir,fetch:i.fetch,now:i.now})}catch(t){if(t instanceof u3&&t.kind==="transient")return console.error(`Could not refresh session: ${t.message}. Run \`decocms auth login\` to authenticate.`),1;throw t}if(!u)return console.error("Not logged in. Run `decocms auth login` to authenticate."),1;return console.log(`Target: ${u.target}`),console.log(`User: ${u.user.email??u.user.sub}`),0}var qbu=g(()=>{TM();Xli()});var Vbu={};Ji(Vbu,{logoutCommand:()=>qXt});async function qXt(i){if(!await Kli(i.dataDir))return console.log("Already logged out."),0;return await Rbu(i.dataDir),console.log("Logged out."),0}var rbu=g(()=>{ZM()});async function Lli(i){let u=i.isInteractive??Boolean(process.stdout.isTTY),t;try{t=await cn({dataDir:i.dataDir,target:i.target,fetch:i.fetch,now:i.now})}catch(l){if(l instanceof u3&&l.kind==="transient")throw Error(`Could not refresh session: ${l.message}. Run \`decocms auth login\` to sign in again.`);throw l}if(t&&i.target&&u&&!VXt(t.target,i.target))t=null;if(t)return t;if(!u)throw Error("No session found. Run `decocms auth login` first, then re-run the command.");console.log(`Not logged in \u2014 opening browser to sign in to ${i.intent}.`);let f=await Jli({target:i.target,openBrowser:i.openBrowser,fetch:i.fetch});return await ML(i.dataDir,f),console.log(`Logged in as ${f.user.email??f.user.sub}.`),f}function VXt(i,u){try{return new URL(i).host===new URL(u).host}catch{return i===u}}var Pzi=g(()=>{Uzi();TM();Xli();ZM()});function nh(i){let u=i?.userName?.trim();if(!u||mbu.test(u))return null;let t=i?.userEmail?.trim();if(!t||mbu.test(t))return{userName:u};if(!rXt.test(t))return{userName:u};return{userName:u,userEmail:t}}var mbu,rXt;var Wli=g(()=>{mbu=/[\r\n<>]/,rXt=/^[^\s@<>]+@[^\s@<>]+\.[^\s@<>]+$/});var BM=g(()=>{O4();Wli()});async function Qli(i){try{let u=await fetch(`${i}/health`,{signal:AbortSignal.timeout(mXt)});if(!u.ok)return null;let t=await u.json();if(typeof t==="object"&&t!==null&&typeof t.bootId==="string"&&typeof t.ready==="boolean"&&t.setup&&typeof t.setup.running==="boolean"&&typeof t.setup.done==="boolean")return t;return null}catch{return null}}async function zli(i){for(let u=0;u<ebu;u++){if(await Qli(i)!==null)return;let t=(Math.random()*2-1)*eXt;await N0(abu+t)}throw Error(`sandbox daemon at ${i} did not respond on /health within ${ebu*abu/1000}s`)}async function En(i,u,t,f,l){return aXt(i,u,"POST",t,f,l)}async function aXt(i,u,t,f,l,c){let E={...f};if(l&&l.rotateToken!==void 0)E.auth=l;let $=await fetch(`${i}/_sandbox/config`,{method:t,headers:{"Content-Type":"application/json",Authorization:`Bearer ${u}`},body:JSON.stringify(E),signal:AbortSignal.timeout(c?.timeoutMs??obu)}),w=await $.text();if(!$.ok)throw new Yli($.status,w);return JSON.parse(w)}async function sbu(i,u,t){let f=await fetch(`${i}/_sandbox/orgfs-config`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${u}`},body:t,signal:AbortSignal.timeout(obu)}),l=await f.text();if(!f.ok)throw Error(`sandbox daemon /_sandbox/orgfs-config returned ${f.status}: ${l}`);return JSON.parse(l)}async function FM(i,u,t,f){let l=new Headers(f.headers);for(let $ of oXt)l.delete($);l.set("authorization",`Bearer ${u}`);let c=f.method!=="GET"&&f.method!=="HEAD",E=`${i}${t.startsWith("/")?t:`/${t}`}`;return fetch(E,{method:f.method,headers:l,body:c?f.body:void 0,redirect:"manual",signal:f.signal,duplex:c?"half":void 0})}var Yli,mXt=500,obu=30000,ebu=25,abu=200,eXt=50,oXt;var Azi=g(()=>{BM();Yli=class Yli extends Error{status;constructor(i,u){super(`sandbox daemon /_sandbox/config returned ${i}: ${u}`);this.status=i;this.name="ConfigRequestError"}};oXt=["cookie","host","connection","keep-alive","proxy-authenticate","proxy-authorization","te","trailer","transfer-encoding","accept-encoding","content-length"]});var iCu=`var __create = Object.create;
@@ -84626,7 +84626,7 @@ ${$}`;h(O);return}if(E(null,y),t.strategy==="count"){if(w--,w===0)h()}if(t.strat
84626
84626
  `);function h(_){if(t===void 0)return!0;let v=sM(_),D=v&&sM(t)?deu(t):t,n=v?deu(_):heu(_),N=sCt(D,n);return N===""||!N.startsWith("..")&&!aCt(N)}return{upsert(_){f.run({$handle:_.handle,$status:_.status,$sandboxPath:_.sandboxPath,$port:_.port??null,$previewUrl:_.previewUrl??null,$repoCloneUrl:_.repoCloneUrl??null,$branch:_.branch??null,$projectName:_.projectName??null,$error:_.error??null,$now:Date.now()})},list(){return l.all().map(Q1i)},reconcile(){let _=Date.now();for(let v of l.all().map(Q1i)){if(!h(v.sandboxPath)){c.run({$handle:v.handle,$now:_});continue}if(!sM(v.sandboxPath)){E.run({$handle:v.handle,$now:_});continue}if(v.status==="spawning"||v.status==="ready"||v.status==="failed"||v.status==="missing")$.run({$handle:v.handle,$now:_})}return l.all().map(Q1i)},prune(_){let v=[],D=[],n=this.reconcile();for(let N of n){if(!h(N.sandboxPath)){D.push({handle:N.handle,sandboxPath:N.sandboxPath,reason:"outside_root",deletedFiles:!1});continue}if(_.missing&&N.status==="missing"){w.run({$handle:N.handle}),v.push({handle:N.handle,sandboxPath:N.sandboxPath,reason:"missing",deletedFiles:!1});continue}if(!_.merged||!sM(N.sandboxPath))continue;if(N.branch===null||N.branch.trim()===""){D.push({handle:N.handle,sandboxPath:N.sandboxPath,reason:"no_branch",deletedFiles:!1});continue}if(!On(N.sandboxPath,["rev-parse","--is-inside-work-tree"]).ok){D.push({handle:N.handle,sandboxPath:N.sandboxPath,reason:"git_unavailable",deletedFiles:!1});continue}let O=On(N.sandboxPath,["status","--porcelain"]);if(!O.ok){D.push({handle:N.handle,sandboxPath:N.sandboxPath,reason:"git_unavailable",deletedFiles:!1});continue}if(O.stdout.trim()!==""){D.push({handle:N.handle,sandboxPath:N.sandboxPath,reason:"dirty_worktree",deletedFiles:!1});continue}let y=veu(N.sandboxPath,N.branch);if(y===null){D.push({handle:N.handle,sandboxPath:N.sandboxPath,reason:"git_unavailable",deletedFiles:!1});continue}if(!y){D.push({handle:N.handle,sandboxPath:N.sandboxPath,reason:"branch_not_merged",deletedFiles:!1});continue}mCt(N.sandboxPath,{recursive:!0,force:!0}),w.run({$handle:N.handle}),v.push({handle:N.handle,sandboxPath:N.sandboxPath,reason:"merged",deletedFiles:!0})}return{removed:v,skipped:D}},delete(_){w.run({$handle:_})},inspect(_){let v=d.get({$handle:_});if(v===null)return null;let D=Q1i(v),n=0,N=null;if(sM(D.sandboxPath)&&On(D.sandboxPath,["rev-parse","--is-inside-work-tree"]).ok){let O=On(D.sandboxPath,["status","--porcelain"]);if(O.ok){let y=O.stdout.trim();n=y===""?0:y.split(`
84627
84627
  `).length}if(D.branch!==null&&D.branch.trim()!=="")N=veu(D.sandboxPath,D.branch)}return{handle:D.handle,branch:D.branch,sandboxPath:D.sandboxPath,dirtyCount:n,merged:N}},close(){u.close()}}}var qRi=()=>{};function tMt(i,u){return u?[["umount","-f",i]]:[["fusermount","-uz",i],["umount","-l",i]]}function neu(i,u){if(process.platform==="win32")return;for(let t of tMt(i,u))if(Bun.spawnSync(t,{stdout:"ignore",stderr:"ignore",timeout:5000}).exitCode===0)break}var geu=()=>{};import{existsSync as fMt,readdirSync as lMt}from"fs";import{rm as cMt}from"fs/promises";import{join as Neu}from"path";async function Oeu(i,u={}){let t=u.detach??EMt,f=u.exists??fMt,l=u.readdir??(($)=>lMt($)),c=u.rm??(($)=>cMt($,{recursive:!0,force:!0})),E=Neu(i,"org");if(f(E))for(let $ of l(E))t(Neu(E,$));await c(i)}var EMt=(i)=>neu(i,process.platform==="darwin");var yeu=g(()=>{geu()});import{join as $Mt}from"path";function Zeu(i){let u=i.purge??Oeu;return{stopSandbox(t){return i.provider.deleteSandbox(t)},inspectSandbox(t){return i.registry.inspect(t)},async removeSandbox(t){try{return await bl(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??$Mt(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 Lc?f.cause:f;return{ok:!1,error:l instanceof Error?l.message:String(l)}}}}}var Teu=g(()=>{O4();yeu()});import{randomBytes as wMt}from"crypto";import{mkdir as dMt}from"fs/promises";import{createServer as hMt}from"net";import{join as _Mt}from"path";function Beu(i,u){return Error(`sandbox failed to start: ${i}`,{cause:u})}function Feu(i){if(!(i instanceof Error))return!1;return i.name==="TimeoutError"||/timed out|timeout|operation was aborted|aborted/i.test(i.message)}function Ueu(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 vMt(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 DMt(i){return{repoCloneUrl:i.repo?.cloneUrl??null,branch:i.repo?.branch??null,projectName:vMt(i.repo?.cloneUrl)}}function Peu(i){let u=i.maxSandboxes??20,t=new Map,f=i.pickPort??nMt,l=i.fetchImpl??fetch,c=i.resolvePreviewUrl??((n,N)=>`http://127.0.0.1:${N}`),E=(n)=>_Mt(i.dataDir,"sandboxes",n),$=(n)=>{try{i.registry?.upsert(n)}catch(N){console.warn(`[user-desktop] failed to persist sandbox lifecycle handle=${n.handle} status=${n.status}:`,N)}},w=(n)=>{try{i.onEvent?.(n)}catch{}},d=async(n)=>{let N=new AbortController,O=setTimeout(()=>N.abort(),1500);try{let y=await l(`${n}/health`,{signal:N.signal});if(!y.ok)console.warn(`[user-desktop] probe ${n}/health \u2192 ${y.status} (treating as dead)`);return y.ok}catch(y){return console.warn(`[user-desktop] probe ${n}/health failed: ${y instanceof Error?y.message:String(y)} (treating as dead)`),!1}finally{clearTimeout(O)}},h=(n)=>{console.warn(`[user-desktop] evicting dead daemon handle=${n.handle} port=${n.port}`);try{n.process.kill("SIGTERM")}catch{}if(t.get(n.handle)===n)t.delete(n.handle),$({handle:n.handle,status:"stopped",sandboxPath:E(n.handle),port:null,previewUrl:null,...n.registryMetadata,error:null}),w({handle:n.handle,phase:"evicted"})},_=new Map;function v(){if(t.size<u)return;let n=[...t.values()].filter((O)=>O.activeDispatchCount===0).sort((O,y)=>O.lastUsedAt-y.lastUsedAt);if(n.length===0){console.warn(`[user-desktop] at cap ${t.size}/${u} but every sandbox is pinned (active dispatch) \u2014 exceeding cap temporarily`);return}let N=n[0];console.log(`[user-desktop] evicting LRU victim handle=${N.handle} port=${N.port} (cap ${u} reached, size=${t.size})`);try{N.process.kill("SIGTERM")}catch{}t.delete(N.handle),$({handle:N.handle,status:"stopped",sandboxPath:E(N.handle),port:null,previewUrl:null,...N.registryMetadata,error:null}),w({handle:N.handle,phase:"evicted"})}let D=async(n)=>{let N=DMt(n),O=E(n.handle);$({handle:n.handle,status:"spawning",sandboxPath:O,port:null,previewUrl:null,...N,error:null}),w({handle:n.handle,phase:"spawning",sandboxPath:O,projectName:N.projectName,branch:N.branch}),v();let y,Z=null,T;try{await dMt(O,{recursive:!0}),console.log(`[user-desktop] ensure handle=${n.handle} repo=${n.repo?.cloneUrl??"(none)"} branch=${n.repo?.branch??"(none)"} runtime=${n.workload?.runtime??"(autodetect)"} pm=${n.workload?.packageManager??"(autodetect)"}`),T=wMt(24).toString("hex");let[k,I]=await Promise.all([f(),f()]);y=k,console.log(`[user-desktop] spawn handle=${n.handle} port=${y} devPort=${I} workdir=${O}`),Z=await Promise.resolve(i.spawnDaemon({workdir:O,handle:n.handle,port:y,daemonToken:T,offloadAllowedHosts:n.offloadAllowedHosts??[],offloadAllowSameHostDev:n.offloadAllowSameHostDev??!1,orgFsConfigJson:n.orgFsConfigJson}));try{await i.waitForHealth(y)}catch(j){throw Beu("the sandbox didn't come online in time",j)}console.log(`[user-desktop] healthy handle=${n.handle} port=${y} \u2014 posting config`);try{await i.postConfig(y,I,{repo:n.repo,workload:n.workload,operator:n.operator},T)}catch(j){throw Beu(Feu(j)?"configuration timed out":"the sandbox rejected its configuration",j)}}catch(k){if((Feu(k)?console.warn:console.error)(`[user-desktop] sandbox bring-up failed handle=${n.handle} port=${y??"(none)"}${Z?" (killing daemon)":""}:`,k),Z)try{Z.kill("SIGKILL")}catch{}throw w({handle:n.handle,phase:"failed",error:Ueu(k),sandboxPath:O,projectName:N.projectName,branch:N.branch}),$({handle:n.handle,status:"failed",sandboxPath:O,port:null,previewUrl:null,...N,error:Ueu(k)}),k}if(!Z||y===void 0)throw Error("sandbox bring-up invariant violated");let B=`http://127.0.0.1:${y}`,F=c(n.handle,y);console.log(`[user-desktop] ready handle=${n.handle} port=${y} sandboxApiUrl=${B} previewUrl=${F}`);let A={handle:n.handle,port:y,process:Z,sandboxApiUrl:B,previewUrl:F,lastUsedAt:Date.now(),activeDispatchCount:0,daemonToken:T,registryMetadata:N};if(t.set(n.handle,A),$({handle:n.handle,status:"ready",sandboxPath:O,port:y,previewUrl:F,...N,error:null}),w({handle:n.handle,phase:"ready",port:y,previewUrl:F,sandboxPath:O,projectName:N.projectName,branch:N.branch}),Z.exited)Z.exited.then(()=>{if(t.get(n.handle)===A)console.warn(`[user-desktop] daemon process exited unexpectedly handle=${n.handle} port=${y} \u2014 removing from cache`),t.delete(n.handle),$({handle:n.handle,status:"stopped",sandboxPath:O,port:null,previewUrl:null,...N,error:null}),w({handle:n.handle,phase:"evicted"});else console.log(`[user-desktop] daemon process exited handle=${n.handle} port=${y} (already replaced/removed)`)});return{sandboxApiUrl:B,previewUrl:F,port:y}};return{async ensureSandbox(n){let N=t.get(n.handle);if(N){if(await d(N.sandboxApiUrl))return console.log(`[user-desktop] cache hit handle=${n.handle} port=${N.port} (alive)`),N.lastUsedAt=Date.now(),{sandboxApiUrl:N.sandboxApiUrl,previewUrl:N.previewUrl,port:N.port};console.warn(`[user-desktop] cache stale handle=${n.handle} port=${N.port} \u2014 respawning`),h(N)}let O=_.get(n.handle);if(O)return console.log(`[user-desktop] joining in-flight ensure handle=${n.handle}`),O;let y=D(n).finally(()=>{_.delete(n.handle)});return _.set(n.handle,y),y},proxyPort(n){let N=t.get(n);if(N)N.lastUsedAt=Date.now();return N?.port??null},getDaemonToken(n){return t.get(n)?.daemonToken??null},hasHandle(n){return t.has(n)||_.has(n)},recordHit(n){let N=t.get(n);if(N)N.lastUsedAt=Date.now()},acquireDispatch(n){let N=t.get(n);if(!N)return()=>{};N.activeDispatchCount+=1;let O=!1;return()=>{if(O)return;O=!0;let y=t.get(n);if(y)y.activeDispatchCount=Math.max(0,y.activeDispatchCount-1)}},listSandboxes(){return[...t.values()]},async deleteSandbox(n){let N=t.get(n);if(!N){console.log(`[user-desktop] delete handle=${n} (not found, no-op)`);return}if(N.activeDispatchCount>0){console.warn(`[user-desktop] delete handle=${n} port=${N.port} REFUSED \u2014 ${N.activeDispatchCount} active dispatch(es) in flight`);return}console.log(`[user-desktop] delete handle=${n} port=${N.port}`);try{N.process.kill("SIGTERM")}catch{}t.delete(n),$({handle:n,status:"stopped",sandboxPath:E(n),port:null,previewUrl:null,repoCloneUrl:null,branch:null,projectName:null,error:null}),w({handle:n,phase:"deleted"})},async shutdown(){console.log(`[user-desktop] shutdown \u2014 killing ${t.size} sandbox(es)`);for(let n of t.values())try{n.process.kill("SIGTERM")}catch{}t.clear()}}}function nMt(){return new Promise((i,u)=>{let t=hMt();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 Aeu=()=>{};import{randomUUID as gMt}from"crypto";import{hostname as NMt}from"os";async function Ieu(i){let u=NMt()||void 0;i.monitor?.onMachine?.(u??"this machine");let t=cCu(i.dataDir,{outFd:i.logFd,perSandboxLog:i.perSandboxLogs,hotReload:i.hotReload}),f=H1i({path:z1i(i.dataDir),managedSandboxRoot:`${i.dataDir}/sandboxes`}),l=!1,c=()=>{if(l)return;l=!0;try{f.close()}catch{}};try{let E=0,$=Peu({dataDir:i.dataDir,registry:f,resolvePreviewUrl:(j,C)=>E>0?`http://${j}.localhost:${E}`:`http://127.0.0.1:${C}`,spawnDaemon:async(j)=>{let C={DAEMON_BOOT_ID:gMt(),APP_ROOT:j.workdir,PROXY_PORT:String(j.port),DAEMON_TOKEN:j.daemonToken,OFFLOAD_ALLOWED_HOSTS:j.offloadAllowedHosts.join(","),...j.offloadAllowSameHostDev?{OFFLOAD_ALLOW_SAME_HOST_DEV:"1"}:{}};if(j.orgFsConfigJson){let W=await dCu(i.dataDir);if(W)C.ORGFS_CONFIG=j.orgFsConfigJson,C.ORGFS_RCLONE_PATH=W}let K=await t({workdir:j.workdir,env:C,daemonPort:j.port});return{port:j.port,kill:(W)=>K.kill(W),exited:K.exited.then(()=>{return})}},postConfig:async(j,C,K,W)=>{let r={port:C};if(K.workload)r.runtime=K.workload.runtime,r.packageManager={name:K.workload.packageManager,...K.workload.packageManagerPath?{path:K.workload.packageManagerPath}:{}};let Y={application:r},ti=nh(K.operator??null);if(ti)Y.operator=ti;if(K.repo)Y.git={repository:{cloneUrl:K.repo.cloneUrl,branch:K.repo.branch},...K.repo.userName&&K.repo.userEmail?{identity:{userName:K.repo.userName,userEmail:K.repo.userEmail}}:{}};await En(`http://127.0.0.1:${j}`,W,Y)},waitForHealth:async(j)=>{await zli(`http://127.0.0.1:${j}`)},maxSandboxes:20,onEvent:i.monitor?.onEvent}),w=await omu({port:i.port,lookupSandboxPort:(j)=>$.proxyPort(j)});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=_Cu({provider:$}),h=async()=>{let j=await cn({dataDir:i.dataDir,target:i.clusterBaseUrl});if(!j)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 j.accessToken},_=await $eu(i.dataDir),v=process.env.npm_package_version??"0.0.0",D=await MRi(),n=ceu(D,{onChange:(j)=>{console.log(`[link-daemon] capabilities detected: +${j.join(",")} (now: ${D.join(",")})`)}}),N=Kzi({path:`${i.dataDir}/link/outbox.sqlite`});N.clear();let O=()=>{},y=new AbortController,Z={clusterBaseUrl:i.clusterBaseUrl,getAccessToken:h,provider:$,outbox:N,controlHandler:d,capabilities:D,machineId:_,cliVersion:v,previewPort:w.port,onConnected:()=>{i.monitor?.onCluster?.("linked"),console.log(`Linked to ${i.clusterBaseUrl}`)},onShutdown:()=>O(),runLifetimeSignal:y.signal};console.log(`[link-daemon] transport=tunnel cluster=${i.clusterBaseUrl}`);let T=await zmu(Z);console.log("[link-daemon] active transport=tunnel");let B,F=new Promise((j)=>{B=j}),A=!1,k=async()=>{if(A)return;A=!0,y.abort(),console.log(`
84628
84628
  Shutting down\u2026`),n();try{await T.close()}catch{}try{await w.stop()}catch{}try{await $.shutdown()}catch{}try{N.close()}catch{}c(),B(0)};process.on("SIGINT",()=>void k()),process.on("SIGTERM",()=>void k()),O=()=>{console.log("Disconnect requested from the Studio web UI \u2014 shutting down. Run `bunx decocms@latest link` to reconnect."),k()},T.closed.then(()=>{if(i.monitor?.onCluster?.("closed"),!A)console.error("Cluster connection closed permanently; exiting."),k()});let I=Zeu({provider:$,registry:f,dataDir:i.dataDir});return{stopped:F,stop:k,stopSandbox:I.stopSandbox,removeSandbox:I.removeSandbox,inspectSandbox:I.inspectSandbox}}catch(E){throw c(),E}}var xeu=g(()=>{Azi();BM();ECu();hCu();vCu();Jzi();Hmu();smu();Eeu();weu();TM();qRi();Teu();Aeu()});function VRi(i){return i.map((u)=>typeof u==="string"?u:String(u)).join(" ")}import{createServer as OMt}from"net";async function ZMt(i){for(let u of yMt)if(await rRi(i,u))return u;return null}async function keu(i,{intervalMs:u=1000}={}){for(;;){let t=await ZMt(i);if(t)return t;await N0(u)}}function rRi(i,u){return new Promise((t)=>{let f=OMt();f.once("error",(l)=>{t(l.code==="EADDRINUSE")}),f.listen(i,u,()=>{f.close(()=>t(!1))})})}var yMt;var mRi=g(()=>{O4();yMt=["localhost","127.0.0.1","0.0.0.0"]});function Geu(i){return typeof i==="object"&&i!==null&&"code"in i&&i.code==="EADDRINUSE"}function TMt(i,u=process.platform){if(u==="win32")return`for /f "tokens=5" %P in ('netstat -ano ^| findstr /R /C:":${i} .*LISTENING"') do taskkill /F /PID %P`;return`kill -9 $(lsof -ti tcp:${i})`}function jeu(i,u=process.platform){return[`Port ${i} is already in use.`,"Run this command to stop the process listening on it, then retry `decocms link`:","",` ${TMt(i,u)}`].join(`
84629
- `)}var eRi;var Seu=g(()=>{eRi=class eRi extends Error{port;code="EADDRINUSE";constructor(i){super(`Port ${i} is already in use.`);this.port=i;this.name="PortInUseError"}}});var cW;var R1i=g(()=>{cW={name:"decocms",version:"4.102.0",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/mesh"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:'bun run migrate && concurrently "bun run dev:client" "bun run dev:server"',"dev:servers":'concurrently "bun run dev:client" "bun run dev:server"',"dev:client":"vite dev","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts","build:client":"bun --bun vite build","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","db:migrate":"bun run ./dist/server/migrate.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts",test:"bun test","test:ct":"playwright test -c playwright-ct.config.ts","test:ct:ui":"playwright test -c playwright-ct.config.ts --ui","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts","smoke:link":"bun run scripts/smoke-link.ts",prepublishOnly:"bun run build:client && bun run build:server"},optionalDependencies:{"@anthropic-ai/claude-agent-sdk":"^0.3.181","@duckdb/node-api":"^1.5.0-r.1","@openai/codex":"0.144.3","@openai/codex-darwin-arm64":"npm:@openai/codex@0.144.3-darwin-arm64","@openai/codex-darwin-x64":"npm:@openai/codex@0.144.3-darwin-x64","@openai/codex-linux-arm64":"npm:@openai/codex@0.144.3-linux-arm64","@openai/codex-linux-x64":"npm:@openai/codex@0.144.3-linux-x64","@openai/codex-win32-arm64":"npm:@openai/codex@0.144.3-win32-arm64","@openai/codex-win32-x64":"npm:@openai/codex@0.144.3-win32-x64"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@dnd-kit/core":"^6.3.1","@dnd-kit/sortable":"^10.0.0","@dnd-kit/utilities":"^3.2.2","@inkjs/ui":"^2.0.0","@modelcontextprotocol/ext-apps":"^1.7.1","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","@tanstack/react-virtual":"3.13.24","@tiptap/extension-text-align":"3.20.2","@xterm/addon-fit":"^0.11.0","@xterm/xterm":"^6.0.0",echarts:"^5.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","node-pty":"^1.0.0","posthog-js":"^1.371.1","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6","use-stick-to-bottom":"^1.1.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@ai-sdk/react":"^3.0.210","@better-auth/sso":"1.4.1","@daveyplate/better-auth-ui":"^3.2.7","@deco/ui":"workspace:*","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/harness":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/mesh-sdk":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/std":"workspace:*","@decocms/tunnel":"workspace:*","@floating-ui/react":"^0.27.16","@happy-dom/global-registrator":"^20.9.0","@hookform/resolvers":"^5.2.2","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@monaco-editor/react":"^4.7.0","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@playwright/experimental-ct-react":"1.59.1","@playwright/test":"^1.58.2","@radix-ui/react-avatar":"^1.1.10","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-dropdown-menu":"^2.1.16","@radix-ui/react-label":"^2.1.7","@radix-ui/react-select":"^2.2.6","@radix-ui/react-separator":"^1.1.7","@radix-ui/react-slot":"^1.2.3","@radix-ui/react-tabs":"^1.1.13","@rjsf/shadcn":"^6.6.2","@rjsf/utils":"^6.6.2","@rjsf/validator-ajv8":"^6.6.2","@tailwindcss/vite":"^4.1.17","@tanstack/react-query":"5.100.10","@tanstack/react-router":"1.169.2","@testing-library/jest-dom":"^6.9.1","@testing-library/react":"^16.3.2","@tiptap/core":"3.20.2","@tiptap/extension-placeholder":"3.20.2","@tiptap/pm":"3.20.2","@tiptap/react":"3.20.2","@tiptap/starter-kit":"3.20.2","@tiptap/suggestion":"3.20.2","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@untitledui/icons":"^0.0.19","@vercel/nft":"^1.1.1","@vitejs/plugin-react":"^5.1.0",ai:"^6.0.208","babel-plugin-react-compiler":"^1.0.0","better-auth":"1.4.22","class-variance-authority":"^0.7.1",clsx:"^2.1.1",concurrently:"^9.2.1",croner:"^9.1.0","date-fns":"^4.1.0",degit:"^2.8.4",hono:"^4.10.7","input-otp":"^1.4.2",jose:"^6.0.11","lucide-react":"^0.468.0",marked:"^15.0.6",nanoid:"^5.1.6",pg:"^8.16.3",prettier:"^3.4.2","react-hook-form":"^7.66.0","react-markdown":"^10.1.0","react-resizable-panels":"^2.1.7","react-syntax-highlighter":"^15.6.1",recharts:"^3.6.0","rehype-raw":"^7.0.0","remark-gfm":"^4.0.0","sass-embedded":"^1.97.2",sonner:"^2.0.7","tailwind-merge":"^3.3.1",tailwindcss:"^4.1.17",typescript:"^5.9.3",vite:"^7.2.1","vite-tsconfig-paths":"^5.1.4",zod:"^4.0.0"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","mesh","tools"],license:"MIT",publishConfig:{access:"public"}}});var pM={};Ji(pM,{printBanner:()=>UMt,bannerLines:()=>Keu,BANNER_LINES:()=>b1i,BANNER_GRADIENT:()=>C1i});function FMt(i){let u=Number.parseInt(i.slice(1),16);return[u>>16&255,u>>8&255,u&255]}function Keu(i){let u=b1i.map((t,f)=>{let[l,c,E]=FMt(C1i[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 UMt(i){console.log("");for(let u of Keu(i))console.log(u);console.log("")}var b1i,C1i;var EW=g(()=>{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 "],C1i=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"]});import{Box as PMt,Text as Jeu}from"ink";import{jsx as AMt,jsxs as Xeu}from"react/jsx-runtime";function M1i({version:i}){return Xeu(PMt,{flexDirection:"column",marginTop:1,children:[b1i.map((u,t)=>AMt(Jeu,{color:C1i[t],children:u},t)),Xeu(Jeu,{dimColor:!0,children:[" v",i]})]})}var aRi=g(()=>{EW()});function Leu(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 $W(i){return[...i.values()].map((u)=>u.handle).sort((u,t)=>u.localeCompare(t))}function Weu(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 Yeu(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 ibi={};Ji(ibi,{subscribeLinkState:()=>oRi,setSelectedHandle:()=>sRi,setRemoving:()=>r1i,setPersistedSandboxes:()=>LMt,setPendingConfirm:()=>uq,setMachine:()=>SMt,setLogPath:()=>JMt,setLinkActions:()=>XMt,setIngress:()=>jMt,setDaemonError:()=>KMt,setClusterUrl:()=>GMt,setCluster:()=>kMt,setActionError:()=>V1i,resetLinkStateForTests:()=>YMt,removeSandboxRow:()=>pRi,pushSandboxEvent:()=>WMt,getLinkState:()=>iq,applySandboxEvent:()=>Qeu});function xMt(i){return i==="spawning"||i==="ready"||i==="failed"}function Qeu(i,u){let t=new Map(i),f=t.get(u.handle);if(u.phase==="evicted"||u.phase==="deleted"){if(f)t.set(u.handle,{...f,port:null,previewUrl:null,status:"stopped",error:null});return t}return t.set(u.handle,{handle:u.handle,port:u.port??f?.port??null,previewUrl:u.previewUrl??f?.previewUrl??null,status:u.phase,error:u.phase==="failed"?u.error??"failed":null,projectName:u.projectName??f?.projectName??null,branch:u.branch??f?.branch??null,sandboxPath:u.sandboxPath??f?.sandboxPath??null}),t}function zeu(){return{cluster:"connecting",clusterUrl:null,ingressUrl:null,ingressPort:null,machine:null,cap:IMt,sandboxes:new Map,daemonError:null,logPath:null,selectedHandle:null,pendingConfirm:null,removingHandles:new Set,actionError:null,actions:null}}function Q$(){for(let i of q1i)i()}function iq(){return lf}function oRi(i){return q1i.add(i),()=>q1i.delete(i)}function kMt(i){lf={...lf,cluster:i},Q$()}function GMt(i){lf={...lf,clusterUrl:i},Q$()}function jMt(i,u){lf={...lf,ingressPort:i,ingressUrl:u},Q$()}function SMt(i){lf={...lf,machine:i},Q$()}function KMt(i){lf={...lf,daemonError:i},Q$()}function JMt(i){lf={...lf,logPath:i},Q$()}function sRi(i){lf={...lf,selectedHandle:i},Q$()}function uq(i){lf={...lf,pendingConfirm:i},Q$()}function V1i(i){lf={...lf,actionError:i},Q$()}function r1i(i,u){if(lf.removingHandles.has(i)===u)return;let t=new Set(lf.removingHandles);if(u)t.add(i);else t.delete(i);lf={...lf,removingHandles:t},Q$()}function XMt(i){lf={...lf,actions:i},Q$()}function pRi(i){let u=$W(lf.sandboxes),t=Yeu(u,i,lf.selectedHandle),f=new Map(lf.sandboxes);f.delete(i);let l=new Set(lf.removingHandles);l.delete(i),lf={...lf,sandboxes:f,selectedHandle:t,pendingConfirm:null,removingHandles:l},Q$()}function LMt(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 lf.sandboxes)if(xMt(f.status))u.set(t,f);lf={...lf,sandboxes:u},Q$()}function WMt(i){lf={...lf,sandboxes:Qeu(lf.sandboxes,i)},Q$()}function YMt(){lf=zeu(),q1i.clear()}var IMt=20,lf,q1i;var tq=g(()=>{lf=zeu(),q1i=new Set});import{spawn as QMt}from"child_process";function zMt(i){if(i==="darwin")return"open";if(i==="win32")return"start";return"xdg-open"}function Heu(i,u=process.platform){let t=zMt(u);try{QMt(t,[i],{stdio:"ignore",detached:!0}).unref()}catch{}}var Reu=()=>{};function beu(i,u={}){let t=u.openUrl??Heu,f=iq(),l=$W(f.sandboxes),c=f.selectedHandle!==null&&l.includes(f.selectedHandle)?f.selectedHandle:l[0]??null,E=f.actions;switch(i.type){case"move":sRi(Weu(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);V1i(null),uq({handle:c,branch:$?.branch??w?.branch??null,dirtyCount:$?.dirtyCount??0,merged:$?.merged??null});return}case"confirmYes":{let $=f.pendingConfirm;if(uq(null),$===null||!E)return;r1i($.handle,!0),E.removeSandbox($.handle).then((w)=>{if(w.ok)pRi($.handle);else r1i($.handle,!1),V1i(w.error)});return}case"confirmNo":uq(null);return;case"quit":if(E)E.quit();return}}var Ceu=g(()=>{tq();Reu()});function Meu(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 qeu={};Ji(qeu,{LinkApp:()=>CMt});import{Box as Ml,Text as _1,useInput as HMt}from"ink";import{useSyncExternalStore as RMt}from"react";import{jsx as kf,jsxs as Ah}from"react/jsx-runtime";function bMt(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 CMt(){let i=RMt(oRi,iq),u=[...i.sandboxes.values()].sort((l,c)=>l.handle.localeCompare(c.handle)),t=$W(i.sandboxes),f=i.selectedHandle!==null&&t.includes(i.selectedHandle)?i.selectedHandle:t[0]??null;return HMt((l,c)=>{let E=Meu(l,c,i.pendingConfirm!==null);if(E!==null)beu(E)}),Ah(Ml,{flexDirection:"column",children:[kf(M1i,{version:cW.version}),kf(Ml,{marginBottom:1,children:kf(_1,{dimColor:!0,children:"\u2500".repeat(80)})}),kf(Ml,{children:i.cluster==="linked"?Ah(_1,{color:"green",children:["\u2713 Connected to ",i.clusterUrl??"deco"]}):i.cluster==="connecting"?Ah(_1,{color:"yellow",children:["\u25CC Connecting to ",i.clusterUrl??"deco","\u2026"]}):Ah(_1,{color:"red",children:["\u2717 Disconnected from ",i.clusterUrl??"deco"]})}),kf(Ml,{children:i.ingressUrl?Ah(_1,{color:"green",children:["\u2713 Serving at ",i.ingressUrl]}):kf(_1,{dimColor:!0,children:"\u25CC Starting local server\u2026"})}),kf(Ml,{marginBottom:1,children:kf(_1,{dimColor:!0,children:`${"Computer".padEnd(16)}${i.machine??"this computer"} \xB7 ${u.length} of ${i.cap} previews`})}),u.length===0?kf(_1,{dimColor:!0,children:"No previews running yet."}):Ah(Ml,{flexDirection:"column",children:[Ah(Ml,{children:[kf(Ml,{width:2,flexShrink:0}),kf(Ml,{width:wW.project,flexShrink:0,marginRight:1,children:kf(_1,{dimColor:!0,wrap:"truncate-end",children:"PROJECT"})}),kf(Ml,{width:wW.branch,flexShrink:0,marginRight:1,children:kf(_1,{dimColor:!0,wrap:"truncate-end",children:"BRANCH"})}),kf(Ml,{width:wW.status,flexShrink:0,marginRight:1,children:kf(_1,{dimColor:!0,wrap:"truncate-end",children:"STATUS"})}),kf(Ml,{flexGrow:1,children:kf(_1,{dimColor:!0,wrap:"truncate-end",children:"PREVIEW URL"})})]}),u.map((l)=>{let c=bMt(l,i.removingHandles.has(l.handle)),E=l.handle===f;return Ah(Ml,{children:[kf(Ml,{width:2,flexShrink:0,children:kf(_1,{color:"cyan",children:E?"\u203A":" "})}),kf(Ml,{width:wW.project,flexShrink:0,marginRight:1,children:kf(_1,{bold:E,wrap:"truncate-end",children:l.projectName??l.handle})}),kf(Ml,{width:wW.branch,flexShrink:0,marginRight:1,children:kf(_1,{bold:E,wrap:"truncate-end",children:l.branch??"\u2014"})}),kf(Ml,{width:wW.status,flexShrink:0,marginRight:1,children:kf(_1,{color:c.color,bold:E,wrap:"truncate-end",children:c.text})}),kf(Ml,{flexGrow:1,children:kf(_1,{dimColor:!0,wrap:"truncate-end",children:l.previewUrl??"\u2014"})})]},l.handle)})]}),i.daemonError?kf(Ml,{marginTop:1,children:Ah(_1,{color:"red",children:["\u26A0 ",i.daemonError]})}):null,i.logPath?kf(Ml,{marginTop:1,children:Ah(_1,{dimColor:!0,children:["Logs: ",i.logPath]})}):null,i.pendingConfirm?kf(Ml,{marginTop:1,children:kf(_1,{color:"yellow",children:Leu(i.pendingConfirm)})}):null,i.actionError?kf(Ml,{marginTop:1,children:Ah(_1,{color:"red",children:["\u2717 ",i.actionError]})}):null,kf(Ml,{marginTop:1,children:kf(_1,{dimColor:!0,children:"\u2191\u2193 move \xB7 s stop \xB7 d delete \xB7 o open \xB7 q quit"})})]})}var wW;var Veu=g(()=>{R1i();aRi();Ceu();tq();wW={project:18,branch:22,status:14}});var reu={};Ji(reu,{runLinkCommand:()=>oMt});import{closeSync as MMt,mkdirSync as qMt,openSync as VMt,writeSync as rMt}from"fs";import{homedir as mMt}from"os";import{join as ubi}from"path";function eMt(i,u){let t={log:console.log,warn:console.warn,error:console.error},f=(l)=>{if(u===void 0)return;try{rMt(u,`${VRi(l)}
84629
+ `)}var eRi;var Seu=g(()=>{eRi=class eRi extends Error{port;code="EADDRINUSE";constructor(i){super(`Port ${i} is already in use.`);this.port=i;this.name="PortInUseError"}}});var cW;var R1i=g(()=>{cW={name:"decocms",version:"4.104.0",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/mesh"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:'bun run migrate && concurrently "bun run dev:client" "bun run dev:server"',"dev:servers":'concurrently "bun run dev:client" "bun run dev:server"',"dev:client":"vite dev","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts","build:client":"bun --bun vite build","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","db:migrate":"bun run ./dist/server/migrate.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts",test:"bun test","test:ct":"playwright test -c playwright-ct.config.ts","test:ct:ui":"playwright test -c playwright-ct.config.ts --ui","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts","smoke:link":"bun run scripts/smoke-link.ts",prepublishOnly:"bun run build:client && bun run build:server"},optionalDependencies:{"@anthropic-ai/claude-agent-sdk":"^0.3.181","@duckdb/node-api":"^1.5.0-r.1","@openai/codex":"0.144.3","@openai/codex-darwin-arm64":"npm:@openai/codex@0.144.3-darwin-arm64","@openai/codex-darwin-x64":"npm:@openai/codex@0.144.3-darwin-x64","@openai/codex-linux-arm64":"npm:@openai/codex@0.144.3-linux-arm64","@openai/codex-linux-x64":"npm:@openai/codex@0.144.3-linux-x64","@openai/codex-win32-arm64":"npm:@openai/codex@0.144.3-win32-arm64","@openai/codex-win32-x64":"npm:@openai/codex@0.144.3-win32-x64"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@dnd-kit/core":"^6.3.1","@dnd-kit/sortable":"^10.0.0","@dnd-kit/utilities":"^3.2.2","@inkjs/ui":"^2.0.0","@modelcontextprotocol/ext-apps":"^1.7.1","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","@tanstack/react-virtual":"3.13.24","@tiptap/extension-text-align":"3.20.2","@xterm/addon-fit":"^0.11.0","@xterm/xterm":"^6.0.0",echarts:"^5.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","node-pty":"^1.0.0","posthog-js":"^1.371.1","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6","use-stick-to-bottom":"^1.1.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@ai-sdk/react":"^3.0.210","@better-auth/sso":"1.4.1","@daveyplate/better-auth-ui":"^3.2.7","@deco/ui":"workspace:*","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/harness":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/mesh-sdk":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/std":"workspace:*","@decocms/tunnel":"workspace:*","@floating-ui/react":"^0.27.16","@happy-dom/global-registrator":"^20.9.0","@hookform/resolvers":"^5.2.2","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@monaco-editor/react":"^4.7.0","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@playwright/experimental-ct-react":"1.59.1","@playwright/test":"^1.58.2","@radix-ui/react-avatar":"^1.1.10","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-dropdown-menu":"^2.1.16","@radix-ui/react-label":"^2.1.7","@radix-ui/react-select":"^2.2.6","@radix-ui/react-separator":"^1.1.7","@radix-ui/react-slot":"^1.2.3","@radix-ui/react-tabs":"^1.1.13","@rjsf/shadcn":"^6.6.2","@rjsf/utils":"^6.6.2","@rjsf/validator-ajv8":"^6.6.2","@tailwindcss/vite":"^4.1.17","@tanstack/react-query":"5.100.10","@tanstack/react-router":"1.169.2","@testing-library/jest-dom":"^6.9.1","@testing-library/react":"^16.3.2","@tiptap/core":"3.20.2","@tiptap/extension-placeholder":"3.20.2","@tiptap/pm":"3.20.2","@tiptap/react":"3.20.2","@tiptap/starter-kit":"3.20.2","@tiptap/suggestion":"3.20.2","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@untitledui/icons":"^0.0.19","@vercel/nft":"^1.1.1","@vitejs/plugin-react":"^5.1.0",ai:"^6.0.208","babel-plugin-react-compiler":"^1.0.0","better-auth":"1.4.22","class-variance-authority":"^0.7.1",clsx:"^2.1.1",concurrently:"^9.2.1",croner:"^9.1.0","date-fns":"^4.1.0",degit:"^2.8.4",hono:"^4.10.7","input-otp":"^1.4.2",jose:"^6.0.11","lucide-react":"^0.468.0",marked:"^15.0.6",nanoid:"^5.1.6",pg:"^8.16.3",prettier:"^3.4.2","react-hook-form":"^7.66.0","react-markdown":"^10.1.0","react-resizable-panels":"^2.1.7","react-syntax-highlighter":"^15.6.1",recharts:"^3.6.0","rehype-raw":"^7.0.0","remark-gfm":"^4.0.0","sass-embedded":"^1.97.2",sonner:"^2.0.7","tailwind-merge":"^3.3.1",tailwindcss:"^4.1.17",typescript:"^5.9.3",vite:"^7.2.1","vite-tsconfig-paths":"^5.1.4",zod:"^4.0.0"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","mesh","tools"],license:"MIT",publishConfig:{access:"public"}}});var pM={};Ji(pM,{printBanner:()=>UMt,bannerLines:()=>Keu,BANNER_LINES:()=>b1i,BANNER_GRADIENT:()=>C1i});function FMt(i){let u=Number.parseInt(i.slice(1),16);return[u>>16&255,u>>8&255,u&255]}function Keu(i){let u=b1i.map((t,f)=>{let[l,c,E]=FMt(C1i[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 UMt(i){console.log("");for(let u of Keu(i))console.log(u);console.log("")}var b1i,C1i;var EW=g(()=>{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 "],C1i=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"]});import{Box as PMt,Text as Jeu}from"ink";import{jsx as AMt,jsxs as Xeu}from"react/jsx-runtime";function M1i({version:i}){return Xeu(PMt,{flexDirection:"column",marginTop:1,children:[b1i.map((u,t)=>AMt(Jeu,{color:C1i[t],children:u},t)),Xeu(Jeu,{dimColor:!0,children:[" v",i]})]})}var aRi=g(()=>{EW()});function Leu(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 $W(i){return[...i.values()].map((u)=>u.handle).sort((u,t)=>u.localeCompare(t))}function Weu(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 Yeu(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 ibi={};Ji(ibi,{subscribeLinkState:()=>oRi,setSelectedHandle:()=>sRi,setRemoving:()=>r1i,setPersistedSandboxes:()=>LMt,setPendingConfirm:()=>uq,setMachine:()=>SMt,setLogPath:()=>JMt,setLinkActions:()=>XMt,setIngress:()=>jMt,setDaemonError:()=>KMt,setClusterUrl:()=>GMt,setCluster:()=>kMt,setActionError:()=>V1i,resetLinkStateForTests:()=>YMt,removeSandboxRow:()=>pRi,pushSandboxEvent:()=>WMt,getLinkState:()=>iq,applySandboxEvent:()=>Qeu});function xMt(i){return i==="spawning"||i==="ready"||i==="failed"}function Qeu(i,u){let t=new Map(i),f=t.get(u.handle);if(u.phase==="evicted"||u.phase==="deleted"){if(f)t.set(u.handle,{...f,port:null,previewUrl:null,status:"stopped",error:null});return t}return t.set(u.handle,{handle:u.handle,port:u.port??f?.port??null,previewUrl:u.previewUrl??f?.previewUrl??null,status:u.phase,error:u.phase==="failed"?u.error??"failed":null,projectName:u.projectName??f?.projectName??null,branch:u.branch??f?.branch??null,sandboxPath:u.sandboxPath??f?.sandboxPath??null}),t}function zeu(){return{cluster:"connecting",clusterUrl:null,ingressUrl:null,ingressPort:null,machine:null,cap:IMt,sandboxes:new Map,daemonError:null,logPath:null,selectedHandle:null,pendingConfirm:null,removingHandles:new Set,actionError:null,actions:null}}function Q$(){for(let i of q1i)i()}function iq(){return lf}function oRi(i){return q1i.add(i),()=>q1i.delete(i)}function kMt(i){lf={...lf,cluster:i},Q$()}function GMt(i){lf={...lf,clusterUrl:i},Q$()}function jMt(i,u){lf={...lf,ingressPort:i,ingressUrl:u},Q$()}function SMt(i){lf={...lf,machine:i},Q$()}function KMt(i){lf={...lf,daemonError:i},Q$()}function JMt(i){lf={...lf,logPath:i},Q$()}function sRi(i){lf={...lf,selectedHandle:i},Q$()}function uq(i){lf={...lf,pendingConfirm:i},Q$()}function V1i(i){lf={...lf,actionError:i},Q$()}function r1i(i,u){if(lf.removingHandles.has(i)===u)return;let t=new Set(lf.removingHandles);if(u)t.add(i);else t.delete(i);lf={...lf,removingHandles:t},Q$()}function XMt(i){lf={...lf,actions:i},Q$()}function pRi(i){let u=$W(lf.sandboxes),t=Yeu(u,i,lf.selectedHandle),f=new Map(lf.sandboxes);f.delete(i);let l=new Set(lf.removingHandles);l.delete(i),lf={...lf,sandboxes:f,selectedHandle:t,pendingConfirm:null,removingHandles:l},Q$()}function LMt(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 lf.sandboxes)if(xMt(f.status))u.set(t,f);lf={...lf,sandboxes:u},Q$()}function WMt(i){lf={...lf,sandboxes:Qeu(lf.sandboxes,i)},Q$()}function YMt(){lf=zeu(),q1i.clear()}var IMt=20,lf,q1i;var tq=g(()=>{lf=zeu(),q1i=new Set});import{spawn as QMt}from"child_process";function zMt(i){if(i==="darwin")return"open";if(i==="win32")return"start";return"xdg-open"}function Heu(i,u=process.platform){let t=zMt(u);try{QMt(t,[i],{stdio:"ignore",detached:!0}).unref()}catch{}}var Reu=()=>{};function beu(i,u={}){let t=u.openUrl??Heu,f=iq(),l=$W(f.sandboxes),c=f.selectedHandle!==null&&l.includes(f.selectedHandle)?f.selectedHandle:l[0]??null,E=f.actions;switch(i.type){case"move":sRi(Weu(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);V1i(null),uq({handle:c,branch:$?.branch??w?.branch??null,dirtyCount:$?.dirtyCount??0,merged:$?.merged??null});return}case"confirmYes":{let $=f.pendingConfirm;if(uq(null),$===null||!E)return;r1i($.handle,!0),E.removeSandbox($.handle).then((w)=>{if(w.ok)pRi($.handle);else r1i($.handle,!1),V1i(w.error)});return}case"confirmNo":uq(null);return;case"quit":if(E)E.quit();return}}var Ceu=g(()=>{tq();Reu()});function Meu(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 qeu={};Ji(qeu,{LinkApp:()=>CMt});import{Box as Ml,Text as _1,useInput as HMt}from"ink";import{useSyncExternalStore as RMt}from"react";import{jsx as kf,jsxs as Ah}from"react/jsx-runtime";function bMt(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 CMt(){let i=RMt(oRi,iq),u=[...i.sandboxes.values()].sort((l,c)=>l.handle.localeCompare(c.handle)),t=$W(i.sandboxes),f=i.selectedHandle!==null&&t.includes(i.selectedHandle)?i.selectedHandle:t[0]??null;return HMt((l,c)=>{let E=Meu(l,c,i.pendingConfirm!==null);if(E!==null)beu(E)}),Ah(Ml,{flexDirection:"column",children:[kf(M1i,{version:cW.version}),kf(Ml,{marginBottom:1,children:kf(_1,{dimColor:!0,children:"\u2500".repeat(80)})}),kf(Ml,{children:i.cluster==="linked"?Ah(_1,{color:"green",children:["\u2713 Connected to ",i.clusterUrl??"deco"]}):i.cluster==="connecting"?Ah(_1,{color:"yellow",children:["\u25CC Connecting to ",i.clusterUrl??"deco","\u2026"]}):Ah(_1,{color:"red",children:["\u2717 Disconnected from ",i.clusterUrl??"deco"]})}),kf(Ml,{children:i.ingressUrl?Ah(_1,{color:"green",children:["\u2713 Serving at ",i.ingressUrl]}):kf(_1,{dimColor:!0,children:"\u25CC Starting local server\u2026"})}),kf(Ml,{marginBottom:1,children:kf(_1,{dimColor:!0,children:`${"Computer".padEnd(16)}${i.machine??"this computer"} \xB7 ${u.length} of ${i.cap} previews`})}),u.length===0?kf(_1,{dimColor:!0,children:"No previews running yet."}):Ah(Ml,{flexDirection:"column",children:[Ah(Ml,{children:[kf(Ml,{width:2,flexShrink:0}),kf(Ml,{width:wW.project,flexShrink:0,marginRight:1,children:kf(_1,{dimColor:!0,wrap:"truncate-end",children:"PROJECT"})}),kf(Ml,{width:wW.branch,flexShrink:0,marginRight:1,children:kf(_1,{dimColor:!0,wrap:"truncate-end",children:"BRANCH"})}),kf(Ml,{width:wW.status,flexShrink:0,marginRight:1,children:kf(_1,{dimColor:!0,wrap:"truncate-end",children:"STATUS"})}),kf(Ml,{flexGrow:1,children:kf(_1,{dimColor:!0,wrap:"truncate-end",children:"PREVIEW URL"})})]}),u.map((l)=>{let c=bMt(l,i.removingHandles.has(l.handle)),E=l.handle===f;return Ah(Ml,{children:[kf(Ml,{width:2,flexShrink:0,children:kf(_1,{color:"cyan",children:E?"\u203A":" "})}),kf(Ml,{width:wW.project,flexShrink:0,marginRight:1,children:kf(_1,{bold:E,wrap:"truncate-end",children:l.projectName??l.handle})}),kf(Ml,{width:wW.branch,flexShrink:0,marginRight:1,children:kf(_1,{bold:E,wrap:"truncate-end",children:l.branch??"\u2014"})}),kf(Ml,{width:wW.status,flexShrink:0,marginRight:1,children:kf(_1,{color:c.color,bold:E,wrap:"truncate-end",children:c.text})}),kf(Ml,{flexGrow:1,children:kf(_1,{dimColor:!0,wrap:"truncate-end",children:l.previewUrl??"\u2014"})})]},l.handle)})]}),i.daemonError?kf(Ml,{marginTop:1,children:Ah(_1,{color:"red",children:["\u26A0 ",i.daemonError]})}):null,i.logPath?kf(Ml,{marginTop:1,children:Ah(_1,{dimColor:!0,children:["Logs: ",i.logPath]})}):null,i.pendingConfirm?kf(Ml,{marginTop:1,children:kf(_1,{color:"yellow",children:Leu(i.pendingConfirm)})}):null,i.actionError?kf(Ml,{marginTop:1,children:Ah(_1,{color:"red",children:["\u2717 ",i.actionError]})}):null,kf(Ml,{marginTop:1,children:kf(_1,{dimColor:!0,children:"\u2191\u2193 move \xB7 s stop \xB7 d delete \xB7 o open \xB7 q quit"})})]})}var wW;var Veu=g(()=>{R1i();aRi();Ceu();tq();wW={project:18,branch:22,status:14}});var reu={};Ji(reu,{runLinkCommand:()=>oMt});import{closeSync as MMt,mkdirSync as qMt,openSync as VMt,writeSync as rMt}from"fs";import{homedir as mMt}from"os";import{join as ubi}from"path";function eMt(i,u){let t={log:console.log,warn:console.warn,error:console.error},f=(l)=>{if(u===void 0)return;try{rMt(u,`${VRi(l)}
84630
84630
  `)}catch{}};return console.log=(...l)=>f(l),console.warn=(...l)=>f(l),console.error=(...l)=>{f(l),i(VRi(l))},()=>{console.log=t.log,console.warn=t.warn,console.error=t.error}}async function aMt(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 oMt(i={}){let u=i.port??5174,t=i.dataDir??process.env.DATA_DIR??process.env.DECOCMS_HOME??ubi(mMt(),"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{if(await rRi(u,"127.0.0.1"))throw new eRi(u);let w=ubi(t,"sandboxes");E=H1i({path:z1i(t),managedSandboxRoot:w});let d=await Lli({dataDir:t,intent:"Link",target:f});if(process.env.DECOCMS_LINK_MANAGED!=="1")await aMt(f,d.accessToken);let h=E.reconcile();if(i.prune){let n=E.prune({missing:!0,merged:!0});if(!i.tui)console.log(`Pruned local sandboxes: removed ${n.removed.length}, skipped ${n.skipped.length}.`);h=E.reconcile()}let _;if(i.tui){let{render:n}=await import("ink"),{createElement:N}=await import("react"),{LinkApp:O}=await Promise.resolve().then(() => (Veu(),qeu)),{pushSandboxEvent:y,setCluster:Z,setClusterUrl:T,setDaemonError:B,setIngress:F,setLogPath:A,setMachine:k,setPersistedSandboxes:I}=await Promise.resolve().then(() => (tq(),ibi));qMt(t,{recursive:!0});let j=ubi(t,"link.log");c=VMt(j,"w"),A(j),I(h),T(f),Z("connecting"),_={onEvent:(C)=>y(C),onIngress:(C)=>F(C,`http://127.0.0.1:${C}`),onCluster:(C)=>Z(C),onMachine:(C)=>k(C)},l=eMt(B,c),n(N(O),{patchConsole:!1})}else if(i.banner!==!1){let{printBanner:n}=await Promise.resolve().then(() => (EW(),pM));n(i.version??"0.0.0")}$();let v=process.env.DECOCMS_LINK_MANAGED!=="1",D=await Ieu({port:u,clusterBaseUrl:f,dataDir:t,session:d,monitor:_,logFd:c,perSandboxLogs:v,hotReload:i.hotReload});if(i.tui){let{setLinkActions:n}=await Promise.resolve().then(() => (tq(),ibi));n({stopSandbox:D.stopSandbox,removeSandbox:D.removeSandbox,inspectSandbox:D.inspectSandbox,quit:D.stop})}return await D.stopped}catch(w){return l?.(),console.error(Geu(w)?jeu(u):w instanceof Error?w.message:String(w)),1}finally{if(l?.(),c!==void 0)try{MMt(c)}catch{}$()}}var meu=g(()=>{Pzi();xeu();mRi();Seu();qRi()});var $bi={};Ji($bi,{resolveDevLinkClusterUrl:()=>uqt,populateDevLinkToxiProxy:()=>iau,isDevLinkToxiProxyEnabled:()=>iqt,ensureDevLinkToxiProxy:()=>Eqt,buildDevLinkToxiProxyConfig:()=>seu,DEV_LINK_TOXIPROXY_SERVICE_NAME:()=>aeu,DEV_LINK_TOXIPROXY_PROXY_NAME:()=>oeu});function iqt(i=process.env){return i.DECO_DEV_LINK_TOXIPROXY==="1"}function tbi(i,u){if(!Number.isInteger(i)||i<1||i>65535)throw Error(`${u} must be an integer port in 1..65535`);return i}function seu(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=tbi(i.apiPort,"apiPort"),f=tbi(i.listenPort,"listenPort");if(u.port.length===0)throw Error("serverUrl must include an explicit valid port");let l=tbi(Number.parseInt(u.port,10),"upstreamPort"),c=`http://127.0.0.1:${l}`,E=`http://127.0.0.1:${f}`;return{serviceName:aeu,proxyName:oeu,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 uqt(i){return i.toxiproxy?.clusterUrl??i.serverUrl}async function fbi(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 Ebi(i){if(i instanceof Error)return i.name==="Error"?i.message:`${i.name}: ${i.message}`;return String(i)}function peu(i){if(!(i instanceof Error))return!1;if(i.name==="TimeoutError")return!0;return peu(i.cause)}async function lbi(i,u,t,f){try{return await i(t,f)}catch(l){throw Error(`ToxiProxy ${u} failed for ${t}: ${Ebi(l)}`,{cause:l})}}async function iau(i,u=fetch){let t=`${i.apiUrl}/reset`,f=await lbi(u,"reset",t,{method:"POST"});await fbi(f,"reset",t);let l=`${i.apiUrl}/populate`,c=await lbi(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 fbi(c,"populate",l)}async function tqt(i,u){let t=`${i.apiUrl}/version`;try{await bl(async()=>{let f=await lbi(u,"readiness check",t,{method:"GET",signal:AbortSignal.timeout(pMt)});await fbi(f,"readiness check",t)},{maxAttempts:sMt,minTimeout:eeu,maxTimeout:eeu,multiplier:1,jitter:0,isRetriable:(f)=>!peu(f)})}catch(f){let l=f instanceof Lc?f.cause:f;throw Error(`ToxiProxy API did not become ready at ${t}: ${Ebi(l)}`,{cause:l})}}async function fqt(i){if(i===null)return"";return await new Response(i).text()}async function cbi(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}): ${Ebi($)}`,{cause:$})}})(),[l,c]=await Promise.all([f.exited,fqt(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 lqt(i,u){let t=`deco-dev-link-toxiproxy-${i}`;await cbi(["rm","-f",t],{ignoreFailure:!0}),await cbi(["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 cqt(i,u){let t=`deco-dev-link-toxiproxy-${i}`;await cbi(["rm","-f",t],{ignoreFailure:!0})}async function Eqt(i){let u=seu(i),t=i.startDaemon??lqt,f=i.stopDaemon??(i.startDaemon===void 0?cqt:void 0);await t(i.apiPort,i.listenPort);let l=i.fetchImpl??fetch;try{await tqt(u,l),await iau(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 aeu="ToxiProxy",oeu="dev_link_studio",sMt=20,eeu=100,pMt=100;var wbi=g(()=>{O4()});var uau={};Ji(uau,{migrateBetterAuth:()=>dbi});import{getMigrations as $qt}from"better-auth/db";import{sso as wqt}from"@better-auth/sso";import{organization as dqt}from"@decocms/better-auth/plugins";import{admin as hqt,apiKey as _qt,jwt as vqt,magicLink as Dqt,mcp as nqt,openAPI as gqt}from"better-auth/plugins";import{emailOTP as Nqt}from"better-auth/plugins/email-otp";async function dbi(i){let t={database:nM(i||un()),plugins:[dqt({dynamicAccessControl:{enabled:!0,enableCustomResources:!0}}),hqt(),_qt(),vqt(),gqt(),nqt({loginPage:"/login"}),wqt(),Dqt({sendMagicLink:async()=>{}}),Nqt({sendVerificationOTP:async()=>{}})]},{toBeAdded:f,toBeCreated:l,runMigrations:c}=await $qt(t);if(!f.length&&!l.length)return"up to date";return await c(),`${l.length+f.length} table(s) migrated`}var hbi=g(()=>{cE()});var _bi={};Ji(_bi,{up:()=>Oqt,down:()=>yqt});import{sql as $v}from"kysely";async function Oqt(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($v`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(u)=>u.notNull().defaultTo($v`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($v`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(u)=>u.notNull().defaultTo($v`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($v`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($v`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($v`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($v`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($v`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(u)=>u.notNull().defaultTo($v`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 yqt(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 tau=()=>{};var vbi={};Ji(vbi,{up:()=>Zqt,down:()=>Tqt});import{sql as fau}from"kysely";async function Zqt(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(fau`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(u)=>u.notNull().defaultTo(fau`CURRENT_TIMESTAMP`)).execute()}async function Tqt(i){await i.schema.dropTable("organization_settings").execute()}var lau=()=>{};var Dbi={};Ji(Dbi,{up:()=>Bqt,down:()=>Fqt});async function Bqt(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 Fqt(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 nbi={};Ji(nbi,{up:()=>Uqt,down:()=>Pqt});async function Uqt(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 Pqt(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 gbi={};Ji(gbi,{up:()=>Aqt,down:()=>Iqt});async function Aqt(i){await i.schema.alterTable("connections").addColumn("configuration_state","text").execute(),await i.schema.alterTable("connections").addColumn("configuration_scopes","text").execute()}async function Iqt(i){await i.schema.alterTable("connections").dropColumn("configuration_state").execute(),await i.schema.alterTable("connections").dropColumn("configuration_scopes").execute()}var Nbi={};Ji(Nbi,{up:()=>kqt,down:()=>Gqt});import{sql as xqt}from"kysely";async function kqt(i){await i.schema.alterTable("organization_settings").addColumn("sidebar_items",xqt`text`).execute()}async function Gqt(i){await i.schema.alterTable("organization_settings").dropColumn("sidebar_items").execute()}var cau=()=>{};var Obi={};Ji(Obi,{up:()=>jqt,down:()=>Sqt});async function jqt(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 Sqt(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 ybi={};Ji(ybi,{up:()=>Kqt,down:()=>Jqt});import{sql as fq}from"kysely";async function Kqt(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(fq`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(u)=>u.notNull().defaultTo(fq`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(fq`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(u)=>u.notNull().defaultTo(fq`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(fq`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 Jqt(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 Eau=()=>{};var Zbi={};Ji(Zbi,{up:()=>Lqt,down:()=>Wqt});import{sql as Xqt}from"kysely";async function Lqt(i){await i.schema.dropTable("audit_logs").ifExists().execute()}async function Wqt(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(Xqt`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 $au=()=>{};var Tbi={};Ji(Tbi,{up:()=>Yqt,down:()=>Qqt});import{sql as m1i}from"kysely";async function Yqt(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(m1i`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(u)=>u.notNull().defaultTo(m1i`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(m1i`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 m1i`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 Qqt(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 wau=()=>{};var Bbi={};Ji(Bbi,{up:()=>zqt,down:()=>Hqt});async function zqt(i){await i.schema.alterTable("gateways").addColumn("icon","text").execute()}async function Hqt(i){await i.schema.alterTable("gateways").dropColumn("icon").execute()}var Fbi={};Ji(Fbi,{up:()=>Rqt,down:()=>bqt});import{sql as e1i}from"kysely";async function Rqt(i){await i.schema.alterTable("gateways").addColumn("tool_selection_mode","text",(u)=>u.notNull().defaultTo("inclusion")).execute(),await e1i`
84631
84631
  UPDATE gateways
84632
84632
  SET tool_selection_mode = CASE
@@ -88344,7 +88344,7 @@ Do NOT require review (requiresReview = false) when the changes are low-risk, su
88344
88344
 
88345
88345
  When unsure between the two, lean toward NOT requiring review for small frontend-only diffs, and toward requiring it for anything backend or large.
88346
88346
 
88347
- Respond with the structured verdict and a short reason.`,Wtt;var Qtt=g(()=>{nf();ay();rvu();nK4=mvu.object({requiresReview:mvu.boolean().describe("true if the changes should go through pull-request review"),reason:mvu.string().describe("One short sentence explaining the decision (max ~120 chars)")});Wtt={requiresReview:!1,reason:""}});function yK4(i){if(!i||i.includes(".."))return!1;return OK4.test(i)}function ztt(i){let u=typeof i.__resolveType==="string"?i.__resolveType:null;if(!u||!yK4(u))return null;let{__resolveType:t,...f}=i;return{resolveType:u,payload:f}}function Htt(i,u){return`${i.replace(/\/+$/,"")}/deco/invoke/${u}`}var OK4;var Rtt=g(()=>{OK4=/^[\w./@-]+$/});function evu(i){let u;try{u=new URL(i)}catch{return null}if(!u.hostname.endsWith(".localhost"))return null;let t=u.host;return u.hostname="127.0.0.1",{url:u.toString(),hostHeader:t}}function btt(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 Ctt(i,u,t,f){if(!f.connectionId)throw new VR("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 VR(FE);await qz({ctx:i,connectionId:f.connectionId,organizationId:l,forceRefresh:!0,onLegacyMintError:(h)=>{let _=h instanceof Error?h.message:FE;throw new VR(_)}});let{cloneUrl:c,gitUserName:E,gitUserEmail:$}=await x9(f.connectionId,f.owner,f.name,i.db,i.vault),w=eAi(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 h=await d.text().catch(()=>d.statusText);throw Error(`Failed to refresh sandbox git credentials (${d.status}): ${h}`)}}var VR;var Mtt=g(()=>{f9();Hvu();Eo();VR=class VR extends Error{constructor(i){super(i);this.name="GitPushAuthError"}}});function TK4(i){let u=i.startsWith("thread:")?i.slice(7):i;if(!u||u.length>255||u.includes("..")||u.startsWith("/")||u.endsWith("/")||u.endsWith(".lock")||!ZK4.test(u))throw Error(`Invalid branch name: ${i}`)}function qJ(i){return AbortSignal.any([i.req.raw.signal,AbortSignal.timeout(FK4)])}function VJ(i){let{runner:u}=i.get("vmClaim");if(!u)return i.json({error:"No sandbox runner configured"},503);return u}async function l6(i,u,t){let f=VJ(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 h=t?.signal,_={method:$,headers:d,body:w,...h?{signal:h}:{}},v=async()=>{let D=await f.proxyDaemonRequest(l,u,_);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,_);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",...Wd}})}}let n=await D.text(),N=t?.redactRepoDirUnlessDesktop&&f.kind!=="user-desktop"?PK4(n):n,O=D.headers.get("content-type")??"application/json";return new Response(N,{status:D.status,headers:{"content-type":O,...Wd}})};try{if(h){let D=v();return D.catch(()=>{}),await Promise.race([D,new Promise((N,O)=>{if(h.aborted)return O(h.reason);h.addEventListener("abort",()=>O(h.reason),{once:!0})})])}return await v()}catch(D){let n=D instanceof Error?D.message:String(D);return i.json({error:`Daemon unreachable: ${n}`},502)}}function PK4(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 aAi(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 AK4(i){return rtt.includes(i)}var ZK4,qtt=524288,BK4=65536,FK4=1e4,Vtt=2000,UK4,Wd,rtt,mtt=()=>{let i=new Ju;return i.use("/:virtualMcpId/:branch/*",UK4),i.post("/:virtualMcpId/:branch/write",(u)=>l6(u,"/_sandbox/write",{forwardJsonBody:!0,signal:qJ(u)})),i.post("/:virtualMcpId/:branch/unlink",(u)=>l6(u,"/_sandbox/unlink",{forwardJsonBody:!0,signal:qJ(u)})),i.post("/:virtualMcpId/:branch/mkdir",(u)=>l6(u,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:qJ(u)})),i.post("/:virtualMcpId/:branch/rename",(u)=>l6(u,"/_sandbox/rename",{forwardJsonBody:!0,signal:qJ(u)})),i.post("/:virtualMcpId/:branch/read",(u)=>l6(u,"/_sandbox/read",{forwardJsonBody:!0,signal:qJ(u)})),i.post("/:virtualMcpId/:branch/glob",(u)=>l6(u,"/_sandbox/glob",{forwardJsonBody:!0,signal:qJ(u)})),i.post("/:virtualMcpId/:branch/grep",(u)=>l6(u,"/_sandbox/grep",{forwardJsonBody:!0,signal:qJ(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 l6(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 l6(u,`/_sandbox/exec/${encodeURIComponent(t)}/kill`)}),i.get("/:virtualMcpId/:branch/config",(u)=>l6(u,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDirUnlessDesktop:!0})),i.put("/:virtualMcpId/:branch/config",(u)=>l6(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||!AK4(t))return u.json({error:`step must be one of: ${rtt.join(", ")}`},400);if(t==="start"){let f=u.get("vmClaim");if(f.runner){let l=yi(u.var.studioContext),c=GTi(f.virtualMcpMetadata);try{await STi({ctx:u.var.studioContext,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 l6(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 s3(u,async(f)=>{await f.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this studio instance."})})});return jtt(u,{ctx:u.var.studioContext,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)=>l6(u,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([u.req.raw.signal,AbortSignal.timeout(Vtt)])})),i.post("/:virtualMcpId/:branch/git/status",(u)=>l6(u,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([u.req.raw.signal,AbortSignal.timeout(Vtt)])})),i.post("/:virtualMcpId/:branch/git/diff",(u)=>l6(u,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})),i.post("/:virtualMcpId/:branch/git/publish",async(u)=>{let t=VJ(u);if(t instanceof Response)return t;let{claimName:f,virtualMcpMetadata:l,connectionIds:c}=u.get("vmClaim"),E=u.var.studioContext;try{await Rvu(E,t,f);let $=btt(l,c);if($)await Ctt(E,t,f,$)}catch($){if($ instanceof VR)return u.json({error:$.message},403,Wd);let w=$ instanceof Error?$.message:String($);return u.json({error:w},502,Wd)}return l6(u,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})}),i.post("/:virtualMcpId/:branch/git/discard",(u)=>l6(u,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0})),i.post("/:virtualMcpId/:branch/git/rebase",async(u)=>{let t=VJ(u);if(t instanceof Response)return t;let{claimName:f}=u.get("vmClaim"),l=u.var.studioContext;try{await Rvu(l,t,f)}catch(c){let E=c instanceof Error?c.message:String(c);return u.json({error:E},502,Wd)}return l6(u,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})}),i.post("/:virtualMcpId/:branch/git/suggest-commit",B$({maxSize:qtt,onError:(u)=>u.json({error:"Payload too large"},413,Wd)}),async(u)=>{let t=VJ(u);if(t instanceof Response)return t;let{claimName:f,userId:l,projectRef:c}=u.get("vmClaim"),E=u.var.studioContext;try{let $=await u.req.json().catch(()=>({})),w=$.status,d=$.diff,h=d!=null&&typeof d.diffs==="object"&&d.diffs!==null,[_,v]=Mvu(w)&&h?[w,d]:await Promise.all([aAi(t,f,"/_sandbox/git/status","GET",{userId:l,projectRef:c}),aAi(t,f,"/_sandbox/git/diff","GET",{userId:l,projectRef:c})]),D=await Ltt(E,_,v);return u.json(D,200,Wd)}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,Wd);return u.json({error:w},502,Wd)}}),i.post("/:virtualMcpId/:branch/git/judge-review",B$({maxSize:qtt,onError:(u)=>u.json({error:"Payload too large"},413,Wd)}),async(u)=>{let t=VJ(u);if(t instanceof Response)return t;let{claimName:f,userId:l,projectRef:c}=u.get("vmClaim"),E=u.var.studioContext;try{let $=await u.req.json().catch(()=>({})),w=$.status,d=$.diff,h=d!=null&&typeof d.diffs==="object"&&d.diffs!==null,[_,v]=Mvu(w)&&h?[w,d]:await Promise.all([aAi(t,f,"/_sandbox/git/status","GET",{userId:l,projectRef:c}),aAi(t,f,"/_sandbox/git/diff","GET",{userId:l,projectRef:c})]),D=await Ytt(E,_,v,typeof $.language==="string"?$.language:void 0);return u.json(D,200,Wd)}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,Wd);return u.json({error:w},502,Wd)}}),i.get("/:virtualMcpId/:branch/preview-fetch",async(u)=>{let t=VJ(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(/\/+$/,""),$=evu(`${E}${l}`),w;try{w=await fetch($?.url??`${E}${l}`,{...$?{headers:{host:$.hostHeader}}:{}})}catch{return u.json({error:"Preview unreachable"},502)}let d;try{d=await w.text()}catch{return u.json({error:"Preview unreachable"},502)}return new Response(d,{status:w.status,headers:{"content-type":w.headers.get("content-type")??"application/json"}})}),i.post("/:virtualMcpId/:branch/preview-invoke",B$({maxSize:BK4,onError:(u)=>u.json({error:"Payload too large"},413)}),async(u)=>{let t=VJ(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=ztt(c);if(!E)return u.json({error:"Invalid or missing __resolveType"},400);let $=Htt(l,E.resolveType),w=evu($),d;try{d=await fetch(w?.url??$,{method:"POST",headers:{"content-type":"application/json",...w?{host:w.hostHeader}:{}},body:JSON.stringify(E.payload),signal:AbortSignal.timeout(30000)})}catch{return u.json({error:"Preview unreachable"},502)}let h;try{h=await d.text()}catch{return u.json({error:"Preview unreachable"},502)}return new Response(h,{status:d.status,headers:{"content-type":d.headers.get("content-type")??"application/json"}})}),i};var ett=g(()=>{cf();GR();MJ();ktt();Td();RPi();rK();Gtt();Stt();Fcu();$H();rvu();Qtt();Rtt();Mtt();ZK4=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;UK4=xtt(async(i,u)=>{let t=i.var.studioContext;try{ki(t)}catch{return i.json({error:"Unauthorized"},401)}let f=Hu(t);if(!f)return i.json({error:"Unauthorized"},401);let l;try{l=yi(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{TK4(E)}catch(v){let D=v instanceof Error?v.message:String(v);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=S8({orgId:l.id,virtualMcpId:c,branch:E}),d=OR({userId:f,projectRef:w},E),h=$.metadata??null,_;try{_=(await Ad(t,{userId:f,branch:E,virtualMcpMetadata:h})).provider}catch{_=null}if(!_)return i.json({error:"No sandbox runner found"},404);return i.set("vmClaim",{claimName:d,runner:_,virtualMcpId:c,branch:E,userId:f,projectRef:w,virtualMcpMetadata:h,connectionIds:$.connections?.map((v)=>v.connection_id)??[]}),u()});Wd={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};rtt=["clone","install","start"]});var att=(i)=>{let u=new Ju;if(u.use("*",LJ),u.route("/",vAi()),u.route("/",git()),u.route("/",ntt()),u.route("/",vtt()),u.route("/",VAi()),u.route("/tools",Btt()),u.route("/",ytt()),u.route("/",o0t({kvStorage:i.kvStorage})),u.route("/",e0t()),u.route("/fs",$tt({getConnection:i.getNatsConnection})),u.route("/sandbox",mtt()),u.route("/",dtt()),u.route("/deco-sites",nAi()),u.route("/sso",WPi()),u.route("/",rAi({tokenStorage:i.tokenStorage,automationEventDispatcher:i.automationEventDispatcher})),u.route("/webhooks",wit()),i.mountDevAssets)u.route("/dev-assets",gAi({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("/",wg0()),u.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",i.betterAuthProtectedResourceHandler),u.get("/mcp/.well-known/oauth-protected-resource",i.betterAuthProtectedResourceHandler),u.route("/mcp",NBi()),u.route("/mcp/self",qAi()),u.route("/mcp",ZBi()),u.all("/oauth-proxy/:connectionId/*",i.oauthProxyHandler),u.get("/watch",i.watchHandler),u};var ott=g(()=>{cf();$_u();dit();v_u();NAi();yp();c_u();a0t();s0t();wtt();Da();hhu();TBi();Jvu();htt();Dtt();gtt();Ztt();Lvu();Ftt();Wvu();OBi();ett()});function avu(i){try{i?.clear?.()}catch{}}async function stt({accountJwt:i,accountSigningKey:u,expiresAt:t,permissions:f,userId:l,allowedConnectionTypes:c=["WEBSOCKET"]}){let E=h2u(i),$=sxi(E.sub),w=Ab(new TextEncoder().encode(u)),d=oii();try{let h=await sii(l,d,$,{pub:{allow:f.publish.allow},sub:{allow:f.subscribe.allow},allowed_connection_types:c},{algorithm:a6.v2,exp:Math.floor(t.getTime()/1000),signer:w});return new TextDecoder().decode(pii(h,d))}finally{avu(d),avu(w),avu($)}}var ptt=g(()=>{lki()});function IK4(i){return/^wss?:\/\//i.test(i.trim())?["WEBSOCKET"]:["STANDARD","WEBSOCKET"]}function ift(){let i=new Ju;return i.post("/links/session",async(u)=>{let f=u.get("studioContext").auth?.user?.id;if(!f)return u.json({error:"Unauthorized"},401);let l=yu();if(!l.natsTunnelPublicEnabled)return u.json(ovu(),503);if(!l.natsPublicUrl)return u.json(ovu(),503);if(!l.natsAccountJwt||!l.natsAccountSigningKey){if(!l.localMode)return u.json(ovu(),503)}let c=Th(f),E;if(l.natsAccountJwt&&l.natsAccountSigningKey){let $=new Date(Date.now()+l.natsTunnelSessionTtlSeconds*1000);E=await stt({accountJwt:l.natsAccountJwt,accountSigningKey:l.natsAccountSigningKey,expiresAt:$,permissions:CVu(c),userId:f,allowedConnectionTypes:IK4(l.natsPublicUrl)})}return u.json(MVu({publicUrl:l.natsPublicUrl,userId:f,ttlSeconds:l.natsTunnelSessionTtlSeconds,credentials:E}))}),i}var ovu=()=>({error:"link session unavailable"});var uft=g(()=>{cf();vt();iRi();ptt()});async function GK4(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 jK4(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 I9(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 SK4(i){let{stream:u,claimName:t,runner:f,signal:l}=i;return new Promise((c)=>{let E=!1,$=!1,w=null,d=(v)=>{if(E)return;E=!0,clearTimeout(h),l.removeEventListener("abort",_),w?.unsubscribe(),c(v)},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)},xK4),_=()=>d(!1);l.addEventListener("abort",_,{once:!0}),w=So(f,t,(v)=>{if(E)return;if(v.kind!=="claiming")$=!0;if(u.writeSSE({event:"phase",data:JSON.stringify(v)}).catch(()=>{}),v.kind==="ready")d(!0);else if(v.kind==="failed")d(!1)})})}async function KK4(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<tft){await N0(fft,{signal:l}).catch(()=>{});continue}let h=d instanceof Error?d.message:String(d);await u.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:`Upstream daemon SSE error: ${h}`})}).catch(()=>{});return}if(w.status===404){try{await w.body?.cancel()}catch{}if(Date.now()-c<tft){await N0(fft,{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 xK4=90000,kK4=15000,lft=()=>{let i=new Ju;return i.get("/",async(u)=>{let t=u.var.studioContext;try{ki(t)}catch{return u.json({error:"Unauthorized"},401)}let f=Hu(t);if(!f)return u.json({error:"Unauthorized"},401);let l;try{l=yi(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=S8({orgId:l.id,virtualMcpId:c,branch:E}),d=OR({userId:f,projectRef:w},E),h=$.metadata??null,_,v=null,D=null;try{let O=await Ad(t,{userId:f,branch:E,virtualMcpMetadata:h});_=O.provider,v=O.kind}catch(O){D=O instanceof Error?O:Error(String(O)),_=null}let n=v&&h5(Al(h),f,E,v),N=!!n&&n.sandboxHandle===d;if(!_)return s3(u,async(O)=>{await O.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:D?.message??"No sandbox runner configured on this studio instance."})})});return u.header("X-Accel-Buffering","no"),u.header("Content-Encoding","identity"),s3(u,async(O)=>{let y=new AbortController,Z=setInterval(()=>{O.writeSSE({event:"keepalive",data:""}).catch(()=>{clearInterval(Z)})},kK4);O.onAbort(()=>{y.abort(),clearInterval(Z)});try{if(N&&v){if(await GK4(_,d)){await jK4({ctx:t,runner:_,claimName:d,userId:f,projectRef:w,sandboxProviderKind:v}),await O.writeSSE({event:"gone",data:""}).catch(()=>{});return}}if(!await SK4({stream:O,claimName:d,runner:_,signal:y.signal})||y.signal.aborted)return;await KK4({stream:O,runner:_,claimName:d,signal:y.signal})}finally{clearInterval(Z)}})}),i},tft=60000,fft=500;var cft=g(()=>{cf();MJ();Td();O4();RPi();Ko();rK();l_i();nw()});function XK4(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 LK4(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(JK4)});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 JK4=1e4,WK4=async(i,u)=>{if(!i.get("studioContext").auth.user?.id)return i.json({error:"Unauthorized"},401);return u()},Eft=()=>{let i=new Ju;return i.use("*",WK4),i.get("/",async(u)=>{let t=yu(),f=t.decoSupabaseUrl,l=t.decoSupabaseServiceKey;if(!f||!l)return u.json({apps:[]});try{let c=await LK4(f,l);return u.json({apps:XK4(c)})}catch(c){return console.error("[deco-apps] GET error:",c),u.json({error:"Failed to fetch apps"},502)}}),i};var $ft=g(()=>{cf();vt()});import{z as bu}from"zod";function H5(i,u="invalid_request_error",t=null,f=null){return{error:{message:i,type:u,param:t,code:f}}}function VK4(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 rK4(i,u,t){try{return JSON.parse(i)}catch{throw new hft(`Invalid JSON in tool call arguments for function '${t}' (tool_call_id: ${u}): ${i}`)}}function mK4(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:rK4(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 eK4(i){let u=i.map((t)=>{let f=t.function.parameters?$d(t.function.parameters):$d({type:"object",properties:{}});return[t.function.name,z0({description:t.function.description,inputSchema:f})]});return Object.fromEntries(u)}function aK4(i){if(!i)return;return{openai:{response_format:i}}}function oK4(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function wft(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 dft(i){if(i==="tool-calls")return"tool_calls";if(i==="length")return"length";return"stop"}var YK4=256,QK4,zK4,HK4,RK4,bK4,CK4,MK4,qK4,hft,_ft,vft;var Dft=g(()=>{nf();cf();MJ();QK4=bu.object({type:bu.literal("function"),function:bu.object({name:bu.string(),description:bu.string().optional(),parameters:bu.record(bu.string(),bu.unknown()).optional()})}),zK4=bu.object({id:bu.string(),type:bu.literal("function"),function:bu.object({name:bu.string(),arguments:bu.string()})}),HK4=bu.discriminatedUnion("role",[bu.object({role:bu.literal("system"),content:bu.string(),name:bu.string().optional()}),bu.object({role:bu.literal("user"),content:bu.union([bu.string(),bu.array(bu.union([bu.object({type:bu.literal("text"),text:bu.string()}),bu.object({type:bu.literal("image_url"),image_url:bu.object({url:bu.string(),detail:bu.string().optional()})})]))]),name:bu.string().optional()}),bu.object({role:bu.literal("assistant"),content:bu.string().nullable().optional(),name:bu.string().optional(),tool_calls:bu.array(zK4).optional()}),bu.object({role:bu.literal("tool"),content:bu.string(),tool_call_id:bu.string()})]),RK4=bu.object({type:bu.literal("text")}),bK4=bu.object({type:bu.literal("json_object")}),CK4=bu.object({type:bu.literal("json_schema"),json_schema:bu.object({name:bu.string(),description:bu.string().optional(),schema:bu.record(bu.string(),bu.unknown()),strict:bu.boolean().optional()})}),MK4=bu.union([RK4,bK4,CK4]),qK4=bu.object({model:bu.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:bu.array(HK4),stream:bu.boolean().optional().default(!1),temperature:bu.number().min(0).max(2).optional(),max_tokens:bu.number().positive().optional(),top_p:bu.number().min(0).max(1).optional(),frequency_penalty:bu.number().min(-2).max(2).optional(),presence_penalty:bu.number().min(-2).max(2).optional(),stop:bu.union([bu.string(),bu.array(bu.string())]).optional(),tools:bu.array(QK4).optional(),tool_choice:bu.union([bu.literal("auto"),bu.literal("none"),bu.literal("required"),bu.object({type:bu.literal("function"),function:bu.object({name:bu.string()})})]).optional(),response_format:MK4.optional(),user:bu.string().optional()});hft=class hft extends Error{constructor(i){super(i);this.name="MessageConversionError"}};_ft=new Ju;_ft.post("/:org/v1/chat/completions",async(i)=>{let u=i.get("studioContext"),t=i.req.param("org");try{if(!u.auth.apiKey?.id)return i.json(H5("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!u.organization)return i.json(H5("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(H5("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=qK4.safeParse(f);if(!l.success){let O=l.error.issues[0]??{message:"Invalid request",path:[]};return i.json(H5(`Invalid request: ${O.message}`,"invalid_request_error",O.path.length>0?O.path.join("."):null),400)}let c=l.data,E=VK4(c.model);if(!E)return i.json(H5("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 O=await u.storage.aiProviderKeys.list({organizationId:u.organization.id});if(O.length===0)return i.json(H5("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);$=O[0].id}let d;try{d=await u.aiProviders.activate($,u.organization.id)}catch{return i.json(H5(`AI provider credential not found or inaccessible: ${$}`,"invalid_request_error","model"),404)}let h=d.aiSdk.languageModel(w),_=mK4(c.messages),v=c.tools?eK4(c.tools):void 0,D=aK4(c.response_format),n=oK4(),N=Math.floor(Date.now()/1000);if(c.stream)return s3(i,async(O)=>{let y=wft(h,_,v,c,D,i.req.raw.signal);try{let Z=Y3(y),T=!1,B=0,F="",A=async()=>{if(F.length===0)return;let k=F;F="",await O.writeSSE({data:JSON.stringify({id:n,object:"chat.completion.chunk",created:N,model:c.model,choices:[{index:0,delta:{content:k},finish_reason:null}]})})};for await(let k of Z.fullStream){if(!T&&(k.type==="text-delta"||k.type==="tool-call"))await O.writeSSE({data:JSON.stringify({id:n,object:"chat.completion.chunk",created:N,model:c.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),T=!0;if(k.type==="text-delta"){if(F+=k.text,F.length>=YK4)await A()}else if(k.type==="tool-call"){await A();let I=B++;await O.writeSSE({data:JSON.stringify({id:n,object:"chat.completion.chunk",created:N,model:c.model,choices:[{index:0,delta:{tool_calls:[{index:I,id:k.toolCallId,type:"function",function:{name:k.toolName,arguments:JSON.stringify(k.input)}}]},finish_reason:null}]})})}else if(k.type==="finish")await A(),await O.writeSSE({data:JSON.stringify({id:n,object:"chat.completion.chunk",created:N,model:c.model,choices:[{index:0,delta:{},finish_reason:dft(k.finishReason)}],usage:k.totalUsage?{prompt_tokens:k.totalUsage.inputTokens??0,completion_tokens:k.totalUsage.outputTokens??0,total_tokens:k.totalUsage.totalTokens??0}:void 0})})}await A(),await O.writeSSE({data:"[DONE]"})}catch(Z){let T=Z;console.error("[openai-compat:stream] Error:",T.message),await O.writeSSE({data:JSON.stringify({error:{message:T.message,type:"server_error"}})})}});else{let O=wft(h,_,v,c,D,i.req.raw.signal),y=await g9(O),Z={role:"assistant",content:y.text||null};if(y.toolCalls&&y.toolCalls.length>0)Z.tool_calls=y.toolCalls.map((T)=>({id:T.toolCallId,type:"function",function:{name:T.toolName,arguments:JSON.stringify("input"in T?T.input:{})}})),Z.content=null;return i.json({id:n,object:"chat.completion",created:N,model:c.model,choices:[{index:0,message:Z,finish_reason:dft(y.finishReason)}],usage:{prompt_tokens:y.usage?.inputTokens??0,completion_tokens:y.usage?.outputTokens??0,total_tokens:y.usage?.totalTokens??0}})}}catch(f){let l=f;if(l.name==="AbortError")return i.json(H5("Request aborted","invalid_request_error"),400);if(l.name==="MessageConversionError")return i.json(H5(l.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",l.message,l.stack),i.json(H5(l.message,"server_error"),500)}});vft=_ft});function pK4(){let i=process.env.POSTHOG_KEY;if(!i)return null;return{key:i,host:process.env.POSTHOG_HOST??sK4}}var nft,sK4="https://ph.studio.decocms.com",gft;var Nft=g(()=>{cf();fei();M9();n6();vt();chu();R1i();nft=new Ju;nft.get("/",(i)=>{let u={version:cW.version,theme:Hl0(),...TO().logo&&{logo:TO().logo},...R3()&&{internalUrl:jli()},...yu().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!yu().firecrawlApiKey,auth:sa0(),posthog:pK4(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!R3()&&yu().sandboxProviderKind==="agent-sandbox"}};return i.header("Cache-Control","no-store"),i.json({success:!0,config:u})});gft=nft});function oAi(i){let u=(i??"").trim().toLowerCase();return u=u.replace(/^https?:\/\//,""),u=u.replace(/^www\./,""),u=u.split(/[/?#]/)[0]??"",u.replace(/\/+$/,"")}function yft(i){return(oAi(i).split(".")[0]||i).replace(/[-_]/g," ").split(" ").filter(Boolean).map((t)=>t.charAt(0).toUpperCase()+t.slice(1)).join(" ")}function Zft(i,u=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(oAi(i))}&sz=${u}`}function Oft(i,u){let t=i.trim();if(t.length<=u)return t;let f=t.slice(0,u-1),l=f.lastIndexOf(" ");return`${(l>u*0.6?f.slice(0,l):f).trimEnd()}\u2026`}function Tft(i){let{brand:u,domain:t,score:f,verdict:l}=i,c=typeof f==="number"?`${u} commerce report \u2014 ${Math.round(f)}/100 \xB7 decocms`:`${u} commerce report \xB7 decocms`,E=`See the full ${u} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,$=l?.trim()?Oft(`${l.trim().replace(/\s+/g," ")} \u2014 ${E}`,200):Oft(`How does ${t} really perform? ${E}`,200);return{title:c,description:$}}import{join as iJ4}from"path";function d2(i){return i.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function uJ4(i){let u=oAi(i),t=yft(u),f=Zft(u,128),c=`${(yu().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(u)}`,{title:E,description:$}=Tft({brand:t,domain:u});return[`<title>${d2(E)}</title>`,`<meta name="description" content="${d2($)}" />`,'<meta name="robots" content="noindex, follow" />','<meta property="og:type" content="website" />','<meta property="og:site_name" content="decocms" />',`<meta property="og:title" content="${d2(E)}" />`,`<meta property="og:description" content="${d2($)}" />`,`<meta property="og:url" content="${d2(c)}" />`,'<meta name="twitter:card" content="summary" />',`<meta name="twitter:title" content="${d2(E)}" />`,`<meta name="twitter:description" content="${d2($)}" />`,`<link rel="canonical" href="${d2(c)}" />`,`<link rel="icon" href="${d2(f)}" sizes="any" />`].join(`
88347
+ Respond with the structured verdict and a short reason.`,Wtt;var Qtt=g(()=>{nf();ay();rvu();nK4=mvu.object({requiresReview:mvu.boolean().describe("true if the changes should go through pull-request review"),reason:mvu.string().describe("One short sentence explaining the decision (max ~120 chars)")});Wtt={requiresReview:!1,reason:""}});function yK4(i){if(!i||i.includes(".."))return!1;return OK4.test(i)}function ztt(i){let u=typeof i.__resolveType==="string"?i.__resolveType:null;if(!u||!yK4(u))return null;let{__resolveType:t,...f}=i;return{resolveType:u,payload:f}}function Htt(i,u){return`${i.replace(/\/+$/,"")}/deco/invoke/${u}`}var OK4;var Rtt=g(()=>{OK4=/^[\w./@-]+$/});function evu(i){let u;try{u=new URL(i)}catch{return null}if(!u.hostname.endsWith(".localhost"))return null;let t=u.host;return u.hostname="127.0.0.1",{url:u.toString(),hostHeader:t}}function btt(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 Ctt(i,u,t,f){if(!f.connectionId)throw new VR("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 VR(FE);await qz({ctx:i,connectionId:f.connectionId,organizationId:l,forceRefresh:!0,onLegacyMintError:(h)=>{let _=h instanceof Error?h.message:FE;throw new VR(_)}});let{cloneUrl:c,gitUserName:E,gitUserEmail:$}=await x9(f.connectionId,f.owner,f.name,i.db,i.vault),w=eAi(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 h=await d.text().catch(()=>d.statusText);throw Error(`Failed to refresh sandbox git credentials (${d.status}): ${h}`)}}var VR;var Mtt=g(()=>{f9();Hvu();Eo();VR=class VR extends Error{constructor(i){super(i);this.name="GitPushAuthError"}}});function TK4(i){let u=i.startsWith("thread:")?i.slice(7):i;if(!u||u.length>255||u.includes("..")||u.startsWith("/")||u.endsWith("/")||u.endsWith(".lock")||!ZK4.test(u))throw Error(`Invalid branch name: ${i}`)}function qJ(i){return AbortSignal.any([i.req.raw.signal,AbortSignal.timeout(FK4)])}function VJ(i){let{runner:u}=i.get("vmClaim");if(!u)return i.json({error:"No sandbox runner configured"},503);return u}async function l6(i,u,t){let f=VJ(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 h=t?.signal,_={method:$,headers:d,body:w,...h?{signal:h}:{}},v=async()=>{let D=await f.proxyDaemonRequest(l,u,_);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,_);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",...Wd}})}}let n=await D.text(),N=t?.redactRepoDirUnlessDesktop&&f.kind!=="user-desktop"?PK4(n):n,O=D.headers.get("content-type")??"application/json";return new Response(N,{status:D.status,headers:{"content-type":O,...Wd}})};try{if(h){let D=v();return D.catch(()=>{}),await Promise.race([D,new Promise((N,O)=>{if(h.aborted)return O(h.reason);h.addEventListener("abort",()=>O(h.reason),{once:!0})})])}return await v()}catch(D){let n=D instanceof Error?D.message:String(D);return i.json({error:`Daemon unreachable: ${n}`},502)}}function PK4(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 aAi(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 AK4(i){return rtt.includes(i)}var ZK4,qtt=524288,BK4=65536,FK4=1e4,Vtt=2000,UK4,Wd,rtt,mtt=()=>{let i=new Ju;return i.use("/:virtualMcpId/:branch/*",UK4),i.post("/:virtualMcpId/:branch/write",(u)=>l6(u,"/_sandbox/write",{forwardJsonBody:!0,signal:qJ(u)})),i.post("/:virtualMcpId/:branch/unlink",(u)=>l6(u,"/_sandbox/unlink",{forwardJsonBody:!0,signal:qJ(u)})),i.post("/:virtualMcpId/:branch/mkdir",(u)=>l6(u,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:qJ(u)})),i.post("/:virtualMcpId/:branch/rename",(u)=>l6(u,"/_sandbox/rename",{forwardJsonBody:!0,signal:qJ(u)})),i.post("/:virtualMcpId/:branch/read",(u)=>l6(u,"/_sandbox/read",{forwardJsonBody:!0,signal:qJ(u)})),i.post("/:virtualMcpId/:branch/glob",(u)=>l6(u,"/_sandbox/glob",{forwardJsonBody:!0,signal:qJ(u)})),i.post("/:virtualMcpId/:branch/grep",(u)=>l6(u,"/_sandbox/grep",{forwardJsonBody:!0,signal:qJ(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 l6(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 l6(u,`/_sandbox/exec/${encodeURIComponent(t)}/kill`)}),i.get("/:virtualMcpId/:branch/config",(u)=>l6(u,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDirUnlessDesktop:!0})),i.put("/:virtualMcpId/:branch/config",(u)=>l6(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||!AK4(t))return u.json({error:`step must be one of: ${rtt.join(", ")}`},400);if(t==="start"){let f=u.get("vmClaim");if(f.runner){let l=yi(u.var.studioContext),c=GTi(f.virtualMcpMetadata);try{await STi({ctx:u.var.studioContext,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 l6(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 s3(u,async(f)=>{await f.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this studio instance."})})});return jtt(u,{ctx:u.var.studioContext,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)=>l6(u,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([u.req.raw.signal,AbortSignal.timeout(Vtt)])})),i.post("/:virtualMcpId/:branch/git/status",(u)=>l6(u,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([u.req.raw.signal,AbortSignal.timeout(Vtt)])})),i.post("/:virtualMcpId/:branch/git/diff",(u)=>l6(u,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})),i.post("/:virtualMcpId/:branch/git/publish",async(u)=>{let t=VJ(u);if(t instanceof Response)return t;let{claimName:f,virtualMcpMetadata:l,connectionIds:c}=u.get("vmClaim"),E=u.var.studioContext;try{await Rvu(E,t,f);let $=btt(l,c);if($)await Ctt(E,t,f,$)}catch($){if($ instanceof VR)return u.json({error:$.message},403,Wd);let w=$ instanceof Error?$.message:String($);return u.json({error:w},502,Wd)}return l6(u,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})}),i.post("/:virtualMcpId/:branch/git/discard",(u)=>l6(u,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0})),i.post("/:virtualMcpId/:branch/git/rebase",async(u)=>{let t=VJ(u);if(t instanceof Response)return t;let{claimName:f}=u.get("vmClaim"),l=u.var.studioContext;try{await Rvu(l,t,f)}catch(c){let E=c instanceof Error?c.message:String(c);return u.json({error:E},502,Wd)}return l6(u,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})}),i.post("/:virtualMcpId/:branch/git/suggest-commit",B$({maxSize:qtt,onError:(u)=>u.json({error:"Payload too large"},413,Wd)}),async(u)=>{let t=VJ(u);if(t instanceof Response)return t;let{claimName:f,userId:l,projectRef:c}=u.get("vmClaim"),E=u.var.studioContext;try{let $=await u.req.json().catch(()=>({})),w=$.status,d=$.diff,h=d!=null&&typeof d.diffs==="object"&&d.diffs!==null,[_,v]=Mvu(w)&&h?[w,d]:await Promise.all([aAi(t,f,"/_sandbox/git/status","GET",{userId:l,projectRef:c}),aAi(t,f,"/_sandbox/git/diff","GET",{userId:l,projectRef:c})]),D=await Ltt(E,_,v);return u.json(D,200,Wd)}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,Wd);return u.json({error:w},502,Wd)}}),i.post("/:virtualMcpId/:branch/git/judge-review",B$({maxSize:qtt,onError:(u)=>u.json({error:"Payload too large"},413,Wd)}),async(u)=>{let t=VJ(u);if(t instanceof Response)return t;let{claimName:f,userId:l,projectRef:c}=u.get("vmClaim"),E=u.var.studioContext;try{let $=await u.req.json().catch(()=>({})),w=$.status,d=$.diff,h=d!=null&&typeof d.diffs==="object"&&d.diffs!==null,[_,v]=Mvu(w)&&h?[w,d]:await Promise.all([aAi(t,f,"/_sandbox/git/status","GET",{userId:l,projectRef:c}),aAi(t,f,"/_sandbox/git/diff","GET",{userId:l,projectRef:c})]),D=await Ytt(E,_,v,typeof $.language==="string"?$.language:void 0);return u.json(D,200,Wd)}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,Wd);return u.json({error:w},502,Wd)}}),i.get("/:virtualMcpId/:branch/preview-fetch",async(u)=>{let t=VJ(u);if(t instanceof Response)return t;let{claimName:f}=u.get("vmClaim"),l=u.req.query("path");if(!l||!l.startsWith("/")||l.startsWith("//")||l.includes("..")||l.includes("\\"))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(/\/+$/,""),$=evu(`${E}${l}`),w;try{w=await fetch($?.url??`${E}${l}`,{...$?{headers:{host:$.hostHeader}}:{}})}catch{return u.json({error:"Preview unreachable"},502)}let d;try{d=await w.text()}catch{return u.json({error:"Preview unreachable"},502)}return new Response(d,{status:w.status,headers:{"content-type":w.headers.get("content-type")??"application/json"}})}),i.post("/:virtualMcpId/:branch/preview-invoke",B$({maxSize:BK4,onError:(u)=>u.json({error:"Payload too large"},413)}),async(u)=>{let t=VJ(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=ztt(c);if(!E)return u.json({error:"Invalid or missing __resolveType"},400);let $=Htt(l,E.resolveType),w=evu($),d;try{d=await fetch(w?.url??$,{method:"POST",headers:{"content-type":"application/json",...w?{host:w.hostHeader}:{}},body:JSON.stringify(E.payload),signal:AbortSignal.timeout(30000)})}catch{return u.json({error:"Preview unreachable"},502)}let h;try{h=await d.text()}catch{return u.json({error:"Preview unreachable"},502)}return new Response(h,{status:d.status,headers:{"content-type":d.headers.get("content-type")??"application/json"}})}),i};var ett=g(()=>{cf();GR();MJ();ktt();Td();RPi();rK();Gtt();Stt();Fcu();$H();rvu();Qtt();Rtt();Mtt();ZK4=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;UK4=xtt(async(i,u)=>{let t=i.var.studioContext;try{ki(t)}catch{return i.json({error:"Unauthorized"},401)}let f=Hu(t);if(!f)return i.json({error:"Unauthorized"},401);let l;try{l=yi(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{TK4(E)}catch(v){let D=v instanceof Error?v.message:String(v);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=S8({orgId:l.id,virtualMcpId:c,branch:E}),d=OR({userId:f,projectRef:w},E),h=$.metadata??null,_;try{_=(await Ad(t,{userId:f,branch:E,virtualMcpMetadata:h})).provider}catch{_=null}if(!_)return i.json({error:"No sandbox runner found"},404);return i.set("vmClaim",{claimName:d,runner:_,virtualMcpId:c,branch:E,userId:f,projectRef:w,virtualMcpMetadata:h,connectionIds:$.connections?.map((v)=>v.connection_id)??[]}),u()});Wd={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};rtt=["clone","install","start"]});var att=(i)=>{let u=new Ju;if(u.use("*",LJ),u.route("/",vAi()),u.route("/",git()),u.route("/",ntt()),u.route("/",vtt()),u.route("/",VAi()),u.route("/tools",Btt()),u.route("/",ytt()),u.route("/",o0t({kvStorage:i.kvStorage})),u.route("/",e0t()),u.route("/fs",$tt({getConnection:i.getNatsConnection})),u.route("/sandbox",mtt()),u.route("/",dtt()),u.route("/deco-sites",nAi()),u.route("/sso",WPi()),u.route("/",rAi({tokenStorage:i.tokenStorage,automationEventDispatcher:i.automationEventDispatcher})),u.route("/webhooks",wit()),i.mountDevAssets)u.route("/dev-assets",gAi({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("/",wg0()),u.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",i.betterAuthProtectedResourceHandler),u.get("/mcp/.well-known/oauth-protected-resource",i.betterAuthProtectedResourceHandler),u.route("/mcp",NBi()),u.route("/mcp/self",qAi()),u.route("/mcp",ZBi()),u.all("/oauth-proxy/:connectionId/*",i.oauthProxyHandler),u.get("/watch",i.watchHandler),u};var ott=g(()=>{cf();$_u();dit();v_u();NAi();yp();c_u();a0t();s0t();wtt();Da();hhu();TBi();Jvu();htt();Dtt();gtt();Ztt();Lvu();Ftt();Wvu();OBi();ett()});function avu(i){try{i?.clear?.()}catch{}}async function stt({accountJwt:i,accountSigningKey:u,expiresAt:t,permissions:f,userId:l,allowedConnectionTypes:c=["WEBSOCKET"]}){let E=h2u(i),$=sxi(E.sub),w=Ab(new TextEncoder().encode(u)),d=oii();try{let h=await sii(l,d,$,{pub:{allow:f.publish.allow},sub:{allow:f.subscribe.allow},allowed_connection_types:c},{algorithm:a6.v2,exp:Math.floor(t.getTime()/1000),signer:w});return new TextDecoder().decode(pii(h,d))}finally{avu(d),avu(w),avu($)}}var ptt=g(()=>{lki()});function IK4(i){return/^wss?:\/\//i.test(i.trim())?["WEBSOCKET"]:["STANDARD","WEBSOCKET"]}function ift(){let i=new Ju;return i.post("/links/session",async(u)=>{let f=u.get("studioContext").auth?.user?.id;if(!f)return u.json({error:"Unauthorized"},401);let l=yu();if(!l.natsTunnelPublicEnabled)return u.json(ovu(),503);if(!l.natsPublicUrl)return u.json(ovu(),503);if(!l.natsAccountJwt||!l.natsAccountSigningKey){if(!l.localMode)return u.json(ovu(),503)}let c=Th(f),E;if(l.natsAccountJwt&&l.natsAccountSigningKey){let $=new Date(Date.now()+l.natsTunnelSessionTtlSeconds*1000);E=await stt({accountJwt:l.natsAccountJwt,accountSigningKey:l.natsAccountSigningKey,expiresAt:$,permissions:CVu(c),userId:f,allowedConnectionTypes:IK4(l.natsPublicUrl)})}return u.json(MVu({publicUrl:l.natsPublicUrl,userId:f,ttlSeconds:l.natsTunnelSessionTtlSeconds,credentials:E}))}),i}var ovu=()=>({error:"link session unavailable"});var uft=g(()=>{cf();vt();iRi();ptt()});async function GK4(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 jK4(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 I9(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 SK4(i){let{stream:u,claimName:t,runner:f,signal:l}=i;return new Promise((c)=>{let E=!1,$=!1,w=null,d=(v)=>{if(E)return;E=!0,clearTimeout(h),l.removeEventListener("abort",_),w?.unsubscribe(),c(v)},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)},xK4),_=()=>d(!1);l.addEventListener("abort",_,{once:!0}),w=So(f,t,(v)=>{if(E)return;if(v.kind!=="claiming")$=!0;if(u.writeSSE({event:"phase",data:JSON.stringify(v)}).catch(()=>{}),v.kind==="ready")d(!0);else if(v.kind==="failed")d(!1)})})}async function KK4(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<tft){await N0(fft,{signal:l}).catch(()=>{});continue}let h=d instanceof Error?d.message:String(d);await u.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:`Upstream daemon SSE error: ${h}`})}).catch(()=>{});return}if(w.status===404){try{await w.body?.cancel()}catch{}if(Date.now()-c<tft){await N0(fft,{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 xK4=90000,kK4=15000,lft=()=>{let i=new Ju;return i.get("/",async(u)=>{let t=u.var.studioContext;try{ki(t)}catch{return u.json({error:"Unauthorized"},401)}let f=Hu(t);if(!f)return u.json({error:"Unauthorized"},401);let l;try{l=yi(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=S8({orgId:l.id,virtualMcpId:c,branch:E}),d=OR({userId:f,projectRef:w},E),h=$.metadata??null,_,v=null,D=null;try{let O=await Ad(t,{userId:f,branch:E,virtualMcpMetadata:h});_=O.provider,v=O.kind}catch(O){D=O instanceof Error?O:Error(String(O)),_=null}let n=v&&h5(Al(h),f,E,v),N=!!n&&n.sandboxHandle===d;if(!_)return s3(u,async(O)=>{await O.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:D?.message??"No sandbox runner configured on this studio instance."})})});return u.header("X-Accel-Buffering","no"),u.header("Content-Encoding","identity"),s3(u,async(O)=>{let y=new AbortController,Z=setInterval(()=>{O.writeSSE({event:"keepalive",data:""}).catch(()=>{clearInterval(Z)})},kK4);O.onAbort(()=>{y.abort(),clearInterval(Z)});try{if(N&&v){if(await GK4(_,d)){await jK4({ctx:t,runner:_,claimName:d,userId:f,projectRef:w,sandboxProviderKind:v}),await O.writeSSE({event:"gone",data:""}).catch(()=>{});return}}if(!await SK4({stream:O,claimName:d,runner:_,signal:y.signal})||y.signal.aborted)return;await KK4({stream:O,runner:_,claimName:d,signal:y.signal})}finally{clearInterval(Z)}})}),i},tft=60000,fft=500;var cft=g(()=>{cf();MJ();Td();O4();RPi();Ko();rK();l_i();nw()});function XK4(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 LK4(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(JK4)});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 JK4=1e4,WK4=async(i,u)=>{if(!i.get("studioContext").auth.user?.id)return i.json({error:"Unauthorized"},401);return u()},Eft=()=>{let i=new Ju;return i.use("*",WK4),i.get("/",async(u)=>{let t=yu(),f=t.decoSupabaseUrl,l=t.decoSupabaseServiceKey;if(!f||!l)return u.json({apps:[]});try{let c=await LK4(f,l);return u.json({apps:XK4(c)})}catch(c){return console.error("[deco-apps] GET error:",c),u.json({error:"Failed to fetch apps"},502)}}),i};var $ft=g(()=>{cf();vt()});import{z as bu}from"zod";function H5(i,u="invalid_request_error",t=null,f=null){return{error:{message:i,type:u,param:t,code:f}}}function VK4(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 rK4(i,u,t){try{return JSON.parse(i)}catch{throw new hft(`Invalid JSON in tool call arguments for function '${t}' (tool_call_id: ${u}): ${i}`)}}function mK4(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:rK4(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 eK4(i){let u=i.map((t)=>{let f=t.function.parameters?$d(t.function.parameters):$d({type:"object",properties:{}});return[t.function.name,z0({description:t.function.description,inputSchema:f})]});return Object.fromEntries(u)}function aK4(i){if(!i)return;return{openai:{response_format:i}}}function oK4(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function wft(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 dft(i){if(i==="tool-calls")return"tool_calls";if(i==="length")return"length";return"stop"}var YK4=256,QK4,zK4,HK4,RK4,bK4,CK4,MK4,qK4,hft,_ft,vft;var Dft=g(()=>{nf();cf();MJ();QK4=bu.object({type:bu.literal("function"),function:bu.object({name:bu.string(),description:bu.string().optional(),parameters:bu.record(bu.string(),bu.unknown()).optional()})}),zK4=bu.object({id:bu.string(),type:bu.literal("function"),function:bu.object({name:bu.string(),arguments:bu.string()})}),HK4=bu.discriminatedUnion("role",[bu.object({role:bu.literal("system"),content:bu.string(),name:bu.string().optional()}),bu.object({role:bu.literal("user"),content:bu.union([bu.string(),bu.array(bu.union([bu.object({type:bu.literal("text"),text:bu.string()}),bu.object({type:bu.literal("image_url"),image_url:bu.object({url:bu.string(),detail:bu.string().optional()})})]))]),name:bu.string().optional()}),bu.object({role:bu.literal("assistant"),content:bu.string().nullable().optional(),name:bu.string().optional(),tool_calls:bu.array(zK4).optional()}),bu.object({role:bu.literal("tool"),content:bu.string(),tool_call_id:bu.string()})]),RK4=bu.object({type:bu.literal("text")}),bK4=bu.object({type:bu.literal("json_object")}),CK4=bu.object({type:bu.literal("json_schema"),json_schema:bu.object({name:bu.string(),description:bu.string().optional(),schema:bu.record(bu.string(),bu.unknown()),strict:bu.boolean().optional()})}),MK4=bu.union([RK4,bK4,CK4]),qK4=bu.object({model:bu.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:bu.array(HK4),stream:bu.boolean().optional().default(!1),temperature:bu.number().min(0).max(2).optional(),max_tokens:bu.number().positive().optional(),top_p:bu.number().min(0).max(1).optional(),frequency_penalty:bu.number().min(-2).max(2).optional(),presence_penalty:bu.number().min(-2).max(2).optional(),stop:bu.union([bu.string(),bu.array(bu.string())]).optional(),tools:bu.array(QK4).optional(),tool_choice:bu.union([bu.literal("auto"),bu.literal("none"),bu.literal("required"),bu.object({type:bu.literal("function"),function:bu.object({name:bu.string()})})]).optional(),response_format:MK4.optional(),user:bu.string().optional()});hft=class hft extends Error{constructor(i){super(i);this.name="MessageConversionError"}};_ft=new Ju;_ft.post("/:org/v1/chat/completions",async(i)=>{let u=i.get("studioContext"),t=i.req.param("org");try{if(!u.auth.apiKey?.id)return i.json(H5("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!u.organization)return i.json(H5("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(H5("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=qK4.safeParse(f);if(!l.success){let O=l.error.issues[0]??{message:"Invalid request",path:[]};return i.json(H5(`Invalid request: ${O.message}`,"invalid_request_error",O.path.length>0?O.path.join("."):null),400)}let c=l.data,E=VK4(c.model);if(!E)return i.json(H5("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 O=await u.storage.aiProviderKeys.list({organizationId:u.organization.id});if(O.length===0)return i.json(H5("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);$=O[0].id}let d;try{d=await u.aiProviders.activate($,u.organization.id)}catch{return i.json(H5(`AI provider credential not found or inaccessible: ${$}`,"invalid_request_error","model"),404)}let h=d.aiSdk.languageModel(w),_=mK4(c.messages),v=c.tools?eK4(c.tools):void 0,D=aK4(c.response_format),n=oK4(),N=Math.floor(Date.now()/1000);if(c.stream)return s3(i,async(O)=>{let y=wft(h,_,v,c,D,i.req.raw.signal);try{let Z=Y3(y),T=!1,B=0,F="",A=async()=>{if(F.length===0)return;let k=F;F="",await O.writeSSE({data:JSON.stringify({id:n,object:"chat.completion.chunk",created:N,model:c.model,choices:[{index:0,delta:{content:k},finish_reason:null}]})})};for await(let k of Z.fullStream){if(!T&&(k.type==="text-delta"||k.type==="tool-call"))await O.writeSSE({data:JSON.stringify({id:n,object:"chat.completion.chunk",created:N,model:c.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),T=!0;if(k.type==="text-delta"){if(F+=k.text,F.length>=YK4)await A()}else if(k.type==="tool-call"){await A();let I=B++;await O.writeSSE({data:JSON.stringify({id:n,object:"chat.completion.chunk",created:N,model:c.model,choices:[{index:0,delta:{tool_calls:[{index:I,id:k.toolCallId,type:"function",function:{name:k.toolName,arguments:JSON.stringify(k.input)}}]},finish_reason:null}]})})}else if(k.type==="finish")await A(),await O.writeSSE({data:JSON.stringify({id:n,object:"chat.completion.chunk",created:N,model:c.model,choices:[{index:0,delta:{},finish_reason:dft(k.finishReason)}],usage:k.totalUsage?{prompt_tokens:k.totalUsage.inputTokens??0,completion_tokens:k.totalUsage.outputTokens??0,total_tokens:k.totalUsage.totalTokens??0}:void 0})})}await A(),await O.writeSSE({data:"[DONE]"})}catch(Z){let T=Z;console.error("[openai-compat:stream] Error:",T.message),await O.writeSSE({data:JSON.stringify({error:{message:T.message,type:"server_error"}})})}});else{let O=wft(h,_,v,c,D,i.req.raw.signal),y=await g9(O),Z={role:"assistant",content:y.text||null};if(y.toolCalls&&y.toolCalls.length>0)Z.tool_calls=y.toolCalls.map((T)=>({id:T.toolCallId,type:"function",function:{name:T.toolName,arguments:JSON.stringify("input"in T?T.input:{})}})),Z.content=null;return i.json({id:n,object:"chat.completion",created:N,model:c.model,choices:[{index:0,message:Z,finish_reason:dft(y.finishReason)}],usage:{prompt_tokens:y.usage?.inputTokens??0,completion_tokens:y.usage?.outputTokens??0,total_tokens:y.usage?.totalTokens??0}})}}catch(f){let l=f;if(l.name==="AbortError")return i.json(H5("Request aborted","invalid_request_error"),400);if(l.name==="MessageConversionError")return i.json(H5(l.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",l.message,l.stack),i.json(H5(l.message,"server_error"),500)}});vft=_ft});function pK4(){let i=process.env.POSTHOG_KEY;if(!i)return null;return{key:i,host:process.env.POSTHOG_HOST??sK4}}var nft,sK4="https://ph.studio.decocms.com",gft;var Nft=g(()=>{cf();fei();M9();n6();vt();chu();R1i();nft=new Ju;nft.get("/",(i)=>{let u={version:cW.version,theme:Hl0(),...TO().logo&&{logo:TO().logo},...R3()&&{internalUrl:jli()},...yu().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!yu().firecrawlApiKey,auth:sa0(),posthog:pK4(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!R3()&&yu().sandboxProviderKind==="agent-sandbox"}};return i.header("Cache-Control","no-store"),i.json({success:!0,config:u})});gft=nft});function oAi(i){let u=(i??"").trim().toLowerCase();return u=u.replace(/^https?:\/\//,""),u=u.replace(/^www\./,""),u=u.split(/[/?#]/)[0]??"",u.replace(/\/+$/,"")}function yft(i){return(oAi(i).split(".")[0]||i).replace(/[-_]/g," ").split(" ").filter(Boolean).map((t)=>t.charAt(0).toUpperCase()+t.slice(1)).join(" ")}function Zft(i,u=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(oAi(i))}&sz=${u}`}function Oft(i,u){let t=i.trim();if(t.length<=u)return t;let f=t.slice(0,u-1),l=f.lastIndexOf(" ");return`${(l>u*0.6?f.slice(0,l):f).trimEnd()}\u2026`}function Tft(i){let{brand:u,domain:t,score:f,verdict:l}=i,c=typeof f==="number"?`${u} commerce report \u2014 ${Math.round(f)}/100 \xB7 decocms`:`${u} commerce report \xB7 decocms`,E=`See the full ${u} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,$=l?.trim()?Oft(`${l.trim().replace(/\s+/g," ")} \u2014 ${E}`,200):Oft(`How does ${t} really perform? ${E}`,200);return{title:c,description:$}}import{join as iJ4}from"path";function d2(i){return i.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function uJ4(i){let u=oAi(i),t=yft(u),f=Zft(u,128),c=`${(yu().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(u)}`,{title:E,description:$}=Tft({brand:t,domain:u});return[`<title>${d2(E)}</title>`,`<meta name="description" content="${d2($)}" />`,'<meta name="robots" content="noindex, follow" />','<meta property="og:type" content="website" />','<meta property="og:site_name" content="decocms" />',`<meta property="og:title" content="${d2(E)}" />`,`<meta property="og:description" content="${d2($)}" />`,`<meta property="og:url" content="${d2(c)}" />`,'<meta name="twitter:card" content="summary" />',`<meta name="twitter:title" content="${d2(E)}" />`,`<meta name="twitter:description" content="${d2($)}" />`,`<link rel="canonical" href="${d2(c)}" />`,`<link rel="icon" href="${d2(f)}" sizes="any" />`].join(`
88348
88348
  `)}function tJ4(i,u){return i.replace(/<title>[\s\S]*?<\/title>\s*/i,"").replace(/<meta\s+name="(?:description|twitter:[^"]*)"[^>]*>\s*/gi,"").replace(/<meta\s+property="og:[^"]*"[^>]*>\s*/gi,"").replace(/<link\s+rel="icon"[^>]*>\s*/gi,"").replace("</head>",` ${u}
88349
88349
  </head>`)}function Bft(i){let u=new Ju;return u.get("/:domain",async(t)=>{let f=t.req.param("domain"),l=i?iJ4(i,"index.html"):null,c=l?Bun.file(l):null;if(!c||!await c.exists())return t.notFound();let E=await c.text();try{let $=uJ4(f);return t.html(tJ4(E,$),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return t.html(E)}}),u}var Fft=g(()=>{cf();vt()});import{z as $u}from"zod";var rJ,fJ4,lJ4,cJ4,EJ4,Uft;var Pft=g(()=>{rJ=$u.enum(["good","bad","neutral"]),fJ4=$u.preprocess((i)=>{if(Array.isArray(i))return{kind:"text",value:i.find((t)=>t!==null&&typeof t!=="object")??""};return i!==null&&typeof i==="object"?i:{kind:"text",value:i}},$u.object({kind:$u.enum(["text","number","sparkline","badge","score"]).catch("text"),value:$u.coerce.string().optional(),tone:rJ.optional(),muted:$u.boolean().optional(),delta:$u.coerce.string().optional(),deltaDir:$u.enum(["up","down","neutral"]).optional(),points:$u.array($u.coerce.number()).optional(),label:$u.coerce.string().optional()}).transform((i)=>{if(i.kind==="badge"&&i.label==null)i.label=i.value??"";if(i.kind==="score"){let u=Number(i.value);if(Number.isNaN(u))return{...i,kind:"text"}}return i})),lJ4=$u.preprocess((i)=>{let u=i;if(u&&typeof u==="object"&&!Array.isArray(u)&&Array.isArray(u.cells))u=u.cells;if(Array.isArray(u)&&u.length===1&&Array.isArray(u[0]))u=u[0];if(Array.isArray(u))return u;if(u&&typeof u==="object")return Object.values(u);return u},$u.array(fJ4)),cJ4={key:$u.coerce.string(),title:$u.coerce.string(),eyebrow:$u.coerce.string().optional(),headline:$u.coerce.string(),annotation:$u.coerce.string().optional(),methodology:$u.coerce.string().optional(),sources:$u.array($u.object({name:$u.coerce.string(),logoUrl:$u.coerce.string()})).optional()},EJ4=$u.discriminatedUnion("template",[$u.object({template:$u.literal("cover"),score:$u.object({value:$u.coerce.number(),max:$u.coerce.number().optional(),grade:$u.coerce.string().optional(),label:$u.coerce.string().optional()}).optional(),brandImage:$u.coerce.string().optional(),screenshot:$u.coerce.string().optional(),mobileScreenshot:$u.coerce.string().optional()}),$u.object({template:$u.literal("cta"),ctaUrl:$u.coerce.string().optional(),ctaLabel:$u.coerce.string().optional(),bullets:$u.array($u.coerce.string()).optional()}),$u.object({template:$u.literal("series"),points:$u.array($u.coerce.number()).min(2),xLabels:$u.array($u.coerce.string()).min(1),unit:$u.coerce.string().optional(),callout:$u.object({index:$u.coerce.number(),value:$u.coerce.string(),tone:rJ.optional()})}),$u.object({template:$u.literal("threshold"),value:$u.coerce.string().default(""),metricLabel:$u.coerce.string().optional(),ratio:$u.coerce.number(),thresholdRatio:$u.coerce.number().optional(),thresholdLabel:$u.coerce.string().default(""),tone:rJ.optional()}),$u.object({template:$u.literal("stats"),stats:$u.array($u.object({value:$u.coerce.string(),label:$u.coerce.string(),tone:rJ.optional()})).min(1)}),$u.object({template:$u.literal("bars"),items:$u.array($u.object({value:$u.coerce.string(),label:$u.coerce.string(),ratio:$u.coerce.number(),tone:rJ.optional()})).min(1)}),$u.object({template:$u.literal("gauges"),gauges:$u.array($u.object({label:$u.coerce.string(),value:$u.coerce.string(),status:$u.enum(["good","warn","bad"]).catch("warn"),caption:$u.coerce.string().optional(),ratio:$u.coerce.number().optional()})).min(1)}),$u.object({template:$u.literal("checklist"),checks:$u.array($u.object({label:$u.coerce.string(),status:$u.enum(["pass","fail","warn"]).catch("fail"),value:$u.coerce.string().optional()})).min(1)}),$u.object({template:$u.literal("table"),columns:$u.array($u.object({label:$u.coerce.string(),align:$u.enum(["left","right"]).optional()})).min(1),rows:$u.array(lJ4).min(1),highlightRow:$u.coerce.number().optional()}),$u.object({template:$u.literal("products"),products:$u.array($u.object({name:$u.coerce.string(),price:$u.coerce.string().optional(),image:$u.coerce.string().optional(),url:$u.coerce.string().optional()})).min(1)}),$u.object({template:$u.literal("list"),entries:$u.array($u.object({label:$u.coerce.string(),severity:$u.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:$u.coerce.number().optional()}),$u.object({template:$u.literal("keywords"),volumeLabel:$u.coerce.string().optional(),keywords:$u.array($u.object({term:$u.coerce.string(),volume:$u.coerce.string(),position:$u.coerce.number().catch(0)})).min(1)}),$u.object({template:$u.literal("competitor"),metricLabel:$u.coerce.string().optional(),competitors:$u.array($u.object({name:$u.coerce.string(),value:$u.coerce.string(),tone:rJ.optional(),isYou:$u.boolean().optional()})).min(1)}),$u.object({template:$u.literal("scorecard"),rivalLabel:$u.coerce.string().optional(),dimensions:$u.array($u.object({label:$u.coerce.string(),you:$u.coerce.string(),rival:$u.coerce.string().optional(),rivalName:$u.coerce.string().optional(),tone:rJ.optional()})).min(1)})]),Uft=$u.object({...cJ4,template:EJ4})});function Aft(i){let u=[],t=[...i.sections].sort((f,l)=>f.position-l.position).map((f)=>{let l=Uft.safeParse(f.props);if(l.success)return l.data;let c=l.error.issues[0];return u.push({section_type:f.section_type,position:f.position,reason:c?`${c.path.join(".")||"(root)"}: ${c.message}`:"contract violation"}),null}).filter((f)=>f!==null);return{deck:{meta:{...i.meta,scores:i.summary?.scores},slides:t},drops:u}}var Ift=g(()=>{Pft()});function qp(i,u){return fetch(`${XO({})}${i}`,u)}async function $J4(i,u){let t=await qp(`/api/v2/public/diagnostics/${encodeURIComponent(i)}`+(u?`?pw=${encodeURIComponent(u)}`:""),{headers:{Accept:"application/json"}});if(t.status===404)return{status:"not_found",deck:null,scanned_at:null,drops:[]};if(!t.ok)throw Error(`report read HTTP ${t.status}`);let f=await t.json(),{deck:l,drops:c}=Aft(f);return{status:l.slides.length?"ready":"empty",deck:l,scanned_at:f.scanned_at,drops:c}}var wJ4,mJ,xft;var kft=g(()=>{cf();nd();xY();Ift();wJ4=new Set(["complete","errored","terminated","unknown"]),mJ=new Ju;mJ.use("*",async(i,u)=>{let t=await wt.api.getSession({headers:i.req.raw.headers});if(!t?.user?.id)return i.json({error:"Authentication required"},401,{"Cache-Control":"private, no-store",Vary:"Cookie"});i.set("reportUser",{email:t.user.email}),await u(),i.header("Cache-Control","private, no-store"),i.header("Vary","Cookie");return});mJ.get("/site/:domain",async(i)=>{let u=i.req.param("domain").trim();if(!u)return i.json({error:"domain is required"},400);let t=i.req.query("key")?.trim()||void 0;try{let f=await $J4(u,t);return i.header("Cache-Control","private, no-store"),i.json(f)}catch{return i.json({error:"report read failed"},502)}});mJ.post("/run",async(i)=>{let u;try{u=await i.req.json()}catch{return i.json({error:"invalid JSON"},400)}let t=typeof u.domain==="string"?u.domain.trim():"";if(!t)return i.json({error:"domain is required"},400);let f=i.get("reportUser").email,l=typeof u.distinctId==="string"&&u.distinctId.trim()&&u.distinctId.length<=200?u.distinctId.trim():void 0;try{let c=await qp("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${LO({})}`},body:JSON.stringify({url:t,email:f,distinct_id:l})});if(!c.ok)return i.json({error:`run HTTP ${c.status}`},502);let E=await c.json(),$=E.blocked?{state:"blocked"}:E.status==="fresh"?{state:"fresh"}:E.mode==="sync"?{state:"sync"}:{state:"running",id:E.id??null};return i.json($)}catch{return i.json({error:"run failed"},502)}});mJ.get("/status",async(i)=>{let u=i.req.query("id");if(!u)return i.json({error:"id is required"},400);try{let t=await qp(`/api/v2/diagnostics/status?id=${encodeURIComponent(u)}`,{headers:{Authorization:`Bearer ${LO({})}`}});if(!t.ok)return i.json({error:`status HTTP ${t.status}`},502);let l=(await t.json()).status??"unknown",c={done:wJ4.has(l),status:l};return i.json(c)}catch{return i.json({error:"status failed"},502)}});mJ.get("/link-token/:id",async(i)=>{let u=i.req.param("id");try{let t=await qp(`/api/v2/public/link-tokens/${encodeURIComponent(u)}`,{headers:{Accept:"application/json"}});if(t.status===404)return i.json(null);if(!t.ok)return i.json({error:`link token HTTP ${t.status}`},502);return i.json(await t.json())}catch{return i.json({error:"link token resolve failed"},502)}});mJ.get("/suggest",async(i)=>{let u=(i.req.query("q")??"").trim().slice(0,64);if(u.length<2)return i.json({suggestions:[]});try{let t=await qp(`/api/v2/public/suggest?q=${encodeURIComponent(u)}`,{headers:{Accept:"application/json"}});if(!t.ok)return i.json({suggestions:[]});let f=await t.json();return i.json({suggestions:Array.isArray(f.suggestions)?f.suggestions:[]})}catch{return i.json({suggestions:[]})}});xft=mJ});function Gft(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 jft,dJ4,hJ4,Sft;var Kft=g(()=>{cf();Vh();nH();uY();jft=new Ju,dJ4=["range","if-none-match","if-modified-since"],hJ4=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];jft.get("/:org/files/*",async(i)=>{let u=i.get("studioContext"),t=u.organization?.id;if(!u.auth?.user?.id){if(kR(i))return i.redirect(`/login?next=${encodeURIComponent(i.req.path)}`,302);throw new I0(401,{message:"Authentication required"})}if(!t)throw new I0(401,{message:"Organization context required"});let f=i.req.path.replace(/^.*\/files\//,"");if(!f)throw new I0(400,{message:"Missing file key"});let l=await Ho(f,u);if(!l)throw new I0(503,{message:"Object storage not configured"});if(l.startsWith("data:")&&qh()){let w=l.match(/^data:([^;]+);base64,(.+)$/s);if(!w)throw new I0(500,{message:"Invalid data URL from storage"});let[,d,h]=w,_=Buffer.from(h,"base64"),v=new Headers({"Content-Type":d,"Cache-Control":"private, max-age=86400"});return Gft(v,d),new Response(_,{status:200,headers:v})}let c=new Headers;for(let w of dJ4){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 I0(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 I0(502,{message:"Upstream storage error"});let $=new Headers;for(let w of hJ4){let d=E.headers.get(w);if(d)$.set(w,d)}return $.set("Cache-Control","private, max-age=86400"),Gft($,$.get("content-type")??""),new Response(E.body,{status:E.status,headers:$})});Sft=jft});function Wft(i){let u=i?.connectFn??nJ4,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 v of $)try{v()}catch{}}function h(v){(async()=>{for await(let D of v.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,D){let n=0;while(!c)try{t=await u({servers:v,timeout:DJ4,reconnect:!0,maxReconnectAttempts:-1,...D?{authenticator:D}:{}}),console.log(`[NatsProvider] Connected to ${t.getServer()} after ${n} attempt(s)`),f=null,E=!1,h(t),d();return}catch{n++;let N=c6(vJ4,_J4,n-1,2,0.5);await N0(N)}}return{init(v,D){if(l)return;l=!0,c=!1;let n=D?.creds?Jft.credsAuthenticator(new TextEncoder().encode(D.creds)):void 0;_(v,n).catch(()=>{})},isConnected(){return w()},getConnection(){return w()?t:null},getJetStream(){if(!w())return null;if(!f)f=Lft.jetstream(t);return f},onReady(v){if($.push(v),w())try{v()}catch{}},async drain(){if(c=!0,l=!1,f=null,E=!1,t){let v=t;t=null,await v.drain().catch(()=>{})}}}}function nJ4(i){return Xft.connect(i)}var Jft,Xft,Lft,_J4=100,vJ4=3000,DJ4=3000;var Yft=g(()=>{O4();Jft=G(RN(),1),Xft=G(pHi(),1),Lft=G(gn(),1)});function svu(i,u){return`${i}.${u}`}class pvu{cache;constructor(i){this.cache=DR({ttlMs:i?.ttlMs??gJ4,maxSize:i?.maxSize??NJ4})}async get(i,u){return this.cache.get(svu(i,u))??null}async set(i,u,t){this.cache.set(svu(i,u),t)}async invalidate(i,u){this.cache.delete(svu(i,u))}teardown(){this.cache.clear()}}var gJ4=600000,NJ4=5000;var Qft=()=>{};function sAi(i,u){return`${i}:${u}`}function i5u(i){let u=DR({ttlMs:i?.ttlMs??OJ4,maxSize:i?.maxSize??yJ4}),t=i?.getConnection,f=crypto.randomUUID(),l=new TextEncoder,c=new TextDecoder,E=null;function $(w,d){let h=t?.();if(!h)return;try{h.publish(zft,l.encode(JSON.stringify({organizationId:w,keyId:d,originId:f})))}catch(_){console.warn("[ProviderKeyCache] Publish failed (non-critical):",_)}}return{get(w,d){return u.get(sAi(w,d))},set(w,d,h){u.set(sAi(w,d),h)},invalidate(w,d){u.delete(sAi(w,d)),$(w,d)},start(){if(E)return;let w=t?.();if(!w)return;E=w.subscribe(zft),(async()=>{for await(let d of E)try{let h=JSON.parse(c.decode(d.data));if(h.originId===f)continue;u.delete(sAi(h.organizationId,h.keyId))}catch{}})().catch(console.error)},teardown(){E?.unsubscribe(),E=null,u.clear()}}}var zft="studio.ai-provider-keys.invalidate",OJ4=30000,yJ4=5000;var Hft=()=>{};class u5u{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 AJ4(){return{name:x8,subjects:[`${kRi}.>`],storage:H_.StorageType.File,max_age:BJ4,max_bytes:UJ4,max_msgs_per_subject:PJ4,discard:H_.DiscardPolicy.Old,retention:H_.RetentionPolicy.Limits,duplicate_window:FJ4,num_replicas:1}}class Cft{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 Rft(i){let u=bft.headers();for(let[t,f]of Object.entries(i))u.set(t,f);return u}function GJ4(i,u){let t=0;return{publish(f,l,c,E){f.publish(l,c,E?{headers:E}:void 0).catch(($)=>{if(t++,TJ4().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 t5u{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 H_.jetstreamManager(i),t=AJ4();try{await u.streams.info(x8),await u.streams.update(x8,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(x8),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)return console.warn(`[Decopilot] pump: JetStream client unavailable for thread ${u}; chunks NOT published to NATS`),Promise.resolve();let c=GJ4(u,f),E=!1,$=()=>{if(E)return;E=!0;let d=Omu(u);l.publish(d.subject,d.data).catch(()=>{})};t.addEventListener("abort",$,{once:!0});let w=(d)=>{let h=performance.now(),_=fW(d,{runId:u}),v=performance.now()-h;if(aM().record(v),oM().add(1,{"org.id":f??"unknown"}),kJ4?.record(v,_.reduce((D,n)=>D+n.data.length,0)),_.length===0){console.warn(`[Decopilot] dropping oversized stream chunk for thread ${u}`);return}for(let D of _)c.publish(l,D.subject,D.data,D.headers?Rft(D.headers):void 0)};return(async()=>{let d=i.getReader(),h=0,_=0,v;try{while(!0){let{done:D,value:n}=await d.read();if(D)break;if(w(n),_++,++h>=64)h=0,await new Promise((N)=>setImmediate(N))}}catch(D){v=D,console.warn(`[Decopilot] stream pump error for thread ${u}:`,D?.message??D)}finally{if(d.releaseLock(),$(),xJ4)console.warn(JSON.stringify({msg:"decopilot-stream-diag",event:"pump-done",taskId:u,publishedChunks:_,publishErrors:c.errorCount}))}if(v!==void 0)throw v})()}async publishRawChunk(i,u,t){let f=this.js;if(!f)return!1;let l=performance.now(),c=fW(u,{runId:i,dedup:t});if(aM().record(performance.now()-l),oM().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:Rft(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"?H_.DeliverPolicy.New:H_.DeliverPolicy.All,c=t?.closeOnDone??!1,E=Nn(i),$;try{$=await(await f.consumers.get(x8,{filter_subjects:E,deliver_policy:l})).consume()}catch(N){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",N?.message??N),null}let h=Phi({messages:async function*(){try{for await(let N of $)yield{subject:N.subject,data:N.data,headers:N.headers}}finally{$.stop()}}(),onCancel:()=>$.stop()}).pipeThrough(X1i()).pipeThrough(L1i()).getReader(),_=!1,v=()=>{if(_)return;_=!0;try{h.releaseLock()}catch{}},D=!1,n=()=>{if(D)return;D=!0,$.stop(),h.cancel().catch(()=>{}),v()};return u?.addEventListener("abort",n,{once:!0}),new ReadableStream({async pull(N){for(;;){let{done:O,value:y}=await h.read();if(O){n(),N.close();return}let Z=y;if(Z.kind==="done"){if(c){n(),N.close();return}continue}N.enqueue(Z.chunk);return}},cancel(){n()}})}purge(i){if(!this.jsm)return;this.jsm.streams.purge(x8,{filter:Nn(i)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var H_,bft,ZJ4=(i)=>{let u;return()=>u??=i()},TJ4,BJ4=86400000000000,FJ4=120000000000,UJ4=4294967296,PJ4=500000,IJ4,xJ4,kJ4;var Mft=g(()=>{u4u();Ahi();W1i();jl();KRi();H_=G(gn(),1),bft=G(RN(),1),TJ4=ZJ4(()=>Bt.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"}));IJ4=process.env.STREAM_ENCODE_TRACE==="1",xJ4=process.env.DECOPILOT_STREAM_TRACE==="1";kJ4=IJ4?new Cft:null});function qft(i){let u=i.createFetch??jJ4,t=i.timeoutMs??2000;return async(f)=>{try{let l=i.getConnection();if(!l)return f5u;let c=Th(f),$=await u(l,t)(`tunnel://${c}/api/links/status`,{method:"GET"});if(!$.ok)return f5u;let w=await $.json();return{online:!0,hostname:w.hostname,capabilities:w.capabilities??[],cliVersion:w.cliVersion}}catch{return f5u}}}var f5u,jJ4=(i,u)=>$n({connection:i,firstFrameTimeoutMs:u});var Vft=g(()=>{IM();HM();f5u={online:!1,capabilities:[]}});async function*SJ4(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 rft(i){let u=i.createFetch??((t)=>$n({connection:t,idleTimeoutMs:KJ4}));return async function*(f,l,c){let E=i.getConnection();if(!E)throw Error("link_unavailable: NATS unavailable");let $=Th(f),w=u(E),d={method:l.method,headers:l.headers,signal:c?.signal};if(l.body!=null)d.body=l.body;let h=await w(`tunnel://${$}${l.path}`,d);yield*SJ4(h)}}var KJ4=45000;var mft=g(()=>{IM();HM()});function eft(i){let u=i.createFetch??((t)=>$n({connection:t,idleTimeoutMs:JJ4}));return{async publish(t,f,l){let c=i.getConnection();if(!c)throw Error("link_unavailable: NATS unavailable");let E=Th(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 aft(i){let u=i.createFetch??$n;return{async publishControlFrame(t,f,l){let c=i.getConnection();if(!c)throw Error("link_unavailable: NATS unavailable");let E=Th(t),w=await u(c)(`tunnel://${E}/api/links/control`,{method:"POST",headers:{"content-type":"application/json"},body:Jmu(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 JJ4=45000;var oft=g(()=>{IM();QRi();HM()});function pAi(i,u,t,f){if(!f)return!1;return i.emit(u,Mh(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 sft=g(()=>{Pt()});class l5u{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 XJ4,rm as iIi}from"fs/promises";import{join as uIi}from"path";async function tIi(i){let u=new Date;u.setUTCDate(u.getUTCDate()-LJ4),u.setUTCHours(0,0,0,0);let t=0;try{let f=await eJ(i);for(let l of f)if(/^\d{4}$/.test(l))t+=await pft(i,l,u);else if(!l.startsWith(".")){let c=uIi(i,l),E=await eJ(c);for(let w of E){if(!/^\d{4}$/.test(w))continue;t+=await pft(c,w,u)}if((await eJ(c)).length===0)await iIi(c,{recursive:!0,force:!0})}}catch(f){console.warn("monitoring retention cleanup failed:",f)}return t}async function pft(i,u,t){let f=0,l=uIi(i,u),c=await eJ(l);for(let $ of c){if(!/^\d{2}$/.test($))continue;let w=uIi(l,$),d=await eJ(w);for(let _ of d){if(!/^\d{2}$/.test(_))continue;let v=new Date(`${u}-${$}-${_}T00:00:00Z`);if(isNaN(v.getTime()))continue;if(v<t){let D=uIi(w,_);await iIi(D,{recursive:!0,force:!0}),f++}}if((await eJ(w)).length===0)await iIi(w,{recursive:!0,force:!0})}if((await eJ(l)).length===0)await iIi(l,{recursive:!0,force:!0});return f}async function eJ(i){try{return(await XJ4(i)).filter((t)=>!t.startsWith("."))}catch{return[]}}var LJ4=30;var c5u=()=>{};import{DBOS as E5u,SchedulerMode as WJ4}from"@dbos-inc/dbos-sdk";async function QJ4(){let i=[vh(),LL(),BD()],u=0;for(let t of i)try{u+=await tIi(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 zJ4(i,u){await E5u.runStep(()=>QJ4(),{name:"monitoringRetention"})}function u4t(){if(i4t)return;i4t=!0;let i=E5u.registerWorkflow(zJ4,{name:"monitoringRetentionWorkflow"});E5u.registerScheduled(i,{name:"monitoringRetentionWorkflow",crontab:YJ4,mode:WJ4.ExactlyOncePerIntervalWhenActive})}var YJ4="23 4 * * *",i4t=!1;var t4t=g(()=>{Rw();c5u()});function f4t(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 u9.create();l.auth.user={id:t,role:f.role},l.organization={id:f.orgId,slug:f.orgSlug,name:f.orgName};let c=await U0u(i.db,u,f.role);return l.boundAuth=F0u({auth:l.authInstance,headers:new Headers,role:f.role,permissions:c,userId:t}),l.access=new $y(t,void 0,l.boundAuth,f.role,"self"),l3i(l,{id:f.orgId,slug:f.orgSlug}),l}}var l4t=g(()=>{wy();ha()});import{EventEmitter as HJ4}from"events";var $5u;var c4t=g(()=>{aN();$5u=new HJ4;$5u.on("request",(i)=>{vv(i)})});function E4t(){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 v=await i.req.raw.clone().json();if(v.method==="tools/call"&&v.params?.name){let D=rR(v.params.name),n=v.params.arguments||{},N=Object.keys(n).map((y)=>rR(y)),O=N.length>0?N.slice(0,3).join(",")+(N.length>3?"\u2026":""):"";c=`${Dl.tool}${D}${Dl.dim}(${O})${Dl.reset}`}else if(v.method)c=`${Dl.dim}${rR(v.method)}${Dl.reset}`}}catch{}}let $=rR(l);if(l.startsWith("/mcp/conn_")){let h=l.split("/")[2]??"";$=`/mcp/${Dl.mcp}${rR(h.slice(0,12))}\u2026${Dl.reset}`}else if(l==="/mcp")$=`${Dl.mcp}/mcp${Dl.reset}`;else if(l==="/mcp/registry")$=`${Dl.mcp}/mcp/registry${Dl.reset}`;let w=bJ4(f),d=E?"\u25C0":"\u2190";if(!wci())console.log(`${Dl.dim}${d}${Dl.reset} ${w}${f}${Dl.reset} ${$}${c?` ${c}`:""}`);try{await u()}finally{let h=Date.now()-t,_=i.res.status,v=RJ4(_),D=h<1000?`${h}ms`:`${(h/1000).toFixed(1)}s`,n=E?"\u25B6":"\u2192";if(!wci())console.log(`${Dl.dim}${n}${Dl.reset} ${w}${f}${Dl.reset} ${$}${c?` ${c}`:""} ${v}${_}${Dl.reset} ${Dl.duration}${D}${Dl.reset}`);$5u.emit("request",{method:f,path:rR(l),status:_,duration:h,timestamp:new Date})}}}var Dl,RJ4=(i)=>{if(i>=500)return Dl.serverError;if(i>=400)return Dl.clientError;if(i>=300)return Dl.redirect;return Dl.ok},bJ4=(i)=>{return Dl[i]||Dl.reset},rR=(i)=>{return i.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var $4t=g(()=>{aN();c4t();Dl={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 _4t}from"crypto";import{mkdir as CJ4,readdir as MJ4,rm as w4t,stat as v4t}from"fs/promises";import{join as d5u,relative as qJ4}from"path";import{z as k0}from"zod";function n4t(i){let u=i.replace(/[^a-zA-Z0-9_-]/g,"_");return d5u(VJ4,u)}function g4t(i){return i.replace(/^\/+/,"").replace(/\.\./g,"")}function w5u(i,u){let t=n4t(i),f=g4t(u);return d5u(t,f)}function rJ4(i,u,t,f){let l=yu().encryptionKey||"dev-secret",c=`${i}:${u}:${t}:${f}`;return _4t("sha256",l).update(c).digest("hex")}function h4t(i,u,t,f,l){let c=Math.floor(Date.now()/1000)+f,E=rJ4(u,t,c,l),$=new URL(`/api/dev-assets/${u}/${g4t(t)}`,i);return $.searchParams.set("expires",c.toString()),$.searchParams.set("signature",E),$.searchParams.set("method",l),$.toString()}function N4t(i,u,t){let f=`${i}:${u.getTime()}:${t}`;return`"${_4t("md5","etag").update(f).digest("hex")}"`}async function O4t(i,u,t,f,l){try{let c=await MJ4(i,{withFileTypes:!0});for(let E of c){let $=d5u(i,E.name),d=qJ4(u,$).replace(/\\/g,"/");if(t&&!d.startsWith(t))continue;if(E.isDirectory())if(f){let h=d+"/";if(!t||h.startsWith(t)){if(!(t?d.slice(t.length):d).includes("/"))l.commonPrefixes.add(h)}}else await O4t($,u,t,f,l);else if(E.isFile()){if(f&&t){let h=d.slice(t.length);if(h.includes(f)){let _=h.indexOf(f),v=t+h.slice(0,_+1);l.commonPrefixes.add(v);continue}}try{let h=await v4t($);l.objects.push({key:d,size:h.size,lastModified:h.mtime.toISOString(),etag:N4t($,h.mtime,h.size)})}catch{}}}}catch{}}function y4t(i,u){let f=yi(i).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:k0.object({prefix:k0.string().optional(),maxKeys:k0.number().optional().default(1000),continuationToken:k0.string().optional(),delimiter:k0.string().optional()}),outputSchema:k0.object({objects:k0.array(k0.object({key:k0.string(),size:k0.number(),lastModified:k0.string(),etag:k0.string()})),nextContinuationToken:k0.string().optional(),isTruncated:k0.boolean(),commonPrefixes:k0.array(k0.string()).optional()}),handler:async(l)=>{let c=l,E=c.prefix||"",$=c.maxKeys??1000,w=c.delimiter,d=c.continuationToken,h=n4t(f);await CJ4(h,{recursive:!0});let _={objects:[],commonPrefixes:new Set};await O4t(h,h,E,w,_),_.objects.sort((O,y)=>O.key.localeCompare(y.key));let v=0;if(d){if(v=_.objects.findIndex((O)=>O.key>d),v===-1)v=_.objects.length}let D=_.objects.slice(v,v+$),n=v+$<_.objects.length,N=n?D[D.length-1]?.key:void 0;return{objects:D,isTruncated:n,nextContinuationToken:N,commonPrefixes:Array.from(_.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:k0.object({key:k0.string()}),outputSchema:k0.object({contentType:k0.string().optional(),contentLength:k0.number(),lastModified:k0.string(),etag:k0.string(),metadata:k0.record(k0.string(),k0.string()).optional()}),handler:async(l)=>{let c=l,E=w5u(f,c.key),$=await v4t(E);return{contentType:n_u(c.key),contentLength:$.size,lastModified:$.mtime.toISOString(),etag:N4t(E,$.mtime,$.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:k0.object({key:k0.string(),expiresIn:k0.number().optional()}),outputSchema:k0.object({url:k0.string(),expiresIn:k0.number()}),handler:async(l)=>{let c=l,E=c.expiresIn??d4t;return{url:h4t(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:k0.object({key:k0.string(),expiresIn:k0.number().optional(),contentType:k0.string().optional()}),outputSchema:k0.object({url:k0.string(),expiresIn:k0.number()}),handler:async(l)=>{let c=l,E=c.expiresIn??d4t;return{url:h4t(u,f,c.key,E,"PUT"),expiresIn:E}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:k0.object({key:k0.string()}),outputSchema:k0.object({success:k0.boolean(),key:k0.string()}),handler:async(l)=>{let c=l,E=w5u(f,c.key);try{return await w4t(E),{success:!0,key:c.key}}catch{return{success:!1,key:c.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:k0.object({keys:k0.array(k0.string()).max(1000)}),outputSchema:k0.object({deleted:k0.array(k0.string()),errors:k0.array(k0.object({key:k0.string(),message:k0.string()}))}),handler:async(l)=>{let c=l,E=[],$=[];return await Promise.all(c.keys.map(async(w)=>{let d=w5u(f,w);try{await w4t(d),E.push(w)}catch(h){$.push({key:w,message:h instanceof Error?h.message:"Unknown error"})}})),{deleted:E,errors:$}}}]}async function h5u(i,u,t){let f=y4t(u,t),l=new CD({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:Jl});for(let E of f){let $="shape"in E.inputSchema?E.inputSchema.shape:k0.object({}).shape,w=E.outputSchema&&"shape"in E.outputSchema?E.outputSchema.shape:k0.object({}).shape;l.registerTool(E.name,{description:E.description??"",inputSchema:$,outputSchema:w,annotations:E.annotations,_meta:E._meta},async(d)=>{try{let h=await E.handler(d);return{content:[{type:"text",text:JSON.stringify(h)}],structuredContent:h}}catch(h){return{content:[{type:"text",text:`Error: ${h.message}`}],isError:!0}}})}let c=new Gd({enableJsonResponse:i.headers.get("Accept")?.includes("application/json")??!1});return await l.connect(c),O5(l,c,i,"mcp:dev-assets")}async function Z4t(i,u,t,f){let c=y4t(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 VJ4="./data/assets",d4t=3600,D4t,T4t;var B4t=g(()=>{vt();Mo();cf();BV();yH();sE();NAi();D4t=new Ju;D4t.all("/",async(i)=>{let u=i.get("studioContext"),t=new URL(i.req.url),f=`${t.protocol}//${t.host}`;return h5u(i.req.raw,u,f)});T4t=D4t});var F4t={};Ji(F4t,{mountDevRoutes:()=>mJ4});function mJ4(i,u){i.all("/mcp/:connectionId{.*_dev-assets$}",u,async(f)=>{let l=f.get("studioContext"),c=new URL(f.req.url),E=`${c.protocol}//${c.host}`;return h5u(f.req.raw,l,E)}),i.all("/mcp/:connectionId{.*_dev-assets$}/call-tool/:toolName",u,async(f)=>{let l=f.get("studioContext"),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 Z4t($,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",T4t);let t=new Ju;t.use("*",o3({mountPath:"/api/dev-assets"})),t.route("/",gAi({orgFromPath:!1})),i.route("/api/dev-assets",t)}var U4t=g(()=>{cf();E_u();NAi();B4t()});import{sql as eJ4}from"kysely";import{randomUUID as P4t}from"crypto";import{z as aJ4}from"zod";async function sJ4(i){let u=new Date().toISOString(),t=P4t(),f=pf.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:P4t(),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 eJ4`SELECT pg_notify('mesh_events', ${t})`.execute(i.db)}catch{}}async function pJ4(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 iX4(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","=",jJ).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($):I4t;return{acceptPublishRequests:!0,requireApiToken:c.requireApiToken===!0,rateLimitEnabled:c.rateLimitEnabled===void 0?A4t:c.rateLimitEnabled===!0,rateLimitWindow:E,rateLimitMax:w}}}return{acceptPublishRequests:!1,requireApiToken:!1,rateLimitEnabled:A4t,rateLimitWindow:oJ4,rateLimitMax:I4t}}async function uX4(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 tX4(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 x4t(i){let{db:u,db:t}=i,f=new xQ(t),l=new kQ(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 pJ4(u,E);if(!$)return c.json({error:"Organization not found"},404);let w=await iX4(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"),n=D?.startsWith("Bearer ")?D.slice(7).trim():null;if(!n)return c.json({error:"API key required. Use Authorization: Bearer <key>"},401);if(!await l.validate($,n))return c.json({error:"Invalid API key"},401)}if(w.rateLimitEnabled){if(await uX4(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 h=$m0.safeParse(d);if(!h.success)return c.json({error:"Invalid publish request payload",details:aJ4.treeifyError(h.error)},400);let _=await tX4(t,$,h.data.data.id,h.data.data.title);if(_)return c.json({error:"A registry item with the same id or title already exists. Please use a different name/id.",conflict:_},409);let v=await f.createOrUpdate({organization_id:$,requested_id:h.data.data.id,title:h.data.data.title,description:h.data.data.description??null,_meta:h.data.data._meta,server:h.data.data.server,requester_name:h.data.requester?.name??null,requester_email:h.data.requester?.email??null});try{await sJ4({db:u,organizationId:$,request:v})}catch(D){console.warn("[private-registry] failed to emit publish-request event:",D)}return mu.capture({distinctId:h.data.requester?.email??`org:${$}`,event:"registry_publish_request_submitted",groups:{organization:$},properties:{organization_id:$,request_id:v.id,requested_id:v.requested_id,title:h.data.data.title,requester_email:h.data.requester?.email??null}}),c.json({id:v.id,requested_id:v.requested_id,status:v.status},201)}}var A4t=!0,oJ4="hour",I4t=100;var k4t=g(()=>{z4();Pt();gR();upi();tpi();U1()});var G4t={};Ji(G4t,{createPublishRequestHandler:()=>x4t,createPublicMCPHandler:()=>Dm0});var j4t=g(()=>{nR();k4t()});var Zcu={};Ji(Zcu,{watchHandler:()=>W4t,isSsoExemptPath:()=>L4t,getProxyDispatch:()=>EX4,createApp:()=>gX4});import{readFileSync as fX4}from"fs";import{PrometheusSerializer as lX4}from"@opentelemetry/exporter-prometheus";import{DBOS as mR}from"@dbos-inc/dbos-sdk";import{oAuthDiscoveryMetadata as hX4,oAuthProtectedResourceMetadata as _X4}from"better-auth/plugins";async function cX4(i){let u=i.connect(),t;try{t=await Promise.race([u,K4t(S4t)])}catch{return u.then((f)=>f.release(!0)).catch(()=>{}),!1}try{return await Promise.race([t.query("SELECT 1"),K4t(S4t)]),t.release(),!0}catch{return t.release(!0),!1}}function K4t(i){return new Promise((u,t)=>setTimeout(()=>t(Error("pg health-check timeout")),i))}function EX4(){if(!_5u)throw Error("getProxyDispatch() called before createApp() or without NATS \u2014 proxy dispatch unavailable");return _5u}async function $X4(i,u){let{items:t}=await i.storage.connections.list(u,{where:{field:["connection_url"],operator:"like",value:`${q40}%`},limit:1}),f=t[0];if(!f?.configuration_state)return null;return f.configuration_state.project_locator}function wX4(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}function L4t(i){return i.startsWith("/api/org-sso/")||i.startsWith("/api/auth/")||i.startsWith("/api/tools/management")||i.startsWith("/oauth-proxy/")||/^\/api\/[^/]+\/oauth-proxy\//.test(i)||i.startsWith(`${Ehu}/`)}async function gX4(i={}){let u=i.database??Ft(),t=!1;Z1.stop().catch((H)=>{console.error("[SSEHub] Error stopping previous broadcast (HMR cleanup):",H)});let f,l,c=new pvu,E,$,w,d,h,_=null;if(i.disableNats)E=i5u(),f={get:async()=>null,set:async()=>{},invalidate:async()=>{},teardown:()=>{}},l=new qo,$={start:async()=>{},broadcast:()=>{},publishControlFrame:()=>{},stop:async()=>{}},h=void 0,w={init:async()=>{},pump:(H)=>{return(async()=>{let ni=H.getReader();try{while(!0){let{done:Yi}=await ni.read();if(Yi)break}}catch{}finally{ni.releaseLock()}})()},publishRawChunk:async()=>!1,publishDone:async()=>!1,createTailStream:async()=>null,purge:()=>{},teardown:()=>{}};else{_=Wft();let H=yu().natsCredsPath,ni;if(H)try{ni=fX4(H,"utf8")}catch(t0){console.error(`[app] failed to read NATS_CREDS at ${H}; connecting anonymously`,t0)}_.init(yu().natsUrls,ni?{creds:ni}:void 0);let Yi=wpi()?new pai({getJetStream:()=>_.getJetStream()}):null;Yi?.init().catch(()=>{}),f=Yi;let uu=new g6u({getJetStream:()=>_.getJetStream()});uu.init().catch(()=>{}),l=uu,E=i5u({getConnection:()=>_.getConnection()}),$=new u5u({getConnection:()=>_.getConnection()}),w=new t5u({getConnection:()=>_.getConnection(),getJetStream:()=>_.getJetStream()}),d=qft({getConnection:()=>_.getConnection()}),h=eft({getConnection:()=>_.getConnection()});let bi=aft({getConnection:()=>_.getConnection()}),Au=$;$={start:(t0)=>Au.start(t0),broadcast:(t0)=>Au.broadcast(t0),publishControlFrame:(t0,Pf)=>{bi.publishControlFrame(t0,Pf).catch((g4)=>{console.warn("[TunnelControl] publishControlFrame failed (non-critical):",g4)})},stop:()=>Au.stop()},Ka0(_),_.onReady(()=>{Yi?.init().catch((t0)=>{console.error("[McpListCache] Deferred init failed:",t0)}),uu.init().catch((t0)=>{console.error("[ConnectionCircuitStore] Deferred init failed:",t0)}),E.start(),G50(()=>_.getConnection()),w.init().catch((t0)=>{console.warn("[Decopilot] StreamBuffer init failed (late-join disabled):",t0)})})}if(eR)await eR();ioi(f),N6u(l);let D={storage:new XQ(u.db),sseHub:Z1},n=new _4u(D),N=new Qm(u.db),O=new l5u(N);O.start(),$.start((H)=>{Vhi(H),n.execute({type:"CANCEL",taskId:H}).catch((ni)=>{console.error("[Decopilot] CancelBroadcast execute failed:",ni)})}).catch((H)=>{console.error("[Decopilot] CancelBroadcast start failed:",H)}),_?.onReady(()=>{$.start().catch((H)=>{console.error("[CancelBroadcast] Deferred start failed:",H)})}),w.init().catch((H)=>{console.warn("[Decopilot] StreamBuffer init failed, attach/late-join disabled:",H)}),eR=async()=>{await n.stopAll(),n.dispose(),O.dispose(),$.stop().catch(()=>{}),w.teardown(),f?.teardown(),c.teardown(),E.teardown(),j50(),l.teardown(),ioi(null),N6u(null)};let y=new Ju;if(y.use("*",omi({enabled:(H)=>lY(H,"debug")==="1"})),y.use("*",lzi),y.use("/*",jl0({origin:(H)=>{if(H.includes("localhost")||H.includes("127.0.0.1"))return H;return H},credentials:!0,allowMethods:["GET","POST","PUT","DELETE","OPTIONS"],allowHeaders:["Content-Type","Authorization","mcp-protocol-version"],exposeHeaders:["WWW-Authenticate"]})),y.use("*",async(H,ni)=>{if(await ni(),H.req.path.includes("/files/"))return;if(H.req.path.includes("/fs/")&&H.req.path.endsWith("/read"))return;H.header("X-Frame-Options","DENY"),H.header("Content-Security-Policy","frame-ancestors 'none'")}),!yu().noTui)y.use("*",E4t());y.use("*",async(H,ni)=>{if(await ni(),EM(H.req.path))return;if(H.res.status>=500){let uu=await H.res.clone().text();console.error(`[5xx Response] ${H.req.method} ${H.req.path} - ${H.res.status}:`,uu)}}),y.get(D6.HEALTH,(H)=>{if(t)return H.json({status:"shutting_down"},503);return H.json({status:"ok"})}),y.get(D6.HEALTH_LIVE,(H)=>{return H.json({status:"ok"})}),y.get(D6.HEALTH_READY,async(H)=>{if(t)return H.json({status:"shutting_down"},503);let ni={};if(ni.postgres={status:await cX4(u.pool)?"up":"down"},_)ni.nats=_.isConnected()?{status:"up"}:{status:"down"};else ni.nats={status:"down"};let Yi=ni.postgres.status==="up",uu=Yi?200:503;return H.json({status:Yi?"ready":"not_ready",services:ni},uu)}),y.get(D6.METRICS,async(H)=>{try{let ni=await wzi.collect(),Yi=dX4.serialize(ni.resourceMetrics);return H.text(Yi,200,{"Content-Type":"text/plain; version=0.0.4; charset=utf-8"})}catch(ni){return console.error("Failed to collect metrics:",ni),H.text("# Error collecting metrics",500)}}),y.get(`${D6.DBOS_QUEUE_DEPTH_PREFIX}:queueName`,async(H)=>{let ni=H.req.param("queueName");if(!vX4.has(ni))return H.json({error:`Unknown queue: ${ni}`},404);let Yi=await mR.listQueuedWorkflows({queueName:ni,status:"ENQUEUED"});return H.json({queue_length:Yi.length})}),y.get(D6.HOSTED_RUN_PENDING,(H)=>{let{active:ni,pending:Yi,max:uu}=HF0();return H.json({pending:Yi,active:ni,max:uu})}),y.route("/api/config",gft),y.route("/api/_reports",xft),y.route("/report",Bft(i.clientDir)),y.route("/api/auth/custom",pa0),y.route("/api/auth/desktop",uo0),y.all("/api/auth/admin/*",co0),y.all("/api/auth/*",async(H)=>{return await wt.handler(H.req.raw)});let Z=$g0();Z.use("/.well-known/oauth-protected-resource/mcp/:connectionId",XJ),Z.use("/mcp/:connectionId/.well-known/oauth-protected-resource",XJ),y.route("/",Z),y.get("/.well-known/oauth-protected-resource/api/:org/mcp/:connectionId",_a),y.route("/",_g0()),y.use("/oauth-proxy/:connectionId/*",XJ),y.all("/oauth-proxy/:connectionId/*",J4t);let T=async(H)=>{let Yi=await DX4()(H.req.raw),uu=await Yi.json();return Response.json(uu,Yi)};y.use("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",XJ),y.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",T);let B=async(H)=>{let Yi=await nX4()(H.req.raw),uu=await Yi.json();return Response.json(uu,Yi)};y.get("/.well-known/oauth-authorization-server/*/:gateway?/:connectionId?",B);let F=Sa0({ttlMs:120000}),A=await V90({db:u.db,auth:wt,encryption:{key:yu().encryptionKey},observability:{tracer:s2,meter:Bt},modelListCache:c,providerKeyCache:E,memberRoleCache:F,linkStatusProbe:d,publishLinkControlFrame:(H,ni)=>$.publishControlFrame(H,ni)});u9.set(A);let k=new aD(yu().encryptionKey);Ysu({db:u.db,baseUrl:Dh()});let I=Owi(u.db),j=new Gm(u.db),C=f4t({db:u.db});h6u({storage:I,studioContextFactory:C}),A4u({studioContextFactory:C,deps:{runRegistry:n,cancelBroadcast:$,streamBuffer:w,sseHub:Z1},prepareLinkWorkFn:qp0,workPublisher:h}),T4u({dispatchRunFn:Cp0,studioContextFactory:C,deps:{runRegistry:n,cancelBroadcast:$,streamBuffer:w,sseHub:Z1}});let K=new XQ(u.db),W=new _y(u.db);UF0({getJetStream:()=>_?.getJetStream()??null,getJetStreamManager:async()=>{let H=_?.getConnection();return H?await X4t.jetstreamManager(H):null},messageParts:K.messageParts(),resolveRun:async(H)=>{let ni=await u.db.selectFrom("threads").select(["organization_id","created_by","message_storage_version","status","run_fence_token","title"]).where("id","=",H).executeTakeFirst();return ni?{orgId:ni.organization_id,createdBy:ni.created_by,version:ni.message_storage_version??1,status:ni.status,runFenceToken:ni.run_fence_token,title:ni.title??null}:null},completeRunIfNotCompleted:async(H,ni)=>{let Yi=await K.completeRunIfNotCompleted(H,ni);if(pAi(Z1,ni,H,Yi),Yi)await O4u(W,H,ni);return Yi},markRunRequiresAction:async(H,ni)=>{let Yi=await K.requiresActionIfInProgress(H,ni);return pAi(Z1,ni,H,Yi),Yi},markRunFailed:async(H,ni,Yi,uu)=>{let bi=await K.markRunFailed(H,ni,Yi,uu);if(pAi(Z1,ni,H,bi),bi)await O4u(W,H,ni);return bi},clearSynthesizedError:async(H,ni)=>{await K.messageParts().replaceMessageParts(H,O9(H,ni),[])},persistTitle:(H,ni,Yi)=>K.update(H,ni,{title:Yi}),onTitleUpdated:async({runId:H,orgId:ni,title:Yi})=>{let uu=await K.get(H,ni).catch(()=>null);Z1.emit(ni,Mh(H,uu?.status??"in_progress",{title:Yi,virtualMcpId:uu?.virtual_mcp_id??void 0,createdBy:uu?.created_by,triggerId:uu?.trigger_id,branch:uu?.branch??null,createdAt:uu?.created_at,updatedAt:uu?.updated_at}))},bumpProgress:async({runId:H,orgId:ni})=>{await K.bumpProgress(H,ni)},recordCompleted:async({runId:H,orgId:ni,distinctId:Yi,usage:uu})=>{mu.capture({distinctId:Yi,event:"chat_message_completed",groups:{organization:ni},properties:{organization_id:ni,thread_id:H,transport:"projector",input_tokens:uu.inputTokens,output_tokens:uu.outputTokens,total_tokens:uu.totalTokens}})},recordFailed:async({runId:H,orgId:ni,distinctId:Yi,reason:uu,kind:bi})=>{mu.capture({distinctId:Yi,event:"chat_message_failed",groups:{organization:ni},properties:{organization_id:ni,thread_id:H,transport:"projector",error_category:bi,error_message:uu}})},purgeRun:async(H)=>{w.purge(H)}}),oK0({studioContextFactory:C,systemDatabaseUrl:gzi(yu().databaseUrl,yu().databasePgSsl),streamBuffer:w}),u4t(),Qsu();let r=async(H,ni,Yi)=>{let uu=await I.findById(H,ni);if(!uu)throw Error("Automation not found");return D6u({automationId:uu.id,organizationId:uu.organization_id,triggerId:null})},Y=new jR(I,({automation:H,trigger:ni,contextMessages:Yi,idempotencyKey:uu})=>Co({automationId:H.id,organizationId:H.organization_id,triggerId:ni.id,contextMessages:Yi},{idempotencyKey:uu})),ti=[vh(),LL(),BD()];for(let H of ti)tIi(H).then(()=>{}).catch((ni)=>console.error("[monitoring] Retention cleanup failed:",ni));let di=()=>u.db.deleteFrom("apikey").where("expiresAt","<",new Date).execute().then(()=>{}).catch((H)=>console.error("[auth] Expired API key cleanup failed:",H));di(),setInterval(di,86400000).unref(),y.use("*",async(H,ni)=>{if(tzi(H.req.path))return ni();let Yi={measure:async(bi,Au)=>{D3(H,bi);try{return await Au()}finally{sw(H,bi)}}},uu=await u9.create(H.req.raw,{timings:Yi});uu.automationRunner=r,H.set("studioContext",uu);try{await ni()}finally{let bi=uu.pendingRevalidations;if(bi.length>0)Promise.race([Promise.allSettled(bi),N0(30000)]).catch((t0)=>console.error("[studio] revalidation cleanup error:",t0))}}),y.use("/api/:org/decopilot/*",LJ),y.use("/api/:org/v1/*",LJ),y.use("/api/:org/files/*",LJ),y.use("*",async(H,ni)=>{if(L4t(H.req.path))return ni();let Yi=H.get("studioContext");if(!Yi?.organization?.id||!Yi?.auth?.user?.id)return ni();if(!(await Yi.storage.orgSsoConfig.getByOrgId(Yi.organization.id))?.enforced)return ni();if(!await Yi.storage.orgSsoSessions.isValid(Yi.auth.user.id,Yi.organization.id))return H.json({error:"SSO authentication required for this organization"},403);return ni()});let li=new Ju;li.use("*",o3({mountPath:"/api/org-sso"})),li.route("/",WPi()),y.route("/api/org-sso",li),y.get("/api/tools/management",(H)=>{return H.json({tools:pmi,grouped:ZO()})}),y.use("/mcp/*",async(H,ni)=>{D3(H,"mcp");try{return await ni()}finally{sw(H,"mcp")}});let p=async(H,ni)=>{let Yi=H.var.studioContext;if(!Yi.auth.user?.id&&!Yi.auth.apiKey?.id){let uu=new URL(H.req.url),bi=H.req.header("x-forwarded-proto")?.split(",")[0]?.trim(),Au=bi?`${bi}://${uu.host}`:uu.origin;return H.res=new Response(null,{status:401,headers:{"WWW-Authenticate":`Bearer realm="mcp",resource_metadata="${Au}${uu.pathname}/.well-known/oauth-protected-resource"`}})}return await ni()};if(y.use("/mcp/:connectionId?",p),y.use("/mcp/gateway/:virtualMcpId?",p),y.use("/mcp/virtual-mcp/:virtualMcpId?",p),y.use("/mcp/self",p),qh()){let{mountDevRoutes:H}=(U4t(),hIi(F4t));H(y,p)}let o=new Ju;o.use("*",o3({mountPath:"/mcp"})),o.route("/",NBi()),y.route("/mcp",o);let Ni=new Ju;Ni.use("*",o3({mountPath:"/mcp/self"})),Ni.route("/",qAi()),y.route("/mcp/self",Ni);let wi=new Ju;wi.use("*",o3({mountPath:"/mcp"})),wi.route("/",ZBi()),y.route("/mcp",wi),y.use("/api/:org/models/*",async(H,ni)=>{D3(H,"llm_models");try{return await ni()}finally{sw(H,"llm_models")}});let ji=l_u({cancelBroadcast:$,streamBuffer:w,runRegistry:n,linkStatusProbe:d});if(y.route("/api",ji),_!=null)_5u=rft({getConnection:()=>_?.getConnection()??null});y.route("/api",ift()),y.get("/api/links/me",async(H)=>{try{let ni=H.req.header("authorization")??"",Yi=/^Bearer\s+(.+)$/i.exec(ni),uu=null;if(Yi){let Au=(Yi[1]??"").trim();uu=await JPi(Au,wt.api)}else uu=H.get("studioContext")?.auth?.user?.id??null;if(!uu)return H.json({error:"unauthorized"},401);let bi=d?await d(uu):{online:!1,capabilities:[]};if(!bi.online)return H.json(null);return H.json({hostname:bi.hostname,cliVersion:bi.cliVersion})}catch(ni){return console.error("[links/me] presence probe failed; reporting offline:",ni instanceof Error?ni.message:String(ni)),H.json(null)}}),y.use("/api/:org/files/*",LJ),y.route("/api",Sft);let Ci=new Ju;Ci.use("*",o3({mountPath:"/api"})),Ci.route("/",VAi()),y.route("/api",Ci),y.route("/api",vft);let Vi=new Ju;Vi.use("*",o3({mountPath:"/api"})),Vi.route("/",rAi({tokenStorage:j,automationEventDispatcher:Y})),y.route("/api",Vi);let ri=new Sm(u.db),vi=new Ju;vi.use("*",o3({mountPath:"/api"})),vi.route("/",vAi()),y.route("/api",vi),y.route("/api/deco-sites",Dit()),y.route("/api/deco-apps",Eft());let Xi=new Ju;Xi.use("*",o3({mountPath:"/api/deco-sites"})),Xi.route("/",nAi()),y.route("/api/deco-sites",Xi);let Pi=new Ju;Pi.use("*",o3({mountPath:"/api/vm-events"})),Pi.route("/",lft()),y.route("/api/vm-events",Pi);let{createPublishRequestHandler:gi,createPublicMCPHandler:$i}=await Promise.resolve().then(() => (j4t(),G4t)),ci={db:u.db,vault:{encrypt:(H)=>k.encrypt(H),decrypt:(H)=>k.decrypt(H)}},Ki=gi(ci),m=$i(ci);y.use("/org/:orgRef/registry/publish-request",XJ),y.post("/org/:orgRef/registry/publish-request",Ki),y.use("/org/:orgSlug/registry/*",XJ),y.all("/org/:orgSlug/registry/*",m),y.post("/api/:org/registry/publish-request",Ki),y.all("/api/:org/registry/*",m),y.route(Ehu,Eo0());let ui=att({kvStorage:ri,runRegistry:n,streamBuffer:w,sseHub:Z1,cancelBroadcast:$,tokenStorage:j,automationEventDispatcher:Y,mountDevAssets:qh(),mcpAuth:p,oauthProxyHandler:J4t,watchHandler:W4t,betterAuthProtectedResourceHandler:T,getNatsConnection:()=>_?.getConnection()??null});return y.route("/api/:org",ui),y.notFound((H)=>{return H.json({error:"Not Found",path:H.req.path},404)}),y.onError(iit),Object.assign(y,{markShuttingDown:()=>{t=!0},shutdown:async()=>{if(console.log("[shutdown] Stopping workers..."),await Promise.allSettled([Z1.stop(),eR?Promise.resolve(eR()).finally(()=>{eR=null}):Promise.resolve()]),_)await _.drain().catch((H)=>console.error("[shutdown] NATS drain error:",H));console.log("[shutdown] Flushing telemetry..."),await i3().catch((H)=>console.error("[shutdown] Telemetry flush error:",H)),console.log("[shutdown] Closing database..."),await tn(u).catch((H)=>console.error("[shutdown] Database close error:",H)),console.log("[shutdown] Cleanup complete.")},initDbos:async()=>{await mR.registerQueue(l3,{partitionQueue:!0,concurrency:$6u,minPollingIntervalMs:w6u}),await mR.registerQueue(Gh,{partitionQueue:!0,concurrency:P4u}),await mR.registerQueue(SD,{partitionQueue:!0,concurrency:Z4u}),await mR.registerQueue(Bn,{partitionQueue:!0,concurrency:aK0}),await w_u(I),await Promise.allSettled(["automations-gate","automations-global"].map((H)=>mR.deleteQueue(H))),await d6u(u.pool),yw0().catch((H)=>{console.error("[studio-pack-backfill] failed:",H)}),zsu().catch((H)=>{console.error("[org-fs] public-sets boot sync kick failed:",H)})}})}var X4t,S4t=5000,_5u=null,eR=null,J4t=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("studioContext");if(!l)l=await u9.create(i.req.raw),i.set("studioContext",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 Oz(E.connection_url),w,d=new URL(E.connection_url),_=(typeof E.metadata?.oauthResource==="string"&&E.metadata.oauthResource.length>0?E.metadata.oauthResource:void 0)??E.connection_url;if($.ok)w=(await $.json()).authorization_servers?.[0];if(!w)w=d.origin;let v=await va(w);if(!v.ok)return i.json({error:"Failed to get auth server metadata"},502);let D=await v.json(),n;if(f==="authorize")n=D.authorization_endpoint;else if(f==="token")n=D.token_endpoint;else if(f==="register")n=D.registration_endpoint;if(!n)return i.json({error:`Unknown OAuth endpoint: ${f}`},404);let N=new URL(n),O=new URL(i.req.url);if(N.search=O.search,f==="authorize"){let C=N.searchParams.get("redirect_uri");if(C){let K=yu().baseUrl??O.origin;try{let W=new URL(C),r=new URL(K);if(!(W.origin===r.origin||W.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)}N.searchParams.set("redirect_uri",C)}if(N.searchParams.has("resource"))N.searchParams.set("resource",_);if(V40(E.connection_url))try{let K=await $X4(l,E.organization_id),W=wX4(K);for(let[r,Y]of W)N.searchParams.set(r,Y)}catch(K){console.warn("[oauth-proxy] Failed to get smart OAuth params, proceeding without:",K)}return i.redirect(N.toString(),302)}let y={Accept:i.req.header("Accept")||"application/json"},Z=i.req.header("Content-Type");if(Z)y["Content-Type"]=Z;let T=i.req.header("Authorization");if(T)y.Authorization=T;let B,F=null,A=null;if(i.req.method!=="GET"&&i.req.method!=="HEAD")if(f==="token"&&Z?.includes("application/x-www-form-urlencoded")){if(T?.toLowerCase().startsWith("basic "))try{let Y=atob(T.slice(6).trim()),ti=Y.indexOf(":");if(ti!==-1){let di=decodeURIComponent(Y.slice(0,ti)),li=decodeURIComponent(Y.slice(ti+1));F=di||null,A=li||null}}catch{}let C=await i.req.formData();if(C.has("resource"))C.set("resource",_);let K=C.get("client_id"),W=C.get("client_secret");if(typeof K==="string"&&K)F=K;if(typeof W==="string"&&W)A=W;let r=new URLSearchParams;for(let[Y,ti]of C.entries())r.append(Y,ti.toString());B=r.toString()}else if(f==="register"&&Z?.toLowerCase().includes("application/json")){let C=await l.db.selectFrom("organization").select(["id","slug","name"]).where("id","=",E.organization_id).executeTakeFirst(),K=await i.req.text(),W={};try{W=K?JSON.parse(K):{}}catch{B=K}let r=typeof W==="object"&&W!==null&&!Array.isArray(W);if(B===void 0&&!r)B=K;if(B===void 0){let Y=W,ti=Y.metadata&&typeof Y.metadata==="object"?Y.metadata:{};Y.metadata={...ti,organization_id:E.organization_id,...C?.slug?{organization_slug:C.slug}:{},...C?.name?{organization_name:C.name}:{}},B=JSON.stringify(Y),y["Content-Type"]="application/json"}}else B=i.req.raw.body??void 0;let k=await fetch(N.toString(),{method:i.req.method,headers:y,body:B,duplex:"half",redirect:"manual"}),I=new Headers,j=["connection","keep-alive","transfer-encoding","content-encoding","content-length"];for(let[C,K]of k.headers.entries())if(!j.includes(C.toLowerCase()))I.set(C,K);if(f==="token"&&k.ok){let C=await k.text();try{let K=JSON.parse(C);if(typeof K.access_token==="string"&&K.access_token){let W=typeof K.expires_in==="number"?new Date(Date.now()+K.expires_in*1000):null,r=null;try{r=await yz(E.connection_url)??n}catch{r=n}let Y={connectionId:u,accessToken:K.access_token,refreshToken:typeof K.refresh_token==="string"?K.refresh_token:null,scope:typeof K.scope==="string"?K.scope:null,expiresAt:W,clientId:F,clientSecret:A,tokenEndpoint:r};await new el(l.db,l.vault).upsert(Y)}}catch(K){console.error("[oauth-proxy] failed to persist downstream token:",K)}return new Response(C,{status:k.status,statusText:k.statusText,headers:I})}return new Response(k.body,{status:k.status,statusText:k.statusText,headers:I})},W4t=async(i)=>{let u=i.var.studioContext;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 s3(i,async($)=>{if(await $.writeSSE({event:"connected",data:JSON.stringify({listenerId:E,organizationId:f,typePatterns:c,connectedAt:new Date().toISOString()})}),!Z1.add({id:E,organizationId:f,typePatterns:c?.length?c:null,push:(h)=>{$.writeSSE({id:h.id,event:h.type,data:JSON.stringify(h)}).catch(()=>{Z1.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((h)=>{$.onAbort(()=>{clearInterval(d),Z1.remove(f,E),h()})})})},dX4,vX4,DX4=()=>_X4(wt),nX4=()=>hX4(wt);var Tcu=g(()=>{O4();vt();Hsu();n6();uY();Pt();cf();NEi();Sl0();smi();nd();ha();s3u();cE();jl();z4();chu();to0();$o0();hhu();sp0();c_u();g_();c3i();E_u();uit();$_u();ott();uft();cft();v_u();$ft();OBi();Da();Dft();TBi();Wvu();Nft();Fft();kft();Kft();Lvu();Jvu();Zli();oV();Yft();ud();Wwi();Xm();y6u();Qft();Hft();Mft();Vft();mft();oft();v4u();sft();Bpi();qwi();k8();Ipi();t4t();d$i();c5u();Rw();d_u();Hz();N4u();d4u();d$i();i_u();qsi();Vsi();l4t();cY();$4t();MJ();s3u();gH();rhi();X4t=G(gn(),1);dX4=new lX4,vX4=new Set([l3,Gh,SD,Bn])});var H4t={};Ji(H4t,{resolveClientDir:()=>FX4,resolveAssetPathWithTraversalCheck:()=>z4t,isPathWithinDirectory:()=>Q4t,createAssetHandler:()=>UX4});import{resolve as Vp,dirname as NX4,join as OX4,extname as yX4,basename as ZX4,sep as Y4t}from"path";function TX4(i,u){if(i===u||ZX4(i)==="index.html")return{"Cache-Control":"no-cache"};if(i.includes(`${Y4t}assets${Y4t}`))return{"Cache-Control":"public, max-age=31536000, immutable"};return{}}function Q4t(i,u){let t=Vp(u),f=Vp(i);return f===t||f.startsWith(t+"/")}function z4t({requestPath:i,clientDir:u}){let t=i.startsWith("/")?i.slice(1):i,f=Vp(u,t);if(!Q4t(f,u))return null;return f}function FX4(i,u="../client"){let t=new URL(i),f=NX4(t.pathname);return Vp(f,u)}function UX4(i={}){let{env:u="production",clientDir:t=BX4,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=z4t({requestPath:$,clientDir:t});if(!w)return null;let d=OX4(w,"index.html"),h=Vp(t,"index.html"),_=c.headers.get("accept"),D=_?.includes("text/html")||_?.includes("*/*")&&["",".html"].includes(yX4(w))?[d,h]:[];for(let n of[w,...D])try{let N=Bun.file(n);if(await N.exists())return new Response(N,{headers:TX4(n,h)})}catch{}if($.includes("/assets/"))return new Response("Not Found",{status:404,headers:{"Cache-Control":"no-store"}});return null}}var BX4="./dist/client";var R4t=()=>{};var b4t={};Ji(b4t,{tryUpgradePreviewWs:()=>jX4,tryHandlePreviewHttp:()=>GX4,previewWebSocketHandler:()=>SX4,parsePreviewBaseDomain:()=>kX4,isPreviewWsData:()=>fIi,extractHandleFromHost:()=>v5u});function IX4(i){if(i.method!=="GET")return!1;return(i.headers.get("accept")??"").includes("text/html")}function xX4(){return new Response(AX4,{status:503,headers:{"content-type":"text/html; charset=utf-8","cache-control":"no-store","retry-after":"1","access-control-allow-origin":"*"}})}function kX4(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 v5u(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 GX4(i,u){let t=v5u(i.headers.get("host"),u.baseDomain);if(!t)return null;let f=await u.getRunner();if(!f)return mp(503,"preview proxy not configured");let l=await f.proxyPreviewRequest(t,i);if(l.headers.get(VK)&&IX4(i))return xX4();return l.headers.delete(VK),l}function mp(i,u){return new Response(JSON.stringify({error:u}),{status:i,headers:{"content-type":"application/json","access-control-allow-origin":"*"}})}function fIi(i){return typeof i==="object"&&i!==null&&i.kind==="preview"}async function jX4(i,u,t){if((i.headers.get("upgrade")??"").toLowerCase()!=="websocket")return null;let f=v5u(i.headers.get("host"),t.baseDomain);if(!f)return null;let l=await t.getRunner();if(!l)return mp(503,"preview proxy not configured");let c=await l.resolvePreviewUpstreamUrl(f);if(!c)return mp(404,"sandbox not found");let E=new URL(i.url);if(E.pathname.startsWith("/_sandbox")||E.pathname.startsWith("/_decopilot_vm"))return mp(404,"not found");let $=`${c.replace(/^http/,"ws")}${E.pathname}${E.search}`,w=i.headers.get("sec-websocket-protocol"),d=w?w.split(",").map((v)=>v.trim()).filter(Boolean):[],h={kind:"preview",upstreamUrl:$,upstreamProtocols:d,pending:[],upstream:null,closed:!1};if(!u.upgrade(i,{data:h}))return mp(426,"upgrade failed");return}function rp(i,u,t,f){if(u.closed)return;u.closed=!0;try{i.close(t,f)}catch{}try{u.upstream?.close()}catch{}}var PX4=256,AX4='<!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>',SX4;var C4t=g(()=>{gcu();SX4={open(i){let u=i.data;if(!fIi(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)}`),rp(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)=>{rp(i,u,f.code||1000,f.reason||"")}),t.addEventListener("error",()=>{rp(i,u,1011,"upstream error")})},message(i,u){let t=i.data;if(!fIi(t))return;let f=t.upstream;if(f&&f.readyState===WebSocket.OPEN){f.send(u);return}if(t.pending.length>=PX4){rp(i,t,1011,"preview ws backlog overflow");return}t.pending.push(u)},close(i){let u=i.data;if(!fIi(u))return;rp(i,u,1000,"")}}});var q4t={};Ji(q4t,{bootstrapDevLinkSession:()=>HX4});import{existsSync as KX4}from"fs";import{chmod as JX4,mkdir as XX4,rename as LX4,writeFile as WX4}from"fs/promises";import{dirname as YX4,join as M4t}from"path";function QX4(i){return M4t(i,"dev-link")}function zX4(i){let u=process.env.DEV_LINK_SESSION_PATH;if(u&&u.trim()!=="")return u;return M4t(QX4(i),"session.json")}async function HX4(i,u){let t=zX4(i),f=Ft().db,l=R3()?await zo():await f.selectFrom("user").select(["id","email","name"]).orderBy("createdAt","desc").executeTakeFirst();if(!l?.id)return null;if(KX4(t))try{let d=await Bun.file(t).json(),h=d.user?.sub,_=d.accessToken;if(h===l.id&&typeof _==="string"){if(await wt.api.verifyApiKey({body:{key:_}}).then((D)=>D?.valid===!0).catch(()=>!1))return{path:t,userSub:h}}}catch{}let c=null;try{c=await wt.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 XX4(YX4(t),{recursive:!0});let $=`${t}.tmp`;return await WX4($,JSON.stringify(E,null,2),{mode:384}),await JX4($,384),await LX4($,t),{path:t,userSub:l.id}}var V4t=g(()=>{cE();nd();M9()});var cL4={};import{existsSync as mX4}from"fs";function o4t(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 oX4(i){let u=new Headers(i.headers);for(let[t,f]of Object.entries(aX4))u.set(t,f);return new Response(i.body,{status:i.status,statusText:i.statusText,headers:u})}async function lL4(i){let u;try{u=await RX4.create({systemDatabaseUrl:o4t(jw.databaseUrl,jw.databasePgSsl),systemDatabaseSchemaName:"dbos"});let t=await u.listWorkflows({status:"PENDING",queueName:Gh,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:Gh}),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 cIi(i){if(a4t)return;a4t=!0,console.log(`
88350
88350
  [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{fL4(),lIi.markShuttingDown();let c=PRu(jw.dispatchRole,t,process.env.SHUTDOWN_DRAIN_MS);await N0(c),await tL4.stop(!0);let E=ep.executorID;await ep.shutdown(),await lL4(E),await lIi.shutdown()}catch(c){console.error("[shutdown] Error during shutdown:",c),l=1}clearTimeout(f),process.exit(l)}var jw,ep,RX4,bX4,CX4,MX4,qX4,VX4,s4t,rX4,r4t,p4t,eX4,aX4,sX4,pX4,iL4,D5u,n5u,uL4,ilt,m4t,lIi,g5u,e4t,N5u=5,O5u=0,tL4,fL4,a4t=!1;var ult=g(async()=>{O4();Nsu();vt();Dli();jl();Usu();jw=yu();ubu();({DBOS:ep,DBOSClient:RX4}=await import("@dbos-inc/dbos-sdk"));bX4=[l3,Gh,SD,Bn],CX4=jw.dispatchRole==="worker"?bX4:jw.dispatchRole==="api"?[]:void 0;ep.setConfig(gsu({systemDatabaseUrl:o4t(jw.databaseUrl,jw.databasePgSsl),poolSize:Number(process.env.DBOS_POOL_SIZE??5),executorID:jw.podName,listenQueues:CX4}));({createApp:MX4}=await Promise.resolve().then(() => (Tcu(),Zcu))),{isServerPath:qX4}=await Promise.resolve().then(() => (Zli(),QRu)),{createAssetHandler:VX4,resolveClientDir:s4t}=await Promise.resolve().then(() => (R4t(),H4t)),rX4=jw.port,r4t=s4t(import.meta.url,"../client"),p4t=mX4(r4t)?r4t:s4t(import.meta.url,"../dist/client"),eX4=VX4({clientDir:p4t,isServerPath:qX4}),aX4={"X-Frame-Options":"DENY","Content-Security-Policy":"frame-ancestors 'none'"};({parsePreviewBaseDomain:sX4,tryHandlePreviewHttp:pX4,tryUpgradePreviewWs:iL4,previewWebSocketHandler:D5u,isPreviewWsData:n5u}=await Promise.resolve().then(() => (C4t(),b4t))),{getOrInitSharedRunner:uL4}=await Promise.resolve().then(() => (Ko(),uS0)),ilt=sX4(process.env.STUDIO_SANDBOX_PREVIEW_URL_PATTERN),m4t={baseDomain:ilt??"",getRunner:uL4},lIi=await MX4({clientDir:p4t}),g5u=process.env.DBOS_CONDUCTOR_KEY?.trim(),e4t=process.env.DBOS_CONDUCTOR_URL?.trim();await ep.launch({...g5u?{conductorKey:g5u}:{},...g5u&&e4t?{conductorURL:e4t}:{}});console.log(`[dbos] application version: ${ep.applicationVersion}`);await bl(async()=>{O5u++;try{return await lIi.initDbos()}catch(i){let u=O5u>=N5u?"giving up":"retrying";throw console.warn(`[dbos] initDbos attempt ${O5u}/${N5u} failed, ${u}`,i),i}},{maxAttempts:N5u,minTimeout:1000,maxTimeout:1e4,jitter:0.5});if(!jw.isCli){let{bannerLines:i}=await Promise.resolve().then(() => (EW(),pM));console.log("");for(let u of i())console.log(u)}tL4=Bun.serve({idleTimeout:0,port:rX4,hostname:"0.0.0.0",fetch:async(i,u)=>{if(ilt){let f=await iL4(i,u,m4t);if(f===void 0)return;if(f)return f;let l=await pX4(i,m4t);if(l)return l}let t=await eX4(i);if(t)return oX4(t);return lIi.fetch(i,{server:u})},websocket:{open(i){if(n5u(i.data))D5u.open(i)},message(i,u){if(n5u(i.data))D5u.message(i,u)},close(i){if(n5u(i.data))D5u.close(i)}},development:!1}),fL4=Fsu();if(jw.localMode)Promise.resolve().then(() => (M9(),aTi)).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(() => (V4t(),q4t)),l=jw.baseUrl??`http://localhost:${jw.port}`,c=await f(jw.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(() => (M9(),aTi));u()}catch{}});process.on("SIGTERM",()=>cIi("SIGTERM"));process.on("SIGINT",()=>cIi("SIGINT"));process.on("SIGHUP",()=>cIi("SIGHUP"));process.on("unhandledRejection",(i)=>{console.error("[process] Unhandled rejection:",i)});process.on("uncaughtException",(i)=>{console.error("[process] Uncaught exception:",i),cIi("uncaughtException")})});var y5u={};Ji(y5u,{startServer:()=>$L4,interceptConsoleForTui:()=>EL4});function EL4(){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(`