decocms 2.304.1 → 2.304.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (347) hide show
  1. package/dist/client/assets/{AlertCircle-Bmjr0ClA.js → AlertCircle-9O6VvAfH.js} +1 -1
  2. package/dist/client/assets/{ArrowNarrowLeft-CThwX0q-.js → ArrowNarrowLeft-CG2ODQbf.js} +1 -1
  3. package/dist/client/assets/{ArrowUpRight-B7vTMj1u.js → ArrowUpRight-C7hCAEbW.js} +1 -1
  4. package/dist/client/assets/{CheckCircle-CNaz4scY.js → CheckCircle-BbvAf9Bo.js} +1 -1
  5. package/dist/client/assets/{ChevronDown-BMpzZvgp.js → ChevronDown-DTujp_Ze.js} +1 -1
  6. package/dist/client/assets/{ChevronRight-B0WDiR9g.js → ChevronRight-DmfKIycz.js} +1 -1
  7. package/dist/client/assets/{ChevronUp-C1KppMC5.js → ChevronUp-k_xkdO-G.js} +1 -1
  8. package/dist/client/assets/{Container-DxKKEmNe.js → Container-Dwj81gCC.js} +1 -1
  9. package/dist/client/assets/{DotsVertical-CRTfJ6MH.js → DotsVertical-BSgCnoHf.js} +1 -1
  10. package/dist/client/assets/{LinkExternal01-DcUPNTey.js → LinkExternal01-DceZ2oEY.js} +1 -1
  11. package/dist/client/assets/{Lock01-CwYOwvXR.js → Lock01-NMXz4ptn.js} +1 -1
  12. package/dist/client/assets/{Palette-c4ovbTBC.js → Palette-dLUnn7-k.js} +1 -1
  13. package/dist/client/assets/{Play-BzawbqMW.js → Play-DBJO09gj.js} +1 -1
  14. package/dist/client/assets/{Plus-CZq1C4jM.js → Plus-D5DLeNpq.js} +1 -1
  15. package/dist/client/assets/{RefreshCcw01-Dwpnc1qZ.js → RefreshCcw01-B6WkaYVq.js} +1 -1
  16. package/dist/client/assets/{SearchMd-BYUE-oTe.js → SearchMd-CCDT-gCm.js} +1 -1
  17. package/dist/client/assets/{Settings02-FFAtt7kb.js → Settings02-CnaVYpiu.js} +1 -1
  18. package/dist/client/assets/{Shield01-CZOC16WM.js → Shield01-Bqcf2bTH.js} +1 -1
  19. package/dist/client/assets/{Star01-GaFk6Xa_.js → Star01-SeWnXAup.js} +1 -1
  20. package/dist/client/assets/{Sun-_nS1eHVw.js → Sun-0NoCfqDs.js} +1 -1
  21. package/dist/client/assets/{Tool01-CpBRL57v.js → Tool01-CNtQXBy4.js} +1 -1
  22. package/dist/client/assets/{Trash01-CKEJHaXR.js → Trash01-UTo49HDl.js} +1 -1
  23. package/dist/client/assets/{User01-BO3afenP.js → User01-CVlz7odd.js} +1 -1
  24. package/dist/client/assets/{Users03-B2dn7j_S.js → Users03-X35A5ADD.js} +1 -1
  25. package/dist/client/assets/{X-BY4Cj76l.js → X-CeTLIvc6.js} +1 -1
  26. package/dist/client/assets/{XCircle-H-paIGFm.js → XCircle-DtPL7zg0.js} +1 -1
  27. package/dist/client/assets/{XClose-ihnqmUfp.js → XClose-C2Cy4nwy.js} +1 -1
  28. package/dist/client/assets/{Zap-BafO525R.js → Zap-D1n1nJno.js} +1 -1
  29. package/dist/client/assets/{ZapSquare-BFMe5Mv9.js → ZapSquare-Wt7N_ZY-.js} +1 -1
  30. package/dist/client/assets/{accordion-DJ9g6lbv.js → accordion-DPxobU6V.js} +1 -1
  31. package/dist/client/assets/{agent-icon-3dvecirS.js → agent-icon-rfR6G8ak.js} +1 -1
  32. package/dist/client/assets/{agents-list-C3oLVAtv.js → agents-list-CSAgVNG9.js} +1 -1
  33. package/dist/client/assets/ai-providers-BWpsfrqy.js +1 -0
  34. package/dist/client/assets/{alert-dialog-BaDMThMD.js → alert-dialog-FP3uTtqS.js} +1 -1
  35. package/dist/client/assets/{auth-catchall-DyAp9W_K.js → auth-catchall-x57v3jqK.js} +1 -1
  36. package/dist/client/assets/{automation-list-row-BZ5pc5Hf.js → automation-list-row-DG25MDBi.js} +1 -1
  37. package/dist/client/assets/{automations-NFa1s-Bh.js → automations-Dvzmj3cQ.js} +1 -1
  38. package/dist/client/assets/{avatar-D8_rUBWz.js → avatar-jxKfgW3P.js} +1 -1
  39. package/dist/client/assets/{badge-DdmMZRNT.js → badge-DSbZ2xYh.js} +1 -1
  40. package/dist/client/assets/{brand-context-Bze-d_ZO.js → brand-context-BnZBvexH.js} +1 -1
  41. package/dist/client/assets/{card-BsUopeoI.js → card-DxIIO9TM.js} +1 -1
  42. package/dist/client/assets/{chat-context-DfbXSilM.js → chat-context-BFu5v0t2.js} +1 -1
  43. package/dist/client/assets/{checkbox-D9P4N8hw.js → checkbox-BC2-36Db.js} +1 -1
  44. package/dist/client/assets/{collection-detail-D-8PAzvK.js → collection-detail-CD-QyUWU.js} +1 -1
  45. package/dist/client/assets/{collection-display-button-B0aY08zq.js → collection-display-button-C_CtGElp.js} +1 -1
  46. package/dist/client/assets/{collection-search-C4AgxGiz.js → collection-search-C4byKAjw.js} +1 -1
  47. package/dist/client/assets/{collection-search-Dlp7iCDd.js → collection-search-D4u3PzGA.js} +1 -1
  48. package/dist/client/assets/{collection-table-wrapper-CQMKVKSx.js → collection-table-wrapper-C_-94CeK.js} +1 -1
  49. package/dist/client/assets/{collection-tabs-C9tMEUhv.js → collection-tabs-gMfs6Afq.js} +1 -1
  50. package/dist/client/assets/{collections-BDAFtlmY.js → collections-D7GHHPCg.js} +1 -1
  51. package/dist/client/assets/{command-CQ2qBZMm.js → command-rz34Ys0W.js} +1 -1
  52. package/dist/client/assets/{connection-card-DwOSEuv8.js → connection-card-B9DKOCXt.js} +1 -1
  53. package/dist/client/assets/{connection-detail-CawEIpU7.js → connection-detail-DsF7Nr0a.js} +1 -1
  54. package/dist/client/assets/{connection-form-helpers-D2ynuhjT.js → connection-form-helpers-Dr9CZ_1s.js} +1 -1
  55. package/dist/client/assets/{connections-CpSP7u11.js → connections-C8H8V7wn.js} +1 -1
  56. package/dist/client/assets/{constants-8SUUmfde.js → constants-DzBa_pVv.js} +1 -1
  57. package/dist/client/assets/{constants-dX65r6Zc.js → constants-ZacFr8c8.js} +1 -1
  58. package/dist/client/assets/{dialog-C09MDdtC.js → dialog-DJXnl186.js} +1 -1
  59. package/dist/client/assets/{domain-settings-C8zQRIa5.js → domain-settings-B6gsJfGm.js} +1 -1
  60. package/dist/client/assets/{drawer-CgP97_zn.js → drawer-CKRLj2vr.js} +1 -1
  61. package/dist/client/assets/{dropdown-menu-BUQ2j94Z.js → dropdown-menu-BxJLGp-F.js} +1 -1
  62. package/dist/client/assets/{dynamic-plugin-layout-D01hx5Sr.js → dynamic-plugin-layout-EgA1-G6Q.js} +1 -1
  63. package/dist/client/assets/{empty-state-CDSs8u5J.js → empty-state-DP9kvNKh.js} +1 -1
  64. package/dist/client/assets/{empty-state-CnWmYGyJ.js → empty-state-VyFb4d0_.js} +1 -1
  65. package/dist/client/assets/{extract-connection-data-BksUB8IU.js → extract-connection-data-DV87vwuC.js} +1 -1
  66. package/dist/client/assets/{features-DbY_j0po.js → features-CKG88lyc.js} +1 -1
  67. package/dist/client/assets/{form-D7lwTpan.js → form-Crn7uG02.js} +1 -1
  68. package/dist/client/assets/{general-ClAAY_hM.js → general-DN5VLZqF.js} +1 -1
  69. package/dist/client/assets/{index-Cqw0FyHL.js → index-B3pJqV9Y.js} +2 -2
  70. package/dist/client/assets/{index-BHEM4T0P.js → index-B6JiqoZb.js} +1 -1
  71. package/dist/client/assets/index-B8vmm8Mh.js +1 -0
  72. package/dist/client/assets/{index-CKVeIfog.js → index-BAGdGx2X.js} +1 -1
  73. package/dist/client/assets/{index-BfFMVpP_.js → index-BQYge0uD.js} +1 -1
  74. package/dist/client/assets/{index-zf-rleQN.js → index-BUmhrApd.js} +15 -15
  75. package/dist/client/assets/{index-C_Adeshs.js → index-Bw6Vawnl.js} +1 -1
  76. package/dist/client/assets/{index-8uCGLU1q.js → index-C7apxcAd.js} +1 -1
  77. package/dist/client/assets/{index-BfFwypL5.js → index-CD0IZENy.js} +1 -1
  78. package/dist/client/assets/{index-DHwV9q9X.js → index-Cg6ppcFr.js} +1 -1
  79. package/dist/client/assets/{index-stoVKXMu.js → index-Crppsl-8.js} +1 -1
  80. package/dist/client/assets/{index-B7KZ-vdQ.js → index-DMLydKBU.js} +1 -1
  81. package/dist/client/assets/{index-DH_JeBfm.js → index-DPV7Oao4.js} +1 -1
  82. package/dist/client/assets/{index-DRij5nf9.js → index-DkUpgHdS.js} +1 -1
  83. package/dist/client/assets/{index-BT2v6iP4.js → index-Dql_sPLp.js} +1 -1
  84. package/dist/client/assets/{index-Eg0bSiJp.js → index-vUSuyfsm.js} +1 -1
  85. package/dist/client/assets/{infiniteQueryObserver-DdGFkAXb.js → infiniteQueryObserver-FXpIkCb9.js} +1 -1
  86. package/dist/client/assets/{input-Co0HW9uN.js → input-DylFJb_s.js} +1 -1
  87. package/dist/client/assets/{integration-icon-DmwSpOA7.js → integration-icon-BrsREj94.js} +1 -1
  88. package/dist/client/assets/{label-CeKVWPbr.js → label-BMcf8C3G.js} +1 -1
  89. package/dist/client/assets/{layout-Tnq2i3zg.js → layout-Dp2Exmc7.js} +1 -1
  90. package/dist/client/assets/{lean-canvas-recruit-modal-BU3z415J.js → lean-canvas-recruit-modal-DrBzPrQ5.js} +1 -1
  91. package/dist/client/assets/{login-CWTb0-fH.js → login-B4OITSYv.js} +1 -1
  92. package/dist/client/assets/{members-Bj1Fn746.js → members-CyDwQ7ZL.js} +1 -1
  93. package/dist/client/assets/{monaco-editor-qXNTtuH2.js → monaco-editor-CQLG9APn.js} +1 -1
  94. package/dist/client/assets/{monitoring-stats-row-yM4e_YZD.js → monitoring-stats-row-Mv3iWLF5.js} +1 -1
  95. package/dist/client/assets/{oauth-callback-CdB6DJDA.js → oauth-callback-D86cP5gF.js} +1 -1
  96. package/dist/client/assets/{oauth-callback-ai-provider-BgDs3na5.js → oauth-callback-ai-provider-B2xTvzHM.js} +1 -1
  97. package/dist/client/assets/{onboarding-DKG_eIr1.js → onboarding-BVoZJerk.js} +1 -1
  98. package/dist/client/assets/{org-layout-Dl85hYyi.js → org-layout-DvQadC0N.js} +1 -1
  99. package/dist/client/assets/{org-plugin-layout-BjSThyiS.js → org-plugin-layout-CZcCVNv6.js} +1 -1
  100. package/dist/client/assets/{pair-1dEJPLek.js → pair-D0CyaFmX.js} +1 -1
  101. package/dist/client/assets/{plugin-empty-state-Don4CmqW.js → plugin-empty-state-BYazHRIg.js} +1 -1
  102. package/dist/client/assets/{plugin-header-B8c9MPqH.js → plugin-header-BNYKRXC9.js} +1 -1
  103. package/dist/client/assets/{plugin-layout-Cl6_YUJ2.js → plugin-layout-BWoK3Wuc.js} +1 -1
  104. package/dist/client/assets/{popover-vkIPXKru.js → popover-CUnDbgJ2.js} +1 -1
  105. package/dist/client/assets/{profile-Biqh2ggJ.js → profile-CzybNlff.js} +1 -1
  106. package/dist/client/assets/{project-app-view-DSY0SCnx.js → project-app-view-CJwFT9Ix.js} +1 -1
  107. package/dist/client/assets/registry-Dfum406p.js +2 -0
  108. package/dist/client/assets/{registry-layout-BHVIlZsW.js → registry-layout-DRAqgrZS.js} +1 -1
  109. package/dist/client/assets/{required-auth-layout-1Kf8B8P9.js → required-auth-layout-BqWuvVf2.js} +1 -1
  110. package/dist/client/assets/{reset-password-CZU-BGGi.js → reset-password-kytluBmt.js} +1 -1
  111. package/dist/client/assets/{roles-V0vn58qZ.js → roles-Ds1RHbZR.js} +1 -1
  112. package/dist/client/assets/{scroll-area-BF4q7Ra2.js → scroll-area-3cZxZboM.js} +1 -1
  113. package/dist/client/assets/{search-input-VyjPISbx.js → search-input-BmVPc4RV.js} +1 -1
  114. package/dist/client/assets/{select-rxK-8b1N.js → select-FyLwzc48.js} +1 -1
  115. package/dist/client/assets/{select-model-CGzdU4-Q.js → select-model-67avCsXE.js} +1 -1
  116. package/dist/client/assets/{settings-layout-Bc0g8WOL.js → settings-layout-BqPzbZI_.js} +1 -1
  117. package/dist/client/assets/{settings-section-BsEmPevi.js → settings-section-XEp6UNJA.js} +1 -1
  118. package/dist/client/assets/{shell-layout-BhC55LLx.js → shell-layout-BiL6-6W9.js} +1 -1
  119. package/dist/client/assets/{skeleton-y3O4xgdS.js → skeleton-BWYBZf7m.js} +1 -1
  120. package/dist/client/assets/{sso-Di8r0acw.js → sso-CuSDTfdG.js} +1 -1
  121. package/dist/client/assets/{store-B9Zqk-bV.js → store-CHGpyb-m.js} +1 -1
  122. package/dist/client/assets/store-registry-BtOOqHJ7.js +2 -0
  123. package/dist/client/assets/{switch-QErK7wwO.js → switch-BL_ICveF.js} +1 -1
  124. package/dist/client/assets/{table-CdyHz2p3.js → table-Cri7VAeb.js} +1 -1
  125. package/dist/client/assets/{tabs-CMFQWy73.js → tabs-DGNL4gIl.js} +1 -1
  126. package/dist/client/assets/{task-status-D0-O3Mr3.js → task-status-BsVHYvla.js} +1 -1
  127. package/dist/client/assets/{textarea-CxEqGfix.js → textarea-B1YgZKSW.js} +1 -1
  128. package/dist/client/assets/{toggle-group-AZijjpe8.js → toggle-group-cD20__YI.js} +1 -1
  129. package/dist/client/assets/{tools-list-DjWGeJBp.js → tools-list-B1QLvdRl.js} +1 -1
  130. package/dist/client/assets/{tooltip-D_3qm7UK.js → tooltip-DZIo6YZX.js} +1 -1
  131. package/dist/client/assets/{types-D1Wl9DNB.js → types-PzC3rVhv.js} +1 -1
  132. package/dist/client/assets/{use-ai-providers-Cah1GZeX.js → use-ai-providers-Dsmx4U8L.js} +1 -1
  133. package/dist/client/assets/{use-collections-DrmuHy93.js → use-collections-DcamXjGg.js} +1 -1
  134. package/dist/client/assets/{use-connection-CyjN1GtI.js → use-connection-CesZaYzK.js} +1 -1
  135. package/dist/client/assets/{use-copy-SV4GW98D.js → use-copy-Chq89Uhn.js} +1 -1
  136. package/dist/client/assets/{use-create-virtual-mcp-Y9XZZ8XI.js → use-create-virtual-mcp-B0T0urBu.js} +1 -1
  137. package/dist/client/assets/{use-decopilot-events-Drlt36bF.js → use-decopilot-events-BCUB3DhH.js} +1 -1
  138. package/dist/client/assets/{use-delete-connection-B955BI0e.js → use-delete-connection-CqpWV7PJ.js} +1 -1
  139. package/dist/client/assets/{use-infinite-scroll-BRF66BxZ.js → use-infinite-scroll-D6FvdXof.js} +1 -1
  140. package/dist/client/assets/{use-list-state-C6Di0aCP.js → use-list-state-D_NiaDpI.js} +1 -1
  141. package/dist/client/assets/{use-mcp-tools-DyKI35iZ.js → use-mcp-tools-oIEGFyCT.js} +1 -1
  142. package/dist/client/assets/{use-members-mnYCaL5_.js → use-members-C3jq0flu.js} +1 -1
  143. package/dist/client/assets/{use-navigate-to-agent-DrWD9J71.js → use-navigate-to-agent-DNFfIi8H.js} +1 -1
  144. package/dist/client/assets/{use-org-auth-client-HeIerkrz.js → use-org-auth-client-BniQTMze.js} +1 -1
  145. package/dist/client/assets/{use-org-sso-BuTv1ygf.js → use-org-sso-SjyAvOWA.js} +1 -1
  146. package/dist/client/assets/{use-organization-roles-ChLRcseg.js → use-organization-roles-CLHZHSel.js} +1 -1
  147. package/dist/client/assets/{use-organization-settings-EfxM66aZ.js → use-organization-settings-C8pMgrh-.js} +1 -1
  148. package/dist/client/assets/{use-registry-connections-fltIDY82.js → use-registry-connections-CPKTZHrX.js} +1 -1
  149. package/dist/client/assets/{use-status-sounds-BRxCV6Ea.js → use-status-sounds-BYyaVEdO.js} +1 -1
  150. package/dist/client/assets/{use-tasks-DEh_VRON.js → use-tasks-D-yLjF43.js} +1 -1
  151. package/dist/client/assets/{use-view-mode-B3nY15Yz.js → use-view-mode-C06qcP9p.js} +1 -1
  152. package/dist/client/assets/{use-virtual-mcp-Bb04Uah7.js → use-virtual-mcp-CEUQCho1.js} +1 -1
  153. package/dist/client/assets/useInfiniteQuery-ANrroW8x.js +1 -0
  154. package/dist/client/assets/useSuspenseInfiniteQuery-CgFHp-eh.js +1 -0
  155. package/dist/client/assets/{user-ClafvvGL.js → user-DlFqYjZ6.js} +1 -1
  156. package/dist/client/assets/{view-mode-toggle-Im7J4smk.js → view-mode-toggle-CiYPbOW7.js} +1 -1
  157. package/dist/client/assets/{workflow-u6doascD.js → workflow-CYF9ayPN.js} +1 -1
  158. package/dist/client/assets/workflow-detail-DVsv_zWc.js +1 -0
  159. package/dist/client/index.html +1 -1
  160. package/dist/server/cli.js +1 -1
  161. package/dist/server/node_modules/get-east-asian-width/index.d.ts +60 -0
  162. package/dist/server/node_modules/get-east-asian-width/index.js +30 -0
  163. package/dist/server/node_modules/get-east-asian-width/lookup-data.js +18 -0
  164. package/dist/server/node_modules/get-east-asian-width/lookup.js +135 -0
  165. package/dist/server/node_modules/get-east-asian-width/package.json +71 -0
  166. package/dist/server/node_modules/get-east-asian-width/readme.md +65 -0
  167. package/dist/server/node_modules/get-east-asian-width/utilities.js +24 -0
  168. package/dist/server/node_modules/mimic-fn/index.d.ts +54 -0
  169. package/dist/server/node_modules/mimic-fn/index.js +13 -0
  170. package/dist/server/node_modules/mimic-fn/package.json +42 -0
  171. package/dist/server/node_modules/mimic-fn/readme.md +69 -0
  172. package/dist/server/node_modules/pg/README.md +95 -0
  173. package/dist/server/node_modules/pg/esm/index.mjs +20 -0
  174. package/dist/server/node_modules/pg/lib/client.js +743 -0
  175. package/dist/server/node_modules/pg/lib/connection-parameters.js +171 -0
  176. package/dist/server/node_modules/pg/lib/connection.js +221 -0
  177. package/dist/server/node_modules/pg/lib/crypto/cert-signatures.js +122 -0
  178. package/dist/server/node_modules/pg/lib/crypto/sasl.js +212 -0
  179. package/dist/server/node_modules/pg/lib/crypto/utils-legacy.js +43 -0
  180. package/dist/server/node_modules/pg/lib/crypto/utils-webcrypto.js +89 -0
  181. package/dist/server/node_modules/pg/lib/crypto/utils.js +9 -0
  182. package/dist/server/node_modules/pg/lib/defaults.js +91 -0
  183. package/dist/server/node_modules/pg/lib/index.js +73 -0
  184. package/dist/server/node_modules/pg/lib/native/client.js +323 -0
  185. package/dist/server/node_modules/pg/lib/native/index.js +2 -0
  186. package/dist/server/node_modules/pg/lib/native/query.js +165 -0
  187. package/dist/server/node_modules/pg/lib/query.js +252 -0
  188. package/dist/server/node_modules/pg/lib/result.js +109 -0
  189. package/dist/server/node_modules/pg/lib/stream.js +83 -0
  190. package/dist/server/node_modules/pg/lib/type-overrides.js +35 -0
  191. package/dist/server/node_modules/pg/lib/utils.js +217 -0
  192. package/dist/server/node_modules/pg/package.json +76 -0
  193. package/dist/server/node_modules/strip-ansi/index.d.ts +15 -0
  194. package/dist/server/node_modules/strip-ansi/index.js +19 -0
  195. package/dist/server/node_modules/{ansi-regex → strip-ansi}/package.json +18 -20
  196. package/dist/server/node_modules/strip-ansi/readme.md +37 -0
  197. package/package.json +1 -1
  198. package/dist/client/assets/ai-providers-BnFAoUUB.js +0 -1
  199. package/dist/client/assets/index-1cERBOeE.js +0 -1
  200. package/dist/client/assets/registry-B4DkMjbe.js +0 -2
  201. package/dist/client/assets/store-registry-RqxELDy6.js +0 -2
  202. package/dist/client/assets/useInfiniteQuery-CY4tnydB.js +0 -1
  203. package/dist/client/assets/useSuspenseInfiniteQuery-BFpIngH9.js +0 -1
  204. package/dist/client/assets/workflow-detail-Cr5QMF9R.js +0 -1
  205. package/dist/server/node_modules/ansi-regex/index.d.ts +0 -33
  206. package/dist/server/node_modules/ansi-regex/index.js +0 -14
  207. package/dist/server/node_modules/ansi-regex/readme.md +0 -66
  208. package/dist/server/node_modules/ansi-styles/index.d.ts +0 -236
  209. package/dist/server/node_modules/ansi-styles/index.js +0 -223
  210. package/dist/server/node_modules/ansi-styles/package.json +0 -54
  211. package/dist/server/node_modules/ansi-styles/readme.md +0 -173
  212. package/dist/server/node_modules/convert-to-spaces/dist/index.d.ts +0 -2
  213. package/dist/server/node_modules/convert-to-spaces/dist/index.js +0 -4
  214. package/dist/server/node_modules/convert-to-spaces/license +0 -21
  215. package/dist/server/node_modules/convert-to-spaces/package.json +0 -40
  216. package/dist/server/node_modules/convert-to-spaces/readme.md +0 -39
  217. package/dist/server/node_modules/emoji-regex/LICENSE-MIT.txt +0 -20
  218. package/dist/server/node_modules/emoji-regex/README.md +0 -107
  219. package/dist/server/node_modules/emoji-regex/index.d.ts +0 -3
  220. package/dist/server/node_modules/emoji-regex/index.js +0 -4
  221. package/dist/server/node_modules/emoji-regex/index.mjs +0 -4
  222. package/dist/server/node_modules/emoji-regex/package.json +0 -45
  223. package/dist/server/node_modules/environment/index.d.ts +0 -74
  224. package/dist/server/node_modules/environment/index.js +0 -47
  225. package/dist/server/node_modules/environment/license +0 -9
  226. package/dist/server/node_modules/environment/package.json +0 -74
  227. package/dist/server/node_modules/environment/readme.md +0 -94
  228. package/dist/server/node_modules/escape-string-regexp/index.d.ts +0 -18
  229. package/dist/server/node_modules/escape-string-regexp/index.js +0 -11
  230. package/dist/server/node_modules/escape-string-regexp/package.json +0 -43
  231. package/dist/server/node_modules/escape-string-regexp/readme.md +0 -29
  232. package/dist/server/node_modules/is-fullwidth-code-point/index.d.ts +0 -17
  233. package/dist/server/node_modules/is-fullwidth-code-point/index.js +0 -12
  234. package/dist/server/node_modules/is-fullwidth-code-point/license +0 -9
  235. package/dist/server/node_modules/is-fullwidth-code-point/package.json +0 -53
  236. package/dist/server/node_modules/is-fullwidth-code-point/readme.md +0 -31
  237. package/dist/server/node_modules/pg-cloudflare/README.md +0 -112
  238. package/dist/server/node_modules/pg-cloudflare/dist/empty.d.ts +0 -2
  239. package/dist/server/node_modules/pg-cloudflare/dist/empty.js +0 -6
  240. package/dist/server/node_modules/pg-cloudflare/dist/empty.js.map +0 -1
  241. package/dist/server/node_modules/pg-cloudflare/dist/index.d.ts +0 -31
  242. package/dist/server/node_modules/pg-cloudflare/dist/index.js +0 -152
  243. package/dist/server/node_modules/pg-cloudflare/dist/index.js.map +0 -1
  244. package/dist/server/node_modules/pg-cloudflare/esm/index.mjs +0 -3
  245. package/dist/server/node_modules/pg-cloudflare/package.json +0 -39
  246. package/dist/server/node_modules/pg-cloudflare/src/empty.ts +0 -3
  247. package/dist/server/node_modules/pg-cloudflare/src/index.ts +0 -166
  248. package/dist/server/node_modules/pg-cloudflare/src/types.d.ts +0 -25
  249. package/dist/server/node_modules/pg-connection-string/LICENSE +0 -21
  250. package/dist/server/node_modules/pg-connection-string/README.md +0 -105
  251. package/dist/server/node_modules/pg-connection-string/esm/index.mjs +0 -8
  252. package/dist/server/node_modules/pg-connection-string/index.d.ts +0 -36
  253. package/dist/server/node_modules/pg-connection-string/index.js +0 -231
  254. package/dist/server/node_modules/pg-connection-string/package.json +0 -52
  255. package/dist/server/node_modules/pg-int8/LICENSE +0 -13
  256. package/dist/server/node_modules/pg-int8/README.md +0 -16
  257. package/dist/server/node_modules/pg-int8/index.js +0 -100
  258. package/dist/server/node_modules/pg-int8/package.json +0 -24
  259. package/dist/server/node_modules/pg-pool/LICENSE +0 -21
  260. package/dist/server/node_modules/pg-pool/README.md +0 -357
  261. package/dist/server/node_modules/pg-pool/esm/index.mjs +0 -5
  262. package/dist/server/node_modules/pg-pool/index.js +0 -517
  263. package/dist/server/node_modules/pg-pool/package.json +0 -51
  264. package/dist/server/node_modules/pg-protocol/LICENSE +0 -21
  265. package/dist/server/node_modules/pg-protocol/README.md +0 -3
  266. package/dist/server/node_modules/pg-protocol/dist/b.d.ts +0 -1
  267. package/dist/server/node_modules/pg-protocol/dist/b.js +0 -23
  268. package/dist/server/node_modules/pg-protocol/dist/b.js.map +0 -1
  269. package/dist/server/node_modules/pg-protocol/dist/buffer-reader.d.ts +0 -15
  270. package/dist/server/node_modules/pg-protocol/dist/buffer-reader.js +0 -55
  271. package/dist/server/node_modules/pg-protocol/dist/buffer-reader.js.map +0 -1
  272. package/dist/server/node_modules/pg-protocol/dist/buffer-writer.d.ts +0 -16
  273. package/dist/server/node_modules/pg-protocol/dist/buffer-writer.js +0 -81
  274. package/dist/server/node_modules/pg-protocol/dist/buffer-writer.js.map +0 -1
  275. package/dist/server/node_modules/pg-protocol/dist/inbound-parser.test.d.ts +0 -1
  276. package/dist/server/node_modules/pg-protocol/dist/inbound-parser.test.js +0 -530
  277. package/dist/server/node_modules/pg-protocol/dist/inbound-parser.test.js.map +0 -1
  278. package/dist/server/node_modules/pg-protocol/dist/index.d.ts +0 -6
  279. package/dist/server/node_modules/pg-protocol/dist/index.js +0 -15
  280. package/dist/server/node_modules/pg-protocol/dist/index.js.map +0 -1
  281. package/dist/server/node_modules/pg-protocol/dist/messages.d.ts +0 -162
  282. package/dist/server/node_modules/pg-protocol/dist/messages.js +0 -160
  283. package/dist/server/node_modules/pg-protocol/dist/messages.js.map +0 -1
  284. package/dist/server/node_modules/pg-protocol/dist/outbound-serializer.test.d.ts +0 -1
  285. package/dist/server/node_modules/pg-protocol/dist/outbound-serializer.test.js +0 -252
  286. package/dist/server/node_modules/pg-protocol/dist/outbound-serializer.test.js.map +0 -1
  287. package/dist/server/node_modules/pg-protocol/dist/parser.d.ts +0 -24
  288. package/dist/server/node_modules/pg-protocol/dist/parser.js +0 -324
  289. package/dist/server/node_modules/pg-protocol/dist/parser.js.map +0 -1
  290. package/dist/server/node_modules/pg-protocol/dist/serializer.d.ts +0 -42
  291. package/dist/server/node_modules/pg-protocol/dist/serializer.js +0 -189
  292. package/dist/server/node_modules/pg-protocol/dist/serializer.js.map +0 -1
  293. package/dist/server/node_modules/pg-protocol/esm/index.js +0 -11
  294. package/dist/server/node_modules/pg-protocol/package.json +0 -45
  295. package/dist/server/node_modules/pg-protocol/src/b.ts +0 -25
  296. package/dist/server/node_modules/pg-protocol/src/buffer-reader.ts +0 -58
  297. package/dist/server/node_modules/pg-protocol/src/buffer-writer.ts +0 -85
  298. package/dist/server/node_modules/pg-protocol/src/inbound-parser.test.ts +0 -575
  299. package/dist/server/node_modules/pg-protocol/src/index.ts +0 -11
  300. package/dist/server/node_modules/pg-protocol/src/messages.ts +0 -262
  301. package/dist/server/node_modules/pg-protocol/src/outbound-serializer.test.ts +0 -276
  302. package/dist/server/node_modules/pg-protocol/src/parser.ts +0 -413
  303. package/dist/server/node_modules/pg-protocol/src/serializer.ts +0 -274
  304. package/dist/server/node_modules/pg-protocol/src/testing/buffer-list.ts +0 -67
  305. package/dist/server/node_modules/pg-protocol/src/testing/test-buffers.ts +0 -166
  306. package/dist/server/node_modules/pg-protocol/src/types/chunky.d.ts +0 -1
  307. package/dist/server/node_modules/pg-types/.travis.yml +0 -7
  308. package/dist/server/node_modules/pg-types/Makefile +0 -14
  309. package/dist/server/node_modules/pg-types/README.md +0 -75
  310. package/dist/server/node_modules/pg-types/index.d.ts +0 -137
  311. package/dist/server/node_modules/pg-types/index.js +0 -47
  312. package/dist/server/node_modules/pg-types/index.test-d.ts +0 -21
  313. package/dist/server/node_modules/pg-types/lib/arrayParser.js +0 -11
  314. package/dist/server/node_modules/pg-types/lib/binaryParsers.js +0 -257
  315. package/dist/server/node_modules/pg-types/lib/builtins.js +0 -73
  316. package/dist/server/node_modules/pg-types/lib/textParsers.js +0 -215
  317. package/dist/server/node_modules/pg-types/package.json +0 -42
  318. package/dist/server/node_modules/pg-types/test/index.js +0 -24
  319. package/dist/server/node_modules/pg-types/test/types.js +0 -597
  320. package/dist/server/node_modules/pgpass/README.md +0 -74
  321. package/dist/server/node_modules/pgpass/lib/helper.js +0 -233
  322. package/dist/server/node_modules/pgpass/lib/index.js +0 -23
  323. package/dist/server/node_modules/pgpass/package.json +0 -41
  324. package/dist/server/node_modules/postgres-array/index.d.ts +0 -4
  325. package/dist/server/node_modules/postgres-array/index.js +0 -97
  326. package/dist/server/node_modules/postgres-array/license +0 -21
  327. package/dist/server/node_modules/postgres-array/package.json +0 -35
  328. package/dist/server/node_modules/postgres-array/readme.md +0 -43
  329. package/dist/server/node_modules/postgres-bytea/index.js +0 -33
  330. package/dist/server/node_modules/postgres-bytea/license +0 -21
  331. package/dist/server/node_modules/postgres-bytea/package.json +0 -34
  332. package/dist/server/node_modules/postgres-bytea/readme.md +0 -34
  333. package/dist/server/node_modules/postgres-interval/index.d.ts +0 -20
  334. package/dist/server/node_modules/postgres-interval/index.js +0 -125
  335. package/dist/server/node_modules/postgres-interval/license +0 -21
  336. package/dist/server/node_modules/postgres-interval/package.json +0 -36
  337. package/dist/server/node_modules/postgres-interval/readme.md +0 -48
  338. package/dist/server/node_modules/split2/LICENSE +0 -13
  339. package/dist/server/node_modules/split2/README.md +0 -85
  340. package/dist/server/node_modules/split2/bench.js +0 -27
  341. package/dist/server/node_modules/split2/index.js +0 -141
  342. package/dist/server/node_modules/split2/package.json +0 -39
  343. package/dist/server/node_modules/split2/test.js +0 -409
  344. /package/dist/server/node_modules/{ansi-regex → get-east-asian-width}/license +0 -0
  345. /package/dist/server/node_modules/{escape-string-regexp → mimic-fn}/license +0 -0
  346. /package/dist/server/node_modules/{pg-cloudflare → pg}/LICENSE +0 -0
  347. /package/dist/server/node_modules/{ansi-styles → strip-ansi}/license +0 -0
