decocms 4.195.2 → 4.196.0

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 (226) hide show
  1. package/dist/client/assets/{AlertCircle-DQgexuW3.js → AlertCircle-CM8LxyHN.js} +1 -1
  2. package/dist/client/assets/{AreaChart-D3D9a6Dz.js → AreaChart-3xNnlk8T.js} +1 -1
  3. package/dist/client/assets/{ArrowUp-D8jzY7C6.js → ArrowUp-B7Im2LCa.js} +1 -1
  4. package/dist/client/assets/{ArrowUpRight-F6SFqrGH.js → ArrowUpRight-CYVFIQbG.js} +1 -1
  5. package/dist/client/assets/{Check-Dll_Y-AI.js → Check-7X7RPenm.js} +1 -1
  6. package/dist/client/assets/{CheckCircle-Bmw0ur2H.js → CheckCircle-JJouXc1a.js} +1 -1
  7. package/dist/client/assets/{ChevronDown-D0iN0rQW.js → ChevronDown-5QKvKBZG.js} +1 -1
  8. package/dist/client/assets/{ChevronRight-D3snHCKx.js → ChevronRight-QindYIpd.js} +1 -1
  9. package/dist/client/assets/{ChevronUp-CqWj1RY-.js → ChevronUp-DHcqfO8l.js} +1 -1
  10. package/dist/client/assets/{Copy01-7owbUnXQ.js → Copy01-C8LNDtv9.js} +1 -1
  11. package/dist/client/assets/{CpuChip01-aMBDWHZm.js → CpuChip01-zj4m0Jg8.js} +1 -1
  12. package/dist/client/assets/{CreditCard01-BL7uDVL4.js → CreditCard01-BRzSNQS2.js} +1 -1
  13. package/dist/client/assets/{DotsVertical-CsEvnXuf.js → DotsVertical-RWSXVE0h.js} +1 -1
  14. package/dist/client/assets/{Eye-B8Szk___.js → Eye-D3IB1QHP.js} +1 -1
  15. package/dist/client/assets/{FilterLines-BIqLiXjm.js → FilterLines-D-S6oSwW.js} +1 -1
  16. package/dist/client/assets/{HardDrive-BWQjPKcj.js → HardDrive-Bps2U1ew.js} +1 -1
  17. package/dist/client/assets/{Key01-B6HMLiCU.js → Key01-CBZdqST5.js} +1 -1
  18. package/dist/client/assets/{LayoutLeft-at-P_j4b.js → LayoutLeft-DSTWkvbu.js} +1 -1
  19. package/dist/client/assets/{LinkExternal01-DxrDW8Qz.js → LinkExternal01-D7psuXWI.js} +1 -1
  20. package/dist/client/assets/{LogOut01-CfwqR1lh.js → LogOut01-wUOQj8Q5.js} +1 -1
  21. package/dist/client/assets/{Monitor01-BXW8nKWg.js → Monitor01-BesEEXei.js} +1 -1
  22. package/dist/client/assets/{Palette-NNEK9nvO.js → Palette-pmSRvBIC.js} +1 -1
  23. package/dist/client/assets/{Play-Cr_1yPSn.js → Play-CGeocMEJ.js} +1 -1
  24. package/dist/client/assets/{Plus-DR3rLVBa.js → Plus-DElsYI-E.js} +1 -1
  25. package/dist/client/assets/{SearchLg-t3ww-52M.js → SearchLg-BGpidKqH.js} +1 -1
  26. package/dist/client/assets/{SearchMd-BB2VkaGi.js → SearchMd-BRU8IWy9.js} +1 -1
  27. package/dist/client/assets/{Settings02-CD2jCNwo.js → Settings02-DTguXVoI.js} +1 -1
  28. package/dist/client/assets/{Shield01-DQQU5op1.js → Shield01-BZm_hmM1.js} +1 -1
  29. package/dist/client/assets/{Star01-B5rBI-cW.js → Star01-BI1NUfk5.js} +1 -1
  30. package/dist/client/assets/{Stars01-Dj6gBHMf.js → Stars01-BD505RI7.js} +1 -1
  31. package/dist/client/assets/{Stars02-DxRwrIE9.js → Stars02-CDJ459U1.js} +1 -1
  32. package/dist/client/assets/{Sun-D7hUZTl5.js → Sun-D3cZfrbB.js} +1 -1
  33. package/dist/client/assets/{SwitchHorizontal01-BXxX7XS8.js → SwitchHorizontal01-CNceAPIy.js} +1 -1
  34. package/dist/client/assets/{Tool01-BWFvC9iq.js → Tool01-BznVDdOF.js} +1 -1
  35. package/dist/client/assets/{Tool02-BxolDuW5.js → Tool02-CNU1-82-.js} +1 -1
  36. package/dist/client/assets/{Trash01-DPNYecCt.js → Trash01-CYl2hnF3.js} +1 -1
  37. package/dist/client/assets/{TrendUp01-6DKjlp-h.js → TrendUp01-D2uW949k.js} +1 -1
  38. package/dist/client/assets/{Upload01-Bq5munqt.js → Upload01-DM84k2_z.js} +1 -1
  39. package/dist/client/assets/{User01-InkwleRu.js → User01-Bid7oZrY.js} +1 -1
  40. package/dist/client/assets/{Users01-Bv8-C_pB.js → Users01-CgydBQwM.js} +1 -1
  41. package/dist/client/assets/{Users03-BxwoltCb.js → Users03-mdYud-Ke.js} +1 -1
  42. package/dist/client/assets/{X-rWJi1MZ0.js → X-DWdn-qVA.js} +1 -1
  43. package/dist/client/assets/{XCircle-ClpPRmZO.js → XCircle-DQnZUW5d.js} +1 -1
  44. package/dist/client/assets/{XClose-Dvbx2aRU.js → XClose-CgSH5BsF.js} +1 -1
  45. package/dist/client/assets/{Zap-CqkZWRPo.js → Zap-BB9cPTTS.js} +1 -1
  46. package/dist/client/assets/{ZapSquare-CwwfDPns.js → ZapSquare-BwEt33Kk.js} +1 -1
  47. package/dist/client/assets/{access-gate-BMgkXsrT.js → access-gate-BdFgWW4s.js} +1 -1
  48. package/dist/client/assets/{agent-icon-DRqBvDpd.js → agent-icon-CzjBmgpZ.js} +1 -1
  49. package/dist/client/assets/{agents-list-lHKZJ-nv.js → agents-list-BCnlnAzm.js} +1 -1
  50. package/dist/client/assets/{ai-providers-BzJcwxnr.js → ai-providers-ClrbTIjL.js} +1 -1
  51. package/dist/client/assets/{alert-ChLf7Sx_.js → alert-BS4M3L-4.js} +1 -1
  52. package/dist/client/assets/{alert-dialog-DiWVJB6R.js → alert-dialog-BWyGA_dH.js} +1 -1
  53. package/dist/client/assets/app-editor-CoeWmfj_.js +1 -0
  54. package/dist/client/assets/{auth-D8eocefO.js → auth-BHjZevPh.js} +1 -1
  55. package/dist/client/assets/{auth-catchall-s4SaR7du.js → auth-catchall-B-08K6Zf.js} +1 -1
  56. package/dist/client/assets/{auth-entry-D-afU2gU.js → auth-entry-KrePs9uK.js} +1 -1
  57. package/dist/client/assets/{auth-split-layout-COEFO8gH.js → auth-split-layout-D66aK2LL.js} +1 -1
  58. package/dist/client/assets/{authenticate-and-persist-oauth-BfXTrY5U.js → authenticate-and-persist-oauth-TAPahJzk.js} +1 -1
  59. package/dist/client/assets/{automation-list-row-CKWTeLBV.js → automation-list-row-B53W7Zgr.js} +1 -1
  60. package/dist/client/assets/{automation-runs-BlQrfxkt.js → automation-runs-B0dylHEN.js} +1 -1
  61. package/dist/client/assets/{automations-DZuM_z0W.js → automations-8VphMFIj.js} +1 -1
  62. package/dist/client/assets/{avatar-DpU1uxzI.js → avatar-CPEYXWgK.js} +1 -1
  63. package/dist/client/assets/{badge-KY4OtqU_.js → badge-DgIensBj.js} +1 -1
  64. package/dist/client/assets/{billing-CSEX3NdC.js → billing-DiqaTOxp.js} +1 -1
  65. package/dist/client/assets/{block-document-D3PFGOv0.js → block-document-DtzAwYU7.js} +2 -2
  66. package/dist/client/assets/{brand-context-CkJktSPz.js → brand-context-Mqw1CtJf.js} +1 -1
  67. package/dist/client/assets/{buckets-DBt4cBoc.js → buckets-BQlzsHyE.js} +1 -1
  68. package/dist/client/assets/{bulk-category-panel-BziQ2mwU.js → bulk-category-panel-DEaVL7Kw.js} +1 -1
  69. package/dist/client/assets/{capability-load-error-BY6DGt9C.js → capability-load-error-DfPtip8t.js} +1 -1
  70. package/dist/client/assets/{card-B_H5Ubdc.js → card-D26uuuC1.js} +1 -1
  71. package/dist/client/assets/category-editor-DYKtP1Os.js +1 -0
  72. package/dist/client/assets/{chat-context-BFymPUwu.js → chat-context-C_X_7otN.js} +1 -1
  73. package/dist/client/assets/{checkbox-CrizyH16.js → checkbox-C1oYxY8L.js} +1 -1
  74. package/dist/client/assets/{cli-auth-success-ChQHrZWT.js → cli-auth-success-CBXeFgrM.js} +1 -1
  75. package/dist/client/assets/{collection-detail-QYPjupXl.js → collection-detail-DM7JrrcU.js} +1 -1
  76. package/dist/client/assets/{collection-display-button-BoILEXy0.js → collection-display-button-B9o2DYdy.js} +1 -1
  77. package/dist/client/assets/{collection-search-Dsflu0gn.js → collection-search-DFGfjQSD.js} +1 -1
  78. package/dist/client/assets/{collection-table-wrapper-BX4Ngj-H.js → collection-table-wrapper-BOrsz2RZ.js} +1 -1
  79. package/dist/client/assets/{collection-tabs-pqnthCW7.js → collection-tabs-DQEPM3UL.js} +1 -1
  80. package/dist/client/assets/{command-CqRNTJzv.js → command-DuSjCIaP.js} +1 -1
  81. package/dist/client/assets/{commerce-onboarding-C3yM9SEg.js → commerce-onboarding-BJ4GuLFy.js} +1 -1
  82. package/dist/client/assets/{connect-C-HHz8i9.js → connect-25OOl_Vt.js} +1 -1
  83. package/dist/client/assets/{connection-DCdVqvmn.js → connection-DdMUaRcB.js} +1 -1
  84. package/dist/client/assets/{connection-card-DEXVmpKu.js → connection-card-0k3rtbAf.js} +1 -1
  85. package/dist/client/assets/{connection-detail-VjT8yWJ7.js → connection-detail-Da8Ao35s.js} +1 -1
  86. package/dist/client/assets/{connection-form-helpers-DNHk7LRh.js → connection-form-helpers-Qzz0gA8G.js} +1 -1
  87. package/dist/client/assets/{connections-SxFMseaK.js → connections-Bb9zCe6v.js} +1 -1
  88. package/dist/client/assets/{decopilot-sse-pool-B6oVNDC-.js → decopilot-sse-pool-B97BndFs.js} +1 -1
  89. package/dist/client/assets/{dialog-DFrZUDJ5.js → dialog-CTs2XYx7.js} +1 -1
  90. package/dist/client/assets/{domain-settings-DoW3ffZG.js → domain-settings-C6lFWfjn.js} +1 -1
  91. package/dist/client/assets/{drawer-_HdfgLHP.js → drawer-PpUCn15-.js} +1 -1
  92. package/dist/client/assets/{dropdown-menu-lnp9OLTy.js → dropdown-menu-DBVrGqdC.js} +1 -1
  93. package/dist/client/assets/{empty-state-BEyqVNGW.js → empty-state-DkbH_PrC.js} +1 -1
  94. package/dist/client/assets/{extract-connection-data-BE82V_PZ.js → extract-connection-data-_zzP3pF4.js} +1 -1
  95. package/dist/client/assets/{file-explorer-BYaqycer.js → file-explorer-BixPaHG8.js} +1 -1
  96. package/dist/client/assets/{form-CVn8vOPO.js → form-mEqO43zR.js} +1 -1
  97. package/dist/client/assets/{general-GYrFj1fe.js → general-CtE2NJN9.js} +1 -1
  98. package/dist/client/assets/{github-repo-picker-Ccx6x_eY.js → github-repo-picker-CCtqvWUL.js} +1 -1
  99. package/dist/client/assets/{hooks-BafaXyqM.js → hooks-B3XajlXB.js} +1 -1
  100. package/dist/client/assets/{index-CV4sTDj_.js → index-B6wfYYbr.js} +1 -1
  101. package/dist/client/assets/{index-Bd0dIHYR.js → index-BWz-cwGz.js} +3 -3
  102. package/dist/client/assets/index-C-bJCsC6.css +1 -0
  103. package/dist/client/assets/{index-NtpgYLS5.js → index-CwJXg86v.js} +1 -1
  104. package/dist/client/assets/{index-lQI6bwVU.js → index-Cx4Dhr_S.js} +52 -52
  105. package/dist/client/assets/{index-DRl3LNFD.js → index-DAiAXHdo.js} +1 -1
  106. package/dist/client/assets/index-DrTGTwFY.js +1 -0
  107. package/dist/client/assets/{index-D80wsXdx.js → index-HnXpr-Ts.js} +1 -1
  108. package/dist/client/assets/{index-D3FccwVa.js → index-XVdOWzDs.js} +1 -1
  109. package/dist/client/assets/{index-CYuFJg6K.js → index-jOrkXGtu.js} +1 -1
  110. package/dist/client/assets/{index-hWcOa4is.js → index-kyQJd6XW.js} +1 -1
  111. package/dist/client/assets/{index-redirect-DgaKl41p.js → index-redirect-CM_bHv0f.js} +1 -1
  112. package/dist/client/assets/{input-C1FovUQq.js → input-CoxGhL-0.js} +1 -1
  113. package/dist/client/assets/{integration-icon-BQanvFzd.js → integration-icon-DATwq1TG.js} +1 -1
  114. package/dist/client/assets/{invite-member-dialog-BKkw0_kj.js → invite-member-dialog-CfBp96SQ.js} +1 -1
  115. package/dist/client/assets/{label-DgYXNV7d.js → label-B8lF-fOA.js} +1 -1
  116. package/dist/client/assets/{layout-CjxZ_BJs.js → layout-SupLgf3L.js} +1 -1
  117. package/dist/client/assets/{login-DhIXs5De.js → login-DvAH6V59.js} +1 -1
  118. package/dist/client/assets/{mcp-oauth-BJHTvWQo.js → mcp-oauth-CxgpPzIr.js} +1 -1
  119. package/dist/client/assets/{members-BlFdMRhi.js → members-Cc62g-et.js} +1 -1
  120. package/dist/client/assets/{monaco-editor-DhripMM9.js → monaco-editor-DpBoR_-1.js} +1 -1
  121. package/dist/client/assets/{monitoring-stats-row-viu7hdz4.js → monitoring-stats-row-B_MoWFPV.js} +1 -1
  122. package/dist/client/assets/{multi-select-2I9EUWJE.js → multi-select-1hSenRGp.js} +1 -1
  123. package/dist/client/assets/{oauth-callback-kf_q2Qte.js → oauth-callback-CJhpQZ8f.js} +1 -1
  124. package/dist/client/assets/{oauth-callback-ai-provider-BSKqpRHu.js → oauth-callback-ai-provider-CYu2WvW1.js} +1 -1
  125. package/dist/client/assets/{onboarding-s_Mjtkzh.js → onboarding-ZQM1tpBU.js} +1 -1
  126. package/dist/client/assets/{org-layout-DyAoYhyv.js → org-layout-Ckhx-Cz0.js} +1 -1
  127. package/dist/client/assets/{organization-choice-BN--Kwdn.js → organization-choice-DblYPQs5.js} +1 -1
  128. package/dist/client/assets/{orgs-D4WxYn4j.js → orgs-DVVUhYwZ.js} +1 -1
  129. package/dist/client/assets/{page-seo-form-2LnDY5Wt.js → page-seo-form-BUJYOeHW.js} +1 -1
  130. package/dist/client/assets/{popover-FW4pJnfj.js → popover-BG-uuOtt.js} +1 -1
  131. package/dist/client/assets/{post-editor-D7teGxSf.js → post-editor-D54ydIc9.js} +1 -1
  132. package/dist/client/assets/{primitives-j9W5Xtkb.js → primitives-CvhKjOdk.js} +1 -1
  133. package/dist/client/assets/profile-DZGEQ4Df.js +1 -0
  134. package/dist/client/assets/{project-app-view-AReG_xSI.js → project-app-view-PhumLooC.js} +1 -1
  135. package/dist/client/assets/record-editor-NyTmeNfE.js +1 -0
  136. package/dist/client/assets/redirect-editor-DvdtACpp.js +1 -0
  137. package/dist/client/assets/registry-B3Q2Qu3d.js +2 -0
  138. package/dist/client/assets/{registry-layout-B2af3drB.js → registry-layout-DUUpULcY.js} +1 -1
  139. package/dist/client/assets/{reports-Mhu3R6tw.js → reports-BfCIn8Au.js} +1 -1
  140. package/dist/client/assets/{require-capability-B1Fzxawl.js → require-capability-VXZBdb6b.js} +1 -1
  141. package/dist/client/assets/{required-auth-layout-afLNifKU.js → required-auth-layout-C0cQkyWT.js} +1 -1
  142. package/dist/client/assets/{reset-password-CVCa-VXb.js → reset-password-LdHAL4oH.js} +1 -1
  143. package/dist/client/assets/{roles-DK1SwTQf.js → roles-Td8eDrvx.js} +1 -1
  144. package/dist/client/assets/{search-input-CpLFKssC.js → search-input-CDvPIv-N.js} +1 -1
  145. package/dist/client/assets/{secrets-kSnSFfIt.js → secrets-CpmEXtJ8.js} +1 -1
  146. package/dist/client/assets/sections-editor-ChTvUzZr.js +2 -0
  147. package/dist/client/assets/{select-model-BkXq2Fb1.js → select-model-ACCTD1Gs.js} +1 -1
  148. package/dist/client/assets/{select-liBHcsy7.js → select-yy9MS76a.js} +1 -1
  149. package/dist/client/assets/{self-tool-result-D2JbBvVu.js → self-tool-result-BX8RqSU1.js} +1 -1
  150. package/dist/client/assets/{seo-editor-DJFo8vF9.js → seo-editor-CwgHpsTc.js} +1 -1
  151. package/dist/client/assets/{settings-layout-DSnbF9mk.js → settings-layout-D9tsamBK.js} +1 -1
  152. package/dist/client/assets/{settings-section-g9nvd_et.js → settings-section-CXxl9vM8.js} +1 -1
  153. package/dist/client/assets/{shell-controls-JBWQZOyS.js → shell-controls-CpqcIhVF.js} +1 -1
  154. package/dist/client/assets/{shell-layout-BhOxJkhu.js → shell-layout-5FRlRlUQ.js} +1 -1
  155. package/dist/client/assets/{sidebar-04ETWvyg.js → sidebar-CT2y1dAg.js} +1 -1
  156. package/dist/client/assets/{skeleton-DVXAYM0D.js → skeleton-BBy88Uo9.js} +1 -1
  157. package/dist/client/assets/{spinner-DBKYxfLi.js → spinner-Ds679dYf.js} +1 -1
  158. package/dist/client/assets/{sso-Dkgb8BpW.js → sso-CBCobV_h.js} +1 -1
  159. package/dist/client/assets/{store-B3AO9q7f.js → store-DAveNW2B.js} +1 -1
  160. package/dist/client/assets/store-registry-Bv-ZmMJ4.js +2 -0
  161. package/dist/client/assets/{studio-tools-BbvWcTHi.js → studio-tools-2XDgd1gs.js} +1 -1
  162. package/dist/client/assets/{switch-CEJr7eDG.js → switch-DTG6jS56.js} +1 -1
  163. package/dist/client/assets/{tab-id-BqksP1PQ.js → tab-id-BkFKIkDN.js} +1 -1
  164. package/dist/client/assets/{table-DoMkiPL1.js → table-w5eg4y_2.js} +1 -1
  165. package/dist/client/assets/{tabs-CJsooIYY.js → tabs-BRvYXU1F.js} +1 -1
  166. package/dist/client/assets/{textarea-BSQVo88y.js → textarea-BibkKSwD.js} +1 -1
  167. package/dist/client/assets/{toggle-group-DjgkTXLq.js → toggle-group-Cknt_g3f.js} +1 -1
  168. package/dist/client/assets/{toolbar-DqM6VhLz.js → toolbar-BGScKZ1V.js} +1 -1
  169. package/dist/client/assets/{tooltip-BJg1ogMm.js → tooltip-BP0CmzL6.js} +1 -1
  170. package/dist/client/assets/{use-ai-providers-Dz1vX5AV.js → use-ai-providers-DsaiAJSe.js} +1 -1
  171. package/dist/client/assets/{use-automations-BnhEWa94.js → use-automations-BqQce9dP.js} +1 -1
  172. package/dist/client/assets/{use-autosave-CcbTmj6X.js → use-autosave--rHoMQLF.js} +1 -1
  173. package/dist/client/assets/{use-capability-CWBsnbL3.js → use-capability-D2nZyR1X.js} +1 -1
  174. package/dist/client/assets/{use-clock-tick-MtJ7DhiM.js → use-clock-tick-DiBPMhuL.js} +1 -1
  175. package/dist/client/assets/{use-connection-BAwLZaPx.js → use-connection-Bqcrdo2O.js} +1 -1
  176. package/dist/client/assets/{use-copy-DZPOKzgm.js → use-copy-XDQ85EPb.js} +1 -1
  177. package/dist/client/assets/{use-create-virtual-mcp-DwKQYKNj.js → use-create-virtual-mcp-BoBVJeSC.js} +1 -1
  178. package/dist/client/assets/{use-debounced-autosave-CFUaG2NX.js → use-debounced-autosave-CAK2FI4K.js} +1 -1
  179. package/dist/client/assets/{use-debounced-value-Bxq6Ba1V.js → use-debounced-value-B2yILy82.js} +1 -1
  180. package/dist/client/assets/{use-deco-credits-Dpjz0OQO.js → use-deco-credits-CaJPy0n0.js} +1 -1
  181. package/dist/client/assets/{use-decopilot-events-_mHWqIBF.js → use-decopilot-events-CMQQqcUf.js} +1 -1
  182. package/dist/client/assets/{use-delete-connection-BwEBIvkW.js → use-delete-connection-B1KJD1LI.js} +1 -1
  183. package/dist/client/assets/{use-deployment-admin-DJcnwYMe.js → use-deployment-admin-BsA5nTp7.js} +1 -1
  184. package/dist/client/assets/{use-file-configs-Cwncuieh.js → use-file-configs-bWLBmfij.js} +1 -1
  185. package/dist/client/assets/{use-infinite-scroll-DbL9nYYG.js → use-infinite-scroll-BMLc-bdQ.js} +1 -1
  186. package/dist/client/assets/{use-join-requests-D1ShbsOo.js → use-join-requests-B2ocwrqn.js} +1 -1
  187. package/dist/client/assets/{use-mcp-client-ofFl2HZQ.js → use-mcp-client-2HoiI3W0.js} +1 -1
  188. package/dist/client/assets/{use-mcp-tools-Dlz6DpGK.js → use-mcp-tools-q4HK4yiz.js} +1 -1
  189. package/dist/client/assets/{use-members-C89gd0lp.js → use-members-CWMD4x8G.js} +1 -1
  190. package/dist/client/assets/{use-mobile-mLE0_T-F.js → use-mobile-B2-c0YvM.js} +1 -1
  191. package/dist/client/assets/{use-navigate-to-agent-BIxVhJsC.js → use-navigate-to-agent-DS6YR0FJ.js} +1 -1
  192. package/dist/client/assets/{use-open-billing-url-BJX8E5u2.js → use-open-billing-url-DQoLNsev.js} +1 -1
  193. package/dist/client/assets/{use-org-auth-client-BV4sM_Hx.js → use-org-auth-client-CZGszNx7.js} +1 -1
  194. package/dist/client/assets/{use-org-sso-DI659kny.js → use-org-sso-C4YJPH6k.js} +1 -1
  195. package/dist/client/assets/{use-organization-roles-BAtNc2pH.js → use-organization-roles-C84GrWua.js} +1 -1
  196. package/dist/client/assets/{use-organization-settings-CwFNVhxy.js → use-organization-settings-CdpVG_mz.js} +1 -1
  197. package/dist/client/assets/{use-registry-connections-maVtc0ns.js → use-registry-connections-Bu4_TN8R.js} +1 -1
  198. package/dist/client/assets/{use-secrets-DNF_tpko.js → use-secrets-CqCFYznr.js} +1 -1
  199. package/dist/client/assets/{use-section-preview-base-bJb7TFhI.js → use-section-preview-base-Dc39GpAr.js} +1 -1
  200. package/dist/client/assets/{use-status-sounds-CdFoIM4F.js → use-status-sounds-4Ek6akQW.js} +1 -1
  201. package/dist/client/assets/{use-tags-yw5P0If7.js → use-tags-DvYm14w6.js} +1 -1
  202. package/dist/client/assets/{use-view-mode-DWrtW4Pj.js → use-view-mode-DisOtkNC.js} +1 -1
  203. package/dist/client/assets/{use-virtual-mcp-Ck2UHdKC.js → use-virtual-mcp-CB2qQP4r.js} +1 -1
  204. package/dist/client/assets/useInfiniteQuery-vIOY_gVM.js +1 -0
  205. package/dist/client/assets/{useRouterState-Ci2iHzd-.js → useRouterState-DUt1tiuI.js} +1 -1
  206. package/dist/client/assets/useSuspenseInfiniteQuery-C_4nMGsR.js +1 -0
  207. package/dist/client/assets/{users-BUvptYex.js → users-Cjh1t9eX.js} +1 -1
  208. package/dist/client/assets/{variant-calendar-CI8JlFJK.js → variant-calendar-Q49poPmL.js} +1 -1
  209. package/dist/client/assets/{view-mode-toggle-JEHlUZA5.js → view-mode-toggle-B5PFRWEp.js} +1 -1
  210. package/dist/client/index.html +2 -2
  211. package/dist/server/cli.js +1 -1
  212. package/dist/server/server.js +1 -1
  213. package/package.json +1 -1
  214. package/dist/client/assets/app-editor-TOrMR6QX.js +0 -1
  215. package/dist/client/assets/category-editor-Cxi3vyCz.js +0 -1
  216. package/dist/client/assets/index-9fWgNR3O.js +0 -1
  217. package/dist/client/assets/index-B5P40aqR.css +0 -1
  218. package/dist/client/assets/index-BlTJsPqW.js +0 -1
  219. package/dist/client/assets/profile-Co4Fyusg.js +0 -1
  220. package/dist/client/assets/record-editor-YeUOp0D1.js +0 -1
  221. package/dist/client/assets/redirect-editor-BbKd3xGI.js +0 -1
  222. package/dist/client/assets/registry-BdIf_W5G.js +0 -2
  223. package/dist/client/assets/sections-editor-CwosupI2.js +0 -2
  224. package/dist/client/assets/store-registry-DgKYSgbK.js +0 -2
  225. package/dist/client/assets/useInfiniteQuery-BDb9Axep.js +0 -1
  226. package/dist/client/assets/useSuspenseInfiniteQuery-CKjBFnei.js +0 -1
