decocms 4.249.2 → 4.250.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 (222) hide show
  1. package/dist/client/assets/{AlertCircle-DcBQRghL.js → AlertCircle-DbxaXbnR.js} +1 -1
  2. package/dist/client/assets/{AreaChart-B-1_OgVa.js → AreaChart-CvOn0KUH.js} +1 -1
  3. package/dist/client/assets/{ArrowLeft-vdHdiQtQ.js → ArrowLeft-CZI0J8jJ.js} +1 -1
  4. package/dist/client/assets/{ArrowUp-DGYDN6wG.js → ArrowUp-CHVLkQ2J.js} +1 -1
  5. package/dist/client/assets/{Check-3kYTlw8P.js → Check-gDfOB8Z4.js} +1 -1
  6. package/dist/client/assets/{CheckCircle-5zavCytz.js → CheckCircle-a-rNfbeV.js} +1 -1
  7. package/dist/client/assets/{ChevronDown-CfIGPsde.js → ChevronDown-CxlstkMG.js} +1 -1
  8. package/dist/client/assets/{ChevronRight-hcTK0cot.js → ChevronRight-M0R5ZaZT.js} +1 -1
  9. package/dist/client/assets/{ChevronSelectorVertical-BFHn1bVs.js → ChevronSelectorVertical-DzjDl3_3.js} +1 -1
  10. package/dist/client/assets/{ChevronUp-DiexHyx-.js → ChevronUp-D-umIXpJ.js} +1 -1
  11. package/dist/client/assets/{Copy01-DBRZ9_MV.js → Copy01-CEmQDIAa.js} +1 -1
  12. package/dist/client/assets/{CreditCard01-B8hAS-0w.js → CreditCard01-D9PC48bF.js} +1 -1
  13. package/dist/client/assets/{DotsVertical-DEAM8RTb.js → DotsVertical-DzcDLF1N.js} +1 -1
  14. package/dist/client/assets/{Download01-WDWMlolW.js → Download01-DQugNPx6.js} +1 -1
  15. package/dist/client/assets/{Eye-BM2Pz9yX.js → Eye-DxEhLFIs.js} +1 -1
  16. package/dist/client/assets/{FilterLines-C2PmuDFK.js → FilterLines-C7U5ZNgg.js} +1 -1
  17. package/dist/client/assets/{Globe01-CSBv9_3_.js → Globe01-CPgtoz6n.js} +1 -1
  18. package/dist/client/assets/{Globe04-3RSd5XLv.js → Globe04-Dblkt6ad.js} +1 -1
  19. package/dist/client/assets/{HardDrive-CfLwy_c9.js → HardDrive-DUw_bmD_.js} +1 -1
  20. package/dist/client/assets/{Key01-gCw69zAj.js → Key01-DOdbiS0T.js} +1 -1
  21. package/dist/client/assets/{LinkExternal01-C3ctfBEw.js → LinkExternal01-DyLNrCZW.js} +1 -1
  22. package/dist/client/assets/{LockUnlocked01-Bk8EGzzy.js → LockUnlocked01-DY5DE1e_.js} +1 -1
  23. package/dist/client/assets/{LogOut01-Ht56Jcn5.js → LogOut01-D_KYj0Rz.js} +1 -1
  24. package/dist/client/assets/{Monitor01-D65FSlVa.js → Monitor01-B320wLn0.js} +1 -1
  25. package/dist/client/assets/{Palette-BfT_QH9J.js → Palette-BOTr-NEL.js} +1 -1
  26. package/dist/client/assets/{Play-Cmf3cy24.js → Play-jds4l45E.js} +1 -1
  27. package/dist/client/assets/{Plus-NF2Bka5e.js → Plus-KoF1QbgC.js} +1 -1
  28. package/dist/client/assets/{SearchLg-xfm73f7V.js → SearchLg-BR12rece.js} +1 -1
  29. package/dist/client/assets/{SearchMd-LDC7ywWh.js → SearchMd-hw_IQwvk.js} +1 -1
  30. package/dist/client/assets/{Settings02-Bm6XKh_W.js → Settings02-D9qPQh8f.js} +1 -1
  31. package/dist/client/assets/{Share07-DPKrcrzu.js → Share07-DFgkVMeG.js} +1 -1
  32. package/dist/client/assets/{Shield01-D3gYK9iJ.js → Shield01-CU7nfuvV.js} +1 -1
  33. package/dist/client/assets/{Stars01-CmucfQ41.js → Stars01-CcQxe8A9.js} +1 -1
  34. package/dist/client/assets/{Stars02-BosbRCFd.js → Stars02-CBU_EWmh.js} +1 -1
  35. package/dist/client/assets/{Sun-Bj95hRFk.js → Sun-D4Vw4MVs.js} +1 -1
  36. package/dist/client/assets/{SwitchHorizontal01-wuQi7vJ-.js → SwitchHorizontal01-CuhwT5c2.js} +1 -1
  37. package/dist/client/assets/{Tool01-DiDKfDFt.js → Tool01-ID_GXzM4.js} +1 -1
  38. package/dist/client/assets/{Tool02-CRpLg8al.js → Tool02-DE2WtJ9-.js} +1 -1
  39. package/dist/client/assets/{Trash01-C-nvf55r.js → Trash01-CkiK-Wci.js} +1 -1
  40. package/dist/client/assets/{TrendUp01-CL4Q5p8R.js → TrendUp01-D5YHPmob.js} +1 -1
  41. package/dist/client/assets/{Upload01-CWSvCx-r.js → Upload01-bm0JAOTj.js} +1 -1
  42. package/dist/client/assets/{User01-CZl_lknw.js → User01-Bv78YrNL.js} +1 -1
  43. package/dist/client/assets/{UserSquare-C6acV8Lx.js → UserSquare-CGSaw3Qj.js} +1 -1
  44. package/dist/client/assets/{Users01-CL-OPESO.js → Users01-IoGo0_YK.js} +1 -1
  45. package/dist/client/assets/{Users03-CmpmFXrQ.js → Users03-CBcT-fGo.js} +1 -1
  46. package/dist/client/assets/{XCircle-CLObItea.js → XCircle-CRxRrDDn.js} +1 -1
  47. package/dist/client/assets/{XClose-HwIShSnX.js → XClose-2jGhgwq-.js} +1 -1
  48. package/dist/client/assets/{YAxis-DLiuzGap.js → YAxis-DPcdIqSR.js} +1 -1
  49. package/dist/client/assets/{Zap-CAhNquoa.js → Zap-fVfZ2j2Y.js} +1 -1
  50. package/dist/client/assets/{ZapSquare-Cfe9yQLw.js → ZapSquare-CrnNg3wA.js} +1 -1
  51. package/dist/client/assets/{access-gate-Bx4B1wrJ.js → access-gate-BOwOw2O9.js} +1 -1
  52. package/dist/client/assets/{agent-icon-CbLS6DVA.js → agent-icon-CUfyfPG2.js} +1 -1
  53. package/dist/client/assets/{agents-list-c12NEx4t.js → agents-list-BPzsdaUj.js} +1 -1
  54. package/dist/client/assets/{ai-providers-CnJU5stO.js → ai-providers-CCuQCOgH.js} +1 -1
  55. package/dist/client/assets/{alert-uKp9ocVv.js → alert-DrVPa_v7.js} +1 -1
  56. package/dist/client/assets/{alert-dialog-Ch9FQ3QX.js → alert-dialog-8vyV9lD3.js} +1 -1
  57. package/dist/client/assets/{api-keys-B9lBWUv5.js → api-keys-LeFBhgFQ.js} +1 -1
  58. package/dist/client/assets/{app-editor-r5LB5j5l.js → app-editor-BoZlU-Nu.js} +1 -1
  59. package/dist/client/assets/{auth-F-1ZCprX.js → auth-BII48x4l.js} +1 -1
  60. package/dist/client/assets/{auth-catchall-CmHrDcbG.js → auth-catchall-BsT5k-nk.js} +1 -1
  61. package/dist/client/assets/{auth-entry-B9gPpau2.js → auth-entry-BszX2ZU0.js} +1 -1
  62. package/dist/client/assets/{auth-split-layout-CbVOfCj2.js → auth-split-layout-Cujiah9t.js} +1 -1
  63. package/dist/client/assets/{authenticate-and-persist-oauth-Df7rJfzL.js → authenticate-and-persist-oauth-DPjkYUHb.js} +1 -1
  64. package/dist/client/assets/{automation-list-row-3z8B8Cr2.js → automation-list-row-DtzOBne2.js} +1 -1
  65. package/dist/client/assets/{automation-runs-R4ijWjGt.js → automation-runs-CfFAmaYQ.js} +1 -1
  66. package/dist/client/assets/{automations-DzRBl56C.js → automations-D2-BZKo1.js} +1 -1
  67. package/dist/client/assets/{avatar-DOOBb_Yp.js → avatar-DWdVHjY6.js} +1 -1
  68. package/dist/client/assets/{badge-BMH3S7Om.js → badge-DAuOXovL.js} +1 -1
  69. package/dist/client/assets/{block-document-1Tu1MhmU.js → block-document-p787xdl_.js} +1 -1
  70. package/dist/client/assets/{buckets-Q3lh0Dlb.js → buckets-ALsm3way.js} +1 -1
  71. package/dist/client/assets/{bulk-category-panel-BXiZuN0k.js → bulk-category-panel-D4u6JHMT.js} +1 -1
  72. package/dist/client/assets/{capability-load-error-DPIb4mlN.js → capability-load-error-BF-FWyvX.js} +1 -1
  73. package/dist/client/assets/{cards-wfR773Nk.js → cards-C2QNlZu0.js} +1 -1
  74. package/dist/client/assets/{category-editor-DjuWfdym.js → category-editor-5_Ol4EUD.js} +1 -1
  75. package/dist/client/assets/{chart-CC7zaEbQ.js → chart-BHn95fWb.js} +1 -1
  76. package/dist/client/assets/{chat-context-Cuz4HLvH.js → chat-context-Ce085nbU.js} +1 -1
  77. package/dist/client/assets/{checkbox-BhaPD4vN.js → checkbox-DEBSlP4n.js} +1 -1
  78. package/dist/client/assets/{choose-editor--yA2adtE.js → choose-editor-BdD9gubH.js} +1 -1
  79. package/dist/client/assets/{cli-auth-success-Cmz_jf9b.js → cli-auth-success-CyjngvSO.js} +1 -1
  80. package/dist/client/assets/{collection-detail-D5mgwOZZ.js → collection-detail-BiORpyya.js} +1 -1
  81. package/dist/client/assets/{collection-display-button-BjxNBmoU.js → collection-display-button-BWhK0DVh.js} +1 -1
  82. package/dist/client/assets/{collection-search-CnpC1s_X.js → collection-search-CDjyyZX5.js} +1 -1
  83. package/dist/client/assets/{collection-table-wrapper-BcKg9iNm.js → collection-table-wrapper-DNKkbVRV.js} +1 -1
  84. package/dist/client/assets/{collection-tabs-COhrs5HG.js → collection-tabs-CnEt62oU.js} +1 -1
  85. package/dist/client/assets/{command-DqvqntIt.js → command-B5kuTaV-.js} +1 -1
  86. package/dist/client/assets/{commerce-onboarding-DqonIe6W.js → commerce-onboarding-CHniZzEk.js} +1 -1
  87. package/dist/client/assets/{connect-Ca39KORC.js → connect-CEaR9ErO.js} +1 -1
  88. package/dist/client/assets/{connection-DfnmOfaN.js → connection-BS7fI8JY.js} +1 -1
  89. package/dist/client/assets/{connection-card-D9_8fsbH.js → connection-card-D0W98FDX.js} +1 -1
  90. package/dist/client/assets/{connection-detail-jWUVOTiJ.js → connection-detail-BZ-dI3Kr.js} +1 -1
  91. package/dist/client/assets/{connection-form-helpers-BZX1Wn7o.js → connection-form-helpers-C-QiJ86l.js} +1 -1
  92. package/dist/client/assets/{connections-BzVKHFq0.js → connections-qsta3eUA.js} +1 -1
  93. package/dist/client/assets/{decopilot-sse-pool-D3JT3JFV.js → decopilot-sse-pool-DwuYuAEU.js} +1 -1
  94. package/dist/client/assets/{dialog-KFqsvCUd.js → dialog-uozmR0qZ.js} +1 -1
  95. package/dist/client/assets/{domain-settings-Bi1Sz1eV.js → domain-settings-Cyez5rW8.js} +1 -1
  96. package/dist/client/assets/{drawer-CJiAZeMW.js → drawer-xk6gl0wo.js} +1 -1
  97. package/dist/client/assets/{dropdown-menu-43sQh3dp.js → dropdown-menu-xxQ3XQhS.js} +1 -1
  98. package/dist/client/assets/{empty-state-CIUrZRxR.js → empty-state-p-IIJVS1.js} +1 -1
  99. package/dist/client/assets/{extract-connection-data-B24nZh_n.js → extract-connection-data-pIJ1AFB0.js} +1 -1
  100. package/dist/client/assets/{file-explorer-D8GCw3xH.js → file-explorer-BPrRYvTp.js} +1 -1
  101. package/dist/client/assets/{file-type-icon-DmGLlybH.js → file-type-icon-BRNnWbfI.js} +1 -1
  102. package/dist/client/assets/{form-Yow7eXpj.js → form-AOeDX-sc.js} +1 -1
  103. package/dist/client/assets/{general-C26bMYta.js → general-RI_ObkNC.js} +1 -1
  104. package/dist/client/assets/{github-repo-picker-TV2zpj9b.js → github-repo-picker-SQHvGY9o.js} +1 -1
  105. package/dist/client/assets/{hooks-52Py0UQb.js → hooks-CVh9W3qM.js} +1 -1
  106. package/dist/client/assets/{index-B4Q2d7fq.js → index-0SgliiNa.js} +1 -1
  107. package/dist/client/assets/{index-Dva8kO63.js → index-BAMtANge.js} +1 -1
  108. package/dist/client/assets/{index-CU151tRr.js → index-BNsQECZj.js} +1 -1
  109. package/dist/client/assets/{index-bCqMfWw2.js → index-BVvoCHxt.js} +1 -1
  110. package/dist/client/assets/{index-DCUv-NTX.js → index-BxxQTwNv.js} +1 -1
  111. package/dist/client/assets/{index-DiE6pqYF.js → index-CA24On3q.js} +1 -1
  112. package/dist/client/assets/{index-BSfR80li.js → index-Ce81t4zn.js} +1 -1
  113. package/dist/client/assets/{index--HEVRKld.js → index-ChRAF8tG.js} +19 -19
  114. package/dist/client/assets/{index-BrKJQaU6.js → index-DY76t5bj.js} +57 -57
  115. package/dist/client/assets/{index-Ji63vd-c.js → index-Dzh5-QGj.js} +1 -1
  116. package/dist/client/assets/{index-redirect-CpUx8Lrf.js → index-redirect-DH7R2SlP.js} +1 -1
  117. package/dist/client/assets/{infra-billing-DVu4-2WP.js → infra-billing-CtBa9Yj1.js} +1 -1
  118. package/dist/client/assets/{input-94gEu_Ty.js → input-IlRlXlNa.js} +1 -1
  119. package/dist/client/assets/{integration-icon-B3eyIM_F.js → integration-icon-Dpiwb_PV.js} +1 -1
  120. package/dist/client/assets/{invite-member-dialog-j4oHCK00.js → invite-member-dialog-9TO6E0fm.js} +1 -1
  121. package/dist/client/assets/{label-CK6rIrcd.js → label-iba0djlP.js} +1 -1
  122. package/dist/client/assets/{layout-D-nL7tHC.js → layout-Gu3l5Lzj.js} +1 -1
  123. package/dist/client/assets/{login-D1ha-FBt.js → login-Cc_F8dfA.js} +1 -1
  124. package/dist/client/assets/{mcp-oauth-DAN-8Vyq.js → mcp-oauth-CLgWiCkx.js} +1 -1
  125. package/dist/client/assets/{members-BtzqzFep.js → members-vGBBIbRO.js} +1 -1
  126. package/dist/client/assets/{monaco-editor-BYXeU09Z.js → monaco-editor-Xp1kh5ky.js} +1 -1
  127. package/dist/client/assets/{monitoring-stats-row-CMLxXEhh.js → monitoring-stats-row-D1P2vVX_.js} +1 -1
  128. package/dist/client/assets/{multi-select-QyI3GNOI.js → multi-select-4_ZozWeZ.js} +1 -1
  129. package/dist/client/assets/{oauth-callback-ai-provider-CojOZcQm.js → oauth-callback-ai-provider-D9Fa9yMF.js} +1 -1
  130. package/dist/client/assets/{oauth-callback-o6lhNFbj.js → oauth-callback-yISMP85i.js} +1 -1
  131. package/dist/client/assets/{onboarding-CFHmxEI7.js → onboarding-eiybVn2k.js} +1 -1
  132. package/dist/client/assets/{org-layout-B1coI3qV.js → org-layout-D9XSYkIp.js} +1 -1
  133. package/dist/client/assets/{organization-choice-CkqjnGWB.js → organization-choice-WFuc1iac.js} +1 -1
  134. package/dist/client/assets/{orgs-D2hcvk8v.js → orgs-Ruoq08oZ.js} +1 -1
  135. package/dist/client/assets/{page-seo-form-PIEbGMiS.js → page-seo-form-DMdsZsEl.js} +1 -1
  136. package/dist/client/assets/{popover-Cn6gMASP.js → popover-D0Ujt726.js} +1 -1
  137. package/dist/client/assets/{post-editor-CsX3spsv.js → post-editor-D895LqdF.js} +1 -1
  138. package/dist/client/assets/{primitives-B35xSKfd.js → primitives-BMok1nd6.js} +1 -1
  139. package/dist/client/assets/{profile-C-19dd9z.js → profile-ByUuzK-b.js} +1 -1
  140. package/dist/client/assets/{project-app-view-CVNG7JtW.js → project-app-view-CVeA4M3T.js} +1 -1
  141. package/dist/client/assets/record-editor-Brzx9Ote.js +1 -0
  142. package/dist/client/assets/{redirect-editor-DBT-DiMG.js → redirect-editor-nVMuLaxA.js} +1 -1
  143. package/dist/client/assets/registry-Bm-CkXZ6.js +2 -0
  144. package/dist/client/assets/{registry-layout-CeIXJPpY.js → registry-layout-MFH8-Kj4.js} +1 -1
  145. package/dist/client/assets/{reports-zsMrCAIR.js → reports-DBW00oFl.js} +1 -1
  146. package/dist/client/assets/{require-capability-Brsn--u-.js → require-capability-DK2ehDo5.js} +1 -1
  147. package/dist/client/assets/{required-auth-layout-7fhfhm15.js → required-auth-layout-hbuU-qIS.js} +1 -1
  148. package/dist/client/assets/{reset-password-C3Mgv31-.js → reset-password-PocOdrZ9.js} +1 -1
  149. package/dist/client/assets/{roles-CsTuTtw5.js → roles-XDa7cxnu.js} +1 -1
  150. package/dist/client/assets/{search-input-DhonXU8h.js → search-input-BoyLg2-2.js} +1 -1
  151. package/dist/client/assets/{secrets-BvCALgZ1.js → secrets-FpQ08-Yk.js} +1 -1
  152. package/dist/client/assets/{sections-editor-_F-caPrG.js → sections-editor-DQT6ioUI.js} +1 -1
  153. package/dist/client/assets/{select-NwjRK5bF.js → select-CsSSssF7.js} +1 -1
  154. package/dist/client/assets/{select-model-CcQpm3E7.js → select-model-Db8ktyB-.js} +1 -1
  155. package/dist/client/assets/{self-tool-result-DQ9_VeRk.js → self-tool-result-C2xV4nd3.js} +1 -1
  156. package/dist/client/assets/{seo-editor-vYqHS73P.js → seo-editor-DCCoFWKw.js} +1 -1
  157. package/dist/client/assets/{settings-layout-tWuPx7mS.js → settings-layout-Ct7d78dx.js} +1 -1
  158. package/dist/client/assets/{shell-controls-OsztPm07.js → shell-controls-ON4to2D7.js} +1 -1
  159. package/dist/client/assets/{shell-layout-YI43X5KX.js → shell-layout-DkGGziBn.js} +1 -1
  160. package/dist/client/assets/{spinner-DCQuAWRC.js → spinner-DhQ9S3Su.js} +1 -1
  161. package/dist/client/assets/{sso-DN8vnWq2.js → sso-BFD22yuE.js} +1 -1
  162. package/dist/client/assets/{store-_3qYZ2cz.js → store-Cu4qfZhA.js} +1 -1
  163. package/dist/client/assets/store-registry-D0PD7AOz.js +2 -0
  164. package/dist/client/assets/{switch-BDYA1xSP.js → switch-Doo9zCp_.js} +1 -1
  165. package/dist/client/assets/{synced-repos-upEZIs4Z.js → synced-repos-FmjA_0nt.js} +1 -1
  166. package/dist/client/assets/{tab-id-BXJ1yhWg.js → tab-id-DF-MsXDT.js} +1 -1
  167. package/dist/client/assets/{table-D8FIdWT_.js → table-oNqd2aCf.js} +1 -1
  168. package/dist/client/assets/{tabs-B59imjzK.js → tabs-DYXo9XSY.js} +1 -1
  169. package/dist/client/assets/{task-key-BDwB31PC.js → task-key-DM_GA7aJ.js} +1 -1
  170. package/dist/client/assets/{tasks-C7iYeFds.js → tasks-DNSUJI_t.js} +1 -1
  171. package/dist/client/assets/{textarea-CxkFKjDW.js → textarea-z-gxaygT.js} +1 -1
  172. package/dist/client/assets/{toggle-group-CBwqhN3z.js → toggle-group-BSbVYnTD.js} +1 -1
  173. package/dist/client/assets/{toolbar-CVa1biQM.js → toolbar-Cdv6xnDB.js} +1 -1
  174. package/dist/client/assets/{track-CasDK5wh.js → track-CatO6_uF.js} +1 -1
  175. package/dist/client/assets/{types-BWniKjqi.js → types-CgAdQKoY.js} +1 -1
  176. package/dist/client/assets/{use-ai-providers-Cw8z2Y4Q.js → use-ai-providers-qbJ5BXNS.js} +1 -1
  177. package/dist/client/assets/{use-api-keys-Bkn8sN-j.js → use-api-keys-y_478VSA.js} +1 -1
  178. package/dist/client/assets/{use-automations-BIt2muj8.js → use-automations-DPGwdwWY.js} +1 -1
  179. package/dist/client/assets/{use-autosave-DTLrZkHw.js → use-autosave-DO1dhTdC.js} +1 -1
  180. package/dist/client/assets/{use-clock-tick-CUIJ1Yay.js → use-clock-tick-DC9cJoMJ.js} +1 -1
  181. package/dist/client/assets/{use-commerce-diagnostic-BvNsvm-D.js → use-commerce-diagnostic-D6cwZS4p.js} +1 -1
  182. package/dist/client/assets/{use-connection-1pPGBh5r.js → use-connection-FKFX3f8a.js} +1 -1
  183. package/dist/client/assets/{use-copy-CZ4cIaVB.js → use-copy-UBPLcQ2K.js} +1 -1
  184. package/dist/client/assets/{use-create-virtual-mcp-CGSKzYu3.js → use-create-virtual-mcp-DsAP_52u.js} +1 -1
  185. package/dist/client/assets/{use-debounced-autosave-Cz2zCSVE.js → use-debounced-autosave-D_cJPsnN.js} +1 -1
  186. package/dist/client/assets/{use-debounced-value-CqU0rWA8.js → use-debounced-value-ZORwcv5a.js} +1 -1
  187. package/dist/client/assets/{use-decopilot-events-xd82udZV.js → use-decopilot-events-DrI_5A49.js} +1 -1
  188. package/dist/client/assets/{use-delete-connection-BgUPae7-.js → use-delete-connection-tvLOb5CZ.js} +1 -1
  189. package/dist/client/assets/{use-deployment-admin-fm1CVdjy.js → use-deployment-admin-Co-R9XDn.js} +1 -1
  190. package/dist/client/assets/{use-file-configs-BN1faNeL.js → use-file-configs-DiGeq8pW.js} +1 -1
  191. package/dist/client/assets/{use-infinite-scroll-DXt8bkIY.js → use-infinite-scroll-aZ5N7zz_.js} +1 -1
  192. package/dist/client/assets/{use-join-requests-DU3_93jQ.js → use-join-requests-CLF0EXZ5.js} +1 -1
  193. package/dist/client/assets/{use-mcp-client-P08gbjl-.js → use-mcp-client-lFusN_-t.js} +1 -1
  194. package/dist/client/assets/{use-mcp-tools-9UMrBtoS.js → use-mcp-tools-jt7SJiqc.js} +1 -1
  195. package/dist/client/assets/{use-members-DUmjXL52.js → use-members-CgemYT3u.js} +1 -1
  196. package/dist/client/assets/{use-navigate-to-agent-Bm7mpxNn.js → use-navigate-to-agent-DgHIhI_P.js} +1 -1
  197. package/dist/client/assets/{use-org-auth-client-PM2gcvN0.js → use-org-auth-client-CsaMMqrA.js} +1 -1
  198. package/dist/client/assets/{use-org-repo-syncs-6G9sOXdt.js → use-org-repo-syncs-S-FzSnBH.js} +1 -1
  199. package/dist/client/assets/{use-org-sso-BXKNZbGj.js → use-org-sso-CeUhN83K.js} +1 -1
  200. package/dist/client/assets/{use-organization-roles-CCeACgKR.js → use-organization-roles-DMCdYUOf.js} +1 -1
  201. package/dist/client/assets/{use-organization-settings-D0jmwP1P.js → use-organization-settings-D9IuyC4Y.js} +1 -1
  202. package/dist/client/assets/{use-registry-connections-DmDPKDIM.js → use-registry-connections-BHPDQOBO.js} +1 -1
  203. package/dist/client/assets/{use-secrets-7vx-YqQM.js → use-secrets-R6z2pzqg.js} +1 -1
  204. package/dist/client/assets/{use-section-preview-base-BZTfOtOf.js → use-section-preview-base-zym3tTsE.js} +1 -1
  205. package/dist/client/assets/{use-status-sounds-BLQHuzX3.js → use-status-sounds-BB9PL309.js} +1 -1
  206. package/dist/client/assets/{use-tags-Dp7cUXdv.js → use-tags-dAVhOQDS.js} +1 -1
  207. package/dist/client/assets/{use-view-mode-CYiGFOt2.js → use-view-mode-Cq4ZdIoo.js} +1 -1
  208. package/dist/client/assets/{use-virtual-mcp-CsnUSRm9.js → use-virtual-mcp-DVToqAM6.js} +1 -1
  209. package/dist/client/assets/useInfiniteQuery-CoJtshUA.js +1 -0
  210. package/dist/client/assets/useSuspenseInfiniteQuery--Utt_dfe.js +1 -0
  211. package/dist/client/assets/{users-BqzOIvQX.js → users-CLF8juzo.js} +1 -1
  212. package/dist/client/assets/{variant-calendar-DhKw8tOs.js → variant-calendar-CvlbvMuG.js} +1 -1
  213. package/dist/client/assets/{view-mode-toggle-BZzwFLOa.js → view-mode-toggle-CnNsY5kQ.js} +1 -1
  214. package/dist/client/index.html +1 -1
  215. package/dist/server/cli.js +1 -1
  216. package/dist/server/server.js +1 -1
  217. package/package.json +1 -1
  218. package/dist/client/assets/record-editor-DpYq2HJc.js +0 -1
  219. package/dist/client/assets/registry-BfeCGn9v.js +0 -2
  220. package/dist/client/assets/store-registry-BYWk3N8h.js +0 -2
  221. package/dist/client/assets/useInfiniteQuery-Cqwkqq8b.js +0 -1
  222. package/dist/client/assets/useSuspenseInfiniteQuery-fBUiwbWU.js +0 -1
