decocms 4.286.8 → 4.286.9

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 (239) hide show
  1. package/dist/client/assets/{AlertCircle-Dw3SdgUF.js → AlertCircle-CySDkuFI.js} +1 -1
  2. package/dist/client/assets/{AreaChart-D2vym8KR.js → AreaChart-Diq94zn-.js} +1 -1
  3. package/dist/client/assets/{ArrowLeft-DvpAv4zp.js → ArrowLeft-BB7ODm9w.js} +1 -1
  4. package/dist/client/assets/{ArrowUp-B0Lqqmya.js → ArrowUp-OmZF_t7M.js} +1 -1
  5. package/dist/client/assets/{Check-ttzquLcG.js → Check-CoQiKRJX.js} +1 -1
  6. package/dist/client/assets/{CheckCircle-Cy0Rnrsm.js → CheckCircle-CZBsNhly.js} +1 -1
  7. package/dist/client/assets/{ChevronDown-rzwAIpBt.js → ChevronDown-Cl_G7d02.js} +1 -1
  8. package/dist/client/assets/{ChevronRight-DkPzpckV.js → ChevronRight-l0uFz17M.js} +1 -1
  9. package/dist/client/assets/{ChevronSelectorVertical-LJxUB6jw.js → ChevronSelectorVertical-CdAnSbeG.js} +1 -1
  10. package/dist/client/assets/{ChevronUp-BHQR4UV3.js → ChevronUp-CTDZzTRR.js} +1 -1
  11. package/dist/client/assets/{Circle-IuE7HGfM.js → Circle-DCAX0uOn.js} +1 -1
  12. package/dist/client/assets/{Copy01-C9x-qaA5.js → Copy01-cb1xdMeW.js} +1 -1
  13. package/dist/client/assets/{CreditCard01-BjpClgK3.js → CreditCard01-BdRQMZi3.js} +1 -1
  14. package/dist/client/assets/{DotsVertical-Ub5HmhJM.js → DotsVertical-C-e3IXLs.js} +1 -1
  15. package/dist/client/assets/{Download01-Cti1tG3M.js → Download01-RXuY9PVr.js} +1 -1
  16. package/dist/client/assets/{Eye-DF8_ZcTD.js → Eye-Dzmn8laT.js} +1 -1
  17. package/dist/client/assets/{FilterLines-Du0AyVq8.js → FilterLines-Du7-qdeg.js} +1 -1
  18. package/dist/client/assets/{Flag01-inBVZiX0.js → Flag01-Cgf9RGWm.js} +1 -1
  19. package/dist/client/assets/{Globe01-BkycGCgE.js → Globe01-B3eypf7Z.js} +1 -1
  20. package/dist/client/assets/{Globe04-y7iSy_To.js → Globe04-DGBjwe92.js} +1 -1
  21. package/dist/client/assets/{HardDrive-Cbjcxk-m.js → HardDrive-TuXYiIph.js} +1 -1
  22. package/dist/client/assets/{Key01-haAH_VDS.js → Key01-5y05h8xe.js} +1 -1
  23. package/dist/client/assets/{LinkExternal01-CgEKyQta.js → LinkExternal01-Dj2RocB0.js} +1 -1
  24. package/dist/client/assets/{LockUnlocked01-DiK5Iz2C.js → LockUnlocked01-DmE9B4eY.js} +1 -1
  25. package/dist/client/assets/{LogOut01-E2kdEUrB.js → LogOut01-xJjCoaem.js} +1 -1
  26. package/dist/client/assets/{Monitor01-lD-OxyiV.js → Monitor01-DNfWqiVo.js} +1 -1
  27. package/dist/client/assets/{Palette-DR7lX3pn.js → Palette-Ca5J7ydX.js} +1 -1
  28. package/dist/client/assets/{Play-CqkwkZ_-.js → Play-CaxAtGGz.js} +1 -1
  29. package/dist/client/assets/{Plus-CjLpdcmH.js → Plus-CVuoen9m.js} +1 -1
  30. package/dist/client/assets/{SearchLg-5ZGRHNDG.js → SearchLg-ULxpJ1Bt.js} +1 -1
  31. package/dist/client/assets/{SearchMd-B4WVXsSg.js → SearchMd-CoaYTf74.js} +1 -1
  32. package/dist/client/assets/{Settings02-BWIBgnXP.js → Settings02-Ctx2jq3F.js} +1 -1
  33. package/dist/client/assets/{Share07-BEb7ZfUu.js → Share07-Mo6Fcsol.js} +1 -1
  34. package/dist/client/assets/{Shield01-iM0j3TRP.js → Shield01-CCM448Vy.js} +1 -1
  35. package/dist/client/assets/{Stars01-Cvv6NHCU.js → Stars01-Cvy16LXb.js} +1 -1
  36. package/dist/client/assets/{Stars02-BXqGEI9t.js → Stars02-BTSDg-yp.js} +1 -1
  37. package/dist/client/assets/{Sun-gEB_AVfi.js → Sun-DDjWGsJo.js} +1 -1
  38. package/dist/client/assets/{SwitchHorizontal01-CoU25efW.js → SwitchHorizontal01-CZEwbna7.js} +1 -1
  39. package/dist/client/assets/{Tag01-C5aAw6Cw.js → Tag01-CNpFRwik.js} +1 -1
  40. package/dist/client/assets/{ThumbsUp-CbyaOU9x.js → ThumbsUp-2KuOmMlO.js} +1 -1
  41. package/dist/client/assets/{Tool01-RVeqlI6_.js → Tool01-Dts8V4zb.js} +1 -1
  42. package/dist/client/assets/{Tool02-BeH-qK4u.js → Tool02-Bs7vLB0r.js} +1 -1
  43. package/dist/client/assets/{Trash01-B7qNZLDY.js → Trash01-DRWHI2Bc.js} +1 -1
  44. package/dist/client/assets/{TrendUp01-HanaeZo1.js → TrendUp01-Dtsq3UUy.js} +1 -1
  45. package/dist/client/assets/{Upload01-CgYfI0IF.js → Upload01-SwLjey2j.js} +1 -1
  46. package/dist/client/assets/{User01-C1MlDYm7.js → User01-DBxTqqZ_.js} +1 -1
  47. package/dist/client/assets/{UserSquare-RWXgNzap.js → UserSquare-DTBnhKEL.js} +1 -1
  48. package/dist/client/assets/{Users01-CTMGsTHJ.js → Users01-DlM_Dnpr.js} +1 -1
  49. package/dist/client/assets/{Users03-BsPXbQir.js → Users03-TCUrKubc.js} +1 -1
  50. package/dist/client/assets/{XCircle-Ch-rTPae.js → XCircle-MJeeThqu.js} +1 -1
  51. package/dist/client/assets/{XClose-SNsEgcxK.js → XClose-DvNO5Nzt.js} +1 -1
  52. package/dist/client/assets/{YAxis-pQW5L7Zi.js → YAxis-DAEuH7pB.js} +1 -1
  53. package/dist/client/assets/{Zap-BSaUAe49.js → Zap-Cbis5Ots.js} +1 -1
  54. package/dist/client/assets/{ZapSquare-CCnJPz6U.js → ZapSquare-B8jDLXES.js} +1 -1
  55. package/dist/client/assets/{access-gate-BaqGBtda.js → access-gate-DmA6EBSs.js} +1 -1
  56. package/dist/client/assets/{agent-icon-C4iQDDhi.js → agent-icon-BnE44Jmh.js} +1 -1
  57. package/dist/client/assets/{agents-list-Cn-17_xd.js → agents-list-DH_Nbme2.js} +1 -1
  58. package/dist/client/assets/{ai-providers-C5SElYFt.js → ai-providers-IOK1DhCt.js} +1 -1
  59. package/dist/client/assets/{alert-dialog-zxFDb_4-.js → alert-dialog-CqV6ljrU.js} +1 -1
  60. package/dist/client/assets/{alert-0e0aLDNC.js → alert-vpspiBMk.js} +1 -1
  61. package/dist/client/assets/{api-keys-DrZiJRx7.js → api-keys-D9yaMTyw.js} +1 -1
  62. package/dist/client/assets/{app-editor-Cx3oAgsE.js → app-editor-D2p7IXNX.js} +1 -1
  63. package/dist/client/assets/{auth-BOaJ5nut.js → auth-Booy03Jk.js} +1 -1
  64. package/dist/client/assets/{auth-catchall-YYRz5LwZ.js → auth-catchall-DNlLMPPv.js} +1 -1
  65. package/dist/client/assets/{auth-entry-k-ynOCuT.js → auth-entry-B2AlzrSe.js} +1 -1
  66. package/dist/client/assets/{auth-split-layout-DxK9ThJI.js → auth-split-layout-qb8DBYic.js} +1 -1
  67. package/dist/client/assets/{authenticate-and-persist-oauth-ByMzEyLt.js → authenticate-and-persist-oauth-CmndGCoy.js} +1 -1
  68. package/dist/client/assets/{automation-list-row-A76srB5C.js → automation-list-row-DR_em0ct.js} +1 -1
  69. package/dist/client/assets/{automation-runs-DZnf-9zL.js → automation-runs-BVfapcJW.js} +153 -154
  70. package/dist/client/assets/{automations-f3L-tUAH.js → automations-CFAnBhFU.js} +1 -1
  71. package/dist/client/assets/{avatar-BgfkuwRB.js → avatar-D-bODSns.js} +1 -1
  72. package/dist/client/assets/{badge-Ch_ONHF2.js → badge-cxReBOxc.js} +1 -1
  73. package/dist/client/assets/{block-document-bPzW9mKv.js → block-document-DvNkwTJH.js} +1 -1
  74. package/dist/client/assets/{breadcrumb-BXH4egSF.js → breadcrumb-iVWuyc9x.js} +1 -1
  75. package/dist/client/assets/{buckets-qcs3thvR.js → buckets-BR1UrbRA.js} +1 -1
  76. package/dist/client/assets/{bulk-category-panel-CmUwQSOp.js → bulk-category-panel-CtyVNSxB.js} +1 -1
  77. package/dist/client/assets/{capability-load-error-CezTFxpc.js → capability-load-error-m72FBMhN.js} +1 -1
  78. package/dist/client/assets/{cards-BansJ4hg.js → cards-ZowjpGHm.js} +1 -1
  79. package/dist/client/assets/category-editor-Ds4jO2ly.js +1 -0
  80. package/dist/client/assets/{chart-u6_W5n2i.js → chart-DIdj6nQQ.js} +1 -1
  81. package/dist/client/assets/{chat-context-CIW918kd.js → chat-context-Bcaj9GGz.js} +5 -5
  82. package/dist/client/assets/{checkbox-CYFHboNO.js → checkbox-_f6yJpXQ.js} +1 -1
  83. package/dist/client/assets/{choose-editor-DI_FfPXG.js → choose-editor-DmBE59G7.js} +1 -1
  84. package/dist/client/assets/{cli-auth-success-COIiH1IT.js → cli-auth-success-C1wVlshA.js} +1 -1
  85. package/dist/client/assets/{collection-detail-384DJk4b.js → collection-detail-bpKUPo55.js} +1 -1
  86. package/dist/client/assets/{collection-display-button-BSIIeB-1.js → collection-display-button-DC7kfJsy.js} +1 -1
  87. package/dist/client/assets/{collection-search-CNiN7_WJ.js → collection-search-VBS9e7ZP.js} +1 -1
  88. package/dist/client/assets/{collection-table-wrapper-DESOtwDn.js → collection-table-wrapper-Fn_U26YS.js} +1 -1
  89. package/dist/client/assets/{collection-tabs-CQNJVAAz.js → collection-tabs-Dum8wYlH.js} +1 -1
  90. package/dist/client/assets/{command-BlLeosbi.js → command-BJrffI7f.js} +1 -1
  91. package/dist/client/assets/{commerce-onboarding-nnotuPxX.js → commerce-onboarding-DLuX3mHK.js} +1 -1
  92. package/dist/client/assets/{config-x7MyaYKx.js → config-ClflJ8mr.js} +1 -1
  93. package/dist/client/assets/{connect-4EgAstDP.js → connect-DRjwAl48.js} +2 -2
  94. package/dist/client/assets/{connection-card-BE77KM2M.js → connection-card-DUgY19kv.js} +1 -1
  95. package/dist/client/assets/{connection-CUmZGX4o.js → connection-dXu7KNvm.js} +1 -1
  96. package/dist/client/assets/{connection-detail-B0Ek8gHD.js → connection-detail-Czc-iEA0.js} +1 -1
  97. package/dist/client/assets/{connection-form-helpers-BI3u_trm.js → connection-form-helpers-_bfjQC3M.js} +1 -1
  98. package/dist/client/assets/{connections-JF3QzcpT.js → connections-DlcOFFRT.js} +1 -1
  99. package/dist/client/assets/{decopilot-sse-pool-DPRBorRx.js → decopilot-sse-pool-CSymSA16.js} +1 -1
  100. package/dist/client/assets/{dialog-Dr0JFHjN.js → dialog-C5eRYxRp.js} +1 -1
  101. package/dist/client/assets/{domain-settings-ADY97haU.js → domain-settings-BH-O1G2y.js} +1 -1
  102. package/dist/client/assets/{drawer-CHTd7tLQ.js → drawer-B5RPzA5q.js} +1 -1
  103. package/dist/client/assets/{dropdown-menu-CEKKyK2-.js → dropdown-menu-BUM2ZKd3.js} +1 -1
  104. package/dist/client/assets/{empty-state-CBiHv5h7.js → empty-state-DfWMRost.js} +1 -1
  105. package/dist/client/assets/{extract-connection-data-DRoFrfak.js → extract-connection-data-BLRIr0QA.js} +1 -1
  106. package/dist/client/assets/{file-explorer-Buvt7Jx5.js → file-explorer-C2ayBWwg.js} +1 -1
  107. package/dist/client/assets/{file-type-icon-DcJEJkZX.js → file-type-icon-ByldKg4g.js} +1 -1
  108. package/dist/client/assets/{form-D77whi9m.js → form-DzqH4nYI.js} +1 -1
  109. package/dist/client/assets/{general-ZF5faWPg.js → general-5QlppPKR.js} +1 -1
  110. package/dist/client/assets/{github-icon-C4ja-GnH.js → github-icon-4zdJwqYh.js} +1 -1
  111. package/dist/client/assets/{github-repo-picker-DrUrjUkS.js → github-repo-picker-D52qvjxt.js} +1 -1
  112. package/dist/client/assets/{hooks-B5_amjoz.js → hooks-DDmyNgv3.js} +1 -1
  113. package/dist/client/assets/{index-CvCiTM5m.js → index--ioJ2o-u.js} +1 -1
  114. package/dist/client/assets/{index-CSwDxW2p.js → index-5gwi64rK.js} +1 -1
  115. package/dist/client/assets/{index-DAIr6pIT.js → index-BjpDl4dR.js} +1 -1
  116. package/dist/client/assets/{index-DI9v52-X.js → index-C6Y2Koh2.js} +1 -1
  117. package/dist/client/assets/{index-pVQiTPZE.js → index-CFdTu8yS.js} +1 -1
  118. package/dist/client/assets/index-CYD6iwga.js +1 -0
  119. package/dist/client/assets/{index-C2wKJjGr.js → index-CbYn6R_7.js} +3 -3
  120. package/dist/client/assets/index-Di87R3uJ.js +759 -0
  121. package/dist/client/assets/{index-BDQwfrOa.js → index-kRw55cWn.js} +4 -4
  122. package/dist/client/assets/{index-redirect-BJiQK1CE.js → index-redirect-FqOZ8qxn.js} +1 -1
  123. package/dist/client/assets/{index-CFKzku9b.js → index-zMWVGpfR.js} +1 -1
  124. package/dist/client/assets/{infra-billing-DPUTsbXW.js → infra-billing-DIUXfA-Y.js} +1 -1
  125. package/dist/client/assets/{input-tkXOFrYf.js → input-Dpp5l8sc.js} +1 -1
  126. package/dist/client/assets/{integration-icon-Czqr9NJo.js → integration-icon-7B3N5uJo.js} +1 -1
  127. package/dist/client/assets/{invite-member-dialog-CGeklCQn.js → invite-member-dialog--0NPHrtC.js} +1 -1
  128. package/dist/client/assets/{label-fUj9ClwH.js → label-BrNTx-00.js} +1 -1
  129. package/dist/client/assets/{layout-BBcH7LvX.js → layout-Dtaa-nFL.js} +1 -1
  130. package/dist/client/assets/{login-BH9TUYGs.js → login-BB7Rt7jB.js} +1 -1
  131. package/dist/client/assets/{mcp-oauth-2Pcd3vN4.js → mcp-oauth-cazow6f9.js} +1 -1
  132. package/dist/client/assets/{members-HGEkAGWi.js → members-DJknuJ1N.js} +1 -1
  133. package/dist/client/assets/{monaco-editor-DhL3ddUA.js → monaco-editor-CorgchLZ.js} +1 -1
  134. package/dist/client/assets/{monitoring-stats-row-CItbBR3E.js → monitoring-stats-row-BT-Ngw_6.js} +1 -1
  135. package/dist/client/assets/{multi-select-CHxyqYOg.js → multi-select-BO9xZAZj.js} +1 -1
  136. package/dist/client/assets/{oauth-callback-DjOSMyhv.js → oauth-callback-DDRdYebV.js} +1 -1
  137. package/dist/client/assets/{oauth-callback-ai-provider-CxieGga4.js → oauth-callback-ai-provider-BortRqW_.js} +1 -1
  138. package/dist/client/assets/{onboarding-BQeEDsEd.js → onboarding-Cnxxn6kN.js} +1 -1
  139. package/dist/client/assets/{org-layout-DLRQ_M2O.js → org-layout-geBLKUY3.js} +1 -1
  140. package/dist/client/assets/{organization-choice-Cktc0PlC.js → organization-choice-RdkoFKEW.js} +1 -1
  141. package/dist/client/assets/{orgs-Crpd8ei1.js → orgs-BgRCUMKz.js} +1 -1
  142. package/dist/client/assets/{page-seo-form-DUh68KII.js → page-seo-form-DMXg4GbO.js} +1 -1
  143. package/dist/client/assets/{popover-DjgpLaeH.js → popover-Cr34V7iV.js} +1 -1
  144. package/dist/client/assets/{post-calendar-Bgj5C5Xs.js → post-calendar-DHMx5cqk.js} +1 -1
  145. package/dist/client/assets/{post-editor-DdJ8ItyW.js → post-editor-WHwOZieF.js} +1 -1
  146. package/dist/client/assets/{primitives-cHgQijHE.js → primitives-B6MrFxhJ.js} +1 -1
  147. package/dist/client/assets/{profile-BwpVPWzk.js → profile-D5aRYG0C.js} +1 -1
  148. package/dist/client/assets/{project-app-view-BG8-nnSR.js → project-app-view-Bvh_kRrq.js} +1 -1
  149. package/dist/client/assets/{prompts-C_nWMi_z.js → prompts-C63HeNZS.js} +1 -1
  150. package/dist/client/assets/record-editor-sxjxKjgW.js +1 -0
  151. package/dist/client/assets/redirect-editor-D39sP-vp.js +1 -0
  152. package/dist/client/assets/registry-ChNMYft8.js +2 -0
  153. package/dist/client/assets/{registry-layout-OkjMTUFx.js → registry-layout-DMqk-hGf.js} +4 -4
  154. package/dist/client/assets/{reports-Dm6R8rr1.js → reports-BzwoTZeA.js} +1 -1
  155. package/dist/client/assets/{require-capability-DQJ7411V.js → require-capability-Cry7YHQI.js} +1 -1
  156. package/dist/client/assets/{required-auth-layout-YsYr38eN.js → required-auth-layout-D3qq7JAj.js} +1 -1
  157. package/dist/client/assets/{reset-password-BhAfZXCe.js → reset-password-Bb6BEmC-.js} +1 -1
  158. package/dist/client/assets/{review-settings-j2RX7TKZ.js → review-settings-DIqY0ZXS.js} +1 -1
  159. package/dist/client/assets/{roles-SMLYunvV.js → roles-BUHOq57w.js} +1 -1
  160. package/dist/client/assets/{scroll-area-BaCu9Erq.js → scroll-area-CwBEEij0.js} +1 -1
  161. package/dist/client/assets/{search-input-B_d2onV1.js → search-input-BnGZXUUf.js} +1 -1
  162. package/dist/client/assets/{secrets--tEhMEdB.js → secrets-CtSvxVD-.js} +1 -1
  163. package/dist/client/assets/{sections-editor-Q4Hskisl.js → sections-editor-BkMAyoHy.js} +1 -1
  164. package/dist/client/assets/{select-KvNOZN66.js → select-M-APHiZT.js} +1 -1
  165. package/dist/client/assets/{select-model-DrSe295o.js → select-model-C6nZF0X7.js} +1 -1
  166. package/dist/client/assets/{self-tool-result-D3Lb6Jbg.js → self-tool-result-B-dwuOyI.js} +1 -1
  167. package/dist/client/assets/{seo-editor-BqS1IWQX.js → seo-editor-I_ClNKhS.js} +1 -1
  168. package/dist/client/assets/{settings-layout-BfrOqoIG.js → settings-layout-D2AMt2YH.js} +1 -1
  169. package/dist/client/assets/{shell-controls-DQe6F9nz.js → shell-controls-D6CGfkZH.js} +1 -1
  170. package/dist/client/assets/{shell-layout-DGXTmLep.js → shell-layout-Vy7vbE5Z.js} +1 -1
  171. package/dist/client/assets/{spinner-CLUjBH1z.js → spinner-DTb4kyVC.js} +1 -1
  172. package/dist/client/assets/{sso-T750OslB.js → sso-BVDRWvuz.js} +1 -1
  173. package/dist/client/assets/store-registry-5bqJML8Y.js +2 -0
  174. package/dist/client/assets/{store-CGcLokDp.js → store-sLnztQSh.js} +1 -1
  175. package/dist/client/assets/{super-agent-icon-OEcl78rY.js → super-agent-icon-kuZUsoxE.js} +1 -1
  176. package/dist/client/assets/{switch-D_XAP-VR.js → switch-4MQ9PYFn.js} +1 -1
  177. package/dist/client/assets/{synced-repos-DEcRdtsc.js → synced-repos-Q1JTvzar.js} +1 -1
  178. package/dist/client/assets/{tab-id-Ksgtpkhm.js → tab-id-CQesTqLl.js} +1 -1
  179. package/dist/client/assets/{table-ebymWD54.js → table-B0cp8jQG.js} +1 -1
  180. package/dist/client/assets/{tabs-J6t-1xy5.js → tabs-BmPIa_mu.js} +1 -1
  181. package/dist/client/assets/{task-board-YhYj0m6c.js → task-board-Cr-nv6fq.js} +1 -1
  182. package/dist/client/assets/{task-filters-a--jprJW.js → task-filters-C_gIUGmD.js} +1 -1
  183. package/dist/client/assets/{tasks-DUnpKYSO.js → tasks-Cb5Hvfyl.js} +1 -1
  184. package/dist/client/assets/{textarea-CnYvlpOR.js → textarea-BKN2c82K.js} +1 -1
  185. package/dist/client/assets/{toggle-group-CW6PwHGb.js → toggle-group-C-sVfzEB.js} +1 -1
  186. package/dist/client/assets/{toolbar-BFVDxa1z.js → toolbar-C4DLCGY_.js} +1 -1
  187. package/dist/client/assets/{track-1dgUcOI_.js → track-CfBxugSg.js} +1 -1
  188. package/dist/client/assets/{types-BCm_iyZj.js → types-BLVNuKk3.js} +1 -1
  189. package/dist/client/assets/{use-ai-providers-BrJYoUgs.js → use-ai-providers-B-obOmqH.js} +1 -1
  190. package/dist/client/assets/{use-api-keys-BgHiSrv9.js → use-api-keys-D0jkTXHn.js} +1 -1
  191. package/dist/client/assets/{use-automations-gY7mK1L9.js → use-automations-BqNae25x.js} +1 -1
  192. package/dist/client/assets/{use-autosave-CufMOJRo.js → use-autosave-Dv-IeiGC.js} +1 -1
  193. package/dist/client/assets/{use-commerce-diagnostic-D5GsPjzv.js → use-commerce-diagnostic-CBKGF0Aw.js} +1 -1
  194. package/dist/client/assets/{use-connection-BiFW_cHg.js → use-connection-KE4Z3WJ_.js} +1 -1
  195. package/dist/client/assets/{use-copy-CdoVt82M.js → use-copy-DO33QwuC.js} +1 -1
  196. package/dist/client/assets/{use-create-virtual-mcp-BjEls0y2.js → use-create-virtual-mcp-CrBtXC3x.js} +1 -1
  197. package/dist/client/assets/{use-debounced-autosave--3PwEBvC.js → use-debounced-autosave-BYurijjF.js} +1 -1
  198. package/dist/client/assets/{use-debounced-value-jIkPbsOp.js → use-debounced-value-CFOfzcG4.js} +1 -1
  199. package/dist/client/assets/{use-decopilot-events-CapdWR8Q.js → use-decopilot-events-MmWhMsGA.js} +1 -1
  200. package/dist/client/assets/{use-delete-connection-DvjMa9k1.js → use-delete-connection-CI7FNlH6.js} +1 -1
  201. package/dist/client/assets/{use-deployment-admin-eZlkTqNx.js → use-deployment-admin-DMVJkEBR.js} +1 -1
  202. package/dist/client/assets/{use-file-configs-ndjlQHxI.js → use-file-configs-DDF7p6KR.js} +1 -1
  203. package/dist/client/assets/{use-infinite-scroll-B9qolsch.js → use-infinite-scroll-BEGE8jUt.js} +1 -1
  204. package/dist/client/assets/{use-join-requests-UHLAp14h.js → use-join-requests-BVJ0y4yM.js} +1 -1
  205. package/dist/client/assets/{use-mcp-auth-status-BZAPRmOL.js → use-mcp-auth-status-DSxJkUY2.js} +1 -1
  206. package/dist/client/assets/{use-mcp-client-41m5xvE3.js → use-mcp-client-CAS9_zw7.js} +1 -1
  207. package/dist/client/assets/{use-mcp-tools-uQ6_5oAd.js → use-mcp-tools-ZP0kq4P1.js} +1 -1
  208. package/dist/client/assets/{use-members-CDcE1HPu.js → use-members-B9F2MC14.js} +1 -1
  209. package/dist/client/assets/{use-navigate-to-agent-P1K0kc_y.js → use-navigate-to-agent-BQyZBFkq.js} +1 -1
  210. package/dist/client/assets/{use-org-auth-client-ChuKLXBf.js → use-org-auth-client-FjFM2min.js} +1 -1
  211. package/dist/client/assets/{use-org-repo-syncs-BSB4bUfY.js → use-org-repo-syncs-BLLUkvlx.js} +1 -1
  212. package/dist/client/assets/{use-org-sso-MHfzksKB.js → use-org-sso-CXbm3lTN.js} +1 -1
  213. package/dist/client/assets/{use-organization-roles-DjbjXB_I.js → use-organization-roles-DWrru3h6.js} +1 -1
  214. package/dist/client/assets/{use-organization-settings-DQqbGH5p.js → use-organization-settings-Q7RvXXM1.js} +1 -1
  215. package/dist/client/assets/{use-registry-connections-CoPbabB-.js → use-registry-connections-BH7frhH7.js} +1 -1
  216. package/dist/client/assets/{use-secrets-CUaQOZAO.js → use-secrets-pLSU8FeC.js} +1 -1
  217. package/dist/client/assets/{use-section-preview-base-BMwP9IX7.js → use-section-preview-base-CuLByp45.js} +1 -1
  218. package/dist/client/assets/{use-status-sounds-B7xb8CcA.js → use-status-sounds-jAj2BDKx.js} +1 -1
  219. package/dist/client/assets/{use-tags-BEPQVwa6.js → use-tags-uNJcfqFW.js} +1 -1
  220. package/dist/client/assets/{use-view-mode-BLuUt2zI.js → use-view-mode-Dh_pkB6r.js} +1 -1
  221. package/dist/client/assets/{use-virtual-mcp-CCV4A6AF.js → use-virtual-mcp-HAZ8aJlV.js} +1 -1
  222. package/dist/client/assets/useInfiniteQuery-JG_B9ZWK.js +1 -0
  223. package/dist/client/assets/useSuspenseInfiniteQuery-auoy3kFV.js +1 -0
  224. package/dist/client/assets/{users-Da7f2Dpx.js → users-DHEcforB.js} +1 -1
  225. package/dist/client/assets/{variant-calendar-B36Wo9EG.js → variant-calendar-1ZcoAaB_.js} +1 -1
  226. package/dist/client/assets/{view-mode-toggle-B6ucBwrs.js → view-mode-toggle-CEuD4bwV.js} +1 -1
  227. package/dist/client/index.html +1 -1
  228. package/dist/server/cli.js +1 -1
  229. package/dist/server/server.js +1 -1
  230. package/package.json +1 -1
  231. package/dist/client/assets/category-editor-Dwj7-ITM.js +0 -1
  232. package/dist/client/assets/index-AlHFSHJa.js +0 -748
  233. package/dist/client/assets/index-pLb5aaYO.js +0 -1
  234. package/dist/client/assets/record-editor-C27xFv26.js +0 -1
  235. package/dist/client/assets/redirect-editor-q9UCECQI.js +0 -1
  236. package/dist/client/assets/registry-DY11Hm88.js +0 -2
  237. package/dist/client/assets/store-registry-CgBS4zc9.js +0 -2
  238. package/dist/client/assets/useInfiniteQuery-C1ZiiXDY.js +0 -1
  239. package/dist/client/assets/useSuspenseInfiniteQuery-F9QpXYtm.js +0 -1
