decocms 3.32.0 → 3.32.1

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 (234) hide show
  1. package/dist/client/assets/{AlertCircle-DAV0VdD_.js → AlertCircle-BMRMM9Of.js} +1 -1
  2. package/dist/client/assets/{ArrowUpRight-DEOKOSBd.js → ArrowUpRight-D1rhk4vJ.js} +1 -1
  3. package/dist/client/assets/{Check-ClIa17j0.js → Check-D7X0n21y.js} +1 -1
  4. package/dist/client/assets/{CheckCircle-B7SCOPQ0.js → CheckCircle-DugnqAjs.js} +1 -1
  5. package/dist/client/assets/{ChevronDown-DcOlk72I.js → ChevronDown-DbgyP6s5.js} +1 -1
  6. package/dist/client/assets/{ChevronLeft-CxqwkoN-.js → ChevronLeft-CN7jzCyI.js} +1 -1
  7. package/dist/client/assets/{ChevronRight-DFG09LEe.js → ChevronRight-BgxV5Zsj.js} +1 -1
  8. package/dist/client/assets/{ChevronUp-BUzePKUo.js → ChevronUp-Vx_V_3tY.js} +1 -1
  9. package/dist/client/assets/{Container-Dl6JrGmY.js → Container-DcWd7oVT.js} +1 -1
  10. package/dist/client/assets/{DotsVertical-bJa4a1zt.js → DotsVertical-L6VvyDMk.js} +1 -1
  11. package/dist/client/assets/{Eye-pjtF8UNz.js → Eye-DAZ4Z_xU.js} +1 -1
  12. package/dist/client/assets/{FilterLines-BGhu0YVn.js → FilterLines-CbjM_WQZ.js} +1 -1
  13. package/dist/client/assets/{Globe01-8bu4SIYa.js → Globe01-D8IPS_Hp.js} +1 -1
  14. package/dist/client/assets/{HardDrive-CDtaoiCt.js → HardDrive-DJzkBBz-.js} +1 -1
  15. package/dist/client/assets/{Key01-Bk8xH73U.js → Key01-0CFA9xPQ.js} +1 -1
  16. package/dist/client/assets/{LayoutLeft-BiGQffB4.js → LayoutLeft-DqO__YrH.js} +1 -1
  17. package/dist/client/assets/{LinkExternal01-CpFd7tXn.js → LinkExternal01-BqVqaa8i.js} +1 -1
  18. package/dist/client/assets/{Monitor01-B-I27REk.js → Monitor01-BqYD_mLK.js} +1 -1
  19. package/dist/client/assets/{Palette-DK2sVT7m.js → Palette-CtWuFn6H.js} +1 -1
  20. package/dist/client/assets/{Play-BwAcOs4w.js → Play-DXqXeef7.js} +1 -1
  21. package/dist/client/assets/{Plus-BnwG6MJP.js → Plus-BtPEc6gk.js} +1 -1
  22. package/dist/client/assets/{RefreshCcw01-T0T8zVj0.js → RefreshCcw01-BaGs35aJ.js} +1 -1
  23. package/dist/client/assets/{SearchMd-DuTVINbp.js → SearchMd-DGaCDa7Q.js} +1 -1
  24. package/dist/client/assets/{Settings02-BQbLvp5G.js → Settings02-BzPq5jNB.js} +1 -1
  25. package/dist/client/assets/{Shield01-ClirY5c-.js → Shield01-8Eq5HnwH.js} +1 -1
  26. package/dist/client/assets/{Star01-Cf3cR-_x.js → Star01-CK4YkiaA.js} +1 -1
  27. package/dist/client/assets/{Stars01-D2sTkx04.js → Stars01-_kwwND89.js} +1 -1
  28. package/dist/client/assets/{Stars02-D3fTbcnU.js → Stars02-DkMhs_DH.js} +1 -1
  29. package/dist/client/assets/{Sun-CvyvBO1g.js → Sun-XGeXfdnk.js} +1 -1
  30. package/dist/client/assets/{SwitchHorizontal01-Dwx0lgMF.js → SwitchHorizontal01-Bc-9JGw3.js} +1 -1
  31. package/dist/client/assets/{Tool01-DyFrjTUh.js → Tool01-awfEgAl4.js} +1 -1
  32. package/dist/client/assets/{Trash01-BQ1nC-zv.js → Trash01-7H5pR-ue.js} +1 -1
  33. package/dist/client/assets/{Upload01-tQiDFvpO.js → Upload01-u2lLtBTf.js} +1 -1
  34. package/dist/client/assets/{User01-CFJi0zLk.js → User01-n0UKErcd.js} +1 -1
  35. package/dist/client/assets/{Users01-CCPx6uaK.js → Users01-TnKKZUMY.js} +1 -1
  36. package/dist/client/assets/{Users03-CYOSLpev.js → Users03-Bha9x11Z.js} +1 -1
  37. package/dist/client/assets/{X-O_18GBbz.js → X-LRuL5TSR.js} +1 -1
  38. package/dist/client/assets/{XCircle-COx0scnd.js → XCircle-D2acvb8x.js} +1 -1
  39. package/dist/client/assets/{XClose-BuvY_ty6.js → XClose-D37E-J3I.js} +1 -1
  40. package/dist/client/assets/{Zap-Bu7nPvMM.js → Zap-BQQq558i.js} +1 -1
  41. package/dist/client/assets/{ZapSquare-Cs3vJ5qy.js → ZapSquare-B-y8JdA_.js} +1 -1
  42. package/dist/client/assets/{ZoomOut-D3dpdTm8.js → ZoomOut-CHPCGbF-.js} +1 -1
  43. package/dist/client/assets/{access-gate-BPUPgBJG.js → access-gate-CTOQUMSN.js} +1 -1
  44. package/dist/client/assets/{accordion-Unl3HPSh.js → accordion-DairCalT.js} +1 -1
  45. package/dist/client/assets/{add-section-modal-C-P9HKvD.js → add-section-modal-Bj6xOZOX.js} +1 -1
  46. package/dist/client/assets/{agent-capabilities-DZXe8nda.js → agent-capabilities-TMcRKlOg.js} +1 -1
  47. package/dist/client/assets/{agent-icon-PPKWRb0x.js → agent-icon-CDN8OrKH.js} +1 -1
  48. package/dist/client/assets/{agent-icons-D5cvN_16.js → agent-icons-CtK_Iv7f.js} +1 -1
  49. package/dist/client/assets/{agents-list-DB8ULALp.js → agents-list-CuSoDuan.js} +1 -1
  50. package/dist/client/assets/{ai-providers-L0fWNbk-.js → ai-providers-CmRzHEQQ.js} +1 -1
  51. package/dist/client/assets/{alert-DwB_hex1.js → alert-DdRz6LGD.js} +1 -1
  52. package/dist/client/assets/{alert-dialog-B62p6NY3.js → alert-dialog-Dgveph4i.js} +1 -1
  53. package/dist/client/assets/app-editor-CKqydr-P.js +1 -0
  54. package/dist/client/assets/{auth-catchall-y9d1WTIF.js → auth-catchall-TJf-LHyE.js} +1 -1
  55. package/dist/client/assets/{auth-split-layout-D_HnFIOe.js → auth-split-layout-BToXtt2p.js} +1 -1
  56. package/dist/client/assets/{automation-list-row-Bsy7udbR.js → automation-list-row-CC8g48ti.js} +1 -1
  57. package/dist/client/assets/{automation-runs-DAMuVRpz.js → automation-runs-CwJtWDeO.js} +1 -1
  58. package/dist/client/assets/{automations-BwICAkNT.js → automations-BNVbMStL.js} +1 -1
  59. package/dist/client/assets/{avatar-KrgvwmIy.js → avatar-2hwUeQkk.js} +1 -1
  60. package/dist/client/assets/{badge-IOoDOD2d.js → badge-IzPL2seo.js} +1 -1
  61. package/dist/client/assets/{brand-context-D1c50aQU.js → brand-context-D3ZVj1t-.js} +1 -1
  62. package/dist/client/assets/{buckets-DpI3rsCJ.js → buckets-4j49Q6fw.js} +1 -1
  63. package/dist/client/assets/{calendar-ViRa_cLY.js → calendar-dl9QbY02.js} +1 -1
  64. package/dist/client/assets/{capability-load-error-COBJ9SIa.js → capability-load-error-DXpJLxxo.js} +1 -1
  65. package/dist/client/assets/{card-wWKMvRKZ.js → card-CJ-Wtw5m.js} +1 -1
  66. package/dist/client/assets/{chat-context-BB-zuuiO.js → chat-context-CcYmIhQM.js} +1 -1
  67. package/dist/client/assets/{checkbox-B-wIlb8X.js → checkbox-HnkCiYex.js} +1 -1
  68. package/dist/client/assets/{cli-auth-success-DjoLZu-H.js → cli-auth-success-cefsMlOY.js} +1 -1
  69. package/dist/client/assets/{collection-detail-ricjB52-.js → collection-detail-De5-4CBJ.js} +1 -1
  70. package/dist/client/assets/{collection-display-button-DfsK9Bs8.js → collection-display-button-DFBb1KNi.js} +1 -1
  71. package/dist/client/assets/{collection-search-Dr2f5A66.js → collection-search-Cf6W9Vwx.js} +1 -1
  72. package/dist/client/assets/{collection-table-wrapper-C8dEwS2E.js → collection-table-wrapper-ByzXZcs4.js} +1 -1
  73. package/dist/client/assets/{collection-tabs-MLl5cDDp.js → collection-tabs-CIEVYV7i.js} +1 -1
  74. package/dist/client/assets/{collections-BPfUwJ0B.js → collections-DZwIyq_n.js} +1 -1
  75. package/dist/client/assets/{command-DER0zJyP.js → command-bnwdvmsw.js} +1 -1
  76. package/dist/client/assets/{connect-desktop-dialog-CghGsZ-I.js → connect-desktop-dialog-ADcYlmh0.js} +1 -1
  77. package/dist/client/assets/{connection-card-BnPIzRCc.js → connection-card-DQ-Mj2rx.js} +1 -1
  78. package/dist/client/assets/{connection-detail-DkeCmXDv.js → connection-detail-CI7k8qgv.js} +1 -1
  79. package/dist/client/assets/{connection-form-helpers-BIpr_H-z.js → connection-form-helpers-BQASer1A.js} +1 -1
  80. package/dist/client/assets/{connections-BtNF9VJm.js → connections-Cjg5jZEG.js} +1 -1
  81. package/dist/client/assets/decopilot-sse-pool-CV1gULLm.js +1 -0
  82. package/dist/client/assets/{dialog-DzRPb7hw.js → dialog-CRft4Qpz.js} +1 -1
  83. package/dist/client/assets/{domain-settings-BLSSHvf3.js → domain-settings-pywVusbZ.js} +1 -1
  84. package/dist/client/assets/{drawer-BkBq4o2v.js → drawer-DePB0mtT.js} +1 -1
  85. package/dist/client/assets/{dropdown-menu-Gz8gJsHK.js → dropdown-menu-SYu253bI.js} +1 -1
  86. package/dist/client/assets/{dynamic-plugin-layout-DXhvrZf3.js → dynamic-plugin-layout-CB2Eu7LH.js} +1 -1
  87. package/dist/client/assets/{empty-state-D0W0P9GD.js → empty-state-C9rh517n.js} +1 -1
  88. package/dist/client/assets/{empty-state-RPIUAaRd.js → empty-state-DSa2jevG.js} +1 -1
  89. package/dist/client/assets/{extract-connection-data-DDbQkulT.js → extract-connection-data-gdjZ2_-Y.js} +1 -1
  90. package/dist/client/assets/{features-CZ_ObMrU.js → features-BmcLa_bq.js} +1 -1
  91. package/dist/client/assets/{file-explorer-wWNUqDJX.js → file-explorer-bwVDDo7n.js} +1 -1
  92. package/dist/client/assets/{file-type-icon-DInQXRMd.js → file-type-icon-p2TVnRG4.js} +1 -1
  93. package/dist/client/assets/{files-BdAyXmXe.js → files-33H6BrtM.js} +1 -1
  94. package/dist/client/assets/{form-B7soB8jC.js → form-Bb9nd0SU.js} +1 -1
  95. package/dist/client/assets/{general-BRAACYyp.js → general-5Ug0lMXl.js} +1 -1
  96. package/dist/client/assets/{generate-id-CLrPTxed.js → generate-id-3xkkP_Uz.js} +1 -1
  97. package/dist/client/assets/{github-repo-picker-EEGLQxwe.js → github-repo-picker-CERtxkwf.js} +1 -1
  98. package/dist/client/assets/{header-tab-button-CXc-7W-y.js → header-tab-button-fTzAGB_m.js} +1 -1
  99. package/dist/client/assets/{hover-card-C_jcdWqK.js → hover-card-8ChjPagn.js} +1 -1
  100. package/dist/client/assets/{image-field-CELR1Q7c.js → image-field-CGh_sDQu.js} +1 -1
  101. package/dist/client/assets/{index-BtcINkTm.js → index-BJJk37MJ.js} +3 -3
  102. package/dist/client/assets/{index-BHkjFI68.js → index-BiqRlKBW.js} +1 -1
  103. package/dist/client/assets/{index-BV4MVxYw.js → index-BlFjvdIt.js} +1 -1
  104. package/dist/client/assets/{index-DQxsgmSZ.js → index-Bt1cGJ24.js} +1 -1
  105. package/dist/client/assets/{index-BQsP7Vxx.js → index-CVl_8bz2.js} +1 -1
  106. package/dist/client/assets/{index-WZtuW1yT.js → index-CkC3yuA8.js} +1 -1
  107. package/dist/client/assets/{index-BRYHW7O-.js → index-D-wvXAdD.js} +1 -1
  108. package/dist/client/assets/{index-DzaeL4V_.js → index-D2t-WYVL.js} +1 -1
  109. package/dist/client/assets/{index-F3-A2fnf.js → index-D81SvTVz.js} +1 -1
  110. package/dist/client/assets/{index-DM_BD3PV.js → index-DT1emZ4r.js} +1 -1
  111. package/dist/client/assets/{index-Bwm3y5gI.js → index-DXKjiK1B.js} +1 -1
  112. package/dist/client/assets/{index-C9Bg4j43.js → index-DZ0_AjRE.js} +4 -4
  113. package/dist/client/assets/{index-Bt1WgamZ.js → index-DibetQ-O.js} +1 -1
  114. package/dist/client/assets/{index-vXImmMbm.js → index-RZL9nDiK.js} +1 -1
  115. package/dist/client/assets/{index-BpAwVigu.js → index-o22Q90rJ.js} +1 -1
  116. package/dist/client/assets/{index-redirect-7WJuoWt3.js → index-redirect-B5xzrH40.js} +1 -1
  117. package/dist/client/assets/{input-BmQ7mzb-.js → input-Ck8867JG.js} +1 -1
  118. package/dist/client/assets/{integration-icon-CLYC_fiQ.js → integration-icon-CspdpA8W.js} +1 -1
  119. package/dist/client/assets/{label-BOhFc9vG.js → label-DiV2svRM.js} +1 -1
  120. package/dist/client/assets/{layout-UN6X-0n8.js → layout-DgVOc86U.js} +1 -1
  121. package/dist/client/assets/{login-CLQY1RTP.js → login-CVXK4wjO.js} +1 -1
  122. package/dist/client/assets/{members-Dr3iJB0d.js → members-AjIYwl2o.js} +1 -1
  123. package/dist/client/assets/{monaco-editor-BfV-qp-L.js → monaco-editor-Zd5fEH-Q.js} +1 -1
  124. package/dist/client/assets/{monitoring-stats-row-zdevYKWj.js → monitoring-stats-row-DHFjn6cR.js} +1 -1
  125. package/dist/client/assets/{oauth-callback-BzfZ9IBz.js → oauth-callback-BNn5z_Ra.js} +1 -1
  126. package/dist/client/assets/{oauth-callback-ai-provider-D5QydDmU.js → oauth-callback-ai-provider-2_LYidmK.js} +1 -1
  127. package/dist/client/assets/{onboarding-Cv4NHTRO.js → onboarding-tIKtE6Dy.js} +1 -1
  128. package/dist/client/assets/{org-install-DOs2P6vc.js → org-install-CG23dkmR.js} +1 -1
  129. package/dist/client/assets/{org-layout-ClaaaTH8.js → org-layout-yFSB71a7.js} +1 -1
  130. package/dist/client/assets/{org-plugin-layout-89k6jNUJ.js → org-plugin-layout-mpJBTwlR.js} +1 -1
  131. package/dist/client/assets/{page-seo-form-BHhmKIKz.js → page-seo-form-BFNxZY06.js} +1 -1
  132. package/dist/client/assets/page-seo-sheet-DhFxcF6e.js +1 -0
  133. package/dist/client/assets/{pair-BjemMx0o.js → pair-y22IfMRP.js} +1 -1
  134. package/dist/client/assets/{plugin-empty-state-Cw8xH80Y.js → plugin-empty-state-YcwW77nx.js} +1 -1
  135. package/dist/client/assets/{plugin-header-BwRG2vvr.js → plugin-header-onkp6IGn.js} +1 -1
  136. package/dist/client/assets/{plugin-layout-Md1GF8Ot.js → plugin-layout-BYR4AYgC.js} +1 -1
  137. package/dist/client/assets/{popover-BH5G0jiV.js → popover-jqEM_4CR.js} +1 -1
  138. package/dist/client/assets/{post-editor-B9MuRoYe.js → post-editor-Crj1Cee2.js} +1 -1
  139. package/dist/client/assets/{primitives-CYWK7LII.js → primitives-DQ26JyQ_.js} +1 -1
  140. package/dist/client/assets/{profile-Bcgn0loZ.js → profile-HQlPcfD2.js} +1 -1
  141. package/dist/client/assets/project-app-view-Bqezhf-c.js +1 -0
  142. package/dist/client/assets/record-editor-BSW99GQJ.js +1 -0
  143. package/dist/client/assets/registry-Cwgcjdxf.js +2 -0
  144. package/dist/client/assets/{registry-layout-BBFU9boO.js → registry-layout-DbpU9BVI.js} +1 -1
  145. package/dist/client/assets/{require-capability-D3V29zD7.js → require-capability-BImFW8fd.js} +1 -1
  146. package/dist/client/assets/{required-auth-layout-ItD57512.js → required-auth-layout-1xUkY6hF.js} +1 -1
  147. package/dist/client/assets/{reset-password-Da1xAr72.js → reset-password-C5Nry27c.js} +1 -1
  148. package/dist/client/assets/{resizable-DCnylz56.js → resizable-Bgwywrus.js} +1 -1
  149. package/dist/client/assets/{roles-CpXFgPqN.js → roles-DXt91lBm.js} +1 -1
  150. package/dist/client/assets/save-referenced-block-DTRtz8DG.js +1 -0
  151. package/dist/client/assets/{save-status-CjFc8dcc.js → save-status-QNiCswAT.js} +1 -1
  152. package/dist/client/assets/{schema-form-nyJ0R2w6.js → schema-form-KsZwygG6.js} +1 -1
  153. package/dist/client/assets/{scroll-area-m4NsTPSx.js → scroll-area-DkrkbqlV.js} +1 -1
  154. package/dist/client/assets/{search-input-CXhVJuuP.js → search-input-Cr-6UBlv.js} +1 -1
  155. package/dist/client/assets/{secrets-DTjefpww.js → secrets-D5v1-VqW.js} +1 -1
  156. package/dist/client/assets/{sections-editor-CYh5bidG.js → sections-editor-B77jpT3p.js} +1 -1
  157. package/dist/client/assets/{select-Dx5F3uHo.js → select-c0zpcqEp.js} +1 -1
  158. package/dist/client/assets/{select-model-BEmU7OgJ.js → select-model-D7gmYC22.js} +1 -1
  159. package/dist/client/assets/{seo-editor-BG_rzCv2.js → seo-editor-BvMPEbdC.js} +1 -1
  160. package/dist/client/assets/{settings-layout-CKLJSJQG.js → settings-layout-CHLBHO6C.js} +1 -1
  161. package/dist/client/assets/{settings-section-Dl4MTBRK.js → settings-section-B7Mo1f4j.js} +1 -1
  162. package/dist/client/assets/{sheet-WX1SRekV.js → sheet-ZTCxwyMj.js} +1 -1
  163. package/dist/client/assets/{shell-controls-z4iBAyRQ.js → shell-controls-9OxcV3PZ.js} +1 -1
  164. package/dist/client/assets/{shell-layout-CAxH797a.js → shell-layout-Nze3E806.js} +1 -1
  165. package/dist/client/assets/{shell-route-loading-xQM5_J5V.js → shell-route-loading-CS9snOCT.js} +1 -1
  166. package/dist/client/assets/{sidebar-D3j0Ekh6.js → sidebar-Cm1wW_mH.js} +1 -1
  167. package/dist/client/assets/{skeleton-DOxdtDYk.js → skeleton-Dj7Qn9LG.js} +1 -1
  168. package/dist/client/assets/{sortable.esm-DeoIpllX.js → sortable.esm-CZ2axjew.js} +1 -1
  169. package/dist/client/assets/{spinner-DXpgHD1C.js → spinner-CXRl_OJ3.js} +1 -1
  170. package/dist/client/assets/{sso-i6ejpf6z.js → sso-IoEY0Kjf.js} +1 -1
  171. package/dist/client/assets/{store-BZLG7BLu.js → store-B3j1_W8x.js} +1 -1
  172. package/dist/client/assets/store-registry-DlutrwJd.js +2 -0
  173. package/dist/client/assets/{studio-tools-TxENKH8b.js → studio-tools-DU2NWPYc.js} +1 -1
  174. package/dist/client/assets/{switch-C7oZ8aiH.js → switch-yntZ_dyk.js} +1 -1
  175. package/dist/client/assets/{tab-id-CKMT5NAW.js → tab-id-D_bUvnl8.js} +1 -1
  176. package/dist/client/assets/{table-DkrhBQg4.js → table-D6GrpsqT.js} +1 -1
  177. package/dist/client/assets/{tabs-SgyHizjR.js → tabs-CRRqCRjQ.js} +1 -1
  178. package/dist/client/assets/{task-status-CvNvYsGc.js → task-status-CIpMeCoR.js} +1 -1
  179. package/dist/client/assets/{textarea-DsNDFPec.js → textarea-C7UxMF9t.js} +1 -1
  180. package/dist/client/assets/{toggle-group-C4KUfAuk.js → toggle-group-C17qaETs.js} +1 -1
  181. package/dist/client/assets/{toolbar-DzwLvPq6.js → toolbar-BvJ9Zbr3.js} +1 -1
  182. package/dist/client/assets/{tools-list-CcppNN0Y.js → tools-list-DLWH60ny.js} +1 -1
  183. package/dist/client/assets/{tooltip-tzy8U_iQ.js → tooltip-D7_Ez-6e.js} +1 -1
  184. package/dist/client/assets/{types-CsZ3CP5f.js → types-XtvNvPNC.js} +1 -1
  185. package/dist/client/assets/{use-ai-providers-CB9vio0p.js → use-ai-providers-B9oNv-LU.js} +1 -1
  186. package/dist/client/assets/{use-automations-ELFKdIAo.js → use-automations-CQFsE7a7.js} +1 -1
  187. package/dist/client/assets/{use-capability-BjULA9g0.js → use-capability-B5vCeWXJ.js} +1 -1
  188. package/dist/client/assets/{use-clock-tick-B7WF9o4S.js → use-clock-tick-D-R9RZlL.js} +1 -1
  189. package/dist/client/assets/{use-collections-XRQSv1Qe.js → use-collections-BU_AKR8R.js} +1 -1
  190. package/dist/client/assets/{use-connection-DeHXMOiI.js → use-connection-BbzZmvJi.js} +1 -1
  191. package/dist/client/assets/{use-copy-0Tyw7M5N.js → use-copy-CXnE8kd1.js} +1 -1
  192. package/dist/client/assets/{use-create-virtual-mcp-CsvR5Zho.js → use-create-virtual-mcp-CLabPrEl.js} +1 -1
  193. package/dist/client/assets/{use-debounced-autosave-DPer90Fe.js → use-debounced-autosave-RblUZx09.js} +1 -1
  194. package/dist/client/assets/{use-delete-connection-C2WHNeDG.js → use-delete-connection-DLX13u1J.js} +1 -1
  195. package/dist/client/assets/{use-file-configs-Cl8DYiJo.js → use-file-configs-B6_f3E45.js} +1 -1
  196. package/dist/client/assets/{use-infinite-scroll-DNsSee5z.js → use-infinite-scroll-Cey48OlH.js} +1 -1
  197. package/dist/client/assets/{use-list-state-BtSEqURG.js → use-list-state-BA3j5xL4.js} +1 -1
  198. package/dist/client/assets/{use-mcp-client-S74GyiM7.js → use-mcp-client-DaC53iU2.js} +1 -1
  199. package/dist/client/assets/{use-mcp-prompts-Dc8jleBK.js → use-mcp-prompts-C9tTvMyo.js} +1 -1
  200. package/dist/client/assets/{use-mcp-tools-BS1B0wUZ.js → use-mcp-tools-gtxA-nHJ.js} +1 -1
  201. package/dist/client/assets/{use-members-4JnAFwog.js → use-members-CkDFdhpp.js} +1 -1
  202. package/dist/client/assets/{use-navigate-to-agent-CKFe2J_p.js → use-navigate-to-agent-D1cHxOyF.js} +1 -1
  203. package/dist/client/assets/{use-org-auth-client-DY3OKqMz.js → use-org-auth-client-Cd9hG90J.js} +1 -1
  204. package/dist/client/assets/{use-org-sso-BIsSirOq.js → use-org-sso-ClfOZjkP.js} +1 -1
  205. package/dist/client/assets/{use-organization-roles-CfjMxwLC.js → use-organization-roles-yVvyMHrH.js} +1 -1
  206. package/dist/client/assets/{use-organization-settings-DWZNyi7l.js → use-organization-settings-CzT0V6DP.js} +1 -1
  207. package/dist/client/assets/{use-registry-connections-DNx2UuYR.js → use-registry-connections-CMTjJEp_.js} +1 -1
  208. package/dist/client/assets/{use-secrets-nPYkV_vv.js → use-secrets-CG2OXhPv.js} +1 -1
  209. package/dist/client/assets/{use-status-sounds-CK6mW4TS.js → use-status-sounds-B6P9f-8q.js} +1 -1
  210. package/dist/client/assets/{use-view-mode-BJ10aE-1.js → use-view-mode-BeXounKp.js} +1 -1
  211. package/dist/client/assets/{use-virtual-mcp-ynBH8hOp.js → use-virtual-mcp-CHcdqYnp.js} +1 -1
  212. package/dist/client/assets/useInfiniteQuery-jncl06Ky.js +1 -0
  213. package/dist/client/assets/{useRouterState-D4hr3MwK.js → useRouterState-COiDVA6j.js} +1 -1
  214. package/dist/client/assets/useSuspenseInfiniteQuery-CB2LWY0m.js +1 -0
  215. package/dist/client/assets/{user-D2lmEMCa.js → user-BJDEzzRt.js} +1 -1
  216. package/dist/client/assets/{view-mode-toggle-DbLskHlb.js → view-mode-toggle-jr-U0YXb.js} +1 -1
  217. package/dist/client/assets/{watch-sse-pool-WRJiuO-V.js → watch-sse-pool-CEpExKPj.js} +1 -1
  218. package/dist/client/assets/{workflow-B-GcsagV.js → workflow-CiizDCCa.js} +1 -1
  219. package/dist/client/assets/workflow-detail-B2fxuom4.js +1 -0
  220. package/dist/client/index.html +1 -1
  221. package/dist/server/cli.js +2 -2
  222. package/dist/server/server.js +1 -1
  223. package/package.json +1 -1
  224. package/dist/client/assets/app-editor-DhmA0Qg4.js +0 -1
  225. package/dist/client/assets/decopilot-sse-pool-CcgwKmA0.js +0 -1
  226. package/dist/client/assets/page-seo-sheet-DXm8ERlu.js +0 -1
  227. package/dist/client/assets/project-app-view-BYOtDSR_.js +0 -1
  228. package/dist/client/assets/record-editor-DvPGx3aC.js +0 -1
  229. package/dist/client/assets/registry-ro4RyTgi.js +0 -2
  230. package/dist/client/assets/save-referenced-block-H-RQkqHK.js +0 -1
  231. package/dist/client/assets/store-registry-DoLrNAJx.js +0 -2
  232. package/dist/client/assets/useInfiniteQuery-BtPT1URZ.js +0 -1
  233. package/dist/client/assets/useSuspenseInfiniteQuery-DCeuFJSM.js +0 -1
  234. package/dist/client/assets/workflow-detail-BcCiFshN.js +0 -1
