decocms 2.302.0 → 2.302.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 (231) hide show
  1. package/dist/client/assets/{AlertCircle-Ckdo-RmI.js → AlertCircle-BFJK99tM.js} +1 -1
  2. package/dist/client/assets/{ArrowNarrowLeft-Di3ykEwz.js → ArrowNarrowLeft-DCbP5K-g.js} +1 -1
  3. package/dist/client/assets/{ArrowUpRight-DMSP1Bv9.js → ArrowUpRight-BvzWf0q7.js} +1 -1
  4. package/dist/client/assets/{CheckCircle-C208sPuy.js → CheckCircle-qqOIolWc.js} +1 -1
  5. package/dist/client/assets/{ChevronDown-BrUt0Alw.js → ChevronDown-BMTA9_Ap.js} +1 -1
  6. package/dist/client/assets/{ChevronRight-CGM8153k.js → ChevronRight-QeeRSp8z.js} +1 -1
  7. package/dist/client/assets/{ChevronUp-CaGbgeVw.js → ChevronUp-BHiGg6ZY.js} +1 -1
  8. package/dist/client/assets/{Container-4Wg94L7I.js → Container-CIDvyJX8.js} +1 -1
  9. package/dist/client/assets/{DotsVertical-DvRrSQFB.js → DotsVertical-Bd2_5HYZ.js} +1 -1
  10. package/dist/client/assets/{LinkExternal01-Y0gD7h2D.js → LinkExternal01-DCnMv_g7.js} +1 -1
  11. package/dist/client/assets/{Lock01-Dch0eKvp.js → Lock01-Ds-YEZnN.js} +1 -1
  12. package/dist/client/assets/{Palette-CgqIrvg1.js → Palette-DescRwe0.js} +1 -1
  13. package/dist/client/assets/{Play-CtLPh-DP.js → Play-Ch3KWC7Z.js} +1 -1
  14. package/dist/client/assets/{Plus-Bz8pOCrF.js → Plus-gLdNtuBE.js} +1 -1
  15. package/dist/client/assets/{RefreshCcw01-KEgE6miP.js → RefreshCcw01-DKf5Q7r6.js} +1 -1
  16. package/dist/client/assets/{SearchMd-CVG2gI0e.js → SearchMd-BI1BY0Xc.js} +1 -1
  17. package/dist/client/assets/{Settings02-BaHlQiS7.js → Settings02-D0o0GA4h.js} +1 -1
  18. package/dist/client/assets/{Shield01-CCtHgQuh.js → Shield01-btPXI3TS.js} +1 -1
  19. package/dist/client/assets/{Star01-C90LkDZI.js → Star01-DInOTW7T.js} +1 -1
  20. package/dist/client/assets/{Sun-BxF03d45.js → Sun-DLagUbKM.js} +1 -1
  21. package/dist/client/assets/{Tool01-DA28S3sH.js → Tool01-D1xeep7h.js} +1 -1
  22. package/dist/client/assets/{Trash01-DR27iFf1.js → Trash01-OgQVP2St.js} +1 -1
  23. package/dist/client/assets/{User01-BujZcMbB.js → User01-Cr_qCqW_.js} +1 -1
  24. package/dist/client/assets/{Users03-CDTGNBm2.js → Users03-DVwMLxYo.js} +1 -1
  25. package/dist/client/assets/{X-DoHhdWpr.js → X-fvjwb2RC.js} +1 -1
  26. package/dist/client/assets/{XCircle-Ds5a6kuE.js → XCircle-CVED_3Ss.js} +1 -1
  27. package/dist/client/assets/{XClose-C9Qfd8kZ.js → XClose-C1T9ODT_.js} +1 -1
  28. package/dist/client/assets/{Zap-BtQ-TzwR.js → Zap-u543Wk9m.js} +1 -1
  29. package/dist/client/assets/{ZapSquare-DKBv2Oh1.js → ZapSquare-B03aoE62.js} +1 -1
  30. package/dist/client/assets/{accordion-isIiC_Tx.js → accordion-zoDibAHc.js} +1 -1
  31. package/dist/client/assets/{agent-icon-DyZrsMHV.js → agent-icon-B5EEcofO.js} +1 -1
  32. package/dist/client/assets/{agents-list-BsLb9TAC.js → agents-list-KuDCGevU.js} +1 -1
  33. package/dist/client/assets/ai-providers-3jYxMl4T.js +1 -0
  34. package/dist/client/assets/{alert-dialog-Cm675fIp.js → alert-dialog-B6JtF6Oy.js} +1 -1
  35. package/dist/client/assets/{auth-catchall-CS4MwL4l.js → auth-catchall-CnOfYh4q.js} +1 -1
  36. package/dist/client/assets/{automation-list-row-BZZkY79g.js → automation-list-row-Ce2nqVRS.js} +1 -1
  37. package/dist/client/assets/{automations-EJo_cmjx.js → automations-3wicI9sJ.js} +1 -1
  38. package/dist/client/assets/{avatar-ejiIeuvT.js → avatar-B5CcOSaZ.js} +1 -1
  39. package/dist/client/assets/{badge-BCkY0osU.js → badge-Vn5olYFX.js} +1 -1
  40. package/dist/client/assets/{brand-context-B-WDg8W9.js → brand-context-JEzNXnYS.js} +1 -1
  41. package/dist/client/assets/{card-KrDyjT9B.js → card-DHIGW2Gm.js} +1 -1
  42. package/dist/client/assets/{chat-context-D2ImJV4_.js → chat-context-DZ4ItXeY.js} +1 -1
  43. package/dist/client/assets/{checkbox-DdEbgSXy.js → checkbox-DBBm6J90.js} +1 -1
  44. package/dist/client/assets/{collection-detail-C1_S4Wby.js → collection-detail-CYmy41EW.js} +1 -1
  45. package/dist/client/assets/{collection-display-button-E32kWSQs.js → collection-display-button-DifdWxZd.js} +1 -1
  46. package/dist/client/assets/{collection-search-CjRFx7RJ.js → collection-search-EJTdRq0l.js} +1 -1
  47. package/dist/client/assets/{collection-search-CZ45K7il.js → collection-search-dr2VH0_A.js} +1 -1
  48. package/dist/client/assets/{collection-table-wrapper-D1SV8oPy.js → collection-table-wrapper-BNTrWb5l.js} +1 -1
  49. package/dist/client/assets/{collection-tabs-Ds23HSH3.js → collection-tabs-BhSzOngN.js} +1 -1
  50. package/dist/client/assets/{collections-ClBK8Wc7.js → collections-x4R34QWs.js} +1 -1
  51. package/dist/client/assets/{command-s8ocnxUp.js → command-dTUEruN1.js} +1 -1
  52. package/dist/client/assets/{connection-card-BOvFz0Xe.js → connection-card-DHMMRnIO.js} +1 -1
  53. package/dist/client/assets/{connection-detail-C9dHwvHg.js → connection-detail-B_69g2MY.js} +1 -1
  54. package/dist/client/assets/{connection-form-helpers-CaMgKEzX.js → connection-form-helpers-CSnwVczG.js} +1 -1
  55. package/dist/client/assets/{connections-D4jzt08s.js → connections-DL-vzzoi.js} +1 -1
  56. package/dist/client/assets/{constants-CVSLlYnf.js → constants-BVU634u9.js} +1 -1
  57. package/dist/client/assets/{constants-Bj37EyXz.js → constants-DhipgDPU.js} +1 -1
  58. package/dist/client/assets/{dialog-B9mCJ9u4.js → dialog-Cc5-s5cq.js} +1 -1
  59. package/dist/client/assets/{domain-settings-E-eT2C2j.js → domain-settings-Ddgt5zKc.js} +1 -1
  60. package/dist/client/assets/{drawer-ChRbi3da.js → drawer-CYKJkhyy.js} +1 -1
  61. package/dist/client/assets/{dropdown-menu-BACFhEWG.js → dropdown-menu-BdezCavF.js} +1 -1
  62. package/dist/client/assets/{dynamic-plugin-layout-3-VjJB_9.js → dynamic-plugin-layout-BPGpVId2.js} +1 -1
  63. package/dist/client/assets/{empty-state-Cd5nlZi8.js → empty-state-B-SDOSco.js} +1 -1
  64. package/dist/client/assets/{empty-state-CZHe0KuE.js → empty-state-CGM_VDGy.js} +1 -1
  65. package/dist/client/assets/{extract-connection-data-DWwyWigS.js → extract-connection-data-CGFCZBB1.js} +1 -1
  66. package/dist/client/assets/{features-CeatQ7gW.js → features-D36LrRkp.js} +1 -1
  67. package/dist/client/assets/{form-Ouizhyq3.js → form-BlgCJwww.js} +1 -1
  68. package/dist/client/assets/{general-DzoGsnH3.js → general-ByIyj3-X.js} +1 -1
  69. package/dist/client/assets/{index-RbRZk6ng.js → index-BEdZpL1a.js} +3 -3
  70. package/dist/client/assets/{index-RBXYZ0o1.js → index-BGvMfUr2.js} +2 -2
  71. package/dist/client/assets/{index-fNW0SHRb.js → index-BizlRsAk.js} +1 -1
  72. package/dist/client/assets/{index-D2mful5a.js → index-C-49LFOm.js} +1 -1
  73. package/dist/client/assets/{index-BSVWgf11.js → index-C4B8wMiM.js} +1 -1
  74. package/dist/client/assets/{index-6mSFDvZg.js → index-CQbT2-AO.js} +1 -1
  75. package/dist/client/assets/index-CSOTvYaA.js +1 -0
  76. package/dist/client/assets/{index-CAaoqFy7.js → index-Ce3V05Jd.js} +1 -1
  77. package/dist/client/assets/{index-By6SCvFJ.js → index-CxcuSo6g.js} +1 -1
  78. package/dist/client/assets/{index-2Scfn4rN.js → index-DL3V_XAA.js} +1 -1
  79. package/dist/client/assets/{index-D-Rzrt74.js → index-DRSFVCQG.js} +1 -1
  80. package/dist/client/assets/{index-af7Ms30x.js → index-DWnDHmtK.js} +1 -1
  81. package/dist/client/assets/{index-Dax7JqXc.js → index-DcnDvcwB.js} +1 -1
  82. package/dist/client/assets/{index-D_jFKVK5.js → index-QpbQL5yY.js} +1 -1
  83. package/dist/client/assets/{index-BS2wRqRL.js → index-gtAbs0Sc.js} +1 -1
  84. package/dist/client/assets/{index-Da_yXMmn.js → index-iJW-G2eC.js} +1 -1
  85. package/dist/client/assets/{infiniteQueryObserver--3YinOmX.js → infiniteQueryObserver-B9_hQDN4.js} +1 -1
  86. package/dist/client/assets/{input-CbOPFA2Y.js → input-r-FVR1hH.js} +1 -1
  87. package/dist/client/assets/{integration-icon-BUk_AQZb.js → integration-icon-Btl0P6Zi.js} +1 -1
  88. package/dist/client/assets/{label-BSzDqn8Z.js → label-CDE7or5s.js} +1 -1
  89. package/dist/client/assets/{layout-Cbq9XvLR.js → layout-DtEpOSua.js} +1 -1
  90. package/dist/client/assets/{lean-canvas-recruit-modal-C1G1_2au.js → lean-canvas-recruit-modal-70F-bJzI.js} +1 -1
  91. package/dist/client/assets/{login-DCSomhku.js → login-D6mlZnBr.js} +1 -1
  92. package/dist/client/assets/{members-DCjU7uUX.js → members-B44F43x3.js} +1 -1
  93. package/dist/client/assets/{monaco-editor-9MzrlDzJ.js → monaco-editor-D9GcAVz1.js} +1 -1
  94. package/dist/client/assets/{monitoring-stats-row-DLYFByVX.js → monitoring-stats-row-9xBJedBt.js} +1 -1
  95. package/dist/client/assets/{oauth-callback-CRR_q1-_.js → oauth-callback-BzeoI5mr.js} +1 -1
  96. package/dist/client/assets/{oauth-callback-ai-provider-BcbJ_xLj.js → oauth-callback-ai-provider-B7fEhkFp.js} +1 -1
  97. package/dist/client/assets/{onboarding-CSHiENj3.js → onboarding-C_yRTGs2.js} +1 -1
  98. package/dist/client/assets/{org-layout-BQC1siIb.js → org-layout-xgtHVrWJ.js} +1 -1
  99. package/dist/client/assets/{org-plugin-layout-Cq_aAA1I.js → org-plugin-layout-DjYWXXLz.js} +1 -1
  100. package/dist/client/assets/{pair-C1Euf0mI.js → pair-TlV_Y8fY.js} +1 -1
  101. package/dist/client/assets/{plugin-empty-state-DXXmUyFw.js → plugin-empty-state-wcs5uyqa.js} +1 -1
  102. package/dist/client/assets/{plugin-header-C-jLY3z-.js → plugin-header-D00boOwo.js} +1 -1
  103. package/dist/client/assets/{plugin-layout-oOgBG5IP.js → plugin-layout-kZMGzqtV.js} +1 -1
  104. package/dist/client/assets/{popover-DC-xnLvX.js → popover-CENSHA5K.js} +1 -1
  105. package/dist/client/assets/{profile-DDufPRp2.js → profile-CmCDElOt.js} +1 -1
  106. package/dist/client/assets/{project-app-view-CFJH3_Mb.js → project-app-view-CXSUfW9V.js} +1 -1
  107. package/dist/client/assets/registry-M9hpVTeC.js +2 -0
  108. package/dist/client/assets/{registry-layout-Bt8B6WZA.js → registry-layout-jKwqcMMI.js} +1 -1
  109. package/dist/client/assets/{required-auth-layout-DxzQFSub.js → required-auth-layout-ByW838Wg.js} +1 -1
  110. package/dist/client/assets/{reset-password-MIshTkTR.js → reset-password-Cn2aTTGW.js} +1 -1
  111. package/dist/client/assets/{roles-Cvj_YJQC.js → roles-BOss14ty.js} +1 -1
  112. package/dist/client/assets/{scroll-area-DwYUYaC4.js → scroll-area-KyXayDS_.js} +1 -1
  113. package/dist/client/assets/{search-input-CDHPjad4.js → search-input-LdRGRYga.js} +1 -1
  114. package/dist/client/assets/{select-8rqyX4yY.js → select-CKhnD_dJ.js} +1 -1
  115. package/dist/client/assets/{select-model-D8dh5nJb.js → select-model-DSERjqbn.js} +1 -1
  116. package/dist/client/assets/{settings-layout-BgvnZybr.js → settings-layout-DmMGjApo.js} +1 -1
  117. package/dist/client/assets/{settings-section-HtqNxJHw.js → settings-section-BSfLZRSf.js} +1 -1
  118. package/dist/client/assets/{shell-layout-A5EcvKv7.js → shell-layout-BTN4hGpk.js} +1 -1
  119. package/dist/client/assets/{skeleton-DMH6jOOd.js → skeleton-PrntJAKB.js} +1 -1
  120. package/dist/client/assets/{sso-DNkuSn5z.js → sso-Dt9Y-guZ.js} +1 -1
  121. package/dist/client/assets/{store-CLctbbGQ.js → store-lsrePhQV.js} +1 -1
  122. package/dist/client/assets/store-registry-BiQl34xL.js +2 -0
  123. package/dist/client/assets/{switch-ClAJkK47.js → switch-DIPW9oSx.js} +1 -1
  124. package/dist/client/assets/{table-Cwoyxo1t.js → table-CyZKmPMu.js} +1 -1
  125. package/dist/client/assets/{tabs-Bw1wvZLY.js → tabs-Cnic4mBc.js} +1 -1
  126. package/dist/client/assets/{task-status-BwNSpCPo.js → task-status-B4S1zCuU.js} +1 -1
  127. package/dist/client/assets/{textarea-grS6dvzw.js → textarea-DWnLf30W.js} +1 -1
  128. package/dist/client/assets/{toggle-group-CrcMNw0M.js → toggle-group-Bw-pO6dq.js} +1 -1
  129. package/dist/client/assets/{tools-list-B0HLMLQ4.js → tools-list-Ddp6jSMU.js} +1 -1
  130. package/dist/client/assets/{tooltip-l5gvSkP4.js → tooltip-8sj0FPxK.js} +1 -1
  131. package/dist/client/assets/{types-sSi2ZBaJ.js → types-CPAcvDGA.js} +1 -1
  132. package/dist/client/assets/{use-ai-providers-NGnYqkjZ.js → use-ai-providers-TD5f5keD.js} +1 -1
  133. package/dist/client/assets/{use-collections-XPoz4bQ4.js → use-collections-DbJUoPI1.js} +1 -1
  134. package/dist/client/assets/{use-connection-KIdOMYYB.js → use-connection-EBpfvjCE.js} +1 -1
  135. package/dist/client/assets/{use-copy-BEHVkdeL.js → use-copy-DNbmGYTy.js} +1 -1
  136. package/dist/client/assets/{use-create-virtual-mcp-B7_E4z0n.js → use-create-virtual-mcp-oePzdlSN.js} +1 -1
  137. package/dist/client/assets/{use-decopilot-events-BB7Ade2O.js → use-decopilot-events-CTJPtEAG.js} +1 -1
  138. package/dist/client/assets/{use-delete-connection-ClDFtLys.js → use-delete-connection-DeDsXAxU.js} +1 -1
  139. package/dist/client/assets/{use-infinite-scroll-BDQxIw_a.js → use-infinite-scroll-Blb-Zkmq.js} +1 -1
  140. package/dist/client/assets/{use-list-state-C-KeL9mx.js → use-list-state-Bt40g0pF.js} +1 -1
  141. package/dist/client/assets/{use-mcp-tools-CvCxJUq7.js → use-mcp-tools-yGAchpt7.js} +1 -1
  142. package/dist/client/assets/{use-members-CkSy6C1r.js → use-members-elTW2IMS.js} +1 -1
  143. package/dist/client/assets/{use-navigate-to-agent-h3H44Uqx.js → use-navigate-to-agent-XL440g7Q.js} +1 -1
  144. package/dist/client/assets/{use-org-auth-client-C4jj13SA.js → use-org-auth-client-kuXtTIo4.js} +1 -1
  145. package/dist/client/assets/{use-org-sso-CzzIybhJ.js → use-org-sso-DzmlEuU4.js} +1 -1
  146. package/dist/client/assets/{use-organization-roles-BFtXNMrL.js → use-organization-roles-B18S9BiQ.js} +1 -1
  147. package/dist/client/assets/{use-organization-settings-DQaAYRBc.js → use-organization-settings-vi5z2D5l.js} +1 -1
  148. package/dist/client/assets/{use-registry-connections-Bw9vDyMz.js → use-registry-connections-vdam_2jo.js} +1 -1
  149. package/dist/client/assets/{use-status-sounds-Cb3X5ULl.js → use-status-sounds-DVkOG6QZ.js} +1 -1
  150. package/dist/client/assets/{use-tasks-CU4nRSG8.js → use-tasks-BSCdum36.js} +1 -1
  151. package/dist/client/assets/{use-view-mode-dkizD-HG.js → use-view-mode-IRjBIGSa.js} +1 -1
  152. package/dist/client/assets/{use-virtual-mcp-D1lThWcu.js → use-virtual-mcp-BOr32Cw9.js} +1 -1
  153. package/dist/client/assets/useInfiniteQuery-D6CYdRiz.js +1 -0
  154. package/dist/client/assets/useSuspenseInfiniteQuery-hnE5tAGb.js +1 -0
  155. package/dist/client/assets/{user-BuZ7YF8y.js → user-Cr4eZetj.js} +1 -1
  156. package/dist/client/assets/{view-mode-toggle-CV8uckCG.js → view-mode-toggle-DqaIt4c7.js} +1 -1
  157. package/dist/client/assets/workflow-detail-CHEOWOns.js +1 -0
  158. package/dist/client/assets/{workflow-YqAcYHT8.js → workflow-f-0F4vKd.js} +1 -1
  159. package/dist/client/index.html +1 -1
  160. package/dist/server/cli.js +4 -4
  161. package/dist/server/node_modules/ansi-regex/index.d.ts +33 -0
  162. package/dist/server/node_modules/ansi-regex/index.js +14 -0
  163. package/dist/server/node_modules/ansi-regex/package.json +61 -0
  164. package/dist/server/node_modules/ansi-regex/readme.md +66 -0
  165. package/dist/server/node_modules/emoji-regex/LICENSE-MIT.txt +20 -0
  166. package/dist/server/node_modules/emoji-regex/README.md +107 -0
  167. package/dist/server/node_modules/emoji-regex/index.d.ts +3 -0
  168. package/dist/server/node_modules/emoji-regex/index.js +4 -0
  169. package/dist/server/node_modules/emoji-regex/index.mjs +4 -0
  170. package/dist/server/node_modules/emoji-regex/package.json +45 -0
  171. package/dist/server/node_modules/environment/index.d.ts +74 -0
  172. package/dist/server/node_modules/environment/index.js +47 -0
  173. package/dist/server/node_modules/{slice-ansi → environment}/license +0 -1
  174. package/dist/server/node_modules/environment/package.json +74 -0
  175. package/dist/server/node_modules/environment/readme.md +94 -0
  176. package/dist/server/node_modules/escape-string-regexp/index.d.ts +18 -0
  177. package/dist/server/node_modules/escape-string-regexp/index.js +11 -0
  178. package/dist/server/node_modules/escape-string-regexp/license +9 -0
  179. package/dist/server/node_modules/escape-string-regexp/package.json +43 -0
  180. package/dist/server/node_modules/escape-string-regexp/readme.md +29 -0
  181. package/dist/server/node_modules/is-fullwidth-code-point/index.d.ts +17 -0
  182. package/dist/server/node_modules/is-fullwidth-code-point/index.js +12 -0
  183. package/dist/server/node_modules/is-fullwidth-code-point/license +9 -0
  184. package/dist/server/node_modules/is-fullwidth-code-point/package.json +53 -0
  185. package/dist/server/node_modules/is-fullwidth-code-point/readme.md +31 -0
  186. package/dist/server/node_modules/is-unicode-supported/index.d.ts +12 -0
  187. package/dist/server/node_modules/is-unicode-supported/index.js +21 -0
  188. package/dist/server/node_modules/is-unicode-supported/license +9 -0
  189. package/dist/server/node_modules/is-unicode-supported/package.json +47 -0
  190. package/dist/server/node_modules/is-unicode-supported/readme.md +35 -0
  191. package/dist/server/node_modules/pg-int8/LICENSE +13 -0
  192. package/dist/server/node_modules/pg-int8/README.md +16 -0
  193. package/dist/server/node_modules/pg-int8/index.js +100 -0
  194. package/dist/server/node_modules/pg-int8/package.json +24 -0
  195. package/dist/server/node_modules/postgres-interval/index.d.ts +20 -0
  196. package/dist/server/node_modules/postgres-interval/index.js +125 -0
  197. package/dist/server/node_modules/postgres-interval/license +21 -0
  198. package/dist/server/node_modules/postgres-interval/package.json +36 -0
  199. package/dist/server/node_modules/postgres-interval/readme.md +48 -0
  200. package/dist/server/node_modules/restore-cursor/index.d.ts +11 -0
  201. package/dist/server/node_modules/restore-cursor/index.js +11 -0
  202. package/dist/server/node_modules/restore-cursor/license +9 -0
  203. package/dist/server/node_modules/restore-cursor/package.json +55 -0
  204. package/dist/server/node_modules/restore-cursor/readme.md +31 -0
  205. package/dist/server/node_modules/string-width/index.d.ts +39 -0
  206. package/dist/server/node_modules/string-width/index.js +82 -0
  207. package/dist/server/node_modules/string-width/license +9 -0
  208. package/dist/server/node_modules/string-width/package.json +64 -0
  209. package/dist/server/node_modules/string-width/readme.md +66 -0
  210. package/dist/server/server.js +3 -3
  211. package/package.json +1 -1
  212. package/dist/client/assets/ai-providers-kn1jtlDC.js +0 -1
  213. package/dist/client/assets/index-YEyIkTha.js +0 -1
  214. package/dist/client/assets/registry-DtbT4EGB.js +0 -2
  215. package/dist/client/assets/store-registry-9hOokAwZ.js +0 -2
  216. package/dist/client/assets/useInfiniteQuery-PRD417UA.js +0 -1
  217. package/dist/client/assets/useSuspenseInfiniteQuery-j6nsOPAl.js +0 -1
  218. package/dist/client/assets/workflow-detail-BNKITpZa.js +0 -1
  219. package/dist/server/node_modules/get-east-asian-width/index.d.ts +0 -60
  220. package/dist/server/node_modules/get-east-asian-width/index.js +0 -30
  221. package/dist/server/node_modules/get-east-asian-width/lookup-data.js +0 -18
  222. package/dist/server/node_modules/get-east-asian-width/lookup.js +0 -135
  223. package/dist/server/node_modules/get-east-asian-width/package.json +0 -71
  224. package/dist/server/node_modules/get-east-asian-width/readme.md +0 -65
  225. package/dist/server/node_modules/get-east-asian-width/utilities.js +0 -24
  226. package/dist/server/node_modules/slice-ansi/index.d.ts +0 -19
  227. package/dist/server/node_modules/slice-ansi/index.js +0 -260
  228. package/dist/server/node_modules/slice-ansi/package.json +0 -59
  229. package/dist/server/node_modules/slice-ansi/readme.md +0 -54
  230. package/dist/server/node_modules/slice-ansi/tokenize-ansi.js +0 -752
  231. /package/dist/server/node_modules/{get-east-asian-width → ansi-regex}/license +0 -0
