decocms 4.430.1 → 4.430.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (401) hide show
  1. package/dist/client/assets/{AlertCircle-BUkWQfB_.js → AlertCircle-CVYthSXp.js} +1 -1
  2. package/dist/client/assets/{AreaChart-DNVY-5xH.js → AreaChart-qNgHWHyJ.js} +1 -1
  3. package/dist/client/assets/{ArrowLeft-C_Aui1-t.js → ArrowLeft-CyFyBJmn.js} +1 -1
  4. package/dist/client/assets/{ArrowUp-dUCC1h4R.js → ArrowUp-CeSPU7QT.js} +1 -1
  5. package/dist/client/assets/{CartesianChart-BJS29ety.js → CartesianChart-B5tlzKMt.js} +1 -1
  6. package/dist/client/assets/{Check-D53o53z1.js → Check-DN3fVKj8.js} +1 -1
  7. package/dist/client/assets/{CheckCircle-CiGc92II.js → CheckCircle-BsdvfhEK.js} +1 -1
  8. package/dist/client/assets/{ChevronUp-C0R59WlW.js → ChevronUp-xWbDxNSk.js} +1 -1
  9. package/dist/client/assets/{Copy01-Bc_ajdkn.js → Copy01-Dv7sipLd.js} +1 -1
  10. package/dist/client/assets/{CreditCard01-kOAv1J_D.js → CreditCard01-Dk07lq-0.js} +1 -1
  11. package/dist/client/assets/{DotsVertical-COvSpfVi.js → DotsVertical-DhmK4qgN.js} +1 -1
  12. package/dist/client/assets/{ErrorBarContext-DT3_OZEr.js → ErrorBarContext-gSfovbHF.js} +1 -1
  13. package/dist/client/assets/{Image01-BOx8LVbG.js → Image01-Y9Scw-o_.js} +1 -1
  14. package/dist/client/assets/{Key01-CmosOv0s.js → Key01-CtWEwt_r.js} +1 -1
  15. package/dist/client/assets/{Line-CComtnBD.js → Line-DBvwF3QX.js} +1 -1
  16. package/dist/client/assets/{Link01-B-BcpSea.js → Link01-CsZgPYpl.js} +1 -1
  17. package/dist/client/assets/LinkBroken01-DGoMMKbF.js +1 -0
  18. package/dist/client/assets/{LinkExternal01-BOhmrkdK.js → LinkExternal01-B-WvSbZy.js} +1 -1
  19. package/dist/client/assets/{Monitor01-CqmqvaJt.js → Monitor01-kmeIS50B.js} +1 -1
  20. package/dist/client/assets/{Palette-Dn80uz2_.js → Palette-CmpIZcQI.js} +1 -1
  21. package/dist/client/assets/{Plus-B0T7sCOu.js → Plus-CGgnB9yV.js} +1 -1
  22. package/dist/client/assets/{SearchMd-BjiZq5Ss.js → SearchMd-B7WxOr73.js} +1 -1
  23. package/dist/client/assets/{Sector-WjC96jsi.js → Sector-CEcu8yPs.js} +1 -1
  24. package/dist/client/assets/{ShoppingBag01-mLNM1PWh.js → ShoppingBag01-BG3AWGBS.js} +1 -1
  25. package/dist/client/assets/{Sun--68QpCgd.js → Sun-Be_v4SgI.js} +1 -1
  26. package/dist/client/assets/{Tool01-UwOdqleo.js → Tool01-U6VAdTvK.js} +1 -1
  27. package/dist/client/assets/{Trash01-CzavZmmt.js → Trash01-d2ldPDpp.js} +1 -1
  28. package/dist/client/assets/{Upload01-BWIuH341.js → Upload01-vuUJE-Un.js} +1 -1
  29. package/dist/client/assets/{User01-CUsG_6c_.js → User01-DrdqUOnb.js} +1 -1
  30. package/dist/client/assets/{UserSquare-BMQF7dC1.js → UserSquare-zqtxIeMd.js} +1 -1
  31. package/dist/client/assets/{Users01-Bbfu9MdC.js → Users01-BSNk1mAx.js} +1 -1
  32. package/dist/client/assets/{X-CtohJRXR.js → X-MCJw_lkE.js} +1 -1
  33. package/dist/client/assets/{XAxis-Depi7ZOt.js → XAxis-CUk_D47K.js} +1 -1
  34. package/dist/client/assets/{XClose-Bg9Zp2j0.js → XClose-DJWS3DCR.js} +1 -1
  35. package/dist/client/assets/{ZoomOut-C_zus5H2.js → ZoomOut-DxgRaJHf.js} +1 -1
  36. package/dist/client/assets/{access-gate-BSw0CcmD.js → access-gate-buHLOhRt.js} +1 -1
  37. package/dist/client/assets/add-connection-dialog-b2gPK4A2.js +1 -0
  38. package/dist/client/assets/agent-analytics-CkHKK2sI.js +2 -0
  39. package/dist/client/assets/agent-app-xUbOx1nA.js +1 -0
  40. package/dist/client/assets/agent-assets-BLWW7tSV.js +1 -0
  41. package/dist/client/assets/{agent-automation-CWPvYNFY.js → agent-automation-C585Dco7.js} +2 -2
  42. package/dist/client/assets/agent-automations-DipmSooi.js +1 -0
  43. package/dist/client/assets/agent-connect-sources-Cg-rDHA_.js +1 -0
  44. package/dist/client/assets/agent-deck-BOFjOn39.js +1 -0
  45. package/dist/client/assets/agent-e2e-BF3tKvyc.js +1 -0
  46. package/dist/client/assets/agent-experiments-fsdGMiOY.js +1 -0
  47. package/dist/client/assets/agent-file-BbcJd6HM.js +1 -0
  48. package/dist/client/assets/{agent-git-C1jtwOs1.js → agent-git-vy54BjiV.js} +2 -2
  49. package/dist/client/assets/agent-hosting-Bnd-xqY4.js +1 -0
  50. package/dist/client/assets/agent-icon-DQhX6pyL.js +1 -0
  51. package/dist/client/assets/agent-library-CoQDyojP.js +1 -0
  52. package/dist/client/assets/agent-library-file-Bp-seD91.js +1 -0
  53. package/dist/client/assets/agent-monitor-DIqqvckJ.js +1 -0
  54. package/dist/client/assets/agent-overview-DIPsKuHn.js +1 -0
  55. package/dist/client/assets/agent-settings-CuSkQv6E.js +1 -0
  56. package/dist/client/assets/{agent-site-editor-DQ9aUQOK.js → agent-site-editor-C_9Sp-ko.js} +2 -2
  57. package/dist/client/assets/agent-site-editor-code-BWwVQZ5b.js +2 -0
  58. package/dist/client/assets/{agent-site-editor-content-D62zi8Ka.js → agent-site-editor-content-BIULxMT9.js} +3 -3
  59. package/dist/client/assets/{agent-site-editor-preview-BFe9L8ZC.js → agent-site-editor-preview-CA1JSDGo.js} +3 -3
  60. package/dist/client/assets/agent-view-bJuK5JMH.js +1 -0
  61. package/dist/client/assets/{agent-view-guard-DvkFRuT1.js → agent-view-guard-CRvRYAMg.js} +1 -1
  62. package/dist/client/assets/agents-list-BguEBZWs.js +1 -0
  63. package/dist/client/assets/{ai-providers-BKaAhkKr.js → ai-providers-DQfBdh-5.js} +1 -1
  64. package/dist/client/assets/{alert-hHCCxPrm.js → alert-BxbrJMD6.js} +1 -1
  65. package/dist/client/assets/{alert-dialog-DPE6kDht.js → alert-dialog-BYJnmaQz.js} +1 -1
  66. package/dist/client/assets/{analytics-sections-BaLMxjIR.js → analytics-sections-BupuHkrr.js} +1 -1
  67. package/dist/client/assets/{api-keys-Cs2lX4sa.js → api-keys-9ma74-9W.js} +1 -1
  68. package/dist/client/assets/api-keys-CgI6_AMK.js +1 -0
  69. package/dist/client/assets/app-editor-Cw0XiLbp.js +1 -0
  70. package/dist/client/assets/{asset-utils-6K_UaEMl.js → asset-utils-Qk5h-wqe.js} +1 -1
  71. package/dist/client/assets/{auth-yZ0dbxiQ.js → auth-BA3Q_TJo.js} +1 -1
  72. package/dist/client/assets/{auth-catchall-C2FsnDrX.js → auth-catchall-knLcWJNd.js} +1 -1
  73. package/dist/client/assets/{auth-entry-BVb_LGQt.js → auth-entry-DJOJ8Rs7.js} +1 -1
  74. package/dist/client/assets/{auth-split-layout-DCczOAkV.js → auth-split-layout-Dt6Lr3jy.js} +1 -1
  75. package/dist/client/assets/{authenticate-and-persist-oauth-DSfbaJXn.js → authenticate-and-persist-oauth-BTuznNbi.js} +1 -1
  76. package/dist/client/assets/{automation-list-row-BX95wnlk.js → automation-list-row-DGBpkMxN.js} +1 -1
  77. package/dist/client/assets/{automation-runs-rMXYly96.js → automation-runs-CgYsY8Ss.js} +1 -1
  78. package/dist/client/assets/automations-CB7gLMbz.js +1 -0
  79. package/dist/client/assets/{autosend-DaQ0WgM_.js → autosend-D_HIQJhP.js} +1 -1
  80. package/dist/client/assets/{avatar-qgmN1uFW.js → avatar-DnckqjGp.js} +1 -1
  81. package/dist/client/assets/{badge-Bjr6roKX.js → badge-BeT90Jfh.js} +1 -1
  82. package/dist/client/assets/{block-document-CmPQoPil.js → block-document-g-hQygUE.js} +1 -1
  83. package/dist/client/assets/{blocks-preview-workspace-context-Bt2a6bTr.js → blocks-preview-workspace-context-CIl38gkx.js} +1 -1
  84. package/dist/client/assets/{buckets-CUvpxamI.js → buckets-0BdD_fJX.js} +1 -1
  85. package/dist/client/assets/{build-improve-prompt-doc-DVZptWMu.js → build-improve-prompt-doc-C5i29eyt.js} +1 -1
  86. package/dist/client/assets/{calendar-hWMukXvu.js → calendar-DwEcUKGe.js} +1 -1
  87. package/dist/client/assets/{capability-load-error-BhEiGFSy.js → capability-load-error-BwY99ChM.js} +1 -1
  88. package/dist/client/assets/category-editor-BPnM7ZcX.js +1 -0
  89. package/dist/client/assets/{chart-CpCJ5a7h.js → chart-DzZFGD1z.js} +1 -1
  90. package/dist/client/assets/{chat-context-CG9Mp_L-.js → chat-context-CSREXmZ-.js} +1 -1
  91. package/dist/client/assets/{chat-draft-DApZt_La.js → chat-draft-BYIogZvi.js} +1 -1
  92. package/dist/client/assets/{checkbox-DoT4yq3W.js → checkbox-VSFOqgpI.js} +1 -1
  93. package/dist/client/assets/choose-editor-BhFFcEad.js +1 -0
  94. package/dist/client/assets/{claim-phase-copy-BVJw-2Sg.js → claim-phase-copy-DMl_wfzl.js} +1 -1
  95. package/dist/client/assets/{cli-auth-success-B4d0MFu9.js → cli-auth-success-rCzd61IP.js} +1 -1
  96. package/dist/client/assets/{client-icons-B2Ky8xii.js → client-icons-DQokRtPQ.js} +1 -1
  97. package/dist/client/assets/{collapsible-D2a3Inov.js → collapsible-hh2QeFQx.js} +1 -1
  98. package/dist/client/assets/collection-detail-CZHU581t.js +1 -0
  99. package/dist/client/assets/{collection-display-button-YClOnQnk.js → collection-display-button-BHhyBowf.js} +1 -1
  100. package/dist/client/assets/{collection-search-B5LfgGj5.js → collection-search-Be2s73S6.js} +1 -1
  101. package/dist/client/assets/{collection-table-wrapper-1_pTlxny.js → collection-table-wrapper-CZd1WcSO.js} +1 -1
  102. package/dist/client/assets/{collection-tabs-CYKC6woL.js → collection-tabs-B1fc3hEx.js} +1 -1
  103. package/dist/client/assets/{combobox-Bi0f4g0J.js → combobox-DJXjtyos.js} +1 -1
  104. package/dist/client/assets/{command-DcCoSxh3.js → command-i-VcjjfU.js} +1 -1
  105. package/dist/client/assets/{companion-mcps-section-Dk-qAE2Z.js → companion-mcps-section-BNGcJQ5q.js} +1 -1
  106. package/dist/client/assets/{config-bRaSZ6ZI.js → config-B-PocAul.js} +1 -1
  107. package/dist/client/assets/{connect-CDe5uHFz.js → connect-CJrfrNOc.js} +1 -1
  108. package/dist/client/assets/{connect-layout-6lDDk3bO.js → connect-layout-Ck9_7bFy.js} +1 -1
  109. package/dist/client/assets/{connection-DLRl6H0w.js → connection-DWKQsiJ1.js} +1 -1
  110. package/dist/client/assets/{connection-card-BMfy_L46.js → connection-card-BxTTbMjg.js} +1 -1
  111. package/dist/client/assets/connection-detail-CwaF40yO.js +1 -0
  112. package/dist/client/assets/{connection-form-helpers-DyGM93YP.js → connection-form-helpers-UQvDnJ_o.js} +1 -1
  113. package/dist/client/assets/connections-BLQ5SqNN.js +1 -0
  114. package/dist/client/assets/context-BkyMYnN6.js +1 -0
  115. package/dist/client/assets/{context-menu-BWEhojhE.js → context-menu-D2E2BNSJ.js} +1 -1
  116. package/dist/client/assets/{create-organization-dialog-D2gREUUr.js → create-organization-dialog-BPnp8P72.js} +1 -1
  117. package/dist/client/assets/daily-pulse-BmnQTDoG.js +1 -0
  118. package/dist/client/assets/{decopilot-Cp1gF-AT.js → decopilot-CaWhcF5x.js} +1 -1
  119. package/dist/client/assets/{dialog-D1MsBTH7.js → dialog-DwOXW4AO.js} +1 -1
  120. package/dist/client/assets/discover-DakQJU5_.js +1 -0
  121. package/dist/client/assets/{domain-settings-CVSAVAoV.js → domain-settings-CrCw_lIY.js} +1 -1
  122. package/dist/client/assets/{download-app-dialog-CI6vYgNV.js → download-app-dialog-CZZmW5dI.js} +1 -1
  123. package/dist/client/assets/{drawer-DQ1B0U-G.js → drawer-DYVK-Yxy.js} +1 -1
  124. package/dist/client/assets/{editor-CXgFNygO.js → editor-fs_-xqtP.js} +1 -1
  125. package/dist/client/assets/{empty-state-CwnTG9Vu.js → empty-state-B8AHzTIo.js} +1 -1
  126. package/dist/client/assets/{empty-state-zFf02K5-.js → empty-state-GPBYJgGv.js} +1 -1
  127. package/dist/client/assets/{extract-connection-data-CD-3Cduz.js → extract-connection-data-DwhEeit2.js} +1 -1
  128. package/dist/client/assets/{feature-gate-DxAWWJZd.js → feature-gate-CitKKOE2.js} +1 -1
  129. package/dist/client/assets/{feature-paywall-C7fyZx2V.js → feature-paywall-DweqAdFr.js} +1 -1
  130. package/dist/client/assets/file-explorer-DCrNzMRJ.js +2 -0
  131. package/dist/client/assets/{file-preview-WwyFKcds.js → file-preview-CUNQwIMu.js} +1 -1
  132. package/dist/client/assets/{file-share-button-0thUGHHJ.js → file-share-button-DVNdVkoS.js} +2 -2
  133. package/dist/client/assets/{file-type-icon-TH99y45i.js → file-type-icon-BKMgh7vP.js} +1 -1
  134. package/dist/client/assets/flat-project-BzPFVO8c.js +1 -0
  135. package/dist/client/assets/{folder-icon-Dmxyn26B.js → folder-icon-DFC1tMoz.js} +1 -1
  136. package/dist/client/assets/{form-CelWRzw5.js → form-CBqY_Qj5.js} +1 -1
  137. package/dist/client/assets/{gateway-client-B5Pd686Y.js → gateway-client-BgWzL4m_.js} +1 -1
  138. package/dist/client/assets/{general-DeFJH4BS.js → general-CpwupPfh.js} +1 -1
  139. package/dist/client/assets/home-DL5QzWnK.js +1 -0
  140. package/dist/client/assets/icon-button-BtLKyT7m.js +1 -0
  141. package/dist/client/assets/{index-CMZSUEgF.js → index-BbS4gDnQ.js} +1 -1
  142. package/dist/client/assets/{index-CtnFCw07.js → index-BeeQz6mt.js} +1 -1
  143. package/dist/client/assets/{index-COzII8Rl.js → index-BzcY0Rd6.js} +1 -1
  144. package/dist/client/assets/{index-CdVv5PyR.js → index-BznQH_sl.js} +1 -1
  145. package/dist/client/assets/{index-BBMMcl5D.js → index-C8jZ4bpw.js} +1 -1
  146. package/dist/client/assets/{index-CyQyr88p.js → index-CWzlOAQX.js} +46 -46
  147. package/dist/client/assets/{index-9e8H03cs.js → index-Cy0Tj9zL.js} +1 -1
  148. package/dist/client/assets/{index-De2ebevC.js → index-DCYp09DY.js} +1 -1
  149. package/dist/client/assets/{index-3gIKLZj9.css → index-DDkAv5gF.css} +1 -1
  150. package/dist/client/assets/{index-xqiApMBX.js → index-DSVDaqXP.js} +1 -1
  151. package/dist/client/assets/{index-DXD6LtMh.js → index-DYrWEQp-.js} +1 -1
  152. package/dist/client/assets/index-Dh5O1uzF.js +1 -0
  153. package/dist/client/assets/{index-Bp8O3HWE.js → index-DrVMQFyO.js} +1 -1
  154. package/dist/client/assets/index-HhorfmmF.js +1 -0
  155. package/dist/client/assets/{index-POiEXzT7.js → index-Qp03HhfC.js} +1 -1
  156. package/dist/client/assets/{index-DbPTqP1k.js → index-h4lVf9qd.js} +4 -4
  157. package/dist/client/assets/{index-redirect-XX1RPnFl.js → index-redirect-BzVBOYpG.js} +1 -1
  158. package/dist/client/assets/{infiniteQueryObserver-Bm7kObFT.js → infiniteQueryObserver-z6KpeaXk.js} +1 -1
  159. package/dist/client/assets/{infra-billing-Wd0aWcPF.js → infra-billing-Dm9O0MpT.js} +1 -1
  160. package/dist/client/assets/{input-CeDoO_Rr.js → input-BT8saI27.js} +1 -1
  161. package/dist/client/assets/{input-D-tRfEUe.js → input-CJK7pC9G.js} +1 -1
  162. package/dist/client/assets/{input-C19kkoiF.js → input-bivLuh-1.js} +3 -3
  163. package/dist/client/assets/integration-icon-B95GPMKQ.js +1 -0
  164. package/dist/client/assets/{label-DO3jRcdx.js → label-0TZ28Umz.js} +1 -1
  165. package/dist/client/assets/{last-preview-page-CI8sVa42.js → last-preview-page-ZNVmf1EU.js} +1 -1
  166. package/dist/client/assets/{layout-C3JP2G-I.js → layout-j1X96Ggx.js} +1 -1
  167. package/dist/client/assets/{legacy-agents-deep-BJqv5541.js → legacy-agents-deep-cacTD8f_.js} +1 -1
  168. package/dist/client/assets/{legacy-main-redirect-CXYH487V.js → legacy-main-redirect--cYJW20n.js} +1 -1
  169. package/dist/client/assets/library-DtGn3FJA.js +1 -0
  170. package/dist/client/assets/{library-tab-vy9WBvuU.js → library-tab-CTkh7nfn.js} +1 -1
  171. package/dist/client/assets/{login-DZytsZWm.js → login-c8HNUl_C.js} +1 -1
  172. package/dist/client/assets/{markdown-CD9qrdS_.js → markdown-Bqzss8Ii.js} +1 -1
  173. package/dist/client/assets/{mcp-app-renderer-C_mTIe3Q.js → mcp-app-renderer-BXwhxgcp.js} +1 -1
  174. package/dist/client/assets/{mcp-oauth-BHkP1C2P.js → mcp-oauth-C0PojFFt.js} +1 -1
  175. package/dist/client/assets/{members-BXW762DS.js → members-CyyrlPEt.js} +1 -1
  176. package/dist/client/assets/{message-templates-Y1dkPYIa.js → message-templates-BDPyGA1f.js} +1 -1
  177. package/dist/client/assets/{mini-report-page-BBWmfTbX.js → mini-report-page-BNC-xTjm.js} +1 -1
  178. package/dist/client/assets/{mock-board-DAh526hI.js → mock-board-DovrLxym.js} +1 -1
  179. package/dist/client/assets/{monaco-editor-1WiLwMoS.js → monaco-editor-DCqxqYSj.js} +1 -1
  180. package/dist/client/assets/{monitoring-stats-row-DvfsN9_z.js → monitoring-stats-row-OA16NnfT.js} +1 -1
  181. package/dist/client/assets/{multi-select-CUTVdKAC.js → multi-select-tRlT3L5z.js} +1 -1
  182. package/dist/client/assets/{mustache-BoM8yvOe.js → mustache-BP7du7Zy.js} +1 -1
  183. package/dist/client/assets/{new-project-dialog-_BSkwB51.js → new-project-dialog-I6QtJuZt.js} +1 -1
  184. package/dist/client/assets/{oauth-callback-DsCdusXE.js → oauth-callback-MJTjt1We.js} +1 -1
  185. package/dist/client/assets/{oauth-callback-ai-provider-C5T-VDKL.js → oauth-callback-ai-provider-B0EhyPGD.js} +1 -1
  186. package/dist/client/assets/{onboarding-DetvWDKL.js → onboarding-X4AYCK_N.js} +1 -1
  187. package/dist/client/assets/openai-conversation-BrI4LVLa.js +3 -0
  188. package/dist/client/assets/{optimistic-project-sidebar-views-DVSvifkv.js → optimistic-project-sidebar-views-B35k6512.js} +1 -1
  189. package/dist/client/assets/{org-file-open-context-vlnvSapQ.js → org-file-open-context-W094eyab.js} +1 -1
  190. package/dist/client/assets/{organization-choice-Bl7AK6HJ.js → organization-choice-BLsuyEtq.js} +1 -1
  191. package/dist/client/assets/{orgs-_O4TUqxu.js → orgs-Y9G8A5Ph.js} +1 -1
  192. package/dist/client/assets/{page-seo-form--aiitwzb.js → page-seo-form-CJW4yq3f.js} +1 -1
  193. package/dist/client/assets/{pair-Bjle9-b6.js → pair-csGGOkx1.js} +7 -7
  194. package/dist/client/assets/{plan-ladder-C9iTCEoq.js → plan-ladder-C4roHlM5.js} +1 -1
  195. package/dist/client/assets/{popover-BlirYmOQ.js → popover-Cd3ISjs_.js} +1 -1
  196. package/dist/client/assets/post-calendar-CAWS2Vmq.js +1 -0
  197. package/dist/client/assets/{post-editor-QaOkF5FX.js → post-editor-D2xBHjct.js} +1 -1
  198. package/dist/client/assets/{preview-content-C4Rard2P.js → preview-content-CzVZuXbr.js} +1 -1
  199. package/dist/client/assets/{preview-dialog-Cz9jaB0z.js → preview-dialog-8lnbKA_n.js} +1 -1
  200. package/dist/client/assets/{profile-C-BPCyIp.js → profile-BgxkafeL.js} +1 -1
  201. package/dist/client/assets/project-app-view-icxI7Rov.js +1 -0
  202. package/dist/client/assets/project-feed-BgMHYF1Z.js +1 -0
  203. package/dist/client/assets/{project-icon-C1d9Z0m5.js → project-icon-BfkDVtEt.js} +1 -1
  204. package/dist/client/assets/project-reports-BFfWvANX.js +1 -0
  205. package/dist/client/assets/project-tasks-C64LpTAA.js +1 -0
  206. package/dist/client/assets/projects-BUTz1MMd.js +1 -0
  207. package/dist/client/assets/{projects-empty-state-Bdo_Rhj-.js → projects-empty-state-D4QNY6yf.js} +1 -1
  208. package/dist/client/assets/{prompts-BsB5FTPC.js → prompts-_wvcaZiq.js} +1 -1
  209. package/dist/client/assets/record-editor-6OpzvMEF.js +1 -0
  210. package/dist/client/assets/redirect-editor-D7uptbDW.js +1 -0
  211. package/dist/client/assets/reports-DLhsthYj.js +1 -0
  212. package/dist/client/assets/{reports-Chj5li8_.js → reports-KcjvDixJ.js} +1 -1
  213. package/dist/client/assets/reports-onboarding-Zp49oKKp.js +1 -0
  214. package/dist/client/assets/reports-tab-BbyRBNRf.js +2 -0
  215. package/dist/client/assets/repositories-EkSR0y55.js +1 -0
  216. package/dist/client/assets/{repository-binding-Dgq5OsMA.js → repository-binding-3gizJnq4.js} +1 -1
  217. package/dist/client/assets/{repository-import-picker-D2pzrWr6.js → repository-import-picker-DG_yM72C.js} +1 -1
  218. package/dist/client/assets/{repository-picker-STEm8zmF.js → repository-picker-BR_sMkOw.js} +1 -1
  219. package/dist/client/assets/{require-capability-BH1WwajD.js → require-capability-C2Nda3jm.js} +1 -1
  220. package/dist/client/assets/{required-auth-layout-Cy0atFVL.js → required-auth-layout-CtzgnDx3.js} +1 -1
  221. package/dist/client/assets/{reset-password-BwPcMGPY.js → reset-password-D2Alw1H7.js} +1 -1
  222. package/dist/client/assets/{resizable-BU4a2PvY.js → resizable-DqYE28tG.js} +1 -1
  223. package/dist/client/assets/{resolve-tab-icon-c84JJRcB.js → resolve-tab-icon-liQGha1g.js} +1 -1
  224. package/dist/client/assets/{review-settings-iEyMCfp2.js → review-settings-B0nVs037.js} +1 -1
  225. package/dist/client/assets/{rich-text-link-control-DlGKoKEw.js → rich-text-link-control-U94G_E0v.js} +1 -1
  226. package/dist/client/assets/roles-B_4b_QUD.js +1 -0
  227. package/dist/client/assets/route-16Qzmh2H.js +1 -0
  228. package/dist/client/assets/route-B3tjN4Zg.js +1 -0
  229. package/dist/client/assets/route-C_Hs1TIL.js +1 -0
  230. package/dist/client/assets/{runnable-block-editor-R-_6elGy.js → runnable-block-editor-Dx2bIxdz.js} +1 -1
  231. package/dist/client/assets/{sandbox-lifecycle-context-BEIzLgKJ.js → sandbox-lifecycle-context-BxUTEul4.js} +1 -1
  232. package/dist/client/assets/{schema-Gtjoj1mV.js → schema-BKdAxrjN.js} +1 -1
  233. package/dist/client/assets/{scroll-area-BItWkZyD.js → scroll-area-Cay3wJhN.js} +1 -1
  234. package/dist/client/assets/{search-input-2HqPa1gU.js → search-input-B_YmmZHV.js} +1 -1
  235. package/dist/client/assets/{search-toggle-TwxL51Rq.js → search-toggle-B17M6kpS.js} +1 -1
  236. package/dist/client/assets/{secret-picker-LUd97qaj.js → secret-picker-DaCIoDrN.js} +1 -1
  237. package/dist/client/assets/{secrets-C-fl25hO.js → secrets-2PSicqyQ.js} +1 -1
  238. package/dist/client/assets/sections-editor-DBJwN3fQ.js +1 -0
  239. package/dist/client/assets/{select-BqcGTWMZ.js → select-CF6Gp6z2.js} +1 -1
  240. package/dist/client/assets/{select-model-UIikOcTl.js → select-model-BfrFqNKL.js} +1 -1
  241. package/dist/client/assets/seo-editor-DWB8ATJr.js +1 -0
  242. package/dist/client/assets/{separator-Cfi478VR.js → separator-7nNJ8bt3.js} +1 -1
  243. package/dist/client/assets/{settings-tab-32WTJPDU.js → settings-tab-BjVbMHuj.js} +1 -1
  244. package/dist/client/assets/{sheet-jXYhJY1b.js → sheet-BxvcwNse.js} +1 -1
  245. package/dist/client/assets/{shell-layout-CqQIq2hS.js → shell-layout-CzhXAO9S.js} +1 -1
  246. package/dist/client/assets/{skills-DoXVf8Lu.js → skills-DgHWYsVv.js} +1 -1
  247. package/dist/client/assets/{sso-CkmBYFtO.js → sso-Be79miIa.js} +1 -1
  248. package/dist/client/assets/{suggestion-DKXZWHaN.js → suggestion-RCbdRB_3.js} +1 -1
  249. package/dist/client/assets/{switch-Dcx0z8yf.js → switch-CAhfktTZ.js} +1 -1
  250. package/dist/client/assets/{synced-repos-BmYDHZBR.js → synced-repos-Cfc_noHz.js} +1 -1
  251. package/dist/client/assets/{tab-icon-glyph-CJeQz4Ym.js → tab-icon-glyph-C3JncEmv.js} +1 -1
  252. package/dist/client/assets/{table-2Z24Uf7A.js → table-BiIyEc6M.js} +1 -1
  253. package/dist/client/assets/{tabs-Dcs_wljk.js → tabs-MJcU_hz5.js} +1 -1
  254. package/dist/client/assets/{task-board-BZQiH6lk.js → task-board-ZOkVjFfb.js} +1 -1
  255. package/dist/client/assets/{task-route-Y6qsNyYg.js → task-route-2jOSkzR_.js} +1 -1
  256. package/dist/client/assets/{task-status-DJtE9wAV.js → task-status-DnIsBsG3.js} +1 -1
  257. package/dist/client/assets/taskboard-analytics-CagGkIPc.js +1 -0
  258. package/dist/client/assets/{tasks-CMIeA9v4.js → tasks-BYfXzj9g.js} +1 -1
  259. package/dist/client/assets/tasks-C59QR4O_.js +1 -0
  260. package/dist/client/assets/{textarea-Crpj1sFF.js → textarea-DPzgPhO0.js} +1 -1
  261. package/dist/client/assets/thread-analytics-D4ZCwT01.js +1 -0
  262. package/dist/client/assets/thread-button-KYXikVLO.js +1 -0
  263. package/dist/client/assets/{thread-intent-CCZj7A0k.js → thread-intent-uQTUqJNN.js} +1 -1
  264. package/dist/client/assets/thread-route-D1S383-w.js +1 -0
  265. package/dist/client/assets/{thread-route-BnMz_7UO.js → thread-route-D9Gbeij-.js} +1 -1
  266. package/dist/client/assets/thread-sheet-body-CywQ9hos.js +1 -0
  267. package/dist/client/assets/{toggle-group-C6K0IvrN.js → toggle-group-Ddc-8H1o.js} +1 -1
  268. package/dist/client/assets/{toolbar-icon-button-xv3yPHM9.js → toolbar-icon-button-ByY5u7GY.js} +1 -1
  269. package/dist/client/assets/{tooltip-MkmbJW_K.js → tooltip-BqndO78a.js} +1 -1
  270. package/dist/client/assets/{track-DiI841S7.js → track-hlVnSAov.js} +1 -1
  271. package/dist/client/assets/{types-CRa6H_aI.js → types-sBzHo8Ih.js} +1 -1
  272. package/dist/client/assets/{usage-stats-D9M3mjk5.js → usage-stats-yhYX0e5G.js} +1 -1
  273. package/dist/client/assets/{use-ai-providers-CkGkm3q3.js → use-ai-providers-BYo-eRGm.js} +1 -1
  274. package/dist/client/assets/{use-automations-Ln-ZgedH.js → use-automations-ChYX58CC.js} +1 -1
  275. package/dist/client/assets/{use-autosave-DCbYTwqE.js → use-autosave-Bex7Xrty.js} +1 -1
  276. package/dist/client/assets/{use-chat-layout-state-BPeSMGIC.js → use-chat-layout-state-TqbwuuZk.js} +1 -1
  277. package/dist/client/assets/{use-connect-companion-DB9iKUcO.js → use-connect-companion-BRtgSb9P.js} +1 -1
  278. package/dist/client/assets/{use-connection-DpAJRH1j.js → use-connection-CI6FQy3s.js} +1 -1
  279. package/dist/client/assets/{use-copy-C7mYE0cr.js → use-copy-PnkEhrhy.js} +1 -1
  280. package/dist/client/assets/{use-create-virtual-mcp-YtxQuBqL.js → use-create-virtual-mcp-BziW--Xo.js} +1 -1
  281. package/dist/client/assets/{use-date-fns-locale-b7C9_zv4.js → use-date-fns-locale-DvDfBLBf.js} +1 -1
  282. package/dist/client/assets/{use-debounced-autosave-Dl2BkZfj.js → use-debounced-autosave-BesgsSGy.js} +1 -1
  283. package/dist/client/assets/{use-debounced-value-Csr5jCDV.js → use-debounced-value-DfLnstW7.js} +1 -1
  284. package/dist/client/assets/{use-deco-credits-CjSuIvCj.js → use-deco-credits-vsffD2IB.js} +1 -1
  285. package/dist/client/assets/{use-decopilot-events-1ymO_vHG.js → use-decopilot-events-jyM4oYaJ.js} +1 -1
  286. package/dist/client/assets/{use-delete-connection-DIl-WTwH.js → use-delete-connection-B9XzXBHi.js} +1 -1
  287. package/dist/client/assets/{use-deployment-admin-Bln500bu.js → use-deployment-admin-DnuvCNsE.js} +1 -1
  288. package/dist/client/assets/{use-fast-preview-draft-url-BVH9ntfX.js → use-fast-preview-draft-url-D4k5eZ2W.js} +1 -1
  289. package/dist/client/assets/{use-file-configs-BmM3RnWT.js → use-file-configs-DXe1xU9a.js} +1 -1
  290. package/dist/client/assets/{use-infinite-scroll-DKthVIzG.js → use-infinite-scroll-DViN6YmU.js} +1 -1
  291. package/dist/client/assets/{use-join-requests-CMXs54Gp.js → use-join-requests-BAj95XYz.js} +1 -1
  292. package/dist/client/assets/{use-main-panel-tabs-D9AQTjhM.js → use-main-panel-tabs-CASquBgs.js} +1 -1
  293. package/dist/client/assets/{use-mcp-auth-status-BzOtb6NF.js → use-mcp-auth-status-W5VgXonZ.js} +1 -1
  294. package/dist/client/assets/{use-mcp-client-BuS_j4o-.js → use-mcp-client-Ct2vdUoM.js} +1 -1
  295. package/dist/client/assets/{use-mcp-prompts-BBHmJESk.js → use-mcp-prompts-Dk_d3SlG.js} +1 -1
  296. package/dist/client/assets/{use-mcp-tools-DMDsoga2.js → use-mcp-tools-Bnl7RrzG.js} +1 -1
  297. package/dist/client/assets/{use-members-oDlXNVCE.js → use-members-9XNbNa6j.js} +1 -1
  298. package/dist/client/assets/{use-mobile-BCh8YRo6.js → use-mobile--np6aWAG.js} +1 -1
  299. package/dist/client/assets/{use-navigate-to-agent-4LkoL-j8.js → use-navigate-to-agent-0Fvf2Lpw.js} +1 -1
  300. package/dist/client/assets/use-new-blocks-editor-BXR_sYex.js +1 -0
  301. package/dist/client/assets/{use-open-billing-url-BXuHuuOL.js → use-open-billing-url-BMXuqlhP.js} +1 -1
  302. package/dist/client/assets/{use-org-auth-client-C-MfZ94G.js → use-org-auth-client-CN0iwzUb.js} +1 -1
  303. package/dist/client/assets/{use-org-fs-CmBvsBMY.js → use-org-fs-k5NldW-7.js} +1 -1
  304. package/dist/client/assets/{use-org-repo-syncs-d4JgzgQp.js → use-org-repo-syncs-EkZ_pjWr.js} +1 -1
  305. package/dist/client/assets/{use-org-sso-DUqEoTxr.js → use-org-sso-B__Yf47H.js} +1 -1
  306. package/dist/client/assets/{use-organization-roles-C_c0eWOx.js → use-organization-roles-B3rV1LLK.js} +1 -1
  307. package/dist/client/assets/{use-organization-settings-Cm1vewr9.js → use-organization-settings-B0MM1DlS.js} +1 -1
  308. package/dist/client/assets/{use-panel-navigate-CiX_5778.js → use-panel-navigate-Dk1Ye1GR.js} +1 -1
  309. package/dist/client/assets/{use-project-scope-BxTK_qgl.js → use-project-scope-C9VWhN8V.js} +1 -1
  310. package/dist/client/assets/{use-releases-BQ508TNB.js → use-releases-DN0A-Kpr.js} +1 -1
  311. package/dist/client/assets/{use-reports-diagnostic-CuugPiuf.js → use-reports-diagnostic-DHXQZUvd.js} +1 -1
  312. package/dist/client/assets/{use-secrets-TLJHLrLj.js → use-secrets-C2MxSlcA.js} +1 -1
  313. package/dist/client/assets/{use-section-preview-base-gSStkCYp.js → use-section-preview-base-BYyvYPZ7.js} +1 -1
  314. package/dist/client/assets/{use-session-runtime-BVWXx-Hx.js → use-session-runtime-DsnbbYN7.js} +1 -1
  315. package/dist/client/assets/{use-tags-CuAeOwml.js → use-tags-CjTVjQFf.js} +1 -1
  316. package/dist/client/assets/{use-task-board-analytics-DpORgpIb.js → use-task-board-analytics-CCzrdEy3.js} +1 -1
  317. package/dist/client/assets/{use-task-board-events-1XpVNJEd.js → use-task-board-events-BHC_8phf.js} +1 -1
  318. package/dist/client/assets/{use-task-metadata-o5vDdJtC.js → use-task-metadata-BzPIvyyo.js} +1 -1
  319. package/dist/client/assets/{use-thread-analytics-CpdUNsgX.js → use-thread-analytics-B0VguZq2.js} +1 -1
  320. package/dist/client/assets/{use-thread-outputs-qbmnSZLU.js → use-thread-outputs-DCJFafqq.js} +1 -1
  321. package/dist/client/assets/useInfiniteQuery-Dxc2v4r4.js +1 -0
  322. package/dist/client/assets/{useQueries-Cp9cPmFE.js → useQueries-JVjEwDAw.js} +1 -1
  323. package/dist/client/assets/useSuspenseInfiniteQuery-C8qiUH4q.js +1 -0
  324. package/dist/client/assets/{users-BysYiEd8.js → users-CfobUiGt.js} +1 -1
  325. package/dist/client/assets/{utils-BkJACT4F.js → utils-C39wfwww.js} +1 -1
  326. package/dist/client/assets/variant-calendar-Bjori3kc.js +1 -0
  327. package/dist/client/assets/{variant-matcher-override-CDsPfWCr.js → variant-matcher-override-C3oDv2Ac.js} +1 -1
  328. package/dist/client/assets/{view-mode-toggle-DPCA9Xp0.js → view-mode-toggle-7tgTSsST.js} +1 -1
  329. package/dist/client/assets/{virtual-mcp-gaJd4WQ5.js → virtual-mcp-BoM8jJW7.js} +1 -1
  330. package/dist/client/index.html +2 -2
  331. package/dist/server/cli.js +1 -1
  332. package/dist/server/server.js +1 -1
  333. package/package.json +1 -1
  334. package/dist/client/assets/ArrowRight-Q7Kpem3P.js +0 -1
  335. package/dist/client/assets/add-connection-dialog-B13l82-x.js +0 -1
  336. package/dist/client/assets/agent-analytics-Bg7OGjPz.js +0 -2
  337. package/dist/client/assets/agent-app-CYu2vHrt.js +0 -1
  338. package/dist/client/assets/agent-assets-PeHArOTz.js +0 -1
  339. package/dist/client/assets/agent-automations-CG4WPLmg.js +0 -1
  340. package/dist/client/assets/agent-connect-sources-DBVMs9Oh.js +0 -1
  341. package/dist/client/assets/agent-deck-CnP02u1J.js +0 -1
  342. package/dist/client/assets/agent-e2e-CKp4ujG6.js +0 -1
  343. package/dist/client/assets/agent-experiments-B_K8GWFz.js +0 -1
  344. package/dist/client/assets/agent-file-DCWTkVS7.js +0 -1
  345. package/dist/client/assets/agent-hosting-CyJCp9zC.js +0 -1
  346. package/dist/client/assets/agent-icon-DyICUp-0.js +0 -1
  347. package/dist/client/assets/agent-library-C9HW9AGH.js +0 -1
  348. package/dist/client/assets/agent-library-file-BhPllWzW.js +0 -1
  349. package/dist/client/assets/agent-monitor-DE6uc-Yc.js +0 -1
  350. package/dist/client/assets/agent-overview-D2xoxQj1.js +0 -1
  351. package/dist/client/assets/agent-settings-DWsqVjSl.js +0 -1
  352. package/dist/client/assets/agent-site-editor-code-9ugnawPt.js +0 -2
  353. package/dist/client/assets/agent-view-QI30T6v_.js +0 -1
  354. package/dist/client/assets/agents-list-Cve154Hx.js +0 -1
  355. package/dist/client/assets/api-keys-i59HI6Dn.js +0 -1
  356. package/dist/client/assets/app-editor-DRm1-NGV.js +0 -1
  357. package/dist/client/assets/automations-C4ySvzYV.js +0 -1
  358. package/dist/client/assets/category-editor-BZufyouv.js +0 -1
  359. package/dist/client/assets/choose-editor-Bm8A4VvY.js +0 -1
  360. package/dist/client/assets/collection-detail-DvYBq4qN.js +0 -1
  361. package/dist/client/assets/connection-detail-kRlYCz4f.js +0 -1
  362. package/dist/client/assets/connections-5gKP9SMR.js +0 -1
  363. package/dist/client/assets/context-DukDU2Rq.js +0 -1
  364. package/dist/client/assets/daily-pulse-B5jGavJp.js +0 -1
  365. package/dist/client/assets/discover-CUlGD-kG.js +0 -1
  366. package/dist/client/assets/file-explorer-BacigDk4.js +0 -2
  367. package/dist/client/assets/flat-project-TSS3UcZe.js +0 -1
  368. package/dist/client/assets/home-DscOh6R0.js +0 -1
  369. package/dist/client/assets/icon-button-a92J-8vv.js +0 -1
  370. package/dist/client/assets/index-DqGHQkvC.js +0 -1
  371. package/dist/client/assets/index-vBm2nEpb.js +0 -1
  372. package/dist/client/assets/integration-icon--cgW91vt.js +0 -1
  373. package/dist/client/assets/library-CRn84l2y.js +0 -1
  374. package/dist/client/assets/openai-conversation-DB0maE3r.js +0 -3
  375. package/dist/client/assets/post-calendar-BQ6EJh_c.js +0 -1
  376. package/dist/client/assets/project-app-view-DNZzY5H1.js +0 -1
  377. package/dist/client/assets/project-feed-CpIs1E9q.js +0 -1
  378. package/dist/client/assets/project-reports-vXhY3Phe.js +0 -1
  379. package/dist/client/assets/project-tasks-Cq_ycqFh.js +0 -1
  380. package/dist/client/assets/projects-BS00BQBL.js +0 -1
  381. package/dist/client/assets/record-editor-DxsPRjbm.js +0 -1
  382. package/dist/client/assets/redirect-editor-CYq4KwMq.js +0 -1
  383. package/dist/client/assets/reports-BAxcoVP6.js +0 -1
  384. package/dist/client/assets/reports-onboarding-CVv2rrQL.js +0 -1
  385. package/dist/client/assets/reports-tab-B_N3nqkf.js +0 -2
  386. package/dist/client/assets/repositories-Bg9oubuI.js +0 -1
  387. package/dist/client/assets/roles-BMSsHGlS.js +0 -1
  388. package/dist/client/assets/route-B-A-TKed.js +0 -1
  389. package/dist/client/assets/route-BbGr0Fmz.js +0 -1
  390. package/dist/client/assets/route-CKffRuty.js +0 -1
  391. package/dist/client/assets/sections-editor-Ua2U9XX8.js +0 -1
  392. package/dist/client/assets/seo-editor-C3FxnQ4B.js +0 -1
  393. package/dist/client/assets/taskboard-analytics-Cxz6IAs5.js +0 -1
  394. package/dist/client/assets/tasks-zUoRMh__.js +0 -1
  395. package/dist/client/assets/thread-analytics-D8Oxt_vz.js +0 -1
  396. package/dist/client/assets/thread-route-CTg48XGa.js +0 -1
  397. package/dist/client/assets/thread-sheet-body-BQ5QR1zb.js +0 -1
  398. package/dist/client/assets/use-new-blocks-editor-C9Lf0NAr.js +0 -1
  399. package/dist/client/assets/useInfiniteQuery-CucDp1Bl.js +0 -1
  400. package/dist/client/assets/useSuspenseInfiniteQuery-Bv9C99VC.js +0 -1
  401. package/dist/client/assets/variant-calendar-BDehoemX.js +0 -1