@@ -1444,7 +1444,7 @@ Usage: deco services <up|down|status>`),process.exit(1)}}var Ip1=L(()=>{uf()});f
1444
1444
  `.execute($);if(Number(W.rows[0]?.cnt)===0){console.warn(`Failed to migrate ${J}/${K}, keeping in old table`);continue}}await Uy`
1445
1445
  DELETE FROM kysely_migration WHERE name = ${Q}
1446
1446
  `.execute($)}}async function Ba1($){await ca8($),await la8($);let Z=new Na1({db:$,provider:{getMigrations:()=>Promise.resolve(_p0)}}),{error:Q,results:X}=await Z.migrateToLatest(),Y=0;if(X?.forEach((G)=>{if(G.status==="Success")Y++;else if(G.status==="Error")console.error(`Failed to execute migration "${G.migrationName}"`)}),Q)throw console.error("Failed to migrate"),console.error(Q),Q;return Y}async function ma8($){let{keepOpen:Z=!1,database:Q,skipBetterAuth:X=!1}=$??{},Y="skipped";if(!X&&!Q)Y=await xl0();let G=Q??H8(),J=async()=>{if(!Z&&!Q)await oB(G).catch((K)=>{console.warn("Warning: Error closing database:",K)})};try{let K=await Ba1(G.db);return await J(),{betterAuth:Y,kysely:K}}catch(K){throw await J(),K}}async function da8(){let $=H8(),Z=new Na1({db:$.db,provider:{getMigrations:()=>Promise.resolve(_p0)}}),{error:Q,results:X}=await Z.migrateDown();if(X?.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}"`)}),Q)throw console.error("Failed to rollback migration"),console.error(Q),Q}var La1=L(()=>{Fa1();fl0();QQ()});async function N70($){let Z={...process.env},Q=J80($,Z);console.log(Mw1(Q.settings.encryptionKey));let X=Q.settings.betterAuthSecret||(Q.settings.localMode?Qt1(Q.settings.dataDir):""),{ensureServices:Y}=await Promise.resolve().then(() => (EZ0(),wZ0)),{outputs:G,services:J}=await Y({home:Q.settings.dataDir,externalDatabaseUrl:Q.externalDatabaseUrl,externalNatsUrl:Q.externalNatsUrl});if(!Q.skipMigrations){let{migrateBetterAuth:W}=await Promise.resolve().then(() => (fl0(),Yt1));await W(G.databaseUrl);let{createDatabase:H}=await Promise.resolve().then(() => (QQ(),zn1)),{migrateToLatest:F}=await Promise.resolve().then(() => (La1(),Oa1)),N=H(G.databaseUrl);await F({keepOpen:!0,database:N,skipBetterAuth:!0})}let K={...Q.settings,betterAuthSecret:X,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}:{}};return qp1(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 vp0=L(()=>{uf();Xt1();R$()});var ja1={};Q0(ja1,{updateService:()=>yE,subscribeCliState:()=>bp0,setTuiConsoleIntercepted:()=>U70,setServerUrl:()=>Op,setMigrationsDone:()=>Bp,setDevMode:()=>pa8,resetCliStateForTests:()=>ia8,isTuiConsoleIntercepted:()=>B70,getCliState:()=>fp0,addLogEntry:()=>QO});function Da1(){return[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}]}function wa1(){return{services:Da1(),migrationsStatus:"pending",serverUrl:null,logs:[]}}function ia8(){lX=wa1()}function Up(){for(let $ of xp0)$()}function fp0(){return lX}function bp0($){return xp0.add($),()=>xp0.delete($)}function yE($){lX={...lX,services:lX.services.map((Z)=>Z.name===$.name?$:Z)},Up()}function Bp(){lX={...lX,migrationsStatus:"done"},Up()}function Op($){lX={...lX,serverUrl:$},Up()}function QO($){let Z=[...lX.logs,$];lX={...lX,logs:Z.length>500?Z.slice(-500):Z},Up()}function pa8(){lX={...lX,services:[...Da1(),{name:"API",status:"pending",port:0},{name:"Vite",status:"pending",port:0}]},Up()}function U70($){Ea1=$}function B70(){return Ea1}var lX,xp0,Ea1=!1;var gE=L(()=>{lX=wa1();xp0=new Set});import{createServer as za1}from"net";function na8($){return new Promise((Z)=>{let Q=za1();Q.once("error",()=>Z(!1)),Q.listen($,"0.0.0.0",()=>{Q.close(()=>Z(!0))})})}async function Lp($){if(await na8($))return $;let Z=await new Promise((Q,X)=>{let Y=za1();Y.once("error",X),Y.listen(0,"0.0.0.0",()=>{let G=Y.address(),J=typeof G==="object"&&G?G.port:0;Y.close(()=>Q(J))})});return console.warn(`Port ${$} is in use, using port ${Z} instead.`),Z}var yp0=()=>{};var hp0={};Q0(hp0,{startDevServer:()=>oa8,pipeToLogStore:()=>gp0});import{join as ta8}from"path";function gp0($){let Z=$.getReader(),Q=new TextDecoder,X="";function Y(){let G=X.split(`
1447
- `);X=G.pop()??"";for(let J of G){let K=Bun.stripANSI(J).replace(/^\[\d+\]\s*/,"").trim();if(!K)continue;QO({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:K})}}(async()=>{try{for(;;){let{done:G,value:J}=await Z.read();if(G)break;X+=Q.decode(J,{stream:!0}),Y()}}catch{}if(X.trim()){let G=Bun.stripANSI(X).replace(/^\[\d+\]\s*/,"").trim();if(G)QO({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:G})}})()}async function oa8($){let{baseUrl:Z,noTui:Q}=$,X=process.env.HOST==="0.0.0.0"&&Boolean(process.env.PORT),Y=X?process.env.PORT:$.vitePort,G=Z||`http://localhost:${Y}`,J=X?await Lp(Number(Y)+1):await Lp(Number($.port)),{settings:K,services:W,managedServiceNames:H}=await N70({port:String(J),home:$.home,baseUrl:$.baseUrl,localMode:$.localMode,skipMigrations:$.skipMigrations,noTui:$.noTui,vitePort:$.vitePort});for(let D of W)yE({name:D.name,status:"ready",port:D.port});Bp();let F=ta8(import.meta.dir,"..","..","..","..",".."),N=Q===!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.natsCredsPath?{NATS_CREDS:K.natsCredsPath}:{}},stdio:["inherit",N?"inherit":"pipe",N?"inherit":"pipe"]});if(!N)gp0(U.stdout),gp0(U.stderr);Op(G),yE({name:"Vite",status:"ready",port:Number(Y)}),yE({name:"API",status:"ready",port:Number(K.port)});let O=async(D)=>{if(U.kill(D),await U.exited,H.length>0){let{stopServices:w}=await Promise.resolve().then(() => (EZ0(),wZ0));await w(K.dataDir)}};return process.on("SIGINT",()=>O("SIGINT")),process.on("SIGTERM",()=>O("SIGTERM")),{port:Number(Y),process:U}}var up0=L(()=>{vp0();gE();yp0()});var O70;var cp0=L(()=>{O70={name:"decocms",version:"4.286.8",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","@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 aa8,Text as Pa1}from"ink";import{jsx as sa8,jsxs as Aa1}from"react/jsx-runtime";function Ta1({version:$}){return Aa1(aa8,{flexDirection:"column",marginTop:1,children:[cZ0.map((Z,Q)=>sa8(Pa1,{color:lZ0[Q],children:Z},Q)),Aa1(Pa1,{dimColor:!0,children:[" v",$]})]})}var Ra1=L(()=>{Zp()});import{Box as hE,Text as XO}from"ink";import{Spinner as ea8}from"@inkjs/ui";import{jsx as $G,jsxs as By}from"react/jsx-runtime";function Ia1({status:$}){if($==="pending")return $G(ea8,{label:""});return $G(XO,{color:"green",children:"\u2713"})}function $s8($){return`${$.name}: ${$.port||"...."}`}function qa1({services:$,migrationsStatus:Z,home:Q,serverUrl:X}){return By(hE,{flexDirection:"column",paddingBottom:1,children:[$G(Ta1,{version:O70.version}),$G(hE,{marginBottom:1,children:$G(XO,{dimColor:!0,children:"\u2500".repeat(80)})}),$G(hE,{children:By(XO,{dimColor:!0,children:["Home: ",Q]})}),By(hE,{gap:2,children:[$.map((Y)=>By(hE,{gap:1,children:[$G(XO,{children:$s8(Y)}),$G(Ia1,{status:Y.status})]},Y.name)),By(hE,{gap:1,children:[$G(XO,{children:"Migrations"}),$G(Ia1,{status:Z})]})]}),$G(hE,{children:X?By(XO,{children:["Open in browser: ",$G(XO,{color:"cyan",children:X})]}):$G(XO,{dimColor:!0,children:"Starting..."})})]})}var Ma1=L(()=>{cp0();Ra1()});import{Box as Zs8,Text as Dp}from"ink";import{jsx as lp0,jsxs as mp0}from"react/jsx-runtime";function Qs8($){if($>=500)return"red";if($>=400)return"yellow";if($>=300)return"cyan";return"green"}function Va1({logs:$}){return lp0(Zs8,{flexDirection:"column",children:$.map((Z,Q)=>{if(Z.rawLine)return lp0(Dp,{dimColor:!0,children:Z.rawLine},Q);let X=Z.duration<1000?`${Z.duration}ms`:`${(Z.duration/1000).toFixed(1)}s`;return mp0(Dp,{children:[mp0(Dp,{dimColor:!0,children:[Z.method.padEnd(6)," ",Z.path.padEnd(30)," "]}),lp0(Dp,{color:Qs8(Z.status),children:Z.status}),mp0(Dp,{dimColor:!0,children:[" ",X.padStart(8)]})]},Q)})})}var ka1=()=>{};var dp0={};Q0(dp0,{App:()=>Gs8});import{Box as Xs8}from"ink";import{useSyncExternalStore as Ys8}from"react";import{jsx as Sa1,jsxs as Js8}from"react/jsx-runtime";function Gs8({home:$}){let Z=Ys8(bp0,fp0);return Js8(Xs8,{flexDirection:"column",children:[Sa1(qa1,{services:Z.services,migrationsStatus:Z.migrationsStatus,home:$,serverUrl:Z.serverUrl}),Sa1(Va1,{logs:Z.logs})]})}var ip0=L(()=>{Ma1();ka1();gE()});var u3="thread-gate",KN="decopilot-hosted-harness",WN="decopilot-hosted-harness-sandboxed",LJ="automations",YO="background-tools",uE="task-board-github-reads",cE="jira-push";var Ca1="9";function _a1($){return{name:"decocms",systemDatabaseUrl:$.systemDatabaseUrl,systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:$.poolSize,runAdminServer:!1,executorID:$.executorID,applicationVersion:Ca1,...$.listenQueues!==void 0?{listenQueues:$.listenQueues}:{}}}var va1=()=>{};import Ks8 from"pg";async function fa1($,Z){let{databaseUrl:Q,lockTimeoutMs:X=Ws8}=$,Y=$.log??((W)=>console.log(W)),G=new Ks8.Client({connectionString:Q});await G.connect();let J=Date.now(),K=!1;try{while(!K){if(K=(await G.query("SELECT pg_try_advisory_lock($1) AS locked",[xa1.toString()])).rows[0]?.locked===!0,K)break;if(Date.now()-J>=X)throw Error(`Timed out after ${X}ms waiting for the DBOS migration lock. Another process is still migrating the dbos schema; this pod will restart and retry.`);await W$(Hs8)}let W=Date.now()-J;if(W>1000)Y(`[dbos] waited ${W}ms for the migration lock; another process migrated first`);return await Z()}finally{if(K)try{await G.query("SELECT pg_advisory_unlock($1)",[xa1.toString()])}catch{}await G.end().catch(()=>{})}}var xa1=8314027461559302n,Ws8=600000,Hs8=500;var ba1=L(()=>{J4()});function Fs8(){let $=(process.env.BUN_OPTIONS??"").split(/\s+/).filter(Boolean);return[...process.argv.slice(1),...$]}function pp0($,Z){for(let Q=0;Q<$.length;Q++){let X=$[Q];if(X===void 0)continue;if(X===Z)return $[Q+1];if(X.startsWith(`${Z}=`))return X.slice(Z.length+1)}return}function ya1(){let $=Fs8();if($.includes("--cpu-prof")){console.log(JSON.stringify({msg:"cpu-profiling-active",dir:pp0($,"--cpu-prof-dir")??process.cwd(),name:pp0($,"--cpu-prof-name"),markdown:$.includes("--cpu-prof-md"),intervalUs:Number(pp0($,"--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 ga1(){if(process.env.HEAP_WATCH!=="1")return()=>{};let $=Number(process.env.HEAP_WATCH_INTERVAL_MS??60000),Z=async()=>{let Q=vE();if(!Q)return;let X={};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);X={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:Q.rss,heapUsed:Q.heapUsed,heapTotal:Q.heapTotal,external:Q.external,arrayBuffers:Q.arrayBuffers,...X}))};return Z().catch(()=>{}),L70=setInterval(()=>void Z().catch(()=>{}),$),L70.unref?.(),process.on("SIGUSR2",()=>{try{let Q=Bun.generateHeapSnapshot("v8"),X=typeof Q==="string"?Q:JSON.stringify(Q),Y=`/tmp/heap-${process.pid}-${Date.now()}.heapsnapshot`;Bun.write(Y,X),console.log(JSON.stringify({msg:"heap-snapshot-written",path:Y}))}catch(Q){console.error("[heap-watch] snapshot failed:",Q)}}),()=>{if(L70)clearInterval(L70)}}var L70;var ha1=()=>{};import*as Ns8 from"bun:jsc";function ua1(){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{Us8()}catch(G){return console.error("[stall-watchdog] failed to start sampling profiler:",G),()=>{}}let Q,X=performance.now()+Z,Y=()=>{let G=performance.now(),J=G-X;X=G+Z;let K=[];try{K=Bs8()?.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}))}Q=setTimeout(Y,Z),Q.unref?.()};return Q=setTimeout(Y,Z),Q.unref?.(),()=>{if(Q)clearTimeout(Q)}}var Us8,Bs8;var ca1=L(()=>{({startSamplingProfiler:Us8,samplingProfilerStackTraces:Bs8}=Ns8)});function la1(){ya1();let $=[ga1(),Un1(),ua1()];return()=>{for(let Z of $)Z()}}var ma1=L(()=>{Il0();ha1();ca1()});var lE=v((da1)=>{Object.defineProperty(da1,"__esModule",{value:!0});da1.RepublishHeaders=da1.DirectMsgHeaders=da1.JsHeaders=da1.AdvisoryKind=void 0;da1.isOrderedPushConsumerOptions=Os8;da1.isPullConsumer=Ls8;da1.isPushConsumer=Ds8;da1.isBoundPushConsumerOptions=ws8;function Os8($){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 Ls8($){return $.isPullConsumer()}function Ds8($){return $.isPushConsumer()}function ws8($){if($&&typeof $==="object")return"deliver_subject"in $||"deliver_group"in $||"idle_heartbeat"in $;return!1}da1.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"};da1.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"};da1.DirectMsgHeaders={Stream:"Nats-Stream",Sequence:"Nats-Sequence",TimeStamp:"Nats-Time-Stamp",Subject:"Nats-Subject",LastSequence:"Nats-Last-Sequence",NumPending:"Nats-Num-Pending"};da1.RepublishHeaders={Stream:"Nats-Stream",Subject:"Nats-Subject",Sequence:"Nats-Sequence",LastSequence:"Nats-Last-Sequence",Size:"Nats-Msg-Size"}});var ZG=v((pa1)=>{Object.defineProperty(pa1,"__esModule",{value:!0});pa1.TD=pa1.TE=pa1.Empty=void 0;pa1.encode=qs8;pa1.decode=Ms8;pa1.Empty=new Uint8Array(0);pa1.TE=new TextEncoder;pa1.TD=new TextDecoder;function Is8(...$){let Z=0;for(let Y=0;Y<$.length;Y++)Z+=$[Y].length;let Q=new Uint8Array(Z),X=0;for(let Y=0;Y<$.length;Y++)Q.set($[Y],X),X+=$[Y].length;return Q}function qs8(...$){let Z=[];for(let Q=0;Q<$.length;Q++)Z.push(pa1.TE.encode($[Q]));if(Z.length===0)return pa1.Empty;if(Z.length===1)return Z[0];return Is8(...Z)}function Ms8($){if(!$||$.length===0)return"";return pa1.TD.decode($)}});var QG=v((oa1)=>{Object.defineProperty(oa1,"__esModule",{value:!0});oa1.errors=oa1.PermissionViolationError=oa1.NoRespondersError=oa1.TimeoutError=oa1.RequestError=oa1.ProtocolError=oa1.ConnectionError=oa1.DrainingConnectionError=oa1.ClosedConnectionError=oa1.AuthorizationError=oa1.UserAuthenticationExpiredError=oa1.InvalidOperationError=oa1.InvalidArgumentError=oa1.InvalidSubjectError=void 0;class tp0 extends Error{constructor($,Z){super(`illegal subject: '${$}'`,Z);this.name="InvalidSubjectError"}}oa1.InvalidSubjectError=tp0;class D70 extends Error{constructor($,Z){super($,Z);this.name="InvalidArgumentError"}static format($,Z,Q){if(Array.isArray(Z)&&Z.length>1)Z=Z[0];if(Array.isArray($))$=$.map((X)=>`'${X}'`),$=$.join(",");else $=`'${$}'`;return new D70(`${$} ${Z}`,Q)}}oa1.InvalidArgumentError=D70;class op0 extends Error{constructor($,Z){super($,Z);this.name="InvalidOperationError"}}oa1.InvalidOperationError=op0;class w70 extends Error{constructor($,Z){super($,Z);this.name="UserAuthenticationExpiredError"}static parse($){if($.toLowerCase().indexOf("user authentication expired")!==-1)return new w70($);return null}}oa1.UserAuthenticationExpiredError=w70;class E70 extends Error{constructor($,Z){super($,Z);this.name="AuthorizationError"}static parse($){let Z=["authorization violation","account authentication expired","authentication timeout"],Q=$.toLowerCase();for(let X=0;X<Z.length;X++)if(Q.indexOf(Z[X])!==-1)return new E70($);return null}}oa1.AuthorizationError=E70;class rp0 extends Error{constructor(){super("closed connection");this.name="ClosedConnectionError"}}oa1.ClosedConnectionError=rp0;class ap0 extends Error{constructor(){super("connection draining");this.name="DrainingConnectionError"}}oa1.DrainingConnectionError=ap0;class sp0 extends Error{constructor($,Z){super($,Z);this.name="ConnectionError"}}oa1.ConnectionError=sp0;class ep0 extends Error{constructor($,Z){super($,Z);this.name="ProtocolError"}}oa1.ProtocolError=ep0;class $n0 extends Error{constructor($="",Z){super($,Z);this.name="RequestError"}isNoResponders(){return this.cause instanceof j70}}oa1.RequestError=$n0;class Zn0 extends Error{constructor($){super("timeout",$);this.name="TimeoutError"}}oa1.TimeoutError=Zn0;class j70 extends Error{subject;constructor($,Z){super(`no responders: '${$}'`,Z);this.subject=$,this.name="NoResponders"}}oa1.NoRespondersError=j70;class z70 extends Error{operation;subject;queue;constructor($,Z,Q,X,Y){super($,Y);this.name="PermissionViolationError",this.operation=Z,this.subject=Q,this.queue=X}static parse($){if(($?$.toLowerCase():"").indexOf("permissions violation")===-1)return null;let Q="publish",X="",Y=void 0,G=$.match(/(Publish|Subscription) to "(\S+)"/);if(G){if(Q=G[1].toLowerCase(),X=G[2],Q==="subscription"){let J=$.match(/using queue "(\S+)"/);if(J)Y=J[1]}}return new z70($,Q,X,Y)}}oa1.PermissionViolationError=z70;oa1.errors={AuthorizationError:E70,ClosedConnectionError:rp0,ConnectionError:sp0,DrainingConnectionError:ap0,InvalidArgumentError:D70,InvalidOperationError:op0,InvalidSubjectError:tp0,NoRespondersError:j70,PermissionViolationError:z70,ProtocolError:ep0,RequestError:$n0,TimeoutError:Zn0,UserAuthenticationExpiredError:w70}});var c3=v(($s1)=>{Object.defineProperty($s1,"__esModule",{value:!0});$s1.SimpleMutex=$s1.Perf=void 0;$s1.extend=ds8;$s1.render=is8;$s1.timeout=ps8;$s1.delay=ns8;$s1.deadline=ts8;$s1.deferred=Xn0;$s1.debugDeferred=os8;$s1.shuffle=rs8;$s1.collect=as8;$s1.jitter=ea1;$s1.backoff=ss8;$s1.nanos=es8;$s1.millis=$e8;$s1.randomToken=Xe8;var ms8=ZG(),Qn0=QG();function ds8($,...Z){for(let Q=0;Q<Z.length;Q++){let X=Z[Q];Object.keys(X).forEach(function(Y){$[Y]=X[Y]})}return $}function is8($){return ms8.TD.decode($).replace(/\n/g,"\u240A").replace(/\r/g,"\u240D")}function ps8($,Z=!0){let Q=Z?new Qn0.TimeoutError:null,X,Y,G=new Promise((J,K)=>{X={cancel:()=>{if(Y)clearTimeout(Y)}},Y=setTimeout(()=>{if(Q===null)K(new Qn0.TimeoutError);else K(Q)},$)});return Object.assign(G,X)}function ns8($=0){let Z,Q=new Promise((X)=>{let Y=setTimeout(()=>{X()},$);Z={cancel:()=>{if(Y)clearTimeout(Y),X()}}});return Object.assign(Q,Z)}async function ts8($,Z=1000){let Q=Xn0(),X=setTimeout(()=>{Q.reject(new Qn0.TimeoutError)},Z);try{return await Promise.race([$,Q])}finally{clearTimeout(X)}}function Xn0(){let $={},Z=new Promise((Q,X)=>{$={resolve:Q,reject:X}});return Object.assign(Z,$)}function os8(){let $={},Z=new Promise((Q,X)=>{$={resolve:(Y)=>{console.trace("resolve",Y),Q(Y)},reject:(Y)=>{console.trace("reject"),X(Y)}}});return Object.assign(Z,$)}function rs8($){for(let Z=$.length-1;Z>0;Z--){let Q=Math.floor(Math.random()*(Z+1));[$[Z],$[Q]]=[$[Q],$[Z]]}return $}async function as8($){let Z=[];for await(let Q of $)Z.push(Q);return Z}class aa1{timers;measures;constructor(){this.timers=new Map,this.measures=new Map}mark($){this.timers.set($,performance.now())}measure($,Z,Q){let X=this.timers.get(Z);if(X===void 0)throw Error(`${Z} is not defined`);let Y=this.timers.get(Q);if(Y===void 0)throw Error(`${Q} is not defined`);this.measures.set($,Y-X)}getEntries(){let $=[];return this.measures.forEach((Z,Q)=>{$.push({name:Q,duration:Z})}),$}}$s1.Perf=aa1;class sa1{max;current;waiting;constructor($=1){this.max=$,this.current=0,this.waiting=[]}lock(){if(this.current++,this.current<=this.max)return Promise.resolve();let $=Xn0();return this.waiting.push($),$}unlock(){this.current--,this.waiting.pop()?.resolve()}}$s1.SimpleMutex=sa1;function ea1($){if($===0)return 0;return Math.floor($/2+Math.random()*$)}function ss8($=[0,250,250,500,500,3000,5000]){if(!Array.isArray($))$=[0,250,250,500,500,3000,5000];let Z=$.length-1;return{backoff(Q){return ea1(Q>Z?$[Z]:$[Q])}}}function es8($){return $*1e6}function $e8($){return Math.floor($/1e6)}var Ze8="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",HN=new Uint8Array(62);for(let $=0;$<62;$++)HN[$]=Ze8.charCodeAt($);var Qe8=218340105584896;function Xe8(){let $=Math.floor(Math.random()*Qe8),Z=$%62,Q=HN[Z];$=($-Z)/62,Z=$%62;let X=HN[Z];$=($-Z)/62,Z=$%62;let Y=HN[Z];$=($-Z)/62,Z=$%62;let G=HN[Z];$=($-Z)/62,Z=$%62;let J=HN[Z];$=($-Z)/62,Z=$%62;let K=HN[Z];$=($-Z)/62,Z=$%62;let W=HN[Z];$=($-Z)/62;let H=HN[$];return String.fromCharCode(Q,X,Y,G,J,K,W,H)}});var Ws1=v((Js1)=>{Object.defineProperty(Js1,"__esModule",{value:!0});Js1.nuid=Js1.NuidImpl=void 0;var je8="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",GO=62,A70=12,Ys1=10,Qs1=33,ze8=333,Xs1=A70+Ys1,Gn0=new Uint8Array(GO);for(let $=0;$<GO;$++)Gn0[$]=je8.charCodeAt($);var P70=4294967296,Gs1=BigInt(GO)**BigInt(Ys1),wp=Number(Gs1/(1n<<32n)),Yn0=Number(Gs1%(1n<<32n));function Pe8($){for(let Z=0;Z<$.length;Z++)$[Z]=Math.floor(Math.random()*256)}function Ae8($){if(globalThis?.crypto?.getRandomValues)globalThis.crypto.getRandomValues($);else Pe8($)}class Jn0{buf;cbuf;seqHi;seqLo;inc;inited;constructor(){this.buf=new Uint8Array(Xs1),this.cbuf=new Uint8Array(A70),this.inited=!1}init(){this.inited=!0,this.setPre(),this.initSeqAndInc(),this.fillSeq()}initSeqAndInc(){let $=0;do this.seqHi=Math.floor(Math.random()*(wp+1)),this.seqLo=Math.floor(Math.random()*P70);while($++<8&&this.seqHi===wp&&this.seqLo>=Yn0);if(this.seqHi===wp&&this.seqLo>=Yn0)this.seqLo=0;this.inc=Math.random()*(ze8-Qs1)+Qs1|0}setPre(){Ae8(this.cbuf);for(let $=0;$<A70;$++)this.buf[$]=Gn0[this.cbuf[$]%GO]}fillSeq(){let $=this.seqHi,Z=this.seqLo;for(let Q=Xs1-1;Q>=A70;Q--){let X=Math.floor($/GO),G=($-X*GO)*P70+Z,J=Math.floor(G/GO),K=G-J*GO;this.buf[Q]=Gn0[K],$=X,Z=J}}next(){if(!this.inited)this.init();if(this.seqLo+=this.inc,this.seqLo>=P70)this.seqLo-=P70,this.seqHi+=1;if(this.seqHi>wp||this.seqHi===wp&&this.seqLo>=Yn0)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()}}Js1.NuidImpl=Jn0;Js1.nuid=new Jn0});var Us1=v((Fs1)=>{Object.defineProperty(Fs1,"__esModule",{value:!0});Fs1.nuid=Fs1.Nuid=void 0;var Hs1=Ws1();Fs1.Nuid=Hs1.NuidImpl;Fs1.nuid=Hs1.nuid});var R70=v((T70)=>{Object.defineProperty(T70,"__esModule",{value:!0});T70.nuid=T70.Nuid=void 0;var Bs1=Us1();Object.defineProperty(T70,"Nuid",{enumerable:!0,get:function(){return Bs1.Nuid}});Object.defineProperty(T70,"nuid",{enumerable:!0,get:function(){return Bs1.nuid}})});var JO=v((Os1)=>{Object.defineProperty(Os1,"__esModule",{value:!0});Os1.DEFAULT_HOST=Os1.DEFAULT_PORT=Os1.Match=void 0;Os1.syncIterator=Ve8;Os1.createInbox=ke8;var qe8=R70(),Me8=QG();Os1.Match={Exact:"exact",CanonicalMIME:"canonical",IgnoreCase:"insensitive"};function Ve8($){let Z=$[Symbol.asyncIterator]();return{async next(){let Q=await Z.next();if(Q.done)return Promise.resolve(null);return Promise.resolve(Q.value)}}}function ke8($=""){if($=$||"_INBOX",typeof $!=="string")throw TypeError("prefix must be a string");return $.split(".").forEach((Z)=>{if(Z==="*"||Z===">")throw Me8.InvalidArgumentError.format("prefix",`cannot have wildcards ('${$}')`)}),`${$}.${qe8.nuid.next()}`}Os1.DEFAULT_PORT=4222;Os1.DEFAULT_HOST="127.0.0.1"});var Ep=v((Es1)=>{Object.defineProperty(Es1,"__esModule",{value:!0});Es1.DataBuffer=void 0;var Ds1=ZG();class ws1{buffers;byteLength;constructor(){this.buffers=[],this.byteLength=0}static concat(...$){let Z=0;for(let Y=0;Y<$.length;Y++)Z+=$[Y].length;let Q=new Uint8Array(Z),X=0;for(let Y=0;Y<$.length;Y++)Q.set($[Y],X),X+=$[Y].length;return Q}static fromAscii($){if(!$)$="";return Ds1.TE.encode($)}static toAscii($){return Ds1.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 Q=0;Q<this.buffers.length;Q++)$.set(this.buffers[Q],Z),Z+=this.buffers[Q].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 Q=this.byteLength;if($===void 0||$>Q)$=Q;let X=Z.subarray(0,$);if(Q>$)this.buffers.push(Z.subarray($));return this.byteLength=Q-$,X}}return new Uint8Array(0)}fill($,...Z){if($)this.buffers.push($),this.byteLength+=$.length;for(let Q=0;Q<Z.length;Q++)if(Z[Q]&&Z[Q].length)this.buffers.push(Z[Q]),this.byteLength+=Z[Q].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}}Es1.DataBuffer=ws1});var mE=v((Ps1)=>{Object.defineProperty(Ps1,"__esModule",{value:!0});Ps1.LF=Ps1.CR=Ps1.CRLF=Ps1.CR_LF_LEN=Ps1.CR_LF=void 0;Ps1.setTransportFactory=ye8;Ps1.defaultPort=ge8;Ps1.getUrlParseFn=he8;Ps1.newTransport=ue8;Ps1.getResolveFn=ce8;Ps1.protoLen=zs1;Ps1.extractProtocolMessage=le8;var xe8=ZG(),fe8=JO(),be8=Ep(),XG;function ye8($){XG=$}function ge8(){return XG!==void 0&&XG.defaultPort!==void 0?XG.defaultPort:fe8.DEFAULT_PORT}function he8(){return XG!==void 0&&XG.urlParseFn?XG.urlParseFn:void 0}function ue8(){if(!XG||typeof XG.factory!=="function")throw Error("transport fn is not set");return XG.factory()}function ce8(){return XG!==void 0&&XG.dnsResolveFn?XG.dnsResolveFn:void 0}Ps1.CR_LF=`\r
1447
+ `);X=G.pop()??"";for(let J of G){let K=Bun.stripANSI(J).replace(/^\[\d+\]\s*/,"").trim();if(!K)continue;QO({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:K})}}(async()=>{try{for(;;){let{done:G,value:J}=await Z.read();if(G)break;X+=Q.decode(J,{stream:!0}),Y()}}catch{}if(X.trim()){let G=Bun.stripANSI(X).replace(/^\[\d+\]\s*/,"").trim();if(G)QO({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:G})}})()}async function oa8($){let{baseUrl:Z,noTui:Q}=$,X=process.env.HOST==="0.0.0.0"&&Boolean(process.env.PORT),Y=X?process.env.PORT:$.vitePort,G=Z||`http://localhost:${Y}`,J=X?await Lp(Number(Y)+1):await Lp(Number($.port)),{settings:K,services:W,managedServiceNames:H}=await N70({port:String(J),home:$.home,baseUrl:$.baseUrl,localMode:$.localMode,skipMigrations:$.skipMigrations,noTui:$.noTui,vitePort:$.vitePort});for(let D of W)yE({name:D.name,status:"ready",port:D.port});Bp();let F=ta8(import.meta.dir,"..","..","..","..",".."),N=Q===!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.natsCredsPath?{NATS_CREDS:K.natsCredsPath}:{}},stdio:["inherit",N?"inherit":"pipe",N?"inherit":"pipe"]});if(!N)gp0(U.stdout),gp0(U.stderr);Op(G),yE({name:"Vite",status:"ready",port:Number(Y)}),yE({name:"API",status:"ready",port:Number(K.port)});let O=async(D)=>{if(U.kill(D),await U.exited,H.length>0){let{stopServices:w}=await Promise.resolve().then(() => (EZ0(),wZ0));await w(K.dataDir)}};return process.on("SIGINT",()=>O("SIGINT")),process.on("SIGTERM",()=>O("SIGTERM")),{port:Number(Y),process:U}}var up0=L(()=>{vp0();gE();yp0()});var O70;var cp0=L(()=>{O70={name:"decocms",version:"4.286.9",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","@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 aa8,Text as Pa1}from"ink";import{jsx as sa8,jsxs as Aa1}from"react/jsx-runtime";function Ta1({version:$}){return Aa1(aa8,{flexDirection:"column",marginTop:1,children:[cZ0.map((Z,Q)=>sa8(Pa1,{color:lZ0[Q],children:Z},Q)),Aa1(Pa1,{dimColor:!0,children:[" v",$]})]})}var Ra1=L(()=>{Zp()});import{Box as hE,Text as XO}from"ink";import{Spinner as ea8}from"@inkjs/ui";import{jsx as $G,jsxs as By}from"react/jsx-runtime";function Ia1({status:$}){if($==="pending")return $G(ea8,{label:""});return $G(XO,{color:"green",children:"\u2713"})}function $s8($){return`${$.name}: ${$.port||"...."}`}function qa1({services:$,migrationsStatus:Z,home:Q,serverUrl:X}){return By(hE,{flexDirection:"column",paddingBottom:1,children:[$G(Ta1,{version:O70.version}),$G(hE,{marginBottom:1,children:$G(XO,{dimColor:!0,children:"\u2500".repeat(80)})}),$G(hE,{children:By(XO,{dimColor:!0,children:["Home: ",Q]})}),By(hE,{gap:2,children:[$.map((Y)=>By(hE,{gap:1,children:[$G(XO,{children:$s8(Y)}),$G(Ia1,{status:Y.status})]},Y.name)),By(hE,{gap:1,children:[$G(XO,{children:"Migrations"}),$G(Ia1,{status:Z})]})]}),$G(hE,{children:X?By(XO,{children:["Open in browser: ",$G(XO,{color:"cyan",children:X})]}):$G(XO,{dimColor:!0,children:"Starting..."})})]})}var Ma1=L(()=>{cp0();Ra1()});import{Box as Zs8,Text as Dp}from"ink";import{jsx as lp0,jsxs as mp0}from"react/jsx-runtime";function Qs8($){if($>=500)return"red";if($>=400)return"yellow";if($>=300)return"cyan";return"green"}function Va1({logs:$}){return lp0(Zs8,{flexDirection:"column",children:$.map((Z,Q)=>{if(Z.rawLine)return lp0(Dp,{dimColor:!0,children:Z.rawLine},Q);let X=Z.duration<1000?`${Z.duration}ms`:`${(Z.duration/1000).toFixed(1)}s`;return mp0(Dp,{children:[mp0(Dp,{dimColor:!0,children:[Z.method.padEnd(6)," ",Z.path.padEnd(30)," "]}),lp0(Dp,{color:Qs8(Z.status),children:Z.status}),mp0(Dp,{dimColor:!0,children:[" ",X.padStart(8)]})]},Q)})})}var ka1=()=>{};var dp0={};Q0(dp0,{App:()=>Gs8});import{Box as Xs8}from"ink";import{useSyncExternalStore as Ys8}from"react";import{jsx as Sa1,jsxs as Js8}from"react/jsx-runtime";function Gs8({home:$}){let Z=Ys8(bp0,fp0);return Js8(Xs8,{flexDirection:"column",children:[Sa1(qa1,{services:Z.services,migrationsStatus:Z.migrationsStatus,home:$,serverUrl:Z.serverUrl}),Sa1(Va1,{logs:Z.logs})]})}var ip0=L(()=>{Ma1();ka1();gE()});var u3="thread-gate",KN="decopilot-hosted-harness",WN="decopilot-hosted-harness-sandboxed",LJ="automations",YO="background-tools",uE="task-board-github-reads",cE="jira-push";var Ca1="9";function _a1($){return{name:"decocms",systemDatabaseUrl:$.systemDatabaseUrl,systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:$.poolSize,runAdminServer:!1,executorID:$.executorID,applicationVersion:Ca1,...$.listenQueues!==void 0?{listenQueues:$.listenQueues}:{}}}var va1=()=>{};import Ks8 from"pg";async function fa1($,Z){let{databaseUrl:Q,lockTimeoutMs:X=Ws8}=$,Y=$.log??((W)=>console.log(W)),G=new Ks8.Client({connectionString:Q});await G.connect();let J=Date.now(),K=!1;try{while(!K){if(K=(await G.query("SELECT pg_try_advisory_lock($1) AS locked",[xa1.toString()])).rows[0]?.locked===!0,K)break;if(Date.now()-J>=X)throw Error(`Timed out after ${X}ms waiting for the DBOS migration lock. Another process is still migrating the dbos schema; this pod will restart and retry.`);await W$(Hs8)}let W=Date.now()-J;if(W>1000)Y(`[dbos] waited ${W}ms for the migration lock; another process migrated first`);return await Z()}finally{if(K)try{await G.query("SELECT pg_advisory_unlock($1)",[xa1.toString()])}catch{}await G.end().catch(()=>{})}}var xa1=8314027461559302n,Ws8=600000,Hs8=500;var ba1=L(()=>{J4()});function Fs8(){let $=(process.env.BUN_OPTIONS??"").split(/\s+/).filter(Boolean);return[...process.argv.slice(1),...$]}function pp0($,Z){for(let Q=0;Q<$.length;Q++){let X=$[Q];if(X===void 0)continue;if(X===Z)return $[Q+1];if(X.startsWith(`${Z}=`))return X.slice(Z.length+1)}return}function ya1(){let $=Fs8();if($.includes("--cpu-prof")){console.log(JSON.stringify({msg:"cpu-profiling-active",dir:pp0($,"--cpu-prof-dir")??process.cwd(),name:pp0($,"--cpu-prof-name"),markdown:$.includes("--cpu-prof-md"),intervalUs:Number(pp0($,"--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 ga1(){if(process.env.HEAP_WATCH!=="1")return()=>{};let $=Number(process.env.HEAP_WATCH_INTERVAL_MS??60000),Z=async()=>{let Q=vE();if(!Q)return;let X={};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);X={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:Q.rss,heapUsed:Q.heapUsed,heapTotal:Q.heapTotal,external:Q.external,arrayBuffers:Q.arrayBuffers,...X}))};return Z().catch(()=>{}),L70=setInterval(()=>void Z().catch(()=>{}),$),L70.unref?.(),process.on("SIGUSR2",()=>{try{let Q=Bun.generateHeapSnapshot("v8"),X=typeof Q==="string"?Q:JSON.stringify(Q),Y=`/tmp/heap-${process.pid}-${Date.now()}.heapsnapshot`;Bun.write(Y,X),console.log(JSON.stringify({msg:"heap-snapshot-written",path:Y}))}catch(Q){console.error("[heap-watch] snapshot failed:",Q)}}),()=>{if(L70)clearInterval(L70)}}var L70;var ha1=()=>{};import*as Ns8 from"bun:jsc";function ua1(){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{Us8()}catch(G){return console.error("[stall-watchdog] failed to start sampling profiler:",G),()=>{}}let Q,X=performance.now()+Z,Y=()=>{let G=performance.now(),J=G-X;X=G+Z;let K=[];try{K=Bs8()?.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}))}Q=setTimeout(Y,Z),Q.unref?.()};return Q=setTimeout(Y,Z),Q.unref?.(),()=>{if(Q)clearTimeout(Q)}}var Us8,Bs8;var ca1=L(()=>{({startSamplingProfiler:Us8,samplingProfilerStackTraces:Bs8}=Ns8)});function la1(){ya1();let $=[ga1(),Un1(),ua1()];return()=>{for(let Z of $)Z()}}var ma1=L(()=>{Il0();ha1();ca1()});var lE=v((da1)=>{Object.defineProperty(da1,"__esModule",{value:!0});da1.RepublishHeaders=da1.DirectMsgHeaders=da1.JsHeaders=da1.AdvisoryKind=void 0;da1.isOrderedPushConsumerOptions=Os8;da1.isPullConsumer=Ls8;da1.isPushConsumer=Ds8;da1.isBoundPushConsumerOptions=ws8;function Os8($){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 Ls8($){return $.isPullConsumer()}function Ds8($){return $.isPushConsumer()}function ws8($){if($&&typeof $==="object")return"deliver_subject"in $||"deliver_group"in $||"idle_heartbeat"in $;return!1}da1.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"};da1.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"};da1.DirectMsgHeaders={Stream:"Nats-Stream",Sequence:"Nats-Sequence",TimeStamp:"Nats-Time-Stamp",Subject:"Nats-Subject",LastSequence:"Nats-Last-Sequence",NumPending:"Nats-Num-Pending"};da1.RepublishHeaders={Stream:"Nats-Stream",Subject:"Nats-Subject",Sequence:"Nats-Sequence",LastSequence:"Nats-Last-Sequence",Size:"Nats-Msg-Size"}});var ZG=v((pa1)=>{Object.defineProperty(pa1,"__esModule",{value:!0});pa1.TD=pa1.TE=pa1.Empty=void 0;pa1.encode=qs8;pa1.decode=Ms8;pa1.Empty=new Uint8Array(0);pa1.TE=new TextEncoder;pa1.TD=new TextDecoder;function Is8(...$){let Z=0;for(let Y=0;Y<$.length;Y++)Z+=$[Y].length;let Q=new Uint8Array(Z),X=0;for(let Y=0;Y<$.length;Y++)Q.set($[Y],X),X+=$[Y].length;return Q}function qs8(...$){let Z=[];for(let Q=0;Q<$.length;Q++)Z.push(pa1.TE.encode($[Q]));if(Z.length===0)return pa1.Empty;if(Z.length===1)return Z[0];return Is8(...Z)}function Ms8($){if(!$||$.length===0)return"";return pa1.TD.decode($)}});var QG=v((oa1)=>{Object.defineProperty(oa1,"__esModule",{value:!0});oa1.errors=oa1.PermissionViolationError=oa1.NoRespondersError=oa1.TimeoutError=oa1.RequestError=oa1.ProtocolError=oa1.ConnectionError=oa1.DrainingConnectionError=oa1.ClosedConnectionError=oa1.AuthorizationError=oa1.UserAuthenticationExpiredError=oa1.InvalidOperationError=oa1.InvalidArgumentError=oa1.InvalidSubjectError=void 0;class tp0 extends Error{constructor($,Z){super(`illegal subject: '${$}'`,Z);this.name="InvalidSubjectError"}}oa1.InvalidSubjectError=tp0;class D70 extends Error{constructor($,Z){super($,Z);this.name="InvalidArgumentError"}static format($,Z,Q){if(Array.isArray(Z)&&Z.length>1)Z=Z[0];if(Array.isArray($))$=$.map((X)=>`'${X}'`),$=$.join(",");else $=`'${$}'`;return new D70(`${$} ${Z}`,Q)}}oa1.InvalidArgumentError=D70;class op0 extends Error{constructor($,Z){super($,Z);this.name="InvalidOperationError"}}oa1.InvalidOperationError=op0;class w70 extends Error{constructor($,Z){super($,Z);this.name="UserAuthenticationExpiredError"}static parse($){if($.toLowerCase().indexOf("user authentication expired")!==-1)return new w70($);return null}}oa1.UserAuthenticationExpiredError=w70;class E70 extends Error{constructor($,Z){super($,Z);this.name="AuthorizationError"}static parse($){let Z=["authorization violation","account authentication expired","authentication timeout"],Q=$.toLowerCase();for(let X=0;X<Z.length;X++)if(Q.indexOf(Z[X])!==-1)return new E70($);return null}}oa1.AuthorizationError=E70;class rp0 extends Error{constructor(){super("closed connection");this.name="ClosedConnectionError"}}oa1.ClosedConnectionError=rp0;class ap0 extends Error{constructor(){super("connection draining");this.name="DrainingConnectionError"}}oa1.DrainingConnectionError=ap0;class sp0 extends Error{constructor($,Z){super($,Z);this.name="ConnectionError"}}oa1.ConnectionError=sp0;class ep0 extends Error{constructor($,Z){super($,Z);this.name="ProtocolError"}}oa1.ProtocolError=ep0;class $n0 extends Error{constructor($="",Z){super($,Z);this.name="RequestError"}isNoResponders(){return this.cause instanceof j70}}oa1.RequestError=$n0;class Zn0 extends Error{constructor($){super("timeout",$);this.name="TimeoutError"}}oa1.TimeoutError=Zn0;class j70 extends Error{subject;constructor($,Z){super(`no responders: '${$}'`,Z);this.subject=$,this.name="NoResponders"}}oa1.NoRespondersError=j70;class z70 extends Error{operation;subject;queue;constructor($,Z,Q,X,Y){super($,Y);this.name="PermissionViolationError",this.operation=Z,this.subject=Q,this.queue=X}static parse($){if(($?$.toLowerCase():"").indexOf("permissions violation")===-1)return null;let Q="publish",X="",Y=void 0,G=$.match(/(Publish|Subscription) to "(\S+)"/);if(G){if(Q=G[1].toLowerCase(),X=G[2],Q==="subscription"){let J=$.match(/using queue "(\S+)"/);if(J)Y=J[1]}}return new z70($,Q,X,Y)}}oa1.PermissionViolationError=z70;oa1.errors={AuthorizationError:E70,ClosedConnectionError:rp0,ConnectionError:sp0,DrainingConnectionError:ap0,InvalidArgumentError:D70,InvalidOperationError:op0,InvalidSubjectError:tp0,NoRespondersError:j70,PermissionViolationError:z70,ProtocolError:ep0,RequestError:$n0,TimeoutError:Zn0,UserAuthenticationExpiredError:w70}});var c3=v(($s1)=>{Object.defineProperty($s1,"__esModule",{value:!0});$s1.SimpleMutex=$s1.Perf=void 0;$s1.extend=ds8;$s1.render=is8;$s1.timeout=ps8;$s1.delay=ns8;$s1.deadline=ts8;$s1.deferred=Xn0;$s1.debugDeferred=os8;$s1.shuffle=rs8;$s1.collect=as8;$s1.jitter=ea1;$s1.backoff=ss8;$s1.nanos=es8;$s1.millis=$e8;$s1.randomToken=Xe8;var ms8=ZG(),Qn0=QG();function ds8($,...Z){for(let Q=0;Q<Z.length;Q++){let X=Z[Q];Object.keys(X).forEach(function(Y){$[Y]=X[Y]})}return $}function is8($){return ms8.TD.decode($).replace(/\n/g,"\u240A").replace(/\r/g,"\u240D")}function ps8($,Z=!0){let Q=Z?new Qn0.TimeoutError:null,X,Y,G=new Promise((J,K)=>{X={cancel:()=>{if(Y)clearTimeout(Y)}},Y=setTimeout(()=>{if(Q===null)K(new Qn0.TimeoutError);else K(Q)},$)});return Object.assign(G,X)}function ns8($=0){let Z,Q=new Promise((X)=>{let Y=setTimeout(()=>{X()},$);Z={cancel:()=>{if(Y)clearTimeout(Y),X()}}});return Object.assign(Q,Z)}async function ts8($,Z=1000){let Q=Xn0(),X=setTimeout(()=>{Q.reject(new Qn0.TimeoutError)},Z);try{return await Promise.race([$,Q])}finally{clearTimeout(X)}}function Xn0(){let $={},Z=new Promise((Q,X)=>{$={resolve:Q,reject:X}});return Object.assign(Z,$)}function os8(){let $={},Z=new Promise((Q,X)=>{$={resolve:(Y)=>{console.trace("resolve",Y),Q(Y)},reject:(Y)=>{console.trace("reject"),X(Y)}}});return Object.assign(Z,$)}function rs8($){for(let Z=$.length-1;Z>0;Z--){let Q=Math.floor(Math.random()*(Z+1));[$[Z],$[Q]]=[$[Q],$[Z]]}return $}async function as8($){let Z=[];for await(let Q of $)Z.push(Q);return Z}class aa1{timers;measures;constructor(){this.timers=new Map,this.measures=new Map}mark($){this.timers.set($,performance.now())}measure($,Z,Q){let X=this.timers.get(Z);if(X===void 0)throw Error(`${Z} is not defined`);let Y=this.timers.get(Q);if(Y===void 0)throw Error(`${Q} is not defined`);this.measures.set($,Y-X)}getEntries(){let $=[];return this.measures.forEach((Z,Q)=>{$.push({name:Q,duration:Z})}),$}}$s1.Perf=aa1;class sa1{max;current;waiting;constructor($=1){this.max=$,this.current=0,this.waiting=[]}lock(){if(this.current++,this.current<=this.max)return Promise.resolve();let $=Xn0();return this.waiting.push($),$}unlock(){this.current--,this.waiting.pop()?.resolve()}}$s1.SimpleMutex=sa1;function ea1($){if($===0)return 0;return Math.floor($/2+Math.random()*$)}function ss8($=[0,250,250,500,500,3000,5000]){if(!Array.isArray($))$=[0,250,250,500,500,3000,5000];let Z=$.length-1;return{backoff(Q){return ea1(Q>Z?$[Z]:$[Q])}}}function es8($){return $*1e6}function $e8($){return Math.floor($/1e6)}var Ze8="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",HN=new Uint8Array(62);for(let $=0;$<62;$++)HN[$]=Ze8.charCodeAt($);var Qe8=218340105584896;function Xe8(){let $=Math.floor(Math.random()*Qe8),Z=$%62,Q=HN[Z];$=($-Z)/62,Z=$%62;let X=HN[Z];$=($-Z)/62,Z=$%62;let Y=HN[Z];$=($-Z)/62,Z=$%62;let G=HN[Z];$=($-Z)/62,Z=$%62;let J=HN[Z];$=($-Z)/62,Z=$%62;let K=HN[Z];$=($-Z)/62,Z=$%62;let W=HN[Z];$=($-Z)/62;let H=HN[$];return String.fromCharCode(Q,X,Y,G,J,K,W,H)}});var Ws1=v((Js1)=>{Object.defineProperty(Js1,"__esModule",{value:!0});Js1.nuid=Js1.NuidImpl=void 0;var je8="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",GO=62,A70=12,Ys1=10,Qs1=33,ze8=333,Xs1=A70+Ys1,Gn0=new Uint8Array(GO);for(let $=0;$<GO;$++)Gn0[$]=je8.charCodeAt($);var P70=4294967296,Gs1=BigInt(GO)**BigInt(Ys1),wp=Number(Gs1/(1n<<32n)),Yn0=Number(Gs1%(1n<<32n));function Pe8($){for(let Z=0;Z<$.length;Z++)$[Z]=Math.floor(Math.random()*256)}function Ae8($){if(globalThis?.crypto?.getRandomValues)globalThis.crypto.getRandomValues($);else Pe8($)}class Jn0{buf;cbuf;seqHi;seqLo;inc;inited;constructor(){this.buf=new Uint8Array(Xs1),this.cbuf=new Uint8Array(A70),this.inited=!1}init(){this.inited=!0,this.setPre(),this.initSeqAndInc(),this.fillSeq()}initSeqAndInc(){let $=0;do this.seqHi=Math.floor(Math.random()*(wp+1)),this.seqLo=Math.floor(Math.random()*P70);while($++<8&&this.seqHi===wp&&this.seqLo>=Yn0);if(this.seqHi===wp&&this.seqLo>=Yn0)this.seqLo=0;this.inc=Math.random()*(ze8-Qs1)+Qs1|0}setPre(){Ae8(this.cbuf);for(let $=0;$<A70;$++)this.buf[$]=Gn0[this.cbuf[$]%GO]}fillSeq(){let $=this.seqHi,Z=this.seqLo;for(let Q=Xs1-1;Q>=A70;Q--){let X=Math.floor($/GO),G=($-X*GO)*P70+Z,J=Math.floor(G/GO),K=G-J*GO;this.buf[Q]=Gn0[K],$=X,Z=J}}next(){if(!this.inited)this.init();if(this.seqLo+=this.inc,this.seqLo>=P70)this.seqLo-=P70,this.seqHi+=1;if(this.seqHi>wp||this.seqHi===wp&&this.seqLo>=Yn0)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()}}Js1.NuidImpl=Jn0;Js1.nuid=new Jn0});var Us1=v((Fs1)=>{Object.defineProperty(Fs1,"__esModule",{value:!0});Fs1.nuid=Fs1.Nuid=void 0;var Hs1=Ws1();Fs1.Nuid=Hs1.NuidImpl;Fs1.nuid=Hs1.nuid});var R70=v((T70)=>{Object.defineProperty(T70,"__esModule",{value:!0});T70.nuid=T70.Nuid=void 0;var Bs1=Us1();Object.defineProperty(T70,"Nuid",{enumerable:!0,get:function(){return Bs1.Nuid}});Object.defineProperty(T70,"nuid",{enumerable:!0,get:function(){return Bs1.nuid}})});var JO=v((Os1)=>{Object.defineProperty(Os1,"__esModule",{value:!0});Os1.DEFAULT_HOST=Os1.DEFAULT_PORT=Os1.Match=void 0;Os1.syncIterator=Ve8;Os1.createInbox=ke8;var qe8=R70(),Me8=QG();Os1.Match={Exact:"exact",CanonicalMIME:"canonical",IgnoreCase:"insensitive"};function Ve8($){let Z=$[Symbol.asyncIterator]();return{async next(){let Q=await Z.next();if(Q.done)return Promise.resolve(null);return Promise.resolve(Q.value)}}}function ke8($=""){if($=$||"_INBOX",typeof $!=="string")throw TypeError("prefix must be a string");return $.split(".").forEach((Z)=>{if(Z==="*"||Z===">")throw Me8.InvalidArgumentError.format("prefix",`cannot have wildcards ('${$}')`)}),`${$}.${qe8.nuid.next()}`}Os1.DEFAULT_PORT=4222;Os1.DEFAULT_HOST="127.0.0.1"});var Ep=v((Es1)=>{Object.defineProperty(Es1,"__esModule",{value:!0});Es1.DataBuffer=void 0;var Ds1=ZG();class ws1{buffers;byteLength;constructor(){this.buffers=[],this.byteLength=0}static concat(...$){let Z=0;for(let Y=0;Y<$.length;Y++)Z+=$[Y].length;let Q=new Uint8Array(Z),X=0;for(let Y=0;Y<$.length;Y++)Q.set($[Y],X),X+=$[Y].length;return Q}static fromAscii($){if(!$)$="";return Ds1.TE.encode($)}static toAscii($){return Ds1.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 Q=0;Q<this.buffers.length;Q++)$.set(this.buffers[Q],Z),Z+=this.buffers[Q].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 Q=this.byteLength;if($===void 0||$>Q)$=Q;let X=Z.subarray(0,$);if(Q>$)this.buffers.push(Z.subarray($));return this.byteLength=Q-$,X}}return new Uint8Array(0)}fill($,...Z){if($)this.buffers.push($),this.byteLength+=$.length;for(let Q=0;Q<Z.length;Q++)if(Z[Q]&&Z[Q].length)this.buffers.push(Z[Q]),this.byteLength+=Z[Q].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}}Es1.DataBuffer=ws1});var mE=v((Ps1)=>{Object.defineProperty(Ps1,"__esModule",{value:!0});Ps1.LF=Ps1.CR=Ps1.CRLF=Ps1.CR_LF_LEN=Ps1.CR_LF=void 0;Ps1.setTransportFactory=ye8;Ps1.defaultPort=ge8;Ps1.getUrlParseFn=he8;Ps1.newTransport=ue8;Ps1.getResolveFn=ce8;Ps1.protoLen=zs1;Ps1.extractProtocolMessage=le8;var xe8=ZG(),fe8=JO(),be8=Ep(),XG;function ye8($){XG=$}function ge8(){return XG!==void 0&&XG.defaultPort!==void 0?XG.defaultPort:fe8.DEFAULT_PORT}function he8(){return XG!==void 0&&XG.urlParseFn?XG.urlParseFn:void 0}function ue8(){if(!XG||typeof XG.factory!=="function")throw Error("transport fn is not set");return XG.factory()}function ce8(){return XG!==void 0&&XG.dnsResolveFn?XG.dnsResolveFn:void 0}Ps1.CR_LF=`\r
1448
1448
  `;Ps1.CR_LF_LEN=Ps1.CR_LF.length;Ps1.CRLF=be8.DataBuffer.fromAscii(Ps1.CR_LF);Ps1.CR=new Uint8Array(Ps1.CRLF)[0];Ps1.LF=new Uint8Array(Ps1.CRLF)[1];function zs1($){for(let Z=0;Z<$.length;Z++){let Q=Z+1;if($.byteLength>Q&&$[Z]===Ps1.CR&&$[Q]===Ps1.LF)return Q+1}return 0}function le8($){let Z=zs1($);if(Z>0){let X=new Uint8Array($).slice(0,Z);return xe8.TD.decode(X)}return""}});var Nn0=v((ks1)=>{Object.defineProperty(ks1,"__esModule",{value:!0});ks1.ipV4=qs1;ks1.isIP=ee8;ks1.parseIP=Ms1;var jp=4,dE=16,I70=48,Is1=57,Ts1=65,ae8=70,Rs1=97,se8=102,Fn0=16777215;function qs1($,Z,Q,X){let Y=new Uint8Array(dE);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]=Q,Y[15]=X,Y}function ee8($){return Ms1($)!==void 0}function Ms1($){for(let Z=0;Z<$.length;Z++)switch($[Z]){case".":return Vs1($);case":":return $04($)}return}function Vs1($){let Z=new Uint8Array(jp);for(let Q=0;Q<jp;Q++){if($.length===0)return;if(Q>0){if($[0]!==".")return;$=$.substring(1)}let{n:X,c:Y,ok:G}=Z04($);if(!G||X>255)return;$=$.substring(Y),Z[Q]=X}return qs1(Z[0],Z[1],Z[2],Z[3])}function $04($){let Z=new Uint8Array(dE),Q=-1;if($.length>=2&&$[0]===":"&&$[1]===":"){if(Q=0,$=$.substring(2),$.length===0)return Z}let X=0;while(X<dE){let{n:Y,c:G,ok:J}=Q04($);if(!J||Y>65535)return;if(G<$.length&&$[G]==="."){if(Q<0&&X!=dE-jp)return;if(X+jp>dE)return;let K=Vs1($);if(K===void 0)return;Z[X]=K[12],Z[X+1]=K[13],Z[X+2]=K[14],Z[X+3]=K[15],$="",X+=jp;break}if(Z[X]=Y>>8,Z[X+1]=Y,X+=2,$=$.substring(G),$.length===0)break;if($[0]!==":"||$.length==1)return;if($=$.substring(1),$[0]===":"){if(Q>=0)return;if(Q=X,$=$.substring(1),$.length===0)break}}if($.length!==0)return;if(X<dE){if(Q<0)return;let Y=dE-X;for(let G=X-1;G>=Q;G--)Z[G+Y]=Z[G];for(let G=Q+Y-1;G>=Q;G--)Z[G]=0}else if(Q>=0)return;return Z}function Z04($){let Z=0,Q=0;for(Z=0;Z<$.length&&I70<=$.charCodeAt(Z)&&$.charCodeAt(Z)<=Is1;Z++)if(Q=Q*10+($.charCodeAt(Z)-I70),Q>=Fn0)return{n:Fn0,c:Z,ok:!1};if(Z===0)return{n:0,c:0,ok:!1};return{n:Q,c:Z,ok:!0}}function Q04($){let Z=0,Q=0;for(Q=0;Q<$.length;Q++){if(I70<=$.charCodeAt(Q)&&$.charCodeAt(Q)<=Is1)Z*=16,Z+=$.charCodeAt(Q)-I70;else if(Rs1<=$.charCodeAt(Q)&&$.charCodeAt(Q)<=se8)Z*=16,Z+=$.charCodeAt(Q)-Rs1+10;else if(Ts1<=$.charCodeAt(Q)&&$.charCodeAt(Q)<=ae8)Z*=16,Z+=$.charCodeAt(Q)-Ts1+10;else break;if(Z>=Fn0)return{n:0,c:Q,ok:!1}}if(Q===0)return{n:0,c:Q,ok:!1};return{n:Z,c:Q,ok:!0}}});var wn0=v((Cs1)=>{Object.defineProperty(Cs1,"__esModule",{value:!0});Cs1.Servers=Cs1.ServerImpl=void 0;Cs1.isIPV4OrHostname=Ss1;Cs1.hostPort=Dn0;var Un0=mE(),Bn0=c3(),On0=Nn0(),J04=JO(),K04=QG();function Ss1($){if($.indexOf("[")!==-1||$.indexOf("::")!==-1)return!1;if($.indexOf(".")!==-1)return!0;if($.split(":").length<=2)return!0;return!1}function Ln0($){return!Ss1($)}function W04($){let Q=$.toUpperCase().indexOf("::FFFF:");if(Q!==-1&&$.indexOf(".")!==-1){let X=$.substring(Q+7);return X=X.replace("[",""),X.replace("]","")}return $}function Dn0($){if($=$.trim(),$.match(/^(.*:\/\/)(.*)/m))$=$.replace(/^(.*:\/\/)(.*)/gm,"$2");if($=W04($),Ln0($)&&$.indexOf("[")===-1)$=`[${$}]`;let Z=Ln0($)?$.match(/(]:)(\d+)/):$.match(/(:)(\d+)/),Q=Z&&Z.length===3&&Z[1]&&Z[2]?parseInt(Z[2]):J04.DEFAULT_PORT,Y=new URL(`${Q===80?"https":"http"}://${$}`);Y.port=`${Q}`;let G=Y.hostname;if(G.charAt(0)==="[")G=G.substring(1,G.length-1);return{listen:Y.host,hostname:G,port:Q}}class Oy{src;listen;hostname;port;didConnect;reconnects;lastConnect;gossiped;tlsName;resolves;constructor($,Z=!1){this.src=$,this.tlsName="";let Q=Dn0($);this.listen=Q.listen,this.hostname=Q.hostname,this.port=Q.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,On0.isIP)(this.hostname))return[this];else{let Q=await $.fn(this.hostname);if($.debug)console.log(`resolve ${this.hostname} = ${Q.join(",")}`);for(let X of Q){let Y=this.port===80?"https":"http",G=new URL(`${Y}://${Ln0(X)?"["+X+"]":X}`);G.port=`${this.port}`;let J=new Oy(G.host,!1);J.tlsName=this.hostname,Z.push(J)}}if($.randomize)(0,Bn0.shuffle)(Z);return this.resolves=Z,Z}}Cs1.ServerImpl=Oy;class q70{firstSelect;servers;currentServer;tlsName;randomize;constructor($={}){this.firstSelect=!0,this.servers=[],this.tlsName="",this.randomize=$.randomize||!1}setServers($){if(!Array.isArray($)||$.length===0)throw K04.InvalidArgumentError.format("servers","cannot be empty");let Z=(0,Un0.getUrlParseFn)(),Q=new Map;for(let Y of this.servers)Q.set(Y.listen,Y);let X=[];for(let Y of $){Y=Z?Z(Y):Y;let{listen:G}=Dn0(Y),J=Q.get(G);if(J)J.gossiped=!1,X.push(J);else X.push(new Oy(Y))}if(this.randomize)(0,Bn0.shuffle)(X);if(this.servers=X,this.currentServer===void 0||!X.includes(this.currentServer))this.currentServer=X[0],this.firstSelect=!0}clear(){this.servers.length=0}updateTLSName(){let $=this.getCurrentServer();if(!(0,On0.isIP)($.hostname))this.tlsName=$.hostname,this.servers.forEach((Z)=>{if(Z.gossiped)Z.tlsName=this.tlsName})}getCurrentServer(){return this.currentServer}addServer($,Z=!1){let Q=(0,Un0.getUrlParseFn)();$=Q?Q($):$;let X=new Oy($,Z);if((0,On0.isIP)(X.hostname))X.tlsName=this.tlsName;this.servers.push(X)}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 q70.freezeAll(this.servers)}snapshotForHandler(){let $=this.currentServer;if(!$)return this.snapshot();let Z=this.servers.indexOf($);if(Z<=0)return this.snapshot();return q70.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 Q=[],X=[],Y=(0,Un0.getUrlParseFn)(),G=new Map;if($.connect_urls&&$.connect_urls.length>0)$.connect_urls.forEach((K)=>{K=Y?Y(K,Z):K;let W=new Oy(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);X=X.concat(W[0].listen)}),G.forEach((K,W)=>{this.servers.push(K),Q.push(W)}),this.randomize&&Q.length>0){let K=this.currentServer,W=this.servers.filter((H)=>H!==K);(0,Bn0.shuffle)(W),this.servers=K?[K,...W]:W}return{added:Q,deleted:X}}}Cs1.Servers=q70});var M70=v((fs1)=>{Object.defineProperty(fs1,"__esModule",{value:!0});fs1.QueuedIteratorImpl=void 0;var En0=c3(),vs1=QG();class xs1{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,En0.deferred)(),this.yields=[],this.iterClosed=(0,En0.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(Q){}}return}if(typeof $==="function")this.pendingFiltered++;this.yields.push($),this.signal.resolve()}async*iterate(){if(this.noIterator)throw new vs1.InvalidOperationError("iterator cannot be used when a callback is registered");if(this.yielding)throw new vs1.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 X=$[Z];try{X()}catch(Y){throw Y}if(this.err)throw this.err;continue}this.processed++,this.inflight--;let Q=this.profile?Date.now():0;yield $[Z],this.time=this.profile?Date.now()-Q:0}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,En0.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}}fs1.QueuedIteratorImpl=xs1});var jn0=v((hs1)=>{Object.defineProperty(hs1,"__esModule",{value:!0});hs1.MuxSubscription=void 0;var U04=JO(),ys1=QG();class gs1{baseInbox;reqs;constructor(){this.reqs=new Map}size(){return this.reqs.size}init($){return this.baseInbox=`${(0,U04.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((Q)=>{Q.resolver(Z,{})}),!0;if(Z.operation==="publish"){let Q=this.all().find((X)=>{return X.requestSubject===Z.subject});if(Q)return Q.resolver(Z,{}),!0}return!1}dispatcher(){return($,Z)=>{let Q=this.getToken(Z);if(Q){let X=this.get(Q);if(X){if($===null)$=Z?.data?.length===0&&Z.headers?.code===503?new ys1.NoRespondersError(X.requestSubject):null;X.resolver($,Z)}}}}close(){let $=new ys1.RequestError("connection closed");this.reqs.forEach((Z)=>{Z.resolver($,{})})}}hs1.MuxSubscription=gs1});var zn0=v((ls1)=>{Object.defineProperty(ls1,"__esModule",{value:!0});ls1.Heartbeat=void 0;var B04=c3();class cs1{ph;interval;maxOut;timer;pendings;constructor($,Z,Q){this.ph=$,this.interval=Z,this.maxOut=Q,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,B04.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})}}ls1.Heartbeat=cs1});var Tn0=v((ns1)=>{Object.defineProperty(ns1,"__esModule",{value:!0});ns1.DenoBuffer=ns1.MAX_SIZE=ns1.AssertionError=void 0;ns1.assert=is1;ns1.concat=ps1;ns1.append=L04;ns1.readAll=D04;ns1.writeAll=w04;var O04=ZG();class Pn0 extends Error{constructor($){super($);this.name="AssertionError"}}ns1.AssertionError=Pn0;function is1($,Z="Assertion failed."){if(!$)throw new Pn0(Z)}var ds1=32768;ns1.MAX_SIZE=4294967294;function V70($,Z,Q=0){let X=Z.byteLength-Q;if($.byteLength>X)$=$.subarray(0,X);return Z.set($,Q),$.byteLength}function ps1($,Z){if($===void 0&&Z===void 0)return new Uint8Array(0);if($===void 0)return Z;if(Z===void 0)return $;let Q=new Uint8Array($.length+Z.length);return Q.set($,0),Q.set(Z,$.length),Q}function L04($,Z){return ps1($,Uint8Array.of(Z))}class An0{_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($){is1($<=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=V70(this._buf.subarray(this._off),$);return this._off+=Z,Z}writeByte($){return this.write(Uint8Array.of($))}writeString($){return this.write(O04.TE.encode($))}write($){let Z=this._grow($.byteLength);return V70($,this._buf,Z)}_grow($){let Z=this.length;if(Z===0&&this._off!==0)this.reset();let Q=this._tryGrowByReslice($);if(Q>=0)return Q;let X=this.capacity;if($<=Math.floor(X/2)-Z)V70(this._buf.subarray(this._off),this._buf);else if(X+$>ns1.MAX_SIZE)throw Error("The buffer cannot be grown beyond the maximum size.");else{let Y=new Uint8Array(Math.min(2*X+$,ns1.MAX_SIZE));V70(this._buf.subarray(this._off),Y),this._buf=Y}return this._off=0,this._reslice(Math.min(Z+$,ns1.MAX_SIZE)),Z}grow($){if($<0)throw Error("Buffer._grow: negative count");let Z=this._grow($);this._reslice(Z)}readFrom($){let Z=0,Q=new Uint8Array(ds1);while(!0){let X=this.capacity-this.length<ds1,Y=X?Q:new Uint8Array(this._buf.buffer,this.length),G=$.read(Y);if(G===null)return Z;if(X)this.write(Y.subarray(0,G));else this._reslice(this.length+G);Z+=G}}}ns1.DenoBuffer=An0;function D04($){let Z=new An0;return Z.readFrom($),Z.bytes()}function w04($,Z){let Q=0;while(Q<Z.length)Q+=$.write(Z.subarray(Q))}});var qn0=v((ss1)=>{Object.defineProperty(ss1,"__esModule",{value:!0});ss1.cc=ss1.State=ss1.Parser=ss1.Kind=void 0;ss1.describe=R04;var Rn0=Tn0(),In0=ZG();ss1.Kind={OK:0,ERR:1,MSG:2,INFO:3,PING:4,PONG:5};function R04($){let Z,Q="";switch($.kind){case ss1.Kind.MSG:Z="MSG";break;case ss1.Kind.OK:Z="OK";break;case ss1.Kind.ERR:Z="ERR",Q=In0.TD.decode($.data);break;case ss1.Kind.PING:Z="PING";break;case ss1.Kind.PONG:Z="PONG";break;case ss1.Kind.INFO:Z="INFO",Q=In0.TD.decode($.data)}return`${Z}: ${Q}`}function os1(){let $={};return $.sid=-1,$.hdr=-1,$.size=-1,$}var rs1=48,I04=57,Ly=67108864;class as1{dispatcher;state;as;drop;hdr;ma;argBuf;msgBuf;constructor($){this.dispatcher=$,this.state=ss1.State.OP_START,this.as=0,this.drop=0,this.hdr=0}parse($){let Z;for(Z=0;Z<$.length;Z++){let Q=$[Z];switch(this.state){case ss1.State.OP_START:switch(Q){case ss1.cc.M:case ss1.cc.m:this.state=ss1.State.OP_M,this.hdr=-1,this.ma=os1();break;case ss1.cc.H:case ss1.cc.h:this.state=ss1.State.OP_H,this.hdr=0,this.ma=os1();break;case ss1.cc.P:case ss1.cc.p:this.state=ss1.State.OP_P;break;case ss1.cc.PLUS:this.state=ss1.State.OP_PLUS;break;case ss1.cc.MINUS:this.state=ss1.State.OP_MINUS;break;case ss1.cc.I:case ss1.cc.i:this.state=ss1.State.OP_I;break;default:throw this.fail($.subarray(Z))}break;case ss1.State.OP_H:switch(Q){case ss1.cc.M:case ss1.cc.m:this.state=ss1.State.OP_M;break;default:throw this.fail($.subarray(Z))}break;case ss1.State.OP_M:switch(Q){case ss1.cc.S:case ss1.cc.s:this.state=ss1.State.OP_MS;break;default:throw this.fail($.subarray(Z))}break;case ss1.State.OP_MS:switch(Q){case ss1.cc.G:case ss1.cc.g:this.state=ss1.State.OP_MSG;break;default:throw this.fail($.subarray(Z))}break;case ss1.State.OP_MSG:switch(Q){case ss1.cc.SPACE:case ss1.cc.TAB:this.state=ss1.State.OP_MSG_SPC;break;default:throw this.fail($.subarray(Z))}break;case ss1.State.OP_MSG_SPC:switch(Q){case ss1.cc.SPACE:case ss1.cc.TAB:continue;default:this.state=ss1.State.MSG_ARG,this.as=Z}break;case ss1.State.MSG_ARG:switch(Q){case ss1.cc.CR:this.drop=1;break;case ss1.cc.NL:{let X=this.argBuf?this.argBuf.bytes():$.subarray(this.as,Z-this.drop);this.processMsgArgs(X),this.drop=0,this.as=Z+1,this.state=ss1.State.MSG_PAYLOAD,Z=this.as+this.ma.size-1;break}default:if(this.argBuf)this.argBuf.writeByte(Q)}break;case ss1.State.MSG_PAYLOAD:if(this.msgBuf)if(this.msgBuf.length>=this.ma.size){let X=this.msgBuf.bytes({copy:!1});this.dispatcher.push({kind:ss1.Kind.MSG,msg:this.ma,data:X}),this.argBuf=void 0,this.msgBuf=void 0,this.state=ss1.State.MSG_END}else{let X=this.ma.size-this.msgBuf.length,Y=$.length-Z;if(Y<X)X=Y;if(X>0)this.msgBuf.write($.subarray(Z,Z+X)),Z=Z+X-1;else this.msgBuf.writeByte(Q)}else if(Z-this.as>=this.ma.size)this.dispatcher.push({kind:ss1.Kind.MSG,msg:this.ma,data:$.subarray(this.as,Z)}),this.argBuf=void 0,this.msgBuf=void 0,this.state=ss1.State.MSG_END;break;case ss1.State.MSG_END:switch(Q){case ss1.cc.NL:this.drop=0,this.as=Z+1,this.state=ss1.State.OP_START;break;default:continue}break;case ss1.State.OP_PLUS:switch(Q){case ss1.cc.O:case ss1.cc.o:this.state=ss1.State.OP_PLUS_O;break;default:throw this.fail($.subarray(Z))}break;case ss1.State.OP_PLUS_O:switch(Q){case ss1.cc.K:case ss1.cc.k:this.state=ss1.State.OP_PLUS_OK;break;default:throw this.fail($.subarray(Z))}break;case ss1.State.OP_PLUS_OK:switch(Q){case ss1.cc.NL:this.dispatcher.push({kind:ss1.Kind.OK}),this.drop=0,this.state=ss1.State.OP_START;break}break;case ss1.State.OP_MINUS:switch(Q){case ss1.cc.E:case ss1.cc.e:this.state=ss1.State.OP_MINUS_E;break;default:throw this.fail($.subarray(Z))}break;case ss1.State.OP_MINUS_E:switch(Q){case ss1.cc.R:case ss1.cc.r:this.state=ss1.State.OP_MINUS_ER;break;default:throw this.fail($.subarray(Z))}break;case ss1.State.OP_MINUS_ER:switch(Q){case ss1.cc.R:case ss1.cc.r:this.state=ss1.State.OP_MINUS_ERR;break;default:throw this.fail($.subarray(Z))}break;case ss1.State.OP_MINUS_ERR:switch(Q){case ss1.cc.SPACE:case ss1.cc.TAB:this.state=ss1.State.OP_MINUS_ERR_SPC;break;default:throw this.fail($.subarray(Z))}break;case ss1.State.OP_MINUS_ERR_SPC:switch(Q){case ss1.cc.SPACE:case ss1.cc.TAB:continue;default:this.state=ss1.State.MINUS_ERR_ARG,this.as=Z}break;case ss1.State.MINUS_ERR_ARG:switch(Q){case ss1.cc.CR:this.drop=1;break;case ss1.cc.NL:{let X;if(this.argBuf)X=this.argBuf.bytes(),this.argBuf=void 0;else X=$.subarray(this.as,Z-this.drop);this.dispatcher.push({kind:ss1.Kind.ERR,data:X}),this.drop=0,this.as=Z+1,this.state=ss1.State.OP_START;break}default:if(this.argBuf)this.argBuf.write(Uint8Array.of(Q))}break;case ss1.State.OP_P:switch(Q){case ss1.cc.I:case ss1.cc.i:this.state=ss1.State.OP_PI;break;case ss1.cc.O:case ss1.cc.o:this.state=ss1.State.OP_PO;break;default:throw this.fail($.subarray(Z))}break;case ss1.State.OP_PO:switch(Q){case ss1.cc.N:case ss1.cc.n:this.state=ss1.State.OP_PON;break;default:throw this.fail($.subarray(Z))}break;case ss1.State.OP_PON:switch(Q){case ss1.cc.G:case ss1.cc.g:this.state=ss1.State.OP_PONG;break;default:throw this.fail($.subarray(Z))}break;case ss1.State.OP_PONG:switch(Q){case ss1.cc.NL:this.dispatcher.push({kind:ss1.Kind.PONG}),this.drop=0,this.state=ss1.State.OP_START;break}break;case ss1.State.OP_PI:switch(Q){case ss1.cc.N:case ss1.cc.n:this.state=ss1.State.OP_PIN;break;default:throw this.fail($.subarray(Z))}break;case ss1.State.OP_PIN:switch(Q){case ss1.cc.G:case ss1.cc.g:this.state=ss1.State.OP_PING;break;default:throw this.fail($.subarray(Z))}break;case ss1.State.OP_PING:switch(Q){case ss1.cc.NL:this.dispatcher.push({kind:ss1.Kind.PING}),this.drop=0,this.state=ss1.State.OP_START;break}break;case ss1.State.OP_I:switch(Q){case ss1.cc.N:case ss1.cc.n:this.state=ss1.State.OP_IN;break;default:throw this.fail($.subarray(Z))}break;case ss1.State.OP_IN:switch(Q){case ss1.cc.F:case ss1.cc.f:this.state=ss1.State.OP_INF;break;default:throw this.fail($.subarray(Z))}break;case ss1.State.OP_INF:switch(Q){case ss1.cc.O:case ss1.cc.o:this.state=ss1.State.OP_INFO;break;default:throw this.fail($.subarray(Z))}break;case ss1.State.OP_INFO:switch(Q){case ss1.cc.SPACE:case ss1.cc.TAB:this.state=ss1.State.OP_INFO_SPC;break;default:throw this.fail($.subarray(Z))}break;case ss1.State.OP_INFO_SPC:switch(Q){case ss1.cc.SPACE:case ss1.cc.TAB:continue;default:this.state=ss1.State.INFO_ARG,this.as=Z}break;case ss1.State.INFO_ARG:switch(Q){case ss1.cc.CR:this.drop=1;break;case ss1.cc.NL:{let X;if(this.argBuf)X=this.argBuf.bytes(),this.argBuf=void 0;else X=$.subarray(this.as,Z-this.drop);this.dispatcher.push({kind:ss1.Kind.INFO,data:X}),this.drop=0,this.as=Z+1,this.state=ss1.State.OP_START;break}default:if(this.argBuf)this.argBuf.writeByte(Q)}break;default:throw this.fail($.subarray(Z))}}if((this.state===ss1.State.MSG_ARG||this.state===ss1.State.MINUS_ERR_ARG||this.state===ss1.State.INFO_ARG)&&!this.argBuf)this.argBuf=new Rn0.DenoBuffer($.subarray(this.as,Z-this.drop));if(this.state===ss1.State.MSG_PAYLOAD&&!this.msgBuf){if(!this.argBuf)this.cloneMsgArg();this.msgBuf=new Rn0.DenoBuffer($.subarray(this.as))}}cloneMsgArg(){let $=this.ma.subject.length,Z=this.ma.reply?this.ma.reply.length:0,Q=new Uint8Array($+Z);if(Q.set(this.ma.subject),this.ma.reply)Q.set(this.ma.reply,$);if(this.argBuf=new Rn0.DenoBuffer(Q),this.ma.subject=Q.subarray(0,$),this.ma.reply)this.ma.reply=Q.subarray($)}processMsgArgs($){if(this.hdr>=0)return this.processHeaderMsgArgs($);let Z=[],Q=-1;for(let X=0;X<$.length;X++)switch($[X]){case ss1.cc.SPACE:case ss1.cc.TAB:case ss1.cc.CR:case ss1.cc.NL:if(Q>=0)Z.push($.subarray(Q,X)),Q=-1;break;default:if(Q<0)Q=X}if(Q>=0)Z.push($.subarray(Q));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],Ly);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],Ly);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}: ${In0.TD.decode($)}`)}processHeaderMsgArgs($){let Z=[],Q=-1;for(let X=0;X<$.length;X++)switch($[X]){case ss1.cc.SPACE:case ss1.cc.TAB:case ss1.cc.CR:case ss1.cc.NL:if(Q>=0)Z.push($.subarray(Q,X)),Q=-1;break;default:if(Q<0)Q=X}if(Q>=0)Z.push($.subarray(Q));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],Ly),this.ma.size=this.protoParseInt(Z[3],Ly);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],Ly),this.ma.size=this.protoParseInt(Z[4],Ly);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 Q=0;for(let X=0;X<$.length;X++){if($[X]<rs1||$[X]>I04)return-1;Q=Q*10+($[X]-rs1)}return Z!==void 0&&Q>Z?-1:Q}}ss1.Parser=as1;ss1.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};ss1.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 C70=v(($e1)=>{Object.defineProperty($e1,"__esModule",{value:!0});$e1.MsgHdrsImpl=void 0;$e1.canonicalMIMEHeaderKey=Vn0;$e1.headers=V04;var es1=ZG(),l3=JO(),S70=QG();function Vn0($){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 S70.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 V04($=0,Z=""){if($===0&&Z!=="")throw S70.InvalidArgumentError.format("code","is required");else if($>0&&Z==="")throw S70.InvalidArgumentError.format("description","is required");return new Dy($,Z)}var Mn0="NATS/1.0";class Dy{_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,Q]of this.headers){let X=$.values(Z);if(Q.length!==X.length)return!1;let Y=[...Q].sort(),G=[...X].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 Dy,X=es1.TD.decode($).split(`\r
1449
1449
  `),Y=X[0];if(Y!==Mn0){let G=Y.replace(Mn0,"").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(X.length>=1)X.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 $=Mn0;if(this._code>0&&this._description!=="")$+=` ${this._code} ${this._description}`;for(let[Z,Q]of this.headers)for(let X=0;X<Q.length;X++)$=`${$}\r
1450
1450
  ${Z}: ${Q[X]}`;return`${$}\r
@@ -2920,7 +2920,7 @@ Respond with the structured verdict and a short reason.`,_c$;var fc$=D(()=>{D4()
2920
2920
  ${G.join(`
2921
2921
  `)}`:Y}function rH6($){let Z=new Set;for(let X of $)for(let Q of X.split(`
2922
2922
  `)){let Y=Q.trim();if(/^Co-authored-by:\s/i.test(Y))Z.add(Y)}return[...Z]}var Dl$=200,cH6=12,dH6,iH6=300,F71=3;var H71=D(()=>{xD();YT0();dH6={aheadBy:0,behindBy:0,files:[]}});function sH6($){if(!$||$.includes(".."))return!1;return aH6.test($)}function wl$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!sH6(Z))return null;let{__resolveType:X,...Q}=$;return{resolveType:Z,payload:Q}}function El$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var aH6;var jl$=D(()=>{aH6=/^[\w./@-]+$/});function Fs($,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 zl$($,Z,X,Q){if(!Q.connectionId)throw new Gv("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let Y=$.organization?.id;if(!Y)throw new Gv(G9);await jO({ctx:$,connectionId:Q.connectionId,organizationId:Y,forceRefresh:!0,onLegacyMintError:(H)=>{let N=H instanceof Error?H.message:G9;throw new Gv(N)}});let{cloneUrl:G,gitUserName:J,gitUserEmail:K}=await TW(Q.connectionId,Q.owner,Q.name,$.db,$.vault).catch((H)=>{let{code:N,message:U}=H5$(H instanceof Error?H.message:String(H));throw N?new Gv(U):H}),W=hu($),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:K}},...W?{operator:W}:{}})});if(!F.ok){let H=await EO(F,eH6).catch(()=>F.statusText);throw Error(`Failed to refresh sandbox git credentials (${F.status}): ${H}`)}}var eH6=10485760,Gv;var N71=D(()=>{ZJ();nA0();Qn();Fi0();zy();Gv=class Gv extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function ZN6($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!$N6.test(Z))throw Error(`Invalid branch name: ${$}`)}function Jv($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(QN6)])}async function GN6($,Z){let X=$.var.studioContext,Q=eG(Z.branch),Y=$.req.query("thread")??Q,G=Y&&Y===Q?Z.branchThread:Y?await X.storage.threads.get(Y).catch(()=>null):null,J=G?.virtual_mcp_id===Z.virtualMcpId?G:null,K=FC(J?.metadata?.runtime);if(K)return K;let W=uO0(Z.virtualMcpMetadata),F=W==="cms"?await pZ1(X,{claimName:Z.claimName}):"alive",H=W==="cms"&&F!=="alive"?"cms":"sandbox",N=!!J&&(F==="gone"||F==="alive"&&W==="cms");if(N&&J)_n(X,J.id,H);if(W==="cms")console.log("sandbox proxy: no runtime stamp",{route:$.req.path,method:$.req.method,reason:J?"unstamped":"threadless",liveness:F,resolved:H,stamped:N});return H}async function JN6($){let Z=$.get("vmClaim");if(Z.runner)return Z.runner;try{return await $Q($.var.studioContext)}catch{return null}}function Kv($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}async function mu($){let{virtualMcpMetadata:Z,connectionIds:X}=$.get("vmClaim"),Q=$.var.studioContext,Y=Fs(Z,X);if(!Y)throw new u4(404,"AUTH","repo","Project has no GitHub repository");let G=t(Q);return tA0(Q,G.id,Y)}function U71($,Z){if(Z instanceof eP0)return $.json({error:Z.message},429,{...P5,...Z.retryAfterMs===null?{}:{"Retry-After":String(Math.ceil(Z.retryAfterMs/1000))}});if(Z instanceof u4){let Q=Z.status===404?404:Z.status===409||Z.status===422?409:502;return $.json({error:Z.message},Q,P5)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},502,P5)}async function Tl$($,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 Rl$($){try{let Z=await mu($),X=await GT0(Z,$.get("vmClaim").branch);return $.json(X,200,P5)}catch(Z){return U71($,Z)}}function Hs($,Z){let Q=(WT0.get($)??Promise.resolve()).catch(()=>{}).then(Z),Y=Q.catch(()=>{});return WT0.set($,Y),Y.finally(()=>{if(WT0.get($)===Y)WT0.delete($)}),Q}async function tZ($,Z,X){if(!X?.runner&&$.get("vmClaim").runtime==="cms")return $.json({error:"sandbox not found: this session is sandbox-less"},404,P5);let Q=X?.runner??Kv($);if(Q instanceof Response)return Q;let{claimName:Y,userId:G,projectRef:J}=$.get("vmClaim"),K=X?.method??"POST",W=null,F=new Headers;if(X?.jsonBody!==void 0)W=X.jsonBody,F.set("content-type","application/json");else if(X?.forwardJsonBody)W=await $.req.text(),F.set("content-type","application/json");let H=X?.signal,N={method:K,headers:F,body:W,...H?{signal:H}:{}},U=async()=>{let B=await Q.proxyDaemonRequest(Y,Z,N);if(X?.map404to410&&B.status===404){try{await B.body?.cancel()}catch{}if(await Q.adoptLiveClaim({userId:G,projectRef:J},Y))B=await Q.proxyDaemonRequest(Y,Z,N);if(B.status===404){try{await B.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",...P5}})}}let O=await B.text(),L=X?.redactRepoDir?KN6(O):O,w=B.headers.get("content-type")??"application/json";return new Response(L,{status:B.status,headers:{"content-type":w,...P5}})};try{if(H){let B=U();return B.catch(()=>{}),await Promise.race([B,new Promise((L,w)=>{if(H.aborted)return w(H.reason);H.addEventListener("abort",()=>w(H.reason),{once:!0})})])}return await U()}catch(B){let O=B instanceof Error?B.message:String(B);return $.json({error:`Daemon unreachable: ${O}`},502)}}function KN6($){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 FT0($,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 K=`Daemon error (${G.status})`;try{K=JSON.parse(J).error??K}catch{}throw Error(K)}return JSON.parse(J)}function WN6($){return Il$.includes($)}var $N6,Pl$=524288,XN6=65536,QN6=1e4,Al$=2000,YN6,WT0,P5,Il$,ql$=()=>{let $=new H1;$.use("/:virtualMcpId/:branch/*",YN6),$.post("/:virtualMcpId/:branch/write",(X)=>tZ(X,"/_sandbox/write",{forwardJsonBody:!0,signal:Jv(X)})),$.post("/:virtualMcpId/:branch/unlink",(X)=>tZ(X,"/_sandbox/unlink",{forwardJsonBody:!0,signal:Jv(X)})),$.post("/:virtualMcpId/:branch/mkdir",(X)=>tZ(X,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:Jv(X)})),$.post("/:virtualMcpId/:branch/rename",(X)=>tZ(X,"/_sandbox/rename",{forwardJsonBody:!0,signal:Jv(X)})),$.post("/:virtualMcpId/:branch/read",(X)=>tZ(X,"/_sandbox/read",{forwardJsonBody:!0,signal:Jv(X)})),$.post("/:virtualMcpId/:branch/glob",(X)=>tZ(X,"/_sandbox/glob",{forwardJsonBody:!0,signal:Jv(X)})),$.post("/:virtualMcpId/:branch/grep",(X)=>tZ(X,"/_sandbox/grep",{forwardJsonBody:!0,signal:Jv(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 tZ(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 tZ(X,`/_sandbox/exec/${encodeURIComponent(Q)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(X)=>tZ(X,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDir:!0})),$.put("/:virtualMcpId/:branch/config",(X)=>tZ(X,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(X)=>{let Q=X.req.param("step");if(!Q||!WN6(Q))return X.json({error:`step must be one of: ${Il$.join(", ")}`},400);let Y=X.get("vmClaim"),G=await pZ1(X.var.studioContext,{claimName:Y.claimName})==="gone"?null:await JN6(X);if(!G)return X.json({error:"sandbox not found: nothing is running at this ref"},404,P5);if(Q==="start"){let J=t(X.var.studioContext),K=Ey(Y.virtualMcpMetadata);try{await X70({ctx:X.var.studioContext,runner:G,handle:Y.claimName,orgId:J.id,userId:Y.callerUserId,entries:K})}catch(W){let F=W instanceof Error?W.message:String(W);return X.json({error:`Failed to push env to daemon: ${F}`},502)}}return tZ(X,`/_sandbox/setup/${Q}`,{signal:X.req.raw.signal,map404to410:!0,runner:G})}),$.get("/:virtualMcpId/:branch/events",(X)=>{let Q=X.get("vmClaim");if(!Q.runner)return hN(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 qc$(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").runtime==="cms")return Rl$(X);return Z(X)});let Z=(X)=>tZ(X,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([X.req.raw.signal,AbortSignal.timeout(Al$)])});return $.post("/:virtualMcpId/:branch/git/status",(X)=>{if(X.get("vmClaim").runtime==="cms")return Rl$(X);return tZ(X,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([X.req.raw.signal,AbortSignal.timeout(Al$)])})}),$.post("/:virtualMcpId/:branch/git/diff",async(X)=>{let Q=X.get("vmClaim");if(Q.runtime==="cms")try{let Y=await X.req.json().catch(()=>({})),G=await mu(X),J=await JT0(G,Q.branch,Y.base);return X.json(J,200,P5)}catch(Y){return U71(X,Y)}return tZ(X,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})}),$.post("/:virtualMcpId/:branch/git/publish",async(X)=>{if(X.get("vmClaim").runtime==="cms")return X.json({ok:!0},200,P5);let Q=Kv(X);if(Q instanceof Response)return Q;let{claimName:Y,virtualMcpMetadata:G,connectionIds:J}=X.get("vmClaim"),K=X.var.studioContext;return Hs(Y,async()=>{try{await nZ1(K,Q,Y);let W=Fs(G,J);if(W)await zl$(K,Q,Y,W)}catch(W){if(W instanceof Gv)return X.json({error:W.message},403,P5);let F=W instanceof Error?W.message:String(W);return X.json({error:F},502,P5)}return tZ(X,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",async(X)=>{let Q=X.get("vmClaim");if(Q.runtime==="cms")return Hs(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,P5);try{let J=await mu(X);return await Ll$(J,Q.branch,G),X.json({ok:!0},200,P5)}catch(J){let K=J instanceof u4&&J.status===409?409:502,W=J instanceof Error?J.message:String(J);return X.json({error:W},K,P5)}});return Hs(Q.claimName,()=>tZ(X,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(X)=>{let Q=X.get("vmClaim");if(Q.runtime==="cms")return Hs(Q.claimName,async()=>{try{let K=await X.req.json().catch(()=>({})),W=await mu(X),F=K.base??await W.getDefaultBranch();return await KT0(W,Q.branch,F),X.json({ok:!0},200,P5)}catch(K){return U71(X,K)}});let Y=Kv(X);if(Y instanceof Response)return Y;let{claimName:G}=X.get("vmClaim"),J=X.var.studioContext;return Hs(G,async()=>{try{await nZ1(J,Y,G)}catch(K){let W=K instanceof Error?K.message:String(K);return X.json({error:W},502,P5)}return tZ(X,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",p5({maxSize:Pl$,onError:(X)=>X.json({error:"Payload too large"},413,P5)}),async(X)=>{let Q=X.get("vmClaim"),Y=null;if(Q.runtime!=="cms"){let F=Kv(X);if(F instanceof Response)return F;Y=F}let{claimName:G,userId:J,projectRef:K}=Q,W=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,[B,O]=rZ1(H)&&U?[H,N]:Y?await Promise.all([FT0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:K}),FT0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:K})]):await(async()=>{let w=await mu(X);return Promise.all([GT0(w,Q.branch),JT0(w,Q.branch)])})(),L=await Cc$(W,B,O);return X.json(L,200,P5)}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,P5);return X.json({error:H},502,P5)}}),$.post("/:virtualMcpId/:branch/git/judge-review",p5({maxSize:Pl$,onError:(X)=>X.json({error:"Payload too large"},413,P5)}),async(X)=>{let Q=X.get("vmClaim"),Y=null;if(Q.runtime!=="cms"){let F=Kv(X);if(F instanceof Response)return F;Y=F}let{claimName:G,userId:J,projectRef:K}=Q,W=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,[B,O]=rZ1(H)&&U?[H,N]:Y?await Promise.all([FT0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:K}),FT0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:K})]):await(async()=>{let w=await mu(X);return Promise.all([GT0(w,Q.branch),JT0(w,Q.branch)])})(),L=await vc$(W,B,O,typeof F.language==="string"?F.language:void 0);return X.json(L,200,P5)}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,P5);return X.json({error:H},502,P5)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(X)=>{let Q=Kv(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 K=J.replace(/\/+$/,"");return Tl$(X,`${K}${G}`)}),$.post("/:virtualMcpId/:branch/preview-invoke",p5({maxSize:XN6,onError:(X)=>X.json({error:"Payload too large"},413)}),async(X)=>{let Q=Kv(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 K=wl$(J);if(!K)return X.json({error:"Invalid or missing __resolveType"},400);let W=El$(G,K.resolveType);return Tl$(X,W,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(K.payload),signal:AbortSignal.timeout(30000)})}),$};var Ml$=D(()=>{U8();BF();gu();iZ1();sp();Tc$();b3();gy();Rc$();u3();Ic$();Mc$();Ji0();Zn();eZ1();fc$();Z71();xD();H71();jl$();N71();$N6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;YN6=pA0(async($,Z)=>{let X=$.var.studioContext;try{r(X)}catch{return $.json({error:"Unauthorized"},401)}let Q=o0(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{ZN6(J)}catch(L){let w=L instanceof Error?L.message:String(L);return $.json({error:w},400)}let K=await X.storage.virtualMcps.findById(G);if(!K||K.organization_id!==Y.id)return $.json({error:"Virtual MCP not found"},404);let W=rp({orgId:Y.id,virtualMcpId:G,branch:J}),F=await $i0(X,J),H=Zi0(F,Q),N=Ac$({userId:H,projectRef:W}),U=K.metadata??null,B=await GN6($,{claimName:N,branch:J,virtualMcpId:G,sandboxUserId:H,virtualMcpMetadata:U,branchThread:F});if(B==="cms")return $.set("vmClaim",{claimName:N,callerUserId:Q,runner:null,virtualMcpId:G,branch:J,userId:H,projectRef:W,virtualMcpMetadata:U,connectionIds:K.connections?.map((L)=>L.connection_id)??[],runtime:B}),Z();let O;try{O=await $Q(X)}catch{O=null}if(!O)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:N,callerUserId:Q,runner:O,virtualMcpId:G,branch:J,userId:H,projectRef:W,virtualMcpMetadata:U,connectionIds:K.connections?.map((L)=>L.connection_id)??[],runtime:B}),Z()});WT0=new Map;P5={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};Il$=["clone","install","start"]});function kl$($,Z,X){let Q=B71.get($);if(!Q)Q={pending:null,running:!1},B71.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,K]of Object.entries(X.set??{}))Y.set.set(J,K),Y.del.delete(J);for(let J of X.delete??[])Y.del.add(J),Y.set.delete(J);let G=new Promise((J,K)=>{Y.resolvers.push(J),Y.rejecters.push(K)});if(!Q.running)HN6($,Q);return G}async function HN6($,Z){Z.running=!0;try{while(Z.pending){let X=Z.pending;Z.pending=null;try{let Q=await NN6(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)B71.delete($)}}async function NN6($){let{client:Z,branch:X,packagePath:Q}=$.deps;for(let Y=0;;Y++){let G=await du(Z,X),J=await Z.getCommitTreeSha(G),K=await Z.getTreeRecursive(J),W=K71(K,Q),F=[],H=new Map(W.map((O)=>[O.path,{stem:O.stem,sha:O.sha}]));for(let[O,L]of $.set){let w=W71(W,O),E=`${JSON.stringify(L,null,2)}
2923
- `,j=await Z.createBlob(E);await Ul$(Z.owner,Z.repo,j,E);let z=w[0]??`${QT0(Q)}/${X71(O)}.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 w.slice(1))F.push({path:P,mode:"100644",type:"blob",sha:null}),H.delete(P)}for(let O of $.del)for(let L of W71(W,O))F.push({path:L,mode:"100644",type:"blob",sha:null}),H.delete(L);if(F.length===0)return G;let N=Q?`${Q}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(K.some((O)=>O.type==="blob"&&O.path===N)){let O=await Promise.all([...H.values()].map(async(j)=>({stem:j.stem,content:j.content??await Z.getBlobText(j.sha)}))),{decofile:L,skipped:w}=Gs(O);if(w.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:`${Z.owner}/${Z.repo}`,branch:X,packagePath:Q,blocks:w.map((j)=>j.key)});let E=await Z.createBlob(L);F.push({path:N,mode:"100644",type:"blob",sha:E})}let U=await Z.createTree(J,F),B=await Z.createCommit({message:UN6($),treeSha:U,parentShas:[G]});try{return await Z.updateRef(X,B),B}catch(O){if(!(O instanceof u4&&O.status===422)||Y>=FN6-1)throw O;await L$(aZ(2000,200,Y,2,0.5))}}}function UN6($){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 tm0(Q,$.deps.coAuthor)}var FN6=3,B71;var Vl$=D(()=>{fO0();rA0();K4();xD();YT0();B71=new Map});import{createHmac as Sl$,randomBytes as BN6,timingSafeEqual as ON6}from"crypto";function Cl$(){if(HT0)return HT0;let $;try{let Z=b0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return HT0=$?Buffer.from($):BN6(32),HT0}function O71($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+DN6)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=Sl$("sha256",Cl$()).update(Q).digest("base64url");return`${Q}.${Y}`}function _l$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(Sl$("sha256",Cl$()).update(Q).digest("base64url"));if(Y.length!==G.length||!ON6(Y,G))return!1;let J;try{J=JSON.parse(Buffer.from(Q,"base64url").toString())}catch{return!1}let K=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>=K}var DN6=21600000,HT0=null;var vl$=D(()=>{R$()});import{z as iu}from"zod";function wN6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&LN6.test($)}function gl$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function Ns($){let Z=$.get("decofileScope");return tA0($.var.studioContext,Z.organizationId,Z.githubRepo)}function Us($,Z){if(Z instanceof u4){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 hl$(){let $=new H1;return $.use("/:virtualMcpId/:branch",yl$),$.use("/:virtualMcpId/:branch/*",yl$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Ns(Z),Y=await Bl$(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=O71({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(gl$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return Us(Z,Q)}}),$.get("/:virtualMcpId/:branch/meta",async(Z)=>{let X=Z.get("decofileScope"),Q=X.packagePath?`${X.packagePath}/.deco/meta.gen.json`:".deco/meta.gen.json";try{let Y=await Ns(Z),G=await Y.getFileTextAtRef(X.branch,Q);if(G===null){let J=await Y.getDefaultBranch();if(J!==X.branch)G=await Y.getFileTextAtRef(J,Q)}if(G===null)return Z.json({error:"meta.gen.json not committed"},404);return Z.body(G,200,{"content-type":"application/json","Cache-Control":"no-store","Access-Control-Allow-Origin":"*"})}catch(Y){return Us(Z,Y)}}),$.patch("/:virtualMcpId/:branch",jN6,async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=zN6.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{oA0(J)}catch(K){let W=K instanceof Error?K.message:String(K);return Z.json({error:W},400)}for(let[J,K]of Object.entries(G.set??{}))if(typeof K!=="object"||K===null||Array.isArray(K))return Z.json({error:`Block "${J}" must be a JSON object`},400);try{let J=await Ns(Z),K=await kl$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:hu(Q)},G),W=O71({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:K,token:W,apiHost:gl$(Z)})}catch(J){return Us(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Ns(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(K){if(!(K instanceof u4&&K.status===409))throw K;await KT0(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 u4&&J.status===409)return Z.json({error:"merge-conflict"},409);if(J instanceof u4&&J.status===405){let W=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:W.number,url:W.html_url})}throw J}}catch(Q){return Us(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Ns(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 u4&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});throw G}}catch(Q){return Us(Z,Q)}}),$}var LN6,fl$=500,bl$=1048576,xl$=1024,EN6=8388608,jN6,zN6,yl$;var ul$=D(()=>{rA0();U8();BF();iZ1();nA0();N71();Z71();Vl$();vl$();H71();xD();YT0();LN6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;jN6=p5({maxSize:EN6,onError:($)=>$.json({error:"Payload too large"},413)}),zN6=iu.object({set:iu.record(iu.string(),iu.unknown()).optional(),delete:iu.array(iu.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}).refine(($)=>Object.keys($.set??{}).length+($.delete?.length??0)<=fl$,{message:`Patch cannot touch more than ${fl$} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=bl$),{message:`Each block must be at most ${bl$} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=xl$),{message:`Each block key must be at most ${xl$} characters`}),yl$=pA0(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(!wN6(G))return $.json({error:`Invalid branch name: ${G}`},400);let J=X.auth?.user?.id??null;if(!J){let B=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!B||!_l$(B,{organizationId:Q.id,virtualMcpId:Y,branch:G}))return $.json({error:"Unauthorized"},401)}let K=await X.storage.virtualMcps.findById(Y);if(!K||K.organization_id!==Q.id)return $.json({error:"Virtual MCP not found"},404);let W=K.metadata??null;if(!hO0(W))return $.json({error:"Project has no preview server configured"},404);let H=K.connections?.map((B)=>B.connection_id)??[],N=Fs(W,H);if(!N)return $.json({error:"Project has no GitHub repository"},404);let U=W?.runtime;return $.set("decofileScope",{organizationId:Q.id,virtualMcpId:Y,branch:G,packagePath:U?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:N,userId:J}),Z()})});var cl$=($)=>{let Z=new H1;if(Z.use("*",o_),Z.route("/",FA0()),Z.route("/",Qg$()),Z.route("/",Fc$()),Z.route("/",Jc$()),Z.route("/",dA0()),Z.route("/tools",Lc$()),Z.route("/",Bc$()),Z.route("/",hu$({kvStorage:$.kvStorage})),Z.route("/",yu$()),Z.route("/fs",eu$({getConnection:$.getNatsConnection})),Z.route("/sandbox",ql$()),Z.route("/decofile",hl$()),Z.route("/",Qc$()),Z.route("/deco-sites",NA0()),Z.route("/sso",QA0()),Z.route("/",mA0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",oy$()),$.mountDevAssets)Z.route("/dev-assets",UA0({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("/",Db$()),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",Zc$()),Z.route("/mcp",Bw0()),Z.route("/mcp/self",lA0()),Z.route("/mcp",Lw0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var ll$=D(()=>{U8();B91();ry$();w91();BA0();Ca();N91();gu$();uu$();$c$();gt();G91();ww0();gZ1();Xc$();Yc$();Kc$();Hc$();Oc$();uZ1();wc$();cZ1();Ow0();Ml$();ul$()});function PN6($){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 AN6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},dl$=()=>{let $=new H1;return $.use("*",AN6),$.get("/",async(Z)=>{let X=b0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await nZ(Q,Y,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:PN6(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var ml$=D(()=>{U8();R$();KP0()});import{z as M1}from"zod";function EF($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function _N6($){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 vN6($,Z,X){try{return JSON.parse($)}catch{throw new nl$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function fN6($){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:vN6(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 bN6($){let Z=$.map((X)=>{let Q=X.function.parameters?dY(X.function.parameters):dY({type:"object",properties:{}});return[X.function.name,I$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function xN6($){if(!$)return;return{openai:{response_format:$}}}function yN6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function il$($,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 pl$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var TN6=256,RN6,IN6,qN6,MN6,kN6,VN6,SN6,CN6,nl$,tl$,ol$;var rl$=D(()=>{D4();U8();gu();jN();RN6=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),IN6=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),qN6=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(IN6).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),MN6=M1.object({type:M1.literal("text")}),kN6=M1.object({type:M1.literal("json_object")}),VN6=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()})}),SN6=M1.union([MN6,kN6,VN6]),CN6=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(qN6),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(RN6).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:SN6.optional(),user:M1.string().optional()});nl$=class nl$ extends Error{constructor($){super($);this.name="MessageConversionError"}};tl$=new H1;tl$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(EF("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(EF("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(EF("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=CN6.safeParse(Q);if(!Y.success){let w=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(EF(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let G=Y.data,J=_N6(G.model);if(!J)return $.json(EF("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:K}=J,{modelId:W}=J;if(!K){let E=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((j)=>$w(j.providerId));if(!E)return $.json(EF("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);K=E.id}let F;try{F=await Z.aiProviders.activate(K,Z.organization.id)}catch{return $.json(EF(`AI provider credential not found or inaccessible: ${K}`,"invalid_request_error","model"),404)}let H=F.aiSdk.languageModel(W),N=fN6(G.messages),U=G.tools?bN6(G.tools):void 0,B=xN6(G.response_format),O=yN6(),L=Math.floor(Date.now()/1000);if(G.stream)return hN($,async(w)=>{let E=il$(H,N,U,G,B,$.req.raw.signal);try{let j=BO(E),z=!1,A=0,P="",I=async()=>{if(P.length===0)return;let q=P;P="",await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{content:q},finish_reason:null}]})})};for await(let q of j.fullStream){if(!z&&(q.type==="text-delta"||q.type==="tool-call"))await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(q.type==="text-delta"){if(P+=q.text,P.length>=TN6)await I()}else if(q.type==="tool-call"){await I();let k=A++;await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{tool_calls:[{index:k,id:q.toolCallId,type:"function",function:{name:q.toolName,arguments:JSON.stringify(q.input)}}]},finish_reason:null}]})})}else if(q.type==="finish")await I(),await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{},finish_reason:pl$(q.finishReason)}],usage:q.totalUsage?{prompt_tokens:q.totalUsage.inputTokens??0,completion_tokens:q.totalUsage.outputTokens??0,total_tokens:q.totalUsage.totalTokens??0}:void 0})})}await I(),await w.writeSSE({data:"[DONE]"})}catch(j){let z=j;console.error("[openai-compat:stream] Error:",z.message),await w.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let w=il$(H,N,U,G,B,$.req.raw.signal),E=await NO(w),j={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)j.tool_calls=E.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),j.content=null;return $.json({id:O,object:"chat.completion",created:L,model:G.model,choices:[{index:0,message:j,finish_reason:pl$(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(EF("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(EF(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(EF(Y.message,"server_error"),500)}});ol$=tl$});function gN6($){if(typeof $!=="object"||$===null)return!1;let X=$.githubRepo?.url;return typeof X==="string"&&X.length>0}function al$(){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=o0(X);if(!Q)return Z.json({error:"Authentication required"},401);let G=(Z.req.query("site")??"").trim().toLowerCase();if(!tG(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(),K=[];for(let F of J){if(!F.slug||_Z(F))continue;let H=await X.storage.virtualMcps.list(F.id);for(let N of H){if(ds1(N)!==G)continue;if(!gN6(N.metadata))continue;K.push({orgSlug:F.slug,orgName:F.name??F.slug,project:{id:N.id,title:N.title,icon:N.icon??null}})}}let W={matches:K};return Z.json(W)}),$}var sl$=D(()=>{U8();rB()});var $d$;var el$=D(()=>{$d$={name:"decocms",version:"4.286.8",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","@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 cN6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??uN6}}var Zd$,uN6="https://ph.studio.decocms.com",Xd$;var Qd$=D(()=>{U8();x50();SC();$9();R$();r51();el$();Zd$=new H1;Zd$.get("/",($)=>{let Z={version:$d$.version,theme:Bi1(),...jH().logo&&{logo:jH().logo},...GN()&&{internalUrl:dC1()},...b0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!b0().firecrawlApiKey,auth:Gy$(),posthog:cN6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:zs()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});Xd$=Zd$});function pu($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function D71($){return(pu($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function Gd$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(pu($))}&sz=${Z}`}function Yd$($,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 Jd$($){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.`,K=Y?.trim()?Yd$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):Yd$(`How does ${X} really perform? ${J}`,200);return{title:G,description:K}}import{z as l0}from"zod";var Wv,lN6,dN6,mN6,iN6,Kd$;var Wd$=D(()=>{Wv=l0.enum(["good","bad","neutral"]),lN6=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:Wv.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 $})),dN6=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(lN6)),mN6={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()},iN6=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:Wv.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:Wv.optional()}),l0.object({template:l0.literal("stats"),stats:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),tone:Wv.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:Wv.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(dN6).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:Wv.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:Wv.optional()})).min(1)})]),Kd$=l0.object({...mN6,template:iN6})});function NT0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=Kd$.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 L71=D(()=>{Wd$()});import{join as Fd$}from"path";async function nN6($){try{let Z=await fetch(`${GW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(pN6)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=NT0(X);if(!Q.slides.length)return null;let Y=Q.slides.find((K)=>K.template.template==="cover"),G=Y?.template,J=G&&G.template==="cover"?G:void 0;return{brand:Q.meta.brand?.trim()||D71($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function OG($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function tN6($,Z){let X=pu($),Q=Z?.brand?.trim()||D71(X),Y=Gd$(X,128),J=`${(b0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:K,description:W}=Jd$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),F=`${J}/og.png`,H=`${Q} commerce report by decocms`;return[`<title>${OG(K)}</title>`,`<meta name="description" content="${OG(W)}" />`,'<meta name="robots" content="noindex, follow" />','<meta property="og:type" content="website" />','<meta property="og:site_name" content="decocms" />',`<meta property="og:title" content="${OG(K)}" />`,`<meta property="og:description" content="${OG(W)}" />`,`<meta property="og:url" content="${OG(J)}" />`,`<meta property="og:image" content="${OG(F)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${OG(H)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${OG(K)}" />`,`<meta name="twitter:description" content="${OG(W)}" />`,`<meta name="twitter:image" content="${OG(F)}" />`,`<meta name="twitter:image:alt" content="${OG(H)}" />`,`<link rel="canonical" href="${OG(J)}" />`,`<link rel="icon" href="${OG(Y)}" sizes="any" />`].join(`
2923
+ `,j=await Z.createBlob(E);await Ul$(Z.owner,Z.repo,j,E);let z=w[0]??`${QT0(Q)}/${X71(O)}.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 w.slice(1))F.push({path:P,mode:"100644",type:"blob",sha:null}),H.delete(P)}for(let O of $.del)for(let L of W71(W,O))F.push({path:L,mode:"100644",type:"blob",sha:null}),H.delete(L);if(F.length===0)return G;let N=Q?`${Q}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(K.some((O)=>O.type==="blob"&&O.path===N)){let O=await Promise.all([...H.values()].map(async(j)=>({stem:j.stem,content:j.content??await Z.getBlobText(j.sha)}))),{decofile:L,skipped:w}=Gs(O);if(w.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:`${Z.owner}/${Z.repo}`,branch:X,packagePath:Q,blocks:w.map((j)=>j.key)});let E=await Z.createBlob(L);F.push({path:N,mode:"100644",type:"blob",sha:E})}let U=await Z.createTree(J,F),B=await Z.createCommit({message:UN6($),treeSha:U,parentShas:[G]});try{return await Z.updateRef(X,B),B}catch(O){if(!(O instanceof u4&&O.status===422)||Y>=FN6-1)throw O;await L$(aZ(2000,200,Y,2,0.5))}}}function UN6($){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 tm0(Q,$.deps.coAuthor)}var FN6=3,B71;var Vl$=D(()=>{fO0();rA0();K4();xD();YT0();B71=new Map});import{createHmac as Sl$,randomBytes as BN6,timingSafeEqual as ON6}from"crypto";function Cl$(){if(HT0)return HT0;let $;try{let Z=b0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return HT0=$?Buffer.from($):BN6(32),HT0}function O71($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+DN6)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=Sl$("sha256",Cl$()).update(Q).digest("base64url");return`${Q}.${Y}`}function _l$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(Sl$("sha256",Cl$()).update(Q).digest("base64url"));if(Y.length!==G.length||!ON6(Y,G))return!1;let J;try{J=JSON.parse(Buffer.from(Q,"base64url").toString())}catch{return!1}let K=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>=K}var DN6=21600000,HT0=null;var vl$=D(()=>{R$()});import{z as iu}from"zod";function wN6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&LN6.test($)}function gl$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function Ns($){let Z=$.get("decofileScope");return tA0($.var.studioContext,Z.organizationId,Z.githubRepo)}function Us($,Z){if(Z instanceof u4){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 hl$(){let $=new H1;return $.use("/:virtualMcpId/:branch",yl$),$.use("/:virtualMcpId/:branch/*",yl$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Ns(Z),Y=await Bl$(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=O71({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(gl$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return Us(Z,Q)}}),$.get("/:virtualMcpId/:branch/meta",async(Z)=>{let X=Z.get("decofileScope"),Q=X.packagePath?`${X.packagePath}/.deco/meta.gen.json`:".deco/meta.gen.json";try{let Y=await Ns(Z),G=await Y.getFileTextAtRef(X.branch,Q);if(G===null){let J=await Y.getDefaultBranch();if(J!==X.branch)G=await Y.getFileTextAtRef(J,Q)}if(G===null)return Z.json({error:"meta.gen.json not committed"},404);return Z.body(G,200,{"content-type":"application/json","Cache-Control":"no-store","Access-Control-Allow-Origin":"*"})}catch(Y){return Us(Z,Y)}}),$.patch("/:virtualMcpId/:branch",jN6,async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=zN6.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{oA0(J)}catch(K){let W=K instanceof Error?K.message:String(K);return Z.json({error:W},400)}for(let[J,K]of Object.entries(G.set??{}))if(typeof K!=="object"||K===null||Array.isArray(K))return Z.json({error:`Block "${J}" must be a JSON object`},400);try{let J=await Ns(Z),K=await kl$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:hu(Q)},G),W=O71({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:K,token:W,apiHost:gl$(Z)})}catch(J){return Us(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Ns(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(K){if(!(K instanceof u4&&K.status===409))throw K;await KT0(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 u4&&J.status===409)return Z.json({error:"merge-conflict"},409);if(J instanceof u4&&J.status===405){let W=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:W.number,url:W.html_url})}throw J}}catch(Q){return Us(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Ns(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 u4&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});throw G}}catch(Q){return Us(Z,Q)}}),$}var LN6,fl$=500,bl$=1048576,xl$=1024,EN6=8388608,jN6,zN6,yl$;var ul$=D(()=>{rA0();U8();BF();iZ1();nA0();N71();Z71();Vl$();vl$();H71();xD();YT0();LN6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;jN6=p5({maxSize:EN6,onError:($)=>$.json({error:"Payload too large"},413)}),zN6=iu.object({set:iu.record(iu.string(),iu.unknown()).optional(),delete:iu.array(iu.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}).refine(($)=>Object.keys($.set??{}).length+($.delete?.length??0)<=fl$,{message:`Patch cannot touch more than ${fl$} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=bl$),{message:`Each block must be at most ${bl$} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=xl$),{message:`Each block key must be at most ${xl$} characters`}),yl$=pA0(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(!wN6(G))return $.json({error:`Invalid branch name: ${G}`},400);let J=X.auth?.user?.id??null;if(!J){let B=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!B||!_l$(B,{organizationId:Q.id,virtualMcpId:Y,branch:G}))return $.json({error:"Unauthorized"},401)}let K=await X.storage.virtualMcps.findById(Y);if(!K||K.organization_id!==Q.id)return $.json({error:"Virtual MCP not found"},404);let W=K.metadata??null;if(!hO0(W))return $.json({error:"Project has no preview server configured"},404);let H=K.connections?.map((B)=>B.connection_id)??[],N=Fs(W,H);if(!N)return $.json({error:"Project has no GitHub repository"},404);let U=W?.runtime;return $.set("decofileScope",{organizationId:Q.id,virtualMcpId:Y,branch:G,packagePath:U?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:N,userId:J}),Z()})});var cl$=($)=>{let Z=new H1;if(Z.use("*",o_),Z.route("/",FA0()),Z.route("/",Qg$()),Z.route("/",Fc$()),Z.route("/",Jc$()),Z.route("/",dA0()),Z.route("/tools",Lc$()),Z.route("/",Bc$()),Z.route("/",hu$({kvStorage:$.kvStorage})),Z.route("/",yu$()),Z.route("/fs",eu$({getConnection:$.getNatsConnection})),Z.route("/sandbox",ql$()),Z.route("/decofile",hl$()),Z.route("/",Qc$()),Z.route("/deco-sites",NA0()),Z.route("/sso",QA0()),Z.route("/",mA0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",oy$()),$.mountDevAssets)Z.route("/dev-assets",UA0({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("/",Db$()),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",Zc$()),Z.route("/mcp",Bw0()),Z.route("/mcp/self",lA0()),Z.route("/mcp",Lw0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var ll$=D(()=>{U8();B91();ry$();w91();BA0();Ca();N91();gu$();uu$();$c$();gt();G91();ww0();gZ1();Xc$();Yc$();Kc$();Hc$();Oc$();uZ1();wc$();cZ1();Ow0();Ml$();ul$()});function PN6($){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 AN6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},dl$=()=>{let $=new H1;return $.use("*",AN6),$.get("/",async(Z)=>{let X=b0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await nZ(Q,Y,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:PN6(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var ml$=D(()=>{U8();R$();KP0()});import{z as M1}from"zod";function EF($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function _N6($){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 vN6($,Z,X){try{return JSON.parse($)}catch{throw new nl$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function fN6($){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:vN6(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 bN6($){let Z=$.map((X)=>{let Q=X.function.parameters?dY(X.function.parameters):dY({type:"object",properties:{}});return[X.function.name,I$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function xN6($){if(!$)return;return{openai:{response_format:$}}}function yN6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function il$($,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 pl$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var TN6=256,RN6,IN6,qN6,MN6,kN6,VN6,SN6,CN6,nl$,tl$,ol$;var rl$=D(()=>{D4();U8();gu();jN();RN6=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),IN6=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),qN6=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(IN6).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),MN6=M1.object({type:M1.literal("text")}),kN6=M1.object({type:M1.literal("json_object")}),VN6=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()})}),SN6=M1.union([MN6,kN6,VN6]),CN6=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(qN6),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(RN6).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:SN6.optional(),user:M1.string().optional()});nl$=class nl$ extends Error{constructor($){super($);this.name="MessageConversionError"}};tl$=new H1;tl$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(EF("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(EF("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(EF("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=CN6.safeParse(Q);if(!Y.success){let w=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(EF(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let G=Y.data,J=_N6(G.model);if(!J)return $.json(EF("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:K}=J,{modelId:W}=J;if(!K){let E=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((j)=>$w(j.providerId));if(!E)return $.json(EF("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);K=E.id}let F;try{F=await Z.aiProviders.activate(K,Z.organization.id)}catch{return $.json(EF(`AI provider credential not found or inaccessible: ${K}`,"invalid_request_error","model"),404)}let H=F.aiSdk.languageModel(W),N=fN6(G.messages),U=G.tools?bN6(G.tools):void 0,B=xN6(G.response_format),O=yN6(),L=Math.floor(Date.now()/1000);if(G.stream)return hN($,async(w)=>{let E=il$(H,N,U,G,B,$.req.raw.signal);try{let j=BO(E),z=!1,A=0,P="",I=async()=>{if(P.length===0)return;let q=P;P="",await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{content:q},finish_reason:null}]})})};for await(let q of j.fullStream){if(!z&&(q.type==="text-delta"||q.type==="tool-call"))await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(q.type==="text-delta"){if(P+=q.text,P.length>=TN6)await I()}else if(q.type==="tool-call"){await I();let k=A++;await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{tool_calls:[{index:k,id:q.toolCallId,type:"function",function:{name:q.toolName,arguments:JSON.stringify(q.input)}}]},finish_reason:null}]})})}else if(q.type==="finish")await I(),await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{},finish_reason:pl$(q.finishReason)}],usage:q.totalUsage?{prompt_tokens:q.totalUsage.inputTokens??0,completion_tokens:q.totalUsage.outputTokens??0,total_tokens:q.totalUsage.totalTokens??0}:void 0})})}await I(),await w.writeSSE({data:"[DONE]"})}catch(j){let z=j;console.error("[openai-compat:stream] Error:",z.message),await w.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let w=il$(H,N,U,G,B,$.req.raw.signal),E=await NO(w),j={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)j.tool_calls=E.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),j.content=null;return $.json({id:O,object:"chat.completion",created:L,model:G.model,choices:[{index:0,message:j,finish_reason:pl$(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(EF("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(EF(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(EF(Y.message,"server_error"),500)}});ol$=tl$});function gN6($){if(typeof $!=="object"||$===null)return!1;let X=$.githubRepo?.url;return typeof X==="string"&&X.length>0}function al$(){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=o0(X);if(!Q)return Z.json({error:"Authentication required"},401);let G=(Z.req.query("site")??"").trim().toLowerCase();if(!tG(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(),K=[];for(let F of J){if(!F.slug||_Z(F))continue;let H=await X.storage.virtualMcps.list(F.id);for(let N of H){if(ds1(N)!==G)continue;if(!gN6(N.metadata))continue;K.push({orgSlug:F.slug,orgName:F.name??F.slug,project:{id:N.id,title:N.title,icon:N.icon??null}})}}let W={matches:K};return Z.json(W)}),$}var sl$=D(()=>{U8();rB()});var $d$;var el$=D(()=>{$d$={name:"decocms",version:"4.286.9",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","@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 cN6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??uN6}}var Zd$,uN6="https://ph.studio.decocms.com",Xd$;var Qd$=D(()=>{U8();x50();SC();$9();R$();r51();el$();Zd$=new H1;Zd$.get("/",($)=>{let Z={version:$d$.version,theme:Bi1(),...jH().logo&&{logo:jH().logo},...GN()&&{internalUrl:dC1()},...b0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!b0().firecrawlApiKey,auth:Gy$(),posthog:cN6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:zs()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});Xd$=Zd$});function pu($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function D71($){return(pu($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function Gd$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(pu($))}&sz=${Z}`}function Yd$($,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 Jd$($){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.`,K=Y?.trim()?Yd$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):Yd$(`How does ${X} really perform? ${J}`,200);return{title:G,description:K}}import{z as l0}from"zod";var Wv,lN6,dN6,mN6,iN6,Kd$;var Wd$=D(()=>{Wv=l0.enum(["good","bad","neutral"]),lN6=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:Wv.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 $})),dN6=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(lN6)),mN6={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()},iN6=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:Wv.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:Wv.optional()}),l0.object({template:l0.literal("stats"),stats:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),tone:Wv.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:Wv.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(dN6).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:Wv.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:Wv.optional()})).min(1)})]),Kd$=l0.object({...mN6,template:iN6})});function NT0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=Kd$.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 L71=D(()=>{Wd$()});import{join as Fd$}from"path";async function nN6($){try{let Z=await fetch(`${GW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(pN6)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=NT0(X);if(!Q.slides.length)return null;let Y=Q.slides.find((K)=>K.template.template==="cover"),G=Y?.template,J=G&&G.template==="cover"?G:void 0;return{brand:Q.meta.brand?.trim()||D71($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function OG($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function tN6($,Z){let X=pu($),Q=Z?.brand?.trim()||D71(X),Y=Gd$(X,128),J=`${(b0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:K,description:W}=Jd$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),F=`${J}/og.png`,H=`${Q} commerce report by decocms`;return[`<title>${OG(K)}</title>`,`<meta name="description" content="${OG(W)}" />`,'<meta name="robots" content="noindex, follow" />','<meta property="og:type" content="website" />','<meta property="og:site_name" content="decocms" />',`<meta property="og:title" content="${OG(K)}" />`,`<meta property="og:description" content="${OG(W)}" />`,`<meta property="og:url" content="${OG(J)}" />`,`<meta property="og:image" content="${OG(F)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${OG(H)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${OG(K)}" />`,`<meta name="twitter:description" content="${OG(W)}" />`,`<meta name="twitter:image" content="${OG(F)}" />`,`<meta name="twitter:image:alt" content="${OG(H)}" />`,`<link rel="canonical" href="${OG(J)}" />`,`<link rel="icon" href="${OG(Y)}" sizes="any" />`].join(`
2924
2924
  `)}function oN6($,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}
2925
2925
  </head>`)}function Hd$($){let Z=new H1;return Z.get("/:domain/og.png",async(X)=>{let Q=pu(X.req.param("domain")),Y=async()=>{let G=$?Bun.file(Fd$($,"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(`${GW({})}/api/v2/public/diagnostics/${encodeURIComponent(Q)}/og.png`,{signal:AbortSignal.timeout(rN6)}),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=$?Fd$($,"index.html"):null,G=Y?Bun.file(Y):null;if(!G||!await G.exists())return X.notFound();let J=await G.text();try{let K=await nN6(pu(Q)),W=tN6(Q,K);return X.html(oN6(J,W),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return X.html(J)}}),Z}var pN6=2500,rN6=1e4;var Nd$=D(()=>{U8();L71();YE();R$()});function Bs($,Z){return fetch(`${GW({})}${$}`,Z)}async function aN6($,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 Bs(`/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:K,drops:W}=NT0(J);return{status:K.slides.length?"ready":"empty",deck:K,scanned_at:J.scanned_at,drops:W}}var sN6,cN,Ud$=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},Bd$;var Od$=D(()=>{U8();hY();YE();L71();sN6=new Set(["complete","errored","terminated","unknown"]),cN=new H1;cN.use("*",async($,Z)=>{let X=await X8.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});cN.use("/link-token/*",Ud$);cN.use("/suggest",Ud$);cN.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 aN6(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)}});cN.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 Bs("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${QE({})}`},body:JSON.stringify({url:Q,...Y?{email:Y}:{},distinct_id:G})});if(!J.ok)return $.json({error:`run HTTP ${J.status}`},502);let K=await J.json(),W=K.blocked?{state:"blocked"}:K.status==="fresh"?{state:"fresh"}:K.mode==="sync"?{state:"sync"}:{state:"running",id:K.id??null};return $.json(W)}catch{return $.json({error:"run failed"},502)}});cN.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let X=await Bs(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${QE({})}`}});if(!X.ok)return $.json({error:`status HTTP ${X.status}`},502);let Y=(await X.json()).status??"unknown",G={done:sN6.has(Y),status:Y};return $.json(G)}catch{return $.json({error:"status failed"},502)}});cN.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let X=await Bs(`/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)}});cN.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let X=await Bs(`/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:[]})}});Bd$=cN});import{createHmac as eN6,timingSafeEqual as $U6}from"crypto";function Ld$($,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)>ZU6)return!1;let K=eN6("sha256",X).update(`${Y}.${$}`).digest("hex"),W=Buffer.from(K,"hex");return G.some((F)=>{let H=Buffer.from(F,"hex");return W.length===H.length&&$U6(W,H)})}function wd$($){let Z;try{Z=JSON.parse($)}catch{return null}let X=fJ(Z),Q=fJ(fJ(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 Ed$($){switch($){case"active":case"trialing":return"active";case"past_due":return"past_due";default:return"canceled"}}function jF($){return typeof $==="string"?$:void 0}function fJ($){return typeof $==="object"&&$!==null?$:void 0}function UT0($){return typeof $==="number"?new Date($*1000):null}function j71($){return jF($)??jF(fJ($)?.id)}function XU6($){return j71($.subscription)??jF(fJ(fJ($.parent)?.subscription_details)?.subscription)}function QU6($){let Z=UT0($.current_period_end);if(Z)return Z;let X=fJ($.items)?.data;if(!Array.isArray(X))return null;let Q=0;for(let Y of X){let G=fJ(Y)?.current_period_end;if(typeof G==="number"&&G>Q)Q=G}return Q>0?new Date(Q*1000):null}function w71($,Z){let X=UT0($.created);return!!X&&!!Z.lastStripeEventAt&&X<Z.lastStripeEventAt}function E71($,Z){let X=UT0($.created);if(!X)return;return Z.lastStripeEventAt&&Z.lastStripeEventAt>X?void 0:X}async function YU6($,Z){let X=Z.data.object;switch(Z.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":{let Q=jF(fJ(X.metadata)?.orgId);if(!Q)return{handled:!1,reason:"no orgId"};if(jF(fJ(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 K=Number(fJ(X.metadata)?.creditCents);if(!Number.isInteger(K)||K<=0)return console.error("stripe webhook: paid topup with bad metadata \u2014 credit NOT applied",{eventId:Z.id,organizationId:Q,creditCents:fJ(X.metadata)?.creditCents}),{handled:!1,reason:"bad topup metadata"};return{handled:!0,organizationId:Q,topUp:{creditCents:K,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=j71(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(w71(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Q,{stripeCustomerId:j71(X.customer),stripeSubscriptionId:G,status:"active",lastStripeEventAt:E71(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&&w71(Z,Y))return{handled:!1,reason:"stale event"};let J=G?"canceled":Ed$(X.status);return await $.updateStripeState(Y.organizationId,{status:J,currentPeriodEnd:QU6(X),...G&&{stripeSubscriptionId:null},lastStripeEventAt:E71(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}case"invoice.paid":{let Q=XU6(X);if(!Q)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(Q);if(!Y)return{handled:!1,reason:"unknown subscription"};if(w71(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Y.organizationId,{status:"active",currentPeriodEnd:UT0(X.period_end),lastStripeEventAt:E71(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}default:return{handled:!1,reason:`unhandled event ${Z.type}`}}}function GU6($,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:Ed$(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 Dd$($,Z){let X=GU6($,Z);if(!X)return;fY({event:X.name,organizationId:X.organizationId,...$.id?{uuid:Pn1(`stripe:${$.id}:${X.name}`)}:{},...$.created?{timestamp:new Date($.created*1000)}:{},properties:X.properties})}async function jd$($){let Z=new ZW(r8().db),X=await YU6(Z,$);if(!(X.handled&&X.topUp))Dd$($,X);if(X.handled&&X.topUp)await gE$({organizationId:X.organizationId,amountCents:X.topUp.creditCents,referenceId:X.topUp.referenceId}),Dd$($,X);if(!X.handled&&X.orphanSubscriptionId)try{await ue1(X.orphanSubscriptionId),console.error("stripe webhook: canceled orphan subscription",{subscriptionId:X.orphanSubscriptionId,eventId:$.id})}catch(Q){if(!(Q instanceof uY&&(Q.status===400||Q.status===404)))throw Q}return X}var ZU6=300;var zd$=D(()=>{lG();C4();D50();BE();C01()});var JU6=1048576,z71;var Pd$=D(()=>{U8();BF();R$();zd$();z71=new H1;z71.post("/webhook",p5({maxSize:JU6,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(!Ld$(X,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let Y=wd$(X);if(!Y)return $.json({error:"invalid payload"},400);let G=await jd$(Y);return console.log("stripe webhook",{eventId:Y.id,type:Y.type,livemode:Y.livemode,...G}),$.json({received:!0})})});import{timingSafeEqual as KU6}from"crypto";function FU6($,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 KU6(Buffer.from(Y),Buffer.from(Q))}var WU6=5242880,P71;var Ad$=D(()=>{U8();BF();u3();P71=new H1;P71.post("/webhook",p5({maxSize:WU6,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(!FU6(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 K=(await kn0())?.markTenantPoolsDirty(G,Y)??[];return $.json({ok:!0,pools:K})})});function Td$($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var Rd$,HU6,NU6,Id$;var qd$=D(()=>{U8();E3();Bg();ox();Rd$=new H1,HU6=["range","if-none-match","if-modified-since"],NU6=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];Rd$.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),X=Z.organization?.id;if(!Z.auth?.user?.id){if(ju($))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 Ft(Q,Z);if(!Y)throw new $$(503,{message:"Object storage not configured"});if(Y.startsWith("data:")&&pG()){let W=Y.match(/^data:([^;]+);base64,(.+)$/s);if(!W)throw new $$(500,{message:"Invalid data URL from storage"});let[,F,H]=W,N=Buffer.from(H,"base64"),U=new Headers({"Content-Type":F,"Cache-Control":"private, max-age=86400"});return Td$(U,F),new Response(N,{status:200,headers:U})}let G=new Headers;for(let W of HU6){let F=$.req.header(W);if(F)G.set(W,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 K=new Headers;for(let W of NU6){let F=J.headers.get(W);if(F)K.set(W,F)}return K.set("Cache-Control","private, max-age=86400"),Td$(K,K.get("content-type")??""),new Response(J.body,{status:J.status,headers:K})});Id$=Rd$});var Os=_((Fv)=>{var UU6=Fv&&Fv.__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]}),BU6=Fv&&Fv.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))UU6(Z,$,X)};Object.defineProperty(Fv,"__esModule",{value:!0});BU6(jY(),Fv)});var Vd$=_((Md$)=>{Object.defineProperty(Md$,"__esModule",{value:!0});Md$.version=void 0;Md$.version="3.4.0"});var _d$=_((zF)=>{var OU6=zF&&zF.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(zF,"__esModule",{value:!0});zF.NodeTransport=zF.VERSION=void 0;zF.nodeResolveHost=zU6;var s6=Os(),DU6=j0("net"),A71=j0("tls"),LU6=j0("path"),Sd$=j0("fs"),wU6=OU6(j0("dns")),EU6=Vd$();zF.VERSION=EU6.version;var jU6="nats.js";class Cd${socket;version;lang;yields=[];signal=(0,s6.deferred)();closedNotification=(0,s6.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=jU6,this.version=zF.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,s6.checkOptions)(Y,Z);let{tls_required:G,tls_available:J}=Y,K=J===!0&&Z.tls!==null;if(!Q&&(G||K))this.socket=await this.startTLS();if(this.done)this.socket?.destroy();if(G&&this.socket.encrypted!==!0)throw s6.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 s6.errors.ConnectionError("error connecting - node provided an undefined error");let{code:J}=G,K=J==="ECONNREFUSED"?new s6.errors.ConnectionError("connection refused",{cause:G}):G;throw this.socket?.destroy(),K}}dial($){let Z=(0,s6.deferred)(),X,Q=(0,DU6.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,s6.deferred)(),Z;return this.socket.on("data",(X)=>{this.yields.push(X);let Q=s6.DataBuffer.concat(...this.yields),Y=(0,s6.extractProtocolMessage)(Q);if(Y!=="")try{let G=s6.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,s6.deferred)();try{if($=(0,LU6.resolve)($),!(0,Sd$.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,Sd$.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 K=await this.loadFile(Z);if(K)$.cert=K}else if(X)$.cert=X;if(G){let K=await this.loadFile(G);if(K)$.key=K}else if(J)$.key=J;if(Q){let K=await this.loadFile(Q);if(K)$.ca=[K]}else if(Y)$.ca=Y;return Promise.resolve($)}catch(K){return Promise.reject(K)}}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,s6.extend)(X,this.options.tls,Y)}catch(Y){return Promise.reject(new s6.errors.ConnectionError(Y.message,{cause:Y}))}let Q=(0,s6.deferred)();try{let Y=(0,A71.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 s6.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,s6.extend)(Z,this.options.tls,Q)}catch(Q){return Promise.reject(new s6.errors.ConnectionError(Q.message,{cause:Q}))}let X=(0,s6.deferred)();try{let Q=(0,A71.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 s6.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,s6.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,s6.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 A71.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,s6.render)($)}`);let Z=(0,s6.deferred)();try{this.socket.write($,(X)=>{if(X){if(this.options.debug)console.error(`!!! ${(0,s6.render)($)}: ${X}`);return Z.reject(X)}return Z.resolve()})}catch(X){if(this.options.debug)console.error(`!!! ${(0,s6.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}}zF.NodeTransport=Cd$;function zU6($){let Z=(0,s6.deferred)();return wU6.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 yd$=_((xd$)=>{Object.defineProperty(xd$,"__esModule",{value:!0});xd$.connect=PU6;var vd$=_d$(),fd$=Os(),bd$=Os();function PU6($={}){if((0,bd$.hasWsProtocol)($))return Promise.reject(bd$.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,fd$.setTransportFactory)({factory:()=>{return new vd$.NodeTransport},dnsResolveFn:vd$.nodeResolveHost}),fd$.NatsConnectionImpl.connect($)}});var gd$=_((lN)=>{var TU6=lN&&lN.__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]}),RU6=lN&&lN.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))TU6(Z,$,X)};Object.defineProperty(lN,"__esModule",{value:!0});lN.connect=void 0;var IU6=yd$();Object.defineProperty(lN,"connect",{enumerable:!0,get:function(){return IU6.connect}});RU6(Os(),lN)});function ld$($){let Z=$?.connectFn??VU6,X=null,Q=null,Y=!1,G=!1,J=!1,K=[];function W(){return X!==null&&!X.isClosed()&&!X.isDraining()&&!J}function F(){console.log(`[NatsProvider] fireReady: ${K.length} callbacks`);for(let U of K)try{U()}catch{}}function H(U){(async()=>{for await(let B of U.status())if(B.type==="disconnect")console.log("[NatsProvider] Disconnected"),J=!0;else if(B.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),J=!1,Q=null,F()})().catch(()=>{})}async function N(U,B){let O=0;while(!G)try{X=await Z({servers:U,timeout:kU6,reconnect:!0,maxReconnectAttempts:-1,...B?{authenticator:B}:{}}),console.log(`[NatsProvider] Connected to ${X.getServer()} after ${O} attempt(s)`),Q=null,J=!1,H(X),F();return}catch{O++;let L=aZ(MU6,qU6,O-1,2,0.5);await L$(L)}}return{init(U,B){if(Y)return;Y=!0,G=!1;let O=B?.creds?hd$.credsAuthenticator(new TextEncoder().encode(B.creds)):void 0;N(U,O).catch(()=>{})},isConnected(){return W()},getConnection(){return W()?X:null},getJetStream(){if(!W())return null;if(!Q)Q=cd$.jetstream(X);return Q},onReady(U){if(K.push(U),W())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 VU6($){return ud$.connect($)}var hd$,ud$,cd$,qU6=100,MU6=3000,kU6=3000;var dd$=D(()=>{K4();hd$=V(wc(),1),ud$=V(gd$(),1),cd$=V(KL(),1)});function T71($,Z){return`${$}.${Z}`}class R71{cache;constructor($){this.cache=$u({ttlMs:$?.ttlMs??SU6,maxSize:$?.maxSize??CU6})}async get($,Z){return this.cache.get(T71($,Z))??null}async set($,Z,X){this.cache.set(T71($,Z),X)}async invalidate($,Z){this.cache.delete(T71($,Z))}teardown(){this.cache.clear()}}var SU6=600000,CU6=5000;var md$=()=>{};function BT0($,Z){return`${$}:${Z}`}function I71($){let Z=$u({ttlMs:$?.ttlMs??_U6,maxSize:$?.maxSize??vU6}),X=$?.getConnection,Q=crypto.randomUUID(),Y=new TextEncoder,G=new TextDecoder,J=null;function K(W,F){let H=X?.();if(!H)return;try{H.publish(id$,Y.encode(JSON.stringify({organizationId:W,keyId:F,originId:Q})))}catch(N){console.warn("[ProviderKeyCache] Publish failed (non-critical):",N)}}return{get(W,F){return Z.get(BT0(W,F))},set(W,F,H){Z.set(BT0(W,F),H)},invalidate(W,F){Z.delete(BT0(W,F)),K(W,F)},start(){if(J)return;let W=X?.();if(!W)return;J=W.subscribe(id$),(async()=>{for await(let F of J)try{let H=JSON.parse(G.decode(F.data));if(H.originId===Q)continue;Z.delete(BT0(H.organizationId,H.keyId))}catch{}})().catch(console.error)},teardown(){J?.unsubscribe(),J=null,Z.clear()}}}var id$="studio.ai-provider-keys.invalidate",_U6=30000,vU6=5000;var pd$=()=>{};class q71{options;subscription=null;onCancel=null;encoder=new TextEncoder;originId=crypto.randomUUID();constructor($){this.options=$}async start($){if($)this.onCancel=$;if(this.subscription)return;if(!this.onCancel)return;let Z=this.options.getConnection();if(!Z)return;let X=new TextDecoder,Q=Z.subscribe("studio.decopilot.cancel");this.subscription=Q,(async()=>{for await(let Y of Q)try{let G=JSON.parse(X.decode(Y.data));if(G.originId===this.originId)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}));Z.publish("studio.decopilot.cancel",X)}catch(Z){console.warn("[NatsCancelBroadcast] Publish failed (non-critical):",Z)}}async stop(){this.subscription?.unsubscribe(),this.subscription=null,this.onCancel=null}}var nd$=($)=>{let Z;return()=>Z??=$()},M71,k71;var td$=D(()=>{I6();M71=nd$(()=>w$.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),k71=nd$(()=>w$.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function uU6($=OT0){return{name:FN,subjects:[`${or0}.>`],storage:DK.StorageType.File,max_age:xU6,max_bytes:gU6,max_msgs_per_subject:hU6,discard:DK.DiscardPolicy.Old,retention:DK.RetentionPolicy.Limits,duplicate_window:yU6,num_replicas:$}}class ad${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 od$($){let Z=rd$.headers();for(let[X,Q]of Object.entries($))Z.set(X,Q);return Z}function mU6($,Z){let X=0;return{publish(Q,Y,G,J){Q.publish(Y,G,J?{headers:J}:void 0).catch((K)=>{if(X++,bU6().add(1,{"org.id":Z??"unknown"}),X===1||X%100===0)console.warn(`[Decopilot] JetStream publish failed for thread ${$} (${X} total):`,K)})},get errorCount(){return X}}}function iU6($){if(!($ instanceof Error))return!1;if(/non-clustered/i.test($.message))return!0;return/replicas?\b/i.test($.message)&&/not supported|can ?not|exceed|insufficient|greater than/i.test($.message)}class V71{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=async(Q,Y)=>{let G=uU6(Y);try{await Q.streams.info(FN),await Q.streams.update(FN,G)}catch(J){if(J instanceof Error&&J.message.includes("stream not found"))await Q.streams.add(G);else if(J instanceof Error&&/can ?not change.*storage|storage type/i.test(J.message))await Q.streams.delete(FN),await Q.streams.add(G);else throw J}},X=await y6(async()=>{let Q=this.options.getJetStreamManager?await this.options.getJetStreamManager():await DK.jetstreamManager($);try{await Z(Q,OT0)}catch(Y){if(OT0<=1||!iU6(Y))throw Y;console.warn(`[Decopilot] StreamBuffer: NATS rejected num_replicas=${OT0} (${Y.message}); falling back to an unreplicated stream`),await Z(Q,1)}return Q},{maxAttempts:5,minTimeout:250,maxTimeout:4000,jitter:0.5,isRetriable:Rg});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=mU6(Z,Q),J=!1,K=()=>{if(J)return;J=!0;let F=VB$(Z);Y.publish(F.subject,F.data).catch(()=>{})};X.addEventListener("abort",K,{once:!0});let W=(F)=>{let H=performance.now(),N=ar0(F,{runId:Z}),U=performance.now()-H;M71().record(U),k71().add(1,{"org.id":Q??"unknown"}),dU6?.record(U,N.reduce((B,O)=>B+O.data.length,0));for(let B of N)G.publish(Y,B.subject,B.data,B.headers?od$(B.headers):void 0)};return(async()=>{let F=$.getReader(),H=0,N=0,U;try{while(!0){let{done:B,value:O}=await F.read();if(B)break;if(W(O),N++,++H>=64)H=0,await new Promise((L)=>setImmediate(L))}}catch(B){U=B,console.warn(`[Decopilot] stream pump error for thread ${Z}:`,B?.message??B)}finally{if(F.releaseLock(),K(),lU6)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 publishSerialized($,Z){try{return await y6(()=>$.publish(Z.subject,Z.data,{...Z.headers?{headers:od$(Z.headers)}:{},...Z.msgId?{msgID:Z.msgId}:{}}),{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:Rg}),!0}catch(X){return console.error(`[Decopilot] publish failed after retries subject=${Z.subject}`,X),!1}}async publishRawChunk($,Z,X){let Q=this.js;if(!Q)return!1;let Y=performance.now(),G=ar0(Z,{runId:$,dedup:X});M71().record(performance.now()-Y),k71().add(1);for(let J of G)if(!await this.publishSerialized(Q,J))return!1;return!0}async publishDone($,Z,X){let Q=this.js;if(!Q)return!1;let Y=kB$({runId:$,fenceToken:Z,finalSeq:X});return await this.publishSerialized(Q,Y)}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"?DK.DeliverPolicy.New:DK.DeliverPolicy.All,G=X?.closeOnDone??!1,J=aO($),K;try{K=await y6(async()=>{return(await Q.consumers.get(FN,{filter_subjects:J,deliver_policy:Y})).consume()},{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:Rg})}catch(L){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",L?.message??L),null}let H=nL0({messages:async function*(){try{for await(let L of K)yield{subject:L.subject,data:L.data,headers:L.headers}}finally{K.stop()}}(),onCancel:()=>K.stop()}).pipeThrough(dL0()).pipeThrough(mL0()).getReader(),N=!1,U=()=>{if(N)return;N=!0;try{H.releaseLock()}catch{}},B=!1,O=()=>{if(B)return;B=!0,K.stop(),H.cancel().catch(()=>{}),U()};return Z?.addEventListener("abort",O,{once:!0}),new ReadableStream({async pull(L){for(;;){let{done:w,value:E}=await H.read();if(w){O(),L.close();return}let j=E;if(j.kind==="done"){if(G){O(),L.close();return}continue}L.enqueue(j.chunk);return}},cancel(){O()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge(FN,{filter:aO($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var DK,rd$,fU6=($)=>{let Z;return()=>Z??=$()},bU6,xU6=86400000000000,yU6=120000000000,gU6=4294967296,OT0,hU6=500000,cU6,lU6,dU6;var sd$=D(()=>{K4();sr0();tL0();iL0();I6();td$();DK=V(KL(),1),rd$=V(wc(),1),bU6=fU6(()=>w$.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"})),OT0=Math.max(1,Number(process.env.DECOPILOT_STREAM_REPLICAS??3)||3);cU6=process.env.STREAM_ENCODE_TRACE==="1",lU6=process.env.DECOPILOT_STREAM_TRACE==="1";dU6=cU6?new ad$:null});function DT0($,Z,X,Q){if(!Q)return!1;return $.emit(Z,gK(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 ed$=D(()=>{_8()});class S71{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 $m$($,Z,X){let Q=Z.organizationId;if(Z.status!=="in_review")return!1;if(!qC(X))return!1;if(await $.storage.taskBoard.hasHumanRejectedDone(Z.id,Q))return!1;let Y=await $.storage.organizationSettings.get(Q),G=OW(Y?.flags),J=await $.storage.taskBoard.update(Z.id,Q,{status:G},Z.updatedBy);return await z6($,{taskBoardItemId:Z.id,action:"status_changed",actorId:null,data:{from:Z.status,to:G,reason:"pr_merged"}}),u$(Q,J),console.log(`[task-board-review-sweeper] ${Z.id}: linked PR already merged \u2014 moved to ${G}`),!0}var Zm$=D(()=>{m6();KX();Hg();E5()});function sU6($){return $ instanceof nX}function eU6($,Z){return Z-$>=rU6}class C71{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??pU6;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??tU6,X=this.options.itemIntervalMs??nU6,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:K}of Y)try{if(await this.reconcileItem(J,K,Q))$++}catch(W){console.error(`[task-board-review-sweeper] ${J} failed`,W)}await this.reapNeverStartedThreads(Z),$+=await this.dispatchDueRetries(Z),await this.reactToUnhandledFailures(Z)}catch(Z){console.error("[task-board-review-sweeper] sweep failed",Z)}finally{this.running=!1}return $}async reapNeverStartedThreads($){try{let Z=await this.taskBoard.failNeverStartedLinkedThreads($,new Date(Date.now()-Lt0),Do0);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()-aU6));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 Bo0(this.taskBoard,Y,Q),await Oo0(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!==Y8)continue;let K=await this.contextFactory(Y,J.assignedBy??J.createdBy);if(!K)continue;await QN(K,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),sU6(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()+oU6)).catch((K)=>console.error(`[task-board-review-sweeper] re-arming ${Q} failed`,K))}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(()=>{}),u$(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(!eU6(CH(X),Date.now()))return;await bW($,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===Y8,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 K=await Promise.all(G.map(async(W)=>({...W,...await Ug(Z,W)})));if(K.every((W)=>W.state===null))console.warn(`[task-board-review-sweeper] ${$}: no live PR state from GitHub (${K.length} PR(s)) \u2014 proceeding on unknown`);if(await $m$(J,Q,K))return!0;if(await DO$(J,Q))return!0;if(!Y)return!1;if(!fo0(K))return!1;return await GL0(J,Q,{previewMatchesHead:bo0(K)}),!0}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}var pU6=60000,nU6=300000,tU6=50,oU6=60000,rU6=900000,aU6=120000;var Xm$=D(()=>{m6();Io0();ZN();St();Zm$();E5();rG();Lo0();eY();Gt()});import{readdir as $B6,rm as LT0}from"fs/promises";import{join as wT0}from"path";async function ET0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-ZB6),Z.setUTCHours(0,0,0,0);let X=0;try{let Q=await Hv($);for(let Y of Q)if(/^\d{4}$/.test(Y))X+=await Qm$($,Y,Z);else if(!Y.startsWith(".")){let G=wT0($,Y),J=await Hv(G);for(let W of J){if(!/^\d{4}$/.test(W))continue;X+=await Qm$(G,W,Z)}if((await Hv(G)).length===0)await LT0(G,{recursive:!0,force:!0})}}catch(Q){console.warn("monitoring retention cleanup failed:",Q)}return X}async function Qm$($,Z,X){let Q=0,Y=wT0($,Z),G=await Hv(Y);for(let K of G){if(!/^\d{2}$/.test(K))continue;let W=wT0(Y,K),F=await Hv(W);for(let N of F){if(!/^\d{2}$/.test(N))continue;let U=new Date(`${Z}-${K}-${N}T00:00:00Z`);if(isNaN(U.getTime()))continue;if(U<X){let B=wT0(W,N);await LT0(B,{recursive:!0,force:!0}),Q++}}if((await Hv(W)).length===0)await LT0(W,{recursive:!0,force:!0})}if((await Hv(Y)).length===0)await LT0(Y,{recursive:!0,force:!0});return Q}async function Hv($){try{return(await $B6($)).filter((X)=>!X.startsWith("."))}catch{return[]}}var ZB6=30;var _71=()=>{};import{DBOS as v71,SchedulerMode as XB6}from"@dbos-inc/dbos-sdk";async function YB6(){let $=[xJ(),Nv(),RF()],Z=0;for(let X of $)try{Z+=await ET0(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 GB6($,Z){await v71.runStep(()=>YB6(),{name:"monitoringRetention"})}function Gm$(){if(Ym$)return;Ym$=!0;let $=v71.registerWorkflow(GB6,{name:"monitoringRetentionWorkflow"});v71.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:QB6,mode:XB6.ExactlyOncePerIntervalWhenActive})}var QB6="23 4 * * *",Ym$=!1;var Jm$=D(()=>{DY();_71()});function Km$($){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 FJ.create();Y.auth.user={id:X,role:Q.role},Y.organization={id:Q.orgId,slug:Q.orgSlug,name:Q.orgName};let G=await Bt($.db,Z,Q.role);return Y.boundAuth=v51({auth:Y.authInstance,headers:new Headers,role:Q.role,permissions:G,userId:X}),Y.access=new cw(X,void 0,Y.boundAuth,Q.role,"self"),cO(Y,{id:Q.orgId,slug:Q.orgSlug}),Y}}var Wm$=D(()=>{lw();lO()});function JB6(){return[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}]}function KB6(){return{services:JB6(),migrationsStatus:"pending",serverUrl:null,logs:[]}}function FB6(){for(let $ of WB6)$()}function Fm$($){let Z=[...f71.logs,$];f71={...f71,logs:Z.length>500?Z.slice(-500):Z},FB6()}function b71(){return HB6}var f71,WB6,HB6=!1;var x71=D(()=>{f71=KB6(),WB6=new Set});import{EventEmitter as NB6}from"events";var y71;var Hm$=D(()=>{x71();y71=new NB6;y71.on("request",($)=>{Fm$($)})});function Nm$(){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 B=nu(U.params.name),O=U.params.arguments||{},L=Object.keys(O).map((E)=>nu(E)),w=L.length>0?L.slice(0,3).join(",")+(L.length>3?"\u2026":""):"";G=`${J5.tool}${B}${J5.dim}(${w})${J5.reset}`}else if(U.method)G=`${J5.dim}${nu(U.method)}${J5.reset}`}}catch{}}let K=nu(Y);if(Y.startsWith("/mcp/conn_")){let H=Y.split("/")[2]??"";K=`/mcp/${J5.mcp}${nu(H.slice(0,12))}\u2026${J5.reset}`}else if(Y==="/mcp")K=`${J5.mcp}/mcp${J5.reset}`;else if(Y==="/mcp/registry")K=`${J5.mcp}/mcp/registry${J5.reset}`;let W=BB6(Q),F=J?"\u25C0":"\u2190";if(!b71())console.log(`${J5.dim}${F}${J5.reset} ${W}${Q}${J5.reset} ${K}${G?` ${G}`:""}`);try{await Z()}finally{let H=Date.now()-X,N=$.res.status,U=UB6(N),B=H<1000?`${H}ms`:`${(H/1000).toFixed(1)}s`,O=J?"\u25B6":"\u2192";if(!b71())console.log(`${J5.dim}${O}${J5.reset} ${W}${Q}${J5.reset} ${K}${G?` ${G}`:""} ${U}${N}${J5.reset} ${J5.duration}${B}${J5.reset}`);y71.emit("request",{method:Q,path:nu(Y),status:N,duration:H,timestamp:new Date})}}}var J5,UB6=($)=>{if($>=500)return J5.serverError;if($>=400)return J5.clientError;if($>=300)return J5.redirect;return J5.ok},BB6=($)=>{return J5[$]||J5.reset},nu=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var Um$=D(()=>{x71();Hm$();J5={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 Lm$}from"crypto";import{mkdir as OB6,readdir as DB6,rm as Bm$,stat as wm$}from"fs/promises";import{join as h71,relative as LB6}from"path";import{z as P$}from"zod";function jm$($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return h71(wB6,Z)}function zm$($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function g71($,Z){let X=jm$($),Q=zm$(Z);return h71(X,Q)}function EB6($,Z,X,Q){let Y=b0().encryptionKey||"dev-secret",G=`${$}:${Z}:${X}:${Q}`;return Lm$("sha256",Y).update(G).digest("hex")}function Dm$($,Z,X,Q,Y){let G=Math.floor(Date.now()/1000)+Q,J=EB6(Z,X,G,Y),K=new URL(`/api/dev-assets/${Z}/${zm$(X)}`,$);return K.searchParams.set("expires",G.toString()),K.searchParams.set("signature",J),K.searchParams.set("method",Y),K.toString()}function Pm$($,Z,X){let Q=`${$}:${Z.getTime()}:${X}`;return`"${Lm$("md5","etag").update(Q).digest("hex")}"`}async function Am$($,Z,X,Q,Y){try{let G=await DB6($,{withFileTypes:!0});for(let J of G){let K=h71($,J.name),F=LB6(Z,K).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 Am$(K,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 wm$(K);Y.objects.push({key:F,size:H.size,lastModified:H.mtime.toISOString(),etag:Pm$(K,H.mtime,H.size)})}catch{}}}}catch{}}function Tm$($,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||"",K=G.maxKeys??1000,W=G.delimiter,F=G.continuationToken,H=jm$(Q);await OB6(H,{recursive:!0});let N={objects:[],commonPrefixes:new Set};await Am$(H,H,J,W,N),N.objects.sort((w,E)=>w.key.localeCompare(E.key));let U=0;if(F){if(U=N.objects.findIndex((w)=>w.key>F),U===-1)U=N.objects.length}let B=N.objects.slice(U,U+K),O=U+K<N.objects.length,L=O?B[B.length-1]?.key:void 0;return{objects:B,isTruncated:O,nextContinuationToken:L,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=g71(Q,G.key),K=await wm$(J);return{contentType:j91(G.key),contentLength:K.size,lastModified:K.mtime.toISOString(),etag:Pm$(J,K.mtime,K.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??Om$;return{url:Dm$(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??Om$;return{url:Dm$(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=g71(Q,G.key);try{return await Bm$(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=[],K=[];return await Promise.all(G.keys.map(async(W)=>{let F=g71(Q,W);try{await Bm$(F),J.push(W)}catch(H){K.push({key:W,message:H instanceof Error?H.message:"Unknown error"})}})),{deleted:J,errors:K}}}]}async function u71($,Z,X){let Q=Tm$(Z,X),Y=new iK({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:N5});for(let J of Q){let K="shape"in J.inputSchema?J.inputSchema.shape:P$.object({}).shape,W=J.outputSchema&&"shape"in J.outputSchema?J.outputSchema.shape:P$.object({}).shape;Y.registerTool(J.name,{description:J.description??"",inputSchema:K,outputSchema:W,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 YQ({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await Y.connect(G),EJ(Y,G,$,"mcp:dev-assets")}async function Rm$($,Z,X,Q){let G=Tm$(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 wB6="./data/assets",Om$=3600,Em$,Im$;var qm$=D(()=>{R$();Sg();U8();ud();tC();gX();BA0();Em$=new H1;Em$.all("/",async($)=>{let Z=$.get("studioContext"),X=new URL($.req.url),Q=`${X.protocol}//${X.host}`;return u71($.req.raw,Z,Q)});Im$=Em$});var Mm$={};J4(Mm$,{mountDevRoutes:()=>jB6});function jB6($,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 u71(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}`,K=Q.req.param("toolName");if(!K)return Q.json({error:"Missing tool name"},400);let W=await Q.req.json(),F=await Rm$(K,W,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",Im$);let X=new H1;X.use("*",BK({mountPath:"/api/dev-assets"})),X.route("/",UA0({orgFromPath:!1})),$.route("/api/dev-assets",X)}var km$=D(()=>{U8();U91();BA0();qm$()});import{sql as zB6}from"kysely";import{randomUUID as Vm$}from"crypto";import{z as PB6}from"zod";async function TB6($){let Z=new Date().toISOString(),X=Vm$(),Q=C8.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((K)=>K.or([K("publisher","is",null),K("publisher","=",Q)])).execute();if(J.length>0)await $.db.insertInto("event_deliveries").values(J.map((K)=>({id:Vm$(),event_id:X,subscription_id:K.id,status:"pending",attempts:0,last_error:null,delivered_at:null,next_retry_at:null,created_at:Z}))).execute();try{await zB6`SELECT
2926
2926
  pg_notify('studio_events', ${X}),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "decocms",
3
- "version": "4.286.8",
3
+ "version": "4.286.9",
4
4
  "description": "Deco CMS — Self-hostable MCP Gateway for managing AI connections and tools",
5
5
  "author": "Deco team",
6
6
  "repository": {