decocms 4.100.0 → 4.100.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (232) hide show
  1. package/dist/client/assets/{AlertCircle-Bxley7ls.js → AlertCircle-BUv0o0Gl.js} +1 -1
  2. package/dist/client/assets/{AreaChart-CG7AioGL.js → AreaChart-DB5xSdQV.js} +1 -1
  3. package/dist/client/assets/{ArrowRight-DAV431J7.js → ArrowRight-CygvGeg1.js} +1 -1
  4. package/dist/client/assets/{ArrowUp-DTvkt0ak.js → ArrowUp-C8Sj-6cW.js} +1 -1
  5. package/dist/client/assets/{ArrowUpRight-S9c4hAoU.js → ArrowUpRight-DplBjw5o.js} +1 -1
  6. package/dist/client/assets/{Check-BEridtmz.js → Check-CZ62cQFv.js} +1 -1
  7. package/dist/client/assets/{CheckCircle-BlO_RSix.js → CheckCircle-Bz3mm2-x.js} +1 -1
  8. package/dist/client/assets/{ChevronDown-BiEc62bh.js → ChevronDown-J_OOB83i.js} +1 -1
  9. package/dist/client/assets/{ChevronRight-DQaJlJVb.js → ChevronRight-B_nfqq4b.js} +1 -1
  10. package/dist/client/assets/{ChevronUp-k6Oc5DVd.js → ChevronUp-DlNTHmG8.js} +1 -1
  11. package/dist/client/assets/{Copy01-C7hMCclq.js → Copy01-L90lYXit.js} +1 -1
  12. package/dist/client/assets/{DotsVertical-BMhkpK12.js → DotsVertical-lwqN942J.js} +1 -1
  13. package/dist/client/assets/{Eye-dVsVJhNZ.js → Eye-DJNMsuKP.js} +1 -1
  14. package/dist/client/assets/{FilterLines-D3B5tJlR.js → FilterLines-Ctf5R5fC.js} +1 -1
  15. package/dist/client/assets/{Globe01-DEDrpW1E.js → Globe01-BCBfPYAn.js} +1 -1
  16. package/dist/client/assets/{Globe04-BZBYUjok.js → Globe04-BHKVK6xV.js} +1 -1
  17. package/dist/client/assets/{HardDrive-ByaWw6uO.js → HardDrive-C2mVZcno.js} +1 -1
  18. package/dist/client/assets/{Image01-BV3Txwbg.js → Image01-BxzecnbA.js} +1 -1
  19. package/dist/client/assets/{Key01-DLsfTRDD.js → Key01-BBEWTXqy.js} +1 -1
  20. package/dist/client/assets/{LayoutLeft-BzVqeY55.js → LayoutLeft-hvI17iuw.js} +1 -1
  21. package/dist/client/assets/{LinkExternal01-Ci-otr_n.js → LinkExternal01-BrSEUYxH.js} +1 -1
  22. package/dist/client/assets/{Monitor01-Ycx6Vrvt.js → Monitor01-CqpD_NrV.js} +1 -1
  23. package/dist/client/assets/{Package-Cnz6Un5X.js → Package-BB-dQTzG.js} +1 -1
  24. package/dist/client/assets/{Palette-BFS141XQ.js → Palette-D7uqEd1w.js} +1 -1
  25. package/dist/client/assets/{Play-CAB1ZCRF.js → Play-tGBeI8QZ.js} +1 -1
  26. package/dist/client/assets/{Plus-BQ9qrH8f.js → Plus-BR1TF8zT.js} +1 -1
  27. package/dist/client/assets/{SearchLg-W-Jcoj3E.js → SearchLg-DExNbDxF.js} +1 -1
  28. package/dist/client/assets/{SearchMd-CahiLwU-.js → SearchMd-C7ohVhrC.js} +1 -1
  29. package/dist/client/assets/{Settings02-B5wstt4p.js → Settings02-DwsPb2Fk.js} +1 -1
  30. package/dist/client/assets/{Shield01-DHTgRfQy.js → Shield01-BPZW3dum.js} +1 -1
  31. package/dist/client/assets/{Star01-C1FexH2L.js → Star01-BcHCCMO8.js} +1 -1
  32. package/dist/client/assets/{Stars01-BArh5_CK.js → Stars01-x8HCapJe.js} +1 -1
  33. package/dist/client/assets/{Stars02-D-v5MacQ.js → Stars02-Ce9RSIdg.js} +1 -1
  34. package/dist/client/assets/{Sun-BQx_Tk93.js → Sun-DCWZjgg1.js} +1 -1
  35. package/dist/client/assets/{SwitchHorizontal01-C3WuJpK_.js → SwitchHorizontal01-3NFOZxw0.js} +1 -1
  36. package/dist/client/assets/{Tool01-D-9cvENG.js → Tool01-CX9osEdC.js} +1 -1
  37. package/dist/client/assets/{Tool02-BrKtvAQQ.js → Tool02-B2QhIM3v.js} +1 -1
  38. package/dist/client/assets/{Trash01-BOvBVpF6.js → Trash01-UmvRNb8P.js} +1 -1
  39. package/dist/client/assets/{TrendUp01-B1fIoCbN.js → TrendUp01-BJ_VQNkR.js} +1 -1
  40. package/dist/client/assets/{Upload01-BQmvLn4t.js → Upload01-CwUtLH3Y.js} +1 -1
  41. package/dist/client/assets/{User01-DaB2mE1H.js → User01-DhLO_hna.js} +1 -1
  42. package/dist/client/assets/{Users01-DD9j7wkG.js → Users01-CAOn3O6K.js} +1 -1
  43. package/dist/client/assets/{Users03-zDzGivHr.js → Users03-CGkLo8Pu.js} +1 -1
  44. package/dist/client/assets/{X-IbrtE-s4.js → X-Cb5gEaff.js} +1 -1
  45. package/dist/client/assets/{XCircle-DGigjeyF.js → XCircle-D50xFjzV.js} +1 -1
  46. package/dist/client/assets/{XClose-DzJNy4PW.js → XClose-F1uf7F8x.js} +1 -1
  47. package/dist/client/assets/{Zap-DPOyU8qk.js → Zap-CEoRNu9S.js} +1 -1
  48. package/dist/client/assets/{ZapSquare-DkSNEL2b.js → ZapSquare-C-YklkcW.js} +1 -1
  49. package/dist/client/assets/{ZoomOut-BITJSwVW.js → ZoomOut-BSX__OjD.js} +1 -1
  50. package/dist/client/assets/{access-gate-Cld6ZUBt.js → access-gate-akzDN5w1.js} +1 -1
  51. package/dist/client/assets/{add-section-modal-B-l5JUvv.js → add-section-modal-EOKRXMmH.js} +1 -1
  52. package/dist/client/assets/{agent-icon-CRZnpjC_.js → agent-icon--8-AE3To.js} +1 -1
  53. package/dist/client/assets/{agents-list-BbP4zLRg.js → agents-list-CWZbgUsD.js} +1 -1
  54. package/dist/client/assets/{ai-providers-YnzeVs9d.js → ai-providers-D70JYflQ.js} +1 -1
  55. package/dist/client/assets/{alert-Ca0O7jw_.js → alert-CgvSLAJD.js} +1 -1
  56. package/dist/client/assets/{alert-dialog-DI2MtMU3.js → alert-dialog-CotSOgab.js} +1 -1
  57. package/dist/client/assets/{app-editor-D4s8R4J9.js → app-editor-DQIqwsTg.js} +1 -1
  58. package/dist/client/assets/{auth-YD50toG1.js → auth-DW91iKuD.js} +1 -1
  59. package/dist/client/assets/{auth-catchall-DkIXGcxn.js → auth-catchall-BOvnnvmu.js} +1 -1
  60. package/dist/client/assets/{auth-entry-s8aPui2j.js → auth-entry-inexuCWD.js} +1 -1
  61. package/dist/client/assets/{auth-split-layout-Cms88cb7.js → auth-split-layout-BPhbQAcL.js} +1 -1
  62. package/dist/client/assets/{authenticate-and-persist-oauth-PalN3zyi.js → authenticate-and-persist-oauth-T4BE9_s9.js} +1 -1
  63. package/dist/client/assets/{automation-list-row-DtK1HcDM.js → automation-list-row-FIyToD1c.js} +1 -1
  64. package/dist/client/assets/{automation-runs-DkANrTNa.js → automation-runs-DzoysJ0O.js} +1 -1
  65. package/dist/client/assets/{automations-C7ppEZs_.js → automations-D_R8Uk0h.js} +1 -1
  66. package/dist/client/assets/{autosend-DYGIxc7a.js → autosend-CDaLoLJr.js} +1 -1
  67. package/dist/client/assets/{avatar-BXSptr47.js → avatar-BbZ_GFXI.js} +1 -1
  68. package/dist/client/assets/{badge-o246HDY_.js → badge-CR4m1nCF.js} +1 -1
  69. package/dist/client/assets/{block-document-08b2HbHS.js → block-document-O1DNHK7m.js} +1 -1
  70. package/dist/client/assets/{brand-context-BT4_-sV-.js → brand-context-BdqMedT2.js} +1 -1
  71. package/dist/client/assets/{buckets-oh77T4NQ.js → buckets-DILfb6Ca.js} +1 -1
  72. package/dist/client/assets/{bulk-category-panel-DBuRNEkj.js → bulk-category-panel-Bc-UEj5M.js} +1 -1
  73. package/dist/client/assets/{calendar-ByQrFkkN.js → calendar-BUWo0OzZ.js} +1 -1
  74. package/dist/client/assets/{capability-load-error-DaNlM8PA.js → capability-load-error-DjeQRL2F.js} +1 -1
  75. package/dist/client/assets/{card-DWI_34Da.js → card-Bcboybeg.js} +1 -1
  76. package/dist/client/assets/{category-editor-D-rYhoBD.js → category-editor-CM9Pw4-4.js} +1 -1
  77. package/dist/client/assets/{chat-context-BOwGcE_A.js → chat-context-DCAsWyzi.js} +1 -1
  78. package/dist/client/assets/{checkbox-tnlQEu_f.js → checkbox-DqqjdX6Z.js} +1 -1
  79. package/dist/client/assets/{cli-auth-success-B6asT-0_.js → cli-auth-success-Bht3sRUb.js} +1 -1
  80. package/dist/client/assets/{collection-detail-BxIzrXWp.js → collection-detail-CMRIfo68.js} +1 -1
  81. package/dist/client/assets/{collection-display-button-Cp8sb1xW.js → collection-display-button-Bbkg9xtD.js} +1 -1
  82. package/dist/client/assets/{collection-search-DYrDm5KL.js → collection-search-C2TwQuRF.js} +1 -1
  83. package/dist/client/assets/{collection-table-wrapper-Ca8kow9h.js → collection-table-wrapper-DEoGtU_1.js} +1 -1
  84. package/dist/client/assets/{collection-tabs-9jlVmnnd.js → collection-tabs-F8TrtV23.js} +1 -1
  85. package/dist/client/assets/{command-BNufXRj1.js → command-k3v6Xmex.js} +1 -1
  86. package/dist/client/assets/{commerce-onboarding-BBINGvd5.js → commerce-onboarding-DQrumZem.js} +1 -1
  87. package/dist/client/assets/{companions-core-D_7TXcPF.js → companions-core-CyvPNYS0.js} +1 -1
  88. package/dist/client/assets/{connect-Cw3Zl8h_.js → connect-CuGt7QZR.js} +1 -1
  89. package/dist/client/assets/{connect-desktop-dialog-fcQZEjT1.js → connect-desktop-dialog-IyTSDycN.js} +1 -1
  90. package/dist/client/assets/{connection-card-DlbLvUZt.js → connection-card-CBwM3xvm.js} +1 -1
  91. package/dist/client/assets/{connection-detail-DoUuTYmW.js → connection-detail-BvCegtQ4.js} +1 -1
  92. package/dist/client/assets/{connection-form-helpers-BfmEOi9l.js → connection-form-helpers-C45t7I77.js} +1 -1
  93. package/dist/client/assets/{connections-BxbNq_CC.js → connections-Bb-Y_k01.js} +1 -1
  94. package/dist/client/assets/{decopilot-sse-pool-4-i2lGyT.js → decopilot-sse-pool-CMLIsRLl.js} +1 -1
  95. package/dist/client/assets/{dialog-CNavh_ID.js → dialog-oqiFUhNo.js} +1 -1
  96. package/dist/client/assets/{domain-settings-CyhWiyM_.js → domain-settings-U95gZQOb.js} +1 -1
  97. package/dist/client/assets/{drawer-CA8X_E6D.js → drawer-DD6HCP9L.js} +1 -1
  98. package/dist/client/assets/{dropdown-menu-Dg1DhL8o.js → dropdown-menu-DW-UAJqn.js} +1 -1
  99. package/dist/client/assets/{empty-state-DXNSLY55.js → empty-state-B594A1OG.js} +1 -1
  100. package/dist/client/assets/{extract-connection-data-B0MmXUM0.js → extract-connection-data-CfmjyIxp.js} +1 -1
  101. package/dist/client/assets/{file-explorer-COyU4dcu.js → file-explorer-BF3AyN5c.js} +1 -1
  102. package/dist/client/assets/{file-type-icon-DXQqJNWv.js → file-type-icon-DQYDXS0g.js} +1 -1
  103. package/dist/client/assets/{files-C9oWz4mh.js → files-Caeu78Tv.js} +1 -1
  104. package/dist/client/assets/{form-CsYbTpJv.js → form-DeT4tdop.js} +1 -1
  105. package/dist/client/assets/{general-CrOgMOvt.js → general-LQPSVgMQ.js} +1 -1
  106. package/dist/client/assets/{github-repo-picker-BNjYQs95.js → github-repo-picker-CfhBZg9Y.js} +1 -1
  107. package/dist/client/assets/{hooks-BKmDsGe6.js → hooks-Bitmc3MJ.js} +1 -1
  108. package/dist/client/assets/{index-DbnsY2vR.js → index-B5L9qVh9.js} +1 -1
  109. package/dist/client/assets/{index-Cl06_fgY.js → index-B9b2436L.js} +1 -1
  110. package/dist/client/assets/{index-AtS4xbpU.js → index-BsAvzWI1.js} +1 -1
  111. package/dist/client/assets/{index-DuvagTzB.js → index-Byqv3aFB.js} +1 -1
  112. package/dist/client/assets/{index-FJocbDYS.js → index-C2FFzKCN.js} +1 -1
  113. package/dist/client/assets/{index-CdUxdGTP.js → index-CtIsPS6_.js} +1 -1
  114. package/dist/client/assets/{index-Ck1aiM-y.js → index-Cy_KZBHC.js} +1 -1
  115. package/dist/client/assets/{index-CUzWKVSK.js → index-DHgsKfhO.js} +5 -5
  116. package/dist/client/assets/{index-53-y7TEo.js → index-DbT7xKax.js} +1 -1
  117. package/dist/client/assets/{index-DADg-eRW.js → index-DjXBfWnE.js} +3 -3
  118. package/dist/client/assets/{index-BnnkITRc.js → index-Dt8sYlva.js} +1 -1
  119. package/dist/client/assets/{index-Cr4tpIsH.js → index-DvOLG2Q-.js} +6 -6
  120. package/dist/client/assets/{index-CDgaQwUf.js → index-HwIDQr-R.js} +1 -1
  121. package/dist/client/assets/{index-BWokJR0T.js → index-Xl3CYX4z.js} +1 -1
  122. package/dist/client/assets/{index-redirect-CGK51Jx5.js → index-redirect-C6c9m4Lt.js} +1 -1
  123. package/dist/client/assets/{input-BfCUUoj3.js → input-BNbx9XDn.js} +1 -1
  124. package/dist/client/assets/{integration-icon-DsRso_fD.js → integration-icon-FiJGcEdU.js} +1 -1
  125. package/dist/client/assets/{invite-member-dialog-BjymDfDe.js → invite-member-dialog-rSR82K-S.js} +1 -1
  126. package/dist/client/assets/{label-CvivNPNS.js → label-BV5MaILX.js} +1 -1
  127. package/dist/client/assets/{layout-BDY9vkfA.js → layout-C2ZXZZYe.js} +1 -1
  128. package/dist/client/assets/{login-CNvX8EeU.js → login-qr018zR6.js} +1 -1
  129. package/dist/client/assets/{mcp-oauth-C4u6EfIt.js → mcp-oauth-BDq4WH8U.js} +1 -1
  130. package/dist/client/assets/{members-leo0TQhc.js → members-D_RqIP5o.js} +1 -1
  131. package/dist/client/assets/{monaco-editor-rv9m-l6Q.js → monaco-editor-Pqo6UXBL.js} +1 -1
  132. package/dist/client/assets/{monitoring-stats-row-Dmd5Lrs5.js → monitoring-stats-row-CkiCXa7l.js} +1 -1
  133. package/dist/client/assets/{multi-select-C6b9VjeT.js → multi-select-gstazskk.js} +1 -1
  134. package/dist/client/assets/{oauth-callback-CFCL4r2q.js → oauth-callback-EA6OTnJb.js} +1 -1
  135. package/dist/client/assets/{oauth-callback-ai-provider-DuTs4NMP.js → oauth-callback-ai-provider-DzhYj9EW.js} +1 -1
  136. package/dist/client/assets/{onboarding-BhPvLoJ9.js → onboarding-BuMToTe0.js} +1 -1
  137. package/dist/client/assets/{org-install-CJnRTbPS.js → org-install-JjwViteW.js} +1 -1
  138. package/dist/client/assets/{org-layout-DsylsKwD.js → org-layout-9axO2zJE.js} +1 -1
  139. package/dist/client/assets/{organization-choice-BNxZP8V0.js → organization-choice-iZU5gj3r.js} +1 -1
  140. package/dist/client/assets/{orgs-BU_9id_H.js → orgs-C2L_7Osm.js} +1 -1
  141. package/dist/client/assets/{page-seo-form-bY-5HOX-.js → page-seo-form-DMj80ATg.js} +1 -1
  142. package/dist/client/assets/page-seo-sheet-wGFCimS_.js +1 -0
  143. package/dist/client/assets/{popover-DD6XdQ52.js → popover-BiW9PUxL.js} +1 -1
  144. package/dist/client/assets/{post-editor-CUXDISVS.js → post-editor-CN8InVfr.js} +1 -1
  145. package/dist/client/assets/{primitives-BlJUEz8T.js → primitives-CD95b0XI.js} +1 -1
  146. package/dist/client/assets/{profile-CRlWmhXk.js → profile-TcxgoTBN.js} +1 -1
  147. package/dist/client/assets/project-app-view-CRCCwDJX.js +1 -0
  148. package/dist/client/assets/record-editor-CWkcuv1w.js +1 -0
  149. package/dist/client/assets/{redirect-editor-BSua_SgZ.js → redirect-editor-CJ49is_m.js} +1 -1
  150. package/dist/client/assets/registry-DsvmO69P.js +2 -0
  151. package/dist/client/assets/{registry-layout-B4dYrZo2.js → registry-layout-DkEnlCPL.js} +1 -1
  152. package/dist/client/assets/{reports-zA5dQ7dx.js → reports-yT7HV3qQ.js} +1 -1
  153. package/dist/client/assets/{require-capability-Co_c6Mfs.js → require-capability-DUyLQoXx.js} +1 -1
  154. package/dist/client/assets/{required-auth-layout-Bhcuvipf.js → required-auth-layout-B95yyzjT.js} +1 -1
  155. package/dist/client/assets/{reset-password-id8V-7ry.js → reset-password-SBNOA9rf.js} +1 -1
  156. package/dist/client/assets/{roles-C75qZHjS.js → roles-B4xaqpJf.js} +1 -1
  157. package/dist/client/assets/{search-input-DnHv6Bfo.js → search-input-DSVDuKVN.js} +1 -1
  158. package/dist/client/assets/{secrets-CPwtnUiZ.js → secrets-CTeYQCle.js} +1 -1
  159. package/dist/client/assets/{sections-editor-C8Jm9Q-n.js → sections-editor-pW_OOVxF.js} +1 -1
  160. package/dist/client/assets/{select-B9FacR86.js → select-KdMBITpv.js} +1 -1
  161. package/dist/client/assets/{select-model-D2ajwSX0.js → select-model-Cp11GE3V.js} +1 -1
  162. package/dist/client/assets/{self-tool-result-DPWaoMDu.js → self-tool-result-CnfHyXqD.js} +1 -1
  163. package/dist/client/assets/{seo-editor-C_k4p3V2.js → seo-editor-DTSCC_me.js} +1 -1
  164. package/dist/client/assets/{settings-layout-D2ZIrKs2.js → settings-layout-BurqlR-N.js} +1 -1
  165. package/dist/client/assets/{settings-section-CjXYZ8w1.js → settings-section-i4dHadSs.js} +1 -1
  166. package/dist/client/assets/{shell-controls-CclxlE8y.js → shell-controls-BRSCgaB_.js} +1 -1
  167. package/dist/client/assets/{shell-layout-V837oMz7.js → shell-layout-ChsdDbyU.js} +1 -1
  168. package/dist/client/assets/{sidebar-mcPsCK2S.js → sidebar-SV1i5Ee-.js} +1 -1
  169. package/dist/client/assets/{skeleton-ebOBBWFF.js → skeleton-d2OwoGsS.js} +1 -1
  170. package/dist/client/assets/{sso-C9CQGl6s.js → sso-gzLKiwRt.js} +1 -1
  171. package/dist/client/assets/{store-B_IkQGAp.js → store-BVdAdkW4.js} +1 -1
  172. package/dist/client/assets/store-registry-BjdMEVH_.js +2 -0
  173. package/dist/client/assets/{studio-tools-B3zb177t.js → studio-tools-CIlcbL_D.js} +1 -1
  174. package/dist/client/assets/{switch-CEilJb4P.js → switch-7ltlr7kY.js} +1 -1
  175. package/dist/client/assets/{table-AQETJoTB.js → table-XONvjTp0.js} +1 -1
  176. package/dist/client/assets/{tabs-B59ohLMF.js → tabs-Bj_xBrqm.js} +1 -1
  177. package/dist/client/assets/{textarea-DhDhVZOx.js → textarea-kRKjpadh.js} +1 -1
  178. package/dist/client/assets/{toggle-group-Dibq18vH.js → toggle-group-xQdS3in8.js} +1 -1
  179. package/dist/client/assets/{toolbar-cLCnXkwg.js → toolbar-DflHjpO1.js} +1 -1
  180. package/dist/client/assets/{toolbar-icon-button-C6CoUfsA.js → toolbar-icon-button-CMPDiYbN.js} +1 -1
  181. package/dist/client/assets/{tooltip-DaDwTvit.js → tooltip-C7NFNgEp.js} +1 -1
  182. package/dist/client/assets/{use-ai-providers-DftIlfJA.js → use-ai-providers-Bu1o9kbv.js} +1 -1
  183. package/dist/client/assets/{use-api-keys-Bfugbdhy.js → use-api-keys-CZJ2l6zR.js} +1 -1
  184. package/dist/client/assets/{use-automations-Dnz0ITTt.js → use-automations-hKIHS6WU.js} +1 -1
  185. package/dist/client/assets/{use-autosave-C0R8vu-_.js → use-autosave-KuoyHxn4.js} +1 -1
  186. package/dist/client/assets/{use-capability-xZkJNCZw.js → use-capability-DgSVXGNP.js} +1 -1
  187. package/dist/client/assets/{use-clock-tick-498bAXAc.js → use-clock-tick-D1HzVDoK.js} +1 -1
  188. package/dist/client/assets/{use-connection-Ck7XKbTz.js → use-connection-CB7m2Q7K.js} +1 -1
  189. package/dist/client/assets/{use-copy-C-NZefvp.js → use-copy-JQgS3yLP.js} +1 -1
  190. package/dist/client/assets/{use-create-virtual-mcp-Br9-7uWS.js → use-create-virtual-mcp-CUdQ92mQ.js} +1 -1
  191. package/dist/client/assets/{use-debounced-autosave-DpWYdaaW.js → use-debounced-autosave-BPgYnCOe.js} +1 -1
  192. package/dist/client/assets/{use-debounced-value-CDNo9vhp.js → use-debounced-value-Bdlv-9sR.js} +1 -1
  193. package/dist/client/assets/{use-deco-credits-B3_IFRIh.js → use-deco-credits-Cpe6vg4d.js} +1 -1
  194. package/dist/client/assets/{use-decopilot-events-R8S3hvIZ.js → use-decopilot-events-mofcO2d7.js} +1 -1
  195. package/dist/client/assets/{use-delete-connection-BSE6Zc9i.js → use-delete-connection-BQh3_hvP.js} +1 -1
  196. package/dist/client/assets/{use-deployment-admin-BuAR8E8u.js → use-deployment-admin-vR7QWW0P.js} +1 -1
  197. package/dist/client/assets/{use-file-configs-BkoDNGv5.js → use-file-configs-CTN4PHXE.js} +1 -1
  198. package/dist/client/assets/{use-infinite-scroll-C57C3Rug.js → use-infinite-scroll-sHjnEZhB.js} +1 -1
  199. package/dist/client/assets/{use-join-requests-DSG2Qlpu.js → use-join-requests-BIOnRxcr.js} +1 -1
  200. package/dist/client/assets/{use-mcp-auth-status-DI30xGcv.js → use-mcp-auth-status-8aWFtaM3.js} +1 -1
  201. package/dist/client/assets/{use-mcp-client-CS59ukvJ.js → use-mcp-client-V7uuD-C6.js} +1 -1
  202. package/dist/client/assets/{use-mcp-tools-Ba7F3Muw.js → use-mcp-tools-D4s70ig2.js} +1 -1
  203. package/dist/client/assets/{use-members-8f2PJCa2.js → use-members-DOZv0ZwI.js} +1 -1
  204. package/dist/client/assets/{use-mobile-kLSLCFd9.js → use-mobile-BzpJrEnt.js} +1 -1
  205. package/dist/client/assets/{use-navigate-to-agent-rJKVv9BI.js → use-navigate-to-agent-DyHWVg7e.js} +1 -1
  206. package/dist/client/assets/{use-org-auth-client-uScl5586.js → use-org-auth-client-w-8wO7Jo.js} +1 -1
  207. package/dist/client/assets/{use-org-sso-KqI62VaZ.js → use-org-sso-BjMyvCVT.js} +1 -1
  208. package/dist/client/assets/{use-organization-roles-Cr5yOB5X.js → use-organization-roles-BgdjwKs1.js} +1 -1
  209. package/dist/client/assets/{use-organization-settings-C_KMCSYR.js → use-organization-settings-ClYgOqLp.js} +1 -1
  210. package/dist/client/assets/{use-registry-app-DdlLxJuN.js → use-registry-app-BmX_eMaI.js} +1 -1
  211. package/dist/client/assets/{use-registry-connections-Dg0VJp8r.js → use-registry-connections-p6I882sI.js} +1 -1
  212. package/dist/client/assets/{use-secrets-CadxpfIf.js → use-secrets-CsceQoOj.js} +1 -1
  213. package/dist/client/assets/{use-status-sounds-5uFKlMGE.js → use-status-sounds-BVuc0AQQ.js} +1 -1
  214. package/dist/client/assets/{use-view-mode-D2LMsVS7.js → use-view-mode-DsdxgZhZ.js} +1 -1
  215. package/dist/client/assets/{use-virtual-mcp-BIYNPtPn.js → use-virtual-mcp-3p9JvaRB.js} +1 -1
  216. package/dist/client/assets/useInfiniteQuery-Cm67ZnT6.js +1 -0
  217. package/dist/client/assets/{useRouterState-Dkp5UAsH.js → useRouterState-ac6WChHX.js} +1 -1
  218. package/dist/client/assets/useSuspenseInfiniteQuery-CZyss4Vs.js +1 -0
  219. package/dist/client/assets/{users-BR6LLTQ9.js → users-BMmT5YlZ.js} +1 -1
  220. package/dist/client/assets/{variant-calendar-BbXvOPUV.js → variant-calendar-F7mbHPJe.js} +1 -1
  221. package/dist/client/assets/{view-mode-toggle-BhbvvGWW.js → view-mode-toggle-Bgv4Uuz6.js} +1 -1
  222. package/dist/client/index.html +1 -1
  223. package/dist/server/cli.js +61 -4
  224. package/dist/server/server.js +1 -1
  225. package/package.json +1 -1
  226. package/dist/client/assets/page-seo-sheet-CtoQT7T1.js +0 -1
  227. package/dist/client/assets/project-app-view-CVYrASLN.js +0 -1
  228. package/dist/client/assets/record-editor-CbMUuIxA.js +0 -1
  229. package/dist/client/assets/registry-DZsuvmOB.js +0 -2
  230. package/dist/client/assets/store-registry-BTPiCZGg.js +0 -2
  231. package/dist/client/assets/useInfiniteQuery-Cf_0YKpQ.js +0 -1
  232. package/dist/client/assets/useSuspenseInfiniteQuery-BZClNvPb.js +0 -1
