decocms 4.94.4 → 4.94.5

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 (237) hide show
  1. package/dist/client/assets/{AlertCircle-BQkvsRKw.js → AlertCircle-Dw7zeKP9.js} +1 -1
  2. package/dist/client/assets/{AreaChart-CiqI2cE9.js → AreaChart-DfdXaI5s.js} +1 -1
  3. package/dist/client/assets/{ArrowRight-DV4PAhpO.js → ArrowRight-C8okK_BV.js} +1 -1
  4. package/dist/client/assets/{ArrowUp-BSM8WSfI.js → ArrowUp-DRZydp5F.js} +1 -1
  5. package/dist/client/assets/{ArrowUpRight-CrvKR9TZ.js → ArrowUpRight-BUI7uDHA.js} +1 -1
  6. package/dist/client/assets/{Check-uB-cn--2.js → Check-B_jS3XeT.js} +1 -1
  7. package/dist/client/assets/{CheckCircle-BpugEygP.js → CheckCircle-DJBrWgx6.js} +1 -1
  8. package/dist/client/assets/{ChevronDown-DPlR49SE.js → ChevronDown-B1VKMGuI.js} +1 -1
  9. package/dist/client/assets/{ChevronRight-BY1SXsL9.js → ChevronRight-CSq4sybR.js} +1 -1
  10. package/dist/client/assets/{ChevronUp-SI4aqASL.js → ChevronUp-dMsIwkR0.js} +1 -1
  11. package/dist/client/assets/{Copy01-D8l_LBve.js → Copy01-CL2-usqI.js} +1 -1
  12. package/dist/client/assets/{DotsVertical-iuAP93hV.js → DotsVertical-f2srDRP4.js} +1 -1
  13. package/dist/client/assets/{Eye-CSSsYVqd.js → Eye-Cyk7za1C.js} +1 -1
  14. package/dist/client/assets/{FilterLines-Cpf8D3rC.js → FilterLines-U4nYk1DO.js} +1 -1
  15. package/dist/client/assets/{Globe01-BTQ71MeP.js → Globe01-CGaEfSoc.js} +1 -1
  16. package/dist/client/assets/{Globe04-B4gp4SEJ.js → Globe04-C6SZq-SZ.js} +1 -1
  17. package/dist/client/assets/{HardDrive--wmD-qtB.js → HardDrive-BSIcJBsE.js} +1 -1
  18. package/dist/client/assets/{Image01-BzLaZqph.js → Image01-DQhRnzq9.js} +1 -1
  19. package/dist/client/assets/{Key01-BrszQGZu.js → Key01-CVuUTPAD.js} +1 -1
  20. package/dist/client/assets/{LayoutLeft-zh7VhB54.js → LayoutLeft-7uhmfXdL.js} +1 -1
  21. package/dist/client/assets/{LinkExternal01-CoWh3bfW.js → LinkExternal01-BKQ-ay4t.js} +1 -1
  22. package/dist/client/assets/{Monitor01-Ce3W9HbN.js → Monitor01-DRpwqkmw.js} +1 -1
  23. package/dist/client/assets/{Package-XvJeGSoB.js → Package-Z-eRL9A2.js} +1 -1
  24. package/dist/client/assets/{Palette-BSXLbDlI.js → Palette-DFWPx0Kx.js} +1 -1
  25. package/dist/client/assets/{Play-CB9OrtxF.js → Play-BXSsBEcR.js} +1 -1
  26. package/dist/client/assets/{Plus-BBy7xlAR.js → Plus-BcIREAio.js} +1 -1
  27. package/dist/client/assets/{SearchLg-CeUdtEUv.js → SearchLg-BW4VwpeV.js} +1 -1
  28. package/dist/client/assets/{SearchMd-Cp5dPlTl.js → SearchMd-eZLAygd0.js} +1 -1
  29. package/dist/client/assets/{Settings02-oan-0R8e.js → Settings02-w_qF2z71.js} +1 -1
  30. package/dist/client/assets/{Shield01-D9o_XV7Y.js → Shield01-Cj5iTxyo.js} +1 -1
  31. package/dist/client/assets/{Star01-mCCX2y24.js → Star01-C0Ev2LXz.js} +1 -1
  32. package/dist/client/assets/{Stars01-DlXzTxo4.js → Stars01-BSpNLCGu.js} +1 -1
  33. package/dist/client/assets/{Stars02-BH-C2J84.js → Stars02-B3hH1F1w.js} +1 -1
  34. package/dist/client/assets/{Sun--2cssdQU.js → Sun-i_-g3s3O.js} +1 -1
  35. package/dist/client/assets/{SwitchHorizontal01-BiKVJmdg.js → SwitchHorizontal01-Ci84Aife.js} +1 -1
  36. package/dist/client/assets/{Tool01-CMb_61Vd.js → Tool01-DHHdz5KR.js} +1 -1
  37. package/dist/client/assets/{Tool02-CmQV2_rP.js → Tool02-BCOyNZ1K.js} +1 -1
  38. package/dist/client/assets/{Trash01-CMGY4phP.js → Trash01-CFM2yQyV.js} +1 -1
  39. package/dist/client/assets/{TrendUp01-d0iPYEwl.js → TrendUp01-C7snmTMp.js} +1 -1
  40. package/dist/client/assets/{Upload01-Df6Zf0A2.js → Upload01-DnBnoLr6.js} +1 -1
  41. package/dist/client/assets/{User01-CdX8Dg9V.js → User01-wOfHrP5O.js} +1 -1
  42. package/dist/client/assets/{Users01-Dow2EvwZ.js → Users01-Dk0U_FR-.js} +1 -1
  43. package/dist/client/assets/{Users03-CObt1yJu.js → Users03-BpbW8oxM.js} +1 -1
  44. package/dist/client/assets/{X-GAJIINE6.js → X-C4L6wx48.js} +1 -1
  45. package/dist/client/assets/{XCircle-C8YL9fZc.js → XCircle-C_4F8sta.js} +1 -1
  46. package/dist/client/assets/{XClose-DxkOpW9r.js → XClose-CX6-oNhW.js} +1 -1
  47. package/dist/client/assets/{Zap-Dr9kjeAp.js → Zap-BQnAktMa.js} +1 -1
  48. package/dist/client/assets/{ZapSquare-CqoIG_1J.js → ZapSquare-CckSAk7y.js} +1 -1
  49. package/dist/client/assets/{ZoomOut-CZGAN5Qk.js → ZoomOut-T41GS7yB.js} +1 -1
  50. package/dist/client/assets/{access-gate-D74A7MJ5.js → access-gate-BCyc-mAL.js} +1 -1
  51. package/dist/client/assets/{add-section-modal-YUuXubtr.js → add-section-modal-DnKP5H31.js} +1 -1
  52. package/dist/client/assets/{agent-icon-V_nnZvGf.js → agent-icon-BmxgnjJ6.js} +1 -1
  53. package/dist/client/assets/{agents-list-7RtNO6-u.js → agents-list-CMoNazYv.js} +1 -1
  54. package/dist/client/assets/{ai-providers-DUZlAje2.js → ai-providers-D2Md1Y6F.js} +1 -1
  55. package/dist/client/assets/{alert-DOYL_6uy.js → alert-CVkJjhw-.js} +1 -1
  56. package/dist/client/assets/{alert-dialog-D1AHYWbg.js → alert-dialog-C-EE9UEQ.js} +1 -1
  57. package/dist/client/assets/{app-editor-BpLBXgnW.js → app-editor-BReaCXaS.js} +1 -1
  58. package/dist/client/assets/{auth-BzOvRgAr.js → auth-BwD3M2eG.js} +1 -1
  59. package/dist/client/assets/{auth-catchall-48X_-5zQ.js → auth-catchall-C0kzDpkA.js} +1 -1
  60. package/dist/client/assets/{auth-entry-BOO54G0c.js → auth-entry-CrJzZR--.js} +1 -1
  61. package/dist/client/assets/{auth-split-layout-DHDwGl2b.js → auth-split-layout-CzPOl37s.js} +1 -1
  62. package/dist/client/assets/{authenticate-and-persist-oauth-DM_MM8qD.js → authenticate-and-persist-oauth-D_OT9T5O.js} +1 -1
  63. package/dist/client/assets/{automation-list-row-DnHlF7jW.js → automation-list-row-BjRE-j1m.js} +1 -1
  64. package/dist/client/assets/{automation-runs-Dhh9F1wb.js → automation-runs-Dd_EZL_O.js} +1 -1
  65. package/dist/client/assets/{automations-BCa_O2rh.js → automations-CHRiW7yF.js} +1 -1
  66. package/dist/client/assets/{autosend-DCIcZHMR.js → autosend-DN_fW_bE.js} +1 -1
  67. package/dist/client/assets/{avatar-onn7iSPI.js → avatar-DMSwq33b.js} +1 -1
  68. package/dist/client/assets/{badge-BdWavbGf.js → badge-Dcz1sFUO.js} +1 -1
  69. package/dist/client/assets/{block-document-CuBKvTpK.js → block-document-BC4hT5A_.js} +1 -1
  70. package/dist/client/assets/{brand-context-BbEWshdh.js → brand-context-D9tU4S3E.js} +1 -1
  71. package/dist/client/assets/{buckets-ulpH2PRV.js → buckets-BGcyVl-k.js} +1 -1
  72. package/dist/client/assets/{bulk-category-panel-D22kDyoT.js → bulk-category-panel-BME1i0B6.js} +1 -1
  73. package/dist/client/assets/{calendar-DIc6NN8g.js → calendar-CXuMi9-l.js} +1 -1
  74. package/dist/client/assets/{capability-load-error-t-0M1SJi.js → capability-load-error-DOIvL-W6.js} +1 -1
  75. package/dist/client/assets/{card-CFOoBzML.js → card-Civfzpqz.js} +1 -1
  76. package/dist/client/assets/{category-editor-BFAsSK44.js → category-editor-UYLGB2Ef.js} +1 -1
  77. package/dist/client/assets/{chat-context-l44KO2tT.js → chat-context-DzkbZ-tA.js} +1 -1
  78. package/dist/client/assets/{checkbox-COLwBl1V.js → checkbox-Sa6CIIjF.js} +1 -1
  79. package/dist/client/assets/{cli-auth-success-De8LJaYn.js → cli-auth-success-HpOx-Pgq.js} +1 -1
  80. package/dist/client/assets/{collection-detail-7ig2PKXf.js → collection-detail-CDB_4JWt.js} +1 -1
  81. package/dist/client/assets/{collection-display-button-CmynKF9D.js → collection-display-button-9sb8MZp7.js} +1 -1
  82. package/dist/client/assets/{collection-search-T8Ry3Hs3.js → collection-search-D3nGgdHV.js} +1 -1
  83. package/dist/client/assets/{collection-table-wrapper-Cl5Js5Wr.js → collection-table-wrapper-BJKyadnP.js} +1 -1
  84. package/dist/client/assets/{collection-tabs-A6OXZHcR.js → collection-tabs-B_dA98pX.js} +1 -1
  85. package/dist/client/assets/{command-DpRW-tRe.js → command-8EP4MxeL.js} +1 -1
  86. package/dist/client/assets/{commerce-onboarding-DQ0j4aYr.js → commerce-onboarding-CZQn3DJZ.js} +1 -1
  87. package/dist/client/assets/{companions-core-DU0nhEot.js → companions-core-XekCeSMI.js} +1 -1
  88. package/dist/client/assets/{connect-BuRsYpsg.js → connect-B9GQRXl5.js} +1 -1
  89. package/dist/client/assets/{connect-desktop-dialog-CxNNhC-h.js → connect-desktop-dialog-PYy_xzBr.js} +1 -1
  90. package/dist/client/assets/{connection-card-CEFAd8TB.js → connection-card-BE9bVPO9.js} +1 -1
  91. package/dist/client/assets/{connection-detail-C5YlPFpc.js → connection-detail-ou0Bbdg3.js} +1 -1
  92. package/dist/client/assets/{connection-form-helpers-DMk0le-b.js → connection-form-helpers-C-mO3IVJ.js} +1 -1
  93. package/dist/client/assets/{connections-VLg3RwZ5.js → connections-DLe43F3p.js} +1 -1
  94. package/dist/client/assets/{decopilot-sse-pool-Kd3cwlWJ.js → decopilot-sse-pool-COhFuvG9.js} +1 -1
  95. package/dist/client/assets/{dialog-CV1UOM5U.js → dialog-BXfbLf8D.js} +1 -1
  96. package/dist/client/assets/{domain-settings-BkaUeHVV.js → domain-settings-Ct1CJkX6.js} +1 -1
  97. package/dist/client/assets/{drawer-I2X9lL6U.js → drawer-C4kH1aSN.js} +1 -1
  98. package/dist/client/assets/{dropdown-menu-zDJ19vm6.js → dropdown-menu-BtSWkIIo.js} +1 -1
  99. package/dist/client/assets/{empty-state-jso6HePv.js → empty-state-fqOyb8fU.js} +1 -1
  100. package/dist/client/assets/{extract-connection-data-CbLB-QMP.js → extract-connection-data-DTk3JuAL.js} +1 -1
  101. package/dist/client/assets/{file-explorer-CL84GvyA.js → file-explorer-BL4eLKRD.js} +1 -1
  102. package/dist/client/assets/{file-type-icon-DOVqqZa7.js → file-type-icon-DujdWtYw.js} +1 -1
  103. package/dist/client/assets/{files-CbrZ-Qub.js → files-bIWo_Wlo.js} +1 -1
  104. package/dist/client/assets/{form-CR0GpnOw.js → form-C3KtXUh3.js} +1 -1
  105. package/dist/client/assets/{general-tKCsQJh2.js → general-DXAzm9F2.js} +1 -1
  106. package/dist/client/assets/{github-repo-picker-BZzESj5d.js → github-repo-picker-CkB1nI8G.js} +1 -1
  107. package/dist/client/assets/{hooks-DXzX4MS_.js → hooks-8WH1NsR9.js} +1 -1
  108. package/dist/client/assets/{index-BRrGaGHc.js → index-BAmA2f2-.js} +1 -1
  109. package/dist/client/assets/{index-Dys8lk1M.js → index-BeNXos_8.js} +1 -1
  110. package/dist/client/assets/{index-BIy7ryEf.js → index-BlWo_Bda.js} +3 -3
  111. package/dist/client/assets/{index-Iab388Cl.js → index-Busd7-Sn.js} +1 -1
  112. package/dist/client/assets/{index-Bwp8OcmS.js → index-C1mUDQ53.js} +1 -1
  113. package/dist/client/assets/{index-C_QUKWNp.js → index-COcMnkIN.js} +1 -1
  114. package/dist/client/assets/{index-zCPTU_j-.js → index-CRi6gg8N.js} +1 -1
  115. package/dist/client/assets/{index-D7gQ-SRK.js → index-Cdb4iLkf.js} +3 -3
  116. package/dist/client/assets/{index-E1p14dzn.js → index-CiTtzn2K.js} +1 -1
  117. package/dist/client/assets/index-D40GQ9yr.css +1 -0
  118. package/dist/client/assets/{index-DESn05Yz.js → index-DId1XgHj.js} +1 -1
  119. package/dist/client/assets/{index-lOfYQgmi.js → index-Dmno500u.js} +1 -1
  120. package/dist/client/assets/{index-DnS_dzb7.js → index-Re2SlP_W.js} +1 -1
  121. package/dist/client/assets/{index-ra6kZttK.js → index-UOz_Epke.js} +1 -1
  122. package/dist/client/assets/{index-8-KeZoH_.js → index-kyIbkPr4.js} +5 -5
  123. package/dist/client/assets/{index-redirect-BHnEAz_i.js → index-redirect-BTOOqbky.js} +1 -1
  124. package/dist/client/assets/{input-Bji7upci.js → input-CF4cE_aD.js} +1 -1
  125. package/dist/client/assets/{integration-icon-CsgowVSm.js → integration-icon-BOhJ5apn.js} +1 -1
  126. package/dist/client/assets/{invite-member-dialog-CI7Rmwz2.js → invite-member-dialog-DtBfJEYr.js} +1 -1
  127. package/dist/client/assets/{label-CePzkthC.js → label-DwH1VKcp.js} +1 -1
  128. package/dist/client/assets/{layout-4UJXDzTN.js → layout-D3qV4B6q.js} +1 -1
  129. package/dist/client/assets/{login-Bw7OIq2Y.js → login-BF3N9ICX.js} +1 -1
  130. package/dist/client/assets/{mcp-oauth-CESG6pC2.js → mcp-oauth-CnT1d_12.js} +1 -1
  131. package/dist/client/assets/{members-BZgxLiTB.js → members-CNryvyEo.js} +1 -1
  132. package/dist/client/assets/{monaco-editor-Cxb4JjgX.js → monaco-editor-DXz9d8BL.js} +1 -1
  133. package/dist/client/assets/{monitoring-stats-row-DFQ4UnVc.js → monitoring-stats-row-dWHCxZf2.js} +1 -1
  134. package/dist/client/assets/{multi-select-DA7ro_Z_.js → multi-select-DsflGK2f.js} +1 -1
  135. package/dist/client/assets/{oauth-callback-ai-provider-CRfIJxak.js → oauth-callback-ai-provider-DWOg1mE2.js} +1 -1
  136. package/dist/client/assets/{oauth-callback-CdA9TK6Q.js → oauth-callback-lgeL66ji.js} +1 -1
  137. package/dist/client/assets/{onboarding-EpDOPxaw.js → onboarding-CkVukawm.js} +1 -1
  138. package/dist/client/assets/{org-install-D42ev4NH.js → org-install-aT7_oexr.js} +1 -1
  139. package/dist/client/assets/{org-layout-Du0ceT-P.js → org-layout-C2zvSWHb.js} +1 -1
  140. package/dist/client/assets/{organization-choice-fMlZZgwT.js → organization-choice-DpwrWVKM.js} +1 -1
  141. package/dist/client/assets/{orgs-COxpl4kF.js → orgs-1YFs6m5G.js} +1 -1
  142. package/dist/client/assets/{page-seo-form-7VaVRKEV.js → page-seo-form-D2Yf67FK.js} +1 -1
  143. package/dist/client/assets/page-seo-sheet-5jWm75XN.js +1 -0
  144. package/dist/client/assets/{popover-B1Fz-3fR.js → popover-DvlSKzRU.js} +1 -1
  145. package/dist/client/assets/{post-editor-B-FJZ54Y.js → post-editor-kzv1T2sn.js} +1 -1
  146. package/dist/client/assets/{primitives-CCJn7ynW.js → primitives-WO3-yFtU.js} +1 -1
  147. package/dist/client/assets/{profile-zH9-hnL-.js → profile-BtJbwbvB.js} +1 -1
  148. package/dist/client/assets/project-app-view-BciJb5PP.js +1 -0
  149. package/dist/client/assets/record-editor-D93JiZK0.js +1 -0
  150. package/dist/client/assets/redirect-editor-DWa_2TDB.js +1 -0
  151. package/dist/client/assets/registry-Lacngj4d.js +2 -0
  152. package/dist/client/assets/{registry-layout-BZfmn_U1.js → registry-layout-Bk7YoXO4.js} +1 -1
  153. package/dist/client/assets/{reports-T4zzZ2co.js → reports-DmaSfIBG.js} +1 -1
  154. package/dist/client/assets/{require-capability-4jKX33st.js → require-capability-ymXsetUo.js} +1 -1
  155. package/dist/client/assets/{required-auth-layout-ZxBGjqOG.js → required-auth-layout-BpiP3fXh.js} +1 -1
  156. package/dist/client/assets/{reset-password-C5aegPfg.js → reset-password-Qgc3MtIE.js} +1 -1
  157. package/dist/client/assets/{roles-BE11TfbF.js → roles-KPbWhJ4S.js} +1 -1
  158. package/dist/client/assets/{search-input-7l5vFoHb.js → search-input-DsnSmAaD.js} +1 -1
  159. package/dist/client/assets/{secrets-Dg9xlViU.js → secrets-DXwJ7pQU.js} +1 -1
  160. package/dist/client/assets/{sections-editor-CSalAOCb.js → sections-editor-CpUFyu1M.js} +1 -1
  161. package/dist/client/assets/{select-DKGY1BpL.js → select-mCuF5Y6e.js} +1 -1
  162. package/dist/client/assets/{select-model-Cks8LV1T.js → select-model-CGkBNmii.js} +1 -1
  163. package/dist/client/assets/{self-tool-result-CLsg5Bwk.js → self-tool-result-BL6HSdre.js} +1 -1
  164. package/dist/client/assets/{seo-editor-9L2lDEyn.js → seo-editor-Ce6lVHfn.js} +1 -1
  165. package/dist/client/assets/{settings-layout-CUBpefHv.js → settings-layout-BI_6coZv.js} +1 -1
  166. package/dist/client/assets/{settings-section-VFz8IXjT.js → settings-section-BleY9J2T.js} +1 -1
  167. package/dist/client/assets/{shell-controls-BCtDfWQ8.js → shell-controls-CRSIPDgq.js} +1 -1
  168. package/dist/client/assets/{shell-layout-DraiNB_g.js → shell-layout-D0FBHqcV.js} +1 -1
  169. package/dist/client/assets/{sidebar-BfhsMJeJ.js → sidebar-1Ovit6KM.js} +1 -1
  170. package/dist/client/assets/{skeleton-BeQD5zhK.js → skeleton-DCfhfMK3.js} +1 -1
  171. package/dist/client/assets/{sso-RmSr1jWK.js → sso-BZDT7C3W.js} +1 -1
  172. package/dist/client/assets/{store-Du5Oq0b3.js → store-DukzZgy5.js} +1 -1
  173. package/dist/client/assets/store-registry-CQFftwrL.js +2 -0
  174. package/dist/client/assets/{studio-tools-UesNh_uC.js → studio-tools-PJZQCNP5.js} +1 -1
  175. package/dist/client/assets/{switch-ROJ03LaI.js → switch-CpPlZjAL.js} +1 -1
  176. package/dist/client/assets/{table-CVHz_zgq.js → table-BHRt30WG.js} +1 -1
  177. package/dist/client/assets/{tabs-BnjRW2FR.js → tabs-BPtGCSkT.js} +1 -1
  178. package/dist/client/assets/{textarea-BOInehe6.js → textarea-Dmb1Ohbr.js} +1 -1
  179. package/dist/client/assets/{toggle-group-CfMhFoT8.js → toggle-group-CmqPBMHB.js} +1 -1
  180. package/dist/client/assets/{toolbar-BIBBgYD4.js → toolbar-DzW66v4t.js} +1 -1
  181. package/dist/client/assets/{toolbar-icon-button-DoPOdTPW.js → toolbar-icon-button-CqGR-d9n.js} +1 -1
  182. package/dist/client/assets/{tooltip-BkmmnnZn.js → tooltip-P2dnyRSG.js} +1 -1
  183. package/dist/client/assets/{use-ai-providers-BRIOKkl5.js → use-ai-providers-D-NklXwj.js} +1 -1
  184. package/dist/client/assets/{use-api-keys-ZTNZYT0x.js → use-api-keys-DiY9rszf.js} +1 -1
  185. package/dist/client/assets/{use-automations-Bo1U4Lf0.js → use-automations-DuhL9j7f.js} +1 -1
  186. package/dist/client/assets/{use-autosave-igttdy0c.js → use-autosave-fYaGIsCX.js} +1 -1
  187. package/dist/client/assets/{use-capability-BluUhsae.js → use-capability-Ch1W04_A.js} +1 -1
  188. package/dist/client/assets/{use-clock-tick-CdNE02Qu.js → use-clock-tick-BYEXqvxg.js} +1 -1
  189. package/dist/client/assets/{use-collections-OqbQAa0G.js → use-collections-BHghUuGH.js} +1 -1
  190. package/dist/client/assets/{use-connection-DM_UeU7P.js → use-connection-CUixsTil.js} +1 -1
  191. package/dist/client/assets/{use-copy-DUFbsqOm.js → use-copy-rEHNXrq-.js} +1 -1
  192. package/dist/client/assets/{use-create-virtual-mcp-CbAlOvTd.js → use-create-virtual-mcp-C5qF9VD8.js} +1 -1
  193. package/dist/client/assets/{use-debounced-autosave-CqC8nk0v.js → use-debounced-autosave-CqCfykLA.js} +1 -1
  194. package/dist/client/assets/{use-debounced-value-C_kS2NZ0.js → use-debounced-value-ksGQX6iE.js} +1 -1
  195. package/dist/client/assets/{use-deco-credits-DiZNnfU2.js → use-deco-credits-DedHDdNl.js} +1 -1
  196. package/dist/client/assets/{use-decopilot-events-CioqCuYY.js → use-decopilot-events-CC7iNy2d.js} +1 -1
  197. package/dist/client/assets/{use-delete-connection-3AxaZxXd.js → use-delete-connection-CfJvvGnr.js} +1 -1
  198. package/dist/client/assets/{use-deployment-admin-5f5SDRmO.js → use-deployment-admin-DItJUSYS.js} +1 -1
  199. package/dist/client/assets/{use-file-configs-D6oi0bO8.js → use-file-configs-LgDhlbp9.js} +1 -1
  200. package/dist/client/assets/{use-infinite-scroll-DNe_ymcl.js → use-infinite-scroll-BJrp5AJu.js} +1 -1
  201. package/dist/client/assets/{use-join-requests-ByXwDdUk.js → use-join-requests-CuhV-VxV.js} +1 -1
  202. package/dist/client/assets/{use-mcp-auth-status-DdXSpsFE.js → use-mcp-auth-status-hSDdULp4.js} +1 -1
  203. package/dist/client/assets/{use-mcp-client-D39DytHd.js → use-mcp-client-dWWIyBQl.js} +1 -1
  204. package/dist/client/assets/{use-mcp-tools-DiBtxjTH.js → use-mcp-tools-CYrdfQFG.js} +1 -1
  205. package/dist/client/assets/{use-members-ZFCN4Yj-.js → use-members-CoX0TX8J.js} +1 -1
  206. package/dist/client/assets/{use-mobile-DlSR3xp_.js → use-mobile-Co9dxLDO.js} +1 -1
  207. package/dist/client/assets/{use-navigate-to-agent-CrVSzIuW.js → use-navigate-to-agent-CiwQBDDH.js} +1 -1
  208. package/dist/client/assets/{use-org-auth-client-DmVTuozc.js → use-org-auth-client-LuNLzzui.js} +1 -1
  209. package/dist/client/assets/{use-org-sso-D64m6Hza.js → use-org-sso-Obu44aUI.js} +1 -1
  210. package/dist/client/assets/{use-organization-roles-DlCimVNP.js → use-organization-roles-1CfxjmrQ.js} +1 -1
  211. package/dist/client/assets/{use-organization-settings-Cza_x9cF.js → use-organization-settings-Di5pRzs9.js} +1 -1
  212. package/dist/client/assets/{use-registry-app-DDxSe2v_.js → use-registry-app-03fjAyIN.js} +1 -1
  213. package/dist/client/assets/{use-registry-connections-CeAlp23b.js → use-registry-connections-DFr86_MG.js} +1 -1
  214. package/dist/client/assets/{use-secrets-C5hSD5nf.js → use-secrets-Cf0BU6dZ.js} +1 -1
  215. package/dist/client/assets/{use-status-sounds-DIHAglst.js → use-status-sounds-B2RpbsmN.js} +1 -1
  216. package/dist/client/assets/{use-t-B9j2Jkxd.js → use-t-DxW4ir0n.js} +1 -1
  217. package/dist/client/assets/{use-view-mode-CYh9fYXj.js → use-view-mode-VkGrgxNB.js} +1 -1
  218. package/dist/client/assets/{use-virtual-mcp-Dd2AYeQX.js → use-virtual-mcp-nnE5s71o.js} +1 -1
  219. package/dist/client/assets/useInfiniteQuery-BbGmXfvB.js +1 -0
  220. package/dist/client/assets/{useRouterState-UOHDZ2vp.js → useRouterState-BZzibVYa.js} +1 -1
  221. package/dist/client/assets/useSuspenseInfiniteQuery-D9k5g2U7.js +1 -0
  222. package/dist/client/assets/{users-DiH50p-H.js → users-yvUF2Plv.js} +1 -1
  223. package/dist/client/assets/{variant-calendar-I7IYZXiZ.js → variant-calendar-TObbgEsy.js} +1 -1
  224. package/dist/client/assets/{view-mode-toggle-CP_8aFKe.js → view-mode-toggle-DHnzTnrE.js} +1 -1
  225. package/dist/client/index.html +2 -2
  226. package/dist/server/cli.js +5 -5
  227. package/dist/server/server.js +5 -5
  228. package/package.json +1 -1
  229. package/dist/client/assets/index-B7jBuFkn.css +0 -1
  230. package/dist/client/assets/page-seo-sheet-DY3bWOke.js +0 -1
  231. package/dist/client/assets/project-app-view-BdVDxQW9.js +0 -1
  232. package/dist/client/assets/record-editor-DeJs4RBC.js +0 -1
  233. package/dist/client/assets/redirect-editor-DB6aJ1BN.js +0 -1
  234. package/dist/client/assets/registry-CDQCFj8u.js +0 -2
  235. package/dist/client/assets/store-registry-BQH919Vt.js +0 -2
  236. package/dist/client/assets/useInfiniteQuery-Bv-PihuA.js +0 -1
  237. package/dist/client/assets/useSuspenseInfiniteQuery-gjf1xZXa.js +0 -1