@@ -1310,7 +1310,7 @@ Usage: deco services <up|down|status>`),process.exit(1)}}var Bc1=O(()=>{Ix()});f
1310
1310
  `.execute($);if(Number(W.rows[0]?.cnt)===0){console.warn(`Failed to migrate ${J}/${K}, keeping in old table`);continue}}await ef`
1311
1311
  DELETE FROM kysely_migration WHERE name = ${X}
1312
1312
  `.execute($)}}async function Vi1($){await uu6($),await cu6($);let Z=new Mi1({db:$,provider:{getMigrations:()=>Promise.resolve(kl0)}}),{error:X,results:Q}=await Z.migrateToLatest(),Y=0;if(Q?.forEach((G)=>{if(G.status==="Success")Y++;else if(G.status==="Error")console.error(`Failed to execute migration "${G.migrationName}"`)}),X)throw console.error("Failed to migrate"),console.error(X),X;return Y}async function lu6($){let{keepOpen:Z=!1,database:X,skipBetterAuth:Q=!1}=$??{},Y="skipped";if(!Q&&!X)Y=await Qh0();let G=X??H6(),J=async()=>{if(!Z&&!X)await Uw(G).catch((K)=>{console.warn("Warning: Error closing database:",K)})};try{let K=await Vi1(G.db);return await J(),{betterAuth:Y,kysely:K}}catch(K){throw await J(),K}}async function du6(){let $=H6(),Z=new Mi1({db:$.db,provider:{getMigrations:()=>Promise.resolve(kl0)}}),{error:X,results:Q}=await Z.migrateDown();if(Q?.forEach((Y)=>{if(Y.status==="Success")console.log(`\u2705 Migration "${Y.migrationName}" rolled back successfully`);else if(Y.status==="Error")console.error(`\u274C Failed to rollback migration "${Y.migrationName}"`)}),X)throw console.error("Failed to rollback migration"),console.error(X),X}var Ci1=O(()=>{qi1();Yh0();t7()});async function c50($){let Z={...process.env},X=f00($,Z);console.log(tU1(X.settings.encryptionKey));let Q=X.settings.betterAuthSecret||(X.settings.localMode?il1(X.settings.dataDir):""),{ensureServices:Y}=await Promise.resolve().then(() => (s$0(),a$0)),{outputs:G,services:J}=await Y({home:X.settings.dataDir,externalDatabaseUrl:X.externalDatabaseUrl,externalNatsUrl:X.externalNatsUrl});if(!X.skipMigrations){let{migrateBetterAuth:W}=await Promise.resolve().then(() => (Yh0(),pl1));await W(G.databaseUrl);let{createDatabase:H}=await Promise.resolve().then(() => (t7(),Hl1)),{migrateToLatest:N}=await Promise.resolve().then(() => (Ci1(),Si1)),U=H(G.databaseUrl);await N({keepOpen:!0,database:U,skipBetterAuth:!0})}let K={...X.settings,betterAuthSecret:Q,databaseUrl:G.databaseUrl,natsUrls:G.natsUrls,...G.s3?{s3Endpoint:G.s3.endpoint,s3Bucket:G.s3.bucket,s3AccessKeyId:G.s3.accessKeyId,s3SecretAccessKey:G.s3.secretAccessKey,s3ForcePathStyle:G.s3.forcePathStyle}:{},...G.natsTunnel?{natsPublicUrl:G.natsTunnel.publicUrl,natsAccountJwt:G.natsTunnel.accountJwt,natsAccountSigningKey:G.natsTunnel.accountSigningKey,natsOperatorJwt:G.natsTunnel.operatorJwt,natsTunnelPublicEnabled:!0,natsCredsPath:G.natsTunnel.credsPath}:{}};return Oc1(K),{settings:K,services:J.map((W)=>({name:W.name==="PostgreSQL"?"Postgres":W.name,port:W.port})),managedServiceNames:J.filter((W)=>W.owner==="managed").map((W)=>W.name)}}var Vl0=O(()=>{Ix();nl1();b8()});var xi1={};w0(xi1,{updateService:()=>mD,subscribeCliState:()=>_l0,setTuiConsoleIntercepted:()=>l50,setServerUrl:()=>Rm,setMigrationsDone:()=>Tm,setDevMode:()=>nu6,resetCliStateForTests:()=>mu6,isTuiConsoleIntercepted:()=>d50,getCliState:()=>Cl0,addLogEntry:()=>Lw});function _i1(){return{services:[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}],migrationsStatus:"pending",serverUrl:null,logs:[]}}function mu6(){VQ=_i1()}function iu6(){return[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}]}function Am(){for(let $ of Sl0)$()}function Cl0(){return VQ}function _l0($){return Sl0.add($),()=>Sl0.delete($)}function mD($){VQ={...VQ,services:VQ.services.map((Z)=>Z.name===$.name?$:Z)},Am()}function Tm(){VQ={...VQ,migrationsStatus:"done"},Am()}function Rm($){VQ={...VQ,serverUrl:$},Am()}function Lw($){let Z=[...VQ.logs,$];VQ={...VQ,logs:Z.length>500?Z.slice(-500):Z},Am()}function nu6(){VQ={...VQ,services:[...iu6(),{name:"API",status:"pending",port:0},{name:"Vite",status:"pending",port:0}]},Am()}function l50($){vi1=$}function d50(){return vi1}var VQ,Sl0,vi1=!1;var iD=O(()=>{VQ=_i1();Sl0=new Set});import{createServer as fi1}from"net";function pu6($){return new Promise((Z)=>{let X=fi1();X.once("error",()=>Z(!1)),X.listen($,"0.0.0.0",()=>{X.close(()=>Z(!0))})})}async function Im($){if(await pu6($))return $;let Z=await new Promise((X,Q)=>{let Y=fi1();Y.once("error",Q),Y.listen(0,"0.0.0.0",()=>{let G=Y.address(),J=typeof G==="object"&&G?G.port:0;Y.close(()=>X(J))})});return console.warn(`Port ${$} is in use, using port ${Z} instead.`),Z}var vl0=()=>{};function qm($){return $.replace(/\x1b\[[0-9;]*m/g,"")}var xl0={};w0(xl0,{startDevServer:()=>ou6});import{join as tu6}from"path";function bi1($){let Z=$.getReader(),X=new TextDecoder,Q="";function Y(){let G=Q.split(`
1313
- `);Q=G.pop()??"";for(let J of G){let K=qm(J).replace(/^\[\d+\]\s*/,"").trim();if(!K)continue;Lw({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:K})}}(async()=>{for(;;){let{done:G,value:J}=await Z.read();if(G)break;Q+=X.decode(J,{stream:!0}),Y()}if(Q.trim()){let G=qm(Q).replace(/^\[\d+\]\s*/,"").trim();if(G)Lw({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:G})}})()}async function ou6($){let{baseUrl:Z,noTui:X}=$,Q=process.env.HOST==="0.0.0.0"&&Boolean(process.env.PORT),Y=Q?process.env.PORT:$.vitePort,G=Z||`http://localhost:${Y}`,J=Q?await Im(Number(Y)+1):await Im(Number($.port)),{settings:K,services:W,managedServiceNames:H}=await c50({port:String(J),home:$.home,baseUrl:$.baseUrl,localMode:$.localMode,skipMigrations:$.skipMigrations,noTui:$.noTui,vitePort:$.vitePort});for(let L of W)mD({name:L.name,status:"ready",port:L.port});Tm();let N=tu6(import.meta.dir,"..","..","..","..",".."),U=X===!0,F=Bun.spawn(["bun","run","dev:servers"],{cwd:N,env:{...process.env,PORT:String(K.port),VITE_PORT:String(Y),DATABASE_URL:K.databaseUrl,NATS_URL:K.natsUrls.join(","),NODE_ENV:K.nodeEnv,BASE_URL:G,DECOCMS_LOCAL_MODE:String(K.localMode),DECOCMS_HOME:K.dataDir,DATA_DIR:K.dataDir,DECO_CLI:"1",...K.betterAuthSecret?{BETTER_AUTH_SECRET:K.betterAuthSecret}:{},...K.s3Endpoint?{S3_ENDPOINT:K.s3Endpoint,S3_BUCKET:K.s3Bucket??"",S3_ACCESS_KEY_ID:K.s3AccessKeyId??"",S3_SECRET_ACCESS_KEY:K.s3SecretAccessKey??"",S3_FORCE_PATH_STYLE:String(K.s3ForcePathStyle)}:{},...K.natsPublicUrl&&K.natsAccountJwt&&K.natsAccountSigningKey?{NATS_PUBLIC_URL:K.natsPublicUrl,NATS_ACCOUNT_JWT:K.natsAccountJwt,NATS_ACCOUNT_SIGNING_KEY:K.natsAccountSigningKey,NATS_OPERATOR_JWT:K.natsOperatorJwt??"",NATS_TUNNEL_PUBLIC_ENABLED:"true",...K.natsCredsPath?{NATS_CREDS:K.natsCredsPath}:{}}:{}},stdio:["inherit",U?"inherit":"pipe",U?"inherit":"pipe"]});if(!U)bi1(F.stdout),bi1(F.stderr);Rm(G),mD({name:"Vite",status:"ready",port:Number(Y)}),mD({name:"API",status:"ready",port:Number(K.port)});let B=async(L)=>{if(F.kill(L),await F.exited,H.length>0){let{stopServices:D}=await Promise.resolve().then(() => (s$0(),a$0));await D(K.dataDir)}};return process.on("SIGINT",()=>B("SIGINT")),process.on("SIGTERM",()=>B("SIGTERM")),{port:Number(Y),process:F}}var fl0=O(()=>{Vl0();iD();vl0()});var m50;var bl0=O(()=>{m50={name:"decocms",version:"4.195.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/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","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 src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});import{Box as au6,Text as yi1}from"ink";import{jsx as su6,jsxs as gi1}from"react/jsx-runtime";function hi1({version:$}){return gi1(au6,{flexDirection:"column",marginTop:1,children:[z50.map((Z,X)=>su6(yi1,{color:j50[X],children:Z},X)),gi1(yi1,{dimColor:!0,children:[" v",$]})]})}var ui1=O(()=>{Um()});import{Box as nD,Text as Dw}from"ink";import{Spinner as eu6}from"@inkjs/ui";import{jsx as gY,jsxs as $b}from"react/jsx-runtime";function ci1({status:$}){if($==="pending")return gY(eu6,{label:""});return gY(Dw,{color:"green",children:"\u2713"})}function $c6($){return`${$.name}: ${$.port||"...."}`}function li1({services:$,migrationsStatus:Z,home:X,serverUrl:Q}){return $b(nD,{flexDirection:"column",paddingBottom:1,children:[gY(hi1,{version:m50.version}),gY(nD,{marginBottom:1,children:gY(Dw,{dimColor:!0,children:"\u2500".repeat(80)})}),gY(nD,{children:$b(Dw,{dimColor:!0,children:["Home: ",X]})}),$b(nD,{gap:2,children:[$.map((Y)=>$b(nD,{gap:1,children:[gY(Dw,{children:$c6(Y)}),gY(ci1,{status:Y.status})]},Y.name)),$b(nD,{gap:1,children:[gY(Dw,{children:"Migrations"}),gY(ci1,{status:Z})]})]}),gY(nD,{children:Q?$b(Dw,{children:["Open in browser: ",gY(Dw,{color:"cyan",children:Q})]}):gY(Dw,{dimColor:!0,children:"Starting..."})})]})}var di1=O(()=>{bl0();ui1()});import{Box as Zc6,Text as Mm}from"ink";import{jsx as yl0,jsxs as gl0}from"react/jsx-runtime";function Xc6($){if($>=500)return"red";if($>=400)return"yellow";if($>=300)return"cyan";return"green"}function mi1({logs:$}){return yl0(Zc6,{flexDirection:"column",children:$.map((Z,X)=>{if(Z.rawLine)return yl0(Mm,{dimColor:!0,children:Z.rawLine},X);let Q=Z.duration<1000?`${Z.duration}ms`:`${(Z.duration/1000).toFixed(1)}s`;return gl0(Mm,{children:[gl0(Mm,{dimColor:!0,children:[Z.method.padEnd(6)," ",Z.path.padEnd(30)," "]}),yl0(Mm,{color:Xc6(Z.status),children:Z.status}),gl0(Mm,{dimColor:!0,children:[" ",Q.padStart(8)]})]},X)})})}var ii1=()=>{};var hl0={};w0(hl0,{App:()=>Gc6});import{Box as Qc6}from"ink";import{useSyncExternalStore as Yc6}from"react";import{jsx as ni1,jsxs as Jc6}from"react/jsx-runtime";function Gc6({home:$}){let Z=Yc6(_l0,Cl0);return Jc6(Qc6,{flexDirection:"column",children:[ni1(li1,{services:Z.services,migrationsStatus:Z.migrationsStatus,home:$,serverUrl:Z.serverUrl}),ni1(mi1,{logs:Z.logs})]})}var ul0=O(()=>{di1();ii1();iD()});var WJ="thread-gate",kN="decopilot-hosted-harness",iG="automations",Ew="background-tools";var pi1="7";function ti1($){return{name:"decocms",systemDatabaseUrl:$.systemDatabaseUrl,systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:$.poolSize,runAdminServer:!1,executorID:$.executorID,applicationVersion:pi1,...$.listenQueues!==void 0?{listenQueues:$.listenQueues}:{}}}var oi1=()=>{};function Kc6(){let $=(process.env.BUN_OPTIONS??"").split(/\s+/).filter(Boolean);return[...process.argv.slice(1),...$]}function cl0($,Z){for(let X=0;X<$.length;X++){let Q=$[X];if(Q===void 0)continue;if(Q===Z)return $[X+1];if(Q.startsWith(`${Z}=`))return Q.slice(Z.length+1)}return}function ri1(){let $=Kc6();if($.includes("--cpu-prof")){console.log(JSON.stringify({msg:"cpu-profiling-active",dir:cl0($,"--cpu-prof-dir")??process.cwd(),name:cl0($,"--cpu-prof-name"),markdown:$.includes("--cpu-prof-md"),intervalUs:Number(cl0($,"--cpu-prof-interval")??1000),note:"profile is written on process exit"}));return}if(process.env.CPU_PROFILE)console.warn(JSON.stringify({msg:"cpu-profiling-requested-but-inactive",hint:'CPU profiling is a Bun launch flag. Set BUN_OPTIONS="--cpu-prof --cpu-prof-md --cpu-prof-dir=/tmp" before starting the process.'}))}function ai1(){if(process.env.HEAP_WATCH!=="1")return()=>{};let $=Number(process.env.HEAP_WATCH_INTERVAL_MS??60000),Z=async()=>{let X=uD();if(!X)return;let Q={};try{let{heapStats:Y}=await import("bun:jsc"),G=Y(),J=Object.entries(G.objectTypeCounts).sort((K,W)=>W[1]-K[1]).slice(0,20);Q={objectCount:G.objectCount,heapSize:G.heapSize,top:Object.fromEntries(J)}}catch{}console.log(JSON.stringify({msg:"heap-watch",ts:new Date().toISOString(),uptimeS:Math.round(process.uptime()),rss:X.rss,heapUsed:X.heapUsed,heapTotal:X.heapTotal,external:X.external,arrayBuffers:X.arrayBuffers,...Q}))};return Z().catch(()=>{}),i50=setInterval(()=>void Z().catch(()=>{}),$),i50.unref?.(),process.on("SIGUSR2",()=>{try{let X=Bun.generateHeapSnapshot("v8"),Q=typeof X==="string"?X:JSON.stringify(X),Y=`/tmp/heap-${process.pid}-${Date.now()}.heapsnapshot`;Bun.write(Y,Q),console.log(JSON.stringify({msg:"heap-snapshot-written",path:Y}))}catch(X){console.error("[heap-watch] snapshot failed:",X)}}),()=>{if(i50)clearInterval(i50)}}var i50;var si1=()=>{};import*as Wc6 from"bun:jsc";function ei1(){if(process.env.STALL_WATCHDOG!=="1")return()=>{};let $=Number(process.env.STALL_WATCHDOG_MS??100),Z=Number(process.env.STALL_WATCHDOG_TICK_MS??50);try{Hc6()}catch(G){return console.error("[stall-watchdog] failed to start sampling profiler:",G),()=>{}}let X,Q=performance.now()+Z,Y=()=>{let G=performance.now(),J=G-Q;Q=G+Z;let K=[];try{K=Nc6()?.traces??[]}catch{}if(J>$&&K.length>0){let W=new Map;for(let N of K){let U=N.frames.find((B)=>B.sourceURL&&!/Unknown Executable/.test(B.category??""))??N.frames[0];if(!U)continue;let F=(U.sourceURL??"?").replace(/^.*\/node_modules\//,"node_modules/"),w=`${U.name??"?"} @ ${F}:${U.line??"?"}`;W.set(w,(W.get(w)??0)+1)}let H=[...W.entries()].sort((N,U)=>U[1]-N[1]).slice(0,8).map(([N,U])=>({frame:N,count:U}));console.warn(JSON.stringify({msg:"stall-stack",ts:new Date().toISOString(),lagMs:Math.round(J),samplesInWindow:K.length,top:H}))}X=setTimeout(Y,Z),X.unref?.()};return X=setTimeout(Y,Z),X.unref?.(),()=>{if(X)clearTimeout(X)}}var Hc6,Nc6;var $n1=O(()=>{({startSamplingProfiler:Hc6,samplingProfilerStackTraces:Nc6}=Wc6)});function Zn1(){ri1();let $=[ai1(),Zl1(),ei1()];return()=>{for(let Z of $)Z()}}var Xn1=O(()=>{pg0();si1();$n1()});var pD=_((Qn1)=>{Object.defineProperty(Qn1,"__esModule",{value:!0});Qn1.RepublishHeaders=Qn1.DirectMsgHeaders=Qn1.JsHeaders=Qn1.AdvisoryKind=void 0;Qn1.isOrderedPushConsumerOptions=Uc6;Qn1.isPullConsumer=Fc6;Qn1.isPushConsumer=wc6;Qn1.isBoundPushConsumerOptions=Bc6;function Uc6($){if($&&typeof $==="object")return"name_prefix"in $||"deliver_subject_prefix"in $||"filter_subjects"in $||"filter_subject"in $||"deliver_policy"in $||"opt_start_seq"in $||"opt_start_time"in $||"replay_policy"in $||"inactive_threshold"in $||"headers_only"in $||"deliver_prefix"in $;return!1}function Fc6($){return $.isPullConsumer()}function wc6($){return $.isPushConsumer()}function Bc6($){if($&&typeof $==="object")return"deliver_subject"in $||"deliver_group"in $||"idle_heartbeat"in $;return!1}Qn1.AdvisoryKind={API:"api_audit",StreamAction:"stream_action",ConsumerAction:"consumer_action",SnapshotCreate:"snapshot_create",SnapshotComplete:"snapshot_complete",RestoreCreate:"restore_create",RestoreComplete:"restore_complete",MaxDeliver:"max_deliver",Terminated:"terminated",Ack:"consumer_ack",StreamLeaderElected:"stream_leader_elected",StreamQuorumLost:"stream_quorum_lost",ConsumerLeaderElected:"consumer_leader_elected",ConsumerQuorumLost:"consumer_quorum_lost"};Qn1.JsHeaders={StreamSourceHdr:"Nats-Stream-Source",LastConsumerSeqHdr:"Nats-Last-Consumer",LastStreamSeqHdr:"Nats-Last-Stream",ConsumerStalledHdr:"Nats-Consumer-Stalled",MessageSizeHdr:"Nats-Msg-Size",RollupHdr:"Nats-Rollup",RollupValueSubject:"sub",RollupValueAll:"all",PendingMessagesHdr:"Nats-Pending-Messages",PendingBytesHdr:"Nats-Pending-Bytes",RequiredApiLevel:"Nats-Required-Api-Level"};Qn1.DirectMsgHeaders={Stream:"Nats-Stream",Sequence:"Nats-Sequence",TimeStamp:"Nats-Time-Stamp",Subject:"Nats-Subject",LastSequence:"Nats-Last-Sequence",NumPending:"Nats-Num-Pending"};Qn1.RepublishHeaders={Stream:"Nats-Stream",Subject:"Nats-Subject",Sequence:"Nats-Sequence",LastSequence:"Nats-Last-Sequence",Size:"Nats-Msg-Size"}});var hY=_((Gn1)=>{Object.defineProperty(Gn1,"__esModule",{value:!0});Gn1.TD=Gn1.TE=Gn1.Empty=void 0;Gn1.encode=Tc6;Gn1.decode=Rc6;Gn1.Empty=new Uint8Array(0);Gn1.TE=new TextEncoder;Gn1.TD=new TextDecoder;function Ac6(...$){let Z=0;for(let Y=0;Y<$.length;Y++)Z+=$[Y].length;let X=new Uint8Array(Z),Q=0;for(let Y=0;Y<$.length;Y++)X.set($[Y],Q),Q+=$[Y].length;return X}function Tc6(...$){let Z=[];for(let X=0;X<$.length;X++)Z.push(Gn1.TE.encode($[X]));if(Z.length===0)return Gn1.Empty;if(Z.length===1)return Z[0];return Ac6(...Z)}function Rc6($){if(!$||$.length===0)return"";return Gn1.TD.decode($)}});var uY=_((Wn1)=>{Object.defineProperty(Wn1,"__esModule",{value:!0});Wn1.errors=Wn1.PermissionViolationError=Wn1.NoRespondersError=Wn1.TimeoutError=Wn1.RequestError=Wn1.ProtocolError=Wn1.ConnectionError=Wn1.DrainingConnectionError=Wn1.ClosedConnectionError=Wn1.AuthorizationError=Wn1.UserAuthenticationExpiredError=Wn1.InvalidOperationError=Wn1.InvalidArgumentError=Wn1.InvalidSubjectError=void 0;class dl0 extends Error{constructor($,Z){super(`illegal subject: '${$}'`,Z);this.name="InvalidSubjectError"}}Wn1.InvalidSubjectError=dl0;class n50 extends Error{constructor($,Z){super($,Z);this.name="InvalidArgumentError"}static format($,Z,X){if(Array.isArray(Z)&&Z.length>1)Z=Z[0];if(Array.isArray($))$=$.map((Q)=>`'${Q}'`),$=$.join(",");else $=`'${$}'`;return new n50(`${$} ${Z}`,X)}}Wn1.InvalidArgumentError=n50;class ml0 extends Error{constructor($,Z){super($,Z);this.name="InvalidOperationError"}}Wn1.InvalidOperationError=ml0;class p50 extends Error{constructor($,Z){super($,Z);this.name="UserAuthenticationExpiredError"}static parse($){if($.toLowerCase().indexOf("user authentication expired")!==-1)return new p50($);return null}}Wn1.UserAuthenticationExpiredError=p50;class t50 extends Error{constructor($,Z){super($,Z);this.name="AuthorizationError"}static parse($){let Z=["authorization violation","account authentication expired","authentication timeout"],X=$.toLowerCase();for(let Q=0;Q<Z.length;Q++)if(X.indexOf(Z[Q])!==-1)return new t50($);return null}}Wn1.AuthorizationError=t50;class il0 extends Error{constructor(){super("closed connection");this.name="ClosedConnectionError"}}Wn1.ClosedConnectionError=il0;class nl0 extends Error{constructor(){super("connection draining");this.name="DrainingConnectionError"}}Wn1.DrainingConnectionError=nl0;class pl0 extends Error{constructor($,Z){super($,Z);this.name="ConnectionError"}}Wn1.ConnectionError=pl0;class tl0 extends Error{constructor($,Z){super($,Z);this.name="ProtocolError"}}Wn1.ProtocolError=tl0;class ol0 extends Error{constructor($="",Z){super($,Z);this.name="RequestError"}isNoResponders(){return this.cause instanceof o50}}Wn1.RequestError=ol0;class rl0 extends Error{constructor($){super("timeout",$);this.name="TimeoutError"}}Wn1.TimeoutError=rl0;class o50 extends Error{subject;constructor($,Z){super(`no responders: '${$}'`,Z);this.subject=$,this.name="NoResponders"}}Wn1.NoRespondersError=o50;class r50 extends Error{operation;subject;queue;constructor($,Z,X,Q,Y){super($,Y);this.name="PermissionViolationError",this.operation=Z,this.subject=X,this.queue=Q}static parse($){if(($?$.toLowerCase():"").indexOf("permissions violation")===-1)return null;let X="publish",Q="",Y=void 0,G=$.match(/(Publish|Subscription) to "(\S+)"/);if(G){if(X=G[1].toLowerCase(),Q=G[2],X==="subscription"){let J=$.match(/using queue "(\S+)"/);if(J)Y=J[1]}}return new r50($,X,Q,Y)}}Wn1.PermissionViolationError=r50;Wn1.errors={AuthorizationError:t50,ClosedConnectionError:il0,ConnectionError:pl0,DrainingConnectionError:nl0,InvalidArgumentError:n50,InvalidOperationError:ml0,InvalidSubjectError:dl0,NoRespondersError:o50,PermissionViolationError:r50,ProtocolError:tl0,RequestError:ol0,TimeoutError:rl0,UserAuthenticationExpiredError:p50}});var HJ=_((wn1)=>{Object.defineProperty(wn1,"__esModule",{value:!0});wn1.SimpleMutex=wn1.Perf=void 0;wn1.extend=cc6;wn1.render=lc6;wn1.timeout=dc6;wn1.delay=mc6;wn1.deadline=ic6;wn1.deferred=sl0;wn1.debugDeferred=nc6;wn1.shuffle=pc6;wn1.collect=tc6;wn1.jitter=Fn1;wn1.backoff=oc6;wn1.nanos=rc6;wn1.millis=ac6;wn1.randomToken=$l6;var uc6=hY(),al0=uY();function cc6($,...Z){for(let X=0;X<Z.length;X++){let Q=Z[X];Object.keys(Q).forEach(function(Y){$[Y]=Q[Y]})}return $}function lc6($){return uc6.TD.decode($).replace(/\n/g,"\u240A").replace(/\r/g,"\u240D")}function dc6($,Z=!0){let X=Z?new al0.TimeoutError:null,Q,Y,G=new Promise((J,K)=>{Q={cancel:()=>{if(Y)clearTimeout(Y)}},Y=setTimeout(()=>{if(X===null)K(new al0.TimeoutError);else K(X)},$)});return Object.assign(G,Q)}function mc6($=0){let Z,X=new Promise((Q)=>{let Y=setTimeout(()=>{Q()},$);Z={cancel:()=>{if(Y)clearTimeout(Y),Q()}}});return Object.assign(X,Z)}async function ic6($,Z=1000){let X=sl0(),Q=setTimeout(()=>{X.reject(new al0.TimeoutError)},Z);try{return await Promise.race([$,X])}finally{clearTimeout(Q)}}function sl0(){let $={},Z=new Promise((X,Q)=>{$={resolve:X,reject:Q}});return Object.assign(Z,$)}function nc6(){let $={},Z=new Promise((X,Q)=>{$={resolve:(Y)=>{console.trace("resolve",Y),X(Y)},reject:(Y)=>{console.trace("reject"),Q(Y)}}});return Object.assign(Z,$)}function pc6($){for(let Z=$.length-1;Z>0;Z--){let X=Math.floor(Math.random()*(Z+1));[$[Z],$[X]]=[$[X],$[Z]]}return $}async function tc6($){let Z=[];for await(let X of $)Z.push(X);return Z}class Nn1{timers;measures;constructor(){this.timers=new Map,this.measures=new Map}mark($){this.timers.set($,performance.now())}measure($,Z,X){let Q=this.timers.get(Z);if(Q===void 0)throw Error(`${Z} is not defined`);let Y=this.timers.get(X);if(Y===void 0)throw Error(`${X} is not defined`);this.measures.set($,Y-Q)}getEntries(){let $=[];return this.measures.forEach((Z,X)=>{$.push({name:X,duration:Z})}),$}}wn1.Perf=Nn1;class Un1{max;current;waiting;constructor($=1){this.max=$,this.current=0,this.waiting=[]}lock(){if(this.current++,this.current<=this.max)return Promise.resolve();let $=sl0();return this.waiting.push($),$}unlock(){this.current--,this.waiting.pop()?.resolve()}}wn1.SimpleMutex=Un1;function Fn1($){if($===0)return 0;return Math.floor($/2+Math.random()*$)}function oc6($=[0,250,250,500,500,3000,5000]){if(!Array.isArray($))$=[0,250,250,500,500,3000,5000];let Z=$.length-1;return{backoff(X){return Fn1(X>Z?$[Z]:$[X])}}}function rc6($){return $*1e6}function ac6($){return Math.floor($/1e6)}var sc6="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",VN=new Uint8Array(62);for(let $=0;$<62;$++)VN[$]=sc6.charCodeAt($);var ec6=218340105584896;function $l6(){let $=Math.floor(Math.random()*ec6),Z=$%62,X=VN[Z];$=($-Z)/62,Z=$%62;let Q=VN[Z];$=($-Z)/62,Z=$%62;let Y=VN[Z];$=($-Z)/62,Z=$%62;let G=VN[Z];$=($-Z)/62,Z=$%62;let J=VN[Z];$=($-Z)/62,Z=$%62;let K=VN[Z];$=($-Z)/62,Z=$%62;let W=VN[Z];$=($-Z)/62;let H=VN[$];return String.fromCharCode(X,Q,Y,G,J,K,W,H)}});var Pn1=_((zn1)=>{Object.defineProperty(zn1,"__esModule",{value:!0});zn1.nuid=zn1.NuidImpl=void 0;var Ll6="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",zw=62,s50=12,Dn1=10,On1=33,Dl6=333,Ln1=s50+Dn1,$d0=new Uint8Array(zw);for(let $=0;$<zw;$++)$d0[$]=Ll6.charCodeAt($);var a50=4294967296,En1=BigInt(zw)**BigInt(Dn1),km=Number(En1/(1n<<32n)),el0=Number(En1%(1n<<32n));function El6($){for(let Z=0;Z<$.length;Z++)$[Z]=Math.floor(Math.random()*256)}function zl6($){if(globalThis?.crypto?.getRandomValues)globalThis.crypto.getRandomValues($);else El6($)}class Zd0{buf;cbuf;seqHi;seqLo;inc;inited;constructor(){this.buf=new Uint8Array(Ln1),this.cbuf=new Uint8Array(s50),this.inited=!1}init(){this.inited=!0,this.setPre(),this.initSeqAndInc(),this.fillSeq()}initSeqAndInc(){let $=0;do this.seqHi=Math.floor(Math.random()*(km+1)),this.seqLo=Math.floor(Math.random()*a50);while($++<8&&this.seqHi===km&&this.seqLo>=el0);if(this.seqHi===km&&this.seqLo>=el0)this.seqLo=0;this.inc=Math.random()*(Dl6-On1)+On1|0}setPre(){zl6(this.cbuf);for(let $=0;$<s50;$++)this.buf[$]=$d0[this.cbuf[$]%zw]}fillSeq(){let $=this.seqHi,Z=this.seqLo;for(let X=Ln1-1;X>=s50;X--){let Q=Math.floor($/zw),G=($-Q*zw)*a50+Z,J=Math.floor(G/zw),K=G-J*zw;this.buf[X]=$d0[K],$=Q,Z=J}}next(){if(!this.inited)this.init();if(this.seqLo+=this.inc,this.seqLo>=a50)this.seqLo-=a50,this.seqHi+=1;if(this.seqHi>km||this.seqHi===km&&this.seqLo>=el0)this.setPre(),this.initSeqAndInc();this.fillSeq();let $=this.buf;return String.fromCharCode($[0],$[1],$[2],$[3],$[4],$[5],$[6],$[7],$[8],$[9],$[10],$[11],$[12],$[13],$[14],$[15],$[16],$[17],$[18],$[19],$[20],$[21])}reset(){this.init()}}zn1.NuidImpl=Zd0;zn1.nuid=new Zd0});var In1=_((Tn1)=>{Object.defineProperty(Tn1,"__esModule",{value:!0});Tn1.nuid=Tn1.Nuid=void 0;var An1=Pn1();Tn1.Nuid=An1.NuidImpl;Tn1.nuid=An1.nuid});var $90=_((e50)=>{Object.defineProperty(e50,"__esModule",{value:!0});e50.nuid=e50.Nuid=void 0;var qn1=In1();Object.defineProperty(e50,"Nuid",{enumerable:!0,get:function(){return qn1.Nuid}});Object.defineProperty(e50,"nuid",{enumerable:!0,get:function(){return qn1.nuid}})});var jw=_((Mn1)=>{Object.defineProperty(Mn1,"__esModule",{value:!0});Mn1.DEFAULT_HOST=Mn1.DEFAULT_PORT=Mn1.Match=void 0;Mn1.syncIterator=Il6;Mn1.createInbox=ql6;var Tl6=$90(),Rl6=uY();Mn1.Match={Exact:"exact",CanonicalMIME:"canonical",IgnoreCase:"insensitive"};function Il6($){let Z=$[Symbol.asyncIterator]();return{async next(){let X=await Z.next();if(X.done)return Promise.resolve(null);return Promise.resolve(X.value)}}}function ql6($=""){if($=$||"_INBOX",typeof $!=="string")throw TypeError("prefix must be a string");return $.split(".").forEach((Z)=>{if(Z==="*"||Z===">")throw Rl6.InvalidArgumentError.format("prefix",`cannot have wildcards ('${$}')`)}),`${$}.${Tl6.nuid.next()}`}Mn1.DEFAULT_PORT=4222;Mn1.DEFAULT_HOST="127.0.0.1"});var Vm=_((Cn1)=>{Object.defineProperty(Cn1,"__esModule",{value:!0});Cn1.DataBuffer=void 0;var Vn1=hY();class Sn1{buffers;byteLength;constructor(){this.buffers=[],this.byteLength=0}static concat(...$){let Z=0;for(let Y=0;Y<$.length;Y++)Z+=$[Y].length;let X=new Uint8Array(Z),Q=0;for(let Y=0;Y<$.length;Y++)X.set($[Y],Q),Q+=$[Y].length;return X}static fromAscii($){if(!$)$="";return Vn1.TE.encode($)}static toAscii($){return Vn1.TD.decode($)}reset(){this.buffers.length=0,this.byteLength=0}pack(){if(this.buffers.length>1){let $=new Uint8Array(this.byteLength),Z=0;for(let X=0;X<this.buffers.length;X++)$.set(this.buffers[X],Z),Z+=this.buffers[X].length;this.buffers.length=0,this.buffers.push($)}}shift(){if(this.buffers.length){let $=this.buffers.shift();if($)return this.byteLength-=$.length,$}return new Uint8Array(0)}drain($){if(this.buffers.length){this.pack();let Z=this.buffers.pop();if(Z){let X=this.byteLength;if($===void 0||$>X)$=X;let Q=Z.subarray(0,$);if(X>$)this.buffers.push(Z.subarray($));return this.byteLength=X-$,Q}}return new Uint8Array(0)}fill($,...Z){if($)this.buffers.push($),this.byteLength+=$.length;for(let X=0;X<Z.length;X++)if(Z[X]&&Z[X].length)this.buffers.push(Z[X]),this.byteLength+=Z[X].length}peek(){if(this.buffers.length)return this.pack(),this.buffers[0];return new Uint8Array(0)}size(){return this.byteLength}length(){return this.buffers.length}}Cn1.DataBuffer=Sn1});var tD=_((xn1)=>{Object.defineProperty(xn1,"__esModule",{value:!0});xn1.LF=xn1.CR=xn1.CRLF=xn1.CR_LF_LEN=xn1.CR_LF=void 0;xn1.setTransportFactory=xl6;xn1.defaultPort=fl6;xn1.getUrlParseFn=bl6;xn1.newTransport=yl6;xn1.getResolveFn=gl6;xn1.protoLen=vn1;xn1.extractProtocolMessage=hl6;var Cl6=hY(),_l6=jw(),vl6=Vm(),cY;function xl6($){cY=$}function fl6(){return cY!==void 0&&cY.defaultPort!==void 0?cY.defaultPort:_l6.DEFAULT_PORT}function bl6(){return cY!==void 0&&cY.urlParseFn?cY.urlParseFn:void 0}function yl6(){if(!cY||typeof cY.factory!=="function")throw Error("transport fn is not set");return cY.factory()}function gl6(){return cY!==void 0&&cY.dnsResolveFn?cY.dnsResolveFn:void 0}xn1.CR_LF=`\r
1313
+ `);Q=G.pop()??"";for(let J of G){let K=qm(J).replace(/^\[\d+\]\s*/,"").trim();if(!K)continue;Lw({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:K})}}(async()=>{for(;;){let{done:G,value:J}=await Z.read();if(G)break;Q+=X.decode(J,{stream:!0}),Y()}if(Q.trim()){let G=qm(Q).replace(/^\[\d+\]\s*/,"").trim();if(G)Lw({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:G})}})()}async function ou6($){let{baseUrl:Z,noTui:X}=$,Q=process.env.HOST==="0.0.0.0"&&Boolean(process.env.PORT),Y=Q?process.env.PORT:$.vitePort,G=Z||`http://localhost:${Y}`,J=Q?await Im(Number(Y)+1):await Im(Number($.port)),{settings:K,services:W,managedServiceNames:H}=await c50({port:String(J),home:$.home,baseUrl:$.baseUrl,localMode:$.localMode,skipMigrations:$.skipMigrations,noTui:$.noTui,vitePort:$.vitePort});for(let L of W)mD({name:L.name,status:"ready",port:L.port});Tm();let N=tu6(import.meta.dir,"..","..","..","..",".."),U=X===!0,F=Bun.spawn(["bun","run","dev:servers"],{cwd:N,env:{...process.env,PORT:String(K.port),VITE_PORT:String(Y),DATABASE_URL:K.databaseUrl,NATS_URL:K.natsUrls.join(","),NODE_ENV:K.nodeEnv,BASE_URL:G,DECOCMS_LOCAL_MODE:String(K.localMode),DECOCMS_HOME:K.dataDir,DATA_DIR:K.dataDir,DECO_CLI:"1",...K.betterAuthSecret?{BETTER_AUTH_SECRET:K.betterAuthSecret}:{},...K.s3Endpoint?{S3_ENDPOINT:K.s3Endpoint,S3_BUCKET:K.s3Bucket??"",S3_ACCESS_KEY_ID:K.s3AccessKeyId??"",S3_SECRET_ACCESS_KEY:K.s3SecretAccessKey??"",S3_FORCE_PATH_STYLE:String(K.s3ForcePathStyle)}:{},...K.natsPublicUrl&&K.natsAccountJwt&&K.natsAccountSigningKey?{NATS_PUBLIC_URL:K.natsPublicUrl,NATS_ACCOUNT_JWT:K.natsAccountJwt,NATS_ACCOUNT_SIGNING_KEY:K.natsAccountSigningKey,NATS_OPERATOR_JWT:K.natsOperatorJwt??"",NATS_TUNNEL_PUBLIC_ENABLED:"true",...K.natsCredsPath?{NATS_CREDS:K.natsCredsPath}:{}}:{}},stdio:["inherit",U?"inherit":"pipe",U?"inherit":"pipe"]});if(!U)bi1(F.stdout),bi1(F.stderr);Rm(G),mD({name:"Vite",status:"ready",port:Number(Y)}),mD({name:"API",status:"ready",port:Number(K.port)});let B=async(L)=>{if(F.kill(L),await F.exited,H.length>0){let{stopServices:D}=await Promise.resolve().then(() => (s$0(),a$0));await D(K.dataDir)}};return process.on("SIGINT",()=>B("SIGINT")),process.on("SIGTERM",()=>B("SIGTERM")),{port:Number(Y),process:F}}var fl0=O(()=>{Vl0();iD();vl0()});var m50;var bl0=O(()=>{m50={name:"decocms",version:"4.196.0",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","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 src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});import{Box as au6,Text as yi1}from"ink";import{jsx as su6,jsxs as gi1}from"react/jsx-runtime";function hi1({version:$}){return gi1(au6,{flexDirection:"column",marginTop:1,children:[z50.map((Z,X)=>su6(yi1,{color:j50[X],children:Z},X)),gi1(yi1,{dimColor:!0,children:[" v",$]})]})}var ui1=O(()=>{Um()});import{Box as nD,Text as Dw}from"ink";import{Spinner as eu6}from"@inkjs/ui";import{jsx as gY,jsxs as $b}from"react/jsx-runtime";function ci1({status:$}){if($==="pending")return gY(eu6,{label:""});return gY(Dw,{color:"green",children:"\u2713"})}function $c6($){return`${$.name}: ${$.port||"...."}`}function li1({services:$,migrationsStatus:Z,home:X,serverUrl:Q}){return $b(nD,{flexDirection:"column",paddingBottom:1,children:[gY(hi1,{version:m50.version}),gY(nD,{marginBottom:1,children:gY(Dw,{dimColor:!0,children:"\u2500".repeat(80)})}),gY(nD,{children:$b(Dw,{dimColor:!0,children:["Home: ",X]})}),$b(nD,{gap:2,children:[$.map((Y)=>$b(nD,{gap:1,children:[gY(Dw,{children:$c6(Y)}),gY(ci1,{status:Y.status})]},Y.name)),$b(nD,{gap:1,children:[gY(Dw,{children:"Migrations"}),gY(ci1,{status:Z})]})]}),gY(nD,{children:Q?$b(Dw,{children:["Open in browser: ",gY(Dw,{color:"cyan",children:Q})]}):gY(Dw,{dimColor:!0,children:"Starting..."})})]})}var di1=O(()=>{bl0();ui1()});import{Box as Zc6,Text as Mm}from"ink";import{jsx as yl0,jsxs as gl0}from"react/jsx-runtime";function Xc6($){if($>=500)return"red";if($>=400)return"yellow";if($>=300)return"cyan";return"green"}function mi1({logs:$}){return yl0(Zc6,{flexDirection:"column",children:$.map((Z,X)=>{if(Z.rawLine)return yl0(Mm,{dimColor:!0,children:Z.rawLine},X);let Q=Z.duration<1000?`${Z.duration}ms`:`${(Z.duration/1000).toFixed(1)}s`;return gl0(Mm,{children:[gl0(Mm,{dimColor:!0,children:[Z.method.padEnd(6)," ",Z.path.padEnd(30)," "]}),yl0(Mm,{color:Xc6(Z.status),children:Z.status}),gl0(Mm,{dimColor:!0,children:[" ",Q.padStart(8)]})]},X)})})}var ii1=()=>{};var hl0={};w0(hl0,{App:()=>Gc6});import{Box as Qc6}from"ink";import{useSyncExternalStore as Yc6}from"react";import{jsx as ni1,jsxs as Jc6}from"react/jsx-runtime";function Gc6({home:$}){let Z=Yc6(_l0,Cl0);return Jc6(Qc6,{flexDirection:"column",children:[ni1(li1,{services:Z.services,migrationsStatus:Z.migrationsStatus,home:$,serverUrl:Z.serverUrl}),ni1(mi1,{logs:Z.logs})]})}var ul0=O(()=>{di1();ii1();iD()});var WJ="thread-gate",kN="decopilot-hosted-harness",iG="automations",Ew="background-tools";var pi1="7";function ti1($){return{name:"decocms",systemDatabaseUrl:$.systemDatabaseUrl,systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:$.poolSize,runAdminServer:!1,executorID:$.executorID,applicationVersion:pi1,...$.listenQueues!==void 0?{listenQueues:$.listenQueues}:{}}}var oi1=()=>{};function Kc6(){let $=(process.env.BUN_OPTIONS??"").split(/\s+/).filter(Boolean);return[...process.argv.slice(1),...$]}function cl0($,Z){for(let X=0;X<$.length;X++){let Q=$[X];if(Q===void 0)continue;if(Q===Z)return $[X+1];if(Q.startsWith(`${Z}=`))return Q.slice(Z.length+1)}return}function ri1(){let $=Kc6();if($.includes("--cpu-prof")){console.log(JSON.stringify({msg:"cpu-profiling-active",dir:cl0($,"--cpu-prof-dir")??process.cwd(),name:cl0($,"--cpu-prof-name"),markdown:$.includes("--cpu-prof-md"),intervalUs:Number(cl0($,"--cpu-prof-interval")??1000),note:"profile is written on process exit"}));return}if(process.env.CPU_PROFILE)console.warn(JSON.stringify({msg:"cpu-profiling-requested-but-inactive",hint:'CPU profiling is a Bun launch flag. Set BUN_OPTIONS="--cpu-prof --cpu-prof-md --cpu-prof-dir=/tmp" before starting the process.'}))}function ai1(){if(process.env.HEAP_WATCH!=="1")return()=>{};let $=Number(process.env.HEAP_WATCH_INTERVAL_MS??60000),Z=async()=>{let X=uD();if(!X)return;let Q={};try{let{heapStats:Y}=await import("bun:jsc"),G=Y(),J=Object.entries(G.objectTypeCounts).sort((K,W)=>W[1]-K[1]).slice(0,20);Q={objectCount:G.objectCount,heapSize:G.heapSize,top:Object.fromEntries(J)}}catch{}console.log(JSON.stringify({msg:"heap-watch",ts:new Date().toISOString(),uptimeS:Math.round(process.uptime()),rss:X.rss,heapUsed:X.heapUsed,heapTotal:X.heapTotal,external:X.external,arrayBuffers:X.arrayBuffers,...Q}))};return Z().catch(()=>{}),i50=setInterval(()=>void Z().catch(()=>{}),$),i50.unref?.(),process.on("SIGUSR2",()=>{try{let X=Bun.generateHeapSnapshot("v8"),Q=typeof X==="string"?X:JSON.stringify(X),Y=`/tmp/heap-${process.pid}-${Date.now()}.heapsnapshot`;Bun.write(Y,Q),console.log(JSON.stringify({msg:"heap-snapshot-written",path:Y}))}catch(X){console.error("[heap-watch] snapshot failed:",X)}}),()=>{if(i50)clearInterval(i50)}}var i50;var si1=()=>{};import*as Wc6 from"bun:jsc";function ei1(){if(process.env.STALL_WATCHDOG!=="1")return()=>{};let $=Number(process.env.STALL_WATCHDOG_MS??100),Z=Number(process.env.STALL_WATCHDOG_TICK_MS??50);try{Hc6()}catch(G){return console.error("[stall-watchdog] failed to start sampling profiler:",G),()=>{}}let X,Q=performance.now()+Z,Y=()=>{let G=performance.now(),J=G-Q;Q=G+Z;let K=[];try{K=Nc6()?.traces??[]}catch{}if(J>$&&K.length>0){let W=new Map;for(let N of K){let U=N.frames.find((B)=>B.sourceURL&&!/Unknown Executable/.test(B.category??""))??N.frames[0];if(!U)continue;let F=(U.sourceURL??"?").replace(/^.*\/node_modules\//,"node_modules/"),w=`${U.name??"?"} @ ${F}:${U.line??"?"}`;W.set(w,(W.get(w)??0)+1)}let H=[...W.entries()].sort((N,U)=>U[1]-N[1]).slice(0,8).map(([N,U])=>({frame:N,count:U}));console.warn(JSON.stringify({msg:"stall-stack",ts:new Date().toISOString(),lagMs:Math.round(J),samplesInWindow:K.length,top:H}))}X=setTimeout(Y,Z),X.unref?.()};return X=setTimeout(Y,Z),X.unref?.(),()=>{if(X)clearTimeout(X)}}var Hc6,Nc6;var $n1=O(()=>{({startSamplingProfiler:Hc6,samplingProfilerStackTraces:Nc6}=Wc6)});function Zn1(){ri1();let $=[ai1(),Zl1(),ei1()];return()=>{for(let Z of $)Z()}}var Xn1=O(()=>{pg0();si1();$n1()});var pD=_((Qn1)=>{Object.defineProperty(Qn1,"__esModule",{value:!0});Qn1.RepublishHeaders=Qn1.DirectMsgHeaders=Qn1.JsHeaders=Qn1.AdvisoryKind=void 0;Qn1.isOrderedPushConsumerOptions=Uc6;Qn1.isPullConsumer=Fc6;Qn1.isPushConsumer=wc6;Qn1.isBoundPushConsumerOptions=Bc6;function Uc6($){if($&&typeof $==="object")return"name_prefix"in $||"deliver_subject_prefix"in $||"filter_subjects"in $||"filter_subject"in $||"deliver_policy"in $||"opt_start_seq"in $||"opt_start_time"in $||"replay_policy"in $||"inactive_threshold"in $||"headers_only"in $||"deliver_prefix"in $;return!1}function Fc6($){return $.isPullConsumer()}function wc6($){return $.isPushConsumer()}function Bc6($){if($&&typeof $==="object")return"deliver_subject"in $||"deliver_group"in $||"idle_heartbeat"in $;return!1}Qn1.AdvisoryKind={API:"api_audit",StreamAction:"stream_action",ConsumerAction:"consumer_action",SnapshotCreate:"snapshot_create",SnapshotComplete:"snapshot_complete",RestoreCreate:"restore_create",RestoreComplete:"restore_complete",MaxDeliver:"max_deliver",Terminated:"terminated",Ack:"consumer_ack",StreamLeaderElected:"stream_leader_elected",StreamQuorumLost:"stream_quorum_lost",ConsumerLeaderElected:"consumer_leader_elected",ConsumerQuorumLost:"consumer_quorum_lost"};Qn1.JsHeaders={StreamSourceHdr:"Nats-Stream-Source",LastConsumerSeqHdr:"Nats-Last-Consumer",LastStreamSeqHdr:"Nats-Last-Stream",ConsumerStalledHdr:"Nats-Consumer-Stalled",MessageSizeHdr:"Nats-Msg-Size",RollupHdr:"Nats-Rollup",RollupValueSubject:"sub",RollupValueAll:"all",PendingMessagesHdr:"Nats-Pending-Messages",PendingBytesHdr:"Nats-Pending-Bytes",RequiredApiLevel:"Nats-Required-Api-Level"};Qn1.DirectMsgHeaders={Stream:"Nats-Stream",Sequence:"Nats-Sequence",TimeStamp:"Nats-Time-Stamp",Subject:"Nats-Subject",LastSequence:"Nats-Last-Sequence",NumPending:"Nats-Num-Pending"};Qn1.RepublishHeaders={Stream:"Nats-Stream",Subject:"Nats-Subject",Sequence:"Nats-Sequence",LastSequence:"Nats-Last-Sequence",Size:"Nats-Msg-Size"}});var hY=_((Gn1)=>{Object.defineProperty(Gn1,"__esModule",{value:!0});Gn1.TD=Gn1.TE=Gn1.Empty=void 0;Gn1.encode=Tc6;Gn1.decode=Rc6;Gn1.Empty=new Uint8Array(0);Gn1.TE=new TextEncoder;Gn1.TD=new TextDecoder;function Ac6(...$){let Z=0;for(let Y=0;Y<$.length;Y++)Z+=$[Y].length;let X=new Uint8Array(Z),Q=0;for(let Y=0;Y<$.length;Y++)X.set($[Y],Q),Q+=$[Y].length;return X}function Tc6(...$){let Z=[];for(let X=0;X<$.length;X++)Z.push(Gn1.TE.encode($[X]));if(Z.length===0)return Gn1.Empty;if(Z.length===1)return Z[0];return Ac6(...Z)}function Rc6($){if(!$||$.length===0)return"";return Gn1.TD.decode($)}});var uY=_((Wn1)=>{Object.defineProperty(Wn1,"__esModule",{value:!0});Wn1.errors=Wn1.PermissionViolationError=Wn1.NoRespondersError=Wn1.TimeoutError=Wn1.RequestError=Wn1.ProtocolError=Wn1.ConnectionError=Wn1.DrainingConnectionError=Wn1.ClosedConnectionError=Wn1.AuthorizationError=Wn1.UserAuthenticationExpiredError=Wn1.InvalidOperationError=Wn1.InvalidArgumentError=Wn1.InvalidSubjectError=void 0;class dl0 extends Error{constructor($,Z){super(`illegal subject: '${$}'`,Z);this.name="InvalidSubjectError"}}Wn1.InvalidSubjectError=dl0;class n50 extends Error{constructor($,Z){super($,Z);this.name="InvalidArgumentError"}static format($,Z,X){if(Array.isArray(Z)&&Z.length>1)Z=Z[0];if(Array.isArray($))$=$.map((Q)=>`'${Q}'`),$=$.join(",");else $=`'${$}'`;return new n50(`${$} ${Z}`,X)}}Wn1.InvalidArgumentError=n50;class ml0 extends Error{constructor($,Z){super($,Z);this.name="InvalidOperationError"}}Wn1.InvalidOperationError=ml0;class p50 extends Error{constructor($,Z){super($,Z);this.name="UserAuthenticationExpiredError"}static parse($){if($.toLowerCase().indexOf("user authentication expired")!==-1)return new p50($);return null}}Wn1.UserAuthenticationExpiredError=p50;class t50 extends Error{constructor($,Z){super($,Z);this.name="AuthorizationError"}static parse($){let Z=["authorization violation","account authentication expired","authentication timeout"],X=$.toLowerCase();for(let Q=0;Q<Z.length;Q++)if(X.indexOf(Z[Q])!==-1)return new t50($);return null}}Wn1.AuthorizationError=t50;class il0 extends Error{constructor(){super("closed connection");this.name="ClosedConnectionError"}}Wn1.ClosedConnectionError=il0;class nl0 extends Error{constructor(){super("connection draining");this.name="DrainingConnectionError"}}Wn1.DrainingConnectionError=nl0;class pl0 extends Error{constructor($,Z){super($,Z);this.name="ConnectionError"}}Wn1.ConnectionError=pl0;class tl0 extends Error{constructor($,Z){super($,Z);this.name="ProtocolError"}}Wn1.ProtocolError=tl0;class ol0 extends Error{constructor($="",Z){super($,Z);this.name="RequestError"}isNoResponders(){return this.cause instanceof o50}}Wn1.RequestError=ol0;class rl0 extends Error{constructor($){super("timeout",$);this.name="TimeoutError"}}Wn1.TimeoutError=rl0;class o50 extends Error{subject;constructor($,Z){super(`no responders: '${$}'`,Z);this.subject=$,this.name="NoResponders"}}Wn1.NoRespondersError=o50;class r50 extends Error{operation;subject;queue;constructor($,Z,X,Q,Y){super($,Y);this.name="PermissionViolationError",this.operation=Z,this.subject=X,this.queue=Q}static parse($){if(($?$.toLowerCase():"").indexOf("permissions violation")===-1)return null;let X="publish",Q="",Y=void 0,G=$.match(/(Publish|Subscription) to "(\S+)"/);if(G){if(X=G[1].toLowerCase(),Q=G[2],X==="subscription"){let J=$.match(/using queue "(\S+)"/);if(J)Y=J[1]}}return new r50($,X,Q,Y)}}Wn1.PermissionViolationError=r50;Wn1.errors={AuthorizationError:t50,ClosedConnectionError:il0,ConnectionError:pl0,DrainingConnectionError:nl0,InvalidArgumentError:n50,InvalidOperationError:ml0,InvalidSubjectError:dl0,NoRespondersError:o50,PermissionViolationError:r50,ProtocolError:tl0,RequestError:ol0,TimeoutError:rl0,UserAuthenticationExpiredError:p50}});var HJ=_((wn1)=>{Object.defineProperty(wn1,"__esModule",{value:!0});wn1.SimpleMutex=wn1.Perf=void 0;wn1.extend=cc6;wn1.render=lc6;wn1.timeout=dc6;wn1.delay=mc6;wn1.deadline=ic6;wn1.deferred=sl0;wn1.debugDeferred=nc6;wn1.shuffle=pc6;wn1.collect=tc6;wn1.jitter=Fn1;wn1.backoff=oc6;wn1.nanos=rc6;wn1.millis=ac6;wn1.randomToken=$l6;var uc6=hY(),al0=uY();function cc6($,...Z){for(let X=0;X<Z.length;X++){let Q=Z[X];Object.keys(Q).forEach(function(Y){$[Y]=Q[Y]})}return $}function lc6($){return uc6.TD.decode($).replace(/\n/g,"\u240A").replace(/\r/g,"\u240D")}function dc6($,Z=!0){let X=Z?new al0.TimeoutError:null,Q,Y,G=new Promise((J,K)=>{Q={cancel:()=>{if(Y)clearTimeout(Y)}},Y=setTimeout(()=>{if(X===null)K(new al0.TimeoutError);else K(X)},$)});return Object.assign(G,Q)}function mc6($=0){let Z,X=new Promise((Q)=>{let Y=setTimeout(()=>{Q()},$);Z={cancel:()=>{if(Y)clearTimeout(Y),Q()}}});return Object.assign(X,Z)}async function ic6($,Z=1000){let X=sl0(),Q=setTimeout(()=>{X.reject(new al0.TimeoutError)},Z);try{return await Promise.race([$,X])}finally{clearTimeout(Q)}}function sl0(){let $={},Z=new Promise((X,Q)=>{$={resolve:X,reject:Q}});return Object.assign(Z,$)}function nc6(){let $={},Z=new Promise((X,Q)=>{$={resolve:(Y)=>{console.trace("resolve",Y),X(Y)},reject:(Y)=>{console.trace("reject"),Q(Y)}}});return Object.assign(Z,$)}function pc6($){for(let Z=$.length-1;Z>0;Z--){let X=Math.floor(Math.random()*(Z+1));[$[Z],$[X]]=[$[X],$[Z]]}return $}async function tc6($){let Z=[];for await(let X of $)Z.push(X);return Z}class Nn1{timers;measures;constructor(){this.timers=new Map,this.measures=new Map}mark($){this.timers.set($,performance.now())}measure($,Z,X){let Q=this.timers.get(Z);if(Q===void 0)throw Error(`${Z} is not defined`);let Y=this.timers.get(X);if(Y===void 0)throw Error(`${X} is not defined`);this.measures.set($,Y-Q)}getEntries(){let $=[];return this.measures.forEach((Z,X)=>{$.push({name:X,duration:Z})}),$}}wn1.Perf=Nn1;class Un1{max;current;waiting;constructor($=1){this.max=$,this.current=0,this.waiting=[]}lock(){if(this.current++,this.current<=this.max)return Promise.resolve();let $=sl0();return this.waiting.push($),$}unlock(){this.current--,this.waiting.pop()?.resolve()}}wn1.SimpleMutex=Un1;function Fn1($){if($===0)return 0;return Math.floor($/2+Math.random()*$)}function oc6($=[0,250,250,500,500,3000,5000]){if(!Array.isArray($))$=[0,250,250,500,500,3000,5000];let Z=$.length-1;return{backoff(X){return Fn1(X>Z?$[Z]:$[X])}}}function rc6($){return $*1e6}function ac6($){return Math.floor($/1e6)}var sc6="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",VN=new Uint8Array(62);for(let $=0;$<62;$++)VN[$]=sc6.charCodeAt($);var ec6=218340105584896;function $l6(){let $=Math.floor(Math.random()*ec6),Z=$%62,X=VN[Z];$=($-Z)/62,Z=$%62;let Q=VN[Z];$=($-Z)/62,Z=$%62;let Y=VN[Z];$=($-Z)/62,Z=$%62;let G=VN[Z];$=($-Z)/62,Z=$%62;let J=VN[Z];$=($-Z)/62,Z=$%62;let K=VN[Z];$=($-Z)/62,Z=$%62;let W=VN[Z];$=($-Z)/62;let H=VN[$];return String.fromCharCode(X,Q,Y,G,J,K,W,H)}});var Pn1=_((zn1)=>{Object.defineProperty(zn1,"__esModule",{value:!0});zn1.nuid=zn1.NuidImpl=void 0;var Ll6="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",zw=62,s50=12,Dn1=10,On1=33,Dl6=333,Ln1=s50+Dn1,$d0=new Uint8Array(zw);for(let $=0;$<zw;$++)$d0[$]=Ll6.charCodeAt($);var a50=4294967296,En1=BigInt(zw)**BigInt(Dn1),km=Number(En1/(1n<<32n)),el0=Number(En1%(1n<<32n));function El6($){for(let Z=0;Z<$.length;Z++)$[Z]=Math.floor(Math.random()*256)}function zl6($){if(globalThis?.crypto?.getRandomValues)globalThis.crypto.getRandomValues($);else El6($)}class Zd0{buf;cbuf;seqHi;seqLo;inc;inited;constructor(){this.buf=new Uint8Array(Ln1),this.cbuf=new Uint8Array(s50),this.inited=!1}init(){this.inited=!0,this.setPre(),this.initSeqAndInc(),this.fillSeq()}initSeqAndInc(){let $=0;do this.seqHi=Math.floor(Math.random()*(km+1)),this.seqLo=Math.floor(Math.random()*a50);while($++<8&&this.seqHi===km&&this.seqLo>=el0);if(this.seqHi===km&&this.seqLo>=el0)this.seqLo=0;this.inc=Math.random()*(Dl6-On1)+On1|0}setPre(){zl6(this.cbuf);for(let $=0;$<s50;$++)this.buf[$]=$d0[this.cbuf[$]%zw]}fillSeq(){let $=this.seqHi,Z=this.seqLo;for(let X=Ln1-1;X>=s50;X--){let Q=Math.floor($/zw),G=($-Q*zw)*a50+Z,J=Math.floor(G/zw),K=G-J*zw;this.buf[X]=$d0[K],$=Q,Z=J}}next(){if(!this.inited)this.init();if(this.seqLo+=this.inc,this.seqLo>=a50)this.seqLo-=a50,this.seqHi+=1;if(this.seqHi>km||this.seqHi===km&&this.seqLo>=el0)this.setPre(),this.initSeqAndInc();this.fillSeq();let $=this.buf;return String.fromCharCode($[0],$[1],$[2],$[3],$[4],$[5],$[6],$[7],$[8],$[9],$[10],$[11],$[12],$[13],$[14],$[15],$[16],$[17],$[18],$[19],$[20],$[21])}reset(){this.init()}}zn1.NuidImpl=Zd0;zn1.nuid=new Zd0});var In1=_((Tn1)=>{Object.defineProperty(Tn1,"__esModule",{value:!0});Tn1.nuid=Tn1.Nuid=void 0;var An1=Pn1();Tn1.Nuid=An1.NuidImpl;Tn1.nuid=An1.nuid});var $90=_((e50)=>{Object.defineProperty(e50,"__esModule",{value:!0});e50.nuid=e50.Nuid=void 0;var qn1=In1();Object.defineProperty(e50,"Nuid",{enumerable:!0,get:function(){return qn1.Nuid}});Object.defineProperty(e50,"nuid",{enumerable:!0,get:function(){return qn1.nuid}})});var jw=_((Mn1)=>{Object.defineProperty(Mn1,"__esModule",{value:!0});Mn1.DEFAULT_HOST=Mn1.DEFAULT_PORT=Mn1.Match=void 0;Mn1.syncIterator=Il6;Mn1.createInbox=ql6;var Tl6=$90(),Rl6=uY();Mn1.Match={Exact:"exact",CanonicalMIME:"canonical",IgnoreCase:"insensitive"};function Il6($){let Z=$[Symbol.asyncIterator]();return{async next(){let X=await Z.next();if(X.done)return Promise.resolve(null);return Promise.resolve(X.value)}}}function ql6($=""){if($=$||"_INBOX",typeof $!=="string")throw TypeError("prefix must be a string");return $.split(".").forEach((Z)=>{if(Z==="*"||Z===">")throw Rl6.InvalidArgumentError.format("prefix",`cannot have wildcards ('${$}')`)}),`${$}.${Tl6.nuid.next()}`}Mn1.DEFAULT_PORT=4222;Mn1.DEFAULT_HOST="127.0.0.1"});var Vm=_((Cn1)=>{Object.defineProperty(Cn1,"__esModule",{value:!0});Cn1.DataBuffer=void 0;var Vn1=hY();class Sn1{buffers;byteLength;constructor(){this.buffers=[],this.byteLength=0}static concat(...$){let Z=0;for(let Y=0;Y<$.length;Y++)Z+=$[Y].length;let X=new Uint8Array(Z),Q=0;for(let Y=0;Y<$.length;Y++)X.set($[Y],Q),Q+=$[Y].length;return X}static fromAscii($){if(!$)$="";return Vn1.TE.encode($)}static toAscii($){return Vn1.TD.decode($)}reset(){this.buffers.length=0,this.byteLength=0}pack(){if(this.buffers.length>1){let $=new Uint8Array(this.byteLength),Z=0;for(let X=0;X<this.buffers.length;X++)$.set(this.buffers[X],Z),Z+=this.buffers[X].length;this.buffers.length=0,this.buffers.push($)}}shift(){if(this.buffers.length){let $=this.buffers.shift();if($)return this.byteLength-=$.length,$}return new Uint8Array(0)}drain($){if(this.buffers.length){this.pack();let Z=this.buffers.pop();if(Z){let X=this.byteLength;if($===void 0||$>X)$=X;let Q=Z.subarray(0,$);if(X>$)this.buffers.push(Z.subarray($));return this.byteLength=X-$,Q}}return new Uint8Array(0)}fill($,...Z){if($)this.buffers.push($),this.byteLength+=$.length;for(let X=0;X<Z.length;X++)if(Z[X]&&Z[X].length)this.buffers.push(Z[X]),this.byteLength+=Z[X].length}peek(){if(this.buffers.length)return this.pack(),this.buffers[0];return new Uint8Array(0)}size(){return this.byteLength}length(){return this.buffers.length}}Cn1.DataBuffer=Sn1});var tD=_((xn1)=>{Object.defineProperty(xn1,"__esModule",{value:!0});xn1.LF=xn1.CR=xn1.CRLF=xn1.CR_LF_LEN=xn1.CR_LF=void 0;xn1.setTransportFactory=xl6;xn1.defaultPort=fl6;xn1.getUrlParseFn=bl6;xn1.newTransport=yl6;xn1.getResolveFn=gl6;xn1.protoLen=vn1;xn1.extractProtocolMessage=hl6;var Cl6=hY(),_l6=jw(),vl6=Vm(),cY;function xl6($){cY=$}function fl6(){return cY!==void 0&&cY.defaultPort!==void 0?cY.defaultPort:_l6.DEFAULT_PORT}function bl6(){return cY!==void 0&&cY.urlParseFn?cY.urlParseFn:void 0}function yl6(){if(!cY||typeof cY.factory!=="function")throw Error("transport fn is not set");return cY.factory()}function gl6(){return cY!==void 0&&cY.dnsResolveFn?cY.dnsResolveFn:void 0}xn1.CR_LF=`\r
1314
1314
  `;xn1.CR_LF_LEN=xn1.CR_LF.length;xn1.CRLF=vl6.DataBuffer.fromAscii(xn1.CR_LF);xn1.CR=new Uint8Array(xn1.CRLF)[0];xn1.LF=new Uint8Array(xn1.CRLF)[1];function vn1($){for(let Z=0;Z<$.length;Z++){let X=Z+1;if($.byteLength>X&&$[Z]===xn1.CR&&$[X]===xn1.LF)return X+1}return 0}function hl6($){let Z=vn1($);if(Z>0){let Q=new Uint8Array($).slice(0,Z);return Cl6.TD.decode(Q)}return""}});var Jd0=_((ln1)=>{Object.defineProperty(ln1,"__esModule",{value:!0});ln1.ipV4=hn1;ln1.isIP=rl6;ln1.parseIP=un1;var Sm=4,oD=16,Z90=48,gn1=57,bn1=65,tl6=70,yn1=97,ol6=102,Gd0=16777215;function hn1($,Z,X,Q){let Y=new Uint8Array(oD);return[0,0,0,0,0,0,0,0,0,0,255,255].forEach((J,K)=>{Y[K]=J}),Y[12]=$,Y[13]=Z,Y[14]=X,Y[15]=Q,Y}function rl6($){return un1($)!==void 0}function un1($){for(let Z=0;Z<$.length;Z++)switch($[Z]){case".":return cn1($);case":":return al6($)}return}function cn1($){let Z=new Uint8Array(Sm);for(let X=0;X<Sm;X++){if($.length===0)return;if(X>0){if($[0]!==".")return;$=$.substring(1)}let{n:Q,c:Y,ok:G}=sl6($);if(!G||Q>255)return;$=$.substring(Y),Z[X]=Q}return hn1(Z[0],Z[1],Z[2],Z[3])}function al6($){let Z=new Uint8Array(oD),X=-1;if($.length>=2&&$[0]===":"&&$[1]===":"){if(X=0,$=$.substring(2),$.length===0)return Z}let Q=0;while(Q<oD){let{n:Y,c:G,ok:J}=el6($);if(!J||Y>65535)return;if(G<$.length&&$[G]==="."){if(X<0&&Q!=oD-Sm)return;if(Q+Sm>oD)return;let K=cn1($);if(K===void 0)return;Z[Q]=K[12],Z[Q+1]=K[13],Z[Q+2]=K[14],Z[Q+3]=K[15],$="",Q+=Sm;break}if(Z[Q]=Y>>8,Z[Q+1]=Y,Q+=2,$=$.substring(G),$.length===0)break;if($[0]!==":"||$.length==1)return;if($=$.substring(1),$[0]===":"){if(X>=0)return;if(X=Q,$=$.substring(1),$.length===0)break}}if($.length!==0)return;if(Q<oD){if(X<0)return;let Y=oD-Q;for(let G=Q-1;G>=X;G--)Z[G+Y]=Z[G];for(let G=X+Y-1;G>=X;G--)Z[G]=0}else if(X>=0)return;return Z}function sl6($){let Z=0,X=0;for(Z=0;Z<$.length&&Z90<=$.charCodeAt(Z)&&$.charCodeAt(Z)<=gn1;Z++)if(X=X*10+($.charCodeAt(Z)-Z90),X>=Gd0)return{n:Gd0,c:Z,ok:!1};if(Z===0)return{n:0,c:0,ok:!1};return{n:X,c:Z,ok:!0}}function el6($){let Z=0,X=0;for(X=0;X<$.length;X++){if(Z90<=$.charCodeAt(X)&&$.charCodeAt(X)<=gn1)Z*=16,Z+=$.charCodeAt(X)-Z90;else if(yn1<=$.charCodeAt(X)&&$.charCodeAt(X)<=ol6)Z*=16,Z+=$.charCodeAt(X)-yn1+10;else if(bn1<=$.charCodeAt(X)&&$.charCodeAt(X)<=tl6)Z*=16,Z+=$.charCodeAt(X)-bn1+10;else break;if(Z>=Gd0)return{n:0,c:X,ok:!1}}if(X===0)return{n:0,c:X,ok:!1};return{n:Z,c:X,ok:!0}}});var Fd0=_((mn1)=>{Object.defineProperty(mn1,"__esModule",{value:!0});mn1.Servers=mn1.ServerImpl=void 0;mn1.isIPV4OrHostname=dn1;mn1.hostPort=Ud0;var Kd0=tD(),Wd0=HJ(),Hd0=Jd0(),Qd6=jw(),Yd6=uY();function dn1($){if($.indexOf("[")!==-1||$.indexOf("::")!==-1)return!1;if($.indexOf(".")!==-1)return!0;if($.split(":").length<=2)return!0;return!1}function Nd0($){return!dn1($)}function Gd6($){let X=$.toUpperCase().indexOf("::FFFF:");if(X!==-1&&$.indexOf(".")!==-1){let Q=$.substring(X+7);return Q=Q.replace("[",""),Q.replace("]","")}return $}function Ud0($){if($=$.trim(),$.match(/^(.*:\/\/)(.*)/m))$=$.replace(/^(.*:\/\/)(.*)/gm,"$2");if($=Gd6($),Nd0($)&&$.indexOf("[")===-1)$=`[${$}]`;let Z=Nd0($)?$.match(/(]:)(\d+)/):$.match(/(:)(\d+)/),X=Z&&Z.length===3&&Z[1]&&Z[2]?parseInt(Z[2]):Qd6.DEFAULT_PORT,Y=new URL(`${X===80?"https":"http"}://${$}`);Y.port=`${X}`;let G=Y.hostname;if(G.charAt(0)==="[")G=G.substring(1,G.length-1);return{listen:Y.host,hostname:G,port:X}}class Zb{src;listen;hostname;port;didConnect;reconnects;lastConnect;gossiped;tlsName;resolves;constructor($,Z=!1){this.src=$,this.tlsName="";let X=Ud0($);this.listen=X.listen,this.hostname=X.hostname,this.port=X.port,this.didConnect=!1,this.reconnects=0,this.lastConnect=0,this.gossiped=Z}toString(){return this.listen}async resolve($){if(!$.fn||$.resolve===!1)return[this];let Z=[];if((0,Hd0.isIP)(this.hostname))return[this];else{let X=await $.fn(this.hostname);if($.debug)console.log(`resolve ${this.hostname} = ${X.join(",")}`);for(let Q of X){let Y=this.port===80?"https":"http",G=new URL(`${Y}://${Nd0(Q)?"["+Q+"]":Q}`);G.port=`${this.port}`;let J=new Zb(G.host,!1);J.tlsName=this.hostname,Z.push(J)}}if($.randomize)(0,Wd0.shuffle)(Z);return this.resolves=Z,Z}}mn1.ServerImpl=Zb;class X90{firstSelect;servers;currentServer;tlsName;randomize;constructor($={}){this.firstSelect=!0,this.servers=[],this.tlsName="",this.randomize=$.randomize||!1}setServers($){if(!Array.isArray($)||$.length===0)throw Yd6.InvalidArgumentError.format("servers","cannot be empty");let Z=(0,Kd0.getUrlParseFn)(),X=new Map;for(let Y of this.servers)X.set(Y.listen,Y);let Q=[];for(let Y of $){Y=Z?Z(Y):Y;let{listen:G}=Ud0(Y),J=X.get(G);if(J)J.gossiped=!1,Q.push(J);else Q.push(new Zb(Y))}if(this.randomize)(0,Wd0.shuffle)(Q);if(this.servers=Q,this.currentServer===void 0||!Q.includes(this.currentServer))this.currentServer=Q[0],this.firstSelect=!0}clear(){this.servers.length=0}updateTLSName(){let $=this.getCurrentServer();if(!(0,Hd0.isIP)($.hostname))this.tlsName=$.hostname,this.servers.forEach((Z)=>{if(Z.gossiped)Z.tlsName=this.tlsName})}getCurrentServer(){return this.currentServer}addServer($,Z=!1){let X=(0,Kd0.getUrlParseFn)();$=X?X($):$;let Q=new Zb($,Z);if((0,Hd0.isIP)(Q.hostname))Q.tlsName=this.tlsName;this.servers.push(Q)}selectServer(){if(this.firstSelect)return this.firstSelect=!1,this.currentServer;let $=this.servers.shift();if($)this.servers.push($),this.currentServer=$;return $}removeCurrentServer(){this.removeServer(this.currentServer)}removeServer($){if($){let Z=this.servers.indexOf($);this.servers.splice(Z,1)}}snapshot(){return X90.freezeAll(this.servers)}snapshotForHandler(){let $=this.currentServer;if(!$)return this.snapshot();let Z=this.servers.indexOf($);if(Z<=0)return this.snapshot();return X90.freezeAll([$,...this.servers.slice(0,Z),...this.servers.slice(Z+1)])}static freezeAll($){return $.map((Z)=>Object.freeze({hostname:Z.hostname,port:Z.port,listen:Z.listen,src:Z.src,tlsName:Z.tlsName,reconnects:Z.reconnects,lastConnect:Z.lastConnect,gossiped:Z.gossiped,didConnect:Z.didConnect}))}find($){return this.servers.find((Z)=>Z.listen===$.listen)}setCurrent($){this.currentServer=$}length(){return this.servers.length}next(){return this.servers.length?this.servers[0]:void 0}getServers(){return this.servers}update($,Z){let X=[],Q=[],Y=(0,Kd0.getUrlParseFn)(),G=new Map;if($.connect_urls&&$.connect_urls.length>0)$.connect_urls.forEach((K)=>{K=Y?Y(K,Z):K;let W=new Zb(K,!0);G.set(K,W)});let J=[];if(this.servers.forEach((K,W)=>{let H=K.listen;if(K.gossiped&&this.currentServer.listen!==H&&G.get(H)===void 0)J.push(W);G.delete(H)}),J.reverse(),J.forEach((K)=>{let W=this.servers.splice(K,1);Q=Q.concat(W[0].listen)}),G.forEach((K,W)=>{this.servers.push(K),X.push(W)}),this.randomize&&X.length>0){let K=this.currentServer,W=this.servers.filter((H)=>H!==K);(0,Wd0.shuffle)(W),this.servers=K?[K,...W]:W}return{added:X,deleted:Q}}}mn1.Servers=X90});var Q90=_((tn1)=>{Object.defineProperty(tn1,"__esModule",{value:!0});tn1.QueuedIteratorImpl=void 0;var wd0=HJ(),nn1=uY();class pn1{inflight;processed;received;noIterator;iterClosed;done;signal;yields;filtered;pendingFiltered;ctx;_data;err;time;profile;yielding;didBreak;constructor(){this.inflight=0,this.filtered=0,this.pendingFiltered=0,this.processed=0,this.received=0,this.noIterator=!1,this.done=!1,this.signal=(0,wd0.deferred)(),this.yields=[],this.iterClosed=(0,wd0.deferred)(),this.time=0,this.yielding=!1,this.didBreak=!1,this.profile=!1}[Symbol.asyncIterator](){return this.iterate()}push($){if(this.done)return;if(this.didBreak){if(typeof $==="function"){let Z=$;try{Z()}catch(X){}}return}if(typeof $==="function")this.pendingFiltered++;this.yields.push($),this.signal.resolve()}async*iterate(){if(this.noIterator)throw new nn1.InvalidOperationError("iterator cannot be used when a callback is registered");if(this.yielding)throw new nn1.InvalidOperationError("iterator is already yielding");this.yielding=!0;try{while(!0){if(this.yields.length===0)await this.signal;if(this.err)throw this.err;let $=this.yields;this.inflight=$.length,this.yields=[];for(let Z=0;Z<$.length;Z++){if(typeof $[Z]==="function"){this.pendingFiltered--;let Q=$[Z];try{Q()}catch(Y){throw Y}if(this.err)throw this.err;continue}this.processed++,this.inflight--;let X=this.profile?Date.now():0;yield $[Z],this.time=this.profile?Date.now()-X:0}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,wd0.deferred)()}}finally{this.didBreak=!0,this.stop()}}stop($){if(this.done)return;this.err=$,this.done=!0,this.signal.resolve(),this.iterClosed.resolve($)}getProcessed(){return this.noIterator?this.received:this.processed}getPending(){return this.yields.length+this.inflight-this.pendingFiltered}getReceived(){return this.received-this.filtered}}tn1.QueuedIteratorImpl=pn1});var Bd0=_((sn1)=>{Object.defineProperty(sn1,"__esModule",{value:!0});sn1.MuxSubscription=void 0;var Hd6=jw(),rn1=uY();class an1{baseInbox;reqs;constructor(){this.reqs=new Map}size(){return this.reqs.size}init($){return this.baseInbox=`${(0,Hd6.createInbox)($)}.`,this.baseInbox}add($){if(!isNaN($.received))$.received=0;this.reqs.set($.token,$)}get($){return this.reqs.get($)}cancel($){this.reqs.delete($.token)}getToken($){let Z=$.subject||"";if(Z.indexOf(this.baseInbox)===0)return Z.substring(this.baseInbox.length);return null}all(){return Array.from(this.reqs.values())}handleError($,Z){if($)return this.all().forEach((X)=>{X.resolver(Z,{})}),!0;if(Z.operation==="publish"){let X=this.all().find((Q)=>{return Q.requestSubject===Z.subject});if(X)return X.resolver(Z,{}),!0}return!1}dispatcher(){return($,Z)=>{let X=this.getToken(Z);if(X){let Q=this.get(X);if(Q){if($===null)$=Z?.data?.length===0&&Z.headers?.code===503?new rn1.NoRespondersError(Q.requestSubject):null;Q.resolver($,Z)}}}}close(){let $=new rn1.RequestError("connection closed");this.reqs.forEach((Z)=>{Z.resolver($,{})})}}sn1.MuxSubscription=an1});var Od0=_((Zp1)=>{Object.defineProperty(Zp1,"__esModule",{value:!0});Zp1.Heartbeat=void 0;var Nd6=HJ();class $p1{ph;interval;maxOut;timer;pendings;constructor($,Z,X){this.ph=$,this.interval=Z,this.maxOut=X,this.pendings=[]}start(){this.cancel(),this._schedule()}cancel($){if(this.timer)clearTimeout(this.timer),this.timer=void 0;if(this._reset(),$)this.ph.disconnect()}_schedule(){this.timer=setTimeout(()=>{if(this.ph.dispatchStatus({type:"ping",pendingPings:this.pendings.length+1}),this.pendings.length===this.maxOut){this.cancel(!0);return}let $=(0,Nd6.deferred)();this.ph.flush($).then(()=>{this._reset()}).catch(()=>{this.cancel()}),this.pendings.push($),this._schedule()},this.interval)}_reset(){this.pendings=this.pendings.filter(($)=>{return $.resolve(),!1})}}Zp1.Heartbeat=$p1});var Ed0=_((Jp1)=>{Object.defineProperty(Jp1,"__esModule",{value:!0});Jp1.DenoBuffer=Jp1.MAX_SIZE=Jp1.AssertionError=void 0;Jp1.assert=Yp1;Jp1.concat=Gp1;Jp1.append=Fd6;Jp1.readAll=wd6;Jp1.writeAll=Bd6;var Ud6=hY();class Ld0 extends Error{constructor($){super($);this.name="AssertionError"}}Jp1.AssertionError=Ld0;function Yp1($,Z="Assertion failed."){if(!$)throw new Ld0(Z)}var Qp1=32768;Jp1.MAX_SIZE=4294967294;function Y90($,Z,X=0){let Q=Z.byteLength-X;if($.byteLength>Q)$=$.subarray(0,Q);return Z.set($,X),$.byteLength}function Gp1($,Z){if($===void 0&&Z===void 0)return new Uint8Array(0);if($===void 0)return Z;if(Z===void 0)return $;let X=new Uint8Array($.length+Z.length);return X.set($,0),X.set(Z,$.length),X}function Fd6($,Z){return Gp1($,Uint8Array.of(Z))}class Dd0{_buf;_off;constructor($){if(this._off=0,$==null){this._buf=new Uint8Array(0);return}this._buf=new Uint8Array($)}bytes($={copy:!0}){if($.copy===!1)return this._buf.subarray(this._off);return this._buf.slice(this._off)}empty(){return this._buf.byteLength<=this._off}get length(){return this._buf.byteLength-this._off}get capacity(){return this._buf.buffer.byteLength}truncate($){if($===0){this.reset();return}if($<0||$>this.length)throw Error("bytes.Buffer: truncation out of range");this._reslice(this._off+$)}reset(){this._reslice(0),this._off=0}_tryGrowByReslice($){let Z=this._buf.byteLength;if($<=this.capacity-Z)return this._reslice(Z+$),Z;return-1}_reslice($){Yp1($<=this._buf.buffer.byteLength),this._buf=new Uint8Array(this._buf.buffer,0,$)}readByte(){let $=new Uint8Array(1);if(this.read($))return $[0];return null}read($){if(this.empty()){if(this.reset(),$.byteLength===0)return 0;return null}let Z=Y90(this._buf.subarray(this._off),$);return this._off+=Z,Z}writeByte($){return this.write(Uint8Array.of($))}writeString($){return this.write(Ud6.TE.encode($))}write($){let Z=this._grow($.byteLength);return Y90($,this._buf,Z)}_grow($){let Z=this.length;if(Z===0&&this._off!==0)this.reset();let X=this._tryGrowByReslice($);if(X>=0)return X;let Q=this.capacity;if($<=Math.floor(Q/2)-Z)Y90(this._buf.subarray(this._off),this._buf);else if(Q+$>Jp1.MAX_SIZE)throw Error("The buffer cannot be grown beyond the maximum size.");else{let Y=new Uint8Array(Math.min(2*Q+$,Jp1.MAX_SIZE));Y90(this._buf.subarray(this._off),Y),this._buf=Y}return this._off=0,this._reslice(Math.min(Z+$,Jp1.MAX_SIZE)),Z}grow($){if($<0)throw Error("Buffer._grow: negative count");let Z=this._grow($);this._reslice(Z)}readFrom($){let Z=0,X=new Uint8Array(Qp1);while(!0){let Q=this.capacity-this.length<Qp1,Y=Q?X:new Uint8Array(this._buf.buffer,this.length),G=$.read(Y);if(G===null)return Z;if(Q)this.write(Y.subarray(0,G));else this._reslice(this.length+G);Z+=G}}}Jp1.DenoBuffer=Dd0;function wd6($){let Z=new Dd0;return Z.readFrom($),Z.bytes()}function Bd6($,Z){let X=0;while(X<Z.length)X+=$.write(Z.subarray(X))}});var Pd0=_((Up1)=>{Object.defineProperty(Up1,"__esModule",{value:!0});Up1.cc=Up1.State=Up1.Parser=Up1.Kind=void 0;Up1.describe=Pd6;var zd0=Ed0(),jd0=hY();Up1.Kind={OK:0,ERR:1,MSG:2,INFO:3,PING:4,PONG:5};function Pd6($){let Z,X="";switch($.kind){case Up1.Kind.MSG:Z="MSG";break;case Up1.Kind.OK:Z="OK";break;case Up1.Kind.ERR:Z="ERR",X=jd0.TD.decode($.data);break;case Up1.Kind.PING:Z="PING";break;case Up1.Kind.PONG:Z="PONG";break;case Up1.Kind.INFO:Z="INFO",X=jd0.TD.decode($.data)}return`${Z}: ${X}`}function Wp1(){let $={};return $.sid=-1,$.hdr=-1,$.size=-1,$}var Hp1=48,Ad6=57,Xb=67108864;class Np1{dispatcher;state;as;drop;hdr;ma;argBuf;msgBuf;constructor($){this.dispatcher=$,this.state=Up1.State.OP_START,this.as=0,this.drop=0,this.hdr=0}parse($){let Z;for(Z=0;Z<$.length;Z++){let X=$[Z];switch(this.state){case Up1.State.OP_START:switch(X){case Up1.cc.M:case Up1.cc.m:this.state=Up1.State.OP_M,this.hdr=-1,this.ma=Wp1();break;case Up1.cc.H:case Up1.cc.h:this.state=Up1.State.OP_H,this.hdr=0,this.ma=Wp1();break;case Up1.cc.P:case Up1.cc.p:this.state=Up1.State.OP_P;break;case Up1.cc.PLUS:this.state=Up1.State.OP_PLUS;break;case Up1.cc.MINUS:this.state=Up1.State.OP_MINUS;break;case Up1.cc.I:case Up1.cc.i:this.state=Up1.State.OP_I;break;default:throw this.fail($.subarray(Z))}break;case Up1.State.OP_H:switch(X){case Up1.cc.M:case Up1.cc.m:this.state=Up1.State.OP_M;break;default:throw this.fail($.subarray(Z))}break;case Up1.State.OP_M:switch(X){case Up1.cc.S:case Up1.cc.s:this.state=Up1.State.OP_MS;break;default:throw this.fail($.subarray(Z))}break;case Up1.State.OP_MS:switch(X){case Up1.cc.G:case Up1.cc.g:this.state=Up1.State.OP_MSG;break;default:throw this.fail($.subarray(Z))}break;case Up1.State.OP_MSG:switch(X){case Up1.cc.SPACE:case Up1.cc.TAB:this.state=Up1.State.OP_MSG_SPC;break;default:throw this.fail($.subarray(Z))}break;case Up1.State.OP_MSG_SPC:switch(X){case Up1.cc.SPACE:case Up1.cc.TAB:continue;default:this.state=Up1.State.MSG_ARG,this.as=Z}break;case Up1.State.MSG_ARG:switch(X){case Up1.cc.CR:this.drop=1;break;case Up1.cc.NL:{let Q=this.argBuf?this.argBuf.bytes():$.subarray(this.as,Z-this.drop);this.processMsgArgs(Q),this.drop=0,this.as=Z+1,this.state=Up1.State.MSG_PAYLOAD,Z=this.as+this.ma.size-1;break}default:if(this.argBuf)this.argBuf.writeByte(X)}break;case Up1.State.MSG_PAYLOAD:if(this.msgBuf)if(this.msgBuf.length>=this.ma.size){let Q=this.msgBuf.bytes({copy:!1});this.dispatcher.push({kind:Up1.Kind.MSG,msg:this.ma,data:Q}),this.argBuf=void 0,this.msgBuf=void 0,this.state=Up1.State.MSG_END}else{let Q=this.ma.size-this.msgBuf.length,Y=$.length-Z;if(Y<Q)Q=Y;if(Q>0)this.msgBuf.write($.subarray(Z,Z+Q)),Z=Z+Q-1;else this.msgBuf.writeByte(X)}else if(Z-this.as>=this.ma.size)this.dispatcher.push({kind:Up1.Kind.MSG,msg:this.ma,data:$.subarray(this.as,Z)}),this.argBuf=void 0,this.msgBuf=void 0,this.state=Up1.State.MSG_END;break;case Up1.State.MSG_END:switch(X){case Up1.cc.NL:this.drop=0,this.as=Z+1,this.state=Up1.State.OP_START;break;default:continue}break;case Up1.State.OP_PLUS:switch(X){case Up1.cc.O:case Up1.cc.o:this.state=Up1.State.OP_PLUS_O;break;default:throw this.fail($.subarray(Z))}break;case Up1.State.OP_PLUS_O:switch(X){case Up1.cc.K:case Up1.cc.k:this.state=Up1.State.OP_PLUS_OK;break;default:throw this.fail($.subarray(Z))}break;case Up1.State.OP_PLUS_OK:switch(X){case Up1.cc.NL:this.dispatcher.push({kind:Up1.Kind.OK}),this.drop=0,this.state=Up1.State.OP_START;break}break;case Up1.State.OP_MINUS:switch(X){case Up1.cc.E:case Up1.cc.e:this.state=Up1.State.OP_MINUS_E;break;default:throw this.fail($.subarray(Z))}break;case Up1.State.OP_MINUS_E:switch(X){case Up1.cc.R:case Up1.cc.r:this.state=Up1.State.OP_MINUS_ER;break;default:throw this.fail($.subarray(Z))}break;case Up1.State.OP_MINUS_ER:switch(X){case Up1.cc.R:case Up1.cc.r:this.state=Up1.State.OP_MINUS_ERR;break;default:throw this.fail($.subarray(Z))}break;case Up1.State.OP_MINUS_ERR:switch(X){case Up1.cc.SPACE:case Up1.cc.TAB:this.state=Up1.State.OP_MINUS_ERR_SPC;break;default:throw this.fail($.subarray(Z))}break;case Up1.State.OP_MINUS_ERR_SPC:switch(X){case Up1.cc.SPACE:case Up1.cc.TAB:continue;default:this.state=Up1.State.MINUS_ERR_ARG,this.as=Z}break;case Up1.State.MINUS_ERR_ARG:switch(X){case Up1.cc.CR:this.drop=1;break;case Up1.cc.NL:{let Q;if(this.argBuf)Q=this.argBuf.bytes(),this.argBuf=void 0;else Q=$.subarray(this.as,Z-this.drop);this.dispatcher.push({kind:Up1.Kind.ERR,data:Q}),this.drop=0,this.as=Z+1,this.state=Up1.State.OP_START;break}default:if(this.argBuf)this.argBuf.write(Uint8Array.of(X))}break;case Up1.State.OP_P:switch(X){case Up1.cc.I:case Up1.cc.i:this.state=Up1.State.OP_PI;break;case Up1.cc.O:case Up1.cc.o:this.state=Up1.State.OP_PO;break;default:throw this.fail($.subarray(Z))}break;case Up1.State.OP_PO:switch(X){case Up1.cc.N:case Up1.cc.n:this.state=Up1.State.OP_PON;break;default:throw this.fail($.subarray(Z))}break;case Up1.State.OP_PON:switch(X){case Up1.cc.G:case Up1.cc.g:this.state=Up1.State.OP_PONG;break;default:throw this.fail($.subarray(Z))}break;case Up1.State.OP_PONG:switch(X){case Up1.cc.NL:this.dispatcher.push({kind:Up1.Kind.PONG}),this.drop=0,this.state=Up1.State.OP_START;break}break;case Up1.State.OP_PI:switch(X){case Up1.cc.N:case Up1.cc.n:this.state=Up1.State.OP_PIN;break;default:throw this.fail($.subarray(Z))}break;case Up1.State.OP_PIN:switch(X){case Up1.cc.G:case Up1.cc.g:this.state=Up1.State.OP_PING;break;default:throw this.fail($.subarray(Z))}break;case Up1.State.OP_PING:switch(X){case Up1.cc.NL:this.dispatcher.push({kind:Up1.Kind.PING}),this.drop=0,this.state=Up1.State.OP_START;break}break;case Up1.State.OP_I:switch(X){case Up1.cc.N:case Up1.cc.n:this.state=Up1.State.OP_IN;break;default:throw this.fail($.subarray(Z))}break;case Up1.State.OP_IN:switch(X){case Up1.cc.F:case Up1.cc.f:this.state=Up1.State.OP_INF;break;default:throw this.fail($.subarray(Z))}break;case Up1.State.OP_INF:switch(X){case Up1.cc.O:case Up1.cc.o:this.state=Up1.State.OP_INFO;break;default:throw this.fail($.subarray(Z))}break;case Up1.State.OP_INFO:switch(X){case Up1.cc.SPACE:case Up1.cc.TAB:this.state=Up1.State.OP_INFO_SPC;break;default:throw this.fail($.subarray(Z))}break;case Up1.State.OP_INFO_SPC:switch(X){case Up1.cc.SPACE:case Up1.cc.TAB:continue;default:this.state=Up1.State.INFO_ARG,this.as=Z}break;case Up1.State.INFO_ARG:switch(X){case Up1.cc.CR:this.drop=1;break;case Up1.cc.NL:{let Q;if(this.argBuf)Q=this.argBuf.bytes(),this.argBuf=void 0;else Q=$.subarray(this.as,Z-this.drop);this.dispatcher.push({kind:Up1.Kind.INFO,data:Q}),this.drop=0,this.as=Z+1,this.state=Up1.State.OP_START;break}default:if(this.argBuf)this.argBuf.writeByte(X)}break;default:throw this.fail($.subarray(Z))}}if((this.state===Up1.State.MSG_ARG||this.state===Up1.State.MINUS_ERR_ARG||this.state===Up1.State.INFO_ARG)&&!this.argBuf)this.argBuf=new zd0.DenoBuffer($.subarray(this.as,Z-this.drop));if(this.state===Up1.State.MSG_PAYLOAD&&!this.msgBuf){if(!this.argBuf)this.cloneMsgArg();this.msgBuf=new zd0.DenoBuffer($.subarray(this.as))}}cloneMsgArg(){let $=this.ma.subject.length,Z=this.ma.reply?this.ma.reply.length:0,X=new Uint8Array($+Z);if(X.set(this.ma.subject),this.ma.reply)X.set(this.ma.reply,$);if(this.argBuf=new zd0.DenoBuffer(X),this.ma.subject=X.subarray(0,$),this.ma.reply)this.ma.reply=X.subarray($)}processMsgArgs($){if(this.hdr>=0)return this.processHeaderMsgArgs($);let Z=[],X=-1;for(let Q=0;Q<$.length;Q++)switch($[Q]){case Up1.cc.SPACE:case Up1.cc.TAB:case Up1.cc.CR:case Up1.cc.NL:if(X>=0)Z.push($.subarray(X,Q)),X=-1;break;default:if(X<0)X=Q}if(X>=0)Z.push($.subarray(X));switch(Z.length){case 3:this.ma.subject=Z[0],this.ma.sid=this.protoParseInt(Z[1]),this.ma.reply=void 0,this.ma.size=this.protoParseInt(Z[2],Xb);break;case 4:this.ma.subject=Z[0],this.ma.sid=this.protoParseInt(Z[1]),this.ma.reply=Z[2],this.ma.size=this.protoParseInt(Z[3],Xb);break;default:throw this.fail($,"processMsgArgs Parse Error")}if(this.ma.sid<0)throw this.fail($,"processMsgArgs Bad or Missing Sid Error");if(this.ma.size<0)throw this.fail($,"processMsgArgs Bad or Missing Size Error")}fail($,Z=""){if(!Z)Z=`parse error [${this.state}]`;else Z=`${Z} [${this.state}]`;return Error(`${Z}: ${jd0.TD.decode($)}`)}processHeaderMsgArgs($){let Z=[],X=-1;for(let Q=0;Q<$.length;Q++)switch($[Q]){case Up1.cc.SPACE:case Up1.cc.TAB:case Up1.cc.CR:case Up1.cc.NL:if(X>=0)Z.push($.subarray(X,Q)),X=-1;break;default:if(X<0)X=Q}if(X>=0)Z.push($.subarray(X));switch(Z.length){case 4:this.ma.subject=Z[0],this.ma.sid=this.protoParseInt(Z[1]),this.ma.reply=void 0,this.ma.hdr=this.protoParseInt(Z[2],Xb),this.ma.size=this.protoParseInt(Z[3],Xb);break;case 5:this.ma.subject=Z[0],this.ma.sid=this.protoParseInt(Z[1]),this.ma.reply=Z[2],this.ma.hdr=this.protoParseInt(Z[3],Xb),this.ma.size=this.protoParseInt(Z[4],Xb);break;default:throw this.fail($,"processHeaderMsgArgs Parse Error")}if(this.ma.sid<0)throw this.fail($,"processHeaderMsgArgs Bad or Missing Sid Error");if(this.ma.hdr<0||this.ma.hdr>this.ma.size)throw this.fail($,"processHeaderMsgArgs Bad or Missing Header Size Error");if(this.ma.size<0)throw this.fail($,"processHeaderMsgArgs Bad or Missing Size Error")}protoParseInt($,Z){if($.length===0||$.length>15)return-1;let X=0;for(let Q=0;Q<$.length;Q++){if($[Q]<Hp1||$[Q]>Ad6)return-1;X=X*10+($[Q]-Hp1)}return Z!==void 0&&X>Z?-1:X}}Up1.Parser=Np1;Up1.State={OP_START:0,OP_PLUS:1,OP_PLUS_O:2,OP_PLUS_OK:3,OP_MINUS:4,OP_MINUS_E:5,OP_MINUS_ER:6,OP_MINUS_ERR:7,OP_MINUS_ERR_SPC:8,MINUS_ERR_ARG:9,OP_M:10,OP_MS:11,OP_MSG:12,OP_MSG_SPC:13,MSG_ARG:14,MSG_PAYLOAD:15,MSG_END:16,OP_H:17,OP_P:18,OP_PI:19,OP_PIN:20,OP_PING:21,OP_PO:22,OP_PON:23,OP_PONG:24,OP_I:25,OP_IN:26,OP_INF:27,OP_INFO:28,OP_INFO_SPC:29,INFO_ARG:30};Up1.cc={CR:13,E:69,e:101,F:70,f:102,G:71,g:103,H:72,h:104,I:73,i:105,K:75,k:107,M:77,m:109,MINUS:45,N:78,n:110,NL:10,O:79,o:111,P:80,p:112,PLUS:43,R:82,r:114,S:83,s:115,SPACE:32,TAB:9}});var K90=_((wp1)=>{Object.defineProperty(wp1,"__esModule",{value:!0});wp1.MsgHdrsImpl=void 0;wp1.canonicalMIMEHeaderKey=Td0;wp1.headers=Id6;var Fp1=hY(),NJ=jw(),J90=uY();function Td0($){let N=!0,U=Array($.length);for(let F=0;F<$.length;F++){let w=$.charCodeAt(F);if(w===58||w<33||w>126)throw J90.InvalidArgumentError.format("header",`'${$[F]}' is not a valid character in a header name`);if(N&&97<=w&&w<=122)w-=32;else if(!N&&65<=w&&w<=90)w+=32;U[F]=w,N=w==45}return String.fromCharCode(...U)}function Id6($=0,Z=""){if($===0&&Z!=="")throw J90.InvalidArgumentError.format("code","is required");else if($>0&&Z==="")throw J90.InvalidArgumentError.format("description","is required");return new Qb($,Z)}var Ad0="NATS/1.0";class Qb{_code;headers;_description;constructor($=0,Z=""){this._code=$,this._description=Z,this.headers=new Map}[Symbol.iterator](){return this.headers.entries()}size(){return this.headers.size}equals($){if($&&this.headers.size===$.headers.size&&this._code===$._code){for(let[Z,X]of this.headers){let Q=$.values(Z);if(X.length!==Q.length)return!1;let Y=[...X].sort(),G=[...Q].sort();for(let J=0;J<Y.length;J++)if(Y[J]!==G[J])return!1}return!0}return!1}static decode($){let Z=new Qb,Q=Fp1.TD.decode($).split(`\r
1315
1315
  `),Y=Q[0];if(Y!==Ad0){let G=Y.replace(Ad0,"").trim();if(G.length>0){if(Z._code=parseInt(G,10),isNaN(Z._code))Z._code=0;let J=Z._code.toString();G=G.replace(J,""),Z._description=G.trim()}}if(Q.length>=1)Q.slice(1).map((G)=>{if(G){let J=G.indexOf(":");if(J>-1){let K=G.slice(0,J),W=G.slice(J+1).trim();Z.append(K,W)}}});return Z}toString(){if(this.headers.size===0&&this._code===0)return"";let $=Ad0;if(this._code>0&&this._description!=="")$+=` ${this._code} ${this._description}`;for(let[Z,X]of this.headers)for(let Q=0;Q<X.length;Q++)$=`${$}\r
1316
1316
  ${Z}: ${X[Q]}`;return`${$}\r
@@ -2726,7 +2726,7 @@ Do NOT require review (requiresReview = false) when the changes are low-risk, su
2726
2726
 
2727
2727
  When unsure between the two, lean toward NOT requiring review for small frontend-only diffs, and toward requiring it for anything backend or large.
2728
2728
 
2729
- Respond with the structured verdict and a short reason.`,N_$;var U_$=B(()=>{S4();XO();_81();C$6=v81.object({requiresReview:v81.boolean().describe("true if the changes should go through pull-request review"),reason:v81.string().describe("One short sentence explaining the decision (max ~120 chars)")});N_$={requiresReview:!1,reason:""}});function f$6($){if(!$||$.includes(".."))return!1;return b$6.test($)}function w_$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!f$6(Z))return null;let{__resolveType:X,...Q}=$;return{resolveType:Z,payload:Q}}function O_$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var b$6;var B_$=B(()=>{b$6=/^[\w./@-]+$/});function b81($){let Z;try{Z=new URL($)}catch{return null}if(!Z.hostname.endsWith(".localhost"))return null;let X=Z.host;return Z.hostname="127.0.0.1",{url:Z.toString(),hostHeader:X}}function D_$($,Z){let X=$?.githubRepo;if(!X?.owner||!X?.name)return null;if(!X.connectionId)return X;if(!Z.includes(X.connectionId))return null;return X}async function L_$($,Z,X,Q){if(!Q.connectionId)throw new ug("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let Y=$.organization?.id;if(!Y)throw new ug(i7);await Cx({ctx:$,connectionId:Q.connectionId,organizationId:Y,forceRefresh:!0,onLegacyMintError:(N)=>{let F=N instanceof Error?N.message:i7;throw new ug(F)}});let{cloneUrl:G,gitUserName:J,gitUserEmail:W}=await hw(Q.connectionId,Q.owner,Q.name,$.db,$.vault),K=Yj0($),H=await Z.proxyDaemonRequest(X,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{repository:{cloneUrl:G},identity:{userName:J,userEmail:W}},...K?{operator:K}:{}})});if(!H.ok){let N=await ZO(H,x$6).catch(()=>H.statusText);throw Error(`Failed to refresh sandbox git credentials (${H.status}): ${N}`)}}var x$6=10485760,ug;var E_$=B(()=>{Aw();I81();Hp();vn();ug=class ug extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function g$6($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!y$6.test(Z))throw Error(`Invalid branch name: ${$}`)}function gC($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(u$6)])}function hC($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}function f81($,Z){let Q=(Gj0.get($)??Promise.resolve()).catch(()=>{}).then(Z),Y=Q.catch(()=>{});return Gj0.set($,Y),Y.finally(()=>{if(Gj0.get($)===Y)Gj0.delete($)}),Q}async function vZ($,Z,X){let Q=hC($);if(Q instanceof Response)return Q;let{claimName:Y,userId:G,projectRef:J}=$.get("vmClaim"),W=X?.method??"POST",K=null,H=new Headers;if(X?.jsonBody!==void 0)K=X.jsonBody,H.set("content-type","application/json");else if(X?.forwardJsonBody)K=await $.req.text(),H.set("content-type","application/json");let N=X?.signal,F={method:W,headers:H,body:K,...N?{signal:N}:{}},U=async()=>{let w=await Q.proxyDaemonRequest(Y,Z,F);if(X?.map404to410&&w.status===404){try{await w.body?.cancel()}catch{}if(await Q.adoptLiveClaim?.({userId:G,projectRef:J},Y))w=await Q.proxyDaemonRequest(Y,Z,F);if(w.status===404){try{await w.body?.cancel()}catch{}return new Response(JSON.stringify({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."}),{status:410,headers:{"content-type":"application/json",...yY}})}}let O=await w.text(),D=X?.redactRepoDirUnlessDesktop&&Q.kind!=="user-desktop"?l$6(O):O,L=w.headers.get("content-type")??"application/json";return new Response(D,{status:w.status,headers:{"content-type":L,...yY}})};try{if(N){let w=U();return w.catch(()=>{}),await Promise.race([w,new Promise((D,L)=>{if(N.aborted)return L(N.reason);N.addEventListener("abort",()=>L(N.reason),{once:!0})})])}return await U()}catch(w){let O=w instanceof Error?w.message:String(w);return $.json({error:`Daemon unreachable: ${O}`},502)}}function l$6($){try{let Z=JSON.parse($);if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&"repoDir"in Z)return JSON.stringify({...Z,repoDir:null})}catch{}return $}async function Jj0($,Z,X,Q="GET",Y){let G=await $.proxyDaemonRequest(Z,X,{method:Q,headers:new Headers,body:null});if(G.status===404&&Y){try{await G.body?.cancel()}catch{}if(await $.adoptLiveClaim?.(Y,Z))G=await $.proxyDaemonRequest(Z,X,{method:Q,headers:new Headers,body:null})}if(G.status===404){try{await G.body?.cancel()}catch{}throw Error("SANDBOX_GONE")}let J=await G.text();if(!G.ok)try{let W=JSON.parse(J);throw Error(W.error??`Daemon error (${G.status})`)}catch(W){if(W instanceof Error&&W.message!==J)throw W;throw Error(`Daemon error (${G.status})`)}return JSON.parse(J)}function d$6($){return P_$.includes($)}var y$6,j_$=524288,h$6=65536,u$6=1e4,z_$=2000,c$6,Gj0,yY,P_$,A_$=()=>{let $=new B1;return $.use("/:virtualMcpId/:branch/*",c$6),$.post("/:virtualMcpId/:branch/write",(Z)=>vZ(Z,"/_sandbox/write",{forwardJsonBody:!0,signal:gC(Z)})),$.post("/:virtualMcpId/:branch/unlink",(Z)=>vZ(Z,"/_sandbox/unlink",{forwardJsonBody:!0,signal:gC(Z)})),$.post("/:virtualMcpId/:branch/mkdir",(Z)=>vZ(Z,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:gC(Z)})),$.post("/:virtualMcpId/:branch/rename",(Z)=>vZ(Z,"/_sandbox/rename",{forwardJsonBody:!0,signal:gC(Z)})),$.post("/:virtualMcpId/:branch/read",(Z)=>vZ(Z,"/_sandbox/read",{forwardJsonBody:!0,signal:gC(Z)})),$.post("/:virtualMcpId/:branch/glob",(Z)=>vZ(Z,"/_sandbox/glob",{forwardJsonBody:!0,signal:gC(Z)})),$.post("/:virtualMcpId/:branch/grep",(Z)=>vZ(Z,"/_sandbox/grep",{forwardJsonBody:!0,signal:gC(Z)})),$.post("/:virtualMcpId/:branch/exec/:script",async(Z)=>{let X=Z.req.param("script");if(!X)return Z.json({error:"missing script name"},400);return vZ(Z,`/_sandbox/exec/${encodeURIComponent(X)}`)}),$.post("/:virtualMcpId/:branch/exec/:script/kill",async(Z)=>{let X=Z.req.param("script");if(!X)return Z.json({error:"missing script name"},400);return vZ(Z,`/_sandbox/exec/${encodeURIComponent(X)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(Z)=>vZ(Z,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDirUnlessDesktop:!0})),$.put("/:virtualMcpId/:branch/config",(Z)=>vZ(Z,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(Z)=>{let X=Z.req.param("step");if(!X||!d$6(X))return Z.json({error:`step must be one of: ${P_$.join(", ")}`},400);if(X==="start"){let Q=Z.get("vmClaim");if(Q.runner){let Y=r(Z.var.studioContext),G=Nw0(Q.virtualMcpMetadata);try{await Fw0({ctx:Z.var.studioContext,runner:Q.runner,handle:Q.claimName,orgId:Y.id,userId:Q.callerUserId,entries:G})}catch(J){let W=J instanceof Error?J.message:String(J);return Z.json({error:`Failed to push env to daemon: ${W}`},502)}}}return vZ(Z,`/_sandbox/setup/${X}`,{signal:Z.req.raw.signal,map404to410:!0})}),$.get("/:virtualMcpId/:branch/events",(Z)=>{let X=Z.get("vmClaim");if(!X.runner)return eN(Z,async(Q)=>{await Q.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this studio instance."})})});return Y_$(Z,{ctx:Z.var.studioContext,claimName:X.claimName,runner:X.runner,virtualMcpId:X.virtualMcpId,branch:X.branch,userId:X.userId,projectRef:X.projectRef,virtualMcpMetadata:X.virtualMcpMetadata})}),$.get("/:virtualMcpId/:branch/git/status",(Z)=>vZ(Z,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([Z.req.raw.signal,AbortSignal.timeout(z_$)])})),$.post("/:virtualMcpId/:branch/git/status",(Z)=>vZ(Z,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([Z.req.raw.signal,AbortSignal.timeout(z_$)])})),$.post("/:virtualMcpId/:branch/git/diff",(Z)=>vZ(Z,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/git/publish",async(Z)=>{let X=hC(Z);if(X instanceof Response)return X;let{claimName:Q,virtualMcpMetadata:Y,connectionIds:G}=Z.get("vmClaim"),J=Z.var.studioContext;return f81(Q,async()=>{try{await q81(J,X,Q);let W=D_$(Y,G);if(W)await L_$(J,X,Q,W)}catch(W){if(W instanceof ug)return Z.json({error:W.message},403,yY);let K=W instanceof Error?W.message:String(W);return Z.json({error:K},502,yY)}return vZ(Z,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",(Z)=>{let{claimName:X}=Z.get("vmClaim");return f81(X,()=>vZ(Z,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(Z)=>{let X=hC(Z);if(X instanceof Response)return X;let{claimName:Q}=Z.get("vmClaim"),Y=Z.var.studioContext;return f81(Q,async()=>{try{await q81(Y,X,Q)}catch(G){let J=G instanceof Error?G.message:String(G);return Z.json({error:J},502,yY)}return vZ(Z,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",GZ({maxSize:j_$,onError:(Z)=>Z.json({error:"Payload too large"},413,yY)}),async(Z)=>{let X=hC(Z);if(X instanceof Response)return X;let{claimName:Q,userId:Y,projectRef:G}=Z.get("vmClaim"),J=Z.var.studioContext;try{let W=await Z.req.json().catch(()=>({})),K=W.status,H=W.diff,N=H!=null&&typeof H.diffs==="object"&&H.diffs!==null,[F,U]=S81(K)&&N?[K,H]:await Promise.all([Jj0(X,Q,"/_sandbox/git/status","GET",{userId:Y,projectRef:G}),Jj0(X,Q,"/_sandbox/git/diff","GET",{userId:Y,projectRef:G})]),w=await H_$(J,F,U);return Z.json(w,200,yY)}catch(W){let K=W instanceof Error?W.message:String(W);if(K==="SANDBOX_GONE")return Z.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,yY);return Z.json({error:K},502,yY)}}),$.post("/:virtualMcpId/:branch/git/judge-review",GZ({maxSize:j_$,onError:(Z)=>Z.json({error:"Payload too large"},413,yY)}),async(Z)=>{let X=hC(Z);if(X instanceof Response)return X;let{claimName:Q,userId:Y,projectRef:G}=Z.get("vmClaim"),J=Z.var.studioContext;try{let W=await Z.req.json().catch(()=>({})),K=W.status,H=W.diff,N=H!=null&&typeof H.diffs==="object"&&H.diffs!==null,[F,U]=S81(K)&&N?[K,H]:await Promise.all([Jj0(X,Q,"/_sandbox/git/status","GET",{userId:Y,projectRef:G}),Jj0(X,Q,"/_sandbox/git/diff","GET",{userId:Y,projectRef:G})]),w=await F_$(J,F,U,typeof W.language==="string"?W.language:void 0);return Z.json(w,200,yY)}catch(W){let K=W instanceof Error?W.message:String(W);if(K==="SANDBOX_GONE")return Z.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,yY);return Z.json({error:K},502,yY)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(Z)=>{let X=hC(Z);if(X instanceof Response)return X;let{claimName:Q}=Z.get("vmClaim"),Y=Z.req.query("path");if(!Y||!Y.startsWith("/")||Y.startsWith("//")||Y.includes("..")||Y.includes("\\"))return Z.json({error:"Path not allowed"},403);let G;try{G=await X.getPreviewUrl(Q)}catch{return Z.json({error:"Preview not available"},502)}if(!G)return Z.json({error:"Preview not available"},502);let J=G.replace(/\/+$/,""),W=b81(`${J}${Y}`),K;try{K=await fetch(W?.url??`${J}${Y}`,{...W?{headers:{host:W.hostHeader}}:{}})}catch{return Z.json({error:"Preview unreachable"},502)}let H;try{H=await K.text()}catch{return Z.json({error:"Preview unreachable"},502)}return new Response(H,{status:K.status,headers:{"content-type":K.headers.get("content-type")??"application/json"}})}),$.post("/:virtualMcpId/:branch/preview-invoke",GZ({maxSize:h$6,onError:(Z)=>Z.json({error:"Payload too large"},413)}),async(Z)=>{let X=hC(Z);if(X instanceof Response)return X;let{claimName:Q}=Z.get("vmClaim"),Y;try{Y=await X.getPreviewUrl(Q)}catch{return Z.json({error:"Preview not available"},502)}if(!Y)return Z.json({error:"Preview not available"},502);let G;try{G=await Z.req.json()}catch{return Z.json({error:"Invalid JSON body"},400)}if(!G||typeof G!=="object"||Array.isArray(G))return Z.json({error:"Invalid JSON body"},400);let J=w_$(G);if(!J)return Z.json({error:"Invalid or missing __resolveType"},400);let W=O_$(Y,J.resolveType),K=b81(W),H;try{H=await fetch(K?.url??W,{method:"POST",headers:{"content-type":"application/json",...K?{host:K.hostHeader}:{}},body:JSON.stringify(J.payload),signal:AbortSignal.timeout(30000)})}catch{return Z.json({error:"Preview unreachable"},502)}let N;try{N=await H.text()}catch{return Z.json({error:"Preview unreachable"},502)}return new Response(N,{status:H.status,headers:{"content-type":H.headers.get("content-type")??"application/json"}})}),$};var T_$=B(()=>{v8();hO();hg();$_$();UN();X_$();P3();sw();Q_$();G_$();cn0();Kp();_81();U_$();B_$();E_$();y$6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;c$6=eC$(async($,Z)=>{let X=$.var.studioContext;try{$0(X)}catch{return $.json({error:"Unauthorized"},401)}let Q=W1(X);if(!Q)return $.json({error:"Unauthorized"},401);let Y;try{Y=r(X)}catch{return $.json({error:"Organization scope required"},403)}let G=$.req.param("virtualMcpId"),J=$.req.param("branch");if(!G||!J)return $.json({error:"virtualMcpId and branch are required"},400);try{g$6(J)}catch(w){let O=w instanceof Error?w.message:String(w);return $.json({error:O},400)}let W=await X.storage.virtualMcps.findById(G);if(!W||W.organization_id!==Y.id)return $.json({error:"Virtual MCP not found"},404);let K=kn({orgId:Y.id,virtualMcpId:G,branch:J}),H=await PN(X,J,Q),N=Z_$({userId:H,projectRef:K}),F=W.metadata??null,U;try{U=(await hX(X,{userId:H,branch:J,virtualMcpMetadata:F})).provider}catch{U=null}if(!U)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:N,callerUserId:Q,runner:U,virtualMcpId:G,branch:J,userId:H,projectRef:K,virtualMcpMetadata:F,connectionIds:W.connections?.map((w)=>w.connection_id)??[]}),Z()});Gj0=new Map;yY={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};P_$=["clone","install","start"]});var R_$=($)=>{let Z=new B1;if(Z.use("*",SC),Z.route("/",PE0()),Z.route("/",yk$()),Z.route("/",uC$()),Z.route("/",yC$()),Z.route("/",Zj0()),Z.route("/tools",pC$()),Z.route("/",mC$()),Z.route("/",jC$({kvStorage:$.kvStorage})),Z.route("/",LC$()),Z.route("/fs",VC$({getConnection:$.getNatsConnection})),Z.route("/sandbox",A_$()),Z.route("/",bC$()),Z.route("/deco-sites",TE0()),Z.route("/sso",OE0()),Z.route("/",Xj0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",Sk$()),$.mountDevAssets)Z.route("/dev-assets",RE0({orgFromPath:!0}));return Z.use("/mcp/:connectionId?",$.mcpAuth),Z.use("/mcp/:connectionId/ui-resource",$.mcpAuth),Z.use("/mcp/gateway/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/virtual-mcp/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/self",$.mcpAuth),Z.use("/mcp/task-run/:threadId",$.mcpAuth),Z.route("/",rs1()),Z.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",$.betterAuthProtectedResourceHandler),Z.get("/mcp/.well-known/oauth-protected-resource",$.betterAuthProtectedResourceHandler),Z.route("/mcp/task-run",_C$()),Z.route("/mcp",oO0()),Z.route("/mcp/self",$j0()),Z.route("/mcp",sO0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var I_$=B(()=>{v8();n11();Vk$();a11();IE0();$o();m11();EC$();zC$();CC$();yi();f11();eO0();E81();vC$();fC$();gC$();cC$();iC$();z81();tC$();P81();rO0();T_$()});function i$6($){return $.filter((Z)=>Z.vendors?.alias).map((Z)=>({name:Z.name,title:Z.title,description:Z.description,logo:Z.logo,category:Z.category,vendor:{alias:Z.vendors.alias,url:Z.vendors.url}}))}async function n$6($,Z){let X=await fetch(`${$}/rest/v1/apps?select=name,title,description,logo,category,vendors(alias,url)`,{headers:{apikey:Z,Authorization:`Bearer ${Z}`,Accept:"application/json"},signal:AbortSignal.timeout(m$6)});if(!X.ok){let Q=await X.text().catch(()=>X.statusText);throw console.error(`[deco-apps] Supabase error (${X.status}): ${Q.slice(0,200)}`),Error(`External service error (${X.status})`)}return await X.json()}var m$6=1e4,p$6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},q_$=()=>{let $=new B1;return $.use("*",p$6),$.get("/",async(Z)=>{let X=c0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await n$6(Q,Y);return Z.json({apps:i$6(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var M_$=B(()=>{v8();S$()});import{z as M1}from"zod";function bK($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function Q86($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let X=$.substring(0,Z),Q=$.substring(Z+1);if(!X||!Q)return null;return{credentialId:X,modelId:Q}}function Y86($,Z,X){try{return JSON.parse($)}catch{throw new V_$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function G86($){let Z={};for(let X of $)if(X.role==="assistant"&&X.tool_calls)for(let Q of X.tool_calls)Z[Q.id]=Q.function.name;return $.map((X)=>{switch(X.role){case"system":return{role:"system",content:X.content};case"user":if(typeof X.content==="string")return{role:"user",content:X.content};return{role:"user",content:X.content.map((Y)=>{if(Y.type==="text")return{type:"text",text:Y.text};return{type:"image",image:Y.image_url.url}})};case"assistant":if(X.tool_calls&&X.tool_calls.length>0)return{role:"assistant",content:X.tool_calls.map((Y)=>({type:"tool-call",toolCallId:Y.id,toolName:Y.function.name,input:Y86(Y.function.arguments,Y.id,Y.function.name)}))};return{role:"assistant",content:X.content??""};case"tool":let Q=Z[X.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:X.tool_call_id,toolName:Q,output:{type:"text",value:X.content}}]}}})}function J86($){let Z=$.map((X)=>{let Q=X.function.parameters?LY(X.function.parameters):LY({type:"object",properties:{}});return[X.function.name,_$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function W86($){if(!$)return;return{openai:{response_format:$}}}function K86(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function k_$($,Z,X,Q,Y,G){let J={model:$,messages:Z,tools:X,temperature:Q.temperature,maxTokens:Q.max_tokens,topP:Q.top_p,frequencyPenalty:Q.frequency_penalty,presencePenalty:Q.presence_penalty,stopSequences:Q.stop?Array.isArray(Q.stop)?Q.stop:[Q.stop]:void 0,abortSignal:G};return Y?{...J,providerOptions:Y}:J}function S_$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var t$6=256,o$6,r$6,a$6,s$6,e$6,$86,Z86,X86,V_$,C_$,__$;var v_$=B(()=>{S4();v8();hg();_N();o$6=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),r$6=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),a$6=M1.discriminatedUnion("role",[M1.object({role:M1.literal("system"),content:M1.string(),name:M1.string().optional()}),M1.object({role:M1.literal("user"),content:M1.union([M1.string(),M1.array(M1.union([M1.object({type:M1.literal("text"),text:M1.string()}),M1.object({type:M1.literal("image_url"),image_url:M1.object({url:M1.string(),detail:M1.string().optional()})})]))]),name:M1.string().optional()}),M1.object({role:M1.literal("assistant"),content:M1.string().nullable().optional(),name:M1.string().optional(),tool_calls:M1.array(r$6).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),s$6=M1.object({type:M1.literal("text")}),e$6=M1.object({type:M1.literal("json_object")}),$86=M1.object({type:M1.literal("json_schema"),json_schema:M1.object({name:M1.string(),description:M1.string().optional(),schema:M1.record(M1.string(),M1.unknown()),strict:M1.boolean().optional()})}),Z86=M1.union([s$6,e$6,$86]),X86=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(a$6),stream:M1.boolean().optional().default(!1),temperature:M1.number().min(0).max(2).optional(),max_tokens:M1.number().positive().optional(),top_p:M1.number().min(0).max(1).optional(),frequency_penalty:M1.number().min(-2).max(2).optional(),presence_penalty:M1.number().min(-2).max(2).optional(),stop:M1.union([M1.string(),M1.array(M1.string())]).optional(),tools:M1.array(o$6).optional(),tool_choice:M1.union([M1.literal("auto"),M1.literal("none"),M1.literal("required"),M1.object({type:M1.literal("function"),function:M1.object({name:M1.string()})})]).optional(),response_format:Z86.optional(),user:M1.string().optional()});V_$=class V_$ extends Error{constructor($){super($);this.name="MessageConversionError"}};C_$=new B1;C_$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(bK("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(bK("Organization context is required. Ensure your API key has organization metadata.","invalid_request_error","organization"),400);if((Z.organization.slug??Z.organization.id)!==X)return $.json(bK("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=X86.safeParse(Q);if(!Y.success){let L=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(bK(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let G=Y.data,J=Q86(G.model);if(!J)return $.json(bK("Invalid model format. Expected 'model_id' or 'credential_id:model_id' (e.g., 'claude-sonnet-4-6' or 'key_abc123:claude-sonnet-4-6')","invalid_request_error","model"),400);let{credentialId:W}=J,{modelId:K}=J;if(!W){let E=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((j)=>sB(j.providerId));if(!E)return $.json(bK("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);W=E.id}let H;try{H=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(bK(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let N=H.aiSdk.languageModel(K),F=G86(G.messages),U=G.tools?J86(G.tools):void 0,w=W86(G.response_format),O=K86(),D=Math.floor(Date.now()/1000);if(G.stream)return eN($,async(L)=>{let E=k_$(N,F,U,G,w,$.req.raw.signal);try{let j=yw(E),z=!1,A=0,P="",M=async()=>{if(P.length===0)return;let k=P;P="",await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{content:k},finish_reason:null}]})})};for await(let k of j.fullStream){if(!z&&(k.type==="text-delta"||k.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(k.type==="text-delta"){if(P+=k.text,P.length>=t$6)await M()}else if(k.type==="tool-call"){await M();let q=A++;await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{tool_calls:[{index:q,id:k.toolCallId,type:"function",function:{name:k.toolName,arguments:JSON.stringify(k.input)}}]},finish_reason:null}]})})}else if(k.type==="finish")await M(),await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{},finish_reason:S_$(k.finishReason)}],usage:k.totalUsage?{prompt_tokens:k.totalUsage.inputTokens??0,completion_tokens:k.totalUsage.outputTokens??0,total_tokens:k.totalUsage.totalTokens??0}:void 0})})}await M(),await L.writeSSE({data:"[DONE]"})}catch(j){let z=j;console.error("[openai-compat:stream] Error:",z.message),await L.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let L=k_$(N,F,U,G,w,$.req.raw.signal),E=await fw(L),j={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)j.tool_calls=E.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),j.content=null;return $.json({id:O,object:"chat.completion",created:D,model:G.model,choices:[{index:0,message:j,finish_reason:S_$(E.finishReason)}],usage:{prompt_tokens:E.usage?.inputTokens??0,completion_tokens:E.usage?.outputTokens??0,total_tokens:E.usage?.totalTokens??0}})}}catch(Q){let Y=Q;if(Y.name==="AbortError")return $.json(bK("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(bK(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(bK(Y.message,"server_error"),500)}});__$=C_$});var f_$;var b_$=B(()=>{f_$={name:"decocms",version:"4.195.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/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","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 src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function F86(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??N86}}var x_$,N86="https://ph.studio.decocms.com",y_$;var g_$=B(()=>{v8();mC0();cV();BZ();S$();V11();b_$();x_$=new B1;x_$.get("/",($)=>{let Z={version:f_$.version,theme:eM1(),...QD().logo&&{logo:QD().logo},...NK()&&{internalUrl:Zq1()},...c0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!c0().firecrawlApiKey,auth:mM$(),posthog:F86(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!NK()&&c0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});y_$=x_$});function cg($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function x81($){return(cg($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function u_$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(cg($))}&sz=${Z}`}function h_$($,Z){let X=$.trim();if(X.length<=Z)return X;let Q=X.slice(0,Z-1),Y=Q.lastIndexOf(" ");return`${(Y>Z*0.6?Q.slice(0,Y):Q).trimEnd()}\u2026`}function c_$($){let{brand:Z,domain:X,score:Q,verdict:Y}=$,G=typeof Q==="number"?`${Z} commerce report \u2014 ${Math.round(Q)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,J=`See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,W=Y?.trim()?h_$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):h_$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as l0}from"zod";var uC,U86,w86,O86,B86,l_$;var d_$=B(()=>{uC=l0.enum(["good","bad","neutral"]),U86=l0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},l0.object({kind:l0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:l0.coerce.string().optional(),tone:uC.optional(),muted:l0.boolean().optional(),delta:l0.coerce.string().optional(),deltaDir:l0.enum(["up","down","neutral"]).optional(),points:l0.array(l0.coerce.number()).optional(),label:l0.coerce.string().optional()}).transform(($)=>{if($.kind==="badge"&&$.label==null)$.label=$.value??"";if($.kind==="score"){let Z=Number($.value);if(Number.isNaN(Z))return{...$,kind:"text"}}return $})),w86=l0.preprocess(($)=>{let Z=$;if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&Array.isArray(Z.cells))Z=Z.cells;if(Array.isArray(Z)&&Z.length===1&&Array.isArray(Z[0]))Z=Z[0];if(Array.isArray(Z))return Z;if(Z&&typeof Z==="object")return Object.values(Z);return Z},l0.array(U86)),O86={key:l0.coerce.string(),title:l0.coerce.string(),eyebrow:l0.coerce.string().optional(),headline:l0.coerce.string(),annotation:l0.coerce.string().optional(),methodology:l0.coerce.string().optional(),sources:l0.array(l0.object({name:l0.coerce.string(),logoUrl:l0.coerce.string()})).optional()},B86=l0.discriminatedUnion("template",[l0.object({template:l0.literal("cover"),score:l0.object({value:l0.coerce.number(),max:l0.coerce.number().optional(),grade:l0.coerce.string().optional(),label:l0.coerce.string().optional()}).optional(),brandImage:l0.coerce.string().optional(),screenshot:l0.coerce.string().optional(),mobileScreenshot:l0.coerce.string().optional()}),l0.object({template:l0.literal("cta"),ctaUrl:l0.coerce.string().optional(),ctaLabel:l0.coerce.string().optional(),bullets:l0.array(l0.coerce.string()).optional()}),l0.object({template:l0.literal("series"),points:l0.array(l0.coerce.number()).min(2),xLabels:l0.array(l0.coerce.string()).min(1),unit:l0.coerce.string().optional(),callout:l0.object({index:l0.coerce.number(),value:l0.coerce.string(),tone:uC.optional()})}),l0.object({template:l0.literal("threshold"),value:l0.coerce.string().default(""),metricLabel:l0.coerce.string().optional(),ratio:l0.coerce.number(),thresholdRatio:l0.coerce.number().optional(),thresholdLabel:l0.coerce.string().default(""),tone:uC.optional()}),l0.object({template:l0.literal("stats"),stats:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),tone:uC.optional()})).min(1)}),l0.object({template:l0.literal("bars"),items:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),ratio:l0.coerce.number(),tone:uC.optional()})).min(1)}),l0.object({template:l0.literal("gauges"),gauges:l0.array(l0.object({label:l0.coerce.string(),value:l0.coerce.string(),status:l0.enum(["good","warn","bad"]).catch("warn"),caption:l0.coerce.string().optional(),ratio:l0.coerce.number().optional()})).min(1)}),l0.object({template:l0.literal("checklist"),checks:l0.array(l0.object({label:l0.coerce.string(),status:l0.enum(["pass","fail","warn"]).catch("fail"),value:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("table"),columns:l0.array(l0.object({label:l0.coerce.string(),align:l0.enum(["left","right"]).optional()})).min(1),rows:l0.array(w86).min(1),highlightRow:l0.coerce.number().optional()}),l0.object({template:l0.literal("products"),products:l0.array(l0.object({name:l0.coerce.string(),price:l0.coerce.string().optional(),image:l0.coerce.string().optional(),url:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("list"),entries:l0.array(l0.object({label:l0.coerce.string(),severity:l0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:l0.coerce.number().optional()}),l0.object({template:l0.literal("keywords"),volumeLabel:l0.coerce.string().optional(),keywords:l0.array(l0.object({term:l0.coerce.string(),volume:l0.coerce.string(),position:l0.coerce.number().catch(0)})).min(1)}),l0.object({template:l0.literal("competitor"),metricLabel:l0.coerce.string().optional(),competitors:l0.array(l0.object({name:l0.coerce.string(),value:l0.coerce.string(),tone:uC.optional(),isYou:l0.boolean().optional()})).min(1)}),l0.object({template:l0.literal("scorecard"),rivalLabel:l0.coerce.string().optional(),dimensions:l0.array(l0.object({label:l0.coerce.string(),you:l0.coerce.string(),rival:l0.coerce.string().optional(),rivalName:l0.coerce.string().optional(),tone:uC.optional()})).min(1)})]),l_$=l0.object({...O86,template:B86})});function Wj0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=l_$.safeParse(Y.props);if(G.success)return G.data;let J=G.error.issues[0];return Z.push({section_type:Y.section_type,position:Y.position,reason:J?`${J.path.join(".")||"(root)"}: ${J.message}`:"contract violation"}),null}).filter((Y)=>Y!==null),Q=X.filter((Y)=>Y.template.template!=="cover"&&Y.template.template!=="cta").map((Y)=>({key:Y.key,title:Y.title}));return{deck:{meta:{...$.meta,scores:$.summary?.scores,scannedAt:$.scanned_at,toc:Q},slides:X},drops:Z}}var y81=B(()=>{d_$()});import{join as m_$}from"path";async function L86($){try{let Z=await fetch(`${jW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(D86)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=Wj0(X);if(!Q.slides.length)return null;let Y=Q.slides.find((W)=>W.template.template==="cover"),G=Y?.template,J=G&&G.template==="cover"?G:void 0;return{brand:Q.meta.brand?.trim()||x81($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function gY($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function E86($,Z){let X=cg($),Q=Z?.brand?.trim()||x81(X),Y=u_$(X,128),J=`${(c0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=c_$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),H=`${J}/og.png`,N=`${Q} commerce report by decocms`;return[`<title>${gY(W)}</title>`,`<meta name="description" content="${gY(K)}" />`,'<meta name="robots" content="noindex, follow" />','<meta property="og:type" content="website" />','<meta property="og:site_name" content="decocms" />',`<meta property="og:title" content="${gY(W)}" />`,`<meta property="og:description" content="${gY(K)}" />`,`<meta property="og:url" content="${gY(J)}" />`,`<meta property="og:image" content="${gY(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${gY(N)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${gY(W)}" />`,`<meta name="twitter:description" content="${gY(K)}" />`,`<meta name="twitter:image" content="${gY(H)}" />`,`<meta name="twitter:image:alt" content="${gY(N)}" />`,`<link rel="canonical" href="${gY(J)}" />`,`<link rel="icon" href="${gY(Y)}" sizes="any" />`].join(`
2729
+ Respond with the structured verdict and a short reason.`,N_$;var U_$=B(()=>{S4();XO();_81();C$6=v81.object({requiresReview:v81.boolean().describe("true if the changes should go through pull-request review"),reason:v81.string().describe("One short sentence explaining the decision (max ~120 chars)")});N_$={requiresReview:!1,reason:""}});function f$6($){if(!$||$.includes(".."))return!1;return b$6.test($)}function w_$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!f$6(Z))return null;let{__resolveType:X,...Q}=$;return{resolveType:Z,payload:Q}}function O_$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var b$6;var B_$=B(()=>{b$6=/^[\w./@-]+$/});function b81($){let Z;try{Z=new URL($)}catch{return null}if(!Z.hostname.endsWith(".localhost"))return null;let X=Z.host;return Z.hostname="127.0.0.1",{url:Z.toString(),hostHeader:X}}function D_$($,Z){let X=$?.githubRepo;if(!X?.owner||!X?.name)return null;if(!X.connectionId)return X;if(!Z.includes(X.connectionId))return null;return X}async function L_$($,Z,X,Q){if(!Q.connectionId)throw new ug("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let Y=$.organization?.id;if(!Y)throw new ug(i7);await Cx({ctx:$,connectionId:Q.connectionId,organizationId:Y,forceRefresh:!0,onLegacyMintError:(N)=>{let F=N instanceof Error?N.message:i7;throw new ug(F)}});let{cloneUrl:G,gitUserName:J,gitUserEmail:W}=await hw(Q.connectionId,Q.owner,Q.name,$.db,$.vault),K=Yj0($),H=await Z.proxyDaemonRequest(X,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{repository:{cloneUrl:G},identity:{userName:J,userEmail:W}},...K?{operator:K}:{}})});if(!H.ok){let N=await ZO(H,x$6).catch(()=>H.statusText);throw Error(`Failed to refresh sandbox git credentials (${H.status}): ${N}`)}}var x$6=10485760,ug;var E_$=B(()=>{Aw();I81();Hp();vn();ug=class ug extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function g$6($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!y$6.test(Z))throw Error(`Invalid branch name: ${$}`)}function gC($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(u$6)])}function hC($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}function f81($,Z){let Q=(Gj0.get($)??Promise.resolve()).catch(()=>{}).then(Z),Y=Q.catch(()=>{});return Gj0.set($,Y),Y.finally(()=>{if(Gj0.get($)===Y)Gj0.delete($)}),Q}async function vZ($,Z,X){let Q=hC($);if(Q instanceof Response)return Q;let{claimName:Y,userId:G,projectRef:J}=$.get("vmClaim"),W=X?.method??"POST",K=null,H=new Headers;if(X?.jsonBody!==void 0)K=X.jsonBody,H.set("content-type","application/json");else if(X?.forwardJsonBody)K=await $.req.text(),H.set("content-type","application/json");let N=X?.signal,F={method:W,headers:H,body:K,...N?{signal:N}:{}},U=async()=>{let w=await Q.proxyDaemonRequest(Y,Z,F);if(X?.map404to410&&w.status===404){try{await w.body?.cancel()}catch{}if(await Q.adoptLiveClaim?.({userId:G,projectRef:J},Y))w=await Q.proxyDaemonRequest(Y,Z,F);if(w.status===404){try{await w.body?.cancel()}catch{}return new Response(JSON.stringify({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."}),{status:410,headers:{"content-type":"application/json",...yY}})}}let O=await w.text(),D=X?.redactRepoDirUnlessDesktop&&Q.kind!=="user-desktop"?l$6(O):O,L=w.headers.get("content-type")??"application/json";return new Response(D,{status:w.status,headers:{"content-type":L,...yY}})};try{if(N){let w=U();return w.catch(()=>{}),await Promise.race([w,new Promise((D,L)=>{if(N.aborted)return L(N.reason);N.addEventListener("abort",()=>L(N.reason),{once:!0})})])}return await U()}catch(w){let O=w instanceof Error?w.message:String(w);return $.json({error:`Daemon unreachable: ${O}`},502)}}function l$6($){try{let Z=JSON.parse($);if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&"repoDir"in Z)return JSON.stringify({...Z,repoDir:null})}catch{}return $}async function Jj0($,Z,X,Q="GET",Y){let G=await $.proxyDaemonRequest(Z,X,{method:Q,headers:new Headers,body:null});if(G.status===404&&Y){try{await G.body?.cancel()}catch{}if(await $.adoptLiveClaim?.(Y,Z))G=await $.proxyDaemonRequest(Z,X,{method:Q,headers:new Headers,body:null})}if(G.status===404){try{await G.body?.cancel()}catch{}throw Error("SANDBOX_GONE")}let J=await G.text();if(!G.ok)try{let W=JSON.parse(J);throw Error(W.error??`Daemon error (${G.status})`)}catch(W){if(W instanceof Error&&W.message!==J)throw W;throw Error(`Daemon error (${G.status})`)}return JSON.parse(J)}function d$6($){return P_$.includes($)}var y$6,j_$=524288,h$6=65536,u$6=1e4,z_$=2000,c$6,Gj0,yY,P_$,A_$=()=>{let $=new B1;return $.use("/:virtualMcpId/:branch/*",c$6),$.post("/:virtualMcpId/:branch/write",(Z)=>vZ(Z,"/_sandbox/write",{forwardJsonBody:!0,signal:gC(Z)})),$.post("/:virtualMcpId/:branch/unlink",(Z)=>vZ(Z,"/_sandbox/unlink",{forwardJsonBody:!0,signal:gC(Z)})),$.post("/:virtualMcpId/:branch/mkdir",(Z)=>vZ(Z,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:gC(Z)})),$.post("/:virtualMcpId/:branch/rename",(Z)=>vZ(Z,"/_sandbox/rename",{forwardJsonBody:!0,signal:gC(Z)})),$.post("/:virtualMcpId/:branch/read",(Z)=>vZ(Z,"/_sandbox/read",{forwardJsonBody:!0,signal:gC(Z)})),$.post("/:virtualMcpId/:branch/glob",(Z)=>vZ(Z,"/_sandbox/glob",{forwardJsonBody:!0,signal:gC(Z)})),$.post("/:virtualMcpId/:branch/grep",(Z)=>vZ(Z,"/_sandbox/grep",{forwardJsonBody:!0,signal:gC(Z)})),$.post("/:virtualMcpId/:branch/exec/:script",async(Z)=>{let X=Z.req.param("script");if(!X)return Z.json({error:"missing script name"},400);return vZ(Z,`/_sandbox/exec/${encodeURIComponent(X)}`)}),$.post("/:virtualMcpId/:branch/exec/:script/kill",async(Z)=>{let X=Z.req.param("script");if(!X)return Z.json({error:"missing script name"},400);return vZ(Z,`/_sandbox/exec/${encodeURIComponent(X)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(Z)=>vZ(Z,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDirUnlessDesktop:!0})),$.put("/:virtualMcpId/:branch/config",(Z)=>vZ(Z,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(Z)=>{let X=Z.req.param("step");if(!X||!d$6(X))return Z.json({error:`step must be one of: ${P_$.join(", ")}`},400);if(X==="start"){let Q=Z.get("vmClaim");if(Q.runner){let Y=r(Z.var.studioContext),G=Nw0(Q.virtualMcpMetadata);try{await Fw0({ctx:Z.var.studioContext,runner:Q.runner,handle:Q.claimName,orgId:Y.id,userId:Q.callerUserId,entries:G})}catch(J){let W=J instanceof Error?J.message:String(J);return Z.json({error:`Failed to push env to daemon: ${W}`},502)}}}return vZ(Z,`/_sandbox/setup/${X}`,{signal:Z.req.raw.signal,map404to410:!0})}),$.get("/:virtualMcpId/:branch/events",(Z)=>{let X=Z.get("vmClaim");if(!X.runner)return eN(Z,async(Q)=>{await Q.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this studio instance."})})});return Y_$(Z,{ctx:Z.var.studioContext,claimName:X.claimName,runner:X.runner,virtualMcpId:X.virtualMcpId,branch:X.branch,userId:X.userId,projectRef:X.projectRef,virtualMcpMetadata:X.virtualMcpMetadata})}),$.get("/:virtualMcpId/:branch/git/status",(Z)=>vZ(Z,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([Z.req.raw.signal,AbortSignal.timeout(z_$)])})),$.post("/:virtualMcpId/:branch/git/status",(Z)=>vZ(Z,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([Z.req.raw.signal,AbortSignal.timeout(z_$)])})),$.post("/:virtualMcpId/:branch/git/diff",(Z)=>vZ(Z,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/git/publish",async(Z)=>{let X=hC(Z);if(X instanceof Response)return X;let{claimName:Q,virtualMcpMetadata:Y,connectionIds:G}=Z.get("vmClaim"),J=Z.var.studioContext;return f81(Q,async()=>{try{await q81(J,X,Q);let W=D_$(Y,G);if(W)await L_$(J,X,Q,W)}catch(W){if(W instanceof ug)return Z.json({error:W.message},403,yY);let K=W instanceof Error?W.message:String(W);return Z.json({error:K},502,yY)}return vZ(Z,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",(Z)=>{let{claimName:X}=Z.get("vmClaim");return f81(X,()=>vZ(Z,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(Z)=>{let X=hC(Z);if(X instanceof Response)return X;let{claimName:Q}=Z.get("vmClaim"),Y=Z.var.studioContext;return f81(Q,async()=>{try{await q81(Y,X,Q)}catch(G){let J=G instanceof Error?G.message:String(G);return Z.json({error:J},502,yY)}return vZ(Z,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",GZ({maxSize:j_$,onError:(Z)=>Z.json({error:"Payload too large"},413,yY)}),async(Z)=>{let X=hC(Z);if(X instanceof Response)return X;let{claimName:Q,userId:Y,projectRef:G}=Z.get("vmClaim"),J=Z.var.studioContext;try{let W=await Z.req.json().catch(()=>({})),K=W.status,H=W.diff,N=H!=null&&typeof H.diffs==="object"&&H.diffs!==null,[F,U]=S81(K)&&N?[K,H]:await Promise.all([Jj0(X,Q,"/_sandbox/git/status","GET",{userId:Y,projectRef:G}),Jj0(X,Q,"/_sandbox/git/diff","GET",{userId:Y,projectRef:G})]),w=await H_$(J,F,U);return Z.json(w,200,yY)}catch(W){let K=W instanceof Error?W.message:String(W);if(K==="SANDBOX_GONE")return Z.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,yY);return Z.json({error:K},502,yY)}}),$.post("/:virtualMcpId/:branch/git/judge-review",GZ({maxSize:j_$,onError:(Z)=>Z.json({error:"Payload too large"},413,yY)}),async(Z)=>{let X=hC(Z);if(X instanceof Response)return X;let{claimName:Q,userId:Y,projectRef:G}=Z.get("vmClaim"),J=Z.var.studioContext;try{let W=await Z.req.json().catch(()=>({})),K=W.status,H=W.diff,N=H!=null&&typeof H.diffs==="object"&&H.diffs!==null,[F,U]=S81(K)&&N?[K,H]:await Promise.all([Jj0(X,Q,"/_sandbox/git/status","GET",{userId:Y,projectRef:G}),Jj0(X,Q,"/_sandbox/git/diff","GET",{userId:Y,projectRef:G})]),w=await F_$(J,F,U,typeof W.language==="string"?W.language:void 0);return Z.json(w,200,yY)}catch(W){let K=W instanceof Error?W.message:String(W);if(K==="SANDBOX_GONE")return Z.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,yY);return Z.json({error:K},502,yY)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(Z)=>{let X=hC(Z);if(X instanceof Response)return X;let{claimName:Q}=Z.get("vmClaim"),Y=Z.req.query("path");if(!Y||!Y.startsWith("/")||Y.startsWith("//")||Y.includes("..")||Y.includes("\\"))return Z.json({error:"Path not allowed"},403);let G;try{G=await X.getPreviewUrl(Q)}catch{return Z.json({error:"Preview not available"},502)}if(!G)return Z.json({error:"Preview not available"},502);let J=G.replace(/\/+$/,""),W=b81(`${J}${Y}`),K;try{K=await fetch(W?.url??`${J}${Y}`,{...W?{headers:{host:W.hostHeader}}:{}})}catch{return Z.json({error:"Preview unreachable"},502)}let H;try{H=await K.text()}catch{return Z.json({error:"Preview unreachable"},502)}return new Response(H,{status:K.status,headers:{"content-type":K.headers.get("content-type")??"application/json"}})}),$.post("/:virtualMcpId/:branch/preview-invoke",GZ({maxSize:h$6,onError:(Z)=>Z.json({error:"Payload too large"},413)}),async(Z)=>{let X=hC(Z);if(X instanceof Response)return X;let{claimName:Q}=Z.get("vmClaim"),Y;try{Y=await X.getPreviewUrl(Q)}catch{return Z.json({error:"Preview not available"},502)}if(!Y)return Z.json({error:"Preview not available"},502);let G;try{G=await Z.req.json()}catch{return Z.json({error:"Invalid JSON body"},400)}if(!G||typeof G!=="object"||Array.isArray(G))return Z.json({error:"Invalid JSON body"},400);let J=w_$(G);if(!J)return Z.json({error:"Invalid or missing __resolveType"},400);let W=O_$(Y,J.resolveType),K=b81(W),H;try{H=await fetch(K?.url??W,{method:"POST",headers:{"content-type":"application/json",...K?{host:K.hostHeader}:{}},body:JSON.stringify(J.payload),signal:AbortSignal.timeout(30000)})}catch{return Z.json({error:"Preview unreachable"},502)}let N;try{N=await H.text()}catch{return Z.json({error:"Preview unreachable"},502)}return new Response(N,{status:H.status,headers:{"content-type":H.headers.get("content-type")??"application/json"}})}),$};var T_$=B(()=>{v8();hO();hg();$_$();UN();X_$();P3();sw();Q_$();G_$();cn0();Kp();_81();U_$();B_$();E_$();y$6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;c$6=eC$(async($,Z)=>{let X=$.var.studioContext;try{$0(X)}catch{return $.json({error:"Unauthorized"},401)}let Q=W1(X);if(!Q)return $.json({error:"Unauthorized"},401);let Y;try{Y=r(X)}catch{return $.json({error:"Organization scope required"},403)}let G=$.req.param("virtualMcpId"),J=$.req.param("branch");if(!G||!J)return $.json({error:"virtualMcpId and branch are required"},400);try{g$6(J)}catch(w){let O=w instanceof Error?w.message:String(w);return $.json({error:O},400)}let W=await X.storage.virtualMcps.findById(G);if(!W||W.organization_id!==Y.id)return $.json({error:"Virtual MCP not found"},404);let K=kn({orgId:Y.id,virtualMcpId:G,branch:J}),H=await PN(X,J,Q),N=Z_$({userId:H,projectRef:K}),F=W.metadata??null,U;try{U=(await hX(X,{userId:H,branch:J,virtualMcpMetadata:F})).provider}catch{U=null}if(!U)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:N,callerUserId:Q,runner:U,virtualMcpId:G,branch:J,userId:H,projectRef:K,virtualMcpMetadata:F,connectionIds:W.connections?.map((w)=>w.connection_id)??[]}),Z()});Gj0=new Map;yY={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};P_$=["clone","install","start"]});var R_$=($)=>{let Z=new B1;if(Z.use("*",SC),Z.route("/",PE0()),Z.route("/",yk$()),Z.route("/",uC$()),Z.route("/",yC$()),Z.route("/",Zj0()),Z.route("/tools",pC$()),Z.route("/",mC$()),Z.route("/",jC$({kvStorage:$.kvStorage})),Z.route("/",LC$()),Z.route("/fs",VC$({getConnection:$.getNatsConnection})),Z.route("/sandbox",A_$()),Z.route("/",bC$()),Z.route("/deco-sites",TE0()),Z.route("/sso",OE0()),Z.route("/",Xj0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",Sk$()),$.mountDevAssets)Z.route("/dev-assets",RE0({orgFromPath:!0}));return Z.use("/mcp/:connectionId?",$.mcpAuth),Z.use("/mcp/:connectionId/ui-resource",$.mcpAuth),Z.use("/mcp/gateway/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/virtual-mcp/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/self",$.mcpAuth),Z.use("/mcp/task-run/:threadId",$.mcpAuth),Z.route("/",rs1()),Z.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",$.betterAuthProtectedResourceHandler),Z.get("/mcp/.well-known/oauth-protected-resource",$.betterAuthProtectedResourceHandler),Z.route("/mcp/task-run",_C$()),Z.route("/mcp",oO0()),Z.route("/mcp/self",$j0()),Z.route("/mcp",sO0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var I_$=B(()=>{v8();n11();Vk$();a11();IE0();$o();m11();EC$();zC$();CC$();yi();f11();eO0();E81();vC$();fC$();gC$();cC$();iC$();z81();tC$();P81();rO0();T_$()});function i$6($){return $.filter((Z)=>Z.vendors?.alias).map((Z)=>({name:Z.name,title:Z.title,description:Z.description,logo:Z.logo,category:Z.category,vendor:{alias:Z.vendors.alias,url:Z.vendors.url}}))}async function n$6($,Z){let X=await fetch(`${$}/rest/v1/apps?select=name,title,description,logo,category,vendors(alias,url)`,{headers:{apikey:Z,Authorization:`Bearer ${Z}`,Accept:"application/json"},signal:AbortSignal.timeout(m$6)});if(!X.ok){let Q=await X.text().catch(()=>X.statusText);throw console.error(`[deco-apps] Supabase error (${X.status}): ${Q.slice(0,200)}`),Error(`External service error (${X.status})`)}return await X.json()}var m$6=1e4,p$6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},q_$=()=>{let $=new B1;return $.use("*",p$6),$.get("/",async(Z)=>{let X=c0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await n$6(Q,Y);return Z.json({apps:i$6(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var M_$=B(()=>{v8();S$()});import{z as M1}from"zod";function bK($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function Q86($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let X=$.substring(0,Z),Q=$.substring(Z+1);if(!X||!Q)return null;return{credentialId:X,modelId:Q}}function Y86($,Z,X){try{return JSON.parse($)}catch{throw new V_$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function G86($){let Z={};for(let X of $)if(X.role==="assistant"&&X.tool_calls)for(let Q of X.tool_calls)Z[Q.id]=Q.function.name;return $.map((X)=>{switch(X.role){case"system":return{role:"system",content:X.content};case"user":if(typeof X.content==="string")return{role:"user",content:X.content};return{role:"user",content:X.content.map((Y)=>{if(Y.type==="text")return{type:"text",text:Y.text};return{type:"image",image:Y.image_url.url}})};case"assistant":if(X.tool_calls&&X.tool_calls.length>0)return{role:"assistant",content:X.tool_calls.map((Y)=>({type:"tool-call",toolCallId:Y.id,toolName:Y.function.name,input:Y86(Y.function.arguments,Y.id,Y.function.name)}))};return{role:"assistant",content:X.content??""};case"tool":let Q=Z[X.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:X.tool_call_id,toolName:Q,output:{type:"text",value:X.content}}]}}})}function J86($){let Z=$.map((X)=>{let Q=X.function.parameters?LY(X.function.parameters):LY({type:"object",properties:{}});return[X.function.name,_$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function W86($){if(!$)return;return{openai:{response_format:$}}}function K86(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function k_$($,Z,X,Q,Y,G){let J={model:$,messages:Z,tools:X,temperature:Q.temperature,maxTokens:Q.max_tokens,topP:Q.top_p,frequencyPenalty:Q.frequency_penalty,presencePenalty:Q.presence_penalty,stopSequences:Q.stop?Array.isArray(Q.stop)?Q.stop:[Q.stop]:void 0,abortSignal:G};return Y?{...J,providerOptions:Y}:J}function S_$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var t$6=256,o$6,r$6,a$6,s$6,e$6,$86,Z86,X86,V_$,C_$,__$;var v_$=B(()=>{S4();v8();hg();_N();o$6=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),r$6=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),a$6=M1.discriminatedUnion("role",[M1.object({role:M1.literal("system"),content:M1.string(),name:M1.string().optional()}),M1.object({role:M1.literal("user"),content:M1.union([M1.string(),M1.array(M1.union([M1.object({type:M1.literal("text"),text:M1.string()}),M1.object({type:M1.literal("image_url"),image_url:M1.object({url:M1.string(),detail:M1.string().optional()})})]))]),name:M1.string().optional()}),M1.object({role:M1.literal("assistant"),content:M1.string().nullable().optional(),name:M1.string().optional(),tool_calls:M1.array(r$6).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),s$6=M1.object({type:M1.literal("text")}),e$6=M1.object({type:M1.literal("json_object")}),$86=M1.object({type:M1.literal("json_schema"),json_schema:M1.object({name:M1.string(),description:M1.string().optional(),schema:M1.record(M1.string(),M1.unknown()),strict:M1.boolean().optional()})}),Z86=M1.union([s$6,e$6,$86]),X86=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(a$6),stream:M1.boolean().optional().default(!1),temperature:M1.number().min(0).max(2).optional(),max_tokens:M1.number().positive().optional(),top_p:M1.number().min(0).max(1).optional(),frequency_penalty:M1.number().min(-2).max(2).optional(),presence_penalty:M1.number().min(-2).max(2).optional(),stop:M1.union([M1.string(),M1.array(M1.string())]).optional(),tools:M1.array(o$6).optional(),tool_choice:M1.union([M1.literal("auto"),M1.literal("none"),M1.literal("required"),M1.object({type:M1.literal("function"),function:M1.object({name:M1.string()})})]).optional(),response_format:Z86.optional(),user:M1.string().optional()});V_$=class V_$ extends Error{constructor($){super($);this.name="MessageConversionError"}};C_$=new B1;C_$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(bK("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(bK("Organization context is required. Ensure your API key has organization metadata.","invalid_request_error","organization"),400);if((Z.organization.slug??Z.organization.id)!==X)return $.json(bK("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=X86.safeParse(Q);if(!Y.success){let L=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(bK(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let G=Y.data,J=Q86(G.model);if(!J)return $.json(bK("Invalid model format. Expected 'model_id' or 'credential_id:model_id' (e.g., 'claude-sonnet-4-6' or 'key_abc123:claude-sonnet-4-6')","invalid_request_error","model"),400);let{credentialId:W}=J,{modelId:K}=J;if(!W){let E=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((j)=>sB(j.providerId));if(!E)return $.json(bK("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);W=E.id}let H;try{H=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(bK(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let N=H.aiSdk.languageModel(K),F=G86(G.messages),U=G.tools?J86(G.tools):void 0,w=W86(G.response_format),O=K86(),D=Math.floor(Date.now()/1000);if(G.stream)return eN($,async(L)=>{let E=k_$(N,F,U,G,w,$.req.raw.signal);try{let j=yw(E),z=!1,A=0,P="",M=async()=>{if(P.length===0)return;let k=P;P="",await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{content:k},finish_reason:null}]})})};for await(let k of j.fullStream){if(!z&&(k.type==="text-delta"||k.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(k.type==="text-delta"){if(P+=k.text,P.length>=t$6)await M()}else if(k.type==="tool-call"){await M();let q=A++;await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{tool_calls:[{index:q,id:k.toolCallId,type:"function",function:{name:k.toolName,arguments:JSON.stringify(k.input)}}]},finish_reason:null}]})})}else if(k.type==="finish")await M(),await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{},finish_reason:S_$(k.finishReason)}],usage:k.totalUsage?{prompt_tokens:k.totalUsage.inputTokens??0,completion_tokens:k.totalUsage.outputTokens??0,total_tokens:k.totalUsage.totalTokens??0}:void 0})})}await M(),await L.writeSSE({data:"[DONE]"})}catch(j){let z=j;console.error("[openai-compat:stream] Error:",z.message),await L.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let L=k_$(N,F,U,G,w,$.req.raw.signal),E=await fw(L),j={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)j.tool_calls=E.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),j.content=null;return $.json({id:O,object:"chat.completion",created:D,model:G.model,choices:[{index:0,message:j,finish_reason:S_$(E.finishReason)}],usage:{prompt_tokens:E.usage?.inputTokens??0,completion_tokens:E.usage?.outputTokens??0,total_tokens:E.usage?.totalTokens??0}})}}catch(Q){let Y=Q;if(Y.name==="AbortError")return $.json(bK("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(bK(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(bK(Y.message,"server_error"),500)}});__$=C_$});var f_$;var b_$=B(()=>{f_$={name:"decocms",version:"4.196.0",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","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 src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function F86(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??N86}}var x_$,N86="https://ph.studio.decocms.com",y_$;var g_$=B(()=>{v8();mC0();cV();BZ();S$();V11();b_$();x_$=new B1;x_$.get("/",($)=>{let Z={version:f_$.version,theme:eM1(),...QD().logo&&{logo:QD().logo},...NK()&&{internalUrl:Zq1()},...c0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!c0().firecrawlApiKey,auth:mM$(),posthog:F86(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!NK()&&c0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});y_$=x_$});function cg($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function x81($){return(cg($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function u_$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(cg($))}&sz=${Z}`}function h_$($,Z){let X=$.trim();if(X.length<=Z)return X;let Q=X.slice(0,Z-1),Y=Q.lastIndexOf(" ");return`${(Y>Z*0.6?Q.slice(0,Y):Q).trimEnd()}\u2026`}function c_$($){let{brand:Z,domain:X,score:Q,verdict:Y}=$,G=typeof Q==="number"?`${Z} commerce report \u2014 ${Math.round(Q)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,J=`See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,W=Y?.trim()?h_$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):h_$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as l0}from"zod";var uC,U86,w86,O86,B86,l_$;var d_$=B(()=>{uC=l0.enum(["good","bad","neutral"]),U86=l0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},l0.object({kind:l0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:l0.coerce.string().optional(),tone:uC.optional(),muted:l0.boolean().optional(),delta:l0.coerce.string().optional(),deltaDir:l0.enum(["up","down","neutral"]).optional(),points:l0.array(l0.coerce.number()).optional(),label:l0.coerce.string().optional()}).transform(($)=>{if($.kind==="badge"&&$.label==null)$.label=$.value??"";if($.kind==="score"){let Z=Number($.value);if(Number.isNaN(Z))return{...$,kind:"text"}}return $})),w86=l0.preprocess(($)=>{let Z=$;if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&Array.isArray(Z.cells))Z=Z.cells;if(Array.isArray(Z)&&Z.length===1&&Array.isArray(Z[0]))Z=Z[0];if(Array.isArray(Z))return Z;if(Z&&typeof Z==="object")return Object.values(Z);return Z},l0.array(U86)),O86={key:l0.coerce.string(),title:l0.coerce.string(),eyebrow:l0.coerce.string().optional(),headline:l0.coerce.string(),annotation:l0.coerce.string().optional(),methodology:l0.coerce.string().optional(),sources:l0.array(l0.object({name:l0.coerce.string(),logoUrl:l0.coerce.string()})).optional()},B86=l0.discriminatedUnion("template",[l0.object({template:l0.literal("cover"),score:l0.object({value:l0.coerce.number(),max:l0.coerce.number().optional(),grade:l0.coerce.string().optional(),label:l0.coerce.string().optional()}).optional(),brandImage:l0.coerce.string().optional(),screenshot:l0.coerce.string().optional(),mobileScreenshot:l0.coerce.string().optional()}),l0.object({template:l0.literal("cta"),ctaUrl:l0.coerce.string().optional(),ctaLabel:l0.coerce.string().optional(),bullets:l0.array(l0.coerce.string()).optional()}),l0.object({template:l0.literal("series"),points:l0.array(l0.coerce.number()).min(2),xLabels:l0.array(l0.coerce.string()).min(1),unit:l0.coerce.string().optional(),callout:l0.object({index:l0.coerce.number(),value:l0.coerce.string(),tone:uC.optional()})}),l0.object({template:l0.literal("threshold"),value:l0.coerce.string().default(""),metricLabel:l0.coerce.string().optional(),ratio:l0.coerce.number(),thresholdRatio:l0.coerce.number().optional(),thresholdLabel:l0.coerce.string().default(""),tone:uC.optional()}),l0.object({template:l0.literal("stats"),stats:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),tone:uC.optional()})).min(1)}),l0.object({template:l0.literal("bars"),items:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),ratio:l0.coerce.number(),tone:uC.optional()})).min(1)}),l0.object({template:l0.literal("gauges"),gauges:l0.array(l0.object({label:l0.coerce.string(),value:l0.coerce.string(),status:l0.enum(["good","warn","bad"]).catch("warn"),caption:l0.coerce.string().optional(),ratio:l0.coerce.number().optional()})).min(1)}),l0.object({template:l0.literal("checklist"),checks:l0.array(l0.object({label:l0.coerce.string(),status:l0.enum(["pass","fail","warn"]).catch("fail"),value:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("table"),columns:l0.array(l0.object({label:l0.coerce.string(),align:l0.enum(["left","right"]).optional()})).min(1),rows:l0.array(w86).min(1),highlightRow:l0.coerce.number().optional()}),l0.object({template:l0.literal("products"),products:l0.array(l0.object({name:l0.coerce.string(),price:l0.coerce.string().optional(),image:l0.coerce.string().optional(),url:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("list"),entries:l0.array(l0.object({label:l0.coerce.string(),severity:l0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:l0.coerce.number().optional()}),l0.object({template:l0.literal("keywords"),volumeLabel:l0.coerce.string().optional(),keywords:l0.array(l0.object({term:l0.coerce.string(),volume:l0.coerce.string(),position:l0.coerce.number().catch(0)})).min(1)}),l0.object({template:l0.literal("competitor"),metricLabel:l0.coerce.string().optional(),competitors:l0.array(l0.object({name:l0.coerce.string(),value:l0.coerce.string(),tone:uC.optional(),isYou:l0.boolean().optional()})).min(1)}),l0.object({template:l0.literal("scorecard"),rivalLabel:l0.coerce.string().optional(),dimensions:l0.array(l0.object({label:l0.coerce.string(),you:l0.coerce.string(),rival:l0.coerce.string().optional(),rivalName:l0.coerce.string().optional(),tone:uC.optional()})).min(1)})]),l_$=l0.object({...O86,template:B86})});function Wj0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=l_$.safeParse(Y.props);if(G.success)return G.data;let J=G.error.issues[0];return Z.push({section_type:Y.section_type,position:Y.position,reason:J?`${J.path.join(".")||"(root)"}: ${J.message}`:"contract violation"}),null}).filter((Y)=>Y!==null),Q=X.filter((Y)=>Y.template.template!=="cover"&&Y.template.template!=="cta").map((Y)=>({key:Y.key,title:Y.title}));return{deck:{meta:{...$.meta,scores:$.summary?.scores,scannedAt:$.scanned_at,toc:Q},slides:X},drops:Z}}var y81=B(()=>{d_$()});import{join as m_$}from"path";async function L86($){try{let Z=await fetch(`${jW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(D86)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=Wj0(X);if(!Q.slides.length)return null;let Y=Q.slides.find((W)=>W.template.template==="cover"),G=Y?.template,J=G&&G.template==="cover"?G:void 0;return{brand:Q.meta.brand?.trim()||x81($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function gY($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function E86($,Z){let X=cg($),Q=Z?.brand?.trim()||x81(X),Y=u_$(X,128),J=`${(c0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=c_$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),H=`${J}/og.png`,N=`${Q} commerce report by decocms`;return[`<title>${gY(W)}</title>`,`<meta name="description" content="${gY(K)}" />`,'<meta name="robots" content="noindex, follow" />','<meta property="og:type" content="website" />','<meta property="og:site_name" content="decocms" />',`<meta property="og:title" content="${gY(W)}" />`,`<meta property="og:description" content="${gY(K)}" />`,`<meta property="og:url" content="${gY(J)}" />`,`<meta property="og:image" content="${gY(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${gY(N)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${gY(W)}" />`,`<meta name="twitter:description" content="${gY(K)}" />`,`<meta name="twitter:image" content="${gY(H)}" />`,`<meta name="twitter:image:alt" content="${gY(N)}" />`,`<link rel="canonical" href="${gY(J)}" />`,`<link rel="icon" href="${gY(Y)}" sizes="any" />`].join(`
2730
2730
  `)}function j86($,Z){return $.replace(/<title>[\s\S]*?<\/title>\s*/i,"").replace(/<meta\s+name="(?:description|twitter:[^"]*)"[^>]*>\s*/gi,"").replace(/<meta\s+property="og:[^"]*"[^>]*>\s*/gi,"").replace(/<link\s+rel="icon"[^>]*>\s*/gi,"").replace("</head>",` ${Z}
2731
2731
  </head>`)}function i_$($){let Z=new B1;return Z.get("/:domain/og.png",async(X)=>{let Q=cg(X.req.param("domain")),Y=async()=>{let G=$?Bun.file(m_$($,"report-og-fallback.png")):null;if(!G||!await G.exists())return X.notFound();return X.body(new Uint8Array(await G.arrayBuffer()),200,{"Content-Type":"image/png","Cache-Control":"public, max-age=0, s-maxage=3600"})};try{let G=await fetch(`${jW({})}/api/v2/public/diagnostics/${encodeURIComponent(Q)}/og.png`,{signal:AbortSignal.timeout(z86)}),J=G.headers.get("content-type")??"";if(!G.ok||!J.startsWith("image/")||!G.body)return Y();return X.body(G.body,200,{"Content-Type":J,"Cache-Control":"public, max-age=0, s-maxage=604800"})}catch{return Y()}}),Z.get("/:domain",async(X)=>{let Q=X.req.param("domain"),Y=$?m_$($,"index.html"):null,G=Y?Bun.file(Y):null;if(!G||!await G.exists())return X.notFound();let J=await G.text();try{let W=await L86(cg(Q)),K=E86(Q,W);return X.html(j86(J,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return X.html(J)}}),Z}var D86=2500,z86=1e4;var n_$=B(()=>{v8();y81();VD();S$()});function Mo($,Z){return fetch(`${jW({})}${$}`,Z)}async function P86($,Z,X){let Q=new URLSearchParams;if(Z)Q.set("pw",Z);if(X)Q.set("lang",X);let Y=Q.toString()?`?${Q.toString()}`:"",G=await Mo(`/api/v2/public/diagnostics/${encodeURIComponent($)}${Y}`,{headers:{Accept:"application/json"}});if(G.status===404)return{status:"not_found",deck:null,scanned_at:null,drops:[]};if(!G.ok)throw Error(`report read HTTP ${G.status}`);let J=await G.json(),{deck:W,drops:K}=Wj0(J);return{status:W.slides.length?"ready":"empty",deck:W,scanned_at:J.scanned_at,drops:K}}var A86,g3,Kj0=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},p_$;var t_$=B(()=>{v8();MG();VD();y81();A86=new Set(["complete","errored","terminated","unknown"]),g3=new B1;g3.use("*",async($,Z)=>{let X=await E8.api.getSession({headers:$.req.raw.headers});$.set("reportUser",X?.user?.id?{email:X.user.email}:void 0),await Z(),$.header("Cache-Control","private, no-store"),$.header("Vary","Cookie");return});g3.use("/run",Kj0);g3.use("/status",Kj0);g3.use("/link-token/*",Kj0);g3.use("/suggest",Kj0);g3.get("/site/:domain",async($)=>{let Z=$.req.param("domain").trim();if(!Z)return $.json({error:"domain is required"},400);let X=$.get("reportUser"),Q=$.req.query("key")?.trim()||void 0,Y=$.req.query("lang")?.trim()||void 0;try{let G=await P86(Z,Q,Y);if($.header("Cache-Control","private, no-store"),X||!G.deck)return $.json(G);return $.json({...G,deck:{...G.deck,slides:G.deck.slides.slice(0,1)},truncated:G.status==="ready"})}catch{return $.json({error:"report read failed"},502)}});g3.post("/run",async($)=>{let Z=$.get("reportUser"),X;try{X=await $.req.json()}catch{return $.json({error:"invalid JSON"},400)}let Q=typeof X.domain==="string"?X.domain.trim():"";if(!Q)return $.json({error:"domain is required"},400);let Y=Z.email,G=typeof X.distinctId==="string"&&X.distinctId.trim()&&X.distinctId.length<=200?X.distinctId.trim():void 0;try{let J=await Mo("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${SD({})}`},body:JSON.stringify({url:Q,email:Y,distinct_id:G})});if(!J.ok)return $.json({error:`run HTTP ${J.status}`},502);let W=await J.json(),K=W.blocked?{state:"blocked"}:W.status==="fresh"?{state:"fresh"}:W.mode==="sync"?{state:"sync"}:{state:"running",id:W.id??null};return $.json(K)}catch{return $.json({error:"run failed"},502)}});g3.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let X=await Mo(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${SD({})}`}});if(!X.ok)return $.json({error:`status HTTP ${X.status}`},502);let Y=(await X.json()).status??"unknown",G={done:A86.has(Y),status:Y};return $.json(G)}catch{return $.json({error:"status failed"},502)}});g3.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let X=await Mo(`/api/v2/public/link-tokens/${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(X.status===404)return $.json(null);if(!X.ok)return $.json({error:`link token HTTP ${X.status}`},502);return $.json(await X.json())}catch{return $.json({error:"link token resolve failed"},502)}});g3.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let X=await Mo(`/api/v2/public/suggest?q=${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(!X.ok)return $.json({suggestions:[]});let Q=await X.json();return $.json({suggestions:Array.isArray(Q.suggestions)?Q.suggestions:[]})}catch{return $.json({suggestions:[]})}});p_$=g3});import{createHmac as T86,timingSafeEqual as R86}from"crypto";function r_$($,Z,X,Q=Date.now()){if(!Z||!X)return!1;let Y,G=[];for(let H of Z.split(",")){let N=H.indexOf("=");if(N<=0)continue;let F=H.slice(0,N).trim(),U=H.slice(N+1).trim();if(F==="t")Y=U;else if(F==="v1")G.push(U)}if(!Y||G.length===0)return!1;let J=Number(Y);if(!Number.isFinite(J)||Math.abs(Q/1000-J)>I86)return!1;let W=T86("sha256",X).update(`${Y}.${$}`).digest("hex"),K=Buffer.from(W,"hex");return G.some((H)=>{let N=Buffer.from(H,"hex");return K.length===N.length&&R86(K,N)})}function a_$($){let Z;try{Z=JSON.parse($)}catch{return null}let X=rG(Z),Q=rG(rG(X?.data)?.object);if(!X||typeof X.type!=="string"||!Q)return null;return{id:fK(X.id),type:X.type,created:typeof X.created==="number"?X.created:void 0,livemode:typeof X.livemode==="boolean"?X.livemode:void 0,data:{object:Q}}}function s_$($){switch($){case"active":case"trialing":return"active";case"past_due":return"past_due";default:return"canceled"}}function fK($){return typeof $==="string"?$:void 0}function rG($){return typeof $==="object"&&$!==null?$:void 0}function Hj0($){return typeof $==="number"?new Date($*1000):null}function u81($){return fK($)??fK(rG($)?.id)}function q86($){return u81($.subscription)??fK(rG(rG($.parent)?.subscription_details)?.subscription)}function M86($){let Z=Hj0($.current_period_end);if(Z)return Z;let X=rG($.items)?.data;if(!Array.isArray(X))return null;let Q=0;for(let Y of X){let G=rG(Y)?.current_period_end;if(typeof G==="number"&&G>Q)Q=G}return Q>0?new Date(Q*1000):null}function g81($,Z){let X=Hj0($.created);return!!X&&!!Z.lastStripeEventAt&&X<Z.lastStripeEventAt}function h81($,Z){let X=Hj0($.created);if(!X)return;return Z.lastStripeEventAt&&Z.lastStripeEventAt>X?void 0:X}async function k86($,Z){let X=Z.data.object;switch(Z.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":{let Q=fK(rG(X.metadata)?.orgId);if(!Q)return{handled:!1,reason:"no orgId"};if(fK(rG(X.metadata)?.kind)==="topup"){if(X.mode!=="payment")return{handled:!1,reason:"topup with wrong mode"};if(fK(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let J=fK(X.id);if(!J)return console.error("stripe webhook: topup session without id",{eventId:Z.id,organizationId:Q}),{handled:!1,reason:"topup session without id"};let W=Number(rG(X.metadata)?.creditCents);if(!Number.isInteger(W)||W<=0)return console.error("stripe webhook: paid topup with bad metadata \u2014 credit NOT applied",{eventId:Z.id,organizationId:Q,creditCents:rG(X.metadata)?.creditCents}),{handled:!1,reason:"bad topup metadata"};return{handled:!0,organizationId:Q,topUp:{creditCents:W,referenceId:`stripe-topup:${J}`}}}if(X.mode!=="subscription")return{handled:!1,reason:"not a subscription checkout"};if(fK(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let Y=await $.getBilling(Q);if(!Y)return{handled:!1,reason:"unknown org"};let G=u81(X.subscription);if(Y.stripeSubscriptionId&&G&&Y.stripeSubscriptionId!==G)return console.error("stripe webhook: refused checkout rebind",{organizationId:Q,eventId:Z.id}),{handled:!1,reason:"org already bound to another subscription",orphanSubscriptionId:G};if(g81(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Q,{stripeCustomerId:u81(X.customer),stripeSubscriptionId:G,status:"active",lastStripeEventAt:h81(Z,Y)}),{handled:!0,organizationId:Q}}case"customer.subscription.updated":case"customer.subscription.deleted":{let Q=fK(X.id);if(!Q)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(Q);if(!Y)return{handled:!1,reason:"unknown subscription"};let G=Z.type==="customer.subscription.deleted";if(!G&&g81(Z,Y))return{handled:!1,reason:"stale event"};let J=G?"canceled":s_$(X.status);return await $.updateStripeState(Y.organizationId,{status:J,currentPeriodEnd:M86(X),...G&&{stripeSubscriptionId:null},lastStripeEventAt:h81(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}case"invoice.paid":{let Q=q86(X);if(!Q)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(Q);if(!Y)return{handled:!1,reason:"unknown subscription"};if(g81(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Y.organizationId,{status:"active",currentPeriodEnd:Hj0(X.period_end),lastStripeEventAt:h81(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}default:return{handled:!1,reason:`unhandled event ${Z.type}`}}}function S86($,Z){if(!Z.handled||$.livemode===!1)return null;let X=$.data.object;if(Z.topUp)return{name:"credits_topup_succeeded",organizationId:Z.organizationId,properties:{credit_cents:Z.topUp.creditCents}};switch($.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":return{name:"subscription_started",organizationId:Z.organizationId,properties:{}};case"customer.subscription.deleted":return{name:"subscription_canceled",organizationId:Z.organizationId,properties:{}};case"customer.subscription.updated":return{name:"subscription_updated",organizationId:Z.organizationId,properties:{status:s_$(X.status),...typeof X.cancel_at_period_end==="boolean"?{cancel_at_period_end:X.cancel_at_period_end}:{}}};case"invoice.paid":if(X.billing_reason==="subscription_create")return null;return{name:"subscription_renewed",organizationId:Z.organizationId,properties:{}};default:return null}}function o_$($,Z){let X=S86($,Z);if(!X)return;AH({event:X.name,organizationId:X.organizationId,...$.id?{uuid:WV1(`stripe:${$.id}:${X.name}`)}:{},...$.created?{timestamp:new Date($.created*1000)}:{},properties:X.properties})}async function e_$($){let Z=new VW(c8().db),X=await k86(Z,$);if(!(X.handled&&X.topUp))o_$($,X);if(X.handled&&X.topUp)await eF$({organizationId:X.organizationId,amountCents:X.topUp.creditCents,referenceId:X.topUp.referenceId}),o_$($,X);if(!X.handled&&X.orphanSubscriptionId)try{await h1$(X.orphanSubscriptionId),console.error("stripe webhook: canceled orphan subscription",{subscriptionId:X.orphanSubscriptionId,eventId:$.id})}catch(Q){if(!(Q instanceof N3&&(Q.status===400||Q.status===404)))throw Q}return X}var I86=300;var $v$=B(()=>{JG();y4();Hn();Dr0()});var V86=1048576,c81;var Zv$=B(()=>{v8();hO();S$();$v$();c81=new B1;c81.post("/webhook",GZ({maxSize:V86,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=c0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let X=await $.req.text();if(!r_$(X,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let Y=a_$(X);if(!Y)return $.json({error:"invalid payload"},400);let G=await e_$(Y);return console.log("stripe webhook",{eventId:Y.id,type:Y.type,livemode:Y.livemode,...G}),$.json({received:!0})})});import{timingSafeEqual as C86}from"crypto";function v86($,Z,X){if(!Z?.startsWith("sha256="))return!1;let Q=new Bun.CryptoHasher("sha256",X).update($).digest("hex"),Y=Z.slice(7);if(Y.length!==Q.length)return!1;return C86(Buffer.from(Y),Buffer.from(Q))}var _86=5242880,l81;var Xv$=B(()=>{v8();hO();Gp();l81=new B1;l81.post("/webhook",GZ({maxSize:_86,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=process.env.GITHUB_WEBHOOK_SECRET;if(!Z)return $.json({error:"github webhook not configured"},503);let X=await $.req.text();if(!v86(X,$.req.header("x-hub-signature-256"),Z))return $.json({error:"invalid signature"},400);if($.req.header("x-github-event")!=="push")return $.json({ok:!0,ignored:"event"});let Q;try{Q=JSON.parse(X)}catch{return $.json({error:"invalid payload"},400)}let Y=Q.ref,G=Q.repository?.full_name;if(!Y||!G)return $.json({ok:!0,ignored:"shape"});let W=(await xn0())?.markTenantPoolsDirty(G,Y)??[];return $.json({ok:!0,pools:W})})});function Qv$($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var Yv$,b86,f86,Gv$;var Jv$=B(()=>{v8();IJ();Gy();Rv();Yv$=new B1,b86=["range","if-none-match","if-modified-since"],f86=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];Yv$.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),X=Z.organization?.id;if(!Z.auth?.user?.id){if(zg($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new Q$(401,{message:"Authentication required"})}if(!X)throw new Q$(401,{message:"Organization context required"});let Q=$.req.path.replace(/^.*\/files\//,"");if(!Q)throw new Q$(400,{message:"Missing file key"});let Y=await Tp(Q,Z);if(!Y)throw new Q$(503,{message:"Object storage not configured"});if(Y.startsWith("data:")&&RJ()){let K=Y.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new Q$(500,{message:"Invalid data URL from storage"});let[,H,N]=K,F=Buffer.from(N,"base64"),U=new Headers({"Content-Type":H,"Cache-Control":"private, max-age=86400"});return Qv$(U,H),new Response(F,{status:200,headers:U})}let G=new Headers;for(let K of b86){let H=$.req.header(K);if(H)G.set(K,H)}let J=await fetch(Y,{headers:G});if(J.status===403||J.status===404)throw new Q$(404,{message:"File not found"});if(!J.ok&&J.status!==304&&J.status!==416)throw console.error(`[files] upstream storage error ${J.status} for key:`,Q),new Q$(502,{message:"Upstream storage error"});let W=new Headers;for(let K of f86){let H=J.headers.get(K);if(H)W.set(K,H)}return W.set("Cache-Control","private, max-age=86400"),Qv$(W,W.get("content-type")??""),new Response(J.body,{status:J.status,headers:W})});Gv$=Yv$});var ko=C((cC)=>{var x86=cC&&cC.__createBinding||(Object.create?function($,Z,X,Q){if(Q===void 0)Q=X;var Y=Object.getOwnPropertyDescriptor(Z,X);if(!Y||("get"in Y?!Z.__esModule:Y.writable||Y.configurable))Y={enumerable:!0,get:function(){return Z[X]}};Object.defineProperty($,Q,Y)}:function($,Z,X,Q){if(Q===void 0)Q=X;$[Q]=Z[X]}),y86=cC&&cC.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))x86(Z,$,X)};Object.defineProperty(cC,"__esModule",{value:!0});y86(rQ(),cC)});var Hv$=C((Wv$)=>{Object.defineProperty(Wv$,"__esModule",{value:!0});Wv$.version=void 0;Wv$.version="3.4.0"});var Uv$=C((xK)=>{var g86=xK&&xK.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(xK,"__esModule",{value:!0});xK.NodeTransport=xK.VERSION=void 0;xK.nodeResolveHost=m86;var l6=ko(),h86=z0("net"),d81=z0("tls"),u86=z0("path"),Nv$=z0("fs"),c86=g86(z0("dns")),l86=Hv$();xK.VERSION=l86.version;var d86="nats.js";class Fv${socket;version;lang;yields=[];signal=(0,l6.deferred)();closedNotification=(0,l6.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=d86,this.version=xK.VERSION}async connect($,Z){this.tlsName=$.tlsName,this.options=Z;let{tls:X}=this.options,{handshakeFirst:Q}=X||{};try{if(Q===!0)this.socket=await this.tlsFirst($);else this.socket=await this.dial($);if(this.done)this.socket?.destroy();let Y=await this.peekInfo();(0,l6.checkOptions)(Y,Z);let{tls_required:G,tls_available:J}=Y,W=J===!0&&Z.tls!==null;if(!Q&&(G||W))this.socket=await this.startTLS();if(this.done)this.socket?.destroy();if(G&&this.socket.encrypted!==!0)throw l6.errors.InvalidArgumentError.format("tls","is not available on this server");return this.connected=!0,this.setupHandlers(),this.signal.resolve(),Promise.resolve()}catch(Y){let G=Y;if(!G)G=new l6.errors.ConnectionError("error connecting - node provided an undefined error");let{code:J}=G,W=J==="ECONNREFUSED"?new l6.errors.ConnectionError("connection refused",{cause:G}):G;throw this.socket?.destroy(),W}}dial($){let Z=(0,l6.deferred)(),X,Q=(0,h86.createConnection)($.port,$.hostname,()=>{Z.resolve(Q),Q.removeAllListeners()});return Q.on("error",(Y)=>{X=Y}),Q.on("close",()=>{Q.removeAllListeners(),Z.reject(X)}),Q.setNoDelay(!0),Z}get isClosed(){return this.done}close($){return this._closed($,!1)}peekInfo(){let $=(0,l6.deferred)(),Z;return this.socket.on("data",(X)=>{this.yields.push(X);let Q=l6.DataBuffer.concat(...this.yields),Y=(0,l6.extractProtocolMessage)(Q);if(Y!=="")try{let G=l6.INFO.exec(Y);if(!G)throw Error("unexpected response from server");let J=JSON.parse(G[1]);$.resolve(J)}catch(G){$.reject(G)}finally{this.socket.removeAllListeners()}}),this.socket.on("error",(X)=>{Z=X}),this.socket.on("close",()=>{this.socket.removeAllListeners(),$.reject(Z)}),$}loadFile($){if(!$)return Promise.resolve();let Z=(0,l6.deferred)();try{if($=(0,u86.resolve)($),!(0,Nv$.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,Nv$.readFile)($,(X,Q)=>{if(X)return Z.reject(X);Z.resolve(Q)})}catch(X){Z.reject(X)}return Z}async loadClientCerts(){let $={},{certFile:Z,cert:X,caFile:Q,ca:Y,keyFile:G,key:J}=this.options.tls;try{if(Z){let W=await this.loadFile(Z);if(W)$.cert=W}else if(X)$.cert=X;if(G){let W=await this.loadFile(G);if(W)$.key=W}else if(J)$.key=J;if(Q){let W=await this.loadFile(Q);if(W)$.ca=[W]}else if(Y)$.ca=Y;return Promise.resolve($)}catch(W){return Promise.reject(W)}}async tlsFirst($){let Z,X={servername:this.tlsName,rejectUnauthorized:!0};if(this.socket)X.socket=this.socket;if(typeof this.options.tls==="object")try{let Y=await this.loadClientCerts()||{};X=(0,l6.extend)(X,this.options.tls,Y)}catch(Y){return Promise.reject(new l6.errors.ConnectionError(Y.message,{cause:Y}))}let Q=(0,l6.deferred)();try{let Y=(0,d81.connect)($.port,$.hostname,X,()=>{Y.removeAllListeners(),Q.resolve(Y)});Y.on("error",(G)=>{Z=G}),Y.on("secureConnect",()=>{if(X.rejectUnauthorized===!1)return;if(!Y.authorized)throw Y.authorizationError}),Y.on("close",()=>{Q.reject(Z),Y.removeAllListeners()}),Y.setNoDelay(!0)}catch(Y){Q.reject(new l6.errors.ConnectionError(Y.message,{cause:Y}))}return Q}async startTLS(){let $,Z={socket:this.socket,servername:this.tlsName,rejectUnauthorized:!0};if(typeof this.options.tls==="object")try{let Q=await this.loadClientCerts()||{};Z=(0,l6.extend)(Z,this.options.tls,Q)}catch(Q){return Promise.reject(new l6.errors.ConnectionError(Q.message,{cause:Q}))}let X=(0,l6.deferred)();try{let Q=(0,d81.connect)(Z,()=>{Q.removeAllListeners(),X.resolve(Q)});Q.on("error",(Y)=>{$=Y}),Q.on("secureConnect",()=>{if(Z.rejectUnauthorized===!1)return;if(!Q.authorized)throw Q.authorizationError}),Q.on("close",()=>{X.reject($),Q.removeAllListeners()})}catch(Q){X.reject(new l6.errors.ConnectionError(Q.message,{cause:Q}))}return X}setupHandlers(){let $;this.socket.on("data",(Z)=>{return this.yields.push(Z),this.signal.resolve()}),this.socket.on("error",(Z)=>{$=Z}),this.socket.on("end",()=>{if(this.socket?.destroyed)return;this.socket?.write(new Uint8Array(0),()=>{this.socket?.end()})}),this.socket.on("close",()=>{this._closed($,!1)})}[Symbol.asyncIterator](){return this.iterate()}async*iterate(){while(!0){if(this.yields.length===0)await this.signal;let $=this.yields;this.yields=[];for(let Z=0;Z<$.length;Z++){if(this.options.debug)console.info(`> ${(0,l6.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,l6.deferred)()}}discard(){if(this.done=!0,this.socket)try{this.socket.removeAllListeners(),this.socket.destroy()}catch{}}disconnect(){this._closed(void 0,!0).then().catch()}isEncrypted(){return this.socket instanceof d81.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,l6.render)($)}`);let Z=(0,l6.deferred)();try{this.socket.write($,(X)=>{if(X){if(this.options.debug)console.error(`!!! ${(0,l6.render)($)}: ${X}`);return Z.reject(X)}return Z.resolve()})}catch(X){if(this.options.debug)console.error(`!!! ${(0,l6.render)($)}: ${X}`);Z.reject(X)}return Z}send($){this._send($).catch((X)=>{})}async _closed($,Z=!0){if(!this.connected)return;if(this.done){this.socket?.destroy();return}if(this.closeError=$,!$&&this.socket&&Z)try{await this._send(new TextEncoder().encode(""))}catch(X){if(this.options.debug)console.log("transport close terminated with an error",X)}try{if(this.socket)this.socket.removeAllListeners(),this.socket?.destroy(),this.socket=void 0}catch(X){console.log(X)}this.done=!0,this.closedNotification.resolve(this.closeError)}closed(){return this.closedNotification}}xK.NodeTransport=Fv$;function m86($){let Z=(0,l6.deferred)();return c86.default.lookup($,{all:!0},(X,Q)=>{if(X){Z.reject(X);return}let Y=[];for(let G of Q)Y.push(G.address);if(Y.length===0)Y.push($);Z.resolve(Y)}),Z}});var Lv$=C((Dv$)=>{Object.defineProperty(Dv$,"__esModule",{value:!0});Dv$.connect=i86;var wv$=Uv$(),Ov$=ko(),Bv$=ko();function i86($={}){if((0,Bv$.hasWsProtocol)($))return Promise.reject(Bv$.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,Ov$.setTransportFactory)({factory:()=>{return new wv$.NodeTransport},dnsResolveFn:wv$.nodeResolveHost}),Ov$.NatsConnectionImpl.connect($)}});var Ev$=C(($F)=>{var p86=$F&&$F.__createBinding||(Object.create?function($,Z,X,Q){if(Q===void 0)Q=X;var Y=Object.getOwnPropertyDescriptor(Z,X);if(!Y||("get"in Y?!Z.__esModule:Y.writable||Y.configurable))Y={enumerable:!0,get:function(){return Z[X]}};Object.defineProperty($,Q,Y)}:function($,Z,X,Q){if(Q===void 0)Q=X;$[Q]=Z[X]}),t86=$F&&$F.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))p86(Z,$,X)};Object.defineProperty($F,"__esModule",{value:!0});$F.connect=void 0;var o86=Lv$();Object.defineProperty($F,"connect",{enumerable:!0,get:function(){return o86.connect}});t86(ko(),$F)});function Av$($){let Z=$?.connectFn??e86,X=null,Q=null,Y=!1,G=!1,J=!1,W=[];function K(){return X!==null&&!X.isClosed()&&!X.isDraining()&&!J}function H(){console.log(`[NatsProvider] fireReady: ${W.length} callbacks`);for(let U of W)try{U()}catch{}}function N(U){(async()=>{for await(let w of U.status())if(w.type==="disconnect")console.log("[NatsProvider] Disconnected"),J=!0;else if(w.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),J=!1,Q=null,H()})().catch(()=>{})}async function F(U,w){let O=0;while(!G)try{X=await Z({servers:U,timeout:s86,reconnect:!0,maxReconnectAttempts:-1,...w?{authenticator:w}:{}}),console.log(`[NatsProvider] Connected to ${X.getServer()} after ${O} attempt(s)`),Q=null,J=!1,N(X),H();return}catch{O++;let D=WX(a86,r86,O-1,2,0.5);await y$(D)}}return{init(U,w){if(Y)return;Y=!0,G=!1;let O=w?.creds?jv$.credsAuthenticator(new TextEncoder().encode(w.creds)):void 0;F(U,O).catch(()=>{})},isConnected(){return K()},getConnection(){return K()?X:null},getJetStream(){if(!K())return null;if(!Q)Q=Pv$.jetstream(X);return Q},onReady(U){if(W.push(U),K())try{U()}catch{}},async drain(){if(G=!0,Y=!1,Q=null,J=!1,X){let U=X;X=null,await U.drain().catch(()=>{})}}}}function e86($){return zv$.connect($)}var jv$,zv$,Pv$,r86=100,a86=3000,s86=3000;var Tv$=B(()=>{D6();jv$=S(wh(),1),zv$=S(Ev$(),1),Pv$=S(JB(),1)});function m81($,Z){return`${$}.${Z}`}class i81{cache;constructor($){this.cache=Dg({ttlMs:$?.ttlMs??$46,maxSize:$?.maxSize??Z46})}async get($,Z){return this.cache.get(m81($,Z))??null}async set($,Z,X){this.cache.set(m81($,Z),X)}async invalidate($,Z){this.cache.delete(m81($,Z))}teardown(){this.cache.clear()}}var $46=600000,Z46=5000;var Rv$=()=>{};function Nj0($,Z){return`${$}:${Z}`}function n81($){let Z=Dg({ttlMs:$?.ttlMs??X46,maxSize:$?.maxSize??Q46}),X=$?.getConnection,Q=crypto.randomUUID(),Y=new TextEncoder,G=new TextDecoder,J=null;function W(K,H){let N=X?.();if(!N)return;try{N.publish(Iv$,Y.encode(JSON.stringify({organizationId:K,keyId:H,originId:Q})))}catch(F){console.warn("[ProviderKeyCache] Publish failed (non-critical):",F)}}return{get(K,H){return Z.get(Nj0(K,H))},set(K,H,N){Z.set(Nj0(K,H),N)},invalidate(K,H){Z.delete(Nj0(K,H)),W(K,H)},start(){if(J)return;let K=X?.();if(!K)return;J=K.subscribe(Iv$),(async()=>{for await(let H of J)try{let N=JSON.parse(G.decode(H.data));if(N.originId===Q)continue;Z.delete(Nj0(N.organizationId,N.keyId))}catch{}})().catch(console.error)},teardown(){J?.unsubscribe(),J=null,Z.clear()}}}var Iv$="studio.ai-provider-keys.invalidate",X46=30000,Q46=5000;var qv$=()=>{};class p81{options;subscriptions=[];onCancel=null;encoder=new TextEncoder;originId=crypto.randomUUID();seenMessageIds=new Set;constructor($){this.options=$}async start($){if($)this.onCancel=$;if(this.subscriptions.length>0)return;if(!this.onCancel)return;let Z=this.options.getConnection();if(!Z)return;let X=new TextDecoder;this.subscriptions=Mv$.map((Q)=>Z.subscribe(Q));for(let Q of this.subscriptions)(async()=>{for await(let Y of Q)try{let G=JSON.parse(X.decode(Y.data));if(G.originId===this.originId)continue;if(G.messageId&&this.hasSeen(G.messageId))continue;this.onCancel?.(G.taskId)}catch{}})().catch(console.error)}broadcast($){if(/[.*>\s]/.test($)){console.warn("[NatsCancelBroadcast] Invalid threadId, skipping broadcast");return}this.onCancel?.($);try{let Z=this.options.getConnection();if(!Z)return;let X=this.encoder.encode(JSON.stringify({taskId:$,originId:this.originId,messageId:crypto.randomUUID()}));for(let Q of Mv$)Z.publish(Q,X)}catch(Z){console.warn("[NatsCancelBroadcast] Publish failed (non-critical):",Z)}}publishControlFrame($,Z){}async stop(){for(let $ of this.subscriptions)$.unsubscribe();this.subscriptions=[],this.seenMessageIds.clear(),this.onCancel=null}hasSeen($){if(this.seenMessageIds.has($))return!0;if(this.seenMessageIds.add($),this.seenMessageIds.size>1000){let Z=this.seenMessageIds.values().next().value;if(Z)this.seenMessageIds.delete(Z)}return!1}}var Mv$;var kv$=B(()=>{Mv$=["studio.decopilot.cancel","mesh.decopilot.cancel"]});var Sv$=($)=>{let Z;return()=>Z??=$()},t81,o81;var Vv$=B(()=>{N5();t81=Sv$(()=>W8.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),o81=Sv$(()=>W8.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function N46(){return{name:qN,subjects:[`${EO0}.>`],storage:h3.StorageType.File,max_age:J46,max_bytes:K46,max_msgs_per_subject:H46,discard:h3.DiscardPolicy.Old,retention:h3.RetentionPolicy.Limits,duplicate_window:W46,num_replicas:1}}class vv${chunks=0;encodeMs=0;maxMs=0;bytes=0;windowStart=performance.now();constructor(){setInterval(()=>this.flush(),1e4).unref?.()}record($,Z){if(this.chunks++,this.encodeMs+=$,$>this.maxMs)this.maxMs=$;this.bytes+=Z}flush(){let $=performance.now(),Z=$-this.windowStart;if(this.chunks>0&&Z>0)console.warn(JSON.stringify({msg:"stream-encode-trace",windowMs:Math.round(Z),chunks:this.chunks,encodeMs:Math.round(this.encodeMs),pctOfLoop:+(this.encodeMs/Z*100).toFixed(1),maxChunkMs:+this.maxMs.toFixed(2),mbEncoded:+(this.bytes/1048576).toFixed(2)}));this.chunks=0,this.encodeMs=0,this.maxMs=0,this.bytes=0,this.windowStart=$}}function Cv$($){let Z=_v$.headers();for(let[X,Q]of Object.entries($))Z.set(X,Q);return Z}function O46($,Z){let X=0;return{publish(Q,Y,G,J){Q.publish(Y,G,J?{headers:J}:void 0).catch((W)=>{if(X++,G46().add(1,{"org.id":Z??"unknown"}),X===1||X%100===0)console.warn(`[Decopilot] JetStream publish failed for thread ${$} (${X} total):`,W)})},get errorCount(){return X}}}function B46($){if(!($ instanceof Error))return!1;if($.name==="TimeoutError")return!0;return/timeout|no responders|503/i.test($.message)}class r81{options;js=null;jsm=null;constructor($){this.options=$}async init(){let $=this.options.getConnection();if(!$){console.log("[Decopilot] StreamBuffer.init skipped: NATS not connected yet");return}let Z=N46(),X=await xZ(async()=>{let Q=this.options.getJetStreamManager?await this.options.getJetStreamManager():await h3.jetstreamManager($);try{await Q.streams.info(qN),await Q.streams.update(qN,Z)}catch(Y){if(Y instanceof Error&&Y.message.includes("stream not found"))await Q.streams.add(Z);else if(Y instanceof Error&&/can ?not change.*storage|storage type/i.test(Y.message))await Q.streams.delete(qN),await Q.streams.add(Z);else throw Y}return Q},{maxAttempts:5,minTimeout:250,maxTimeout:4000,jitter:0.5,isRetriable:B46});this.js=this.options.getJetStream(),this.jsm=X,console.log(`[Decopilot] StreamBuffer.init ${this.js?"ready":"degraded (js=null)"}`)}pump($,Z,X,Q){let Y=this.js;if(!Y)return console.warn(`[Decopilot] pump: JetStream client unavailable for thread ${Z}; chunks NOT published to NATS`),Promise.resolve();let G=O46(Z,Q),J=!1,W=()=>{if(J)return;J=!0;let H=CH$(Z);Y.publish(H.subject,H.data).catch(()=>{})};X.addEventListener("abort",W,{once:!0});let K=(H)=>{let N=performance.now(),F=Et0(H,{runId:Z}),U=performance.now()-N;if(t81().record(U),o81().add(1,{"org.id":Q??"unknown"}),w46?.record(U,F.reduce((w,O)=>w+O.data.length,0)),F.length===0){console.warn(`[Decopilot] dropping oversized stream chunk for thread ${Z}`);return}for(let w of F)G.publish(Y,w.subject,w.data,w.headers?Cv$(w.headers):void 0)};return(async()=>{let H=$.getReader(),N=0,F=0,U;try{while(!0){let{done:w,value:O}=await H.read();if(w)break;if(K(O),F++,++N>=64)N=0,await new Promise((D)=>setImmediate(D))}}catch(w){U=w,console.warn(`[Decopilot] stream pump error for thread ${Z}:`,w?.message??w)}finally{if(H.releaseLock(),W(),U46)console.warn(JSON.stringify({msg:"decopilot-stream-diag",event:"pump-done",taskId:Z,publishedChunks:F,publishErrors:G.errorCount}))}if(U!==void 0)throw U})()}async publishRawChunk($,Z,X){let Q=this.js;if(!Q)return!1;let Y=performance.now(),G=Et0(Z,{runId:$,dedup:X});if(t81().record(performance.now()-Y),o81().add(1),G.length===0)return console.warn(`[Decopilot] dropping oversized raw chunk for thread ${$} (> MAX_CHUNKED_BYTES)`),!0;for(let J of G)await Q.publish(J.subject,J.data,{...J.headers?{headers:Cv$(J.headers)}:{},...J.msgId?{msgID:J.msgId}:{}});return!0}async publishDone($,Z,X){let Q=this.js;if(!Q)return!1;let Y=VH$({runId:$,fenceToken:Z,finalSeq:X});return await Q.publish(Y.subject,Y.data,{msgID:Y.msgId}),!0}async createTailStream($,Z,X){let Q=this.js;if(!Q)return console.warn(`[Decopilot] createTailStream: JetStream client unavailable for thread ${$}; no live tail`),null;let Y=X?.deliverPolicy==="new"?h3.DeliverPolicy.New:h3.DeliverPolicy.All,G=X?.closeOnDone??!1,J=NO($),W;try{W=await(await Q.consumers.get(qN,{filter_subjects:J,deliver_policy:Y})).consume()}catch(D){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",D?.message??D),null}let N=TO0({messages:async function*(){try{for await(let D of W)yield{subject:D.subject,data:D.data,headers:D.headers}}finally{W.stop()}}(),onCancel:()=>W.stop()}).pipeThrough(jO0()).pipeThrough(zO0()).getReader(),F=!1,U=()=>{if(F)return;F=!0;try{N.releaseLock()}catch{}},w=!1,O=()=>{if(w)return;w=!0,W.stop(),N.cancel().catch(()=>{}),U()};return Z?.addEventListener("abort",O,{once:!0}),new ReadableStream({async pull(D){for(;;){let{done:L,value:E}=await N.read();if(L){O(),D.close();return}let j=E;if(j.kind==="done"){if(G){O(),D.close();return}continue}D.enqueue(j.chunk);return}},cancel(){O()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge(qN,{filter:NO($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var h3,_v$,Y46=($)=>{let Z;return()=>Z??=$()},G46,J46=86400000000000,W46=120000000000,K46=4294967296,H46=500000,F46,U46,w46;var bv$=B(()=>{D6();jt0();RO0();PO0();N5();Vv$();h3=S(JB(),1),_v$=S(wh(),1),G46=Y46(()=>W8.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"}));F46=process.env.STREAM_ENCODE_TRACE==="1",U46=process.env.DECOPILOT_STREAM_TRACE==="1";w46=F46?new vv$:null});function Fj0($,Z,X,Q){if(!Q)return!1;return $.emit(Z,JW(X,Q.status,{title:Q.title??void 0,virtualMcpId:Q.virtual_mcp_id??void 0,createdBy:Q.created_by??void 0,triggerId:Q.trigger_id??null,branch:Q.branch??null,harnessId:Q.harness_id??void 0,createdAt:Q.created_at,updatedAt:Q.updated_at})),!0}var fv$=B(()=>{B8()});class a81{storage;options;timer=null;constructor($,Z={}){this.storage=$;this.options=Z}start(){if(this.timer)return;let $=this.options.intervalMs??300000;this.timer=setInterval(()=>{this.runOnce()},$)}async runOnce(){let $=this.options.staleAfterMs??3600000;try{let Z=await this.storage.sweepAbandoned($);if(Z>0)console.log(`[async-research-sweeper] marked ${Z} stale jobs as abandoned`);return Z}catch(Z){return console.error("[async-research-sweeper] sweep failed",Z),0}}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}class s81{taskBoard;contextFactory;options;timer=null;running=!1;cursor=null;constructor($,Z,X={}){this.taskBoard=$;this.contextFactory=Z;this.options=X}start(){if(this.timer)return;let $=this.options.intervalMs??D46;this.timer=setInterval(()=>{this.runOnce()},$),this.timer.unref()}async runOnce(){if(this.running)return 0;this.running=!0;let $=0;try{let Z=this.options.batchSize??E46,X=this.options.itemIntervalMs??L46,Q=await this.taskBoard.listItemsPendingReview(Z,this.cursor,new Date(Date.now()-X)),Y=Q.at(-1);this.cursor=Q.length===Z&&Y?{updatedAt:Y.updatedAt,id:Y.id}:null;for(let{id:G,organizationId:J}of Q)try{if(await this.reconcileItem(G,J))$++}catch(W){console.error(`[task-board-review-sweeper] ${G} failed`,W)}await this.reapNeverStartedThreads(Z),$+=await this.dispatchDueRetries(Z),await this.reactToUnhandledFailures(Z)}catch(Z){console.error("[task-board-review-sweeper] sweep failed",Z)}finally{this.running=!1}return $}async reapNeverStartedThreads($){try{let Z=await this.taskBoard.failNeverStartedLinkedThreads($,new Date(Date.now()-CW$),$o0);for(let X of Z)console.warn(`[task-board-review-sweeper] failed never-started thread ${X.threadId} on ${X.itemId}`)}catch(Z){console.error("[task-board-review-sweeper] reaping failed",Z)}}async reactToUnhandledFailures($){let Z=await this.taskBoard.listItemsStuckAfterFailure($,new Date(Date.now()-z46));for(let{id:X,organizationId:Q,threadId:Y}of Z)try{console.warn(`[task-board-review-sweeper] reacting to an unhandled failure on ${X}`),await np0(this.taskBoard,Y,Q)}catch(G){console.error(`[task-board-review-sweeper] unhandled-failure reaction for ${X} failed`,G)}}async dispatchDueRetries($){let Z=0,X=await this.taskBoard.listItemsDueForRetry($,new Date);for(let{id:Q,organizationId:Y,attempts:G}of X)try{if(!await this.taskBoard.claimDueRetry(Q,Y,new Date))continue;let J=await this.taskBoard.getById(Q,Y);if(!J||J.status!=="in_progress"||J.assigneeId!==t4)continue;let W=await this.contextFactory(Y,J.assignedBy??J.createdBy);if(!W)continue;await MN(W,J,{runClass:"retry"}),Z++,console.warn(`[task-board-review-sweeper] re-dispatched ${Q} after a failure (attempt ${G})`)}catch(J){console.error(`[task-board-review-sweeper] retry dispatch for ${Q} failed`,J),await this.taskBoard.scheduleRunRetry(Q,Y,G,new Date(Date.now()+j46)).catch((W)=>console.error(`[task-board-review-sweeper] re-arming ${Q} failed`,W))}return Z}async reconcileItem($,Z){let X=await this.taskBoard.getById($,Z);if(!X)return!1;if(X.status!=="in_review"||X.assigneeId!==t4)return!1;await this.taskBoard.markSwept($,Z);let Q=await this.taskBoard.listPrs($,Z);if(Q.length===0)return!1;let Y=await this.contextFactory(Z,X.assignedBy??X.createdBy);if(!Y)return!1;let G=await Promise.all(Q.map(async(J)=>({...J,...await at0(Y,Z,J)})));if(G.every((J)=>J.state===null))console.warn(`[task-board-review-sweeper] ${$}: no live PR state from GitHub (${G.length} PR(s)) \u2014 proceeding on unknown`);if(!rt0(G))return!1;return await VO0(Y,X),!0}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}var D46=60000,L46=300000,E46=50,j46=60000,z46=120000;var xv$=B(()=>{eZ();dt0();FO();kZ();Zo0();Dy()});import{readdir as P46,rm as Uj0}from"fs/promises";import{join as wj0}from"path";async function Oj0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-A46),Z.setUTCHours(0,0,0,0);let X=0;try{let Q=await lC($);for(let Y of Q)if(/^\d{4}$/.test(Y))X+=await yv$($,Y,Z);else if(!Y.startsWith(".")){let G=wj0($,Y),J=await lC(G);for(let K of J){if(!/^\d{4}$/.test(K))continue;X+=await yv$(G,K,Z)}if((await lC(G)).length===0)await Uj0(G,{recursive:!0,force:!0})}}catch(Q){console.warn("monitoring retention cleanup failed:",Q)}return X}async function yv$($,Z,X){let Q=0,Y=wj0($,Z),G=await lC(Y);for(let W of G){if(!/^\d{2}$/.test(W))continue;let K=wj0(Y,W),H=await lC(K);for(let F of H){if(!/^\d{2}$/.test(F))continue;let U=new Date(`${Z}-${W}-${F}T00:00:00Z`);if(isNaN(U.getTime()))continue;if(U<X){let w=wj0(K,F);await Uj0(w,{recursive:!0,force:!0}),Q++}}if((await lC(K)).length===0)await Uj0(K,{recursive:!0,force:!0})}if((await lC(Y)).length===0)await Uj0(Y,{recursive:!0,force:!0});return Q}async function lC($){try{return(await P46($)).filter((X)=>!X.startsWith("."))}catch{return[]}}var A46=30;var e81=()=>{};import{DBOS as $41,SchedulerMode as T46}from"@dbos-inc/dbos-sdk";async function I46(){let $=[ZJ(),dC(),gK()],Z=0;for(let X of $)try{Z+=await Oj0(X)}catch(Q){console.error("[monitoring-retention] cleanup failed:",Q)}return console.log(`[monitoring-retention] deleted ${Z} day-dir(s) across ${$.length} signal dir(s)`),{deleted:Z,dirs:$.length}}async function q46($,Z){await $41.runStep(()=>I46(),{name:"monitoringRetention"})}function hv$(){if(gv$)return;gv$=!0;let $=$41.registerWorkflow(q46,{name:"monitoringRetentionWorkflow"});$41.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:R46,mode:T46.ExactlyOncePerIntervalWhenActive})}var R46="23 4 * * *",gv$=!1;var uv$=B(()=>{nQ();e81()});function cv$($){return async(Z,X)=>{let Q=await $.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["member.role","organization.id as orgId","organization.slug as orgSlug","organization.name as orgName"]).where("member.userId","=",X).where("member.organizationId","=",Z).executeTakeFirst();if(!Q)return console.warn(`[automationContextFactory] User ${X} not found in org ${Z} \u2014 returning null`),null;let Y=await Pw.create();Y.auth.user={id:X,role:Q.role},Y.organization={id:Q.orgId,slug:Q.orgSlug,name:Q.orgName};let G=await xc0($.db,Z,Q.role);return Y.boundAuth=fc0({auth:Y.authInstance,headers:new Headers,role:Q.role,permissions:G,userId:X}),Y.access=new XL(X,void 0,Y.boundAuth,Q.role,"self"),E50(Y,{id:Q.orgId,slug:Q.orgSlug}),Y}}var lv$=B(()=>{QL();bi()});function M46(){return{services:[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}],migrationsStatus:"pending",serverUrl:null,logs:[]}}function S46(){for(let $ of k46)$()}function dv$($){let Z=[...Z41.logs,$];Z41={...Z41,logs:Z.length>500?Z.slice(-500):Z},S46()}function X41(){return V46}var Z41,k46,V46=!1;var Q41=B(()=>{Z41=M46(),k46=new Set});import{EventEmitter as C46}from"events";var Y41;var mv$=B(()=>{Q41();Y41=new C46;Y41.on("request",($)=>{dv$($)})});function iv$(){return async($,Z)=>{let X=Date.now(),Q=$.req.method,Y=$.req.path;if(Y==="/api/auth/get-session"||Y.includes("favicon")){await Z();return}let G="",J=!1;if(Y.startsWith("/mcp")&&Q==="POST"){J=!0;try{if($.req.header("Content-Type")?.includes("application/json")){let U=await $.req.raw.clone().json();if(U.method==="tools/call"&&U.params?.name){let w=lg(U.params.name),O=U.params.arguments||{},D=Object.keys(O).map((E)=>lg(E)),L=D.length>0?D.slice(0,3).join(",")+(D.length>3?"\u2026":""):"";G=`${a6.tool}${w}${a6.dim}(${L})${a6.reset}`}else if(U.method)G=`${a6.dim}${lg(U.method)}${a6.reset}`}}catch{}}let W=lg(Y);if(Y.startsWith("/mcp/conn_")){let N=Y.split("/")[2]??"";W=`/mcp/${a6.mcp}${lg(N.slice(0,12))}\u2026${a6.reset}`}else if(Y==="/mcp")W=`${a6.mcp}/mcp${a6.reset}`;else if(Y==="/mcp/registry")W=`${a6.mcp}/mcp/registry${a6.reset}`;let K=v46(Q),H=J?"\u25C0":"\u2190";if(!X41())console.log(`${a6.dim}${H}${a6.reset} ${K}${Q}${a6.reset} ${W}${G?` ${G}`:""}`);try{await Z()}finally{let N=Date.now()-X,F=$.res.status,U=_46(F),w=N<1000?`${N}ms`:`${(N/1000).toFixed(1)}s`,O=J?"\u25B6":"\u2192";if(!X41())console.log(`${a6.dim}${O}${a6.reset} ${K}${Q}${a6.reset} ${W}${G?` ${G}`:""} ${U}${F}${a6.reset} ${a6.duration}${w}${a6.reset}`);Y41.emit("request",{method:Q,path:lg(Y),status:F,duration:N,timestamp:new Date})}}}var a6,_46=($)=>{if($>=500)return a6.serverError;if($>=400)return a6.clientError;if($>=300)return a6.redirect;return a6.ok},v46=($)=>{return a6[$]||a6.reset},lg=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var nv$=B(()=>{Q41();mv$();a6={reset:"\x1B[0m",dim:"\x1B[2m",bold:"\x1B[1m",GET:"\x1B[36m",POST:"\x1B[33m",PUT:"\x1B[35m",DELETE:"\x1B[31m",ok:"\x1B[32m",redirect:"\x1B[36m",clientError:"\x1B[33m",serverError:"\x1B[31m",mcp:"\x1B[35m",tool:"\x1B[96m",duration:"\x1B[90m"}});import{createHmac as rv$}from"crypto";import{mkdir as b46,readdir as f46,rm as pv$,stat as av$}from"fs/promises";import{join as J41,relative as x46}from"path";import{z as L$}from"zod";function ev$($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return J41(y46,Z)}function $b$($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function G41($,Z){let X=ev$($),Q=$b$(Z);return J41(X,Q)}function g46($,Z,X,Q){let Y=c0().encryptionKey||"dev-secret",G=`${$}:${Z}:${X}:${Q}`;return rv$("sha256",Y).update(G).digest("hex")}function ov$($,Z,X,Q,Y){let G=Math.floor(Date.now()/1000)+Q,J=g46(Z,X,G,Y),W=new URL(`/api/dev-assets/${Z}/${$b$(X)}`,$);return W.searchParams.set("expires",G.toString()),W.searchParams.set("signature",J),W.searchParams.set("method",Y),W.toString()}function Zb$($,Z,X){let Q=`${$}:${Z.getTime()}:${X}`;return`"${rv$("md5","etag").update(Q).digest("hex")}"`}async function Xb$($,Z,X,Q,Y){try{let G=await f46($,{withFileTypes:!0});for(let J of G){let W=J41($,J.name),H=x46(Z,W).replace(/\\/g,"/");if(X&&!H.startsWith(X))continue;if(J.isDirectory())if(Q){let N=H+"/";if(!X||N.startsWith(X)){if(!(X?H.slice(X.length):H).includes("/"))Y.commonPrefixes.add(N)}}else await Xb$(W,Z,X,Q,Y);else if(J.isFile()){if(Q&&X){let N=H.slice(X.length);if(N.includes(Q)){let F=N.indexOf(Q),U=X+N.slice(0,F+1);Y.commonPrefixes.add(U);continue}}try{let N=await av$(W);Y.objects.push({key:H,size:N.size,lastModified:N.mtime.toISOString(),etag:Zb$(W,N.mtime,N.size)})}catch{}}}}catch{}}function Qb$($,Z){let Q=r($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:L$.object({prefix:L$.string().optional(),maxKeys:L$.number().optional().default(1000),continuationToken:L$.string().optional(),delimiter:L$.string().optional()}),outputSchema:L$.object({objects:L$.array(L$.object({key:L$.string(),size:L$.number(),lastModified:L$.string(),etag:L$.string()})),nextContinuationToken:L$.string().optional(),isTruncated:L$.boolean(),commonPrefixes:L$.array(L$.string()).optional()}),handler:async(Y)=>{let G=Y,J=G.prefix||"",W=G.maxKeys??1000,K=G.delimiter,H=G.continuationToken,N=ev$(Q);await b46(N,{recursive:!0});let F={objects:[],commonPrefixes:new Set};await Xb$(N,N,J,K,F),F.objects.sort((L,E)=>L.key.localeCompare(E.key));let U=0;if(H){if(U=F.objects.findIndex((L)=>L.key>H),U===-1)U=F.objects.length}let w=F.objects.slice(U,U+W),O=U+W<F.objects.length,D=O?w[w.length-1]?.key:void 0;return{objects:w,isTruncated:O,nextContinuationToken:D,commonPrefixes:Array.from(F.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:L$.object({key:L$.string()}),outputSchema:L$.object({contentType:L$.string().optional(),contentLength:L$.number(),lastModified:L$.string(),etag:L$.string(),metadata:L$.record(L$.string(),L$.string()).optional()}),handler:async(Y)=>{let G=Y,J=G41(Q,G.key),W=await av$(J);return{contentType:e11(G.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:Zb$(J,W.mtime,W.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:L$.object({key:L$.string(),expiresIn:L$.number().optional()}),outputSchema:L$.object({url:L$.string(),expiresIn:L$.number()}),handler:async(Y)=>{let G=Y,J=G.expiresIn??tv$;return{url:ov$(Z,Q,G.key,J,"GET"),expiresIn:J}}},{name:"PUT_PRESIGNED_URL",description:"Generate a presigned URL for uploading a file to local storage",inputSchema:L$.object({key:L$.string(),expiresIn:L$.number().optional(),contentType:L$.string().optional()}),outputSchema:L$.object({url:L$.string(),expiresIn:L$.number()}),handler:async(Y)=>{let G=Y,J=G.expiresIn??tv$;return{url:ov$(Z,Q,G.key,J,"PUT"),expiresIn:J}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:L$.object({key:L$.string()}),outputSchema:L$.object({success:L$.boolean(),key:L$.string()}),handler:async(Y)=>{let G=Y,J=G41(Q,G.key);try{return await pv$(J),{success:!0,key:G.key}}catch{return{success:!1,key:G.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:L$.object({keys:L$.array(L$.string()).max(1000)}),outputSchema:L$.object({deleted:L$.array(L$.string()),errors:L$.array(L$.object({key:L$.string(),message:L$.string()}))}),handler:async(Y)=>{let G=Y,J=[],W=[];return await Promise.all(G.keys.map(async(K)=>{let H=G41(Q,K);try{await pv$(H),J.push(K)}catch(N){W.push({key:K,message:N instanceof Error?N.message:"Unknown error"})}})),{deleted:J,errors:W}}}]}async function W41($,Z,X){let Q=Qb$(Z,X),Y=new DW({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:X5});for(let J of Q){let W="shape"in J.inputSchema?J.inputSchema.shape:L$.object({}).shape,K=J.outputSchema&&"shape"in J.outputSchema?J.outputSchema.shape:L$.object({}).shape;Y.registerTool(J.name,{description:J.description??"",inputSchema:W,outputSchema:K,annotations:J.annotations,_meta:J._meta},async(H)=>{try{let N=await J.handler(H);return{content:[{type:"text",text:JSON.stringify(N)}],structuredContent:N}}catch(N){return{content:[{type:"text",text:`Error: ${N.message}`}],isError:!0}}})}let G=new cX({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await Y.connect(G),cG(Y,G,$,"mcp:dev-assets")}async function Yb$($,Z,X,Q){let G=Qb$(X,Q).find((J)=>J.name===$);if(!G)return{content:[{type:"text",text:`Tool not found: ${$}`}],isError:!0};try{let J=await G.handler(Z);return{content:[{type:"text",text:JSON.stringify(J)}]}}catch(J){return{content:[{type:"text",text:J instanceof Error?J.message:String(J)}],isError:!0}}}var y46="./data/assets",tv$=3600,sv$,Gb$;var Jb$=B(()=>{S$();Py();v8();Ul();tV();MX();IE0();sv$=new B1;sv$.all("/",async($)=>{let Z=$.get("studioContext"),X=new URL($.req.url),Q=`${X.protocol}//${X.host}`;return W41($.req.raw,Z,Q)});Gb$=sv$});var Wb$={};H4(Wb$,{mountDevRoutes:()=>h46});function h46($,Z){$.all("/mcp/:connectionId{.*_dev-assets$}",Z,async(Q)=>{let Y=Q.get("studioContext"),G=new URL(Q.req.url),J=`${G.protocol}//${G.host}`;return W41(Q.req.raw,Y,J)}),$.all("/mcp/:connectionId{.*_dev-assets$}/call-tool/:toolName",Z,async(Q)=>{let Y=Q.get("studioContext"),G=new URL(Q.req.url),J=`${G.protocol}//${G.host}`,W=Q.req.param("toolName");if(!W)return Q.json({error:"Missing tool name"},400);let K=await Q.req.json(),H=await Yb$(W,K,Y,J);if(H.isError)return Q.json(H.content,500);return Q.json(H.content)}),$.use("/mcp/dev-assets",Z),$.route("/mcp/dev-assets",Gb$);let X=new B1;X.use("*",x3({mountPath:"/api/dev-assets"})),X.route("/",RE0({orgFromPath:!1})),$.route("/api/dev-assets",X)}var Kb$=B(()=>{v8();i11();IE0();Jb$()});import{sql as u46}from"kysely";import{randomUUID as Hb$}from"crypto";import{z as c46}from"zod";async function d46($){let Z=new Date().toISOString(),X=Hb$(),Q=x4.SELF($.organizationId),Y="registry.publish_request.created",G={requestId:$.request.id,requestedId:$.request.requested_id,title:$.request.title,status:$.request.status,createdAt:$.request.created_at,requester:{name:$.request.requester_name,email:$.request.requester_email}};await $.db.insertInto("events").values({id:X,organization_id:$.organizationId,type:"registry.publish_request.created",source:Q,specversion:"1.0",subject:$.request.id,time:Z,datacontenttype:"application/json",dataschema:null,data:JSON.stringify(G),cron:null,status:"pending",attempts:0,last_error:null,next_retry_at:null,created_at:Z,updated_at:Z}).execute();let J=await $.db.selectFrom("event_subscriptions").select(["id"]).where("organization_id","=",$.organizationId).where("enabled","=",1).where("event_type","=","registry.publish_request.created").where((W)=>W.or([W("publisher","is",null),W("publisher","=",Q)])).execute();if(J.length>0)await $.db.insertInto("event_deliveries").values(J.map((W)=>({id:Hb$(),event_id:X,subscription_id:W.id,status:"pending",attempts:0,last_error:null,delivered_at:null,next_retry_at:null,created_at:Z}))).execute();try{await u46`SELECT
2732
2732
  pg_notify('studio_events', ${X}),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "decocms",
3
- "version": "4.195.2",
3
+ "version": "4.196.0",
4
4
  "description": "Deco CMS — Self-hostable MCP Gateway for managing AI connections and tools",
5
5
  "author": "Deco team",
6
6
  "repository": {