decocms 4.110.0 → 4.111.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (233) hide show
  1. package/dist/client/assets/{AlertCircle-C4aWLbAs.js → AlertCircle-cjAc6Cb5.js} +1 -1
  2. package/dist/client/assets/{AreaChart-BiIUxFdp.js → AreaChart-DjLpfGg2.js} +1 -1
  3. package/dist/client/assets/{ArrowRight-eLaJjGMP.js → ArrowRight-BddNpUxh.js} +1 -1
  4. package/dist/client/assets/{ArrowUp-BiC818OO.js → ArrowUp-fzpyp2jZ.js} +1 -1
  5. package/dist/client/assets/{ArrowUpRight-BPzZhY7K.js → ArrowUpRight-CYqXfw70.js} +1 -1
  6. package/dist/client/assets/{Check-C5bLH915.js → Check-BNyHoxQ4.js} +1 -1
  7. package/dist/client/assets/{CheckCircle-rPmHytIJ.js → CheckCircle-CAQDk__P.js} +1 -1
  8. package/dist/client/assets/{ChevronDown-8HbbxROz.js → ChevronDown-C6cenYlm.js} +1 -1
  9. package/dist/client/assets/{ChevronRight-CCWZA3NI.js → ChevronRight-DL426F8m.js} +1 -1
  10. package/dist/client/assets/{ChevronUp-DPeUhd64.js → ChevronUp-OSjLr0XR.js} +1 -1
  11. package/dist/client/assets/{Copy01-pS3ndHFP.js → Copy01-DuV0IkB5.js} +1 -1
  12. package/dist/client/assets/{DotsVertical-fvwNRBFK.js → DotsVertical-BN-gzshe.js} +1 -1
  13. package/dist/client/assets/{Eye-DD2Y7WhY.js → Eye-CIRvm41O.js} +1 -1
  14. package/dist/client/assets/{FilterLines-GTx9yqa_.js → FilterLines-ep1YVo5s.js} +1 -1
  15. package/dist/client/assets/{Globe01-C2wIfr6K.js → Globe01-BLPv9Iwy.js} +1 -1
  16. package/dist/client/assets/{Globe04-BJhG6wb-.js → Globe04-CMgnbRJY.js} +1 -1
  17. package/dist/client/assets/{HardDrive-xlgxg5pb.js → HardDrive-tsSYgv3a.js} +1 -1
  18. package/dist/client/assets/{Image01-9D6ZSrOy.js → Image01-CwJOfUxp.js} +1 -1
  19. package/dist/client/assets/{Key01-Doubd936.js → Key01-BONzddQk.js} +1 -1
  20. package/dist/client/assets/{LayoutLeft-CCSZ_-C6.js → LayoutLeft-B3ALe-ER.js} +1 -1
  21. package/dist/client/assets/{LinkExternal01-218tG64q.js → LinkExternal01-BKvFymzD.js} +1 -1
  22. package/dist/client/assets/{Monitor01-D6nTdzr_.js → Monitor01-TyBHBrLV.js} +1 -1
  23. package/dist/client/assets/{Package-CW_UEikf.js → Package-DbxCPsMI.js} +1 -1
  24. package/dist/client/assets/{Palette-B4azevkp.js → Palette-CIUQKT8Z.js} +1 -1
  25. package/dist/client/assets/{Play-DPsv6l3D.js → Play-jTaT8F1j.js} +1 -1
  26. package/dist/client/assets/{Plus-DZ7pie6E.js → Plus-B5b5sv4F.js} +1 -1
  27. package/dist/client/assets/{SearchLg-9AOZRg9o.js → SearchLg-DUjufVyO.js} +1 -1
  28. package/dist/client/assets/{SearchMd-Bygu1XW3.js → SearchMd-Brc7X7Md.js} +1 -1
  29. package/dist/client/assets/{Settings02-BbdKQE19.js → Settings02-hJHog-f1.js} +1 -1
  30. package/dist/client/assets/{Shield01-0QT-tdv0.js → Shield01-BLx3lP6l.js} +1 -1
  31. package/dist/client/assets/{Star01-avHL11Dt.js → Star01-DCRdYgHX.js} +1 -1
  32. package/dist/client/assets/{Stars01-Bfk_sLwt.js → Stars01-C_twnFnJ.js} +1 -1
  33. package/dist/client/assets/{Stars02-DEF5lSjg.js → Stars02-BLSzHrzf.js} +1 -1
  34. package/dist/client/assets/{Sun-Is_kwxeo.js → Sun-Br92Strd.js} +1 -1
  35. package/dist/client/assets/{SwitchHorizontal01-CzhPeD2_.js → SwitchHorizontal01-Bcp3g94V.js} +1 -1
  36. package/dist/client/assets/{Tool01-BhZ8wMLs.js → Tool01-CA2f0IP5.js} +1 -1
  37. package/dist/client/assets/{Tool02-DFLZZNb5.js → Tool02-CyJO9uuK.js} +1 -1
  38. package/dist/client/assets/{Trash01-Dla8QqrO.js → Trash01-tIGrAPIZ.js} +1 -1
  39. package/dist/client/assets/{TrendUp01-DrMHPkjn.js → TrendUp01-T3K2l6wG.js} +1 -1
  40. package/dist/client/assets/{Upload01-DbrtgjU1.js → Upload01-CEfVEpY4.js} +1 -1
  41. package/dist/client/assets/{User01-TIFLPe6W.js → User01-DRSerNbO.js} +1 -1
  42. package/dist/client/assets/{Users01-D1KQ9-Xm.js → Users01-Dl6JjraK.js} +1 -1
  43. package/dist/client/assets/{Users03-B7Ho-Xlp.js → Users03-DhzOVa_f.js} +1 -1
  44. package/dist/client/assets/{X-CBDZreKA.js → X-BUgWEWEb.js} +1 -1
  45. package/dist/client/assets/{XCircle-D0rekVm3.js → XCircle-BLtFdIyU.js} +1 -1
  46. package/dist/client/assets/{XClose-DJ8ckpPy.js → XClose-Bq6W36u7.js} +1 -1
  47. package/dist/client/assets/{Zap-BphLAKWv.js → Zap-D9F4x3FG.js} +1 -1
  48. package/dist/client/assets/{ZapSquare-BHNX8HXh.js → ZapSquare-QVX7oDRb.js} +1 -1
  49. package/dist/client/assets/{ZoomOut-c0pKClLV.js → ZoomOut-D_PRvhYr.js} +1 -1
  50. package/dist/client/assets/{access-gate-CmmiPt1S.js → access-gate-1EeBNkfs.js} +1 -1
  51. package/dist/client/assets/{add-section-modal-CGRh7Gc1.js → add-section-modal-BXypKzIT.js} +1 -1
  52. package/dist/client/assets/{agent-icon-fWrQzVMB.js → agent-icon-BchbTVym.js} +1 -1
  53. package/dist/client/assets/{agents-list-CBw7DhQD.js → agents-list-D7SeVi2Z.js} +1 -1
  54. package/dist/client/assets/{ai-providers-plym3Xnj.js → ai-providers-CV1PJ_Qj.js} +1 -1
  55. package/dist/client/assets/{alert-BwtcvqMS.js → alert-DJUpqG6p.js} +1 -1
  56. package/dist/client/assets/{alert-dialog-Df0_M7f0.js → alert-dialog-CoqXPcPE.js} +1 -1
  57. package/dist/client/assets/{app-editor-n3NWaSsC.js → app-editor-CDjJCtV0.js} +1 -1
  58. package/dist/client/assets/{auth-Cl_IY4DF.js → auth-DAovCG2A.js} +1 -1
  59. package/dist/client/assets/{auth-catchall-CMhRWvdJ.js → auth-catchall-CIJLNjKn.js} +1 -1
  60. package/dist/client/assets/{auth-entry-BmUJG08p.js → auth-entry-CYOArz31.js} +1 -1
  61. package/dist/client/assets/{auth-split-layout-BpFkwdsW.js → auth-split-layout-CUujCE-o.js} +1 -1
  62. package/dist/client/assets/{authenticate-and-persist-oauth-CgWGK8uh.js → authenticate-and-persist-oauth-axwXqpm8.js} +1 -1
  63. package/dist/client/assets/{automation-list-row-qGA23Qqy.js → automation-list-row-BhxWSbh4.js} +1 -1
  64. package/dist/client/assets/{automation-runs-BxcpdFwW.js → automation-runs-DS1ufmQL.js} +1 -1
  65. package/dist/client/assets/{automations-D7xHBu36.js → automations-_mGzbMDf.js} +1 -1
  66. package/dist/client/assets/{autosend-CTxnSGts.js → autosend-DoML4EE0.js} +1 -1
  67. package/dist/client/assets/{avatar-BsMMgWUo.js → avatar-D7VJVUzb.js} +1 -1
  68. package/dist/client/assets/{badge-eEv50BYf.js → badge-C8EekcO8.js} +1 -1
  69. package/dist/client/assets/{block-document-DRi2dMMs.js → block-document-DmCKn9O1.js} +1 -1
  70. package/dist/client/assets/{brand-context-DgtumXpd.js → brand-context-DQGpm1NH.js} +1 -1
  71. package/dist/client/assets/{buckets-CXll4zGq.js → buckets-lrdRycSt.js} +1 -1
  72. package/dist/client/assets/{bulk-category-panel-DsS2E-Fv.js → bulk-category-panel-dzBVSBoT.js} +1 -1
  73. package/dist/client/assets/{calendar-B-obMRgO.js → calendar-BG-x0mFZ.js} +1 -1
  74. package/dist/client/assets/{capability-load-error-C6RBrSDi.js → capability-load-error-CsrjnmWy.js} +1 -1
  75. package/dist/client/assets/{card-IwLADeS6.js → card-DRMhXqZ9.js} +1 -1
  76. package/dist/client/assets/{category-editor-CzeXtEsZ.js → category-editor-Cuq2vCar.js} +1 -1
  77. package/dist/client/assets/{chat-context-CZdesu61.js → chat-context-DYGRrFq0.js} +1 -1
  78. package/dist/client/assets/{checkbox-BgnGPTqE.js → checkbox-DVfcAwB_.js} +1 -1
  79. package/dist/client/assets/{cli-auth-success-DcYlqPOT.js → cli-auth-success-Ch8zkWtV.js} +1 -1
  80. package/dist/client/assets/{collection-detail-BpU07fFr.js → collection-detail-D2DuDgeo.js} +1 -1
  81. package/dist/client/assets/{collection-display-button-Bms_sHup.js → collection-display-button-MVLiFgDs.js} +1 -1
  82. package/dist/client/assets/{collection-search-DeZqPdCo.js → collection-search-CaQnjUSV.js} +1 -1
  83. package/dist/client/assets/{collection-table-wrapper-R-lrfvk9.js → collection-table-wrapper-DNMgtQcB.js} +1 -1
  84. package/dist/client/assets/{collection-tabs-C4txQo3B.js → collection-tabs-BRu8qoY4.js} +1 -1
  85. package/dist/client/assets/{command-CveOyI1B.js → command-D6PjqT55.js} +1 -1
  86. package/dist/client/assets/{commerce-onboarding-B1iWCHBf.js → commerce-onboarding-VHXN5xvW.js} +1 -1
  87. package/dist/client/assets/{companions-core-B_XY1JTK.js → companions-core-twTKCZtl.js} +1 -1
  88. package/dist/client/assets/{connect-FnskaYUQ.js → connect-BlhIFrvJ.js} +1 -1
  89. package/dist/client/assets/{connect-desktop-dialog-MPI4EIoX.js → connect-desktop-dialog-DCMZd0Ph.js} +1 -1
  90. package/dist/client/assets/{connection-card-MbVPVbl8.js → connection-card-NNIzR5Wr.js} +1 -1
  91. package/dist/client/assets/{connection-detail-B_nYC26c.js → connection-detail-CoJ5YHPu.js} +1 -1
  92. package/dist/client/assets/{connection-form-helpers-AoIVfxmt.js → connection-form-helpers-DtoVuSN8.js} +1 -1
  93. package/dist/client/assets/{connections-BStqRXj9.js → connections-DDau_Efs.js} +1 -1
  94. package/dist/client/assets/{decopilot-sse-pool-BmEzroBD.js → decopilot-sse-pool-93Ff0Du-.js} +1 -1
  95. package/dist/client/assets/{dialog-akn5MaRu.js → dialog-D0YsbnmU.js} +1 -1
  96. package/dist/client/assets/{domain-settings-BQYuJoUC.js → domain-settings-Cf1iakCl.js} +1 -1
  97. package/dist/client/assets/{drawer-HKKHuWsa.js → drawer-CkIe_Per.js} +1 -1
  98. package/dist/client/assets/{dropdown-menu-DLu8rYm0.js → dropdown-menu-DYu7x-Ly.js} +1 -1
  99. package/dist/client/assets/{empty-state-CkWBwlxH.js → empty-state-BPGrp5Wn.js} +1 -1
  100. package/dist/client/assets/{extract-connection-data-EQjPGr8A.js → extract-connection-data-o-jetXIx.js} +1 -1
  101. package/dist/client/assets/{file-explorer-vGlfj66L.js → file-explorer-B5u9Owdo.js} +1 -1
  102. package/dist/client/assets/{file-type-icon-CqtE8FQt.js → file-type-icon--nlfZosI.js} +1 -1
  103. package/dist/client/assets/{files-Bzp-HJo7.js → files-BhFsr4CC.js} +1 -1
  104. package/dist/client/assets/{form-BrZgzMZF.js → form-D395lTO_.js} +1 -1
  105. package/dist/client/assets/{general-vNZSooJh.js → general-CEAxgAOj.js} +1 -1
  106. package/dist/client/assets/{github-repo-picker-DkCK7id6.js → github-repo-picker-NQG_5xKv.js} +1 -1
  107. package/dist/client/assets/{hooks-S8vlZ4Dw.js → hooks-CjFbUPlm.js} +1 -1
  108. package/dist/client/assets/{index-8JPfPgkt.js → index-B_owX5ts.js} +1 -1
  109. package/dist/client/assets/{index-B5Y3HLK3.js → index-BhAQoT_x.js} +4 -4
  110. package/dist/client/assets/{index-DvzxBwP2.js → index-CE-cjLFS.js} +1 -1
  111. package/dist/client/assets/{index-Kpo71gnb.js → index-CHTtKadF.js} +1 -1
  112. package/dist/client/assets/{index-DnyLLaV-.js → index-COmjF1Qy.js} +1 -1
  113. package/dist/client/assets/{index-DlE7uKDy.js → index-COn_Fa_l.js} +1 -1
  114. package/dist/client/assets/{index-DC8PttjD.js → index-D0CQg1Eg.js} +1 -1
  115. package/dist/client/assets/{index-izQk8sQ6.js → index-DZqUyA8a.js} +1 -1
  116. package/dist/client/assets/{index-CK7G-IhD.js → index-DaoCgGAd.js} +1 -1
  117. package/dist/client/assets/{index-D68VZ7Yi.js → index-DbXbrbEI.js} +3 -3
  118. package/dist/client/assets/{index-BFTm3kDp.js → index-DkimfYpY.js} +5 -5
  119. package/dist/client/assets/{index-DV3uYGxr.js → index-LgIYlx1I.js} +1 -1
  120. package/dist/client/assets/{index-CngUpvZv.js → index-rJcOvAqz.js} +1 -1
  121. package/dist/client/assets/{index-redirect-D1rzKgvE.js → index-redirect-BGBtFYCr.js} +1 -1
  122. package/dist/client/assets/{input-D8j4GZUF.js → input-ABpL2clR.js} +1 -1
  123. package/dist/client/assets/{integration-icon-C0m6ZbIE.js → integration-icon-Di0c-Rf2.js} +1 -1
  124. package/dist/client/assets/{invite-member-dialog-BykzqSFM.js → invite-member-dialog-m02yHuwq.js} +1 -1
  125. package/dist/client/assets/{label-e_hjKmuQ.js → label-DmfO0a6P.js} +1 -1
  126. package/dist/client/assets/{layout-BPzmXhj_.js → layout-BZ_ovybY.js} +1 -1
  127. package/dist/client/assets/{login-BUPb9Aqy.js → login-C929fldw.js} +1 -1
  128. package/dist/client/assets/{mcp-oauth-BZQdPUnw.js → mcp-oauth-Ds_NKi4X.js} +1 -1
  129. package/dist/client/assets/{members-C61nWLWJ.js → members-eXVLXZBO.js} +1 -1
  130. package/dist/client/assets/{monaco-editor-CcxIjxbY.js → monaco-editor-Calg3fsn.js} +1 -1
  131. package/dist/client/assets/{monitoring-stats-row-7xvRjEvW.js → monitoring-stats-row-D9HI3OyL.js} +1 -1
  132. package/dist/client/assets/{multi-select-DtVH_W49.js → multi-select-B7ew1f-i.js} +1 -1
  133. package/dist/client/assets/{oauth-callback-BPX1yEnk.js → oauth-callback-DM1hf3Rc.js} +1 -1
  134. package/dist/client/assets/{oauth-callback-ai-provider-DElydn7F.js → oauth-callback-ai-provider-D5HmkK_Y.js} +1 -1
  135. package/dist/client/assets/{onboarding-DASxAvUP.js → onboarding--J1xSpja.js} +1 -1
  136. package/dist/client/assets/{org-install-BaWsrsHM.js → org-install-BYsWWZdx.js} +1 -1
  137. package/dist/client/assets/{org-layout-I-AE-Gv9.js → org-layout-i_HmFw9d.js} +1 -1
  138. package/dist/client/assets/{organization-choice-bUJ5j2pO.js → organization-choice-DeCAJtGj.js} +1 -1
  139. package/dist/client/assets/{orgs-CSn-u-tx.js → orgs-BZsPV632.js} +1 -1
  140. package/dist/client/assets/{page-seo-form-Cb9vikWX.js → page-seo-form-HfNkEdCJ.js} +1 -1
  141. package/dist/client/assets/page-seo-sheet-CCzkSFle.js +1 -0
  142. package/dist/client/assets/{popover-DNcE9iPx.js → popover-WQgY2mA1.js} +1 -1
  143. package/dist/client/assets/{post-editor-D7roYCHg.js → post-editor-C28JIW5P.js} +1 -1
  144. package/dist/client/assets/{primitives-BV60_ksG.js → primitives-BPP3kN7-.js} +1 -1
  145. package/dist/client/assets/{profile-uSFlSS6u.js → profile-BGD57DXN.js} +1 -1
  146. package/dist/client/assets/project-app-view-BtexvYqs.js +1 -0
  147. package/dist/client/assets/record-editor-Qlcb_uFq.js +1 -0
  148. package/dist/client/assets/redirect-editor-Cja26Ct3.js +1 -0
  149. package/dist/client/assets/registry-CMP1xDc-.js +2 -0
  150. package/dist/client/assets/{registry-layout-BCvmbqiB.js → registry-layout-DaofR0RF.js} +1 -1
  151. package/dist/client/assets/{reports-C3U6ysZ7.js → reports-lvJHbLR6.js} +20 -20
  152. package/dist/client/assets/{require-capability-DCrUo3Yf.js → require-capability-DAfN9Ioo.js} +1 -1
  153. package/dist/client/assets/{required-auth-layout-CvPAYM4M.js → required-auth-layout-D4h6xGYw.js} +1 -1
  154. package/dist/client/assets/{reset-password-DcLOeuUy.js → reset-password-DJnS3b-u.js} +1 -1
  155. package/dist/client/assets/{roles-B3ROu0Hg.js → roles-DwN-XzRx.js} +1 -1
  156. package/dist/client/assets/{search-input-CUlusyN8.js → search-input-DjCHIY01.js} +1 -1
  157. package/dist/client/assets/{secrets-XAb4hF-c.js → secrets-DG-xpLY_.js} +1 -1
  158. package/dist/client/assets/{sections-editor-S0jppf7G.js → sections-editor-DOX1rxPC.js} +1 -1
  159. package/dist/client/assets/{select-DbAAJU09.js → select-D2NVbHP5.js} +1 -1
  160. package/dist/client/assets/{select-model-C63Qirvz.js → select-model-SMoVG6g0.js} +1 -1
  161. package/dist/client/assets/{self-tool-result-CCKAvvMo.js → self-tool-result-CYPLBbH-.js} +1 -1
  162. package/dist/client/assets/{seo-editor-BmNrENo5.js → seo-editor-BWVNgLmM.js} +1 -1
  163. package/dist/client/assets/{settings-layout-KG-3LWCC.js → settings-layout-ZcIrVRxe.js} +1 -1
  164. package/dist/client/assets/{settings-section-CnBn0X59.js → settings-section-oDuAxa6m.js} +1 -1
  165. package/dist/client/assets/{shell-controls-XXs2Z4jQ.js → shell-controls-D7YZxcq7.js} +1 -1
  166. package/dist/client/assets/{shell-layout-DPWoiFkr.js → shell-layout-DBSbYFzz.js} +1 -1
  167. package/dist/client/assets/{sidebar-D1S4iUn7.js → sidebar-ScDXY4Qc.js} +1 -1
  168. package/dist/client/assets/{skeleton-kuNQZFSz.js → skeleton-BUnIHqyx.js} +1 -1
  169. package/dist/client/assets/{sso-VK6rLmml.js → sso-CNYomtYE.js} +1 -1
  170. package/dist/client/assets/{store-Buz8wmTR.js → store-ZDzIE0aK.js} +1 -1
  171. package/dist/client/assets/store-registry-Dpds3cgF.js +2 -0
  172. package/dist/client/assets/{studio-tools-CTYZuAcE.js → studio-tools-DrTabN45.js} +1 -1
  173. package/dist/client/assets/{switch-C0tB6SoN.js → switch-DHli9Xtp.js} +1 -1
  174. package/dist/client/assets/{table-C_1XTQye.js → table-D3ohP3WN.js} +1 -1
  175. package/dist/client/assets/{tabs-C2Y-vTij.js → tabs-CuE2juqg.js} +1 -1
  176. package/dist/client/assets/{textarea-AGMT0R7c.js → textarea-Cgyln9_Y.js} +1 -1
  177. package/dist/client/assets/{toggle-group-Cl5xIdhe.js → toggle-group-B6g7pvPX.js} +1 -1
  178. package/dist/client/assets/{toolbar-B_J_6ptC.js → toolbar-BXVab8_Q.js} +1 -1
  179. package/dist/client/assets/{toolbar-icon-button-cl2JgO3n.js → toolbar-icon-button-Bl9QT4lt.js} +1 -1
  180. package/dist/client/assets/{tooltip-BHfnPjmr.js → tooltip-CGWbJmcd.js} +1 -1
  181. package/dist/client/assets/{use-ai-providers-Dw5I4xEg.js → use-ai-providers-C_uNW5IX.js} +1 -1
  182. package/dist/client/assets/{use-api-keys-B_g2XYh_.js → use-api-keys-a9N5TufW.js} +1 -1
  183. package/dist/client/assets/{use-automations-CRN2DJve.js → use-automations-lLh1mwGK.js} +1 -1
  184. package/dist/client/assets/{use-autosave-DpXkzG6N.js → use-autosave-45fwZoLW.js} +1 -1
  185. package/dist/client/assets/{use-capability-L76r7JhW.js → use-capability-C9WcJZ8Y.js} +1 -1
  186. package/dist/client/assets/{use-clock-tick-CK1NKKBE.js → use-clock-tick-Xc6Ur8Gw.js} +1 -1
  187. package/dist/client/assets/{use-connection-DxpyAZF-.js → use-connection-CHFZZO46.js} +1 -1
  188. package/dist/client/assets/{use-copy-BDvqNOZn.js → use-copy-D9DI_Wsi.js} +1 -1
  189. package/dist/client/assets/{use-create-virtual-mcp-CZjRDQlp.js → use-create-virtual-mcp-C_HShhN7.js} +1 -1
  190. package/dist/client/assets/{use-debounced-autosave-5eVi0gbc.js → use-debounced-autosave-CNVEXkS8.js} +1 -1
  191. package/dist/client/assets/{use-debounced-value-Da5bksWh.js → use-debounced-value-KsFLjA-w.js} +1 -1
  192. package/dist/client/assets/{use-deco-credits-rrfzSRCG.js → use-deco-credits-UWayu2Pm.js} +1 -1
  193. package/dist/client/assets/{use-decopilot-events-COHyntCb.js → use-decopilot-events-CgQeKDBw.js} +1 -1
  194. package/dist/client/assets/{use-delete-connection-81Wh1GEn.js → use-delete-connection-BvLZIMPU.js} +1 -1
  195. package/dist/client/assets/{use-deployment-admin-tgEs_5yk.js → use-deployment-admin-BiPJcOW8.js} +1 -1
  196. package/dist/client/assets/{use-file-configs-CudKi0q7.js → use-file-configs-BVP6-78x.js} +1 -1
  197. package/dist/client/assets/{use-infinite-scroll-El2pPBrs.js → use-infinite-scroll-BA9ZZFg3.js} +1 -1
  198. package/dist/client/assets/{use-join-requests-B33mSv0f.js → use-join-requests-CUF8oAM5.js} +1 -1
  199. package/dist/client/assets/{use-mcp-auth-status-f0C1rjA-.js → use-mcp-auth-status-P29G6sv4.js} +1 -1
  200. package/dist/client/assets/{use-mcp-client-DOb795Z2.js → use-mcp-client-DosKR35x.js} +1 -1
  201. package/dist/client/assets/{use-mcp-tools-Q3YlSRGe.js → use-mcp-tools-CvhO9xpv.js} +1 -1
  202. package/dist/client/assets/{use-members-C8nU6bE5.js → use-members-D7RKstKp.js} +1 -1
  203. package/dist/client/assets/{use-mobile-LMJRMXTs.js → use-mobile-CZ8o1PTd.js} +1 -1
  204. package/dist/client/assets/{use-navigate-to-agent-Ba0_YqYK.js → use-navigate-to-agent-CALLliwG.js} +1 -1
  205. package/dist/client/assets/{use-org-auth-client-BbEIBhW6.js → use-org-auth-client-BnuLLVDi.js} +1 -1
  206. package/dist/client/assets/{use-org-sso-Cl63XSdd.js → use-org-sso-BLhpGZPl.js} +1 -1
  207. package/dist/client/assets/{use-organization-roles-BKATTXKY.js → use-organization-roles-CUBH1eQ5.js} +1 -1
  208. package/dist/client/assets/{use-organization-settings-CfhvZKgq.js → use-organization-settings-DCTDgWDO.js} +1 -1
  209. package/dist/client/assets/{use-registry-app-DWNAS7Pc.js → use-registry-app-DB5yxcMg.js} +1 -1
  210. package/dist/client/assets/{use-registry-connections-DU3RHFm0.js → use-registry-connections-BOTQaoSe.js} +1 -1
  211. package/dist/client/assets/{use-secrets-wrcibf6G.js → use-secrets-BfucpkPt.js} +1 -1
  212. package/dist/client/assets/{use-status-sounds-DDcPFa4B.js → use-status-sounds-209x6ELs.js} +1 -1
  213. package/dist/client/assets/{use-view-mode-CHQ6hzQw.js → use-view-mode-Ba27bzip.js} +1 -1
  214. package/dist/client/assets/{use-virtual-mcp-BCZG_9om.js → use-virtual-mcp-0eSbwOMf.js} +1 -1
  215. package/dist/client/assets/useInfiniteQuery-jwpNBd74.js +1 -0
  216. package/dist/client/assets/{useQueries-DHGAdztO.js → useQueries-Bkxw0wdg.js} +1 -1
  217. package/dist/client/assets/{useRouterState-DbTo6Um3.js → useRouterState-C4LwikGu.js} +1 -1
  218. package/dist/client/assets/useSuspenseInfiniteQuery-BgEsG-I9.js +1 -0
  219. package/dist/client/assets/{users-hB1pAYf2.js → users-Bf2yKNFZ.js} +1 -1
  220. package/dist/client/assets/{variant-calendar-CiuW8Ugn.js → variant-calendar-BNgWGXWa.js} +1 -1
  221. package/dist/client/assets/{view-mode-toggle-DV3ypYFJ.js → view-mode-toggle-DUsR66lG.js} +1 -1
  222. package/dist/client/index.html +1 -1
  223. package/dist/server/cli.js +2 -2
  224. package/dist/server/server.js +2 -2
  225. package/package.json +1 -1
  226. package/dist/client/assets/page-seo-sheet-DMjDmOGW.js +0 -1
  227. package/dist/client/assets/project-app-view-DUg_rbZa.js +0 -1
  228. package/dist/client/assets/record-editor-BwYMpaPQ.js +0 -1
  229. package/dist/client/assets/redirect-editor-DenYgwxC.js +0 -1
  230. package/dist/client/assets/registry-V1-HJ81t.js +0 -2
  231. package/dist/client/assets/store-registry-C6J7OMm0.js +0 -2
  232. package/dist/client/assets/useInfiniteQuery-BA8zoRe9.js +0 -1
  233. package/dist/client/assets/useSuspenseInfiniteQuery-CykeuBlD.js +0 -1
@@ -84786,7 +84786,7 @@ ${$}`;h(O);return}if(E(null,y),t.strategy==="count"){if(w--,w===0)h()}if(t.strat
84786
84786
  `);function h(_){if(t===void 0)return!0;let v=lq(_),D=v&&lq(t)?Geu(t):t,n=v?Geu(_):jeu(_),N=CMt(D,n);return N===""||!N.startsWith("..")&&!RMt(N)}return{upsert(_){f.run({$handle:_.handle,$status:_.status,$sandboxPath:_.sandboxPath,$port:_.port??null,$previewUrl:_.previewUrl??null,$repoCloneUrl:_.repoCloneUrl??null,$branch:_.branch??null,$projectName:_.projectName??null,$error:_.error??null,$now:Date.now()})},list(){return l.all().map(m1i)},reconcile(){let _=Date.now();for(let v of l.all().map(m1i)){if(!h(v.sandboxPath)){c.run({$handle:v.handle,$now:_});continue}if(!lq(v.sandboxPath)){E.run({$handle:v.handle,$now:_});continue}if(v.status==="spawning"||v.status==="ready"||v.status==="failed"||v.status==="missing")$.run({$handle:v.handle,$now:_})}return l.all().map(m1i)},prune(_){let v=[],D=[],n=this.reconcile();for(let N of n){if(!h(N.sandboxPath)){D.push({handle:N.handle,sandboxPath:N.sandboxPath,reason:"outside_root",deletedFiles:!1});continue}if(_.missing&&N.status==="missing"){w.run({$handle:N.handle}),v.push({handle:N.handle,sandboxPath:N.sandboxPath,reason:"missing",deletedFiles:!1});continue}if(!_.merged||!lq(N.sandboxPath))continue;if(N.branch===null||N.branch.trim()===""){D.push({handle:N.handle,sandboxPath:N.sandboxPath,reason:"no_branch",deletedFiles:!1});continue}if(!T2(N.sandboxPath,["rev-parse","--is-inside-work-tree"]).ok){D.push({handle:N.handle,sandboxPath:N.sandboxPath,reason:"git_unavailable",deletedFiles:!1});continue}let O=T2(N.sandboxPath,["status","--porcelain"]);if(!O.ok){D.push({handle:N.handle,sandboxPath:N.sandboxPath,reason:"git_unavailable",deletedFiles:!1});continue}if(O.stdout.trim()!==""){D.push({handle:N.handle,sandboxPath:N.sandboxPath,reason:"dirty_worktree",deletedFiles:!1});continue}let y=Keu(N.sandboxPath,N.branch);if(y===null){D.push({handle:N.handle,sandboxPath:N.sandboxPath,reason:"git_unavailable",deletedFiles:!1});continue}if(!y){D.push({handle:N.handle,sandboxPath:N.sandboxPath,reason:"branch_not_merged",deletedFiles:!1});continue}zMt(N.sandboxPath,{recursive:!0,force:!0}),w.run({$handle:N.handle}),v.push({handle:N.handle,sandboxPath:N.sandboxPath,reason:"merged",deletedFiles:!0})}return{removed:v,skipped:D}},delete(_){w.run({$handle:_})},inspect(_){let v=d.get({$handle:_});if(v===null)return null;let D=m1i(v),n=0,N=null;if(lq(D.sandboxPath)&&T2(D.sandboxPath,["rev-parse","--is-inside-work-tree"]).ok){let O=T2(D.sandboxPath,["status","--porcelain"]);if(O.ok){let y=O.stdout.trim();n=y===""?0:y.split(`
84787
84787
  `).length}if(D.branch!==null&&D.branch.trim()!=="")N=Keu(D.sandboxPath,D.branch)}return{handle:D.handle,branch:D.branch,sandboxPath:D.sandboxPath,dirtyCount:n,merged:N}},close(){u.close()}}}var tbi=()=>{};function rMt(i,u){return u?[["umount","-f",i]]:[["fusermount","-uz",i],["umount","-l",i]]}function Xeu(i,u){if(process.platform==="win32")return;for(let t of rMt(i,u))if(Bun.spawnSync(t,{stdout:"ignore",stderr:"ignore",timeout:5000}).exitCode===0)break}var Leu=()=>{};import{existsSync as mMt,readdirSync as eMt}from"fs";import{rm as aMt}from"fs/promises";import{join as Weu}from"path";async function Yeu(i,u={}){let t=u.detach??oMt,f=u.exists??mMt,l=u.readdir??(($)=>eMt($)),c=u.rm??(($)=>aMt($,{recursive:!0,force:!0})),E=Weu(i,"org");if(f(E))for(let $ of l(E))t(Weu(E,$));await c(i)}var oMt=(i)=>Xeu(i,process.platform==="darwin");var Qeu=g(()=>{Leu()});import{join as sMt}from"path";function zeu(i){let u=i.purge??Yeu;return{stopSandbox(t){return i.provider.deleteSandbox(t)},inspectSandbox(t){return i.registry.inspect(t)},async removeSandbox(t){try{return await Rl(async()=>{if(await i.provider.deleteSandbox(t),i.provider.hasHandle(t))throw Error("Can't delete \u2014 run in progress");let l=i.registry.inspect(t)?.sandboxPath??sMt(i.dataDir,"sandboxes",t);await u(l)},{maxAttempts:2,minTimeout:250,jitter:0}),i.registry.delete(t),{ok:!0}}catch(f){let l=f instanceof Lc?f.cause:f;return{ok:!1,error:l instanceof Error?l.message:String(l)}}}}}var Heu=g(()=>{O4();Qeu()});import{randomBytes as pMt}from"crypto";import{mkdir as iqt}from"fs/promises";import{createServer as uqt}from"net";import{join as tqt}from"path";function Reu(i,u){return Error(`sandbox failed to start: ${i}`,{cause:u})}function beu(i){if(!(i instanceof Error))return!1;return i.name==="TimeoutError"||/timed out|timeout|operation was aborted|aborted/i.test(i.message)}function Ceu(i){if(i instanceof Error){let u=i.cause;if(u instanceof Error&&u.message)return u.message;return i.message}return String(i)}function fqt(i){if(!i)return null;let u=i.trim().replace(/\/+$/,"");if(!u)return null;let t=u.split(/[/:]/).filter(Boolean).at(-1);if(!t)return null;return t.replace(/\.git$/i,"")||null}function lqt(i){return{repoCloneUrl:i.repo?.cloneUrl??null,branch:i.repo?.branch??null,projectName:fqt(i.repo?.cloneUrl)}}function Meu(i){let u=i.maxSandboxes??20,t=new Map,f=i.pickPort??cqt,l=i.fetchImpl??fetch,c=i.resolvePreviewUrl??((n,N)=>`http://127.0.0.1:${N}`),E=(n)=>tqt(i.dataDir,"sandboxes",n),$=(n)=>{try{i.registry?.upsert(n)}catch(N){console.warn(`[user-desktop] failed to persist sandbox lifecycle handle=${n.handle} status=${n.status}:`,N)}},w=(n)=>{try{i.onEvent?.(n)}catch{}},d=async(n)=>{let N=new AbortController,O=setTimeout(()=>N.abort(),1500);try{let y=await l(`${n}/health`,{signal:N.signal});if(!y.ok)console.warn(`[user-desktop] probe ${n}/health \u2192 ${y.status} (treating as dead)`);return y.ok}catch(y){return console.warn(`[user-desktop] probe ${n}/health failed: ${y instanceof Error?y.message:String(y)} (treating as dead)`),!1}finally{clearTimeout(O)}},h=(n)=>{console.warn(`[user-desktop] evicting dead daemon handle=${n.handle} port=${n.port}`);try{n.process.kill("SIGTERM")}catch{}if(t.get(n.handle)===n)t.delete(n.handle),$({handle:n.handle,status:"stopped",sandboxPath:E(n.handle),port:null,previewUrl:null,...n.registryMetadata,error:null}),w({handle:n.handle,phase:"evicted"})},_=new Map;function v(){if(t.size<u)return;let n=[...t.values()].filter((O)=>O.activeDispatchCount===0).sort((O,y)=>O.lastUsedAt-y.lastUsedAt);if(n.length===0){console.warn(`[user-desktop] at cap ${t.size}/${u} but every sandbox is pinned (active dispatch) \u2014 exceeding cap temporarily`);return}let N=n[0];console.log(`[user-desktop] evicting LRU victim handle=${N.handle} port=${N.port} (cap ${u} reached, size=${t.size})`);try{N.process.kill("SIGTERM")}catch{}t.delete(N.handle),$({handle:N.handle,status:"stopped",sandboxPath:E(N.handle),port:null,previewUrl:null,...N.registryMetadata,error:null}),w({handle:N.handle,phase:"evicted"})}let D=async(n)=>{let N=lqt(n),O=E(n.handle);$({handle:n.handle,status:"spawning",sandboxPath:O,port:null,previewUrl:null,...N,error:null}),w({handle:n.handle,phase:"spawning",sandboxPath:O,projectName:N.projectName,branch:N.branch}),v();let y,Z=null,T;try{await iqt(O,{recursive:!0}),console.log(`[user-desktop] ensure handle=${n.handle} repo=${n.repo?.cloneUrl??"(none)"} branch=${n.repo?.branch??"(none)"} runtime=${n.workload?.runtime??"(autodetect)"} pm=${n.workload?.packageManager??"(autodetect)"}`),T=pMt(24).toString("hex");let[k,I]=await Promise.all([f(),f()]);y=k,console.log(`[user-desktop] spawn handle=${n.handle} port=${y} devPort=${I} workdir=${O}`),Z=await Promise.resolve(i.spawnDaemon({workdir:O,handle:n.handle,port:y,daemonToken:T,offloadAllowedHosts:n.offloadAllowedHosts??[],offloadAllowSameHostDev:n.offloadAllowSameHostDev??!1,orgFsConfigJson:n.orgFsConfigJson}));try{await i.waitForHealth(y)}catch(j){throw Reu("the sandbox didn't come online in time",j)}console.log(`[user-desktop] healthy handle=${n.handle} port=${y} \u2014 posting config`);try{await i.postConfig(y,I,{repo:n.repo,workload:n.workload,operator:n.operator},T)}catch(j){throw Reu(beu(j)?"configuration timed out":"the sandbox rejected its configuration",j)}}catch(k){if((beu(k)?console.warn:console.error)(`[user-desktop] sandbox bring-up failed handle=${n.handle} port=${y??"(none)"}${Z?" (killing daemon)":""}:`,k),Z)try{Z.kill("SIGKILL")}catch{}throw w({handle:n.handle,phase:"failed",error:Ceu(k),sandboxPath:O,projectName:N.projectName,branch:N.branch}),$({handle:n.handle,status:"failed",sandboxPath:O,port:null,previewUrl:null,...N,error:Ceu(k)}),k}if(!Z||y===void 0)throw Error("sandbox bring-up invariant violated");let B=`http://127.0.0.1:${y}`,F=c(n.handle,y);console.log(`[user-desktop] ready handle=${n.handle} port=${y} sandboxApiUrl=${B} previewUrl=${F}`);let A={handle:n.handle,port:y,process:Z,sandboxApiUrl:B,previewUrl:F,lastUsedAt:Date.now(),activeDispatchCount:0,daemonToken:T,registryMetadata:N};if(t.set(n.handle,A),$({handle:n.handle,status:"ready",sandboxPath:O,port:y,previewUrl:F,...N,error:null}),w({handle:n.handle,phase:"ready",port:y,previewUrl:F,sandboxPath:O,projectName:N.projectName,branch:N.branch}),Z.exited)Z.exited.then(()=>{if(t.get(n.handle)===A)console.warn(`[user-desktop] daemon process exited unexpectedly handle=${n.handle} port=${y} \u2014 removing from cache`),t.delete(n.handle),$({handle:n.handle,status:"stopped",sandboxPath:O,port:null,previewUrl:null,...N,error:null}),w({handle:n.handle,phase:"evicted"});else console.log(`[user-desktop] daemon process exited handle=${n.handle} port=${y} (already replaced/removed)`)});return{sandboxApiUrl:B,previewUrl:F,port:y}};return{async ensureSandbox(n){let N=t.get(n.handle);if(N){if(await d(N.sandboxApiUrl))return console.log(`[user-desktop] cache hit handle=${n.handle} port=${N.port} (alive)`),N.lastUsedAt=Date.now(),{sandboxApiUrl:N.sandboxApiUrl,previewUrl:N.previewUrl,port:N.port};console.warn(`[user-desktop] cache stale handle=${n.handle} port=${N.port} \u2014 respawning`),h(N)}let O=_.get(n.handle);if(O)return console.log(`[user-desktop] joining in-flight ensure handle=${n.handle}`),O;let y=D(n).finally(()=>{_.delete(n.handle)});return _.set(n.handle,y),y},proxyPort(n){let N=t.get(n);if(N)N.lastUsedAt=Date.now();return N?.port??null},getDaemonToken(n){return t.get(n)?.daemonToken??null},hasHandle(n){return t.has(n)||_.has(n)},recordHit(n){let N=t.get(n);if(N)N.lastUsedAt=Date.now()},acquireDispatch(n){let N=t.get(n);if(!N)return()=>{};N.activeDispatchCount+=1;let O=!1;return()=>{if(O)return;O=!0;let y=t.get(n);if(y)y.activeDispatchCount=Math.max(0,y.activeDispatchCount-1)}},listSandboxes(){return[...t.values()]},async deleteSandbox(n){let N=t.get(n);if(!N){console.log(`[user-desktop] delete handle=${n} (not found, no-op)`);return}if(N.activeDispatchCount>0){console.warn(`[user-desktop] delete handle=${n} port=${N.port} REFUSED \u2014 ${N.activeDispatchCount} active dispatch(es) in flight`);return}console.log(`[user-desktop] delete handle=${n} port=${N.port}`);try{N.process.kill("SIGTERM")}catch{}t.delete(n),$({handle:n,status:"stopped",sandboxPath:E(n),port:null,previewUrl:null,repoCloneUrl:null,branch:null,projectName:null,error:null}),w({handle:n,phase:"deleted"})},async shutdown(){console.log(`[user-desktop] shutdown \u2014 killing ${t.size} sandbox(es)`);for(let n of t.values())try{n.process.kill("SIGTERM")}catch{}t.clear()}}}function cqt(){return new Promise((i,u)=>{let t=uqt();t.unref(),t.on("error",u),t.listen(0,"127.0.0.1",()=>{let f=t.address();if(f&&typeof f==="object"){let l=f.port;t.close(()=>i(l))}else t.close(()=>u(Error("could not allocate port")))})})}var qeu=()=>{};import{randomUUID as Eqt}from"crypto";import{hostname as $qt}from"os";async function Veu(i){let u=$qt()||void 0;i.monitor?.onMachine?.(u??"this machine");let t=ACu(i.dataDir,{outFd:i.logFd,perSandboxLog:i.perSandboxLogs,hotReload:i.hotReload}),f=a1i({path:e1i(i.dataDir),managedSandboxRoot:`${i.dataDir}/sandboxes`}),l=!1,c=()=>{if(l)return;l=!0;try{f.close()}catch{}};try{let E=0,$=Meu({dataDir:i.dataDir,registry:f,resolvePreviewUrl:(j,C)=>E>0?`http://${j}.localhost:${E}`:`http://127.0.0.1:${C}`,spawnDaemon:async(j)=>{let C={DAEMON_BOOT_ID:Eqt(),APP_ROOT:j.workdir,PROXY_PORT:String(j.port),DAEMON_TOKEN:j.daemonToken,OFFLOAD_ALLOWED_HOSTS:j.offloadAllowedHosts.join(","),...j.offloadAllowSameHostDev?{OFFLOAD_ALLOW_SAME_HOST_DEV:"1"}:{}};if(j.orgFsConfigJson){let W=await GCu(i.dataDir);if(W)C.ORGFS_CONFIG=j.orgFsConfigJson,C.ORGFS_RCLONE_PATH=W}let K=await t({workdir:j.workdir,env:C,daemonPort:j.port});return{port:j.port,kill:(W)=>K.kill(W),exited:K.exited.then(()=>{return})}},postConfig:async(j,C,K,W)=>{let r={port:C};if(K.workload)r.runtime=K.workload.runtime,r.packageManager={name:K.workload.packageManager,...K.workload.packageManagerPath?{path:K.workload.packageManagerPath}:{}};let Y={application:r},ii=yh(K.operator??null);if(ii)Y.operator=ii;if(K.repo)Y.git={repository:{cloneUrl:K.repo.cloneUrl,branch:K.repo.branch,...K.repo.submoduleCredentials&&K.repo.submoduleCredentials.length>0?{submoduleCredentials:K.repo.submoduleCredentials}:{}},...K.repo.userName&&K.repo.userEmail?{identity:{userName:K.repo.userName,userEmail:K.repo.userEmail}}:{}};await d2(`http://127.0.0.1:${j}`,W,Y)},waitForHealth:async(j)=>{await eli(`http://127.0.0.1:${j}`)},maxSandboxes:20,onEvent:i.monitor?.onEvent}),w=await Oeu({port:i.port,lookupSandboxPort:(j)=>$.proxyPort(j)});E=w.port,console.log(`Local ingress listening on http://127.0.0.1:${w.port} (use http://<handle>.localhost:${w.port}/)`),i.monitor?.onIngress?.(w.port);let d=SCu({provider:$}),h=async()=>{let j=await w2({dataDir:i.dataDir,target:i.clusterBaseUrl});if(!j)throw Object.assign(Error(`Session for ${i.clusterBaseUrl} is no longer valid \u2014 run \`deco auth login --target ${i.clusterBaseUrl}\` and restart \`deco link\`.`),{fatal:!0});return j.accessToken},_=await xeu(i.dataDir),v=process.env.npm_package_version??"0.0.0",D=await ubi(),n=Aeu(D,{onChange:(j)=>{console.log(`[link-daemon] capabilities detected: +${j.join(",")} (now: ${D.join(",")})`)}}),N=Czi({path:`${i.dataDir}/link/outbox.sqlite`});N.clear();let O=()=>{},y=new AbortController,Z={clusterBaseUrl:i.clusterBaseUrl,getAccessToken:h,provider:$,outbox:N,controlHandler:d,capabilities:D,machineId:_,cliVersion:v,previewPort:w.port,onConnected:()=>{i.monitor?.onCluster?.("linked"),console.log(`Linked to ${i.clusterBaseUrl}`)},onShutdown:()=>O(),runLifetimeSignal:y.signal};console.log(`[link-daemon] transport=tunnel cluster=${i.clusterBaseUrl}`);let T=await ceu(Z);console.log("[link-daemon] active transport=tunnel");let B,F=new Promise((j)=>{B=j}),A=!1,k=async()=>{if(A)return;A=!0,y.abort(),console.log(`
84788
84788
  Shutting down\u2026`),n();try{await T.close()}catch{}try{await w.stop()}catch{}try{await $.shutdown()}catch{}try{N.close()}catch{}c(),B(0)};process.on("SIGINT",()=>void k()),process.on("SIGTERM",()=>void k()),O=()=>{console.log("Disconnect requested from the Studio web UI \u2014 shutting down. Run `bunx decocms@latest link` to reconnect."),k()},T.closed.then(()=>{if(i.monitor?.onCluster?.("closed"),!A)console.error("Cluster connection closed permanently; exiting."),k()});let I=zeu({provider:$,registry:f,dataDir:i.dataDir});return{stopped:F,stop:k,stopSandbox:I.stopSandbox,removeSandbox:I.removeSandbox,inspectSandbox:I.inspectSandbox}}catch(E){throw c(),E}}var reu=g(()=>{Wzi();xM();ICu();jCu();KCu();Mzi();Eeu();yeu();Ieu();keu();IM();tbi();Heu();qeu()});function fbi(i){return i.map((u)=>typeof u==="string"?u:String(u)).join(" ")}import{createServer as wqt}from"net";async function hqt(i){for(let u of dqt)if(await lbi(i,u))return u;return null}async function meu(i,{intervalMs:u=1000}={}){for(;;){let t=await hqt(i);if(t)return t;await N0(u)}}function lbi(i,u){return new Promise((t)=>{let f=wqt();f.once("error",(l)=>{t(l.code==="EADDRINUSE")}),f.listen(i,u,()=>{f.close(()=>t(!1))})})}var dqt;var cbi=g(()=>{O4();dqt=["localhost","127.0.0.1","0.0.0.0"]});function eeu(i){return typeof i==="object"&&i!==null&&"code"in i&&i.code==="EADDRINUSE"}function _qt(i,u=process.platform){if(u==="win32")return`for /f "tokens=5" %P in ('netstat -ano ^| findstr /R /C:":${i} .*LISTENING"') do taskkill /F /PID %P`;return`kill -9 $(lsof -ti tcp:${i})`}function aeu(i,u=process.platform){return[`Port ${i} is already in use.`,"Run this command to stop the process listening on it, then retry `decocms link`:","",` ${_qt(i,u)}`].join(`
84789
- `)}var Ebi;var oeu=g(()=>{Ebi=class Ebi extends Error{port;code="EADDRINUSE";constructor(i){super(`Port ${i} is already in use.`);this.port=i;this.name="PortInUseError"}}});var _W;var o1i=g(()=>{_W={name:"decocms",version:"4.110.0",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/mesh"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:'bun run migrate && concurrently "bun run dev:client" "bun run dev:server"',"dev:servers":'concurrently "bun run dev:client" "bun run dev:server"',"dev:client":"vite dev","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts","build:client":"bun --bun vite build","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","db:migrate":"bun run ./dist/server/migrate.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts",test:"bun test","test:ct":"playwright test -c playwright-ct.config.ts","test:ct:ui":"playwright test -c playwright-ct.config.ts --ui","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts","smoke:link":"bun run scripts/smoke-link.ts",prepublishOnly:"bun run build:client && bun run build:server"},optionalDependencies:{"@anthropic-ai/claude-agent-sdk":"^0.3.181","@duckdb/node-api":"^1.5.0-r.1","@openai/codex":"0.144.3","@openai/codex-darwin-arm64":"npm:@openai/codex@0.144.3-darwin-arm64","@openai/codex-darwin-x64":"npm:@openai/codex@0.144.3-darwin-x64","@openai/codex-linux-arm64":"npm:@openai/codex@0.144.3-linux-arm64","@openai/codex-linux-x64":"npm:@openai/codex@0.144.3-linux-x64","@openai/codex-win32-arm64":"npm:@openai/codex@0.144.3-win32-arm64","@openai/codex-win32-x64":"npm:@openai/codex@0.144.3-win32-x64"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@dnd-kit/core":"^6.3.1","@dnd-kit/sortable":"^10.0.0","@dnd-kit/utilities":"^3.2.2","@inkjs/ui":"^2.0.0","@modelcontextprotocol/ext-apps":"^1.7.1","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","@tanstack/react-virtual":"3.13.24","@tiptap/extension-text-align":"3.20.2","@xterm/addon-fit":"^0.11.0","@xterm/xterm":"^6.0.0",echarts:"^5.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","node-pty":"^1.0.0","posthog-js":"^1.371.1","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6","use-stick-to-bottom":"^1.1.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@ai-sdk/react":"^3.0.210","@better-auth/sso":"1.4.1","@daveyplate/better-auth-ui":"^3.2.7","@deco/ui":"workspace:*","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/harness":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/mesh-sdk":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/std":"workspace:*","@decocms/tunnel":"workspace:*","@floating-ui/react":"^0.27.16","@happy-dom/global-registrator":"^20.9.0","@hookform/resolvers":"^5.2.2","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@monaco-editor/react":"^4.7.0","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@playwright/experimental-ct-react":"1.59.1","@playwright/test":"^1.58.2","@radix-ui/react-avatar":"^1.1.10","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-dropdown-menu":"^2.1.16","@radix-ui/react-label":"^2.1.7","@radix-ui/react-select":"^2.2.6","@radix-ui/react-separator":"^1.1.7","@radix-ui/react-slot":"^1.2.3","@radix-ui/react-tabs":"^1.1.13","@rjsf/shadcn":"^6.6.2","@rjsf/utils":"^6.6.2","@rjsf/validator-ajv8":"^6.6.2","@tailwindcss/vite":"^4.1.17","@tanstack/react-query":"5.100.10","@tanstack/react-router":"1.169.2","@testing-library/jest-dom":"^6.9.1","@testing-library/react":"^16.3.2","@tiptap/core":"3.20.2","@tiptap/extension-placeholder":"3.20.2","@tiptap/pm":"3.20.2","@tiptap/react":"3.20.2","@tiptap/starter-kit":"3.20.2","@tiptap/suggestion":"3.20.2","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@untitledui/icons":"^0.0.19","@vercel/nft":"^1.1.1","@vitejs/plugin-react":"^5.1.0",ai:"^6.0.208","babel-plugin-react-compiler":"^1.0.0","better-auth":"1.4.22","class-variance-authority":"^0.7.1",clsx:"^2.1.1",concurrently:"^9.2.1",croner:"^9.1.0","date-fns":"^4.1.0",degit:"^2.8.4",hono:"^4.10.7","input-otp":"^1.4.2",jose:"^6.0.11","lucide-react":"^0.468.0",marked:"^15.0.6",nanoid:"^5.1.6",pg:"^8.16.3",prettier:"^3.4.2","react-hook-form":"^7.66.0","react-markdown":"^10.1.0","react-resizable-panels":"^2.1.7","react-syntax-highlighter":"^15.6.1",recharts:"^3.6.0","rehype-raw":"^7.0.0","remark-gfm":"^4.0.0","sass-embedded":"^1.97.2",sonner:"^2.0.7","tailwind-merge":"^3.3.1",tailwindcss:"^4.1.17",typescript:"^5.9.3",vite:"^7.2.1","vite-tsconfig-paths":"^5.1.4",zod:"^4.0.0"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","mesh","tools"],license:"MIT",publishConfig:{access:"public"}}});var cq={};Si(cq,{printBanner:()=>nqt,bannerLines:()=>seu,BANNER_LINES:()=>s1i,BANNER_GRADIENT:()=>p1i});function Dqt(i){let u=Number.parseInt(i.slice(1),16);return[u>>16&255,u>>8&255,u&255]}function seu(i){let u=s1i.map((t,f)=>{let[l,c,E]=Dqt(p1i[f]);return`\x1B[38;2;${l};${c};${E}m${t}\x1B[39m`});if(i!==void 0)u.push(`\x1B[2m v${i}\x1B[22m`);return u}function nqt(i){console.log("");for(let u of seu(i))console.log(u);console.log("")}var s1i,p1i;var vW=g(()=>{s1i=[" \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 "],p1i=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"]});import{Box as gqt,Text as peu}from"ink";import{jsx as Nqt,jsxs as iau}from"react/jsx-runtime";function ici({version:i}){return iau(gqt,{flexDirection:"column",marginTop:1,children:[s1i.map((u,t)=>Nqt(peu,{color:p1i[t],children:u},t)),iau(peu,{dimColor:!0,children:[" v",i]})]})}var $bi=g(()=>{vW()});function uau(i){let u=i.branch??i.handle,t=[];if(i.dirtyCount>0)t.push(`${i.dirtyCount} uncommitted file${i.dirtyCount===1?"":"s"}`);if(i.merged===!1)t.push("branch not merged");return t.length>0?`\u26A0 ${t.join(", ")} \u2014 delete ${u}? (y/n)`:`Delete ${u}? (y/n)`}function DW(i){return[...i.values()].map((u)=>u.handle).sort((u,t)=>u.localeCompare(t))}function tau(i,u,t){if(i.length===0)return null;let f=u===null?-1:i.indexOf(u);if(f===-1)return t>0?i[0]:i[i.length-1];let l=Math.max(0,Math.min(i.length-1,f+t));return i[l]}function fau(i,u,t){if(t!==u)return t;let f=i.indexOf(u);if(f===-1)return t;return i[f+1]??i[f-1]??null}var _bi={};Si(_bi,{subscribeLinkState:()=>wbi,setSelectedHandle:()=>dbi,setRemoving:()=>fci,setPersistedSandboxes:()=>Iqt,setPendingConfirm:()=>$q,setMachine:()=>Fqt,setLogPath:()=>Pqt,setLinkActions:()=>Aqt,setIngress:()=>Bqt,setDaemonError:()=>Uqt,setClusterUrl:()=>Tqt,setCluster:()=>Zqt,setActionError:()=>tci,resetLinkStateForTests:()=>kqt,removeSandboxRow:()=>hbi,pushSandboxEvent:()=>xqt,getLinkState:()=>Eq,applySandboxEvent:()=>lau});function yqt(i){return i==="spawning"||i==="ready"||i==="failed"}function lau(i,u){let t=new Map(i),f=t.get(u.handle);if(u.phase==="evicted"||u.phase==="deleted"){if(f)t.set(u.handle,{...f,port:null,previewUrl:null,status:"stopped",error:null});return t}return t.set(u.handle,{handle:u.handle,port:u.port??f?.port??null,previewUrl:u.previewUrl??f?.previewUrl??null,status:u.phase,error:u.phase==="failed"?u.error??"failed":null,projectName:u.projectName??f?.projectName??null,branch:u.branch??f?.branch??null,sandboxPath:u.sandboxPath??f?.sandboxPath??null}),t}function cau(){return{cluster:"connecting",clusterUrl:null,ingressUrl:null,ingressPort:null,machine:null,cap:Oqt,sandboxes:new Map,daemonError:null,logPath:null,selectedHandle:null,pendingConfirm:null,removingHandles:new Set,actionError:null,actions:null}}function z$(){for(let i of uci)i()}function Eq(){return cf}function wbi(i){return uci.add(i),()=>uci.delete(i)}function Zqt(i){cf={...cf,cluster:i},z$()}function Tqt(i){cf={...cf,clusterUrl:i},z$()}function Bqt(i,u){cf={...cf,ingressPort:i,ingressUrl:u},z$()}function Fqt(i){cf={...cf,machine:i},z$()}function Uqt(i){cf={...cf,daemonError:i},z$()}function Pqt(i){cf={...cf,logPath:i},z$()}function dbi(i){cf={...cf,selectedHandle:i},z$()}function $q(i){cf={...cf,pendingConfirm:i},z$()}function tci(i){cf={...cf,actionError:i},z$()}function fci(i,u){if(cf.removingHandles.has(i)===u)return;let t=new Set(cf.removingHandles);if(u)t.add(i);else t.delete(i);cf={...cf,removingHandles:t},z$()}function Aqt(i){cf={...cf,actions:i},z$()}function hbi(i){let u=DW(cf.sandboxes),t=fau(u,i,cf.selectedHandle),f=new Map(cf.sandboxes);f.delete(i);let l=new Set(cf.removingHandles);l.delete(i),cf={...cf,sandboxes:f,selectedHandle:t,pendingConfirm:null,removingHandles:l},z$()}function Iqt(i){let u=new Map;for(let t of i)u.set(t.handle,{handle:t.handle,port:t.port,previewUrl:t.previewUrl,status:t.status,error:t.error,projectName:t.projectName,branch:t.branch,sandboxPath:t.sandboxPath});for(let[t,f]of cf.sandboxes)if(yqt(f.status))u.set(t,f);cf={...cf,sandboxes:u},z$()}function xqt(i){cf={...cf,sandboxes:lau(cf.sandboxes,i)},z$()}function kqt(){cf=cau(),uci.clear()}var Oqt=20,cf,uci;var wq=g(()=>{cf=cau(),uci=new Set});import{spawn as Gqt}from"child_process";function jqt(i){if(i==="darwin")return"open";if(i==="win32")return"start";return"xdg-open"}function Eau(i,u=process.platform){let t=jqt(u);try{Gqt(t,[i],{stdio:"ignore",detached:!0}).unref()}catch{}}var $au=()=>{};function wau(i,u={}){let t=u.openUrl??Eau,f=Eq(),l=DW(f.sandboxes),c=f.selectedHandle!==null&&l.includes(f.selectedHandle)?f.selectedHandle:l[0]??null,E=f.actions;switch(i.type){case"move":dbi(tau(l,f.selectedHandle,i.delta));return;case"open":{if(c===null)return;let $=f.sandboxes.get(c);if($?.status==="ready"&&$.previewUrl)t($.previewUrl);return}case"stop":if(c!==null&&E)E.stopSandbox(c);return;case"delete":{if(c===null||!E)return;let $=E.inspectSandbox(c),w=f.sandboxes.get(c);tci(null),$q({handle:c,branch:$?.branch??w?.branch??null,dirtyCount:$?.dirtyCount??0,merged:$?.merged??null});return}case"confirmYes":{let $=f.pendingConfirm;if($q(null),$===null||!E)return;fci($.handle,!0),E.removeSandbox($.handle).then((w)=>{if(w.ok)hbi($.handle);else fci($.handle,!1),tci(w.error)});return}case"confirmNo":$q(null);return;case"quit":if(E)E.quit();return}}var dau=g(()=>{wq();$au()});function hau(i,u,t){if(t)return i==="y"||i==="Y"?{type:"confirmYes"}:{type:"confirmNo"};if(u.upArrow||i==="k")return{type:"move",delta:-1};if(u.downArrow||i==="j")return{type:"move",delta:1};if(i==="s")return{type:"stop"};if(i==="d")return{type:"delete"};if(i==="o")return{type:"open"};if(i==="q"||u.ctrl===!0&&i==="c")return{type:"quit"};return null}var _au={};Si(_au,{LinkApp:()=>Xqt});import{Box as Cl,Text as _1,useInput as Sqt}from"ink";import{useSyncExternalStore as Kqt}from"react";import{jsx as kf,jsxs as Gh}from"react/jsx-runtime";function Jqt(i,u){if(u)return{color:"yellow",text:"\u25CC Removing\u2026"};if(i.status==="ready")return{color:"green",text:"\u25CF Live"};if(i.status==="spawning")return{color:"yellow",text:"\u25CC Starting\u2026"};if(i.status==="stopped")return{color:"gray",text:"\u25A0 Stopped"};if(i.status==="missing")return{color:"yellow",text:"\u25A1 Missing"};if(i.status==="merged")return{color:"cyan",text:"\u2713 Merged"};if(i.status==="invalid")return{color:"red",text:"\u2717 Invalid"};if(i.status==="failed")return{color:"red",text:`\u2717 Failed: ${i.error??"failed"}`};return{color:"red",text:`\u2717 Error: ${i.error??""}`}}function Xqt(){let i=Kqt(wbi,Eq),u=[...i.sandboxes.values()].sort((l,c)=>l.handle.localeCompare(c.handle)),t=DW(i.sandboxes),f=i.selectedHandle!==null&&t.includes(i.selectedHandle)?i.selectedHandle:t[0]??null;return Sqt((l,c)=>{let E=hau(l,c,i.pendingConfirm!==null);if(E!==null)wau(E)}),Gh(Cl,{flexDirection:"column",children:[kf(ici,{version:_W.version}),kf(Cl,{marginBottom:1,children:kf(_1,{dimColor:!0,children:"\u2500".repeat(80)})}),kf(Cl,{children:i.cluster==="linked"?Gh(_1,{color:"green",children:["\u2713 Connected to ",i.clusterUrl??"deco"]}):i.cluster==="connecting"?Gh(_1,{color:"yellow",children:["\u25CC Connecting to ",i.clusterUrl??"deco","\u2026"]}):Gh(_1,{color:"red",children:["\u2717 Disconnected from ",i.clusterUrl??"deco"]})}),kf(Cl,{children:i.ingressUrl?Gh(_1,{color:"green",children:["\u2713 Serving at ",i.ingressUrl]}):kf(_1,{dimColor:!0,children:"\u25CC Starting local server\u2026"})}),kf(Cl,{marginBottom:1,children:kf(_1,{dimColor:!0,children:`${"Computer".padEnd(16)}${i.machine??"this computer"} \xB7 ${u.length} of ${i.cap} previews`})}),u.length===0?kf(_1,{dimColor:!0,children:"No previews running yet."}):Gh(Cl,{flexDirection:"column",children:[Gh(Cl,{children:[kf(Cl,{width:2,flexShrink:0}),kf(Cl,{width:nW.project,flexShrink:0,marginRight:1,children:kf(_1,{dimColor:!0,wrap:"truncate-end",children:"PROJECT"})}),kf(Cl,{width:nW.branch,flexShrink:0,marginRight:1,children:kf(_1,{dimColor:!0,wrap:"truncate-end",children:"BRANCH"})}),kf(Cl,{width:nW.status,flexShrink:0,marginRight:1,children:kf(_1,{dimColor:!0,wrap:"truncate-end",children:"STATUS"})}),kf(Cl,{flexGrow:1,children:kf(_1,{dimColor:!0,wrap:"truncate-end",children:"PREVIEW URL"})})]}),u.map((l)=>{let c=Jqt(l,i.removingHandles.has(l.handle)),E=l.handle===f;return Gh(Cl,{children:[kf(Cl,{width:2,flexShrink:0,children:kf(_1,{color:"cyan",children:E?"\u203A":" "})}),kf(Cl,{width:nW.project,flexShrink:0,marginRight:1,children:kf(_1,{bold:E,wrap:"truncate-end",children:l.projectName??l.handle})}),kf(Cl,{width:nW.branch,flexShrink:0,marginRight:1,children:kf(_1,{bold:E,wrap:"truncate-end",children:l.branch??"\u2014"})}),kf(Cl,{width:nW.status,flexShrink:0,marginRight:1,children:kf(_1,{color:c.color,bold:E,wrap:"truncate-end",children:c.text})}),kf(Cl,{flexGrow:1,children:kf(_1,{dimColor:!0,wrap:"truncate-end",children:l.previewUrl??"\u2014"})})]},l.handle)})]}),i.daemonError?kf(Cl,{marginTop:1,children:Gh(_1,{color:"red",children:["\u26A0 ",i.daemonError]})}):null,i.logPath?kf(Cl,{marginTop:1,children:Gh(_1,{dimColor:!0,children:["Logs: ",i.logPath]})}):null,i.pendingConfirm?kf(Cl,{marginTop:1,children:kf(_1,{color:"yellow",children:uau(i.pendingConfirm)})}):null,i.actionError?kf(Cl,{marginTop:1,children:Gh(_1,{color:"red",children:["\u2717 ",i.actionError]})}):null,kf(Cl,{marginTop:1,children:kf(_1,{dimColor:!0,children:"\u2191\u2193 move \xB7 s stop \xB7 d delete \xB7 o open \xB7 q quit"})})]})}var nW;var vau=g(()=>{o1i();$bi();dau();wq();nW={project:18,branch:22,status:14}});var Dau={};Si(Dau,{runLinkCommand:()=>bqt});import{closeSync as Lqt,mkdirSync as Wqt,openSync as Yqt,writeSync as Qqt}from"fs";import{homedir as zqt}from"os";import{join as vbi}from"path";function Hqt(i,u){let t={log:console.log,warn:console.warn,error:console.error},f=(l)=>{if(u===void 0)return;try{Qqt(u,`${fbi(l)}
84789
+ `)}var Ebi;var oeu=g(()=>{Ebi=class Ebi extends Error{port;code="EADDRINUSE";constructor(i){super(`Port ${i} is already in use.`);this.port=i;this.name="PortInUseError"}}});var _W;var o1i=g(()=>{_W={name:"decocms",version:"4.111.0",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/mesh"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:'bun run migrate && concurrently "bun run dev:client" "bun run dev:server"',"dev:servers":'concurrently "bun run dev:client" "bun run dev:server"',"dev:client":"vite dev","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts","build:client":"bun --bun vite build","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","db:migrate":"bun run ./dist/server/migrate.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts",test:"bun test","test:ct":"playwright test -c playwright-ct.config.ts","test:ct:ui":"playwright test -c playwright-ct.config.ts --ui","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts","smoke:link":"bun run scripts/smoke-link.ts",prepublishOnly:"bun run build:client && bun run build:server"},optionalDependencies:{"@anthropic-ai/claude-agent-sdk":"^0.3.181","@duckdb/node-api":"^1.5.0-r.1","@openai/codex":"0.144.3","@openai/codex-darwin-arm64":"npm:@openai/codex@0.144.3-darwin-arm64","@openai/codex-darwin-x64":"npm:@openai/codex@0.144.3-darwin-x64","@openai/codex-linux-arm64":"npm:@openai/codex@0.144.3-linux-arm64","@openai/codex-linux-x64":"npm:@openai/codex@0.144.3-linux-x64","@openai/codex-win32-arm64":"npm:@openai/codex@0.144.3-win32-arm64","@openai/codex-win32-x64":"npm:@openai/codex@0.144.3-win32-x64"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@dnd-kit/core":"^6.3.1","@dnd-kit/sortable":"^10.0.0","@dnd-kit/utilities":"^3.2.2","@inkjs/ui":"^2.0.0","@modelcontextprotocol/ext-apps":"^1.7.1","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","@tanstack/react-virtual":"3.13.24","@tiptap/extension-text-align":"3.20.2","@xterm/addon-fit":"^0.11.0","@xterm/xterm":"^6.0.0",echarts:"^5.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","node-pty":"^1.0.0","posthog-js":"^1.371.1","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6","use-stick-to-bottom":"^1.1.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@ai-sdk/react":"^3.0.210","@better-auth/sso":"1.4.1","@daveyplate/better-auth-ui":"^3.2.7","@deco/ui":"workspace:*","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/harness":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/mesh-sdk":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/std":"workspace:*","@decocms/tunnel":"workspace:*","@floating-ui/react":"^0.27.16","@happy-dom/global-registrator":"^20.9.0","@hookform/resolvers":"^5.2.2","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@monaco-editor/react":"^4.7.0","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@playwright/experimental-ct-react":"1.59.1","@playwright/test":"^1.58.2","@radix-ui/react-avatar":"^1.1.10","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-dropdown-menu":"^2.1.16","@radix-ui/react-label":"^2.1.7","@radix-ui/react-select":"^2.2.6","@radix-ui/react-separator":"^1.1.7","@radix-ui/react-slot":"^1.2.3","@radix-ui/react-tabs":"^1.1.13","@rjsf/shadcn":"^6.6.2","@rjsf/utils":"^6.6.2","@rjsf/validator-ajv8":"^6.6.2","@tailwindcss/vite":"^4.1.17","@tanstack/react-query":"5.100.10","@tanstack/react-router":"1.169.2","@testing-library/jest-dom":"^6.9.1","@testing-library/react":"^16.3.2","@tiptap/core":"3.20.2","@tiptap/extension-placeholder":"3.20.2","@tiptap/pm":"3.20.2","@tiptap/react":"3.20.2","@tiptap/starter-kit":"3.20.2","@tiptap/suggestion":"3.20.2","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@untitledui/icons":"^0.0.19","@vercel/nft":"^1.1.1","@vitejs/plugin-react":"^5.1.0",ai:"^6.0.208","babel-plugin-react-compiler":"^1.0.0","better-auth":"1.4.22","class-variance-authority":"^0.7.1",clsx:"^2.1.1",concurrently:"^9.2.1",croner:"^9.1.0","date-fns":"^4.1.0",degit:"^2.8.4",hono:"^4.10.7","input-otp":"^1.4.2",jose:"^6.0.11","lucide-react":"^0.468.0",marked:"^15.0.6",nanoid:"^5.1.6",pg:"^8.16.3",prettier:"^3.4.2","react-hook-form":"^7.66.0","react-markdown":"^10.1.0","react-resizable-panels":"^2.1.7","react-syntax-highlighter":"^15.6.1",recharts:"^3.6.0","rehype-raw":"^7.0.0","remark-gfm":"^4.0.0","sass-embedded":"^1.97.2",sonner:"^2.0.7","tailwind-merge":"^3.3.1",tailwindcss:"^4.1.17",typescript:"^5.9.3",vite:"^7.2.1","vite-tsconfig-paths":"^5.1.4",zod:"^4.0.0"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","mesh","tools"],license:"MIT",publishConfig:{access:"public"}}});var cq={};Si(cq,{printBanner:()=>nqt,bannerLines:()=>seu,BANNER_LINES:()=>s1i,BANNER_GRADIENT:()=>p1i});function Dqt(i){let u=Number.parseInt(i.slice(1),16);return[u>>16&255,u>>8&255,u&255]}function seu(i){let u=s1i.map((t,f)=>{let[l,c,E]=Dqt(p1i[f]);return`\x1B[38;2;${l};${c};${E}m${t}\x1B[39m`});if(i!==void 0)u.push(`\x1B[2m v${i}\x1B[22m`);return u}function nqt(i){console.log("");for(let u of seu(i))console.log(u);console.log("")}var s1i,p1i;var vW=g(()=>{s1i=[" \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 "],p1i=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"]});import{Box as gqt,Text as peu}from"ink";import{jsx as Nqt,jsxs as iau}from"react/jsx-runtime";function ici({version:i}){return iau(gqt,{flexDirection:"column",marginTop:1,children:[s1i.map((u,t)=>Nqt(peu,{color:p1i[t],children:u},t)),iau(peu,{dimColor:!0,children:[" v",i]})]})}var $bi=g(()=>{vW()});function uau(i){let u=i.branch??i.handle,t=[];if(i.dirtyCount>0)t.push(`${i.dirtyCount} uncommitted file${i.dirtyCount===1?"":"s"}`);if(i.merged===!1)t.push("branch not merged");return t.length>0?`\u26A0 ${t.join(", ")} \u2014 delete ${u}? (y/n)`:`Delete ${u}? (y/n)`}function DW(i){return[...i.values()].map((u)=>u.handle).sort((u,t)=>u.localeCompare(t))}function tau(i,u,t){if(i.length===0)return null;let f=u===null?-1:i.indexOf(u);if(f===-1)return t>0?i[0]:i[i.length-1];let l=Math.max(0,Math.min(i.length-1,f+t));return i[l]}function fau(i,u,t){if(t!==u)return t;let f=i.indexOf(u);if(f===-1)return t;return i[f+1]??i[f-1]??null}var _bi={};Si(_bi,{subscribeLinkState:()=>wbi,setSelectedHandle:()=>dbi,setRemoving:()=>fci,setPersistedSandboxes:()=>Iqt,setPendingConfirm:()=>$q,setMachine:()=>Fqt,setLogPath:()=>Pqt,setLinkActions:()=>Aqt,setIngress:()=>Bqt,setDaemonError:()=>Uqt,setClusterUrl:()=>Tqt,setCluster:()=>Zqt,setActionError:()=>tci,resetLinkStateForTests:()=>kqt,removeSandboxRow:()=>hbi,pushSandboxEvent:()=>xqt,getLinkState:()=>Eq,applySandboxEvent:()=>lau});function yqt(i){return i==="spawning"||i==="ready"||i==="failed"}function lau(i,u){let t=new Map(i),f=t.get(u.handle);if(u.phase==="evicted"||u.phase==="deleted"){if(f)t.set(u.handle,{...f,port:null,previewUrl:null,status:"stopped",error:null});return t}return t.set(u.handle,{handle:u.handle,port:u.port??f?.port??null,previewUrl:u.previewUrl??f?.previewUrl??null,status:u.phase,error:u.phase==="failed"?u.error??"failed":null,projectName:u.projectName??f?.projectName??null,branch:u.branch??f?.branch??null,sandboxPath:u.sandboxPath??f?.sandboxPath??null}),t}function cau(){return{cluster:"connecting",clusterUrl:null,ingressUrl:null,ingressPort:null,machine:null,cap:Oqt,sandboxes:new Map,daemonError:null,logPath:null,selectedHandle:null,pendingConfirm:null,removingHandles:new Set,actionError:null,actions:null}}function z$(){for(let i of uci)i()}function Eq(){return cf}function wbi(i){return uci.add(i),()=>uci.delete(i)}function Zqt(i){cf={...cf,cluster:i},z$()}function Tqt(i){cf={...cf,clusterUrl:i},z$()}function Bqt(i,u){cf={...cf,ingressPort:i,ingressUrl:u},z$()}function Fqt(i){cf={...cf,machine:i},z$()}function Uqt(i){cf={...cf,daemonError:i},z$()}function Pqt(i){cf={...cf,logPath:i},z$()}function dbi(i){cf={...cf,selectedHandle:i},z$()}function $q(i){cf={...cf,pendingConfirm:i},z$()}function tci(i){cf={...cf,actionError:i},z$()}function fci(i,u){if(cf.removingHandles.has(i)===u)return;let t=new Set(cf.removingHandles);if(u)t.add(i);else t.delete(i);cf={...cf,removingHandles:t},z$()}function Aqt(i){cf={...cf,actions:i},z$()}function hbi(i){let u=DW(cf.sandboxes),t=fau(u,i,cf.selectedHandle),f=new Map(cf.sandboxes);f.delete(i);let l=new Set(cf.removingHandles);l.delete(i),cf={...cf,sandboxes:f,selectedHandle:t,pendingConfirm:null,removingHandles:l},z$()}function Iqt(i){let u=new Map;for(let t of i)u.set(t.handle,{handle:t.handle,port:t.port,previewUrl:t.previewUrl,status:t.status,error:t.error,projectName:t.projectName,branch:t.branch,sandboxPath:t.sandboxPath});for(let[t,f]of cf.sandboxes)if(yqt(f.status))u.set(t,f);cf={...cf,sandboxes:u},z$()}function xqt(i){cf={...cf,sandboxes:lau(cf.sandboxes,i)},z$()}function kqt(){cf=cau(),uci.clear()}var Oqt=20,cf,uci;var wq=g(()=>{cf=cau(),uci=new Set});import{spawn as Gqt}from"child_process";function jqt(i){if(i==="darwin")return"open";if(i==="win32")return"start";return"xdg-open"}function Eau(i,u=process.platform){let t=jqt(u);try{Gqt(t,[i],{stdio:"ignore",detached:!0}).unref()}catch{}}var $au=()=>{};function wau(i,u={}){let t=u.openUrl??Eau,f=Eq(),l=DW(f.sandboxes),c=f.selectedHandle!==null&&l.includes(f.selectedHandle)?f.selectedHandle:l[0]??null,E=f.actions;switch(i.type){case"move":dbi(tau(l,f.selectedHandle,i.delta));return;case"open":{if(c===null)return;let $=f.sandboxes.get(c);if($?.status==="ready"&&$.previewUrl)t($.previewUrl);return}case"stop":if(c!==null&&E)E.stopSandbox(c);return;case"delete":{if(c===null||!E)return;let $=E.inspectSandbox(c),w=f.sandboxes.get(c);tci(null),$q({handle:c,branch:$?.branch??w?.branch??null,dirtyCount:$?.dirtyCount??0,merged:$?.merged??null});return}case"confirmYes":{let $=f.pendingConfirm;if($q(null),$===null||!E)return;fci($.handle,!0),E.removeSandbox($.handle).then((w)=>{if(w.ok)hbi($.handle);else fci($.handle,!1),tci(w.error)});return}case"confirmNo":$q(null);return;case"quit":if(E)E.quit();return}}var dau=g(()=>{wq();$au()});function hau(i,u,t){if(t)return i==="y"||i==="Y"?{type:"confirmYes"}:{type:"confirmNo"};if(u.upArrow||i==="k")return{type:"move",delta:-1};if(u.downArrow||i==="j")return{type:"move",delta:1};if(i==="s")return{type:"stop"};if(i==="d")return{type:"delete"};if(i==="o")return{type:"open"};if(i==="q"||u.ctrl===!0&&i==="c")return{type:"quit"};return null}var _au={};Si(_au,{LinkApp:()=>Xqt});import{Box as Cl,Text as _1,useInput as Sqt}from"ink";import{useSyncExternalStore as Kqt}from"react";import{jsx as kf,jsxs as Gh}from"react/jsx-runtime";function Jqt(i,u){if(u)return{color:"yellow",text:"\u25CC Removing\u2026"};if(i.status==="ready")return{color:"green",text:"\u25CF Live"};if(i.status==="spawning")return{color:"yellow",text:"\u25CC Starting\u2026"};if(i.status==="stopped")return{color:"gray",text:"\u25A0 Stopped"};if(i.status==="missing")return{color:"yellow",text:"\u25A1 Missing"};if(i.status==="merged")return{color:"cyan",text:"\u2713 Merged"};if(i.status==="invalid")return{color:"red",text:"\u2717 Invalid"};if(i.status==="failed")return{color:"red",text:`\u2717 Failed: ${i.error??"failed"}`};return{color:"red",text:`\u2717 Error: ${i.error??""}`}}function Xqt(){let i=Kqt(wbi,Eq),u=[...i.sandboxes.values()].sort((l,c)=>l.handle.localeCompare(c.handle)),t=DW(i.sandboxes),f=i.selectedHandle!==null&&t.includes(i.selectedHandle)?i.selectedHandle:t[0]??null;return Sqt((l,c)=>{let E=hau(l,c,i.pendingConfirm!==null);if(E!==null)wau(E)}),Gh(Cl,{flexDirection:"column",children:[kf(ici,{version:_W.version}),kf(Cl,{marginBottom:1,children:kf(_1,{dimColor:!0,children:"\u2500".repeat(80)})}),kf(Cl,{children:i.cluster==="linked"?Gh(_1,{color:"green",children:["\u2713 Connected to ",i.clusterUrl??"deco"]}):i.cluster==="connecting"?Gh(_1,{color:"yellow",children:["\u25CC Connecting to ",i.clusterUrl??"deco","\u2026"]}):Gh(_1,{color:"red",children:["\u2717 Disconnected from ",i.clusterUrl??"deco"]})}),kf(Cl,{children:i.ingressUrl?Gh(_1,{color:"green",children:["\u2713 Serving at ",i.ingressUrl]}):kf(_1,{dimColor:!0,children:"\u25CC Starting local server\u2026"})}),kf(Cl,{marginBottom:1,children:kf(_1,{dimColor:!0,children:`${"Computer".padEnd(16)}${i.machine??"this computer"} \xB7 ${u.length} of ${i.cap} previews`})}),u.length===0?kf(_1,{dimColor:!0,children:"No previews running yet."}):Gh(Cl,{flexDirection:"column",children:[Gh(Cl,{children:[kf(Cl,{width:2,flexShrink:0}),kf(Cl,{width:nW.project,flexShrink:0,marginRight:1,children:kf(_1,{dimColor:!0,wrap:"truncate-end",children:"PROJECT"})}),kf(Cl,{width:nW.branch,flexShrink:0,marginRight:1,children:kf(_1,{dimColor:!0,wrap:"truncate-end",children:"BRANCH"})}),kf(Cl,{width:nW.status,flexShrink:0,marginRight:1,children:kf(_1,{dimColor:!0,wrap:"truncate-end",children:"STATUS"})}),kf(Cl,{flexGrow:1,children:kf(_1,{dimColor:!0,wrap:"truncate-end",children:"PREVIEW URL"})})]}),u.map((l)=>{let c=Jqt(l,i.removingHandles.has(l.handle)),E=l.handle===f;return Gh(Cl,{children:[kf(Cl,{width:2,flexShrink:0,children:kf(_1,{color:"cyan",children:E?"\u203A":" "})}),kf(Cl,{width:nW.project,flexShrink:0,marginRight:1,children:kf(_1,{bold:E,wrap:"truncate-end",children:l.projectName??l.handle})}),kf(Cl,{width:nW.branch,flexShrink:0,marginRight:1,children:kf(_1,{bold:E,wrap:"truncate-end",children:l.branch??"\u2014"})}),kf(Cl,{width:nW.status,flexShrink:0,marginRight:1,children:kf(_1,{color:c.color,bold:E,wrap:"truncate-end",children:c.text})}),kf(Cl,{flexGrow:1,children:kf(_1,{dimColor:!0,wrap:"truncate-end",children:l.previewUrl??"\u2014"})})]},l.handle)})]}),i.daemonError?kf(Cl,{marginTop:1,children:Gh(_1,{color:"red",children:["\u26A0 ",i.daemonError]})}):null,i.logPath?kf(Cl,{marginTop:1,children:Gh(_1,{dimColor:!0,children:["Logs: ",i.logPath]})}):null,i.pendingConfirm?kf(Cl,{marginTop:1,children:kf(_1,{color:"yellow",children:uau(i.pendingConfirm)})}):null,i.actionError?kf(Cl,{marginTop:1,children:Gh(_1,{color:"red",children:["\u2717 ",i.actionError]})}):null,kf(Cl,{marginTop:1,children:kf(_1,{dimColor:!0,children:"\u2191\u2193 move \xB7 s stop \xB7 d delete \xB7 o open \xB7 q quit"})})]})}var nW;var vau=g(()=>{o1i();$bi();dau();wq();nW={project:18,branch:22,status:14}});var Dau={};Si(Dau,{runLinkCommand:()=>bqt});import{closeSync as Lqt,mkdirSync as Wqt,openSync as Yqt,writeSync as Qqt}from"fs";import{homedir as zqt}from"os";import{join as vbi}from"path";function Hqt(i,u){let t={log:console.log,warn:console.warn,error:console.error},f=(l)=>{if(u===void 0)return;try{Qqt(u,`${fbi(l)}
84790
84790
  `)}catch{}};return console.log=(...l)=>f(l),console.warn=(...l)=>f(l),console.error=(...l)=>{f(l),i(fbi(l))},()=>{console.log=t.log,console.warn=t.warn,console.error=t.error}}async function Rqt(i,u){let t;try{t=await fetch(`${i}/api/links/me`,{headers:{authorization:`Bearer ${u}`},signal:AbortSignal.timeout(1e4)})}catch{return}if(t.status===401||t.status===403)throw Error(`Authentication rejected by ${i} \u2014 the session token was not accepted. `+`Run \`deco auth login --target ${i}\` and try again.`)}async function bqt(i={}){let u=i.port??5174,t=i.dataDir??process.env.DATA_DIR??process.env.DECOCMS_HOME??vbi(zqt(),"deco"),f=i.clusterBaseUrl??process.env.MESH_CLUSTER_URL??"https://studio.decocms.com",l,c,E,$=()=>{if(E===void 0)return;try{E.close()}catch{}finally{E=void 0}};try{if(await lbi(u,"127.0.0.1"))throw new Ebi(u);let w=vbi(t,"sandboxes");E=a1i({path:e1i(t),managedSandboxRoot:w});let d=await qli({dataDir:t,intent:"Link",target:f});if(process.env.DECOCMS_LINK_MANAGED!=="1")await Rqt(f,d.accessToken);let h=E.reconcile();if(i.prune){let n=E.prune({missing:!0,merged:!0});if(!i.tui)console.log(`Pruned local sandboxes: removed ${n.removed.length}, skipped ${n.skipped.length}.`);h=E.reconcile()}let _;if(i.tui){let{render:n}=await import("ink"),{createElement:N}=await import("react"),{LinkApp:O}=await Promise.resolve().then(() => (vau(),_au)),{pushSandboxEvent:y,setCluster:Z,setClusterUrl:T,setDaemonError:B,setIngress:F,setLogPath:A,setMachine:k,setPersistedSandboxes:I}=await Promise.resolve().then(() => (wq(),_bi));Wqt(t,{recursive:!0});let j=vbi(t,"link.log");c=Yqt(j,"w"),A(j),I(h),T(f),Z("connecting"),_={onEvent:(C)=>y(C),onIngress:(C)=>F(C,`http://127.0.0.1:${C}`),onCluster:(C)=>Z(C),onMachine:(C)=>k(C)},l=Hqt(B,c),n(N(O),{patchConsole:!1})}else if(i.banner!==!1){let{printBanner:n}=await Promise.resolve().then(() => (vW(),cq));n(i.version??"0.0.0")}$();let v=process.env.DECOCMS_LINK_MANAGED!=="1",D=await Veu({port:u,clusterBaseUrl:f,dataDir:t,session:d,monitor:_,logFd:c,perSandboxLogs:v,hotReload:i.hotReload});if(i.tui){let{setLinkActions:n}=await Promise.resolve().then(() => (wq(),_bi));n({stopSandbox:D.stopSandbox,removeSandbox:D.removeSandbox,inspectSandbox:D.inspectSandbox,quit:D.stop})}return await D.stopped}catch(w){return l?.(),console.error(eeu(w)?aeu(u):w instanceof Error?w.message:String(w)),1}finally{if(l?.(),c!==void 0)try{Lqt(c)}catch{}$()}}var nau=g(()=>{Lzi();reu();cbi();oeu();tbi()});var ybi={};Si(ybi,{resolveDevLinkClusterUrl:()=>Vqt,populateDevLinkToxiProxy:()=>Tau,isDevLinkToxiProxyEnabled:()=>qqt,ensureDevLinkToxiProxy:()=>oqt,buildDevLinkToxiProxyConfig:()=>yau,DEV_LINK_TOXIPROXY_SERVICE_NAME:()=>Nau,DEV_LINK_TOXIPROXY_PROXY_NAME:()=>Oau});function qqt(i=process.env){return i.DECO_DEV_LINK_TOXIPROXY==="1"}function Dbi(i,u){if(!Number.isInteger(i)||i<1||i>65535)throw Error(`${u} must be an integer port in 1..65535`);return i}function yau(i){let u=new URL(i.serverUrl);if(u.protocol!=="http:")throw Error("DECO_DEV_LINK_TOXIPROXY only supports http local Studio URLs");let t=Dbi(i.apiPort,"apiPort"),f=Dbi(i.listenPort,"listenPort");if(u.port.length===0)throw Error("serverUrl must include an explicit valid port");let l=Dbi(Number.parseInt(u.port,10),"upstreamPort"),c=`http://127.0.0.1:${l}`,E=`http://127.0.0.1:${f}`;return{serviceName:Nau,proxyName:Oau,apiUrl:`http://127.0.0.1:${t}`,listen:`0.0.0.0:${f}`,upstream:`host.docker.internal:${l}`,publicTargetUrl:c,clusterUrl:E,logLine:`[dev-link-toxiproxy] ready: ${E} -> ${c}`}}function Vqt(i){return i.toxiproxy?.clusterUrl??i.serverUrl}async function nbi(i,u,t){if(i.ok)return;let f=await i.text();throw Error(`ToxiProxy ${u} failed for ${t}: status=${i.status} statusText=${i.statusText} body=${f}`)}function Obi(i){if(i instanceof Error)return i.name==="Error"?i.message:`${i.name}: ${i.message}`;return String(i)}function Zau(i){if(!(i instanceof Error))return!1;if(i.name==="TimeoutError")return!0;return Zau(i.cause)}async function gbi(i,u,t,f){try{return await i(t,f)}catch(l){throw Error(`ToxiProxy ${u} failed for ${t}: ${Obi(l)}`,{cause:l})}}async function Tau(i,u=fetch){let t=`${i.apiUrl}/reset`,f=await gbi(u,"reset",t,{method:"POST"});await nbi(f,"reset",t);let l=`${i.apiUrl}/populate`,c=await gbi(u,"populate",l,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify([{name:i.proxyName,listen:i.listen,upstream:i.upstream,enabled:!0}])});await nbi(c,"populate",l)}async function rqt(i,u){let t=`${i.apiUrl}/version`;try{await Rl(async()=>{let f=await gbi(u,"readiness check",t,{method:"GET",signal:AbortSignal.timeout(Mqt)});await nbi(f,"readiness check",t)},{maxAttempts:Cqt,minTimeout:gau,maxTimeout:gau,multiplier:1,jitter:0,isRetriable:(f)=>!Zau(f)})}catch(f){let l=f instanceof Lc?f.cause:f;throw Error(`ToxiProxy API did not become ready at ${t}: ${Obi(l)}`,{cause:l})}}async function mqt(i){if(i===null)return"";return await new Response(i).text()}async function Nbi(i,u={}){let t=["docker",...i].join(" "),f=(()=>{try{return Bun.spawn(["docker",...i],{stdout:"ignore",stderr:"pipe"})}catch($){throw Error(`Docker command failed to start (${t}): ${Obi($)}`,{cause:$})}})(),[l,c]=await Promise.all([f.exited,mqt(f.stderr)]);if(l===0||u.ignoreFailure===!0)return;let E=c.trim().length>0?`: ${c.trim()}`:"";throw Error(`Docker command failed (${t}) with exit ${l}${E}`)}async function eqt(i,u){let t=`deco-dev-link-toxiproxy-${i}`;await Nbi(["rm","-f",t],{ignoreFailure:!0}),await Nbi(["run","--rm","-d","--name",t,"-p",`127.0.0.1:${i}:8474`,"-p",`127.0.0.1:${u}:${u}`,"ghcr.io/shopify/toxiproxy:2.12.0","-host=0.0.0.0"])}async function aqt(i,u){let t=`deco-dev-link-toxiproxy-${i}`;await Nbi(["rm","-f",t],{ignoreFailure:!0})}async function oqt(i){let u=yau(i),t=i.startDaemon??eqt,f=i.stopDaemon??(i.startDaemon===void 0?aqt:void 0);await t(i.apiPort,i.listenPort);let l=i.fetchImpl??fetch;try{await rqt(u,l),await Tau(u,l)}catch(c){if(f!==void 0)try{await f(i.apiPort,i.listenPort)}catch{}throw c}return{config:u,stop:async()=>{if(f!==void 0)await f(i.apiPort,i.listenPort)}}}var Nau="ToxiProxy",Oau="dev_link_studio",Cqt=20,gau=100,Mqt=100;var Zbi=g(()=>{O4()});var Bau={};Si(Bau,{migrateBetterAuth:()=>Tbi});import{getMigrations as sqt}from"better-auth/db";import{sso as pqt}from"@better-auth/sso";import{organization as iVt}from"@decocms/better-auth/plugins";import{admin as uVt,apiKey as tVt,jwt as fVt,magicLink as lVt,mcp as cVt,openAPI as EVt}from"better-auth/plugins";import{emailOTP as $Vt}from"better-auth/plugins/email-otp";async function Tbi(i){let t={database:TM(i||l2()),plugins:[iVt({dynamicAccessControl:{enabled:!0,enableCustomResources:!0}}),uVt(),tVt(),fVt(),EVt(),cVt({loginPage:"/login"}),pqt(),lVt({sendMagicLink:async()=>{}}),$Vt({sendVerificationOTP:async()=>{}})]},{toBeAdded:f,toBeCreated:l,runMigrations:c}=await sqt(t);if(!f.length&&!l.length)return"up to date";return await c(),`${l.length+f.length} table(s) migrated`}var Bbi=g(()=>{cE()});var Fbi={};Si(Fbi,{up:()=>wVt,down:()=>dVt});import{sql as _v}from"kysely";async function wVt(i){await i.schema.createTable("connections").addColumn("id","text",(u)=>u.primaryKey()).addColumn("organizationId","text",(u)=>u.notNull().references("organization.id").onDelete("cascade")).addColumn("createdById","text",(u)=>u.notNull().references("user.id").onDelete("cascade")).addColumn("name","text",(u)=>u.notNull()).addColumn("description","text").addColumn("icon","text").addColumn("appName","text").addColumn("appId","text").addColumn("connectionType","text",(u)=>u.notNull()).addColumn("connectionUrl","text",(u)=>u.notNull()).addColumn("connectionToken","text").addColumn("connectionHeaders","text").addColumn("oauthConfig","text").addColumn("metadata","text").addColumn("tools","text").addColumn("bindings","text").addColumn("status","text",(u)=>u.notNull().defaultTo("active")).addColumn("createdAt","text",(u)=>u.notNull().defaultTo(_v`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(u)=>u.notNull().defaultTo(_v`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("api_keys").addColumn("id","text",(u)=>u.primaryKey()).addColumn("userId","text",(u)=>u.notNull().references("user.id").onDelete("cascade")).addColumn("name","text",(u)=>u.notNull()).addColumn("hashedKey","text",(u)=>u.notNull().unique()).addColumn("permissions","text",(u)=>u.notNull()).addColumn("expiresAt","text").addColumn("remaining","integer").addColumn("metadata","text").addColumn("createdAt","text",(u)=>u.notNull().defaultTo(_v`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(u)=>u.notNull().defaultTo(_v`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("audit_logs").addColumn("id","text",(u)=>u.primaryKey()).addColumn("organizationId","text").addColumn("userId","text",(u)=>u.references("user.id").onDelete("set null")).addColumn("connectionId","text",(u)=>u.references("connections.id").onDelete("set null")).addColumn("toolName","text",(u)=>u.notNull()).addColumn("allowed","integer",(u)=>u.notNull()).addColumn("duration","integer").addColumn("timestamp","text",(u)=>u.notNull().defaultTo(_v`CURRENT_TIMESTAMP`)).addColumn("requestMetadata","text").execute(),await i.schema.createTable("oauth_clients").addColumn("id","text",(u)=>u.primaryKey()).addColumn("clientId","text",(u)=>u.notNull().unique()).addColumn("clientSecret","text").addColumn("clientName","text",(u)=>u.notNull()).addColumn("redirectUris","text",(u)=>u.notNull()).addColumn("grantTypes","text",(u)=>u.notNull()).addColumn("scope","text").addColumn("clientUri","text").addColumn("logoUri","text").addColumn("createdAt","text",(u)=>u.notNull().defaultTo(_v`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("oauth_authorization_codes").addColumn("code","text",(u)=>u.primaryKey()).addColumn("clientId","text",(u)=>u.notNull().references("oauth_clients.clientId").onDelete("cascade")).addColumn("userId","text",(u)=>u.notNull().references("user.id").onDelete("cascade")).addColumn("redirectUri","text",(u)=>u.notNull()).addColumn("scope","text").addColumn("codeChallenge","text").addColumn("codeChallengeMethod","text").addColumn("expiresAt","text",(u)=>u.notNull()).addColumn("createdAt","text",(u)=>u.notNull().defaultTo(_v`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("oauth_refresh_tokens").addColumn("token","text",(u)=>u.primaryKey()).addColumn("clientId","text",(u)=>u.notNull().references("oauth_clients.clientId").onDelete("cascade")).addColumn("userId","text",(u)=>u.notNull().references("user.id").onDelete("cascade")).addColumn("scope","text").addColumn("expiresAt","text").addColumn("createdAt","text",(u)=>u.notNull().defaultTo(_v`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("downstream_tokens").addColumn("id","text",(u)=>u.primaryKey()).addColumn("connectionId","text",(u)=>u.notNull().references("connections.id").onDelete("cascade")).addColumn("userId","text",(u)=>u.references("user.id").onDelete("cascade")).addColumn("accessToken","text",(u)=>u.notNull()).addColumn("refreshToken","text").addColumn("scope","text").addColumn("expiresAt","text").addColumn("createdAt","text",(u)=>u.notNull().defaultTo(_v`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(u)=>u.notNull().defaultTo(_v`CURRENT_TIMESTAMP`)).execute(),await i.schema.createIndex("idx_connections_organizationId").on("connections").column("organizationId").execute(),await i.schema.createIndex("idx_audit_logs_organizationId").on("audit_logs").column("organizationId").execute(),await i.schema.createIndex("idx_audit_logs_userId").on("audit_logs").column("userId").execute(),await i.schema.createIndex("idx_audit_logs_timestamp").on("audit_logs").column("timestamp").execute()}async function dVt(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 Fau=()=>{};var Ubi={};Si(Ubi,{up:()=>hVt,down:()=>_Vt});import{sql as Uau}from"kysely";async function hVt(i){await i.schema.createTable("organization_settings").addColumn("organizationId","text",(u)=>u.primaryKey().references("organization.id").onDelete("cascade")).addColumn("modelsBindingConnectionId","text",(u)=>u.references("connections.id").onDelete("set null")).addColumn("createdAt","text",(u)=>u.notNull().defaultTo(Uau`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(u)=>u.notNull().defaultTo(Uau`CURRENT_TIMESTAMP`)).execute()}async function _Vt(i){await i.schema.dropTable("organization_settings").execute()}var Pau=()=>{};var Pbi={};Si(Pbi,{up:()=>vVt,down:()=>DVt});async function vVt(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 DVt(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 Abi={};Si(Abi,{up:()=>nVt,down:()=>gVt});async function nVt(i){await i.schema.createTable("organization_settings_new").addColumn("organizationId","text",(u)=>u.primaryKey().references("organization.id").onDelete("cascade")).addColumn("createdAt","text",(u)=>u.notNull()).addColumn("updatedAt","text",(u)=>u.notNull()).execute(),await i.insertInto("organization_settings_new").columns(["organizationId","createdAt","updatedAt"]).expression((u)=>u.selectFrom("organization_settings").select(["organizationId","createdAt","updatedAt"])).execute(),await i.schema.dropTable("organization_settings").execute(),await i.schema.alterTable("organization_settings_new").renameTo("organization_settings").execute()}async function gVt(i){await i.schema.createTable("organization_settings_new").addColumn("organizationId","text",(u)=>u.primaryKey().references("organization.id").onDelete("cascade")).addColumn("modelsBindingConnectionId","text",(u)=>u.references("connections.id").onDelete("set null")).addColumn("createdAt","text",(u)=>u.notNull()).addColumn("updatedAt","text",(u)=>u.notNull()).execute(),await i.insertInto("organization_settings_new").columns(["organizationId","modelsBindingConnectionId","createdAt","updatedAt"]).expression((u)=>u.selectFrom("organization_settings").select(["organizationId",u.val(null).as("modelsBindingConnectionId"),"createdAt","updatedAt"])).execute(),await i.schema.dropTable("organization_settings").execute(),await i.schema.alterTable("organization_settings_new").renameTo("organization_settings").execute()}var Ibi={};Si(Ibi,{up:()=>NVt,down:()=>OVt});async function NVt(i){await i.schema.alterTable("connections").addColumn("configuration_state","text").execute(),await i.schema.alterTable("connections").addColumn("configuration_scopes","text").execute()}async function OVt(i){await i.schema.alterTable("connections").dropColumn("configuration_state").execute(),await i.schema.alterTable("connections").dropColumn("configuration_scopes").execute()}var xbi={};Si(xbi,{up:()=>ZVt,down:()=>TVt});import{sql as yVt}from"kysely";async function ZVt(i){await i.schema.alterTable("organization_settings").addColumn("sidebar_items",yVt`text`).execute()}async function TVt(i){await i.schema.alterTable("organization_settings").dropColumn("sidebar_items").execute()}var Aau=()=>{};var kbi={};Si(kbi,{up:()=>BVt,down:()=>FVt});async function BVt(i){await i.schema.createTable("monitoring_logs").addColumn("id","text",(u)=>u.primaryKey()).addColumn("organization_id","text",(u)=>u.notNull().references("organization.id").onDelete("cascade")).addColumn("connection_id","text",(u)=>u.notNull().references("connections.id").onDelete("cascade")).addColumn("connection_title","text",(u)=>u.notNull()).addColumn("tool_name","text",(u)=>u.notNull()).addColumn("input","text",(u)=>u.notNull()).addColumn("output","text",(u)=>u.notNull()).addColumn("is_error","integer",(u)=>u.notNull()).addColumn("error_message","text").addColumn("duration_ms","integer",(u)=>u.notNull()).addColumn("timestamp","text",(u)=>u.notNull()).addColumn("user_id","text").addColumn("request_id","text",(u)=>u.notNull()).execute(),await i.schema.createIndex("monitoring_logs_org_timestamp").on("monitoring_logs").columns(["organization_id","timestamp"]).execute(),await i.schema.createIndex("monitoring_logs_connection_timestamp").on("monitoring_logs").columns(["connection_id","timestamp"]).execute(),await i.schema.createIndex("monitoring_logs_is_error").on("monitoring_logs").columns(["organization_id","is_error","timestamp"]).execute()}async function FVt(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 Gbi={};Si(Gbi,{up:()=>UVt,down:()=>PVt});import{sql as dq}from"kysely";async function UVt(i){await i.schema.createTable("events").addColumn("id","text",(u)=>u.primaryKey()).addColumn("organization_id","text",(u)=>u.notNull().references("organization.id").onDelete("cascade")).addColumn("type","text",(u)=>u.notNull()).addColumn("source","text",(u)=>u.notNull()).addColumn("specversion","text",(u)=>u.notNull().defaultTo("1.0")).addColumn("subject","text").addColumn("time","text",(u)=>u.notNull()).addColumn("datacontenttype","text",(u)=>u.notNull().defaultTo("application/json")).addColumn("dataschema","text").addColumn("data","text").addColumn("cron","varchar(255)").addColumn("status","text",(u)=>u.notNull().defaultTo("pending")).addColumn("attempts","integer",(u)=>u.notNull().defaultTo(0)).addColumn("last_error","text").addColumn("next_retry_at","text").addColumn("created_at","text",(u)=>u.notNull().defaultTo(dq`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(u)=>u.notNull().defaultTo(dq`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("event_subscriptions").addColumn("id","text",(u)=>u.primaryKey()).addColumn("organization_id","text",(u)=>u.notNull().references("organization.id").onDelete("cascade")).addColumn("connection_id","text",(u)=>u.notNull().references("connections.id").onDelete("cascade")).addColumn("publisher","text").addColumn("event_type","text",(u)=>u.notNull()).addColumn("filter","text").addColumn("enabled","integer",(u)=>u.notNull().defaultTo(1)).addColumn("created_at","text",(u)=>u.notNull().defaultTo(dq`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(u)=>u.notNull().defaultTo(dq`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("event_deliveries").addColumn("id","text",(u)=>u.primaryKey()).addColumn("event_id","text",(u)=>u.notNull()).addColumn("subscription_id","text",(u)=>u.notNull().references("event_subscriptions.id").onDelete("cascade")).addColumn("status","text",(u)=>u.notNull().defaultTo("pending")).addColumn("attempts","integer",(u)=>u.notNull().defaultTo(0)).addColumn("last_error","text").addColumn("delivered_at","text").addColumn("next_retry_at","text").addColumn("created_at","text",(u)=>u.notNull().defaultTo(dq`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 PVt(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 Iau=()=>{};var jbi={};Si(jbi,{up:()=>IVt,down:()=>xVt});import{sql as AVt}from"kysely";async function IVt(i){await i.schema.dropTable("audit_logs").ifExists().execute()}async function xVt(i){await i.schema.createTable("audit_logs").ifNotExists().addColumn("id","text",(u)=>u.primaryKey()).addColumn("organizationId","text").addColumn("userId","text",(u)=>u.references("user.id").onDelete("set null")).addColumn("connectionId","text",(u)=>u.references("connections.id").onDelete("set null")).addColumn("toolName","text",(u)=>u.notNull()).addColumn("allowed","integer",(u)=>u.notNull()).addColumn("duration","integer").addColumn("timestamp","text",(u)=>u.notNull().defaultTo(AVt`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 xau=()=>{};var Sbi={};Si(Sbi,{up:()=>kVt,down:()=>GVt});import{sql as lci}from"kysely";async function kVt(i){await i.schema.createTable("gateways").addColumn("id","text",(u)=>u.primaryKey()).addColumn("organization_id","text",(u)=>u.notNull().references("organization.id").onDelete("cascade")).addColumn("title","text",(u)=>u.notNull()).addColumn("description","text").addColumn("tool_selection_strategy","text").addColumn("status","text",(u)=>u.notNull().defaultTo("active")).addColumn("is_default","integer",(u)=>u.notNull().defaultTo(0)).addColumn("created_at","text",(u)=>u.notNull().defaultTo(lci`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(u)=>u.notNull().defaultTo(lci`CURRENT_TIMESTAMP`)).addColumn("created_by","text",(u)=>u.notNull().references("user.id").onDelete("cascade")).addColumn("updated_by","text").execute(),await i.schema.createTable("gateway_connections").addColumn("id","text",(u)=>u.primaryKey()).addColumn("gateway_id","text",(u)=>u.notNull().references("gateways.id").onDelete("cascade")).addColumn("connection_id","text",(u)=>u.notNull().references("connections.id").onDelete("cascade")).addColumn("selected_tools","text").addColumn("created_at","text",(u)=>u.notNull().defaultTo(lci`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 lci`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 GVt(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 kau=()=>{};var Kbi={};Si(Kbi,{up:()=>jVt,down:()=>SVt});async function jVt(i){await i.schema.alterTable("gateways").addColumn("icon","text").execute()}async function SVt(i){await i.schema.alterTable("gateways").dropColumn("icon").execute()}var Jbi={};Si(Jbi,{up:()=>KVt,down:()=>JVt});import{sql as cci}from"kysely";async function KVt(i){await i.schema.alterTable("gateways").addColumn("tool_selection_mode","text",(u)=>u.notNull().defaultTo("inclusion")).execute(),await cci`
84791
84791
  UPDATE gateways
84792
84792
  SET tool_selection_mode = CASE
@@ -88551,7 +88551,7 @@ When unsure between the two, lean toward NOT requiring review for small frontend
88551
88551
 
88552
88552
  Respond with the structured verdict and a short reason.`,Pft;var Ift=g(()=>{gf();KK();v5u();UJ4=D5u.object({requiresReview:D5u.boolean().describe("true if the changes should go through pull-request review"),reason:D5u.string().describe("One short sentence explaining the decision (max ~120 chars)")});Pft={requiresReview:!1,reason:""}});function xJ4(i){if(!i||i.includes(".."))return!1;return IJ4.test(i)}function xft(i){let u=typeof i.__resolveType==="string"?i.__resolveType:null;if(!u||!xJ4(u))return null;let{__resolveType:t,...f}=i;return{resolveType:u,payload:f}}function kft(i,u){return`${i.replace(/\/+$/,"")}/deco/invoke/${u}`}var IJ4;var Gft=g(()=>{IJ4=/^[\w./@-]+$/});function n5u(i){let u;try{u=new URL(i)}catch{return null}if(!u.hostname.endsWith(".localhost"))return null;let t=u.host;return u.hostname="127.0.0.1",{url:u.toString(),hostHeader:t}}function jft(i,u){let t=i?.githubRepo;if(!t?.owner||!t?.name)return null;if(!t.connectionId)return t;if(!u.includes(t.connectionId))return null;return t}async function Sft(i,u,t,f){if(!f.connectionId)throw new sR("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let l=i.organization?.id;if(!l)throw new sR(FE);await Sz({ctx:i,connectionId:f.connectionId,organizationId:l,forceRefresh:!0,onLegacyMintError:(h)=>{let _=h instanceof Error?h.message:FE;throw new sR(_)}});let{cloneUrl:c,gitUserName:E,gitUserEmail:$}=await D9(f.connectionId,f.owner,f.name,i.db,i.vault),w=cIi(i),d=await u.proxyDaemonRequest(t,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{repository:{cloneUrl:c},identity:{userName:E,userEmail:$}},...w?{operator:w}:{}})});if(!d.ok){let h=await d.text().catch(()=>d.statusText);throw Error(`Failed to refresh sandbox git credentials (${d.status}): ${h}`)}}var sR;var Kft=g(()=>{$9();c5u();Ra();sR=class sR extends Error{constructor(i){super(i);this.name="GitPushAuthError"}}});function GJ4(i){let u=i.startsWith("thread:")?i.slice(7):i;if(!u||u.length>255||u.includes("..")||u.startsWith("/")||u.endsWith("/")||u.endsWith(".lock")||!kJ4.test(u))throw Error(`Invalid branch name: ${i}`)}function sJ(i){return AbortSignal.any([i.req.raw.signal,AbortSignal.timeout(SJ4)])}function pJ(i){let{runner:u}=i.get("vmClaim");if(!u)return i.json({error:"No sandbox runner configured"},503);return u}function g5u(i,u){let f=(EIi.get(i)??Promise.resolve()).catch(()=>{}).then(u),l=f.catch(()=>{});return EIi.set(i,l),l.finally(()=>{if(EIi.get(i)===l)EIi.delete(i)}),f}async function l6(i,u,t){let f=pJ(i);if(f instanceof Response)return f;let{claimName:l,sandboxId:c}=i.get("vmClaim"),E=t?.method??"POST",$=null,w=new Headers;if(t?.jsonBody!==void 0)$=t.jsonBody,w.set("content-type","application/json");else if(t?.forwardJsonBody)$=await i.req.text(),w.set("content-type","application/json");let d=t?.signal,h={method:E,headers:w,body:$,...d?{signal:d}:{}},_=async()=>{let v=await f.proxyDaemonRequest(l,u,h);if(t?.map404to410&&v.status===404){try{await v.body?.cancel()}catch{}if(await f.adoptLiveClaim?.(c,l))v=await f.proxyDaemonRequest(l,u,h);if(v.status===404){try{await v.body?.cancel()}catch{}return new Response(JSON.stringify({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."}),{status:410,headers:{"content-type":"application/json",...Qd}})}}let D=await v.text(),n=t?.redactRepoDirUnlessDesktop&&f.kind!=="user-desktop"?JJ4(D):D,N=v.headers.get("content-type")??"application/json";return new Response(n,{status:v.status,headers:{"content-type":N,...Qd}})};try{if(d){let v=_();return v.catch(()=>{}),await Promise.race([v,new Promise((n,N)=>{if(d.aborted)return N(d.reason);d.addEventListener("abort",()=>N(d.reason),{once:!0})})])}return await _()}catch(v){let D=v instanceof Error?v.message:String(v);return i.json({error:`Daemon unreachable: ${D}`},502)}}function JJ4(i){try{let u=JSON.parse(i);if(u&&typeof u==="object"&&!Array.isArray(u)&&"repoDir"in u)return JSON.stringify({...u,repoDir:null})}catch{}return i}async function $Ii(i,u,t,f="GET",l){let c=await i.proxyDaemonRequest(u,t,{method:f,headers:new Headers,body:null});if(c.status===404&&l){try{await c.body?.cancel()}catch{}if(await i.adoptLiveClaim?.(l,u))c=await i.proxyDaemonRequest(u,t,{method:f,headers:new Headers,body:null})}if(c.status===404){try{await c.body?.cancel()}catch{}throw Error("SANDBOX_GONE")}let E=await c.text();if(!c.ok)try{let $=JSON.parse(E);throw Error($.error??`Daemon error (${c.status})`)}catch($){if($ instanceof Error&&$.message!==E)throw $;throw Error(`Daemon error (${c.status})`)}return JSON.parse(E)}function XJ4(i){return Lft.includes(i)}var kJ4,Jft=524288,jJ4=65536,SJ4=1e4,Xft=2000,KJ4,EIi,Qd,Lft,Wft=()=>{let i=new Ju;return i.use("/:virtualMcpId/:branch/*",KJ4),i.post("/:virtualMcpId/:branch/write",(u)=>l6(u,"/_sandbox/write",{forwardJsonBody:!0,signal:sJ(u)})),i.post("/:virtualMcpId/:branch/unlink",(u)=>l6(u,"/_sandbox/unlink",{forwardJsonBody:!0,signal:sJ(u)})),i.post("/:virtualMcpId/:branch/mkdir",(u)=>l6(u,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:sJ(u)})),i.post("/:virtualMcpId/:branch/rename",(u)=>l6(u,"/_sandbox/rename",{forwardJsonBody:!0,signal:sJ(u)})),i.post("/:virtualMcpId/:branch/read",(u)=>l6(u,"/_sandbox/read",{forwardJsonBody:!0,signal:sJ(u)})),i.post("/:virtualMcpId/:branch/glob",(u)=>l6(u,"/_sandbox/glob",{forwardJsonBody:!0,signal:sJ(u)})),i.post("/:virtualMcpId/:branch/grep",(u)=>l6(u,"/_sandbox/grep",{forwardJsonBody:!0,signal:sJ(u)})),i.post("/:virtualMcpId/:branch/exec/:script",(u)=>{let t=u.req.param("script");if(!t)return u.json({error:"missing script name"},400);return l6(u,`/_sandbox/exec/${encodeURIComponent(t)}`)}),i.post("/:virtualMcpId/:branch/exec/:script/kill",(u)=>{let t=u.req.param("script");if(!t)return u.json({error:"missing script name"},400);return l6(u,`/_sandbox/exec/${encodeURIComponent(t)}/kill`)}),i.get("/:virtualMcpId/:branch/config",(u)=>l6(u,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDirUnlessDesktop:!0})),i.put("/:virtualMcpId/:branch/config",(u)=>l6(u,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),i.post("/:virtualMcpId/:branch/setup/:step",async(u)=>{let t=u.req.param("step");if(!t||!XJ4(t))return u.json({error:`step must be one of: ${Lft.join(", ")}`},400);if(t==="start"){let f=u.get("vmClaim");if(f.runner){let l=Oi(u.var.studioContext),c=nH(f.virtualMcpMetadata);try{await RTi({ctx:u.var.studioContext,runner:f.runner,handle:f.claimName,orgId:l.id,userId:f.userId,entries:c,organizationSecretsOnly:f.providerKind==="agent-sandbox"&&f.sandboxId.scope==="shared"})}catch(E){let $=E instanceof Error?E.message:String(E);return u.json({error:`Failed to push env to daemon: ${$}`},502)}}}return l6(u,`/_sandbox/setup/${t}`,{signal:u.req.raw.signal,map404to410:!0})}),i.get("/:virtualMcpId/:branch/events",(u)=>{let t=u.get("vmClaim");if(!t.runner)return th(u,async(f)=>{await f.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this studio instance."})})});return yft(u,{ctx:u.var.studioContext,claimName:t.claimName,runner:t.runner,sandboxId:t.sandboxId,providerKind:t.providerKind,virtualMcpId:t.virtualMcpId,branch:t.branch,userId:t.userId,virtualMcpMetadata:t.virtualMcpMetadata})}),i.get("/:virtualMcpId/:branch/git/status",(u)=>l6(u,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([u.req.raw.signal,AbortSignal.timeout(Xft)])})),i.post("/:virtualMcpId/:branch/git/status",(u)=>l6(u,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([u.req.raw.signal,AbortSignal.timeout(Xft)])})),i.post("/:virtualMcpId/:branch/git/diff",(u)=>l6(u,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})),i.post("/:virtualMcpId/:branch/git/publish",async(u)=>{let t=pJ(u);if(t instanceof Response)return t;let{claimName:f,virtualMcpMetadata:l,connectionIds:c}=u.get("vmClaim"),E=u.var.studioContext;return g5u(f,async()=>{try{await E5u(E,t,f);let $=jft(l,c);if($)await Sft(E,t,f,$)}catch($){if($ instanceof sR)return u.json({error:$.message},403,Qd);let w=$ instanceof Error?$.message:String($);return u.json({error:w},502,Qd)}return l6(u,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),i.post("/:virtualMcpId/:branch/git/discard",(u)=>{let{claimName:t}=u.get("vmClaim");return g5u(t,()=>l6(u,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),i.post("/:virtualMcpId/:branch/git/rebase",async(u)=>{let t=pJ(u);if(t instanceof Response)return t;let{claimName:f}=u.get("vmClaim"),l=u.var.studioContext;return g5u(f,async()=>{try{await E5u(l,t,f)}catch(c){let E=c instanceof Error?c.message:String(c);return u.json({error:E},502,Qd)}return l6(u,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),i.post("/:virtualMcpId/:branch/git/suggest-commit",F$({maxSize:Jft,onError:(u)=>u.json({error:"Payload too large"},413,Qd)}),async(u)=>{let t=pJ(u);if(t instanceof Response)return t;let{claimName:f,sandboxId:l}=u.get("vmClaim"),c=u.var.studioContext;try{let E=await u.req.json().catch(()=>({})),$=E.status,w=E.diff,d=w!=null&&typeof w.diffs==="object"&&w.diffs!==null,[h,_]=d5u($)&&d?[$,w]:await Promise.all([$Ii(t,f,"/_sandbox/git/status","GET",l),$Ii(t,f,"/_sandbox/git/diff","GET",l)]),v=await Uft(c,h,_);return u.json(v,200,Qd)}catch(E){let $=E instanceof Error?E.message:String(E);if($==="SANDBOX_GONE")return u.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,Qd);return u.json({error:$},502,Qd)}}),i.post("/:virtualMcpId/:branch/git/judge-review",F$({maxSize:Jft,onError:(u)=>u.json({error:"Payload too large"},413,Qd)}),async(u)=>{let t=pJ(u);if(t instanceof Response)return t;let{claimName:f,sandboxId:l}=u.get("vmClaim"),c=u.var.studioContext;try{let E=await u.req.json().catch(()=>({})),$=E.status,w=E.diff,d=w!=null&&typeof w.diffs==="object"&&w.diffs!==null,[h,_]=d5u($)&&d?[$,w]:await Promise.all([$Ii(t,f,"/_sandbox/git/status","GET",l),$Ii(t,f,"/_sandbox/git/diff","GET",l)]),v=await Aft(c,h,_,typeof E.language==="string"?E.language:void 0);return u.json(v,200,Qd)}catch(E){let $=E instanceof Error?E.message:String(E);if($==="SANDBOX_GONE")return u.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,Qd);return u.json({error:$},502,Qd)}}),i.get("/:virtualMcpId/:branch/preview-fetch",async(u)=>{let t=pJ(u);if(t instanceof Response)return t;let{claimName:f}=u.get("vmClaim"),l=u.req.query("path");if(!l||!l.startsWith("/")||l.startsWith("//")||l.includes("..")||l.includes("\\"))return u.json({error:"Path not allowed"},403);let c;try{c=await t.getPreviewUrl(f)}catch{return u.json({error:"Preview not available"},502)}if(!c)return u.json({error:"Preview not available"},502);let E=c.replace(/\/+$/,""),$=n5u(`${E}${l}`),w;try{w=await fetch($?.url??`${E}${l}`,{...$?{headers:{host:$.hostHeader}}:{}})}catch{return u.json({error:"Preview unreachable"},502)}let d;try{d=await w.text()}catch{return u.json({error:"Preview unreachable"},502)}return new Response(d,{status:w.status,headers:{"content-type":w.headers.get("content-type")??"application/json"}})}),i.post("/:virtualMcpId/:branch/preview-invoke",F$({maxSize:jJ4,onError:(u)=>u.json({error:"Payload too large"},413)}),async(u)=>{let t=pJ(u);if(t instanceof Response)return t;let{claimName:f}=u.get("vmClaim"),l;try{l=await t.getPreviewUrl(f)}catch{return u.json({error:"Preview not available"},502)}if(!l)return u.json({error:"Preview not available"},502);let c;try{c=await u.req.json()}catch{return u.json({error:"Invalid JSON body"},400)}if(!c||typeof c!=="object"||Array.isArray(c))return u.json({error:"Invalid JSON body"},400);let E=xft(c);if(!E)return u.json({error:"Invalid or missing __resolveType"},400);let $=kft(l,E.resolveType),w=n5u($),d;try{d=await fetch(w?.url??$,{method:"POST",headers:{"content-type":"application/json",...w?{host:w.hostHeader}:{}},body:JSON.stringify(E.payload),signal:AbortSignal.timeout(30000)})}catch{return u.json({error:"Preview unreachable"},502)}let h;try{h=await d.text()}catch{return u.json({error:"Preview unreachable"},502)}return new Response(h,{status:d.status,headers:{"content-type":d.headers.get("content-type")??"application/json"}})}),i};var Yft=g(()=>{et();LR();oJ();gft();Od();mz();pK();Nft();Zft();Rcu();gH();v5u();Ift();Gft();Kft();kJ4=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;KJ4=nft(async(i,u)=>{let t=i.var.studioContext;try{Pi(t)}catch{return i.json({error:"Unauthorized"},401)}let f=Yu(t);if(!f)return i.json({error:"Unauthorized"},401);let l;try{l=Oi(t)}catch{return i.json({error:"Organization scope required"},403)}let c=i.req.param("virtualMcpId"),E=i.req.param("branch");if(!c||!E)return i.json({error:"virtualMcpId and branch are required"},400);try{GJ4(E)}catch(n){let N=n instanceof Error?n.message:String(n);return i.json({error:N},400)}let $=await t.storage.virtualMcps.findById(c);if(!$||$.organization_id!==l.id)return i.json({error:"Virtual MCP not found"},404);let w=ww({orgId:l.id,virtualMcpId:c,branch:E}),d=$.metadata??null,h,_=null;try{let n=await Bw(t,{userId:f,branch:E,virtualMcpId:c,virtualMcpMetadata:d});h=n.provider,_=n.kind}catch{h=null}if(!h||!_)return i.json({error:"No sandbox runner found"},404);let v=_==="agent-sandbox"?Y3(w):oy(f,w),D=h5(v,E);return i.set("vmClaim",{claimName:D,sandboxId:v,providerKind:_,runner:h,virtualMcpId:c,branch:E,userId:f,projectRef:w,virtualMcpMetadata:d,connectionIds:$.connections?.map((n)=>n.connection_id)??[]}),u()});EIi=new Map;Qd={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};Lft=["clone","install","start"]});function LJ4(i){if(!i)return;try{let u=JSON.parse(Buffer.from(i,"base64url").toString("utf8"));if(typeof u.updatedAt!=="string"||!Number.isFinite(Date.parse(u.updatedAt))||typeof u.branch!=="string"||!u.branch)return;return{updatedAt:u.updatedAt,branch:u.branch}}catch{return}}function WJ4(i){return Buffer.from(JSON.stringify(i)).toString("base64url")}function Qft(){let i=new Ju;return i.get("/:virtualMcpId",async(u)=>{let t=u.var.studioContext;try{Pi(t)}catch{return u.json({error:"Unauthorized"},401)}let f=Oi(t),l=u.req.param("virtualMcpId"),c=await t.storage.virtualMcps.findById(l);if(!c||c.organization_id!==f.id)return u.json({error:"Virtual MCP not found"},404);let E=u.req.query("branch");if(E){let n=await t.storage.agentSandboxSessions.find({organizationId:f.id,virtualMcpId:l,branch:E});return u.json({items:n?[n]:[],nextCursor:null})}let $=Number(u.req.query("limit")??100),w=Number.isFinite($)?Math.min(Math.max(Math.trunc($),1),200):100,d=u.req.query("before"),h=LJ4(d);if(d&&!h)return u.json({error:"Invalid pagination cursor"},400);let _=await t.storage.agentSandboxSessions.listByVirtualMcp(f.id,l,{limit:w+1,before:h}),v=_.length>w,D=v?_.slice(0,w):_;return u.json({items:D,nextCursor:v&&D.at(-1)?WJ4({updatedAt:D.at(-1).updatedAt,branch:D.at(-1).branch}):null})}),i}var zft=g(()=>{et()});var Hft=(i)=>{let u=new Ju;if(u.use("*",bJ),u.route("/",FAi()),u.route("/",tut()),u.route("/",uft()),u.route("/",ptt()),u.route("/",tIi()),u.route("/tools",wft()),u.route("/",cft()),u.route("/",Qtt({kvStorage:i.kvStorage})),u.route("/",Wtt()),u.route("/fs",mtt({getConnection:i.getNatsConnection})),u.route("/sandbox",Wft()),u.route("/agent-sandbox-sessions",Qft()),u.route("/",att()),u.route("/deco-sites",PAi()),u.route("/sso",rPi()),u.route("/",fIi({tokenStorage:i.tokenStorage,automationEventDispatcher:i.automationEventDispatcher})),u.route("/webhooks",eit()),i.mountDevAssets)u.route("/dev-assets",AAi({orgFromPath:!0}));return u.use("/mcp/:connectionId?",i.mcpAuth),u.use("/mcp/:connectionId/ui-resource",i.mcpAuth),u.use("/mcp/gateway/:virtualMcpId?",i.mcpAuth),u.use("/mcp/virtual-mcp/:virtualMcpId?",i.mcpAuth),u.use("/mcp/self",i.mcpAuth),u.route("/",Lg0()),u.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",i.betterAuthProtectedResourceHandler),u.get("/mcp/.well-known/oauth-protected-resource",i.betterAuthProtectedResourceHandler),u.route("/mcp",xBi()),u.route("/mcp/self",uIi()),u.route("/mcp",jBi()),u.all("/oauth-proxy/:connectionId/*",i.oauthProxyHandler),u.get("/watch",i.watchHandler),u};var Rft=g(()=>{et();I_u();ait();S_u();IAi();kp();P_u();Ytt();ztt();ett();Ta();Ghu();SBi();svu();ott();ift();tft();Eft();i5u();dft();u5u();kBi();Yft();zft()});function N5u(i){try{i?.clear?.()}catch{}}async function bft({accountJwt:i,accountSigningKey:u,expiresAt:t,permissions:f,userId:l,allowedConnectionTypes:c=["WEBSOCKET"]}){let E=j8u(i),$=dki(E.sub),w=Sb(new TextEncoder().encode(u)),d=$ui();try{let h=await wui(l,d,$,{pub:{allow:f.publish.allow},sub:{allow:f.subscribe.allow},allowed_connection_types:c},{algorithm:a6.v2,exp:Math.floor(t.getTime()/1000),signer:w});return new TextDecoder().decode(dui(h,d))}finally{N5u(d),N5u(w),N5u($)}}var Cft=g(()=>{gki()});function YJ4(i){return/^wss?:\/\//i.test(i.trim())?["WEBSOCKET"]:["STANDARD","WEBSOCKET"]}function Mft(){let i=new Ju;return i.post("/links/session",async(u)=>{let f=u.get("studioContext").auth?.user?.id;if(!f)return u.json({error:"Unauthorized"},401);let l=Ou();if(!l.natsTunnelPublicEnabled)return u.json(O5u(),503);if(!l.natsPublicUrl)return u.json(O5u(),503);if(!l.natsAccountJwt||!l.natsAccountSigningKey){if(!l.localMode)return u.json(O5u(),503)}let c=Ph(f),E;if(l.natsAccountJwt&&l.natsAccountSigningKey){let $=new Date(Date.now()+l.natsTunnelSessionTtlSeconds*1000);E=await bft({accountJwt:l.natsAccountJwt,accountSigningKey:l.natsAccountSigningKey,expiresAt:$,permissions:dru(c),userId:f,allowedConnectionTypes:YJ4(l.natsPublicUrl)})}return u.json(hru({publicUrl:l.natsPublicUrl,userId:f,ttlSeconds:l.natsTunnelSessionTtlSeconds,credentials:E}))}),i}var O5u=()=>({error:"link session unavailable"});var qft=g(()=>{et();lt();_Ri();Cft()});async function HJ4(i,u){try{return!await i.alive(u)}catch(t){return console.warn(`[vm-events] alive probe failed for ${u}; assuming alive: ${t instanceof Error?t.message:String(t)}`),!1}}async function Vft(i){let{ctx:u,runner:t,claimName:f,sandboxId:l,organizationId:c,virtualMcpId:E,branch:$}=i;if(l.scope==="shared"){let w={organizationId:c,virtualMcpId:E,branch:$};try{let d=await u.storage.agentSandboxSessions.withLock(w,(h)=>h.beginReap(w,f));if(!d)return;try{await t.delete(f,l)}finally{await u.storage.agentSandboxSessions.withLock(w,(h)=>h.completeReap(w,d.generation,f))}}catch(d){console.warn(`[vm-events] shared cleanup failed for ${E}/${$}: ${d instanceof Error?d.message:String(d)}`)}return}try{await t.delete(f,l)}catch(w){console.warn(`[vm-events] runner.delete failed for ${f}: ${w instanceof Error?w.message:String(w)}`)}}async function RJ4(i){let{stream:u,claimName:t,runner:f,signal:l}=i;return new Promise((c)=>{let E=!1,$=!1,w=null,d=(v)=>{if(E)return;E=!0,clearTimeout(h),l.removeEventListener("abort",_),w?.unsubscribe(),c(v)},h=setTimeout(()=>{if($||E)return;u.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"claim-never-created",message:"Sandbox claim was never created. The SANDBOX_START call may have failed earlier \u2014 check the start error."})}).catch(()=>{}),d(!1)},QJ4),_=()=>d(!1);l.addEventListener("abort",_,{once:!0}),w=Do(f,t,(v)=>{if(E)return;if(v.kind!=="claiming")$=!0;if(u.writeSSE({event:"phase",data:JSON.stringify(v)}).catch(()=>{}),v.kind==="ready")d(!0);else if(v.kind==="failed")d(!1)})})}async function bJ4(i){let{stream:u,runner:t,claimName:f,signal:l}=i,c=Date.now(),E=null;while(!l.aborted){let w=null;try{w=await t.proxyDaemonRequest(f,"/_sandbox/events",{method:"GET",headers:new Headers({accept:"text/event-stream"}),body:null,signal:l})}catch(d){if(l.aborted)return;if(Date.now()-c<rft){await N0(mft,{signal:l}).catch(()=>{});continue}let h=d instanceof Error?d.message:String(d);await u.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:`Upstream daemon SSE error: ${h}`})}).catch(()=>{});return}if(w.status===404){try{await w.body?.cancel()}catch{}if(Date.now()-c<rft){await N0(mft,{signal:l}).catch(()=>{});continue}await u.writeSSE({event:"gone",data:""}).catch(()=>{});return}if(!w.ok||!w.body){try{await w.body?.cancel()}catch{}await u.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:`Upstream daemon SSE failed (${w.status}).`})}).catch(()=>{});return}E=w;break}if(!E||!E.body)return;let $=E.body.getReader();try{while(!l.aborted){let{value:w,done:d}=await $.read();if(d)break;if(w)await u.write(w)}}catch{}finally{try{$.releaseLock()}catch{}}}var QJ4=90000,zJ4=15000,eft=()=>{let i=new Ju;return i.get("/",async(u)=>{let t=u.var.studioContext;try{Pi(t)}catch{return u.json({error:"Unauthorized"},401)}let f=Yu(t);if(!f)return u.json({error:"Unauthorized"},401);let l;try{l=Oi(t)}catch{return u.json({error:"Organization scope required"},403)}let c=u.req.query("virtualMcpId"),E=u.req.query("branch");if(!c||!E)return u.json({error:"virtualMcpId and branch are required"},400);let $=await t.storage.virtualMcps.findById(c);if(!$||$.organization_id!==l.id)return u.json({error:"Virtual MCP not found"},404);let w=ww({orgId:l.id,virtualMcpId:c,branch:E}),d=$.metadata??null,h,_=null,v=null;try{let Z=await Bw(t,{userId:f,branch:E,virtualMcpId:c,virtualMcpMetadata:d});h=Z.provider,_=Z.kind}catch(Z){v=Z instanceof Error?Z:Error(String(Z)),h=null}let D=_==="agent-sandbox"?Y3(w):oy(f,w),n=h5(D,E),N=D.scope==="shared"?await t.storage.agentSandboxSessions.find({organizationId:l.id,virtualMcpId:c,branch:E}):null,O=D.scope==="shared"?N?.sandboxHandle&&N.status==="ready"?{sandboxHandle:N.sandboxHandle,sandboxProviderKind:"agent-sandbox"}:null:_&&T5(pl(d),f,E,_),y=!!O&&O.sandboxHandle===n;if(!h)return th(u,async(Z)=>{await Z.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:v?.message??"No sandbox runner configured on this studio instance."})})});return u.header("X-Accel-Buffering","no"),u.header("Content-Encoding","identity"),th(u,async(Z)=>{let T=new AbortController,B=setInterval(()=>{Z.writeSSE({event:"keepalive",data:""}).catch(()=>{clearInterval(B)})},zJ4);Z.onAbort(()=>{T.abort(),clearInterval(B)});try{if(D.scope==="shared"&&N?.desiredState==="stopped"){if(N.status==="stopping"||N.status==="deleting"){let A=N.status,k=!0;try{let I=N.sandboxHandle??(A==="deleting"?n:null);if(I)await h.delete(I,D)}catch(I){k=!1,console.warn(`[vm-events] failed to resume shared stop for ${c}/${E}: ${I instanceof Error?I.message:String(I)}`)}finally{if(A!=="deleting"||k){let I={organizationId:l.id,virtualMcpId:c,branch:E};await t.storage.agentSandboxSessions.withLock(I,(j)=>A==="deleting"?j.completeDelete(I,N.generation):j.completeStop(I,N.generation))}}}await Z.writeSSE({event:"gone",data:""}).catch(()=>{});return}if(D.scope==="shared"&&N?.status==="reaping"&&N.sandboxHandle){await Vft({ctx:t,runner:h,claimName:N.sandboxHandle,sandboxId:D,organizationId:l.id,virtualMcpId:c,branch:E}),await Z.writeSSE({event:"gone",data:""}).catch(()=>{});return}if(y&&_){if(await HJ4(h,n)){await Vft({ctx:t,runner:h,claimName:n,sandboxId:D,organizationId:l.id,virtualMcpId:c,branch:E}),await Z.writeSSE({event:"gone",data:""}).catch(()=>{});return}}if(!await RJ4({stream:Z,claimName:n,runner:h,signal:T.signal})||T.signal.aborted)return;await bJ4({stream:Z,runner:h,claimName:n,signal:T.signal})}finally{clearInterval(B)}})}),i},rft=60000,mft=500;var aft=g(()=>{et();oJ();Od();O4();mz();rz();pK();xd()});function MJ4(i){return i.filter((u)=>u.vendors?.alias).map((u)=>({name:u.name,title:u.title,description:u.description,logo:u.logo,category:u.category,vendor:{alias:u.vendors.alias,url:u.vendors.url}}))}async function qJ4(i,u){let t=await fetch(`${i}/rest/v1/apps?select=name,title,description,logo,category,vendors(alias,url)`,{headers:{apikey:u,Authorization:`Bearer ${u}`,Accept:"application/json"},signal:AbortSignal.timeout(CJ4)});if(!t.ok){let f=await t.text().catch(()=>t.statusText);throw console.error(`[deco-apps] Supabase error (${t.status}): ${f.slice(0,200)}`),Error(`External service error (${t.status})`)}return await t.json()}var CJ4=1e4,VJ4=async(i,u)=>{if(!i.get("studioContext").auth.user?.id)return i.json({error:"Unauthorized"},401);return u()},oft=()=>{let i=new Ju;return i.use("*",VJ4),i.get("/",async(u)=>{let t=Ou(),f=t.decoSupabaseUrl,l=t.decoSupabaseServiceKey;if(!f||!l)return u.json({apps:[]});try{let c=await qJ4(f,l);return u.json({apps:MJ4(c)})}catch(c){return console.error("[deco-apps] GET error:",c),u.json({error:"Failed to fetch apps"},502)}}),i};var sft=g(()=>{et();lt()});import{z as bu}from"zod";function q5(i,u="invalid_request_error",t=null,f=null){return{error:{message:i,type:u,param:t,code:f}}}function tX4(i){if(!i)return null;let u=i.indexOf(":");if(u===-1)return{credentialId:null,modelId:i};let t=i.substring(0,u),f=i.substring(u+1);if(!t||!f)return null;return{credentialId:t,modelId:f}}function fX4(i,u,t){try{return JSON.parse(i)}catch{throw new u4t(`Invalid JSON in tool call arguments for function '${t}' (tool_call_id: ${u}): ${i}`)}}function lX4(i){let u={};for(let t of i)if(t.role==="assistant"&&t.tool_calls)for(let f of t.tool_calls)u[f.id]=f.function.name;return i.map((t)=>{switch(t.role){case"system":return{role:"system",content:t.content};case"user":if(typeof t.content==="string")return{role:"user",content:t.content};return{role:"user",content:t.content.map((l)=>{if(l.type==="text")return{type:"text",text:l.text};return{type:"image",image:l.image_url.url}})};case"assistant":if(t.tool_calls&&t.tool_calls.length>0)return{role:"assistant",content:t.tool_calls.map((l)=>({type:"tool-call",toolCallId:l.id,toolName:l.function.name,input:fX4(l.function.arguments,l.id,l.function.name)}))};return{role:"assistant",content:t.content??""};case"tool":let f=u[t.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:t.tool_call_id,toolName:f,output:{type:"text",value:t.content}}]}}})}function cX4(i){let u=i.map((t)=>{let f=t.function.parameters?dd(t.function.parameters):dd({type:"object",properties:{}});return[t.function.name,z0({description:t.function.description,inputSchema:f})]});return Object.fromEntries(u)}function EX4(i){if(!i)return;return{openai:{response_format:i}}}function $X4(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function pft(i,u,t,f,l,c){let E={model:i,messages:u,tools:t,temperature:f.temperature,maxTokens:f.max_tokens,topP:f.top_p,frequencyPenalty:f.frequency_penalty,presencePenalty:f.presence_penalty,stopSequences:f.stop?Array.isArray(f.stop)?f.stop:[f.stop]:void 0,abortSignal:c};return l?{...E,providerOptions:l}:E}function i4t(i){if(i==="tool-calls")return"tool_calls";if(i==="length")return"length";return"stop"}var rJ4=256,mJ4,eJ4,aJ4,oJ4,sJ4,pJ4,iX4,uX4,u4t,t4t,f4t;var l4t=g(()=>{gf();et();oJ();mJ4=bu.object({type:bu.literal("function"),function:bu.object({name:bu.string(),description:bu.string().optional(),parameters:bu.record(bu.string(),bu.unknown()).optional()})}),eJ4=bu.object({id:bu.string(),type:bu.literal("function"),function:bu.object({name:bu.string(),arguments:bu.string()})}),aJ4=bu.discriminatedUnion("role",[bu.object({role:bu.literal("system"),content:bu.string(),name:bu.string().optional()}),bu.object({role:bu.literal("user"),content:bu.union([bu.string(),bu.array(bu.union([bu.object({type:bu.literal("text"),text:bu.string()}),bu.object({type:bu.literal("image_url"),image_url:bu.object({url:bu.string(),detail:bu.string().optional()})})]))]),name:bu.string().optional()}),bu.object({role:bu.literal("assistant"),content:bu.string().nullable().optional(),name:bu.string().optional(),tool_calls:bu.array(eJ4).optional()}),bu.object({role:bu.literal("tool"),content:bu.string(),tool_call_id:bu.string()})]),oJ4=bu.object({type:bu.literal("text")}),sJ4=bu.object({type:bu.literal("json_object")}),pJ4=bu.object({type:bu.literal("json_schema"),json_schema:bu.object({name:bu.string(),description:bu.string().optional(),schema:bu.record(bu.string(),bu.unknown()),strict:bu.boolean().optional()})}),iX4=bu.union([oJ4,sJ4,pJ4]),uX4=bu.object({model:bu.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:bu.array(aJ4),stream:bu.boolean().optional().default(!1),temperature:bu.number().min(0).max(2).optional(),max_tokens:bu.number().positive().optional(),top_p:bu.number().min(0).max(1).optional(),frequency_penalty:bu.number().min(-2).max(2).optional(),presence_penalty:bu.number().min(-2).max(2).optional(),stop:bu.union([bu.string(),bu.array(bu.string())]).optional(),tools:bu.array(mJ4).optional(),tool_choice:bu.union([bu.literal("auto"),bu.literal("none"),bu.literal("required"),bu.object({type:bu.literal("function"),function:bu.object({name:bu.string()})})]).optional(),response_format:iX4.optional(),user:bu.string().optional()});u4t=class u4t extends Error{constructor(i){super(i);this.name="MessageConversionError"}};t4t=new Ju;t4t.post("/:org/v1/chat/completions",async(i)=>{let u=i.get("studioContext"),t=i.req.param("org");try{if(!u.auth.apiKey?.id)return i.json(q5("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!u.organization)return i.json(q5("Organization context is required. Ensure your API key has organization metadata.","invalid_request_error","organization"),400);if((u.organization.slug??u.organization.id)!==t)return i.json(q5("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let f=await i.req.json(),l=uX4.safeParse(f);if(!l.success){let O=l.error.issues[0]??{message:"Invalid request",path:[]};return i.json(q5(`Invalid request: ${O.message}`,"invalid_request_error",O.path.length>0?O.path.join("."):null),400)}let c=l.data,E=tX4(c.model);if(!E)return i.json(q5("Invalid model format. Expected 'model_id' or 'credential_id:model_id' (e.g., 'claude-sonnet-4-6' or 'key_abc123:claude-sonnet-4-6')","invalid_request_error","model"),400);let{credentialId:$}=E,{modelId:w}=E;if(!$){let O=await u.storage.aiProviderKeys.list({organizationId:u.organization.id});if(O.length===0)return i.json(q5("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);$=O[0].id}let d;try{d=await u.aiProviders.activate($,u.organization.id)}catch{return i.json(q5(`AI provider credential not found or inaccessible: ${$}`,"invalid_request_error","model"),404)}let h=d.aiSdk.languageModel(w),_=lX4(c.messages),v=c.tools?cX4(c.tools):void 0,D=EX4(c.response_format),n=$X4(),N=Math.floor(Date.now()/1000);if(c.stream)return th(i,async(O)=>{let y=pft(h,_,v,c,D,i.req.raw.signal);try{let Z=C3(y),T=!1,B=0,F="",A=async()=>{if(F.length===0)return;let k=F;F="",await O.writeSSE({data:JSON.stringify({id:n,object:"chat.completion.chunk",created:N,model:c.model,choices:[{index:0,delta:{content:k},finish_reason:null}]})})};for await(let k of Z.fullStream){if(!T&&(k.type==="text-delta"||k.type==="tool-call"))await O.writeSSE({data:JSON.stringify({id:n,object:"chat.completion.chunk",created:N,model:c.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),T=!0;if(k.type==="text-delta"){if(F+=k.text,F.length>=rJ4)await A()}else if(k.type==="tool-call"){await A();let I=B++;await O.writeSSE({data:JSON.stringify({id:n,object:"chat.completion.chunk",created:N,model:c.model,choices:[{index:0,delta:{tool_calls:[{index:I,id:k.toolCallId,type:"function",function:{name:k.toolName,arguments:JSON.stringify(k.input)}}]},finish_reason:null}]})})}else if(k.type==="finish")await A(),await O.writeSSE({data:JSON.stringify({id:n,object:"chat.completion.chunk",created:N,model:c.model,choices:[{index:0,delta:{},finish_reason:i4t(k.finishReason)}],usage:k.totalUsage?{prompt_tokens:k.totalUsage.inputTokens??0,completion_tokens:k.totalUsage.outputTokens??0,total_tokens:k.totalUsage.totalTokens??0}:void 0})})}await A(),await O.writeSSE({data:"[DONE]"})}catch(Z){let T=Z;console.error("[openai-compat:stream] Error:",T.message),await O.writeSSE({data:JSON.stringify({error:{message:T.message,type:"server_error"}})})}});else{let O=pft(h,_,v,c,D,i.req.raw.signal),y=await L9(O),Z={role:"assistant",content:y.text||null};if(y.toolCalls&&y.toolCalls.length>0)Z.tool_calls=y.toolCalls.map((T)=>({id:T.toolCallId,type:"function",function:{name:T.toolName,arguments:JSON.stringify("input"in T?T.input:{})}})),Z.content=null;return i.json({id:n,object:"chat.completion",created:N,model:c.model,choices:[{index:0,message:Z,finish_reason:i4t(y.finishReason)}],usage:{prompt_tokens:y.usage?.inputTokens??0,completion_tokens:y.usage?.outputTokens??0,total_tokens:y.usage?.totalTokens??0}})}}catch(f){let l=f;if(l.name==="AbortError")return i.json(q5("Request aborted","invalid_request_error"),400);if(l.name==="MessageConversionError")return i.json(q5(l.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",l.message,l.stack),i.json(q5(l.message,"server_error"),500)}});f4t=t4t});function dX4(){let i=process.env.POSTHOG_KEY;if(!i)return null;return{key:i,host:process.env.POSTHOG_HOST??wX4}}var c4t,wX4="https://ph.studio.decocms.com",E4t;var $4t=g(()=>{et();yei();r9();n6();lt();Phu();o1i();c4t=new Ju;c4t.get("/",(i)=>{let u={version:_W.version,theme:d10(),...PO().logo&&{logo:PO().logo},...q3()&&{internalUrl:Hli()},...Ou().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!Ou().firecrawlApiKey,auth:zo0(),posthog:dX4(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!q3()&&Ou().sandboxProviderKind==="agent-sandbox"}};return i.header("Cache-Control","no-store"),i.json({success:!0,config:u})});E4t=c4t});function wIi(i){let u=(i??"").trim().toLowerCase();return u=u.replace(/^https?:\/\//,""),u=u.replace(/^www\./,""),u=u.split(/[/?#]/)[0]??"",u.replace(/\/+$/,"")}function d4t(i){return(wIi(i).split(".")[0]||i).replace(/[-_]/g," ").split(" ").filter(Boolean).map((t)=>t.charAt(0).toUpperCase()+t.slice(1)).join(" ")}function h4t(i,u=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(wIi(i))}&sz=${u}`}function w4t(i,u){let t=i.trim();if(t.length<=u)return t;let f=t.slice(0,u-1),l=f.lastIndexOf(" ");return`${(l>u*0.6?f.slice(0,l):f).trimEnd()}\u2026`}function _4t(i){let{brand:u,domain:t,score:f,verdict:l}=i,c=typeof f==="number"?`${u} commerce report \u2014 ${Math.round(f)}/100 \xB7 decocms`:`${u} commerce report \xB7 decocms`,E=`See the full ${u} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,$=l?.trim()?w4t(`${l.trim().replace(/\s+/g," ")} \u2014 ${E}`,200):w4t(`How does ${t} really perform? ${E}`,200);return{title:c,description:$}}import{join as hX4}from"path";function D8(i){return i.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function _X4(i){let u=wIi(i),t=d4t(u),f=h4t(u,128),c=`${(Ou().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(u)}`,{title:E,description:$}=_4t({brand:t,domain:u});return[`<title>${D8(E)}</title>`,`<meta name="description" content="${D8($)}" />`,'<meta name="robots" content="noindex, follow" />','<meta property="og:type" content="website" />','<meta property="og:site_name" content="decocms" />',`<meta property="og:title" content="${D8(E)}" />`,`<meta property="og:description" content="${D8($)}" />`,`<meta property="og:url" content="${D8(c)}" />`,'<meta name="twitter:card" content="summary" />',`<meta name="twitter:title" content="${D8(E)}" />`,`<meta name="twitter:description" content="${D8($)}" />`,`<link rel="canonical" href="${D8(c)}" />`,`<link rel="icon" href="${D8(f)}" sizes="any" />`].join(`
88553
88553
  `)}function vX4(i,u){return i.replace(/<title>[\s\S]*?<\/title>\s*/i,"").replace(/<meta\s+name="(?:description|twitter:[^"]*)"[^>]*>\s*/gi,"").replace(/<meta\s+property="og:[^"]*"[^>]*>\s*/gi,"").replace(/<link\s+rel="icon"[^>]*>\s*/gi,"").replace("</head>",` ${u}
88554
- </head>`)}function v4t(i){let u=new Ju;return u.get("/:domain",async(t)=>{let f=t.req.param("domain"),l=i?hX4(i,"index.html"):null,c=l?Bun.file(l):null;if(!c||!await c.exists())return t.notFound();let E=await c.text();try{let $=_X4(f);return t.html(vX4(E,$),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return t.html(E)}}),u}var D4t=g(()=>{et();lt()});import{z as $u}from"zod";var iX,DX4,nX4,gX4,NX4,n4t;var g4t=g(()=>{iX=$u.enum(["good","bad","neutral"]),DX4=$u.preprocess((i)=>{if(Array.isArray(i))return{kind:"text",value:i.find((t)=>t!==null&&typeof t!=="object")??""};return i!==null&&typeof i==="object"?i:{kind:"text",value:i}},$u.object({kind:$u.enum(["text","number","sparkline","badge","score"]).catch("text"),value:$u.coerce.string().optional(),tone:iX.optional(),muted:$u.boolean().optional(),delta:$u.coerce.string().optional(),deltaDir:$u.enum(["up","down","neutral"]).optional(),points:$u.array($u.coerce.number()).optional(),label:$u.coerce.string().optional()}).transform((i)=>{if(i.kind==="badge"&&i.label==null)i.label=i.value??"";if(i.kind==="score"){let u=Number(i.value);if(Number.isNaN(u))return{...i,kind:"text"}}return i})),nX4=$u.preprocess((i)=>{let u=i;if(u&&typeof u==="object"&&!Array.isArray(u)&&Array.isArray(u.cells))u=u.cells;if(Array.isArray(u)&&u.length===1&&Array.isArray(u[0]))u=u[0];if(Array.isArray(u))return u;if(u&&typeof u==="object")return Object.values(u);return u},$u.array(DX4)),gX4={key:$u.coerce.string(),title:$u.coerce.string(),eyebrow:$u.coerce.string().optional(),headline:$u.coerce.string(),annotation:$u.coerce.string().optional(),methodology:$u.coerce.string().optional(),sources:$u.array($u.object({name:$u.coerce.string(),logoUrl:$u.coerce.string()})).optional()},NX4=$u.discriminatedUnion("template",[$u.object({template:$u.literal("cover"),score:$u.object({value:$u.coerce.number(),max:$u.coerce.number().optional(),grade:$u.coerce.string().optional(),label:$u.coerce.string().optional()}).optional(),brandImage:$u.coerce.string().optional(),screenshot:$u.coerce.string().optional(),mobileScreenshot:$u.coerce.string().optional()}),$u.object({template:$u.literal("cta"),ctaUrl:$u.coerce.string().optional(),ctaLabel:$u.coerce.string().optional(),bullets:$u.array($u.coerce.string()).optional()}),$u.object({template:$u.literal("series"),points:$u.array($u.coerce.number()).min(2),xLabels:$u.array($u.coerce.string()).min(1),unit:$u.coerce.string().optional(),callout:$u.object({index:$u.coerce.number(),value:$u.coerce.string(),tone:iX.optional()})}),$u.object({template:$u.literal("threshold"),value:$u.coerce.string().default(""),metricLabel:$u.coerce.string().optional(),ratio:$u.coerce.number(),thresholdRatio:$u.coerce.number().optional(),thresholdLabel:$u.coerce.string().default(""),tone:iX.optional()}),$u.object({template:$u.literal("stats"),stats:$u.array($u.object({value:$u.coerce.string(),label:$u.coerce.string(),tone:iX.optional()})).min(1)}),$u.object({template:$u.literal("bars"),items:$u.array($u.object({value:$u.coerce.string(),label:$u.coerce.string(),ratio:$u.coerce.number(),tone:iX.optional()})).min(1)}),$u.object({template:$u.literal("gauges"),gauges:$u.array($u.object({label:$u.coerce.string(),value:$u.coerce.string(),status:$u.enum(["good","warn","bad"]).catch("warn"),caption:$u.coerce.string().optional(),ratio:$u.coerce.number().optional()})).min(1)}),$u.object({template:$u.literal("checklist"),checks:$u.array($u.object({label:$u.coerce.string(),status:$u.enum(["pass","fail","warn"]).catch("fail"),value:$u.coerce.string().optional()})).min(1)}),$u.object({template:$u.literal("table"),columns:$u.array($u.object({label:$u.coerce.string(),align:$u.enum(["left","right"]).optional()})).min(1),rows:$u.array(nX4).min(1),highlightRow:$u.coerce.number().optional()}),$u.object({template:$u.literal("products"),products:$u.array($u.object({name:$u.coerce.string(),price:$u.coerce.string().optional(),image:$u.coerce.string().optional(),url:$u.coerce.string().optional()})).min(1)}),$u.object({template:$u.literal("list"),entries:$u.array($u.object({label:$u.coerce.string(),severity:$u.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:$u.coerce.number().optional()}),$u.object({template:$u.literal("keywords"),volumeLabel:$u.coerce.string().optional(),keywords:$u.array($u.object({term:$u.coerce.string(),volume:$u.coerce.string(),position:$u.coerce.number().catch(0)})).min(1)}),$u.object({template:$u.literal("competitor"),metricLabel:$u.coerce.string().optional(),competitors:$u.array($u.object({name:$u.coerce.string(),value:$u.coerce.string(),tone:iX.optional(),isYou:$u.boolean().optional()})).min(1)}),$u.object({template:$u.literal("scorecard"),rivalLabel:$u.coerce.string().optional(),dimensions:$u.array($u.object({label:$u.coerce.string(),you:$u.coerce.string(),rival:$u.coerce.string().optional(),rivalName:$u.coerce.string().optional(),tone:iX.optional()})).min(1)})]),n4t=$u.object({...gX4,template:NX4})});function N4t(i){let u=[],t=[...i.sections].sort((f,l)=>f.position-l.position).map((f)=>{let l=n4t.safeParse(f.props);if(l.success)return l.data;let c=l.error.issues[0];return u.push({section_type:f.section_type,position:f.position,reason:c?`${c.path.join(".")||"(root)"}: ${c.message}`:"contract violation"}),null}).filter((f)=>f!==null);return{deck:{meta:{...i.meta,scores:i.summary?.scores},slides:t},drops:u}}var O4t=g(()=>{g4t()});function uii(i,u){return fetch(`${QO({})}${i}`,u)}async function OX4(i,u){let t=await uii(`/api/v2/public/diagnostics/${encodeURIComponent(i)}`+(u?`?pw=${encodeURIComponent(u)}`:""),{headers:{Accept:"application/json"}});if(t.status===404)return{status:"not_found",deck:null,scanned_at:null,drops:[]};if(!t.ok)throw Error(`report read HTTP ${t.status}`);let f=await t.json(),{deck:l,drops:c}=N4t(f);return{status:l.slides.length?"ready":"empty",deck:l,scanned_at:f.scanned_at,drops:c}}var yX4,uX,y4t;var Z4t=g(()=>{et();Nd();JY();O4t();yX4=new Set(["complete","errored","terminated","unknown"]),uX=new Ju;uX.use("*",async(i,u)=>{let t=await dt.api.getSession({headers:i.req.raw.headers});if(!t?.user?.id)return i.json({error:"Authentication required"},401,{"Cache-Control":"private, no-store",Vary:"Cookie"});i.set("reportUser",{email:t.user.email}),await u(),i.header("Cache-Control","private, no-store"),i.header("Vary","Cookie");return});uX.get("/site/:domain",async(i)=>{let u=i.req.param("domain").trim();if(!u)return i.json({error:"domain is required"},400);let t=i.req.query("key")?.trim()||void 0;try{let f=await OX4(u,t);return i.header("Cache-Control","private, no-store"),i.json(f)}catch{return i.json({error:"report read failed"},502)}});uX.post("/run",async(i)=>{let u;try{u=await i.req.json()}catch{return i.json({error:"invalid JSON"},400)}let t=typeof u.domain==="string"?u.domain.trim():"";if(!t)return i.json({error:"domain is required"},400);let f=i.get("reportUser").email,l=typeof u.distinctId==="string"&&u.distinctId.trim()&&u.distinctId.length<=200?u.distinctId.trim():void 0;try{let c=await uii("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${zO({})}`},body:JSON.stringify({url:t,email:f,distinct_id:l})});if(!c.ok)return i.json({error:`run HTTP ${c.status}`},502);let E=await c.json(),$=E.blocked?{state:"blocked"}:E.status==="fresh"?{state:"fresh"}:E.mode==="sync"?{state:"sync"}:{state:"running",id:E.id??null};return i.json($)}catch{return i.json({error:"run failed"},502)}});uX.get("/status",async(i)=>{let u=i.req.query("id");if(!u)return i.json({error:"id is required"},400);try{let t=await uii(`/api/v2/diagnostics/status?id=${encodeURIComponent(u)}`,{headers:{Authorization:`Bearer ${zO({})}`}});if(!t.ok)return i.json({error:`status HTTP ${t.status}`},502);let l=(await t.json()).status??"unknown",c={done:yX4.has(l),status:l};return i.json(c)}catch{return i.json({error:"status failed"},502)}});uX.get("/link-token/:id",async(i)=>{let u=i.req.param("id");try{let t=await uii(`/api/v2/public/link-tokens/${encodeURIComponent(u)}`,{headers:{Accept:"application/json"}});if(t.status===404)return i.json(null);if(!t.ok)return i.json({error:`link token HTTP ${t.status}`},502);return i.json(await t.json())}catch{return i.json({error:"link token resolve failed"},502)}});uX.get("/suggest",async(i)=>{let u=(i.req.query("q")??"").trim().slice(0,64);if(u.length<2)return i.json({suggestions:[]});try{let t=await uii(`/api/v2/public/suggest?q=${encodeURIComponent(u)}`,{headers:{Accept:"application/json"}});if(!t.ok)return i.json({suggestions:[]});let f=await t.json();return i.json({suggestions:Array.isArray(f.suggestions)?f.suggestions:[]})}catch{return i.json({suggestions:[]})}});y4t=uX});function T4t(i,u){if(u.startsWith("text/html")||u.startsWith("image/svg"))i.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var B4t,ZX4,TX4,F4t;var U4t=g(()=>{et();ah();BH();$Y();B4t=new Ju,ZX4=["range","if-none-match","if-modified-since"],TX4=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];B4t.get("/:org/files/*",async(i)=>{let u=i.get("studioContext"),t=u.organization?.id;if(!u.auth?.user?.id){if(XR(i))return i.redirect(`/login?next=${encodeURIComponent(i.req.path)}`,302);throw new I0(401,{message:"Authentication required"})}if(!t)throw new I0(401,{message:"Organization context required"});let f=i.req.path.replace(/^.*\/files\//,"");if(!f)throw new I0(400,{message:"Missing file key"});let l=await ao(f,u);if(!l)throw new I0(503,{message:"Object storage not configured"});if(l.startsWith("data:")&&eh()){let w=l.match(/^data:([^;]+);base64,(.+)$/s);if(!w)throw new I0(500,{message:"Invalid data URL from storage"});let[,d,h]=w,_=Buffer.from(h,"base64"),v=new Headers({"Content-Type":d,"Cache-Control":"private, max-age=86400"});return T4t(v,d),new Response(_,{status:200,headers:v})}let c=new Headers;for(let w of ZX4){let d=i.req.header(w);if(d)c.set(w,d)}let E=await fetch(l,{headers:c});if(E.status===403||E.status===404)throw new I0(404,{message:"File not found"});if(!E.ok&&E.status!==304&&E.status!==416)throw console.error(`[files] upstream storage error ${E.status} for key:`,f),new I0(502,{message:"Upstream storage error"});let $=new Headers;for(let w of TX4){let d=E.headers.get(w);if(d)$.set(w,d)}return $.set("Cache-Control","private, max-age=86400"),T4t($,$.get("content-type")??""),new Response(E.body,{status:E.status,headers:$})});F4t=B4t});function x4t(i){let u=i?.connectFn??PX4,t=null,f=null,l=!1,c=!1,E=!1,$=[];function w(){return t!==null&&!t.isClosed()&&!t.isDraining()&&!E}function d(){console.log(`[NatsProvider] fireReady: ${$.length} callbacks`);for(let v of $)try{v()}catch{}}function h(v){(async()=>{for await(let D of v.status())if(D.type==="disconnect")console.log("[NatsProvider] Disconnected"),E=!0;else if(D.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),E=!1,f=null,d()})().catch(()=>{})}async function _(v,D){let n=0;while(!c)try{t=await u({servers:v,timeout:UX4,reconnect:!0,maxReconnectAttempts:-1,...D?{authenticator:D}:{}}),console.log(`[NatsProvider] Connected to ${t.getServer()} after ${n} attempt(s)`),f=null,E=!1,h(t),d();return}catch{n++;let N=c6(FX4,BX4,n-1,2,0.5);await N0(N)}}return{init(v,D){if(l)return;l=!0,c=!1;let n=D?.creds?P4t.credsAuthenticator(new TextEncoder().encode(D.creds)):void 0;_(v,n).catch(()=>{})},isConnected(){return w()},getConnection(){return w()?t:null},getJetStream(){if(!w())return null;if(!f)f=I4t.jetstream(t);return f},onReady(v){if($.push(v),w())try{v()}catch{}},async drain(){if(c=!0,l=!1,f=null,E=!1,t){let v=t;t=null,await v.drain().catch(()=>{})}}}}function PX4(i){return A4t.connect(i)}var P4t,A4t,I4t,BX4=100,FX4=3000,UX4=3000;var k4t=g(()=>{O4();P4t=G(qN(),1),A4t=G(hRi(),1),I4t=G(y2(),1)});function y5u(i,u){return`${i}.${u}`}class Z5u{cache;constructor(i){this.cache=TR({ttlMs:i?.ttlMs??AX4,maxSize:i?.maxSize??IX4})}async get(i,u){return this.cache.get(y5u(i,u))??null}async set(i,u,t){this.cache.set(y5u(i,u),t)}async invalidate(i,u){this.cache.delete(y5u(i,u))}teardown(){this.cache.clear()}}var AX4=600000,IX4=5000;var G4t=()=>{};function dIi(i,u){return`${i}:${u}`}function T5u(i){let u=TR({ttlMs:i?.ttlMs??xX4,maxSize:i?.maxSize??kX4}),t=i?.getConnection,f=crypto.randomUUID(),l=new TextEncoder,c=new TextDecoder,E=null;function $(w,d){let h=t?.();if(!h)return;try{h.publish(j4t,l.encode(JSON.stringify({organizationId:w,keyId:d,originId:f})))}catch(_){console.warn("[ProviderKeyCache] Publish failed (non-critical):",_)}}return{get(w,d){return u.get(dIi(w,d))},set(w,d,h){u.set(dIi(w,d),h)},invalidate(w,d){u.delete(dIi(w,d)),$(w,d)},start(){if(E)return;let w=t?.();if(!w)return;E=w.subscribe(j4t),(async()=>{for await(let d of E)try{let h=JSON.parse(c.decode(d.data));if(h.originId===f)continue;u.delete(dIi(h.organizationId,h.keyId))}catch{}})().catch(console.error)},teardown(){E?.unsubscribe(),E=null,u.clear()}}}var j4t="studio.ai-provider-keys.invalidate",xX4=30000,kX4=5000;var S4t=()=>{};class B5u{options;sub=null;onCancel=null;encoder=new TextEncoder;originId=crypto.randomUUID();constructor(i){this.options=i}async start(i){if(i)this.onCancel=i;if(this.sub)return;if(!this.onCancel)return;let u=this.options.getConnection();if(!u)return;this.sub=u.subscribe("mesh.decopilot.cancel");let t=new TextDecoder;(async()=>{for await(let f of this.sub)try{let l=JSON.parse(t.decode(f.data));if(l.originId===this.originId)continue;this.onCancel?.(l.taskId)}catch{}})().catch(console.error)}broadcast(i){if(/[.*>\s]/.test(i)){console.warn("[NatsCancelBroadcast] Invalid threadId, skipping broadcast");return}this.onCancel?.(i);try{let u=this.options.getConnection();if(!u)return;u.publish("mesh.decopilot.cancel",this.encoder.encode(JSON.stringify({taskId:i,originId:this.originId})))}catch(u){console.warn("[NatsCancelBroadcast] Publish failed (non-critical):",u)}}publishControlFrame(i,u){}async stop(){this.sub?.unsubscribe(),this.sub=null,this.onCancel=null}}function LX4(){return{name:Rn,subjects:[`${zRi}.>`],storage:M_.StorageType.File,max_age:SX4,max_bytes:JX4,max_msgs_per_subject:XX4,discard:M_.DiscardPolicy.Old,retention:M_.RetentionPolicy.Limits,duplicate_window:KX4,num_replicas:1}}class X4t{chunks=0;encodeMs=0;maxMs=0;bytes=0;windowStart=performance.now();constructor(){setInterval(()=>this.flush(),1e4).unref?.()}record(i,u){if(this.chunks++,this.encodeMs+=i,i>this.maxMs)this.maxMs=i;this.bytes+=u}flush(){let i=performance.now(),u=i-this.windowStart;if(this.chunks>0&&u>0)console.warn(JSON.stringify({msg:"stream-encode-trace",windowMs:Math.round(u),chunks:this.chunks,encodeMs:Math.round(this.encodeMs),pctOfLoop:+(this.encodeMs/u*100).toFixed(1),maxChunkMs:+this.maxMs.toFixed(2),mbEncoded:+(this.bytes/1048576).toFixed(2)}));this.chunks=0,this.encodeMs=0,this.maxMs=0,this.bytes=0,this.windowStart=i}}function K4t(i){let u=J4t.headers();for(let[t,f]of Object.entries(i))u.set(t,f);return u}function zX4(i,u){let t=0;return{publish(f,l,c,E){f.publish(l,c,E?{headers:E}:void 0).catch(($)=>{if(t++,jX4().add(1,{"org.id":u??"unknown"}),t===1||t%100===0)console.warn(`[Decopilot] JetStream publish failed for thread ${i} (${t} total):`,$)})},get errorCount(){return t}}}class F5u{options;js=null;jsm=null;constructor(i){this.options=i}async init(){let i=this.options.getConnection();if(!i){console.log("[Decopilot] StreamBuffer.init skipped: NATS not connected yet");return}let u=this.options.getJetStreamManager?await this.options.getJetStreamManager():await M_.jetstreamManager(i),t=LX4();try{await u.streams.info(Rn),await u.streams.update(Rn,t)}catch(f){if(f instanceof Error&&f.message.includes("stream not found"))await u.streams.add(t);else if(f instanceof Error&&/can ?not change.*storage|storage type/i.test(f.message))await u.streams.delete(Rn),await u.streams.add(t);else throw f}this.js=this.options.getJetStream(),this.jsm=u,console.log(`[Decopilot] StreamBuffer.init ${this.js?"ready":"degraded (js=null)"}`)}pump(i,u,t,f){let l=this.js;if(!l)return console.warn(`[Decopilot] pump: JetStream client unavailable for thread ${u}; chunks NOT published to NATS`),Promise.resolve();let c=zX4(u,f),E=!1,$=()=>{if(E)return;E=!0;let d=Ymu(u);l.publish(d.subject,d.data).catch(()=>{})};t.addEventListener("abort",$,{once:!0});let w=(d)=>{let h=performance.now(),_=dW(d,{runId:u}),v=performance.now()-h;if(tq().record(v),fq().add(1,{"org.id":f??"unknown"}),QX4?.record(v,_.reduce((D,n)=>D+n.data.length,0)),_.length===0){console.warn(`[Decopilot] dropping oversized stream chunk for thread ${u}`);return}for(let D of _)c.publish(l,D.subject,D.data,D.headers?K4t(D.headers):void 0)};return(async()=>{let d=i.getReader(),h=0,_=0,v;try{while(!0){let{done:D,value:n}=await d.read();if(D)break;if(w(n),_++,++h>=64)h=0,await new Promise((N)=>setImmediate(N))}}catch(D){v=D,console.warn(`[Decopilot] stream pump error for thread ${u}:`,D?.message??D)}finally{if(d.releaseLock(),$(),YX4)console.warn(JSON.stringify({msg:"decopilot-stream-diag",event:"pump-done",taskId:u,publishedChunks:_,publishErrors:c.errorCount}))}if(v!==void 0)throw v})()}async publishRawChunk(i,u,t){let f=this.js;if(!f)return!1;let l=performance.now(),c=dW(u,{runId:i,dedup:t});if(tq().record(performance.now()-l),fq().add(1),c.length===0)return console.warn(`[Decopilot] dropping oversized raw chunk for thread ${i} (> MAX_CHUNKED_BYTES)`),!0;for(let E of c)await f.publish(E.subject,E.data,{...E.headers?{headers:K4t(E.headers)}:{},...E.msgId?{msgID:E.msgId}:{}});return!0}async publishDone(i,u,t){let f=this.js;if(!f)return!1;let l=C1i({runId:i,fenceToken:u,finalSeq:t});return await f.publish(l.subject,l.data,{msgID:l.msgId}),!0}async createTailStream(i,u,t){let f=this.js;if(!f)return console.warn(`[Decopilot] createTailStream: JetStream client unavailable for thread ${i}; no live tail`),null;let l=t?.deliverPolicy==="new"?M_.DeliverPolicy.New:M_.DeliverPolicy.All,c=t?.closeOnDone??!1,E=Z2(i),$;try{$=await(await f.consumers.get(Rn,{filter_subjects:E,deliver_policy:l})).consume()}catch(N){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",N?.message??N),null}let h=vTi({messages:async function*(){try{for await(let N of $)yield{subject:N.subject,data:N.data,headers:N.headers}}finally{$.stop()}}(),onCancel:()=>$.stop()}).pipeThrough(M1i()).pipeThrough(q1i()).getReader(),_=!1,v=()=>{if(_)return;_=!0;try{h.releaseLock()}catch{}},D=!1,n=()=>{if(D)return;D=!0,$.stop(),h.cancel().catch(()=>{}),v()};return u?.addEventListener("abort",n,{once:!0}),new ReadableStream({async pull(N){for(;;){let{done:O,value:y}=await h.read();if(O){n(),N.close();return}let Z=y;if(Z.kind==="done"){if(c){n(),N.close();return}continue}N.enqueue(Z.chunk);return}},cancel(){n()}})}purge(i){if(!this.jsm)return;this.jsm.streams.purge(Rn,{filter:Z2(i)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var M_,J4t,GX4=(i)=>{let u;return()=>u??=i()},jX4,SX4=86400000000000,KX4=120000000000,JX4=4294967296,XX4=500000,WX4,YX4,QX4;var L4t=g(()=>{W1u();DTi();V1i();Gl();CRi();M_=G(y2(),1),J4t=G(qN(),1),jX4=GX4(()=>Bt.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"}));WX4=process.env.STREAM_ENCODE_TRACE==="1",YX4=process.env.DECOPILOT_STREAM_TRACE==="1";QX4=WX4?new X4t:null});function W4t(i){let u=i.createFetch??HX4,t=i.timeoutMs??2000;return async(f)=>{try{let l=i.getConnection();if(!l)return U5u;let c=Ph(f),$=await u(l,t)(`tunnel://${c}/api/links/status`,{method:"GET"});if(!$.ok)return U5u;let w=await $.json();return{online:!0,hostname:w.hostname,capabilities:w.capabilities??[],cliVersion:w.cliVersion}}catch{return U5u}}}var U5u,HX4=(i,u)=>h2({connection:i,firstFrameTimeoutMs:u});var Y4t=g(()=>{KM();VM();U5u={online:!1,capabilities:[]}});async function*RX4(i){if(!i.body){yield{headers:{status:i.status,headers:Object.fromEntries(i.headers.entries())}};return}let u=i.body.getReader(),t=!1;try{yield{headers:{status:i.status,headers:Object.fromEntries(i.headers.entries())}};while(!0){let{done:f,value:l}=await u.read();if(f){t=!0;return}yield{data:Buffer.from(l).toString("base64")}}}finally{try{if(!t)await u.cancel()}catch{}finally{u.releaseLock()}}}function Q4t(i){let u=i.createFetch??((t)=>h2({connection:t,idleTimeoutMs:bX4}));return async function*(f,l,c){let E=i.getConnection();if(!E)throw Error("link_unavailable: NATS unavailable");let $=Ph(f),w=u(E),d={method:l.method,headers:l.headers,signal:c?.signal};if(l.body!=null)d.body=l.body;let h=await w(`tunnel://${$}${l.path}`,d);yield*RX4(h)}}var bX4=45000;var z4t=g(()=>{KM();VM()});function H4t(i){let u=i.createFetch??((t)=>h2({connection:t,idleTimeoutMs:CX4}));return{async publish(t,f,l){let c=i.getConnection();if(!c)throw Error("link_unavailable: NATS unavailable");let E=Ph(t),w=await u(c)(`tunnel://${E}/api/links/work`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(f),signal:l?.signal});if(!w.ok){let d=await w.text().catch(()=>"");throw Error(`tunnel work publish failed (${w.status})${d?`: ${d}`:""}`)}await w.body?.cancel().catch(()=>{})}}}function R4t(i){let u=i.createFetch??h2;return{async publishControlFrame(t,f,l){let c=i.getConnection();if(!c)throw Error("link_unavailable: NATS unavailable");let E=Ph(t),w=await u(c)(`tunnel://${E}/api/links/control`,{method:"POST",headers:{"content-type":"application/json"},body:pmu(f),signal:l?.signal});if(!w.ok){let d=await w.text().catch(()=>"");throw Error(`tunnel control publish failed (${w.status})${d?`: ${d}`:""}`)}await w.body?.cancel().catch(()=>{})}}}var CX4=45000;var b4t=g(()=>{KM();eRi();VM()});function hIi(i,u,t,f){if(!f)return!1;return i.emit(u,mh(t,f.status,{title:f.title??void 0,virtualMcpId:f.virtual_mcp_id??void 0,createdBy:f.created_by??void 0,triggerId:f.trigger_id??null,branch:f.branch??null,createdAt:f.created_at,updatedAt:f.updated_at})),!0}var C4t=g(()=>{Pt()});class P5u{storage;options;timer=null;constructor(i,u={}){this.storage=i;this.options=u}start(){if(this.timer)return;let i=this.options.intervalMs??300000;this.timer=setInterval(()=>{this.runOnce()},i)}async runOnce(){let i=this.options.staleAfterMs??3600000;try{let u=await this.storage.sweepAbandoned(i);if(u>0)console.log(`[async-research-sweeper] marked ${u} stale jobs as abandoned`);return u}catch(u){return console.error("[async-research-sweeper] sweep failed",u),0}}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}import{readdir as MX4,rm as _Ii}from"fs/promises";import{join as vIi}from"path";async function DIi(i){let u=new Date;u.setUTCDate(u.getUTCDate()-qX4),u.setUTCHours(0,0,0,0);let t=0;try{let f=await tX(i);for(let l of f)if(/^\d{4}$/.test(l))t+=await M4t(i,l,u);else if(!l.startsWith(".")){let c=vIi(i,l),E=await tX(c);for(let w of E){if(!/^\d{4}$/.test(w))continue;t+=await M4t(c,w,u)}if((await tX(c)).length===0)await _Ii(c,{recursive:!0,force:!0})}}catch(f){console.warn("monitoring retention cleanup failed:",f)}return t}async function M4t(i,u,t){let f=0,l=vIi(i,u),c=await tX(l);for(let $ of c){if(!/^\d{2}$/.test($))continue;let w=vIi(l,$),d=await tX(w);for(let _ of d){if(!/^\d{2}$/.test(_))continue;let v=new Date(`${u}-${$}-${_}T00:00:00Z`);if(isNaN(v.getTime()))continue;if(v<t){let D=vIi(w,_);await _Ii(D,{recursive:!0,force:!0}),f++}}if((await tX(w)).length===0)await _Ii(w,{recursive:!0,force:!0})}if((await tX(l)).length===0)await _Ii(l,{recursive:!0,force:!0});return f}async function tX(i){try{return(await MX4(i)).filter((t)=>!t.startsWith("."))}catch{return[]}}var qX4=30;var A5u=()=>{};import{DBOS as I5u,SchedulerMode as VX4}from"@dbos-inc/dbos-sdk";async function mX4(){let i=[Nh(),RL(),ID()],u=0;for(let t of i)try{u+=await DIi(t)}catch(f){console.error("[monitoring-retention] cleanup failed:",f)}return console.log(`[monitoring-retention] deleted ${u} day-dir(s) across ${i.length} signal dir(s)`),{deleted:u,dirs:i.length}}async function eX4(i,u){await I5u.runStep(()=>mX4(),{name:"monitoringRetention"})}function V4t(){if(q4t)return;q4t=!0;let i=I5u.registerWorkflow(eX4,{name:"monitoringRetentionWorkflow"});I5u.registerScheduled(i,{name:"monitoringRetentionWorkflow",crontab:rX4,mode:VX4.ExactlyOncePerIntervalWhenActive})}var rX4="23 4 * * *",q4t=!1;var r4t=g(()=>{bw();A5u()});function m4t(i){return async(u,t)=>{let f=await i.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["member.role","organization.id as orgId","organization.slug as orgSlug","organization.name as orgName"]).where("member.userId","=",t).where("member.organizationId","=",u).executeTakeFirst();if(!f)return console.warn(`[automationContextFactory] User ${t} not found in org ${u} \u2014 returning null`),null;let l=await c9.create();l.auth.user={id:t,role:f.role},l.organization={id:f.orgId,slug:f.orgSlug,name:f.orgName};let c=await Q0u(i.db,u,f.role);return l.boundAuth=Y0u({auth:l.authInstance,headers:new Headers,role:f.role,permissions:c,userId:t}),l.access=new _y(t,void 0,l.boundAuth,f.role,"self"),N3i(l,{id:f.orgId,slug:f.orgSlug}),l}}var e4t=g(()=>{vy();Oa()});import{EventEmitter as aX4}from"events";var x5u;var a4t=g(()=>{iO();x5u=new aX4;x5u.on("request",(i)=>{Nv(i)})});function o4t(){return async(i,u)=>{let t=Date.now(),f=i.req.method,l=i.req.path;if(l==="/api/auth/get-session"||l.includes("favicon")){await u();return}let c="",E=!1;if(l.startsWith("/mcp")&&f==="POST"){E=!0;try{if(i.req.header("Content-Type")?.includes("application/json")){let v=await i.req.raw.clone().json();if(v.method==="tools/call"&&v.params?.name){let D=pR(v.params.name),n=v.params.arguments||{},N=Object.keys(n).map((y)=>pR(y)),O=N.length>0?N.slice(0,3).join(",")+(N.length>3?"\u2026":""):"";c=`${Dl.tool}${D}${Dl.dim}(${O})${Dl.reset}`}else if(v.method)c=`${Dl.dim}${pR(v.method)}${Dl.reset}`}}catch{}}let $=pR(l);if(l.startsWith("/mcp/conn_")){let h=l.split("/")[2]??"";$=`/mcp/${Dl.mcp}${pR(h.slice(0,12))}\u2026${Dl.reset}`}else if(l==="/mcp")$=`${Dl.mcp}/mcp${Dl.reset}`;else if(l==="/mcp/registry")$=`${Dl.mcp}/mcp/registry${Dl.reset}`;let w=sX4(f),d=E?"\u25C0":"\u2190";if(!Tci())console.log(`${Dl.dim}${d}${Dl.reset} ${w}${f}${Dl.reset} ${$}${c?` ${c}`:""}`);try{await u()}finally{let h=Date.now()-t,_=i.res.status,v=oX4(_),D=h<1000?`${h}ms`:`${(h/1000).toFixed(1)}s`,n=E?"\u25B6":"\u2192";if(!Tci())console.log(`${Dl.dim}${n}${Dl.reset} ${w}${f}${Dl.reset} ${$}${c?` ${c}`:""} ${v}${_}${Dl.reset} ${Dl.duration}${D}${Dl.reset}`);x5u.emit("request",{method:f,path:pR(l),status:_,duration:h,timestamp:new Date})}}}var Dl,oX4=(i)=>{if(i>=500)return Dl.serverError;if(i>=400)return Dl.clientError;if(i>=300)return Dl.redirect;return Dl.ok},sX4=(i)=>{return Dl[i]||Dl.reset},pR=(i)=>{return i.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var s4t=g(()=>{iO();a4t();Dl={reset:"\x1B[0m",dim:"\x1B[2m",bold:"\x1B[1m",GET:"\x1B[36m",POST:"\x1B[33m",PUT:"\x1B[35m",DELETE:"\x1B[31m",ok:"\x1B[32m",redirect:"\x1B[36m",clientError:"\x1B[33m",serverError:"\x1B[31m",mcp:"\x1B[35m",tool:"\x1B[96m",duration:"\x1B[90m"}});import{createHmac as tlt}from"crypto";import{mkdir as pX4,readdir as iL4,rm as p4t,stat as flt}from"fs/promises";import{join as G5u,relative as uL4}from"path";import{z as k0}from"zod";function clt(i){let u=i.replace(/[^a-zA-Z0-9_-]/g,"_");return G5u(tL4,u)}function Elt(i){return i.replace(/^\/+/,"").replace(/\.\./g,"")}function k5u(i,u){let t=clt(i),f=Elt(u);return G5u(t,f)}function fL4(i,u,t,f){let l=Ou().encryptionKey||"dev-secret",c=`${i}:${u}:${t}:${f}`;return tlt("sha256",l).update(c).digest("hex")}function ult(i,u,t,f,l){let c=Math.floor(Date.now()/1000)+f,E=fL4(u,t,c,l),$=new URL(`/api/dev-assets/${u}/${Elt(t)}`,i);return $.searchParams.set("expires",c.toString()),$.searchParams.set("signature",E),$.searchParams.set("method",l),$.toString()}function $lt(i,u,t){let f=`${i}:${u.getTime()}:${t}`;return`"${tlt("md5","etag").update(f).digest("hex")}"`}async function wlt(i,u,t,f,l){try{let c=await iL4(i,{withFileTypes:!0});for(let E of c){let $=G5u(i,E.name),d=uL4(u,$).replace(/\\/g,"/");if(t&&!d.startsWith(t))continue;if(E.isDirectory())if(f){let h=d+"/";if(!t||h.startsWith(t)){if(!(t?d.slice(t.length):d).includes("/"))l.commonPrefixes.add(h)}}else await wlt($,u,t,f,l);else if(E.isFile()){if(f&&t){let h=d.slice(t.length);if(h.includes(f)){let _=h.indexOf(f),v=t+h.slice(0,_+1);l.commonPrefixes.add(v);continue}}try{let h=await flt($);l.objects.push({key:d,size:h.size,lastModified:h.mtime.toISOString(),etag:$lt($,h.mtime,h.size)})}catch{}}}}catch{}}function dlt(i,u){let f=Oi(i).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:k0.object({prefix:k0.string().optional(),maxKeys:k0.number().optional().default(1000),continuationToken:k0.string().optional(),delimiter:k0.string().optional()}),outputSchema:k0.object({objects:k0.array(k0.object({key:k0.string(),size:k0.number(),lastModified:k0.string(),etag:k0.string()})),nextContinuationToken:k0.string().optional(),isTruncated:k0.boolean(),commonPrefixes:k0.array(k0.string()).optional()}),handler:async(l)=>{let c=l,E=c.prefix||"",$=c.maxKeys??1000,w=c.delimiter,d=c.continuationToken,h=clt(f);await pX4(h,{recursive:!0});let _={objects:[],commonPrefixes:new Set};await wlt(h,h,E,w,_),_.objects.sort((O,y)=>O.key.localeCompare(y.key));let v=0;if(d){if(v=_.objects.findIndex((O)=>O.key>d),v===-1)v=_.objects.length}let D=_.objects.slice(v,v+$),n=v+$<_.objects.length,N=n?D[D.length-1]?.key:void 0;return{objects:D,isTruncated:n,nextContinuationToken:N,commonPrefixes:Array.from(_.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:k0.object({key:k0.string()}),outputSchema:k0.object({contentType:k0.string().optional(),contentLength:k0.number(),lastModified:k0.string(),etag:k0.string(),metadata:k0.record(k0.string(),k0.string()).optional()}),handler:async(l)=>{let c=l,E=k5u(f,c.key),$=await flt(E);return{contentType:J_u(c.key),contentLength:$.size,lastModified:$.mtime.toISOString(),etag:$lt(E,$.mtime,$.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:k0.object({key:k0.string(),expiresIn:k0.number().optional()}),outputSchema:k0.object({url:k0.string(),expiresIn:k0.number()}),handler:async(l)=>{let c=l,E=c.expiresIn??ilt;return{url:ult(u,f,c.key,E,"GET"),expiresIn:E}}},{name:"PUT_PRESIGNED_URL",description:"Generate a presigned URL for uploading a file to local storage",inputSchema:k0.object({key:k0.string(),expiresIn:k0.number().optional(),contentType:k0.string().optional()}),outputSchema:k0.object({url:k0.string(),expiresIn:k0.number()}),handler:async(l)=>{let c=l,E=c.expiresIn??ilt;return{url:ult(u,f,c.key,E,"PUT"),expiresIn:E}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:k0.object({key:k0.string()}),outputSchema:k0.object({success:k0.boolean(),key:k0.string()}),handler:async(l)=>{let c=l,E=k5u(f,c.key);try{return await p4t(E),{success:!0,key:c.key}}catch{return{success:!1,key:c.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:k0.object({keys:k0.array(k0.string()).max(1000)}),outputSchema:k0.object({deleted:k0.array(k0.string()),errors:k0.array(k0.object({key:k0.string(),message:k0.string()}))}),handler:async(l)=>{let c=l,E=[],$=[];return await Promise.all(c.keys.map(async(w)=>{let d=k5u(f,w);try{await p4t(d),E.push(w)}catch(h){$.push({key:w,message:h instanceof Error?h.message:"Unknown error"})}})),{deleted:E,errors:$}}}]}async function j5u(i,u,t){let f=dlt(u,t),l=new mD({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:Kl});for(let E of f){let $="shape"in E.inputSchema?E.inputSchema.shape:k0.object({}).shape,w=E.outputSchema&&"shape"in E.outputSchema?E.outputSchema.shape:k0.object({}).shape;l.registerTool(E.name,{description:E.description??"",inputSchema:$,outputSchema:w,annotations:E.annotations,_meta:E._meta},async(d)=>{try{let h=await E.handler(d);return{content:[{type:"text",text:JSON.stringify(h)}],structuredContent:h}}catch(h){return{content:[{type:"text",text:`Error: ${h.message}`}],isError:!0}}})}let c=new Sd({enableJsonResponse:i.headers.get("Accept")?.includes("application/json")??!1});return await l.connect(c),F5(l,c,i,"mcp:dev-assets")}async function hlt(i,u,t,f){let c=dlt(t,f).find((E)=>E.name===i);if(!c)return{content:[{type:"text",text:`Tool not found: ${i}`}],isError:!0};try{let E=await c.handler(u);return{content:[{type:"text",text:JSON.stringify(E)}]}}catch(E){return{content:[{type:"text",text:E instanceof Error?E.message:String(E)}],isError:!0}}}var tL4="./data/assets",ilt=3600,llt,_lt;var vlt=g(()=>{lt();is();et();xV();AH();pE();IAi();llt=new Ju;llt.all("/",async(i)=>{let u=i.get("studioContext"),t=new URL(i.req.url),f=`${t.protocol}//${t.host}`;return j5u(i.req.raw,u,f)});_lt=llt});var Dlt={};Si(Dlt,{mountDevRoutes:()=>lL4});function lL4(i,u){i.all("/mcp/:connectionId{.*_dev-assets$}",u,async(f)=>{let l=f.get("studioContext"),c=new URL(f.req.url),E=`${c.protocol}//${c.host}`;return j5u(f.req.raw,l,E)}),i.all("/mcp/:connectionId{.*_dev-assets$}/call-tool/:toolName",u,async(f)=>{let l=f.get("studioContext"),c=new URL(f.req.url),E=`${c.protocol}//${c.host}`,$=f.req.param("toolName");if(!$)return f.json({error:"Missing tool name"},400);let w=await f.req.json(),d=await hlt($,w,l,E);if(d.isError)return f.json(d.content,500);return f.json(d.content)}),i.use("/mcp/dev-assets",u),i.route("/mcp/dev-assets",_lt);let t=new Ju;t.use("*",uh({mountPath:"/api/dev-assets"})),t.route("/",AAi({orgFromPath:!1})),i.route("/api/dev-assets",t)}var nlt=g(()=>{et();A_u();IAi();vlt()});import{sql as cL4}from"kysely";import{randomUUID as glt}from"crypto";import{z as EL4}from"zod";async function wL4(i){let u=new Date().toISOString(),t=glt(),f=pf.SELF(i.organizationId),l="registry.publish_request.created",c={requestId:i.request.id,requestedId:i.request.requested_id,title:i.request.title,status:i.request.status,createdAt:i.request.created_at,requester:{name:i.request.requester_name,email:i.request.requester_email}};await i.db.insertInto("events").values({id:t,organization_id:i.organizationId,type:"registry.publish_request.created",source:f,specversion:"1.0",subject:i.request.id,time:u,datacontenttype:"application/json",dataschema:null,data:JSON.stringify(c),cron:null,status:"pending",attempts:0,last_error:null,next_retry_at:null,created_at:u,updated_at:u}).execute();let E=await i.db.selectFrom("event_subscriptions").select(["id"]).where("organization_id","=",i.organizationId).where("enabled","=",1).where("event_type","=","registry.publish_request.created").where(($)=>$.or([$("publisher","is",null),$("publisher","=",f)])).execute();if(E.length>0)await i.db.insertInto("event_deliveries").values(E.map(($)=>({id:glt(),event_id:t,subscription_id:$.id,status:"pending",attempts:0,last_error:null,delivered_at:null,next_retry_at:null,created_at:u}))).execute();try{await cL4`SELECT pg_notify('mesh_events', ${t})`.execute(i.db)}catch{}}async function dL4(i,u){let f=(await i.selectFrom("organization").select(["id"]).where("id","=",u).execute())[0];if(f?.id)return f.id;return(await i.selectFrom("organization").select(["id"]).where("slug","=",u).execute())[0]?.id??null}async function hL4(i,u){let t=await i.selectFrom("virtual_mcp_plugin_configs").innerJoin("connections","connections.id","virtual_mcp_plugin_configs.virtual_mcp_id").select(["virtual_mcp_plugin_configs.settings as settings"]).where("connections.organization_id","=",u).where("virtual_mcp_plugin_configs.plugin_id","=",YJ).execute();for(let f of t){let l=f.settings,c=typeof l==="string"?(()=>{try{return JSON.parse(l)}catch{return{}}})():l??{};if(c.acceptPublishRequests===!0){let E=c.rateLimitWindow==="minute"?"minute":"hour",$=c.rateLimitMax,w=typeof $==="number"&&Number.isFinite($)&&$>=1?Math.floor($):Olt;return{acceptPublishRequests:!0,requireApiToken:c.requireApiToken===!0,rateLimitEnabled:c.rateLimitEnabled===void 0?Nlt:c.rateLimitEnabled===!0,rateLimitWindow:E,rateLimitMax:w}}}return{acceptPublishRequests:!1,requireApiToken:!1,rateLimitEnabled:Nlt,rateLimitWindow:$L4,rateLimitMax:Olt}}async function _L4(i,u,t){let f=t==="minute"?60000:3600000,l=new Date(Date.now()-f).toISOString(),c=await i.selectFrom("private_registry_publish_request").select((E)=>E.fn.countAll().as("count")).where("organization_id","=",u).where("created_at",">=",l).executeTakeFirst();return Number(c?.count??0)}async function vL4(i,u,t,f){let l=await i.selectFrom("private_registry_item").select(["id","title"]).where("organization_id","=",u).where((c)=>c.or([c("id","=",t),c("title","=",f)])).executeTakeFirst();return l?{id:String(l.id),title:String(l.title)}:null}function ylt(i){let{db:u,db:t}=i,f=new JQ(t),l=new XQ(t);return async(c)=>{let E=c.req.param("orgRef")??c.req.param("org");if(!E)return c.json({error:"Organization not found"},404);let $=await dL4(u,E);if(!$)return c.json({error:"Organization not found"},404);let w=await hL4(u,$);if(!w.acceptPublishRequests)return c.json({error:"Publish requests are not enabled for this registry."},403);if(w.requireApiToken){let D=c.req.header("Authorization"),n=D?.startsWith("Bearer ")?D.slice(7).trim():null;if(!n)return c.json({error:"API key required. Use Authorization: Bearer <key>"},401);if(!await l.validate($,n))return c.json({error:"Invalid API key"},401)}if(w.rateLimitEnabled){if(await _L4(t,$,w.rateLimitWindow)>=w.rateLimitMax)return c.json({error:"Too many publish requests. Please try again later.",retryAfterSeconds:w.rateLimitWindow==="minute"?60:3600},429)}let d;try{d=await c.req.json()}catch{return c.json({error:"Invalid JSON body"},400)}let h=mm0.safeParse(d);if(!h.success)return c.json({error:"Invalid publish request payload",details:EL4.treeifyError(h.error)},400);let _=await vL4(t,$,h.data.data.id,h.data.data.title);if(_)return c.json({error:"A registry item with the same id or title already exists. Please use a different name/id.",conflict:_},409);let v=await f.createOrUpdate({organization_id:$,requested_id:h.data.data.id,title:h.data.data.title,description:h.data.data.description??null,_meta:h.data.data._meta,server:h.data.data.server,requester_name:h.data.requester?.name??null,requester_email:h.data.requester?.email??null});try{await wL4({db:u,organizationId:$,request:v})}catch(D){console.warn("[private-registry] failed to emit publish-request event:",D)}return mu.capture({distinctId:h.data.requester?.email??`org:${$}`,event:"registry_publish_request_submitted",groups:{organization:$},properties:{organization_id:$,request_id:v.id,requested_id:v.requested_id,title:h.data.data.title,requester_email:h.data.requester?.email??null}}),c.json({id:v.id,requested_id:v.requested_id,status:v.status},201)}}var Nlt=!0,$L4="hour",Olt=100;var Zlt=g(()=>{z4();Pt();FR();Npi();Opi();U1()});var Tlt={};Si(Tlt,{createPublishRequestHandler:()=>ylt,createPublicMCPHandler:()=>ie0});var Blt=g(()=>{BR();Zlt()});var b4u={};Si(b4u,{watchHandler:()=>xlt,isSsoExemptPath:()=>Ilt,getProxyDispatch:()=>NL4,createApp:()=>AL4});import{readFileSync as DL4}from"fs";import{PrometheusSerializer as nL4}from"@opentelemetry/exporter-prometheus";import{DBOS as ib}from"@dbos-inc/dbos-sdk";import{oAuthDiscoveryMetadata as TL4,oAuthProtectedResourceMetadata as BL4}from"better-auth/plugins";async function gL4(i){let u=i.connect(),t;try{t=await Promise.race([u,Ult(Flt)])}catch{return u.then((f)=>f.release(!0)).catch(()=>{}),!1}try{return await Promise.race([t.query("SELECT 1"),Ult(Flt)]),t.release(),!0}catch{return t.release(!0),!1}}function Ult(i){return new Promise((u,t)=>setTimeout(()=>t(Error("pg health-check timeout")),i))}function NL4(){if(!S5u)throw Error("getProxyDispatch() called before createApp() or without NATS \u2014 proxy dispatch unavailable");return S5u}async function OL4(i,u){let{items:t}=await i.storage.connections.list(u,{where:{field:["connection_url"],operator:"like",value:`${nl0}%`},limit:1}),f=t[0];if(!f?.configuration_state)return null;return f.configuration_state.project_locator}function yL4(i){let u=new URLSearchParams;if(i){let[t,f]=i.split("/");if(t)u.set("workspace_hint",t);if(f)u.set("project_hint",f)}else u.set("auto_personal","true");return u.set("force_new","true"),u}function Ilt(i){return i.startsWith("/api/org-sso/")||i.startsWith("/api/auth/")||i.startsWith("/api/tools/management")||i.startsWith("/oauth-proxy/")||/^\/api\/[^/]+\/oauth-proxy\//.test(i)||i.startsWith(`${Ahu}/`)}async function AL4(i={}){let u=i.database??Ft(),t=!1;T1.stop().catch((H)=>{console.error("[SSEHub] Error stopping previous broadcast (HMR cleanup):",H)});let f,l,c=new Z5u,E,$,w,d,h,_=null;if(i.disableNats)E=T5u(),f={get:async()=>null,set:async()=>{},invalidate:async()=>{},teardown:()=>{}},l=new us,$={start:async()=>{},broadcast:()=>{},publishControlFrame:()=>{},stop:async()=>{}},h=void 0,w={init:async()=>{},pump:(H)=>{return(async()=>{let gi=H.getReader();try{while(!0){let{done:Yi}=await gi.read();if(Yi)break}}catch{}finally{gi.releaseLock()}})()},publishRawChunk:async()=>!1,publishDone:async()=>!1,createTailStream:async()=>null,purge:()=>{},teardown:()=>{}};else{_=x4t();let H=Ou().natsCredsPath,gi;if(H)try{gi=DL4(H,"utf8")}catch(t0){console.error(`[app] failed to read NATS_CREDS at ${H}; connecting anonymously`,t0)}_.init(Ou().natsUrls,gi?{creds:gi}:void 0);let Yi=Upi()?new noi({getJetStream:()=>_.getJetStream()}):null;Yi?.init().catch(()=>{}),f=Yi;let uu=new X6u({getJetStream:()=>_.getJetStream()});uu.init().catch(()=>{}),l=uu,E=T5u({getConnection:()=>_.getConnection()}),$=new B5u({getConnection:()=>_.getConnection()}),w=new F5u({getConnection:()=>_.getConnection(),getJetStream:()=>_.getJetStream()}),d=W4t({getConnection:()=>_.getConnection()}),h=H4t({getConnection:()=>_.getConnection()});let bi=R4t({getConnection:()=>_.getConnection()}),Au=$;$={start:(t0)=>Au.start(t0),broadcast:(t0)=>Au.broadcast(t0),publishControlFrame:(t0,Pf)=>{bi.publishControlFrame(t0,Pf).catch((g4)=>{console.warn("[TunnelControl] publishControlFrame failed (non-critical):",g4)})},stop:()=>Au.stop()},Zo0(_),_.onReady(()=>{Yi?.init().catch((t0)=>{console.error("[McpListCache] Deferred init failed:",t0)}),uu.init().catch((t0)=>{console.error("[ConnectionCircuitStore] Deferred init failed:",t0)}),E.start(),tD0(()=>_.getConnection()),w.init().catch((t0)=>{console.warn("[Decopilot] StreamBuffer init failed (late-join disabled):",t0)})})}if(ub)await ub();goi(f),L6u(l);let D={storage:new HQ(u.db),sseHub:T1},n=new V1u(D),N=new Mm(u.db),O=new P5u(N);O.start(),$.start((H)=>{GTi(H),n.execute({type:"CANCEL",taskId:H}).catch((gi)=>{console.error("[Decopilot] CancelBroadcast execute failed:",gi)})}).catch((H)=>{console.error("[Decopilot] CancelBroadcast start failed:",H)}),_?.onReady(()=>{$.start().catch((H)=>{console.error("[CancelBroadcast] Deferred start failed:",H)})}),w.init().catch((H)=>{console.warn("[Decopilot] StreamBuffer init failed, attach/late-join disabled:",H)}),ub=async()=>{await n.stopAll(),n.dispose(),O.dispose(),$.stop().catch(()=>{}),w.teardown(),f?.teardown(),c.teardown(),E.teardown(),fD0(),l.teardown(),goi(null),L6u(null)};let y=new Ju;if(y.use("*",vei({enabled:(H)=>hY(H,"debug")==="1"})),y.use("*",gzi),y.use("/*",pl0({origin:(H)=>{if(H.includes("localhost")||H.includes("127.0.0.1"))return H;return H},credentials:!0,allowMethods:["GET","POST","PUT","DELETE","OPTIONS"],allowHeaders:["Content-Type","Authorization","mcp-protocol-version"],exposeHeaders:["WWW-Authenticate"]})),y.use("*",async(H,gi)=>{if(await gi(),H.req.path.includes("/files/"))return;if(H.req.path.includes("/fs/")&&H.req.path.endsWith("/read"))return;H.header("X-Frame-Options","DENY"),H.header("Content-Security-Policy","frame-ancestors 'none'")}),!Ou().noTui)y.use("*",o4t());y.use("*",async(H,gi)=>{if(await gi(),vM(H.req.path))return;if(H.res.status>=500){let uu=await H.res.clone().text();console.error(`[5xx Response] ${H.req.method} ${H.req.path} - ${H.res.status}:`,uu)}}),y.get(D6.HEALTH,(H)=>{if(t)return H.json({status:"shutting_down"},503);return H.json({status:"ok"})}),y.get(D6.HEALTH_LIVE,(H)=>{return H.json({status:"ok"})}),y.get(D6.HEALTH_READY,async(H)=>{if(t)return H.json({status:"shutting_down"},503);let gi={};if(gi.postgres={status:await gL4(u.pool)?"up":"down"},_)gi.nats=_.isConnected()?{status:"up"}:{status:"down"};else gi.nats={status:"down"};let Yi=gi.postgres.status==="up",uu=Yi?200:503;return H.json({status:Yi?"ready":"not_ready",services:gi},uu)}),y.get(D6.METRICS,async(H)=>{try{let gi=await Zzi.collect(),Yi=ZL4.serialize(gi.resourceMetrics);return H.text(Yi,200,{"Content-Type":"text/plain; version=0.0.4; charset=utf-8"})}catch(gi){return console.error("Failed to collect metrics:",gi),H.text("# Error collecting metrics",500)}}),y.get(`${D6.DBOS_QUEUE_DEPTH_PREFIX}:queueName`,async(H)=>{let gi=H.req.param("queueName");if(!FL4.has(gi))return H.json({error:`Unknown queue: ${gi}`},404);let Yi=await ib.listQueuedWorkflows({queueName:gi,status:"ENQUEUED"});return H.json({queue_length:Yi.length})}),y.get(D6.HOSTED_RUN_PENDING,(H)=>{let{active:gi,pending:Yi,max:uu}=zj0();return H.json({pending:Yi,active:gi,max:uu})}),y.route("/api/config",E4t),y.route("/api/_reports",y4t),y.route("/report",v4t(i.clientDir)),y.route("/api/auth/custom",Ho0),y.route("/api/auth/desktop",bo0),y.all("/api/auth/admin/*",Vo0),y.all("/api/auth/*",async(H)=>{return await dt.handler(H.req.raw)});let Z=Xg0();Z.use("/.well-known/oauth-protected-resource/mcp/:connectionId",RJ),Z.use("/mcp/:connectionId/.well-known/oauth-protected-resource",RJ),y.route("/",Z),y.get("/.well-known/oauth-protected-resource/api/:org/mcp/:connectionId",ya),y.route("/",Qg0()),y.use("/oauth-proxy/:connectionId/*",RJ),y.all("/oauth-proxy/:connectionId/*",Plt);let T=async(H)=>{let Yi=await UL4()(H.req.raw),uu=await Yi.json();return Response.json(uu,Yi)};y.use("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",RJ),y.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",T);let B=async(H)=>{let Yi=await PL4()(H.req.raw),uu=await Yi.json();return Response.json(uu,Yi)};y.get("/.well-known/oauth-authorization-server/*/:gateway?/:connectionId?",B);let F=yo0({ttlMs:120000}),A=await Zg0({db:u.db,auth:dt,encryption:{key:Ou().encryptionKey},observability:{tracer:t2,meter:Bt},modelListCache:c,providerKeyCache:E,memberRoleCache:F,linkStatusProbe:d,publishLinkControlFrame:(H,gi)=>$.publishControlFrame(H,gi)});c9.set(A);let k=new tn(Ou().encryptionKey);Epu({db:u.db,baseUrl:Oh()});let I=Gwi(u.db),j=new Lm(u.db),C=m4t({db:u.db});G6u({storage:I,studioContextFactory:C}),Ecu({studioContextFactory:C,deps:{runRegistry:n,cancelBroadcast:$,streamBuffer:w,sseHub:T1},prepareLinkWorkFn:Kit,workPublisher:h}),ucu({dispatchRunFn:jit,studioContextFactory:C,deps:{runRegistry:n,cancelBroadcast:$,streamBuffer:w,sseHub:T1}});let K=new HQ(u.db),W=new gy(u.db);Fj0({getJetStream:()=>_?.getJetStream()??null,getJetStreamManager:async()=>{let H=_?.getConnection();return H?await Alt.jetstreamManager(H):null},messageParts:K.messageParts(),resolveRun:async(H)=>{let gi=await u.db.selectFrom("threads").select(["organization_id","created_by","message_storage_version","status","run_fence_token","title"]).where("id","=",H).executeTakeFirst();return gi?{orgId:gi.organization_id,createdBy:gi.created_by,version:gi.message_storage_version??1,status:gi.status,runFenceToken:gi.run_fence_token,title:gi.title??null}:null},completeRunIfNotCompleted:async(H,gi)=>{let Yi=await K.completeRunIfNotCompleted(H,gi);if(hIi(T1,gi,H,Yi),Yi)await s1u(W,H,gi);return Yi},markRunRequiresAction:async(H,gi)=>{let Yi=await K.requiresActionIfInProgress(H,gi);return hIi(T1,gi,H,Yi),Yi},markRunFailed:async(H,gi,Yi,uu)=>{let bi=await K.markRunFailed(H,gi,Yi,uu);if(hIi(T1,gi,H,bi),bi)await s1u(W,H,gi);return bi},clearSynthesizedError:async(H,gi)=>{await K.messageParts().replaceMessageParts(H,Y9(H,gi),[])},persistTitle:(H,gi,Yi)=>K.update(H,gi,{title:Yi}),onTitleUpdated:async({runId:H,orgId:gi,title:Yi})=>{let uu=await K.get(H,gi).catch(()=>null);T1.emit(gi,mh(H,uu?.status??"in_progress",{title:Yi,virtualMcpId:uu?.virtual_mcp_id??void 0,createdBy:uu?.created_by,triggerId:uu?.trigger_id,branch:uu?.branch??null,createdAt:uu?.created_at,updatedAt:uu?.updated_at}))},bumpProgress:async({runId:H,orgId:gi})=>{await K.bumpProgress(H,gi)},recordCompleted:async({runId:H,orgId:gi,distinctId:Yi,usage:uu})=>{mu.capture({distinctId:Yi,event:"chat_message_completed",groups:{organization:gi},properties:{organization_id:gi,thread_id:H,transport:"projector",input_tokens:uu.inputTokens,output_tokens:uu.outputTokens,total_tokens:uu.totalTokens}})},recordFailed:async({runId:H,orgId:gi,distinctId:Yi,reason:uu,kind:bi})=>{mu.capture({distinctId:Yi,event:"chat_message_failed",groups:{organization:gi},properties:{organization_id:gi,thread_id:H,transport:"projector",error_category:bi,error_message:uu}})},purgeRun:async(H)=>{w.purge(H)}}),QJ0({studioContextFactory:C,systemDatabaseUrl:Izi(Ou().databaseUrl,Ou().databasePgSsl),streamBuffer:w}),V4t(),$pu();let r=async(H,gi,Yi)=>{let uu=await I.findById(H,gi);if(!uu)throw Error("Automation not found");return K6u({automationId:uu.id,organizationId:uu.organization_id,triggerId:null})},Y=new WR(I,({automation:H,trigger:gi,contextMessages:Yi,idempotencyKey:uu})=>po({automationId:H.id,organizationId:H.organization_id,triggerId:gi.id,contextMessages:Yi},{idempotencyKey:uu})),ii=[Nh(),RL(),ID()];for(let H of ii)DIi(H).then(()=>{}).catch((gi)=>console.error("[monitoring] Retention cleanup failed:",gi));let di=()=>u.db.deleteFrom("apikey").where("expiresAt","<",new Date).execute().then(()=>{}).catch((H)=>console.error("[auth] Expired API key cleanup failed:",H));di(),setInterval(di,86400000).unref(),y.use("*",async(H,gi)=>{if(Dzi(H.req.path))return gi();let Yi={measure:async(bi,Au)=>{g3(H,bi);try{return await Au()}finally{pw(H,bi)}}},uu=await c9.create(H.req.raw,{timings:Yi});uu.automationRunner=r,H.set("studioContext",uu);try{await gi()}finally{let bi=uu.pendingRevalidations;if(bi.length>0)Promise.race([Promise.allSettled(bi),N0(30000)]).catch((t0)=>console.error("[studio] revalidation cleanup error:",t0))}}),y.use("/api/:org/decopilot/*",bJ),y.use("/api/:org/v1/*",bJ),y.use("/api/:org/files/*",bJ),y.use("*",async(H,gi)=>{if(Ilt(H.req.path))return gi();let Yi=H.get("studioContext");if(!Yi?.organization?.id||!Yi?.auth?.user?.id)return gi();if(!(await Yi.storage.orgSsoConfig.getByOrgId(Yi.organization.id))?.enforced)return gi();if(!await Yi.storage.orgSsoSessions.isValid(Yi.auth.user.id,Yi.organization.id))return H.json({error:"SSO authentication required for this organization"},403);return gi()});let li=new Ju;li.use("*",uh({mountPath:"/api/org-sso"})),li.route("/",rPi()),y.route("/api/org-sso",li),y.get("/api/tools/management",(H)=>{return H.json({tools:nei,grouped:UO()})}),y.use("/mcp/*",async(H,gi)=>{g3(H,"mcp");try{return await gi()}finally{pw(H,"mcp")}});let p=async(H,gi)=>{let Yi=H.var.studioContext;if(!Yi.auth.user?.id&&!Yi.auth.apiKey?.id){let uu=new URL(H.req.url),bi=H.req.header("x-forwarded-proto")?.split(",")[0]?.trim(),Au=bi?`${bi}://${uu.host}`:uu.origin;return H.res=new Response(null,{status:401,headers:{"WWW-Authenticate":`Bearer realm="mcp",resource_metadata="${Au}${uu.pathname}/.well-known/oauth-protected-resource"`}})}return await gi()};if(y.use("/mcp/:connectionId?",p),y.use("/mcp/gateway/:virtualMcpId?",p),y.use("/mcp/virtual-mcp/:virtualMcpId?",p),y.use("/mcp/self",p),eh()){let{mountDevRoutes:H}=(nlt(),BIi(Dlt));H(y,p)}let a=new Ju;a.use("*",uh({mountPath:"/mcp"})),a.route("/",xBi()),y.route("/mcp",a);let Di=new Ju;Di.use("*",uh({mountPath:"/mcp/self"})),Di.route("/",uIi()),y.route("/mcp/self",Di);let wi=new Ju;wi.use("*",uh({mountPath:"/mcp"})),wi.route("/",jBi()),y.route("/mcp",wi),y.use("/api/:org/models/*",async(H,gi)=>{g3(H,"llm_models");try{return await gi()}finally{pw(H,"llm_models")}});let ji=U_u({cancelBroadcast:$,streamBuffer:w,runRegistry:n,linkStatusProbe:d});if(y.route("/api",ji),_!=null)S5u=Q4t({getConnection:()=>_?.getConnection()??null});y.route("/api",Mft()),y.get("/api/links/me",async(H)=>{try{let gi=H.req.header("authorization")??"",Yi=/^Bearer\s+(.+)$/i.exec(gi),uu=null;if(Yi){let Au=(Yi[1]??"").trim();uu=await MPi(Au,dt.api)}else uu=H.get("studioContext")?.auth?.user?.id??null;if(!uu)return H.json({error:"unauthorized"},401);let bi=d?await d(uu):{online:!1,capabilities:[]};if(!bi.online)return H.json(null);return H.json({hostname:bi.hostname,cliVersion:bi.cliVersion})}catch(gi){return console.error("[links/me] presence probe failed; reporting offline:",gi instanceof Error?gi.message:String(gi)),H.json(null)}}),y.use("/api/:org/files/*",bJ),y.route("/api",F4t);let Ci=new Ju;Ci.use("*",uh({mountPath:"/api"})),Ci.route("/",tIi()),y.route("/api",Ci),y.route("/api",f4t);let Vi=new Ju;Vi.use("*",uh({mountPath:"/api"})),Vi.route("/",fIi({tokenStorage:j,automationEventDispatcher:Y})),y.route("/api",Vi);let ri=new Ym(u.db),vi=new Ju;vi.use("*",uh({mountPath:"/api"})),vi.route("/",FAi()),y.route("/api",vi),y.route("/api/deco-sites",iut()),y.route("/api/deco-apps",oft());let Xi=new Ju;Xi.use("*",uh({mountPath:"/api/deco-sites"})),Xi.route("/",PAi()),y.route("/api/deco-sites",Xi);let Ai=new Ju;Ai.use("*",uh({mountPath:"/api/vm-events"})),Ai.route("/",eft()),y.route("/api/vm-events",Ai);let{createPublishRequestHandler:Ni,createPublicMCPHandler:$i}=await Promise.resolve().then(() => (Blt(),Tlt)),ci={db:u.db,vault:{encrypt:(H)=>k.encrypt(H),decrypt:(H)=>k.decrypt(H)}},Ji=Ni(ci),m=$i(ci);y.use("/org/:orgRef/registry/publish-request",RJ),y.post("/org/:orgRef/registry/publish-request",Ji),y.use("/org/:orgSlug/registry/*",RJ),y.all("/org/:orgSlug/registry/*",m),y.post("/api/:org/registry/publish-request",Ji),y.all("/api/:org/registry/*",m),y.route(Ahu,ro0());let ti=Hft({kvStorage:ri,runRegistry:n,streamBuffer:w,sseHub:T1,cancelBroadcast:$,tokenStorage:j,automationEventDispatcher:Y,mountDevAssets:eh(),mcpAuth:p,oauthProxyHandler:Plt,watchHandler:xlt,betterAuthProtectedResourceHandler:T,getNatsConnection:()=>_?.getConnection()??null});return y.route("/api/:org",ti),y.notFound((H)=>{return H.json({error:"Not Found",path:H.req.path},404)}),y.onError(Rit),Object.assign(y,{markShuttingDown:()=>{t=!0},shutdown:async()=>{if(console.log("[shutdown] Stopping workers..."),await Promise.allSettled([T1.stop(),ub?Promise.resolve(ub()).finally(()=>{ub=null}):Promise.resolve()]),_)await _.drain().catch((H)=>console.error("[shutdown] NATS drain error:",H));console.log("[shutdown] Flushing telemetry..."),await t3().catch((H)=>console.error("[shutdown] Telemetry flush error:",H)),console.log("[shutdown] Closing database..."),await c2(u).catch((H)=>console.error("[shutdown] Database close error:",H)),console.log("[shutdown] Cleanup complete.")},initDbos:async()=>{await ib.registerQueue(E3,{partitionQueue:!0,concurrency:I6u,minPollingIntervalMs:x6u}),await ib.registerQueue(Jh,{partitionQueue:!0,concurrency:ccu}),await ib.registerQueue(WD,{partitionQueue:!0,concurrency:icu}),await ib.registerQueue(P2,{partitionQueue:!0,concurrency:YJ0}),await x_u(I),await Promise.allSettled(["automations-gate","automations-global"].map((H)=>ib.deleteQueue(H))),await k6u(u.pool),Rw0().catch((H)=>{console.error("[studio-pack-backfill] failed:",H)}),wpu().catch((H)=>{console.error("[org-fs] public-sets boot sync kick failed:",H)})}})}var Alt,Flt=5000,S5u=null,ub=null,Plt=async(i)=>{let u=i.req.param("connectionId");if(!u)return i.json({error:"Missing connectionId"},400);let t=i.req.path.split("/").filter(Boolean),f=t[t.length-1],l=i.get("studioContext");if(!l)l=await c9.create(i.req.raw),i.set("studioContext",l);let c=i.req.param("org")?l.organization?.id:void 0,E=await l.storage.connections.findById(u,c);if(!E?.connection_url)return i.json({error:"Connection not found"},404);let $=await Fz(E.connection_url),w,d=new URL(E.connection_url),_=(typeof E.metadata?.oauthResource==="string"&&E.metadata.oauthResource.length>0?E.metadata.oauthResource:void 0)??E.connection_url;if($.ok)w=(await $.json()).authorization_servers?.[0];if(!w)w=d.origin;let v=await Za(w);if(!v.ok)return i.json({error:"Failed to get auth server metadata"},502);let D=await v.json(),n;if(f==="authorize")n=D.authorization_endpoint;else if(f==="token")n=D.token_endpoint;else if(f==="register")n=D.registration_endpoint;if(!n)return i.json({error:`Unknown OAuth endpoint: ${f}`},404);let N=new URL(n),O=new URL(i.req.url);if(N.search=O.search,f==="authorize"){let C=N.searchParams.get("redirect_uri");if(C){let K=Ou().baseUrl??O.origin;try{let W=new URL(C),r=new URL(K);if(!(W.origin===r.origin||W.hostname==="localhost"))return i.json({error:"invalid_request",error_description:"redirect_uri is not allowed"},400)}catch{return i.json({error:"invalid_request",error_description:"redirect_uri is malformed"},400)}N.searchParams.set("redirect_uri",C)}if(N.searchParams.has("resource"))N.searchParams.set("resource",_);if(gl0(E.connection_url))try{let K=await OL4(l,E.organization_id),W=yL4(K);for(let[r,Y]of W)N.searchParams.set(r,Y)}catch(K){console.warn("[oauth-proxy] Failed to get smart OAuth params, proceeding without:",K)}return i.redirect(N.toString(),302)}let y={Accept:i.req.header("Accept")||"application/json"},Z=i.req.header("Content-Type");if(Z)y["Content-Type"]=Z;let T=i.req.header("Authorization");if(T)y.Authorization=T;let B,F=null,A=null;if(i.req.method!=="GET"&&i.req.method!=="HEAD")if(f==="token"&&Z?.includes("application/x-www-form-urlencoded")){if(T?.toLowerCase().startsWith("basic "))try{let Y=atob(T.slice(6).trim()),ii=Y.indexOf(":");if(ii!==-1){let di=decodeURIComponent(Y.slice(0,ii)),li=decodeURIComponent(Y.slice(ii+1));F=di||null,A=li||null}}catch{}let C=await i.req.formData();if(C.has("resource"))C.set("resource",_);let K=C.get("client_id"),W=C.get("client_secret");if(typeof K==="string"&&K)F=K;if(typeof W==="string"&&W)A=W;let r=new URLSearchParams;for(let[Y,ii]of C.entries())r.append(Y,ii.toString());B=r.toString()}else if(f==="register"&&Z?.toLowerCase().includes("application/json")){let C=await l.db.selectFrom("organization").select(["id","slug","name"]).where("id","=",E.organization_id).executeTakeFirst(),K=await i.req.text(),W={};try{W=K?JSON.parse(K):{}}catch{B=K}let r=typeof W==="object"&&W!==null&&!Array.isArray(W);if(B===void 0&&!r)B=K;if(B===void 0){let Y=W,ii=Y.metadata&&typeof Y.metadata==="object"?Y.metadata:{};Y.metadata={...ii,organization_id:E.organization_id,...C?.slug?{organization_slug:C.slug}:{},...C?.name?{organization_name:C.name}:{}},B=JSON.stringify(Y),y["Content-Type"]="application/json"}}else B=i.req.raw.body??void 0;let k=await fetch(N.toString(),{method:i.req.method,headers:y,body:B,duplex:"half",redirect:"manual"}),I=new Headers,j=["connection","keep-alive","transfer-encoding","content-encoding","content-length"];for(let[C,K]of k.headers.entries())if(!j.includes(C.toLowerCase()))I.set(C,K);if(f==="token"&&k.ok){let C=await k.text();try{let K=JSON.parse(C);if(typeof K.access_token==="string"&&K.access_token){let W=typeof K.expires_in==="number"?new Date(Date.now()+K.expires_in*1000):null,r=null;try{r=await Uz(E.connection_url)??n}catch{r=n}let Y={connectionId:u,accessToken:K.access_token,refreshToken:typeof K.refresh_token==="string"?K.refresh_token:null,scope:typeof K.scope==="string"?K.scope:null,expiresAt:W,clientId:F,clientSecret:A,tokenEndpoint:r};await new ml(l.db,l.vault).upsert(Y)}}catch(K){console.error("[oauth-proxy] failed to persist downstream token:",K)}return new Response(C,{status:k.status,statusText:k.statusText,headers:I})}return new Response(k.body,{status:k.status,statusText:k.statusText,headers:I})},xlt=async(i)=>{let u=i.var.studioContext;if(!(u.auth.user?.id??u.auth.apiKey?.userId))return i.json({error:"Unauthorized"},401);let f=u.organization?.id;if(!f)return i.json({error:"organization id missing"},400);let l=i.req.query("types"),c=l?l.split(",").map(($)=>$.trim()).filter(Boolean):null,E=crypto.randomUUID();return th(i,async($)=>{if(await $.writeSSE({event:"connected",data:JSON.stringify({listenerId:E,organizationId:f,typePatterns:c,connectedAt:new Date().toISOString()})}),!T1.add({id:E,organizationId:f,typePatterns:c?.length?c:null,push:(h)=>{$.writeSSE({id:h.id,event:h.type,data:JSON.stringify(h)}).catch(()=>{T1.remove(f,E)})}})){await $.writeSSE({event:"error",data:JSON.stringify({error:"Too many connections",message:"SSE connection limit reached. Try again later."})});return}let d=setInterval(()=>{$.writeSSE({event:"keepalive",data:""}).catch(()=>{clearInterval(d)})},30000);await new Promise((h)=>{$.onAbort(()=>{clearInterval(d),T1.remove(f,E),h()})})})},ZL4,FL4,UL4=()=>BL4(dt),PL4=()=>TL4(dt);var C4u=g(()=>{O4();lt();dpu();n6();$Y();Pt();et();kEi();i10();Dei();Nd();Oa();Ohu();cE();Gl();z4();Phu();Co0();mo0();Ghu();zit();P_u();Z_();O3i();A_u();bit();I_u();Rft();qft();aft();S_u();sft();kBi();Ta();l4t();SBi();u5u();$4t();D4t();Z4t();U4t();i5u();svu();Gli();fr();k4t();td();ewi();Hm();Y6u();G4t();S4t();L4t();Y4t();z4t();b4t();r1u();C4t();Wpi();fdi();bn();Rpi();r4t();B$i();A5u();bw();k_u();dH();o1u();M1u();B$i();Z_u();Epi();$pi();e4t();_Y();s4t();oJ();Ohu();FH();jTi();Alt=G(y2(),1);ZL4=new nL4,FL4=new Set([E3,Jh,WD,P2])});var Slt={};Si(Slt,{resolveClientDir:()=>KL4,resolveAssetPathWithTraversalCheck:()=>jlt,isPathWithinDirectory:()=>Glt,createAssetHandler:()=>JL4});import{resolve as tii,dirname as IL4,join as xL4,extname as kL4,basename as GL4,sep as klt}from"path";function jL4(i,u){if(i===u||GL4(i)==="index.html")return{"Cache-Control":"no-cache"};if(i.includes(`${klt}assets${klt}`))return{"Cache-Control":"public, max-age=31536000, immutable"};return{}}function Glt(i,u){let t=tii(u),f=tii(i);return f===t||f.startsWith(t+"/")}function jlt({requestPath:i,clientDir:u}){let t=i.startsWith("/")?i.slice(1):i,f=tii(u,t);if(!Glt(f,u))return null;return f}function KL4(i,u="../client"){let t=new URL(i),f=IL4(t.pathname);return tii(f,u)}function JL4(i={}){let{env:u="production",clientDir:t=SL4,isServerPath:f=()=>!1}=i;if(u==="development")return async function(c){return null};return async function(c){if(c.method!=="GET")return null;let E=new URL(c.url),$;try{$=decodeURIComponent(E.pathname)}catch{return null}if(f($))return null;let w=jlt({requestPath:$,clientDir:t});if(!w)return null;let d=xL4(w,"index.html"),h=tii(t,"index.html"),_=c.headers.get("accept"),D=_?.includes("text/html")||_?.includes("*/*")&&["",".html"].includes(kL4(w))?[d,h]:[];for(let n of[w,...D])try{let N=Bun.file(n);if(await N.exists())return new Response(N,{headers:jL4(n,h)})}catch{}if($.includes("/assets/"))return new Response("Not Found",{status:404,headers:{"Cache-Control":"no-store"}});return null}}var SL4="./dist/client";var Klt=()=>{};var Jlt={};Si(Jlt,{tryUpgradePreviewWs:()=>HL4,tryHandlePreviewHttp:()=>zL4,previewWebSocketHandler:()=>RL4,parsePreviewBaseDomain:()=>QL4,isPreviewWsData:()=>nIi,extractHandleFromHost:()=>K5u});function WL4(i){if(i.method!=="GET")return!1;return(i.headers.get("accept")??"").includes("text/html")}function YL4(){return new Response(LL4,{status:503,headers:{"content-type":"text/html; charset=utf-8","cache-control":"no-store","retry-after":"1","access-control-allow-origin":"*"}})}function QL4(i){if(!i||i.trim()==="")return null;let u=i.includes("{handle}")?i.replace("{handle}","__handle__"):i,t;try{t=new URL(u)}catch{return null}let f=t.hostname;if(i.includes("{handle}")){let l=f.indexOf(".");if(l<=0||l===f.length-1)return null;return f.slice(l+1)}return f}function K5u(i,u){if(!i||!u)return null;let t=i.indexOf(":"),f=(t>=0?i.slice(0,t):i).toLowerCase(),c=`.${u.toLowerCase().replace(/^\.+|\.+$/g,"")}`;if(!f.endsWith(c))return null;let E=f.slice(0,f.length-c.length);if(!E||E.includes("."))return null;return E}async function zL4(i,u){let t=K5u(i.headers.get("host"),u.baseDomain);if(!t)return null;let f=await u.getRunner();if(!f)return lii(503,"preview proxy not configured");let l=await f.proxyPreviewRequest(t,i);if(l.headers.get(kK)&&WL4(i))return YL4();return l.headers.delete(kK),l}function lii(i,u){return new Response(JSON.stringify({error:u}),{status:i,headers:{"content-type":"application/json","access-control-allow-origin":"*"}})}function nIi(i){return typeof i==="object"&&i!==null&&i.kind==="preview"}async function HL4(i,u,t){if((i.headers.get("upgrade")??"").toLowerCase()!=="websocket")return null;let f=K5u(i.headers.get("host"),t.baseDomain);if(!f)return null;let l=await t.getRunner();if(!l)return lii(503,"preview proxy not configured");let c=await l.resolvePreviewUpstreamUrl(f);if(!c)return lii(404,"sandbox not found");let E=new URL(i.url);if(E.pathname.startsWith("/_sandbox")||E.pathname.startsWith("/_decopilot_vm"))return lii(404,"not found");let $=`${c.replace(/^http/,"ws")}${E.pathname}${E.search}`,w=i.headers.get("sec-websocket-protocol"),d=w?w.split(",").map((v)=>v.trim()).filter(Boolean):[],h={kind:"preview",upstreamUrl:$,upstreamProtocols:d,pending:[],upstream:null,closed:!1};if(!u.upgrade(i,{data:h}))return lii(426,"upgrade failed");return}function fii(i,u,t,f){if(u.closed)return;u.closed=!0;try{i.close(t,f)}catch{}try{u.upstream?.close()}catch{}}var XL4=256,LL4='<!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>',RL4;var Xlt=g(()=>{z4u();RL4={open(i){let u=i.data;if(!nIi(u))return;let t;try{t=u.upstreamProtocols.length>0?new WebSocket(u.upstreamUrl,u.upstreamProtocols):new WebSocket(u.upstreamUrl)}catch(f){console.warn(`[preview-ws] failed to dial upstream ${u.upstreamUrl}: ${f instanceof Error?f.message:String(f)}`),fii(i,u,1011,"upstream connect failed");return}t.binaryType="arraybuffer",u.upstream=t,t.addEventListener("open",()=>{while(u.pending.length>0){let f=u.pending.shift();if(f!==void 0)t.send(f)}}),t.addEventListener("message",(f)=>{if(u.closed)return;i.send(f.data)}),t.addEventListener("close",(f)=>{fii(i,u,f.code||1000,f.reason||"")}),t.addEventListener("error",()=>{fii(i,u,1011,"upstream error")})},message(i,u){let t=i.data;if(!nIi(t))return;let f=t.upstream;if(f&&f.readyState===WebSocket.OPEN){f.send(u);return}if(t.pending.length>=XL4){fii(i,t,1011,"preview ws backlog overflow");return}t.pending.push(u)},close(i){let u=i.data;if(!nIi(u))return;fii(i,u,1000,"")}}});var Wlt={};Si(Wlt,{bootstrapDevLinkSession:()=>aL4});import{existsSync as bL4}from"fs";import{chmod as CL4,mkdir as ML4,rename as qL4,writeFile as VL4}from"fs/promises";import{dirname as rL4,join as Llt}from"path";function mL4(i){return Llt(i,"dev-link")}function eL4(i){let u=process.env.DEV_LINK_SESSION_PATH;if(u&&u.trim()!=="")return u;return Llt(mL4(i),"session.json")}async function aL4(i,u){let t=eL4(i),f=Ft().db,l=q3()?await eo():await f.selectFrom("user").select(["id","email","name"]).orderBy("createdAt","desc").executeTakeFirst();if(!l?.id)return null;if(bL4(t))try{let d=await Bun.file(t).json(),h=d.user?.sub,_=d.accessToken;if(h===l.id&&typeof _==="string"){if(await dt.api.verifyApiKey({body:{key:_}}).then((D)=>D?.valid===!0).catch(()=>!1))return{path:t,userSub:h}}}catch{}let c=null;try{c=await dt.api.createApiKey({body:{name:"dev-link (auto-minted by bun run dev)",userId:l.id,permissions:{"*":["*"]},expiresIn:2592000,rateLimitEnabled:!1}})}catch(w){return console.warn("[dev-link] failed to mint API key:",w instanceof Error?w.message:String(w)),null}if(!c?.key)return null;let E={target:u,clientId:"dev-link",user:{sub:l.id,...l.email?{email:l.email}:{},...l.name?{name:l.name}:{}},accessToken:c.key,createdAt:new Date().toISOString()};await ML4(rL4(t),{recursive:!0});let $=`${t}.tmp`;return await VL4($,JSON.stringify(E,null,2),{mode:384}),await CL4($,384),await qL4($,t),{path:t,userSub:l.id}}var Ylt=g(()=>{cE();Nd();r9()});var gW4={};import{existsSync as lW4}from"fs";function blt(i,u){if(!u)return i;let t=new URL(i);if(!t.searchParams.has("sslmode"))t.searchParams.set("sslmode","verify-full");return t.toString()}function $W4(i){let u=new Headers(i.headers);for(let[t,f]of Object.entries(EW4))u.set(t,f);return new Response(i.body,{status:i.status,statusText:i.statusText,headers:u})}async function nW4(i){let u;try{u=await oL4.create({systemDatabaseUrl:blt(Sw.databaseUrl,Sw.databasePgSsl),systemDatabaseSchemaName:"dbos"});let t=await u.listWorkflows({status:"PENDING",queueName:Jh,executorId:i,loadInput:!1,loadOutput:!1});if(t.length===0){console.log(`[shutdown] no in-flight thread-gate gates to hand off (executor ${i})`);return}let f=t.map((l)=>l.workflowID);await u.resumeWorkflows(f,{queueName:Jh}),console.log(`[shutdown] re-enqueued ${f.length} in-flight thread-gate gate(s) for re-adoption by a live executor (from ${i}):`,f)}catch(t){console.error("[shutdown] thread-gate handoff failed:",t)}finally{await u?.destroy().catch(()=>{})}}async function NIi(i){if(Rlt)return;Rlt=!0,console.log(`
88554
+ </head>`)}function v4t(i){let u=new Ju;return u.get("/:domain",async(t)=>{let f=t.req.param("domain"),l=i?hX4(i,"index.html"):null,c=l?Bun.file(l):null;if(!c||!await c.exists())return t.notFound();let E=await c.text();try{let $=_X4(f);return t.html(vX4(E,$),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return t.html(E)}}),u}var D4t=g(()=>{et();lt()});import{z as $u}from"zod";var iX,DX4,nX4,gX4,NX4,n4t;var g4t=g(()=>{iX=$u.enum(["good","bad","neutral"]),DX4=$u.preprocess((i)=>{if(Array.isArray(i))return{kind:"text",value:i.find((t)=>t!==null&&typeof t!=="object")??""};return i!==null&&typeof i==="object"?i:{kind:"text",value:i}},$u.object({kind:$u.enum(["text","number","sparkline","badge","score"]).catch("text"),value:$u.coerce.string().optional(),tone:iX.optional(),muted:$u.boolean().optional(),delta:$u.coerce.string().optional(),deltaDir:$u.enum(["up","down","neutral"]).optional(),points:$u.array($u.coerce.number()).optional(),label:$u.coerce.string().optional()}).transform((i)=>{if(i.kind==="badge"&&i.label==null)i.label=i.value??"";if(i.kind==="score"){let u=Number(i.value);if(Number.isNaN(u))return{...i,kind:"text"}}return i})),nX4=$u.preprocess((i)=>{let u=i;if(u&&typeof u==="object"&&!Array.isArray(u)&&Array.isArray(u.cells))u=u.cells;if(Array.isArray(u)&&u.length===1&&Array.isArray(u[0]))u=u[0];if(Array.isArray(u))return u;if(u&&typeof u==="object")return Object.values(u);return u},$u.array(DX4)),gX4={key:$u.coerce.string(),title:$u.coerce.string(),eyebrow:$u.coerce.string().optional(),headline:$u.coerce.string(),annotation:$u.coerce.string().optional(),methodology:$u.coerce.string().optional(),sources:$u.array($u.object({name:$u.coerce.string(),logoUrl:$u.coerce.string()})).optional()},NX4=$u.discriminatedUnion("template",[$u.object({template:$u.literal("cover"),score:$u.object({value:$u.coerce.number(),max:$u.coerce.number().optional(),grade:$u.coerce.string().optional(),label:$u.coerce.string().optional()}).optional(),brandImage:$u.coerce.string().optional(),screenshot:$u.coerce.string().optional(),mobileScreenshot:$u.coerce.string().optional()}),$u.object({template:$u.literal("cta"),ctaUrl:$u.coerce.string().optional(),ctaLabel:$u.coerce.string().optional(),bullets:$u.array($u.coerce.string()).optional()}),$u.object({template:$u.literal("series"),points:$u.array($u.coerce.number()).min(2),xLabels:$u.array($u.coerce.string()).min(1),unit:$u.coerce.string().optional(),callout:$u.object({index:$u.coerce.number(),value:$u.coerce.string(),tone:iX.optional()})}),$u.object({template:$u.literal("threshold"),value:$u.coerce.string().default(""),metricLabel:$u.coerce.string().optional(),ratio:$u.coerce.number(),thresholdRatio:$u.coerce.number().optional(),thresholdLabel:$u.coerce.string().default(""),tone:iX.optional()}),$u.object({template:$u.literal("stats"),stats:$u.array($u.object({value:$u.coerce.string(),label:$u.coerce.string(),tone:iX.optional()})).min(1)}),$u.object({template:$u.literal("bars"),items:$u.array($u.object({value:$u.coerce.string(),label:$u.coerce.string(),ratio:$u.coerce.number(),tone:iX.optional()})).min(1)}),$u.object({template:$u.literal("gauges"),gauges:$u.array($u.object({label:$u.coerce.string(),value:$u.coerce.string(),status:$u.enum(["good","warn","bad"]).catch("warn"),caption:$u.coerce.string().optional(),ratio:$u.coerce.number().optional()})).min(1)}),$u.object({template:$u.literal("checklist"),checks:$u.array($u.object({label:$u.coerce.string(),status:$u.enum(["pass","fail","warn"]).catch("fail"),value:$u.coerce.string().optional()})).min(1)}),$u.object({template:$u.literal("table"),columns:$u.array($u.object({label:$u.coerce.string(),align:$u.enum(["left","right"]).optional()})).min(1),rows:$u.array(nX4).min(1),highlightRow:$u.coerce.number().optional()}),$u.object({template:$u.literal("products"),products:$u.array($u.object({name:$u.coerce.string(),price:$u.coerce.string().optional(),image:$u.coerce.string().optional(),url:$u.coerce.string().optional()})).min(1)}),$u.object({template:$u.literal("list"),entries:$u.array($u.object({label:$u.coerce.string(),severity:$u.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:$u.coerce.number().optional()}),$u.object({template:$u.literal("keywords"),volumeLabel:$u.coerce.string().optional(),keywords:$u.array($u.object({term:$u.coerce.string(),volume:$u.coerce.string(),position:$u.coerce.number().catch(0)})).min(1)}),$u.object({template:$u.literal("competitor"),metricLabel:$u.coerce.string().optional(),competitors:$u.array($u.object({name:$u.coerce.string(),value:$u.coerce.string(),tone:iX.optional(),isYou:$u.boolean().optional()})).min(1)}),$u.object({template:$u.literal("scorecard"),rivalLabel:$u.coerce.string().optional(),dimensions:$u.array($u.object({label:$u.coerce.string(),you:$u.coerce.string(),rival:$u.coerce.string().optional(),rivalName:$u.coerce.string().optional(),tone:iX.optional()})).min(1)})]),n4t=$u.object({...gX4,template:NX4})});function N4t(i){let u=[],t=[...i.sections].sort((f,l)=>f.position-l.position).map((f)=>{let l=n4t.safeParse(f.props);if(l.success)return l.data;let c=l.error.issues[0];return u.push({section_type:f.section_type,position:f.position,reason:c?`${c.path.join(".")||"(root)"}: ${c.message}`:"contract violation"}),null}).filter((f)=>f!==null);return{deck:{meta:{...i.meta,scores:i.summary?.scores},slides:t},drops:u}}var O4t=g(()=>{g4t()});function uii(i,u){return fetch(`${QO({})}${i}`,u)}async function OX4(i,u,t){let f=new URLSearchParams;if(u)f.set("pw",u);if(t)f.set("lang",t);let l=f.toString()?`?${f.toString()}`:"",c=await uii(`/api/v2/public/diagnostics/${encodeURIComponent(i)}${l}`,{headers:{Accept:"application/json"}});if(c.status===404)return{status:"not_found",deck:null,scanned_at:null,drops:[]};if(!c.ok)throw Error(`report read HTTP ${c.status}`);let E=await c.json(),{deck:$,drops:w}=N4t(E);return{status:$.slides.length?"ready":"empty",deck:$,scanned_at:E.scanned_at,drops:w}}var yX4,uX,y4t;var Z4t=g(()=>{et();Nd();JY();O4t();yX4=new Set(["complete","errored","terminated","unknown"]),uX=new Ju;uX.use("*",async(i,u)=>{let t=await dt.api.getSession({headers:i.req.raw.headers});if(!t?.user?.id)return i.json({error:"Authentication required"},401,{"Cache-Control":"private, no-store",Vary:"Cookie"});i.set("reportUser",{email:t.user.email}),await u(),i.header("Cache-Control","private, no-store"),i.header("Vary","Cookie");return});uX.get("/site/:domain",async(i)=>{let u=i.req.param("domain").trim();if(!u)return i.json({error:"domain is required"},400);let t=i.req.query("key")?.trim()||void 0,f=i.req.query("lang")?.trim()||void 0;try{let l=await OX4(u,t,f);return i.header("Cache-Control","private, no-store"),i.json(l)}catch{return i.json({error:"report read failed"},502)}});uX.post("/run",async(i)=>{let u;try{u=await i.req.json()}catch{return i.json({error:"invalid JSON"},400)}let t=typeof u.domain==="string"?u.domain.trim():"";if(!t)return i.json({error:"domain is required"},400);let f=i.get("reportUser").email,l=typeof u.distinctId==="string"&&u.distinctId.trim()&&u.distinctId.length<=200?u.distinctId.trim():void 0;try{let c=await uii("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${zO({})}`},body:JSON.stringify({url:t,email:f,distinct_id:l})});if(!c.ok)return i.json({error:`run HTTP ${c.status}`},502);let E=await c.json(),$=E.blocked?{state:"blocked"}:E.status==="fresh"?{state:"fresh"}:E.mode==="sync"?{state:"sync"}:{state:"running",id:E.id??null};return i.json($)}catch{return i.json({error:"run failed"},502)}});uX.get("/status",async(i)=>{let u=i.req.query("id");if(!u)return i.json({error:"id is required"},400);try{let t=await uii(`/api/v2/diagnostics/status?id=${encodeURIComponent(u)}`,{headers:{Authorization:`Bearer ${zO({})}`}});if(!t.ok)return i.json({error:`status HTTP ${t.status}`},502);let l=(await t.json()).status??"unknown",c={done:yX4.has(l),status:l};return i.json(c)}catch{return i.json({error:"status failed"},502)}});uX.get("/link-token/:id",async(i)=>{let u=i.req.param("id");try{let t=await uii(`/api/v2/public/link-tokens/${encodeURIComponent(u)}`,{headers:{Accept:"application/json"}});if(t.status===404)return i.json(null);if(!t.ok)return i.json({error:`link token HTTP ${t.status}`},502);return i.json(await t.json())}catch{return i.json({error:"link token resolve failed"},502)}});uX.get("/suggest",async(i)=>{let u=(i.req.query("q")??"").trim().slice(0,64);if(u.length<2)return i.json({suggestions:[]});try{let t=await uii(`/api/v2/public/suggest?q=${encodeURIComponent(u)}`,{headers:{Accept:"application/json"}});if(!t.ok)return i.json({suggestions:[]});let f=await t.json();return i.json({suggestions:Array.isArray(f.suggestions)?f.suggestions:[]})}catch{return i.json({suggestions:[]})}});y4t=uX});function T4t(i,u){if(u.startsWith("text/html")||u.startsWith("image/svg"))i.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var B4t,ZX4,TX4,F4t;var U4t=g(()=>{et();ah();BH();$Y();B4t=new Ju,ZX4=["range","if-none-match","if-modified-since"],TX4=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];B4t.get("/:org/files/*",async(i)=>{let u=i.get("studioContext"),t=u.organization?.id;if(!u.auth?.user?.id){if(XR(i))return i.redirect(`/login?next=${encodeURIComponent(i.req.path)}`,302);throw new I0(401,{message:"Authentication required"})}if(!t)throw new I0(401,{message:"Organization context required"});let f=i.req.path.replace(/^.*\/files\//,"");if(!f)throw new I0(400,{message:"Missing file key"});let l=await ao(f,u);if(!l)throw new I0(503,{message:"Object storage not configured"});if(l.startsWith("data:")&&eh()){let w=l.match(/^data:([^;]+);base64,(.+)$/s);if(!w)throw new I0(500,{message:"Invalid data URL from storage"});let[,d,h]=w,_=Buffer.from(h,"base64"),v=new Headers({"Content-Type":d,"Cache-Control":"private, max-age=86400"});return T4t(v,d),new Response(_,{status:200,headers:v})}let c=new Headers;for(let w of ZX4){let d=i.req.header(w);if(d)c.set(w,d)}let E=await fetch(l,{headers:c});if(E.status===403||E.status===404)throw new I0(404,{message:"File not found"});if(!E.ok&&E.status!==304&&E.status!==416)throw console.error(`[files] upstream storage error ${E.status} for key:`,f),new I0(502,{message:"Upstream storage error"});let $=new Headers;for(let w of TX4){let d=E.headers.get(w);if(d)$.set(w,d)}return $.set("Cache-Control","private, max-age=86400"),T4t($,$.get("content-type")??""),new Response(E.body,{status:E.status,headers:$})});F4t=B4t});function x4t(i){let u=i?.connectFn??PX4,t=null,f=null,l=!1,c=!1,E=!1,$=[];function w(){return t!==null&&!t.isClosed()&&!t.isDraining()&&!E}function d(){console.log(`[NatsProvider] fireReady: ${$.length} callbacks`);for(let v of $)try{v()}catch{}}function h(v){(async()=>{for await(let D of v.status())if(D.type==="disconnect")console.log("[NatsProvider] Disconnected"),E=!0;else if(D.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),E=!1,f=null,d()})().catch(()=>{})}async function _(v,D){let n=0;while(!c)try{t=await u({servers:v,timeout:UX4,reconnect:!0,maxReconnectAttempts:-1,...D?{authenticator:D}:{}}),console.log(`[NatsProvider] Connected to ${t.getServer()} after ${n} attempt(s)`),f=null,E=!1,h(t),d();return}catch{n++;let N=c6(FX4,BX4,n-1,2,0.5);await N0(N)}}return{init(v,D){if(l)return;l=!0,c=!1;let n=D?.creds?P4t.credsAuthenticator(new TextEncoder().encode(D.creds)):void 0;_(v,n).catch(()=>{})},isConnected(){return w()},getConnection(){return w()?t:null},getJetStream(){if(!w())return null;if(!f)f=I4t.jetstream(t);return f},onReady(v){if($.push(v),w())try{v()}catch{}},async drain(){if(c=!0,l=!1,f=null,E=!1,t){let v=t;t=null,await v.drain().catch(()=>{})}}}}function PX4(i){return A4t.connect(i)}var P4t,A4t,I4t,BX4=100,FX4=3000,UX4=3000;var k4t=g(()=>{O4();P4t=G(qN(),1),A4t=G(hRi(),1),I4t=G(y2(),1)});function y5u(i,u){return`${i}.${u}`}class Z5u{cache;constructor(i){this.cache=TR({ttlMs:i?.ttlMs??AX4,maxSize:i?.maxSize??IX4})}async get(i,u){return this.cache.get(y5u(i,u))??null}async set(i,u,t){this.cache.set(y5u(i,u),t)}async invalidate(i,u){this.cache.delete(y5u(i,u))}teardown(){this.cache.clear()}}var AX4=600000,IX4=5000;var G4t=()=>{};function dIi(i,u){return`${i}:${u}`}function T5u(i){let u=TR({ttlMs:i?.ttlMs??xX4,maxSize:i?.maxSize??kX4}),t=i?.getConnection,f=crypto.randomUUID(),l=new TextEncoder,c=new TextDecoder,E=null;function $(w,d){let h=t?.();if(!h)return;try{h.publish(j4t,l.encode(JSON.stringify({organizationId:w,keyId:d,originId:f})))}catch(_){console.warn("[ProviderKeyCache] Publish failed (non-critical):",_)}}return{get(w,d){return u.get(dIi(w,d))},set(w,d,h){u.set(dIi(w,d),h)},invalidate(w,d){u.delete(dIi(w,d)),$(w,d)},start(){if(E)return;let w=t?.();if(!w)return;E=w.subscribe(j4t),(async()=>{for await(let d of E)try{let h=JSON.parse(c.decode(d.data));if(h.originId===f)continue;u.delete(dIi(h.organizationId,h.keyId))}catch{}})().catch(console.error)},teardown(){E?.unsubscribe(),E=null,u.clear()}}}var j4t="studio.ai-provider-keys.invalidate",xX4=30000,kX4=5000;var S4t=()=>{};class B5u{options;sub=null;onCancel=null;encoder=new TextEncoder;originId=crypto.randomUUID();constructor(i){this.options=i}async start(i){if(i)this.onCancel=i;if(this.sub)return;if(!this.onCancel)return;let u=this.options.getConnection();if(!u)return;this.sub=u.subscribe("mesh.decopilot.cancel");let t=new TextDecoder;(async()=>{for await(let f of this.sub)try{let l=JSON.parse(t.decode(f.data));if(l.originId===this.originId)continue;this.onCancel?.(l.taskId)}catch{}})().catch(console.error)}broadcast(i){if(/[.*>\s]/.test(i)){console.warn("[NatsCancelBroadcast] Invalid threadId, skipping broadcast");return}this.onCancel?.(i);try{let u=this.options.getConnection();if(!u)return;u.publish("mesh.decopilot.cancel",this.encoder.encode(JSON.stringify({taskId:i,originId:this.originId})))}catch(u){console.warn("[NatsCancelBroadcast] Publish failed (non-critical):",u)}}publishControlFrame(i,u){}async stop(){this.sub?.unsubscribe(),this.sub=null,this.onCancel=null}}function LX4(){return{name:Rn,subjects:[`${zRi}.>`],storage:M_.StorageType.File,max_age:SX4,max_bytes:JX4,max_msgs_per_subject:XX4,discard:M_.DiscardPolicy.Old,retention:M_.RetentionPolicy.Limits,duplicate_window:KX4,num_replicas:1}}class X4t{chunks=0;encodeMs=0;maxMs=0;bytes=0;windowStart=performance.now();constructor(){setInterval(()=>this.flush(),1e4).unref?.()}record(i,u){if(this.chunks++,this.encodeMs+=i,i>this.maxMs)this.maxMs=i;this.bytes+=u}flush(){let i=performance.now(),u=i-this.windowStart;if(this.chunks>0&&u>0)console.warn(JSON.stringify({msg:"stream-encode-trace",windowMs:Math.round(u),chunks:this.chunks,encodeMs:Math.round(this.encodeMs),pctOfLoop:+(this.encodeMs/u*100).toFixed(1),maxChunkMs:+this.maxMs.toFixed(2),mbEncoded:+(this.bytes/1048576).toFixed(2)}));this.chunks=0,this.encodeMs=0,this.maxMs=0,this.bytes=0,this.windowStart=i}}function K4t(i){let u=J4t.headers();for(let[t,f]of Object.entries(i))u.set(t,f);return u}function zX4(i,u){let t=0;return{publish(f,l,c,E){f.publish(l,c,E?{headers:E}:void 0).catch(($)=>{if(t++,jX4().add(1,{"org.id":u??"unknown"}),t===1||t%100===0)console.warn(`[Decopilot] JetStream publish failed for thread ${i} (${t} total):`,$)})},get errorCount(){return t}}}class F5u{options;js=null;jsm=null;constructor(i){this.options=i}async init(){let i=this.options.getConnection();if(!i){console.log("[Decopilot] StreamBuffer.init skipped: NATS not connected yet");return}let u=this.options.getJetStreamManager?await this.options.getJetStreamManager():await M_.jetstreamManager(i),t=LX4();try{await u.streams.info(Rn),await u.streams.update(Rn,t)}catch(f){if(f instanceof Error&&f.message.includes("stream not found"))await u.streams.add(t);else if(f instanceof Error&&/can ?not change.*storage|storage type/i.test(f.message))await u.streams.delete(Rn),await u.streams.add(t);else throw f}this.js=this.options.getJetStream(),this.jsm=u,console.log(`[Decopilot] StreamBuffer.init ${this.js?"ready":"degraded (js=null)"}`)}pump(i,u,t,f){let l=this.js;if(!l)return console.warn(`[Decopilot] pump: JetStream client unavailable for thread ${u}; chunks NOT published to NATS`),Promise.resolve();let c=zX4(u,f),E=!1,$=()=>{if(E)return;E=!0;let d=Ymu(u);l.publish(d.subject,d.data).catch(()=>{})};t.addEventListener("abort",$,{once:!0});let w=(d)=>{let h=performance.now(),_=dW(d,{runId:u}),v=performance.now()-h;if(tq().record(v),fq().add(1,{"org.id":f??"unknown"}),QX4?.record(v,_.reduce((D,n)=>D+n.data.length,0)),_.length===0){console.warn(`[Decopilot] dropping oversized stream chunk for thread ${u}`);return}for(let D of _)c.publish(l,D.subject,D.data,D.headers?K4t(D.headers):void 0)};return(async()=>{let d=i.getReader(),h=0,_=0,v;try{while(!0){let{done:D,value:n}=await d.read();if(D)break;if(w(n),_++,++h>=64)h=0,await new Promise((N)=>setImmediate(N))}}catch(D){v=D,console.warn(`[Decopilot] stream pump error for thread ${u}:`,D?.message??D)}finally{if(d.releaseLock(),$(),YX4)console.warn(JSON.stringify({msg:"decopilot-stream-diag",event:"pump-done",taskId:u,publishedChunks:_,publishErrors:c.errorCount}))}if(v!==void 0)throw v})()}async publishRawChunk(i,u,t){let f=this.js;if(!f)return!1;let l=performance.now(),c=dW(u,{runId:i,dedup:t});if(tq().record(performance.now()-l),fq().add(1),c.length===0)return console.warn(`[Decopilot] dropping oversized raw chunk for thread ${i} (> MAX_CHUNKED_BYTES)`),!0;for(let E of c)await f.publish(E.subject,E.data,{...E.headers?{headers:K4t(E.headers)}:{},...E.msgId?{msgID:E.msgId}:{}});return!0}async publishDone(i,u,t){let f=this.js;if(!f)return!1;let l=C1i({runId:i,fenceToken:u,finalSeq:t});return await f.publish(l.subject,l.data,{msgID:l.msgId}),!0}async createTailStream(i,u,t){let f=this.js;if(!f)return console.warn(`[Decopilot] createTailStream: JetStream client unavailable for thread ${i}; no live tail`),null;let l=t?.deliverPolicy==="new"?M_.DeliverPolicy.New:M_.DeliverPolicy.All,c=t?.closeOnDone??!1,E=Z2(i),$;try{$=await(await f.consumers.get(Rn,{filter_subjects:E,deliver_policy:l})).consume()}catch(N){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",N?.message??N),null}let h=vTi({messages:async function*(){try{for await(let N of $)yield{subject:N.subject,data:N.data,headers:N.headers}}finally{$.stop()}}(),onCancel:()=>$.stop()}).pipeThrough(M1i()).pipeThrough(q1i()).getReader(),_=!1,v=()=>{if(_)return;_=!0;try{h.releaseLock()}catch{}},D=!1,n=()=>{if(D)return;D=!0,$.stop(),h.cancel().catch(()=>{}),v()};return u?.addEventListener("abort",n,{once:!0}),new ReadableStream({async pull(N){for(;;){let{done:O,value:y}=await h.read();if(O){n(),N.close();return}let Z=y;if(Z.kind==="done"){if(c){n(),N.close();return}continue}N.enqueue(Z.chunk);return}},cancel(){n()}})}purge(i){if(!this.jsm)return;this.jsm.streams.purge(Rn,{filter:Z2(i)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var M_,J4t,GX4=(i)=>{let u;return()=>u??=i()},jX4,SX4=86400000000000,KX4=120000000000,JX4=4294967296,XX4=500000,WX4,YX4,QX4;var L4t=g(()=>{W1u();DTi();V1i();Gl();CRi();M_=G(y2(),1),J4t=G(qN(),1),jX4=GX4(()=>Bt.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"}));WX4=process.env.STREAM_ENCODE_TRACE==="1",YX4=process.env.DECOPILOT_STREAM_TRACE==="1";QX4=WX4?new X4t:null});function W4t(i){let u=i.createFetch??HX4,t=i.timeoutMs??2000;return async(f)=>{try{let l=i.getConnection();if(!l)return U5u;let c=Ph(f),$=await u(l,t)(`tunnel://${c}/api/links/status`,{method:"GET"});if(!$.ok)return U5u;let w=await $.json();return{online:!0,hostname:w.hostname,capabilities:w.capabilities??[],cliVersion:w.cliVersion}}catch{return U5u}}}var U5u,HX4=(i,u)=>h2({connection:i,firstFrameTimeoutMs:u});var Y4t=g(()=>{KM();VM();U5u={online:!1,capabilities:[]}});async function*RX4(i){if(!i.body){yield{headers:{status:i.status,headers:Object.fromEntries(i.headers.entries())}};return}let u=i.body.getReader(),t=!1;try{yield{headers:{status:i.status,headers:Object.fromEntries(i.headers.entries())}};while(!0){let{done:f,value:l}=await u.read();if(f){t=!0;return}yield{data:Buffer.from(l).toString("base64")}}}finally{try{if(!t)await u.cancel()}catch{}finally{u.releaseLock()}}}function Q4t(i){let u=i.createFetch??((t)=>h2({connection:t,idleTimeoutMs:bX4}));return async function*(f,l,c){let E=i.getConnection();if(!E)throw Error("link_unavailable: NATS unavailable");let $=Ph(f),w=u(E),d={method:l.method,headers:l.headers,signal:c?.signal};if(l.body!=null)d.body=l.body;let h=await w(`tunnel://${$}${l.path}`,d);yield*RX4(h)}}var bX4=45000;var z4t=g(()=>{KM();VM()});function H4t(i){let u=i.createFetch??((t)=>h2({connection:t,idleTimeoutMs:CX4}));return{async publish(t,f,l){let c=i.getConnection();if(!c)throw Error("link_unavailable: NATS unavailable");let E=Ph(t),w=await u(c)(`tunnel://${E}/api/links/work`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(f),signal:l?.signal});if(!w.ok){let d=await w.text().catch(()=>"");throw Error(`tunnel work publish failed (${w.status})${d?`: ${d}`:""}`)}await w.body?.cancel().catch(()=>{})}}}function R4t(i){let u=i.createFetch??h2;return{async publishControlFrame(t,f,l){let c=i.getConnection();if(!c)throw Error("link_unavailable: NATS unavailable");let E=Ph(t),w=await u(c)(`tunnel://${E}/api/links/control`,{method:"POST",headers:{"content-type":"application/json"},body:pmu(f),signal:l?.signal});if(!w.ok){let d=await w.text().catch(()=>"");throw Error(`tunnel control publish failed (${w.status})${d?`: ${d}`:""}`)}await w.body?.cancel().catch(()=>{})}}}var CX4=45000;var b4t=g(()=>{KM();eRi();VM()});function hIi(i,u,t,f){if(!f)return!1;return i.emit(u,mh(t,f.status,{title:f.title??void 0,virtualMcpId:f.virtual_mcp_id??void 0,createdBy:f.created_by??void 0,triggerId:f.trigger_id??null,branch:f.branch??null,createdAt:f.created_at,updatedAt:f.updated_at})),!0}var C4t=g(()=>{Pt()});class P5u{storage;options;timer=null;constructor(i,u={}){this.storage=i;this.options=u}start(){if(this.timer)return;let i=this.options.intervalMs??300000;this.timer=setInterval(()=>{this.runOnce()},i)}async runOnce(){let i=this.options.staleAfterMs??3600000;try{let u=await this.storage.sweepAbandoned(i);if(u>0)console.log(`[async-research-sweeper] marked ${u} stale jobs as abandoned`);return u}catch(u){return console.error("[async-research-sweeper] sweep failed",u),0}}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}import{readdir as MX4,rm as _Ii}from"fs/promises";import{join as vIi}from"path";async function DIi(i){let u=new Date;u.setUTCDate(u.getUTCDate()-qX4),u.setUTCHours(0,0,0,0);let t=0;try{let f=await tX(i);for(let l of f)if(/^\d{4}$/.test(l))t+=await M4t(i,l,u);else if(!l.startsWith(".")){let c=vIi(i,l),E=await tX(c);for(let w of E){if(!/^\d{4}$/.test(w))continue;t+=await M4t(c,w,u)}if((await tX(c)).length===0)await _Ii(c,{recursive:!0,force:!0})}}catch(f){console.warn("monitoring retention cleanup failed:",f)}return t}async function M4t(i,u,t){let f=0,l=vIi(i,u),c=await tX(l);for(let $ of c){if(!/^\d{2}$/.test($))continue;let w=vIi(l,$),d=await tX(w);for(let _ of d){if(!/^\d{2}$/.test(_))continue;let v=new Date(`${u}-${$}-${_}T00:00:00Z`);if(isNaN(v.getTime()))continue;if(v<t){let D=vIi(w,_);await _Ii(D,{recursive:!0,force:!0}),f++}}if((await tX(w)).length===0)await _Ii(w,{recursive:!0,force:!0})}if((await tX(l)).length===0)await _Ii(l,{recursive:!0,force:!0});return f}async function tX(i){try{return(await MX4(i)).filter((t)=>!t.startsWith("."))}catch{return[]}}var qX4=30;var A5u=()=>{};import{DBOS as I5u,SchedulerMode as VX4}from"@dbos-inc/dbos-sdk";async function mX4(){let i=[Nh(),RL(),ID()],u=0;for(let t of i)try{u+=await DIi(t)}catch(f){console.error("[monitoring-retention] cleanup failed:",f)}return console.log(`[monitoring-retention] deleted ${u} day-dir(s) across ${i.length} signal dir(s)`),{deleted:u,dirs:i.length}}async function eX4(i,u){await I5u.runStep(()=>mX4(),{name:"monitoringRetention"})}function V4t(){if(q4t)return;q4t=!0;let i=I5u.registerWorkflow(eX4,{name:"monitoringRetentionWorkflow"});I5u.registerScheduled(i,{name:"monitoringRetentionWorkflow",crontab:rX4,mode:VX4.ExactlyOncePerIntervalWhenActive})}var rX4="23 4 * * *",q4t=!1;var r4t=g(()=>{bw();A5u()});function m4t(i){return async(u,t)=>{let f=await i.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["member.role","organization.id as orgId","organization.slug as orgSlug","organization.name as orgName"]).where("member.userId","=",t).where("member.organizationId","=",u).executeTakeFirst();if(!f)return console.warn(`[automationContextFactory] User ${t} not found in org ${u} \u2014 returning null`),null;let l=await c9.create();l.auth.user={id:t,role:f.role},l.organization={id:f.orgId,slug:f.orgSlug,name:f.orgName};let c=await Q0u(i.db,u,f.role);return l.boundAuth=Y0u({auth:l.authInstance,headers:new Headers,role:f.role,permissions:c,userId:t}),l.access=new _y(t,void 0,l.boundAuth,f.role,"self"),N3i(l,{id:f.orgId,slug:f.orgSlug}),l}}var e4t=g(()=>{vy();Oa()});import{EventEmitter as aX4}from"events";var x5u;var a4t=g(()=>{iO();x5u=new aX4;x5u.on("request",(i)=>{Nv(i)})});function o4t(){return async(i,u)=>{let t=Date.now(),f=i.req.method,l=i.req.path;if(l==="/api/auth/get-session"||l.includes("favicon")){await u();return}let c="",E=!1;if(l.startsWith("/mcp")&&f==="POST"){E=!0;try{if(i.req.header("Content-Type")?.includes("application/json")){let v=await i.req.raw.clone().json();if(v.method==="tools/call"&&v.params?.name){let D=pR(v.params.name),n=v.params.arguments||{},N=Object.keys(n).map((y)=>pR(y)),O=N.length>0?N.slice(0,3).join(",")+(N.length>3?"\u2026":""):"";c=`${Dl.tool}${D}${Dl.dim}(${O})${Dl.reset}`}else if(v.method)c=`${Dl.dim}${pR(v.method)}${Dl.reset}`}}catch{}}let $=pR(l);if(l.startsWith("/mcp/conn_")){let h=l.split("/")[2]??"";$=`/mcp/${Dl.mcp}${pR(h.slice(0,12))}\u2026${Dl.reset}`}else if(l==="/mcp")$=`${Dl.mcp}/mcp${Dl.reset}`;else if(l==="/mcp/registry")$=`${Dl.mcp}/mcp/registry${Dl.reset}`;let w=sX4(f),d=E?"\u25C0":"\u2190";if(!Tci())console.log(`${Dl.dim}${d}${Dl.reset} ${w}${f}${Dl.reset} ${$}${c?` ${c}`:""}`);try{await u()}finally{let h=Date.now()-t,_=i.res.status,v=oX4(_),D=h<1000?`${h}ms`:`${(h/1000).toFixed(1)}s`,n=E?"\u25B6":"\u2192";if(!Tci())console.log(`${Dl.dim}${n}${Dl.reset} ${w}${f}${Dl.reset} ${$}${c?` ${c}`:""} ${v}${_}${Dl.reset} ${Dl.duration}${D}${Dl.reset}`);x5u.emit("request",{method:f,path:pR(l),status:_,duration:h,timestamp:new Date})}}}var Dl,oX4=(i)=>{if(i>=500)return Dl.serverError;if(i>=400)return Dl.clientError;if(i>=300)return Dl.redirect;return Dl.ok},sX4=(i)=>{return Dl[i]||Dl.reset},pR=(i)=>{return i.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var s4t=g(()=>{iO();a4t();Dl={reset:"\x1B[0m",dim:"\x1B[2m",bold:"\x1B[1m",GET:"\x1B[36m",POST:"\x1B[33m",PUT:"\x1B[35m",DELETE:"\x1B[31m",ok:"\x1B[32m",redirect:"\x1B[36m",clientError:"\x1B[33m",serverError:"\x1B[31m",mcp:"\x1B[35m",tool:"\x1B[96m",duration:"\x1B[90m"}});import{createHmac as tlt}from"crypto";import{mkdir as pX4,readdir as iL4,rm as p4t,stat as flt}from"fs/promises";import{join as G5u,relative as uL4}from"path";import{z as k0}from"zod";function clt(i){let u=i.replace(/[^a-zA-Z0-9_-]/g,"_");return G5u(tL4,u)}function Elt(i){return i.replace(/^\/+/,"").replace(/\.\./g,"")}function k5u(i,u){let t=clt(i),f=Elt(u);return G5u(t,f)}function fL4(i,u,t,f){let l=Ou().encryptionKey||"dev-secret",c=`${i}:${u}:${t}:${f}`;return tlt("sha256",l).update(c).digest("hex")}function ult(i,u,t,f,l){let c=Math.floor(Date.now()/1000)+f,E=fL4(u,t,c,l),$=new URL(`/api/dev-assets/${u}/${Elt(t)}`,i);return $.searchParams.set("expires",c.toString()),$.searchParams.set("signature",E),$.searchParams.set("method",l),$.toString()}function $lt(i,u,t){let f=`${i}:${u.getTime()}:${t}`;return`"${tlt("md5","etag").update(f).digest("hex")}"`}async function wlt(i,u,t,f,l){try{let c=await iL4(i,{withFileTypes:!0});for(let E of c){let $=G5u(i,E.name),d=uL4(u,$).replace(/\\/g,"/");if(t&&!d.startsWith(t))continue;if(E.isDirectory())if(f){let h=d+"/";if(!t||h.startsWith(t)){if(!(t?d.slice(t.length):d).includes("/"))l.commonPrefixes.add(h)}}else await wlt($,u,t,f,l);else if(E.isFile()){if(f&&t){let h=d.slice(t.length);if(h.includes(f)){let _=h.indexOf(f),v=t+h.slice(0,_+1);l.commonPrefixes.add(v);continue}}try{let h=await flt($);l.objects.push({key:d,size:h.size,lastModified:h.mtime.toISOString(),etag:$lt($,h.mtime,h.size)})}catch{}}}}catch{}}function dlt(i,u){let f=Oi(i).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:k0.object({prefix:k0.string().optional(),maxKeys:k0.number().optional().default(1000),continuationToken:k0.string().optional(),delimiter:k0.string().optional()}),outputSchema:k0.object({objects:k0.array(k0.object({key:k0.string(),size:k0.number(),lastModified:k0.string(),etag:k0.string()})),nextContinuationToken:k0.string().optional(),isTruncated:k0.boolean(),commonPrefixes:k0.array(k0.string()).optional()}),handler:async(l)=>{let c=l,E=c.prefix||"",$=c.maxKeys??1000,w=c.delimiter,d=c.continuationToken,h=clt(f);await pX4(h,{recursive:!0});let _={objects:[],commonPrefixes:new Set};await wlt(h,h,E,w,_),_.objects.sort((O,y)=>O.key.localeCompare(y.key));let v=0;if(d){if(v=_.objects.findIndex((O)=>O.key>d),v===-1)v=_.objects.length}let D=_.objects.slice(v,v+$),n=v+$<_.objects.length,N=n?D[D.length-1]?.key:void 0;return{objects:D,isTruncated:n,nextContinuationToken:N,commonPrefixes:Array.from(_.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:k0.object({key:k0.string()}),outputSchema:k0.object({contentType:k0.string().optional(),contentLength:k0.number(),lastModified:k0.string(),etag:k0.string(),metadata:k0.record(k0.string(),k0.string()).optional()}),handler:async(l)=>{let c=l,E=k5u(f,c.key),$=await flt(E);return{contentType:J_u(c.key),contentLength:$.size,lastModified:$.mtime.toISOString(),etag:$lt(E,$.mtime,$.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:k0.object({key:k0.string(),expiresIn:k0.number().optional()}),outputSchema:k0.object({url:k0.string(),expiresIn:k0.number()}),handler:async(l)=>{let c=l,E=c.expiresIn??ilt;return{url:ult(u,f,c.key,E,"GET"),expiresIn:E}}},{name:"PUT_PRESIGNED_URL",description:"Generate a presigned URL for uploading a file to local storage",inputSchema:k0.object({key:k0.string(),expiresIn:k0.number().optional(),contentType:k0.string().optional()}),outputSchema:k0.object({url:k0.string(),expiresIn:k0.number()}),handler:async(l)=>{let c=l,E=c.expiresIn??ilt;return{url:ult(u,f,c.key,E,"PUT"),expiresIn:E}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:k0.object({key:k0.string()}),outputSchema:k0.object({success:k0.boolean(),key:k0.string()}),handler:async(l)=>{let c=l,E=k5u(f,c.key);try{return await p4t(E),{success:!0,key:c.key}}catch{return{success:!1,key:c.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:k0.object({keys:k0.array(k0.string()).max(1000)}),outputSchema:k0.object({deleted:k0.array(k0.string()),errors:k0.array(k0.object({key:k0.string(),message:k0.string()}))}),handler:async(l)=>{let c=l,E=[],$=[];return await Promise.all(c.keys.map(async(w)=>{let d=k5u(f,w);try{await p4t(d),E.push(w)}catch(h){$.push({key:w,message:h instanceof Error?h.message:"Unknown error"})}})),{deleted:E,errors:$}}}]}async function j5u(i,u,t){let f=dlt(u,t),l=new mD({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:Kl});for(let E of f){let $="shape"in E.inputSchema?E.inputSchema.shape:k0.object({}).shape,w=E.outputSchema&&"shape"in E.outputSchema?E.outputSchema.shape:k0.object({}).shape;l.registerTool(E.name,{description:E.description??"",inputSchema:$,outputSchema:w,annotations:E.annotations,_meta:E._meta},async(d)=>{try{let h=await E.handler(d);return{content:[{type:"text",text:JSON.stringify(h)}],structuredContent:h}}catch(h){return{content:[{type:"text",text:`Error: ${h.message}`}],isError:!0}}})}let c=new Sd({enableJsonResponse:i.headers.get("Accept")?.includes("application/json")??!1});return await l.connect(c),F5(l,c,i,"mcp:dev-assets")}async function hlt(i,u,t,f){let c=dlt(t,f).find((E)=>E.name===i);if(!c)return{content:[{type:"text",text:`Tool not found: ${i}`}],isError:!0};try{let E=await c.handler(u);return{content:[{type:"text",text:JSON.stringify(E)}]}}catch(E){return{content:[{type:"text",text:E instanceof Error?E.message:String(E)}],isError:!0}}}var tL4="./data/assets",ilt=3600,llt,_lt;var vlt=g(()=>{lt();is();et();xV();AH();pE();IAi();llt=new Ju;llt.all("/",async(i)=>{let u=i.get("studioContext"),t=new URL(i.req.url),f=`${t.protocol}//${t.host}`;return j5u(i.req.raw,u,f)});_lt=llt});var Dlt={};Si(Dlt,{mountDevRoutes:()=>lL4});function lL4(i,u){i.all("/mcp/:connectionId{.*_dev-assets$}",u,async(f)=>{let l=f.get("studioContext"),c=new URL(f.req.url),E=`${c.protocol}//${c.host}`;return j5u(f.req.raw,l,E)}),i.all("/mcp/:connectionId{.*_dev-assets$}/call-tool/:toolName",u,async(f)=>{let l=f.get("studioContext"),c=new URL(f.req.url),E=`${c.protocol}//${c.host}`,$=f.req.param("toolName");if(!$)return f.json({error:"Missing tool name"},400);let w=await f.req.json(),d=await hlt($,w,l,E);if(d.isError)return f.json(d.content,500);return f.json(d.content)}),i.use("/mcp/dev-assets",u),i.route("/mcp/dev-assets",_lt);let t=new Ju;t.use("*",uh({mountPath:"/api/dev-assets"})),t.route("/",AAi({orgFromPath:!1})),i.route("/api/dev-assets",t)}var nlt=g(()=>{et();A_u();IAi();vlt()});import{sql as cL4}from"kysely";import{randomUUID as glt}from"crypto";import{z as EL4}from"zod";async function wL4(i){let u=new Date().toISOString(),t=glt(),f=pf.SELF(i.organizationId),l="registry.publish_request.created",c={requestId:i.request.id,requestedId:i.request.requested_id,title:i.request.title,status:i.request.status,createdAt:i.request.created_at,requester:{name:i.request.requester_name,email:i.request.requester_email}};await i.db.insertInto("events").values({id:t,organization_id:i.organizationId,type:"registry.publish_request.created",source:f,specversion:"1.0",subject:i.request.id,time:u,datacontenttype:"application/json",dataschema:null,data:JSON.stringify(c),cron:null,status:"pending",attempts:0,last_error:null,next_retry_at:null,created_at:u,updated_at:u}).execute();let E=await i.db.selectFrom("event_subscriptions").select(["id"]).where("organization_id","=",i.organizationId).where("enabled","=",1).where("event_type","=","registry.publish_request.created").where(($)=>$.or([$("publisher","is",null),$("publisher","=",f)])).execute();if(E.length>0)await i.db.insertInto("event_deliveries").values(E.map(($)=>({id:glt(),event_id:t,subscription_id:$.id,status:"pending",attempts:0,last_error:null,delivered_at:null,next_retry_at:null,created_at:u}))).execute();try{await cL4`SELECT pg_notify('mesh_events', ${t})`.execute(i.db)}catch{}}async function dL4(i,u){let f=(await i.selectFrom("organization").select(["id"]).where("id","=",u).execute())[0];if(f?.id)return f.id;return(await i.selectFrom("organization").select(["id"]).where("slug","=",u).execute())[0]?.id??null}async function hL4(i,u){let t=await i.selectFrom("virtual_mcp_plugin_configs").innerJoin("connections","connections.id","virtual_mcp_plugin_configs.virtual_mcp_id").select(["virtual_mcp_plugin_configs.settings as settings"]).where("connections.organization_id","=",u).where("virtual_mcp_plugin_configs.plugin_id","=",YJ).execute();for(let f of t){let l=f.settings,c=typeof l==="string"?(()=>{try{return JSON.parse(l)}catch{return{}}})():l??{};if(c.acceptPublishRequests===!0){let E=c.rateLimitWindow==="minute"?"minute":"hour",$=c.rateLimitMax,w=typeof $==="number"&&Number.isFinite($)&&$>=1?Math.floor($):Olt;return{acceptPublishRequests:!0,requireApiToken:c.requireApiToken===!0,rateLimitEnabled:c.rateLimitEnabled===void 0?Nlt:c.rateLimitEnabled===!0,rateLimitWindow:E,rateLimitMax:w}}}return{acceptPublishRequests:!1,requireApiToken:!1,rateLimitEnabled:Nlt,rateLimitWindow:$L4,rateLimitMax:Olt}}async function _L4(i,u,t){let f=t==="minute"?60000:3600000,l=new Date(Date.now()-f).toISOString(),c=await i.selectFrom("private_registry_publish_request").select((E)=>E.fn.countAll().as("count")).where("organization_id","=",u).where("created_at",">=",l).executeTakeFirst();return Number(c?.count??0)}async function vL4(i,u,t,f){let l=await i.selectFrom("private_registry_item").select(["id","title"]).where("organization_id","=",u).where((c)=>c.or([c("id","=",t),c("title","=",f)])).executeTakeFirst();return l?{id:String(l.id),title:String(l.title)}:null}function ylt(i){let{db:u,db:t}=i,f=new JQ(t),l=new XQ(t);return async(c)=>{let E=c.req.param("orgRef")??c.req.param("org");if(!E)return c.json({error:"Organization not found"},404);let $=await dL4(u,E);if(!$)return c.json({error:"Organization not found"},404);let w=await hL4(u,$);if(!w.acceptPublishRequests)return c.json({error:"Publish requests are not enabled for this registry."},403);if(w.requireApiToken){let D=c.req.header("Authorization"),n=D?.startsWith("Bearer ")?D.slice(7).trim():null;if(!n)return c.json({error:"API key required. Use Authorization: Bearer <key>"},401);if(!await l.validate($,n))return c.json({error:"Invalid API key"},401)}if(w.rateLimitEnabled){if(await _L4(t,$,w.rateLimitWindow)>=w.rateLimitMax)return c.json({error:"Too many publish requests. Please try again later.",retryAfterSeconds:w.rateLimitWindow==="minute"?60:3600},429)}let d;try{d=await c.req.json()}catch{return c.json({error:"Invalid JSON body"},400)}let h=mm0.safeParse(d);if(!h.success)return c.json({error:"Invalid publish request payload",details:EL4.treeifyError(h.error)},400);let _=await vL4(t,$,h.data.data.id,h.data.data.title);if(_)return c.json({error:"A registry item with the same id or title already exists. Please use a different name/id.",conflict:_},409);let v=await f.createOrUpdate({organization_id:$,requested_id:h.data.data.id,title:h.data.data.title,description:h.data.data.description??null,_meta:h.data.data._meta,server:h.data.data.server,requester_name:h.data.requester?.name??null,requester_email:h.data.requester?.email??null});try{await wL4({db:u,organizationId:$,request:v})}catch(D){console.warn("[private-registry] failed to emit publish-request event:",D)}return mu.capture({distinctId:h.data.requester?.email??`org:${$}`,event:"registry_publish_request_submitted",groups:{organization:$},properties:{organization_id:$,request_id:v.id,requested_id:v.requested_id,title:h.data.data.title,requester_email:h.data.requester?.email??null}}),c.json({id:v.id,requested_id:v.requested_id,status:v.status},201)}}var Nlt=!0,$L4="hour",Olt=100;var Zlt=g(()=>{z4();Pt();FR();Npi();Opi();U1()});var Tlt={};Si(Tlt,{createPublishRequestHandler:()=>ylt,createPublicMCPHandler:()=>ie0});var Blt=g(()=>{BR();Zlt()});var b4u={};Si(b4u,{watchHandler:()=>xlt,isSsoExemptPath:()=>Ilt,getProxyDispatch:()=>NL4,createApp:()=>AL4});import{readFileSync as DL4}from"fs";import{PrometheusSerializer as nL4}from"@opentelemetry/exporter-prometheus";import{DBOS as ib}from"@dbos-inc/dbos-sdk";import{oAuthDiscoveryMetadata as TL4,oAuthProtectedResourceMetadata as BL4}from"better-auth/plugins";async function gL4(i){let u=i.connect(),t;try{t=await Promise.race([u,Ult(Flt)])}catch{return u.then((f)=>f.release(!0)).catch(()=>{}),!1}try{return await Promise.race([t.query("SELECT 1"),Ult(Flt)]),t.release(),!0}catch{return t.release(!0),!1}}function Ult(i){return new Promise((u,t)=>setTimeout(()=>t(Error("pg health-check timeout")),i))}function NL4(){if(!S5u)throw Error("getProxyDispatch() called before createApp() or without NATS \u2014 proxy dispatch unavailable");return S5u}async function OL4(i,u){let{items:t}=await i.storage.connections.list(u,{where:{field:["connection_url"],operator:"like",value:`${nl0}%`},limit:1}),f=t[0];if(!f?.configuration_state)return null;return f.configuration_state.project_locator}function yL4(i){let u=new URLSearchParams;if(i){let[t,f]=i.split("/");if(t)u.set("workspace_hint",t);if(f)u.set("project_hint",f)}else u.set("auto_personal","true");return u.set("force_new","true"),u}function Ilt(i){return i.startsWith("/api/org-sso/")||i.startsWith("/api/auth/")||i.startsWith("/api/tools/management")||i.startsWith("/oauth-proxy/")||/^\/api\/[^/]+\/oauth-proxy\//.test(i)||i.startsWith(`${Ahu}/`)}async function AL4(i={}){let u=i.database??Ft(),t=!1;T1.stop().catch((H)=>{console.error("[SSEHub] Error stopping previous broadcast (HMR cleanup):",H)});let f,l,c=new Z5u,E,$,w,d,h,_=null;if(i.disableNats)E=T5u(),f={get:async()=>null,set:async()=>{},invalidate:async()=>{},teardown:()=>{}},l=new us,$={start:async()=>{},broadcast:()=>{},publishControlFrame:()=>{},stop:async()=>{}},h=void 0,w={init:async()=>{},pump:(H)=>{return(async()=>{let gi=H.getReader();try{while(!0){let{done:Yi}=await gi.read();if(Yi)break}}catch{}finally{gi.releaseLock()}})()},publishRawChunk:async()=>!1,publishDone:async()=>!1,createTailStream:async()=>null,purge:()=>{},teardown:()=>{}};else{_=x4t();let H=Ou().natsCredsPath,gi;if(H)try{gi=DL4(H,"utf8")}catch(t0){console.error(`[app] failed to read NATS_CREDS at ${H}; connecting anonymously`,t0)}_.init(Ou().natsUrls,gi?{creds:gi}:void 0);let Yi=Upi()?new noi({getJetStream:()=>_.getJetStream()}):null;Yi?.init().catch(()=>{}),f=Yi;let uu=new X6u({getJetStream:()=>_.getJetStream()});uu.init().catch(()=>{}),l=uu,E=T5u({getConnection:()=>_.getConnection()}),$=new B5u({getConnection:()=>_.getConnection()}),w=new F5u({getConnection:()=>_.getConnection(),getJetStream:()=>_.getJetStream()}),d=W4t({getConnection:()=>_.getConnection()}),h=H4t({getConnection:()=>_.getConnection()});let bi=R4t({getConnection:()=>_.getConnection()}),Au=$;$={start:(t0)=>Au.start(t0),broadcast:(t0)=>Au.broadcast(t0),publishControlFrame:(t0,Pf)=>{bi.publishControlFrame(t0,Pf).catch((g4)=>{console.warn("[TunnelControl] publishControlFrame failed (non-critical):",g4)})},stop:()=>Au.stop()},Zo0(_),_.onReady(()=>{Yi?.init().catch((t0)=>{console.error("[McpListCache] Deferred init failed:",t0)}),uu.init().catch((t0)=>{console.error("[ConnectionCircuitStore] Deferred init failed:",t0)}),E.start(),tD0(()=>_.getConnection()),w.init().catch((t0)=>{console.warn("[Decopilot] StreamBuffer init failed (late-join disabled):",t0)})})}if(ub)await ub();goi(f),L6u(l);let D={storage:new HQ(u.db),sseHub:T1},n=new V1u(D),N=new Mm(u.db),O=new P5u(N);O.start(),$.start((H)=>{GTi(H),n.execute({type:"CANCEL",taskId:H}).catch((gi)=>{console.error("[Decopilot] CancelBroadcast execute failed:",gi)})}).catch((H)=>{console.error("[Decopilot] CancelBroadcast start failed:",H)}),_?.onReady(()=>{$.start().catch((H)=>{console.error("[CancelBroadcast] Deferred start failed:",H)})}),w.init().catch((H)=>{console.warn("[Decopilot] StreamBuffer init failed, attach/late-join disabled:",H)}),ub=async()=>{await n.stopAll(),n.dispose(),O.dispose(),$.stop().catch(()=>{}),w.teardown(),f?.teardown(),c.teardown(),E.teardown(),fD0(),l.teardown(),goi(null),L6u(null)};let y=new Ju;if(y.use("*",vei({enabled:(H)=>hY(H,"debug")==="1"})),y.use("*",gzi),y.use("/*",pl0({origin:(H)=>{if(H.includes("localhost")||H.includes("127.0.0.1"))return H;return H},credentials:!0,allowMethods:["GET","POST","PUT","DELETE","OPTIONS"],allowHeaders:["Content-Type","Authorization","mcp-protocol-version"],exposeHeaders:["WWW-Authenticate"]})),y.use("*",async(H,gi)=>{if(await gi(),H.req.path.includes("/files/"))return;if(H.req.path.includes("/fs/")&&H.req.path.endsWith("/read"))return;H.header("X-Frame-Options","DENY"),H.header("Content-Security-Policy","frame-ancestors 'none'")}),!Ou().noTui)y.use("*",o4t());y.use("*",async(H,gi)=>{if(await gi(),vM(H.req.path))return;if(H.res.status>=500){let uu=await H.res.clone().text();console.error(`[5xx Response] ${H.req.method} ${H.req.path} - ${H.res.status}:`,uu)}}),y.get(D6.HEALTH,(H)=>{if(t)return H.json({status:"shutting_down"},503);return H.json({status:"ok"})}),y.get(D6.HEALTH_LIVE,(H)=>{return H.json({status:"ok"})}),y.get(D6.HEALTH_READY,async(H)=>{if(t)return H.json({status:"shutting_down"},503);let gi={};if(gi.postgres={status:await gL4(u.pool)?"up":"down"},_)gi.nats=_.isConnected()?{status:"up"}:{status:"down"};else gi.nats={status:"down"};let Yi=gi.postgres.status==="up",uu=Yi?200:503;return H.json({status:Yi?"ready":"not_ready",services:gi},uu)}),y.get(D6.METRICS,async(H)=>{try{let gi=await Zzi.collect(),Yi=ZL4.serialize(gi.resourceMetrics);return H.text(Yi,200,{"Content-Type":"text/plain; version=0.0.4; charset=utf-8"})}catch(gi){return console.error("Failed to collect metrics:",gi),H.text("# Error collecting metrics",500)}}),y.get(`${D6.DBOS_QUEUE_DEPTH_PREFIX}:queueName`,async(H)=>{let gi=H.req.param("queueName");if(!FL4.has(gi))return H.json({error:`Unknown queue: ${gi}`},404);let Yi=await ib.listQueuedWorkflows({queueName:gi,status:"ENQUEUED"});return H.json({queue_length:Yi.length})}),y.get(D6.HOSTED_RUN_PENDING,(H)=>{let{active:gi,pending:Yi,max:uu}=zj0();return H.json({pending:Yi,active:gi,max:uu})}),y.route("/api/config",E4t),y.route("/api/_reports",y4t),y.route("/report",v4t(i.clientDir)),y.route("/api/auth/custom",Ho0),y.route("/api/auth/desktop",bo0),y.all("/api/auth/admin/*",Vo0),y.all("/api/auth/*",async(H)=>{return await dt.handler(H.req.raw)});let Z=Xg0();Z.use("/.well-known/oauth-protected-resource/mcp/:connectionId",RJ),Z.use("/mcp/:connectionId/.well-known/oauth-protected-resource",RJ),y.route("/",Z),y.get("/.well-known/oauth-protected-resource/api/:org/mcp/:connectionId",ya),y.route("/",Qg0()),y.use("/oauth-proxy/:connectionId/*",RJ),y.all("/oauth-proxy/:connectionId/*",Plt);let T=async(H)=>{let Yi=await UL4()(H.req.raw),uu=await Yi.json();return Response.json(uu,Yi)};y.use("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",RJ),y.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",T);let B=async(H)=>{let Yi=await PL4()(H.req.raw),uu=await Yi.json();return Response.json(uu,Yi)};y.get("/.well-known/oauth-authorization-server/*/:gateway?/:connectionId?",B);let F=yo0({ttlMs:120000}),A=await Zg0({db:u.db,auth:dt,encryption:{key:Ou().encryptionKey},observability:{tracer:t2,meter:Bt},modelListCache:c,providerKeyCache:E,memberRoleCache:F,linkStatusProbe:d,publishLinkControlFrame:(H,gi)=>$.publishControlFrame(H,gi)});c9.set(A);let k=new tn(Ou().encryptionKey);Epu({db:u.db,baseUrl:Oh()});let I=Gwi(u.db),j=new Lm(u.db),C=m4t({db:u.db});G6u({storage:I,studioContextFactory:C}),Ecu({studioContextFactory:C,deps:{runRegistry:n,cancelBroadcast:$,streamBuffer:w,sseHub:T1},prepareLinkWorkFn:Kit,workPublisher:h}),ucu({dispatchRunFn:jit,studioContextFactory:C,deps:{runRegistry:n,cancelBroadcast:$,streamBuffer:w,sseHub:T1}});let K=new HQ(u.db),W=new gy(u.db);Fj0({getJetStream:()=>_?.getJetStream()??null,getJetStreamManager:async()=>{let H=_?.getConnection();return H?await Alt.jetstreamManager(H):null},messageParts:K.messageParts(),resolveRun:async(H)=>{let gi=await u.db.selectFrom("threads").select(["organization_id","created_by","message_storage_version","status","run_fence_token","title"]).where("id","=",H).executeTakeFirst();return gi?{orgId:gi.organization_id,createdBy:gi.created_by,version:gi.message_storage_version??1,status:gi.status,runFenceToken:gi.run_fence_token,title:gi.title??null}:null},completeRunIfNotCompleted:async(H,gi)=>{let Yi=await K.completeRunIfNotCompleted(H,gi);if(hIi(T1,gi,H,Yi),Yi)await s1u(W,H,gi);return Yi},markRunRequiresAction:async(H,gi)=>{let Yi=await K.requiresActionIfInProgress(H,gi);return hIi(T1,gi,H,Yi),Yi},markRunFailed:async(H,gi,Yi,uu)=>{let bi=await K.markRunFailed(H,gi,Yi,uu);if(hIi(T1,gi,H,bi),bi)await s1u(W,H,gi);return bi},clearSynthesizedError:async(H,gi)=>{await K.messageParts().replaceMessageParts(H,Y9(H,gi),[])},persistTitle:(H,gi,Yi)=>K.update(H,gi,{title:Yi}),onTitleUpdated:async({runId:H,orgId:gi,title:Yi})=>{let uu=await K.get(H,gi).catch(()=>null);T1.emit(gi,mh(H,uu?.status??"in_progress",{title:Yi,virtualMcpId:uu?.virtual_mcp_id??void 0,createdBy:uu?.created_by,triggerId:uu?.trigger_id,branch:uu?.branch??null,createdAt:uu?.created_at,updatedAt:uu?.updated_at}))},bumpProgress:async({runId:H,orgId:gi})=>{await K.bumpProgress(H,gi)},recordCompleted:async({runId:H,orgId:gi,distinctId:Yi,usage:uu})=>{mu.capture({distinctId:Yi,event:"chat_message_completed",groups:{organization:gi},properties:{organization_id:gi,thread_id:H,transport:"projector",input_tokens:uu.inputTokens,output_tokens:uu.outputTokens,total_tokens:uu.totalTokens}})},recordFailed:async({runId:H,orgId:gi,distinctId:Yi,reason:uu,kind:bi})=>{mu.capture({distinctId:Yi,event:"chat_message_failed",groups:{organization:gi},properties:{organization_id:gi,thread_id:H,transport:"projector",error_category:bi,error_message:uu}})},purgeRun:async(H)=>{w.purge(H)}}),QJ0({studioContextFactory:C,systemDatabaseUrl:Izi(Ou().databaseUrl,Ou().databasePgSsl),streamBuffer:w}),V4t(),$pu();let r=async(H,gi,Yi)=>{let uu=await I.findById(H,gi);if(!uu)throw Error("Automation not found");return K6u({automationId:uu.id,organizationId:uu.organization_id,triggerId:null})},Y=new WR(I,({automation:H,trigger:gi,contextMessages:Yi,idempotencyKey:uu})=>po({automationId:H.id,organizationId:H.organization_id,triggerId:gi.id,contextMessages:Yi},{idempotencyKey:uu})),ii=[Nh(),RL(),ID()];for(let H of ii)DIi(H).then(()=>{}).catch((gi)=>console.error("[monitoring] Retention cleanup failed:",gi));let di=()=>u.db.deleteFrom("apikey").where("expiresAt","<",new Date).execute().then(()=>{}).catch((H)=>console.error("[auth] Expired API key cleanup failed:",H));di(),setInterval(di,86400000).unref(),y.use("*",async(H,gi)=>{if(Dzi(H.req.path))return gi();let Yi={measure:async(bi,Au)=>{g3(H,bi);try{return await Au()}finally{pw(H,bi)}}},uu=await c9.create(H.req.raw,{timings:Yi});uu.automationRunner=r,H.set("studioContext",uu);try{await gi()}finally{let bi=uu.pendingRevalidations;if(bi.length>0)Promise.race([Promise.allSettled(bi),N0(30000)]).catch((t0)=>console.error("[studio] revalidation cleanup error:",t0))}}),y.use("/api/:org/decopilot/*",bJ),y.use("/api/:org/v1/*",bJ),y.use("/api/:org/files/*",bJ),y.use("*",async(H,gi)=>{if(Ilt(H.req.path))return gi();let Yi=H.get("studioContext");if(!Yi?.organization?.id||!Yi?.auth?.user?.id)return gi();if(!(await Yi.storage.orgSsoConfig.getByOrgId(Yi.organization.id))?.enforced)return gi();if(!await Yi.storage.orgSsoSessions.isValid(Yi.auth.user.id,Yi.organization.id))return H.json({error:"SSO authentication required for this organization"},403);return gi()});let li=new Ju;li.use("*",uh({mountPath:"/api/org-sso"})),li.route("/",rPi()),y.route("/api/org-sso",li),y.get("/api/tools/management",(H)=>{return H.json({tools:nei,grouped:UO()})}),y.use("/mcp/*",async(H,gi)=>{g3(H,"mcp");try{return await gi()}finally{pw(H,"mcp")}});let p=async(H,gi)=>{let Yi=H.var.studioContext;if(!Yi.auth.user?.id&&!Yi.auth.apiKey?.id){let uu=new URL(H.req.url),bi=H.req.header("x-forwarded-proto")?.split(",")[0]?.trim(),Au=bi?`${bi}://${uu.host}`:uu.origin;return H.res=new Response(null,{status:401,headers:{"WWW-Authenticate":`Bearer realm="mcp",resource_metadata="${Au}${uu.pathname}/.well-known/oauth-protected-resource"`}})}return await gi()};if(y.use("/mcp/:connectionId?",p),y.use("/mcp/gateway/:virtualMcpId?",p),y.use("/mcp/virtual-mcp/:virtualMcpId?",p),y.use("/mcp/self",p),eh()){let{mountDevRoutes:H}=(nlt(),BIi(Dlt));H(y,p)}let a=new Ju;a.use("*",uh({mountPath:"/mcp"})),a.route("/",xBi()),y.route("/mcp",a);let Di=new Ju;Di.use("*",uh({mountPath:"/mcp/self"})),Di.route("/",uIi()),y.route("/mcp/self",Di);let wi=new Ju;wi.use("*",uh({mountPath:"/mcp"})),wi.route("/",jBi()),y.route("/mcp",wi),y.use("/api/:org/models/*",async(H,gi)=>{g3(H,"llm_models");try{return await gi()}finally{pw(H,"llm_models")}});let ji=U_u({cancelBroadcast:$,streamBuffer:w,runRegistry:n,linkStatusProbe:d});if(y.route("/api",ji),_!=null)S5u=Q4t({getConnection:()=>_?.getConnection()??null});y.route("/api",Mft()),y.get("/api/links/me",async(H)=>{try{let gi=H.req.header("authorization")??"",Yi=/^Bearer\s+(.+)$/i.exec(gi),uu=null;if(Yi){let Au=(Yi[1]??"").trim();uu=await MPi(Au,dt.api)}else uu=H.get("studioContext")?.auth?.user?.id??null;if(!uu)return H.json({error:"unauthorized"},401);let bi=d?await d(uu):{online:!1,capabilities:[]};if(!bi.online)return H.json(null);return H.json({hostname:bi.hostname,cliVersion:bi.cliVersion})}catch(gi){return console.error("[links/me] presence probe failed; reporting offline:",gi instanceof Error?gi.message:String(gi)),H.json(null)}}),y.use("/api/:org/files/*",bJ),y.route("/api",F4t);let Ci=new Ju;Ci.use("*",uh({mountPath:"/api"})),Ci.route("/",tIi()),y.route("/api",Ci),y.route("/api",f4t);let Vi=new Ju;Vi.use("*",uh({mountPath:"/api"})),Vi.route("/",fIi({tokenStorage:j,automationEventDispatcher:Y})),y.route("/api",Vi);let ri=new Ym(u.db),vi=new Ju;vi.use("*",uh({mountPath:"/api"})),vi.route("/",FAi()),y.route("/api",vi),y.route("/api/deco-sites",iut()),y.route("/api/deco-apps",oft());let Xi=new Ju;Xi.use("*",uh({mountPath:"/api/deco-sites"})),Xi.route("/",PAi()),y.route("/api/deco-sites",Xi);let Ai=new Ju;Ai.use("*",uh({mountPath:"/api/vm-events"})),Ai.route("/",eft()),y.route("/api/vm-events",Ai);let{createPublishRequestHandler:Ni,createPublicMCPHandler:$i}=await Promise.resolve().then(() => (Blt(),Tlt)),ci={db:u.db,vault:{encrypt:(H)=>k.encrypt(H),decrypt:(H)=>k.decrypt(H)}},Ji=Ni(ci),m=$i(ci);y.use("/org/:orgRef/registry/publish-request",RJ),y.post("/org/:orgRef/registry/publish-request",Ji),y.use("/org/:orgSlug/registry/*",RJ),y.all("/org/:orgSlug/registry/*",m),y.post("/api/:org/registry/publish-request",Ji),y.all("/api/:org/registry/*",m),y.route(Ahu,ro0());let ti=Hft({kvStorage:ri,runRegistry:n,streamBuffer:w,sseHub:T1,cancelBroadcast:$,tokenStorage:j,automationEventDispatcher:Y,mountDevAssets:eh(),mcpAuth:p,oauthProxyHandler:Plt,watchHandler:xlt,betterAuthProtectedResourceHandler:T,getNatsConnection:()=>_?.getConnection()??null});return y.route("/api/:org",ti),y.notFound((H)=>{return H.json({error:"Not Found",path:H.req.path},404)}),y.onError(Rit),Object.assign(y,{markShuttingDown:()=>{t=!0},shutdown:async()=>{if(console.log("[shutdown] Stopping workers..."),await Promise.allSettled([T1.stop(),ub?Promise.resolve(ub()).finally(()=>{ub=null}):Promise.resolve()]),_)await _.drain().catch((H)=>console.error("[shutdown] NATS drain error:",H));console.log("[shutdown] Flushing telemetry..."),await t3().catch((H)=>console.error("[shutdown] Telemetry flush error:",H)),console.log("[shutdown] Closing database..."),await c2(u).catch((H)=>console.error("[shutdown] Database close error:",H)),console.log("[shutdown] Cleanup complete.")},initDbos:async()=>{await ib.registerQueue(E3,{partitionQueue:!0,concurrency:I6u,minPollingIntervalMs:x6u}),await ib.registerQueue(Jh,{partitionQueue:!0,concurrency:ccu}),await ib.registerQueue(WD,{partitionQueue:!0,concurrency:icu}),await ib.registerQueue(P2,{partitionQueue:!0,concurrency:YJ0}),await x_u(I),await Promise.allSettled(["automations-gate","automations-global"].map((H)=>ib.deleteQueue(H))),await k6u(u.pool),Rw0().catch((H)=>{console.error("[studio-pack-backfill] failed:",H)}),wpu().catch((H)=>{console.error("[org-fs] public-sets boot sync kick failed:",H)})}})}var Alt,Flt=5000,S5u=null,ub=null,Plt=async(i)=>{let u=i.req.param("connectionId");if(!u)return i.json({error:"Missing connectionId"},400);let t=i.req.path.split("/").filter(Boolean),f=t[t.length-1],l=i.get("studioContext");if(!l)l=await c9.create(i.req.raw),i.set("studioContext",l);let c=i.req.param("org")?l.organization?.id:void 0,E=await l.storage.connections.findById(u,c);if(!E?.connection_url)return i.json({error:"Connection not found"},404);let $=await Fz(E.connection_url),w,d=new URL(E.connection_url),_=(typeof E.metadata?.oauthResource==="string"&&E.metadata.oauthResource.length>0?E.metadata.oauthResource:void 0)??E.connection_url;if($.ok)w=(await $.json()).authorization_servers?.[0];if(!w)w=d.origin;let v=await Za(w);if(!v.ok)return i.json({error:"Failed to get auth server metadata"},502);let D=await v.json(),n;if(f==="authorize")n=D.authorization_endpoint;else if(f==="token")n=D.token_endpoint;else if(f==="register")n=D.registration_endpoint;if(!n)return i.json({error:`Unknown OAuth endpoint: ${f}`},404);let N=new URL(n),O=new URL(i.req.url);if(N.search=O.search,f==="authorize"){let C=N.searchParams.get("redirect_uri");if(C){let K=Ou().baseUrl??O.origin;try{let W=new URL(C),r=new URL(K);if(!(W.origin===r.origin||W.hostname==="localhost"))return i.json({error:"invalid_request",error_description:"redirect_uri is not allowed"},400)}catch{return i.json({error:"invalid_request",error_description:"redirect_uri is malformed"},400)}N.searchParams.set("redirect_uri",C)}if(N.searchParams.has("resource"))N.searchParams.set("resource",_);if(gl0(E.connection_url))try{let K=await OL4(l,E.organization_id),W=yL4(K);for(let[r,Y]of W)N.searchParams.set(r,Y)}catch(K){console.warn("[oauth-proxy] Failed to get smart OAuth params, proceeding without:",K)}return i.redirect(N.toString(),302)}let y={Accept:i.req.header("Accept")||"application/json"},Z=i.req.header("Content-Type");if(Z)y["Content-Type"]=Z;let T=i.req.header("Authorization");if(T)y.Authorization=T;let B,F=null,A=null;if(i.req.method!=="GET"&&i.req.method!=="HEAD")if(f==="token"&&Z?.includes("application/x-www-form-urlencoded")){if(T?.toLowerCase().startsWith("basic "))try{let Y=atob(T.slice(6).trim()),ii=Y.indexOf(":");if(ii!==-1){let di=decodeURIComponent(Y.slice(0,ii)),li=decodeURIComponent(Y.slice(ii+1));F=di||null,A=li||null}}catch{}let C=await i.req.formData();if(C.has("resource"))C.set("resource",_);let K=C.get("client_id"),W=C.get("client_secret");if(typeof K==="string"&&K)F=K;if(typeof W==="string"&&W)A=W;let r=new URLSearchParams;for(let[Y,ii]of C.entries())r.append(Y,ii.toString());B=r.toString()}else if(f==="register"&&Z?.toLowerCase().includes("application/json")){let C=await l.db.selectFrom("organization").select(["id","slug","name"]).where("id","=",E.organization_id).executeTakeFirst(),K=await i.req.text(),W={};try{W=K?JSON.parse(K):{}}catch{B=K}let r=typeof W==="object"&&W!==null&&!Array.isArray(W);if(B===void 0&&!r)B=K;if(B===void 0){let Y=W,ii=Y.metadata&&typeof Y.metadata==="object"?Y.metadata:{};Y.metadata={...ii,organization_id:E.organization_id,...C?.slug?{organization_slug:C.slug}:{},...C?.name?{organization_name:C.name}:{}},B=JSON.stringify(Y),y["Content-Type"]="application/json"}}else B=i.req.raw.body??void 0;let k=await fetch(N.toString(),{method:i.req.method,headers:y,body:B,duplex:"half",redirect:"manual"}),I=new Headers,j=["connection","keep-alive","transfer-encoding","content-encoding","content-length"];for(let[C,K]of k.headers.entries())if(!j.includes(C.toLowerCase()))I.set(C,K);if(f==="token"&&k.ok){let C=await k.text();try{let K=JSON.parse(C);if(typeof K.access_token==="string"&&K.access_token){let W=typeof K.expires_in==="number"?new Date(Date.now()+K.expires_in*1000):null,r=null;try{r=await Uz(E.connection_url)??n}catch{r=n}let Y={connectionId:u,accessToken:K.access_token,refreshToken:typeof K.refresh_token==="string"?K.refresh_token:null,scope:typeof K.scope==="string"?K.scope:null,expiresAt:W,clientId:F,clientSecret:A,tokenEndpoint:r};await new ml(l.db,l.vault).upsert(Y)}}catch(K){console.error("[oauth-proxy] failed to persist downstream token:",K)}return new Response(C,{status:k.status,statusText:k.statusText,headers:I})}return new Response(k.body,{status:k.status,statusText:k.statusText,headers:I})},xlt=async(i)=>{let u=i.var.studioContext;if(!(u.auth.user?.id??u.auth.apiKey?.userId))return i.json({error:"Unauthorized"},401);let f=u.organization?.id;if(!f)return i.json({error:"organization id missing"},400);let l=i.req.query("types"),c=l?l.split(",").map(($)=>$.trim()).filter(Boolean):null,E=crypto.randomUUID();return th(i,async($)=>{if(await $.writeSSE({event:"connected",data:JSON.stringify({listenerId:E,organizationId:f,typePatterns:c,connectedAt:new Date().toISOString()})}),!T1.add({id:E,organizationId:f,typePatterns:c?.length?c:null,push:(h)=>{$.writeSSE({id:h.id,event:h.type,data:JSON.stringify(h)}).catch(()=>{T1.remove(f,E)})}})){await $.writeSSE({event:"error",data:JSON.stringify({error:"Too many connections",message:"SSE connection limit reached. Try again later."})});return}let d=setInterval(()=>{$.writeSSE({event:"keepalive",data:""}).catch(()=>{clearInterval(d)})},30000);await new Promise((h)=>{$.onAbort(()=>{clearInterval(d),T1.remove(f,E),h()})})})},ZL4,FL4,UL4=()=>BL4(dt),PL4=()=>TL4(dt);var C4u=g(()=>{O4();lt();dpu();n6();$Y();Pt();et();kEi();i10();Dei();Nd();Oa();Ohu();cE();Gl();z4();Phu();Co0();mo0();Ghu();zit();P_u();Z_();O3i();A_u();bit();I_u();Rft();qft();aft();S_u();sft();kBi();Ta();l4t();SBi();u5u();$4t();D4t();Z4t();U4t();i5u();svu();Gli();fr();k4t();td();ewi();Hm();Y6u();G4t();S4t();L4t();Y4t();z4t();b4t();r1u();C4t();Wpi();fdi();bn();Rpi();r4t();B$i();A5u();bw();k_u();dH();o1u();M1u();B$i();Z_u();Epi();$pi();e4t();_Y();s4t();oJ();Ohu();FH();jTi();Alt=G(y2(),1);ZL4=new nL4,FL4=new Set([E3,Jh,WD,P2])});var Slt={};Si(Slt,{resolveClientDir:()=>KL4,resolveAssetPathWithTraversalCheck:()=>jlt,isPathWithinDirectory:()=>Glt,createAssetHandler:()=>JL4});import{resolve as tii,dirname as IL4,join as xL4,extname as kL4,basename as GL4,sep as klt}from"path";function jL4(i,u){if(i===u||GL4(i)==="index.html")return{"Cache-Control":"no-cache"};if(i.includes(`${klt}assets${klt}`))return{"Cache-Control":"public, max-age=31536000, immutable"};return{}}function Glt(i,u){let t=tii(u),f=tii(i);return f===t||f.startsWith(t+"/")}function jlt({requestPath:i,clientDir:u}){let t=i.startsWith("/")?i.slice(1):i,f=tii(u,t);if(!Glt(f,u))return null;return f}function KL4(i,u="../client"){let t=new URL(i),f=IL4(t.pathname);return tii(f,u)}function JL4(i={}){let{env:u="production",clientDir:t=SL4,isServerPath:f=()=>!1}=i;if(u==="development")return async function(c){return null};return async function(c){if(c.method!=="GET")return null;let E=new URL(c.url),$;try{$=decodeURIComponent(E.pathname)}catch{return null}if(f($))return null;let w=jlt({requestPath:$,clientDir:t});if(!w)return null;let d=xL4(w,"index.html"),h=tii(t,"index.html"),_=c.headers.get("accept"),D=_?.includes("text/html")||_?.includes("*/*")&&["",".html"].includes(kL4(w))?[d,h]:[];for(let n of[w,...D])try{let N=Bun.file(n);if(await N.exists())return new Response(N,{headers:jL4(n,h)})}catch{}if($.includes("/assets/"))return new Response("Not Found",{status:404,headers:{"Cache-Control":"no-store"}});return null}}var SL4="./dist/client";var Klt=()=>{};var Jlt={};Si(Jlt,{tryUpgradePreviewWs:()=>HL4,tryHandlePreviewHttp:()=>zL4,previewWebSocketHandler:()=>RL4,parsePreviewBaseDomain:()=>QL4,isPreviewWsData:()=>nIi,extractHandleFromHost:()=>K5u});function WL4(i){if(i.method!=="GET")return!1;return(i.headers.get("accept")??"").includes("text/html")}function YL4(){return new Response(LL4,{status:503,headers:{"content-type":"text/html; charset=utf-8","cache-control":"no-store","retry-after":"1","access-control-allow-origin":"*"}})}function QL4(i){if(!i||i.trim()==="")return null;let u=i.includes("{handle}")?i.replace("{handle}","__handle__"):i,t;try{t=new URL(u)}catch{return null}let f=t.hostname;if(i.includes("{handle}")){let l=f.indexOf(".");if(l<=0||l===f.length-1)return null;return f.slice(l+1)}return f}function K5u(i,u){if(!i||!u)return null;let t=i.indexOf(":"),f=(t>=0?i.slice(0,t):i).toLowerCase(),c=`.${u.toLowerCase().replace(/^\.+|\.+$/g,"")}`;if(!f.endsWith(c))return null;let E=f.slice(0,f.length-c.length);if(!E||E.includes("."))return null;return E}async function zL4(i,u){let t=K5u(i.headers.get("host"),u.baseDomain);if(!t)return null;let f=await u.getRunner();if(!f)return lii(503,"preview proxy not configured");let l=await f.proxyPreviewRequest(t,i);if(l.headers.get(kK)&&WL4(i))return YL4();return l.headers.delete(kK),l}function lii(i,u){return new Response(JSON.stringify({error:u}),{status:i,headers:{"content-type":"application/json","access-control-allow-origin":"*"}})}function nIi(i){return typeof i==="object"&&i!==null&&i.kind==="preview"}async function HL4(i,u,t){if((i.headers.get("upgrade")??"").toLowerCase()!=="websocket")return null;let f=K5u(i.headers.get("host"),t.baseDomain);if(!f)return null;let l=await t.getRunner();if(!l)return lii(503,"preview proxy not configured");let c=await l.resolvePreviewUpstreamUrl(f);if(!c)return lii(404,"sandbox not found");let E=new URL(i.url);if(E.pathname.startsWith("/_sandbox")||E.pathname.startsWith("/_decopilot_vm"))return lii(404,"not found");let $=`${c.replace(/^http/,"ws")}${E.pathname}${E.search}`,w=i.headers.get("sec-websocket-protocol"),d=w?w.split(",").map((v)=>v.trim()).filter(Boolean):[],h={kind:"preview",upstreamUrl:$,upstreamProtocols:d,pending:[],upstream:null,closed:!1};if(!u.upgrade(i,{data:h}))return lii(426,"upgrade failed");return}function fii(i,u,t,f){if(u.closed)return;u.closed=!0;try{i.close(t,f)}catch{}try{u.upstream?.close()}catch{}}var XL4=256,LL4='<!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>',RL4;var Xlt=g(()=>{z4u();RL4={open(i){let u=i.data;if(!nIi(u))return;let t;try{t=u.upstreamProtocols.length>0?new WebSocket(u.upstreamUrl,u.upstreamProtocols):new WebSocket(u.upstreamUrl)}catch(f){console.warn(`[preview-ws] failed to dial upstream ${u.upstreamUrl}: ${f instanceof Error?f.message:String(f)}`),fii(i,u,1011,"upstream connect failed");return}t.binaryType="arraybuffer",u.upstream=t,t.addEventListener("open",()=>{while(u.pending.length>0){let f=u.pending.shift();if(f!==void 0)t.send(f)}}),t.addEventListener("message",(f)=>{if(u.closed)return;i.send(f.data)}),t.addEventListener("close",(f)=>{fii(i,u,f.code||1000,f.reason||"")}),t.addEventListener("error",()=>{fii(i,u,1011,"upstream error")})},message(i,u){let t=i.data;if(!nIi(t))return;let f=t.upstream;if(f&&f.readyState===WebSocket.OPEN){f.send(u);return}if(t.pending.length>=XL4){fii(i,t,1011,"preview ws backlog overflow");return}t.pending.push(u)},close(i){let u=i.data;if(!nIi(u))return;fii(i,u,1000,"")}}});var Wlt={};Si(Wlt,{bootstrapDevLinkSession:()=>aL4});import{existsSync as bL4}from"fs";import{chmod as CL4,mkdir as ML4,rename as qL4,writeFile as VL4}from"fs/promises";import{dirname as rL4,join as Llt}from"path";function mL4(i){return Llt(i,"dev-link")}function eL4(i){let u=process.env.DEV_LINK_SESSION_PATH;if(u&&u.trim()!=="")return u;return Llt(mL4(i),"session.json")}async function aL4(i,u){let t=eL4(i),f=Ft().db,l=q3()?await eo():await f.selectFrom("user").select(["id","email","name"]).orderBy("createdAt","desc").executeTakeFirst();if(!l?.id)return null;if(bL4(t))try{let d=await Bun.file(t).json(),h=d.user?.sub,_=d.accessToken;if(h===l.id&&typeof _==="string"){if(await dt.api.verifyApiKey({body:{key:_}}).then((D)=>D?.valid===!0).catch(()=>!1))return{path:t,userSub:h}}}catch{}let c=null;try{c=await dt.api.createApiKey({body:{name:"dev-link (auto-minted by bun run dev)",userId:l.id,permissions:{"*":["*"]},expiresIn:2592000,rateLimitEnabled:!1}})}catch(w){return console.warn("[dev-link] failed to mint API key:",w instanceof Error?w.message:String(w)),null}if(!c?.key)return null;let E={target:u,clientId:"dev-link",user:{sub:l.id,...l.email?{email:l.email}:{},...l.name?{name:l.name}:{}},accessToken:c.key,createdAt:new Date().toISOString()};await ML4(rL4(t),{recursive:!0});let $=`${t}.tmp`;return await VL4($,JSON.stringify(E,null,2),{mode:384}),await CL4($,384),await qL4($,t),{path:t,userSub:l.id}}var Ylt=g(()=>{cE();Nd();r9()});var gW4={};import{existsSync as lW4}from"fs";function blt(i,u){if(!u)return i;let t=new URL(i);if(!t.searchParams.has("sslmode"))t.searchParams.set("sslmode","verify-full");return t.toString()}function $W4(i){let u=new Headers(i.headers);for(let[t,f]of Object.entries(EW4))u.set(t,f);return new Response(i.body,{status:i.status,statusText:i.statusText,headers:u})}async function nW4(i){let u;try{u=await oL4.create({systemDatabaseUrl:blt(Sw.databaseUrl,Sw.databasePgSsl),systemDatabaseSchemaName:"dbos"});let t=await u.listWorkflows({status:"PENDING",queueName:Jh,executorId:i,loadInput:!1,loadOutput:!1});if(t.length===0){console.log(`[shutdown] no in-flight thread-gate gates to hand off (executor ${i})`);return}let f=t.map((l)=>l.workflowID);await u.resumeWorkflows(f,{queueName:Jh}),console.log(`[shutdown] re-enqueued ${f.length} in-flight thread-gate gate(s) for re-adoption by a live executor (from ${i}):`,f)}catch(t){console.error("[shutdown] thread-gate handoff failed:",t)}finally{await u?.destroy().catch(()=>{})}}async function NIi(i){if(Rlt)return;Rlt=!0,console.log(`
88555
88555
  [shutdown] Received ${i}, shutting down gracefully...`);let u=Number(process.env.SHUTDOWN_GRACE_SECONDS??60)*1000,t=Math.max(u-5000,1e4),f=setTimeout(()=>{console.error(`[shutdown] Timed out after ${t}ms, forcing exit.`),process.exit(1)},t);f.unref?.();let l=0;try{DW4(),gIi.markShuttingDown();let c=MRu(Sw.dispatchRole,t,process.env.SHUTDOWN_DRAIN_MS);await N0(c),await vW4.stop(!0);let E=cii.executorID;await cii.shutdown(),await nW4(E),await gIi.shutdown()}catch(c){console.error("[shutdown] Error during shutdown:",c),l=1}clearTimeout(f),process.exit(l)}var Sw,cii,oL4,sL4,pL4,iW4,uW4,tW4,Clt,fW4,Qlt,Mlt,cW4,EW4,wW4,dW4,hW4,J5u,X5u,_W4,qlt,zlt,gIi,L5u,Hlt,W5u=5,Y5u=0,vW4,DW4,Rlt=!1;var Vlt=g(async()=>{O4();zsu();lt();Uli();Gl();Vsu();Sw=Ou();Bbu();({DBOS:cii,DBOSClient:oL4}=await import("@dbos-inc/dbos-sdk"));sL4=[E3,Jh,WD,P2],pL4=Sw.dispatchRole==="worker"?sL4:Sw.dispatchRole==="api"?[]:void 0;cii.setConfig(Qsu({systemDatabaseUrl:blt(Sw.databaseUrl,Sw.databasePgSsl),poolSize:Number(process.env.DBOS_POOL_SIZE??5),executorID:Sw.podName,listenQueues:pL4}));({createApp:iW4}=await Promise.resolve().then(() => (C4u(),b4u))),{isServerPath:uW4}=await Promise.resolve().then(() => (Gli(),lbu)),{createAssetHandler:tW4,resolveClientDir:Clt}=await Promise.resolve().then(() => (Klt(),Slt)),fW4=Sw.port,Qlt=Clt(import.meta.url,"../client"),Mlt=lW4(Qlt)?Qlt:Clt(import.meta.url,"../dist/client"),cW4=tW4({clientDir:Mlt,isServerPath:uW4}),EW4={"X-Frame-Options":"DENY","Content-Security-Policy":"frame-ancestors 'none'"};({parsePreviewBaseDomain:wW4,tryHandlePreviewHttp:dW4,tryUpgradePreviewWs:hW4,previewWebSocketHandler:J5u,isPreviewWsData:X5u}=await Promise.resolve().then(() => (Xlt(),Jlt))),{getOrInitSharedRunner:_W4}=await Promise.resolve().then(() => (rz(),iA0)),qlt=wW4(process.env.STUDIO_SANDBOX_PREVIEW_URL_PATTERN),zlt={baseDomain:qlt??"",getRunner:_W4},gIi=await iW4({clientDir:Mlt}),L5u=process.env.DBOS_CONDUCTOR_KEY?.trim(),Hlt=process.env.DBOS_CONDUCTOR_URL?.trim();await cii.launch({...L5u?{conductorKey:L5u}:{},...L5u&&Hlt?{conductorURL:Hlt}:{}});console.log(`[dbos] application version: ${cii.applicationVersion}`);await Rl(async()=>{Y5u++;try{return await gIi.initDbos()}catch(i){let u=Y5u>=W5u?"giving up":"retrying";throw console.warn(`[dbos] initDbos attempt ${Y5u}/${W5u} failed, ${u}`,i),i}},{maxAttempts:W5u,minTimeout:1000,maxTimeout:1e4,jitter:0.5});if(!Sw.isCli){let{bannerLines:i}=await Promise.resolve().then(() => (vW(),cq));console.log("");for(let u of i())console.log(u)}vW4=Bun.serve({idleTimeout:0,port:fW4,hostname:"0.0.0.0",fetch:async(i,u)=>{if(qlt){let f=await hW4(i,u,zlt);if(f===void 0)return;if(f)return f;let l=await dW4(i,zlt);if(l)return l}let t=await cW4(i);if(t)return $W4(t);return gIi.fetch(i,{server:u})},websocket:{open(i){if(X5u(i.data))J5u.open(i)},message(i,u){if(X5u(i.data))J5u.message(i,u)},close(i){if(X5u(i.data))J5u.close(i)}},development:!1}),DW4=qsu();if(Sw.localMode)Promise.resolve().then(() => (r9(),$Bi)).then(async({seedLocalMode:i,markSeedComplete:u})=>{try{let t=await i();if(process.env.DEV_LINK_SESSION_PATH)try{let{bootstrapDevLinkSession:f}=await Promise.resolve().then(() => (Ylt(),Wlt)),l=Sw.baseUrl??`http://localhost:${Sw.port}`,c=await f(Sw.dataDir,l);if(c)console.log(`[dev-link] session ready at ${c.path} (userSub=${c.userSub})`);else console.warn("[dev-link] no admin user yet \u2014 skipping session bootstrap. The auto-spawned link will refuse to start until an admin exists.")}catch(f){console.error("[dev-link] bootstrap failed:",f)}}catch(t){console.error("Failed to seed local mode:",t)}finally{u()}}).catch(async(i)=>{console.error("Failed to load local-mode module:",i);try{let{markSeedComplete:u}=await Promise.resolve().then(() => (r9(),$Bi));u()}catch{}});process.on("SIGTERM",()=>NIi("SIGTERM"));process.on("SIGINT",()=>NIi("SIGINT"));process.on("SIGHUP",()=>NIi("SIGHUP"));process.on("unhandledRejection",(i)=>{console.error("[process] Unhandled rejection:",i)});process.on("uncaughtException",(i)=>{console.error("[process] Uncaught exception:",i),NIi("uncaughtException")})});var Q5u={};Si(Q5u,{startServer:()=>OW4,interceptConsoleForTui:()=>NW4});function NW4(){let{log:i,warn:u,error:t}=console;function f(...l){let c=l.map((E)=>typeof E==="string"?E:Bun.inspect(E)).join(" ");for(let E of c.split(`
88556
88556
  `)){let $=Tq(E).trim();if(!$)continue;Nv({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:$})}}return console.log=f,console.warn=f,console.error=f,Zci(!0),()=>{console.log=i,console.warn=u,console.error=t,Zci(!1)}}async function OW4(i){let u=await uO(Number(i.port)),{settings:t,services:f}=await yci({port:String(u),home:i.home,localMode:i.localMode,skipMigrations:i.skipMigrations,noTui:i.noTui});for(let l of f)gv({name:l.name,status:"ready",port:l.port});yq(),await Vlt().then(() => gW4),Zq(`http://localhost:${t.port}`)}var z5u=g(()=>{Dqi();iO();Oqi()});import{parseArgs as yW4}from"util";import{homedir as Eii}from"os";import{join as OIi}from"path";function $ii(i){if(i.noTui)return!1;return i.isTty===!0}var{values:n4,positionals:tb}=yW4({args:process.argv.slice(2),options:{port:{type:"string",short:"p",default:process.env.PORT||"3000"},"vite-port":{type:"string",default:process.env.VITE_PORT||"4000"},home:{type:"string"},"base-url":{type:"string"},help:{type:"boolean",short:"h",default:!1},version:{type:"boolean",short:"v",default:!1},"skip-migrations":{type:"boolean",default:!1},"no-tui":{type:"boolean",default:!1},"no-local-mode":{type:"boolean",default:!1},"local-sandbox-provider":{type:"boolean",default:!1},hot:{type:"boolean",default:!1},prune:{type:"boolean",default:!1},target:{type:"string"},env:{type:"string",short:"e"},"dry-run":{type:"boolean",default:!1},batch:{type:"string"},limit:{type:"string"},org:{type:"string"}},allowPositionals:!0});if(n4.help)console.log(`
88557
88557
  Deco CMS \u2014 Open-source control plane for your AI agents