decocms 2.299.0 → 2.300.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (225) hide show
  1. package/dist/client/assets/{AlertCircle-aQgTv3kr.js → AlertCircle-CtSiN7Dh.js} +1 -1
  2. package/dist/client/assets/{ArrowNarrowLeft-C_pLc5t-.js → ArrowNarrowLeft-CjMD5YtT.js} +1 -1
  3. package/dist/client/assets/{ArrowUpRight-Bws5ir-q.js → ArrowUpRight-VGEco3p8.js} +1 -1
  4. package/dist/client/assets/{CheckCircle-Cwc7BvQq.js → CheckCircle-BOjQcSoZ.js} +1 -1
  5. package/dist/client/assets/{ChevronDown-C4MI00HX.js → ChevronDown-B21GyFLP.js} +1 -1
  6. package/dist/client/assets/{ChevronRight-DDkghuaf.js → ChevronRight-C7fFXCXU.js} +1 -1
  7. package/dist/client/assets/{ChevronUp-BjFGxYUb.js → ChevronUp-DLJe-Ifh.js} +1 -1
  8. package/dist/client/assets/{Container-U4v06cth.js → Container-DVwtR0PY.js} +1 -1
  9. package/dist/client/assets/{DotsVertical-BCK2nFhn.js → DotsVertical-_1yE4PFi.js} +1 -1
  10. package/dist/client/assets/{LinkExternal01-C_yQygSO.js → LinkExternal01-BeNjIA73.js} +1 -1
  11. package/dist/client/assets/{Lock01-rLvN1xbd.js → Lock01-y9D26Lk9.js} +1 -1
  12. package/dist/client/assets/{Palette-CA95sDHj.js → Palette-xIvgAE_U.js} +1 -1
  13. package/dist/client/assets/{Play-BlOman6C.js → Play-esUCyQh5.js} +1 -1
  14. package/dist/client/assets/{Plus-B5soxpbi.js → Plus-8zlfW9Nb.js} +1 -1
  15. package/dist/client/assets/{RefreshCcw01-onzNEsM4.js → RefreshCcw01-DV-_PfmV.js} +1 -1
  16. package/dist/client/assets/{SearchMd-fvAW1pa8.js → SearchMd-BgpZuBQH.js} +1 -1
  17. package/dist/client/assets/{Settings02-Cro6-7q4.js → Settings02-B2DHZxlV.js} +1 -1
  18. package/dist/client/assets/{Shield01-DtWtqZJ1.js → Shield01-CewVSi37.js} +1 -1
  19. package/dist/client/assets/{Star01-BHGJRtit.js → Star01-DupDdRAe.js} +1 -1
  20. package/dist/client/assets/{Sun-C6J9iUe_.js → Sun-B1MYWGMj.js} +1 -1
  21. package/dist/client/assets/{Tool01-DeRpug6W.js → Tool01-73PH4njb.js} +1 -1
  22. package/dist/client/assets/{Trash01-BSFNbfe8.js → Trash01-_-2EAUWH.js} +1 -1
  23. package/dist/client/assets/{User01-C-8Fo7RS.js → User01-DLnrd0WJ.js} +1 -1
  24. package/dist/client/assets/{Users03-C25Ink_E.js → Users03-CtQ_adLe.js} +1 -1
  25. package/dist/client/assets/{X-Cf3FFZEE.js → X-DavTUkoo.js} +1 -1
  26. package/dist/client/assets/{XCircle-CLM44_6-.js → XCircle-BKeTm8Ww.js} +1 -1
  27. package/dist/client/assets/{XClose-B9H_q-Ab.js → XClose-BpjQA_dF.js} +1 -1
  28. package/dist/client/assets/{Zap-BQvzqOLx.js → Zap-DT_tBFfJ.js} +1 -1
  29. package/dist/client/assets/{ZapSquare-CjSpwpWX.js → ZapSquare-BL-_ZEqM.js} +1 -1
  30. package/dist/client/assets/{accordion-YUzrCziW.js → accordion-pRq2Jalt.js} +1 -1
  31. package/dist/client/assets/{agent-icon-CyFFhaia.js → agent-icon-DnE1m294.js} +1 -1
  32. package/dist/client/assets/{agents-list-W7eiHZAH.js → agents-list-BoAFCp78.js} +1 -1
  33. package/dist/client/assets/ai-providers-CAEYBEbx.js +1 -0
  34. package/dist/client/assets/{alert-dialog-BRriT9Rx.js → alert-dialog-DvcLf48w.js} +1 -1
  35. package/dist/client/assets/{auth-catchall-dvNJT_HW.js → auth-catchall-CAJD1PoQ.js} +1 -1
  36. package/dist/client/assets/{automation-list-row-Dr5BqZcR.js → automation-list-row-DsEcFwqj.js} +1 -1
  37. package/dist/client/assets/{automations-DThDEBhK.js → automations-0IJqtFMr.js} +1 -1
  38. package/dist/client/assets/{avatar-DZ7Lcia3.js → avatar-B1YFr91G.js} +1 -1
  39. package/dist/client/assets/{badge-CNKFpwCQ.js → badge-BnwDLyJj.js} +1 -1
  40. package/dist/client/assets/{brand-context-FHNmQTmw.js → brand-context-D5_IL-aX.js} +1 -1
  41. package/dist/client/assets/{card-DVXldwSE.js → card-Hve9iIpZ.js} +1 -1
  42. package/dist/client/assets/{chat-context-clHOazkR.js → chat-context-C2vjARhO.js} +1 -1
  43. package/dist/client/assets/{checkbox-EVw79nds.js → checkbox-DmWLCJJH.js} +1 -1
  44. package/dist/client/assets/{collection-detail-C13v-yoJ.js → collection-detail-D8wvqyeL.js} +1 -1
  45. package/dist/client/assets/{collection-display-button-BM4OZbbR.js → collection-display-button-CQ2KlZSu.js} +1 -1
  46. package/dist/client/assets/{collection-search-DoSMDd39.js → collection-search-D_mJKf_N.js} +1 -1
  47. package/dist/client/assets/{collection-search-DjqZM35U.js → collection-search-DffILLk0.js} +1 -1
  48. package/dist/client/assets/{collection-table-wrapper-jyvgWmq5.js → collection-table-wrapper-fO254CQy.js} +1 -1
  49. package/dist/client/assets/{collection-tabs-Nu6UZ0Wa.js → collection-tabs-Bcs-_tfj.js} +1 -1
  50. package/dist/client/assets/{collections-_TpL4Kbd.js → collections-CISD8jzc.js} +1 -1
  51. package/dist/client/assets/{command-BGK9JNiv.js → command-CsVFknP_.js} +1 -1
  52. package/dist/client/assets/{connection-card-h503T7yE.js → connection-card-aTu5Xl4N.js} +1 -1
  53. package/dist/client/assets/{connection-detail-E3ZTKIWY.js → connection-detail-BUr0xwe0.js} +1 -1
  54. package/dist/client/assets/{connection-form-helpers-B5DiwUxU.js → connection-form-helpers-BEHWki2e.js} +1 -1
  55. package/dist/client/assets/{connections-Ba8EED2x.js → connections-BJwQ4V76.js} +1 -1
  56. package/dist/client/assets/{constants-lTcLVS5n.js → constants-BwurOShK.js} +1 -1
  57. package/dist/client/assets/{constants-CiJRSGoE.js → constants-DZ5y4NEu.js} +1 -1
  58. package/dist/client/assets/{dialog-BRB-AdlQ.js → dialog-BSlhJimL.js} +1 -1
  59. package/dist/client/assets/{domain-settings-vcc_x35P.js → domain-settings-D65HSgmV.js} +1 -1
  60. package/dist/client/assets/{drawer-rKfRlJNC.js → drawer-DwurUbp0.js} +1 -1
  61. package/dist/client/assets/{dropdown-menu-DaYjsctt.js → dropdown-menu-Dn3K1Gpo.js} +1 -1
  62. package/dist/client/assets/{dynamic-plugin-layout-Bs-dtzIc.js → dynamic-plugin-layout-uzPcJgAD.js} +1 -1
  63. package/dist/client/assets/{empty-state-DpWDEkDd.js → empty-state-B4R6bbr3.js} +1 -1
  64. package/dist/client/assets/{empty-state-DLaWKneQ.js → empty-state-DbgILpoj.js} +1 -1
  65. package/dist/client/assets/{extract-connection-data-DIDviCIp.js → extract-connection-data-Bp5NDOhQ.js} +1 -1
  66. package/dist/client/assets/{features-CE8oBb9H.js → features-MuQDQTKd.js} +1 -1
  67. package/dist/client/assets/{form-mI6GLCMQ.js → form-DTt4fIHo.js} +1 -1
  68. package/dist/client/assets/{general-27HuvgYf.js → general-C7YvzevF.js} +1 -1
  69. package/dist/client/assets/index-B4J1yAvl.css +1 -0
  70. package/dist/client/assets/{index-Ccm19Owr.js → index-BJz9Oj-t.js} +1 -1
  71. package/dist/client/assets/{index-B11-oLok.js → index-BTM4S0x-.js} +1 -1
  72. package/dist/client/assets/{index-D8ZWoKb1.js → index-BZwRn_mX.js} +1 -1
  73. package/dist/client/assets/index-CKNbLfs9.js +1 -0
  74. package/dist/client/assets/{index-cC9WxUf7.js → index-COQkJrV6.js} +1 -1
  75. package/dist/client/assets/{index-BdrUauLh.js → index-CbEM9IOV.js} +1 -1
  76. package/dist/client/assets/{index-oMBghIJJ.js → index-D1LVHcIe.js} +1 -1
  77. package/dist/client/assets/{index-BLqORW7O.js → index-D9wcQMm5.js} +1 -1
  78. package/dist/client/assets/{index-WenLlWbb.js → index-DBY00Q2Z.js} +19 -19
  79. package/dist/client/assets/{index-C4eEdhdn.js → index-DHKldY3y.js} +1 -1
  80. package/dist/client/assets/{index-hcEg81hB.js → index-DRnP8Xhy.js} +10 -10
  81. package/dist/client/assets/{index-CHiZkXhm.js → index-Day-HjXR.js} +1 -1
  82. package/dist/client/assets/{index-CD-vU91r.js → index-XlHohbXo.js} +1 -1
  83. package/dist/client/assets/{index-DHZDsons.js → index-h0Ny6VA2.js} +1 -1
  84. package/dist/client/assets/{index-B3FEpuQw.js → index-uTtq-reU.js} +1 -1
  85. package/dist/client/assets/{index-B3zZp_Qu.js → index-ygN6PiaU.js} +1 -1
  86. package/dist/client/assets/{infiniteQueryObserver-DkM0VxlF.js → infiniteQueryObserver-BFZ15R1_.js} +1 -1
  87. package/dist/client/assets/{input-Cuud93wX.js → input-liZY-axz.js} +1 -1
  88. package/dist/client/assets/{integration-icon-CsrRg2Lu.js → integration-icon-Cz-seBmA.js} +1 -1
  89. package/dist/client/assets/{label-Bk3DQN0Y.js → label-CrXFAdsO.js} +1 -1
  90. package/dist/client/assets/{layout-BtQea4Qg.js → layout-bMTJXFfz.js} +1 -1
  91. package/dist/client/assets/{lean-canvas-recruit-modal-CbbipZjJ.js → lean-canvas-recruit-modal-DZ6knxg9.js} +1 -1
  92. package/dist/client/assets/{login-BgZ8a57W.js → login-CWW3hrOg.js} +1 -1
  93. package/dist/client/assets/{members-BrEtD2C0.js → members-DKWnDmHd.js} +1 -1
  94. package/dist/client/assets/{monaco-editor-B5h0xAd0.js → monaco-editor-Cx68yuxi.js} +1 -1
  95. package/dist/client/assets/{monitoring-stats-row-FmuYstq7.js → monitoring-stats-row-BFqk7UYd.js} +1 -1
  96. package/dist/client/assets/{oauth-callback-ai-provider-D2JxS3R_.js → oauth-callback-ai-provider-ONRq40Il.js} +1 -1
  97. package/dist/client/assets/{oauth-callback-BOHYAMsk.js → oauth-callback-nz50ugwL.js} +1 -1
  98. package/dist/client/assets/{onboarding-Dls-YBag.js → onboarding-CbZyKtbC.js} +1 -1
  99. package/dist/client/assets/{org-layout-B0WpG86a.js → org-layout-DkS2FRIV.js} +1 -1
  100. package/dist/client/assets/{org-plugin-layout-fSkxW1jN.js → org-plugin-layout-DnoycXXu.js} +1 -1
  101. package/dist/client/assets/{pair-CqYfP4a_.js → pair-rqe3skqp.js} +1 -1
  102. package/dist/client/assets/{plugin-empty-state-C3M4-bHq.js → plugin-empty-state-DAJtqa_X.js} +1 -1
  103. package/dist/client/assets/{plugin-header-Bhl8FTKN.js → plugin-header-DnTysGuR.js} +1 -1
  104. package/dist/client/assets/{plugin-layout-DOuAk8f9.js → plugin-layout-Zl5kAJLg.js} +1 -1
  105. package/dist/client/assets/{popover-BWawolwL.js → popover-B6ijC2Zf.js} +1 -1
  106. package/dist/client/assets/{profile-DKggoElb.js → profile-Wj3GJkbr.js} +1 -1
  107. package/dist/client/assets/{project-app-view-BTqqbkYN.js → project-app-view-DufFnF1s.js} +1 -1
  108. package/dist/client/assets/registry-D49ZAHvu.js +2 -0
  109. package/dist/client/assets/{registry-layout-Bcb0ETu2.js → registry-layout-BvfKYFzg.js} +1 -1
  110. package/dist/client/assets/{required-auth-layout-B0aP_BYa.js → required-auth-layout-CKQlCfyf.js} +1 -1
  111. package/dist/client/assets/{reset-password-DAQu9CHm.js → reset-password-4dmtvYgx.js} +1 -1
  112. package/dist/client/assets/{roles-CV8Id8qK.js → roles-DlsIbipv.js} +1 -1
  113. package/dist/client/assets/{scroll-area-0g8Z_dWS.js → scroll-area-D_0eTXQI.js} +1 -1
  114. package/dist/client/assets/{search-input-jyuCy7Ai.js → search-input-CbBz2_I7.js} +1 -1
  115. package/dist/client/assets/{select-hpzuL2n7.js → select-DwQCWni4.js} +1 -1
  116. package/dist/client/assets/{select-model-CtHOnPsy.js → select-model-CSzGroxj.js} +1 -1
  117. package/dist/client/assets/{settings-layout-ClllTp0r.js → settings-layout-D2TzHadG.js} +1 -1
  118. package/dist/client/assets/{settings-section-DTpTGGC-.js → settings-section-CVNbjkC4.js} +1 -1
  119. package/dist/client/assets/{shell-layout-B405kN5F.js → shell-layout-BK74oWLU.js} +1 -1
  120. package/dist/client/assets/{skeleton-B9GboYxM.js → skeleton-DnMJGIDK.js} +1 -1
  121. package/dist/client/assets/{sso-Dh1NgG1u.js → sso-ByZblLmU.js} +1 -1
  122. package/dist/client/assets/{store-2uy2qIUV.js → store-D02KrT4m.js} +1 -1
  123. package/dist/client/assets/store-registry-C02mfQOQ.js +2 -0
  124. package/dist/client/assets/{switch-CD5xHhwa.js → switch-BwYbkaPM.js} +1 -1
  125. package/dist/client/assets/{table-Bl-CW2Ey.js → table-dOL69UsN.js} +1 -1
  126. package/dist/client/assets/{tabs-8bRAvOFB.js → tabs-CGg7lV45.js} +1 -1
  127. package/dist/client/assets/{task-status-Df19deFg.js → task-status-DAgh3LfT.js} +1 -1
  128. package/dist/client/assets/{textarea-0ebJKTCS.js → textarea-CkxfQbxI.js} +1 -1
  129. package/dist/client/assets/{toggle-group-BqrVPEZw.js → toggle-group-C5VhmQig.js} +1 -1
  130. package/dist/client/assets/{tools-list-1YgWwNhM.js → tools-list-CwM3RxlF.js} +1 -1
  131. package/dist/client/assets/{tooltip-CGmvkTM6.js → tooltip-CUw8WpYG.js} +1 -1
  132. package/dist/client/assets/{types-CN-G9hqy.js → types-slR7lXH6.js} +1 -1
  133. package/dist/client/assets/{use-ai-providers-BtZzelvz.js → use-ai-providers-DespFg1Y.js} +1 -1
  134. package/dist/client/assets/{use-collections-DjbmBbmU.js → use-collections-CDG0ivO9.js} +1 -1
  135. package/dist/client/assets/{use-connection-CffI5S47.js → use-connection-DDedfw7l.js} +1 -1
  136. package/dist/client/assets/{use-copy-DNx2iDfI.js → use-copy-Czy0YFNn.js} +1 -1
  137. package/dist/client/assets/{use-create-virtual-mcp-BFp1mbc9.js → use-create-virtual-mcp-Bhi93QNY.js} +1 -1
  138. package/dist/client/assets/{use-decopilot-events-D5TlUkky.js → use-decopilot-events-DkzJQYGR.js} +1 -1
  139. package/dist/client/assets/{use-delete-connection-O5X9Xo4O.js → use-delete-connection-CG2J3Cjn.js} +1 -1
  140. package/dist/client/assets/{use-infinite-scroll-FZg8WuOv.js → use-infinite-scroll-qjXoMT8U.js} +1 -1
  141. package/dist/client/assets/{use-list-state-CbWjR069.js → use-list-state-D2VmPCpI.js} +1 -1
  142. package/dist/client/assets/{use-mcp-tools-CxZifaYv.js → use-mcp-tools-nd8RTEJZ.js} +1 -1
  143. package/dist/client/assets/{use-members-CXQMD9Vu.js → use-members-BWz4qY4v.js} +1 -1
  144. package/dist/client/assets/{use-navigate-to-agent-C0C5E43c.js → use-navigate-to-agent-Dj0boPYr.js} +1 -1
  145. package/dist/client/assets/{use-org-auth-client-Dy4G77my.js → use-org-auth-client-_7iLBAbg.js} +1 -1
  146. package/dist/client/assets/{use-org-sso-Drj77Zm1.js → use-org-sso-CXTYwYuw.js} +1 -1
  147. package/dist/client/assets/{use-organization-roles-DmSBxwGY.js → use-organization-roles-BmJJrwum.js} +1 -1
  148. package/dist/client/assets/{use-organization-settings--1KNcya1.js → use-organization-settings-C516uAxZ.js} +1 -1
  149. package/dist/client/assets/{use-registry-connections-BaBm7Ii1.js → use-registry-connections-BH65PVKK.js} +1 -1
  150. package/dist/client/assets/{use-status-sounds-BDL4IJ6A.js → use-status-sounds-COJng9ez.js} +1 -1
  151. package/dist/client/assets/{use-tasks-DF42FEXc.js → use-tasks-BMtiaufW.js} +1 -1
  152. package/dist/client/assets/{use-view-mode-CBcjjJZG.js → use-view-mode-B3HPjSsa.js} +1 -1
  153. package/dist/client/assets/{use-virtual-mcp-CTmQF3FY.js → use-virtual-mcp-Dkco3wCF.js} +1 -1
  154. package/dist/client/assets/useInfiniteQuery-mbgOLEDd.js +1 -0
  155. package/dist/client/assets/useSuspenseInfiniteQuery-DZGLPMRe.js +1 -0
  156. package/dist/client/assets/{user-DNhBNgsY.js → user-BCVAIUhB.js} +1 -1
  157. package/dist/client/assets/{view-mode-toggle-KbDgQNkg.js → view-mode-toggle-Bbj9P-zr.js} +1 -1
  158. package/dist/client/assets/{workflow-DZzf5GRI.js → workflow-DZKRFLJh.js} +1 -1
  159. package/dist/client/assets/workflow-detail-Bm0PdrL9.js +1 -0
  160. package/dist/client/index.html +2 -2
  161. package/dist/server/cli.js +3 -3
  162. package/dist/server/node_modules/ansi-regex/index.d.ts +33 -0
  163. package/dist/server/node_modules/ansi-regex/index.js +14 -0
  164. package/dist/server/node_modules/{ansi-styles → ansi-regex}/package.json +20 -13
  165. package/dist/server/node_modules/ansi-regex/readme.md +66 -0
  166. package/dist/server/node_modules/mimic-fn/index.d.ts +54 -0
  167. package/dist/server/node_modules/mimic-fn/index.js +13 -0
  168. package/dist/server/node_modules/mimic-fn/package.json +42 -0
  169. package/dist/server/node_modules/mimic-fn/readme.md +69 -0
  170. package/dist/server/node_modules/pg-int8/LICENSE +13 -0
  171. package/dist/server/node_modules/pg-int8/README.md +16 -0
  172. package/dist/server/node_modules/pg-int8/index.js +100 -0
  173. package/dist/server/node_modules/pg-int8/package.json +24 -0
  174. package/dist/server/node_modules/postgres-array/index.d.ts +4 -0
  175. package/dist/server/node_modules/postgres-array/index.js +97 -0
  176. package/dist/server/node_modules/postgres-array/license +21 -0
  177. package/dist/server/node_modules/postgres-array/package.json +35 -0
  178. package/dist/server/node_modules/postgres-array/readme.md +43 -0
  179. package/dist/server/node_modules/postgres-bytea/index.js +33 -0
  180. package/dist/server/node_modules/postgres-bytea/license +21 -0
  181. package/dist/server/node_modules/postgres-bytea/package.json +34 -0
  182. package/dist/server/node_modules/postgres-bytea/readme.md +34 -0
  183. package/dist/server/node_modules/postgres-date/index.js +116 -0
  184. package/dist/server/node_modules/postgres-date/license +21 -0
  185. package/dist/server/node_modules/postgres-date/package.json +33 -0
  186. package/dist/server/node_modules/postgres-date/readme.md +49 -0
  187. package/dist/server/node_modules/postgres-interval/index.d.ts +20 -0
  188. package/dist/server/node_modules/postgres-interval/index.js +125 -0
  189. package/dist/server/node_modules/postgres-interval/license +21 -0
  190. package/dist/server/node_modules/postgres-interval/package.json +36 -0
  191. package/dist/server/node_modules/postgres-interval/readme.md +48 -0
  192. package/dist/server/server.js +2 -2
  193. package/package.json +1 -1
  194. package/dist/client/assets/ai-providers-D112U5ed.js +0 -1
  195. package/dist/client/assets/index-CLgHTXwu.js +0 -1
  196. package/dist/client/assets/index-DT63_YMm.css +0 -1
  197. package/dist/client/assets/registry-BOvZQpcE.js +0 -2
  198. package/dist/client/assets/store-registry-LkT6leWD.js +0 -2
  199. package/dist/client/assets/useInfiniteQuery-BugVQNDu.js +0 -1
  200. package/dist/client/assets/useSuspenseInfiniteQuery-CMPA3kQv.js +0 -1
  201. package/dist/client/assets/workflow-detail-OXlDN5sZ.js +0 -1
  202. package/dist/server/node_modules/ansi-styles/index.d.ts +0 -236
  203. package/dist/server/node_modules/ansi-styles/index.js +0 -223
  204. package/dist/server/node_modules/ansi-styles/readme.md +0 -173
  205. package/dist/server/node_modules/environment/index.d.ts +0 -74
  206. package/dist/server/node_modules/environment/index.js +0 -47
  207. package/dist/server/node_modules/environment/license +0 -9
  208. package/dist/server/node_modules/environment/package.json +0 -74
  209. package/dist/server/node_modules/environment/readme.md +0 -94
  210. package/dist/server/node_modules/escape-string-regexp/index.d.ts +0 -18
  211. package/dist/server/node_modules/escape-string-regexp/index.js +0 -11
  212. package/dist/server/node_modules/escape-string-regexp/package.json +0 -43
  213. package/dist/server/node_modules/escape-string-regexp/readme.md +0 -29
  214. package/dist/server/node_modules/is-fullwidth-code-point/index.d.ts +0 -17
  215. package/dist/server/node_modules/is-fullwidth-code-point/index.js +0 -12
  216. package/dist/server/node_modules/is-fullwidth-code-point/license +0 -9
  217. package/dist/server/node_modules/is-fullwidth-code-point/package.json +0 -53
  218. package/dist/server/node_modules/is-fullwidth-code-point/readme.md +0 -31
  219. package/dist/server/node_modules/string-width/index.d.ts +0 -39
  220. package/dist/server/node_modules/string-width/index.js +0 -82
  221. package/dist/server/node_modules/string-width/license +0 -9
  222. package/dist/server/node_modules/string-width/package.json +0 -64
  223. package/dist/server/node_modules/string-width/readme.md +0 -66
  224. /package/dist/server/node_modules/{ansi-styles → ansi-regex}/license +0 -0
  225. /package/dist/server/node_modules/{escape-string-regexp → mimic-fn}/license +0 -0