@@ -1627,7 +1627,7 @@ AS SELECT
1627
1627
  FROM monitoring_metrics
1628
1628
  GROUP BY organization_id, name, bucket, connection_id, tool_name, status
1629
1629
  `}),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 yA1(X){let Y={...process.env},G=c$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(() => (v$1(),C$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(() => (d30(),ph4));await K(W.databaseUrl);let{createDatabase:H}=await Promise.resolve().then(() => (QU(),ih4)),{migrateToLatest:U}=await Promise.resolve().then(() => (so4(),oo4)),B=H(W.databaseUrl);await U({keepOpen:!0,database:B,skipBetterAuth:!0})}if(G.settings.clickhouseUrl){let{ensureClickHouseRollup:K}=await Promise.resolve().then(() => ee4);await K(G.settings.clickhouseUrl)}let $={...G.settings,databaseUrl:W.databaseUrl,natsUrls:W.natsUrls};return jt1($),{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 wN0=D(()=>{Vt1();l9()});var gA1={};T0(gA1,{updateService:()=>et,toggleViewMode:()=>EN0,toggleVibeState:()=>qN0,toggleLogFlow:()=>PN0,subscribeCliState:()=>RX1,setVibe:()=>it5,setTuiConsoleIntercepted:()=>xA1,setServerUrl:()=>kX1,setMigrationsDone:()=>SX1,setEnv:()=>CX1,setDevMode:()=>dt5,setDataDir:()=>ct5,isTuiConsoleIntercepted:()=>hA1,getCliState:()=>MX1,addLogEntry:()=>$z});function qU(){for(let X of LN0)X()}function MX1(){return X7}function RX1(X){return LN0.add(X),()=>LN0.delete(X)}function et(X){X7={...X7,services:X7.services.map((Y)=>Y.name===X.name?X:Y)},qU()}function SX1(){X7={...X7,migrationsStatus:"done"},qU()}function kX1(X){X7={...X7,serverUrl:X},qU()}function CX1(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 dt5(){X7={...X7,services:[...X7.services,{name:"Vite",status:"pending",port:0}]},qU()}function EN0(){X7={...X7,viewMode:X7.viewMode==="requests"?"config":"requests"},qU()}function PN0(){X7={...X7,logFlow:!X7.logFlow},qU()}function ct5(X){X7={...X7,dataDir:X},qU()}function it5(X){X7={...X7,vibe:X},qU()}function qN0(){X7={...X7,vibe:!X7.vibe},qU()}function xA1(X){X16=X}function hA1(){return X16}var X7,LN0,X16=!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},LN0=new Set});import{createServer as Y16}from"net";function pt5(X){return new Promise((Y)=>{let G=Y16();G.once("error",()=>Y(!1)),G.listen(X,"0.0.0.0",()=>{G.close(()=>Y(!0))})})}async function uA1(X){if(await pt5(X))return X;let Y=await new Promise((G,Q)=>{let J=Y16();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 AN0=()=>{};var TN0={};T0(TN0,{startDevServer:()=>tt5});import{join as nt5}from"path";function G16(X){return X.replace(/\x1b\[[0-9;]*m/g,"")}function Q16(X){let Y=X.getReader(),G=new TextDecoder,Q="";function J(){let W=Q.split(`
