decocms 4.242.0 → 4.242.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (236) hide show
  1. package/dist/client/assets/{AlertCircle-OA_Xgxae.js → AlertCircle-BLjRxtCg.js} +1 -1
  2. package/dist/client/assets/{AreaChart-B3t4IZGK.js → AreaChart-CA8B3Hpq.js} +1 -1
  3. package/dist/client/assets/{ArrowLeft-Bj878W3V.js → ArrowLeft-4DPAq3FZ.js} +1 -1
  4. package/dist/client/assets/{ArrowUp-B_Ogt5Bs.js → ArrowUp-BlEU92Im.js} +1 -1
  5. package/dist/client/assets/{ArrowUpRight-DdbbfVn8.js → ArrowUpRight-C9RBdXzS.js} +1 -1
  6. package/dist/client/assets/{Check-CMT2e4zx.js → Check-DmmvaREF.js} +1 -1
  7. package/dist/client/assets/{CheckCircle-gZ5JjB4Q.js → CheckCircle-BkWleJAQ.js} +1 -1
  8. package/dist/client/assets/{ChevronDown-BAGloG2T.js → ChevronDown-DNdWMHBq.js} +1 -1
  9. package/dist/client/assets/{ChevronRight-BxiopOGy.js → ChevronRight-9kh8mw1-.js} +1 -1
  10. package/dist/client/assets/{ChevronUp-Be5aSS_l.js → ChevronUp-BiwzfQ34.js} +1 -1
  11. package/dist/client/assets/{Copy01-B5R4BK3-.js → Copy01-BSyOJtDU.js} +1 -1
  12. package/dist/client/assets/{CreditCard01-Csi9E-Aa.js → CreditCard01-DoI0r0lf.js} +1 -1
  13. package/dist/client/assets/{DotsVertical-o1P2HUBd.js → DotsVertical-B6vdrZcL.js} +1 -1
  14. package/dist/client/assets/{Download01-Bi4zydbv.js → Download01-BgrKWanC.js} +1 -1
  15. package/dist/client/assets/{Eye-Dw70tCIt.js → Eye-BYu9YoCE.js} +1 -1
  16. package/dist/client/assets/{FilterLines-BV5dy6zy.js → FilterLines-CCtu81Kl.js} +1 -1
  17. package/dist/client/assets/{Globe01-Be2lzaJE.js → Globe01-C1UG-2uT.js} +1 -1
  18. package/dist/client/assets/{Globe04-BYcZMCai.js → Globe04-Cxhs4JQB.js} +1 -1
  19. package/dist/client/assets/{HardDrive-DPjNzSR0.js → HardDrive-B12yjnMo.js} +1 -1
  20. package/dist/client/assets/{Key01-DPQmQfkN.js → Key01-BukaugKD.js} +1 -1
  21. package/dist/client/assets/{LayoutLeft-BFlLc3yK.js → LayoutLeft-DrPXFVcs.js} +1 -1
  22. package/dist/client/assets/{LinkExternal01-CvisxN0x.js → LinkExternal01-ndPw69oF.js} +1 -1
  23. package/dist/client/assets/{LockUnlocked01-BNhVELFx.js → LockUnlocked01-QOtE0O6M.js} +1 -1
  24. package/dist/client/assets/{LogOut01-z3eymNVW.js → LogOut01-Bbc7nVd2.js} +1 -1
  25. package/dist/client/assets/{Monitor01-knbEfQCK.js → Monitor01-CRJNkg5D.js} +1 -1
  26. package/dist/client/assets/{Palette-Cv2QhspQ.js → Palette-BN_nVtlo.js} +1 -1
  27. package/dist/client/assets/{Play-CKPRqLek.js → Play-bVmySP8F.js} +1 -1
  28. package/dist/client/assets/{Plus-ReH2aZwZ.js → Plus-D5q8r_KL.js} +1 -1
  29. package/dist/client/assets/{SearchLg-D4xC08o7.js → SearchLg-rLVtLHTP.js} +1 -1
  30. package/dist/client/assets/{SearchMd-DDePBtGa.js → SearchMd-Bp11Ucvw.js} +1 -1
  31. package/dist/client/assets/{Settings02-CnDSUjds.js → Settings02-B_z0TMYn.js} +1 -1
  32. package/dist/client/assets/{Share07-JY7Ppznk.js → Share07-W-6cq5W5.js} +1 -1
  33. package/dist/client/assets/{Shield01-Bq9Hu5m-.js → Shield01-KwFVdxDC.js} +1 -1
  34. package/dist/client/assets/{Stars01-B09_2VWZ.js → Stars01-D0mCYLdv.js} +1 -1
  35. package/dist/client/assets/{Stars02-DbHrUSo_.js → Stars02-kTE1_Iz0.js} +1 -1
  36. package/dist/client/assets/{Sun-DKrq03DV.js → Sun-BDMTS65q.js} +1 -1
  37. package/dist/client/assets/{SwitchHorizontal01-C-2yxUhm.js → SwitchHorizontal01-DfPnwT9V.js} +1 -1
  38. package/dist/client/assets/{Tool01-TP5Jac7n.js → Tool01-Ch6hlwSh.js} +1 -1
  39. package/dist/client/assets/{Tool02-Fviazu_x.js → Tool02-BxxsZkJA.js} +1 -1
  40. package/dist/client/assets/{Trash01-F1ZVNiG8.js → Trash01-BKz4fodI.js} +1 -1
  41. package/dist/client/assets/{TrendUp01-DdMpJ8BE.js → TrendUp01-BjzF1ujp.js} +1 -1
  42. package/dist/client/assets/{Upload01-CJonfWP0.js → Upload01-CXZS5Xwb.js} +1 -1
  43. package/dist/client/assets/{User01-DIXU-F24.js → User01-y6pFDwBd.js} +1 -1
  44. package/dist/client/assets/{Users01-H4NSKLik.js → Users01-jj6G1H_Q.js} +1 -1
  45. package/dist/client/assets/{Users03-BApXAl1K.js → Users03-B84s50Qe.js} +1 -1
  46. package/dist/client/assets/{X-DkqPNltJ.js → X-1tpdcA57.js} +1 -1
  47. package/dist/client/assets/{XCircle-LPLu2Ugo.js → XCircle-DMCkoBS4.js} +1 -1
  48. package/dist/client/assets/{XClose-DN1btb9v.js → XClose-B923cVgj.js} +1 -1
  49. package/dist/client/assets/{YAxis-D2jFs_Zl.js → YAxis-BbymNVh5.js} +1 -1
  50. package/dist/client/assets/{Zap-Bq44Kpjo.js → Zap-BQaeLyOX.js} +1 -1
  51. package/dist/client/assets/{ZapSquare-CCZ1UWTj.js → ZapSquare-B9aIlv3d.js} +1 -1
  52. package/dist/client/assets/{access-gate-BKLN_e4p.js → access-gate-8Cz30Bir.js} +1 -1
  53. package/dist/client/assets/{agent-icon-B0yFK7HS.js → agent-icon-CV9SA5HA.js} +1 -1
  54. package/dist/client/assets/{agents-list-BpeX8ogw.js → agents-list-pqZ-9MWi.js} +1 -1
  55. package/dist/client/assets/{ai-providers-zsieHuP5.js → ai-providers-DxyjtoAT.js} +1 -1
  56. package/dist/client/assets/{alert-dialog-BK4E81sc.js → alert-dialog-BpwE-DrS.js} +1 -1
  57. package/dist/client/assets/{alert-D-iEC1_A.js → alert-j4K7O3iH.js} +1 -1
  58. package/dist/client/assets/{api-keys-BUFuLWKJ.js → api-keys-Dxeqjeid.js} +1 -1
  59. package/dist/client/assets/{app-editor-G-Fetpn3.js → app-editor-D9jMqb2B.js} +1 -1
  60. package/dist/client/assets/{auth-DV6xLx0V.js → auth-DUWfQtFk.js} +1 -1
  61. package/dist/client/assets/{auth-catchall-ClqYt2w6.js → auth-catchall-DzFUjdds.js} +1 -1
  62. package/dist/client/assets/{auth-entry-Bb-3qijm.js → auth-entry-Ce6CuYbZ.js} +1 -1
  63. package/dist/client/assets/{auth-split-layout-Bz9fODq-.js → auth-split-layout-BYfGawU4.js} +1 -1
  64. package/dist/client/assets/{authenticate-and-persist-oauth-DIpLnC79.js → authenticate-and-persist-oauth-DxByWe6U.js} +1 -1
  65. package/dist/client/assets/{automation-list-row-CfYfdS3B.js → automation-list-row-BM7KHgfL.js} +1 -1
  66. package/dist/client/assets/{automation-runs-BjCS_bN-.js → automation-runs-DFhDj2sR.js} +1 -1
  67. package/dist/client/assets/{automations-Daf72kPX.js → automations-De_hPliJ.js} +1 -1
  68. package/dist/client/assets/{avatar-Dd0aFZLo.js → avatar-DLABdBS5.js} +1 -1
  69. package/dist/client/assets/{badge-BTKri9ol.js → badge-Dmi1Edkl.js} +1 -1
  70. package/dist/client/assets/{billing-B_nO_8Rp.js → billing-pQt5Wccx.js} +1 -1
  71. package/dist/client/assets/{block-document-cDFncdAC.js → block-document-D0USNHwK.js} +1 -1
  72. package/dist/client/assets/{buckets-DDlznnuu.js → buckets-CHfLvih1.js} +1 -1
  73. package/dist/client/assets/{bulk-category-panel--Ja9Hvn9.js → bulk-category-panel-BWXfpmvm.js} +1 -1
  74. package/dist/client/assets/{capability-load-error-Sj9vtxLg.js → capability-load-error-CWzCLzJM.js} +1 -1
  75. package/dist/client/assets/{card-CO3Gp4wa.js → card-pQ1UNz7f.js} +1 -1
  76. package/dist/client/assets/{cards-CiEt4liY.js → cards-Bj2o7opa.js} +1 -1
  77. package/dist/client/assets/{category-editor-CKCDemPK.js → category-editor-wCbxNnON.js} +1 -1
  78. package/dist/client/assets/{chart-DlgZxo61.js → chart-CDj0WlGN.js} +1 -1
  79. package/dist/client/assets/{chat-context-Dim5Kpjs.js → chat-context-DGqU4TNb.js} +1 -1
  80. package/dist/client/assets/{checkbox-Bq2RLHI-.js → checkbox-BZSdoD6r.js} +1 -1
  81. package/dist/client/assets/{choose-editor-C8iiJbTE.js → choose-editor-C9QohQqE.js} +1 -1
  82. package/dist/client/assets/{cli-auth-success-DccI5BUU.js → cli-auth-success-BvlVq2Y8.js} +1 -1
  83. package/dist/client/assets/{collection-detail-CTpOo-Cq.js → collection-detail-rgWATjwV.js} +1 -1
  84. package/dist/client/assets/{collection-display-button-CQoB3psU.js → collection-display-button-tVJ931UZ.js} +1 -1
  85. package/dist/client/assets/{collection-search-CLDo0_wU.js → collection-search-D-gCLHmQ.js} +1 -1
  86. package/dist/client/assets/{collection-table-wrapper-C4QiBaaK.js → collection-table-wrapper-BG9uTgkm.js} +1 -1
  87. package/dist/client/assets/{collection-tabs-QiJpg8-m.js → collection-tabs-RgVTGYAL.js} +1 -1
  88. package/dist/client/assets/{command-D0BCYMmo.js → command-1iBMuqnC.js} +1 -1
  89. package/dist/client/assets/{commerce-onboarding-C9mNjhfK.js → commerce-onboarding-2n8teMae.js} +1 -1
  90. package/dist/client/assets/{connect-BTJkoTvQ.js → connect-CtMyB9A1.js} +1 -1
  91. package/dist/client/assets/{connection-C0luFoIo.js → connection-DiQYN4WI.js} +1 -1
  92. package/dist/client/assets/{connection-card-DjZun6aQ.js → connection-card-B7oew6Sj.js} +1 -1
  93. package/dist/client/assets/{connection-detail-CCw9_8Ru.js → connection-detail-Z_OJ-BIW.js} +1 -1
  94. package/dist/client/assets/{connection-form-helpers-zUyRyg80.js → connection-form-helpers-BL37f2pG.js} +1 -1
  95. package/dist/client/assets/{connections-BPnMajDw.js → connections-Bq7431v_.js} +1 -1
  96. package/dist/client/assets/{decopilot-sse-pool-CjR-weN-.js → decopilot-sse-pool-DxUDV3kB.js} +1 -1
  97. package/dist/client/assets/{dialog-BvT1iZkN.js → dialog-DYbfOzPC.js} +1 -1
  98. package/dist/client/assets/{domain-settings-D1dNJG0W.js → domain-settings-DB1_-ET2.js} +1 -1
  99. package/dist/client/assets/{drawer-CIQDOopl.js → drawer-DfpL6ei_.js} +1 -1
  100. package/dist/client/assets/{dropdown-menu-CA_WOS9d.js → dropdown-menu-DD28on4T.js} +1 -1
  101. package/dist/client/assets/{empty-state-D59PlXBG.js → empty-state-B0vBNoRU.js} +1 -1
  102. package/dist/client/assets/{extract-connection-data-DyUpsVRG.js → extract-connection-data-D0xv_Xpw.js} +1 -1
  103. package/dist/client/assets/{file-explorer-DIa030iv.js → file-explorer-BgAirbWR.js} +1 -1
  104. package/dist/client/assets/{file-type-icon-BDcBx01E.js → file-type-icon-Bv7bwy1X.js} +1 -1
  105. package/dist/client/assets/{form--h1PKrUM.js → form-B8WNeuMM.js} +1 -1
  106. package/dist/client/assets/{general-oJqr4rfs.js → general-BzdEqWOs.js} +1 -1
  107. package/dist/client/assets/{github-repo-picker-D4PcEAXK.js → github-repo-picker-6YNSKnAB.js} +1 -1
  108. package/dist/client/assets/{hooks-BV3A8lyq.js → hooks-BH5ncP0o.js} +1 -1
  109. package/dist/client/assets/{index-BxQabQAR.js → index-B01cmNcm.js} +1 -1
  110. package/dist/client/assets/{index-3Y41KS-z.js → index-BknjSN7Q.js} +1 -1
  111. package/dist/client/assets/{index-4I_19OQD.js → index-CWPWY8A2.js} +1 -1
  112. package/dist/client/assets/{index-CxdoykHj.js → index-CWr5yogT.js} +3 -3
  113. package/dist/client/assets/{index-BOAHTwyz.js → index-Cnu-uVYE.js} +35 -35
  114. package/dist/client/assets/{index-2V10wexl.js → index-CvagHRqr.js} +1 -1
  115. package/dist/client/assets/{index-CrkmMP84.js → index-D3MvvsdR.js} +1 -1
  116. package/dist/client/assets/{index-CMIkQ5Yf.js → index-D3vycpy0.js} +1 -1
  117. package/dist/client/assets/{index-BElhtFCe.js → index-DSYKgx16.js} +1 -1
  118. package/dist/client/assets/{index-Df1buANY.js → index-llVAr4bS.js} +1 -1
  119. package/dist/client/assets/{index-redirect-DIkRyUCf.js → index-redirect-BHE5x8Ah.js} +1 -1
  120. package/dist/client/assets/{infra-billing-DoNaREw7.js → infra-billing-BUuSz5bV.js} +1 -1
  121. package/dist/client/assets/{input-IWz3ijAk.js → input-BwBLAcU4.js} +1 -1
  122. package/dist/client/assets/{integration-icon-Fcw0xRvp.js → integration-icon-vMqCOva6.js} +1 -1
  123. package/dist/client/assets/{invite-member-dialog-B0WeE4-O.js → invite-member-dialog-DhlH9sKX.js} +1 -1
  124. package/dist/client/assets/{label-DPoipEh8.js → label-L3jOsH6N.js} +1 -1
  125. package/dist/client/assets/{layout-CSNTkg3u.js → layout-Cys6ogu0.js} +1 -1
  126. package/dist/client/assets/{login-D3hpE_vI.js → login-CFzoSPvf.js} +1 -1
  127. package/dist/client/assets/{mcp-oauth-Cn_KGHuG.js → mcp-oauth-D80_H96F.js} +1 -1
  128. package/dist/client/assets/{members-R890Fi-A.js → members-BKDp7yW6.js} +1 -1
  129. package/dist/client/assets/{monaco-editor-CXPGZqnf.js → monaco-editor-DAZ7H6GV.js} +1 -1
  130. package/dist/client/assets/{monitoring-stats-row-CSh6_bj5.js → monitoring-stats-row-3LrHb9nO.js} +1 -1
  131. package/dist/client/assets/{multi-select-BD9_lioJ.js → multi-select-C4vrBfBX.js} +1 -1
  132. package/dist/client/assets/{oauth-callback-x7Ux0dwp.js → oauth-callback-Cto4zhfM.js} +1 -1
  133. package/dist/client/assets/{oauth-callback-ai-provider-Djtf7Xfo.js → oauth-callback-ai-provider-Br3BeFpb.js} +1 -1
  134. package/dist/client/assets/{onboarding-CwvrulPI.js → onboarding-oEhIHOlU.js} +1 -1
  135. package/dist/client/assets/{org-layout-Cwut9el0.js → org-layout-Dyx0ZMPc.js} +1 -1
  136. package/dist/client/assets/{organization-choice-L3y73JLF.js → organization-choice-CIo1vTrz.js} +1 -1
  137. package/dist/client/assets/{orgs-DufSuUB1.js → orgs-DNiAvqgw.js} +1 -1
  138. package/dist/client/assets/{page-seo-form-x9JB9IFC.js → page-seo-form-BkGoe1rY.js} +1 -1
  139. package/dist/client/assets/{popover-BxBMxXvF.js → popover-DwADEOUa.js} +1 -1
  140. package/dist/client/assets/{post-editor-D6H5Tfxw.js → post-editor-DLMpYcNq.js} +1 -1
  141. package/dist/client/assets/{primitives-Cngl53Ht.js → primitives-Br8uKVR3.js} +1 -1
  142. package/dist/client/assets/{profile-DyErg-wl.js → profile-vhnHD8qW.js} +1 -1
  143. package/dist/client/assets/{project-app-view-Dcb2DR9v.js → project-app-view-CYxQ2muC.js} +1 -1
  144. package/dist/client/assets/record-editor-Cp-acnY_.js +1 -0
  145. package/dist/client/assets/redirect-editor-D-6AASqj.js +1 -0
  146. package/dist/client/assets/registry-C7xHW0Tg.js +2 -0
  147. package/dist/client/assets/{registry-layout-B5v503kG.js → registry-layout-DUl6hNhd.js} +1 -1
  148. package/dist/client/assets/{reports-C_54T4ka.js → reports-COSkzA4A.js} +1 -1
  149. package/dist/client/assets/{require-capability-Bccnkgm3.js → require-capability-D5-lnGcd.js} +1 -1
  150. package/dist/client/assets/{required-auth-layout-DDjsC9m1.js → required-auth-layout-CTaIYIP8.js} +1 -1
  151. package/dist/client/assets/{reset-password-YCBw1i8I.js → reset-password-aiRP5Ays.js} +1 -1
  152. package/dist/client/assets/{roles-CzC20CxQ.js → roles-CemfFg5d.js} +1 -1
  153. package/dist/client/assets/{search-input-Dxt3pHZ9.js → search-input-WQSq4YL_.js} +1 -1
  154. package/dist/client/assets/{secrets-oYZxyZgj.js → secrets-CGJllEqD.js} +1 -1
  155. package/dist/client/assets/{sections-editor-CiEA967h.js → sections-editor-DylFjjZJ.js} +1 -1
  156. package/dist/client/assets/{select-BU9cYUOw.js → select-CBSZ0Lug.js} +1 -1
  157. package/dist/client/assets/{select-model-ttfe4Rt_.js → select-model-BsfCtu4R.js} +1 -1
  158. package/dist/client/assets/{self-tool-result-Cxm8Hjf2.js → self-tool-result-DNAq-vwW.js} +1 -1
  159. package/dist/client/assets/{seo-editor-cL6msN_C.js → seo-editor-CaCy-khG.js} +1 -1
  160. package/dist/client/assets/{settings-layout-BfD6Jy4Z.js → settings-layout-BUm34cp5.js} +1 -1
  161. package/dist/client/assets/{settings-section-C5YOMvmU.js → settings-section-dcT_loqd.js} +1 -1
  162. package/dist/client/assets/{settings-subnav-Da-whTO7.js → settings-subnav-DDOL5KMy.js} +1 -1
  163. package/dist/client/assets/{shell-controls-BKtAWxUx.js → shell-controls-BmjqugkY.js} +1 -1
  164. package/dist/client/assets/{shell-layout-BbE0C0cD.js → shell-layout-CWaRwowP.js} +1 -1
  165. package/dist/client/assets/{sidebar-B3pDm7Pe.js → sidebar-Vbdz435r.js} +1 -1
  166. package/dist/client/assets/{skeleton-Bbry0VZf.js → skeleton-Doum5PuE.js} +1 -1
  167. package/dist/client/assets/{spinner-CDJ3ZEfQ.js → spinner-mYPpwvbF.js} +1 -1
  168. package/dist/client/assets/{sso-CmtHXgC5.js → sso-CB4rcaK-.js} +1 -1
  169. package/dist/client/assets/{store-Dz9GVgy-.js → store-DUvebUaH.js} +1 -1
  170. package/dist/client/assets/store-registry-Di-zm9xf.js +2 -0
  171. package/dist/client/assets/{studio-tools-Og9VKB_F.js → studio-tools-D1WTrFr3.js} +1 -1
  172. package/dist/client/assets/{switch-CRt_YU5x.js → switch-WxAjh6LN.js} +1 -1
  173. package/dist/client/assets/{synced-repos-BQmjVUTH.js → synced-repos-aMHOq-mr.js} +1 -1
  174. package/dist/client/assets/{tab-id-DYz7tp_l.js → tab-id-BONWRXY7.js} +1 -1
  175. package/dist/client/assets/{table-BGzWGdLS.js → table-UKOQwvgs.js} +1 -1
  176. package/dist/client/assets/{tabs-BlNW0H5p.js → tabs-BAYBhY-B.js} +1 -1
  177. package/dist/client/assets/{tasks-daMWaZPA.js → tasks-nH_8KZqG.js} +1 -1
  178. package/dist/client/assets/{textarea-C9EZ0E9V.js → textarea-DVsSqFc7.js} +1 -1
  179. package/dist/client/assets/{toggle-group-CYSDPqxJ.js → toggle-group-D6mnwc67.js} +1 -1
  180. package/dist/client/assets/{toolbar-aAFbyu8K.js → toolbar-DZTLMAXr.js} +1 -1
  181. package/dist/client/assets/{tooltip-CaQ9sY8_.js → tooltip-sh5Vcy5o.js} +1 -1
  182. package/dist/client/assets/{track-D_PV18Wq.js → track-CKQNca1N.js} +1 -1
  183. package/dist/client/assets/{types-BQB-251e.js → types-C3iOdauk.js} +1 -1
  184. package/dist/client/assets/{use-ai-providers-CGXXNhqS.js → use-ai-providers-CkzENZaN.js} +1 -1
  185. package/dist/client/assets/{use-api-keys-CegWT4V8.js → use-api-keys-D4YfcKbJ.js} +1 -1
  186. package/dist/client/assets/{use-automations--HYw3r0-.js → use-automations-C4J3LwJ2.js} +1 -1
  187. package/dist/client/assets/{use-autosave-DV5VqxFG.js → use-autosave-Dkw6F1L0.js} +1 -1
  188. package/dist/client/assets/{use-capability-DjTUHWtW.js → use-capability-CL8dQHM2.js} +1 -1
  189. package/dist/client/assets/{use-clock-tick-XLNRdIBf.js → use-clock-tick-M8gtO9os.js} +1 -1
  190. package/dist/client/assets/{use-commerce-diagnostic-DezeehbT.js → use-commerce-diagnostic-DN1X4IW5.js} +1 -1
  191. package/dist/client/assets/{use-connection-DZz2ZZPf.js → use-connection-VGDVVQ1z.js} +1 -1
  192. package/dist/client/assets/{use-copy-jkQu5jEB.js → use-copy-mgcX5rsE.js} +1 -1
  193. package/dist/client/assets/{use-create-virtual-mcp-D53tZNei.js → use-create-virtual-mcp-Bb0Ipg7x.js} +1 -1
  194. package/dist/client/assets/{use-debounced-autosave-BE1Cew-t.js → use-debounced-autosave-CSRoYyDm.js} +1 -1
  195. package/dist/client/assets/{use-debounced-value-thuhwWic.js → use-debounced-value-E15h5LD3.js} +1 -1
  196. package/dist/client/assets/{use-decopilot-events-DmLd5gM8.js → use-decopilot-events-9PMCbvpN.js} +1 -1
  197. package/dist/client/assets/{use-delete-connection-DtxY0vUf.js → use-delete-connection-CGA2fNyP.js} +1 -1
  198. package/dist/client/assets/{use-deployment-admin-86QFYTkN.js → use-deployment-admin-DNmprhu5.js} +1 -1
  199. package/dist/client/assets/{use-file-configs-DrlpJBOr.js → use-file-configs-hzSNmpOq.js} +1 -1
  200. package/dist/client/assets/{use-infinite-scroll-6RVVg-bb.js → use-infinite-scroll-vVtYR3JQ.js} +1 -1
  201. package/dist/client/assets/{use-join-requests-CBhytJNM.js → use-join-requests-JyJucFLT.js} +1 -1
  202. package/dist/client/assets/{use-mcp-client-XKg7n-vV.js → use-mcp-client-Xm6nDmkT.js} +1 -1
  203. package/dist/client/assets/{use-mcp-tools-DS316RVy.js → use-mcp-tools-HjqcWuQ-.js} +1 -1
  204. package/dist/client/assets/{use-members-Dj6l-4gj.js → use-members-z3sg-hyj.js} +1 -1
  205. package/dist/client/assets/{use-mobile-DDvT_7Nz.js → use-mobile-HeXjiu3p.js} +1 -1
  206. package/dist/client/assets/{use-navigate-to-agent-D-Vda_zm.js → use-navigate-to-agent-DYKLjse3.js} +1 -1
  207. package/dist/client/assets/{use-open-billing-url-jOJ4F-Z9.js → use-open-billing-url-B-BgSqMX.js} +1 -1
  208. package/dist/client/assets/{use-org-auth-client-B6i1wLZW.js → use-org-auth-client-CsEC-8-N.js} +1 -1
  209. package/dist/client/assets/{use-org-repo-syncs-DiyIDW94.js → use-org-repo-syncs-CWwFdJOO.js} +1 -1
  210. package/dist/client/assets/{use-org-sso-BASg43Ua.js → use-org-sso-AZ9iXYy7.js} +1 -1
  211. package/dist/client/assets/{use-organization-roles-6kWbAHps.js → use-organization-roles-oMLLQKe1.js} +1 -1
  212. package/dist/client/assets/{use-organization-settings-SO2wPhYg.js → use-organization-settings-pLz4lAB-.js} +1 -1
  213. package/dist/client/assets/{use-registry-connections-DpMbZhe9.js → use-registry-connections-DgQVTAzb.js} +1 -1
  214. package/dist/client/assets/{use-secrets-WxwBMboj.js → use-secrets-DZNeLfQZ.js} +1 -1
  215. package/dist/client/assets/{use-section-preview-base-COAeFupQ.js → use-section-preview-base-D3BRL2b2.js} +1 -1
  216. package/dist/client/assets/{use-settings-tabs-AkY3Wq-D.js → use-settings-tabs-CcNnEhAR.js} +1 -1
  217. package/dist/client/assets/{use-status-sounds-DojspfhT.js → use-status-sounds-B4kDHcys.js} +1 -1
  218. package/dist/client/assets/{use-tags-YHeG20vt.js → use-tags-CyfUnJtt.js} +1 -1
  219. package/dist/client/assets/{use-view-mode-CiQg5GKL.js → use-view-mode-DYjx6Ji4.js} +1 -1
  220. package/dist/client/assets/{use-virtual-mcp-DgT1kzXu.js → use-virtual-mcp-DlpcZhPC.js} +1 -1
  221. package/dist/client/assets/useInfiniteQuery-P2P-hfvq.js +1 -0
  222. package/dist/client/assets/{useRouterState-CPD4cmC1.js → useRouterState-CmHV9E7D.js} +1 -1
  223. package/dist/client/assets/useSuspenseInfiniteQuery-Bm6Pr5PC.js +1 -0
  224. package/dist/client/assets/{users-BGHok0OQ.js → users-PcUYJwI1.js} +1 -1
  225. package/dist/client/assets/{variant-calendar-C27HmKaD.js → variant-calendar-BJx8Xiwa.js} +1 -1
  226. package/dist/client/assets/{view-mode-toggle-DI56bUUR.js → view-mode-toggle-B4YcCrH-.js} +1 -1
  227. package/dist/client/index.html +1 -1
  228. package/dist/server/cli.js +3 -3
  229. package/dist/server/server.js +3 -3
  230. package/package.json +1 -1
  231. package/dist/client/assets/record-editor-QTV3g4_5.js +0 -1
  232. package/dist/client/assets/redirect-editor-Bnd6op8H.js +0 -1
  233. package/dist/client/assets/registry-zt706fGx.js +0 -2
  234. package/dist/client/assets/store-registry-BXWbmknF.js +0 -2
  235. package/dist/client/assets/useInfiniteQuery-35o_ktO7.js +0 -1
  236. package/dist/client/assets/useSuspenseInfiniteQuery-D7Nok0q9.js +0 -1