@@ -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 qA1(X){let Y={...process.env},G=S$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(() => (T$1(),A$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(() => (w30(),gx4));await K(W.databaseUrl);let{createDatabase:H}=await Promise.resolve().then(() => (QU(),hx4)),{migrateToLatest:U}=await Promise.resolve().then(() => (ir4(),cr4)),B=H(W.databaseUrl);await U({keepOpen:!0,database:B,skipBetterAuth:!0})}if(G.settings.clickhouseUrl){let{ensureClickHouseRollup:K}=await Promise.resolve().then(() => ps4);await K(G.settings.clickhouseUrl)}let $={...G.settings,databaseUrl:W.databaseUrl,natsUrls:W.natsUrls};return Xt1($),{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 iB0=D(()=>{en1();l9()});var IA1={};j0(IA1,{updateService:()=>rt,toggleViewMode:()=>nB0,toggleVibeState:()=>aB0,toggleLogFlow:()=>tB0,subscribeCliState:()=>qX1,setVibe:()=>Pp5,setTuiConsoleIntercepted:()=>AA1,setServerUrl:()=>TX1,setMigrationsDone:()=>AX1,setEnv:()=>IX1,setDevMode:()=>Lp5,setDataDir:()=>Ep5,isTuiConsoleIntercepted:()=>TA1,getCliState:()=>PX1,addLogEntry:()=>$z});function qU(){for(let X of pB0)X()}function PX1(){return X7}function qX1(X){return pB0.add(X),()=>pB0.delete(X)}function rt(X){X7={...X7,services:X7.services.map((Y)=>Y.name===X.name?X:Y)},qU()}function AX1(){X7={...X7,migrationsStatus:"done"},qU()}function TX1(X){X7={...X7,serverUrl:X},qU()}function IX1(X){X7={...X7,env:X},qU()}function $z(X){let Y=[...X7.logs,X];X7={...X7,logs:Y.length>500?Y.slice(-500):Y},qU()}function Lp5(){X7={...X7,services:[...X7.services,{name:"Vite",status:"pending",port:0}]},qU()}function nB0(){X7={...X7,viewMode:X7.viewMode==="requests"?"config":"requests"},qU()}function tB0(){X7={...X7,logFlow:!X7.logFlow},qU()}function Ep5(X){X7={...X7,dataDir:X},qU()}function Pp5(X){X7={...X7,vibe:X},qU()}function aB0(){X7={...X7,vibe:!X7.vibe},qU()}function AA1(X){ns4=X}function TA1(){return ns4}var X7,pB0,ns4=!1;var Kz=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},pB0=new Set});import{createServer as ts4}from"net";function qp5(X){return new Promise((Y)=>{let G=ts4();G.once("error",()=>Y(!1)),G.listen(X,"0.0.0.0",()=>{G.close(()=>Y(!0))})})}async function VA1(X){if(await qp5(X))return X;let Y=await new Promise((G,Q)=>{let J=ts4();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 oB0={};j0(oB0,{startDevServer:()=>Tp5});import{join as Ap5}from"path";function as4(X){return X.replace(/\x1b\[[0-9;]*m/g,"")}function rs4(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 $=as4(Z).replace(/^\[\d+\]\s*/,"").trim();if(!$)continue;$z({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=as4(Q).replace(/^\[\d+\]\s*/,"").trim();if(W)$z({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:W})}})()}async function Tp5(X){let{vitePort:Y,baseUrl:G,noTui:Q}=X,J=await VA1(Number(X.port)),{settings:W,services:Z,managedServiceNames:$}=await qA1({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)rt({name:z.name,status:"ready",port:z.port});IX1(W),AX1();let K=Ap5(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)rs4(U.stdout),rs4(U.stderr);let B=G||`http://localhost:${W.port}`;TX1(B),rt({name:"Vite",status:"ready",port:Number(Y)});let N=async(z)=>{if(U.kill(z),$.length>0){let{stopServices:O}=await Promise.resolve().then(() => (T$1(),A$1));await O(W.dataDir)}};return process.on("SIGINT",()=>N("SIGINT")),process.on("SIGTERM",()=>N("SIGTERM")),{port:Number(W.port),process:U}}var sB0=D(()=>{iB0();Kz();rB0()});import{Box as eB0,Text as XN0}from"ink";import{jsx as ss4,jsxs as jA1}from"react/jsx-runtime";function os4(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 jp5(X,Y){if(Ip5.has(X))return Y?{text:"\u25CF\u25CF\u25CF\u25CF\u25CF\u25CF",dimColor:!0}:{text:"not set",dimColor:!0};if(Vp5.has(X)){if(Array.isArray(Y)){if(Y.length===0)return{text:"not set",dimColor:!0};return{text:Y.map((W)=>os4(W)).join(", "),color:"cyan"}}let Q=os4(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 Mp5(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 es4({env:X}){let Y=Mp5(X);return ss4(eB0,{flexDirection:"column",children:Y.map((G)=>jA1(eB0,{flexDirection:"column",marginTop:1,children:[jA1(XN0,{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=jp5(Q,J);return jA1(eB0,{children:[jA1(XN0,{dimColor:!0,children:[" ",Q.padEnd(36)]}),ss4(XN0,{color:W.color,dimColor:W.dimColor,children:W.text})]},Q)})]},G.title))})}var Ip5,Vp5;var Xe4=D(()=>{Ip5=new Set(["BETTER_AUTH_SECRET","ENCRYPTION_KEY","MESH_JWT_SECRET","STUDIO_PROVISION_SECRET_KEY"]),Vp5=new Set(["DATABASE_URL","CLICKHOUSE_URL","NATS_URL"])});var YN0;var Ye4=D(()=>{YN0={name:"decocms",version:"2.302.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 AU,Text as RX}from"ink";import{Spinner as Sp5}from"@inkjs/ui";import{useSyncExternalStore as Ge4}from"react";import{jsx as AY,jsxs as sQ}from"react/jsx-runtime";function fp5(X,Y){if(!X||!_p5.has(X))return X;let G=GN0[Y]??GN0[GN0.length-1];return X==="#875f00"?G[0]:G[1]}function Qe4({status:X}){if(X==="pending")return AY(Sp5,{label:""});return AY(RX,{color:"green",children:"\u2713"})}function Je4({services:X,migrationsStatus:Y,home:G,serverUrl:Q,vibe:J}){let W=Ge4(Vl0,Il0),Z=Ge4(Cl0,kl0);return sQ(AU,{flexDirection:"column",paddingBottom:1,children:[J?sQ(AU,{flexDirection:"column",children:[W.map(($,K)=>{let H=Z[K],U=$.reduce((N,z)=>N+z.text.length,0),B=Math.max(0,vp5-U);return sQ(AU,{flexDirection:"row",children:[$.map((N,z)=>{let O=fp5(N.color,K);return O?AY(RX,{color:O,children:N.text},z):AY(RX,{children:N.text},z)}),AY(RX,{children:" ".repeat(B+2)}),H?.map((N,z)=>N.color?AY(RX,{color:N.color,children:N.char},z):AY(RX,{children:N.char},z))]},K)}),sQ(RX,{dimColor:!0,children:[" v",YN0.version]})]}):sQ(AU,{flexDirection:"column",marginTop:1,children:[kp5.map(($,K)=>AY(RX,{color:Cp5[K],children:$},K)),sQ(RX,{dimColor:!0,children:[" v",YN0.version]})]}),AY(AU,{marginBottom:1,children:AY(RX,{dimColor:!0,children:"\u2500".repeat(80)})}),AY(AU,{children:sQ(RX,{dimColor:!0,children:["Home: ",G]})}),sQ(AU,{gap:2,children:[X.map(($)=>sQ(AU,{gap:1,children:[sQ(RX,{children:[$.name," :",$.port||"...."]}),AY(Qe4,{status:$.status})]},$.name)),sQ(AU,{gap:1,children:[AY(RX,{children:"Migrations"}),AY(Qe4,{status:Y})]})]}),AY(AU,{children:Q?sQ(RX,{children:["Open in browser: ",AY(RX,{color:"cyan",children:Q})]}):AY(RX,{dimColor:!0,children:"Starting..."})}),sQ(AU,{gap:2,children:[sQ(RX,{dimColor:!0,children:[AY(RX,{bold:!0,dimColor:!0,children:"K"})," ","toggle config"]}),sQ(RX,{dimColor:!0,children:[AY(RX,{bold:!0,dimColor:!0,children:"L"})," ","toggle log flow"]}),sQ(RX,{dimColor:!0,children:[AY(RX,{bold:!0,dimColor:!0,children:"V"})," ","toggle vibe ",J?"\u266A Nihilore \xB7 CC BY 4.0":""]}),J&&sQ(RX,{dimColor:!0,children:[AY(RX,{bold:!0,dimColor:!0,children:"N"})," ","skip song"]})]})]})}var kp5,Cp5,GN0,vp5=30,_p5;var Ze4=D(()=>{Ye4();mn1();tn1();kp5=[" \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 "],Cp5=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"],GN0=[["#00ff64","#00cc50"],["#00f060","#00c04c"],["#00e05c","#00b448"],["#00d058","#00a844"],["#00c054","#009c40"],["#00b050","#00903c"],["#00a04c","#008438"],["#009048","#007834"],["#008044","#006c30"],["#007040","#00602c"],["#00603c","#005428"]],_p5=new Set(["#875f00","#5f3800"])});import{useSyncExternalStore as bp5}from"react";function yp5(){let X=process.stdout.rows||24,Y=process.stdout.columns||80;if(X!==MA1.rows||Y!==MA1.columns)MA1={rows:X,columns:Y};return MA1}function xp5(X){return process.stdout.on("resize",X),()=>{process.stdout.off("resize",X)}}function We4(){return bp5(xp5,yp5)}var MA1;var $e4=D(()=>{MA1={rows:process.stdout.rows||24,columns:process.stdout.columns||80}});import{Box as hp5,Text as VX1}from"ink";import{useSyncExternalStore as gp5}from"react";import{jsx as QN0,jsxs as JN0}from"react/jsx-runtime";function up5(X){if(X>=500)return"red";if(X>=400)return"yellow";if(X>=300)return"cyan";return"green"}function Ke4({logs:X,headerHeight:Y}){let{rows:G}=We4(),{logFlow:Q}=gp5(qX1,PX1),J=Math.max(1,G-Y-1),W=Q?X:X.slice(-J);return QN0(hp5,{flexDirection:"column",children:W.map((Z,$)=>{if(Z.rawLine)return QN0(VX1,{dimColor:!0,children:Z.rawLine},$);let K=Z.duration<1000?`${Z.duration}ms`:`${(Z.duration/1000).toFixed(1)}s`;return JN0(VX1,{children:[JN0(VX1,{dimColor:!0,children:[Z.method.padEnd(6)," ",Z.path.padEnd(30)," "]}),QN0(VX1,{color:up5(Z.status),children:Z.status}),JN0(VX1,{dimColor:!0,children:[" ",K.padStart(8)]})]},$)})})}var He4=D(()=>{Kz();$e4()});var ZN0={};j0(ZN0,{App:()=>np5});import{Box as lp5,Text as mp5,useInput as dp5}from"ink";import{useSyncExternalStore as cp5}from"react";import{jsx as RA1,jsxs as tp5}from"react/jsx-runtime";function np5({home:X}){let Y=cp5(qX1,PX1);return dp5((G)=>{if(G==="k"||G==="K")nB0();if(G==="l"||G==="L")tB0();if((G==="v"||G==="V")&&Y.dataDir)sn1(Y.dataDir),aB0();if((G==="n"||G==="N")&&Y.vibe)on1()}),tp5(lp5,{flexDirection:"column",children:[RA1(Je4,{services:Y.services,migrationsStatus:Y.migrationsStatus,home:X,serverUrl:Y.serverUrl,vibe:Y.vibe}),Y.viewMode==="config"?Y.env?RA1(es4,{env:Y.env}):RA1(mp5,{dimColor:!0,children:"Loading configuration..."}):RA1(Ke4,{logs:Y.logs,headerHeight:Y.vibe?pp5:ip5})]})}var ip5=15,pp5=19;var WN0=D(()=>{Xe4();Ze4();He4();Kz();Sd()});function Fe4(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,STUDIO_SANDBOX_SENTINEL_TOKEN:process.env.STUDIO_SANDBOX_SENTINEL_TOKEN,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 vj=k((Xn5)=>{Xn5.HttpAuthLocation=void 0;(function(X){X.HEADER="header",X.QUERY="query"})(Xn5.HttpAuthLocation||(Xn5.HttpAuthLocation={}));Xn5.HttpApiKeyAuthLocation=void 0;(function(X){X.HEADER="header",X.QUERY="query"})(Xn5.HttpApiKeyAuthLocation||(Xn5.HttpApiKeyAuthLocation={}));Xn5.EndpointURLScheme=void 0;(function(X){X.HTTP="http",X.HTTPS="https"})(Xn5.EndpointURLScheme||(Xn5.EndpointURLScheme={}));Xn5.AlgorithmId=void 0;(function(X){X.MD5="md5",X.CRC32="crc32",X.CRC32C="crc32c",X.SHA1="sha1",X.SHA256="sha256"})(Xn5.AlgorithmId||(Xn5.AlgorithmId={}));var ap5=(X)=>{let Y=[];if(X.sha256!==void 0)Y.push({algorithmId:()=>Xn5.AlgorithmId.SHA256,checksumConstructor:()=>X.sha256});if(X.md5!=null)Y.push({algorithmId:()=>Xn5.AlgorithmId.MD5,checksumConstructor:()=>X.md5});return{addChecksumAlgorithm(G){Y.push(G)},checksumAlgorithms(){return Y}}},rp5=(X)=>{let Y={};return X.checksumAlgorithms().forEach((G)=>{Y[G.algorithmId()]=G.checksumConstructor()}),Y},op5=(X)=>{return ap5(X)},sp5=(X)=>{return rp5(X)};Xn5.FieldPosition=void 0;(function(X){X[X.HEADER=0]="HEADER",X[X.TRAILER=1]="TRAILER"})(Xn5.FieldPosition||(Xn5.FieldPosition={}));var ep5="__smithy_context";Xn5.IniSectionType=void 0;(function(X){X.PROFILE="profile",X.SSO_SESSION="sso-session",X.SERVICES="services"})(Xn5.IniSectionType||(Xn5.IniSectionType={}));Xn5.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"})(Xn5.RequestHandlerProtocol||(Xn5.RequestHandlerProtocol={}));Xn5.SMITHY_CONTEXT_KEY=ep5;Xn5.getDefaultClientConfiguration=op5;Xn5.resolveDefaultRuntimeConfig=sp5});var u7=k((Hn5)=>{var Jn5=vj(),Zn5=(X)=>{return{setHttpHandler(Y){X.httpHandler=Y},httpHandler(){return X.httpHandler},updateHttpClientConfig(Y,G){X.httpHandler?.updateHttpClientConfig(Y,G)},httpHandlerConfigs(){return X.httpHandler.httpHandlerConfigs()}}},Wn5=(X)=>{return{httpHandler:X.httpHandler()}};class Ue4{name;kind;values;constructor({name:X,kind:Y=Jn5.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 Be4{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 SA1{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 SA1({...X,headers:{...X.headers}});if(Y.query)Y.query=$n5(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 SA1.clone(this)}}function $n5(X){return Object.keys(X).reduce((Y,G)=>{let Q=X[G];return{...Y,[G]:Array.isArray(Q)?[...Q]:Q}},{})}class Ne4{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 Kn5(X){return/^[a-z0-9][a-z0-9\.\-]*[a-z0-9]$/.test(X)}Hn5.Field=Ue4;Hn5.Fields=Be4;Hn5.HttpRequest=SA1;Hn5.HttpResponse=Ne4;Hn5.getHttpHandlerExtensionConfiguration=Zn5;Hn5.isValidHostname=Kn5;Hn5.resolveHttpHandlerRuntimeConfig=Wn5});function wn5(X){return(Y)=>async(G)=>{let{request:Q}=G;if(X.expectContinueHeader!==!1&&ze4.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 ze4,Ln5,Oe4=(X)=>({applyToStack:(Y)=>{Y.add(wn5(X),Ln5)}});var De4=D(()=>{ze4=Y1(u7(),1);Ln5={step:"build",tags:["SET_EXPECT_HEADER","EXPECT_HEADER"],name:"addExpectContinueMiddleware",override:!0}});var wH,kA1,_j,CA1,E9,we4,MX1;var LH=D(()=>{wH={WHEN_SUPPORTED:"WHEN_SUPPORTED",WHEN_REQUIRED:"WHEN_REQUIRED"},kA1=wH.WHEN_SUPPORTED,_j={WHEN_SUPPORTED:"WHEN_SUPPORTED",WHEN_REQUIRED:"WHEN_REQUIRED"},CA1=wH.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"})(we4||(we4={}));MX1=E9.CRC32});var Rq,ot=(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 NN0=D(()=>{(function(X){X.ENV="env",X.CONFIG="shared config entry"})(Rq||(Rq={}))});var En5="AWS_REQUEST_CHECKSUM_CALCULATION",Pn5="request_checksum_calculation",Le4;var Ee4=D(()=>{LH();NN0();Le4={environmentVariableSelector:(X)=>ot(X,En5,wH,Rq.ENV),configFileSelector:(X)=>ot(X,Pn5,wH,Rq.CONFIG),default:kA1}});var qn5="AWS_RESPONSE_CHECKSUM_VALIDATION",An5="response_checksum_validation",Pe4;var qe4=D(()=>{LH();NN0();Pe4={environmentVariableSelector:(X)=>ot(X,qn5,_j,Rq.ENV),configFileSelector:(X)=>ot(X,An5,_j,Rq.CONFIG),default:CA1}});var ON0=k((vn5)=>{var Tn5=["AuthFailure","InvalidSignatureException","RequestExpired","RequestInTheFuture","RequestTimeTooSkewed","SignatureDoesNotMatch"],In5=["BandwidthLimitExceeded","EC2ThrottledException","LimitExceededException","PriorRequestNotComplete","ProvisionedThroughputExceededException","RequestLimitExceeded","RequestThrottled","RequestThrottledException","SlowDown","ThrottledException","Throttling","ThrottlingException","TooManyRequestsException","TransactionInProgressException"],Vn5=["TimeoutError","RequestTimeout","RequestTimeoutException"],jn5=[500,502,503,504],Mn5=["ECONNRESET","ECONNREFUSED","EPIPE","ETIMEDOUT"],Rn5=["EHOSTUNREACH","ENETUNREACH","ENOTFOUND"],Ae4=(X)=>X?.$retryable!==void 0,Sn5=(X)=>Tn5.includes(X.name),Te4=(X)=>X.$metadata?.clockSkewCorrected,Ie4=(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)},kn5=(X)=>X.$metadata?.httpStatusCode===429||In5.includes(X.name)||X.$retryable?.throttling==!0,zN0=(X,Y=0)=>Ae4(X)||Te4(X)||X.name==="InvalidSignatureException"&&X.message?.includes("Signature expired")||Vn5.includes(X.name)||Mn5.includes(X?.code||"")||Rn5.includes(X?.code||"")||jn5.includes(X.$metadata?.httpStatusCode||0)||Ie4(X)||Ve4(X)||X.cause!==void 0&&Y<=10&&zN0(X.cause,Y+1),Cn5=(X)=>{if(X.$metadata?.httpStatusCode!==void 0){let Y=X.$metadata.httpStatusCode;if(500<=Y&&Y<=599&&!zN0(X))return!0;return!1}return!1};function Ve4(X){return X.code==="ERR_HTTP2_STREAM_ERROR"&&X.message.includes("NGHTTP2_REFUSED_STREAM")}vn5.isBrowserNetworkError=Ie4;vn5.isClockSkewCorrectedError=Te4;vn5.isClockSkewError=Sn5;vn5.isNodeJsHttp2TransientError=Ve4;vn5.isRetryableByTrait=Ae4;vn5.isServerError=Cn5;vn5.isThrottlingError=kn5;vn5.isTransientError=zN0});var Dw=k((an5)=>{var ln5=ON0();an5.RETRY_MODES=void 0;(function(X){X.STANDARD="standard",X.ADAPTIVE="adaptive"})(an5.RETRY_MODES||(an5.RETRY_MODES={}));var _A1=3,mn5=an5.RETRY_MODES.STANDARD;class fA1{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"||ln5.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)=>fA1.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 dn5=100,LN0=20000,cn5=500,DN0=500,in5=5,pn5=10,je4=1,nn5="amz-sdk-invocation-id",tn5="amz-sdk-request";class eQ{static v2026=typeof process<"u"&&process.env?.SMITHY_NEW_RETRIES_2026==="true";static delay(){return eQ.v2026?50:100}static throttlingDelay(){return eQ.v2026?1000:500}static cost(){return eQ.v2026?14:5}static throttlingCost(){return eQ.v2026?5:10}static modifiedCostType(){return eQ.v2026?"THROTTLING":"TRANSIENT"}}class Me4{x=eQ.delay();computeNextBackoffDelay(X){let Y=Math.random(),G=2,Q=Y*Math.min(this.x*2**X,LN0);return Math.floor(Q)}setDelayBase(X){this.x=X}}class wN0{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(LN0,this.delay)}getRetryCost(){return this.cost}isLongPoll(){return this.longPoll}}var vA1={incompatible:1,attempts:2,capacity:3};class RX1{mode=an5.RETRY_MODES.STANDARD;capacity=DN0;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()=>_A1,this.baseDelay??=eQ.delay(),this.retryBackoffStrategy??=new Me4}async acquireInitialRetryToken(X){return new wN0(eQ.delay(),0,void 0,eQ.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"?eQ.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:eQ.v2026&&Q===vA1.capacity&&W?K:0});else{let H=this.getCapacityCost(Z);return this.capacity-=H,new wN0(K,X.getRetryCount()+1,H,X.isLongPoll?.()??!1)}}throw Error("No retry token available")}recordSuccess(X){this.capacity=Math.min(DN0,this.capacity+(X.getRetryCost()??je4))}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 ${_A1}`),_A1}}retryCode(X,Y,G){let Q=X.getRetryCount()+1,J=this.isRetryableError(Y.errorType)?0:vA1.incompatible,W=Q<G?0:vA1.attempts,Z=this.capacity>=this.getCapacityCost(Y.errorType)?0:vA1.capacity;return J||W||Z}getCapacityCost(X){return X===eQ.modifiedCostType()?eQ.throttlingCost():eQ.cost()}isRetryableError(X){return X==="THROTTLING"||X==="TRANSIENT"}}class Re4{mode=an5.RETRY_MODES.ADAPTIVE;rateLimiter;standardRetryStrategy;constructor(X,Y){let{rateLimiter:G}=Y??{};this.rateLimiter=G??new fA1,this.standardRetryStrategy=Y?new RX1({maxAttempts:typeof X==="number"?X:3,...Y}):new RX1(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 Se4 extends RX1{computeNextBackoffDelay;constructor(X,Y=eQ.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}}an5.AdaptiveRetryStrategy=Re4;an5.ConfiguredRetryStrategy=Se4;an5.DEFAULT_MAX_ATTEMPTS=_A1;an5.DEFAULT_RETRY_DELAY_BASE=dn5;an5.DEFAULT_RETRY_MODE=mn5;an5.DefaultRateLimiter=fA1;an5.INITIAL_RETRY_TOKENS=DN0;an5.INVOCATION_ID_HEADER=nn5;an5.MAXIMUM_RETRY_DELAY=LN0;an5.NO_RETRY_INCREMENT=je4;an5.REQUEST_HEADER=tn5;an5.RETRY_COST=in5;an5.Retry=eQ;an5.StandardRetryStrategy=RX1;an5.THROTTLING_RETRY_DELAY_BASE=cn5;an5.TIMEOUT_RETRY_COST=pn5});var WX=k((Pt5)=>{var Bt5=Dw(),EN0={warningEmitted:!1},Nt5=(X)=>{if(X&&!EN0.warningEmitted&&parseInt(X.substring(1,X.indexOf(".")))<20)EN0.warningEmitted=!0,process.emitWarning(`NodeDeprecationWarning: The AWS SDK for JavaScript (v3) will
1626
+ `);Q=W.pop()??"";for(let Z of W){let $=as4(Z).replace(/^\[\d+\]\s*/,"").trim();if(!$)continue;$z({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=as4(Q).replace(/^\[\d+\]\s*/,"").trim();if(W)$z({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:W})}})()}async function Tp5(X){let{vitePort:Y,baseUrl:G,noTui:Q}=X,J=await VA1(Number(X.port)),{settings:W,services:Z,managedServiceNames:$}=await qA1({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)rt({name:z.name,status:"ready",port:z.port});IX1(W),AX1();let K=Ap5(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)rs4(U.stdout),rs4(U.stderr);let B=G||`http://localhost:${W.port}`;TX1(B),rt({name:"Vite",status:"ready",port:Number(Y)});let N=async(z)=>{if(U.kill(z),$.length>0){let{stopServices:O}=await Promise.resolve().then(() => (T$1(),A$1));await O(W.dataDir)}};return process.on("SIGINT",()=>N("SIGINT")),process.on("SIGTERM",()=>N("SIGTERM")),{port:Number(W.port),process:U}}var sB0=D(()=>{iB0();Kz();rB0()});import{Box as eB0,Text as XN0}from"ink";import{jsx as ss4,jsxs as jA1}from"react/jsx-runtime";function os4(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 jp5(X,Y){if(Ip5.has(X))return Y?{text:"\u25CF\u25CF\u25CF\u25CF\u25CF\u25CF",dimColor:!0}:{text:"not set",dimColor:!0};if(Vp5.has(X)){if(Array.isArray(Y)){if(Y.length===0)return{text:"not set",dimColor:!0};return{text:Y.map((W)=>os4(W)).join(", "),color:"cyan"}}let Q=os4(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 Mp5(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 es4({env:X}){let Y=Mp5(X);return ss4(eB0,{flexDirection:"column",children:Y.map((G)=>jA1(eB0,{flexDirection:"column",marginTop:1,children:[jA1(XN0,{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=jp5(Q,J);return jA1(eB0,{children:[jA1(XN0,{dimColor:!0,children:[" ",Q.padEnd(36)]}),ss4(XN0,{color:W.color,dimColor:W.dimColor,children:W.text})]},Q)})]},G.title))})}var Ip5,Vp5;var Xe4=D(()=>{Ip5=new Set(["BETTER_AUTH_SECRET","ENCRYPTION_KEY","MESH_JWT_SECRET","STUDIO_PROVISION_SECRET_KEY"]),Vp5=new Set(["DATABASE_URL","CLICKHOUSE_URL","NATS_URL"])});var YN0;var Ye4=D(()=>{YN0={name:"decocms",version:"2.302.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 AU,Text as RX}from"ink";import{Spinner as Sp5}from"@inkjs/ui";import{useSyncExternalStore as Ge4}from"react";import{jsx as AY,jsxs as sQ}from"react/jsx-runtime";function fp5(X,Y){if(!X||!_p5.has(X))return X;let G=GN0[Y]??GN0[GN0.length-1];return X==="#875f00"?G[0]:G[1]}function Qe4({status:X}){if(X==="pending")return AY(Sp5,{label:""});return AY(RX,{color:"green",children:"\u2713"})}function Je4({services:X,migrationsStatus:Y,home:G,serverUrl:Q,vibe:J}){let W=Ge4(Vl0,Il0),Z=Ge4(Cl0,kl0);return sQ(AU,{flexDirection:"column",paddingBottom:1,children:[J?sQ(AU,{flexDirection:"column",children:[W.map(($,K)=>{let H=Z[K],U=$.reduce((N,z)=>N+z.text.length,0),B=Math.max(0,vp5-U);return sQ(AU,{flexDirection:"row",children:[$.map((N,z)=>{let O=fp5(N.color,K);return O?AY(RX,{color:O,children:N.text},z):AY(RX,{children:N.text},z)}),AY(RX,{children:" ".repeat(B+2)}),H?.map((N,z)=>N.color?AY(RX,{color:N.color,children:N.char},z):AY(RX,{children:N.char},z))]},K)}),sQ(RX,{dimColor:!0,children:[" v",YN0.version]})]}):sQ(AU,{flexDirection:"column",marginTop:1,children:[kp5.map(($,K)=>AY(RX,{color:Cp5[K],children:$},K)),sQ(RX,{dimColor:!0,children:[" v",YN0.version]})]}),AY(AU,{marginBottom:1,children:AY(RX,{dimColor:!0,children:"\u2500".repeat(80)})}),AY(AU,{children:sQ(RX,{dimColor:!0,children:["Home: ",G]})}),sQ(AU,{gap:2,children:[X.map(($)=>sQ(AU,{gap:1,children:[sQ(RX,{children:[$.name," :",$.port||"...."]}),AY(Qe4,{status:$.status})]},$.name)),sQ(AU,{gap:1,children:[AY(RX,{children:"Migrations"}),AY(Qe4,{status:Y})]})]}),AY(AU,{children:Q?sQ(RX,{children:["Open in browser: ",AY(RX,{color:"cyan",children:Q})]}):AY(RX,{dimColor:!0,children:"Starting..."})}),sQ(AU,{gap:2,children:[sQ(RX,{dimColor:!0,children:[AY(RX,{bold:!0,dimColor:!0,children:"K"})," ","toggle config"]}),sQ(RX,{dimColor:!0,children:[AY(RX,{bold:!0,dimColor:!0,children:"L"})," ","toggle log flow"]}),sQ(RX,{dimColor:!0,children:[AY(RX,{bold:!0,dimColor:!0,children:"V"})," ","toggle vibe ",J?"\u266A Nihilore \xB7 CC BY 4.0":""]}),J&&sQ(RX,{dimColor:!0,children:[AY(RX,{bold:!0,dimColor:!0,children:"N"})," ","skip song"]})]})]})}var kp5,Cp5,GN0,vp5=30,_p5;var Ze4=D(()=>{Ye4();mn1();tn1();kp5=[" \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 "],Cp5=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"],GN0=[["#00ff64","#00cc50"],["#00f060","#00c04c"],["#00e05c","#00b448"],["#00d058","#00a844"],["#00c054","#009c40"],["#00b050","#00903c"],["#00a04c","#008438"],["#009048","#007834"],["#008044","#006c30"],["#007040","#00602c"],["#00603c","#005428"]],_p5=new Set(["#875f00","#5f3800"])});import{useSyncExternalStore as bp5}from"react";function yp5(){let X=process.stdout.rows||24,Y=process.stdout.columns||80;if(X!==MA1.rows||Y!==MA1.columns)MA1={rows:X,columns:Y};return MA1}function xp5(X){return process.stdout.on("resize",X),()=>{process.stdout.off("resize",X)}}function We4(){return bp5(xp5,yp5)}var MA1;var $e4=D(()=>{MA1={rows:process.stdout.rows||24,columns:process.stdout.columns||80}});import{Box as hp5,Text as VX1}from"ink";import{useSyncExternalStore as gp5}from"react";import{jsx as QN0,jsxs as JN0}from"react/jsx-runtime";function up5(X){if(X>=500)return"red";if(X>=400)return"yellow";if(X>=300)return"cyan";return"green"}function Ke4({logs:X,headerHeight:Y}){let{rows:G}=We4(),{logFlow:Q}=gp5(qX1,PX1),J=Math.max(1,G-Y-1),W=Q?X:X.slice(-J);return QN0(hp5,{flexDirection:"column",children:W.map((Z,$)=>{if(Z.rawLine)return QN0(VX1,{dimColor:!0,children:Z.rawLine},$);let K=Z.duration<1000?`${Z.duration}ms`:`${(Z.duration/1000).toFixed(1)}s`;return JN0(VX1,{children:[JN0(VX1,{dimColor:!0,children:[Z.method.padEnd(6)," ",Z.path.padEnd(30)," "]}),QN0(VX1,{color:up5(Z.status),children:Z.status}),JN0(VX1,{dimColor:!0,children:[" ",K.padStart(8)]})]},$)})})}var He4=D(()=>{Kz();$e4()});var ZN0={};j0(ZN0,{App:()=>np5});import{Box as lp5,Text as mp5,useInput as dp5}from"ink";import{useSyncExternalStore as cp5}from"react";import{jsx as RA1,jsxs as tp5}from"react/jsx-runtime";function np5({home:X}){let Y=cp5(qX1,PX1);return dp5((G)=>{if(G==="k"||G==="K")nB0();if(G==="l"||G==="L")tB0();if((G==="v"||G==="V")&&Y.dataDir)sn1(Y.dataDir),aB0();if((G==="n"||G==="N")&&Y.vibe)on1()}),tp5(lp5,{flexDirection:"column",children:[RA1(Je4,{services:Y.services,migrationsStatus:Y.migrationsStatus,home:X,serverUrl:Y.serverUrl,vibe:Y.vibe}),Y.viewMode==="config"?Y.env?RA1(es4,{env:Y.env}):RA1(mp5,{dimColor:!0,children:"Loading configuration..."}):RA1(Ke4,{logs:Y.logs,headerHeight:Y.vibe?pp5:ip5})]})}var ip5=15,pp5=19;var WN0=D(()=>{Xe4();Ze4();He4();Kz();Sd()});function Fe4(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,STUDIO_SANDBOX_SENTINEL_TOKEN:process.env.STUDIO_SANDBOX_SENTINEL_TOKEN,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 vj=k((Xn5)=>{Xn5.HttpAuthLocation=void 0;(function(X){X.HEADER="header",X.QUERY="query"})(Xn5.HttpAuthLocation||(Xn5.HttpAuthLocation={}));Xn5.HttpApiKeyAuthLocation=void 0;(function(X){X.HEADER="header",X.QUERY="query"})(Xn5.HttpApiKeyAuthLocation||(Xn5.HttpApiKeyAuthLocation={}));Xn5.EndpointURLScheme=void 0;(function(X){X.HTTP="http",X.HTTPS="https"})(Xn5.EndpointURLScheme||(Xn5.EndpointURLScheme={}));Xn5.AlgorithmId=void 0;(function(X){X.MD5="md5",X.CRC32="crc32",X.CRC32C="crc32c",X.SHA1="sha1",X.SHA256="sha256"})(Xn5.AlgorithmId||(Xn5.AlgorithmId={}));var ap5=(X)=>{let Y=[];if(X.sha256!==void 0)Y.push({algorithmId:()=>Xn5.AlgorithmId.SHA256,checksumConstructor:()=>X.sha256});if(X.md5!=null)Y.push({algorithmId:()=>Xn5.AlgorithmId.MD5,checksumConstructor:()=>X.md5});return{addChecksumAlgorithm(G){Y.push(G)},checksumAlgorithms(){return Y}}},rp5=(X)=>{let Y={};return X.checksumAlgorithms().forEach((G)=>{Y[G.algorithmId()]=G.checksumConstructor()}),Y},op5=(X)=>{return ap5(X)},sp5=(X)=>{return rp5(X)};Xn5.FieldPosition=void 0;(function(X){X[X.HEADER=0]="HEADER",X[X.TRAILER=1]="TRAILER"})(Xn5.FieldPosition||(Xn5.FieldPosition={}));var ep5="__smithy_context";Xn5.IniSectionType=void 0;(function(X){X.PROFILE="profile",X.SSO_SESSION="sso-session",X.SERVICES="services"})(Xn5.IniSectionType||(Xn5.IniSectionType={}));Xn5.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"})(Xn5.RequestHandlerProtocol||(Xn5.RequestHandlerProtocol={}));Xn5.SMITHY_CONTEXT_KEY=ep5;Xn5.getDefaultClientConfiguration=op5;Xn5.resolveDefaultRuntimeConfig=sp5});var u7=k((Hn5)=>{var Jn5=vj(),Zn5=(X)=>{return{setHttpHandler(Y){X.httpHandler=Y},httpHandler(){return X.httpHandler},updateHttpClientConfig(Y,G){X.httpHandler?.updateHttpClientConfig(Y,G)},httpHandlerConfigs(){return X.httpHandler.httpHandlerConfigs()}}},Wn5=(X)=>{return{httpHandler:X.httpHandler()}};class Ue4{name;kind;values;constructor({name:X,kind:Y=Jn5.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 Be4{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 SA1{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 SA1({...X,headers:{...X.headers}});if(Y.query)Y.query=$n5(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 SA1.clone(this)}}function $n5(X){return Object.keys(X).reduce((Y,G)=>{let Q=X[G];return{...Y,[G]:Array.isArray(Q)?[...Q]:Q}},{})}class Ne4{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 Kn5(X){return/^[a-z0-9][a-z0-9\.\-]*[a-z0-9]$/.test(X)}Hn5.Field=Ue4;Hn5.Fields=Be4;Hn5.HttpRequest=SA1;Hn5.HttpResponse=Ne4;Hn5.getHttpHandlerExtensionConfiguration=Zn5;Hn5.isValidHostname=Kn5;Hn5.resolveHttpHandlerRuntimeConfig=Wn5});function wn5(X){return(Y)=>async(G)=>{let{request:Q}=G;if(X.expectContinueHeader!==!1&&ze4.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 ze4,Ln5,Oe4=(X)=>({applyToStack:(Y)=>{Y.add(wn5(X),Ln5)}});var De4=D(()=>{ze4=Y1(u7(),1);Ln5={step:"build",tags:["SET_EXPECT_HEADER","EXPECT_HEADER"],name:"addExpectContinueMiddleware",override:!0}});var wH,kA1,_j,CA1,E9,we4,MX1;var LH=D(()=>{wH={WHEN_SUPPORTED:"WHEN_SUPPORTED",WHEN_REQUIRED:"WHEN_REQUIRED"},kA1=wH.WHEN_SUPPORTED,_j={WHEN_SUPPORTED:"WHEN_SUPPORTED",WHEN_REQUIRED:"WHEN_REQUIRED"},CA1=wH.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"})(we4||(we4={}));MX1=E9.CRC32});var Rq,ot=(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 NN0=D(()=>{(function(X){X.ENV="env",X.CONFIG="shared config entry"})(Rq||(Rq={}))});var En5="AWS_REQUEST_CHECKSUM_CALCULATION",Pn5="request_checksum_calculation",Le4;var Ee4=D(()=>{LH();NN0();Le4={environmentVariableSelector:(X)=>ot(X,En5,wH,Rq.ENV),configFileSelector:(X)=>ot(X,Pn5,wH,Rq.CONFIG),default:kA1}});var qn5="AWS_RESPONSE_CHECKSUM_VALIDATION",An5="response_checksum_validation",Pe4;var qe4=D(()=>{LH();NN0();Pe4={environmentVariableSelector:(X)=>ot(X,qn5,_j,Rq.ENV),configFileSelector:(X)=>ot(X,An5,_j,Rq.CONFIG),default:CA1}});var ON0=k((vn5)=>{var Tn5=["AuthFailure","InvalidSignatureException","RequestExpired","RequestInTheFuture","RequestTimeTooSkewed","SignatureDoesNotMatch"],In5=["BandwidthLimitExceeded","EC2ThrottledException","LimitExceededException","PriorRequestNotComplete","ProvisionedThroughputExceededException","RequestLimitExceeded","RequestThrottled","RequestThrottledException","SlowDown","ThrottledException","Throttling","ThrottlingException","TooManyRequestsException","TransactionInProgressException"],Vn5=["TimeoutError","RequestTimeout","RequestTimeoutException"],jn5=[500,502,503,504],Mn5=["ECONNRESET","ECONNREFUSED","EPIPE","ETIMEDOUT"],Rn5=["EHOSTUNREACH","ENETUNREACH","ENOTFOUND"],Ae4=(X)=>X?.$retryable!==void 0,Sn5=(X)=>Tn5.includes(X.name),Te4=(X)=>X.$metadata?.clockSkewCorrected,Ie4=(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)},kn5=(X)=>X.$metadata?.httpStatusCode===429||In5.includes(X.name)||X.$retryable?.throttling==!0,zN0=(X,Y=0)=>Ae4(X)||Te4(X)||X.name==="InvalidSignatureException"&&X.message?.includes("Signature expired")||Vn5.includes(X.name)||Mn5.includes(X?.code||"")||Rn5.includes(X?.code||"")||jn5.includes(X.$metadata?.httpStatusCode||0)||Ie4(X)||Ve4(X)||X.cause!==void 0&&Y<=10&&zN0(X.cause,Y+1),Cn5=(X)=>{if(X.$metadata?.httpStatusCode!==void 0){let Y=X.$metadata.httpStatusCode;if(500<=Y&&Y<=599&&!zN0(X))return!0;return!1}return!1};function Ve4(X){return X.code==="ERR_HTTP2_STREAM_ERROR"&&X.message.includes("NGHTTP2_REFUSED_STREAM")}vn5.isBrowserNetworkError=Ie4;vn5.isClockSkewCorrectedError=Te4;vn5.isClockSkewError=Sn5;vn5.isNodeJsHttp2TransientError=Ve4;vn5.isRetryableByTrait=Ae4;vn5.isServerError=Cn5;vn5.isThrottlingError=kn5;vn5.isTransientError=zN0});var Dw=k((an5)=>{var ln5=ON0();an5.RETRY_MODES=void 0;(function(X){X.STANDARD="standard",X.ADAPTIVE="adaptive"})(an5.RETRY_MODES||(an5.RETRY_MODES={}));var _A1=3,mn5=an5.RETRY_MODES.STANDARD;class fA1{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"||ln5.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)=>fA1.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 dn5=100,LN0=20000,cn5=500,DN0=500,in5=5,pn5=10,je4=1,nn5="amz-sdk-invocation-id",tn5="amz-sdk-request";class eQ{static v2026=typeof process<"u"&&process.env?.SMITHY_NEW_RETRIES_2026==="true";static delay(){return eQ.v2026?50:100}static throttlingDelay(){return eQ.v2026?1000:500}static cost(){return eQ.v2026?14:5}static throttlingCost(){return eQ.v2026?5:10}static modifiedCostType(){return eQ.v2026?"THROTTLING":"TRANSIENT"}}class Me4{x=eQ.delay();computeNextBackoffDelay(X){let Y=Math.random(),G=2,Q=Y*Math.min(this.x*2**X,LN0);return Math.floor(Q)}setDelayBase(X){this.x=X}}class wN0{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(LN0,this.delay)}getRetryCost(){return this.cost}isLongPoll(){return this.longPoll}}var vA1={incompatible:1,attempts:2,capacity:3};class RX1{mode=an5.RETRY_MODES.STANDARD;capacity=DN0;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()=>_A1,this.baseDelay??=eQ.delay(),this.retryBackoffStrategy??=new Me4}async acquireInitialRetryToken(X){return new wN0(eQ.delay(),0,void 0,eQ.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"?eQ.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:eQ.v2026&&Q===vA1.capacity&&W?K:0});else{let H=this.getCapacityCost(Z);return this.capacity-=H,new wN0(K,X.getRetryCount()+1,H,X.isLongPoll?.()??!1)}}throw Error("No retry token available")}recordSuccess(X){this.capacity=Math.min(DN0,this.capacity+(X.getRetryCost()??je4))}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 ${_A1}`),_A1}}retryCode(X,Y,G){let Q=X.getRetryCount()+1,J=this.isRetryableError(Y.errorType)?0:vA1.incompatible,W=Q<G?0:vA1.attempts,Z=this.capacity>=this.getCapacityCost(Y.errorType)?0:vA1.capacity;return J||W||Z}getCapacityCost(X){return X===eQ.modifiedCostType()?eQ.throttlingCost():eQ.cost()}isRetryableError(X){return X==="THROTTLING"||X==="TRANSIENT"}}class Re4{mode=an5.RETRY_MODES.ADAPTIVE;rateLimiter;standardRetryStrategy;constructor(X,Y){let{rateLimiter:G}=Y??{};this.rateLimiter=G??new fA1,this.standardRetryStrategy=Y?new RX1({maxAttempts:typeof X==="number"?X:3,...Y}):new RX1(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 Se4 extends RX1{computeNextBackoffDelay;constructor(X,Y=eQ.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}}an5.AdaptiveRetryStrategy=Re4;an5.ConfiguredRetryStrategy=Se4;an5.DEFAULT_MAX_ATTEMPTS=_A1;an5.DEFAULT_RETRY_DELAY_BASE=dn5;an5.DEFAULT_RETRY_MODE=mn5;an5.DefaultRateLimiter=fA1;an5.INITIAL_RETRY_TOKENS=DN0;an5.INVOCATION_ID_HEADER=nn5;an5.MAXIMUM_RETRY_DELAY=LN0;an5.NO_RETRY_INCREMENT=je4;an5.REQUEST_HEADER=tn5;an5.RETRY_COST=in5;an5.Retry=eQ;an5.StandardRetryStrategy=RX1;an5.THROTTLING_RETRY_DELAY_BASE=cn5;an5.TIMEOUT_RETRY_COST=pn5});var WX=k((Pt5)=>{var Bt5=Dw(),EN0={warningEmitted:!1},Nt5=(X)=>{if(X&&!EN0.warningEmitted&&parseInt(X.substring(1,X.indexOf(".")))<20)EN0.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
@@ -4200,7 +4200,7 @@ class TenantConfigStore {
4200
4200
  break;
4201
4201
  try {
4202
4202
  entry.resolve(await this.runOne(entry.patch));
4203
- } catch (e) {
4203
+ } catch {
4204
4204
  entry.resolve({
4205
4205
  kind: "rejected",
4206
4206
  reason: REJECTION_REASONS.APPLY_FAILED
@@ -4236,7 +4236,7 @@ class TenantConfigStore {
4236
4236
  }
4237
4237
  try {
4238
4238
  writeConfig(merged, this.deps.storageDir);
4239
- } catch (e) {
4239
+ } catch {
4240
4240
  return {
4241
4241
  kind: "rejected",
4242
4242
  reason: REJECTION_REASONS.PERSISTENCE_FAILED
@@ -7446,7 +7446,7 @@ Guidelines:
7446
7446
 
7447
7447
  return { consoleLogs, errors, evaluateResult };
7448
7448
  }
7449
- `}function SW8(X,Y){let{ctx:G,toolOutputMap:Q}=Y;return G8({description:"Inspect a web page's client-side runtime state. Navigates to a URL and collects browser console logs, JavaScript errors, and optionally evaluates a JS expression (e.g. window.dataLayer, document.title). Use this for debugging client-side issues, checking analytics setup, or inspecting runtime state. "+"For very large results the output may be truncated \u2014 use read_tool_output to access the full content.",inputSchema:p1(NW7),execute:async(J,W)=>{let Z=performance.now();try{let $=process.env.BROWSERLESS_TOKEN;if(!$)return{success:!1,error:"BROWSERLESS_TOKEN is not configured."};let K=zW7(J.url,{evaluate:J.evaluate,waitUntil:J.waitUntil}),H=await fetch(`${rs}/function?token=${encodeURIComponent($)}`,{method:"POST",headers:{"Content-Type":"application/javascript"},body:K});if(!H.ok){let z=await H.text().catch(()=>"Unknown error");return{success:!1,error:`Browserless function call failed (${H.status}): ${z}`,url:J.url}}let U;try{U=await H.json()}catch{return{success:!1,error:`Browserless returned non-JSON response: ${(await H.text().catch(()=>"")).slice(0,200)}`,url:J.url}}let B=JSON.stringify(U,null,2);Q.set(W.toolCallId,B);let N=tW(B);if(N>os&&G.objectStorage){let z=`inspect-pages/${crypto.randomUUID()}.json`,O=new TextEncoder().encode(B);try{await G.objectStorage.put(z,O,{contentType:"application/json"});let w=EZ(B);return{success:!0,uri:OK(z),preview:w,url:J.url,tokenCount:N,consoleLogCount:U.consoleLogs?.length??0,errorCount:U.errors?.length??0,hasEvaluateResult:U.evaluateResult!=null}}catch(w){console.error("[inspect-page] Failed to upload to storage, returning inline",w)}}return{success:!0,consoleLogs:U.consoleLogs,errors:U.errors,evaluateResult:U.evaluateResult,url:J.url,tokenCount:N}}finally{let $=performance.now()-Z;X.write({type:"data-tool-metadata",id:W.toolCallId,data:{latencyMs:$}})}}})}var NW7;var kW8=D(()=>{HX();F0();CL();NW7=F.object({url:F.string().url().describe("The URL of the web page to inspect."),evaluate:F.string().optional().describe(`Optional JavaScript expression to evaluate in the page context after load. Examples: 'window.dataLayer', 'document.querySelectorAll("script").length', 'performance.getEntriesByType("resource").map(e => ({name: e.name, duration: e.duration}))'`),waitUntil:F.enum(["load","domcontentloaded","networkidle0","networkidle2"]).optional().describe("When to consider navigation complete. Defaults to 'networkidle2'.")})});async function DW7(X,Y,G){let{provider:Q,organization:J,models:W,toolApprovalLevel:Z="auto",isPlanMode:$=!1,toolOutputMap:K,pendingImages:H,passthroughClient:U,vmContext:B,taskId:N}=Y,z={isPlanMode:$},O={user_ask:DW8,propose_plan:LW8,agent_search:x38(X,{organization:J,needsApproval:$W1(Z,!0,z)!==!1},G),read_tool_output:k38({toolOutputMap:K}),read_resource:m38({passthroughClient:U,toolOutputMap:K,ctx:G}),read_prompt:u38({passthroughClient:U,toolOutputMap:K})},w=$W1(Z,!1,z)!==!1;if(B){let E=await cm(G),P=null;Object.assign(O,NW8({runner:E,ensureHandle:()=>{if(!P)P=DZ8({virtualMcpId:B.virtualMcpId,branch:B.branch},G).then((M)=>M.vmId),P.catch(()=>{P=null});return P},toolOutputMap:K,needsApproval:w,pendingImages:H,ctx:G,threadId:B.threadId,virtualMcpId:B.virtualMcpId}))}if(Q)O.subtask=zW8(X,{provider:Q,organization:J,models:W,needsApproval:$W1(Z,!1,z)!==!1},G);if(Q&&W.image)O.generate_image=qW8(X,{provider:Q,imageModelInfo:W.image,ctx:G});if(Q&&W.deepResearch)O.web_search=TW8(X,{provider:Q,deepResearchModelInfo:W.deepResearch,ctx:G,toolOutputMap:K,taskId:N});if(process.env.BROWSERLESS_TOKEN)O.take_screenshot=VW8(X,{ctx:G,toolOutputMap:K,pendingImages:H}),O.scrape_url=MW8(X,{ctx:G,toolOutputMap:K}),O.inspect_page=SW8(X,{ctx:G,toolOutputMap:K});return O}function wW7(X,Y,G){let Q=Y.organization.id,J=G.auth?.user?.id,W={};for(let[Z,$]of Object.entries(X)){let K=$,H=K.execute;if(typeof H!=="function"){W[Z]=$;continue}let U=OW7[Z];W[Z]={...K,execute:async(B,N)=>{let z=performance.now(),O=!1;try{return await H.call(K,B,N)}catch(w){throw O=!0,w}finally{let w=performance.now()-z;if(Q&&J)M6.capture({distinctId:J,event:"tool_called",groups:{organization:Q},properties:{organization_id:Q,tool_source:"builtin",tool_name:Z,tool_safe_name:Z,read_only:U?.readOnly??null,destructive:U?.destructive??null,idempotent:null,open_world:null,latency_ms:Math.round(w),is_error:O}})}}}}return W}async function CW8(X,Y,G){let Q=await DW7(X,Y,G),J=wW7(Q,Y,G);if(!Y.isPlanMode){let{propose_plan:W,...Z}=J;return Z}return J}var OW7;var vW8=D(()=>{vX();KW1();h38();CL();l38();d38();Ax0();BB();hy0();OW8();wW8();EW8();AW8();IW8();jW8();RW8();kW8();OW7={agent_search:{readOnly:!0,destructive:!1},read_tool_output:{readOnly:!0,destructive:!1},read_resource:{readOnly:!0,destructive:!1},read_prompt:{readOnly:!0,destructive:!1},web_search:{readOnly:!0,destructive:!1},generate_image:{readOnly:!1,destructive:!1},open_in_agent:{readOnly:!1,destructive:!1},subtask:{readOnly:!1,destructive:!1},user_ask:{readOnly:!0,destructive:!1},propose_plan:{readOnly:!0,destructive:!1},enable_tools:{readOnly:!0,destructive:!1}}});function _W8(X,Y,G){return G8({description:`Enable tools from the available tools catalog so they can be called in subsequent steps. Call this before using any tool listed in <available-connections>.
7449
+ `}function SW8(X,Y){let{ctx:G,toolOutputMap:Q}=Y;return G8({description:"Inspect a web page's client-side runtime state. Navigates to a URL and collects browser console logs, JavaScript errors, and optionally evaluates a JS expression (e.g. window.dataLayer, document.title). Use this for debugging client-side issues, checking analytics setup, or inspecting runtime state. "+"For very large results the output may be truncated \u2014 use read_tool_output to access the full content.",inputSchema:p1(NW7),execute:async(J,W)=>{let Z=performance.now();try{let $=process.env.BROWSERLESS_TOKEN;if(!$)return{success:!1,error:"BROWSERLESS_TOKEN is not configured."};let K=zW7(J.url,{evaluate:J.evaluate,waitUntil:J.waitUntil}),H=await fetch(`${rs}/function?token=${encodeURIComponent($)}`,{method:"POST",headers:{"Content-Type":"application/javascript"},body:K});if(!H.ok){let z=await H.text().catch(()=>"Unknown error");return{success:!1,error:`Browserless function call failed (${H.status}): ${z}`,url:J.url}}let U;try{U=await H.json()}catch{return{success:!1,error:`Browserless returned non-JSON response: ${(await H.text().catch(()=>"")).slice(0,200)}`,url:J.url}}let B=JSON.stringify(U,null,2);Q.set(W.toolCallId,B);let N=tW(B);if(N>os&&G.objectStorage){let z=`inspect-pages/${crypto.randomUUID()}.json`,O=new TextEncoder().encode(B);try{await G.objectStorage.put(z,O,{contentType:"application/json"});let w=EZ(B);return{success:!0,uri:OK(z),preview:w,url:J.url,tokenCount:N,consoleLogCount:U.consoleLogs?.length??0,errorCount:U.errors?.length??0,hasEvaluateResult:U.evaluateResult!=null}}catch(w){console.error("[inspect-page] Failed to upload to storage, returning inline",w)}}return{success:!0,consoleLogs:U.consoleLogs,errors:U.errors,evaluateResult:U.evaluateResult,url:J.url,tokenCount:N}}finally{let $=performance.now()-Z;X.write({type:"data-tool-metadata",id:W.toolCallId,data:{latencyMs:$}})}}})}var NW7;var kW8=D(()=>{HX();F0();CL();NW7=F.object({url:F.string().url().describe("The URL of the web page to inspect."),evaluate:F.string().optional().describe(`Optional JavaScript expression to evaluate in the page context after load. Examples: 'window.dataLayer', 'document.querySelectorAll("script").length', 'performance.getEntriesByType("resource").map(e => ({name: e.name, duration: e.duration}))'`),waitUntil:F.enum(["load","domcontentloaded","networkidle0","networkidle2"]).optional().describe("When to consider navigation complete. Defaults to 'networkidle2'.")})});async function DW7(X,Y,G){let{provider:Q,organization:J,models:W,toolApprovalLevel:Z="auto",isPlanMode:$=!1,toolOutputMap:K,pendingImages:H,passthroughClient:U,vmContext:B,taskId:N}=Y,z={isPlanMode:$},O={user_ask:DW8,propose_plan:LW8,agent_search:x38(X,{organization:J,needsApproval:$W1(Z,!0,z)!==!1},G),read_tool_output:k38({toolOutputMap:K}),read_resource:m38({passthroughClient:U,toolOutputMap:K,ctx:G}),read_prompt:u38({passthroughClient:U,toolOutputMap:K})},w=$W1(Z,!1,z)!==!1;if(B){let E=await cm(G),P=null;Object.assign(O,NW8({runner:E,ensureHandle:()=>{if(!P)P=DZ8({virtualMcpId:B.virtualMcpId,branch:B.branch},G).then((M)=>M.vmId),P.catch(()=>{P=null});return P},toolOutputMap:K,needsApproval:w,pendingImages:H,ctx:G,threadId:B.threadId,virtualMcpId:B.virtualMcpId}))}if(Q)O.subtask=zW8(X,{provider:Q,organization:J,models:W,needsApproval:$W1(Z,!1,z)!==!1},G);if(Q&&W.image)O.generate_image=qW8(X,{provider:Q,imageModelInfo:W.image,ctx:G});if(Q&&W.deepResearch)O.web_search=TW8(X,{provider:Q,deepResearchModelInfo:W.deepResearch,ctx:G,toolOutputMap:K,taskId:N});if(process.env.BROWSERLESS_TOKEN)O.take_screenshot=VW8(X,{ctx:G,toolOutputMap:K,pendingImages:H}),O.scrape_url=MW8(X,{ctx:G,toolOutputMap:K}),O.inspect_page=SW8(X,{ctx:G,toolOutputMap:K});return O}function wW7(X,Y,G){let Q=Y.organization.id,J=G.auth?.user?.id,W={};for(let[Z,$]of Object.entries(X)){let K=$,H=K.execute;if(typeof H!=="function"){W[Z]=$;continue}let U=OW7[Z],B=H.constructor?.name==="AsyncGeneratorFunction",N=(O,w)=>{if(!Q||!J)return;M6.capture({distinctId:J,event:"tool_called",groups:{organization:Q},properties:{organization_id:Q,tool_source:"builtin",tool_name:Z,tool_safe_name:Z,read_only:U?.readOnly??null,destructive:U?.destructive??null,idempotent:null,open_world:null,latency_ms:Math.round(O),is_error:w}})},z=B?async function*(O,w){let E=performance.now(),P=!1;try{yield*H.call(K,O,w)}catch(q){throw P=!0,q}finally{N(performance.now()-E,P)}}:async(O,w)=>{let E=performance.now(),P=!1;try{return await H.call(K,O,w)}catch(q){throw P=!0,q}finally{N(performance.now()-E,P)}};W[Z]={...K,execute:z}}return W}async function CW8(X,Y,G){let Q=await DW7(X,Y,G),J=wW7(Q,Y,G);if(!Y.isPlanMode){let{propose_plan:W,...Z}=J;return Z}return J}var OW7;var vW8=D(()=>{vX();KW1();h38();CL();l38();d38();Ax0();BB();hy0();OW8();wW8();EW8();AW8();IW8();jW8();RW8();kW8();OW7={agent_search:{readOnly:!0,destructive:!1},read_tool_output:{readOnly:!0,destructive:!1},read_resource:{readOnly:!0,destructive:!1},read_prompt:{readOnly:!0,destructive:!1},web_search:{readOnly:!0,destructive:!1},generate_image:{readOnly:!1,destructive:!1},open_in_agent:{readOnly:!1,destructive:!1},subtask:{readOnly:!1,destructive:!1},user_ask:{readOnly:!0,destructive:!1},propose_plan:{readOnly:!0,destructive:!1},enable_tools:{readOnly:!0,destructive:!1}}});function _W8(X,Y,G){return G8({description:`Enable tools from the available tools catalog so they can be called in subsequent steps. Call this before using any tool listed in <available-connections>.
7450
7450
 
7451
7451
  Usage notes:
7452
7452
  - Batch related tools in a single call to minimize round-trips.
@@ -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
+ }
@@ -0,0 +1,61 @@
1
+ {
2
+ "name": "ansi-regex",
3
+ "version": "6.2.2",
4
+ "description": "Regular expression for matching ANSI escape codes",
5
+ "license": "MIT",
6
+ "repository": "chalk/ansi-regex",
7
+ "funding": "https://github.com/chalk/ansi-regex?sponsor=1",
8
+ "author": {
9
+ "name": "Sindre Sorhus",
10
+ "email": "sindresorhus@gmail.com",
11
+ "url": "https://sindresorhus.com"
12
+ },
13
+ "type": "module",
14
+ "exports": "./index.js",
15
+ "types": "./index.d.ts",
16
+ "sideEffects": false,
17
+ "engines": {
18
+ "node": ">=12"
19
+ },
20
+ "scripts": {
21
+ "test": "xo && ava && tsd",
22
+ "view-supported": "node fixtures/view-codes.js"
23
+ },
24
+ "files": [
25
+ "index.js",
26
+ "index.d.ts"
27
+ ],
28
+ "keywords": [
29
+ "ansi",
30
+ "styles",
31
+ "color",
32
+ "colour",
33
+ "colors",
34
+ "terminal",
35
+ "console",
36
+ "cli",
37
+ "string",
38
+ "tty",
39
+ "escape",
40
+ "formatting",
41
+ "rgb",
42
+ "256",
43
+ "shell",
44
+ "xterm",
45
+ "command-line",
46
+ "text",
47
+ "regex",
48
+ "regexp",
49
+ "re",
50
+ "match",
51
+ "test",
52
+ "find",
53
+ "pattern"
54
+ ],
55
+ "devDependencies": {
56
+ "ansi-escapes": "^5.0.0",
57
+ "ava": "^3.15.0",
58
+ "tsd": "^0.21.0",
59
+ "xo": "^0.54.2"
60
+ }
61
+ }
@@ -0,0 +1,66 @@
1
+ # ansi-regex
2
+
3
+ > Regular expression for matching [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code)
4
+
5
+ ## Install
6
+
7
+ ```sh
8
+ npm install ansi-regex
9
+ ```
10
+
11
+ ## Usage
12
+
13
+ ```js
14
+ import ansiRegex from 'ansi-regex';
15
+
16
+ ansiRegex().test('\u001B[4mcake\u001B[0m');
17
+ //=> true
18
+
19
+ ansiRegex().test('cake');
20
+ //=> false
21
+
22
+ '\u001B[4mcake\u001B[0m'.match(ansiRegex());
23
+ //=> ['\u001B[4m', '\u001B[0m']
24
+
25
+ '\u001B[4mcake\u001B[0m'.match(ansiRegex({onlyFirst: true}));
26
+ //=> ['\u001B[4m']
27
+
28
+ '\u001B]8;;https://github.com\u0007click\u001B]8;;\u0007'.match(ansiRegex());
29
+ //=> ['\u001B]8;;https://github.com\u0007', '\u001B]8;;\u0007']
30
+ ```
31
+
32
+ ## API
33
+
34
+ ### ansiRegex(options?)
35
+
36
+ Returns a regex for matching ANSI escape codes.
37
+
38
+ #### options
39
+
40
+ Type: `object`
41
+
42
+ ##### onlyFirst
43
+
44
+ Type: `boolean`\
45
+ Default: `false` *(Matches any ANSI escape codes in a string)*
46
+
47
+ Match only the first ANSI escape.
48
+
49
+ ## Important
50
+
51
+ If you run the regex against untrusted user input in a server context, you should [give it a timeout](https://github.com/sindresorhus/super-regex).
52
+
53
+ **I do not consider [ReDoS](https://blog.yossarian.net/2022/12/28/ReDoS-vulnerabilities-and-misaligned-incentives) a valid vulnerability for this package.**
54
+
55
+ ## FAQ
56
+
57
+ ### Why do you test for codes not in the ECMA 48 standard?
58
+
59
+ Some of the codes we run as a test are codes that we acquired finding various lists of non-standard or manufacturer specific codes. We test for both standard and non-standard codes, as most of them follow the same or similar format and can be safely matched in strings without the risk of removing actual string content. There are a few non-standard control codes that do not follow the traditional format (i.e. they end in numbers) thus forcing us to exclude them from the test because we cannot reliably match them.
60
+
61
+ On the historical side, those ECMA standards were established in the early 90's whereas the VT100, for example, was designed in the mid/late 70's. At that point in time, control codes were still pretty ungoverned and engineers used them for a multitude of things, namely to activate hardware ports that may have been proprietary. Somewhere else you see a similar 'anarchy' of codes is in the x86 architecture for processors; there are a ton of "interrupts" that can mean different things on certain brands of processors, most of which have been phased out.
62
+
63
+ ## Maintainers
64
+
65
+ - [Sindre Sorhus](https://github.com/sindresorhus)
66
+ - [Josh Junon](https://github.com/qix-)
@@ -0,0 +1,20 @@
1
+ Copyright Mathias Bynens <https://mathiasbynens.be/>
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,107 @@
1
+ # emoji-regex [![Build status](https://github.com/mathiasbynens/emoji-regex/actions/workflows/main.yml/badge.svg)](https://github.com/mathiasbynens/emoji-regex/actions/workflows/main.yml) [![emoji-regex on npm](https://img.shields.io/npm/v/emoji-regex)](https://www.npmjs.com/package/emoji-regex)
2
+
3
+ _emoji-regex_ offers a regular expression to match all emoji symbols and sequences (including textual representations of emoji) as per the Unicode Standard. It’s based on [_emoji-test-regex-pattern_](https://github.com/mathiasbynens/emoji-test-regex-pattern), which generates (at build time) the regular expression pattern based on the Unicode Standard. As a result, _emoji-regex_ can easily be updated whenever new emoji are added to Unicode.
4
+
5
+ Since each version of _emoji-regex_ is tied to the latest Unicode version at the time of release, results are deterministic. This is important for use cases like image replacement, where you want to guarantee that an image asset is available for every possibly matched emoji. If you don’t need a deterministic regex, a lighter-weight, general emoji pattern is available via the [_emoji-regex-xs_](https://github.com/slevithan/emoji-regex-xs) package that follows the same API.
6
+
7
+ ## Installation
8
+
9
+ Via [npm](https://www.npmjs.com/):
10
+
11
+ ```bash
12
+ npm install emoji-regex
13
+ ```
14
+
15
+ In [Node.js](https://nodejs.org/):
16
+
17
+ ```js
18
+ const emojiRegex = require('emoji-regex');
19
+ // Note: because the regular expression has the global flag set, this module
20
+ // exports a function that returns the regex rather than exporting the regular
21
+ // expression itself, to make it impossible to (accidentally) mutate the
22
+ // original regular expression.
23
+
24
+ const text = `
25
+ \u{231A}: ⌚ default emoji presentation character (Emoji_Presentation)
26
+ \u{2194}\u{FE0F}: ↔️ default text presentation character rendered as emoji
27
+ \u{1F469}: 👩 emoji modifier base (Emoji_Modifier_Base)
28
+ \u{1F469}\u{1F3FF}: 👩🏿 emoji modifier base followed by a modifier
29
+ `;
30
+
31
+ const regex = emojiRegex();
32
+ for (const match of text.matchAll(regex)) {
33
+ const emoji = match[0];
34
+ console.log(`Matched sequence ${ emoji } — code points: ${ [...emoji].length }`);
35
+ }
36
+ ```
37
+
38
+ Console output:
39
+
40
+ ```
41
+ Matched sequence ⌚ — code points: 1
42
+ Matched sequence ⌚ — code points: 1
43
+ Matched sequence ↔️ — code points: 2
44
+ Matched sequence ↔️ — code points: 2
45
+ Matched sequence 👩 — code points: 1
46
+ Matched sequence 👩 — code points: 1
47
+ Matched sequence 👩🏿 — code points: 2
48
+ Matched sequence 👩🏿 — code points: 2
49
+ ```
50
+
51
+ ## For maintainers
52
+
53
+ ### How to update emoji-regex after new Unicode Standard releases
54
+
55
+ 1. [Update _emoji-test-regex-pattern_ as described in its repository](https://github.com/mathiasbynens/emoji-test-regex-pattern#how-to-update-emoji-test-regex-pattern-after-new-uts51-releases).
56
+
57
+ 1. Bump the _emoji-test-regex-pattern_ dependency to the latest version.
58
+
59
+ 1. Update the Unicode data dependency in `package.json` by running the following commands:
60
+
61
+ ```sh
62
+ # Example: updating from Unicode v13 to Unicode v14.
63
+ npm uninstall @unicode/unicode-13.0.0
64
+ npm install @unicode/unicode-14.0.0 --save-dev
65
+ ````
66
+
67
+ 1. Generate the new output:
68
+
69
+ ```sh
70
+ npm run build
71
+ ```
72
+
73
+ 1. Verify that tests still pass:
74
+
75
+ ```sh
76
+ npm test
77
+ ```
78
+
79
+ ### How to publish a new release
80
+
81
+ 1. On the `main` branch, bump the emoji-regex version number in `package.json`:
82
+
83
+ ```sh
84
+ npm version patch -m 'Release v%s'
85
+ ```
86
+
87
+ Instead of `patch`, use `minor` or `major` [as needed](https://semver.org/).
88
+
89
+ Note that this produces a Git commit + tag.
90
+
91
+ 1. Push the release commit and tag:
92
+
93
+ ```sh
94
+ git push && git push --tags
95
+ ```
96
+
97
+ Our CI then automatically publishes the new release to npm.
98
+
99
+ ## Author
100
+
101
+ | [![twitter/mathias](https://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias "Follow @mathias on Twitter") |
102
+ |---|
103
+ | [Mathias Bynens](https://mathiasbynens.be/) |
104
+
105
+ ## License
106
+
107
+ _emoji-regex_ is available under the [MIT](https://mths.be/mit) license.
@@ -0,0 +1,3 @@
1
+ declare module 'emoji-regex' {
2
+ export default function emojiRegex(): RegExp;
3
+ }
@@ -0,0 +1,4 @@
1
+ module.exports = () => {
2
+ // https://mths.be/emoji
3
+ return /[#*0-9]\uFE0F?\u20E3|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26AA\u26B0\u26B1\u26BD\u26BE\u26C4\u26C8\u26CF\u26D1\u26E9\u26F0-\u26F5\u26F7\u26F8\u26FA\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B55\u3030\u303D\u3297\u3299]\uFE0F?|[\u261D\u270C\u270D](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?|[\u270A\u270B](?:\uD83C[\uDFFB-\uDFFF])?|[\u23E9-\u23EC\u23F0\u23F3\u25FD\u2693\u26A1\u26AB\u26C5\u26CE\u26D4\u26EA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2795-\u2797\u27B0\u27BF\u2B50]|\u26D3\uFE0F?(?:\u200D\uD83D\uDCA5)?|\u26F9(?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|\u2764\uFE0F?(?:\u200D(?:\uD83D\uDD25|\uD83E\uDE79))?|\uD83C(?:[\uDC04\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]\uFE0F?|[\uDF85\uDFC2\uDFC7](?:\uD83C[\uDFFB-\uDFFF])?|[\uDFC4\uDFCA](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDFCB\uDFCC](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF43\uDF45-\uDF4A\uDF4C-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uDDE6\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF]|\uDDE7\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF]|\uDDE8\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF7\uDDFA-\uDDFF]|\uDDE9\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF]|\uDDEA\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA]|\uDDEB\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7]|\uDDEC\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE]|\uDDED\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA]|\uDDEE\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9]|\uDDEF\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5]|\uDDF0\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF]|\uDDF1\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE]|\uDDF2\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF]|\uDDF3\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF]|\uDDF4\uD83C\uDDF2|\uDDF5\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE]|\uDDF6\uD83C\uDDE6|\uDDF7\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC]|\uDDF8\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF]|\uDDF9\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF]|\uDDFA\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF]|\uDDFB\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA]|\uDDFC\uD83C[\uDDEB\uDDF8]|\uDDFD\uD83C\uDDF0|\uDDFE\uD83C[\uDDEA\uDDF9]|\uDDFF\uD83C[\uDDE6\uDDF2\uDDFC]|\uDF44(?:\u200D\uD83D\uDFEB)?|\uDF4B(?:\u200D\uD83D\uDFE9)?|\uDFC3(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDFF3\uFE0F?(?:\u200D(?:\u26A7\uFE0F?|\uD83C\uDF08))?|\uDFF4(?:\u200D\u2620\uFE0F?|\uDB40\uDC67\uDB40\uDC62\uDB40(?:\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDC73\uDB40\uDC63\uDB40\uDC74|\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F)?)|\uD83D(?:[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3]\uFE0F?|[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC](?:\uD83C[\uDFFB-\uDFFF])?|[\uDC6E-\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4\uDEB5](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD74\uDD90](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?|[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC25\uDC27-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE41\uDE43\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED8\uDEDC-\uDEDF\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB\uDFF0]|\uDC08(?:\u200D\u2B1B)?|\uDC15(?:\u200D\uD83E\uDDBA)?|\uDC26(?:\u200D(?:\u2B1B|\uD83D\uDD25))?|\uDC3B(?:\u200D\u2744\uFE0F?)?|\uDC41\uFE0F?(?:\u200D\uD83D\uDDE8\uFE0F?)?|\uDC68(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDC68\uDC69]\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFC-\uDFFF])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFC-\uDFFF]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFD-\uDFFF]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFD\uDFFF]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFE])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFE]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?))?|\uDC69(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?[\uDC68\uDC69]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?|\uDC69\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?))|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFC-\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFC-\uDFFF]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFD-\uDFFF]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFD\uDFFF]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFB-\uDFFE])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFE]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFB-\uDFFE])))?))?|\uDD75(?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDE2E(?:\u200D\uD83D\uDCA8)?|\uDE35(?:\u200D\uD83D\uDCAB)?|\uDE36(?:\u200D\uD83C\uDF2B\uFE0F?)?|\uDE42(?:\u200D[\u2194\u2195]\uFE0F?)?|\uDEB6(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?)|\uD83E(?:[\uDD0C\uDD0F\uDD18-\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5\uDEC3-\uDEC5\uDEF0\uDEF2-\uDEF8](?:\uD83C[\uDFFB-\uDFFF])?|[\uDD26\uDD35\uDD37-\uDD39\uDD3C-\uDD3E\uDDB8\uDDB9\uDDCD\uDDCF\uDDD4\uDDD6-\uDDDD](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDDDE\uDDDF](?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD0D\uDD0E\uDD10-\uDD17\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCC\uDDD0\uDDE0-\uDDFF\uDE70-\uDE7C\uDE80-\uDE8A\uDE8E-\uDEC2\uDEC6\uDEC8\uDECD-\uDEDC\uDEDF-\uDEEA\uDEEF]|\uDDCE(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDDD1(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1|\uDDD1\u200D\uD83E\uDDD2(?:\u200D\uD83E\uDDD2)?|\uDDD2(?:\u200D\uD83E\uDDD2)?))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE])))?))?|\uDEF1(?:\uD83C(?:\uDFFB(?:\u200D\uD83E\uDEF2\uD83C[\uDFFC-\uDFFF])?|\uDFFC(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFD-\uDFFF])?|\uDFFD(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])?|\uDFFE(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFD\uDFFF])?|\uDFFF(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFE])?))?)/g;
4
+ };