@@ -1 +1 @@
1
- import{e as oe,j as t,B as Ce,f as Be,b as ct,s as ze,r as dt,x as Le,o as ut,a as mt,K as Fe,Y as Ke,Z as pt}from"./index-hcEg81hB.js";import{u as Ve,S as qe}from"./constants-CiJRSGoE.js";import{B as ft,g as Me}from"./constants-lTcLVS5n.js";import{C as Qe}from"./collection-display-button-BM4OZbbR.js";import{C as ht}from"./collection-search-DoSMDd39.js";import{C as gt}from"./card-DVXldwSE.js";import{I as Ge}from"./integration-icon-CsrRg2Lu.js";import{D as He,a as Ye,b as Je,c as O}from"./dropdown-menu-DaYjsctt.js";import{c as Ze}from"./XCircle-CLM44_6-.js";import{i as Xe}from"./DotsVertical-BCK2nFhn.js";import{y as et,H as Ue}from"./agent-icon-CyFFhaia.js";import{s as tt}from"./RefreshCcw01-onzNEsM4.js";import{s as st}from"./Trash01-BSFNbfe8.js";import{C as xt}from"./collection-table-wrapper-jyvgWmq5.js";import{E as We}from"./empty-state-DpWDEkDd.js";import{U as jt}from"./user-DNhBNgsY.js";import{E as it}from"./empty-state-DLaWKneQ.js";import{u as Ct}from"./use-list-state-CbWjR069.js";import{g as bt}from"./connection-slug-eyAPH6o3.js";import{f as vt,g as yt,c as Nt,b as wt,d as St,e as Pt,a as _t,A as Dt}from"./alert-dialog-BRriT9Rx.js";import{a as It,c as At}from"./use-collections-DjbmBbmU.js";import{a as Tt}from"./use-connection-CffI5S47.js";import{s as Et}from"./Plus-B5soxpbi.js";import{a as Ot}from"./layout-BtQea4Qg.js";import{P as je}from"./index-oMBghIJJ.js";import"./collections-_TpL4Kbd.js";import"./XClose-B9H_q-Ab.js";import"./ChevronDown-C4MI00HX.js";import"./tooltip-CGmvkTM6.js";import"./view-mode-toggle-KbDgQNkg.js";import"./badge-CNKFpwCQ.js";import"./SearchMd-fvAW1pa8.js";import"./Container-U4v06cth.js";import"./ChevronRight-DDkghuaf.js";import"./AlertCircle-aQgTv3kr.js";import"./Tool01-DeRpug6W.js";import"./ArrowNarrowLeft-C_pLc5t-.js";import"./ArrowUpRight-Bws5ir-q.js";import"./ZapSquare-CjSpwpWX.js";import"./Users03-C25Ink_E.js";import"./CheckCircle-Cwc7BvQq.js";import"./ChevronUp-BjFGxYUb.js";import"./Star01-BHGJRtit.js";import"./Palette-CA95sDHj.js";import"./LinkExternal01-C_yQygSO.js";import"./Lock01-rLvN1xbd.js";import"./Sun-C6J9iUe_.js";import"./Play-BlOman6C.js";import"./Settings02-Cro6-7q4.js";import"./Shield01-DtWtqZJ1.js";import"./User01-C-8Fo7RS.js";import"./X-Cf3FFZEE.js";import"./Zap-BQvzqOLx.js";import"./table-Bl-CW2Ey.js";import"./avatar-DZ7Lcia3.js";import"./use-view-mode-CBcjjJZG.js";function $t(i,e){const s=i.properties||{};for(const n in s){const c=s[n];if(c&&c.type==="string"&&(c.format==="url"||c.format==="uri")&&e&&typeof e=="object"&&n in e&&e[n])return e[n]}const l=["image","img","avatar","icon","logo","thumbnail","cover"];for(const n of l)if(e&&typeof e=="object"&&n in e&&typeof e[n]=="string")return e[n]}function kt(i){const e=oe.c(25),{item:s,schema:l,actions:n}=i;let c;e[0]!==s||e[1]!==l?(c=$t(l,s),e[0]=s,e[1]=l,e[2]=c):c=e[2];const r=c,p=s&&typeof s=="object"&&"description"in s&&typeof s.description=="string"?s.description:void 0;let d;e[3]!==n?(d=n&&Object.keys(n).length>0,e[3]=n,e[4]=d):d=e[4];const o=d;let m;e[5]!==r||e[6]!==s.title?(m=t.jsx(Ge,{icon:r,name:s.title,size:"md",className:"shrink-0 shadow-sm"}),e[5]=r,e[6]=s.title,e[7]=m):m=e[7];let u;e[8]!==s.title?(u=t.jsx("h3",{className:"text-base font-medium text-foreground truncate",children:s.title}),e[8]=s.title,e[9]=u):u=e[9];const f=p||"No description";let a;e[10]!==f?(a=t.jsx("p",{className:"text-base text-muted-foreground line-clamp-2",children:f}),e[10]=f,e[11]=a):a=e[11];let b;e[12]!==u||e[13]!==a?(b=t.jsxs("div",{className:"flex flex-col gap-0 flex-1",children:[u,a]}),e[12]=u,e[13]=a,e[14]=b):b=e[14];let y;e[15]!==m||e[16]!==b?(y=t.jsxs("div",{className:"flex flex-col gap-4 p-6 flex-1",children:[m,b]}),e[15]=m,e[16]=b,e[17]=y):y=e[17];let C;e[18]!==n||e[19]!==o||e[20]!==s?(C=o&&t.jsx("div",{className:"absolute top-6 right-6 sm:opacity-0 sm:group-hover:opacity-100 transition-opacity",onClick:Kt,onMouseDown:Ft,children:t.jsxs(He,{children:[t.jsx(Ye,{asChild:!0,children:t.jsx(Ce,{variant:"ghost",size:"icon",className:"h-8 w-8",onClick:Lt,children:t.jsx(Xe,{size:20})})}),t.jsxs(Je,{align:"end",onClick:zt,children:[n.open&&t.jsxs(O,{onClick:g=>{g.stopPropagation(),n.open?.(s)},children:[t.jsx(tt,{size:16}),"Open"]}),n.edit&&t.jsxs(O,{onClick:g=>{g.stopPropagation(),n.edit?.(s)},children:[t.jsx(et,{size:16}),"Edit"]}),n.duplicate&&t.jsxs(O,{onClick:g=>{g.stopPropagation(),n.duplicate?.(s)},children:[t.jsx(Ze,{size:16}),"Duplicate"]}),n.delete&&t.jsxs(O,{variant:"destructive",onClick:g=>{g.stopPropagation(),n.delete?.(s)},children:[t.jsx(st,{size:16}),"Delete"]})]})]})}),e[18]=n,e[19]=o,e[20]=s,e[21]=C):C=e[21];let v;return e[22]!==y||e[23]!==C?(v=t.jsxs(gt,{className:"cursor-pointer transition-colors hover:bg-accent/50 h-full flex flex-col group relative",children:[y,C]}),e[22]=y,e[23]=C,e[24]=v):v=e[24],v}function zt(i){return i.stopPropagation()}function Lt(i){return i.stopPropagation()}function Ft(i){return i.stopPropagation()}function Kt(i){return i.stopPropagation()}const Mt=["icon","avatar","logo"],Re=["created_at","created_by","id"];function Ut(i){return Object.keys(i).find(e=>Mt.includes(e.toLowerCase()))}function ot(i,e){return Object.keys(i.properties||{}).filter(s=>["id","created_at","updated_at","created_by","updated_by"].includes(s)?!1:e?e.includes(s):!0).map(s=>({id:s,label:s.charAt(0).toUpperCase()+s.slice(1).replace(/_/g," ")}))}function Wt(i){const e=oe.c(30),{data:s,schema:l,viewMode:n,search:c,sortKey:r,sortDirection:p,onSort:d,actions:o,onItemClick:m,headerActions:u,emptyState:f,readOnly:a,columns:b,hideToolbar:y,sortableFields:C}=i,v=p===void 0?"asc":p,g=d===void 0?qt:d;let $;e[0]!==o?($=o===void 0?{}:o,e[0]=o,e[1]=$):$=e[1];const h=$,T=m===void 0?Vt:m,E=u===void 0?null:u,N=f===void 0?null:f,k=a===void 0?!1:a,x=b===void 0?void 0:b,z=y===void 0?!1:y,P=C===void 0?void 0:C;let D;e[2]!==x||e[3]!==l||e[4]!==P?(D=x?x.filter(Bt).filter(A=>!P||P.includes(A.id)).map(Rt):ot(l,P),e[2]=x,e[3]=l,e[4]=P,e[5]=D):D=e[5];const w=D;let S;e[6]!==E||e[7]!==z||e[8]!==g||e[9]!==v||e[10]!==r||e[11]!==w?(S=!z&&t.jsx("div",{className:"shrink-0 w-full border-b border-border h-12",children:t.jsxs("div",{className:"flex items-center gap-3 h-12 px-4",children:[t.jsx("div",{className:"flex items-center gap-2 flex-1",children:E}),t.jsx("div",{className:"flex items-center gap-2 shrink-0",children:t.jsx(Qe,{sortKey:r,sortDirection:v,onSort:g,sortOptions:w})})]})}),e[6]=E,e[7]=z,e[8]=g,e[9]=v,e[10]=r,e[11]=w,e[12]=S):S=e[12];let _;e[13]!==h||e[14]!==x||e[15]!==s||e[16]!==N||e[17]!==T||e[18]!==g||e[19]!==k||e[20]!==l||e[21]!==c||e[22]!==v||e[23]!==r||e[24]!==P||e[25]!==n?(_=n==="cards"?t.jsx("div",{className:"flex-1 overflow-auto p-5",children:s.length===0?t.jsx("div",{className:"flex items-center justify-center h-full",children:N||t.jsx(We,{icon:t.jsx(Ue,{size:36,className:"text-muted-foreground"}),title:"No items found",description:c?"Try adjusting your search":"No items to display"})}):t.jsx("div",{className:"grid grid-cols-[repeat(auto-fill,minmax(280px,1fr))] gap-4",children:s.map(A=>t.jsx("div",{onClick:()=>T?.(A),className:"cursor-pointer h-full",children:t.jsx(kt,{item:A,schema:l,readOnly:k,actions:h})},A.id))})}):t.jsx(xt,{columns:Ht(x,l,P,h),data:s,sortKey:r,sortDirection:v,onSort:g,onRowClick:T,emptyState:N||t.jsx(We,{icon:t.jsx(Ue,{size:36,className:"text-muted-foreground"}),title:"No items found",description:c?"Try adjusting your search":"No items to display"})}),e[13]=h,e[14]=x,e[15]=s,e[16]=N,e[17]=T,e[18]=g,e[19]=k,e[20]=l,e[21]=c,e[22]=v,e[23]=r,e[24]=P,e[25]=n,e[26]=_):_=e[26];let I;return e[27]!==S||e[28]!==_?(I=t.jsxs("div",{className:"h-full flex flex-col overflow-hidden",children:[S,_]}),e[27]=S,e[28]=_,e[29]=I):I=e[29],I}function Rt(i){return{id:i.id,label:typeof i.header=="string"?i.header:i.id}}function Bt(i){return i.sortable!==!1}function Vt(){}function qt(){}function Qt(i){return{id:"actions",header:"",render:e=>t.jsxs(He,{children:[t.jsx(Ye,{asChild:!0,children:t.jsx(Ce,{variant:"ghost",size:"sm",className:"h-8 w-8 p-0",onClick:s=>s.stopPropagation(),children:t.jsx(Xe,{size:20})})}),t.jsxs(Je,{align:"end",onClick:s=>s.stopPropagation(),children:[i.open&&t.jsxs(O,{onClick:s=>{s.stopPropagation(),i.open?.(e)},children:[t.jsx(tt,{size:16}),"Open"]}),i.edit&&t.jsxs(O,{onClick:s=>{s.stopPropagation(),i.edit?.(e)},children:[t.jsx(et,{size:16}),"Edit"]}),i.duplicate&&t.jsxs(O,{onClick:s=>{s.stopPropagation(),i.duplicate?.(e)},children:[t.jsx(Ze,{size:16}),"Duplicate"]}),i.delete&&t.jsxs(O,{variant:"destructive",onClick:s=>{s.stopPropagation(),i.delete?.(e)},children:[t.jsx(st,{size:16}),"Delete"]})]})]}),cellClassName:"w-[60px]",sortable:!1}}function nt(i){const e=i.type;return Array.isArray(e)?e.every(s=>nt({type:s})):e==="string"||e==="number"||e==="integer"||e==="boolean"||e==="null"}function Gt(i,e){const s=i.properties||{},l=Object.keys(s).filter(o=>{const m=s[o];return m&&nt(m)}),n=Ut(s),c=[],r=new Set;n&&l.includes(n)&&(c.push(n),r.add(n));const p=["title","description","updated_at","updated_by"];for(const o of p)l.includes(o)&&!r.has(o)&&(c.push(o),r.add(o));const d=l.filter(o=>!r.has(o)&&!Re.includes(o)).sort((o,m)=>o.localeCompare(m));for(const o of d)c.push(o),r.add(o);for(const o of Re)l.includes(o)&&!r.has(o)&&(c.push(o),r.add(o));return c.map(o=>{const m=s[o],u=e?e.includes(o):!["id"].includes(o);return o===n?{id:o,header:"",render:f=>{const a=f[o];return t.jsx(Ge,{icon:a,name:f.title,size:"sm",className:"shrink-0 shadow-sm"})},sortable:!1,cellClassName:"w-16 shrink-0",wrap:!0}:o==="description"?{id:o,header:"Description",render:f=>{const a=f[o];return a==null?"—":t.jsx("span",{className:"block truncate max-w-[50ch]",children:String(a)})},sortable:u,cellClassName:"max-w-[50ch]"}:o==="created_by"||o==="updated_by"?{id:o,header:o.charAt(0).toUpperCase()+o.slice(1).replace(/_/g," "),render:f=>{const a=f[o];return a?t.jsx(jt,{id:String(a),size:"xs"}):"—"},sortable:u,cellClassName:"max-w-[250px]"}:m?.format==="date-time"||o.endsWith("_at")?{id:o,header:o.charAt(0).toUpperCase()+o.slice(1).replace(/_/g," "),render:f=>{const a=f[o];return a?t.jsx("span",{className:"block truncate max-w-full",children:new Date(a).toLocaleDateString()}):"—"},sortable:u,cellClassName:"max-w-[200px]"}:{id:o,header:o.charAt(0).toUpperCase()+o.slice(1).replace(/_/g," "),render:f=>{const a=f[o];return a==null?"—":t.jsx("span",{className:"block truncate max-w-full",children:String(a)})},sortable:u,cellClassName:"max-w-[200px]"}})}function Ht(i,e,s,l){const n=i||Gt(e,s);return n.some(p=>p.id==="actions")?n:Object.keys(l).length>0?[...n,Qt(l)]:n}function Yt(i){const e=oe.c(118),{connectionId:s,org:l,activeCollection:n,onItemClick:c}=i,r=n.name,p=n.schema??ft,d=n.hasCreateTool,o=n.hasUpdateTool,m=n.hasDeleteTool,u=Be(),{data:f}=ct.useSession(),a=f?.user?.id||"unknown",b=Tt(s);let y;e[0]!==b||e[1]!==s?(y=b?bt(b):s,e[0]=b,e[1]=s,e[2]=y):y=e[2];const C=y,{org:v}=ze();let g;e[3]!==s||e[4]!==v.id?(g={connectionId:s,orgId:v.id},e[3]=s,e[4]=v.id,e[5]=g):g=e[5];const $=Ve(g),h=It(s,r,$),T=`${s}-${r}`;let E;e[6]!==l||e[7]!==T?(E={namespace:l,resource:T,defaultSortKey:"updated_at"},e[6]=l,e[7]=T,e[8]=E):E=e[8];const{search:N,searchTerm:k,setSearch:x,viewMode:z,setViewMode:P,sortKey:D,sortDirection:w,handleSort:S}=Ct(E);let _;e[9]!==k||e[10]!==w||e[11]!==D?(_={searchTerm:k,sortKey:D,sortDirection:w},e[9]=k,e[10]=w,e[11]=D,e[12]=_):_=e[12];const I=At(s,r,$,_),A=!d&&!o&&!m;let ne;e[13]!==C||e[14]!==r||e[15]!==u||e[16]!==c||e[17]!==l?(ne=j=>{if(c){c(j);return}u({to:"/$org/settings/connections/$appSlug/$collectionName/$itemId",params:{org:l,appSlug:C,collectionName:r,itemId:j.id}})},e[13]=C,e[14]=r,e[15]=u,e[16]=c,e[17]=l,e[18]=ne):ne=e[18];const L=ne;let re;e[19]!==h.create||e[20]!==a?(re=async j=>{const xe=new Date().toISOString();await h.create.mutateAsync({...j,id:Me("conn"),title:`${j.title} (Copy)`,created_at:xe,updated_at:xe,created_by:a,updated_by:a})},e[19]=h.create,e[20]=a,e[21]=re):re=e[21];const be=re,[F,ve]=dt.useState(null);let le;e[22]===Symbol.for("react.memo_cache_sentinel")?(le=j=>{ve(j)},e[22]=le):le=e[22];const rt=le;let K;e[23]!==L||e[24]!==o?(K=o&&{edit:L},e[23]=L,e[24]=o,e[25]=K):K=e[25];let M;e[26]!==be||e[27]!==d?(M=d&&{duplicate:be},e[26]=be,e[27]=d,e[28]=M):M=e[28];let U;e[29]!==m?(U=m&&{delete:rt},e[29]=m,e[30]=U):U=e[30];let ae;e[31]!==M||e[32]!==U||e[33]!==K?(ae={...K,...M,...U},e[31]=M,e[32]=U,e[33]=K,e[34]=ae):ae=e[34];const ye=ae;let ce;e[35]!==h.delete||e[36]!==F?(ce=async()=>{F&&(await h.delete.mutateAsync(F.id),ve(null))},e[35]=h.delete,e[36]=F,e[37]=ce):ce=e[37];const Ne=ce;let de;e[38]!==h.create||e[39]!==C||e[40]!==r||e[41]!==d||e[42]!==u||e[43]!==l||e[44]!==a?(de=async()=>{if(!d){Le.error("Create operation is not available for this collection");return}const j=new Date().toISOString(),xe={id:Me("conn"),title:"New Item",description:"A brief description of the item",created_at:j,updated_at:j,created_by:a,updated_by:a};try{const ke=await h.create.mutateAsync(xe);u({to:"/$org/settings/connections/$appSlug/$collectionName/$itemId",params:{org:l,appSlug:C,collectionName:r,itemId:ke.id}})}catch(ke){console.error("Failed to create item:",ke)}},e[38]=h.create,e[39]=C,e[40]=r,e[41]=d,e[42]=u,e[43]=l,e[44]=a,e[45]=de):de=e[45];const we=de;let ue;e[46]!==p?(ue=ot(p),e[46]=p,e[47]=ue):ue=e[47];const Se=ue,lt=(I?.length??0)>0,at=d&&!lt&&!N;let me;e[48]!==h.create||e[49]!==we||e[50]!==d?(me=d?t.jsxs(Ce,{onClick:we,size:"sm",disabled:h.create.isPending,className:"h-7",children:[t.jsx(Et,{className:"mr-2 h-4 w-4"}),h.create.isPending?"Creating...":"Create"]}):null,e[48]=h.create,e[49]=we,e[50]=d,e[51]=me):me=e[51];const pe=me,Pe=D;let W;e[52]!==S||e[53]!==w||e[54]!==Se||e[55]!==Pe?(W=t.jsx(Ot,{children:t.jsx(Qe,{sortKey:Pe,sortDirection:w,onSort:S,sortOptions:Se})}),e[52]=S,e[53]=w,e[54]=Se,e[55]=Pe,e[56]=W):W=e[56];const _e=`Search ${r}...`;let R;e[57]!==x?(R=j=>{j.key==="Escape"&&(x(""),j.target.blur())},e[57]=x,e[58]=R):R=e[58];let B;e[59]!==N||e[60]!==x||e[61]!==_e||e[62]!==R?(B=t.jsx("div",{className:"flex-1",children:t.jsx(ht,{value:N,onChange:x,placeholder:_e,onKeyDown:R})}),e[59]=N,e[60]=x,e[61]=_e,e[62]=R,e[63]=B):B=e[63];let V;e[64]!==pe||e[65]!==d?(V=d&&t.jsx("div",{className:"pr-3",children:pe}),e[64]=pe,e[65]=d,e[66]=V):V=e[66];let q;e[67]!==B||e[68]!==V?(q=t.jsxs("div",{className:"flex items-center gap-2",children:[B,V]}),e[67]=B,e[68]=V,e[69]=q):q=e[69];let Q;e[70]!==I?(Q=I??[],e[70]=I,e[71]=Q):Q=e[71];const De=D;let G;e[72]!==L?(G=j=>L(j),e[72]=L,e[73]=G):G=e[73];const Ie="No items found",Ae=N?"Try adjusting your search terms":"This collection doesn't have any items yet.",Te=at?pe:void 0;let H;e[74]!==Ie||e[75]!==Ae||e[76]!==Te?(H=t.jsx(it,{image:null,title:Ie,description:Ae,actions:Te}),e[74]=Ie,e[75]=Ae,e[76]=Te,e[77]=H):H=e[77];let Y;e[78]!==S||e[79]!==A||e[80]!==ye||e[81]!==p||e[82]!==N||e[83]!==x||e[84]!==P||e[85]!==w||e[86]!==Q||e[87]!==De||e[88]!==G||e[89]!==H||e[90]!==z?(Y=t.jsx("div",{className:"flex-1 overflow-auto",children:t.jsx(Wt,{hideToolbar:!0,data:Q,schema:p,viewMode:z,onViewModeChange:P,search:N,onSearchChange:x,sortKey:De,sortDirection:w,onSort:S,actions:ye,onItemClick:G,readOnly:A,emptyState:H})}),e[78]=S,e[79]=A,e[80]=ye,e[81]=p,e[82]=N,e[83]=x,e[84]=P,e[85]=w,e[86]=Q,e[87]=De,e[88]=G,e[89]=H,e[90]=z,e[91]=Y):Y=e[91];let J;e[92]!==q||e[93]!==Y?(J=t.jsxs("div",{className:"flex flex-col h-full overflow-hidden",children:[q,Y]}),e[92]=q,e[93]=Y,e[94]=J):J=e[94];const Ee=!!F;let fe;e[95]===Symbol.for("react.memo_cache_sentinel")?(fe=j=>{j||ve(null)},e[95]=fe):fe=e[95];let he;e[96]===Symbol.for("react.memo_cache_sentinel")?(he=t.jsx(Nt,{children:"Delete item?"}),e[96]=he):he=e[96];const Oe=F?.title;let Z;e[97]!==Oe?(Z=t.jsxs(wt,{children:[he,t.jsxs(St,{children:['Are you sure you want to delete "',Oe,'"? This action cannot be undone.']})]}),e[97]=Oe,e[98]=Z):Z=e[98];let X;e[99]!==h.delete.isPending?(X=t.jsx(vt,{disabled:h.delete.isPending,children:"Cancel"}),e[99]=h.delete.isPending,e[100]=X):X=e[100];const $e=h.delete.isPending?"Deleting...":"Delete";let ee;e[101]!==h.delete.isPending||e[102]!==Ne||e[103]!==$e?(ee=t.jsx(yt,{onClick:Ne,disabled:h.delete.isPending,className:"bg-destructive text-destructive-foreground hover:bg-destructive/90",children:$e}),e[101]=h.delete.isPending,e[102]=Ne,e[103]=$e,e[104]=ee):ee=e[104];let te;e[105]!==X||e[106]!==ee?(te=t.jsxs(Pt,{children:[X,ee]}),e[105]=X,e[106]=ee,e[107]=te):te=e[107];let se;e[108]!==Z||e[109]!==te?(se=t.jsxs(_t,{children:[Z,te]}),e[108]=Z,e[109]=te,e[110]=se):se=e[110];let ie;e[111]!==Ee||e[112]!==se?(ie=t.jsx(Dt,{open:Ee,onOpenChange:fe,children:se}),e[111]=Ee,e[112]=se,e[113]=ie):ie=e[113];let ge;return e[114]!==W||e[115]!==J||e[116]!==ie?(ge=t.jsxs(t.Fragment,{children:[W,J,ie]}),e[114]=W,e[115]=J,e[116]=ie,e[117]=ge):ge=e[117],ge}function Jt(){const i=oe.c(12),{org:e,project:s}=ze(),l=ut();let n;i[0]!==e.id?(n={connectionId:qe,orgId:e.id},i[0]=e.id,i[1]=n):n=i[1];const c=Ve(n);let r;i[2]!==c||i[3]!==s?(r=async m=>{const u=s.enabledPlugins??[];if(u.includes(m))return;const f=[...u,m],a=await c.callTool({name:"COLLECTION_VIRTUAL_MCP_UPDATE",arguments:{id:s.id,data:{metadata:{enabled_plugins:f}}}});return a.structuredContent??a},i[2]=c,i[3]=s,i[4]=r):r=i[4];let p;i[5]!==e.id||i[6]!==s||i[7]!==l?(p=()=>{l.invalidateQueries({queryKey:Fe.project(e.id,s.slug)}),l.invalidateQueries({queryKey:Fe.projects(e.id)})},i[5]=e.id,i[6]=s,i[7]=l,i[8]=p):p=i[8];let d;return i[9]!==r||i[10]!==p?(d={mutationFn:r,onSuccess:p,onError:Zt},i[9]=r,i[10]=p,i[11]=d):d=i[11],mt(d)}function Zt(i){Le.error("Failed to enable plugin: "+(i instanceof Error?i.message:"Unknown error"))}function Xt(i){const e=oe.c(12),{pluginId:s,title:l,description:n,icon:c}=i,r=Jt();let p;e[0]!==r||e[1]!==s?(p=async()=>{try{await r.mutateAsync(s),Le.success("Plugin enabled!")}catch{}},e[0]=r,e[1]=s,e[2]=p):p=e[2];const d=p,o=c??null,m=r.isPending?"Enabling…":"Enable plugin";let u;e[3]!==r.isPending||e[4]!==d||e[5]!==m?(u=t.jsx(Ce,{onClick:d,disabled:r.isPending,children:m}),e[3]=r.isPending,e[4]=d,e[5]=m,e[6]=u):u=e[6];let f;return e[7]!==n||e[8]!==o||e[9]!==u||e[10]!==l?(f=t.jsx(it,{image:o,title:l,description:n,actions:u}),e[7]=n,e[8]=o,e[9]=u,e[10]=l,e[11]=f):f=e[11],f}const es={name:"WORKFLOW",displayName:"Workflow",hasCreateTool:!0,hasUpdateTool:!0,hasDeleteTool:!0};function oi(){const{project:i,org:e}=ze();if(!(i.enabledPlugins??[]).includes(Ke))return t.jsx(je,{children:t.jsx(je.Content,{children:t.jsx("div",{className:"flex flex-col items-center justify-center h-full",children:t.jsx(Xt,{pluginId:Ke,title:"Enable Workflows",description:"Automate multi-step processes by enabling the Workflows plugin. Once enabled you can create, run, and monitor workflows.",icon:t.jsx("div",{className:"bg-muted p-4 rounded-full",children:t.jsx(pt,{className:"size-8 text-muted-foreground"})})})})})});const n=Be();return t.jsx(je,{children:t.jsx(je.Content,{children:t.jsx(Yt,{connectionId:qe,org:e.slug,activeCollection:es,onItemClick:c=>n({to:"/$org/settings/workflows/$itemId",params:{org:e.slug,itemId:c.id}})})})})}export{oi as default};
1
+ import{e as oe,j as t,B as Ce,f as Be,b as ct,s as ze,r as dt,x as Le,o as ut,a as mt,K as Fe,Y as Ke,Z as pt}from"./index-DRnP8Xhy.js";import{u as Ve,S as qe}from"./constants-DZ5y4NEu.js";import{B as ft,g as Me}from"./constants-BwurOShK.js";import{C as Qe}from"./collection-display-button-CQ2KlZSu.js";import{C as ht}from"./collection-search-D_mJKf_N.js";import{C as gt}from"./card-Hve9iIpZ.js";import{I as Ge}from"./integration-icon-Cz-seBmA.js";import{D as He,a as Ye,b as Je,c as O}from"./dropdown-menu-Dn3K1Gpo.js";import{c as Ze}from"./XCircle-BKeTm8Ww.js";import{i as Xe}from"./DotsVertical-_1yE4PFi.js";import{y as et,H as Ue}from"./agent-icon-DnE1m294.js";import{s as tt}from"./RefreshCcw01-DV-_PfmV.js";import{s as st}from"./Trash01-_-2EAUWH.js";import{C as xt}from"./collection-table-wrapper-fO254CQy.js";import{E as We}from"./empty-state-B4R6bbr3.js";import{U as jt}from"./user-BCVAIUhB.js";import{E as it}from"./empty-state-DbgILpoj.js";import{u as Ct}from"./use-list-state-D2VmPCpI.js";import{g as bt}from"./connection-slug-eyAPH6o3.js";import{f as vt,g as yt,c as Nt,b as wt,d as St,e as Pt,a as _t,A as Dt}from"./alert-dialog-DvcLf48w.js";import{a as It,c as At}from"./use-collections-CDG0ivO9.js";import{a as Tt}from"./use-connection-DDedfw7l.js";import{s as Et}from"./Plus-8zlfW9Nb.js";import{a as Ot}from"./layout-bMTJXFfz.js";import{P as je}from"./index-D1LVHcIe.js";import"./collections-CISD8jzc.js";import"./XClose-BpjQA_dF.js";import"./ChevronDown-B21GyFLP.js";import"./tooltip-CUw8WpYG.js";import"./view-mode-toggle-Bbj9P-zr.js";import"./badge-BnwDLyJj.js";import"./SearchMd-BgpZuBQH.js";import"./Container-DVwtR0PY.js";import"./ChevronRight-C7fFXCXU.js";import"./AlertCircle-CtSiN7Dh.js";import"./Tool01-73PH4njb.js";import"./ArrowNarrowLeft-CjMD5YtT.js";import"./ArrowUpRight-VGEco3p8.js";import"./ZapSquare-BL-_ZEqM.js";import"./Users03-CtQ_adLe.js";import"./CheckCircle-BOjQcSoZ.js";import"./ChevronUp-DLJe-Ifh.js";import"./Star01-DupDdRAe.js";import"./Palette-xIvgAE_U.js";import"./LinkExternal01-BeNjIA73.js";import"./Lock01-y9D26Lk9.js";import"./Sun-B1MYWGMj.js";import"./Play-esUCyQh5.js";import"./Settings02-B2DHZxlV.js";import"./Shield01-CewVSi37.js";import"./User01-DLnrd0WJ.js";import"./X-DavTUkoo.js";import"./Zap-DT_tBFfJ.js";import"./table-dOL69UsN.js";import"./avatar-B1YFr91G.js";import"./use-view-mode-B3HPjSsa.js";function $t(i,e){const s=i.properties||{};for(const n in s){const c=s[n];if(c&&c.type==="string"&&(c.format==="url"||c.format==="uri")&&e&&typeof e=="object"&&n in e&&e[n])return e[n]}const l=["image","img","avatar","icon","logo","thumbnail","cover"];for(const n of l)if(e&&typeof e=="object"&&n in e&&typeof e[n]=="string")return e[n]}function kt(i){const e=oe.c(25),{item:s,schema:l,actions:n}=i;let c;e[0]!==s||e[1]!==l?(c=$t(l,s),e[0]=s,e[1]=l,e[2]=c):c=e[2];const r=c,p=s&&typeof s=="object"&&"description"in s&&typeof s.description=="string"?s.description:void 0;let d;e[3]!==n?(d=n&&Object.keys(n).length>0,e[3]=n,e[4]=d):d=e[4];const o=d;let m;e[5]!==r||e[6]!==s.title?(m=t.jsx(Ge,{icon:r,name:s.title,size:"md",className:"shrink-0 shadow-sm"}),e[5]=r,e[6]=s.title,e[7]=m):m=e[7];let u;e[8]!==s.title?(u=t.jsx("h3",{className:"text-base font-medium text-foreground truncate",children:s.title}),e[8]=s.title,e[9]=u):u=e[9];const f=p||"No description";let a;e[10]!==f?(a=t.jsx("p",{className:"text-base text-muted-foreground line-clamp-2",children:f}),e[10]=f,e[11]=a):a=e[11];let b;e[12]!==u||e[13]!==a?(b=t.jsxs("div",{className:"flex flex-col gap-0 flex-1",children:[u,a]}),e[12]=u,e[13]=a,e[14]=b):b=e[14];let y;e[15]!==m||e[16]!==b?(y=t.jsxs("div",{className:"flex flex-col gap-4 p-6 flex-1",children:[m,b]}),e[15]=m,e[16]=b,e[17]=y):y=e[17];let C;e[18]!==n||e[19]!==o||e[20]!==s?(C=o&&t.jsx("div",{className:"absolute top-6 right-6 sm:opacity-0 sm:group-hover:opacity-100 transition-opacity",onClick:Kt,onMouseDown:Ft,children:t.jsxs(He,{children:[t.jsx(Ye,{asChild:!0,children:t.jsx(Ce,{variant:"ghost",size:"icon",className:"h-8 w-8",onClick:Lt,children:t.jsx(Xe,{size:20})})}),t.jsxs(Je,{align:"end",onClick:zt,children:[n.open&&t.jsxs(O,{onClick:g=>{g.stopPropagation(),n.open?.(s)},children:[t.jsx(tt,{size:16}),"Open"]}),n.edit&&t.jsxs(O,{onClick:g=>{g.stopPropagation(),n.edit?.(s)},children:[t.jsx(et,{size:16}),"Edit"]}),n.duplicate&&t.jsxs(O,{onClick:g=>{g.stopPropagation(),n.duplicate?.(s)},children:[t.jsx(Ze,{size:16}),"Duplicate"]}),n.delete&&t.jsxs(O,{variant:"destructive",onClick:g=>{g.stopPropagation(),n.delete?.(s)},children:[t.jsx(st,{size:16}),"Delete"]})]})]})}),e[18]=n,e[19]=o,e[20]=s,e[21]=C):C=e[21];let v;return e[22]!==y||e[23]!==C?(v=t.jsxs(gt,{className:"cursor-pointer transition-colors hover:bg-accent/50 h-full flex flex-col group relative",children:[y,C]}),e[22]=y,e[23]=C,e[24]=v):v=e[24],v}function zt(i){return i.stopPropagation()}function Lt(i){return i.stopPropagation()}function Ft(i){return i.stopPropagation()}function Kt(i){return i.stopPropagation()}const Mt=["icon","avatar","logo"],Re=["created_at","created_by","id"];function Ut(i){return Object.keys(i).find(e=>Mt.includes(e.toLowerCase()))}function ot(i,e){return Object.keys(i.properties||{}).filter(s=>["id","created_at","updated_at","created_by","updated_by"].includes(s)?!1:e?e.includes(s):!0).map(s=>({id:s,label:s.charAt(0).toUpperCase()+s.slice(1).replace(/_/g," ")}))}function Wt(i){const e=oe.c(30),{data:s,schema:l,viewMode:n,search:c,sortKey:r,sortDirection:p,onSort:d,actions:o,onItemClick:m,headerActions:u,emptyState:f,readOnly:a,columns:b,hideToolbar:y,sortableFields:C}=i,v=p===void 0?"asc":p,g=d===void 0?qt:d;let $;e[0]!==o?($=o===void 0?{}:o,e[0]=o,e[1]=$):$=e[1];const h=$,T=m===void 0?Vt:m,E=u===void 0?null:u,N=f===void 0?null:f,k=a===void 0?!1:a,x=b===void 0?void 0:b,z=y===void 0?!1:y,P=C===void 0?void 0:C;let D;e[2]!==x||e[3]!==l||e[4]!==P?(D=x?x.filter(Bt).filter(A=>!P||P.includes(A.id)).map(Rt):ot(l,P),e[2]=x,e[3]=l,e[4]=P,e[5]=D):D=e[5];const w=D;let S;e[6]!==E||e[7]!==z||e[8]!==g||e[9]!==v||e[10]!==r||e[11]!==w?(S=!z&&t.jsx("div",{className:"shrink-0 w-full border-b border-border h-12",children:t.jsxs("div",{className:"flex items-center gap-3 h-12 px-4",children:[t.jsx("div",{className:"flex items-center gap-2 flex-1",children:E}),t.jsx("div",{className:"flex items-center gap-2 shrink-0",children:t.jsx(Qe,{sortKey:r,sortDirection:v,onSort:g,sortOptions:w})})]})}),e[6]=E,e[7]=z,e[8]=g,e[9]=v,e[10]=r,e[11]=w,e[12]=S):S=e[12];let _;e[13]!==h||e[14]!==x||e[15]!==s||e[16]!==N||e[17]!==T||e[18]!==g||e[19]!==k||e[20]!==l||e[21]!==c||e[22]!==v||e[23]!==r||e[24]!==P||e[25]!==n?(_=n==="cards"?t.jsx("div",{className:"flex-1 overflow-auto p-5",children:s.length===0?t.jsx("div",{className:"flex items-center justify-center h-full",children:N||t.jsx(We,{icon:t.jsx(Ue,{size:36,className:"text-muted-foreground"}),title:"No items found",description:c?"Try adjusting your search":"No items to display"})}):t.jsx("div",{className:"grid grid-cols-[repeat(auto-fill,minmax(280px,1fr))] gap-4",children:s.map(A=>t.jsx("div",{onClick:()=>T?.(A),className:"cursor-pointer h-full",children:t.jsx(kt,{item:A,schema:l,readOnly:k,actions:h})},A.id))})}):t.jsx(xt,{columns:Ht(x,l,P,h),data:s,sortKey:r,sortDirection:v,onSort:g,onRowClick:T,emptyState:N||t.jsx(We,{icon:t.jsx(Ue,{size:36,className:"text-muted-foreground"}),title:"No items found",description:c?"Try adjusting your search":"No items to display"})}),e[13]=h,e[14]=x,e[15]=s,e[16]=N,e[17]=T,e[18]=g,e[19]=k,e[20]=l,e[21]=c,e[22]=v,e[23]=r,e[24]=P,e[25]=n,e[26]=_):_=e[26];let I;return e[27]!==S||e[28]!==_?(I=t.jsxs("div",{className:"h-full flex flex-col overflow-hidden",children:[S,_]}),e[27]=S,e[28]=_,e[29]=I):I=e[29],I}function Rt(i){return{id:i.id,label:typeof i.header=="string"?i.header:i.id}}function Bt(i){return i.sortable!==!1}function Vt(){}function qt(){}function Qt(i){return{id:"actions",header:"",render:e=>t.jsxs(He,{children:[t.jsx(Ye,{asChild:!0,children:t.jsx(Ce,{variant:"ghost",size:"sm",className:"h-8 w-8 p-0",onClick:s=>s.stopPropagation(),children:t.jsx(Xe,{size:20})})}),t.jsxs(Je,{align:"end",onClick:s=>s.stopPropagation(),children:[i.open&&t.jsxs(O,{onClick:s=>{s.stopPropagation(),i.open?.(e)},children:[t.jsx(tt,{size:16}),"Open"]}),i.edit&&t.jsxs(O,{onClick:s=>{s.stopPropagation(),i.edit?.(e)},children:[t.jsx(et,{size:16}),"Edit"]}),i.duplicate&&t.jsxs(O,{onClick:s=>{s.stopPropagation(),i.duplicate?.(e)},children:[t.jsx(Ze,{size:16}),"Duplicate"]}),i.delete&&t.jsxs(O,{variant:"destructive",onClick:s=>{s.stopPropagation(),i.delete?.(e)},children:[t.jsx(st,{size:16}),"Delete"]})]})]}),cellClassName:"w-[60px]",sortable:!1}}function nt(i){const e=i.type;return Array.isArray(e)?e.every(s=>nt({type:s})):e==="string"||e==="number"||e==="integer"||e==="boolean"||e==="null"}function Gt(i,e){const s=i.properties||{},l=Object.keys(s).filter(o=>{const m=s[o];return m&&nt(m)}),n=Ut(s),c=[],r=new Set;n&&l.includes(n)&&(c.push(n),r.add(n));const p=["title","description","updated_at","updated_by"];for(const o of p)l.includes(o)&&!r.has(o)&&(c.push(o),r.add(o));const d=l.filter(o=>!r.has(o)&&!Re.includes(o)).sort((o,m)=>o.localeCompare(m));for(const o of d)c.push(o),r.add(o);for(const o of Re)l.includes(o)&&!r.has(o)&&(c.push(o),r.add(o));return c.map(o=>{const m=s[o],u=e?e.includes(o):!["id"].includes(o);return o===n?{id:o,header:"",render:f=>{const a=f[o];return t.jsx(Ge,{icon:a,name:f.title,size:"sm",className:"shrink-0 shadow-sm"})},sortable:!1,cellClassName:"w-16 shrink-0",wrap:!0}:o==="description"?{id:o,header:"Description",render:f=>{const a=f[o];return a==null?"—":t.jsx("span",{className:"block truncate max-w-[50ch]",children:String(a)})},sortable:u,cellClassName:"max-w-[50ch]"}:o==="created_by"||o==="updated_by"?{id:o,header:o.charAt(0).toUpperCase()+o.slice(1).replace(/_/g," "),render:f=>{const a=f[o];return a?t.jsx(jt,{id:String(a),size:"xs"}):"—"},sortable:u,cellClassName:"max-w-[250px]"}:m?.format==="date-time"||o.endsWith("_at")?{id:o,header:o.charAt(0).toUpperCase()+o.slice(1).replace(/_/g," "),render:f=>{const a=f[o];return a?t.jsx("span",{className:"block truncate max-w-full",children:new Date(a).toLocaleDateString()}):"—"},sortable:u,cellClassName:"max-w-[200px]"}:{id:o,header:o.charAt(0).toUpperCase()+o.slice(1).replace(/_/g," "),render:f=>{const a=f[o];return a==null?"—":t.jsx("span",{className:"block truncate max-w-full",children:String(a)})},sortable:u,cellClassName:"max-w-[200px]"}})}function Ht(i,e,s,l){const n=i||Gt(e,s);return n.some(p=>p.id==="actions")?n:Object.keys(l).length>0?[...n,Qt(l)]:n}function Yt(i){const e=oe.c(118),{connectionId:s,org:l,activeCollection:n,onItemClick:c}=i,r=n.name,p=n.schema??ft,d=n.hasCreateTool,o=n.hasUpdateTool,m=n.hasDeleteTool,u=Be(),{data:f}=ct.useSession(),a=f?.user?.id||"unknown",b=Tt(s);let y;e[0]!==b||e[1]!==s?(y=b?bt(b):s,e[0]=b,e[1]=s,e[2]=y):y=e[2];const C=y,{org:v}=ze();let g;e[3]!==s||e[4]!==v.id?(g={connectionId:s,orgId:v.id},e[3]=s,e[4]=v.id,e[5]=g):g=e[5];const $=Ve(g),h=It(s,r,$),T=`${s}-${r}`;let E;e[6]!==l||e[7]!==T?(E={namespace:l,resource:T,defaultSortKey:"updated_at"},e[6]=l,e[7]=T,e[8]=E):E=e[8];const{search:N,searchTerm:k,setSearch:x,viewMode:z,setViewMode:P,sortKey:D,sortDirection:w,handleSort:S}=Ct(E);let _;e[9]!==k||e[10]!==w||e[11]!==D?(_={searchTerm:k,sortKey:D,sortDirection:w},e[9]=k,e[10]=w,e[11]=D,e[12]=_):_=e[12];const I=At(s,r,$,_),A=!d&&!o&&!m;let ne;e[13]!==C||e[14]!==r||e[15]!==u||e[16]!==c||e[17]!==l?(ne=j=>{if(c){c(j);return}u({to:"/$org/settings/connections/$appSlug/$collectionName/$itemId",params:{org:l,appSlug:C,collectionName:r,itemId:j.id}})},e[13]=C,e[14]=r,e[15]=u,e[16]=c,e[17]=l,e[18]=ne):ne=e[18];const L=ne;let re;e[19]!==h.create||e[20]!==a?(re=async j=>{const xe=new Date().toISOString();await h.create.mutateAsync({...j,id:Me("conn"),title:`${j.title} (Copy)`,created_at:xe,updated_at:xe,created_by:a,updated_by:a})},e[19]=h.create,e[20]=a,e[21]=re):re=e[21];const be=re,[F,ve]=dt.useState(null);let le;e[22]===Symbol.for("react.memo_cache_sentinel")?(le=j=>{ve(j)},e[22]=le):le=e[22];const rt=le;let K;e[23]!==L||e[24]!==o?(K=o&&{edit:L},e[23]=L,e[24]=o,e[25]=K):K=e[25];let M;e[26]!==be||e[27]!==d?(M=d&&{duplicate:be},e[26]=be,e[27]=d,e[28]=M):M=e[28];let U;e[29]!==m?(U=m&&{delete:rt},e[29]=m,e[30]=U):U=e[30];let ae;e[31]!==M||e[32]!==U||e[33]!==K?(ae={...K,...M,...U},e[31]=M,e[32]=U,e[33]=K,e[34]=ae):ae=e[34];const ye=ae;let ce;e[35]!==h.delete||e[36]!==F?(ce=async()=>{F&&(await h.delete.mutateAsync(F.id),ve(null))},e[35]=h.delete,e[36]=F,e[37]=ce):ce=e[37];const Ne=ce;let de;e[38]!==h.create||e[39]!==C||e[40]!==r||e[41]!==d||e[42]!==u||e[43]!==l||e[44]!==a?(de=async()=>{if(!d){Le.error("Create operation is not available for this collection");return}const j=new Date().toISOString(),xe={id:Me("conn"),title:"New Item",description:"A brief description of the item",created_at:j,updated_at:j,created_by:a,updated_by:a};try{const ke=await h.create.mutateAsync(xe);u({to:"/$org/settings/connections/$appSlug/$collectionName/$itemId",params:{org:l,appSlug:C,collectionName:r,itemId:ke.id}})}catch(ke){console.error("Failed to create item:",ke)}},e[38]=h.create,e[39]=C,e[40]=r,e[41]=d,e[42]=u,e[43]=l,e[44]=a,e[45]=de):de=e[45];const we=de;let ue;e[46]!==p?(ue=ot(p),e[46]=p,e[47]=ue):ue=e[47];const Se=ue,lt=(I?.length??0)>0,at=d&&!lt&&!N;let me;e[48]!==h.create||e[49]!==we||e[50]!==d?(me=d?t.jsxs(Ce,{onClick:we,size:"sm",disabled:h.create.isPending,className:"h-7",children:[t.jsx(Et,{className:"mr-2 h-4 w-4"}),h.create.isPending?"Creating...":"Create"]}):null,e[48]=h.create,e[49]=we,e[50]=d,e[51]=me):me=e[51];const pe=me,Pe=D;let W;e[52]!==S||e[53]!==w||e[54]!==Se||e[55]!==Pe?(W=t.jsx(Ot,{children:t.jsx(Qe,{sortKey:Pe,sortDirection:w,onSort:S,sortOptions:Se})}),e[52]=S,e[53]=w,e[54]=Se,e[55]=Pe,e[56]=W):W=e[56];const _e=`Search ${r}...`;let R;e[57]!==x?(R=j=>{j.key==="Escape"&&(x(""),j.target.blur())},e[57]=x,e[58]=R):R=e[58];let B;e[59]!==N||e[60]!==x||e[61]!==_e||e[62]!==R?(B=t.jsx("div",{className:"flex-1",children:t.jsx(ht,{value:N,onChange:x,placeholder:_e,onKeyDown:R})}),e[59]=N,e[60]=x,e[61]=_e,e[62]=R,e[63]=B):B=e[63];let V;e[64]!==pe||e[65]!==d?(V=d&&t.jsx("div",{className:"pr-3",children:pe}),e[64]=pe,e[65]=d,e[66]=V):V=e[66];let q;e[67]!==B||e[68]!==V?(q=t.jsxs("div",{className:"flex items-center gap-2",children:[B,V]}),e[67]=B,e[68]=V,e[69]=q):q=e[69];let Q;e[70]!==I?(Q=I??[],e[70]=I,e[71]=Q):Q=e[71];const De=D;let G;e[72]!==L?(G=j=>L(j),e[72]=L,e[73]=G):G=e[73];const Ie="No items found",Ae=N?"Try adjusting your search terms":"This collection doesn't have any items yet.",Te=at?pe:void 0;let H;e[74]!==Ie||e[75]!==Ae||e[76]!==Te?(H=t.jsx(it,{image:null,title:Ie,description:Ae,actions:Te}),e[74]=Ie,e[75]=Ae,e[76]=Te,e[77]=H):H=e[77];let Y;e[78]!==S||e[79]!==A||e[80]!==ye||e[81]!==p||e[82]!==N||e[83]!==x||e[84]!==P||e[85]!==w||e[86]!==Q||e[87]!==De||e[88]!==G||e[89]!==H||e[90]!==z?(Y=t.jsx("div",{className:"flex-1 overflow-auto",children:t.jsx(Wt,{hideToolbar:!0,data:Q,schema:p,viewMode:z,onViewModeChange:P,search:N,onSearchChange:x,sortKey:De,sortDirection:w,onSort:S,actions:ye,onItemClick:G,readOnly:A,emptyState:H})}),e[78]=S,e[79]=A,e[80]=ye,e[81]=p,e[82]=N,e[83]=x,e[84]=P,e[85]=w,e[86]=Q,e[87]=De,e[88]=G,e[89]=H,e[90]=z,e[91]=Y):Y=e[91];let J;e[92]!==q||e[93]!==Y?(J=t.jsxs("div",{className:"flex flex-col h-full overflow-hidden",children:[q,Y]}),e[92]=q,e[93]=Y,e[94]=J):J=e[94];const Ee=!!F;let fe;e[95]===Symbol.for("react.memo_cache_sentinel")?(fe=j=>{j||ve(null)},e[95]=fe):fe=e[95];let he;e[96]===Symbol.for("react.memo_cache_sentinel")?(he=t.jsx(Nt,{children:"Delete item?"}),e[96]=he):he=e[96];const Oe=F?.title;let Z;e[97]!==Oe?(Z=t.jsxs(wt,{children:[he,t.jsxs(St,{children:['Are you sure you want to delete "',Oe,'"? This action cannot be undone.']})]}),e[97]=Oe,e[98]=Z):Z=e[98];let X;e[99]!==h.delete.isPending?(X=t.jsx(vt,{disabled:h.delete.isPending,children:"Cancel"}),e[99]=h.delete.isPending,e[100]=X):X=e[100];const $e=h.delete.isPending?"Deleting...":"Delete";let ee;e[101]!==h.delete.isPending||e[102]!==Ne||e[103]!==$e?(ee=t.jsx(yt,{onClick:Ne,disabled:h.delete.isPending,className:"bg-destructive text-destructive-foreground hover:bg-destructive/90",children:$e}),e[101]=h.delete.isPending,e[102]=Ne,e[103]=$e,e[104]=ee):ee=e[104];let te;e[105]!==X||e[106]!==ee?(te=t.jsxs(Pt,{children:[X,ee]}),e[105]=X,e[106]=ee,e[107]=te):te=e[107];let se;e[108]!==Z||e[109]!==te?(se=t.jsxs(_t,{children:[Z,te]}),e[108]=Z,e[109]=te,e[110]=se):se=e[110];let ie;e[111]!==Ee||e[112]!==se?(ie=t.jsx(Dt,{open:Ee,onOpenChange:fe,children:se}),e[111]=Ee,e[112]=se,e[113]=ie):ie=e[113];let ge;return e[114]!==W||e[115]!==J||e[116]!==ie?(ge=t.jsxs(t.Fragment,{children:[W,J,ie]}),e[114]=W,e[115]=J,e[116]=ie,e[117]=ge):ge=e[117],ge}function Jt(){const i=oe.c(12),{org:e,project:s}=ze(),l=ut();let n;i[0]!==e.id?(n={connectionId:qe,orgId:e.id},i[0]=e.id,i[1]=n):n=i[1];const c=Ve(n);let r;i[2]!==c||i[3]!==s?(r=async m=>{const u=s.enabledPlugins??[];if(u.includes(m))return;const f=[...u,m],a=await c.callTool({name:"COLLECTION_VIRTUAL_MCP_UPDATE",arguments:{id:s.id,data:{metadata:{enabled_plugins:f}}}});return a.structuredContent??a},i[2]=c,i[3]=s,i[4]=r):r=i[4];let p;i[5]!==e.id||i[6]!==s||i[7]!==l?(p=()=>{l.invalidateQueries({queryKey:Fe.project(e.id,s.slug)}),l.invalidateQueries({queryKey:Fe.projects(e.id)})},i[5]=e.id,i[6]=s,i[7]=l,i[8]=p):p=i[8];let d;return i[9]!==r||i[10]!==p?(d={mutationFn:r,onSuccess:p,onError:Zt},i[9]=r,i[10]=p,i[11]=d):d=i[11],mt(d)}function Zt(i){Le.error("Failed to enable plugin: "+(i instanceof Error?i.message:"Unknown error"))}function Xt(i){const e=oe.c(12),{pluginId:s,title:l,description:n,icon:c}=i,r=Jt();let p;e[0]!==r||e[1]!==s?(p=async()=>{try{await r.mutateAsync(s),Le.success("Plugin enabled!")}catch{}},e[0]=r,e[1]=s,e[2]=p):p=e[2];const d=p,o=c??null,m=r.isPending?"Enabling…":"Enable plugin";let u;e[3]!==r.isPending||e[4]!==d||e[5]!==m?(u=t.jsx(Ce,{onClick:d,disabled:r.isPending,children:m}),e[3]=r.isPending,e[4]=d,e[5]=m,e[6]=u):u=e[6];let f;return e[7]!==n||e[8]!==o||e[9]!==u||e[10]!==l?(f=t.jsx(it,{image:o,title:l,description:n,actions:u}),e[7]=n,e[8]=o,e[9]=u,e[10]=l,e[11]=f):f=e[11],f}const es={name:"WORKFLOW",displayName:"Workflow",hasCreateTool:!0,hasUpdateTool:!0,hasDeleteTool:!0};function oi(){const{project:i,org:e}=ze();if(!(i.enabledPlugins??[]).includes(Ke))return t.jsx(je,{children:t.jsx(je.Content,{children:t.jsx("div",{className:"flex flex-col items-center justify-center h-full",children:t.jsx(Xt,{pluginId:Ke,title:"Enable Workflows",description:"Automate multi-step processes by enabling the Workflows plugin. Once enabled you can create, run, and monitor workflows.",icon:t.jsx("div",{className:"bg-muted p-4 rounded-full",children:t.jsx(pt,{className:"size-8 text-muted-foreground"})})})})})});const n=Be();return t.jsx(je,{children:t.jsx(je.Content,{children:t.jsx(Yt,{connectionId:qe,org:e.slug,activeCollection:es,onItemClick:c=>n({to:"/$org/settings/workflows/$itemId",params:{org:e.slug,itemId:c.id}})})})})}export{oi as default};
@@ -0,0 +1 @@
1
+ import{e as s,g as l,j as o,l as a,E as n,r as c}from"./index-DRnP8Xhy.js";import{a as f}from"./index-uTtq-reU.js";import"./index-h0Ny6VA2.js";import"./constants-DZ5y4NEu.js";import"./collections-CISD8jzc.js";import"./index-ygN6PiaU.js";import"./use-virtual-mcp-Dkco3wCF.js";import"./use-collections-CDG0ivO9.js";import"./monaco-editor-Cx68yuxi.js";import"./index-COQkJrV6.js";import"./accordion-pRq2Jalt.js";import"./agent-icon-DnE1m294.js";import"./AlertCircle-CtSiN7Dh.js";import"./Tool01-73PH4njb.js";import"./XClose-BpjQA_dF.js";import"./RefreshCcw01-DV-_PfmV.js";import"./ArrowNarrowLeft-CjMD5YtT.js";import"./XCircle-BKeTm8Ww.js";import"./ArrowUpRight-VGEco3p8.js";import"./ZapSquare-BL-_ZEqM.js";import"./Users03-CtQ_adLe.js";import"./CheckCircle-BOjQcSoZ.js";import"./ChevronDown-B21GyFLP.js";import"./ChevronRight-C7fFXCXU.js";import"./ChevronUp-DLJe-Ifh.js";import"./DotsVertical-_1yE4PFi.js";import"./Container-DVwtR0PY.js";import"./Star01-DupDdRAe.js";import"./Palette-xIvgAE_U.js";import"./SearchMd-BgpZuBQH.js";import"./index-D1LVHcIe.js";import"./tooltip-CUw8WpYG.js";import"./X-DavTUkoo.js";import"./LinkExternal01-BeNjIA73.js";import"./Lock01-y9D26Lk9.js";import"./Sun-B1MYWGMj.js";import"./Play-esUCyQh5.js";import"./Plus-8zlfW9Nb.js";import"./Settings02-B2DHZxlV.js";import"./Shield01-CewVSi37.js";import"./Trash01-_-2EAUWH.js";import"./User01-DLnrd0WJ.js";import"./Zap-DT_tBFfJ.js";import"./badge-BnwDLyJj.js";import"./select-DwQCWni4.js";import"./view-mode-toggle-Bbj9P-zr.js";import"./layout-bMTJXFfz.js";import"./use-connection-DDedfw7l.js";import"./use-mcp-tools-nd8RTEJZ.js";import"./dialog-BSlhJimL.js";import"./index-BTM4S0x-.js";import"./dropdown-menu-Dn3K1Gpo.js";import"./integration-icon-Cz-seBmA.js";import"./scroll-area-D_0eTXQI.js";import"./index-D9wcQMm5.js";import"./empty-state-B4R6bbr3.js";import"./create-sse-subscription-CxkOgzKf.js";import"./input-liZY-axz.js";function ht(){const t=s.c(4);let r;t[0]===Symbol.for("react.memo_cache_sentinel")?(r={from:"/shell/$org/settings/workflows/$itemId"},t[0]=r):r=t[0];const{itemId:e}=l(r);let i;t[1]===Symbol.for("react.memo_cache_sentinel")?(i=o.jsx("div",{className:"flex h-full items-center justify-center",children:o.jsx(a,{size:32,className:"animate-spin text-muted-foreground"})}),t[1]=i):i=t[1];const p=decodeURIComponent(e);let m;return t[2]!==p?(m=o.jsx(n,{children:o.jsx(c.Suspense,{fallback:i,children:o.jsx(f,{itemId:p})})}),t[2]=p,t[3]=m):m=t[3],m}export{ht as default};
@@ -27,8 +27,8 @@
27
27
  <link rel="icon" type="image/svg+xml" href="/favicon.svg" />