1630
- `);Q=W.pop()??"";for(let Z of W){let $=G16(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=G16(Q).replace(/^\[\d+\]\s*/,"").trim();if(W)$z({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:W})}})()}async function tt5(X){let{vitePort:Y,baseUrl:G,noTui:Q}=X,J=await uA1(Number(X.port)),{settings:W,services:Z,managedServiceNames:$}=await yA1({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)et({name:z.name,status:"ready",port:z.port});CX1(W),SX1();let K=nt5(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)Q16(U.stdout),Q16(U.stderr);let B=G||`http://localhost:${W.port}`;kX1(B),et({name:"Vite",status:"ready",port:Number(Y)});let N=async(z)=>{if(U.kill(z),$.length>0){let{stopServices:O}=await Promise.resolve().then(() => (v$1(),C$1));await O(W.dataDir)}};return process.on("SIGINT",()=>N("SIGINT")),process.on("SIGTERM",()=>N("SIGTERM")),{port:Number(W.port),process:U}}var IN0=D(()=>{wN0();Kz();AN0()});import{Box as VN0,Text as jN0}from"ink";import{jsx as Z16,jsxs as lA1}from"react/jsx-runtime";function J16(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 ot5(X,Y){if(at5.has(X))return Y?{text:"\u25CF\u25CF\u25CF\u25CF\u25CF\u25CF",dimColor:!0}:{text:"not set",dimColor:!0};if(rt5.has(X)){if(Array.isArray(Y)){if(Y.length===0)return{text:"not set",dimColor:!0};return{text:Y.map((W)=>J16(W)).join(", "),color:"cyan"}}let Q=J16(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 st5(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 W16({env:X}){let Y=st5(X);return Z16(VN0,{flexDirection:"column",children:Y.map((G)=>lA1(VN0,{flexDirection:"column",marginTop:1,children:[lA1(jN0,{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=ot5(Q,J);return lA1(VN0,{children:[lA1(jN0,{dimColor:!0,children:[" ",Q.padEnd(36)]}),Z16(jN0,{color:W.color,dimColor:W.dimColor,children:W.text})]},Q)})]},G.title))})}var at5,rt5;var $16=D(()=>{at5=new Set(["BETTER_AUTH_SECRET","ENCRYPTION_KEY","MESH_JWT_SECRET","STUDIO_PROVISION_SECRET_KEY"]),rt5=new Set(["DATABASE_URL","CLICKHOUSE_URL","NATS_URL"])});var MN0;var K16=D(()=>{MN0={name:"decocms",version:"2.304.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","@deco-cx/warp-node":"^0.3.20","@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 SX}from"ink";import{Spinner as Xa5}from"@inkjs/ui";import{useSyncExternalStore as H16}from"react";import{jsx as TY,jsxs as sQ}from"react/jsx-runtime";function Za5(X,Y){if(!X||!Ja5.has(X))return X;let G=RN0[Y]??RN0[RN0.length-1];return X==="#875f00"?G[0]:G[1]}function F16({status:X}){if(X==="pending")return TY(Xa5,{label:""});return TY(SX,{color:"green",children:"\u2713"})}function U16({services:X,migrationsStatus:Y,home:G,serverUrl:Q,vibe:J}){let W=H16(vm0,Cm0),Z=H16(hm0,xm0);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,Qa5-U);return sQ(AU,{flexDirection:"row",children:[$.map((N,z)=>{let O=Za5(N.color,K);return O?TY(SX,{color:O,children:N.text},z):TY(SX,{children:N.text},z)}),TY(SX,{children:" ".repeat(B+2)}),H?.map((N,z)=>N.color?TY(SX,{color:N.color,children:N.char},z):TY(SX,{children:N.char},z))]},K)}),sQ(SX,{dimColor:!0,children:[" v",MN0.version]})]}):sQ(AU,{flexDirection:"column",marginTop:1,children:[Ya5.map(($,K)=>TY(SX,{color:Ga5[K],children:$},K)),sQ(SX,{dimColor:!0,children:[" v",MN0.version]})]}),TY(AU,{marginBottom:1,children:TY(SX,{dimColor:!0,children:"\u2500".repeat(80)})}),TY(AU,{children:sQ(SX,{dimColor:!0,children:["Home: ",G]})}),sQ(AU,{gap:2,children:[X.map(($)=>sQ(AU,{gap:1,children:[sQ(SX,{children:[$.name," :",$.port||"...."]}),TY(F16,{status:$.status})]},$.name)),sQ(AU,{gap:1,children:[TY(SX,{children:"Migrations"}),TY(F16,{status:Y})]})]}),TY(AU,{children:Q?sQ(SX,{children:["Open in browser: ",TY(SX,{color:"cyan",children:Q})]}):TY(SX,{dimColor:!0,children:"Starting..."})}),sQ(AU,{gap:2,children:[sQ(SX,{dimColor:!0,children:[TY(SX,{bold:!0,dimColor:!0,children:"K"})," ","toggle config"]}),sQ(SX,{dimColor:!0,children:[TY(SX,{bold:!0,dimColor:!0,children:"L"})," ","toggle log flow"]}),sQ(SX,{dimColor:!0,children:[TY(SX,{bold:!0,dimColor:!0,children:"V"})," ","toggle vibe ",J?"\u266A Nihilore \xB7 CC BY 4.0":""]}),J&&sQ(SX,{dimColor:!0,children:[TY(SX,{bold:!0,dimColor:!0,children:"N"})," ","skip song"]})]})]})}var Ya5,Ga5,RN0,Qa5=30,Ja5;var B16=D(()=>{K16();zt1();Pt1();Ya5=[" \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 "],Ga5=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"],RN0=[["#00ff64","#00cc50"],["#00f060","#00c04c"],["#00e05c","#00b448"],["#00d058","#00a844"],["#00c054","#009c40"],["#00b050","#00903c"],["#00a04c","#008438"],["#009048","#007834"],["#008044","#006c30"],["#007040","#00602c"],["#00603c","#005428"]],Ja5=new Set(["#875f00","#5f3800"])});import{useSyncExternalStore as Wa5}from"react";function $a5(){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 Ka5(X){return process.stdout.on("resize",X),()=>{process.stdout.off("resize",X)}}function N16(){return Wa5(Ka5,$a5)}var mA1;var z16=D(()=>{mA1={rows:process.stdout.rows||24,columns:process.stdout.columns||80}});import{Box as Ha5,Text as vX1}from"ink";import{useSyncExternalStore as Fa5}from"react";import{jsx as SN0,jsxs as kN0}from"react/jsx-runtime";function Ua5(X){if(X>=500)return"red";if(X>=400)return"yellow";if(X>=300)return"cyan";return"green"}function O16({logs:X,headerHeight:Y}){let{rows:G}=N16(),{logFlow:Q}=Fa5(RX1,MX1),J=Math.max(1,G-Y-1),W=Q?X:X.slice(-J);return SN0(Ha5,{flexDirection:"column",children:W.map((Z,$)=>{if(Z.rawLine)return SN0(vX1,{dimColor:!0,children:Z.rawLine},$);let K=Z.duration<1000?`${Z.duration}ms`:`${(Z.duration/1000).toFixed(1)}s`;return kN0(vX1,{children:[kN0(vX1,{dimColor:!0,children:[Z.method.padEnd(6)," ",Z.path.padEnd(30)," "]}),SN0(vX1,{color:Ua5(Z.status),children:Z.status}),kN0(vX1,{dimColor:!0,children:[" ",K.padStart(8)]})]},$)})})}var D16=D(()=>{Kz();z16()});var CN0={};T0(CN0,{App:()=>La5});import{Box as Ba5,Text as Na5,useInput as za5}from"ink";import{useSyncExternalStore as Oa5}from"react";import{jsx as dA1,jsxs as Ea5}from"react/jsx-runtime";function La5({home:X}){let Y=Oa5(RX1,MX1);return za5((G)=>{if(G==="k"||G==="K")EN0();if(G==="l"||G==="L")PN0();if((G==="v"||G==="V")&&Y.dataDir)It1(Y.dataDir),qN0();if((G==="n"||G==="N")&&Y.vibe)Tt1()}),Ea5(Ba5,{flexDirection:"column",children:[dA1(U16,{services:Y.services,migrationsStatus:Y.migrationsStatus,home:X,serverUrl:Y.serverUrl,vibe:Y.vibe}),Y.viewMode==="config"?Y.env?dA1(W16,{env:Y.env}):dA1(Na5,{dimColor:!0,children:"Loading configuration..."}):dA1(O16,{logs:Y.logs,headerHeight:Y.vibe?wa5:Da5})]})}var Da5=15,wa5=19;var vN0=D(()=>{$16();B16();D16();Kz();vd()});function w16(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 yj=k((Va5)=>{Va5.HttpAuthLocation=void 0;(function(X){X.HEADER="header",X.QUERY="query"})(Va5.HttpAuthLocation||(Va5.HttpAuthLocation={}));Va5.HttpApiKeyAuthLocation=void 0;(function(X){X.HEADER="header",X.QUERY="query"})(Va5.HttpApiKeyAuthLocation||(Va5.HttpApiKeyAuthLocation={}));Va5.EndpointURLScheme=void 0;(function(X){X.HTTP="http",X.HTTPS="https"})(Va5.EndpointURLScheme||(Va5.EndpointURLScheme={}));Va5.AlgorithmId=void 0;(function(X){X.MD5="md5",X.CRC32="crc32",X.CRC32C="crc32c",X.SHA1="sha1",X.SHA256="sha256"})(Va5.AlgorithmId||(Va5.AlgorithmId={}));var Pa5=(X)=>{let Y=[];if(X.sha256!==void 0)Y.push({algorithmId:()=>Va5.AlgorithmId.SHA256,checksumConstructor:()=>X.sha256});if(X.md5!=null)Y.push({algorithmId:()=>Va5.AlgorithmId.MD5,checksumConstructor:()=>X.md5});return{addChecksumAlgorithm(G){Y.push(G)},checksumAlgorithms(){return Y}}},qa5=(X)=>{let Y={};return X.checksumAlgorithms().forEach((G)=>{Y[G.algorithmId()]=G.checksumConstructor()}),Y},Aa5=(X)=>{return Pa5(X)},Ta5=(X)=>{return qa5(X)};Va5.FieldPosition=void 0;(function(X){X[X.HEADER=0]="HEADER",X[X.TRAILER=1]="TRAILER"})(Va5.FieldPosition||(Va5.FieldPosition={}));var Ia5="__smithy_context";Va5.IniSectionType=void 0;(function(X){X.PROFILE="profile",X.SSO_SESSION="sso-session",X.SERVICES="services"})(Va5.IniSectionType||(Va5.IniSectionType={}));Va5.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"})(Va5.RequestHandlerProtocol||(Va5.RequestHandlerProtocol={}));Va5.SMITHY_CONTEXT_KEY=Ia5;Va5.getDefaultClientConfiguration=Aa5;Va5.resolveDefaultRuntimeConfig=Ta5});var u7=k((fa5)=>{var Sa5=yj(),ka5=(X)=>{return{setHttpHandler(Y){X.httpHandler=Y},httpHandler(){return X.httpHandler},updateHttpClientConfig(Y,G){X.httpHandler?.updateHttpClientConfig(Y,G)},httpHandlerConfigs(){return X.httpHandler.httpHandlerConfigs()}}},Ca5=(X)=>{return{httpHandler:X.httpHandler()}};class L16{name;kind;values;constructor({name:X,kind:Y=Sa5.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 E16{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 cA1{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 cA1({...X,headers:{...X.headers}});if(Y.query)Y.query=va5(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 cA1.clone(this)}}function va5(X){return Object.keys(X).reduce((Y,G)=>{let Q=X[G];return{...Y,[G]:Array.isArray(Q)?[...Q]:Q}},{})}class P16{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 _a5(X){return/^[a-z0-9][a-z0-9\.\-]*[a-z0-9]$/.test(X)}fa5.Field=L16;fa5.Fields=E16;fa5.HttpRequest=cA1;fa5.HttpResponse=P16;fa5.getHttpHandlerExtensionConfiguration=ka5;fa5.isValidHostname=_a5;fa5.resolveHttpHandlerRuntimeConfig=Ca5});function ma5(X){return(Y)=>async(G)=>{let{request:Q}=G;if(X.expectContinueHeader!==!1&&q16.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 q16,da5,A16=(X)=>({applyToStack:(Y)=>{Y.add(ma5(X),da5)}});var T16=D(()=>{q16=Y1(u7(),1);da5={step:"build",tags:["SET_EXPECT_HEADER","EXPECT_HEADER"],name:"addExpectContinueMiddleware",override:!0}});var wH,iA1,xj,pA1,E9,I16,fX1;var LH=D(()=>{wH={WHEN_SUPPORTED:"WHEN_SUPPORTED",WHEN_REQUIRED:"WHEN_REQUIRED"},iA1=wH.WHEN_SUPPORTED,xj={WHEN_SUPPORTED:"WHEN_SUPPORTED",WHEN_REQUIRED:"WHEN_REQUIRED"},pA1=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"})(I16||(I16={}));fX1=E9.CRC32});var kq,Xa=(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 gN0=D(()=>{(function(X){X.ENV="env",X.CONFIG="shared config entry"})(kq||(kq={}))});var ca5="AWS_REQUEST_CHECKSUM_CALCULATION",ia5="request_checksum_calculation",V16;var j16=D(()=>{LH();gN0();V16={environmentVariableSelector:(X)=>Xa(X,ca5,wH,kq.ENV),configFileSelector:(X)=>Xa(X,ia5,wH,kq.CONFIG),default:iA1}});var pa5="AWS_RESPONSE_CHECKSUM_VALIDATION",na5="response_checksum_validation",M16;var R16=D(()=>{LH();gN0();M16={environmentVariableSelector:(X)=>Xa(X,pa5,xj,kq.ENV),configFileSelector:(X)=>Xa(X,na5,xj,kq.CONFIG),default:pA1}});var lN0=k((Qr5)=>{var ta5=["AuthFailure","InvalidSignatureException","RequestExpired","RequestInTheFuture","RequestTimeTooSkewed","SignatureDoesNotMatch"],aa5=["BandwidthLimitExceeded","EC2ThrottledException","LimitExceededException","PriorRequestNotComplete","ProvisionedThroughputExceededException","RequestLimitExceeded","RequestThrottled","RequestThrottledException","SlowDown","ThrottledException","Throttling","ThrottlingException","TooManyRequestsException","TransactionInProgressException"],ra5=["TimeoutError","RequestTimeout","RequestTimeoutException"],oa5=[500,502,503,504],sa5=["ECONNRESET","ECONNREFUSED","EPIPE","ETIMEDOUT"],ea5=["EHOSTUNREACH","ENETUNREACH","ENOTFOUND"],S16=(X)=>X?.$retryable!==void 0,Xr5=(X)=>ta5.includes(X.name),k16=(X)=>X.$metadata?.clockSkewCorrected,C16=(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)},Yr5=(X)=>X.$metadata?.httpStatusCode===429||aa5.includes(X.name)||X.$retryable?.throttling==!0,uN0=(X,Y=0)=>S16(X)||k16(X)||X.name==="InvalidSignatureException"&&X.message?.includes("Signature expired")||ra5.includes(X.name)||sa5.includes(X?.code||"")||ea5.includes(X?.code||"")||oa5.includes(X.$metadata?.httpStatusCode||0)||C16(X)||v16(X)||X.cause!==void 0&&Y<=10&&uN0(X.cause,Y+1),Gr5=(X)=>{if(X.$metadata?.httpStatusCode!==void 0){let Y=X.$metadata.httpStatusCode;if(500<=Y&&Y<=599&&!uN0(X))return!0;return!1}return!1};function v16(X){return X.code==="ERR_HTTP2_STREAM_ERROR"&&X.message.includes("NGHTTP2_REFUSED_STREAM")}Qr5.isBrowserNetworkError=C16;Qr5.isClockSkewCorrectedError=k16;Qr5.isClockSkewError=Xr5;Qr5.isNodeJsHttp2TransientError=v16;Qr5.isRetryableByTrait=S16;Qr5.isServerError=Gr5;Qr5.isThrottlingError=Yr5;Qr5.isTransientError=uN0});var ww=k((Pr5)=>{var Br5=lN0();Pr5.RETRY_MODES=void 0;(function(X){X.STANDARD="standard",X.ADAPTIVE="adaptive"})(Pr5.RETRY_MODES||(Pr5.RETRY_MODES={}));var tA1=3,Nr5=Pr5.RETRY_MODES.STANDARD;class aA1{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"||Br5.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)=>aA1.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 zr5=100,cN0=20000,Or5=500,mN0=500,Dr5=5,wr5=10,_16=1,Lr5="amz-sdk-invocation-id",Er5="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 f16{x=eQ.delay();computeNextBackoffDelay(X){let Y=Math.random(),G=2,Q=Y*Math.min(this.x*2**X,cN0);return Math.floor(Q)}setDelayBase(X){this.x=X}}class dN0{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(cN0,this.delay)}getRetryCost(){return this.cost}isLongPoll(){return this.longPoll}}var nA1={incompatible:1,attempts:2,capacity:3};class bX1{mode=Pr5.RETRY_MODES.STANDARD;capacity=mN0;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()=>tA1,this.baseDelay??=eQ.delay(),this.retryBackoffStrategy??=new f16}async acquireInitialRetryToken(X){return new dN0(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===nA1.capacity&&W?K:0});else{let H=this.getCapacityCost(Z);return this.capacity-=H,new dN0(K,X.getRetryCount()+1,H,X.isLongPoll?.()??!1)}}throw Error("No retry token available")}recordSuccess(X){this.capacity=Math.min(mN0,this.capacity+(X.getRetryCost()??_16))}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 ${tA1}`),tA1}}retryCode(X,Y,G){let Q=X.getRetryCount()+1,J=this.isRetryableError(Y.errorType)?0:nA1.incompatible,W=Q<G?0:nA1.attempts,Z=this.capacity>=this.getCapacityCost(Y.errorType)?0:nA1.capacity;return J||W||Z}getCapacityCost(X){return X===eQ.modifiedCostType()?eQ.throttlingCost():eQ.cost()}isRetryableError(X){return X==="THROTTLING"||X==="TRANSIENT"}}class b16{mode=Pr5.RETRY_MODES.ADAPTIVE;rateLimiter;standardRetryStrategy;constructor(X,Y){let{rateLimiter:G}=Y??{};this.rateLimiter=G??new aA1,this.standardRetryStrategy=Y?new bX1({maxAttempts:typeof X==="number"?X:3,...Y}):new bX1(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 y16 extends bX1{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}}Pr5.AdaptiveRetryStrategy=b16;Pr5.ConfiguredRetryStrategy=y16;Pr5.DEFAULT_MAX_ATTEMPTS=tA1;Pr5.DEFAULT_RETRY_DELAY_BASE=zr5;Pr5.DEFAULT_RETRY_MODE=Nr5;Pr5.DefaultRateLimiter=aA1;Pr5.INITIAL_RETRY_TOKENS=mN0;Pr5.INVOCATION_ID_HEADER=Lr5;Pr5.MAXIMUM_RETRY_DELAY=cN0;Pr5.NO_RETRY_INCREMENT=_16;Pr5.REQUEST_HEADER=Er5;Pr5.RETRY_COST=Dr5;Pr5.Retry=eQ;Pr5.StandardRetryStrategy=bX1;Pr5.THROTTLING_RETRY_DELAY_BASE=Or5;Pr5.TIMEOUT_RETRY_COST=wr5});var WX=k((ir5)=>{var xr5=ww(),iN0={warningEmitted:!1},hr5=(X)=>{if(X&&!iN0.warningEmitted&&parseInt(X.substring(1,X.indexOf(".")))<20)iN0.warningEmitted=!0,process.emitWarning(`NodeDeprecationWarning: The AWS SDK for JavaScript (v3) will
1630
+ `);Q=W.pop()??"";for(let Z of W){let $=G16(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=G16(Q).replace(/^\[\d+\]\s*/,"").trim();if(W)$z({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:W})}})()}async function tt5(X){let{vitePort:Y,baseUrl:G,noTui:Q}=X,J=await uA1(Number(X.port)),{settings:W,services:Z,managedServiceNames:$}=await yA1({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)et({name:z.name,status:"ready",port:z.port});CX1(W),SX1();let K=nt5(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)Q16(U.stdout),Q16(U.stderr);let B=G||`http://localhost:${W.port}`;kX1(B),et({name:"Vite",status:"ready",port:Number(Y)});let N=async(z)=>{if(U.kill(z),$.length>0){let{stopServices:O}=await Promise.resolve().then(() => (v$1(),C$1));await O(W.dataDir)}};return process.on("SIGINT",()=>N("SIGINT")),process.on("SIGTERM",()=>N("SIGTERM")),{port:Number(W.port),process:U}}var IN0=D(()=>{wN0();Kz();AN0()});import{Box as VN0,Text as jN0}from"ink";import{jsx as Z16,jsxs as lA1}from"react/jsx-runtime";function J16(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 ot5(X,Y){if(at5.has(X))return Y?{text:"\u25CF\u25CF\u25CF\u25CF\u25CF\u25CF",dimColor:!0}:{text:"not set",dimColor:!0};if(rt5.has(X)){if(Array.isArray(Y)){if(Y.length===0)return{text:"not set",dimColor:!0};return{text:Y.map((W)=>J16(W)).join(", "),color:"cyan"}}let Q=J16(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 st5(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 W16({env:X}){let Y=st5(X);return Z16(VN0,{flexDirection:"column",children:Y.map((G)=>lA1(VN0,{flexDirection:"column",marginTop:1,children:[lA1(jN0,{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=ot5(Q,J);return lA1(VN0,{children:[lA1(jN0,{dimColor:!0,children:[" ",Q.padEnd(36)]}),Z16(jN0,{color:W.color,dimColor:W.dimColor,children:W.text})]},Q)})]},G.title))})}var at5,rt5;var $16=D(()=>{at5=new Set(["BETTER_AUTH_SECRET","ENCRYPTION_KEY","MESH_JWT_SECRET","STUDIO_PROVISION_SECRET_KEY"]),rt5=new Set(["DATABASE_URL","CLICKHOUSE_URL","NATS_URL"])});var MN0;var K16=D(()=>{MN0={name:"decocms",version:"2.304.2",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/mesh"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:'bun run migrate && concurrently "bun run dev:client" "bun run dev:server"',"dev:servers":'concurrently "bun run dev:client" "bun run dev:server"',"dev:client":"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","@deco-cx/warp-node":"^0.3.20","@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 SX}from"ink";import{Spinner as Xa5}from"@inkjs/ui";import{useSyncExternalStore as H16}from"react";import{jsx as TY,jsxs as sQ}from"react/jsx-runtime";function Za5(X,Y){if(!X||!Ja5.has(X))return X;let G=RN0[Y]??RN0[RN0.length-1];return X==="#875f00"?G[0]:G[1]}function F16({status:X}){if(X==="pending")return TY(Xa5,{label:""});return TY(SX,{color:"green",children:"\u2713"})}function U16({services:X,migrationsStatus:Y,home:G,serverUrl:Q,vibe:J}){let W=H16(vm0,Cm0),Z=H16(hm0,xm0);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,Qa5-U);return sQ(AU,{flexDirection:"row",children:[$.map((N,z)=>{let O=Za5(N.color,K);return O?TY(SX,{color:O,children:N.text},z):TY(SX,{children:N.text},z)}),TY(SX,{children:" ".repeat(B+2)}),H?.map((N,z)=>N.color?TY(SX,{color:N.color,children:N.char},z):TY(SX,{children:N.char},z))]},K)}),sQ(SX,{dimColor:!0,children:[" v",MN0.version]})]}):sQ(AU,{flexDirection:"column",marginTop:1,children:[Ya5.map(($,K)=>TY(SX,{color:Ga5[K],children:$},K)),sQ(SX,{dimColor:!0,children:[" v",MN0.version]})]}),TY(AU,{marginBottom:1,children:TY(SX,{dimColor:!0,children:"\u2500".repeat(80)})}),TY(AU,{children:sQ(SX,{dimColor:!0,children:["Home: ",G]})}),sQ(AU,{gap:2,children:[X.map(($)=>sQ(AU,{gap:1,children:[sQ(SX,{children:[$.name," :",$.port||"...."]}),TY(F16,{status:$.status})]},$.name)),sQ(AU,{gap:1,children:[TY(SX,{children:"Migrations"}),TY(F16,{status:Y})]})]}),TY(AU,{children:Q?sQ(SX,{children:["Open in browser: ",TY(SX,{color:"cyan",children:Q})]}):TY(SX,{dimColor:!0,children:"Starting..."})}),sQ(AU,{gap:2,children:[sQ(SX,{dimColor:!0,children:[TY(SX,{bold:!0,dimColor:!0,children:"K"})," ","toggle config"]}),sQ(SX,{dimColor:!0,children:[TY(SX,{bold:!0,dimColor:!0,children:"L"})," ","toggle log flow"]}),sQ(SX,{dimColor:!0,children:[TY(SX,{bold:!0,dimColor:!0,children:"V"})," ","toggle vibe ",J?"\u266A Nihilore \xB7 CC BY 4.0":""]}),J&&sQ(SX,{dimColor:!0,children:[TY(SX,{bold:!0,dimColor:!0,children:"N"})," ","skip song"]})]})]})}var Ya5,Ga5,RN0,Qa5=30,Ja5;var B16=D(()=>{K16();zt1();Pt1();Ya5=[" \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 "],Ga5=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"],RN0=[["#00ff64","#00cc50"],["#00f060","#00c04c"],["#00e05c","#00b448"],["#00d058","#00a844"],["#00c054","#009c40"],["#00b050","#00903c"],["#00a04c","#008438"],["#009048","#007834"],["#008044","#006c30"],["#007040","#00602c"],["#00603c","#005428"]],Ja5=new Set(["#875f00","#5f3800"])});import{useSyncExternalStore as Wa5}from"react";function $a5(){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 Ka5(X){return process.stdout.on("resize",X),()=>{process.stdout.off("resize",X)}}function N16(){return Wa5(Ka5,$a5)}var mA1;var z16=D(()=>{mA1={rows:process.stdout.rows||24,columns:process.stdout.columns||80}});import{Box as Ha5,Text as vX1}from"ink";import{useSyncExternalStore as Fa5}from"react";import{jsx as SN0,jsxs as kN0}from"react/jsx-runtime";function Ua5(X){if(X>=500)return"red";if(X>=400)return"yellow";if(X>=300)return"cyan";return"green"}function O16({logs:X,headerHeight:Y}){let{rows:G}=N16(),{logFlow:Q}=Fa5(RX1,MX1),J=Math.max(1,G-Y-1),W=Q?X:X.slice(-J);return SN0(Ha5,{flexDirection:"column",children:W.map((Z,$)=>{if(Z.rawLine)return SN0(vX1,{dimColor:!0,children:Z.rawLine},$);let K=Z.duration<1000?`${Z.duration}ms`:`${(Z.duration/1000).toFixed(1)}s`;return kN0(vX1,{children:[kN0(vX1,{dimColor:!0,children:[Z.method.padEnd(6)," ",Z.path.padEnd(30)," "]}),SN0(vX1,{color:Ua5(Z.status),children:Z.status}),kN0(vX1,{dimColor:!0,children:[" ",K.padStart(8)]})]},$)})})}var D16=D(()=>{Kz();z16()});var CN0={};T0(CN0,{App:()=>La5});import{Box as Ba5,Text as Na5,useInput as za5}from"ink";import{useSyncExternalStore as Oa5}from"react";import{jsx as dA1,jsxs as Ea5}from"react/jsx-runtime";function La5({home:X}){let Y=Oa5(RX1,MX1);return za5((G)=>{if(G==="k"||G==="K")EN0();if(G==="l"||G==="L")PN0();if((G==="v"||G==="V")&&Y.dataDir)It1(Y.dataDir),qN0();if((G==="n"||G==="N")&&Y.vibe)Tt1()}),Ea5(Ba5,{flexDirection:"column",children:[dA1(U16,{services:Y.services,migrationsStatus:Y.migrationsStatus,home:X,serverUrl:Y.serverUrl,vibe:Y.vibe}),Y.viewMode==="config"?Y.env?dA1(W16,{env:Y.env}):dA1(Na5,{dimColor:!0,children:"Loading configuration..."}):dA1(O16,{logs:Y.logs,headerHeight:Y.vibe?wa5:Da5})]})}var Da5=15,wa5=19;var vN0=D(()=>{$16();B16();D16();Kz();vd()});function w16(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 yj=k((Va5)=>{Va5.HttpAuthLocation=void 0;(function(X){X.HEADER="header",X.QUERY="query"})(Va5.HttpAuthLocation||(Va5.HttpAuthLocation={}));Va5.HttpApiKeyAuthLocation=void 0;(function(X){X.HEADER="header",X.QUERY="query"})(Va5.HttpApiKeyAuthLocation||(Va5.HttpApiKeyAuthLocation={}));Va5.EndpointURLScheme=void 0;(function(X){X.HTTP="http",X.HTTPS="https"})(Va5.EndpointURLScheme||(Va5.EndpointURLScheme={}));Va5.AlgorithmId=void 0;(function(X){X.MD5="md5",X.CRC32="crc32",X.CRC32C="crc32c",X.SHA1="sha1",X.SHA256="sha256"})(Va5.AlgorithmId||(Va5.AlgorithmId={}));var Pa5=(X)=>{let Y=[];if(X.sha256!==void 0)Y.push({algorithmId:()=>Va5.AlgorithmId.SHA256,checksumConstructor:()=>X.sha256});if(X.md5!=null)Y.push({algorithmId:()=>Va5.AlgorithmId.MD5,checksumConstructor:()=>X.md5});return{addChecksumAlgorithm(G){Y.push(G)},checksumAlgorithms(){return Y}}},qa5=(X)=>{let Y={};return X.checksumAlgorithms().forEach((G)=>{Y[G.algorithmId()]=G.checksumConstructor()}),Y},Aa5=(X)=>{return Pa5(X)},Ta5=(X)=>{return qa5(X)};Va5.FieldPosition=void 0;(function(X){X[X.HEADER=0]="HEADER",X[X.TRAILER=1]="TRAILER"})(Va5.FieldPosition||(Va5.FieldPosition={}));var Ia5="__smithy_context";Va5.IniSectionType=void 0;(function(X){X.PROFILE="profile",X.SSO_SESSION="sso-session",X.SERVICES="services"})(Va5.IniSectionType||(Va5.IniSectionType={}));Va5.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"})(Va5.RequestHandlerProtocol||(Va5.RequestHandlerProtocol={}));Va5.SMITHY_CONTEXT_KEY=Ia5;Va5.getDefaultClientConfiguration=Aa5;Va5.resolveDefaultRuntimeConfig=Ta5});var u7=k((fa5)=>{var Sa5=yj(),ka5=(X)=>{return{setHttpHandler(Y){X.httpHandler=Y},httpHandler(){return X.httpHandler},updateHttpClientConfig(Y,G){X.httpHandler?.updateHttpClientConfig(Y,G)},httpHandlerConfigs(){return X.httpHandler.httpHandlerConfigs()}}},Ca5=(X)=>{return{httpHandler:X.httpHandler()}};class L16{name;kind;values;constructor({name:X,kind:Y=Sa5.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 E16{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 cA1{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 cA1({...X,headers:{...X.headers}});if(Y.query)Y.query=va5(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 cA1.clone(this)}}function va5(X){return Object.keys(X).reduce((Y,G)=>{let Q=X[G];return{...Y,[G]:Array.isArray(Q)?[...Q]:Q}},{})}class P16{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 _a5(X){return/^[a-z0-9][a-z0-9\.\-]*[a-z0-9]$/.test(X)}fa5.Field=L16;fa5.Fields=E16;fa5.HttpRequest=cA1;fa5.HttpResponse=P16;fa5.getHttpHandlerExtensionConfiguration=ka5;fa5.isValidHostname=_a5;fa5.resolveHttpHandlerRuntimeConfig=Ca5});function ma5(X){return(Y)=>async(G)=>{let{request:Q}=G;if(X.expectContinueHeader!==!1&&q16.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 q16,da5,A16=(X)=>({applyToStack:(Y)=>{Y.add(ma5(X),da5)}});var T16=D(()=>{q16=Y1(u7(),1);da5={step:"build",tags:["SET_EXPECT_HEADER","EXPECT_HEADER"],name:"addExpectContinueMiddleware",override:!0}});var wH,iA1,xj,pA1,E9,I16,fX1;var LH=D(()=>{wH={WHEN_SUPPORTED:"WHEN_SUPPORTED",WHEN_REQUIRED:"WHEN_REQUIRED"},iA1=wH.WHEN_SUPPORTED,xj={WHEN_SUPPORTED:"WHEN_SUPPORTED",WHEN_REQUIRED:"WHEN_REQUIRED"},pA1=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"})(I16||(I16={}));fX1=E9.CRC32});var kq,Xa=(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 gN0=D(()=>{(function(X){X.ENV="env",X.CONFIG="shared config entry"})(kq||(kq={}))});var ca5="AWS_REQUEST_CHECKSUM_CALCULATION",ia5="request_checksum_calculation",V16;var j16=D(()=>{LH();gN0();V16={environmentVariableSelector:(X)=>Xa(X,ca5,wH,kq.ENV),configFileSelector:(X)=>Xa(X,ia5,wH,kq.CONFIG),default:iA1}});var pa5="AWS_RESPONSE_CHECKSUM_VALIDATION",na5="response_checksum_validation",M16;var R16=D(()=>{LH();gN0();M16={environmentVariableSelector:(X)=>Xa(X,pa5,xj,kq.ENV),configFileSelector:(X)=>Xa(X,na5,xj,kq.CONFIG),default:pA1}});var lN0=k((Qr5)=>{var ta5=["AuthFailure","InvalidSignatureException","RequestExpired","RequestInTheFuture","RequestTimeTooSkewed","SignatureDoesNotMatch"],aa5=["BandwidthLimitExceeded","EC2ThrottledException","LimitExceededException","PriorRequestNotComplete","ProvisionedThroughputExceededException","RequestLimitExceeded","RequestThrottled","RequestThrottledException","SlowDown","ThrottledException","Throttling","ThrottlingException","TooManyRequestsException","TransactionInProgressException"],ra5=["TimeoutError","RequestTimeout","RequestTimeoutException"],oa5=[500,502,503,504],sa5=["ECONNRESET","ECONNREFUSED","EPIPE","ETIMEDOUT"],ea5=["EHOSTUNREACH","ENETUNREACH","ENOTFOUND"],S16=(X)=>X?.$retryable!==void 0,Xr5=(X)=>ta5.includes(X.name),k16=(X)=>X.$metadata?.clockSkewCorrected,C16=(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)},Yr5=(X)=>X.$metadata?.httpStatusCode===429||aa5.includes(X.name)||X.$retryable?.throttling==!0,uN0=(X,Y=0)=>S16(X)||k16(X)||X.name==="InvalidSignatureException"&&X.message?.includes("Signature expired")||ra5.includes(X.name)||sa5.includes(X?.code||"")||ea5.includes(X?.code||"")||oa5.includes(X.$metadata?.httpStatusCode||0)||C16(X)||v16(X)||X.cause!==void 0&&Y<=10&&uN0(X.cause,Y+1),Gr5=(X)=>{if(X.$metadata?.httpStatusCode!==void 0){let Y=X.$metadata.httpStatusCode;if(500<=Y&&Y<=599&&!uN0(X))return!0;return!1}return!1};function v16(X){return X.code==="ERR_HTTP2_STREAM_ERROR"&&X.message.includes("NGHTTP2_REFUSED_STREAM")}Qr5.isBrowserNetworkError=C16;Qr5.isClockSkewCorrectedError=k16;Qr5.isClockSkewError=Xr5;Qr5.isNodeJsHttp2TransientError=v16;Qr5.isRetryableByTrait=S16;Qr5.isServerError=Gr5;Qr5.isThrottlingError=Yr5;Qr5.isTransientError=uN0});var ww=k((Pr5)=>{var Br5=lN0();Pr5.RETRY_MODES=void 0;(function(X){X.STANDARD="standard",X.ADAPTIVE="adaptive"})(Pr5.RETRY_MODES||(Pr5.RETRY_MODES={}));var tA1=3,Nr5=Pr5.RETRY_MODES.STANDARD;class aA1{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"||Br5.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)=>aA1.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 zr5=100,cN0=20000,Or5=500,mN0=500,Dr5=5,wr5=10,_16=1,Lr5="amz-sdk-invocation-id",Er5="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 f16{x=eQ.delay();computeNextBackoffDelay(X){let Y=Math.random(),G=2,Q=Y*Math.min(this.x*2**X,cN0);return Math.floor(Q)}setDelayBase(X){this.x=X}}class dN0{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(cN0,this.delay)}getRetryCost(){return this.cost}isLongPoll(){return this.longPoll}}var nA1={incompatible:1,attempts:2,capacity:3};class bX1{mode=Pr5.RETRY_MODES.STANDARD;capacity=mN0;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()=>tA1,this.baseDelay??=eQ.delay(),this.retryBackoffStrategy??=new f16}async acquireInitialRetryToken(X){return new dN0(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===nA1.capacity&&W?K:0});else{let H=this.getCapacityCost(Z);return this.capacity-=H,new dN0(K,X.getRetryCount()+1,H,X.isLongPoll?.()??!1)}}throw Error("No retry token available")}recordSuccess(X){this.capacity=Math.min(mN0,this.capacity+(X.getRetryCost()??_16))}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 ${tA1}`),tA1}}retryCode(X,Y,G){let Q=X.getRetryCount()+1,J=this.isRetryableError(Y.errorType)?0:nA1.incompatible,W=Q<G?0:nA1.attempts,Z=this.capacity>=this.getCapacityCost(Y.errorType)?0:nA1.capacity;return J||W||Z}getCapacityCost(X){return X===eQ.modifiedCostType()?eQ.throttlingCost():eQ.cost()}isRetryableError(X){return X==="THROTTLING"||X==="TRANSIENT"}}class b16{mode=Pr5.RETRY_MODES.ADAPTIVE;rateLimiter;standardRetryStrategy;constructor(X,Y){let{rateLimiter:G}=Y??{};this.rateLimiter=G??new aA1,this.standardRetryStrategy=Y?new bX1({maxAttempts:typeof X==="number"?X:3,...Y}):new bX1(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 y16 extends bX1{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}}Pr5.AdaptiveRetryStrategy=b16;Pr5.ConfiguredRetryStrategy=y16;Pr5.DEFAULT_MAX_ATTEMPTS=tA1;Pr5.DEFAULT_RETRY_DELAY_BASE=zr5;Pr5.DEFAULT_RETRY_MODE=Nr5;Pr5.DefaultRateLimiter=aA1;Pr5.INITIAL_RETRY_TOKENS=mN0;Pr5.INVOCATION_ID_HEADER=Lr5;Pr5.MAXIMUM_RETRY_DELAY=cN0;Pr5.NO_RETRY_INCREMENT=_16;Pr5.REQUEST_HEADER=Er5;Pr5.RETRY_COST=Dr5;Pr5.Retry=eQ;Pr5.StandardRetryStrategy=bX1;Pr5.THROTTLING_RETRY_DELAY_BASE=Or5;Pr5.TIMEOUT_RETRY_COST=wr5});var WX=k((ir5)=>{var xr5=ww(),iN0={warningEmitted:!1},hr5=(X)=>{if(X&&!iN0.warningEmitted&&parseInt(X.substring(1,X.indexOf(".")))<20)iN0.warningEmitted=!0,process.emitWarning(`NodeDeprecationWarning: The AWS SDK for JavaScript (v3) will
1631
1631
  no longer support Node.js ${X} in January 2026.
