decocms 4.164.2 → 4.164.3

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 (220) hide show
  1. package/dist/client/assets/{AlertCircle-BfAWdd1s.js → AlertCircle-BrCKa_1S.js} +1 -1
  2. package/dist/client/assets/{AreaChart-CJnyJWgM.js → AreaChart-HdMqEjSb.js} +1 -1
  3. package/dist/client/assets/{ArrowUp-BIoffiYm.js → ArrowUp-B55yy-Iu.js} +1 -1
  4. package/dist/client/assets/{ArrowUpRight-C2dG_b3O.js → ArrowUpRight-CxQ-4OFb.js} +1 -1
  5. package/dist/client/assets/{Check-lMDR-DuJ.js → Check-slTbmrfk.js} +1 -1
  6. package/dist/client/assets/{CheckCircle-Cgx4FXov.js → CheckCircle-Ca_60oGP.js} +1 -1
  7. package/dist/client/assets/{ChevronDown-DjmnrKyu.js → ChevronDown-OE6pruf5.js} +1 -1
  8. package/dist/client/assets/{ChevronRight-DUwhBjwb.js → ChevronRight-vApPNvnB.js} +1 -1
  9. package/dist/client/assets/{ChevronUp-BgQfnJZU.js → ChevronUp-CY1qeZ56.js} +1 -1
  10. package/dist/client/assets/{Copy01-BpnhfF8n.js → Copy01-D0lIolzz.js} +1 -1
  11. package/dist/client/assets/{CpuChip01-BsLXJTEr.js → CpuChip01-B8yajlLx.js} +1 -1
  12. package/dist/client/assets/{DotsVertical-DgToKQaq.js → DotsVertical-JmvtLG9l.js} +1 -1
  13. package/dist/client/assets/{Eye-KFh5P2BI.js → Eye-IjWBQ0bV.js} +1 -1
  14. package/dist/client/assets/{FilterLines-B2bJHtBK.js → FilterLines-9Irkf-h4.js} +1 -1
  15. package/dist/client/assets/{HardDrive-Y3kR_V0O.js → HardDrive-wJf40woN.js} +1 -1
  16. package/dist/client/assets/{Key01-BMth40jC.js → Key01-COu1DVre.js} +1 -1
  17. package/dist/client/assets/{LayoutLeft-CgDwsh-m.js → LayoutLeft-BoyuJJ9H.js} +1 -1
  18. package/dist/client/assets/{LinkExternal01-RofV7vEq.js → LinkExternal01-CK7r4iZU.js} +1 -1
  19. package/dist/client/assets/{LogOut01-s13aUx8k.js → LogOut01-UXnIoS5z.js} +1 -1
  20. package/dist/client/assets/{Monitor01-u6WYnmdo.js → Monitor01-4k4yr01O.js} +1 -1
  21. package/dist/client/assets/{Palette-DEAPUfW-.js → Palette-ChYHhwg8.js} +1 -1
  22. package/dist/client/assets/{Play-Bb2lQ-RG.js → Play-BTAg1Jut.js} +1 -1
  23. package/dist/client/assets/{Plus-BAkoCnkU.js → Plus-4ltmVsjR.js} +1 -1
  24. package/dist/client/assets/{SearchLg-CLeiiyFG.js → SearchLg-COreqxeT.js} +1 -1
  25. package/dist/client/assets/{SearchMd-CBCwU0Qy.js → SearchMd-DJmzNNnu.js} +1 -1
  26. package/dist/client/assets/{Settings02-D3qtZA1F.js → Settings02-TMToTnKM.js} +1 -1
  27. package/dist/client/assets/{Shield01-DliQ-vxN.js → Shield01-CslDKlES.js} +1 -1
  28. package/dist/client/assets/{Star01-BZv_clu-.js → Star01-DbPWenwQ.js} +1 -1
  29. package/dist/client/assets/{Stars01-b_-N_rSk.js → Stars01-BljGS1uJ.js} +1 -1
  30. package/dist/client/assets/{Stars02-_iMqTyA8.js → Stars02-DTiN2W8_.js} +1 -1
  31. package/dist/client/assets/{Sun-BfvHejHj.js → Sun-Dx81-v79.js} +1 -1
  32. package/dist/client/assets/{SwitchHorizontal01-Dl2ECbAu.js → SwitchHorizontal01-BAIDCaTC.js} +1 -1
  33. package/dist/client/assets/{Tool01-CbhbBxli.js → Tool01-DLcTFCtZ.js} +1 -1
  34. package/dist/client/assets/{Tool02-BZFCku19.js → Tool02-BAvK24mp.js} +1 -1
  35. package/dist/client/assets/{Trash01-BZvXAAOY.js → Trash01-vinVevib.js} +1 -1
  36. package/dist/client/assets/{TrendUp01--q_kHviQ.js → TrendUp01-D4MK6OtJ.js} +1 -1
  37. package/dist/client/assets/{Upload01-BbnwoP-3.js → Upload01-B3i78CO0.js} +1 -1
  38. package/dist/client/assets/{User01-f_A44Ut_.js → User01-ClkQP9k6.js} +1 -1
  39. package/dist/client/assets/{Users01-ld_XEHkT.js → Users01-BeOKna-6.js} +1 -1
  40. package/dist/client/assets/{Users03-CNX-W7XZ.js → Users03-Di7lajI6.js} +1 -1
  41. package/dist/client/assets/{X-yBjZ03-0.js → X-g8Ct9LUH.js} +1 -1
  42. package/dist/client/assets/{XCircle-JS71sncr.js → XCircle-qo7rG2V5.js} +1 -1
  43. package/dist/client/assets/{XClose-DYGIb6Bc.js → XClose-M-2xXjEy.js} +1 -1
  44. package/dist/client/assets/{Zap-n8rE3zZY.js → Zap-Dff54E1-.js} +1 -1
  45. package/dist/client/assets/{ZapSquare-DsnNLxbh.js → ZapSquare-D9eUP097.js} +1 -1
  46. package/dist/client/assets/{access-gate-mRYW95HJ.js → access-gate-Br10F4wg.js} +1 -1
  47. package/dist/client/assets/{add-section-modal-D11PEXIV.js → add-section-modal-DlBChPSs.js} +1 -1
  48. package/dist/client/assets/{agent-icon-Bh7RQQI-.js → agent-icon-XXLPGnJH.js} +1 -1
  49. package/dist/client/assets/{agents-list-ByrNatwy.js → agents-list-BwTBEIZj.js} +1 -1
  50. package/dist/client/assets/{ai-providers-BlbQP_BB.js → ai-providers-D6DSgvsi.js} +1 -1
  51. package/dist/client/assets/{alert-Cvt8uCkX.js → alert-DqawXGJK.js} +1 -1
  52. package/dist/client/assets/{alert-dialog-CqFBCUbe.js → alert-dialog-ClSFfgFj.js} +1 -1
  53. package/dist/client/assets/{app-editor-eFij54Rl.js → app-editor-oI3oe0TL.js} +1 -1
  54. package/dist/client/assets/{auth-B19sSCAr.js → auth-Cu2mTaxQ.js} +1 -1
  55. package/dist/client/assets/{auth-catchall-BlQWgrAY.js → auth-catchall-oM8l0jXe.js} +1 -1
  56. package/dist/client/assets/{auth-entry-DWzeZ_ka.js → auth-entry-3AmFnckH.js} +1 -1
  57. package/dist/client/assets/{auth-split-layout-BAcMCZZQ.js → auth-split-layout-fc8CHiCY.js} +1 -1
  58. package/dist/client/assets/{authenticate-and-persist-oauth-Cj1MT39L.js → authenticate-and-persist-oauth-DZ9EEAxZ.js} +1 -1
  59. package/dist/client/assets/{automation-list-row-DhdQVNeX.js → automation-list-row-CfJMEElH.js} +1 -1
  60. package/dist/client/assets/{automation-runs-CgFXb4kL.js → automation-runs-D2BrE387.js} +1 -1
  61. package/dist/client/assets/{automations-DXEi-4kz.js → automations-BzLvnjlR.js} +1 -1
  62. package/dist/client/assets/{avatar-CFgUWzrE.js → avatar-_4_IFBa5.js} +1 -1
  63. package/dist/client/assets/{badge-CE54giAC.js → badge-BI-TEhh1.js} +1 -1
  64. package/dist/client/assets/{block-document-C2SOomTm.js → block-document-D99k_GoF.js} +1 -1
  65. package/dist/client/assets/{brand-context-anjuTq0z.js → brand-context-C1DlvwKD.js} +1 -1
  66. package/dist/client/assets/{buckets-DcIctQCB.js → buckets-BWbWEoyo.js} +1 -1
  67. package/dist/client/assets/{bulk-category-panel-DbqTrWWe.js → bulk-category-panel-BxtbI4vo.js} +1 -1
  68. package/dist/client/assets/{calendar-BEGpB9t3.js → calendar-Dcgxa1TN.js} +1 -1
  69. package/dist/client/assets/{capability-load-error-jWxO8TQ4.js → capability-load-error-BSPlWAbm.js} +1 -1
  70. package/dist/client/assets/{card-L9BbYfI6.js → card-CO-s1Ctk.js} +1 -1
  71. package/dist/client/assets/{category-editor-HE_BXOwA.js → category-editor-oZNCaYBH.js} +1 -1
  72. package/dist/client/assets/{chat-context-M6v_Bq_E.js → chat-context-C-FeM_iY.js} +1 -1
  73. package/dist/client/assets/{checkbox-DONW1DHr.js → checkbox-BVNTji4e.js} +1 -1
  74. package/dist/client/assets/{cli-auth-success-Bx8vCVSr.js → cli-auth-success-a6TjT0HM.js} +1 -1
  75. package/dist/client/assets/{collection-detail-95o9kGLk.js → collection-detail-BR-z8lRX.js} +1 -1
  76. package/dist/client/assets/{collection-display-button-DeaRRYiq.js → collection-display-button-BlLynq9E.js} +1 -1
  77. package/dist/client/assets/{collection-search-BBDqQhrv.js → collection-search-BRjXi2fq.js} +1 -1
  78. package/dist/client/assets/{collection-table-wrapper-B71_NB6R.js → collection-table-wrapper-Cuo8OOSz.js} +1 -1
  79. package/dist/client/assets/{collection-tabs-CWw_mUA4.js → collection-tabs-ZVGuDvGJ.js} +1 -1
  80. package/dist/client/assets/{command-CT9J2ri1.js → command-qEv_yu8J.js} +1 -1
  81. package/dist/client/assets/{commerce-onboarding-DwOWuvPJ.js → commerce-onboarding-Dx9ZMm3w.js} +1 -1
  82. package/dist/client/assets/{companions-core-CEgpdXdA.js → companions-core-rnM7Nldy.js} +1 -1
  83. package/dist/client/assets/{connect-BYNLHaYL.js → connect-Cj3gi92U.js} +1 -1
  84. package/dist/client/assets/{connection-card-obFBC805.js → connection-card-Bch_diRw.js} +1 -1
  85. package/dist/client/assets/{connection-detail-COd2IeEn.js → connection-detail-bojAaTeL.js} +1 -1
  86. package/dist/client/assets/{connection-form-helpers-E9Xs5chD.js → connection-form-helpers-B1xTy1d1.js} +1 -1
  87. package/dist/client/assets/{connection-CrllO5ik.js → connection-j9t_awY1.js} +1 -1
  88. package/dist/client/assets/{connections-3_hyqh98.js → connections-D11gB0Ul.js} +1 -1
  89. package/dist/client/assets/{decopilot-sse-pool-C2HL4pNV.js → decopilot-sse-pool-CG1ciWhn.js} +1 -1
  90. package/dist/client/assets/{dialog-d_oLAt_T.js → dialog-BZWmEmnc.js} +1 -1
  91. package/dist/client/assets/{domain-settings-BjgLr3_1.js → domain-settings-m01eg_Ze.js} +1 -1
  92. package/dist/client/assets/{drawer-Bms59w4g.js → drawer-D4yURQYD.js} +1 -1
  93. package/dist/client/assets/{dropdown-menu-SI704ShB.js → dropdown-menu-BAIhfE3G.js} +1 -1
  94. package/dist/client/assets/{empty-state-D5_vGLSN.js → empty-state-H14vpo8M.js} +1 -1
  95. package/dist/client/assets/{extract-connection-data-DyOK3GJJ.js → extract-connection-data-CvjcAK4w.js} +1 -1
  96. package/dist/client/assets/{file-explorer-ch6FswHo.js → file-explorer-Cp0nEgNp.js} +1 -1
  97. package/dist/client/assets/{form-B3BeIXGB.js → form-B24bo8HF.js} +1 -1
  98. package/dist/client/assets/{general-DGmkNegp.js → general-CBCEkKqJ.js} +1 -1
  99. package/dist/client/assets/{github-repo-picker-DQSmgwpQ.js → github-repo-picker-BN5fiEeJ.js} +1 -1
  100. package/dist/client/assets/{hooks-SnhEHqqH.js → hooks-Bt9Ya1aR.js} +1 -1
  101. package/dist/client/assets/{index-HIbch74d.js → index-B7TfJ3Fw.js} +1 -1
  102. package/dist/client/assets/{index-ZXPMZyqm.js → index-CEFCbQcZ.js} +1 -1
  103. package/dist/client/assets/{index-CZYdmXdz.js → index-Cjnyj2GY.js} +5 -5
  104. package/dist/client/assets/{index-BAL4Jdyy.js → index-CkROdOL6.js} +1 -1
  105. package/dist/client/assets/{index-CHt4UOmg.js → index-ClaSdpI1.js} +1 -1
  106. package/dist/client/assets/{index-BB49BvuU.js → index-De8HYGIg.js} +1 -1
  107. package/dist/client/assets/{index-CL_EU56Z.js → index-DiWMv8kv.js} +1 -1
  108. package/dist/client/assets/{index-bZOlkM0D.js → index-DprCqbgS.js} +1 -1
  109. package/dist/client/assets/{index-Vm_odaf_.js → index-DzdiTVyo.js} +1 -1
  110. package/dist/client/assets/{index-BVTf3F1q.js → index-NTTxJNl2.js} +3 -3
  111. package/dist/client/assets/{index-C92UMw5P.js → index-jkXahzfR.js} +3 -3
  112. package/dist/client/assets/{index-redirect-BF_984kn.js → index-redirect-t7y6hDNc.js} +1 -1
  113. package/dist/client/assets/{input-s5nILNvj.js → input-BE8G9zWR.js} +1 -1
  114. package/dist/client/assets/{integration-icon--Zj9DYXe.js → integration-icon-Bzl_jiKw.js} +1 -1
  115. package/dist/client/assets/{invite-member-dialog-BBnF4hyO.js → invite-member-dialog-Di6ykb0V.js} +1 -1
  116. package/dist/client/assets/{label-C3MhwnKJ.js → label-CkBtS0XG.js} +1 -1
  117. package/dist/client/assets/{layout-BdYVtoZ3.js → layout-Cegh3T8-.js} +1 -1
  118. package/dist/client/assets/{login-D_kHiTiB.js → login-Bkpwy-_-.js} +1 -1
  119. package/dist/client/assets/{mcp-oauth-BWOx7U-S.js → mcp-oauth-IwqLMhF_.js} +1 -1
  120. package/dist/client/assets/{members-CztZKoIW.js → members-dwqfN9fg.js} +1 -1
  121. package/dist/client/assets/{monaco-editor-CM2Q4xfM.js → monaco-editor-BXS1pDbC.js} +1 -1
  122. package/dist/client/assets/{monitoring-stats-row-CAYStNTu.js → monitoring-stats-row-Y2txTiHq.js} +1 -1
  123. package/dist/client/assets/{multi-select-CDqLj0Ab.js → multi-select-CWSIqk_J.js} +1 -1
  124. package/dist/client/assets/{oauth-callback-ai-provider-ByKeOgPi.js → oauth-callback-ai-provider-CwTxky_i.js} +1 -1
  125. package/dist/client/assets/{oauth-callback-D_pTrl7U.js → oauth-callback-hyMcZ3_E.js} +1 -1
  126. package/dist/client/assets/{onboarding-CQvyUSEE.js → onboarding-CQJfpddk.js} +1 -1
  127. package/dist/client/assets/{org-layout-CY6JBqvL.js → org-layout-DnYynauA.js} +1 -1
  128. package/dist/client/assets/{organization-choice-XMMQvBy6.js → organization-choice-D-ydKTIR.js} +1 -1
  129. package/dist/client/assets/{orgs-BKo_F5Yp.js → orgs-HKEgkbTM.js} +1 -1
  130. package/dist/client/assets/{page-seo-form-D5nELH1f.js → page-seo-form-CRY_YgMP.js} +1 -1
  131. package/dist/client/assets/{popover-Ds15-H_r.js → popover-A5gOMvg8.js} +1 -1
  132. package/dist/client/assets/{post-editor-DwtF7owi.js → post-editor-B74yqHTm.js} +1 -1
  133. package/dist/client/assets/{primitives-BCU9P-Zi.js → primitives-BQc0toCn.js} +1 -1
  134. package/dist/client/assets/{profile-B27b46oc.js → profile-B_wGq81Q.js} +1 -1
  135. package/dist/client/assets/project-app-view-CDFntae4.js +1 -0
  136. package/dist/client/assets/record-editor-BQZBqHhV.js +1 -0
  137. package/dist/client/assets/{redirect-editor-5GxIbQoz.js → redirect-editor-BqXjCXyl.js} +1 -1
  138. package/dist/client/assets/registry-CHZ0nkoh.js +2 -0
  139. package/dist/client/assets/{registry-layout-d3IA7BOu.js → registry-layout-Bwyg541c.js} +1 -1
  140. package/dist/client/assets/{reports-C2Z_OOMD.js → reports-C7rJZ0zb.js} +1 -1
  141. package/dist/client/assets/{require-capability-CYACHSWA.js → require-capability-CMgDJbpX.js} +1 -1
  142. package/dist/client/assets/{required-auth-layout-B9j7RrGd.js → required-auth-layout-CoBxcbmt.js} +1 -1
  143. package/dist/client/assets/{reset-password-CmmVm6OV.js → reset-password-BfGavreo.js} +1 -1
  144. package/dist/client/assets/{roles-ecZgmCNW.js → roles-DvLTEqLu.js} +1 -1
  145. package/dist/client/assets/{search-input-DizUfD5h.js → search-input-CXhD3o93.js} +1 -1
  146. package/dist/client/assets/{secrets-D2njIHeS.js → secrets-Cj9AmUrK.js} +1 -1
  147. package/dist/client/assets/{sections-editor-DfAVq2fv.js → sections-editor-q2fy-e46.js} +1 -1
  148. package/dist/client/assets/{select-DpytsLU9.js → select-C9y4axAn.js} +1 -1
  149. package/dist/client/assets/{select-model-Dh0na2DG.js → select-model-3a3WP-mg.js} +1 -1
  150. package/dist/client/assets/{self-tool-result-DuTLCSb_.js → self-tool-result-4krcRvxm.js} +1 -1
  151. package/dist/client/assets/{seo-editor-Ds99xmrg.js → seo-editor-DjC8Pfog.js} +1 -1
  152. package/dist/client/assets/{settings-layout-Yx3WZOx3.js → settings-layout-DI2UkHDY.js} +1 -1
  153. package/dist/client/assets/{settings-section-C4dDsMlK.js → settings-section-OIbtM6Ap.js} +1 -1
  154. package/dist/client/assets/{shell-controls-k_bpeBa7.js → shell-controls-DyBEMWQM.js} +1 -1
  155. package/dist/client/assets/{shell-layout-BojIGYdH.js → shell-layout-B_F27NRR.js} +1 -1
  156. package/dist/client/assets/{sidebar-CEELrWph.js → sidebar-DIU3v7Vs.js} +1 -1
  157. package/dist/client/assets/{skeleton-cps4cBpF.js → skeleton-BwI4FkrC.js} +1 -1
  158. package/dist/client/assets/{spinner-6oA_T5wT.js → spinner-DaCwqyK7.js} +1 -1
  159. package/dist/client/assets/{sso-fNURnQaE.js → sso-B9SwbTR4.js} +1 -1
  160. package/dist/client/assets/{store-CGIhi9G2.js → store-DG-LjM3E.js} +1 -1
  161. package/dist/client/assets/store-registry-wDZJSw4M.js +2 -0
  162. package/dist/client/assets/{studio-tools-CpKmajV3.js → studio-tools-B3L9CCF2.js} +1 -1
  163. package/dist/client/assets/{switch-B6ietJOq.js → switch-WjSoHU5L.js} +1 -1
  164. package/dist/client/assets/{tab-id-CjesO2jF.js → tab-id-D2JuLUam.js} +1 -1
  165. package/dist/client/assets/{table-AyyLUMMR.js → table-B6X-wYue.js} +1 -1
  166. package/dist/client/assets/{tabs-mzlvM9xo.js → tabs-vK7sP7Tk.js} +1 -1
  167. package/dist/client/assets/{textarea-BVaycnZf.js → textarea-BixfMFbI.js} +1 -1
  168. package/dist/client/assets/{toggle-group-Bi2eYcDw.js → toggle-group-sdzcGZqt.js} +1 -1
  169. package/dist/client/assets/{toolbar-L_bEBAub.js → toolbar-C7tp7A0W.js} +1 -1
  170. package/dist/client/assets/{tooltip-_tbY2Asg.js → tooltip-jK-__CYr.js} +1 -1
  171. package/dist/client/assets/{use-ai-providers-B_0yGWLR.js → use-ai-providers-iCccdGc1.js} +1 -1
  172. package/dist/client/assets/{use-automations-BeYCf3le.js → use-automations-BUr6oN5W.js} +1 -1
  173. package/dist/client/assets/{use-autosave-Ccs5yF72.js → use-autosave-BoXZwuPc.js} +1 -1
  174. package/dist/client/assets/{use-capability-CuDfi892.js → use-capability-_phTjvE6.js} +1 -1
  175. package/dist/client/assets/{use-clock-tick-B6WooEI8.js → use-clock-tick-ChjqwaWO.js} +1 -1
  176. package/dist/client/assets/{use-connection-Bd_jpf4N.js → use-connection-Dk6h1S8Q.js} +1 -1
  177. package/dist/client/assets/{use-copy-q-yYpnot.js → use-copy-B3FMQPgc.js} +1 -1
  178. package/dist/client/assets/{use-create-virtual-mcp-BH9RqXEc.js → use-create-virtual-mcp-lP994meF.js} +1 -1
  179. package/dist/client/assets/{use-debounced-autosave-BFtE6Ebz.js → use-debounced-autosave-BkeGmA8R.js} +1 -1
  180. package/dist/client/assets/{use-debounced-value-GpZ1mi-v.js → use-debounced-value-35Ew4adl.js} +1 -1
  181. package/dist/client/assets/{use-deco-credits-CUzNHxow.js → use-deco-credits-Bz4kQre2.js} +1 -1
  182. package/dist/client/assets/{use-decopilot-events-_3yeXkvf.js → use-decopilot-events-DESm1xFp.js} +1 -1
  183. package/dist/client/assets/{use-delete-connection-DaFomjHc.js → use-delete-connection-Bv-XFvT7.js} +1 -1
  184. package/dist/client/assets/{use-deployment-admin-DLMcnhKI.js → use-deployment-admin-BMZ9GmLK.js} +1 -1
  185. package/dist/client/assets/{use-file-configs-BVBVH9ie.js → use-file-configs-DbQbjjGU.js} +1 -1
  186. package/dist/client/assets/{use-infinite-scroll-CXgjR-Xw.js → use-infinite-scroll-bz44YEu_.js} +1 -1
  187. package/dist/client/assets/{use-join-requests-RfqT7PGo.js → use-join-requests-DkkHKHo5.js} +1 -1
  188. package/dist/client/assets/{use-mcp-auth-status-DjDWpWN2.js → use-mcp-auth-status-DinHVY4x.js} +1 -1
  189. package/dist/client/assets/{use-mcp-client-DYDnC7jC.js → use-mcp-client-BY0sWUOA.js} +1 -1
  190. package/dist/client/assets/{use-mcp-tools-DKT9QN7a.js → use-mcp-tools-B3VTnP2a.js} +1 -1
  191. package/dist/client/assets/{use-members-CSIpTkhO.js → use-members-BvIEYTQh.js} +1 -1
  192. package/dist/client/assets/{use-mobile-CqQD3V7d.js → use-mobile-e4E9JEgD.js} +1 -1
  193. package/dist/client/assets/{use-navigate-to-agent-_qOFR2k5.js → use-navigate-to-agent--UNprsDY.js} +1 -1
  194. package/dist/client/assets/{use-org-auth-client-DX4MSTlq.js → use-org-auth-client-1VtyJaTX.js} +1 -1
  195. package/dist/client/assets/{use-org-sso-B4IlMIyg.js → use-org-sso-CdLNJ1dh.js} +1 -1
  196. package/dist/client/assets/{use-organization-roles-DIQI7xI7.js → use-organization-roles-BfK1lhL9.js} +1 -1
  197. package/dist/client/assets/{use-organization-settings-DbYxMOQO.js → use-organization-settings-CB3fZhik.js} +1 -1
  198. package/dist/client/assets/{use-registry-connections-MnJfMvX7.js → use-registry-connections-IwesJon2.js} +1 -1
  199. package/dist/client/assets/{use-secrets-ChYNs_PH.js → use-secrets-BgAgV-MY.js} +1 -1
  200. package/dist/client/assets/{use-status-sounds-D4xvXthG.js → use-status-sounds-DBMxI1Wl.js} +1 -1
  201. package/dist/client/assets/{use-tags-DnMjb4eU.js → use-tags-CmxfsfLz.js} +1 -1
  202. package/dist/client/assets/{use-view-mode-BFf8H3PE.js → use-view-mode-Bx_ivyi4.js} +1 -1
  203. package/dist/client/assets/{use-virtual-mcp-CiLzfsBK.js → use-virtual-mcp-CwaifoJ4.js} +1 -1
  204. package/dist/client/assets/useInfiniteQuery-uQbAfv6P.js +1 -0
  205. package/dist/client/assets/{useQueries-D7EzIUl0.js → useQueries-D0fe-xQH.js} +1 -1
  206. package/dist/client/assets/{useRouterState-Dg3aZaTF.js → useRouterState-gffqqBYx.js} +1 -1
  207. package/dist/client/assets/useSuspenseInfiniteQuery-CrozBMs6.js +1 -0
  208. package/dist/client/assets/{users-TvJpkvfl.js → users-Dyg8TUkz.js} +1 -1
  209. package/dist/client/assets/{variant-calendar-E-Dgf8on.js → variant-calendar-9WB2vopZ.js} +1 -1
  210. package/dist/client/assets/{view-mode-toggle-Ctj98hwO.js → view-mode-toggle-BZPZ4tB7.js} +1 -1
  211. package/dist/client/index.html +1 -1
  212. package/dist/server/cli.js +2 -2
  213. package/dist/server/server.js +2 -2
  214. package/package.json +1 -1
  215. package/dist/client/assets/project-app-view-Tb39SpT_.js +0 -1
  216. package/dist/client/assets/record-editor-DKoZkjKa.js +0 -1
  217. package/dist/client/assets/registry-NDRiiTi9.js +0 -2
  218. package/dist/client/assets/store-registry-BIJayFZ3.js +0 -2
  219. package/dist/client/assets/useInfiniteQuery-3qhR0YFW.js +0 -1
  220. package/dist/client/assets/useSuspenseInfiniteQuery-BD49lQEk.js +0 -1
@@ -2714,9 +2714,9 @@ Do NOT require review (requiresReview = false) when the changes are low-risk, su
2714
2714
 
2715
2715
  When unsure between the two, lean toward NOT requiring review for small frontend-only diffs, and toward requiring it for anything backend or large.
2716
2716
 