28
28
  <link rel="manifest" href="/manifest.webmanifest" />
29
29
  <meta name="theme-color" content="#D0EC1A" />
30
- <script type="module" crossorigin src="/assets/index-hcEg81hB.js"></script>
31
- <link rel="stylesheet" crossorigin href="/assets/index-DT63_YMm.css">
30
+ <script type="module" crossorigin src="/assets/index-DRnP8Xhy.js"></script>
31
+ <link rel="stylesheet" crossorigin href="/assets/index-B4J1yAvl.css">
32
32
  </head>
33
33
  <body>
34
34
  <div id="root"></div>
@@ -1623,7 +1623,7 @@ AS SELECT
1623
1623
  FROM monitoring_metrics
1624
1624
  GROUP BY organization_id, name, bucket, connection_id, tool_name, status
1625
1625
  `}),console.log("[clickhouse-schema] monitoring_metrics_rollup_1m_mv view ready")}finally{await G.close()}}catch(Y){console.error("[clickhouse-schema] Failed to create rollup DDL (queries will fall back to raw table):",Y)}}async function NA1(X){let Y={...process.env},G=q$1(X,Y),Q=G.settings.encryptionKey;console.log(`[settings] ENCRYPTION_KEY = ${JSON.stringify(Q)} (${Q.length} chars)`);let{ensureServices:J}=await Promise.resolve().then(() => (O$1(),z$1)),{outputs:W,services:Z}=await J({home:G.settings.dataDir,externalDatabaseUrl:G.externalDatabaseUrl,externalNatsUrl:G.externalNatsUrl});if(!G.skipMigrations){let{migrateBetterAuth:K}=await Promise.resolve().then(() => (oZ0(),Zx6));await K(W.databaseUrl);let{createDatabase:H}=await Promise.resolve().then(() => (YU(),Jx6)),{migrateToLatest:U}=await Promise.resolve().then(() => (Ur6(),Fr6)),B=H(W.databaseUrl);await U({keepOpen:!0,database:B,skipBetterAuth:!0})}if(G.settings.clickhouseUrl){let{ensureClickHouseRollup:K}=await Promise.resolve().then(() => Bs6);await K(G.settings.clickhouseUrl)}let $={...G.settings,databaseUrl:W.databaseUrl,natsUrls:W.natsUrls};return fn1($),{settings:$,services:Z.map((K)=>({name:K.name==="PostgreSQL"?"Postgres":K.name,port:K.port})),managedServiceNames:Z.filter((K)=>K.owner==="managed").map((K)=>K.name)}}var TB0=D(()=>{_n1();l9()});var DA1={};j0(DA1,{updateService:()=>pa,toggleViewMode:()=>VB0,toggleVibeState:()=>MB0,toggleLogFlow:()=>jB0,subscribeCliState:()=>DX1,setVibe:()=>xi5,setTuiConsoleIntercepted:()=>zA1,setServerUrl:()=>LX1,setMigrationsDone:()=>wX1,setEnv:()=>EX1,setDevMode:()=>bi5,setDataDir:()=>yi5,isTuiConsoleIntercepted:()=>OA1,getCliState:()=>OX1,addLogEntry:()=>Gz});function EU(){for(let X of IB0)X()}function OX1(){return X7}function DX1(X){return IB0.add(X),()=>IB0.delete(X)}function pa(X){X7={...X7,services:X7.services.map((Y)=>Y.name===X.name?X:Y)},EU()}function wX1(){X7={...X7,migrationsStatus:"done"},EU()}function LX1(X){X7={...X7,serverUrl:X},EU()}function EX1(X){X7={...X7,env:X},EU()}function Gz(X){let Y=[...X7.logs,X];X7={...X7,logs:Y.length>500?Y.slice(-500):Y},EU()}function bi5(){X7={...X7,services:[...X7.services,{name:"Vite",status:"pending",port:0}]},EU()}function VB0(){X7={...X7,viewMode:X7.viewMode==="requests"?"config":"requests"},EU()}function jB0(){X7={...X7,logFlow:!X7.logFlow},EU()}function yi5(X){X7={...X7,dataDir:X},EU()}function xi5(X){X7={...X7,vibe:X},EU()}function MB0(){X7={...X7,vibe:!X7.vibe},EU()}function zA1(X){Ns6=X}function OA1(){return Ns6}var X7,IB0,Ns6=!1;var Qz=D(()=>{X7={services:[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}],migrationsStatus:"pending",serverUrl:null,env:null,logs:[],viewMode:"requests",logFlow:!1,vibe:!1,dataDir:null},IB0=new Set});import{createServer as zs6}from"net";function hi5(X){return new Promise((Y)=>{let G=zs6();G.once("error",()=>Y(!1)),G.listen(X,"0.0.0.0",()=>{G.close(()=>Y(!0))})})}async function wA1(X){if(await hi5(X))return X;let Y=await new Promise((G,Q)=>{let J=zs6();J.once("error",Q),J.listen(0,"0.0.0.0",()=>{let W=J.address(),Z=typeof W==="object"&&W?W.port:0;J.close(()=>G(Z))})});return console.warn(`Port ${X} is in use, using port ${Y} instead.`),Y}var RB0=()=>{};var SB0={};j0(SB0,{startDevServer:()=>ui5});import{join as gi5}from"path";function Os6(X){return X.replace(/\x1b\[[0-9;]*m/g,"")}function Ds6(X){let Y=X.getReader(),G=new TextDecoder,Q="";function J(){let W=Q.split(`