@@ -50,7 +50,7 @@
50
50
  <meta name="twitter:description" content="Hire specialized agents, give them access to your tools, and let them deliver real projects — with planning, verification, and observability built in." />
51
51
  <meta name="twitter:image" content="/og-image.png" />
52
52
  <link rel="icon" type="image/svg+xml" href="/favicon.svg" />
53
- <script type="module" crossorigin src="/assets/index--HEVRKld.js"></script>
53
+ <script type="module" crossorigin src="/assets/index-ChRAF8tG.js"></script>
54
54
  <link rel="stylesheet" crossorigin href="/assets/index-BO9uDeSR.css">
55
55
  </head>
56
56
  <body>
@@ -1384,7 +1384,7 @@ Usage: deco services <up|down|status>`),process.exit(1)}}var Ci1=L(()=>{zf()});f
1384
1384
  `.execute($);if(Number(W.rows[0]?.cnt)===0){console.warn(`Failed to migrate ${J}/${K}, keeping in old table`);continue}}await tb`
1385
1385
  DELETE FROM kysely_migration WHERE name = ${X}
1386
1386
  `.execute($)}}async function ro1($){await Lt6($),await wt6($);let Z=new to1({db:$,provider:{getMigrations:()=>Promise.resolve(ci0)}}),{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 Dt6($){let{keepOpen:Z=!1,database:X,skipBetterAuth:Q=!1}=$??{},Y="skipped";if(!Q&&!X)Y=await Hl0();let G=X??K6(),J=async()=>{if(!Z&&!X)await cB(G).catch((K)=>{console.warn("Warning: Error closing database:",K)})};try{let K=await ro1(G.db);return await J(),{betterAuth:Y,kysely:K}}catch(K){throw await J(),K}}async function Et6(){let $=K6(),Z=new to1({db:$.db,provider:{getMigrations:()=>Promise.resolve(ci0)}}),{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 so1=L(()=>{po1();Fl0();YX()});async function xZ0($){let Z={...process.env},X=I80($,Z);console.log(Nw1(X.settings.encryptionKey));let Q=X.settings.betterAuthSecret||(X.settings.localMode?Kp1(X.settings.dataDir):""),{ensureServices:Y}=await Promise.resolve().then(() => (l90(),c90)),{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(() => (Fl0(),Hp1));await W(G.databaseUrl);let{createDatabase:H}=await Promise.resolve().then(() => (YX(),qn1)),{migrateToLatest:F}=await Promise.resolve().then(() => (so1(),ao1)),N=H(G.databaseUrl);await F({keepOpen:!0,database:N,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 _i1(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 li0=L(()=>{zf();Wp1();_8()});var Zr1={};U0(Zr1,{updateService:()=>AE,subscribeCliState:()=>ii0,setTuiConsoleIntercepted:()=>fZ0,setServerUrl:()=>gi,setMigrationsDone:()=>yi,setDevMode:()=>Pt6,resetCliStateForTests:()=>jt6,isTuiConsoleIntercepted:()=>bZ0,getCliState:()=>mi0,addLogEntry:()=>nB});function eo1(){return{services:[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}],migrationsStatus:"pending",serverUrl:null,logs:[]}}function jt6(){nQ=eo1()}function zt6(){return[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}]}function bi(){for(let $ of di0)$()}function mi0(){return nQ}function ii0($){return di0.add($),()=>di0.delete($)}function AE($){nQ={...nQ,services:nQ.services.map((Z)=>Z.name===$.name?$:Z)},bi()}function yi(){nQ={...nQ,migrationsStatus:"done"},bi()}function gi($){nQ={...nQ,serverUrl:$},bi()}function nB($){let Z=[...nQ.logs,$];nQ={...nQ,logs:Z.length>500?Z.slice(-500):Z},bi()}function Pt6(){nQ={...nQ,services:[...zt6(),{name:"API",status:"pending",port:0},{name:"Vite",status:"pending",port:0}]},bi()}function fZ0($){$r1=$}function bZ0(){return $r1}var nQ,di0,$r1=!1;var TE=L(()=>{nQ=eo1();di0=new Set});import{createServer as Xr1}from"net";function At6($){return new Promise((Z)=>{let X=Xr1();X.once("error",()=>Z(!1)),X.listen($,"0.0.0.0",()=>{X.close(()=>Z(!0))})})}async function hi($){if(await At6($))return $;let Z=await new Promise((X,Q)=>{let Y=Xr1();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 ni0=()=>{};function ui($){return $.replace(/\x1b\[[0-9;]*m/g,"")}var pi0={};U0(pi0,{startDevServer:()=>Rt6});import{join as Tt6}from"path";function Qr1($){let Z=$.getReader(),X=new TextDecoder,Q="";function Y(){let G=Q.split(`
1387
- `);Q=G.pop()??"";for(let J of G){let K=ui(J).replace(/^\[\d+\]\s*/,"").trim();if(!K)continue;nB({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=ui(Q).replace(/^\[\d+\]\s*/,"").trim();if(G)nB({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:G})}})()}async function Rt6($){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 hi(Number(Y)+1):await hi(Number($.port)),{settings:K,services:W,managedServiceNames:H}=await xZ0({port:String(J),home:$.home,baseUrl:$.baseUrl,localMode:$.localMode,skipMigrations:$.skipMigrations,noTui:$.noTui,vitePort:$.vitePort});for(let w of W)AE({name:w.name,status:"ready",port:w.port});yi();let F=Tt6(import.meta.dir,"..","..","..","..",".."),N=X===!0,U=Bun.spawn(["bun","run","dev:servers"],{cwd:F,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",N?"inherit":"pipe",N?"inherit":"pipe"]});if(!N)Qr1(U.stdout),Qr1(U.stderr);gi(G),AE({name:"Vite",status:"ready",port:Number(Y)}),AE({name:"API",status:"ready",port:Number(K.port)});let O=async(w)=>{if(U.kill(w),await U.exited,H.length>0){let{stopServices:D}=await Promise.resolve().then(() => (l90(),c90));await D(K.dataDir)}};return process.on("SIGINT",()=>O("SIGINT")),process.on("SIGTERM",()=>O("SIGTERM")),{port:Number(Y),process:U}}var ti0=L(()=>{li0();TE();ni0()});var yZ0;var oi0=L(()=>{yZ0={name:"decocms",version:"4.249.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","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.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 qt6,Text as Yr1}from"ink";import{jsx as Mt6,jsxs as Gr1}from"react/jsx-runtime";function Jr1({version:$}){return Gr1(qt6,{flexDirection:"column",marginTop:1,children:[NZ0.map((Z,X)=>Mt6(Yr1,{color:UZ0[X],children:Z},X)),Gr1(Yr1,{dimColor:!0,children:[" v",$]})]})}var Kr1=L(()=>{Ii()});import{Box as RE,Text as pB}from"ink";import{Spinner as Vt6}from"@inkjs/ui";import{jsx as eY,jsxs as ob}from"react/jsx-runtime";function Wr1({status:$}){if($==="pending")return eY(Vt6,{label:""});return eY(pB,{color:"green",children:"\u2713"})}function kt6($){return`${$.name}: ${$.port||"...."}`}function Hr1({services:$,migrationsStatus:Z,home:X,serverUrl:Q}){return ob(RE,{flexDirection:"column",paddingBottom:1,children:[eY(Jr1,{version:yZ0.version}),eY(RE,{marginBottom:1,children:eY(pB,{dimColor:!0,children:"\u2500".repeat(80)})}),eY(RE,{children:ob(pB,{dimColor:!0,children:["Home: ",X]})}),ob(RE,{gap:2,children:[$.map((Y)=>ob(RE,{gap:1,children:[eY(pB,{children:kt6(Y)}),eY(Wr1,{status:Y.status})]},Y.name)),ob(RE,{gap:1,children:[eY(pB,{children:"Migrations"}),eY(Wr1,{status:Z})]})]}),eY(RE,{children:Q?ob(pB,{children:["Open in browser: ",eY(pB,{color:"cyan",children:Q})]}):eY(pB,{dimColor:!0,children:"Starting..."})})]})}var Fr1=L(()=>{oi0();Kr1()});import{Box as St6,Text as ci}from"ink";import{jsx as ri0,jsxs as ai0}from"react/jsx-runtime";function Ct6($){if($>=500)return"red";if($>=400)return"yellow";if($>=300)return"cyan";return"green"}function Nr1({logs:$}){return ri0(St6,{flexDirection:"column",children:$.map((Z,X)=>{if(Z.rawLine)return ri0(ci,{dimColor:!0,children:Z.rawLine},X);let Q=Z.duration<1000?`${Z.duration}ms`:`${(Z.duration/1000).toFixed(1)}s`;return ai0(ci,{children:[ai0(ci,{dimColor:!0,children:[Z.method.padEnd(6)," ",Z.path.padEnd(30)," "]}),ri0(ci,{color:Ct6(Z.status),children:Z.status}),ai0(ci,{dimColor:!0,children:[" ",Q.padStart(8)]})]},X)})})}var Ur1=()=>{};var si0={};U0(si0,{App:()=>xt6});import{Box as _t6}from"ink";import{useSyncExternalStore as vt6}from"react";import{jsx as Br1,jsxs as ft6}from"react/jsx-runtime";function xt6({home:$}){let Z=vt6(ii0,mi0);return ft6(_t6,{flexDirection:"column",children:[Br1(Hr1,{services:Z.services,migrationsStatus:Z.migrationsStatus,home:$,serverUrl:Z.serverUrl}),Br1(Nr1,{logs:Z.logs})]})}var ei0=L(()=>{Fr1();Ur1();TE()});var yJ="thread-gate",$N="decopilot-hosted-harness",ZN="decopilot-hosted-harness-sandboxed",U3="automations",tB="background-tools",IE="task-board-github-reads",qE="jira-push";var Or1="7";function Lr1($){return{name:"decocms",systemDatabaseUrl:$.systemDatabaseUrl,systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:$.poolSize,runAdminServer:!1,executorID:$.executorID,applicationVersion:Or1,...$.listenQueues!==void 0?{listenQueues:$.listenQueues}:{}}}var wr1=()=>{};function bt6(){let $=(process.env.BUN_OPTIONS??"").split(/\s+/).filter(Boolean);return[...process.argv.slice(1),...$]}function $n0($,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 Dr1(){let $=bt6();if($.includes("--cpu-prof")){console.log(JSON.stringify({msg:"cpu-profiling-active",dir:$n0($,"--cpu-prof-dir")??process.cwd(),name:$n0($,"--cpu-prof-name"),markdown:$.includes("--cpu-prof-md"),intervalUs:Number($n0($,"--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 Er1(){if(process.env.HEAP_WATCH!=="1")return()=>{};let $=Number(process.env.HEAP_WATCH_INTERVAL_MS??60000),Z=async()=>{let X=EE();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(()=>{}),gZ0=setInterval(()=>void Z().catch(()=>{}),$),gZ0.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(gZ0)clearInterval(gZ0)}}var gZ0;var jr1=()=>{};import*as yt6 from"bun:jsc";function zr1(){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{gt6()}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=ht6()?.traces??[]}catch{}if(J>$&&K.length>0){let W=new Map;for(let F of K){let N=F.frames.find((O)=>O.sourceURL&&!/Unknown Executable/.test(O.category??""))??F.frames[0];if(!N)continue;let U=(N.sourceURL??"?").replace(/^.*\/node_modules\//,"node_modules/"),B=`${N.name??"?"} @ ${U}:${N.line??"?"}`;W.set(B,(W.get(B)??0)+1)}let H=[...W.entries()].sort((F,N)=>N[1]-F[1]).slice(0,8).map(([F,N])=>({frame:F,count:N}));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 gt6,ht6;var Pr1=L(()=>{({startSamplingProfiler:gt6,samplingProfilerStackTraces:ht6}=yt6)});function Ar1(){Dr1();let $=[Er1(),En1(),zr1()];return()=>{for(let Z of $)Z()}}var Tr1=L(()=>{ec0();jr1();Pr1()});var ME=_((Rr1)=>{Object.defineProperty(Rr1,"__esModule",{value:!0});Rr1.RepublishHeaders=Rr1.DirectMsgHeaders=Rr1.JsHeaders=Rr1.AdvisoryKind=void 0;Rr1.isOrderedPushConsumerOptions=ut6;Rr1.isPullConsumer=ct6;Rr1.isPushConsumer=lt6;Rr1.isBoundPushConsumerOptions=dt6;function ut6($){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 ct6($){return $.isPullConsumer()}function lt6($){return $.isPushConsumer()}function dt6($){if($&&typeof $==="object")return"deliver_subject"in $||"deliver_group"in $||"idle_heartbeat"in $;return!1}Rr1.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"};Rr1.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"};Rr1.DirectMsgHeaders={Stream:"Nats-Stream",Sequence:"Nats-Sequence",TimeStamp:"Nats-Time-Stamp",Subject:"Nats-Subject",LastSequence:"Nats-Last-Sequence",NumPending:"Nats-Num-Pending"};Rr1.RepublishHeaders={Stream:"Nats-Stream",Subject:"Nats-Subject",Sequence:"Nats-Sequence",LastSequence:"Nats-Last-Sequence",Size:"Nats-Msg-Size"}});var $G=_((qr1)=>{Object.defineProperty(qr1,"__esModule",{value:!0});qr1.TD=qr1.TE=qr1.Empty=void 0;qr1.encode=st6;qr1.decode=et6;qr1.Empty=new Uint8Array(0);qr1.TE=new TextEncoder;qr1.TD=new TextDecoder;function at6(...$){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 st6(...$){let Z=[];for(let X=0;X<$.length;X++)Z.push(qr1.TE.encode($[X]));if(Z.length===0)return qr1.Empty;if(Z.length===1)return Z[0];return at6(...Z)}function et6($){if(!$||$.length===0)return"";return qr1.TD.decode($)}});var ZG=_((kr1)=>{Object.defineProperty(kr1,"__esModule",{value:!0});kr1.errors=kr1.PermissionViolationError=kr1.NoRespondersError=kr1.TimeoutError=kr1.RequestError=kr1.ProtocolError=kr1.ConnectionError=kr1.DrainingConnectionError=kr1.ClosedConnectionError=kr1.AuthorizationError=kr1.UserAuthenticationExpiredError=kr1.InvalidOperationError=kr1.InvalidArgumentError=kr1.InvalidSubjectError=void 0;class Xn0 extends Error{constructor($,Z){super(`illegal subject: '${$}'`,Z);this.name="InvalidSubjectError"}}kr1.InvalidSubjectError=Xn0;class hZ0 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 hZ0(`${$} ${Z}`,X)}}kr1.InvalidArgumentError=hZ0;class Qn0 extends Error{constructor($,Z){super($,Z);this.name="InvalidOperationError"}}kr1.InvalidOperationError=Qn0;class uZ0 extends Error{constructor($,Z){super($,Z);this.name="UserAuthenticationExpiredError"}static parse($){if($.toLowerCase().indexOf("user authentication expired")!==-1)return new uZ0($);return null}}kr1.UserAuthenticationExpiredError=uZ0;class cZ0 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 cZ0($);return null}}kr1.AuthorizationError=cZ0;class Yn0 extends Error{constructor(){super("closed connection");this.name="ClosedConnectionError"}}kr1.ClosedConnectionError=Yn0;class Gn0 extends Error{constructor(){super("connection draining");this.name="DrainingConnectionError"}}kr1.DrainingConnectionError=Gn0;class Jn0 extends Error{constructor($,Z){super($,Z);this.name="ConnectionError"}}kr1.ConnectionError=Jn0;class Kn0 extends Error{constructor($,Z){super($,Z);this.name="ProtocolError"}}kr1.ProtocolError=Kn0;class Wn0 extends Error{constructor($="",Z){super($,Z);this.name="RequestError"}isNoResponders(){return this.cause instanceof lZ0}}kr1.RequestError=Wn0;class Hn0 extends Error{constructor($){super("timeout",$);this.name="TimeoutError"}}kr1.TimeoutError=Hn0;class lZ0 extends Error{subject;constructor($,Z){super(`no responders: '${$}'`,Z);this.subject=$,this.name="NoResponders"}}kr1.NoRespondersError=lZ0;class dZ0 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 dZ0($,X,Q,Y)}}kr1.PermissionViolationError=dZ0;kr1.errors={AuthorizationError:cZ0,ClosedConnectionError:Yn0,ConnectionError:Jn0,DrainingConnectionError:Gn0,InvalidArgumentError:hZ0,InvalidOperationError:Qn0,InvalidSubjectError:Xn0,NoRespondersError:lZ0,PermissionViolationError:dZ0,ProtocolError:Kn0,RequestError:Wn0,TimeoutError:Hn0,UserAuthenticationExpiredError:uZ0}});var gJ=_((xr1)=>{Object.defineProperty(xr1,"__esModule",{value:!0});xr1.SimpleMutex=xr1.Perf=void 0;xr1.extend=wo6;xr1.render=Do6;xr1.timeout=Eo6;xr1.delay=jo6;xr1.deadline=zo6;xr1.deferred=Nn0;xr1.debugDeferred=Po6;xr1.shuffle=Ao6;xr1.collect=To6;xr1.jitter=vr1;xr1.backoff=Ro6;xr1.nanos=Io6;xr1.millis=qo6;xr1.randomToken=ko6;var Lo6=$G(),Fn0=ZG();function wo6($,...Z){for(let X=0;X<Z.length;X++){let Q=Z[X];Object.keys(Q).forEach(function(Y){$[Y]=Q[Y]})}return $}function Do6($){return Lo6.TD.decode($).replace(/\n/g,"\u240A").replace(/\r/g,"\u240D")}function Eo6($,Z=!0){let X=Z?new Fn0.TimeoutError:null,Q,Y,G=new Promise((J,K)=>{Q={cancel:()=>{if(Y)clearTimeout(Y)}},Y=setTimeout(()=>{if(X===null)K(new Fn0.TimeoutError);else K(X)},$)});return Object.assign(G,Q)}function jo6($=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 zo6($,Z=1000){let X=Nn0(),Q=setTimeout(()=>{X.reject(new Fn0.TimeoutError)},Z);try{return await Promise.race([$,X])}finally{clearTimeout(Q)}}function Nn0(){let $={},Z=new Promise((X,Q)=>{$={resolve:X,reject:Q}});return Object.assign(Z,$)}function Po6(){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 Ao6($){for(let Z=$.length-1;Z>0;Z--){let X=Math.floor(Math.random()*(Z+1));[$[Z],$[X]]=[$[X],$[Z]]}return $}async function To6($){let Z=[];for await(let X of $)Z.push(X);return Z}class Cr1{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})}),$}}xr1.Perf=Cr1;class _r1{max;current;waiting;constructor($=1){this.max=$,this.current=0,this.waiting=[]}lock(){if(this.current++,this.current<=this.max)return Promise.resolve();let $=Nn0();return this.waiting.push($),$}unlock(){this.current--,this.waiting.pop()?.resolve()}}xr1.SimpleMutex=_r1;function vr1($){if($===0)return 0;return Math.floor($/2+Math.random()*$)}function Ro6($=[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 vr1(X>Z?$[Z]:$[X])}}}function Io6($){return $*1e6}function qo6($){return Math.floor($/1e6)}var Mo6="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",XN=new Uint8Array(62);for(let $=0;$<62;$++)XN[$]=Mo6.charCodeAt($);var Vo6=218340105584896;function ko6(){let $=Math.floor(Math.random()*Vo6),Z=$%62,X=XN[Z];$=($-Z)/62,Z=$%62;let Q=XN[Z];$=($-Z)/62,Z=$%62;let Y=XN[Z];$=($-Z)/62,Z=$%62;let G=XN[Z];$=($-Z)/62,Z=$%62;let J=XN[Z];$=($-Z)/62,Z=$%62;let K=XN[Z];$=($-Z)/62,Z=$%62;let W=XN[Z];$=($-Z)/62;let H=XN[$];return String.fromCharCode(X,Q,Y,G,J,K,W,H)}});var lr1=_((ur1)=>{Object.defineProperty(ur1,"__esModule",{value:!0});ur1.nuid=ur1.NuidImpl=void 0;var io6="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",oB=62,iZ0=12,gr1=10,br1=33,no6=333,yr1=iZ0+gr1,Bn0=new Uint8Array(oB);for(let $=0;$<oB;$++)Bn0[$]=io6.charCodeAt($);var mZ0=4294967296,hr1=BigInt(oB)**BigInt(gr1),li=Number(hr1/(1n<<32n)),Un0=Number(hr1%(1n<<32n));function po6($){for(let Z=0;Z<$.length;Z++)$[Z]=Math.floor(Math.random()*256)}function to6($){if(globalThis?.crypto?.getRandomValues)globalThis.crypto.getRandomValues($);else po6($)}class On0{buf;cbuf;seqHi;seqLo;inc;inited;constructor(){this.buf=new Uint8Array(yr1),this.cbuf=new Uint8Array(iZ0),this.inited=!1}init(){this.inited=!0,this.setPre(),this.initSeqAndInc(),this.fillSeq()}initSeqAndInc(){let $=0;do this.seqHi=Math.floor(Math.random()*(li+1)),this.seqLo=Math.floor(Math.random()*mZ0);while($++<8&&this.seqHi===li&&this.seqLo>=Un0);if(this.seqHi===li&&this.seqLo>=Un0)this.seqLo=0;this.inc=Math.random()*(no6-br1)+br1|0}setPre(){to6(this.cbuf);for(let $=0;$<iZ0;$++)this.buf[$]=Bn0[this.cbuf[$]%oB]}fillSeq(){let $=this.seqHi,Z=this.seqLo;for(let X=yr1-1;X>=iZ0;X--){let Q=Math.floor($/oB),G=($-Q*oB)*mZ0+Z,J=Math.floor(G/oB),K=G-J*oB;this.buf[X]=Bn0[K],$=Q,Z=J}}next(){if(!this.inited)this.init();if(this.seqLo+=this.inc,this.seqLo>=mZ0)this.seqLo-=mZ0,this.seqHi+=1;if(this.seqHi>li||this.seqHi===li&&this.seqLo>=Un0)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()}}ur1.NuidImpl=On0;ur1.nuid=new On0});var nr1=_((mr1)=>{Object.defineProperty(mr1,"__esModule",{value:!0});mr1.nuid=mr1.Nuid=void 0;var dr1=lr1();mr1.Nuid=dr1.NuidImpl;mr1.nuid=dr1.nuid});var pZ0=_((nZ0)=>{Object.defineProperty(nZ0,"__esModule",{value:!0});nZ0.nuid=nZ0.Nuid=void 0;var pr1=nr1();Object.defineProperty(nZ0,"Nuid",{enumerable:!0,get:function(){return pr1.Nuid}});Object.defineProperty(nZ0,"nuid",{enumerable:!0,get:function(){return pr1.nuid}})});var rB=_((tr1)=>{Object.defineProperty(tr1,"__esModule",{value:!0});tr1.DEFAULT_HOST=tr1.DEFAULT_PORT=tr1.Match=void 0;tr1.syncIterator=$r6;tr1.createInbox=Zr6;var so6=pZ0(),eo6=ZG();tr1.Match={Exact:"exact",CanonicalMIME:"canonical",IgnoreCase:"insensitive"};function $r6($){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 Zr6($=""){if($=$||"_INBOX",typeof $!=="string")throw TypeError("prefix must be a string");return $.split(".").forEach((Z)=>{if(Z==="*"||Z===">")throw eo6.InvalidArgumentError.format("prefix",`cannot have wildcards ('${$}')`)}),`${$}.${so6.nuid.next()}`}tr1.DEFAULT_PORT=4222;tr1.DEFAULT_HOST="127.0.0.1"});var di=_((sr1)=>{Object.defineProperty(sr1,"__esModule",{value:!0});sr1.DataBuffer=void 0;var rr1=$G();class ar1{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 rr1.TE.encode($)}static toAscii($){return rr1.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}}sr1.DataBuffer=ar1});var VE=_((Za1)=>{Object.defineProperty(Za1,"__esModule",{value:!0});Za1.LF=Za1.CR=Za1.CRLF=Za1.CR_LF_LEN=Za1.CR_LF=void 0;Za1.setTransportFactory=Hr6;Za1.defaultPort=Fr6;Za1.getUrlParseFn=Nr6;Za1.newTransport=Ur6;Za1.getResolveFn=Br6;Za1.protoLen=$a1;Za1.extractProtocolMessage=Or6;var Jr6=$G(),Kr6=rB(),Wr6=di(),XG;function Hr6($){XG=$}function Fr6(){return XG!==void 0&&XG.defaultPort!==void 0?XG.defaultPort:Kr6.DEFAULT_PORT}function Nr6(){return XG!==void 0&&XG.urlParseFn?XG.urlParseFn:void 0}function Ur6(){if(!XG||typeof XG.factory!=="function")throw Error("transport fn is not set");return XG.factory()}function Br6(){return XG!==void 0&&XG.dnsResolveFn?XG.dnsResolveFn:void 0}Za1.CR_LF=`\r
1387
+ `);Q=G.pop()??"";for(let J of G){let K=ui(J).replace(/^\[\d+\]\s*/,"").trim();if(!K)continue;nB({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=ui(Q).replace(/^\[\d+\]\s*/,"").trim();if(G)nB({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:G})}})()}async function Rt6($){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 hi(Number(Y)+1):await hi(Number($.port)),{settings:K,services:W,managedServiceNames:H}=await xZ0({port:String(J),home:$.home,baseUrl:$.baseUrl,localMode:$.localMode,skipMigrations:$.skipMigrations,noTui:$.noTui,vitePort:$.vitePort});for(let w of W)AE({name:w.name,status:"ready",port:w.port});yi();let F=Tt6(import.meta.dir,"..","..","..","..",".."),N=X===!0,U=Bun.spawn(["bun","run","dev:servers"],{cwd:F,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",N?"inherit":"pipe",N?"inherit":"pipe"]});if(!N)Qr1(U.stdout),Qr1(U.stderr);gi(G),AE({name:"Vite",status:"ready",port:Number(Y)}),AE({name:"API",status:"ready",port:Number(K.port)});let O=async(w)=>{if(U.kill(w),await U.exited,H.length>0){let{stopServices:D}=await Promise.resolve().then(() => (l90(),c90));await D(K.dataDir)}};return process.on("SIGINT",()=>O("SIGINT")),process.on("SIGTERM",()=>O("SIGTERM")),{port:Number(Y),process:U}}var ti0=L(()=>{li0();TE();ni0()});var yZ0;var oi0=L(()=>{yZ0={name:"decocms",version:"4.250.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","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.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 qt6,Text as Yr1}from"ink";import{jsx as Mt6,jsxs as Gr1}from"react/jsx-runtime";function Jr1({version:$}){return Gr1(qt6,{flexDirection:"column",marginTop:1,children:[NZ0.map((Z,X)=>Mt6(Yr1,{color:UZ0[X],children:Z},X)),Gr1(Yr1,{dimColor:!0,children:[" v",$]})]})}var Kr1=L(()=>{Ii()});import{Box as RE,Text as pB}from"ink";import{Spinner as Vt6}from"@inkjs/ui";import{jsx as eY,jsxs as ob}from"react/jsx-runtime";function Wr1({status:$}){if($==="pending")return eY(Vt6,{label:""});return eY(pB,{color:"green",children:"\u2713"})}function kt6($){return`${$.name}: ${$.port||"...."}`}function Hr1({services:$,migrationsStatus:Z,home:X,serverUrl:Q}){return ob(RE,{flexDirection:"column",paddingBottom:1,children:[eY(Jr1,{version:yZ0.version}),eY(RE,{marginBottom:1,children:eY(pB,{dimColor:!0,children:"\u2500".repeat(80)})}),eY(RE,{children:ob(pB,{dimColor:!0,children:["Home: ",X]})}),ob(RE,{gap:2,children:[$.map((Y)=>ob(RE,{gap:1,children:[eY(pB,{children:kt6(Y)}),eY(Wr1,{status:Y.status})]},Y.name)),ob(RE,{gap:1,children:[eY(pB,{children:"Migrations"}),eY(Wr1,{status:Z})]})]}),eY(RE,{children:Q?ob(pB,{children:["Open in browser: ",eY(pB,{color:"cyan",children:Q})]}):eY(pB,{dimColor:!0,children:"Starting..."})})]})}var Fr1=L(()=>{oi0();Kr1()});import{Box as St6,Text as ci}from"ink";import{jsx as ri0,jsxs as ai0}from"react/jsx-runtime";function Ct6($){if($>=500)return"red";if($>=400)return"yellow";if($>=300)return"cyan";return"green"}function Nr1({logs:$}){return ri0(St6,{flexDirection:"column",children:$.map((Z,X)=>{if(Z.rawLine)return ri0(ci,{dimColor:!0,children:Z.rawLine},X);let Q=Z.duration<1000?`${Z.duration}ms`:`${(Z.duration/1000).toFixed(1)}s`;return ai0(ci,{children:[ai0(ci,{dimColor:!0,children:[Z.method.padEnd(6)," ",Z.path.padEnd(30)," "]}),ri0(ci,{color:Ct6(Z.status),children:Z.status}),ai0(ci,{dimColor:!0,children:[" ",Q.padStart(8)]})]},X)})})}var Ur1=()=>{};var si0={};U0(si0,{App:()=>xt6});import{Box as _t6}from"ink";import{useSyncExternalStore as vt6}from"react";import{jsx as Br1,jsxs as ft6}from"react/jsx-runtime";function xt6({home:$}){let Z=vt6(ii0,mi0);return ft6(_t6,{flexDirection:"column",children:[Br1(Hr1,{services:Z.services,migrationsStatus:Z.migrationsStatus,home:$,serverUrl:Z.serverUrl}),Br1(Nr1,{logs:Z.logs})]})}var ei0=L(()=>{Fr1();Ur1();TE()});var yJ="thread-gate",$N="decopilot-hosted-harness",ZN="decopilot-hosted-harness-sandboxed",U3="automations",tB="background-tools",IE="task-board-github-reads",qE="jira-push";var Or1="7";function Lr1($){return{name:"decocms",systemDatabaseUrl:$.systemDatabaseUrl,systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:$.poolSize,runAdminServer:!1,executorID:$.executorID,applicationVersion:Or1,...$.listenQueues!==void 0?{listenQueues:$.listenQueues}:{}}}var wr1=()=>{};function bt6(){let $=(process.env.BUN_OPTIONS??"").split(/\s+/).filter(Boolean);return[...process.argv.slice(1),...$]}function $n0($,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 Dr1(){let $=bt6();if($.includes("--cpu-prof")){console.log(JSON.stringify({msg:"cpu-profiling-active",dir:$n0($,"--cpu-prof-dir")??process.cwd(),name:$n0($,"--cpu-prof-name"),markdown:$.includes("--cpu-prof-md"),intervalUs:Number($n0($,"--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 Er1(){if(process.env.HEAP_WATCH!=="1")return()=>{};let $=Number(process.env.HEAP_WATCH_INTERVAL_MS??60000),Z=async()=>{let X=EE();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(()=>{}),gZ0=setInterval(()=>void Z().catch(()=>{}),$),gZ0.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(gZ0)clearInterval(gZ0)}}var gZ0;var jr1=()=>{};import*as yt6 from"bun:jsc";function zr1(){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{gt6()}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=ht6()?.traces??[]}catch{}if(J>$&&K.length>0){let W=new Map;for(let F of K){let N=F.frames.find((O)=>O.sourceURL&&!/Unknown Executable/.test(O.category??""))??F.frames[0];if(!N)continue;let U=(N.sourceURL??"?").replace(/^.*\/node_modules\//,"node_modules/"),B=`${N.name??"?"} @ ${U}:${N.line??"?"}`;W.set(B,(W.get(B)??0)+1)}let H=[...W.entries()].sort((F,N)=>N[1]-F[1]).slice(0,8).map(([F,N])=>({frame:F,count:N}));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 gt6,ht6;var Pr1=L(()=>{({startSamplingProfiler:gt6,samplingProfilerStackTraces:ht6}=yt6)});function Ar1(){Dr1();let $=[Er1(),En1(),zr1()];return()=>{for(let Z of $)Z()}}var Tr1=L(()=>{ec0();jr1();Pr1()});var ME=_((Rr1)=>{Object.defineProperty(Rr1,"__esModule",{value:!0});Rr1.RepublishHeaders=Rr1.DirectMsgHeaders=Rr1.JsHeaders=Rr1.AdvisoryKind=void 0;Rr1.isOrderedPushConsumerOptions=ut6;Rr1.isPullConsumer=ct6;Rr1.isPushConsumer=lt6;Rr1.isBoundPushConsumerOptions=dt6;function ut6($){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 ct6($){return $.isPullConsumer()}function lt6($){return $.isPushConsumer()}function dt6($){if($&&typeof $==="object")return"deliver_subject"in $||"deliver_group"in $||"idle_heartbeat"in $;return!1}Rr1.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"};Rr1.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"};Rr1.DirectMsgHeaders={Stream:"Nats-Stream",Sequence:"Nats-Sequence",TimeStamp:"Nats-Time-Stamp",Subject:"Nats-Subject",LastSequence:"Nats-Last-Sequence",NumPending:"Nats-Num-Pending"};Rr1.RepublishHeaders={Stream:"Nats-Stream",Subject:"Nats-Subject",Sequence:"Nats-Sequence",LastSequence:"Nats-Last-Sequence",Size:"Nats-Msg-Size"}});var $G=_((qr1)=>{Object.defineProperty(qr1,"__esModule",{value:!0});qr1.TD=qr1.TE=qr1.Empty=void 0;qr1.encode=st6;qr1.decode=et6;qr1.Empty=new Uint8Array(0);qr1.TE=new TextEncoder;qr1.TD=new TextDecoder;function at6(...$){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 st6(...$){let Z=[];for(let X=0;X<$.length;X++)Z.push(qr1.TE.encode($[X]));if(Z.length===0)return qr1.Empty;if(Z.length===1)return Z[0];return at6(...Z)}function et6($){if(!$||$.length===0)return"";return qr1.TD.decode($)}});var ZG=_((kr1)=>{Object.defineProperty(kr1,"__esModule",{value:!0});kr1.errors=kr1.PermissionViolationError=kr1.NoRespondersError=kr1.TimeoutError=kr1.RequestError=kr1.ProtocolError=kr1.ConnectionError=kr1.DrainingConnectionError=kr1.ClosedConnectionError=kr1.AuthorizationError=kr1.UserAuthenticationExpiredError=kr1.InvalidOperationError=kr1.InvalidArgumentError=kr1.InvalidSubjectError=void 0;class Xn0 extends Error{constructor($,Z){super(`illegal subject: '${$}'`,Z);this.name="InvalidSubjectError"}}kr1.InvalidSubjectError=Xn0;class hZ0 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 hZ0(`${$} ${Z}`,X)}}kr1.InvalidArgumentError=hZ0;class Qn0 extends Error{constructor($,Z){super($,Z);this.name="InvalidOperationError"}}kr1.InvalidOperationError=Qn0;class uZ0 extends Error{constructor($,Z){super($,Z);this.name="UserAuthenticationExpiredError"}static parse($){if($.toLowerCase().indexOf("user authentication expired")!==-1)return new uZ0($);return null}}kr1.UserAuthenticationExpiredError=uZ0;class cZ0 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 cZ0($);return null}}kr1.AuthorizationError=cZ0;class Yn0 extends Error{constructor(){super("closed connection");this.name="ClosedConnectionError"}}kr1.ClosedConnectionError=Yn0;class Gn0 extends Error{constructor(){super("connection draining");this.name="DrainingConnectionError"}}kr1.DrainingConnectionError=Gn0;class Jn0 extends Error{constructor($,Z){super($,Z);this.name="ConnectionError"}}kr1.ConnectionError=Jn0;class Kn0 extends Error{constructor($,Z){super($,Z);this.name="ProtocolError"}}kr1.ProtocolError=Kn0;class Wn0 extends Error{constructor($="",Z){super($,Z);this.name="RequestError"}isNoResponders(){return this.cause instanceof lZ0}}kr1.RequestError=Wn0;class Hn0 extends Error{constructor($){super("timeout",$);this.name="TimeoutError"}}kr1.TimeoutError=Hn0;class lZ0 extends Error{subject;constructor($,Z){super(`no responders: '${$}'`,Z);this.subject=$,this.name="NoResponders"}}kr1.NoRespondersError=lZ0;class dZ0 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 dZ0($,X,Q,Y)}}kr1.PermissionViolationError=dZ0;kr1.errors={AuthorizationError:cZ0,ClosedConnectionError:Yn0,ConnectionError:Jn0,DrainingConnectionError:Gn0,InvalidArgumentError:hZ0,InvalidOperationError:Qn0,InvalidSubjectError:Xn0,NoRespondersError:lZ0,PermissionViolationError:dZ0,ProtocolError:Kn0,RequestError:Wn0,TimeoutError:Hn0,UserAuthenticationExpiredError:uZ0}});var gJ=_((xr1)=>{Object.defineProperty(xr1,"__esModule",{value:!0});xr1.SimpleMutex=xr1.Perf=void 0;xr1.extend=wo6;xr1.render=Do6;xr1.timeout=Eo6;xr1.delay=jo6;xr1.deadline=zo6;xr1.deferred=Nn0;xr1.debugDeferred=Po6;xr1.shuffle=Ao6;xr1.collect=To6;xr1.jitter=vr1;xr1.backoff=Ro6;xr1.nanos=Io6;xr1.millis=qo6;xr1.randomToken=ko6;var Lo6=$G(),Fn0=ZG();function wo6($,...Z){for(let X=0;X<Z.length;X++){let Q=Z[X];Object.keys(Q).forEach(function(Y){$[Y]=Q[Y]})}return $}function Do6($){return Lo6.TD.decode($).replace(/\n/g,"\u240A").replace(/\r/g,"\u240D")}function Eo6($,Z=!0){let X=Z?new Fn0.TimeoutError:null,Q,Y,G=new Promise((J,K)=>{Q={cancel:()=>{if(Y)clearTimeout(Y)}},Y=setTimeout(()=>{if(X===null)K(new Fn0.TimeoutError);else K(X)},$)});return Object.assign(G,Q)}function jo6($=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 zo6($,Z=1000){let X=Nn0(),Q=setTimeout(()=>{X.reject(new Fn0.TimeoutError)},Z);try{return await Promise.race([$,X])}finally{clearTimeout(Q)}}function Nn0(){let $={},Z=new Promise((X,Q)=>{$={resolve:X,reject:Q}});return Object.assign(Z,$)}function Po6(){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 Ao6($){for(let Z=$.length-1;Z>0;Z--){let X=Math.floor(Math.random()*(Z+1));[$[Z],$[X]]=[$[X],$[Z]]}return $}async function To6($){let Z=[];for await(let X of $)Z.push(X);return Z}class Cr1{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})}),$}}xr1.Perf=Cr1;class _r1{max;current;waiting;constructor($=1){this.max=$,this.current=0,this.waiting=[]}lock(){if(this.current++,this.current<=this.max)return Promise.resolve();let $=Nn0();return this.waiting.push($),$}unlock(){this.current--,this.waiting.pop()?.resolve()}}xr1.SimpleMutex=_r1;function vr1($){if($===0)return 0;return Math.floor($/2+Math.random()*$)}function Ro6($=[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 vr1(X>Z?$[Z]:$[X])}}}function Io6($){return $*1e6}function qo6($){return Math.floor($/1e6)}var Mo6="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",XN=new Uint8Array(62);for(let $=0;$<62;$++)XN[$]=Mo6.charCodeAt($);var Vo6=218340105584896;function ko6(){let $=Math.floor(Math.random()*Vo6),Z=$%62,X=XN[Z];$=($-Z)/62,Z=$%62;let Q=XN[Z];$=($-Z)/62,Z=$%62;let Y=XN[Z];$=($-Z)/62,Z=$%62;let G=XN[Z];$=($-Z)/62,Z=$%62;let J=XN[Z];$=($-Z)/62,Z=$%62;let K=XN[Z];$=($-Z)/62,Z=$%62;let W=XN[Z];$=($-Z)/62;let H=XN[$];return String.fromCharCode(X,Q,Y,G,J,K,W,H)}});var lr1=_((ur1)=>{Object.defineProperty(ur1,"__esModule",{value:!0});ur1.nuid=ur1.NuidImpl=void 0;var io6="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",oB=62,iZ0=12,gr1=10,br1=33,no6=333,yr1=iZ0+gr1,Bn0=new Uint8Array(oB);for(let $=0;$<oB;$++)Bn0[$]=io6.charCodeAt($);var mZ0=4294967296,hr1=BigInt(oB)**BigInt(gr1),li=Number(hr1/(1n<<32n)),Un0=Number(hr1%(1n<<32n));function po6($){for(let Z=0;Z<$.length;Z++)$[Z]=Math.floor(Math.random()*256)}function to6($){if(globalThis?.crypto?.getRandomValues)globalThis.crypto.getRandomValues($);else po6($)}class On0{buf;cbuf;seqHi;seqLo;inc;inited;constructor(){this.buf=new Uint8Array(yr1),this.cbuf=new Uint8Array(iZ0),this.inited=!1}init(){this.inited=!0,this.setPre(),this.initSeqAndInc(),this.fillSeq()}initSeqAndInc(){let $=0;do this.seqHi=Math.floor(Math.random()*(li+1)),this.seqLo=Math.floor(Math.random()*mZ0);while($++<8&&this.seqHi===li&&this.seqLo>=Un0);if(this.seqHi===li&&this.seqLo>=Un0)this.seqLo=0;this.inc=Math.random()*(no6-br1)+br1|0}setPre(){to6(this.cbuf);for(let $=0;$<iZ0;$++)this.buf[$]=Bn0[this.cbuf[$]%oB]}fillSeq(){let $=this.seqHi,Z=this.seqLo;for(let X=yr1-1;X>=iZ0;X--){let Q=Math.floor($/oB),G=($-Q*oB)*mZ0+Z,J=Math.floor(G/oB),K=G-J*oB;this.buf[X]=Bn0[K],$=Q,Z=J}}next(){if(!this.inited)this.init();if(this.seqLo+=this.inc,this.seqLo>=mZ0)this.seqLo-=mZ0,this.seqHi+=1;if(this.seqHi>li||this.seqHi===li&&this.seqLo>=Un0)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()}}ur1.NuidImpl=On0;ur1.nuid=new On0});var nr1=_((mr1)=>{Object.defineProperty(mr1,"__esModule",{value:!0});mr1.nuid=mr1.Nuid=void 0;var dr1=lr1();mr1.Nuid=dr1.NuidImpl;mr1.nuid=dr1.nuid});var pZ0=_((nZ0)=>{Object.defineProperty(nZ0,"__esModule",{value:!0});nZ0.nuid=nZ0.Nuid=void 0;var pr1=nr1();Object.defineProperty(nZ0,"Nuid",{enumerable:!0,get:function(){return pr1.Nuid}});Object.defineProperty(nZ0,"nuid",{enumerable:!0,get:function(){return pr1.nuid}})});var rB=_((tr1)=>{Object.defineProperty(tr1,"__esModule",{value:!0});tr1.DEFAULT_HOST=tr1.DEFAULT_PORT=tr1.Match=void 0;tr1.syncIterator=$r6;tr1.createInbox=Zr6;var so6=pZ0(),eo6=ZG();tr1.Match={Exact:"exact",CanonicalMIME:"canonical",IgnoreCase:"insensitive"};function $r6($){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 Zr6($=""){if($=$||"_INBOX",typeof $!=="string")throw TypeError("prefix must be a string");return $.split(".").forEach((Z)=>{if(Z==="*"||Z===">")throw eo6.InvalidArgumentError.format("prefix",`cannot have wildcards ('${$}')`)}),`${$}.${so6.nuid.next()}`}tr1.DEFAULT_PORT=4222;tr1.DEFAULT_HOST="127.0.0.1"});var di=_((sr1)=>{Object.defineProperty(sr1,"__esModule",{value:!0});sr1.DataBuffer=void 0;var rr1=$G();class ar1{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 rr1.TE.encode($)}static toAscii($){return rr1.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}}sr1.DataBuffer=ar1});var VE=_((Za1)=>{Object.defineProperty(Za1,"__esModule",{value:!0});Za1.LF=Za1.CR=Za1.CRLF=Za1.CR_LF_LEN=Za1.CR_LF=void 0;Za1.setTransportFactory=Hr6;Za1.defaultPort=Fr6;Za1.getUrlParseFn=Nr6;Za1.newTransport=Ur6;Za1.getResolveFn=Br6;Za1.protoLen=$a1;Za1.extractProtocolMessage=Or6;var Jr6=$G(),Kr6=rB(),Wr6=di(),XG;function Hr6($){XG=$}function Fr6(){return XG!==void 0&&XG.defaultPort!==void 0?XG.defaultPort:Kr6.DEFAULT_PORT}function Nr6(){return XG!==void 0&&XG.urlParseFn?XG.urlParseFn:void 0}function Ur6(){if(!XG||typeof XG.factory!=="function")throw Error("transport fn is not set");return XG.factory()}function Br6(){return XG!==void 0&&XG.dnsResolveFn?XG.dnsResolveFn:void 0}Za1.CR_LF=`\r
1388
1388
  `;Za1.CR_LF_LEN=Za1.CR_LF.length;Za1.CRLF=Wr6.DataBuffer.fromAscii(Za1.CR_LF);Za1.CR=new Uint8Array(Za1.CRLF)[0];Za1.LF=new Uint8Array(Za1.CRLF)[1];function $a1($){for(let Z=0;Z<$.length;Z++){let X=Z+1;if($.byteLength>X&&$[Z]===Za1.CR&&$[X]===Za1.LF)return X+1}return 0}function Or6($){let Z=$a1($);if(Z>0){let Q=new Uint8Array($).slice(0,Z);return Jr6.TD.decode(Q)}return""}});var jn0=_((Ha1)=>{Object.defineProperty(Ha1,"__esModule",{value:!0});Ha1.ipV4=Ja1;Ha1.isIP=Ir6;Ha1.parseIP=Ka1;var mi=4,kE=16,tZ0=48,Ga1=57,Qa1=65,Tr6=70,Ya1=97,Rr6=102,En0=16777215;function Ja1($,Z,X,Q){let Y=new Uint8Array(kE);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 Ir6($){return Ka1($)!==void 0}function Ka1($){for(let Z=0;Z<$.length;Z++)switch($[Z]){case".":return Wa1($);case":":return qr6($)}return}function Wa1($){let Z=new Uint8Array(mi);for(let X=0;X<mi;X++){if($.length===0)return;if(X>0){if($[0]!==".")return;$=$.substring(1)}let{n:Q,c:Y,ok:G}=Mr6($);if(!G||Q>255)return;$=$.substring(Y),Z[X]=Q}return Ja1(Z[0],Z[1],Z[2],Z[3])}function qr6($){let Z=new Uint8Array(kE),X=-1;if($.length>=2&&$[0]===":"&&$[1]===":"){if(X=0,$=$.substring(2),$.length===0)return Z}let Q=0;while(Q<kE){let{n:Y,c:G,ok:J}=Vr6($);if(!J||Y>65535)return;if(G<$.length&&$[G]==="."){if(X<0&&Q!=kE-mi)return;if(Q+mi>kE)return;let K=Wa1($);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+=mi;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<kE){if(X<0)return;let Y=kE-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 Mr6($){let Z=0,X=0;for(Z=0;Z<$.length&&tZ0<=$.charCodeAt(Z)&&$.charCodeAt(Z)<=Ga1;Z++)if(X=X*10+($.charCodeAt(Z)-tZ0),X>=En0)return{n:En0,c:Z,ok:!1};if(Z===0)return{n:0,c:0,ok:!1};return{n:X,c:Z,ok:!0}}function Vr6($){let Z=0,X=0;for(X=0;X<$.length;X++){if(tZ0<=$.charCodeAt(X)&&$.charCodeAt(X)<=Ga1)Z*=16,Z+=$.charCodeAt(X)-tZ0;else if(Ya1<=$.charCodeAt(X)&&$.charCodeAt(X)<=Rr6)Z*=16,Z+=$.charCodeAt(X)-Ya1+10;else if(Qa1<=$.charCodeAt(X)&&$.charCodeAt(X)<=Tr6)Z*=16,Z+=$.charCodeAt(X)-Qa1+10;else break;if(Z>=En0)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 In0=_((Na1)=>{Object.defineProperty(Na1,"__esModule",{value:!0});Na1.Servers=Na1.ServerImpl=void 0;Na1.isIPV4OrHostname=Fa1;Na1.hostPort=Rn0;var zn0=VE(),Pn0=gJ(),An0=jn0(),_r6=rB(),vr6=ZG();function Fa1($){if($.indexOf("[")!==-1||$.indexOf("::")!==-1)return!1;if($.indexOf(".")!==-1)return!0;if($.split(":").length<=2)return!0;return!1}function Tn0($){return!Fa1($)}function xr6($){let X=$.toUpperCase().indexOf("::FFFF:");if(X!==-1&&$.indexOf(".")!==-1){let Q=$.substring(X+7);return Q=Q.replace("[",""),Q.replace("]","")}return $}function Rn0($){if($=$.trim(),$.match(/^(.*:\/\/)(.*)/m))$=$.replace(/^(.*:\/\/)(.*)/gm,"$2");if($=xr6($),Tn0($)&&$.indexOf("[")===-1)$=`[${$}]`;let Z=Tn0($)?$.match(/(]:)(\d+)/):$.match(/(:)(\d+)/),X=Z&&Z.length===3&&Z[1]&&Z[2]?parseInt(Z[2]):_r6.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 rb{src;listen;hostname;port;didConnect;reconnects;lastConnect;gossiped;tlsName;resolves;constructor($,Z=!1){this.src=$,this.tlsName="";let X=Rn0($);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,An0.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}://${Tn0(Q)?"["+Q+"]":Q}`);G.port=`${this.port}`;let J=new rb(G.host,!1);J.tlsName=this.hostname,Z.push(J)}}if($.randomize)(0,Pn0.shuffle)(Z);return this.resolves=Z,Z}}Na1.ServerImpl=rb;class oZ0{firstSelect;servers;currentServer;tlsName;randomize;constructor($={}){this.firstSelect=!0,this.servers=[],this.tlsName="",this.randomize=$.randomize||!1}setServers($){if(!Array.isArray($)||$.length===0)throw vr6.InvalidArgumentError.format("servers","cannot be empty");let Z=(0,zn0.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}=Rn0(Y),J=X.get(G);if(J)J.gossiped=!1,Q.push(J);else Q.push(new rb(Y))}if(this.randomize)(0,Pn0.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,An0.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,zn0.getUrlParseFn)();$=X?X($):$;let Q=new rb($,Z);if((0,An0.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 oZ0.freezeAll(this.servers)}snapshotForHandler(){let $=this.currentServer;if(!$)return this.snapshot();let Z=this.servers.indexOf($);if(Z<=0)return this.snapshot();return oZ0.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,zn0.getUrlParseFn)(),G=new Map;if($.connect_urls&&$.connect_urls.length>0)$.connect_urls.forEach((K)=>{K=Y?Y(K,Z):K;let W=new rb(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,Pn0.shuffle)(W),this.servers=K?[K,...W]:W}return{added:X,deleted:Q}}}Na1.Servers=oZ0});var rZ0=_((La1)=>{Object.defineProperty(La1,"__esModule",{value:!0});La1.QueuedIteratorImpl=void 0;var qn0=gJ(),Ba1=ZG();class Oa1{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,qn0.deferred)(),this.yields=[],this.iterClosed=(0,qn0.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 Ba1.InvalidOperationError("iterator cannot be used when a callback is registered");if(this.yielding)throw new Ba1.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,qn0.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}}La1.QueuedIteratorImpl=Oa1});var Mn0=_((ja1)=>{Object.defineProperty(ja1,"__esModule",{value:!0});ja1.MuxSubscription=void 0;var gr6=rB(),Da1=ZG();class Ea1{baseInbox;reqs;constructor(){this.reqs=new Map}size(){return this.reqs.size}init($){return this.baseInbox=`${(0,gr6.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 Da1.NoRespondersError(Q.requestSubject):null;Q.resolver($,Z)}}}}close(){let $=new Da1.RequestError("connection closed");this.reqs.forEach((Z)=>{Z.resolver($,{})})}}ja1.MuxSubscription=Ea1});var Vn0=_((Aa1)=>{Object.defineProperty(Aa1,"__esModule",{value:!0});Aa1.Heartbeat=void 0;var hr6=gJ();class Pa1{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,hr6.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})}}Aa1.Heartbeat=Pa1});var Cn0=_((Ma1)=>{Object.defineProperty(Ma1,"__esModule",{value:!0});Ma1.DenoBuffer=Ma1.MAX_SIZE=Ma1.AssertionError=void 0;Ma1.assert=Ia1;Ma1.concat=qa1;Ma1.append=cr6;Ma1.readAll=lr6;Ma1.writeAll=dr6;var ur6=$G();class kn0 extends Error{constructor($){super($);this.name="AssertionError"}}Ma1.AssertionError=kn0;function Ia1($,Z="Assertion failed."){if(!$)throw new kn0(Z)}var Ra1=32768;Ma1.MAX_SIZE=4294967294;function aZ0($,Z,X=0){let Q=Z.byteLength-X;if($.byteLength>Q)$=$.subarray(0,Q);return Z.set($,X),$.byteLength}function qa1($,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 cr6($,Z){return qa1($,Uint8Array.of(Z))}class Sn0{_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($){Ia1($<=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=aZ0(this._buf.subarray(this._off),$);return this._off+=Z,Z}writeByte($){return this.write(Uint8Array.of($))}writeString($){return this.write(ur6.TE.encode($))}write($){let Z=this._grow($.byteLength);return aZ0($,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)aZ0(this._buf.subarray(this._off),this._buf);else if(Q+$>Ma1.MAX_SIZE)throw Error("The buffer cannot be grown beyond the maximum size.");else{let Y=new Uint8Array(Math.min(2*Q+$,Ma1.MAX_SIZE));aZ0(this._buf.subarray(this._off),Y),this._buf=Y}return this._off=0,this._reslice(Math.min(Z+$,Ma1.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(Ra1);while(!0){let Q=this.capacity-this.length<Ra1,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}}}Ma1.DenoBuffer=Sn0;function lr6($){let Z=new Sn0;return Z.readFrom($),Z.bytes()}function dr6($,Z){let X=0;while(X<Z.length)X+=$.write(Z.subarray(X))}});var xn0=_((_a1)=>{Object.defineProperty(_a1,"__esModule",{value:!0});_a1.cc=_a1.State=_a1.Parser=_a1.Kind=void 0;_a1.describe=rr6;var _n0=Cn0(),vn0=$G();_a1.Kind={OK:0,ERR:1,MSG:2,INFO:3,PING:4,PONG:5};function rr6($){let Z,X="";switch($.kind){case _a1.Kind.MSG:Z="MSG";break;case _a1.Kind.OK:Z="OK";break;case _a1.Kind.ERR:Z="ERR",X=vn0.TD.decode($.data);break;case _a1.Kind.PING:Z="PING";break;case _a1.Kind.PONG:Z="PONG";break;case _a1.Kind.INFO:Z="INFO",X=vn0.TD.decode($.data)}return`${Z}: ${X}`}function ka1(){let $={};return $.sid=-1,$.hdr=-1,$.size=-1,$}var Sa1=48,ar6=57,ab=67108864;class Ca1{dispatcher;state;as;drop;hdr;ma;argBuf;msgBuf;constructor($){this.dispatcher=$,this.state=_a1.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 _a1.State.OP_START:switch(X){case _a1.cc.M:case _a1.cc.m:this.state=_a1.State.OP_M,this.hdr=-1,this.ma=ka1();break;case _a1.cc.H:case _a1.cc.h:this.state=_a1.State.OP_H,this.hdr=0,this.ma=ka1();break;case _a1.cc.P:case _a1.cc.p:this.state=_a1.State.OP_P;break;case _a1.cc.PLUS:this.state=_a1.State.OP_PLUS;break;case _a1.cc.MINUS:this.state=_a1.State.OP_MINUS;break;case _a1.cc.I:case _a1.cc.i:this.state=_a1.State.OP_I;break;default:throw this.fail($.subarray(Z))}break;case _a1.State.OP_H:switch(X){case _a1.cc.M:case _a1.cc.m:this.state=_a1.State.OP_M;break;default:throw this.fail($.subarray(Z))}break;case _a1.State.OP_M:switch(X){case _a1.cc.S:case _a1.cc.s:this.state=_a1.State.OP_MS;break;default:throw this.fail($.subarray(Z))}break;case _a1.State.OP_MS:switch(X){case _a1.cc.G:case _a1.cc.g:this.state=_a1.State.OP_MSG;break;default:throw this.fail($.subarray(Z))}break;case _a1.State.OP_MSG:switch(X){case _a1.cc.SPACE:case _a1.cc.TAB:this.state=_a1.State.OP_MSG_SPC;break;default:throw this.fail($.subarray(Z))}break;case _a1.State.OP_MSG_SPC:switch(X){case _a1.cc.SPACE:case _a1.cc.TAB:continue;default:this.state=_a1.State.MSG_ARG,this.as=Z}break;case _a1.State.MSG_ARG:switch(X){case _a1.cc.CR:this.drop=1;break;case _a1.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=_a1.State.MSG_PAYLOAD,Z=this.as+this.ma.size-1;break}default:if(this.argBuf)this.argBuf.writeByte(X)}break;case _a1.State.MSG_PAYLOAD:if(this.msgBuf)if(this.msgBuf.length>=this.ma.size){let Q=this.msgBuf.bytes({copy:!1});this.dispatcher.push({kind:_a1.Kind.MSG,msg:this.ma,data:Q}),this.argBuf=void 0,this.msgBuf=void 0,this.state=_a1.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:_a1.Kind.MSG,msg:this.ma,data:$.subarray(this.as,Z)}),this.argBuf=void 0,this.msgBuf=void 0,this.state=_a1.State.MSG_END;break;case _a1.State.MSG_END:switch(X){case _a1.cc.NL:this.drop=0,this.as=Z+1,this.state=_a1.State.OP_START;break;default:continue}break;case _a1.State.OP_PLUS:switch(X){case _a1.cc.O:case _a1.cc.o:this.state=_a1.State.OP_PLUS_O;break;default:throw this.fail($.subarray(Z))}break;case _a1.State.OP_PLUS_O:switch(X){case _a1.cc.K:case _a1.cc.k:this.state=_a1.State.OP_PLUS_OK;break;default:throw this.fail($.subarray(Z))}break;case _a1.State.OP_PLUS_OK:switch(X){case _a1.cc.NL:this.dispatcher.push({kind:_a1.Kind.OK}),this.drop=0,this.state=_a1.State.OP_START;break}break;case _a1.State.OP_MINUS:switch(X){case _a1.cc.E:case _a1.cc.e:this.state=_a1.State.OP_MINUS_E;break;default:throw this.fail($.subarray(Z))}break;case _a1.State.OP_MINUS_E:switch(X){case _a1.cc.R:case _a1.cc.r:this.state=_a1.State.OP_MINUS_ER;break;default:throw this.fail($.subarray(Z))}break;case _a1.State.OP_MINUS_ER:switch(X){case _a1.cc.R:case _a1.cc.r:this.state=_a1.State.OP_MINUS_ERR;break;default:throw this.fail($.subarray(Z))}break;case _a1.State.OP_MINUS_ERR:switch(X){case _a1.cc.SPACE:case _a1.cc.TAB:this.state=_a1.State.OP_MINUS_ERR_SPC;break;default:throw this.fail($.subarray(Z))}break;case _a1.State.OP_MINUS_ERR_SPC:switch(X){case _a1.cc.SPACE:case _a1.cc.TAB:continue;default:this.state=_a1.State.MINUS_ERR_ARG,this.as=Z}break;case _a1.State.MINUS_ERR_ARG:switch(X){case _a1.cc.CR:this.drop=1;break;case _a1.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:_a1.Kind.ERR,data:Q}),this.drop=0,this.as=Z+1,this.state=_a1.State.OP_START;break}default:if(this.argBuf)this.argBuf.write(Uint8Array.of(X))}break;case _a1.State.OP_P:switch(X){case _a1.cc.I:case _a1.cc.i:this.state=_a1.State.OP_PI;break;case _a1.cc.O:case _a1.cc.o:this.state=_a1.State.OP_PO;break;default:throw this.fail($.subarray(Z))}break;case _a1.State.OP_PO:switch(X){case _a1.cc.N:case _a1.cc.n:this.state=_a1.State.OP_PON;break;default:throw this.fail($.subarray(Z))}break;case _a1.State.OP_PON:switch(X){case _a1.cc.G:case _a1.cc.g:this.state=_a1.State.OP_PONG;break;default:throw this.fail($.subarray(Z))}break;case _a1.State.OP_PONG:switch(X){case _a1.cc.NL:this.dispatcher.push({kind:_a1.Kind.PONG}),this.drop=0,this.state=_a1.State.OP_START;break}break;case _a1.State.OP_PI:switch(X){case _a1.cc.N:case _a1.cc.n:this.state=_a1.State.OP_PIN;break;default:throw this.fail($.subarray(Z))}break;case _a1.State.OP_PIN:switch(X){case _a1.cc.G:case _a1.cc.g:this.state=_a1.State.OP_PING;break;default:throw this.fail($.subarray(Z))}break;case _a1.State.OP_PING:switch(X){case _a1.cc.NL:this.dispatcher.push({kind:_a1.Kind.PING}),this.drop=0,this.state=_a1.State.OP_START;break}break;case _a1.State.OP_I:switch(X){case _a1.cc.N:case _a1.cc.n:this.state=_a1.State.OP_IN;break;default:throw this.fail($.subarray(Z))}break;case _a1.State.OP_IN:switch(X){case _a1.cc.F:case _a1.cc.f:this.state=_a1.State.OP_INF;break;default:throw this.fail($.subarray(Z))}break;case _a1.State.OP_INF:switch(X){case _a1.cc.O:case _a1.cc.o:this.state=_a1.State.OP_INFO;break;default:throw this.fail($.subarray(Z))}break;case _a1.State.OP_INFO:switch(X){case _a1.cc.SPACE:case _a1.cc.TAB:this.state=_a1.State.OP_INFO_SPC;break;default:throw this.fail($.subarray(Z))}break;case _a1.State.OP_INFO_SPC:switch(X){case _a1.cc.SPACE:case _a1.cc.TAB:continue;default:this.state=_a1.State.INFO_ARG,this.as=Z}break;case _a1.State.INFO_ARG:switch(X){case _a1.cc.CR:this.drop=1;break;case _a1.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:_a1.Kind.INFO,data:Q}),this.drop=0,this.as=Z+1,this.state=_a1.State.OP_START;break}default:if(this.argBuf)this.argBuf.writeByte(X)}break;default:throw this.fail($.subarray(Z))}}if((this.state===_a1.State.MSG_ARG||this.state===_a1.State.MINUS_ERR_ARG||this.state===_a1.State.INFO_ARG)&&!this.argBuf)this.argBuf=new _n0.DenoBuffer($.subarray(this.as,Z-this.drop));if(this.state===_a1.State.MSG_PAYLOAD&&!this.msgBuf){if(!this.argBuf)this.cloneMsgArg();this.msgBuf=new _n0.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 _n0.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 _a1.cc.SPACE:case _a1.cc.TAB:case _a1.cc.CR:case _a1.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],ab);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],ab);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}: ${vn0.TD.decode($)}`)}processHeaderMsgArgs($){let Z=[],X=-1;for(let Q=0;Q<$.length;Q++)switch($[Q]){case _a1.cc.SPACE:case _a1.cc.TAB:case _a1.cc.CR:case _a1.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],ab),this.ma.size=this.protoParseInt(Z[3],ab);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],ab),this.ma.size=this.protoParseInt(Z[4],ab);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]<Sa1||$[Q]>ar6)return-1;X=X*10+($[Q]-Sa1)}return Z!==void 0&&X>Z?-1:X}}_a1.Parser=Ca1;_a1.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};_a1.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 $70=_((xa1)=>{Object.defineProperty(xa1,"__esModule",{value:!0});xa1.MsgHdrsImpl=void 0;xa1.canonicalMIMEHeaderKey=bn0;xa1.headers=$a6;var va1=$G(),hJ=rB(),eZ0=ZG();function bn0($){let F=!0,N=Array($.length);for(let U=0;U<$.length;U++){let B=$.charCodeAt(U);if(B===58||B<33||B>126)throw eZ0.InvalidArgumentError.format("header",`'${$[U]}' is not a valid character in a header name`);if(F&&97<=B&&B<=122)B-=32;else if(!F&&65<=B&&B<=90)B+=32;N[U]=B,F=B==45}return String.fromCharCode(...N)}function $a6($=0,Z=""){if($===0&&Z!=="")throw eZ0.InvalidArgumentError.format("code","is required");else if($>0&&Z==="")throw eZ0.InvalidArgumentError.format("description","is required");return new sb($,Z)}var fn0="NATS/1.0";class sb{_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 sb,Q=va1.TD.decode($).split(`\r
1389
1389
  `),Y=Q[0];if(Y!==fn0){let G=Y.replace(fn0,"").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 $=fn0;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
1390
1390
  ${Z}: ${X[Q]}`;return`${$}\r
@@ -2910,7 +2910,7 @@ Respond with the structured verdict and a short reason.`,Fg$;var Ng$=w(()=>{v4()
2910
2910
  ${G.join(`
2911
2911
  `)}`:Y}function vJ6($){let Z=new Set;for(let X of $)for(let Q of X.split(`
2912
2912
  `)){let Y=Q.trim();if(/^Co-authored-by:\s/i.test(Y))Z.add(Y)}return[...Z]}var og$=200,RJ6=12,qJ6,kJ6=300,x91=3;var y91=w(()=>{S_();$A0();qJ6={aheadBy:0,behindBy:0,files:[]}});function bJ6($){if(!$||$.includes(".."))return!1;return fJ6.test($)}function ag$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!bJ6(Z))return null;let{__resolveType:X,...Q}=$;return{resolveType:Z,payload:Q}}function sg$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var fJ6;var eg$=w(()=>{fJ6=/^[\w./@-]+$/});function g91($){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 Ba($,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 $h$($,Z,X,Q){if(!Q.connectionId)throw new __("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let Y=$.organization?.id;if(!Y)throw new __(Q9);await oO({ctx:$,connectionId:Q.connectionId,organizationId:Y,forceRefresh:!0,onLegacyMintError:(H)=>{let N=H instanceof Error?H.message:Q9;throw new __(N)}});let{cloneUrl:G,gitUserName:J,gitUserEmail:W}=await rO(Q.connectionId,Q.owner,Q.name,$.db,$.vault).catch((H)=>{let{code:N,message:U}=A4$(H instanceof Error?H.message:String(H));throw N?new __(U):H}),K=nh($),F=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(!F.ok){let H=await BB(F,xJ6).catch(()=>F.statusText);throw Error(`Failed to refresh sandbox git credentials (${F.status}): ${H}`)}}var xJ6=10485760,__;var h91=w(()=>{dG();lP0();mp();Qm0();mx();__=class __ extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function gJ6($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!yJ6.test(Z))throw Error(`Invalid branch name: ${$}`)}function v_($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(uJ6)])}function cJ6($,Z,X){let Q=w5($)[Z]?.[X];return!!Q&&Object.keys(IY(Q)).length>0}function f_($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}async function eh($){let{virtualMcpMetadata:Z,connectionIds:X}=$.get("vmClaim"),Q=$.var.studioContext,Y=Ba(Z,X);if(!Y)throw new g4(404,"AUTH","repo","Project has no GitHub repository");let G=t(Q);return mP0(Q,G.id,Y)}function u91($,Z){if(Z instanceof dP0)return $.json({error:Z.message},429,{...C5,...Z.retryAfterMs===null?{}:{"Retry-After":String(Math.ceil(Z.retryAfterMs/1000))}});if(Z instanceof g4){let Q=Z.status===404?404:Z.status===409||Z.status===422?409:502;return $.json({error:Z.message},Q,C5)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},502,C5)}async function Qh$($,Z,X){let Q;try{Q=await fetch(Z,X)}catch{return $.json({error:"Preview unreachable"},502)}let Y;try{Y=await Q.text()}catch{return $.json({error:"Preview unreachable"},502)}return new Response(Y,{status:Q.status,headers:{"content-type":Q.headers.get("content-type")??"application/json"}})}async function Yh$($){try{let Z=await eh($),X=await ZA0(Z,$.get("vmClaim").branch);return $.json(X,200,C5)}catch(Z){return u91($,Z)}}function wa($,Z){let Q=(YA0.get($)??Promise.resolve()).catch(()=>{}).then(Z),Y=Q.catch(()=>{});return YA0.set($,Y),Y.finally(()=>{if(YA0.get($)===Y)YA0.delete($)}),Q}async function mZ($,Z,X){if($.get("vmClaim").fastPreview)return $.json({error:"sandbox not found: Fast Preview projects are sandbox-less"},404,C5);let Q=f_($);if(Q instanceof Response)return Q;let{claimName:Y,userId:G,projectRef:J}=$.get("vmClaim"),W=X?.method??"POST",K=null,F=new Headers;if(X?.jsonBody!==void 0)K=X.jsonBody,F.set("content-type","application/json");else if(X?.forwardJsonBody)K=await $.req.text(),F.set("content-type","application/json");let H=X?.signal,N={method:W,headers:F,body:K,...H?{signal:H}:{}},U=async()=>{let O=await Q.proxyDaemonRequest(Y,Z,N);if(X?.map404to410&&O.status===404){try{await O.body?.cancel()}catch{}if(await Q.adoptLiveClaim?.({userId:G,projectRef:J},Y))O=await Q.proxyDaemonRequest(Y,Z,N);if(O.status===404){try{await O.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",...C5}})}}let B=await O.text(),D=X?.redactRepoDirUnlessDesktop&&Q.kind!=="user-desktop"?dJ6(B):B,L=O.headers.get("content-type")??"application/json";return new Response(D,{status:O.status,headers:{"content-type":L,...C5}})};try{if(H){let O=U();return O.catch(()=>{}),await Promise.race([O,new Promise((D,L)=>{if(H.aborted)return L(H.reason);H.addEventListener("abort",()=>L(H.reason),{once:!0})})])}return await U()}catch(O){let B=O instanceof Error?O.message:String(O);return $.json({error:`Daemon unreachable: ${B}`},502)}}function dJ6($){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 GA0($,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){let W=`Daemon error (${G.status})`;try{W=JSON.parse(J).error??W}catch{}throw Error(W)}return JSON.parse(J)}function mJ6($){return Gh$.includes($)}var yJ6,Zh$=524288,hJ6=65536,uJ6=1e4,Xh$=2000,lJ6,YA0,C5,Gh$,Jh$=()=>{let $=new H1;$.use("/:virtualMcpId/:branch/*",lJ6),$.post("/:virtualMcpId/:branch/write",(X)=>mZ(X,"/_sandbox/write",{forwardJsonBody:!0,signal:v_(X)})),$.post("/:virtualMcpId/:branch/unlink",(X)=>mZ(X,"/_sandbox/unlink",{forwardJsonBody:!0,signal:v_(X)})),$.post("/:virtualMcpId/:branch/mkdir",(X)=>mZ(X,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:v_(X)})),$.post("/:virtualMcpId/:branch/rename",(X)=>mZ(X,"/_sandbox/rename",{forwardJsonBody:!0,signal:v_(X)})),$.post("/:virtualMcpId/:branch/read",(X)=>mZ(X,"/_sandbox/read",{forwardJsonBody:!0,signal:v_(X)})),$.post("/:virtualMcpId/:branch/glob",(X)=>mZ(X,"/_sandbox/glob",{forwardJsonBody:!0,signal:v_(X)})),$.post("/:virtualMcpId/:branch/grep",(X)=>mZ(X,"/_sandbox/grep",{forwardJsonBody:!0,signal:v_(X)})),$.post("/:virtualMcpId/:branch/exec/:script",async(X)=>{let Q=X.req.param("script");if(!Q)return X.json({error:"missing script name"},400);return mZ(X,`/_sandbox/exec/${encodeURIComponent(Q)}`)}),$.post("/:virtualMcpId/:branch/exec/:script/kill",async(X)=>{let Q=X.req.param("script");if(!Q)return X.json({error:"missing script name"},400);return mZ(X,`/_sandbox/exec/${encodeURIComponent(Q)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(X)=>mZ(X,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDirUnlessDesktop:!0})),$.put("/:virtualMcpId/:branch/config",(X)=>mZ(X,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(X)=>{let Q=X.req.param("step");if(!Q||!mJ6(Q))return X.json({error:`step must be one of: ${Gh$.join(", ")}`},400);if(Q==="start"){let Y=X.get("vmClaim");if(Y.runner){let G=t(X.var.studioContext),J=Ky(Y.virtualMcpMetadata);try{await lO0({ctx:X.var.studioContext,runner:Y.runner,handle:Y.claimName,orgId:G.id,userId:Y.callerUserId,entries:J})}catch(W){let K=W instanceof Error?W.message:String(W);return X.json({error:`Failed to push env to daemon: ${K}`},502)}}}return mZ(X,`/_sandbox/setup/${Q}`,{signal:X.req.raw.signal,map404to410:!0})}),$.get("/:virtualMcpId/:branch/events",(X)=>{let Q=X.get("vmClaim");if(!Q.runner)return IN(X,async(Y)=>{await Y.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this studio instance."})})});return Qg$(X,{ctx:X.var.studioContext,claimName:Q.claimName,runner:Q.runner,virtualMcpId:Q.virtualMcpId,branch:Q.branch,userId:Q.userId,projectRef:Q.projectRef,virtualMcpMetadata:Q.virtualMcpMetadata})}),$.get("/:virtualMcpId/:branch/git/status",(X)=>{if(X.get("vmClaim").fastPreview)return Yh$(X);return Z(X)});let Z=(X)=>mZ(X,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([X.req.raw.signal,AbortSignal.timeout(Xh$)])});return $.post("/:virtualMcpId/:branch/git/status",(X)=>{if(X.get("vmClaim").fastPreview)return Yh$(X);return mZ(X,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([X.req.raw.signal,AbortSignal.timeout(Xh$)])})}),$.post("/:virtualMcpId/:branch/git/diff",async(X)=>{let Q=X.get("vmClaim");if(Q.fastPreview)try{let Y=await X.req.json().catch(()=>({})),G=await eh(X),J=await XA0(G,Q.branch,Y.base);return X.json(J,200,C5)}catch(Y){return u91(X,Y)}return mZ(X,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})}),$.post("/:virtualMcpId/:branch/git/publish",async(X)=>{if(X.get("vmClaim").fastPreview)return X.json({ok:!0},200,C5);let Q=f_(X);if(Q instanceof Response)return Q;let{claimName:Y,virtualMcpMetadata:G,connectionIds:J}=X.get("vmClaim"),W=X.var.studioContext;return wa(Y,async()=>{try{await L91(W,Q,Y);let K=Ba(G,J);if(K)await $h$(W,Q,Y,K)}catch(K){if(K instanceof __)return X.json({error:K.message},403,C5);let F=K instanceof Error?K.message:String(K);return X.json({error:F},502,C5)}return mZ(X,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",async(X)=>{let Q=X.get("vmClaim");if(Q.fastPreview)return wa(Q.claimName,async()=>{let Y=await X.req.json().catch(()=>({})),G=Array.isArray(Y.filepaths)?Y.filepaths.filter((J)=>typeof J==="string"):[];if(G.length===0)return X.json({error:"filepaths is required"},400,C5);try{let J=await eh(X);return await rg$(J,Q.branch,G),X.json({ok:!0},200,C5)}catch(J){let W=J instanceof g4&&J.status===409?409:502,K=J instanceof Error?J.message:String(J);return X.json({error:K},W,C5)}});return wa(Q.claimName,()=>mZ(X,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(X)=>{let Q=X.get("vmClaim");if(Q.fastPreview)return wa(Q.claimName,async()=>{try{let W=await X.req.json().catch(()=>({})),K=await eh(X),F=W.base??await K.getDefaultBranch();return await QA0(K,Q.branch,F),X.json({ok:!0},200,C5)}catch(W){return u91(X,W)}});let Y=f_(X);if(Y instanceof Response)return Y;let{claimName:G}=X.get("vmClaim"),J=X.var.studioContext;return wa(G,async()=>{try{await L91(J,Y,G)}catch(W){let K=W instanceof Error?W.message:String(W);return X.json({error:K},502,C5)}return mZ(X,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",k9({maxSize:Zh$,onError:(X)=>X.json({error:"Payload too large"},413,C5)}),async(X)=>{let Q=X.get("vmClaim"),Y=null;if(!Q.fastPreview){let F=f_(X);if(F instanceof Response)return F;Y=F}let{claimName:G,userId:J,projectRef:W}=Q,K=X.var.studioContext;try{let F=await X.req.json().catch(()=>({})),H=F.status,N=F.diff,U=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[O,B]=z91(H)&&U?[H,N]:Y?await Promise.all([GA0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:W}),GA0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:W})]):await(async()=>{let L=await eh(X);return Promise.all([ZA0(L,Q.branch),XA0(L,Q.branch)])})(),D=await Kg$(K,O,B);return X.json(D,200,C5)}catch(F){let H=F instanceof Error?F.message:String(F);if(H==="SANDBOX_GONE")return X.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,C5);return X.json({error:H},502,C5)}}),$.post("/:virtualMcpId/:branch/git/judge-review",k9({maxSize:Zh$,onError:(X)=>X.json({error:"Payload too large"},413,C5)}),async(X)=>{let Q=X.get("vmClaim"),Y=null;if(!Q.fastPreview){let F=f_(X);if(F instanceof Response)return F;Y=F}let{claimName:G,userId:J,projectRef:W}=Q,K=X.var.studioContext;try{let F=await X.req.json().catch(()=>({})),H=F.status,N=F.diff,U=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[O,B]=z91(H)&&U?[H,N]:Y?await Promise.all([GA0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:W}),GA0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:W})]):await(async()=>{let L=await eh(X);return Promise.all([ZA0(L,Q.branch),XA0(L,Q.branch)])})(),D=await Hg$(K,O,B,typeof F.language==="string"?F.language:void 0);return X.json(D,200,C5)}catch(F){let H=F instanceof Error?F.message:String(F);if(H==="SANDBOX_GONE")return X.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,C5);return X.json({error:H},502,C5)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(X)=>{let Q=f_(X);if(Q instanceof Response)return Q;let{claimName:Y}=X.get("vmClaim"),G=X.req.query("path");if(!G||!G.startsWith("/")||G.startsWith("//")||G.includes("..")||G.includes("\\"))return X.json({error:"Path not allowed"},403);let J;try{J=await Q.getPreviewUrl(Y)}catch{return X.json({error:"Preview not available"},502)}if(!J)return X.json({error:"Preview not available"},502);let W=J.replace(/\/+$/,""),K=g91(`${W}${G}`);return Qh$(X,K?.url??`${W}${G}`,{...K?{headers:{host:K.hostHeader}}:{}})}),$.post("/:virtualMcpId/:branch/preview-invoke",k9({maxSize:hJ6,onError:(X)=>X.json({error:"Payload too large"},413)}),async(X)=>{let Q=f_(X);if(Q instanceof Response)return Q;let{claimName:Y}=X.get("vmClaim"),G;try{G=await Q.getPreviewUrl(Y)}catch{return X.json({error:"Preview not available"},502)}if(!G)return X.json({error:"Preview not available"},502);let J;try{J=await X.req.json()}catch{return X.json({error:"Invalid JSON body"},400)}if(!J||typeof J!=="object"||Array.isArray(J))return X.json({error:"Invalid JSON body"},400);let W=ag$(J);if(!W)return X.json({error:"Invalid or missing __resolveType"},400);let K=sg$(G,W.resolveType),F=g91(K);return Qh$(X,F?.url??K,{method:"POST",headers:{"content-type":"application/json",...F?{host:F.hostHeader}:{}},body:JSON.stringify(W.payload),signal:AbortSignal.timeout(30000)})}),$};var Wh$=w(()=>{D8();DN();ph();D91();IH();Zg$();_3();pX();O8();lB0();HB();Xg$();Yg$();Ip0();lp();T91();Ng$();k91();S_();y91();eg$();h91();yJ6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;lJ6=cP0(async($,Z)=>{let X=$.var.studioContext;try{r(X)}catch{return $.json({error:"Unauthorized"},401)}let Q=G1(X);if(!Q)return $.json({error:"Unauthorized"},401);let Y;try{Y=t(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{gJ6(J)}catch(O){let B=O instanceof Error?O.message:String(O);return $.json({error:B},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=Gp({orgId:Y.id,virtualMcpId:G,branch:J}),F=await bH(X,J,Q),H=$g$({userId:F,projectRef:K}),N=W.metadata??null;if(gW$(N).fastPreviewCapability&&!cJ6(N,F,J))return $.set("vmClaim",{claimName:H,callerUserId:Q,runner:null,virtualMcpId:G,branch:J,userId:F,projectRef:K,virtualMcpMetadata:N,connectionIds:W.connections?.map((O)=>O.connection_id)??[],fastPreview:!0}),Z();let U;try{U=(await sX(X,{userId:F,branch:J,virtualMcpMetadata:N})).provider}catch{U=null}if(!U)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:H,callerUserId:Q,runner:U,virtualMcpId:G,branch:J,userId:F,projectRef:K,virtualMcpMetadata:N,connectionIds:W.connections?.map((O)=>O.connection_id)??[]}),Z()});YA0=new Map;C5={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};Gh$=["clone","install","start"]});function Kh$($,Z,X){let Q=c91.get($);if(!Q)Q={pending:null,running:!1},c91.set($,Q);if(!Q.pending)Q.pending={set:new Map,del:new Set,deps:Z,resolvers:[],rejecters:[]};let Y=Q.pending;Y.deps=Z;for(let[J,W]of Object.entries(X.set??{}))Y.set.set(J,W),Y.del.delete(J);for(let J of X.delete??[])Y.del.add(J),Y.set.delete(J);let G=new Promise((J,W)=>{Y.resolvers.push(J),Y.rejecters.push(W)});if(!Q.running)pJ6($,Q);return G}async function pJ6($,Z){Z.running=!0;try{while(Z.pending){let X=Z.pending;Z.pending=null;try{let Q=await nJ6(X);for(let Y of X.resolvers)Y(Q)}catch(Q){for(let Y of X.rejecters)Y(Q)}}}finally{if(Z.running=!1,!Z.pending)c91.delete($)}}async function nJ6($){let{client:Z,branch:X,packagePath:Q}=$.deps;for(let Y=0;;Y++){let G=await sh(Z,X),J=await Z.getCommitTreeSha(G),W=await Z.getTreeRecursive(J),K=f91(W,Q),F=[],H=new Map(K.map((B)=>[B.path,{stem:B.stem,sha:B.sha}]));for(let[B,D]of $.set){let L=b91(K,B),E=`${JSON.stringify(D,null,2)}
2913
- `,j=await Z.createBlob(E);await pg$(Z.owner,Z.repo,j,E);let z=L[0]??`${eP0(Q)}/${V91(B)}.json`;F.push({path:z,mode:"100644",type:"blob",sha:j});let A=z.slice(z.lastIndexOf("/")+1,-5);H.set(z,{stem:A,sha:j,content:E});for(let P of L.slice(1))F.push({path:P,mode:"100644",type:"blob",sha:null}),H.delete(P)}for(let B of $.del)for(let D of b91(K,B))F.push({path:D,mode:"100644",type:"blob",sha:null}),H.delete(D);if(F.length===0)return G;let N=Q?`${Q}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((B)=>B.type==="blob"&&B.path===N)){let B=await Promise.all([...H.values()].map(async(j)=>({stem:j.stem,content:j.content??await Z.getBlobText(j.sha)}))),{decofile:D,skipped:L}=Ha(B);if(L.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:`${Z.owner}/${Z.repo}`,branch:X,packagePath:Q,blocks:L.map((j)=>j.key)});let E=await Z.createBlob(D);F.push({path:N,mode:"100644",type:"blob",sha:E})}let U=await Z.createTree(J,F),O=await Z.createCommit({message:tJ6($),treeSha:U,parentShas:[G]});try{return await Z.updateRef(X,O),O}catch(B){if(!(B instanceof g4&&B.status===422)||Y>=iJ6-1)throw B;await M$(nZ(2000,200,Y,2,0.5))}}}function tJ6($){let Z=(Y)=>{let G=Y.slice(0,3).join(", ");return Y.length>3?`${G} (+${Y.length-3} more)`:G},X=[];if($.set.size>0)X.push(`update ${Z([...$.set.keys()])}`);if($.del.size>0)X.push(`delete ${Z([...$.del])}`);let Q=`chore(decofile): ${X.join("; ")}`;return td0(Q,$.deps.coAuthor)}var iJ6=3,c91;var Fh$=w(()=>{fO0();pP0();u4();S_();$A0();c91=new Map});import{createHmac as Hh$,randomBytes as oJ6,timingSafeEqual as rJ6}from"crypto";function Nh$(){if(JA0)return JA0;let $;try{let Z=b0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return JA0=$?Buffer.from($):oJ6(32),JA0}function l91($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+aJ6)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=Hh$("sha256",Nh$()).update(Q).digest("base64url");return`${Q}.${Y}`}function Uh$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(Hh$("sha256",Nh$()).update(Q).digest("base64url"));if(Y.length!==G.length||!rJ6(Y,G))return!1;let J;try{J=JSON.parse(Buffer.from(Q,"base64url").toString())}catch{return!1}let W=Math.floor((Z.nowMs??Date.now())/1000);return J.o===Z.organizationId&&J.m===Z.virtualMcpId&&J.b===Z.branch&&typeof J.e==="number"&&J.e>=W}var aJ6=21600000,JA0=null;var Oh$=w(()=>{R$()});import{z as $u}from"zod";function eJ6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&sJ6.test($)}function wh$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function WA0($){let Z=$.get("decofileScope");return mP0($.var.studioContext,Z.organizationId,Z.githubRepo)}function KA0($,Z){if(Z instanceof g4){let Q=Z.status===404?404:Z.status===409?409:Z.status===422?409:502;return $.json({error:Z.message},Q)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},500)}function Dh$(){let $=new H1;return $.use("/:virtualMcpId/:branch",Bh$),$.use("/:virtualMcpId/:branch/*",Bh$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await WA0(Z),Y=await ng$(Q,X.branch,X.packagePath,{createBranchIfMissing:!!X.userId}),G={ETag:`"${Y.sha}"`,"Cache-Control":"no-store","Access-Control-Allow-Origin":"*"};if(Z.req.header("if-none-match")===`"${Y.sha}"`)return Z.body(null,304,G);if(!X.userId)return Z.body(Y.decofile,200,{...G,"content-type":"application/json"});let J=l91({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(wh$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return KA0(Z,Q)}}),$.patch("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=$36.safeParse(await Z.req.json().catch(()=>null));if(!Y.success)return Z.json({error:"Invalid body",details:Y.error.issues},400);let G=Y.data;for(let J of[...Object.keys(G.set??{}),...G.delete??[]])try{iP0(J)}catch(W){let K=W instanceof Error?W.message:String(W);return Z.json({error:K},400)}for(let[J,W]of Object.entries(G.set??{}))if(typeof W!=="object"||W===null||Array.isArray(W))return Z.json({error:`Block "${J}" must be a JSON object`},400);try{let J=await WA0(Z),W=await Kh$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:nh(Q)},G),K=l91({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:W,token:K,apiHost:wh$(Z)})}catch(J){return KA0(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await WA0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({error:"Branch is already the default branch"},400);let G=`chore(decofile): publish ${X.branch}`;try{let J;try{J=await Q.mergeBranch(Y,X.branch,G)}catch(W){if(!(W instanceof g4&&W.status===409))throw W;await QA0(Q,X.branch,Y),J=await Q.mergeBranch(Y,X.branch,G)}return J?Z.json({result:"merged",sha:J}):Z.json({result:"up-to-date"})}catch(J){if(J instanceof g4&&J.status===409)return Z.json({error:"merge-conflict"},409);if(J instanceof g4&&J.status===405){let K=await Q.findOpenPullRequest(Y,X.branch)??await Q.createPullRequest({base:Y,head:X.branch,title:`Publish ${X.branch}`});return Z.json({result:"pull-request",number:K.number,url:K.html_url})}throw J}}catch(Q){return KA0(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await WA0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});try{let{aheadBy:G,behindBy:J}=await Q.compare(Y,X.branch);return Z.json({baseBranch:Y,aheadBy:G,behindBy:J})}catch(G){if(G instanceof g4&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});throw G}}catch(Q){return KA0(Z,Q)}}),$}var sJ6,$36,Bh$;var Lh$=w(()=>{pP0();D8();D91();lP0();h91();k91();Fh$();Oh$();y91();S_();$A0();sJ6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;$36=$u.object({set:$u.record($u.string(),$u.unknown()).optional(),delete:$u.array($u.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}),Bh$=cP0(async($,Z)=>{let X=$.var.studioContext,Q=X.organization;if(!Q)return $.json({error:"Organization scope required"},500);let Y=$.req.param("virtualMcpId"),G=$.req.param("branch");if(!Y||!G)return $.json({error:"virtualMcpId and branch are required"},400);if(!eJ6(G))return $.json({error:`Invalid branch name: ${G}`},400);let J=X.auth?.user?.id??null;if(!J){let O=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!O||!Uh$(O,{organizationId:Q.id,virtualMcpId:Y,branch:G}))return $.json({error:"Unauthorized"},401)}let W=await X.storage.virtualMcps.findById(Y);if(!W||W.organization_id!==Q.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!cB0(K)||K?.fastPreview!==!0)return $.json({error:"Fast Preview is not enabled for this project"},404);let H=W.connections?.map((O)=>O.connection_id)??[],N=Ba(K,H);if(!N)return $.json({error:"Project has no GitHub repository"},404);let U=K?.runtime;return $.set("decofileScope",{organizationId:Q.id,virtualMcpId:Y,branch:G,packagePath:U?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:N,userId:J}),Z()})});var Eh$=($)=>{let Z=new H1;if(Z.use("*",P_),Z.route("/",YP0()),Z.route("/",gf$()),Z.route("/",cy$()),Z.route("/",gy$()),Z.route("/",gP0()),Z.route("/tools",ty$()),Z.route("/",iy$()),Z.route("/",zy$({kvStorage:$.kvStorage})),Z.route("/",Ey$()),Z.route("/fs",Cy$({getConnection:$.getNatsConnection})),Z.route("/sandbox",Jh$()),Z.route("/decofile",Dh$()),Z.route("/",by$()),Z.route("/deco-sites",JP0()),Z.route("/sso",sz0()),Z.route("/",hP0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",Sf$()),$.mountDevAssets)Z.route("/dev-assets",WP0({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("/",N_$()),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",vy$()),Z.route("/mcp",WD0()),Z.route("/mcp/self",yP0()),Z.route("/mcp",HD0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var jh$=w(()=>{D8();g61();Cf$();l61();KP0();xr();x61();jy$();Py$();_y$();ln();k61();ND0();F91();fy$();xy$();hy$();ly$();py$();N91();oy$();U91();KD0();Wh$();Lh$()});function Z36($){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}}))}var X36=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},zh$=()=>{let $=new H1;return $.use("*",X36),$.get("/",async(Z)=>{let X=b0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await dZ(Q,Y,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:Z36(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var Ph$=w(()=>{D8();R$();Zz0()});import{z as M1}from"zod";function GF($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function U36($){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 O36($,Z,X){try{return JSON.parse($)}catch{throw new Rh$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function B36($){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:O36(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 w36($){let Z=$.map((X)=>{let Q=X.function.parameters?hY(X.function.parameters):hY({type:"object",properties:{}});return[X.function.name,b$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function D36($){if(!$)return;return{openai:{response_format:$}}}function L36(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function Ah$($,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 Th$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var Q36=256,Y36,G36,J36,W36,K36,F36,H36,N36,Rh$,Ih$,qh$;var Mh$=w(()=>{v4();D8();ph();YN();Y36=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),G36=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),J36=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(G36).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),W36=M1.object({type:M1.literal("text")}),K36=M1.object({type:M1.literal("json_object")}),F36=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()})}),H36=M1.union([W36,K36,F36]),N36=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(J36),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(Y36).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:H36.optional(),user:M1.string().optional()});Rh$=class Rh$ extends Error{constructor($){super($);this.name="MessageConversionError"}};Ih$=new H1;Ih$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(GF("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(GF("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(GF("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=N36.safeParse(Q);if(!Y.success){let L=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(GF(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let G=Y.data,J=U36(G.model);if(!J)return $.json(GF("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)=>vD(j.providerId));if(!E)return $.json(GF("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 F;try{F=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(GF(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let H=F.aiSdk.languageModel(K),N=B36(G.messages),U=G.tools?w36(G.tools):void 0,O=D36(G.response_format),B=L36(),D=Math.floor(Date.now()/1000);if(G.stream)return IN($,async(L)=>{let E=Ah$(H,N,U,G,O,$.req.raw.signal);try{let j=nO(E),z=!1,A=0,P="",I=async()=>{if(P.length===0)return;let k=P;P="",await L.writeSSE({data:JSON.stringify({id:B,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:B,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>=Q36)await I()}else if(k.type==="tool-call"){await I();let q=A++;await L.writeSSE({data:JSON.stringify({id:B,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 I(),await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{},finish_reason:Th$(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 I(),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=Ah$(H,N,U,G,O,$.req.raw.signal),E=await iO(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:B,object:"chat.completion",created:D,model:G.model,choices:[{index:0,message:j,finish_reason:Th$(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(GF("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(GF(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(GF(Y.message,"server_error"),500)}});qh$=Ih$});function E36($){if(typeof $!=="object"||$===null)return!1;let X=$.githubRepo?.url;return typeof X==="string"&&X.length>0}function kh$(){let $=new H1;return $.use("*",async(Z,X)=>{await X(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let X=Z.get("studioContext"),Q=G1(X);if(!Q)return Z.json({error:"Authentication required"},401);let G=(Z.req.query("site")??"").trim().toLowerCase();if(!aK(G))return Z.json({error:"Invalid site slug"},400);let J=await X.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["organization.id as id","organization.slug as slug","organization.name as name","organization.metadata as metadata"]).where("member.userId","=",Q).execute(),W=[];for(let F of J){if(!F.slug||W7(F))continue;let H=await X.storage.virtualMcps.list(F.id);for(let N of H){if(N.title.toLowerCase()!==G)continue;if(!E36(N.metadata))continue;W.push({orgSlug:F.slug,orgName:F.name??F.slug,project:{id:N.id,title:N.title,icon:N.icon??null}})}}let K={matches:W};return Z.json(K)}),$}var Vh$=w(()=>{D8();N_()});var Ch$;var Sh$=w(()=>{Ch$={name:"decocms",version:"4.249.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","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.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 P36(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??z36}}var _h$,z36="https://ph.studio.decocms.com",vh$;var fh$=w(()=>{D8();qh0();WC();f9();R$();T61();Sh$();_h$=new H1;_h$.get("/",($)=>{let Z={version:Ch$.version,theme:yd1(),...TL().logo&&{logo:TL().logo},...IK()&&{internalUrl:BS1()},...b0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!b0().firecrawlApiKey,auth:ov$(),posthog:P36(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!IK()&&b0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});vh$=_h$});function Zu($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function d91($){return(Zu($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function xh$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Zu($))}&sz=${Z}`}function bh$($,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 yh$($){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()?bh$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):bh$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as l0}from"zod";var b_,A36,T36,R36,I36,gh$;var hh$=w(()=>{b_=l0.enum(["good","bad","neutral"]),A36=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:b_.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 $})),T36=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(A36)),R36={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()},I36=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:b_.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:b_.optional()}),l0.object({template:l0.literal("stats"),stats:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),tone:b_.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:b_.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(T36).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:b_.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:b_.optional()})).min(1)})]),gh$=l0.object({...R36,template:I36})});function FA0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=gh$.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 m91=w(()=>{hh$()});import{join as uh$}from"path";async function M36($){try{let Z=await fetch(`${aW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(q36)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=FA0(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()||d91($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function WG($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function k36($,Z){let X=Zu($),Q=Z?.brand?.trim()||d91(X),Y=xh$(X,128),J=`${(b0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=yh$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),F=`${J}/og.png`,H=`${Q} commerce report by decocms`;return[`<title>${WG(W)}</title>`,`<meta name="description" content="${WG(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="${WG(W)}" />`,`<meta property="og:description" content="${WG(K)}" />`,`<meta property="og:url" content="${WG(J)}" />`,`<meta property="og:image" content="${WG(F)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${WG(H)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${WG(W)}" />`,`<meta name="twitter:description" content="${WG(K)}" />`,`<meta name="twitter:image" content="${WG(F)}" />`,`<meta name="twitter:image:alt" content="${WG(H)}" />`,`<link rel="canonical" href="${WG(J)}" />`,`<link rel="icon" href="${WG(Y)}" sizes="any" />`].join(`
2913
+ `,j=await Z.createBlob(E);await pg$(Z.owner,Z.repo,j,E);let z=L[0]??`${eP0(Q)}/${V91(B)}.json`;F.push({path:z,mode:"100644",type:"blob",sha:j});let A=z.slice(z.lastIndexOf("/")+1,-5);H.set(z,{stem:A,sha:j,content:E});for(let P of L.slice(1))F.push({path:P,mode:"100644",type:"blob",sha:null}),H.delete(P)}for(let B of $.del)for(let D of b91(K,B))F.push({path:D,mode:"100644",type:"blob",sha:null}),H.delete(D);if(F.length===0)return G;let N=Q?`${Q}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((B)=>B.type==="blob"&&B.path===N)){let B=await Promise.all([...H.values()].map(async(j)=>({stem:j.stem,content:j.content??await Z.getBlobText(j.sha)}))),{decofile:D,skipped:L}=Ha(B);if(L.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:`${Z.owner}/${Z.repo}`,branch:X,packagePath:Q,blocks:L.map((j)=>j.key)});let E=await Z.createBlob(D);F.push({path:N,mode:"100644",type:"blob",sha:E})}let U=await Z.createTree(J,F),O=await Z.createCommit({message:tJ6($),treeSha:U,parentShas:[G]});try{return await Z.updateRef(X,O),O}catch(B){if(!(B instanceof g4&&B.status===422)||Y>=iJ6-1)throw B;await M$(nZ(2000,200,Y,2,0.5))}}}function tJ6($){let Z=(Y)=>{let G=Y.slice(0,3).join(", ");return Y.length>3?`${G} (+${Y.length-3} more)`:G},X=[];if($.set.size>0)X.push(`update ${Z([...$.set.keys()])}`);if($.del.size>0)X.push(`delete ${Z([...$.del])}`);let Q=`chore(decofile): ${X.join("; ")}`;return td0(Q,$.deps.coAuthor)}var iJ6=3,c91;var Fh$=w(()=>{fO0();pP0();u4();S_();$A0();c91=new Map});import{createHmac as Hh$,randomBytes as oJ6,timingSafeEqual as rJ6}from"crypto";function Nh$(){if(JA0)return JA0;let $;try{let Z=b0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return JA0=$?Buffer.from($):oJ6(32),JA0}function l91($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+aJ6)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=Hh$("sha256",Nh$()).update(Q).digest("base64url");return`${Q}.${Y}`}function Uh$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(Hh$("sha256",Nh$()).update(Q).digest("base64url"));if(Y.length!==G.length||!rJ6(Y,G))return!1;let J;try{J=JSON.parse(Buffer.from(Q,"base64url").toString())}catch{return!1}let W=Math.floor((Z.nowMs??Date.now())/1000);return J.o===Z.organizationId&&J.m===Z.virtualMcpId&&J.b===Z.branch&&typeof J.e==="number"&&J.e>=W}var aJ6=21600000,JA0=null;var Oh$=w(()=>{R$()});import{z as $u}from"zod";function eJ6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&sJ6.test($)}function wh$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function WA0($){let Z=$.get("decofileScope");return mP0($.var.studioContext,Z.organizationId,Z.githubRepo)}function KA0($,Z){if(Z instanceof g4){let Q=Z.status===404?404:Z.status===409?409:Z.status===422?409:502;return $.json({error:Z.message},Q)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},500)}function Dh$(){let $=new H1;return $.use("/:virtualMcpId/:branch",Bh$),$.use("/:virtualMcpId/:branch/*",Bh$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await WA0(Z),Y=await ng$(Q,X.branch,X.packagePath,{createBranchIfMissing:!!X.userId}),G={ETag:`"${Y.sha}"`,"Cache-Control":"no-store","Access-Control-Allow-Origin":"*"};if(Z.req.header("if-none-match")===`"${Y.sha}"`)return Z.body(null,304,G);if(!X.userId)return Z.body(Y.decofile,200,{...G,"content-type":"application/json"});let J=l91({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(wh$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return KA0(Z,Q)}}),$.patch("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=$36.safeParse(await Z.req.json().catch(()=>null));if(!Y.success)return Z.json({error:"Invalid body",details:Y.error.issues},400);let G=Y.data;for(let J of[...Object.keys(G.set??{}),...G.delete??[]])try{iP0(J)}catch(W){let K=W instanceof Error?W.message:String(W);return Z.json({error:K},400)}for(let[J,W]of Object.entries(G.set??{}))if(typeof W!=="object"||W===null||Array.isArray(W))return Z.json({error:`Block "${J}" must be a JSON object`},400);try{let J=await WA0(Z),W=await Kh$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:nh(Q)},G),K=l91({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:W,token:K,apiHost:wh$(Z)})}catch(J){return KA0(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await WA0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({error:"Branch is already the default branch"},400);let G=`chore(decofile): publish ${X.branch}`;try{let J;try{J=await Q.mergeBranch(Y,X.branch,G)}catch(W){if(!(W instanceof g4&&W.status===409))throw W;await QA0(Q,X.branch,Y),J=await Q.mergeBranch(Y,X.branch,G)}return J?Z.json({result:"merged",sha:J}):Z.json({result:"up-to-date"})}catch(J){if(J instanceof g4&&J.status===409)return Z.json({error:"merge-conflict"},409);if(J instanceof g4&&J.status===405){let K=await Q.findOpenPullRequest(Y,X.branch)??await Q.createPullRequest({base:Y,head:X.branch,title:`Publish ${X.branch}`});return Z.json({result:"pull-request",number:K.number,url:K.html_url})}throw J}}catch(Q){return KA0(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await WA0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});try{let{aheadBy:G,behindBy:J}=await Q.compare(Y,X.branch);return Z.json({baseBranch:Y,aheadBy:G,behindBy:J})}catch(G){if(G instanceof g4&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});throw G}}catch(Q){return KA0(Z,Q)}}),$}var sJ6,$36,Bh$;var Lh$=w(()=>{pP0();D8();D91();lP0();h91();k91();Fh$();Oh$();y91();S_();$A0();sJ6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;$36=$u.object({set:$u.record($u.string(),$u.unknown()).optional(),delete:$u.array($u.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}),Bh$=cP0(async($,Z)=>{let X=$.var.studioContext,Q=X.organization;if(!Q)return $.json({error:"Organization scope required"},500);let Y=$.req.param("virtualMcpId"),G=$.req.param("branch");if(!Y||!G)return $.json({error:"virtualMcpId and branch are required"},400);if(!eJ6(G))return $.json({error:`Invalid branch name: ${G}`},400);let J=X.auth?.user?.id??null;if(!J){let O=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!O||!Uh$(O,{organizationId:Q.id,virtualMcpId:Y,branch:G}))return $.json({error:"Unauthorized"},401)}let W=await X.storage.virtualMcps.findById(Y);if(!W||W.organization_id!==Q.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!cB0(K)||K?.fastPreview!==!0)return $.json({error:"Fast Preview is not enabled for this project"},404);let H=W.connections?.map((O)=>O.connection_id)??[],N=Ba(K,H);if(!N)return $.json({error:"Project has no GitHub repository"},404);let U=K?.runtime;return $.set("decofileScope",{organizationId:Q.id,virtualMcpId:Y,branch:G,packagePath:U?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:N,userId:J}),Z()})});var Eh$=($)=>{let Z=new H1;if(Z.use("*",P_),Z.route("/",YP0()),Z.route("/",gf$()),Z.route("/",cy$()),Z.route("/",gy$()),Z.route("/",gP0()),Z.route("/tools",ty$()),Z.route("/",iy$()),Z.route("/",zy$({kvStorage:$.kvStorage})),Z.route("/",Ey$()),Z.route("/fs",Cy$({getConnection:$.getNatsConnection})),Z.route("/sandbox",Jh$()),Z.route("/decofile",Dh$()),Z.route("/",by$()),Z.route("/deco-sites",JP0()),Z.route("/sso",sz0()),Z.route("/",hP0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",Sf$()),$.mountDevAssets)Z.route("/dev-assets",WP0({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("/",N_$()),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",vy$()),Z.route("/mcp",WD0()),Z.route("/mcp/self",yP0()),Z.route("/mcp",HD0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var jh$=w(()=>{D8();g61();Cf$();l61();KP0();xr();x61();jy$();Py$();_y$();ln();k61();ND0();F91();fy$();xy$();hy$();ly$();py$();N91();oy$();U91();KD0();Wh$();Lh$()});function Z36($){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}}))}var X36=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},zh$=()=>{let $=new H1;return $.use("*",X36),$.get("/",async(Z)=>{let X=b0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await dZ(Q,Y,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:Z36(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var Ph$=w(()=>{D8();R$();Zz0()});import{z as M1}from"zod";function GF($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function U36($){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 O36($,Z,X){try{return JSON.parse($)}catch{throw new Rh$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function B36($){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:O36(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 w36($){let Z=$.map((X)=>{let Q=X.function.parameters?hY(X.function.parameters):hY({type:"object",properties:{}});return[X.function.name,b$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function D36($){if(!$)return;return{openai:{response_format:$}}}function L36(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function Ah$($,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 Th$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var Q36=256,Y36,G36,J36,W36,K36,F36,H36,N36,Rh$,Ih$,qh$;var Mh$=w(()=>{v4();D8();ph();YN();Y36=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),G36=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),J36=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(G36).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),W36=M1.object({type:M1.literal("text")}),K36=M1.object({type:M1.literal("json_object")}),F36=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()})}),H36=M1.union([W36,K36,F36]),N36=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(J36),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(Y36).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:H36.optional(),user:M1.string().optional()});Rh$=class Rh$ extends Error{constructor($){super($);this.name="MessageConversionError"}};Ih$=new H1;Ih$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(GF("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(GF("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(GF("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=N36.safeParse(Q);if(!Y.success){let L=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(GF(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let G=Y.data,J=U36(G.model);if(!J)return $.json(GF("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)=>vD(j.providerId));if(!E)return $.json(GF("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 F;try{F=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(GF(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let H=F.aiSdk.languageModel(K),N=B36(G.messages),U=G.tools?w36(G.tools):void 0,O=D36(G.response_format),B=L36(),D=Math.floor(Date.now()/1000);if(G.stream)return IN($,async(L)=>{let E=Ah$(H,N,U,G,O,$.req.raw.signal);try{let j=nO(E),z=!1,A=0,P="",I=async()=>{if(P.length===0)return;let k=P;P="",await L.writeSSE({data:JSON.stringify({id:B,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:B,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>=Q36)await I()}else if(k.type==="tool-call"){await I();let q=A++;await L.writeSSE({data:JSON.stringify({id:B,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 I(),await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{},finish_reason:Th$(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 I(),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=Ah$(H,N,U,G,O,$.req.raw.signal),E=await iO(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:B,object:"chat.completion",created:D,model:G.model,choices:[{index:0,message:j,finish_reason:Th$(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(GF("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(GF(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(GF(Y.message,"server_error"),500)}});qh$=Ih$});function E36($){if(typeof $!=="object"||$===null)return!1;let X=$.githubRepo?.url;return typeof X==="string"&&X.length>0}function kh$(){let $=new H1;return $.use("*",async(Z,X)=>{await X(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let X=Z.get("studioContext"),Q=G1(X);if(!Q)return Z.json({error:"Authentication required"},401);let G=(Z.req.query("site")??"").trim().toLowerCase();if(!aK(G))return Z.json({error:"Invalid site slug"},400);let J=await X.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["organization.id as id","organization.slug as slug","organization.name as name","organization.metadata as metadata"]).where("member.userId","=",Q).execute(),W=[];for(let F of J){if(!F.slug||W7(F))continue;let H=await X.storage.virtualMcps.list(F.id);for(let N of H){if(N.title.toLowerCase()!==G)continue;if(!E36(N.metadata))continue;W.push({orgSlug:F.slug,orgName:F.name??F.slug,project:{id:N.id,title:N.title,icon:N.icon??null}})}}let K={matches:W};return Z.json(K)}),$}var Vh$=w(()=>{D8();N_()});var Ch$;var Sh$=w(()=>{Ch$={name:"decocms",version:"4.250.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","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.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 P36(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??z36}}var _h$,z36="https://ph.studio.decocms.com",vh$;var fh$=w(()=>{D8();qh0();WC();f9();R$();T61();Sh$();_h$=new H1;_h$.get("/",($)=>{let Z={version:Ch$.version,theme:yd1(),...TL().logo&&{logo:TL().logo},...IK()&&{internalUrl:BS1()},...b0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!b0().firecrawlApiKey,auth:ov$(),posthog:P36(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!IK()&&b0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});vh$=_h$});function Zu($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function d91($){return(Zu($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function xh$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Zu($))}&sz=${Z}`}function bh$($,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 yh$($){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()?bh$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):bh$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as l0}from"zod";var b_,A36,T36,R36,I36,gh$;var hh$=w(()=>{b_=l0.enum(["good","bad","neutral"]),A36=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:b_.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 $})),T36=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(A36)),R36={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()},I36=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:b_.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:b_.optional()}),l0.object({template:l0.literal("stats"),stats:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),tone:b_.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:b_.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(T36).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:b_.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:b_.optional()})).min(1)})]),gh$=l0.object({...R36,template:I36})});function FA0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=gh$.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 m91=w(()=>{hh$()});import{join as uh$}from"path";async function M36($){try{let Z=await fetch(`${aW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(q36)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=FA0(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()||d91($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function WG($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function k36($,Z){let X=Zu($),Q=Z?.brand?.trim()||d91(X),Y=xh$(X,128),J=`${(b0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=yh$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),F=`${J}/og.png`,H=`${Q} commerce report by decocms`;return[`<title>${WG(W)}</title>`,`<meta name="description" content="${WG(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="${WG(W)}" />`,`<meta property="og:description" content="${WG(K)}" />`,`<meta property="og:url" content="${WG(J)}" />`,`<meta property="og:image" content="${WG(F)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${WG(H)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${WG(W)}" />`,`<meta name="twitter:description" content="${WG(K)}" />`,`<meta name="twitter:image" content="${WG(F)}" />`,`<meta name="twitter:image:alt" content="${WG(H)}" />`,`<link rel="canonical" href="${WG(J)}" />`,`<link rel="icon" href="${WG(Y)}" sizes="any" />`].join(`
2914
2914
  `)}function V36($,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}
2915
2915
  </head>`)}function ch$($){let Z=new H1;return Z.get("/:domain/og.png",async(X)=>{let Q=Zu(X.req.param("domain")),Y=async()=>{let G=$?Bun.file(uh$($,"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(`${aW({})}/api/v2/public/diagnostics/${encodeURIComponent(Q)}/og.png`,{signal:AbortSignal.timeout(S36)}),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=$?uh$($,"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 M36(Zu(Q)),K=k36(Q,W);return X.html(V36(J,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return X.html(J)}}),Z}var q36=2500,S36=1e4;var lh$=w(()=>{D8();m91();yL();R$()});function Da($,Z){return fetch(`${aW({})}${$}`,Z)}async function C36($,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 Da(`/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}=FA0(J);return{status:W.slides.length?"ready":"empty",deck:W,scanned_at:J.scanned_at,drops:K}}var _36,MN,dh$=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},mh$;var ih$=w(()=>{D8();bY();yL();m91();_36=new Set(["complete","errored","terminated","unknown"]),MN=new H1;MN.use("*",async($,Z)=>{let X=await F8.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});MN.use("/link-token/*",dh$);MN.use("/suggest",dh$);MN.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 C36(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)}});MN.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 Da("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${xL({})}`},body:JSON.stringify({url:Q,...Y?{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)}});MN.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let X=await Da(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${xL({})}`}});if(!X.ok)return $.json({error:`status HTTP ${X.status}`},502);let Y=(await X.json()).status??"unknown",G={done:_36.has(Y),status:Y};return $.json(G)}catch{return $.json({error:"status failed"},502)}});MN.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let X=await Da(`/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)}});MN.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let X=await Da(`/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:[]})}});mh$=MN});import{createHmac as v36,timingSafeEqual as f36}from"crypto";function nh$($,Z,X,Q=Date.now()){if(!Z||!X)return!1;let Y,G=[];for(let F of Z.split(",")){let H=F.indexOf("=");if(H<=0)continue;let N=F.slice(0,H).trim(),U=F.slice(H+1).trim();if(N==="t")Y=U;else if(N==="v1")G.push(U)}if(!Y||G.length===0)return!1;let J=Number(Y);if(!Number.isFinite(J)||Math.abs(Q/1000-J)>b36)return!1;let W=v36("sha256",X).update(`${Y}.${$}`).digest("hex"),K=Buffer.from(W,"hex");return G.some((F)=>{let H=Buffer.from(F,"hex");return K.length===H.length&&f36(K,H)})}function th$($){let Z;try{Z=JSON.parse($)}catch{return null}let X=RJ(Z),Q=RJ(RJ(X?.data)?.object);if(!X||typeof X.type!=="string"||!Q)return null;return{id:JF(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 oh$($){switch($){case"active":case"trialing":return"active";case"past_due":return"past_due";default:return"canceled"}}function JF($){return typeof $==="string"?$:void 0}function RJ($){return typeof $==="object"&&$!==null?$:void 0}function HA0($){return typeof $==="number"?new Date($*1000):null}function n91($){return JF($)??JF(RJ($)?.id)}function x36($){return n91($.subscription)??JF(RJ(RJ($.parent)?.subscription_details)?.subscription)}function y36($){let Z=HA0($.current_period_end);if(Z)return Z;let X=RJ($.items)?.data;if(!Array.isArray(X))return null;let Q=0;for(let Y of X){let G=RJ(Y)?.current_period_end;if(typeof G==="number"&&G>Q)Q=G}return Q>0?new Date(Q*1000):null}function i91($,Z){let X=HA0($.created);return!!X&&!!Z.lastStripeEventAt&&X<Z.lastStripeEventAt}function p91($,Z){let X=HA0($.created);if(!X)return;return Z.lastStripeEventAt&&Z.lastStripeEventAt>X?void 0:X}async function g36($,Z){let X=Z.data.object;switch(Z.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":{let Q=JF(RJ(X.metadata)?.orgId);if(!Q)return{handled:!1,reason:"no orgId"};if(JF(RJ(X.metadata)?.kind)==="topup"){if(X.mode!=="payment")return{handled:!1,reason:"topup with wrong mode"};if(JF(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let J=JF(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(RJ(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:RJ(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(JF(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=n91(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(i91(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Q,{stripeCustomerId:n91(X.customer),stripeSubscriptionId:G,status:"active",lastStripeEventAt:p91(Z,Y)}),{handled:!0,organizationId:Q}}case"customer.subscription.updated":case"customer.subscription.deleted":{let Q=JF(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&&i91(Z,Y))return{handled:!1,reason:"stale event"};let J=G?"canceled":oh$(X.status);return await $.updateStripeState(Y.organizationId,{status:J,currentPeriodEnd:y36(X),...G&&{stripeSubscriptionId:null},lastStripeEventAt:p91(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}case"invoice.paid":{let Q=x36(X);if(!Q)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(Q);if(!Y)return{handled:!1,reason:"unknown subscription"};if(i91(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Y.organizationId,{status:"active",currentPeriodEnd:HA0(X.period_end),lastStripeEventAt:p91(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}default:return{handled:!1,reason:`unhandled event ${Z.type}`}}}function h36($,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:oh$(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 ph$($,Z){let X=h36($,Z);if(!X)return;SY({event:X.name,organizationId:X.organizationId,...$.id?{uuid:ii1(`stripe:${$.id}:${X.name}`)}:{},...$.created?{timestamp:new Date($.created*1000)}:{},properties:X.properties})}async function rh$($){let Z=new nW(u8().db),X=await g36(Z,$);if(!(X.handled&&X.topUp))ph$($,X);if(X.handled&&X.topUp)await vw$({organizationId:X.organizationId,amountCents:X.topUp.creditCents,referenceId:X.topUp.referenceId}),ph$($,X);if(!X.handled&&X.orphanSubscriptionId)try{await Js1(X.orphanSubscriptionId),console.error("stripe webhook: canceled orphan subscription",{subscriptionId:X.orphanSubscriptionId,eventId:$.id})}catch(Q){if(!(Q instanceof xY&&(Q.status===400||Q.status===404)))throw Q}return X}var b36=300;var ah$=w(()=>{bG();k4();E60();pL();Ye0()});var u36=1048576,t91;var sh$=w(()=>{D8();DN();R$();ah$();t91=new H1;t91.post("/webhook",k9({maxSize:u36,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=b0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let X=await $.req.text();if(!nh$(X,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let Y=th$(X);if(!Y)return $.json({error:"invalid payload"},400);let G=await rh$(Y);return console.log("stripe webhook",{eventId:Y.id,type:Y.type,livemode:Y.livemode,...G}),$.json({received:!0})})});import{timingSafeEqual as c36}from"crypto";function d36($,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 c36(Buffer.from(Y),Buffer.from(Q))}var l36=5242880,o91;var eh$=w(()=>{D8();DN();hp();o91=new H1;o91.post("/webhook",k9({maxSize:l36,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(!d36(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 jp0())?.markTenantPoolsDirty(G,Y)??[];return $.json({ok:!0,pools:W})})});function $u$($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var Zu$,m36,i36,Xu$;var Qu$=w(()=>{D8();H3();Ry();Px();Zu$=new H1,m36=["range","if-none-match","if-modified-since"],i36=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];Zu$.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),X=Z.organization?.id;if(!Z.auth?.user?.id){if(kh($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new $$(401,{message:"Authentication required"})}if(!X)throw new $$(401,{message:"Organization context required"});let Q=$.req.path.replace(/^.*\/files\//,"");if(!Q)throw new $$(400,{message:"Missing file key"});let Y=await wn(Q,Z);if(!Y)throw new $$(503,{message:"Object storage not configured"});if(Y.startsWith("data:")&&w3()){let K=Y.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new $$(500,{message:"Invalid data URL from storage"});let[,F,H]=K,N=Buffer.from(H,"base64"),U=new Headers({"Content-Type":F,"Cache-Control":"private, max-age=86400"});return $u$(U,F),new Response(N,{status:200,headers:U})}let G=new Headers;for(let K of m36){let F=$.req.header(K);if(F)G.set(K,F)}let J=await fetch(Y,{headers:G});if(J.status===403||J.status===404)throw new $$(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 $$(502,{message:"Upstream storage error"});let W=new Headers;for(let K of i36){let F=J.headers.get(K);if(F)W.set(K,F)}return W.set("Cache-Control","private, max-age=86400"),$u$(W,W.get("content-type")??""),new Response(J.body,{status:J.status,headers:W})});Xu$=Zu$});var La=_((x_)=>{var p36=x_&&x_.__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]}),n36=x_&&x_.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))p36(Z,$,X)};Object.defineProperty(x_,"__esModule",{value:!0});n36(OY(),x_)});var Ju$=_((Yu$)=>{Object.defineProperty(Yu$,"__esModule",{value:!0});Yu$.version=void 0;Yu$.version="3.4.0"});var Fu$=_((WF)=>{var t36=WF&&WF.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(WF,"__esModule",{value:!0});WF.NodeTransport=WF.VERSION=void 0;WF.nodeResolveHost=$W6;var r6=La(),o36=z0("net"),r91=z0("tls"),r36=z0("path"),Wu$=z0("fs"),a36=t36(z0("dns")),s36=Ju$();WF.VERSION=s36.version;var e36="nats.js";class Ku${socket;version;lang;yields=[];signal=(0,r6.deferred)();closedNotification=(0,r6.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=e36,this.version=WF.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,r6.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 r6.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 r6.errors.ConnectionError("error connecting - node provided an undefined error");let{code:J}=G,W=J==="ECONNREFUSED"?new r6.errors.ConnectionError("connection refused",{cause:G}):G;throw this.socket?.destroy(),W}}dial($){let Z=(0,r6.deferred)(),X,Q=(0,o36.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,r6.deferred)(),Z;return this.socket.on("data",(X)=>{this.yields.push(X);let Q=r6.DataBuffer.concat(...this.yields),Y=(0,r6.extractProtocolMessage)(Q);if(Y!=="")try{let G=r6.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,r6.deferred)();try{if($=(0,r36.resolve)($),!(0,Wu$.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,Wu$.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,r6.extend)(X,this.options.tls,Y)}catch(Y){return Promise.reject(new r6.errors.ConnectionError(Y.message,{cause:Y}))}let Q=(0,r6.deferred)();try{let Y=(0,r91.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 r6.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,r6.extend)(Z,this.options.tls,Q)}catch(Q){return Promise.reject(new r6.errors.ConnectionError(Q.message,{cause:Q}))}let X=(0,r6.deferred)();try{let Q=(0,r91.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 r6.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,r6.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,r6.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 r91.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,r6.render)($)}`);let Z=(0,r6.deferred)();try{this.socket.write($,(X)=>{if(X){if(this.options.debug)console.error(`!!! ${(0,r6.render)($)}: ${X}`);return Z.reject(X)}return Z.resolve()})}catch(X){if(this.options.debug)console.error(`!!! ${(0,r6.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}}WF.NodeTransport=Ku$;function $W6($){let Z=(0,r6.deferred)();return a36.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 Bu$=_((Ou$)=>{Object.defineProperty(Ou$,"__esModule",{value:!0});Ou$.connect=ZW6;var Hu$=Fu$(),Nu$=La(),Uu$=La();function ZW6($={}){if((0,Uu$.hasWsProtocol)($))return Promise.reject(Uu$.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,Nu$.setTransportFactory)({factory:()=>{return new Hu$.NodeTransport},dnsResolveFn:Hu$.nodeResolveHost}),Nu$.NatsConnectionImpl.connect($)}});var wu$=_((kN)=>{var QW6=kN&&kN.__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]}),YW6=kN&&kN.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))QW6(Z,$,X)};Object.defineProperty(kN,"__esModule",{value:!0});kN.connect=void 0;var GW6=Bu$();Object.defineProperty(kN,"connect",{enumerable:!0,get:function(){return GW6.connect}});YW6(La(),kN)});function ju$($){let Z=$?.connectFn??FW6,X=null,Q=null,Y=!1,G=!1,J=!1,W=[];function K(){return X!==null&&!X.isClosed()&&!X.isDraining()&&!J}function F(){console.log(`[NatsProvider] fireReady: ${W.length} callbacks`);for(let U of W)try{U()}catch{}}function H(U){(async()=>{for await(let O of U.status())if(O.type==="disconnect")console.log("[NatsProvider] Disconnected"),J=!0;else if(O.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),J=!1,Q=null,F()})().catch(()=>{})}async function N(U,O){let B=0;while(!G)try{X=await Z({servers:U,timeout:KW6,reconnect:!0,maxReconnectAttempts:-1,...O?{authenticator:O}:{}}),console.log(`[NatsProvider] Connected to ${X.getServer()} after ${B} attempt(s)`),Q=null,J=!1,H(X),F();return}catch{B++;let D=nZ(WW6,JW6,B-1,2,0.5);await M$(D)}}return{init(U,O){if(Y)return;Y=!0,G=!1;let B=O?.creds?Du$.credsAuthenticator(new TextEncoder().encode(O.creds)):void 0;N(U,B).catch(()=>{})},isConnected(){return K()},getConnection(){return K()?X:null},getJetStream(){if(!K())return null;if(!Q)Q=Eu$.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 FW6($){return Lu$.connect($)}var Du$,Lu$,Eu$,JW6=100,WW6=3000,KW6=3000;var zu$=w(()=>{u4();Du$=V(qu(),1),Lu$=V(wu$(),1),Eu$=V(hw(),1)});function a91($,Z){return`${$}.${Z}`}class s91{cache;constructor($){this.cache=Bh({ttlMs:$?.ttlMs??HW6,maxSize:$?.maxSize??NW6})}async get($,Z){return this.cache.get(a91($,Z))??null}async set($,Z,X){this.cache.set(a91($,Z),X)}async invalidate($,Z){this.cache.delete(a91($,Z))}teardown(){this.cache.clear()}}var HW6=600000,NW6=5000;var Pu$=()=>{};function NA0($,Z){return`${$}:${Z}`}function e91($){let Z=Bh({ttlMs:$?.ttlMs??UW6,maxSize:$?.maxSize??OW6}),X=$?.getConnection,Q=crypto.randomUUID(),Y=new TextEncoder,G=new TextDecoder,J=null;function W(K,F){let H=X?.();if(!H)return;try{H.publish(Au$,Y.encode(JSON.stringify({organizationId:K,keyId:F,originId:Q})))}catch(N){console.warn("[ProviderKeyCache] Publish failed (non-critical):",N)}}return{get(K,F){return Z.get(NA0(K,F))},set(K,F,H){Z.set(NA0(K,F),H)},invalidate(K,F){Z.delete(NA0(K,F)),W(K,F)},start(){if(J)return;let K=X?.();if(!K)return;J=K.subscribe(Au$),(async()=>{for await(let F of J)try{let H=JSON.parse(G.decode(F.data));if(H.originId===Q)continue;Z.delete(NA0(H.organizationId,H.keyId))}catch{}})().catch(console.error)},teardown(){J?.unsubscribe(),J=null,Z.clear()}}}var Au$="studio.ai-provider-keys.invalidate",UW6=30000,OW6=5000;var Tu$=()=>{};class $Z1{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=Ru$.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 Ru$)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 Ru$;var Iu$=w(()=>{Ru$=["studio.decopilot.cancel","mesh.decopilot.cancel"]});var qu$=($)=>{let Z;return()=>Z??=$()},ZZ1,XZ1;var Mu$=w(()=>{R6();ZZ1=qu$(()=>w$.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),XZ1=qu$(()=>w$.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function zW6(){return{name:pH,subjects:[`${qw0}.>`],storage:WW.StorageType.File,max_age:DW6,max_bytes:EW6,max_msgs_per_subject:jW6,discard:WW.DiscardPolicy.Old,retention:WW.RetentionPolicy.Limits,duplicate_window:LW6,num_replicas:1}}class Su${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 ku$($){let Z=Vu$.headers();for(let[X,Q]of Object.entries($))Z.set(X,Q);return Z}function RW6($,Z){let X=0;return{publish(Q,Y,G,J){Q.publish(Y,G,J?{headers:J}:void 0).catch((W)=>{if(X++,wW6().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 IW6($){if(!($ instanceof Error))return!1;if($.name==="TimeoutError")return!0;return/timeout|no responders|503/i.test($.message)}class QZ1{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=zW6(),X=await v5(async()=>{let Q=this.options.getJetStreamManager?await this.options.getJetStreamManager():await WW.jetstreamManager($);try{await Q.streams.info(pH),await Q.streams.update(pH,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(pH),await Q.streams.add(Z);else throw Y}return Q},{maxAttempts:5,minTimeout:250,maxTimeout:4000,jitter:0.5,isRetriable:IW6});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=RW6(Z,Q),J=!1,W=()=>{if(J)return;J=!0;let F=NH$(Z);Y.publish(F.subject,F.data).catch(()=>{})};X.addEventListener("abort",W,{once:!0});let K=(F)=>{let H=performance.now(),N=Xo0(F,{runId:Z}),U=performance.now()-H;if(ZZ1().record(U),XZ1().add(1,{"org.id":Q??"unknown"}),TW6?.record(U,N.reduce((O,B)=>O+B.data.length,0)),N.length===0){console.warn(`[Decopilot] dropping oversized stream chunk for thread ${Z}`);return}for(let O of N)G.publish(Y,O.subject,O.data,O.headers?ku$(O.headers):void 0)};return(async()=>{let F=$.getReader(),H=0,N=0,U;try{while(!0){let{done:O,value:B}=await F.read();if(O)break;if(K(B),N++,++H>=64)H=0,await new Promise((D)=>setImmediate(D))}}catch(O){U=O,console.warn(`[Decopilot] stream pump error for thread ${Z}:`,O?.message??O)}finally{if(F.releaseLock(),W(),AW6)console.warn(JSON.stringify({msg:"decopilot-stream-diag",event:"pump-done",taskId:Z,publishedChunks:N,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=Xo0(Z,{runId:$,dedup:X});if(ZZ1().record(performance.now()-Y),XZ1().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:ku$(J.headers)}:{},...J.msgId?{msgID:J.msgId}:{}});return!0}async publishDone($,Z,X){let Q=this.js;if(!Q)return!1;let Y=HH$({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"?WW.DeliverPolicy.New:WW.DeliverPolicy.All,G=X?.closeOnDone??!1,J=SB($),W;try{W=await(await Q.consumers.get(pH,{filter_subjects:J,deliver_policy:Y})).consume()}catch(D){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",D?.message??D),null}let H=Cw0({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(Mw0()).pipeThrough(kw0()).getReader(),N=!1,U=()=>{if(N)return;N=!0;try{H.releaseLock()}catch{}},O=!1,B=()=>{if(O)return;O=!0,W.stop(),H.cancel().catch(()=>{}),U()};return Z?.addEventListener("abort",B,{once:!0}),new ReadableStream({async pull(D){for(;;){let{done:L,value:E}=await H.read();if(L){B(),D.close();return}let j=E;if(j.kind==="done"){if(G){B(),D.close();return}continue}D.enqueue(j.chunk);return}},cancel(){B()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge(pH,{filter:SB($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var WW,Vu$,BW6=($)=>{let Z;return()=>Z??=$()},wW6,DW6=86400000000000,LW6=120000000000,EW6=4294967296,jW6=500000,PW6,AW6,TW6;var Cu$=w(()=>{u4();Qo0();_w0();Vw0();R6();Mu$();WW=V(hw(),1),Vu$=V(qu(),1),wW6=BW6(()=>w$.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"}));PW6=process.env.STREAM_ENCODE_TRACE==="1",AW6=process.env.DECOPILOT_STREAM_TRACE==="1";TW6=PW6?new Su$:null});function UA0($,Z,X,Q){if(!Q)return!1;return $.emit(Z,SW(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 _u$=w(()=>{O8()});class YZ1{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}}async function vu$($,Z,X){let Q=Z.organizationId;if(Z.status!=="in_review")return!1;if(!Vr(X))return!1;if(await $.storage.taskBoard.hasHumanRejectedDone(Z.id,Q))return!1;let Y=await $.storage.taskBoard.update(Z.id,Q,{status:"done"},Z.updatedBy);return await v6($,{taskBoardItemId:Z.id,action:"status_changed",actorId:null,data:{from:Z.status,to:"done",reason:"pr_merged"}}),H8(Q,Y),console.log(`[task-board-review-sweeper] ${Z.id}: linked PR already merged \u2014 moved to done`),!0}var fu$=w(()=>{ZQ();Sr();l5()});function _W6($){return $ instanceof t7}function vW6($,Z){return Z-$>=SW6}class GZ1{taskBoard;contextFactory;billing;options;timer=null;running=!1;cursor=null;constructor($,Z,X,Q={}){this.taskBoard=$;this.contextFactory=Z;this.billing=X;this.options=Q}start(){if(this.timer)return;let $=this.options.intervalMs??qW6;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??kW6,X=this.options.itemIntervalMs??MW6,Q=new Date(Date.now()-X),Y=await this.taskBoard.listItemsPendingReview(Z,this.cursor,Q),G=Y.at(-1);this.cursor=Y.length===Z&&G?{updatedAt:G.updatedAt,id:G.id}:null;for(let{id:J,organizationId:W}of Y)try{if(await this.reconcileItem(J,W,Q))$++}catch(K){console.error(`[task-board-review-sweeper] ${J} failed`,K)}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()-nn0),ho0);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()-CW6));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 It0(this.taskBoard,Y,Q),await qt0(this.taskBoard,this.billing,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!==t8)continue;let W=await this.contextFactory(Y,J.assignedBy??J.createdBy);if(!W)continue;await nH(W,J,{runClass:"retry"}),Z++,console.warn(`[task-board-review-sweeper] re-dispatched ${Q} after a failure (attempt ${G})`)}catch(J){if(console.error(`[task-board-review-sweeper] retry dispatch for ${Q} failed`,J),_W6(J)){await this.returnToTodo(Q,Y,J instanceof Error?J.message:String(J));continue}await this.taskBoard.scheduleRunRetry(Q,Y,G,new Date(Date.now()+VW6)).catch((W)=>console.error(`[task-board-review-sweeper] re-arming ${Q} failed`,W))}return Z}async returnToTodo($,Z,X){try{let Q=await this.taskBoard.getById($,Z);if(!Q||Q.status!=="in_progress")return;let Y=await this.taskBoard.returnToTodoAfterFailure($,Z,Q.updatedBy);if(!Y)return;await this.taskBoard.recordActivity({taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:"in_progress",to:"todo",reason:X}}).catch(()=>{}),H8(Z,Y)}catch(Q){console.error(`[task-board-review-sweeper] returning ${$} to todo failed`,Q)}}async handOffReviewWithoutPr($,Z){let X=await this.taskBoard.listActivity(Z.id,Z.organizationId);if(!vW6(jH(X),Date.now()))return;await kK($,Z,"no pull request is linked to this task \u2014 there is nothing for a "+"reviewer to review")}async reconcileItem($,Z,X){if(!await this.taskBoard.claimSweep($,Z,X))return!1;let Q=await this.taskBoard.getById($,Z);if(!Q)return!1;if(Q.status!=="in_review")return!1;let Y=Q.assigneeId===t8,G=await this.taskBoard.listPrs($,Z),J=await this.contextFactory(Z,Q.assignedBy??Q.createdBy);if(!J)return!1;if(G.length===0){if(Y)await this.handOffReviewWithoutPr(J,Q);return!1}let W=await Promise.all(G.map(async(K)=>({...K,...await gy(Z,K)})));if(W.every((K)=>K.state===null))console.warn(`[task-board-review-sweeper] ${$}: no live PR state from GitHub (${W.length} PR(s)) \u2014 proceeding on unknown`);if(await vu$(J,Q,W.map((K)=>K.merged)))return!0;if(await TN$(J,Q))return!0;if(!Y)return!1;if(!bo0(W))return!1;return await gw0(J,Q,{previewMatchesHead:xo0(W)}),!0}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}var qW6=60000,MW6=300000,kW6=50,VW6=60000,SW6=900000,CW6=120000;var bu$=w(()=>{j9();Mo0();dH();yn();fu$();l5();z3();uo0();SK();Sn()});import{readdir as fW6,rm as OA0}from"fs/promises";import{join as BA0}from"path";async function wA0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-bW6),Z.setUTCHours(0,0,0,0);let X=0;try{let Q=await y_($);for(let Y of Q)if(/^\d{4}$/.test(Y))X+=await xu$($,Y,Z);else if(!Y.startsWith(".")){let G=BA0($,Y),J=await y_(G);for(let K of J){if(!/^\d{4}$/.test(K))continue;X+=await xu$(G,K,Z)}if((await y_(G)).length===0)await OA0(G,{recursive:!0,force:!0})}}catch(Q){console.warn("monitoring retention cleanup failed:",Q)}return X}async function xu$($,Z,X){let Q=0,Y=BA0($,Z),G=await y_(Y);for(let W of G){if(!/^\d{2}$/.test(W))continue;let K=BA0(Y,W),F=await y_(K);for(let N of F){if(!/^\d{2}$/.test(N))continue;let U=new Date(`${Z}-${W}-${N}T00:00:00Z`);if(isNaN(U.getTime()))continue;if(U<X){let O=BA0(K,N);await OA0(O,{recursive:!0,force:!0}),Q++}}if((await y_(K)).length===0)await OA0(K,{recursive:!0,force:!0})}if((await y_(Y)).length===0)await OA0(Y,{recursive:!0,force:!0});return Q}async function y_($){try{return(await fW6($)).filter((X)=>!X.startsWith("."))}catch{return[]}}var bW6=30;var JZ1=()=>{};import{DBOS as WZ1,SchedulerMode as xW6}from"@dbos-inc/dbos-sdk";async function gW6(){let $=[kJ(),g_(),NF()],Z=0;for(let X of $)try{Z+=await wA0(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 hW6($,Z){await WZ1.runStep(()=>gW6(),{name:"monitoringRetention"})}function gu$(){if(yu$)return;yu$=!0;let $=WZ1.registerWorkflow(hW6,{name:"monitoringRetentionWorkflow"});WZ1.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:yW6,mode:xW6.ExactlyOncePerIntervalWhenActive})}var yW6="23 4 * * *",yu$=!1;var hu$=w(()=>{FY();JZ1()});function uu$($){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 ZJ.create();Y.auth.user={id:X,role:Q.role},Y.organization={id:Q.orgId,slug:Q.orgSlug,name:Q.orgName};let G=await J61($.db,Z,Q.role);return Y.boundAuth=G61({auth:Y.authInstance,headers:new Headers,role:Q.role,permissions:G,userId:X}),Y.access=new jL(X,void 0,Y.boundAuth,Q.role,"self"),IB(Y,{id:Q.orgId,slug:Q.orgSlug}),Y}}var cu$=w(()=>{zL();KC()});function uW6(){return{services:[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}],migrationsStatus:"pending",serverUrl:null,logs:[]}}function lW6(){for(let $ of cW6)$()}function lu$($){let Z=[...KZ1.logs,$];KZ1={...KZ1,logs:Z.length>500?Z.slice(-500):Z},lW6()}function FZ1(){return dW6}var KZ1,cW6,dW6=!1;var HZ1=w(()=>{KZ1=uW6(),cW6=new Set});import{EventEmitter as mW6}from"events";var NZ1;var du$=w(()=>{HZ1();NZ1=new mW6;NZ1.on("request",($)=>{lu$($)})});function mu$(){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 O=Xu(U.params.name),B=U.params.arguments||{},D=Object.keys(B).map((E)=>Xu(E)),L=D.length>0?D.slice(0,3).join(",")+(D.length>3?"\u2026":""):"";G=`${G5.tool}${O}${G5.dim}(${L})${G5.reset}`}else if(U.method)G=`${G5.dim}${Xu(U.method)}${G5.reset}`}}catch{}}let W=Xu(Y);if(Y.startsWith("/mcp/conn_")){let H=Y.split("/")[2]??"";W=`/mcp/${G5.mcp}${Xu(H.slice(0,12))}\u2026${G5.reset}`}else if(Y==="/mcp")W=`${G5.mcp}/mcp${G5.reset}`;else if(Y==="/mcp/registry")W=`${G5.mcp}/mcp/registry${G5.reset}`;let K=pW6(Q),F=J?"\u25C0":"\u2190";if(!FZ1())console.log(`${G5.dim}${F}${G5.reset} ${K}${Q}${G5.reset} ${W}${G?` ${G}`:""}`);try{await Z()}finally{let H=Date.now()-X,N=$.res.status,U=iW6(N),O=H<1000?`${H}ms`:`${(H/1000).toFixed(1)}s`,B=J?"\u25B6":"\u2192";if(!FZ1())console.log(`${G5.dim}${B}${G5.reset} ${K}${Q}${G5.reset} ${W}${G?` ${G}`:""} ${U}${N}${G5.reset} ${G5.duration}${O}${G5.reset}`);NZ1.emit("request",{method:Q,path:Xu(Y),status:N,duration:H,timestamp:new Date})}}}var G5,iW6=($)=>{if($>=500)return G5.serverError;if($>=400)return G5.clientError;if($>=300)return G5.redirect;return G5.ok},pW6=($)=>{return G5[$]||G5.reset},Xu=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var iu$=w(()=>{HZ1();du$();G5={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 ou$}from"crypto";import{mkdir as nW6,readdir as tW6,rm as pu$,stat as ru$}from"fs/promises";import{join as OZ1,relative as oW6}from"path";import{z as P$}from"zod";function su$($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return OZ1(rW6,Z)}function eu$($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function UZ1($,Z){let X=su$($),Q=eu$(Z);return OZ1(X,Q)}function aW6($,Z,X,Q){let Y=b0().encryptionKey||"dev-secret",G=`${$}:${Z}:${X}:${Q}`;return ou$("sha256",Y).update(G).digest("hex")}function tu$($,Z,X,Q,Y){let G=Math.floor(Date.now()/1000)+Q,J=aW6(Z,X,G,Y),W=new URL(`/api/dev-assets/${Z}/${eu$(X)}`,$);return W.searchParams.set("expires",G.toString()),W.searchParams.set("signature",J),W.searchParams.set("method",Y),W.toString()}function $c$($,Z,X){let Q=`${$}:${Z.getTime()}:${X}`;return`"${ou$("md5","etag").update(Q).digest("hex")}"`}async function Zc$($,Z,X,Q,Y){try{let G=await tW6($,{withFileTypes:!0});for(let J of G){let W=OZ1($,J.name),F=oW6(Z,W).replace(/\\/g,"/");if(X&&!F.startsWith(X))continue;if(J.isDirectory())if(Q){let H=F+"/";if(!X||H.startsWith(X)){if(!(X?F.slice(X.length):F).includes("/"))Y.commonPrefixes.add(H)}}else await Zc$(W,Z,X,Q,Y);else if(J.isFile()){if(Q&&X){let H=F.slice(X.length);if(H.includes(Q)){let N=H.indexOf(Q),U=X+H.slice(0,N+1);Y.commonPrefixes.add(U);continue}}try{let H=await ru$(W);Y.objects.push({key:F,size:H.size,lastModified:H.mtime.toISOString(),etag:$c$(W,H.mtime,H.size)})}catch{}}}}catch{}}function Xc$($,Z){let Q=t($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:P$.object({prefix:P$.string().optional(),maxKeys:P$.number().optional().default(1000),continuationToken:P$.string().optional(),delimiter:P$.string().optional()}),outputSchema:P$.object({objects:P$.array(P$.object({key:P$.string(),size:P$.number(),lastModified:P$.string(),etag:P$.string()})),nextContinuationToken:P$.string().optional(),isTruncated:P$.boolean(),commonPrefixes:P$.array(P$.string()).optional()}),handler:async(Y)=>{let G=Y,J=G.prefix||"",W=G.maxKeys??1000,K=G.delimiter,F=G.continuationToken,H=su$(Q);await nW6(H,{recursive:!0});let N={objects:[],commonPrefixes:new Set};await Zc$(H,H,J,K,N),N.objects.sort((L,E)=>L.key.localeCompare(E.key));let U=0;if(F){if(U=N.objects.findIndex((L)=>L.key>F),U===-1)U=N.objects.length}let O=N.objects.slice(U,U+W),B=U+W<N.objects.length,D=B?O[O.length-1]?.key:void 0;return{objects:O,isTruncated:B,nextContinuationToken:D,commonPrefixes:Array.from(N.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:P$.object({key:P$.string()}),outputSchema:P$.object({contentType:P$.string().optional(),contentLength:P$.number(),lastModified:P$.string(),etag:P$.string(),metadata:P$.record(P$.string(),P$.string()).optional()}),handler:async(Y)=>{let G=Y,J=UZ1(Q,G.key),W=await ru$(J);return{contentType:m61(G.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:$c$(J,W.mtime,W.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:P$.object({key:P$.string(),expiresIn:P$.number().optional()}),outputSchema:P$.object({url:P$.string(),expiresIn:P$.number()}),handler:async(Y)=>{let G=Y,J=G.expiresIn??nu$;return{url:tu$(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:P$.object({key:P$.string(),expiresIn:P$.number().optional(),contentType:P$.string().optional()}),outputSchema:P$.object({url:P$.string(),expiresIn:P$.number()}),handler:async(Y)=>{let G=Y,J=G.expiresIn??nu$;return{url:tu$(Z,Q,G.key,J,"PUT"),expiresIn:J}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:P$.object({key:P$.string()}),outputSchema:P$.object({success:P$.boolean(),key:P$.string()}),handler:async(Y)=>{let G=Y,J=UZ1(Q,G.key);try{return await pu$(J),{success:!0,key:G.key}}catch{return{success:!1,key:G.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:P$.object({keys:P$.array(P$.string()).max(1000)}),outputSchema:P$.object({deleted:P$.array(P$.string()),errors:P$.array(P$.object({key:P$.string(),message:P$.string()}))}),handler:async(Y)=>{let G=Y,J=[],W=[];return await Promise.all(G.keys.map(async(K)=>{let F=UZ1(Q,K);try{await pu$(F),J.push(K)}catch(H){W.push({key:K,message:H instanceof Error?H.message:"Unknown error"})}})),{deleted:J,errors:W}}}]}async function BZ1($,Z,X){let Q=Xc$(Z,X),Y=new yW({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:H5});for(let J of Q){let W="shape"in J.inputSchema?J.inputSchema.shape:P$.object({}).shape,K=J.outputSchema&&"shape"in J.outputSchema?J.outputSchema.shape:P$.object({}).shape;Y.registerTool(J.name,{description:J.description??"",inputSchema:W,outputSchema:K,annotations:J.annotations,_meta:J._meta},async(F)=>{try{let H=await J.handler(F);return{content:[{type:"text",text:JSON.stringify(H)}],structuredContent:H}}catch(H){return{content:[{type:"text",text:`Error: ${H.message}`}],isError:!0}}})}let G=new XQ({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await Y.connect(G),KJ(Y,G,$,"mcp:dev-assets")}async function Qc$($,Z,X,Q){let G=Xc$(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 rW6="./data/assets",nu$=3600,au$,Yc$;var Gc$=w(()=>{R$();my();D8();ol();jC();fX();KP0();au$=new H1;au$.all("/",async($)=>{let Z=$.get("studioContext"),X=new URL($.req.url),Q=`${X.protocol}//${X.host}`;return BZ1($.req.raw,Z,Q)});Yc$=au$});var Jc$={};G4(Jc$,{mountDevRoutes:()=>sW6});function sW6($,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 BZ1(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(),F=await Qc$(W,K,Y,J);if(F.isError)return Q.json(F.content,500);return Q.json(F.content)}),$.use("/mcp/dev-assets",Z),$.route("/mcp/dev-assets",Yc$);let X=new H1;X.use("*",GW({mountPath:"/api/dev-assets"})),X.route("/",WP0({orgFromPath:!1})),$.route("/api/dev-assets",X)}var Wc$=w(()=>{D8();y61();KP0();Gc$()});import{sql as eW6}from"kysely";import{randomUUID as Kc$}from"crypto";import{z as $K6}from"zod";async function XK6($){let Z=new Date().toISOString(),X=Kc$(),Q=m4.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:Kc$(),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 eW6`SELECT
2916
2916
  pg_notify('studio_events', ${X}),