2717
- Respond with the structured verdict and a short reason.`,nS$;var tS$=B(()=>{k4();Fw();j$1();we4=P$1.object({requiresReview:P$1.boolean().describe("true if the changes should go through pull-request review"),reason:P$1.string().describe("One short sentence explaining the decision (max ~120 chars)")});nS$={requiresReview:!1,reason:""}});function Le4($){if(!$||$.includes(".."))return!1;return De4.test($)}function oS$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!Le4(Z))return null;let{__resolveType:X,...G}=$;return{resolveType:Z,payload:G}}function rS$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var De4;var aS$=B(()=>{De4=/^[\w./@-]+$/});function A$1($){let Z;try{Z=new URL($)}catch{return null}if(!Z.hostname.endsWith(".localhost"))return null;let X=Z.host;return Z.hostname="127.0.0.1",{url:Z.toString(),hostHeader:X}}function sS$($,Z){let X=$?.githubRepo;if(!X?.owner||!X?.name)return null;if(!X.connectionId)return X;if(!Z.includes(X.connectionId))return null;return X}async function eS$($,Z,X,G){if(!G.connectionId)throw new Lg("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let Q=$.organization?.id;if(!Q)throw new Lg(h7);await LG0({ctx:$,connectionId:G.connectionId,organizationId:Q,forceRefresh:!0,onLegacyMintError:(H)=>{let F=H instanceof Error?H.message:h7;throw new Lg(F)}});let{cloneUrl:Y,gitUserName:J,gitUserEmail:K}=await Ay(G.connectionId,G.owner,G.name,$.db,$.vault),W=ME0($),N=await Z.proxyDaemonRequest(X,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{repository:{cloneUrl:Y},identity:{userName:J,userEmail:K}},...W?{operator:W}:{}})});if(!N.ok){let H=await $O(N,Ee4).catch(()=>N.statusText);throw Error(`Failed to refresh sandbox git credentials (${N.status}): ${H}`)}}var Ee4=10485760,Lg;var $V$=B(()=>{eU();w$1();gp();EG0();Lg=class Lg extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function je4($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!ze4.test(Z))throw Error(`Invalid branch name: ${$}`)}function OC($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(Ae4)])}function BC($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}function T$1($,Z){let G=(kE0.get($)??Promise.resolve()).catch(()=>{}).then(Z),Q=G.catch(()=>{});return kE0.set($,Q),Q.finally(()=>{if(kE0.get($)===Q)kE0.delete($)}),G}async function SZ($,Z,X){let G=BC($);if(G instanceof Response)return G;let{claimName:Q,userId:Y,projectRef:J}=$.get("vmClaim"),K=X?.method??"POST",W=null,N=new Headers;if(X?.jsonBody!==void 0)W=X.jsonBody,N.set("content-type","application/json");else if(X?.forwardJsonBody)W=await $.req.text(),N.set("content-type","application/json");let H=X?.signal,F={method:K,headers:N,body:W,...H?{signal:H}:{}},U=async()=>{let w=await G.proxyDaemonRequest(Q,Z,F);if(X?.map404to410&&w.status===404){try{await w.body?.cancel()}catch{}if(await G.adoptLiveClaim?.({userId:Y,projectRef:J},Q))w=await G.proxyDaemonRequest(Q,Z,F);if(w.status===404){try{await w.body?.cancel()}catch{}return new Response(JSON.stringify({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."}),{status:410,headers:{"content-type":"application/json",...vQ}})}}let O=await w.text(),D=X?.redactRepoDirUnlessDesktop&&G.kind!=="user-desktop"?Re4(O):O,L=w.headers.get("content-type")??"application/json";return new Response(D,{status:w.status,headers:{"content-type":L,...vQ}})};try{if(H){let w=U();return w.catch(()=>{}),await Promise.race([w,new Promise((D,L)=>{if(H.aborted)return L(H.reason);H.addEventListener("abort",()=>L(H.reason),{once:!0})})])}return await U()}catch(w){let O=w instanceof Error?w.message:String(w);return $.json({error:`Daemon unreachable: ${O}`},502)}}function Re4($){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 SE0($,Z,X,G="GET",Q){let Y=await $.proxyDaemonRequest(Z,X,{method:G,headers:new Headers,body:null});if(Y.status===404&&Q){try{await Y.body?.cancel()}catch{}if(await $.adoptLiveClaim?.(Q,Z))Y=await $.proxyDaemonRequest(Z,X,{method:G,headers:new Headers,body:null})}if(Y.status===404){try{await Y.body?.cancel()}catch{}throw Error("SANDBOX_GONE")}let J=await Y.text();if(!Y.ok)try{let K=JSON.parse(J);throw Error(K.error??`Daemon error (${Y.status})`)}catch(K){if(K instanceof Error&&K.message!==J)throw K;throw Error(`Daemon error (${Y.status})`)}return JSON.parse(J)}function Ie4($){return GV$.includes($)}var ze4,ZV$=524288,Pe4=65536,Ae4=1e4,XV$=2000,Te4,kE0,vQ,GV$,QV$=()=>{let $=new E1;return $.use("/:virtualMcpId/:branch/*",Te4),$.post("/:virtualMcpId/:branch/write",(Z)=>SZ(Z,"/_sandbox/write",{forwardJsonBody:!0,signal:OC(Z)})),$.post("/:virtualMcpId/:branch/unlink",(Z)=>SZ(Z,"/_sandbox/unlink",{forwardJsonBody:!0,signal:OC(Z)})),$.post("/:virtualMcpId/:branch/mkdir",(Z)=>SZ(Z,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:OC(Z)})),$.post("/:virtualMcpId/:branch/rename",(Z)=>SZ(Z,"/_sandbox/rename",{forwardJsonBody:!0,signal:OC(Z)})),$.post("/:virtualMcpId/:branch/read",(Z)=>SZ(Z,"/_sandbox/read",{forwardJsonBody:!0,signal:OC(Z)})),$.post("/:virtualMcpId/:branch/glob",(Z)=>SZ(Z,"/_sandbox/glob",{forwardJsonBody:!0,signal:OC(Z)})),$.post("/:virtualMcpId/:branch/grep",(Z)=>SZ(Z,"/_sandbox/grep",{forwardJsonBody:!0,signal:OC(Z)})),$.post("/:virtualMcpId/:branch/exec/:script",async(Z)=>{let X=Z.req.param("script");if(!X)return Z.json({error:"missing script name"},400);return SZ(Z,`/_sandbox/exec/${encodeURIComponent(X)}`)}),$.post("/:virtualMcpId/:branch/exec/:script/kill",async(Z)=>{let X=Z.req.param("script");if(!X)return Z.json({error:"missing script name"},400);return SZ(Z,`/_sandbox/exec/${encodeURIComponent(X)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(Z)=>SZ(Z,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDirUnlessDesktop:!0})),$.put("/:virtualMcpId/:branch/config",(Z)=>SZ(Z,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(Z)=>{let X=Z.req.param("step");if(!X||!Ie4(X))return Z.json({error:`step must be one of: ${GV$.join(", ")}`},400);if(X==="start"){let G=Z.get("vmClaim");if(G.runner){let Q=$0(Z.var.studioContext),Y=r90(G.virtualMcpMetadata);try{await DG0({ctx:Z.var.studioContext,runner:G.runner,handle:G.claimName,orgId:Q.id,userId:G.callerUserId,entries:Y})}catch(J){let K=J instanceof Error?J.message:String(J);return Z.json({error:`Failed to push env to daemon: ${K}`},502)}}}return SZ(Z,`/_sandbox/setup/${X}`,{signal:Z.req.raw.signal,map404to410:!0})}),$.get("/:virtualMcpId/:branch/events",(Z)=>{let X=Z.get("vmClaim");if(!X.runner)return VH(Z,async(G)=>{await G.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this studio instance."})})});return uS$(Z,{ctx:Z.var.studioContext,claimName:X.claimName,runner:X.runner,virtualMcpId:X.virtualMcpId,branch:X.branch,userId:X.userId,projectRef:X.projectRef,virtualMcpMetadata:X.virtualMcpMetadata})}),$.get("/:virtualMcpId/:branch/git/status",(Z)=>SZ(Z,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([Z.req.raw.signal,AbortSignal.timeout(XV$)])})),$.post("/:virtualMcpId/:branch/git/status",(Z)=>SZ(Z,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([Z.req.raw.signal,AbortSignal.timeout(XV$)])})),$.post("/:virtualMcpId/:branch/git/diff",(Z)=>SZ(Z,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/git/publish",async(Z)=>{let X=BC(Z);if(X instanceof Response)return X;let{claimName:G,virtualMcpMetadata:Q,connectionIds:Y}=Z.get("vmClaim"),J=Z.var.studioContext;return T$1(G,async()=>{try{await O$1(J,X,G);let K=sS$(Q,Y);if(K)await eS$(J,X,G,K)}catch(K){if(K instanceof Lg)return Z.json({error:K.message},403,vQ);let W=K instanceof Error?K.message:String(K);return Z.json({error:W},502,vQ)}return SZ(Z,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",(Z)=>{let{claimName:X}=Z.get("vmClaim");return T$1(X,()=>SZ(Z,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(Z)=>{let X=BC(Z);if(X instanceof Response)return X;let{claimName:G}=Z.get("vmClaim"),Q=Z.var.studioContext;return T$1(G,async()=>{try{await O$1(Q,X,G)}catch(Y){let J=Y instanceof Error?Y.message:String(Y);return Z.json({error:J},502,vQ)}return SZ(Z,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",H7({maxSize:ZV$,onError:(Z)=>Z.json({error:"Payload too large"},413,vQ)}),async(Z)=>{let X=BC(Z);if(X instanceof Response)return X;let{claimName:G,userId:Q,projectRef:Y}=Z.get("vmClaim"),J=Z.var.studioContext;try{let K=await Z.req.json().catch(()=>({})),W=K.status,N=K.diff,H=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[F,U]=L$1(W)&&H?[W,N]:await Promise.all([SE0(X,G,"/_sandbox/git/status","GET",{userId:Q,projectRef:Y}),SE0(X,G,"/_sandbox/git/diff","GET",{userId:Q,projectRef:Y})]),w=await iS$(J,F,U);return Z.json(w,200,vQ)}catch(K){let W=K instanceof Error?K.message:String(K);if(W==="SANDBOX_GONE")return Z.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,vQ);return Z.json({error:W},502,vQ)}}),$.post("/:virtualMcpId/:branch/git/judge-review",H7({maxSize:ZV$,onError:(Z)=>Z.json({error:"Payload too large"},413,vQ)}),async(Z)=>{let X=BC(Z);if(X instanceof Response)return X;let{claimName:G,userId:Q,projectRef:Y}=Z.get("vmClaim"),J=Z.var.studioContext;try{let K=await Z.req.json().catch(()=>({})),W=K.status,N=K.diff,H=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[F,U]=L$1(W)&&H?[W,N]:await Promise.all([SE0(X,G,"/_sandbox/git/status","GET",{userId:Q,projectRef:Y}),SE0(X,G,"/_sandbox/git/diff","GET",{userId:Q,projectRef:Y})]),w=await pS$(J,F,U,typeof K.language==="string"?K.language:void 0);return Z.json(w,200,vQ)}catch(K){let W=K instanceof Error?K.message:String(K);if(W==="SANDBOX_GONE")return Z.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,vQ);return Z.json({error:W},502,vQ)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(Z)=>{let X=BC(Z);if(X instanceof Response)return X;let{claimName:G}=Z.get("vmClaim"),Q=Z.req.query("path");if(!Q||!Q.startsWith("/")||Q.startsWith("//")||Q.includes("..")||Q.includes("\\"))return Z.json({error:"Path not allowed"},403);let Y;try{Y=await X.getPreviewUrl(G)}catch{return Z.json({error:"Preview not available"},502)}if(!Y)return Z.json({error:"Preview not available"},502);let J=Y.replace(/\/+$/,""),K=A$1(`${J}${Q}`),W;try{W=await fetch(K?.url??`${J}${Q}`,{...K?{headers:{host:K.hostHeader}}:{}})}catch{return Z.json({error:"Preview unreachable"},502)}let N;try{N=await W.text()}catch{return Z.json({error:"Preview unreachable"},502)}return new Response(N,{status:W.status,headers:{"content-type":W.headers.get("content-type")??"application/json"}})}),$.post("/:virtualMcpId/:branch/preview-invoke",H7({maxSize:Pe4,onError:(Z)=>Z.json({error:"Payload too large"},413)}),async(Z)=>{let X=BC(Z);if(X instanceof Response)return X;let{claimName:G}=Z.get("vmClaim"),Q;try{Q=await X.getPreviewUrl(G)}catch{return Z.json({error:"Preview not available"},502)}if(!Q)return Z.json({error:"Preview not available"},502);let Y;try{Y=await Z.req.json()}catch{return Z.json({error:"Invalid JSON body"},400)}if(!Y||typeof Y!=="object"||Array.isArray(Y))return Z.json({error:"Invalid JSON body"},400);let J=oS$(Y);if(!J)return Z.json({error:"Invalid or missing __resolveType"},400);let K=rS$(Q,J.resolveType),W=A$1(K),N;try{N=await fetch(W?.url??K,{method:"POST",headers:{"content-type":"application/json",...W?{host:W.hostHeader}:{}},body:JSON.stringify(J.payload),signal:AbortSignal.timeout(30000)})}catch{return Z.json({error:"Preview unreachable"},502)}let H;try{H=await N.text()}catch{return Z.json({error:"Preview unreachable"},502)}return new Response(H,{status:N.status,headers:{"content-type":N.headers.get("content-type")??"application/json"}})}),$};var YV$=B(()=>{i8();YC();Dg();xS$();HH();gS$();uL();hy();hS$();cS$();fr0();Pn();j$1();tS$();aS$();$V$();ze4=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;Te4=fS$(async($,Z)=>{let X=$.var.studioContext;try{J0(X)}catch{return $.json({error:"Unauthorized"},401)}let G=B1(X);if(!G)return $.json({error:"Unauthorized"},401);let Q;try{Q=$0(X)}catch{return $.json({error:"Organization scope required"},403)}let Y=$.req.param("virtualMcpId"),J=$.req.param("branch");if(!Y||!J)return $.json({error:"virtualMcpId and branch are required"},400);try{je4(J)}catch(w){let O=w instanceof Error?w.message:String(w);return $.json({error:O},400)}let K=await X.storage.virtualMcps.findById(Y);if(!K||K.organization_id!==Q.id)return $.json({error:"Virtual MCP not found"},404);let W=xp({orgId:Q.id,virtualMcpId:Y,branch:J}),N=await hL(X,J,G),H=yS$({userId:N,projectRef:W},J),F=K.metadata??null,U;try{U=(await P3(X,{userId:N,branch:J,virtualMcpMetadata:F})).provider}catch{U=null}if(!U)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:H,callerUserId:G,runner:U,virtualMcpId:Y,branch:J,userId:N,projectRef:W,virtualMcpMetadata:F,connectionIds:K.connections?.map((w)=>w.connection_id)??[]}),Z()});kE0=new Map;vQ={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};GV$=["clone","install","start"]});var JV$=($)=>{let Z=new E1;if(Z.use("*",QC),Z.route("/",mL0()),Z.route("/",Aq$()),Z.route("/",AS$()),Z.route("/",jS$()),Z.route("/",RE0()),Z.route("/tools",SS$()),Z.route("/",qS$()),Z.route("/",QS$({kvStorage:$.kvStorage})),Z.route("/",XS$()),Z.route("/fs",BS$({getConnection:$.getNatsConnection})),Z.route("/sandbox",QV$()),Z.route("/",LS$()),Z.route("/deco-sites",nL0()),Z.route("/sso",GL0()),Z.route("/",IE0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",Bq$()),$.mountDevAssets)Z.route("/dev-assets",pL0({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.route("/",_a1()),Z.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",$.betterAuthProtectedResourceHandler),Z.get("/mcp/.well-known/oauth-protected-resource",$.betterAuthProtectedResourceHandler),Z.route("/mcp",$Z0()),Z.route("/mcp/self",TE0()),Z.route("/mcp",GZ0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var KV$=B(()=>{i8();b01();Dq$();h01();tL0();Mt();_01();GS$();YS$();DS$();Fi();qe0();QZ0();J$1();ES$();PS$();TS$();MS$();W$1();VS$();N$1();ZZ0();YV$()});function Me4($){return $.filter((Z)=>Z.vendors?.alias).map((Z)=>({name:Z.name,title:Z.title,description:Z.description,logo:Z.logo,category:Z.category,vendor:{alias:Z.vendors.alias,url:Z.vendors.url}}))}async function ke4($,Z){let X=await fetch(`${$}/rest/v1/apps?select=name,title,description,logo,category,vendors(alias,url)`,{headers:{apikey:Z,Authorization:`Bearer ${Z}`,Accept:"application/json"},signal:AbortSignal.timeout(qe4)});if(!X.ok){let G=await X.text().catch(()=>X.statusText);throw console.error(`[deco-apps] Supabase error (${X.status}): ${G.slice(0,200)}`),Error(`External service error (${X.status})`)}return await X.json()}var qe4=1e4,Se4=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},WV$=()=>{let $=new E1;return $.use("*",Se4),$.get("/",async(Z)=>{let X=m0(),G=X.decoSupabaseUrl,Q=X.decoSupabaseServiceKey;if(!G||!Q)return Z.json({apps:[]});try{let Y=await ke4(G,Q);return Z.json({apps:Me4(Y)})}catch(Y){return console.error("[deco-apps] GET error:",Y),Z.json({error:"Failed to fetch apps"},502)}}),$};var NV$=B(()=>{i8();k$()});import{z as I1}from"zod";function UW($,Z="invalid_request_error",X=null,G=null){return{error:{message:$,type:Z,param:X,code:G}}}function he4($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let X=$.substring(0,Z),G=$.substring(Z+1);if(!X||!G)return null;return{credentialId:X,modelId:G}}function ue4($,Z,X){try{return JSON.parse($)}catch{throw new UV$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function ce4($){let Z={};for(let X of $)if(X.role==="assistant"&&X.tool_calls)for(let G of X.tool_calls)Z[G.id]=G.function.name;return $.map((X)=>{switch(X.role){case"system":return{role:"system",content:X.content};case"user":if(typeof X.content==="string")return{role:"user",content:X.content};return{role:"user",content:X.content.map((Q)=>{if(Q.type==="text")return{type:"text",text:Q.text};return{type:"image",image:Q.image_url.url}})};case"assistant":if(X.tool_calls&&X.tool_calls.length>0)return{role:"assistant",content:X.tool_calls.map((Q)=>({type:"tool-call",toolCallId:Q.id,toolName:Q.function.name,input:ue4(Q.function.arguments,Q.id,Q.function.name)}))};return{role:"assistant",content:X.content??""};case"tool":let G=Z[X.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:X.tool_call_id,toolName:G,output:{type:"text",value:X.content}}]}}})}function le4($){let Z=$.map((X)=>{let G=X.function.parameters?FQ(X.function.parameters):FQ({type:"object",properties:{}});return[X.function.name,V$({description:X.function.description,inputSchema:G})]});return Object.fromEntries(Z)}function de4($){if(!$)return;return{openai:{response_format:$}}}function me4(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function HV$($,Z,X,G,Q,Y){let J={model:$,messages:Z,tools:X,temperature:G.temperature,maxTokens:G.max_tokens,topP:G.top_p,frequencyPenalty:G.frequency_penalty,presencePenalty:G.presence_penalty,stopSequences:G.stop?Array.isArray(G.stop)?G.stop:[G.stop]:void 0,abortSignal:Y};return Q?{...J,providerOptions:Q}:J}function FV$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var Ve4=256,Ce4,_e4,ve4,be4,fe4,xe4,ye4,ge4,UV$,wV$,OV$;var BV$=B(()=>{k4();i8();Dg();eN();Ce4=I1.object({type:I1.literal("function"),function:I1.object({name:I1.string(),description:I1.string().optional(),parameters:I1.record(I1.string(),I1.unknown()).optional()})}),_e4=I1.object({id:I1.string(),type:I1.literal("function"),function:I1.object({name:I1.string(),arguments:I1.string()})}),ve4=I1.discriminatedUnion("role",[I1.object({role:I1.literal("system"),content:I1.string(),name:I1.string().optional()}),I1.object({role:I1.literal("user"),content:I1.union([I1.string(),I1.array(I1.union([I1.object({type:I1.literal("text"),text:I1.string()}),I1.object({type:I1.literal("image_url"),image_url:I1.object({url:I1.string(),detail:I1.string().optional()})})]))]),name:I1.string().optional()}),I1.object({role:I1.literal("assistant"),content:I1.string().nullable().optional(),name:I1.string().optional(),tool_calls:I1.array(_e4).optional()}),I1.object({role:I1.literal("tool"),content:I1.string(),tool_call_id:I1.string()})]),be4=I1.object({type:I1.literal("text")}),fe4=I1.object({type:I1.literal("json_object")}),xe4=I1.object({type:I1.literal("json_schema"),json_schema:I1.object({name:I1.string(),description:I1.string().optional(),schema:I1.record(I1.string(),I1.unknown()),strict:I1.boolean().optional()})}),ye4=I1.union([be4,fe4,xe4]),ge4=I1.object({model:I1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:I1.array(ve4),stream:I1.boolean().optional().default(!1),temperature:I1.number().min(0).max(2).optional(),max_tokens:I1.number().positive().optional(),top_p:I1.number().min(0).max(1).optional(),frequency_penalty:I1.number().min(-2).max(2).optional(),presence_penalty:I1.number().min(-2).max(2).optional(),stop:I1.union([I1.string(),I1.array(I1.string())]).optional(),tools:I1.array(Ce4).optional(),tool_choice:I1.union([I1.literal("auto"),I1.literal("none"),I1.literal("required"),I1.object({type:I1.literal("function"),function:I1.object({name:I1.string()})})]).optional(),response_format:ye4.optional(),user:I1.string().optional()});UV$=class UV$ extends Error{constructor($){super($);this.name="MessageConversionError"}};wV$=new E1;wV$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(UW("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(UW("Organization context is required. Ensure your API key has organization metadata.","invalid_request_error","organization"),400);if((Z.organization.slug??Z.organization.id)!==X)return $.json(UW("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let G=await $.req.json(),Q=ge4.safeParse(G);if(!Q.success){let L=Q.error.issues[0]??{message:"Invalid request",path:[]};return $.json(UW(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let Y=Q.data,J=he4(Y.model);if(!J)return $.json(UW("Invalid model format. Expected 'model_id' or 'credential_id:model_id' (e.g., 'claude-sonnet-4-6' or 'key_abc123:claude-sonnet-4-6')","invalid_request_error","model"),400);let{credentialId:K}=J,{modelId:W}=J;if(!K){let E=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((z)=>kB(z.providerId));if(!E)return $.json(UW("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);K=E.id}let N;try{N=await Z.aiProviders.activate(K,Z.organization.id)}catch{return $.json(UW(`AI provider credential not found or inaccessible: ${K}`,"invalid_request_error","model"),404)}let H=N.aiSdk.languageModel(W),F=ce4(Y.messages),U=Y.tools?le4(Y.tools):void 0,w=de4(Y.response_format),O=me4(),D=Math.floor(Date.now()/1000);if(Y.stream)return VH($,async(L)=>{let E=HV$(H,F,U,Y,w,$.req.raw.signal);try{let z=Ew(E),j=!1,A=0,P="",q=async()=>{if(P.length===0)return;let C=P;P="",await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Y.model,choices:[{index:0,delta:{content:C},finish_reason:null}]})})};for await(let C of z.fullStream){if(!j&&(C.type==="text-delta"||C.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Y.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),j=!0;if(C.type==="text-delta"){if(P+=C.text,P.length>=Ve4)await q()}else if(C.type==="tool-call"){await q();let k=A++;await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Y.model,choices:[{index:0,delta:{tool_calls:[{index:k,id:C.toolCallId,type:"function",function:{name:C.toolName,arguments:JSON.stringify(C.input)}}]},finish_reason:null}]})})}else if(C.type==="finish")await q(),await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Y.model,choices:[{index:0,delta:{},finish_reason:FV$(C.finishReason)}],usage:C.totalUsage?{prompt_tokens:C.totalUsage.inputTokens??0,completion_tokens:C.totalUsage.outputTokens??0,total_tokens:C.totalUsage.totalTokens??0}:void 0})})}await q(),await L.writeSSE({data:"[DONE]"})}catch(z){let j=z;console.error("[openai-compat:stream] Error:",j.message),await L.writeSSE({data:JSON.stringify({error:{message:j.message,type:"server_error"}})})}});else{let L=HV$(H,F,U,Y,w,$.req.raw.signal),E=await Dw(L),z={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)z.tool_calls=E.toolCalls.map((j)=>({id:j.toolCallId,type:"function",function:{name:j.toolName,arguments:JSON.stringify("input"in j?j.input:{})}})),z.content=null;return $.json({id:O,object:"chat.completion",created:D,model:Y.model,choices:[{index:0,message:z,finish_reason:FV$(E.finishReason)}],usage:{prompt_tokens:E.usage?.inputTokens??0,completion_tokens:E.usage?.outputTokens??0,total_tokens:E.usage?.totalTokens??0}})}}catch(G){let Q=G;if(Q.name==="AbortError")return $.json(UW("Request aborted","invalid_request_error"),400);if(Q.name==="MessageConversionError")return $.json(UW(Q.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Q.message,Q.stack),$.json(UW(Q.message,"server_error"),500)}});OV$=wV$});var LV$;var DV$=B(()=>{LV$={name:"decocms",version:"4.164.2",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function pe4(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??ne4}}var EV$,ne4="https://ph.studio.decocms.com",zV$;var jV$=B(()=>{i8();BC0();eV();OZ();k$();Pe0();DV$();EV$=new E1;EV$.get("/",($)=>{let Z={version:LV$.version,theme:WM1(),...xB().logo&&{logo:xB().logo},...YW()&&{internalUrl:q00()},...m0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!m0().firecrawlApiKey,auth:TT$(),posthog:pe4(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!YW()&&m0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});zV$=EV$});function Eg($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function R$1($){return(Eg($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function AV$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Eg($))}&sz=${Z}`}function PV$($,Z){let X=$.trim();if(X.length<=Z)return X;let G=X.slice(0,Z-1),Q=G.lastIndexOf(" ");return`${(Q>Z*0.6?G.slice(0,Q):G).trimEnd()}\u2026`}function TV$($){let{brand:Z,domain:X,score:G,verdict:Q}=$,Y=typeof G==="number"?`${Z} commerce report \u2014 ${Math.round(G)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,J=`See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,K=Q?.trim()?PV$(`${Q.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):PV$(`How does ${X} really perform? ${J}`,200);return{title:Y,description:K}}import{z as c0}from"zod";var DC,te4,oe4,re4,ae4,RV$;var IV$=B(()=>{DC=c0.enum(["good","bad","neutral"]),te4=c0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},c0.object({kind:c0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:c0.coerce.string().optional(),tone:DC.optional(),muted:c0.boolean().optional(),delta:c0.coerce.string().optional(),deltaDir:c0.enum(["up","down","neutral"]).optional(),points:c0.array(c0.coerce.number()).optional(),label:c0.coerce.string().optional()}).transform(($)=>{if($.kind==="badge"&&$.label==null)$.label=$.value??"";if($.kind==="score"){let Z=Number($.value);if(Number.isNaN(Z))return{...$,kind:"text"}}return $})),oe4=c0.preprocess(($)=>{let Z=$;if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&Array.isArray(Z.cells))Z=Z.cells;if(Array.isArray(Z)&&Z.length===1&&Array.isArray(Z[0]))Z=Z[0];if(Array.isArray(Z))return Z;if(Z&&typeof Z==="object")return Object.values(Z);return Z},c0.array(te4)),re4={key:c0.coerce.string(),title:c0.coerce.string(),eyebrow:c0.coerce.string().optional(),headline:c0.coerce.string(),annotation:c0.coerce.string().optional(),methodology:c0.coerce.string().optional(),sources:c0.array(c0.object({name:c0.coerce.string(),logoUrl:c0.coerce.string()})).optional()},ae4=c0.discriminatedUnion("template",[c0.object({template:c0.literal("cover"),score:c0.object({value:c0.coerce.number(),max:c0.coerce.number().optional(),grade:c0.coerce.string().optional(),label:c0.coerce.string().optional()}).optional(),brandImage:c0.coerce.string().optional(),screenshot:c0.coerce.string().optional(),mobileScreenshot:c0.coerce.string().optional()}),c0.object({template:c0.literal("cta"),ctaUrl:c0.coerce.string().optional(),ctaLabel:c0.coerce.string().optional(),bullets:c0.array(c0.coerce.string()).optional()}),c0.object({template:c0.literal("series"),points:c0.array(c0.coerce.number()).min(2),xLabels:c0.array(c0.coerce.string()).min(1),unit:c0.coerce.string().optional(),callout:c0.object({index:c0.coerce.number(),value:c0.coerce.string(),tone:DC.optional()})}),c0.object({template:c0.literal("threshold"),value:c0.coerce.string().default(""),metricLabel:c0.coerce.string().optional(),ratio:c0.coerce.number(),thresholdRatio:c0.coerce.number().optional(),thresholdLabel:c0.coerce.string().default(""),tone:DC.optional()}),c0.object({template:c0.literal("stats"),stats:c0.array(c0.object({value:c0.coerce.string(),label:c0.coerce.string(),tone:DC.optional()})).min(1)}),c0.object({template:c0.literal("bars"),items:c0.array(c0.object({value:c0.coerce.string(),label:c0.coerce.string(),ratio:c0.coerce.number(),tone:DC.optional()})).min(1)}),c0.object({template:c0.literal("gauges"),gauges:c0.array(c0.object({label:c0.coerce.string(),value:c0.coerce.string(),status:c0.enum(["good","warn","bad"]).catch("warn"),caption:c0.coerce.string().optional(),ratio:c0.coerce.number().optional()})).min(1)}),c0.object({template:c0.literal("checklist"),checks:c0.array(c0.object({label:c0.coerce.string(),status:c0.enum(["pass","fail","warn"]).catch("fail"),value:c0.coerce.string().optional()})).min(1)}),c0.object({template:c0.literal("table"),columns:c0.array(c0.object({label:c0.coerce.string(),align:c0.enum(["left","right"]).optional()})).min(1),rows:c0.array(oe4).min(1),highlightRow:c0.coerce.number().optional()}),c0.object({template:c0.literal("products"),products:c0.array(c0.object({name:c0.coerce.string(),price:c0.coerce.string().optional(),image:c0.coerce.string().optional(),url:c0.coerce.string().optional()})).min(1)}),c0.object({template:c0.literal("list"),entries:c0.array(c0.object({label:c0.coerce.string(),severity:c0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:c0.coerce.number().optional()}),c0.object({template:c0.literal("keywords"),volumeLabel:c0.coerce.string().optional(),keywords:c0.array(c0.object({term:c0.coerce.string(),volume:c0.coerce.string(),position:c0.coerce.number().catch(0)})).min(1)}),c0.object({template:c0.literal("competitor"),metricLabel:c0.coerce.string().optional(),competitors:c0.array(c0.object({name:c0.coerce.string(),value:c0.coerce.string(),tone:DC.optional(),isYou:c0.boolean().optional()})).min(1)}),c0.object({template:c0.literal("scorecard"),rivalLabel:c0.coerce.string().optional(),dimensions:c0.array(c0.object({label:c0.coerce.string(),you:c0.coerce.string(),rival:c0.coerce.string().optional(),rivalName:c0.coerce.string().optional(),tone:DC.optional()})).min(1)})]),RV$=c0.object({...re4,template:ae4})});function VE0($){let Z=[],X=[...$.sections].sort((G,Q)=>G.position-Q.position).map((G)=>{let Q=RV$.safeParse(G.props);if(Q.success)return Q.data;let Y=Q.error.issues[0];return Z.push({section_type:G.section_type,position:G.position,reason:Y?`${Y.path.join(".")||"(root)"}: ${Y.message}`:"contract violation"}),null}).filter((G)=>G!==null);return{deck:{meta:{...$.meta,scores:$.summary?.scores},slides:X},drops:Z}}var I$1=B(()=>{IV$()});import{join as qV$}from"path";async function ee4($){try{let Z=await fetch(`${eQ({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(se4)});if(!Z.ok)return null;let X=await Z.json(),{deck:G}=VE0(X);if(!G.slides.length)return null;let Q=G.slides.find((K)=>K.template.template==="cover"),Y=Q?.template,J=Y&&Y.template==="cover"?Y:void 0;return{brand:G.meta.brand?.trim()||R$1($),score:G.meta.scores?.cover??J?.score?.value,verdict:Q?.annotation?.trim()||Q?.headline?.trim()||void 0}}catch{return null}}function bQ($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function $06($,Z){let X=Eg($),G=Z?.brand?.trim()||R$1(X),Q=AV$(X,128),J=`${(m0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:K,description:W}=TV$({brand:G,domain:X,score:Z?.score,verdict:Z?.verdict}),N=`${J}/og.png`,H=`${G} commerce report by decocms`;return[`<title>${bQ(K)}</title>`,`<meta name="description" content="${bQ(W)}" />`,'<meta name="robots" content="noindex, follow" />','<meta property="og:type" content="website" />','<meta property="og:site_name" content="decocms" />',`<meta property="og:title" content="${bQ(K)}" />`,`<meta property="og:description" content="${bQ(W)}" />`,`<meta property="og:url" content="${bQ(J)}" />`,`<meta property="og:image" content="${bQ(N)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${bQ(H)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${bQ(K)}" />`,`<meta name="twitter:description" content="${bQ(W)}" />`,`<meta name="twitter:image" content="${bQ(N)}" />`,`<meta name="twitter:image:alt" content="${bQ(H)}" />`,`<link rel="canonical" href="${bQ(J)}" />`,`<link rel="icon" href="${bQ(Q)}" sizes="any" />`].join(`
2717
+ Respond with the structured verdict and a short reason.`,nS$;var tS$=B(()=>{k4();Fw();j$1();we4=P$1.object({requiresReview:P$1.boolean().describe("true if the changes should go through pull-request review"),reason:P$1.string().describe("One short sentence explaining the decision (max ~120 chars)")});nS$={requiresReview:!1,reason:""}});function Le4($){if(!$||$.includes(".."))return!1;return De4.test($)}function oS$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!Le4(Z))return null;let{__resolveType:X,...G}=$;return{resolveType:Z,payload:G}}function rS$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var De4;var aS$=B(()=>{De4=/^[\w./@-]+$/});function A$1($){let Z;try{Z=new URL($)}catch{return null}if(!Z.hostname.endsWith(".localhost"))return null;let X=Z.host;return Z.hostname="127.0.0.1",{url:Z.toString(),hostHeader:X}}function sS$($,Z){let X=$?.githubRepo;if(!X?.owner||!X?.name)return null;if(!X.connectionId)return X;if(!Z.includes(X.connectionId))return null;return X}async function eS$($,Z,X,G){if(!G.connectionId)throw new Lg("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let Q=$.organization?.id;if(!Q)throw new Lg(h7);await LG0({ctx:$,connectionId:G.connectionId,organizationId:Q,forceRefresh:!0,onLegacyMintError:(H)=>{let F=H instanceof Error?H.message:h7;throw new Lg(F)}});let{cloneUrl:Y,gitUserName:J,gitUserEmail:K}=await Ay(G.connectionId,G.owner,G.name,$.db,$.vault),W=ME0($),N=await Z.proxyDaemonRequest(X,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{repository:{cloneUrl:Y},identity:{userName:J,userEmail:K}},...W?{operator:W}:{}})});if(!N.ok){let H=await $O(N,Ee4).catch(()=>N.statusText);throw Error(`Failed to refresh sandbox git credentials (${N.status}): ${H}`)}}var Ee4=10485760,Lg;var $V$=B(()=>{eU();w$1();gp();EG0();Lg=class Lg extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function je4($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!ze4.test(Z))throw Error(`Invalid branch name: ${$}`)}function OC($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(Ae4)])}function BC($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}function T$1($,Z){let G=(kE0.get($)??Promise.resolve()).catch(()=>{}).then(Z),Q=G.catch(()=>{});return kE0.set($,Q),Q.finally(()=>{if(kE0.get($)===Q)kE0.delete($)}),G}async function SZ($,Z,X){let G=BC($);if(G instanceof Response)return G;let{claimName:Q,userId:Y,projectRef:J}=$.get("vmClaim"),K=X?.method??"POST",W=null,N=new Headers;if(X?.jsonBody!==void 0)W=X.jsonBody,N.set("content-type","application/json");else if(X?.forwardJsonBody)W=await $.req.text(),N.set("content-type","application/json");let H=X?.signal,F={method:K,headers:N,body:W,...H?{signal:H}:{}},U=async()=>{let w=await G.proxyDaemonRequest(Q,Z,F);if(X?.map404to410&&w.status===404){try{await w.body?.cancel()}catch{}if(await G.adoptLiveClaim?.({userId:Y,projectRef:J},Q))w=await G.proxyDaemonRequest(Q,Z,F);if(w.status===404){try{await w.body?.cancel()}catch{}return new Response(JSON.stringify({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."}),{status:410,headers:{"content-type":"application/json",...vQ}})}}let O=await w.text(),D=X?.redactRepoDirUnlessDesktop&&G.kind!=="user-desktop"?Re4(O):O,L=w.headers.get("content-type")??"application/json";return new Response(D,{status:w.status,headers:{"content-type":L,...vQ}})};try{if(H){let w=U();return w.catch(()=>{}),await Promise.race([w,new Promise((D,L)=>{if(H.aborted)return L(H.reason);H.addEventListener("abort",()=>L(H.reason),{once:!0})})])}return await U()}catch(w){let O=w instanceof Error?w.message:String(w);return $.json({error:`Daemon unreachable: ${O}`},502)}}function Re4($){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 SE0($,Z,X,G="GET",Q){let Y=await $.proxyDaemonRequest(Z,X,{method:G,headers:new Headers,body:null});if(Y.status===404&&Q){try{await Y.body?.cancel()}catch{}if(await $.adoptLiveClaim?.(Q,Z))Y=await $.proxyDaemonRequest(Z,X,{method:G,headers:new Headers,body:null})}if(Y.status===404){try{await Y.body?.cancel()}catch{}throw Error("SANDBOX_GONE")}let J=await Y.text();if(!Y.ok)try{let K=JSON.parse(J);throw Error(K.error??`Daemon error (${Y.status})`)}catch(K){if(K instanceof Error&&K.message!==J)throw K;throw Error(`Daemon error (${Y.status})`)}return JSON.parse(J)}function Ie4($){return GV$.includes($)}var ze4,ZV$=524288,Pe4=65536,Ae4=1e4,XV$=2000,Te4,kE0,vQ,GV$,QV$=()=>{let $=new E1;return $.use("/:virtualMcpId/:branch/*",Te4),$.post("/:virtualMcpId/:branch/write",(Z)=>SZ(Z,"/_sandbox/write",{forwardJsonBody:!0,signal:OC(Z)})),$.post("/:virtualMcpId/:branch/unlink",(Z)=>SZ(Z,"/_sandbox/unlink",{forwardJsonBody:!0,signal:OC(Z)})),$.post("/:virtualMcpId/:branch/mkdir",(Z)=>SZ(Z,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:OC(Z)})),$.post("/:virtualMcpId/:branch/rename",(Z)=>SZ(Z,"/_sandbox/rename",{forwardJsonBody:!0,signal:OC(Z)})),$.post("/:virtualMcpId/:branch/read",(Z)=>SZ(Z,"/_sandbox/read",{forwardJsonBody:!0,signal:OC(Z)})),$.post("/:virtualMcpId/:branch/glob",(Z)=>SZ(Z,"/_sandbox/glob",{forwardJsonBody:!0,signal:OC(Z)})),$.post("/:virtualMcpId/:branch/grep",(Z)=>SZ(Z,"/_sandbox/grep",{forwardJsonBody:!0,signal:OC(Z)})),$.post("/:virtualMcpId/:branch/exec/:script",async(Z)=>{let X=Z.req.param("script");if(!X)return Z.json({error:"missing script name"},400);return SZ(Z,`/_sandbox/exec/${encodeURIComponent(X)}`)}),$.post("/:virtualMcpId/:branch/exec/:script/kill",async(Z)=>{let X=Z.req.param("script");if(!X)return Z.json({error:"missing script name"},400);return SZ(Z,`/_sandbox/exec/${encodeURIComponent(X)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(Z)=>SZ(Z,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDirUnlessDesktop:!0})),$.put("/:virtualMcpId/:branch/config",(Z)=>SZ(Z,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(Z)=>{let X=Z.req.param("step");if(!X||!Ie4(X))return Z.json({error:`step must be one of: ${GV$.join(", ")}`},400);if(X==="start"){let G=Z.get("vmClaim");if(G.runner){let Q=$0(Z.var.studioContext),Y=r90(G.virtualMcpMetadata);try{await DG0({ctx:Z.var.studioContext,runner:G.runner,handle:G.claimName,orgId:Q.id,userId:G.callerUserId,entries:Y})}catch(J){let K=J instanceof Error?J.message:String(J);return Z.json({error:`Failed to push env to daemon: ${K}`},502)}}}return SZ(Z,`/_sandbox/setup/${X}`,{signal:Z.req.raw.signal,map404to410:!0})}),$.get("/:virtualMcpId/:branch/events",(Z)=>{let X=Z.get("vmClaim");if(!X.runner)return VH(Z,async(G)=>{await G.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this studio instance."})})});return uS$(Z,{ctx:Z.var.studioContext,claimName:X.claimName,runner:X.runner,virtualMcpId:X.virtualMcpId,branch:X.branch,userId:X.userId,projectRef:X.projectRef,virtualMcpMetadata:X.virtualMcpMetadata})}),$.get("/:virtualMcpId/:branch/git/status",(Z)=>SZ(Z,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([Z.req.raw.signal,AbortSignal.timeout(XV$)])})),$.post("/:virtualMcpId/:branch/git/status",(Z)=>SZ(Z,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([Z.req.raw.signal,AbortSignal.timeout(XV$)])})),$.post("/:virtualMcpId/:branch/git/diff",(Z)=>SZ(Z,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/git/publish",async(Z)=>{let X=BC(Z);if(X instanceof Response)return X;let{claimName:G,virtualMcpMetadata:Q,connectionIds:Y}=Z.get("vmClaim"),J=Z.var.studioContext;return T$1(G,async()=>{try{await O$1(J,X,G);let K=sS$(Q,Y);if(K)await eS$(J,X,G,K)}catch(K){if(K instanceof Lg)return Z.json({error:K.message},403,vQ);let W=K instanceof Error?K.message:String(K);return Z.json({error:W},502,vQ)}return SZ(Z,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",(Z)=>{let{claimName:X}=Z.get("vmClaim");return T$1(X,()=>SZ(Z,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(Z)=>{let X=BC(Z);if(X instanceof Response)return X;let{claimName:G}=Z.get("vmClaim"),Q=Z.var.studioContext;return T$1(G,async()=>{try{await O$1(Q,X,G)}catch(Y){let J=Y instanceof Error?Y.message:String(Y);return Z.json({error:J},502,vQ)}return SZ(Z,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",H7({maxSize:ZV$,onError:(Z)=>Z.json({error:"Payload too large"},413,vQ)}),async(Z)=>{let X=BC(Z);if(X instanceof Response)return X;let{claimName:G,userId:Q,projectRef:Y}=Z.get("vmClaim"),J=Z.var.studioContext;try{let K=await Z.req.json().catch(()=>({})),W=K.status,N=K.diff,H=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[F,U]=L$1(W)&&H?[W,N]:await Promise.all([SE0(X,G,"/_sandbox/git/status","GET",{userId:Q,projectRef:Y}),SE0(X,G,"/_sandbox/git/diff","GET",{userId:Q,projectRef:Y})]),w=await iS$(J,F,U);return Z.json(w,200,vQ)}catch(K){let W=K instanceof Error?K.message:String(K);if(W==="SANDBOX_GONE")return Z.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,vQ);return Z.json({error:W},502,vQ)}}),$.post("/:virtualMcpId/:branch/git/judge-review",H7({maxSize:ZV$,onError:(Z)=>Z.json({error:"Payload too large"},413,vQ)}),async(Z)=>{let X=BC(Z);if(X instanceof Response)return X;let{claimName:G,userId:Q,projectRef:Y}=Z.get("vmClaim"),J=Z.var.studioContext;try{let K=await Z.req.json().catch(()=>({})),W=K.status,N=K.diff,H=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[F,U]=L$1(W)&&H?[W,N]:await Promise.all([SE0(X,G,"/_sandbox/git/status","GET",{userId:Q,projectRef:Y}),SE0(X,G,"/_sandbox/git/diff","GET",{userId:Q,projectRef:Y})]),w=await pS$(J,F,U,typeof K.language==="string"?K.language:void 0);return Z.json(w,200,vQ)}catch(K){let W=K instanceof Error?K.message:String(K);if(W==="SANDBOX_GONE")return Z.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,vQ);return Z.json({error:W},502,vQ)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(Z)=>{let X=BC(Z);if(X instanceof Response)return X;let{claimName:G}=Z.get("vmClaim"),Q=Z.req.query("path");if(!Q||!Q.startsWith("/")||Q.startsWith("//")||Q.includes("..")||Q.includes("\\"))return Z.json({error:"Path not allowed"},403);let Y;try{Y=await X.getPreviewUrl(G)}catch{return Z.json({error:"Preview not available"},502)}if(!Y)return Z.json({error:"Preview not available"},502);let J=Y.replace(/\/+$/,""),K=A$1(`${J}${Q}`),W;try{W=await fetch(K?.url??`${J}${Q}`,{...K?{headers:{host:K.hostHeader}}:{}})}catch{return Z.json({error:"Preview unreachable"},502)}let N;try{N=await W.text()}catch{return Z.json({error:"Preview unreachable"},502)}return new Response(N,{status:W.status,headers:{"content-type":W.headers.get("content-type")??"application/json"}})}),$.post("/:virtualMcpId/:branch/preview-invoke",H7({maxSize:Pe4,onError:(Z)=>Z.json({error:"Payload too large"},413)}),async(Z)=>{let X=BC(Z);if(X instanceof Response)return X;let{claimName:G}=Z.get("vmClaim"),Q;try{Q=await X.getPreviewUrl(G)}catch{return Z.json({error:"Preview not available"},502)}if(!Q)return Z.json({error:"Preview not available"},502);let Y;try{Y=await Z.req.json()}catch{return Z.json({error:"Invalid JSON body"},400)}if(!Y||typeof Y!=="object"||Array.isArray(Y))return Z.json({error:"Invalid JSON body"},400);let J=oS$(Y);if(!J)return Z.json({error:"Invalid or missing __resolveType"},400);let K=rS$(Q,J.resolveType),W=A$1(K),N;try{N=await fetch(W?.url??K,{method:"POST",headers:{"content-type":"application/json",...W?{host:W.hostHeader}:{}},body:JSON.stringify(J.payload),signal:AbortSignal.timeout(30000)})}catch{return Z.json({error:"Preview unreachable"},502)}let H;try{H=await N.text()}catch{return Z.json({error:"Preview unreachable"},502)}return new Response(H,{status:N.status,headers:{"content-type":N.headers.get("content-type")??"application/json"}})}),$};var YV$=B(()=>{i8();YC();Dg();xS$();HH();gS$();uL();hy();hS$();cS$();fr0();Pn();j$1();tS$();aS$();$V$();ze4=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;Te4=fS$(async($,Z)=>{let X=$.var.studioContext;try{J0(X)}catch{return $.json({error:"Unauthorized"},401)}let G=B1(X);if(!G)return $.json({error:"Unauthorized"},401);let Q;try{Q=$0(X)}catch{return $.json({error:"Organization scope required"},403)}let Y=$.req.param("virtualMcpId"),J=$.req.param("branch");if(!Y||!J)return $.json({error:"virtualMcpId and branch are required"},400);try{je4(J)}catch(w){let O=w instanceof Error?w.message:String(w);return $.json({error:O},400)}let K=await X.storage.virtualMcps.findById(Y);if(!K||K.organization_id!==Q.id)return $.json({error:"Virtual MCP not found"},404);let W=xp({orgId:Q.id,virtualMcpId:Y,branch:J}),N=await hL(X,J,G),H=yS$({userId:N,projectRef:W},J),F=K.metadata??null,U;try{U=(await P3(X,{userId:N,branch:J,virtualMcpMetadata:F})).provider}catch{U=null}if(!U)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:H,callerUserId:G,runner:U,virtualMcpId:Y,branch:J,userId:N,projectRef:W,virtualMcpMetadata:F,connectionIds:K.connections?.map((w)=>w.connection_id)??[]}),Z()});kE0=new Map;vQ={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};GV$=["clone","install","start"]});var JV$=($)=>{let Z=new E1;if(Z.use("*",QC),Z.route("/",mL0()),Z.route("/",Aq$()),Z.route("/",AS$()),Z.route("/",jS$()),Z.route("/",RE0()),Z.route("/tools",SS$()),Z.route("/",qS$()),Z.route("/",QS$({kvStorage:$.kvStorage})),Z.route("/",XS$()),Z.route("/fs",BS$({getConnection:$.getNatsConnection})),Z.route("/sandbox",QV$()),Z.route("/",LS$()),Z.route("/deco-sites",nL0()),Z.route("/sso",GL0()),Z.route("/",IE0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",Bq$()),$.mountDevAssets)Z.route("/dev-assets",pL0({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.route("/",_a1()),Z.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",$.betterAuthProtectedResourceHandler),Z.get("/mcp/.well-known/oauth-protected-resource",$.betterAuthProtectedResourceHandler),Z.route("/mcp",$Z0()),Z.route("/mcp/self",TE0()),Z.route("/mcp",GZ0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var KV$=B(()=>{i8();b01();Dq$();h01();tL0();Mt();_01();GS$();YS$();DS$();Fi();qe0();QZ0();J$1();ES$();PS$();TS$();MS$();W$1();VS$();N$1();ZZ0();YV$()});function Me4($){return $.filter((Z)=>Z.vendors?.alias).map((Z)=>({name:Z.name,title:Z.title,description:Z.description,logo:Z.logo,category:Z.category,vendor:{alias:Z.vendors.alias,url:Z.vendors.url}}))}async function ke4($,Z){let X=await fetch(`${$}/rest/v1/apps?select=name,title,description,logo,category,vendors(alias,url)`,{headers:{apikey:Z,Authorization:`Bearer ${Z}`,Accept:"application/json"},signal:AbortSignal.timeout(qe4)});if(!X.ok){let G=await X.text().catch(()=>X.statusText);throw console.error(`[deco-apps] Supabase error (${X.status}): ${G.slice(0,200)}`),Error(`External service error (${X.status})`)}return await X.json()}var qe4=1e4,Se4=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},WV$=()=>{let $=new E1;return $.use("*",Se4),$.get("/",async(Z)=>{let X=m0(),G=X.decoSupabaseUrl,Q=X.decoSupabaseServiceKey;if(!G||!Q)return Z.json({apps:[]});try{let Y=await ke4(G,Q);return Z.json({apps:Me4(Y)})}catch(Y){return console.error("[deco-apps] GET error:",Y),Z.json({error:"Failed to fetch apps"},502)}}),$};var NV$=B(()=>{i8();k$()});import{z as I1}from"zod";function UW($,Z="invalid_request_error",X=null,G=null){return{error:{message:$,type:Z,param:X,code:G}}}function he4($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let X=$.substring(0,Z),G=$.substring(Z+1);if(!X||!G)return null;return{credentialId:X,modelId:G}}function ue4($,Z,X){try{return JSON.parse($)}catch{throw new UV$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function ce4($){let Z={};for(let X of $)if(X.role==="assistant"&&X.tool_calls)for(let G of X.tool_calls)Z[G.id]=G.function.name;return $.map((X)=>{switch(X.role){case"system":return{role:"system",content:X.content};case"user":if(typeof X.content==="string")return{role:"user",content:X.content};return{role:"user",content:X.content.map((Q)=>{if(Q.type==="text")return{type:"text",text:Q.text};return{type:"image",image:Q.image_url.url}})};case"assistant":if(X.tool_calls&&X.tool_calls.length>0)return{role:"assistant",content:X.tool_calls.map((Q)=>({type:"tool-call",toolCallId:Q.id,toolName:Q.function.name,input:ue4(Q.function.arguments,Q.id,Q.function.name)}))};return{role:"assistant",content:X.content??""};case"tool":let G=Z[X.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:X.tool_call_id,toolName:G,output:{type:"text",value:X.content}}]}}})}function le4($){let Z=$.map((X)=>{let G=X.function.parameters?FQ(X.function.parameters):FQ({type:"object",properties:{}});return[X.function.name,V$({description:X.function.description,inputSchema:G})]});return Object.fromEntries(Z)}function de4($){if(!$)return;return{openai:{response_format:$}}}function me4(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function HV$($,Z,X,G,Q,Y){let J={model:$,messages:Z,tools:X,temperature:G.temperature,maxTokens:G.max_tokens,topP:G.top_p,frequencyPenalty:G.frequency_penalty,presencePenalty:G.presence_penalty,stopSequences:G.stop?Array.isArray(G.stop)?G.stop:[G.stop]:void 0,abortSignal:Y};return Q?{...J,providerOptions:Q}:J}function FV$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var Ve4=256,Ce4,_e4,ve4,be4,fe4,xe4,ye4,ge4,UV$,wV$,OV$;var BV$=B(()=>{k4();i8();Dg();eN();Ce4=I1.object({type:I1.literal("function"),function:I1.object({name:I1.string(),description:I1.string().optional(),parameters:I1.record(I1.string(),I1.unknown()).optional()})}),_e4=I1.object({id:I1.string(),type:I1.literal("function"),function:I1.object({name:I1.string(),arguments:I1.string()})}),ve4=I1.discriminatedUnion("role",[I1.object({role:I1.literal("system"),content:I1.string(),name:I1.string().optional()}),I1.object({role:I1.literal("user"),content:I1.union([I1.string(),I1.array(I1.union([I1.object({type:I1.literal("text"),text:I1.string()}),I1.object({type:I1.literal("image_url"),image_url:I1.object({url:I1.string(),detail:I1.string().optional()})})]))]),name:I1.string().optional()}),I1.object({role:I1.literal("assistant"),content:I1.string().nullable().optional(),name:I1.string().optional(),tool_calls:I1.array(_e4).optional()}),I1.object({role:I1.literal("tool"),content:I1.string(),tool_call_id:I1.string()})]),be4=I1.object({type:I1.literal("text")}),fe4=I1.object({type:I1.literal("json_object")}),xe4=I1.object({type:I1.literal("json_schema"),json_schema:I1.object({name:I1.string(),description:I1.string().optional(),schema:I1.record(I1.string(),I1.unknown()),strict:I1.boolean().optional()})}),ye4=I1.union([be4,fe4,xe4]),ge4=I1.object({model:I1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:I1.array(ve4),stream:I1.boolean().optional().default(!1),temperature:I1.number().min(0).max(2).optional(),max_tokens:I1.number().positive().optional(),top_p:I1.number().min(0).max(1).optional(),frequency_penalty:I1.number().min(-2).max(2).optional(),presence_penalty:I1.number().min(-2).max(2).optional(),stop:I1.union([I1.string(),I1.array(I1.string())]).optional(),tools:I1.array(Ce4).optional(),tool_choice:I1.union([I1.literal("auto"),I1.literal("none"),I1.literal("required"),I1.object({type:I1.literal("function"),function:I1.object({name:I1.string()})})]).optional(),response_format:ye4.optional(),user:I1.string().optional()});UV$=class UV$ extends Error{constructor($){super($);this.name="MessageConversionError"}};wV$=new E1;wV$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(UW("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(UW("Organization context is required. Ensure your API key has organization metadata.","invalid_request_error","organization"),400);if((Z.organization.slug??Z.organization.id)!==X)return $.json(UW("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let G=await $.req.json(),Q=ge4.safeParse(G);if(!Q.success){let L=Q.error.issues[0]??{message:"Invalid request",path:[]};return $.json(UW(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let Y=Q.data,J=he4(Y.model);if(!J)return $.json(UW("Invalid model format. Expected 'model_id' or 'credential_id:model_id' (e.g., 'claude-sonnet-4-6' or 'key_abc123:claude-sonnet-4-6')","invalid_request_error","model"),400);let{credentialId:K}=J,{modelId:W}=J;if(!K){let E=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((z)=>kB(z.providerId));if(!E)return $.json(UW("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);K=E.id}let N;try{N=await Z.aiProviders.activate(K,Z.organization.id)}catch{return $.json(UW(`AI provider credential not found or inaccessible: ${K}`,"invalid_request_error","model"),404)}let H=N.aiSdk.languageModel(W),F=ce4(Y.messages),U=Y.tools?le4(Y.tools):void 0,w=de4(Y.response_format),O=me4(),D=Math.floor(Date.now()/1000);if(Y.stream)return VH($,async(L)=>{let E=HV$(H,F,U,Y,w,$.req.raw.signal);try{let z=Ew(E),j=!1,A=0,P="",q=async()=>{if(P.length===0)return;let C=P;P="",await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Y.model,choices:[{index:0,delta:{content:C},finish_reason:null}]})})};for await(let C of z.fullStream){if(!j&&(C.type==="text-delta"||C.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Y.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),j=!0;if(C.type==="text-delta"){if(P+=C.text,P.length>=Ve4)await q()}else if(C.type==="tool-call"){await q();let k=A++;await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Y.model,choices:[{index:0,delta:{tool_calls:[{index:k,id:C.toolCallId,type:"function",function:{name:C.toolName,arguments:JSON.stringify(C.input)}}]},finish_reason:null}]})})}else if(C.type==="finish")await q(),await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Y.model,choices:[{index:0,delta:{},finish_reason:FV$(C.finishReason)}],usage:C.totalUsage?{prompt_tokens:C.totalUsage.inputTokens??0,completion_tokens:C.totalUsage.outputTokens??0,total_tokens:C.totalUsage.totalTokens??0}:void 0})})}await q(),await L.writeSSE({data:"[DONE]"})}catch(z){let j=z;console.error("[openai-compat:stream] Error:",j.message),await L.writeSSE({data:JSON.stringify({error:{message:j.message,type:"server_error"}})})}});else{let L=HV$(H,F,U,Y,w,$.req.raw.signal),E=await Dw(L),z={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)z.tool_calls=E.toolCalls.map((j)=>({id:j.toolCallId,type:"function",function:{name:j.toolName,arguments:JSON.stringify("input"in j?j.input:{})}})),z.content=null;return $.json({id:O,object:"chat.completion",created:D,model:Y.model,choices:[{index:0,message:z,finish_reason:FV$(E.finishReason)}],usage:{prompt_tokens:E.usage?.inputTokens??0,completion_tokens:E.usage?.outputTokens??0,total_tokens:E.usage?.totalTokens??0}})}}catch(G){let Q=G;if(Q.name==="AbortError")return $.json(UW("Request aborted","invalid_request_error"),400);if(Q.name==="MessageConversionError")return $.json(UW(Q.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Q.message,Q.stack),$.json(UW(Q.message,"server_error"),500)}});OV$=wV$});var LV$;var DV$=B(()=>{LV$={name:"decocms",version:"4.164.3",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function pe4(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??ne4}}var EV$,ne4="https://ph.studio.decocms.com",zV$;var jV$=B(()=>{i8();BC0();eV();OZ();k$();Pe0();DV$();EV$=new E1;EV$.get("/",($)=>{let Z={version:LV$.version,theme:WM1(),...xB().logo&&{logo:xB().logo},...YW()&&{internalUrl:q00()},...m0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!m0().firecrawlApiKey,auth:TT$(),posthog:pe4(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!YW()&&m0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});zV$=EV$});function Eg($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function R$1($){return(Eg($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function AV$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Eg($))}&sz=${Z}`}function PV$($,Z){let X=$.trim();if(X.length<=Z)return X;let G=X.slice(0,Z-1),Q=G.lastIndexOf(" ");return`${(Q>Z*0.6?G.slice(0,Q):G).trimEnd()}\u2026`}function TV$($){let{brand:Z,domain:X,score:G,verdict:Q}=$,Y=typeof G==="number"?`${Z} commerce report \u2014 ${Math.round(G)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,J=`See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,K=Q?.trim()?PV$(`${Q.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):PV$(`How does ${X} really perform? ${J}`,200);return{title:Y,description:K}}import{z as c0}from"zod";var DC,te4,oe4,re4,ae4,RV$;var IV$=B(()=>{DC=c0.enum(["good","bad","neutral"]),te4=c0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},c0.object({kind:c0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:c0.coerce.string().optional(),tone:DC.optional(),muted:c0.boolean().optional(),delta:c0.coerce.string().optional(),deltaDir:c0.enum(["up","down","neutral"]).optional(),points:c0.array(c0.coerce.number()).optional(),label:c0.coerce.string().optional()}).transform(($)=>{if($.kind==="badge"&&$.label==null)$.label=$.value??"";if($.kind==="score"){let Z=Number($.value);if(Number.isNaN(Z))return{...$,kind:"text"}}return $})),oe4=c0.preprocess(($)=>{let Z=$;if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&Array.isArray(Z.cells))Z=Z.cells;if(Array.isArray(Z)&&Z.length===1&&Array.isArray(Z[0]))Z=Z[0];if(Array.isArray(Z))return Z;if(Z&&typeof Z==="object")return Object.values(Z);return Z},c0.array(te4)),re4={key:c0.coerce.string(),title:c0.coerce.string(),eyebrow:c0.coerce.string().optional(),headline:c0.coerce.string(),annotation:c0.coerce.string().optional(),methodology:c0.coerce.string().optional(),sources:c0.array(c0.object({name:c0.coerce.string(),logoUrl:c0.coerce.string()})).optional()},ae4=c0.discriminatedUnion("template",[c0.object({template:c0.literal("cover"),score:c0.object({value:c0.coerce.number(),max:c0.coerce.number().optional(),grade:c0.coerce.string().optional(),label:c0.coerce.string().optional()}).optional(),brandImage:c0.coerce.string().optional(),screenshot:c0.coerce.string().optional(),mobileScreenshot:c0.coerce.string().optional()}),c0.object({template:c0.literal("cta"),ctaUrl:c0.coerce.string().optional(),ctaLabel:c0.coerce.string().optional(),bullets:c0.array(c0.coerce.string()).optional()}),c0.object({template:c0.literal("series"),points:c0.array(c0.coerce.number()).min(2),xLabels:c0.array(c0.coerce.string()).min(1),unit:c0.coerce.string().optional(),callout:c0.object({index:c0.coerce.number(),value:c0.coerce.string(),tone:DC.optional()})}),c0.object({template:c0.literal("threshold"),value:c0.coerce.string().default(""),metricLabel:c0.coerce.string().optional(),ratio:c0.coerce.number(),thresholdRatio:c0.coerce.number().optional(),thresholdLabel:c0.coerce.string().default(""),tone:DC.optional()}),c0.object({template:c0.literal("stats"),stats:c0.array(c0.object({value:c0.coerce.string(),label:c0.coerce.string(),tone:DC.optional()})).min(1)}),c0.object({template:c0.literal("bars"),items:c0.array(c0.object({value:c0.coerce.string(),label:c0.coerce.string(),ratio:c0.coerce.number(),tone:DC.optional()})).min(1)}),c0.object({template:c0.literal("gauges"),gauges:c0.array(c0.object({label:c0.coerce.string(),value:c0.coerce.string(),status:c0.enum(["good","warn","bad"]).catch("warn"),caption:c0.coerce.string().optional(),ratio:c0.coerce.number().optional()})).min(1)}),c0.object({template:c0.literal("checklist"),checks:c0.array(c0.object({label:c0.coerce.string(),status:c0.enum(["pass","fail","warn"]).catch("fail"),value:c0.coerce.string().optional()})).min(1)}),c0.object({template:c0.literal("table"),columns:c0.array(c0.object({label:c0.coerce.string(),align:c0.enum(["left","right"]).optional()})).min(1),rows:c0.array(oe4).min(1),highlightRow:c0.coerce.number().optional()}),c0.object({template:c0.literal("products"),products:c0.array(c0.object({name:c0.coerce.string(),price:c0.coerce.string().optional(),image:c0.coerce.string().optional(),url:c0.coerce.string().optional()})).min(1)}),c0.object({template:c0.literal("list"),entries:c0.array(c0.object({label:c0.coerce.string(),severity:c0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:c0.coerce.number().optional()}),c0.object({template:c0.literal("keywords"),volumeLabel:c0.coerce.string().optional(),keywords:c0.array(c0.object({term:c0.coerce.string(),volume:c0.coerce.string(),position:c0.coerce.number().catch(0)})).min(1)}),c0.object({template:c0.literal("competitor"),metricLabel:c0.coerce.string().optional(),competitors:c0.array(c0.object({name:c0.coerce.string(),value:c0.coerce.string(),tone:DC.optional(),isYou:c0.boolean().optional()})).min(1)}),c0.object({template:c0.literal("scorecard"),rivalLabel:c0.coerce.string().optional(),dimensions:c0.array(c0.object({label:c0.coerce.string(),you:c0.coerce.string(),rival:c0.coerce.string().optional(),rivalName:c0.coerce.string().optional(),tone:DC.optional()})).min(1)})]),RV$=c0.object({...re4,template:ae4})});function VE0($){let Z=[],X=[...$.sections].sort((G,Q)=>G.position-Q.position).map((G)=>{let Q=RV$.safeParse(G.props);if(Q.success)return Q.data;let Y=Q.error.issues[0];return Z.push({section_type:G.section_type,position:G.position,reason:Y?`${Y.path.join(".")||"(root)"}: ${Y.message}`:"contract violation"}),null}).filter((G)=>G!==null);return{deck:{meta:{...$.meta,scores:$.summary?.scores},slides:X},drops:Z}}var I$1=B(()=>{IV$()});import{join as qV$}from"path";async function ee4($){try{let Z=await fetch(`${eQ({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(se4)});if(!Z.ok)return null;let X=await Z.json(),{deck:G}=VE0(X);if(!G.slides.length)return null;let Q=G.slides.find((K)=>K.template.template==="cover"),Y=Q?.template,J=Y&&Y.template==="cover"?Y:void 0;return{brand:G.meta.brand?.trim()||R$1($),score:G.meta.scores?.cover??J?.score?.value,verdict:Q?.annotation?.trim()||Q?.headline?.trim()||void 0}}catch{return null}}function bQ($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function $06($,Z){let X=Eg($),G=Z?.brand?.trim()||R$1(X),Q=AV$(X,128),J=`${(m0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:K,description:W}=TV$({brand:G,domain:X,score:Z?.score,verdict:Z?.verdict}),N=`${J}/og.png`,H=`${G} commerce report by decocms`;return[`<title>${bQ(K)}</title>`,`<meta name="description" content="${bQ(W)}" />`,'<meta name="robots" content="noindex, follow" />','<meta property="og:type" content="website" />','<meta property="og:site_name" content="decocms" />',`<meta property="og:title" content="${bQ(K)}" />`,`<meta property="og:description" content="${bQ(W)}" />`,`<meta property="og:url" content="${bQ(J)}" />`,`<meta property="og:image" content="${bQ(N)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${bQ(H)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${bQ(K)}" />`,`<meta name="twitter:description" content="${bQ(W)}" />`,`<meta name="twitter:image" content="${bQ(N)}" />`,`<meta name="twitter:image:alt" content="${bQ(H)}" />`,`<link rel="canonical" href="${bQ(J)}" />`,`<link rel="icon" href="${bQ(Q)}" sizes="any" />`].join(`
2718
2718
  `)}function Z06($,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}
2719
- </head>`)}function MV$($){let Z=new E1;return Z.get("/:domain/og.png",async(X)=>{let G=Eg(X.req.param("domain")),Q=async()=>{let Y=$?Bun.file(qV$($,"report-og-fallback.png")):null;if(!Y||!await Y.exists())return X.notFound();return X.body(new Uint8Array(await Y.arrayBuffer()),200,{"Content-Type":"image/png","Cache-Control":"public, max-age=0, s-maxage=3600"})};try{let Y=await fetch(`${eQ({})}/api/v2/public/diagnostics/${encodeURIComponent(G)}/og.png`,{signal:AbortSignal.timeout(X06)}),J=Y.headers.get("content-type")??"";if(!Y.ok||!J.startsWith("image/")||!Y.body)return Q();return X.body(Y.body,200,{"Content-Type":J,"Cache-Control":"public, max-age=0, s-maxage=86400"})}catch{return Q()}}),Z.get("/:domain",async(X)=>{let G=X.req.param("domain"),Q=$?qV$($,"index.html"):null,Y=Q?Bun.file(Q):null;if(!Y||!await Y.exists())return X.notFound();let J=await Y.text();try{let K=await ee4(Eg(G)),W=$06(G,K);return X.html(Z06(J,W),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return X.html(J)}}),Z}var se4=2500,X06=1e4;var kV$=B(()=>{i8();I$1();SF();k$()});function $o($,Z){return fetch(`${eQ({})}${$}`,Z)}async function G06($,Z,X){let G=new URLSearchParams;if(Z)G.set("pw",Z);if(X)G.set("lang",X);let Q=G.toString()?`?${G.toString()}`:"",Y=await $o(`/api/v2/public/diagnostics/${encodeURIComponent($)}${Q}`,{headers:{Accept:"application/json"}});if(Y.status===404)return{status:"not_found",deck:null,scanned_at:null,drops:[]};if(!Y.ok)throw Error(`report read HTTP ${Y.status}`);let J=await Y.json(),{deck:K,drops:W}=VE0(J);return{status:K.slides.length?"ready":"empty",deck:K,scanned_at:J.scanned_at,drops:W}}var Q06,LC,SV$;var VV$=B(()=>{i8();AY();SF();I$1();Q06=new Set(["complete","errored","terminated","unknown"]),LC=new E1;LC.use("*",async($,Z)=>{let X=await B8.api.getSession({headers:$.req.raw.headers});if(!X?.user?.id)return $.json({error:"Authentication required"},401,{"Cache-Control":"private, no-store",Vary:"Cookie"});$.set("reportUser",{email:X.user.email}),await Z(),$.header("Cache-Control","private, no-store"),$.header("Vary","Cookie");return});LC.get("/site/:domain",async($)=>{let Z=$.req.param("domain").trim();if(!Z)return $.json({error:"domain is required"},400);let X=$.req.query("key")?.trim()||void 0,G=$.req.query("lang")?.trim()||void 0;try{let Q=await G06(Z,X,G);return $.header("Cache-Control","private, no-store"),$.json(Q)}catch{return $.json({error:"report read failed"},502)}});LC.post("/run",async($)=>{let Z;try{Z=await $.req.json()}catch{return $.json({error:"invalid JSON"},400)}let X=typeof Z.domain==="string"?Z.domain.trim():"";if(!X)return $.json({error:"domain is required"},400);let G=$.get("reportUser").email,Q=typeof Z.distinctId==="string"&&Z.distinctId.trim()&&Z.distinctId.length<=200?Z.distinctId.trim():void 0;try{let Y=await $o("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${VB({})}`},body:JSON.stringify({url:X,email:G,distinct_id:Q})});if(!Y.ok)return $.json({error:`run HTTP ${Y.status}`},502);let J=await Y.json(),K=J.blocked?{state:"blocked"}:J.status==="fresh"?{state:"fresh"}:J.mode==="sync"?{state:"sync"}:{state:"running",id:J.id??null};return $.json(K)}catch{return $.json({error:"run failed"},502)}});LC.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let X=await $o(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${VB({})}`}});if(!X.ok)return $.json({error:`status HTTP ${X.status}`},502);let Q=(await X.json()).status??"unknown",Y={done:Q06.has(Q),status:Q};return $.json(Y)}catch{return $.json({error:"status failed"},502)}});LC.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let X=await $o(`/api/v2/public/link-tokens/${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(X.status===404)return $.json(null);if(!X.ok)return $.json({error:`link token HTTP ${X.status}`},502);return $.json(await X.json())}catch{return $.json({error:"link token resolve failed"},502)}});LC.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let X=await $o(`/api/v2/public/suggest?q=${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(!X.ok)return $.json({suggestions:[]});let G=await X.json();return $.json({suggestions:Array.isArray(G.suggestions)?G.suggestions:[]})}catch{return $.json({suggestions:[]})}});SV$=LC});import{createHmac as Y06,timingSafeEqual as J06}from"crypto";function CV$($,Z,X,G=Date.now()){if(!Z||!X)return!1;let Q,Y=[];for(let N of Z.split(",")){let H=N.indexOf("=");if(H<=0)continue;let F=N.slice(0,H).trim(),U=N.slice(H+1).trim();if(F==="t")Q=U;else if(F==="v1")Y.push(U)}if(!Q||Y.length===0)return!1;let J=Number(Q);if(!Number.isFinite(J)||Math.abs(G/1000-J)>K06)return!1;let K=Y06("sha256",X).update(`${Q}.${$}`).digest("hex"),W=Buffer.from(K,"hex");return Y.some((N)=>{let H=Buffer.from(N,"hex");return W.length===H.length&&J06(W,H)})}function _V$($){let Z;try{Z=JSON.parse($)}catch{return null}let X=mY(Z),G=mY(mY(X?.data)?.object);if(!X||typeof X.type!=="string"||!G)return null;return{id:dY(X.id),type:X.type,created:typeof X.created==="number"?X.created:void 0,livemode:typeof X.livemode==="boolean"?X.livemode:void 0,data:{object:G}}}function W06($){switch($){case"active":case"trialing":return"active";case"past_due":return"past_due";default:return"canceled"}}function dY($){return typeof $==="string"?$:void 0}function mY($){return typeof $==="object"&&$!==null?$:void 0}function CE0($){return typeof $==="number"?new Date($*1000):null}function k$1($){return dY($)??dY(mY($)?.id)}function N06($){return k$1($.subscription)??dY(mY(mY($.parent)?.subscription_details)?.subscription)}function H06($){let Z=CE0($.current_period_end);if(Z)return Z;let X=mY($.items)?.data;if(!Array.isArray(X))return null;let G=0;for(let Q of X){let Y=mY(Q)?.current_period_end;if(typeof Y==="number"&&Y>G)G=Y}return G>0?new Date(G*1000):null}function q$1($,Z){let X=CE0($.created);return!!X&&!!Z.lastStripeEventAt&&X<Z.lastStripeEventAt}function M$1($,Z){let X=CE0($.created);if(!X)return;return Z.lastStripeEventAt&&Z.lastStripeEventAt>X?void 0:X}async function F06($,Z){let X=Z.data.object;switch(Z.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":{let G=dY(mY(X.metadata)?.orgId);if(!G)return{handled:!1,reason:"no orgId"};if(dY(mY(X.metadata)?.kind)==="topup"){if(X.mode!=="payment")return{handled:!1,reason:"topup with wrong mode"};if(dY(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let K=dY(X.id);if(!K)return console.error("stripe webhook: topup session without id",{eventId:Z.id,organizationId:G}),{handled:!1,reason:"topup session without id"};let W=Number(mY(X.metadata)?.creditCents);if(!Number.isInteger(W)||W<=0)return console.error("stripe webhook: paid topup with bad metadata \u2014 credit NOT applied",{eventId:Z.id,organizationId:G,creditCents:mY(X.metadata)?.creditCents}),{handled:!1,reason:"bad topup metadata"};return{handled:!0,organizationId:G,topUp:{creditCents:W,referenceId:`stripe-topup:${K}`}}}if(X.mode!=="subscription")return{handled:!1,reason:"not a subscription checkout"};if(dY(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let Q=await $.getBilling(G);if(!Q)return{handled:!1,reason:"unknown org"};if(Q.legacy||Q.billingMode!=="self_serve")return console.error("stripe webhook: refused checkout bind",{organizationId:G,eventId:Z.id,legacy:Q.legacy,billingMode:Q.billingMode}),{handled:!1,reason:"org is not self-serve"};let Y=k$1(X.subscription);if(Q.stripeSubscriptionId&&Y&&Q.stripeSubscriptionId!==Y)return console.error("stripe webhook: refused checkout rebind",{organizationId:G,eventId:Z.id}),{handled:!1,reason:"org already bound to another subscription",orphanSubscriptionId:Y};if(q$1(Z,Q))return{handled:!1,reason:"stale event"};let J=`stripe-checkout:${dY(X.id)??crypto.randomUUID()}`;return await $.updateStripeState(G,{stripeCustomerId:k$1(X.customer),stripeSubscriptionId:Y,status:"active",benefitsReferenceId:J,lastStripeEventAt:M$1(Z,Q)}),{handled:!0,organizationId:G,benefitsReferenceId:J}}case"customer.subscription.updated":case"customer.subscription.deleted":{let G=dY(X.id);if(!G)return{handled:!1,reason:"no sub id"};let Q=await $.getBillingByStripeSubscriptionId(G);if(!Q)return{handled:!1,reason:"unknown subscription"};let Y=Z.type==="customer.subscription.deleted";if(!Y&&q$1(Z,Q))return{handled:!1,reason:"stale event"};let J=Y?"canceled":W06(X.status),K=H06(X),W=`stripe-sub:${G}:${J}:${K?.getTime()??0}`;return await $.updateStripeState(Q.organizationId,{status:J,currentPeriodEnd:K,...Y&&{stripeSubscriptionId:null},benefitsReferenceId:W,lastStripeEventAt:M$1(Z,Q)}),{handled:!0,organizationId:Q.organizationId,benefitsReferenceId:W}}case"invoice.paid":{let G=N06(X);if(!G)return{handled:!1,reason:"no sub id"};let Q=await $.getBillingByStripeSubscriptionId(G);if(!Q)return{handled:!1,reason:"unknown subscription"};if(q$1(Z,Q))return{handled:!1,reason:"stale event"};let Y=`stripe-invoice:${dY(X.id)??crypto.randomUUID()}`;return await $.updateStripeState(Q.organizationId,{status:"active",currentPeriodEnd:CE0(X.period_end),benefitsReferenceId:Y,lastStripeEventAt:M$1(Z,Q)}),{handled:!0,organizationId:Q.organizationId,benefitsReferenceId:Y}}default:return{handled:!1,reason:`unhandled event ${Z.type}`}}}async function w06($,Z){let[X,G]=await Promise.all([$.getBilling(Z),$.listPaidSeatUserIds(Z)]);if(!Gv(X))return;if(await T0$({subscriptionId:X.stripeSubscriptionId,targetQuantity:G.length}))console.error("stripe webhook: reconciled diverged seat quantity",{organizationId:Z,targetQuantity:G.length})}async function vV$($){let Z=new rW(C8().db),X=await F06(Z,$);if(X.handled&&X.topUp)await aI1({organizationId:X.organizationId,amountCents:X.topUp.creditCents,referenceId:X.topUp.referenceId});if(X.handled&&X.benefitsReferenceId)try{await XN(X.organizationId,X.benefitsReferenceId,"apply")}catch(G){console.error("Failed to enqueue benefit sync (sweep covers):",G)}if(X.handled&&U06.has($.type))try{await w06(Z,X.organizationId)}catch(G){console.error("Failed to reconcile seat quantity (next cycle):",G)}if(!X.handled&&X.orphanSubscriptionId)try{await A0$(X.orphanSubscriptionId),console.error("stripe webhook: canceled orphan subscription",{subscriptionId:X.orphanSubscriptionId,eventId:$.id})}catch(G){if(!(G instanceof LG&&(G.status===400||G.status===404)))throw G}return X}var K06=300,U06;var bV$=B(()=>{sG();n_();Xx();ne();Qv();U06=new Set(["checkout.session.completed","checkout.session.async_payment_succeeded","invoice.paid"])});var O06=1048576,S$1;var fV$=B(()=>{i8();YC();k$();bV$();S$1=new E1;S$1.post("/webhook",H7({maxSize:O06,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=m0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let X=await $.req.text();if(!CV$(X,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let Q=_V$(X);if(!Q)return $.json({error:"invalid payload"},400);let Y=await vV$(Q);return console.log("stripe webhook",{eventId:Q.id,type:Q.type,livemode:Q.livemode,...Y}),$.json({received:!0})})});function xV$($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var yV$,B06,D06,gV$;var hV$=B(()=>{i8();LJ();iy();Jv();yV$=new E1,B06=["range","if-none-match","if-modified-since"],D06=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];yV$.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),X=Z.organization?.id;if(!Z.auth?.user?.id){if(ey($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new G$(401,{message:"Authentication required"})}if(!X)throw new G$(401,{message:"Organization context required"});let G=$.req.path.replace(/^.*\/files\//,"");if(!G)throw new G$(400,{message:"Missing file key"});let Q=await zt(G,Z);if(!Q)throw new G$(503,{message:"Object storage not configured"});if(Q.startsWith("data:")&&DJ()){let W=Q.match(/^data:([^;]+);base64,(.+)$/s);if(!W)throw new G$(500,{message:"Invalid data URL from storage"});let[,N,H]=W,F=Buffer.from(H,"base64"),U=new Headers({"Content-Type":N,"Cache-Control":"private, max-age=86400"});return xV$(U,N),new Response(F,{status:200,headers:U})}let Y=new Headers;for(let W of B06){let N=$.req.header(W);if(N)Y.set(W,N)}let J=await fetch(Q,{headers:Y});if(J.status===403||J.status===404)throw new G$(404,{message:"File not found"});if(!J.ok&&J.status!==304&&J.status!==416)throw console.error(`[files] upstream storage error ${J.status} for key:`,G),new G$(502,{message:"Upstream storage error"});let K=new Headers;for(let W of D06){let N=J.headers.get(W);if(N)K.set(W,N)}return K.set("Cache-Control","private, max-age=86400"),xV$(K,K.get("content-type")??""),new Response(J.body,{status:J.status,headers:K})});gV$=yV$});var Zo=V((EC)=>{var L06=EC&&EC.__createBinding||(Object.create?function($,Z,X,G){if(G===void 0)G=X;var Q=Object.getOwnPropertyDescriptor(Z,X);if(!Q||("get"in Q?!Z.__esModule:Q.writable||Q.configurable))Q={enumerable:!0,get:function(){return Z[X]}};Object.defineProperty($,G,Q)}:function($,Z,X,G){if(G===void 0)G=X;$[G]=Z[X]}),E06=EC&&EC.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))L06(Z,$,X)};Object.defineProperty(EC,"__esModule",{value:!0});E06(dG(),EC)});var lV$=V((uV$)=>{Object.defineProperty(uV$,"__esModule",{value:!0});uV$.version=void 0;uV$.version="3.4.0"});var iV$=V((wW)=>{var z06=wW&&wW.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(wW,"__esModule",{value:!0});wW.NodeTransport=wW.VERSION=void 0;wW.nodeResolveHost=I06;var x6=Zo(),j06=j0("net"),V$1=j0("tls"),P06=j0("path"),dV$=j0("fs"),A06=z06(j0("dns")),T06=lV$();wW.VERSION=T06.version;var R06="nats.js";class mV${socket;version;lang;yields=[];signal=(0,x6.deferred)();closedNotification=(0,x6.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=R06,this.version=wW.VERSION}async connect($,Z){this.tlsName=$.tlsName,this.options=Z;let{tls:X}=this.options,{handshakeFirst:G}=X||{};try{if(G===!0)this.socket=await this.tlsFirst($);else this.socket=await this.dial($);if(this.done)this.socket?.destroy();let Q=await this.peekInfo();(0,x6.checkOptions)(Q,Z);let{tls_required:Y,tls_available:J}=Q,K=J===!0&&Z.tls!==null;if(!G&&(Y||K))this.socket=await this.startTLS();if(this.done)this.socket?.destroy();if(Y&&this.socket.encrypted!==!0)throw x6.errors.InvalidArgumentError.format("tls","is not available on this server");return this.connected=!0,this.setupHandlers(),this.signal.resolve(),Promise.resolve()}catch(Q){let Y=Q;if(!Y)Y=new x6.errors.ConnectionError("error connecting - node provided an undefined error");let{code:J}=Y,K=J==="ECONNREFUSED"?new x6.errors.ConnectionError("connection refused",{cause:Y}):Y;throw this.socket?.destroy(),K}}dial($){let Z=(0,x6.deferred)(),X,G=(0,j06.createConnection)($.port,$.hostname,()=>{Z.resolve(G),G.removeAllListeners()});return G.on("error",(Q)=>{X=Q}),G.on("close",()=>{G.removeAllListeners(),Z.reject(X)}),G.setNoDelay(!0),Z}get isClosed(){return this.done}close($){return this._closed($,!1)}peekInfo(){let $=(0,x6.deferred)(),Z;return this.socket.on("data",(X)=>{this.yields.push(X);let G=x6.DataBuffer.concat(...this.yields),Q=(0,x6.extractProtocolMessage)(G);if(Q!=="")try{let Y=x6.INFO.exec(Q);if(!Y)throw Error("unexpected response from server");let J=JSON.parse(Y[1]);$.resolve(J)}catch(Y){$.reject(Y)}finally{this.socket.removeAllListeners()}}),this.socket.on("error",(X)=>{Z=X}),this.socket.on("close",()=>{this.socket.removeAllListeners(),$.reject(Z)}),$}loadFile($){if(!$)return Promise.resolve();let Z=(0,x6.deferred)();try{if($=(0,P06.resolve)($),!(0,dV$.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,dV$.readFile)($,(X,G)=>{if(X)return Z.reject(X);Z.resolve(G)})}catch(X){Z.reject(X)}return Z}async loadClientCerts(){let $={},{certFile:Z,cert:X,caFile:G,ca:Q,keyFile:Y,key:J}=this.options.tls;try{if(Z){let K=await this.loadFile(Z);if(K)$.cert=K}else if(X)$.cert=X;if(Y){let K=await this.loadFile(Y);if(K)$.key=K}else if(J)$.key=J;if(G){let K=await this.loadFile(G);if(K)$.ca=[K]}else if(Q)$.ca=Q;return Promise.resolve($)}catch(K){return Promise.reject(K)}}async tlsFirst($){let Z,X={servername:this.tlsName,rejectUnauthorized:!0};if(this.socket)X.socket=this.socket;if(typeof this.options.tls==="object")try{let Q=await this.loadClientCerts()||{};X=(0,x6.extend)(X,this.options.tls,Q)}catch(Q){return Promise.reject(new x6.errors.ConnectionError(Q.message,{cause:Q}))}let G=(0,x6.deferred)();try{let Q=(0,V$1.connect)($.port,$.hostname,X,()=>{Q.removeAllListeners(),G.resolve(Q)});Q.on("error",(Y)=>{Z=Y}),Q.on("secureConnect",()=>{if(X.rejectUnauthorized===!1)return;if(!Q.authorized)throw Q.authorizationError}),Q.on("close",()=>{G.reject(Z),Q.removeAllListeners()}),Q.setNoDelay(!0)}catch(Q){G.reject(new x6.errors.ConnectionError(Q.message,{cause:Q}))}return G}async startTLS(){let $,Z={socket:this.socket,servername:this.tlsName,rejectUnauthorized:!0};if(typeof this.options.tls==="object")try{let G=await this.loadClientCerts()||{};Z=(0,x6.extend)(Z,this.options.tls,G)}catch(G){return Promise.reject(new x6.errors.ConnectionError(G.message,{cause:G}))}let X=(0,x6.deferred)();try{let G=(0,V$1.connect)(Z,()=>{G.removeAllListeners(),X.resolve(G)});G.on("error",(Q)=>{$=Q}),G.on("secureConnect",()=>{if(Z.rejectUnauthorized===!1)return;if(!G.authorized)throw G.authorizationError}),G.on("close",()=>{X.reject($),G.removeAllListeners()})}catch(G){X.reject(new x6.errors.ConnectionError(G.message,{cause:G}))}return X}setupHandlers(){let $;this.socket.on("data",(Z)=>{return this.yields.push(Z),this.signal.resolve()}),this.socket.on("error",(Z)=>{$=Z}),this.socket.on("end",()=>{if(this.socket?.destroyed)return;this.socket?.write(new Uint8Array(0),()=>{this.socket?.end()})}),this.socket.on("close",()=>{this._closed($,!1)})}[Symbol.asyncIterator](){return this.iterate()}async*iterate(){while(!0){if(this.yields.length===0)await this.signal;let $=this.yields;this.yields=[];for(let Z=0;Z<$.length;Z++){if(this.options.debug)console.info(`> ${(0,x6.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,x6.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 V$1.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,x6.render)($)}`);let Z=(0,x6.deferred)();try{this.socket.write($,(X)=>{if(X){if(this.options.debug)console.error(`!!! ${(0,x6.render)($)}: ${X}`);return Z.reject(X)}return Z.resolve()})}catch(X){if(this.options.debug)console.error(`!!! ${(0,x6.render)($)}: ${X}`);Z.reject(X)}return Z}send($){this._send($).catch((X)=>{})}async _closed($,Z=!0){if(!this.connected)return;if(this.done){this.socket?.destroy();return}if(this.closeError=$,!$&&this.socket&&Z)try{await this._send(new TextEncoder().encode(""))}catch(X){if(this.options.debug)console.log("transport close terminated with an error",X)}try{if(this.socket)this.socket.removeAllListeners(),this.socket?.destroy(),this.socket=void 0}catch(X){console.log(X)}this.done=!0,this.closedNotification.resolve(this.closeError)}closed(){return this.closedNotification}}wW.NodeTransport=mV$;function I06($){let Z=(0,x6.deferred)();return A06.default.lookup($,{all:!0},(X,G)=>{if(X){Z.reject(X);return}let Q=[];for(let Y of G)Q.push(Y.address);if(Q.length===0)Q.push($);Z.resolve(Q)}),Z}});var rV$=V((oV$)=>{Object.defineProperty(oV$,"__esModule",{value:!0});oV$.connect=q06;var nV$=iV$(),pV$=Zo(),tV$=Zo();function q06($={}){if((0,tV$.hasWsProtocol)($))return Promise.reject(tV$.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,pV$.setTransportFactory)({factory:()=>{return new nV$.NodeTransport},dnsResolveFn:nV$.nodeResolveHost}),pV$.NatsConnectionImpl.connect($)}});var aV$=V((CH)=>{var k06=CH&&CH.__createBinding||(Object.create?function($,Z,X,G){if(G===void 0)G=X;var Q=Object.getOwnPropertyDescriptor(Z,X);if(!Q||("get"in Q?!Z.__esModule:Q.writable||Q.configurable))Q={enumerable:!0,get:function(){return Z[X]}};Object.defineProperty($,G,Q)}:function($,Z,X,G){if(G===void 0)G=X;$[G]=Z[X]}),S06=CH&&CH.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))k06(Z,$,X)};Object.defineProperty(CH,"__esModule",{value:!0});CH.connect=void 0;var V06=rV$();Object.defineProperty(CH,"connect",{enumerable:!0,get:function(){return V06.connect}});S06(Zo(),CH)});function ZC$($){let Z=$?.connectFn??b06,X=null,G=null,Q=!1,Y=!1,J=!1,K=[];function W(){return X!==null&&!X.isClosed()&&!X.isDraining()&&!J}function N(){console.log(`[NatsProvider] fireReady: ${K.length} callbacks`);for(let U of K)try{U()}catch{}}function H(U){(async()=>{for await(let w of U.status())if(w.type==="disconnect")console.log("[NatsProvider] Disconnected"),J=!0;else if(w.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),J=!1,G=null,N()})().catch(()=>{})}async function F(U,w){let O=0;while(!Y)try{X=await Z({servers:U,timeout:v06,reconnect:!0,maxReconnectAttempts:-1,...w?{authenticator:w}:{}}),console.log(`[NatsProvider] Connected to ${X.getServer()} after ${O} attempt(s)`),G=null,J=!1,H(X),N();return}catch{O++;let D=yG(_06,C06,O-1,2,0.5);await V8(D)}}return{init(U,w){if(Q)return;Q=!0,Y=!1;let O=w?.creds?sV$.credsAuthenticator(new TextEncoder().encode(w.creds)):void 0;F(U,O).catch(()=>{})},isConnected(){return W()},getConnection(){return W()?X:null},getJetStream(){if(!W())return null;if(!G)G=$C$.jetstream(X);return G},onReady(U){if(K.push(U),W())try{U()}catch{}},async drain(){if(Y=!0,Q=!1,G=null,J=!1,X){let U=X;X=null,await U.drain().catch(()=>{})}}}}function b06($){return eV$.connect($)}var sV$,eV$,$C$,C06=100,_06=3000,v06=3000;var XC$=B(()=>{v5();sV$=M(ig(),1),eV$=M(aV$(),1),$C$=M(yO(),1)});function C$1($,Z){return`${$}.${Z}`}class _$1{cache;constructor($){this.cache=Ey({ttlMs:$?.ttlMs??f06,maxSize:$?.maxSize??x06})}async get($,Z){return this.cache.get(C$1($,Z))??null}async set($,Z,X){this.cache.set(C$1($,Z),X)}async invalidate($,Z){this.cache.delete(C$1($,Z))}teardown(){this.cache.clear()}}var f06=600000,x06=5000;var GC$=()=>{};function _E0($,Z){return`${$}:${Z}`}function v$1($){let Z=Ey({ttlMs:$?.ttlMs??y06,maxSize:$?.maxSize??g06}),X=$?.getConnection,G=crypto.randomUUID(),Q=new TextEncoder,Y=new TextDecoder,J=null;function K(W,N){let H=X?.();if(!H)return;try{H.publish(QC$,Q.encode(JSON.stringify({organizationId:W,keyId:N,originId:G})))}catch(F){console.warn("[ProviderKeyCache] Publish failed (non-critical):",F)}}return{get(W,N){return Z.get(_E0(W,N))},set(W,N,H){Z.set(_E0(W,N),H)},invalidate(W,N){Z.delete(_E0(W,N)),K(W,N)},start(){if(J)return;let W=X?.();if(!W)return;J=W.subscribe(QC$),(async()=>{for await(let N of J)try{let H=JSON.parse(Y.decode(N.data));if(H.originId===G)continue;Z.delete(_E0(H.organizationId,H.keyId))}catch{}})().catch(console.error)},teardown(){J?.unsubscribe(),J=null,Z.clear()}}}var QC$="studio.ai-provider-keys.invalidate",y06=30000,g06=5000;var YC$=()=>{};class b$1{options;subscriptions=[];onCancel=null;encoder=new TextEncoder;originId=crypto.randomUUID();seenMessageIds=new Set;constructor($){this.options=$}async start($){if($)this.onCancel=$;if(this.subscriptions.length>0)return;if(!this.onCancel)return;let Z=this.options.getConnection();if(!Z)return;let X=new TextDecoder;this.subscriptions=JC$.map((G)=>Z.subscribe(G));for(let G of this.subscriptions)(async()=>{for await(let Q of G)try{let Y=JSON.parse(X.decode(Q.data));if(Y.originId===this.originId)continue;if(Y.messageId&&this.hasSeen(Y.messageId))continue;this.onCancel?.(Y.taskId)}catch{}})().catch(console.error)}broadcast($){if(/[.*>\s]/.test($)){console.warn("[NatsCancelBroadcast] Invalid threadId, skipping broadcast");return}this.onCancel?.($);try{let Z=this.options.getConnection();if(!Z)return;let X=this.encoder.encode(JSON.stringify({taskId:$,originId:this.originId,messageId:crypto.randomUUID()}));for(let G of JC$)Z.publish(G,X)}catch(Z){console.warn("[NatsCancelBroadcast] Publish failed (non-critical):",Z)}}publishControlFrame($,Z){}async stop(){for(let $ of this.subscriptions)$.unsubscribe();this.subscriptions=[],this.seenMessageIds.clear(),this.onCancel=null}hasSeen($){if(this.seenMessageIds.has($))return!0;if(this.seenMessageIds.add($),this.seenMessageIds.size>1000){let Z=this.seenMessageIds.values().next().value;if(Z)this.seenMessageIds.delete(Z)}return!1}}var JC$;var KC$=B(()=>{JC$=["studio.decopilot.cancel","mesh.decopilot.cancel"]});var WC$=($)=>{let Z;return()=>Z??=$()},f$1,x$1;var NC$=B(()=>{X5();f$1=WC$(()=>Q8.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),x$1=WC$(()=>Q8.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function i06(){return{name:tN,subjects:[`${w90}.>`],storage:R3.StorageType.File,max_age:c06,max_bytes:d06,max_msgs_per_subject:m06,discard:R3.DiscardPolicy.Old,retention:R3.RetentionPolicy.Limits,duplicate_window:l06,num_replicas:1}}class UC${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 HC$($){let Z=FC$.headers();for(let[X,G]of Object.entries($))Z.set(X,G);return Z}function o06($,Z){let X=0;return{publish(G,Q,Y,J){G.publish(Q,Y,J?{headers:J}:void 0).catch((K)=>{if(X++,u06().add(1,{"org.id":Z??"unknown"}),X===1||X%100===0)console.warn(`[Decopilot] JetStream publish failed for thread ${$} (${X} total):`,K)})},get errorCount(){return X}}}function r06($){if(!($ instanceof Error))return!1;if($.name==="TimeoutError")return!0;return/timeout|no responders|503/i.test($.message)}class y$1{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=i06(),X=await gG(async()=>{let G=this.options.getJetStreamManager?await this.options.getJetStreamManager():await R3.jetstreamManager($);try{await G.streams.info(tN),await G.streams.update(tN,Z)}catch(Q){if(Q instanceof Error&&Q.message.includes("stream not found"))await G.streams.add(Z);else if(Q instanceof Error&&/can ?not change.*storage|storage type/i.test(Q.message))await G.streams.delete(tN),await G.streams.add(Z);else throw Q}return G},{maxAttempts:5,minTimeout:250,maxTimeout:4000,jitter:0.5,isRetriable:r06});this.js=this.options.getJetStream(),this.jsm=X,console.log(`[Decopilot] StreamBuffer.init ${this.js?"ready":"degraded (js=null)"}`)}pump($,Z,X,G){let Q=this.js;if(!Q)return console.warn(`[Decopilot] pump: JetStream client unavailable for thread ${Z}; chunks NOT published to NATS`),Promise.resolve();let Y=o06(Z,G),J=!1,K=()=>{if(J)return;J=!0;let N=H6$(Z);Q.publish(N.subject,N.data).catch(()=>{})};X.addEventListener("abort",K,{once:!0});let W=(N)=>{let H=performance.now(),F=md0(N,{runId:Z}),U=performance.now()-H;if(f$1().record(U),x$1().add(1,{"org.id":G??"unknown"}),t06?.record(U,F.reduce((w,O)=>w+O.data.length,0)),F.length===0){console.warn(`[Decopilot] dropping oversized stream chunk for thread ${Z}`);return}for(let w of F)Y.publish(Q,w.subject,w.data,w.headers?HC$(w.headers):void 0)};return(async()=>{let N=$.getReader(),H=0,F=0,U;try{while(!0){let{done:w,value:O}=await N.read();if(w)break;if(W(O),F++,++H>=64)H=0,await new Promise((D)=>setImmediate(D))}}catch(w){U=w,console.warn(`[Decopilot] stream pump error for thread ${Z}:`,w?.message??w)}finally{if(N.releaseLock(),K(),p06)console.warn(JSON.stringify({msg:"decopilot-stream-diag",event:"pump-done",taskId:Z,publishedChunks:F,publishErrors:Y.errorCount}))}if(U!==void 0)throw U})()}async publishRawChunk($,Z,X){let G=this.js;if(!G)return!1;let Q=performance.now(),Y=md0(Z,{runId:$,dedup:X});if(f$1().record(performance.now()-Q),x$1().add(1),Y.length===0)return console.warn(`[Decopilot] dropping oversized raw chunk for thread ${$} (> MAX_CHUNKED_BYTES)`),!0;for(let J of Y)await G.publish(J.subject,J.data,{...J.headers?{headers:HC$(J.headers)}:{},...J.msgId?{msgID:J.msgId}:{}});return!0}async publishDone($,Z,X){let G=this.js;if(!G)return!1;let Q=N6$({runId:$,fenceToken:Z,finalSeq:X});return await G.publish(Q.subject,Q.data,{msgID:Q.msgId}),!0}async createTailStream($,Z,X){let G=this.js;if(!G)return console.warn(`[Decopilot] createTailStream: JetStream client unavailable for thread ${$}; no live tail`),null;let Q=X?.deliverPolicy==="new"?R3.DeliverPolicy.New:R3.DeliverPolicy.All,Y=X?.closeOnDone??!1,J=zw($),K;try{K=await(await G.consumers.get(tN,{filter_subjects:J,deliver_policy:Q})).consume()}catch(D){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",D?.message??D),null}let H=E90({messages:async function*(){try{for await(let D of K)yield{subject:D.subject,data:D.data,headers:D.headers}}finally{K.stop()}}(),onCancel:()=>K.stop()}).pipeThrough(O90()).pipeThrough(B90()).getReader(),F=!1,U=()=>{if(F)return;F=!0;try{H.releaseLock()}catch{}},w=!1,O=()=>{if(w)return;w=!0,K.stop(),H.cancel().catch(()=>{}),U()};return Z?.addEventListener("abort",O,{once:!0}),new ReadableStream({async pull(D){for(;;){let{done:L,value:E}=await H.read();if(L){O(),D.close();return}let z=E;if(z.kind==="done"){if(Y){O(),D.close();return}continue}D.enqueue(z.chunk);return}},cancel(){O()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge(tN,{filter:zw($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var R3,FC$,h06=($)=>{let Z;return()=>Z??=$()},u06,c06=86400000000000,l06=120000000000,d06=4294967296,m06=500000,n06,p06,t06;var wC$=B(()=>{v5();id0();z90();D90();X5();NC$();R3=M(yO(),1),FC$=M(ig(),1),u06=h06(()=>Q8.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"}));n06=process.env.STREAM_ENCODE_TRACE==="1",p06=process.env.DECOPILOT_STREAM_TRACE==="1";t06=n06?new UC$:null});function vE0($,Z,X,G){if(!G)return!1;return $.emit(Z,l3(X,G.status,{title:G.title??void 0,virtualMcpId:G.virtual_mcp_id??void 0,createdBy:G.created_by??void 0,triggerId:G.trigger_id??null,branch:G.branch??null,createdAt:G.created_at,updatedAt:G.updated_at})),!0}var OC$=B(()=>{U8()});class g$1{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}}import{readdir as a06,rm as bE0}from"fs/promises";import{join as fE0}from"path";async function xE0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-s06),Z.setUTCHours(0,0,0,0);let X=0;try{let G=await zC($);for(let Q of G)if(/^\d{4}$/.test(Q))X+=await BC$($,Q,Z);else if(!Q.startsWith(".")){let Y=fE0($,Q),J=await zC(Y);for(let W of J){if(!/^\d{4}$/.test(W))continue;X+=await BC$(Y,W,Z)}if((await zC(Y)).length===0)await bE0(Y,{recursive:!0,force:!0})}}catch(G){console.warn("monitoring retention cleanup failed:",G)}return X}async function BC$($,Z,X){let G=0,Q=fE0($,Z),Y=await zC(Q);for(let K of Y){if(!/^\d{2}$/.test(K))continue;let W=fE0(Q,K),N=await zC(W);for(let F of N){if(!/^\d{2}$/.test(F))continue;let U=new Date(`${Z}-${K}-${F}T00:00:00Z`);if(isNaN(U.getTime()))continue;if(U<X){let w=fE0(W,F);await bE0(w,{recursive:!0,force:!0}),G++}}if((await zC(W)).length===0)await bE0(W,{recursive:!0,force:!0})}if((await zC(Q)).length===0)await bE0(Q,{recursive:!0,force:!0});return G}async function zC($){try{return(await a06($)).filter((X)=>!X.startsWith("."))}catch{return[]}}var s06=30;var h$1=()=>{};import{DBOS as u$1,SchedulerMode as e06}from"@dbos-inc/dbos-sdk";async function Z16(){let $=[pY(),jC(),DW()],Z=0;for(let X of $)try{Z+=await xE0(X)}catch(G){console.error("[monitoring-retention] cleanup failed:",G)}return console.log(`[monitoring-retention] deleted ${Z} day-dir(s) across ${$.length} signal dir(s)`),{deleted:Z,dirs:$.length}}async function X16($,Z){await u$1.runStep(()=>Z16(),{name:"monitoringRetention"})}function LC$(){if(DC$)return;DC$=!0;let $=u$1.registerWorkflow(X16,{name:"monitoringRetentionWorkflow"});u$1.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:$16,mode:e06.ExactlyOncePerIntervalWhenActive})}var $16="23 4 * * *",DC$=!1;var EC$=B(()=>{hG();h$1()});function zC$($){return async(Z,X)=>{let G=await $.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["member.role","organization.id as orgId","organization.slug as orgSlug","organization.name as orgName"]).where("member.userId","=",X).where("member.organizationId","=",Z).executeTakeFirst();if(!G)return console.warn(`[automationContextFactory] User ${X} not found in org ${Z} \u2014 returning null`),null;let Q=await aU.create();Q.auth.user={id:X,role:G.role},Q.organization={id:G.orgId,slug:G.orgSlug,name:G.orgName};let Y=await $c0($.db,Z,G.role);return Q.boundAuth=eu0({auth:Q.authInstance,headers:new Headers,role:G.role,permissions:Y,userId:X}),Q.access=new vD(X,void 0,Q.boundAuth,G.role,"self"),a60(Q,{id:G.orgId,slug:G.orgSlug}),Q}}var jC$=B(()=>{bD();Wi()});function G16(){return{services:[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}],migrationsStatus:"pending",serverUrl:null,logs:[]}}function Y16(){for(let $ of Q16)$()}function PC$($){let Z=[...c$1.logs,$];c$1={...c$1,logs:Z.length>500?Z.slice(-500):Z},Y16()}function l$1(){return J16}var c$1,Q16,J16=!1;var d$1=B(()=>{c$1=G16(),Q16=new Set});import{EventEmitter as K16}from"events";var m$1;var AC$=B(()=>{d$1();m$1=new K16;m$1.on("request",($)=>{PC$($)})});function TC$(){return async($,Z)=>{let X=Date.now(),G=$.req.method,Q=$.req.path;if(Q==="/api/auth/get-session"||Q.includes("favicon")){await Z();return}let Y="",J=!1;if(Q.startsWith("/mcp")&&G==="POST"){J=!0;try{if($.req.header("Content-Type")?.includes("application/json")){let U=await $.req.raw.clone().json();if(U.method==="tools/call"&&U.params?.name){let w=zg(U.params.name),O=U.params.arguments||{},D=Object.keys(O).map((E)=>zg(E)),L=D.length>0?D.slice(0,3).join(",")+(D.length>3?"\u2026":""):"";Y=`${m6.tool}${w}${m6.dim}(${L})${m6.reset}`}else if(U.method)Y=`${m6.dim}${zg(U.method)}${m6.reset}`}}catch{}}let K=zg(Q);if(Q.startsWith("/mcp/conn_")){let H=Q.split("/")[2]??"";K=`/mcp/${m6.mcp}${zg(H.slice(0,12))}\u2026${m6.reset}`}else if(Q==="/mcp")K=`${m6.mcp}/mcp${m6.reset}`;else if(Q==="/mcp/registry")K=`${m6.mcp}/mcp/registry${m6.reset}`;let W=N16(G),N=J?"\u25C0":"\u2190";if(!l$1())console.log(`${m6.dim}${N}${m6.reset} ${W}${G}${m6.reset} ${K}${Y?` ${Y}`:""}`);try{await Z()}finally{let H=Date.now()-X,F=$.res.status,U=W16(F),w=H<1000?`${H}ms`:`${(H/1000).toFixed(1)}s`,O=J?"\u25B6":"\u2192";if(!l$1())console.log(`${m6.dim}${O}${m6.reset} ${W}${G}${m6.reset} ${K}${Y?` ${Y}`:""} ${U}${F}${m6.reset} ${m6.duration}${w}${m6.reset}`);m$1.emit("request",{method:G,path:zg(Q),status:F,duration:H,timestamp:new Date})}}}var m6,W16=($)=>{if($>=500)return m6.serverError;if($>=400)return m6.clientError;if($>=300)return m6.redirect;return m6.ok},N16=($)=>{return m6[$]||m6.reset},zg=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var RC$=B(()=>{d$1();AC$();m6={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 kC$}from"crypto";import{mkdir as H16,readdir as F16,rm as IC$,stat as SC$}from"fs/promises";import{join as n$1,relative as U16}from"path";import{z as B$}from"zod";function CC$($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return n$1(w16,Z)}function _C$($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function i$1($,Z){let X=CC$($),G=_C$(Z);return n$1(X,G)}function O16($,Z,X,G){let Q=m0().encryptionKey||"dev-secret",Y=`${$}:${Z}:${X}:${G}`;return kC$("sha256",Q).update(Y).digest("hex")}function MC$($,Z,X,G,Q){let Y=Math.floor(Date.now()/1000)+G,J=O16(Z,X,Y,Q),K=new URL(`/api/dev-assets/${Z}/${_C$(X)}`,$);return K.searchParams.set("expires",Y.toString()),K.searchParams.set("signature",J),K.searchParams.set("method",Q),K.toString()}function vC$($,Z,X){let G=`${$}:${Z.getTime()}:${X}`;return`"${kC$("md5","etag").update(G).digest("hex")}"`}async function bC$($,Z,X,G,Q){try{let Y=await F16($,{withFileTypes:!0});for(let J of Y){let K=n$1($,J.name),N=U16(Z,K).replace(/\\/g,"/");if(X&&!N.startsWith(X))continue;if(J.isDirectory())if(G){let H=N+"/";if(!X||H.startsWith(X)){if(!(X?N.slice(X.length):N).includes("/"))Q.commonPrefixes.add(H)}}else await bC$(K,Z,X,G,Q);else if(J.isFile()){if(G&&X){let H=N.slice(X.length);if(H.includes(G)){let F=H.indexOf(G),U=X+H.slice(0,F+1);Q.commonPrefixes.add(U);continue}}try{let H=await SC$(K);Q.objects.push({key:N,size:H.size,lastModified:H.mtime.toISOString(),etag:vC$(K,H.mtime,H.size)})}catch{}}}}catch{}}function fC$($,Z){let G=$0($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:B$.object({prefix:B$.string().optional(),maxKeys:B$.number().optional().default(1000),continuationToken:B$.string().optional(),delimiter:B$.string().optional()}),outputSchema:B$.object({objects:B$.array(B$.object({key:B$.string(),size:B$.number(),lastModified:B$.string(),etag:B$.string()})),nextContinuationToken:B$.string().optional(),isTruncated:B$.boolean(),commonPrefixes:B$.array(B$.string()).optional()}),handler:async(Q)=>{let Y=Q,J=Y.prefix||"",K=Y.maxKeys??1000,W=Y.delimiter,N=Y.continuationToken,H=CC$(G);await H16(H,{recursive:!0});let F={objects:[],commonPrefixes:new Set};await bC$(H,H,J,W,F),F.objects.sort((L,E)=>L.key.localeCompare(E.key));let U=0;if(N){if(U=F.objects.findIndex((L)=>L.key>N),U===-1)U=F.objects.length}let w=F.objects.slice(U,U+K),O=U+K<F.objects.length,D=O?w[w.length-1]?.key:void 0;return{objects:w,isTruncated:O,nextContinuationToken:D,commonPrefixes:Array.from(F.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:B$.object({key:B$.string()}),outputSchema:B$.object({contentType:B$.string().optional(),contentLength:B$.number(),lastModified:B$.string(),etag:B$.string(),metadata:B$.record(B$.string(),B$.string()).optional()}),handler:async(Q)=>{let Y=Q,J=i$1(G,Y.key),K=await SC$(J);return{contentType:c01(Y.key),contentLength:K.size,lastModified:K.mtime.toISOString(),etag:vC$(J,K.mtime,K.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:B$.object({key:B$.string(),expiresIn:B$.number().optional()}),outputSchema:B$.object({url:B$.string(),expiresIn:B$.number()}),handler:async(Q)=>{let Y=Q,J=Y.expiresIn??qC$;return{url:MC$(Z,G,Y.key,J,"GET"),expiresIn:J}}},{name:"PUT_PRESIGNED_URL",description:"Generate a presigned URL for uploading a file to local storage",inputSchema:B$.object({key:B$.string(),expiresIn:B$.number().optional(),contentType:B$.string().optional()}),outputSchema:B$.object({url:B$.string(),expiresIn:B$.number()}),handler:async(Q)=>{let Y=Q,J=Y.expiresIn??qC$;return{url:MC$(Z,G,Y.key,J,"PUT"),expiresIn:J}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:B$.object({key:B$.string()}),outputSchema:B$.object({success:B$.boolean(),key:B$.string()}),handler:async(Q)=>{let Y=Q,J=i$1(G,Y.key);try{return await IC$(J),{success:!0,key:Y.key}}catch{return{success:!1,key:Y.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:B$.object({keys:B$.array(B$.string()).max(1000)}),outputSchema:B$.object({deleted:B$.array(B$.string()),errors:B$.array(B$.object({key:B$.string(),message:B$.string()}))}),handler:async(Q)=>{let Y=Q,J=[],K=[];return await Promise.all(Y.keys.map(async(W)=>{let N=i$1(G,W);try{await IC$(N),J.push(W)}catch(H){K.push({key:W,message:H instanceof Error?H.message:"Unknown error"})}})),{deleted:J,errors:K}}}]}async function p$1($,Z,X){let G=fC$(Z,X),Q=new BN({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:J5});for(let J of G){let K="shape"in J.inputSchema?J.inputSchema.shape:B$.object({}).shape,W=J.outputSchema&&"shape"in J.outputSchema?J.outputSchema.shape:B$.object({}).shape;Q.registerTool(J.name,{description:J.description??"",inputSchema:K,outputSchema:W,annotations:J.annotations,_meta:J._meta},async(N)=>{try{let H=await J.handler(N);return{content:[{type:"text",text:JSON.stringify(H)}],structuredContent:H}}catch(H){return{content:[{type:"text",text:`Error: ${H.message}`}],isError:!0}}})}let Y=new AQ({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await Q.connect(Y),gK(Q,Y,$,"mcp:dev-assets")}async function xC$($,Z,X,G){let Y=fC$(X,G).find((J)=>J.name===$);if(!Y)return{content:[{type:"text",text:`Tool not found: ${$}`}],isError:!0};try{let J=await Y.handler(Z);return{content:[{type:"text",text:JSON.stringify(J)}]}}catch(J){return{content:[{type:"text",text:J instanceof Error?J.message:String(J)}],isError:!0}}}var w16="./data/assets",qC$=3600,VC$,yC$;var gC$=B(()=>{k$();Dn();i8();pc();Px();PX();tL0();VC$=new E1;VC$.all("/",async($)=>{let Z=$.get("studioContext"),X=new URL($.req.url),G=`${X.protocol}//${X.host}`;return p$1($.req.raw,Z,G)});yC$=VC$});var hC$={};W4(hC$,{mountDevRoutes:()=>B16});function B16($,Z){$.all("/mcp/:connectionId{.*_dev-assets$}",Z,async(G)=>{let Q=G.get("studioContext"),Y=new URL(G.req.url),J=`${Y.protocol}//${Y.host}`;return p$1(G.req.raw,Q,J)}),$.all("/mcp/:connectionId{.*_dev-assets$}/call-tool/:toolName",Z,async(G)=>{let Q=G.get("studioContext"),Y=new URL(G.req.url),J=`${Y.protocol}//${Y.host}`,K=G.req.param("toolName");if(!K)return G.json({error:"Missing tool name"},400);let W=await G.req.json(),N=await xC$(K,W,Q,J);if(N.isError)return G.json(N.content,500);return G.json(N.content)}),$.use("/mcp/dev-assets",Z),$.route("/mcp/dev-assets",yC$);let X=new E1;X.use("*",A3({mountPath:"/api/dev-assets"})),X.route("/",pL0({orgFromPath:!1})),$.route("/api/dev-assets",X)}var uC$=B(()=>{i8();v01();tL0();gC$()});import{sql as D16}from"kysely";import{randomUUID as cC$}from"crypto";import{z as L16}from"zod";async function z16($){let Z=new Date().toISOString(),X=cC$(),G=f4.SELF($.organizationId),Q="registry.publish_request.created",Y={requestId:$.request.id,requestedId:$.request.requested_id,title:$.request.title,status:$.request.status,createdAt:$.request.created_at,requester:{name:$.request.requester_name,email:$.request.requester_email}};await $.db.insertInto("events").values({id:X,organization_id:$.organizationId,type:"registry.publish_request.created",source:G,specversion:"1.0",subject:$.request.id,time:Z,datacontenttype:"application/json",dataschema:null,data:JSON.stringify(Y),cron:null,status:"pending",attempts:0,last_error:null,next_retry_at:null,created_at:Z,updated_at:Z}).execute();let J=await $.db.selectFrom("event_subscriptions").select(["id"]).where("organization_id","=",$.organizationId).where("enabled","=",1).where("event_type","=","registry.publish_request.created").where((K)=>K.or([K("publisher","is",null),K("publisher","=",G)])).execute();if(J.length>0)await $.db.insertInto("event_deliveries").values(J.map((K)=>({id:cC$(),event_id:X,subscription_id:K.id,status:"pending",attempts:0,last_error:null,delivered_at:null,next_retry_at:null,created_at:Z}))).execute();try{await D16`SELECT
2719
+ </head>`)}function MV$($){let Z=new E1;return Z.get("/:domain/og.png",async(X)=>{let G=Eg(X.req.param("domain")),Q=async()=>{let Y=$?Bun.file(qV$($,"report-og-fallback.png")):null;if(!Y||!await Y.exists())return X.notFound();return X.body(new Uint8Array(await Y.arrayBuffer()),200,{"Content-Type":"image/png","Cache-Control":"public, max-age=0, s-maxage=3600"})};try{let Y=await fetch(`${eQ({})}/api/v2/public/diagnostics/${encodeURIComponent(G)}/og.png`,{signal:AbortSignal.timeout(X06)}),J=Y.headers.get("content-type")??"";if(!Y.ok||!J.startsWith("image/")||!Y.body)return Q();return X.body(Y.body,200,{"Content-Type":J,"Cache-Control":"public, max-age=0, s-maxage=604800"})}catch{return Q()}}),Z.get("/:domain",async(X)=>{let G=X.req.param("domain"),Q=$?qV$($,"index.html"):null,Y=Q?Bun.file(Q):null;if(!Y||!await Y.exists())return X.notFound();let J=await Y.text();try{let K=await ee4(Eg(G)),W=$06(G,K);return X.html(Z06(J,W),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return X.html(J)}}),Z}var se4=2500,X06=1e4;var kV$=B(()=>{i8();I$1();SF();k$()});function $o($,Z){return fetch(`${eQ({})}${$}`,Z)}async function G06($,Z,X){let G=new URLSearchParams;if(Z)G.set("pw",Z);if(X)G.set("lang",X);let Q=G.toString()?`?${G.toString()}`:"",Y=await $o(`/api/v2/public/diagnostics/${encodeURIComponent($)}${Q}`,{headers:{Accept:"application/json"}});if(Y.status===404)return{status:"not_found",deck:null,scanned_at:null,drops:[]};if(!Y.ok)throw Error(`report read HTTP ${Y.status}`);let J=await Y.json(),{deck:K,drops:W}=VE0(J);return{status:K.slides.length?"ready":"empty",deck:K,scanned_at:J.scanned_at,drops:W}}var Q06,LC,SV$;var VV$=B(()=>{i8();AY();SF();I$1();Q06=new Set(["complete","errored","terminated","unknown"]),LC=new E1;LC.use("*",async($,Z)=>{let X=await B8.api.getSession({headers:$.req.raw.headers});if(!X?.user?.id)return $.json({error:"Authentication required"},401,{"Cache-Control":"private, no-store",Vary:"Cookie"});$.set("reportUser",{email:X.user.email}),await Z(),$.header("Cache-Control","private, no-store"),$.header("Vary","Cookie");return});LC.get("/site/:domain",async($)=>{let Z=$.req.param("domain").trim();if(!Z)return $.json({error:"domain is required"},400);let X=$.req.query("key")?.trim()||void 0,G=$.req.query("lang")?.trim()||void 0;try{let Q=await G06(Z,X,G);return $.header("Cache-Control","private, no-store"),$.json(Q)}catch{return $.json({error:"report read failed"},502)}});LC.post("/run",async($)=>{let Z;try{Z=await $.req.json()}catch{return $.json({error:"invalid JSON"},400)}let X=typeof Z.domain==="string"?Z.domain.trim():"";if(!X)return $.json({error:"domain is required"},400);let G=$.get("reportUser").email,Q=typeof Z.distinctId==="string"&&Z.distinctId.trim()&&Z.distinctId.length<=200?Z.distinctId.trim():void 0;try{let Y=await $o("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${VB({})}`},body:JSON.stringify({url:X,email:G,distinct_id:Q})});if(!Y.ok)return $.json({error:`run HTTP ${Y.status}`},502);let J=await Y.json(),K=J.blocked?{state:"blocked"}:J.status==="fresh"?{state:"fresh"}:J.mode==="sync"?{state:"sync"}:{state:"running",id:J.id??null};return $.json(K)}catch{return $.json({error:"run failed"},502)}});LC.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let X=await $o(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${VB({})}`}});if(!X.ok)return $.json({error:`status HTTP ${X.status}`},502);let Q=(await X.json()).status??"unknown",Y={done:Q06.has(Q),status:Q};return $.json(Y)}catch{return $.json({error:"status failed"},502)}});LC.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let X=await $o(`/api/v2/public/link-tokens/${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(X.status===404)return $.json(null);if(!X.ok)return $.json({error:`link token HTTP ${X.status}`},502);return $.json(await X.json())}catch{return $.json({error:"link token resolve failed"},502)}});LC.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let X=await $o(`/api/v2/public/suggest?q=${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(!X.ok)return $.json({suggestions:[]});let G=await X.json();return $.json({suggestions:Array.isArray(G.suggestions)?G.suggestions:[]})}catch{return $.json({suggestions:[]})}});SV$=LC});import{createHmac as Y06,timingSafeEqual as J06}from"crypto";function CV$($,Z,X,G=Date.now()){if(!Z||!X)return!1;let Q,Y=[];for(let N of Z.split(",")){let H=N.indexOf("=");if(H<=0)continue;let F=N.slice(0,H).trim(),U=N.slice(H+1).trim();if(F==="t")Q=U;else if(F==="v1")Y.push(U)}if(!Q||Y.length===0)return!1;let J=Number(Q);if(!Number.isFinite(J)||Math.abs(G/1000-J)>K06)return!1;let K=Y06("sha256",X).update(`${Q}.${$}`).digest("hex"),W=Buffer.from(K,"hex");return Y.some((N)=>{let H=Buffer.from(N,"hex");return W.length===H.length&&J06(W,H)})}function _V$($){let Z;try{Z=JSON.parse($)}catch{return null}let X=mY(Z),G=mY(mY(X?.data)?.object);if(!X||typeof X.type!=="string"||!G)return null;return{id:dY(X.id),type:X.type,created:typeof X.created==="number"?X.created:void 0,livemode:typeof X.livemode==="boolean"?X.livemode:void 0,data:{object:G}}}function W06($){switch($){case"active":case"trialing":return"active";case"past_due":return"past_due";default:return"canceled"}}function dY($){return typeof $==="string"?$:void 0}function mY($){return typeof $==="object"&&$!==null?$:void 0}function CE0($){return typeof $==="number"?new Date($*1000):null}function k$1($){return dY($)??dY(mY($)?.id)}function N06($){return k$1($.subscription)??dY(mY(mY($.parent)?.subscription_details)?.subscription)}function H06($){let Z=CE0($.current_period_end);if(Z)return Z;let X=mY($.items)?.data;if(!Array.isArray(X))return null;let G=0;for(let Q of X){let Y=mY(Q)?.current_period_end;if(typeof Y==="number"&&Y>G)G=Y}return G>0?new Date(G*1000):null}function q$1($,Z){let X=CE0($.created);return!!X&&!!Z.lastStripeEventAt&&X<Z.lastStripeEventAt}function M$1($,Z){let X=CE0($.created);if(!X)return;return Z.lastStripeEventAt&&Z.lastStripeEventAt>X?void 0:X}async function F06($,Z){let X=Z.data.object;switch(Z.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":{let G=dY(mY(X.metadata)?.orgId);if(!G)return{handled:!1,reason:"no orgId"};if(dY(mY(X.metadata)?.kind)==="topup"){if(X.mode!=="payment")return{handled:!1,reason:"topup with wrong mode"};if(dY(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let K=dY(X.id);if(!K)return console.error("stripe webhook: topup session without id",{eventId:Z.id,organizationId:G}),{handled:!1,reason:"topup session without id"};let W=Number(mY(X.metadata)?.creditCents);if(!Number.isInteger(W)||W<=0)return console.error("stripe webhook: paid topup with bad metadata \u2014 credit NOT applied",{eventId:Z.id,organizationId:G,creditCents:mY(X.metadata)?.creditCents}),{handled:!1,reason:"bad topup metadata"};return{handled:!0,organizationId:G,topUp:{creditCents:W,referenceId:`stripe-topup:${K}`}}}if(X.mode!=="subscription")return{handled:!1,reason:"not a subscription checkout"};if(dY(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let Q=await $.getBilling(G);if(!Q)return{handled:!1,reason:"unknown org"};if(Q.legacy||Q.billingMode!=="self_serve")return console.error("stripe webhook: refused checkout bind",{organizationId:G,eventId:Z.id,legacy:Q.legacy,billingMode:Q.billingMode}),{handled:!1,reason:"org is not self-serve"};let Y=k$1(X.subscription);if(Q.stripeSubscriptionId&&Y&&Q.stripeSubscriptionId!==Y)return console.error("stripe webhook: refused checkout rebind",{organizationId:G,eventId:Z.id}),{handled:!1,reason:"org already bound to another subscription",orphanSubscriptionId:Y};if(q$1(Z,Q))return{handled:!1,reason:"stale event"};let J=`stripe-checkout:${dY(X.id)??crypto.randomUUID()}`;return await $.updateStripeState(G,{stripeCustomerId:k$1(X.customer),stripeSubscriptionId:Y,status:"active",benefitsReferenceId:J,lastStripeEventAt:M$1(Z,Q)}),{handled:!0,organizationId:G,benefitsReferenceId:J}}case"customer.subscription.updated":case"customer.subscription.deleted":{let G=dY(X.id);if(!G)return{handled:!1,reason:"no sub id"};let Q=await $.getBillingByStripeSubscriptionId(G);if(!Q)return{handled:!1,reason:"unknown subscription"};let Y=Z.type==="customer.subscription.deleted";if(!Y&&q$1(Z,Q))return{handled:!1,reason:"stale event"};let J=Y?"canceled":W06(X.status),K=H06(X),W=`stripe-sub:${G}:${J}:${K?.getTime()??0}`;return await $.updateStripeState(Q.organizationId,{status:J,currentPeriodEnd:K,...Y&&{stripeSubscriptionId:null},benefitsReferenceId:W,lastStripeEventAt:M$1(Z,Q)}),{handled:!0,organizationId:Q.organizationId,benefitsReferenceId:W}}case"invoice.paid":{let G=N06(X);if(!G)return{handled:!1,reason:"no sub id"};let Q=await $.getBillingByStripeSubscriptionId(G);if(!Q)return{handled:!1,reason:"unknown subscription"};if(q$1(Z,Q))return{handled:!1,reason:"stale event"};let Y=`stripe-invoice:${dY(X.id)??crypto.randomUUID()}`;return await $.updateStripeState(Q.organizationId,{status:"active",currentPeriodEnd:CE0(X.period_end),benefitsReferenceId:Y,lastStripeEventAt:M$1(Z,Q)}),{handled:!0,organizationId:Q.organizationId,benefitsReferenceId:Y}}default:return{handled:!1,reason:`unhandled event ${Z.type}`}}}async function w06($,Z){let[X,G]=await Promise.all([$.getBilling(Z),$.listPaidSeatUserIds(Z)]);if(!Gv(X))return;if(await T0$({subscriptionId:X.stripeSubscriptionId,targetQuantity:G.length}))console.error("stripe webhook: reconciled diverged seat quantity",{organizationId:Z,targetQuantity:G.length})}async function vV$($){let Z=new rW(C8().db),X=await F06(Z,$);if(X.handled&&X.topUp)await aI1({organizationId:X.organizationId,amountCents:X.topUp.creditCents,referenceId:X.topUp.referenceId});if(X.handled&&X.benefitsReferenceId)try{await XN(X.organizationId,X.benefitsReferenceId,"apply")}catch(G){console.error("Failed to enqueue benefit sync (sweep covers):",G)}if(X.handled&&U06.has($.type))try{await w06(Z,X.organizationId)}catch(G){console.error("Failed to reconcile seat quantity (next cycle):",G)}if(!X.handled&&X.orphanSubscriptionId)try{await A0$(X.orphanSubscriptionId),console.error("stripe webhook: canceled orphan subscription",{subscriptionId:X.orphanSubscriptionId,eventId:$.id})}catch(G){if(!(G instanceof LG&&(G.status===400||G.status===404)))throw G}return X}var K06=300,U06;var bV$=B(()=>{sG();n_();Xx();ne();Qv();U06=new Set(["checkout.session.completed","checkout.session.async_payment_succeeded","invoice.paid"])});var O06=1048576,S$1;var fV$=B(()=>{i8();YC();k$();bV$();S$1=new E1;S$1.post("/webhook",H7({maxSize:O06,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=m0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let X=await $.req.text();if(!CV$(X,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let Q=_V$(X);if(!Q)return $.json({error:"invalid payload"},400);let Y=await vV$(Q);return console.log("stripe webhook",{eventId:Q.id,type:Q.type,livemode:Q.livemode,...Y}),$.json({received:!0})})});function xV$($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var yV$,B06,D06,gV$;var hV$=B(()=>{i8();LJ();iy();Jv();yV$=new E1,B06=["range","if-none-match","if-modified-since"],D06=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];yV$.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),X=Z.organization?.id;if(!Z.auth?.user?.id){if(ey($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new G$(401,{message:"Authentication required"})}if(!X)throw new G$(401,{message:"Organization context required"});let G=$.req.path.replace(/^.*\/files\//,"");if(!G)throw new G$(400,{message:"Missing file key"});let Q=await zt(G,Z);if(!Q)throw new G$(503,{message:"Object storage not configured"});if(Q.startsWith("data:")&&DJ()){let W=Q.match(/^data:([^;]+);base64,(.+)$/s);if(!W)throw new G$(500,{message:"Invalid data URL from storage"});let[,N,H]=W,F=Buffer.from(H,"base64"),U=new Headers({"Content-Type":N,"Cache-Control":"private, max-age=86400"});return xV$(U,N),new Response(F,{status:200,headers:U})}let Y=new Headers;for(let W of B06){let N=$.req.header(W);if(N)Y.set(W,N)}let J=await fetch(Q,{headers:Y});if(J.status===403||J.status===404)throw new G$(404,{message:"File not found"});if(!J.ok&&J.status!==304&&J.status!==416)throw console.error(`[files] upstream storage error ${J.status} for key:`,G),new G$(502,{message:"Upstream storage error"});let K=new Headers;for(let W of D06){let N=J.headers.get(W);if(N)K.set(W,N)}return K.set("Cache-Control","private, max-age=86400"),xV$(K,K.get("content-type")??""),new Response(J.body,{status:J.status,headers:K})});gV$=yV$});var Zo=V((EC)=>{var L06=EC&&EC.__createBinding||(Object.create?function($,Z,X,G){if(G===void 0)G=X;var Q=Object.getOwnPropertyDescriptor(Z,X);if(!Q||("get"in Q?!Z.__esModule:Q.writable||Q.configurable))Q={enumerable:!0,get:function(){return Z[X]}};Object.defineProperty($,G,Q)}:function($,Z,X,G){if(G===void 0)G=X;$[G]=Z[X]}),E06=EC&&EC.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))L06(Z,$,X)};Object.defineProperty(EC,"__esModule",{value:!0});E06(dG(),EC)});var lV$=V((uV$)=>{Object.defineProperty(uV$,"__esModule",{value:!0});uV$.version=void 0;uV$.version="3.4.0"});var iV$=V((wW)=>{var z06=wW&&wW.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(wW,"__esModule",{value:!0});wW.NodeTransport=wW.VERSION=void 0;wW.nodeResolveHost=I06;var x6=Zo(),j06=j0("net"),V$1=j0("tls"),P06=j0("path"),dV$=j0("fs"),A06=z06(j0("dns")),T06=lV$();wW.VERSION=T06.version;var R06="nats.js";class mV${socket;version;lang;yields=[];signal=(0,x6.deferred)();closedNotification=(0,x6.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=R06,this.version=wW.VERSION}async connect($,Z){this.tlsName=$.tlsName,this.options=Z;let{tls:X}=this.options,{handshakeFirst:G}=X||{};try{if(G===!0)this.socket=await this.tlsFirst($);else this.socket=await this.dial($);if(this.done)this.socket?.destroy();let Q=await this.peekInfo();(0,x6.checkOptions)(Q,Z);let{tls_required:Y,tls_available:J}=Q,K=J===!0&&Z.tls!==null;if(!G&&(Y||K))this.socket=await this.startTLS();if(this.done)this.socket?.destroy();if(Y&&this.socket.encrypted!==!0)throw x6.errors.InvalidArgumentError.format("tls","is not available on this server");return this.connected=!0,this.setupHandlers(),this.signal.resolve(),Promise.resolve()}catch(Q){let Y=Q;if(!Y)Y=new x6.errors.ConnectionError("error connecting - node provided an undefined error");let{code:J}=Y,K=J==="ECONNREFUSED"?new x6.errors.ConnectionError("connection refused",{cause:Y}):Y;throw this.socket?.destroy(),K}}dial($){let Z=(0,x6.deferred)(),X,G=(0,j06.createConnection)($.port,$.hostname,()=>{Z.resolve(G),G.removeAllListeners()});return G.on("error",(Q)=>{X=Q}),G.on("close",()=>{G.removeAllListeners(),Z.reject(X)}),G.setNoDelay(!0),Z}get isClosed(){return this.done}close($){return this._closed($,!1)}peekInfo(){let $=(0,x6.deferred)(),Z;return this.socket.on("data",(X)=>{this.yields.push(X);let G=x6.DataBuffer.concat(...this.yields),Q=(0,x6.extractProtocolMessage)(G);if(Q!=="")try{let Y=x6.INFO.exec(Q);if(!Y)throw Error("unexpected response from server");let J=JSON.parse(Y[1]);$.resolve(J)}catch(Y){$.reject(Y)}finally{this.socket.removeAllListeners()}}),this.socket.on("error",(X)=>{Z=X}),this.socket.on("close",()=>{this.socket.removeAllListeners(),$.reject(Z)}),$}loadFile($){if(!$)return Promise.resolve();let Z=(0,x6.deferred)();try{if($=(0,P06.resolve)($),!(0,dV$.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,dV$.readFile)($,(X,G)=>{if(X)return Z.reject(X);Z.resolve(G)})}catch(X){Z.reject(X)}return Z}async loadClientCerts(){let $={},{certFile:Z,cert:X,caFile:G,ca:Q,keyFile:Y,key:J}=this.options.tls;try{if(Z){let K=await this.loadFile(Z);if(K)$.cert=K}else if(X)$.cert=X;if(Y){let K=await this.loadFile(Y);if(K)$.key=K}else if(J)$.key=J;if(G){let K=await this.loadFile(G);if(K)$.ca=[K]}else if(Q)$.ca=Q;return Promise.resolve($)}catch(K){return Promise.reject(K)}}async tlsFirst($){let Z,X={servername:this.tlsName,rejectUnauthorized:!0};if(this.socket)X.socket=this.socket;if(typeof this.options.tls==="object")try{let Q=await this.loadClientCerts()||{};X=(0,x6.extend)(X,this.options.tls,Q)}catch(Q){return Promise.reject(new x6.errors.ConnectionError(Q.message,{cause:Q}))}let G=(0,x6.deferred)();try{let Q=(0,V$1.connect)($.port,$.hostname,X,()=>{Q.removeAllListeners(),G.resolve(Q)});Q.on("error",(Y)=>{Z=Y}),Q.on("secureConnect",()=>{if(X.rejectUnauthorized===!1)return;if(!Q.authorized)throw Q.authorizationError}),Q.on("close",()=>{G.reject(Z),Q.removeAllListeners()}),Q.setNoDelay(!0)}catch(Q){G.reject(new x6.errors.ConnectionError(Q.message,{cause:Q}))}return G}async startTLS(){let $,Z={socket:this.socket,servername:this.tlsName,rejectUnauthorized:!0};if(typeof this.options.tls==="object")try{let G=await this.loadClientCerts()||{};Z=(0,x6.extend)(Z,this.options.tls,G)}catch(G){return Promise.reject(new x6.errors.ConnectionError(G.message,{cause:G}))}let X=(0,x6.deferred)();try{let G=(0,V$1.connect)(Z,()=>{G.removeAllListeners(),X.resolve(G)});G.on("error",(Q)=>{$=Q}),G.on("secureConnect",()=>{if(Z.rejectUnauthorized===!1)return;if(!G.authorized)throw G.authorizationError}),G.on("close",()=>{X.reject($),G.removeAllListeners()})}catch(G){X.reject(new x6.errors.ConnectionError(G.message,{cause:G}))}return X}setupHandlers(){let $;this.socket.on("data",(Z)=>{return this.yields.push(Z),this.signal.resolve()}),this.socket.on("error",(Z)=>{$=Z}),this.socket.on("end",()=>{if(this.socket?.destroyed)return;this.socket?.write(new Uint8Array(0),()=>{this.socket?.end()})}),this.socket.on("close",()=>{this._closed($,!1)})}[Symbol.asyncIterator](){return this.iterate()}async*iterate(){while(!0){if(this.yields.length===0)await this.signal;let $=this.yields;this.yields=[];for(let Z=0;Z<$.length;Z++){if(this.options.debug)console.info(`> ${(0,x6.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,x6.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 V$1.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,x6.render)($)}`);let Z=(0,x6.deferred)();try{this.socket.write($,(X)=>{if(X){if(this.options.debug)console.error(`!!! ${(0,x6.render)($)}: ${X}`);return Z.reject(X)}return Z.resolve()})}catch(X){if(this.options.debug)console.error(`!!! ${(0,x6.render)($)}: ${X}`);Z.reject(X)}return Z}send($){this._send($).catch((X)=>{})}async _closed($,Z=!0){if(!this.connected)return;if(this.done){this.socket?.destroy();return}if(this.closeError=$,!$&&this.socket&&Z)try{await this._send(new TextEncoder().encode(""))}catch(X){if(this.options.debug)console.log("transport close terminated with an error",X)}try{if(this.socket)this.socket.removeAllListeners(),this.socket?.destroy(),this.socket=void 0}catch(X){console.log(X)}this.done=!0,this.closedNotification.resolve(this.closeError)}closed(){return this.closedNotification}}wW.NodeTransport=mV$;function I06($){let Z=(0,x6.deferred)();return A06.default.lookup($,{all:!0},(X,G)=>{if(X){Z.reject(X);return}let Q=[];for(let Y of G)Q.push(Y.address);if(Q.length===0)Q.push($);Z.resolve(Q)}),Z}});var rV$=V((oV$)=>{Object.defineProperty(oV$,"__esModule",{value:!0});oV$.connect=q06;var nV$=iV$(),pV$=Zo(),tV$=Zo();function q06($={}){if((0,tV$.hasWsProtocol)($))return Promise.reject(tV$.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,pV$.setTransportFactory)({factory:()=>{return new nV$.NodeTransport},dnsResolveFn:nV$.nodeResolveHost}),pV$.NatsConnectionImpl.connect($)}});var aV$=V((CH)=>{var k06=CH&&CH.__createBinding||(Object.create?function($,Z,X,G){if(G===void 0)G=X;var Q=Object.getOwnPropertyDescriptor(Z,X);if(!Q||("get"in Q?!Z.__esModule:Q.writable||Q.configurable))Q={enumerable:!0,get:function(){return Z[X]}};Object.defineProperty($,G,Q)}:function($,Z,X,G){if(G===void 0)G=X;$[G]=Z[X]}),S06=CH&&CH.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))k06(Z,$,X)};Object.defineProperty(CH,"__esModule",{value:!0});CH.connect=void 0;var V06=rV$();Object.defineProperty(CH,"connect",{enumerable:!0,get:function(){return V06.connect}});S06(Zo(),CH)});function ZC$($){let Z=$?.connectFn??b06,X=null,G=null,Q=!1,Y=!1,J=!1,K=[];function W(){return X!==null&&!X.isClosed()&&!X.isDraining()&&!J}function N(){console.log(`[NatsProvider] fireReady: ${K.length} callbacks`);for(let U of K)try{U()}catch{}}function H(U){(async()=>{for await(let w of U.status())if(w.type==="disconnect")console.log("[NatsProvider] Disconnected"),J=!0;else if(w.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),J=!1,G=null,N()})().catch(()=>{})}async function F(U,w){let O=0;while(!Y)try{X=await Z({servers:U,timeout:v06,reconnect:!0,maxReconnectAttempts:-1,...w?{authenticator:w}:{}}),console.log(`[NatsProvider] Connected to ${X.getServer()} after ${O} attempt(s)`),G=null,J=!1,H(X),N();return}catch{O++;let D=yG(_06,C06,O-1,2,0.5);await V8(D)}}return{init(U,w){if(Q)return;Q=!0,Y=!1;let O=w?.creds?sV$.credsAuthenticator(new TextEncoder().encode(w.creds)):void 0;F(U,O).catch(()=>{})},isConnected(){return W()},getConnection(){return W()?X:null},getJetStream(){if(!W())return null;if(!G)G=$C$.jetstream(X);return G},onReady(U){if(K.push(U),W())try{U()}catch{}},async drain(){if(Y=!0,Q=!1,G=null,J=!1,X){let U=X;X=null,await U.drain().catch(()=>{})}}}}function b06($){return eV$.connect($)}var sV$,eV$,$C$,C06=100,_06=3000,v06=3000;var XC$=B(()=>{v5();sV$=M(ig(),1),eV$=M(aV$(),1),$C$=M(yO(),1)});function C$1($,Z){return`${$}.${Z}`}class _$1{cache;constructor($){this.cache=Ey({ttlMs:$?.ttlMs??f06,maxSize:$?.maxSize??x06})}async get($,Z){return this.cache.get(C$1($,Z))??null}async set($,Z,X){this.cache.set(C$1($,Z),X)}async invalidate($,Z){this.cache.delete(C$1($,Z))}teardown(){this.cache.clear()}}var f06=600000,x06=5000;var GC$=()=>{};function _E0($,Z){return`${$}:${Z}`}function v$1($){let Z=Ey({ttlMs:$?.ttlMs??y06,maxSize:$?.maxSize??g06}),X=$?.getConnection,G=crypto.randomUUID(),Q=new TextEncoder,Y=new TextDecoder,J=null;function K(W,N){let H=X?.();if(!H)return;try{H.publish(QC$,Q.encode(JSON.stringify({organizationId:W,keyId:N,originId:G})))}catch(F){console.warn("[ProviderKeyCache] Publish failed (non-critical):",F)}}return{get(W,N){return Z.get(_E0(W,N))},set(W,N,H){Z.set(_E0(W,N),H)},invalidate(W,N){Z.delete(_E0(W,N)),K(W,N)},start(){if(J)return;let W=X?.();if(!W)return;J=W.subscribe(QC$),(async()=>{for await(let N of J)try{let H=JSON.parse(Y.decode(N.data));if(H.originId===G)continue;Z.delete(_E0(H.organizationId,H.keyId))}catch{}})().catch(console.error)},teardown(){J?.unsubscribe(),J=null,Z.clear()}}}var QC$="studio.ai-provider-keys.invalidate",y06=30000,g06=5000;var YC$=()=>{};class b$1{options;subscriptions=[];onCancel=null;encoder=new TextEncoder;originId=crypto.randomUUID();seenMessageIds=new Set;constructor($){this.options=$}async start($){if($)this.onCancel=$;if(this.subscriptions.length>0)return;if(!this.onCancel)return;let Z=this.options.getConnection();if(!Z)return;let X=new TextDecoder;this.subscriptions=JC$.map((G)=>Z.subscribe(G));for(let G of this.subscriptions)(async()=>{for await(let Q of G)try{let Y=JSON.parse(X.decode(Q.data));if(Y.originId===this.originId)continue;if(Y.messageId&&this.hasSeen(Y.messageId))continue;this.onCancel?.(Y.taskId)}catch{}})().catch(console.error)}broadcast($){if(/[.*>\s]/.test($)){console.warn("[NatsCancelBroadcast] Invalid threadId, skipping broadcast");return}this.onCancel?.($);try{let Z=this.options.getConnection();if(!Z)return;let X=this.encoder.encode(JSON.stringify({taskId:$,originId:this.originId,messageId:crypto.randomUUID()}));for(let G of JC$)Z.publish(G,X)}catch(Z){console.warn("[NatsCancelBroadcast] Publish failed (non-critical):",Z)}}publishControlFrame($,Z){}async stop(){for(let $ of this.subscriptions)$.unsubscribe();this.subscriptions=[],this.seenMessageIds.clear(),this.onCancel=null}hasSeen($){if(this.seenMessageIds.has($))return!0;if(this.seenMessageIds.add($),this.seenMessageIds.size>1000){let Z=this.seenMessageIds.values().next().value;if(Z)this.seenMessageIds.delete(Z)}return!1}}var JC$;var KC$=B(()=>{JC$=["studio.decopilot.cancel","mesh.decopilot.cancel"]});var WC$=($)=>{let Z;return()=>Z??=$()},f$1,x$1;var NC$=B(()=>{X5();f$1=WC$(()=>Q8.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),x$1=WC$(()=>Q8.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function i06(){return{name:tN,subjects:[`${w90}.>`],storage:R3.StorageType.File,max_age:c06,max_bytes:d06,max_msgs_per_subject:m06,discard:R3.DiscardPolicy.Old,retention:R3.RetentionPolicy.Limits,duplicate_window:l06,num_replicas:1}}class UC${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 HC$($){let Z=FC$.headers();for(let[X,G]of Object.entries($))Z.set(X,G);return Z}function o06($,Z){let X=0;return{publish(G,Q,Y,J){G.publish(Q,Y,J?{headers:J}:void 0).catch((K)=>{if(X++,u06().add(1,{"org.id":Z??"unknown"}),X===1||X%100===0)console.warn(`[Decopilot] JetStream publish failed for thread ${$} (${X} total):`,K)})},get errorCount(){return X}}}function r06($){if(!($ instanceof Error))return!1;if($.name==="TimeoutError")return!0;return/timeout|no responders|503/i.test($.message)}class y$1{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=i06(),X=await gG(async()=>{let G=this.options.getJetStreamManager?await this.options.getJetStreamManager():await R3.jetstreamManager($);try{await G.streams.info(tN),await G.streams.update(tN,Z)}catch(Q){if(Q instanceof Error&&Q.message.includes("stream not found"))await G.streams.add(Z);else if(Q instanceof Error&&/can ?not change.*storage|storage type/i.test(Q.message))await G.streams.delete(tN),await G.streams.add(Z);else throw Q}return G},{maxAttempts:5,minTimeout:250,maxTimeout:4000,jitter:0.5,isRetriable:r06});this.js=this.options.getJetStream(),this.jsm=X,console.log(`[Decopilot] StreamBuffer.init ${this.js?"ready":"degraded (js=null)"}`)}pump($,Z,X,G){let Q=this.js;if(!Q)return console.warn(`[Decopilot] pump: JetStream client unavailable for thread ${Z}; chunks NOT published to NATS`),Promise.resolve();let Y=o06(Z,G),J=!1,K=()=>{if(J)return;J=!0;let N=H6$(Z);Q.publish(N.subject,N.data).catch(()=>{})};X.addEventListener("abort",K,{once:!0});let W=(N)=>{let H=performance.now(),F=md0(N,{runId:Z}),U=performance.now()-H;if(f$1().record(U),x$1().add(1,{"org.id":G??"unknown"}),t06?.record(U,F.reduce((w,O)=>w+O.data.length,0)),F.length===0){console.warn(`[Decopilot] dropping oversized stream chunk for thread ${Z}`);return}for(let w of F)Y.publish(Q,w.subject,w.data,w.headers?HC$(w.headers):void 0)};return(async()=>{let N=$.getReader(),H=0,F=0,U;try{while(!0){let{done:w,value:O}=await N.read();if(w)break;if(W(O),F++,++H>=64)H=0,await new Promise((D)=>setImmediate(D))}}catch(w){U=w,console.warn(`[Decopilot] stream pump error for thread ${Z}:`,w?.message??w)}finally{if(N.releaseLock(),K(),p06)console.warn(JSON.stringify({msg:"decopilot-stream-diag",event:"pump-done",taskId:Z,publishedChunks:F,publishErrors:Y.errorCount}))}if(U!==void 0)throw U})()}async publishRawChunk($,Z,X){let G=this.js;if(!G)return!1;let Q=performance.now(),Y=md0(Z,{runId:$,dedup:X});if(f$1().record(performance.now()-Q),x$1().add(1),Y.length===0)return console.warn(`[Decopilot] dropping oversized raw chunk for thread ${$} (> MAX_CHUNKED_BYTES)`),!0;for(let J of Y)await G.publish(J.subject,J.data,{...J.headers?{headers:HC$(J.headers)}:{},...J.msgId?{msgID:J.msgId}:{}});return!0}async publishDone($,Z,X){let G=this.js;if(!G)return!1;let Q=N6$({runId:$,fenceToken:Z,finalSeq:X});return await G.publish(Q.subject,Q.data,{msgID:Q.msgId}),!0}async createTailStream($,Z,X){let G=this.js;if(!G)return console.warn(`[Decopilot] createTailStream: JetStream client unavailable for thread ${$}; no live tail`),null;let Q=X?.deliverPolicy==="new"?R3.DeliverPolicy.New:R3.DeliverPolicy.All,Y=X?.closeOnDone??!1,J=zw($),K;try{K=await(await G.consumers.get(tN,{filter_subjects:J,deliver_policy:Q})).consume()}catch(D){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",D?.message??D),null}let H=E90({messages:async function*(){try{for await(let D of K)yield{subject:D.subject,data:D.data,headers:D.headers}}finally{K.stop()}}(),onCancel:()=>K.stop()}).pipeThrough(O90()).pipeThrough(B90()).getReader(),F=!1,U=()=>{if(F)return;F=!0;try{H.releaseLock()}catch{}},w=!1,O=()=>{if(w)return;w=!0,K.stop(),H.cancel().catch(()=>{}),U()};return Z?.addEventListener("abort",O,{once:!0}),new ReadableStream({async pull(D){for(;;){let{done:L,value:E}=await H.read();if(L){O(),D.close();return}let z=E;if(z.kind==="done"){if(Y){O(),D.close();return}continue}D.enqueue(z.chunk);return}},cancel(){O()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge(tN,{filter:zw($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var R3,FC$,h06=($)=>{let Z;return()=>Z??=$()},u06,c06=86400000000000,l06=120000000000,d06=4294967296,m06=500000,n06,p06,t06;var wC$=B(()=>{v5();id0();z90();D90();X5();NC$();R3=M(yO(),1),FC$=M(ig(),1),u06=h06(()=>Q8.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"}));n06=process.env.STREAM_ENCODE_TRACE==="1",p06=process.env.DECOPILOT_STREAM_TRACE==="1";t06=n06?new UC$:null});function vE0($,Z,X,G){if(!G)return!1;return $.emit(Z,l3(X,G.status,{title:G.title??void 0,virtualMcpId:G.virtual_mcp_id??void 0,createdBy:G.created_by??void 0,triggerId:G.trigger_id??null,branch:G.branch??null,createdAt:G.created_at,updatedAt:G.updated_at})),!0}var OC$=B(()=>{U8()});class g$1{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}}import{readdir as a06,rm as bE0}from"fs/promises";import{join as fE0}from"path";async function xE0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-s06),Z.setUTCHours(0,0,0,0);let X=0;try{let G=await zC($);for(let Q of G)if(/^\d{4}$/.test(Q))X+=await BC$($,Q,Z);else if(!Q.startsWith(".")){let Y=fE0($,Q),J=await zC(Y);for(let W of J){if(!/^\d{4}$/.test(W))continue;X+=await BC$(Y,W,Z)}if((await zC(Y)).length===0)await bE0(Y,{recursive:!0,force:!0})}}catch(G){console.warn("monitoring retention cleanup failed:",G)}return X}async function BC$($,Z,X){let G=0,Q=fE0($,Z),Y=await zC(Q);for(let K of Y){if(!/^\d{2}$/.test(K))continue;let W=fE0(Q,K),N=await zC(W);for(let F of N){if(!/^\d{2}$/.test(F))continue;let U=new Date(`${Z}-${K}-${F}T00:00:00Z`);if(isNaN(U.getTime()))continue;if(U<X){let w=fE0(W,F);await bE0(w,{recursive:!0,force:!0}),G++}}if((await zC(W)).length===0)await bE0(W,{recursive:!0,force:!0})}if((await zC(Q)).length===0)await bE0(Q,{recursive:!0,force:!0});return G}async function zC($){try{return(await a06($)).filter((X)=>!X.startsWith("."))}catch{return[]}}var s06=30;var h$1=()=>{};import{DBOS as u$1,SchedulerMode as e06}from"@dbos-inc/dbos-sdk";async function Z16(){let $=[pY(),jC(),DW()],Z=0;for(let X of $)try{Z+=await xE0(X)}catch(G){console.error("[monitoring-retention] cleanup failed:",G)}return console.log(`[monitoring-retention] deleted ${Z} day-dir(s) across ${$.length} signal dir(s)`),{deleted:Z,dirs:$.length}}async function X16($,Z){await u$1.runStep(()=>Z16(),{name:"monitoringRetention"})}function LC$(){if(DC$)return;DC$=!0;let $=u$1.registerWorkflow(X16,{name:"monitoringRetentionWorkflow"});u$1.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:$16,mode:e06.ExactlyOncePerIntervalWhenActive})}var $16="23 4 * * *",DC$=!1;var EC$=B(()=>{hG();h$1()});function zC$($){return async(Z,X)=>{let G=await $.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["member.role","organization.id as orgId","organization.slug as orgSlug","organization.name as orgName"]).where("member.userId","=",X).where("member.organizationId","=",Z).executeTakeFirst();if(!G)return console.warn(`[automationContextFactory] User ${X} not found in org ${Z} \u2014 returning null`),null;let Q=await aU.create();Q.auth.user={id:X,role:G.role},Q.organization={id:G.orgId,slug:G.orgSlug,name:G.orgName};let Y=await $c0($.db,Z,G.role);return Q.boundAuth=eu0({auth:Q.authInstance,headers:new Headers,role:G.role,permissions:Y,userId:X}),Q.access=new vD(X,void 0,Q.boundAuth,G.role,"self"),a60(Q,{id:G.orgId,slug:G.orgSlug}),Q}}var jC$=B(()=>{bD();Wi()});function G16(){return{services:[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}],migrationsStatus:"pending",serverUrl:null,logs:[]}}function Y16(){for(let $ of Q16)$()}function PC$($){let Z=[...c$1.logs,$];c$1={...c$1,logs:Z.length>500?Z.slice(-500):Z},Y16()}function l$1(){return J16}var c$1,Q16,J16=!1;var d$1=B(()=>{c$1=G16(),Q16=new Set});import{EventEmitter as K16}from"events";var m$1;var AC$=B(()=>{d$1();m$1=new K16;m$1.on("request",($)=>{PC$($)})});function TC$(){return async($,Z)=>{let X=Date.now(),G=$.req.method,Q=$.req.path;if(Q==="/api/auth/get-session"||Q.includes("favicon")){await Z();return}let Y="",J=!1;if(Q.startsWith("/mcp")&&G==="POST"){J=!0;try{if($.req.header("Content-Type")?.includes("application/json")){let U=await $.req.raw.clone().json();if(U.method==="tools/call"&&U.params?.name){let w=zg(U.params.name),O=U.params.arguments||{},D=Object.keys(O).map((E)=>zg(E)),L=D.length>0?D.slice(0,3).join(",")+(D.length>3?"\u2026":""):"";Y=`${m6.tool}${w}${m6.dim}(${L})${m6.reset}`}else if(U.method)Y=`${m6.dim}${zg(U.method)}${m6.reset}`}}catch{}}let K=zg(Q);if(Q.startsWith("/mcp/conn_")){let H=Q.split("/")[2]??"";K=`/mcp/${m6.mcp}${zg(H.slice(0,12))}\u2026${m6.reset}`}else if(Q==="/mcp")K=`${m6.mcp}/mcp${m6.reset}`;else if(Q==="/mcp/registry")K=`${m6.mcp}/mcp/registry${m6.reset}`;let W=N16(G),N=J?"\u25C0":"\u2190";if(!l$1())console.log(`${m6.dim}${N}${m6.reset} ${W}${G}${m6.reset} ${K}${Y?` ${Y}`:""}`);try{await Z()}finally{let H=Date.now()-X,F=$.res.status,U=W16(F),w=H<1000?`${H}ms`:`${(H/1000).toFixed(1)}s`,O=J?"\u25B6":"\u2192";if(!l$1())console.log(`${m6.dim}${O}${m6.reset} ${W}${G}${m6.reset} ${K}${Y?` ${Y}`:""} ${U}${F}${m6.reset} ${m6.duration}${w}${m6.reset}`);m$1.emit("request",{method:G,path:zg(Q),status:F,duration:H,timestamp:new Date})}}}var m6,W16=($)=>{if($>=500)return m6.serverError;if($>=400)return m6.clientError;if($>=300)return m6.redirect;return m6.ok},N16=($)=>{return m6[$]||m6.reset},zg=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var RC$=B(()=>{d$1();AC$();m6={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 kC$}from"crypto";import{mkdir as H16,readdir as F16,rm as IC$,stat as SC$}from"fs/promises";import{join as n$1,relative as U16}from"path";import{z as B$}from"zod";function CC$($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return n$1(w16,Z)}function _C$($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function i$1($,Z){let X=CC$($),G=_C$(Z);return n$1(X,G)}function O16($,Z,X,G){let Q=m0().encryptionKey||"dev-secret",Y=`${$}:${Z}:${X}:${G}`;return kC$("sha256",Q).update(Y).digest("hex")}function MC$($,Z,X,G,Q){let Y=Math.floor(Date.now()/1000)+G,J=O16(Z,X,Y,Q),K=new URL(`/api/dev-assets/${Z}/${_C$(X)}`,$);return K.searchParams.set("expires",Y.toString()),K.searchParams.set("signature",J),K.searchParams.set("method",Q),K.toString()}function vC$($,Z,X){let G=`${$}:${Z.getTime()}:${X}`;return`"${kC$("md5","etag").update(G).digest("hex")}"`}async function bC$($,Z,X,G,Q){try{let Y=await F16($,{withFileTypes:!0});for(let J of Y){let K=n$1($,J.name),N=U16(Z,K).replace(/\\/g,"/");if(X&&!N.startsWith(X))continue;if(J.isDirectory())if(G){let H=N+"/";if(!X||H.startsWith(X)){if(!(X?N.slice(X.length):N).includes("/"))Q.commonPrefixes.add(H)}}else await bC$(K,Z,X,G,Q);else if(J.isFile()){if(G&&X){let H=N.slice(X.length);if(H.includes(G)){let F=H.indexOf(G),U=X+H.slice(0,F+1);Q.commonPrefixes.add(U);continue}}try{let H=await SC$(K);Q.objects.push({key:N,size:H.size,lastModified:H.mtime.toISOString(),etag:vC$(K,H.mtime,H.size)})}catch{}}}}catch{}}function fC$($,Z){let G=$0($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:B$.object({prefix:B$.string().optional(),maxKeys:B$.number().optional().default(1000),continuationToken:B$.string().optional(),delimiter:B$.string().optional()}),outputSchema:B$.object({objects:B$.array(B$.object({key:B$.string(),size:B$.number(),lastModified:B$.string(),etag:B$.string()})),nextContinuationToken:B$.string().optional(),isTruncated:B$.boolean(),commonPrefixes:B$.array(B$.string()).optional()}),handler:async(Q)=>{let Y=Q,J=Y.prefix||"",K=Y.maxKeys??1000,W=Y.delimiter,N=Y.continuationToken,H=CC$(G);await H16(H,{recursive:!0});let F={objects:[],commonPrefixes:new Set};await bC$(H,H,J,W,F),F.objects.sort((L,E)=>L.key.localeCompare(E.key));let U=0;if(N){if(U=F.objects.findIndex((L)=>L.key>N),U===-1)U=F.objects.length}let w=F.objects.slice(U,U+K),O=U+K<F.objects.length,D=O?w[w.length-1]?.key:void 0;return{objects:w,isTruncated:O,nextContinuationToken:D,commonPrefixes:Array.from(F.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:B$.object({key:B$.string()}),outputSchema:B$.object({contentType:B$.string().optional(),contentLength:B$.number(),lastModified:B$.string(),etag:B$.string(),metadata:B$.record(B$.string(),B$.string()).optional()}),handler:async(Q)=>{let Y=Q,J=i$1(G,Y.key),K=await SC$(J);return{contentType:c01(Y.key),contentLength:K.size,lastModified:K.mtime.toISOString(),etag:vC$(J,K.mtime,K.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:B$.object({key:B$.string(),expiresIn:B$.number().optional()}),outputSchema:B$.object({url:B$.string(),expiresIn:B$.number()}),handler:async(Q)=>{let Y=Q,J=Y.expiresIn??qC$;return{url:MC$(Z,G,Y.key,J,"GET"),expiresIn:J}}},{name:"PUT_PRESIGNED_URL",description:"Generate a presigned URL for uploading a file to local storage",inputSchema:B$.object({key:B$.string(),expiresIn:B$.number().optional(),contentType:B$.string().optional()}),outputSchema:B$.object({url:B$.string(),expiresIn:B$.number()}),handler:async(Q)=>{let Y=Q,J=Y.expiresIn??qC$;return{url:MC$(Z,G,Y.key,J,"PUT"),expiresIn:J}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:B$.object({key:B$.string()}),outputSchema:B$.object({success:B$.boolean(),key:B$.string()}),handler:async(Q)=>{let Y=Q,J=i$1(G,Y.key);try{return await IC$(J),{success:!0,key:Y.key}}catch{return{success:!1,key:Y.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:B$.object({keys:B$.array(B$.string()).max(1000)}),outputSchema:B$.object({deleted:B$.array(B$.string()),errors:B$.array(B$.object({key:B$.string(),message:B$.string()}))}),handler:async(Q)=>{let Y=Q,J=[],K=[];return await Promise.all(Y.keys.map(async(W)=>{let N=i$1(G,W);try{await IC$(N),J.push(W)}catch(H){K.push({key:W,message:H instanceof Error?H.message:"Unknown error"})}})),{deleted:J,errors:K}}}]}async function p$1($,Z,X){let G=fC$(Z,X),Q=new BN({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:J5});for(let J of G){let K="shape"in J.inputSchema?J.inputSchema.shape:B$.object({}).shape,W=J.outputSchema&&"shape"in J.outputSchema?J.outputSchema.shape:B$.object({}).shape;Q.registerTool(J.name,{description:J.description??"",inputSchema:K,outputSchema:W,annotations:J.annotations,_meta:J._meta},async(N)=>{try{let H=await J.handler(N);return{content:[{type:"text",text:JSON.stringify(H)}],structuredContent:H}}catch(H){return{content:[{type:"text",text:`Error: ${H.message}`}],isError:!0}}})}let Y=new AQ({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await Q.connect(Y),gK(Q,Y,$,"mcp:dev-assets")}async function xC$($,Z,X,G){let Y=fC$(X,G).find((J)=>J.name===$);if(!Y)return{content:[{type:"text",text:`Tool not found: ${$}`}],isError:!0};try{let J=await Y.handler(Z);return{content:[{type:"text",text:JSON.stringify(J)}]}}catch(J){return{content:[{type:"text",text:J instanceof Error?J.message:String(J)}],isError:!0}}}var w16="./data/assets",qC$=3600,VC$,yC$;var gC$=B(()=>{k$();Dn();i8();pc();Px();PX();tL0();VC$=new E1;VC$.all("/",async($)=>{let Z=$.get("studioContext"),X=new URL($.req.url),G=`${X.protocol}//${X.host}`;return p$1($.req.raw,Z,G)});yC$=VC$});var hC$={};W4(hC$,{mountDevRoutes:()=>B16});function B16($,Z){$.all("/mcp/:connectionId{.*_dev-assets$}",Z,async(G)=>{let Q=G.get("studioContext"),Y=new URL(G.req.url),J=`${Y.protocol}//${Y.host}`;return p$1(G.req.raw,Q,J)}),$.all("/mcp/:connectionId{.*_dev-assets$}/call-tool/:toolName",Z,async(G)=>{let Q=G.get("studioContext"),Y=new URL(G.req.url),J=`${Y.protocol}//${Y.host}`,K=G.req.param("toolName");if(!K)return G.json({error:"Missing tool name"},400);let W=await G.req.json(),N=await xC$(K,W,Q,J);if(N.isError)return G.json(N.content,500);return G.json(N.content)}),$.use("/mcp/dev-assets",Z),$.route("/mcp/dev-assets",yC$);let X=new E1;X.use("*",A3({mountPath:"/api/dev-assets"})),X.route("/",pL0({orgFromPath:!1})),$.route("/api/dev-assets",X)}var uC$=B(()=>{i8();v01();tL0();gC$()});import{sql as D16}from"kysely";import{randomUUID as cC$}from"crypto";import{z as L16}from"zod";async function z16($){let Z=new Date().toISOString(),X=cC$(),G=f4.SELF($.organizationId),Q="registry.publish_request.created",Y={requestId:$.request.id,requestedId:$.request.requested_id,title:$.request.title,status:$.request.status,createdAt:$.request.created_at,requester:{name:$.request.requester_name,email:$.request.requester_email}};await $.db.insertInto("events").values({id:X,organization_id:$.organizationId,type:"registry.publish_request.created",source:G,specversion:"1.0",subject:$.request.id,time:Z,datacontenttype:"application/json",dataschema:null,data:JSON.stringify(Y),cron:null,status:"pending",attempts:0,last_error:null,next_retry_at:null,created_at:Z,updated_at:Z}).execute();let J=await $.db.selectFrom("event_subscriptions").select(["id"]).where("organization_id","=",$.organizationId).where("enabled","=",1).where("event_type","=","registry.publish_request.created").where((K)=>K.or([K("publisher","is",null),K("publisher","=",G)])).execute();if(J.length>0)await $.db.insertInto("event_deliveries").values(J.map((K)=>({id:cC$(),event_id:X,subscription_id:K.id,status:"pending",attempts:0,last_error:null,delivered_at:null,next_retry_at:null,created_at:Z}))).execute();try{await D16`SELECT
2720
2720
  pg_notify('studio_events', ${X}),
2721
2721
  pg_notify('mesh_events', ${X})
2722
2722
  `.execute($.db)}catch{}}async function j16($,Z){let G=(await $.selectFrom("organization").select(["id"]).where("id","=",Z).execute())[0];if(G?.id)return G.id;return(await $.selectFrom("organization").select(["id"]).where("slug","=",Z).execute())[0]?.id??null}async function P16($,Z){let X=await $.selectFrom("virtual_mcp_plugin_configs").innerJoin("connections","connections.id","virtual_mcp_plugin_configs.virtual_mcp_id").select(["virtual_mcp_plugin_configs.settings as settings"]).where("connections.organization_id","=",Z).where("virtual_mcp_plugin_configs.plugin_id","=",jE).execute();for(let G of X){let Q=G.settings,Y=typeof Q==="string"?(()=>{try{return JSON.parse(Q)}catch{return{}}})():Q??{};if(Y.acceptPublishRequests===!0){let J=Y.rateLimitWindow==="minute"?"minute":"hour",K=Y.rateLimitMax,W=typeof K==="number"&&Number.isFinite(K)&&K>=1?Math.floor(K):dC$;return{acceptPublishRequests:!0,requireApiToken:Y.requireApiToken===!0,rateLimitEnabled:Y.rateLimitEnabled===void 0?lC$:Y.rateLimitEnabled===!0,rateLimitWindow:J,rateLimitMax:W}}}return{acceptPublishRequests:!1,requireApiToken:!1,rateLimitEnabled:lC$,rateLimitWindow:E16,rateLimitMax:dC$}}async function A16($,Z,X){let G=X==="minute"?60000:3600000,Q=new Date(Date.now()-G).toISOString(),Y=await $.selectFrom("private_registry_publish_request").select((J)=>J.fn.countAll().as("count")).where("organization_id","=",Z).where("created_at",">=",Q).executeTakeFirst();return Number(Y?.count??0)}async function T16($,Z,X,G){let Q=await $.selectFrom("private_registry_item").select(["id","title"]).where("organization_id","=",Z).where((Y)=>Y.or([Y("id","=",X),Y("title","=",G)])).executeTakeFirst();return Q?{id:String(Q.id),title:String(Q.title)}:null}function mC$($){let{db:Z,db:X}=$,G=new Zf(X),Q=new Xf(X);return async(Y)=>{let J=Y.req.param("orgRef")??Y.req.param("org");if(!J)return Y.json({error:"Organization not found"},404);let K=await j16(Z,J);if(!K)return Y.json({error:"Organization not found"},404);let W=await P16(Z,K);if(!W.acceptPublishRequests)return Y.json({error:"Publish requests are not enabled for this registry."},403);if(W.requireApiToken){let w=Y.req.header("Authorization"),O=w?.startsWith("Bearer ")?w.slice(7).trim():null;if(!O)return Y.json({error:"API key required. Use Authorization: Bearer <key>"},401);if(!await Q.validate(K,O))return Y.json({error:"Invalid API key"},401)}if(W.rateLimitEnabled){if(await A16(X,K,W.rateLimitWindow)>=W.rateLimitMax)return Y.json({error:"Too many publish requests. Please try again later.",retryAfterSeconds:W.rateLimitWindow==="minute"?60:3600},429)}let N;try{N=await Y.req.json()}catch{return Y.json({error:"Invalid JSON body"},400)}let H=aU$.safeParse(N);if(!H.success)return Y.json({error:"Invalid publish request payload",details:L16.treeifyError(H.error)},400);let F=await T16(X,K,H.data.data.id,H.data.data.title);if(F)return Y.json({error:"A registry item with the same id or title already exists. Please use a different name/id.",conflict:F},409);let U=await G.createOrUpdate({organization_id:K,requested_id:H.data.data.id,title:H.data.data.title,description:H.data.data.description??null,_meta:H.data.data._meta,server:H.data.data.server,requester_name:H.data.requester?.name??null,requester_email:H.data.requester?.email??null});try{await z16({db:Z,organizationId:K,request:U})}catch(w){console.warn("[private-registry] failed to emit publish-request event:",w)}return f1.capture({distinctId:H.data.requester?.email??`org:${K}`,event:"registry_publish_request_submitted",groups:{organization:K},properties:{organization_id:K,request_id:U.id,requested_id:U.requested_id,title:H.data.data.title,requester_email:H.data.requester?.email??null}}),Y.json({id:U.id,requested_id:U.requested_id,status:U.status},201)}}var lC$=!0,E16="hour",dC$=100;var iC$=B(()=>{O6();U8();jy();Ry0();Iy0();o5()});var nC$={};W4(nC$,{createPublishRequestHandler:()=>mC$,createPublicMCPHandler:()=>Gw$});var pC$=B(()=>{zy();iC$()});var Z_$={};W4(Z_$,{watchHandler:()=>$_$,resolveCorsOrigin:()=>eC$,isSsoExemptPath:()=>sC$,createApp:()=>f16});import{readFileSync as R16}from"fs";import{PrometheusSerializer as I16}from"@opentelemetry/exporter-prometheus";import{DBOS as jg}from"@dbos-inc/dbos-sdk";import{oAuthDiscoveryMetadata as V16,oAuthProtectedResourceMetadata as C16}from"better-auth/plugins";async function q16($){let Z=$.connect(),X;try{X=await Promise.race([Z,oC$(tC$)])}catch{return Z.then((G)=>G.release(!0)).catch(()=>{}),!1}try{return await Promise.race([X.query("SELECT 1"),oC$(tC$)]),X.release(),!0}catch{return X.release(!0),!1}}function oC$($){return new Promise((Z,X)=>setTimeout(()=>X(Error("pg health-check timeout")),$))}async function M16($,Z){let{items:X}=await $.storage.connections.list(Z,{where:{field:["connection_url"],operator:"like",value:`${wq1}%`},limit:1}),G=X[0];if(!G?.configuration_state)return null;return G.configuration_state.project_locator}function k16($){let Z=new URLSearchParams;if($){let[X,G]=$.split("/");if(X)Z.set("workspace_hint",X);if(G)Z.set("project_hint",G)}else Z.set("auto_personal","true");return Z.set("force_new","true"),Z}function sC$($){return $.startsWith("/api/org-sso/")||$.startsWith("/api/auth/")||$.startsWith("/api/tools/management")||$.startsWith("/oauth-proxy/")||/^\/api\/[^/]+\/oauth-proxy\//.test($)||$.startsWith(`${Ae0}/`)}function eC$($,{baseUrl:Z,requestOrigin:X}){let G;try{G=new URL($).hostname}catch{return null}if(G==="localhost"||G==="127.0.0.1")return $;let Q=Z??X;try{if(new URL(Q).origin===$)return $}catch{}return null}async function f16($={}){let Z=$.database??C8(),X=!1;n5.stop().catch((p)=>{console.error("[SSEHub] Error stopping previous broadcast (HMR cleanup):",p)});let G,Q,Y=new _$1,J,K,W,N=null;if($.disableNats)J=v$1(),G={get:async()=>null,set:async()=>{},invalidate:async()=>{},teardown:()=>{}},Q=new Ln,K={start:async()=>{},broadcast:()=>{},publishControlFrame:()=>{},stop:async()=>{}},W={init:async()=>{},pump:(p)=>{return(async()=>{let U0=p.getReader();try{while(!0){let{done:L0}=await U0.read();if(L0)break}}catch{}finally{U0.releaseLock()}})()},publishRawChunk:async()=>!1,publishDone:async()=>!1,createTailStream:async()=>null,purge:()=>{},teardown:()=>{}};else{N=ZC$();let p=m0().natsCredsPath,U0;if(p)try{U0=R16(p,"utf8")}catch(A1){console.error(`[app] failed to read NATS_CREDS at ${p}; connecting anonymously`,A1)}N.init(m0().natsUrls,U0?{creds:U0}:void 0);let L0=vy0()?new Pf0({getJetStream:()=>N.getJetStream()}):null;L0?.init().catch(()=>{}),G=L0;let G1=new Ui0({getJetStream:()=>N.getJetStream()});G1.init().catch(()=>{}),Q=G1,J=v$1({getConnection:()=>N.getConnection()}),K=new b$1({getConnection:()=>N.getConnection()}),W=new y$1({getConnection:()=>N.getConnection(),getJetStream:()=>N.getJetStream()}),$T$(N),N.onReady(()=>{L0?.init().catch((A1)=>{console.error("[McpListCache] Deferred init failed:",A1)}),G1.init().catch((A1)=>{console.error("[ConnectionCircuitStore] Deferred init failed:",A1)}),J.start(),am1(()=>N.getConnection()),W.init().catch((A1)=>{console.warn("[Decopilot] StreamBuffer init failed (late-join disabled):",A1)})})}if(Pg)await Pg();Af0(G),wi0(Q);let F={storage:new Nf(Z.db),sseHub:n5},U=new Zm0(F),w=new vd(Z.db),O=new g$1(w);O.start(),K.start((p)=>{_L0(p),U.execute({type:"CANCEL",taskId:p}).catch((U0)=>{console.error("[Decopilot] CancelBroadcast execute failed:",U0)})}).catch((p)=>{console.error("[Decopilot] CancelBroadcast start failed:",p)}),N?.onReady(()=>{K.start().catch((p)=>{console.error("[CancelBroadcast] Deferred start failed:",p)})});let D=()=>N?.getConnection()??null;q01(D),N?.onReady(()=>q01(D)),W.init().catch((p)=>{console.warn("[Decopilot] StreamBuffer init failed, attach/late-join disabled:",p)}),Pg=async()=>{await U.stopAll(),U.dispose(),O.dispose(),K.stop().catch(()=>{}),e2$(),W.teardown(),G?.teardown(),Y.teardown(),J.teardown(),sm1(),Q.teardown(),Af0(null),wi0(null)};let L=new E1;if(L.use("*",NC0({enabled:(p)=>Nv(p,"debug")==="1"})),L.use("*",Xz0),L.use("/*",sq1({origin:(p,U0)=>eC$(p,{baseUrl:m0().baseUrl,requestOrigin:new URL(U0.req.url).origin}),credentials:!0,allowMethods:["GET","POST","PUT","DELETE","OPTIONS"],allowHeaders:["Content-Type","Authorization","mcp-protocol-version"],exposeHeaders:["WWW-Authenticate"]})),L.use("*",async(p,U0)=>{if(await U0(),p.req.path.includes("/files/"))return;if(p.req.path.includes("/fs/")&&p.req.path.endsWith("/read"))return;p.header("X-Frame-Options","DENY"),p.header("Content-Security-Policy","frame-ancestors 'none'")}),!m0().noTui)L.use("*",TC$());L.use("*",async(p,U0)=>{if(await U0(),qg(p.req.path))return;if(p.res.status>=500){let G1=await p.res.clone().text();console.error(`[5xx Response] ${p.req.method} ${p.req.path} - ${p.res.status}:`,G1)}}),L.get(_Z.HEALTH,(p)=>{if(X)return p.json({status:"shutting_down"},503);return p.json({status:"ok"})}),L.get(_Z.HEALTH_LIVE,(p)=>{return p.json({status:"ok"})}),L.get(_Z.HEALTH_READY,async(p)=>{if(X)return p.json({status:"shutting_down"},503);let U0={};if(U0.postgres={status:await q16(Z.pool)?"up":"down"},N)U0.nats=N.isConnected()?{status:"up"}:{status:"down"};else U0.nats={status:"down"};let L0=U0.postgres.status==="up",G1=L0?200:503;return p.json({status:L0?"ready":"not_ready",services:U0},G1)}),L.get(_Z.METRICS,async(p)=>{try{let U0=await Jz0.collect(),L0=S16.serialize(U0.resourceMetrics);return p.text(L0,200,{"Content-Type":"text/plain; version=0.0.4; charset=utf-8"})}catch(U0){return console.error("Failed to collect metrics:",U0),p.text("# Error collecting metrics",500)}}),L.get(`${_Z.DBOS_QUEUE_DEPTH_PREFIX}:queueName`,async(p)=>{let U0=p.req.param("queueName");if(!_16.has(U0))return p.json({error:`Unknown queue: ${U0}`},404);let L0=await jg.listQueuedWorkflows({queueName:U0,status:"ENQUEUED"});return p.json({queue_length:L0.length})}),L.get(_Z.HOSTED_RUN_PENDING,(p)=>{let{active:U0,pending:L0,max:G1}=c6$();return p.json({pending:L0,active:U0,max:G1})}),L.route("/api/config",zV$),L.route("/api/_reports",SV$),L.route("/api/_stripe",S$1),L.route("/report",MV$($.clientDir)),L.route("/api/auth/custom",RT$),L.route("/api/auth/desktop",MT$),L.all("/api/auth/admin/*",CT$),L.all("/api/auth/*",async(p)=>{return await B8.handler(p.req.raw)});let E=Ca1();E.use("/.well-known/oauth-protected-resource/mcp/:connectionId",GC),E.use("/mcp/:connectionId/.well-known/oauth-protected-resource",GC),L.route("/",E),L.get("/.well-known/oauth-protected-resource/api/:org/mcp/:connectionId",Ni),L.route("/",fa1()),L.use("/oauth-proxy/:connectionId/*",GC),L.all("/oauth-proxy/:connectionId/*",rC$);let z=async(p)=>{let L0=await v16()(p.req.raw),G1=await L0.json();return Response.json(G1,L0)};L.use("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",GC),L.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",z);let j=async(p)=>{let L0=await b16()(p.req.raw),G1=await L0.json();return Response.json(G1,L0)};L.get("/.well-known/oauth-authorization-server/*/:gateway?/:connectionId?",j);let A=aA$({ttlMs:120000}),P=await Da1({db:Z.db,auth:B8,encryption:{key:m0().encryptionKey},observability:{tracer:fH,meter:Q8},modelListCache:Y,providerKeyCache:J,memberRoleCache:A});aU.set(P);let q=new WN(m0().encryptionKey);yI1({db:Z.db,baseUrl:nX()});let C=W40(Z.db),k=new Rd(Z.db),_=zC$({db:Z.db});Ki0({storage:C,studioContextFactory:_}),Lm0({studioContextFactory:_,deps:{runRegistry:U,cancelBroadcast:K,streamBuffer:W,sseHub:n5}}),Hm0({dispatchRunFn:t2$,studioContextFactory:_,deps:{runRegistry:U,cancelBroadcast:K,streamBuffer:W,sseHub:n5}});let l=new Nf(Z.db),b=new yD(Z.db);T6$({getJetStream:()=>N?.getJetStream()??null,getJetStreamManager:async()=>{let p=N?.getConnection();return p?await aC$.jetstreamManager(p):null},messageParts:l.messageParts(),resolveRun:async(p)=>{let U0=await Z.db.selectFrom("threads").select(["organization_id","created_by","message_storage_version","status","run_fence_token","title"]).where("id","=",p).executeTakeFirst();return U0?{orgId:U0.organization_id,createdBy:U0.created_by,version:U0.message_storage_version??1,status:U0.status,runFenceToken:U0.run_fence_token,title:U0.title??null}:null},completeRunIfNotCompleted:async(p,U0)=>{let L0=await l.completeRunIfNotCompleted(p,U0);if(vE0(n5,U0,p,L0),L0)await Wn(b,p,U0),Im0({contextFactory:_,taskBoard:b,threadId:p,orgId:U0});return L0},markRunRequiresAction:async(p,U0)=>{let L0=await l.requiresActionIfInProgress(p,U0);return vE0(n5,U0,p,L0),L0},markRunFailed:async(p,U0,L0,G1)=>{let A1=await l.markRunFailed(p,U0,L0,G1);if(vE0(n5,U0,p,A1),A1)await Wn(b,p,U0),Im0({contextFactory:_,taskBoard:b,threadId:p,orgId:U0});return A1},clearSynthesizedError:async(p,U0)=>{await l.messageParts().replaceMessageParts(p,Pw(p,U0),[])},persistTitle:(p,U0,L0)=>l.update(p,U0,{title:L0}),onTitleUpdated:async({runId:p,orgId:U0,title:L0})=>{let G1=await l.get(p,U0).catch(()=>null);n5.emit(U0,l3(p,G1?.status??"in_progress",{title:L0,virtualMcpId:G1?.virtual_mcp_id??void 0,createdBy:G1?.created_by,triggerId:G1?.trigger_id,branch:G1?.branch??null,createdAt:G1?.created_at,updatedAt:G1?.updated_at}))},bumpProgress:async({runId:p,orgId:U0})=>{await l.bumpProgress(p,U0)},recordCompleted:async({runId:p,orgId:U0,distinctId:L0,usage:G1})=>{f1.capture({distinctId:L0,event:"chat_message_completed",groups:{organization:U0},properties:{organization_id:U0,thread_id:p,transport:"projector",input_tokens:G1.inputTokens,output_tokens:G1.outputTokens,total_tokens:G1.totalTokens}})},recordFailed:async({runId:p,orgId:U0,distinctId:L0,reason:G1,kind:A1})=>{f1.capture({distinctId:L0,event:"chat_message_failed",groups:{organization:U0},properties:{organization_id:U0,thread_id:p,transport:"projector",error_category:A1,error_message:G1}})},purgeRun:async(p)=>{W.purge(p)}}),R2$({studioContextFactory:_,systemDatabaseUrl:pI1(m0().databaseUrl,m0().databasePgSsl),streamBuffer:W}),LC$(),gI1(),Fq1();let x=async(p,U0,L0)=>{let G1=await C.findById(p,U0);if(!G1)throw Error("Automation not found");return Hi0({automationId:G1.id,organizationId:G1.organization_id,triggerId:null})},n=new $g(C,({automation:p,trigger:U0,contextMessages:L0,idempotencyKey:G1})=>Bn({automationId:p.id,organizationId:p.organization_id,triggerId:U0.id,contextMessages:L0},{idempotencyKey:G1})),d=[pY(),jC(),DW()];for(let p of d)xE0(p).then(()=>{}).catch((U0)=>console.error("[monitoring] Retention cleanup failed:",U0));let Y0=()=>Z.db.deleteFrom("apikey").where("expiresAt","<",new Date).execute().then(()=>{}).catch((p)=>console.error("[auth] Expired API key cleanup failed:",p));Y0(),setInterval(Y0,86400000).unref(),L.use("*",async(p,U0)=>{if($z0(p.req.path))return U0();let L0={measure:async(A1,s$)=>{$Y(p,A1);try{return await s$()}finally{XQ(p,A1)}}},G1=await aU.create(p.req.raw,{timings:L0});G1.automationRunner=x,p.set("studioContext",G1);try{await U0()}finally{let A1=G1.pendingRevalidations;if(A1.length>0)Promise.race([Promise.allSettled(A1),V8(30000)]).catch((x0)=>console.error("[studio] revalidation cleanup error:",x0))}}),L.use("/api/:org/decopilot/*",QC),L.use("/api/:org/v1/*",QC),L.use("/api/:org/files/*",QC),L.use("*",async(p,U0)=>{if(sC$(p.req.path))return U0();let L0=p.get("studioContext");if(!L0?.organization?.id||!L0?.auth?.user?.id)return U0();if(!(await L0.storage.orgSsoConfig.getByOrgId(L0.organization.id))?.enforced)return U0();if(!await L0.storage.orgSsoSessions.isValid(L0.auth.user.id,L0.organization.id))return p.json({error:"SSO authentication required for this organization"},403);return U0()});let O0=new E1;O0.use("*",A3({mountPath:"/api/org-sso"})),O0.route("/",GL0()),L.route("/api/org-sso",O0),L.get("/api/tools/management",(p)=>{return p.json({tools:FC0,grouped:fB()})}),L.use("/mcp/*",async(p,U0)=>{$Y(p,"mcp");try{return await U0()}finally{XQ(p,"mcp")}});let T0=async(p,U0)=>{let L0=p.var.studioContext;if(!L0.auth.user?.id&&!L0.auth.apiKey?.id){let G1=new URL(p.req.url),A1=p.req.header("x-forwarded-proto")?.split(",")[0]?.trim(),s$=A1?`${A1}://${G1.host}`:G1.origin;return p.res=new Response(null,{status:401,headers:{"WWW-Authenticate":`Bearer realm="mcp",resource_metadata="${s$}${G1.pathname}/.well-known/oauth-protected-resource"`}})}return await U0()};if(L.use("/mcp/:connectionId?",T0),L.use("/mcp/gateway/:virtualMcpId?",T0),L.use("/mcp/virtual-mcp/:virtualMcpId?",T0),L.use("/mcp/self",T0),DJ()){let{mountDevRoutes:p}=(uC$(),lE0(hC$));p(L,T0)}let a=new E1;a.use("*",A3({mountPath:"/mcp"})),a.route("/",$Z0()),L.route("/mcp",a);let o=new E1;o.use("*",A3({mountPath:"/mcp/self"})),o.route("/",TE0()),L.route("/mcp/self",o);let P0=new E1;P0.use("*",A3({mountPath:"/mcp"})),P0.route("/",GZ0()),L.route("/mcp",P0),L.use("/api/:org/models/*",async(p,U0)=>{$Y(p,"llm_models");try{return await U0()}finally{XQ(p,"llm_models")}});let Z0=C01({cancelBroadcast:K,streamBuffer:W,runRegistry:U});L.route("/api",Z0),L.use("/api/:org/files/*",QC),L.route("/api",gV$);let A0=new E1;A0.use("*",A3({mountPath:"/api"})),A0.route("/",RE0()),L.route("/api",A0),L.route("/api",OV$);let u0=new E1;u0.use("*",A3({mountPath:"/api"})),u0.route("/",IE0({tokenStorage:k,automationEventDispatcher:n})),L.route("/api",u0);let V0=new qd(Z.db),g0=new E1;g0.use("*",A3({mountPath:"/api"})),g0.route("/",mL0()),L.route("/api",g0),L.route("/api/deco-sites",jq$()),L.route("/api/deco-apps",WV$());let X0=new E1;X0.use("*",A3({mountPath:"/api/deco-sites"})),X0.route("/",nL0()),L.route("/api/deco-sites",X0);let{createPublishRequestHandler:B0,createPublicMCPHandler:z0}=await Promise.resolve().then(() => (pC$(),nC$)),I0={db:Z.db,vault:{encrypt:(p)=>q.encrypt(p),decrypt:(p)=>q.decrypt(p)}},r=B0(I0),G0=z0(I0);L.use("/org/:orgRef/registry/publish-request",GC),L.post("/org/:orgRef/registry/publish-request",r),L.use("/org/:orgSlug/registry/*",GC),L.all("/org/:orgSlug/registry/*",G0),L.post("/api/:org/registry/publish-request",r),L.all("/api/:org/registry/*",G0),L.route(Ae0,_T$());let M0=JV$({kvStorage:V0,runRegistry:U,streamBuffer:W,sseHub:n5,cancelBroadcast:K,tokenStorage:k,automationEventDispatcher:n,mountDevAssets:DJ(),mcpAuth:T0,oauthProxyHandler:rC$,watchHandler:$_$,betterAuthProtectedResourceHandler:z,getNatsConnection:()=>N?.getConnection()??null});return L.route("/api/:org",M0),L.notFound((p)=>{return p.json({error:"Not Found",path:p.req.path},404)}),L.onError(Kq$),Object.assign(L,{markShuttingDown:()=>{X=!0},shutdown:async()=>{if(console.log("[shutdown] Stopping workers..."),await Promise.allSettled([n5.stop(),Pg?Promise.resolve(Pg()).finally(()=>{Pg=null}):Promise.resolve()]),N)await N.drain().catch((p)=>console.error("[shutdown] NATS drain error:",p));console.log("[shutdown] Flushing telemetry..."),await gQ().catch((p)=>console.error("[shutdown] Telemetry flush error:",p)),console.log("[shutdown] Closing database..."),await oI1(Z).catch((p)=>console.error("[shutdown] Database close error:",p)),console.log("[shutdown] Cleanup complete.")},initDbos:async()=>{await jg.registerQueue(yQ,{partitionQueue:!0,concurrency:Qi0,minPollingIntervalMs:Yi0}),await jg.registerQueue(nY,{partitionQueue:!0,concurrency:Bm0}),await jg.registerQueue(BW,{partitionQueue:!0,concurrency:Nm0}),await jg.registerQueue(_H,{partitionQueue:!0,concurrency:T2$}),await f01(C),await Promise.allSettled(["automations-gate","automations-global"].map((p)=>jg.deleteQueue(p))),await Ji0(Z.pool),dg1().catch((p)=>{console.error("[studio-pack-backfill] failed:",p)}),hI1().catch((p)=>{console.error("[org-fs] public-sets boot sync kick failed:",p)})}})}var aC$,tC$=5000,Pg=null,rC$=async($)=>{let Z=$.req.param("connectionId");if(!Z)return $.json({error:"Missing connectionId"},400);let X=$.req.path.split("/").filter(Boolean),G=X[X.length-1],Q=$.get("studioContext");if(!Q)Q=await aU.create($.req.raw),$.set("studioContext",Q);let Y=$.req.param("org")?Q.organization?.id:void 0,J=await Q.storage.connections.findById(Z,Y);if(!J?.connection_url)return $.json({error:"Connection not found"},404);let K=await nf(J.connection_url),W,N=new URL(J.connection_url),F=(typeof J.metadata?.oauthResource==="string"&&J.metadata.oauthResource.length>0?J.metadata.oauthResource:void 0)??J.connection_url;if(K.ok)W=(await K.json()).authorization_servers?.[0];if(!W)W=N.origin;let U=await Hi(W);if(!U.ok)return $.json({error:"Failed to get auth server metadata"},502);let w=await U.json(),O;if(G==="authorize")O=w.authorization_endpoint;else if(G==="token")O=w.token_endpoint;else if(G==="register")O=w.registration_endpoint;if(!O)return $.json({error:`Unknown OAuth endpoint: ${G}`},404);let D=new URL(O),L=new URL($.req.url);if(D.search=L.search,G==="authorize"){let l=D.searchParams.get("redirect_uri");if(l){let b=m0().baseUrl??L.origin;try{let x=new URL(l),n=new URL(b);if(!(x.origin===n.origin||x.hostname==="localhost"))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)}D.searchParams.set("redirect_uri",l)}if(D.searchParams.has("resource"))D.searchParams.set("resource",F);if(Oq1(J.connection_url))try{let b=await M16(Q,J.organization_id),x=k16(b);for(let[n,d]of x)D.searchParams.set(n,d)}catch(b){console.warn("[oauth-proxy] Failed to get smart OAuth params, proceeding without:",b)}return $.redirect(D.toString(),302)}let E={Accept:$.req.header("Accept")||"application/json"},z=$.req.header("Content-Type");if(z)E["Content-Type"]=z;let j=$.req.header("Authorization");if(j)E.Authorization=j;let A,P=null,q=null;if($.req.method!=="GET"&&$.req.method!=="HEAD")if(G==="token"&&z?.includes("application/x-www-form-urlencoded")){if(j?.toLowerCase().startsWith("basic "))try{let d=atob(j.slice(6).trim()),Y0=d.indexOf(":");if(Y0!==-1){let O0=decodeURIComponent(d.slice(0,Y0)),T0=decodeURIComponent(d.slice(Y0+1));P=O0||null,q=T0||null}}catch{}let l=await $.req.formData();if(l.has("resource"))l.set("resource",F);let b=l.get("client_id"),x=l.get("client_secret");if(typeof b==="string"&&b)P=b;if(typeof x==="string"&&x)q=x;let n=new URLSearchParams;for(let[d,Y0]of l.entries())n.append(d,Y0.toString());A=n.toString()}else if(G==="register"&&z?.toLowerCase().includes("application/json")){let l=await Q.db.selectFrom("organization").select(["id","slug","name"]).where("id","=",J.organization_id).executeTakeFirst(),b=await $.req.text(),x={};try{x=b?JSON.parse(b):{}}catch{A=b}let n=typeof x==="object"&&x!==null&&!Array.isArray(x);if(A===void 0&&!n)A=b;if(A===void 0){let d=x,Y0=d.metadata&&typeof d.metadata==="object"?d.metadata:{};d.metadata={...Y0,organization_id:J.organization_id,...l?.slug?{organization_slug:l.slug}:{},...l?.name?{organization_name:l.name}:{}},A=JSON.stringify(d),E["Content-Type"]="application/json"}}else A=$.req.raw.body??void 0;let C=await fetch(D.toString(),{method:$.req.method,headers:E,body:A,duplex:"half",redirect:"manual"}),k=new Headers,_=["connection","keep-alive","transfer-encoding","content-encoding","content-length"];for(let[l,b]of C.headers.entries())if(!_.includes(l.toLowerCase()))k.set(l,b);if(G==="token"&&C.ok){let l=await C.text();try{let b=JSON.parse(l);if(typeof b.access_token==="string"&&b.access_token){let x=typeof b.expires_in==="number"?new Date(Date.now()+b.expires_in*1000):null,n=null;try{n=await pf(J.connection_url)??O}catch{n=O}let d={connectionId:Z,accessToken:b.access_token,refreshToken:typeof b.refresh_token==="string"?b.refresh_token:null,scope:typeof b.scope==="string"?b.scope:null,expiresAt:x,clientId:P,clientSecret:q,tokenEndpoint:n};await new P5(Q.db,Q.vault).upsert(d)}}catch(b){console.error("[oauth-proxy] failed to persist downstream token:",b)}return new Response(l,{status:C.status,statusText:C.statusText,headers:k})}return new Response(C.body,{status:C.status,statusText:C.statusText,headers:k})},$_$=async($)=>{let Z=$.var.studioContext;if(!(Z.auth.user?.id??Z.auth.apiKey?.userId))return $.json({error:"Unauthorized"},401);let G=Z.organization?.id;if(!G)return $.json({error:"organization id missing"},400);let Q=$.req.query("types"),Y=Q?Q.split(",").map((K)=>K.trim()).filter(Boolean):null,J=crypto.randomUUID();return VH($,async(K)=>{if(await K.writeSSE({event:"connected",data:JSON.stringify({listenerId:J,organizationId:G,typePatterns:Y,connectedAt:new Date().toISOString()})}),!n5.add({id:J,organizationId:G,typePatterns:Y?.length?Y:null,push:(H)=>{K.writeSSE({id:H.id,event:H.type,data:JSON.stringify(H)}).catch(()=>{n5.remove(G,J)})}})){await K.writeSSE({event:"error",data:JSON.stringify({error:"Too many connections",message:"SSE connection limit reached. Try again later."})});return}let N=setInterval(()=>{K.writeSSE({event:"keepalive",data:""}).catch(()=>{clearInterval(N)})},30000);await new Promise((H)=>{K.onAbort(()=>{clearInterval(N),n5.remove(G,J),H()})})})},S16,_16,v16=()=>C16(B8),b16=()=>V16(B8);var X_$=B(()=>{v5();k$();uI1();Qv();OZ();Jv();U8();i8();u00();eq1();HC0();AY();Wi();we0();sG();X5();O6();Pe0();kT$();vT$();qe0();Yq$();_01();tJ();s60();v01();Wq$();b01();KV$();h01();NV$();ZZ0();Fi();BV$();QZ0();N$1();jV$();kV$();VV$();fV$();hV$();W$1();J$1();Uo();Dc();XC$();JQ();V40();Sd();Bi0();GC$();YC$();KC$();M01();wC$();Xm0();OC$();py0();fd();SX();Mm0();sy0();EC$();$80();h$1();hG();x01();_L();Jm0();ed0();$80();R01();Oy0();By0();jC$();Hv();RC$();Dg();we0();yL0();vL0();aC$=M(yO(),1);S16=new I16,_16=new Set([yQ,nY,BW,_H])});var J_$={};W4(J_$,{resolveClientDir:()=>l16,resolveAssetPathWithTraversalCheck:()=>Y_$,isPathWithinDirectory:()=>Q_$,createAssetHandler:()=>d16});import{resolve as Xo,dirname as x16,join as y16,extname as g16,basename as h16,sep as G_$}from"path";function u16($,Z){if($===Z||h16($)==="index.html")return{"Cache-Control":"no-cache"};if($.includes(`${G_$}assets${G_$}`))return{"Cache-Control":"public, max-age=31536000, immutable"};return{}}function Q_$($,Z){let X=Xo(Z),G=Xo($);return G===X||G.startsWith(X+"/")}function Y_$({requestPath:$,clientDir:Z}){let X=$.startsWith("/")?$.slice(1):$,G=Xo(Z,X);if(!Q_$(G,Z))return null;return G}function l16($,Z="../client"){let X=new URL($),G=x16(X.pathname);return Xo(G,Z)}function d16($={}){let{env:Z="production",clientDir:X=c16,isServerPath:G=()=>!1}=$;if(Z==="development")return async function(Y){return null};return async function(Y){if(Y.method!=="GET")return null;let J=new URL(Y.url),K;try{K=decodeURIComponent(J.pathname)}catch{return null}if(G(K))return null;let W=Y_$({requestPath:K,clientDir:X});if(!W)return null;let N=y16(W,"index.html"),H=Xo(X,"index.html"),F=Y.headers.get("accept"),w=F?.includes("text/html")||F?.includes("*/*")&&["",".html"].includes(g16(W))?[N,H]:[];for(let O of[W,...w])try{let D=Bun.file(O);if(await D.exists())return new Response(D,{headers:u16(O,H)})}catch{}if(K.includes("/assets/"))return new Response("Not Found",{status:404,headers:{"Cache-Control":"no-store"}});return null}}var c16="./dist/client";var K_$=()=>{};var W_$={};W4(W_$,{tryUpgradePreviewWs:()=>r16,tryHandlePreviewHttp:()=>o16,previewWebSocketHandler:()=>a16,parsePreviewBaseDomain:()=>t16,isPreviewWsData:()=>yE0,extractHandleFromHost:()=>t$1});function n16($){if($.method!=="GET")return!1;return($.headers.get("accept")??"").includes("text/html")}function p16(){return new Response(i16,{status:503,headers:{"content-type":"text/html; charset=utf-8","cache-control":"no-store","retry-after":"1","access-control-allow-origin":"*"}})}function t16($){if(!$||$.trim()==="")return null;let Z=$.includes("{handle}")?$.replace("{handle}","__handle__"):$,X;try{X=new URL(Z)}catch{return null}let G=X.hostname;if($.includes("{handle}")){let Q=G.indexOf(".");if(Q<=0||Q===G.length-1)return null;return G.slice(Q+1)}return G}function t$1($,Z){if(!$||!Z)return null;let X=$.indexOf(":"),G=(X>=0?$.slice(0,X):$).toLowerCase(),Y=`.${Z.toLowerCase().replace(/^\.+|\.+$/g,"")}`;if(!G.endsWith(Y))return null;let J=G.slice(0,G.length-Y.length);if(!J||J.includes("."))return null;return J}async function o16($,Z){let X=t$1($.headers.get("host"),Z.baseDomain);if(!X)return null;let G=await Z.getRunner();if(!G)return Qo(503,"preview proxy not configured");let Q=await G.proxyPreviewRequest(X,$);if(Q.headers.get(sV)&&n16($))return p16();return Q.headers.delete(sV),Q}function Qo($,Z){return new Response(JSON.stringify({error:Z}),{status:$,headers:{"content-type":"application/json","access-control-allow-origin":"*"}})}function yE0($){return typeof $==="object"&&$!==null&&$.kind==="preview"}async function r16($,Z,X){if(($.headers.get("upgrade")??"").toLowerCase()!=="websocket")return null;let G=t$1($.headers.get("host"),X.baseDomain);if(!G)return null;let Q=await X.getRunner();if(!Q)return Qo(503,"preview proxy not configured");let Y=await Q.resolvePreviewUpstreamUrl(G);if(!Y)return Qo(404,"sandbox not found");let J=new URL($.url);if(J.pathname.startsWith("/_sandbox")||J.pathname.startsWith("/_decopilot_vm"))return Qo(404,"not found");let K=`${Y.replace(/^http/,"ws")}${J.pathname}${J.search}`,W=$.headers.get("sec-websocket-protocol"),N=W?W.split(",").map((U)=>U.trim()).filter(Boolean):[],H={kind:"preview",upstreamUrl:K,upstreamProtocols:N,pending:[],upstream:null,closed:!1};if(!Z.upgrade($,{data:H}))return Qo(426,"upgrade failed");return}function Go($,Z,X,G){if(Z.closed)return;Z.closed=!0;try{$.close(X,G)}catch{}try{Z.upstream?.close()}catch{}}var m16=256,i16='<!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>',a16;var N_$=B(()=>{is0();a16={open($){let Z=$.data;if(!yE0(Z))return;let X;try{X=Z.upstreamProtocols.length>0?new WebSocket(Z.upstreamUrl,Z.upstreamProtocols):new WebSocket(Z.upstreamUrl)}catch(G){console.warn(`[preview-ws] failed to dial upstream ${Z.upstreamUrl}: ${G instanceof Error?G.message:String(G)}`),Go($,Z,1011,"upstream connect failed");return}X.binaryType="arraybuffer",Z.upstream=X,X.addEventListener("open",()=>{while(Z.pending.length>0){let G=Z.pending.shift();if(G!==void 0)X.send(G)}}),X.addEventListener("message",(G)=>{if(Z.closed)return;$.send(G.data)}),X.addEventListener("close",(G)=>{Go($,Z,G.code||1000,G.reason||"")}),X.addEventListener("error",()=>{Go($,Z,1011,"upstream error")})},message($,Z){let X=$.data;if(!yE0(X))return;let G=X.upstream;if(G&&G.readyState===WebSocket.OPEN){G.send(Z);return}if(X.pending.length>=m16){Go($,X,1011,"preview ws backlog overflow");return}X.pending.push(Z)},close($){let Z=$.data;if(!yE0(Z))return;Go($,Z,1000,"")}}});var w_$={};W4(w_$,{printBanner:()=>e16,bannerLines:()=>U_$,BANNER_LINES:()=>H_$,BANNER_GRADIENT:()=>F_$});function s16($){let Z=Number.parseInt($.slice(1),16);return[Z>>16&255,Z>>8&255,Z&255]}function U_$($){let Z=H_$.map((X,G)=>{let[Q,Y,J]=s16(F_$[G]);return`\x1B[38;2;${Q};${Y};${J}m${X}\x1B[39m`});if($!==void 0)Z.push(`\x1B[2m v${$}\x1B[22m`);return Z}function e16($){console.log("");for(let Z of U_$($))console.log(Z);console.log("")}var H_$,F_$;var O_$=B(()=>{H_$=[" \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 "],F_$=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"]});v5();var Y81="6";function J81($){return{name:"decocms",systemDatabaseUrl:$.systemDatabaseUrl,systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:$.poolSize,runAdminServer:!1,executorID:$.executorID,applicationVersion:Y81,...$.listenQueues!==void 0?{listenQueues:$.listenQueues}:{}}}k$();iE0();X5();function Vv$(){let $=(process.env.BUN_OPTIONS??"").split(/\s+/).filter(Boolean);return[...process.argv.slice(1),...$]}function Nz0($,Z){for(let X=0;X<$.length;X++){let G=$[X];if(G===void 0)continue;if(G===Z)return $[X+1];if(G.startsWith(`${Z}=`))return G.slice(Z.length+1)}return}function l81(){let $=Vv$();if($.includes("--cpu-prof")){console.log(JSON.stringify({msg:"cpu-profiling-active",dir:Nz0($,"--cpu-prof-dir")??process.cwd(),name:Nz0($,"--cpu-prof-name"),markdown:$.includes("--cpu-prof-md"),intervalUs:Number(Nz0($,"--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.'}))}Uz0();var Bo;function a81(){if(process.env.HEAP_WATCH!=="1")return()=>{};let $=Number(process.env.HEAP_WATCH_INTERVAL_MS??60000),Z=async()=>{let X=RO();if(!X)return;let G={};try{let{heapStats:Q}=await import("bun:jsc"),Y=Q(),J=Object.entries(Y.objectTypeCounts).sort((K,W)=>W[1]-K[1]).slice(0,20);G={objectCount:Y.objectCount,heapSize:Y.heapSize,top:Object.fromEntries(J)}}catch{}console.log(JSON.stringify({msg:"heap-watch",ts:new Date().toISOString(),uptimeS:Math.round(process.uptime()),rss:X.rss,heapUsed:X.heapUsed,heapTotal:X.heapTotal,external:X.external,arrayBuffers:X.arrayBuffers,...G}))};return Z().catch(()=>{}),Bo=setInterval(()=>void Z().catch(()=>{}),$),Bo.unref?.(),process.on("SIGUSR2",()=>{try{let X=Bun.generateHeapSnapshot("v8"),G=typeof X==="string"?X:JSON.stringify(X),Q=`/tmp/heap-${process.pid}-${Date.now()}.heapsnapshot`;Bun.write(Q,G),console.log(JSON.stringify({msg:"heap-snapshot-written",path:Q}))}catch(X){console.error("[heap-watch] snapshot failed:",X)}}),()=>{if(Bo)clearInterval(Bo)}}import*as vv$ from"bun:jsc";var{startSamplingProfiler:bv$,samplingProfilerStackTraces:fv$}=vv$;function s81(){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{bv$()}catch(Y){return console.error("[stall-watchdog] failed to start sampling profiler:",Y),()=>{}}let X,G=performance.now()+Z,Q=()=>{let Y=performance.now(),J=Y-G;G=Y+Z;let K=[];try{K=fv$()?.traces??[]}catch{}if(J>$&&K.length>0){let W=new Map;for(let H of K){let F=H.frames.find((O)=>O.sourceURL&&!/Unknown Executable/.test(O.category??""))??H.frames[0];if(!F)continue;let U=(F.sourceURL??"?").replace(/^.*\/node_modules\//,"node_modules/"),w=`${F.name??"?"} @ ${U}:${F.line??"?"}`;W.set(w,(W.get(w)??0)+1)}let N=[...W.entries()].sort((H,F)=>F[1]-H[1]).slice(0,8).map(([H,F])=>({frame:H,count:F}));console.warn(JSON.stringify({msg:"stall-stack",ts:new Date().toISOString(),lagMs:Math.round(J),samplesInWindow:K.length,top:N}))}X=setTimeout(Q,Z),X.unref?.()};return X=setTimeout(Q,Z),X.unref?.(),()=>{if(X)clearTimeout(X)}}function e81(){l81();let $=[a81(),r81(),s81()];return()=>{for(let Z of $)Z()}}import{existsSync as K$6}from"fs";var iY=m0();h81();var{DBOS:Yo,DBOSClient:$$6}=await import("@dbos-inc/dbos-sdk");function z_$($,Z){if(!Z)return $;let X=new URL($);if(!X.searchParams.has("sslmode"))X.searchParams.set("sslmode","verify-full");return X.toString()}var Z$6=[yQ,nY,BW,_H],X$6=iY.dispatchRole==="worker"?Z$6:iY.dispatchRole==="api"?[]:void 0;Yo.setConfig(J81({systemDatabaseUrl:z_$(iY.databaseUrl,iY.databasePgSsl),poolSize:iY.dbosPoolSize,executorID:iY.podName,listenQueues:X$6}));var{createApp:G$6}=await Promise.resolve().then(() => (X_$(),Z_$)),{isServerPath:Q$6}=await Promise.resolve().then(() => (Uo(),A81)),{createAssetHandler:Y$6,resolveClientDir:j_$}=await Promise.resolve().then(() => (K_$(),J_$)),J$6=iY.port,B_$=j_$(import.meta.url,"../client"),P_$=K$6(B_$)?B_$:j_$(import.meta.url,"../dist/client"),W$6=Y$6({clientDir:P_$,isServerPath:Q$6}),N$6={"X-Frame-Options":"DENY","Content-Security-Policy":"frame-ancestors 'none'"};function H$6($){let Z=new Headers($.headers);for(let[X,G]of Object.entries(N$6))Z.set(X,G);return new Response($.body,{status:$.status,statusText:$.statusText,headers:Z})}var{parsePreviewBaseDomain:F$6,tryHandlePreviewHttp:U$6,tryUpgradePreviewWs:w$6,previewWebSocketHandler:o$1,isPreviewWsData:r$1}=await Promise.resolve().then(() => (N_$(),W_$)),{getOrInitSharedRunner:O$6}=await Promise.resolve().then(() => (dD0(),UA$)),A_$=F$6(process.env.STUDIO_SANDBOX_PREVIEW_URL_PATTERN),D_$={baseDomain:A_$??"",getRunner:O$6},gE0=await G$6({clientDir:P_$}),a$1=process.env.DBOS_CONDUCTOR_KEY?.trim(),L_$=process.env.DBOS_CONDUCTOR_URL?.trim();await Yo.launch({...a$1?{conductorKey:a$1}:{},...a$1&&L_$?{conductorURL:L_$}:{}});console.log(`[dbos] application version: ${Yo.applicationVersion}`);var s$1=5,e$1=0;await gG(async()=>{e$1++;try{return await gE0.initDbos()}catch($){let Z=e$1>=s$1?"giving up":"retrying";throw console.warn(`[dbos] initDbos attempt ${e$1}/${s$1} failed, ${Z}`,$),$}},{maxAttempts:s$1,minTimeout:1000,maxTimeout:1e4,jitter:0.5});if(!iY.isCli){let{bannerLines:$}=await Promise.resolve().then(() => (O_$(),w_$));console.log("");for(let Z of $())console.log(Z)}var B$6=Bun.serve({idleTimeout:0,port:J$6,hostname:"0.0.0.0",fetch:async($,Z)=>{if(A_$){let G=await w$6($,Z,D_$);if(G===void 0)return;if(G)return G;let Q=await U$6($,D_$);if(Q)return Q}let X=await W$6($);if(X)return H$6(X);return gE0.fetch($,{server:Z})},websocket:{open($){if(r$1($.data))o$1.open($)},message($,Z){if(r$1($.data))o$1.message($,Z)},close($){if(r$1($.data))o$1.close($)}},development:!1}),D$6=e81();if(iY.localMode)Promise.resolve().then(() => (eV(),$L0)).then(async({seedLocalMode:$,markSeedComplete:Z})=>{try{let X=await $()}catch(X){console.error("Failed to seed local mode:",X)}finally{Z()}}).catch(async($)=>{console.error("Failed to load local-mode module:",$);try{let{markSeedComplete:Z}=await Promise.resolve().then(() => (eV(),$L0));Z()}catch{}});var E_$=!1;async function L$6($){let Z;try{Z=await $$6.create({systemDatabaseUrl:z_$(iY.databaseUrl,iY.databasePgSsl),systemDatabaseSchemaName:"dbos"});let X=await Z.listWorkflows({status:"PENDING",queueName:nY,executorId:$,loadInput:!1,loadOutput:!1});if(X.length===0){console.log(`[shutdown] no in-flight thread-gate gates to hand off (executor ${$})`);return}let G=X.map((Q)=>Q.workflowID);await Z.resumeWorkflows(G,{queueName:nY}),console.log(`[shutdown] re-enqueued ${G.length} in-flight thread-gate gate(s) for re-adoption by a live executor (from ${$}):`,G)}catch(X){console.error("[shutdown] thread-gate handoff failed:",X)}finally{await Z?.destroy().catch(()=>{})}}async function hE0($){if(E_$)return;E_$=!0,console.log(`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "decocms",
3
- "version": "4.164.2",
3
+ "version": "4.164.3",
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{c as L,F as H,j as U}from"./index-BVTf3F1q.js";import{a as O,g as $,s as E}from"./automation-runs-CgFXb4kL.js";import{s as k,u as B}from"./use-mcp-client-DYDnC7jC.js";import{b as V,c as Y}from"./use-mcp-tools-DKT9QN7a.js";import{u as q}from"./index-CZYdmXdz.js";import{c as G}from"./monaco-editor-CM2Q4xfM.js";import{g as F,M as K,a as D}from"./index-BAL4Jdyy.js";import{a as W,u as z}from"./chat-context-M6v_Bq_E.js";import{u as J}from"./shell-layout-BojIGYdH.js";import{O as Q}from"./tab-id-CjesO2jF.js";import"./select-DpytsLU9.js";import"./tooltip-_tbY2Asg.js";import"./Check-lMDR-DuJ.js";import"./ChevronDown-DjmnrKyu.js";import"./ChevronUp-BgQfnJZU.js";import"./useInfiniteQuery-3qhR0YFW.js";import"./use-infinite-scroll-CXgjR-Xw.js";import"./use-connection-Bd_jpf4N.js";import"./use-virtual-mcp-CiLzfsBK.js";import"./card-L9BbYfI6.js";import"./sidebar-CEELrWph.js";import"./LayoutLeft-CgDwsh-m.js";import"./use-mobile-CqQD3V7d.js";import"./X-yBjZ03-0.js";import"./table-AyyLUMMR.js";import"./empty-state-D5_vGLSN.js";import"./use-members-CSIpTkhO.js";import"./use-org-auth-client-DX4MSTlq.js";import"./use-clock-tick-B6WooEI8.js";import"./AlertCircle-BfAWdd1s.js";import"./CheckCircle-Cgx4FXov.js";import"./DotsVertical-DgToKQaq.js";import"./agent-icon-Bh7RQQI-.js";import"./Tool01-CbhbBxli.js";import"./ArrowUp-BIoffiYm.js";import"./Settings02-D3qtZA1F.js";import"./Tool02-BZFCku19.js";import"./XCircle-JS71sncr.js";import"./ArrowUpRight-C2dG_b3O.js";import"./TrendUp01--q_kHviQ.js";import"./ZapSquare-DsnNLxbh.js";import"./Users03-CNX-W7XZ.js";import"./ChevronRight-DUwhBjwb.js";import"./Stars02-_iMqTyA8.js";import"./Copy01-BpnhfF8n.js";import"./CpuChip01-BsLXJTEr.js";import"./Eye-KFh5P2BI.js";import"./FilterLines-B2bJHtBK.js";import"./Star01-BZv_clu-.js";import"./Palette-DEAPUfW-.js";import"./SwitchHorizontal01-Dl2ECbAu.js";import"./HardDrive-Y3kR_V0O.js";import"./Key01-BMth40jC.js";import"./LinkExternal01-RofV7vEq.js";import"./LogOut01-s13aUx8k.js";import"./Monitor01-u6WYnmdo.js";import"./Sun-BfvHejHj.js";import"./Play-Bb2lQ-RG.js";import"./Plus-BAkoCnkU.js";import"./SearchLg-CLeiiyFG.js";import"./SearchMd-CBCwU0Qy.js";import"./Shield01-DliQ-vxN.js";import"./Stars01-b_-N_rSk.js";import"./Trash01-BZvXAAOY.js";import"./Upload01-BbnwoP-3.js";import"./User01-f_A44Ut_.js";import"./Users01-ld_XEHkT.js";import"./XClose-DYGIb6Bc.js";import"./Zap-n8rE3zZY.js";import"./use-automations-BeYCf3le.js";import"./studio-tools-CpKmajV3.js";import"./useSuspenseInfiniteQuery-BD49lQEk.js";import"./avatar-CFgUWzrE.js";import"./format-time-BnbuEtat.js";import"./differenceInSeconds-NQ4PDo0z.js";import"./use-copy-q-yYpnot.js";import"./calendar-BEGpB9t3.js";import"./dialog-d_oLAt_T.js";import"./hooks-SnhEHqqH.js";import"./delay-CnY5UFtP.js";import"./backoff-CrEUbyZT.js";import"./decopilot-sse-pool-C2HL4pNV.js";import"./integration-icon--Zj9DYXe.js";import"./use-navigate-to-agent-_qOFR2k5.js";import"./reusable-new-chat-CouMjkYR.js";import"./AreaChart-CJnyJWgM.js";import"./form-B3BeIXGB.js";import"./label-C3MhwnKJ.js";import"./input-s5nILNvj.js";import"./spinner-6oA_T5wT.js";import"./auth-B19sSCAr.js";import"./drawer-Bms59w4g.js";import"./collection-search-BBDqQhrv.js";import"./index-C92UMw5P.js";import"./get-initials-D-f_fDFw.js";import"./popover-Ds15-H_r.js";import"./dropdown-menu-SI704ShB.js";import"./github-repo-picker-DQSmgwpQ.js";import"./use-debounced-value-GpZ1mi-v.js";import"./authenticate-and-persist-oauth-Cj1MT39L.js";import"./mcp-oauth-BWOx7U-S.js";import"./extract-connection-data-DyOK3GJJ.js";import"./metadata-dUsYcpuu.js";import"./provision-repo-scoped-github-connection-CAXumITS.js";import"./use-decopilot-events-_3yeXkvf.js";import"./use-tags-DnMjb4eU.js";import"./skeleton-cps4cBpF.js";import"./use-organization-settings-DbYxMOQO.js";import"./command-CT9J2ri1.js";import"./index-HIbch74d.js";import"./companions-core-CEgpdXdA.js";import"./tabs-mzlvM9xo.js";import"./toggle-group-Bi2eYcDw.js";import"./use-deco-credits-CUzNHxow.js";import"./alert-dialog-CqFBCUbe.js";import"./toolbar-L_bEBAub.js";import"./agent-capabilities-cXfbMfjV.js";import"./connection-card-obFBC805.js";import"./use-registry-connections-MnJfMvX7.js";import"./retry-CErkP7V6.js";import"./connection-slug-eyAPH6o3.js";import"./textarea-BVaycnZf.js";import"./connection-form-helpers-E9Xs5chD.js";import"./collection-tabs-CWw_mUA4.js";import"./badge-CE54giAC.js";import"./use-ai-providers-B_0yGWLR.js";import"./select-model-Dh0na2DG.js";import"./checkbox-DONW1DHr.js";import"./ai-providers-logos-DD3qZ33J.js";import"./settings-section-C4dDsMlK.js";import"./use-is-desktop-app-BNujXJc_.js";import"./question-004-sINsf4GQ.js";import"./use-status-sounds-D4xvXthG.js";import"./deco-site-production-url-CaKZ7xBn.js";import"./use-capability-CuDfi892.js";import"./pt-BR-CLy76QW2.js";import"./use-mcp-auth-status-DjDWpWN2.js";import"./use-debounced-autosave-BFtE6Ebz.js";import"./index-CL_EU56Z.js";import"./search-input-DizUfD5h.js";import"./switch-B6ietJOq.js";import"./use-secrets-ChYNs_PH.js";import"./useQueries-D7EzIUl0.js";import"./use-file-configs-BVBVH9ie.js";import"./automation-list-row-DhdQVNeX.js";import"./required-auth-layout-B9j7RrGd.js";import"./use-org-sso-B4IlMIyg.js";const X="studio://navigate";function Z(M){const[t]=M;if(M.length!==1||t?.type!=="resource_link"||!t.uri.startsWith(X))return{isNavigate:!1};let o=null;try{o=new URL(t.uri).searchParams.get("main")}catch{}return{isNavigate:!0,tab:o&&Q.has(o)?o:null}}const tt={};function ot(M){const t=L.c(38),{client:o,resourceURI:I,tool:e,connectionId:p,orgId:a,args:v}=M,{sendMessage:C}=W(),{setAppContext:f,clearAppContext:l}=z(),{openSidePanel:g,openTab:s}=J(),i=`${p}:${e.name}`;let c;t[0]!==s?(c=x=>x==="inline"?(s("0"),"inline"):"fullscreen",t[0]=s,t[1]=c):c=t[1];const m=c,n=v??tt;let u;t[2]!==o||t[3]!==e.name||t[4]!==n?(u={client:o,toolName:e.name,toolArguments:n},t[2]=o,t[3]=e.name,t[4]=n,t[5]=u):u=t[5];const{data:r}=Y(u);let h;if(t[6]!==e._meta||t[7]!==e.name){const x=$(e._meta);h=E(e.name,x),t[6]=e._meta,t[7]=e.name,t[8]=h}else h=t[8];const A=h;let d;t[9]!==e.inputSchema?(d=e.inputSchema??{type:"object"},t[9]=e.inputSchema,t[10]=d):d=t[10];let R;t[11]!==A||t[12]!==d||t[13]!==e?(R={...e,name:A,inputSchema:d},t[11]=A,t[12]=d,t[13]=e,t[14]=R):R=t[14];const b=R;let _;t[15]!==g||t[16]!==s||t[17]!==C?(_=x=>{const j=Z(x.content);if(j.isNavigate){j.tab&&s(j.tab);return}const w=G(x.content);w.content.length>0&&(g("chat"),C({tiptapDoc:w}))},t[15]=g,t[16]=s,t[17]=C,t[18]=_):_=t[18];const y=_;let P;t[19]!==b?(P={tool:b},t[19]=b,t[20]=P):P=t[20];let N;t[21]!==f||t[22]!==i?(N=x=>f(i,x),t[21]=f,t[22]=i,t[23]=N):N=t[23];let T;t[24]!==l||t[25]!==i?(T=()=>l(i),t[24]=l,t[25]=i,t[26]=T):T=t[26];let S;return t[27]!==o||t[28]!==y||t[29]!==m||t[30]!==a||t[31]!==I||t[32]!==P||t[33]!==N||t[34]!==T||t[35]!==n||t[36]!==r?(S=U.jsx(K,{resourceURI:I,orgId:a,toolInfo:P,toolInput:n,toolResult:r,displayMode:"fullscreen",minHeight:D.fullscreen.minHeight,maxHeight:D.fullscreen.maxHeight,client:o,onMessage:y,onUpdateModelContext:N,onTeardown:T,onRequestDisplayMode:m,className:"h-full"}),t[27]=o,t[28]=y,t[29]=m,t[30]=a,t[31]=I,t[32]=P,t[33]=N,t[34]=T,t[35]=n,t[36]=r,t[37]=S):S=t[37],S}function Ve(M){const t=L.c(24),{connectionId:o,toolName:I,args:e}=M,{org:p}=H(),a=q();let v;t[0]!==o||t[1]!==a?(v=k(o)&&a.vmEntry?.sandboxProviderKind==="user-desktop"&&a.previewUrl?`${a.previewUrl.replace(/\/+$/,"")}/api/mcp`:void 0,t[0]=o,t[1]=a,t[2]=v):v=t[2];const C=v;let f;t[3]!==o||t[4]!==C||t[5]!==p.id||t[6]!==p.slug?(f={connectionId:o,orgId:p.id,orgSlug:p.slug,mcpUrl:C},t[3]=o,t[4]=C,t[5]=p.id,t[6]=p.slug,t[7]=f):f=t[7];const l=B(f);let g;t[8]!==l?(g={client:l},t[8]=l,t[9]=g):g=t[9];const{data:s}=V(g);let i,c,m;t[10]!==I||t[11]!==s.tools?(i=O(decodeURIComponent(I)),m=s.tools.find(r=>r.name===i)??s.tools.find(r=>{const h=$(r._meta);if(!h)return!1;if(E(r.name,h)===i)return!0;const d=E(i,h);return d!==i&&r.name===d}),c=m?._meta?F(m._meta):void 0,t[10]=I,t[11]=s.tools,t[12]=i,t[13]=c,t[14]=m):(i=t[12],c=t[13],m=t[14]);const n=c;if(!m||!n){let r;return t[15]!==i?(r=U.jsx("div",{className:"flex items-center justify-center h-full w-full",children:U.jsxs("p",{className:"text-sm text-muted-foreground",children:['Tool "',i,'" not found or has no UI']})}),t[15]=i,t[16]=r):r=t[16],r}let u;return t[17]!==e||t[18]!==l||t[19]!==o||t[20]!==p.id||t[21]!==n||t[22]!==m?(u=U.jsx(ot,{client:l,resourceURI:n,tool:m,connectionId:o,orgId:p.id,args:e}),t[17]=e,t[18]=l,t[19]=o,t[20]=p.id,t[21]=n,t[22]=m,t[23]=u):u=t[23],u}export{Ve as AppViewContent};