1626
- `);Q=W.pop()??"";for(let Z of W){let $=Os6(Z).replace(/^\[\d+\]\s*/,"").trim();if(!$)continue;Gz({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:$})}}(async()=>{for(;;){let{done:W,value:Z}=await Y.read();if(W)break;Q+=G.decode(Z,{stream:!0}),J()}if(Q.trim()){let W=Os6(Q).replace(/^\[\d+\]\s*/,"").trim();if(W)Gz({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:W})}})()}async function ui5(X){let{vitePort:Y,baseUrl:G,noTui:Q}=X,J=await wA1(Number(X.port)),{settings:W,services:Z,managedServiceNames:$}=await NA1({port:String(J),home:X.home,baseUrl:X.baseUrl,localMode:X.localMode,skipMigrations:X.skipMigrations,noTui:X.noTui,vitePort:X.vitePort});for(let z of Z)pa({name:z.name,status:"ready",port:z.port});EX1(W),wX1();let K=gi5(import.meta.dir,"..","..","..","..",".."),H=Q===!0,U=Bun.spawn(["bun","run","--cwd=apps/mesh","dev:servers"],{cwd:K,env:{...process.env,PORT:String(W.port),VITE_PORT:String(Y),DATABASE_URL:W.databaseUrl,NATS_URL:W.natsUrls.join(","),NODE_ENV:W.nodeEnv,DECOCMS_LOCAL_MODE:String(W.localMode),DECOCMS_HOME:W.dataDir,DATA_DIR:W.dataDir,DECO_CLI:"1",...W.baseUrl?{BASE_URL:W.baseUrl}:{}},stdio:["inherit",H?"inherit":"pipe",H?"inherit":"pipe"]});if(!H)Ds6(U.stdout),Ds6(U.stderr);let B=G||`http://localhost:${W.port}`;LX1(B),pa({name:"Vite",status:"ready",port:Number(Y)});let N=async(z)=>{if(U.kill(z),$.length>0){let{stopServices:O}=await Promise.resolve().then(() => (O$1(),z$1));await O(W.dataDir)}};return process.on("SIGINT",()=>N("SIGINT")),process.on("SIGTERM",()=>N("SIGTERM")),{port:Number(W.port),process:U}}var kB0=D(()=>{TB0();Qz();RB0()});import{Box as CB0,Text as vB0}from"ink";import{jsx as Ls6,jsxs as LA1}from"react/jsx-runtime";function ws6(X){if(!X)return"not set";try{let Y=new URL(X);if(Y.password)Y.password="***";if(Y.username&&Y.username.length>3)Y.username=Y.username.slice(0,3)+"***";return Y.pathname="/",Y.search="",Y.hash="",Y.toString()}catch{if(X.length<=10)return X;return X.slice(0,6)+"***"+X.slice(-4)}}function di5(X,Y){if(li5.has(X))return Y?{text:"\u25CF\u25CF\u25CF\u25CF\u25CF\u25CF",dimColor:!0}:{text:"not set",dimColor:!0};if(mi5.has(X)){if(Array.isArray(Y)){if(Y.length===0)return{text:"not set",dimColor:!0};return{text:Y.map((W)=>ws6(W)).join(", "),color:"cyan"}}let Q=ws6(Y);return Q==="not set"?{text:Q,dimColor:!0}:{text:Q,color:"cyan"}}if(Y===void 0||Y===null||Y==="")return{text:"not set",dimColor:!0};let G=String(Y);if(G==="true")return{text:G,color:"green"};if(G==="false")return{text:G,color:"yellow"};try{return new URL(G),{text:G,color:"cyan"}}catch{return{text:G}}}function ci5(X){return[{title:"Core",entries:[{key:"NODE_ENV",value:X.nodeEnv},{key:"PORT",value:X.port},{key:"BASE_URL",value:X.baseUrl??`http://localhost:${X.port}`},{key:"DATA_DIR",value:X.dataDir}]},{title:"Database",entries:[{key:"DATABASE_URL",value:X.databaseUrl},{key:"DATABASE_PG_SSL",value:X.databasePgSsl}]},{title:"Auth & Secrets",entries:[{key:"BETTER_AUTH_SECRET",value:X.betterAuthSecret},{key:"ENCRYPTION_KEY",value:X.encryptionKey},{key:"MESH_JWT_SECRET",value:X.meshJwtSecret},{key:"STUDIO_PROVISION_SECRET_KEY",value:X.studioProvisionSecretKey},{key:"DISABLE_RATE_LIMIT",value:X.disableRateLimit}]},{title:"Auth Providers",entries:[{key:"AUTH_EMAIL_PASSWORD_ENABLED",value:process.env.AUTH_EMAIL_PASSWORD_ENABLED??"true"},{key:"AUTH_GOOGLE_CLIENT_ID",value:!!process.env.AUTH_GOOGLE_CLIENT_ID},{key:"AUTH_GITHUB_CLIENT_ID",value:!!process.env.AUTH_GITHUB_CLIENT_ID},{key:"AUTH_RESEND_API_KEY",value:!!process.env.AUTH_RESEND_API_KEY},{key:"AUTH_SENDGRID_API_KEY",value:!!process.env.AUTH_SENDGRID_API_KEY},{key:"AUTH_SSO_MS_CLIENT_ID",value:!!process.env.AUTH_SSO_MS_CLIENT_ID},{key:"AUTH_MAGIC_LINK_ENABLED",value:process.env.AUTH_MAGIC_LINK_ENABLED==="true"},{key:"AUTH_EMAIL_OTP_ENABLED",value:process.env.AUTH_EMAIL_OTP_ENABLED==="true"}]},{title:"Observability",entries:[{key:"CLICKHOUSE_URL",value:X.clickhouseUrl},{key:"OTEL_SERVICE_NAME",value:X.otelServiceName}]},{title:"Event Bus & Networking",entries:[{key:"NATS_URL",value:X.natsUrls}]},{title:"Config Files",entries:[{key:"CONFIG_PATH",value:X.configPath}]},{title:"AI Gateway",entries:[{key:"DECO_AI_GATEWAY_ENABLED",value:X.aiGatewayEnabled},{key:"DECO_AI_GATEWAY_URL",value:X.aiGatewayUrl}]}]}function Es6({env:X}){let Y=ci5(X);return Ls6(CB0,{flexDirection:"column",children:Y.map((G)=>LA1(CB0,{flexDirection:"column",marginTop:1,children:[LA1(vB0,{dimColor:!0,children:[" ","\u2500\u2500 ",G.title," ","\u2500".repeat(Math.max(0,38-G.title.length))]}),G.entries.map(({key:Q,value:J})=>{let W=di5(Q,J);return LA1(CB0,{children:[LA1(vB0,{dimColor:!0,children:[" ",Q.padEnd(36)]}),Ls6(vB0,{color:W.color,dimColor:W.dimColor,children:W.text})]},Q)})]},G.title))})}var li5,mi5;var Ps6=D(()=>{li5=new Set(["BETTER_AUTH_SECRET","ENCRYPTION_KEY","MESH_JWT_SECRET","STUDIO_PROVISION_SECRET_KEY"]),mi5=new Set(["DATABASE_URL","CLICKHOUSE_URL","NATS_URL"])});var _B0;var qs6=D(()=>{_B0={name:"decocms",version:"2.299.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":"bun --bun vite dev","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts","build:client":"bun --bun vite build","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","db:migrate":"bun run ./dist/server/migrate.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts",test:"bun test","test:e2e":"playwright test","test:e2e:ui":"playwright test --ui","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run build:client && bun run build:server"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1","@freestyle-sh/with-bun":"^0.2.12","@freestyle-sh/with-deno":"^0.0.4","@freestyle-sh/with-nodejs":"^0.2.9","freestyle-sandboxes":"^0.1.46"},dependencies:{"@ai-sdk/anthropic":"^3.0.58","@ai-sdk/google":"^3.0.60","@ai-sdk/openai":"^3.0.50","@anthropic-ai/sdk":"^0.79.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@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.2.2","@openrouter/ai-sdk-provider":"^2.2.5","@opentelemetry/core":"^2.6.0","@tanstack/react-virtual":"^3.13.21","@xterm/addon-fit":"^0.11.0","@xterm/xterm":"^6.0.0","ai-sdk-provider-claude-code":"^3.4.4","ai-sdk-provider-codex-cli":"^1.1.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12",nats:"^2.29.3","node-pty":"^1.0.0","posthog-js":"^1.371.1","posthog-node":"^5.0.0",react:"^19.2.0","react-dom":"^19.2.0"},devDependencies:{"@ai-sdk/provider":"^3.0.8","@ai-sdk/react":"^3.0.118","@anthropic-ai/claude-agent-sdk":"^0.2.80","@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/mcp-utils":"workspace:*","@decocms/mesh-sdk":"workspace:*","@decocms/runtime":"workspace:*","@decocms/vite-plugin":"workspace:*","@electric-sql/pglite":"^0.3.15","@floating-ui/react":"^0.27.16","@hookform/resolvers":"^5.2.2","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.27.1","@monaco-editor/react":"^4.7.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/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/test":"^1.58.2","@radix-ui/react-avatar":"^1.1.10","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-dropdown-menu":"^2.1.16","@radix-ui/react-label":"^2.1.7","@radix-ui/react-select":"^2.2.6","@radix-ui/react-separator":"^1.1.7","@radix-ui/react-slot":"^1.2.3","@radix-ui/react-tabs":"^1.1.13","@rjsf/core":"^6.1.2","@rjsf/shadcn":"^6.1.2","@rjsf/utils":"^6.1.2","@rjsf/validator-ajv8":"^6.1.2","@tailwindcss/vite":"^4.1.17","@tanstack/react-query":"5.90.11","@tanstack/react-router":"^1.139.7","@tiptap/core":"3.20.2","@tiptap/extension-mention":"3.20.2","@tiptap/extension-placeholder":"3.20.2","@tiptap/pm":"3.20.2","@tiptap/react":"3.20.2","@tiptap/starter-kit":"3.20.2","@tiptap/suggestion":"3.20.2","@types/bun":"^1.3.1","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@untitledui/icons":"^0.0.19","@vercel/nft":"^1.1.1","@vitejs/plugin-react":"^5.1.0",ai:"^6.0.116","babel-plugin-react-compiler":"^1.0.0","better-auth":"1.4.5","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","kysely-pglite":"^0.6.1","lucide-react":"^0.468.0",marked:"^15.0.6","@decocms/sandbox":"workspace:*","mesh-plugin-workflows":"workspace:*",nanoid:"^5.1.6",pg:"^8.16.3",prettier:"^3.4.2","react-hook-form":"^7.66.0","react-markdown":"^10.1.0","react-resizable-panels":"^2.1.7","react-syntax-highlighter":"^15.6.1",recharts:"^3.6.0","rehype-raw":"^7.0.0","remark-gfm":"^4.0.0","sass-embedded":"^1.97.2",sonner:"^2.0.7","tailwind-merge":"^3.3.1",tailwindcss:"^4.1.17",typescript:"^5.9.3",vite:"^7.2.1","vite-tsconfig-paths":"^5.1.4",zod:"^4.0.0",zustand:"^5.0.9"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","mesh","tools"],license:"MIT",publishConfig:{access:"public"}}});import{Box as PU,Text as MX}from"ink";import{Spinner as pi5}from"@inkjs/ui";import{useSyncExternalStore as As6}from"react";import{jsx as qY,jsxs as oQ}from"react/jsx-runtime";function oi5(X,Y){if(!X||!ri5.has(X))return X;let G=fB0[Y]??fB0[fB0.length-1];return X==="#875f00"?G[0]:G[1]}function Ts6({status:X}){if(X==="pending")return qY(pi5,{label:""});return qY(MX,{color:"green",children:"\u2713"})}function Is6({services:X,migrationsStatus:Y,home:G,serverUrl:Q,vibe:J}){let W=As6(iu0,cu0),Z=As6(ou0,ru0);return oQ(PU,{flexDirection:"column",paddingBottom:1,children:[J?oQ(PU,{flexDirection:"column",children:[W.map(($,K)=>{let H=Z[K],U=$.reduce((N,z)=>N+z.text.length,0),B=Math.max(0,ti5-U);return oQ(PU,{flexDirection:"row",children:[$.map((N,z)=>{let O=oi5(N.color,K);return O?qY(MX,{color:O,children:N.text},z):qY(MX,{children:N.text},z)}),qY(MX,{children:" ".repeat(B+2)}),H?.map((N,z)=>N.color?qY(MX,{color:N.color,children:N.char},z):qY(MX,{children:N.char},z))]},K)}),oQ(MX,{dimColor:!0,children:[" v",_B0.version]})]}):oQ(PU,{flexDirection:"column",marginTop:1,children:[ni5.map(($,K)=>qY(MX,{color:ai5[K],children:$},K)),oQ(MX,{dimColor:!0,children:[" v",_B0.version]})]}),qY(PU,{marginBottom:1,children:qY(MX,{dimColor:!0,children:"\u2500".repeat(80)})}),qY(PU,{children:oQ(MX,{dimColor:!0,children:["Home: ",G]})}),oQ(PU,{gap:2,children:[X.map(($)=>oQ(PU,{gap:1,children:[oQ(MX,{children:[$.name," :",$.port||"...."]}),qY(Ts6,{status:$.status})]},$.name)),oQ(PU,{gap:1,children:[qY(MX,{children:"Migrations"}),qY(Ts6,{status:Y})]})]}),qY(PU,{children:Q?oQ(MX,{children:["Open in browser: ",qY(MX,{color:"cyan",children:Q})]}):qY(MX,{dimColor:!0,children:"Starting..."})}),oQ(PU,{gap:2,children:[oQ(MX,{dimColor:!0,children:[qY(MX,{bold:!0,dimColor:!0,children:"K"})," ","toggle config"]}),oQ(MX,{dimColor:!0,children:[qY(MX,{bold:!0,dimColor:!0,children:"L"})," ","toggle log flow"]}),oQ(MX,{dimColor:!0,children:[qY(MX,{bold:!0,dimColor:!0,children:"V"})," ","toggle vibe ",J?"\u266A Nihilore \xB7 CC BY 4.0":""]}),J&&oQ(MX,{dimColor:!0,children:[qY(MX,{bold:!0,dimColor:!0,children:"N"})," ","skip song"]})]})]})}var ni5,ai5,fB0,ti5=30,ri5;var Vs6=D(()=>{qs6();An1();Rn1();ni5=[" \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 "],ai5=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"],fB0=[["#00ff64","#00cc50"],["#00f060","#00c04c"],["#00e05c","#00b448"],["#00d058","#00a844"],["#00c054","#009c40"],["#00b050","#00903c"],["#00a04c","#008438"],["#009048","#007834"],["#008044","#006c30"],["#007040","#00602c"],["#00603c","#005428"]],ri5=new Set(["#875f00","#5f3800"])});import{useSyncExternalStore as si5}from"react";function ei5(){let X=process.stdout.rows||24,Y=process.stdout.columns||80;if(X!==EA1.rows||Y!==EA1.columns)EA1={rows:X,columns:Y};return EA1}function Xp5(X){return process.stdout.on("resize",X),()=>{process.stdout.off("resize",X)}}function js6(){return si5(Xp5,ei5)}var EA1;var Ms6=D(()=>{EA1={rows:process.stdout.rows||24,columns:process.stdout.columns||80}});import{Box as Yp5,Text as PX1}from"ink";import{useSyncExternalStore as Gp5}from"react";import{jsx as bB0,jsxs as yB0}from"react/jsx-runtime";function Qp5(X){if(X>=500)return"red";if(X>=400)return"yellow";if(X>=300)return"cyan";return"green"}function Rs6({logs:X,headerHeight:Y}){let{rows:G}=js6(),{logFlow:Q}=Gp5(DX1,OX1),J=Math.max(1,G-Y-1),W=Q?X:X.slice(-J);return bB0(Yp5,{flexDirection:"column",children:W.map((Z,$)=>{if(Z.rawLine)return bB0(PX1,{dimColor:!0,children:Z.rawLine},$);let K=Z.duration<1000?`${Z.duration}ms`:`${(Z.duration/1000).toFixed(1)}s`;return yB0(PX1,{children:[yB0(PX1,{dimColor:!0,children:[Z.method.padEnd(6)," ",Z.path.padEnd(30)," "]}),bB0(PX1,{color:Qp5(Z.status),children:Z.status}),yB0(PX1,{dimColor:!0,children:[" ",K.padStart(8)]})]},$)})})}var Ss6=D(()=>{Qz();Ms6()});var xB0={};j0(xB0,{App:()=>Fp5});import{Box as Jp5,Text as Zp5,useInput as Wp5}from"ink";import{useSyncExternalStore as $p5}from"react";import{jsx as PA1,jsxs as Up5}from"react/jsx-runtime";function Fp5({home:X}){let Y=$p5(DX1,OX1);return Wp5((G)=>{if(G==="k"||G==="K")VB0();if(G==="l"||G==="L")jB0();if((G==="v"||G==="V")&&Y.dataDir)vn1(Y.dataDir),MB0();if((G==="n"||G==="N")&&Y.vibe)Cn1()}),Up5(Jp5,{flexDirection:"column",children:[PA1(Is6,{services:Y.services,migrationsStatus:Y.migrationsStatus,home:X,serverUrl:Y.serverUrl,vibe:Y.vibe}),Y.viewMode==="config"?Y.env?PA1(Es6,{env:Y.env}):PA1(Zp5,{dimColor:!0,children:"Loading configuration..."}):PA1(Rs6,{logs:Y.logs,headerHeight:Y.vibe?Hp5:Kp5})]})}var Kp5=15,Hp5=19;var hB0=D(()=>{Ps6();Vs6();Ss6();Qz();Vd()});function ks6(X,Y={}){return{PORT:String(X.port),NODE_ENV:X.nodeEnv,BASE_URL:X.baseUrl,DATA_DIR:X.dataDir,DECOCMS_HOME:X.dataDir,DATABASE_URL:X.databaseUrl,DATABASE_PG_SSL:String(X.databasePgSsl),DATABASE_POOL_MAX:String(X.databasePoolMax),NATS_URL:X.natsUrls.join(","),BETTER_AUTH_SECRET:X.betterAuthSecret,ENCRYPTION_KEY:X.encryptionKey,MESH_JWT_SECRET:X.meshJwtSecret,DECOCMS_LOCAL_MODE:String(X.localMode),DISABLE_RATE_LIMIT:String(X.disableRateLimit),STUDIO_PROVISION_SECRET_KEY:X.studioProvisionSecretKey,CONFIG_PATH:X.configPath,...Object.fromEntries(Object.entries(process.env).filter(([G])=>G.startsWith("AUTH_"))),DECO_AI_GATEWAY_ENABLED:String(X.aiGatewayEnabled),DECO_AI_GATEWAY_URL:X.aiGatewayUrl,ENABLE_DECO_IMPORT:String(X.enableDecoImport),S3_ENDPOINT:X.s3Endpoint,S3_BUCKET:X.s3Bucket,S3_REGION:X.s3Region,S3_ACCESS_KEY_ID:X.s3AccessKeyId,S3_SECRET_ACCESS_KEY:X.s3SecretAccessKey,S3_FORCE_PATH_STYLE:String(X.s3ForcePathStyle),OTEL_SERVICE_NAME:X.otelServiceName,CLICKHOUSE_URL:X.clickhouseUrl,DECO_SUPABASE_URL:X.decoSupabaseUrl,DECO_SUPABASE_SERVICE_KEY:X.decoSupabaseServiceKey,FIRECRAWL_API_KEY:X.firecrawlApiKey,STUDIO_SANDBOX_RUNNER:process.env.STUDIO_SANDBOX_RUNNER,STUDIO_SANDBOX_TEMPLATE_NAME:process.env.STUDIO_SANDBOX_TEMPLATE_NAME,STUDIO_ENV:process.env.STUDIO_ENV,STUDIO_SANDBOX_PREVIEW_URL_PATTERN:process.env.STUDIO_SANDBOX_PREVIEW_URL_PATTERN,STUDIO_SANDBOX_PREVIEW_GATEWAY_NAME:process.env.STUDIO_SANDBOX_PREVIEW_GATEWAY_NAME,STUDIO_SANDBOX_PREVIEW_GATEWAY_NAMESPACE:process.env.STUDIO_SANDBOX_PREVIEW_GATEWAY_NAMESPACE,KUBERNETES_SERVICE_HOST:process.env.KUBERNETES_SERVICE_HOST,KUBERNETES_SERVICE_PORT:process.env.KUBERNETES_SERVICE_PORT,FREESTYLE_API_KEY:process.env.FREESTYLE_API_KEY,BROWSERLESS_TOKEN:process.env.BROWSERLESS_TOKEN,NODE_EXTRA_CA_CERTS:process.env.NODE_EXTRA_CA_CERTS,DECO_CLI:"1",DECO_NO_TUI:"true",...Y}}var Rj=k((wp5)=>{wp5.HttpAuthLocation=void 0;(function(X){X.HEADER="header",X.QUERY="query"})(wp5.HttpAuthLocation||(wp5.HttpAuthLocation={}));wp5.HttpApiKeyAuthLocation=void 0;(function(X){X.HEADER="header",X.QUERY="query"})(wp5.HttpApiKeyAuthLocation||(wp5.HttpApiKeyAuthLocation={}));wp5.EndpointURLScheme=void 0;(function(X){X.HTTP="http",X.HTTPS="https"})(wp5.EndpointURLScheme||(wp5.EndpointURLScheme={}));wp5.AlgorithmId=void 0;(function(X){X.MD5="md5",X.CRC32="crc32",X.CRC32C="crc32c",X.SHA1="sha1",X.SHA256="sha256"})(wp5.AlgorithmId||(wp5.AlgorithmId={}));var Bp5=(X)=>{let Y=[];if(X.sha256!==void 0)Y.push({algorithmId:()=>wp5.AlgorithmId.SHA256,checksumConstructor:()=>X.sha256});if(X.md5!=null)Y.push({algorithmId:()=>wp5.AlgorithmId.MD5,checksumConstructor:()=>X.md5});return{addChecksumAlgorithm(G){Y.push(G)},checksumAlgorithms(){return Y}}},Np5=(X)=>{let Y={};return X.checksumAlgorithms().forEach((G)=>{Y[G.algorithmId()]=G.checksumConstructor()}),Y},zp5=(X)=>{return Bp5(X)},Op5=(X)=>{return Np5(X)};wp5.FieldPosition=void 0;(function(X){X[X.HEADER=0]="HEADER",X[X.TRAILER=1]="TRAILER"})(wp5.FieldPosition||(wp5.FieldPosition={}));var Dp5="__smithy_context";wp5.IniSectionType=void 0;(function(X){X.PROFILE="profile",X.SSO_SESSION="sso-session",X.SERVICES="services"})(wp5.IniSectionType||(wp5.IniSectionType={}));wp5.RequestHandlerProtocol=void 0;(function(X){X.HTTP_0_9="http/0.9",X.HTTP_1_0="http/1.0",X.TDS_8_0="tds/8.0"})(wp5.RequestHandlerProtocol||(wp5.RequestHandlerProtocol={}));wp5.SMITHY_CONTEXT_KEY=Dp5;wp5.getDefaultClientConfiguration=zp5;wp5.resolveDefaultRuntimeConfig=Op5});var u7=k((jp5)=>{var qp5=Rj(),Ap5=(X)=>{return{setHttpHandler(Y){X.httpHandler=Y},httpHandler(){return X.httpHandler},updateHttpClientConfig(Y,G){X.httpHandler?.updateHttpClientConfig(Y,G)},httpHandlerConfigs(){return X.httpHandler.httpHandlerConfigs()}}},Tp5=(X)=>{return{httpHandler:X.httpHandler()}};class Cs6{name;kind;values;constructor({name:X,kind:Y=qp5.FieldPosition.HEADER,values:G=[]}){this.name=X,this.kind=Y,this.values=G}add(X){this.values.push(X)}set(X){this.values=X}remove(X){this.values=this.values.filter((Y)=>Y!==X)}toString(){return this.values.map((X)=>X.includes(",")||X.includes(" ")?`"${X}"`:X).join(", ")}get(){return this.values}}class vs6{entries={};encoding;constructor({fields:X=[],encoding:Y="utf-8"}){X.forEach(this.setField.bind(this)),this.encoding=Y}setField(X){this.entries[X.name.toLowerCase()]=X}getField(X){return this.entries[X.toLowerCase()]}removeField(X){delete this.entries[X.toLowerCase()]}getByType(X){return Object.values(this.entries).filter((Y)=>Y.kind===X)}}class qA1{method;protocol;hostname;port;path;query;headers;username;password;fragment;body;constructor(X){this.method=X.method||"GET",this.hostname=X.hostname||"localhost",this.port=X.port,this.query=X.query||{},this.headers=X.headers||{},this.body=X.body,this.protocol=X.protocol?X.protocol.slice(-1)!==":"?`${X.protocol}:`:X.protocol:"https:",this.path=X.path?X.path.charAt(0)!=="/"?`/${X.path}`:X.path:"/",this.username=X.username,this.password=X.password,this.fragment=X.fragment}static clone(X){let Y=new qA1({...X,headers:{...X.headers}});if(Y.query)Y.query=Ip5(Y.query);return Y}static isInstance(X){if(!X)return!1;let Y=X;return"method"in Y&&"protocol"in Y&&"hostname"in Y&&"path"in Y&&typeof Y.query==="object"&&typeof Y.headers==="object"}clone(){return qA1.clone(this)}}function Ip5(X){return Object.keys(X).reduce((Y,G)=>{let Q=X[G];return{...Y,[G]:Array.isArray(Q)?[...Q]:Q}},{})}class _s6{statusCode;reason;headers;body;constructor(X){this.statusCode=X.statusCode,this.reason=X.reason,this.headers=X.headers||{},this.body=X.body}static isInstance(X){if(!X)return!1;let Y=X;return typeof Y.statusCode==="number"&&typeof Y.headers==="object"}}function Vp5(X){return/^[a-z0-9][a-z0-9\.\-]*[a-z0-9]$/.test(X)}jp5.Field=Cs6;jp5.Fields=vs6;jp5.HttpRequest=qA1;jp5.HttpResponse=_s6;jp5.getHttpHandlerExtensionConfiguration=Ap5;jp5.isValidHostname=Vp5;jp5.resolveHttpHandlerRuntimeConfig=Tp5});function fp5(X){return(Y)=>async(G)=>{let{request:Q}=G;if(X.expectContinueHeader!==!1&&fs6.HttpRequest.isInstance(Q)&&Q.body&&X.runtime==="node"&&X.requestHandler?.constructor?.name!=="FetchHttpHandler"){let J=!0;if(typeof X.expectContinueHeader==="number")try{J=(Number(Q.headers?.["content-length"])??X.bodyLengthChecker?.(Q.body)??1/0)>=X.expectContinueHeader}catch(W){}else J=!!X.expectContinueHeader;if(J)Q.headers.Expect="100-continue"}return Y({...G,request:Q})}}var fs6,bp5,bs6=(X)=>({applyToStack:(Y)=>{Y.add(fp5(X),bp5)}});var ys6=D(()=>{fs6=Y1(u7(),1);bp5={step:"build",tags:["SET_EXPECT_HEADER","EXPECT_HEADER"],name:"addExpectContinueMiddleware",override:!0}});var OH,AA1,Sj,TA1,E9,xs6,AX1;var DH=D(()=>{OH={WHEN_SUPPORTED:"WHEN_SUPPORTED",WHEN_REQUIRED:"WHEN_REQUIRED"},AA1=OH.WHEN_SUPPORTED,Sj={WHEN_SUPPORTED:"WHEN_SUPPORTED",WHEN_REQUIRED:"WHEN_REQUIRED"},TA1=OH.WHEN_SUPPORTED;(function(X){X.MD5="MD5",X.CRC32="CRC32",X.CRC32C="CRC32C",X.CRC64NVME="CRC64NVME",X.SHA1="SHA1",X.SHA256="SHA256"})(E9||(E9={}));(function(X){X.HEADER="header",X.TRAILER="trailer"})(xs6||(xs6={}));AX1=E9.CRC32});var Vq,na=(X,Y,G,Q)=>{if(!(Y in X))return;let J=X[Y].toUpperCase();if(!Object.values(G).includes(J))throw TypeError(`Cannot load ${Q} '${Y}'. Expected one of ${Object.values(G)}, got '${X[Y]}'.`);return J};var iB0=D(()=>{(function(X){X.ENV="env",X.CONFIG="shared config entry"})(Vq||(Vq={}))});var yp5="AWS_REQUEST_CHECKSUM_CALCULATION",xp5="request_checksum_calculation",hs6;var gs6=D(()=>{DH();iB0();hs6={environmentVariableSelector:(X)=>na(X,yp5,OH,Vq.ENV),configFileSelector:(X)=>na(X,xp5,OH,Vq.CONFIG),default:AA1}});var hp5="AWS_RESPONSE_CHECKSUM_VALIDATION",gp5="response_checksum_validation",us6;var ls6=D(()=>{DH();iB0();us6={environmentVariableSelector:(X)=>na(X,hp5,Sj,Vq.ENV),configFileSelector:(X)=>na(X,gp5,Sj,Vq.CONFIG),default:TA1}});var nB0=k((tp5)=>{var up5=["AuthFailure","InvalidSignatureException","RequestExpired","RequestInTheFuture","RequestTimeTooSkewed","SignatureDoesNotMatch"],lp5=["BandwidthLimitExceeded","EC2ThrottledException","LimitExceededException","PriorRequestNotComplete","ProvisionedThroughputExceededException","RequestLimitExceeded","RequestThrottled","RequestThrottledException","SlowDown","ThrottledException","Throttling","ThrottlingException","TooManyRequestsException","TransactionInProgressException"],mp5=["TimeoutError","RequestTimeout","RequestTimeoutException"],dp5=[500,502,503,504],cp5=["ECONNRESET","ECONNREFUSED","EPIPE","ETIMEDOUT"],ip5=["EHOSTUNREACH","ENETUNREACH","ENOTFOUND"],ms6=(X)=>X?.$retryable!==void 0,pp5=(X)=>up5.includes(X.name),ds6=(X)=>X.$metadata?.clockSkewCorrected,cs6=(X)=>{let Y=new Set(["Failed to fetch","NetworkError when attempting to fetch resource","The Internet connection appears to be offline","Load failed","Network request failed"]);if(!(X&&X instanceof TypeError))return!1;return Y.has(X.message)},np5=(X)=>X.$metadata?.httpStatusCode===429||lp5.includes(X.name)||X.$retryable?.throttling==!0,pB0=(X,Y=0)=>ms6(X)||ds6(X)||X.name==="InvalidSignatureException"&&X.message?.includes("Signature expired")||mp5.includes(X.name)||cp5.includes(X?.code||"")||ip5.includes(X?.code||"")||dp5.includes(X.$metadata?.httpStatusCode||0)||cs6(X)||is6(X)||X.cause!==void 0&&Y<=10&&pB0(X.cause,Y+1),ap5=(X)=>{if(X.$metadata?.httpStatusCode!==void 0){let Y=X.$metadata.httpStatusCode;if(500<=Y&&Y<=599&&!pB0(X))return!0;return!1}return!1};function is6(X){return X.code==="ERR_HTTP2_STREAM_ERROR"&&X.message.includes("NGHTTP2_REFUSED_STREAM")}tp5.isBrowserNetworkError=cs6;tp5.isClockSkewCorrectedError=ds6;tp5.isClockSkewError=pp5;tp5.isNodeJsHttp2TransientError=is6;tp5.isRetryableByTrait=ms6;tp5.isServerError=ap5;tp5.isThrottlingError=np5;tp5.isTransientError=pB0});var Nw=k((Bn5)=>{var Jn5=nB0();Bn5.RETRY_MODES=void 0;(function(X){X.STANDARD="standard",X.ADAPTIVE="adaptive"})(Bn5.RETRY_MODES||(Bn5.RETRY_MODES={}));var VA1=3,Zn5=Bn5.RETRY_MODES.STANDARD;class jA1{static setTimeoutFn=setTimeout;beta;minCapacity;minFillRate;scaleConstant;smooth;enabled=!1;availableTokens=0;lastMaxRate=0;measuredTxRate=0;requestCount=0;fillRate;lastThrottleTime;lastTimestamp=0;lastTxRateBucket;maxCapacity;timeWindow=0;constructor(X){this.beta=X?.beta??0.7,this.minCapacity=X?.minCapacity??1,this.minFillRate=X?.minFillRate??0.5,this.scaleConstant=X?.scaleConstant??0.4,this.smooth=X?.smooth??0.8,this.lastThrottleTime=this.getCurrentTimeInSeconds(),this.lastTxRateBucket=Math.floor(this.getCurrentTimeInSeconds()),this.fillRate=this.minFillRate,this.maxCapacity=this.minCapacity}async getSendToken(){return this.acquireTokenBucket(1)}updateClientSendingRate(X){let Y;this.updateMeasuredRate();let G=X;if(G?.errorType==="THROTTLING"||Jn5.isThrottlingError(G?.error??X)){let W=!this.enabled?this.measuredTxRate:Math.min(this.measuredTxRate,this.fillRate);this.lastMaxRate=W,this.calculateTimeWindow(),this.lastThrottleTime=this.getCurrentTimeInSeconds(),Y=this.cubicThrottle(W),this.enableTokenBucket()}else this.calculateTimeWindow(),Y=this.cubicSuccess(this.getCurrentTimeInSeconds());let J=Math.min(Y,2*this.measuredTxRate);this.updateTokenBucketRate(J)}getCurrentTimeInSeconds(){return Date.now()/1000}async acquireTokenBucket(X){if(!this.enabled)return;if(this.refillTokenBucket(),X>this.availableTokens){let Y=(X-this.availableTokens)/this.fillRate*1000;await new Promise((G)=>jA1.setTimeoutFn(G,Y))}this.availableTokens=this.availableTokens-X}refillTokenBucket(){let X=this.getCurrentTimeInSeconds();if(!this.lastTimestamp){this.lastTimestamp=X;return}let Y=(X-this.lastTimestamp)*this.fillRate;this.availableTokens=Math.min(this.maxCapacity,this.availableTokens+Y),this.lastTimestamp=X}calculateTimeWindow(){this.timeWindow=this.getPrecise(Math.pow(this.lastMaxRate*(1-this.beta)/this.scaleConstant,0.3333333333333333))}cubicThrottle(X){return this.getPrecise(X*this.beta)}cubicSuccess(X){return this.getPrecise(this.scaleConstant*Math.pow(X-this.lastThrottleTime-this.timeWindow,3)+this.lastMaxRate)}enableTokenBucket(){this.enabled=!0}updateTokenBucketRate(X){this.refillTokenBucket(),this.fillRate=Math.max(X,this.minFillRate),this.maxCapacity=Math.max(X,this.minCapacity),this.availableTokens=Math.min(this.availableTokens,this.maxCapacity)}updateMeasuredRate(){let X=this.getCurrentTimeInSeconds(),Y=Math.floor(X*2)/2;if(this.requestCount++,Y>this.lastTxRateBucket){let G=this.requestCount/(Y-this.lastTxRateBucket);this.measuredTxRate=this.getPrecise(G*this.smooth+this.measuredTxRate*(1-this.smooth)),this.requestCount=0,this.lastTxRateBucket=Y}}getPrecise(X){return parseFloat(X.toFixed(8))}}var Wn5=100,rB0=20000,$n5=500,aB0=500,Kn5=5,Hn5=10,ps6=1,Fn5="amz-sdk-invocation-id",Un5="amz-sdk-request";class sQ{static v2026=typeof process<"u"&&process.env?.SMITHY_NEW_RETRIES_2026==="true";static delay(){return sQ.v2026?50:100}static throttlingDelay(){return sQ.v2026?1000:500}static cost(){return sQ.v2026?14:5}static throttlingCost(){return sQ.v2026?5:10}static modifiedCostType(){return sQ.v2026?"THROTTLING":"TRANSIENT"}}class ns6{x=sQ.delay();computeNextBackoffDelay(X){let Y=Math.random(),G=2,Q=Y*Math.min(this.x*2**X,rB0);return Math.floor(Q)}setDelayBase(X){this.x=X}}class tB0{delay;count;cost;longPoll;constructor(X,Y,G,Q){this.delay=X,this.count=Y,this.cost=G,this.longPoll=Q}getRetryCount(){return this.count}getRetryDelay(){return Math.min(rB0,this.delay)}getRetryCost(){return this.cost}isLongPoll(){return this.longPoll}}var IA1={incompatible:1,attempts:2,capacity:3};class TX1{mode=Bn5.RETRY_MODES.STANDARD;capacity=aB0;retryBackoffStrategy;maxAttemptsProvider;baseDelay;constructor(X){if(typeof X==="number")this.maxAttemptsProvider=async()=>X;else if(typeof X==="function")this.maxAttemptsProvider=X;else if(X&&typeof X==="object")this.maxAttemptsProvider=async()=>X.maxAttempts,this.baseDelay=X.baseDelay,this.retryBackoffStrategy=X.backoff;this.maxAttemptsProvider??=async()=>VA1,this.baseDelay??=sQ.delay(),this.retryBackoffStrategy??=new ns6}async acquireInitialRetryToken(X){return new tB0(sQ.delay(),0,void 0,sQ.v2026&&X.includes(":longpoll"))}async refreshRetryTokenForRetry(X,Y){let G=await this.getMaxAttempts(),Q=this.retryCode(X,Y,G),J=Q===0,W=X.isLongPoll?.();if(J||W){let Z=Y.errorType;this.retryBackoffStrategy.setDelayBase(Z==="THROTTLING"?sQ.throttlingDelay():this.baseDelay);let $=this.retryBackoffStrategy.computeNextBackoffDelay(X.getRetryCount()),K=$;if(Y.retryAfterHint instanceof Date)K=Math.max($,Math.min(Y.retryAfterHint.getTime()-Date.now(),$+5000));if(!J)throw Object.assign(Error("No retry token available"),{$backoff:sQ.v2026&&Q===IA1.capacity&&W?K:0});else{let H=this.getCapacityCost(Z);return this.capacity-=H,new tB0(K,X.getRetryCount()+1,H,X.isLongPoll?.()??!1)}}throw Error("No retry token available")}recordSuccess(X){this.capacity=Math.min(aB0,this.capacity+(X.getRetryCost()??ps6))}getCapacity(){return this.capacity}async maxAttempts(){return this.maxAttemptsProvider()}async getMaxAttempts(){try{return await this.maxAttemptsProvider()}catch(X){return console.warn(`Max attempts provider could not resolve. Using default of ${VA1}`),VA1}}retryCode(X,Y,G){let Q=X.getRetryCount()+1,J=this.isRetryableError(Y.errorType)?0:IA1.incompatible,W=Q<G?0:IA1.attempts,Z=this.capacity>=this.getCapacityCost(Y.errorType)?0:IA1.capacity;return J||W||Z}getCapacityCost(X){return X===sQ.modifiedCostType()?sQ.throttlingCost():sQ.cost()}isRetryableError(X){return X==="THROTTLING"||X==="TRANSIENT"}}class as6{mode=Bn5.RETRY_MODES.ADAPTIVE;rateLimiter;standardRetryStrategy;constructor(X,Y){let{rateLimiter:G}=Y??{};this.rateLimiter=G??new jA1,this.standardRetryStrategy=Y?new TX1({maxAttempts:typeof X==="number"?X:3,...Y}):new TX1(X)}async acquireInitialRetryToken(X){return await this.rateLimiter.getSendToken(),this.standardRetryStrategy.acquireInitialRetryToken(X)}async refreshRetryTokenForRetry(X,Y){return this.rateLimiter.updateClientSendingRate(Y),this.standardRetryStrategy.refreshRetryTokenForRetry(X,Y)}recordSuccess(X){this.rateLimiter.updateClientSendingRate({}),this.standardRetryStrategy.recordSuccess(X)}async maxAttemptsProvider(){return this.standardRetryStrategy.maxAttempts()}}class ts6 extends TX1{computeNextBackoffDelay;constructor(X,Y=sQ.delay()){super(typeof X==="function"?X:async()=>X);if(typeof Y==="number")this.computeNextBackoffDelay=()=>Y;else this.computeNextBackoffDelay=Y}async refreshRetryTokenForRetry(X,Y){let G=await super.refreshRetryTokenForRetry(X,Y);return G.getRetryDelay=()=>this.computeNextBackoffDelay(G.getRetryCount()),G}}Bn5.AdaptiveRetryStrategy=as6;Bn5.ConfiguredRetryStrategy=ts6;Bn5.DEFAULT_MAX_ATTEMPTS=VA1;Bn5.DEFAULT_RETRY_DELAY_BASE=Wn5;Bn5.DEFAULT_RETRY_MODE=Zn5;Bn5.DefaultRateLimiter=jA1;Bn5.INITIAL_RETRY_TOKENS=aB0;Bn5.INVOCATION_ID_HEADER=Fn5;Bn5.MAXIMUM_RETRY_DELAY=rB0;Bn5.NO_RETRY_INCREMENT=ps6;Bn5.REQUEST_HEADER=Un5;Bn5.RETRY_COST=Kn5;Bn5.Retry=sQ;Bn5.StandardRetryStrategy=TX1;Bn5.THROTTLING_RETRY_DELAY_BASE=$n5;Bn5.TIMEOUT_RETRY_COST=Hn5});var WX=k((xn5)=>{var Sn5=Nw(),oB0={warningEmitted:!1},kn5=(X)=>{if(X&&!oB0.warningEmitted&&parseInt(X.substring(1,X.indexOf(".")))<20)oB0.warningEmitted=!0,process.emitWarning(`NodeDeprecationWarning: The AWS SDK for JavaScript (v3) will
1626
+ `);Q=W.pop()??"";for(let Z of W){let $=Os6(Z).replace(/^\[\d+\]\s*/,"").trim();if(!$)continue;Gz({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:$})}}(async()=>{for(;;){let{done:W,value:Z}=await Y.read();if(W)break;Q+=G.decode(Z,{stream:!0}),J()}if(Q.trim()){let W=Os6(Q).replace(/^\[\d+\]\s*/,"").trim();if(W)Gz({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:W})}})()}async function ui5(X){let{vitePort:Y,baseUrl:G,noTui:Q}=X,J=await wA1(Number(X.port)),{settings:W,services:Z,managedServiceNames:$}=await NA1({port:String(J),home:X.home,baseUrl:X.baseUrl,localMode:X.localMode,skipMigrations:X.skipMigrations,noTui:X.noTui,vitePort:X.vitePort});for(let z of Z)pa({name:z.name,status:"ready",port:z.port});EX1(W),wX1();let K=gi5(import.meta.dir,"..","..","..","..",".."),H=Q===!0,U=Bun.spawn(["bun","run","--cwd=apps/mesh","dev:servers"],{cwd:K,env:{...process.env,PORT:String(W.port),VITE_PORT:String(Y),DATABASE_URL:W.databaseUrl,NATS_URL:W.natsUrls.join(","),NODE_ENV:W.nodeEnv,DECOCMS_LOCAL_MODE:String(W.localMode),DECOCMS_HOME:W.dataDir,DATA_DIR:W.dataDir,DECO_CLI:"1",...W.baseUrl?{BASE_URL:W.baseUrl}:{}},stdio:["inherit",H?"inherit":"pipe",H?"inherit":"pipe"]});if(!H)Ds6(U.stdout),Ds6(U.stderr);let B=G||`http://localhost:${W.port}`;LX1(B),pa({name:"Vite",status:"ready",port:Number(Y)});let N=async(z)=>{if(U.kill(z),$.length>0){let{stopServices:O}=await Promise.resolve().then(() => (O$1(),z$1));await O(W.dataDir)}};return process.on("SIGINT",()=>N("SIGINT")),process.on("SIGTERM",()=>N("SIGTERM")),{port:Number(W.port),process:U}}var kB0=D(()=>{TB0();Qz();RB0()});import{Box as CB0,Text as vB0}from"ink";import{jsx as Ls6,jsxs as LA1}from"react/jsx-runtime";function ws6(X){if(!X)return"not set";try{let Y=new URL(X);if(Y.password)Y.password="***";if(Y.username&&Y.username.length>3)Y.username=Y.username.slice(0,3)+"***";return Y.pathname="/",Y.search="",Y.hash="",Y.toString()}catch{if(X.length<=10)return X;return X.slice(0,6)+"***"+X.slice(-4)}}function di5(X,Y){if(li5.has(X))return Y?{text:"\u25CF\u25CF\u25CF\u25CF\u25CF\u25CF",dimColor:!0}:{text:"not set",dimColor:!0};if(mi5.has(X)){if(Array.isArray(Y)){if(Y.length===0)return{text:"not set",dimColor:!0};return{text:Y.map((W)=>ws6(W)).join(", "),color:"cyan"}}let Q=ws6(Y);return Q==="not set"?{text:Q,dimColor:!0}:{text:Q,color:"cyan"}}if(Y===void 0||Y===null||Y==="")return{text:"not set",dimColor:!0};let G=String(Y);if(G==="true")return{text:G,color:"green"};if(G==="false")return{text:G,color:"yellow"};try{return new URL(G),{text:G,color:"cyan"}}catch{return{text:G}}}function ci5(X){return[{title:"Core",entries:[{key:"NODE_ENV",value:X.nodeEnv},{key:"PORT",value:X.port},{key:"BASE_URL",value:X.baseUrl??`http://localhost:${X.port}`},{key:"DATA_DIR",value:X.dataDir}]},{title:"Database",entries:[{key:"DATABASE_URL",value:X.databaseUrl},{key:"DATABASE_PG_SSL",value:X.databasePgSsl}]},{title:"Auth & Secrets",entries:[{key:"BETTER_AUTH_SECRET",value:X.betterAuthSecret},{key:"ENCRYPTION_KEY",value:X.encryptionKey},{key:"MESH_JWT_SECRET",value:X.meshJwtSecret},{key:"STUDIO_PROVISION_SECRET_KEY",value:X.studioProvisionSecretKey},{key:"DISABLE_RATE_LIMIT",value:X.disableRateLimit}]},{title:"Auth Providers",entries:[{key:"AUTH_EMAIL_PASSWORD_ENABLED",value:process.env.AUTH_EMAIL_PASSWORD_ENABLED??"true"},{key:"AUTH_GOOGLE_CLIENT_ID",value:!!process.env.AUTH_GOOGLE_CLIENT_ID},{key:"AUTH_GITHUB_CLIENT_ID",value:!!process.env.AUTH_GITHUB_CLIENT_ID},{key:"AUTH_RESEND_API_KEY",value:!!process.env.AUTH_RESEND_API_KEY},{key:"AUTH_SENDGRID_API_KEY",value:!!process.env.AUTH_SENDGRID_API_KEY},{key:"AUTH_SSO_MS_CLIENT_ID",value:!!process.env.AUTH_SSO_MS_CLIENT_ID},{key:"AUTH_MAGIC_LINK_ENABLED",value:process.env.AUTH_MAGIC_LINK_ENABLED==="true"},{key:"AUTH_EMAIL_OTP_ENABLED",value:process.env.AUTH_EMAIL_OTP_ENABLED==="true"}]},{title:"Observability",entries:[{key:"CLICKHOUSE_URL",value:X.clickhouseUrl},{key:"OTEL_SERVICE_NAME",value:X.otelServiceName}]},{title:"Event Bus & Networking",entries:[{key:"NATS_URL",value:X.natsUrls}]},{title:"Config Files",entries:[{key:"CONFIG_PATH",value:X.configPath}]},{title:"AI Gateway",entries:[{key:"DECO_AI_GATEWAY_ENABLED",value:X.aiGatewayEnabled},{key:"DECO_AI_GATEWAY_URL",value:X.aiGatewayUrl}]}]}function Es6({env:X}){let Y=ci5(X);return Ls6(CB0,{flexDirection:"column",children:Y.map((G)=>LA1(CB0,{flexDirection:"column",marginTop:1,children:[LA1(vB0,{dimColor:!0,children:[" ","\u2500\u2500 ",G.title," ","\u2500".repeat(Math.max(0,38-G.title.length))]}),G.entries.map(({key:Q,value:J})=>{let W=di5(Q,J);return LA1(CB0,{children:[LA1(vB0,{dimColor:!0,children:[" ",Q.padEnd(36)]}),Ls6(vB0,{color:W.color,dimColor:W.dimColor,children:W.text})]},Q)})]},G.title))})}var li5,mi5;var Ps6=D(()=>{li5=new Set(["BETTER_AUTH_SECRET","ENCRYPTION_KEY","MESH_JWT_SECRET","STUDIO_PROVISION_SECRET_KEY"]),mi5=new Set(["DATABASE_URL","CLICKHOUSE_URL","NATS_URL"])});var _B0;var qs6=D(()=>{_B0={name:"decocms",version:"2.300.1",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/mesh"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:'bun run migrate && concurrently "bun run dev:client" "bun run dev:server"',"dev:servers":'concurrently "bun run dev:client" "bun run dev:server"',"dev:client":"bun --bun vite dev","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts","build:client":"bun --bun vite build","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","db:migrate":"bun run ./dist/server/migrate.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts",test:"bun test","test:e2e":"playwright test","test:e2e:ui":"playwright test --ui","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run build:client && bun run build:server"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1","@freestyle-sh/with-bun":"^0.2.12","@freestyle-sh/with-deno":"^0.0.4","@freestyle-sh/with-nodejs":"^0.2.9","freestyle-sandboxes":"^0.1.46"},dependencies:{"@ai-sdk/anthropic":"^3.0.58","@ai-sdk/google":"^3.0.60","@ai-sdk/openai":"^3.0.50","@anthropic-ai/sdk":"^0.79.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@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.2.2","@openrouter/ai-sdk-provider":"^2.2.5","@opentelemetry/core":"^2.6.0","@tanstack/react-virtual":"^3.13.21","@xterm/addon-fit":"^0.11.0","@xterm/xterm":"^6.0.0","ai-sdk-provider-claude-code":"^3.4.4","ai-sdk-provider-codex-cli":"^1.1.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12",nats:"^2.29.3","node-pty":"^1.0.0","posthog-js":"^1.371.1","posthog-node":"^5.0.0",react:"^19.2.0","react-dom":"^19.2.0"},devDependencies:{"@ai-sdk/provider":"^3.0.8","@ai-sdk/react":"^3.0.118","@anthropic-ai/claude-agent-sdk":"^0.2.80","@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/mcp-utils":"workspace:*","@decocms/mesh-sdk":"workspace:*","@decocms/runtime":"workspace:*","@decocms/vite-plugin":"workspace:*","@electric-sql/pglite":"^0.3.15","@floating-ui/react":"^0.27.16","@hookform/resolvers":"^5.2.2","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.27.1","@monaco-editor/react":"^4.7.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/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/test":"^1.58.2","@radix-ui/react-avatar":"^1.1.10","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-dropdown-menu":"^2.1.16","@radix-ui/react-label":"^2.1.7","@radix-ui/react-select":"^2.2.6","@radix-ui/react-separator":"^1.1.7","@radix-ui/react-slot":"^1.2.3","@radix-ui/react-tabs":"^1.1.13","@rjsf/core":"^6.1.2","@rjsf/shadcn":"^6.1.2","@rjsf/utils":"^6.1.2","@rjsf/validator-ajv8":"^6.1.2","@tailwindcss/vite":"^4.1.17","@tanstack/react-query":"5.90.11","@tanstack/react-router":"^1.139.7","@tiptap/core":"3.20.2","@tiptap/extension-mention":"3.20.2","@tiptap/extension-placeholder":"3.20.2","@tiptap/pm":"3.20.2","@tiptap/react":"3.20.2","@tiptap/starter-kit":"3.20.2","@tiptap/suggestion":"3.20.2","@types/bun":"^1.3.1","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@untitledui/icons":"^0.0.19","@vercel/nft":"^1.1.1","@vitejs/plugin-react":"^5.1.0",ai:"^6.0.116","babel-plugin-react-compiler":"^1.0.0","better-auth":"1.4.5","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","kysely-pglite":"^0.6.1","lucide-react":"^0.468.0",marked:"^15.0.6","@decocms/sandbox":"workspace:*","mesh-plugin-workflows":"workspace:*",nanoid:"^5.1.6",pg:"^8.16.3",prettier:"^3.4.2","react-hook-form":"^7.66.0","react-markdown":"^10.1.0","react-resizable-panels":"^2.1.7","react-syntax-highlighter":"^15.6.1",recharts:"^3.6.0","rehype-raw":"^7.0.0","remark-gfm":"^4.0.0","sass-embedded":"^1.97.2",sonner:"^2.0.7","tailwind-merge":"^3.3.1",tailwindcss:"^4.1.17",typescript:"^5.9.3",vite:"^7.2.1","vite-tsconfig-paths":"^5.1.4",zod:"^4.0.0",zustand:"^5.0.9"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","mesh","tools"],license:"MIT",publishConfig:{access:"public"}}});import{Box as PU,Text as MX}from"ink";import{Spinner as pi5}from"@inkjs/ui";import{useSyncExternalStore as As6}from"react";import{jsx as qY,jsxs as oQ}from"react/jsx-runtime";function oi5(X,Y){if(!X||!ri5.has(X))return X;let G=fB0[Y]??fB0[fB0.length-1];return X==="#875f00"?G[0]:G[1]}function Ts6({status:X}){if(X==="pending")return qY(pi5,{label:""});return qY(MX,{color:"green",children:"\u2713"})}function Is6({services:X,migrationsStatus:Y,home:G,serverUrl:Q,vibe:J}){let W=As6(iu0,cu0),Z=As6(ou0,ru0);return oQ(PU,{flexDirection:"column",paddingBottom:1,children:[J?oQ(PU,{flexDirection:"column",children:[W.map(($,K)=>{let H=Z[K],U=$.reduce((N,z)=>N+z.text.length,0),B=Math.max(0,ti5-U);return oQ(PU,{flexDirection:"row",children:[$.map((N,z)=>{let O=oi5(N.color,K);return O?qY(MX,{color:O,children:N.text},z):qY(MX,{children:N.text},z)}),qY(MX,{children:" ".repeat(B+2)}),H?.map((N,z)=>N.color?qY(MX,{color:N.color,children:N.char},z):qY(MX,{children:N.char},z))]},K)}),oQ(MX,{dimColor:!0,children:[" v",_B0.version]})]}):oQ(PU,{flexDirection:"column",marginTop:1,children:[ni5.map(($,K)=>qY(MX,{color:ai5[K],children:$},K)),oQ(MX,{dimColor:!0,children:[" v",_B0.version]})]}),qY(PU,{marginBottom:1,children:qY(MX,{dimColor:!0,children:"\u2500".repeat(80)})}),qY(PU,{children:oQ(MX,{dimColor:!0,children:["Home: ",G]})}),oQ(PU,{gap:2,children:[X.map(($)=>oQ(PU,{gap:1,children:[oQ(MX,{children:[$.name," :",$.port||"...."]}),qY(Ts6,{status:$.status})]},$.name)),oQ(PU,{gap:1,children:[qY(MX,{children:"Migrations"}),qY(Ts6,{status:Y})]})]}),qY(PU,{children:Q?oQ(MX,{children:["Open in browser: ",qY(MX,{color:"cyan",children:Q})]}):qY(MX,{dimColor:!0,children:"Starting..."})}),oQ(PU,{gap:2,children:[oQ(MX,{dimColor:!0,children:[qY(MX,{bold:!0,dimColor:!0,children:"K"})," ","toggle config"]}),oQ(MX,{dimColor:!0,children:[qY(MX,{bold:!0,dimColor:!0,children:"L"})," ","toggle log flow"]}),oQ(MX,{dimColor:!0,children:[qY(MX,{bold:!0,dimColor:!0,children:"V"})," ","toggle vibe ",J?"\u266A Nihilore \xB7 CC BY 4.0":""]}),J&&oQ(MX,{dimColor:!0,children:[qY(MX,{bold:!0,dimColor:!0,children:"N"})," ","skip song"]})]})]})}var ni5,ai5,fB0,ti5=30,ri5;var Vs6=D(()=>{qs6();An1();Rn1();ni5=[" \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 "],ai5=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"],fB0=[["#00ff64","#00cc50"],["#00f060","#00c04c"],["#00e05c","#00b448"],["#00d058","#00a844"],["#00c054","#009c40"],["#00b050","#00903c"],["#00a04c","#008438"],["#009048","#007834"],["#008044","#006c30"],["#007040","#00602c"],["#00603c","#005428"]],ri5=new Set(["#875f00","#5f3800"])});import{useSyncExternalStore as si5}from"react";function ei5(){let X=process.stdout.rows||24,Y=process.stdout.columns||80;if(X!==EA1.rows||Y!==EA1.columns)EA1={rows:X,columns:Y};return EA1}function Xp5(X){return process.stdout.on("resize",X),()=>{process.stdout.off("resize",X)}}function js6(){return si5(Xp5,ei5)}var EA1;var Ms6=D(()=>{EA1={rows:process.stdout.rows||24,columns:process.stdout.columns||80}});import{Box as Yp5,Text as PX1}from"ink";import{useSyncExternalStore as Gp5}from"react";import{jsx as bB0,jsxs as yB0}from"react/jsx-runtime";function Qp5(X){if(X>=500)return"red";if(X>=400)return"yellow";if(X>=300)return"cyan";return"green"}function Rs6({logs:X,headerHeight:Y}){let{rows:G}=js6(),{logFlow:Q}=Gp5(DX1,OX1),J=Math.max(1,G-Y-1),W=Q?X:X.slice(-J);return bB0(Yp5,{flexDirection:"column",children:W.map((Z,$)=>{if(Z.rawLine)return bB0(PX1,{dimColor:!0,children:Z.rawLine},$);let K=Z.duration<1000?`${Z.duration}ms`:`${(Z.duration/1000).toFixed(1)}s`;return yB0(PX1,{children:[yB0(PX1,{dimColor:!0,children:[Z.method.padEnd(6)," ",Z.path.padEnd(30)," "]}),bB0(PX1,{color:Qp5(Z.status),children:Z.status}),yB0(PX1,{dimColor:!0,children:[" ",K.padStart(8)]})]},$)})})}var Ss6=D(()=>{Qz();Ms6()});var xB0={};j0(xB0,{App:()=>Fp5});import{Box as Jp5,Text as Zp5,useInput as Wp5}from"ink";import{useSyncExternalStore as $p5}from"react";import{jsx as PA1,jsxs as Up5}from"react/jsx-runtime";function Fp5({home:X}){let Y=$p5(DX1,OX1);return Wp5((G)=>{if(G==="k"||G==="K")VB0();if(G==="l"||G==="L")jB0();if((G==="v"||G==="V")&&Y.dataDir)vn1(Y.dataDir),MB0();if((G==="n"||G==="N")&&Y.vibe)Cn1()}),Up5(Jp5,{flexDirection:"column",children:[PA1(Is6,{services:Y.services,migrationsStatus:Y.migrationsStatus,home:X,serverUrl:Y.serverUrl,vibe:Y.vibe}),Y.viewMode==="config"?Y.env?PA1(Es6,{env:Y.env}):PA1(Zp5,{dimColor:!0,children:"Loading configuration..."}):PA1(Rs6,{logs:Y.logs,headerHeight:Y.vibe?Hp5:Kp5})]})}var Kp5=15,Hp5=19;var hB0=D(()=>{Ps6();Vs6();Ss6();Qz();Vd()});function ks6(X,Y={}){return{PORT:String(X.port),NODE_ENV:X.nodeEnv,BASE_URL:X.baseUrl,DATA_DIR:X.dataDir,DECOCMS_HOME:X.dataDir,DATABASE_URL:X.databaseUrl,DATABASE_PG_SSL:String(X.databasePgSsl),DATABASE_POOL_MAX:String(X.databasePoolMax),NATS_URL:X.natsUrls.join(","),BETTER_AUTH_SECRET:X.betterAuthSecret,ENCRYPTION_KEY:X.encryptionKey,MESH_JWT_SECRET:X.meshJwtSecret,DECOCMS_LOCAL_MODE:String(X.localMode),DISABLE_RATE_LIMIT:String(X.disableRateLimit),STUDIO_PROVISION_SECRET_KEY:X.studioProvisionSecretKey,CONFIG_PATH:X.configPath,...Object.fromEntries(Object.entries(process.env).filter(([G])=>G.startsWith("AUTH_"))),DECO_AI_GATEWAY_ENABLED:String(X.aiGatewayEnabled),DECO_AI_GATEWAY_URL:X.aiGatewayUrl,ENABLE_DECO_IMPORT:String(X.enableDecoImport),S3_ENDPOINT:X.s3Endpoint,S3_BUCKET:X.s3Bucket,S3_REGION:X.s3Region,S3_ACCESS_KEY_ID:X.s3AccessKeyId,S3_SECRET_ACCESS_KEY:X.s3SecretAccessKey,S3_FORCE_PATH_STYLE:String(X.s3ForcePathStyle),OTEL_SERVICE_NAME:X.otelServiceName,CLICKHOUSE_URL:X.clickhouseUrl,DECO_SUPABASE_URL:X.decoSupabaseUrl,DECO_SUPABASE_SERVICE_KEY:X.decoSupabaseServiceKey,FIRECRAWL_API_KEY:X.firecrawlApiKey,STUDIO_SANDBOX_RUNNER:process.env.STUDIO_SANDBOX_RUNNER,STUDIO_SANDBOX_TEMPLATE_NAME:process.env.STUDIO_SANDBOX_TEMPLATE_NAME,STUDIO_ENV:process.env.STUDIO_ENV,STUDIO_SANDBOX_PREVIEW_URL_PATTERN:process.env.STUDIO_SANDBOX_PREVIEW_URL_PATTERN,STUDIO_SANDBOX_PREVIEW_GATEWAY_NAME:process.env.STUDIO_SANDBOX_PREVIEW_GATEWAY_NAME,STUDIO_SANDBOX_PREVIEW_GATEWAY_NAMESPACE:process.env.STUDIO_SANDBOX_PREVIEW_GATEWAY_NAMESPACE,KUBERNETES_SERVICE_HOST:process.env.KUBERNETES_SERVICE_HOST,KUBERNETES_SERVICE_PORT:process.env.KUBERNETES_SERVICE_PORT,FREESTYLE_API_KEY:process.env.FREESTYLE_API_KEY,BROWSERLESS_TOKEN:process.env.BROWSERLESS_TOKEN,NODE_EXTRA_CA_CERTS:process.env.NODE_EXTRA_CA_CERTS,DECO_CLI:"1",DECO_NO_TUI:"true",...Y}}var Rj=k((wp5)=>{wp5.HttpAuthLocation=void 0;(function(X){X.HEADER="header",X.QUERY="query"})(wp5.HttpAuthLocation||(wp5.HttpAuthLocation={}));wp5.HttpApiKeyAuthLocation=void 0;(function(X){X.HEADER="header",X.QUERY="query"})(wp5.HttpApiKeyAuthLocation||(wp5.HttpApiKeyAuthLocation={}));wp5.EndpointURLScheme=void 0;(function(X){X.HTTP="http",X.HTTPS="https"})(wp5.EndpointURLScheme||(wp5.EndpointURLScheme={}));wp5.AlgorithmId=void 0;(function(X){X.MD5="md5",X.CRC32="crc32",X.CRC32C="crc32c",X.SHA1="sha1",X.SHA256="sha256"})(wp5.AlgorithmId||(wp5.AlgorithmId={}));var Bp5=(X)=>{let Y=[];if(X.sha256!==void 0)Y.push({algorithmId:()=>wp5.AlgorithmId.SHA256,checksumConstructor:()=>X.sha256});if(X.md5!=null)Y.push({algorithmId:()=>wp5.AlgorithmId.MD5,checksumConstructor:()=>X.md5});return{addChecksumAlgorithm(G){Y.push(G)},checksumAlgorithms(){return Y}}},Np5=(X)=>{let Y={};return X.checksumAlgorithms().forEach((G)=>{Y[G.algorithmId()]=G.checksumConstructor()}),Y},zp5=(X)=>{return Bp5(X)},Op5=(X)=>{return Np5(X)};wp5.FieldPosition=void 0;(function(X){X[X.HEADER=0]="HEADER",X[X.TRAILER=1]="TRAILER"})(wp5.FieldPosition||(wp5.FieldPosition={}));var Dp5="__smithy_context";wp5.IniSectionType=void 0;(function(X){X.PROFILE="profile",X.SSO_SESSION="sso-session",X.SERVICES="services"})(wp5.IniSectionType||(wp5.IniSectionType={}));wp5.RequestHandlerProtocol=void 0;(function(X){X.HTTP_0_9="http/0.9",X.HTTP_1_0="http/1.0",X.TDS_8_0="tds/8.0"})(wp5.RequestHandlerProtocol||(wp5.RequestHandlerProtocol={}));wp5.SMITHY_CONTEXT_KEY=Dp5;wp5.getDefaultClientConfiguration=zp5;wp5.resolveDefaultRuntimeConfig=Op5});var u7=k((jp5)=>{var qp5=Rj(),Ap5=(X)=>{return{setHttpHandler(Y){X.httpHandler=Y},httpHandler(){return X.httpHandler},updateHttpClientConfig(Y,G){X.httpHandler?.updateHttpClientConfig(Y,G)},httpHandlerConfigs(){return X.httpHandler.httpHandlerConfigs()}}},Tp5=(X)=>{return{httpHandler:X.httpHandler()}};class Cs6{name;kind;values;constructor({name:X,kind:Y=qp5.FieldPosition.HEADER,values:G=[]}){this.name=X,this.kind=Y,this.values=G}add(X){this.values.push(X)}set(X){this.values=X}remove(X){this.values=this.values.filter((Y)=>Y!==X)}toString(){return this.values.map((X)=>X.includes(",")||X.includes(" ")?`"${X}"`:X).join(", ")}get(){return this.values}}class vs6{entries={};encoding;constructor({fields:X=[],encoding:Y="utf-8"}){X.forEach(this.setField.bind(this)),this.encoding=Y}setField(X){this.entries[X.name.toLowerCase()]=X}getField(X){return this.entries[X.toLowerCase()]}removeField(X){delete this.entries[X.toLowerCase()]}getByType(X){return Object.values(this.entries).filter((Y)=>Y.kind===X)}}class qA1{method;protocol;hostname;port;path;query;headers;username;password;fragment;body;constructor(X){this.method=X.method||"GET",this.hostname=X.hostname||"localhost",this.port=X.port,this.query=X.query||{},this.headers=X.headers||{},this.body=X.body,this.protocol=X.protocol?X.protocol.slice(-1)!==":"?`${X.protocol}:`:X.protocol:"https:",this.path=X.path?X.path.charAt(0)!=="/"?`/${X.path}`:X.path:"/",this.username=X.username,this.password=X.password,this.fragment=X.fragment}static clone(X){let Y=new qA1({...X,headers:{...X.headers}});if(Y.query)Y.query=Ip5(Y.query);return Y}static isInstance(X){if(!X)return!1;let Y=X;return"method"in Y&&"protocol"in Y&&"hostname"in Y&&"path"in Y&&typeof Y.query==="object"&&typeof Y.headers==="object"}clone(){return qA1.clone(this)}}function Ip5(X){return Object.keys(X).reduce((Y,G)=>{let Q=X[G];return{...Y,[G]:Array.isArray(Q)?[...Q]:Q}},{})}class _s6{statusCode;reason;headers;body;constructor(X){this.statusCode=X.statusCode,this.reason=X.reason,this.headers=X.headers||{},this.body=X.body}static isInstance(X){if(!X)return!1;let Y=X;return typeof Y.statusCode==="number"&&typeof Y.headers==="object"}}function Vp5(X){return/^[a-z0-9][a-z0-9\.\-]*[a-z0-9]$/.test(X)}jp5.Field=Cs6;jp5.Fields=vs6;jp5.HttpRequest=qA1;jp5.HttpResponse=_s6;jp5.getHttpHandlerExtensionConfiguration=Ap5;jp5.isValidHostname=Vp5;jp5.resolveHttpHandlerRuntimeConfig=Tp5});function fp5(X){return(Y)=>async(G)=>{let{request:Q}=G;if(X.expectContinueHeader!==!1&&fs6.HttpRequest.isInstance(Q)&&Q.body&&X.runtime==="node"&&X.requestHandler?.constructor?.name!=="FetchHttpHandler"){let J=!0;if(typeof X.expectContinueHeader==="number")try{J=(Number(Q.headers?.["content-length"])??X.bodyLengthChecker?.(Q.body)??1/0)>=X.expectContinueHeader}catch(W){}else J=!!X.expectContinueHeader;if(J)Q.headers.Expect="100-continue"}return Y({...G,request:Q})}}var fs6,bp5,bs6=(X)=>({applyToStack:(Y)=>{Y.add(fp5(X),bp5)}});var ys6=D(()=>{fs6=Y1(u7(),1);bp5={step:"build",tags:["SET_EXPECT_HEADER","EXPECT_HEADER"],name:"addExpectContinueMiddleware",override:!0}});var OH,AA1,Sj,TA1,E9,xs6,AX1;var DH=D(()=>{OH={WHEN_SUPPORTED:"WHEN_SUPPORTED",WHEN_REQUIRED:"WHEN_REQUIRED"},AA1=OH.WHEN_SUPPORTED,Sj={WHEN_SUPPORTED:"WHEN_SUPPORTED",WHEN_REQUIRED:"WHEN_REQUIRED"},TA1=OH.WHEN_SUPPORTED;(function(X){X.MD5="MD5",X.CRC32="CRC32",X.CRC32C="CRC32C",X.CRC64NVME="CRC64NVME",X.SHA1="SHA1",X.SHA256="SHA256"})(E9||(E9={}));(function(X){X.HEADER="header",X.TRAILER="trailer"})(xs6||(xs6={}));AX1=E9.CRC32});var Vq,na=(X,Y,G,Q)=>{if(!(Y in X))return;let J=X[Y].toUpperCase();if(!Object.values(G).includes(J))throw TypeError(`Cannot load ${Q} '${Y}'. Expected one of ${Object.values(G)}, got '${X[Y]}'.`);return J};var iB0=D(()=>{(function(X){X.ENV="env",X.CONFIG="shared config entry"})(Vq||(Vq={}))});var yp5="AWS_REQUEST_CHECKSUM_CALCULATION",xp5="request_checksum_calculation",hs6;var gs6=D(()=>{DH();iB0();hs6={environmentVariableSelector:(X)=>na(X,yp5,OH,Vq.ENV),configFileSelector:(X)=>na(X,xp5,OH,Vq.CONFIG),default:AA1}});var hp5="AWS_RESPONSE_CHECKSUM_VALIDATION",gp5="response_checksum_validation",us6;var ls6=D(()=>{DH();iB0();us6={environmentVariableSelector:(X)=>na(X,hp5,Sj,Vq.ENV),configFileSelector:(X)=>na(X,gp5,Sj,Vq.CONFIG),default:TA1}});var nB0=k((tp5)=>{var up5=["AuthFailure","InvalidSignatureException","RequestExpired","RequestInTheFuture","RequestTimeTooSkewed","SignatureDoesNotMatch"],lp5=["BandwidthLimitExceeded","EC2ThrottledException","LimitExceededException","PriorRequestNotComplete","ProvisionedThroughputExceededException","RequestLimitExceeded","RequestThrottled","RequestThrottledException","SlowDown","ThrottledException","Throttling","ThrottlingException","TooManyRequestsException","TransactionInProgressException"],mp5=["TimeoutError","RequestTimeout","RequestTimeoutException"],dp5=[500,502,503,504],cp5=["ECONNRESET","ECONNREFUSED","EPIPE","ETIMEDOUT"],ip5=["EHOSTUNREACH","ENETUNREACH","ENOTFOUND"],ms6=(X)=>X?.$retryable!==void 0,pp5=(X)=>up5.includes(X.name),ds6=(X)=>X.$metadata?.clockSkewCorrected,cs6=(X)=>{let Y=new Set(["Failed to fetch","NetworkError when attempting to fetch resource","The Internet connection appears to be offline","Load failed","Network request failed"]);if(!(X&&X instanceof TypeError))return!1;return Y.has(X.message)},np5=(X)=>X.$metadata?.httpStatusCode===429||lp5.includes(X.name)||X.$retryable?.throttling==!0,pB0=(X,Y=0)=>ms6(X)||ds6(X)||X.name==="InvalidSignatureException"&&X.message?.includes("Signature expired")||mp5.includes(X.name)||cp5.includes(X?.code||"")||ip5.includes(X?.code||"")||dp5.includes(X.$metadata?.httpStatusCode||0)||cs6(X)||is6(X)||X.cause!==void 0&&Y<=10&&pB0(X.cause,Y+1),ap5=(X)=>{if(X.$metadata?.httpStatusCode!==void 0){let Y=X.$metadata.httpStatusCode;if(500<=Y&&Y<=599&&!pB0(X))return!0;return!1}return!1};function is6(X){return X.code==="ERR_HTTP2_STREAM_ERROR"&&X.message.includes("NGHTTP2_REFUSED_STREAM")}tp5.isBrowserNetworkError=cs6;tp5.isClockSkewCorrectedError=ds6;tp5.isClockSkewError=pp5;tp5.isNodeJsHttp2TransientError=is6;tp5.isRetryableByTrait=ms6;tp5.isServerError=ap5;tp5.isThrottlingError=np5;tp5.isTransientError=pB0});var Nw=k((Bn5)=>{var Jn5=nB0();Bn5.RETRY_MODES=void 0;(function(X){X.STANDARD="standard",X.ADAPTIVE="adaptive"})(Bn5.RETRY_MODES||(Bn5.RETRY_MODES={}));var VA1=3,Zn5=Bn5.RETRY_MODES.STANDARD;class jA1{static setTimeoutFn=setTimeout;beta;minCapacity;minFillRate;scaleConstant;smooth;enabled=!1;availableTokens=0;lastMaxRate=0;measuredTxRate=0;requestCount=0;fillRate;lastThrottleTime;lastTimestamp=0;lastTxRateBucket;maxCapacity;timeWindow=0;constructor(X){this.beta=X?.beta??0.7,this.minCapacity=X?.minCapacity??1,this.minFillRate=X?.minFillRate??0.5,this.scaleConstant=X?.scaleConstant??0.4,this.smooth=X?.smooth??0.8,this.lastThrottleTime=this.getCurrentTimeInSeconds(),this.lastTxRateBucket=Math.floor(this.getCurrentTimeInSeconds()),this.fillRate=this.minFillRate,this.maxCapacity=this.minCapacity}async getSendToken(){return this.acquireTokenBucket(1)}updateClientSendingRate(X){let Y;this.updateMeasuredRate();let G=X;if(G?.errorType==="THROTTLING"||Jn5.isThrottlingError(G?.error??X)){let W=!this.enabled?this.measuredTxRate:Math.min(this.measuredTxRate,this.fillRate);this.lastMaxRate=W,this.calculateTimeWindow(),this.lastThrottleTime=this.getCurrentTimeInSeconds(),Y=this.cubicThrottle(W),this.enableTokenBucket()}else this.calculateTimeWindow(),Y=this.cubicSuccess(this.getCurrentTimeInSeconds());let J=Math.min(Y,2*this.measuredTxRate);this.updateTokenBucketRate(J)}getCurrentTimeInSeconds(){return Date.now()/1000}async acquireTokenBucket(X){if(!this.enabled)return;if(this.refillTokenBucket(),X>this.availableTokens){let Y=(X-this.availableTokens)/this.fillRate*1000;await new Promise((G)=>jA1.setTimeoutFn(G,Y))}this.availableTokens=this.availableTokens-X}refillTokenBucket(){let X=this.getCurrentTimeInSeconds();if(!this.lastTimestamp){this.lastTimestamp=X;return}let Y=(X-this.lastTimestamp)*this.fillRate;this.availableTokens=Math.min(this.maxCapacity,this.availableTokens+Y),this.lastTimestamp=X}calculateTimeWindow(){this.timeWindow=this.getPrecise(Math.pow(this.lastMaxRate*(1-this.beta)/this.scaleConstant,0.3333333333333333))}cubicThrottle(X){return this.getPrecise(X*this.beta)}cubicSuccess(X){return this.getPrecise(this.scaleConstant*Math.pow(X-this.lastThrottleTime-this.timeWindow,3)+this.lastMaxRate)}enableTokenBucket(){this.enabled=!0}updateTokenBucketRate(X){this.refillTokenBucket(),this.fillRate=Math.max(X,this.minFillRate),this.maxCapacity=Math.max(X,this.minCapacity),this.availableTokens=Math.min(this.availableTokens,this.maxCapacity)}updateMeasuredRate(){let X=this.getCurrentTimeInSeconds(),Y=Math.floor(X*2)/2;if(this.requestCount++,Y>this.lastTxRateBucket){let G=this.requestCount/(Y-this.lastTxRateBucket);this.measuredTxRate=this.getPrecise(G*this.smooth+this.measuredTxRate*(1-this.smooth)),this.requestCount=0,this.lastTxRateBucket=Y}}getPrecise(X){return parseFloat(X.toFixed(8))}}var Wn5=100,rB0=20000,$n5=500,aB0=500,Kn5=5,Hn5=10,ps6=1,Fn5="amz-sdk-invocation-id",Un5="amz-sdk-request";class sQ{static v2026=typeof process<"u"&&process.env?.SMITHY_NEW_RETRIES_2026==="true";static delay(){return sQ.v2026?50:100}static throttlingDelay(){return sQ.v2026?1000:500}static cost(){return sQ.v2026?14:5}static throttlingCost(){return sQ.v2026?5:10}static modifiedCostType(){return sQ.v2026?"THROTTLING":"TRANSIENT"}}class ns6{x=sQ.delay();computeNextBackoffDelay(X){let Y=Math.random(),G=2,Q=Y*Math.min(this.x*2**X,rB0);return Math.floor(Q)}setDelayBase(X){this.x=X}}class tB0{delay;count;cost;longPoll;constructor(X,Y,G,Q){this.delay=X,this.count=Y,this.cost=G,this.longPoll=Q}getRetryCount(){return this.count}getRetryDelay(){return Math.min(rB0,this.delay)}getRetryCost(){return this.cost}isLongPoll(){return this.longPoll}}var IA1={incompatible:1,attempts:2,capacity:3};class TX1{mode=Bn5.RETRY_MODES.STANDARD;capacity=aB0;retryBackoffStrategy;maxAttemptsProvider;baseDelay;constructor(X){if(typeof X==="number")this.maxAttemptsProvider=async()=>X;else if(typeof X==="function")this.maxAttemptsProvider=X;else if(X&&typeof X==="object")this.maxAttemptsProvider=async()=>X.maxAttempts,this.baseDelay=X.baseDelay,this.retryBackoffStrategy=X.backoff;this.maxAttemptsProvider??=async()=>VA1,this.baseDelay??=sQ.delay(),this.retryBackoffStrategy??=new ns6}async acquireInitialRetryToken(X){return new tB0(sQ.delay(),0,void 0,sQ.v2026&&X.includes(":longpoll"))}async refreshRetryTokenForRetry(X,Y){let G=await this.getMaxAttempts(),Q=this.retryCode(X,Y,G),J=Q===0,W=X.isLongPoll?.();if(J||W){let Z=Y.errorType;this.retryBackoffStrategy.setDelayBase(Z==="THROTTLING"?sQ.throttlingDelay():this.baseDelay);let $=this.retryBackoffStrategy.computeNextBackoffDelay(X.getRetryCount()),K=$;if(Y.retryAfterHint instanceof Date)K=Math.max($,Math.min(Y.retryAfterHint.getTime()-Date.now(),$+5000));if(!J)throw Object.assign(Error("No retry token available"),{$backoff:sQ.v2026&&Q===IA1.capacity&&W?K:0});else{let H=this.getCapacityCost(Z);return this.capacity-=H,new tB0(K,X.getRetryCount()+1,H,X.isLongPoll?.()??!1)}}throw Error("No retry token available")}recordSuccess(X){this.capacity=Math.min(aB0,this.capacity+(X.getRetryCost()??ps6))}getCapacity(){return this.capacity}async maxAttempts(){return this.maxAttemptsProvider()}async getMaxAttempts(){try{return await this.maxAttemptsProvider()}catch(X){return console.warn(`Max attempts provider could not resolve. Using default of ${VA1}`),VA1}}retryCode(X,Y,G){let Q=X.getRetryCount()+1,J=this.isRetryableError(Y.errorType)?0:IA1.incompatible,W=Q<G?0:IA1.attempts,Z=this.capacity>=this.getCapacityCost(Y.errorType)?0:IA1.capacity;return J||W||Z}getCapacityCost(X){return X===sQ.modifiedCostType()?sQ.throttlingCost():sQ.cost()}isRetryableError(X){return X==="THROTTLING"||X==="TRANSIENT"}}class as6{mode=Bn5.RETRY_MODES.ADAPTIVE;rateLimiter;standardRetryStrategy;constructor(X,Y){let{rateLimiter:G}=Y??{};this.rateLimiter=G??new jA1,this.standardRetryStrategy=Y?new TX1({maxAttempts:typeof X==="number"?X:3,...Y}):new TX1(X)}async acquireInitialRetryToken(X){return await this.rateLimiter.getSendToken(),this.standardRetryStrategy.acquireInitialRetryToken(X)}async refreshRetryTokenForRetry(X,Y){return this.rateLimiter.updateClientSendingRate(Y),this.standardRetryStrategy.refreshRetryTokenForRetry(X,Y)}recordSuccess(X){this.rateLimiter.updateClientSendingRate({}),this.standardRetryStrategy.recordSuccess(X)}async maxAttemptsProvider(){return this.standardRetryStrategy.maxAttempts()}}class ts6 extends TX1{computeNextBackoffDelay;constructor(X,Y=sQ.delay()){super(typeof X==="function"?X:async()=>X);if(typeof Y==="number")this.computeNextBackoffDelay=()=>Y;else this.computeNextBackoffDelay=Y}async refreshRetryTokenForRetry(X,Y){let G=await super.refreshRetryTokenForRetry(X,Y);return G.getRetryDelay=()=>this.computeNextBackoffDelay(G.getRetryCount()),G}}Bn5.AdaptiveRetryStrategy=as6;Bn5.ConfiguredRetryStrategy=ts6;Bn5.DEFAULT_MAX_ATTEMPTS=VA1;Bn5.DEFAULT_RETRY_DELAY_BASE=Wn5;Bn5.DEFAULT_RETRY_MODE=Zn5;Bn5.DefaultRateLimiter=jA1;Bn5.INITIAL_RETRY_TOKENS=aB0;Bn5.INVOCATION_ID_HEADER=Fn5;Bn5.MAXIMUM_RETRY_DELAY=rB0;Bn5.NO_RETRY_INCREMENT=ps6;Bn5.REQUEST_HEADER=Un5;Bn5.RETRY_COST=Kn5;Bn5.Retry=sQ;Bn5.StandardRetryStrategy=TX1;Bn5.THROTTLING_RETRY_DELAY_BASE=$n5;Bn5.TIMEOUT_RETRY_COST=Hn5});var WX=k((xn5)=>{var Sn5=Nw(),oB0={warningEmitted:!1},kn5=(X)=>{if(X&&!oB0.warningEmitted&&parseInt(X.substring(1,X.indexOf(".")))<20)oB0.warningEmitted=!0,process.emitWarning(`NodeDeprecationWarning: The AWS SDK for JavaScript (v3) will
1627
1627
  no longer support Node.js ${X} in January 2026.