1632
1632
 
1633
1633
  To continue receiving updates to AWS services, bug fixes, and security
@@ -0,0 +1,60 @@
1
+ export type WidthType = 'fullwidth' | 'halfwidth' | 'wide' | 'narrow' | 'neutral' | 'ambiguous';
2
+
3
+ export type Options = {
4
+ /**
5
+ Whether to treat an `'ambiguous'` character as wide.
6
+
7
+ @default true
8
+
9
+ @example
10
+ ```
11
+ import {eastAsianWidth} from 'get-east-asian-width';
12
+
13
+ const codePoint = '⛣'.codePointAt(0);
14
+
15
+ console.log(eastAsianWidth(codePoint));
16
+ //=> 1
17
+
18
+ console.log(eastAsianWidth(codePoint, {ambiguousAsWide: true}));
19
+ //=> 2
20
+ ```
21
+
22
+ > Ambiguous characters behave like wide or narrow characters depending on the context (language tag, script identification, associated font, source of data, or explicit markup; all can provide the context). __If the context cannot be established reliably, they should be treated as narrow characters by default.__
23
+ > - http://www.unicode.org/reports/tr11/
24
+ */
25
+ readonly ambiguousAsWide?: boolean;
26
+ };
27
+
28
+ /**
29
+ Returns the width as a number for the given code point.
30
+
31
+ @param codePoint - A Unicode code point.
32
+
33
+ @example
34
+ ```
35
+ import {eastAsianWidth} from 'get-east-asian-width';
36
+
37
+ const codePoint = '字'.codePointAt(0);
38
+
39
+ console.log(eastAsianWidth(codePoint));
40
+ //=> 2
41
+ ```
42
+ */
43
+ export function eastAsianWidth(codePoint: number, options?: Options): 1 | 2;
44
+
45
+ /**
46
+ Returns the type of “East Asian Width” for the given code point.
47
+
48
+ @param codePoint - A Unicode code point.
49
+
50
+ @example
51
+ ```
52
+ import {eastAsianWidthType} from 'get-east-asian-width';
53
+
54
+ const codePoint = '字'.codePointAt(0);
55
+
56
+ console.log(eastAsianWidthType(codePoint));
57
+ //=> 'wide'
58
+ ```
59
+ */
60
+ export function eastAsianWidthType(codePoint: number): WidthType;
@@ -0,0 +1,30 @@
1
+ import {getCategory, isAmbiguous, isFullWidth, isWide} from './lookup.js';
2
+
3
+ function validate(codePoint) {
4
+ if (!Number.isSafeInteger(codePoint)) {
5
+ throw new TypeError(`Expected a code point, got \`${typeof codePoint}\`.`);
6
+ }
7
+ }
8
+
9
+ export function eastAsianWidthType(codePoint) {
10
+ validate(codePoint);
11
+
12
+ return getCategory(codePoint);
13
+ }
14
+
15
+ export function eastAsianWidth(codePoint, {ambiguousAsWide = false} = {}) {
16
+ validate(codePoint);
17
+
18
+ if (
19
+ isFullWidth(codePoint)
20
+ || isWide(codePoint)
21
+ || (ambiguousAsWide && isAmbiguous(codePoint))
22
+ ) {
23
+ return 2;
24
+ }
25
+
26
+ return 1;
27
+ }
28
+
29
+ // Private exports for https://github.com/sindresorhus/is-fullwidth-code-point
30
+ export {isFullWidth as _isFullWidth, isWide as _isWide} from './lookup.js';
@@ -0,0 +1,18 @@
1
+ // Generated by scripts/build.js
2
+
3
+ // prettier-ignore
4
+ const ambiguousRanges = [161, 161, 164, 164, 167, 168, 170, 170, 173, 174, 176, 180, 182, 186, 188, 191, 198, 198, 208, 208, 215, 216, 222, 225, 230, 230, 232, 234, 236, 237, 240, 240, 242, 243, 247, 250, 252, 252, 254, 254, 257, 257, 273, 273, 275, 275, 283, 283, 294, 295, 299, 299, 305, 307, 312, 312, 319, 322, 324, 324, 328, 331, 333, 333, 338, 339, 358, 359, 363, 363, 462, 462, 464, 464, 466, 466, 468, 468, 470, 470, 472, 472, 474, 474, 476, 476, 593, 593, 609, 609, 708, 708, 711, 711, 713, 715, 717, 717, 720, 720, 728, 731, 733, 733, 735, 735, 768, 879, 913, 929, 931, 937, 945, 961, 963, 969, 1025, 1025, 1040, 1103, 1105, 1105, 8208, 8208, 8211, 8214, 8216, 8217, 8220, 8221, 8224, 8226, 8228, 8231, 8240, 8240, 8242, 8243, 8245, 8245, 8251, 8251, 8254, 8254, 8308, 8308, 8319, 8319, 8321, 8324, 8364, 8364, 8451, 8451, 8453, 8453, 8457, 8457, 8467, 8467, 8470, 8470, 8481, 8482, 8486, 8486, 8491, 8491, 8531, 8532, 8539, 8542, 8544, 8555, 8560, 8569, 8585, 8585, 8592, 8601, 8632, 8633, 8658, 8658, 8660, 8660, 8679, 8679, 8704, 8704, 8706, 8707, 8711, 8712, 8715, 8715, 8719, 8719, 8721, 8721, 8725, 8725, 8730, 8730, 8733, 8736, 8739, 8739, 8741, 8741, 8743, 8748, 8750, 8750, 8756, 8759, 8764, 8765, 8776, 8776, 8780, 8780, 8786, 8786, 8800, 8801, 8804, 8807, 8810, 8811, 8814, 8815, 8834, 8835, 8838, 8839, 8853, 8853, 8857, 8857, 8869, 8869, 8895, 8895, 8978, 8978, 9312, 9449, 9451, 9547, 9552, 9587, 9600, 9615, 9618, 9621, 9632, 9633, 9635, 9641, 9650, 9651, 9654, 9655, 9660, 9661, 9664, 9665, 9670, 9672, 9675, 9675, 9678, 9681, 9698, 9701, 9711, 9711, 9733, 9734, 9737, 9737, 9742, 9743, 9756, 9756, 9758, 9758, 9792, 9792, 9794, 9794, 9824, 9825, 9827, 9829, 9831, 9834, 9836, 9837, 9839, 9839, 9886, 9887, 9919, 9919, 9926, 9933, 9935, 9939, 9941, 9953, 9955, 9955, 9960, 9961, 9963, 9969, 9972, 9972, 9974, 9977, 9979, 9980, 9982, 9983, 10045, 10045, 10102, 10111, 11094, 11097, 12872, 12879, 57344, 63743, 65024, 65039, 65533, 65533, 127232, 127242, 127248, 127277, 127280, 127337, 127344, 127373, 127375, 127376, 127387, 127404, 917760, 917999, 983040, 1048573, 1048576, 1114109];
5
+
6
+ // prettier-ignore
7
+ const fullwidthRanges = [12288, 12288, 65281, 65376, 65504, 65510];
8
+
9
+ // prettier-ignore
10
+ const halfwidthRanges = [8361, 8361, 65377, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, 65512, 65518];
11
+
12
+ // prettier-ignore
13
+ const narrowRanges = [32, 126, 162, 163, 165, 166, 172, 172, 175, 175, 10214, 10221, 10629, 10630];
14
+
15
+ // prettier-ignore
16
+ const wideRanges = [4352, 4447, 8986, 8987, 9001, 9002, 9193, 9196, 9200, 9200, 9203, 9203, 9725, 9726, 9748, 9749, 9776, 9783, 9800, 9811, 9855, 9855, 9866, 9871, 9875, 9875, 9889, 9889, 9898, 9899, 9917, 9918, 9924, 9925, 9934, 9934, 9940, 9940, 9962, 9962, 9970, 9971, 9973, 9973, 9978, 9978, 9981, 9981, 9989, 9989, 9994, 9995, 10024, 10024, 10060, 10060, 10062, 10062, 10067, 10069, 10071, 10071, 10133, 10135, 10160, 10160, 10175, 10175, 11035, 11036, 11088, 11088, 11093, 11093, 11904, 11929, 11931, 12019, 12032, 12245, 12272, 12287, 12289, 12350, 12353, 12438, 12441, 12543, 12549, 12591, 12593, 12686, 12688, 12773, 12783, 12830, 12832, 12871, 12880, 42124, 42128, 42182, 43360, 43388, 44032, 55203, 63744, 64255, 65040, 65049, 65072, 65106, 65108, 65126, 65128, 65131, 94176, 94180, 94192, 94198, 94208, 101589, 101631, 101662, 101760, 101874, 110576, 110579, 110581, 110587, 110589, 110590, 110592, 110882, 110898, 110898, 110928, 110930, 110933, 110933, 110948, 110951, 110960, 111355, 119552, 119638, 119648, 119670, 126980, 126980, 127183, 127183, 127374, 127374, 127377, 127386, 127488, 127490, 127504, 127547, 127552, 127560, 127568, 127569, 127584, 127589, 127744, 127776, 127789, 127797, 127799, 127868, 127870, 127891, 127904, 127946, 127951, 127955, 127968, 127984, 127988, 127988, 127992, 128062, 128064, 128064, 128066, 128252, 128255, 128317, 128331, 128334, 128336, 128359, 128378, 128378, 128405, 128406, 128420, 128420, 128507, 128591, 128640, 128709, 128716, 128716, 128720, 128722, 128725, 128728, 128732, 128735, 128747, 128748, 128756, 128764, 128992, 129003, 129008, 129008, 129292, 129338, 129340, 129349, 129351, 129535, 129648, 129660, 129664, 129674, 129678, 129734, 129736, 129736, 129741, 129756, 129759, 129770, 129775, 129784, 131072, 196605, 196608, 262141];
17
+
18
+ export {ambiguousRanges, fullwidthRanges, halfwidthRanges, narrowRanges, wideRanges};
@@ -0,0 +1,135 @@
1
+ import {
2
+ ambiguousRanges,
3
+ fullwidthRanges,
4
+ halfwidthRanges,
5
+ narrowRanges,
6
+ wideRanges,
7
+ } from './lookup-data.js';
8
+ import {isInRange} from './utilities.js';
9
+
10
+ const minimumAmbiguousCodePoint = ambiguousRanges[0];
11
+ const maximumAmbiguousCodePoint = ambiguousRanges.at(-1);
12
+ const minimumFullWidthCodePoint = fullwidthRanges[0];
13
+ const maximumFullWidthCodePoint = fullwidthRanges.at(-1);
14
+ const minimumHalfWidthCodePoint = halfwidthRanges[0];
15
+ const maximumHalfWidthCodePoint = halfwidthRanges.at(-1);
16
+ const minimumNarrowCodePoint = narrowRanges[0];
17
+ const maximumNarrowCodePoint = narrowRanges.at(-1);
18
+ const minimumWideCodePoint = wideRanges[0];
19
+ const maximumWideCodePoint = wideRanges.at(-1);
20
+
21
+ const commonCjkCodePoint = 0x4E_00;
22
+ const [wideFastPathStart, wideFastPathEnd] = findWideFastPathRange(wideRanges);
23
+
24
+ // Use a hot-path range so common `isWide` calls can skip binary search.
25
+ // The range containing U+4E00 covers common CJK ideographs;
26
+ // fallback to the largest range for resilience to Unicode table changes.
27
+ function findWideFastPathRange(ranges) {
28
+ let fastPathStart = ranges[0];
29
+ let fastPathEnd = ranges[1];
30
+
31
+ for (let index = 0; index < ranges.length; index += 2) {
32
+ const start = ranges[index];
33
+ const end = ranges[index + 1];
34
+
35
+ if (
36
+ commonCjkCodePoint >= start
37
+ && commonCjkCodePoint <= end
38
+ ) {
39
+ return [start, end];
40
+ }
41
+
42
+ if ((end - start) > (fastPathEnd - fastPathStart)) {
43
+ fastPathStart = start;
44
+ fastPathEnd = end;
45
+ }
46
+ }
47
+
48
+ return [fastPathStart, fastPathEnd];
49
+ }
50
+
51
+ export const isAmbiguous = codePoint => {
52
+ if (
53
+ codePoint < minimumAmbiguousCodePoint
54
+ || codePoint > maximumAmbiguousCodePoint
55
+ ) {
56
+ return false;
57
+ }
58
+
59
+ return isInRange(ambiguousRanges, codePoint);
60
+ };
61
+
62
+ export const isFullWidth = codePoint => {
63
+ if (
64
+ codePoint < minimumFullWidthCodePoint
65
+ || codePoint > maximumFullWidthCodePoint
66
+ ) {
67
+ return false;
68
+ }
69
+
70
+ return isInRange(fullwidthRanges, codePoint);
71
+ };
72
+
73
+ const isHalfWidth = codePoint => {
74
+ if (
75
+ codePoint < minimumHalfWidthCodePoint
76
+ || codePoint > maximumHalfWidthCodePoint
77
+ ) {
78
+ return false;
79
+ }
80
+
81
+ return isInRange(halfwidthRanges, codePoint);
82
+ };
83
+
84
+ const isNarrow = codePoint => {
85
+ if (
86
+ codePoint < minimumNarrowCodePoint
87
+ || codePoint > maximumNarrowCodePoint
88
+ ) {
89
+ return false;
90
+ }
91
+
92
+ return isInRange(narrowRanges, codePoint);
93
+ };
94
+
95
+ export const isWide = codePoint => {
96
+ if (
97
+ codePoint >= wideFastPathStart
98
+ && codePoint <= wideFastPathEnd
99
+ ) {
100
+ return true;
101
+ }
102
+
103
+ if (
104
+ codePoint < minimumWideCodePoint
105
+ || codePoint > maximumWideCodePoint
106
+ ) {
107
+ return false;
108
+ }
109
+
110
+ return isInRange(wideRanges, codePoint);
111
+ };
112
+
113
+ export function getCategory(codePoint) {
114
+ if (isAmbiguous(codePoint)) {
115
+ return 'ambiguous';
116
+ }
117
+
118
+ if (isFullWidth(codePoint)) {
119
+ return 'fullwidth';
120
+ }
121
+
122
+ if (isHalfWidth(codePoint)) {
123
+ return 'halfwidth';
124
+ }
125
+
126
+ if (isNarrow(codePoint)) {
127
+ return 'narrow';
128
+ }
129
+
130
+ if (isWide(codePoint)) {
131
+ return 'wide';
132
+ }
133
+
134
+ return 'neutral';
135
+ }
@@ -0,0 +1,71 @@
1
+ {
2
+ "name": "get-east-asian-width",
3
+ "version": "1.5.0",
4
+ "description": "Determine the East Asian Width of a Unicode character",
5
+ "license": "MIT",
6
+ "repository": "sindresorhus/get-east-asian-width",
7
+ "funding": "https://github.com/sponsors/sindresorhus",
8
+ "author": {
9
+ "name": "Sindre Sorhus",
10
+ "email": "sindresorhus@gmail.com",
11
+ "url": "https://sindresorhus.com"
12
+ },
13
+ "type": "module",
14
+ "exports": {
15
+ "types": "./index.d.ts",
16
+ "default": "./index.js"
17
+ },
18
+ "sideEffects": false,
19
+ "engines": {
20
+ "node": ">=18"
21
+ },
22
+ "scripts": {
23
+ "test": "xo && ava && tsc index.d.ts",
24
+ "build": "node scripts/build.js",
25
+ "prepublish": "npm run build"
26
+ },
27
+ "files": [
28
+ "index.js",
29
+ "index.d.ts",
30
+ "lookup.js",
31
+ "lookup-data.js",
32
+ "utilities.js"
33
+ ],
34
+ "keywords": [
35
+ "unicode",
36
+ "east-asian-width",
37
+ "eastasianwidth",
38
+ "character",
39
+ "string",
40
+ "width",
41
+ "text",
42
+ "layout",
43
+ "alignment",
44
+ "fullwidth",
45
+ "halfwidth",
46
+ "ambiguous",
47
+ "narrow",
48
+ "wide",
49
+ "neutral",
50
+ "typography",
51
+ "japanese",
52
+ "chinese",
53
+ "korean",
54
+ "codepoint",
55
+ "text-processing",
56
+ "i18n",
57
+ "l10n"
58
+ ],
59
+ "devDependencies": {
60
+ "ava": "^5.3.1",
61
+ "outdent": "^0.8.0",
62
+ "simplify-ranges": "^0.1.0",
63
+ "typescript": "^5.2.2",
64
+ "xo": "^0.56.0"
65
+ },
66
+ "xo": {
67
+ "ignores": [
68
+ "lookup-data.js"
69
+ ]
70
+ }
71
+ }
@@ -0,0 +1,65 @@
1
+ # get-east-asian-width
2
+
3
+ > Determine the [East Asian Width](https://unicode.org/reports/tr11/) of a Unicode character
4
+
5
+ > East Asian Width categorizes Unicode characters based on their occupied space in East Asian typography, which helps in text layout and alignment, particularly in languages like Japanese, Chinese, and Korean.
6
+
7
+ Unlike other similar packages, this package uses the latest Unicode data (which changes each year).
8
+
9
+ ## Install
10
+
11
+ ```sh
12
+ npm install get-east-asian-width
13
+ ```
14
+
15
+ ## Usage
16
+
17
+ ```js
18
+ import {eastAsianWidth, eastAsianWidthType} from 'get-east-asian-width';
19
+
20
+ const codePoint = '字'.codePointAt(0);
21
+
22
+ console.log(eastAsianWidth(codePoint));
23
+ //=> 2
24
+
25
+ console.log(eastAsianWidthType(codePoint));
26
+ //=> 'wide'
27
+ ```
28
+
29
+ ## `eastAsianWidth(codePoint: number, options?: object): 1 | 2`
30
+
31
+ Returns the width as a number for the given code point.
32
+
33
+ ### options
34
+
35
+ Type: `object`
36
+
37
+ #### ambiguousAsWide
38
+
39
+ Type: `boolean`\
40
+ Default: `false`
41
+
42
+ Whether to treat an `'ambiguous'` character as wide.
43
+
44
+ ```js
45
+ import {eastAsianWidth} from 'get-east-asian-width';
46
+
47
+ const codePoint = '⛣'.codePointAt(0);
48
+
49
+ console.log(eastAsianWidth(codePoint));
50
+ //=> 1
51
+
52
+ console.log(eastAsianWidth(codePoint, {ambiguousAsWide: true}));
53
+ //=> 2
54
+ ```
55
+
56
+ > Ambiguous characters behave like wide or narrow characters depending on the context (language tag, script identification, associated font, source of data, or explicit markup; all can provide the context). **If the context cannot be established reliably, they should be treated as narrow characters by default.**
57
+ > - http://www.unicode.org/reports/tr11/
58
+
59
+ ## `eastAsianWidthType(codePoint: number): 'fullwidth' | 'halfwidth' | 'wide' | 'narrow' | 'neutral' | 'ambiguous'`
60
+
61
+ Returns the type of “East Asian Width” for the given code point.
62
+
63
+ ## Related
64
+
65
+ - [string-width](https://github.com/sindresorhus/string-width) - Get the visual width of a string
@@ -0,0 +1,24 @@
1
+ /**
2
+ Binary search on a sorted flat array of [start, end] pairs.
3
+
4
+ @param {number[]} ranges - Flat array of inclusive [start, end] range pairs, e.g. [0, 5, 10, 20].
5
+ @param {number} codePoint - The value to search for.
6
+ @returns {boolean} Whether the value falls within any of the ranges.
7
+ */
8
+ export const isInRange = (ranges, codePoint) => {
9
+ let low = 0;
10
+ let high = Math.floor(ranges.length / 2) - 1;
11
+ while (low <= high) {
12
+ const mid = Math.floor((low + high) / 2);
13
+ const i = mid * 2;
14
+ if (codePoint < ranges[i]) {
15
+ high = mid - 1;
16
+ } else if (codePoint > ranges[i + 1]) {
17
+ low = mid + 1;
18
+ } else {
19
+ return true;
20
+ }
21
+ }
22
+
23
+ return false;
24
+ };