@@ -14103,6 +14103,23 @@ function syncOriginRemote(repoDir, cloneUrl) {
14103
14103
  gitSync(["remote", "set-url", "origin", cloneUrl], { cwd: repoDir });
14104
14104
  }
14105
14105
 
14106
+ // daemon/decofile-json.ts
14107
+ var DECOFILE_BLOCK_RE = /(^|\\/)\\.deco\\/blocks\\/.+\\.json$/i;
14108
+ function isDecofileBlockPath(relPath) {
14109
+ return DECOFILE_BLOCK_RE.test(relPath.replace(/\\\\/g, "/"));
14110
+ }
14111
+ function invalidDecofileBlockJson(relPath, content) {
14112
+ const normalized = relPath.replace(/\\\\/g, "/");
14113
+ if (!isDecofileBlockPath(normalized))
14114
+ return null;
14115
+ try {
14116
+ JSON.parse(content);
14117
+ return null;
14118
+ } catch (e) {
14119
+ return \`invalid JSON in decofile block "\${normalized}": \${e.message}\`;
14120
+ }
14121
+ }
14122
+
14106
14123
  // daemon/git/git-async.ts
14107
14124
  import { spawn as spawn2 } from "child_process";
14108
14125
  var DEFAULT_GIT_TIMEOUT_MS2 = 30000;
@@ -14424,7 +14441,14 @@ function pushBranch(repoDir, branch) {
14424
14441
  }
14425
14442
  });
14426
14443
  }
14427
- function publish(deps, message) {
14444
+
14445
+ class InvalidDecofileBlockError extends Error {
14446
+ constructor(message) {
14447
+ super(message);
14448
+ this.name = "InvalidDecofileBlockError";
14449
+ }
14450
+ }
14451
+ function publish(deps, message, opts = {}) {
14428
14452
  const repoDir = deps.repoDir;
14429
14453
  if (!isGitRepo(repoDir)) {
14430
14454
  return { pushed: false };
@@ -14437,7 +14461,31 @@ function publish(deps, message) {
14437
14461
  throw new Error(\`Refusing to push to protected branch "\${branch}" from a sandbox. Work on a feature branch; changes reach the default branch via PR.\`);
14438
14462
  }
14439
14463
  const status = computeWorkingTreeStatus(repoDir);
14440
- const paths = changedPathsFromStatus(status);
14464
+ let paths = changedPathsFromStatus(status);
14465
+ const invalidBlocks = [];
14466
+ for (const rel of paths) {
14467
+ if (!isDecofileBlockPath(rel))
14468
+ continue;
14469
+ let content;
14470
+ try {
14471
+ content = fs4.readFileSync(path3.join(repoDir, rel), "utf-8");
14472
+ } catch {
14473
+ continue;
14474
+ }
14475
+ const jsonError = invalidDecofileBlockJson(rel, content);
14476
+ if (!jsonError)
14477
+ continue;
14478
+ if (opts.onInvalidBlock === "skip") {
14479
+ console.warn(\`[daemon] skipping from sync: \${jsonError}\`);
14480
+ invalidBlocks.push(rel);
14481
+ } else {
14482
+ throw new InvalidDecofileBlockError(\`Refusing to publish: \${jsonError}\`);
14483
+ }
14484
+ }
14485
+ if (invalidBlocks.length > 0) {
14486
+ const skip = new Set(invalidBlocks);
14487
+ paths = paths.filter((p) => !skip.has(p));
14488
+ }
14441
14489
  if (paths.length > 0) {
14442
14490
  runGit2(repoDir, ["add", "--", ...paths]);
14443
14491
  }
@@ -14542,6 +14590,9 @@ function makeGitPublishHandler(deps) {
14542
14590
  try {
14543
14591
  return jsonResponse(publish(deps, typeof body.message === "string" ? body.message : ""));
14544
14592
  } catch (err) {
14593
+ if (err instanceof InvalidDecofileBlockError) {
14594
+ return jsonResponse({ error: err.message }, 400);
14595
+ }
14545
14596
  return jsonResponse({ error: formatGitError2(err) }, 500);
14546
14597
  }
14547
14598
  };
@@ -81557,6 +81608,9 @@ function makeWriteHandler(deps) {
81557
81608
  const filePath = safePath(deps.appRoot, deps.repoDir, body.path ?? "");
81558
81609
  if (!filePath)
81559
81610
  return jsonResponse({ error: "Path escapes app root" }, 400);
81611
+ const jsonError = invalidDecofileBlockJson(body.path ?? "", body.content);
81612
+ if (jsonError)
81613
+ return jsonResponse({ error: \`Refusing to write \${jsonError}\` }, 400);
81560
81614
  fs7.mkdirSync(path5.dirname(filePath), { recursive: true });
81561
81615
  fs7.writeFileSync(filePath, body.content, "utf-8");
81562
81616
  deps.onWorkingTreeWrite?.(body.path ?? "");
@@ -81710,6 +81764,9 @@ function makeEditHandler(deps) {
81710
81764
  error: \`old_string found \${count} times. Use replace_all or provide more context to make it unique.\`
81711
81765
  }, 400);
81712
81766
  const updated = replaceAll ? content.replaceAll(body.old_string, body.new_string) : content.replace(body.old_string, body.new_string);
81767
+ const jsonError = invalidDecofileBlockJson(body.path ?? "", updated);
81768
+ if (jsonError)
81769
+ return jsonResponse({ error: \`Refusing to write \${jsonError}\` }, 400);
81713
81770
  fs7.writeFileSync(filePath, updated, "utf-8");
81714
81771
  deps.onWorkingTreeWrite?.(body.path ?? "");
81715
81772
  return jsonResponse({
@@ -84343,7 +84400,7 @@ async function shutdown() {
84343
84400
  const branch = store.read()?.git?.repository?.branch;
84344
84401
  if (branch) {
84345
84402
  try {
84346
- publish(gitDeps, "chore(daemon): sync all local changes to remote on shutdown");
84403
+ publish(gitDeps, "chore(daemon): sync all local changes to remote on shutdown", { onInvalidBlock: "skip" });
84347
84404
  } catch (err) {
84348
84405
  console.warn("[daemon] shutdown publish failed", err);
84349
84406
  }
@@ -84564,7 +84621,7 @@ ${$}`;h(O);return}if(E(null,y),t.strategy==="count"){if(w--,w===0)h()}if(t.strat
84564
84621
  `);function h(_){if(t===void 0)return!0;let v=sM(_),D=v&&sM(t)?feu(t):t,n=v?feu(_):leu(_),N=qCt(D,n);return N===""||!N.startsWith("..")&&!CCt(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(Y1i)},reconcile(){let _=Date.now();for(let v of l.all().map(Y1i)){if(!h(v.sandboxPath)){c.run({$handle:v.handle,$now:_});continue}if(!sM(v.sandboxPath)){E.run({$handle:v.handle,$now:_});continue}if(v.status==="spawning"||v.status==="ready"||v.status==="failed"||v.status==="missing")$.run({$handle:v.handle,$now:_})}return l.all().map(Y1i)},prune(_){let v=[],D=[],n=this.reconcile();for(let N of n){if(!h(N.sandboxPath)){D.push({handle:N.handle,sandboxPath:N.sandboxPath,reason:"outside_root",deletedFiles:!1});continue}if(_.missing&&N.status==="missing"){w.run({$handle:N.handle}),v.push({handle:N.handle,sandboxPath:N.sandboxPath,reason:"missing",deletedFiles:!1});continue}if(!_.merged||!sM(N.sandboxPath))continue;if(N.branch===null||N.branch.trim()===""){D.push({handle:N.handle,sandboxPath:N.sandboxPath,reason:"no_branch",deletedFiles:!1});continue}if(!On(N.sandboxPath,["rev-parse","--is-inside-work-tree"]).ok){D.push({handle:N.handle,sandboxPath:N.sandboxPath,reason:"git_unavailable",deletedFiles:!1});continue}let O=On(N.sandboxPath,["status","--porcelain"]);if(!O.ok){D.push({handle:N.handle,sandboxPath:N.sandboxPath,reason:"git_unavailable",deletedFiles:!1});continue}if(O.stdout.trim()!==""){D.push({handle:N.handle,sandboxPath:N.sandboxPath,reason:"dirty_worktree",deletedFiles:!1});continue}let y=Eeu(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}RCt(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=Y1i(v),n=0,N=null;if(sM(D.sandboxPath)&&On(D.sandboxPath,["rev-parse","--is-inside-work-tree"]).ok){let O=On(D.sandboxPath,["status","--porcelain"]);if(O.ok){let y=O.stdout.trim();n=y===""?0:y.split(`
84565
84622
  `).length}if(D.branch!==null&&D.branch.trim()!=="")N=Eeu(D.sandboxPath,D.branch)}return{handle:D.handle,branch:D.branch,sandboxPath:D.sandboxPath,dirtyCount:n,merged:N}},close(){u.close()}}}var CRi=()=>{};function eCt(i,u){return u?[["umount","-f",i]]:[["fusermount","-uz",i],["umount","-l",i]]}function weu(i,u){if(process.platform==="win32")return;for(let t of eCt(i,u))if(Bun.spawnSync(t,{stdout:"ignore",stderr:"ignore",timeout:5000}).exitCode===0)break}var deu=()=>{};import{existsSync as aCt,readdirSync as oCt}from"fs";import{rm as sCt}from"fs/promises";import{join as heu}from"path";async function _eu(i,u={}){let t=u.detach??pCt,f=u.exists??aCt,l=u.readdir??(($)=>oCt($)),c=u.rm??(($)=>sCt($,{recursive:!0,force:!0})),E=heu(i,"org");if(f(E))for(let $ of l(E))t(heu(E,$));await c(i)}var pCt=(i)=>weu(i,process.platform==="darwin");var veu=g(()=>{deu()});import{join as iMt}from"path";function Deu(i){let u=i.purge??_eu;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??iMt(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 neu=g(()=>{O4();veu()});import{randomBytes as uMt}from"crypto";import{mkdir as tMt}from"fs/promises";import{createServer as fMt}from"net";import{join as lMt}from"path";function geu(i,u){return Error(`sandbox failed to start: ${i}`,{cause:u})}function Neu(i){if(!(i instanceof Error))return!1;return i.name==="TimeoutError"||/timed out|timeout|operation was aborted|aborted/i.test(i.message)}function Oeu(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 cMt(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 EMt(i){return{repoCloneUrl:i.repo?.cloneUrl??null,branch:i.repo?.branch??null,projectName:cMt(i.repo?.cloneUrl)}}function yeu(i){let u=i.maxSandboxes??20,t=new Map,f=i.pickPort??$Mt,l=i.fetchImpl??fetch,c=i.resolvePreviewUrl??((n,N)=>`http://127.0.0.1:${N}`),E=(n)=>lMt(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=EMt(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 tMt(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=uMt(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 geu("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 geu(Neu(S)?"configuration timed out":"the sandbox rejected its configuration",S)}}catch(k){if((Neu(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:Oeu(k),sandboxPath:O,projectName:N.projectName,branch:N.branch}),$({handle:n.handle,status:"failed",sandboxPath:O,port:null,previewUrl:null,...N,error:Oeu(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 $Mt(){return new Promise((i,u)=>{let t=fMt();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 Zeu=()=>{};import{randomUUID as wMt}from"crypto";import{hostname as dMt}from"os";async function Teu(i){let u=dMt()||void 0;i.monitor?.onMachine?.(u??"this machine");let t=pbu(i.dataDir,{outFd:i.logFd,perSandboxLog:i.perSandboxLogs,hotReload:i.hotReload}),f=z1i({path:Q1i(i.dataDir),managedSandboxRoot:`${i.dataDir}/sandboxes`}),l=!1,c=()=>{if(l)return;l=!0;try{f.close()}catch{}};try{let E=0,$=yeu({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:wMt(),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 fCu(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 Qli(`http://127.0.0.1:${S}`)},maxSandboxes:20,onEvent:i.monitor?.onEvent}),w=await qmu({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=cCu({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 ueu(i.dataDir),v=process.env.npm_package_version??"0.0.0",D=await bRi(),n=pmu(D,{onChange:(S)=>{console.log(`[link-daemon] capabilities detected: +${S.join(",")} (now: ${D.join(",")})`)}}),N=Szi({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 Jmu(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
84623
  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=Deu({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 Beu=g(()=>{Uzi();BM();iCu();lCu();ECu();jzi();Xmu();Vmu();ieu();teu();TM();CRi();neu();Zeu()});function MRi(i){return i.map((u)=>typeof u==="string"?u:String(u)).join(" ")}import{createServer as hMt}from"net";async function vMt(i){for(let u of _Mt)if(await qRi(i,u))return u;return null}async function Feu(i,{intervalMs:u=1000}={}){for(;;){let t=await vMt(i);if(t)return t;await N0(u)}}function qRi(i,u){return new Promise((t)=>{let f=hMt();f.once("error",(l)=>{t(l.code==="EADDRINUSE")}),f.listen(i,u,()=>{f.close(()=>t(!1))})})}var _Mt;var VRi=g(()=>{O4();_Mt=["localhost","127.0.0.1","0.0.0.0"]});function Ueu(i){return typeof i==="object"&&i!==null&&"code"in i&&i.code==="EADDRINUSE"}function DMt(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 Peu(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`:","",` ${DMt(i,u)}`].join(`
84567
- `)}var rRi;var Aeu=g(()=>{rRi=class rRi extends Error{port;code="EADDRINUSE";constructor(i){super(`Port ${i} is already in use.`);this.port=i;this.name="PortInUseError"}}});var fW;var H1i=g(()=>{fW={name:"decocms",version:"4.100.0",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/mesh"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:'bun run migrate && concurrently "bun run dev:client" "bun run dev:server"',"dev:servers":'concurrently "bun run dev:client" "bun run dev:server"',"dev:client":"vite dev","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts","build:client":"bun --bun vite build","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","db:migrate":"bun run ./dist/server/migrate.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts",test:"bun test","test:ct":"playwright test -c playwright-ct.config.ts","test:ct:ui":"playwright test -c playwright-ct.config.ts --ui","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts","smoke:link":"bun run scripts/smoke-link.ts",prepublishOnly:"bun run build:client && bun run build:server"},optionalDependencies:{"@anthropic-ai/claude-agent-sdk":"^0.3.181","@duckdb/node-api":"^1.5.0-r.1","@openai/codex":"0.144.3","@openai/codex-darwin-arm64":"npm:@openai/codex@0.144.3-darwin-arm64","@openai/codex-darwin-x64":"npm:@openai/codex@0.144.3-darwin-x64","@openai/codex-linux-arm64":"npm:@openai/codex@0.144.3-linux-arm64","@openai/codex-linux-x64":"npm:@openai/codex@0.144.3-linux-x64","@openai/codex-win32-arm64":"npm:@openai/codex@0.144.3-win32-arm64","@openai/codex-win32-x64":"npm:@openai/codex@0.144.3-win32-x64"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@dnd-kit/core":"^6.3.1","@dnd-kit/sortable":"^10.0.0","@dnd-kit/utilities":"^3.2.2","@inkjs/ui":"^2.0.0","@modelcontextprotocol/ext-apps":"^1.7.1","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","@tanstack/react-virtual":"3.13.24","@tiptap/extension-text-align":"3.20.2","@xterm/addon-fit":"^0.11.0","@xterm/xterm":"^6.0.0",echarts:"^5.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","node-pty":"^1.0.0","posthog-js":"^1.371.1","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6","use-stick-to-bottom":"^1.1.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@ai-sdk/react":"^3.0.210","@better-auth/sso":"1.4.1","@daveyplate/better-auth-ui":"^3.2.7","@deco/ui":"workspace:*","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/harness":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/mesh-sdk":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/std":"workspace:*","@decocms/tunnel":"workspace:*","@floating-ui/react":"^0.27.16","@happy-dom/global-registrator":"^20.9.0","@hookform/resolvers":"^5.2.2","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@monaco-editor/react":"^4.7.0","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@playwright/experimental-ct-react":"1.59.1","@playwright/test":"^1.58.2","@radix-ui/react-avatar":"^1.1.10","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-dropdown-menu":"^2.1.16","@radix-ui/react-label":"^2.1.7","@radix-ui/react-select":"^2.2.6","@radix-ui/react-separator":"^1.1.7","@radix-ui/react-slot":"^1.2.3","@radix-ui/react-tabs":"^1.1.13","@rjsf/shadcn":"^6.6.2","@rjsf/utils":"^6.6.2","@rjsf/validator-ajv8":"^6.6.2","@tailwindcss/vite":"^4.1.17","@tanstack/react-query":"5.100.10","@tanstack/react-router":"1.169.2","@testing-library/jest-dom":"^6.9.1","@testing-library/react":"^16.3.2","@tiptap/core":"3.20.2","@tiptap/extension-placeholder":"3.20.2","@tiptap/pm":"3.20.2","@tiptap/react":"3.20.2","@tiptap/starter-kit":"3.20.2","@tiptap/suggestion":"3.20.2","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@untitledui/icons":"^0.0.19","@vercel/nft":"^1.1.1","@vitejs/plugin-react":"^5.1.0",ai:"^6.0.208","babel-plugin-react-compiler":"^1.0.0","better-auth":"1.4.22","class-variance-authority":"^0.7.1",clsx:"^2.1.1",concurrently:"^9.2.1",croner:"^9.1.0","date-fns":"^4.1.0",degit:"^2.8.4",hono:"^4.10.7","input-otp":"^1.4.2",jose:"^6.0.11","lucide-react":"^0.468.0",marked:"^15.0.6",nanoid:"^5.1.6",pg:"^8.16.3",prettier:"^3.4.2","react-hook-form":"^7.66.0","react-markdown":"^10.1.0","react-resizable-panels":"^2.1.7","react-syntax-highlighter":"^15.6.1",recharts:"^3.6.0","rehype-raw":"^7.0.0","remark-gfm":"^4.0.0","sass-embedded":"^1.97.2",sonner:"^2.0.7","tailwind-merge":"^3.3.1",tailwindcss:"^4.1.17",typescript:"^5.9.3",vite:"^7.2.1","vite-tsconfig-paths":"^5.1.4",zod:"^4.0.0"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","mesh","tools"],license:"MIT",publishConfig:{access:"public"}}});var pM={};Ji(pM,{printBanner:()=>NMt,bannerLines:()=>Ieu,BANNER_LINES:()=>R1i,BANNER_GRADIENT:()=>b1i});function gMt(i){let u=Number.parseInt(i.slice(1),16);return[u>>16&255,u>>8&255,u&255]}function Ieu(i){let u=R1i.map((t,f)=>{let[l,c,E]=gMt(b1i[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 NMt(i){console.log("");for(let u of Ieu(i))console.log(u);console.log("")}var R1i,b1i;var lW=g(()=>{R1i=[" \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 "],b1i=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"]});import{Box as OMt,Text as xeu}from"ink";import{jsx as yMt,jsxs as keu}from"react/jsx-runtime";function C1i({version:i}){return keu(OMt,{flexDirection:"column",marginTop:1,children:[R1i.map((u,t)=>yMt(xeu,{color:b1i[t],children:u},t)),keu(xeu,{dimColor:!0,children:[" v",i]})]})}var mRi=g(()=>{lW()});function Geu(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 Seu(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 jeu(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 sRi={};Ji(sRi,{subscribeLinkState:()=>eRi,setSelectedHandle:()=>aRi,setRemoving:()=>V1i,setPersistedSandboxes:()=>kMt,setPendingConfirm:()=>uq,setMachine:()=>PMt,setLogPath:()=>IMt,setLinkActions:()=>xMt,setIngress:()=>UMt,setDaemonError:()=>AMt,setClusterUrl:()=>FMt,setCluster:()=>BMt,setActionError:()=>q1i,resetLinkStateForTests:()=>SMt,removeSandboxRow:()=>oRi,pushSandboxEvent:()=>GMt,getLinkState:()=>iq,applySandboxEvent:()=>Keu});function TMt(i){return i==="spawning"||i==="ready"||i==="failed"}function Keu(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 Jeu(){return{cluster:"connecting",clusterUrl:null,ingressUrl:null,ingressPort:null,machine:null,cap:ZMt,sandboxes:new Map,daemonError:null,logPath:null,selectedHandle:null,pendingConfirm:null,removingHandles:new Set,actionError:null,actions:null}}function Y$(){for(let i of M1i)i()}function iq(){return lf}function eRi(i){return M1i.add(i),()=>M1i.delete(i)}function BMt(i){lf={...lf,cluster:i},Y$()}function FMt(i){lf={...lf,clusterUrl:i},Y$()}function UMt(i,u){lf={...lf,ingressPort:i,ingressUrl:u},Y$()}function PMt(i){lf={...lf,machine:i},Y$()}function AMt(i){lf={...lf,daemonError:i},Y$()}function IMt(i){lf={...lf,logPath:i},Y$()}function aRi(i){lf={...lf,selectedHandle:i},Y$()}function uq(i){lf={...lf,pendingConfirm:i},Y$()}function q1i(i){lf={...lf,actionError:i},Y$()}function V1i(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 xMt(i){lf={...lf,actions:i},Y$()}function oRi(i){let u=cW(lf.sandboxes),t=jeu(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 kMt(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(TMt(f.status))u.set(t,f);lf={...lf,sandboxes:u},Y$()}function GMt(i){lf={...lf,sandboxes:Keu(lf.sandboxes,i)},Y$()}function SMt(){lf=Jeu(),M1i.clear()}var ZMt=20,lf,M1i;var tq=g(()=>{lf=Jeu(),M1i=new Set});import{spawn as jMt}from"child_process";function KMt(i){if(i==="darwin")return"open";if(i==="win32")return"start";return"xdg-open"}function Xeu(i,u=process.platform){let t=KMt(u);try{jMt(t,[i],{stdio:"ignore",detached:!0}).unref()}catch{}}var Leu=()=>{};function Weu(i,u={}){let t=u.openUrl??Xeu,f=iq(),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":aRi(Seu(l,f.selectedHandle,i.delta));return;case"open":{if(c===null)return;let $=f.sandboxes.get(c);if($?.status==="ready"&&$.previewUrl)t($.previewUrl);return}case"stop":if(c!==null&&E)E.stopSandbox(c);return;case"delete":{if(c===null||!E)return;let $=E.inspectSandbox(c),w=f.sandboxes.get(c);q1i(null),uq({handle:c,branch:$?.branch??w?.branch??null,dirtyCount:$?.dirtyCount??0,merged:$?.merged??null});return}case"confirmYes":{let $=f.pendingConfirm;if(uq(null),$===null||!E)return;V1i($.handle,!0),E.removeSandbox($.handle).then((w)=>{if(w.ok)oRi($.handle);else V1i($.handle,!1),q1i(w.error)});return}case"confirmNo":uq(null);return;case"quit":if(E)E.quit();return}}var Yeu=g(()=>{tq();Leu()});function Qeu(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 zeu={};Ji(zeu,{LinkApp:()=>WMt});import{Box as Ml,Text as _1,useInput as JMt}from"ink";import{useSyncExternalStore as XMt}from"react";import{jsx as kf,jsxs as Uh}from"react/jsx-runtime";function LMt(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 WMt(){let i=XMt(eRi,iq),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 JMt((l,c)=>{let E=Qeu(l,c,i.pendingConfirm!==null);if(E!==null)Weu(E)}),Uh(Ml,{flexDirection:"column",children:[kf(C1i,{version:fW.version}),kf(Ml,{marginBottom:1,children:kf(_1,{dimColor:!0,children:"\u2500".repeat(80)})}),kf(Ml,{children:i.cluster==="linked"?Uh(_1,{color:"green",children:["\u2713 Connected to ",i.clusterUrl??"deco"]}):i.cluster==="connecting"?Uh(_1,{color:"yellow",children:["\u25CC Connecting to ",i.clusterUrl??"deco","\u2026"]}):Uh(_1,{color:"red",children:["\u2717 Disconnected from ",i.clusterUrl??"deco"]})}),kf(Ml,{children:i.ingressUrl?Uh(_1,{color:"green",children:["\u2713 Serving at ",i.ingressUrl]}):kf(_1,{dimColor:!0,children:"\u25CC Starting local server\u2026"})}),kf(Ml,{marginBottom:1,children:kf(_1,{dimColor:!0,children:`${"Computer".padEnd(16)}${i.machine??"this computer"} \xB7 ${u.length} of ${i.cap} previews`})}),u.length===0?kf(_1,{dimColor:!0,children:"No previews running yet."}):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(_1,{dimColor:!0,wrap:"truncate-end",children:"PROJECT"})}),kf(Ml,{width:EW.branch,flexShrink:0,marginRight:1,children:kf(_1,{dimColor:!0,wrap:"truncate-end",children:"BRANCH"})}),kf(Ml,{width:EW.status,flexShrink:0,marginRight:1,children:kf(_1,{dimColor:!0,wrap:"truncate-end",children:"STATUS"})}),kf(Ml,{flexGrow:1,children:kf(_1,{dimColor:!0,wrap:"truncate-end",children:"PREVIEW URL"})})]}),u.map((l)=>{let c=LMt(l,i.removingHandles.has(l.handle)),E=l.handle===f;return Uh(Ml,{children:[kf(Ml,{width:2,flexShrink:0,children:kf(_1,{color:"cyan",children:E?"\u203A":" "})}),kf(Ml,{width:EW.project,flexShrink:0,marginRight:1,children:kf(_1,{bold:E,wrap:"truncate-end",children:l.projectName??l.handle})}),kf(Ml,{width:EW.branch,flexShrink:0,marginRight:1,children:kf(_1,{bold:E,wrap:"truncate-end",children:l.branch??"\u2014"})}),kf(Ml,{width:EW.status,flexShrink:0,marginRight:1,children:kf(_1,{color:c.color,bold:E,wrap:"truncate-end",children:c.text})}),kf(Ml,{flexGrow:1,children:kf(_1,{dimColor:!0,wrap:"truncate-end",children:l.previewUrl??"\u2014"})})]},l.handle)})]}),i.daemonError?kf(Ml,{marginTop:1,children:Uh(_1,{color:"red",children:["\u26A0 ",i.daemonError]})}):null,i.logPath?kf(Ml,{marginTop:1,children:Uh(_1,{dimColor:!0,children:["Logs: ",i.logPath]})}):null,i.pendingConfirm?kf(Ml,{marginTop:1,children:kf(_1,{color:"yellow",children:Geu(i.pendingConfirm)})}):null,i.actionError?kf(Ml,{marginTop:1,children:Uh(_1,{color:"red",children:["\u2717 ",i.actionError]})}):null,kf(Ml,{marginTop:1,children:kf(_1,{dimColor:!0,children:"\u2191\u2193 move \xB7 s stop \xB7 d delete \xB7 o open \xB7 q quit"})})]})}var EW;var Heu=g(()=>{H1i();mRi();Yeu();tq();EW={project:18,branch:22,status:14}});var Reu={};Ji(Reu,{runLinkCommand:()=>MMt});import{closeSync as YMt,mkdirSync as QMt,openSync as zMt,writeSync as HMt}from"fs";import{homedir as RMt}from"os";import{join as pRi}from"path";function bMt(i,u){let t={log:console.log,warn:console.warn,error:console.error},f=(l)=>{if(u===void 0)return;try{HMt(u,`${MRi(l)}
84624
+ `)}var rRi;var Aeu=g(()=>{rRi=class rRi extends Error{port;code="EADDRINUSE";constructor(i){super(`Port ${i} is already in use.`);this.port=i;this.name="PortInUseError"}}});var fW;var H1i=g(()=>{fW={name:"decocms",version:"4.100.2",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/mesh"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:'bun run migrate && concurrently "bun run dev:client" "bun run dev:server"',"dev:servers":'concurrently "bun run dev:client" "bun run dev:server"',"dev:client":"vite dev","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts","build:client":"bun --bun vite build","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","db:migrate":"bun run ./dist/server/migrate.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts",test:"bun test","test:ct":"playwright test -c playwright-ct.config.ts","test:ct:ui":"playwright test -c playwright-ct.config.ts --ui","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts","smoke:link":"bun run scripts/smoke-link.ts",prepublishOnly:"bun run build:client && bun run build:server"},optionalDependencies:{"@anthropic-ai/claude-agent-sdk":"^0.3.181","@duckdb/node-api":"^1.5.0-r.1","@openai/codex":"0.144.3","@openai/codex-darwin-arm64":"npm:@openai/codex@0.144.3-darwin-arm64","@openai/codex-darwin-x64":"npm:@openai/codex@0.144.3-darwin-x64","@openai/codex-linux-arm64":"npm:@openai/codex@0.144.3-linux-arm64","@openai/codex-linux-x64":"npm:@openai/codex@0.144.3-linux-x64","@openai/codex-win32-arm64":"npm:@openai/codex@0.144.3-win32-arm64","@openai/codex-win32-x64":"npm:@openai/codex@0.144.3-win32-x64"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@dnd-kit/core":"^6.3.1","@dnd-kit/sortable":"^10.0.0","@dnd-kit/utilities":"^3.2.2","@inkjs/ui":"^2.0.0","@modelcontextprotocol/ext-apps":"^1.7.1","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","@tanstack/react-virtual":"3.13.24","@tiptap/extension-text-align":"3.20.2","@xterm/addon-fit":"^0.11.0","@xterm/xterm":"^6.0.0",echarts:"^5.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","node-pty":"^1.0.0","posthog-js":"^1.371.1","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6","use-stick-to-bottom":"^1.1.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@ai-sdk/react":"^3.0.210","@better-auth/sso":"1.4.1","@daveyplate/better-auth-ui":"^3.2.7","@deco/ui":"workspace:*","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/harness":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/mesh-sdk":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/std":"workspace:*","@decocms/tunnel":"workspace:*","@floating-ui/react":"^0.27.16","@happy-dom/global-registrator":"^20.9.0","@hookform/resolvers":"^5.2.2","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@monaco-editor/react":"^4.7.0","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@playwright/experimental-ct-react":"1.59.1","@playwright/test":"^1.58.2","@radix-ui/react-avatar":"^1.1.10","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-dropdown-menu":"^2.1.16","@radix-ui/react-label":"^2.1.7","@radix-ui/react-select":"^2.2.6","@radix-ui/react-separator":"^1.1.7","@radix-ui/react-slot":"^1.2.3","@radix-ui/react-tabs":"^1.1.13","@rjsf/shadcn":"^6.6.2","@rjsf/utils":"^6.6.2","@rjsf/validator-ajv8":"^6.6.2","@tailwindcss/vite":"^4.1.17","@tanstack/react-query":"5.100.10","@tanstack/react-router":"1.169.2","@testing-library/jest-dom":"^6.9.1","@testing-library/react":"^16.3.2","@tiptap/core":"3.20.2","@tiptap/extension-placeholder":"3.20.2","@tiptap/pm":"3.20.2","@tiptap/react":"3.20.2","@tiptap/starter-kit":"3.20.2","@tiptap/suggestion":"3.20.2","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@untitledui/icons":"^0.0.19","@vercel/nft":"^1.1.1","@vitejs/plugin-react":"^5.1.0",ai:"^6.0.208","babel-plugin-react-compiler":"^1.0.0","better-auth":"1.4.22","class-variance-authority":"^0.7.1",clsx:"^2.1.1",concurrently:"^9.2.1",croner:"^9.1.0","date-fns":"^4.1.0",degit:"^2.8.4",hono:"^4.10.7","input-otp":"^1.4.2",jose:"^6.0.11","lucide-react":"^0.468.0",marked:"^15.0.6",nanoid:"^5.1.6",pg:"^8.16.3",prettier:"^3.4.2","react-hook-form":"^7.66.0","react-markdown":"^10.1.0","react-resizable-panels":"^2.1.7","react-syntax-highlighter":"^15.6.1",recharts:"^3.6.0","rehype-raw":"^7.0.0","remark-gfm":"^4.0.0","sass-embedded":"^1.97.2",sonner:"^2.0.7","tailwind-merge":"^3.3.1",tailwindcss:"^4.1.17",typescript:"^5.9.3",vite:"^7.2.1","vite-tsconfig-paths":"^5.1.4",zod:"^4.0.0"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","mesh","tools"],license:"MIT",publishConfig:{access:"public"}}});var pM={};Ji(pM,{printBanner:()=>NMt,bannerLines:()=>Ieu,BANNER_LINES:()=>R1i,BANNER_GRADIENT:()=>b1i});function gMt(i){let u=Number.parseInt(i.slice(1),16);return[u>>16&255,u>>8&255,u&255]}function Ieu(i){let u=R1i.map((t,f)=>{let[l,c,E]=gMt(b1i[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 NMt(i){console.log("");for(let u of Ieu(i))console.log(u);console.log("")}var R1i,b1i;var lW=g(()=>{R1i=[" \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 "],b1i=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"]});import{Box as OMt,Text as xeu}from"ink";import{jsx as yMt,jsxs as keu}from"react/jsx-runtime";function C1i({version:i}){return keu(OMt,{flexDirection:"column",marginTop:1,children:[R1i.map((u,t)=>yMt(xeu,{color:b1i[t],children:u},t)),keu(xeu,{dimColor:!0,children:[" v",i]})]})}var mRi=g(()=>{lW()});function Geu(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 Seu(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 jeu(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 sRi={};Ji(sRi,{subscribeLinkState:()=>eRi,setSelectedHandle:()=>aRi,setRemoving:()=>V1i,setPersistedSandboxes:()=>kMt,setPendingConfirm:()=>uq,setMachine:()=>PMt,setLogPath:()=>IMt,setLinkActions:()=>xMt,setIngress:()=>UMt,setDaemonError:()=>AMt,setClusterUrl:()=>FMt,setCluster:()=>BMt,setActionError:()=>q1i,resetLinkStateForTests:()=>SMt,removeSandboxRow:()=>oRi,pushSandboxEvent:()=>GMt,getLinkState:()=>iq,applySandboxEvent:()=>Keu});function TMt(i){return i==="spawning"||i==="ready"||i==="failed"}function Keu(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 Jeu(){return{cluster:"connecting",clusterUrl:null,ingressUrl:null,ingressPort:null,machine:null,cap:ZMt,sandboxes:new Map,daemonError:null,logPath:null,selectedHandle:null,pendingConfirm:null,removingHandles:new Set,actionError:null,actions:null}}function Y$(){for(let i of M1i)i()}function iq(){return lf}function eRi(i){return M1i.add(i),()=>M1i.delete(i)}function BMt(i){lf={...lf,cluster:i},Y$()}function FMt(i){lf={...lf,clusterUrl:i},Y$()}function UMt(i,u){lf={...lf,ingressPort:i,ingressUrl:u},Y$()}function PMt(i){lf={...lf,machine:i},Y$()}function AMt(i){lf={...lf,daemonError:i},Y$()}function IMt(i){lf={...lf,logPath:i},Y$()}function aRi(i){lf={...lf,selectedHandle:i},Y$()}function uq(i){lf={...lf,pendingConfirm:i},Y$()}function q1i(i){lf={...lf,actionError:i},Y$()}function V1i(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 xMt(i){lf={...lf,actions:i},Y$()}function oRi(i){let u=cW(lf.sandboxes),t=jeu(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 kMt(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(TMt(f.status))u.set(t,f);lf={...lf,sandboxes:u},Y$()}function GMt(i){lf={...lf,sandboxes:Keu(lf.sandboxes,i)},Y$()}function SMt(){lf=Jeu(),M1i.clear()}var ZMt=20,lf,M1i;var tq=g(()=>{lf=Jeu(),M1i=new Set});import{spawn as jMt}from"child_process";function KMt(i){if(i==="darwin")return"open";if(i==="win32")return"start";return"xdg-open"}function Xeu(i,u=process.platform){let t=KMt(u);try{jMt(t,[i],{stdio:"ignore",detached:!0}).unref()}catch{}}var Leu=()=>{};function Weu(i,u={}){let t=u.openUrl??Xeu,f=iq(),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":aRi(Seu(l,f.selectedHandle,i.delta));return;case"open":{if(c===null)return;let $=f.sandboxes.get(c);if($?.status==="ready"&&$.previewUrl)t($.previewUrl);return}case"stop":if(c!==null&&E)E.stopSandbox(c);return;case"delete":{if(c===null||!E)return;let $=E.inspectSandbox(c),w=f.sandboxes.get(c);q1i(null),uq({handle:c,branch:$?.branch??w?.branch??null,dirtyCount:$?.dirtyCount??0,merged:$?.merged??null});return}case"confirmYes":{let $=f.pendingConfirm;if(uq(null),$===null||!E)return;V1i($.handle,!0),E.removeSandbox($.handle).then((w)=>{if(w.ok)oRi($.handle);else V1i($.handle,!1),q1i(w.error)});return}case"confirmNo":uq(null);return;case"quit":if(E)E.quit();return}}var Yeu=g(()=>{tq();Leu()});function Qeu(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 zeu={};Ji(zeu,{LinkApp:()=>WMt});import{Box as Ml,Text as _1,useInput as JMt}from"ink";import{useSyncExternalStore as XMt}from"react";import{jsx as kf,jsxs as Uh}from"react/jsx-runtime";function LMt(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 WMt(){let i=XMt(eRi,iq),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 JMt((l,c)=>{let E=Qeu(l,c,i.pendingConfirm!==null);if(E!==null)Weu(E)}),Uh(Ml,{flexDirection:"column",children:[kf(C1i,{version:fW.version}),kf(Ml,{marginBottom:1,children:kf(_1,{dimColor:!0,children:"\u2500".repeat(80)})}),kf(Ml,{children:i.cluster==="linked"?Uh(_1,{color:"green",children:["\u2713 Connected to ",i.clusterUrl??"deco"]}):i.cluster==="connecting"?Uh(_1,{color:"yellow",children:["\u25CC Connecting to ",i.clusterUrl??"deco","\u2026"]}):Uh(_1,{color:"red",children:["\u2717 Disconnected from ",i.clusterUrl??"deco"]})}),kf(Ml,{children:i.ingressUrl?Uh(_1,{color:"green",children:["\u2713 Serving at ",i.ingressUrl]}):kf(_1,{dimColor:!0,children:"\u25CC Starting local server\u2026"})}),kf(Ml,{marginBottom:1,children:kf(_1,{dimColor:!0,children:`${"Computer".padEnd(16)}${i.machine??"this computer"} \xB7 ${u.length} of ${i.cap} previews`})}),u.length===0?kf(_1,{dimColor:!0,children:"No previews running yet."}):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(_1,{dimColor:!0,wrap:"truncate-end",children:"PROJECT"})}),kf(Ml,{width:EW.branch,flexShrink:0,marginRight:1,children:kf(_1,{dimColor:!0,wrap:"truncate-end",children:"BRANCH"})}),kf(Ml,{width:EW.status,flexShrink:0,marginRight:1,children:kf(_1,{dimColor:!0,wrap:"truncate-end",children:"STATUS"})}),kf(Ml,{flexGrow:1,children:kf(_1,{dimColor:!0,wrap:"truncate-end",children:"PREVIEW URL"})})]}),u.map((l)=>{let c=LMt(l,i.removingHandles.has(l.handle)),E=l.handle===f;return Uh(Ml,{children:[kf(Ml,{width:2,flexShrink:0,children:kf(_1,{color:"cyan",children:E?"\u203A":" "})}),kf(Ml,{width:EW.project,flexShrink:0,marginRight:1,children:kf(_1,{bold:E,wrap:"truncate-end",children:l.projectName??l.handle})}),kf(Ml,{width:EW.branch,flexShrink:0,marginRight:1,children:kf(_1,{bold:E,wrap:"truncate-end",children:l.branch??"\u2014"})}),kf(Ml,{width:EW.status,flexShrink:0,marginRight:1,children:kf(_1,{color:c.color,bold:E,wrap:"truncate-end",children:c.text})}),kf(Ml,{flexGrow:1,children:kf(_1,{dimColor:!0,wrap:"truncate-end",children:l.previewUrl??"\u2014"})})]},l.handle)})]}),i.daemonError?kf(Ml,{marginTop:1,children:Uh(_1,{color:"red",children:["\u26A0 ",i.daemonError]})}):null,i.logPath?kf(Ml,{marginTop:1,children:Uh(_1,{dimColor:!0,children:["Logs: ",i.logPath]})}):null,i.pendingConfirm?kf(Ml,{marginTop:1,children:kf(_1,{color:"yellow",children:Geu(i.pendingConfirm)})}):null,i.actionError?kf(Ml,{marginTop:1,children:Uh(_1,{color:"red",children:["\u2717 ",i.actionError]})}):null,kf(Ml,{marginTop:1,children:kf(_1,{dimColor:!0,children:"\u2191\u2193 move \xB7 s stop \xB7 d delete \xB7 o open \xB7 q quit"})})]})}var EW;var Heu=g(()=>{H1i();mRi();Yeu();tq();EW={project:18,branch:22,status:14}});var Reu={};Ji(Reu,{runLinkCommand:()=>MMt});import{closeSync as YMt,mkdirSync as QMt,openSync as zMt,writeSync as HMt}from"fs";import{homedir as RMt}from"os";import{join as pRi}from"path";function bMt(i,u){let t={log:console.log,warn:console.warn,error:console.error},f=(l)=>{if(u===void 0)return;try{HMt(u,`${MRi(l)}
84568
84625
  `)}catch{}};return console.log=(...l)=>f(l),console.warn=(...l)=>f(l),console.error=(...l)=>{f(l),i(MRi(l))},()=>{console.log=t.log,console.warn=t.warn,console.error=t.error}}async function CMt(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 MMt(i={}){let u=i.port??5174,t=i.dataDir??process.env.DATA_DIR??process.env.DECOCMS_HOME??pRi(RMt(),"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 qRi(u,"127.0.0.1"))throw new rRi(u);let w=pRi(t,"sandboxes");E=z1i({path:Q1i(t),managedSandboxRoot:w});let d=await Xli({dataDir:t,intent:"Link",target:f});if(process.env.DECOCMS_LINK_MANAGED!=="1")await CMt(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(() => (Heu(),zeu)),{pushSandboxEvent:y,setCluster:Z,setClusterUrl:T,setDaemonError:B,setIngress:F,setLogPath:A,setMachine:k,setPersistedSandboxes:I}=await Promise.resolve().then(() => (tq(),sRi));QMt(t,{recursive:!0});let S=pRi(t,"link.log");c=zMt(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=bMt(B,c),n(N(O),{patchConsole:!1})}else if(i.banner!==!1){let{printBanner:n}=await Promise.resolve().then(() => (lW(),pM));n(i.version??"0.0.0")}$();let v=process.env.DECOCMS_LINK_MANAGED!=="1",D=await Teu({port:u,clusterBaseUrl:f,dataDir:t,session:d,monitor:_,logFd:c,perSandboxLogs:v,hotReload:i.hotReload});if(i.tui){let{setLinkActions:n}=await Promise.resolve().then(() => (tq(),sRi));n({stopSandbox:D.stopSandbox,removeSandbox:D.removeSandbox,inspectSandbox:D.inspectSandbox,quit:D.stop})}return await D.stopped}catch(w){return l?.(),console.error(Ueu(w)?Peu(u):w instanceof Error?w.message:String(w)),1}finally{if(l?.(),c!==void 0)try{YMt(c)}catch{}$()}}var beu=g(()=>{Fzi();Beu();VRi();Aeu();CRi()});var cbi={};Ji(cbi,{resolveDevLinkClusterUrl:()=>mMt,populateDevLinkToxiProxy:()=>meu,isDevLinkToxiProxyEnabled:()=>rMt,ensureDevLinkToxiProxy:()=>pMt,buildDevLinkToxiProxyConfig:()=>Veu,DEV_LINK_TOXIPROXY_SERVICE_NAME:()=>Meu,DEV_LINK_TOXIPROXY_PROXY_NAME:()=>qeu});function rMt(i=process.env){return i.DECO_DEV_LINK_TOXIPROXY==="1"}function ibi(i,u){if(!Number.isInteger(i)||i<1||i>65535)throw Error(`${u} must be an integer port in 1..65535`);return i}function Veu(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=ibi(i.apiPort,"apiPort"),f=ibi(i.listenPort,"listenPort");if(u.port.length===0)throw Error("serverUrl must include an explicit valid port");let l=ibi(Number.parseInt(u.port,10),"upstreamPort"),c=`http://127.0.0.1:${l}`,E=`http://127.0.0.1:${f}`;return{serviceName:Meu,proxyName:qeu,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 mMt(i){return i.toxiproxy?.clusterUrl??i.serverUrl}async function ubi(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 lbi(i){if(i instanceof Error)return i.name==="Error"?i.message:`${i.name}: ${i.message}`;return String(i)}function reu(i){if(!(i instanceof Error))return!1;if(i.name==="TimeoutError")return!0;return reu(i.cause)}async function tbi(i,u,t,f){try{return await i(t,f)}catch(l){throw Error(`ToxiProxy ${u} failed for ${t}: ${lbi(l)}`,{cause:l})}}async function meu(i,u=fetch){let t=`${i.apiUrl}/reset`,f=await tbi(u,"reset",t,{method:"POST"});await ubi(f,"reset",t);let l=`${i.apiUrl}/populate`,c=await tbi(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 ubi(c,"populate",l)}async function eMt(i,u){let t=`${i.apiUrl}/version`;try{await bl(async()=>{let f=await tbi(u,"readiness check",t,{method:"GET",signal:AbortSignal.timeout(VMt)});await ubi(f,"readiness check",t)},{maxAttempts:qMt,minTimeout:Ceu,maxTimeout:Ceu,multiplier:1,jitter:0,isRetriable:(f)=>!reu(f)})}catch(f){let l=f instanceof Lc?f.cause:f;throw Error(`ToxiProxy API did not become ready at ${t}: ${lbi(l)}`,{cause:l})}}async function aMt(i){if(i===null)return"";return await new Response(i).text()}async function fbi(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}): ${lbi($)}`,{cause:$})}})(),[l,c]=await Promise.all([f.exited,aMt(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 oMt(i,u){let t=`deco-dev-link-toxiproxy-${i}`;await fbi(["rm","-f",t],{ignoreFailure:!0}),await fbi(["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 sMt(i,u){let t=`deco-dev-link-toxiproxy-${i}`;await fbi(["rm","-f",t],{ignoreFailure:!0})}async function pMt(i){let u=Veu(i),t=i.startDaemon??oMt,f=i.stopDaemon??(i.startDaemon===void 0?sMt:void 0);await t(i.apiPort,i.listenPort);let l=i.fetchImpl??fetch;try{await eMt(u,l),await meu(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 Meu="ToxiProxy",qeu="dev_link_studio",qMt=20,Ceu=100,VMt=100;var Ebi=g(()=>{O4()});var eeu={};Ji(eeu,{migrateBetterAuth:()=>$bi});import{getMigrations as iqt}from"better-auth/db";import{sso as uqt}from"@better-auth/sso";import{organization as tqt}from"@decocms/better-auth/plugins";import{admin as fqt,apiKey as lqt,jwt as cqt,magicLink as Eqt,mcp as $qt,openAPI as wqt}from"better-auth/plugins";import{emailOTP as dqt}from"better-auth/plugins/email-otp";async function $bi(i){let t={database:nM(i||un()),plugins:[tqt({dynamicAccessControl:{enabled:!0,enableCustomResources:!0}}),fqt(),lqt(),cqt(),wqt(),$qt({loginPage:"/login"}),uqt(),Eqt({sendMagicLink:async()=>{}}),dqt({sendVerificationOTP:async()=>{}})]},{toBeAdded:f,toBeCreated:l,runMigrations:c}=await iqt(t);if(!f.length&&!l.length)return"up to date";return await c(),`${l.length+f.length} table(s) migrated`}var wbi=g(()=>{cE()});var dbi={};Ji(dbi,{up:()=>hqt,down:()=>_qt});import{sql as Ev}from"kysely";async function hqt(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 _qt(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 aeu=()=>{};var hbi={};Ji(hbi,{up:()=>vqt,down:()=>Dqt});import{sql as oeu}from"kysely";async function vqt(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(oeu`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(u)=>u.notNull().defaultTo(oeu`CURRENT_TIMESTAMP`)).execute()}async function Dqt(i){await i.schema.dropTable("organization_settings").execute()}var seu=()=>{};var _bi={};Ji(_bi,{up:()=>nqt,down:()=>gqt});async function nqt(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 gqt(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 vbi={};Ji(vbi,{up:()=>Nqt,down:()=>Oqt});async function Nqt(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 Oqt(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:()=>yqt,down:()=>Zqt});async function yqt(i){await i.schema.alterTable("connections").addColumn("configuration_state","text").execute(),await i.schema.alterTable("connections").addColumn("configuration_scopes","text").execute()}async function Zqt(i){await i.schema.alterTable("connections").dropColumn("configuration_state").execute(),await i.schema.alterTable("connections").dropColumn("configuration_scopes").execute()}var nbi={};Ji(nbi,{up:()=>Bqt,down:()=>Fqt});import{sql as Tqt}from"kysely";async function Bqt(i){await i.schema.alterTable("organization_settings").addColumn("sidebar_items",Tqt`text`).execute()}async function Fqt(i){await i.schema.alterTable("organization_settings").dropColumn("sidebar_items").execute()}var peu=()=>{};var gbi={};Ji(gbi,{up:()=>Uqt,down:()=>Pqt});async function Uqt(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 Pqt(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 Nbi={};Ji(Nbi,{up:()=>Aqt,down:()=>Iqt});import{sql as fq}from"kysely";async function Aqt(i){await i.schema.createTable("events").addColumn("id","text",(u)=>u.primaryKey()).addColumn("organization_id","text",(u)=>u.notNull().references("organization.id").onDelete("cascade")).addColumn("type","text",(u)=>u.notNull()).addColumn("source","text",(u)=>u.notNull()).addColumn("specversion","text",(u)=>u.notNull().defaultTo("1.0")).addColumn("subject","text").addColumn("time","text",(u)=>u.notNull()).addColumn("datacontenttype","text",(u)=>u.notNull().defaultTo("application/json")).addColumn("dataschema","text").addColumn("data","text").addColumn("cron","varchar(255)").addColumn("status","text",(u)=>u.notNull().defaultTo("pending")).addColumn("attempts","integer",(u)=>u.notNull().defaultTo(0)).addColumn("last_error","text").addColumn("next_retry_at","text").addColumn("created_at","text",(u)=>u.notNull().defaultTo(fq`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(u)=>u.notNull().defaultTo(fq`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("event_subscriptions").addColumn("id","text",(u)=>u.primaryKey()).addColumn("organization_id","text",(u)=>u.notNull().references("organization.id").onDelete("cascade")).addColumn("connection_id","text",(u)=>u.notNull().references("connections.id").onDelete("cascade")).addColumn("publisher","text").addColumn("event_type","text",(u)=>u.notNull()).addColumn("filter","text").addColumn("enabled","integer",(u)=>u.notNull().defaultTo(1)).addColumn("created_at","text",(u)=>u.notNull().defaultTo(fq`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(u)=>u.notNull().defaultTo(fq`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("event_deliveries").addColumn("id","text",(u)=>u.primaryKey()).addColumn("event_id","text",(u)=>u.notNull()).addColumn("subscription_id","text",(u)=>u.notNull().references("event_subscriptions.id").onDelete("cascade")).addColumn("status","text",(u)=>u.notNull().defaultTo("pending")).addColumn("attempts","integer",(u)=>u.notNull().defaultTo(0)).addColumn("last_error","text").addColumn("delivered_at","text").addColumn("next_retry_at","text").addColumn("created_at","text",(u)=>u.notNull().defaultTo(fq`CURRENT_TIMESTAMP`)).execute(),await i.schema.createIndex("idx_events_org_status").on("events").columns(["organization_id","status"]).execute(),await i.schema.createIndex("idx_events_source").on("events").columns(["source"]).execute(),await i.schema.createIndex("idx_events_type").on("events").columns(["type"]).execute(),await i.schema.createIndex("idx_events_retry").on("events").columns(["status","next_retry_at"]).execute(),await i.schema.createIndex("idx_subscriptions_connection").on("event_subscriptions").columns(["connection_id"]).execute(),await i.schema.createIndex("idx_subscriptions_type").on("event_subscriptions").columns(["event_type"]).execute(),await i.schema.createIndex("idx_subscriptions_org_enabled").on("event_subscriptions").columns(["organization_id","enabled"]).execute(),await i.schema.createIndex("idx_subscriptions_unique").on("event_subscriptions").columns(["connection_id","event_type","publisher","filter"]).unique().execute(),await i.schema.createIndex("idx_deliveries_event").on("event_deliveries").columns(["event_id"]).execute(),await i.schema.createIndex("idx_deliveries_subscription_status").on("event_deliveries").columns(["subscription_id","status"]).execute(),await i.schema.createIndex("idx_deliveries_retry").on("event_deliveries").columns(["status","next_retry_at"]).execute()}async function Iqt(i){await i.schema.dropIndex("idx_deliveries_retry").execute(),await i.schema.dropIndex("idx_deliveries_subscription_status").execute(),await i.schema.dropIndex("idx_deliveries_event").execute(),await i.schema.dropIndex("idx_subscriptions_unique").execute(),await i.schema.dropIndex("idx_subscriptions_org_enabled").execute(),await i.schema.dropIndex("idx_subscriptions_type").execute(),await i.schema.dropIndex("idx_subscriptions_connection").execute(),await i.schema.dropIndex("idx_events_retry").execute(),await i.schema.dropIndex("idx_events_type").execute(),await i.schema.dropIndex("idx_events_source").execute(),await i.schema.dropIndex("idx_events_org_status").execute(),await i.schema.dropTable("event_deliveries").execute(),await i.schema.dropTable("event_subscriptions").execute(),await i.schema.dropTable("events").execute()}var iau=()=>{};var Obi={};Ji(Obi,{up:()=>kqt,down:()=>Gqt});import{sql as xqt}from"kysely";async function kqt(i){await i.schema.dropTable("audit_logs").ifExists().execute()}async function Gqt(i){await i.schema.createTable("audit_logs").ifNotExists().addColumn("id","text",(u)=>u.primaryKey()).addColumn("organizationId","text").addColumn("userId","text",(u)=>u.references("user.id").onDelete("set null")).addColumn("connectionId","text",(u)=>u.references("connections.id").onDelete("set null")).addColumn("toolName","text",(u)=>u.notNull()).addColumn("allowed","integer",(u)=>u.notNull()).addColumn("duration","integer").addColumn("timestamp","text",(u)=>u.notNull().defaultTo(xqt`CURRENT_TIMESTAMP`)).addColumn("requestMetadata","text").execute(),await i.schema.createIndex("idx_audit_logs_organizationId").on("audit_logs").column("organizationId").execute(),await i.schema.createIndex("idx_audit_logs_userId").on("audit_logs").column("userId").execute(),await i.schema.createIndex("idx_audit_logs_timestamp").on("audit_logs").column("timestamp").execute()}var uau=()=>{};var ybi={};Ji(ybi,{up:()=>Sqt,down:()=>jqt});import{sql as r1i}from"kysely";async function Sqt(i){await i.schema.createTable("gateways").addColumn("id","text",(u)=>u.primaryKey()).addColumn("organization_id","text",(u)=>u.notNull().references("organization.id").onDelete("cascade")).addColumn("title","text",(u)=>u.notNull()).addColumn("description","text").addColumn("tool_selection_strategy","text").addColumn("status","text",(u)=>u.notNull().defaultTo("active")).addColumn("is_default","integer",(u)=>u.notNull().defaultTo(0)).addColumn("created_at","text",(u)=>u.notNull().defaultTo(r1i`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(u)=>u.notNull().defaultTo(r1i`CURRENT_TIMESTAMP`)).addColumn("created_by","text",(u)=>u.notNull().references("user.id").onDelete("cascade")).addColumn("updated_by","text").execute(),await i.schema.createTable("gateway_connections").addColumn("id","text",(u)=>u.primaryKey()).addColumn("gateway_id","text",(u)=>u.notNull().references("gateways.id").onDelete("cascade")).addColumn("connection_id","text",(u)=>u.notNull().references("connections.id").onDelete("cascade")).addColumn("selected_tools","text").addColumn("created_at","text",(u)=>u.notNull().defaultTo(r1i`CURRENT_TIMESTAMP`)).execute(),await i.schema.createIndex("idx_gateways_org").on("gateways").columns(["organization_id"]).execute(),await i.schema.createIndex("idx_gateways_org_status").on("gateways").columns(["organization_id","status"]).execute(),await r1i`CREATE UNIQUE INDEX idx_gateways_default_per_org ON gateways (organization_id) WHERE is_default = 1`.execute(i),await i.schema.createIndex("idx_gateway_connections_gateway").on("gateway_connections").columns(["gateway_id"]).execute(),await i.schema.createIndex("idx_gateway_connections_connection").on("gateway_connections").columns(["connection_id"]).execute(),await i.schema.createIndex("idx_gateway_connections_unique").on("gateway_connections").columns(["gateway_id","connection_id"]).unique().execute()}async function jqt(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 tau=()=>{};var Zbi={};Ji(Zbi,{up:()=>Kqt,down:()=>Jqt});async function Kqt(i){await i.schema.alterTable("gateways").addColumn("icon","text").execute()}async function Jqt(i){await i.schema.alterTable("gateways").dropColumn("icon").execute()}var Tbi={};Ji(Tbi,{up:()=>Xqt,down:()=>Lqt});import{sql as m1i}from"kysely";async function Xqt(i){await i.schema.alterTable("gateways").addColumn("tool_selection_mode","text",(u)=>u.notNull().defaultTo("inclusion")).execute(),await m1i`
84569
84626
  UPDATE gateways
84570
84627
  SET tool_selection_mode = CASE