@@ -1 +1 @@
1
- import{c as $,r as T,l as f,j as i}from"./index-BIy7ryEf.js";import{b as k,T as I,a as P}from"./tooltip-BkmmnnZn.js";const M={sm:{button:"size-7",buttonWithLabel:"h-7",icon:"size-4"},md:{button:"size-9",buttonWithLabel:"h-9",icon:"size-5"},lg:{button:"size-12",buttonWithLabel:"h-12",icon:"size-6"}};function B(E){const t=$.c(27),{value:s,onValueChange:y,options:o,size:C,fullWidth:L,className:z}=E,_=C===void 0?"sm":C,b=L===void 0?!1:L;let h;t[0]===Symbol.for("react.memo_cache_sentinel")?(h=[],t[0]=h):h=t[0];const R=T.useRef(h);let x;t[1]===Symbol.for("react.memo_cache_sentinel")?(x={left:0,width:0,opacity:0},t[1]=x):x=t[1];const[d,S]=T.useState(x);let g,p;t[2]!==o||t[3]!==s?(g=()=>{const e=o.findIndex(j=>j.value===s),m=R.current[e];m&&S({left:m.offsetLeft,width:m.offsetWidth,opacity:1})},p=[s,o],t[2]=o,t[3]=s,t[4]=g,t[5]=p):(g=t[4],p=t[5]),T.useEffect(g,p);const n=M[_];let l;t[6]!==z?(l=f("relative flex gap-0 bg-muted rounded-lg",z),t[6]=z,t[7]=l):l=t[7];let a;t[8]!==n||t[9]!==b||t[10]!==y||t[11]!==o||t[12]!==s?(a=o.map((e,m)=>{const j=i.jsxs("button",{ref:V=>{R.current[m]=V},type:"button",onClick:()=>y(e.value),className:f("relative z-10 flex items-center justify-center gap-2 rounded-lg transition-colors [transition-timing-function:var(--ease-out-cubic)] duration-200",b?"flex-1 h-12 px-4":e.label?f(n.buttonWithLabel,"px-3"):n.button),children:[i.jsx("span",{className:f("transition-colors ease-out duration-200 flex items-center justify-center [&>svg]:size-[1em]",n.icon,s===e.value?"text-foreground":"text-muted-foreground"),children:e.icon}),e.label&&i.jsx("span",{className:f("text-xs transition-colors ease-out duration-200 whitespace-nowrap",s===e.value?"text-foreground":"text-muted-foreground"),children:e.label})]},e.value);return e.tooltip?i.jsxs(k,{children:[i.jsx(I,{asChild:!0,children:j}),i.jsx(P,{side:"bottom",children:e.tooltip})]},e.value):j}),t[8]=n,t[9]=b,t[10]=y,t[11]=o,t[12]=s,t[13]=a):a=t[13];const w=b?"h-12":n.button;let r;t[14]!==w?(r=f("absolute z-0 bg-background rounded-lg border-shadow transition-all [transition-timing-function:var(--ease-out-cubic)] duration-200",w),t[14]=w,t[15]=r):r=t[15];const W=`${d.left}px`,N=`${d.width}px`;let c;t[16]!==d.opacity||t[17]!==W||t[18]!==N?(c={left:W,width:N,opacity:d.opacity},t[16]=d.opacity,t[17]=W,t[18]=N,t[19]=c):c=t[19];let u;t[20]!==r||t[21]!==c?(u=i.jsx("div",{className:r,style:c}),t[20]=r,t[21]=c,t[22]=u):u=t[22];let v;return t[23]!==u||t[24]!==l||t[25]!==a?(v=i.jsxs("div",{className:l,children:[a,u]}),t[23]=u,t[24]=l,t[25]=a,t[26]=v):v=t[26],v}export{B as V};
1
+ import{c as $,r as T,l as f,j as i}from"./index-BlWo_Bda.js";import{b as k,T as I,a as P}from"./tooltip-P2dnyRSG.js";const M={sm:{button:"size-7",buttonWithLabel:"h-7",icon:"size-4"},md:{button:"size-9",buttonWithLabel:"h-9",icon:"size-5"},lg:{button:"size-12",buttonWithLabel:"h-12",icon:"size-6"}};function B(E){const t=$.c(27),{value:s,onValueChange:y,options:o,size:C,fullWidth:L,className:z}=E,_=C===void 0?"sm":C,b=L===void 0?!1:L;let h;t[0]===Symbol.for("react.memo_cache_sentinel")?(h=[],t[0]=h):h=t[0];const R=T.useRef(h);let x;t[1]===Symbol.for("react.memo_cache_sentinel")?(x={left:0,width:0,opacity:0},t[1]=x):x=t[1];const[d,S]=T.useState(x);let g,p;t[2]!==o||t[3]!==s?(g=()=>{const e=o.findIndex(j=>j.value===s),m=R.current[e];m&&S({left:m.offsetLeft,width:m.offsetWidth,opacity:1})},p=[s,o],t[2]=o,t[3]=s,t[4]=g,t[5]=p):(g=t[4],p=t[5]),T.useEffect(g,p);const n=M[_];let l;t[6]!==z?(l=f("relative flex gap-0 bg-muted rounded-lg",z),t[6]=z,t[7]=l):l=t[7];let a;t[8]!==n||t[9]!==b||t[10]!==y||t[11]!==o||t[12]!==s?(a=o.map((e,m)=>{const j=i.jsxs("button",{ref:V=>{R.current[m]=V},type:"button",onClick:()=>y(e.value),className:f("relative z-10 flex items-center justify-center gap-2 rounded-lg transition-colors [transition-timing-function:var(--ease-out-cubic)] duration-200",b?"flex-1 h-12 px-4":e.label?f(n.buttonWithLabel,"px-3"):n.button),children:[i.jsx("span",{className:f("transition-colors ease-out duration-200 flex items-center justify-center [&>svg]:size-[1em]",n.icon,s===e.value?"text-foreground":"text-muted-foreground"),children:e.icon}),e.label&&i.jsx("span",{className:f("text-xs transition-colors ease-out duration-200 whitespace-nowrap",s===e.value?"text-foreground":"text-muted-foreground"),children:e.label})]},e.value);return e.tooltip?i.jsxs(k,{children:[i.jsx(I,{asChild:!0,children:j}),i.jsx(P,{side:"bottom",children:e.tooltip})]},e.value):j}),t[8]=n,t[9]=b,t[10]=y,t[11]=o,t[12]=s,t[13]=a):a=t[13];const w=b?"h-12":n.button;let r;t[14]!==w?(r=f("absolute z-0 bg-background rounded-lg border-shadow transition-all [transition-timing-function:var(--ease-out-cubic)] duration-200",w),t[14]=w,t[15]=r):r=t[15];const W=`${d.left}px`,N=`${d.width}px`;let c;t[16]!==d.opacity||t[17]!==W||t[18]!==N?(c={left:W,width:N,opacity:d.opacity},t[16]=d.opacity,t[17]=W,t[18]=N,t[19]=c):c=t[19];let u;t[20]!==r||t[21]!==c?(u=i.jsx("div",{className:r,style:c}),t[20]=r,t[21]=c,t[22]=u):u=t[22];let v;return t[23]!==u||t[24]!==l||t[25]!==a?(v=i.jsxs("div",{className:l,children:[a,u]}),t[23]=u,t[24]=l,t[25]=a,t[26]=v):v=t[26],v}export{B as V};
@@ -56,8 +56,8 @@
56
56
  <meta name="apple-mobile-web-app-capable" content="yes" />