@@ -3734,7 +3734,7 @@ ${J.join(`
3734
3734
  `)}`:X}function vt6($){let Z=new Set;for(let Q of $)for(let Y of Q.split(`
3735
3735
  `)){let X=Y.trim();if(/^Co-authored-by:\s/i.test(X))Z.add(X)}return[...Z]}var WY8=200,Tt6=12,qt6,It6=300,nC0=3;var CD1=D(()=>{Q7();a$();pC0();qt6={aheadBy:0,behindBy:0,files:[]}});function xt6($){if(!$||$.includes(".."))return!1;return bt6.test($)}function HY8($){return ft6.includes($)}function _D1($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!xt6(Z))return null;let{__resolveType:Q,...Y}=$;return{resolveType:Z,payload:Y}}function vD1($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var bt6,ft6;var FY8=D(()=>{bt6=/^[\w./@-]+$/;ft6=["vtex/loaders/intelligentSearch/productList.ts","vtex/loaders/categories/tree.ts"]});function l60($,Z){let Q=$?.repository;if(!Q?.owner||!Q?.name)return null;if(!Q.connectionId)return Q;if(!Z.includes(Q.connectionId))return null;return Q}async function NY8($,Z,Q,Y){let X=$.organization?.id;if(!X)throw new Qz(S7);let J=await bj($.storage,X,Y);if(J&&await DD($.storage,J)){let F=await RU($,J,{forceRefresh:!0}).catch((U)=>{throw new Qz(U instanceof Error?U.message:S7)});await UY8($,Z,Q,F);return}let G=Y.connectionId??J?.legacyConnectionId;if(!G)throw new Qz("Push requires a connected git account. Connect the repository's provider for this project and restart the sandbox.");await jm({ctx:$,connectionId:G,organizationId:X,forceRefresh:!0,onLegacyMintError:(F)=>{let U=F instanceof Error?F.message:S7;throw new Qz(U)}});let{cloneUrl:W,gitUserName:K,gitUserEmail:H}=await qU(G,Y.owner,Y.name,$.db,$.vault).catch((F)=>{let{code:U,message:N}=WL$(F instanceof Error?F.message:String(F));throw U?new Qz(N):F});await UY8($,Z,Q,{cloneUrl:W,gitUserName:K,gitUserEmail:H})}async function UY8($,Z,Q,Y){let{cloneUrl:X,gitUserName:J,gitUserEmail:G}=Y,W=Cp($),K=await Z.proxyDaemonRequest(Q,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{repository:{cloneUrl:X},identity:{userName:J,userEmail:G}},...W?{operator:W}:{}})});if(!K.ok){let H=await JE(K,yt6).catch(()=>K.statusText);throw Error(`Failed to refresh sandbox git credentials (${K.status}): ${H}`)}}var yt6=10485760,Qz;var bD1=D(()=>{qW();yC0();w$0();qH0();i00();Q7();Qz=class Qz extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function ht6($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!gt6.test(Z))throw Error(`Invalid branch name: ${$}`)}function ty($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(ut6)])}async function ct6($,Z){let Q=$.var.studioContext,Y=bU(Z.branch),X=$.req.query("thread")??Y,J=X&&X===Y?Z.branchThread:X?await Q.storage.threads.get(X).catch(()=>null):null,G=J?.virtual_mcp_id===Z.virtualMcpId?J:null,W=Af(G?.metadata?.runtime);if(W)return W;let K=IR0(Z.virtualMcpMetadata),H=K==="cms"?await UD1(Q,{claimName:Z.claimName}):"alive",F=K==="cms"&&H!=="alive"?"cms":"sandbox",U=!!G&&(H==="gone"||H==="alive"&&K==="cms");if(U&&G)j$0(Q,G.id,F);if(K==="cms")console.log("sandbox proxy: no runtime stamp",{route:$.req.path,method:$.req.method,reason:G?"unstamped":"threadless",liveness:H,resolved:F,stamped:U});return F}async function mt6($){let Z=$.get("vmClaim");if(Z.runner)return Z.runner;try{return await gX($.var.studioContext)}catch{return null}}function oy($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}async function fp($){let{virtualMcpMetadata:Z,connectionIds:Q}=$.get("vmClaim"),Y=$.var.studioContext,X=l60(Z,Q);if(!X)throw new f0({provider:"github",status:404,message:"Project has no repository"});let J=J0(Y);return Om(Y,J.id,X)}function fD1($,Z){let Q=Z instanceof Error?Z.message:String(Z),Y=AD$(Z);if(Y!==void 0)return $.json({error:Q},429,{...G9,...Y===null?{}:{"Retry-After":String(Math.ceil(Y/1000))}});if(Z instanceof s6)return $.json({error:Q},409,G9);let X=kW(Z);if(X!==null){let J=X===404?404:X===409||X===422?409:502;return $.json({error:Q},J,G9)}return $.json({error:Q},502,G9)}async function xD1($,Z,Q){let Y;try{Y=await fetch(Z,Q)}catch{return $.json({error:"Preview unreachable"},502)}let X;try{X=await Y.text()}catch{return $.json({error:"Preview unreachable"},502)}return new Response(X,{status:Y.status,headers:{"content-type":Y.headers.get("content-type")??"application/json"}})}async function LY8($){try{let Z=await fp($),Q=await tC0(Z,$.get("vmClaim").branch);return $.json(Q,200,G9)}catch(Z){return fD1($,Z)}}function c60($,Z){let Y=(sC0.get($)??Promise.resolve()).catch(()=>{}).then(Z),X=Y.catch(()=>{});return sC0.set($,X),X.finally(()=>{if(sC0.get($)===X)sC0.delete($)}),Y}async function NQ($,Z,Q){if(!Q?.runner&&$.get("vmClaim").runtime==="cms")return $.json({error:"sandbox not found: this session is sandbox-less"},404,G9);let Y=Q?.runner??oy($);if(Y instanceof Response)return Y;let{claimName:X,userId:J,projectRef:G}=$.get("vmClaim"),W=Q?.method??"POST",K=null,H=new Headers;if(Q?.jsonBody!==void 0)K=Q.jsonBody,H.set("content-type","application/json");else if(Q?.forwardJsonBody)K=await $.req.text(),H.set("content-type","application/json");let F=Q?.signal,U={method:W,headers:H,body:K,...F?{signal:F}:{}},N=async()=>{let B=await Y.proxyDaemonRequest(X,Z,U);if(Q?.map404to410&&B.status===404){try{await B.body?.cancel()}catch{}if(await Y.adoptLiveClaim({userId:J,projectRef:G},X))B=await Y.proxyDaemonRequest(X,Z,U);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",...G9}})}}let O=await B.text(),L=Q?.redactRepoDir?dt6(O):O,w=B.headers.get("content-type")??"application/json";return new Response(L,{status:B.status,headers:{"content-type":w,...G9}})};try{if(F){let B=N();return B.catch(()=>{}),await Promise.race([B,new Promise((L,w)=>{if(F.aborted)return w(F.reason);F.addEventListener("abort",()=>w(F.reason),{once:!0})})])}return await N()}catch(B){let O=B instanceof Error?B.message:String(B);return $.json({error:`Daemon unreachable: ${O}`},502)}}function dt6($){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 aC0($,Z,Q,Y="GET",X){let J=await $.proxyDaemonRequest(Z,Q,{method:Y,headers:new Headers,body:null});if(J.status===404&&X){try{await J.body?.cancel()}catch{}if(await $.adoptLiveClaim(X,Z))J=await $.proxyDaemonRequest(Z,Q,{method:Y,headers:new Headers,body:null})}if(J.status===404){try{await J.body?.cancel()}catch{}throw Error("SANDBOX_GONE")}let G=await J.text();if(!J.ok){let W=`Daemon error (${J.status})`;try{W=JSON.parse(G).error??W}catch{}throw Error(W)}return JSON.parse(G)}function it6($){return wY8.includes($)}var gt6,BY8=524288,DY8=65536,ut6=1e4,OY8=2000,lt6,sC0,G9,wY8,jY8=()=>{let $=new Z1;$.use("/:virtualMcpId/:branch/*",lt6),$.post("/:virtualMcpId/:branch/write",(Q)=>NQ(Q,"/_sandbox/write",{forwardJsonBody:!0,signal:ty(Q)})),$.post("/:virtualMcpId/:branch/unlink",(Q)=>NQ(Q,"/_sandbox/unlink",{forwardJsonBody:!0,signal:ty(Q)})),$.post("/:virtualMcpId/:branch/mkdir",(Q)=>NQ(Q,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:ty(Q)})),$.post("/:virtualMcpId/:branch/rename",(Q)=>NQ(Q,"/_sandbox/rename",{forwardJsonBody:!0,signal:ty(Q)})),$.post("/:virtualMcpId/:branch/read",(Q)=>NQ(Q,"/_sandbox/read",{forwardJsonBody:!0,signal:ty(Q)})),$.post("/:virtualMcpId/:branch/glob",(Q)=>NQ(Q,"/_sandbox/glob",{forwardJsonBody:!0,signal:ty(Q)})),$.post("/:virtualMcpId/:branch/grep",(Q)=>NQ(Q,"/_sandbox/grep",{forwardJsonBody:!0,signal:ty(Q)})),$.post("/:virtualMcpId/:branch/exec/:script",async(Q)=>{let Y=Q.req.param("script");if(!Y)return Q.json({error:"missing script name"},400);return NQ(Q,`/_sandbox/exec/${encodeURIComponent(Y)}`)}),$.post("/:virtualMcpId/:branch/exec/:script/kill",async(Q)=>{let Y=Q.req.param("script");if(!Y)return Q.json({error:"missing script name"},400);return NQ(Q,`/_sandbox/exec/${encodeURIComponent(Y)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(Q)=>NQ(Q,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDir:!0})),$.put("/:virtualMcpId/:branch/config",(Q)=>NQ(Q,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(Q)=>{let Y=Q.req.param("step");if(!Y||!it6(Y))return Q.json({error:`step must be one of: ${wY8.join(", ")}`},400);let X=Q.get("vmClaim"),J=await UD1(Q.var.studioContext,{claimName:X.claimName})==="gone"?null:await mt6(Q);if(!J)return Q.json({error:"sandbox not found: nothing is running at this ref"},404,G9);if(Y==="start"){let G=J0(Q.var.studioContext),W=Nd(X.virtualMcpMetadata);try{await TR0({ctx:Q.var.studioContext,runner:J,handle:X.claimName,orgId:G.id,userId:X.callerUserId,entries:W})}catch(K){let H=K instanceof Error?K.message:String(K);return Q.json({error:`Failed to push env to daemon: ${H}`},502)}}return NQ(Q,`/_sandbox/setup/${Y}`,{signal:Q.req.raw.signal,map404to410:!0,runner:J})}),$.get("/:virtualMcpId/:branch/events",(Q)=>{let Y=Q.get("vmClaim");if(!Y.runner)return DO(Q,async(X)=>{await X.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this studio instance."})})});return OQ8(Q,{ctx:Q.var.studioContext,claimName:Y.claimName,runner:Y.runner,virtualMcpId:Y.virtualMcpId,branch:Y.branch,userId:Y.userId,projectRef:Y.projectRef,virtualMcpMetadata:Y.virtualMcpMetadata})}),$.get("/:virtualMcpId/:branch/git/status",(Q)=>{if(Q.get("vmClaim").runtime==="cms")return LY8(Q);return Z(Q)});let Z=(Q)=>NQ(Q,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([Q.req.raw.signal,AbortSignal.timeout(OY8)])});return $.post("/:virtualMcpId/:branch/git/status",(Q)=>{if(Q.get("vmClaim").runtime==="cms")return LY8(Q);return NQ(Q,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([Q.req.raw.signal,AbortSignal.timeout(OY8)])})}),$.post("/:virtualMcpId/:branch/git/diff",async(Q)=>{let Y=Q.get("vmClaim");if(Y.runtime==="cms")try{let X=await Q.req.json().catch(()=>({})),J=await fp(Q),G=await oC0(J,Y.branch,X.base);return Q.json(G,200,G9)}catch(X){return fD1(Q,X)}return NQ(Q,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})}),$.post("/:virtualMcpId/:branch/git/publish",async(Q)=>{if(Q.get("vmClaim").runtime==="cms")return Q.json({ok:!0},200,G9);let Y=oy(Q);if(Y instanceof Response)return Y;let{claimName:X,virtualMcpMetadata:J,connectionIds:G}=Q.get("vmClaim"),W=Q.var.studioContext;return c60(X,async()=>{try{await ND1(W,Y,X);let K=l60(J,G);if(K)await NY8(W,Y,X,K)}catch(K){if(K instanceof Qz)return Q.json({error:K.message},403,G9);let H=K instanceof Error?K.message:String(K);return Q.json({error:H},502,G9)}return NQ(Q,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",async(Q)=>{let Y=Q.get("vmClaim");if(Y.runtime==="cms")return c60(Y.claimName,async()=>{let X=await Q.req.json().catch(()=>({})),J=Array.isArray(X.filepaths)?X.filepaths.filter((G)=>typeof G==="string"):[];if(J.length===0)return Q.json({error:"filepaths is required"},400,G9);try{let G=await fp(Q);return await KY8(G,Y.branch,J),Q.json({ok:!0},200,G9)}catch(G){let W=kW(G)===409||G instanceof s6?409:502,K=G instanceof Error?G.message:String(G);return Q.json({error:K},W,G9)}});return c60(Y.claimName,()=>NQ(Q,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(Q)=>{let Y=Q.get("vmClaim");if(Y.runtime==="cms")return c60(Y.claimName,async()=>{try{let W=await Q.req.json().catch(()=>({})),K=await fp(Q),H=W.base??await K.getDefaultBranch();return await rC0(K,Y.branch,H),Q.json({ok:!0},200,G9)}catch(W){return fD1(Q,W)}});let X=oy(Q);if(X instanceof Response)return X;let{claimName:J}=Q.get("vmClaim"),G=Q.var.studioContext;return c60(J,async()=>{try{await ND1(G,X,J)}catch(W){let K=W instanceof Error?W.message:String(W);return Q.json({error:K},502,G9)}return NQ(Q,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",x5({maxSize:BY8,onError:(Q)=>Q.json({error:"Payload too large"},413,G9)}),async(Q)=>{let Y=Q.get("vmClaim"),X=null;if(Y.runtime!=="cms"){let H=oy(Q);if(H instanceof Response)return H;X=H}let{claimName:J,userId:G,projectRef:W}=Y,K=Q.var.studioContext;try{let H=await Q.req.json().catch(()=>({})),F=H.status,U=H.diff,N=U!=null&&typeof U.diffs==="object"&&U.diffs!==null,[B,O]=OD1(F)&&N?[F,U]:X?await Promise.all([aC0(X,J,"/_sandbox/git/status","GET",{userId:G,projectRef:W}),aC0(X,J,"/_sandbox/git/diff","GET",{userId:G,projectRef:W})]):await(async()=>{let w=await fp(Q);return Promise.all([tC0(w,Y.branch),oC0(w,Y.branch)])})();await oG(K,J0(K).id,"suggesting a commit message");let L=await zQ8(K,B,O);return Q.json(L,200,G9)}catch(H){let F=H instanceof Error?H.message:String(H);if(F==="SANDBOX_GONE")return Q.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,G9);return Q.json({error:F},502,G9)}}),$.post("/:virtualMcpId/:branch/git/judge-review",x5({maxSize:BY8,onError:(Q)=>Q.json({error:"Payload too large"},413,G9)}),async(Q)=>{let Y=Q.get("vmClaim"),X=null;if(Y.runtime!=="cms"){let H=oy(Q);if(H instanceof Response)return H;X=H}let{claimName:J,userId:G,projectRef:W}=Y,K=Q.var.studioContext;try{let H=await Q.req.json().catch(()=>({})),F=H.status,U=H.diff,N=U!=null&&typeof U.diffs==="object"&&U.diffs!==null,[B,O]=OD1(F)&&N?[F,U]:X?await Promise.all([aC0(X,J,"/_sandbox/git/status","GET",{userId:G,projectRef:W}),aC0(X,J,"/_sandbox/git/diff","GET",{userId:G,projectRef:W})]):await(async()=>{let w=await fp(Q);return Promise.all([tC0(w,Y.branch),oC0(w,Y.branch)])})();await oG(K,J0(K).id,"judging whether a change needs review");let L=await AQ8(K,B,O,typeof H.language==="string"?H.language:void 0);return Q.json(L,200,G9)}catch(H){let F=H instanceof Error?H.message:String(H);if(F==="SANDBOX_GONE")return Q.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,G9);return Q.json({error:F},502,G9)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(Q)=>{let Y=oy(Q);if(Y instanceof Response)return Y;let{claimName:X}=Q.get("vmClaim"),J=Q.req.query("path");if(!J||!J.startsWith("/")||J.startsWith("//")||J.includes("..")||J.includes("\\"))return Q.json({error:"Path not allowed"},403);let G;try{G=await Y.getPreviewUrl(X)}catch{return Q.json({error:"Preview not available"},502)}if(!G)return Q.json({error:"Preview not available"},502);let W=G.replace(/\/+$/,"");return xD1(Q,`${W}${J}`)}),$.post("/:virtualMcpId/:branch/preview-invoke",x5({maxSize:DY8,onError:(Q)=>Q.json({error:"Payload too large"},413)}),async(Q)=>{let Y=oy(Q);if(Y instanceof Response)return Y;let{claimName:X}=Q.get("vmClaim"),J;try{J=await Y.getPreviewUrl(X)}catch{return Q.json({error:"Preview not available"},502)}if(!J)return Q.json({error:"Preview not available"},502);let G;try{G=await Q.req.json()}catch{return Q.json({error:"Invalid JSON body"},400)}if(!G||typeof G!=="object"||Array.isArray(G))return Q.json({error:"Invalid JSON body"},400);let W=_D1(G);if(!W)return Q.json({error:"Invalid or missing __resolveType"},400);let K=vD1(J,W.resolveType);return xD1(Q,K,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(W.payload),signal:AbortSignal.timeout(30000)})}),$.post("/:virtualMcpId/:branch/catalog-invoke",x5({maxSize:DY8,onError:(Q)=>Q.json({error:"Payload too large"},413)}),async(Q)=>{let{runner:Y,claimName:X,virtualMcpMetadata:J}=Q.get("vmClaim"),G;try{G=Y?await Y.getPreviewUrl(X):Bd(J)}catch{return Q.json({error:"Preview not available"},502)}if(!G)return Q.json({error:"Preview not available"},502);let W;try{W=await Q.req.json()}catch{return Q.json({error:"Invalid JSON body"},400)}if(!W||typeof W!=="object"||Array.isArray(W))return Q.json({error:"Invalid JSON body"},400);let K=_D1(W);if(!K)return Q.json({error:"Invalid or missing __resolveType"},400);if(!HY8(K.resolveType))return Q.json({error:"resolveType not allowed"},403);let H=vD1(G,K.resolveType);return xD1(Q,H,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(K.payload),signal:AbortSignal.timeout(30000)})}),$};var EY8=D(()=>{J8();QK();Sp();FD1();Ud();NQ8();gW();Dd();BQ8();fW();WH();DQ8();LQ8();L71();L$0();jD1();TQ8();Q7();T5();CD1();FY8();MR0();bD1();gt6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;lt6=fC0(async($,Z)=>{let Q=$.var.studioContext;try{n(Q)}catch{return $.json({error:"Unauthorized"},401)}let Y=p0(Q);if(!Y)return $.json({error:"Unauthorized"},401);let X;try{X=J0(Q)}catch{return $.json({error:"Organization scope required"},403)}let J=$.req.param("virtualMcpId"),G=$.req.param("branch");if(!J||!G)return $.json({error:"virtualMcpId and branch are required"},400);try{ht6(G)}catch(L){let w=L instanceof Error?L.message:String(L);return $.json({error:w},400)}let W=await Q.storage.virtualMcps.findById(J);if(!W||W.organization_id!==X.id)return $.json({error:"Virtual MCP not found"},404);let K=z10({orgId:X.id,virtualMcpId:J,branch:G}),H=await g91(Q,G),F=h91(H,Y),U=UQ8({userId:F,projectRef:K}),N=W.metadata??null,B=await ct6($,{claimName:U,branch:G,virtualMcpId:J,sandboxUserId:F,virtualMcpMetadata:N,branchThread:H});if(B==="cms")return $.set("vmClaim",{claimName:U,callerUserId:Y,runner:null,virtualMcpId:J,branch:G,userId:F,projectRef:K,virtualMcpMetadata:N,connectionIds:W.connections?.map((L)=>L.connection_id)??[],runtime:B}),Z();let O;try{O=await gX(Q)}catch{O=null}if(!O)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:U,callerUserId:Y,runner:O,virtualMcpId:J,branch:G,userId:F,projectRef:K,virtualMcpMetadata:N,connectionIds:W.connections?.map((L)=>L.connection_id)??[],runtime:B}),Z()});sC0=new Map;G9={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};wY8=["clone","install","start"]});function zY8($,Z,Q){let Y=yD1.get($);if(!Y)Y={pending:null,running:!1},yD1.set($,Y);if(!Y.pending)Y.pending={set:new Map,del:new Set,deps:Z,resolvers:[],rejecters:[]};let X=Y.pending;X.deps=Z;for(let[G,W]of Object.entries(Q.set??{}))X.set.set(G,W),X.del.delete(G);for(let G of Q.delete??[])X.del.add(G),X.set.delete(G);let J=new Promise((G,W)=>{X.resolvers.push(G),X.rejecters.push(W)});if(!Y.running)nt6($,Y);return J}async function nt6($,Z){Z.running=!0;try{while(Z.pending){let Q=Z.pending;Z.pending=null;try{let Y=await tt6(Q);for(let X of Q.resolvers)X(Y)}catch(Y){for(let X of Q.rejecters)X(Y)}}}finally{if(Z.running=!1,!Z.pending)yD1.delete($)}}async function tt6($){let{client:Z,branch:Q,packagePath:Y}=$.deps,X=new Map;for(let J=0;;J++){let G=await xp(Z,Q),W=await Z.listDecofileEntries(G,Y),K=VD1(W,Y),H=[],F=new Map(K.map((N)=>[N.path,{stem:N.stem,sha:N.sha}]));for(let[N,B]of $.set){let O=kD1(K,N),L=`${JSON.stringify(B,null,2)}
3736
3736
  `;await YY8(Z.repo,L);let w=O[0]??`${iC0(Y)}/${PD1(N)}.json`;H.push({path:w,content:L});let j=w.slice(w.lastIndexOf("/")+1,-5);F.set(w,{stem:j,content:L});for(let E of O.slice(1))H.push({path:E,deleted:!0}),F.delete(E)}for(let N of $.del)for(let B of kD1(K,N))H.push({path:B,deleted:!0}),F.delete(B);if(H.length===0)return G;let U=Y?`${Y}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((N)=>N.type==="blob"&&N.path===U)){let N=await XY8(Z,F.values(),X),{decofile:B,skipped:O}=b60(N);if(O.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:KH(Z.repo),branch:Q,packagePath:Y,blocks:O.map((L)=>L.key)});H.push({path:U,content:B})}try{let{sha:N}=await Z.commitFiles({branch:Q,message:ot6($),expectedHead:G,changes:H});return N}catch(N){if(!(N instanceof s6)||J>=pt6-1)throw N;await O$(N7(2000,200,J,2,0.5))}}}function ot6($){let Z=(X)=>{let J=X.slice(0,3).join(", ");return X.length>3?`${J} (+${X.length-3} more)`:J},Q=[];if($.set.size>0)Q.push(`update ${Z([...$.set.keys()])}`);if($.del.size>0)Q.push(`delete ${Z([...$.del])}`);let Y=`chore(decofile): ${Q.join("; ")}`;return w51(Y,$.deps.coAuthor)}var pt6=3,yD1;var PY8=D(()=>{pA0();hC0();i4();a$();Q7();pC0();yD1=new Map});import{createHmac as AY8,randomBytes as rt6,timingSafeEqual as st6}from"crypto";function TY8(){if(eC0)return eC0;let $;try{let Z=E0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return eC0=$?Buffer.from($):rt6(32),eC0}function gD1($){let Z=$.nowMs??Date.now(),Q={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+at6)/1000)},Y=Buffer.from(JSON.stringify(Q)).toString("base64url"),X=AY8("sha256",TY8()).update(Y).digest("base64url");return`${Y}.${X}`}function RY8($,Z){let Q=$.indexOf(".");if(Q<0)return!1;let Y=$.slice(0,Q),X=Buffer.from($.slice(Q+1)),J=Buffer.from(AY8("sha256",TY8()).update(Y).digest("base64url"));if(X.length!==J.length||!st6(X,J))return!1;let G;try{G=JSON.parse(Buffer.from(Y,"base64url").toString())}catch{return!1}let W=Math.floor((Z.nowMs??Date.now())/1000);return G.o===Z.organizationId&&G.m===Z.virtualMcpId&&G.b===Z.branch&&typeof G.e==="number"&&G.e>=W}var at6=21600000,eC0=null;var qY8=D(()=>{X$()});function $_0($){return $&&typeof $==="object"&&!Array.isArray($)?$:null}function et6($){for(let[Z,Q]of Object.entries($)){if(!Z.startsWith("collections/blog/posts/"))continue;let Y=$_0(Q)?.__resolveType;if(typeof Y==="string"&&Y)return Y}return"blog/loaders/Blogpost.ts"}function MY8($){let Z;try{Z=$_0(JSON.parse($))}catch{return $}if(!Z)return $;let Q=et6(Z),Y={...Z},X=0;for(let[J,G]of Object.entries(Z)){if(!J.startsWith("blog-manager/posts/"))continue;let W=$_0(G),K=W&&$_0(W.post);if(!K)continue;if(K.status==="archived")continue;if(typeof K.slug!=="string"||!K.slug)continue;let F=`collections/blog/posts/${J.slice(19)}`;if(Object.hasOwn(Y,F))continue;Y[F]={name:F,__resolveType:Q,["post"]:{...K,status:"published"}},X++}return X>0?JSON.stringify(Y):$}import{z as yp}from"zod";function Zo6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&$o6.test($)}function CY8($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function m60($){let Z=$.get("decofileScope");return Om($.var.studioContext,Z.organizationId,Z.repository)}function d60($,Z){let Q=Z instanceof Error?Z.message:String(Z);if(Z instanceof s6)return $.json({error:Q},409);let Y=kW(Z);if(Y!==null){let X=Y===404?404:Y===409||Y===422?409:502;return $.json({error:Q},X)}return $.json({error:Q},500)}function _Y8(){let $=new Z1;return $.use("/:virtualMcpId/:branch",SY8),$.use("/:virtualMcpId/:branch/*",SY8),$.get("/:virtualMcpId/:branch",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await m60(Z),X=await JY8(Y,Q.branch,Q.packagePath,{createBranchIfMissing:!!Q.userId}),J={ETag:`"${X.sha}"`,"Cache-Control":"no-store","Access-Control-Allow-Origin":"*"};if(Z.req.header("if-none-match")===`"${X.sha}"`)return Z.body(null,304,J);if(!Q.userId)return Z.body(MY8(X.decofile),200,{...J,"content-type":"application/json"});let G=gD1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.body(`{"version":${JSON.stringify(X.sha)},"token":${JSON.stringify(G)},"apiHost":${JSON.stringify(CY8(Z))},"decofile":${X.decofile}}`,200,{...J,"content-type":"application/json"})}catch(Y){return d60(Z,Y)}}),$.get("/:virtualMcpId/:branch/meta",async(Z)=>{let Q=Z.get("decofileScope"),Y=Q.packagePath?`${Q.packagePath}/.deco/meta.gen.json`:".deco/meta.gen.json";try{let X=await m60(Z),J=await X.readFileAtRef(Q.branch,Y);if(J===null){let G=await X.getDefaultBranch();if(G!==Q.branch)J=await X.readFileAtRef(G,Y)}if(J===null)return Z.json({error:"meta.gen.json not committed"},404);return Z.body(J,200,{"content-type":"application/json","Cache-Control":"no-store","Access-Control-Allow-Origin":"*"})}catch(X){return d60(Z,X)}}),$.patch("/:virtualMcpId/:branch",Yo6,async(Z)=>{let Q=Z.get("decofileScope"),Y=Z.var.studioContext,X=Xo6.safeParse(await Z.req.json().catch(()=>null));if(!X.success)return Z.json({error:"Invalid body",details:X.error.issues},400);let J;try{J=x60(X.data)}catch(G){if(G instanceof f60)return Z.json({error:G.message},400);throw G}for(let G of[...Object.keys(J.set??{}),...J.delete??[]])try{gC0(G)}catch(W){let K=W instanceof Error?W.message:String(W);return Z.json({error:K},400)}for(let[G,W]of Object.entries(J.set??{})){if(typeof W!=="object"||W===null||Array.isArray(W))return Z.json({error:`Block "${G}" must be a JSON object`},400);if(zD1(G))return Z.json({error:`Block key "${G}" collides with a framework resolver module and cannot be written`},400)}try{let G=await m60(Z),W=await zY8(`${Q.organizationId}/${Q.virtualMcpId}/${Q.branch}`,{client:G,branch:Q.branch,packagePath:Q.packagePath,coAuthor:Cp(Y)},J),K=gD1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.json({version:W,token:K,apiHost:CY8(Z)})}catch(G){return d60(Z,G)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await m60(Z),X=await Y.getDefaultBranch();if(X===Q.branch)return Z.json({error:"Branch is already the default branch"},400);let J=`chore(decofile): publish ${Q.branch}`;try{let G;try{G=await Y.mergeBranches(X,Q.branch,J)}catch(W){if(kW(W)!==409)throw W;await rC0(Y,Q.branch,X),G=await Y.mergeBranches(X,Q.branch,J)}return G?Z.json({result:"merged",sha:G}):Z.json({result:"up-to-date"})}catch(G){if(kW(G)===409)return Z.json({error:"merge-conflict"},409);if(kW(G)===405){let K=await Y.findOpenChangeRequest(X,Q.branch)??await Y.createChangeRequest({base:X,head:Q.branch,title:`Publish ${Q.branch}`});return Z.json({result:"pull-request",number:K.number,url:K.url})}throw G}}catch(Y){return d60(Z,Y)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await m60(Z),X=await Y.getDefaultBranch();if(X===Q.branch)return Z.json({baseBranch:X,aheadBy:0,behindBy:0});try{let{aheadBy:J,behindBy:G}=await Y.compare(X,Q.branch);return Z.json({baseBranch:X,aheadBy:J,behindBy:G})}catch(J){if(kW(J)===404)return Z.json({baseBranch:X,aheadBy:0,behindBy:0});throw J}}catch(Y){return d60(Z,Y)}}),$}var $o6,IY8=500,VY8=1048576,kY8=1024,Qo6=8388608,Yo6,Xo6,SY8;var vY8=D(()=>{MR0();hC0();J8();QK();FD1();yC0();bD1();Q7();PY8();qY8();CD1();pC0();WH();$o6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;Yo6=x5({maxSize:Qo6,onError:($)=>$.json({error:"Payload too large"},413)}),Xo6=yp.object({set:yp.record(yp.string(),yp.unknown()).optional(),delete:yp.array(yp.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)<=IY8,{message:`Patch cannot touch more than ${IY8} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=VY8),{message:`Each block must be at most ${VY8} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=kY8),{message:`Each block key must be at most ${kY8} characters`}),SY8=fC0(async($,Z)=>{let Q=$.var.studioContext,Y=Q.organization;if(!Y)return $.json({error:"Organization scope required"},500);let X=$.req.param("virtualMcpId"),J=$.req.param("branch");if(!X||!J)return $.json({error:"virtualMcpId and branch are required"},400);if(!Zo6(J))return $.json({error:`Invalid branch name: ${J}`},400);let G=Q.auth?.user?.id??null;if(!G){let B=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!B||!RY8(B,{organizationId:Y.id,virtualMcpId:X,branch:J}))return $.json({error:"Unauthorized"},401)}if(!await IJ(Q,Y.id,"cms"))return $.json({error:"This organization's plan does not include the CMS",code:"feature_not_in_plan"},403);let W=await Q.storage.virtualMcps.findById(X);if(!W||W.organization_id!==Y.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!Bd(K))return $.json({error:"Project has no preview server configured"},404);let F=W.connections?.map((B)=>B.connection_id)??[],U=l60(K,F);if(!U)return $.json({error:"Project has no repository"},404);let N=K?.runtime;return $.set("decofileScope",{organizationId:Y.id,virtualMcpId:X,branch:J,packagePath:N?.path?.replace(/^\/+|\/+$/g,"")||null,repository:U,userId:G}),Z()})});var bY8=($)=>{let Z=new Z1;if(Z.use("*",Kp),Z.use("*",J58),Z.route("/",Y58($.voiceSessions)),Z.route("/",iS0()),Z.route("/",l58()),Z.route("/",I58()),Z.route("/",r78()),Z.route("/",a78()),Z.route("/",c78()),Z.route("/",t78()),Z.route("/",d78()),Z.route("/",vC0()),Z.route("/tools",JQ8()),Z.route("/",QQ8()),Z.route("/",z78({kvStorage:$.kvStorage})),Z.route("/",j78()),Z.route("/fs",v78({getConnection:$.getNatsConnection})),Z.route("/sandbox",jY8()),Z.route("/decofile",_Y8()),Z.route("/",h78()),Z.route("/",x78()),Z.route("/deco-sites",nS0()),Z.route("/hosting",L58()),Z.route("/monitor",T58()),Z.route("/sso",uS0()),Z.route("/",bC0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",U58()),$.mountDevAssets)Z.route("/dev-assets",sS0({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("/",H88()),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",y78()),Z.route("/mcp",fM0()),Z.route("/mcp/self",kC0()),Z.route("/mcp",hM0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var xY8=D(()=>{J8();X58();G58();VS0();N58();CN1();w58();R58();aS0();rE();MN1();fN1();E78();P78();b78();f78();q80();jN1();uM0();ZD1();g78();u78();m78();i78();XD1();s78();e78();YQ8();JD1();GQ8();GD1();yM0();EY8();vY8()});import{z as ry}from"zod";class hD1{adapter;getConnection;kvPromise;constructor($,Z){this.adapter=$;this.getConnection=Z}kv(){let $=this.getConnection();if(!$||$.isClosed())throw new q1(503,{message:"Voice transport is unavailable"});return this.kvPromise??=new gY8.Kvm(Z_0.jetstream($)).create("STUDIO_VOICE_SESSIONS",{storage:Z_0.StorageType.Memory,ttl:hY8.nanos(VD),max_bytes:10485760}).catch((Z)=>{throw this.kvPromise=void 0,Z}),this.kvPromise}async conversationAgent($){let Z=await this.kv(),Q=`agent.${$.conversationKey}`,Y=Date.now()+45000;while(Date.now()<Y){let X=await Z.get(Q),J=X?.operation==="PUT"?yY8.parse(X.json()):null;if(J?.state==="ready")return J.agentId;if(J?.state==="creating"&&J.expiresAt>Date.now()){await O$(200);continue}let G=fY8.encode(JSON.stringify({state:"creating",expiresAt:Date.now()+40000})),W;try{W=X&&J?await Z.update(Q,G,X.revision):await Z.create(Q,G)}catch{await O$(200);continue}try{let K=await $.ensureConversationAgent();return await Z.update(Q,fY8.encode(JSON.stringify({state:"ready",agentId:K})),W),K}catch(K){throw await Z.delete(Q,{previousSeq:W}).catch(()=>{}),K}}throw new q1(503,{message:"Voice conversation is starting; try again"})}async createSession($){let Z=this.adapter.forConversationModel($.model),Q=await this.conversationAgent(Z);try{return{provider:"elevenlabs",conversationToken:await Z.createConversationToken(Q)}}catch(Y){let X=await this.kv(),J=`agent.${Z.conversationKey}`,G=await X.get(J),W=G?.operation==="PUT"?yY8.parse(G.json()):null;if(G&&W?.state==="ready"&&W.agentId===Q)await X.delete(J,{previousSeq:G.revision}).catch(()=>{});throw Y}}}var Z_0,gY8,hY8,fY8,yY8;var uY8=D(()=>{OJ();fU();a$();Z_0=C(LK(),1),gY8=C(YA(),1),hY8=C(Az(),1),fY8=new TextEncoder,yY8=ry.discriminatedUnion("state",[ry.object({state:ry.literal("ready"),agentId:ry.string()}),ry.object({state:ry.literal("creating"),expiresAt:ry.number()})])});import{z as gp}from"zod";function Jo6($){return{model:$.model,instructions:`${aR$}
3737
- Start in ${$.language==="pt"?"Brazilian Portuguese":"English"}, and follow the user's language.`,delegation:{type:"client"},audio:{output:{voice:$.voice}},store:!1}}class uD1{config;constructor($){this.config=$}async createSession(){return{provider:"openai",transport:"webrtc"}}async negotiate($){let Z=await fetch("https://api.openai.com/v1/live/sessions",{method:"POST",headers:{Authorization:`Bearer ${this.config.apiKey}`,"Content-Type":"application/json","OpenAI-Safety-Identifier":$.safetyIdentifier},body:JSON.stringify({session:Jo6({...this.config,language:$.language,model:$.model}),transport:{type:"webrtc",sdp:$.sdp}}),signal:AbortSignal.timeout(15000)});if(!Z.ok)throw await Z.body?.cancel(),Error(`OpenAI Live request failed (${Z.status})`);return{sdp:gp.object({session:gp.object({id:gp.string().min(1)}),transport:gp.object({type:gp.literal("webrtc"),sdp:gp.string().min(1).max(1e5)})}).parse(await Z.json()).transport.sdp}}}var lY8=D(()=>{fU()});var cY8;var mY8=D(()=>{cY8=[{name:"delegate_to_agent",description:"Submit a complete request to the selected Studio agent. Returns after acceptance while work continues in the background. Results arrive later.",parameters:{type:"object",properties:{request:{type:"string",description:"The complete user request, with relevant conversational details. Preserve intent and constraints."}},required:["request"]}},{name:"get_agent_status",description:"Read the current chat's work status and known results. This does not track independent organization tasks; delegate fresh task-status queries to the Studio agent. Use when asked, never poll.",parameters:{type:"object",properties:{}}},{name:"stop_agent_work",description:"Request cancellation in the current chat ONLY when the user explicitly asks. Speaking over the companion is not cancellation. To stop independent tasks, delegate that request to the Studio agent.",parameters:{type:"object",properties:{}}}]});function lD1($){return{conversation_config:{agent:{first_message:"",language:"en",prompt:{prompt:rR$,llm:$.conversationModel,thinking_budget:0,max_tokens:512,tools:cY8.map((Z)=>({...Z,type:"client",expects_response:!0,response_timeout_secs:Z.name==="delegate_to_agent"?20:5,...Z.name==="delegate_to_agent"?{execution_mode:"async",interruption_mode:"allow",pre_tool_speech:"off"}:{}}))}},asr:{provider:"scribe_realtime",quality:"high"},turn:{turn_eagerness:"normal",turn_timeout:-1,silence_end_call_timeout:-1},tts:{voice_id:$.voiceId,model_id:$.model},conversation:{max_duration_seconds:VD/1000,client_events:["audio","interruption","user_transcript","agent_response","client_tool_call","vad_score"]}},platform_settings:{auth:{enable_auth:!0},privacy:{record_voice:!1,retention_days:1,delete_audio:!0,delete_transcript_and_pii:!0},overrides:{conversation_config_override:{agent:{language:!0}}}}}}var dY8=D(()=>{fU();mY8()});import{z as nX}from"zod";import{createHash as Go6,createHmac as Wo6}from"crypto";class Q_0{config;conversationKey;configurationKey;constructor($){this.config=$;this.configurationKey=Go6("sha256").update(JSON.stringify(lD1($))).digest("hex"),this.conversationKey=Wo6("sha256",$.apiKey).update(this.configurationKey).digest("hex")}forConversationModel($){return $===this.config.conversationModel?this:new Q_0({...this.config,conversationModel:$})}async request($,Z,Q){let Y=await fetch(`https://api.elevenlabs.io/v1${$}`,{method:Z===void 0?"GET":"POST",headers:{"xi-api-key":this.config.apiKey,"Content-Type":"application/json"},body:JSON.stringify(Z),signal:Q});if(!Y.ok)throw await Y.body?.cancel(),Error(`ElevenLabs request failed (${Y.status})`);return Y}async ensureConversationAgent(){let $=`Studio voice ${this.configurationKey.slice(0,24)}`,Z=await this.request(`/convai/agents?search=${encodeURIComponent($)}&page_size=100`,void 0,AbortSignal.timeout(15000)),{agents:Q}=nX.object({agents:nX.array(nX.object({agent_id:nX.string(),name:nX.string()}))}).parse(await Z.json()),Y=Q.find((J)=>J.name===$);if(Y){let J=await this.request(`/convai/agents/${encodeURIComponent(Y.agent_id)}`,void 0,AbortSignal.timeout(15000));return nX.object({platform_settings:nX.object({auth:nX.object({enable_auth:nX.literal(!0)})})}).parse(await J.json()),Y.agent_id}let X=await this.request("/convai/agents/create",{name:$,...lD1(this.config)},AbortSignal.timeout(15000));return nX.object({agent_id:nX.string().min(1)}).parse(await X.json()).agent_id}async createConversationToken($){let Z=await this.request(`/convai/conversation/token?agent_id=${encodeURIComponent($)}`,void 0,AbortSignal.timeout(15000));return nX.object({token:nX.string().min(1)}).parse(await Z.json()).token}async createTranscriptionToken(){let $=await this.request("/single-use-token/realtime_scribe",{},AbortSignal.timeout(15000));return nX.object({token:nX.string().min(1)}).parse(await $.json()).token}synthesize($,Z){return this.request(`/text-to-speech/${encodeURIComponent(this.config.voiceId)}/stream?output_format=mp3_44100_128`,{text:$,model_id:this.config.model},AbortSignal.any([Z,AbortSignal.timeout(60000)]))}}var iY8=D(()=>{dY8()});import{createHmac as Ko6,timingSafeEqual as Ho6}from"crypto";import{z as hp}from"zod";function nY8($,Z){if(!Z)throw Error("Voice requires a shared authentication secret");return Ko6("sha256",Z).update(`studio-voice-session:v1:${$}`).digest("base64url")}function tY8($,Z){let Q=Buffer.from(JSON.stringify(pY8.parse($))).toString("base64url");return`${Q}.${nY8(Q,Z)}`}function oY8($,Z,Q=Date.now()){if(!Z||$.length>4096)return null;let Y=$.split(".");if(Y.length!==2)return null;let[X,J]=Y;if(!X||!J)return null;let G=Buffer.from(nY8(X,Z)),W=Buffer.from(J);if(W.length!==G.length||!Ho6(W,G))return null;try{let K=pY8.safeParse(JSON.parse(Buffer.from(X,"base64url").toString()));if(!K.success||K.data.expiresAt<=Q||K.data.expiresAt>Q+VD)return null;return K.data}catch{return null}}var pY8;var rY8=D(()=>{fU();pY8=hp.object({sessionId:hp.string().uuid(),organizationId:hp.string().min(1).max(256),userId:hp.string().min(1).max(256),threadId:hp.string().min(1).max(256),expiresAt:hp.number().int().positive()})});import{z as cD1}from"zod";function sY8($,Z){if(Z?.voice_model!=null&&Z.voice_provider==null)throw Error("A voice model override requires a provider");let Q=Z?.voice_provider??$.voiceConversationProvider;return mD1.parse({provider:Q,model:Z?.voice_model??(Q==="openai"?$.openaiLiveModel:$.elevenlabsConversationModel)})}var mD1;var aY8=D(()=>{mD1=cD1.object({provider:cD1.enum(["elevenlabs","openai"]),model:cD1.string().trim().min(1).max(128)})});import{createHash as Fo6}from"crypto";import{z as up}from"zod";function lp($){return`user.${Fo6("sha256").update(JSON.stringify([$.organizationId,$.userId])).digest("hex")}`}class iD1{deps;kvPromise;constructor($){this.deps=$}kv(){let $=this.deps.getConnection();if(!$||$.isClosed())throw new q1(503,{message:"Voice transport is unavailable"});return this.kvPromise??=new eY8.Kvm(X_0.jetstream($)).create("STUDIO_VOICE_SESSIONS",{storage:X_0.StorageType.Memory,ttl:$X8.nanos(VD),max_bytes:10485760}).catch((Z)=>{throw this.kvPromise=void 0,Z}),this.kvPromise}adapter(){if(!this.deps.adapter)throw new q1(503,{message:"Voice is not configured on this deployment"});return this.deps.adapter}async create($,Z=!1,Q="en",Y){let X;if(Z)try{X=sY8(this.deps.defaults,Y)}catch{throw new q1(503,{message:"Voice configuration is invalid"})}let J=X?this.deps.conversationAdapters[X.provider]:this.adapter();if(!J)throw new q1(503,{message:"Voice is not configured on this deployment"});let G={...$,sessionId:crypto.randomUUID(),expiresAt:Date.now()+VD},W=tY8(G,this.deps.secret),K=await this.kv(),H=lp(G),F=await K.get(H),U=F?.operation==="PUT"?Y_0.parse(F.json()):null,N=dD1.encode(JSON.stringify({sessionId:G.sessionId,expiresAt:G.expiresAt,conversation:X,characters:0,requests:0}));try{if(F&&U&&U.expiresAt<=Date.now())await K.update(H,N,F.revision);else await K.create(H,N)}catch{throw new q1(409,{message:"Close your other voice session before starting a new one"})}try{if(X&&"createSession"in J){let O=await J.createSession({language:Q,model:X.model,safetyIdentifier:lp($)});return{token:W,...O,expiresAt:G.expiresAt}}let B=await this.adapter().createTranscriptionToken();return{token:W,transcriptionToken:B,expiresAt:G.expiresAt}}catch(B){throw await this.release(G),B}}authorize($,Z){let Q=oY8(Z,this.deps.secret);if(!Q||Q.organizationId!==$.organizationId||Q.userId!==$.userId||Q.threadId!==$.threadId)throw new q1(403,{message:"Invalid voice session"});return Q}async connect($,Z){let Q=this.authorize($,Z.token),Y=await this.kv(),X=lp(Q),J=await Y.get(X),G=J?.operation==="PUT"?Y_0.parse(J.json()):null;if(!J||!G||G.sessionId!==Q.sessionId||G.expiresAt<=Date.now())throw new q1(403,{message:"Voice session expired"});let W=G.conversation?this.deps.conversationAdapters[G.conversation.provider]:null;if(!W?.negotiate||!G.conversation)throw new q1(409,{message:"Voice session does not support SDP negotiation"});if(G.connected)throw new q1(409,{message:"Voice session already connected"});try{await Y.update(X,dD1.encode(JSON.stringify({...G,connected:!0})),J.revision)}catch{throw new q1(409,{message:"Voice session is busy"})}return W.negotiate({sdp:Z.sdp,language:Z.language,model:G.conversation.model,safetyIdentifier:X})}async speak($,Z,Q,Y){let X=this.authorize($,Z),J=await this.kv(),G=lp(X);for(let W=0;;W++){let K=await J.get(G),H=K?.operation==="PUT"?Y_0.parse(K.json()):null;if(!K||!H||H.sessionId!==X.sessionId||H.expiresAt<=Date.now())throw new q1(403,{message:"Voice session expired"});if(H.characters+Q.length>24000||H.requests>=120)throw new q1(429,{message:"Voice session speech limit reached"});try{await J.update(G,dD1.encode(JSON.stringify({...H,characters:H.characters+Q.length,requests:H.requests+1})),K.revision);break}catch{if(W>=2)throw new q1(409,{message:"Voice session is busy"})}}return this.adapter().synthesize(Q,Y)}async release($){let Z=await this.kv(),Q=await Z.get(lp($));if(Q?.operation==="PUT"&&Y_0.parse(Q.json()).sessionId===$.sessionId)await Z.delete(lp($),{previousSeq:Q.revision})}async revoke($,Z){await this.release(this.authorize($,Z))}}var X_0,eY8,$X8,Y_0,dD1;var ZX8=D(()=>{OJ();fU();rY8();aY8();X_0=C(LK(),1),eY8=C(YA(),1),$X8=C(Az(),1),Y_0=up.object({sessionId:up.string().uuid(),expiresAt:up.number(),connected:up.boolean().optional(),conversation:mD1.optional(),characters:up.number().int().nonnegative(),requests:up.number().int().nonnegative()}),dD1=new TextEncoder});function Uo6($){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 No6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},QX8=()=>{let $=new Z1;return $.use("*",No6),$.get("/",async(Z)=>{let Q=E0(),Y=Q.decoSupabaseUrl,X=Q.decoSupabaseServiceKey;if(!Y||!X)return Z.json({apps:[]});try{let J=await QG(Y,X,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:Uo6(J)})}catch(J){return console.error("[deco-apps] GET error:",J),Z.json({error:"Failed to fetch apps"},502)}}),$};var YX8=D(()=>{J8();X$();_k0()});import{z as y1}from"zod";function zN($,Z="invalid_request_error",Q=null,Y=null){return{error:{message:$,type:Z,param:Q,code:Y}}}function Ao6($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let Q=$.substring(0,Z),Y=$.substring(Z+1);if(!Q||!Y)return null;return{credentialId:Q,modelId:Y}}function To6($,Z,Q){try{return JSON.parse($)}catch{throw new GX8(`Invalid JSON in tool call arguments for function '${Q}' (tool_call_id: ${Z}): ${$}`)}}function Ro6($){let Z={};for(let Q of $)if(Q.role==="assistant"&&Q.tool_calls)for(let Y of Q.tool_calls)Z[Y.id]=Y.function.name;return $.map((Q)=>{switch(Q.role){case"system":return{role:"system",content:Q.content};case"user":if(typeof Q.content==="string")return{role:"user",content:Q.content};return{role:"user",content:Q.content.map((X)=>{if(X.type==="text")return{type:"text",text:X.text};return{type:"image",image:X.image_url.url}})};case"assistant":if(Q.tool_calls&&Q.tool_calls.length>0)return{role:"assistant",content:Q.tool_calls.map((X)=>({type:"tool-call",toolCallId:X.id,toolName:X.function.name,input:To6(X.function.arguments,X.id,X.function.name)}))};return{role:"assistant",content:Q.content??""};case"tool":let Y=Z[Q.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:Q.tool_call_id,toolName:Y,output:{type:"text",value:Q.content}}]}}})}function qo6($){let Z=$.map((Q)=>{let Y=Q.function.parameters?nF(Q.function.parameters):nF({type:"object",properties:{}});return[Q.function.name,n$({description:Q.function.description,inputSchema:Y})]});return Object.fromEntries(Z)}function Mo6($){if(!$)return;return{openai:{response_format:$}}}function Io6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function XX8($,Z,Q,Y,X,J){let G={model:$,instructions:Z.filter((W)=>W.role==="system"),messages:Z.filter((W)=>W.role!=="system"),tools:Q,temperature:Y.temperature,maxOutputTokens:Y.max_tokens,topP:Y.top_p,frequencyPenalty:Y.frequency_penalty,presencePenalty:Y.presence_penalty,stopSequences:Y.stop?Array.isArray(Y.stop)?Y.stop:[Y.stop]:void 0,abortSignal:J};return X?{...G,providerOptions:X}:G}function JX8($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var Bo6=256,Do6,Oo6,Lo6,wo6,jo6,Eo6,zo6,Po6,GX8,WX8,KX8;var HX8=D(()=>{y4();J8();Sp();vH();Do6=y1.object({type:y1.literal("function"),function:y1.object({name:y1.string(),description:y1.string().optional(),parameters:y1.record(y1.string(),y1.unknown()).optional()})}),Oo6=y1.object({id:y1.string(),type:y1.literal("function"),function:y1.object({name:y1.string(),arguments:y1.string()})}),Lo6=y1.discriminatedUnion("role",[y1.object({role:y1.literal("system"),content:y1.string(),name:y1.string().optional()}),y1.object({role:y1.literal("user"),content:y1.union([y1.string(),y1.array(y1.union([y1.object({type:y1.literal("text"),text:y1.string()}),y1.object({type:y1.literal("image_url"),image_url:y1.object({url:y1.string(),detail:y1.string().optional()})})]))]),name:y1.string().optional()}),y1.object({role:y1.literal("assistant"),content:y1.string().nullable().optional(),name:y1.string().optional(),tool_calls:y1.array(Oo6).optional()}),y1.object({role:y1.literal("tool"),content:y1.string(),tool_call_id:y1.string()})]),wo6=y1.object({type:y1.literal("text")}),jo6=y1.object({type:y1.literal("json_object")}),Eo6=y1.object({type:y1.literal("json_schema"),json_schema:y1.object({name:y1.string(),description:y1.string().optional(),schema:y1.record(y1.string(),y1.unknown()),strict:y1.boolean().optional()})}),zo6=y1.union([wo6,jo6,Eo6]),Po6=y1.object({model:y1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:y1.array(Lo6),stream:y1.boolean().optional().default(!1),temperature:y1.number().min(0).max(2).optional(),max_tokens:y1.number().positive().optional(),top_p:y1.number().min(0).max(1).optional(),frequency_penalty:y1.number().min(-2).max(2).optional(),presence_penalty:y1.number().min(-2).max(2).optional(),stop:y1.union([y1.string(),y1.array(y1.string())]).optional(),tools:y1.array(Do6).optional(),tool_choice:y1.union([y1.literal("auto"),y1.literal("none"),y1.literal("required"),y1.object({type:y1.literal("function"),function:y1.object({name:y1.string()})})]).optional(),response_format:zo6.optional(),user:y1.string().optional()});GX8=class GX8 extends Error{constructor($){super($);this.name="MessageConversionError"}};WX8=new Z1;WX8.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),Q=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(zN("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(zN("Organization context is required. Ensure your API key has organization metadata.","invalid_request_error","organization"),400);if((Z.organization.slug??Z.organization.id)!==Q)return $.json(zN("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Y=await $.req.json(),X=Po6.safeParse(Y);if(!X.success){let w=X.error.issues[0]??{message:"Invalid request",path:[]};return $.json(zN(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let J=X.data,G=Ao6(J.model);if(!G)return $.json(zN("Invalid model format. Expected 'model_id' or 'credential_id:model_id' (e.g., 'claude-sonnet-4-6' or 'key_abc123:claude-sonnet-4-6')","invalid_request_error","model"),400);let{credentialId:W}=G,{modelId:K}=G;if(!W){let j=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((E)=>jP(E.providerId));if(!j)return $.json(zN("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);W=j.id}let H;try{H=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(zN(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),U=Ro6(J.messages),N=J.tools?qo6(J.tools):void 0,B=Mo6(J.response_format),O=Io6(),L=Math.floor(Date.now()/1000);if(J.stream)return DO($,async(w)=>{let j=XX8(F,U,N,J,B,$.req.raw.signal);try{let E=Fd(j),z=!1,T=0,A="",P=async()=>{if(A.length===0)return;let q=A;A="",await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{content:q},finish_reason:null}]})})};for await(let q of E.stream){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:J.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(q.type==="text-delta"){if(A+=q.text,A.length>=Bo6)await P()}else if(q.type==="tool-call"){await P();let x=T++;await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{tool_calls:[{index:x,id:q.toolCallId,type:"function",function:{name:q.toolName,arguments:JSON.stringify(q.input)}}]},finish_reason:null}]})})}else if(q.type==="finish")await P(),await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{},finish_reason:JX8(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 P(),await w.writeSSE({data:"[DONE]"})}catch(E){let z=E;console.error("[openai-compat:stream] Error:",z.message),await w.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let w=XX8(F,U,N,J,B,$.req.raw.signal),j=await gU(w),E={role:"assistant",content:j.text||null};if(j.toolCalls&&j.toolCalls.length>0)E.tool_calls=j.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),E.content=null;return $.json({id:O,object:"chat.completion",created:L,model:J.model,choices:[{index:0,message:E,finish_reason:JX8(j.finishReason)}],usage:{prompt_tokens:j.usage?.inputTokens??0,completion_tokens:j.usage?.outputTokens??0,total_tokens:j.usage?.totalTokens??0}})}}catch(Y){let X=Y;if(X.name==="AbortError")return $.json(zN("Request aborted","invalid_request_error"),400);if(X.name==="MessageConversionError")return $.json(zN(X.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",X.message,X.stack),$.json(zN(X.message,"server_error"),500)}});KX8=WX8});function Vo6($){if(typeof $!=="object"||$===null)return!1;let Q=$.repository?.url;return typeof Q==="string"&&Q.length>0}function FX8(){let $=new Z1;return $.use("*",async(Z,Q)=>{await Q(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let Q=Z.get("studioContext"),Y=p0(Q);if(!Y)return Z.json({error:"Authentication required"},401);let J=(Z.req.query("site")??"").trim().toLowerCase();if(!wZ(J))return Z.json({error:"Invalid site slug"},400);let G=await Q.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","=",Y).execute(),W=[];for(let H of G){if(!H.slug||k9(H))continue;let F=await Q.storage.virtualMcps.list(H.id);for(let U of F){if(OA(U)!==J)continue;if(!Vo6(U.metadata))continue;W.push({orgSlug:H.slug,orgName:H.name??H.slug,project:{id:U.id,title:U.title,icon:U.icon??null}})}}let K={matches:W};return Z.json(K)}),$}var UX8=D(()=>{J8();aG()});var BX8;var NX8=D(()=>{BX8={name:"decocms",version:"4.430.1",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/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":"^4.0.58","@ai-sdk/google":"^4.0.76","@ai-sdk/openai":"^4.0.71","@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":"^3.1.0","@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":"^4.0.17","@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:"^7.0.107","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 Co6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??So6}}var DX8,So6="https://ph.studio.decocms.com",OX8;var LX8=D(()=>{J8();Vs();uf();I9();X$();XN1();NX8();DX8=new Z1;DX8.get("/",($)=>{let Z={version:BX8.version,theme:W5$(),...pK().logo&&{logo:pK().logo},...hD()&&{internalUrl:kp1()},...E0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!E0().firecrawlApiKey,hostingEnabled:!!E0().controlplaneRestUrl&&!!E0().controlplaneServiceToken,hostingControlPlaneGa:E0().hostingControlPlaneGa,monitorEnabled:!!E0().clickhouseAnalyticsUrl&&!!E0().clickhouseAnalyticsPassword,monitorGa:E0().monitorGa,plansEnabled:E0().plansEnabled,auth:Z68(),posthog:Co6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:MO()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});OX8=DX8});function sy($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function pD1($){return(sy($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((Q)=>Q.charAt(0).toUpperCase()+Q.slice(1)).join(" ")}function wX8($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(sy($))}&sz=${Z}`}function _o6($,Z){let Q=$.trim();if(Q.length<=Z)return Q;let Y=Q.slice(0,Z-1),X=Y.lastIndexOf(" ");return`${(X>Z*0.6?Y.slice(0,X):Y).trimEnd()}\u2026`}function jX8($){let{brand:Z,domain:Q,score:Y}=$,X=typeof Y==="number"?`${Z} Deco Score \u2014 ${Math.round(Y)}/100 \xB7 decocms`:`${Z} Deco Score \xB7 decocms`,J=_o6(`How does ${Q} really perform? See the full ${Z} Deco Score \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,200);return{title:X,description:J}}import{z as z$}from"zod";var vo6,EX8;var zX8=D(()=>{vo6=z$.object({check_id:z$.string(),title:z$.string(),description:z$.string().optional(),impact:z$.string().optional(),why:z$.string().optional(),category:z$.string(),severity:z$.string(),value_band:z$.string().optional(),value_driver:z$.string().optional(),controllability:z$.string().optional(),pages:z$.array(z$.string()),tasks:z$.array(z$.string()),evidence:z$.string(),sample_scope:z$.string().optional(),sources:z$.array(z$.string())}),EX8=z$.object({domain:z$.string(),brand:z$.string(),favicon:z$.string().optional(),scanned_at:z$.string().nullable(),lang:z$.string(),score:z$.number().nullable(),band:z$.string().nullable(),totals:z$.object({measured:z$.number(),registry_total:z$.number(),passed:z$.number(),failed:z$.number(),blocked:z$.number()}),buckets:z$.array(z$.object({id:z$.enum(["critical","important","worth"]),label:z$.string(),items:z$.array(vo6)})),passing:z$.object({count:z$.number(),items:z$.array(z$.object({check_id:z$.string(),title:z$.string()}))}),not_measured:z$.object({count:z$.number(),groups:z$.array(z$.object({reason:z$.string(),label:z$.string(),count:z$.number(),checks:z$.array(z$.string())}))}),categories:z$.array(z$.object({key:z$.string(),label:z$.string(),score:z$.number().nullable(),band:z$.string().nullable(),pass:z$.number(),fail:z$.number()})),screenshots:z$.array(z$.object({url:z$.string(),page_type:z$.string().optional(),viewport:z$.enum(["desktop","mobile"]),image_url:z$.string()}))})});function PX8($,Z,Q){let Y=Q?`?${new URLSearchParams({lang:Q}).toString()}`:"";return`${zW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}/onepager${Z}${Y}`}async function J_0($,Z={}){let Q=await fetch(PX8($,"",Z.lang),{headers:{Accept:"application/json"},signal:Z.signal});if(Q.status===404)return null;if(!Q.ok)throw Error(`onepager read HTTP ${Q.status}`);return EX8.parse(await Q.json())}async function AX8($,Z={}){let Q=await fetch(PX8($,".md",Z.lang),{headers:{Accept:"text/markdown"},signal:Z.signal});if(Q.status===404)return null;if(!Q.ok)throw Error(`onepager markdown HTTP ${Q.status}`);return Q.text()}var nD1=D(()=>{zX8();tB()});import{join as TX8}from"path";async function xo6($){try{let Z=await J_0($,{signal:AbortSignal.timeout(bo6)});if(!Z?.scanned_at)return null;return{brand:Z.brand.trim()||pD1($),...Z.score!==null?{score:Z.score}:{}}}catch{return null}}function GG($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function fo6($,Z){let Q=sy($),Y=Z?.brand?.trim()||pD1(Q),X=wX8(Q,128),G=`${(E0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(Q)}`,{title:W,description:K}=jX8({brand:Y,domain:Q,score:Z?.score}),H=`${G}/og.png`,F=`${Y} Deco Score by decocms`;return[`<title>${GG(W)}</title>`,`<meta name="description" content="${GG(K)}" />`,'<meta name="robots" content="noindex, follow" />','<meta property="og:type" content="website" />','<meta property="og:site_name" content="decocms" />',`<meta property="og:title" content="${GG(W)}" />`,`<meta property="og:description" content="${GG(K)}" />`,`<meta property="og:url" content="${GG(G)}" />`,`<meta property="og:image" content="${GG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${GG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${GG(W)}" />`,`<meta name="twitter:description" content="${GG(K)}" />`,`<meta name="twitter:image" content="${GG(H)}" />`,`<meta name="twitter:image:alt" content="${GG(F)}" />`,`<link rel="canonical" href="${GG(G)}" />`,`<link rel="alternate" type="text/markdown" href="${GG(G)}.md" />`,`<link rel="icon" href="${GG(X)}" sizes="any" />`].join(`
3737
+ Start in ${$.language==="pt"?"Brazilian Portuguese":"English"}, and follow the user's language.`,delegation:{type:"client"},audio:{output:{voice:$.voice}},store:!1}}class uD1{config;constructor($){this.config=$}async createSession(){return{provider:"openai",transport:"webrtc"}}async negotiate($){let Z=await fetch("https://api.openai.com/v1/live/sessions",{method:"POST",headers:{Authorization:`Bearer ${this.config.apiKey}`,"Content-Type":"application/json","OpenAI-Safety-Identifier":$.safetyIdentifier},body:JSON.stringify({session:Jo6({...this.config,language:$.language,model:$.model}),transport:{type:"webrtc",sdp:$.sdp}}),signal:AbortSignal.timeout(15000)});if(!Z.ok)throw await Z.body?.cancel(),Error(`OpenAI Live request failed (${Z.status})`);return{sdp:gp.object({session:gp.object({id:gp.string().min(1)}),transport:gp.object({type:gp.literal("webrtc"),sdp:gp.string().min(1).max(1e5)})}).parse(await Z.json()).transport.sdp}}}var lY8=D(()=>{fU()});var cY8;var mY8=D(()=>{cY8=[{name:"delegate_to_agent",description:"Submit a complete request to the selected Studio agent. Returns after acceptance while work continues in the background. Results arrive later.",parameters:{type:"object",properties:{request:{type:"string",description:"The complete user request, with relevant conversational details. Preserve intent and constraints."}},required:["request"]}},{name:"get_agent_status",description:"Read the current chat's work status and known results. This does not track independent organization tasks; delegate fresh task-status queries to the Studio agent. Use when asked, never poll.",parameters:{type:"object",properties:{}}},{name:"stop_agent_work",description:"Request cancellation in the current chat ONLY when the user explicitly asks. Speaking over the companion is not cancellation. To stop independent tasks, delegate that request to the Studio agent.",parameters:{type:"object",properties:{}}}]});function lD1($){return{conversation_config:{agent:{first_message:"",language:"en",prompt:{prompt:rR$,llm:$.conversationModel,thinking_budget:0,max_tokens:512,tools:cY8.map((Z)=>({...Z,type:"client",expects_response:!0,response_timeout_secs:Z.name==="delegate_to_agent"?20:5,...Z.name==="delegate_to_agent"?{execution_mode:"async",interruption_mode:"allow",pre_tool_speech:"off"}:{}}))}},asr:{provider:"scribe_realtime",quality:"high"},turn:{turn_eagerness:"normal",turn_timeout:-1,silence_end_call_timeout:-1},tts:{voice_id:$.voiceId,model_id:$.model},conversation:{max_duration_seconds:VD/1000,client_events:["audio","interruption","user_transcript","agent_response","client_tool_call","vad_score"]}},platform_settings:{auth:{enable_auth:!0},privacy:{record_voice:!1,retention_days:1,delete_audio:!0,delete_transcript_and_pii:!0},overrides:{conversation_config_override:{agent:{language:!0}}}}}}var dY8=D(()=>{fU();mY8()});import{z as nX}from"zod";import{createHash as Go6,createHmac as Wo6}from"crypto";class Q_0{config;conversationKey;configurationKey;constructor($){this.config=$;this.configurationKey=Go6("sha256").update(JSON.stringify(lD1($))).digest("hex"),this.conversationKey=Wo6("sha256",$.apiKey).update(this.configurationKey).digest("hex")}forConversationModel($){return $===this.config.conversationModel?this:new Q_0({...this.config,conversationModel:$})}async request($,Z,Q){let Y=await fetch(`https://api.elevenlabs.io/v1${$}`,{method:Z===void 0?"GET":"POST",headers:{"xi-api-key":this.config.apiKey,"Content-Type":"application/json"},body:JSON.stringify(Z),signal:Q});if(!Y.ok)throw await Y.body?.cancel(),Error(`ElevenLabs request failed (${Y.status})`);return Y}async ensureConversationAgent(){let $=`Studio voice ${this.configurationKey.slice(0,24)}`,Z=await this.request(`/convai/agents?search=${encodeURIComponent($)}&page_size=100`,void 0,AbortSignal.timeout(15000)),{agents:Q}=nX.object({agents:nX.array(nX.object({agent_id:nX.string(),name:nX.string()}))}).parse(await Z.json()),Y=Q.find((J)=>J.name===$);if(Y){let J=await this.request(`/convai/agents/${encodeURIComponent(Y.agent_id)}`,void 0,AbortSignal.timeout(15000));return nX.object({platform_settings:nX.object({auth:nX.object({enable_auth:nX.literal(!0)})})}).parse(await J.json()),Y.agent_id}let X=await this.request("/convai/agents/create",{name:$,...lD1(this.config)},AbortSignal.timeout(15000));return nX.object({agent_id:nX.string().min(1)}).parse(await X.json()).agent_id}async createConversationToken($){let Z=await this.request(`/convai/conversation/token?agent_id=${encodeURIComponent($)}`,void 0,AbortSignal.timeout(15000));return nX.object({token:nX.string().min(1)}).parse(await Z.json()).token}async createTranscriptionToken(){let $=await this.request("/single-use-token/realtime_scribe",{},AbortSignal.timeout(15000));return nX.object({token:nX.string().min(1)}).parse(await $.json()).token}synthesize($,Z){return this.request(`/text-to-speech/${encodeURIComponent(this.config.voiceId)}/stream?output_format=mp3_44100_128`,{text:$,model_id:this.config.model},AbortSignal.any([Z,AbortSignal.timeout(60000)]))}}var iY8=D(()=>{dY8()});import{createHmac as Ko6,timingSafeEqual as Ho6}from"crypto";import{z as hp}from"zod";function nY8($,Z){if(!Z)throw Error("Voice requires a shared authentication secret");return Ko6("sha256",Z).update(`studio-voice-session:v1:${$}`).digest("base64url")}function tY8($,Z){let Q=Buffer.from(JSON.stringify(pY8.parse($))).toString("base64url");return`${Q}.${nY8(Q,Z)}`}function oY8($,Z,Q=Date.now()){if(!Z||$.length>4096)return null;let Y=$.split(".");if(Y.length!==2)return null;let[X,J]=Y;if(!X||!J)return null;let G=Buffer.from(nY8(X,Z)),W=Buffer.from(J);if(W.length!==G.length||!Ho6(W,G))return null;try{let K=pY8.safeParse(JSON.parse(Buffer.from(X,"base64url").toString()));if(!K.success||K.data.expiresAt<=Q||K.data.expiresAt>Q+VD)return null;return K.data}catch{return null}}var pY8;var rY8=D(()=>{fU();pY8=hp.object({sessionId:hp.string().uuid(),organizationId:hp.string().min(1).max(256),userId:hp.string().min(1).max(256),threadId:hp.string().min(1).max(256),expiresAt:hp.number().int().positive()})});import{z as cD1}from"zod";function sY8($,Z){if(Z?.voice_model!=null&&Z.voice_provider==null)throw Error("A voice model override requires a provider");let Q=Z?.voice_provider??$.voiceConversationProvider;return mD1.parse({provider:Q,model:Z?.voice_model??(Q==="openai"?$.openaiLiveModel:$.elevenlabsConversationModel)})}var mD1;var aY8=D(()=>{mD1=cD1.object({provider:cD1.enum(["elevenlabs","openai"]),model:cD1.string().trim().min(1).max(128)})});import{createHash as Fo6}from"crypto";import{z as up}from"zod";function lp($){return`user.${Fo6("sha256").update(JSON.stringify([$.organizationId,$.userId])).digest("hex")}`}class iD1{deps;kvPromise;constructor($){this.deps=$}kv(){let $=this.deps.getConnection();if(!$||$.isClosed())throw new q1(503,{message:"Voice transport is unavailable"});return this.kvPromise??=new eY8.Kvm(X_0.jetstream($)).create("STUDIO_VOICE_SESSIONS",{storage:X_0.StorageType.Memory,ttl:$X8.nanos(VD),max_bytes:10485760}).catch((Z)=>{throw this.kvPromise=void 0,Z}),this.kvPromise}adapter(){if(!this.deps.adapter)throw new q1(503,{message:"Voice is not configured on this deployment"});return this.deps.adapter}async create($,Z=!1,Q="en",Y){let X;if(Z)try{X=sY8(this.deps.defaults,Y)}catch{throw new q1(503,{message:"Voice configuration is invalid"})}let J=X?this.deps.conversationAdapters[X.provider]:this.adapter();if(!J)throw new q1(503,{message:"Voice is not configured on this deployment"});let G={...$,sessionId:crypto.randomUUID(),expiresAt:Date.now()+VD},W=tY8(G,this.deps.secret),K=await this.kv(),H=lp(G),F=await K.get(H),U=F?.operation==="PUT"?Y_0.parse(F.json()):null,N=dD1.encode(JSON.stringify({sessionId:G.sessionId,expiresAt:G.expiresAt,conversation:X,characters:0,requests:0}));try{if(F&&U&&U.expiresAt<=Date.now())await K.update(H,N,F.revision);else await K.create(H,N)}catch{throw new q1(409,{message:"Close your other voice session before starting a new one"})}try{if(X&&"createSession"in J){let O=await J.createSession({language:Q,model:X.model,safetyIdentifier:lp($)});return{token:W,...O,expiresAt:G.expiresAt}}let B=await this.adapter().createTranscriptionToken();return{token:W,transcriptionToken:B,expiresAt:G.expiresAt}}catch(B){throw await this.release(G),B}}authorize($,Z){let Q=oY8(Z,this.deps.secret);if(!Q||Q.organizationId!==$.organizationId||Q.userId!==$.userId||Q.threadId!==$.threadId)throw new q1(403,{message:"Invalid voice session"});return Q}async connect($,Z){let Q=this.authorize($,Z.token),Y=await this.kv(),X=lp(Q),J=await Y.get(X),G=J?.operation==="PUT"?Y_0.parse(J.json()):null;if(!J||!G||G.sessionId!==Q.sessionId||G.expiresAt<=Date.now())throw new q1(403,{message:"Voice session expired"});let W=G.conversation?this.deps.conversationAdapters[G.conversation.provider]:null;if(!W?.negotiate||!G.conversation)throw new q1(409,{message:"Voice session does not support SDP negotiation"});if(G.connected)throw new q1(409,{message:"Voice session already connected"});try{await Y.update(X,dD1.encode(JSON.stringify({...G,connected:!0})),J.revision)}catch{throw new q1(409,{message:"Voice session is busy"})}return W.negotiate({sdp:Z.sdp,language:Z.language,model:G.conversation.model,safetyIdentifier:X})}async speak($,Z,Q,Y){let X=this.authorize($,Z),J=await this.kv(),G=lp(X);for(let W=0;;W++){let K=await J.get(G),H=K?.operation==="PUT"?Y_0.parse(K.json()):null;if(!K||!H||H.sessionId!==X.sessionId||H.expiresAt<=Date.now())throw new q1(403,{message:"Voice session expired"});if(H.characters+Q.length>24000||H.requests>=120)throw new q1(429,{message:"Voice session speech limit reached"});try{await J.update(G,dD1.encode(JSON.stringify({...H,characters:H.characters+Q.length,requests:H.requests+1})),K.revision);break}catch{if(W>=2)throw new q1(409,{message:"Voice session is busy"})}}return this.adapter().synthesize(Q,Y)}async release($){let Z=await this.kv(),Q=await Z.get(lp($));if(Q?.operation==="PUT"&&Y_0.parse(Q.json()).sessionId===$.sessionId)await Z.delete(lp($),{previousSeq:Q.revision})}async revoke($,Z){await this.release(this.authorize($,Z))}}var X_0,eY8,$X8,Y_0,dD1;var ZX8=D(()=>{OJ();fU();rY8();aY8();X_0=C(LK(),1),eY8=C(YA(),1),$X8=C(Az(),1),Y_0=up.object({sessionId:up.string().uuid(),expiresAt:up.number(),connected:up.boolean().optional(),conversation:mD1.optional(),characters:up.number().int().nonnegative(),requests:up.number().int().nonnegative()}),dD1=new TextEncoder});function Uo6($){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 No6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},QX8=()=>{let $=new Z1;return $.use("*",No6),$.get("/",async(Z)=>{let Q=E0(),Y=Q.decoSupabaseUrl,X=Q.decoSupabaseServiceKey;if(!Y||!X)return Z.json({apps:[]});try{let J=await QG(Y,X,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:Uo6(J)})}catch(J){return console.error("[deco-apps] GET error:",J),Z.json({error:"Failed to fetch apps"},502)}}),$};var YX8=D(()=>{J8();X$();_k0()});import{z as y1}from"zod";function zN($,Z="invalid_request_error",Q=null,Y=null){return{error:{message:$,type:Z,param:Q,code:Y}}}function Ao6($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let Q=$.substring(0,Z),Y=$.substring(Z+1);if(!Q||!Y)return null;return{credentialId:Q,modelId:Y}}function To6($,Z,Q){try{return JSON.parse($)}catch{throw new GX8(`Invalid JSON in tool call arguments for function '${Q}' (tool_call_id: ${Z}): ${$}`)}}function Ro6($){let Z={};for(let Q of $)if(Q.role==="assistant"&&Q.tool_calls)for(let Y of Q.tool_calls)Z[Y.id]=Y.function.name;return $.map((Q)=>{switch(Q.role){case"system":return{role:"system",content:Q.content};case"user":if(typeof Q.content==="string")return{role:"user",content:Q.content};return{role:"user",content:Q.content.map((X)=>{if(X.type==="text")return{type:"text",text:X.text};return{type:"image",image:X.image_url.url}})};case"assistant":if(Q.tool_calls&&Q.tool_calls.length>0)return{role:"assistant",content:Q.tool_calls.map((X)=>({type:"tool-call",toolCallId:X.id,toolName:X.function.name,input:To6(X.function.arguments,X.id,X.function.name)}))};return{role:"assistant",content:Q.content??""};case"tool":let Y=Z[Q.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:Q.tool_call_id,toolName:Y,output:{type:"text",value:Q.content}}]}}})}function qo6($){let Z=$.map((Q)=>{let Y=Q.function.parameters?nF(Q.function.parameters):nF({type:"object",properties:{}});return[Q.function.name,n$({description:Q.function.description,inputSchema:Y})]});return Object.fromEntries(Z)}function Mo6($){if(!$)return;return{openai:{response_format:$}}}function Io6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function XX8($,Z,Q,Y,X,J){let G={model:$,instructions:Z.filter((W)=>W.role==="system"),messages:Z.filter((W)=>W.role!=="system"),tools:Q,temperature:Y.temperature,maxOutputTokens:Y.max_tokens,topP:Y.top_p,frequencyPenalty:Y.frequency_penalty,presencePenalty:Y.presence_penalty,stopSequences:Y.stop?Array.isArray(Y.stop)?Y.stop:[Y.stop]:void 0,abortSignal:J};return X?{...G,providerOptions:X}:G}function JX8($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var Bo6=256,Do6,Oo6,Lo6,wo6,jo6,Eo6,zo6,Po6,GX8,WX8,KX8;var HX8=D(()=>{y4();J8();Sp();vH();Do6=y1.object({type:y1.literal("function"),function:y1.object({name:y1.string(),description:y1.string().optional(),parameters:y1.record(y1.string(),y1.unknown()).optional()})}),Oo6=y1.object({id:y1.string(),type:y1.literal("function"),function:y1.object({name:y1.string(),arguments:y1.string()})}),Lo6=y1.discriminatedUnion("role",[y1.object({role:y1.literal("system"),content:y1.string(),name:y1.string().optional()}),y1.object({role:y1.literal("user"),content:y1.union([y1.string(),y1.array(y1.union([y1.object({type:y1.literal("text"),text:y1.string()}),y1.object({type:y1.literal("image_url"),image_url:y1.object({url:y1.string(),detail:y1.string().optional()})})]))]),name:y1.string().optional()}),y1.object({role:y1.literal("assistant"),content:y1.string().nullable().optional(),name:y1.string().optional(),tool_calls:y1.array(Oo6).optional()}),y1.object({role:y1.literal("tool"),content:y1.string(),tool_call_id:y1.string()})]),wo6=y1.object({type:y1.literal("text")}),jo6=y1.object({type:y1.literal("json_object")}),Eo6=y1.object({type:y1.literal("json_schema"),json_schema:y1.object({name:y1.string(),description:y1.string().optional(),schema:y1.record(y1.string(),y1.unknown()),strict:y1.boolean().optional()})}),zo6=y1.union([wo6,jo6,Eo6]),Po6=y1.object({model:y1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:y1.array(Lo6),stream:y1.boolean().optional().default(!1),temperature:y1.number().min(0).max(2).optional(),max_tokens:y1.number().positive().optional(),top_p:y1.number().min(0).max(1).optional(),frequency_penalty:y1.number().min(-2).max(2).optional(),presence_penalty:y1.number().min(-2).max(2).optional(),stop:y1.union([y1.string(),y1.array(y1.string())]).optional(),tools:y1.array(Do6).optional(),tool_choice:y1.union([y1.literal("auto"),y1.literal("none"),y1.literal("required"),y1.object({type:y1.literal("function"),function:y1.object({name:y1.string()})})]).optional(),response_format:zo6.optional(),user:y1.string().optional()});GX8=class GX8 extends Error{constructor($){super($);this.name="MessageConversionError"}};WX8=new Z1;WX8.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),Q=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(zN("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(zN("Organization context is required. Ensure your API key has organization metadata.","invalid_request_error","organization"),400);if((Z.organization.slug??Z.organization.id)!==Q)return $.json(zN("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Y=await $.req.json(),X=Po6.safeParse(Y);if(!X.success){let w=X.error.issues[0]??{message:"Invalid request",path:[]};return $.json(zN(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let J=X.data,G=Ao6(J.model);if(!G)return $.json(zN("Invalid model format. Expected 'model_id' or 'credential_id:model_id' (e.g., 'claude-sonnet-4-6' or 'key_abc123:claude-sonnet-4-6')","invalid_request_error","model"),400);let{credentialId:W}=G,{modelId:K}=G;if(!W){let j=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((E)=>jP(E.providerId));if(!j)return $.json(zN("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);W=j.id}let H;try{H=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(zN(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),U=Ro6(J.messages),N=J.tools?qo6(J.tools):void 0,B=Mo6(J.response_format),O=Io6(),L=Math.floor(Date.now()/1000);if(J.stream)return DO($,async(w)=>{let j=XX8(F,U,N,J,B,$.req.raw.signal);try{let E=Fd(j),z=!1,T=0,A="",P=async()=>{if(A.length===0)return;let q=A;A="",await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{content:q},finish_reason:null}]})})};for await(let q of E.stream){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:J.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(q.type==="text-delta"){if(A+=q.text,A.length>=Bo6)await P()}else if(q.type==="tool-call"){await P();let x=T++;await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{tool_calls:[{index:x,id:q.toolCallId,type:"function",function:{name:q.toolName,arguments:JSON.stringify(q.input)}}]},finish_reason:null}]})})}else if(q.type==="finish")await P(),await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{},finish_reason:JX8(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 P(),await w.writeSSE({data:"[DONE]"})}catch(E){let z=E;console.error("[openai-compat:stream] Error:",z.message),await w.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let w=XX8(F,U,N,J,B,$.req.raw.signal),j=await gU(w),E={role:"assistant",content:j.text||null};if(j.toolCalls&&j.toolCalls.length>0)E.tool_calls=j.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),E.content=null;return $.json({id:O,object:"chat.completion",created:L,model:J.model,choices:[{index:0,message:E,finish_reason:JX8(j.finishReason)}],usage:{prompt_tokens:j.usage?.inputTokens??0,completion_tokens:j.usage?.outputTokens??0,total_tokens:j.usage?.totalTokens??0}})}}catch(Y){let X=Y;if(X.name==="AbortError")return $.json(zN("Request aborted","invalid_request_error"),400);if(X.name==="MessageConversionError")return $.json(zN(X.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",X.message,X.stack),$.json(zN(X.message,"server_error"),500)}});KX8=WX8});function Vo6($){if(typeof $!=="object"||$===null)return!1;let Q=$.repository?.url;return typeof Q==="string"&&Q.length>0}function FX8(){let $=new Z1;return $.use("*",async(Z,Q)=>{await Q(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let Q=Z.get("studioContext"),Y=p0(Q);if(!Y)return Z.json({error:"Authentication required"},401);let J=(Z.req.query("site")??"").trim().toLowerCase();if(!wZ(J))return Z.json({error:"Invalid site slug"},400);let G=await Q.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","=",Y).execute(),W=[];for(let H of G){if(!H.slug||k9(H))continue;let F=await Q.storage.virtualMcps.list(H.id);for(let U of F){if(OA(U)!==J)continue;if(!Vo6(U.metadata))continue;W.push({orgSlug:H.slug,orgName:H.name??H.slug,project:{id:U.id,title:U.title,icon:U.icon??null}})}}let K={matches:W};return Z.json(K)}),$}var UX8=D(()=>{J8();aG()});var BX8;var NX8=D(()=>{BX8={name:"decocms",version:"4.430.2",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^4.0.58","@ai-sdk/google":"^4.0.76","@ai-sdk/openai":"^4.0.71","@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":"^3.1.0","@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":"^4.0.17","@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:"^7.0.107","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 Co6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??So6}}var DX8,So6="https://ph.studio.decocms.com",OX8;var LX8=D(()=>{J8();Vs();uf();I9();X$();XN1();NX8();DX8=new Z1;DX8.get("/",($)=>{let Z={version:BX8.version,theme:W5$(),...pK().logo&&{logo:pK().logo},...hD()&&{internalUrl:kp1()},...E0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!E0().firecrawlApiKey,hostingEnabled:!!E0().controlplaneRestUrl&&!!E0().controlplaneServiceToken,hostingControlPlaneGa:E0().hostingControlPlaneGa,monitorEnabled:!!E0().clickhouseAnalyticsUrl&&!!E0().clickhouseAnalyticsPassword,monitorGa:E0().monitorGa,plansEnabled:E0().plansEnabled,auth:Z68(),posthog:Co6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:MO()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});OX8=DX8});function sy($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function pD1($){return(sy($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((Q)=>Q.charAt(0).toUpperCase()+Q.slice(1)).join(" ")}function wX8($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(sy($))}&sz=${Z}`}function _o6($,Z){let Q=$.trim();if(Q.length<=Z)return Q;let Y=Q.slice(0,Z-1),X=Y.lastIndexOf(" ");return`${(X>Z*0.6?Y.slice(0,X):Y).trimEnd()}\u2026`}function jX8($){let{brand:Z,domain:Q,score:Y}=$,X=typeof Y==="number"?`${Z} Deco Score \u2014 ${Math.round(Y)}/100 \xB7 decocms`:`${Z} Deco Score \xB7 decocms`,J=_o6(`How does ${Q} really perform? See the full ${Z} Deco Score \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,200);return{title:X,description:J}}import{z as z$}from"zod";var vo6,EX8;var zX8=D(()=>{vo6=z$.object({check_id:z$.string(),title:z$.string(),description:z$.string().optional(),impact:z$.string().optional(),why:z$.string().optional(),category:z$.string(),severity:z$.string(),value_band:z$.string().optional(),value_driver:z$.string().optional(),controllability:z$.string().optional(),pages:z$.array(z$.string()),tasks:z$.array(z$.string()),evidence:z$.string(),sample_scope:z$.string().optional(),sources:z$.array(z$.string())}),EX8=z$.object({domain:z$.string(),brand:z$.string(),favicon:z$.string().optional(),scanned_at:z$.string().nullable(),lang:z$.string(),score:z$.number().nullable(),band:z$.string().nullable(),totals:z$.object({measured:z$.number(),registry_total:z$.number(),passed:z$.number(),failed:z$.number(),blocked:z$.number()}),buckets:z$.array(z$.object({id:z$.enum(["critical","important","worth"]),label:z$.string(),items:z$.array(vo6)})),passing:z$.object({count:z$.number(),items:z$.array(z$.object({check_id:z$.string(),title:z$.string()}))}),not_measured:z$.object({count:z$.number(),groups:z$.array(z$.object({reason:z$.string(),label:z$.string(),count:z$.number(),checks:z$.array(z$.string())}))}),categories:z$.array(z$.object({key:z$.string(),label:z$.string(),score:z$.number().nullable(),band:z$.string().nullable(),pass:z$.number(),fail:z$.number()})),screenshots:z$.array(z$.object({url:z$.string(),page_type:z$.string().optional(),viewport:z$.enum(["desktop","mobile"]),image_url:z$.string()}))})});function PX8($,Z,Q){let Y=Q?`?${new URLSearchParams({lang:Q}).toString()}`:"";return`${zW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}/onepager${Z}${Y}`}async function J_0($,Z={}){let Q=await fetch(PX8($,"",Z.lang),{headers:{Accept:"application/json"},signal:Z.signal});if(Q.status===404)return null;if(!Q.ok)throw Error(`onepager read HTTP ${Q.status}`);return EX8.parse(await Q.json())}async function AX8($,Z={}){let Q=await fetch(PX8($,".md",Z.lang),{headers:{Accept:"text/markdown"},signal:Z.signal});if(Q.status===404)return null;if(!Q.ok)throw Error(`onepager markdown HTTP ${Q.status}`);return Q.text()}var nD1=D(()=>{zX8();tB()});import{join as TX8}from"path";async function xo6($){try{let Z=await J_0($,{signal:AbortSignal.timeout(bo6)});if(!Z?.scanned_at)return null;return{brand:Z.brand.trim()||pD1($),...Z.score!==null?{score:Z.score}:{}}}catch{return null}}function GG($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function fo6($,Z){let Q=sy($),Y=Z?.brand?.trim()||pD1(Q),X=wX8(Q,128),G=`${(E0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(Q)}`,{title:W,description:K}=jX8({brand:Y,domain:Q,score:Z?.score}),H=`${G}/og.png`,F=`${Y} Deco Score by decocms`;return[`<title>${GG(W)}</title>`,`<meta name="description" content="${GG(K)}" />`,'<meta name="robots" content="noindex, follow" />','<meta property="og:type" content="website" />','<meta property="og:site_name" content="decocms" />',`<meta property="og:title" content="${GG(W)}" />`,`<meta property="og:description" content="${GG(K)}" />`,`<meta property="og:url" content="${GG(G)}" />`,`<meta property="og:image" content="${GG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${GG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${GG(W)}" />`,`<meta name="twitter:description" content="${GG(K)}" />`,`<meta name="twitter:image" content="${GG(H)}" />`,`<meta name="twitter:image:alt" content="${GG(F)}" />`,`<link rel="canonical" href="${GG(G)}" />`,`<link rel="alternate" type="text/markdown" href="${GG(G)}.md" />`,`<link rel="icon" href="${GG(X)}" sizes="any" />`].join(`
3738
3738
  `)}function yo6($,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}
3739
3739
  </head>`)}function RX8($){let Z=new Z1;return Z.get("/:domain/og.png",async(Q)=>{let Y=sy(Q.req.param("domain")),X=async()=>{let J=$?Bun.file(TX8($,"report-og-fallback.png")):null;if(!J||!await J.exists())return Q.notFound();return Q.body(new Uint8Array(await J.arrayBuffer()),200,{"Content-Type":"image/png","Cache-Control":"public, max-age=0, s-maxage=3600"})};try{let J=await fetch(`${zW({})}/api/v2/public/diagnostics/${encodeURIComponent(Y)}/og.png`,{signal:AbortSignal.timeout(go6)}),G=J.headers.get("content-type")??"";if(!J.ok||!G.startsWith("image/")||!J.body)return X();return Q.body(J.body,200,{"Content-Type":G,"Cache-Control":"public, max-age=0, s-maxage=604800"})}catch{return X()}}),Z.get("/:file{.+\\.md}",async(Q)=>{let Y=sy(Q.req.param("file").replace(/\.md$/,""));try{let X=await AX8(Y,{lang:Q.req.query("lang")?.trim()||void 0,signal:AbortSignal.timeout(ho6)});if(X===null)return Q.text("Deco Score not found",404);return Q.body(X,200,{"Content-Type":"text/markdown; charset=utf-8","Cache-Control":"public, max-age=600, stale-while-revalidate=3600","Access-Control-Allow-Origin":"*"})}catch{return Q.text("Deco Score unavailable",502)}}),Z.get("/:domain",async(Q)=>{let Y=Q.req.param("domain"),X=$?TX8($,"index.html"):null,J=X?Bun.file(X):null;if(!J||!await J.exists())return Q.notFound();let G=await J.text();try{let W=await xo6(sy(Y)),K=fo6(Y,W);return Q.html(yo6(G,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return Q.html(G)}}),Z}var bo6=2500,go6=1e4,ho6=1e4;var qX8=D(()=>{J8();tB();nD1();X$()});function G_0($,Z){return fetch(`${zW({})}${$}`,Z)}async function uo6($,Z){let Q=await J_0($,{lang:Z});if(!Q)return{status:"not_found",report:null};return Q.scanned_at?{status:"ready",report:Q}:{status:"empty",report:null}}function co6($){let Z=typeof $==="object"&&$!==null?$:{},Q=typeof Z.domain==="string"?Z.domain.trim():"",Y=typeof Z.distinctId==="string"&&Z.distinctId.trim()&&Z.distinctId.length<=200?Z.distinctId.trim():void 0;return{domain:Q,distinctId:Y}}var lo6,LO,MX8=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},IX8;var VX8=D(()=>{J8();Z3();tB();nD1();lo6=new Set(["complete","errored","terminated","unknown"]);LO=new Z1;LO.use("*",async($,Z)=>{let Q=await x8.api.getSession({headers:$.req.raw.headers});$.set("reportUser",Q?.user?.id?{email:Q.user.email}:void 0),await Z(),$.header("Cache-Control","private, no-store"),$.header("Vary","Cookie");return});LO.use("/link-token/*",MX8);LO.use("/suggest",MX8);LO.get("/site/:domain",async($)=>{let Z=$.req.param("domain").trim();if(!Z)return $.json({error:"domain is required"},400);let Q=$.req.query("lang")?.trim()||void 0;try{return $.json(await uo6(Z,Q))}catch{return $.json({error:"report read failed"},502)}});LO.post("/run",async($)=>{let Z=$.get("reportUser"),Q;try{Q=await $.req.json()}catch{return $.json({error:"invalid JSON"},400)}let{domain:Y,distinctId:X}=co6(Q);if(!Y)return $.json({error:"domain is required"},400);let J=Z?.email;try{let G=await G_0("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${rw({})}`},body:JSON.stringify({url:Y,...J?{email:J}:{},distinct_id:X})});if(!G.ok)return $.json({error:`run HTTP ${G.status}`},502);let W=await G.json(),K=W.blocked?{state:"blocked"}:W.status==="fresh"?{state:"fresh"}:W.mode==="sync"?{state:"sync"}:{state:"running",id:W.id??null};return $.json(K)}catch{return $.json({error:"run failed"},502)}});LO.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let Q=await G_0(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${rw({})}`}});if(!Q.ok)return $.json({error:`status HTTP ${Q.status}`},502);let X=(await Q.json()).status??"unknown",J={done:lo6.has(X),status:X};return $.json(J)}catch{return $.json({error:"status failed"},502)}});LO.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let Q=await G_0(`/api/v2/public/link-tokens/${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(Q.status===404)return $.json(null);if(!Q.ok)return $.json({error:`link token HTTP ${Q.status}`},502);return $.json(await Q.json())}catch{return $.json({error:"link token resolve failed"},502)}});LO.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let Q=await G_0(`/api/v2/public/suggest?q=${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(!Q.ok)return $.json({suggestions:[]});let Y=await Q.json();return $.json({suggestions:Array.isArray(Y.suggestions)?Y.suggestions:[]})}catch{return $.json({suggestions:[]})}});IX8=LO});var mo6=1048576,tD1;var kX8=D(()=>{J8();QK();X$();mU1();tD1=new Z1;tD1.post("/webhook",x5({maxSize:mo6,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=E0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let Q=await $.req.text();if(!D48(Q,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let X=O48(Q);if(!X)return $.json({error:"invalid payload"},400);let J=await L48(X);return console.log("stripe webhook",{eventId:X.id,type:X.type,livemode:X.livemode,...J}),$.json({received:!0})})});import{timingSafeEqual as do6}from"crypto";function no6($,Z,Q){if(!Z?.startsWith("sha256="))return!1;let Y=new Bun.CryptoHasher("sha256",Q).update($).digest("hex"),X=Z.slice(7);if(X.length!==Y.length)return!1;return do6(Buffer.from(X),Buffer.from(Y))}function to6($,Z){let Q=Z,Y=Q?.repository?.name,X=Q?.repository?.owner?.login;if(typeof Y!=="string"||typeof X!=="string")return[];let J=[];if($==="check_suite"){if(Q.action!=="completed")return[];let G=Q.check_suite?.pull_requests;for(let W of Array.isArray(G)?G:[]){let K=W?.number;if(typeof K==="number")J.push(K)}}else if($==="issue_comment"&&Q.issue?.pull_request){let G=Q.issue.number;if(typeof G==="number")J.push(G)}return[...new Set(J)].map((G)=>({repoOwner:X,repoName:Y,number:G}))}function SX8($){let Z=new Z1;return Z.post("/webhook",x5({maxSize:io6,onError:(Q)=>Q.json({error:"payload too large"},413)}),async(Q)=>{let Y=process.env.GITHUB_WEBHOOK_SECRET;if(!Y)return Q.json({error:"github webhook not configured"},503);let X=await Q.req.text();if(!no6(X,Q.req.header("x-hub-signature-256"),Y))return Q.json({error:"invalid signature"},400);let J=Q.req.header("x-github-event");if(J!=="push"&&!po6.has(J??""))return Q.json({ok:!0,ignored:"event"});let G;try{G=JSON.parse(X)}catch{return Q.json({error:"invalid payload"},400)}if(J==="push"){let H=G.ref,F=G.repository?.full_name;if(!H||!F)return Q.json({ok:!0,ignored:"shape"});return b10().then((U)=>U?.markTenantPoolsDirty(`https://github.com/${F}`,H)).catch((U)=>console.warn(`[github-webhook] tenant pool refresh for ${F}@${H} failed: ${U instanceof Error?U.message:String(U)}`)),Q.json({ok:!0})}let W=to6(J??"",G);if(W.length===0)return Q.json({ok:!0,ignored:"no-pr"});let K=await oo6($,W);return Q.json({ok:!0,refreshed:K})}),Z}async function oo6($,Z){let Q=0;for(let Y of Z){let X=$.taskBoard(),J;try{J=await X.findPrLinks(Y)}catch(G){console.error("[github-webhook] pr link lookup failed:",G);continue}for(let G of J)try{let W=await X.getById(G.taskBoardItemId,G.organizationId),K=W?await $.contextFactory()(G.organizationId,W.assignedBy??W.createdBy):null;if(!K)continue;if(await lb$(K,G.organizationId,G.taskBoardItemId)!==null)Q++}catch(W){console.error(`[github-webhook] pr card refresh failed for ${G.taskBoardItemId}:`,W)}}return Q}var io6=5242880,po6;var CX8=D(()=>{J8();QK();fW();_7();po6=new Set(["check_suite","issue_comment"])});import{DBOS as rD1,SchedulerMode as ro6}from"@dbos-inc/dbos-sdk";async function ao6(){try{return await eo6()}catch($){return console.warn(`[sandbox-credential-push] push failed: ${$ instanceof Error?$.message:String($)}`),null}}async function eo6(){if(!v10())return null;let[{RemoteSandboxProvider:$},{SandboxProviderRouter:Z}]=await Promise.all([Promise.resolve().then(() => (V91(),I91)),Promise.resolve().then(() => (M91(),q91))]),Q=await b10(),Y=Q instanceof Z?Q.providers.kubernetes:Q;if(!(Y instanceof $))return null;let{db:X}=D8(),{sandboxes:J,pools:G}=await Y.list(),W=Date.now(),K=WT$({sandboxes:J,pools:G,records:await KT$(X,J,G),legacyPools:JT0(process.env.STUDIO_SANDBOX_TENANT_POOLS),now:W}),{batches:H,failed:F}=await HT$(K,MH0(X,new UX(E0().encryptionKey)),{now:W,orgFsLifetimeMs:KT0}),U=0,N=0,B=0;for(let O of H)try{let L=await Y.pushCredentials(O);U+=L.stored,N+=L.kept}catch(L){B++,console.warn(`[sandbox-credential-push] a push batch failed: ${L instanceof Error?L.message:String(L)}`)}return{sandboxes:J.length,pushed:U,kept:N,refused:K.refused,failed:F+B}}async function $r6($,Z){let Q=await rD1.runStep(ao6,{name:"pushSandboxCredentials"});if(Q&&(Q.refused>0||Q.failed>0))console.warn(`[sandbox-credential-push] ${Q.sandboxes} sandboxes: pushed ${Q.pushed}, kept ${Q.kept}, refused ${Q.refused}, failed ${Q.failed}`)}function _X8(){if(oD1)return;if(!E0().agentSandboxEnabled||!v10())return;oD1=rD1.registerWorkflow($r6,{name:"sandboxCredentialPushWorkflow"}),rD1.registerScheduled(oD1,{name:"sandboxCredentialPushWorkflow",crontab:so6,mode:ro6.ExactlyOncePerIntervalWhenActive})}var so6="1-59/10 * * * *",oD1=null;var vX8=D(()=>{SG();BL();L41();HT0();GT0();fW();X$()});function bX8($){let Z=new YO($.db,new UX($.encryptionKey)),Q=new Z1;return Q.get("/attachments/:token",async(Y)=>{let X=Qv$(Y.req.param("token"));if(!X)return Y.json({error:"Invalid or expired link"},404);let J=await Z.getByOrg(X.organizationId);if(!J)return Y.json({error:"Jira is not connected"},404);let W=await new lQ(J.siteUrl,J.email,J.apiToken).downloadAttachment(X.attachmentId);if(!W.ok||!W.body)return Y.json({error:"Jira refused the download"},502);let K=new Headers;for(let H of["content-type","content-length","content-disposition"]){let F=W.headers.get(H);if(F)K.set(H,F)}return K.set("cache-control","no-store"),new Response(W.body,{status:200,headers:K})}),Q}var xX8=D(()=>{J8();BL();c71();FE();n40()});import{DBOS as Yz,SchedulerMode as Zr6}from"@dbos-inc/dbos-sdk";function fX8($){aD1=$}function $O1(){if(!aD1)throw Error("[jira-trigger] runtime not initialized \u2014 setJiraTriggerSweepRuntime() must run before the workflow fires");return aD1}function ZO1(){let $=$O1();return new YO($.db,new UX($.encryptionKey))}async function Gr6($){try{let Z=await ZO1().getById($);if(!Z?.enabled||!Z.boardId)return{integrationId:$,started:0};let Q=await VH($O1().db,Z.organizationId);if(!Q)return{integrationId:$,started:0};if((await Q.storage.jiraIntegrations.listAutomations(Z.organizationId)).length===0)return{integrationId:$,started:0};let X=new lQ(Z.siteUrl,Z.email,Z.apiToken),G=`(${await X.getBoardScopeJql(Z.boardId)}) AND status CHANGED AFTER "-${Yr6}m"`,W=0,K;for(let H=0;H<Xr6;H++){let F=await X.searchIssues({jql:G,nextPageToken:K});for(let U of F.issues)if(await aH1(Q,Z,{issueId:U.id,now:Date.now()})==="started")W++;if(K=F.nextPageToken??void 0,!K)break}return{integrationId:$,started:W}}catch(Z){return{integrationId:$,started:0,error:Z instanceof Error?Z.message:String(Z)}}}async function Wr6($,Z){let Q=await Yz.runStep(()=>ZO1().listEnabledIds(),{name:"loadJiraIntegrations"});if(Q.length===0)return;let Y=await Promise.all(Q.map((X)=>Yz.runStep(()=>Gr6(X),{name:`sweepJira:${X}`})));for(let X of Y)if(X.error)console.warn(`[jira-trigger] integration ${X.integrationId} failed: ${X.error}`);else if(X.started>0)console.log(`[jira-trigger] integration ${X.integrationId} started ${X.started} run(s) the webhook missed`)}async function Kr6($,Z){try{let Q=await ZO1().getById($);if(!Q?.enabled)return"disabled";let Y=await VH($O1().db,Q.organizationId);if(!Y)return"disabled";let X=await aH1(Y,Q,{issueId:Z.issueId,changelogId:Z.changelogId});if(X==="started")console.log(`[jira-trigger] started a run for ${Z.issueKey} after it settled`);else if(X==="returned")console.log(`[jira-trigger] ${Z.issueKey} went back where it was before settling in "${Z.toStatus}"; no run`);return X}catch(Q){return console.error(`[jira-trigger] settling ${Z.issueKey} failed`,Q instanceof Error?Q.message:Q),"error"}}async function Hr6($,Z){await Yz.sleep(xk0()+Jr6),await Yz.runStep(()=>Kr6($,Z),{name:"settleJiraMove"})}async function yX8($,Z){if(!eD1)throw Error("[jira-trigger] settle workflow is not registered");await Yz.startWorkflow(eD1,{workflowID:`jira-settle:${$}:${Z.changelogId}`})($,Z)}function gX8(){if(sD1)return;eD1=Yz.registerWorkflow(Hr6,{name:"jiraSettleWorkflow"}),sD1=Yz.registerWorkflow(Wr6,{name:"jiraTriggerSweepWorkflow"}),Yz.registerScheduled(sD1,{name:"jiraTriggerSweepWorkflow",crontab:Qr6,mode:Zr6.ExactlyOncePerIntervalWhenActive})}var Qr6="7-59/10 * * * *",Yr6=35,Xr6=5,Jr6=5000,aD1=null,eD1=null,sD1=null;var QO1=D(()=>{BL();n40();kd();FE();rH1();fk0()});function hX8($){let Z=new YO($.db,new UX($.encryptionKey));async function Q(X,J){let G=ge$(J);if(!G)return;let W=await Z.getByWebhookSecret(X);if(!W?.enabled)return;if((await Z.listAutomations(W.organizationId)).length===0)return;await yX8(W.id,G)}let Y=new Z1;return Y.post("/webhook/:secret",x5({maxSize:Fr6}),async(X)=>{let J=X.req.param("secret");if(!await Z.getByWebhookSecret(J))return X.json({error:"Unknown webhook"},404);let W;try{W=await X.req.json()}catch{return X.json({error:"Body must be JSON"},400)}return Q(J,W).catch((K)=>{console.error("[jira-webhook] trigger failed",K)}),X.body(null,202)}),Y}var Fr6=1048576;var uX8=D(()=>{J8();QK();BL();QO1();fk0();n40()});function lX8($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var cX8,Ur6,Nr6,mX8;var dX8=D(()=>{J8();OJ();yd();oc();cX8=new Z1,Ur6=["range","if-none-match","if-modified-since"],Nr6=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];cX8.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),Q=Z.organization?.id;if(!Z.auth?.user?.id){if(Wp($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new q1(401,{message:"Authentication required"})}if(!Q)throw new q1(401,{message:"Organization context required"});let Y=$.req.path.replace(/^.*\/files\//,"");if(!Y)throw new q1(400,{message:"Missing file key"});let X=await X80(Y,Z);if(!X)throw new q1(503,{message:"Object storage not configured"});if(X.startsWith("data:")&&TW()){let K=X.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new q1(500,{message:"Invalid data URL from storage"});let[,H,F]=K,U=Buffer.from(F,"base64"),N=new Headers({"Content-Type":H,"Cache-Control":"private, max-age=86400"});return lX8(N,H),new Response(U,{status:200,headers:N})}let J=new Headers;for(let K of Ur6){let H=$.req.header(K);if(H)J.set(K,H)}let G=await fetch(X,{headers:J});if(G.status===403||G.status===404)throw new q1(404,{message:"File not found"});if(!G.ok&&G.status!==304&&G.status!==416)throw console.error(`[files] upstream storage error ${G.status} for key:`,Y),new q1(502,{message:"Upstream storage error"});let W=new Headers;for(let K of Nr6){let H=G.headers.get(K);if(H)W.set(K,H)}return W.set("Cache-Control","private, max-age=86400"),lX8(W,W.get("content-type")??""),new Response(G.body,{status:G.status,headers:W})});mX8=cX8});var i60=b((ay)=>{var Br6=ay&&ay.__createBinding||(Object.create?function($,Z,Q,Y){if(Y===void 0)Y=Q;var X=Object.getOwnPropertyDescriptor(Z,Q);if(!X||("get"in X?!Z.__esModule:X.writable||X.configurable))X={enumerable:!0,get:function(){return Z[Q]}};Object.defineProperty($,Y,X)}:function($,Z,Q,Y){if(Y===void 0)Y=Q;$[Y]=Z[Q]}),Dr6=ay&&ay.__exportStar||function($,Z){for(var Q in $)if(Q!=="default"&&!Object.prototype.hasOwnProperty.call(Z,Q))Br6(Z,$,Q)};Object.defineProperty(ay,"__esModule",{value:!0});Dr6(OG(),ay)});var nX8=b((iX8)=>{Object.defineProperty(iX8,"__esModule",{value:!0});iX8.version=void 0;iX8.version="3.4.0"});var rX8=b((PN)=>{var Or6=PN&&PN.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(PN,"__esModule",{value:!0});PN.NodeTransport=PN.VERSION=void 0;PN.nodeResolveHost=Pr6;var s5=i60(),Lr6=M0("net"),YO1=M0("tls"),wr6=M0("path"),tX8=M0("fs"),jr6=Or6(M0("dns")),Er6=nX8();PN.VERSION=Er6.version;var zr6="nats.js";class oX8{socket;version;lang;yields=[];signal=(0,s5.deferred)();closedNotification=(0,s5.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=zr6,this.version=PN.VERSION}async connect($,Z){this.tlsName=$.tlsName,this.options=Z;let{tls:Q}=this.options,{handshakeFirst:Y}=Q||{};try{if(Y===!0)this.socket=await this.tlsFirst($);else this.socket=await this.dial($);if(this.done)this.socket?.destroy();let X=await this.peekInfo();(0,s5.checkOptions)(X,Z);let{tls_required:J,tls_available:G}=X,W=G===!0&&Z.tls!==null;if(!Y&&(J||W))this.socket=await this.startTLS();if(this.done)this.socket?.destroy();if(J&&this.socket.encrypted!==!0)throw s5.errors.InvalidArgumentError.format("tls","is not available on this server");return this.connected=!0,this.setupHandlers(),this.signal.resolve(),Promise.resolve()}catch(X){let J=X;if(!J)J=new s5.errors.ConnectionError("error connecting - node provided an undefined error");let{code:G}=J,W=G==="ECONNREFUSED"?new s5.errors.ConnectionError("connection refused",{cause:J}):J;throw this.socket?.destroy(),W}}dial($){let Z=(0,s5.deferred)(),Q,Y=(0,Lr6.createConnection)($.port,$.hostname,()=>{Z.resolve(Y),Y.removeAllListeners()});return Y.on("error",(X)=>{Q=X}),Y.on("close",()=>{Y.removeAllListeners(),Z.reject(Q)}),Y.setNoDelay(!0),Z}get isClosed(){return this.done}close($){return this._closed($,!1)}peekInfo(){let $=(0,s5.deferred)(),Z;return this.socket.on("data",(Q)=>{this.yields.push(Q);let Y=s5.DataBuffer.concat(...this.yields),X=(0,s5.extractProtocolMessage)(Y);if(X!=="")try{let J=s5.INFO.exec(X);if(!J)throw Error("unexpected response from server");let G=JSON.parse(J[1]);$.resolve(G)}catch(J){$.reject(J)}finally{this.socket.removeAllListeners()}}),this.socket.on("error",(Q)=>{Z=Q}),this.socket.on("close",()=>{this.socket.removeAllListeners(),$.reject(Z)}),$}loadFile($){if(!$)return Promise.resolve();let Z=(0,s5.deferred)();try{if($=(0,wr6.resolve)($),!(0,tX8.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,tX8.readFile)($,(Q,Y)=>{if(Q)return Z.reject(Q);Z.resolve(Y)})}catch(Q){Z.reject(Q)}return Z}async loadClientCerts(){let $={},{certFile:Z,cert:Q,caFile:Y,ca:X,keyFile:J,key:G}=this.options.tls;try{if(Z){let W=await this.loadFile(Z);if(W)$.cert=W}else if(Q)$.cert=Q;if(J){let W=await this.loadFile(J);if(W)$.key=W}else if(G)$.key=G;if(Y){let W=await this.loadFile(Y);if(W)$.ca=[W]}else if(X)$.ca=X;return Promise.resolve($)}catch(W){return Promise.reject(W)}}async tlsFirst($){let Z,Q={servername:this.tlsName,rejectUnauthorized:!0};if(this.socket)Q.socket=this.socket;if(typeof this.options.tls==="object")try{let X=await this.loadClientCerts()||{};Q=(0,s5.extend)(Q,this.options.tls,X)}catch(X){return Promise.reject(new s5.errors.ConnectionError(X.message,{cause:X}))}let Y=(0,s5.deferred)();try{let X=(0,YO1.connect)($.port,$.hostname,Q,()=>{X.removeAllListeners(),Y.resolve(X)});X.on("error",(J)=>{Z=J}),X.on("secureConnect",()=>{if(Q.rejectUnauthorized===!1)return;if(!X.authorized)throw X.authorizationError}),X.on("close",()=>{Y.reject(Z),X.removeAllListeners()}),X.setNoDelay(!0)}catch(X){Y.reject(new s5.errors.ConnectionError(X.message,{cause:X}))}return Y}async startTLS(){let $,Z={socket:this.socket,servername:this.tlsName,rejectUnauthorized:!0};if(typeof this.options.tls==="object")try{let Y=await this.loadClientCerts()||{};Z=(0,s5.extend)(Z,this.options.tls,Y)}catch(Y){return Promise.reject(new s5.errors.ConnectionError(Y.message,{cause:Y}))}let Q=(0,s5.deferred)();try{let Y=(0,YO1.connect)(Z,()=>{Y.removeAllListeners(),Q.resolve(Y)});Y.on("error",(X)=>{$=X}),Y.on("secureConnect",()=>{if(Z.rejectUnauthorized===!1)return;if(!Y.authorized)throw Y.authorizationError}),Y.on("close",()=>{Q.reject($),Y.removeAllListeners()})}catch(Y){Q.reject(new s5.errors.ConnectionError(Y.message,{cause:Y}))}return Q}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,s5.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,s5.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 YO1.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,s5.render)($)}`);let Z=(0,s5.deferred)();try{this.socket.write($,(Q)=>{if(Q){if(this.options.debug)console.error(`!!! ${(0,s5.render)($)}: ${Q}`);return Z.reject(Q)}return Z.resolve()})}catch(Q){if(this.options.debug)console.error(`!!! ${(0,s5.render)($)}: ${Q}`);Z.reject(Q)}return Z}send($){this._send($).catch((Q)=>{})}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(Q){if(this.options.debug)console.log("transport close terminated with an error",Q)}try{if(this.socket)this.socket.removeAllListeners(),this.socket?.destroy(),this.socket=void 0}catch(Q){console.log(Q)}this.done=!0,this.closedNotification.resolve(this.closeError)}closed(){return this.closedNotification}}PN.NodeTransport=oX8;function Pr6($){let Z=(0,s5.deferred)();return jr6.default.lookup($,{all:!0},(Q,Y)=>{if(Q){Z.reject(Q);return}let X=[];for(let J of Y)X.push(J.address);if(X.length===0)X.push($);Z.resolve(X)}),Z}});var ZJ8=b(($J8)=>{Object.defineProperty($J8,"__esModule",{value:!0});$J8.connect=Ar6;var sX8=rX8(),aX8=i60(),eX8=i60();function Ar6($={}){if((0,eX8.hasWsProtocol)($))return Promise.reject(eX8.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,aX8.setTransportFactory)({factory:()=>{return new sX8.NodeTransport},dnsResolveFn:sX8.nodeResolveHost}),aX8.NatsConnectionImpl.connect($)}});var QJ8=b((wO)=>{var Rr6=wO&&wO.__createBinding||(Object.create?function($,Z,Q,Y){if(Y===void 0)Y=Q;var X=Object.getOwnPropertyDescriptor(Z,Q);if(!X||("get"in X?!Z.__esModule:X.writable||X.configurable))X={enumerable:!0,get:function(){return Z[Q]}};Object.defineProperty($,Y,X)}:function($,Z,Q,Y){if(Y===void 0)Y=Q;$[Y]=Z[Q]}),qr6=wO&&wO.__exportStar||function($,Z){for(var Q in $)if(Q!=="default"&&!Object.prototype.hasOwnProperty.call(Z,Q))Rr6(Z,$,Q)};Object.defineProperty(wO,"__esModule",{value:!0});wO.connect=void 0;var Mr6=ZJ8();Object.defineProperty(wO,"connect",{enumerable:!0,get:function(){return Mr6.connect}});qr6(i60(),wO)});function GJ8($){let Z=$?.connectFn??Sr6,Q=null,Y=null,X=!1,J=!1,G=!1,W=[];function K(){return Q!==null&&!Q.isClosed()&&!Q.isDraining()&&!G}function H(){console.log(`[NatsProvider] fireReady: ${W.length} callbacks`);for(let N of W)try{N()}catch{}}function F(N){(async()=>{for await(let B of N.status())if(B.type==="disconnect")console.log("[NatsProvider] Disconnected"),G=!0;else if(B.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),G=!1,Y=null,H()})().catch(()=>{})}async function U(N,B){let O=0;while(!J)try{Q=await Z({servers:N,timeout:kr6,reconnect:!0,maxReconnectAttempts:-1,...B?{authenticator:B}:{}}),console.log(`[NatsProvider] Connected to ${Q.getServer()} after ${O} attempt(s)`),Y=null,G=!1,F(Q),H();return}catch{O++;let L=N7(Vr6,Ir6,O-1,2,0.5);await O$(L)}}return{init(N,B){if(X)return;X=!0,J=!1;let O=B?.creds?YJ8.credsAuthenticator(new TextEncoder().encode(B.creds)):void 0;U(N,O).catch(()=>{})},isConnected(){return K()},getConnection(){return K()?Q:null},getJetStream(){if(!K())return null;if(!Y)Y=JJ8.jetstream(Q);return Y},onReady(N){if(W.push(N),K())try{N()}catch{}},async drain(){if(J=!0,X=!1,Y=null,G=!1,Q){let N=Q;Q=null,await N.drain().catch(()=>{})}}}}function Sr6($){return XJ8.connect($)}var YJ8,XJ8,JJ8,Ir6=100,Vr6=3000,kr6=3000;var WJ8=D(()=>{a$();YJ8=C(Az(),1),XJ8=C(QJ8(),1),JJ8=C(LK(),1)});function W_0($){let Z=$?.ttlMs??60000,Q=$?.maxSize??1e4,Y=$?.updateRecencyOnGet??!1,X=new Map;function J(){if(X.size<=Q)return;let G=Date.now();for(let[W,K]of X)if(K.expiresAt<=G)X.delete(W);while(X.size>Q){let W=X.keys().next().value;if(W===void 0)break;X.delete(W)}}return{get(G){let W=X.get(G);if(!W)return;if(W.expiresAt<=Date.now()){X.delete(G);return}if(Y)X.delete(G),X.set(G,W);return W.value},set(G,W){X.delete(G),X.set(G,{value:W,expiresAt:Date.now()+Z}),J()},delete(G){X.delete(G)},clear(){X.clear()},size(){return X.size}}}function K_0($,Z){return`${$}.${Z}`}class XO1{cache;constructor($){this.cache=W_0({ttlMs:$?.ttlMs??Cr6,maxSize:$?.maxSize??_r6})}async get($,Z){return this.cache.get(K_0($,Z))??null}async set($,Z,Q){this.cache.set(K_0($,Z),Q)}async invalidate($,Z){this.cache.delete(K_0($,Z)),this.cache.delete(K_0($,`${Z}:decisions`))}teardown(){this.cache.clear()}}var Cr6=600000,_r6=5000;var KJ8=()=>{};function H_0($,Z){return`${$}:${Z}`}function JO1($){let Z=W_0({ttlMs:$?.ttlMs??vr6,maxSize:$?.maxSize??br6}),Q=$?.getConnection,Y=crypto.randomUUID(),X=new TextEncoder,J=new TextDecoder,G=null;function W(K,H){let F=Q?.();if(!F)return;try{F.publish(HJ8,X.encode(JSON.stringify({organizationId:K,keyId:H,originId:Y})))}catch(U){console.warn("[ProviderKeyCache] Publish failed (non-critical):",U)}}return{get(K,H){return Z.get(H_0(K,H))},set(K,H,F){Z.set(H_0(K,H),F)},invalidate(K,H){Z.delete(H_0(K,H)),W(K,H)},start(){if(G)return;let K=Q?.();if(!K)return;G=K.subscribe(HJ8),(async()=>{for await(let H of G)try{let F=JSON.parse(J.decode(H.data));if(F.originId===Y)continue;Z.delete(H_0(F.organizationId,F.keyId))}catch{}})().catch(console.error)},teardown(){G?.unsubscribe(),G=null,Z.clear()}}}var HJ8="studio.ai-provider-keys.invalidate",vr6=30000,br6=5000;var FJ8=()=>{};class GO1{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 Q=new TextDecoder,Y=Z.subscribe("studio.decopilot.cancel");this.subscription=Y,(async()=>{for await(let X of Y)try{let J=JSON.parse(Q.decode(X.data));if(J.originId===this.originId)continue;this.onCancel?.(J.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 Q=this.encoder.encode(JSON.stringify({taskId:$,originId:this.originId}));Z.publish("studio.decopilot.cancel",Q)}catch(Z){console.warn("[NatsCancelBroadcast] Publish failed (non-critical):",Z)}}async stop(){this.subscription?.unsubscribe(),this.subscription=null,this.onCancel=null}}var UJ8=($)=>{let Z;return()=>Z??=$()},WO1,KO1;var NJ8=D(()=>{k6();WO1=UJ8(()=>e1.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),KO1=UJ8(()=>e1.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function lr6($=OJ8){return{name:tU,subjects:[`${tY1}.>`],storage:nH.StorageType.File,max_age:yr6,max_bytes:hr6,max_msgs_per_subject:ur6,discard:nH.DiscardPolicy.Old,retention:nH.RetentionPolicy.Limits,duplicate_window:gr6,num_replicas:$}}class LJ8{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 BJ8($){let Z=DJ8.headers();for(let[Q,Y]of Object.entries($))Z.set(Q,Y);return Z}function ir6($,Z){let Q=0;return{publish(Y,X,J,G){Y.publish(X,J,G?{headers:G}:void 0).catch((W)=>{if(Q++,fr6().add(1,{"org.id":Z??"unknown"}),Q===1||Q%100===0)console.warn(`[Decopilot] JetStream publish failed for thread ${$} (${Q} total):`,W)})},get errorCount(){return Q}}}function pr6($,Z){return $.info?.cluster?Z:1}function nr6($){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 HO1{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(Y,X)=>{let J=lr6(X);try{await Y.streams.info(tU),await Y.streams.update(tU,J)}catch(G){if(G instanceof Error&&G.message.includes("stream not found"))await Y.streams.add(J),await Y.streams.update(tU,J);else if(G instanceof Error&&/can ?not change.*storage|storage type/i.test(G.message))await Y.streams.delete(tU),await Y.streams.add(J);else throw G}},Q=await E8(async()=>{let Y=this.options.getJetStreamManager?await this.options.getJetStreamManager():await nH.jetstreamManager($),X=pr6($,OJ8);try{await Z(Y,X)}catch(J){if(X<=1||!nr6(J))throw J;console.warn(`[Decopilot] StreamBuffer: NATS rejected num_replicas=${X} (${J.message}); falling back to an unreplicated stream`),await Z(Y,1)}return Y},{maxAttempts:5,minTimeout:250,maxTimeout:4000,jitter:0.5,isRetriable:pd});this.js=this.options.getJetStream(),this.jsm=Q,console.log(`[Decopilot] StreamBuffer.init ${this.js?"ready":"degraded (js=null)"}`)}pump($,Z,Q,Y){let X=this.js;if(!X)return console.warn(`[Decopilot] pump: JetStream client unavailable for thread ${Z}; chunks NOT published to NATS`),Promise.resolve();let J=ir6(Z,Y),G=!1,W=()=>{if(G)return;G=!0;let H=qy$(Z);X.publish(H.subject,H.data).catch(()=>{})};Q.addEventListener("abort",W,{once:!0});let K=(H)=>{let F=performance.now(),U=rY1(H,{runId:Z}),N=performance.now()-F;WO1().record(N),KO1().add(1,{"org.id":Y??"unknown"}),dr6?.record(N,U.reduce((B,O)=>B+O.data.length,0));for(let B of U)J.publish(X,B.subject,B.data,B.headers?BJ8(B.headers):void 0)};return(async()=>{let H=$.getReader(),F=0,U=0,N;try{while(!0){let{done:B,value:O}=await H.read();if(B)break;if(K(O),U++,++F>=64)F=0,await new Promise((L)=>setImmediate(L))}}catch(B){N=B,console.warn(`[Decopilot] stream pump error for thread ${Z}:`,B?.message??B)}finally{if(H.releaseLock(),W(),mr6)console.warn(JSON.stringify({msg:"decopilot-stream-diag",event:"pump-done",taskId:Z,publishedChunks:U,publishErrors:J.errorCount}))}if(N!==void 0)throw N})()}async publishSerialized($,Z){try{return await E8(()=>$.publish(Z.subject,Z.data,{...Z.headers?{headers:BJ8(Z.headers)}:{},...Z.msgId?{msgID:Z.msgId}:{}}),{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:pd}),!0}catch(Q){return console.error(`[Decopilot] publish failed after retries subject=${Z.subject}`,Q),!1}}async publishRawChunk($,Z,Q){let Y=this.js;if(!Y)return!1;let X=performance.now(),J=rY1(Z,{runId:$,dedup:Q});WO1().record(performance.now()-X),KO1().add(1);for(let G of J)if(!await this.publishSerialized(Y,G))return!1;return!0}async publishDone($,Z,Q){let Y=this.js;if(!Y)return!1;let X=Ry$({runId:$,fenceToken:Z,finalSeq:Q});return await this.publishSerialized(Y,X)}async createTailStream($,Z,Q){let Y=this.js;if(!Y)return console.warn(`[Decopilot] createTailStream: JetStream client unavailable for thread ${$}; no live tail`),null;let X=Q?.deliverPolicy==="new"?nH.DeliverPolicy.New:nH.DeliverPolicy.All,J=Q?.closeOnDone??!1,G=jE($),W;try{W=await E8(async()=>{return(await Y.consumers.get(tU,{filter_subjects:G,deliver_policy:X})).consume()},{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:pd})}catch(L){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",L?.message??L),null}let F=YM0({messages:async function*(){try{for await(let L of W)yield{subject:L.subject,data:L.data,headers:L.headers}}finally{W.stop()}}(),onCancel:()=>W.stop()}).pipeThrough(eq0()).pipeThrough($M0()).getReader(),U=!1,N=()=>{if(U)return;U=!0;try{F.releaseLock()}catch{}},B=!1,O=()=>{if(B)return;B=!0,W.stop(),F.cancel().catch(()=>{}),N()};return Z?.addEventListener("abort",O,{once:!0}),new ReadableStream({async pull(L){for(;;){let{done:w,value:j}=await F.read();if(w){O(),L.close();return}let E=j;if(E.kind==="done"){if(J){O(),L.close();return}continue}L.enqueue(E.chunk);return}},cancel(){O()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge(tU,{filter:jE($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var nH,DJ8,xr6=($)=>{let Z;return()=>Z??=$()},fr6,yr6=86400000000000,gr6=120000000000,hr6=4294967296,OJ8,ur6=500000,cr6,mr6,dr6;var wJ8=D(()=>{a$();sY1();XM0();ZM0();k6();NJ8();nH=C(LK(),1),DJ8=C(Az(),1),fr6=xr6(()=>e1.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"})),OJ8=Math.max(1,Number(process.env.DECOPILOT_STREAM_REPLICAS??3)||3);cr6=process.env.STREAM_ENCODE_TRACE==="1",mr6=process.env.DECOPILOT_STREAM_TRACE==="1";dr6=cr6?new LJ8:null});function F_0($,Z,Q,Y){if(!Y)return!1;return $.emit(Z,DF(Q,Y.status,{title:Y.title??void 0,virtualMcpId:Y.virtual_mcp_id??void 0,createdBy:Y.created_by??void 0,triggerId:Y.trigger_id??null,branch:Y.branch??null,harnessId:Y.harness_id??void 0,createdAt:Y.created_at,updatedAt:Y.updated_at})),!0}var jJ8=D(()=>{p8()});class FO1{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}}function tr6($,Z,Q={}){let Y=$.startsWith("thread:")?RH($,Q):$;return[...new Set([Z,Y].filter((X)=>!!X))]}async function UO1($,Z){let Q=Z.organizationId;try{let Y=await $.storage.taskBoard.linkedThreadIds(Z.id,Q);for(let X of Y){let J=await xU($,X);if(!J?.owner||!J?.name)continue;let G=await $.storage.threads.get(X),W=await tm($,{threadId:X,runBranch:G?.branch}),K=await l00($,Q,N41(J)).catch(()=>null);if(!K){console.warn(`[task-board] no credential for ${J.owner}/${J.name} \u2014 `+`cannot look up ${Z.id}'s change request by branch`);continue}let H=tr6(W,await TT0($,X),{flat:Bf(K.repo.provider)});for(let F of H){let U=await K.readForBranch(F).catch(()=>null);if(!U)continue;return await $.storage.taskBoard.linkPr({taskBoardItemId:Z.id,organizationId:Q,url:U.url,prNumber:U.number,repo:K.repo}),await $.storage.taskBoard.openReviewCycleIfInProgress(Z.id,Q),await O3(Q).catch(()=>{}),console.log(`[task-board] ${Z.id}: linked ${U.url} found on branch ${F}`),!0}}}catch(Y){console.error("[task-board] PR lookup by branch failed",Y)}return!1}var EJ8=D(()=>{Q7();gW();_7()});async function zJ8($,Z,Q){let Y=Z.organizationId;if(!uX(Z))return!1;if(!xf(Q))return!1;if(await $.storage.taskBoard.hasHumanRejectedDone(Z.id,Y))return!1;let X=await $.storage.organizationSettings.get(Y),J=zU(X?.flags),G=await $.storage.taskBoard.update(Z.id,Y,{status:J},Z.updatedBy);return await $5($,{taskBoardItemId:Z.id,action:"status_changed",actorId:null,data:{from:Z.status,to:J,reason:"pr_merged"}}),L8(Y,G),console.log(`[task-board-review-sweeper] ${Z.id}: linked PR already merged \u2014 moved to ${J}`),!0}var PJ8=D(()=>{x4();cY();Cd();kH();P9()});function Zs6($){return $ instanceof kX}function AJ8($,Z){return Z-$>=er6}class NO1{taskBoard;contextFactory;billing;options;timer=null;running=!1;cursor=null;constructor($,Z,Q,Y={}){this.taskBoard=$;this.contextFactory=Z;this.billing=Q;this.options=Y}start(){if(this.timer)return;let $=this.options.intervalMs??or6;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??sr6,Q=this.options.itemIntervalMs??rr6,Y=new Date(Date.now()-Q),X=await this.taskBoard.listItemsPendingReview(Z,this.cursor,Y),J=X.at(-1);this.cursor=X.length===Z&&J?{updatedAt:J.updatedAt,id:J.id}:null;for(let{id:G,organizationId:W}of X)try{if(await this.reconcileItem(G,W,Y))$++}catch(K){console.error(`[task-board-review-sweeper] ${G} failed`,K)}await this.reapNeverStartedThreads(Z),$+=await this.dispatchDueRetries(Z),await this.reactToUnhandledFailures(Z),$+=await this.settleFinishedRunsWithoutPr(Z,Y)}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()-f71),YY1);for(let Q of Z)console.warn(`[task-board-review-sweeper] failed never-started thread ${Q.threadId} on ${Q.itemId}`)}catch(Z){console.error("[task-board-review-sweeper] reaping failed",Z)}}async reactToUnhandledFailures($){let Z=await this.taskBoard.listItemsStuckAfterFailure($,new Date(Date.now()-$s6));for(let{id:Q,organizationId:Y,threadId:X}of Z)try{console.warn(`[task-board-review-sweeper] reacting to an unhandled failure on ${Q}`),await $Y1(this.taskBoard,X,Y),await ZY1(this.taskBoard,this.billing,X,Y)}catch(J){console.error(`[task-board-review-sweeper] unhandled-failure reaction for ${Q} failed`,J)}}async settleFinishedRunsWithoutPr($,Z){let Q=0,Y=await this.taskBoard.listItemsFinishedWithoutPr($,Z);for(let{id:X,organizationId:J,finishedAt:G}of Y)try{if(!await this.taskBoard.claimSweep(X,J,Z))continue;let W=await this.taskBoard.getById(X,J);if(!W||W.status!==R$.progress||uX(W)||W.assigneeId!==R8)continue;let K=await this.contextFactory(J,W.assignedBy??W.createdBy);if(!K)continue;if(await UO1(K,W)){if(await this.taskBoard.clearSweepBudget(X,J),await this.reconcileItem(X,J,Z))Q++;continue}if(!AJ8(G.getTime(),Date.now()))continue;let H="the run finished without opening a pull request \u2014 there is "+"nothing for a reviewer to review",F=await this.taskBoard.advanceToReviewIfInProgress(X,J,W.updatedBy);if(!F)continue;await this.taskBoard.recordActivity({taskBoardItemId:X,action:"status_changed",actorId:null,data:{from:R$.progress,to:R$.review,reason:H}}).catch(()=>{}),L8(J,F),await SH(K,F,H)}catch(W){console.error(`[task-board-review-sweeper] settling finished run on ${X} failed`,W)}return Q}async dispatchDueRetries($){let Z=0,Q=await this.taskBoard.listItemsDueForRetry($,new Date);for(let{id:Y,organizationId:X,attempts:J}of Q)try{if(!await this.taskBoard.claimDueRetry(Y,X,new Date))continue;let G=await this.taskBoard.getById(Y,X);if(!G||G.status!==R$.progress||G.assigneeId!==R8)continue;let W=await this.contextFactory(X,G.assignedBy??G.createdBy);if(!W)continue;await CH(W,G,{runClass:"retry"}),Z++,console.warn(`[task-board-review-sweeper] re-dispatched ${Y} after a failure (attempt ${J})`)}catch(G){if(console.error(`[task-board-review-sweeper] retry dispatch for ${Y} failed`,G),Zs6(G)){await this.returnToTodo(Y,X,G instanceof Error?G.message:String(G));continue}await this.taskBoard.scheduleRunRetry(Y,X,J,new Date(Date.now()+ar6)).catch((W)=>console.error(`[task-board-review-sweeper] re-arming ${Y} failed`,W))}return Z}async returnToTodo($,Z,Q){try{let Y=await this.taskBoard.getById($,Z);if(!Y||Y.status!==R$.progress)return;let X=await this.taskBoard.returnToTodoAfterFailure($,Z,Y.updatedBy);if(!X)return;await this.taskBoard.recordActivity({taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:"in_progress",to:"todo",reason:Q}}).catch(()=>{}),L8(Z,X)}catch(Y){console.error(`[task-board-review-sweeper] returning ${$} to todo failed`,Y)}}async handOffReviewWithoutPr($,Z){let Q=await this.taskBoard.listActivity(Z.id,Z.organizationId);if(!AJ8(WD(Q,Z.reviewCycleStartedAt),Date.now()))return;await SH($,Z,"no pull request is linked to this task \u2014 there is nothing for a "+"reviewer to review")}async reconcileItem($,Z,Q){if(!await this.taskBoard.claimSweep($,Z,Q))return!1;let Y=await this.taskBoard.getById($,Z);if(!Y)return!1;if(!uX(Y))return!1;let X=Y.assigneeId===R8,J=await this.taskBoard.listPrs($,Z),G=await this.contextFactory(Z,Y.assignedBy??Y.createdBy);if(!G)return!1;if(J.length===0){if(await UO1(G,Y))J=await this.taskBoard.listPrs($,Z);if(J.length===0){if(X)await this.handOffReviewWithoutPr(G,Y);return!1}}let W=await Promise.all(J.map(async(K)=>({...K,...await bd(Z,K)})));if(W.every((K)=>K.state===null))console.warn(`[task-board-review-sweeper] ${$}: no live PR state from GitHub (${W.length} PR(s)) \u2014 proceeding on unknown`);if(await zJ8(G,Y,W))return!0;if(await Vg$(G,Y))return!0;if(await this.resolveConflictFromSweep(G,Y,W))return!0;if(!X)return!1;if(!rQ1(W))return!1;return await _d(G,Y,{previewMatchesHead:sQ1(W)}),!0}async resolveConflictFromSweep($,Z,Q){let Y=Q.find((X)=>X.state!=="closed"&&X.conflict===!0);if(!Y)return!1;return await DE($,Z.organizationId,Z,{pr:{number:Y.number,url:Y.url},conflict:!0}).catch((X)=>{return console.error("[task-board-review-sweeper] conflict resolve failed",X),!1})}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}var or6=60000,rr6=300000,sr6=50,ar6=60000,er6=900000,$s6=120000;var TJ8=D(()=>{x4();Oq0();EJ8();pU();O80();kH();PJ8();P9();VW();XY1();_7();l$0();vd()});import{readdir as Qs6,rm as U_0}from"fs/promises";import{join as N_0}from"path";async function B_0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-Ys6),Z.setUTCHours(0,0,0,0);let Q=0;try{let Y=await ey($);for(let X of Y)if(/^\d{4}$/.test(X))Q+=await RJ8($,X,Z);else if(!X.startsWith(".")){let J=N_0($,X),G=await ey(J);for(let K of G){if(!/^\d{4}$/.test(K))continue;Q+=await RJ8(J,K,Z)}if((await ey(J)).length===0)await U_0(J,{recursive:!0,force:!0})}}catch(Y){console.warn("monitoring retention cleanup failed:",Y)}return Q}async function RJ8($,Z,Q){let Y=0,X=N_0($,Z),J=await ey(X);for(let W of J){if(!/^\d{2}$/.test(W))continue;let K=N_0(X,W),H=await ey(K);for(let U of H){if(!/^\d{2}$/.test(U))continue;let N=new Date(`${Z}-${W}-${U}T00:00:00Z`);if(isNaN(N.getTime()))continue;if(N<Q){let B=N_0(K,U);await U_0(B,{recursive:!0,force:!0}),Y++}}if((await ey(K)).length===0)await U_0(K,{recursive:!0,force:!0})}if((await ey(X)).length===0)await U_0(X,{recursive:!0,force:!0});return Y}async function ey($){try{return(await Qs6($)).filter((Q)=>!Q.startsWith("."))}catch{return[]}}var Ys6=30;var BO1=()=>{};import{DBOS as DO1,SchedulerMode as Xs6}from"@dbos-inc/dbos-sdk";async function Gs6(){let $=[KK(),Kg(),VN()],Z=0;for(let Q of $)try{Z+=await B_0(Q)}catch(Y){console.error("[monitoring-retention] cleanup failed:",Y)}return console.log(`[monitoring-retention] deleted ${Z} day-dir(s) across ${$.length} signal dir(s)`),{deleted:Z,dirs:$.length}}async function Ws6($,Z){await DO1.runStep(()=>Gs6(),{name:"monitoringRetention"})}function MJ8(){if(qJ8)return;qJ8=!0;let $=DO1.registerWorkflow(Ws6,{name:"monitoringRetentionWorkflow"});DO1.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:Js6,mode:Xs6.ExactlyOncePerIntervalWhenActive})}var Js6="23 4 * * *",qJ8=!1;var IJ8=D(()=>{_3();BO1()});function VJ8($){return async(Z,Q)=>{let Y=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","=",Q).where("member.organizationId","=",Z).executeTakeFirst();if(!Y)return console.warn(`[automationContextFactory] User ${Q} not found in org ${Z} \u2014 returning null`),null;let X=await cQ.create();X.auth.user={id:Q,role:Y.role},X.organization={id:Y.orgId,slug:Y.orgSlug,name:Y.orgName};let J=await NA($.db,Z,Y.role);return X.boundAuth=xU1({auth:X.authInstance,headers:new Headers,role:Y.role,permissions:J,userId:Q}),X.access=new aP(Q,void 0,X.boundAuth,Y.role,"self"),BE(X,{id:Y.orgId,slug:Y.orgSlug}),X}}var kJ8=D(()=>{QW();wU()});function Ks6(){return[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}]}function Hs6(){return{services:Ks6(),migrationsStatus:"pending",serverUrl:null,logs:[]}}function Us6(){for(let $ of Fs6)$()}function SJ8($){let Z=[...OO1.logs,$];OO1={...OO1,logs:Z.length>500?Z.slice(-500):Z},Us6()}function LO1(){return Ns6}var OO1,Fs6,Ns6=!1;var wO1=D(()=>{OO1=Hs6(),Fs6=new Set});import{EventEmitter as Bs6}from"events";var jO1;var CJ8=D(()=>{wO1();jO1=new Bs6;jO1.on("request",($)=>{SJ8($)})});function _J8(){return async($,Z)=>{let Q=Date.now(),Y=$.req.method,X=$.req.path;if(X==="/api/auth/get-session"||X.includes("favicon")){await Z();return}let J="",G=!1;if(X.startsWith("/mcp")&&Y==="POST"){G=!0;try{if($.req.header("Content-Type")?.includes("application/json")){let N=await $.req.raw.clone().json();if(N.method==="tools/call"&&N.params?.name){let B=cp(N.params.name),O=N.params.arguments||{},L=Object.keys(O).map((j)=>cp(j)),w=L.length>0?L.slice(0,3).join(",")+(L.length>3?"\u2026":""):"";J=`${W9.tool}${B}${W9.dim}(${w})${W9.reset}`}else if(N.method)J=`${W9.dim}${cp(N.method)}${W9.reset}`}}catch{}}let W=cp(X);if(X.startsWith("/mcp/conn_")){let F=X.split("/")[2]??"";W=`/mcp/${W9.mcp}${cp(F.slice(0,12))}\u2026${W9.reset}`}else if(X==="/mcp")W=`${W9.mcp}/mcp${W9.reset}`;else if(X==="/mcp/registry")W=`${W9.mcp}/mcp/registry${W9.reset}`;let K=Os6(Y),H=G?"\u25C0":"\u2190";if(!LO1())console.log(`${W9.dim}${H}${W9.reset} ${K}${Y}${W9.reset} ${W}${J?` ${J}`:""}`);try{await Z()}finally{let F=Date.now()-Q,U=$.res.status,N=Ds6(U),B=F<1000?`${F}ms`:`${(F/1000).toFixed(1)}s`,O=G?"\u25B6":"\u2192";if(!LO1())console.log(`${W9.dim}${O}${W9.reset} ${K}${Y}${W9.reset} ${W}${J?` ${J}`:""} ${N}${U}${W9.reset} ${W9.duration}${B}${W9.reset}`);jO1.emit("request",{method:Y,path:cp(X),status:U,duration:F,timestamp:new Date})}}}var W9,Ds6=($)=>{if($>=500)return W9.serverError;if($>=400)return W9.clientError;if($>=300)return W9.redirect;return W9.ok},Os6=($)=>{return W9[$]||W9.reset},cp=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var vJ8=D(()=>{wO1();CJ8();W9={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 yJ8}from"crypto";import{mkdir as Ls6,readdir as ws6,rm as bJ8,stat as gJ8}from"fs/promises";import{join as zO1,relative as js6}from"path";import{z as Q8}from"zod";function uJ8($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return zO1(Es6,Z)}function lJ8($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function EO1($,Z){let Q=uJ8($),Y=lJ8(Z);return zO1(Q,Y)}function zs6($,Z,Q,Y){let X=E0().encryptionKey||"dev-secret",J=`${$}:${Z}:${Q}:${Y}`;return yJ8("sha256",X).update(J).digest("hex")}function fJ8($,Z,Q,Y,X){let J=Math.floor(Date.now()/1000)+Y,G=zs6(Z,Q,J,X),W=new URL(`/api/dev-assets/${Z}/${lJ8(Q)}`,$);return W.searchParams.set("expires",J.toString()),W.searchParams.set("signature",G),W.searchParams.set("method",X),W.toString()}function cJ8($,Z,Q){let Y=`${$}:${Z.getTime()}:${Q}`;return`"${yJ8("md5","etag").update(Y).digest("hex")}"`}async function mJ8($,Z,Q,Y,X){try{let J=await ws6($,{withFileTypes:!0});for(let G of J){let W=zO1($,G.name),H=js6(Z,W).replace(/\\/g,"/");if(Q&&!H.startsWith(Q))continue;if(G.isDirectory())if(Y){let F=H+"/";if(!Q||F.startsWith(Q)){if(!(Q?H.slice(Q.length):H).includes("/"))X.commonPrefixes.add(F)}}else await mJ8(W,Z,Q,Y,X);else if(G.isFile()){if(Y&&Q){let F=H.slice(Q.length);if(F.includes(Y)){let U=F.indexOf(Y),N=Q+F.slice(0,U+1);X.commonPrefixes.add(N);continue}}try{let F=await gJ8(W);X.objects.push({key:H,size:F.size,lastModified:F.mtime.toISOString(),etag:cJ8(W,F.mtime,F.size)})}catch{}}}}catch{}}function dJ8($,Z){let Y=J0($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:Q8.object({prefix:Q8.string().optional(),maxKeys:Q8.number().optional().default(1000),continuationToken:Q8.string().optional(),delimiter:Q8.string().optional()}),outputSchema:Q8.object({objects:Q8.array(Q8.object({key:Q8.string(),size:Q8.number(),lastModified:Q8.string(),etag:Q8.string()})),nextContinuationToken:Q8.string().optional(),isTruncated:Q8.boolean(),commonPrefixes:Q8.array(Q8.string()).optional()}),handler:async(X)=>{let J=X,G=J.prefix||"",W=J.maxKeys??1000,K=J.delimiter,H=J.continuationToken,F=uJ8(Y);await Ls6(F,{recursive:!0});let U={objects:[],commonPrefixes:new Set};await mJ8(F,F,G,K,U),U.objects.sort((w,j)=>w.key.localeCompare(j.key));let N=0;if(H){if(N=U.objects.findIndex((w)=>w.key>H),N===-1)N=U.objects.length}let B=U.objects.slice(N,N+W),O=N+W<U.objects.length,L=O?B[B.length-1]?.key:void 0;return{objects:B,isTruncated:O,nextContinuationToken:L,commonPrefixes:Array.from(U.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:Q8.object({key:Q8.string()}),outputSchema:Q8.object({contentType:Q8.string().optional(),contentLength:Q8.number(),lastModified:Q8.string(),etag:Q8.string(),metadata:Q8.record(Q8.string(),Q8.string()).optional()}),handler:async(X)=>{let J=X,G=EO1(Y,J.key),W=await gJ8(G);return{contentType:bN1(J.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:cJ8(G,W.mtime,W.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:Q8.object({key:Q8.string(),expiresIn:Q8.number().optional()}),outputSchema:Q8.object({url:Q8.string(),expiresIn:Q8.number()}),handler:async(X)=>{let J=X,G=aD(J.expiresIn,xJ8);return{url:fJ8(Z,Y,J.key,G,"GET"),expiresIn:G}}},{name:"PUT_PRESIGNED_URL",description:"Generate a presigned URL for uploading a file to local storage",inputSchema:Q8.object({key:Q8.string(),expiresIn:Q8.number().optional(),contentType:Q8.string().optional()}),outputSchema:Q8.object({url:Q8.string(),expiresIn:Q8.number()}),handler:async(X)=>{let J=X,G=aD(J.expiresIn,xJ8);return{url:fJ8(Z,Y,J.key,G,"PUT"),expiresIn:G}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:Q8.object({key:Q8.string()}),outputSchema:Q8.object({success:Q8.boolean(),key:Q8.string()}),handler:async(X)=>{let J=X,G=EO1(Y,J.key);try{return await bJ8(G),{success:!0,key:J.key}}catch{return{success:!1,key:J.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:Q8.object({keys:Q8.array(Q8.string()).max(1000)}),outputSchema:Q8.object({deleted:Q8.array(Q8.string()),errors:Q8.array(Q8.object({key:Q8.string(),message:Q8.string()}))}),handler:async(X)=>{let J=X,G=[],W=[];return await Promise.all(J.keys.map(async(K)=>{let H=EO1(Y,K);try{await bJ8(H),G.push(K)}catch(F){W.push({key:K,message:F instanceof Error?F.message:"Unknown error"})}})),{deleted:G,errors:W}}}]}async function PO1($,Z,Q){let Y=dJ8(Z,Q),X=new Ww({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:vZ});for(let G of Y){let W="shape"in G.inputSchema?G.inputSchema.shape:Q8.object({}).shape,K=G.outputSchema&&"shape"in G.outputSchema?G.outputSchema.shape:Q8.object({}).shape;X.registerTool(G.name,{description:G.description??"",inputSchema:W,outputSchema:K,annotations:G.annotations,_meta:G._meta},async(H)=>{try{let F=await G.handler(H);return{content:[{type:"text",text:JSON.stringify(F)}],structuredContent:F}}catch(F){return{content:[{type:"text",text:`Error: ${F.message}`}],isError:!0}}})}let J=new z3({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await X.connect(J),pW(X,J,$,"mcp:dev-assets")}async function iJ8($,Z,Q,Y){let J=dJ8(Q,Y).find((G)=>G.name===$);if(!J)return{content:[{type:"text",text:`Tool not found: ${$}`}],isError:!0};try{let G=await J.handler(Z);return{content:[{type:"text",text:JSON.stringify(G)}]}}catch(G){return{content:[{type:"text",text:G instanceof Error?G.message:String(G)}],isError:!0}}}var Es6="./data/assets",xJ8=3600,hJ8,pJ8;var nJ8=D(()=>{X$();ed();J8();CJ0();ad();NJ();eD();aS0();hJ8=new Z1;hJ8.all("/",async($)=>{let Z=$.get("studioContext"),Q=new URL($.req.url),Y=`${Q.protocol}//${Q.host}`;return PO1($.req.raw,Z,Y)});pJ8=hJ8});var tJ8={};$6(tJ8,{mountDevRoutes:()=>Ps6});function Ps6($,Z){$.all("/mcp/:connectionId{.*_dev-assets$}",Z,async(Y)=>{let X=Y.get("studioContext"),J=new URL(Y.req.url),G=`${J.protocol}//${J.host}`;return PO1(Y.req.raw,X,G)}),$.all("/mcp/:connectionId{.*_dev-assets$}/call-tool/:toolName",Z,async(Y)=>{let X=Y.get("studioContext"),J=new URL(Y.req.url),G=`${J.protocol}//${J.host}`,W=Y.req.param("toolName");if(!W)return Y.json({error:"Missing tool name"},400);let K=await Y.req.json(),H=await iJ8(W,K,X,G);if(H.isError)return Y.json(H.content,500);return Y.json(H.content)}),$.use("/mcp/dev-assets",Z),$.route("/mcp/dev-assets",pJ8);let Q=new Z1;Q.use("*",iH({mountPath:"/api/dev-assets"})),Q.route("/",sS0({orgFromPath:!1})),$.route("/api/dev-assets",Q)}var oJ8=D(()=>{J8();IN1();aS0();nJ8()});var JG8={};$6(JG8,{watchHandler:()=>XG8,resolveCorsOrigin:()=>QG8,isSsoExemptPath:()=>$G8,isAllowedOAuthRedirectUri:()=>YG8,createApp:()=>Cs6});import{readFileSync as As6}from"fs";import{PrometheusSerializer as Ts6}from"@opentelemetry/exporter-prometheus";import{DBOS as jO}from"@dbos-inc/dbos-sdk";import{oAuthDiscoveryMetadata as Ms6,oAuthProtectedResourceMetadata as Is6}from"better-auth/plugins";async function Rs6($){let Z=$.connect(),Q;try{Q=await Promise.race([Z,sJ8(rJ8)])}catch{return Z.then((Y)=>Y.release(!0)).catch(()=>{}),!1}try{return await Promise.race([Q.query("SELECT 1"),sJ8(rJ8)]),Q.release(),!0}catch{return Q.release(!0),!1}}function sJ8($){return new Promise((Z,Q)=>setTimeout(()=>Q(Error("pg health-check timeout")),$))}function $G8($){return $.startsWith("/api/org-sso/")||/^\/api\/[^/]+\/sso\//.test($)||$.startsWith("/api/auth/")||$.startsWith("/api/tools/management")||$.startsWith("/oauth-proxy/")||/^\/api\/[^/]+\/oauth-proxy\//.test($)||$.startsWith(`${yS0}/`)||$.startsWith(`${CS0}/`)}function ZG8($){return $==="local.studio.decocms.com"}function QG8($,{baseUrl:Z,requestOrigin:Q}){let Y;try{Y=new URL($).hostname}catch{return null}if(Y==="localhost"||Y==="127.0.0.1")return $;if(ZG8(Y))return $;let X=Z??Q;try{if(new URL(X).origin===$)return $}catch{}return null}function YG8($,Z){return $.origin===new URL(Z).origin||$.hostname==="localhost"||ZG8($.hostname)}async function Cs6($={}){let Z=$.database??D8(),Q=!1;_5.stop().catch((K0)=>{console.error("[SSEHub] Error stopping previous broadcast (HMR cleanup):",K0)});let Y,X,J,G,W=new XO1,K,H,F,U=null;if($.disableNats)K=JO1(),Y={get:async()=>null,set:async()=>{},invalidate:async()=>{},teardown:()=>{}},X=null,J=null,G=new R80,H={start:async()=>{},broadcast:()=>{},stop:async()=>{}},F={init:async()=>{},pump:(K0)=>{return(async()=>{let H0=K0.getReader();try{while(!0){let{done:R0}=await H0.read();if(R0)break}}catch{}finally{H0.releaseLock()}})()},publishRawChunk:async()=>!1,publishDone:async()=>!1,createTailStream:async()=>null,purge:()=>{},teardown:()=>{}};else{U=GJ8();let K0=E0().natsCredsPath,H0;if(K0)try{H0=As6(K0,"utf8")}catch(w8){console.error(`[app] failed to read NATS_CREDS at ${K0}; connecting anonymously`,w8)}U.init(E0().natsUrls,H0?{creds:H0}:void 0);let R0=Q$1()?new h11({getJetStream:()=>U.getJetStream()}):null;R0?.init().catch(()=>{}),Y=R0;let A0=new a91({getJetStream:()=>U.getJetStream()});A0.init().catch(()=>{}),X=A0;let D1=new yf(dQ1,{getJetStream:()=>U.getJetStream()}),x$=new yf(c$0,{getJetStream:()=>U.getJetStream()});D1.init().catch(()=>{}),x$.init().catch(()=>{}),J={reads:D1,cards:x$};let i$=new vJ1({getJetStream:()=>U.getJetStream()});i$.init().catch(()=>{}),G=i$,K=JO1({getConnection:()=>U.getConnection()}),H=new GO1({getConnection:()=>U.getConnection()}),F=new HO1({getConnection:()=>U.getConnection(),getJetStream:()=>U.getJetStream()}),f48(U),U.onReady(()=>{R0?.init().catch((w8)=>{console.error("[McpListCache] Deferred init failed:",w8)}),A0.init().catch((w8)=>{console.error("[SkillCatalogCache] Deferred init failed:",w8)}),D1.init().catch((w8)=>{console.error("[PrReadCache] Deferred init failed:",w8)}),x$.init().catch((w8)=>{console.error("[PrCardCache] Deferred init failed:",w8)}),i$.init().catch((w8)=>{console.error("[ConnectionCircuitStore] Deferred init failed:",w8)}),K.start(),gN$(()=>U.getConnection()),F.init().catch((w8)=>{console.warn("[Decopilot] StreamBuffer init failed (late-join disabled):",w8)})})}if(Xz)await Xz();u11(Y),$Z1(X),iQ1(J),bJ1(G);let B={storage:new oh(Z.db),sseHub:_5,onThreadFinished:async(K0,H0)=>fd(new D3(Z.db),K0,H0,new kG(Z.db))},O=new YX1(B),L=new d40(Z.db),w=new FO1(L);w.start(),Mg$(H),H.start((K0)=>{cq0(K0),O.execute({type:"CANCEL",taskId:K0}).catch((H0)=>{console.error("[Decopilot] CancelBroadcast execute failed:",H0)})}).catch((K0)=>{console.error("[Decopilot] CancelBroadcast start failed:",K0)}),U?.onReady(()=>{H.start().catch((K0)=>{console.error("[CancelBroadcast] Deferred start failed:",K0)})});let j=()=>U?.getConnection()??null;AN1(j),U?.onReady(()=>AN1(j)),OG1(j),U?.onReady(()=>OG1(j)),F.init().catch((K0)=>{console.warn("[Decopilot] StreamBuffer init failed, attach/late-join disabled:",K0)}),Xz=async()=>{await O.stopAll(),O.dispose(),w.dispose(),H.stop().catch(()=>{}),s68(),F.teardown(),Y?.teardown(),X?.teardown(),J?.reads.teardown(),J?.cards.teardown(),W.teardown(),K.teardown(),hN$(),G.teardown(),u11(null),$Z1(null),iQ1(null),bJ1(null)};let E=new Z1;if(E.use("*",SJ1({enabled:(K0)=>Gp(K0,"debug")==="1"})),E.use("*",x_0),E.use("/*",C48({origin:(K0,H0)=>QG8(K0,{baseUrl:E0().baseUrl,requestOrigin:new URL(H0.req.url).origin}),credentials:!0,allowMethods:["GET","POST","PUT","DELETE","OPTIONS"],allowHeaders:["Content-Type","Authorization","mcp-protocol-version"],exposeHeaders:["WWW-Authenticate"]})),E.use("*",async(K0,H0)=>{if(await H0(),K0.req.path.includes("/files/"))return;if(K0.req.path.includes("/fs/")&&K0.req.path.endsWith("/read"))return;K0.header("X-Frame-Options","DENY"),K0.header("Content-Security-Policy","frame-ancestors 'none'")}),!E0().noTui)E.use("*",_J8());E.use("*",async(K0,H0)=>{if(await H0(),ap(K0.req.path))return;if(K0.res.status>=500){let A0=await K0.res.clone().text();console.error(`[5xx Response] ${K0.req.method} ${K0.req.path} - ${K0.res.status}:`,A0)}}),E.get(aY.HEALTH,(K0)=>{if(Q)return K0.json({status:"shutting_down"},503);return K0.json({status:"ok"})}),E.get(aY.HEALTH_LIVE,(K0)=>{return K0.json({status:"ok"})}),E.get(aY.HEALTH_READY,async(K0)=>{if(Q)return K0.json({status:"shutting_down"},503);let H0={};if(H0.postgres={status:await Rs6(Z.pool)?"up":"down"},U)H0.nats=U.isConnected()?{status:"up"}:{status:"down"};else H0.nats={status:"down"};let R0=H0.postgres.status==="up",A0=R0?200:503;return K0.json({status:R0?"ready":"not_ready",services:H0},A0)}),E.get(aY.METRICS,async(K0)=>{try{let H0=await h_0.collect(),R0=qs6.serialize(H0.resourceMetrics);return K0.text(R0,200,{"Content-Type":"text/plain; version=0.0.4; charset=utf-8"})}catch(H0){return console.error("Failed to collect metrics:",H0),K0.text("# Error collecting metrics",500)}});let z=1800000;E.get(`${aY.DBOS_QUEUE_DEPTH_PREFIX}:queueName`,async(K0)=>{let H0=K0.req.param("queueName");if(!Vs6.has(H0))return K0.json({error:`Unknown queue: ${H0}`},404);let[R0,A0]=await Promise.all([jO.listQueuedWorkflows({queueName:H0,status:"ENQUEUED",loadInput:!1,loadOutput:!1}),jO.listQueuedWorkflows({queueName:H0,status:"PENDING",loadInput:!1,loadOutput:!1,dequeuedAfter:new Date(Date.now()-z).toISOString()})]);return K0.json({queue_length:R0.length,in_flight:A0.length})}),E.route("/api/config",OX8),E.route("/api/_reports",IX8),E.route("/api/_stripe",tD1),E.route("/api/_github",SX8({taskBoard:()=>i,contextFactory:()=>g})),E.route("/api/_git",Dp);let T={db:Z.db,encryptionKey:E0().encryptionKey};E.route("/api/_jira",hX8(T)),E.route("/api/_jira",bX8(T)),E.route("/report",RX8($.clientDir)),E.route("/api/auth/custom",Q68),E.route("/api/auth/desktop",G68),E.all("/api/auth/admin/*",g68),E.all("/api/auth/*",async(K0)=>{return await x8.handler(K0.req.raw)});let A=K88();A.use("/.well-known/oauth-protected-resource/mcp/:connectionId",Y60),A.use("/mcp/:connectionId/.well-known/oauth-protected-resource",Y60),E.route("/",A),E.get("/.well-known/oauth-protected-resource/api/:org/mcp/:connectionId",c40),E.route("/",B88()),E.use("/oauth-proxy/:connectionId/*",Y60),E.all("/oauth-proxy/:connectionId/*",aJ8);let P=async(K0)=>{let R0=await ks6()(K0.req.raw),A0=await R0.json();return Response.json(A0,R0)};E.use("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",Y60),E.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",P);let q=async(K0)=>{let R0=await Ss6()(K0.req.raw),A0=await R0.json();return Response.json(A0,R0)};E.get("/.well-known/oauth-authorization-server/*/:gateway?/:connectionId?",q);let x=v48({ttlMs:120000}),_=await X48({db:Z.db,auth:x8,encryption:{key:E0().encryptionKey},observability:{tracer:IO,meter:e1},modelListCache:W,providerKeyCache:K,memberRoleCache:x});cQ.set(_),jp1({db:Z.db,baseUrl:m5()}),J48({db:Z.db}),H48({db:Z.db}),w48({db:Z.db}),fX8({db:Z.db,encryptionKey:E0().encryptionKey}),Xb$({db:Z.db}),T48({db:Z.db}),Ib$({db:Z.db});let V=EX0(Z.db),y=new _r(Z.db),g=VJ8({db:Z.db});MJ1({storage:V,studioContextFactory:g}),BX1({systemDatabaseUrl:Ws0(E0().databaseUrl,E0().databasePgSsl),studioContextFactory:g,deps:{runRegistry:O,cancelBroadcast:H,streamBuffer:F,sseHub:_5}}),GX1({dispatchRunFn:wy$,studioContextFactory:g,deps:{runRegistry:O,cancelBroadcast:H,streamBuffer:F,sseHub:_5}});let l=new oh(Z.db),i=new D3(Z.db),p=new kG(Z.db),U0=new NO1(i,g,p);if(E0().taskBoardReviewSweeperEnabled){U0.start();let K0=Xz;Xz=async()=>{await K0?.(),U0.dispose()}}gy$({getJetStream:()=>U?.getJetStream()??null,getJetStreamManager:async()=>{let K0=U?.getConnection();return K0?await eJ8.jetstreamManager(K0):null},messageParts:l.messageParts(),resolveRun:async(K0)=>{let H0=await Z.db.selectFrom("threads").select(["organization_id","created_by","message_storage_version","status","run_fence_token","title"]).where("id","=",K0).executeTakeFirst();return H0?{orgId:H0.organization_id,createdBy:H0.created_by,version:H0.message_storage_version??1,status:H0.status,runFenceToken:H0.run_fence_token,title:H0.title??null}:null},completeRunIfNotCompleted:async(K0,H0)=>{let R0=await l.completeRunIfNotCompleted(K0,H0);if(F_0(_5,H0,K0,R0),R0)await fd(i,K0,H0,p);return R0},markRunRequiresAction:async(K0,H0)=>{let R0=await l.requiresActionIfInProgress(K0,H0);return F_0(_5,H0,K0,R0),R0},markRunFailed:async(K0,H0,R0,A0)=>{let D1=await l.markRunFailed(K0,H0,R0,A0);if(F_0(_5,H0,K0,D1),D1)await fd(i,K0,H0,p);return D1},clearSynthesizedError:async(K0,H0)=>{await l.messageParts().replaceMessageParts(K0,wE(K0,H0),[])},persistTitle:(K0,H0,R0)=>l.update(K0,H0,{title:R0}),onTitleUpdated:async({runId:K0,orgId:H0,title:R0})=>{let A0=await l.get(K0,H0).catch(()=>null);_5.emit(H0,DF(K0,A0?.status??"in_progress",{title:R0,virtualMcpId:A0?.virtual_mcp_id??void 0,createdBy:A0?.created_by,triggerId:A0?.trigger_id,branch:A0?.branch??null,harnessId:A0?.harness_id??void 0,createdAt:A0?.created_at,updatedAt:A0?.updated_at}))},bumpProgress:async({runId:K0,orgId:H0})=>{await l.bumpProgress(K0,H0)},recordCompleted:async({runId:K0,orgId:H0,distinctId:R0,usage:A0})=>{f1.capture({distinctId:R0,event:"chat_message_completed",groups:{organization:H0},properties:{organization_id:H0,thread_id:K0,transport:"projector",input_tokens:A0.inputTokens,output_tokens:A0.outputTokens,total_tokens:A0.totalTokens}})},recordFailed:async({runId:K0,orgId:H0,distinctId:R0,reason:A0,kind:D1})=>{f1.capture({distinctId:R0,event:"chat_message_failed",groups:{organization:H0},properties:{organization_id:H0,thread_id:K0,transport:"projector",error_category:D1,error_message:A0}})},purgeRun:async(K0)=>{F.purge(K0)}}),mf$({studioContextFactory:g,systemDatabaseUrl:Ws0(E0().databaseUrl,E0().databasePgSsl),streamBuffer:F}),MJ8(),Ep1(),W48(),U48(),E48(),gX8(),Hb$(),q48(),Vb$(),_X8();let v0=async(K0,H0,R0)=>{let A0=await V.findById(K0,H0);if(!A0)throw Error("Automation not found");return kJ1({automationId:A0.id,organizationId:A0.organization_id,triggerId:null})},G0=new Np(V,({automation:K0,trigger:H0,contextMessages:R0,idempotencyKey:A0})=>T80({automationId:K0.id,organizationId:K0.organization_id,triggerId:H0.id,contextMessages:R0},{idempotencyKey:A0})),N0=[KK(),Kg(),VN()];for(let K0 of N0)B_0(K0).then(()=>{}).catch((H0)=>console.error("[monitoring] Retention cleanup failed:",H0));let o=()=>x8.api.deleteAllExpiredApiKeys().catch((K0)=>console.error("[auth] Expired API key cleanup failed:",K0));o(),setInterval(o,86400000).unref(),E.use("*",async(K0,H0)=>{if(v_0(K0.req.path))return H0();let R0={measure:async(D1,x$)=>{iW(K0,D1);try{return await x$()}finally{P3(K0,D1)}}},A0=await cQ.create(K0.req.raw,{timings:R0});A0.automationRunner=v0,K0.set("studioContext",A0);try{await H0()}finally{let D1=A0.pendingRevalidations;if(D1.length>0)Promise.race([Promise.allSettled(D1),O$(30000)]).catch((i$)=>console.error("[studio] revalidation cleanup error:",i$))}}),E.use("/api/:org/decopilot/*",Kp),E.use("/api/:org/v1/*",Kp),E.use("/api/:org/files/*",Kp),E.use("*",async(K0,H0)=>{if($G8(K0.req.path))return H0();let R0=K0.get("studioContext");if(!R0?.organization?.id||!R0?.auth?.user?.id)return H0();if(!(await R0.storage.orgSsoConfig.getByOrgId(R0.organization.id))?.enforced)return H0();if(!await R0.storage.orgSsoSessions.isValid(R0.auth.user.id,R0.organization.id))return K0.json({error:"SSO authentication required for this organization"},403);return H0()});let $0=new Z1;$0.use("*",iH({mountPath:"/api/org-sso"})),$0.route("/",uS0()),E.route("/api/org-sso",$0),E.get("/api/tools/management",(K0)=>{return K0.json({tools:cn0,grouped:sP()})}),E.use("/mcp/*",async(K0,H0)=>{iW(K0,"mcp");try{return await H0()}finally{P3(K0,"mcp")}});let Z0=async(K0,H0)=>{let R0=K0.var.studioContext;if(!R0.auth.user?.id&&!R0.auth.apiKey?.id){let A0=new URL(K0.req.url),D1=K0.req.header("x-forwarded-proto")?.split(",")[0]?.trim(),x$=D1?`${D1}://${A0.host}`:A0.origin;return K0.res=new Response(null,{status:401,headers:{"WWW-Authenticate":`Bearer realm="mcp",resource_metadata="${x$}${A0.pathname}/.well-known/oauth-protected-resource"`}})}return await H0()};if(E.use("/mcp/:connectionId?",Z0),E.use("/mcp/gateway/:virtualMcpId?",Z0),E.use("/mcp/virtual-mcp/:virtualMcpId?",Z0),E.use("/mcp/self",Z0),TW()){let{mountDevRoutes:K0}=(oJ8(),P_0(tJ8));K0(E,Z0)}let r=new Z1;r.use("*",iH({mountPath:"/mcp"})),r.route("/",fM0()),E.route("/mcp",r);let Y0=new Z1;Y0.use("*",iH({mountPath:"/mcp/self"})),Y0.route("/",kC0()),E.route("/mcp/self",Y0);let d0=new Z1;d0.use("*",iH({mountPath:"/mcp"})),d0.route("/",hM0()),E.route("/mcp",d0),E.use("/api/:org/models/*",async(K0,H0)=>{iW(K0,"llm_models");try{return await H0()}finally{P3(K0,"llm_models")}});let S0=e68({cancelBroadcast:H,streamBuffer:F,runRegistry:O});E.route("/api",S0),E.route("/api",mX8);let W1=new Z1;W1.use("*",iH({mountPath:"/api"})),W1.route("/",vC0()),E.route("/api",W1),E.route("/api",KX8);let u0=new Z1;u0.use("*",iH({mountPath:"/api"})),u0.route("/",bC0({tokenStorage:y,automationEventDispatcher:G0})),E.route("/api",u0);let L0=new br(Z.db),j0=new Z1;j0.use("*",iH({mountPath:"/api"})),j0.route("/",iS0()),E.route("/api",j0),E.route("/api/deco-sites",D58()),E.route("/api/deco-apps",QX8());let l0=new Z1;l0.use("*",iH({mountPath:"/api/deco-sites"})),l0.route("/",nS0()),E.route("/api/deco-sites",l0),E.route(yS0,h68()),E.route(p78,o78()),E.route("/api/_editor-resolve",FX8()),E.route(K68,H68()),E.route(CS0,E68());let O1=E0(),Q1=O1.elevenlabsApiKey?new Q_0({apiKey:O1.elevenlabsApiKey,model:O1.elevenlabsVoiceModel,conversationModel:O1.elevenlabsConversationModel,voiceId:O1.elevenlabsVoiceId}):null,_0={openai:O1.openaiLiveApiKey?new uD1({apiKey:O1.openaiLiveApiKey,voice:O1.openaiLiveVoice}):null,elevenlabs:Q1?new hD1(Q1,()=>U?.getConnection()??null):null},m0=new iD1({adapter:Q1,conversationAdapters:_0,defaults:O1,secret:O1.studioJwtSecret??O1.betterAuthSecret,getConnection:()=>U?.getConnection()??null}),i0=bY8({voiceSessions:m0,kvStorage:L0,runRegistry:O,streamBuffer:F,sseHub:_5,cancelBroadcast:H,tokenStorage:y,automationEventDispatcher:G0,mountDevAssets:TW(),mcpAuth:Z0,oauthProxyHandler:aJ8,watchHandler:XG8,betterAuthProtectedResourceHandler:P,getNatsConnection:()=>U?.getConnection()??null});return E.route("/api/:org",i0),E.notFound((K0)=>{return K0.json({error:"Not Found",path:K0.req.path},404)}),E.onError(Z58),Object.assign(E,{markShuttingDown:()=>{Q=!0},shutdown:async()=>{if(console.log("[shutdown] Stopping workers..."),await Promise.allSettled([_5.stop(),Xz?Promise.resolve(Xz()).finally(()=>{Xz=null}):Promise.resolve()]),U)await U.drain().catch((K0)=>console.error("[shutdown] NATS drain error:",K0));console.log("[shutdown] Flushing telemetry..."),await oX().catch((K0)=>console.error("[shutdown] Telemetry flush error:",K0)),console.log("[shutdown] Closing database..."),await TZ$(Z).catch((K0)=>console.error("[shutdown] Database close error:",K0)),console.log("[shutdown] Cleanup complete.")},initDbos:async()=>{await jO.registerQueue(C3,{partitionQueue:!0,concurrency:TJ1,minPollingIntervalMs:RJ1}),await jO.registerQueue(S3,{partitionQueue:!0,concurrency:UX1,priorityEnabled:!0}),await jO.registerQueue(MN,{workerConcurrency:E0().decopilotMaxConcurrentHostedRuns,priorityEnabled:!0}),await jO.registerQueue(IN,{workerConcurrency:E0().sandboxMaxConcurrentHostedRuns,priorityEnabled:!0}),await jO.registerQueue(qO,{partitionQueue:!0,concurrency:cf$}),await jO.registerQueue(Hz,Mb$),await VN1(V),await Promise.allSettled(["automations-gate","automations-global","jira-push"].map((K0)=>jO.deleteQueue(K0))),await qJ1(Z.pool),dY$().catch((K0)=>{console.error("[studio-pack-backfill] failed:",K0)}),zp1().catch((K0)=>{console.error("[org-fs] public-sets boot sync kick failed:",K0)})}})}var eJ8,rJ8=5000,Xz=null,aJ8=async($)=>{let Z=$.req.param("connectionId");if(!Z)return $.json({error:"Missing connectionId"},400);let Q=$.req.path.split("/").filter(Boolean),Y=Q[Q.length-1],X=$.get("studioContext");if(!X)X=await cQ.create($.req.raw),$.set("studioContext",X);let J=$.req.param("org")?X.organization?.id:void 0,G=await X.storage.connections.findById(Z,J);if(!G?.connection_url)return $.json({error:"Connection not found"},404);if(Y==="register"&&G.oauth_config?.clientId){let y=await $.req.json().catch(()=>({}));return $.json({...typeof y==="object"&&y!==null?y:{},client_id:G.oauth_config.clientId,...G.oauth_config.clientSecret?{client_secret:G.oauth_config.clientSecret}:{},client_secret_expires_at:0})}let W=await Qp(G.connection_url),K,H=new URL(G.connection_url),U=(typeof G.metadata?.oauthResource==="string"&&G.metadata.oauthResource.length>0?G.metadata.oauthResource:void 0)??G.connection_url;if(W.ok)K=(await W.json()).authorization_servers?.[0];if(!K)K=H.origin;let N=await m40(K);if(!N.ok)return $.json({error:"Failed to get auth server metadata"},502);let B=await N.json(),O;if(Y==="authorize")O=B.authorization_endpoint;else if(Y==="token")O=B.token_endpoint;else if(Y==="register")O=B.registration_endpoint;if(!O)return $.json({error:`Unknown OAuth endpoint: ${Y}`},404);let L=N88(O);if(L)return L;let w=new URL(O),j=new URL($.req.url);if(w.search=j.search,Y==="authorize"){let y=w.searchParams.get("redirect_uri");if(y){let g=E0().baseUrl??j.origin;try{if(!YG8(new URL(y),g))return $.json({error:"invalid_request",error_description:"redirect_uri is not allowed"},400)}catch{return $.json({error:"invalid_request",error_description:"redirect_uri is malformed"},400)}w.searchParams.set("redirect_uri",y)}if(w.searchParams.has("resource"))w.searchParams.set("resource",U);if(I48(G.connection_url))w.searchParams.set("auto_personal","true"),w.searchParams.set("force_new","true");return $.redirect(w.toString(),302)}let E={Accept:$.req.header("Accept")||"application/json"},z=$.req.header("Content-Type");if(z)E["Content-Type"]=z;let T=$.req.header("Authorization");if(T)E.Authorization=T;let A,P=null,q=null;if($.req.method!=="GET"&&$.req.method!=="HEAD")if(Y==="token"&&z?.includes("application/x-www-form-urlencoded")){if(T?.toLowerCase().startsWith("basic "))try{let p=atob(T.slice(6).trim()),U0=p.indexOf(":");if(U0!==-1){let v0=decodeURIComponent(p.slice(0,U0)),G0=decodeURIComponent(p.slice(U0+1));P=v0||null,q=G0||null}}catch{}let y=await $.req.formData();if(y.has("resource"))y.set("resource",U);let g=y.get("client_id"),l=y.get("client_secret");if(typeof g==="string"&&g)P=g;if(typeof l==="string"&&l)q=l;let i=new URLSearchParams;for(let[p,U0]of y.entries())i.append(p,U0.toString());A=i.toString()}else if(Y==="register"&&z?.toLowerCase().includes("application/json")){let y=await X.db.selectFrom("organization").select(["id","slug","name"]).where("id","=",G.organization_id).executeTakeFirst(),g=await $.req.text(),l={};try{l=g?JSON.parse(g):{}}catch{A=g}let i=typeof l==="object"&&l!==null&&!Array.isArray(l);if(A===void 0&&!i)A=g;if(A===void 0){let p=l,U0=p.metadata&&typeof p.metadata==="object"?p.metadata:{};p.metadata={...U0,organization_id:G.organization_id,...y?.slug?{organization_slug:y.slug}:{},...y?.name?{organization_name:y.name}:{}},A=JSON.stringify(p),E["Content-Type"]="application/json"}}else A=$.req.raw.body??void 0;let x=await fetch(w.toString(),{method:$.req.method,headers:E,body:A,duplex:"half",redirect:"manual"}),_=new Headers,V=["connection","keep-alive","transfer-encoding","content-encoding","content-length"];for(let[y,g]of x.headers.entries())if(!V.includes(y.toLowerCase()))_.set(y,g);if(Y==="token"&&x.ok){let y=await x.text();try{let g=JSON.parse(y);if(typeof g.access_token==="string"&&g.access_token){let l=typeof g.expires_in==="number"?new Date(Date.now()+g.expires_in*1000):null,i=null;try{i=await Yp(G.connection_url)??O}catch{i=O}let p={connectionId:Z,accessToken:g.access_token,refreshToken:typeof g.refresh_token==="string"?g.refresh_token:null,scope:typeof g.scope==="string"?g.scope:null,expiresAt:l,clientId:P,clientSecret:q,tokenEndpoint:i};await new w9(X.db,X.vault).upsert(p)}}catch(g){console.error("[oauth-proxy] failed to persist downstream token:",g)}return new Response(y,{status:x.status,statusText:x.statusText,headers:_})}return new Response(x.body,{status:x.status,statusText:x.statusText,headers:_})},XG8=async($)=>{let Z=$.var.studioContext,Q=Z.auth.user?.id??Z.auth.apiKey?.userId;if(!Q)return $.json({error:"Unauthorized"},401);let Y=Z.organization?.id;if(!Y)return $.json({error:"organization id missing"},400);let X=$.req.query("types"),J=X?X.split(",").map((H)=>H.trim()).filter(Boolean):null,G=$.req.query("scope")==="all";if(G&&(!dU(Y)||!await iU(Z)))return $.json({error:"forbidden"},403);let W=G?eR0:Y;if(G)fD({action:"watch_all_orgs",actorUserId:Q,actorOrgId:Y,targetOrgId:"all"});let K=crypto.randomUUID();return DO($,async(H)=>{if(await H.writeSSE({event:"connected",data:JSON.stringify({listenerId:K,organizationId:Y,typePatterns:J,connectedAt:new Date().toISOString()})}),!_5.add({id:K,organizationId:W,typePatterns:J?.length?J:null,push:(N,B)=>{H.writeSSE({id:N.id,event:N.type,data:JSON.stringify(G?{...N,organizationId:B}:N)}).catch(()=>{_5.remove(W,K)})}})){await H.writeSSE({event:"error",data:JSON.stringify({error:"Too many connections",message:"SSE connection limit reached. Try again later."})});return}let U=setInterval(()=>{H.writeSSE({event:"keepalive",data:""}).catch(()=>{clearInterval(U),_5.remove(W,K)})},30000);await new Promise((N)=>{H.onAbort(()=>{clearInterval(U),_5.remove(W,K),N()})})})},qs6,Vs6,ks6=()=>Is6(x8),Ss6=()=>Ms6(x8);var GG8=D(()=>{a$();X$();Pp1();K48();N48();z48();k80();IQ1();M48();l$0();I9();oc();p8();J8();MS0();_48();CJ1();Z3();wU();sU1();SG();k6();G6();XN1();W68();F68();z68();FN1();u68();jN1();qN1();MN1();UH();KS0();IN1();Q58();VS0();xY8();uY8();lY8();iY8();ZX8();CN1();YX8();yM0();q80();HX8();uM0();GD1();UX8();XD1();LX8();qX8();VX8();kX8();CX8();vX8();xX8();uX8();QO1();fN1();dX8();JD1();ZD1();W50();WJ8();SJ();yT0();nQ1();$00();Q00();fJ1();KJ8();FJ8();TN1();wJ8();XX1();jJ8();Do();yr();xD();P9();jU1();TJ8();IJ8();Y30();BO1();_3();kN1();bD();ZX1();Y30();aq0();Vn0();kn0();kJ8();au();vJ8();Sp();sU1();Vd();dd();mq0();eJ8=C(LK(),1);qs6=new Ts6,Vs6=new Set([C3,S3,MN,IN,qO,Hz])});var FG8={};$6(FG8,{resolveClientDir:()=>gs6,resolveAssetPathWithTraversalCheck:()=>HG8,isPathWithinDirectory:()=>KG8,createAssetHandler:()=>hs6});import{resolve as p60,dirname as _s6,join as vs6,extname as bs6,basename as xs6,sep as WG8}from"path";function fs6($,Z){if($===Z||xs6($)==="index.html")return{"Cache-Control":"no-cache"};if($.includes(`${WG8}assets${WG8}`))return{"Cache-Control":"public, max-age=31536000, immutable"};return{}}function KG8($,Z){let Q=p60(Z),Y=p60($);return Y===Q||Y.startsWith(Q+"/")}function HG8({requestPath:$,clientDir:Z}){let Q=$.startsWith("/")?$.slice(1):$,Y=p60(Z,Q);if(!KG8(Y,Z))return null;return Y}function gs6($,Z="../client"){let Q=new URL($),Y=_s6(Q.pathname);return p60(Y,Z)}function hs6($={}){let{env:Z="production",clientDir:Q=ys6,isServerPath:Y=()=>!1}=$;if(Z==="development")return async function(J){return null};return async function(J){if(J.method!=="GET")return null;let G=new URL(J.url),W;try{W=decodeURIComponent(G.pathname)}catch{return null}if(Y(W))return null;let K=HG8({requestPath:W,clientDir:Q});if(!K)return null;let H=vs6(K,"index.html"),F=p60(Q,"index.html"),U=J.headers.get("accept"),B=U?.includes("text/html")||U?.includes("*/*")&&["",".html"].includes(bs6(K))?[H,F]:[];for(let O of[K,...B])try{let L=Bun.file(O);if(await L.exists())return new Response(L,{headers:fs6(O,F)})}catch{}if(W.includes("/assets/"))return new Response("Not Found",{status:404,headers:{"Cache-Control":"no-store"}});return null}}var ys6="./dist/client";var UG8=()=>{};var NG8={};$6(NG8,{tryUpgradePreviewWs:()=>ps6,tryHandlePreviewHttp:()=>is6,previewWebSocketHandler:()=>ns6,parsePreviewBaseDomain:()=>ds6,isPreviewWsData:()=>D_0,extractHandleFromHost:()=>AO1});function cs6($){if($.method!=="GET")return!1;return($.headers.get("accept")??"").includes("text/html")}function ms6(){return new Response(ls6,{status:503,headers:{"content-type":"text/html; charset=utf-8","cache-control":"no-store","retry-after":"1","access-control-allow-origin":"*"}})}function ds6($){if(!$||$.trim()==="")return null;let Z=$.includes("{handle}")?$.replace("{handle}","__handle__"):$,Q;try{Q=new URL(Z)}catch{return null}let Y=Q.hostname;if($.includes("{handle}")){let X=Y.indexOf(".");if(X<=0||X===Y.length-1)return null;return Y.slice(X+1)}return Y}function AO1($,Z){if(!$||!Z)return null;let Q=$.indexOf(":"),Y=(Q>=0?$.slice(0,Q):$).toLowerCase(),J=`.${Z.toLowerCase().replace(/^\.+|\.+$/g,"")}`;if(!Y.endsWith(J))return null;let G=Y.slice(0,Y.length-J.length);if(!G||G.includes("."))return null;return G}async function is6($,Z){let Q=AO1($.headers.get("host"),Z.baseDomain);if(!Q)return null;let Y=await Z.getRunner();if(!Y)return t60(503,"preview proxy not configured");let X=await Y.proxyPreviewRequest(Q,$);if(X.headers.get(um)&&cs6($))return ms6();return X.headers.delete(um),X}function t60($,Z){return new Response(JSON.stringify({error:Z}),{status:$,headers:{"content-type":"application/json","access-control-allow-origin":"*"}})}function D_0($){return typeof $==="object"&&$!==null&&$.kind==="preview"}async function ps6($,Z,Q){if(($.headers.get("upgrade")??"").toLowerCase()!=="websocket")return null;let Y=AO1($.headers.get("host"),Q.baseDomain);if(!Y)return null;let X=await Q.getRunner();if(!X)return t60(503,"preview proxy not configured");let J=await X.resolvePreviewUpstreamUrl(Y);if(!J)return t60(404,"sandbox not found");let G=new URL($.url);if(G.pathname.startsWith("/_sandbox"))return t60(404,"not found");let W=`${J.replace(/^http/,"ws")}${G.pathname}${G.search}`,K=$.headers.get("sec-websocket-protocol"),H=K?K.split(",").map((N)=>N.trim()).filter(Boolean):[],F={kind:"preview",upstreamUrl:W,upstreamProtocols:H,pending:[],upstream:null,closed:!1};if(!Z.upgrade($,{data:F}))return t60(426,"upgrade failed");return}function n60($,Z,Q,Y){if(Z.closed)return;Z.closed=!0;try{$.close(Q,Y)}catch{}try{Z.upstream?.close()}catch{}}var us6=256,ls6='<!DOCTYPE html><html><head><meta charset="utf-8"><title>Connecting\u2026</title><style>body{font-family:system-ui,sans-serif;display:flex;align-items:center;justify-content:center;min-height:100vh;margin:0;background:#fafafa;color:#555}div{text-align:center;max-width:420px;padding:24px}h3{margin:0 0 8px}p{margin:0;font-size:14px;color:#999;line-height:1.5}</style></head><body><div><h3>Connecting to sandbox\u2026</h3><p>Waiting for the sandbox to come online. This page refreshes automatically.</p></div><script>setTimeout(function(){window.location.reload()},1500)</script></body></html>',ns6;var BG8=D(()=>{q10();ns6={open($){let Z=$.data;if(!D_0(Z))return;let Q;try{Q=Z.upstreamProtocols.length>0?new WebSocket(Z.upstreamUrl,Z.upstreamProtocols):new WebSocket(Z.upstreamUrl)}catch(Y){console.warn(`[preview-ws] failed to dial upstream ${Z.upstreamUrl}: ${Y instanceof Error?Y.message:String(Y)}`),n60($,Z,1011,"upstream connect failed");return}Q.binaryType="arraybuffer",Z.upstream=Q,Q.addEventListener("open",()=>{while(Z.pending.length>0){let Y=Z.pending.shift();if(Y!==void 0)Q.send(Y)}}),Q.addEventListener("message",(Y)=>{if(Z.closed)return;$.send(Y.data)}),Q.addEventListener("close",(Y)=>{n60($,Z,Y.code||1000,Y.reason||"")}),Q.addEventListener("error",()=>{n60($,Z,1011,"upstream error")})},message($,Z){let Q=$.data;if(!D_0(Q))return;let Y=Q.upstream;if(Y&&Y.readyState===WebSocket.OPEN){Y.send(Z);return}if(Q.pending.length>=us6){n60($,Q,1011,"preview ws backlog overflow");return}Q.pending.push(Z)},close($){let Z=$.data;if(!D_0(Z))return;n60($,Z,1000,"")}}});var wG8={};$6(wG8,{printBanner:()=>os6,bannerLines:()=>LG8,BANNER_LINES:()=>DG8,BANNER_GRADIENT:()=>OG8});function ts6($){let Z=Number.parseInt($.slice(1),16);return[Z>>16&255,Z>>8&255,Z&255]}function LG8($){let Z=DG8.map((Q,Y)=>{let[X,J,G]=ts6(OG8[Y]);return`\x1B[38;2;${X};${J};${G}m${Q}\x1B[39m`});if($!==void 0)Z.push(`\x1B[2m v${$}\x1B[22m`);return Z}function os6($){console.log("");for(let Z of LG8($))console.log(Z);console.log("")}var DG8,OG8;var jG8=D(()=>{DG8=[" \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588 ","\u2591\u2591\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588 \u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588\u2588\u2588 "," \u2591\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2588 \u2591 \u2588\u2588\u2588 \u2591\u2591\u2591 \u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2591\u2591\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591 \u2588\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588 "," \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2591\u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2591 ","\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591 "],OG8=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"]});a$();var xO1="13";function fO1($){return{name:"decocms",systemDatabaseUrl:$.systemDatabaseUrl,systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:$.poolSize,runAdminServer:!1,executorID:$.executorID,applicationVersion:xO1,...$.listenQueues!==void 0?{listenQueues:$.listenQueues}:{}}}a$();import fG8 from"pg";var yO1=8314027461559302n,yG8=600000,gG8=500;async function gO1($,Z){let{databaseUrl:Q,lockTimeoutMs:Y=yG8}=$,X=$.log??((K)=>console.log(K)),J=new fG8.Client({connectionString:Q});await J.connect();let G=Date.now(),W=!1;try{while(!W){if(W=(await J.query("SELECT pg_try_advisory_lock($1) AS locked",[yO1.toString()])).rows[0]?.locked===!0,W)break;if(Date.now()-G>=Y)throw Error(`Timed out after ${Y}ms waiting for the DBOS migration lock. Another process is still migrating the dbos schema; this pod will restart and retry.`);await O$(gG8)}let K=Date.now()-G;if(K>1000)X(`[dbos] waited ${K}ms for the migration lock; another process migrated first`);return await Z()}finally{if(W)try{await J.query("SELECT pg_advisory_unlock($1)",[yO1.toString()])}catch{}await J.end().catch(()=>{})}}X$();q_0();k6();function f38(){let $=(process.env.BUN_OPTIONS??"").split(/\s+/).filter(Boolean);return[...process.argv.slice(1),...$]}function c_0($,Z){for(let Q=0;Q<$.length;Q++){let Y=$[Q];if(Y===void 0)continue;if(Y===Z)return $[Q+1];if(Y.startsWith(`${Z}=`))return Y.slice(Z.length+1)}return}function PL1(){let $=f38();if($.includes("--cpu-prof")){console.log(JSON.stringify({msg:"cpu-profiling-active",dir:c_0($,"--cpu-prof-dir")??process.cwd(),name:c_0($,"--cpu-prof-name"),markdown:$.includes("--cpu-prof-md"),intervalUs:Number(c_0($,"--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.'}))}i_0();var F50;function SL1(){if(process.env.HEAP_WATCH!=="1")return()=>{};let $=Number(process.env.HEAP_WATCH_INTERVAL_MS??60000),Z=async()=>{let Q=Nz();if(!Q)return;let Y={};try{let{heapStats:X}=await import("bun:jsc"),J=X(),G=Object.entries(J.objectTypeCounts).sort((W,K)=>K[1]-W[1]).slice(0,20);Y={objectCount:J.objectCount,heapSize:J.heapSize,top:Object.fromEntries(G)}}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,...Y}))};return Z().catch(()=>{}),F50=setInterval(()=>void Z().catch(()=>{}),$),F50.unref?.(),process.on("SIGUSR2",()=>{try{let Q=Bun.generateHeapSnapshot("v8"),Y=typeof Q==="string"?Q:JSON.stringify(Q),X=`/tmp/heap-${process.pid}-${Date.now()}.heapsnapshot`;Bun.write(X,Y),console.log(JSON.stringify({msg:"heap-snapshot-written",path:X}))}catch(Q){console.error("[heap-watch] snapshot failed:",Q)}}),()=>{if(F50)clearInterval(F50)}}import*as h38 from"bun:jsc";var{startSamplingProfiler:u38,samplingProfilerStackTraces:l38}=h38;function CL1(){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{u38()}catch(J){return console.error("[stall-watchdog] failed to start sampling profiler:",J),()=>{}}let Q,Y=performance.now()+Z,X=()=>{let J=performance.now(),G=J-Y;Y=J+Z;let W=[];try{W=l38()?.traces??[]}catch{}if(G>$&&W.length>0){let K=new Map;for(let F of W){let U=F.frames.find((O)=>O.sourceURL&&!/Unknown Executable/.test(O.category??""))??F.frames[0];if(!U)continue;let N=(U.sourceURL??"?").replace(/^.*\/node_modules\//,"node_modules/"),B=`${U.name??"?"} @ ${N}:${U.line??"?"}`;K.set(B,(K.get(B)??0)+1)}let H=[...K.entries()].sort((F,U)=>U[1]-F[1]).slice(0,8).map(([F,U])=>({frame:F,count:U}));console.warn(JSON.stringify({msg:"stall-stack",ts:new Date().toISOString(),lagMs:Math.round(G),samplesInWindow:W.length,top:H}))}Q=setTimeout(X,Z),Q.unref?.()};return Q=setTimeout(X,Z),Q.unref?.(),()=>{if(Q)clearTimeout(Q)}}function _L1(){PL1();let $=[SL1(),kL1(),CL1()];return()=>{for(let Z of $)Z()}}import{existsSync as Ya6}from"fs";var WG=E0();jL1();var{DBOS:o60,DBOSClient:rs6}=await import("@dbos-inc/dbos-sdk");function VO1($,Z){if(!Z)return $;let Q=new URL($);if(!Q.searchParams.has("sslmode"))Q.searchParams.set("sslmode","verify-full");return Q.toString()}var ss6=[C3,S3,MN,IN,qO,Hz],as6=WG.dispatchRole==="worker"?ss6:WG.dispatchRole==="api"?[]:void 0;o60.setConfig(fO1({systemDatabaseUrl:VO1(WG.databaseUrl,WG.databasePgSsl),poolSize:WG.dbosPoolSize,executorID:WG.podName,listenQueues:as6}));var{createApp:es6}=await Promise.resolve().then(() => (GG8(),JG8)),{isServerPath:$a6}=await Promise.resolve().then(() => (W50(),ZL1)),{createAssetHandler:Za6,resolveClientDir:TG8}=await Promise.resolve().then(() => (UG8(),FG8)),Qa6=WG.port,EG8=TG8(import.meta.url,"../client"),RG8=Ya6(EG8)?EG8:TG8(import.meta.url,"../dist/client"),Xa6=Za6({clientDir:RG8,isServerPath:$a6}),Ja6={"X-Frame-Options":"DENY","Content-Security-Policy":"frame-ancestors 'none'"};function Ga6($){let Z=new Headers($.headers);for(let[Q,Y]of Object.entries(Ja6))Z.set(Q,Y);return new Response($.body,{status:$.status,statusText:$.statusText,headers:Z})}var{parsePreviewBaseDomain:Wa6,tryHandlePreviewHttp:Ka6,tryUpgradePreviewWs:Ha6,previewWebSocketHandler:TO1,isPreviewWsData:RO1}=await Promise.resolve().then(() => (BG8(),NG8)),{getOrInitSharedRunner:qG8}=await Promise.resolve().then(() => (fW(),AR$)),MG8=Wa6(process.env.STUDIO_SANDBOX_PREVIEW_URL_PATTERN),zG8={baseDomain:MG8??"",getRunner:qG8};if(process.env.STUDIO_SANDBOX_TENANT_POOLS?.trim())qG8().catch(($)=>{console.warn("[lifecycle] eager sandbox provider init for tenant pools failed:",$ instanceof Error?$.message:String($))});var O_0=await es6({clientDir:RG8}),qO1=process.env.DBOS_CONDUCTOR_KEY?.trim(),PG8=process.env.DBOS_CONDUCTOR_URL?.trim();await gO1({databaseUrl:VO1(WG.databaseUrl,WG.databasePgSsl)},()=>o60.launch({...qO1?{conductorKey:qO1}:{},...qO1&&PG8?{conductorURL:PG8}:{}}));console.log(`[dbos] application version: ${o60.applicationVersion}`);var MO1=5,IO1=0;await E8(async()=>{IO1++;try{return await O_0.initDbos()}catch($){let Z=IO1>=MO1?"giving up":"retrying";throw console.warn(`[dbos] initDbos attempt ${IO1}/${MO1} failed, ${Z}`,$),$}},{maxAttempts:MO1,minTimeout:1000,maxTimeout:1e4,jitter:0.5});if(!WG.isCli){let{bannerLines:$}=await Promise.resolve().then(() => (jG8(),wG8));console.log("");for(let Z of $())console.log(Z)}var Fa6=Bun.serve({idleTimeout:0,port:Qa6,hostname:"0.0.0.0",fetch:async($,Z)=>{if(MG8){let Y=await Ha6($,Z,zG8);if(Y===void 0)return;if(Y)return Y;let X=await Ka6($,zG8);if(X)return X}let Q=await Xa6($);if(Q)return Ga6(Q);return O_0.fetch($,{server:Z})},websocket:{open($){if(RO1($.data))TO1.open($)},message($,Z){if(RO1($.data))TO1.message($,Z)},close($){if(RO1($.data))TO1.close($)}},development:!1}),Ua6=_L1();if(WG.localMode)Promise.resolve().then(() => (uf(),Sq0)).then(async({seedLocalMode:$,markSeedComplete:Z,healLocalJwks:Q})=>{try{let Y=await Q();if(Y>0)console.log(`[local-mode] cleared ${Y} undecryptable JWKS key(s); Better Auth will generate a fresh one`);let X=await $()}catch(Y){console.error("Failed to seed local mode:",Y)}finally{Z()}}).catch(async($)=>{console.error("Failed to load local-mode module:",$);try{let{markSeedComplete:Z}=await Promise.resolve().then(() => (uf(),Sq0));Z()}catch{}});var AG8=!1;async function Na6($){let Z;try{Z=await rs6.create({systemDatabaseUrl:VO1(WG.databaseUrl,WG.databasePgSsl),systemDatabaseSchemaName:"dbos"});let Q=await Z.listWorkflows({status:"PENDING",queueName:S3,executorId:$,loadInput:!1,loadOutput:!1});if(Q.length===0){console.log(`[shutdown] no in-flight thread-gate gates to hand off (executor ${$})`);return}let Y=Q.map((X)=>X.workflowID);await Z.resumeWorkflows(Y,{queueName:S3}),console.log(`[shutdown] re-enqueued ${Y.length} in-flight thread-gate gate(s) for re-adoption by a live executor (from ${$}):`,Y)}catch(Q){console.error("[shutdown] thread-gate handoff failed:",Q)}finally{await Z?.destroy().catch(()=>{})}}async function L_0($){if(AG8)return;AG8=!0,console.log(`
3740
3740
  [shutdown] Received ${$}, shutting down gracefully...`);let Z=Number(process.env.SHUTDOWN_GRACE_SECONDS??60)*1000,Q=Math.max(Z-5000,1e4),Y=setTimeout(()=>{console.error(`[shutdown] Timed out after ${Q}ms, forcing exit.`),process.exit(1)},Q);Y.unref?.();let X=0;try{Ua6(),O_0.markShuttingDown();let J=uO1(WG.dispatchRole,Q,process.env.SHUTDOWN_DRAIN_MS);await O$(J),await Fa6.stop(!0);let G=o60.executorID;await o60.shutdown(),await Na6(G),await O_0.shutdown()}catch(J){console.error("[shutdown] Error during shutdown:",J),X=1}clearTimeout(Y),process.exit(X)}process.on("SIGTERM",()=>L_0("SIGTERM"));process.on("SIGINT",()=>L_0("SIGINT"));process.on("SIGHUP",()=>L_0("SIGHUP"));process.on("unhandledRejection",($)=>{console.error("[process] Unhandled rejection:",$)});process.on("uncaughtException",($)=>{console.error("[process] Uncaught exception:",$),L_0("uncaughtException")});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "decocms",
3
- "version": "4.430.1",
3
+ "version": "4.430.2",
4
4
  "description": "Deco CMS — Self-hostable MCP Gateway for managing AI connections and tools",
5
5
  "author": "Deco team",
6
6
  "repository": {
@@ -1 +0,0 @@
1
- import{r}from"./index-CyQyr88p.js";const i=({size:e=24,color:t="currentColor",...o})=>r.createElement("svg",{viewBox:"0 0 24 24",width:e,height:e,stroke:t,strokeWidth:"2",fill:"none",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",...o},r.createElement("path",{d:"M5 12h14m0 0-7-7m7 7-7 7"}));i.displayName="ArrowRight";export{i};
@@ -1 +0,0 @@
1
- import{b as Re,X as Xe,a as Ze,R as dn,at as un,as as pn,j as e,B as G,t as X,c as mn,r as ue,U as gn,V as hn,z as xn,K as en,l as fn,h as we,q as A,o as jn,d as vn}from"./index-CyQyr88p.js";import{C as Cn}from"./collection-search-B5LfgGj5.js";import{g as yn,a as Dn,e as _n}from"./extract-connection-data-CD-3Cduz.js";import{u as nn,g as Nn,C as Oe}from"./connection-card-BMfy_L46.js";import{D as tn,b as on,c as an,d as sn,h as bn,e as wn}from"./dialog-D1MsBTH7.js";import{D as Sn,a as kn,d as In,b as Tn,e as An,f as Pn,g as Mn}from"./drawer-DQ1B0U-G.js";import{u as Fn}from"./use-mobile-BCh8YRo6.js";import{F as B,b as O,c as z,d as E,f as $,a as Qe}from"./form-CelWRzw5.js";import{I as Y}from"./input-CeDoO_Rr.js";import{S as Ln,b as Vn,a as Bn,d as On,c as ge}from"./select-BqcGTWMZ.js";import{T as zn}from"./textarea-Crpj1sFF.js";import{b as cn}from"./use-connection-DpAJRH1j.js";import{p as ze,au as Se,aY as Ee}from"./agent-icon-DyICUp-0.js";import{c as En}from"./UserSquare-BMQF7dC1.js";import{s as $n}from"./XClose-Bg9Zp2j0.js";import{c as Hn,i as Ne,a as Ye,E as Un,p as Kn,b as Rn,d as Xn}from"./connection-form-helpers-DyGM93YP.js";import{a as $e}from"./authenticate-and-persist-oauth-DSfbaJXn.js";import{g as qn}from"./connection-slug-CITJ0kGN.js";import{C as Wn}from"./collection-tabs-CYKC6woL.js";import{u as Ge}from"./use-infinite-scroll-DKthVIzG.js";import{g as ke,a as Qn}from"./metadata-D72DunRR.js";import{B as be}from"./badge-Bjr6roKX.js";import{b as He,T as Ue,a as Ke}from"./tooltip-MkmbJW_K.js";import{u as Yn}from"./useSuspenseInfiniteQuery-Bv9C99VC.js";import{u as Gn}from"./use-mcp-client-BuS_j4o-.js";import{i as Je}from"./Check-D53o53z1.js";import{s as Jn}from"./Plus-B0T7sCOu.js";function Zn({open:l,onOpenChange:n,onCreated:J}){const c=Re(),{org:f}=Xe(),{data:h}=Ze.useSession(),{stdioEnabled:H}=dn(),U=Fn(),P=cn(),b=nn("").items,a=un({resolver:pn(Hn),defaultValues:{title:"",description:null,icon:null,ui_type:"HTTP",connection_url:"",connection_token:null,npx_package:"",stdio_command:"",stdio_args:"",stdio_cwd:"",env_vars:[]}}),p=a.watch("ui_type"),w=a.watch("connection_url"),K=a.watch("npx_package"),r=Ne({uiType:p,connectionUrl:w??"",npxPackage:K??""})??Ye({uiType:p,connectionUrl:w??"",registryItems:b}),j=t=>{const d=t.trim();if(!d)return;const g=!!a.formState.dirtyFields.title,N=!!a.formState.dirtyFields.description,L=!!a.formState.dirtyFields.env_vars,k=s=>{if(s&&(!g&&!a.getValues("title").trim()&&s.title&&a.setValue("title",s.title,{shouldDirty:!1}),!N&&!(a.getValues("description")??"").trim()&&s.description&&a.setValue("description",s.description,{shouldDirty:!1}),!L&&s.envVarKeys?.length)){const D=a.getValues("env_vars")??[],ee=new Set(D.map(m=>m.key)),_=s.envVarKeys.filter(m=>!ee.has(m));_.length>0&&a.setValue("env_vars",[...D,..._.map(m=>({key:m,value:""}))],{shouldDirty:!0})}},i=Kn(d);if(i&&H){a.setValue("ui_type","NPX",{shouldDirty:!0}),a.setValue("npx_package",i.packageName,{shouldDirty:!0}),a.setValue("connection_url","",{shouldDirty:!0}),a.setValue("connection_token",null,{shouldDirty:!0}),k(Ne({uiType:"NPX",npxPackage:i.packageName}));return}if(d.startsWith("http://")||d.startsWith("https://")){const s=p==="HTTP"||p==="SSE"||p==="Websocket"?p:"HTTP";a.setValue("ui_type",s,{shouldDirty:!0}),a.setValue("connection_url",d,{shouldDirty:!0}),k(Ne({uiType:s,connectionUrl:d})??Ye({uiType:s,connectionUrl:d,registryItems:b}));return}p==="NPX"&&k(Ne({uiType:"NPX",npxPackage:d}))},S=t=>{t||a.reset(),n(t)},Z=async t=>{let d,g=null,N=null,L=null;t.ui_type==="NPX"?(d="STDIO",g="",L=Rn(t.npx_package||"",t.env_vars||[])):t.ui_type==="STDIO"?(d="STDIO",g="",L=Xn(t.stdio_command||"",t.stdio_args||"",t.stdio_cwd,t.env_vars||[])):(d=t.ui_type,g=t.connection_url||"",N=t.connection_token||null);const k=yn("conn");try{await P.create.mutateAsync({id:k,title:t.title,description:t.description||null,connection_type:d,connection_url:g,connection_token:N,created_at:new Date().toISOString(),updated_at:new Date().toISOString(),created_by:h?.user?.id||"system",organization_id:f.id,icon:t.icon??null,app_name:null,app_id:null,connection_headers:L,oauth_config:null,configuration_state:null,metadata:null,tools:null,bindings:null}),a.reset(),n(!1),J?.(k)}catch{X.error(c("connections.createConnectionDialog.failedToCreateConnection"))}},x=c("connections.createConnectionDialog.title"),M=c("connections.createConnectionDialog.description"),y=a.formState.isSubmitting?c("connections.createConnectionDialog.saving"):c("connections.createConnectionDialog.createButton"),v=e.jsxs("div",{className:"grid gap-4",children:[e.jsx(B,{control:a.control,name:"ui_type",render:({field:t})=>e.jsxs(O,{children:[e.jsx(z,{children:c("connections.createConnectionDialog.typeLabel")}),e.jsxs(Ln,{value:t.value,onValueChange:t.onChange,children:[e.jsx(E,{children:e.jsx(Vn,{children:e.jsx(Bn,{})})}),e.jsxs(On,{children:[e.jsx(ge,{value:"HTTP",children:e.jsxs("span",{className:"flex items-center gap-2",children:[e.jsx(ze,{className:"w-4 h-4"}),c("connections.createConnectionDialog.httpType")]})}),e.jsx(ge,{value:"SSE",children:e.jsxs("span",{className:"flex items-center gap-2",children:[e.jsx(ze,{className:"w-4 h-4"}),c("connections.createConnectionDialog.sseType")]})}),e.jsx(ge,{value:"Websocket",children:e.jsxs("span",{className:"flex items-center gap-2",children:[e.jsx(ze,{className:"w-4 h-4"}),c("connections.createConnectionDialog.websocketType")]})}),H&&e.jsxs(e.Fragment,{children:[e.jsx(ge,{value:"NPX",children:e.jsxs("span",{className:"flex items-center gap-2",children:[e.jsx(Se,{className:"w-4 h-4"}),c("connections.createConnectionDialog.npxPackageType")]})}),e.jsx(ge,{value:"STDIO",children:e.jsxs("span",{className:"flex items-center gap-2",children:[e.jsx(En,{className:"w-4 h-4"}),c("connections.createConnectionDialog.customCommandType")]})})]})]})]}),e.jsx($,{})]})}),p==="NPX"&&e.jsx(B,{control:a.control,name:"npx_package",render:({field:t})=>e.jsxs(O,{children:[e.jsx(z,{children:c("connections.createConnectionDialog.npmPackageLabel")}),e.jsx(E,{children:e.jsx(Y,{placeholder:c("connections.createConnectionDialog.npmPackagePlaceholder"),...t,value:t.value??"",onPaste:d=>{const g=d.clipboardData.getData("text");g&&(d.preventDefault(),a.setValue("npx_package",g.trim(),{shouldDirty:!0}),j(g))},onBlur:d=>{j(d.target.value),t.onBlur()}})}),e.jsx($,{})]})}),p==="STDIO"&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"grid grid-cols-2 gap-4 items-start",children:[e.jsx(B,{control:a.control,name:"stdio_command",render:({field:t})=>e.jsxs(O,{children:[e.jsx(z,{children:c("connections.createConnectionDialog.commandLabel")}),e.jsx(E,{children:e.jsx(Y,{placeholder:c("connections.createConnectionDialog.commandPlaceholder"),...t,value:t.value??""})}),e.jsx($,{})]})}),e.jsx(B,{control:a.control,name:"stdio_args",render:({field:t})=>e.jsxs(O,{children:[e.jsx(z,{children:c("connections.createConnectionDialog.argumentsLabel")}),e.jsx(E,{children:e.jsx(Y,{placeholder:c("connections.createConnectionDialog.argumentsPlaceholder"),...t,value:t.value??""})}),e.jsx($,{})]})})]}),e.jsx(B,{control:a.control,name:"stdio_cwd",render:({field:t})=>e.jsxs(O,{children:[e.jsx(z,{children:c("connections.createConnectionDialog.workingDirectoryLabel")}),e.jsx(E,{children:e.jsx(Y,{placeholder:c("connections.createConnectionDialog.workingDirectoryPlaceholder"),...t,value:t.value??""})}),e.jsx("p",{className:"text-xs text-muted-foreground",children:c("connections.createConnectionDialog.workingDirectoryDescription")}),e.jsx($,{})]})})]}),(p==="NPX"||p==="STDIO")&&e.jsx(B,{control:a.control,name:"env_vars",render:({field:t})=>e.jsxs(O,{children:[e.jsx(z,{children:c("connections.createConnectionDialog.environmentVariablesLabel")}),e.jsx(E,{children:e.jsx(Un,{value:t.value??[],onChange:t.onChange})}),e.jsx($,{})]})}),p!=="NPX"&&p!=="STDIO"&&e.jsxs(e.Fragment,{children:[e.jsx(B,{control:a.control,name:"connection_url",render:({field:t})=>e.jsxs(O,{children:[e.jsx(z,{children:c("connections.createConnectionDialog.urlLabel")}),e.jsx(E,{children:e.jsx(Y,{placeholder:c("connections.createConnectionDialog.urlPlaceholder"),...t,value:t.value??"",onPaste:d=>{const g=d.clipboardData.getData("text");g&&(d.preventDefault(),a.setValue("connection_url",g.trim(),{shouldDirty:!0}),j(g))},onBlur:d=>{j(d.target.value),t.onBlur()}})}),e.jsx($,{})]})}),e.jsx(B,{control:a.control,name:"connection_token",render:({field:t})=>e.jsxs(O,{children:[e.jsx(z,{children:r?.token?.label??c("connections.createConnectionDialog.tokenLabelDefault")}),e.jsx(E,{children:e.jsx(Y,{type:"password",placeholder:r?.token?.placeholder??c("connections.createConnectionDialog.tokenPlaceholderDefault"),className:"ph-no-capture",...t,value:t.value??""})}),r?.token?.helperText&&e.jsxs("p",{className:"text-xs text-muted-foreground",children:[r.token.helperText,r.id==="github"&&e.jsxs(e.Fragment,{children:[" ","·"," ",e.jsx("a",{className:"text-foreground underline underline-offset-4 hover:text-foreground/80",href:"https://github.com/settings/personal-access-tokens",target:"_blank",rel:"noreferrer",children:c("connections.createConnectionDialog.openGitHubPatSettings")})]})]}),e.jsx($,{})]})})]}),e.jsx(B,{control:a.control,name:"title",render:({field:t})=>e.jsxs(O,{children:[e.jsx(z,{children:c("connections.createConnectionDialog.nameLabel")}),e.jsx(E,{children:e.jsx(Y,{placeholder:c("connections.createConnectionDialog.namePlaceholder"),...t})}),e.jsx($,{})]})}),e.jsx(B,{control:a.control,name:"description",render:({field:t})=>e.jsxs(O,{children:[e.jsx(z,{children:c("connections.createConnectionDialog.descriptionLabel")}),e.jsx(E,{children:e.jsx(zn,{placeholder:c("connections.createConnectionDialog.descriptionPlaceholder"),rows:3,...t,value:t.value??""})}),e.jsx($,{})]})})]});return U?e.jsx(Sn,{open:l,onOpenChange:S,children:e.jsxs(kn,{className:"max-h-[90vh]",children:[e.jsx(In,{className:"pb-2",children:e.jsxs("div",{className:"flex items-start justify-between gap-4",children:[e.jsxs("div",{className:"flex-1 text-left",children:[e.jsx(Tn,{children:x}),e.jsx(An,{className:"mt-1",children:M})]}),e.jsx(Pn,{asChild:!0,children:e.jsx(G,{variant:"ghost",size:"icon",className:"shrink-0 -mt-1","aria-label":c("connections.createConnectionDialog.closeButton"),children:e.jsx($n,{size:16})})})]})}),e.jsx(Qe,{...a,children:e.jsxs("form",{onSubmit:a.handleSubmit(Z),children:[e.jsx("div",{className:"overflow-y-auto px-4 pb-4",children:v}),e.jsx(Mn,{children:e.jsx(G,{type:"submit",disabled:a.formState.isSubmitting,className:"w-full",children:y})})]})})]})}):e.jsx(tn,{open:l,onOpenChange:S,children:e.jsxs(on,{className:"sm:max-w-[525px]",children:[e.jsxs(an,{children:[e.jsx(sn,{children:x}),e.jsx(bn,{children:M})]}),e.jsx(Qe,{...a,children:e.jsxs("form",{onSubmit:a.handleSubmit(Z),children:[e.jsx("div",{className:"py-4",children:v}),e.jsxs(wn,{children:[e.jsx(G,{type:"button",variant:"outline",onClick:()=>S(!1),children:c("connections.createConnectionDialog.cancelButton")}),e.jsx(G,{type:"submit",disabled:a.formState.isSubmitting,className:"min-w-40",children:y})]})]})})]})})}function et(l){const n=mn.c(71),{mode:J,agentId:c,addedConnectionIds:f,onAdd:h,onCloneAndAdd:H,onConnectAndAdd:U,connectingItemId:P,search:C,onCreateConnection:b,onBrowseNavigate:a,defaultTab:p}=l,w=J===void 0?"add":J,K=p===void 0?"connected":p,r=Re(),{org:j}=Xe(),S=ue.useDeferredValue(C),Z=C!==S;let x;n[0]!==S?(x=S.trim().toLowerCase(),n[0]=S,n[1]=x):x=n[1];const M=x;let y;n[2]!==K?(y=o=>o??K,n[2]=K,n[3]=y):y=n[3];const[v,t]=gn(hn.connectionsTab(j.slug)+(K==="all"?":home-modal":":agent-modal"),y);let d;n[4]!==v||n[5]!==t?(d=o=>{o!==v&&A("connections_dialog_tab_changed",{to_tab:o}),t(o)},n[4]=v,n[5]=t,n[6]=d):d=n[6];const g=d;let N;n[7]!==j.id||n[8]!==j.slug?(N={connectionId:xn,orgId:j.id,orgSlug:j.slug},n[7]=j.id,n[8]=j.slug,n[9]=N):N=n[9];const L=Gn(N),k=S?.trim().split(/\s+/).filter(Boolean)??[],i=k.length>0?{operator:"or",conditions:k.flatMap(rt)}:void 0,s={...i&&{where:i},orderBy:[{field:["updated_at"],direction:"asc"}],limit:100,offset:0},D=JSON.stringify(s),{data:ee,fetchNextPage:_,hasNextPage:m,isFetchingNextPage:I}=Yn({queryKey:en.collectionListInfinite(L,j.id,"","CONNECTIONS",D),queryFn:async o=>{const{pageParam:u}=o,R=u===void 0?0:u;return(await L.callTool({name:"COLLECTION_CONNECTIONS_LIST",arguments:{...i&&{where:i},orderBy:[{field:["updated_at"],direction:"asc"}],limit:100,offset:R}})).structuredContent},initialPageParam:0,getNextPageParam:st,staleTime:3e4}),he=ee?.pages.flatMap(it)??[],xe=Nn(he),rn=new Set(he.filter(at).map(ot)),q=nn(S),Ie=Ge(q.loadMore,q.hasMore,q.isLoadingMore),Te=Ge(_,m??!1,I),F=v==="all"||!!M,qe=F?q.items.filter(o=>{const u=Dn(o);if(u&&rn.has(u))return!1;if(!M)return!0;const R=ke(o._meta),W=[o.title,o.description,o.name,o.server?.title,o.server?.description,o.server?.name,R?.friendly_name,R?.friendlyName].filter(Boolean).join(" ").toLowerCase();return k.some(V=>W.includes(V.toLowerCase()))}):[],pe=qe.filter(tt),me=qe.filter(nt);let fe;n[10]!==f?(fe=o=>o.some(u=>f.has(u.id)),n[10]=f,n[11]=fe):fe=n[11];const Ae=fe;let je;n[12]!==f||n[13]!==c||n[14]!==P||n[15]!==Ae||n[16]!==w||n[17]!==h||n[18]!==a||n[19]!==H||n[20]!==r?(je=(o,u,R,W,V)=>{const _e=Ae(V),de=V.find(Q=>!f.has(Q.id)),T=V[0];if(w==="browse"){const Q=qn(T);return e.jsx(Oe,{connection:{title:u,icon:R,description:V.length>1?`${V.length} instances`:W??void 0},fallbackIcon:e.jsx(Se,{}),headerActionsAlwaysVisible:!0,headerActions:e.jsxs(be,{variant:"secondary",className:"text-xs gap-1 font-normal",children:[e.jsx(Je,{size:11})," ",r("virtualMcp.connectionDialogContent.connected")]}),onClick:()=>{A("connection_browse_clicked",{app_name:T.app_name??null,connection_id:T.id,instances_count:V.length}),a?.(Q)}},o)}return e.jsx(Oe,{connection:{title:u,icon:R,description:W},fallbackIcon:e.jsx(Se,{}),headerActionsAlwaysVisible:!0,headerActions:e.jsxs("div",{className:"flex items-center gap-1.5",children:[_e&&e.jsxs(be,{variant:"secondary",className:"text-xs gap-1 font-normal",children:[e.jsx(Je,{size:11})," ",r("virtualMcp.connectionDialogContent.added")]}),e.jsx(G,{variant:"outline",size:"sm",className:"h-7 px-3 text-xs font-medium",disabled:P!==null,onClick:Q=>{Q.stopPropagation(),de?(A("connection_add_clicked",{action:"use_existing",app_name:T.app_name??null,connection_id:de.id}),c&&A("agent_connection_attached",{agent_id:c,connection_id:de.id,app_name:T.app_name??null,mode:"existing"}),h(de.id)):(A("connection_add_clicked",{action:"clone",app_name:T.app_name??null,base_connection_id:T.id}),H(T))},children:r("virtualMcp.connectionDialogContent.add")})]})},o)},n[12]=f,n[13]=c,n[14]=P,n[15]=Ae,n[16]=w,n[17]=h,n[18]=a,n[19]=H,n[20]=r,n[21]=je):je=n[21];const ve=je;let Ce;n[22]!==P||n[23]!==w||n[24]!==U||n[25]!==r?(Ce=o=>{const u=ke(o._meta),R=u?.friendlyName||u?.friendly_name||o.server?.title||o.title||o.server?.name||o.name||o.id||"",W=o.server?.description||o.description||null,V=o.server?.icons?.[0]?.src||Qn(o.server?.repository)||null,_e=u?.official===!0,de=u?.verified===!0,T=u?.owner==="deco";return e.jsx(Oe,{connection:{title:R,description:W,icon:V},fallbackIcon:e.jsx(Se,{}),headerActionsAlwaysVisible:!0,headerActions:e.jsxs("div",{className:"flex items-center gap-1.5",children:[T&&e.jsxs(He,{children:[e.jsx(Ue,{asChild:!0,children:e.jsx("span",{className:"inline-flex items-center justify-center size-5 rounded-md bg-muted shrink-0",children:e.jsx("img",{src:"/logos/deco logo.svg",alt:r("virtualMcp.connectionDialogContent.madeByDeco"),className:"size-3"})})}),e.jsx(Ke,{children:r("virtualMcp.connectionDialogContent.builtByDeco")})]}),!T&&_e&&e.jsxs(He,{children:[e.jsx(Ue,{asChild:!0,children:e.jsx(be,{variant:"outline",size:"icon",children:e.jsx(Ee,{})})}),e.jsx(Ke,{children:r("virtualMcp.connectionDialogContent.builtByOfficial")})]}),!T&&!_e&&de&&e.jsxs(He,{children:[e.jsx(Ue,{asChild:!0,children:e.jsx(be,{variant:"outline",size:"icon",children:e.jsx(Ee,{})})}),e.jsx(Ke,{children:r("virtualMcp.connectionDialogContent.verifiedByDeco")})]}),e.jsx(G,{variant:"outline",size:"sm",className:"h-7 px-3 text-xs font-medium",disabled:P!==null,onClick:Q=>{Q.stopPropagation(),A("connection_add_clicked",{action:"connect_new",registry_item_id:o.id,app_name:u?.friendlyName||o.server?.name||o.name||null}),U(o)},children:P===o.id?e.jsx(we,{className:"size-3.5"}):r(w==="browse"?"virtualMcp.connectionDialogContent.connect":"virtualMcp.connectionDialogContent.add")})]})},`catalog-${o.id}`)},n[22]=P,n[23]=w,n[24]=U,n[25]=r,n[26]=Ce):Ce=n[26];const We=Ce;let ne;n[27]!==v||n[28]!==g||n[29]!==b||n[30]!==M||n[31]!==r?(ne=!M&&e.jsxs("div",{className:"flex items-center justify-between px-5 py-3 border-b border-border shrink-0",children:[e.jsx(Wn,{tabs:[{id:"all",label:r("virtualMcp.connectionDialogContent.tabAll")},{id:"connected",label:r("virtualMcp.connectionDialogContent.tabConnected")}],activeTab:v,onTabChange:o=>g(o)}),e.jsxs(G,{variant:"outline",size:"sm",className:"h-7 px-2 text-sm",onClick:()=>{A("connections_dialog_custom_clicked"),b()},children:[e.jsx(Jn,{size:12}),r("virtualMcp.connectionDialogContent.customConnection")]})]}),n[27]=v,n[28]=g,n[29]=b,n[30]=M,n[31]=r,n[32]=ne):ne=n[32];const Pe=Z&&"opacity-50 pointer-events-none";let te;n[33]!==Pe?(te=fn("flex-1 overflow-auto p-5 transition-opacity duration-150",Pe),n[33]=Pe,n[34]=te):te=n[34];const ln="grid grid-cols-[repeat(auto-fill,minmax(260px,1fr))] gap-4";let ye;n[35]!==ve?(ye=o=>{if(o.type==="group")return ve(o.key,o.title,o.icon,null,o.connections);const u=o.connection;return ve(u.id,u.title,u.icon,u.description??null,[u])},n[35]=ve,n[36]=ye):ye=n[36];const Me=xe.map(ye);let oe;n[37]!==Te?(oe=e.jsx("div",{ref:Te,className:"col-span-full h-1"}),n[37]=Te,n[38]=oe):oe=n[38];let ae;n[39]!==I?(ae=I&&e.jsx("div",{className:"col-span-full flex justify-center py-6",children:e.jsx(we,{className:"size-6 text-muted-foreground"})}),n[39]=I,n[40]=ae):ae=n[40];const Fe=F&&pe.length>0&&e.jsxs("div",{className:"col-span-full flex items-center gap-2 mt-2",children:[e.jsx(Ee,{size:13,className:"text-muted-foreground shrink-0"}),e.jsx("span",{className:"text-sm font-medium text-muted-foreground whitespace-nowrap",children:r("virtualMcp.connectionDialogContent.sectionVerified")}),e.jsx("div",{className:"flex-1 h-px bg-border"})]}),Le=F&&pe.map(We),Ve=F&&me.length>0&&e.jsxs("div",{className:"col-span-full flex items-center gap-2 mt-2",children:[e.jsx("span",{className:"text-sm font-medium text-muted-foreground whitespace-nowrap",children:r("virtualMcp.connectionDialogContent.sectionAllConnections")}),e.jsx("div",{className:"flex-1 h-px bg-border"})]}),Be=F&&me.map(We);let ie;n[41]!==Ie||n[42]!==F?(ie=F&&e.jsx("div",{ref:Ie,className:"col-span-full h-1"}),n[41]=Ie,n[42]=F,n[43]=ie):ie=n[43];let se;n[44]!==q.isLoadingMore||n[45]!==F?(se=F&&q.isLoadingMore&&e.jsx("div",{className:"col-span-full flex justify-center py-6",children:e.jsx(we,{className:"size-6 text-muted-foreground"})}),n[44]=q.isLoadingMore,n[45]=F,n[46]=se):se=n[46];let ce;n[47]!==Me||n[48]!==oe||n[49]!==ae||n[50]!==Fe||n[51]!==Le||n[52]!==Ve||n[53]!==Be||n[54]!==ie||n[55]!==se?(ce=e.jsxs("div",{className:ln,children:[Me,oe,ae,Fe,Le,Ve,Be,ie,se]}),n[47]=Me,n[48]=oe,n[49]=ae,n[50]=Fe,n[51]=Le,n[52]=Ve,n[53]=Be,n[54]=ie,n[55]=se,n[56]=ce):ce=n[56];let re;n[57]!==v||n[58]!==xe.length||n[59]!==me||n[60]!==C||n[61]!==r||n[62]!==pe?(re=xe.length===0&&pe.length===0&&me.length===0&&e.jsx("div",{className:"flex items-center justify-center h-48 text-sm text-muted-foreground",children:C?r("virtualMcp.connectionDialogContent.emptyStateSearchNoMatch",{search:C}):r(v==="connected"?"virtualMcp.connectionDialogContent.emptyStateNoConnectionsYet":"virtualMcp.connectionDialogContent.emptyStateNoConnectionsAvailable")}),n[57]=v,n[58]=xe.length,n[59]=me,n[60]=C,n[61]=r,n[62]=pe,n[63]=re):re=n[63];let le;n[64]!==te||n[65]!==ce||n[66]!==re?(le=e.jsxs("div",{className:te,children:[ce,re]}),n[64]=te,n[65]=ce,n[66]=re,n[67]=le):le=n[67];let De;return n[68]!==ne||n[69]!==le?(De=e.jsxs(e.Fragment,{children:[ne,le]}),n[68]=ne,n[69]=le,n[70]=De):De=n[70],De}function nt(l){return!l.verified&&!ke(l._meta)?.verified&&!l.meta?.verified}function tt(l){return l.verified||ke(l._meta)?.verified||l.meta?.verified}function ot(l){return l.app_name}function at(l){return l.app_name}function it(l){return l?.items??[]}function st(l,n){if(l?.hasMore)return n.reduce(ct,0)}function ct(l,n){return l+(n?.items?.length??0)}function rt(l){return[{field:["title"],operator:"contains",value:l},{field:["description"],operator:"contains",value:l}]}function Vt({open:l,onOpenChange:n,defaultTab:J,initialSearch:c="",...f}){const h=Re(),H=f.mode??"add",U="agentId"in f?f.agentId:void 0,P="addedConnectionIds"in f?f.addedConnectionIds??new Set:new Set,C="onAdd"in f&&f.onAdd?f.onAdd:i=>{},b=(i,s,D)=>{U&&A("agent_connection_attached",{agent_id:U,connection_id:i,app_name:s,mode:D})},[a,p]=ue.useState(null),[w,K]=ue.useState(c),[r,j]=ue.useState(!1),[S,Z]=ue.useState(l);l!==S&&(Z(l),l&&K(c));const{org:x}=Xe(),{data:M}=Ze.useSession(),y=cn(),v=jn(),t=vn(),d=i=>{n(!1),t({to:"/$org/settings/connections/$appSlug",params:{org:x.slug,appSlug:i}})},g=()=>{v.invalidateQueries({predicate:i=>{const s=i.queryKey;return s[1]===x.id&&s[3]==="collection"&&s[4]==="CONNECTIONS"}})},N=async(i,s)=>{A("connection_oauth_succeeded",{connection_id:i,flow:s});const D=new URL(`/api/${x.slug}/mcp/${i}`,window.location.origin);await v.invalidateQueries({queryKey:en.isMCPAuthenticated(D.href,null)}),g()},L=async i=>{p(i.app_name??i.id);try{const D=`${i.title.replace(/\s*\(\d+\)\s*$/,"")} (${Date.now().toString(36).slice(-4)})`,_=(await y.create.mutateAsync({title:D,description:i.description??null,connection_type:i.connection_type,connection_url:i.connection_url??null,connection_token:null,icon:i.icon??null,app_name:i.app_name??null,app_id:i.app_id??null,connection_headers:i.connection_headers??null})).id,m=await $e({connectionId:_,orgId:x.id,orgSlug:x.slug,persistFallback:I=>y.update.mutateAsync({id:_,data:{connection_token:I}}).then(()=>{})});if(m.ran&&!m.ok){A("connection_oauth_failed",{connection_id:_,flow:"clone",error:m.error??"no_token"}),X.error(h("virtualMcp.addConnectionDialog.authenticationFailedError",{error:m.error??"no token received"})),await y.delete.mutateAsync(_);return}m.ran&&await N(_,"clone"),b(_,i.app_name??null,"clone"),C(_)}catch(s){console.error("Failed to add connection:",s),X.error(h("virtualMcp.addConnectionDialog.failedToAddConnection"))}finally{p(null)}},k=async i=>{if(!(!x||!M?.user?.id)){p(i.id);try{const s=_n(i,x.id,M.user.id,{remoteIndex:0}),D=s.connection_type==="STDIO",ee=!!s.connection_url,_=D&&s.connection_headers&&typeof s.connection_headers=="object"&&"command"in s.connection_headers;if(!ee&&!_){X.error(h("virtualMcp.addConnectionDialog.mcpServerConnectionError")),p(null);return}const{id:m}=await y.create.mutateAsync(s),I=await $e({connectionId:m,orgId:x.id,orgSlug:x.slug,persistFallback:he=>y.update.mutateAsync({id:m,data:{connection_token:he}}).then(()=>{})});if(I.ran&&!I.ok){A("connection_oauth_failed",{connection_id:m,flow:"connect_new",error:I.error??"no_token"}),X.warning(h("virtualMcp.addConnectionDialog.signInFailedTitle"),{description:h("virtualMcp.addConnectionDialog.signInFailedDescription",{error:I.error??"no token received"})}),b(m,s.app_name??null,"new"),C(m);return}I.ran?(await N(m,"connect_new"),X.success(h("virtualMcp.addConnectionDialog.connectedAuthenticated"))):X.success(h("virtualMcp.addConnectionDialog.connected")),b(m,s.app_name??null,"new"),C(m)}catch(s){console.error("Failed to connect:",s),X.error(h("virtualMcp.addConnectionDialog.failedToConnect"))}finally{p(null)}}};return e.jsxs(tn,{open:l,onOpenChange:n,children:[e.jsxs(on,{className:"sm:max-w-5xl h-[85vh] max-h-[85vh] flex flex-col p-0 gap-0 overflow-hidden w-[95vw]",children:[e.jsx(an,{className:"px-6 pt-5 pb-0 shrink-0",children:e.jsx(sn,{className:"text-base font-semibold",children:h(H==="browse"?"virtualMcp.addConnectionDialog.connectionsTitle":"virtualMcp.addConnectionDialog.addConnectionTitle")})}),e.jsx("div",{className:"pt-3 shrink-0",children:e.jsx(Cn,{value:w,onChange:K,placeholder:h("virtualMcp.addConnectionDialog.searchConnectionsPlaceholder")})}),e.jsx(ue.Suspense,{fallback:e.jsx("div",{className:"flex-1 flex items-center justify-center",children:e.jsx(we,{className:"size-6 text-muted-foreground"})}),children:e.jsx(et,{mode:H,agentId:U,addedConnectionIds:P,onAdd:C,onCloneAndAdd:L,onConnectAndAdd:k,connectingItemId:a,search:w,onCreateConnection:()=>j(!0),onBrowseNavigate:d,defaultTab:J})})]}),e.jsx(Zn,{open:r,onOpenChange:j,onCreated:async i=>{j(!1);const s=await $e({connectionId:i,orgId:x.id,orgSlug:x.slug,persistFallback:D=>y.update.mutateAsync({id:i,data:{connection_token:D}}).then(()=>{})});if(s.ran&&!s.ok){A("connection_oauth_failed",{connection_id:i,flow:"custom_create",error:s.error??"no_token"}),X.warning(h("virtualMcp.addConnectionDialog.signInFailedTitle"),{description:h("virtualMcp.addConnectionDialog.signInFailedDescription",{error:s.error??"no token received"})}),b(i,null,"custom"),C(i),n(!1);return}s.ran&&await N(i,"custom_create"),b(i,null,"custom"),C(i),n(!1)}})]})}export{Vt as A};