@@ -106,7 +106,7 @@ You are running the brand-context onboarding for the user's organization. Your o
106
106
  4. Do NOT call any other tools in this thread. Do NOT call \`brand_context_setup\` more than once.
107
107
 
108
108
  If the tool returns an error, surface the error message to the user and ask whether they want to try a different URL.
109
- `.trim();lx1=RY("site-diagnostics_"),au6=lx1.is,su6=lx1.get,dx1=RY("commerce-discovery_"),eu6=dx1.is,y80=dx1.get;aH={AGENT_MANAGER:RY("studio-agent-manager_"),AUTOMATION_MANAGER:RY("studio-automation-manager_"),CONNECTION_MANAGER:RY("studio-connection-manager_"),API_KEY_MANAGER:RY("studio-api-key-manager_"),STORE_MANAGER:RY("studio-store-manager_"),BRAND_MANAGER:RY("studio-brand-manager_"),TASK_MANAGER:RY("studio-task-manager_"),USAGE_MANAGER:RY("studio-usage-manager_")},h7={AGENT_MANAGER:aH.AGENT_MANAGER.get,AUTOMATION_MANAGER:aH.AUTOMATION_MANAGER.get,CONNECTION_MANAGER:aH.CONNECTION_MANAGER.get,API_KEY_MANAGER:aH.API_KEY_MANAGER.get,STORE_MANAGER:aH.STORE_MANAGER.get,BRAND_MANAGER:aH.BRAND_MANAGER.get,TASK_MANAGER:aH.TASK_MANAGER.get,USAGE_MANAGER:aH.USAGE_MANAGER.get}});function ox1($){return $.toLowerCase().replace(/[^a-z0-9]/g,"")}function $C8($){return ox1($).includes("deepresearch")}function rx1($){let Z=ox1($);if(Z.includes("deepresearch"))return!1;return ZC8.some((X)=>Z.includes(X))}function XC8($){return $.asyncResearch!==!0&&rx1($.modelId)}function QC8($){return $.asyncResearch===!0||$C8($.modelId)||rx1($.modelId)}function df($,Z,X,Q){for(let Y of X){let G=$.find((J)=>J.modelId===Y);if(G)return{keyId:Z,modelId:G.modelId,title:G.title}}for(let Y of X){let G=$.find((J)=>J.modelId.includes(Y));if(G)return{keyId:Z,modelId:G.modelId,title:G.title}}if(Q){let Y=$.find(Q);if(Y)return{keyId:Z,modelId:Y.modelId,title:Y.title}}return null}function ax1($,Z){let X={chat:{fast:null,smart:null,thinking:null},image:null,webSearch:null,deepResearch:null};for(let Q of $){let Y=Z[Q.id]??[],G=Q.providerId;if(!X.chat.fast)X.chat.fast=df(Y,Q.id,tS8[G]??[]);if(!X.chat.smart)X.chat.smart=df(Y,Q.id,oS8[G]??[]);if(!X.chat.thinking)X.chat.thinking=df(Y,Q.id,rS8[G]??[]);if(!X.image)X.image=df(Y,Q.id,aS8[G]??[],(J)=>J.capabilities?.includes("image")===!0);if(!X.webSearch)X.webSearch=df(Y,Q.id,sS8[G]??[],XC8);if(!X.deepResearch)X.deepResearch=df(Y,Q.id,eS8[G]??[],QC8)}return X}var tS8,oS8,rS8,aS8,sS8,eS8,ZC8;var sx1=w(()=>{tS8={anthropic:["claude-haiku-4-5","claude-haiku"],openrouter:["qwen/qwen3.5-flash","anthropic/claude-haiku-4.5","anthropic/claude-haiku","google/gemini-3-flash"],deco:["qwen/qwen3.5-flash","anthropic/claude-haiku"],llmapi:["claude-haiku-4-5","claude-haiku","gpt-4o-mini"],google:["gemini-2.5-flash","gemini-3-flash"]},oS8={anthropic:["claude-sonnet-5","claude-sonnet"],openrouter:["anthropic/claude-sonnet-5","anthropic/claude-sonnet","anthropic/claude-opus-4.8","google/gemini-3-pro"],deco:["anthropic/claude-sonnet-5","anthropic/claude-sonnet","anthropic/claude"],llmapi:["claude-sonnet-4-6","claude-sonnet"],google:["gemini-3-pro","gemini-3-flash"]},rS8={anthropic:["claude-opus-4-8","claude-sonnet-5","claude-sonnet","claude-fable-5"],openrouter:["anthropic/claude-opus-4.8:extended","anthropic/claude-opus-4.8","anthropic/claude-sonnet-5:extended","anthropic/claude-sonnet-5","google/gemini-3-pro","anthropic/claude-fable-5"],deco:["anthropic/claude-opus","anthropic/claude-sonnet-4.6","anthropic/claude-sonnet","anthropic/claude-fable"],llmapi:["claude-opus-4-8","claude-opus","claude-sonnet-4-6"],google:["gemini-3-pro"]},aS8={openrouter:["openai/gpt-image-1","google/gemini-2.0-flash-image"],deco:["openai/gpt-image-1","google/gemini-2.0-flash-image"],llmapi:["gemini-2.5-flash-image","gpt-image-1"],google:["gemini-2.0-flash-image"]},sS8={openrouter:["perplexity/sonar","perplexity/sonar-pro"],deco:["perplexity/sonar","perplexity/sonar-pro"]},eS8={openrouter:["perplexity/deep-research","perplexity/sonar-pro"],deco:["perplexity/deep-research","perplexity/sonar-pro"]};ZC8=["sonar","searchpreview","online"]});function g80($){if(!$)return;let Z={};for(let X in $){let Q=$[X];if(typeof Q==="object"&&Q!==null){let Y={};for(let G of YC8)if(G in Q)Y[G]=Q[G];Z[X]=Y}}return Object.keys(Z).length>0?Z:void 0}var YC8;var ex1=w(()=>{YC8=["usage","cost","model"]});var U8=w(()=>{w$0();tx1();sx1();ex1()});function h80($){return $.toLowerCase().trim().replace(/\//g,"-").replace(/[^a-z0-9\s_-]+/g,"").replace(/[\s_-]+/g,"-").replace(/^-+|-+$/g,"")}function fU($){if($.app_name)return $.app_name;if($.connection_url)try{let Z=new URL($.connection_url),Q=((Z.port?`${Z.hostname}-${Z.port}`:Z.hostname)+Z.pathname).replace(/\/+$/,"");return h80(Q)}catch{return h80($.connection_url)}if($.title)return h80($.title);return $.id??"unknown"}var u80=()=>{};var mf=300000,c80=5000,Ix0=3,qx0=30000,$y1=65000,l80=1000,pf=3,Zy1=5,Xy1=60000,Qy1=300000,Mx0=60000;function Yy1(){if(sH.size<l80)return;let $=null,Z=1/0;for(let[X,Q]of sH)if(Q.lastFailureAt<Z)Z=Q.lastFailureAt,$=X;if($)sH.delete($)}function Gy1($){let Z=sH.get($);if(!Z)return Yy1(),sH.set($,{consecutiveFailures:1,disabled:!1,lastFailureAt:Date.now()}),{consecutiveFailures:1,thresholdCrossed:1>=pf};return Z.consecutiveFailures++,Z.lastFailureAt=Date.now(),{consecutiveFailures:Z.consecutiveFailures,thresholdCrossed:Z.consecutiveFailures>=pf}}function kx0($){let Z=sH.get($);if(Z){Z.disabled=!0;return}Yy1(),sH.set($,{consecutiveFailures:pf,disabled:!0,lastFailureAt:Date.now()})}function Jy1($){return sH.get($)?.disabled??!1}function Wy1($){sH.delete($)}var sH;var Ky1=w(()=>{sH=new Map});import{sql as m$}from"kysely";function Fy1($){if($.length===0)return null;let Z=$[0];if($.length===1&&JC8.has(Z))return m$.ref(Z);if($.length===2&&Hy1.has(Z)){let X=$[1];return m$`${m$.ref(Z)}->>${m$.lit(X)}`}if($.length>2&&Hy1.has(Z)){let X=`{${$.slice(1).join(",")}}`;return m$`${m$.ref(Z)}#>>${m$.lit(X)}`}return null}function Ny1($){if("conditions"in $){let{operator:G,conditions:J}=$;if(J.length===0)return m$`true`;let W=J.map((K)=>Ny1(K));switch(G){case"and":return m$`(${m$.join(W,m$` AND `)})`;case"or":return m$`(${m$.join(W,m$` OR `)})`;case"not":return m$`NOT (${m$.join(W,m$` AND `)})`;default:return m$`true`}}let{field:Z,operator:X,value:Q}=$,Y=Fy1(Z);if(!Y)return m$`true`;switch(X){case"eq":return Q===null?m$`${Y} IS NULL`:m$`${Y} = ${m$.val(Q)}`;case"gt":return m$`${Y} > ${m$.val(Q)}`;case"gte":return m$`${Y} >= ${m$.val(Q)}`;case"lt":return m$`${Y} < ${m$.val(Q)}`;case"lte":return m$`${Y} <= ${m$.val(Q)}`;case"in":if(!Array.isArray(Q)||Q.length===0)return m$`false`;return m$`${Y} IN (${m$.join(Q.map((G)=>m$.val(G)))})`;case"like":return m$`${Y} ILIKE ${m$.val(Q)}`;case"contains":{let G=String(Q).replace(/[%_\\]/g,"\\$&");return m$`${Y} ILIKE ${m$.val(`%${G}%`)}`}default:return m$`true`}}class al{db;vault;constructor($,Z){this.db=$;this.vault=Z}async create($){let Z=$.id??m8("conn"),X=new Date().toISOString(),Q=await this.findById(Z);if(Q){if(Q.organization_id!==$.organization_id)throw Error("Connection ID already exists");return this.update(Z,$)}let Y=fU($),G=await this.serializeConnection({...$,id:$.id??Z,slug:Y,status:"active",created_at:X,updated_at:X}),J=await this.db.insertInto("connections").values(G).returningAll().executeTakeFirst();if(!J)throw Error(`Failed to create connection with id: ${Z}`);return this.deserializeConnection(J)}async createNew($){let Z=$.id??m8("conn"),X=new Date().toISOString(),Q=fU($),Y=await this.serializeConnection({...$,id:Z,slug:Q,status:"active",created_at:X,updated_at:X}),G;try{G=await this.db.insertInto("connections").values(Y).returningAll().executeTakeFirst()}catch(J){if(J instanceof Error&&(J.message.includes("duplicate key")||J.message.includes("unique constraint")))throw Error("Connection ID already exists");throw J}if(!G)throw Error(`Failed to create connection with id: ${Z}`);return this.deserializeConnection(G)}async findById($,Z){let X=IG($);if(X)return nx1(Z??X);let Q=this.db.selectFrom("connections").selectAll().where("id","=",$);if(Z)Q=Q.where("organization_id","=",Z);let Y=await Q.executeTakeFirst();return Y?this.deserializeConnection(Y):null}async list($,Z){let X=this.db.selectFrom("connections").selectAll().where("organization_id","=",$);if(!Z?.includeVirtual)X=X.where("connection_type","!=","VIRTUAL");if(Z?.slug)X=X.where("slug","=",Z.slug);if(Z?.where)X=X.where(Ny1(Z.where));let G=(await this.db.selectFrom(X.as("filtered")).select(m$`count(*)::int`.as("count")).executeTakeFirst())?.count??0;if(Z?.orderBy&&Z.orderBy.length>0)for(let K of Z.orderBy){let H=Fy1(K.field);if(!H)continue;let F=K.direction==="desc"?m$`desc`:m$`asc`,N=K.nulls==="first"?m$`nulls first`:m$`nulls last`;X=X.orderBy(m$`${H} ${F} ${N}`)}if(Z?.limit)X=X.limit(Z.limit);if(Z?.offset)X=X.offset(Z.offset);let J=await X.execute();return{items:await Promise.all(J.map((K)=>this.deserializeConnection(K))),totalCount:G}}async update($,Z){if(Object.keys(Z).length===0){let J=await this.findById($);if(!J)throw Error("Connection not found");return J}let X={...Z},Q=await this.db.selectFrom("connections").select(["app_name","connection_url","title"]).where("id","=",$).executeTakeFirst();if(Q){let J=(W)=>Z[W]===void 0?Q[W]:Z[W];X.slug=fU({app_name:J("app_name"),connection_url:J("connection_url"),title:J("title"),id:$})}let Y=await this.serializeConnection({...X,updated_at:new Date().toISOString()}),G=await this.db.updateTable("connections").set(Y).where("id","=",$).returningAll().executeTakeFirst();if(!G)throw Error("Connection not found after update");return this.deserializeConnection(G)}async isReferencedByThread($){return await this.db.selectFrom("threads").select("id").where(m$`metadata -> 'githubRepo' ->> 'connectionId' = ${$}`).limit(1).executeTakeFirst()!==void 0}async delete($){await this.db.deleteFrom("connections").where("id","=",$).execute()}async testConnection($,Z){let X=await this.findById($);if(!X)throw Error("Connection not found");let Q=Date.now();if(X.connection_type==="STDIO")return{healthy:!0,latencyMs:Date.now()-Q};if(!X.connection_url)return{healthy:!1,latencyMs:Date.now()-Q};try{if(await uf(X.connection_url))return{healthy:!1,latencyMs:Date.now()-Q};let G=X.connection_headers,J=new AbortController,W=setTimeout(()=>J.abort(),1e4),K;try{K=await cf()(X.connection_url,{method:"POST",signal:J.signal,headers:{"Content-Type":"application/json",...X.connection_token&&{Authorization:`Bearer ${X.connection_token}`},...G?.headers,...Z},body:JSON.stringify({jsonrpc:"2.0",method:"ping",id:1})})}finally{clearTimeout(W)}return{healthy:K.ok||K.status===404,latencyMs:Date.now()-Q}}catch{return{healthy:!1,latencyMs:Date.now()-Q}}}async serializeConnection($){let Z={};for(let[X,Q]of Object.entries($)){if(Q===void 0)continue;if(X==="tools")continue;if(X==="connection_token"&&Q)Z[X]=await this.vault.encrypt(Q);else if(X==="configuration_state"&&Q){let Y=JSON.stringify(Q);Z[X]=await this.vault.encrypt(Y)}else if(X==="connection_headers"&&Q){let Y=Q;if(qW(Y)&&Y.envVars){let G={};for(let[J,W]of Object.entries(Y.envVars))G[J]=await this.vault.encrypt(W);Z[X]=JSON.stringify({...Y,envVars:G})}else Z[X]=JSON.stringify(Y)}else if(GC8.includes(X))Z[X]=Q?JSON.stringify(Q):null;else Z[X]=Q}return Z}async handleDecryptFailures($,Z){let X=`connection ${$.id} (org: ${$.organization_id}, type: ${$.connection_type}, title: ${$.title})`;if(Jy1($.id))return;if($.status!=="active"){kx0($.id);return}let{thresholdCrossed:Q}=Gy1($.id);if(!Q){for(let{label:Y,error:G}of Z)console.error(`Failed to decrypt ${Y} for ${X}:`,G);return}try{await this.db.updateTable("connections").set({status:"error"}).where("id","=",$.id).execute(),kx0($.id),console.error(`Disabled ${X} after ${pf} consecutive decryption failures.`,Z[0]?.error)}catch(Y){console.error(`Failed to disable ${X} after decryption failures:`,Y)}}async deserializeConnection($){let Z=[],X=null;if($.connection_token)try{X=await this.vault.decrypt($.connection_token)}catch(J){Z.push({label:"connection token",error:J})}let Q=null;if($.configuration_state)try{let J=await this.vault.decrypt($.configuration_state);Q=JSON.parse(J)}catch(J){Z.push({label:"configuration state",error:J})}if(Z.length>0)await this.handleDecryptFailures($,Z);else if($.connection_token||$.configuration_state)Wy1($.id);let Y=null;if($.connection_headers)try{let J=JSON.parse($.connection_headers);if(qW(J)&&J.envVars){let W={};for(let[K,H]of Object.entries(J.envVars))try{W[K]=await this.vault.decrypt(H)}catch{W[K]=H}Y={...J,envVars:W}}else Y=J}catch(J){console.error(`Failed to parse connection_headers for connection ${$.id} (org: ${$.organization_id}, type: ${$.connection_type}, title: ${$.title}):`,J)}let G=(J)=>{if(J===null)return null;if(typeof J==="string")try{return JSON.parse(J)}catch{return null}return J};return{id:$.id,organization_id:$.organization_id,created_by:$.created_by,updated_by:$.updated_by??void 0,title:$.title,description:$.description,icon:$.icon,app_name:$.app_name,app_id:$.app_id,slug:$.slug,connection_type:$.connection_type,connection_url:$.connection_url,connection_token:X,connection_headers:Y,oauth_config:G($.oauth_config),configuration_state:Q,configuration_scopes:G($.configuration_scopes),metadata:G($.metadata),tools:null,bindings:G($.bindings),status:$.status,created_at:$.created_at,updated_at:$.updated_at}}}var GC8,JC8,Hy1;var Vx0=w(()=>{kW();rl();vX();U8();u80();Ky1();GC8=["connection_headers","oauth_config","configuration_scopes","metadata","bindings"],JC8=new Set(["id","organization_id","created_by","updated_by","title","description","icon","app_name","app_id","slug","connection_type","connection_url","status","created_at","updated_at"]),Hy1=new Set(["metadata","configuration_scopes","bindings"])});import{createHash as WC8,randomBytes as KC8,timingSafeEqual as Rc6}from"crypto";function FC8($){return $.toString("base64").replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}function Cx0($){return WC8("sha256").update($).digest("hex")}function By1($){let Z=Sx0.length+1,X=Z+Oy1;if(!$.startsWith(`${Sx0}_`)||$.length<=X+1||$[X]!=="_")return null;let Q=$.slice(Z,X),Y=$.slice(X+1);if(!Uy1.test(Q)||!Uy1.test(Y))return null;return Q}function wy1(){let $=FC8(KC8(HC8)),Z=$.slice(0,Oy1),X=`${Sx0}_${Z}_${$}`;return{plaintext:X,prefix:Z,hash:Cx0(X)}}var Sx0="stv",HC8=32,Oy1=12,Uy1;var Dy1=w(()=>{Uy1=/^[A-Za-z0-9_-]+$/});function Ly1($){return{id:$.id,organizationId:$.organization_id,subjectConnectionId:$.subject_connection_id,tokenHash:$.token_hash,tokenPrefix:$.token_prefix,name:$.name,revokedAt:$.revoked_at,lastUsedAt:$.last_used_at,createdAt:$.created_at,updatedAt:$.updated_at}}class _x0{db;constructor($){this.db=$}async createOrRotateWorkloadToken($){let Z=$.name??"default";return await this.db.transaction().execute(async(Q)=>{if(!await Q.selectFrom("connections").select("id").where("id","=",$.subjectConnectionId).where("organization_id","=",$.organizationId).executeTakeFirst())throw Error("Subject connection not found in organization");let G=wy1(),J=new Date().toISOString();await Q.updateTable("connection_workload_tokens").set({revoked_at:J,updated_at:J}).where("organization_id","=",$.organizationId).where("subject_connection_id","=",$.subjectConnectionId).where("name","=",Z).where("revoked_at","is",null).execute();let W=await Q.insertInto("connection_workload_tokens").values({id:m8("cwt"),organization_id:$.organizationId,subject_connection_id:$.subjectConnectionId,token_hash:G.hash,token_prefix:G.prefix,name:Z,revoked_at:null,last_used_at:null,created_at:J,updated_at:J}).returningAll().executeTakeFirstOrThrow();return{plaintextToken:G.plaintext,record:Ly1(W)}})}async findActiveWorkloadToken($){let Z=await this.db.selectFrom("connection_workload_tokens").selectAll().where("organization_id","=",$.organizationId).where("subject_connection_id","=",$.subjectConnectionId).where("name","=",$.name??"default").where("revoked_at","is",null).executeTakeFirst();return Z?Ly1(Z):null}async revokeWorkloadToken($){let Z=new Date().toISOString();await this.db.updateTable("connection_workload_tokens").set({revoked_at:Z,updated_at:Z}).where("id","=",$.tokenId).where("organization_id","=",$.organizationId).where("subject_connection_id","=",$.subjectConnectionId).where("revoked_at","is",null).execute()}async authenticateWorkloadToken($){let Z=By1($);if(!Z)return null;let X=Cx0($),Q=await this.db.selectFrom("connection_workload_tokens").select(["id","organization_id","subject_connection_id","token_prefix"]).where("token_prefix","=",Z).where("token_hash","=",X).where("revoked_at","is",null).executeTakeFirst();if(!Q)return null;let Y=new Date().toISOString();return await this.db.updateTable("connection_workload_tokens").set({last_used_at:Y,updated_at:Y}).where("id","=",Q.id).execute(),{tokenId:Q.id,tokenPrefix:Q.token_prefix,organizationId:Q.organization_id,subjectConnectionId:Q.subject_connection_id}}async replaceGrantsForSubject($){await this.db.transaction().execute(async(Z)=>{if(!await Z.selectFrom("connections").select("id").where("id","=",$.subjectConnectionId).where("organization_id","=",$.organizationId).executeTakeFirst())throw Error("Referenced connection not found in organization");let Q=[...new Set($.grants.map((J)=>J.targetConnectionId))];if(Q.length>0){if((await Z.selectFrom("connections").select("id").where("organization_id","=",$.organizationId).where("id","in",Q).execute()).length!==Q.length)throw Error("Referenced connection not found in organization")}if(await Z.deleteFrom("connection_credential_grants").where("organization_id","=",$.organizationId).where("subject_connection_id","=",$.subjectConnectionId).execute(),$.grants.length===0)return;let Y=new Date().toISOString(),G=$.grants.map((J)=>({id:m8("ccg"),organization_id:$.organizationId,subject_connection_id:$.subjectConnectionId,target_connection_id:J.targetConnectionId,scope:J.scope,created_by:$.createdBy,created_at:Y,updated_at:Y}));await Z.insertInto("connection_credential_grants").values(G).execute()})}async hasGrant($){return!!await this.db.selectFrom("connection_credential_grants").select("id").where("organization_id","=",$.organizationId).where("subject_connection_id","=",$.subjectConnectionId).where("target_connection_id","=",$.targetConnectionId).where("scope","=",$.scope).executeTakeFirst()}}var d80="credential:access-token:read",m80="credential:configuration:read";var i80=w(()=>{vX();Dy1()});class nf{db;constructor($){this.db=$}async create($,Z,X,Q){let Y=Q?.id??m8("vir"),G=new Date().toISOString();await this.db.transaction().execute(async(W)=>{if(await W.insertInto("connections").values({id:Y,organization_id:$,created_by:Z,title:X.title,description:X.description??null,icon:X.icon??null,app_name:null,app_id:null,connection_type:"VIRTUAL",pinned:X.pinned??!1,connection_url:`virtual://${Y}`,connection_token:null,connection_headers:null,oauth_config:null,configuration_state:null,configuration_scopes:null,metadata:X.metadata?JSON.stringify(X.metadata):null,bindings:null,status:X.status??"active",created_at:G,updated_at:G}).execute(),X.connections.length>0)await W.insertInto("connection_aggregations").values(X.connections.map((K)=>({id:m8("agg"),parent_connection_id:Y,child_connection_id:K.connection_id,selected_tools:K.selected_tools?JSON.stringify(K.selected_tools):null,selected_resources:K.selected_resources?JSON.stringify(K.selected_resources):null,selected_prompts:K.selected_prompts?JSON.stringify(K.selected_prompts):null,dependency_mode:"direct",created_at:G}))).execute()});let J=await this.findById(Y);if(!J)throw Error(`Failed to create virtual MCP with id: ${Y}`);return J}async findById($,Z){let X=IG($);if(X)return{...Rx0(Z??X),pinned:!1,connections:[]};let Q=x80($);if(Q)return{...cx1(Z??Q),pinned:!1,connections:[]};return this.findByIdInternal(this.db,$)}async findByIdInternal($,Z){let X=await $.selectFrom("connections").selectAll().where("id","=",Z).where("connection_type","=","VIRTUAL").executeTakeFirst();if(!X)return null;let Q=await $.selectFrom("connection_aggregations").selectAll().where("parent_connection_id","=",Z).where("dependency_mode","=","direct").execute();return this.deserializeVirtualMCPEntity(X,Q)}async list($,Z){let X=this.db.selectFrom("connections").selectAll().where("organization_id","=",$).where("connection_type","=","VIRTUAL");if(Z?.pinnedOnly)X=X.where("pinned","=",!0);let Q=await X.execute(),Y=Q.map((W)=>W.id);if(Y.length===0)return[];let G=await this.db.selectFrom("connection_aggregations").selectAll().where("parent_connection_id","in",Y).where("dependency_mode","=","direct").execute(),J=new Map;for(let W of G){let K=J.get(W.parent_connection_id)??[];K.push(W),J.set(W.parent_connection_id,K)}return Q.map((W)=>this.deserializeVirtualMCPEntity(W,J.get(W.id)??[]))}async listByIds($,Z){if(Z.length===0)return[];let X=await this.db.selectFrom("connections").selectAll().where("id","in",Z).where("organization_id","=",$).where("connection_type","=","VIRTUAL").execute();if(X.length===0)return[];let Q=X.map((J)=>J.id),Y=await this.db.selectFrom("connection_aggregations").selectAll().where("parent_connection_id","in",Q).where("dependency_mode","=","direct").execute(),G=new Map;for(let J of Y){let W=G.get(J.parent_connection_id)??[];W.push(J),G.set(J.parent_connection_id,W)}return X.map((J)=>this.deserializeVirtualMCPEntity(J,G.get(J.id)??[]))}async listByConnectionId($,Z){let Q=(await this.db.selectFrom("connection_aggregations").select("parent_connection_id").where("child_connection_id","=",Z).execute()).map((K)=>K.parent_connection_id);if(Q.length===0)return[];let Y=await this.db.selectFrom("connections").selectAll().where("id","in",Q).where("organization_id","=",$).where("connection_type","=","VIRTUAL").execute();if(Y.length===0)return[];let G=Y.map((K)=>K.id),J=await this.db.selectFrom("connection_aggregations").selectAll().where("parent_connection_id","in",G).where("dependency_mode","=","direct").execute(),W=new Map;for(let K of J){let H=W.get(K.parent_connection_id)??[];H.push(K),W.set(K.parent_connection_id,H)}return Y.map((K)=>this.deserializeVirtualMCPEntity(K,W.get(K.id)??[]))}async update($,Z,X){let Q=new Date().toISOString(),Y={updated_at:Q,updated_by:Z};if(X.title!==void 0)Y.title=X.title;if(X.description!==void 0)Y.description=X.description;if(X.icon!==void 0)Y.icon=X.icon;if(X.status!==void 0)Y.status=X.status;if(X.pinned!==void 0)Y.pinned=X.pinned;if(X.metadata!==void 0)Y.metadata=X.metadata?JSON.stringify(X.metadata):null;let G=[];await this.db.transaction().execute(async(W)=>{if(await W.updateTable("connections").set(Y).where("id","=",$).where("connection_type","=","VIRTUAL").execute(),X.connections!==void 0){let K=await W.selectFrom("connection_aggregations").select("child_connection_id").where("parent_connection_id","=",$).where("dependency_mode","=","direct").execute(),H=new Set(K.map((N)=>N.child_connection_id));if(await W.deleteFrom("connection_aggregations").where("parent_connection_id","=",$).where("dependency_mode","=","direct").execute(),X.connections.length>0)await W.insertInto("connection_aggregations").values(X.connections.map((N)=>({id:m8("agg"),parent_connection_id:$,child_connection_id:N.connection_id,selected_tools:N.selected_tools?JSON.stringify(N.selected_tools):null,selected_resources:N.selected_resources?JSON.stringify(N.selected_resources):null,selected_prompts:N.selected_prompts?JSON.stringify(N.selected_prompts):null,dependency_mode:"direct",created_at:Q}))).execute();let F=new Set(X.connections.map((N)=>N.connection_id));for(let N of H)if(!F.has(N))G.push(N)}});for(let W of G)await this.cleanOrphanedPinnedViews([$],W);let J=await this.findById($);if(!J)throw Error("Virtual MCP not found after update");return J}async delete($){await this.db.transaction().execute(async(Z)=>{await Z.deleteFrom("threads").where("virtual_mcp_id","=",$).execute(),await Z.deleteFrom("connection_aggregations").where("parent_connection_id","=",$).execute(),await Z.deleteFrom("connections").where("id","=",$).where("connection_type","=","VIRTUAL").execute()})}async removeConnectionReferences($){let Z=await this.db.selectFrom("connection_aggregations").select("parent_connection_id").where("child_connection_id","=",$).execute();await this.db.deleteFrom("connection_aggregations").where("child_connection_id","=",$).execute(),await this.cleanOrphanedPinnedViews(Z.map((X)=>X.parent_connection_id),$)}async cleanOrphanedPinnedViews($,Z){for(let X of $){let Q=await this.db.selectFrom("connections").select("metadata").where("id","=",X).executeTakeFirst();if(!Q?.metadata)continue;let Y;try{Y=typeof Q.metadata==="string"?JSON.parse(Q.metadata):Q.metadata}catch{continue}let G=Y?.ui?.pinnedViews;if(!Array.isArray(G))continue;let J=G.filter((H)=>H.connectionId!==Z);if(J.length===G.length)continue;let W=Y.ui??{},K={...Y,ui:{...W,pinnedViews:J.length>0?J:null}};await this.db.updateTable("connections").set({metadata:JSON.stringify(K)}).where("id","=",X).execute()}}deserializeVirtualMCPEntity($,Z){let X=$.created_at instanceof Date?$.created_at.toISOString():$.created_at,Q=$.updated_at instanceof Date?$.updated_at.toISOString():$.updated_at,Y=$.status==="active"?"active":"inactive",G=this.parseJson($.metadata),{sandboxMap:J,...W}=G??{},K=J!==void 0?ov0(J):void 0;return{id:$.id,organization_id:$.organization_id,title:$.title,description:$.description,icon:$.icon,status:Y,pinned:$.pinned,created_at:X,updated_at:Q,created_by:$.created_by,updated_by:$.updated_by??void 0,metadata:{...W,instructions:G?.instructions??null,...K!==void 0?{sandboxMap:K}:{}},connections:Z.map((H)=>({connection_id:H.child_connection_id,selected_tools:this.parseJson(H.selected_tools),selected_resources:this.parseJson(H.selected_resources),selected_prompts:this.parseJson(H.selected_prompts)}))}}parseJson($){if($===null)return null;if(typeof $==="string")try{return JSON.parse($)}catch{return null}return $}}function Ey1($){let Z=new Map,X=(Q,Y)=>{let G=Z.get(Q);if(G)return G;let J=Y();return Z.set(Q,J),J};return new Proxy($,{get(Q,Y,G){if(Y==="list")return(J,W)=>X(`list:${J}:${W?.pinnedOnly?1:0}`,()=>Q.list(J,W));if(Y==="create"||Y==="update"||Y==="delete"||Y==="removeConnectionReferences")return(...J)=>{return Z.clear(),Q[Y](...J)};return Reflect.get(Q,Y,G)}})}var vx0=w(()=>{vX();U8()});function dD($){let Z=String($??"");if(Z&&!Z.includes("T"))return Z.replace(" ","T")+"Z";return Z}function w$($){return $.replace(/\0/g,"").replace(/\\/g,"\\\\").replace(/'/g,"''")}function y8($){let Z=Number($??0);return Number.isFinite(Z)?Z:0}function UC8($){if(!NC8.has($))throw Error(`Invalid groupByColumn: ${$}`);return $}function fx0($){if(!OC8.test($))throw Error(`Invalid JSONPath: ${$}`);if($.startsWith("$."))return $;if($.startsWith("."))return`$${$}`;return`$.${$}`}function gx0($){return $.replace(/^\$\./,"").split(".").map((X)=>`'${w$(X)}'`).join(", ")}function DC8($){let Z=BC8.exec($);if(!Z||!Z[1]||!Z[2])throw Error(`Invalid interval: ${$}`);let X=parseInt(Z[1],10),Q=Z[2],Y=wC8[Q];if(X<1||X>Y)throw Error(`Invalid interval amount: ${X}${Q} (max ${Y}${Q})`);return{amount:X,unit:Q}}function bU($,Z,X="timestamp"){let{amount:Q,unit:Y}=DC8($),J={m:"MINUTE",h:"HOUR",d:"DAY"}[Y];if(Z==="duckdb")return`time_bucket(INTERVAL '${Q} ${J}', CAST(${X} AS TIMESTAMP))`;return`toStartOfInterval(${X}, INTERVAL ${Q} ${J})`}function sl($,Z,X){if(X==="duckdb")return`json_extract_string(${$}, '${Z}')`;let Q=gx0(Z);return`JSONExtractString(${$}, ${Q})`}function LC8($,Z,X){if(X==="duckdb")return`CAST(json_extract_string(${$}, '${Z}') AS DOUBLE)`;let Q=gx0(Z);return`JSONExtractFloat(${$}, ${Q})`}function jy1($,Z,X){if(X==="duckdb")return`TRY_CAST(json_extract_string(${$}, '${Z}') AS DOUBLE)`;let Q=gx0(Z);return`toFloat64OrZero(JSONExtractString(${$}, ${Q}))`}function bx0($){if($===null||$===void 0)return{};if(typeof $==="object")return $;let Z=String($);try{return JSON.parse(Z)}catch{return{_decocms_truncated:Z}}}function xx0($){return{id:String($.id??""),organizationId:String($.organization_id??""),connectionId:String($.connection_id??""),toolName:String($.tool_name??""),input:bx0($.input),output:bx0($.output),isError:$.is_error===1||$.is_error===!0||$.is_error==="1"||typeof $.is_error==="bigint"&&$.is_error===1n,errorMessage:$.error_message!=null?String($.error_message):null,durationMs:Number($.duration_ms??0),timestamp:(()=>{if($.timestamp instanceof Date)return $.timestamp.toISOString();let Z=String($.timestamp??""),X=new Date(Z.includes("T")?Z:Z.replace(" ","T")+"Z");return Number.isNaN(X.getTime())?Z:X.toISOString()})(),userId:$.user_id!=null?String($.user_id):null,requestId:String($.request_id??""),userAgent:$.user_agent!=null?String($.user_agent):null,virtualMcpId:$.virtual_mcp_id!=null?String($.virtual_mcp_id):null,properties:$.properties?bx0($.properties):null}}function Ty1($,Z){let X=[];if($.properties)for(let[Q,Y]of Object.entries($.properties)){let G=w$(Q),J=w$(Y);if(Z==="duckdb")X.push(`json_extract_string(properties, '$.${G}') = '${J}'`);else X.push(`JSONExtractString(properties, '${G}') = '${J}'`)}if($.propertyKeys)for(let Q of $.propertyKeys){let Y=w$(Q);if(Z==="duckdb")X.push(`json_extract_string(properties, '$.${Y}') IS NOT NULL AND json_extract_string(properties, '$.${Y}') != ''`);else X.push(`JSONExtractString(properties, '${Y}') IS NOT NULL AND JSONExtractString(properties, '${Y}') != ''`)}if($.propertyPatterns)for(let[Q,Y]of Object.entries($.propertyPatterns)){let G=w$(Q),J=w$(Y);if(Z==="duckdb")X.push(`json_extract_string(properties, '$.${G}') ILIKE '${J}'`);else X.push(`JSONExtractString(properties, '${G}') ILIKE '${J}'`)}if($.propertyInValues)for(let[Q,Y]of Object.entries($.propertyInValues)){let G=w$(Q),J=w$(Y);if(Z==="duckdb")X.push(`list_contains(string_split(json_extract_string(properties, '$.${G}'), ','), '${J}')`);else X.push(`has(splitByChar(',', JSONExtractString(properties, '${G}')), '${J}')`)}return X}function Py1($,Z){let X=[];if(MG(X,Z?.startDate,$),!Z)return X;if(Z.connectionIds?.length){let Q=Z.connectionIds.map((Y)=>`'${w$(Y)}'`).join(",");X.push(`connection_id IN (${Q})`)}if(Z.toolNames?.length){let Q=Z.toolNames.map((Y)=>`'${w$(Y)}'`).join(",");X.push(`tool_name IN (${Q})`)}if(Z.virtualMcpIds?.length){let Q=Z.virtualMcpIds.map((Y)=>`'${w$(Y)}'`).join(",");X.push(`virtual_mcp_id IN (${Q})`)}if(Z.endDate)X.push(qG(Z.endDate,$));if(Z.propertyFilters)X.push(...Ty1(Z.propertyFilters,$));return X}function Ay1($,Z,X="timestamp"){if(Z==="duckdb")return`CAST(${X} AS TIMESTAMP) >= TIMESTAMP '${$.toISOString()}'`;if(X==="bucket")return`${X} >= parseDateTimeBestEffort('${$.toISOString()}')`;return`${X} >= parseDateTime64BestEffort('${$.toISOString()}', 9)`}function qG($,Z,X="timestamp"){if(Z==="duckdb")return`CAST(${X} AS TIMESTAMP) <= TIMESTAMP '${$.toISOString()}'`;if(X==="bucket")return`${X} <= parseDateTimeBestEffort('${$.toISOString()}')`;return`${X} <= parseDateTime64BestEffort('${$.toISOString()}', 9)`}function MG($,Z,X,Q="timestamp"){if(Z)$.push(Ay1(Z,X,Q));else if(X==="clickhouse")$.push(Ay1(new Date(Date.now()-EC8),X,Q))}class hx0{engine;sourceFactory;metricEngine;metricSourceFactory;dialect;metricsFromLogs;constructor($,Z,X,Q,Y="clickhouse",G=!1){this.engine=$;this.sourceFactory=Z;this.metricEngine=X;this.metricSourceFactory=Q;this.dialect=Y;this.metricsFromLogs=G}async query($){if(!$.organizationId)throw Error("organizationId is required");let Z=this.sourceFactory($.organizationId,{startDate:$.startDate,endDate:$.endDate}),X=[`organization_id = '${w$($.organizationId)}'`];if($.connectionId)X.push(`connection_id = '${w$($.connectionId)}'`);if($.excludeConnectionIds?.length){let U=$.excludeConnectionIds.map((O)=>`'${w$(O)}'`).join(",");X.push(`connection_id NOT IN (${U})`)}if($.virtualMcpId)X.push(`virtual_mcp_id = '${w$($.virtualMcpId)}'`);if($.toolName)X.push(`tool_name = '${w$($.toolName)}'`);if($.isError!==void 0)X.push(`is_error = ${$.isError?1:0}`);if(MG(X,$.startDate,this.dialect),$.endDate)X.push(qG($.endDate,this.dialect));if($.propertyFilters)X.push(...Ty1($.propertyFilters,this.dialect));let Q=1000,Y=Math.min(Math.max(1,Math.floor($.limit??50)),Q),G=Math.max(0,Math.floor($.offset??0)),J=X.join(" AND ");if(this.dialect==="duckdb"){let U=`SELECT ${zy1}, count(*) OVER () AS _total FROM ${Z} WHERE ${J} ORDER BY timestamp DESC LIMIT ${Y} OFFSET ${G}`,O=await this.engine.query(U);if(O.length===0)return{logs:[],total:0};let B=Number(O[0]._total??0);return{logs:O.map(xx0),total:B}}let W=`SELECT count(*) AS total FROM ${Z} WHERE ${J}`,K=`SELECT ${zy1} FROM ${Z} WHERE ${J} ORDER BY timestamp DESC LIMIT ${Y} OFFSET ${G}`,[H,F]=await Promise.all([this.engine.query(W),this.engine.query(K)]),N=Number(H[0]?.total??0);return{logs:F.map(xx0),total:N}}async getById($,Z){if(!$||!Z)return null;let Q=`SELECT * FROM ${this.sourceFactory($)} WHERE organization_id = '${w$($)}' AND id = '${w$(Z)}' LIMIT 1`,Y=await this.engine.query(Q);if(Y.length===0)return null;return xx0(Y[0])}async getStats($){if(!$.organizationId)throw Error("organizationId is required");let Z=this.sourceFactory($.organizationId,{startDate:$.startDate,endDate:$.endDate}),X=[`organization_id = '${w$($.organizationId)}'`];if(MG(X,$.startDate,this.dialect),$.endDate)X.push(qG($.endDate,this.dialect));let Q=`SELECT count(*) AS total_calls, coalesce(sum(CASE WHEN is_error = 1 THEN 1.0 ELSE 0.0 END) / NULLIF(count(*), 0), 0) AS error_rate, coalesce(avg(duration_ms), 0) AS avg_duration_ms FROM ${Z} WHERE ${X.join(" AND ")}`,G=(await this.engine.query(Q))[0]??{};return{totalCalls:Number(G.total_calls??0),errorRate:Number(G.error_rate??0),avgDurationMs:Number(G.avg_duration_ms??0)}}async queryToolCallHeatmap($){if(!$.organizationId)throw Error("organizationId is required");let Z=this.sourceFactory($.organizationId,{startDate:$.startDate,endDate:$.endDate}),X=[`organization_id = '${w$($.organizationId)}'`,"type = 'tool_call'"];if($.filters?.virtualMcpIds?.length){let J=$.filters.virtualMcpIds.map((W)=>`'${w$(W)}'`).join(",");X.push(`virtual_mcp_id IN (${J})`)}if($.filters?.excludeConnectionIds?.length){let J=$.filters.excludeConnectionIds.map((W)=>`'${w$(W)}'`).join(",");X.push(`connection_id NOT IN (${J})`)}if(MG(X,$.startDate,this.dialect),$.endDate)X.push(qG($.endDate,this.dialect));let Q=Math.min(Math.max(1,Math.floor($.limit??500)),1000),Y=`SELECT virtual_mcp_id, tool_name, count(*) AS calls, coalesce(sum(CASE WHEN is_error = 1 THEN 1 ELSE 0 END), 0) AS errors, coalesce(sum(length(output)), 0) AS output_size FROM ${Z} WHERE ${X.join(" AND ")} GROUP BY virtual_mcp_id, tool_name ORDER BY calls DESC LIMIT ${Q}`;return{cells:(await this.engine.query(Y)).map((J)=>({virtualMcpId:J.virtual_mcp_id?String(J.virtual_mcp_id):null,toolName:String(J.tool_name??""),calls:Number(J.calls??0),errors:Number(J.errors??0),outputSize:Number(J.output_size??0)}))}}async queryLlmUsageStats($){let Z={totalCalls:0,totalErrors:0,avgDurationMs:0,p50DurationMs:0,p95DurationMs:0,totalInputTokens:0,totalOutputTokens:0,totalTokens:0,totalCostUsd:0,topTools:[],timeseries:[]};if(!$.organizationId||!$.connectionId)return Z;let X=this.dialect,Q=X==="clickhouse",Y=this.sourceFactory($.organizationId,{startDate:$.startDate,endDate:$.endDate}),G=bU($.interval,X,"timestamp"),J=(E)=>`coalesce(${jy1("properties",`$.${E}`,X)}, 0)`,W=Q?"count()":"count(*)",K=Q?"countIf(is_error = 1)":"count(*) FILTER (WHERE is_error = 1)",H=(E)=>Q?`quantile(${E})(duration_ms)`:`quantile_cont(duration_ms, ${E})`,F=[`organization_id = '${w$($.organizationId)}'`,`connection_id = '${w$($.connectionId)}'`];if(MG(F,$.startDate,X),$.endDate)F.push(qG($.endDate,X));if($.userIds?.length){let E=$.userIds.slice(0,100).map((j)=>`'${w$(j)}'`).join(",");F.push(`user_id IN (${E})`)}let N=F.join(" AND "),U=Math.min(Math.max(1,Math.floor($.topN??5)),20),O=`${W} AS calls,
109
+ `.trim();lx1=RY("site-diagnostics_"),au6=lx1.is,su6=lx1.get,dx1=RY("commerce-discovery_"),eu6=dx1.is,y80=dx1.get;aH={AGENT_MANAGER:RY("studio-agent-manager_"),AUTOMATION_MANAGER:RY("studio-automation-manager_"),CONNECTION_MANAGER:RY("studio-connection-manager_"),API_KEY_MANAGER:RY("studio-api-key-manager_"),STORE_MANAGER:RY("studio-store-manager_"),BRAND_MANAGER:RY("studio-brand-manager_"),TASK_MANAGER:RY("studio-task-manager_"),USAGE_MANAGER:RY("studio-usage-manager_")},h7={AGENT_MANAGER:aH.AGENT_MANAGER.get,AUTOMATION_MANAGER:aH.AUTOMATION_MANAGER.get,CONNECTION_MANAGER:aH.CONNECTION_MANAGER.get,API_KEY_MANAGER:aH.API_KEY_MANAGER.get,STORE_MANAGER:aH.STORE_MANAGER.get,BRAND_MANAGER:aH.BRAND_MANAGER.get,TASK_MANAGER:aH.TASK_MANAGER.get,USAGE_MANAGER:aH.USAGE_MANAGER.get}});function ox1($){return $.toLowerCase().replace(/[^a-z0-9]/g,"")}function $C8($){return ox1($).includes("deepresearch")}function rx1($){let Z=ox1($);if(Z.includes("deepresearch"))return!1;return ZC8.some((X)=>Z.includes(X))}function XC8($){return $.asyncResearch!==!0&&rx1($.modelId)}function QC8($){return $.asyncResearch===!0||$C8($.modelId)||rx1($.modelId)}function df($,Z,X,Q){for(let Y of X){let G=$.find((J)=>J.modelId===Y);if(G)return{keyId:Z,modelId:G.modelId,title:G.title}}for(let Y of X){let G=$.find((J)=>J.modelId.includes(Y));if(G)return{keyId:Z,modelId:G.modelId,title:G.title}}if(Q){let Y=$.find(Q);if(Y)return{keyId:Z,modelId:Y.modelId,title:Y.title}}return null}function ax1($,Z){let X={chat:{fast:null,smart:null,thinking:null},image:null,webSearch:null,deepResearch:null};for(let Q of $){let Y=Z[Q.id]??[],G=Q.providerId;if(!X.chat.fast)X.chat.fast=df(Y,Q.id,tS8[G]??[]);if(!X.chat.smart)X.chat.smart=df(Y,Q.id,oS8[G]??[]);if(!X.chat.thinking)X.chat.thinking=df(Y,Q.id,rS8[G]??[]);if(!X.image)X.image=df(Y,Q.id,aS8[G]??[],(J)=>J.capabilities?.includes("image")===!0);if(!X.webSearch)X.webSearch=df(Y,Q.id,sS8[G]??[],XC8);if(!X.deepResearch)X.deepResearch=df(Y,Q.id,eS8[G]??[],QC8)}return X}var tS8,oS8,rS8,aS8,sS8,eS8,ZC8;var sx1=w(()=>{tS8={anthropic:["claude-haiku-4-5","claude-haiku"],openrouter:["qwen/qwen3.5-flash","anthropic/claude-haiku-4.5","anthropic/claude-haiku","google/gemini-3-flash"],deco:["qwen/qwen3.5-flash","anthropic/claude-haiku"],llmapi:["claude-haiku-4-5","claude-haiku","gpt-4o-mini"],google:["gemini-2.5-flash","gemini-3-flash"]},oS8={anthropic:["claude-sonnet-5","claude-sonnet"],openrouter:["anthropic/claude-sonnet-5","anthropic/claude-sonnet","anthropic/claude-opus-4.8","google/gemini-3-pro"],deco:["anthropic/claude-sonnet-5","anthropic/claude-sonnet","anthropic/claude"],llmapi:["claude-sonnet-4-6","claude-sonnet"],google:["gemini-3-pro","gemini-3-flash"]},rS8={anthropic:["claude-opus-4-8","claude-sonnet-5","claude-sonnet","claude-fable-5"],openrouter:["anthropic/claude-opus-4.8:extended","anthropic/claude-opus-4.8","anthropic/claude-sonnet-5:extended","anthropic/claude-sonnet-5","google/gemini-3-pro","anthropic/claude-fable-5"],deco:["anthropic/claude-opus","anthropic/claude-sonnet-4.6","anthropic/claude-sonnet","anthropic/claude-fable"],llmapi:["claude-opus-4-8","claude-opus","claude-sonnet-4-6"],google:["gemini-3-pro"]},aS8={openrouter:["openai/gpt-image-1","google/gemini-2.0-flash-image"],deco:["openai/gpt-image-1","google/gemini-2.0-flash-image"],llmapi:["gemini-2.5-flash-image","gpt-image-1"],google:["gemini-2.0-flash-image"]},sS8={openrouter:["perplexity/sonar","perplexity/sonar-pro"],deco:["perplexity/sonar","perplexity/sonar-pro"]},eS8={openrouter:["perplexity/deep-research","perplexity/sonar-pro"],deco:["perplexity/deep-research","perplexity/sonar-pro"]};ZC8=["sonar","searchpreview","online"]});function g80($){if(!$)return;let Z={};for(let X in $){let Q=$[X];if(typeof Q==="object"&&Q!==null){let Y={};for(let G of YC8)if(G in Q)Y[G]=Q[G];Z[X]=Y}}return Object.keys(Z).length>0?Z:void 0}var YC8;var ex1=w(()=>{YC8=["usage","cost","model"]});var U8=w(()=>{w$0();tx1();sx1();ex1()});function h80($){return $.toLowerCase().trim().replace(/\//g,"-").replace(/[^a-z0-9\s_-]+/g,"").replace(/[\s_-]+/g,"-").replace(/^-+|-+$/g,"")}function fU($){if($.app_name)return $.app_name;if($.connection_url)try{let Z=new URL($.connection_url),Q=((Z.port?`${Z.hostname}-${Z.port}`:Z.hostname)+Z.pathname).replace(/\/+$/,"");return h80(Q)}catch{return h80($.connection_url)}if($.title)return h80($.title);return $.id??"unknown"}var u80=()=>{};var mf=300000,c80=5000,Ix0=3,qx0=30000,$y1=65000,l80=1000,pf=3,Zy1=5,Xy1=60000,Qy1=300000,Mx0=60000;function Yy1(){if(sH.size<l80)return;let $=null,Z=1/0;for(let[X,Q]of sH)if(Q.lastFailureAt<Z)Z=Q.lastFailureAt,$=X;if($)sH.delete($)}function Gy1($){let Z=sH.get($);if(!Z)return Yy1(),sH.set($,{consecutiveFailures:1,disabled:!1,lastFailureAt:Date.now()}),{consecutiveFailures:1,thresholdCrossed:1>=pf};return Z.consecutiveFailures++,Z.lastFailureAt=Date.now(),{consecutiveFailures:Z.consecutiveFailures,thresholdCrossed:Z.consecutiveFailures>=pf}}function kx0($){let Z=sH.get($);if(Z){Z.disabled=!0;return}Yy1(),sH.set($,{consecutiveFailures:pf,disabled:!0,lastFailureAt:Date.now()})}function Jy1($){return sH.get($)?.disabled??!1}function Wy1($){sH.delete($)}var sH;var Ky1=w(()=>{sH=new Map});import{sql as m$}from"kysely";function Fy1($){if($.length===0)return null;let Z=$[0];if($.length===1&&JC8.has(Z))return m$.ref(Z);if($.length===2&&Hy1.has(Z)){let X=$[1];return m$`${m$.ref(Z)}->>${m$.lit(X)}`}if($.length>2&&Hy1.has(Z)){let X=`{${$.slice(1).join(",")}}`;return m$`${m$.ref(Z)}#>>${m$.lit(X)}`}return null}function Ny1($){if("conditions"in $){let{operator:G,conditions:J}=$;if(J.length===0)return m$`true`;let W=J.map((K)=>Ny1(K));switch(G){case"and":return m$`(${m$.join(W,m$` AND `)})`;case"or":return m$`(${m$.join(W,m$` OR `)})`;case"not":return m$`NOT (${m$.join(W,m$` AND `)})`;default:return m$`true`}}let{field:Z,operator:X,value:Q}=$,Y=Fy1(Z);if(!Y)return m$`true`;switch(X){case"eq":return Q===null?m$`${Y} IS NULL`:m$`${Y} = ${m$.val(Q)}`;case"gt":return m$`${Y} > ${m$.val(Q)}`;case"gte":return m$`${Y} >= ${m$.val(Q)}`;case"lt":return m$`${Y} < ${m$.val(Q)}`;case"lte":return m$`${Y} <= ${m$.val(Q)}`;case"in":if(!Array.isArray(Q)||Q.length===0)return m$`false`;return m$`${Y} IN (${m$.join(Q.map((G)=>m$.val(G)))})`;case"like":return m$`${Y} ILIKE ${m$.val(Q)}`;case"contains":{let G=String(Q).replace(/[%_\\]/g,"\\$&");return m$`${Y} ILIKE ${m$.val(`%${G}%`)}`}default:return m$`true`}}class al{db;vault;constructor($,Z){this.db=$;this.vault=Z}async create($){let Z=$.id??m8("conn"),X=new Date().toISOString(),Q=await this.db.selectFrom("connections").select("organization_id").where("id","=",Z).executeTakeFirst();if(Q){if(Q.organization_id!==$.organization_id)throw Error("Connection ID already exists");return this.update(Z,$)}let Y=fU($),G=await this.serializeConnection({...$,id:$.id??Z,slug:Y,status:"active",created_at:X,updated_at:X}),J=await this.db.insertInto("connections").values(G).returningAll().executeTakeFirst();if(!J)throw Error(`Failed to create connection with id: ${Z}`);return this.deserializeConnection(J)}async createNew($){let Z=$.id??m8("conn"),X=new Date().toISOString(),Q=fU($),Y=await this.serializeConnection({...$,id:Z,slug:Q,status:"active",created_at:X,updated_at:X}),G;try{G=await this.db.insertInto("connections").values(Y).returningAll().executeTakeFirst()}catch(J){if(J instanceof Error&&(J.message.includes("duplicate key")||J.message.includes("unique constraint")))throw Error("Connection ID already exists");throw J}if(!G)throw Error(`Failed to create connection with id: ${Z}`);return this.deserializeConnection(G)}async findById($,Z){let X=IG($);if(X)return nx1(Z??X);let Q=this.db.selectFrom("connections").selectAll().where("id","=",$);if(Z)Q=Q.where("organization_id","=",Z);let Y=await Q.executeTakeFirst();return Y?this.deserializeConnection(Y):null}async list($,Z){let X=this.db.selectFrom("connections").selectAll().where("organization_id","=",$);if(!Z?.includeVirtual)X=X.where("connection_type","!=","VIRTUAL");if(Z?.slug)X=X.where("slug","=",Z.slug);if(Z?.where)X=X.where(Ny1(Z.where));let G=(await this.db.selectFrom(X.as("filtered")).select(m$`count(*)::int`.as("count")).executeTakeFirst())?.count??0;if(Z?.orderBy&&Z.orderBy.length>0)for(let K of Z.orderBy){let H=Fy1(K.field);if(!H)continue;let F=K.direction==="desc"?m$`desc`:m$`asc`,N=K.nulls==="first"?m$`nulls first`:m$`nulls last`;X=X.orderBy(m$`${H} ${F} ${N}`)}if(Z?.limit)X=X.limit(Z.limit);if(Z?.offset)X=X.offset(Z.offset);let J=await X.execute();return{items:await Promise.all(J.map((K)=>this.deserializeConnection(K))),totalCount:G}}async update($,Z){if(Object.keys(Z).length===0){let J=await this.findById($);if(!J)throw Error("Connection not found");return J}let X={...Z},Q=await this.db.selectFrom("connections").select(["app_name","connection_url","title"]).where("id","=",$).executeTakeFirst();if(Q){let J=(W)=>Z[W]===void 0?Q[W]:Z[W];X.slug=fU({app_name:J("app_name"),connection_url:J("connection_url"),title:J("title"),id:$})}let Y=await this.serializeConnection({...X,updated_at:new Date().toISOString()}),G=await this.db.updateTable("connections").set(Y).where("id","=",$).returningAll().executeTakeFirst();if(!G)throw Error("Connection not found after update");return this.deserializeConnection(G)}async isReferencedByThread($){return await this.db.selectFrom("threads").select("id").where(m$`metadata -> 'githubRepo' ->> 'connectionId' = ${$}`).limit(1).executeTakeFirst()!==void 0}async delete($){await this.db.deleteFrom("connections").where("id","=",$).execute()}async testConnection($,Z){let X=await this.findById($);if(!X)throw Error("Connection not found");let Q=Date.now();if(X.connection_type==="STDIO")return{healthy:!0,latencyMs:Date.now()-Q};if(!X.connection_url)return{healthy:!1,latencyMs:Date.now()-Q};try{if(await uf(X.connection_url))return{healthy:!1,latencyMs:Date.now()-Q};let G=X.connection_headers,J=new AbortController,W=setTimeout(()=>J.abort(),1e4),K;try{K=await cf()(X.connection_url,{method:"POST",signal:J.signal,headers:{"Content-Type":"application/json",...X.connection_token&&{Authorization:`Bearer ${X.connection_token}`},...G?.headers,...Z},body:JSON.stringify({jsonrpc:"2.0",method:"ping",id:1})})}finally{clearTimeout(W)}return{healthy:K.ok||K.status===404,latencyMs:Date.now()-Q}}catch{return{healthy:!1,latencyMs:Date.now()-Q}}}async serializeConnection($){let Z={};for(let[X,Q]of Object.entries($)){if(Q===void 0)continue;if(X==="tools")continue;if(X==="connection_token"&&Q)Z[X]=await this.vault.encrypt(Q);else if(X==="configuration_state"&&Q){let Y=JSON.stringify(Q);Z[X]=await this.vault.encrypt(Y)}else if(X==="connection_headers"&&Q){let Y=Q;if(qW(Y)&&Y.envVars){let G={};for(let[J,W]of Object.entries(Y.envVars))G[J]=await this.vault.encrypt(W);Z[X]=JSON.stringify({...Y,envVars:G})}else Z[X]=JSON.stringify(Y)}else if(GC8.includes(X))Z[X]=Q?JSON.stringify(Q):null;else Z[X]=Q}return Z}async handleDecryptFailures($,Z){let X=`connection ${$.id} (org: ${$.organization_id}, type: ${$.connection_type}, title: ${$.title})`;if(Jy1($.id))return;if($.status!=="active"){kx0($.id);return}let{thresholdCrossed:Q}=Gy1($.id);if(!Q){for(let{label:Y,error:G}of Z)console.error(`Failed to decrypt ${Y} for ${X}:`,G);return}try{await this.db.updateTable("connections").set({status:"error"}).where("id","=",$.id).execute(),kx0($.id),console.error(`Disabled ${X} after ${pf} consecutive decryption failures.`,Z[0]?.error)}catch(Y){console.error(`Failed to disable ${X} after decryption failures:`,Y)}}async deserializeConnection($){let Z=[],X=null;if($.connection_token)try{X=await this.vault.decrypt($.connection_token)}catch(J){Z.push({label:"connection token",error:J})}let Q=null;if($.configuration_state)try{let J=await this.vault.decrypt($.configuration_state);Q=JSON.parse(J)}catch(J){Z.push({label:"configuration state",error:J})}if(Z.length>0)await this.handleDecryptFailures($,Z);else if($.connection_token||$.configuration_state)Wy1($.id);let Y=null;if($.connection_headers)try{let J=JSON.parse($.connection_headers);if(qW(J)&&J.envVars){let W={};for(let[K,H]of Object.entries(J.envVars))try{W[K]=await this.vault.decrypt(H)}catch{W[K]=H}Y={...J,envVars:W}}else Y=J}catch(J){console.error(`Failed to parse connection_headers for connection ${$.id} (org: ${$.organization_id}, type: ${$.connection_type}, title: ${$.title}):`,J)}let G=(J)=>{if(J===null)return null;if(typeof J==="string")try{return JSON.parse(J)}catch{return null}return J};return{id:$.id,organization_id:$.organization_id,created_by:$.created_by,updated_by:$.updated_by??void 0,title:$.title,description:$.description,icon:$.icon,app_name:$.app_name,app_id:$.app_id,slug:$.slug,connection_type:$.connection_type,connection_url:$.connection_url,connection_token:X,connection_headers:Y,oauth_config:G($.oauth_config),configuration_state:Q,configuration_scopes:G($.configuration_scopes),metadata:G($.metadata),tools:null,bindings:G($.bindings),status:$.status,created_at:$.created_at,updated_at:$.updated_at}}}var GC8,JC8,Hy1;var Vx0=w(()=>{kW();rl();vX();U8();u80();Ky1();GC8=["connection_headers","oauth_config","configuration_scopes","metadata","bindings"],JC8=new Set(["id","organization_id","created_by","updated_by","title","description","icon","app_name","app_id","slug","connection_type","connection_url","status","created_at","updated_at"]),Hy1=new Set(["metadata","configuration_scopes","bindings"])});import{createHash as WC8,randomBytes as KC8,timingSafeEqual as Rc6}from"crypto";function FC8($){return $.toString("base64").replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}function Cx0($){return WC8("sha256").update($).digest("hex")}function By1($){let Z=Sx0.length+1,X=Z+Oy1;if(!$.startsWith(`${Sx0}_`)||$.length<=X+1||$[X]!=="_")return null;let Q=$.slice(Z,X),Y=$.slice(X+1);if(!Uy1.test(Q)||!Uy1.test(Y))return null;return Q}function wy1(){let $=FC8(KC8(HC8)),Z=$.slice(0,Oy1),X=`${Sx0}_${Z}_${$}`;return{plaintext:X,prefix:Z,hash:Cx0(X)}}var Sx0="stv",HC8=32,Oy1=12,Uy1;var Dy1=w(()=>{Uy1=/^[A-Za-z0-9_-]+$/});function Ly1($){return{id:$.id,organizationId:$.organization_id,subjectConnectionId:$.subject_connection_id,tokenHash:$.token_hash,tokenPrefix:$.token_prefix,name:$.name,revokedAt:$.revoked_at,lastUsedAt:$.last_used_at,createdAt:$.created_at,updatedAt:$.updated_at}}class _x0{db;constructor($){this.db=$}async createOrRotateWorkloadToken($){let Z=$.name??"default";return await this.db.transaction().execute(async(Q)=>{if(!await Q.selectFrom("connections").select("id").where("id","=",$.subjectConnectionId).where("organization_id","=",$.organizationId).executeTakeFirst())throw Error("Subject connection not found in organization");let G=wy1(),J=new Date().toISOString();await Q.updateTable("connection_workload_tokens").set({revoked_at:J,updated_at:J}).where("organization_id","=",$.organizationId).where("subject_connection_id","=",$.subjectConnectionId).where("name","=",Z).where("revoked_at","is",null).execute();let W=await Q.insertInto("connection_workload_tokens").values({id:m8("cwt"),organization_id:$.organizationId,subject_connection_id:$.subjectConnectionId,token_hash:G.hash,token_prefix:G.prefix,name:Z,revoked_at:null,last_used_at:null,created_at:J,updated_at:J}).returningAll().executeTakeFirstOrThrow();return{plaintextToken:G.plaintext,record:Ly1(W)}})}async findActiveWorkloadToken($){let Z=await this.db.selectFrom("connection_workload_tokens").selectAll().where("organization_id","=",$.organizationId).where("subject_connection_id","=",$.subjectConnectionId).where("name","=",$.name??"default").where("revoked_at","is",null).executeTakeFirst();return Z?Ly1(Z):null}async revokeWorkloadToken($){let Z=new Date().toISOString();await this.db.updateTable("connection_workload_tokens").set({revoked_at:Z,updated_at:Z}).where("id","=",$.tokenId).where("organization_id","=",$.organizationId).where("subject_connection_id","=",$.subjectConnectionId).where("revoked_at","is",null).execute()}async authenticateWorkloadToken($){let Z=By1($);if(!Z)return null;let X=Cx0($),Q=await this.db.selectFrom("connection_workload_tokens").select(["id","organization_id","subject_connection_id","token_prefix"]).where("token_prefix","=",Z).where("token_hash","=",X).where("revoked_at","is",null).executeTakeFirst();if(!Q)return null;let Y=new Date().toISOString();return await this.db.updateTable("connection_workload_tokens").set({last_used_at:Y,updated_at:Y}).where("id","=",Q.id).execute(),{tokenId:Q.id,tokenPrefix:Q.token_prefix,organizationId:Q.organization_id,subjectConnectionId:Q.subject_connection_id}}async replaceGrantsForSubject($){await this.db.transaction().execute(async(Z)=>{if(!await Z.selectFrom("connections").select("id").where("id","=",$.subjectConnectionId).where("organization_id","=",$.organizationId).executeTakeFirst())throw Error("Referenced connection not found in organization");let Q=[...new Set($.grants.map((J)=>J.targetConnectionId))];if(Q.length>0){if((await Z.selectFrom("connections").select("id").where("organization_id","=",$.organizationId).where("id","in",Q).execute()).length!==Q.length)throw Error("Referenced connection not found in organization")}if(await Z.deleteFrom("connection_credential_grants").where("organization_id","=",$.organizationId).where("subject_connection_id","=",$.subjectConnectionId).execute(),$.grants.length===0)return;let Y=new Date().toISOString(),G=$.grants.map((J)=>({id:m8("ccg"),organization_id:$.organizationId,subject_connection_id:$.subjectConnectionId,target_connection_id:J.targetConnectionId,scope:J.scope,created_by:$.createdBy,created_at:Y,updated_at:Y}));await Z.insertInto("connection_credential_grants").values(G).execute()})}async hasGrant($){return!!await this.db.selectFrom("connection_credential_grants").select("id").where("organization_id","=",$.organizationId).where("subject_connection_id","=",$.subjectConnectionId).where("target_connection_id","=",$.targetConnectionId).where("scope","=",$.scope).executeTakeFirst()}}var d80="credential:access-token:read",m80="credential:configuration:read";var i80=w(()=>{vX();Dy1()});class nf{db;constructor($){this.db=$}async create($,Z,X,Q){let Y=Q?.id??m8("vir"),G=new Date().toISOString();await this.db.transaction().execute(async(W)=>{if(await W.insertInto("connections").values({id:Y,organization_id:$,created_by:Z,title:X.title,description:X.description??null,icon:X.icon??null,app_name:null,app_id:null,connection_type:"VIRTUAL",pinned:X.pinned??!1,connection_url:`virtual://${Y}`,connection_token:null,connection_headers:null,oauth_config:null,configuration_state:null,configuration_scopes:null,metadata:X.metadata?JSON.stringify(X.metadata):null,bindings:null,status:X.status??"active",created_at:G,updated_at:G}).execute(),X.connections.length>0)await W.insertInto("connection_aggregations").values(X.connections.map((K)=>({id:m8("agg"),parent_connection_id:Y,child_connection_id:K.connection_id,selected_tools:K.selected_tools?JSON.stringify(K.selected_tools):null,selected_resources:K.selected_resources?JSON.stringify(K.selected_resources):null,selected_prompts:K.selected_prompts?JSON.stringify(K.selected_prompts):null,dependency_mode:"direct",created_at:G}))).execute()});let J=await this.findById(Y);if(!J)throw Error(`Failed to create virtual MCP with id: ${Y}`);return J}async findById($,Z){let X=IG($);if(X)return{...Rx0(Z??X),pinned:!1,connections:[]};let Q=x80($);if(Q)return{...cx1(Z??Q),pinned:!1,connections:[]};return this.findByIdInternal(this.db,$)}async findByIdInternal($,Z){let X=await $.selectFrom("connections").selectAll().where("id","=",Z).where("connection_type","=","VIRTUAL").executeTakeFirst();if(!X)return null;let Q=await $.selectFrom("connection_aggregations").selectAll().where("parent_connection_id","=",Z).where("dependency_mode","=","direct").execute();return this.deserializeVirtualMCPEntity(X,Q)}async list($,Z){let X=this.db.selectFrom("connections").selectAll().where("organization_id","=",$).where("connection_type","=","VIRTUAL");if(Z?.pinnedOnly)X=X.where("pinned","=",!0);let Q=await X.execute(),Y=Q.map((W)=>W.id);if(Y.length===0)return[];let G=await this.db.selectFrom("connection_aggregations").selectAll().where("parent_connection_id","in",Y).where("dependency_mode","=","direct").execute(),J=new Map;for(let W of G){let K=J.get(W.parent_connection_id)??[];K.push(W),J.set(W.parent_connection_id,K)}return Q.map((W)=>this.deserializeVirtualMCPEntity(W,J.get(W.id)??[]))}async listByIds($,Z){if(Z.length===0)return[];let X=await this.db.selectFrom("connections").selectAll().where("id","in",Z).where("organization_id","=",$).where("connection_type","=","VIRTUAL").execute();if(X.length===0)return[];let Q=X.map((J)=>J.id),Y=await this.db.selectFrom("connection_aggregations").selectAll().where("parent_connection_id","in",Q).where("dependency_mode","=","direct").execute(),G=new Map;for(let J of Y){let W=G.get(J.parent_connection_id)??[];W.push(J),G.set(J.parent_connection_id,W)}return X.map((J)=>this.deserializeVirtualMCPEntity(J,G.get(J.id)??[]))}async listByConnectionId($,Z){let Q=(await this.db.selectFrom("connection_aggregations").select("parent_connection_id").where("child_connection_id","=",Z).execute()).map((K)=>K.parent_connection_id);if(Q.length===0)return[];let Y=await this.db.selectFrom("connections").selectAll().where("id","in",Q).where("organization_id","=",$).where("connection_type","=","VIRTUAL").execute();if(Y.length===0)return[];let G=Y.map((K)=>K.id),J=await this.db.selectFrom("connection_aggregations").selectAll().where("parent_connection_id","in",G).where("dependency_mode","=","direct").execute(),W=new Map;for(let K of J){let H=W.get(K.parent_connection_id)??[];H.push(K),W.set(K.parent_connection_id,H)}return Y.map((K)=>this.deserializeVirtualMCPEntity(K,W.get(K.id)??[]))}async update($,Z,X){let Q=new Date().toISOString(),Y={updated_at:Q,updated_by:Z};if(X.title!==void 0)Y.title=X.title;if(X.description!==void 0)Y.description=X.description;if(X.icon!==void 0)Y.icon=X.icon;if(X.status!==void 0)Y.status=X.status;if(X.pinned!==void 0)Y.pinned=X.pinned;if(X.metadata!==void 0)Y.metadata=X.metadata?JSON.stringify(X.metadata):null;let G=[];await this.db.transaction().execute(async(W)=>{if(await W.updateTable("connections").set(Y).where("id","=",$).where("connection_type","=","VIRTUAL").execute(),X.connections!==void 0){let K=await W.selectFrom("connection_aggregations").select("child_connection_id").where("parent_connection_id","=",$).where("dependency_mode","=","direct").execute(),H=new Set(K.map((N)=>N.child_connection_id));if(await W.deleteFrom("connection_aggregations").where("parent_connection_id","=",$).where("dependency_mode","=","direct").execute(),X.connections.length>0)await W.insertInto("connection_aggregations").values(X.connections.map((N)=>({id:m8("agg"),parent_connection_id:$,child_connection_id:N.connection_id,selected_tools:N.selected_tools?JSON.stringify(N.selected_tools):null,selected_resources:N.selected_resources?JSON.stringify(N.selected_resources):null,selected_prompts:N.selected_prompts?JSON.stringify(N.selected_prompts):null,dependency_mode:"direct",created_at:Q}))).execute();let F=new Set(X.connections.map((N)=>N.connection_id));for(let N of H)if(!F.has(N))G.push(N)}});for(let W of G)await this.cleanOrphanedPinnedViews([$],W);let J=await this.findById($);if(!J)throw Error("Virtual MCP not found after update");return J}async delete($){await this.db.transaction().execute(async(Z)=>{await Z.deleteFrom("threads").where("virtual_mcp_id","=",$).execute(),await Z.deleteFrom("connection_aggregations").where("parent_connection_id","=",$).execute(),await Z.deleteFrom("connections").where("id","=",$).where("connection_type","=","VIRTUAL").execute()})}async removeConnectionReferences($){let Z=await this.db.selectFrom("connection_aggregations").select("parent_connection_id").where("child_connection_id","=",$).execute();await this.db.deleteFrom("connection_aggregations").where("child_connection_id","=",$).execute(),await this.cleanOrphanedPinnedViews(Z.map((X)=>X.parent_connection_id),$)}async cleanOrphanedPinnedViews($,Z){for(let X of $){let Q=await this.db.selectFrom("connections").select("metadata").where("id","=",X).executeTakeFirst();if(!Q?.metadata)continue;let Y;try{Y=typeof Q.metadata==="string"?JSON.parse(Q.metadata):Q.metadata}catch{continue}let G=Y?.ui?.pinnedViews;if(!Array.isArray(G))continue;let J=G.filter((H)=>H.connectionId!==Z);if(J.length===G.length)continue;let W=Y.ui??{},K={...Y,ui:{...W,pinnedViews:J.length>0?J:null}};await this.db.updateTable("connections").set({metadata:JSON.stringify(K)}).where("id","=",X).execute()}}deserializeVirtualMCPEntity($,Z){let X=$.created_at instanceof Date?$.created_at.toISOString():$.created_at,Q=$.updated_at instanceof Date?$.updated_at.toISOString():$.updated_at,Y=$.status==="active"?"active":"inactive",G=this.parseJson($.metadata),{sandboxMap:J,...W}=G??{},K=J!==void 0?ov0(J):void 0;return{id:$.id,organization_id:$.organization_id,title:$.title,description:$.description,icon:$.icon,status:Y,pinned:$.pinned,created_at:X,updated_at:Q,created_by:$.created_by,updated_by:$.updated_by??void 0,metadata:{...W,instructions:G?.instructions??null,...K!==void 0?{sandboxMap:K}:{}},connections:Z.map((H)=>({connection_id:H.child_connection_id,selected_tools:this.parseJson(H.selected_tools),selected_resources:this.parseJson(H.selected_resources),selected_prompts:this.parseJson(H.selected_prompts)}))}}parseJson($){if($===null)return null;if(typeof $==="string")try{return JSON.parse($)}catch{return null}return $}}function Ey1($){let Z=new Map,X=(Q,Y)=>{let G=Z.get(Q);if(G)return G;let J=Y();return Z.set(Q,J),J};return new Proxy($,{get(Q,Y,G){if(Y==="list")return(J,W)=>X(`list:${J}:${W?.pinnedOnly?1:0}`,()=>Q.list(J,W));if(Y==="create"||Y==="update"||Y==="delete"||Y==="removeConnectionReferences")return(...J)=>{return Z.clear(),Q[Y](...J)};return Reflect.get(Q,Y,G)}})}var vx0=w(()=>{vX();U8()});function dD($){let Z=String($??"");if(Z&&!Z.includes("T"))return Z.replace(" ","T")+"Z";return Z}function w$($){return $.replace(/\0/g,"").replace(/\\/g,"\\\\").replace(/'/g,"''")}function y8($){let Z=Number($??0);return Number.isFinite(Z)?Z:0}function UC8($){if(!NC8.has($))throw Error(`Invalid groupByColumn: ${$}`);return $}function fx0($){if(!OC8.test($))throw Error(`Invalid JSONPath: ${$}`);if($.startsWith("$."))return $;if($.startsWith("."))return`$${$}`;return`$.${$}`}function gx0($){return $.replace(/^\$\./,"").split(".").map((X)=>`'${w$(X)}'`).join(", ")}function DC8($){let Z=BC8.exec($);if(!Z||!Z[1]||!Z[2])throw Error(`Invalid interval: ${$}`);let X=parseInt(Z[1],10),Q=Z[2],Y=wC8[Q];if(X<1||X>Y)throw Error(`Invalid interval amount: ${X}${Q} (max ${Y}${Q})`);return{amount:X,unit:Q}}function bU($,Z,X="timestamp"){let{amount:Q,unit:Y}=DC8($),J={m:"MINUTE",h:"HOUR",d:"DAY"}[Y];if(Z==="duckdb")return`time_bucket(INTERVAL '${Q} ${J}', CAST(${X} AS TIMESTAMP))`;return`toStartOfInterval(${X}, INTERVAL ${Q} ${J})`}function sl($,Z,X){if(X==="duckdb")return`json_extract_string(${$}, '${Z}')`;let Q=gx0(Z);return`JSONExtractString(${$}, ${Q})`}function LC8($,Z,X){if(X==="duckdb")return`CAST(json_extract_string(${$}, '${Z}') AS DOUBLE)`;let Q=gx0(Z);return`JSONExtractFloat(${$}, ${Q})`}function jy1($,Z,X){if(X==="duckdb")return`TRY_CAST(json_extract_string(${$}, '${Z}') AS DOUBLE)`;let Q=gx0(Z);return`toFloat64OrZero(JSONExtractString(${$}, ${Q}))`}function bx0($){if($===null||$===void 0)return{};if(typeof $==="object")return $;let Z=String($);try{return JSON.parse(Z)}catch{return{_decocms_truncated:Z}}}function xx0($){return{id:String($.id??""),organizationId:String($.organization_id??""),connectionId:String($.connection_id??""),toolName:String($.tool_name??""),input:bx0($.input),output:bx0($.output),isError:$.is_error===1||$.is_error===!0||$.is_error==="1"||typeof $.is_error==="bigint"&&$.is_error===1n,errorMessage:$.error_message!=null?String($.error_message):null,durationMs:Number($.duration_ms??0),timestamp:(()=>{if($.timestamp instanceof Date)return $.timestamp.toISOString();let Z=String($.timestamp??""),X=new Date(Z.includes("T")?Z:Z.replace(" ","T")+"Z");return Number.isNaN(X.getTime())?Z:X.toISOString()})(),userId:$.user_id!=null?String($.user_id):null,requestId:String($.request_id??""),userAgent:$.user_agent!=null?String($.user_agent):null,virtualMcpId:$.virtual_mcp_id!=null?String($.virtual_mcp_id):null,properties:$.properties?bx0($.properties):null}}function Ty1($,Z){let X=[];if($.properties)for(let[Q,Y]of Object.entries($.properties)){let G=w$(Q),J=w$(Y);if(Z==="duckdb")X.push(`json_extract_string(properties, '$.${G}') = '${J}'`);else X.push(`JSONExtractString(properties, '${G}') = '${J}'`)}if($.propertyKeys)for(let Q of $.propertyKeys){let Y=w$(Q);if(Z==="duckdb")X.push(`json_extract_string(properties, '$.${Y}') IS NOT NULL AND json_extract_string(properties, '$.${Y}') != ''`);else X.push(`JSONExtractString(properties, '${Y}') IS NOT NULL AND JSONExtractString(properties, '${Y}') != ''`)}if($.propertyPatterns)for(let[Q,Y]of Object.entries($.propertyPatterns)){let G=w$(Q),J=w$(Y);if(Z==="duckdb")X.push(`json_extract_string(properties, '$.${G}') ILIKE '${J}'`);else X.push(`JSONExtractString(properties, '${G}') ILIKE '${J}'`)}if($.propertyInValues)for(let[Q,Y]of Object.entries($.propertyInValues)){let G=w$(Q),J=w$(Y);if(Z==="duckdb")X.push(`list_contains(string_split(json_extract_string(properties, '$.${G}'), ','), '${J}')`);else X.push(`has(splitByChar(',', JSONExtractString(properties, '${G}')), '${J}')`)}return X}function Py1($,Z){let X=[];if(MG(X,Z?.startDate,$),!Z)return X;if(Z.connectionIds?.length){let Q=Z.connectionIds.map((Y)=>`'${w$(Y)}'`).join(",");X.push(`connection_id IN (${Q})`)}if(Z.toolNames?.length){let Q=Z.toolNames.map((Y)=>`'${w$(Y)}'`).join(",");X.push(`tool_name IN (${Q})`)}if(Z.virtualMcpIds?.length){let Q=Z.virtualMcpIds.map((Y)=>`'${w$(Y)}'`).join(",");X.push(`virtual_mcp_id IN (${Q})`)}if(Z.endDate)X.push(qG(Z.endDate,$));if(Z.propertyFilters)X.push(...Ty1(Z.propertyFilters,$));return X}function Ay1($,Z,X="timestamp"){if(Z==="duckdb")return`CAST(${X} AS TIMESTAMP) >= TIMESTAMP '${$.toISOString()}'`;if(X==="bucket")return`${X} >= parseDateTimeBestEffort('${$.toISOString()}')`;return`${X} >= parseDateTime64BestEffort('${$.toISOString()}', 9)`}function qG($,Z,X="timestamp"){if(Z==="duckdb")return`CAST(${X} AS TIMESTAMP) <= TIMESTAMP '${$.toISOString()}'`;if(X==="bucket")return`${X} <= parseDateTimeBestEffort('${$.toISOString()}')`;return`${X} <= parseDateTime64BestEffort('${$.toISOString()}', 9)`}function MG($,Z,X,Q="timestamp"){if(Z)$.push(Ay1(Z,X,Q));else if(X==="clickhouse")$.push(Ay1(new Date(Date.now()-EC8),X,Q))}class hx0{engine;sourceFactory;metricEngine;metricSourceFactory;dialect;metricsFromLogs;constructor($,Z,X,Q,Y="clickhouse",G=!1){this.engine=$;this.sourceFactory=Z;this.metricEngine=X;this.metricSourceFactory=Q;this.dialect=Y;this.metricsFromLogs=G}async query($){if(!$.organizationId)throw Error("organizationId is required");let Z=this.sourceFactory($.organizationId,{startDate:$.startDate,endDate:$.endDate}),X=[`organization_id = '${w$($.organizationId)}'`];if($.connectionId)X.push(`connection_id = '${w$($.connectionId)}'`);if($.excludeConnectionIds?.length){let U=$.excludeConnectionIds.map((O)=>`'${w$(O)}'`).join(",");X.push(`connection_id NOT IN (${U})`)}if($.virtualMcpId)X.push(`virtual_mcp_id = '${w$($.virtualMcpId)}'`);if($.toolName)X.push(`tool_name = '${w$($.toolName)}'`);if($.isError!==void 0)X.push(`is_error = ${$.isError?1:0}`);if(MG(X,$.startDate,this.dialect),$.endDate)X.push(qG($.endDate,this.dialect));if($.propertyFilters)X.push(...Ty1($.propertyFilters,this.dialect));let Q=1000,Y=Math.min(Math.max(1,Math.floor($.limit??50)),Q),G=Math.max(0,Math.floor($.offset??0)),J=X.join(" AND ");if(this.dialect==="duckdb"){let U=`SELECT ${zy1}, count(*) OVER () AS _total FROM ${Z} WHERE ${J} ORDER BY timestamp DESC LIMIT ${Y} OFFSET ${G}`,O=await this.engine.query(U);if(O.length===0)return{logs:[],total:0};let B=Number(O[0]._total??0);return{logs:O.map(xx0),total:B}}let W=`SELECT count(*) AS total FROM ${Z} WHERE ${J}`,K=`SELECT ${zy1} FROM ${Z} WHERE ${J} ORDER BY timestamp DESC LIMIT ${Y} OFFSET ${G}`,[H,F]=await Promise.all([this.engine.query(W),this.engine.query(K)]),N=Number(H[0]?.total??0);return{logs:F.map(xx0),total:N}}async getById($,Z){if(!$||!Z)return null;let Q=`SELECT * FROM ${this.sourceFactory($)} WHERE organization_id = '${w$($)}' AND id = '${w$(Z)}' LIMIT 1`,Y=await this.engine.query(Q);if(Y.length===0)return null;return xx0(Y[0])}async getStats($){if(!$.organizationId)throw Error("organizationId is required");let Z=this.sourceFactory($.organizationId,{startDate:$.startDate,endDate:$.endDate}),X=[`organization_id = '${w$($.organizationId)}'`];if(MG(X,$.startDate,this.dialect),$.endDate)X.push(qG($.endDate,this.dialect));let Q=`SELECT count(*) AS total_calls, coalesce(sum(CASE WHEN is_error = 1 THEN 1.0 ELSE 0.0 END) / NULLIF(count(*), 0), 0) AS error_rate, coalesce(avg(duration_ms), 0) AS avg_duration_ms FROM ${Z} WHERE ${X.join(" AND ")}`,G=(await this.engine.query(Q))[0]??{};return{totalCalls:Number(G.total_calls??0),errorRate:Number(G.error_rate??0),avgDurationMs:Number(G.avg_duration_ms??0)}}async queryToolCallHeatmap($){if(!$.organizationId)throw Error("organizationId is required");let Z=this.sourceFactory($.organizationId,{startDate:$.startDate,endDate:$.endDate}),X=[`organization_id = '${w$($.organizationId)}'`,"type = 'tool_call'"];if($.filters?.virtualMcpIds?.length){let J=$.filters.virtualMcpIds.map((W)=>`'${w$(W)}'`).join(",");X.push(`virtual_mcp_id IN (${J})`)}if($.filters?.excludeConnectionIds?.length){let J=$.filters.excludeConnectionIds.map((W)=>`'${w$(W)}'`).join(",");X.push(`connection_id NOT IN (${J})`)}if(MG(X,$.startDate,this.dialect),$.endDate)X.push(qG($.endDate,this.dialect));let Q=Math.min(Math.max(1,Math.floor($.limit??500)),1000),Y=`SELECT virtual_mcp_id, tool_name, count(*) AS calls, coalesce(sum(CASE WHEN is_error = 1 THEN 1 ELSE 0 END), 0) AS errors, coalesce(sum(length(output)), 0) AS output_size FROM ${Z} WHERE ${X.join(" AND ")} GROUP BY virtual_mcp_id, tool_name ORDER BY calls DESC LIMIT ${Q}`;return{cells:(await this.engine.query(Y)).map((J)=>({virtualMcpId:J.virtual_mcp_id?String(J.virtual_mcp_id):null,toolName:String(J.tool_name??""),calls:Number(J.calls??0),errors:Number(J.errors??0),outputSize:Number(J.output_size??0)}))}}async queryLlmUsageStats($){let Z={totalCalls:0,totalErrors:0,avgDurationMs:0,p50DurationMs:0,p95DurationMs:0,totalInputTokens:0,totalOutputTokens:0,totalTokens:0,totalCostUsd:0,topTools:[],timeseries:[]};if(!$.organizationId||!$.connectionId)return Z;let X=this.dialect,Q=X==="clickhouse",Y=this.sourceFactory($.organizationId,{startDate:$.startDate,endDate:$.endDate}),G=bU($.interval,X,"timestamp"),J=(E)=>`coalesce(${jy1("properties",`$.${E}`,X)}, 0)`,W=Q?"count()":"count(*)",K=Q?"countIf(is_error = 1)":"count(*) FILTER (WHERE is_error = 1)",H=(E)=>Q?`quantile(${E})(duration_ms)`:`quantile_cont(duration_ms, ${E})`,F=[`organization_id = '${w$($.organizationId)}'`,`connection_id = '${w$($.connectionId)}'`];if(MG(F,$.startDate,X),$.endDate)F.push(qG($.endDate,X));if($.userIds?.length){let E=$.userIds.slice(0,100).map((j)=>`'${w$(j)}'`).join(",");F.push(`user_id IN (${E})`)}let N=F.join(" AND "),U=Math.min(Math.max(1,Math.floor($.topN??5)),20),O=`${W} AS calls,
110
110
  ${K} AS errors,
111
111
  avg(duration_ms) AS avg,
112
112
  sum(${J("input_tokens")}) AS in_tok,
@@ -1475,7 +1475,7 @@ ${mW$(Z.content)}
1475
1475
  `)X--;return $.slice(Z,X)}function sU4($){let Z=[],X=0;while(X<$.length){let Q=eU4($,X),Y=iW$($,X,"{noformat}"),G=iW$($,X,"{quote}"),J=[];if(Q)J.push({type:"code",...Q});if(Y)J.push({type:"code",lang:"",...Y});if(G)J.push({type:"quote",...G});let W=J.sort((K,H)=>K.start-H.start)[0];if(!W){Z.push({type:"text",content:$.slice(X)});break}if(W.start>X)Z.push({type:"text",content:$.slice(X,W.start)});Z.push(W),X=W.end}return Z}function eU4($,Z){for(let X=$.indexOf("{code",Z);X!==-1;){let Q=$.indexOf("}",X);if(Q===-1)return null;let Y=$.slice(X+5,Q);if(Y===""||Y.startsWith(":")){let G=$.indexOf("{code}",Q+1);if(G===-1)return null;let J=Y.startsWith(":")?Y.slice(1).split("|")[0]??"":"";return{start:X,end:G+6,content:$.slice(Q+1,G),lang:J}}X=$.indexOf("{code",X+1)}return null}function iW$($,Z,X){let Q=$.indexOf(X,Z);if(Q===-1)return null;let Y=$.indexOf(X,Q+X.length);if(Y===-1)return null;return{start:Q,end:Y+X.length,content:$.slice(Q+X.length,Y)}}function pW$($){return $.split(`
1476
1476
  `).map(ZO4).join(`
1477
1477
  `)}function dn0($,Z){let X=0;while($[X]===Z)X++;return X}function $O4($){let Z=$.trim();return Z.length>=4&&dn0(Z,"-")===Z.length}function ZO4($){let Z=$[1]??"";if($[0]==="h"&&Z>="1"&&Z<="6"&&$[2]===".")return`${"#".repeat(Number(Z))} ${GC($.slice(3).trimStart())}`;if($O4($))return"---";let X=dn0($,"*");if(X>0&&$[X]===" ")return`${X===1?"*":`${" ".repeat(X-1)}-`} ${GC($.slice(X+1))}`;let Q=dn0($,"#");if(Q>0&&$[Q]===" ")return`${" ".repeat(Q-1)}1. ${GC($.slice(Q+1))}`;let Y=$.trimEnd();if(Y.startsWith("||")&&Y.endsWith("||")&&Y.length>4){let G=Y.slice(2,-2).split("||");return`${`| ${G.map((W)=>GC(W.trim())).join(" | ")} |`}
1478
- |${G.map(()=>" --- ").join("|")}|`}if(Y.startsWith("|")&&Y.endsWith("|")&&Y.length>2)return`| ${Y.slice(1,-1).split("|").map((J)=>GC(J.trim())).join(" | ")} |`;return GC($)}function ln0($){return($.startsWith("http://")||$.startsWith("https://"))&&!$.includes(" ")}function GC($){let Z="",X=0;while(X<$.length){let Q=$[X]??"";if(Q==="{"){if($.startsWith("{{",X)){let Y=$.indexOf("}}",X+2);if(Y!==-1){Z+=`\`${$.slice(X+2,Y)}\``,X=Y+2;continue}}if($.startsWith("{color",X)){let Y=$.indexOf("}",X);if(Y!==-1){X=Y+1;continue}}}else if(Q==="["){let Y=$.indexOf("]",X);if(Y!==-1){let G=$.slice(X+1,Y),J=G.indexOf("|");if(J!==-1&&ln0(G.slice(J+1))){Z+=`[${G.slice(0,J)}](${G.slice(J+1)})`,X=Y+1;continue}if(ln0(G)){Z+=G,X=Y+1;continue}}}else if(Q==="!"){let Y=$.indexOf("!",X+1);if(Y!==-1){let G=$.slice(X+1,Y),J=G.indexOf("|"),W=J===-1?G:G.slice(0,J);if(ln0(W)){Z+=`![](${W})`,X=Y+1;continue}}}else if(Q==="*"||Q==="_"){let Y=YO4($,X,Q,Z.slice(-1)||" ");if(Y){Z+=Y.text,X=Y.next;continue}}Z+=Q,X++}return Z}function YO4($,Z,X,Q){if(!XO4.includes(Q))return null;let Y=$[Z+1];if(!Y||Y===" "||Y===X)return null;for(let G=Z+2;G<$.length;G++){if($[G]!==X||$[G-1]===" ")continue;let J=$[G+1];if(J!==void 0&&!QO4.includes(J))continue;let W=GC($.slice(Z+1,G));return{text:X==="*"?`**${W}**`:`*${W}*`,next:G+1}}return null}var XO4=" ([{>",QO4=` )]}.,:;!?{["'`;function WO4($){let Z=$ instanceof Error?$.message:String($);if(Z.includes("AbortError")||Z.includes("fetch")||Z.includes("timeout")||Z.includes("network")||Z.includes("ECONNREFUSED")||Z.includes("ECONNRESET"))return!0;let X=Z.match(/failed \((\d+)\)/);if(X&&X[1]){let Q=parseInt(X[1],10);return Q>=500||Q===429}return!0}function in0($){let Z=$.trim().replace(/\/+$/,""),X=/^https?:\/\//i.test(Z)?Z:`https://${Z}`,Q;try{Q=new URL(X).hostname.toLowerCase()}catch{throw Error(`Invalid Jira site URL: ${$}`)}if(!KO4.test(Q))throw Error(`Invalid Jira site URL: ${$} \u2014 expected <your-site>.atlassian.net`);return`https://${Q}`}function mn0($){if(!/^\d+$/.test($))throw Error(`Invalid Jira board id: ${$}`);return $}class h3{baseUrl;authHeader;constructor($,Z,X){this.baseUrl=in0($),this.authHeader=`Basic ${Buffer.from(`${Z}:${X}`).toString("base64")}`}async request($,Z){return F9(async()=>{let X=await fetch(`${this.baseUrl}${$}`,{...Z,headers:{Authorization:this.authHeader,Accept:"application/json",...Z?.body?{"Content-Type":"application/json"}:{}},signal:AbortSignal.timeout(GO4)}),Q=await X.text().catch(()=>"");if(!X.ok)throw Error(`Jira ${$} failed (${X.status}): ${Q.slice(0,300)}`);return Q===""?void 0:JSON.parse(Q)},{maxAttempts:3,minTimeout:100,maxTimeout:5000,multiplier:2,jitter:1,isRetriable:WO4})}async myself(){return this.request("/rest/api/3/myself")}async listBoards(){let $=[],Z=0;while($.length<200){let X=await this.request(`/rest/agile/1.0/board?startAt=${Z}&maxResults=50`);if($.push(...X.values.map((Q)=>({id:Q.id,name:Q.name,type:Q.type,projectKey:Q.location?.projectKey}))),X.isLast||X.values.length===0)break;Z+=X.values.length}return $}async getBoardColumns($){let Z=await this.request(`/rest/agile/1.0/board/${mn0($)}/configuration`),X=new Map,Q=[];for(let Y of Z.columnConfig?.columns??[]){let G=[];for(let J of Y.statuses??[]){if(!X.has(J.id)){let W=await this.request(`/rest/api/3/status/${encodeURIComponent(J.id)}`);X.set(J.id,W.name)}G.push(X.get(J.id)??J.id)}Q.push({name:Y.name,statuses:G})}return Q}async listBoardIssues($){let Z=new URLSearchParams({startAt:String($.startAt),maxResults:"100",jql:$.jql,fields:JO4}),X=await this.request(`/rest/agile/1.0/board/${mn0($.boardId)}/issue?${Z}`);return{issues:X.issues??[],total:X.total}}async listBacklogIssueIds($){let Z=new Set,X=0;while(Z.size<5000){let Q=await this.request(`/rest/agile/1.0/board/${mn0($)}/backlog?startAt=${X}&maxResults=100&fields=id`);for(let Y of Q.issues??[])Z.add(Y.id);if(X+=Q.issues?.length??0,X>=Q.total||(Q.issues?.length??0)===0)break}return Z}async listTransitions($){return(await this.request(`/rest/api/3/issue/${encodeURIComponent($)}/transitions`)).transitions??[]}async getStatusName($){return(await this.request(`/rest/api/3/issue/${encodeURIComponent($)}?fields=status`)).fields?.status?.name??null}async transitionIssue($,Z){await this.request(`/rest/api/3/issue/${encodeURIComponent($)}/transitions`,{method:"POST",body:JSON.stringify({transition:{id:Z}})})}async listComments($){let Z=[],X=0;while(Z.length<1000){let Q=await this.request(`/rest/api/3/issue/${encodeURIComponent($)}/comment?startAt=${X}&maxResults=100&orderBy=created`);if(Z.push(...Q.comments),Z.length>=Q.total||Q.comments.length===0)break;X+=Q.comments.length}return Z}async addComment($,Z){return this.request(`/rest/api/3/issue/${encodeURIComponent($)}/comment`,{method:"POST",body:JSON.stringify({body:HO4(Z)})})}}function HO4($){let Z=$.split(`
1478
+ |${G.map(()=>" --- ").join("|")}|`}if(Y.startsWith("|")&&Y.endsWith("|")&&Y.length>2)return`| ${Y.slice(1,-1).split("|").map((J)=>GC(J.trim())).join(" | ")} |`;return GC($)}function ln0($){return($.startsWith("http://")||$.startsWith("https://"))&&!$.includes(" ")}function GC($){let Z="",X=0;while(X<$.length){let Q=$[X]??"";if(Q==="{"){if($.startsWith("{{",X)){let Y=$.indexOf("}}",X+2);if(Y!==-1){Z+=`\`${$.slice(X+2,Y)}\``,X=Y+2;continue}}if($.startsWith("{color",X)){let Y=$.indexOf("}",X);if(Y!==-1){X=Y+1;continue}}}else if(Q==="["){let Y=$.indexOf("]",X);if(Y!==-1){let G=$.slice(X+1,Y),J=G.indexOf("|");if(J!==-1&&ln0(G.slice(J+1))){Z+=`[${G.slice(0,J)}](${G.slice(J+1)})`,X=Y+1;continue}if(ln0(G)){Z+=G,X=Y+1;continue}}}else if(Q==="!"){let Y=$.indexOf("!",X+1);if(Y!==-1){let G=$.slice(X+1,Y),J=G.indexOf("|"),W=J===-1?G:G.slice(0,J);if(ln0(W)){Z+=`![](${W})`,X=Y+1;continue}}}else if(Q==="*"||Q==="_"){let Y=YO4($,X,Q,Z.slice(-1)||" ");if(Y){Z+=Y.text,X=Y.next;continue}}Z+=Q,X++}return Z}function YO4($,Z,X,Q){if(!XO4.includes(Q))return null;let Y=$[Z+1];if(!Y||Y===" "||Y===X)return null;for(let G=Z+2;G<$.length;G++){if($[G]!==X||$[G-1]===" ")continue;let J=$[G+1];if(J!==void 0&&!QO4.includes(J))continue;let W=GC($.slice(Z+1,G));return{text:X==="*"?`**${W}**`:`*${W}*`,next:G+1}}return null}var XO4=" ([{>",QO4=` )]}.,:;!?{["'`;function WO4($){let Z=$ instanceof Error?$.message:String($);if(Z.includes("AbortError")||Z.includes("fetch")||Z.includes("timeout")||Z.includes("network")||Z.includes("ECONNREFUSED")||Z.includes("ECONNRESET"))return!0;let X=Z.match(/failed \((\d+)\)/);if(X&&X[1]){let Q=parseInt(X[1],10);return Q>=500||Q===429}return!0}function in0($){let Z=$.trim().replace(/\/+$/,""),X=/^https?:\/\//i.test(Z)?Z:`https://${Z}`,Q;try{Q=new URL(X).hostname.toLowerCase()}catch{throw Error(`Invalid Jira site URL: ${$}`)}if(!KO4.test(Q))throw Error(`Invalid Jira site URL: ${$} \u2014 expected <your-site>.atlassian.net`);return`https://${Q}`}function mn0($){if(!/^\d+$/.test($))throw Error(`Invalid Jira board id: ${$}`);return $}class h3{baseUrl;authHeader;constructor($,Z,X){this.baseUrl=in0($),this.authHeader=`Basic ${Buffer.from(`${Z}:${X}`).toString("base64")}`}async request($,Z,{idempotent:X=!0}={}){let Q=async()=>{let Y=await fetch(`${this.baseUrl}${$}`,{...Z,headers:{Authorization:this.authHeader,Accept:"application/json",...Z?.body?{"Content-Type":"application/json"}:{}},signal:AbortSignal.timeout(GO4)}),G=await Y.text().catch(()=>"");if(!Y.ok)throw Error(`Jira ${$} failed (${Y.status}): ${G.slice(0,300)}`);return G===""?void 0:JSON.parse(G)};if(!X)return Q();return F9(Q,{maxAttempts:3,minTimeout:100,maxTimeout:5000,multiplier:2,jitter:1,isRetriable:WO4})}async myself(){return this.request("/rest/api/3/myself")}async listBoards(){let $=[],Z=0;while($.length<200){let X=await this.request(`/rest/agile/1.0/board?startAt=${Z}&maxResults=50`);if($.push(...X.values.map((Q)=>({id:Q.id,name:Q.name,type:Q.type,projectKey:Q.location?.projectKey}))),X.isLast||X.values.length===0)break;Z+=X.values.length}return $}async getBoardColumns($){let Z=await this.request(`/rest/agile/1.0/board/${mn0($)}/configuration`),X=new Map,Q=[];for(let Y of Z.columnConfig?.columns??[]){let G=[];for(let J of Y.statuses??[]){if(!X.has(J.id)){let W=await this.request(`/rest/api/3/status/${encodeURIComponent(J.id)}`);X.set(J.id,W.name)}G.push(X.get(J.id)??J.id)}Q.push({name:Y.name,statuses:G})}return Q}async listBoardIssues($){let Z=new URLSearchParams({startAt:String($.startAt),maxResults:"100",jql:$.jql,fields:JO4}),X=await this.request(`/rest/agile/1.0/board/${mn0($.boardId)}/issue?${Z}`);return{issues:X.issues??[],total:X.total}}async listBacklogIssueIds($){let Z=new Set,X=0;while(Z.size<5000){let Q=await this.request(`/rest/agile/1.0/board/${mn0($)}/backlog?startAt=${X}&maxResults=100&fields=id`);for(let Y of Q.issues??[])Z.add(Y.id);if(X+=Q.issues?.length??0,X>=Q.total||(Q.issues?.length??0)===0)break}return Z}async listTransitions($){return(await this.request(`/rest/api/3/issue/${encodeURIComponent($)}/transitions`)).transitions??[]}async getStatusName($){return(await this.request(`/rest/api/3/issue/${encodeURIComponent($)}?fields=status`)).fields?.status?.name??null}async transitionIssue($,Z){await this.request(`/rest/api/3/issue/${encodeURIComponent($)}/transitions`,{method:"POST",body:JSON.stringify({transition:{id:Z}})},{idempotent:!1})}async listComments($){let Z=[],X=0;while(Z.length<1000){let Q=await this.request(`/rest/api/3/issue/${encodeURIComponent($)}/comment?startAt=${X}&maxResults=100&orderBy=created`);if(Z.push(...Q.comments),Z.length>=Q.total||Q.comments.length===0)break;X+=Q.comments.length}return Z}async addComment($,Z){return this.request(`/rest/api/3/issue/${encodeURIComponent($)}/comment`,{method:"POST",body:JSON.stringify({body:HO4(Z)})},{idempotent:!1})}}function HO4($){let Z=$.split(`
1479
1479
  `).filter((X)=>X.trim()!=="");return{type:"doc",version:1,content:Z.length>0?Z.map((X)=>({type:"paragraph",content:[{type:"text",text:X}]})):[{type:"paragraph",content:[]}]}}function yB0($){if(typeof $==="string")return nW$($);if(!$||typeof $!=="object")return"";let Z=$;if(Z.type==="text")return Z.text??"";if(Z.type==="hardBreak")return`
1480
1480
  `;let X=(Array.isArray(Z.content)?Z.content:[]).map(yB0);if(Z.type==="doc")return X.filter((Q)=>Q.trim()!=="").join(`
1481
1481
 
@@ -2783,7 +2783,7 @@ Respond with the structured verdict and a short reason.`,wy$;var Ly$=w(()=>{_4()
2783
2783
  ${G.join(`
2784
2784
  `)}`:Y}function iY6($){let Z=new Set;for(let X of $)for(let Q of X.split(`
2785
2785
  `)){let Y=Q.trim();if(/^Co-authored-by:\s/i.test(Y))Z.add(Y)}return[...Z]}var gY6=200,hY6=12,uY6=300,N91=3;var U91=w(()=>{I_();_P0()});function nY6($){if(!$||$.includes(".."))return!1;return pY6.test($)}function Xg$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!nY6(Z))return null;let{__resolveType:X,...Q}=$;return{resolveType:Z,payload:Q}}function Qg$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var pY6;var Yg$=w(()=>{pY6=/^[\w./@-]+$/});function O91($){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 sr($,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 Gg$($,Z,X,Q){if(!Q.connectionId)throw new M_("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let Y=$.organization?.id;if(!Y)throw new M_(fZ);await pO({ctx:$,connectionId:Q.connectionId,organizationId:Y,forceRefresh:!0,onLegacyMintError:(F)=>{let N=F instanceof Error?F.message:fZ;throw new M_(N)}});let{cloneUrl:G,gitUserName:J,gitUserEmail:W}=await nO(Q.connectionId,Q.owner,Q.name,$.db,$.vault).catch((F)=>{let{code:N,message:U}=t8$(F instanceof Error?F.message:String(F));throw N?new M_(U):F}),K=ch($),H=await Z.proxyDaemonRequest(X,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{repository:{cloneUrl:G},identity:{userName:J,userEmail:W}},...K?{operator:K}:{}})});if(!H.ok){let F=await NB(H,tY6).catch(()=>H.statusText);throw Error(`Failed to refresh sandbox git credentials (${H.status}): ${F}`)}}var tY6=10485760,M_;var B91=w(()=>{R3();PP0();vp();vd0();hx();M_=class M_ extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function rY6($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!oY6.test(Z))throw Error(`Invalid branch name: ${$}`)}function k_($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(sY6)])}function eY6($,Z,X){let Q=B5($)[Z]?.[X];return!!Q&&Object.keys(AY(Q)).length>0}function V_($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}async function ph($){let{virtualMcpMetadata:Z,connectionIds:X}=$.get("vmClaim"),Q=$.var.studioContext,Y=sr(Z,X);if(!Y)throw new Q6(404,"AUTH","repo","Project has no GitHub repository");let G=t(Q);return AP0(Q,G.id,Y)}function w91($,Z){if(Z instanceof Q6){let Q=Z.status===404?404:Z.status===409||Z.status===422?409:502;return $.json({error:Z.message},Q,m5)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},502,m5)}async function Kg$($){try{let Z=await ph($),X=await vP0(Z,$.get("vmClaim").branch);return $.json(X,200,m5)}catch(Z){return w91($,Z)}}function er($,Z){let Q=(xP0.get($)??Promise.resolve()).catch(()=>{}).then(Z),Y=Q.catch(()=>{});return xP0.set($,Y),Y.finally(()=>{if(xP0.get($)===Y)xP0.delete($)}),Q}async function dZ($,Z,X){if($.get("vmClaim").fastPreview)return $.json({error:"sandbox not found: Fast Preview projects are sandbox-less"},404,m5);let Q=V_($);if(Q instanceof Response)return Q;let{claimName:Y,userId:G,projectRef:J}=$.get("vmClaim"),W=X?.method??"POST",K=null,H=new Headers;if(X?.jsonBody!==void 0)K=X.jsonBody,H.set("content-type","application/json");else if(X?.forwardJsonBody)K=await $.req.text(),H.set("content-type","application/json");let F=X?.signal,N={method:W,headers:H,body:K,...F?{signal:F}:{}},U=async()=>{let O=await Q.proxyDaemonRequest(Y,Z,N);if(X?.map404to410&&O.status===404){try{await O.body?.cancel()}catch{}if(await Q.adoptLiveClaim?.({userId:G,projectRef:J},Y))O=await Q.proxyDaemonRequest(Y,Z,N);if(O.status===404){try{await O.body?.cancel()}catch{}return new Response(JSON.stringify({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."}),{status:410,headers:{"content-type":"application/json",...m5}})}}let B=await O.text(),D=X?.redactRepoDirUnlessDesktop&&Q.kind!=="user-desktop"?ZG6(B):B,L=O.headers.get("content-type")??"application/json";return new Response(D,{status:O.status,headers:{"content-type":L,...m5}})};try{if(F){let O=U();return O.catch(()=>{}),await Promise.race([O,new Promise((D,L)=>{if(F.aborted)return L(F.reason);F.addEventListener("abort",()=>L(F.reason),{once:!0})})])}return await U()}catch(O){let B=O instanceof Error?O.message:String(O);return $.json({error:`Daemon unreachable: ${B}`},502)}}function ZG6($){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 yP0($,Z,X,Q="GET",Y){let G=await $.proxyDaemonRequest(Z,X,{method:Q,headers:new Headers,body:null});if(G.status===404&&Y){try{await G.body?.cancel()}catch{}if(await $.adoptLiveClaim?.(Y,Z))G=await $.proxyDaemonRequest(Z,X,{method:Q,headers:new Headers,body:null})}if(G.status===404){try{await G.body?.cancel()}catch{}throw Error("SANDBOX_GONE")}let J=await G.text();if(!G.ok){let W=`Daemon error (${G.status})`;try{W=JSON.parse(J).error??W}catch{}throw Error(W)}return JSON.parse(J)}function XG6($){return Hg$.includes($)}var oY6,Jg$=524288,aY6=65536,sY6=1e4,Wg$=2000,$G6,xP0,m5,Hg$,Fg$=()=>{let $=new F1;$.use("/:virtualMcpId/:branch/*",$G6),$.post("/:virtualMcpId/:branch/write",(X)=>dZ(X,"/_sandbox/write",{forwardJsonBody:!0,signal:k_(X)})),$.post("/:virtualMcpId/:branch/unlink",(X)=>dZ(X,"/_sandbox/unlink",{forwardJsonBody:!0,signal:k_(X)})),$.post("/:virtualMcpId/:branch/mkdir",(X)=>dZ(X,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:k_(X)})),$.post("/:virtualMcpId/:branch/rename",(X)=>dZ(X,"/_sandbox/rename",{forwardJsonBody:!0,signal:k_(X)})),$.post("/:virtualMcpId/:branch/read",(X)=>dZ(X,"/_sandbox/read",{forwardJsonBody:!0,signal:k_(X)})),$.post("/:virtualMcpId/:branch/glob",(X)=>dZ(X,"/_sandbox/glob",{forwardJsonBody:!0,signal:k_(X)})),$.post("/:virtualMcpId/:branch/grep",(X)=>dZ(X,"/_sandbox/grep",{forwardJsonBody:!0,signal:k_(X)})),$.post("/:virtualMcpId/:branch/exec/:script",async(X)=>{let Q=X.req.param("script");if(!Q)return X.json({error:"missing script name"},400);return dZ(X,`/_sandbox/exec/${encodeURIComponent(Q)}`)}),$.post("/:virtualMcpId/:branch/exec/:script/kill",async(X)=>{let Q=X.req.param("script");if(!Q)return X.json({error:"missing script name"},400);return dZ(X,`/_sandbox/exec/${encodeURIComponent(Q)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(X)=>dZ(X,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDirUnlessDesktop:!0})),$.put("/:virtualMcpId/:branch/config",(X)=>dZ(X,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(X)=>{let Q=X.req.param("step");if(!Q||!XG6(Q))return X.json({error:`step must be one of: ${Hg$.join(", ")}`},400);if(Q==="start"){let Y=X.get("vmClaim");if(Y.runner){let G=t(X.var.studioContext),J=Qy(Y.virtualMcpMetadata);try{await kO0({ctx:X.var.studioContext,runner:Y.runner,handle:Y.claimName,orgId:G.id,userId:Y.callerUserId,entries:J})}catch(W){let K=W instanceof Error?W.message:String(W);return X.json({error:`Failed to push env to daemon: ${K}`},502)}}}return dZ(X,`/_sandbox/setup/${Q}`,{signal:X.req.raw.signal,map404to410:!0})}),$.get("/:virtualMcpId/:branch/events",(X)=>{let Q=X.get("vmClaim");if(!Q.runner)return AN(X,async(Y)=>{await Y.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this studio instance."})})});return Hy$(X,{ctx:X.var.studioContext,claimName:Q.claimName,runner:Q.runner,virtualMcpId:Q.virtualMcpId,branch:Q.branch,userId:Q.userId,projectRef:Q.projectRef,virtualMcpMetadata:Q.virtualMcpMetadata})}),$.get("/:virtualMcpId/:branch/git/status",(X)=>{if(X.get("vmClaim").fastPreview)return Kg$(X);return Z(X)});let Z=(X)=>dZ(X,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([X.req.raw.signal,AbortSignal.timeout(Wg$)])});return $.post("/:virtualMcpId/:branch/git/status",(X)=>{if(X.get("vmClaim").fastPreview)return Kg$(X);return dZ(X,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([X.req.raw.signal,AbortSignal.timeout(Wg$)])})}),$.post("/:virtualMcpId/:branch/git/diff",async(X)=>{let Q=X.get("vmClaim");if(Q.fastPreview)try{let Y=await X.req.json().catch(()=>({})),G=await ph(X),J=await fP0(G,Q.branch,Y.base);return X.json(J,200,m5)}catch(Y){return w91(X,Y)}return dZ(X,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})}),$.post("/:virtualMcpId/:branch/git/publish",async(X)=>{if(X.get("vmClaim").fastPreview)return X.json({ok:!0},200,m5);let Q=V_(X);if(Q instanceof Response)return Q;let{claimName:Y,virtualMcpMetadata:G,connectionIds:J}=X.get("vmClaim"),W=X.var.studioContext;return er(Y,async()=>{try{await t51(W,Q,Y);let K=sr(G,J);if(K)await Gg$(W,Q,Y,K)}catch(K){if(K instanceof M_)return X.json({error:K.message},403,m5);let H=K instanceof Error?K.message:String(K);return X.json({error:H},502,m5)}return dZ(X,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",async(X)=>{let Q=X.get("vmClaim");if(Q.fastPreview)return er(Q.claimName,async()=>{let Y=await X.req.json().catch(()=>({})),G=Array.isArray(Y.filepaths)?Y.filepaths.filter((J)=>typeof J==="string"):[];if(G.length===0)return X.json({error:"filepaths is required"},400,m5);try{let J=await ph(X);return await Zg$(J,Q.branch,G),X.json({ok:!0},200,m5)}catch(J){let W=J instanceof Q6&&J.status===409?409:502,K=J instanceof Error?J.message:String(J);return X.json({error:K},W,m5)}});return er(Q.claimName,()=>dZ(X,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(X)=>{let Q=X.get("vmClaim");if(Q.fastPreview)return er(Q.claimName,async()=>{try{let W=await X.req.json().catch(()=>({})),K=await ph(X),H=W.base??await K.getDefaultBranch();return await bP0(K,Q.branch,H),X.json({ok:!0},200,m5)}catch(W){return w91(X,W)}});let Y=V_(X);if(Y instanceof Response)return Y;let{claimName:G}=X.get("vmClaim"),J=X.var.studioContext;return er(G,async()=>{try{await t51(J,Y,G)}catch(W){let K=W instanceof Error?W.message:String(W);return X.json({error:K},502,m5)}return dZ(X,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",q9({maxSize:Jg$,onError:(X)=>X.json({error:"Payload too large"},413,m5)}),async(X)=>{let Q=X.get("vmClaim"),Y=null;if(!Q.fastPreview){let H=V_(X);if(H instanceof Response)return H;Y=H}let{claimName:G,userId:J,projectRef:W}=Q,K=X.var.studioContext;try{let H=await X.req.json().catch(()=>({})),F=H.status,N=H.diff,U=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[O,B]=a51(F)&&U?[F,N]:Y?await Promise.all([yP0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:W}),yP0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:W})]):await(async()=>{let L=await ph(X);return Promise.all([vP0(L,Q.branch),fP0(L,Q.branch)])})(),D=await By$(K,O,B);return X.json(D,200,m5)}catch(H){let F=H instanceof Error?H.message:String(H);if(F==="SANDBOX_GONE")return X.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,m5);return X.json({error:F},502,m5)}}),$.post("/:virtualMcpId/:branch/git/judge-review",q9({maxSize:Jg$,onError:(X)=>X.json({error:"Payload too large"},413,m5)}),async(X)=>{let Q=X.get("vmClaim"),Y=null;if(!Q.fastPreview){let H=V_(X);if(H instanceof Response)return H;Y=H}let{claimName:G,userId:J,projectRef:W}=Q,K=X.var.studioContext;try{let H=await X.req.json().catch(()=>({})),F=H.status,N=H.diff,U=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[O,B]=a51(F)&&U?[F,N]:Y?await Promise.all([yP0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:W}),yP0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:W})]):await(async()=>{let L=await ph(X);return Promise.all([vP0(L,Q.branch),fP0(L,Q.branch)])})(),D=await Dy$(K,O,B,typeof H.language==="string"?H.language:void 0);return X.json(D,200,m5)}catch(H){let F=H instanceof Error?H.message:String(H);if(F==="SANDBOX_GONE")return X.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,m5);return X.json({error:F},502,m5)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(X)=>{let Q=V_(X);if(Q instanceof Response)return Q;let{claimName:Y}=X.get("vmClaim"),G=X.req.query("path");if(!G||!G.startsWith("/")||G.startsWith("//")||G.includes("..")||G.includes("\\"))return X.json({error:"Path not allowed"},403);let J;try{J=await Q.getPreviewUrl(Y)}catch{return X.json({error:"Preview not available"},502)}if(!J)return X.json({error:"Preview not available"},502);let W=J.replace(/\/+$/,""),K=O91(`${W}${G}`),H;try{H=await fetch(K?.url??`${W}${G}`,{...K?{headers:{host:K.hostHeader}}:{}})}catch{return X.json({error:"Preview unreachable"},502)}let F;try{F=await H.text()}catch{return X.json({error:"Preview unreachable"},502)}return new Response(F,{status:H.status,headers:{"content-type":H.headers.get("content-type")??"application/json"}})}),$.post("/:virtualMcpId/:branch/preview-invoke",q9({maxSize:aY6,onError:(X)=>X.json({error:"Payload too large"},413)}),async(X)=>{let Q=V_(X);if(Q instanceof Response)return Q;let{claimName:Y}=X.get("vmClaim"),G;try{G=await Q.getPreviewUrl(Y)}catch{return X.json({error:"Preview not available"},502)}if(!G)return X.json({error:"Preview not available"},502);let J;try{J=await X.req.json()}catch{return X.json({error:"Invalid JSON body"},400)}if(!J||typeof J!=="object"||Array.isArray(J))return X.json({error:"Invalid JSON body"},400);let W=Xg$(J);if(!W)return X.json({error:"Invalid or missing __resolveType"},400);let K=Qg$(G,W.resolveType),H=O91(K),F;try{F=await fetch(H?.url??K,{method:"POST",headers:{"content-type":"application/json",...H?{host:H.hostHeader}:{}},body:JSON.stringify(W.payload),signal:AbortSignal.timeout(30000)})}catch{return X.json({error:"Preview unreachable"},502)}let N;try{N=await F.text()}catch{return X.json({error:"Preview unreachable"},502)}return new Response(N,{status:F.status,headers:{"content-type":F.headers.get("content-type")??"application/json"}})}),$};var Ng$=w(()=>{w8();ON();uh();n51();AF();Wy$();S3();dX();U8();kB0();WB();Ky$();Fy$();Zp0();Cp();$91();Ly$();Q91();I_();U91();Yg$();B91();oY6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;$G6=zP0(async($,Z)=>{let X=$.var.studioContext;try{r(X)}catch{return $.json({error:"Unauthorized"},401)}let Q=G1(X);if(!Q)return $.json({error:"Unauthorized"},401);let Y;try{Y=t(X)}catch{return $.json({error:"Organization scope required"},403)}let G=$.req.param("virtualMcpId"),J=$.req.param("branch");if(!G||!J)return $.json({error:"virtualMcpId and branch are required"},400);try{rY6(J)}catch(O){let B=O instanceof Error?O.message:String(O);return $.json({error:B},400)}let W=await X.storage.virtualMcps.findById(G);if(!W||W.organization_id!==Y.id)return $.json({error:"Virtual MCP not found"},404);let K=ai({orgId:Y.id,virtualMcpId:G,branch:J}),H=await _F(X,J,Q),F=Jy$({userId:H,projectRef:K}),N=W.metadata??null;if(FW$(N).fastPreviewCapability&&!eY6(N,H,J))return $.set("vmClaim",{claimName:F,callerUserId:Q,runner:null,virtualMcpId:G,branch:J,userId:H,projectRef:K,virtualMcpMetadata:N,connectionIds:W.connections?.map((O)=>O.connection_id)??[],fastPreview:!0}),Z();let U;try{U=(await oX(X,{userId:H,branch:J,virtualMcpMetadata:N})).provider}catch{U=null}if(!U)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:F,callerUserId:Q,runner:U,virtualMcpId:G,branch:J,userId:H,projectRef:K,virtualMcpMetadata:N,connectionIds:W.connections?.map((O)=>O.connection_id)??[]}),Z()});xP0=new Map;m5={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};Hg$=["clone","install","start"]});function Ug$($,Z,X){let Q=D91.get($);if(!Q)Q={pending:null,running:!1},D91.set($,Q);if(!Q.pending)Q.pending={set:new Map,del:new Set,deps:Z,resolvers:[],rejecters:[]};let Y=Q.pending;Y.deps=Z;for(let[J,W]of Object.entries(X.set??{}))Y.set.set(J,W),Y.del.delete(J);for(let J of X.delete??[])Y.del.add(J),Y.set.delete(J);let G=new Promise((J,W)=>{Y.resolvers.push(J),Y.rejecters.push(W)});if(!Q.running)YG6($,Q);return G}async function YG6($,Z){Z.running=!0;try{while(Z.pending){let X=Z.pending;Z.pending=null;try{let Q=await GG6(X);for(let Y of X.resolvers)Y(Q)}catch(Q){for(let Y of X.rejecters)Y(Q)}}}finally{if(Z.running=!1,!Z.pending)D91.delete($)}}async function GG6($){let{client:Z,branch:X,packagePath:Q}=$.deps;for(let Y=0;;Y++){let G=await ar(Z,X),J=await Z.getCommitTreeSha(G),W=await Z.getTreeRecursive(J),K=H91(W,Q),H=[],F=new Map(K.map((B)=>[B.path,{stem:B.stem,sha:B.sha}]));for(let[B,D]of $.set){let L=F91(K,B),E=`${JSON.stringify(D,null,2)}
2786
- `,j=await Z.createBlob(E);await ey$(Z.owner,Z.repo,j,E);let z=L[0]??`${CP0(Q)}/${Y91(B)}.json`;H.push({path:z,mode:"100644",type:"blob",sha:j});let A=z.slice(z.lastIndexOf("/")+1,-5);F.set(z,{stem:A,sha:j,content:E});for(let P of L.slice(1))H.push({path:P,mode:"100644",type:"blob",sha:null}),F.delete(P)}for(let B of $.del)for(let D of F91(K,B))H.push({path:D,mode:"100644",type:"blob",sha:null}),F.delete(D);if(H.length===0)return G;let N=Q?`${Q}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((B)=>B.type==="blob"&&B.path===N)){let B=await Promise.all([...F.values()].map(async(j)=>({stem:j.stem,content:j.content??await Z.getBlobText(j.sha)}))),{decofile:D,skipped:L}=nr(B);if(L.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:`${Z.owner}/${Z.repo}`,branch:X,packagePath:Q,blocks:L.map((j)=>j.key)});let E=await Z.createBlob(D);H.push({path:N,mode:"100644",type:"blob",sha:E})}let U=await Z.createTree(J,H),O=await Z.createCommit({message:JG6($),treeSha:U,parentShas:[G]});try{return await Z.updateRef(X,O),O}catch(B){if(!(B instanceof Q6&&B.status===422)||Y>=QG6-1)throw B;await q$(pZ(2000,200,Y,2,0.5))}}}function JG6($){let Z=(Y)=>{let G=Y.slice(0,3).join(", ");return Y.length>3?`${G} (+${Y.length-3} more)`:G},X=[];if($.set.size>0)X.push(`update ${Z([...$.set.keys()])}`);if($.del.size>0)X.push(`delete ${Z([...$.del])}`);let Q=`chore(decofile): ${X.join("; ")}`;return Rd0(Q,$.deps.coAuthor)}var QG6=3,D91;var Og$=w(()=>{zO0();RP0();u4();I_();_P0();D91=new Map});import{createHmac as Bg$,randomBytes as WG6,timingSafeEqual as KG6}from"crypto";function wg$(){if(gP0)return gP0;let $;try{let Z=b0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return gP0=$?Buffer.from($):WG6(32),gP0}function L91($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+HG6)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=Bg$("sha256",wg$()).update(Q).digest("base64url");return`${Q}.${Y}`}function Dg$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(Bg$("sha256",wg$()).update(Q).digest("base64url"));if(Y.length!==G.length||!KG6(Y,G))return!1;let J;try{J=JSON.parse(Buffer.from(Q,"base64url").toString())}catch{return!1}let W=Math.floor((Z.nowMs??Date.now())/1000);return J.o===Z.organizationId&&J.m===Z.virtualMcpId&&J.b===Z.branch&&typeof J.e==="number"&&J.e>=W}var HG6=21600000,gP0=null;var Lg$=w(()=>{T$()});import{z as nh}from"zod";function NG6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&FG6.test($)}function jg$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function hP0($){let Z=$.get("decofileScope");return AP0($.var.studioContext,Z.organizationId,Z.githubRepo)}function uP0($,Z){if(Z instanceof Q6){let Q=Z.status===404?404:Z.status===409?409:Z.status===422?409:502;return $.json({error:Z.message},Q)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},500)}function zg$(){let $=new F1;return $.use("/:virtualMcpId/:branch",Eg$),$.use("/:virtualMcpId/:branch/*",Eg$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await hP0(Z),Y=await $g$(Q,X.branch,X.packagePath,{createBranchIfMissing:!!X.userId}),G={ETag:`"${Y.sha}"`,"Cache-Control":"no-store","Access-Control-Allow-Origin":"*"};if(Z.req.header("if-none-match")===`"${Y.sha}"`)return Z.body(null,304,G);if(!X.userId)return Z.body(Y.decofile,200,{...G,"content-type":"application/json"});let J=L91({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(jg$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return uP0(Z,Q)}}),$.patch("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=UG6.safeParse(await Z.req.json().catch(()=>null));if(!Y.success)return Z.json({error:"Invalid body",details:Y.error.issues},400);let G=Y.data;for(let J of[...Object.keys(G.set??{}),...G.delete??[]])try{TP0(J)}catch(W){let K=W instanceof Error?W.message:String(W);return Z.json({error:K},400)}for(let[J,W]of Object.entries(G.set??{}))if(typeof W!=="object"||W===null||Array.isArray(W))return Z.json({error:`Block "${J}" must be a JSON object`},400);try{let J=await hP0(Z),W=await Ug$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:ch(Q)},G),K=L91({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:W,token:K,apiHost:jg$(Z)})}catch(J){return uP0(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await hP0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({error:"Branch is already the default branch"},400);let G=`chore(decofile): publish ${X.branch}`;try{let J;try{J=await Q.mergeBranch(Y,X.branch,G)}catch(W){if(!(W instanceof Q6&&W.status===409))throw W;await bP0(Q,X.branch,Y),J=await Q.mergeBranch(Y,X.branch,G)}return J?Z.json({result:"merged",sha:J}):Z.json({result:"up-to-date"})}catch(J){if(J instanceof Q6&&J.status===409)return Z.json({error:"merge-conflict"},409);if(J instanceof Q6&&J.status===405){let K=await Q.findOpenPullRequest(Y,X.branch)??await Q.createPullRequest({base:Y,head:X.branch,title:`Publish ${X.branch}`});return Z.json({result:"pull-request",number:K.number,url:K.html_url})}throw J}}catch(Q){return uP0(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await hP0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});try{let{aheadBy:G,behindBy:J}=await Q.compare(Y,X.branch);return Z.json({baseBranch:Y,aheadBy:G,behindBy:J})}catch(G){if(G instanceof Q6&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});throw G}}catch(Q){return uP0(Z,Q)}}),$}var FG6,UG6,Eg$;var Pg$=w(()=>{RP0();w8();n51();PP0();B91();Q91();Og$();Lg$();U91();I_();_P0();FG6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;UG6=nh.object({set:nh.record(nh.string(),nh.unknown()).optional(),delete:nh.array(nh.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}),Eg$=zP0(async($,Z)=>{let X=$.var.studioContext,Q=X.organization;if(!Q)return $.json({error:"Organization scope required"},500);let Y=$.req.param("virtualMcpId"),G=$.req.param("branch");if(!Y||!G)return $.json({error:"virtualMcpId and branch are required"},400);if(!NG6(G))return $.json({error:`Invalid branch name: ${G}`},400);let J=X.auth?.user?.id??null;if(!J){let O=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!O||!Dg$(O,{organizationId:Q.id,virtualMcpId:Y,branch:G}))return $.json({error:"Unauthorized"},401)}let W=await X.storage.virtualMcps.findById(Y);if(!W||W.organization_id!==Q.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!MB0(K)||K?.fastPreview!==!0)return $.json({error:"Fast Preview is not enabled for this project"},404);let F=W.connections?.map((O)=>O.connection_id)??[],N=sr(K,F);if(!N)return $.json({error:"Project has no GitHub repository"},404);let U=K?.runtime;return $.set("decofileScope",{organizationId:Q.id,virtualMcpId:Y,branch:G,packagePath:U?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:N,userId:J}),Z()})});var Ag$=($)=>{let Z=new F1;if(Z.use("*",L_),Z.route("/",yz0()),Z.route("/",nv$()),Z.route("/",nx$()),Z.route("/",mx$()),Z.route("/",LP0()),Z.route("/tools",$y$()),Z.route("/",ax$()),Z.route("/",qx$({kvStorage:$.kvStorage})),Z.route("/",Rx$()),Z.route("/fs",yx$({getConnection:$.getNatsConnection})),Z.route("/sandbox",Fg$()),Z.route("/decofile",zg$()),Z.route("/",cx$()),Z.route("/deco-sites",hz0()),Z.route("/sso",Cz0()),Z.route("/",EP0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",hv$()),$.mountDevAssets)Z.route("/dev-assets",uz0({orgFromPath:!0}));return Z.use("/mcp/:connectionId?",$.mcpAuth),Z.use("/mcp/:connectionId/ui-resource",$.mcpAuth),Z.use("/mcp/gateway/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/virtual-mcp/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/self",$.mcpAuth),Z.use("/mcp/task-run/:threadId",$.mcpAuth),Z.route("/",PC$()),Z.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",$.betterAuthProtectedResourceHandler),Z.get("/mcp/.well-known/oauth-protected-resource",$.betterAuthProtectedResourceHandler),Z.route("/mcp/task-run",hx$()),Z.route("/mcp",iw0()),Z.route("/mcp/self",DP0()),Z.route("/mcp",tw0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var Tg$=w(()=>{w8();w61();uv$();j61();cz0();jr();O61();Ix$();Mx$();gx$();Vn();G61();ow0();u51();ux$();lx$();ix$();tx$();sx$();l51();Zy$();d51();pw0();Ng$();Pg$()});function OG6($){return $.filter((Z)=>Z.vendors?.alias).map((Z)=>({name:Z.name,title:Z.title,description:Z.description,logo:Z.logo,category:Z.category,vendor:{alias:Z.vendors.alias,url:Z.vendors.url}}))}var BG6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},Rg$=()=>{let $=new F1;return $.use("*",BG6),$.get("/",async(Z)=>{let X=b0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await lZ(Q,Y,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:OG6(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var Ig$=w(()=>{w8();T$();hj0()});import{z as M1}from"zod";function XH($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function RG6($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let X=$.substring(0,Z),Q=$.substring(Z+1);if(!X||!Q)return null;return{credentialId:X,modelId:Q}}function IG6($,Z,X){try{return JSON.parse($)}catch{throw new kg$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function qG6($){let Z={};for(let X of $)if(X.role==="assistant"&&X.tool_calls)for(let Q of X.tool_calls)Z[Q.id]=Q.function.name;return $.map((X)=>{switch(X.role){case"system":return{role:"system",content:X.content};case"user":if(typeof X.content==="string")return{role:"user",content:X.content};return{role:"user",content:X.content.map((Y)=>{if(Y.type==="text")return{type:"text",text:Y.text};return{type:"image",image:Y.image_url.url}})};case"assistant":if(X.tool_calls&&X.tool_calls.length>0)return{role:"assistant",content:X.tool_calls.map((Y)=>({type:"tool-call",toolCallId:Y.id,toolName:Y.function.name,input:IG6(Y.function.arguments,Y.id,Y.function.name)}))};return{role:"assistant",content:X.content??""};case"tool":let Q=Z[X.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:X.tool_call_id,toolName:Q,output:{type:"text",value:X.content}}]}}})}function MG6($){let Z=$.map((X)=>{let Q=X.function.parameters?yY(X.function.parameters):yY({type:"object",properties:{}});return[X.function.name,b$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function kG6($){if(!$)return;return{openai:{response_format:$}}}function VG6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function qg$($,Z,X,Q,Y,G){let J={model:$,messages:Z,tools:X,temperature:Q.temperature,maxTokens:Q.max_tokens,topP:Q.top_p,frequencyPenalty:Q.frequency_penalty,presencePenalty:Q.presence_penalty,stopSequences:Q.stop?Array.isArray(Q.stop)?Q.stop:[Q.stop]:void 0,abortSignal:G};return Y?{...J,providerOptions:Y}:J}function Mg$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var wG6=256,DG6,LG6,EG6,jG6,zG6,PG6,AG6,TG6,kg$,Vg$,Sg$;var Cg$=w(()=>{_4();w8();uh();ZN();DG6=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),LG6=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),EG6=M1.discriminatedUnion("role",[M1.object({role:M1.literal("system"),content:M1.string(),name:M1.string().optional()}),M1.object({role:M1.literal("user"),content:M1.union([M1.string(),M1.array(M1.union([M1.object({type:M1.literal("text"),text:M1.string()}),M1.object({type:M1.literal("image_url"),image_url:M1.object({url:M1.string(),detail:M1.string().optional()})})]))]),name:M1.string().optional()}),M1.object({role:M1.literal("assistant"),content:M1.string().nullable().optional(),name:M1.string().optional(),tool_calls:M1.array(LG6).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),jG6=M1.object({type:M1.literal("text")}),zG6=M1.object({type:M1.literal("json_object")}),PG6=M1.object({type:M1.literal("json_schema"),json_schema:M1.object({name:M1.string(),description:M1.string().optional(),schema:M1.record(M1.string(),M1.unknown()),strict:M1.boolean().optional()})}),AG6=M1.union([jG6,zG6,PG6]),TG6=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(EG6),stream:M1.boolean().optional().default(!1),temperature:M1.number().min(0).max(2).optional(),max_tokens:M1.number().positive().optional(),top_p:M1.number().min(0).max(1).optional(),frequency_penalty:M1.number().min(-2).max(2).optional(),presence_penalty:M1.number().min(-2).max(2).optional(),stop:M1.union([M1.string(),M1.array(M1.string())]).optional(),tools:M1.array(DG6).optional(),tool_choice:M1.union([M1.literal("auto"),M1.literal("none"),M1.literal("required"),M1.object({type:M1.literal("function"),function:M1.object({name:M1.string()})})]).optional(),response_format:AG6.optional(),user:M1.string().optional()});kg$=class kg$ extends Error{constructor($){super($);this.name="MessageConversionError"}};Vg$=new F1;Vg$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(XH("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(XH("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(XH("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=TG6.safeParse(Q);if(!Y.success){let L=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(XH(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let G=Y.data,J=RG6(G.model);if(!J)return $.json(XH("Invalid model format. Expected 'model_id' or 'credential_id:model_id' (e.g., 'claude-sonnet-4-6' or 'key_abc123:claude-sonnet-4-6')","invalid_request_error","model"),400);let{credentialId:W}=J,{modelId:K}=J;if(!W){let E=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((j)=>kD(j.providerId));if(!E)return $.json(XH("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);W=E.id}let H;try{H=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(XH(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),N=qG6(G.messages),U=G.tools?MG6(G.tools):void 0,O=kG6(G.response_format),B=VG6(),D=Math.floor(Date.now()/1000);if(G.stream)return AN($,async(L)=>{let E=qg$(F,N,U,G,O,$.req.raw.signal);try{let j=mO(E),z=!1,A=0,P="",M=async()=>{if(P.length===0)return;let q=P;P="",await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{content:q},finish_reason:null}]})})};for await(let q of j.fullStream){if(!z&&(q.type==="text-delta"||q.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(q.type==="text-delta"){if(P+=q.text,P.length>=wG6)await M()}else if(q.type==="tool-call"){await M();let k=A++;await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{tool_calls:[{index:k,id:q.toolCallId,type:"function",function:{name:q.toolName,arguments:JSON.stringify(q.input)}}]},finish_reason:null}]})})}else if(q.type==="finish")await M(),await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{},finish_reason:Mg$(q.finishReason)}],usage:q.totalUsage?{prompt_tokens:q.totalUsage.inputTokens??0,completion_tokens:q.totalUsage.outputTokens??0,total_tokens:q.totalUsage.totalTokens??0}:void 0})})}await M(),await L.writeSSE({data:"[DONE]"})}catch(j){let z=j;console.error("[openai-compat:stream] Error:",z.message),await L.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let L=qg$(F,N,U,G,O,$.req.raw.signal),E=await lO(L),j={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)j.tool_calls=E.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),j.content=null;return $.json({id:B,object:"chat.completion",created:D,model:G.model,choices:[{index:0,message:j,finish_reason:Mg$(E.finishReason)}],usage:{prompt_tokens:E.usage?.inputTokens??0,completion_tokens:E.usage?.outputTokens??0,total_tokens:E.usage?.totalTokens??0}})}}catch(Q){let Y=Q;if(Y.name==="AbortError")return $.json(XH("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(XH(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(XH(Y.message,"server_error"),500)}});Sg$=Vg$});function _g$(){let $=new F1;return $.use("*",async(Z,X)=>{await X(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let X=Z.get("studioContext"),Q=G1(X);if(!Q)return Z.json({error:"Authentication required"},401);let G=(Z.req.query("site")??"").trim().toLowerCase();if(!tK(G))return Z.json({error:"Invalid site slug"},400);let J=await X.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["organization.id as id","organization.slug as slug","organization.name as name","organization.metadata as metadata"]).where("member.userId","=",Q).execute(),W=[];for(let H of J){if(!H.slug||J7(H))continue;let F=await X.storage.virtualMcps.list(H.id);for(let N of F){if(N.metadata?.siteSlug?.toLowerCase()!==G)continue;W.push({orgSlug:H.slug,orgName:H.name??H.slug,project:{id:N.id,title:N.title,icon:N.icon??null}})}}let K={matches:W};return Z.json(K)}),$}var vg$=w(()=>{w8();J_()});var bg$;var fg$=w(()=>{bg$={name:"decocms",version:"4.242.0",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function _G6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??CG6}}var xg$,CG6="https://ph.studio.decocms.com",yg$;var gg$=w(()=>{w8();Yh0();XC();_9();T$();$61();fg$();xg$=new F1;xg$.get("/",($)=>{let Z={version:bg$.version,theme:Od1(),...EL().logo&&{logo:EL().logo},...AK()&&{internalUrl:dV1()},...b0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!b0().firecrawlApiKey,auth:Yv$(),posthog:_G6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!AK()&&b0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});yg$=xg$});function th($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function E91($){return(th($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function ug$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(th($))}&sz=${Z}`}function hg$($,Z){let X=$.trim();if(X.length<=Z)return X;let Q=X.slice(0,Z-1),Y=Q.lastIndexOf(" ");return`${(Y>Z*0.6?Q.slice(0,Y):Q).trimEnd()}\u2026`}function cg$($){let{brand:Z,domain:X,score:Q,verdict:Y}=$,G=typeof Q==="number"?`${Z} commerce report \u2014 ${Math.round(Q)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,J=`See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,W=Y?.trim()?hg$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):hg$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as l0}from"zod";var S_,vG6,fG6,bG6,xG6,lg$;var dg$=w(()=>{S_=l0.enum(["good","bad","neutral"]),vG6=l0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},l0.object({kind:l0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:l0.coerce.string().optional(),tone:S_.optional(),muted:l0.boolean().optional(),delta:l0.coerce.string().optional(),deltaDir:l0.enum(["up","down","neutral"]).optional(),points:l0.array(l0.coerce.number()).optional(),label:l0.coerce.string().optional()}).transform(($)=>{if($.kind==="badge"&&$.label==null)$.label=$.value??"";if($.kind==="score"){let Z=Number($.value);if(Number.isNaN(Z))return{...$,kind:"text"}}return $})),fG6=l0.preprocess(($)=>{let Z=$;if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&Array.isArray(Z.cells))Z=Z.cells;if(Array.isArray(Z)&&Z.length===1&&Array.isArray(Z[0]))Z=Z[0];if(Array.isArray(Z))return Z;if(Z&&typeof Z==="object")return Object.values(Z);return Z},l0.array(vG6)),bG6={key:l0.coerce.string(),title:l0.coerce.string(),eyebrow:l0.coerce.string().optional(),headline:l0.coerce.string(),annotation:l0.coerce.string().optional(),methodology:l0.coerce.string().optional(),sources:l0.array(l0.object({name:l0.coerce.string(),logoUrl:l0.coerce.string()})).optional()},xG6=l0.discriminatedUnion("template",[l0.object({template:l0.literal("cover"),score:l0.object({value:l0.coerce.number(),max:l0.coerce.number().optional(),grade:l0.coerce.string().optional(),label:l0.coerce.string().optional()}).optional(),brandImage:l0.coerce.string().optional(),screenshot:l0.coerce.string().optional(),mobileScreenshot:l0.coerce.string().optional()}),l0.object({template:l0.literal("cta"),ctaUrl:l0.coerce.string().optional(),ctaLabel:l0.coerce.string().optional(),bullets:l0.array(l0.coerce.string()).optional()}),l0.object({template:l0.literal("series"),points:l0.array(l0.coerce.number()).min(2),xLabels:l0.array(l0.coerce.string()).min(1),unit:l0.coerce.string().optional(),callout:l0.object({index:l0.coerce.number(),value:l0.coerce.string(),tone:S_.optional()})}),l0.object({template:l0.literal("threshold"),value:l0.coerce.string().default(""),metricLabel:l0.coerce.string().optional(),ratio:l0.coerce.number(),thresholdRatio:l0.coerce.number().optional(),thresholdLabel:l0.coerce.string().default(""),tone:S_.optional()}),l0.object({template:l0.literal("stats"),stats:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),tone:S_.optional()})).min(1)}),l0.object({template:l0.literal("bars"),items:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),ratio:l0.coerce.number(),tone:S_.optional()})).min(1)}),l0.object({template:l0.literal("gauges"),gauges:l0.array(l0.object({label:l0.coerce.string(),value:l0.coerce.string(),status:l0.enum(["good","warn","bad"]).catch("warn"),caption:l0.coerce.string().optional(),ratio:l0.coerce.number().optional()})).min(1)}),l0.object({template:l0.literal("checklist"),checks:l0.array(l0.object({label:l0.coerce.string(),status:l0.enum(["pass","fail","warn"]).catch("fail"),value:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("table"),columns:l0.array(l0.object({label:l0.coerce.string(),align:l0.enum(["left","right"]).optional()})).min(1),rows:l0.array(fG6).min(1),highlightRow:l0.coerce.number().optional()}),l0.object({template:l0.literal("products"),products:l0.array(l0.object({name:l0.coerce.string(),price:l0.coerce.string().optional(),image:l0.coerce.string().optional(),url:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("list"),entries:l0.array(l0.object({label:l0.coerce.string(),severity:l0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:l0.coerce.number().optional()}),l0.object({template:l0.literal("keywords"),volumeLabel:l0.coerce.string().optional(),keywords:l0.array(l0.object({term:l0.coerce.string(),volume:l0.coerce.string(),position:l0.coerce.number().catch(0)})).min(1)}),l0.object({template:l0.literal("competitor"),metricLabel:l0.coerce.string().optional(),competitors:l0.array(l0.object({name:l0.coerce.string(),value:l0.coerce.string(),tone:S_.optional(),isYou:l0.boolean().optional()})).min(1)}),l0.object({template:l0.literal("scorecard"),rivalLabel:l0.coerce.string().optional(),dimensions:l0.array(l0.object({label:l0.coerce.string(),you:l0.coerce.string(),rival:l0.coerce.string().optional(),rivalName:l0.coerce.string().optional(),tone:S_.optional()})).min(1)})]),lg$=l0.object({...bG6,template:xG6})});function cP0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=lg$.safeParse(Y.props);if(G.success)return G.data;let J=G.error.issues[0];return Z.push({section_type:Y.section_type,position:Y.position,reason:J?`${J.path.join(".")||"(root)"}: ${J.message}`:"contract violation"}),null}).filter((Y)=>Y!==null),Q=X.filter((Y)=>Y.template.template!=="cover"&&Y.template.template!=="cta").map((Y)=>({key:Y.key,title:Y.title}));return{deck:{meta:{...$.meta,scores:$.summary?.scores,scannedAt:$.scanned_at,toc:Q},slides:X},drops:Z}}var j91=w(()=>{dg$()});import{join as mg$}from"path";async function gG6($){try{let Z=await fetch(`${tW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(yG6)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=cP0(X);if(!Q.slides.length)return null;let Y=Q.slides.find((W)=>W.template.template==="cover"),G=Y?.template,J=G&&G.template==="cover"?G:void 0;return{brand:Q.meta.brand?.trim()||E91($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function GG($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function hG6($,Z){let X=th($),Q=Z?.brand?.trim()||E91(X),Y=ug$(X,128),J=`${(b0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=cg$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),H=`${J}/og.png`,F=`${Q} commerce report by decocms`;return[`<title>${GG(W)}</title>`,`<meta name="description" content="${GG(K)}" />`,'<meta name="robots" content="noindex, follow" />','<meta property="og:type" content="website" />','<meta property="og:site_name" content="decocms" />',`<meta property="og:title" content="${GG(W)}" />`,`<meta property="og:description" content="${GG(K)}" />`,`<meta property="og:url" content="${GG(J)}" />`,`<meta property="og:image" content="${GG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${GG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${GG(W)}" />`,`<meta name="twitter:description" content="${GG(K)}" />`,`<meta name="twitter:image" content="${GG(H)}" />`,`<meta name="twitter:image:alt" content="${GG(F)}" />`,`<link rel="canonical" href="${GG(J)}" />`,`<link rel="icon" href="${GG(Y)}" sizes="any" />`].join(`
2786
+ `,j=await Z.createBlob(E);await ey$(Z.owner,Z.repo,j,E);let z=L[0]??`${CP0(Q)}/${Y91(B)}.json`;H.push({path:z,mode:"100644",type:"blob",sha:j});let A=z.slice(z.lastIndexOf("/")+1,-5);F.set(z,{stem:A,sha:j,content:E});for(let P of L.slice(1))H.push({path:P,mode:"100644",type:"blob",sha:null}),F.delete(P)}for(let B of $.del)for(let D of F91(K,B))H.push({path:D,mode:"100644",type:"blob",sha:null}),F.delete(D);if(H.length===0)return G;let N=Q?`${Q}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((B)=>B.type==="blob"&&B.path===N)){let B=await Promise.all([...F.values()].map(async(j)=>({stem:j.stem,content:j.content??await Z.getBlobText(j.sha)}))),{decofile:D,skipped:L}=nr(B);if(L.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:`${Z.owner}/${Z.repo}`,branch:X,packagePath:Q,blocks:L.map((j)=>j.key)});let E=await Z.createBlob(D);H.push({path:N,mode:"100644",type:"blob",sha:E})}let U=await Z.createTree(J,H),O=await Z.createCommit({message:JG6($),treeSha:U,parentShas:[G]});try{return await Z.updateRef(X,O),O}catch(B){if(!(B instanceof Q6&&B.status===422)||Y>=QG6-1)throw B;await q$(pZ(2000,200,Y,2,0.5))}}}function JG6($){let Z=(Y)=>{let G=Y.slice(0,3).join(", ");return Y.length>3?`${G} (+${Y.length-3} more)`:G},X=[];if($.set.size>0)X.push(`update ${Z([...$.set.keys()])}`);if($.del.size>0)X.push(`delete ${Z([...$.del])}`);let Q=`chore(decofile): ${X.join("; ")}`;return Rd0(Q,$.deps.coAuthor)}var QG6=3,D91;var Og$=w(()=>{zO0();RP0();u4();I_();_P0();D91=new Map});import{createHmac as Bg$,randomBytes as WG6,timingSafeEqual as KG6}from"crypto";function wg$(){if(gP0)return gP0;let $;try{let Z=b0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return gP0=$?Buffer.from($):WG6(32),gP0}function L91($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+HG6)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=Bg$("sha256",wg$()).update(Q).digest("base64url");return`${Q}.${Y}`}function Dg$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(Bg$("sha256",wg$()).update(Q).digest("base64url"));if(Y.length!==G.length||!KG6(Y,G))return!1;let J;try{J=JSON.parse(Buffer.from(Q,"base64url").toString())}catch{return!1}let W=Math.floor((Z.nowMs??Date.now())/1000);return J.o===Z.organizationId&&J.m===Z.virtualMcpId&&J.b===Z.branch&&typeof J.e==="number"&&J.e>=W}var HG6=21600000,gP0=null;var Lg$=w(()=>{T$()});import{z as nh}from"zod";function NG6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&FG6.test($)}function jg$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function hP0($){let Z=$.get("decofileScope");return AP0($.var.studioContext,Z.organizationId,Z.githubRepo)}function uP0($,Z){if(Z instanceof Q6){let Q=Z.status===404?404:Z.status===409?409:Z.status===422?409:502;return $.json({error:Z.message},Q)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},500)}function zg$(){let $=new F1;return $.use("/:virtualMcpId/:branch",Eg$),$.use("/:virtualMcpId/:branch/*",Eg$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await hP0(Z),Y=await $g$(Q,X.branch,X.packagePath,{createBranchIfMissing:!!X.userId}),G={ETag:`"${Y.sha}"`,"Cache-Control":"no-store","Access-Control-Allow-Origin":"*"};if(Z.req.header("if-none-match")===`"${Y.sha}"`)return Z.body(null,304,G);if(!X.userId)return Z.body(Y.decofile,200,{...G,"content-type":"application/json"});let J=L91({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(jg$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return uP0(Z,Q)}}),$.patch("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=UG6.safeParse(await Z.req.json().catch(()=>null));if(!Y.success)return Z.json({error:"Invalid body",details:Y.error.issues},400);let G=Y.data;for(let J of[...Object.keys(G.set??{}),...G.delete??[]])try{TP0(J)}catch(W){let K=W instanceof Error?W.message:String(W);return Z.json({error:K},400)}for(let[J,W]of Object.entries(G.set??{}))if(typeof W!=="object"||W===null||Array.isArray(W))return Z.json({error:`Block "${J}" must be a JSON object`},400);try{let J=await hP0(Z),W=await Ug$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:ch(Q)},G),K=L91({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:W,token:K,apiHost:jg$(Z)})}catch(J){return uP0(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await hP0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({error:"Branch is already the default branch"},400);let G=`chore(decofile): publish ${X.branch}`;try{let J;try{J=await Q.mergeBranch(Y,X.branch,G)}catch(W){if(!(W instanceof Q6&&W.status===409))throw W;await bP0(Q,X.branch,Y),J=await Q.mergeBranch(Y,X.branch,G)}return J?Z.json({result:"merged",sha:J}):Z.json({result:"up-to-date"})}catch(J){if(J instanceof Q6&&J.status===409)return Z.json({error:"merge-conflict"},409);if(J instanceof Q6&&J.status===405){let K=await Q.findOpenPullRequest(Y,X.branch)??await Q.createPullRequest({base:Y,head:X.branch,title:`Publish ${X.branch}`});return Z.json({result:"pull-request",number:K.number,url:K.html_url})}throw J}}catch(Q){return uP0(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await hP0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});try{let{aheadBy:G,behindBy:J}=await Q.compare(Y,X.branch);return Z.json({baseBranch:Y,aheadBy:G,behindBy:J})}catch(G){if(G instanceof Q6&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});throw G}}catch(Q){return uP0(Z,Q)}}),$}var FG6,UG6,Eg$;var Pg$=w(()=>{RP0();w8();n51();PP0();B91();Q91();Og$();Lg$();U91();I_();_P0();FG6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;UG6=nh.object({set:nh.record(nh.string(),nh.unknown()).optional(),delete:nh.array(nh.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}),Eg$=zP0(async($,Z)=>{let X=$.var.studioContext,Q=X.organization;if(!Q)return $.json({error:"Organization scope required"},500);let Y=$.req.param("virtualMcpId"),G=$.req.param("branch");if(!Y||!G)return $.json({error:"virtualMcpId and branch are required"},400);if(!NG6(G))return $.json({error:`Invalid branch name: ${G}`},400);let J=X.auth?.user?.id??null;if(!J){let O=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!O||!Dg$(O,{organizationId:Q.id,virtualMcpId:Y,branch:G}))return $.json({error:"Unauthorized"},401)}let W=await X.storage.virtualMcps.findById(Y);if(!W||W.organization_id!==Q.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!MB0(K)||K?.fastPreview!==!0)return $.json({error:"Fast Preview is not enabled for this project"},404);let F=W.connections?.map((O)=>O.connection_id)??[],N=sr(K,F);if(!N)return $.json({error:"Project has no GitHub repository"},404);let U=K?.runtime;return $.set("decofileScope",{organizationId:Q.id,virtualMcpId:Y,branch:G,packagePath:U?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:N,userId:J}),Z()})});var Ag$=($)=>{let Z=new F1;if(Z.use("*",L_),Z.route("/",yz0()),Z.route("/",nv$()),Z.route("/",nx$()),Z.route("/",mx$()),Z.route("/",LP0()),Z.route("/tools",$y$()),Z.route("/",ax$()),Z.route("/",qx$({kvStorage:$.kvStorage})),Z.route("/",Rx$()),Z.route("/fs",yx$({getConnection:$.getNatsConnection})),Z.route("/sandbox",Fg$()),Z.route("/decofile",zg$()),Z.route("/",cx$()),Z.route("/deco-sites",hz0()),Z.route("/sso",Cz0()),Z.route("/",EP0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",hv$()),$.mountDevAssets)Z.route("/dev-assets",uz0({orgFromPath:!0}));return Z.use("/mcp/:connectionId?",$.mcpAuth),Z.use("/mcp/:connectionId/ui-resource",$.mcpAuth),Z.use("/mcp/gateway/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/virtual-mcp/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/self",$.mcpAuth),Z.use("/mcp/task-run/:threadId",$.mcpAuth),Z.route("/",PC$()),Z.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",$.betterAuthProtectedResourceHandler),Z.get("/mcp/.well-known/oauth-protected-resource",$.betterAuthProtectedResourceHandler),Z.route("/mcp/task-run",hx$()),Z.route("/mcp",iw0()),Z.route("/mcp/self",DP0()),Z.route("/mcp",tw0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var Tg$=w(()=>{w8();w61();uv$();j61();cz0();jr();O61();Ix$();Mx$();gx$();Vn();G61();ow0();u51();ux$();lx$();ix$();tx$();sx$();l51();Zy$();d51();pw0();Ng$();Pg$()});function OG6($){return $.filter((Z)=>Z.vendors?.alias).map((Z)=>({name:Z.name,title:Z.title,description:Z.description,logo:Z.logo,category:Z.category,vendor:{alias:Z.vendors.alias,url:Z.vendors.url}}))}var BG6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},Rg$=()=>{let $=new F1;return $.use("*",BG6),$.get("/",async(Z)=>{let X=b0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await lZ(Q,Y,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:OG6(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var Ig$=w(()=>{w8();T$();hj0()});import{z as M1}from"zod";function XH($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function RG6($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let X=$.substring(0,Z),Q=$.substring(Z+1);if(!X||!Q)return null;return{credentialId:X,modelId:Q}}function IG6($,Z,X){try{return JSON.parse($)}catch{throw new kg$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function qG6($){let Z={};for(let X of $)if(X.role==="assistant"&&X.tool_calls)for(let Q of X.tool_calls)Z[Q.id]=Q.function.name;return $.map((X)=>{switch(X.role){case"system":return{role:"system",content:X.content};case"user":if(typeof X.content==="string")return{role:"user",content:X.content};return{role:"user",content:X.content.map((Y)=>{if(Y.type==="text")return{type:"text",text:Y.text};return{type:"image",image:Y.image_url.url}})};case"assistant":if(X.tool_calls&&X.tool_calls.length>0)return{role:"assistant",content:X.tool_calls.map((Y)=>({type:"tool-call",toolCallId:Y.id,toolName:Y.function.name,input:IG6(Y.function.arguments,Y.id,Y.function.name)}))};return{role:"assistant",content:X.content??""};case"tool":let Q=Z[X.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:X.tool_call_id,toolName:Q,output:{type:"text",value:X.content}}]}}})}function MG6($){let Z=$.map((X)=>{let Q=X.function.parameters?yY(X.function.parameters):yY({type:"object",properties:{}});return[X.function.name,b$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function kG6($){if(!$)return;return{openai:{response_format:$}}}function VG6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function qg$($,Z,X,Q,Y,G){let J={model:$,messages:Z,tools:X,temperature:Q.temperature,maxTokens:Q.max_tokens,topP:Q.top_p,frequencyPenalty:Q.frequency_penalty,presencePenalty:Q.presence_penalty,stopSequences:Q.stop?Array.isArray(Q.stop)?Q.stop:[Q.stop]:void 0,abortSignal:G};return Y?{...J,providerOptions:Y}:J}function Mg$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var wG6=256,DG6,LG6,EG6,jG6,zG6,PG6,AG6,TG6,kg$,Vg$,Sg$;var Cg$=w(()=>{_4();w8();uh();ZN();DG6=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),LG6=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),EG6=M1.discriminatedUnion("role",[M1.object({role:M1.literal("system"),content:M1.string(),name:M1.string().optional()}),M1.object({role:M1.literal("user"),content:M1.union([M1.string(),M1.array(M1.union([M1.object({type:M1.literal("text"),text:M1.string()}),M1.object({type:M1.literal("image_url"),image_url:M1.object({url:M1.string(),detail:M1.string().optional()})})]))]),name:M1.string().optional()}),M1.object({role:M1.literal("assistant"),content:M1.string().nullable().optional(),name:M1.string().optional(),tool_calls:M1.array(LG6).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),jG6=M1.object({type:M1.literal("text")}),zG6=M1.object({type:M1.literal("json_object")}),PG6=M1.object({type:M1.literal("json_schema"),json_schema:M1.object({name:M1.string(),description:M1.string().optional(),schema:M1.record(M1.string(),M1.unknown()),strict:M1.boolean().optional()})}),AG6=M1.union([jG6,zG6,PG6]),TG6=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(EG6),stream:M1.boolean().optional().default(!1),temperature:M1.number().min(0).max(2).optional(),max_tokens:M1.number().positive().optional(),top_p:M1.number().min(0).max(1).optional(),frequency_penalty:M1.number().min(-2).max(2).optional(),presence_penalty:M1.number().min(-2).max(2).optional(),stop:M1.union([M1.string(),M1.array(M1.string())]).optional(),tools:M1.array(DG6).optional(),tool_choice:M1.union([M1.literal("auto"),M1.literal("none"),M1.literal("required"),M1.object({type:M1.literal("function"),function:M1.object({name:M1.string()})})]).optional(),response_format:AG6.optional(),user:M1.string().optional()});kg$=class kg$ extends Error{constructor($){super($);this.name="MessageConversionError"}};Vg$=new F1;Vg$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(XH("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(XH("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(XH("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=TG6.safeParse(Q);if(!Y.success){let L=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(XH(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let G=Y.data,J=RG6(G.model);if(!J)return $.json(XH("Invalid model format. Expected 'model_id' or 'credential_id:model_id' (e.g., 'claude-sonnet-4-6' or 'key_abc123:claude-sonnet-4-6')","invalid_request_error","model"),400);let{credentialId:W}=J,{modelId:K}=J;if(!W){let E=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((j)=>kD(j.providerId));if(!E)return $.json(XH("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);W=E.id}let H;try{H=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(XH(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),N=qG6(G.messages),U=G.tools?MG6(G.tools):void 0,O=kG6(G.response_format),B=VG6(),D=Math.floor(Date.now()/1000);if(G.stream)return AN($,async(L)=>{let E=qg$(F,N,U,G,O,$.req.raw.signal);try{let j=mO(E),z=!1,A=0,P="",M=async()=>{if(P.length===0)return;let q=P;P="",await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{content:q},finish_reason:null}]})})};for await(let q of j.fullStream){if(!z&&(q.type==="text-delta"||q.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(q.type==="text-delta"){if(P+=q.text,P.length>=wG6)await M()}else if(q.type==="tool-call"){await M();let k=A++;await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{tool_calls:[{index:k,id:q.toolCallId,type:"function",function:{name:q.toolName,arguments:JSON.stringify(q.input)}}]},finish_reason:null}]})})}else if(q.type==="finish")await M(),await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{},finish_reason:Mg$(q.finishReason)}],usage:q.totalUsage?{prompt_tokens:q.totalUsage.inputTokens??0,completion_tokens:q.totalUsage.outputTokens??0,total_tokens:q.totalUsage.totalTokens??0}:void 0})})}await M(),await L.writeSSE({data:"[DONE]"})}catch(j){let z=j;console.error("[openai-compat:stream] Error:",z.message),await L.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let L=qg$(F,N,U,G,O,$.req.raw.signal),E=await lO(L),j={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)j.tool_calls=E.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),j.content=null;return $.json({id:B,object:"chat.completion",created:D,model:G.model,choices:[{index:0,message:j,finish_reason:Mg$(E.finishReason)}],usage:{prompt_tokens:E.usage?.inputTokens??0,completion_tokens:E.usage?.outputTokens??0,total_tokens:E.usage?.totalTokens??0}})}}catch(Q){let Y=Q;if(Y.name==="AbortError")return $.json(XH("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(XH(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(XH(Y.message,"server_error"),500)}});Sg$=Vg$});function _g$(){let $=new F1;return $.use("*",async(Z,X)=>{await X(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let X=Z.get("studioContext"),Q=G1(X);if(!Q)return Z.json({error:"Authentication required"},401);let G=(Z.req.query("site")??"").trim().toLowerCase();if(!tK(G))return Z.json({error:"Invalid site slug"},400);let J=await X.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["organization.id as id","organization.slug as slug","organization.name as name","organization.metadata as metadata"]).where("member.userId","=",Q).execute(),W=[];for(let H of J){if(!H.slug||J7(H))continue;let F=await X.storage.virtualMcps.list(H.id);for(let N of F){if(N.metadata?.siteSlug?.toLowerCase()!==G)continue;W.push({orgSlug:H.slug,orgName:H.name??H.slug,project:{id:N.id,title:N.title,icon:N.icon??null}})}}let K={matches:W};return Z.json(K)}),$}var vg$=w(()=>{w8();J_()});var bg$;var fg$=w(()=>{bg$={name:"decocms",version:"4.242.2",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function _G6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??CG6}}var xg$,CG6="https://ph.studio.decocms.com",yg$;var gg$=w(()=>{w8();Yh0();XC();_9();T$();$61();fg$();xg$=new F1;xg$.get("/",($)=>{let Z={version:bg$.version,theme:Od1(),...EL().logo&&{logo:EL().logo},...AK()&&{internalUrl:dV1()},...b0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!b0().firecrawlApiKey,auth:Yv$(),posthog:_G6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!AK()&&b0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});yg$=xg$});function th($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function E91($){return(th($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function ug$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(th($))}&sz=${Z}`}function hg$($,Z){let X=$.trim();if(X.length<=Z)return X;let Q=X.slice(0,Z-1),Y=Q.lastIndexOf(" ");return`${(Y>Z*0.6?Q.slice(0,Y):Q).trimEnd()}\u2026`}function cg$($){let{brand:Z,domain:X,score:Q,verdict:Y}=$,G=typeof Q==="number"?`${Z} commerce report \u2014 ${Math.round(Q)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,J=`See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,W=Y?.trim()?hg$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):hg$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as l0}from"zod";var S_,vG6,fG6,bG6,xG6,lg$;var dg$=w(()=>{S_=l0.enum(["good","bad","neutral"]),vG6=l0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},l0.object({kind:l0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:l0.coerce.string().optional(),tone:S_.optional(),muted:l0.boolean().optional(),delta:l0.coerce.string().optional(),deltaDir:l0.enum(["up","down","neutral"]).optional(),points:l0.array(l0.coerce.number()).optional(),label:l0.coerce.string().optional()}).transform(($)=>{if($.kind==="badge"&&$.label==null)$.label=$.value??"";if($.kind==="score"){let Z=Number($.value);if(Number.isNaN(Z))return{...$,kind:"text"}}return $})),fG6=l0.preprocess(($)=>{let Z=$;if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&Array.isArray(Z.cells))Z=Z.cells;if(Array.isArray(Z)&&Z.length===1&&Array.isArray(Z[0]))Z=Z[0];if(Array.isArray(Z))return Z;if(Z&&typeof Z==="object")return Object.values(Z);return Z},l0.array(vG6)),bG6={key:l0.coerce.string(),title:l0.coerce.string(),eyebrow:l0.coerce.string().optional(),headline:l0.coerce.string(),annotation:l0.coerce.string().optional(),methodology:l0.coerce.string().optional(),sources:l0.array(l0.object({name:l0.coerce.string(),logoUrl:l0.coerce.string()})).optional()},xG6=l0.discriminatedUnion("template",[l0.object({template:l0.literal("cover"),score:l0.object({value:l0.coerce.number(),max:l0.coerce.number().optional(),grade:l0.coerce.string().optional(),label:l0.coerce.string().optional()}).optional(),brandImage:l0.coerce.string().optional(),screenshot:l0.coerce.string().optional(),mobileScreenshot:l0.coerce.string().optional()}),l0.object({template:l0.literal("cta"),ctaUrl:l0.coerce.string().optional(),ctaLabel:l0.coerce.string().optional(),bullets:l0.array(l0.coerce.string()).optional()}),l0.object({template:l0.literal("series"),points:l0.array(l0.coerce.number()).min(2),xLabels:l0.array(l0.coerce.string()).min(1),unit:l0.coerce.string().optional(),callout:l0.object({index:l0.coerce.number(),value:l0.coerce.string(),tone:S_.optional()})}),l0.object({template:l0.literal("threshold"),value:l0.coerce.string().default(""),metricLabel:l0.coerce.string().optional(),ratio:l0.coerce.number(),thresholdRatio:l0.coerce.number().optional(),thresholdLabel:l0.coerce.string().default(""),tone:S_.optional()}),l0.object({template:l0.literal("stats"),stats:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),tone:S_.optional()})).min(1)}),l0.object({template:l0.literal("bars"),items:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),ratio:l0.coerce.number(),tone:S_.optional()})).min(1)}),l0.object({template:l0.literal("gauges"),gauges:l0.array(l0.object({label:l0.coerce.string(),value:l0.coerce.string(),status:l0.enum(["good","warn","bad"]).catch("warn"),caption:l0.coerce.string().optional(),ratio:l0.coerce.number().optional()})).min(1)}),l0.object({template:l0.literal("checklist"),checks:l0.array(l0.object({label:l0.coerce.string(),status:l0.enum(["pass","fail","warn"]).catch("fail"),value:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("table"),columns:l0.array(l0.object({label:l0.coerce.string(),align:l0.enum(["left","right"]).optional()})).min(1),rows:l0.array(fG6).min(1),highlightRow:l0.coerce.number().optional()}),l0.object({template:l0.literal("products"),products:l0.array(l0.object({name:l0.coerce.string(),price:l0.coerce.string().optional(),image:l0.coerce.string().optional(),url:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("list"),entries:l0.array(l0.object({label:l0.coerce.string(),severity:l0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:l0.coerce.number().optional()}),l0.object({template:l0.literal("keywords"),volumeLabel:l0.coerce.string().optional(),keywords:l0.array(l0.object({term:l0.coerce.string(),volume:l0.coerce.string(),position:l0.coerce.number().catch(0)})).min(1)}),l0.object({template:l0.literal("competitor"),metricLabel:l0.coerce.string().optional(),competitors:l0.array(l0.object({name:l0.coerce.string(),value:l0.coerce.string(),tone:S_.optional(),isYou:l0.boolean().optional()})).min(1)}),l0.object({template:l0.literal("scorecard"),rivalLabel:l0.coerce.string().optional(),dimensions:l0.array(l0.object({label:l0.coerce.string(),you:l0.coerce.string(),rival:l0.coerce.string().optional(),rivalName:l0.coerce.string().optional(),tone:S_.optional()})).min(1)})]),lg$=l0.object({...bG6,template:xG6})});function cP0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=lg$.safeParse(Y.props);if(G.success)return G.data;let J=G.error.issues[0];return Z.push({section_type:Y.section_type,position:Y.position,reason:J?`${J.path.join(".")||"(root)"}: ${J.message}`:"contract violation"}),null}).filter((Y)=>Y!==null),Q=X.filter((Y)=>Y.template.template!=="cover"&&Y.template.template!=="cta").map((Y)=>({key:Y.key,title:Y.title}));return{deck:{meta:{...$.meta,scores:$.summary?.scores,scannedAt:$.scanned_at,toc:Q},slides:X},drops:Z}}var j91=w(()=>{dg$()});import{join as mg$}from"path";async function gG6($){try{let Z=await fetch(`${tW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(yG6)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=cP0(X);if(!Q.slides.length)return null;let Y=Q.slides.find((W)=>W.template.template==="cover"),G=Y?.template,J=G&&G.template==="cover"?G:void 0;return{brand:Q.meta.brand?.trim()||E91($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function GG($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function hG6($,Z){let X=th($),Q=Z?.brand?.trim()||E91(X),Y=ug$(X,128),J=`${(b0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=cg$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),H=`${J}/og.png`,F=`${Q} commerce report by decocms`;return[`<title>${GG(W)}</title>`,`<meta name="description" content="${GG(K)}" />`,'<meta name="robots" content="noindex, follow" />','<meta property="og:type" content="website" />','<meta property="og:site_name" content="decocms" />',`<meta property="og:title" content="${GG(W)}" />`,`<meta property="og:description" content="${GG(K)}" />`,`<meta property="og:url" content="${GG(J)}" />`,`<meta property="og:image" content="${GG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${GG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${GG(W)}" />`,`<meta name="twitter:description" content="${GG(K)}" />`,`<meta name="twitter:image" content="${GG(H)}" />`,`<meta name="twitter:image:alt" content="${GG(F)}" />`,`<link rel="canonical" href="${GG(J)}" />`,`<link rel="icon" href="${GG(Y)}" sizes="any" />`].join(`
2787
2787
  `)}function uG6($,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}
2788
2788
  </head>`)}function ig$($){let Z=new F1;return Z.get("/:domain/og.png",async(X)=>{let Q=th(X.req.param("domain")),Y=async()=>{let G=$?Bun.file(mg$($,"report-og-fallback.png")):null;if(!G||!await G.exists())return X.notFound();return X.body(new Uint8Array(await G.arrayBuffer()),200,{"Content-Type":"image/png","Cache-Control":"public, max-age=0, s-maxage=3600"})};try{let G=await fetch(`${tW({})}/api/v2/public/diagnostics/${encodeURIComponent(Q)}/og.png`,{signal:AbortSignal.timeout(cG6)}),J=G.headers.get("content-type")??"";if(!G.ok||!J.startsWith("image/")||!G.body)return Y();return X.body(G.body,200,{"Content-Type":J,"Cache-Control":"public, max-age=0, s-maxage=604800"})}catch{return Y()}}),Z.get("/:domain",async(X)=>{let Q=X.req.param("domain"),Y=$?mg$($,"index.html"):null,G=Y?Bun.file(Y):null;if(!G||!await G.exists())return X.notFound();let J=await G.text();try{let W=await gG6(th(Q)),K=hG6(Q,W);return X.html(uG6(J,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return X.html(J)}}),Z}var yG6=2500,cG6=1e4;var pg$=w(()=>{w8();j91();_L();T$()});function $a($,Z){return fetch(`${tW({})}${$}`,Z)}async function lG6($,Z,X){let Q=new URLSearchParams;if(Z)Q.set("pw",Z);if(X)Q.set("lang",X);let Y=Q.toString()?`?${Q.toString()}`:"",G=await $a(`/api/v2/public/diagnostics/${encodeURIComponent($)}${Y}`,{headers:{Accept:"application/json"}});if(G.status===404)return{status:"not_found",deck:null,scanned_at:null,drops:[]};if(!G.ok)throw Error(`report read HTTP ${G.status}`);let J=await G.json(),{deck:W,drops:K}=cP0(J);return{status:W.slides.length?"ready":"empty",deck:W,scanned_at:J.scanned_at,drops:K}}var dG6,RN,ng$=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},tg$;var og$=w(()=>{w8();vY();_L();j91();dG6=new Set(["complete","errored","terminated","unknown"]),RN=new F1;RN.use("*",async($,Z)=>{let X=await H8.api.getSession({headers:$.req.raw.headers});$.set("reportUser",X?.user?.id?{email:X.user.email}:void 0),await Z(),$.header("Cache-Control","private, no-store"),$.header("Vary","Cookie");return});RN.use("/link-token/*",ng$);RN.use("/suggest",ng$);RN.get("/site/:domain",async($)=>{let Z=$.req.param("domain").trim();if(!Z)return $.json({error:"domain is required"},400);let X=$.get("reportUser"),Q=$.req.query("key")?.trim()||void 0,Y=$.req.query("lang")?.trim()||void 0;try{let G=await lG6(Z,Q,Y);if($.header("Cache-Control","private, no-store"),X||!G.deck)return $.json(G);return $.json({...G,deck:{...G.deck,slides:G.deck.slides.slice(0,1)},truncated:G.status==="ready"})}catch{return $.json({error:"report read failed"},502)}});RN.post("/run",async($)=>{let Z=$.get("reportUser"),X;try{X=await $.req.json()}catch{return $.json({error:"invalid JSON"},400)}let Q=typeof X.domain==="string"?X.domain.trim():"";if(!Q)return $.json({error:"domain is required"},400);let Y=Z?.email,G=typeof X.distinctId==="string"&&X.distinctId.trim()&&X.distinctId.length<=200?X.distinctId.trim():void 0;try{let J=await $a("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${CL({})}`},body:JSON.stringify({url:Q,...Y?{email:Y}:{},distinct_id:G})});if(!J.ok)return $.json({error:`run HTTP ${J.status}`},502);let W=await J.json(),K=W.blocked?{state:"blocked"}:W.status==="fresh"?{state:"fresh"}:W.mode==="sync"?{state:"sync"}:{state:"running",id:W.id??null};return $.json(K)}catch{return $.json({error:"run failed"},502)}});RN.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let X=await $a(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${CL({})}`}});if(!X.ok)return $.json({error:`status HTTP ${X.status}`},502);let Y=(await X.json()).status??"unknown",G={done:dG6.has(Y),status:Y};return $.json(G)}catch{return $.json({error:"status failed"},502)}});RN.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let X=await $a(`/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)}});RN.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let X=await $a(`/api/v2/public/suggest?q=${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(!X.ok)return $.json({suggestions:[]});let Q=await X.json();return $.json({suggestions:Array.isArray(Q.suggestions)?Q.suggestions:[]})}catch{return $.json({suggestions:[]})}});tg$=RN});import{createHmac as mG6,timingSafeEqual as iG6}from"crypto";function ag$($,Z,X,Q=Date.now()){if(!Z||!X)return!1;let Y,G=[];for(let H of Z.split(",")){let F=H.indexOf("=");if(F<=0)continue;let N=H.slice(0,F).trim(),U=H.slice(F+1).trim();if(N==="t")Y=U;else if(N==="v1")G.push(U)}if(!Y||G.length===0)return!1;let J=Number(Y);if(!Number.isFinite(J)||Math.abs(Q/1000-J)>pG6)return!1;let W=mG6("sha256",X).update(`${Y}.${$}`).digest("hex"),K=Buffer.from(W,"hex");return G.some((H)=>{let F=Buffer.from(H,"hex");return K.length===F.length&&iG6(K,F)})}function sg$($){let Z;try{Z=JSON.parse($)}catch{return null}let X=zJ(Z),Q=zJ(zJ(X?.data)?.object);if(!X||typeof X.type!=="string"||!Q)return null;return{id:QH(X.id),type:X.type,created:typeof X.created==="number"?X.created:void 0,livemode:typeof X.livemode==="boolean"?X.livemode:void 0,data:{object:Q}}}function eg$($){switch($){case"active":case"trialing":return"active";case"past_due":return"past_due";default:return"canceled"}}function QH($){return typeof $==="string"?$:void 0}function zJ($){return typeof $==="object"&&$!==null?$:void 0}function lP0($){return typeof $==="number"?new Date($*1000):null}function A91($){return QH($)??QH(zJ($)?.id)}function nG6($){return A91($.subscription)??QH(zJ(zJ($.parent)?.subscription_details)?.subscription)}function tG6($){let Z=lP0($.current_period_end);if(Z)return Z;let X=zJ($.items)?.data;if(!Array.isArray(X))return null;let Q=0;for(let Y of X){let G=zJ(Y)?.current_period_end;if(typeof G==="number"&&G>Q)Q=G}return Q>0?new Date(Q*1000):null}function z91($,Z){let X=lP0($.created);return!!X&&!!Z.lastStripeEventAt&&X<Z.lastStripeEventAt}function P91($,Z){let X=lP0($.created);if(!X)return;return Z.lastStripeEventAt&&Z.lastStripeEventAt>X?void 0:X}async function oG6($,Z){let X=Z.data.object;switch(Z.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":{let Q=QH(zJ(X.metadata)?.orgId);if(!Q)return{handled:!1,reason:"no orgId"};if(QH(zJ(X.metadata)?.kind)==="topup"){if(X.mode!=="payment")return{handled:!1,reason:"topup with wrong mode"};if(QH(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let J=QH(X.id);if(!J)return console.error("stripe webhook: topup session without id",{eventId:Z.id,organizationId:Q}),{handled:!1,reason:"topup session without id"};let W=Number(zJ(X.metadata)?.creditCents);if(!Number.isInteger(W)||W<=0)return console.error("stripe webhook: paid topup with bad metadata \u2014 credit NOT applied",{eventId:Z.id,organizationId:Q,creditCents:zJ(X.metadata)?.creditCents}),{handled:!1,reason:"bad topup metadata"};return{handled:!0,organizationId:Q,topUp:{creditCents:W,referenceId:`stripe-topup:${J}`}}}if(X.mode!=="subscription")return{handled:!1,reason:"not a subscription checkout"};if(QH(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let Y=await $.getBilling(Q);if(!Y)return{handled:!1,reason:"unknown org"};let G=A91(X.subscription);if(Y.stripeSubscriptionId&&G&&Y.stripeSubscriptionId!==G)return console.error("stripe webhook: refused checkout rebind",{organizationId:Q,eventId:Z.id}),{handled:!1,reason:"org already bound to another subscription",orphanSubscriptionId:G};if(z91(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Q,{stripeCustomerId:A91(X.customer),stripeSubscriptionId:G,status:"active",lastStripeEventAt:P91(Z,Y)}),{handled:!0,organizationId:Q}}case"customer.subscription.updated":case"customer.subscription.deleted":{let Q=QH(X.id);if(!Q)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(Q);if(!Y)return{handled:!1,reason:"unknown subscription"};let G=Z.type==="customer.subscription.deleted";if(!G&&z91(Z,Y))return{handled:!1,reason:"stale event"};let J=G?"canceled":eg$(X.status);return await $.updateStripeState(Y.organizationId,{status:J,currentPeriodEnd:tG6(X),...G&&{stripeSubscriptionId:null},lastStripeEventAt:P91(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}case"invoice.paid":{let Q=nG6(X);if(!Q)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(Q);if(!Y)return{handled:!1,reason:"unknown subscription"};if(z91(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Y.organizationId,{status:"active",currentPeriodEnd:lP0(X.period_end),lastStripeEventAt:P91(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}default:return{handled:!1,reason:`unhandled event ${Z.type}`}}}function rG6($,Z){if(!Z.handled||$.livemode===!1)return null;let X=$.data.object;if(Z.topUp)return{name:"credits_topup_succeeded",organizationId:Z.organizationId,properties:{credit_cents:Z.topUp.creditCents}};switch($.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":return{name:"subscription_started",organizationId:Z.organizationId,properties:{}};case"customer.subscription.deleted":return{name:"subscription_canceled",organizationId:Z.organizationId,properties:{}};case"customer.subscription.updated":return{name:"subscription_updated",organizationId:Z.organizationId,properties:{status:eg$(X.status),...typeof X.cancel_at_period_end==="boolean"?{cancel_at_period_end:X.cancel_at_period_end}:{}}};case"invoice.paid":if(X.billing_reason==="subscription_create")return null;return{name:"subscription_renewed",organizationId:Z.organizationId,properties:{}};default:return null}}function rg$($,Z){let X=rG6($,Z);if(!X)return;MY({event:X.name,organizationId:X.organizationId,...$.id?{uuid:Pi1(`stripe:${$.id}:${X.name}`)}:{},...$.created?{timestamp:new Date($.created*1000)}:{},properties:X.properties})}async function $h$($){let Z=new mW(p8().db),X=await oG6(Z,$);if(!(X.handled&&X.topUp))rg$($,X);if(X.handled&&X.topUp)await sB$({organizationId:X.organizationId,amountCents:X.topUp.creditCents,referenceId:X.topUp.referenceId}),rg$($,X);if(!X.handled&&X.orphanSubscriptionId)try{await fa1(X.orphanSubscriptionId),console.error("stripe webhook: canceled orphan subscription",{subscriptionId:X.orphanSubscriptionId,eventId:$.id})}catch(Q){if(!(Q instanceof fY&&(Q.status===400||Q.status===404)))throw Q}return X}var pG6=300;var Zh$=w(()=>{fG();M4();X60();cL();fs0()});var aG6=1048576,T91;var Xh$=w(()=>{w8();ON();T$();Zh$();T91=new F1;T91.post("/webhook",q9({maxSize:aG6,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=b0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let X=await $.req.text();if(!ag$(X,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let Y=sg$(X);if(!Y)return $.json({error:"invalid payload"},400);let G=await $h$(Y);return console.log("stripe webhook",{eventId:Y.id,type:Y.type,livemode:Y.livemode,...G}),$.json({received:!0})})});import{timingSafeEqual as sG6}from"crypto";function $J6($,Z,X){if(!Z?.startsWith("sha256="))return!1;let Q=new Bun.CryptoHasher("sha256",X).update($).digest("hex"),Y=Z.slice(7);if(Y.length!==Q.length)return!1;return sG6(Buffer.from(Y),Buffer.from(Q))}var eG6=5242880,R91;var Qh$=w(()=>{w8();ON();kp();R91=new F1;R91.post("/webhook",q9({maxSize:eG6,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=process.env.GITHUB_WEBHOOK_SECRET;if(!Z)return $.json({error:"github webhook not configured"},503);let X=await $.req.text();if(!$J6(X,$.req.header("x-hub-signature-256"),Z))return $.json({error:"invalid signature"},400);if($.req.header("x-github-event")!=="push")return $.json({ok:!0,ignored:"event"});let Q;try{Q=JSON.parse(X)}catch{return $.json({error:"invalid payload"},400)}let Y=Q.ref,G=Q.repository?.full_name;if(!Y||!G)return $.json({ok:!0,ignored:"shape"});let W=(await oi0())?.markTenantPoolsDirty(G,Y)??[];return $.json({ok:!0,pools:W})})});function Yh$($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var Gh$,ZJ6,XJ6,Jh$;var Wh$=w(()=>{w8();W3();jy();Dx();Gh$=new F1,ZJ6=["range","if-none-match","if-modified-since"],XJ6=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];Gh$.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),X=Z.organization?.id;if(!Z.auth?.user?.id){if(Ah($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new $$(401,{message:"Authentication required"})}if(!X)throw new $$(401,{message:"Organization context required"});let Q=$.req.path.replace(/^.*\/files\//,"");if(!Q)throw new $$(400,{message:"Missing file key"});let Y=await Yn(Q,Z);if(!Y)throw new $$(503,{message:"Object storage not configured"});if(Y.startsWith("data:")&&U3()){let K=Y.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new $$(500,{message:"Invalid data URL from storage"});let[,H,F]=K,N=Buffer.from(F,"base64"),U=new Headers({"Content-Type":H,"Cache-Control":"private, max-age=86400"});return Yh$(U,H),new Response(N,{status:200,headers:U})}let G=new Headers;for(let K of ZJ6){let H=$.req.header(K);if(H)G.set(K,H)}let J=await fetch(Y,{headers:G});if(J.status===403||J.status===404)throw new $$(404,{message:"File not found"});if(!J.ok&&J.status!==304&&J.status!==416)throw console.error(`[files] upstream storage error ${J.status} for key:`,Q),new $$(502,{message:"Upstream storage error"});let W=new Headers;for(let K of XJ6){let H=J.headers.get(K);if(H)W.set(K,H)}return W.set("Cache-Control","private, max-age=86400"),Yh$(W,W.get("content-type")??""),new Response(J.body,{status:J.status,headers:W})});Jh$=Gh$});var Za=_((C_)=>{var QJ6=C_&&C_.__createBinding||(Object.create?function($,Z,X,Q){if(Q===void 0)Q=X;var Y=Object.getOwnPropertyDescriptor(Z,X);if(!Y||("get"in Y?!Z.__esModule:Y.writable||Y.configurable))Y={enumerable:!0,get:function(){return Z[X]}};Object.defineProperty($,Q,Y)}:function($,Z,X,Q){if(Q===void 0)Q=X;$[Q]=Z[X]}),YJ6=C_&&C_.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))QJ6(Z,$,X)};Object.defineProperty(C_,"__esModule",{value:!0});YJ6(FY(),C_)});var Fh$=_((Kh$)=>{Object.defineProperty(Kh$,"__esModule",{value:!0});Kh$.version=void 0;Kh$.version="3.4.0"});var Oh$=_((YH)=>{var GJ6=YH&&YH.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(YH,"__esModule",{value:!0});YH.NodeTransport=YH.VERSION=void 0;YH.nodeResolveHost=NJ6;var t6=Za(),JJ6=z0("net"),I91=z0("tls"),WJ6=z0("path"),Nh$=z0("fs"),KJ6=GJ6(z0("dns")),HJ6=Fh$();YH.VERSION=HJ6.version;var FJ6="nats.js";class Uh${socket;version;lang;yields=[];signal=(0,t6.deferred)();closedNotification=(0,t6.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=FJ6,this.version=YH.VERSION}async connect($,Z){this.tlsName=$.tlsName,this.options=Z;let{tls:X}=this.options,{handshakeFirst:Q}=X||{};try{if(Q===!0)this.socket=await this.tlsFirst($);else this.socket=await this.dial($);if(this.done)this.socket?.destroy();let Y=await this.peekInfo();(0,t6.checkOptions)(Y,Z);let{tls_required:G,tls_available:J}=Y,W=J===!0&&Z.tls!==null;if(!Q&&(G||W))this.socket=await this.startTLS();if(this.done)this.socket?.destroy();if(G&&this.socket.encrypted!==!0)throw t6.errors.InvalidArgumentError.format("tls","is not available on this server");return this.connected=!0,this.setupHandlers(),this.signal.resolve(),Promise.resolve()}catch(Y){let G=Y;if(!G)G=new t6.errors.ConnectionError("error connecting - node provided an undefined error");let{code:J}=G,W=J==="ECONNREFUSED"?new t6.errors.ConnectionError("connection refused",{cause:G}):G;throw this.socket?.destroy(),W}}dial($){let Z=(0,t6.deferred)(),X,Q=(0,JJ6.createConnection)($.port,$.hostname,()=>{Z.resolve(Q),Q.removeAllListeners()});return Q.on("error",(Y)=>{X=Y}),Q.on("close",()=>{Q.removeAllListeners(),Z.reject(X)}),Q.setNoDelay(!0),Z}get isClosed(){return this.done}close($){return this._closed($,!1)}peekInfo(){let $=(0,t6.deferred)(),Z;return this.socket.on("data",(X)=>{this.yields.push(X);let Q=t6.DataBuffer.concat(...this.yields),Y=(0,t6.extractProtocolMessage)(Q);if(Y!=="")try{let G=t6.INFO.exec(Y);if(!G)throw Error("unexpected response from server");let J=JSON.parse(G[1]);$.resolve(J)}catch(G){$.reject(G)}finally{this.socket.removeAllListeners()}}),this.socket.on("error",(X)=>{Z=X}),this.socket.on("close",()=>{this.socket.removeAllListeners(),$.reject(Z)}),$}loadFile($){if(!$)return Promise.resolve();let Z=(0,t6.deferred)();try{if($=(0,WJ6.resolve)($),!(0,Nh$.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,Nh$.readFile)($,(X,Q)=>{if(X)return Z.reject(X);Z.resolve(Q)})}catch(X){Z.reject(X)}return Z}async loadClientCerts(){let $={},{certFile:Z,cert:X,caFile:Q,ca:Y,keyFile:G,key:J}=this.options.tls;try{if(Z){let W=await this.loadFile(Z);if(W)$.cert=W}else if(X)$.cert=X;if(G){let W=await this.loadFile(G);if(W)$.key=W}else if(J)$.key=J;if(Q){let W=await this.loadFile(Q);if(W)$.ca=[W]}else if(Y)$.ca=Y;return Promise.resolve($)}catch(W){return Promise.reject(W)}}async tlsFirst($){let Z,X={servername:this.tlsName,rejectUnauthorized:!0};if(this.socket)X.socket=this.socket;if(typeof this.options.tls==="object")try{let Y=await this.loadClientCerts()||{};X=(0,t6.extend)(X,this.options.tls,Y)}catch(Y){return Promise.reject(new t6.errors.ConnectionError(Y.message,{cause:Y}))}let Q=(0,t6.deferred)();try{let Y=(0,I91.connect)($.port,$.hostname,X,()=>{Y.removeAllListeners(),Q.resolve(Y)});Y.on("error",(G)=>{Z=G}),Y.on("secureConnect",()=>{if(X.rejectUnauthorized===!1)return;if(!Y.authorized)throw Y.authorizationError}),Y.on("close",()=>{Q.reject(Z),Y.removeAllListeners()}),Y.setNoDelay(!0)}catch(Y){Q.reject(new t6.errors.ConnectionError(Y.message,{cause:Y}))}return Q}async startTLS(){let $,Z={socket:this.socket,servername:this.tlsName,rejectUnauthorized:!0};if(typeof this.options.tls==="object")try{let Q=await this.loadClientCerts()||{};Z=(0,t6.extend)(Z,this.options.tls,Q)}catch(Q){return Promise.reject(new t6.errors.ConnectionError(Q.message,{cause:Q}))}let X=(0,t6.deferred)();try{let Q=(0,I91.connect)(Z,()=>{Q.removeAllListeners(),X.resolve(Q)});Q.on("error",(Y)=>{$=Y}),Q.on("secureConnect",()=>{if(Z.rejectUnauthorized===!1)return;if(!Q.authorized)throw Q.authorizationError}),Q.on("close",()=>{X.reject($),Q.removeAllListeners()})}catch(Q){X.reject(new t6.errors.ConnectionError(Q.message,{cause:Q}))}return X}setupHandlers(){let $;this.socket.on("data",(Z)=>{return this.yields.push(Z),this.signal.resolve()}),this.socket.on("error",(Z)=>{$=Z}),this.socket.on("end",()=>{if(this.socket?.destroyed)return;this.socket?.write(new Uint8Array(0),()=>{this.socket?.end()})}),this.socket.on("close",()=>{this._closed($,!1)})}[Symbol.asyncIterator](){return this.iterate()}async*iterate(){while(!0){if(this.yields.length===0)await this.signal;let $=this.yields;this.yields=[];for(let Z=0;Z<$.length;Z++){if(this.options.debug)console.info(`> ${(0,t6.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,t6.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 I91.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,t6.render)($)}`);let Z=(0,t6.deferred)();try{this.socket.write($,(X)=>{if(X){if(this.options.debug)console.error(`!!! ${(0,t6.render)($)}: ${X}`);return Z.reject(X)}return Z.resolve()})}catch(X){if(this.options.debug)console.error(`!!! ${(0,t6.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}}YH.NodeTransport=Uh$;function NJ6($){let Z=(0,t6.deferred)();return KJ6.default.lookup($,{all:!0},(X,Q)=>{if(X){Z.reject(X);return}let Y=[];for(let G of Q)Y.push(G.address);if(Y.length===0)Y.push($);Z.resolve(Y)}),Z}});var Eh$=_((Lh$)=>{Object.defineProperty(Lh$,"__esModule",{value:!0});Lh$.connect=UJ6;var Bh$=Oh$(),wh$=Za(),Dh$=Za();function UJ6($={}){if((0,Dh$.hasWsProtocol)($))return Promise.reject(Dh$.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,wh$.setTransportFactory)({factory:()=>{return new Bh$.NodeTransport},dnsResolveFn:Bh$.nodeResolveHost}),wh$.NatsConnectionImpl.connect($)}});var jh$=_((IN)=>{var BJ6=IN&&IN.__createBinding||(Object.create?function($,Z,X,Q){if(Q===void 0)Q=X;var Y=Object.getOwnPropertyDescriptor(Z,X);if(!Y||("get"in Y?!Z.__esModule:Y.writable||Y.configurable))Y={enumerable:!0,get:function(){return Z[X]}};Object.defineProperty($,Q,Y)}:function($,Z,X,Q){if(Q===void 0)Q=X;$[Q]=Z[X]}),wJ6=IN&&IN.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))BJ6(Z,$,X)};Object.defineProperty(IN,"__esModule",{value:!0});IN.connect=void 0;var DJ6=Eh$();Object.defineProperty(IN,"connect",{enumerable:!0,get:function(){return DJ6.connect}});wJ6(Za(),IN)});function Th$($){let Z=$?.connectFn??zJ6,X=null,Q=null,Y=!1,G=!1,J=!1,W=[];function K(){return X!==null&&!X.isClosed()&&!X.isDraining()&&!J}function H(){console.log(`[NatsProvider] fireReady: ${W.length} callbacks`);for(let U of W)try{U()}catch{}}function F(U){(async()=>{for await(let O of U.status())if(O.type==="disconnect")console.log("[NatsProvider] Disconnected"),J=!0;else if(O.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),J=!1,Q=null,H()})().catch(()=>{})}async function N(U,O){let B=0;while(!G)try{X=await Z({servers:U,timeout:jJ6,reconnect:!0,maxReconnectAttempts:-1,...O?{authenticator:O}:{}}),console.log(`[NatsProvider] Connected to ${X.getServer()} after ${B} attempt(s)`),Q=null,J=!1,F(X),H();return}catch{B++;let D=pZ(EJ6,LJ6,B-1,2,0.5);await q$(D)}}return{init(U,O){if(Y)return;Y=!0,G=!1;let B=O?.creds?zh$.credsAuthenticator(new TextEncoder().encode(O.creds)):void 0;N(U,B).catch(()=>{})},isConnected(){return K()},getConnection(){return K()?X:null},getJetStream(){if(!K())return null;if(!Q)Q=Ah$.jetstream(X);return Q},onReady(U){if(W.push(U),K())try{U()}catch{}},async drain(){if(G=!0,Y=!1,Q=null,J=!1,X){let U=X;X=null,await U.drain().catch(()=>{})}}}}function zJ6($){return Ph$.connect($)}var zh$,Ph$,Ah$,LJ6=100,EJ6=3000,jJ6=3000;var Rh$=w(()=>{u4();zh$=V(ju(),1),Ph$=V(jh$(),1),Ah$=V(fw(),1)});function q91($,Z){return`${$}.${Z}`}class M91{cache;constructor($){this.cache=Hh({ttlMs:$?.ttlMs??PJ6,maxSize:$?.maxSize??AJ6})}async get($,Z){return this.cache.get(q91($,Z))??null}async set($,Z,X){this.cache.set(q91($,Z),X)}async invalidate($,Z){this.cache.delete(q91($,Z))}teardown(){this.cache.clear()}}var PJ6=600000,AJ6=5000;var Ih$=()=>{};function dP0($,Z){return`${$}:${Z}`}function k91($){let Z=Hh({ttlMs:$?.ttlMs??TJ6,maxSize:$?.maxSize??RJ6}),X=$?.getConnection,Q=crypto.randomUUID(),Y=new TextEncoder,G=new TextDecoder,J=null;function W(K,H){let F=X?.();if(!F)return;try{F.publish(qh$,Y.encode(JSON.stringify({organizationId:K,keyId:H,originId:Q})))}catch(N){console.warn("[ProviderKeyCache] Publish failed (non-critical):",N)}}return{get(K,H){return Z.get(dP0(K,H))},set(K,H,F){Z.set(dP0(K,H),F)},invalidate(K,H){Z.delete(dP0(K,H)),W(K,H)},start(){if(J)return;let K=X?.();if(!K)return;J=K.subscribe(qh$),(async()=>{for await(let H of J)try{let F=JSON.parse(G.decode(H.data));if(F.originId===Q)continue;Z.delete(dP0(F.organizationId,F.keyId))}catch{}})().catch(console.error)},teardown(){J?.unsubscribe(),J=null,Z.clear()}}}var qh$="studio.ai-provider-keys.invalidate",TJ6=30000,RJ6=5000;var Mh$=()=>{};class V91{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=kh$.map((Q)=>Z.subscribe(Q));for(let Q of this.subscriptions)(async()=>{for await(let Y of Q)try{let G=JSON.parse(X.decode(Y.data));if(G.originId===this.originId)continue;if(G.messageId&&this.hasSeen(G.messageId))continue;this.onCancel?.(G.taskId)}catch{}})().catch(console.error)}broadcast($){if(/[.*>\s]/.test($)){console.warn("[NatsCancelBroadcast] Invalid threadId, skipping broadcast");return}this.onCancel?.($);try{let Z=this.options.getConnection();if(!Z)return;let X=this.encoder.encode(JSON.stringify({taskId:$,originId:this.originId,messageId:crypto.randomUUID()}));for(let Q of kh$)Z.publish(Q,X)}catch(Z){console.warn("[NatsCancelBroadcast] Publish failed (non-critical):",Z)}}publishControlFrame($,Z){}async stop(){for(let $ of this.subscriptions)$.unsubscribe();this.subscriptions=[],this.seenMessageIds.clear(),this.onCancel=null}hasSeen($){if(this.seenMessageIds.has($))return!0;if(this.seenMessageIds.add($),this.seenMessageIds.size>1000){let Z=this.seenMessageIds.values().next().value;if(Z)this.seenMessageIds.delete(Z)}return!1}}var kh$;var Vh$=w(()=>{kh$=["studio.decopilot.cancel","mesh.decopilot.cancel"]});var Sh$=($)=>{let Z;return()=>Z??=$()},S91,C91;var Ch$=w(()=>{b6();S91=Sh$(()=>S$.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),C91=Sh$(()=>S$.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function CJ6(){return{name:dF,subjects:[`${Fw0}.>`],storage:GW.StorageType.File,max_age:MJ6,max_bytes:VJ6,max_msgs_per_subject:SJ6,discard:GW.DiscardPolicy.Old,retention:GW.RetentionPolicy.Limits,duplicate_window:kJ6,num_replicas:1}}class fh${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 _h$($){let Z=vh$.headers();for(let[X,Q]of Object.entries($))Z.set(X,Q);return Z}function bJ6($,Z){let X=0;return{publish(Q,Y,G,J){Q.publish(Y,G,J?{headers:J}:void 0).catch((W)=>{if(X++,qJ6().add(1,{"org.id":Z??"unknown"}),X===1||X%100===0)console.warn(`[Decopilot] JetStream publish failed for thread ${$} (${X} total):`,W)})},get errorCount(){return X}}}function xJ6($){if(!($ instanceof Error))return!1;if($.name==="TimeoutError")return!0;return/timeout|no responders|503/i.test($.message)}class _91{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=CJ6(),X=await F9(async()=>{let Q=this.options.getJetStreamManager?await this.options.getJetStreamManager():await GW.jetstreamManager($);try{await Q.streams.info(dF),await Q.streams.update(dF,Z)}catch(Y){if(Y instanceof Error&&Y.message.includes("stream not found"))await Q.streams.add(Z);else if(Y instanceof Error&&/can ?not change.*storage|storage type/i.test(Y.message))await Q.streams.delete(dF),await Q.streams.add(Z);else throw Y}return Q},{maxAttempts:5,minTimeout:250,maxTimeout:4000,jitter:0.5,isRetriable:xJ6});this.js=this.options.getJetStream(),this.jsm=X,console.log(`[Decopilot] StreamBuffer.init ${this.js?"ready":"degraded (js=null)"}`)}pump($,Z,X,Q){let Y=this.js;if(!Y)return console.warn(`[Decopilot] pump: JetStream client unavailable for thread ${Z}; chunks NOT published to NATS`),Promise.resolve();let G=bJ6(Z,Q),J=!1,W=()=>{if(J)return;J=!0;let H=SH$(Z);Y.publish(H.subject,H.data).catch(()=>{})};X.addEventListener("abort",W,{once:!0});let K=(H)=>{let F=performance.now(),N=Ct0(H,{runId:Z}),U=performance.now()-F;if(S91().record(U),C91().add(1,{"org.id":Q??"unknown"}),fJ6?.record(U,N.reduce((O,B)=>O+B.data.length,0)),N.length===0){console.warn(`[Decopilot] dropping oversized stream chunk for thread ${Z}`);return}for(let O of N)G.publish(Y,O.subject,O.data,O.headers?_h$(O.headers):void 0)};return(async()=>{let H=$.getReader(),F=0,N=0,U;try{while(!0){let{done:O,value:B}=await H.read();if(O)break;if(K(B),N++,++F>=64)F=0,await new Promise((D)=>setImmediate(D))}}catch(O){U=O,console.warn(`[Decopilot] stream pump error for thread ${Z}:`,O?.message??O)}finally{if(H.releaseLock(),W(),vJ6)console.warn(JSON.stringify({msg:"decopilot-stream-diag",event:"pump-done",taskId:Z,publishedChunks:N,publishErrors:G.errorCount}))}if(U!==void 0)throw U})()}async publishRawChunk($,Z,X){let Q=this.js;if(!Q)return!1;let Y=performance.now(),G=Ct0(Z,{runId:$,dedup:X});if(S91().record(performance.now()-Y),C91().add(1),G.length===0)return console.warn(`[Decopilot] dropping oversized raw chunk for thread ${$} (> MAX_CHUNKED_BYTES)`),!0;for(let J of G)await Q.publish(J.subject,J.data,{...J.headers?{headers:_h$(J.headers)}:{},...J.msgId?{msgID:J.msgId}:{}});return!0}async publishDone($,Z,X){let Q=this.js;if(!Q)return!1;let Y=VH$({runId:$,fenceToken:Z,finalSeq:X});return await Q.publish(Y.subject,Y.data,{msgID:Y.msgId}),!0}async createTailStream($,Z,X){let Q=this.js;if(!Q)return console.warn(`[Decopilot] createTailStream: JetStream client unavailable for thread ${$}; no live tail`),null;let Y=X?.deliverPolicy==="new"?GW.DeliverPolicy.New:GW.DeliverPolicy.All,G=X?.closeOnDone??!1,J=qB($),W;try{W=await(await Q.consumers.get(dF,{filter_subjects:J,deliver_policy:Y})).consume()}catch(D){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",D?.message??D),null}let F=ww0({messages:async function*(){try{for await(let D of W)yield{subject:D.subject,data:D.data,headers:D.headers}}finally{W.stop()}}(),onCancel:()=>W.stop()}).pipeThrough(Nw0()).pipeThrough(Uw0()).getReader(),N=!1,U=()=>{if(N)return;N=!0;try{F.releaseLock()}catch{}},O=!1,B=()=>{if(O)return;O=!0,W.stop(),F.cancel().catch(()=>{}),U()};return Z?.addEventListener("abort",B,{once:!0}),new ReadableStream({async pull(D){for(;;){let{done:L,value:E}=await F.read();if(L){B(),D.close();return}let j=E;if(j.kind==="done"){if(G){B(),D.close();return}continue}D.enqueue(j.chunk);return}},cancel(){B()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge(dF,{filter:qB($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var GW,vh$,IJ6=($)=>{let Z;return()=>Z??=$()},qJ6,MJ6=86400000000000,kJ6=120000000000,VJ6=4294967296,SJ6=500000,_J6,vJ6,fJ6;var bh$=w(()=>{u4();_t0();Dw0();Ow0();b6();Ch$();GW=V(fw(),1),vh$=V(ju(),1),qJ6=IJ6(()=>S$.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"}));_J6=process.env.STREAM_ENCODE_TRACE==="1",vJ6=process.env.DECOPILOT_STREAM_TRACE==="1";fJ6=_J6?new fh$:null});function mP0($,Z,X,Q){if(!Q)return!1;return $.emit(Z,MW(X,Q.status,{title:Q.title??void 0,virtualMcpId:Q.virtual_mcp_id??void 0,createdBy:Q.created_by??void 0,triggerId:Q.trigger_id??null,branch:Q.branch??null,harnessId:Q.harness_id??void 0,createdAt:Q.created_at,updatedAt:Q.updated_at})),!0}var xh$=w(()=>{U8()});class v91{storage;options;timer=null;constructor($,Z={}){this.storage=$;this.options=Z}start(){if(this.timer)return;let $=this.options.intervalMs??300000;this.timer=setInterval(()=>{this.runOnce()},$)}async runOnce(){let $=this.options.staleAfterMs??3600000;try{let Z=await this.storage.sweepAbandoned($);if(Z>0)console.log(`[async-research-sweeper] marked ${Z} stale jobs as abandoned`);return Z}catch(Z){return console.error("[async-research-sweeper] sweep failed",Z),0}}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}function dJ6($){return $ instanceof n7}function mJ6($,Z){return Z-$>=cJ6}class f91{taskBoard;contextFactory;billing;options;timer=null;running=!1;cursor=null;constructor($,Z,X,Q={}){this.taskBoard=$;this.contextFactory=Z;this.billing=X;this.options=Q}start(){if(this.timer)return;let $=this.options.intervalMs??yJ6;this.timer=setInterval(()=>{this.runOnce()},$),this.timer.unref()}async runOnce(){if(this.running)return 0;this.running=!0;let $=0;try{let Z=this.options.batchSize??hJ6,X=this.options.itemIntervalMs??gJ6,Q=new Date(Date.now()-X),Y=await this.taskBoard.listItemsPendingReview(Z,this.cursor,Q),G=Y.at(-1);this.cursor=Y.length===Z&&G?{updatedAt:G.updatedAt,id:G.id}:null;for(let{id:J,organizationId:W}of Y)try{if(await this.reconcileItem(J,W,Q))$++}catch(K){console.error(`[task-board-review-sweeper] ${J} failed`,K)}await this.reapNeverStartedThreads(Z),$+=await this.dispatchDueRetries(Z),await this.reactToUnhandledFailures(Z)}catch(Z){console.error("[task-board-review-sweeper] sweep failed",Z)}finally{this.running=!1}return $}async reapNeverStartedThreads($){try{let Z=await this.taskBoard.failNeverStartedLinkedThreads($,new Date(Date.now()-Tn0),Bo0);for(let X of Z)console.warn(`[task-board-review-sweeper] failed never-started thread ${X.threadId} on ${X.itemId}`)}catch(Z){console.error("[task-board-review-sweeper] reaping failed",Z)}}async reactToUnhandledFailures($){let Z=await this.taskBoard.listItemsStuckAfterFailure($,new Date(Date.now()-lJ6));for(let{id:X,organizationId:Q,threadId:Y}of Z)try{console.warn(`[task-board-review-sweeper] reacting to an unhandled failure on ${X}`),await $t0(this.taskBoard,Y,Q),await Zt0(this.taskBoard,this.billing,Y,Q)}catch(G){console.error(`[task-board-review-sweeper] unhandled-failure reaction for ${X} failed`,G)}}async dispatchDueRetries($){let Z=0,X=await this.taskBoard.listItemsDueForRetry($,new Date);for(let{id:Q,organizationId:Y,attempts:G}of X)try{if(!await this.taskBoard.claimDueRetry(Q,Y,new Date))continue;let J=await this.taskBoard.getById(Q,Y);if(!J||J.status!=="in_progress"||J.assigneeId!==n8)continue;let W=await this.contextFactory(Y,J.assignedBy??J.createdBy);if(!W)continue;await mF(W,J,{runClass:"retry"}),Z++,console.warn(`[task-board-review-sweeper] re-dispatched ${Q} after a failure (attempt ${G})`)}catch(J){if(console.error(`[task-board-review-sweeper] retry dispatch for ${Q} failed`,J),dJ6(J)){await this.returnToTodo(Q,Y,J instanceof Error?J.message:String(J));continue}await this.taskBoard.scheduleRunRetry(Q,Y,G,new Date(Date.now()+uJ6)).catch((W)=>console.error(`[task-board-review-sweeper] re-arming ${Q} failed`,W))}return Z}async returnToTodo($,Z,X){try{let Q=await this.taskBoard.getById($,Z);if(!Q||Q.status!=="in_progress")return;let Y=await this.taskBoard.returnToTodoAfterFailure($,Z,Q.updatedBy);if(!Y)return;await this.taskBoard.recordActivity({taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:"in_progress",to:"todo",reason:X}}).catch(()=>{}),A8(Z,Y)}catch(Q){console.error(`[task-board-review-sweeper] returning ${$} to todo failed`,Q)}}async handOffReviewWithoutPr($,Z){let X=await this.taskBoard.listActivity(Z.id,Z.organizationId);if(!mJ6(DF(X),Date.now()))return;await IK($,Z,"no pull request is linked to this task \u2014 there is nothing for a "+"reviewer to review")}async reconcileItem($,Z,X){if(!await this.taskBoard.claimSweep($,Z,X))return!1;let Q=await this.taskBoard.getById($,Z);if(!Q)return!1;if(Q.status!=="in_review")return!1;let Y=Q.assigneeId===n8,G=await this.taskBoard.listPrs($,Z),J=await this.contextFactory(Z,Q.assignedBy??Q.createdBy);if(!J)return!1;if(G.length===0){if(Y)await this.handOffReviewWithoutPr(J,Q);return!1}if(await lF$(J,Q))return!0;if(!Y)return!1;let W=await Promise.all(G.map(async(K)=>({...K,...await vy(Z,K)})));if(W.every((K)=>K.state===null))console.warn(`[task-board-review-sweeper] ${$}: no live PR state from GitHub (${W.length} PR(s)) \u2014 proceeding on unknown`);if(!Fo0(W))return!1;return await Aw0(J,Q,{previewMatchesHead:No0(W)}),!0}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}var yJ6=60000,gJ6=300000,hJ6=50,uJ6=60000,cJ6=900000,lJ6=120000;var yh$=w(()=>{L9();Xo0();uF();Rn();Y9();L3();wo0();MK();En()});import{readdir as iJ6,rm as iP0}from"fs/promises";import{join as pP0}from"path";async function nP0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-pJ6),Z.setUTCHours(0,0,0,0);let X=0;try{let Q=await __($);for(let Y of Q)if(/^\d{4}$/.test(Y))X+=await gh$($,Y,Z);else if(!Y.startsWith(".")){let G=pP0($,Y),J=await __(G);for(let K of J){if(!/^\d{4}$/.test(K))continue;X+=await gh$(G,K,Z)}if((await __(G)).length===0)await iP0(G,{recursive:!0,force:!0})}}catch(Q){console.warn("monitoring retention cleanup failed:",Q)}return X}async function gh$($,Z,X){let Q=0,Y=pP0($,Z),G=await __(Y);for(let W of G){if(!/^\d{2}$/.test(W))continue;let K=pP0(Y,W),H=await __(K);for(let N of H){if(!/^\d{2}$/.test(N))continue;let U=new Date(`${Z}-${W}-${N}T00:00:00Z`);if(isNaN(U.getTime()))continue;if(U<X){let O=pP0(K,N);await iP0(O,{recursive:!0,force:!0}),Q++}}if((await __(K)).length===0)await iP0(K,{recursive:!0,force:!0})}if((await __(Y)).length===0)await iP0(Y,{recursive:!0,force:!0});return Q}async function __($){try{return(await iJ6($)).filter((X)=>!X.startsWith("."))}catch{return[]}}var pJ6=30;var b91=()=>{};import{DBOS as x91,SchedulerMode as nJ6}from"@dbos-inc/dbos-sdk";async function oJ6(){let $=[IJ(),v_(),KH()],Z=0;for(let X of $)try{Z+=await nP0(X)}catch(Q){console.error("[monitoring-retention] cleanup failed:",Q)}return console.log(`[monitoring-retention] deleted ${Z} day-dir(s) across ${$.length} signal dir(s)`),{deleted:Z,dirs:$.length}}async function rJ6($,Z){await x91.runStep(()=>oJ6(),{name:"monitoringRetention"})}function uh$(){if(hh$)return;hh$=!0;let $=x91.registerWorkflow(rJ6,{name:"monitoringRetentionWorkflow"});x91.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:tJ6,mode:nJ6.ExactlyOncePerIntervalWhenActive})}var tJ6="23 4 * * *",hh$=!1;var ch$=w(()=>{JY();b91()});function lh$($){return async(Z,X)=>{let Q=await $.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["member.role","organization.id as orgId","organization.slug as orgSlug","organization.name as orgName"]).where("member.userId","=",X).where("member.organizationId","=",Z).executeTakeFirst();if(!Q)return console.warn(`[automationContextFactory] User ${X} not found in org ${Z} \u2014 returning null`),null;let Y=await sG.create();Y.auth.user={id:X,role:Q.role},Y.organization={id:Q.orgId,slug:Q.orgSlug,name:Q.orgName};let G=await x41($.db,Z,Q.role);return Y.boundAuth=b41({auth:Y.authInstance,headers:new Headers,role:Q.role,permissions:G,userId:X}),Y.access=new BL(X,void 0,Y.boundAuth,Q.role,"self"),PB(Y,{id:Q.orgId,slug:Q.orgSlug}),Y}}var dh$=w(()=>{wL();QC()});function aJ6(){return{services:[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}],migrationsStatus:"pending",serverUrl:null,logs:[]}}function eJ6(){for(let $ of sJ6)$()}function mh$($){let Z=[...y91.logs,$];y91={...y91,logs:Z.length>500?Z.slice(-500):Z},eJ6()}function g91(){return $36}var y91,sJ6,$36=!1;var h91=w(()=>{y91=aJ6(),sJ6=new Set});import{EventEmitter as Z36}from"events";var u91;var ih$=w(()=>{h91();u91=new Z36;u91.on("request",($)=>{mh$($)})});function ph$(){return async($,Z)=>{let X=Date.now(),Q=$.req.method,Y=$.req.path;if(Y==="/api/auth/get-session"||Y.includes("favicon")){await Z();return}let G="",J=!1;if(Y.startsWith("/mcp")&&Q==="POST"){J=!0;try{if($.req.header("Content-Type")?.includes("application/json")){let U=await $.req.raw.clone().json();if(U.method==="tools/call"&&U.params?.name){let O=oh(U.params.name),B=U.params.arguments||{},D=Object.keys(B).map((E)=>oh(E)),L=D.length>0?D.slice(0,3).join(",")+(D.length>3?"\u2026":""):"";G=`${Y5.tool}${O}${Y5.dim}(${L})${Y5.reset}`}else if(U.method)G=`${Y5.dim}${oh(U.method)}${Y5.reset}`}}catch{}}let W=oh(Y);if(Y.startsWith("/mcp/conn_")){let F=Y.split("/")[2]??"";W=`/mcp/${Y5.mcp}${oh(F.slice(0,12))}\u2026${Y5.reset}`}else if(Y==="/mcp")W=`${Y5.mcp}/mcp${Y5.reset}`;else if(Y==="/mcp/registry")W=`${Y5.mcp}/mcp/registry${Y5.reset}`;let K=Q36(Q),H=J?"\u25C0":"\u2190";if(!g91())console.log(`${Y5.dim}${H}${Y5.reset} ${K}${Q}${Y5.reset} ${W}${G?` ${G}`:""}`);try{await Z()}finally{let F=Date.now()-X,N=$.res.status,U=X36(N),O=F<1000?`${F}ms`:`${(F/1000).toFixed(1)}s`,B=J?"\u25B6":"\u2192";if(!g91())console.log(`${Y5.dim}${B}${Y5.reset} ${K}${Q}${Y5.reset} ${W}${G?` ${G}`:""} ${U}${N}${Y5.reset} ${Y5.duration}${O}${Y5.reset}`);u91.emit("request",{method:Q,path:oh(Y),status:N,duration:F,timestamp:new Date})}}}var Y5,X36=($)=>{if($>=500)return Y5.serverError;if($>=400)return Y5.clientError;if($>=300)return Y5.redirect;return Y5.ok},Q36=($)=>{return Y5[$]||Y5.reset},oh=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var nh$=w(()=>{h91();ih$();Y5={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 ah$}from"crypto";import{mkdir as Y36,readdir as G36,rm as th$,stat as sh$}from"fs/promises";import{join as l91,relative as J36}from"path";import{z as z$}from"zod";function $u$($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return l91(W36,Z)}function Zu$($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function c91($,Z){let X=$u$($),Q=Zu$(Z);return l91(X,Q)}function K36($,Z,X,Q){let Y=b0().encryptionKey||"dev-secret",G=`${$}:${Z}:${X}:${Q}`;return ah$("sha256",Y).update(G).digest("hex")}function rh$($,Z,X,Q,Y){let G=Math.floor(Date.now()/1000)+Q,J=K36(Z,X,G,Y),W=new URL(`/api/dev-assets/${Z}/${Zu$(X)}`,$);return W.searchParams.set("expires",G.toString()),W.searchParams.set("signature",J),W.searchParams.set("method",Y),W.toString()}function Xu$($,Z,X){let Q=`${$}:${Z.getTime()}:${X}`;return`"${ah$("md5","etag").update(Q).digest("hex")}"`}async function Qu$($,Z,X,Q,Y){try{let G=await G36($,{withFileTypes:!0});for(let J of G){let W=l91($,J.name),H=J36(Z,W).replace(/\\/g,"/");if(X&&!H.startsWith(X))continue;if(J.isDirectory())if(Q){let F=H+"/";if(!X||F.startsWith(X)){if(!(X?H.slice(X.length):H).includes("/"))Y.commonPrefixes.add(F)}}else await Qu$(W,Z,X,Q,Y);else if(J.isFile()){if(Q&&X){let F=H.slice(X.length);if(F.includes(Q)){let N=F.indexOf(Q),U=X+F.slice(0,N+1);Y.commonPrefixes.add(U);continue}}try{let F=await sh$(W);Y.objects.push({key:H,size:F.size,lastModified:F.mtime.toISOString(),etag:Xu$(W,F.mtime,F.size)})}catch{}}}}catch{}}function Yu$($,Z){let Q=t($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:z$.object({prefix:z$.string().optional(),maxKeys:z$.number().optional().default(1000),continuationToken:z$.string().optional(),delimiter:z$.string().optional()}),outputSchema:z$.object({objects:z$.array(z$.object({key:z$.string(),size:z$.number(),lastModified:z$.string(),etag:z$.string()})),nextContinuationToken:z$.string().optional(),isTruncated:z$.boolean(),commonPrefixes:z$.array(z$.string()).optional()}),handler:async(Y)=>{let G=Y,J=G.prefix||"",W=G.maxKeys??1000,K=G.delimiter,H=G.continuationToken,F=$u$(Q);await Y36(F,{recursive:!0});let N={objects:[],commonPrefixes:new Set};await Qu$(F,F,J,K,N),N.objects.sort((L,E)=>L.key.localeCompare(E.key));let U=0;if(H){if(U=N.objects.findIndex((L)=>L.key>H),U===-1)U=N.objects.length}let O=N.objects.slice(U,U+W),B=U+W<N.objects.length,D=B?O[O.length-1]?.key:void 0;return{objects:O,isTruncated:B,nextContinuationToken:D,commonPrefixes:Array.from(N.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:z$.object({key:z$.string()}),outputSchema:z$.object({contentType:z$.string().optional(),contentLength:z$.number(),lastModified:z$.string(),etag:z$.string(),metadata:z$.record(z$.string(),z$.string()).optional()}),handler:async(Y)=>{let G=Y,J=c91(Q,G.key),W=await sh$(J);return{contentType:P61(G.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:Xu$(J,W.mtime,W.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:z$.object({key:z$.string(),expiresIn:z$.number().optional()}),outputSchema:z$.object({url:z$.string(),expiresIn:z$.number()}),handler:async(Y)=>{let G=Y,J=G.expiresIn??oh$;return{url:rh$(Z,Q,G.key,J,"GET"),expiresIn:J}}},{name:"PUT_PRESIGNED_URL",description:"Generate a presigned URL for uploading a file to local storage",inputSchema:z$.object({key:z$.string(),expiresIn:z$.number().optional(),contentType:z$.string().optional()}),outputSchema:z$.object({url:z$.string(),expiresIn:z$.number()}),handler:async(Y)=>{let G=Y,J=G.expiresIn??oh$;return{url:rh$(Z,Q,G.key,J,"PUT"),expiresIn:J}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:z$.object({key:z$.string()}),outputSchema:z$.object({success:z$.boolean(),key:z$.string()}),handler:async(Y)=>{let G=Y,J=c91(Q,G.key);try{return await th$(J),{success:!0,key:G.key}}catch{return{success:!1,key:G.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:z$.object({keys:z$.array(z$.string()).max(1000)}),outputSchema:z$.object({deleted:z$.array(z$.string()),errors:z$.array(z$.object({key:z$.string(),message:z$.string()}))}),handler:async(Y)=>{let G=Y,J=[],W=[];return await Promise.all(G.keys.map(async(K)=>{let H=c91(Q,K);try{await th$(H),J.push(K)}catch(F){W.push({key:K,message:F instanceof Error?F.message:"Unknown error"})}})),{deleted:J,errors:W}}}]}async function d91($,Z,X){let Q=Yu$(Z,X),Y=new fW({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:H5});for(let J of Q){let W="shape"in J.inputSchema?J.inputSchema.shape:z$.object({}).shape,K=J.outputSchema&&"shape"in J.outputSchema?J.outputSchema.shape:z$.object({}).shape;Y.registerTool(J.name,{description:J.description??"",inputSchema:W,outputSchema:K,annotations:J.annotations,_meta:J._meta},async(H)=>{try{let F=await J.handler(H);return{content:[{type:"text",text:JSON.stringify(F)}],structuredContent:F}}catch(F){return{content:[{type:"text",text:`Error: ${F.message}`}],isError:!0}}})}let G=new sX({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await Y.connect(G),GJ(Y,G,$,"mcp:dev-assets")}async function Gu$($,Z,X,Q){let G=Yu$(X,Q).find((J)=>J.name===$);if(!G)return{content:[{type:"text",text:`Tool not found: ${$}`}],isError:!0};try{let J=await G.handler(Z);return{content:[{type:"text",text:JSON.stringify(J)}]}}catch(J){return{content:[{type:"text",text:J instanceof Error?J.message:String(J)}],isError:!0}}}var W36="./data/assets",oh$=3600,eh$,Ju$;var Wu$=w(()=>{T$();hy();w8();ll();BC();_X();cz0();eh$=new F1;eh$.all("/",async($)=>{let Z=$.get("studioContext"),X=new URL($.req.url),Q=`${X.protocol}//${X.host}`;return d91($.req.raw,Z,Q)});Ju$=eh$});var Ku$={};Y4(Ku$,{mountDevRoutes:()=>H36});function H36($,Z){$.all("/mcp/:connectionId{.*_dev-assets$}",Z,async(Q)=>{let Y=Q.get("studioContext"),G=new URL(Q.req.url),J=`${G.protocol}//${G.host}`;return d91(Q.req.raw,Y,J)}),$.all("/mcp/:connectionId{.*_dev-assets$}/call-tool/:toolName",Z,async(Q)=>{let Y=Q.get("studioContext"),G=new URL(Q.req.url),J=`${G.protocol}//${G.host}`,W=Q.req.param("toolName");if(!W)return Q.json({error:"Missing tool name"},400);let K=await Q.req.json(),H=await Gu$(W,K,Y,J);if(H.isError)return Q.json(H.content,500);return Q.json(H.content)}),$.use("/mcp/dev-assets",Z),$.route("/mcp/dev-assets",Ju$);let X=new F1;X.use("*",QW({mountPath:"/api/dev-assets"})),X.route("/",uz0({orgFromPath:!1})),$.route("/api/dev-assets",X)}var Hu$=w(()=>{w8();B61();cz0();Wu$()});import{sql as F36}from"kysely";import{randomUUID as Fu$}from"crypto";import{z as N36}from"zod";async function O36($){let Z=new Date().toISOString(),X=Fu$(),Q=l4.SELF($.organizationId),Y="registry.publish_request.created",G={requestId:$.request.id,requestedId:$.request.requested_id,title:$.request.title,status:$.request.status,createdAt:$.request.created_at,requester:{name:$.request.requester_name,email:$.request.requester_email}};await $.db.insertInto("events").values({id:X,organization_id:$.organizationId,type:"registry.publish_request.created",source:Q,specversion:"1.0",subject:$.request.id,time:Z,datacontenttype:"application/json",dataschema:null,data:JSON.stringify(G),cron:null,status:"pending",attempts:0,last_error:null,next_retry_at:null,created_at:Z,updated_at:Z}).execute();let J=await $.db.selectFrom("event_subscriptions").select(["id"]).where("organization_id","=",$.organizationId).where("enabled","=",1).where("event_type","=","registry.publish_request.created").where((W)=>W.or([W("publisher","is",null),W("publisher","=",Q)])).execute();if(J.length>0)await $.db.insertInto("event_deliveries").values(J.map((W)=>({id:Fu$(),event_id:X,subscription_id:W.id,status:"pending",attempts:0,last_error:null,delivered_at:null,next_retry_at:null,created_at:Z}))).execute();try{await F36`SELECT
2789
2789
  pg_notify('studio_events', ${X}),