57
57
  <meta name="apple-mobile-web-app-status-bar-style" content="default" />
58
58
  <meta name="apple-mobile-web-app-title" content="deco Studio" />
59
- <script type="module" crossorigin src="/assets/index-BIy7ryEf.js"></script>
60
- <link rel="stylesheet" crossorigin href="/assets/index-B7jBuFkn.css">
59
+ <script type="module" crossorigin src="/assets/index-BlWo_Bda.js"></script>
60
+ <link rel="stylesheet" crossorigin href="/assets/index-D40GQ9yr.css">
61
61
  </head>
62
62
  <body>
63
63
  <div id="root"></div>
@@ -84564,7 +84564,7 @@ ${$}`;h(O);return}if(E(null,y),t.strategy==="count"){if(w--,w===0)h()}if(t.strat
84564
84564
  `);function h(_){if(t===void 0)return!0;let v=pM(_),D=v&&pM(t)?teu(t):t,n=v?teu(_):feu(_),N=HCt(D,n);return N===""||!N.startsWith("..")&&!QCt(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(K1i)},reconcile(){let _=Date.now();for(let v of l.all().map(K1i)){if(!h(v.sandboxPath)){c.run({$handle:v.handle,$now:_});continue}if(!pM(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(K1i)},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||!pM(N.sandboxPath))continue;if(N.branch===null||N.branch.trim()===""){D.push({handle:N.handle,sandboxPath:N.sandboxPath,reason:"no_branch",deletedFiles:!1});continue}if(!On(N.sandboxPath,["rev-parse","--is-inside-work-tree"]).ok){D.push({handle:N.handle,sandboxPath:N.sandboxPath,reason:"git_unavailable",deletedFiles:!1});continue}let O=On(N.sandboxPath,["status","--porcelain"]);if(!O.ok){D.push({handle:N.handle,sandboxPath:N.sandboxPath,reason:"git_unavailable",deletedFiles:!1});continue}if(O.stdout.trim()!==""){D.push({handle:N.handle,sandboxPath:N.sandboxPath,reason:"dirty_worktree",deletedFiles:!1});continue}let y=ceu(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}WCt(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=K1i(v),n=0,N=null;if(pM(D.sandboxPath)&&On(D.sandboxPath,["rev-parse","--is-inside-work-tree"]).ok){let O=On(D.sandboxPath,["status","--porcelain"]);if(O.ok){let y=O.stdout.trim();n=y===""?0:y.split(`
84565
84565
  `).length}if(D.branch!==null&&D.branch.trim()!=="")N=ceu(D.sandboxPath,D.branch)}return{handle:D.handle,branch:D.branch,sandboxPath:D.sandboxPath,dirtyCount:n,merged:N}},close(){u.close()}}}var zRi=()=>{};function MCt(i,u){return u?[["umount","-f",i]]:[["fusermount","-uz",i],["umount","-l",i]]}function $eu(i,u){if(process.platform==="win32")return;for(let t of MCt(i,u))if(Bun.spawnSync(t,{stdout:"ignore",stderr:"ignore",timeout:5000}).exitCode===0)break}var weu=()=>{};import{existsSync as qCt,readdirSync as VCt}from"fs";import{rm as rCt}from"fs/promises";import{join as deu}from"path";async function heu(i,u={}){let t=u.detach??mCt,f=u.exists??qCt,l=u.readdir??(($)=>VCt($)),c=u.rm??(($)=>rCt($,{recursive:!0,force:!0})),E=deu(i,"org");if(f(E))for(let $ of l(E))t(deu(E,$));await c(i)}var mCt=(i)=>$eu(i,process.platform==="darwin");var _eu=g(()=>{weu()});import{join as eCt}from"path";function veu(i){let u=i.purge??heu;return{stopSandbox(t){return i.provider.deleteSandbox(t)},inspectSandbox(t){return i.registry.inspect(t)},async removeSandbox(t){try{return await bl(async()=>{if(await i.provider.deleteSandbox(t),i.provider.hasHandle(t))throw Error("Can't delete \u2014 run in progress");let l=i.registry.inspect(t)?.sandboxPath??eCt(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 Deu=g(()=>{O4();_eu()});import{randomBytes as aCt}from"crypto";import{mkdir as oCt}from"fs/promises";import{createServer as sCt}from"net";import{join as pCt}from"path";function neu(i,u){return Error(`sandbox failed to start: ${i}`,{cause:u})}function geu(i){if(!(i instanceof Error))return!1;return i.name==="TimeoutError"||/timed out|timeout|operation was aborted|aborted/i.test(i.message)}function Neu(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 iMt(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 uMt(i){return{repoCloneUrl:i.repo?.cloneUrl??null,branch:i.repo?.branch??null,projectName:iMt(i.repo?.cloneUrl)}}function Oeu(i){let u=i.maxSandboxes??20,t=new Map,f=i.pickPort??tMt,l=i.fetchImpl??fetch,c=i.resolvePreviewUrl??((n,N)=>`http://127.0.0.1:${N}`),E=(n)=>pCt(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=uMt(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 oCt(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=aCt(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(S){throw neu("the sandbox didn't come online in time",S)}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(S){throw neu(geu(S)?"configuration timed out":"the sandbox rejected its configuration",S)}}catch(k){if((geu(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:Neu(k),sandboxPath:O,projectName:N.projectName,branch:N.branch}),$({handle:n.handle,status:"failed",sandboxPath:O,port:null,previewUrl:null,...N,error:Neu(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 tMt(){return new Promise((i,u)=>{let t=sCt();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 yeu=()=>{};import{randomUUID as fMt}from"crypto";import{hostname as lMt}from"os";async function Zeu(i){let u=lMt()||void 0;i.monitor?.onMachine?.(u??"this machine");let t=sbu(i.dataDir,{outFd:i.logFd,perSandboxLog:i.perSandboxLogs,hotReload:i.hotReload}),f=X1i({path:J1i(i.dataDir),managedSandboxRoot:`${i.dataDir}/sandboxes`}),l=!1,c=()=>{if(l)return;l=!0;try{f.close()}catch{}};try{let E=0,$=Oeu({dataDir:i.dataDir,registry:f,resolvePreviewUrl:(S,C)=>E>0?`http://${S}.localhost:${E}`:`http://127.0.0.1:${C}`,spawnDaemon:async(S)=>{let C={DAEMON_BOOT_ID:fMt(),APP_ROOT:S.workdir,PROXY_PORT:String(S.port),DAEMON_TOKEN:S.daemonToken,OFFLOAD_ALLOWED_HOSTS:S.offloadAllowedHosts.join(","),...S.offloadAllowSameHostDev?{OFFLOAD_ALLOW_SAME_HOST_DEV:"1"}:{}};if(S.orgFsConfigJson){let W=await tCu(i.dataDir);if(W)C.ORGFS_CONFIG=S.orgFsConfigJson,C.ORGFS_RCLONE_PATH=W}let K=await t({workdir:S.workdir,env:C,daemonPort:S.port});return{port:S.port,kill:(W)=>K.kill(W),exited:K.exited.then(()=>{return})}},postConfig:async(S,C,K,W)=>{let r={port:C};if(K.workload)r.runtime=K.workload.runtime,r.packageManager={name:K.workload.packageManager,...K.workload.packageManagerPath?{path:K.workload.packageManagerPath}:{}};let Y={application:r},ti=vh(K.operator??null);if(ti)Y.operator=ti;if(K.repo)Y.git={repository:{cloneUrl:K.repo.cloneUrl,branch:K.repo.branch},...K.repo.userName&&K.repo.userEmail?{identity:{userName:K.repo.userName,userEmail:K.repo.userEmail}}:{}};await En(`http://127.0.0.1:${S}`,W,Y)},waitForHealth:async(S)=>{await Jli(`http://127.0.0.1:${S}`)},maxSandboxes:20,onEvent:i.monitor?.onEvent}),w=await Mmu({port:i.port,lookupSandboxPort:(S)=>$.proxyPort(S)});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=lCu({provider:$}),h=async()=>{let S=await cn({dataDir:i.dataDir,target:i.clusterBaseUrl});if(!S)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 S.accessToken},_=await ieu(i.dataDir),v=process.env.npm_package_version??"0.0.0",D=await QRi(),n=smu(D,{onChange:(S)=>{console.log(`[link-daemon] capabilities detected: +${S.join(",")} (now: ${D.join(",")})`)}}),N=Izi({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 Kmu(Z);console.log("[link-daemon] active transport=tunnel");let B,F=new Promise((S)=>{B=S}),A=!1,k=async()=>{if(A)return;A=!0,y.abort(),console.log(`
84566
84566
  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=veu({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 Teu=g(()=>{Zzi();FM();pbu();fCu();cCu();xzi();Jmu();qmu();pmu();ueu();BM();zRi();Deu();yeu()});function HRi(i){return i.map((u)=>typeof u==="string"?u:String(u)).join(" ")}import{createServer as cMt}from"net";async function $Mt(i){for(let u of EMt)if(await RRi(i,u))return u;return null}async function Beu(i,{intervalMs:u=1000}={}){for(;;){let t=await $Mt(i);if(t)return t;await N0(u)}}function RRi(i,u){return new Promise((t)=>{let f=cMt();f.once("error",(l)=>{t(l.code==="EADDRINUSE")}),f.listen(i,u,()=>{f.close(()=>t(!1))})})}var EMt;var bRi=g(()=>{O4();EMt=["localhost","127.0.0.1","0.0.0.0"]});function Feu(i){return typeof i==="object"&&i!==null&&"code"in i&&i.code==="EADDRINUSE"}function wMt(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 Ueu(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`:","",` ${wMt(i,u)}`].join(`
84567
- `)}var CRi;var Peu=g(()=>{CRi=class CRi extends Error{port;code="EADDRINUSE";constructor(i){super(`Port ${i} is already in use.`);this.port=i;this.name="PortInUseError"}}});var fW;var L1i=g(()=>{fW={name:"decocms",version:"4.94.4",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 iq={};Ji(iq,{printBanner:()=>_Mt,bannerLines:()=>Aeu,BANNER_LINES:()=>W1i,BANNER_GRADIENT:()=>Y1i});function hMt(i){let u=Number.parseInt(i.slice(1),16);return[u>>16&255,u>>8&255,u&255]}function Aeu(i){let u=W1i.map((t,f)=>{let[l,c,E]=hMt(Y1i[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 _Mt(i){console.log("");for(let u of Aeu(i))console.log(u);console.log("")}var W1i,Y1i;var lW=g(()=>{W1i=[" \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 "],Y1i=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"]});import{Box as vMt,Text as Ieu}from"ink";import{jsx as DMt,jsxs as xeu}from"react/jsx-runtime";function Q1i({version:i}){return xeu(vMt,{flexDirection:"column",marginTop:1,children:[W1i.map((u,t)=>DMt(Ieu,{color:Y1i[t],children:u},t)),xeu(Ieu,{dimColor:!0,children:[" v",i]})]})}var MRi=g(()=>{lW()});function keu(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 cW(i){return[...i.values()].map((u)=>u.handle).sort((u,t)=>u.localeCompare(t))}function Geu(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 Seu(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 mRi={};Ji(mRi,{subscribeLinkState:()=>qRi,setSelectedHandle:()=>VRi,setRemoving:()=>R1i,setPersistedSandboxes:()=>UMt,setPendingConfirm:()=>tq,setMachine:()=>ZMt,setLogPath:()=>BMt,setLinkActions:()=>FMt,setIngress:()=>yMt,setDaemonError:()=>TMt,setClusterUrl:()=>OMt,setCluster:()=>NMt,setActionError:()=>H1i,resetLinkStateForTests:()=>AMt,removeSandboxRow:()=>rRi,pushSandboxEvent:()=>PMt,getLinkState:()=>uq,applySandboxEvent:()=>jeu});function gMt(i){return i==="spawning"||i==="ready"||i==="failed"}function jeu(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 Keu(){return{cluster:"connecting",clusterUrl:null,ingressUrl:null,ingressPort:null,machine:null,cap:nMt,sandboxes:new Map,daemonError:null,logPath:null,selectedHandle:null,pendingConfirm:null,removingHandles:new Set,actionError:null,actions:null}}function Y$(){for(let i of z1i)i()}function uq(){return lf}function qRi(i){return z1i.add(i),()=>z1i.delete(i)}function NMt(i){lf={...lf,cluster:i},Y$()}function OMt(i){lf={...lf,clusterUrl:i},Y$()}function yMt(i,u){lf={...lf,ingressPort:i,ingressUrl:u},Y$()}function ZMt(i){lf={...lf,machine:i},Y$()}function TMt(i){lf={...lf,daemonError:i},Y$()}function BMt(i){lf={...lf,logPath:i},Y$()}function VRi(i){lf={...lf,selectedHandle:i},Y$()}function tq(i){lf={...lf,pendingConfirm:i},Y$()}function H1i(i){lf={...lf,actionError:i},Y$()}function R1i(i,u){if(lf.removingHandles.has(i)===u)return;let t=new Set(lf.removingHandles);if(u)t.add(i);else t.delete(i);lf={...lf,removingHandles:t},Y$()}function FMt(i){lf={...lf,actions:i},Y$()}function rRi(i){let u=cW(lf.sandboxes),t=Seu(u,i,lf.selectedHandle),f=new Map(lf.sandboxes);f.delete(i);let l=new Set(lf.removingHandles);l.delete(i),lf={...lf,sandboxes:f,selectedHandle:t,pendingConfirm:null,removingHandles:l},Y$()}function UMt(i){let u=new Map;for(let t of i)u.set(t.handle,{handle:t.handle,port:t.port,previewUrl:t.previewUrl,status:t.status,error:t.error,projectName:t.projectName,branch:t.branch,sandboxPath:t.sandboxPath});for(let[t,f]of lf.sandboxes)if(gMt(f.status))u.set(t,f);lf={...lf,sandboxes:u},Y$()}function PMt(i){lf={...lf,sandboxes:jeu(lf.sandboxes,i)},Y$()}function AMt(){lf=Keu(),z1i.clear()}var nMt=20,lf,z1i;var fq=g(()=>{lf=Keu(),z1i=new Set});import{spawn as IMt}from"child_process";function xMt(i){if(i==="darwin")return"open";if(i==="win32")return"start";return"xdg-open"}function Jeu(i,u=process.platform){let t=xMt(u);try{IMt(t,[i],{stdio:"ignore",detached:!0}).unref()}catch{}}var Xeu=()=>{};function Leu(i,u={}){let t=u.openUrl??Jeu,f=uq(),l=cW(f.sandboxes),c=f.selectedHandle!==null&&l.includes(f.selectedHandle)?f.selectedHandle:l[0]??null,E=f.actions;switch(i.type){case"move":VRi(Geu(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);H1i(null),tq({handle:c,branch:$?.branch??w?.branch??null,dirtyCount:$?.dirtyCount??0,merged:$?.merged??null});return}case"confirmYes":{let $=f.pendingConfirm;if(tq(null),$===null||!E)return;R1i($.handle,!0),E.removeSandbox($.handle).then((w)=>{if(w.ok)rRi($.handle);else R1i($.handle,!1),H1i(w.error)});return}case"confirmNo":tq(null);return;case"quit":if(E)E.quit();return}}var Weu=g(()=>{fq();Xeu()});function Yeu(i,u,t){if(t)return i==="y"||i==="Y"?{type:"confirmYes"}:{type:"confirmNo"};if(u.upArrow||i==="k")return{type:"move",delta:-1};if(u.downArrow||i==="j")return{type:"move",delta:1};if(i==="s")return{type:"stop"};if(i==="d")return{type:"delete"};if(i==="o")return{type:"open"};if(i==="q"||u.ctrl===!0&&i==="c")return{type:"quit"};return null}var Qeu={};Ji(Qeu,{LinkApp:()=>jMt});import{Box as Ml,Text as h1,useInput as kMt}from"ink";import{useSyncExternalStore as GMt}from"react";import{jsx as kf,jsxs as Uh}from"react/jsx-runtime";function SMt(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 jMt(){let i=GMt(qRi,uq),u=[...i.sandboxes.values()].sort((l,c)=>l.handle.localeCompare(c.handle)),t=cW(i.sandboxes),f=i.selectedHandle!==null&&t.includes(i.selectedHandle)?i.selectedHandle:t[0]??null;return kMt((l,c)=>{let E=Yeu(l,c,i.pendingConfirm!==null);if(E!==null)Leu(E)}),Uh(Ml,{flexDirection:"column",children:[kf(Q1i,{version:fW.version}),kf(Ml,{marginBottom:1,children:kf(h1,{dimColor:!0,children:"\u2500".repeat(80)})}),kf(Ml,{children:i.cluster==="linked"?Uh(h1,{color:"green",children:["\u2713 Connected to ",i.clusterUrl??"deco"]}):i.cluster==="connecting"?Uh(h1,{color:"yellow",children:["\u25CC Connecting to ",i.clusterUrl??"deco","\u2026"]}):Uh(h1,{color:"red",children:["\u2717 Disconnected from ",i.clusterUrl??"deco"]})}),kf(Ml,{children:i.ingressUrl?Uh(h1,{color:"green",children:["\u2713 Serving at ",i.ingressUrl]}):kf(h1,{dimColor:!0,children:"\u25CC Starting local server\u2026"})}),kf(Ml,{marginBottom:1,children:kf(h1,{dimColor:!0,children:`${"Computer".padEnd(16)}${i.machine??"this computer"} \xB7 ${u.length} of ${i.cap} previews`})}),u.length===0?kf(h1,{dimColor:!0,children:"No previews running yet."}):Uh(Ml,{flexDirection:"column",children:[Uh(Ml,{children:[kf(Ml,{width:2,flexShrink:0}),kf(Ml,{width:EW.project,flexShrink:0,marginRight:1,children:kf(h1,{dimColor:!0,wrap:"truncate-end",children:"PROJECT"})}),kf(Ml,{width:EW.branch,flexShrink:0,marginRight:1,children:kf(h1,{dimColor:!0,wrap:"truncate-end",children:"BRANCH"})}),kf(Ml,{width:EW.status,flexShrink:0,marginRight:1,children:kf(h1,{dimColor:!0,wrap:"truncate-end",children:"STATUS"})}),kf(Ml,{flexGrow:1,children:kf(h1,{dimColor:!0,wrap:"truncate-end",children:"PREVIEW URL"})})]}),u.map((l)=>{let c=SMt(l,i.removingHandles.has(l.handle)),E=l.handle===f;return Uh(Ml,{children:[kf(Ml,{width:2,flexShrink:0,children:kf(h1,{color:"cyan",children:E?"\u203A":" "})}),kf(Ml,{width:EW.project,flexShrink:0,marginRight:1,children:kf(h1,{bold:E,wrap:"truncate-end",children:l.projectName??l.handle})}),kf(Ml,{width:EW.branch,flexShrink:0,marginRight:1,children:kf(h1,{bold:E,wrap:"truncate-end",children:l.branch??"\u2014"})}),kf(Ml,{width:EW.status,flexShrink:0,marginRight:1,children:kf(h1,{color:c.color,bold:E,wrap:"truncate-end",children:c.text})}),kf(Ml,{flexGrow:1,children:kf(h1,{dimColor:!0,wrap:"truncate-end",children:l.previewUrl??"\u2014"})})]},l.handle)})]}),i.daemonError?kf(Ml,{marginTop:1,children:Uh(h1,{color:"red",children:["\u26A0 ",i.daemonError]})}):null,i.logPath?kf(Ml,{marginTop:1,children:Uh(h1,{dimColor:!0,children:["Logs: ",i.logPath]})}):null,i.pendingConfirm?kf(Ml,{marginTop:1,children:kf(h1,{color:"yellow",children:keu(i.pendingConfirm)})}):null,i.actionError?kf(Ml,{marginTop:1,children:Uh(h1,{color:"red",children:["\u2717 ",i.actionError]})}):null,kf(Ml,{marginTop:1,children:kf(h1,{dimColor:!0,children:"\u2191\u2193 move \xB7 s stop \xB7 d delete \xB7 o open \xB7 q quit"})})]})}var EW;var zeu=g(()=>{L1i();MRi();Weu();fq();EW={project:18,branch:22,status:14}});var Heu={};Ji(Heu,{runLinkCommand:()=>zMt});import{closeSync as KMt,mkdirSync as JMt,openSync as XMt,writeSync as LMt}from"fs";import{homedir as WMt}from"os";import{join as eRi}from"path";function YMt(i,u){let t={log:console.log,warn:console.warn,error:console.error},f=(l)=>{if(u===void 0)return;try{LMt(u,`${HRi(l)}
84567
+ `)}var CRi;var Peu=g(()=>{CRi=class CRi extends Error{port;code="EADDRINUSE";constructor(i){super(`Port ${i} is already in use.`);this.port=i;this.name="PortInUseError"}}});var fW;var L1i=g(()=>{fW={name:"decocms",version:"4.94.5",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 iq={};Ji(iq,{printBanner:()=>_Mt,bannerLines:()=>Aeu,BANNER_LINES:()=>W1i,BANNER_GRADIENT:()=>Y1i});function hMt(i){let u=Number.parseInt(i.slice(1),16);return[u>>16&255,u>>8&255,u&255]}function Aeu(i){let u=W1i.map((t,f)=>{let[l,c,E]=hMt(Y1i[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 _Mt(i){console.log("");for(let u of Aeu(i))console.log(u);console.log("")}var W1i,Y1i;var lW=g(()=>{W1i=[" \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 "],Y1i=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"]});import{Box as vMt,Text as Ieu}from"ink";import{jsx as DMt,jsxs as xeu}from"react/jsx-runtime";function Q1i({version:i}){return xeu(vMt,{flexDirection:"column",marginTop:1,children:[W1i.map((u,t)=>DMt(Ieu,{color:Y1i[t],children:u},t)),xeu(Ieu,{dimColor:!0,children:[" v",i]})]})}var MRi=g(()=>{lW()});function keu(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 cW(i){return[...i.values()].map((u)=>u.handle).sort((u,t)=>u.localeCompare(t))}function Geu(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 Seu(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 mRi={};Ji(mRi,{subscribeLinkState:()=>qRi,setSelectedHandle:()=>VRi,setRemoving:()=>R1i,setPersistedSandboxes:()=>UMt,setPendingConfirm:()=>tq,setMachine:()=>ZMt,setLogPath:()=>BMt,setLinkActions:()=>FMt,setIngress:()=>yMt,setDaemonError:()=>TMt,setClusterUrl:()=>OMt,setCluster:()=>NMt,setActionError:()=>H1i,resetLinkStateForTests:()=>AMt,removeSandboxRow:()=>rRi,pushSandboxEvent:()=>PMt,getLinkState:()=>uq,applySandboxEvent:()=>jeu});function gMt(i){return i==="spawning"||i==="ready"||i==="failed"}function jeu(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 Keu(){return{cluster:"connecting",clusterUrl:null,ingressUrl:null,ingressPort:null,machine:null,cap:nMt,sandboxes:new Map,daemonError:null,logPath:null,selectedHandle:null,pendingConfirm:null,removingHandles:new Set,actionError:null,actions:null}}function Y$(){for(let i of z1i)i()}function uq(){return lf}function qRi(i){return z1i.add(i),()=>z1i.delete(i)}function NMt(i){lf={...lf,cluster:i},Y$()}function OMt(i){lf={...lf,clusterUrl:i},Y$()}function yMt(i,u){lf={...lf,ingressPort:i,ingressUrl:u},Y$()}function ZMt(i){lf={...lf,machine:i},Y$()}function TMt(i){lf={...lf,daemonError:i},Y$()}function BMt(i){lf={...lf,logPath:i},Y$()}function VRi(i){lf={...lf,selectedHandle:i},Y$()}function tq(i){lf={...lf,pendingConfirm:i},Y$()}function H1i(i){lf={...lf,actionError:i},Y$()}function R1i(i,u){if(lf.removingHandles.has(i)===u)return;let t=new Set(lf.removingHandles);if(u)t.add(i);else t.delete(i);lf={...lf,removingHandles:t},Y$()}function FMt(i){lf={...lf,actions:i},Y$()}function rRi(i){let u=cW(lf.sandboxes),t=Seu(u,i,lf.selectedHandle),f=new Map(lf.sandboxes);f.delete(i);let l=new Set(lf.removingHandles);l.delete(i),lf={...lf,sandboxes:f,selectedHandle:t,pendingConfirm:null,removingHandles:l},Y$()}function UMt(i){let u=new Map;for(let t of i)u.set(t.handle,{handle:t.handle,port:t.port,previewUrl:t.previewUrl,status:t.status,error:t.error,projectName:t.projectName,branch:t.branch,sandboxPath:t.sandboxPath});for(let[t,f]of lf.sandboxes)if(gMt(f.status))u.set(t,f);lf={...lf,sandboxes:u},Y$()}function PMt(i){lf={...lf,sandboxes:jeu(lf.sandboxes,i)},Y$()}function AMt(){lf=Keu(),z1i.clear()}var nMt=20,lf,z1i;var fq=g(()=>{lf=Keu(),z1i=new Set});import{spawn as IMt}from"child_process";function xMt(i){if(i==="darwin")return"open";if(i==="win32")return"start";return"xdg-open"}function Jeu(i,u=process.platform){let t=xMt(u);try{IMt(t,[i],{stdio:"ignore",detached:!0}).unref()}catch{}}var Xeu=()=>{};function Leu(i,u={}){let t=u.openUrl??Jeu,f=uq(),l=cW(f.sandboxes),c=f.selectedHandle!==null&&l.includes(f.selectedHandle)?f.selectedHandle:l[0]??null,E=f.actions;switch(i.type){case"move":VRi(Geu(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);H1i(null),tq({handle:c,branch:$?.branch??w?.branch??null,dirtyCount:$?.dirtyCount??0,merged:$?.merged??null});return}case"confirmYes":{let $=f.pendingConfirm;if(tq(null),$===null||!E)return;R1i($.handle,!0),E.removeSandbox($.handle).then((w)=>{if(w.ok)rRi($.handle);else R1i($.handle,!1),H1i(w.error)});return}case"confirmNo":tq(null);return;case"quit":if(E)E.quit();return}}var Weu=g(()=>{fq();Xeu()});function Yeu(i,u,t){if(t)return i==="y"||i==="Y"?{type:"confirmYes"}:{type:"confirmNo"};if(u.upArrow||i==="k")return{type:"move",delta:-1};if(u.downArrow||i==="j")return{type:"move",delta:1};if(i==="s")return{type:"stop"};if(i==="d")return{type:"delete"};if(i==="o")return{type:"open"};if(i==="q"||u.ctrl===!0&&i==="c")return{type:"quit"};return null}var Qeu={};Ji(Qeu,{LinkApp:()=>jMt});import{Box as Ml,Text as h1,useInput as kMt}from"ink";import{useSyncExternalStore as GMt}from"react";import{jsx as kf,jsxs as Uh}from"react/jsx-runtime";function SMt(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 jMt(){let i=GMt(qRi,uq),u=[...i.sandboxes.values()].sort((l,c)=>l.handle.localeCompare(c.handle)),t=cW(i.sandboxes),f=i.selectedHandle!==null&&t.includes(i.selectedHandle)?i.selectedHandle:t[0]??null;return kMt((l,c)=>{let E=Yeu(l,c,i.pendingConfirm!==null);if(E!==null)Leu(E)}),Uh(Ml,{flexDirection:"column",children:[kf(Q1i,{version:fW.version}),kf(Ml,{marginBottom:1,children:kf(h1,{dimColor:!0,children:"\u2500".repeat(80)})}),kf(Ml,{children:i.cluster==="linked"?Uh(h1,{color:"green",children:["\u2713 Connected to ",i.clusterUrl??"deco"]}):i.cluster==="connecting"?Uh(h1,{color:"yellow",children:["\u25CC Connecting to ",i.clusterUrl??"deco","\u2026"]}):Uh(h1,{color:"red",children:["\u2717 Disconnected from ",i.clusterUrl??"deco"]})}),kf(Ml,{children:i.ingressUrl?Uh(h1,{color:"green",children:["\u2713 Serving at ",i.ingressUrl]}):kf(h1,{dimColor:!0,children:"\u25CC Starting local server\u2026"})}),kf(Ml,{marginBottom:1,children:kf(h1,{dimColor:!0,children:`${"Computer".padEnd(16)}${i.machine??"this computer"} \xB7 ${u.length} of ${i.cap} previews`})}),u.length===0?kf(h1,{dimColor:!0,children:"No previews running yet."}):Uh(Ml,{flexDirection:"column",children:[Uh(Ml,{children:[kf(Ml,{width:2,flexShrink:0}),kf(Ml,{width:EW.project,flexShrink:0,marginRight:1,children:kf(h1,{dimColor:!0,wrap:"truncate-end",children:"PROJECT"})}),kf(Ml,{width:EW.branch,flexShrink:0,marginRight:1,children:kf(h1,{dimColor:!0,wrap:"truncate-end",children:"BRANCH"})}),kf(Ml,{width:EW.status,flexShrink:0,marginRight:1,children:kf(h1,{dimColor:!0,wrap:"truncate-end",children:"STATUS"})}),kf(Ml,{flexGrow:1,children:kf(h1,{dimColor:!0,wrap:"truncate-end",children:"PREVIEW URL"})})]}),u.map((l)=>{let c=SMt(l,i.removingHandles.has(l.handle)),E=l.handle===f;return Uh(Ml,{children:[kf(Ml,{width:2,flexShrink:0,children:kf(h1,{color:"cyan",children:E?"\u203A":" "})}),kf(Ml,{width:EW.project,flexShrink:0,marginRight:1,children:kf(h1,{bold:E,wrap:"truncate-end",children:l.projectName??l.handle})}),kf(Ml,{width:EW.branch,flexShrink:0,marginRight:1,children:kf(h1,{bold:E,wrap:"truncate-end",children:l.branch??"\u2014"})}),kf(Ml,{width:EW.status,flexShrink:0,marginRight:1,children:kf(h1,{color:c.color,bold:E,wrap:"truncate-end",children:c.text})}),kf(Ml,{flexGrow:1,children:kf(h1,{dimColor:!0,wrap:"truncate-end",children:l.previewUrl??"\u2014"})})]},l.handle)})]}),i.daemonError?kf(Ml,{marginTop:1,children:Uh(h1,{color:"red",children:["\u26A0 ",i.daemonError]})}):null,i.logPath?kf(Ml,{marginTop:1,children:Uh(h1,{dimColor:!0,children:["Logs: ",i.logPath]})}):null,i.pendingConfirm?kf(Ml,{marginTop:1,children:kf(h1,{color:"yellow",children:keu(i.pendingConfirm)})}):null,i.actionError?kf(Ml,{marginTop:1,children:Uh(h1,{color:"red",children:["\u2717 ",i.actionError]})}):null,kf(Ml,{marginTop:1,children:kf(h1,{dimColor:!0,children:"\u2191\u2193 move \xB7 s stop \xB7 d delete \xB7 o open \xB7 q quit"})})]})}var EW;var zeu=g(()=>{L1i();MRi();Weu();fq();EW={project:18,branch:22,status:14}});var Heu={};Ji(Heu,{runLinkCommand:()=>zMt});import{closeSync as KMt,mkdirSync as JMt,openSync as XMt,writeSync as LMt}from"fs";import{homedir as WMt}from"os";import{join as eRi}from"path";function YMt(i,u){let t={log:console.log,warn:console.warn,error:console.error},f=(l)=>{if(u===void 0)return;try{LMt(u,`${HRi(l)}
84568
84568
  `)}catch{}};return console.log=(...l)=>f(l),console.warn=(...l)=>f(l),console.error=(...l)=>{f(l),i(HRi(l))},()=>{console.log=t.log,console.warn=t.warn,console.error=t.error}}async function QMt(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 zMt(i={}){let u=i.port??5174,t=i.dataDir??process.env.DATA_DIR??process.env.DECOCMS_HOME??eRi(WMt(),"deco"),f=i.clusterBaseUrl??process.env.MESH_CLUSTER_URL??"https://studio.decocms.com",l,c,E,$=()=>{if(E===void 0)return;try{E.close()}catch{}finally{E=void 0}};try{if(await RRi(u,"127.0.0.1"))throw new CRi(u);let w=eRi(t,"sandboxes");E=X1i({path:J1i(t),managedSandboxRoot:w});let d=await Gli({dataDir:t,intent:"Link",target:f});if(process.env.DECOCMS_LINK_MANAGED!=="1")await QMt(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(() => (zeu(),Qeu)),{pushSandboxEvent:y,setCluster:Z,setClusterUrl:T,setDaemonError:B,setIngress:F,setLogPath:A,setMachine:k,setPersistedSandboxes:I}=await Promise.resolve().then(() => (fq(),mRi));JMt(t,{recursive:!0});let S=eRi(t,"link.log");c=XMt(S,"w"),A(S),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=YMt(B,c),n(N(O),{patchConsole:!1})}else if(i.banner!==!1){let{printBanner:n}=await Promise.resolve().then(() => (lW(),iq));n(i.version??"0.0.0")}$();let v=process.env.DECOCMS_LINK_MANAGED!=="1",D=await Zeu({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(() => (fq(),mRi));n({stopSandbox:D.stopSandbox,removeSandbox:D.removeSandbox,inspectSandbox:D.inspectSandbox,quit:D.stop})}return await D.stopped}catch(w){return l?.(),console.error(Feu(w)?Ueu(u):w instanceof Error?w.message:String(w)),1}finally{if(l?.(),c!==void 0)try{KMt(c)}catch{}$()}}var Reu=g(()=>{yzi();Teu();bRi();Peu();zRi()});var ubi={};Ji(ubi,{resolveDevLinkClusterUrl:()=>CMt,populateDevLinkToxiProxy:()=>reu,isDevLinkToxiProxyEnabled:()=>bMt,ensureDevLinkToxiProxy:()=>mMt,buildDevLinkToxiProxyConfig:()=>qeu,DEV_LINK_TOXIPROXY_SERVICE_NAME:()=>Ceu,DEV_LINK_TOXIPROXY_PROXY_NAME:()=>Meu});function bMt(i=process.env){return i.DECO_DEV_LINK_TOXIPROXY==="1"}function aRi(i,u){if(!Number.isInteger(i)||i<1||i>65535)throw Error(`${u} must be an integer port in 1..65535`);return i}function qeu(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=aRi(i.apiPort,"apiPort"),f=aRi(i.listenPort,"listenPort");if(u.port.length===0)throw Error("serverUrl must include an explicit valid port");let l=aRi(Number.parseInt(u.port,10),"upstreamPort"),c=`http://127.0.0.1:${l}`,E=`http://127.0.0.1:${f}`;return{serviceName:Ceu,proxyName:Meu,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 CMt(i){return i.toxiproxy?.clusterUrl??i.serverUrl}async function oRi(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 ibi(i){if(i instanceof Error)return i.name==="Error"?i.message:`${i.name}: ${i.message}`;return String(i)}function Veu(i){if(!(i instanceof Error))return!1;if(i.name==="TimeoutError")return!0;return Veu(i.cause)}async function sRi(i,u,t,f){try{return await i(t,f)}catch(l){throw Error(`ToxiProxy ${u} failed for ${t}: ${ibi(l)}`,{cause:l})}}async function reu(i,u=fetch){let t=`${i.apiUrl}/reset`,f=await sRi(u,"reset",t,{method:"POST"});await oRi(f,"reset",t);let l=`${i.apiUrl}/populate`,c=await sRi(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 oRi(c,"populate",l)}async function MMt(i,u){let t=`${i.apiUrl}/version`;try{await bl(async()=>{let f=await sRi(u,"readiness check",t,{method:"GET",signal:AbortSignal.timeout(RMt)});await oRi(f,"readiness check",t)},{maxAttempts:HMt,minTimeout:beu,maxTimeout:beu,multiplier:1,jitter:0,isRetriable:(f)=>!Veu(f)})}catch(f){let l=f instanceof Lc?f.cause:f;throw Error(`ToxiProxy API did not become ready at ${t}: ${ibi(l)}`,{cause:l})}}async function qMt(i){if(i===null)return"";return await new Response(i).text()}async function pRi(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}): ${ibi($)}`,{cause:$})}})(),[l,c]=await Promise.all([f.exited,qMt(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 VMt(i,u){let t=`deco-dev-link-toxiproxy-${i}`;await pRi(["rm","-f",t],{ignoreFailure:!0}),await pRi(["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 rMt(i,u){let t=`deco-dev-link-toxiproxy-${i}`;await pRi(["rm","-f",t],{ignoreFailure:!0})}async function mMt(i){let u=qeu(i),t=i.startDaemon??VMt,f=i.stopDaemon??(i.startDaemon===void 0?rMt:void 0);await t(i.apiPort,i.listenPort);let l=i.fetchImpl??fetch;try{await MMt(u,l),await reu(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 Ceu="ToxiProxy",Meu="dev_link_studio",HMt=20,beu=100,RMt=100;var tbi=g(()=>{O4()});var meu={};Ji(meu,{migrateBetterAuth:()=>fbi});import{getMigrations as eMt}from"better-auth/db";import{sso as aMt}from"@better-auth/sso";import{organization as oMt}from"@decocms/better-auth/plugins";import{admin as sMt,apiKey as pMt,jwt as iqt,magicLink as uqt,mcp as tqt,openAPI as fqt}from"better-auth/plugins";import{emailOTP as lqt}from"better-auth/plugins/email-otp";async function fbi(i){let t={database:gM(i||un()),plugins:[oMt({dynamicAccessControl:{enabled:!0,enableCustomResources:!0}}),sMt(),pMt(),iqt(),fqt(),tqt({loginPage:"/login"}),aMt(),uqt({sendMagicLink:async()=>{}}),lqt({sendVerificationOTP:async()=>{}})]},{toBeAdded:f,toBeCreated:l,runMigrations:c}=await eMt(t);if(!f.length&&!l.length)return"up to date";return await c(),`${l.length+f.length} table(s) migrated`}var lbi=g(()=>{lE()});var cbi={};Ji(cbi,{up:()=>cqt,down:()=>Eqt});import{sql as Ev}from"kysely";async function cqt(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(Ev`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(u)=>u.notNull().defaultTo(Ev`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(Ev`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(u)=>u.notNull().defaultTo(Ev`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(Ev`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(Ev`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(Ev`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(Ev`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(Ev`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(u)=>u.notNull().defaultTo(Ev`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 Eqt(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 eeu=()=>{};var Ebi={};Ji(Ebi,{up:()=>$qt,down:()=>wqt});import{sql as aeu}from"kysely";async function $qt(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(aeu`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(u)=>u.notNull().defaultTo(aeu`CURRENT_TIMESTAMP`)).execute()}async function wqt(i){await i.schema.dropTable("organization_settings").execute()}var oeu=()=>{};var $bi={};Ji($bi,{up:()=>dqt,down:()=>hqt});async function dqt(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 hqt(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 wbi={};Ji(wbi,{up:()=>_qt,down:()=>vqt});async function _qt(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 vqt(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 dbi={};Ji(dbi,{up:()=>Dqt,down:()=>nqt});async function Dqt(i){await i.schema.alterTable("connections").addColumn("configuration_state","text").execute(),await i.schema.alterTable("connections").addColumn("configuration_scopes","text").execute()}async function nqt(i){await i.schema.alterTable("connections").dropColumn("configuration_state").execute(),await i.schema.alterTable("connections").dropColumn("configuration_scopes").execute()}var hbi={};Ji(hbi,{up:()=>Nqt,down:()=>Oqt});import{sql as gqt}from"kysely";async function Nqt(i){await i.schema.alterTable("organization_settings").addColumn("sidebar_items",gqt`text`).execute()}async function Oqt(i){await i.schema.alterTable("organization_settings").dropColumn("sidebar_items").execute()}var seu=()=>{};var _bi={};Ji(_bi,{up:()=>yqt,down:()=>Zqt});async function yqt(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 Zqt(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 vbi={};Ji(vbi,{up:()=>Tqt,down:()=>Bqt});import{sql as lq}from"kysely";async function Tqt(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(lq`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(u)=>u.notNull().defaultTo(lq`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(lq`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(u)=>u.notNull().defaultTo(lq`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(lq`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 Bqt(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 peu=()=>{};var Dbi={};Ji(Dbi,{up:()=>Uqt,down:()=>Pqt});import{sql as Fqt}from"kysely";async function Uqt(i){await i.schema.dropTable("audit_logs").ifExists().execute()}async function Pqt(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(Fqt`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 iau=()=>{};var nbi={};Ji(nbi,{up:()=>Aqt,down:()=>Iqt});import{sql as b1i}from"kysely";async function Aqt(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(b1i`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(u)=>u.notNull().defaultTo(b1i`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(b1i`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 b1i`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 Iqt(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 uau=()=>{};var gbi={};Ji(gbi,{up:()=>xqt,down:()=>kqt});async function xqt(i){await i.schema.alterTable("gateways").addColumn("icon","text").execute()}async function kqt(i){await i.schema.alterTable("gateways").dropColumn("icon").execute()}var Nbi={};Ji(Nbi,{up:()=>Gqt,down:()=>Sqt});import{sql as C1i}from"kysely";async function Gqt(i){await i.schema.alterTable("gateways").addColumn("tool_selection_mode","text",(u)=>u.notNull().defaultTo("inclusion")).execute(),await C1i`
84569
84569
  UPDATE gateways
84570
84570
  SET tool_selection_mode = CASE
@@ -86986,12 +86986,12 @@ Usage notes:
86986
86986
  `+`- Every subtask call starts FRESH \u2014 no conversation history, no prior runs. Always include full context in the prompt and state exactly what to return (the specific answer/list/paths you need, not a raw dump); never use continuation phrases like 'continue' or 'as before'.
86987
86987
  `+`- Clearly tell the subagent whether you expect it to take action or just research.
86988
86988
  - To parallelize independent searches, launch multiple subtask calls in the same message.
86989
- - The subagent's output should generally be trusted.`;rqf={readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!0}});import{z as C9}from"zod";var mqf,eqf,aqf=`Ask the user instead of guessing when requirements are ambiguous, multiple valid approaches exist, or before actions with significant consequences. Prefer this tool over asking in plain text.
86989
+ - The subagent's output should generally be trusted.`;rqf={readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!0}});import{z as C9}from"zod";var mqf,eqf,aqf,YTi;var Scu=g(()=>{Uf();mqf=C9.object({prompt:C9.string().min(1).describe("One short question (1 sentence max, \u226415 words). The conversation already provides context, do not repeat it here."),type:C9.enum(["text","choice","confirm"]).describe("'text': free-form, 'choice': pick from options (UI adds 'Other' automatically), 'confirm': yes/no"),options:C9.array(C9.string()).optional().describe("Required for 'choice'. Each option must be a short label (3\u20136 words, no leading numbers like '1)' \u2014 the UI adds them)."),default:C9.string().optional()}).refine((i)=>{if(i.type==="choice")return i.options&&i.options.length>=2;return!0},{message:"Options array with at least 2 items required for 'choice' type",path:["options"]}),eqf=C9.object({response:C9.string().describe("User's response")}),aqf=`Ask the user instead of guessing when requirements are ambiguous, multiple valid approaches exist, or before actions with significant consequences. Prefer this tool over asking in plain text.
86990
86990
 
86991
86991
  Guidelines:
86992
- - For 'choice' type: put the recommended option first. Provide 2-5 options.
86993
- - For 'confirm' type: use for yes/no decisions, especially before destructive or hard-to-reverse actions.
86994
- - For 'text' type: use when the answer is open-ended and cannot be anticipated with options.`,YTi;var Scu=g(()=>{Uf();mqf=C9.object({prompt:C9.string().min(1).describe("The question to display"),type:C9.enum(["text","choice","confirm"]).describe("'text': free-form, 'choice': pick from options (UI adds 'Other' automatically), 'confirm': yes/no"),options:C9.array(C9.string()).optional().describe("Required for 'choice'"),default:C9.string().optional()}).refine((i)=>{if(i.type==="choice")return i.options&&i.options.length>=2;return!0},{message:"Options array with at least 2 items required for 'choice' type",path:["options"]}),eqf=C9.object({response:C9.string().describe("User's response")}),YTi=z0({description:aqf,inputSchema:Di(mqf),outputSchema:Di(eqf)})});import{z as DH}from"zod";var oqf,sqf,pqf,QTi;var jcu=g(()=>{Uf();oqf=DH.object({content:DH.string().min(1).describe("Imperative form, e.g. 'Implement the login flow'"),status:DH.enum(["pending","in_progress","completed"]),activeForm:DH.string().min(1).describe("Present-continuous form shown in the UI while the todo is in progress, e.g. 'Implementing the login flow'")}),sqf=DH.object({todos:DH.array(oqf)}),pqf="Plan and track multi-step work. Call with the FULL todo list every time \u2014 this replaces the prior list. "+"Call at the start of every multi-step request. Skip only for true one-shots (a single tool call or a direct answer). Mark exactly one todo `in_progress` at a time. "+"Flip a todo to `in_progress` before starting it and to `completed` the moment it finishes \u2014 do not batch completions. "+"Your prior tool-call inputs are your current state \u2014 read your last call to see where you are.",QTi=z0({description:pqf,inputSchema:Di(sqf),execute:async({todos:i})=>({ok:!0,count:i.length})})});import{z as Xo}from"zod";function fK0(i){return z0({description:uVf,inputSchema:Di(iVf),execute:async({interests:u})=>{return await i.write({orgId:i.orgId??"",agentId:i.agentId??"",userId:i.userId??"",interests:u}),{ok:!0,count:u.length}}})}var iVf,uVf;var lK0=g(()=>{Uf();iVf=Xo.object({interests:Xo.array(Xo.object({title:Xo.string().max(120).describe("Short noun phrase, e.g. 'Learning Rust'"),summary:Xo.string().max(500).describe("One or two sentences of context, including any progress")})).max(10)}),uVf="Record what the user is durably working toward (their goals/interests). "+"Call this when you learn a real, lasting goal \u2014 NOT for one-off questions. "+"Pass the FULL list every time: it replaces the stored one, so carry forward existing interests (fold progress into their summary) and drop only ones that are clearly finished or abandoned. Order by importance, most first."});import{z as zTi}from"zod";var tVf,fVf,lVf,HTi;var Kcu=g(()=>{Uf();tVf=zTi.object({plan:zTi.string().max(50000).describe("Markdown-formatted implementation plan")}),fVf=zTi.object({approved:zTi.boolean().describe("Whether the user approved the plan")}),lVf="Propose an implementation plan for user review. Include all discoveries, context, and steps needed \u2014 "+`this becomes the sole context for execution. After approval, a new thread will be created with this plan as the starting context, so anything not included in the plan will be lost.
86992
+ `+"- Keep `prompt` to one short question (1 sentence max, \u226415 words). Never repeat context already visible in the conversation.\n"+`- For 'choice' type: put the recommended option first. Provide 2-5 options. Each option label must be 3\u20136 words \u2014 no leading '1)' numbering (the UI adds numbers automatically).
86993
+ `+`- For 'confirm' type: use for yes/no decisions, especially before destructive or hard-to-reverse actions.
86994
+ - For 'text' type: use when the answer is open-ended and cannot be anticipated with options.`,YTi=z0({description:aqf,inputSchema:Di(mqf),outputSchema:Di(eqf)})});import{z as DH}from"zod";var oqf,sqf,pqf,QTi;var jcu=g(()=>{Uf();oqf=DH.object({content:DH.string().min(1).describe("Imperative form, e.g. 'Implement the login flow'"),status:DH.enum(["pending","in_progress","completed"]),activeForm:DH.string().min(1).describe("Present-continuous form shown in the UI while the todo is in progress, e.g. 'Implementing the login flow'")}),sqf=DH.object({todos:DH.array(oqf)}),pqf="Plan and track multi-step work. Call with the FULL todo list every time \u2014 this replaces the prior list. "+"Call at the start of every multi-step request. Skip only for true one-shots (a single tool call or a direct answer). Mark exactly one todo `in_progress` at a time. "+"Flip a todo to `in_progress` before starting it and to `completed` the moment it finishes \u2014 do not batch completions. "+"Your prior tool-call inputs are your current state \u2014 read your last call to see where you are.",QTi=z0({description:pqf,inputSchema:Di(sqf),execute:async({todos:i})=>({ok:!0,count:i.length})})});import{z as Xo}from"zod";function fK0(i){return z0({description:uVf,inputSchema:Di(iVf),execute:async({interests:u})=>{return await i.write({orgId:i.orgId??"",agentId:i.agentId??"",userId:i.userId??"",interests:u}),{ok:!0,count:u.length}}})}var iVf,uVf;var lK0=g(()=>{Uf();iVf=Xo.object({interests:Xo.array(Xo.object({title:Xo.string().max(120).describe("Short noun phrase, e.g. 'Learning Rust'"),summary:Xo.string().max(500).describe("One or two sentences of context, including any progress")})).max(10)}),uVf="Record what the user is durably working toward (their goals/interests). "+"Call this when you learn a real, lasting goal \u2014 NOT for one-off questions. "+"Pass the FULL list every time: it replaces the stored one, so carry forward existing interests (fold progress into their summary) and drop only ones that are clearly finished or abandoned. Order by importance, most first."});import{z as zTi}from"zod";var tVf,fVf,lVf,HTi;var Kcu=g(()=>{Uf();tVf=zTi.object({plan:zTi.string().max(50000).describe("Markdown-formatted implementation plan")}),fVf=zTi.object({approved:zTi.boolean().describe("Whether the user approved the plan")}),lVf="Propose an implementation plan for user review. Include all discoveries, context, and steps needed \u2014 "+`this becomes the sole context for execution. After approval, a new thread will be created with this plan as the starting context, so anything not included in the plan will be lost.
86995
86995
 
86996
86996
  Guidelines:
86997
86997
  - Include file paths, function names, and specific code locations discovered during exploration.