@@ -104771,7 +104771,7 @@ ${c.stack}`;f.reject(d)}else f.resolve(_)}});return $.requestSubject=i,this.prot
104771
104771
  `);if(g===-1)return;let h=$.subarray(0,g).toString("utf8"),E=$.subarray(g+4),v=h.split(`\r
104772
104772
  `,1)[0]??"";if(!/^HTTP\/1\.[01] 101(?:\s|$)/.test(v)){a8(i,1011,t.upstreamErrorReason);try{c.end()}catch{}return}d=!0,i.data.upstream=c;let w=uNl((r,O)=>{try{if(r===1)i.send(O.toString("utf8"));else if(r===2)i.send(O);else if(r===8){let{code:y,reason:X}=tNl(O);a8(i,y,X);try{c.end()}catch{}}}catch{}});if(c.removeAllListeners("data"),E.length>0)w(E);c.on("data",(r)=>w(r));for(let r of i.data.pending)try{c.write(Zji(r,!0))}catch{}i.data.pending.length=0})}function iNl(i,t){let u=[`GET ${i} HTTP/1.1`];for(let[l,n]of Object.entries(t))u.push(`${l}: ${n}`);return u.push("",""),u.join(`\r
104773
104773
  `)}function a8(i,t,u){try{if(t!==void 0)i.close(t,u??"");else i.close()}catch{}}function Zji(i,t,u){let l,n;if(typeof i==="string")l=Buffer.from(i,"utf8"),n=1;else if(i instanceof ArrayBuffer)l=Buffer.from(i),n=2;else if(Buffer.isBuffer(i))l=i,n=2;else l=Buffer.from(i),n=2;let f=u??n,c=l.length,$=[];$.push(128|f&15);let d=t?128:0;if(c<126)$.push(d|c);else if(c<65536)$.push(d|126,c>>8&255,c&255);else $.push(d|127,0,0,0,0),$.push(c>>>24&255,c>>>16&255,c>>>8&255,c&255);let _=t?4:0,g=Buffer.allocUnsafe($.length+_+c),h=0;for(let E=0;E<$.length;E++)g[h++]=$[E];if(t){let E=SSt(4);g[h++]=E[0],g[h++]=E[1],g[h++]=E[2],g[h++]=E[3];for(let v=0;v<c;v++)g[h++]=l[v]^E[v&3]}else l.copy(g,h);return g}function tNl(i){if(i.length<2)return{code:1000,reason:""};return{code:i.readUInt16BE(0),reason:i.subarray(2).toString("utf8")}}function uNl(i){let t=Buffer.alloc(0);return(u)=>{t=t.length===0?u:Buffer.concat([t,u]);while(!0){if(t.length<2)return;let l=t[0],n=t[1],f=l&15,c=(n&128)!==0,$=n&127,d=2;if($===126){if(t.length<d+2)return;$=t[d]<<8|t[d+1],d+=2}else if($===127){if(t.length<d+8)return;$=t[d+4]*16777216+(t[d+5]<<16|t[d+6]<<8|t[d+7]),d+=8}let _=null;if(c){if(t.length<d+4)return;_=t.subarray(d,d+4),d+=4}if(t.length<d+$)return;let g=t.subarray(d,d+$);if(_){let h=Buffer.alloc($);for(let E=0;E<$;E++)h[E]=g[E]^_[E&3];g=h}t=t.subarray(d+$),i(f,g)}}}var s9l=256;var HSt=x(()=>{kSt()});function LSt(i){if(typeof i!=="string"||i.length===0)return null;let t=i.lastIndexOf(":");if(i.startsWith("["))return null;let l=(t>=0?i.slice(0,t):i).replace(/\.$/,"").toLowerCase(),n=".localhost";if(!l.endsWith(n))return null;let f=l.slice(0,-n.length);if(f.length===0)return null;if(f.includes("."))return null;return f}async function RSt(i){let t=KSt({maxPendingFrames:i.maxPendingWsFrames??lNl,backlogOverflowReason:"ingress backlog overflow"}),u=Bun.serve({port:i.port,hostname:"127.0.0.1",idleTimeout:0,async fetch(l,n){let f=l.headers.get("host"),c=LSt(f);if(!c)return new Response("not found",{status:404});let $=i.lookupSandboxPort(c);if(!$){if(l.headers.get("upgrade")==="websocket")return new Response("unknown handle",{status:404});return new Response(nNl,{status:503,headers:{"Content-Type":"text/html; charset=utf-8","Cache-Control":"no-store","Retry-After":"1"}})}if(l.headers.get("upgrade")==="websocket"){let h=new URL(l.url);if(!n.upgrade(l,{data:bSt({port:$,pathQuery:`${h.pathname}${h.search}`,protocols:zSt(l.headers)})}))return new Response("ws upgrade failed",{status:400});return}let d=new URL(l.url),_=`http://127.0.0.1:${$}${d.pathname}${d.search}`,g=new Headers(l.headers);return g.set("host",`127.0.0.1:${$}`),fetch(_,{method:l.method,headers:g,body:l.body,redirect:"manual"})},websocket:{open:t.open,message:t.message,close:t.close}});return{port:u.port??0,async stop(){u.stop(!0)}}}var lNl=256,nNl='<!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 local sandbox to come online. This page refreshes automatically.</p></div><script>setTimeout(function(){window.location.reload()},1500)</script></body></html>';var CSt=x(()=>{HSt()});async function Tji(i=gNl){let t=["decopilot-sandbox","body-offload"],[u,l]=await Promise.all([i.detectClaudeCode().catch(()=>!1),i.detectCodex().catch(()=>!1)]);if(u)t.push("claude-code");if(l)t.push("codex");return t}function cNl(i){return fNl.filter((t)=>!i.includes(t))}function $Nl(i,t){let u=t.filter((l)=>!i.includes(l));return i.push(...u),u}function eSt(i,t={}){let u=t.detect??(()=>Tji()),l=setInterval(()=>{if(cNl(i).length===0)return;u().then((n)=>{let f=$Nl(i,n);if(f.length>0)t.onChange?.(f)}).catch(()=>{})},t.intervalMs??60000);return l.unref?.(),()=>clearInterval(l)}async function dNl(){try{let{query:i}=await import("@anthropic-ai/claude-agent-sdk"),t=i({prompt:"",options:{maxTurns:1}}),u=await t.accountInfo();return t.return(void 0),Boolean(u.email)}catch{return!1}}async function _Nl(){try{let i=Bun.spawn(["codex","--version"],{stdout:"ignore",stderr:"ignore"}),t=setTimeout(()=>i.kill(),1e4),u=await i.exited;return clearTimeout(t),u===0}catch{return!1}}var fNl,gNl;var MSt=x(()=>{fNl=["claude-code","codex"];gNl={detectClaudeCode:dNl,detectCodex:_Nl}});import{randomBytes as hNl}from"crypto";import{mkdir as ENl,readFile as vNl,writeFile as wNl}from"fs/promises";import{dirname as xNl,join as rNl}from"path";function DNl(i){return rNl(i,"machine-id")}async function qSt(i){let t=DNl(i);try{let n=(await vNl(t,"utf8")).trim();if(n)return n}catch{}let u=hNl(16).toString("hex");return await ENl(xNl(t),{recursive:!0}),await wNl(t,u),u}var VSt=()=>{};import{randomBytes as ONl}from"crypto";import{mkdir as yNl}from"fs/promises";import{createServer as XNl}from"net";import{join as NNl}from"path";function aSt(i,t){return Error(`sandbox failed to start: ${i}`,{cause:t})}function JNl(i){if(!(i instanceof Error))return!1;return i.name==="TimeoutError"||/timed out|timeout|operation was aborted|aborted/i.test(i.message)}function UNl(i){if(i instanceof Error){let t=i.cause;if(t instanceof Error&&t.message)return t.message;return i.message}return String(i)}function mSt(i){let t=i.maxSandboxes??20,u=new Map,l=i.pickPort??FNl,n=i.fetchImpl??fetch,f=i.resolvePreviewUrl??((E,v)=>`http://127.0.0.1:${v}`),c=(E)=>{try{i.onEvent?.(E)}catch{}},$=async(E)=>{let v=new AbortController,w=setTimeout(()=>v.abort(),1500);try{let r=await n(`${E}/health`,{signal:v.signal});if(!r.ok)console.warn(`[user-desktop] probe ${E}/health \u2192 ${r.status} (treating as dead)`);return r.ok}catch(r){return console.warn(`[user-desktop] probe ${E}/health failed: ${r instanceof Error?r.message:String(r)} (treating as dead)`),!1}finally{clearTimeout(w)}},d=(E)=>{console.warn(`[user-desktop] evicting dead daemon handle=${E.handle} port=${E.port}`);try{E.process.kill("SIGTERM")}catch{}if(u.get(E.handle)===E)u.delete(E.handle),c({handle:E.handle,phase:"evicted"})},_=new Map;function g(){if(u.size<t)return;let E=[...u.values()].filter((w)=>w.activeDispatchCount===0).sort((w,r)=>w.lastUsedAt-r.lastUsedAt);if(E.length===0){console.warn(`[user-desktop] at cap ${u.size}/${t} but every sandbox is pinned (active dispatch) \u2014 exceeding cap temporarily`);return}let v=E[0];console.log(`[user-desktop] evicting LRU victim handle=${v.handle} port=${v.port} (cap ${t} reached, size=${u.size})`);try{v.process.kill("SIGTERM")}catch{}u.delete(v.handle),c({handle:v.handle,phase:"evicted"})}let h=async(E)=>{c({handle:E.handle,phase:"spawning"}),g();let v=NNl(i.dataDir,"sandboxes",E.handle);await yNl(v,{recursive:!0}),console.log(`[user-desktop] ensure handle=${E.handle} repo=${E.repo?.cloneUrl??"(none)"} branch=${E.repo?.branch??"(none)"} runtime=${E.workload?.runtime??"(autodetect)"} pm=${E.workload?.packageManager??"(autodetect)"}`);let w=ONl(24).toString("hex"),[r,O]=await Promise.all([l(),l()]);console.log(`[user-desktop] spawn handle=${E.handle} port=${r} devPort=${O} workdir=${v}`);let y=await Promise.resolve(i.spawnDaemon({workdir:v,handle:E.handle,port:r,daemonToken:w,offloadAllowedHosts:E.offloadAllowedHosts??[],offloadAllowSameHostDev:E.offloadAllowSameHostDev??!1,orgFsConfigJson:E.orgFsConfigJson}));try{try{await i.waitForHealth(r)}catch(J){throw aSt("the sandbox didn't come online in time",J)}console.log(`[user-desktop] healthy handle=${E.handle} port=${r} \u2014 posting config`);try{await i.postConfig(r,O,{repo:E.repo,workload:E.workload,operator:E.operator},w)}catch(J){throw aSt(JNl(J)?"configuration timed out":"the sandbox rejected its configuration",J)}}catch(J){console.error(`[user-desktop] sandbox bring-up failed handle=${E.handle} port=${r} (killing daemon):`,J);try{y.kill("SIGKILL")}catch{}throw c({handle:E.handle,phase:"failed",error:UNl(J)}),J}let X=`http://127.0.0.1:${r}`,N=f(E.handle,r);console.log(`[user-desktop] ready handle=${E.handle} port=${r} sandboxApiUrl=${X} previewUrl=${N}`);let U={handle:E.handle,port:r,process:y,sandboxApiUrl:X,previewUrl:N,lastUsedAt:Date.now(),activeDispatchCount:0,daemonToken:w};if(u.set(E.handle,U),c({handle:E.handle,phase:"ready",port:r,previewUrl:N}),y.exited)y.exited.then(()=>{if(u.get(E.handle)===U)console.warn(`[user-desktop] daemon process exited unexpectedly handle=${E.handle} port=${r} \u2014 removing from cache`),u.delete(E.handle),c({handle:E.handle,phase:"evicted"});else console.log(`[user-desktop] daemon process exited handle=${E.handle} port=${r} (already replaced/removed)`)});return{sandboxApiUrl:X,previewUrl:N,port:r}};return{async ensureSandbox(E){let v=u.get(E.handle);if(v){if(await $(v.sandboxApiUrl))return console.log(`[user-desktop] cache hit handle=${E.handle} port=${v.port} (alive)`),v.lastUsedAt=Date.now(),{sandboxApiUrl:v.sandboxApiUrl,previewUrl:v.previewUrl,port:v.port};console.warn(`[user-desktop] cache stale handle=${E.handle} port=${v.port} \u2014 respawning`),d(v)}let w=_.get(E.handle);if(w)return console.log(`[user-desktop] joining in-flight ensure handle=${E.handle}`),w;let r=h(E).finally(()=>{_.delete(E.handle)});return _.set(E.handle,r),r},proxyPort(E){let v=u.get(E);if(v)v.lastUsedAt=Date.now();return v?.port??null},getDaemonToken(E){return u.get(E)?.daemonToken??null},hasHandle(E){return u.has(E)||_.has(E)},recordHit(E){let v=u.get(E);if(v)v.lastUsedAt=Date.now()},acquireDispatch(E){let v=u.get(E);if(!v)return()=>{};v.activeDispatchCount+=1;let w=!1;return()=>{if(w)return;w=!0;let r=u.get(E);if(r)r.activeDispatchCount=Math.max(0,r.activeDispatchCount-1)}},listSandboxes(){return[...u.values()]},async deleteSandbox(E){let v=u.get(E);if(!v){console.log(`[user-desktop] delete handle=${E} (not found, no-op)`);return}console.log(`[user-desktop] delete handle=${E} port=${v.port}`);try{v.process.kill("SIGTERM")}catch{}u.delete(E),c({handle:E,phase:"deleted"})},async shutdown(){console.log(`[user-desktop] shutdown \u2014 killing ${u.size} sandbox(es)`);for(let E of u.values())try{E.process.kill("SIGTERM")}catch{}u.clear()}}}function FNl(){return new Promise((i,t)=>{let u=XNl();u.unref(),u.on("error",t),u.listen(0,"127.0.0.1",()=>{let l=u.address();if(l&&typeof l==="object"){let n=l.port;u.close(()=>i(n))}else u.close(()=>t(Error("could not allocate port")))})})}var oSt=()=>{};import{randomUUID as ZNl}from"crypto";import{hostname as TNl}from"os";async function sSt(i){let t=TNl()||void 0;i.monitor?.onMachine?.(t??"this machine");let u=vGt(i.dataDir,{outFd:i.logFd,perSandboxLog:i.perSandboxLogs,hotReload:i.hotReload}),l=0,n=mSt({dataDir:i.dataDir,resolvePreviewUrl:(N,U)=>l>0?`http://${N}.localhost:${l}`:`http://127.0.0.1:${U}`,spawnDaemon:async(N)=>{let U={DAEMON_BOOT_ID:ZNl(),APP_ROOT:N.workdir,PROXY_PORT:String(N.port),DAEMON_TOKEN:N.daemonToken,OFFLOAD_ALLOWED_HOSTS:N.offloadAllowedHosts.join(","),...N.offloadAllowSameHostDev?{OFFLOAD_ALLOW_SAME_HOST_DEV:"1"}:{}};if(N.orgFsConfigJson){let Z=await DGt(i.dataDir);if(Z)U.ORGFS_CONFIG=N.orgFsConfigJson,U.ORGFS_RCLONE_PATH=Z}let J=await u({workdir:N.workdir,env:U,daemonPort:N.port});return{port:N.port,kill:(Z)=>J.kill(Z),exited:J.exited.then(()=>{return})}},postConfig:async(N,U,J,Z)=>{let B={port:U};if(J.workload)B.runtime=J.workload.runtime,B.packageManager={name:J.workload.packageManager,...J.workload.packageManagerPath?{path:J.workload.packageManagerPath}:{}};let Q={application:B},P=pg(J.operator??null);if(P)Q.operator=P;if(J.repo)Q.git={repository:{cloneUrl:J.repo.cloneUrl,branch:J.repo.branch},...J.repo.userName&&J.repo.userEmail?{identity:{userName:J.repo.userName,userEmail:J.repo.userEmail}}:{}};await P8(`http://127.0.0.1:${N}`,Z,Q)},waitForHealth:async(N)=>{await _li(`http://127.0.0.1:${N}`)},maxSandboxes:20,onEvent:i.monitor?.onEvent}),f=await RSt({port:i.port,lookupSandboxPort:(N)=>n.proxyPort(N)});l=f.port,console.log(`Local ingress listening on http://127.0.0.1:${f.port} (use http://<handle>.localhost:${f.port}/)`),i.monitor?.onIngress?.(f.port);let c=yGt({provider:n}),$=async()=>{let N=await kx({dataDir:i.dataDir,target:i.clusterBaseUrl});if(!N)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 N.accessToken};console.log(`[link-daemon] transport=pull cluster=${i.clusterBaseUrl}`);let d=await qSt(i.dataDir),_=process.env.npm_package_version??"0.0.0",g=await Tji(),h=eSt(g,{onChange:(N)=>{console.log(`[link-daemon] capabilities detected: +${N.join(",")} (now: ${g.join(",")})`)}}),E=Jji({path:`${i.dataDir}/link/outbox.sqlite`}),v=()=>{},w=await PSt({clusterBaseUrl:i.clusterBaseUrl,getAccessToken:$,provider:n,outbox:E,controlHandler:c,capabilities:g,machineId:d,cliVersion:_,previewPort:f.port,onConnected:()=>{i.monitor?.onCluster?.("linked"),console.log(`Linked to ${i.clusterBaseUrl} (pull transport)`)},onShutdown:()=>v()}),r,O=new Promise((N)=>{r=N}),y=!1,X=async()=>{if(y)return;y=!0,console.log(`
104774
- Shutting down\u2026`),h();try{await w.close()}catch{}try{await f.stop()}catch{}try{await n.shutdown()}catch{}try{E.close()}catch{}r(0)};return process.on("SIGINT",()=>void X()),process.on("SIGTERM",()=>void X()),v=()=>{console.log("Disconnect requested from the Studio web UI \u2014 shutting down. Run `bunx decocms link` to reconnect."),X()},w.closed.then(()=>{if(i.monitor?.onCluster?.("closed"),!y)console.error("Cluster connection closed permanently; exiting."),X()}),{stopped:O,stop:X}}var pSt=x(()=>{XWi();eH();wGt();OGt();XGt();GSt();Uji();CSt();MSt();VSt();CH();oSt()});function Iji(i){return i.map((t)=>typeof t==="string"?t:String(t)).join(" ")}var N0i;var Qji=x(()=>{N0i={name:"decocms",version:"3.32.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:e2e":"playwright test","test:e2e:ui":"playwright test --ui","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.2.141","@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.80","@ai-sdk/google":"^3.0.80","@ai-sdk/openai":"^3.0.65","@anthropic-ai/sdk":"^0.96.0","@aws-sdk/client-s3":"^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.17.6","@dnd-kit/core":"^6.3.1","@dnd-kit/sortable":"^10.0.0","@dnd-kit/utilities":"^3.2.2","@inkjs/ui":"^2.0.0","@modelcontextprotocol/ext-apps":"^1.7.1","@openrouter/ai-sdk-provider":"^2.9.0","@opentelemetry/core":"^2.6.0","@tanstack/react-virtual":"3.13.24","@xterm/addon-fit":"^0.11.0","@xterm/xterm":"^6.0.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12",nats:"^2.29.3","node-pty":"^1.0.0","posthog-js":"^1.371.1","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@ai-sdk/react":"^3.0.193","@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:*","@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","@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/core":"^6.1.2","@rjsf/shadcn":"^6.1.2","@rjsf/utils":"^6.1.2","@rjsf/validator-ajv8":"^6.1.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-mention":"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/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.191","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","mesh-plugin-workflows":"workspace:*",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",zustand:"^5.0.9"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","mesh","tools"],license:"MIT",publishConfig:{access:"public"}}});var rL={};Pi(rL,{printBanner:()=>BNl,bannerLines:()=>izt,BANNER_LINES:()=>J0i,BANNER_GRADIENT:()=>U0i});function QNl(i){let t=Number.parseInt(i.slice(1),16);return[t>>16&255,t>>8&255,t&255]}function izt(i){let t=J0i.map((u,l)=>{let[n,f,c]=QNl(U0i[l]);return`\x1B[38;2;${n};${f};${c}m${u}\x1B[39m`});if(i!==void 0)t.push(`\x1B[2m v${i}\x1B[22m`);return t}function BNl(i){console.log("");for(let t of izt(i))console.log(t);console.log("")}var J0i,U0i;var jA=x(()=>{J0i=[" \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 "],U0i=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"]});import{Box as YNl,Text as tzt}from"ink";import{jsx as PNl,jsxs as uzt}from"react/jsx-runtime";function F0i({version:i}){return uzt(YNl,{flexDirection:"column",marginTop:1,children:[J0i.map((t,u)=>PNl(tzt,{color:U0i[u],children:t},u)),uzt(tzt,{dimColor:!0,children:[" v",i]})]})}var Bji=x(()=>{jA()});var nzt={};Pi(nzt,{subscribeLinkState:()=>Gji,setMachine:()=>jNl,setLogPath:()=>SNl,setIngress:()=>ANl,setDaemonError:()=>kNl,setClusterUrl:()=>WNl,setCluster:()=>GNl,pushSandboxEvent:()=>zNl,getLinkState:()=>Pji,applySandboxEvent:()=>lzt});function lzt(i,t){let u=new Map(i);if(t.phase==="evicted"||t.phase==="deleted")return u.delete(t.handle),u;let l=u.get(t.handle);return u.set(t.handle,{handle:t.handle,port:t.port??l?.port??null,previewUrl:t.previewUrl??l?.previewUrl??null,status:t.phase,error:t.phase==="failed"?t.error??"failed":null}),u}function m8(){for(let i of Yji)i()}function Pji(){return i$}function Gji(i){return Yji.add(i),()=>Yji.delete(i)}function GNl(i){i$={...i$,cluster:i},m8()}function WNl(i){i$={...i$,clusterUrl:i},m8()}function ANl(i,t){i$={...i$,ingressPort:i,ingressUrl:t},m8()}function jNl(i){i$={...i$,machine:i},m8()}function kNl(i){i$={...i$,daemonError:i},m8()}function SNl(i){i$={...i$,logPath:i},m8()}function zNl(i){i$={...i$,sandboxes:lzt(i$.sandboxes,i)},m8()}var i$,Yji;var Wji=x(()=>{i$={cluster:"connecting",clusterUrl:null,ingressUrl:null,ingressPort:null,machine:null,cap:20,sandboxes:new Map,daemonError:null,logPath:null},Yji=new Set});var fzt={};Pi(fzt,{LinkApp:()=>HNl});import{Box as t$,Text as u$}from"ink";import{useSyncExternalStore as bNl}from"react";import{jsx as $f,jsxs as LE}from"react/jsx-runtime";function KNl(i){if(i.status==="ready")return{color:"green",text:"\u25CF Live"};if(i.status==="spawning")return{color:"yellow",text:"\u25CC Starting\u2026"};return{color:"red",text:`\u2717 Error: ${i.error??""}`}}function HNl(){let i=bNl(Gji,Pji),t=[...i.sandboxes.values()].sort((u,l)=>u.handle.localeCompare(l.handle));return LE(t$,{flexDirection:"column",children:[$f(F0i,{version:N0i.version}),$f(t$,{marginBottom:1,children:$f(u$,{dimColor:!0,children:"\u2500".repeat(80)})}),$f(t$,{children:i.cluster==="linked"?LE(u$,{color:"green",children:["\u2713 Connected to ",i.clusterUrl??"deco"]}):i.cluster==="connecting"?LE(u$,{color:"yellow",children:["\u25CC Connecting to ",i.clusterUrl??"deco","\u2026"]}):LE(u$,{color:"red",children:["\u2717 Disconnected from ",i.clusterUrl??"deco"]})}),$f(t$,{children:i.ingressUrl?LE(u$,{color:"green",children:["\u2713 Serving at ",i.ingressUrl]}):$f(u$,{dimColor:!0,children:"\u25CC Starting local server\u2026"})}),$f(t$,{marginBottom:1,children:$f(u$,{dimColor:!0,children:`${"Computer".padEnd(16)}${i.machine??"this computer"} \xB7 ${t.length} of ${i.cap} previews`})}),t.length===0?$f(u$,{dimColor:!0,children:"No previews running yet."}):LE(t$,{flexDirection:"column",children:[LE(t$,{children:[$f(t$,{width:Z0i.project,flexShrink:0,marginRight:1,children:$f(u$,{dimColor:!0,wrap:"truncate-end",children:"PROJECT"})}),$f(t$,{width:Z0i.status,flexShrink:0,marginRight:1,children:$f(u$,{dimColor:!0,wrap:"truncate-end",children:"STATUS"})}),$f(t$,{flexGrow:1,children:$f(u$,{dimColor:!0,wrap:"truncate-end",children:"PREVIEW URL"})})]}),t.map((u)=>{let l=KNl(u);return LE(t$,{children:[$f(t$,{width:Z0i.project,flexShrink:0,marginRight:1,children:$f(u$,{wrap:"truncate-end",children:u.handle})}),$f(t$,{width:Z0i.status,flexShrink:0,marginRight:1,children:$f(u$,{color:l.color,wrap:"truncate-end",children:l.text})}),$f(t$,{flexGrow:1,children:$f(u$,{dimColor:!0,wrap:"truncate-end",children:u.previewUrl??"\u2014"})})]},u.handle)})]}),i.daemonError?$f(t$,{marginTop:1,children:LE(u$,{color:"red",children:["\u26A0 ",i.daemonError]})}):null,i.logPath?$f(t$,{marginTop:1,children:LE(u$,{dimColor:!0,children:["Logs: ",i.logPath]})}):null]})}var Z0i;var czt=x(()=>{Qji();Bji();Wji();Z0i={project:18,status:14}});var dzt={};Pi(dzt,{runLinkCommand:()=>aNl});import{closeSync as LNl,mkdirSync as RNl,openSync as CNl,writeSync as eNl}from"fs";import{homedir as MNl}from"os";import{join as $zt}from"path";function qNl(i,t){let u={log:console.log,warn:console.warn,error:console.error},l=(n)=>{if(t===void 0)return;try{eNl(t,`${Iji(n)}
104774
+ Shutting down\u2026`),h();try{await w.close()}catch{}try{await f.stop()}catch{}try{await n.shutdown()}catch{}try{E.close()}catch{}r(0)};return process.on("SIGINT",()=>void X()),process.on("SIGTERM",()=>void X()),v=()=>{console.log("Disconnect requested from the Studio web UI \u2014 shutting down. Run `bunx decocms link` to reconnect."),X()},w.closed.then(()=>{if(i.monitor?.onCluster?.("closed"),!y)console.error("Cluster connection closed permanently; exiting."),X()}),{stopped:O,stop:X}}var pSt=x(()=>{XWi();eH();wGt();OGt();XGt();GSt();Uji();CSt();MSt();VSt();CH();oSt()});function Iji(i){return i.map((t)=>typeof t==="string"?t:String(t)).join(" ")}var N0i;var Qji=x(()=>{N0i={name:"decocms",version:"3.32.1",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/mesh"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:'bun run migrate && concurrently "bun run dev:client" "bun run dev:server"',"dev:servers":'concurrently "bun run dev:client" "bun run dev:server"',"dev:client":"vite dev","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts","build:client":"bun --bun vite build","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","db:migrate":"bun run ./dist/server/migrate.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts",test:"bun test","test:e2e":"playwright test","test:e2e:ui":"playwright test --ui","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.2.141","@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.80","@ai-sdk/google":"^3.0.80","@ai-sdk/openai":"^3.0.65","@anthropic-ai/sdk":"^0.96.0","@aws-sdk/client-s3":"^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.17.6","@dnd-kit/core":"^6.3.1","@dnd-kit/sortable":"^10.0.0","@dnd-kit/utilities":"^3.2.2","@inkjs/ui":"^2.0.0","@modelcontextprotocol/ext-apps":"^1.7.1","@openrouter/ai-sdk-provider":"^2.9.0","@opentelemetry/core":"^2.6.0","@tanstack/react-virtual":"3.13.24","@xterm/addon-fit":"^0.11.0","@xterm/xterm":"^6.0.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12",nats:"^2.29.3","node-pty":"^1.0.0","posthog-js":"^1.371.1","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@ai-sdk/react":"^3.0.193","@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:*","@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","@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/core":"^6.1.2","@rjsf/shadcn":"^6.1.2","@rjsf/utils":"^6.1.2","@rjsf/validator-ajv8":"^6.1.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-mention":"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/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.191","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","mesh-plugin-workflows":"workspace:*",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",zustand:"^5.0.9"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","mesh","tools"],license:"MIT",publishConfig:{access:"public"}}});var rL={};Pi(rL,{printBanner:()=>BNl,bannerLines:()=>izt,BANNER_LINES:()=>J0i,BANNER_GRADIENT:()=>U0i});function QNl(i){let t=Number.parseInt(i.slice(1),16);return[t>>16&255,t>>8&255,t&255]}function izt(i){let t=J0i.map((u,l)=>{let[n,f,c]=QNl(U0i[l]);return`\x1B[38;2;${n};${f};${c}m${u}\x1B[39m`});if(i!==void 0)t.push(`\x1B[2m v${i}\x1B[22m`);return t}function BNl(i){console.log("");for(let t of izt(i))console.log(t);console.log("")}var J0i,U0i;var jA=x(()=>{J0i=[" \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 "],U0i=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"]});import{Box as YNl,Text as tzt}from"ink";import{jsx as PNl,jsxs as uzt}from"react/jsx-runtime";function F0i({version:i}){return uzt(YNl,{flexDirection:"column",marginTop:1,children:[J0i.map((t,u)=>PNl(tzt,{color:U0i[u],children:t},u)),uzt(tzt,{dimColor:!0,children:[" v",i]})]})}var Bji=x(()=>{jA()});var nzt={};Pi(nzt,{subscribeLinkState:()=>Gji,setMachine:()=>jNl,setLogPath:()=>SNl,setIngress:()=>ANl,setDaemonError:()=>kNl,setClusterUrl:()=>WNl,setCluster:()=>GNl,pushSandboxEvent:()=>zNl,getLinkState:()=>Pji,applySandboxEvent:()=>lzt});function lzt(i,t){let u=new Map(i);if(t.phase==="evicted"||t.phase==="deleted")return u.delete(t.handle),u;let l=u.get(t.handle);return u.set(t.handle,{handle:t.handle,port:t.port??l?.port??null,previewUrl:t.previewUrl??l?.previewUrl??null,status:t.phase,error:t.phase==="failed"?t.error??"failed":null}),u}function m8(){for(let i of Yji)i()}function Pji(){return i$}function Gji(i){return Yji.add(i),()=>Yji.delete(i)}function GNl(i){i$={...i$,cluster:i},m8()}function WNl(i){i$={...i$,clusterUrl:i},m8()}function ANl(i,t){i$={...i$,ingressPort:i,ingressUrl:t},m8()}function jNl(i){i$={...i$,machine:i},m8()}function kNl(i){i$={...i$,daemonError:i},m8()}function SNl(i){i$={...i$,logPath:i},m8()}function zNl(i){i$={...i$,sandboxes:lzt(i$.sandboxes,i)},m8()}var i$,Yji;var Wji=x(()=>{i$={cluster:"connecting",clusterUrl:null,ingressUrl:null,ingressPort:null,machine:null,cap:20,sandboxes:new Map,daemonError:null,logPath:null},Yji=new Set});var fzt={};Pi(fzt,{LinkApp:()=>HNl});import{Box as t$,Text as u$}from"ink";import{useSyncExternalStore as bNl}from"react";import{jsx as $f,jsxs as LE}from"react/jsx-runtime";function KNl(i){if(i.status==="ready")return{color:"green",text:"\u25CF Live"};if(i.status==="spawning")return{color:"yellow",text:"\u25CC Starting\u2026"};return{color:"red",text:`\u2717 Error: ${i.error??""}`}}function HNl(){let i=bNl(Gji,Pji),t=[...i.sandboxes.values()].sort((u,l)=>u.handle.localeCompare(l.handle));return LE(t$,{flexDirection:"column",children:[$f(F0i,{version:N0i.version}),$f(t$,{marginBottom:1,children:$f(u$,{dimColor:!0,children:"\u2500".repeat(80)})}),$f(t$,{children:i.cluster==="linked"?LE(u$,{color:"green",children:["\u2713 Connected to ",i.clusterUrl??"deco"]}):i.cluster==="connecting"?LE(u$,{color:"yellow",children:["\u25CC Connecting to ",i.clusterUrl??"deco","\u2026"]}):LE(u$,{color:"red",children:["\u2717 Disconnected from ",i.clusterUrl??"deco"]})}),$f(t$,{children:i.ingressUrl?LE(u$,{color:"green",children:["\u2713 Serving at ",i.ingressUrl]}):$f(u$,{dimColor:!0,children:"\u25CC Starting local server\u2026"})}),$f(t$,{marginBottom:1,children:$f(u$,{dimColor:!0,children:`${"Computer".padEnd(16)}${i.machine??"this computer"} \xB7 ${t.length} of ${i.cap} previews`})}),t.length===0?$f(u$,{dimColor:!0,children:"No previews running yet."}):LE(t$,{flexDirection:"column",children:[LE(t$,{children:[$f(t$,{width:Z0i.project,flexShrink:0,marginRight:1,children:$f(u$,{dimColor:!0,wrap:"truncate-end",children:"PROJECT"})}),$f(t$,{width:Z0i.status,flexShrink:0,marginRight:1,children:$f(u$,{dimColor:!0,wrap:"truncate-end",children:"STATUS"})}),$f(t$,{flexGrow:1,children:$f(u$,{dimColor:!0,wrap:"truncate-end",children:"PREVIEW URL"})})]}),t.map((u)=>{let l=KNl(u);return LE(t$,{children:[$f(t$,{width:Z0i.project,flexShrink:0,marginRight:1,children:$f(u$,{wrap:"truncate-end",children:u.handle})}),$f(t$,{width:Z0i.status,flexShrink:0,marginRight:1,children:$f(u$,{color:l.color,wrap:"truncate-end",children:l.text})}),$f(t$,{flexGrow:1,children:$f(u$,{dimColor:!0,wrap:"truncate-end",children:u.previewUrl??"\u2014"})})]},u.handle)})]}),i.daemonError?$f(t$,{marginTop:1,children:LE(u$,{color:"red",children:["\u26A0 ",i.daemonError]})}):null,i.logPath?$f(t$,{marginTop:1,children:LE(u$,{dimColor:!0,children:["Logs: ",i.logPath]})}):null]})}var Z0i;var czt=x(()=>{Qji();Bji();Wji();Z0i={project:18,status:14}});var dzt={};Pi(dzt,{runLinkCommand:()=>aNl});import{closeSync as LNl,mkdirSync as RNl,openSync as CNl,writeSync as eNl}from"fs";import{homedir as MNl}from"os";import{join as $zt}from"path";function qNl(i,t){let u={log:console.log,warn:console.warn,error:console.error},l=(n)=>{if(t===void 0)return;try{eNl(t,`${Iji(n)}
104775
104775
  `)}catch{}};return console.log=(...n)=>l(n),console.warn=(...n)=>l(n),console.error=(...n)=>{l(n),i(Iji(n))},()=>{console.log=u.log,console.warn=u.warn,console.error=u.error}}async function VNl(i,t){let u;try{u=await fetch(`${i}/api/links/me`,{headers:{authorization:`Bearer ${t}`},signal:AbortSignal.timeout(1e4)})}catch{return}if(u.status===401||u.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 aNl(i={}){let t=i.port??5174,u=i.dataDir??process.env.DATA_DIR??process.env.DECOCMS_HOME??$zt(MNl(),"deco"),l=i.clusterBaseUrl??process.env.MESH_CLUSTER_URL??"https://studio.decocms.com",n,f;try{let c=await fli({dataDir:u,intent:"Link",target:l});if(process.env.DECOCMS_LINK_MANAGED!=="1")await VNl(l,c.accessToken);let $;if(i.tui){let{render:g}=await import("ink"),{createElement:h}=await import("react"),{LinkApp:E}=await Promise.resolve().then(() => (czt(),fzt)),{pushSandboxEvent:v,setCluster:w,setClusterUrl:r,setDaemonError:O,setIngress:y,setLogPath:X,setMachine:N}=await Promise.resolve().then(() => (Wji(),nzt));RNl(u,{recursive:!0});let U=$zt(u,"link.log");f=CNl(U,"w"),X(U),r(l),w("connecting"),$={onEvent:(J)=>v(J),onIngress:(J)=>y(J,`http://127.0.0.1:${J}`),onCluster:(J)=>w(J),onMachine:(J)=>N(J)},n=qNl(O,f),g(h(E),{patchConsole:!1})}else if(i.banner!==!1){let{printBanner:g}=await Promise.resolve().then(() => (jA(),rL));g(i.version??"0.0.0")}let d=process.env.DECOCMS_LINK_MANAGED!=="1";return await(await sSt({port:t,clusterBaseUrl:l,dataDir:u,session:c,monitor:$,logFd:f,perSandboxLogs:d,hotReload:i.hotReload})).stopped}catch(c){return n?.(),console.error(c instanceof Error?c.message:String(c)),1}finally{if(n?.(),f!==void 0)try{LNl(f)}catch{}}}var _zt=x(()=>{yWi();pSt()});var bji={};Pi(bji,{resolveDevLinkClusterUrl:()=>pNl,populateDevLinkToxiProxy:()=>xzt,isDevLinkToxiProxyEnabled:()=>sNl,ensureDevLinkToxiProxy:()=>nJl,buildDevLinkToxiProxyConfig:()=>vzt,DEV_LINK_TOXIPROXY_SERVICE_NAME:()=>hzt,DEV_LINK_TOXIPROXY_PROXY_NAME:()=>Ezt});function sNl(i=process.env){return i.DECO_DEV_LINK_TOXIPROXY==="1"}function Aji(i,t){if(!Number.isInteger(i)||i<1||i>65535)throw Error(`${t} must be an integer port in 1..65535`);return i}function vzt(i){let t=new URL(i.serverUrl);if(t.protocol!=="http:")throw Error("DECO_DEV_LINK_TOXIPROXY only supports http local Studio URLs");let u=Aji(i.apiPort,"apiPort"),l=Aji(i.listenPort,"listenPort");if(t.port.length===0)throw Error("serverUrl must include an explicit valid port");let n=Aji(Number.parseInt(t.port,10),"upstreamPort"),f=`http://127.0.0.1:${n}`,c=`http://127.0.0.1:${l}`;return{serviceName:hzt,proxyName:Ezt,apiUrl:`http://127.0.0.1:${u}`,listen:`0.0.0.0:${l}`,upstream:`host.docker.internal:${n}`,publicTargetUrl:f,clusterUrl:c,logLine:`[dev-link-toxiproxy] ready: ${c} -> ${f}`}}function pNl(i){return i.toxiproxy?.clusterUrl??i.serverUrl}async function jji(i,t,u){if(i.ok)return;let l=await i.text();throw Error(`ToxiProxy ${t} failed for ${u}: status=${i.status} statusText=${i.statusText} body=${l}`)}function zji(i){if(i instanceof Error)return i.name==="Error"?i.message:`${i.name}: ${i.message}`;return String(i)}function wzt(i){if(!(i instanceof Error))return!1;if(i.name==="TimeoutError")return!0;return wzt(i.cause)}async function kji(i,t,u,l){try{return await i(u,l)}catch(n){throw Error(`ToxiProxy ${t} failed for ${u}: ${zji(n)}`,{cause:n})}}async function xzt(i,t=fetch){let u=`${i.apiUrl}/reset`,l=await kji(t,"reset",u,{method:"POST"});await jji(l,"reset",u);let n=`${i.apiUrl}/populate`,f=await kji(t,"populate",n,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify([{name:i.proxyName,listen:i.listen,upstream:i.upstream,enabled:!0}])});await jji(f,"populate",n)}async function iJl(i,t){let u=`${i.apiUrl}/version`;try{await J3(async()=>{let l=await kji(t,"readiness check",u,{method:"GET",signal:AbortSignal.timeout(oNl)});await jji(l,"readiness check",u)},{maxAttempts:mNl,minTimeout:gzt,maxTimeout:gzt,multiplier:1,jitter:0,isRetriable:(l)=>!wzt(l)})}catch(l){let n=l instanceof F6?l.cause:l;throw Error(`ToxiProxy API did not become ready at ${u}: ${zji(n)}`,{cause:n})}}async function tJl(i){if(i===null)return"";return await new Response(i).text()}async function Sji(i,t={}){let u=["docker",...i].join(" "),l=(()=>{try{return Bun.spawn(["docker",...i],{stdout:"ignore",stderr:"pipe"})}catch($){throw Error(`Docker command failed to start (${u}): ${zji($)}`,{cause:$})}})(),[n,f]=await Promise.all([l.exited,tJl(l.stderr)]);if(n===0||t.ignoreFailure===!0)return;let c=f.trim().length>0?`: ${f.trim()}`:"";throw Error(`Docker command failed (${u}) with exit ${n}${c}`)}async function uJl(i,t){let u=`deco-dev-link-toxiproxy-${i}`;await Sji(["rm","-f",u],{ignoreFailure:!0}),await Sji(["run","--rm","-d","--name",u,"-p",`127.0.0.1:${i}:8474`,"-p",`127.0.0.1:${t}:${t}`,"ghcr.io/shopify/toxiproxy:2.12.0","-host=0.0.0.0"])}async function lJl(i,t){let u=`deco-dev-link-toxiproxy-${i}`;await Sji(["rm","-f",u],{ignoreFailure:!0})}async function nJl(i){let t=vzt(i),u=i.startDaemon??uJl,l=i.stopDaemon??(i.startDaemon===void 0?lJl:void 0);await u(i.apiPort,i.listenPort);let n=i.fetchImpl??fetch;try{await iJl(t,n),await xzt(t,n)}catch(f){if(l!==void 0)try{await l(i.apiPort,i.listenPort)}catch{}throw f}return{config:t,stop:async()=>{if(l!==void 0)await l(i.apiPort,i.listenPort)}}}var hzt="ToxiProxy",Ezt="dev_link_studio",mNl=20,gzt=100,oNl=100;var Kji=x(()=>{H1()});var rzt={};Pi(rzt,{migrateBetterAuth:()=>Hji});import{getMigrations as fJl}from"better-auth/db";import{sso as cJl}from"@better-auth/sso";import{organization as $Jl}from"@decocms/better-auth/plugins";import{admin as dJl,apiKey as _Jl,jwt as gJl,magicLink as hJl,mcp as EJl,openAPI as vJl}from"better-auth/plugins";import{emailOTP as wJl}from"better-auth/plugins/email-otp";async function Hji(i){let u={database:bH(i||Wx()),plugins:[$Jl({dynamicAccessControl:{enabled:!0,enableCustomResources:!0}}),dJl(),_Jl(),gJl(),vJl(),EJl({loginPage:"/login"}),cJl(),hJl({sendMagicLink:async()=>{}}),wJl({sendVerificationOTP:async()=>{}})]},{toBeAdded:l,toBeCreated:n,runMigrations:f}=await fJl(u);if(!l.length&&!n.length)return"up to date";return await f(),`${n.length+l.length} table(s) migrated`}var Lji=x(()=>{k$()});var Rji={};Pi(Rji,{up:()=>xJl,down:()=>rJl});import{sql as RE}from"kysely";async function xJl(i){await i.schema.createTable("connections").addColumn("id","text",(t)=>t.primaryKey()).addColumn("organizationId","text",(t)=>t.notNull().references("organization.id").onDelete("cascade")).addColumn("createdById","text",(t)=>t.notNull().references("user.id").onDelete("cascade")).addColumn("name","text",(t)=>t.notNull()).addColumn("description","text").addColumn("icon","text").addColumn("appName","text").addColumn("appId","text").addColumn("connectionType","text",(t)=>t.notNull()).addColumn("connectionUrl","text",(t)=>t.notNull()).addColumn("connectionToken","text").addColumn("connectionHeaders","text").addColumn("oauthConfig","text").addColumn("metadata","text").addColumn("tools","text").addColumn("bindings","text").addColumn("status","text",(t)=>t.notNull().defaultTo("active")).addColumn("createdAt","text",(t)=>t.notNull().defaultTo(RE`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(t)=>t.notNull().defaultTo(RE`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("api_keys").addColumn("id","text",(t)=>t.primaryKey()).addColumn("userId","text",(t)=>t.notNull().references("user.id").onDelete("cascade")).addColumn("name","text",(t)=>t.notNull()).addColumn("hashedKey","text",(t)=>t.notNull().unique()).addColumn("permissions","text",(t)=>t.notNull()).addColumn("expiresAt","text").addColumn("remaining","integer").addColumn("metadata","text").addColumn("createdAt","text",(t)=>t.notNull().defaultTo(RE`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(t)=>t.notNull().defaultTo(RE`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("audit_logs").addColumn("id","text",(t)=>t.primaryKey()).addColumn("organizationId","text").addColumn("userId","text",(t)=>t.references("user.id").onDelete("set null")).addColumn("connectionId","text",(t)=>t.references("connections.id").onDelete("set null")).addColumn("toolName","text",(t)=>t.notNull()).addColumn("allowed","integer",(t)=>t.notNull()).addColumn("duration","integer").addColumn("timestamp","text",(t)=>t.notNull().defaultTo(RE`CURRENT_TIMESTAMP`)).addColumn("requestMetadata","text").execute(),await i.schema.createTable("oauth_clients").addColumn("id","text",(t)=>t.primaryKey()).addColumn("clientId","text",(t)=>t.notNull().unique()).addColumn("clientSecret","text").addColumn("clientName","text",(t)=>t.notNull()).addColumn("redirectUris","text",(t)=>t.notNull()).addColumn("grantTypes","text",(t)=>t.notNull()).addColumn("scope","text").addColumn("clientUri","text").addColumn("logoUri","text").addColumn("createdAt","text",(t)=>t.notNull().defaultTo(RE`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("oauth_authorization_codes").addColumn("code","text",(t)=>t.primaryKey()).addColumn("clientId","text",(t)=>t.notNull().references("oauth_clients.clientId").onDelete("cascade")).addColumn("userId","text",(t)=>t.notNull().references("user.id").onDelete("cascade")).addColumn("redirectUri","text",(t)=>t.notNull()).addColumn("scope","text").addColumn("codeChallenge","text").addColumn("codeChallengeMethod","text").addColumn("expiresAt","text",(t)=>t.notNull()).addColumn("createdAt","text",(t)=>t.notNull().defaultTo(RE`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("oauth_refresh_tokens").addColumn("token","text",(t)=>t.primaryKey()).addColumn("clientId","text",(t)=>t.notNull().references("oauth_clients.clientId").onDelete("cascade")).addColumn("userId","text",(t)=>t.notNull().references("user.id").onDelete("cascade")).addColumn("scope","text").addColumn("expiresAt","text").addColumn("createdAt","text",(t)=>t.notNull().defaultTo(RE`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("downstream_tokens").addColumn("id","text",(t)=>t.primaryKey()).addColumn("connectionId","text",(t)=>t.notNull().references("connections.id").onDelete("cascade")).addColumn("userId","text",(t)=>t.references("user.id").onDelete("cascade")).addColumn("accessToken","text",(t)=>t.notNull()).addColumn("refreshToken","text").addColumn("scope","text").addColumn("expiresAt","text").addColumn("createdAt","text",(t)=>t.notNull().defaultTo(RE`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(t)=>t.notNull().defaultTo(RE`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 rJl(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 Dzt=()=>{};var Cji={};Pi(Cji,{up:()=>DJl,down:()=>OJl});import{sql as Ozt}from"kysely";async function DJl(i){await i.schema.createTable("organization_settings").addColumn("organizationId","text",(t)=>t.primaryKey().references("organization.id").onDelete("cascade")).addColumn("modelsBindingConnectionId","text",(t)=>t.references("connections.id").onDelete("set null")).addColumn("createdAt","text",(t)=>t.notNull().defaultTo(Ozt`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(t)=>t.notNull().defaultTo(Ozt`CURRENT_TIMESTAMP`)).execute()}async function OJl(i){await i.schema.dropTable("organization_settings").execute()}var yzt=()=>{};var eji={};Pi(eji,{up:()=>yJl,down:()=>XJl});async function yJl(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 XJl(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 Mji={};Pi(Mji,{up:()=>NJl,down:()=>JJl});async function NJl(i){await i.schema.createTable("organization_settings_new").addColumn("organizationId","text",(t)=>t.primaryKey().references("organization.id").onDelete("cascade")).addColumn("createdAt","text",(t)=>t.notNull()).addColumn("updatedAt","text",(t)=>t.notNull()).execute(),await i.insertInto("organization_settings_new").columns(["organizationId","createdAt","updatedAt"]).expression((t)=>t.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 JJl(i){await i.schema.createTable("organization_settings_new").addColumn("organizationId","text",(t)=>t.primaryKey().references("organization.id").onDelete("cascade")).addColumn("modelsBindingConnectionId","text",(t)=>t.references("connections.id").onDelete("set null")).addColumn("createdAt","text",(t)=>t.notNull()).addColumn("updatedAt","text",(t)=>t.notNull()).execute(),await i.insertInto("organization_settings_new").columns(["organizationId","modelsBindingConnectionId","createdAt","updatedAt"]).expression((t)=>t.selectFrom("organization_settings").select(["organizationId",t.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 qji={};Pi(qji,{up:()=>UJl,down:()=>FJl});async function UJl(i){await i.schema.alterTable("connections").addColumn("configuration_state","text").execute(),await i.schema.alterTable("connections").addColumn("configuration_scopes","text").execute()}async function FJl(i){await i.schema.alterTable("connections").dropColumn("configuration_state").execute(),await i.schema.alterTable("connections").dropColumn("configuration_scopes").execute()}var Vji={};Pi(Vji,{up:()=>TJl,down:()=>IJl});import{sql as ZJl}from"kysely";async function TJl(i){await i.schema.alterTable("organization_settings").addColumn("sidebar_items",ZJl`text`).execute()}async function IJl(i){await i.schema.alterTable("organization_settings").dropColumn("sidebar_items").execute()}var Xzt=()=>{};var aji={};Pi(aji,{up:()=>QJl,down:()=>BJl});async function QJl(i){await i.schema.createTable("monitoring_logs").addColumn("id","text",(t)=>t.primaryKey()).addColumn("organization_id","text",(t)=>t.notNull().references("organization.id").onDelete("cascade")).addColumn("connection_id","text",(t)=>t.notNull().references("connections.id").onDelete("cascade")).addColumn("connection_title","text",(t)=>t.notNull()).addColumn("tool_name","text",(t)=>t.notNull()).addColumn("input","text",(t)=>t.notNull()).addColumn("output","text",(t)=>t.notNull()).addColumn("is_error","integer",(t)=>t.notNull()).addColumn("error_message","text").addColumn("duration_ms","integer",(t)=>t.notNull()).addColumn("timestamp","text",(t)=>t.notNull()).addColumn("user_id","text").addColumn("request_id","text",(t)=>t.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 BJl(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 mji={};Pi(mji,{up:()=>YJl,down:()=>PJl});import{sql as DL}from"kysely";async function YJl(i){await i.schema.createTable("events").addColumn("id","text",(t)=>t.primaryKey()).addColumn("organization_id","text",(t)=>t.notNull().references("organization.id").onDelete("cascade")).addColumn("type","text",(t)=>t.notNull()).addColumn("source","text",(t)=>t.notNull()).addColumn("specversion","text",(t)=>t.notNull().defaultTo("1.0")).addColumn("subject","text").addColumn("time","text",(t)=>t.notNull()).addColumn("datacontenttype","text",(t)=>t.notNull().defaultTo("application/json")).addColumn("dataschema","text").addColumn("data","text").addColumn("cron","varchar(255)").addColumn("status","text",(t)=>t.notNull().defaultTo("pending")).addColumn("attempts","integer",(t)=>t.notNull().defaultTo(0)).addColumn("last_error","text").addColumn("next_retry_at","text").addColumn("created_at","text",(t)=>t.notNull().defaultTo(DL`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(t)=>t.notNull().defaultTo(DL`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("event_subscriptions").addColumn("id","text",(t)=>t.primaryKey()).addColumn("organization_id","text",(t)=>t.notNull().references("organization.id").onDelete("cascade")).addColumn("connection_id","text",(t)=>t.notNull().references("connections.id").onDelete("cascade")).addColumn("publisher","text").addColumn("event_type","text",(t)=>t.notNull()).addColumn("filter","text").addColumn("enabled","integer",(t)=>t.notNull().defaultTo(1)).addColumn("created_at","text",(t)=>t.notNull().defaultTo(DL`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(t)=>t.notNull().defaultTo(DL`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("event_deliveries").addColumn("id","text",(t)=>t.primaryKey()).addColumn("event_id","text",(t)=>t.notNull()).addColumn("subscription_id","text",(t)=>t.notNull().references("event_subscriptions.id").onDelete("cascade")).addColumn("status","text",(t)=>t.notNull().defaultTo("pending")).addColumn("attempts","integer",(t)=>t.notNull().defaultTo(0)).addColumn("last_error","text").addColumn("delivered_at","text").addColumn("next_retry_at","text").addColumn("created_at","text",(t)=>t.notNull().defaultTo(DL`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 PJl(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 Nzt=()=>{};var oji={};Pi(oji,{up:()=>WJl,down:()=>AJl});import{sql as GJl}from"kysely";async function WJl(i){await i.schema.dropTable("audit_logs").ifExists().execute()}async function AJl(i){await i.schema.createTable("audit_logs").ifNotExists().addColumn("id","text",(t)=>t.primaryKey()).addColumn("organizationId","text").addColumn("userId","text",(t)=>t.references("user.id").onDelete("set null")).addColumn("connectionId","text",(t)=>t.references("connections.id").onDelete("set null")).addColumn("toolName","text",(t)=>t.notNull()).addColumn("allowed","integer",(t)=>t.notNull()).addColumn("duration","integer").addColumn("timestamp","text",(t)=>t.notNull().defaultTo(GJl`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 Jzt=()=>{};var sji={};Pi(sji,{up:()=>jJl,down:()=>kJl});import{sql as T0i}from"kysely";async function jJl(i){await i.schema.createTable("gateways").addColumn("id","text",(t)=>t.primaryKey()).addColumn("organization_id","text",(t)=>t.notNull().references("organization.id").onDelete("cascade")).addColumn("title","text",(t)=>t.notNull()).addColumn("description","text").addColumn("tool_selection_strategy","text").addColumn("status","text",(t)=>t.notNull().defaultTo("active")).addColumn("is_default","integer",(t)=>t.notNull().defaultTo(0)).addColumn("created_at","text",(t)=>t.notNull().defaultTo(T0i`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(t)=>t.notNull().defaultTo(T0i`CURRENT_TIMESTAMP`)).addColumn("created_by","text",(t)=>t.notNull().references("user.id").onDelete("cascade")).addColumn("updated_by","text").execute(),await i.schema.createTable("gateway_connections").addColumn("id","text",(t)=>t.primaryKey()).addColumn("gateway_id","text",(t)=>t.notNull().references("gateways.id").onDelete("cascade")).addColumn("connection_id","text",(t)=>t.notNull().references("connections.id").onDelete("cascade")).addColumn("selected_tools","text").addColumn("created_at","text",(t)=>t.notNull().defaultTo(T0i`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 T0i`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 kJl(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 Uzt=()=>{};var pji={};Pi(pji,{up:()=>SJl,down:()=>zJl});async function SJl(i){await i.schema.alterTable("gateways").addColumn("icon","text").execute()}async function zJl(i){await i.schema.alterTable("gateways").dropColumn("icon").execute()}var iki={};Pi(iki,{up:()=>bJl,down:()=>KJl});import{sql as I0i}from"kysely";async function bJl(i){await i.schema.alterTable("gateways").addColumn("tool_selection_mode","text",(t)=>t.notNull().defaultTo("inclusion")).execute(),await I0i`
104776
104776
  UPDATE gateways
104777
104777
  SET tool_selection_mode = CASE
@@ -108268,7 +108268,7 @@ Input schema:
108268
108268
  ${h}`:`${g}
108269
108269
 
108270
108270
  This workflow expects structured input. Use COLLECTION_WORKFLOW_GET to inspect the full input schema.`})(),inputSchema:Pf.object({input:Pf.record(Pf.string(),Pf.unknown()).optional().describe("Input data for the workflow. Steps reference these values via @input.field."),virtual_mcp_id:Pf.string().optional().describe(d.virtual_mcp_id?`Virtual MCP ID to use for execution (defaults to "${d.virtual_mcp_id}").`:"Virtual MCP ID that will execute the workflow steps."),start_at_epoch_ms:Pf.number().int().min(0).optional().describe("Unix timestamp (ms) for scheduled execution. Omit to start immediately.")}),outputSchema:Pf.object({execution_id:Pf.string().describe("ID of the created workflow execution.")}),execute:async(h)=>{let{connectionId:E,meshUrl:v,token:w}=Xm(h);if(!E||!v)throw Error(`[${_}] Missing MESH_REQUEST_CONTEXT (connectionId or meshUrl).`);let r=h.context,O=r.virtual_mcp_id??d.virtual_mcp_id,y=d9i.workflowId(E,d.title);return{execution_id:await d9i.createExecution(v,w,{workflow_collection_id:y,virtual_mcp_id:O,input:r.input,start_at_epoch_ms:r.start_at_epoch_ms})}}})}):[]]},aSu=(i)=>{let t=null,u=null,l=null,n=!1,f=()=>{if(!n)console.warn("[runtime] Passing factory functions to tools/prompts/resources is deprecated. Pass createTool()/createPrompt()/createResource() instances directly."),n=!0},c=(v)=>typeof v==="object"&&v!==null&&(("id"in v)||("name"in v)||("uri"in v));async function $(v,w){if(!v)return[];return(await Promise.all(v.flatMap(async(r)=>{if(c(r))return[r];f();let O=await r(w);if(Array.isArray(O))return O;return[O]}))).flat()}let d=async(v)=>{if(t)return t;if(u)return u;return u=(async()=>{try{let w;if(typeof i.tools==="function")f(),w=await i.tools(v);else w=await $(i.tools,v);let r=typeof i.workflows==="function"?await i.workflows(v):i.workflows;w.push(...Ne0({...i,workflows:r}));let O;if(typeof i.prompts==="function")f(),O=await i.prompts(v);else O=await $(i.prompts,v);let y;if(typeof i.resources==="function")f(),y=await i.resources(v);else y=await $(i.resources,v);let X={tools:w,prompts:O,resources:y,workflows:r};return t=X,X}catch(w){throw u=null,w}})(),u},_=(v,w)=>{for(let r of w.tools)v.registerTool(r.id,{_meta:r._meta,title:r.title,description:r.description,annotations:r.annotations,inputSchema:r.inputSchema&&"shape"in r.inputSchema?r.inputSchema:Pf.object({}),outputSchema:r.outputSchema&&typeof r.outputSchema==="object"&&"shape"in r.outputSchema?r.outputSchema:void 0},async(O)=>{let y=Nm(),X=await r.execute({context:O,runtimeContext:y},y);if(X!=null&&typeof X==="object"&&"content"in X&&Array.isArray(X.content)&&X.content.every((N)=>N!=null&&typeof N==="object"&&("type"in N)&&typeof N.type==="string"))return X;return{structuredContent:X,content:[{type:"text",text:JSON.stringify(X)}]}});for(let r of w.prompts)v.registerPrompt(r.name,{title:r.title,description:r.description,argsSchema:r.argsSchema?r.argsSchema:Pf.object({}).shape},async(O)=>{let y=Nm();return await r.execute({args:O,runtimeContext:y},y)});for(let r of w.resources)v.resource(r.name,r.uri,{description:r.description,mimeType:r.mimeType},async(O)=>{let y=Nm(),X=await r.read({uri:O,runtimeContext:y},y),N=X._meta??void 0;if(X.text!==void 0)return{contents:[{uri:X.uri,mimeType:X.mimeType,text:X.text,...N!==void 0?{_meta:N}:{}}]};else if(X.blob!==void 0)return{contents:[{uri:X.uri,mimeType:X.mimeType,blob:X.blob,...N!==void 0?{_meta:N}:{}}]};return{contents:[{uri:X.uri,mimeType:X.mimeType,text:""}]}})},g=async(v)=>{await i.before?.(v);let{instructions:w,...r}=i.serverInfo??{},O=new v2({...r,name:r.name??"@deco/mcp-api",version:r.version??"1.0.0"},{capabilities:{tools:{},prompts:{},resources:{}},jsonSchemaValidator:V1,...w&&{instructions:w}}),y=await d(v);_(O,y);let X="tools/list",N=O.server._requestHandlers,U=N.get(X);if(U)N.set(X,async(J,Z)=>{if(!l)l=await U(J,Z);return l});return{server:O,...y}};return{fetch:async(v,w)=>{let{server:r}=await g(w),O=new Zg;await r.connect(O);let y=()=>{try{O.close?.()}catch{}try{r.close?.()}catch{}};try{let X=await O.handleRequest(v),N=X.headers.get("content-type");if(!(N?.includes("text/event-stream")||N?.includes("application/json-rpc"))||!X.body)return y(),X;let{readable:J,writable:Z}=new TransformStream;return X.body.pipeTo(Z).catch(()=>{}).finally(y),new Response(J,{status:X.status,statusText:X.statusText,headers:X.headers})}catch(X){throw y(),X}},callTool:async({toolCallId:v,toolCallInput:w})=>{let r=ym.getStore();if(!r)throw Error("Missing state, did you forget to call State.bind?");let O=r?.env,{tools:y}=await d(O),N=y.find((J)=>J.id===v)?.execute;if(!N)throw Error(`Tool ${v} not found or does not have an execute function`);let U=Nm();return N({context:w,runtimeContext:U},U)}}};var _9i=x(()=>{xe();q$();DR();$z();DG();Kft();bft();Lft();Rft();Kft();Rft()});import{decodeJwt as mSu}from"jose";var Je0=({env:i,server:t,url:u})=>{i.SELF=new Proxy({},{get:(l,n)=>{if(n==="toJSON")return null;return async(f)=>{return await t.callTool({toolCallId:n,toolCallInput:f})}}}),i.IS_LOCAL=(u?.startsWith("http://localhost")||u?.startsWith("http://127.0.0.1"))??!1},oSu=(i)=>()=>{return{...i??{}}},Ue0=({env:i,server:t,tokenOrContext:u,url:l,authToken:n})=>{let f=i,c=n?n.split(" ")[1]:void 0,$;if(typeof u==="string"){let d=mSu(u),_=d.metadata??{};$={authorization:c,state:d.state??_.state??{},token:u,meshUrl:d.meshUrl??_.meshUrl,connectionId:d.connectionId??_.connectionId,organizationId:d.organizationId??_.organizationId,organizationName:d.organizationName??_.organizationName,organizationSlug:d.organizationSlug??_.organizationSlug,ensureAuthenticated:oSu(d.user??d.sub)}}else if(typeof u==="object"){$=u;let d=mSu(u.token),_=d.metadata??{},g=d.appName;$.authorization??=c,$.callerApp=g,$.connectionId??=d.connectionId??_.connectionId,$.organizationId??=d.organizationId??_.organizationId,$.organizationName??=d.organizationName??_.organizationName,$.organizationSlug??=d.organizationSlug??_.organizationSlug,$.ensureAuthenticated=oSu(d.user??d.sub)}else $={state:{},authorization:c,token:void 0,meshUrl:void 0,connectionId:void 0,ensureAuthenticated:()=>{throw Error("Unauthorized")}};return f.MESH_REQUEST_CONTEXT=$,$.state=QSu($),Je0({env:f,server:t,url:l}),f},Fe0,sSu=(i)=>{let t=aSu(i),u=i.cors??Fe0,l=i.oauth,n=l?kSu(l):null,f=async(c,$,d)=>{let _=new URL(c.url);if(n){if(_.pathname==="/.well-known/oauth-protected-resource"||_.pathname==="/mcp/.well-known/oauth-protected-resource")return n.handleProtectedResourceMetadata(c);if(_.pathname==="/.well-known/oauth-authorization-server")return n.handleAuthorizationServerMetadata(c);if(_.pathname==="/authorize")return n.handleAuthorize(c);if(_.pathname==="/oauth/callback")return n.handleOAuthCallback(c);if(_.pathname==="/token"&&c.method==="POST")return n.handleToken(c);if((_.pathname==="/register"||_.pathname==="/mcp/register")&&c.method==="POST")return n.handleClientRegistration(c)}if(_.pathname==="/mcp"){if(c.method==="GET")return new Response("Method not allowed",{status:405});if(n&&!n.hasAuth(c)){let g=c.clone();try{if((await g.json())?.method!=="tools/list")return n.createUnauthorizedResponse(c)}catch{return n.createUnauthorizedResponse(c)}}return t.fetch(c,$,d)}if(_.pathname.startsWith("/mcp/call-tool")){let g=_.pathname.split("/").pop();if(!g)return new Response("Not found",{status:404});let h=await c.json(),E=await t.callTool({toolCallId:g,toolCallInput:h});return new Response(JSON.stringify(E),{headers:{"Content-Type":"application/json"}})}return i.fetch?.(c,$,d)||new Response("Not found",{status:404})};return{fetch:async(c,$,d)=>{if(new URL(c.url).pathname==="/_healthcheck")return new Response("OK",{status:200});if(u!==!1&&c.method==="OPTIONS")return YSu(c,u??{});let _=Ue0({authToken:c.headers.get("authorization")??null,env:{...process.env,...$},server:t,tokenOrContext:c.headers.get("x-mesh-token")??void 0,url:c.url}),g=await ym.run({req:c,env:_,ctx:d},async()=>await f(c,_,d));if(u!==!1)return PSu(g,c,u??{});return g}}};var pSu=x(()=>{DG();GSu();zft();zft();bft();_9i();_9i();Lft();DG();Om();Fe0={origin:(i)=>{if(i.includes("localhost")||i.includes("127.0.0.1"))return i;return i},credentials:!0,allowMethods:["GET","POST","PUT","DELETE","OPTIONS"],allowHeaders:["Content-Type","Authorization","mcp-protocol-version"]}});import{z as Cft}from"zod";function Ie0(i,t){let u=v3({id:"COLLECTION_REGISTRY_APP_LIST",description:"List public registry items",annotations:{readOnlyHint:!0,idempotentHint:!0},inputSchema:Oz,outputSchema:yz,execute:async({context:$})=>{let d={limit:$.limit,offset:$.offset,cursor:$.cursor,tags:$.tags,categories:$.categories,where:$.where},_=`${t}:${JSON.stringify(d)}`,g=izu.get(_);if(g)return g;let h=await i.listPublic(t,d);return izu.set(_,h),h}}),l=v3({id:"COLLECTION_REGISTRY_APP_GET",description:"Get a public registry item by ID or name",annotations:{readOnlyHint:!0,idempotentHint:!0},inputSchema:Kv,outputSchema:_7,execute:async({context:$})=>{let d=$.id??$.name;if(!d)return{item:null};let _=await i.findByIdOrName(t,d);if(_&&_.is_public)return{item:_};return{item:null}}}),n=v3({id:"COLLECTION_REGISTRY_APP_VERSIONS",description:"Get available versions of a public registry item",annotations:{readOnlyHint:!0,idempotentHint:!0},inputSchema:Kv,outputSchema:Cft.object({versions:Cft.array(_7.shape.item)}),execute:async({context:$})=>{let d=$.id??$.name;if(!d)return{versions:[]};let _=await i.findByIdOrName(t,d);if(_&&_.is_public)return{versions:[_]};return{versions:[]}}}),f=v3({id:"COLLECTION_REGISTRY_APP_SEARCH",description:"Search public registry items returning minimal data (id, title, tags, categories, is_public). Use this instead of LIST when you need to find items efficiently without loading full details.",annotations:{readOnlyHint:!0,idempotentHint:!0},inputSchema:P_i,outputSchema:G_i,execute:async({context:$})=>{return await i.search(t,$,{publicOnly:!0})}}),c=v3({id:"COLLECTION_REGISTRY_APP_FILTERS",description:"Get available tags and categories for public registry items",annotations:{readOnlyHint:!0,idempotentHint:!0},inputSchema:Cft.object({}),outputSchema:Xz,execute:async()=>{return await i.getFilters(t,{publicOnly:!0})}});return[u,f,l,n,c]}function tzu(i){let t=i.db,u=new hS(t);return async(l)=>{let n=l.req.param("orgSlug")??l.req.param("org");if(!n)return l.json({error:"Organization not found"},404);let f=await t.selectFrom("organization").select(["id","slug","name"]).where("slug","=",n).executeTakeFirst();if(!f)return l.json({error:"Organization not found"},404);let c=Ie0(u,f.id),$=sSu({tools:c}),d=new URL(l.req.url),_=l.req.path.indexOf("/registry"),g=_>=0?l.req.path.slice(_+9):"",h=new URL(g||"/",d.origin);d.searchParams.forEach((w,r)=>{h.searchParams.set(r,w)});let E=new Request(h.toString(),{method:l.req.method,headers:l.req.raw.headers,body:l.req.method!=="GET"&&l.req.method!=="HEAD"?l.req.raw.body:void 0}),v={organizationId:f.id,db:t,MESH_REQUEST_CONTEXT:{},MESH_APP_DEPLOYMENT_ID:"public-registry",IS_LOCAL:!1};return await $.fetch(E,v,l)}}var Ze0=3600000,Te0=500,izu;var uzu=x(()=>{pSu();_9i();qqi();Bf();izu=Tb({ttlMs:Ze0,maxSize:Te0,updateRecencyOnGet:!0})});import{sql as Qe0}from"kysely";import{randomUUID as lzu}from"crypto";import{z as Be0}from"zod";async function Pe0(i){let t=new Date().toISOString(),u=lzu(),l=v0.SELF(i.organizationId),n="registry.publish_request.created",f={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:u,organization_id:i.organizationId,type:"registry.publish_request.created",source:l,specversion:"1.0",subject:i.request.id,time:t,datacontenttype:"application/json",dataschema:null,data:JSON.stringify(f),cron:null,status:"pending",attempts:0,last_error:null,next_retry_at:null,created_at:t,updated_at:t}).execute();let c=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","=",l)])).execute();if(c.length>0)await i.db.insertInto("event_deliveries").values(c.map(($)=>({id:lzu(),event_id:u,subscription_id:$.id,status:"pending",attempts:0,last_error:null,delivered_at:null,next_retry_at:null,created_at:t}))).execute();try{await Qe0`SELECT pg_notify('mesh_events', ${u})`.execute(i.db)}catch{}}async function Ge0(i,t){let l=(await i.selectFrom("organization").select(["id"]).where("id","=",t).execute())[0];if(l?.id)return l.id;return(await i.selectFrom("organization").select(["id"]).where("slug","=",t).execute())[0]?.id??null}async function We0(i,t){let u=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","=",t).where("virtual_mcp_plugin_configs.plugin_id","=",N7).execute();for(let l of u){let n=l.settings,f=typeof n==="string"?(()=>{try{return JSON.parse(n)}catch{return{}}})():n??{};if(f.acceptPublishRequests===!0){let c=f.rateLimitWindow==="minute"?"minute":"hour",$=f.rateLimitMax,d=typeof $==="number"&&Number.isFinite($)&&$>=1?Math.floor($):fzu;return{acceptPublishRequests:!0,requireApiToken:f.requireApiToken===!0,rateLimitEnabled:f.rateLimitEnabled===void 0?nzu:f.rateLimitEnabled===!0,rateLimitWindow:c,rateLimitMax:d}}}return{acceptPublishRequests:!1,requireApiToken:!1,rateLimitEnabled:nzu,rateLimitWindow:Ye0,rateLimitMax:fzu}}async function Ae0(i,t,u){let l=u==="minute"?60000:3600000,n=new Date(Date.now()-l).toISOString(),f=await i.selectFrom("private_registry_publish_request").select((c)=>c.fn.countAll().as("count")).where("organization_id","=",t).where("created_at",">=",n).executeTakeFirst();return Number(f?.count??0)}async function je0(i,t,u,l){let n=await i.selectFrom("private_registry_item").select(["id","title"]).where("organization_id","=",t).where((f)=>f.or([f("id","=",u),f("title","=",l)])).executeTakeFirst();return n?{id:String(n.id),title:String(n.title)}:null}function czu(i){let{db:t,db:u}=i,l=new ES(u),n=new vS(u);return async(f)=>{let c=f.req.param("orgRef")??f.req.param("org");if(!c)return f.json({error:"Organization not found"},404);let $=await Ge0(t,c);if(!$)return f.json({error:"Organization not found"},404);let d=await We0(t,$);if(!d.acceptPublishRequests)return f.json({error:"Publish requests are not enabled for this registry."},403);if(d.requireApiToken){let v=f.req.header("Authorization"),w=v?.startsWith("Bearer ")?v.slice(7).trim():null;if(!w)return f.json({error:"API key required. Use Authorization: Bearer <key>"},401);if(!await n.validate($,w))return f.json({error:"Invalid API key"},401)}if(d.rateLimitEnabled){if(await Ae0(u,$,d.rateLimitWindow)>=d.rateLimitMax)return f.json({error:"Too many publish requests. Please try again later.",retryAfterSeconds:d.rateLimitWindow==="minute"?60:3600},429)}let _;try{_=await f.req.json()}catch{return f.json({error:"Invalid JSON body"},400)}let g=tru.safeParse(_);if(!g.success)return f.json({error:"Invalid publish request payload",details:Be0.treeifyError(g.error)},400);let h=await je0(u,$,g.data.data.id,g.data.data.title);if(h)return f.json({error:"A registry item with the same id or title already exists. Please use a different name/id.",conflict:h},409);let E=await l.createOrUpdate({organization_id:$,requested_id:g.data.data.id,title:g.data.data.title,description:g.data.data.description??null,_meta:g.data.data._meta,server:g.data.data.server,requester_name:g.data.requester?.name??null,requester_email:g.data.requester?.email??null});try{await Pe0({db:t,organizationId:$,request:E})}catch(v){console.warn("[private-registry] failed to emit publish-request event:",v)}return Xu.capture({distinctId:g.data.requester?.email??`org:${$}`,event:"registry_publish_request_submitted",groups:{organization:$},properties:{organization_id:$,request_id:E.id,requested_id:E.requested_id,title:g.data.data.title,requester_email:g.data.requester?.email??null}}),f.json({id:E.id,requested_id:E.requested_id,status:E.status},201)}}var nzu=!0,Ye0="hour",fzu=100;var $zu=x(()=>{U1();kl();Qz();Vqi();aqi();Bf()});var dzu={};Pi(dzu,{createPublishRequestHandler:()=>czu,createPublicMCPHandler:()=>tzu});var _zu=x(()=>{uzu();$zu()});var xlt={};Pi(xlt,{watchHandler:()=>wzu,getProxyDispatch:()=>ze0,createApp:()=>Me0});import{PrometheusSerializer as ke0}from"@opentelemetry/exporter-prometheus";import{DBOS as eft}from"@dbos-inc/dbos-sdk";import{oAuthDiscoveryMetadata as Le0,oAuthProtectedResourceMetadata as Re0}from"better-auth/plugins";async function Se0(i){let t=i.connect(),u;try{u=await Promise.race([t,hzu(gzu)])}catch{return t.then((l)=>l.release(!0)).catch(()=>{}),!1}try{return await Promise.race([u.query("SELECT 1"),hzu(gzu)]),u.release(),!0}catch{return u.release(!0),!1}}function hzu(i){return new Promise((t,u)=>setTimeout(()=>u(Error("pg health-check timeout")),i))}function ze0(){if(!Mft)throw Error("getProxyDispatch() called before createApp() or without NATS \u2014 proxy dispatch unavailable");return Mft}async function be0(i,t){let{items:u}=await i.storage.connections.list(t,{where:{field:["connection_url"],operator:"like",value:`${tpt}%`},limit:1}),l=u[0];if(!l?.configuration_state)return null;return l.configuration_state.project_locator}function Ke0(i){let t=new URLSearchParams;if(i){let[u,l]=i.split("/");if(u)t.set("workspace_hint",u);if(l)t.set("project_hint",l)}else t.set("auto_personal","true");return t.set("force_new","true"),t}async function Me0(i={}){let t=i.database??N0(),u=!1;if(g9i&&g9i.isRunning())Promise.resolve(g9i.stop()).catch((_i)=>{console.error("[EventBus] Error stopping previous worker:",_i)}),gd.stop().catch((_i)=>{console.error("[SSEHub] Error stopping previous broadcast (HMR cleanup):",_i)});let l,n,f,c=new yft,$,d,_,g,h=null,E=null;if(i.eventBus)l=i.eventBus,$=Xft(),n={get:async()=>null,set:async()=>{},invalidate:async()=>{},teardown:()=>{}},f=new NV,d={start:async()=>{},broadcast:()=>{},publishControlFrame:()=>{},stop:async()=>{}},g=Wku(),_={init:async()=>{},pump:(_i)=>{(async()=>{let tt=_i.getReader();try{while(!0){let{done:Xt}=await tt.read();if(Xt)break}}catch{}finally{tt.releaseLock()}})()},publishRawChunk:async()=>!1,createTailStream:async()=>null,purge:()=>{},teardown:()=>{}};else{E=Xku(),E.init(kt().natsUrls);let _i=iVi()?new Cei({getJetStream:()=>E.getJetStream()}):null;_i?.init().catch(()=>{}),n=_i;let tt=new Hsi({getJetStream:()=>E.getJetStream()});tt.init().catch(()=>{}),f=tt,$=Xft({getConnection:()=>E.getConnection()}),d=new Nft({getConnection:()=>E.getConnection()}),_=new Uft({getConnection:()=>E.getConnection(),getJetStream:()=>E.getJetStream()});let Xt=new Fft({getJetStream:()=>E.getJetStream()});Xt.init().catch(()=>{}),g=Xt,h=new $ji({getJetStreamManager:async()=>{let Ai=E.getConnection();return Ai?Ai.jetstreamManager():null},getJetStream:()=>E.getJetStream()}),l=HZu(t,E),E.onReady(()=>{if(_i?.init().catch((Ai)=>{console.error("[McpListCache] Deferred init failed:",Ai)}),tt.init().catch((Ai)=>{console.error("[ConnectionCircuitStore] Deferred init failed:",Ai)}),$.start(),Bdu(()=>E.getConnection()),_.init().catch((Ai)=>{console.warn("[StreamBuffer] Deferred init failed, late-join disabled:",Ai)}),Xt.init().catch((Ai)=>{console.warn("[LinkClaimRegistry] Deferred init failed, link dispatch disabled:",Ai)}),h.init().catch((Ai)=>{console.warn("[LinkWorkQueue] Deferred init failed, pull-transport work queue disabled:",Ai)}),process.env.LINK_DURABLE_PROJECTOR==="true")(async()=>{let Ai=E.getConnection(),Nu=E.getJetStream();if(!Ai||!Nu)return;let ll=await Ai.jetstreamManager(),{startDurableProjector:Wn}=await Promise.resolve().then(() => ($Su(),cSu));await Wn({jsm:ll,js:Nu,messageParts:new XS(t.db).messageParts(),resolveRunOrg:async(Fn)=>{let Al=await t.db.selectFrom("threads").select(["organization_id","message_storage_version"]).where("id","=",Fn).executeTakeFirst();return Al?{orgId:Al.organization_id,version:Al.message_storage_version??1}:null}})})().catch((Ai)=>{console.warn("[DurableProjector] Deferred init failed:",Ai)})})}if(g9i=l,Bb)await Bb();eei(n),Lsi(f);let v=new XS(t.db);if(process.env.LINK_WS_UPLINK==="true")Eft((_i)=>dft(_i,Vn.api)),wft(({userSub:_i,send:tt})=>{let Xt=new Map;return{sessionFor:(Ai)=>{let Nu=Xt.get(Ai);if(!Nu)Nu=(async()=>{let ll=await t.db.selectFrom("threads").select(["organization_id"]).where("id","=",Ai).executeTakeFirst();if(!ll)return null;if(!await t.db.selectFrom("member").select(["role"]).where("userId","=",_i).where("organizationId","=",ll.organization_id).executeTakeFirst())return null;let Fn=await v.getRunFence(Ai);if(Fn===null)return null;return Sju({fenceOk:(Al)=>HXi(Fn,Al),cancelRequested:async()=>LXi(await v.getCancelRequestedAt(Ai)),publish:async(Al)=>{await _.publishRawChunk(Ai,Al)},send:(Al)=>tt(JSON.stringify(Al))})})(),Xt.set(Ai,Nu);return Nu}}});let r=new Zft({storage:v,streamBuffer:_,sseHub:gd}),O=new LM(t.db),y=new Tft(O);y.start(),d.start((_i)=>{r.execute({type:"CANCEL",taskId:_i}).catch((tt)=>{console.error("[Decopilot] CancelBroadcast execute failed:",tt)})}).catch((_i)=>{console.error("[Decopilot] CancelBroadcast start failed:",_i)}),E?.onReady(()=>{d.start().catch((_i)=>{console.error("[CancelBroadcast] Deferred start failed:",_i)})}),_.init().catch((_i)=>{console.warn("[Decopilot] StreamBuffer init failed, attach/late-join disabled:",_i)}),Bb=async()=>{await r.stopAll(),r.dispose(),y.dispose(),d.stop().catch(()=>{}),_.teardown(),n?.teardown(),c.teardown(),$.teardown(),Ydu(),f.teardown(),eei(null),Lsi(null)};let X=new jt;if(X.use("*",_Ci({enabled:(_i)=>sfi(_i,"debug")==="1"})),X.use("*",pGi),X.use("/*",Kpt({origin:(_i)=>{if(_i.includes("localhost")||_i.includes("127.0.0.1"))return _i;return _i},credentials:!0,allowMethods:["GET","POST","PUT","DELETE","OPTIONS"],allowHeaders:["Content-Type","Authorization","mcp-protocol-version"],exposeHeaders:["WWW-Authenticate"]})),X.use("*",async(_i,tt)=>{if(await tt(),_i.req.path.includes("/files/"))return;if(_i.req.path.includes("/fs/")&&_i.req.path.endsWith("/read"))return;_i.header("X-Frame-Options","DENY"),_i.header("Content-Security-Policy","frame-ancestors 'none'")}),!kt().noTui)X.use("*",oku());X.use("*",async(_i,tt)=>{if(await tt(),PH(_i.req.path))return;if(_i.res.status>=500){let Ai=await _i.res.clone().text();console.error(`[5xx Response] ${_i.req.method} ${_i.req.path} - ${_i.res.status}:`,Ai)}}),X.get(U_.HEALTH,(_i)=>{if(u)return _i.json({status:"shutting_down"},503);return _i.json({status:"ok"})}),X.get(U_.HEALTH_LIVE,(_i)=>{return _i.json({status:"ok"})}),X.get(U_.HEALTH_READY,async(_i)=>{if(u)return _i.json({status:"shutting_down"},503);let tt={};if(tt.postgres={status:await Se0(t.pool)?"up":"down"},E)tt.nats=E.isConnected()?{status:"up"}:{status:"down"};else tt.nats={status:"down"};let Xt=tt.postgres.status==="up",Ai=Xt?200:503;return _i.json({status:Xt?"ready":"not_ready",services:tt},Ai)}),X.get(U_.METRICS,async(_i)=>{try{let tt=await lWi.collect(),Xt=He0.serialize(tt.resourceMetrics);return _i.text(Xt,200,{"Content-Type":"text/plain; version=0.0.4; charset=utf-8"})}catch(tt){return console.error("Failed to collect metrics:",tt),_i.text("# Error collecting metrics",500)}}),X.route("/api/config",wku),X.route("/api/auth/custom",gTu),X.all("/api/auth/*",async(_i)=>{return await Vn.handler(_i.req.raw)});let N=dvu();N.use("/.well-known/oauth-protected-resource/mcp/:connectionId",OD),N.use("/mcp/:connectionId/.well-known/oauth-protected-resource",OD),X.route("/",N),X.get("/.well-known/oauth-protected-resource/api/:org/mcp/:connectionId",iV),X.route("/",Evu()),X.use("/oauth-proxy/:connectionId/*",OD),X.all("/oauth-proxy/:connectionId/*",Ezu);let U=async(_i)=>{let Xt=await Ce0()(_i.req.raw),Ai=await Xt.json();return Response.json(Ai,Xt)};X.use("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",OD),X.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",U);let J=async(_i)=>{let Xt=await ee0()(_i.req.raw),Ai=await Xt.json();return Response.json(Ai,Xt)};X.get("/.well-known/oauth-authorization-server/*/:gateway?/:connectionId?",J);let Z=TZu({ttlMs:120000}),B=await VEu({db:t.db,auth:Vn,encryption:{key:kt().encryptionKey},observability:{tracer:Px,meter:t1},eventBus:l,modelListCache:c,providerKeyCache:$,memberRoleCache:Z,linkClaimRegistry:g,publishLinkControlFrame:(_i,tt)=>d.publishControlFrame(_i,tt)});qh.set(B);let Q=new qO(kt().encryptionKey);Est(t.db,Q);let P=Math.random()*2000;new Promise((_i)=>setTimeout(_i,P)).then(()=>l.start()).then(()=>{return wst({db:t.db,publish:async(_i,tt)=>{await l.publish(_i,"",tt)}})}).catch((_i)=>{console.error("[EventBus] Error during startup:",_i)}),mst({db:t.db,baseUrl:QE()});let H=t$i(t.db),k=new PM(t.db),j=Vku({db:t.db});ksi({storage:H,meshContextFactory:j}),Usi({dispatchRunFn:bPu,meshContextFactory:j,deps:{runRegistry:r,cancelBroadcast:d,streamBuffer:_,sseHub:gd},pullDispatchFn:HPu,workQueue:h??void 0}),Mku(),ost();let m=async(_i,tt,Xt)=>{let Ai=await H.findById(_i,tt);if(!Ai)throw Error("Automation not found");return bsi({automationId:Ai.id,organizationId:Ai.organization_id,triggerId:null})},S=new _b(H,({automation:_i,trigger:tt,contextMessages:Xt,idempotencyKey:Ai})=>yV({automationId:_i.id,organizationId:_i.organization_id,triggerId:tt.id,contextMessages:Xt},{idempotencyKey:Ai}));if("setAutomationEventDispatcher"in l)l.setAutomationEventDispatcher(S);let M=[og(),nA(),q3()];for(let _i of M)u9i(_i).then(()=>{}).catch((tt)=>console.error("[monitoring] Retention cleanup failed:",tt));let p=()=>t.db.deleteFrom("apikey").where("expiresAt","<",new Date).execute().then(()=>{}).catch((_i)=>console.error("[auth] Expired API key cleanup failed:",_i));p(),setInterval(p,86400000).unref(),X.use("*",async(_i,tt)=>{if(oGi(_i.req.path))return tt();let Xt={measure:async(Nu,ll)=>{$g(_i,Nu);try{return await ll()}finally{L_(_i,Nu)}}},Ai=await qh.create(_i.req.raw,{timings:Xt});Ai.automationRunner=m,_i.set("meshContext",Ai);try{await tt()}finally{let Nu=Ai.pendingRevalidations;if(Nu.length>0)Promise.race([Promise.allSettled(Nu),new Promise((Wn)=>setTimeout(Wn,30000))]).catch((Wn)=>console.error("[mesh] revalidation cleanup error:",Wn))}}),X.use("/api/:org/decopilot/*",fG),X.use("/api/:org/v1/*",fG),X.use("/api/:org/files/*",fG),X.use("*",async(_i,tt)=>{let Xt=_i.req.path;if(Xt.startsWith("/api/org-sso/")||Xt.startsWith("/api/auth/")||Xt.startsWith("/api/tools/management")||Xt.startsWith("/oauth-proxy/"))return tt();let Ai=_i.get("meshContext");if(!Ai?.organization?.id||!Ai?.auth?.user?.id)return tt();if(!(await Ai.storage.orgSsoConfig.getByOrgId(Ai.organization.id))?.enforced)return tt();if(!await Ai.storage.orgSsoSessions.isValid(Ai.auth.user.id,Ai.organization.id))return _i.json({error:"SSO authentication required for this organization"},403);return tt()});let s=new jt;s.use("*",r6({mountPath:"/api/org-sso"})),s.route("/",t7i()),X.route("/api/org-sso",s),X.get("/api/tools/management",(_i)=>{return _i.json({tools:hCi,grouped:AO()})}),X.use("/mcp/*",async(_i,tt)=>{$g(_i,"mcp");try{return await tt()}finally{L_(_i,"mcp")}});let $i=async(_i,tt)=>{let Xt=_i.var.meshContext;if(!Xt.auth.user?.id&&!Xt.auth.apiKey?.id){let Ai=new URL(_i.req.url);return _i.res=new Response(null,{status:401,headers:{"WWW-Authenticate":`Bearer realm="mcp",resource_metadata="${Ai.origin}${Ai.pathname}/.well-known/oauth-protected-resource"`}})}return await tt()};if(X.use("/mcp/:connectionId?",$i),X.use("/mcp/gateway/:virtualMcpId?",$i),X.use("/mcp/virtual-mcp/:virtualMcpId?",$i),X.use("/mcp/self",$i),Th()){let{mountDevRoutes:_i}=(USu(),r9i(JSu));_i(X,$i)}let e=new jt;e.use("*",r6({mountPath:"/mcp"})),e.route("/",c_i()),X.route("/mcp",e);let fi=new jt;fi.use("*",r6({mountPath:"/mcp/self"})),fi.route("/",kXi()),X.route("/mcp/self",fi);let a=new jt;a.use("*",r6({mountPath:"/mcp"})),a.route("/",__i()),X.route("/mcp",a),X.use("/api/:org/models/*",async(_i,tt)=>{$g(_i,"llm_models");try{return await tt()}finally{L_(_i,"llm_models")}});let di=Unt({cancelBroadcast:d,streamBuffer:_,runRegistry:r,linkClaimRegistry:g});if(X.route("/api",di),E!=null)Mft=iku({nats:{publish(tt,Xt){let Ai=E?.getConnection();if(!Ai){console.warn("[link-proxy.nats] publish skipped: nats unavailable",{subject:tt,bytes:Xt.byteLength});return}Ai.publish(tt,Xt)},subscribe(tt,Xt){let Ai=E?.getConnection();if(!Ai)return console.warn("[link-proxy.nats] subscribe skipped: nats unavailable",{subject:tt}),()=>{};let Nu=Ai.subscribe(tt);return(async()=>{for await(let ll of Nu)try{Xt(ll.data)}catch{}})(),()=>{try{Nu.unsubscribe()}catch{}}}},presence:{watch:(tt,Xt)=>g.watch(tt,(Ai)=>Xt(Ai))}});if(X.get("/api/links/me",async(_i)=>{let tt=_i.req.header("authorization")??"",Xt=/^Bearer\s+(.+)$/i.exec(tt),Ai=null;if(Xt){let ll=(Xt[1]??"").trim();Ai=await dft(ll,Vn.api)}else Ai=_i.get("meshContext")?.auth?.user?.id??null;if(!Ai)return _i.json({error:"unauthorized"},401);let Nu=await g.get(Ai);if(!Nu)return _i.json(null);return _i.json({machineId:Nu.machineId,hostname:Nu.hostname,cliVersion:Nu.cliVersion,previewPort:Nu.previewPort,connectedAt:Nu.connectedAt})}),h!=null)X.route("/api",Mju({linkClaimRegistry:g,workQueue:h}));if(E!=null)X.route("/api",Vju({getConnection:()=>E.getConnection()})),X.route("/api",pju({getConnection:()=>E.getConnection(),claimRegistry:g}));X.use("/api/:org/files/*",fG),X.route("/api",Oku);let Oi=new jt;Oi.use("*",r6({mountPath:"/api"})),Oi.route("/",SXi()),X.route("/api",Oi),X.route("/api",hku);let Di=new jt;Di.use("*",r6({mountPath:"/api"})),Di.route("/",zXi({tokenStorage:k,automationEventDispatcher:S})),X.route("/api",Di);let qi=new WM(t.db),Yi=new jt;Yi.use("*",r6({mountPath:"/api"})),Yi.route("/",jXi({kvStorage:qi})),X.route("/api",Yi),X.use("/org/:organizationId/events/:type",OD),X.post("/org/:organizationId/events/:type",vzu);let Zi=new jt;Zi.use("*",r6({mountPath:"/api"})),Zi.route("/",uXi()),X.route("/api",Zi),X.route("/api/deco-sites",gGu()),X.route("/api/deco-apps",fku());let Bi=new jt;Bi.use("*",r6({mountPath:"/api/deco-sites"})),Bi.route("/",nXi()),X.route("/api/deco-sites",Bi);let ai=new jt;ai.use("*",r6({mountPath:"/api/vm-events"})),ai.route("/",lku()),X.route("/api/vm-events",ai);let{createPublishRequestHandler:ui,createPublicMCPHandler:ci}=await Promise.resolve().then(() => (_zu(),dzu)),ii={db:t.db,vault:{encrypt:(_i)=>Q.encrypt(_i),decrypt:(_i)=>Q.decrypt(_i)}},o=ui(ii),bi=ci(ii);X.use("/org/:orgRef/registry/publish-request",OD),X.post("/org/:orgRef/registry/publish-request",o),X.use("/org/:orgSlug/registry/*",OD),X.all("/org/:orgSlug/registry/*",bi),X.post("/api/:org/registry/publish-request",o),X.all("/api/:org/registry/*",bi);let ri=Wju({kvStorage:qi,runRegistry:r,streamBuffer:_,sseHub:gd,cancelBroadcast:d,tokenStorage:k,automationEventDispatcher:S,mountDevAssets:Th(),mcpAuth:$i,oauthProxyHandler:Ezu,eventsHandler:vzu,watchHandler:wzu,betterAuthProtectedResourceHandler:U,getNatsConnection:()=>E?.getConnection()??null});return X.route("/api/:org",ri),gst(X,{db:t.db,vault:Q}),X.notFound((_i)=>{return _i.json({error:"Not Found",path:_i.req.path},404)}),X.onError(oPu),Object.assign(X,{markShuttingDown:()=>{u=!0},shutdown:async()=>{if(console.log("[shutdown] Stopping workers..."),await Promise.allSettled([l.isRunning()?l.stop():Promise.resolve(),gd.stop(),Bb?Promise.resolve(Bb()).finally(()=>{Bb=null}):Promise.resolve()]),E)await E.drain().catch((_i)=>console.error("[shutdown] NATS drain error:",_i));console.log("[shutdown] Flushing telemetry..."),await k6().catch((_i)=>console.error("[shutdown] Telemetry flush error:",_i)),console.log("[shutdown] Closing database..."),await Ax(t).catch((_i)=>console.error("[shutdown] Database close error:",_i)),console.log("[shutdown] Cleanup complete.")},initDbos:async()=>{await eft.registerQueue(u7,{partitionQueue:!0,concurrency:Wsi,minPollingIntervalMs:Asi}),await eft.registerQueue(adi,{partitionQueue:!0,concurrency:Jsi}),await Int(H),await Promise.allSettled(["automations-gate","automations-global"].map((_i)=>eft.deleteQueue(_i))),await jsi(t.pool),ynu().catch((_i)=>{console.error("[studio-pack-backfill] failed:",_i)}),sst().catch((_i)=>{console.error("[org-fs] public-sets boot sync kick failed:",_i)})}})}var gzu=5000,Mft=null,g9i=null,Bb=null,Ezu=async(i)=>{let t=i.req.param("connectionId");if(!t)return i.json({error:"Missing connectionId"},400);let u=i.req.path.split("/").filter(Boolean),l=u[u.length-1],n=i.get("meshContext");if(!n)n=await qh.create(i.req.raw),i.set("meshContext",n);let f=i.req.param("org")?n.organization?.id:void 0,c=await n.storage.connections.findById(t,f);if(!c?.connection_url)return i.json({error:"Connection not found"},404);let $=await qS(c.connection_url),d,_=new URL(c.connection_url);if($.ok)d=(await $.json()).authorization_servers?.[0];if(!d)d=_.origin;let g=await tV(d);if(!g.ok)return i.json({error:"Failed to get auth server metadata"},502);let h=await g.json(),E;if(l==="authorize")E=h.authorization_endpoint;else if(l==="token")E=h.token_endpoint;else if(l==="register")E=h.registration_endpoint;if(!E)return i.json({error:`Unknown OAuth endpoint: ${l}`},404);let v=new URL(E),w=new URL(i.req.url);if(v.search=w.search,l==="authorize"){let Q=v.searchParams.get("redirect_uri");if(Q){let P=kt().baseUrl??w.origin;try{let H=new URL(Q),k=new URL(P);if(!(H.origin===k.origin||H.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)}v.searchParams.set("redirect_uri",Q)}if(v.searchParams.has("resource"))v.searchParams.set("resource",c.connection_url);if(upt(c.connection_url))try{let P=await be0(n,c.organization_id),H=Ke0(P);for(let[k,j]of H)v.searchParams.set(k,j)}catch(P){console.warn("[oauth-proxy] Failed to get smart OAuth params, proceeding without:",P)}return i.redirect(v.toString(),302)}let r={Accept:i.req.header("Accept")||"application/json"},O=i.req.header("Content-Type");if(O)r["Content-Type"]=O;let y=i.req.header("Authorization");if(y)r.Authorization=y;let X,N=null,U=null;if(i.req.method!=="GET"&&i.req.method!=="HEAD")if(l==="token"&&O?.includes("application/x-www-form-urlencoded")){if(y?.toLowerCase().startsWith("basic "))try{let j=atob(y.slice(6).trim()),m=j.indexOf(":");if(m!==-1){let S=decodeURIComponent(j.slice(0,m)),M=decodeURIComponent(j.slice(m+1));N=S||null,U=M||null}}catch{}let Q=await i.req.formData();if(Q.has("resource"))Q.set("resource",c.connection_url);let P=Q.get("client_id"),H=Q.get("client_secret");if(typeof P==="string"&&P)N=P;if(typeof H==="string"&&H)U=H;let k=new URLSearchParams;for(let[j,m]of Q.entries())k.append(j,m.toString());X=k.toString()}else if(l==="register"&&O?.toLowerCase().includes("application/json")){let Q=await n.db.selectFrom("organization").select(["id","slug","name"]).where("id","=",c.organization_id).executeTakeFirst(),P=await i.req.text(),H={};try{H=P?JSON.parse(P):{}}catch{X=P}let k=typeof H==="object"&&H!==null&&!Array.isArray(H);if(X===void 0&&!k)X=P;if(X===void 0){let j=H,m=j.metadata&&typeof j.metadata==="object"?j.metadata:{};j.metadata={...m,organization_id:c.organization_id,...Q?.slug?{organization_slug:Q.slug}:{},...Q?.name?{organization_name:Q.name}:{}},X=JSON.stringify(j),r["Content-Type"]="application/json"}}else X=i.req.raw.body??void 0;let J=await fetch(v.toString(),{method:i.req.method,headers:r,body:X,duplex:"half",redirect:"manual"}),Z=new Headers,B=["connection","keep-alive","transfer-encoding","content-encoding","content-length"];for(let[Q,P]of J.headers.entries())if(!B.includes(Q.toLowerCase()))Z.set(Q,P);if(l==="token"&&J.ok){let Q=await J.text();try{let P=JSON.parse(Q);if(typeof P.access_token==="string"&&P.access_token){let H=typeof P.expires_in==="number"?new Date(Date.now()+P.expires_in*1000):null,k=null;try{k=await VS(c.connection_url)??E}catch{k=E}let j={connectionId:t,accessToken:P.access_token,refreshToken:typeof P.refresh_token==="string"?P.refresh_token:null,scope:typeof P.scope==="string"?P.scope:null,expiresAt:H,clientId:N,clientSecret:U,tokenEndpoint:k};await new Mf(n.db,n.vault).upsert(j)}}catch(P){console.error("[oauth-proxy] failed to persist downstream token:",P)}return new Response(Q,{status:J.status,statusText:J.statusText,headers:Z})}return new Response(J.body,{status:J.status,statusText:J.statusText,headers:Z})},vzu=async(i)=>{let t=i.var.meshContext,u=t.organization?.id??i.req.param("organizationId");if(!u)return i.json({error:"organization id missing"},400);return await t.eventBus.publish(u,v0.SELF(u),{data:await i.req.json(),type:`public:${i.req.param("type")}`,subject:i.req.query("subject"),deliverAt:i.req.query("deliverAt"),cron:i.req.query("cron")}),i.json({success:!0})},wzu=async(i)=>{let t=i.var.meshContext;if(!(t.auth.user?.id??t.auth.apiKey?.userId))return i.json({error:"Unauthorized"},401);let l=t.organization?.id;if(!l)return i.json({error:"organization id missing"},400);let n=i.req.query("types"),f=n?n.split(",").map(($)=>$.trim()).filter(Boolean):null,c=crypto.randomUUID();return Sg(i,async($)=>{if(await $.writeSSE({event:"connected",data:JSON.stringify({listenerId:c,organizationId:l,typePatterns:f,connectedAt:new Date().toISOString()})}),!gd.add({id:c,organizationId:l,typePatterns:f?.length?f:null,push:(g)=>{$.writeSSE({id:g.id,event:g.type,data:JSON.stringify(g)}).catch(()=>{gd.remove(l,c)})}})){await $.writeSSE({event:"error",data:JSON.stringify({error:"Too many connections",message:"SSE connection limit reached. Try again later."})});return}let _=setInterval(()=>{$.writeSSE({event:"keepalive",data:""}).catch(()=>{clearInterval(_)})},30000);await new Promise((g)=>{$.onAbort(()=>{clearInterval(_),gd.remove(l,c),g()})})})},He0,Ce0=()=>Re0(Vn),ee0=()=>Le0(Vn);var rlt=x(()=>{tn();pst();Jd();mj();kl();L0();dCi();Hpt();gCi();Ew();MS();k$();blt();pf();Mlt();mlt();aPu();Fnt();Wv();Qdi();Znt();sPu();Tnt();Aju();zju();xft();qju();aju();Dft();nku();Pnt();cku();$_i();uV();Eku();g_i();V1t();s1t();xku();yku();o1t();m1t();Rui();$C();Sci();Nku();e_();O$i();jM();Csi();Jku();Fku();Tku();Pku();Aku();Dft();Rku();_Vi();xVi();qku();eci();Ift();J_();Qnt();odi();eci();Xnt();bqi();Kqi();aku();dji();pj();sku();wG();blt();He0=new ke0});var Ozu={};Pi(Ozu,{resolveClientDir:()=>pe0,resolveAssetPathWithTraversalCheck:()=>Dzu,isPathWithinDirectory:()=>rzu,createAssetHandler:()=>iM0});import{resolve as Jm,dirname as qe0,join as Ve0,extname as ae0,basename as me0,sep as xzu}from"path";function oe0(i,t){if(i===t||me0(i)==="index.html")return{"Cache-Control":"no-cache"};if(i.includes(`${xzu}assets${xzu}`))return{"Cache-Control":"public, max-age=31536000, immutable"};return{}}function rzu(i,t){let u=Jm(t),l=Jm(i);return l===u||l.startsWith(u+"/")}function Dzu({requestPath:i,clientDir:t}){let u=i.startsWith("/")?i.slice(1):i,l=Jm(t,u);if(!rzu(l,t))return null;return l}function pe0(i,t="../client"){let u=new URL(i),l=qe0(u.pathname);return Jm(l,t)}function iM0(i={}){let{env:t="production",clientDir:u=se0,isServerPath:l=()=>!1}=i;if(t==="development")return async function(f){return null};return async function(f){if(f.method!=="GET")return null;let c=new URL(f.url),$;try{$=decodeURIComponent(c.pathname)}catch{return null}if(l($))return null;let d=Dzu({requestPath:$,clientDir:u});if(!d)return null;let _=Ve0(d,"index.html"),g=Jm(u,"index.html"),h=f.headers.get("accept"),v=h?.includes("text/html")||h?.includes("*/*")&&["",".html"].includes(ae0(d))?[_,g]:[];for(let w of[d,...v])try{let r=Bun.file(w);if(await r.exists())return new Response(r,{headers:oe0(w,g)})}catch{}if($.includes("/assets/"))return new Response("Not Found",{status:404,headers:{"Cache-Control":"no-store"}});return null}}var se0="./dist/client";var yzu=()=>{};var Xzu={};Pi(Xzu,{tryUpgradePreviewWs:()=>$M0,tryHandlePreviewHttp:()=>cM0,previewWebSocketHandler:()=>dM0,parsePreviewBaseDomain:()=>fM0,isPreviewWsData:()=>h9i,extractHandleFromHost:()=>qft});function lM0(i){if(i.method!=="GET")return!1;return(i.headers.get("accept")??"").includes("text/html")}function nM0(){return new Response(uM0,{status:503,headers:{"content-type":"text/html; charset=utf-8","cache-control":"no-store","retry-after":"1","access-control-allow-origin":"*"}})}function fM0(i){if(!i||i.trim()==="")return null;let t=i.includes("{handle}")?i.replace("{handle}","__handle__"):i,u;try{u=new URL(t)}catch{return null}let l=u.hostname;if(i.includes("{handle}")){let n=l.indexOf(".");if(n<=0||n===l.length-1)return null;return l.slice(n+1)}return l}function qft(i,t){if(!i||!t)return null;let u=i.indexOf(":"),l=(u>=0?i.slice(0,u):i).toLowerCase(),f=`.${t.toLowerCase().replace(/^\.+|\.+$/g,"")}`;if(!l.endsWith(f))return null;let c=l.slice(0,l.length-f.length);if(!c||c.includes("."))return null;return c}async function cM0(i,t){let u=qft(i.headers.get("host"),t.baseDomain);if(!u)return null;let l=await t.getRunner();if(!l)return Fm(503,"preview proxy not configured");let n=await l.proxyPreviewRequest(u,i);if(n.headers.get(oP)&&lM0(i))return nM0();return n.headers.delete(oP),n}function Fm(i,t){return new Response(JSON.stringify({error:t}),{status:i,headers:{"content-type":"application/json","access-control-allow-origin":"*"}})}function h9i(i){return typeof i==="object"&&i!==null&&i.kind==="preview"}async function $M0(i,t,u){if((i.headers.get("upgrade")??"").toLowerCase()!=="websocket")return null;let l=qft(i.headers.get("host"),u.baseDomain);if(!l)return null;let n=await u.getRunner();if(!n)return Fm(503,"preview proxy not configured");let f=await n.resolvePreviewUpstreamUrl(l);if(!f)return Fm(404,"sandbox not found");let c=new URL(i.url);if(c.pathname.startsWith("/_sandbox")||c.pathname.startsWith("/_decopilot_vm"))return Fm(404,"not found");let $=`${f.replace(/^http/,"ws")}${c.pathname}${c.search}`,d=i.headers.get("sec-websocket-protocol"),_=d?d.split(",").map((E)=>E.trim()).filter(Boolean):[],g={kind:"preview",upstreamUrl:$,upstreamProtocols:_,pending:[],upstream:null,closed:!1};if(!t.upgrade(i,{data:g}))return Fm(426,"upgrade failed");return}function Um(i,t,u,l){if(t.closed)return;t.closed=!0;try{i.close(u,l)}catch{}try{t.upstream?.close()}catch{}}var tM0=256,uM0='<!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>',dM0;var Nzu=x(()=>{hlt();dM0={open(i){let t=i.data;if(!h9i(t))return;let u;try{u=t.upstreamProtocols.length>0?new WebSocket(t.upstreamUrl,t.upstreamProtocols):new WebSocket(t.upstreamUrl)}catch(l){console.warn(`[preview-ws] failed to dial upstream ${t.upstreamUrl}: ${l instanceof Error?l.message:String(l)}`),Um(i,t,1011,"upstream connect failed");return}u.binaryType="arraybuffer",t.upstream=u,u.addEventListener("open",()=>{while(t.pending.length>0){let l=t.pending.shift();if(l!==void 0)u.send(l)}}),u.addEventListener("message",(l)=>{if(t.closed)return;i.send(l.data)}),u.addEventListener("close",(l)=>{Um(i,t,l.code||1000,l.reason||"")}),u.addEventListener("error",()=>{Um(i,t,1011,"upstream error")})},message(i,t){let u=i.data;if(!h9i(u))return;let l=u.upstream;if(l&&l.readyState===WebSocket.OPEN){l.send(t);return}if(u.pending.length>=tM0){Um(i,u,1011,"preview ws backlog overflow");return}u.pending.push(t)},close(i){let t=i.data;if(!h9i(t))return;Um(i,t,1000,"")}}});var Uzu={};Pi(Uzu,{bootstrapDevLinkSession:()=>DM0});import{existsSync as _M0}from"fs";import{chmod as gM0,mkdir as hM0,rename as EM0,writeFile as vM0}from"fs/promises";import{dirname as wM0,join as Jzu}from"path";function xM0(i){return Jzu(i,"dev-link")}function rM0(i){let t=process.env.DEV_LINK_SESSION_PATH;if(t&&t.trim()!=="")return t;return Jzu(xM0(i),"session.json")}async function DM0(i,t){let u=rM0(i),l=N0().db,n=_E()?await Ba():await l.selectFrom("user").select(["id","email","name"]).orderBy("createdAt","desc").executeTakeFirst();if(!n?.id)return null;if(_M0(u))try{let _=await Bun.file(u).json(),g=_.user?.sub,h=_.accessToken;if(g===n.id&&typeof h==="string"){if(await Vn.api.verifyApiKey({body:{key:h}}).then((v)=>v?.valid===!0).catch(()=>!1))return{path:u,userSub:g}}}catch{}let f=null;try{f=await Vn.api.createApiKey({body:{name:"dev-link (auto-minted by bun run dev)",userId:n.id,expiresIn:2592000,rateLimitEnabled:!1}})}catch(d){return console.warn("[dev-link] failed to mint API key:",d instanceof Error?d.message:String(d)),null}if(!f?.key)return null;let c={target:t,clientId:"dev-link",user:{sub:n.id,...n.email?{email:n.email}:{},...n.name?{name:n.name}:{}},accessToken:f.key,createdAt:new Date().toISOString()};await hM0(wM0(u),{recursive:!0});let $=`${u}.tmp`;return await vM0($,JSON.stringify(c,null,2),{mode:384}),await gM0($,384),await EM0($,u),{path:u,userSub:n.id}}var Fzu=x(()=>{k$();Ew();wD()});var kM0={};import{existsSync as UM0}from"fs";function OM0(i,t){if(!t)return i;let u=new URL(i);if(!u.searchParams.has("sslmode"))u.searchParams.set("sslmode","verify-full");return u.toString()}function IM0(i){let t=new Headers(i.headers);for(let[u,l]of Object.entries(TM0))t.set(u,l);return new Response(i.body,{status:i.status,statusText:i.statusText,headers:t})}async function v9i(i){if(Qzu)return;Qzu=!0,console.log(`
108271
- [shutdown] Received ${i}, shutting down gracefully...`);let t=setTimeout(()=>{console.error("[shutdown] Timed out after 55s, forcing exit."),process.exit(1)},55000);t.unref?.();let u=0;try{jM0(),E9i.markShuttingDown();let l=Number(process.env.SHUTDOWN_DRAIN_MS??25000);await qu(l),await AM0.stop(!0),await pft.shutdown(),await E9i.shutdown()}catch(l){console.error("[shutdown] Error during shutdown:",l),u=1}clearTimeout(t),process.exit(u)}var Rw,pft,yM0,XM0,NM0,Bzu,JM0,Zzu,FM0,ZM0,TM0,QM0,BM0,YM0,Vft,aft,PM0,Yzu,Tzu,GM0,WM0,mft,oft,E9i,sft,Izu,AM0,jM0,Qzu=!1;var Pzu=x(async()=>{H1();tn();pf();Lst();Rw=kt();xPt();({DBOS:pft}=await import("@dbos-inc/dbos-sdk"));pft.setConfig({name:"decocms",systemDatabaseUrl:OM0(Rw.databaseUrl,Rw.databasePgSsl),systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:Number(process.env.DBOS_POOL_SIZE??5),runAdminServer:!1,executorID:Rw.podName});({createApp:yM0}=await Promise.resolve().then(() => (rlt(),xlt))),{isServerPath:XM0}=await Promise.resolve().then(() => (Rui(),sYt)),{createAssetHandler:NM0,resolveClientDir:Bzu}=await Promise.resolve().then(() => (yzu(),Ozu)),JM0=Rw.port,Zzu=Bzu(import.meta.url,"../client"),FM0=UM0(Zzu)?Zzu:Bzu(import.meta.url,"../dist/client"),ZM0=NM0({clientDir:FM0,isServerPath:XM0}),TM0={"X-Frame-Options":"DENY","Content-Security-Policy":"frame-ancestors 'none'"};({parsePreviewBaseDomain:QM0,tryHandlePreviewHttp:BM0,tryUpgradePreviewWs:YM0,previewWebSocketHandler:Vft,isPreviewWsData:aft}=await Promise.resolve().then(() => (Nzu(),Xzu))),{getOrInitSharedRunner:PM0}=await Promise.resolve().then(() => (Ua(),qFu)),Yzu=QM0(process.env.STUDIO_SANDBOX_PREVIEW_URL_PATTERN),Tzu={baseDomain:Yzu??"",getRunner:PM0},{tryUpgradeUplinkWs:GM0,getUplinkResolve:WM0}=await Promise.resolve().then(() => vft),{uplinkWebSocketHandler:mft}=await Promise.resolve().then(() => (xft(),Rju)),{isUplinkWsData:oft}=await Promise.resolve().then(() => vft),E9i=await yM0(),sft=process.env.DBOS_CONDUCTOR_KEY?.trim(),Izu=process.env.DBOS_CONDUCTOR_URL?.trim();await pft.launch({...sft?{conductorKey:sft}:{},...sft&&Izu?{conductorURL:Izu}:{}});await E9i.initDbos();if(!Rw.isCli){let{bannerLines:i}=await Promise.resolve().then(() => (jA(),rL));console.log("");for(let t of i())console.log(t)}AM0=Bun.serve({idleTimeout:0,port:JM0,hostname:"0.0.0.0",fetch:async(i,t)=>{if(Yzu){let n=await YM0(i,t,Tzu);if(n===void 0)return;if(n)return n;let f=await BM0(i,Tzu);if(f)return f}let u=WM0();if(u){let n=await GM0(i,t,{resolve:u});if(n===void 0)return;if(n)return n}let l=await ZM0(i);if(l)return IM0(l);return E9i.fetch(i,{server:t})},websocket:{open(i){if(aft(i.data))Vft.open(i);else if(oft(i.data))mft.open(i)},message(i,t){if(aft(i.data))Vft.message(i,t);else if(oft(i.data))mft.message(i,t)},close(i){if(aft(i.data))Vft.close(i);else if(oft(i.data))mft.close(i)}},development:!1}),jM0=Hst();if(Rw.localMode)Promise.resolve().then(() => (wD(),syi)).then(async({seedLocalMode:i,markSeedComplete:t})=>{try{let u=await i();if(process.env.DEV_LINK_SESSION_PATH)try{let{bootstrapDevLinkSession:l}=await Promise.resolve().then(() => (Fzu(),Uzu)),n=Rw.baseUrl??`http://localhost:${Rw.port}`,f=await l(Rw.dataDir,n);if(f)console.log(`[dev-link] session ready at ${f.path} (userSub=${f.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(l){console.error("[dev-link] bootstrap failed:",l)}}catch(u){console.error("Failed to seed local mode:",u)}finally{t()}}).catch(async(i)=>{console.error("Failed to load local-mode module:",i);try{let{markSeedComplete:t}=await Promise.resolve().then(() => (wD(),syi));t()}catch{}});process.on("SIGTERM",()=>v9i("SIGTERM"));process.on("SIGINT",()=>v9i("SIGINT"));process.on("SIGHUP",()=>v9i("SIGHUP"));process.on("unhandledRejection",(i)=>{console.error("[process] Unhandled rejection:",i)});process.on("uncaughtException",(i)=>{console.error("[process] Uncaught exception:",i),v9i("uncaughtException")})});var ict={};Pi(ict,{startServer:()=>bM0,interceptConsoleForTui:()=>zM0});function SM0(i){return i.replace(/\x1b\[[0-9;]*m/g,"")}function zM0(){let{log:i,warn:t,error:u}=console;function l(...n){let f=n.map((c)=>typeof c==="string"?c:Bun.inspect(c)).join(" ");for(let c of f.split(`
108271
+ [shutdown] Received ${i}, shutting down gracefully...`);let t=Number(process.env.SHUTDOWN_GRACE_SECONDS??60)*1000,u=Math.max(t-5000,1e4),l=setTimeout(()=>{console.error(`[shutdown] Timed out after ${u}ms, forcing exit.`),process.exit(1)},u);l.unref?.();let n=0;try{jM0(),E9i.markShuttingDown();let f=Number(process.env.SHUTDOWN_DRAIN_MS??Math.floor(u*0.6));await qu(f),await AM0.stop(!0),await pft.shutdown(),await E9i.shutdown()}catch(f){console.error("[shutdown] Error during shutdown:",f),n=1}clearTimeout(l),process.exit(n)}var Rw,pft,yM0,XM0,NM0,Bzu,JM0,Zzu,FM0,ZM0,TM0,QM0,BM0,YM0,Vft,aft,PM0,Yzu,Tzu,GM0,WM0,mft,oft,E9i,sft,Izu,AM0,jM0,Qzu=!1;var Pzu=x(async()=>{H1();tn();pf();Lst();Rw=kt();xPt();({DBOS:pft}=await import("@dbos-inc/dbos-sdk"));pft.setConfig({name:"decocms",systemDatabaseUrl:OM0(Rw.databaseUrl,Rw.databasePgSsl),systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:Number(process.env.DBOS_POOL_SIZE??5),runAdminServer:!1,executorID:Rw.podName});({createApp:yM0}=await Promise.resolve().then(() => (rlt(),xlt))),{isServerPath:XM0}=await Promise.resolve().then(() => (Rui(),sYt)),{createAssetHandler:NM0,resolveClientDir:Bzu}=await Promise.resolve().then(() => (yzu(),Ozu)),JM0=Rw.port,Zzu=Bzu(import.meta.url,"../client"),FM0=UM0(Zzu)?Zzu:Bzu(import.meta.url,"../dist/client"),ZM0=NM0({clientDir:FM0,isServerPath:XM0}),TM0={"X-Frame-Options":"DENY","Content-Security-Policy":"frame-ancestors 'none'"};({parsePreviewBaseDomain:QM0,tryHandlePreviewHttp:BM0,tryUpgradePreviewWs:YM0,previewWebSocketHandler:Vft,isPreviewWsData:aft}=await Promise.resolve().then(() => (Nzu(),Xzu))),{getOrInitSharedRunner:PM0}=await Promise.resolve().then(() => (Ua(),qFu)),Yzu=QM0(process.env.STUDIO_SANDBOX_PREVIEW_URL_PATTERN),Tzu={baseDomain:Yzu??"",getRunner:PM0},{tryUpgradeUplinkWs:GM0,getUplinkResolve:WM0}=await Promise.resolve().then(() => vft),{uplinkWebSocketHandler:mft}=await Promise.resolve().then(() => (xft(),Rju)),{isUplinkWsData:oft}=await Promise.resolve().then(() => vft),E9i=await yM0(),sft=process.env.DBOS_CONDUCTOR_KEY?.trim(),Izu=process.env.DBOS_CONDUCTOR_URL?.trim();await pft.launch({...sft?{conductorKey:sft}:{},...sft&&Izu?{conductorURL:Izu}:{}});await E9i.initDbos();if(!Rw.isCli){let{bannerLines:i}=await Promise.resolve().then(() => (jA(),rL));console.log("");for(let t of i())console.log(t)}AM0=Bun.serve({idleTimeout:0,port:JM0,hostname:"0.0.0.0",fetch:async(i,t)=>{if(Yzu){let n=await YM0(i,t,Tzu);if(n===void 0)return;if(n)return n;let f=await BM0(i,Tzu);if(f)return f}let u=WM0();if(u){let n=await GM0(i,t,{resolve:u});if(n===void 0)return;if(n)return n}let l=await ZM0(i);if(l)return IM0(l);return E9i.fetch(i,{server:t})},websocket:{open(i){if(aft(i.data))Vft.open(i);else if(oft(i.data))mft.open(i)},message(i,t){if(aft(i.data))Vft.message(i,t);else if(oft(i.data))mft.message(i,t)},close(i){if(aft(i.data))Vft.close(i);else if(oft(i.data))mft.close(i)}},development:!1}),jM0=Hst();if(Rw.localMode)Promise.resolve().then(() => (wD(),syi)).then(async({seedLocalMode:i,markSeedComplete:t})=>{try{let u=await i();if(process.env.DEV_LINK_SESSION_PATH)try{let{bootstrapDevLinkSession:l}=await Promise.resolve().then(() => (Fzu(),Uzu)),n=Rw.baseUrl??`http://localhost:${Rw.port}`,f=await l(Rw.dataDir,n);if(f)console.log(`[dev-link] session ready at ${f.path} (userSub=${f.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(l){console.error("[dev-link] bootstrap failed:",l)}}catch(u){console.error("Failed to seed local mode:",u)}finally{t()}}).catch(async(i)=>{console.error("Failed to load local-mode module:",i);try{let{markSeedComplete:t}=await Promise.resolve().then(() => (wD(),syi));t()}catch{}});process.on("SIGTERM",()=>v9i("SIGTERM"));process.on("SIGINT",()=>v9i("SIGINT"));process.on("SIGHUP",()=>v9i("SIGHUP"));process.on("unhandledRejection",(i)=>{console.error("[process] Unhandled rejection:",i)});process.on("uncaughtException",(i)=>{console.error("[process] Uncaught exception:",i),v9i("uncaughtException")})});var ict={};Pi(ict,{startServer:()=>bM0,interceptConsoleForTui:()=>zM0});function SM0(i){return i.replace(/\x1b\[[0-9;]*m/g,"")}function zM0(){let{log:i,warn:t,error:u}=console;function l(...n){let f=n.map((c)=>typeof c==="string"?c:Bun.inspect(c)).join(" ");for(let c of f.split(`
108272
108272
  `)){let $=SM0(c).trim();if(!$)continue;hv({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:$})}}return console.log=l,console.warn=l,console.error=l,Bfi(!0),()=>{console.log=i,console.warn=t,console.error=u,Bfi(!1)}}async function bM0(i){let t=await BO(Number(i.port)),{settings:u,services:l}=await Qfi({port:String(t),home:i.home,localMode:i.localMode,skipMigrations:i.skipMigrations,noTui:i.noTui});for(let n of l)gv({name:n.name,status:"ready",port:n.port});_C(),await Pzu().then(() => kM0),gC(`http://localhost:${u.port}`)}var tct=x(()=>{JRi();QO();TRi()});import{parseArgs as KM0}from"util";import{homedir as Zm}from"os";import{join as w9i}from"path";function Tm(i){if(i.noTui)return!1;return i.isTty===!0}var{values:Gn,positionals:Yb}=KM0({args:process.argv.slice(2),options:{port:{type:"string",short:"p",default:process.env.PORT||"3000"},"vite-port":{type:"string",default:process.env.VITE_PORT||"4000"},home:{type:"string"},"base-url":{type:"string"},help:{type:"boolean",short:"h",default:!1},version:{type:"boolean",short:"v",default:!1},"skip-migrations":{type:"boolean",default:!1},"no-tui":{type:"boolean",default:!1},"no-local-mode":{type:"boolean",default:!1},"local-sandbox-provider":{type:"boolean",default:!1},hot:{type:"boolean",default:!1},target:{type:"string"},env:{type:"string",short:"e"},"dry-run":{type:"boolean",default:!1},batch:{type:"string"},limit:{type:"string"},org:{type:"string"}},allowPositionals:!0});if(Gn.help)console.log(`
108273
108273
  Deco CMS \u2014 Open-source control plane for your AI agents
108274
108274
 
@@ -2624,4 +2624,4 @@ Input schema:
2624
2624
  ${H}`:`${F}
2625
2625
 
2626
2626
  This workflow expects structured input. Use COLLECTION_WORKFLOW_GET to inspect the full input schema.`})(),inputSchema:D9.object({input:D9.record(D9.string(),D9.unknown()).optional().describe("Input data for the workflow. Steps reference these values via @input.field."),virtual_mcp_id:D9.string().optional().describe(K.virtual_mcp_id?`Virtual MCP ID to use for execution (defaults to "${K.virtual_mcp_id}").`:"Virtual MCP ID that will execute the workflow steps."),start_at_epoch_ms:D9.number().int().min(0).optional().describe("Unix timestamp (ms) for scheduled execution. Omit to start immediately.")}),outputSchema:D9.object({execution_id:D9.string().describe("ID of the created workflow execution.")}),execute:async(H)=>{let{connectionId:N,meshUrl:O,token:B}=Tn(H);if(!N||!O)throw Error(`[${U}] Missing MESH_REQUEST_CONTEXT (connectionId or meshUrl).`);let L=H.context,w=L.virtual_mcp_id??K.virtual_mcp_id,z=XB1.workflowId(N,K.title);return{execution_id:await XB1.createExecution(O,B,{workflow_collection_id:z,virtual_mcp_id:w,input:L.input,start_at_epoch_ms:L.start_at_epoch_ms})}}})}):[]]},GL$=($)=>{let Z=null,G=null,X=null,Q=!1,Y=()=>{if(!Q)console.warn("[runtime] Passing factory functions to tools/prompts/resources is deprecated. Pass createTool()/createPrompt()/createResource() instances directly."),Q=!0},J=(O)=>typeof O==="object"&&O!==null&&(("id"in O)||("name"in O)||("uri"in O));async function W(O,B){if(!O)return[];return(await Promise.all(O.flatMap(async(L)=>{if(J(L))return[L];Y();let w=await L(B);if(Array.isArray(w))return w;return[w]}))).flat()}let K=async(O)=>{if(Z)return Z;if(G)return G;return G=(async()=>{try{let B;if(typeof $.tools==="function")Y(),B=await $.tools(O);else B=await W($.tools,O);let L=typeof $.workflows==="function"?await $.workflows(O):$.workflows;B.push(...jB4({...$,workflows:L}));let w;if(typeof $.prompts==="function")Y(),w=await $.prompts(O);else w=await W($.prompts,O);let z;if(typeof $.resources==="function")Y(),z=await $.resources(O);else z=await W($.resources,O);let j={tools:B,prompts:w,resources:z,workflows:L};return Z=j,j}catch(B){throw G=null,B}})(),G},U=(O,B)=>{for(let L of B.tools)O.registerTool(L.id,{_meta:L._meta,title:L.title,description:L.description,annotations:L.annotations,inputSchema:L.inputSchema&&"shape"in L.inputSchema?L.inputSchema:D9.object({}),outputSchema:L.outputSchema&&typeof L.outputSchema==="object"&&"shape"in L.outputSchema?L.outputSchema:void 0},async(w)=>{let z=qn(),j=await L.execute({context:w,runtimeContext:z},z);if(j!=null&&typeof j==="object"&&"content"in j&&Array.isArray(j.content)&&j.content.every((P)=>P!=null&&typeof P==="object"&&("type"in P)&&typeof P.type==="string"))return j;return{structuredContent:j,content:[{type:"text",text:JSON.stringify(j)}]}});for(let L of B.prompts)O.registerPrompt(L.name,{title:L.title,description:L.description,argsSchema:L.argsSchema?L.argsSchema:D9.object({}).shape},async(w)=>{let z=qn();return await L.execute({args:w,runtimeContext:z},z)});for(let L of B.resources)O.resource(L.name,L.uri,{description:L.description,mimeType:L.mimeType},async(w)=>{let z=qn(),j=await L.read({uri:w,runtimeContext:z},z),P=j._meta??void 0;if(j.text!==void 0)return{contents:[{uri:j.uri,mimeType:j.mimeType,text:j.text,...P!==void 0?{_meta:P}:{}}]};else if(j.blob!==void 0)return{contents:[{uri:j.uri,mimeType:j.mimeType,blob:j.blob,...P!==void 0?{_meta:P}:{}}]};return{contents:[{uri:j.uri,mimeType:j.mimeType,text:""}]}})},F=async(O)=>{await $.before?.(O);let{instructions:B,...L}=$.serverInfo??{},w=new hK({...L,name:L.name??"@deco/mcp-api",version:L.version??"1.0.0"},{capabilities:{tools:{},prompts:{},resources:{}},jsonSchemaValidator:b5,...B&&{instructions:B}}),z=await K(O);U(w,z);let j="tools/list",P=w.server._requestHandlers,R=P.get(j);if(R)P.set(j,async(A,M)=>{if(!X)X=await R(A,M);return X});return{server:w,...z}};return{fetch:async(O,B)=>{let{server:L}=await F(B),w=new VY;await L.connect(w);let z=()=>{try{w.close?.()}catch{}try{L.close?.()}catch{}};try{let j=await w.handleRequest(O),P=j.headers.get("content-type");if(!(P?.includes("text/event-stream")||P?.includes("application/json-rpc"))||!j.body)return z(),j;let{readable:A,writable:M}=new TransformStream;return j.body.pipeTo(M).catch(()=>{}).finally(z),new Response(A,{status:j.status,statusText:j.statusText,headers:j.headers})}catch(j){throw z(),j}},callTool:async({toolCallId:O,toolCallInput:B})=>{let L=In.getStore();if(!L)throw Error("Missing state, did you forget to call State.bind?");let w=L?.env,{tools:z}=await K(w),P=z.find((A)=>A.id===O)?.execute;if(!P)throw Error(`Tool ${O} not found or does not have an execute function`);let R=qn();return P({context:B,runtimeContext:R},R)}}};var QB1=D(()=>{Bc();DG();Uh();Gx();GS();tt1();pt1();rt1();at1();tt1();at1()});import{decodeJwt as XL$}from"jose";var PB4=({env:$,server:Z,url:G})=>{$.SELF=new Proxy({},{get:(X,Q)=>{if(Q==="toJSON")return null;return async(Y)=>{return await Z.callTool({toolCallId:Q,toolCallInput:Y})}}}),$.IS_LOCAL=(G?.startsWith("http://localhost")||G?.startsWith("http://127.0.0.1"))??!1},QL$=($)=>()=>{return{...$??{}}},AB4=({env:$,server:Z,tokenOrContext:G,url:X,authToken:Q})=>{let Y=$,J=Q?Q.split(" ")[1]:void 0,W;if(typeof G==="string"){let K=XL$(G),U=K.metadata??{};W={authorization:J,state:K.state??U.state??{},token:G,meshUrl:K.meshUrl??U.meshUrl,connectionId:K.connectionId??U.connectionId,organizationId:K.organizationId??U.organizationId,organizationName:K.organizationName??U.organizationName,organizationSlug:K.organizationSlug??U.organizationSlug,ensureAuthenticated:QL$(K.user??K.sub)}}else if(typeof G==="object"){W=G;let K=XL$(G.token),U=K.metadata??{},F=K.appName;W.authorization??=J,W.callerApp=F,W.connectionId??=K.connectionId??U.connectionId,W.organizationId??=K.organizationId??U.organizationId,W.organizationName??=K.organizationName??U.organizationName,W.organizationSlug??=K.organizationSlug??U.organizationSlug,W.ensureAuthenticated=QL$(K.user??K.sub)}else W={state:{},authorization:J,token:void 0,meshUrl:void 0,connectionId:void 0,ensureAuthenticated:()=>{throw Error("Unauthorized")}};return Y.MESH_REQUEST_CONTEXT=W,W.state=xD$(W),PB4({env:Y,server:Z,url:X}),Y},RB4,YL$=($)=>{let Z=GL$($),G=$.cors??RB4,X=$.oauth,Q=X?dD$(X):null,Y=async(J,W,K)=>{let U=new URL(J.url);if(Q){if(U.pathname==="/.well-known/oauth-protected-resource"||U.pathname==="/mcp/.well-known/oauth-protected-resource")return Q.handleProtectedResourceMetadata(J);if(U.pathname==="/.well-known/oauth-authorization-server")return Q.handleAuthorizationServerMetadata(J);if(U.pathname==="/authorize")return Q.handleAuthorize(J);if(U.pathname==="/oauth/callback")return Q.handleOAuthCallback(J);if(U.pathname==="/token"&&J.method==="POST")return Q.handleToken(J);if((U.pathname==="/register"||U.pathname==="/mcp/register")&&J.method==="POST")return Q.handleClientRegistration(J)}if(U.pathname==="/mcp"){if(J.method==="GET")return new Response("Method not allowed",{status:405});if(Q&&!Q.hasAuth(J)){let F=J.clone();try{if((await F.json())?.method!=="tools/list")return Q.createUnauthorizedResponse(J)}catch{return Q.createUnauthorizedResponse(J)}}return Z.fetch(J,W,K)}if(U.pathname.startsWith("/mcp/call-tool")){let F=U.pathname.split("/").pop();if(!F)return new Response("Not found",{status:404});let H=await J.json(),N=await Z.callTool({toolCallId:F,toolCallInput:H});return new Response(JSON.stringify(N),{headers:{"Content-Type":"application/json"}})}return $.fetch?.(J,W,K)||new Response("Not found",{status:404})};return{fetch:async(J,W,K)=>{if(new URL(J.url).pathname==="/_healthcheck")return new Response("OK",{status:200});if(G!==!1&&J.method==="OPTIONS")return yD$(J,G??{});let U=AB4({authToken:J.headers.get("authorization")??null,env:{...process.env,...W},server:Z,tokenOrContext:J.headers.get("x-mesh-token")??void 0,url:J.url}),F=await In.run({req:J,env:U,ctx:K},async()=>await Y(J,U,K));if(G!==!1)return gD$(F,J,G??{});return F}}};var JL$=D(()=>{GS();hD$();nt1();nt1();pt1();QB1();QB1();rt1();GS();Rn();RB4={origin:($)=>{if($.includes("localhost")||$.includes("127.0.0.1"))return $;return $},credentials:!0,allowMethods:["GET","POST","PUT","DELETE","OPTIONS"],allowHeaders:["Content-Type","Authorization","mcp-protocol-version"]}});import{z as st1}from"zod";function qB4($,Z){let G=sW({id:"COLLECTION_REGISTRY_APP_LIST",description:"List public registry items",annotations:{readOnlyHint:!0,idempotentHint:!0},inputSchema:Ox,outputSchema:Bx,execute:async({context:W})=>{let K={limit:W.limit,offset:W.offset,cursor:W.cursor,tags:W.tags,categories:W.categories,where:W.where},U=`${Z}:${JSON.stringify(K)}`,F=WL$.get(U);if(F)return F;let H=await $.listPublic(Z,K);return WL$.set(U,H),H}}),X=sW({id:"COLLECTION_REGISTRY_APP_GET",description:"Get a public registry item by ID or name",annotations:{readOnlyHint:!0,idempotentHint:!0},inputSchema:IW,outputSchema:tL,execute:async({context:W})=>{let K=W.id??W.name;if(!K)return{item:null};let U=await $.findByIdOrName(Z,K);if(U&&U.is_public)return{item:U};return{item:null}}}),Q=sW({id:"COLLECTION_REGISTRY_APP_VERSIONS",description:"Get available versions of a public registry item",annotations:{readOnlyHint:!0,idempotentHint:!0},inputSchema:IW,outputSchema:st1.object({versions:st1.array(tL.shape.item)}),execute:async({context:W})=>{let K=W.id??W.name;if(!K)return{versions:[]};let U=await $.findByIdOrName(Z,K);if(U&&U.is_public)return{versions:[U]};return{versions:[]}}}),Y=sW({id:"COLLECTION_REGISTRY_APP_SEARCH",description:"Search public registry items returning minimal data (id, title, tags, categories, is_public). Use this instead of LIST when you need to find items efficiently without loading full details.",annotations:{readOnlyHint:!0,idempotentHint:!0},inputSchema:z61,outputSchema:j61,execute:async({context:W})=>{return await $.search(Z,W,{publicOnly:!0})}}),J=sW({id:"COLLECTION_REGISTRY_APP_FILTERS",description:"Get available tags and categories for public registry items",annotations:{readOnlyHint:!0,idempotentHint:!0},inputSchema:st1.object({}),outputSchema:Dx,execute:async()=>{return await $.getFilters(Z,{publicOnly:!0})}});return[G,Y,X,Q,J]}function KL$($){let Z=$.db,G=new Jv(Z);return async(X)=>{let Q=X.req.param("orgSlug")??X.req.param("org");if(!Q)return X.json({error:"Organization not found"},404);let Y=await Z.selectFrom("organization").select(["id","slug","name"]).where("slug","=",Q).executeTakeFirst();if(!Y)return X.json({error:"Organization not found"},404);let J=qB4(G,Y.id),W=YL$({tools:J}),K=new URL(X.req.url),U=X.req.path.indexOf("/registry"),F=U>=0?X.req.path.slice(U+9):"",H=new URL(F||"/",K.origin);K.searchParams.forEach((B,L)=>{H.searchParams.set(L,B)});let N=new Request(H.toString(),{method:X.req.method,headers:X.req.raw.headers,body:X.req.method!=="GET"&&X.req.method!=="HEAD"?X.req.raw.body:void 0}),O={organizationId:Y.id,db:Z,MESH_REQUEST_CONTEXT:{},MESH_APP_DEPLOYMENT_ID:"public-registry",IS_LOCAL:!1};return await W.fetch(N,O,X)}}var IB4=3600000,TB4=500,WL$;var UL$=D(()=>{JL$();QB1();iv1();O9();WL$=Pf({ttlMs:IB4,maxSize:TB4,updateRecencyOnGet:!0})});import{sql as MB4}from"kysely";import{randomUUID as FL$}from"crypto";import{z as kB4}from"zod";async function SB4($){let Z=new Date().toISOString(),G=FL$(),X=J4.SELF($.organizationId),Q="registry.publish_request.created",Y={requestId:$.request.id,requestedId:$.request.requested_id,title:$.request.title,status:$.request.status,createdAt:$.request.created_at,requester:{name:$.request.requester_name,email:$.request.requester_email}};await $.db.insertInto("events").values({id:G,organization_id:$.organizationId,type:"registry.publish_request.created",source:X,specversion:"1.0",subject:$.request.id,time:Z,datacontenttype:"application/json",dataschema:null,data:JSON.stringify(Y),cron:null,status:"pending",attempts:0,last_error:null,next_retry_at:null,created_at:Z,updated_at:Z}).execute();let J=await $.db.selectFrom("event_subscriptions").select(["id"]).where("organization_id","=",$.organizationId).where("enabled","=",1).where("event_type","=","registry.publish_request.created").where((W)=>W.or([W("publisher","is",null),W("publisher","=",X)])).execute();if(J.length>0)await $.db.insertInto("event_deliveries").values(J.map((W)=>({id:FL$(),event_id:G,subscription_id:W.id,status:"pending",attempts:0,last_error:null,delivered_at:null,next_retry_at:null,created_at:Z}))).execute();try{await MB4`SELECT pg_notify('mesh_events', ${G})`.execute($.db)}catch{}}async function CB4($,Z){let X=(await $.selectFrom("organization").select(["id"]).where("id","=",Z).execute())[0];if(X?.id)return X.id;return(await $.selectFrom("organization").select(["id"]).where("slug","=",Z).execute())[0]?.id??null}async function _B4($,Z){let G=await $.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","=",Z).where("virtual_mcp_plugin_configs.plugin_id","=",JE).execute();for(let X of G){let Q=X.settings,Y=typeof Q==="string"?(()=>{try{return JSON.parse(Q)}catch{return{}}})():Q??{};if(Y.acceptPublishRequests===!0){let J=Y.rateLimitWindow==="minute"?"minute":"hour",W=Y.rateLimitMax,K=typeof W==="number"&&Number.isFinite(W)&&W>=1?Math.floor(W):NL$;return{acceptPublishRequests:!0,requireApiToken:Y.requireApiToken===!0,rateLimitEnabled:Y.rateLimitEnabled===void 0?HL$:Y.rateLimitEnabled===!0,rateLimitWindow:J,rateLimitMax:K}}}return{acceptPublishRequests:!1,requireApiToken:!1,rateLimitEnabled:HL$,rateLimitWindow:VB4,rateLimitMax:NL$}}async function bB4($,Z,G){let X=G==="minute"?60000:3600000,Q=new Date(Date.now()-X).toISOString(),Y=await $.selectFrom("private_registry_publish_request").select((J)=>J.fn.countAll().as("count")).where("organization_id","=",Z).where("created_at",">=",Q).executeTakeFirst();return Number(Y?.count??0)}async function vB4($,Z,G,X){let Q=await $.selectFrom("private_registry_item").select(["id","title"]).where("organization_id","=",Z).where((Y)=>Y.or([Y("id","=",G),Y("title","=",X)])).executeTakeFirst();return Q?{id:String(Q.id),title:String(Q.title)}:null}function OL$($){let{db:Z,db:G}=$,X=new Wv(G),Q=new Kv(G);return async(Y)=>{let J=Y.req.param("orgRef")??Y.req.param("org");if(!J)return Y.json({error:"Organization not found"},404);let W=await CB4(Z,J);if(!W)return Y.json({error:"Organization not found"},404);let K=await _B4(Z,W);if(!K.acceptPublishRequests)return Y.json({error:"Publish requests are not enabled for this registry."},403);if(K.requireApiToken){let O=Y.req.header("Authorization"),B=O?.startsWith("Bearer ")?O.slice(7).trim():null;if(!B)return Y.json({error:"API key required. Use Authorization: Bearer <key>"},401);if(!await Q.validate(W,B))return Y.json({error:"Invalid API key"},401)}if(K.rateLimitEnabled){if(await bB4(G,W,K.rateLimitWindow)>=K.rateLimitMax)return Y.json({error:"Too many publish requests. Please try again later.",retryAfterSeconds:K.rateLimitWindow==="minute"?60:3600},429)}let U;try{U=await Y.req.json()}catch{return Y.json({error:"Invalid JSON body"},400)}let F=xs0.safeParse(U);if(!F.success)return Y.json({error:"Invalid publish request payload",details:kB4.treeifyError(F.error)},400);let H=await vB4(G,W,F.data.data.id,F.data.data.title);if(H)return Y.json({error:"A registry item with the same id or title already exists. Please use a different name/id.",conflict:H},409);let N=await X.createOrUpdate({organization_id:W,requested_id:F.data.data.id,title:F.data.data.title,description:F.data.data.description??null,_meta:F.data.data._meta,server:F.data.data.server,requester_name:F.data.requester?.name??null,requester_email:F.data.requester?.email??null});try{await SB4({db:Z,organizationId:W,request:N})}catch(O){console.warn("[private-registry] failed to emit publish-request event:",O)}return E$.capture({distinctId:F.data.requester?.email??`org:${W}`,event:"registry_publish_request_submitted",groups:{organization:W},properties:{organization_id:W,request_id:N.id,requested_id:N.requested_id,title:F.data.data.title,requester_email:F.data.requester?.email??null}}),Y.json({id:N.id,requested_id:N.requested_id,status:N.status},201)}}var HL$=!0,VB4="hour",NL$=100;var BL$=D(()=>{H5();S8();Rx();nv1();pv1();O9()});var DL$={};n4(DL$,{createPublishRequestHandler:()=>OL$,createPublicMCPHandler:()=>KL$});var LL$=D(()=>{UL$();BL$()});var Lm1={};n4(Lm1,{watchHandler:()=>PL$,getProxyDispatch:()=>yB4,createApp:()=>iB4});import{PrometheusSerializer as xB4}from"@opentelemetry/exporter-prometheus";import{DBOS as et1}from"@dbos-inc/dbos-sdk";import{oAuthDiscoveryMetadata as cB4,oAuthProtectedResourceMetadata as lB4}from"better-auth/plugins";async function fB4($){let Z=$.connect(),G;try{G=await Promise.race([Z,wL$(EL$)])}catch{return Z.then((X)=>X.release(!0)).catch(()=>{}),!1}try{return await Promise.race([G.query("SELECT 1"),wL$(EL$)]),G.release(),!0}catch{return G.release(!0),!1}}function wL$($){return new Promise((Z,G)=>setTimeout(()=>G(Error("pg health-check timeout")),$))}function yB4(){if(!$o1)throw Error("getProxyDispatch() called before createApp() or without NATS \u2014 proxy dispatch unavailable");return $o1}async function gB4($,Z){let{items:G}=await $.storage.connections.list(Z,{where:{field:["connection_url"],operator:"like",value:`${fj0}%`},limit:1}),X=G[0];if(!X?.configuration_state)return null;return X.configuration_state.project_locator}function hB4($){let Z=new URLSearchParams;if($){let[G,X]=$.split("/");if(G)Z.set("workspace_hint",G);if(X)Z.set("project_hint",X)}else Z.set("auto_personal","true");return Z.set("force_new","true"),Z}async function iB4($={}){let Z=$.database??z6(),G=!1;if(YB1&&YB1.isRunning())Promise.resolve(YB1.stop()).catch((J1)=>{console.error("[EventBus] Error stopping previous worker:",J1)}),fG.stop().catch((J1)=>{console.error("[SSEHub] Error stopping previous broadcast (HMR cleanup):",J1)});let X,Q,Y,J=new Rt1,W,K,U,F,H=null,N=null;if($.eventBus)X=$.eventBus,W=It1(),Q={get:async()=>null,set:async()=>{},invalidate:async()=>{},teardown:()=>{}},Y=new Am,K={start:async()=>{},broadcast:()=>{},publishControlFrame:()=>{},stop:async()=>{}},F=xB$(),U={init:async()=>{},pump:(J1)=>{(async()=>{let e1=J1.getReader();try{while(!0){let{done:w0}=await e1.read();if(w0)break}}catch{}finally{e1.releaseLock()}})()},publishRawChunk:async()=>!1,createTailStream:async()=>null,purge:()=>{},teardown:()=>{}};else{N=AB$(),N.init(b0().natsUrls);let J1=sv1()?new l_1({getJetStream:()=>N.getJetStream()}):null;J1?.init().catch(()=>{}),Q=J1;let e1=new lh1({getJetStream:()=>N.getJetStream()});e1.init().catch(()=>{}),Y=e1,W=It1({getConnection:()=>N.getConnection()}),K=new Tt1({getConnection:()=>N.getConnection()}),U=new Mt1({getConnection:()=>N.getConnection(),getJetStream:()=>N.getJetStream()});let w0=new kt1({getJetStream:()=>N.getJetStream()});w0.init().catch(()=>{}),F=w0,H=new bt1({getJetStreamManager:async()=>{let C1=N.getConnection();return C1?C1.jetstreamManager():null},getJetStream:()=>N.getJetStream()}),X=gQ$(Z,N),N.onReady(()=>{if(J1?.init().catch((C1)=>{console.error("[McpListCache] Deferred init failed:",C1)}),e1.init().catch((C1)=>{console.error("[ConnectionCircuitStore] Deferred init failed:",C1)}),W.start(),Ul0(()=>N.getConnection()),U.init().catch((C1)=>{console.warn("[StreamBuffer] Deferred init failed, late-join disabled:",C1)}),w0.init().catch((C1)=>{console.warn("[LinkClaimRegistry] Deferred init failed, link dispatch disabled:",C1)}),H.init().catch((C1)=>{console.warn("[LinkWorkQueue] Deferred init failed, pull-transport work queue disabled:",C1)}),process.env.LINK_DURABLE_PROJECTOR==="true")(async()=>{let C1=N.getConnection(),w$=N.getJetStream();if(!C1||!w$)return;let s$=await C1.jetstreamManager(),{startDurableProjector:I6}=await Promise.resolve().then(() => (BD$(),OD$));await I6({jsm:s$,js:w$,messageParts:new Dv(Z.db).messageParts(),resolveRunOrg:async(D6)=>{let k8=await Z.db.selectFrom("threads").select(["organization_id","message_storage_version"]).where("id","=",D6).executeTakeFirst();return k8?{orgId:k8.organization_id,version:k8.message_storage_version??1}:null}})})().catch((C1)=>{console.warn("[DurableProjector] Deferred init failed:",C1)})})}if(YB1=X,Tf)await Tf();d_1(Q),dh1(Y);let O=new Dv(Z.db);if(process.env.LINK_WS_UPLINK==="true")Dt1((J1)=>Ht1(J1,h6.api)),Et1(({userSub:J1,send:e1})=>{let w0=new Map;return{sessionFor:(C1)=>{let w$=w0.get(C1);if(!w$)w$=(async()=>{let s$=await Z.db.selectFrom("threads").select(["organization_id"]).where("id","=",C1).executeTakeFirst();if(!s$)return null;if(!await Z.db.selectFrom("member").select(["role"]).where("userId","=",J1).where("organizationId","=",s$.organization_id).executeTakeFirst())return null;let D6=await O.getRunFence(C1);if(D6===null)return null;return xO$({fenceOk:(k8)=>vO1(D6,k8),cancelRequested:async()=>xO1(await O.getCancelRequestedAt(C1)),publish:async(k8)=>{await U.publishRawChunk(C1,k8)},send:(k8)=>e1(JSON.stringify(k8))})})(),w0.set(C1,w$);return w$}}});let L=new Vt1({storage:O,streamBuffer:U,sseHub:fG}),w=new cl(Z.db),z=new St1(w);z.start(),K.start((J1)=>{L.execute({type:"CANCEL",taskId:J1}).catch((e1)=>{console.error("[Decopilot] CancelBroadcast execute failed:",e1)})}).catch((J1)=>{console.error("[Decopilot] CancelBroadcast start failed:",J1)}),N?.onReady(()=>{K.start().catch((J1)=>{console.error("[CancelBroadcast] Deferred start failed:",J1)})}),U.init().catch((J1)=>{console.warn("[Decopilot] StreamBuffer init failed, attach/late-join disabled:",J1)}),Tf=async()=>{await L.stopAll(),L.dispose(),z.dispose(),K.stop().catch(()=>{}),U.teardown(),Q?.teardown(),J.teardown(),W.teardown(),Fl0(),Y.teardown(),d_1(null),dh1(null)};let j=new _0;if(j.use("*",UM1({enabled:(J1)=>qs(J1,"debug")==="1"})),j.use("*",PB1),j.use("/*",PP0({origin:(J1)=>{if(J1.includes("localhost")||J1.includes("127.0.0.1"))return J1;return J1},credentials:!0,allowMethods:["GET","POST","PUT","DELETE","OPTIONS"],allowHeaders:["Content-Type","Authorization","mcp-protocol-version"],exposeHeaders:["WWW-Authenticate"]})),j.use("*",async(J1,e1)=>{if(await e1(),J1.req.path.includes("/files/"))return;if(J1.req.path.includes("/fs/")&&J1.req.path.endsWith("/read"))return;J1.header("X-Frame-Options","DENY"),J1.header("Content-Security-Policy","frame-ancestors 'none'")}),!b0().noTui)j.use("*",QD$());j.use("*",async(J1,e1)=>{if(await e1(),Cf(J1.req.path))return;if(J1.res.status>=500){let C1=await J1.res.clone().text();console.error(`[5xx Response] ${J1.req.method} ${J1.req.path} - ${J1.res.status}:`,C1)}}),j.get(bX.HEALTH,(J1)=>{if(G)return J1.json({status:"shutting_down"},503);return J1.json({status:"ok"})}),j.get(bX.HEALTH_LIVE,(J1)=>{return J1.json({status:"ok"})}),j.get(bX.HEALTH_READY,async(J1)=>{if(G)return J1.json({status:"shutting_down"},503);let e1={};if(e1.postgres={status:await fB4(Z.pool)?"up":"down"},N)e1.nats=N.isConnected()?{status:"up"}:{status:"down"};else e1.nats={status:"down"};let w0=e1.postgres.status==="up",C1=w0?200:503;return J1.json({status:w0?"ready":"not_ready",services:e1},C1)}),j.get(bX.METRICS,async(J1)=>{try{let e1=await TB1.collect(),w0=uB4.serialize(e1.resourceMetrics);return J1.text(w0,200,{"Content-Type":"text/plain; version=0.0.4; charset=utf-8"})}catch(e1){return console.error("Failed to collect metrics:",e1),J1.text("# Error collecting metrics",500)}}),j.route("/api/config",LB$),j.route("/api/auth/custom",WY$),j.all("/api/auth/*",async(J1)=>{return await h6.handler(J1.req.raw)});let P=lp0();P.use("/.well-known/oauth-protected-resource/mcp/:connectionId",VO),P.use("/mcp/:connectionId/.well-known/oauth-protected-resource",VO),j.route("/",P),j.get("/.well-known/oauth-protected-resource/api/:org/mcp/:connectionId",Zm),j.route("/",np0()),j.use("/oauth-proxy/:connectionId/*",VO),j.all("/oauth-proxy/:connectionId/*",zL$);let R=async(J1)=>{let w0=await dB4()(J1.req.raw),C1=await w0.json();return Response.json(C1,w0)};j.use("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",VO),j.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",R);let A=async(J1)=>{let w0=await mB4()(J1.req.raw),C1=await w0.json();return Response.json(C1,w0)};j.get("/.well-known/oauth-authorization-server/*/:gateway?/:connectionId?",A);let M=RQ$({ttlMs:120000}),S=await kp0({db:Z.db,auth:h6,encryption:{key:b0().encryptionKey},observability:{tracer:jF,meter:m6},eventBus:X,modelListCache:J,providerKeyCache:W,memberRoleCache:M,linkClaimRegistry:F,publishLinkControlFrame:(J1,e1)=>K.publishControlFrame(J1,e1)});mJ.set(S);let k=new sB(b0().encryptionKey);SC0(Z.db,k);let C=Math.random()*2000;new Promise((J1)=>setTimeout(J1,C)).then(()=>X.start()).then(()=>{return _C0({db:Z.db,publish:async(J1,e1)=>{await X.publish(J1,"",e1)}})}).catch((J1)=>{console.error("[EventBus] Error during startup:",J1)}),fO0({db:Z.db,baseUrl:A3()});let u=u$1(Z.db),f=new Sl(Z.db),y=rB$({db:Z.db});yh1({storage:u,meshContextFactory:y}),Ih1({dispatchRunFn:fU$,meshContextFactory:y,deps:{runRegistry:L,cancelBroadcast:K,streamBuffer:U,sseHub:fG},pullDispatchFn:gU$,workQueue:H??void 0}),tB$(),yO0();let Z1=async(J1,e1,w0)=>{let C1=await u.findById(J1,e1);if(!C1)throw Error("Automation not found");return uh1({automationId:C1.id,organizationId:C1.organization_id,triggerId:null})},d=new Qf(u,({automation:J1,trigger:e1,contextMessages:w0,idempotencyKey:C1})=>jm({automationId:J1.id,organizationId:J1.organization_id,triggerId:e1.id,contextMessages:w0},{idempotencyKey:C1}));if("setAutomationEventDispatcher"in X)X.setAutomationEventDispatcher(d);let p=[lY(),YS(),eW()];for(let J1 of p)aO1(J1).then(()=>{}).catch((e1)=>console.error("[monitoring] Retention cleanup failed:",e1));let Q1=()=>Z.db.deleteFrom("apikey").where("expiresAt","<",new Date).execute().then(()=>{}).catch((J1)=>console.error("[auth] Expired API key cleanup failed:",J1));Q1(),setInterval(Q1,86400000).unref(),j.use("*",async(J1,e1)=>{if(zB1(J1.req.path))return e1();let w0={measure:async(w$,s$)=>{sQ(J1,w$);try{return await s$()}finally{iX(J1,w$)}}},C1=await mJ.create(J1.req.raw,{timings:w0});C1.automationRunner=Z1,J1.set("meshContext",C1);try{await e1()}finally{let w$=C1.pendingRevalidations;if(w$.length>0)Promise.race([Promise.allSettled(w$),new Promise((I6)=>setTimeout(I6,30000))]).catch((I6)=>console.error("[mesh] revalidation cleanup error:",I6))}}),j.use("/api/:org/decopilot/*",mV),j.use("/api/:org/v1/*",mV),j.use("/api/:org/files/*",mV),j.use("*",async(J1,e1)=>{let w0=J1.req.path;if(w0.startsWith("/api/org-sso/")||w0.startsWith("/api/auth/")||w0.startsWith("/api/tools/management")||w0.startsWith("/oauth-proxy/"))return e1();let C1=J1.get("meshContext");if(!C1?.organization?.id||!C1?.auth?.user?.id)return e1();if(!(await C1.storage.orgSsoConfig.getByOrgId(C1.organization.id))?.enforced)return e1();if(!await C1.storage.orgSsoSessions.isValid(C1.auth.user.id,C1.organization.id))return J1.json({error:"SSO authentication required for this organization"},403);return e1()});let G1=new _0;G1.use("*",CQ({mountPath:"/api/org-sso"})),G1.route("/",tH1()),j.route("/api/org-sso",G1),j.get("/api/tools/management",(J1)=>{return J1.json({tools:HM1,grouped:hB()})}),j.use("/mcp/*",async(J1,e1)=>{sQ(J1,"mcp");try{return await e1()}finally{iX(J1,"mcp")}});let U1=async(J1,e1)=>{let w0=J1.var.meshContext;if(!w0.auth.user?.id&&!w0.auth.apiKey?.id){let C1=new URL(J1.req.url);return J1.res=new Response(null,{status:401,headers:{"WWW-Authenticate":`Bearer realm="mcp",resource_metadata="${C1.origin}${C1.pathname}/.well-known/oauth-protected-resource"`}})}return await e1()};if(j.use("/mcp/:connectionId?",U1),j.use("/mcp/gateway/:virtualMcpId?",U1),j.use("/mcp/virtual-mcp/:virtualMcpId?",U1),j.use("/mcp/self",U1),HJ()){let{mountDevRoutes:J1}=(SD$(),UB1(VD$));J1(j,U1)}let m=new _0;m.use("*",CQ({mountPath:"/mcp"})),m.route("/",t41()),j.route("/mcp",m);let K1=new _0;K1.use("*",CQ({mountPath:"/mcp/self"})),K1.route("/",VO1()),j.route("/mcp/self",K1);let o=new _0;o.use("*",CQ({mountPath:"/mcp"})),o.route("/",a41()),j.route("/mcp",o),j.use("/api/:org/models/*",async(J1,e1)=>{sQ(J1,"llm_models");try{return await e1()}finally{iX(J1,"llm_models")}});let H1=qn1({cancelBroadcast:K,streamBuffer:U,runRegistry:L,linkClaimRegistry:F});if(j.route("/api",H1),N!=null)$o1=GB$({nats:{publish(e1,w0){let C1=N?.getConnection();if(!C1){console.warn("[link-proxy.nats] publish skipped: nats unavailable",{subject:e1,bytes:w0.byteLength});return}C1.publish(e1,w0)},subscribe(e1,w0){let C1=N?.getConnection();if(!C1)return console.warn("[link-proxy.nats] subscribe skipped: nats unavailable",{subject:e1}),()=>{};let w$=C1.subscribe(e1);return(async()=>{for await(let s$ of w$)try{w0(s$.data)}catch{}})(),()=>{try{w$.unsubscribe()}catch{}}}},presence:{watch:(e1,w0)=>F.watch(e1,(C1)=>w0(C1))}});if(j.get("/api/links/me",async(J1)=>{let e1=J1.req.header("authorization")??"",w0=/^Bearer\s+(.+)$/i.exec(e1),C1=null;if(w0){let s$=(w0[1]??"").trim();C1=await Ht1(s$,h6.api)}else C1=J1.get("meshContext")?.auth?.user?.id??null;if(!C1)return J1.json({error:"unauthorized"},401);let w$=await F.get(C1);if(!w$)return J1.json(null);return J1.json({machineId:w$.machineId,hostname:w$.hostname,cliVersion:w$.cliVersion,previewPort:w$.previewPort,connectedAt:w$.connectedAt})}),H!=null)j.route("/api",mO$({linkClaimRegistry:F,workQueue:H}));if(N!=null)j.route("/api",pO$({getConnection:()=>N.getConnection()})),j.route("/api",ZB$({getConnection:()=>N.getConnection(),claimRegistry:F}));j.use("/api/:org/files/*",mV),j.route("/api",jB$);let E1=new _0;E1.use("*",CQ({mountPath:"/api"})),E1.route("/",SO1()),j.route("/api",E1),j.route("/api",OB$);let L1=new _0;L1.use("*",CQ({mountPath:"/api"})),L1.route("/",CO1({tokenStorage:f,automationEventDispatcher:d})),j.route("/api",L1);let i1=new _l(Z.db),V1=new _0;V1.use("*",CQ({mountPath:"/api"})),V1.route("/",kO1({kvStorage:i1})),j.route("/api",V1),j.use("/org/:organizationId/events/:type",VO),j.post("/org/:organizationId/events/:type",jL$);let I1=new _0;I1.use("*",CQ({mountPath:"/api"})),I1.route("/",oN1()),j.route("/api",I1),j.route("/api/deco-sites",WF$()),j.route("/api/deco-apps",WB$());let k1=new _0;k1.use("*",CQ({mountPath:"/api/deco-sites"})),k1.route("/",aN1()),j.route("/api/deco-sites",k1);let p1=new _0;p1.use("*",CQ({mountPath:"/api/vm-events"})),p1.route("/",YB$()),j.route("/api/vm-events",p1);let{createPublishRequestHandler:e,createPublicMCPHandler:Y1}=await Promise.resolve().then(() => (LL$(),DL$)),r={db:Z.db,vault:{encrypt:(J1)=>k.encrypt(J1),decrypt:(J1)=>k.decrypt(J1)}},t=e(r),y1=Y1(r);j.use("/org/:orgRef/registry/publish-request",VO),j.post("/org/:orgRef/registry/publish-request",t),j.use("/org/:orgSlug/registry/*",VO),j.all("/org/:orgSlug/registry/*",y1),j.post("/api/:org/registry/publish-request",t),j.all("/api/:org/registry/*",y1);let D1=CO$({kvStorage:i1,runRegistry:L,streamBuffer:U,sseHub:fG,cancelBroadcast:K,tokenStorage:f,automationEventDispatcher:d,mountDevAssets:HJ(),mcpAuth:U1,oauthProxyHandler:zL$,eventsHandler:jL$,watchHandler:PL$,betterAuthProtectedResourceHandler:R,getNatsConnection:()=>N?.getConnection()??null});return j.route("/api/:org",D1),VC0(j,{db:Z.db,vault:k}),j.notFound((J1)=>{return J1.json({error:"Not Found",path:J1.req.path},404)}),j.onError(tU$),Object.assign(j,{markShuttingDown:()=>{G=!0},shutdown:async()=>{if(console.log("[shutdown] Stopping workers..."),await Promise.allSettled([X.isRunning()?X.stop():Promise.resolve(),fG.stop(),Tf?Promise.resolve(Tf()).finally(()=>{Tf=null}):Promise.resolve()]),N)await N.drain().catch((J1)=>console.error("[shutdown] NATS drain error:",J1));console.log("[shutdown] Flushing telemetry..."),await bQ().catch((J1)=>console.error("[shutdown] Telemetry flush error:",J1)),console.log("[shutdown] Closing database..."),await nR0(Z).catch((J1)=>console.error("[shutdown] Database close error:",J1)),console.log("[shutdown] Cleanup complete.")},initDbos:async()=>{await et1.registerQueue(cL,{partitionQueue:!0,concurrency:vh1,minPollingIntervalMs:xh1}),await et1.registerQueue(y41,{partitionQueue:!0,concurrency:Rh1}),await Sn1(u),await Promise.allSettled(["automations-gate","automations-global"].map((J1)=>et1.deleteQueue(J1))),await fh1(Z.pool),Dq0().catch((J1)=>{console.error("[studio-pack-backfill] failed:",J1)}),gO0().catch((J1)=>{console.error("[org-fs] public-sets boot sync kick failed:",J1)})}})}var EL$=5000,$o1=null,YB1=null,Tf=null,zL$=async($)=>{let Z=$.req.param("connectionId");if(!Z)return $.json({error:"Missing connectionId"},400);let G=$.req.path.split("/").filter(Boolean),X=G[G.length-1],Q=$.get("meshContext");if(!Q)Q=await mJ.create($.req.raw),$.set("meshContext",Q);let Y=$.req.param("org")?Q.organization?.id:void 0,J=await Q.storage.connections.findById(Z,Y);if(!J?.connection_url)return $.json({error:"Connection not found"},404);let W=await lv(J.connection_url),K,U=new URL(J.connection_url);if(W.ok)K=(await W.json()).authorization_servers?.[0];if(!K)K=U.origin;let F=await Gm(K);if(!F.ok)return $.json({error:"Failed to get auth server metadata"},502);let H=await F.json(),N;if(X==="authorize")N=H.authorization_endpoint;else if(X==="token")N=H.token_endpoint;else if(X==="register")N=H.registration_endpoint;if(!N)return $.json({error:`Unknown OAuth endpoint: ${X}`},404);let O=new URL(N),B=new URL($.req.url);if(O.search=B.search,X==="authorize"){let k=O.searchParams.get("redirect_uri");if(k){let C=b0().baseUrl??B.origin;try{let u=new URL(k),f=new URL(C);if(!(u.origin===f.origin||u.hostname==="localhost"))return $.json({error:"invalid_request",error_description:"redirect_uri is not allowed"},400)}catch{return $.json({error:"invalid_request",error_description:"redirect_uri is malformed"},400)}O.searchParams.set("redirect_uri",k)}if(O.searchParams.has("resource"))O.searchParams.set("resource",J.connection_url);if(yj0(J.connection_url))try{let C=await gB4(Q,J.organization_id),u=hB4(C);for(let[f,y]of u)O.searchParams.set(f,y)}catch(C){console.warn("[oauth-proxy] Failed to get smart OAuth params, proceeding without:",C)}return $.redirect(O.toString(),302)}let L={Accept:$.req.header("Accept")||"application/json"},w=$.req.header("Content-Type");if(w)L["Content-Type"]=w;let z=$.req.header("Authorization");if(z)L.Authorization=z;let j,P=null,R=null;if($.req.method!=="GET"&&$.req.method!=="HEAD")if(X==="token"&&w?.includes("application/x-www-form-urlencoded")){if(z?.toLowerCase().startsWith("basic "))try{let y=atob(z.slice(6).trim()),Z1=y.indexOf(":");if(Z1!==-1){let d=decodeURIComponent(y.slice(0,Z1)),p=decodeURIComponent(y.slice(Z1+1));P=d||null,R=p||null}}catch{}let k=await $.req.formData();if(k.has("resource"))k.set("resource",J.connection_url);let C=k.get("client_id"),u=k.get("client_secret");if(typeof C==="string"&&C)P=C;if(typeof u==="string"&&u)R=u;let f=new URLSearchParams;for(let[y,Z1]of k.entries())f.append(y,Z1.toString());j=f.toString()}else if(X==="register"&&w?.toLowerCase().includes("application/json")){let k=await Q.db.selectFrom("organization").select(["id","slug","name"]).where("id","=",J.organization_id).executeTakeFirst(),C=await $.req.text(),u={};try{u=C?JSON.parse(C):{}}catch{j=C}let f=typeof u==="object"&&u!==null&&!Array.isArray(u);if(j===void 0&&!f)j=C;if(j===void 0){let y=u,Z1=y.metadata&&typeof y.metadata==="object"?y.metadata:{};y.metadata={...Z1,organization_id:J.organization_id,...k?.slug?{organization_slug:k.slug}:{},...k?.name?{organization_name:k.name}:{}},j=JSON.stringify(y),L["Content-Type"]="application/json"}}else j=$.req.raw.body??void 0;let A=await fetch(O.toString(),{method:$.req.method,headers:L,body:j,duplex:"half",redirect:"manual"}),M=new Headers,S=["connection","keep-alive","transfer-encoding","content-encoding","content-length"];for(let[k,C]of A.headers.entries())if(!S.includes(k.toLowerCase()))M.set(k,C);if(X==="token"&&A.ok){let k=await A.text();try{let C=JSON.parse(k);if(typeof C.access_token==="string"&&C.access_token){let u=typeof C.expires_in==="number"?new Date(Date.now()+C.expires_in*1000):null,f=null;try{f=await dv(J.connection_url)??N}catch{f=N}let y={connectionId:Z,accessToken:C.access_token,refreshToken:typeof C.refresh_token==="string"?C.refresh_token:null,scope:typeof C.scope==="string"?C.scope:null,expiresAt:u,clientId:P,clientSecret:R,tokenEndpoint:f};await new V9(Q.db,Q.vault).upsert(y)}}catch(C){console.error("[oauth-proxy] failed to persist downstream token:",C)}return new Response(k,{status:A.status,statusText:A.statusText,headers:M})}return new Response(A.body,{status:A.status,statusText:A.statusText,headers:M})},jL$=async($)=>{let Z=$.var.meshContext,G=Z.organization?.id??$.req.param("organizationId");if(!G)return $.json({error:"organization id missing"},400);return await Z.eventBus.publish(G,J4.SELF(G),{data:await $.req.json(),type:`public:${$.req.param("type")}`,subject:$.req.query("subject"),deliverAt:$.req.query("deliverAt"),cron:$.req.query("cron")}),$.json({success:!0})},PL$=async($)=>{let Z=$.var.meshContext;if(!(Z.auth.user?.id??Z.auth.apiKey?.userId))return $.json({error:"Unauthorized"},401);let X=Z.organization?.id;if(!X)return $.json({error:"organization id missing"},400);let Q=$.req.query("types"),Y=Q?Q.split(",").map((W)=>W.trim()).filter(Boolean):null,J=crypto.randomUUID();return cY($,async(W)=>{if(await W.writeSSE({event:"connected",data:JSON.stringify({listenerId:J,organizationId:X,typePatterns:Y,connectedAt:new Date().toISOString()})}),!fG.add({id:J,organizationId:X,typePatterns:Y?.length?Y:null,push:(F)=>{W.writeSSE({id:F.id,event:F.type,data:JSON.stringify(F)}).catch(()=>{fG.remove(X,J)})}})){await W.writeSSE({event:"error",data:JSON.stringify({error:"Too many connections",message:"SSE connection limit reached. Try again later."})});return}let U=setInterval(()=>{W.writeSSE({event:"keepalive",data:""}).catch(()=>{clearInterval(U)})},30000);await new Promise((F)=>{W.onAbort(()=>{clearInterval(U),fG.remove(X,J),F()})})})},uB4,dB4=()=>lB4(h6),mB4=()=>cB4(h6);var Em1=D(()=>{$6();hO0();cX();sC();S8();x4();KM1();AP0();FM1();cU();cv();OJ();lm1();x9();om1();em1();nU$();Mn1();EW();L41();kn1();oU$();Vn1();_O$();fO$();wt1();iO$();tO$();Pt1();JB$();vn1();KB$();o41();Xm();BB$();s41();ap1();Zt1();EB$();PB$();$t1();ep1();fn();M11();Ne();RB$();JQ();X81();vl();ih1();IB$();qB$();kB$();bB$();fB$();Pt1();iB$();Wx1();Ox1();oB$();Re();Ct1();_X();Cn1();h41();Re();Rn1();yv1();gv1();aB$();ZD$();Z_();YD$();eV();lm1();uB4=new xB4});var TL$={};n4(TL$,{resolveClientDir:()=>sB4,resolveAssetPathWithTraversalCheck:()=>IL$,isPathWithinDirectory:()=>RL$,createAssetHandler:()=>eB4});import{resolve as Mn,dirname as nB4,join as pB4,extname as tB4,basename as oB4,sep as AL$}from"path";function rB4($,Z){if($===Z||oB4($)==="index.html")return{"Cache-Control":"no-cache"};if($.includes(`${AL$}assets${AL$}`))return{"Cache-Control":"public, max-age=31536000, immutable"};return{}}function RL$($,Z){let G=Mn(Z),X=Mn($);return X===G||X.startsWith(G+"/")}function IL$({requestPath:$,clientDir:Z}){let G=$.startsWith("/")?$.slice(1):$,X=Mn(Z,G);if(!RL$(X,Z))return null;return X}function sB4($,Z="../client"){let G=new URL($),X=nB4(G.pathname);return Mn(X,Z)}function eB4($={}){let{env:Z="production",clientDir:G=aB4,isServerPath:X=()=>!1}=$;if(Z==="development")return async function(Y){return null};return async function(Y){if(Y.method!=="GET")return null;let J=new URL(Y.url),W;try{W=decodeURIComponent(J.pathname)}catch{return null}if(X(W))return null;let K=IL$({requestPath:W,clientDir:G});if(!K)return null;let U=pB4(K,"index.html"),F=Mn(G,"index.html"),H=Y.headers.get("accept"),O=H?.includes("text/html")||H?.includes("*/*")&&["",".html"].includes(tB4(K))?[U,F]:[];for(let B of[K,...O])try{let L=Bun.file(B);if(await L.exists())return new Response(L,{headers:rB4(B,F)})}catch{}if(W.includes("/assets/"))return new Response("Not Found",{status:404,headers:{"Cache-Control":"no-store"}});return null}}var aB4="./dist/client";var qL$=()=>{};var ML$={};n4(ML$,{tryUpgradePreviewWs:()=>JD4,tryHandlePreviewHttp:()=>YD4,previewWebSocketHandler:()=>WD4,parsePreviewBaseDomain:()=>QD4,isPreviewWsData:()=>JB1,extractHandleFromHost:()=>Zo1});function GD4($){if($.method!=="GET")return!1;return($.headers.get("accept")??"").includes("text/html")}function XD4(){return new Response(ZD4,{status:503,headers:{"content-type":"text/html; charset=utf-8","cache-control":"no-store","retry-after":"1","access-control-allow-origin":"*"}})}function QD4($){if(!$||$.trim()==="")return null;let Z=$.includes("{handle}")?$.replace("{handle}","__handle__"):$,G;try{G=new URL(Z)}catch{return null}let X=G.hostname;if($.includes("{handle}")){let Q=X.indexOf(".");if(Q<=0||Q===X.length-1)return null;return X.slice(Q+1)}return X}function Zo1($,Z){if(!$||!Z)return null;let G=$.indexOf(":"),X=(G>=0?$.slice(0,G):$).toLowerCase(),Y=`.${Z.toLowerCase().replace(/^\.+|\.+$/g,"")}`;if(!X.endsWith(Y))return null;let J=X.slice(0,X.length-Y.length);if(!J||J.includes("."))return null;return J}async function YD4($,Z){let G=Zo1($.headers.get("host"),Z.baseDomain);if(!G)return null;let X=await Z.getRunner();if(!X)return Vn(503,"preview proxy not configured");let Q=await X.proxyPreviewRequest(G,$);if(Q.headers.get(fV)&&GD4($))return XD4();return Q.headers.delete(fV),Q}function Vn($,Z){return new Response(JSON.stringify({error:Z}),{status:$,headers:{"content-type":"application/json","access-control-allow-origin":"*"}})}function JB1($){return typeof $==="object"&&$!==null&&$.kind==="preview"}async function JD4($,Z,G){if(($.headers.get("upgrade")??"").toLowerCase()!=="websocket")return null;let X=Zo1($.headers.get("host"),G.baseDomain);if(!X)return null;let Q=await G.getRunner();if(!Q)return Vn(503,"preview proxy not configured");let Y=await Q.resolvePreviewUpstreamUrl(X);if(!Y)return Vn(404,"sandbox not found");let J=new URL($.url);if(J.pathname.startsWith("/_sandbox")||J.pathname.startsWith("/_decopilot_vm"))return Vn(404,"not found");let W=`${Y.replace(/^http/,"ws")}${J.pathname}${J.search}`,K=$.headers.get("sec-websocket-protocol"),U=K?K.split(",").map((N)=>N.trim()).filter(Boolean):[],F={kind:"preview",upstreamUrl:W,upstreamProtocols:U,pending:[],upstream:null,closed:!1};if(!Z.upgrade($,{data:F}))return Vn(426,"upgrade failed");return}function kn($,Z,G,X){if(Z.closed)return;Z.closed=!0;try{$.close(G,X)}catch{}try{Z.upstream?.close()}catch{}}var $D4=256,ZD4='<!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>',WD4;var kL$=D(()=>{Nm1();WD4={open($){let Z=$.data;if(!JB1(Z))return;let G;try{G=Z.upstreamProtocols.length>0?new WebSocket(Z.upstreamUrl,Z.upstreamProtocols):new WebSocket(Z.upstreamUrl)}catch(X){console.warn(`[preview-ws] failed to dial upstream ${Z.upstreamUrl}: ${X instanceof Error?X.message:String(X)}`),kn($,Z,1011,"upstream connect failed");return}G.binaryType="arraybuffer",Z.upstream=G,G.addEventListener("open",()=>{while(Z.pending.length>0){let X=Z.pending.shift();if(X!==void 0)G.send(X)}}),G.addEventListener("message",(X)=>{if(Z.closed)return;$.send(X.data)}),G.addEventListener("close",(X)=>{kn($,Z,X.code||1000,X.reason||"")}),G.addEventListener("error",()=>{kn($,Z,1011,"upstream error")})},message($,Z){let G=$.data;if(!JB1(G))return;let X=G.upstream;if(X&&X.readyState===WebSocket.OPEN){X.send(Z);return}if(G.pending.length>=$D4){kn($,G,1011,"preview ws backlog overflow");return}G.pending.push(Z)},close($){let Z=$.data;if(!JB1(Z))return;kn($,Z,1000,"")}}});var _L$={};n4(_L$,{printBanner:()=>UD4,bannerLines:()=>CL$,BANNER_LINES:()=>VL$,BANNER_GRADIENT:()=>SL$});function KD4($){let Z=Number.parseInt($.slice(1),16);return[Z>>16&255,Z>>8&255,Z&255]}function CL$($){let Z=VL$.map((G,X)=>{let[Q,Y,J]=KD4(SL$[X]);return`\x1B[38;2;${Q};${Y};${J}m${G}\x1B[39m`});if($!==void 0)Z.push(`\x1B[2m v${$}\x1B[22m`);return Z}function UD4($){console.log("");for(let Z of CL$($))console.log(Z);console.log("")}var VL$,SL$;var bL$=D(()=>{VL$=[" \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 "],SL$=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"]});var xL$={};n4(xL$,{bootstrapDevLinkSession:()=>wD4});import{existsSync as FD4}from"fs";import{chmod as HD4,mkdir as ND4,rename as OD4,writeFile as BD4}from"fs/promises";import{dirname as DD4,join as vL$}from"path";function LD4($){return vL$($,"dev-link")}function ED4($){let Z=process.env.DEV_LINK_SESSION_PATH;if(Z&&Z.trim()!=="")return Z;return vL$(LD4($),"session.json")}async function wD4($,Z){let G=ED4($),X=z6().db,Q=J3()?await vi():await X.selectFrom("user").select(["id","email","name"]).orderBy("createdAt","desc").executeTakeFirst();if(!Q?.id)return null;if(FD4(G))try{let U=await Bun.file(G).json(),F=U.user?.sub,H=U.accessToken;if(F===Q.id&&typeof H==="string"){if(await h6.api.verifyApiKey({body:{key:H}}).then((O)=>O?.valid===!0).catch(()=>!1))return{path:G,userSub:F}}}catch{}let Y=null;try{Y=await h6.api.createApiKey({body:{name:"dev-link (auto-minted by bun run dev)",userId:Q.id,expiresIn:2592000,rateLimitEnabled:!1}})}catch(K){return console.warn("[dev-link] failed to mint API key:",K instanceof Error?K.message:String(K)),null}if(!Y?.key)return null;let J={target:Z,clientId:"dev-link",user:{sub:Q.id,...Q.email?{email:Q.email}:{},...Q.name?{name:Q.name}:{}},accessToken:Y.key,createdAt:new Date().toISOString()};await ND4(DD4(G),{recursive:!0});let W=`${G}.tmp`;return await BD4(W,JSON.stringify(J,null,2),{mode:384}),await HD4(W,384),await OD4(W,G),{path:G,userSub:Q.id}}var fL$=D(()=>{OJ();cU();TO()});gZ();$6();x9();function lE$(){let $=(process.env.BUN_OPTIONS??"").split(/\s+/).filter(Boolean);return[...process.argv.slice(1),...$]}function VB1($,Z){for(let G=0;G<$.length;G++){let X=$[G];if(X===void 0)continue;if(X===Z)return $[G+1];if(X.startsWith(`${Z}=`))return X.slice(Z.length+1)}return}function po1(){let $=lE$();if($.includes("--cpu-prof")){console.log(JSON.stringify({msg:"cpu-profiling-active",dir:VB1($,"--cpu-prof-dir")??process.cwd(),name:VB1($,"--cpu-prof-name"),markdown:$.includes("--cpu-prof-md"),intervalUs:Number(VB1($,"--cpu-prof-interval")??1000),note:"profile is written on process exit"}));return}if(process.env.CPU_PROFILE)console.warn(JSON.stringify({msg:"cpu-profiling-requested-but-inactive",hint:'CPU profiling is a Bun launch flag. Set BUN_OPTIONS="--cpu-prof --cpu-prof-md --cpu-prof-dir=/tmp" before starting the process.'}))}_B1();var hn;function so1(){if(process.env.HEAP_WATCH!=="1")return()=>{};let $=Number(process.env.HEAP_WATCH_INTERVAL_MS??60000),Z=async()=>{let G=fO();if(!G)return;let X={};try{let{heapStats:Q}=await import("bun:jsc"),Y=Q(),J=Object.entries(Y.objectTypeCounts).sort((W,K)=>K[1]-W[1]).slice(0,20);X={objectCount:Y.objectCount,heapSize:Y.heapSize,top:Object.fromEntries(J)}}catch{}console.log(JSON.stringify({msg:"heap-watch",ts:new Date().toISOString(),uptimeS:Math.round(process.uptime()),rss:G.rss,heapUsed:G.heapUsed,heapTotal:G.heapTotal,external:G.external,arrayBuffers:G.arrayBuffers,...X}))};return Z().catch(()=>{}),hn=setInterval(()=>void Z().catch(()=>{}),$),hn.unref?.(),process.on("SIGUSR2",()=>{try{let G=Bun.generateHeapSnapshot("v8"),X=typeof G==="string"?G:JSON.stringify(G),Q=`/tmp/heap-${process.pid}-${Date.now()}.heapsnapshot`;Bun.write(Q,X),console.log(JSON.stringify({msg:"heap-snapshot-written",path:Q}))}catch(G){console.error("[heap-watch] snapshot failed:",G)}}),()=>{if(hn)clearInterval(hn)}}import*as dE$ from"bun:jsc";var{startSamplingProfiler:mE$,samplingProfilerStackTraces:iE$}=dE$;function eo1(){if(process.env.STALL_WATCHDOG!=="1")return()=>{};let $=Number(process.env.STALL_WATCHDOG_MS??100),Z=Number(process.env.STALL_WATCHDOG_TICK_MS??50);try{mE$()}catch(Y){return console.error("[stall-watchdog] failed to start sampling profiler:",Y),()=>{}}let G,X=performance.now()+Z,Q=()=>{let Y=performance.now(),J=Y-X;X=Y+Z;let W=[];try{W=iE$()?.traces??[]}catch{}if(J>$&&W.length>0){let K=new Map;for(let F of W){let H=F.frames.find((B)=>B.sourceURL&&!/Unknown Executable/.test(B.category??""))??F.frames[0];if(!H)continue;let N=(H.sourceURL??"?").replace(/^.*\/node_modules\//,"node_modules/"),O=`${H.name??"?"} @ ${N}:${H.line??"?"}`;K.set(O,(K.get(O)??0)+1)}let U=[...K.entries()].sort((F,H)=>H[1]-F[1]).slice(0,8).map(([F,H])=>({frame:F,count:H}));console.warn(JSON.stringify({msg:"stall-stack",ts:new Date().toISOString(),lagMs:Math.round(J),samplesInWindow:W.length,top:U}))}G=setTimeout(Q,Z),G.unref?.()};return G=setTimeout(Q,Z),G.unref?.(),()=>{if(G)clearTimeout(G)}}function $r1(){po1();let $=[so1(),ao1(),eo1()];return()=>{for(let Z of $)Z()}}import{existsSync as ID4}from"fs";var zF=b0();io1();var{DBOS:Wo1}=await import("@dbos-inc/dbos-sdk");function zD4($,Z){if(!Z)return $;let G=new URL($);if(!G.searchParams.has("sslmode"))G.searchParams.set("sslmode","verify-full");return G.toString()}Wo1.setConfig({name:"decocms",systemDatabaseUrl:zD4(zF.databaseUrl,zF.databasePgSsl),systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:Number(process.env.DBOS_POOL_SIZE??5),runAdminServer:!1,executorID:zF.podName});var{createApp:jD4}=await Promise.resolve().then(() => (Em1(),Lm1)),{isServerPath:PD4}=await Promise.resolve().then(() => (fn(),ko1)),{createAssetHandler:AD4,resolveClientDir:cL$}=await Promise.resolve().then(() => (qL$(),TL$)),RD4=zF.port,yL$=cL$(import.meta.url,"../client"),TD4=ID4(yL$)?yL$:cL$(import.meta.url,"../dist/client"),qD4=AD4({clientDir:TD4,isServerPath:PD4}),MD4={"X-Frame-Options":"DENY","Content-Security-Policy":"frame-ancestors 'none'"};function kD4($){let Z=new Headers($.headers);for(let[G,X]of Object.entries(MD4))Z.set(G,X);return new Response($.body,{status:$.status,statusText:$.statusText,headers:Z})}var{parsePreviewBaseDomain:VD4,tryHandlePreviewHttp:SD4,tryUpgradePreviewWs:CD4,previewWebSocketHandler:Go1,isPreviewWsData:Xo1}=await Promise.resolve().then(() => (kL$(),ML$)),{getOrInitSharedRunner:_D4}=await Promise.resolve().then(() => (qi(),vX$)),lL$=VD4(process.env.STUDIO_SANDBOX_PREVIEW_URL_PATTERN),gL$={baseDomain:lL$??"",getRunner:_D4},{tryUpgradeUplinkWs:bD4,getUplinkResolve:vD4}=await Promise.resolve().then(() => Lt1),{uplinkWebSocketHandler:Qo1}=await Promise.resolve().then(() => (wt1(),cO$)),{isUplinkWsData:Yo1}=await Promise.resolve().then(() => Lt1),WB1=await jD4(),Jo1=process.env.DBOS_CONDUCTOR_KEY?.trim(),hL$=process.env.DBOS_CONDUCTOR_URL?.trim();await Wo1.launch({...Jo1?{conductorKey:Jo1}:{},...Jo1&&hL$?{conductorURL:hL$}:{}});await WB1.initDbos();if(!zF.isCli){let{bannerLines:$}=await Promise.resolve().then(() => (bL$(),_L$));console.log("");for(let Z of $())console.log(Z)}var xD4=Bun.serve({idleTimeout:0,port:RD4,hostname:"0.0.0.0",fetch:async($,Z)=>{if(lL$){let Q=await CD4($,Z,gL$);if(Q===void 0)return;if(Q)return Q;let Y=await SD4($,gL$);if(Y)return Y}let G=vD4();if(G){let Q=await bD4($,Z,{resolve:G});if(Q===void 0)return;if(Q)return Q}let X=await qD4($);if(X)return kD4(X);return WB1.fetch($,{server:Z})},websocket:{open($){if(Xo1($.data))Go1.open($);else if(Yo1($.data))Qo1.open($)},message($,Z){if(Xo1($.data))Go1.message($,Z);else if(Yo1($.data))Qo1.message($,Z)},close($){if(Xo1($.data))Go1.close($);else if(Yo1($.data))Qo1.close($)}},development:!1}),fD4=$r1();if(zF.localMode)Promise.resolve().then(() => (TO(),iH1)).then(async({seedLocalMode:$,markSeedComplete:Z})=>{try{let G=await $();if(process.env.DEV_LINK_SESSION_PATH)try{let{bootstrapDevLinkSession:X}=await Promise.resolve().then(() => (fL$(),xL$)),Q=zF.baseUrl??`http://localhost:${zF.port}`,Y=await X(zF.dataDir,Q);if(Y)console.log(`[dev-link] session ready at ${Y.path} (userSub=${Y.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(X){console.error("[dev-link] bootstrap failed:",X)}}catch(G){console.error("Failed to seed local mode:",G)}finally{Z()}}).catch(async($)=>{console.error("Failed to load local-mode module:",$);try{let{markSeedComplete:Z}=await Promise.resolve().then(() => (TO(),iH1));Z()}catch{}});var uL$=!1;async function KB1($){if(uL$)return;uL$=!0,console.log(`
2627
- [shutdown] Received ${$}, shutting down gracefully...`);let Z=setTimeout(()=>{console.error("[shutdown] Timed out after 55s, forcing exit."),process.exit(1)},55000);Z.unref?.();let G=0;try{fD4(),WB1.markShuttingDown();let X=Number(process.env.SHUTDOWN_DRAIN_MS??25000);await w6(X),await xD4.stop(!0),await Wo1.shutdown(),await WB1.shutdown()}catch(X){console.error("[shutdown] Error during shutdown:",X),G=1}clearTimeout(Z),process.exit(G)}process.on("SIGTERM",()=>KB1("SIGTERM"));process.on("SIGINT",()=>KB1("SIGINT"));process.on("SIGHUP",()=>KB1("SIGHUP"));process.on("unhandledRejection",($)=>{console.error("[process] Unhandled rejection:",$)});process.on("uncaughtException",($)=>{console.error("[process] Uncaught exception:",$),KB1("uncaughtException")});
2627
+ [shutdown] Received ${$}, shutting down gracefully...`);let Z=Number(process.env.SHUTDOWN_GRACE_SECONDS??60)*1000,G=Math.max(Z-5000,1e4),X=setTimeout(()=>{console.error(`[shutdown] Timed out after ${G}ms, forcing exit.`),process.exit(1)},G);X.unref?.();let Q=0;try{fD4(),WB1.markShuttingDown();let Y=Number(process.env.SHUTDOWN_DRAIN_MS??Math.floor(G*0.6));await w6(Y),await xD4.stop(!0),await Wo1.shutdown(),await WB1.shutdown()}catch(Y){console.error("[shutdown] Error during shutdown:",Y),Q=1}clearTimeout(X),process.exit(Q)}process.on("SIGTERM",()=>KB1("SIGTERM"));process.on("SIGINT",()=>KB1("SIGINT"));process.on("SIGHUP",()=>KB1("SIGHUP"));process.on("unhandledRejection",($)=>{console.error("[process] Unhandled rejection:",$)});process.on("uncaughtException",($)=>{console.error("[process] Uncaught exception:",$),KB1("uncaughtException")});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "decocms",
3
- "version": "3.32.0",
3
+ "version": "3.32.1",
4
4
  "description": "Deco CMS — Self-hostable MCP Gateway for managing AI connections and tools",
5
5
  "author": "Deco team",
6
6
  "repository": {
@@ -1 +0,0 @@
1
- import{e as W,r as B,j as e,c as X,l as Y}from"./index-BtcINkTm.js";import{i as Z}from"./ChevronRight-DFG09LEe.js";import{S as tt}from"./scroll-area-m4NsTPSx.js";import{aa as et,ab as rt,f as ot}from"./index-C9Bg4j43.js";import{c as it}from"./save-referenced-block-H-RQkqHK.js";import{S as mt}from"./schema-form-nyJ0R2w6.js";import{S as pt}from"./save-status-CjFc8dcc.js";import"./select-Dx5F3uHo.js";import"./tooltip-tzy8U_iQ.js";import"./Check-ClIa17j0.js";import"./ChevronDown-DcOlk72I.js";import"./ChevronUp-BUzePKUo.js";import"./agent-capabilities-DZXe8nda.js";import"./chat-context-BB-zuuiO.js";import"./tab-id-CKMT5NAW.js";import"./use-mcp-client-S74GyiM7.js";import"./watch-sse-pool-WRJiuO-V.js";import"./decopilot-sse-pool-CcgwKmA0.js";import"./studio-tools-TxENKH8b.js";import"./use-virtual-mcp-ynBH8hOp.js";import"./use-collections-XRQSv1Qe.js";import"./use-ai-providers-CB9vio0p.js";import"./use-organization-settings-DWZNyi7l.js";import"./pair-BjemMx0o.js";import"./agent-icon-PPKWRb0x.js";import"./AlertCircle-DAV0VdD_.js";import"./Tool01-DyFrjTUh.js";import"./SwitchHorizontal01-Dwx0lgMF.js";import"./RefreshCcw01-T0T8zVj0.js";import"./XCircle-COx0scnd.js";import"./ArrowUpRight-DEOKOSBd.js";import"./ZapSquare-Cs3vJ5qy.js";import"./Users03-CYOSLpev.js";import"./CheckCircle-B7SCOPQ0.js";import"./ChevronLeft-CxqwkoN-.js";import"./DotsVertical-bJa4a1zt.js";import"./Container-Dl6JrGmY.js";import"./Eye-pjtF8UNz.js";import"./ZoomOut-D3dpdTm8.js";import"./Globe01-8bu4SIYa.js";import"./FilterLines-BGhu0YVn.js";import"./Star01-Cf3cR-_x.js";import"./Palette-DK2sVT7m.js";import"./HardDrive-CDtaoiCt.js";import"./Stars02-D3fTbcnU.js";import"./Key01-Bk8xH73U.js";import"./LayoutLeft-BiGQffB4.js";import"./LinkExternal01-CpFd7tXn.js";import"./Monitor01-B-I27REk.js";import"./Sun-CvyvBO1g.js";import"./Play-BwAcOs4w.js";import"./Plus-BnwG6MJP.js";import"./SearchMd-DuTVINbp.js";import"./Settings02-BQbLvp5G.js";import"./Shield01-ClirY5c-.js";import"./Stars01-D2sTkx04.js";import"./Trash01-BQ1nC-zv.js";import"./Upload01-tQiDFvpO.js";import"./User01-CFJi0zLk.js";import"./Users01-CCPx6uaK.js";import"./XClose-BuvY_ty6.js";import"./X-O_18GBbz.js";import"./Zap-Bu7nPvMM.js";import"./use-clock-tick-B7WF9o4S.js";import"./differenceInSeconds-NQ4PDo0z.js";import"./use-copy-0Tyw7M5N.js";import"./file-type-icon-DInQXRMd.js";import"./dialog-DzRPb7hw.js";import"./content-blocks-o63cs2vh.js";import"./types-CsZ3CP5f.js";import"./shell-layout-CAxH797a.js";import"./avatar-KrgvwmIy.js";import"./required-auth-layout-ItD57512.js";import"./useRouterState-D4hr3MwK.js";import"./use-org-sso-BIsSirOq.js";import"./integration-icon-CLYC_fiQ.js";import"./use-navigate-to-agent-CKFe2J_p.js";import"./use-connection-DeHXMOiI.js";import"./use-mcp-prompts-Dc8jleBK.js";import"./form-B7soB8jC.js";import"./label-BOhFc9vG.js";import"./input-BmQ7mzb-.js";import"./spinner-DXpgHD1C.js";import"./drawer-BkBq4o2v.js";import"./collection-search-Dr2f5A66.js";import"./tabs-SgyHizjR.js";import"./toggle-group-C4KUfAuk.js";import"./connect-desktop-dialog-CghGsZ-I.js";import"./agent-icons-D5cvN_16.js";import"./checkbox-B-wIlb8X.js";import"./skeleton-DOxdtDYk.js";import"./ai-providers-logos-DD3qZ33J.js";import"./settings-section-Dl4MTBRK.js";import"./card-wWKMvRKZ.js";import"./popover-BH5G0jiV.js";import"./command-DER0zJyP.js";import"./index-Bt1WgamZ.js";import"./useInfiniteQuery-BtPT1URZ.js";import"./use-infinite-scroll-DNsSee5z.js";import"./sortable.esm-DeoIpllX.js";import"./connection-slug-eyAPH6o3.js";import"./connection-card-BnPIzRCc.js";import"./use-registry-connections-DNx2UuYR.js";import"./extract-connection-data-DDbQkulT.js";import"./generate-id-CLrPTxed.js";import"./collections-BPfUwJ0B.js";import"./collection-tabs-MLl5cDDp.js";import"./badge-IOoDOD2d.js";import"./textarea-DsNDFPec.js";import"./connection-form-helpers-BIpr_H-z.js";import"./useSuspenseInfiniteQuery-DCeuFJSM.js";import"./index-WZtuW1yT.js";import"./dropdown-menu-Gz8gJsHK.js";import"./question-004-sINsf4GQ.js";import"./shell-route-loading-xQM5_J5V.js";import"./sidebar-D3j0Ekh6.js";import"./sheet-WX1SRekV.js";import"./toolbar-DzwLvPq6.js";import"./use-create-virtual-mcp-CsvR5Zho.js";import"./github-repo-picker-EEGLQxwe.js";import"./use-mcp-tools-BS1B0wUZ.js";import"./alert-dialog-B62p6NY3.js";import"./index-DzaeL4V_.js";import"./use-org-auth-client-DY3OKqMz.js";import"./hover-card-C_jcdWqK.js";import"./task-status-CvNvYsGc.js";import"./use-status-sounds-CK6mW4TS.js";import"./empty-state-D0W0P9GD.js";import"./resizable-DCnylz56.js";import"./use-capability-BjULA9g0.js";import"./header-tab-button-CXc-7W-y.js";import"./index-vXImmMbm.js";import"./user-D2lmEMCa.js";import"./tools-list-CcppNN0Y.js";import"./switch-C7oZ8aiH.js";import"./use-debounced-autosave-DPer90Fe.js";import"./index-DQxsgmSZ.js";import"./search-input-CXhVJuuP.js";import"./use-secrets-nPYkV_vv.js";import"./formatDistanceToNow-Cb2QZZJn.js";import"./accordion-Unl3HPSh.js";import"./view-mode-toggle-DbLskHlb.js";import"./select-model-BEmU7OgJ.js";import"./use-automations-ELFKdIAo.js";import"./monaco-editor-BfV-qp-L.js";import"./automation-runs-DAMuVRpz.js";import"./table-DkrhBQg4.js";import"./use-members-4JnAFwog.js";import"./automation-list-row-Bsy7udbR.js";import"./calendar-ViRa_cLY.js";import"./image-field-CELR1Q7c.js";import"./use-file-configs-Cl8DYiJo.js";function Zr(E){const t=W.c(51),{orgSlug:R,virtualMcpId:P,branch:$,blockKey:r,block:m,meta:p,decofile:C,title:F,excludeFields:K,schemaPending:M}=E,V=M===void 0?!1:M,a=typeof m?.__resolveType=="string"?m.__resolveType:"";let v;t[0]!==K||t[1]!==p||t[2]!==a?(v=et(a,p,K),t[0]=K,t[1]=p,t[2]=a,t[3]=v):v=t[3];const s=v;let b;t[4]!==s?(b=!!s&&Object.keys(s.properties??{}).length>0,t[4]=s,t[5]=b):b=t[5];const T=b;let g;t[6]!==m||t[7]!==r||t[8]!==p||t[9]!==F?(g=F??(m?rt(r,m,p):r),t[6]=m,t[7]=r,t[8]=p,t[9]=F,t[10]=g):g=t[10];const n=g;let j;t[11]!==$||t[12]!==R||t[13]!==P?(j={orgSlug:R,virtualMcpId:P,branch:$},t[11]=$,t[12]=R,t[13]=P,t[14]=j):j=t[14];const{save:c,isPending:A}=ot(j);let y;t[15]!==c?(y=it((l,i)=>c(l,i)),t[15]=c,t[16]=y):y=t[16];const L=y,[G,H]=B.useState(r),[J,q]=B.useState(null),[z,Q]=B.useState(0);let S;t[17]===Symbol.for("react.memo_cache_sentinel")?(S=[],t[17]=S):S=t[17];const[o,O]=B.useState(S);G!==r&&(H(r),q(null),Q(st),O([]));let N;t[18]!==m?(N=m??{},t[18]=m,t[19]=N):N=t[19];const D=J??N;let k;t[20]!==r||t[21]!==a||t[22]!==c?(k=l=>{const i=l;q(i),c(r,{...i,__resolveType:a})},t[20]=r,t[21]=a,t[22]=c,t[23]=k):k=t[23];const I=k;let _;t[24]!==o||t[25]!==n?(_=o.length>0?[n,...o]:[],t[24]=o,t[25]=n,t[26]=_):_=t[26];const h=_;let d;t[27]!==o||t[28]!==h||t[29]!==n?(d=h.length>0?e.jsx("nav",{"aria-label":"Editing breadcrumb",className:"flex min-w-0 flex-1 items-center gap-1 overflow-hidden text-sm",children:h.map((l,i)=>{const U=i===h.length-1;return e.jsxs("span",{className:"flex min-w-0 items-center gap-1 overflow-hidden",children:[i>0&&e.jsx(Z,{className:"size-3 shrink-0 text-muted-foreground/60"}),e.jsx("button",{type:"button",onClick:()=>O(i===0?[]:o.slice(0,i)),title:l,className:X("min-w-0 truncate rounded-md px-1 py-0.5 text-left transition-colors",U?"font-medium text-foreground":"text-muted-foreground hover:bg-accent hover:text-accent-foreground"),children:l})]},`${l}-${i}`)})}):e.jsx("span",{className:"text-sm font-medium",children:n}),t[27]=o,t[28]=h,t[29]=n,t[30]=d):d=t[30];let f;t[31]!==A?(f=e.jsx(pt,{isPending:A,isError:!1}),t[31]=A,t[32]=f):f=t[32];let u;t[33]!==d||t[34]!==f?(u=e.jsxs("div",{className:"flex h-12 shrink-0 items-center justify-between border-b px-6",children:[d,f]}),t[33]=d,t[34]=f,t[35]=u):u=t[35];let x;t[36]!==r||t[37]!==o||t[38]!==C||t[39]!==D||t[40]!==z||t[41]!==I||t[42]!==T||t[43]!==p||t[44]!==L||t[45]!==s||t[46]!==V?(x=e.jsx(tt,{className:"min-w-0 flex-1 [&_[data-slot=scroll-area-viewport]>div]:!block",children:e.jsx("div",{className:"px-6 py-6",children:e.jsx("div",{className:"mx-auto max-w-xl",children:T?e.jsx(mt,{schema:s,value:D,onChange:I,basePath:"",breadcrumbPath:o,onBreadcrumbChange:O,decofile:C,meta:p,onSaveReferencedBlock:L},`${r}:${z}`):V?e.jsxs("div",{className:"flex flex-col items-center gap-2 py-6 text-center text-xs text-muted-foreground",children:[e.jsx(Y,{size:16,className:"animate-spin"}),"Loading app schema…"]}):e.jsx("div",{className:"py-6 text-center text-xs text-muted-foreground",children:"No editable schema found for this app."})})})}),t[36]=r,t[37]=o,t[38]=C,t[39]=D,t[40]=z,t[41]=I,t[42]=T,t[43]=p,t[44]=L,t[45]=s,t[46]=V,t[47]=x):x=t[47];let w;return t[48]!==u||t[49]!==x?(w=e.jsxs("div",{className:"flex h-full flex-col",children:[u,x]}),t[48]=u,t[49]=x,t[50]=w):w=t[50],w}function st(E){return E+1}export{Zr as AppEditor};
@@ -1 +0,0 @@
1
- import{d as o}from"./watch-sse-pool-WRJiuO-V.js";const c=o;export{c as d};
@@ -1 +0,0 @@
1
- import{e as it,r as E,j as e,l as rt}from"./index-BtcINkTm.js";import{S as mt,d as pt,a as st,b as at}from"./sheet-WX1SRekV.js";import{S as nt}from"./scroll-area-m4NsTPSx.js";import{r as lt,c as ct,u as dt,a as St,i as ft,f as ut,d as vt,P as ht,S as gt}from"./page-seo-form-BHhmKIKz.js";import{n as xt}from"./index-C9Bg4j43.js";import"./X-O_18GBbz.js";import"./select-Dx5F3uHo.js";import"./tooltip-tzy8U_iQ.js";import"./Check-ClIa17j0.js";import"./ChevronDown-DcOlk72I.js";import"./ChevronUp-BUzePKUo.js";import"./label-BOhFc9vG.js";import"./switch-C7oZ8aiH.js";import"./schema-form-nyJ0R2w6.js";import"./agent-icon-PPKWRb0x.js";import"./AlertCircle-DAV0VdD_.js";import"./Tool01-DyFrjTUh.js";import"./SwitchHorizontal01-Dwx0lgMF.js";import"./RefreshCcw01-T0T8zVj0.js";import"./XCircle-COx0scnd.js";import"./ArrowUpRight-DEOKOSBd.js";import"./ZapSquare-Cs3vJ5qy.js";import"./Users03-CYOSLpev.js";import"./CheckCircle-B7SCOPQ0.js";import"./ChevronLeft-CxqwkoN-.js";import"./ChevronRight-DFG09LEe.js";import"./DotsVertical-bJa4a1zt.js";import"./Container-Dl6JrGmY.js";import"./Eye-pjtF8UNz.js";import"./ZoomOut-D3dpdTm8.js";import"./Globe01-8bu4SIYa.js";import"./FilterLines-BGhu0YVn.js";import"./Star01-Cf3cR-_x.js";import"./Palette-DK2sVT7m.js";import"./HardDrive-CDtaoiCt.js";import"./Stars02-D3fTbcnU.js";import"./Key01-Bk8xH73U.js";import"./LayoutLeft-BiGQffB4.js";import"./LinkExternal01-CpFd7tXn.js";import"./Monitor01-B-I27REk.js";import"./Sun-CvyvBO1g.js";import"./Play-BwAcOs4w.js";import"./Plus-BnwG6MJP.js";import"./SearchMd-DuTVINbp.js";import"./Settings02-BQbLvp5G.js";import"./Shield01-ClirY5c-.js";import"./Stars01-D2sTkx04.js";import"./Trash01-BQ1nC-zv.js";import"./Upload01-tQiDFvpO.js";import"./User01-CFJi0zLk.js";import"./Users01-CCPx6uaK.js";import"./XClose-BuvY_ty6.js";import"./Zap-Bu7nPvMM.js";import"./calendar-ViRa_cLY.js";import"./input-BmQ7mzb-.js";import"./popover-BH5G0jiV.js";import"./textarea-DsNDFPec.js";import"./dropdown-menu-Gz8gJsHK.js";import"./image-field-CELR1Q7c.js";import"./dialog-DzRPb7hw.js";import"./skeleton-DOxdtDYk.js";import"./tabs-SgyHizjR.js";import"./use-file-configs-Cl8DYiJo.js";import"./studio-tools-TxENKH8b.js";import"./useInfiniteQuery-BtPT1URZ.js";import"./use-infinite-scroll-DNsSee5z.js";import"./agent-capabilities-DZXe8nda.js";import"./chat-context-BB-zuuiO.js";import"./tab-id-CKMT5NAW.js";import"./use-mcp-client-S74GyiM7.js";import"./watch-sse-pool-WRJiuO-V.js";import"./decopilot-sse-pool-CcgwKmA0.js";import"./use-virtual-mcp-ynBH8hOp.js";import"./use-collections-XRQSv1Qe.js";import"./use-ai-providers-CB9vio0p.js";import"./use-organization-settings-DWZNyi7l.js";import"./pair-BjemMx0o.js";import"./use-clock-tick-B7WF9o4S.js";import"./differenceInSeconds-NQ4PDo0z.js";import"./use-copy-0Tyw7M5N.js";import"./file-type-icon-DInQXRMd.js";import"./content-blocks-o63cs2vh.js";import"./types-CsZ3CP5f.js";import"./shell-layout-CAxH797a.js";import"./avatar-KrgvwmIy.js";import"./required-auth-layout-ItD57512.js";import"./useRouterState-D4hr3MwK.js";import"./use-org-sso-BIsSirOq.js";import"./integration-icon-CLYC_fiQ.js";import"./use-navigate-to-agent-CKFe2J_p.js";import"./use-connection-DeHXMOiI.js";import"./use-mcp-prompts-Dc8jleBK.js";import"./form-B7soB8jC.js";import"./spinner-DXpgHD1C.js";import"./drawer-BkBq4o2v.js";import"./collection-search-Dr2f5A66.js";import"./toggle-group-C4KUfAuk.js";import"./connect-desktop-dialog-CghGsZ-I.js";import"./agent-icons-D5cvN_16.js";import"./checkbox-B-wIlb8X.js";import"./ai-providers-logos-DD3qZ33J.js";import"./settings-section-Dl4MTBRK.js";import"./card-wWKMvRKZ.js";import"./command-DER0zJyP.js";import"./index-Bt1WgamZ.js";import"./sortable.esm-DeoIpllX.js";import"./connection-slug-eyAPH6o3.js";import"./connection-card-BnPIzRCc.js";import"./use-registry-connections-DNx2UuYR.js";import"./extract-connection-data-DDbQkulT.js";import"./generate-id-CLrPTxed.js";import"./collections-BPfUwJ0B.js";import"./collection-tabs-MLl5cDDp.js";import"./badge-IOoDOD2d.js";import"./connection-form-helpers-BIpr_H-z.js";import"./useSuspenseInfiniteQuery-DCeuFJSM.js";import"./index-WZtuW1yT.js";import"./question-004-sINsf4GQ.js";import"./shell-route-loading-xQM5_J5V.js";import"./sidebar-D3j0Ekh6.js";import"./toolbar-DzwLvPq6.js";import"./use-create-virtual-mcp-CsvR5Zho.js";import"./github-repo-picker-EEGLQxwe.js";import"./use-mcp-tools-BS1B0wUZ.js";import"./alert-dialog-B62p6NY3.js";import"./index-DzaeL4V_.js";import"./use-org-auth-client-DY3OKqMz.js";import"./hover-card-C_jcdWqK.js";import"./task-status-CvNvYsGc.js";import"./use-status-sounds-CK6mW4TS.js";import"./empty-state-D0W0P9GD.js";import"./resizable-DCnylz56.js";import"./use-capability-BjULA9g0.js";import"./header-tab-button-CXc-7W-y.js";import"./index-vXImmMbm.js";import"./user-D2lmEMCa.js";import"./tools-list-CcppNN0Y.js";import"./use-debounced-autosave-DPer90Fe.js";import"./index-DQxsgmSZ.js";import"./search-input-CXhVJuuP.js";import"./use-secrets-nPYkV_vv.js";import"./formatDistanceToNow-Cb2QZZJn.js";import"./accordion-Unl3HPSh.js";import"./view-mode-toggle-DbLskHlb.js";import"./select-model-BEmU7OgJ.js";import"./use-automations-ELFKdIAo.js";import"./monaco-editor-BfV-qp-L.js";import"./automation-runs-DAMuVRpz.js";import"./table-DkrhBQg4.js";import"./use-members-4JnAFwog.js";import"./automation-list-row-Bsy7udbR.js";function di(u){const t=it.c(46),{open:N,onOpenChange:P,orgSlug:Q,virtualMcpId:U,branch:W,decofile:G,meta:s,target:m,onSaved:X}=u,o=lt(G,m,s),k=m.kind==="site"?"site":m.pageKey,[Y,Z]=E.useState(k),[tt,i]=E.useState(null),[J,g]=E.useState(void 0),[x,y]=E.useState(0);Y!==k&&(Z(k),i(null),g(void 0),y(wt));const{persistSeo:a,persistRawSeo:I,flush:K,isPending:D}=ct({orgSlug:Q,virtualMcpId:U,branch:W,target:m,resolved:o,onSaved:X}),w=m.kind==="page",ot=w?o?.rawSeoData:void 0,v=J!==void 0?J:ot,et=w?dt(v)??void 0:void 0,h=tt??et??o?.seoData??{},p=o?St(h,o):null,n=p&&(!w||ft(v))?xt(p,s):null,_=m.kind==="page"?ut(G,s)?.seoData??void 0:void 0;let j;t[0]!==s?(j=vt(s),t[0]=s,t[1]=j):j=t[1];const M=j;let R;t[2]!==a||t[3]!==o||t[4]!==i?(R=r=>{if(!o)return;const L=r;i(L),a(L)},t[2]=a,t[3]=o,t[4]=i,t[5]=R):R=t[5];const V=R;let F;t[6]!==K||t[7]!==P?(F=r=>{r||K(),P(r)},t[6]=K,t[7]=P,t[8]=F):F=t[8];const z=F,A=m.kind==="site"?"Site SEO":"Page SEO",T=w&&o,B=m.kind==="site"&&o&&n,H=m.kind==="site"?"No site-level SEO block found.":o?"SEO schema not found for this page.":"Could not load page SEO.";let C;t[9]!==i?(C=()=>i(null),t[9]=i,t[10]=C):C=t[10];const $=C;let O;t[11]!==y?(O=()=>y(yt),t[11]=y,t[12]=O):O=t[12];const q=O;let l;t[13]!==A?(l=e.jsx(mt,{className:"text-sm font-semibold",children:A}),t[13]=A,t[14]=l):l=t[14];let c;t[15]!==D?(c=D&&e.jsx(rt,{size:14,className:"animate-spin text-muted-foreground"}),t[15]=D,t[16]=c):c=t[16];let d;t[17]!==l||t[18]!==c?(d=e.jsxs(pt,{className:"px-4 py-3 border-b flex-row items-center justify-between space-y-0",children:[l,c]}),t[17]=l,t[18]=c,t[19]=d):d=t[19];let S;t[20]!==p||t[21]!==q||t[22]!==$||t[23]!==M||t[24]!==v||t[25]!==h||t[26]!==H||t[27]!==x||t[28]!==V||t[29]!==I||t[30]!==a||t[31]!==o||t[32]!==n||t[33]!==i||t[34]!==g||t[35]!==T||t[36]!==B||t[37]!==_?(S=!o||!T&&!B?e.jsx("div",{className:"flex h-full items-center justify-center text-sm text-muted-foreground",children:H}):e.jsx(nt,{className:"flex-1 min-h-0 [&_[data-slot=scroll-area-viewport]>div]:!block",children:e.jsx("div",{className:"px-6 py-4",children:e.jsx("div",{className:"mx-auto max-w-sm",children:T?e.jsx(ht,{rawSeo:v,innerSeo:h,defaultResolveType:M,seoSchema:n,activeResolveType:p,seoTypeOptions:o.seoTypeOptions,formResetKey:x,siteDefaultSeo:_,onPersistRaw:r=>{g(r),I(r)},onInnerChange:r=>{i(r),a(r)},onClearForm:$,onBumpFormKey:q}):n&&p&&e.jsx(gt,{schema:n,resolveType:p,value:h,formResetKey:x,onChange:V})})})}),t[20]=p,t[21]=q,t[22]=$,t[23]=M,t[24]=v,t[25]=h,t[26]=H,t[27]=x,t[28]=V,t[29]=I,t[30]=a,t[31]=o,t[32]=n,t[33]=i,t[34]=g,t[35]=T,t[36]=B,t[37]=_,t[38]=S):S=t[38];let f;t[39]!==d||t[40]!==S?(f=e.jsxs(st,{side:"right",className:"w-[400px] sm:max-w-[440px] p-0 gap-0",children:[d,S]}),t[39]=d,t[40]=S,t[41]=f):f=t[41];let b;return t[42]!==z||t[43]!==N||t[44]!==f?(b=e.jsx(at,{open:N,onOpenChange:z,children:f}),t[42]=z,t[43]=N,t[44]=f,t[45]=b):b=t[45],b}function yt(u){return u+1}function wt(u){return u+1}export{di as SeoSheet};