1628
1628
 
1629
1629
  To continue receiving updates to AWS services, bug fixes, and security
@@ -3330,7 +3330,7 @@ Hint: Configure a valid Google account email in Monitor Configuration > Contexto
3330
3330
 
3331
3331
  `);return{toolResults:K,agentSummary:z.length>0?z:null,unexecutedTools:U}}finally{await Y.close?.().catch(()=>{})}}async function Z_0(X,Y){let G=X.storage.registry,Q=X.organization.id,J=await G.monitorConnections.findByItemId(Q,Y.id);if(J){if(await X.storage.connections.findById(J.connection_id,Q))return J.connection_id}let W=D17(Y);if(!W)throw Error(`Registry item ${Y.id} has no remote URL`);let Z=z17(X),$=O17(Y),K=await X.storage.connections.create({organization_id:Q,created_by:Z,title:`[MCP Tester] ${Y.title}`,description:`Auto-created monitor connection for ${Y.id}`,app_name:"private-registry-monitor",app_id:`${QS}:monitor`,connection_type:$,connection_url:W,metadata:{monitorConnection:!0,registryItemId:Y.id,pluginId:QS}});return await G.monitorConnections.upsert({organization_id:Q,item_id:Y.id,connection_id:K.id,auth_status:"none"}),K.id}async function j17(X){let Y=X.ctx.storage.registry;switch(X.action){case"unlisted":return await Y.items.update(X.organizationId,X.item.id,{is_unlisted:!0}),"unlisted";case"remove_public":return await Y.items.update(X.organizationId,X.item.id,{is_public:!1}),"removed_public";case"remove_private":case"remove_all":return await Y.items.delete(X.organizationId,X.item.id),X.action==="remove_all"?"removed_all":"removed_private";default:return"none"}}async function M17(X){let Y=Date.now();if(X.signal.aborted)throw Error("Run cancelled");let G="passed",Q=!1,J=!1,W=null,Z="none",$=null,K=[],H=null,U=async()=>{await X.onProgress?.({status:G,connectionOk:Q,toolsListed:J,toolResults:[...K],agentSummary:$,errorMessage:W,actionTaken:Z,durationMs:Date.now()-Y})};try{let B=await Z_0(X.ctx,X.item);H=await X.ctx.createMCPProxy(B),Q=!0;let z=(await $31(H.listTools?H.listTools():Promise.resolve({tools:[]}),X.monitorConfig.perMcpTimeoutMs,`listTools ${X.item.id}`)).tools??[];if(J=!0,X.monitorConfig.monitorMode!=="health_check")K.push(...z.map((O)=>J_0(O.name))),await U();if(X.monitorConfig.monitorMode==="full_agent"){let O=await V17({ctx:X.ctx,monitorConfig:X.monitorConfig,item:X.item,proxy:H,tools:z,signal:X.signal,onProgress:async(w)=>{K.length=0,K.push(...fi4({discoveredTools:z,executedResults:w})),G=w.some((E)=>!E.success)?"failed":"passed",await U()}});if(K.length=0,K.push(...fi4({discoveredTools:z,executedResults:O.toolResults})),$=O.agentSummary,O.toolResults.some((w)=>!w.success))G="failed";if(O.unexecutedTools.length>0){if(G="failed",!W)W=`Agent skipped ${O.unexecutedTools.length} tool(s): ${O.unexecutedTools.join(", ")}`}}else if(X.monitorConfig.monitorMode!=="health_check"){for(let O=0;O<z.length;O++){let w=z[O];if(!w||X.signal.aborted)throw Error("Run cancelled");let E=Date.now();try{let P={},q=await $31(H.callTool({name:w.name,arguments:P}),X.monitorConfig.perToolTimeoutMs,`tool ${w.name}`),j=!q.isError,M=Date.now()-E;bi4(K,{toolName:w.name,success:j,input:P,durationMs:M,outputPreview:ui4(q.structuredContent??q.content),error:j?null:Jk1(q.content?.find((V)=>V.type==="text")?.text?.slice(0,300)??"Tool returned error")}),await U()}catch(P){let q=Date.now()-E,j=P instanceof Error?P.message:String(P);bi4(K,{toolName:w.name,success:!1,durationMs:q,error:Jk1(j)}),await U()}}if(K.some((O)=>!O.success))G="failed"}else for(let O of z)K.push(J_0(O.name));if(X.canApplyFailureAction&&G==="failed"&&X.monitorConfig.onFailure!=="none")Z=await j17({ctx:X.ctx,organizationId:X.organizationId,item:X.item,action:X.monitorConfig.onFailure})}catch(B){if(W=B instanceof Error?B.message:String(B),w17(B))G="needs_auth",await X.ctx.storage.registry.monitorConnections.updateAuthStatus(X.organizationId,X.item.id,"needs_auth");else G="error"}finally{await H?.close?.().catch(()=>{})}return{status:G,connectionOk:Q,toolsListed:J,toolResults:K,agentSummary:$,errorMessage:W,actionTaken:Z,durationMs:Date.now()-Y}}async function R17(X){let Y=Date.now(),G=X.ctx.storage.registry,J=(await G.items.list(X.organizationId,{includeUnlisted:!0})).items.filter((N)=>{if(X.monitorConfig.testPublicOnly&&!N.is_public)return!1;if(X.monitorConfig.testPrivateOnly&&N.is_public)return!1;return!0}),W=X.monitorConfig.includePendingRequests?(await G.publishRequests.list(X.organizationId,{status:"pending",limit:500})).items.map((N)=>S17(N)):[],Z=[...J.map((N)=>({item:N,source:"registry_item"})),...W.map((N)=>({item:N,source:"publish_request"}))];if(Z.length===0){await G.monitorRuns.update(X.organizationId,X.runId,{total_items:0,status:"completed",started_at:new Date().toISOString(),finished_at:new Date().toISOString()}),await Gk1({ctx:X.ctx,type:"registry.monitor.completed",subject:X.runId,data:{runId:X.runId,total:0}});return}await G.monitorRuns.update(X.organizationId,X.runId,{total_items:Z.length,status:"running",started_at:new Date().toISOString()});let $=0,K=0,H=0,U=0;for(let N=0;N<Z.length;N++){let z=Z[N],O=z?.item;if(!O||X.signal.aborted){await G.monitorRuns.update(X.organizationId,X.runId,{status:"cancelled",current_item_id:null,finished_at:new Date().toISOString()});return}await G.monitorRuns.update(X.organizationId,X.runId,{current_item_id:O.id});let w=null,E=async(q)=>{if(!w){w=(await G.monitorResults.create({run_id:X.runId,organization_id:X.organizationId,item_id:O.id,item_title:O.title,status:q.status,error_message:q.errorMessage,connection_ok:q.connectionOk,tools_listed:q.toolsListed,tool_results:q.toolResults,agent_summary:q.agentSummary,duration_ms:q.durationMs,action_taken:q.actionTaken})).id;return}await G.monitorResults.update(X.organizationId,w,{status:q.status,error_message:q.errorMessage,connection_ok:q.connectionOk,tools_listed:q.toolsListed,tool_results:q.toolResults,agent_summary:q.agentSummary,duration_ms:q.durationMs,action_taken:q.actionTaken})},P=await M17({ctx:X.ctx,organizationId:X.organizationId,item:O,monitorConfig:X.monitorConfig,signal:X.signal,canApplyFailureAction:z.source==="registry_item",onProgress:E});if(await E({status:P.status,connectionOk:P.connectionOk,toolsListed:P.toolsListed,toolResults:P.toolResults,agentSummary:P.agentSummary,errorMessage:P.errorMessage,actionTaken:P.actionTaken,durationMs:P.durationMs}),$+=1,P.status==="passed")K+=1;else if(P.status==="failed"||P.status==="error")H+=1;else U+=1;if(await G.monitorRuns.update(X.organizationId,X.runId,{tested_items:$,passed_items:K,failed_items:H,skipped_items:U}),P.status==="failed"||P.status==="error")await Gk1({ctx:X.ctx,type:"registry.monitor.item_failed",subject:O.id,data:{runId:X.runId,itemId:O.id,itemTitle:O.title,status:P.status,errorMessage:P.errorMessage,actionTaken:P.actionTaken}})}let B=Date.now()-Y;await G.monitorRuns.update(X.organizationId,X.runId,{status:"completed",current_item_id:null,finished_at:new Date().toISOString()}),await Gk1({ctx:X.ctx,type:"registry.monitor.completed",subject:X.runId,data:{runId:X.runId,total:$,passed:K,failed:H,skipped:U,durationMs:B}})}function S17(X){return{id:`${NT}${X.id}`,title:X.title,description:X.description,_meta:X._meta,server:X.server,is_public:!1,is_unlisted:!0,created_at:X.created_at,updated_at:X.updated_at}}async function k17(X,Y){let G=N17(X);await G.access.check();let Q=G.storage.registry,J=await Q.monitorRuns.create({organization_id:G.organization.id,status:"pending",config_snapshot:Y,started_at:null}),W=new AbortController;return Qk1.set(J.id,W),R17({ctx:G,runId:J.id,organizationId:G.organization.id,monitorConfig:Y,signal:W.signal}).catch(async(Z)=>{await Q.monitorRuns.update(G.organization.id,J.id,{status:"failed",current_item_id:null,finished_at:new Date().toISOString()}).catch(()=>{}),await Gk1({ctx:G,type:"registry.monitor.failed",subject:J.id,data:{runId:J.id,error:Z instanceof Error?Z.message:String(Z)}}),B17(`Run ${J.id} failed with uncaught error:`,Z)}).finally(()=>{Qk1.delete(J.id)}),{run:{id:J.id}}}var Qk1,hi4="[MONITOR-AGENT]",H17,F17="health_check: not called",di4;var Zk1=D(()=>{h0();o9();yX();Ns();nH();Qk1=new Map,H17=Ri4;di4=m1({name:"REGISTRY_MONITOR_RUN_START",description:"Start an MCP registry monitor run with an isolated set of monitor connections.",inputSchema:hv0,outputSchema:gv0,handler:async(X,Y)=>{let G=s1(Y);await Y.access.check();let Q=xv0(X.config??{}),{run:J}=await k17(Y,Q),Z=await Y.storage.registry.monitorRuns.findById(G.id,J.id);if(!Z)throw Error(`Failed to load monitor run ${J.id}`);return{run:Z}}})});var ci4;var ii4=D(()=>{h0();nH();ci4=m1({name:"REGISTRY_MONITOR_RUN_LIST",description:"List MCP registry monitor runs",inputSchema:mv0,outputSchema:dv0,handler:async(X,Y)=>{let G=s1(Y);return await Y.access.check(),Y.storage.registry.monitorRuns.list(G.id,X)}})});var pi4;var ni4=D(()=>{h0();nH();pi4=m1({name:"REGISTRY_MONITOR_RUN_GET",description:"Get details for one MCP registry monitor run",inputSchema:cv0,outputSchema:iv0,handler:async(X,Y)=>{let G=s1(Y);return await Y.access.check(),{run:await Y.storage.registry.monitorRuns.findById(G.id,X.runId)}}})});var ai4;var ti4=D(()=>{h0();nH();Zk1();ai4=m1({name:"REGISTRY_MONITOR_RUN_CANCEL",description:"Cancel a running MCP registry monitor run",inputSchema:uv0,outputSchema:lv0,handler:async(X,Y)=>{let G=s1(Y);return await Y.access.check(),gi4(X.runId),{run:await Y.storage.registry.monitorRuns.update(G.id,X.runId,{status:"cancelled",current_item_id:null,finished_at:new Date().toISOString()})}}})});var ri4;var oi4=D(()=>{h0();nH();ri4=m1({name:"REGISTRY_MONITOR_RESULT_LIST",description:"List results for a given MCP registry monitor run",inputSchema:pv0,outputSchema:nv0,handler:async(X,Y)=>{let G=s1(Y);return await Y.access.check(),Y.storage.registry.monitorResults.listByRun(G.id,X.runId,{status:X.status,limit:X.limit,offset:X.offset})}})});var si4;var ei4=D(()=>{h0();nH();Ns();si4=m1({name:"REGISTRY_MONITOR_CONNECTION_LIST",description:"List monitor connection mappings for private registry MCP monitor runs, including auth status",inputSchema:av0,outputSchema:tv0,handler:async(X,Y)=>{let G=s1(Y);await Y.access.check();let Q=Y.storage.registry,J=await Q.monitorConnections.list(G.id);return{items:await Promise.all(J.map(async(Z)=>{let $=await Q.items.findById(G.id,Z.item_id);if(!$&&Z.item_id.startsWith(NT)){let U=Z.item_id.slice(NT.length),B=await Q.publishRequests.findById(G.id,U);if(B)$={id:Z.item_id,title:B.title,description:B.description,_meta:B._meta,server:B.server,is_public:!1,is_unlisted:!0,created_at:B.created_at,updated_at:B.updated_at}}let K=$?.server.remotes?.find((U)=>U.url)?.url??null,H=Z.item_id.startsWith(NT)?"request":"store";return{mapping:Z,item:$,remoteUrl:K,source:H}}))}}})});function C17(X){return{id:`${NT}${X.id}`,title:X.title,description:X.description,_meta:X._meta,server:X.server,is_public:!1,is_unlisted:!0,created_at:X.created_at,updated_at:X.updated_at}}var Xp4;var Yp4=D(()=>{h0();nH();Zk1();Ns();Xp4=m1({name:"REGISTRY_MONITOR_CONNECTION_SYNC",description:"Ensure every registry item has a dedicated monitor connection mapping for MCP monitors",inputSchema:rv0,outputSchema:ov0,handler:async(X,Y)=>{let G=s1(Y);await Y.access.check();let Q=Y.storage.registry,J=(await Q.items.list(G.id,{includeUnlisted:!0})).items,Z=(await Q.publishRequests.list(G.id,{status:"pending",limit:500})).items.map(C17),$=[...J,...Z],K=await Q.monitorConnections.list(G.id),H=new Set(K.map((B)=>B.item_id)),U=0;for(let B of $){if(!B.server.remotes?.some((N)=>N.url))continue;if(await Z_0(Y,B),!H.has(B.id))U+=1}return{created:U,updated:Math.max($.length-U,0)}}})});var Gp4;var Qp4=D(()=>{h0();nH();Gp4=m1({name:"REGISTRY_MONITOR_CONNECTION_UPDATE_AUTH",description:"Update the auth_status of a monitor connection mapping (by core connection ID)",inputSchema:sv0,outputSchema:ev0,handler:async({connectionId:X,authStatus:Y},G)=>{let Q=s1(G);await G.access.check();let J=G.storage.registry,W=Q.id,Z=await J.monitorConnections.findByConnectionId(W,X);if(!Z)throw Error(`No monitor connection mapping found for connection ${X}`);return await J.monitorConnections.updateAuthStatus(W,Z.item_id,Y),{success:!0}}})});function K31(X){if(!X||typeof X!=="object")return null;let Y=X,G=Y.id;if(typeof G==="string"&&G.length>0)return G;for(let Q of["event","result","structuredContent","content"]){let J=Y[Q],W=K31(J);if(W)return W}if(Array.isArray(X))for(let Q of X){let J=K31(Q);if(J)return J}return null}var Jp4;var Zp4=D(()=>{h0();o9();nH();Jp4=m1({name:"REGISTRY_MONITOR_SCHEDULE_SET",description:"Schedule recurring MCP monitor runs via EVENT_PUBLISH cron",inputSchema:X_0,outputSchema:Y_0,handler:async(X,Y)=>{let G=s1(Y);await Y.access.check();let Q=q7.SELF(G.id),J=await Y.createMCPProxy(Q);try{let W=await J.callTool({name:"EVENT_PUBLISH",arguments:{type:"registry.monitor.scheduled",subject:"private-registry",cron:X.cronExpression,data:{config:X.config??{}}}});if(W.isError)throw Error("Failed to create monitor schedule via EVENT_PUBLISH");let Z=K31(W.structuredContent)??K31(W.content)??K31(W);if(!Z)throw Error("Could not resolve schedule event id from EVENT_PUBLISH");return{scheduleEventId:Z}}finally{await J.close?.().catch(()=>{})}}})});var Wp4;var $p4=D(()=>{h0();o9();nH();Wp4=m1({name:"REGISTRY_MONITOR_SCHEDULE_CANCEL",description:"Cancel a recurring MCP monitor schedule via EVENT_CANCEL",inputSchema:G_0,outputSchema:Q_0,handler:async(X,Y)=>{let G=s1(Y);await Y.access.check();let Q=q7.SELF(G.id),J=await Y.createMCPProxy(Q);try{if((await J.callTool({name:"EVENT_CANCEL",arguments:{eventId:X.scheduleEventId}})).isError)throw Error("Failed to cancel monitor schedule via EVENT_CANCEL");return{success:!0}}finally{await J.close?.().catch(()=>{})}}})});function v17(X){if(!X)return{};if(typeof X==="string")try{return JSON.parse(X)}catch{return{}}if(typeof X==="object")return X;return{}}async function H31(X,Y){let Q=(await X.db.selectFrom("virtual_mcp_plugin_configs").innerJoin("connections","connections.id","virtual_mcp_plugin_configs.virtual_mcp_id").select(["virtual_mcp_plugin_configs.settings as settings"]).where("connections.organization_id","=",Y).where("virtual_mcp_plugin_configs.plugin_id","=",QS).execute()).map((W)=>v17(W.settings)),J={acceptPublishRequests:Q.some((W)=>W.acceptPublishRequests===!0),requireApiToken:Q.some((W)=>W.requireApiToken===!0),storePrivateOnly:Q.some((W)=>W.storePrivateOnly===!0)};if(J.acceptPublishRequests||J.requireApiToken||J.storePrivateOnly)return J;for(let W of Q)if(Object.keys(W).length>0)return W;return{}}var Kp4=D(()=>{Ns()});function _17(X,Y){if(!Y)return X;let G={field:["is_public"],operator:"eq",value:!1};if(!X)return G;return{operator:"and",conditions:[X,G]}}function f17(X){let Y=new Map,G=new Map;for(let J of X){let W=J._meta?.["mcp.mesh"];for(let Z of W?.tags??[])Y.set(Z,(Y.get(Z)??0)+1);for(let Z of W?.categories??[])G.set(Z,(G.get(Z)??0)+1)}let Q=(J)=>Array.from(J.entries()).map(([W,Z])=>({value:W,count:Z})).sort((W,Z)=>W.value.localeCompare(Z.value));return{tags:Q(Y),categories:Q(G)}}var Hp4,Fp4,Up4,Bp4;var Np4=D(()=>{h0();H0();JY();Kp4();Hp4=m1({name:"COLLECTION_REGISTRY_APP_LIST",description:"List registry items for Store discovery. Supports private-only mode from plugin settings.",inputSchema:so,outputSchema:eo,handler:async(X,Y)=>{let G=s1(Y);await Y.access.check();let Q=Y.storage.registry,J=await H31(Y,G.id);return Q.items.list(G.id,{...X,where:_17(X.where,J.storePrivateOnly===!0)})}}),Fp4=m1({name:"COLLECTION_REGISTRY_APP_GET",description:"Get a registry item for Store details. Respects private-only mode from plugin settings.",inputSchema:bz,outputSchema:cR,handler:async(X,Y)=>{let G=s1(Y);await Y.access.check();let Q=Y.storage.registry,J=await H31(Y,G.id),W=X.id??X.name;if(!W)return{item:null};let Z=await Q.items.findByIdOrName(G.id,W);if(!Z)return{item:null};if(J.storePrivateOnly&&Z.is_public)return{item:null};return{item:Z}}}),Up4=m1({name:"COLLECTION_REGISTRY_APP_VERSIONS",description:"Get registry item versions for Store details. Respects private-only mode from plugin settings.",inputSchema:bz,outputSchema:F.object({versions:F.array(eU)}),handler:async(X,Y)=>{let G=s1(Y);await Y.access.check();let Q=Y.storage.registry,J=await H31(Y,G.id),W=X.id??X.name;if(!W)return{versions:[]};let Z=await Q.items.findByIdOrName(G.id,W);if(!Z)return{versions:[]};if(J.storePrivateOnly&&Z.is_public)return{versions:[]};return{versions:[Z]}}}),Bp4=m1({name:"COLLECTION_REGISTRY_APP_FILTERS",description:"List Store filter facets for registry items. Respects private-only mode from plugin settings.",inputSchema:F.object({}),outputSchema:Xs,handler:async(X,Y)=>{let G=s1(Y);await Y.access.check();let Q=Y.storage.registry;if(!(await H31(Y,G.id)).storePrivateOnly)return Q.items.getFilters(G.id);let W=await Q.items.list(G.id,{limit:1e4,where:{field:["is_public"],operator:"eq",value:!1}});return f17(W.items)}})});var zp4;var Op4=D(()=>{Qh4();Zh4();$h4();Hh4();Uh4();Nh4();Oh4();wh4();Eh4();qh4();Th4();Vh4();Mh4();Sh4();Ch4();_h4();bh4();xh4();Zk1();ii4();ni4();ti4();oi4();ei4();Yp4();Qp4();Zp4();$p4();Np4();zp4=[Hp4,Fp4,Up4,Bp4,Dh4,Lh4,zh4,Ah4,Wh4,Gh4,Ph4,Kh4,Bh4,Fh4,Jh4,Ih4,jh4,Rh4,kh4,vh4,fh4,yh4,di4,ci4,pi4,ai4,ri4,si4,Xp4,Gp4,Jp4,Wp4]});function Wk1(X){return new Promise((Y)=>setTimeout(Y,X))}var zs=9000,F31="studio-sandbox:local";async function zT(X){try{let Y=await fetch(`${X}/health`,{signal:AbortSignal.timeout(x17)});if(!Y.ok)return null;let G=await Y.json();if(typeof G==="object"&&G!==null&&typeof G.bootId==="string"&&typeof G.ready==="boolean"&&G.setup&&typeof G.setup.running==="boolean"&&typeof G.setup.done==="boolean")return G;return null}catch{return null}}async function $k1(X){for(let Y=0;Y<Dp4;Y++){if(await zT(X)!==null)return;let G=(Math.random()*2-1)*h17;await Wk1(wp4+G)}throw Error(`sandbox daemon at ${X} did not respond on /health within ${Dp4*wp4/1000}s`)}async function Os(X,Y,G){let Q=G.timeoutMs??y17,J=JSON.stringify({command:G.command,timeout:Q,cwd:G.cwd,env:G.env}),W=Buffer.from(J,"utf-8").toString("base64"),Z=await fetch(`${X}/_decopilot_vm/bash`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${Y}`},body:W,signal:AbortSignal.timeout(Q+5000)});if(!Z.ok){let K=await Z.text().catch(()=>"");throw Error(`sandbox daemon /_decopilot_vm/bash returned ${Z.status}${K?`: ${K}`:""}`)}let $=await Z.json();return{stdout:$.stdout??"",stderr:$.stderr??"",exitCode:$.exitCode??-1,timedOut:Boolean($.timedOut)}}async function Ds(X,Y,G,Q){let J=new Headers(Q.headers);for(let $ of g17)J.delete($);J.set("authorization",`Bearer ${Y}`);let W=Q.method!=="GET"&&Q.method!=="HEAD",Z=`${X}${G.startsWith("/")?G:`/${G}`}`;return fetch(Z,{method:Q.method,headers:J,body:W?Q.body:void 0,redirect:"manual",signal:Q.signal,duplex:W?"half":void 0})}var y17=60000,x17=500,Dp4=25,wp4=200,h17=50,g17;var Kk1=D(()=>{g17=["cookie","host","connection","keep-alive","proxy-authenticate","proxy-authorization","te","trailer","transfer-encoding","accept-encoding","content-length"]});import{spawn as u17}from"child_process";function U31(X,Y){return new Promise((G,Q)=>{let J=u17("docker",X,{stdio:["ignore","pipe","pipe"]}),W="",Z="",$=Y!=null?setTimeout(()=>{Z+=`
3332
3332
  [docker ${X[0]}] timed out after ${Y}ms`,J.kill("SIGKILL")},Y):null;J.stdout.on("data",(K)=>{W+=K.toString()}),J.stderr.on("data",(K)=>{Z+=K.toString()}),J.on("error",(K)=>{if($)clearTimeout($);if(K.code==="ENOENT"){Q(Error("docker CLI not found on PATH. Install Docker Desktop (macOS) or Docker Engine (Linux)."));return}Q(K)}),J.on("close",(K)=>{if($)clearTimeout($);G({stdout:W,stderr:Z,code:K??-1})})})}async function Lp4(X,Y){let Q=await(Y.exec??U31)(["run","-d",...Y.args,X,...Y.command??[]],Y.timeoutMs);if(Q.code!==0){let W=Q.stderr.trim()||Q.stdout.trim()||"no output";throw Error(`docker run ${Y.label} failed (exit ${Q.code}): ${W}`)}let J=Q.stdout.trim().split(`
3333
- `).pop()?.trim();if(!J)throw Error(`docker run ${Y.label} returned no container id`);return{id:J}}var Hk1="/app";var W_0=()=>{};import{spawn as l17}from"child_process";import{createHash as m17}from"crypto";import{readFile as $_0,readdir as d17}from"fs/promises";import{resolve as ws}from"path";import{fileURLToPath as qp4}from"url";function Fk1(X={}){let Y=X.image??F31;if(Y!==F31)return Promise.resolve();if(B31)return B31;let G=X.exec??U31;return B31=(async()=>{let J=await i17(),W=await p17(Y,G);if(W===J)return;X.onLog?.(W===null?`building ${Y}\u2026`:`${Y} stale (have ${W}, want ${J}); rebuilding\u2026`),await n17(Y,J,X.onLog),X.onLog?.(`${Y} ready`)})().catch((J)=>{throw B31=null,J}),B31}async function i17(){let X;try{X=await $_0(Ep4)}catch(Q){if(Q.code==="ENOENT")throw Error(`sandbox daemon bundle missing at ${Ep4}. Run \`bun run --cwd=packages/sandbox build\` first.`);throw Q}let Y=await $_0(Ip4),G=m17("sha256").update(X).update(Y);return await jp4(G,c17),G.digest("hex").slice(0,16)}async function jp4(X,Y){let G;try{G=await d17(Y,{withFileTypes:!0})}catch(Q){if(Q.code==="ENOENT")return;throw Q}G.sort((Q,J)=>Q.name.localeCompare(J.name));for(let Q of G){let J=ws(Y,Q.name);if(Q.isDirectory())X.update(`d:${Q.name}/`),await jp4(X,J);else if(Q.isFile())X.update(`f:${Q.name}:`),X.update(await $_0(J))}}async function p17(X,Y){let G=await Y(["image","inspect",X,"--format",`{{index .Config.Labels "${Vp4}"}}`]);if(G.code!==0)return null;let Q=G.stdout.trim();return Q&&Q!=="<no value>"?Q:null}function n17(X,Y,G){return new Promise((Q,J)=>{let W=l17("docker",["build","-t",X,"--label",`${Vp4}=${Y}`,"-f",Ip4,Tp4],{stdio:["ignore","pipe","pipe"]});Pp4(W.stdout,G),Pp4(W.stderr,G),W.on("error",(Z)=>{if(Z.code==="ENOENT"){J(Error("docker CLI not found on PATH. Install Docker Desktop (macOS) or Docker Engine (Linux)."));return}J(Z)}),W.on("close",(Z)=>{if(Z===0)Q();else J(Error(`docker build ${X} exited ${Z??"(unknown)"}`))})})}function Pp4(X,Y){if(!X)return;let G="";X.on("data",(Q)=>{G+=Q.toString();let J=G.split(/\r?\n/);G=J.pop()??"";for(let W of J){let Z=W.trim();if(Z)Y?.(Z)}}),X.on("end",()=>{let Q=G.trim();if(Q)Y?.(Q)})}var Ap4,Tp4,Ep4,Ip4,c17,Vp4="mesh.daemon.hash",B31=null;var K_0=D(()=>{W_0();Ap4=ws(qp4(import.meta.url),"../../image"),Tp4=ws(qp4(import.meta.url),"../.."),Ep4=ws(Tp4,"daemon/dist/daemon.js"),Ip4=ws(Ap4,"Dockerfile"),c17=ws(Ap4,"skills")});class OT{map=new Map;async run(X,Y){let G=this.map.get(X);if(G)return G;let Q=Y();this.map.set(X,Q);try{return await Q}finally{this.map.delete(X)}}}function JS(X,Y,G,Q){if(!X)return Q(null);if(!X.withLock)return Q(X);return X.withLock(Y,G,Q)}function Ls(X){return`${X.userId}:${X.projectRef}`}import{createHash as a17}from"crypto";function Uk1(X,Y=16){return a17("sha256").update(Ls(X)).digest("hex").slice(0,Y)}function HK(X,Y,G={}){let Q=G.hashLen??r17,J=Uk1(X,Q),W=o17(Y);return W?`${W}-${J}`:J}function o17(X){if(!X)return"";return(X.split("/").pop()??"").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,t17).replace(/-+$/g,"")}var t17=24,r17=5;var Mp4=()=>{};function cz(X,Y){let G=X.replace(/\/+$/,"");if(G.includes("{handle}"))return`${G.replace("{handle}",Y)}/`;try{let Q=new URL(G);return Q.hostname=`${Y}.${Q.hostname}`,`${Q.toString()}/`}catch{return`${G}/${Y}/`}}var Es=D(()=>{Mp4()});import{randomBytes as s17,randomUUID as e17}from"crypto";function Q07(X){let Y=Date.now();return(G,Q={})=>{let J=Object.entries(Q).map(([W,Z])=>`${W}=${typeof Z==="string"?Z:JSON.stringify(Z)}`).join(" ");console.log(`[${X}] +${Date.now()-Y}ms ${G}${J?` ${J}`:""}`)}}class GB{kind=wL;records=new Map;inflight=new OT;defaultImage;exec_;labelPrefix;stateStore;previewUrlPattern;constructor(X={}){this.defaultImage=X.image??process.env.STUDIO_SANDBOX_IMAGE??F31,this.exec_=X.exec??U31,this.labelPrefix=X.labelPrefix??X07,this.stateStore=X.stateStore??null,this.previewUrlPattern=X.previewUrlPattern??null}async ensure(X,Y={}){let G=Uk1(X,16);return this.inflight.run(G,()=>JS(this.stateStore,X,wL,(Q)=>this.ensureLocked(X,G,Y,Q)))}async exec(X,Y){let G=await this.requireRecord(X);return Os(G.daemonUrl,G.token,Y)}async delete(X){let Y=await this.getRecord(X);if(this.records.delete(X),await this.stopContainer(X),this.stateStore)if(Y)await this.stateStore.delete(Y.id,wL);else await this.stateStore.deleteByHandle(wL,X)}async alive(X){let Y=await this.exec_(["inspect","--format","{{.State.Running}}",X]);return Y.code===0&&Y.stdout.trim()==="true"}async getPreviewUrl(X){let Y=await this.getRecord(X);return Y?this.composePreviewUrl(Y):null}async proxyDaemonRequest(X,Y,G){let Q=await this.getRecord(X);if(!Q)return new Response(JSON.stringify({error:"sandbox not found"}),{status:404,headers:{"content-type":"application/json"}});return Ds(Q.daemonUrl,Q.token,Y,G)}async*watchClaimLifecycle(X,Y){yield{kind:"ready"}}async sweepOrphans(){let X=await this.exec_(["ps","-a","--format","{{.Names}}","--filter",`label=${this.labelPrefix}=1`]);if(X.code!==0)return 0;let Y=X.stdout.trim().split(`
3333
+ `).pop()?.trim();if(!J)throw Error(`docker run ${Y.label} returned no container id`);return{id:J}}var Hk1="/app";var W_0=()=>{};import{spawn as l17}from"child_process";import{createHash as m17}from"crypto";import{readFile as $_0,readdir as d17}from"fs/promises";import{resolve as ws}from"path";import{fileURLToPath as qp4}from"url";function Fk1(X={}){let Y=X.image??F31;if(Y!==F31)return Promise.resolve();if(B31)return B31;let G=X.exec??U31;return B31=(async()=>{let J=await i17(),W=await p17(Y,G);if(W===J)return;X.onLog?.(W===null?`building ${Y}\u2026`:`${Y} stale (have ${W}, want ${J}); rebuilding\u2026`),await n17(Y,J,X.onLog),X.onLog?.(`${Y} ready`)})().catch((J)=>{throw B31=null,J}),B31}async function i17(){let X;try{X=await $_0(Ep4)}catch(Q){if(Q.code==="ENOENT")throw Error(`sandbox daemon bundle missing at ${Ep4}. Run \`bun run --cwd=packages/sandbox build\` first.`);throw Q}let Y=await $_0(Ip4),G=m17("sha256").update(X).update(Y);return await jp4(G,c17),G.digest("hex").slice(0,16)}async function jp4(X,Y){let G;try{G=await d17(Y,{withFileTypes:!0})}catch(Q){if(Q.code==="ENOENT")return;throw Q}G.sort((Q,J)=>Q.name.localeCompare(J.name));for(let Q of G){let J=ws(Y,Q.name);if(Q.isDirectory())X.update(`d:${Q.name}/`),await jp4(X,J);else if(Q.isFile())X.update(`f:${Q.name}:`),X.update(await $_0(J))}}async function p17(X,Y){let G=await Y(["image","inspect",X,"--format",`{{index .Config.Labels "${Vp4}"}}`]);if(G.code!==0)return null;let Q=G.stdout.trim();return Q&&Q!=="<no value>"?Q:null}function n17(X,Y,G){return new Promise((Q,J)=>{let W=l17("docker",["build","-t",X,"--label",`${Vp4}=${Y}`,"-f",Ip4,Tp4],{stdio:["ignore","pipe","pipe"]});Pp4(W.stdout,G),Pp4(W.stderr,G),W.on("error",(Z)=>{if(Z.code==="ENOENT"){J(Error("docker CLI not found on PATH. Install Docker Desktop (macOS) or Docker Engine (Linux)."));return}J(Z)}),W.on("close",(Z)=>{if(Z===0)Q();else J(Error(`docker build ${X} exited ${Z??"(unknown)"}`))})})}function Pp4(X,Y){if(!X)return;let G="";X.on("data",(Q)=>{G+=Q.toString();let J=G.split(/\r?\n/);G=J.pop()??"";for(let W of J){let Z=W.trim();if(Z)Y?.(Z)}}),X.on("end",()=>{let Q=G.trim();if(Q)Y?.(Q)})}var Ap4,Tp4,Ep4,Ip4,c17,Vp4="mesh.daemon.hash",B31=null;var K_0=D(()=>{W_0();Ap4=ws(qp4(import.meta.url),"../../image"),Tp4=ws(qp4(import.meta.url),"../.."),Ep4=ws(Tp4,"daemon/dist/daemon.js"),Ip4=ws(Ap4,"Dockerfile"),c17=ws(Ap4,"skills")});class OT{map=new Map;async run(X,Y){let G=this.map.get(X);if(G)return G;let Q=Y();this.map.set(X,Q);try{return await Q}finally{this.map.delete(X)}}}function JS(X,Y,G,Q){if(!X)return Q(null);if(!X.withLock)return Q(X);return X.withLock(Y,G,Q)}function Ls(X){return`${X.userId}:${X.projectRef}`}import{createHash as a17}from"crypto";function Uk1(X,Y=16){return a17("sha256").update(Ls(X)).digest("hex").slice(0,Y)}function HK(X,Y,G={}){let Q=G.hashLen??r17,J=Uk1(X,Q),W=o17(Y);return W?`${W}-${J}`:`s-${J}`}function o17(X){if(!X)return"";return(X.split("/").pop()??"").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,t17).replace(/-+$/g,"")}var t17=24,r17=5;var Mp4=()=>{};function cz(X,Y){let G=X.replace(/\/+$/,"");if(G.includes("{handle}"))return`${G.replace("{handle}",Y)}/`;try{let Q=new URL(G);return Q.hostname=`${Y}.${Q.hostname}`,`${Q.toString()}/`}catch{return`${G}/${Y}/`}}var Es=D(()=>{Mp4()});import{randomBytes as s17,randomUUID as e17}from"crypto";function Q07(X){let Y=Date.now();return(G,Q={})=>{let J=Object.entries(Q).map(([W,Z])=>`${W}=${typeof Z==="string"?Z:JSON.stringify(Z)}`).join(" ");console.log(`[${X}] +${Date.now()-Y}ms ${G}${J?` ${J}`:""}`)}}class GB{kind=wL;records=new Map;inflight=new OT;defaultImage;exec_;labelPrefix;stateStore;previewUrlPattern;constructor(X={}){this.defaultImage=X.image??process.env.STUDIO_SANDBOX_IMAGE??F31,this.exec_=X.exec??U31,this.labelPrefix=X.labelPrefix??X07,this.stateStore=X.stateStore??null,this.previewUrlPattern=X.previewUrlPattern??null}async ensure(X,Y={}){let G=Uk1(X,16);return this.inflight.run(G,()=>JS(this.stateStore,X,wL,(Q)=>this.ensureLocked(X,G,Y,Q)))}async exec(X,Y){let G=await this.requireRecord(X);return Os(G.daemonUrl,G.token,Y)}async delete(X){let Y=await this.getRecord(X);if(this.records.delete(X),await this.stopContainer(X),this.stateStore)if(Y)await this.stateStore.delete(Y.id,wL);else await this.stateStore.deleteByHandle(wL,X)}async alive(X){let Y=await this.exec_(["inspect","--format","{{.State.Running}}",X]);return Y.code===0&&Y.stdout.trim()==="true"}async getPreviewUrl(X){let Y=await this.getRecord(X);return Y?this.composePreviewUrl(Y):null}async proxyDaemonRequest(X,Y,G){let Q=await this.getRecord(X);if(!Q)return new Response(JSON.stringify({error:"sandbox not found"}),{status:404,headers:{"content-type":"application/json"}});return Ds(Q.daemonUrl,Q.token,Y,G)}async*watchClaimLifecycle(X,Y){yield{kind:"ready"}}async sweepOrphans(){let X=await this.exec_(["ps","-a","--format","{{.Names}}","--filter",`label=${this.labelPrefix}=1`]);if(X.code!==0)return 0;let Y=X.stdout.trim().split(`
3334
3334
  `).filter(Boolean);return await Promise.all(Y.map(async(G)=>{if(await this.stopContainer(G).catch((Q)=>console.warn(`[${N31}] sweep: stopContainer(${G}) failed:`,Q instanceof Error?Q.message:String(Q))),this.stateStore)await this.stateStore.deleteByHandle(wL,G).catch((Q)=>console.warn(`[${N31}] sweep: state-store deleteByHandle(${G}) failed:`,Q instanceof Error?Q.message:String(Q)))})),Y.length}async resolveDevPort(X){return(await this.getRecord(X))?.devPort??null}async resolveDaemonPort(X){return(await this.getRecord(X))?.daemonPort??null}async ensureLocked(X,Y,G,Q){let J=Q07(N31);if(J("ensure start",{labelId:Y}),Q){let $=await Q.get(X,wL);if($){let K=await this.rehydrate(X,$);if(K)return J("ensure ok via=resume",{handle:K.handle}),this.finish(K,Q,!1);await Q.delete(X,wL),J("resume rejected, falling through")}}let W=await this.adoptByLabel(X,Y,G);if(W)return J("ensure ok via=adopt",{handle:W.handle}),this.finish(W,Q,!0);J("provision start");let Z=await this.provision(X,Y,G,J);return J("ensure ok via=provision",{handle:Z.handle}),this.finish(Z,Q,!0)}async finish(X,Y,G){if(this.records.set(X.handle,X),G)await this.persist(Y,X);return this.toSandbox(X)}async provision(X,Y,G,Q){let J=s17(24).toString("hex"),W=e17(),Z=Hk1,$=G.image??this.defaultImage,K=G.workload?.devPort??H_0,H=G.workload?.runtime??"node",U=G.workload?.packageManager??null,B=G.repo??null,N=B?B.displayName??J07(B.cloneUrl):null,z={DAEMON_TOKEN:J,DAEMON_BOOT_ID:W,APP_ROOT:Z,PROXY_PORT:String(zs),DEV_PORT:String(K),RUNTIME:H,...B?{CLONE_URL:B.cloneUrl,REPO_NAME:N??"",BRANCH:B.branch??"",GIT_USER_NAME:B.userName,GIT_USER_EMAIL:B.userEmail}:{},...U?{PACKAGE_MANAGER:U}:{},...G.env??{}};Q("ensureSandboxImage start"),await Fk1({image:$,exec:this.exec_,onLog:(j)=>Q("image build",{line:j})}),Q("ensureSandboxImage ok");let O=HK(X,G.repo?.branch),w=()=>Lp4($,{label:"sandbox",exec:this.exec_,args:["--name",O,"--rm","--init","--read-only","--tmpfs=/tmp:rw,nosuid,nodev,size=256m","-v","/app","-v","/home/sandbox","--cap-drop=ALL","--security-opt=no-new-privileges","--pids-limit=512","--memory=2g","--memory-swap=2g","--cpus=1","--label",`${this.labelPrefix}=1`,"--label",`${Rp4}=${Y}`,"-p",`127.0.0.1:0:${zs}`,"-p",`127.0.0.1:0:${K}`,...Object.entries(z).flatMap(([j,M])=>["-e",`${j}=${M}`])]});Q("docker run start",{handle:O,image:$});try{await w()}catch(j){if((j instanceof Error?j.message:String(j)).includes("is already in use"))Q("docker run name conflict, retrying after rm",{handle:O}),await this.exec_(["rm","-f",O]).catch(()=>{return}),await w();else throw j}Q("docker run ok",{handle:O});let E=await this.readPort(O,zs),P=`http://127.0.0.1:${E}`,q=await this.readPort(O,K);Q("ports read",{daemonPort:E,devPort:q}),Q("waitForDaemonReady start",{daemonUrl:P});try{await $k1(P)}catch(j){throw Q("waitForDaemonReady failed",{err:j instanceof Error?j.message:String(j)}),await this.stopContainer(O).catch((M)=>console.warn(`[${N31}] cleanup stop after waitForDaemonReady failure (${O}) itself failed:`,M instanceof Error?M.message:String(M))),j}return Q("daemon ready",{handle:O}),{id:X,handle:O,token:J,workdir:Z,daemonUrl:P,daemonPort:E,devPort:q,devContainerPort:K,workload:G.workload??null,daemonBootId:W}}async rehydrate(X,Y){let G=Y.state;if(!G.token||!G.daemonUrl)return null;let Q=Y.handle,J=G.devContainerPort??H_0,W,Z;try{W=await this.readPort(Q,zs),Z=await this.readPort(Q,J)}catch{return null}let $=`http://127.0.0.1:${W}`,K=await zT($);if(!K)return null;if(G.daemonBootId&&G.daemonBootId!==K.bootId)console.warn(`[${N31}] daemon restart detected (handle=${Q}): stored bootId=${G.daemonBootId} live bootId=${K.bootId}`);return{id:X,handle:Q,token:G.token,workdir:G.workdir??Hk1,daemonUrl:$,daemonPort:W,devPort:Z,devContainerPort:J,daemonBootId:K.bootId,workload:G.workload??null}}async adoptByLabel(X,Y,G){let Q=await this.findExisting(Y);if(!Q)return null;let J=this.records.get(Q);if(J)return J;let W=await this.reconstructFromContainer(X,Q,G);if(W)return W;return await this.stopContainer(Q),null}async reconstructFromContainer(X,Y,G){let Q=await this.exec_(["inspect","--format","{{range .Config.Env}}{{println .}}{{end}}",Y]);if(Q.code!==0)return null;let J=null,W=Hk1;for(let B of Q.stdout.split(`
3335
3335
  `))if(B.startsWith("DAEMON_TOKEN="))J=B.slice(13);else if(B.startsWith("APP_ROOT="))W=B.slice(9);if(!J)return null;let Z=await this.readPort(Y,zs),$=`http://127.0.0.1:${Z}`,K=await zT($);if(!K)return null;let H=G.workload?.devPort??H_0,U=await this.readPort(Y,H);return{id:X,handle:Y,token:J,workdir:W,daemonUrl:$,daemonPort:Z,devPort:U,devContainerPort:H,daemonBootId:K.bootId,workload:G.workload??null}}async getRecord(X){let Y=this.records.get(X);if(Y)return Y;if(!this.stateStore)return null;let G=await this.stateStore.getByHandle(wL,X);if(!G)return null;let Q=await this.rehydrate(G.id,G);if(Q)this.records.set(X,Q);return Q}async requireRecord(X){let Y=await this.getRecord(X);if(!Y)throw Error(`unknown sandbox handle ${X}`);return Y}composePreviewUrl(X){if(this.previewUrlPattern)return cz(this.previewUrlPattern,X.handle);let Y=process.env.SANDBOX_ROOT_URL;if(Y)return cz(Y,X.handle);let G=Number(process.env.SANDBOX_INGRESS_PORT??7070);return`http://${X.handle}.localhost:${G}/`}toSandbox(X){return{handle:X.handle,workdir:X.workdir,previewUrl:this.composePreviewUrl(X)}}async persist(X,Y){if(!X)return;let G={token:Y.token,workdir:Y.workdir,daemonUrl:Y.daemonUrl,daemonPort:Y.daemonPort,devPort:Y.devPort,devContainerPort:Y.devContainerPort,workload:Y.workload,daemonBootId:Y.daemonBootId};await X.put(Y.id,wL,{handle:Y.handle,state:G})}async stopContainer(X){await this.exec_(["stop","--time","2",X])}async findExisting(X){let Y=await this.exec_(["ps","--no-trunc","--format","{{.Names}}","--filter",`label=${Rp4}=${X}`]);if(Y.code!==0)return null;return Y.stdout.trim().split(`
3336
3336
  `).filter(Boolean)[0]??null}async readPort(X,Y){for(let G=0;G<Y07;G++){let Q=await this.exec_(["port",X,`${Y}/tcp`]);if(Q.code===0)for(let J of Q.stdout.split(`
@@ -5140,7 +5140,7 @@ async function runBootSetup() {
5140
5140
  if (process.env.DAEMON_NO_AUTOSTART !== "1") {
5141
5141
  runBootSetup();
5142
5142
  }
5143
- `;var z_0=()=>{};var vp4={};j0(vp4,{DAEMON_BUNDLE:()=>B07});var B07;var _p4=D(()=>{z_0();B07=Nk1});import{createHash as N07,randomBytes as z07,randomUUID as O07}from"crypto";import{existsSync as bp4}from"fs";import{mkdir as yp4,rename as D07,rm as w07,writeFile as L07}from"fs/promises";import{createServer as E07}from"net";import{dirname as P07,join as O_0,resolve as q07}from"path";import{fileURLToPath as A07}from"url";class zk1{kind=ZS;records=new Map;homeDir;stateStore;previewUrlPattern;spawnFn;probeFn;killFn;isAliveFn;constructor(X){if(!X.homeDir)throw Error("HostSandboxRunner requires a homeDir (DATA_DIR)");this.homeDir=X.homeDir,this.stateStore=X.stateStore??null,this.previewUrlPattern=X.previewUrlPattern??null,this.spawnFn=X._spawn??_07(this.homeDir),this.probeFn=X._probe??zT,this.killFn=X._kill??((Y,G)=>process.kill(Y,G)),this.isAliveFn=X._isAlive??j07}async ensure(X,Y={}){let G=HK(X,Y.repo?.branch),Q=this.records.get(G);if(Q&&this.isAliveFn(Q.pid))return this.toSandbox(Q);if(this.stateStore){let z=await this.stateStore.getByHandle(ZS,G);if(z){let O=await this.rehydrate(z.id,z);if(O)return this.records.set(G,O),this.toSandbox(O);await this.stateStore.deleteByHandle(ZS,G).catch(()=>{return})}}let J=this.workdirFor(G);await yp4(P07(J),{recursive:!0});let W=z07(24).toString("hex"),Z=O07(),$=await fp4(),K=`http://127.0.0.1:${$}`,H=await fp4(),U=M07({token:W,bootId:Z,workdir:J,daemonPort:$,devPort:H,runtime:Y.workload?.runtime??"node",packageManager:Y.workload?.packageManager??null,repo:Y.repo??null,extraEnv:Y.env}),B=await this.spawnFn({workdir:J,env:U,daemonPort:$});try{await this.waitForDaemon(K)}catch(z){try{B.kill("SIGKILL")}catch{}throw z}let N={id:X,handle:G,pid:B.pid,daemonPort:$,daemonUrl:K,workdir:J,token:W,bootId:Z};if(this.records.set(G,N),this.stateStore){let z={pid:N.pid,daemonPort:N.daemonPort,daemonUrl:N.daemonUrl,workdir:N.workdir,token:N.token,bootId:N.bootId};await this.stateStore.put(X,ZS,{handle:G,state:z})}return this.toSandbox(N)}async waitForDaemon(X){let Y=Date.now()+T07;while(Date.now()<Y){if(await this.probeFn(X))return;await new Promise((Q)=>setTimeout(Q,I07))}throw Error(`daemon at ${X} never reported healthy`)}async exec(X,Y){let G=await this.requireRecord(X);return Os(G.daemonUrl,G.token,Y)}async delete(X){let Y=await this.getRecord(X);if(this.records.delete(X),Y){if(this.isAliveFn(Y.pid)){try{this.killFn(Y.pid,"SIGTERM")}catch{}let G=Date.now()+V07;while(Date.now()<G){if(!this.isAliveFn(Y.pid))break;await new Promise((Q)=>setTimeout(Q,50))}if(this.isAliveFn(Y.pid))try{this.killFn(Y.pid,"SIGKILL")}catch{}}await w07(Y.workdir,{recursive:!0,force:!0}).catch((G)=>console.warn(`[HostSandboxRunner] rm workdir(${X}) failed:`,G instanceof Error?G.message:String(G)))}if(this.stateStore)if(Y)await this.stateStore.delete(Y.id,ZS);else await this.stateStore.deleteByHandle(ZS,X)}async alive(X){let Y=await this.getRecord(X);if(!Y)return!1;return this.isAliveFn(Y.pid)}async*watchClaimLifecycle(X,Y){yield{kind:"ready"}}async getPreviewUrl(X){let Y=await this.getRecord(X);return Y?this.composePreviewUrl(Y):null}async proxyDaemonRequest(X,Y,G){let Q=await this.getRecord(X);if(!Q)return new Response(JSON.stringify({error:"sandbox not found"}),{status:404,headers:{"content-type":"application/json"}});return Ds(Q.daemonUrl,Q.token,Y,G)}async resolveDaemonPort(X){return(await this.getRecord(X))?.daemonPort??null}async localWorkdir(X){return(await this.getRecord(X))?.workdir??null}workdirFor(X){return O_0(this.homeDir,"sandboxes",X)}composePreviewUrl(X){if(this.previewUrlPattern)return cz(this.previewUrlPattern,X.handle);let Y=process.env.SANDBOX_ROOT_URL;if(Y)return cz(Y,X.handle);let G=Number(process.env.SANDBOX_INGRESS_PORT??7070);return`http://${X.handle}.localhost:${G}/`}toSandbox(X){return{handle:X.handle,workdir:X.workdir,previewUrl:this.composePreviewUrl(X)}}async getRecord(X){let Y=this.records.get(X);if(Y)return Y;if(!this.stateStore)return null;let G=await this.stateStore.getByHandle(ZS,X);if(!G)return null;let Q=await this.rehydrate(G.id,G);if(Q)this.records.set(X,Q);return Q}async requireRecord(X){let Y=await this.getRecord(X);if(!Y)throw Error(`unknown sandbox handle ${X}`);return Y}async rehydrate(X,Y){let G=Y.state;if(typeof G.pid!=="number"||typeof G.daemonPort!=="number"||typeof G.daemonUrl!=="string"||typeof G.workdir!=="string"||typeof G.token!=="string"||typeof G.bootId!=="string")return null;if(!this.isAliveFn(G.pid))return null;let Q=await this.probeFn(G.daemonUrl);if(!Q)return null;return{id:X,handle:Y.handle,pid:G.pid,daemonPort:G.daemonPort,daemonUrl:G.daemonUrl,workdir:G.workdir,token:G.token,bootId:Q.bootId}}}function j07(X){if(X<=0)return!1;try{return process.kill(X,0),!0}catch{return!1}}function fp4(){return new Promise((X,Y)=>{let G=E07();G.unref(),G.on("error",Y),G.listen(0,"127.0.0.1",()=>{let Q=G.address();if(Q&&typeof Q==="object"){let{port:J}=Q;G.close(()=>X(J))}else G.close(()=>Y(Error("could not allocate port")))})})}function M07(X){let Y=X.repo?X.repo.displayName??R07(X.repo.cloneUrl):null;return{DAEMON_TOKEN:X.token,DAEMON_BOOT_ID:X.bootId,APP_ROOT:X.workdir,PROXY_PORT:String(X.daemonPort),DEV_PORT:String(X.devPort),RUNTIME:X.runtime,...X.repo?{CLONE_URL:X.repo.cloneUrl,REPO_NAME:Y??"",BRANCH:X.repo.branch??"",GIT_USER_NAME:X.repo.userName,GIT_USER_EMAIL:X.repo.userEmail}:{},...X.packageManager?{PACKAGE_MANAGER:X.packageManager}:{},...X.extraEnv??{}}}function R07(X){try{let Y=new URL(X);return Y.pathname.replace(/^\/+/,"").replace(/\.git$/,"")||Y.hostname}catch{return X}}function S07(){return q07(A07(new URL("../../../daemon/entry.ts",import.meta.url)))}function k07(){let X=Bun.resolveSync("node-pty",import.meta.dir),Y="/node_modules/",G=X.lastIndexOf("/node_modules/");if(G<0)throw Error(`[HostSandboxRunner] could not derive node_modules path from node-pty resolution: ${X}`);return X.slice(0,G+14-1)}async function C07(X){let{DAEMON_BUNDLE:Y}=await Promise.resolve().then(() => (_p4(),vp4)),G=N07("sha256").update(Y).digest("hex").slice(0,16),Q=O_0(X,".deco","cache"),J=O_0(Q,`sandbox-daemon-${G}.js`);if(bp4(J))return J;await yp4(Q,{recursive:!0});let W=`${J}.${process.pid}.tmp`;return await L07(W,Y),await D07(W,J),J}async function v07(X){let Y=S07();if(bp4(Y))return Y;return C07(X)}function _07(X){return async(Y)=>{let G=await v07(X),Q=k07(),J=process.env.NODE_PATH,W=J?`${Q}:${J}`:Q,Z=Bun.spawn({cmd:["bun","run",G],env:{...process.env,NODE_PATH:W,...Y.env},stdout:"inherit",stderr:"inherit",stdin:"ignore"});return{pid:Z.pid,kill:($)=>{return Z.kill($),!0}}}}var ZS="host",T07=30000,I07=250,V07=2000;var xp4=D(()=>{Kk1();Es()});var hp4=D(()=>{xp4()});function Ps(X){if("threadId"in X){if(!X.threadId)throw Error("composeSandboxRef: threadId required");return`thread:${X.threadId}`}if(!X.orgId||!X.virtualMcpId||!X.branch)throw Error("composeSandboxRef: orgId, virtualMcpId and branch are all required for agent refs");return`agent:${X.orgId}:${X.virtualMcpId}:${X.branch}`}var WS={};j0(WS,{sweepDockerOrphansOnShutdown:()=>N_0,sweepDockerOrphansOnBoot:()=>B_0,startLocalSandboxIngress:()=>U_0,sandboxIdKey:()=>Ls,resolveRunnerKindFromEnv:()=>iz,ensureSandboxImage:()=>Fk1,createDockerRunner:()=>f07,computeHandle:()=>HK,composeSandboxRef:()=>Ps,HostSandboxRunner:()=>zk1,DockerSandboxRunner:()=>GB});function f07(X={}){return new GB({...X.docker,stateStore:X.stateStore})}function iz(){let X=process.env.STUDIO_SANDBOX_RUNNER,Y=X&&X.length>0?X:"host";if(!b07.has(Y))throw Error(`Unknown STUDIO_SANDBOX_RUNNER="${X}" \u2014 expected "host", "docker", "freestyle", or "agent-sandbox".`);if(Y==="freestyle"&&!process.env.FREESTYLE_API_KEY)throw Error('STUDIO_SANDBOX_RUNNER="freestyle" requires FREESTYLE_API_KEY to be set.');return Y}var b07;var pz=D(()=>{z31();z31();hp4();Es();K_0();z31();z31();b07=new Set(["host","docker","freestyle","agent-sandbox"])});var O31;var D_0=D(()=>{O31={npm:{install:"npm install",run:(X)=>`npm run ${X}`,runtime:"node"},pnpm:{install:"pnpm install",run:(X)=>`pnpm run ${X}`,runtime:"node"},yarn:{install:"yarn install",run:(X)=>`yarn run ${X}`,runtime:"node"},bun:{install:"bun install",run:(X)=>`bun run ${X}`,runtime:"bun"},deno:{install:"deno install",run:(X)=>`deno task ${X}`,runtime:"deno"}}});function DT(X){if(!X||typeof X!=="object")return{};let Y=X.vmMap;if(!Y||typeof Y!=="object")return{};return Y}function qs(X,Y,G){return X[Y]?.[G]??null}async function gp4(X,Y,G,Q,J,W){let Z=await X.findById(Y);if(!Z)return;let $=Z.metadata??{},K=DT($),H={...K,[Q]:{...K[Q]??{},[J]:W}};await X.update(Y,G,{metadata:{...$,vmMap:H}})}async function up4(X,Y,G,Q,J){let W=await X.findById(Y);if(!W)return;let Z=W.metadata??{},$=DT(Z);if(!$[Q]?.[J])return;let K={...$[Q]};delete K[J];let H={...$};if(Object.keys(K).length===0)delete H[Q];else H[Q]=K;await X.update(Y,G,{metadata:{...Z,vmMap:H}})}async function Ok1(X,Y){B0(Y);let G=s1(Y);await Y.access.check();let Q=L4(Y);if(!Q)throw Error("User ID required");let J=await Y.storage.virtualMcps.findById(X.virtualMcpId);if(!J||J.organization_id!==G.id)throw Error("Virtual MCP not found");let W=J.metadata??{},Z=DT(W),$=qs(Z,Q,X.branch);return{virtualMcp:J,metadata:W,userId:Q,entry:$,organization:G}}function lp4(X){let Y=X.runtime??null,Q=Y?.selected??null;if(!Q||!(Q in O31))return{packageManager:null,runtime:null,port:Y?.port??"3000",runtimeBinPath:null};let J=O31[Q].runtime,W=J==="deno"?"/opt/deno/bin":J==="bun"?"/opt/bun/bin":null;return{packageManager:Q,runtime:J,port:Y?.port??"3000",runtimeBinPath:W}}var w_0=D(()=>{D_0()});async function mp4(X,Y,G,Q,J){let W=new I3(Q,J),Z=await W.get(X);if(!Z)throw Error("No GitHub token found. Ensure the mcp-github connection is authenticated.");let $=Z.accessToken;if(WQ1(Z)&&W.isExpired(Z,zM1)){let B=await $Q1(Z,W);if(!B)throw Error(eM);$=B}let K=`https://x-access-token:${$}@github.com/${Y}/${G}.git`,H="Deco Studio",U="studio@deco.cx";try{let B=await fetch("https://api.github.com/user",{headers:{Authorization:`token ${$}`,Accept:"application/vnd.github+json"}});if(B.ok){let N=await B.json();H=N.name||N.login,U=N.email||`${N.login}@users.noreply.github.com`}}catch{}return{cloneUrl:K,gitUserName:H,gitUserEmail:U}}var dp4=D(()=>{hR();OM1()});async function pp4(X,Y,G,Q,J){let W=await new I3(Q,J).get(X);if(!W)return null;let Z=new Map,$=new Set(cp4.map((B)=>B.path));for(let B of Object.values(ip4))for(let N of B??[])$.add(N);await Promise.all(Array.from($).map(async(B)=>{Z.set(B,await x07(Y,G,B,W.accessToken))}));let K=cp4.find(({path:B})=>Z.get(B)!==null);if(!K)return null;let H=ip4[K.pm]??[],U=null;for(let B of H)if(U=h07(Z.get(B)??null),U)break;return{packageManager:K.pm,devPort:U}}async function x07(X,Y,G,Q){let J=`https://api.github.com/repos/${X}/${Y}/contents/${encodeURIComponent(G)}`;try{let W=await fetch(J,{headers:{Authorization:`token ${Q}`,Accept:"application/vnd.github+json","User-Agent":"mesh-runtime-detect"},signal:AbortSignal.timeout(5000)});if(!W.ok)return null;let Z=await W.json();if(!Z.content||Z.encoding!=="base64")return null;return Buffer.from(Z.content,"base64").toString("utf8")}catch{return null}}function h07(X){if(!X)return null;try{let Y=JSON.parse(X),G=Y.tasks??Y.scripts??{};return(G.dev??G.start??"").match(y07)?.[1]??null}catch{return null}}var cp4,ip4,y07;var np4=D(()=>{hR();cp4=[{path:"deno.json",pm:"deno"},{path:"deno.jsonc",pm:"deno"},{path:"bun.lock",pm:"bun"},{path:"bunfig.toml",pm:"bun"},{path:"pnpm-lock.yaml",pm:"pnpm"},{path:"yarn.lock",pm:"yarn"},{path:"package-lock.json",pm:"npm"},{path:"package.json",pm:"npm"}],ip4={deno:["deno.json","deno.jsonc"],bun:["package.json"],pnpm:["package.json"],yarn:["package.json"],npm:["package.json"]},y07=/(?:--port|PORT=|:)(\d{4,5})/});import{createHash as g07}from"crypto";function u07(X,Y){return g07("sha256").update(X.userId).update("\x00").update(X.projectRef).update("\x00").update(Y).digest().readBigInt64BE(0)}async function tp4(X,Y,G){let Q=await X.selectFrom("sandbox_runner_state").select(["handle","state","updated_at"]).where("user_id","=",Y.userId).where("project_ref","=",Y.projectRef).where("runner_kind","=",G).executeTakeFirst();if(!Q)return null;return{handle:Q.handle,state:Q.state,updatedAt:Q.updated_at}}async function rp4(X,Y,G){let Q=await X.selectFrom("sandbox_runner_state").select(["user_id","project_ref","handle","state","updated_at"]).where("runner_kind","=",Y).where("handle","=",G).executeTakeFirst();if(!Q)return null;return{id:{userId:Q.user_id,projectRef:Q.project_ref},handle:Q.handle,state:Q.state,updatedAt:Q.updated_at}}async function op4(X,Y,G,Q){let J=JSON.stringify(Q.state),W=new Date().toISOString();await X.insertInto("sandbox_runner_state").values({user_id:Y.userId,project_ref:Y.projectRef,runner_kind:G,handle:Q.handle,state:J,updated_at:W}).onConflict((Z)=>Z.columns(["user_id","project_ref","runner_kind"]).doUpdateSet({handle:Q.handle,state:J,updated_at:W})).execute()}async function sp4(X,Y,G){await X.deleteFrom("sandbox_runner_state").where("user_id","=",Y.userId).where("project_ref","=",Y.projectRef).where("runner_kind","=",G).execute()}async function ep4(X,Y,G){await X.deleteFrom("sandbox_runner_state").where("runner_kind","=",Y).where("handle","=",G).execute()}function l07(X){return{get:(Y,G)=>tp4(X,Y,G),getByHandle:(Y,G)=>rp4(X,Y,G),put:(Y,G,Q)=>op4(X,Y,G,Q),delete:(Y,G)=>sp4(X,Y,G),deleteByHandle:(Y,G)=>ep4(X,Y,G)}}class D31{db;constructor(X){this.db=X}get(X,Y){return tp4(this.db,X,Y)}getByHandle(X,Y){return rp4(this.db,X,Y)}put(X,Y,G){return op4(this.db,X,Y,G)}delete(X,Y){return sp4(this.db,X,Y)}deleteByHandle(X,Y){return ep4(this.db,X,Y)}async withLock(X,Y,G){let Q=u07(X,Y);return this.db.transaction().execute(async(J)=>{try{await z1`set local statement_timeout = ${z1.lit(ap4)}`.execute(J),await z1`select pg_advisory_xact_lock(${Q}::bigint)`.execute(J)}catch(W){if(m07(W))throw Error(`sandbox advisory lock busy >${ap4}ms for user=${X.userId} projectRef=${X.projectRef} kind=${Y} \u2014 another provisioner is slow or stuck; retry shortly`);throw W}return await z1`set local statement_timeout = 0`.execute(J),G(l07(J))})}}function m07(X){if(!(X instanceof Error))return!1;return X.code==="57014"||/statement timeout/i.test(X.message)}var ap4=90000;var L_0=D(()=>{P4()});function Zn4(X){let Y=d07[X.code];if(Y)return new Y(X);else return Error(`Unknown error code: ${X.code} - ${X.description}`)}class Rs4{baseUrl;apiKey;accessToken;fetchFn;constructor(X={}){this.baseUrl=X.baseUrl||"https://api.freestyle.sh",this.apiKey="apiKey"in X?X.apiKey:void 0,this.accessToken="accessToken"in X?X.accessToken:void 0,this.fetchFn=X.fetch||fetch}buildUrl(X,Y,G){let Q=X;if(Y)for(let[J,W]of Object.entries(Y))Q=Q.replace(`{${J}}`,encodeURIComponent(W));if(G){let J=new URLSearchParams;for(let[Z,$]of Object.entries(G))if($!==void 0&&$!==null)J.append(Z,String($));let W=J.toString();if(W)Q+=`?${W}`}return this.baseUrl+Q}getDefaultHeaders(){let X={"X-Freestyle-SDK":Yn4,"X-Freestyle-SDK-Version":Xn4,"User-Agent":`${Yn4}/${Xn4}`};if(this.apiKey)X.Authorization=`Bearer ${this.apiKey}`;else if(this.accessToken)X["X-Freestyle-Identity-Access-Token"]=this.accessToken;return X}async requestRaw(X,Y,G,Q){let J={...this.getDefaultHeaders(),...Q};if(G)J["Content-Type"]="application/json";let W=await this.fetchFn(Y,{method:X,headers:J,body:G?JSON.stringify(G):void 0});if(!W.ok){let Z=await W.text(),$;try{$=JSON.parse(Z)}catch(K){if(W.status===401)Z+=" (Your API key or access token may be invalid.)";throw Error(`HTTP error ${W.status}: ${Z}. ${K}`)}throw Zn4($)}return W}async request(X,Y,G,Q){return(await this.requestRaw(X,Y,G,Q)).json()}async fetch(X,Y){let G=this.getDefaultHeaders(),Q={...Y,headers:{...G,...Y?.headers||{}}};return this.fetchFn(X,Q)}resolveUrl(X,Y,G){return this.buildUrl(X,Y,G)}getRaw(X,Y){let G=this.buildUrl(X,Y?.params,Y?.query);return this.requestRaw("GET",G,void 0,Y?.headers)}postRaw(X,...Y){let G=Y[0],Q=this.buildUrl(X,G?.params,G?.query);return this.requestRaw("POST",Q,G?.body,G?.headers)}get(X,...Y){let G=Y[0],Q=this.buildUrl(X,G?.params,G?.query);return this.request("GET",Q,G?.body,G?.headers)}post(X,...Y){let G=Y[0],Q=this.buildUrl(X,G?.params,G?.query);return this.request("POST",Q,G?.body,G?.headers)}put(X,...Y){let G=Y[0],Q=this.buildUrl(X,G?.params,G?.query);return this.request("PUT",Q,G?.body,G?.headers)}delete(X,...Y){let G=Y[0],Q=this.buildUrl(X,G?.params,G?.query);return this.request("DELETE",Q,G?.body,G?.headers)}patch(X,...Y){let G=Y[0],Q=this.buildUrl(X,G?.params,G?.query);return this.request("PATCH",Q,G?.body,G?.headers)}}class Ss4{constructor(X){this.apiClient=X}async create({domain:X}){let Y=await this.apiClient.post("/domains/v1/verifications",{body:{domain:X}});return{verificationId:Y.id,instructions:`Navigate to your domain's DNS settings and create a TXT record with the following details:
5143
+ `;var z_0=()=>{};var vp4={};j0(vp4,{DAEMON_BUNDLE:()=>B07});var B07;var _p4=D(()=>{z_0();B07=Nk1});import{createHash as N07,randomBytes as z07,randomUUID as O07}from"crypto";import{existsSync as bp4}from"fs";import{mkdir as yp4,rename as D07,rm as w07,writeFile as L07}from"fs/promises";import{createServer as E07}from"net";import{dirname as P07,join as O_0,resolve as q07}from"path";import{fileURLToPath as A07}from"url";class zk1{kind=ZS;records=new Map;homeDir;stateStore;previewUrlPattern;spawnFn;probeFn;killFn;isAliveFn;constructor(X){if(!X.homeDir)throw Error("HostSandboxRunner requires a homeDir (DATA_DIR)");this.homeDir=X.homeDir,this.stateStore=X.stateStore??null,this.previewUrlPattern=X.previewUrlPattern??null,this.spawnFn=X._spawn??_07(this.homeDir),this.probeFn=X._probe??zT,this.killFn=X._kill??((Y,G)=>process.kill(Y,G)),this.isAliveFn=X._isAlive??j07}async ensure(X,Y={}){let G=HK(X,Y.repo?.branch),Q=this.records.get(G);if(Q&&this.isAliveFn(Q.pid))return this.toSandbox(Q);if(this.stateStore){let z=await this.stateStore.getByHandle(ZS,G);if(z){let O=await this.rehydrate(z.id,z);if(O)return this.records.set(G,O),this.toSandbox(O);await this.stateStore.deleteByHandle(ZS,G).catch(()=>{return})}}let J=this.workdirFor(G);await yp4(P07(J),{recursive:!0});let W=z07(24).toString("hex"),Z=O07(),$=await fp4(),K=`http://127.0.0.1:${$}`,H=await fp4(),U=M07({token:W,bootId:Z,workdir:J,daemonPort:$,devPort:H,runtime:Y.workload?.runtime??"node",packageManager:Y.workload?.packageManager??null,repo:Y.repo??null,extraEnv:Y.env}),B=await this.spawnFn({workdir:J,env:U,daemonPort:$});try{await this.waitForDaemon(K)}catch(z){try{B.kill("SIGKILL")}catch{}throw z}let N={id:X,handle:G,pid:B.pid,daemonPort:$,daemonUrl:K,workdir:J,token:W,bootId:Z};if(this.records.set(G,N),this.stateStore){let z={pid:N.pid,daemonPort:N.daemonPort,daemonUrl:N.daemonUrl,workdir:N.workdir,token:N.token,bootId:N.bootId};await this.stateStore.put(X,ZS,{handle:G,state:z})}return this.toSandbox(N)}async waitForDaemon(X){let Y=Date.now()+T07;while(Date.now()<Y){if(await this.probeFn(X))return;await new Promise((Q)=>setTimeout(Q,I07))}throw Error(`daemon at ${X} never reported healthy`)}async exec(X,Y){let G=await this.requireRecord(X);return Os(G.daemonUrl,G.token,Y)}async delete(X){let Y=await this.getRecord(X);if(this.records.delete(X),Y){if(this.isAliveFn(Y.pid)){try{this.killFn(Y.pid,"SIGTERM")}catch{}let G=Date.now()+V07;while(Date.now()<G){if(!this.isAliveFn(Y.pid))break;await new Promise((Q)=>setTimeout(Q,50))}if(this.isAliveFn(Y.pid))try{this.killFn(Y.pid,"SIGKILL")}catch{}}await w07(Y.workdir,{recursive:!0,force:!0}).catch((G)=>console.warn(`[HostSandboxRunner] rm workdir(${X}) failed:`,G instanceof Error?G.message:String(G)))}if(this.stateStore)if(Y)await this.stateStore.delete(Y.id,ZS);else await this.stateStore.deleteByHandle(ZS,X)}async alive(X){let Y=await this.getRecord(X);if(!Y)return!1;return this.isAliveFn(Y.pid)}async*watchClaimLifecycle(X,Y){yield{kind:"ready"}}async getPreviewUrl(X){let Y=await this.getRecord(X);return Y?this.composePreviewUrl(Y):null}async proxyDaemonRequest(X,Y,G){let Q=await this.getRecord(X);if(!Q)return new Response(JSON.stringify({error:"sandbox not found"}),{status:404,headers:{"content-type":"application/json"}});return Ds(Q.daemonUrl,Q.token,Y,G)}async resolveDaemonPort(X){return(await this.getRecord(X))?.daemonPort??null}async localWorkdir(X){return(await this.getRecord(X))?.workdir??null}workdirFor(X){return O_0(this.homeDir,"sandboxes",X)}composePreviewUrl(X){if(this.previewUrlPattern)return cz(this.previewUrlPattern,X.handle);let Y=process.env.SANDBOX_ROOT_URL;if(Y)return cz(Y,X.handle);let G=Number(process.env.SANDBOX_INGRESS_PORT??7070);return`http://${X.handle}.localhost:${G}/`}toSandbox(X){return{handle:X.handle,workdir:X.workdir,previewUrl:this.composePreviewUrl(X)}}async getRecord(X){let Y=this.records.get(X);if(Y)return Y;if(!this.stateStore)return null;let G=await this.stateStore.getByHandle(ZS,X);if(!G)return null;let Q=await this.rehydrate(G.id,G);if(Q)this.records.set(X,Q);return Q}async requireRecord(X){let Y=await this.getRecord(X);if(!Y)throw Error(`unknown sandbox handle ${X}`);return Y}async rehydrate(X,Y){let G=Y.state;if(typeof G.pid!=="number"||typeof G.daemonPort!=="number"||typeof G.daemonUrl!=="string"||typeof G.workdir!=="string"||typeof G.token!=="string"||typeof G.bootId!=="string")return null;if(!this.isAliveFn(G.pid))return null;let Q=await this.probeFn(G.daemonUrl);if(!Q)return null;return{id:X,handle:Y.handle,pid:G.pid,daemonPort:G.daemonPort,daemonUrl:G.daemonUrl,workdir:G.workdir,token:G.token,bootId:Q.bootId}}}function j07(X){if(X<=0)return!1;try{return process.kill(X,0),!0}catch{return!1}}function fp4(){return new Promise((X,Y)=>{let G=E07();G.unref(),G.on("error",Y),G.listen(0,"127.0.0.1",()=>{let Q=G.address();if(Q&&typeof Q==="object"){let{port:J}=Q;G.close(()=>X(J))}else G.close(()=>Y(Error("could not allocate port")))})})}function M07(X){let Y=X.repo?X.repo.displayName??R07(X.repo.cloneUrl):null;return{DAEMON_TOKEN:X.token,DAEMON_BOOT_ID:X.bootId,APP_ROOT:X.workdir,PROXY_PORT:String(X.daemonPort),DEV_PORT:String(X.devPort),RUNTIME:X.runtime,...X.repo?{CLONE_URL:X.repo.cloneUrl,REPO_NAME:Y??"",BRANCH:X.repo.branch??"",GIT_USER_NAME:X.repo.userName,GIT_USER_EMAIL:X.repo.userEmail}:{},...X.packageManager?{PACKAGE_MANAGER:X.packageManager}:{},...X.extraEnv??{}}}function R07(X){try{let Y=new URL(X);return Y.pathname.replace(/^\/+/,"").replace(/\.git$/,"")||Y.hostname}catch{return X}}function S07(){return q07(A07(new URL("../../../daemon/entry.ts",import.meta.url)))}function k07(){let X=Bun.resolveSync("node-pty",import.meta.dir),Y="/node_modules/",G=X.lastIndexOf("/node_modules/");if(G<0)throw Error(`[HostSandboxRunner] could not derive node_modules path from node-pty resolution: ${X}`);return X.slice(0,G+14-1)}async function C07(X){let{DAEMON_BUNDLE:Y}=await Promise.resolve().then(() => (_p4(),vp4)),G=N07("sha256").update(Y).digest("hex").slice(0,16),Q=O_0(X,".deco","cache"),J=O_0(Q,`sandbox-daemon-${G}.js`);if(bp4(J))return J;await yp4(Q,{recursive:!0});let W=`${J}.${process.pid}.tmp`;return await L07(W,Y),await D07(W,J),J}async function v07(X){let Y=S07();if(bp4(Y))return Y;return C07(X)}function _07(X){return async(Y)=>{let G=await v07(X),Q=k07(),J=process.env.NODE_PATH,W=J?`${Q}:${J}`:Q,Z=Bun.spawn({cmd:["bun","run",G],env:{...process.env,NODE_PATH:W,...Y.env},stdout:"inherit",stderr:"inherit",stdin:"ignore"});return{pid:Z.pid,kill:($)=>{return Z.kill($),!0}}}}var ZS="host",T07=30000,I07=250,V07=2000;var xp4=D(()=>{Kk1();Es()});var hp4=D(()=>{xp4()});function Ps(X){if("threadId"in X){if(!X.threadId)throw Error("composeSandboxRef: threadId required");return`thread:${X.threadId}`}if(!X.orgId||!X.virtualMcpId||!X.branch)throw Error("composeSandboxRef: orgId, virtualMcpId and branch are all required for agent refs");return`agent:${X.orgId}:${X.virtualMcpId}:${X.branch}`}var WS={};j0(WS,{sweepDockerOrphansOnShutdown:()=>N_0,sweepDockerOrphansOnBoot:()=>B_0,startLocalSandboxIngress:()=>U_0,sandboxIdKey:()=>Ls,resolveRunnerKindFromEnv:()=>iz,ensureSandboxImage:()=>Fk1,createDockerRunner:()=>f07,computeHandle:()=>HK,composeSandboxRef:()=>Ps,HostSandboxRunner:()=>zk1,DockerSandboxRunner:()=>GB});function f07(X={}){return new GB({...X.docker,stateStore:X.stateStore})}function iz(){let X=process.env.STUDIO_SANDBOX_RUNNER,Y=X&&X.length>0?X:"host";if(!b07.has(Y))throw Error(`Unknown STUDIO_SANDBOX_RUNNER="${X}" \u2014 expected "host", "docker", "freestyle", or "agent-sandbox".`);if(Y==="freestyle"&&!process.env.FREESTYLE_API_KEY)throw Error('STUDIO_SANDBOX_RUNNER="freestyle" requires FREESTYLE_API_KEY to be set.');return Y}var b07;var pz=D(()=>{z31();z31();hp4();Es();K_0();z31();z31();b07=new Set(["host","docker","freestyle","agent-sandbox"])});var O31;var D_0=D(()=>{O31={npm:{install:"npm install",run:(X)=>`npm run ${X}`,runtime:"node"},pnpm:{install:"pnpm install",run:(X)=>`pnpm run ${X}`,runtime:"node"},yarn:{install:"yarn install",run:(X)=>`yarn run ${X}`,runtime:"node"},bun:{install:"bun install",run:(X)=>`bun run ${X}`,runtime:"bun"},deno:{install:"deno install",run:(X)=>`deno task ${X}`,runtime:"deno"}}});function DT(X){if(!X||typeof X!=="object")return{};let Y=X.vmMap;if(!Y||typeof Y!=="object")return{};return Y}function qs(X,Y,G){return X[Y]?.[G]??null}async function gp4(X,Y,G,Q,J,W){let Z=await X.findById(Y);if(!Z)return;let $=Z.metadata??{},K=DT($),H={...K,[Q]:{...K[Q]??{},[J]:W}};await X.update(Y,G,{metadata:{...$,vmMap:H}})}async function up4(X,Y,G,Q,J){let W=await X.findById(Y);if(!W)return;let Z=W.metadata??{},$=DT(Z);if(!$[Q]?.[J])return;let K={...$[Q]};delete K[J];let H={...$};if(Object.keys(K).length===0)delete H[Q];else H[Q]=K;await X.update(Y,G,{metadata:{...Z,vmMap:H}})}async function Ok1(X,Y){B0(Y);let G=s1(Y);await Y.access.check();let Q=L4(Y);if(!Q)throw Error("User ID required");let J=await Y.storage.virtualMcps.findById(X.virtualMcpId);if(!J||J.organization_id!==G.id)throw Error("Virtual MCP not found");let W=J.metadata??{},Z=DT(W),$=qs(Z,Q,X.branch);return{virtualMcp:J,metadata:W,userId:Q,entry:$,organization:G}}function lp4(X){let Y=X.runtime??null,Q=Y?.selected??null;if(!Q||!(Q in O31))return{packageManager:null,runtime:null,port:Y?.port??"3000",runtimeBinPath:null};let J=O31[Q].runtime,W=J==="deno"?"/opt/deno/bin":J==="bun"?"/opt/bun/bin":null;return{packageManager:Q,runtime:J,port:Y?.port??"3000",runtimeBinPath:W}}var w_0=D(()=>{D_0()});async function mp4(X,Y,G,Q,J){let W=new I3(Q,J),Z=await W.get(X);if(!Z)throw Error("No GitHub token found. Ensure the mcp-github connection is authenticated.");let $=Z.accessToken;if(WQ1(Z)&&W.isExpired(Z,zM1)){let B=await $Q1(Z,W);if(!B)throw Error(eM);$=B}let K=`https://x-access-token:${$}@github.com/${Y}/${G}.git`,H="Deco Studio",U="studio@deco.cx";try{let B=await fetch("https://api.github.com/user",{headers:{Authorization:`token ${$}`,Accept:"application/vnd.github+json"}});if(B.ok){let N=await B.json();H=N.name||N.login,U=N.email||`${N.login}@users.noreply.github.com`}}catch{}return{cloneUrl:K,gitUserName:H,gitUserEmail:U}}var dp4=D(()=>{hR();OM1()});async function pp4(X,Y,G,Q,J){let W=await new I3(Q,J).get(X);if(!W)return null;let Z=new Map,$=new Set(cp4.map((B)=>B.path));for(let B of Object.values(ip4))for(let N of B??[])$.add(N);await Promise.all(Array.from($).map(async(B)=>{Z.set(B,await x07(Y,G,B,W.accessToken))}));let K=cp4.find(({path:B})=>Z.get(B)!==null);if(!K)return null;let H=ip4[K.pm]??[],U=null;for(let B of H)if(U=h07(Z.get(B)??null),U)break;return{packageManager:K.pm,devPort:U}}async function x07(X,Y,G,Q){let J=`https://api.github.com/repos/${X}/${Y}/contents/${encodeURIComponent(G)}`;try{let W=await fetch(J,{headers:{Authorization:`token ${Q}`,Accept:"application/vnd.github+json","User-Agent":"mesh-runtime-detect"},signal:AbortSignal.timeout(5000)});if(!W.ok)return null;let Z=await W.json();if(!Z.content||Z.encoding!=="base64")return null;return Buffer.from(Z.content,"base64").toString("utf8")}catch{return null}}function h07(X){if(!X)return null;try{let Y=JSON.parse(X),G=Y.tasks??Y.scripts??{};return(G.dev??G.start??"").match(y07)?.[1]??null}catch{return null}}var cp4,ip4,y07;var np4=D(()=>{hR();cp4=[{path:"deno.json",pm:"deno"},{path:"deno.jsonc",pm:"deno"},{path:"bun.lock",pm:"bun"},{path:"bunfig.toml",pm:"bun"},{path:"pnpm-lock.yaml",pm:"pnpm"},{path:"yarn.lock",pm:"yarn"},{path:"package-lock.json",pm:"npm"},{path:"package.json",pm:"npm"}],ip4={deno:["deno.json","deno.jsonc"],bun:["package.json"],pnpm:["package.json"],yarn:["package.json"],npm:["package.json"]},y07=/(?:--port|PORT=|:)(\d{4,5})/});import{createHash as g07}from"crypto";function u07(X,Y){return g07("sha256").update(X.userId).update("\x00").update(X.projectRef).update("\x00").update(Y).digest().readBigInt64BE(0)}async function tp4(X,Y,G){let Q=await X.selectFrom("sandbox_runner_state").select(["handle","state","updated_at"]).where("user_id","=",Y.userId).where("project_ref","=",Y.projectRef).where("runner_kind","=",G).executeTakeFirst();if(!Q)return null;return{handle:Q.handle,state:Q.state,updatedAt:Q.updated_at}}async function rp4(X,Y,G){let Q=await X.selectFrom("sandbox_runner_state").select(["user_id","project_ref","handle","state","updated_at"]).where("runner_kind","=",Y).where("handle","=",G).executeTakeFirst();if(!Q)return null;return{id:{userId:Q.user_id,projectRef:Q.project_ref},handle:Q.handle,state:Q.state,updatedAt:Q.updated_at}}async function op4(X,Y,G,Q){let J=JSON.stringify(Q.state),W=new Date().toISOString();await X.insertInto("sandbox_runner_state").values({user_id:Y.userId,project_ref:Y.projectRef,runner_kind:G,handle:Q.handle,state:J,updated_at:W}).onConflict((Z)=>Z.columns(["user_id","project_ref","runner_kind"]).doUpdateSet({handle:Q.handle,state:J,updated_at:W})).execute()}async function sp4(X,Y,G){await X.deleteFrom("sandbox_runner_state").where("user_id","=",Y.userId).where("project_ref","=",Y.projectRef).where("runner_kind","=",G).execute()}async function ep4(X,Y,G){await X.deleteFrom("sandbox_runner_state").where("runner_kind","=",Y).where("handle","=",G).execute()}function l07(X){return{get:(Y,G)=>tp4(X,Y,G),getByHandle:(Y,G)=>rp4(X,Y,G),put:(Y,G,Q)=>op4(X,Y,G,Q),delete:(Y,G)=>sp4(X,Y,G),deleteByHandle:(Y,G)=>ep4(X,Y,G)}}class D31{db;constructor(X){this.db=X}get(X,Y){return tp4(this.db,X,Y)}getByHandle(X,Y){return rp4(this.db,X,Y)}put(X,Y,G){return op4(this.db,X,Y,G)}delete(X,Y){return sp4(this.db,X,Y)}deleteByHandle(X,Y){return ep4(this.db,X,Y)}async withLock(X,Y,G){let Q=u07(X,Y);return this.db.transaction().execute(async(J)=>{try{await z1`set local statement_timeout = ${z1.lit(ap4)}`.execute(J),await z1`select pg_advisory_xact_lock(${Q}::bigint)`.execute(J)}catch(W){if(m07(W))throw Error(`sandbox advisory lock busy >${ap4}ms for user=${X.userId} projectRef=${X.projectRef} kind=${Y} \u2014 provisioner is slow or stuck; retry shortly`);throw W}return await z1`set local statement_timeout = 0`.execute(J),G(l07(J))})}}function m07(X){if(!(X instanceof Error))return!1;return X.code==="57014"||/statement timeout/i.test(X.message)}var ap4=90000;var L_0=D(()=>{P4()});function Zn4(X){let Y=d07[X.code];if(Y)return new Y(X);else return Error(`Unknown error code: ${X.code} - ${X.description}`)}class Rs4{baseUrl;apiKey;accessToken;fetchFn;constructor(X={}){this.baseUrl=X.baseUrl||"https://api.freestyle.sh",this.apiKey="apiKey"in X?X.apiKey:void 0,this.accessToken="accessToken"in X?X.accessToken:void 0,this.fetchFn=X.fetch||fetch}buildUrl(X,Y,G){let Q=X;if(Y)for(let[J,W]of Object.entries(Y))Q=Q.replace(`{${J}}`,encodeURIComponent(W));if(G){let J=new URLSearchParams;for(let[Z,$]of Object.entries(G))if($!==void 0&&$!==null)J.append(Z,String($));let W=J.toString();if(W)Q+=`?${W}`}return this.baseUrl+Q}getDefaultHeaders(){let X={"X-Freestyle-SDK":Yn4,"X-Freestyle-SDK-Version":Xn4,"User-Agent":`${Yn4}/${Xn4}`};if(this.apiKey)X.Authorization=`Bearer ${this.apiKey}`;else if(this.accessToken)X["X-Freestyle-Identity-Access-Token"]=this.accessToken;return X}async requestRaw(X,Y,G,Q){let J={...this.getDefaultHeaders(),...Q};if(G)J["Content-Type"]="application/json";let W=await this.fetchFn(Y,{method:X,headers:J,body:G?JSON.stringify(G):void 0});if(!W.ok){let Z=await W.text(),$;try{$=JSON.parse(Z)}catch(K){if(W.status===401)Z+=" (Your API key or access token may be invalid.)";throw Error(`HTTP error ${W.status}: ${Z}. ${K}`)}throw Zn4($)}return W}async request(X,Y,G,Q){return(await this.requestRaw(X,Y,G,Q)).json()}async fetch(X,Y){let G=this.getDefaultHeaders(),Q={...Y,headers:{...G,...Y?.headers||{}}};return this.fetchFn(X,Q)}resolveUrl(X,Y,G){return this.buildUrl(X,Y,G)}getRaw(X,Y){let G=this.buildUrl(X,Y?.params,Y?.query);return this.requestRaw("GET",G,void 0,Y?.headers)}postRaw(X,...Y){let G=Y[0],Q=this.buildUrl(X,G?.params,G?.query);return this.requestRaw("POST",Q,G?.body,G?.headers)}get(X,...Y){let G=Y[0],Q=this.buildUrl(X,G?.params,G?.query);return this.request("GET",Q,G?.body,G?.headers)}post(X,...Y){let G=Y[0],Q=this.buildUrl(X,G?.params,G?.query);return this.request("POST",Q,G?.body,G?.headers)}put(X,...Y){let G=Y[0],Q=this.buildUrl(X,G?.params,G?.query);return this.request("PUT",Q,G?.body,G?.headers)}delete(X,...Y){let G=Y[0],Q=this.buildUrl(X,G?.params,G?.query);return this.request("DELETE",Q,G?.body,G?.headers)}patch(X,...Y){let G=Y[0],Q=this.buildUrl(X,G?.params,G?.query);return this.request("PATCH",Q,G?.body,G?.headers)}}class Ss4{constructor(X){this.apiClient=X}async create({domain:X}){let Y=await this.apiClient.post("/domains/v1/verifications",{body:{domain:X}});return{verificationId:Y.id,instructions:`Navigate to your domain's DNS settings and create a TXT record with the following details:
5144
5144
 
5145
5145
  Name: _freestyle_custom_hostname.${X}
5146
5146
 
@@ -0,0 +1,33 @@
1
+ export type Options = {
2
+ /**
3
+ Match only the first ANSI escape.
4
+
5
+ @default false
6
+ */
7
+ readonly onlyFirst: boolean;
8
+ };
9
+
10
+ /**
11
+ Regular expression for matching ANSI escape codes.
12
+
13
+ @example
14
+ ```
15
+ import ansiRegex from 'ansi-regex';
16
+
17
+ ansiRegex().test('\u001B[4mcake\u001B[0m');
18
+ //=> true
19
+
20
+ ansiRegex().test('cake');
21
+ //=> false
22
+
23
+ '\u001B[4mcake\u001B[0m'.match(ansiRegex());
24
+ //=> ['\u001B[4m', '\u001B[0m']
25
+
26
+ '\u001B[4mcake\u001B[0m'.match(ansiRegex({onlyFirst: true}));
27
+ //=> ['\u001B[4m']
28
+
29
+ '\u001B]8;;https://github.com\u0007click\u001B]8;;\u0007'.match(ansiRegex());
30
+ //=> ['\u001B]8;;https://github.com\u0007', '\u001B]8;;\u0007']
31
+ ```
32
+ */
33
+ export default function ansiRegex(options?: Options): RegExp;
@@ -0,0 +1,14 @@
1
+ export default function ansiRegex({onlyFirst = false} = {}) {
2
+ // Valid string terminator sequences are BEL, ESC\, and 0x9c
3
+ const ST = '(?:\\u0007|\\u001B\\u005C|\\u009C)';
4
+
5
+ // OSC sequences only: ESC ] ... ST (non-greedy until the first ST)
6
+ const osc = `(?:\\u001B\\][\\s\\S]*?${ST})`;
7
+
8
+ // CSI and related: ESC/C1, optional intermediates, optional params (supports ; and :) then final byte
9
+ const csi = '[\\u001B\\u009B][[\\]()#;?]*(?:\\d{1,4}(?:[;:]\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]';
10
+
11
+ const pattern = `${osc}|${csi}`;
12
+
13
+ return new RegExp(pattern, onlyFirst ? undefined : 'g');
14
+ }