decocms 4.182.11 → 4.183.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (224) hide show
  1. package/dist/client/assets/{AlertCircle-4T5dhPVC.js → AlertCircle-aHlHbnDb.js} +1 -1
  2. package/dist/client/assets/{AreaChart-rVA6_L_b.js → AreaChart-C9lpd8CL.js} +1 -1
  3. package/dist/client/assets/{ArrowUp-DuuiK3ou.js → ArrowUp-D_cT_UIc.js} +1 -1
  4. package/dist/client/assets/{ArrowUpRight-H9aG5R8d.js → ArrowUpRight-DiazbKfV.js} +1 -1
  5. package/dist/client/assets/{Check-DV41qQCZ.js → Check-DsLsfmyq.js} +1 -1
  6. package/dist/client/assets/{CheckCircle-cfI0IRxO.js → CheckCircle-BimqoBAV.js} +1 -1
  7. package/dist/client/assets/{ChevronDown-LRklqTCZ.js → ChevronDown-Gy6tdNNK.js} +1 -1
  8. package/dist/client/assets/{ChevronRight-D0-75ONs.js → ChevronRight-p52nlbDc.js} +1 -1
  9. package/dist/client/assets/{ChevronUp-hBciOqSP.js → ChevronUp-Beib2ITZ.js} +1 -1
  10. package/dist/client/assets/{Copy01-B84E1l4r.js → Copy01-B2ony-bk.js} +1 -1
  11. package/dist/client/assets/{CpuChip01-CWMarS5R.js → CpuChip01-CYFRGV0B.js} +1 -1
  12. package/dist/client/assets/{CreditCard01-CWPKn35r.js → CreditCard01-CzlEqb4G.js} +1 -1
  13. package/dist/client/assets/{DotsVertical-BRZ7SqU7.js → DotsVertical-DVq3-Xga.js} +1 -1
  14. package/dist/client/assets/{Eye-Dvl22oXz.js → Eye-ZlvbuHCY.js} +1 -1
  15. package/dist/client/assets/{FilterLines-thvAmmYS.js → FilterLines-DvNHcDU-.js} +1 -1
  16. package/dist/client/assets/{HardDrive-BdbtdNau.js → HardDrive-BbR87PFj.js} +1 -1
  17. package/dist/client/assets/{Key01-D1h6mWWx.js → Key01-x95Mn7re.js} +1 -1
  18. package/dist/client/assets/{LayoutLeft-BFm5EcdH.js → LayoutLeft-RBcOzvvA.js} +1 -1
  19. package/dist/client/assets/{LinkExternal01-DbC6e4CO.js → LinkExternal01-CEVoEXFf.js} +1 -1
  20. package/dist/client/assets/{LogOut01-MnG04HIb.js → LogOut01-DJmrA8Cf.js} +1 -1
  21. package/dist/client/assets/{Monitor01-DrUW0HYl.js → Monitor01-CQzjDQf4.js} +1 -1
  22. package/dist/client/assets/{Palette-CFGdKKVI.js → Palette-Dp2ItXNP.js} +1 -1
  23. package/dist/client/assets/{Play-Dso0XpJX.js → Play-D37hNiER.js} +1 -1
  24. package/dist/client/assets/{Plus-BOieVQpx.js → Plus-CYTAnozl.js} +1 -1
  25. package/dist/client/assets/{SearchLg-hqRFV8lc.js → SearchLg-Cx4jk9h6.js} +1 -1
  26. package/dist/client/assets/{SearchMd-C9ivQjrD.js → SearchMd-Bc7HkOwh.js} +1 -1
  27. package/dist/client/assets/{Settings02-xjTW_j0d.js → Settings02-DQ9TLzbe.js} +1 -1
  28. package/dist/client/assets/{Shield01-B8r00o1L.js → Shield01-0dWGhNPX.js} +1 -1
  29. package/dist/client/assets/{Star01-B6f_g5t9.js → Star01-D3YkMrr2.js} +1 -1
  30. package/dist/client/assets/{Stars01-DRG6gh2H.js → Stars01-Ch7SWtYI.js} +1 -1
  31. package/dist/client/assets/{Stars02-CE6kqQyW.js → Stars02-DEemClqG.js} +1 -1
  32. package/dist/client/assets/{Sun-DK9VJTt0.js → Sun-BDvHb-XG.js} +1 -1
  33. package/dist/client/assets/{SwitchHorizontal01-YUHYHaFA.js → SwitchHorizontal01-DGkeBrwY.js} +1 -1
  34. package/dist/client/assets/{Tool01-gbyOwgT1.js → Tool01-DCGn5a1p.js} +1 -1
  35. package/dist/client/assets/{Tool02-Dz_Du0eI.js → Tool02-u405-St7.js} +1 -1
  36. package/dist/client/assets/{Trash01-Dz7-G1X7.js → Trash01-CuJXZ9ct.js} +1 -1
  37. package/dist/client/assets/{TrendUp01-BO2bdJvu.js → TrendUp01-B7LNIgea.js} +1 -1
  38. package/dist/client/assets/{Upload01-CJlYU_hH.js → Upload01-Bt-Amwu8.js} +1 -1
  39. package/dist/client/assets/{User01-D7dvbQcO.js → User01-DhhpGrEM.js} +1 -1
  40. package/dist/client/assets/{Users01-DOgNXaWY.js → Users01-BClCd9pB.js} +1 -1
  41. package/dist/client/assets/{Users03-RHYREmhF.js → Users03-zwY1jsVI.js} +1 -1
  42. package/dist/client/assets/{X-B5OZ1P1M.js → X-BzjpT-15.js} +1 -1
  43. package/dist/client/assets/{XCircle-C7FYHuAe.js → XCircle-Kc6c0cNF.js} +1 -1
  44. package/dist/client/assets/{XClose-7rKXUrvj.js → XClose-Dj2IAH6X.js} +1 -1
  45. package/dist/client/assets/{Zap-CBOIOKOj.js → Zap-BPtJMphd.js} +1 -1
  46. package/dist/client/assets/{ZapSquare-DVsHsuHi.js → ZapSquare-BqYG4BTa.js} +1 -1
  47. package/dist/client/assets/{access-gate-hEziYoT_.js → access-gate-DeGo_FW7.js} +1 -1
  48. package/dist/client/assets/{add-section-modal-BCNeGvb2.js → add-section-modal-C8k7f243.js} +1 -1
  49. package/dist/client/assets/{agent-icon-D0Bfih1T.js → agent-icon-BWGWhQlT.js} +1 -1
  50. package/dist/client/assets/{agents-list-CtKBjVwF.js → agents-list-C_S5EB33.js} +1 -1
  51. package/dist/client/assets/{ai-providers-DcuIcKKE.js → ai-providers-BsPG_oo0.js} +1 -1
  52. package/dist/client/assets/{alert-eSNrz7fH.js → alert-ZpmpvnWA.js} +1 -1
  53. package/dist/client/assets/{alert-dialog-CA-geTwD.js → alert-dialog-CXphytq4.js} +1 -1
  54. package/dist/client/assets/{app-editor-trM4u8f1.js → app-editor-Cdig6lrQ.js} +1 -1
  55. package/dist/client/assets/{auth-NDJPKSl9.js → auth--o3OMG5b.js} +1 -1
  56. package/dist/client/assets/{auth-catchall-BaN3NXgb.js → auth-catchall-CUj_T4PL.js} +1 -1
  57. package/dist/client/assets/{auth-entry-C-cYIE7O.js → auth-entry-kHRdwDyb.js} +1 -1
  58. package/dist/client/assets/{auth-split-layout-DrxFdZO2.js → auth-split-layout-BI6iKy4H.js} +1 -1
  59. package/dist/client/assets/{authenticate-and-persist-oauth-CVJ09JzN.js → authenticate-and-persist-oauth-Dkxj-fDE.js} +1 -1
  60. package/dist/client/assets/{automation-list-row-Yuke0OMC.js → automation-list-row-C9ge79g9.js} +1 -1
  61. package/dist/client/assets/{automation-runs-BoBKRqsz.js → automation-runs-Zy_KQAaa.js} +1 -1
  62. package/dist/client/assets/{automations-DyNYqAb1.js → automations-ZoE5nu4n.js} +1 -1
  63. package/dist/client/assets/{avatar-DNpxAGcL.js → avatar-D8IHFMGF.js} +1 -1
  64. package/dist/client/assets/{badge-ltIZGTKi.js → badge-BqrqB_uj.js} +1 -1
  65. package/dist/client/assets/{billing-BLgnNaqy.js → billing-DDGDj7E3.js} +1 -1
  66. package/dist/client/assets/{block-document-B8BE5_VV.js → block-document-B7Gp0qyP.js} +1 -1
  67. package/dist/client/assets/{brand-context-Ci4P1S5y.js → brand-context-CLnHC6Ni.js} +1 -1
  68. package/dist/client/assets/{buckets-CCNVgXnz.js → buckets-D-zJv4te.js} +1 -1
  69. package/dist/client/assets/{bulk-category-panel-D5mVOyFj.js → bulk-category-panel-Dktf13dG.js} +1 -1
  70. package/dist/client/assets/{calendar-D6wnYOFU.js → calendar-D9j8nchp.js} +1 -1
  71. package/dist/client/assets/{capability-load-error-CG3fiZmw.js → capability-load-error-DFcYAh39.js} +1 -1
  72. package/dist/client/assets/{card-yjAvGlIX.js → card-B7oxfapp.js} +1 -1
  73. package/dist/client/assets/{category-editor-BSsWqXbo.js → category-editor-Jo5SYWHw.js} +1 -1
  74. package/dist/client/assets/{chat-context-dHFpqQXv.js → chat-context-DDx13UY-.js} +1 -1
  75. package/dist/client/assets/{checkbox-Dedtxheu.js → checkbox-DjFipj8q.js} +1 -1
  76. package/dist/client/assets/{cli-auth-success-B-lvfH5K.js → cli-auth-success-C2UzPn9p.js} +1 -1
  77. package/dist/client/assets/{collection-detail-D8Tp5I9V.js → collection-detail-te_AeyJe.js} +1 -1
  78. package/dist/client/assets/{collection-display-button-oQ_fvpY-.js → collection-display-button--2wcPOHU.js} +1 -1
  79. package/dist/client/assets/{collection-search-kxCjV-AG.js → collection-search-CXF9dytt.js} +1 -1
  80. package/dist/client/assets/{collection-table-wrapper-BtEQ9C4R.js → collection-table-wrapper-C2h_ch5y.js} +1 -1
  81. package/dist/client/assets/{collection-tabs-DzWbCF0d.js → collection-tabs-CsWR5nay.js} +1 -1
  82. package/dist/client/assets/{command-BsV2RQjJ.js → command-C4tHruaX.js} +1 -1
  83. package/dist/client/assets/{commerce-onboarding-CyIRq7um.js → commerce-onboarding-DGva3K20.js} +1 -1
  84. package/dist/client/assets/{companions-core-Cne_8fVL.js → companions-core-cILfPFw3.js} +1 -1
  85. package/dist/client/assets/{connect-DDAgChG5.js → connect-3QoHmREd.js} +1 -1
  86. package/dist/client/assets/{connection-DTJFBgNv.js → connection-DzNQpqTF.js} +1 -1
  87. package/dist/client/assets/{connection-card-BDubnL3U.js → connection-card-CBQz28WE.js} +1 -1
  88. package/dist/client/assets/{connection-detail-yVPDiBGA.js → connection-detail-BddeBzDN.js} +1 -1
  89. package/dist/client/assets/{connection-form-helpers-YOXUEkDi.js → connection-form-helpers-CqJuDNdY.js} +1 -1
  90. package/dist/client/assets/{connections-B4FjZO8v.js → connections-BlOBTOmX.js} +1 -1
  91. package/dist/client/assets/{decopilot-sse-pool-B915L-51.js → decopilot-sse-pool-DyKEiI_2.js} +1 -1
  92. package/dist/client/assets/{dialog-BufvtBqP.js → dialog-Bt7eMv3e.js} +1 -1
  93. package/dist/client/assets/{domain-settings-mhG-bECZ.js → domain-settings-CwOwtnaa.js} +1 -1
  94. package/dist/client/assets/{drawer-sRFC7fp-.js → drawer-B7RnJ3wR.js} +1 -1
  95. package/dist/client/assets/{dropdown-menu-jCNpNe96.js → dropdown-menu-DXoRyF9G.js} +1 -1
  96. package/dist/client/assets/{empty-state-k6--wQa7.js → empty-state-3ZrQMmKM.js} +1 -1
  97. package/dist/client/assets/{extract-connection-data-BWVtqOUT.js → extract-connection-data-BbUsFp4U.js} +1 -1
  98. package/dist/client/assets/{file-explorer-C6cfmElY.js → file-explorer-BR-DaOMR.js} +1 -1
  99. package/dist/client/assets/{form-BDZaeSnp.js → form-Cm9-K_rL.js} +1 -1
  100. package/dist/client/assets/{general-CDMUK_CU.js → general-DTwuZdOG.js} +1 -1
  101. package/dist/client/assets/{github-repo-picker-BBDaU8gM.js → github-repo-picker-DAdNsHq6.js} +1 -1
  102. package/dist/client/assets/{hooks-lLuYfmrC.js → hooks-D3fXgaRp.js} +1 -1
  103. package/dist/client/assets/{index-DjzBtoMr.js → index-B1T-Hggy.js} +1 -1
  104. package/dist/client/assets/{index-mPVKmgAM.js → index-BFs6Lkwg.js} +1 -1
  105. package/dist/client/assets/{index-DUC3fObX.js → index-BGSP2DZy.js} +1 -1
  106. package/dist/client/assets/{index-BvpCo-YM.js → index-BNKeySBB.js} +1 -1
  107. package/dist/client/assets/{index-CnAMNK9t.js → index-BUdJATnr.js} +1 -1
  108. package/dist/client/assets/{index-DCRkU5Wy.js → index-CFiuX5sg.js} +5 -5
  109. package/dist/client/assets/{index-CexzHP_6.js → index-CQEfPss7.js} +1 -1
  110. package/dist/client/assets/{index-C__5QEv-.js → index-DggacYgX.js} +3 -3
  111. package/dist/client/assets/{index-Dh2l9BzC.js → index-GcKXz6Hm.js} +1 -1
  112. package/dist/client/assets/{index--KwwhTPn.js → index-afeJnuWJ.js} +3 -3
  113. package/dist/client/assets/{index-CcC75qoZ.js → index-dMwoGHXT.js} +1 -1
  114. package/dist/client/assets/index-jYWRycIN.js +1 -0
  115. package/dist/client/assets/{index-redirect-BOIkyJqM.js → index-redirect-lhUtCXDG.js} +1 -1
  116. package/dist/client/assets/{input-BLr4RTsm.js → input-S84m9AtW.js} +1 -1
  117. package/dist/client/assets/{integration-icon-CgTNjILq.js → integration-icon-BWHDNAQl.js} +1 -1
  118. package/dist/client/assets/{invite-member-dialog-Bfrnlszn.js → invite-member-dialog-DaWTmsq7.js} +1 -1
  119. package/dist/client/assets/{label-BYiQyfwG.js → label-Cxo79mbH.js} +1 -1
  120. package/dist/client/assets/{layout-C33n3ap-.js → layout-CPKT8BYo.js} +1 -1
  121. package/dist/client/assets/{login-DYmy2I7n.js → login-aJtfxjHn.js} +1 -1
  122. package/dist/client/assets/{mcp-oauth-gxjUgI6c.js → mcp-oauth-NDbJg_iw.js} +1 -1
  123. package/dist/client/assets/{members-J471oWTL.js → members-CgS_OZzg.js} +1 -1
  124. package/dist/client/assets/{monaco-editor-DuTeczAH.js → monaco-editor-C8BkmFBS.js} +1 -1
  125. package/dist/client/assets/{monitoring-stats-row--OFfIL1b.js → monitoring-stats-row-CyYAcnRa.js} +1 -1
  126. package/dist/client/assets/{multi-select-BPX5SnC4.js → multi-select-CvZQPSvi.js} +1 -1
  127. package/dist/client/assets/{oauth-callback-D6tHlqio.js → oauth-callback-CH5EsTkQ.js} +1 -1
  128. package/dist/client/assets/{oauth-callback-ai-provider-CI2z2ViD.js → oauth-callback-ai-provider-B9KI1_GL.js} +1 -1
  129. package/dist/client/assets/{onboarding-CSfTXUFc.js → onboarding-CI22ROnk.js} +1 -1
  130. package/dist/client/assets/{org-layout-Cs_GIuEG.js → org-layout-C0CMMpXp.js} +1 -1
  131. package/dist/client/assets/{organization-choice-vicqUeRJ.js → organization-choice-BEuogrJI.js} +1 -1
  132. package/dist/client/assets/{orgs-w49xqOtp.js → orgs-CddRmFS9.js} +1 -1
  133. package/dist/client/assets/{page-seo-form-DgmTUIQW.js → page-seo-form-C0fN-ar5.js} +1 -1
  134. package/dist/client/assets/{popover-CfzhWoAD.js → popover-Dwceexuc.js} +1 -1
  135. package/dist/client/assets/{post-editor-C4fKRxG9.js → post-editor-CitSA7UI.js} +1 -1
  136. package/dist/client/assets/{primitives-LGUFHKb1.js → primitives-DAACRO6I.js} +1 -1
  137. package/dist/client/assets/{profile-D5DSVQbd.js → profile-CfNHZBsV.js} +1 -1
  138. package/dist/client/assets/project-app-view-Bs4rd91I.js +1 -0
  139. package/dist/client/assets/record-editor-Da-XDkvg.js +1 -0
  140. package/dist/client/assets/{redirect-editor-C1pd0iUE.js → redirect-editor-AL8rcugk.js} +1 -1
  141. package/dist/client/assets/registry-DAjGp2y2.js +2 -0
  142. package/dist/client/assets/{registry-layout-DWlVWhCR.js → registry-layout-D0rOgojZ.js} +1 -1
  143. package/dist/client/assets/{reports-v0IFyfE_.js → reports-CnvwYvHM.js} +1 -1
  144. package/dist/client/assets/{require-capability-BE_VuvWI.js → require-capability-UF2IeQzP.js} +1 -1
  145. package/dist/client/assets/{required-auth-layout-BHSr3aqs.js → required-auth-layout-Bn7ai5Eo.js} +1 -1
  146. package/dist/client/assets/{reset-password-D8Vl2pq6.js → reset-password-D41yofU2.js} +1 -1
  147. package/dist/client/assets/{roles-kiWYLeFt.js → roles-F3gPgr6u.js} +1 -1
  148. package/dist/client/assets/{search-input-DvW5PgOv.js → search-input-DU57HG_B.js} +1 -1
  149. package/dist/client/assets/{secrets-DtdNCPLN.js → secrets-B7k27ig5.js} +1 -1
  150. package/dist/client/assets/{sections-editor-JGSlPtmT.js → sections-editor-BzrLZDzy.js} +1 -1
  151. package/dist/client/assets/{select-BL1P0bDg.js → select-CZJm-gAJ.js} +1 -1
  152. package/dist/client/assets/{select-model-CGzVf4da.js → select-model-WWZE18E0.js} +1 -1
  153. package/dist/client/assets/{self-tool-result-CMu01sf8.js → self-tool-result-BDhtzDsR.js} +1 -1
  154. package/dist/client/assets/{seo-editor-_tosIPFs.js → seo-editor-mhVkTzCF.js} +1 -1
  155. package/dist/client/assets/{settings-layout-B3G2RZfv.js → settings-layout-Z0R5T-5p.js} +1 -1
  156. package/dist/client/assets/{settings-section-st_oGcki.js → settings-section--7J4fXfn.js} +1 -1
  157. package/dist/client/assets/{shell-controls-CDLVMtqy.js → shell-controls-C5mJqJqc.js} +1 -1
  158. package/dist/client/assets/{shell-layout-BcPRW4gw.js → shell-layout-BZ1bp6KG.js} +1 -1
  159. package/dist/client/assets/{sidebar-3mXW1Dgt.js → sidebar-CXetie7M.js} +1 -1
  160. package/dist/client/assets/{skeleton-DpvUx22g.js → skeleton-jicxowh6.js} +1 -1
  161. package/dist/client/assets/{spinner-BkDJnwEi.js → spinner-Dzm37O12.js} +1 -1
  162. package/dist/client/assets/{sso-Sbczr10D.js → sso-DrbZ_2Mu.js} +1 -1
  163. package/dist/client/assets/{store-B08X9qYw.js → store-BwGelpbM.js} +1 -1
  164. package/dist/client/assets/store-registry-_gIpWRou.js +2 -0
  165. package/dist/client/assets/{studio-tools-BC9ftyn5.js → studio-tools-BbM6-UA7.js} +1 -1
  166. package/dist/client/assets/{switch-Bka2RfWB.js → switch-B6O3Y-gU.js} +1 -1
  167. package/dist/client/assets/{tab-id-wPrlxsjG.js → tab-id-DSuKogLf.js} +1 -1
  168. package/dist/client/assets/{table-B_qS-D5L.js → table-Epe56N8S.js} +1 -1
  169. package/dist/client/assets/{tabs-BA_k2e-1.js → tabs-DxfQVAOw.js} +1 -1
  170. package/dist/client/assets/{textarea-cxk9ek3A.js → textarea-Dfq_bmlL.js} +1 -1
  171. package/dist/client/assets/{toggle-group-Iy_VUwLD.js → toggle-group-BN1gjQvQ.js} +1 -1
  172. package/dist/client/assets/{toolbar-D5fqlq8n.js → toolbar-C9jumvgT.js} +1 -1
  173. package/dist/client/assets/{tooltip-DUVwztGf.js → tooltip-MlLH1_Dh.js} +1 -1
  174. package/dist/client/assets/{use-ai-providers-FM7xVK8g.js → use-ai-providers-Defto_je.js} +1 -1
  175. package/dist/client/assets/{use-automations-6KaPhQ1G.js → use-automations-GvZcdpCo.js} +1 -1
  176. package/dist/client/assets/{use-autosave-CL1WkV0y.js → use-autosave-BkYk2CW4.js} +1 -1
  177. package/dist/client/assets/{use-capability-DylT3-bJ.js → use-capability-BiXF-UYc.js} +1 -1
  178. package/dist/client/assets/{use-clock-tick-BVuuIMJZ.js → use-clock-tick-CAnD9NNi.js} +1 -1
  179. package/dist/client/assets/{use-connection-CTwU4ysF.js → use-connection-BZIDvbn8.js} +1 -1
  180. package/dist/client/assets/{use-copy-CFnr24YY.js → use-copy-DOdHRGOs.js} +1 -1
  181. package/dist/client/assets/{use-create-virtual-mcp-CDvl06gG.js → use-create-virtual-mcp-BmJCyzuH.js} +1 -1
  182. package/dist/client/assets/{use-debounced-autosave-CH_IdRdc.js → use-debounced-autosave-Bt5JJzmR.js} +1 -1
  183. package/dist/client/assets/{use-debounced-value-BnMAWtVd.js → use-debounced-value-DG1XCJIr.js} +1 -1
  184. package/dist/client/assets/{use-deco-credits-Lzh1yWK0.js → use-deco-credits-DPUIAaD_.js} +1 -1
  185. package/dist/client/assets/{use-decopilot-events-CAKI0rwk.js → use-decopilot-events-CPfIgUww.js} +1 -1
  186. package/dist/client/assets/{use-delete-connection-DBKiXL1K.js → use-delete-connection-C5SFs3S1.js} +1 -1
  187. package/dist/client/assets/{use-deployment-admin-Dy4saSW-.js → use-deployment-admin-CK8KTjxB.js} +1 -1
  188. package/dist/client/assets/{use-file-configs-MJ-EZm1A.js → use-file-configs-C2KrmTUX.js} +1 -1
  189. package/dist/client/assets/{use-infinite-scroll-B-Oo1Otc.js → use-infinite-scroll-Cdi0-ZPn.js} +1 -1
  190. package/dist/client/assets/{use-join-requests-DNQ46mpf.js → use-join-requests-C4x7ZrQS.js} +1 -1
  191. package/dist/client/assets/{use-mcp-client-B16oXzhe.js → use-mcp-client-BAibrVDl.js} +1 -1
  192. package/dist/client/assets/{use-mcp-tools-BgeJ8qUA.js → use-mcp-tools-C1eT4Ju9.js} +1 -1
  193. package/dist/client/assets/{use-members-B5SQkFvM.js → use-members-BiTGlZ2w.js} +1 -1
  194. package/dist/client/assets/{use-mobile-wLzzxF5y.js → use-mobile-DB5ZxHaJ.js} +1 -1
  195. package/dist/client/assets/{use-navigate-to-agent-DgCZGKt-.js → use-navigate-to-agent-Qmi7y8B_.js} +1 -1
  196. package/dist/client/assets/{use-open-billing-url-DmgsXfM4.js → use-open-billing-url-B1-y2cpj.js} +1 -1
  197. package/dist/client/assets/{use-org-auth-client-T89F9n26.js → use-org-auth-client-i01FhEvq.js} +1 -1
  198. package/dist/client/assets/{use-org-sso-DFfY9EPW.js → use-org-sso-BrC9it_j.js} +1 -1
  199. package/dist/client/assets/{use-organization-roles-BInNn5ib.js → use-organization-roles-CcKuP3SV.js} +1 -1
  200. package/dist/client/assets/{use-organization-settings-DAdANOJE.js → use-organization-settings-CADr887M.js} +1 -1
  201. package/dist/client/assets/{use-registry-connections-3EggE_zB.js → use-registry-connections--zx8YUAi.js} +1 -1
  202. package/dist/client/assets/{use-secrets-BHxBEjeU.js → use-secrets-CoWYmFng.js} +1 -1
  203. package/dist/client/assets/{use-status-sounds-Ghdqdv3-.js → use-status-sounds-Cn6niJwb.js} +1 -1
  204. package/dist/client/assets/{use-tags-CTx2UWjs.js → use-tags-CbeqLeJe.js} +1 -1
  205. package/dist/client/assets/{use-view-mode-SuqQjVD9.js → use-view-mode-BwihOxnB.js} +1 -1
  206. package/dist/client/assets/{use-virtual-mcp-u0hz3Cgm.js → use-virtual-mcp-Bxdg2RZi.js} +1 -1
  207. package/dist/client/assets/useInfiniteQuery-BiwXmqqh.js +1 -0
  208. package/dist/client/assets/{useRouterState-jhA4Flll.js → useRouterState-ChhncROL.js} +1 -1
  209. package/dist/client/assets/useSuspenseInfiniteQuery-CC-Xt1G1.js +1 -0
  210. package/dist/client/assets/{users-DKcMmH69.js → users-BLAG7Dj6.js} +1 -1
  211. package/dist/client/assets/{variant-calendar-B8Iu9LPq.js → variant-calendar-c-fsCDvP.js} +1 -1
  212. package/dist/client/assets/{view-mode-toggle-CcVpCY4p.js → view-mode-toggle-_BqV7w71.js} +1 -1
  213. package/dist/client/index.html +1 -1
  214. package/dist/server/cli.js +415 -415
  215. package/dist/server/migrate.js +146 -146
  216. package/dist/server/server.js +3 -3
  217. package/package.json +1 -1
  218. package/dist/client/assets/index-BPdWwgNf.js +0 -1
  219. package/dist/client/assets/project-app-view-BjNES_YQ.js +0 -1
  220. package/dist/client/assets/record-editor-CDYQ5b6y.js +0 -1
  221. package/dist/client/assets/registry-CRmFchCJ.js +0 -2
  222. package/dist/client/assets/store-registry-DsRP0sKP.js +0 -2
  223. package/dist/client/assets/useInfiniteQuery-BWLdVZcQ.js +0 -1
  224. package/dist/client/assets/useSuspenseInfiniteQuery-DY3vWHGi.js +0 -1
@@ -944,7 +944,7 @@ ${Y}`}return $}});var X40=_((mD)=>{var Ay8=mD&&mD.__createBinding||(Object.creat
944
944
  ${A$.ref("meta_json")}::jsonb->'mcp.studio'->>'verified',
945
945
  ${A$.ref("meta_json")}::jsonb->'mcp.mesh'->>'verified'
946
946
  ) = 'true' THEN 1 ELSE 0 END
947
- ) desc`}class Ff{db;constructor($){this.db=$}async create($){let Z=new Date().toISOString(),X=$i1($._meta??{}),G=I40(X),Y=QG(G.tags),Q=QG(G.categories),J={id:$.id,organization_id:$.organization_id,title:$.title,description:$.description??null,server_json:JSON.stringify($.server),meta_json:JSON.stringify(X),tags:T40(Y),categories:T40(Q),is_public:$.is_public?1:0,is_unlisted:$.is_unlisted?1:0,created_at:Z,updated_at:Z,created_by:$.created_by??null};await this.db.insertInto("private_registry_item").values(J).execute();let W=await this.findById($.organization_id,$.id);if(!W)throw Error(`Failed to create registry item "${$.id}"`);return W}async findById($,Z){let X=await this.db.selectFrom("private_registry_item").selectAll().where("organization_id","=",$).where("id","=",Z).executeTakeFirst();return X?this.deserialize(X):null}async findByIdOrName($,Z){let X=await this.findById($,Z);if(X)return X;let G=await this.db.selectFrom("private_registry_item").selectAll().where("organization_id","=",$).where("title","=",Z).executeTakeFirst();return G?this.deserialize(G):null}async update($,Z,X){let G=await this.findById($,Z);if(!G)throw Error(`Registry item not found: ${Z}`);let Y=$i1(X._meta??G._meta??{}),Q=I40(Y),J=QG(Q.tags),W=QG(Q.categories),K={updated_at:new Date().toISOString()};if(X.title!==void 0)K.title=X.title;if(X.description!==void 0)K.description=X.description;if(X.server!==void 0)K.server_json=JSON.stringify(X.server);if(X._meta!==void 0)K.meta_json=JSON.stringify(Y);if(X._meta!==void 0)K.tags=T40(J),K.categories=T40(W);if(X.is_public!==void 0)K.is_public=X.is_public?1:0;if(X.is_unlisted!==void 0)K.is_unlisted=X.is_unlisted?1:0;await this.db.updateTable("private_registry_item").set(K).where("organization_id","=",$).where("id","=",Z).execute();let N=await this.findById($,Z);if(!N)throw Error(`Registry item not found after update: ${Z}`);return N}async delete($,Z){let X=await this.findById($,Z);if(!X)return null;return await this.db.deleteFrom("private_registry_item").where("organization_id","=",$).where("id","=",Z).execute(),X}async list($,Z={}){let X=this.db.selectFrom("private_registry_item").selectAll().where("organization_id","=",$);if(!Z.includeUnlisted)X=X.where("is_unlisted","=",0);let G=QG(Z.tags);if(G.length>0)X=X.where(R40("tags",G));let Y=QG(Z.categories);if(Y.length>0)X=X.where(R40("categories",Y));if(Z.where)X=X.where(_y0(Z.where));let W=(await this.db.selectFrom(X.as("filtered")).select(A$`count(*)::int`.as("count")).executeTakeFirst())?.count??0;X=X.orderBy(Zi1()).orderBy("created_at","desc");let N=P40(Z.cursor)??Z.offset??0,H=Z.limit??24;X=X.limit(H).offset(N);let U=(await X.execute()).map((D)=>this.deserialize(D)),w=N+H<W,O=w?j40(N+H):void 0;return{items:U,totalCount:W,hasMore:w,nextCursor:O}}async listPublic($,Z={}){let X=this.db.selectFrom("private_registry_item").selectAll().where("organization_id","=",$).where("is_public","=",1).where("is_unlisted","=",0),G=QG(Z.tags);if(G.length>0)X=X.where(R40("tags",G));let Y=QG(Z.categories);if(Y.length>0)X=X.where(R40("categories",Y));if(Z.where)X=X.where(_y0(Z.where));let W=(await this.db.selectFrom(X.as("filtered")).select(A$`count(*)::int`.as("count")).executeTakeFirst())?.count??0;X=X.orderBy(Zi1()).orderBy("created_at","desc");let N=P40(Z.cursor)??Z.offset??0,H=Z.limit??24;X=X.limit(H).offset(N);let U=(await X.execute()).map((D)=>this.deserialize(D)),w=N+H<W,O=w?j40(N+H):void 0;return{items:U,totalCount:W,hasMore:w,nextCursor:O}}async getFilters($,Z){let X=this.db.selectFrom("private_registry_item").select(["tags","categories"]).where("organization_id","=",$);if(Z?.publicOnly)X=X.where("is_public","=",1);if(!Z?.includeUnlisted)X=X.where("is_unlisted","=",0);let G=await X.execute(),Y=new Map,Q=new Map;for(let W of G){for(let K of tD(W.tags))Y.set(K,(Y.get(K)??0)+1);for(let K of tD(W.categories))Q.set(K,(Q.get(K)??0)+1)}let J=(W)=>Array.from(W.entries()).map(([K,N])=>({value:K,count:N})).sort((K,N)=>K.value.localeCompare(N.value));return{tags:J(Y),categories:J(Q)}}async search($,Z={},X){let G=this.db.selectFrom("private_registry_item").select(["id","title","description","meta_json","server_json","tags","categories","is_public","is_unlisted"]).where("organization_id","=",$).orderBy("created_at","desc");if(X?.publicOnly)G=G.where("is_public","=",1);if(!X?.includeUnlisted)G=G.where("is_unlisted","=",0);let Y=await G.execute(),Q=Z.query?.trim().toLowerCase(),J=QG(Z.tags),W=QG(Z.categories),K=Y.filter((L)=>{if(Q){let E=A40(L.server_json,{}),z=A40(L.meta_json,{}),j=I40(z).short_description??"";if(![L.id,L.title,L.description??"",E.name??"",E.description??"",j].join(" ").toLowerCase().includes(Q))return!1}if(J.length>0){let E=QG(tD(L.tags));if(!J.every((z)=>E.includes(z)))return!1}if(W.length>0){let E=QG(tD(L.categories));if(!W.every((z)=>E.includes(z)))return!1}return!0}),H=P40(Z.cursor)??0,F=Z.limit??20,U=K.slice(H,H+F),w=H+F<K.length,O=w?j40(H+F):void 0;return{items:U.map((L)=>({id:L.id,title:L.title,tags:tD(L.tags),categories:tD(L.categories),is_public:L.is_public===1,is_unlisted:L.is_unlisted===1})),totalCount:K.length,hasMore:w,nextCursor:O}}deserialize($){let Z=A40($.server_json,{}),X=A40($.meta_json,{});return{id:$.id,name:typeof Z.name==="string"?Z.name:void 0,title:$.title,description:$.description,_meta:X,server:Z,is_public:$.is_public===1,is_unlisted:$.is_unlisted===1,created_at:$.created_at,updated_at:$.updated_at,...$.created_by?{created_by:$.created_by}:{}}}}var nh8,ph8,th8;var vy0=B(()=>{nh8=new Set(["id","title","description","is_public","is_unlisted","created_at","updated_at","created_by"]),ph8=new Set(["is_public","is_unlisted"]),th8={_meta:"meta_json",server:"server_json"}});import{randomUUID as ah8}from"crypto";function Xi1($,Z){if(!$)return Z;try{return JSON.parse($)}catch{return Z}}function Gi1($){if(!$)return null;let Z=PW($);return JSON.stringify(Z?z40($,Z):$)}class Uf{db;constructor($){this.db=$}async createOrUpdate($){let Z=new Date().toISOString(),X=await this.findPendingByRequestedId($.organization_id,$.requested_id);if(X){let J={title:$.title,description:$.description??null,server_json:JSON.stringify($.server),meta_json:Gi1($._meta),requester_name:$.requester_name??null,requester_email:$.requester_email??null,updated_at:Z};await this.db.updateTable("private_registry_publish_request").set(J).where("organization_id","=",$.organization_id).where("id","=",X.id).execute();let W=await this.findById($.organization_id,X.id);if(!W)throw Error("Failed to update publish request");return W}let G=ah8(),Y={id:G,organization_id:$.organization_id,requested_id:$.requested_id,status:"pending",title:$.title,description:$.description??null,server_json:JSON.stringify($.server),meta_json:Gi1($._meta),requester_name:$.requester_name??null,requester_email:$.requester_email??null,reviewer_notes:null,created_at:Z,updated_at:Z};await this.db.insertInto("private_registry_publish_request").values(Y).execute();let Q=await this.findById($.organization_id,G);if(!Q)throw Error("Failed to create publish request");return Q}async findPendingByRequestedId($,Z){let X=await this.db.selectFrom("private_registry_publish_request").selectAll().where("organization_id","=",$).where("requested_id","=",Z).where("status","=","pending").executeTakeFirst();return X?this.deserialize(X):null}async findById($,Z){let X=await this.db.selectFrom("private_registry_publish_request").selectAll().where("organization_id","=",$).where("id","=",Z).executeTakeFirst();return X?this.deserialize(X):null}async list($,Z={}){let X=this.db.selectFrom("private_registry_publish_request").selectAll().where("organization_id","=",$),G=this.db.selectFrom("private_registry_publish_request").select((N)=>N.fn.countAll().as("count")).where("organization_id","=",$);if(Z.status)X=X.where("status","=",Z.status),G=G.where("status","=",Z.status);let Y=await G.executeTakeFirst(),Q=Number(Y?.count??0),J=Z.sortBy??"created_at",W=Z.sortDirection??"desc";if(J==="title")X=X.orderBy("title",W);else X=X.orderBy("created_at",W);return{items:(await X.limit(Z.limit??24).offset(Z.offset??0).execute()).map((N)=>this.deserialize(N)),totalCount:Q}}async updateStatus($,Z,X,G){let Y={status:X,updated_at:new Date().toISOString(),reviewer_notes:G??null};await this.db.updateTable("private_registry_publish_request").set(Y).where("organization_id","=",$).where("id","=",Z).execute();let Q=await this.findById($,Z);if(!Q)throw Error(`Publish request not found: ${Z}`);return Q}async countPending($){let Z=await this.db.selectFrom("private_registry_publish_request").select((X)=>X.fn.countAll().as("count")).where("organization_id","=",$).where("status","=","pending").executeTakeFirst();return Number(Z?.count??0)}async delete($,Z){let X=await this.findById($,Z);if(!X)return null;return await this.db.deleteFrom("private_registry_publish_request").where("organization_id","=",$).where("id","=",Z).execute(),X}deserialize($){return{id:$.id,organization_id:$.organization_id,requested_id:$.requested_id??null,status:$.status,title:$.title,description:$.description,_meta:Xi1($.meta_json,{}),server:Xi1($.server_json,{name:""}),requester_name:$.requester_name,requester_email:$.requester_email,reviewer_notes:$.reviewer_notes,created_at:$.created_at,updated_at:$.updated_at}}}var by0=()=>{};import{createHash as sh8,randomBytes as eh8,randomUUID as $u8}from"crypto";function Yi1($){return sh8("sha256").update($).digest("hex")}function Zu8(){return`prk_${eh8(32).toString("hex")}`}class wf{db;constructor($){this.db=$}async generate($,Z){let X=$u8(),G=Zu8(),Y=await Yi1(G),Q=G.slice(0,12),J=new Date().toISOString();return await this.db.insertInto("private_registry_publish_api_key").values({id:X,organization_id:$,name:Z,key_hash:Y,prefix:Q,created_at:J}).execute(),{entity:{id:X,organization_id:$,name:Z,prefix:Q,created_at:J},key:G}}async list($){return await this.db.selectFrom("private_registry_publish_api_key").select(["id","organization_id","name","prefix","created_at"]).where("organization_id","=",$).orderBy("created_at","desc").execute()}async revoke($,Z){return(await this.db.deleteFrom("private_registry_publish_api_key").where("organization_id","=",$).where("id","=",Z).execute()).length>0}async validate($,Z){let X=await Yi1(Z),G=await this.db.selectFrom("private_registry_publish_api_key").select(["id"]).where("organization_id","=",$).where("key_hash","=",X).executeTakeFirst();return Boolean(G)}async hasKeys($){let Z=await this.db.selectFrom("private_registry_publish_api_key").select((X)=>X.fn.countAll().as("count")).where("organization_id","=",$).executeTakeFirst();return Number(Z?.count??0)>0}}var fy0=()=>{};import{randomUUID as Qi1}from"crypto";function Ji1($,Z){if(!$)return Z;try{return JSON.parse($)}catch{return Z}}class q40{db;constructor($){this.db=$}async create($){let Z=Qi1(),X=new Date().toISOString(),G={id:Z,organization_id:$.organization_id,status:$.status??"pending",config_snapshot:$.config_snapshot?JSON.stringify($.config_snapshot):null,total_items:$.total_items??0,tested_items:0,passed_items:0,failed_items:0,skipped_items:0,current_item_id:null,started_at:$.started_at??null,finished_at:null,created_at:X};await this.db.insertInto("private_registry_monitor_run").values(G).execute();let Y=await this.findById($.organization_id,Z);if(!Y)throw Error(`Failed to create monitor run ${Z}`);return Y}async findById($,Z){let X=await this.db.selectFrom("private_registry_monitor_run").selectAll().where("organization_id","=",$).where("id","=",Z).executeTakeFirst();return X?this.deserializeRun(X):null}async list($,Z={}){let X=this.db.selectFrom("private_registry_monitor_run").selectAll().where("organization_id","=",$),G=this.db.selectFrom("private_registry_monitor_run").select((W)=>W.fn.countAll().as("count")).where("organization_id","=",$);if(Z.status)X=X.where("status","=",Z.status),G=G.where("status","=",Z.status);let Y=await G.executeTakeFirst(),Q=Number(Y?.count??0);return{items:(await X.orderBy("created_at","desc").limit(Z.limit??24).offset(Z.offset??0).execute()).map((W)=>this.deserializeRun(W)),totalCount:Q}}async update($,Z,X){let G={};if(X.total_items!==void 0)G.total_items=X.total_items;if(X.status!==void 0)G.status=X.status;if(X.tested_items!==void 0)G.tested_items=X.tested_items;if(X.passed_items!==void 0)G.passed_items=X.passed_items;if(X.failed_items!==void 0)G.failed_items=X.failed_items;if(X.skipped_items!==void 0)G.skipped_items=X.skipped_items;if(X.current_item_id!==void 0)G.current_item_id=X.current_item_id;if(X.started_at!==void 0)G.started_at=X.started_at;if(X.finished_at!==void 0)G.finished_at=X.finished_at;await this.db.updateTable("private_registry_monitor_run").set(G).where("organization_id","=",$).where("id","=",Z).execute();let Y=await this.findById($,Z);if(!Y)throw Error(`Monitor run not found: ${Z}`);return Y}deserializeRun($){return{id:$.id,organization_id:$.organization_id,status:$.status,config_snapshot:Ji1($.config_snapshot,null),total_items:Number($.total_items??0),tested_items:Number($.tested_items??0),passed_items:Number($.passed_items??0),failed_items:Number($.failed_items??0),skipped_items:Number($.skipped_items??0),current_item_id:$.current_item_id,started_at:$.started_at,finished_at:$.finished_at,created_at:$.created_at}}}class M40{db;constructor($){this.db=$}async create($){let Z=Qi1(),X=new Date().toISOString(),G={id:Z,run_id:$.run_id,organization_id:$.organization_id,item_id:$.item_id,item_title:$.item_title,status:$.status,error_message:$.error_message??null,connection_ok:$.connection_ok?1:0,tools_listed:$.tools_listed?1:0,tool_results:$.tool_results?JSON.stringify($.tool_results):null,agent_summary:$.agent_summary??null,duration_ms:$.duration_ms??0,action_taken:$.action_taken??"none",tested_at:X};await this.db.insertInto("private_registry_monitor_result").values(G).execute();let Y=await this.findById($.organization_id,Z);if(!Y)throw Error("Failed to create test result");return Y}async findById($,Z){let X=await this.db.selectFrom("private_registry_monitor_result").selectAll().where("organization_id","=",$).where("id","=",Z).executeTakeFirst();return X?this.deserialize(X):null}async listByRun($,Z,X={}){let G=this.db.selectFrom("private_registry_monitor_result").selectAll().where("organization_id","=",$).where("run_id","=",Z),Y=this.db.selectFrom("private_registry_monitor_result").select((K)=>K.fn.countAll().as("count")).where("organization_id","=",$).where("run_id","=",Z);if(X.status)G=G.where("status","=",X.status),Y=Y.where("status","=",X.status);let Q=await Y.executeTakeFirst(),J=Number(Q?.count??0);return{items:(await G.orderBy("tested_at","desc").limit(X.limit??50).offset(X.offset??0).execute()).map((K)=>this.deserialize(K)),totalCount:J}}async update($,Z,X){let G={};if(X.status!==void 0)G.status=X.status;if(X.error_message!==void 0)G.error_message=X.error_message;if(X.connection_ok!==void 0)G.connection_ok=X.connection_ok?1:0;if(X.tools_listed!==void 0)G.tools_listed=X.tools_listed?1:0;if(X.tool_results!==void 0)G.tool_results=JSON.stringify(X.tool_results);if(X.agent_summary!==void 0)G.agent_summary=X.agent_summary;if(X.duration_ms!==void 0)G.duration_ms=X.duration_ms;if(X.action_taken!==void 0)G.action_taken=X.action_taken;await this.db.updateTable("private_registry_monitor_result").set(G).where("organization_id","=",$).where("id","=",Z).execute();let Y=await this.findById($,Z);if(!Y)throw Error(`Monitor result not found: ${Z}`);return Y}deserialize($){return{id:$.id,run_id:$.run_id,organization_id:$.organization_id,item_id:$.item_id,item_title:$.item_title,status:$.status,error_message:$.error_message,connection_ok:$.connection_ok===1,tools_listed:$.tools_listed===1,tool_results:Ji1($.tool_results,[]),agent_summary:$.agent_summary,duration_ms:Number($.duration_ms??0),action_taken:$.action_taken,tested_at:$.tested_at}}}var Wi1=()=>{};import{randomUUID as Xu8}from"crypto";class k40{db;constructor($){this.db=$}async findByItemId($,Z){let X=await this.db.selectFrom("private_registry_monitor_connection").selectAll().where("organization_id","=",$).where("item_id","=",Z).executeTakeFirst();return X?this.deserialize(X):null}async list($){return(await this.db.selectFrom("private_registry_monitor_connection").selectAll().where("organization_id","=",$).orderBy("updated_at","desc").execute()).map((X)=>this.deserialize(X))}async findByConnectionId($,Z){let X=await this.db.selectFrom("private_registry_monitor_connection").selectAll().where("organization_id","=",$).where("connection_id","=",Z).executeTakeFirst();return X?this.deserialize(X):null}async upsert($){let Z=await this.findByItemId($.organization_id,$.item_id),X=new Date().toISOString();if(!Z){let Y={id:Xu8(),organization_id:$.organization_id,item_id:$.item_id,connection_id:$.connection_id,auth_status:$.auth_status??"none",created_at:X,updated_at:X};await this.db.insertInto("private_registry_monitor_connection").values(Y).execute()}else{let Y={connection_id:$.connection_id,auth_status:$.auth_status??Z.auth_status,updated_at:X};await this.db.updateTable("private_registry_monitor_connection").set(Y).where("organization_id","=",$.organization_id).where("item_id","=",$.item_id).execute()}let G=await this.findByItemId($.organization_id,$.item_id);if(!G)throw Error("Failed to save monitor connection");return G}async updateAuthStatus($,Z,X){return await this.db.updateTable("private_registry_monitor_connection").set({auth_status:X,updated_at:new Date().toISOString()}).where("organization_id","=",$).where("item_id","=",Z).execute(),this.findByItemId($,Z)}deserialize($){return{id:$.id,organization_id:$.organization_id,item_id:$.item_id,connection_id:$.connection_id,auth_status:$.auth_status,created_at:$.created_at,updated_at:$.updated_at}}}var Ki1=()=>{};var Ni1=B(()=>{vy0();by0();fy0();Wi1();Ki1()});class xy0{db;constructor($){this.db=$}async listOrgTags($){return(await this.db.selectFrom("organization_tags").selectAll().where("organization_id","=",$).orderBy("name","asc").execute()).map((X)=>this.tagFromDbRow(X))}async getTag($){let Z=await this.db.selectFrom("organization_tags").selectAll().where("id","=",$).executeTakeFirst();return Z?this.tagFromDbRow(Z):null}async getTagByName($,Z){let X=await this.db.selectFrom("organization_tags").selectAll().where("organization_id","=",$).where("name","=",Z).executeTakeFirst();return X?this.tagFromDbRow(X):null}async createTag($,Z,X){let G=l8("tag"),Y=new Date().toISOString();await this.db.insertInto("organization_tags").values({id:G,organization_id:$,name:Z,color:X??null,created_at:Y}).onConflict((J)=>J.columns(["organization_id","name"]).doNothing()).execute();let Q=await this.getTagByName($,Z);if(!Q)throw Error(`Failed to create or retrieve tag: ${Z}`);return Q}async deleteTag($){await this.db.deleteFrom("organization_tags").where("id","=",$).execute()}async getMemberTags($){return(await this.db.selectFrom("member_tags").innerJoin("organization_tags","organization_tags.id","member_tags.tag_id").select(["organization_tags.id","organization_tags.organization_id","organization_tags.name","organization_tags.color","organization_tags.created_at"]).where("member_tags.member_id","=",$).orderBy("organization_tags.name","asc").execute()).map((X)=>this.tagFromDbRow(X))}async setMemberTags($,Z){await this.db.transaction().execute(async(X)=>{if(await X.deleteFrom("member_tags").where("member_id","=",$).execute(),Z.length>0){let G=new Date().toISOString();await X.insertInto("member_tags").values(Z.map((Y)=>({id:l8("mtag"),member_id:$,tag_id:Y,created_at:G}))).execute()}})}async addMemberTag($,Z){let X=new Date().toISOString();await this.db.insertInto("member_tags").values({id:l8("mtag"),member_id:$,tag_id:Z,created_at:X}).onConflict((G)=>G.columns(["member_id","tag_id"]).doNothing()).execute()}async removeMemberTag($,Z){await this.db.deleteFrom("member_tags").where("member_id","=",$).where("tag_id","=",Z).execute()}async verifyMemberOrg($,Z){return await this.db.selectFrom("member").select("id").where("id","=",$).where("organizationId","=",Z).executeTakeFirst()!==void 0}async getUserTagsInOrg($,Z){return(await this.db.selectFrom("member").innerJoin("member_tags","member_tags.member_id","member.id").innerJoin("organization_tags","organization_tags.id","member_tags.tag_id").select(["organization_tags.id","organization_tags.organization_id","organization_tags.name","organization_tags.color","organization_tags.created_at"]).where("member.userId","=",$).where("member.organizationId","=",Z).orderBy("organization_tags.name","asc").execute()).map((G)=>this.tagFromDbRow(G))}async getMembersWithTags($){let Z=await this.db.selectFrom("member").leftJoin("member_tags","member_tags.member_id","member.id").leftJoin("organization_tags","organization_tags.id","member_tags.tag_id").select(["member.id as memberId","organization_tags.name as tagName"]).where("member.organizationId","=",$).execute(),X=new Map;for(let G of Z){if(!X.has(G.memberId))X.set(G.memberId,[]);if(G.tagName)X.get(G.memberId).push(G.tagName)}return X}tagFromDbRow($){return{id:$.id,organizationId:$.organization_id,name:$.name,color:$.color??null,createdAt:$.created_at}}}var Hi1=B(()=>{DX()});function Fi1($){return{organizationId:$.organization_id,status:$.status,stripeCustomerId:$.stripe_customer_id,stripeSubscriptionId:$.stripe_subscription_id,currentPeriodEnd:$.current_period_end,lastStripeEventAt:$.last_stripe_event_at}}class bN{db;constructor($){this.db=$}async getBilling($){let Z=await this.db.selectFrom("organization_billing").selectAll().where("organization_id","=",$).executeTakeFirst();return Z?Fi1(Z):null}async getBillingByStripeSubscriptionId($){let Z=await this.db.selectFrom("organization_billing").selectAll().where("stripe_subscription_id","=",$).executeTakeFirst();return Z?Fi1(Z):null}async updateStripeState($,Z){return((await this.db.updateTable("organization_billing").set({...Z.stripeCustomerId!==void 0&&{stripe_customer_id:Z.stripeCustomerId},...Z.stripeSubscriptionId!==void 0&&{stripe_subscription_id:Z.stripeSubscriptionId},...Z.status!==void 0&&{status:Z.status},...Z.currentPeriodEnd!==void 0&&{current_period_end:Z.currentPeriodEnd},...Z.lastStripeEventAt!==void 0&&{last_stripe_event_at:Z.lastStripeEventAt},updated_at:new Date}).where("organization_id","=",$).executeTakeFirst()).numUpdatedRows??0n)>0n}async taskClaim($){let Z=await this.db.selectFrom("task_quota_claims").select(["run_count","state"]).where("task_board_item_id","=",$).executeTakeFirst();return Z?{runCount:Z.run_count,state:Z.state}:null}static liveClaimCount($,Z,X){return $.selectFrom("task_quota_claims").select((G)=>G.fn.countAll().as("count")).where("organization_id","=",Z).where("period_key","=",X).where("state","<>","released").executeTakeFirst().then((G)=>Number(G?.count??0))}async countTaskClaims($,Z){return await bN.liveClaimCount(this.db,$,Z)}async claimTaskUnderLimit($,Z,X,G,Y){return await this.db.transaction().execute(async(Q)=>{await Q.insertInto("organization_billing").values({organization_id:$}).onConflict((K)=>K.column("organization_id").doNothing()).execute(),await Q.selectFrom("organization_billing").select("organization_id").where("organization_id","=",$).forUpdate().executeTakeFirstOrThrow();let J=await Q.selectFrom("task_quota_claims").select(["run_count","state"]).where("task_board_item_id","=",Z).executeTakeFirst();if(J&&J.run_count>=Y)return"runs_exhausted";let W=()=>bN.liveClaimCount(Q,$,X);if(J&&J.state!=="released")return await Q.updateTable("task_quota_claims").set({run_count:J.run_count+1}).where("task_board_item_id","=",Z).execute(),"rerun";if(await W()>=G)return"exhausted";if(J)return await Q.updateTable("task_quota_claims").set({state:"held",period_key:X,run_count:J.run_count+1}).where("task_board_item_id","=",Z).execute(),"claimed";return await Q.insertInto("task_quota_claims").values({task_board_item_id:Z,organization_id:$,period_key:X,state:"held"}).execute(),"claimed"})}async releaseTaskClaim($,Z){await this.db.updateTable("task_quota_claims").set({state:"released"}).where("organization_id","=",$).where("task_board_item_id","=",Z).where("state","=","held").execute()}async rollbackTaskClaim($,Z){await this.db.updateTable("task_quota_claims").set((X)=>({state:"released",run_count:X("run_count","-",1)})).where("organization_id","=",$).where("task_board_item_id","=",Z).where("state","=","held").execute()}}class yy0{db;constructor($){this.db=$}async findById($,Z){let X=await this.db.selectFrom("user").select(["user.id","user.name","user.email","user.image","user.createdAt","user.updatedAt"]).where("user.id","=",$).where((G)=>G.exists(G.selectFrom("member as m1").innerJoin("member as m2","m1.organizationId","m2.organizationId").select("m1.id").where("m1.userId","=",$).where("m2.userId","=",Z))).executeTakeFirst();if(!X)return null;return{id:X.id,name:X.name,email:X.email,role:"",createdAt:X.createdAt,updatedAt:X.updatedAt,image:X.image??void 0}}}function FQ($){if(!$)return!1;return $.split(",").some((X)=>ud.includes(X))}function S40($,Z){let X=Array.isArray(Z)?Z:[Z];if(X.length===0)return!1;let G=$?$.split(","):[];if(G.includes("owner"))return!0;if(G.includes("admin"))return X.every((Y)=>Y!=="owner");return!1}var Of,ud;var UQ=B(()=>{Of=["owner","admin","user"],ud=["owner","admin"]});class oD{userId;toolName;boundAuth;role;connectionId;getToolMeta;organizationId;_granted=!1;constructor($,Z,X,G,Y="self",Q,J){this.userId=$;this.toolName=Z;this.boundAuth=X;this.role=G;this.connectionId=Y;this.getToolMeta=Q;this.organizationId=J}setToolName($){this.toolName=$}setOrganizationId($){this.organizationId=$}getOrganizationId(){return this.organizationId}setRole($){this.role=$}getRole(){return this.role}grant(){this._granted=!0}async check(...$){if(this._granted)return;if(this.toolName?.startsWith("STUDIO_PUBLIC_")||this.toolName?.startsWith("MESH_PUBLIC_")){this.grant();return}if(!this.userId&&!this.boundAuth){if(this.getToolMeta&&await this.isToolPublic()){this.grant();return}throw new Bf("Authentication required. Please provide a valid OAuth token or API key.")}let Z=$.length>0?$:this.toolName?[this.toolName]:[];if(Z.length===0)throw new fN("No resources specified for access check");for(let X of Z)if(await this.checkResource(X)){this.grant();return}throw new fN(`Access denied to: ${Z.join(", ")}`)}async checkResource($){if(!this.userId&&!this.boundAuth)return!1;return this.boundAuth?.isApiKeyPrincipal?this.checkApiKeyAccess($):this.checkMemberAccess($)}async checkApiKeyAccess($){if(!this.boundAuth)return!1;return this.boundAuth.hasPermission({[this.connectionId]:[$]})}async checkMemberAccess($){if(this.userId&&this.role&&NM1.has($))return!0;if(FQ(this.role))return!0;if(!this.boundAuth)return!1;return this.boundAuth.hasPermission({[this.connectionId]:[$]},{organizationId:this.organizationId,role:this.role})}async isToolPublic(){if(this.toolName?.startsWith("STUDIO_PUBLIC_")||this.toolName?.startsWith("MESH_PUBLIC_"))return!0;if(!this.getToolMeta)return!1;try{let $=await this.getToolMeta();if(!$)return!1;let X=PW($)?.public_tool;return X===!0||X==="true"}catch{return!1}}granted(){return this._granted}}var Bf,fN;var rD=B(()=>{zv();UQ();Bf=class Bf extends Error{constructor($){super($);this.name="UnauthorizedError"}};fN=class fN extends Error{constructor($){super($);this.name="ForbiddenError"}}});function Ui1($){let Z={};for(let X of Object.keys($))Z[X]=["*"];return Z}function RX($){let Z=$?.metadata;if(!Z)return!1;try{return(typeof Z==="string"?JSON.parse(Z):Z).archived===!0}catch{return!1}}function V40($,Z){return $.get(wi1[Z])??$.get(Oi1[Z])}function gy0($,Z,X){$[wi1[Z]]=X,$[Oi1[Z]]=X}var wi1,Oi1;var hy0=B(()=>{wi1={token:"x-studio-token",client:"x-studio-client",properties:"x-studio-properties",runMetadata:"x-studio-run-metadata"},Oi1={token:"x-mesh-token",client:"x-mesh-client",properties:"x-mesh-properties",runMetadata:"x-mesh-run-metadata"}});function C40($){let Z=mU.get($);if(!Z||Z.state==="CLOSED")return;if(Z.state==="HALF_OPEN"){if(Z.halfOpenInFlight){if(Date.now()-Z.halfOpenStartedAt<vy1)throw new Df($,0)}Z.halfOpenInFlight=!0,Z.halfOpenStartedAt=Date.now();return}let X=Date.now()-Z.lastFailureTime;if(X>=ob0){Z.state="HALF_OPEN",Z.halfOpenInFlight=!0,Z.halfOpenStartedAt=Date.now();return}throw new Df($,ob0-X)}function _40($){mU.delete($)}function v40($){let Z=mU.get($);if(!Z){Gu8(),mU.set($,{state:1>=tb0?"OPEN":"CLOSED",consecutiveFailures:1,lastFailureTime:Date.now(),halfOpenInFlight:!1,halfOpenStartedAt:0});return}if(Z.consecutiveFailures++,Z.lastFailureTime=Date.now(),Z.halfOpenInFlight=!1,Z.consecutiveFailures>=tb0)Z.state="OPEN"}function Gu8(){if(mU.size<X80)return;let $=null,Z=1/0;for(let[X,G]of mU)if(G.lastFailureTime<Z)Z=G.lastFailureTime,$=X;if($)mU.delete($)}var mU,Df;var uy0=B(()=>{K5();mU=new Map;J8.createObservableGauge("mcp_circuit_breaker.circuits",{description:"MCP connection circuits by state (open, half_open)",unit:"{circuits}"}).addCallback(($)=>{let Z=0,X=0;for(let G of mU.values())if(G.state==="OPEN")Z++;else if(G.state==="HALF_OPEN")X++;$.observe(Z,{state:"open"}),$.observe(X,{state:"half_open"})});Df=class Df extends Error{cooldownRemainingMs;constructor($,Z){super(`Connection ${$} circuit breaker is open \u2014 downstream server unreachable. `+`Retry in ${Math.ceil(Z/1000)}s.`);this.name="CircuitOpenError",this.cooldownRemainingMs=Z}}});function Lf(...$){if(Wu8)console.log("[mcp-read-cache]",...$)}function Ku8($){return $.kind==="org"?"org":`u:${$.userId}`}function cy0($){if($===null||typeof $!=="object")return JSON.stringify($)??"null";if(Array.isArray($))return`[${$.map(cy0).join(",")}]`;return`{${Object.keys($).sort().map((X)=>`${JSON.stringify(X)}:${cy0($[X])}`).join(",")}}`}class Di1{config;maxEntries;now;maxTotalBytes;store=new Map;revalidating=new Set;totalBytes=0;constructor($=Yu8,Z=Qu8,X=()=>Date.now(),G=Ju8){this.config=$;this.maxEntries=Z;this.now=X;this.maxTotalBytes=G}stats(){return{entries:this.store.size,bytes:this.totalBytes}}deleteKey($){let Z=this.store.get($);if(Z)this.store.delete($),this.totalBytes-=Z.bytes}key($,Z,X,G){return`${Z}:${Ku8(X)}:${$}:${cy0(G)}`}storeSet($,Z,X,G){let Y;try{Y=JSON.stringify(Z).length}catch{Lf("SKIP non-serializable",$);return}if(Y>G){Lf("SKIP oversize",$,`${Y}b > cap ${G}b`);return}this.deleteKey($);while(this.store.size>0&&(this.store.size>=this.maxEntries||this.totalBytes+Y>this.maxTotalBytes)){let Q=this.store.keys().next().value;if(Q===void 0)break;this.deleteKey(Q)}this.store.set($,{value:Z,storedAt:X,bytes:Y}),this.totalBytes+=Y}async fetch($){let{type:Z,connectionId:X,scope:G,params:Y,fetchLive:Q,shouldCache:J,onRevalidation:W}=$,K=this.config[Z],N=this.key(Z,X,G,Y),H=this.now(),F=this.store.get(N),U=F?H-F.storedAt:1/0;if(!F||U>K.maxStaleMs){b40.add(1,{type:Z,outcome:"miss"}),Lf(F?"EXPIRED":"MISS",N);let w=await Q();if(J?.(w)??!0)this.storeSet(N,w,this.now(),K.maxValueBytes);else Lf("NOT-CACHED (shouldCache=false)",N);return w}if(this.store.delete(N),this.store.set(N,F),U>K.revalidateAfterMs&&!this.revalidating.has(N)){b40.add(1,{type:Z,outcome:"stale"}),Lf("STALE \u2192 serve + revalidate",N,`age=${U}ms`),this.revalidating.add(N);let w=Q().then((O)=>{if(J?.(O)??!0)this.storeSet(N,O,this.now(),K.maxValueBytes)}).catch(()=>{b40.add(1,{type:Z,outcome:"error"})}).finally(()=>this.revalidating.delete(N));W?.(w)}else b40.add(1,{type:Z,outcome:"hit"}),Lf("HIT",N,`age=${U}ms`);return F.value}invalidate($){let Z=`${$}:`;for(let X of[...this.store.keys()])if(X.startsWith(Z))this.deleteKey(X)}}function dy0(){return d0().mcpCacheEnabled}function x40(){return dy0()?ly0:null}var b40,f40=1024,Bi1,Yu8,Qu8=2000,Ju8,Wu8,ly0;var y40=B(()=>{K5();V$();b40=J8.createCounter("mcp_read_cache.fetches",{description:"MCP read cache outcomes (hit, stale, miss, error)",unit:"{fetches}"}),Bi1=f40*f40,Yu8={"tools/call":{revalidateAfterMs:30000,maxStaleMs:300000,maxValueBytes:512*f40},"resources/read":{revalidateAfterMs:60000,maxStaleMs:300000,maxValueBytes:4*Bi1},"prompts/get":{revalidateAfterMs:60000,maxStaleMs:300000,maxValueBytes:512*f40}},Ju8=256*Bi1,Wu8=typeof process<"u"&&!!process.env?.MCP_CACHE_DEBUG;ly0=new Di1;J8.createObservableGauge("mcp_read_cache.entries",{description:"Current entry count in the per-pod MCP read cache",unit:"{entries}"}).addCallback(($)=>$.observe(ly0.stats().entries));J8.createObservableGauge("mcp_read_cache.bytes",{description:"Approximate total bytes held in the per-pod MCP read cache",unit:"By"}).addCallback(($)=>$.observe(ly0.stats().bytes))});function zi1($){x40()?.invalidate($)}function Ef($){zi1($);let Z=my0?.();if(!Z)return;try{Z.publish(Li1,Nu8.encode(JSON.stringify({connectionId:$,originId:Ei1})))}catch(X){console.warn("[McpCacheInvalidation] publish failed (non-critical):",X)}}function ji1($){if(my0=$,cd)return;let Z=$();if(!Z)return;cd=Z.subscribe(Li1),(async()=>{for await(let X of cd)try{let G=JSON.parse(Hu8.decode(X.data));if(G.originId===Ei1)continue;zi1(G.connectionId)}catch{}})().catch(console.error)}function Pi1(){cd?.unsubscribe(),cd=null,my0=void 0}var Li1="studio.mcp-cache.invalidate",Ei1,Nu8,Hu8,my0,cd=null;var ld=B(()=>{y40();Ei1=crypto.randomUUID(),Nu8=new TextEncoder,Hu8=new TextDecoder});function Fu8($,Z,X){let G=Object.keys(X??{}),Y=Z?.required??[],Q=Y.filter((K)=>!G.includes(K)),J=(K)=>{let N=Z?.properties?.[K]?.type;return N?`${K} (${N})`:K};return[`Invalid arguments for "${$}".`,Y.length?`Required: ${Y.map(J).join(", ")}.`:"",`You sent: ${G.length?G.join(", "):"(none)"}.`,Q.length?`Missing required: ${Q.join(", ")}.`:""].filter(Boolean).join(" ")}function Ai1($,Z,X,G){if(!($ instanceof B1)||$.code!==R1.InvalidParams)return $;if(!Z)return $;let Y=Fu8(Z,X,G),Q=$.message.replace(/^MCP error -?\d+: /,"");return new B1(R1.InvalidParams,`${Q}
947
+ ) desc`}class Ff{db;constructor($){this.db=$}async create($){let Z=new Date().toISOString(),X=$i1($._meta??{}),G=I40(X),Y=QG(G.tags),Q=QG(G.categories),J={id:$.id,organization_id:$.organization_id,title:$.title,description:$.description??null,server_json:JSON.stringify($.server),meta_json:JSON.stringify(X),tags:T40(Y),categories:T40(Q),is_public:$.is_public?1:0,is_unlisted:$.is_unlisted?1:0,created_at:Z,updated_at:Z,created_by:$.created_by??null};await this.db.insertInto("private_registry_item").values(J).execute();let W=await this.findById($.organization_id,$.id);if(!W)throw Error(`Failed to create registry item "${$.id}"`);return W}async findById($,Z){let X=await this.db.selectFrom("private_registry_item").selectAll().where("organization_id","=",$).where("id","=",Z).executeTakeFirst();return X?this.deserialize(X):null}async findByIdOrName($,Z){let X=await this.findById($,Z);if(X)return X;let G=await this.db.selectFrom("private_registry_item").selectAll().where("organization_id","=",$).where("title","=",Z).executeTakeFirst();return G?this.deserialize(G):null}async update($,Z,X){let G=await this.findById($,Z);if(!G)throw Error(`Registry item not found: ${Z}`);let Y=$i1(X._meta??G._meta??{}),Q=I40(Y),J=QG(Q.tags),W=QG(Q.categories),K={updated_at:new Date().toISOString()};if(X.title!==void 0)K.title=X.title;if(X.description!==void 0)K.description=X.description;if(X.server!==void 0)K.server_json=JSON.stringify(X.server);if(X._meta!==void 0)K.meta_json=JSON.stringify(Y);if(X._meta!==void 0)K.tags=T40(J),K.categories=T40(W);if(X.is_public!==void 0)K.is_public=X.is_public?1:0;if(X.is_unlisted!==void 0)K.is_unlisted=X.is_unlisted?1:0;await this.db.updateTable("private_registry_item").set(K).where("organization_id","=",$).where("id","=",Z).execute();let N=await this.findById($,Z);if(!N)throw Error(`Registry item not found after update: ${Z}`);return N}async delete($,Z){let X=await this.findById($,Z);if(!X)return null;return await this.db.deleteFrom("private_registry_item").where("organization_id","=",$).where("id","=",Z).execute(),X}async list($,Z={}){let X=this.db.selectFrom("private_registry_item").selectAll().where("organization_id","=",$);if(!Z.includeUnlisted)X=X.where("is_unlisted","=",0);let G=QG(Z.tags);if(G.length>0)X=X.where(R40("tags",G));let Y=QG(Z.categories);if(Y.length>0)X=X.where(R40("categories",Y));if(Z.where)X=X.where(_y0(Z.where));let W=(await this.db.selectFrom(X.as("filtered")).select(A$`count(*)::int`.as("count")).executeTakeFirst())?.count??0;X=X.orderBy(Zi1()).orderBy("created_at","desc");let N=P40(Z.cursor)??Z.offset??0,H=Z.limit??24;X=X.limit(H).offset(N);let U=(await X.execute()).map((D)=>this.deserialize(D)),w=N+H<W,O=w?j40(N+H):void 0;return{items:U,totalCount:W,hasMore:w,nextCursor:O}}async listPublic($,Z={}){let X=this.db.selectFrom("private_registry_item").selectAll().where("organization_id","=",$).where("is_public","=",1).where("is_unlisted","=",0),G=QG(Z.tags);if(G.length>0)X=X.where(R40("tags",G));let Y=QG(Z.categories);if(Y.length>0)X=X.where(R40("categories",Y));if(Z.where)X=X.where(_y0(Z.where));let W=(await this.db.selectFrom(X.as("filtered")).select(A$`count(*)::int`.as("count")).executeTakeFirst())?.count??0;X=X.orderBy(Zi1()).orderBy("created_at","desc");let N=P40(Z.cursor)??Z.offset??0,H=Z.limit??24;X=X.limit(H).offset(N);let U=(await X.execute()).map((D)=>this.deserialize(D)),w=N+H<W,O=w?j40(N+H):void 0;return{items:U,totalCount:W,hasMore:w,nextCursor:O}}async getFilters($,Z){let X=this.db.selectFrom("private_registry_item").select(["tags","categories"]).where("organization_id","=",$);if(Z?.publicOnly)X=X.where("is_public","=",1);if(!Z?.includeUnlisted)X=X.where("is_unlisted","=",0);let G=await X.execute(),Y=new Map,Q=new Map;for(let W of G){for(let K of tD(W.tags))Y.set(K,(Y.get(K)??0)+1);for(let K of tD(W.categories))Q.set(K,(Q.get(K)??0)+1)}let J=(W)=>Array.from(W.entries()).map(([K,N])=>({value:K,count:N})).sort((K,N)=>K.value.localeCompare(N.value));return{tags:J(Y),categories:J(Q)}}async search($,Z={},X){let G=this.db.selectFrom("private_registry_item").select(["id","title","description","meta_json","server_json","tags","categories","is_public","is_unlisted"]).where("organization_id","=",$).orderBy("created_at","desc");if(X?.publicOnly)G=G.where("is_public","=",1);if(!X?.includeUnlisted)G=G.where("is_unlisted","=",0);let Y=await G.execute(),Q=Z.query?.trim().toLowerCase(),J=QG(Z.tags),W=QG(Z.categories),K=Y.filter((L)=>{if(Q){let E=A40(L.server_json,{}),z=A40(L.meta_json,{}),j=I40(z).short_description??"";if(![L.id,L.title,L.description??"",E.name??"",E.description??"",j].join(" ").toLowerCase().includes(Q))return!1}if(J.length>0){let E=QG(tD(L.tags));if(!J.every((z)=>E.includes(z)))return!1}if(W.length>0){let E=QG(tD(L.categories));if(!W.every((z)=>E.includes(z)))return!1}return!0}),H=P40(Z.cursor)??0,F=Z.limit??20,U=K.slice(H,H+F),w=H+F<K.length,O=w?j40(H+F):void 0;return{items:U.map((L)=>({id:L.id,title:L.title,tags:tD(L.tags),categories:tD(L.categories),is_public:L.is_public===1,is_unlisted:L.is_unlisted===1})),totalCount:K.length,hasMore:w,nextCursor:O}}deserialize($){let Z=A40($.server_json,{}),X=A40($.meta_json,{});return{id:$.id,name:typeof Z.name==="string"?Z.name:void 0,title:$.title,description:$.description,_meta:X,server:Z,is_public:$.is_public===1,is_unlisted:$.is_unlisted===1,created_at:$.created_at,updated_at:$.updated_at,...$.created_by?{created_by:$.created_by}:{}}}}var nh8,ph8,th8;var vy0=B(()=>{nh8=new Set(["id","title","description","is_public","is_unlisted","created_at","updated_at","created_by"]),ph8=new Set(["is_public","is_unlisted"]),th8={_meta:"meta_json",server:"server_json"}});import{randomUUID as ah8}from"crypto";function Xi1($,Z){if(!$)return Z;try{return JSON.parse($)}catch{return Z}}function Gi1($){if(!$)return null;let Z=PW($);return JSON.stringify(Z?z40($,Z):$)}class Uf{db;constructor($){this.db=$}async createOrUpdate($){let Z=new Date().toISOString(),X=await this.findPendingByRequestedId($.organization_id,$.requested_id);if(X){let J={title:$.title,description:$.description??null,server_json:JSON.stringify($.server),meta_json:Gi1($._meta),requester_name:$.requester_name??null,requester_email:$.requester_email??null,updated_at:Z};await this.db.updateTable("private_registry_publish_request").set(J).where("organization_id","=",$.organization_id).where("id","=",X.id).execute();let W=await this.findById($.organization_id,X.id);if(!W)throw Error("Failed to update publish request");return W}let G=ah8(),Y={id:G,organization_id:$.organization_id,requested_id:$.requested_id,status:"pending",title:$.title,description:$.description??null,server_json:JSON.stringify($.server),meta_json:Gi1($._meta),requester_name:$.requester_name??null,requester_email:$.requester_email??null,reviewer_notes:null,created_at:Z,updated_at:Z};await this.db.insertInto("private_registry_publish_request").values(Y).execute();let Q=await this.findById($.organization_id,G);if(!Q)throw Error("Failed to create publish request");return Q}async findPendingByRequestedId($,Z){let X=await this.db.selectFrom("private_registry_publish_request").selectAll().where("organization_id","=",$).where("requested_id","=",Z).where("status","=","pending").executeTakeFirst();return X?this.deserialize(X):null}async findById($,Z){let X=await this.db.selectFrom("private_registry_publish_request").selectAll().where("organization_id","=",$).where("id","=",Z).executeTakeFirst();return X?this.deserialize(X):null}async list($,Z={}){let X=this.db.selectFrom("private_registry_publish_request").selectAll().where("organization_id","=",$),G=this.db.selectFrom("private_registry_publish_request").select((N)=>N.fn.countAll().as("count")).where("organization_id","=",$);if(Z.status)X=X.where("status","=",Z.status),G=G.where("status","=",Z.status);let Y=await G.executeTakeFirst(),Q=Number(Y?.count??0),J=Z.sortBy??"created_at",W=Z.sortDirection??"desc";if(J==="title")X=X.orderBy("title",W);else X=X.orderBy("created_at",W);return{items:(await X.limit(Z.limit??24).offset(Z.offset??0).execute()).map((N)=>this.deserialize(N)),totalCount:Q}}async updateStatus($,Z,X,G){let Y={status:X,updated_at:new Date().toISOString(),reviewer_notes:G??null};await this.db.updateTable("private_registry_publish_request").set(Y).where("organization_id","=",$).where("id","=",Z).execute();let Q=await this.findById($,Z);if(!Q)throw Error(`Publish request not found: ${Z}`);return Q}async countPending($){let Z=await this.db.selectFrom("private_registry_publish_request").select((X)=>X.fn.countAll().as("count")).where("organization_id","=",$).where("status","=","pending").executeTakeFirst();return Number(Z?.count??0)}async delete($,Z){let X=await this.findById($,Z);if(!X)return null;return await this.db.deleteFrom("private_registry_publish_request").where("organization_id","=",$).where("id","=",Z).execute(),X}deserialize($){return{id:$.id,organization_id:$.organization_id,requested_id:$.requested_id??null,status:$.status,title:$.title,description:$.description,_meta:Xi1($.meta_json,{}),server:Xi1($.server_json,{name:""}),requester_name:$.requester_name,requester_email:$.requester_email,reviewer_notes:$.reviewer_notes,created_at:$.created_at,updated_at:$.updated_at}}}var by0=()=>{};import{createHash as sh8,randomBytes as eh8,randomUUID as $u8}from"crypto";function Yi1($){return sh8("sha256").update($).digest("hex")}function Zu8(){return`prk_${eh8(32).toString("hex")}`}class wf{db;constructor($){this.db=$}async generate($,Z){let X=$u8(),G=Zu8(),Y=await Yi1(G),Q=G.slice(0,12),J=new Date().toISOString();return await this.db.insertInto("private_registry_publish_api_key").values({id:X,organization_id:$,name:Z,key_hash:Y,prefix:Q,created_at:J}).execute(),{entity:{id:X,organization_id:$,name:Z,prefix:Q,created_at:J},key:G}}async list($){return await this.db.selectFrom("private_registry_publish_api_key").select(["id","organization_id","name","prefix","created_at"]).where("organization_id","=",$).orderBy("created_at","desc").execute()}async revoke($,Z){return(await this.db.deleteFrom("private_registry_publish_api_key").where("organization_id","=",$).where("id","=",Z).execute()).length>0}async validate($,Z){let X=await Yi1(Z),G=await this.db.selectFrom("private_registry_publish_api_key").select(["id"]).where("organization_id","=",$).where("key_hash","=",X).executeTakeFirst();return Boolean(G)}async hasKeys($){let Z=await this.db.selectFrom("private_registry_publish_api_key").select((X)=>X.fn.countAll().as("count")).where("organization_id","=",$).executeTakeFirst();return Number(Z?.count??0)>0}}var fy0=()=>{};import{randomUUID as Qi1}from"crypto";function Ji1($,Z){if(!$)return Z;try{return JSON.parse($)}catch{return Z}}class q40{db;constructor($){this.db=$}async create($){let Z=Qi1(),X=new Date().toISOString(),G={id:Z,organization_id:$.organization_id,status:$.status??"pending",config_snapshot:$.config_snapshot?JSON.stringify($.config_snapshot):null,total_items:$.total_items??0,tested_items:0,passed_items:0,failed_items:0,skipped_items:0,current_item_id:null,started_at:$.started_at??null,finished_at:null,created_at:X};await this.db.insertInto("private_registry_monitor_run").values(G).execute();let Y=await this.findById($.organization_id,Z);if(!Y)throw Error(`Failed to create monitor run ${Z}`);return Y}async findById($,Z){let X=await this.db.selectFrom("private_registry_monitor_run").selectAll().where("organization_id","=",$).where("id","=",Z).executeTakeFirst();return X?this.deserializeRun(X):null}async list($,Z={}){let X=this.db.selectFrom("private_registry_monitor_run").selectAll().where("organization_id","=",$),G=this.db.selectFrom("private_registry_monitor_run").select((W)=>W.fn.countAll().as("count")).where("organization_id","=",$);if(Z.status)X=X.where("status","=",Z.status),G=G.where("status","=",Z.status);let Y=await G.executeTakeFirst(),Q=Number(Y?.count??0);return{items:(await X.orderBy("created_at","desc").limit(Z.limit??24).offset(Z.offset??0).execute()).map((W)=>this.deserializeRun(W)),totalCount:Q}}async update($,Z,X){let G={};if(X.total_items!==void 0)G.total_items=X.total_items;if(X.status!==void 0)G.status=X.status;if(X.tested_items!==void 0)G.tested_items=X.tested_items;if(X.passed_items!==void 0)G.passed_items=X.passed_items;if(X.failed_items!==void 0)G.failed_items=X.failed_items;if(X.skipped_items!==void 0)G.skipped_items=X.skipped_items;if(X.current_item_id!==void 0)G.current_item_id=X.current_item_id;if(X.started_at!==void 0)G.started_at=X.started_at;if(X.finished_at!==void 0)G.finished_at=X.finished_at;await this.db.updateTable("private_registry_monitor_run").set(G).where("organization_id","=",$).where("id","=",Z).execute();let Y=await this.findById($,Z);if(!Y)throw Error(`Monitor run not found: ${Z}`);return Y}deserializeRun($){return{id:$.id,organization_id:$.organization_id,status:$.status,config_snapshot:Ji1($.config_snapshot,null),total_items:Number($.total_items??0),tested_items:Number($.tested_items??0),passed_items:Number($.passed_items??0),failed_items:Number($.failed_items??0),skipped_items:Number($.skipped_items??0),current_item_id:$.current_item_id,started_at:$.started_at,finished_at:$.finished_at,created_at:$.created_at}}}class M40{db;constructor($){this.db=$}async create($){let Z=Qi1(),X=new Date().toISOString(),G={id:Z,run_id:$.run_id,organization_id:$.organization_id,item_id:$.item_id,item_title:$.item_title,status:$.status,error_message:$.error_message??null,connection_ok:$.connection_ok?1:0,tools_listed:$.tools_listed?1:0,tool_results:$.tool_results?JSON.stringify($.tool_results):null,agent_summary:$.agent_summary??null,duration_ms:$.duration_ms??0,action_taken:$.action_taken??"none",tested_at:X};await this.db.insertInto("private_registry_monitor_result").values(G).execute();let Y=await this.findById($.organization_id,Z);if(!Y)throw Error("Failed to create test result");return Y}async findById($,Z){let X=await this.db.selectFrom("private_registry_monitor_result").selectAll().where("organization_id","=",$).where("id","=",Z).executeTakeFirst();return X?this.deserialize(X):null}async listByRun($,Z,X={}){let G=this.db.selectFrom("private_registry_monitor_result").selectAll().where("organization_id","=",$).where("run_id","=",Z),Y=this.db.selectFrom("private_registry_monitor_result").select((K)=>K.fn.countAll().as("count")).where("organization_id","=",$).where("run_id","=",Z);if(X.status)G=G.where("status","=",X.status),Y=Y.where("status","=",X.status);let Q=await Y.executeTakeFirst(),J=Number(Q?.count??0);return{items:(await G.orderBy("tested_at","desc").limit(X.limit??50).offset(X.offset??0).execute()).map((K)=>this.deserialize(K)),totalCount:J}}async update($,Z,X){let G={};if(X.status!==void 0)G.status=X.status;if(X.error_message!==void 0)G.error_message=X.error_message;if(X.connection_ok!==void 0)G.connection_ok=X.connection_ok?1:0;if(X.tools_listed!==void 0)G.tools_listed=X.tools_listed?1:0;if(X.tool_results!==void 0)G.tool_results=JSON.stringify(X.tool_results);if(X.agent_summary!==void 0)G.agent_summary=X.agent_summary;if(X.duration_ms!==void 0)G.duration_ms=X.duration_ms;if(X.action_taken!==void 0)G.action_taken=X.action_taken;await this.db.updateTable("private_registry_monitor_result").set(G).where("organization_id","=",$).where("id","=",Z).execute();let Y=await this.findById($,Z);if(!Y)throw Error(`Monitor result not found: ${Z}`);return Y}deserialize($){return{id:$.id,run_id:$.run_id,organization_id:$.organization_id,item_id:$.item_id,item_title:$.item_title,status:$.status,error_message:$.error_message,connection_ok:$.connection_ok===1,tools_listed:$.tools_listed===1,tool_results:Ji1($.tool_results,[]),agent_summary:$.agent_summary,duration_ms:Number($.duration_ms??0),action_taken:$.action_taken,tested_at:$.tested_at}}}var Wi1=()=>{};import{randomUUID as Xu8}from"crypto";class k40{db;constructor($){this.db=$}async findByItemId($,Z){let X=await this.db.selectFrom("private_registry_monitor_connection").selectAll().where("organization_id","=",$).where("item_id","=",Z).executeTakeFirst();return X?this.deserialize(X):null}async list($){return(await this.db.selectFrom("private_registry_monitor_connection").selectAll().where("organization_id","=",$).orderBy("updated_at","desc").execute()).map((X)=>this.deserialize(X))}async findByConnectionId($,Z){let X=await this.db.selectFrom("private_registry_monitor_connection").selectAll().where("organization_id","=",$).where("connection_id","=",Z).executeTakeFirst();return X?this.deserialize(X):null}async upsert($){let Z=await this.findByItemId($.organization_id,$.item_id),X=new Date().toISOString();if(!Z){let Y={id:Xu8(),organization_id:$.organization_id,item_id:$.item_id,connection_id:$.connection_id,auth_status:$.auth_status??"none",created_at:X,updated_at:X};await this.db.insertInto("private_registry_monitor_connection").values(Y).execute()}else{let Y={connection_id:$.connection_id,auth_status:$.auth_status??Z.auth_status,updated_at:X};await this.db.updateTable("private_registry_monitor_connection").set(Y).where("organization_id","=",$.organization_id).where("item_id","=",$.item_id).execute()}let G=await this.findByItemId($.organization_id,$.item_id);if(!G)throw Error("Failed to save monitor connection");return G}async updateAuthStatus($,Z,X){return await this.db.updateTable("private_registry_monitor_connection").set({auth_status:X,updated_at:new Date().toISOString()}).where("organization_id","=",$).where("item_id","=",Z).execute(),this.findByItemId($,Z)}deserialize($){return{id:$.id,organization_id:$.organization_id,item_id:$.item_id,connection_id:$.connection_id,auth_status:$.auth_status,created_at:$.created_at,updated_at:$.updated_at}}}var Ki1=()=>{};var Ni1=B(()=>{vy0();by0();fy0();Wi1();Ki1()});class xy0{db;constructor($){this.db=$}async listOrgTags($){return(await this.db.selectFrom("organization_tags").selectAll().where("organization_id","=",$).orderBy("name","asc").execute()).map((X)=>this.tagFromDbRow(X))}async getTag($){let Z=await this.db.selectFrom("organization_tags").selectAll().where("id","=",$).executeTakeFirst();return Z?this.tagFromDbRow(Z):null}async getTagByName($,Z){let X=await this.db.selectFrom("organization_tags").selectAll().where("organization_id","=",$).where("name","=",Z).executeTakeFirst();return X?this.tagFromDbRow(X):null}async createTag($,Z,X){let G=l8("tag"),Y=new Date().toISOString();await this.db.insertInto("organization_tags").values({id:G,organization_id:$,name:Z,color:X??null,created_at:Y}).onConflict((J)=>J.columns(["organization_id","name"]).doNothing()).execute();let Q=await this.getTagByName($,Z);if(!Q)throw Error(`Failed to create or retrieve tag: ${Z}`);return Q}async deleteTag($){await this.db.deleteFrom("organization_tags").where("id","=",$).execute()}async getMemberTags($){return(await this.db.selectFrom("member_tags").innerJoin("organization_tags","organization_tags.id","member_tags.tag_id").select(["organization_tags.id","organization_tags.organization_id","organization_tags.name","organization_tags.color","organization_tags.created_at"]).where("member_tags.member_id","=",$).orderBy("organization_tags.name","asc").execute()).map((X)=>this.tagFromDbRow(X))}async setMemberTags($,Z){await this.db.transaction().execute(async(X)=>{if(await X.deleteFrom("member_tags").where("member_id","=",$).execute(),Z.length>0){let G=new Date().toISOString();await X.insertInto("member_tags").values(Z.map((Y)=>({id:l8("mtag"),member_id:$,tag_id:Y,created_at:G}))).execute()}})}async addMemberTag($,Z){let X=new Date().toISOString();await this.db.insertInto("member_tags").values({id:l8("mtag"),member_id:$,tag_id:Z,created_at:X}).onConflict((G)=>G.columns(["member_id","tag_id"]).doNothing()).execute()}async removeMemberTag($,Z){await this.db.deleteFrom("member_tags").where("member_id","=",$).where("tag_id","=",Z).execute()}async verifyMemberOrg($,Z){return await this.db.selectFrom("member").select("id").where("id","=",$).where("organizationId","=",Z).executeTakeFirst()!==void 0}async getUserTagsInOrg($,Z){return(await this.db.selectFrom("member").innerJoin("member_tags","member_tags.member_id","member.id").innerJoin("organization_tags","organization_tags.id","member_tags.tag_id").select(["organization_tags.id","organization_tags.organization_id","organization_tags.name","organization_tags.color","organization_tags.created_at"]).where("member.userId","=",$).where("member.organizationId","=",Z).orderBy("organization_tags.name","asc").execute()).map((G)=>this.tagFromDbRow(G))}async getMembersWithTags($){let Z=await this.db.selectFrom("member").leftJoin("member_tags","member_tags.member_id","member.id").leftJoin("organization_tags","organization_tags.id","member_tags.tag_id").select(["member.id as memberId","organization_tags.name as tagName"]).where("member.organizationId","=",$).execute(),X=new Map;for(let G of Z){if(!X.has(G.memberId))X.set(G.memberId,[]);if(G.tagName)X.get(G.memberId).push(G.tagName)}return X}tagFromDbRow($){return{id:$.id,organizationId:$.organization_id,name:$.name,color:$.color??null,createdAt:$.created_at}}}var Hi1=B(()=>{DX()});function Fi1($){return{organizationId:$.organization_id,status:$.status,stripeCustomerId:$.stripe_customer_id,stripeSubscriptionId:$.stripe_subscription_id,currentPeriodEnd:$.current_period_end,lastStripeEventAt:$.last_stripe_event_at,freeTaskExecutions:$.free_task_executions,monthlyTaskExecutions:$.monthly_task_executions}}class bN{db;constructor($){this.db=$}async getBilling($){let Z=await this.db.selectFrom("organization_billing").selectAll().where("organization_id","=",$).executeTakeFirst();return Z?Fi1(Z):null}async getBillingByStripeSubscriptionId($){let Z=await this.db.selectFrom("organization_billing").selectAll().where("stripe_subscription_id","=",$).executeTakeFirst();return Z?Fi1(Z):null}async updateStripeState($,Z){return((await this.db.updateTable("organization_billing").set({...Z.stripeCustomerId!==void 0&&{stripe_customer_id:Z.stripeCustomerId},...Z.stripeSubscriptionId!==void 0&&{stripe_subscription_id:Z.stripeSubscriptionId},...Z.status!==void 0&&{status:Z.status},...Z.currentPeriodEnd!==void 0&&{current_period_end:Z.currentPeriodEnd},...Z.lastStripeEventAt!==void 0&&{last_stripe_event_at:Z.lastStripeEventAt},updated_at:new Date}).where("organization_id","=",$).executeTakeFirst()).numUpdatedRows??0n)>0n}async taskClaim($){let Z=await this.db.selectFrom("task_quota_claims").select(["run_count","state"]).where("task_board_item_id","=",$).executeTakeFirst();return Z?{runCount:Z.run_count,state:Z.state}:null}static liveClaimCount($,Z,X){return $.selectFrom("task_quota_claims").select((G)=>G.fn.countAll().as("count")).where("organization_id","=",Z).where("period_key","=",X).where("state","<>","released").executeTakeFirst().then((G)=>Number(G?.count??0))}async countTaskClaims($,Z){return await bN.liveClaimCount(this.db,$,Z)}async claimTaskUnderLimit($,Z,X,G,Y){return await this.db.transaction().execute(async(Q)=>{await Q.insertInto("organization_billing").values({organization_id:$}).onConflict((K)=>K.column("organization_id").doNothing()).execute(),await Q.selectFrom("organization_billing").select("organization_id").where("organization_id","=",$).forUpdate().executeTakeFirstOrThrow();let J=await Q.selectFrom("task_quota_claims").select(["run_count","state"]).where("task_board_item_id","=",Z).executeTakeFirst();if(J&&J.run_count>=Y)return"runs_exhausted";let W=()=>bN.liveClaimCount(Q,$,X);if(J&&J.state!=="released")return await Q.updateTable("task_quota_claims").set({run_count:J.run_count+1}).where("task_board_item_id","=",Z).execute(),"rerun";if(await W()>=G)return"exhausted";if(J)return await Q.updateTable("task_quota_claims").set({state:"held",period_key:X,run_count:J.run_count+1}).where("task_board_item_id","=",Z).execute(),"claimed";return await Q.insertInto("task_quota_claims").values({task_board_item_id:Z,organization_id:$,period_key:X,state:"held"}).execute(),"claimed"})}async releaseTaskClaim($,Z){await this.db.updateTable("task_quota_claims").set({state:"released"}).where("organization_id","=",$).where("task_board_item_id","=",Z).where("state","=","held").execute()}async rollbackTaskClaim($,Z){await this.db.updateTable("task_quota_claims").set((X)=>({state:"released",run_count:X("run_count","-",1)})).where("organization_id","=",$).where("task_board_item_id","=",Z).where("state","=","held").execute()}}class yy0{db;constructor($){this.db=$}async findById($,Z){let X=await this.db.selectFrom("user").select(["user.id","user.name","user.email","user.image","user.createdAt","user.updatedAt"]).where("user.id","=",$).where((G)=>G.exists(G.selectFrom("member as m1").innerJoin("member as m2","m1.organizationId","m2.organizationId").select("m1.id").where("m1.userId","=",$).where("m2.userId","=",Z))).executeTakeFirst();if(!X)return null;return{id:X.id,name:X.name,email:X.email,role:"",createdAt:X.createdAt,updatedAt:X.updatedAt,image:X.image??void 0}}}function FQ($){if(!$)return!1;return $.split(",").some((X)=>ud.includes(X))}function S40($,Z){let X=Array.isArray(Z)?Z:[Z];if(X.length===0)return!1;let G=$?$.split(","):[];if(G.includes("owner"))return!0;if(G.includes("admin"))return X.every((Y)=>Y!=="owner");return!1}var Of,ud;var UQ=B(()=>{Of=["owner","admin","user"],ud=["owner","admin"]});class oD{userId;toolName;boundAuth;role;connectionId;getToolMeta;organizationId;_granted=!1;constructor($,Z,X,G,Y="self",Q,J){this.userId=$;this.toolName=Z;this.boundAuth=X;this.role=G;this.connectionId=Y;this.getToolMeta=Q;this.organizationId=J}setToolName($){this.toolName=$}setOrganizationId($){this.organizationId=$}getOrganizationId(){return this.organizationId}setRole($){this.role=$}getRole(){return this.role}grant(){this._granted=!0}async check(...$){if(this._granted)return;if(this.toolName?.startsWith("STUDIO_PUBLIC_")||this.toolName?.startsWith("MESH_PUBLIC_")){this.grant();return}if(!this.userId&&!this.boundAuth){if(this.getToolMeta&&await this.isToolPublic()){this.grant();return}throw new Bf("Authentication required. Please provide a valid OAuth token or API key.")}let Z=$.length>0?$:this.toolName?[this.toolName]:[];if(Z.length===0)throw new fN("No resources specified for access check");for(let X of Z)if(await this.checkResource(X)){this.grant();return}throw new fN(`Access denied to: ${Z.join(", ")}`)}async checkResource($){if(!this.userId&&!this.boundAuth)return!1;return this.boundAuth?.isApiKeyPrincipal?this.checkApiKeyAccess($):this.checkMemberAccess($)}async checkApiKeyAccess($){if(!this.boundAuth)return!1;return this.boundAuth.hasPermission({[this.connectionId]:[$]})}async checkMemberAccess($){if(this.userId&&this.role&&NM1.has($))return!0;if(FQ(this.role))return!0;if(!this.boundAuth)return!1;return this.boundAuth.hasPermission({[this.connectionId]:[$]},{organizationId:this.organizationId,role:this.role})}async isToolPublic(){if(this.toolName?.startsWith("STUDIO_PUBLIC_")||this.toolName?.startsWith("MESH_PUBLIC_"))return!0;if(!this.getToolMeta)return!1;try{let $=await this.getToolMeta();if(!$)return!1;let X=PW($)?.public_tool;return X===!0||X==="true"}catch{return!1}}granted(){return this._granted}}var Bf,fN;var rD=B(()=>{zv();UQ();Bf=class Bf extends Error{constructor($){super($);this.name="UnauthorizedError"}};fN=class fN extends Error{constructor($){super($);this.name="ForbiddenError"}}});function Ui1($){let Z={};for(let X of Object.keys($))Z[X]=["*"];return Z}function RX($){let Z=$?.metadata;if(!Z)return!1;try{return(typeof Z==="string"?JSON.parse(Z):Z).archived===!0}catch{return!1}}function V40($,Z){return $.get(wi1[Z])??$.get(Oi1[Z])}function gy0($,Z,X){$[wi1[Z]]=X,$[Oi1[Z]]=X}var wi1,Oi1;var hy0=B(()=>{wi1={token:"x-studio-token",client:"x-studio-client",properties:"x-studio-properties",runMetadata:"x-studio-run-metadata"},Oi1={token:"x-mesh-token",client:"x-mesh-client",properties:"x-mesh-properties",runMetadata:"x-mesh-run-metadata"}});function C40($){let Z=mU.get($);if(!Z||Z.state==="CLOSED")return;if(Z.state==="HALF_OPEN"){if(Z.halfOpenInFlight){if(Date.now()-Z.halfOpenStartedAt<vy1)throw new Df($,0)}Z.halfOpenInFlight=!0,Z.halfOpenStartedAt=Date.now();return}let X=Date.now()-Z.lastFailureTime;if(X>=ob0){Z.state="HALF_OPEN",Z.halfOpenInFlight=!0,Z.halfOpenStartedAt=Date.now();return}throw new Df($,ob0-X)}function _40($){mU.delete($)}function v40($){let Z=mU.get($);if(!Z){Gu8(),mU.set($,{state:1>=tb0?"OPEN":"CLOSED",consecutiveFailures:1,lastFailureTime:Date.now(),halfOpenInFlight:!1,halfOpenStartedAt:0});return}if(Z.consecutiveFailures++,Z.lastFailureTime=Date.now(),Z.halfOpenInFlight=!1,Z.consecutiveFailures>=tb0)Z.state="OPEN"}function Gu8(){if(mU.size<X80)return;let $=null,Z=1/0;for(let[X,G]of mU)if(G.lastFailureTime<Z)Z=G.lastFailureTime,$=X;if($)mU.delete($)}var mU,Df;var uy0=B(()=>{K5();mU=new Map;J8.createObservableGauge("mcp_circuit_breaker.circuits",{description:"MCP connection circuits by state (open, half_open)",unit:"{circuits}"}).addCallback(($)=>{let Z=0,X=0;for(let G of mU.values())if(G.state==="OPEN")Z++;else if(G.state==="HALF_OPEN")X++;$.observe(Z,{state:"open"}),$.observe(X,{state:"half_open"})});Df=class Df extends Error{cooldownRemainingMs;constructor($,Z){super(`Connection ${$} circuit breaker is open \u2014 downstream server unreachable. `+`Retry in ${Math.ceil(Z/1000)}s.`);this.name="CircuitOpenError",this.cooldownRemainingMs=Z}}});function Lf(...$){if(Wu8)console.log("[mcp-read-cache]",...$)}function Ku8($){return $.kind==="org"?"org":`u:${$.userId}`}function cy0($){if($===null||typeof $!=="object")return JSON.stringify($)??"null";if(Array.isArray($))return`[${$.map(cy0).join(",")}]`;return`{${Object.keys($).sort().map((X)=>`${JSON.stringify(X)}:${cy0($[X])}`).join(",")}}`}class Di1{config;maxEntries;now;maxTotalBytes;store=new Map;revalidating=new Set;totalBytes=0;constructor($=Yu8,Z=Qu8,X=()=>Date.now(),G=Ju8){this.config=$;this.maxEntries=Z;this.now=X;this.maxTotalBytes=G}stats(){return{entries:this.store.size,bytes:this.totalBytes}}deleteKey($){let Z=this.store.get($);if(Z)this.store.delete($),this.totalBytes-=Z.bytes}key($,Z,X,G){return`${Z}:${Ku8(X)}:${$}:${cy0(G)}`}storeSet($,Z,X,G){let Y;try{Y=JSON.stringify(Z).length}catch{Lf("SKIP non-serializable",$);return}if(Y>G){Lf("SKIP oversize",$,`${Y}b > cap ${G}b`);return}this.deleteKey($);while(this.store.size>0&&(this.store.size>=this.maxEntries||this.totalBytes+Y>this.maxTotalBytes)){let Q=this.store.keys().next().value;if(Q===void 0)break;this.deleteKey(Q)}this.store.set($,{value:Z,storedAt:X,bytes:Y}),this.totalBytes+=Y}async fetch($){let{type:Z,connectionId:X,scope:G,params:Y,fetchLive:Q,shouldCache:J,onRevalidation:W}=$,K=this.config[Z],N=this.key(Z,X,G,Y),H=this.now(),F=this.store.get(N),U=F?H-F.storedAt:1/0;if(!F||U>K.maxStaleMs){b40.add(1,{type:Z,outcome:"miss"}),Lf(F?"EXPIRED":"MISS",N);let w=await Q();if(J?.(w)??!0)this.storeSet(N,w,this.now(),K.maxValueBytes);else Lf("NOT-CACHED (shouldCache=false)",N);return w}if(this.store.delete(N),this.store.set(N,F),U>K.revalidateAfterMs&&!this.revalidating.has(N)){b40.add(1,{type:Z,outcome:"stale"}),Lf("STALE \u2192 serve + revalidate",N,`age=${U}ms`),this.revalidating.add(N);let w=Q().then((O)=>{if(J?.(O)??!0)this.storeSet(N,O,this.now(),K.maxValueBytes)}).catch(()=>{b40.add(1,{type:Z,outcome:"error"})}).finally(()=>this.revalidating.delete(N));W?.(w)}else b40.add(1,{type:Z,outcome:"hit"}),Lf("HIT",N,`age=${U}ms`);return F.value}invalidate($){let Z=`${$}:`;for(let X of[...this.store.keys()])if(X.startsWith(Z))this.deleteKey(X)}}function dy0(){return d0().mcpCacheEnabled}function x40(){return dy0()?ly0:null}var b40,f40=1024,Bi1,Yu8,Qu8=2000,Ju8,Wu8,ly0;var y40=B(()=>{K5();V$();b40=J8.createCounter("mcp_read_cache.fetches",{description:"MCP read cache outcomes (hit, stale, miss, error)",unit:"{fetches}"}),Bi1=f40*f40,Yu8={"tools/call":{revalidateAfterMs:30000,maxStaleMs:300000,maxValueBytes:512*f40},"resources/read":{revalidateAfterMs:60000,maxStaleMs:300000,maxValueBytes:4*Bi1},"prompts/get":{revalidateAfterMs:60000,maxStaleMs:300000,maxValueBytes:512*f40}},Ju8=256*Bi1,Wu8=typeof process<"u"&&!!process.env?.MCP_CACHE_DEBUG;ly0=new Di1;J8.createObservableGauge("mcp_read_cache.entries",{description:"Current entry count in the per-pod MCP read cache",unit:"{entries}"}).addCallback(($)=>$.observe(ly0.stats().entries));J8.createObservableGauge("mcp_read_cache.bytes",{description:"Approximate total bytes held in the per-pod MCP read cache",unit:"By"}).addCallback(($)=>$.observe(ly0.stats().bytes))});function zi1($){x40()?.invalidate($)}function Ef($){zi1($);let Z=my0?.();if(!Z)return;try{Z.publish(Li1,Nu8.encode(JSON.stringify({connectionId:$,originId:Ei1})))}catch(X){console.warn("[McpCacheInvalidation] publish failed (non-critical):",X)}}function ji1($){if(my0=$,cd)return;let Z=$();if(!Z)return;cd=Z.subscribe(Li1),(async()=>{for await(let X of cd)try{let G=JSON.parse(Hu8.decode(X.data));if(G.originId===Ei1)continue;zi1(G.connectionId)}catch{}})().catch(console.error)}function Pi1(){cd?.unsubscribe(),cd=null,my0=void 0}var Li1="studio.mcp-cache.invalidate",Ei1,Nu8,Hu8,my0,cd=null;var ld=B(()=>{y40();Ei1=crypto.randomUUID(),Nu8=new TextEncoder,Hu8=new TextDecoder});function Fu8($,Z,X){let G=Object.keys(X??{}),Y=Z?.required??[],Q=Y.filter((K)=>!G.includes(K)),J=(K)=>{let N=Z?.properties?.[K]?.type;return N?`${K} (${N})`:K};return[`Invalid arguments for "${$}".`,Y.length?`Required: ${Y.map(J).join(", ")}.`:"",`You sent: ${G.length?G.join(", "):"(none)"}.`,Q.length?`Missing required: ${Q.join(", ")}.`:""].filter(Boolean).join(" ")}function Ai1($,Z,X,G){if(!($ instanceof B1)||$.code!==R1.InvalidParams)return $;if(!Z)return $;let Y=Fu8(Z,X,G),Q=$.message.replace(/^MCP error -?\d+: /,"");return new B1(R1.InvalidParams,`${Q}
948
948
 
949
949
  ${Y}`,$.data)}var Ti1=B(()=>{c5()});async function Uu8($,Z,X){if(!$)return!1;let G=await $.get("tools",Z).catch(()=>null);if(!G)return!1;for(let Y of G)if(typeof Y==="object"&&Y!==null&&Y.name===X)return Y.annotations?.readOnlyHint===!0;return!1}function iy0(){return{kind:"org"}}function iU($,Z,X,G){let Y=new P9({name:`lazy-${$.id}`,version:"1.0.0"},{capabilities:{},jsonSchemaValidator:e6}),Q=$.metadata?.isDevConnection===!0,J=null;function W(){if(C40($.id),!J)J=R5($,Z,X).then((O)=>{return _40($.id),O}).catch((O)=>{throw J=null,v40($.id),O});return J}let K=(O,D)=>O!==void 0||D!==void 0,N=(O,D,L,E)=>{return async(z,j)=>{if($.connection_type==="VIRTUAL"||Q||!G||K(z,j)){let P=await W();return D(P,z,j)}let A=await LU(O,$.id,async()=>{let P=await W(),M=await D(P);return L(M)},G,(P)=>Z.pendingRevalidations.push(P),DU);return E(A??[])}};Y.listTools=N("tools",(O,D,L)=>O.listTools(D,L),(O)=>O.tools,(O)=>({tools:O})),Y.listResources=N("resources",(O,D,L)=>O.listResources(D,L),(O)=>O.resources,(O)=>({resources:O})),Y.listPrompts=N("prompts",(O,D,L)=>O.listPrompts(D,L),(O)=>O.prompts,(O)=>({prompts:O}));let H=x40(),F=$.connection_type!=="VIRTUAL"&&!Q,U=async(O,D,L)=>{let E=O?.name,z=F&&typeof E==="string"&&await Uu8(G,$.id,E);if(H&&z&&!D)return await H.fetch({type:"tools/call",connectionId:$.id,scope:iy0(),params:{name:E,arguments:O?.arguments},fetchLive:async()=>{return(await W()).callTool(O,D,L)},shouldCache:(P)=>P?.isError!==!0,onRevalidation:(P)=>Z.pendingRevalidations.push(P)});let j=await W();if(H&&F&&!z)try{return await j.callTool(O,D,L)}finally{Ef($.id)}return j.callTool(O,D,L)};Y.callTool=async(O,D,L)=>{try{return await U(O,D,L)}catch(E){let z=O?.name;if(E instanceof B1&&E.code===R1.InvalidParams&&typeof z==="string"&&G){let A=(await G.get("tools",$.id).catch(()=>null))?.find((P)=>typeof P==="object"&&P!==null&&P.name===z);throw Ai1(E,z,A?.inputSchema,O?.arguments)}throw E}},Y.getPrompt=async(O,D)=>{if(!H||!F)return(await W()).getPrompt(O,D);return await H.fetch({type:"prompts/get",connectionId:$.id,scope:iy0(),params:O,fetchLive:async()=>{return(await W()).getPrompt(O,D)},onRevalidation:(E)=>Z.pendingRevalidations.push(E)})},Y.readResource=async(O,D)=>{if(!H||!F){if(process.env?.MCP_CACHE_DEBUG)console.log("[mcp-read-cache] BYPASS (VIRTUAL)",$.id,"resources/read");return(await W()).readResource(O,D)}return await H.fetch({type:"resources/read",connectionId:$.id,scope:iy0(),params:O,fetchLive:async()=>{return(await W()).readResource(O,D)},onRevalidation:(E)=>Z.pendingRevalidations.push(E)})},Y.listResourceTemplates=async(O,D)=>{return(await W()).listResourceTemplates(O,D)};let w=Y.close.bind(Y);return Y.close=async()=>{if(J){let O=await J.catch(()=>null);if(O)await O.close().catch(()=>{})}await w()},Y}var dd=B(()=>{KW();PX();c5();uy0();md();ld();HY();y40();Ti1()});function ny0($){return{client:{callTool:$.callTool.bind($),listTools:$.listTools.bind($)}}}async function wu8($,Z,{superUser:X}){if(!X&&!Z.organization?.id)throw Error("Organization context is required");let G=typeof $==="string"?await Z.storage.connections.findById($,Z.organization?.id):$;if(!G)throw Error("Connection not found");if(Z.organization&&G.organization_id!==Z.organization.id)throw Error("Connection does not belong to the active organization");if(!Z.organization){let N=await Z.db.selectFrom("organization").select(["id","slug","name"]).where("id","=",G.organization_id).executeTakeFirst();Z.organization=N?{id:N.id,slug:N.slug,name:N.name}:{id:G.organization_id}}if(G.status!=="active")throw Error(`Connection inactive: ${G.status}`);let Y=iU(G,Z,X,l5()??void 0),Q=BD(Y,{name:"mcp-cms-proxy-client",version:"1.0.0"},{capabilities:{tools:{},resources:{},prompts:{}},toolCallTimeoutMs:Jb}),{client:J,server:W}=jb0();await Q.connect(W);let K=new P9({name:"mcp-cms-proxy-client",version:"1.0.0"},{jsonSchemaValidator:e6});return await K.connect(J),K}async function Ri1($,Z){return wu8($,Z,{superUser:!1})}var py0=B(()=>{dd();HY();PX();KW()});function ty0($,Z){for(let[X,G]of Object.entries(Z)){let Y=$[X];if(!Y||Y.length===0){let J=$["*"];if(!J||J.length===0)return!1;if(J.includes("*"))continue;let W=new Set(J);for(let K of G)if(!W.has(K))return!1;continue}if(Y.includes("*"))continue;let Q=new Set(Y);for(let J of G)if(!Q.has(J))return!1}return!0}import{adminAc as Ii1,memberAc as Ou8}from"@decocms/better-auth/plugins/organization/access";function ry0($){let Z=["*",...$];return{user:{self:[...r00],...Ou8.statements},admin:{self:Z,...Ii1.statements},owner:{self:Z,...Ii1.statements}}}function Bu8($,Z){for(let[X,G]of Object.entries(Z)){let Y=$[X];if(!Y)return!1;for(let Q of G)if(!Y.includes(Q)&&!Y.includes("*"))return!1}return!0}function qi1($,Z,X){if(!$)return"fallback";if($.includes(","))return"fallback";if(!Of.includes($))return"fallback";let G=X[$];if(!G)return"fallback";return Bu8(G,Z)?"grant":"deny"}function Mi1(){if(!oy0){let $=Object.values(oB()).flatMap((Z)=>Z.map((X)=>X.name));oy0=ry0($)}return oy0}var oy0;var ay0=B(()=>{zv();UQ()});var nU="New chat";function Si1(){return`<platform>
950
950
  You are an AI agent running on Deco CMS \u2014 a control plane for connecting
@@ -1037,7 +1037,7 @@ Keep both indexes concise \u2014 a curated list of durable facts and one-line po
1037
1037
  - \`org/public/<set>/\` \u2014 curated read-only skill sets, mounted here. Your skills are listed in the <available-skills> catalog; load one with the \`skill\` tool before applying it.
1038
1038
  - \`org/upload/\` \u2014 files the user attached to this conversation are already here; read them directly (no copy step needed).
1039
1039
  - \`org/output/\` \u2014 write final deliverables here; they are shared back to the organization under this run's folder.
1040
- </organization-filesystem>`}var pU=B(()=>{aD();ey0()});function $g0($){let Z=new Map;for(let G of $){let Y=Z.get(G.message_id);if(Y)Y.push(G);else Z.set(G.message_id,[G])}let X=[];for(let[G,Y]of Z){let Q=[...Y].sort((W,K)=>W.seq-K.seq),J=Q[0];X.push({id:G,role:J.role,parts:Q.filter((W)=>W.kind!=="finish").map((W)=>W.payload&&typeof W.payload==="object"&&!Array.isArray(W.payload)?{...W.payload,created_at:W.created_at}:W.payload),created_at:J.created_at,status:Q.some((W)=>W.kind==="finish")?"complete":"in_progress",metadata:Q.find((W)=>W.kind==="finish")?.metadata??null})}return X.sort((G,Y)=>G.created_at<Y.created_at?-1:G.created_at>Y.created_at?1:0),X}function Eu8($,Z){let X=0,G=0,Y=[$];while(Y.length>0){if(X>Z||++G>Du8)return 1/0;let Q=Y.pop();if(typeof Q==="string")X+=Q.length;else if(Array.isArray(Q))for(let J of Q)Y.push(J);else if(Q!==null&&typeof Q==="object")for(let J of Object.values(Q))Y.push(J)}return X}function Pu8($){return $.replace(zu8,"").replace(ju8,"\uFFFD")}function vi1($){if(Eu8($,_i1)>_i1)return JSON.stringify({truncated:!0,reason:"payload exceeds max stored size"});return JSON.stringify($,(Z,X)=>typeof X==="string"?Pu8(X):X)}class Zg0{db;constructor($){this.db=$}async serializeParts($){let Z=new Set,X=[],G=new Map;for(let Y=0;Y<$.length;Y++){let Q=$[Y];if(Z.has(Q.id))continue;if(Z.add(Q.id),G.set(Q.id,Q),X.push({id:Q.id,seq:Q.seq,org_id:Q.org_id,thread_id:Q.thread_id,run_id:Q.run_id,message_id:Q.message_id,role:Q.role,kind:Q.kind,payload:vi1(Q.payload),payload_ref:Q.payload_ref??null,metadata:Q.metadata!=null?vi1(Q.metadata):null,created_at:Q.created_at}),(Y+1)%Lu8===0)await a$(0)}return{rows:X,partsById:G}}async appendParts($){if($.length===0)return[];let{rows:Z,partsById:X}=await this.serializeParts($);return(await this.db.insertInto("thread_message_parts").values(Z).onConflict((Y)=>Y.column("id").doNothing()).returning("id").execute()).map((Y)=>X.get(Y.id)).filter((Y)=>Y!==void 0)}async replaceMessageParts($,Z,X){let{rows:G}=await this.serializeParts(X);return await this.db.transaction().execute(async(Y)=>{let Q=await Y.selectFrom("thread_message_parts").select((K)=>K.fn.min("created_at").as("created_at")).where("thread_id","=",$).where("message_id","=",Z).executeTakeFirst(),J=Q?.created_at!=null?new Date(Q.created_at).getTime():null,W=J!=null&&Number.isFinite(J)?G.map((K)=>({...K,created_at:new Date(J+K.seq).toISOString()})):G;if(await Y.deleteFrom("thread_message_parts").where("thread_id","=",$).where("message_id","=",Z).execute(),W.length>0)await Y.insertInto("thread_message_parts").values(W).onConflict((K)=>K.column("id").doUpdateSet((N)=>({seq:N.ref("excluded.seq"),role:N.ref("excluded.role"),kind:N.ref("excluded.kind"),payload:N.ref("excluded.payload"),payload_ref:N.ref("excluded.payload_ref"),metadata:N.ref("excluded.metadata"),created_at:N.ref("excluded.created_at")}))).execute()}),X}async deleteMessageParts($,Z){await this.db.deleteFrom("thread_message_parts").where("thread_id","=",$).where("message_id","=",Z).execute()}async maxCreatedAtMsForRun($){let Z=await this.db.selectFrom("thread_message_parts").select((G)=>G.fn.max("created_at").as("max")).where("run_id","=",$).executeTakeFirst();if(!Z?.max)return null;let X=new Date(Z.max).getTime();return Number.isFinite(X)?X:null}async maxCreatedAtMsForMessage($,Z){let X=await this.db.selectFrom("thread_message_parts").select((Y)=>Y.fn.max("created_at").as("max")).where("run_id","=",$).where("message_id","=",Z).executeTakeFirst();if(!X?.max)return null;let G=new Date(X.max).getTime();return Number.isFinite(G)?G:null}async loadWindow($,Z){let X=await this.db.selectFrom("thread_message_parts").select(["message_id"]).where("thread_id","=",$).where("kind","=","finish").orderBy("created_at","desc").orderBy("id","desc").limit(Z.limit).offset(Z.offset??0).execute(),G=await this.db.selectFrom("thread_message_parts").select((K)=>K.fn.count("id").as("count")).where("thread_id","=",$).where("kind","=","finish").executeTakeFirst(),Y=Number(G?.count??0),Q=Z.includeInFlight&&(Z.offset??0)===0?await this.db.selectFrom("thread_message_parts as p").select("p.message_id").distinct().where("p.thread_id","=",$).where((K)=>K.not(K.exists(K.selectFrom("thread_message_parts as f").select("f.id").whereRef("f.message_id","=","p.message_id").where("f.thread_id","=",$).where("f.kind","=","finish")))).execute():[],J=[...X.map((K)=>K.message_id),...Q.map((K)=>K.message_id)];if(J.length===0)return{messages:[],total:Y};let W=await this.db.selectFrom("thread_message_parts").selectAll().where("thread_id","=",$).where("message_id","in",J).orderBy("seq","asc").execute();return{messages:$g0(W),total:Y}}async backfillFromMessages($,Z){let X=[],G=0;for(let Y of $)X.push({id:`${Z.runId}:${Y.id}:content`,seq:G++,org_id:Z.orgId,thread_id:Z.threadId,run_id:Z.runId,message_id:Y.id,role:Y.role,kind:"text",payload:Y.parts,payload_ref:null,metadata:Y.metadata??null,created_at:Y.created_at}),X.push({id:`${Z.runId}:${Y.id}:finish`,seq:G++,org_id:Z.orgId,thread_id:Z.threadId,run_id:Z.runId,message_id:Y.id,role:Y.role,kind:"finish",payload:{},payload_ref:null,metadata:null,created_at:Y.created_at});await this.appendParts(X)}}var _i1=50000000,Du8=1e5,Lu8=25,zu8,ju8;var bi1=B(()=>{W5();zu8=/\u0000/g,ju8=/[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?<![\uD800-\uDBFF])[\uDC00-\uDFFF]/g});import{sql as zf}from"kysely";function sD($){return typeof $==="string"?$:$.toISOString()}function fi1($){return $.replace(/[\\%_]/g,"\\$&")}class Xg0{inner;organizationId;constructor($,Z){this.inner=$;this.organizationId=Z}requireOrg(){if(!this.organizationId)throw Error("OrgScopedThreadStorage: thread operations require an authenticated organization");return this.organizationId}setOrganizationId($){this.organizationId=$}getOrganizationId(){return this.organizationId}create($){let Z=this.requireOrg();return this.inner.create({...$,organization_id:Z})}get($){return this.inner.get($,this.requireOrg())}update($,Z){return this.inner.update($,this.requireOrg(),Z)}pinRuntimeIfUnset($,Z){return this.inner.pinRuntimeIfUnset($,this.requireOrg(),Z)}completeRunIfNotCompleted($){return this.inner.completeRunIfNotCompleted($,this.requireOrg())}markRunFailed($,Z,X){return this.inner.markRunFailed($,this.requireOrg(),Z,X)}requiresActionIfInProgress($){return this.inner.requiresActionIfInProgress($,this.requireOrg())}forceFailIfInProgress($,Z){return this.inner.forceFailIfInProgress($,this.requireOrg(),Z)}delete($){return this.inner.delete($,this.requireOrg())}list($,Z){return this.inner.list(this.requireOrg(),$,Z)}listByTriggerIds($,Z){return this.inner.listByTriggerIds(this.requireOrg(),$,Z)}findLastUsedByVirtualMcpIds($){return this.inner.findLastUsedByVirtualMcpIds(this.requireOrg(),$)}bumpProgress($){return this.inner.bumpProgress($,this.requireOrg())}getProgress($){return this.inner.getProgress($,this.requireOrg())}listMessages($,Z){return this.inner.listMessages($,this.requireOrg(),Z)}listWithLastMessage($){return this.inner.listWithLastMessage(this.requireOrg(),$)}messageParts(){return this.inner.messageParts()}getRunFence($){return this.inner.getRunFence($)}setRunFence($,Z){return this.inner.setRunFence($,Z)}setCancelRequested($,Z){return this.inner.setCancelRequested($,Z)}getCancelRequestedAt($){return this.inner.getCancelRequestedAt($)}clearCancelRequested($){return this.inner.clearCancelRequested($)}bumpAckedSeq($,Z,X){return this.inner.bumpAckedSeq($,this.requireOrg(),Z,X)}getAckedSeq($){return this.inner.getAckedSeq($,this.requireOrg())}}class jf{db;constructor($){this.db=$}messageParts(){return new Zg0(this.db)}async create($){let Z=$.id??l8("thrd"),X=new Date().toISOString();if(!$.organization_id)throw Error("organization_id is required");if(!$.created_by)throw Error("created_by is required");if(!$.title)$.title=nU;let G={id:Z,organization_id:$.organization_id,title:$.title,description:$.description??null,status:$.status??"completed",trigger_id:$.trigger_id??null,virtual_mcp_id:$.virtual_mcp_id??"",branch:$.branch??null,sandbox_provider_kind:$.sandbox_provider_kind??null,harness_id:$.harness_id??null,created_at:X,updated_at:X,created_by:$.created_by,updated_by:$.updated_by??null,...$.message_storage_version!==void 0?{message_storage_version:$.message_storage_version}:{},...$.metadata!==void 0?{metadata:JSON.stringify($.metadata)}:{}},Y=await this.db.insertInto("threads").values(G).onConflict((J)=>J.column("id").doNothing()).returningAll().executeTakeFirst();if(Y)return{...this.threadFromDbRow(Y),isNew:!0};let Q=await this.db.selectFrom("threads").selectAll().where("id","=",Z).where("organization_id","=",$.organization_id).executeTakeFirstOrThrow();return{...this.threadFromDbRow(Q),isNew:!1}}async get($,Z){let X=await this.db.selectFrom("threads").selectAll().where("id","=",$).where("organization_id","=",Z).executeTakeFirst();return X?this.threadFromDbRow(X):null}async update($,Z,X){let Y={updated_at:new Date().toISOString()};if(X.title!==void 0)Y.title=X.title;if(X.description!==void 0)Y.description=X.description;if(X.updated_by!==void 0)Y.updated_by=X.updated_by;if(X.hidden!==void 0)Y.hidden=X.hidden;if(X.status!==void 0)Y.status=X.status;if(X.context_start_message_id!==void 0)Y.context_start_message_id=X.context_start_message_id;if(X.run_owner_pod!==void 0)Y.run_owner_pod=X.run_owner_pod;if(X.run_config!==void 0)Y.run_config=X.run_config?JSON.stringify(X.run_config):null;if(X.run_started_at!==void 0)Y.run_started_at=X.run_started_at;if(X.last_progress_at!==void 0)Y.last_progress_at=X.last_progress_at;if(X.failure_reason!==void 0)Y.failure_reason=X.failure_reason;if(X.failure_kind!==void 0)Y.failure_kind=X.failure_kind;if(X.metadata!==void 0)Y.metadata=JSON.stringify(X.metadata);if(X.branch!==void 0)Y.branch=X.branch;if(X.virtual_mcp_id!==void 0)Y.virtual_mcp_id=X.virtual_mcp_id;if(X.sandbox_provider_kind!==void 0)Y.sandbox_provider_kind=X.sandbox_provider_kind;if(X.harness_id!==void 0)Y.harness_id=X.harness_id;if(X.message_storage_version!==void 0)Y.message_storage_version=X.message_storage_version;await this.db.updateTable("threads").set(Y).where("id","=",$).where("organization_id","=",Z).execute();let Q=await this.get($,Z);if(!Q)throw Error("Thread not found after update");return Q}async pinRuntimeIfUnset($,Z,X){let G=await this.db.updateTable("threads").set({harness_id:X.harnessId,sandbox_provider_kind:zf`coalesce(${zf.ref("sandbox_provider_kind")}, ${X.sandboxProviderKind})`,branch:zf`coalesce(${zf.ref("branch")}, ${X.branch})`,updated_at:new Date().toISOString(),...X.messageStorageVersion!==void 0?{message_storage_version:X.messageStorageVersion}:{}}).where("id","=",$).where("organization_id","=",Z).where("harness_id","is",null).where((Y)=>X.sandboxProviderKind===null?Y("sandbox_provider_kind","is",null):Y.or([Y("sandbox_provider_kind","is",null),Y("sandbox_provider_kind","=",X.sandboxProviderKind)])).returningAll().executeTakeFirst();if(G)return{thread:this.threadFromDbRow(G),claimed:!0};return{thread:await this.get($,Z),claimed:!1}}async completeRunIfNotCompleted($,Z){let G=(await this.db.updateTable("threads").set({status:"completed",run_owner_pod:null,run_config:null,run_started_at:null,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("status","=","in_progress").returningAll().execute())[0];return G?this.threadFromDbRow(G):null}async markRunFailed($,Z,X,G){let Q=(await this.db.updateTable("threads").set({status:"failed",failure_reason:X,failure_kind:G,run_owner_pod:null,run_config:null,run_started_at:null,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("status","=","in_progress").returningAll().execute())[0];return Q?this.threadFromDbRow(Q):null}async requiresActionIfInProgress($,Z){let G=(await this.db.updateTable("threads").set({status:"requires_action",run_config:null,run_started_at:null,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("status","=","in_progress").returningAll().execute())[0];return G?this.threadFromDbRow(G):null}async forceFailIfInProgress($,Z,X){let G=new Date().toISOString(),Y=this.db.updateTable("threads").set({status:"failed",updated_at:G}).where("id","=",$).where("organization_id","=",Z).where("status","=","in_progress");if(X!=null)Y=Y.where("run_fence_token","=",X);return((await Y.executeTakeFirst()).numUpdatedRows??BigInt(0))>BigInt(0)}async delete($,Z){await this.db.deleteFrom("threads").where("id","=",$).where("organization_id","=",Z).execute()}async list($,Z,X){let G=X?.includeArchived===!0,Y=this.db.selectFrom("threads").selectAll().where("organization_id","=",$).where("hidden","=",G).orderBy("updated_at","desc");if(Z)Y=Y.where("created_by","=",Z);let Q=X?.virtualMcpId??X?.agentId;if(Q)Y=Y.where("virtual_mcp_id","=",Q);if(X?.hasTrigger===!0)Y=Y.where("trigger_id","is not",null);else if(X?.hasTrigger===!1)Y=Y.where("trigger_id","is",null);if(X?.startDate)Y=Y.where("updated_at",">=",X.startDate);if(X?.endDate)Y=Y.where("updated_at","<=",X.endDate);if(X?.search)Y=Y.where("title","ilike",`%${fi1(X.search)}%`);if(X?.status)Y=Y.where("status","=",X.status);let J=this.db.selectFrom("threads").select((N)=>N.fn.count("id").as("count")).where("organization_id","=",$).where("hidden","=",G);if(Z)J=J.where("created_by","=",Z);if(Q)J=J.where("virtual_mcp_id","=",Q);if(X?.hasTrigger===!0)J=J.where("trigger_id","is not",null);else if(X?.hasTrigger===!1)J=J.where("trigger_id","is",null);if(X?.startDate)J=J.where("updated_at",">=",X.startDate);if(X?.endDate)J=J.where("updated_at","<=",X.endDate);if(X?.search)J=J.where("title","ilike",`%${fi1(X.search)}%`);if(X?.status)J=J.where("status","=",X.status);if(X?.limit)Y=Y.limit(X.limit);if(X?.offset)Y=Y.offset(X.offset);let[W,K]=await Promise.all([Y.execute(),J.executeTakeFirst()]);return{threads:W.map((N)=>this.threadFromDbRow(N)),total:Number(K?.count||0)}}async listByTriggerIds($,Z,X){if(Z.length===0)return{threads:[],total:0};let G=this.db.selectFrom("threads").selectAll().where("organization_id","=",$).where("hidden","=",!1).where("trigger_id","in",Z).orderBy("updated_at","desc"),Y=this.db.selectFrom("threads").select((W)=>W.fn.count("id").as("count")).where("organization_id","=",$).where("hidden","=",!1).where("trigger_id","in",Z);if(X?.limit)G=G.limit(X.limit);if(X?.offset)G=G.offset(X.offset);let[Q,J]=await Promise.all([G.execute(),Y.executeTakeFirst()]);return{threads:Q.map((W)=>this.threadFromDbRow(W)),total:Number(J?.count||0)}}async findLastUsedByVirtualMcpIds($,Z){let X=new Map;if(Z.length===0)return X;let G=await this.db.selectFrom("threads").distinctOn("virtual_mcp_id").select(["virtual_mcp_id","created_by","created_at"]).where("organization_id","=",$).where("virtual_mcp_id","in",Z).orderBy("virtual_mcp_id").orderBy("created_at","desc").execute();for(let Y of G)X.set(Y.virtual_mcp_id,{last_used_at:sD(Y.created_at),last_used_by:Y.created_by});return X}async listWithLastMessage($,Z){let X=this.db.selectFrom("threads as t").innerJoinLateral((Y)=>Y.selectFrom("thread_messages as m").selectAll().whereRef("m.thread_id","=","t.id").orderBy("m.created_at","desc").orderBy("m.id","desc").limit(1).as("lm"),(Y)=>Y.onTrue()).selectAll("t").select(["lm.id as lm_id","lm.thread_id as lm_thread_id","lm.metadata as lm_metadata","lm.parts as lm_parts","lm.role as lm_role","lm.created_at as lm_created_at","lm.updated_at as lm_updated_at"]).where("t.organization_id","=",$).where("t.hidden","=",!1).where("lm.role","=",Z.lastMessageRole).orderBy("lm.created_at","desc").limit(Z.limit);if(Z.createdBy)X=X.where("t.created_by","=",Z.createdBy);return(await X.execute()).map((Y)=>({thread:this.threadFromDbRow(Y),lastMessage:this.messageFromDbRow({id:Y.lm_id,thread_id:Y.lm_thread_id,metadata:Y.lm_metadata,parts:Y.lm_parts,role:Y.lm_role,created_at:Y.lm_created_at,updated_at:Y.lm_updated_at})}))}async listMessages($,Z,X){if(!await this.get($,Z))return{messages:[],total:0};let Y=X?.sort??"asc",Q=this.db.selectFrom("thread_messages").selectAll().where("thread_id","=",$).orderBy("created_at",Y).orderBy("id",Y),J=this.db.selectFrom("thread_messages").select((N)=>N.fn.count("id").as("count")).where("thread_id","=",$);if(X?.limit)Q=Q.limit(X.limit);if(X?.offset)Q=Q.offset(X.offset);let[W,K]=await Promise.all([Q.execute(),J.executeTakeFirst()]);return{messages:W.map((N)=>this.messageFromDbRow(N)),total:Number(K?.count||0)}}async bumpProgress($,Z){await this.db.updateTable("threads").set({last_progress_at:zf`now()`}).where("id","=",$).where("organization_id","=",Z).execute()}async getProgress($,Z){let X=await this.db.selectFrom("threads").select(["last_progress_at","run_started_at"]).where("id","=",$).where("organization_id","=",Z).executeTakeFirst();if(!X)return null;let G=(Y)=>{if(Y==null)return null;let Q=(Y instanceof Date?Y:new Date(Y)).getTime();return Number.isNaN(Q)?null:Q};return{lastProgressAt:G(X.last_progress_at),runStartedAt:G(X.run_started_at)}}async getRunFence($){return(await this.db.selectFrom("threads").select("run_fence_token").where("id","=",$).executeTakeFirst())?.run_fence_token??null}async setRunFence($,Z){await this.db.updateTable("threads").set(Z===null?{run_fence_token:null,run_acked_seq:null}:{run_fence_token:Z,run_acked_seq:null,status:"in_progress"}).where("id","=",$).execute()}async setCancelRequested($,Z){await this.db.updateTable("threads").set({cancel_requested_at:zf`now()`}).where("id","=",$).where("organization_id","=",Z).execute()}async getCancelRequestedAt($){let X=(await this.db.selectFrom("threads").select("cancel_requested_at").where("id","=",$).executeTakeFirst())?.cancel_requested_at;if(X==null)return null;return X instanceof Date?X:new Date(X)}async clearCancelRequested($){await this.db.updateTable("threads").set({cancel_requested_at:null}).where("id","=",$).execute()}async bumpAckedSeq($,Z,X,G){await this.db.updateTable("threads").set({run_acked_seq:G}).where("id","=",$).where("organization_id","=",Z).where((Y)=>Y.or([Y("run_acked_seq","is",null),Y("run_acked_seq","<",G)])).execute()}async getAckedSeq($,Z){return(await this.db.selectFrom("threads").select("run_acked_seq").where("id","=",$).where("organization_id","=",Z).executeTakeFirst())?.run_acked_seq??0}threadFromDbRow($){let Z={};if($.metadata!=null)if(typeof $.metadata==="string")try{Z=JSON.parse($.metadata)}catch(X){console.error(`Failed to parse metadata for thread ${$.id}:`,$.metadata,X)}else Z=$.metadata;return{id:$.id,organization_id:$.organization_id,title:$.title,description:$.description,status:$.status,trigger_id:$.trigger_id??null,context_start_message_id:$.context_start_message_id??null,run_owner_pod:$.run_owner_pod??null,run_config:$.run_config??null,run_started_at:$.run_started_at?sD($.run_started_at):null,last_progress_at:$.last_progress_at?sD($.last_progress_at):null,virtual_mcp_id:$.virtual_mcp_id??"",branch:$.branch??null,sandbox_provider_kind:$.sandbox_provider_kind??null,harness_id:$.harness_id??null,metadata:Z,created_at:sD($.created_at),updated_at:sD($.updated_at),created_by:$.created_by,updated_by:$.updated_by??void 0,hidden:!!$.hidden,message_storage_version:$.message_storage_version??1,link_transport:$.link_transport??null}}messageFromDbRow($){let Z,X;try{Z=$.metadata?JSON.parse($.metadata):void 0}catch(G){console.error(`Failed to parse metadata for message ${$.id}:`,$.metadata,G),Z=void 0}try{X=typeof $.parts==="string"?JSON.parse($.parts):$.parts}catch(G){console.error(`Failed to parse parts for message ${$.id}:`,$.parts,G),X=[]}return{id:$.id,thread_id:$.thread_id,metadata:Z,parts:X,role:$.role,created_at:sD($.created_at),updated_at:sD($.updated_at)}}}var Gg0=B(()=>{DX();pU();bi1()});import{sql as Yg0}from"kysely";function g40($){if($==null)return null;return typeof $==="string"?$:$.toISOString()}function h40($){return`msg_async_stub_${$}`}async function Qg0($,Z){await $.deleteFrom("thread_messages").where("id","=",h40(Z)).execute(),await $.deleteFrom("thread_message_parts").where("message_id","=",h40(Z)).execute()}function Au8($){if($==null)return null;if(typeof $!=="string")return $;try{return JSON.parse($)}catch{return null}}function Jg0($){return{id:$.id,interactionId:$.interaction_id??null,toolCallId:$.tool_call_id,organizationId:$.organization_id,threadId:$.thread_id,messageId:$.message_id??null,provider:$.provider,modelId:$.model_id,query:$.query,status:$.status,attempts:$.attempts??0,lastPolledAt:g40($.last_polled_at),lastError:$.last_error??null,inputTokens:$.input_tokens??null,outputTokens:$.output_tokens??null,citations:Au8($.citations),resultUri:$.result_uri??null,resultPreview:$.result_preview??null,resultContent:$.result_content??null,createdAt:g40($.created_at)??"",updatedAt:g40($.updated_at)??"",completedAt:g40($.completed_at)}}class Wg0{inner;organizationId;constructor($,Z){this.inner=$;this.organizationId=Z}requireOrg(){if(!this.organizationId)throw Error("OrgScopedAsyncResearchJobStorage: requires an authenticated organization");return this.organizationId}setOrganizationId($){this.organizationId=$}upsertPending($){return this.inner.upsertPending({organizationId:this.requireOrg(),...$})}findByToolCall($){return this.inner.findByToolCall(this.requireOrg(),$)}markPolling($,Z,X){return this.inner.markPolling(this.requireOrg(),$,Z,X)}recordPoll($,Z){return this.inner.recordPoll(this.requireOrg(),$,Z)}markCompleted($,Z){return this.inner.markCompleted(this.requireOrg(),$,Z)}markFailed($,Z){return this.inner.markFailed(this.requireOrg(),$,Z)}markCancelled($,Z){return this.inner.markCancelled(this.requireOrg(),$,Z)}}class nd{db;constructor($){this.db=$}async upsertPending($){let Z=new Date().toISOString(),X=await this.db.insertInto("async_research_jobs").values({organization_id:$.organizationId,thread_id:$.threadId,tool_call_id:$.toolCallId,message_id:$.messageId??null,provider:$.provider,model_id:$.modelId,query:$.query,status:"pending",attempts:0,updated_at:Z}).onConflict((Y)=>Y.columns(["organization_id","tool_call_id"]).doNothing()).returningAll().executeTakeFirst();if(X)return Jg0(X);let G=await this.db.selectFrom("async_research_jobs").selectAll().where("organization_id","=",$.organizationId).where("tool_call_id","=",$.toolCallId).executeTakeFirstOrThrow();return Jg0(G)}async findByToolCall($,Z){let X=await this.db.selectFrom("async_research_jobs").selectAll().where("organization_id","=",$).where("tool_call_id","=",Z).executeTakeFirst();return X?Jg0(X):null}async markPolling($,Z,X,G){let Y=new Date().toISOString();await this.db.transaction().execute(async(Q)=>{if(await Q.updateTable("async_research_jobs").set({status:"polling",interaction_id:X,last_polled_at:Y,updated_at:Y}).where("organization_id","=",$).where("tool_call_id","=",Z).execute(),(await Q.selectFrom("threads").select("message_storage_version").where("id","=",G.threadId).where("organization_id","=",$).executeTakeFirst())?.message_storage_version!==2)return;let W=h40(Z);await Q.insertInto("thread_message_parts").values([{id:`${G.threadId}:${W}:0`,seq:0,org_id:$,thread_id:G.threadId,run_id:G.threadId,message_id:W,role:"assistant",kind:"tool_call",payload:JSON.stringify({type:`tool-${G.toolName}`,toolCallId:Z,state:"input-available",input:{query:G.query}}),payload_ref:null,metadata:null,created_at:Y},{id:`${G.threadId}:${W}:finish`,seq:1,org_id:$,thread_id:G.threadId,run_id:G.threadId,message_id:W,role:"assistant",kind:"finish",payload:JSON.stringify({}),payload_ref:null,metadata:null,created_at:Y}]).onConflict((K)=>K.column("id").doNothing()).execute()})}async recordPoll($,Z,X){let G=new Date().toISOString();await this.db.updateTable("async_research_jobs").set({attempts:Yg0`attempts + 1`,last_polled_at:G,...X!==void 0?{last_error:X}:{},updated_at:G}).where("organization_id","=",$).where("tool_call_id","=",Z).execute()}async markCompleted($,Z,X){let G=new Date().toISOString();await this.db.transaction().execute(async(Y)=>{await Y.updateTable("async_research_jobs").set({status:"completed",input_tokens:X.inputTokens,output_tokens:X.outputTokens,citations:JSON.stringify(X.citations),result_uri:X.resultUri,result_preview:X.resultPreview,result_content:X.resultContent,completed_at:G,updated_at:G}).where("organization_id","=",$).where("tool_call_id","=",Z).execute(),await Qg0(Y,Z)})}async markFailed($,Z,X){let G=new Date().toISOString();await this.db.transaction().execute(async(Y)=>{await Y.updateTable("async_research_jobs").set({status:"failed",last_error:X,completed_at:G,updated_at:G}).where("organization_id","=",$).where("tool_call_id","=",Z).execute(),await Qg0(Y,Z)})}async markCancelled($,Z,X){let G=new Date().toISOString();await this.db.transaction().execute(async(Y)=>{await Y.updateTable("async_research_jobs").set({status:"cancelled",last_error:X??null,completed_at:G,updated_at:G}).where("organization_id","=",$).where("tool_call_id","=",Z).execute(),await Qg0(Y,Z)})}async sweepAbandoned($){let Z=new Date(Date.now()-$).toISOString(),X=new Date().toISOString();return await this.db.transaction().execute(async(G)=>{let Y=await G.updateTable("async_research_jobs").set({status:"abandoned",completed_at:X,updated_at:X,last_error:Yg0`COALESCE(last_error, '') || ' [abandoned by sweeper]'`}).where("status","in",["pending","polling"]).where(Yg0`COALESCE(last_polled_at, created_at) < ${Z}::timestamptz`).returning(["tool_call_id"]).execute();if(Y.length===0)return 0;let Q=Y.map((J)=>h40(J.tool_call_id));return await G.deleteFrom("thread_messages").where("id","in",Q).execute(),await G.deleteFrom("thread_message_parts").where("message_id","in",Q).execute(),Y.length})}}var Kg0=()=>{};function u40(){let $=new Map;function Z(G,Y){let Q=$.get(Y);if(Q)return Q;let J=new P9({name:`outbound-client-${Y}`,version:"1.0.0"},{capabilities:{tasks:{list:{},cancel:{},requests:{tool:{call:{}}}}},jsonSchemaValidator:e6});J.onclose=()=>{$.delete(Y)};let W=J.connect(G).then(()=>J).catch((K)=>{throw $.delete(Y),K});return $.set(Y,W),W}return Object.assign(Z,{[Symbol.asyncDispose]:async()=>{let G=[];for(let[Y,Q]of $)G.push(Q.then((J)=>J.close()).catch(()=>{}));await Promise.all(G),$.clear()}})}var Ng0=B(()=>{KW();PX()});class Hg0{db;vault;constructor($,Z){this.db=$;this.vault=Z}async get($){let Z=await this.db.selectFrom("subsidized_gateway_keys").select("encrypted_key").where("organization_id","=",$).executeTakeFirst();if(!Z)return null;return await this.vault.decrypt(Z.encrypted_key)}async put($,Z){let X=await this.vault.encrypt(Z);await this.db.insertInto("subsidized_gateway_keys").values({organization_id:$,encrypted_key:X}).onConflict((G)=>G.column("organization_id").doUpdateSet({encrypted_key:X})).execute()}}import{sql as Tu8}from"kysely";function xi1($){return $ instanceof Date?$.toISOString():String($)}class Fg0{db;vault;constructor($,Z){this.db=$;this.vault=Z}rowToInfo($){return{id:$.id,organizationId:$.organization_id,scope:$.scope,userId:$.user_id,name:$.name,description:$.description,createdBy:$.created_by,createdAt:xi1($.created_at),updatedBy:$.updated_by,updatedAt:xi1($.updated_at)}}assertVisible($,Z){if($.scope==="user"&&$.user_id!==Z)throw new tU($.id)}async create($){let Z=l8("sec"),X=await this.vault.encrypt($.value),G=new Date,Y=await this.db.insertInto("secrets").values({id:Z,organization_id:$.organizationId,scope:$.scope.kind,user_id:$.scope.kind==="user"?$.scope.userId:null,name:$.name,encrypted_value:X,description:$.description??null,created_by:$.createdBy,created_at:G,updated_by:$.createdBy,updated_at:G}).returning(c40).executeTakeFirstOrThrow();return this.rowToInfo(Y)}async update($){let Z=await this.db.selectFrom("secrets").where("id","=",$.id).where("organization_id","=",$.organizationId).select(["id","scope","user_id"]).executeTakeFirst();if(!Z)throw new OQ($.id);this.assertVisible(Z,$.callerUserId);let X={updated_by:$.updatedBy,updated_at:new Date};if($.value!==void 0)X.encrypted_value=await this.vault.encrypt($.value);if($.description!==void 0)X.description=$.description;let G=await this.db.updateTable("secrets").set(X).where("id","=",$.id).where("organization_id","=",$.organizationId).returning(c40).executeTakeFirstOrThrow();return this.rowToInfo(G)}async delete($,Z,X){let G=await this.db.selectFrom("secrets").where("id","=",$).where("organization_id","=",Z).select(["id","scope","user_id"]).executeTakeFirst();if(!G)throw new OQ($);this.assertVisible(G,X),await this.db.deleteFrom("secrets").where("id","=",$).where("organization_id","=",Z).execute()}async list($){let Z=this.db.selectFrom("secrets").where("organization_id","=",$.organizationId).select(c40);if($.scope?.kind==="user")Z=Z.where("scope","=","user").where("user_id","=",$.scope.userId);else if($.scope?.kind==="organization")Z=Z.where("scope","=","organization");else Z=Z.where((G)=>G.or([G("scope","=","organization"),G.and([G("scope","=","user"),G("user_id","=",$.callerUserId)])]));return(await Z.orderBy("created_at","desc").execute()).map((G)=>this.rowToInfo(G))}async findById($,Z,X){let G=await this.db.selectFrom("secrets").where("id","=",$).where("organization_id","=",Z).select(c40).executeTakeFirst();if(!G)throw new OQ($);return this.assertVisible(G,X),this.rowToInfo(G)}async resolveById($,Z,X){let G=await this.db.selectFrom("secrets").where("id","=",$).where("organization_id","=",Z).selectAll().executeTakeFirst();if(!G)throw new OQ($);this.assertVisible(G,X);let Y=await this.vault.decrypt(G.encrypted_value);return{info:this.rowToInfo(G),value:Y}}async resolveByName($){let Z=this.db.selectFrom("secrets").where("organization_id","=",$.organizationId).where("scope","=",$.scope.kind).where(Tu8`lower(name) = lower(${$.name})`).selectAll();if($.scope.kind==="user")Z=Z.where("user_id","=",$.scope.userId);let X=await Z.executeTakeFirst();if(!X)throw new OQ(`${$.scope.kind}:${$.name}`);let G=await this.vault.decrypt(X.encrypted_value);return{info:this.rowToInfo(X),value:G}}}var c40,OQ,tU;var pd=B(()=>{DX();c40=["id","organization_id","scope","user_id","name","description","created_by","created_at","updated_by","updated_at"];OQ=class OQ extends Error{constructor($){super(`Secret ${$} not found`);this.name="SecretNotFoundError"}};tU=class tU extends Error{constructor($){super(`Access denied for secret ${$}`);this.name="SecretAccessDeniedError"}}});import{sql as Ru8}from"kysely";function yi1($){return $ instanceof Date?$.toISOString():String($)}class Ug0{db;vault;constructor($,Z){this.db=$;this.vault=Z}rowToInfo($){return{id:$.id,organizationId:$.organization_id,name:$.name,description:$.description,bucket:$.bucket,region:$.region,endpoint:$.endpoint,forcePathStyle:$.force_path_style,prefix:$.prefix,publicUrlBase:$.public_url_base,credentialType:$.credential_type??"static",refreshUrl:$.refresh_url,siteSlug:$.site_slug,createdBy:$.created_by,createdAt:yi1($.created_at),updatedBy:$.updated_by,updatedAt:yi1($.updated_at)}}async create($){let Z=l8("fcfg"),X=await this.vault.encrypt(JSON.stringify($.credentials)),G=new Date,Y=await this.db.insertInto("org_file_configs").values({id:Z,organization_id:$.organizationId,name:$.name,description:$.description??null,bucket:$.bucket,region:$.region,endpoint:$.endpoint??null,force_path_style:$.forcePathStyle??!1,prefix:$.prefix??null,public_url_base:$.publicUrlBase??null,credential_type:$.credentials.type,refresh_url:$.refreshUrl??null,site_slug:$.siteSlug??null,encrypted_credentials:X,created_by:$.createdBy,created_at:G,updated_by:$.createdBy,updated_at:G}).returning(l40).executeTakeFirstOrThrow();return this.rowToInfo(Y)}async update($){if(!await this.db.selectFrom("org_file_configs").where("id","=",$.id).where("organization_id","=",$.organizationId).select(["id"]).executeTakeFirst())throw new Pf($.id);let X={updated_by:$.updatedBy,updated_at:new Date};if($.name!==void 0)X.name=$.name;if($.description!==void 0)X.description=$.description;if($.bucket!==void 0)X.bucket=$.bucket;if($.region!==void 0)X.region=$.region;if($.endpoint!==void 0)X.endpoint=$.endpoint;if($.forcePathStyle!==void 0)X.force_path_style=$.forcePathStyle;if($.prefix!==void 0)X.prefix=$.prefix;if($.publicUrlBase!==void 0)X.public_url_base=$.publicUrlBase;if($.refreshUrl!==void 0)X.refresh_url=$.refreshUrl;if($.siteSlug!==void 0)X.site_slug=$.siteSlug;if($.credentials!==void 0)X.credential_type=$.credentials.type,X.encrypted_credentials=await this.vault.encrypt(JSON.stringify($.credentials));let G=await this.db.updateTable("org_file_configs").set(X).where("id","=",$.id).where("organization_id","=",$.organizationId).returning(l40).executeTakeFirstOrThrow();return this.rowToInfo(G)}async delete($,Z){if(!await this.db.selectFrom("org_file_configs").where("id","=",$).where("organization_id","=",Z).select(["id"]).executeTakeFirst())throw new Pf($);await this.db.deleteFrom("org_file_configs").where("id","=",$).where("organization_id","=",Z).execute()}async list($){return(await this.db.selectFrom("org_file_configs").where("organization_id","=",$).select(l40).orderBy("created_at","desc").execute()).map((X)=>this.rowToInfo(X))}async findById($,Z){let X=await this.db.selectFrom("org_file_configs").where("id","=",$).where("organization_id","=",Z).select(l40).executeTakeFirst();if(!X)throw new Pf($);return this.rowToInfo(X)}async resolveById($,Z){let X=await this.db.selectFrom("org_file_configs").where("id","=",$).where("organization_id","=",Z).selectAll().executeTakeFirst();if(!X)throw new Pf($);return{info:this.rowToInfo(X),credentials:await this.decodeCredentials(X)}}async resolveByName($){let Z=await this.db.selectFrom("org_file_configs").where("organization_id","=",$.organizationId).where(Ru8`lower(name) = lower(${$.name})`).selectAll().executeTakeFirst();if(!Z)throw new Pf($.name);return{info:this.rowToInfo(Z),credentials:await this.decodeCredentials(Z)}}async decodeCredentials($){if($.credential_type==="managed")return{type:"managed"};let Z=await this.vault.decrypt($.encrypted_credentials),X=JSON.parse(Z);if(($.credential_type??"static")==="sts-session")return{type:"sts-session",apiKey:String(X.apiKey)};return{type:"static",accessKeyId:String(X.accessKeyId),secretAccessKey:String(X.secretAccessKey)}}}var l40,Pf;var gi1=B(()=>{DX();l40=["id","organization_id","name","description","bucket","region","endpoint","force_path_style","prefix","public_url_base","credential_type","refresh_url","site_slug","created_by","created_at","updated_by","updated_at"];Pf=class Pf extends Error{constructor($){super(`File config ${$} not found`);this.name="OrgFileConfigNotFoundError"}}});function d40($){return wg0.test($)}var wg0;var m40=B(()=>{wg0=/^[a-z0-9][a-z0-9-]{0,59}$/});function hi1($){return $ instanceof Date?$.toISOString():String($)}function Og0($){return{slug:$.slug,organizationId:$.organization_id,source:$.source,createdBy:$.created_by,createdAt:hi1($.created_at),updatedBy:$.updated_by,updatedAt:hi1($.updated_at)}}class Dg0{db;constructor($){this.db=$}async claimSite($){if(!d40($.slug))throw Error(`Invalid site slug "${$.slug}" \u2014 must be 1-60 chars of lowercase letters, digits, or hyphens, starting with a letter or digit`);let Z=new Date,X=await this.db.insertInto("org_sites").values({slug:$.slug,organization_id:$.organizationId,source:$.source??"deco-import",created_by:$.by,created_at:Z,updated_by:$.by,updated_at:Z}).onConflict((Q)=>Q.column("slug").doNothing()).returningAll().executeTakeFirst();if(X)return Og0(X);let G=await this.getBySlug($.slug);if(!G)throw new Bg0($.slug,"unknown");if(G.organizationId!==$.organizationId)throw new Bg0($.slug,G.organizationId);let Y=await this.db.updateTable("org_sites").set({source:$.source??G.source,updated_by:$.by,updated_at:Z}).where("slug","=",$.slug).where("organization_id","=",$.organizationId).returningAll().executeTakeFirstOrThrow();return Og0(Y)}async getBySlug($){let Z=await this.db.selectFrom("org_sites").selectAll().where("slug","=",$).executeTakeFirst();return Z?Og0(Z):null}async isOwnedBy($,Z){return!!await this.db.selectFrom("org_sites").select("slug").where("slug","=",$).where("organization_id","=",Z).executeTakeFirst()}}var Bg0;var ui1=B(()=>{m40();Bg0=class Bg0 extends Error{slug;ownerOrganizationId;constructor($,Z){super(`Site slug "${$}" is already owned by another organization`);this.slug=$;this.ownerOrganizationId=Z;this.name="OrgSiteConflictError"}}});function AW($){return $.createdBy==="system"}function i40($,Z){return $?.startsWith(`${td[Z]}:`)??!1}function Lg0($){let Z=0;for(let X of $){if(X.action!=="status_changed")continue;if(X.data?.to!=="in_review")continue;Z=Math.max(Z,new Date(X.occurredAt).getTime())}return Z}function Iu8($,Z){let X=Lg0($),G=new Map;for(let Y of $){if(Y.action!=="review_approved"&&Y.action!=="review_changes_requested")continue;if(new Date(Y.occurredAt).getTime()<X)continue;let Q=Y.data??{};if(Q.reviewer!=="qa"&&Q.reviewer!=="code_review")continue;if(Y.action==="review_approved"){if(Z?.verifiedOnly&&Q.verified!==!0)continue;G.set(Q.reviewer,"approved")}else G.set(Q.reviewer,"changes_requested")}return G}function Af($,Z,X){if(Z.length===0)return!1;let G=Iu8($,X);return Z.every((Y)=>G.get(Y)==="approved")}var i6="super-agent",cJ,td,oU,ci1="task-board.item.updated",li1="task-board.item.deleted";var JG=B(()=>{cJ=["qa","code_review"],td={qa:"QA Agent",code_review:"Code Reviewer"},oU={qa:"qa_agent_enabled",code_review:"code_reviewer_enabled"}});function Eg0($){return $?.status==="active"||$?.status==="past_due"}function n40($,Z){if(Eg0($))return{periodKey:$?.currentPeriodEnd?`sub:${$.currentPeriodEnd.toISOString()}`:"sub:pending",limit:Z.monthlyTaskExecutions,exhaustedReason:"monthly_exhausted"};return{periodKey:"trial",limit:Z.freeTaskExecutions,exhaustedReason:"trial_exhausted"}}function p40(){let $=d0();return{enforced:$.taskQuotaEnforced,freeTaskExecutions:$.freeTaskExecutions,monthlyTaskExecutions:$.monthlyTaskExecutions,maxRunsPerTask:$.maxRunsPerTask}}async function di1($,Z,X=p40()){if(!X.enforced||!AW(Z))return;let G=await $.storage.organizationBilling.taskClaim(Z.id);if(G&&G.runCount>=X.maxRunsPerTask)throw new BQ("runs_exhausted");if(G&&G.state!=="released")return;let Y=await $.storage.organizationBilling.getBilling(Z.organizationId),Q=n40(Y,X);if(await $.storage.organizationBilling.countTaskClaims(Z.organizationId,Q.periodKey)>=Q.limit)throw new BQ(Q.exhaustedReason)}async function mi1($,Z,X=p40()){if(!X.enforced||!AW(Z))return"skipped";let G=await $.storage.organizationBilling.getBilling(Z.organizationId),Y=n40(G,X),Q=await $.storage.organizationBilling.claimTaskUnderLimit(Z.organizationId,Z.id,Y.periodKey,Y.limit,X.maxRunsPerTask);if(Q==="exhausted")throw new BQ(Y.exhaustedReason);if(Q==="runs_exhausted")throw new BQ("runs_exhausted");return Q}async function ii1($,Z,X){await $.rollbackTaskClaim(Z,X).catch((G)=>console.error("[task-quota] rollback failed (stays charged)",G))}async function ni1($,Z){let X=await $.storage.organizationBilling.taskClaim(Z);return!!X&&X.state!=="released"}async function pi1($,Z,X){await $.releaseTaskClaim(Z,X).catch((G)=>console.error("[task-quota] refund failed (stays charged)",G))}var qu8="[SUBSCRIPTION_REQUIRED]",Mu8,BQ;var yN=B(()=>{JG();V$();Mu8={trial_exhausted:"this organization used its free task executions \u2014 subscribe to keep running tasks",monthly_exhausted:"this organization used its monthly task executions \u2014 more become available next billing cycle",runs_exhausted:"this task reached its execution limit \u2014 create a new task to keep going"};BQ=class BQ extends Error{reason;constructor($){super(`${qu8} ${Mu8[$]}`);this.reason=$;this.name="TaskQuotaError"}}});import{sql as ku8}from"kysely";function zg0($){let Z=(X)=>X instanceof Date?X.toISOString():X;return{id:$.id,taskBoardItemId:$.task_board_item_id,parentId:$.parent_id,authorId:$.author_id,body:$.body,resolved:$.resolved,createdAt:Z($.created_at),updatedAt:Z($.updated_at)}}function Su8($){if($&&typeof $==="object"&&!Array.isArray($)){let Z=$.text;if(typeof Z==="string"&&Z.trim())return Z.trim()}return null}function Pg0($){if($.status!=="in_progress")return!1;let Z=$.threads.filter((X)=>X.hasMessages);if(Z.length===0)return!1;return Z.every((X)=>X.status!==null&&jg0.has(X.status))}function Vu8($){let Z=typeof $==="string"?(()=>{try{return JSON.parse($)}catch{return null}})():$;if(!Z||typeof Z!=="object")return!1;let X=Z.githubRepo?.url;return typeof X==="string"&&X.length>0}class rU{db;constructor($){this.db=$}inTransaction($){return this.db.isTransaction?$(this.db):this.db.transaction().execute($)}async list($){let X=(await this.db.selectFrom("task_board_items").selectAll().where("organization_id","=",$).where("dismissed_at","is",null).orderBy("sort_order","asc").execute()).map((G)=>this.itemFromDbRow(G));return await this.attachRefs(X,$),X}async getById($,Z){let X=await this.db.selectFrom("task_board_items").selectAll().where("id","=",$).where("organization_id","=",Z).executeTakeFirst();if(!X)return null;let G=this.itemFromDbRow(X);return await this.attachRefs([G],Z),G}async create($){let Z=l8("board"),X=new Date().toISOString(),G=$.status??"triage",Y=await this.db.insertInto("task_board_items").values({id:Z,organization_id:$.organizationId,title:$.title,description:$.description??null,status:G,priority:$.priority??"medium",assignee_id:$.assigneeId??null,assigned_by:$.assignedBy??null,due_date:$.dueDate??null,external_key:$.externalKey??null,sort_order:ku8`(
1040
+ </organization-filesystem>`}var pU=B(()=>{aD();ey0()});function $g0($){let Z=new Map;for(let G of $){let Y=Z.get(G.message_id);if(Y)Y.push(G);else Z.set(G.message_id,[G])}let X=[];for(let[G,Y]of Z){let Q=[...Y].sort((W,K)=>W.seq-K.seq),J=Q[0];X.push({id:G,role:J.role,parts:Q.filter((W)=>W.kind!=="finish").map((W)=>W.payload&&typeof W.payload==="object"&&!Array.isArray(W.payload)?{...W.payload,created_at:W.created_at}:W.payload),created_at:J.created_at,status:Q.some((W)=>W.kind==="finish")?"complete":"in_progress",metadata:Q.find((W)=>W.kind==="finish")?.metadata??null})}return X.sort((G,Y)=>G.created_at<Y.created_at?-1:G.created_at>Y.created_at?1:0),X}function Eu8($,Z){let X=0,G=0,Y=[$];while(Y.length>0){if(X>Z||++G>Du8)return 1/0;let Q=Y.pop();if(typeof Q==="string")X+=Q.length;else if(Array.isArray(Q))for(let J of Q)Y.push(J);else if(Q!==null&&typeof Q==="object")for(let J of Object.values(Q))Y.push(J)}return X}function Pu8($){return $.replace(zu8,"").replace(ju8,"\uFFFD")}function vi1($){if(Eu8($,_i1)>_i1)return JSON.stringify({truncated:!0,reason:"payload exceeds max stored size"});return JSON.stringify($,(Z,X)=>typeof X==="string"?Pu8(X):X)}class Zg0{db;constructor($){this.db=$}async serializeParts($){let Z=new Set,X=[],G=new Map;for(let Y=0;Y<$.length;Y++){let Q=$[Y];if(Z.has(Q.id))continue;if(Z.add(Q.id),G.set(Q.id,Q),X.push({id:Q.id,seq:Q.seq,org_id:Q.org_id,thread_id:Q.thread_id,run_id:Q.run_id,message_id:Q.message_id,role:Q.role,kind:Q.kind,payload:vi1(Q.payload),payload_ref:Q.payload_ref??null,metadata:Q.metadata!=null?vi1(Q.metadata):null,created_at:Q.created_at}),(Y+1)%Lu8===0)await a$(0)}return{rows:X,partsById:G}}async appendParts($){if($.length===0)return[];let{rows:Z,partsById:X}=await this.serializeParts($);return(await this.db.insertInto("thread_message_parts").values(Z).onConflict((Y)=>Y.column("id").doNothing()).returning("id").execute()).map((Y)=>X.get(Y.id)).filter((Y)=>Y!==void 0)}async replaceMessageParts($,Z,X){let{rows:G}=await this.serializeParts(X);return await this.db.transaction().execute(async(Y)=>{let Q=await Y.selectFrom("thread_message_parts").select((K)=>K.fn.min("created_at").as("created_at")).where("thread_id","=",$).where("message_id","=",Z).executeTakeFirst(),J=Q?.created_at!=null?new Date(Q.created_at).getTime():null,W=J!=null&&Number.isFinite(J)?G.map((K)=>({...K,created_at:new Date(J+K.seq).toISOString()})):G;if(await Y.deleteFrom("thread_message_parts").where("thread_id","=",$).where("message_id","=",Z).execute(),W.length>0)await Y.insertInto("thread_message_parts").values(W).onConflict((K)=>K.column("id").doUpdateSet((N)=>({seq:N.ref("excluded.seq"),role:N.ref("excluded.role"),kind:N.ref("excluded.kind"),payload:N.ref("excluded.payload"),payload_ref:N.ref("excluded.payload_ref"),metadata:N.ref("excluded.metadata"),created_at:N.ref("excluded.created_at")}))).execute()}),X}async deleteMessageParts($,Z){await this.db.deleteFrom("thread_message_parts").where("thread_id","=",$).where("message_id","=",Z).execute()}async maxCreatedAtMsForRun($){let Z=await this.db.selectFrom("thread_message_parts").select((G)=>G.fn.max("created_at").as("max")).where("run_id","=",$).executeTakeFirst();if(!Z?.max)return null;let X=new Date(Z.max).getTime();return Number.isFinite(X)?X:null}async maxCreatedAtMsForMessage($,Z){let X=await this.db.selectFrom("thread_message_parts").select((Y)=>Y.fn.max("created_at").as("max")).where("run_id","=",$).where("message_id","=",Z).executeTakeFirst();if(!X?.max)return null;let G=new Date(X.max).getTime();return Number.isFinite(G)?G:null}async loadWindow($,Z){let X=await this.db.selectFrom("thread_message_parts").select(["message_id"]).where("thread_id","=",$).where("kind","=","finish").orderBy("created_at","desc").orderBy("id","desc").limit(Z.limit).offset(Z.offset??0).execute(),G=await this.db.selectFrom("thread_message_parts").select((K)=>K.fn.count("id").as("count")).where("thread_id","=",$).where("kind","=","finish").executeTakeFirst(),Y=Number(G?.count??0),Q=Z.includeInFlight&&(Z.offset??0)===0?await this.db.selectFrom("thread_message_parts as p").select("p.message_id").distinct().where("p.thread_id","=",$).where((K)=>K.not(K.exists(K.selectFrom("thread_message_parts as f").select("f.id").whereRef("f.message_id","=","p.message_id").where("f.thread_id","=",$).where("f.kind","=","finish")))).execute():[],J=[...X.map((K)=>K.message_id),...Q.map((K)=>K.message_id)];if(J.length===0)return{messages:[],total:Y};let W=await this.db.selectFrom("thread_message_parts").selectAll().where("thread_id","=",$).where("message_id","in",J).orderBy("seq","asc").execute();return{messages:$g0(W),total:Y}}async backfillFromMessages($,Z){let X=[],G=0;for(let Y of $)X.push({id:`${Z.runId}:${Y.id}:content`,seq:G++,org_id:Z.orgId,thread_id:Z.threadId,run_id:Z.runId,message_id:Y.id,role:Y.role,kind:"text",payload:Y.parts,payload_ref:null,metadata:Y.metadata??null,created_at:Y.created_at}),X.push({id:`${Z.runId}:${Y.id}:finish`,seq:G++,org_id:Z.orgId,thread_id:Z.threadId,run_id:Z.runId,message_id:Y.id,role:Y.role,kind:"finish",payload:{},payload_ref:null,metadata:null,created_at:Y.created_at});await this.appendParts(X)}}var _i1=50000000,Du8=1e5,Lu8=25,zu8,ju8;var bi1=B(()=>{W5();zu8=/\u0000/g,ju8=/[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?<![\uD800-\uDBFF])[\uDC00-\uDFFF]/g});import{sql as zf}from"kysely";function sD($){return typeof $==="string"?$:$.toISOString()}function fi1($){return $.replace(/[\\%_]/g,"\\$&")}class Xg0{inner;organizationId;constructor($,Z){this.inner=$;this.organizationId=Z}requireOrg(){if(!this.organizationId)throw Error("OrgScopedThreadStorage: thread operations require an authenticated organization");return this.organizationId}setOrganizationId($){this.organizationId=$}getOrganizationId(){return this.organizationId}create($){let Z=this.requireOrg();return this.inner.create({...$,organization_id:Z})}get($){return this.inner.get($,this.requireOrg())}update($,Z){return this.inner.update($,this.requireOrg(),Z)}pinRuntimeIfUnset($,Z){return this.inner.pinRuntimeIfUnset($,this.requireOrg(),Z)}completeRunIfNotCompleted($){return this.inner.completeRunIfNotCompleted($,this.requireOrg())}markRunFailed($,Z,X){return this.inner.markRunFailed($,this.requireOrg(),Z,X)}requiresActionIfInProgress($){return this.inner.requiresActionIfInProgress($,this.requireOrg())}forceFailIfInProgress($,Z){return this.inner.forceFailIfInProgress($,this.requireOrg(),Z)}delete($){return this.inner.delete($,this.requireOrg())}list($,Z){return this.inner.list(this.requireOrg(),$,Z)}listByTriggerIds($,Z){return this.inner.listByTriggerIds(this.requireOrg(),$,Z)}findLastUsedByVirtualMcpIds($){return this.inner.findLastUsedByVirtualMcpIds(this.requireOrg(),$)}bumpProgress($){return this.inner.bumpProgress($,this.requireOrg())}getProgress($){return this.inner.getProgress($,this.requireOrg())}listMessages($,Z){return this.inner.listMessages($,this.requireOrg(),Z)}listWithLastMessage($){return this.inner.listWithLastMessage(this.requireOrg(),$)}messageParts(){return this.inner.messageParts()}getRunFence($){return this.inner.getRunFence($)}setRunFence($,Z){return this.inner.setRunFence($,Z)}setCancelRequested($,Z){return this.inner.setCancelRequested($,Z)}getCancelRequestedAt($){return this.inner.getCancelRequestedAt($)}clearCancelRequested($){return this.inner.clearCancelRequested($)}bumpAckedSeq($,Z,X){return this.inner.bumpAckedSeq($,this.requireOrg(),Z,X)}getAckedSeq($){return this.inner.getAckedSeq($,this.requireOrg())}}class jf{db;constructor($){this.db=$}messageParts(){return new Zg0(this.db)}async create($){let Z=$.id??l8("thrd"),X=new Date().toISOString();if(!$.organization_id)throw Error("organization_id is required");if(!$.created_by)throw Error("created_by is required");if(!$.title)$.title=nU;let G={id:Z,organization_id:$.organization_id,title:$.title,description:$.description??null,status:$.status??"completed",trigger_id:$.trigger_id??null,virtual_mcp_id:$.virtual_mcp_id??"",branch:$.branch??null,sandbox_provider_kind:$.sandbox_provider_kind??null,harness_id:$.harness_id??null,created_at:X,updated_at:X,created_by:$.created_by,updated_by:$.updated_by??null,...$.message_storage_version!==void 0?{message_storage_version:$.message_storage_version}:{},...$.metadata!==void 0?{metadata:JSON.stringify($.metadata)}:{}},Y=await this.db.insertInto("threads").values(G).onConflict((J)=>J.column("id").doNothing()).returningAll().executeTakeFirst();if(Y)return{...this.threadFromDbRow(Y),isNew:!0};let Q=await this.db.selectFrom("threads").selectAll().where("id","=",Z).where("organization_id","=",$.organization_id).executeTakeFirstOrThrow();return{...this.threadFromDbRow(Q),isNew:!1}}async get($,Z){let X=await this.db.selectFrom("threads").selectAll().where("id","=",$).where("organization_id","=",Z).executeTakeFirst();return X?this.threadFromDbRow(X):null}async update($,Z,X){let Y={updated_at:new Date().toISOString()};if(X.title!==void 0)Y.title=X.title;if(X.description!==void 0)Y.description=X.description;if(X.updated_by!==void 0)Y.updated_by=X.updated_by;if(X.hidden!==void 0)Y.hidden=X.hidden;if(X.status!==void 0)Y.status=X.status;if(X.context_start_message_id!==void 0)Y.context_start_message_id=X.context_start_message_id;if(X.run_owner_pod!==void 0)Y.run_owner_pod=X.run_owner_pod;if(X.run_config!==void 0)Y.run_config=X.run_config?JSON.stringify(X.run_config):null;if(X.run_started_at!==void 0)Y.run_started_at=X.run_started_at;if(X.last_progress_at!==void 0)Y.last_progress_at=X.last_progress_at;if(X.failure_reason!==void 0)Y.failure_reason=X.failure_reason;if(X.failure_kind!==void 0)Y.failure_kind=X.failure_kind;if(X.metadata!==void 0)Y.metadata=JSON.stringify(X.metadata);if(X.branch!==void 0)Y.branch=X.branch;if(X.virtual_mcp_id!==void 0)Y.virtual_mcp_id=X.virtual_mcp_id;if(X.sandbox_provider_kind!==void 0)Y.sandbox_provider_kind=X.sandbox_provider_kind;if(X.harness_id!==void 0)Y.harness_id=X.harness_id;if(X.message_storage_version!==void 0)Y.message_storage_version=X.message_storage_version;await this.db.updateTable("threads").set(Y).where("id","=",$).where("organization_id","=",Z).execute();let Q=await this.get($,Z);if(!Q)throw Error("Thread not found after update");return Q}async pinRuntimeIfUnset($,Z,X){let G=await this.db.updateTable("threads").set({harness_id:X.harnessId,sandbox_provider_kind:zf`coalesce(${zf.ref("sandbox_provider_kind")}, ${X.sandboxProviderKind})`,branch:zf`coalesce(${zf.ref("branch")}, ${X.branch})`,updated_at:new Date().toISOString(),...X.messageStorageVersion!==void 0?{message_storage_version:X.messageStorageVersion}:{}}).where("id","=",$).where("organization_id","=",Z).where("harness_id","is",null).where((Y)=>X.sandboxProviderKind===null?Y("sandbox_provider_kind","is",null):Y.or([Y("sandbox_provider_kind","is",null),Y("sandbox_provider_kind","=",X.sandboxProviderKind)])).returningAll().executeTakeFirst();if(G)return{thread:this.threadFromDbRow(G),claimed:!0};return{thread:await this.get($,Z),claimed:!1}}async completeRunIfNotCompleted($,Z){let G=(await this.db.updateTable("threads").set({status:"completed",run_owner_pod:null,run_config:null,run_started_at:null,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("status","=","in_progress").returningAll().execute())[0];return G?this.threadFromDbRow(G):null}async markRunFailed($,Z,X,G){let Q=(await this.db.updateTable("threads").set({status:"failed",failure_reason:X,failure_kind:G,run_owner_pod:null,run_config:null,run_started_at:null,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("status","=","in_progress").returningAll().execute())[0];return Q?this.threadFromDbRow(Q):null}async requiresActionIfInProgress($,Z){let G=(await this.db.updateTable("threads").set({status:"requires_action",run_config:null,run_started_at:null,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("status","=","in_progress").returningAll().execute())[0];return G?this.threadFromDbRow(G):null}async forceFailIfInProgress($,Z,X){let G=new Date().toISOString(),Y=this.db.updateTable("threads").set({status:"failed",updated_at:G}).where("id","=",$).where("organization_id","=",Z).where("status","=","in_progress");if(X!=null)Y=Y.where("run_fence_token","=",X);return((await Y.executeTakeFirst()).numUpdatedRows??BigInt(0))>BigInt(0)}async delete($,Z){await this.db.deleteFrom("threads").where("id","=",$).where("organization_id","=",Z).execute()}async list($,Z,X){let G=X?.includeArchived===!0,Y=this.db.selectFrom("threads").selectAll().where("organization_id","=",$).where("hidden","=",G).orderBy("updated_at","desc");if(Z)Y=Y.where("created_by","=",Z);let Q=X?.virtualMcpId??X?.agentId;if(Q)Y=Y.where("virtual_mcp_id","=",Q);if(X?.hasTrigger===!0)Y=Y.where("trigger_id","is not",null);else if(X?.hasTrigger===!1)Y=Y.where("trigger_id","is",null);if(X?.startDate)Y=Y.where("updated_at",">=",X.startDate);if(X?.endDate)Y=Y.where("updated_at","<=",X.endDate);if(X?.search)Y=Y.where("title","ilike",`%${fi1(X.search)}%`);if(X?.status)Y=Y.where("status","=",X.status);let J=this.db.selectFrom("threads").select((N)=>N.fn.count("id").as("count")).where("organization_id","=",$).where("hidden","=",G);if(Z)J=J.where("created_by","=",Z);if(Q)J=J.where("virtual_mcp_id","=",Q);if(X?.hasTrigger===!0)J=J.where("trigger_id","is not",null);else if(X?.hasTrigger===!1)J=J.where("trigger_id","is",null);if(X?.startDate)J=J.where("updated_at",">=",X.startDate);if(X?.endDate)J=J.where("updated_at","<=",X.endDate);if(X?.search)J=J.where("title","ilike",`%${fi1(X.search)}%`);if(X?.status)J=J.where("status","=",X.status);if(X?.limit)Y=Y.limit(X.limit);if(X?.offset)Y=Y.offset(X.offset);let[W,K]=await Promise.all([Y.execute(),J.executeTakeFirst()]);return{threads:W.map((N)=>this.threadFromDbRow(N)),total:Number(K?.count||0)}}async listByTriggerIds($,Z,X){if(Z.length===0)return{threads:[],total:0};let G=this.db.selectFrom("threads").selectAll().where("organization_id","=",$).where("hidden","=",!1).where("trigger_id","in",Z).orderBy("updated_at","desc"),Y=this.db.selectFrom("threads").select((W)=>W.fn.count("id").as("count")).where("organization_id","=",$).where("hidden","=",!1).where("trigger_id","in",Z);if(X?.limit)G=G.limit(X.limit);if(X?.offset)G=G.offset(X.offset);let[Q,J]=await Promise.all([G.execute(),Y.executeTakeFirst()]);return{threads:Q.map((W)=>this.threadFromDbRow(W)),total:Number(J?.count||0)}}async findLastUsedByVirtualMcpIds($,Z){let X=new Map;if(Z.length===0)return X;let G=await this.db.selectFrom("threads").distinctOn("virtual_mcp_id").select(["virtual_mcp_id","created_by","created_at"]).where("organization_id","=",$).where("virtual_mcp_id","in",Z).orderBy("virtual_mcp_id").orderBy("created_at","desc").execute();for(let Y of G)X.set(Y.virtual_mcp_id,{last_used_at:sD(Y.created_at),last_used_by:Y.created_by});return X}async listWithLastMessage($,Z){let X=this.db.selectFrom("threads as t").innerJoinLateral((Y)=>Y.selectFrom("thread_messages as m").selectAll().whereRef("m.thread_id","=","t.id").orderBy("m.created_at","desc").orderBy("m.id","desc").limit(1).as("lm"),(Y)=>Y.onTrue()).selectAll("t").select(["lm.id as lm_id","lm.thread_id as lm_thread_id","lm.metadata as lm_metadata","lm.parts as lm_parts","lm.role as lm_role","lm.created_at as lm_created_at","lm.updated_at as lm_updated_at"]).where("t.organization_id","=",$).where("t.hidden","=",!1).where("lm.role","=",Z.lastMessageRole).orderBy("lm.created_at","desc").limit(Z.limit);if(Z.createdBy)X=X.where("t.created_by","=",Z.createdBy);return(await X.execute()).map((Y)=>({thread:this.threadFromDbRow(Y),lastMessage:this.messageFromDbRow({id:Y.lm_id,thread_id:Y.lm_thread_id,metadata:Y.lm_metadata,parts:Y.lm_parts,role:Y.lm_role,created_at:Y.lm_created_at,updated_at:Y.lm_updated_at})}))}async listMessages($,Z,X){if(!await this.get($,Z))return{messages:[],total:0};let Y=X?.sort??"asc",Q=this.db.selectFrom("thread_messages").selectAll().where("thread_id","=",$).orderBy("created_at",Y).orderBy("id",Y),J=this.db.selectFrom("thread_messages").select((N)=>N.fn.count("id").as("count")).where("thread_id","=",$);if(X?.limit)Q=Q.limit(X.limit);if(X?.offset)Q=Q.offset(X.offset);let[W,K]=await Promise.all([Q.execute(),J.executeTakeFirst()]);return{messages:W.map((N)=>this.messageFromDbRow(N)),total:Number(K?.count||0)}}async bumpProgress($,Z){await this.db.updateTable("threads").set({last_progress_at:zf`now()`}).where("id","=",$).where("organization_id","=",Z).execute()}async getProgress($,Z){let X=await this.db.selectFrom("threads").select(["last_progress_at","run_started_at"]).where("id","=",$).where("organization_id","=",Z).executeTakeFirst();if(!X)return null;let G=(Y)=>{if(Y==null)return null;let Q=(Y instanceof Date?Y:new Date(Y)).getTime();return Number.isNaN(Q)?null:Q};return{lastProgressAt:G(X.last_progress_at),runStartedAt:G(X.run_started_at)}}async getRunFence($){return(await this.db.selectFrom("threads").select("run_fence_token").where("id","=",$).executeTakeFirst())?.run_fence_token??null}async setRunFence($,Z){await this.db.updateTable("threads").set(Z===null?{run_fence_token:null,run_acked_seq:null}:{run_fence_token:Z,run_acked_seq:null,status:"in_progress"}).where("id","=",$).execute()}async setCancelRequested($,Z){await this.db.updateTable("threads").set({cancel_requested_at:zf`now()`}).where("id","=",$).where("organization_id","=",Z).execute()}async getCancelRequestedAt($){let X=(await this.db.selectFrom("threads").select("cancel_requested_at").where("id","=",$).executeTakeFirst())?.cancel_requested_at;if(X==null)return null;return X instanceof Date?X:new Date(X)}async clearCancelRequested($){await this.db.updateTable("threads").set({cancel_requested_at:null}).where("id","=",$).execute()}async bumpAckedSeq($,Z,X,G){await this.db.updateTable("threads").set({run_acked_seq:G}).where("id","=",$).where("organization_id","=",Z).where((Y)=>Y.or([Y("run_acked_seq","is",null),Y("run_acked_seq","<",G)])).execute()}async getAckedSeq($,Z){return(await this.db.selectFrom("threads").select("run_acked_seq").where("id","=",$).where("organization_id","=",Z).executeTakeFirst())?.run_acked_seq??0}threadFromDbRow($){let Z={};if($.metadata!=null)if(typeof $.metadata==="string")try{Z=JSON.parse($.metadata)}catch(X){console.error(`Failed to parse metadata for thread ${$.id}:`,$.metadata,X)}else Z=$.metadata;return{id:$.id,organization_id:$.organization_id,title:$.title,description:$.description,status:$.status,trigger_id:$.trigger_id??null,context_start_message_id:$.context_start_message_id??null,run_owner_pod:$.run_owner_pod??null,run_config:$.run_config??null,run_started_at:$.run_started_at?sD($.run_started_at):null,last_progress_at:$.last_progress_at?sD($.last_progress_at):null,virtual_mcp_id:$.virtual_mcp_id??"",branch:$.branch??null,sandbox_provider_kind:$.sandbox_provider_kind??null,harness_id:$.harness_id??null,metadata:Z,created_at:sD($.created_at),updated_at:sD($.updated_at),created_by:$.created_by,updated_by:$.updated_by??void 0,hidden:!!$.hidden,message_storage_version:$.message_storage_version??1,link_transport:$.link_transport??null}}messageFromDbRow($){let Z,X;try{Z=$.metadata?JSON.parse($.metadata):void 0}catch(G){console.error(`Failed to parse metadata for message ${$.id}:`,$.metadata,G),Z=void 0}try{X=typeof $.parts==="string"?JSON.parse($.parts):$.parts}catch(G){console.error(`Failed to parse parts for message ${$.id}:`,$.parts,G),X=[]}return{id:$.id,thread_id:$.thread_id,metadata:Z,parts:X,role:$.role,created_at:sD($.created_at),updated_at:sD($.updated_at)}}}var Gg0=B(()=>{DX();pU();bi1()});import{sql as Yg0}from"kysely";function g40($){if($==null)return null;return typeof $==="string"?$:$.toISOString()}function h40($){return`msg_async_stub_${$}`}async function Qg0($,Z){await $.deleteFrom("thread_messages").where("id","=",h40(Z)).execute(),await $.deleteFrom("thread_message_parts").where("message_id","=",h40(Z)).execute()}function Au8($){if($==null)return null;if(typeof $!=="string")return $;try{return JSON.parse($)}catch{return null}}function Jg0($){return{id:$.id,interactionId:$.interaction_id??null,toolCallId:$.tool_call_id,organizationId:$.organization_id,threadId:$.thread_id,messageId:$.message_id??null,provider:$.provider,modelId:$.model_id,query:$.query,status:$.status,attempts:$.attempts??0,lastPolledAt:g40($.last_polled_at),lastError:$.last_error??null,inputTokens:$.input_tokens??null,outputTokens:$.output_tokens??null,citations:Au8($.citations),resultUri:$.result_uri??null,resultPreview:$.result_preview??null,resultContent:$.result_content??null,createdAt:g40($.created_at)??"",updatedAt:g40($.updated_at)??"",completedAt:g40($.completed_at)}}class Wg0{inner;organizationId;constructor($,Z){this.inner=$;this.organizationId=Z}requireOrg(){if(!this.organizationId)throw Error("OrgScopedAsyncResearchJobStorage: requires an authenticated organization");return this.organizationId}setOrganizationId($){this.organizationId=$}upsertPending($){return this.inner.upsertPending({organizationId:this.requireOrg(),...$})}findByToolCall($){return this.inner.findByToolCall(this.requireOrg(),$)}markPolling($,Z,X){return this.inner.markPolling(this.requireOrg(),$,Z,X)}recordPoll($,Z){return this.inner.recordPoll(this.requireOrg(),$,Z)}markCompleted($,Z){return this.inner.markCompleted(this.requireOrg(),$,Z)}markFailed($,Z){return this.inner.markFailed(this.requireOrg(),$,Z)}markCancelled($,Z){return this.inner.markCancelled(this.requireOrg(),$,Z)}}class nd{db;constructor($){this.db=$}async upsertPending($){let Z=new Date().toISOString(),X=await this.db.insertInto("async_research_jobs").values({organization_id:$.organizationId,thread_id:$.threadId,tool_call_id:$.toolCallId,message_id:$.messageId??null,provider:$.provider,model_id:$.modelId,query:$.query,status:"pending",attempts:0,updated_at:Z}).onConflict((Y)=>Y.columns(["organization_id","tool_call_id"]).doNothing()).returningAll().executeTakeFirst();if(X)return Jg0(X);let G=await this.db.selectFrom("async_research_jobs").selectAll().where("organization_id","=",$.organizationId).where("tool_call_id","=",$.toolCallId).executeTakeFirstOrThrow();return Jg0(G)}async findByToolCall($,Z){let X=await this.db.selectFrom("async_research_jobs").selectAll().where("organization_id","=",$).where("tool_call_id","=",Z).executeTakeFirst();return X?Jg0(X):null}async markPolling($,Z,X,G){let Y=new Date().toISOString();await this.db.transaction().execute(async(Q)=>{if(await Q.updateTable("async_research_jobs").set({status:"polling",interaction_id:X,last_polled_at:Y,updated_at:Y}).where("organization_id","=",$).where("tool_call_id","=",Z).execute(),(await Q.selectFrom("threads").select("message_storage_version").where("id","=",G.threadId).where("organization_id","=",$).executeTakeFirst())?.message_storage_version!==2)return;let W=h40(Z);await Q.insertInto("thread_message_parts").values([{id:`${G.threadId}:${W}:0`,seq:0,org_id:$,thread_id:G.threadId,run_id:G.threadId,message_id:W,role:"assistant",kind:"tool_call",payload:JSON.stringify({type:`tool-${G.toolName}`,toolCallId:Z,state:"input-available",input:{query:G.query}}),payload_ref:null,metadata:null,created_at:Y},{id:`${G.threadId}:${W}:finish`,seq:1,org_id:$,thread_id:G.threadId,run_id:G.threadId,message_id:W,role:"assistant",kind:"finish",payload:JSON.stringify({}),payload_ref:null,metadata:null,created_at:Y}]).onConflict((K)=>K.column("id").doNothing()).execute()})}async recordPoll($,Z,X){let G=new Date().toISOString();await this.db.updateTable("async_research_jobs").set({attempts:Yg0`attempts + 1`,last_polled_at:G,...X!==void 0?{last_error:X}:{},updated_at:G}).where("organization_id","=",$).where("tool_call_id","=",Z).execute()}async markCompleted($,Z,X){let G=new Date().toISOString();await this.db.transaction().execute(async(Y)=>{await Y.updateTable("async_research_jobs").set({status:"completed",input_tokens:X.inputTokens,output_tokens:X.outputTokens,citations:JSON.stringify(X.citations),result_uri:X.resultUri,result_preview:X.resultPreview,result_content:X.resultContent,completed_at:G,updated_at:G}).where("organization_id","=",$).where("tool_call_id","=",Z).execute(),await Qg0(Y,Z)})}async markFailed($,Z,X){let G=new Date().toISOString();await this.db.transaction().execute(async(Y)=>{await Y.updateTable("async_research_jobs").set({status:"failed",last_error:X,completed_at:G,updated_at:G}).where("organization_id","=",$).where("tool_call_id","=",Z).execute(),await Qg0(Y,Z)})}async markCancelled($,Z,X){let G=new Date().toISOString();await this.db.transaction().execute(async(Y)=>{await Y.updateTable("async_research_jobs").set({status:"cancelled",last_error:X??null,completed_at:G,updated_at:G}).where("organization_id","=",$).where("tool_call_id","=",Z).execute(),await Qg0(Y,Z)})}async sweepAbandoned($){let Z=new Date(Date.now()-$).toISOString(),X=new Date().toISOString();return await this.db.transaction().execute(async(G)=>{let Y=await G.updateTable("async_research_jobs").set({status:"abandoned",completed_at:X,updated_at:X,last_error:Yg0`COALESCE(last_error, '') || ' [abandoned by sweeper]'`}).where("status","in",["pending","polling"]).where(Yg0`COALESCE(last_polled_at, created_at) < ${Z}::timestamptz`).returning(["tool_call_id"]).execute();if(Y.length===0)return 0;let Q=Y.map((J)=>h40(J.tool_call_id));return await G.deleteFrom("thread_messages").where("id","in",Q).execute(),await G.deleteFrom("thread_message_parts").where("message_id","in",Q).execute(),Y.length})}}var Kg0=()=>{};function u40(){let $=new Map;function Z(G,Y){let Q=$.get(Y);if(Q)return Q;let J=new P9({name:`outbound-client-${Y}`,version:"1.0.0"},{capabilities:{tasks:{list:{},cancel:{},requests:{tool:{call:{}}}}},jsonSchemaValidator:e6});J.onclose=()=>{$.delete(Y)};let W=J.connect(G).then(()=>J).catch((K)=>{throw $.delete(Y),K});return $.set(Y,W),W}return Object.assign(Z,{[Symbol.asyncDispose]:async()=>{let G=[];for(let[Y,Q]of $)G.push(Q.then((J)=>J.close()).catch(()=>{}));await Promise.all(G),$.clear()}})}var Ng0=B(()=>{KW();PX()});class Hg0{db;vault;constructor($,Z){this.db=$;this.vault=Z}async get($){let Z=await this.db.selectFrom("subsidized_gateway_keys").select("encrypted_key").where("organization_id","=",$).executeTakeFirst();if(!Z)return null;return await this.vault.decrypt(Z.encrypted_key)}async put($,Z){let X=await this.vault.encrypt(Z);await this.db.insertInto("subsidized_gateway_keys").values({organization_id:$,encrypted_key:X}).onConflict((G)=>G.column("organization_id").doUpdateSet({encrypted_key:X})).execute()}}import{sql as Tu8}from"kysely";function xi1($){return $ instanceof Date?$.toISOString():String($)}class Fg0{db;vault;constructor($,Z){this.db=$;this.vault=Z}rowToInfo($){return{id:$.id,organizationId:$.organization_id,scope:$.scope,userId:$.user_id,name:$.name,description:$.description,createdBy:$.created_by,createdAt:xi1($.created_at),updatedBy:$.updated_by,updatedAt:xi1($.updated_at)}}assertVisible($,Z){if($.scope==="user"&&$.user_id!==Z)throw new tU($.id)}async create($){let Z=l8("sec"),X=await this.vault.encrypt($.value),G=new Date,Y=await this.db.insertInto("secrets").values({id:Z,organization_id:$.organizationId,scope:$.scope.kind,user_id:$.scope.kind==="user"?$.scope.userId:null,name:$.name,encrypted_value:X,description:$.description??null,created_by:$.createdBy,created_at:G,updated_by:$.createdBy,updated_at:G}).returning(c40).executeTakeFirstOrThrow();return this.rowToInfo(Y)}async update($){let Z=await this.db.selectFrom("secrets").where("id","=",$.id).where("organization_id","=",$.organizationId).select(["id","scope","user_id"]).executeTakeFirst();if(!Z)throw new OQ($.id);this.assertVisible(Z,$.callerUserId);let X={updated_by:$.updatedBy,updated_at:new Date};if($.value!==void 0)X.encrypted_value=await this.vault.encrypt($.value);if($.description!==void 0)X.description=$.description;let G=await this.db.updateTable("secrets").set(X).where("id","=",$.id).where("organization_id","=",$.organizationId).returning(c40).executeTakeFirstOrThrow();return this.rowToInfo(G)}async delete($,Z,X){let G=await this.db.selectFrom("secrets").where("id","=",$).where("organization_id","=",Z).select(["id","scope","user_id"]).executeTakeFirst();if(!G)throw new OQ($);this.assertVisible(G,X),await this.db.deleteFrom("secrets").where("id","=",$).where("organization_id","=",Z).execute()}async list($){let Z=this.db.selectFrom("secrets").where("organization_id","=",$.organizationId).select(c40);if($.scope?.kind==="user")Z=Z.where("scope","=","user").where("user_id","=",$.scope.userId);else if($.scope?.kind==="organization")Z=Z.where("scope","=","organization");else Z=Z.where((G)=>G.or([G("scope","=","organization"),G.and([G("scope","=","user"),G("user_id","=",$.callerUserId)])]));return(await Z.orderBy("created_at","desc").execute()).map((G)=>this.rowToInfo(G))}async findById($,Z,X){let G=await this.db.selectFrom("secrets").where("id","=",$).where("organization_id","=",Z).select(c40).executeTakeFirst();if(!G)throw new OQ($);return this.assertVisible(G,X),this.rowToInfo(G)}async resolveById($,Z,X){let G=await this.db.selectFrom("secrets").where("id","=",$).where("organization_id","=",Z).selectAll().executeTakeFirst();if(!G)throw new OQ($);this.assertVisible(G,X);let Y=await this.vault.decrypt(G.encrypted_value);return{info:this.rowToInfo(G),value:Y}}async resolveByName($){let Z=this.db.selectFrom("secrets").where("organization_id","=",$.organizationId).where("scope","=",$.scope.kind).where(Tu8`lower(name) = lower(${$.name})`).selectAll();if($.scope.kind==="user")Z=Z.where("user_id","=",$.scope.userId);let X=await Z.executeTakeFirst();if(!X)throw new OQ(`${$.scope.kind}:${$.name}`);let G=await this.vault.decrypt(X.encrypted_value);return{info:this.rowToInfo(X),value:G}}}var c40,OQ,tU;var pd=B(()=>{DX();c40=["id","organization_id","scope","user_id","name","description","created_by","created_at","updated_by","updated_at"];OQ=class OQ extends Error{constructor($){super(`Secret ${$} not found`);this.name="SecretNotFoundError"}};tU=class tU extends Error{constructor($){super(`Access denied for secret ${$}`);this.name="SecretAccessDeniedError"}}});import{sql as Ru8}from"kysely";function yi1($){return $ instanceof Date?$.toISOString():String($)}class Ug0{db;vault;constructor($,Z){this.db=$;this.vault=Z}rowToInfo($){return{id:$.id,organizationId:$.organization_id,name:$.name,description:$.description,bucket:$.bucket,region:$.region,endpoint:$.endpoint,forcePathStyle:$.force_path_style,prefix:$.prefix,publicUrlBase:$.public_url_base,credentialType:$.credential_type??"static",refreshUrl:$.refresh_url,siteSlug:$.site_slug,createdBy:$.created_by,createdAt:yi1($.created_at),updatedBy:$.updated_by,updatedAt:yi1($.updated_at)}}async create($){let Z=l8("fcfg"),X=await this.vault.encrypt(JSON.stringify($.credentials)),G=new Date,Y=await this.db.insertInto("org_file_configs").values({id:Z,organization_id:$.organizationId,name:$.name,description:$.description??null,bucket:$.bucket,region:$.region,endpoint:$.endpoint??null,force_path_style:$.forcePathStyle??!1,prefix:$.prefix??null,public_url_base:$.publicUrlBase??null,credential_type:$.credentials.type,refresh_url:$.refreshUrl??null,site_slug:$.siteSlug??null,encrypted_credentials:X,created_by:$.createdBy,created_at:G,updated_by:$.createdBy,updated_at:G}).returning(l40).executeTakeFirstOrThrow();return this.rowToInfo(Y)}async update($){if(!await this.db.selectFrom("org_file_configs").where("id","=",$.id).where("organization_id","=",$.organizationId).select(["id"]).executeTakeFirst())throw new Pf($.id);let X={updated_by:$.updatedBy,updated_at:new Date};if($.name!==void 0)X.name=$.name;if($.description!==void 0)X.description=$.description;if($.bucket!==void 0)X.bucket=$.bucket;if($.region!==void 0)X.region=$.region;if($.endpoint!==void 0)X.endpoint=$.endpoint;if($.forcePathStyle!==void 0)X.force_path_style=$.forcePathStyle;if($.prefix!==void 0)X.prefix=$.prefix;if($.publicUrlBase!==void 0)X.public_url_base=$.publicUrlBase;if($.refreshUrl!==void 0)X.refresh_url=$.refreshUrl;if($.siteSlug!==void 0)X.site_slug=$.siteSlug;if($.credentials!==void 0)X.credential_type=$.credentials.type,X.encrypted_credentials=await this.vault.encrypt(JSON.stringify($.credentials));let G=await this.db.updateTable("org_file_configs").set(X).where("id","=",$.id).where("organization_id","=",$.organizationId).returning(l40).executeTakeFirstOrThrow();return this.rowToInfo(G)}async delete($,Z){if(!await this.db.selectFrom("org_file_configs").where("id","=",$).where("organization_id","=",Z).select(["id"]).executeTakeFirst())throw new Pf($);await this.db.deleteFrom("org_file_configs").where("id","=",$).where("organization_id","=",Z).execute()}async list($){return(await this.db.selectFrom("org_file_configs").where("organization_id","=",$).select(l40).orderBy("created_at","desc").execute()).map((X)=>this.rowToInfo(X))}async findById($,Z){let X=await this.db.selectFrom("org_file_configs").where("id","=",$).where("organization_id","=",Z).select(l40).executeTakeFirst();if(!X)throw new Pf($);return this.rowToInfo(X)}async resolveById($,Z){let X=await this.db.selectFrom("org_file_configs").where("id","=",$).where("organization_id","=",Z).selectAll().executeTakeFirst();if(!X)throw new Pf($);return{info:this.rowToInfo(X),credentials:await this.decodeCredentials(X)}}async resolveByName($){let Z=await this.db.selectFrom("org_file_configs").where("organization_id","=",$.organizationId).where(Ru8`lower(name) = lower(${$.name})`).selectAll().executeTakeFirst();if(!Z)throw new Pf($.name);return{info:this.rowToInfo(Z),credentials:await this.decodeCredentials(Z)}}async decodeCredentials($){if($.credential_type==="managed")return{type:"managed"};let Z=await this.vault.decrypt($.encrypted_credentials),X=JSON.parse(Z);if(($.credential_type??"static")==="sts-session")return{type:"sts-session",apiKey:String(X.apiKey)};return{type:"static",accessKeyId:String(X.accessKeyId),secretAccessKey:String(X.secretAccessKey)}}}var l40,Pf;var gi1=B(()=>{DX();l40=["id","organization_id","name","description","bucket","region","endpoint","force_path_style","prefix","public_url_base","credential_type","refresh_url","site_slug","created_by","created_at","updated_by","updated_at"];Pf=class Pf extends Error{constructor($){super(`File config ${$} not found`);this.name="OrgFileConfigNotFoundError"}}});function d40($){return wg0.test($)}var wg0;var m40=B(()=>{wg0=/^[a-z0-9][a-z0-9-]{0,59}$/});function hi1($){return $ instanceof Date?$.toISOString():String($)}function Og0($){return{slug:$.slug,organizationId:$.organization_id,source:$.source,createdBy:$.created_by,createdAt:hi1($.created_at),updatedBy:$.updated_by,updatedAt:hi1($.updated_at)}}class Dg0{db;constructor($){this.db=$}async claimSite($){if(!d40($.slug))throw Error(`Invalid site slug "${$.slug}" \u2014 must be 1-60 chars of lowercase letters, digits, or hyphens, starting with a letter or digit`);let Z=new Date,X=await this.db.insertInto("org_sites").values({slug:$.slug,organization_id:$.organizationId,source:$.source??"deco-import",created_by:$.by,created_at:Z,updated_by:$.by,updated_at:Z}).onConflict((Q)=>Q.column("slug").doNothing()).returningAll().executeTakeFirst();if(X)return Og0(X);let G=await this.getBySlug($.slug);if(!G)throw new Bg0($.slug,"unknown");if(G.organizationId!==$.organizationId)throw new Bg0($.slug,G.organizationId);let Y=await this.db.updateTable("org_sites").set({source:$.source??G.source,updated_by:$.by,updated_at:Z}).where("slug","=",$.slug).where("organization_id","=",$.organizationId).returningAll().executeTakeFirstOrThrow();return Og0(Y)}async getBySlug($){let Z=await this.db.selectFrom("org_sites").selectAll().where("slug","=",$).executeTakeFirst();return Z?Og0(Z):null}async isOwnedBy($,Z){return!!await this.db.selectFrom("org_sites").select("slug").where("slug","=",$).where("organization_id","=",Z).executeTakeFirst()}}var Bg0;var ui1=B(()=>{m40();Bg0=class Bg0 extends Error{slug;ownerOrganizationId;constructor($,Z){super(`Site slug "${$}" is already owned by another organization`);this.slug=$;this.ownerOrganizationId=Z;this.name="OrgSiteConflictError"}}});function AW($){return $.createdBy==="system"}function i40($,Z){return $?.startsWith(`${td[Z]}:`)??!1}function Lg0($){let Z=0;for(let X of $){if(X.action!=="status_changed")continue;if(X.data?.to!=="in_review")continue;Z=Math.max(Z,new Date(X.occurredAt).getTime())}return Z}function Iu8($,Z){let X=Lg0($),G=new Map;for(let Y of $){if(Y.action!=="review_approved"&&Y.action!=="review_changes_requested")continue;if(new Date(Y.occurredAt).getTime()<X)continue;let Q=Y.data??{};if(Q.reviewer!=="qa"&&Q.reviewer!=="code_review")continue;if(Y.action==="review_approved"){if(Z?.verifiedOnly&&Q.verified!==!0)continue;G.set(Q.reviewer,"approved")}else G.set(Q.reviewer,"changes_requested")}return G}function Af($,Z,X){if(Z.length===0)return!1;let G=Iu8($,X);return Z.every((Y)=>G.get(Y)==="approved")}var i6="super-agent",cJ,td,oU,ci1="task-board.item.updated",li1="task-board.item.deleted";var JG=B(()=>{cJ=["qa","code_review"],td={qa:"QA Agent",code_review:"Code Reviewer"},oU={qa:"qa_agent_enabled",code_review:"code_reviewer_enabled"}});function Eg0($){return $?.status==="active"||$?.status==="past_due"}function n40($,Z){if(Eg0($))return{periodKey:$?.currentPeriodEnd?`sub:${$.currentPeriodEnd.toISOString()}`:"sub:pending",limit:$?.monthlyTaskExecutions??Z.monthlyTaskExecutions,exhaustedReason:"monthly_exhausted"};return{periodKey:"trial",limit:$?.freeTaskExecutions??Z.freeTaskExecutions,exhaustedReason:"trial_exhausted"}}function p40(){let $=d0();return{enforced:$.taskQuotaEnforced,freeTaskExecutions:$.freeTaskExecutions,monthlyTaskExecutions:$.monthlyTaskExecutions,maxRunsPerTask:$.maxRunsPerTask}}async function di1($,Z,X=p40()){if(!X.enforced||!AW(Z))return;let G=await $.storage.organizationBilling.taskClaim(Z.id);if(G&&G.runCount>=X.maxRunsPerTask)throw new BQ("runs_exhausted");if(G&&G.state!=="released")return;let Y=await $.storage.organizationBilling.getBilling(Z.organizationId),Q=n40(Y,X);if(await $.storage.organizationBilling.countTaskClaims(Z.organizationId,Q.periodKey)>=Q.limit)throw new BQ(Q.exhaustedReason)}async function mi1($,Z,X=p40()){if(!X.enforced||!AW(Z))return"skipped";let G=await $.storage.organizationBilling.getBilling(Z.organizationId),Y=n40(G,X),Q=await $.storage.organizationBilling.claimTaskUnderLimit(Z.organizationId,Z.id,Y.periodKey,Y.limit,X.maxRunsPerTask);if(Q==="exhausted")throw new BQ(Y.exhaustedReason);if(Q==="runs_exhausted")throw new BQ("runs_exhausted");return Q}async function ii1($,Z,X){await $.rollbackTaskClaim(Z,X).catch((G)=>console.error("[task-quota] rollback failed (stays charged)",G))}async function ni1($,Z){let X=await $.storage.organizationBilling.taskClaim(Z);return!!X&&X.state!=="released"}async function pi1($,Z,X){await $.releaseTaskClaim(Z,X).catch((G)=>console.error("[task-quota] refund failed (stays charged)",G))}var qu8="[SUBSCRIPTION_REQUIRED]",Mu8,BQ;var yN=B(()=>{JG();V$();Mu8={trial_exhausted:"this organization used its free task executions \u2014 subscribe to keep running tasks",monthly_exhausted:"this organization used its monthly task executions \u2014 more become available next billing cycle",runs_exhausted:"this task reached its execution limit \u2014 create a new task to keep going"};BQ=class BQ extends Error{reason;constructor($){super(`${qu8} ${Mu8[$]}`);this.reason=$;this.name="TaskQuotaError"}}});import{sql as ku8}from"kysely";function zg0($){let Z=(X)=>X instanceof Date?X.toISOString():X;return{id:$.id,taskBoardItemId:$.task_board_item_id,parentId:$.parent_id,authorId:$.author_id,body:$.body,resolved:$.resolved,createdAt:Z($.created_at),updatedAt:Z($.updated_at)}}function Su8($){if($&&typeof $==="object"&&!Array.isArray($)){let Z=$.text;if(typeof Z==="string"&&Z.trim())return Z.trim()}return null}function Pg0($){if($.status!=="in_progress")return!1;let Z=$.threads.filter((X)=>X.hasMessages);if(Z.length===0)return!1;return Z.every((X)=>X.status!==null&&jg0.has(X.status))}function Vu8($){let Z=typeof $==="string"?(()=>{try{return JSON.parse($)}catch{return null}})():$;if(!Z||typeof Z!=="object")return!1;let X=Z.githubRepo?.url;return typeof X==="string"&&X.length>0}class rU{db;constructor($){this.db=$}inTransaction($){return this.db.isTransaction?$(this.db):this.db.transaction().execute($)}async list($){let X=(await this.db.selectFrom("task_board_items").selectAll().where("organization_id","=",$).where("dismissed_at","is",null).orderBy("sort_order","asc").execute()).map((G)=>this.itemFromDbRow(G));return await this.attachRefs(X,$),X}async getById($,Z){let X=await this.db.selectFrom("task_board_items").selectAll().where("id","=",$).where("organization_id","=",Z).executeTakeFirst();if(!X)return null;let G=this.itemFromDbRow(X);return await this.attachRefs([G],Z),G}async create($){let Z=l8("board"),X=new Date().toISOString(),G=$.status??"triage",Y=await this.db.insertInto("task_board_items").values({id:Z,organization_id:$.organizationId,title:$.title,description:$.description??null,status:G,priority:$.priority??"medium",assignee_id:$.assigneeId??null,assigned_by:$.assignedBy??null,due_date:$.dueDate??null,external_key:$.externalKey??null,sort_order:ku8`(
1041
1041
  select coalesce(min(sort_order), 0) - 1
1042
1042
  from task_board_items
1043
1043
  where organization_id = ${$.organizationId}
@@ -2728,7 +2728,7 @@ Do NOT require review (requiresReview = false) when the changes are low-risk, su
2728
2728
 
2729
2729
  When unsure between the two, lean toward NOT requiring review for small frontend-only diffs, and toward requiring it for anything backend or large.
2730
2730
 
2731
- Respond with the structured verdict and a short reason.`,sV$;var $C$=B(()=>{S4();aw();r$1();o06=a$1.object({requiresReview:a$1.boolean().describe("true if the changes should go through pull-request review"),reason:a$1.string().describe("One short sentence explaining the decision (max ~120 chars)")});sV$={requiresReview:!1,reason:""}});function e06($){if(!$||$.includes(".."))return!1;return s06.test($)}function ZC$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!e06(Z))return null;let{__resolveType:X,...G}=$;return{resolveType:Z,payload:G}}function XC$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var s06;var GC$=B(()=>{s06=/^[\w./@-]+$/});function s$1($){let Z;try{Z=new URL($)}catch{return null}if(!Z.hostname.endsWith(".localhost"))return null;let X=Z.host;return Z.hostname="127.0.0.1",{url:Z.toString(),hostHeader:X}}function YC$($,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 QC$($,Z,X,G){if(!G.connectionId)throw new Vg("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let Y=$.organization?.id;if(!Y)throw new Vg(u7);await Rx({ctx:$,connectionId:G.connectionId,organizationId:Y,forceRefresh:!0,onLegacyMintError:(H)=>{let F=H instanceof Error?H.message:u7;throw new Vg(F)}});let{cloneUrl:Q,gitUserName:J,gitUserEmail:W}=await vw(G.connectionId,G.owner,G.name,$.db,$.vault),K=uE0($),N=await Z.proxyDaemonRequest(X,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{repository:{cloneUrl:Q},identity:{userName:J,userEmail:W}},...K?{operator:K}:{}})});if(!N.ok){let H=await rw(N,$16).catch(()=>N.statusText);throw Error(`Failed to refresh sandbox git credentials (${N.status}): ${H}`)}}var $16=10485760,Vg;var JC$=B(()=>{Dw();d$1();on();jn();Vg=class Vg extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function X16($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!Z16.test(Z))throw Error(`Invalid branch name: ${$}`)}function SC($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(Y16)])}function VC($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}function e$1($,Z){let G=(cE0.get($)??Promise.resolve()).catch(()=>{}).then(Z),Y=G.catch(()=>{});return cE0.set($,Y),Y.finally(()=>{if(cE0.get($)===Y)cE0.delete($)}),G}async function SZ($,Z,X){let G=VC($);if(G instanceof Response)return G;let{claimName:Y,userId:Q,projectRef:J}=$.get("vmClaim"),W=X?.method??"POST",K=null,N=new Headers;if(X?.jsonBody!==void 0)K=X.jsonBody,N.set("content-type","application/json");else if(X?.forwardJsonBody)K=await $.req.text(),N.set("content-type","application/json");let H=X?.signal,F={method:W,headers:N,body:K,...H?{signal:H}:{}},U=async()=>{let w=await G.proxyDaemonRequest(Y,Z,F);if(X?.map404to410&&w.status===404){try{await w.body?.cancel()}catch{}if(await G.adoptLiveClaim?.({userId:Q,projectRef:J},Y))w=await G.proxyDaemonRequest(Y,Z,F);if(w.status===404){try{await w.body?.cancel()}catch{}return new Response(JSON.stringify({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."}),{status:410,headers:{"content-type":"application/json",...fY}})}}let O=await w.text(),D=X?.redactRepoDirUnlessDesktop&&G.kind!=="user-desktop"?J16(O):O,L=w.headers.get("content-type")??"application/json";return new Response(D,{status:w.status,headers:{"content-type":L,...fY}})};try{if(H){let w=U();return w.catch(()=>{}),await Promise.race([w,new Promise((D,L)=>{if(H.aborted)return L(H.reason);H.addEventListener("abort",()=>L(H.reason),{once:!0})})])}return await U()}catch(w){let O=w instanceof Error?w.message:String(w);return $.json({error:`Daemon unreachable: ${O}`},502)}}function J16($){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 lE0($,Z,X,G="GET",Y){let Q=await $.proxyDaemonRequest(Z,X,{method:G,headers:new Headers,body:null});if(Q.status===404&&Y){try{await Q.body?.cancel()}catch{}if(await $.adoptLiveClaim?.(Y,Z))Q=await $.proxyDaemonRequest(Z,X,{method:G,headers:new Headers,body:null})}if(Q.status===404){try{await Q.body?.cancel()}catch{}throw Error("SANDBOX_GONE")}let J=await Q.text();if(!Q.ok)try{let W=JSON.parse(J);throw Error(W.error??`Daemon error (${Q.status})`)}catch(W){if(W instanceof Error&&W.message!==J)throw W;throw Error(`Daemon error (${Q.status})`)}return JSON.parse(J)}function W16($){return NC$.includes($)}var Z16,WC$=524288,G16=65536,Y16=1e4,KC$=2000,Q16,cE0,fY,NC$,HC$=()=>{let $=new D1;return $.use("/:virtualMcpId/:branch/*",Q16),$.post("/:virtualMcpId/:branch/write",(Z)=>SZ(Z,"/_sandbox/write",{forwardJsonBody:!0,signal:SC(Z)})),$.post("/:virtualMcpId/:branch/unlink",(Z)=>SZ(Z,"/_sandbox/unlink",{forwardJsonBody:!0,signal:SC(Z)})),$.post("/:virtualMcpId/:branch/mkdir",(Z)=>SZ(Z,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:SC(Z)})),$.post("/:virtualMcpId/:branch/rename",(Z)=>SZ(Z,"/_sandbox/rename",{forwardJsonBody:!0,signal:SC(Z)})),$.post("/:virtualMcpId/:branch/read",(Z)=>SZ(Z,"/_sandbox/read",{forwardJsonBody:!0,signal:SC(Z)})),$.post("/:virtualMcpId/:branch/glob",(Z)=>SZ(Z,"/_sandbox/glob",{forwardJsonBody:!0,signal:SC(Z)})),$.post("/:virtualMcpId/:branch/grep",(Z)=>SZ(Z,"/_sandbox/grep",{forwardJsonBody:!0,signal:SC(Z)})),$.post("/:virtualMcpId/:branch/exec/:script",async(Z)=>{let X=Z.req.param("script");if(!X)return Z.json({error:"missing script name"},400);return SZ(Z,`/_sandbox/exec/${encodeURIComponent(X)}`)}),$.post("/:virtualMcpId/:branch/exec/:script/kill",async(Z)=>{let X=Z.req.param("script");if(!X)return Z.json({error:"missing script name"},400);return SZ(Z,`/_sandbox/exec/${encodeURIComponent(X)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(Z)=>SZ(Z,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDirUnlessDesktop:!0})),$.put("/:virtualMcpId/:branch/config",(Z)=>SZ(Z,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(Z)=>{let X=Z.req.param("step");if(!X||!W16(X))return Z.json({error:`step must be one of: ${NC$.join(", ")}`},400);if(X==="start"){let G=Z.get("vmClaim");if(G.runner){let Y=s(Z.var.studioContext),Q=rU0(G.virtualMcpMetadata);try{await aU0({ctx:Z.var.studioContext,runner:G.runner,handle:G.claimName,orgId:Y.id,userId:G.callerUserId,entries:Q})}catch(J){let W=J instanceof Error?J.message:String(J);return Z.json({error:`Failed to push env to daemon: ${W}`},502)}}}return SZ(Z,`/_sandbox/setup/${X}`,{signal:Z.req.raw.signal,map404to410:!0})}),$.get("/:virtualMcpId/:branch/events",(Z)=>{let X=Z.get("vmClaim");if(!X.runner)return nH(Z,async(G)=>{await G.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this studio instance."})})});return nV$(Z,{ctx:Z.var.studioContext,claimName:X.claimName,runner:X.runner,virtualMcpId:X.virtualMcpId,branch:X.branch,userId:X.userId,projectRef:X.projectRef,virtualMcpMetadata:X.virtualMcpMetadata})}),$.get("/:virtualMcpId/:branch/git/status",(Z)=>SZ(Z,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([Z.req.raw.signal,AbortSignal.timeout(KC$)])})),$.post("/:virtualMcpId/:branch/git/status",(Z)=>SZ(Z,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([Z.req.raw.signal,AbortSignal.timeout(KC$)])})),$.post("/:virtualMcpId/:branch/git/diff",(Z)=>SZ(Z,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/git/publish",async(Z)=>{let X=VC(Z);if(X instanceof Response)return X;let{claimName:G,virtualMcpMetadata:Y,connectionIds:Q}=Z.get("vmClaim"),J=Z.var.studioContext;return e$1(G,async()=>{try{await m$1(J,X,G);let W=YC$(Y,Q);if(W)await QC$(J,X,G,W)}catch(W){if(W instanceof Vg)return Z.json({error:W.message},403,fY);let K=W instanceof Error?W.message:String(W);return Z.json({error:K},502,fY)}return SZ(Z,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",(Z)=>{let{claimName:X}=Z.get("vmClaim");return e$1(X,()=>SZ(Z,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(Z)=>{let X=VC(Z);if(X instanceof Response)return X;let{claimName:G}=Z.get("vmClaim"),Y=Z.var.studioContext;return e$1(G,async()=>{try{await m$1(Y,X,G)}catch(Q){let J=Q instanceof Error?Q.message:String(Q);return Z.json({error:J},502,fY)}return SZ(Z,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",F7({maxSize:WC$,onError:(Z)=>Z.json({error:"Payload too large"},413,fY)}),async(Z)=>{let X=VC(Z);if(X instanceof Response)return X;let{claimName:G,userId:Y,projectRef:Q}=Z.get("vmClaim"),J=Z.var.studioContext;try{let W=await Z.req.json().catch(()=>({})),K=W.status,N=W.diff,H=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[F,U]=p$1(K)&&H?[K,N]:await Promise.all([lE0(X,G,"/_sandbox/git/status","GET",{userId:Y,projectRef:Q}),lE0(X,G,"/_sandbox/git/diff","GET",{userId:Y,projectRef:Q})]),w=await aV$(J,F,U);return Z.json(w,200,fY)}catch(W){let K=W instanceof Error?W.message:String(W);if(K==="SANDBOX_GONE")return Z.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,fY);return Z.json({error:K},502,fY)}}),$.post("/:virtualMcpId/:branch/git/judge-review",F7({maxSize:WC$,onError:(Z)=>Z.json({error:"Payload too large"},413,fY)}),async(Z)=>{let X=VC(Z);if(X instanceof Response)return X;let{claimName:G,userId:Y,projectRef:Q}=Z.get("vmClaim"),J=Z.var.studioContext;try{let W=await Z.req.json().catch(()=>({})),K=W.status,N=W.diff,H=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[F,U]=p$1(K)&&H?[K,N]:await Promise.all([lE0(X,G,"/_sandbox/git/status","GET",{userId:Y,projectRef:Q}),lE0(X,G,"/_sandbox/git/diff","GET",{userId:Y,projectRef:Q})]),w=await eV$(J,F,U,typeof W.language==="string"?W.language:void 0);return Z.json(w,200,fY)}catch(W){let K=W instanceof Error?W.message:String(W);if(K==="SANDBOX_GONE")return Z.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,fY);return Z.json({error:K},502,fY)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(Z)=>{let X=VC(Z);if(X instanceof Response)return X;let{claimName:G}=Z.get("vmClaim"),Y=Z.req.query("path");if(!Y||!Y.startsWith("/")||Y.startsWith("//")||Y.includes("..")||Y.includes("\\"))return Z.json({error:"Path not allowed"},403);let Q;try{Q=await X.getPreviewUrl(G)}catch{return Z.json({error:"Preview not available"},502)}if(!Q)return Z.json({error:"Preview not available"},502);let J=Q.replace(/\/+$/,""),W=s$1(`${J}${Y}`),K;try{K=await fetch(W?.url??`${J}${Y}`,{...W?{headers:{host:W.hostHeader}}:{}})}catch{return Z.json({error:"Preview unreachable"},502)}let N;try{N=await K.text()}catch{return Z.json({error:"Preview unreachable"},502)}return new Response(N,{status:K.status,headers:{"content-type":K.headers.get("content-type")??"application/json"}})}),$.post("/:virtualMcpId/:branch/preview-invoke",F7({maxSize:G16,onError:(Z)=>Z.json({error:"Payload too large"},413)}),async(Z)=>{let X=VC(Z);if(X instanceof Response)return X;let{claimName:G}=Z.get("vmClaim"),Y;try{Y=await X.getPreviewUrl(G)}catch{return Z.json({error:"Preview not available"},502)}if(!Y)return Z.json({error:"Preview not available"},502);let Q;try{Q=await Z.req.json()}catch{return Z.json({error:"Invalid JSON body"},400)}if(!Q||typeof Q!=="object"||Array.isArray(Q))return Z.json({error:"Invalid JSON body"},400);let J=ZC$(Q);if(!J)return Z.json({error:"Invalid or missing __resolveType"},400);let W=XC$(Y,J.resolveType),K=s$1(W),N;try{N=await fetch(K?.url??W,{method:"POST",headers:{"content-type":"application/json",...K?{host:K.hostHeader}:{}},body:JSON.stringify(J.payload),signal:AbortSignal.timeout(30000)})}catch{return Z.json({error:"Preview unreachable"},502)}let H;try{H=await N.text()}catch{return Z.json({error:"Preview unreachable"},502)}return new Response(H,{status:N.status,headers:{"content-type":N.headers.get("content-type")??"application/json"}})}),$};var FC$=B(()=>{u8();jC();Sg();lV$();JH();mV$();O3();pw();iV$();pV$();En0();tn();r$1();$C$();GC$();JC$();Z16=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;Q16=cV$(async($,Z)=>{let X=$.var.studioContext;try{G0(X)}catch{return $.json({error:"Unauthorized"},401)}let G=N1(X);if(!G)return $.json({error:"Unauthorized"},401);let Y;try{Y=s(X)}catch{return $.json({error:"Organization scope required"},403)}let Q=$.req.param("virtualMcpId"),J=$.req.param("branch");if(!Q||!J)return $.json({error:"virtualMcpId and branch are required"},400);try{X16(J)}catch(w){let O=w instanceof Error?w.message:String(w);return $.json({error:O},400)}let W=await X.storage.virtualMcps.findById(Q);if(!W||W.organization_id!==Y.id)return $.json({error:"Virtual MCP not found"},404);let K=Bn({orgId:Y.id,virtualMcpId:Q,branch:J}),N=await OH(X,J,G),H=dV$({userId:N,projectRef:K}),F=W.metadata??null,U;try{U=(await bX(X,{userId:N,branch:J,virtualMcpMetadata:F})).provider}catch{U=null}if(!U)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:H,callerUserId:G,runner:U,virtualMcpId:Q,branch:J,userId:N,projectRef:K,virtualMcpMetadata:F,connectionIds:W.connections?.map((w)=>w.connection_id)??[]}),Z()});cE0=new Map;fY={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};NC$=["clone","install","start"]});var UC$=($)=>{let Z=new D1;if(Z.use("*",zC),Z.route("/",GE0()),Z.route("/",qM$()),Z.route("/",kV$()),Z.route("/",qV$()),Z.route("/",yE0()),Z.route("/tools",fV$()),Z.route("/",_V$()),Z.route("/",KV$({kvStorage:$.kvStorage})),Z.route("/",JV$()),Z.route("/fs",zV$({getConnection:$.getNatsConnection})),Z.route("/sandbox",HC$()),Z.route("/",TV$()),Z.route("/deco-sites",QE0()),Z.route("/sso",rL0()),Z.route("/",gE0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",EM$()),$.mountDevAssets)Z.route("/dev-assets",JE0({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("/",Ns1()),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",PV$()),Z.route("/mcp",CO0()),Z.route("/mcp/self",xE0()),Z.route("/mcp",bO0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var wC$=B(()=>{u8();H11();zM$();B11();WE0();lt();K11();WV$();NV$();jV$();Ri();e01();fO0();x$1();AV$();RV$();MV$();SV$();vV$();g$1();xV$();h$1();_O0();FC$()});function N16($){return $.filter((Z)=>Z.vendors?.alias).map((Z)=>({name:Z.name,title:Z.title,description:Z.description,logo:Z.logo,category:Z.category,vendor:{alias:Z.vendors.alias,url:Z.vendors.url}}))}async function H16($,Z){let X=await fetch(`${$}/rest/v1/apps?select=name,title,description,logo,category,vendors(alias,url)`,{headers:{apikey:Z,Authorization:`Bearer ${Z}`,Accept:"application/json"},signal:AbortSignal.timeout(K16)});if(!X.ok){let G=await X.text().catch(()=>X.statusText);throw console.error(`[deco-apps] Supabase error (${X.status}): ${G.slice(0,200)}`),Error(`External service error (${X.status})`)}return await X.json()}var K16=1e4,F16=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},OC$=()=>{let $=new D1;return $.use("*",F16),$.get("/",async(Z)=>{let X=d0(),G=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!G||!Y)return Z.json({apps:[]});try{let Q=await H16(G,Y);return Z.json({apps:N16(Q)})}catch(Q){return console.error("[deco-apps] GET error:",Q),Z.json({error:"Failed to fetch apps"},502)}}),$};var BC$=B(()=>{u8();V$()});import{z as I1}from"zod";function qK($,Z="invalid_request_error",X=null,G=null){return{error:{message:$,type:Z,param:X,code:G}}}function P16($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let X=$.substring(0,Z),G=$.substring(Z+1);if(!X||!G)return null;return{credentialId:X,modelId:G}}function A16($,Z,X){try{return JSON.parse($)}catch{throw new EC$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function T16($){let Z={};for(let X of $)if(X.role==="assistant"&&X.tool_calls)for(let G of X.tool_calls)Z[G.id]=G.function.name;return $.map((X)=>{switch(X.role){case"system":return{role:"system",content:X.content};case"user":if(typeof X.content==="string")return{role:"user",content:X.content};return{role:"user",content:X.content.map((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:A16(Y.function.arguments,Y.id,Y.function.name)}))};return{role:"assistant",content:X.content??""};case"tool":let G=Z[X.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:X.tool_call_id,toolName:G,output:{type:"text",value:X.content}}]}}})}function R16($){let Z=$.map((X)=>{let G=X.function.parameters?BY(X.function.parameters):BY({type:"object",properties:{}});return[X.function.name,_$({description:X.function.description,inputSchema:G})]});return Object.fromEntries(Z)}function I16($){if(!$)return;return{openai:{response_format:$}}}function q16(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function DC$($,Z,X,G,Y,Q){let J={model:$,messages:Z,tools:X,temperature:G.temperature,maxTokens:G.max_tokens,topP:G.top_p,frequencyPenalty:G.frequency_penalty,presencePenalty:G.presence_penalty,stopSequences:G.stop?Array.isArray(G.stop)?G.stop:[G.stop]:void 0,abortSignal:Q};return Y?{...J,providerOptions:Y}:J}function LC$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var U16=256,w16,O16,B16,D16,L16,E16,z16,j16,EC$,zC$,jC$;var PC$=B(()=>{S4();u8();Sg();IH();w16=I1.object({type:I1.literal("function"),function:I1.object({name:I1.string(),description:I1.string().optional(),parameters:I1.record(I1.string(),I1.unknown()).optional()})}),O16=I1.object({id:I1.string(),type:I1.literal("function"),function:I1.object({name:I1.string(),arguments:I1.string()})}),B16=I1.discriminatedUnion("role",[I1.object({role:I1.literal("system"),content:I1.string(),name:I1.string().optional()}),I1.object({role:I1.literal("user"),content:I1.union([I1.string(),I1.array(I1.union([I1.object({type:I1.literal("text"),text:I1.string()}),I1.object({type:I1.literal("image_url"),image_url:I1.object({url:I1.string(),detail:I1.string().optional()})})]))]),name:I1.string().optional()}),I1.object({role:I1.literal("assistant"),content:I1.string().nullable().optional(),name:I1.string().optional(),tool_calls:I1.array(O16).optional()}),I1.object({role:I1.literal("tool"),content:I1.string(),tool_call_id:I1.string()})]),D16=I1.object({type:I1.literal("text")}),L16=I1.object({type:I1.literal("json_object")}),E16=I1.object({type:I1.literal("json_schema"),json_schema:I1.object({name:I1.string(),description:I1.string().optional(),schema:I1.record(I1.string(),I1.unknown()),strict:I1.boolean().optional()})}),z16=I1.union([D16,L16,E16]),j16=I1.object({model:I1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:I1.array(B16),stream:I1.boolean().optional().default(!1),temperature:I1.number().min(0).max(2).optional(),max_tokens:I1.number().positive().optional(),top_p:I1.number().min(0).max(1).optional(),frequency_penalty:I1.number().min(-2).max(2).optional(),presence_penalty:I1.number().min(-2).max(2).optional(),stop:I1.union([I1.string(),I1.array(I1.string())]).optional(),tools:I1.array(w16).optional(),tool_choice:I1.union([I1.literal("auto"),I1.literal("none"),I1.literal("required"),I1.object({type:I1.literal("function"),function:I1.object({name:I1.string()})})]).optional(),response_format:z16.optional(),user:I1.string().optional()});EC$=class EC$ extends Error{constructor($){super($);this.name="MessageConversionError"}};zC$=new D1;zC$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(qK("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(qK("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(qK("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let G=await $.req.json(),Y=j16.safeParse(G);if(!Y.success){let L=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(qK(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let Q=Y.data,J=P16(Q.model);if(!J)return $.json(qK("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((z)=>iB(z.providerId));if(!E)return $.json(qK("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 N;try{N=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(qK(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let H=N.aiSdk.languageModel(K),F=T16(Q.messages),U=Q.tools?R16(Q.tools):void 0,w=I16(Q.response_format),O=q16(),D=Math.floor(Date.now()/1000);if(Q.stream)return nH($,async(L)=>{let E=DC$(H,F,U,Q,w,$.req.raw.signal);try{let z=Cw(E),j=!1,A=0,P="",M=async()=>{if(P.length===0)return;let S=P;P="",await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Q.model,choices:[{index:0,delta:{content:S},finish_reason:null}]})})};for await(let S of z.fullStream){if(!j&&(S.type==="text-delta"||S.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Q.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),j=!0;if(S.type==="text-delta"){if(P+=S.text,P.length>=U16)await M()}else if(S.type==="tool-call"){await M();let q=A++;await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Q.model,choices:[{index:0,delta:{tool_calls:[{index:q,id:S.toolCallId,type:"function",function:{name:S.toolName,arguments:JSON.stringify(S.input)}}]},finish_reason:null}]})})}else if(S.type==="finish")await M(),await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Q.model,choices:[{index:0,delta:{},finish_reason:LC$(S.finishReason)}],usage:S.totalUsage?{prompt_tokens:S.totalUsage.inputTokens??0,completion_tokens:S.totalUsage.outputTokens??0,total_tokens:S.totalUsage.totalTokens??0}:void 0})})}await M(),await L.writeSSE({data:"[DONE]"})}catch(z){let j=z;console.error("[openai-compat:stream] Error:",j.message),await L.writeSSE({data:JSON.stringify({error:{message:j.message,type:"server_error"}})})}});else{let L=DC$(H,F,U,Q,w,$.req.raw.signal),E=await Sw(L),z={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)z.tool_calls=E.toolCalls.map((j)=>({id:j.toolCallId,type:"function",function:{name:j.toolName,arguments:JSON.stringify("input"in j?j.input:{})}})),z.content=null;return $.json({id:O,object:"chat.completion",created:D,model:Q.model,choices:[{index:0,message:z,finish_reason:LC$(E.finishReason)}],usage:{prompt_tokens:E.usage?.inputTokens??0,completion_tokens:E.usage?.outputTokens??0,total_tokens:E.usage?.totalTokens??0}})}}catch(G){let Y=G;if(Y.name==="AbortError")return $.json(qK("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(qK(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(qK(Y.message,"server_error"),500)}});jC$=zC$});var TC$;var AC$=B(()=>{TC$={name:"decocms",version:"4.182.11",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function S16(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??k16}}var RC$,k16="https://ph.studio.decocms.com",IC$;var qC$=B(()=>{u8();IC0();qV();OZ();V$();t01();AC$();RC$=new D1;RC$.get("/",($)=>{let Z={version:TC$.version,theme:OM1(),...rB().logo&&{logo:rB().logo},...XK()&&{internalUrl:D21()},...d0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!d0().firecrawlApiKey,auth:vq$(),posthog:S16(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!XK()&&d0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});IC$=RC$});function Cg($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function $81($){return(Cg($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function kC$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Cg($))}&sz=${Z}`}function MC$($,Z){let X=$.trim();if(X.length<=Z)return X;let G=X.slice(0,Z-1),Y=G.lastIndexOf(" ");return`${(Y>Z*0.6?G.slice(0,Y):G).trimEnd()}\u2026`}function SC$($){let{brand:Z,domain:X,score:G,verdict:Y}=$,Q=typeof G==="number"?`${Z} commerce report \u2014 ${Math.round(G)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,J=`See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,W=Y?.trim()?MC$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):MC$(`How does ${X} really perform? ${J}`,200);return{title:Q,description:W}}import{z as h0}from"zod";var CC,V16,C16,_16,v16,VC$;var CC$=B(()=>{CC=h0.enum(["good","bad","neutral"]),V16=h0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},h0.object({kind:h0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:h0.coerce.string().optional(),tone:CC.optional(),muted:h0.boolean().optional(),delta:h0.coerce.string().optional(),deltaDir:h0.enum(["up","down","neutral"]).optional(),points:h0.array(h0.coerce.number()).optional(),label:h0.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 $})),C16=h0.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},h0.array(V16)),_16={key:h0.coerce.string(),title:h0.coerce.string(),eyebrow:h0.coerce.string().optional(),headline:h0.coerce.string(),annotation:h0.coerce.string().optional(),methodology:h0.coerce.string().optional(),sources:h0.array(h0.object({name:h0.coerce.string(),logoUrl:h0.coerce.string()})).optional()},v16=h0.discriminatedUnion("template",[h0.object({template:h0.literal("cover"),score:h0.object({value:h0.coerce.number(),max:h0.coerce.number().optional(),grade:h0.coerce.string().optional(),label:h0.coerce.string().optional()}).optional(),brandImage:h0.coerce.string().optional(),screenshot:h0.coerce.string().optional(),mobileScreenshot:h0.coerce.string().optional()}),h0.object({template:h0.literal("cta"),ctaUrl:h0.coerce.string().optional(),ctaLabel:h0.coerce.string().optional(),bullets:h0.array(h0.coerce.string()).optional()}),h0.object({template:h0.literal("series"),points:h0.array(h0.coerce.number()).min(2),xLabels:h0.array(h0.coerce.string()).min(1),unit:h0.coerce.string().optional(),callout:h0.object({index:h0.coerce.number(),value:h0.coerce.string(),tone:CC.optional()})}),h0.object({template:h0.literal("threshold"),value:h0.coerce.string().default(""),metricLabel:h0.coerce.string().optional(),ratio:h0.coerce.number(),thresholdRatio:h0.coerce.number().optional(),thresholdLabel:h0.coerce.string().default(""),tone:CC.optional()}),h0.object({template:h0.literal("stats"),stats:h0.array(h0.object({value:h0.coerce.string(),label:h0.coerce.string(),tone:CC.optional()})).min(1)}),h0.object({template:h0.literal("bars"),items:h0.array(h0.object({value:h0.coerce.string(),label:h0.coerce.string(),ratio:h0.coerce.number(),tone:CC.optional()})).min(1)}),h0.object({template:h0.literal("gauges"),gauges:h0.array(h0.object({label:h0.coerce.string(),value:h0.coerce.string(),status:h0.enum(["good","warn","bad"]).catch("warn"),caption:h0.coerce.string().optional(),ratio:h0.coerce.number().optional()})).min(1)}),h0.object({template:h0.literal("checklist"),checks:h0.array(h0.object({label:h0.coerce.string(),status:h0.enum(["pass","fail","warn"]).catch("fail"),value:h0.coerce.string().optional()})).min(1)}),h0.object({template:h0.literal("table"),columns:h0.array(h0.object({label:h0.coerce.string(),align:h0.enum(["left","right"]).optional()})).min(1),rows:h0.array(C16).min(1),highlightRow:h0.coerce.number().optional()}),h0.object({template:h0.literal("products"),products:h0.array(h0.object({name:h0.coerce.string(),price:h0.coerce.string().optional(),image:h0.coerce.string().optional(),url:h0.coerce.string().optional()})).min(1)}),h0.object({template:h0.literal("list"),entries:h0.array(h0.object({label:h0.coerce.string(),severity:h0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:h0.coerce.number().optional()}),h0.object({template:h0.literal("keywords"),volumeLabel:h0.coerce.string().optional(),keywords:h0.array(h0.object({term:h0.coerce.string(),volume:h0.coerce.string(),position:h0.coerce.number().catch(0)})).min(1)}),h0.object({template:h0.literal("competitor"),metricLabel:h0.coerce.string().optional(),competitors:h0.array(h0.object({name:h0.coerce.string(),value:h0.coerce.string(),tone:CC.optional(),isYou:h0.boolean().optional()})).min(1)}),h0.object({template:h0.literal("scorecard"),rivalLabel:h0.coerce.string().optional(),dimensions:h0.array(h0.object({label:h0.coerce.string(),you:h0.coerce.string(),rival:h0.coerce.string().optional(),rivalName:h0.coerce.string().optional(),tone:CC.optional()})).min(1)})]),VC$=h0.object({..._16,template:v16})});function dE0($){let Z=[],X=[...$.sections].sort((G,Y)=>G.position-Y.position).map((G)=>{let Y=VC$.safeParse(G.props);if(Y.success)return Y.data;let Q=Y.error.issues[0];return Z.push({section_type:G.section_type,position:G.position,reason:Q?`${Q.path.join(".")||"(root)"}: ${Q.message}`:"contract violation"}),null}).filter((G)=>G!==null);return{deck:{meta:{...$.meta,scores:$.summary?.scores},slides:X},drops:Z}}var Z81=B(()=>{CC$()});import{join as _C$}from"path";async function f16($){try{let Z=await fetch(`${UW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(b16)});if(!Z.ok)return null;let X=await Z.json(),{deck:G}=dE0(X);if(!G.slides.length)return null;let Y=G.slides.find((W)=>W.template.template==="cover"),Q=Y?.template,J=Q&&Q.template==="cover"?Q:void 0;return{brand:G.meta.brand?.trim()||$81($),score:G.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function xY($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function x16($,Z){let X=Cg($),G=Z?.brand?.trim()||$81(X),Y=kC$(X,128),J=`${(d0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=SC$({brand:G,domain:X,score:Z?.score,verdict:Z?.verdict}),N=`${J}/og.png`,H=`${G} commerce report by decocms`;return[`<title>${xY(W)}</title>`,`<meta name="description" content="${xY(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="${xY(W)}" />`,`<meta property="og:description" content="${xY(K)}" />`,`<meta property="og:url" content="${xY(J)}" />`,`<meta property="og:image" content="${xY(N)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${xY(H)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${xY(W)}" />`,`<meta name="twitter:description" content="${xY(K)}" />`,`<meta name="twitter:image" content="${xY(N)}" />`,`<meta name="twitter:image:alt" content="${xY(H)}" />`,`<link rel="canonical" href="${xY(J)}" />`,`<link rel="icon" href="${xY(Y)}" sizes="any" />`].join(`
2731
+ Respond with the structured verdict and a short reason.`,sV$;var $C$=B(()=>{S4();aw();r$1();o06=a$1.object({requiresReview:a$1.boolean().describe("true if the changes should go through pull-request review"),reason:a$1.string().describe("One short sentence explaining the decision (max ~120 chars)")});sV$={requiresReview:!1,reason:""}});function e06($){if(!$||$.includes(".."))return!1;return s06.test($)}function ZC$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!e06(Z))return null;let{__resolveType:X,...G}=$;return{resolveType:Z,payload:G}}function XC$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var s06;var GC$=B(()=>{s06=/^[\w./@-]+$/});function s$1($){let Z;try{Z=new URL($)}catch{return null}if(!Z.hostname.endsWith(".localhost"))return null;let X=Z.host;return Z.hostname="127.0.0.1",{url:Z.toString(),hostHeader:X}}function YC$($,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 QC$($,Z,X,G){if(!G.connectionId)throw new Vg("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let Y=$.organization?.id;if(!Y)throw new Vg(u7);await Rx({ctx:$,connectionId:G.connectionId,organizationId:Y,forceRefresh:!0,onLegacyMintError:(H)=>{let F=H instanceof Error?H.message:u7;throw new Vg(F)}});let{cloneUrl:Q,gitUserName:J,gitUserEmail:W}=await vw(G.connectionId,G.owner,G.name,$.db,$.vault),K=uE0($),N=await Z.proxyDaemonRequest(X,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{repository:{cloneUrl:Q},identity:{userName:J,userEmail:W}},...K?{operator:K}:{}})});if(!N.ok){let H=await rw(N,$16).catch(()=>N.statusText);throw Error(`Failed to refresh sandbox git credentials (${N.status}): ${H}`)}}var $16=10485760,Vg;var JC$=B(()=>{Dw();d$1();on();jn();Vg=class Vg extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function X16($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!Z16.test(Z))throw Error(`Invalid branch name: ${$}`)}function SC($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(Y16)])}function VC($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}function e$1($,Z){let G=(cE0.get($)??Promise.resolve()).catch(()=>{}).then(Z),Y=G.catch(()=>{});return cE0.set($,Y),Y.finally(()=>{if(cE0.get($)===Y)cE0.delete($)}),G}async function SZ($,Z,X){let G=VC($);if(G instanceof Response)return G;let{claimName:Y,userId:Q,projectRef:J}=$.get("vmClaim"),W=X?.method??"POST",K=null,N=new Headers;if(X?.jsonBody!==void 0)K=X.jsonBody,N.set("content-type","application/json");else if(X?.forwardJsonBody)K=await $.req.text(),N.set("content-type","application/json");let H=X?.signal,F={method:W,headers:N,body:K,...H?{signal:H}:{}},U=async()=>{let w=await G.proxyDaemonRequest(Y,Z,F);if(X?.map404to410&&w.status===404){try{await w.body?.cancel()}catch{}if(await G.adoptLiveClaim?.({userId:Q,projectRef:J},Y))w=await G.proxyDaemonRequest(Y,Z,F);if(w.status===404){try{await w.body?.cancel()}catch{}return new Response(JSON.stringify({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."}),{status:410,headers:{"content-type":"application/json",...fY}})}}let O=await w.text(),D=X?.redactRepoDirUnlessDesktop&&G.kind!=="user-desktop"?J16(O):O,L=w.headers.get("content-type")??"application/json";return new Response(D,{status:w.status,headers:{"content-type":L,...fY}})};try{if(H){let w=U();return w.catch(()=>{}),await Promise.race([w,new Promise((D,L)=>{if(H.aborted)return L(H.reason);H.addEventListener("abort",()=>L(H.reason),{once:!0})})])}return await U()}catch(w){let O=w instanceof Error?w.message:String(w);return $.json({error:`Daemon unreachable: ${O}`},502)}}function J16($){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 lE0($,Z,X,G="GET",Y){let Q=await $.proxyDaemonRequest(Z,X,{method:G,headers:new Headers,body:null});if(Q.status===404&&Y){try{await Q.body?.cancel()}catch{}if(await $.adoptLiveClaim?.(Y,Z))Q=await $.proxyDaemonRequest(Z,X,{method:G,headers:new Headers,body:null})}if(Q.status===404){try{await Q.body?.cancel()}catch{}throw Error("SANDBOX_GONE")}let J=await Q.text();if(!Q.ok)try{let W=JSON.parse(J);throw Error(W.error??`Daemon error (${Q.status})`)}catch(W){if(W instanceof Error&&W.message!==J)throw W;throw Error(`Daemon error (${Q.status})`)}return JSON.parse(J)}function W16($){return NC$.includes($)}var Z16,WC$=524288,G16=65536,Y16=1e4,KC$=2000,Q16,cE0,fY,NC$,HC$=()=>{let $=new D1;return $.use("/:virtualMcpId/:branch/*",Q16),$.post("/:virtualMcpId/:branch/write",(Z)=>SZ(Z,"/_sandbox/write",{forwardJsonBody:!0,signal:SC(Z)})),$.post("/:virtualMcpId/:branch/unlink",(Z)=>SZ(Z,"/_sandbox/unlink",{forwardJsonBody:!0,signal:SC(Z)})),$.post("/:virtualMcpId/:branch/mkdir",(Z)=>SZ(Z,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:SC(Z)})),$.post("/:virtualMcpId/:branch/rename",(Z)=>SZ(Z,"/_sandbox/rename",{forwardJsonBody:!0,signal:SC(Z)})),$.post("/:virtualMcpId/:branch/read",(Z)=>SZ(Z,"/_sandbox/read",{forwardJsonBody:!0,signal:SC(Z)})),$.post("/:virtualMcpId/:branch/glob",(Z)=>SZ(Z,"/_sandbox/glob",{forwardJsonBody:!0,signal:SC(Z)})),$.post("/:virtualMcpId/:branch/grep",(Z)=>SZ(Z,"/_sandbox/grep",{forwardJsonBody:!0,signal:SC(Z)})),$.post("/:virtualMcpId/:branch/exec/:script",async(Z)=>{let X=Z.req.param("script");if(!X)return Z.json({error:"missing script name"},400);return SZ(Z,`/_sandbox/exec/${encodeURIComponent(X)}`)}),$.post("/:virtualMcpId/:branch/exec/:script/kill",async(Z)=>{let X=Z.req.param("script");if(!X)return Z.json({error:"missing script name"},400);return SZ(Z,`/_sandbox/exec/${encodeURIComponent(X)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(Z)=>SZ(Z,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDirUnlessDesktop:!0})),$.put("/:virtualMcpId/:branch/config",(Z)=>SZ(Z,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(Z)=>{let X=Z.req.param("step");if(!X||!W16(X))return Z.json({error:`step must be one of: ${NC$.join(", ")}`},400);if(X==="start"){let G=Z.get("vmClaim");if(G.runner){let Y=s(Z.var.studioContext),Q=rU0(G.virtualMcpMetadata);try{await aU0({ctx:Z.var.studioContext,runner:G.runner,handle:G.claimName,orgId:Y.id,userId:G.callerUserId,entries:Q})}catch(J){let W=J instanceof Error?J.message:String(J);return Z.json({error:`Failed to push env to daemon: ${W}`},502)}}}return SZ(Z,`/_sandbox/setup/${X}`,{signal:Z.req.raw.signal,map404to410:!0})}),$.get("/:virtualMcpId/:branch/events",(Z)=>{let X=Z.get("vmClaim");if(!X.runner)return nH(Z,async(G)=>{await G.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this studio instance."})})});return nV$(Z,{ctx:Z.var.studioContext,claimName:X.claimName,runner:X.runner,virtualMcpId:X.virtualMcpId,branch:X.branch,userId:X.userId,projectRef:X.projectRef,virtualMcpMetadata:X.virtualMcpMetadata})}),$.get("/:virtualMcpId/:branch/git/status",(Z)=>SZ(Z,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([Z.req.raw.signal,AbortSignal.timeout(KC$)])})),$.post("/:virtualMcpId/:branch/git/status",(Z)=>SZ(Z,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([Z.req.raw.signal,AbortSignal.timeout(KC$)])})),$.post("/:virtualMcpId/:branch/git/diff",(Z)=>SZ(Z,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/git/publish",async(Z)=>{let X=VC(Z);if(X instanceof Response)return X;let{claimName:G,virtualMcpMetadata:Y,connectionIds:Q}=Z.get("vmClaim"),J=Z.var.studioContext;return e$1(G,async()=>{try{await m$1(J,X,G);let W=YC$(Y,Q);if(W)await QC$(J,X,G,W)}catch(W){if(W instanceof Vg)return Z.json({error:W.message},403,fY);let K=W instanceof Error?W.message:String(W);return Z.json({error:K},502,fY)}return SZ(Z,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",(Z)=>{let{claimName:X}=Z.get("vmClaim");return e$1(X,()=>SZ(Z,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(Z)=>{let X=VC(Z);if(X instanceof Response)return X;let{claimName:G}=Z.get("vmClaim"),Y=Z.var.studioContext;return e$1(G,async()=>{try{await m$1(Y,X,G)}catch(Q){let J=Q instanceof Error?Q.message:String(Q);return Z.json({error:J},502,fY)}return SZ(Z,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",F7({maxSize:WC$,onError:(Z)=>Z.json({error:"Payload too large"},413,fY)}),async(Z)=>{let X=VC(Z);if(X instanceof Response)return X;let{claimName:G,userId:Y,projectRef:Q}=Z.get("vmClaim"),J=Z.var.studioContext;try{let W=await Z.req.json().catch(()=>({})),K=W.status,N=W.diff,H=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[F,U]=p$1(K)&&H?[K,N]:await Promise.all([lE0(X,G,"/_sandbox/git/status","GET",{userId:Y,projectRef:Q}),lE0(X,G,"/_sandbox/git/diff","GET",{userId:Y,projectRef:Q})]),w=await aV$(J,F,U);return Z.json(w,200,fY)}catch(W){let K=W instanceof Error?W.message:String(W);if(K==="SANDBOX_GONE")return Z.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,fY);return Z.json({error:K},502,fY)}}),$.post("/:virtualMcpId/:branch/git/judge-review",F7({maxSize:WC$,onError:(Z)=>Z.json({error:"Payload too large"},413,fY)}),async(Z)=>{let X=VC(Z);if(X instanceof Response)return X;let{claimName:G,userId:Y,projectRef:Q}=Z.get("vmClaim"),J=Z.var.studioContext;try{let W=await Z.req.json().catch(()=>({})),K=W.status,N=W.diff,H=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[F,U]=p$1(K)&&H?[K,N]:await Promise.all([lE0(X,G,"/_sandbox/git/status","GET",{userId:Y,projectRef:Q}),lE0(X,G,"/_sandbox/git/diff","GET",{userId:Y,projectRef:Q})]),w=await eV$(J,F,U,typeof W.language==="string"?W.language:void 0);return Z.json(w,200,fY)}catch(W){let K=W instanceof Error?W.message:String(W);if(K==="SANDBOX_GONE")return Z.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,fY);return Z.json({error:K},502,fY)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(Z)=>{let X=VC(Z);if(X instanceof Response)return X;let{claimName:G}=Z.get("vmClaim"),Y=Z.req.query("path");if(!Y||!Y.startsWith("/")||Y.startsWith("//")||Y.includes("..")||Y.includes("\\"))return Z.json({error:"Path not allowed"},403);let Q;try{Q=await X.getPreviewUrl(G)}catch{return Z.json({error:"Preview not available"},502)}if(!Q)return Z.json({error:"Preview not available"},502);let J=Q.replace(/\/+$/,""),W=s$1(`${J}${Y}`),K;try{K=await fetch(W?.url??`${J}${Y}`,{...W?{headers:{host:W.hostHeader}}:{}})}catch{return Z.json({error:"Preview unreachable"},502)}let N;try{N=await K.text()}catch{return Z.json({error:"Preview unreachable"},502)}return new Response(N,{status:K.status,headers:{"content-type":K.headers.get("content-type")??"application/json"}})}),$.post("/:virtualMcpId/:branch/preview-invoke",F7({maxSize:G16,onError:(Z)=>Z.json({error:"Payload too large"},413)}),async(Z)=>{let X=VC(Z);if(X instanceof Response)return X;let{claimName:G}=Z.get("vmClaim"),Y;try{Y=await X.getPreviewUrl(G)}catch{return Z.json({error:"Preview not available"},502)}if(!Y)return Z.json({error:"Preview not available"},502);let Q;try{Q=await Z.req.json()}catch{return Z.json({error:"Invalid JSON body"},400)}if(!Q||typeof Q!=="object"||Array.isArray(Q))return Z.json({error:"Invalid JSON body"},400);let J=ZC$(Q);if(!J)return Z.json({error:"Invalid or missing __resolveType"},400);let W=XC$(Y,J.resolveType),K=s$1(W),N;try{N=await fetch(K?.url??W,{method:"POST",headers:{"content-type":"application/json",...K?{host:K.hostHeader}:{}},body:JSON.stringify(J.payload),signal:AbortSignal.timeout(30000)})}catch{return Z.json({error:"Preview unreachable"},502)}let H;try{H=await N.text()}catch{return Z.json({error:"Preview unreachable"},502)}return new Response(H,{status:N.status,headers:{"content-type":N.headers.get("content-type")??"application/json"}})}),$};var FC$=B(()=>{u8();jC();Sg();lV$();JH();mV$();O3();pw();iV$();pV$();En0();tn();r$1();$C$();GC$();JC$();Z16=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;Q16=cV$(async($,Z)=>{let X=$.var.studioContext;try{G0(X)}catch{return $.json({error:"Unauthorized"},401)}let G=N1(X);if(!G)return $.json({error:"Unauthorized"},401);let Y;try{Y=s(X)}catch{return $.json({error:"Organization scope required"},403)}let Q=$.req.param("virtualMcpId"),J=$.req.param("branch");if(!Q||!J)return $.json({error:"virtualMcpId and branch are required"},400);try{X16(J)}catch(w){let O=w instanceof Error?w.message:String(w);return $.json({error:O},400)}let W=await X.storage.virtualMcps.findById(Q);if(!W||W.organization_id!==Y.id)return $.json({error:"Virtual MCP not found"},404);let K=Bn({orgId:Y.id,virtualMcpId:Q,branch:J}),N=await OH(X,J,G),H=dV$({userId:N,projectRef:K}),F=W.metadata??null,U;try{U=(await bX(X,{userId:N,branch:J,virtualMcpMetadata:F})).provider}catch{U=null}if(!U)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:H,callerUserId:G,runner:U,virtualMcpId:Q,branch:J,userId:N,projectRef:K,virtualMcpMetadata:F,connectionIds:W.connections?.map((w)=>w.connection_id)??[]}),Z()});cE0=new Map;fY={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};NC$=["clone","install","start"]});var UC$=($)=>{let Z=new D1;if(Z.use("*",zC),Z.route("/",GE0()),Z.route("/",qM$()),Z.route("/",kV$()),Z.route("/",qV$()),Z.route("/",yE0()),Z.route("/tools",fV$()),Z.route("/",_V$()),Z.route("/",KV$({kvStorage:$.kvStorage})),Z.route("/",JV$()),Z.route("/fs",zV$({getConnection:$.getNatsConnection})),Z.route("/sandbox",HC$()),Z.route("/",TV$()),Z.route("/deco-sites",QE0()),Z.route("/sso",rL0()),Z.route("/",gE0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",EM$()),$.mountDevAssets)Z.route("/dev-assets",JE0({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("/",Ns1()),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",PV$()),Z.route("/mcp",CO0()),Z.route("/mcp/self",xE0()),Z.route("/mcp",bO0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var wC$=B(()=>{u8();H11();zM$();B11();WE0();lt();K11();WV$();NV$();jV$();Ri();e01();fO0();x$1();AV$();RV$();MV$();SV$();vV$();g$1();xV$();h$1();_O0();FC$()});function N16($){return $.filter((Z)=>Z.vendors?.alias).map((Z)=>({name:Z.name,title:Z.title,description:Z.description,logo:Z.logo,category:Z.category,vendor:{alias:Z.vendors.alias,url:Z.vendors.url}}))}async function H16($,Z){let X=await fetch(`${$}/rest/v1/apps?select=name,title,description,logo,category,vendors(alias,url)`,{headers:{apikey:Z,Authorization:`Bearer ${Z}`,Accept:"application/json"},signal:AbortSignal.timeout(K16)});if(!X.ok){let G=await X.text().catch(()=>X.statusText);throw console.error(`[deco-apps] Supabase error (${X.status}): ${G.slice(0,200)}`),Error(`External service error (${X.status})`)}return await X.json()}var K16=1e4,F16=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},OC$=()=>{let $=new D1;return $.use("*",F16),$.get("/",async(Z)=>{let X=d0(),G=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!G||!Y)return Z.json({apps:[]});try{let Q=await H16(G,Y);return Z.json({apps:N16(Q)})}catch(Q){return console.error("[deco-apps] GET error:",Q),Z.json({error:"Failed to fetch apps"},502)}}),$};var BC$=B(()=>{u8();V$()});import{z as I1}from"zod";function qK($,Z="invalid_request_error",X=null,G=null){return{error:{message:$,type:Z,param:X,code:G}}}function P16($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let X=$.substring(0,Z),G=$.substring(Z+1);if(!X||!G)return null;return{credentialId:X,modelId:G}}function A16($,Z,X){try{return JSON.parse($)}catch{throw new EC$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function T16($){let Z={};for(let X of $)if(X.role==="assistant"&&X.tool_calls)for(let G of X.tool_calls)Z[G.id]=G.function.name;return $.map((X)=>{switch(X.role){case"system":return{role:"system",content:X.content};case"user":if(typeof X.content==="string")return{role:"user",content:X.content};return{role:"user",content:X.content.map((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:A16(Y.function.arguments,Y.id,Y.function.name)}))};return{role:"assistant",content:X.content??""};case"tool":let G=Z[X.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:X.tool_call_id,toolName:G,output:{type:"text",value:X.content}}]}}})}function R16($){let Z=$.map((X)=>{let G=X.function.parameters?BY(X.function.parameters):BY({type:"object",properties:{}});return[X.function.name,_$({description:X.function.description,inputSchema:G})]});return Object.fromEntries(Z)}function I16($){if(!$)return;return{openai:{response_format:$}}}function q16(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function DC$($,Z,X,G,Y,Q){let J={model:$,messages:Z,tools:X,temperature:G.temperature,maxTokens:G.max_tokens,topP:G.top_p,frequencyPenalty:G.frequency_penalty,presencePenalty:G.presence_penalty,stopSequences:G.stop?Array.isArray(G.stop)?G.stop:[G.stop]:void 0,abortSignal:Q};return Y?{...J,providerOptions:Y}:J}function LC$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var U16=256,w16,O16,B16,D16,L16,E16,z16,j16,EC$,zC$,jC$;var PC$=B(()=>{S4();u8();Sg();IH();w16=I1.object({type:I1.literal("function"),function:I1.object({name:I1.string(),description:I1.string().optional(),parameters:I1.record(I1.string(),I1.unknown()).optional()})}),O16=I1.object({id:I1.string(),type:I1.literal("function"),function:I1.object({name:I1.string(),arguments:I1.string()})}),B16=I1.discriminatedUnion("role",[I1.object({role:I1.literal("system"),content:I1.string(),name:I1.string().optional()}),I1.object({role:I1.literal("user"),content:I1.union([I1.string(),I1.array(I1.union([I1.object({type:I1.literal("text"),text:I1.string()}),I1.object({type:I1.literal("image_url"),image_url:I1.object({url:I1.string(),detail:I1.string().optional()})})]))]),name:I1.string().optional()}),I1.object({role:I1.literal("assistant"),content:I1.string().nullable().optional(),name:I1.string().optional(),tool_calls:I1.array(O16).optional()}),I1.object({role:I1.literal("tool"),content:I1.string(),tool_call_id:I1.string()})]),D16=I1.object({type:I1.literal("text")}),L16=I1.object({type:I1.literal("json_object")}),E16=I1.object({type:I1.literal("json_schema"),json_schema:I1.object({name:I1.string(),description:I1.string().optional(),schema:I1.record(I1.string(),I1.unknown()),strict:I1.boolean().optional()})}),z16=I1.union([D16,L16,E16]),j16=I1.object({model:I1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:I1.array(B16),stream:I1.boolean().optional().default(!1),temperature:I1.number().min(0).max(2).optional(),max_tokens:I1.number().positive().optional(),top_p:I1.number().min(0).max(1).optional(),frequency_penalty:I1.number().min(-2).max(2).optional(),presence_penalty:I1.number().min(-2).max(2).optional(),stop:I1.union([I1.string(),I1.array(I1.string())]).optional(),tools:I1.array(w16).optional(),tool_choice:I1.union([I1.literal("auto"),I1.literal("none"),I1.literal("required"),I1.object({type:I1.literal("function"),function:I1.object({name:I1.string()})})]).optional(),response_format:z16.optional(),user:I1.string().optional()});EC$=class EC$ extends Error{constructor($){super($);this.name="MessageConversionError"}};zC$=new D1;zC$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(qK("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(qK("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(qK("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let G=await $.req.json(),Y=j16.safeParse(G);if(!Y.success){let L=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(qK(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let Q=Y.data,J=P16(Q.model);if(!J)return $.json(qK("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((z)=>iB(z.providerId));if(!E)return $.json(qK("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 N;try{N=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(qK(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let H=N.aiSdk.languageModel(K),F=T16(Q.messages),U=Q.tools?R16(Q.tools):void 0,w=I16(Q.response_format),O=q16(),D=Math.floor(Date.now()/1000);if(Q.stream)return nH($,async(L)=>{let E=DC$(H,F,U,Q,w,$.req.raw.signal);try{let z=Cw(E),j=!1,A=0,P="",M=async()=>{if(P.length===0)return;let S=P;P="",await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Q.model,choices:[{index:0,delta:{content:S},finish_reason:null}]})})};for await(let S of z.fullStream){if(!j&&(S.type==="text-delta"||S.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Q.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),j=!0;if(S.type==="text-delta"){if(P+=S.text,P.length>=U16)await M()}else if(S.type==="tool-call"){await M();let q=A++;await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Q.model,choices:[{index:0,delta:{tool_calls:[{index:q,id:S.toolCallId,type:"function",function:{name:S.toolName,arguments:JSON.stringify(S.input)}}]},finish_reason:null}]})})}else if(S.type==="finish")await M(),await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Q.model,choices:[{index:0,delta:{},finish_reason:LC$(S.finishReason)}],usage:S.totalUsage?{prompt_tokens:S.totalUsage.inputTokens??0,completion_tokens:S.totalUsage.outputTokens??0,total_tokens:S.totalUsage.totalTokens??0}:void 0})})}await M(),await L.writeSSE({data:"[DONE]"})}catch(z){let j=z;console.error("[openai-compat:stream] Error:",j.message),await L.writeSSE({data:JSON.stringify({error:{message:j.message,type:"server_error"}})})}});else{let L=DC$(H,F,U,Q,w,$.req.raw.signal),E=await Sw(L),z={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)z.tool_calls=E.toolCalls.map((j)=>({id:j.toolCallId,type:"function",function:{name:j.toolName,arguments:JSON.stringify("input"in j?j.input:{})}})),z.content=null;return $.json({id:O,object:"chat.completion",created:D,model:Q.model,choices:[{index:0,message:z,finish_reason:LC$(E.finishReason)}],usage:{prompt_tokens:E.usage?.inputTokens??0,completion_tokens:E.usage?.outputTokens??0,total_tokens:E.usage?.totalTokens??0}})}}catch(G){let Y=G;if(Y.name==="AbortError")return $.json(qK("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(qK(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(qK(Y.message,"server_error"),500)}});jC$=zC$});var TC$;var AC$=B(()=>{TC$={name:"decocms",version:"4.183.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",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function S16(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??k16}}var RC$,k16="https://ph.studio.decocms.com",IC$;var qC$=B(()=>{u8();IC0();qV();OZ();V$();t01();AC$();RC$=new D1;RC$.get("/",($)=>{let Z={version:TC$.version,theme:OM1(),...rB().logo&&{logo:rB().logo},...XK()&&{internalUrl:D21()},...d0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!d0().firecrawlApiKey,auth:vq$(),posthog:S16(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!XK()&&d0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});IC$=RC$});function Cg($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function $81($){return(Cg($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function kC$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Cg($))}&sz=${Z}`}function MC$($,Z){let X=$.trim();if(X.length<=Z)return X;let G=X.slice(0,Z-1),Y=G.lastIndexOf(" ");return`${(Y>Z*0.6?G.slice(0,Y):G).trimEnd()}\u2026`}function SC$($){let{brand:Z,domain:X,score:G,verdict:Y}=$,Q=typeof G==="number"?`${Z} commerce report \u2014 ${Math.round(G)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,J=`See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,W=Y?.trim()?MC$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):MC$(`How does ${X} really perform? ${J}`,200);return{title:Q,description:W}}import{z as h0}from"zod";var CC,V16,C16,_16,v16,VC$;var CC$=B(()=>{CC=h0.enum(["good","bad","neutral"]),V16=h0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},h0.object({kind:h0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:h0.coerce.string().optional(),tone:CC.optional(),muted:h0.boolean().optional(),delta:h0.coerce.string().optional(),deltaDir:h0.enum(["up","down","neutral"]).optional(),points:h0.array(h0.coerce.number()).optional(),label:h0.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 $})),C16=h0.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},h0.array(V16)),_16={key:h0.coerce.string(),title:h0.coerce.string(),eyebrow:h0.coerce.string().optional(),headline:h0.coerce.string(),annotation:h0.coerce.string().optional(),methodology:h0.coerce.string().optional(),sources:h0.array(h0.object({name:h0.coerce.string(),logoUrl:h0.coerce.string()})).optional()},v16=h0.discriminatedUnion("template",[h0.object({template:h0.literal("cover"),score:h0.object({value:h0.coerce.number(),max:h0.coerce.number().optional(),grade:h0.coerce.string().optional(),label:h0.coerce.string().optional()}).optional(),brandImage:h0.coerce.string().optional(),screenshot:h0.coerce.string().optional(),mobileScreenshot:h0.coerce.string().optional()}),h0.object({template:h0.literal("cta"),ctaUrl:h0.coerce.string().optional(),ctaLabel:h0.coerce.string().optional(),bullets:h0.array(h0.coerce.string()).optional()}),h0.object({template:h0.literal("series"),points:h0.array(h0.coerce.number()).min(2),xLabels:h0.array(h0.coerce.string()).min(1),unit:h0.coerce.string().optional(),callout:h0.object({index:h0.coerce.number(),value:h0.coerce.string(),tone:CC.optional()})}),h0.object({template:h0.literal("threshold"),value:h0.coerce.string().default(""),metricLabel:h0.coerce.string().optional(),ratio:h0.coerce.number(),thresholdRatio:h0.coerce.number().optional(),thresholdLabel:h0.coerce.string().default(""),tone:CC.optional()}),h0.object({template:h0.literal("stats"),stats:h0.array(h0.object({value:h0.coerce.string(),label:h0.coerce.string(),tone:CC.optional()})).min(1)}),h0.object({template:h0.literal("bars"),items:h0.array(h0.object({value:h0.coerce.string(),label:h0.coerce.string(),ratio:h0.coerce.number(),tone:CC.optional()})).min(1)}),h0.object({template:h0.literal("gauges"),gauges:h0.array(h0.object({label:h0.coerce.string(),value:h0.coerce.string(),status:h0.enum(["good","warn","bad"]).catch("warn"),caption:h0.coerce.string().optional(),ratio:h0.coerce.number().optional()})).min(1)}),h0.object({template:h0.literal("checklist"),checks:h0.array(h0.object({label:h0.coerce.string(),status:h0.enum(["pass","fail","warn"]).catch("fail"),value:h0.coerce.string().optional()})).min(1)}),h0.object({template:h0.literal("table"),columns:h0.array(h0.object({label:h0.coerce.string(),align:h0.enum(["left","right"]).optional()})).min(1),rows:h0.array(C16).min(1),highlightRow:h0.coerce.number().optional()}),h0.object({template:h0.literal("products"),products:h0.array(h0.object({name:h0.coerce.string(),price:h0.coerce.string().optional(),image:h0.coerce.string().optional(),url:h0.coerce.string().optional()})).min(1)}),h0.object({template:h0.literal("list"),entries:h0.array(h0.object({label:h0.coerce.string(),severity:h0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:h0.coerce.number().optional()}),h0.object({template:h0.literal("keywords"),volumeLabel:h0.coerce.string().optional(),keywords:h0.array(h0.object({term:h0.coerce.string(),volume:h0.coerce.string(),position:h0.coerce.number().catch(0)})).min(1)}),h0.object({template:h0.literal("competitor"),metricLabel:h0.coerce.string().optional(),competitors:h0.array(h0.object({name:h0.coerce.string(),value:h0.coerce.string(),tone:CC.optional(),isYou:h0.boolean().optional()})).min(1)}),h0.object({template:h0.literal("scorecard"),rivalLabel:h0.coerce.string().optional(),dimensions:h0.array(h0.object({label:h0.coerce.string(),you:h0.coerce.string(),rival:h0.coerce.string().optional(),rivalName:h0.coerce.string().optional(),tone:CC.optional()})).min(1)})]),VC$=h0.object({..._16,template:v16})});function dE0($){let Z=[],X=[...$.sections].sort((G,Y)=>G.position-Y.position).map((G)=>{let Y=VC$.safeParse(G.props);if(Y.success)return Y.data;let Q=Y.error.issues[0];return Z.push({section_type:G.section_type,position:G.position,reason:Q?`${Q.path.join(".")||"(root)"}: ${Q.message}`:"contract violation"}),null}).filter((G)=>G!==null);return{deck:{meta:{...$.meta,scores:$.summary?.scores},slides:X},drops:Z}}var Z81=B(()=>{CC$()});import{join as _C$}from"path";async function f16($){try{let Z=await fetch(`${UW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(b16)});if(!Z.ok)return null;let X=await Z.json(),{deck:G}=dE0(X);if(!G.slides.length)return null;let Y=G.slides.find((W)=>W.template.template==="cover"),Q=Y?.template,J=Q&&Q.template==="cover"?Q:void 0;return{brand:G.meta.brand?.trim()||$81($),score:G.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function xY($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function x16($,Z){let X=Cg($),G=Z?.brand?.trim()||$81(X),Y=kC$(X,128),J=`${(d0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=SC$({brand:G,domain:X,score:Z?.score,verdict:Z?.verdict}),N=`${J}/og.png`,H=`${G} commerce report by decocms`;return[`<title>${xY(W)}</title>`,`<meta name="description" content="${xY(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="${xY(W)}" />`,`<meta property="og:description" content="${xY(K)}" />`,`<meta property="og:url" content="${xY(J)}" />`,`<meta property="og:image" content="${xY(N)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${xY(H)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${xY(W)}" />`,`<meta name="twitter:description" content="${xY(K)}" />`,`<meta name="twitter:image" content="${xY(N)}" />`,`<meta name="twitter:image:alt" content="${xY(H)}" />`,`<link rel="canonical" href="${xY(J)}" />`,`<link rel="icon" href="${xY(Y)}" sizes="any" />`].join(`
2732
2732
  `)}function y16($,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}
2733
2733
  </head>`)}function vC$($){let Z=new D1;return Z.get("/:domain/og.png",async(X)=>{let G=Cg(X.req.param("domain")),Y=async()=>{let Q=$?Bun.file(_C$($,"report-og-fallback.png")):null;if(!Q||!await Q.exists())return X.notFound();return X.body(new Uint8Array(await Q.arrayBuffer()),200,{"Content-Type":"image/png","Cache-Control":"public, max-age=0, s-maxage=3600"})};try{let Q=await fetch(`${UW({})}/api/v2/public/diagnostics/${encodeURIComponent(G)}/og.png`,{signal:AbortSignal.timeout(g16)}),J=Q.headers.get("content-type")??"";if(!Q.ok||!J.startsWith("image/")||!Q.body)return Y();return X.body(Q.body,200,{"Content-Type":J,"Cache-Control":"public, max-age=0, s-maxage=604800"})}catch{return Y()}}),Z.get("/:domain",async(X)=>{let G=X.req.param("domain"),Y=$?_C$($,"index.html"):null,Q=Y?Bun.file(Y):null;if(!Q||!await Q.exists())return X.notFound();let J=await Q.text();try{let W=await f16(Cg(G)),K=x16(G,W);return X.html(y16(J,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return X.html(J)}}),Z}var b16=2500,g16=1e4;var bC$=B(()=>{u8();Z81();TD();V$()});function Bo($,Z){return fetch(`${UW({})}${$}`,Z)}async function h16($,Z,X){let G=new URLSearchParams;if(Z)G.set("pw",Z);if(X)G.set("lang",X);let Y=G.toString()?`?${G.toString()}`:"",Q=await Bo(`/api/v2/public/diagnostics/${encodeURIComponent($)}${Y}`,{headers:{Accept:"application/json"}});if(Q.status===404)return{status:"not_found",deck:null,scanned_at:null,drops:[]};if(!Q.ok)throw Error(`report read HTTP ${Q.status}`);let J=await Q.json(),{deck:W,drops:K}=dE0(J);return{status:W.slides.length?"ready":"empty",deck:W,scanned_at:J.scanned_at,drops:K}}var u16,C3,mE0=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},fC$;var xC$=B(()=>{u8();IQ();TD();Z81();u16=new Set(["complete","errored","terminated","unknown"]),C3=new D1;C3.use("*",async($,Z)=>{let X=await L8.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});C3.use("/run",mE0);C3.use("/status",mE0);C3.use("/link-token/*",mE0);C3.use("/suggest",mE0);C3.get("/site/:domain",async($)=>{let Z=$.req.param("domain").trim();if(!Z)return $.json({error:"domain is required"},400);let X=$.get("reportUser"),G=$.req.query("key")?.trim()||void 0,Y=$.req.query("lang")?.trim()||void 0;try{let Q=await h16(Z,G,Y);if($.header("Cache-Control","private, no-store"),X||!Q.deck)return $.json(Q);return $.json({...Q,deck:{...Q.deck,slides:Q.deck.slides.slice(0,1)},truncated:Q.status==="ready"})}catch{return $.json({error:"report read failed"},502)}});C3.post("/run",async($)=>{let Z=$.get("reportUser"),X;try{X=await $.req.json()}catch{return $.json({error:"invalid JSON"},400)}let G=typeof X.domain==="string"?X.domain.trim():"";if(!G)return $.json({error:"domain is required"},400);let Y=Z.email,Q=typeof X.distinctId==="string"&&X.distinctId.trim()&&X.distinctId.length<=200?X.distinctId.trim():void 0;try{let J=await Bo("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${AD({})}`},body:JSON.stringify({url:G,email:Y,distinct_id:Q})});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)}});C3.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let X=await Bo(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${AD({})}`}});if(!X.ok)return $.json({error:`status HTTP ${X.status}`},502);let Y=(await X.json()).status??"unknown",Q={done:u16.has(Y),status:Y};return $.json(Q)}catch{return $.json({error:"status failed"},502)}});C3.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let X=await Bo(`/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)}});C3.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let X=await Bo(`/api/v2/public/suggest?q=${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(!X.ok)return $.json({suggestions:[]});let G=await X.json();return $.json({suggestions:Array.isArray(G.suggestions)?G.suggestions:[]})}catch{return $.json({suggestions:[]})}});fC$=C3});import{createHmac as c16,timingSafeEqual as l16}from"crypto";function yC$($,Z,X,G=Date.now()){if(!Z||!X)return!1;let Y,Q=[];for(let N of Z.split(",")){let H=N.indexOf("=");if(H<=0)continue;let F=N.slice(0,H).trim(),U=N.slice(H+1).trim();if(F==="t")Y=U;else if(F==="v1")Q.push(U)}if(!Y||Q.length===0)return!1;let J=Number(Y);if(!Number.isFinite(J)||Math.abs(G/1000-J)>d16)return!1;let W=c16("sha256",X).update(`${Y}.${$}`).digest("hex"),K=Buffer.from(W,"hex");return Q.some((N)=>{let H=Buffer.from(N,"hex");return K.length===H.length&&l16(K,H)})}function gC$($){let Z;try{Z=JSON.parse($)}catch{return null}let X=tQ(Z),G=tQ(tQ(X?.data)?.object);if(!X||typeof X.type!=="string"||!G)return null;return{id:MK(X.id),type:X.type,created:typeof X.created==="number"?X.created:void 0,livemode:typeof X.livemode==="boolean"?X.livemode:void 0,data:{object:G}}}function m16($){switch($){case"active":case"trialing":return"active";case"past_due":return"past_due";default:return"canceled"}}function MK($){return typeof $==="string"?$:void 0}function tQ($){return typeof $==="object"&&$!==null?$:void 0}function iE0($){return typeof $==="number"?new Date($*1000):null}function Y81($){return MK($)??MK(tQ($)?.id)}function i16($){return Y81($.subscription)??MK(tQ(tQ($.parent)?.subscription_details)?.subscription)}function n16($){let Z=iE0($.current_period_end);if(Z)return Z;let X=tQ($.items)?.data;if(!Array.isArray(X))return null;let G=0;for(let Y of X){let Q=tQ(Y)?.current_period_end;if(typeof Q==="number"&&Q>G)G=Q}return G>0?new Date(G*1000):null}function X81($,Z){let X=iE0($.created);return!!X&&!!Z.lastStripeEventAt&&X<Z.lastStripeEventAt}function G81($,Z){let X=iE0($.created);if(!X)return;return Z.lastStripeEventAt&&Z.lastStripeEventAt>X?void 0:X}async function p16($,Z){let X=Z.data.object;switch(Z.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":{let G=MK(tQ(X.metadata)?.orgId);if(!G)return{handled:!1,reason:"no orgId"};if(MK(tQ(X.metadata)?.kind)==="topup"){if(X.mode!=="payment")return{handled:!1,reason:"topup with wrong mode"};if(MK(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let J=MK(X.id);if(!J)return console.error("stripe webhook: topup session without id",{eventId:Z.id,organizationId:G}),{handled:!1,reason:"topup session without id"};let W=Number(tQ(X.metadata)?.creditCents);if(!Number.isInteger(W)||W<=0)return console.error("stripe webhook: paid topup with bad metadata \u2014 credit NOT applied",{eventId:Z.id,organizationId:G,creditCents:tQ(X.metadata)?.creditCents}),{handled:!1,reason:"bad topup metadata"};return{handled:!0,organizationId:G,topUp:{creditCents:W,referenceId:`stripe-topup:${J}`}}}if(X.mode!=="subscription")return{handled:!1,reason:"not a subscription checkout"};if(MK(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let Y=await $.getBilling(G);if(!Y)return{handled:!1,reason:"unknown org"};let Q=Y81(X.subscription);if(Y.stripeSubscriptionId&&Q&&Y.stripeSubscriptionId!==Q)return console.error("stripe webhook: refused checkout rebind",{organizationId:G,eventId:Z.id}),{handled:!1,reason:"org already bound to another subscription",orphanSubscriptionId:Q};if(X81(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(G,{stripeCustomerId:Y81(X.customer),stripeSubscriptionId:Q,status:"active",lastStripeEventAt:G81(Z,Y)}),{handled:!0,organizationId:G}}case"customer.subscription.updated":case"customer.subscription.deleted":{let G=MK(X.id);if(!G)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(G);if(!Y)return{handled:!1,reason:"unknown subscription"};let Q=Z.type==="customer.subscription.deleted";if(!Q&&X81(Z,Y))return{handled:!1,reason:"stale event"};let J=Q?"canceled":m16(X.status);return await $.updateStripeState(Y.organizationId,{status:J,currentPeriodEnd:n16(X),...Q&&{stripeSubscriptionId:null},lastStripeEventAt:G81(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}case"invoice.paid":{let G=i16(X);if(!G)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(G);if(!Y)return{handled:!1,reason:"unknown subscription"};if(X81(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Y.organizationId,{status:"active",currentPeriodEnd:iE0(X.period_end),lastStripeEventAt:G81(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}default:return{handled:!1,reason:`unhandled event ${Z.type}`}}}async function hC$($){let Z=new bN(c8().db),X=await p16(Z,$);if(X.handled&&X.topUp)await dH$({organizationId:X.organizationId,amountCents:X.topUp.creditCents,referenceId:X.topUp.referenceId});if(!X.handled&&X.orphanSubscriptionId)try{await r0$(X.orphanSubscriptionId),console.error("stripe webhook: canceled orphan subscription",{subscriptionId:X.orphanSubscriptionId,eventId:$.id})}catch(G){if(!(G instanceof Q3&&(G.status===400||G.status===404)))throw G}return X}var d16=300;var uC$=B(()=>{YQ();ri();bo0()});var t16=1048576,Q81;var cC$=B(()=>{u8();jC();V$();uC$();Q81=new D1;Q81.post("/webhook",F7({maxSize:t16,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=d0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let X=await $.req.text();if(!yC$(X,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let Y=gC$(X);if(!Y)return $.json({error:"invalid payload"},400);let Q=await hC$(Y);return console.log("stripe webhook",{eventId:Y.id,type:Y.type,livemode:Y.livemode,...Q}),$.json({received:!0})})});function lC$($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var dC$,o16,r16,mC$;var iC$=B(()=>{u8();PJ();rx();Bv();dC$=new D1,o16=["range","if-none-match","if-modified-since"],r16=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];dC$.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),X=Z.organization?.id;if(!Z.auth?.user?.id){if(Hg($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new G$(401,{message:"Authentication required"})}if(!X)throw new G$(401,{message:"Organization context required"});let G=$.req.path.replace(/^.*\/files\//,"");if(!G)throw new G$(400,{message:"Missing file key"});let Y=await Yp(G,Z);if(!Y)throw new G$(503,{message:"Object storage not configured"});if(Y.startsWith("data:")&&jJ()){let K=Y.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new G$(500,{message:"Invalid data URL from storage"});let[,N,H]=K,F=Buffer.from(H,"base64"),U=new Headers({"Content-Type":N,"Cache-Control":"private, max-age=86400"});return lC$(U,N),new Response(F,{status:200,headers:U})}let Q=new Headers;for(let K of o16){let N=$.req.header(K);if(N)Q.set(K,N)}let J=await fetch(Y,{headers:Q});if(J.status===403||J.status===404)throw new G$(404,{message:"File not found"});if(!J.ok&&J.status!==304&&J.status!==416)throw console.error(`[files] upstream storage error ${J.status} for key:`,G),new G$(502,{message:"Upstream storage error"});let W=new Headers;for(let K of r16){let N=J.headers.get(K);if(N)W.set(K,N)}return W.set("Cache-Control","private, max-age=86400"),lC$(W,W.get("content-type")??""),new Response(J.body,{status:J.status,headers:W})});mC$=dC$});var Do=_((_C)=>{var a16=_C&&_C.__createBinding||(Object.create?function($,Z,X,G){if(G===void 0)G=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($,G,Y)}:function($,Z,X,G){if(G===void 0)G=X;$[G]=Z[X]}),s16=_C&&_C.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))a16(Z,$,X)};Object.defineProperty(_C,"__esModule",{value:!0});s16(tG(),_C)});var tC$=_((nC$)=>{Object.defineProperty(nC$,"__esModule",{value:!0});nC$.version=void 0;nC$.version="3.4.0"});var aC$=_((kK)=>{var e16=kK&&kK.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(kK,"__esModule",{value:!0});kK.NodeTransport=kK.VERSION=void 0;kK.nodeResolveHost=Q$6;var g6=Do(),$$6=j0("net"),J81=j0("tls"),Z$6=j0("path"),oC$=j0("fs"),X$6=e16(j0("dns")),G$6=tC$();kK.VERSION=G$6.version;var Y$6="nats.js";class rC${socket;version;lang;yields=[];signal=(0,g6.deferred)();closedNotification=(0,g6.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=Y$6,this.version=kK.VERSION}async connect($,Z){this.tlsName=$.tlsName,this.options=Z;let{tls:X}=this.options,{handshakeFirst:G}=X||{};try{if(G===!0)this.socket=await this.tlsFirst($);else this.socket=await this.dial($);if(this.done)this.socket?.destroy();let Y=await this.peekInfo();(0,g6.checkOptions)(Y,Z);let{tls_required:Q,tls_available:J}=Y,W=J===!0&&Z.tls!==null;if(!G&&(Q||W))this.socket=await this.startTLS();if(this.done)this.socket?.destroy();if(Q&&this.socket.encrypted!==!0)throw g6.errors.InvalidArgumentError.format("tls","is not available on this server");return this.connected=!0,this.setupHandlers(),this.signal.resolve(),Promise.resolve()}catch(Y){let Q=Y;if(!Q)Q=new g6.errors.ConnectionError("error connecting - node provided an undefined error");let{code:J}=Q,W=J==="ECONNREFUSED"?new g6.errors.ConnectionError("connection refused",{cause:Q}):Q;throw this.socket?.destroy(),W}}dial($){let Z=(0,g6.deferred)(),X,G=(0,$$6.createConnection)($.port,$.hostname,()=>{Z.resolve(G),G.removeAllListeners()});return G.on("error",(Y)=>{X=Y}),G.on("close",()=>{G.removeAllListeners(),Z.reject(X)}),G.setNoDelay(!0),Z}get isClosed(){return this.done}close($){return this._closed($,!1)}peekInfo(){let $=(0,g6.deferred)(),Z;return this.socket.on("data",(X)=>{this.yields.push(X);let G=g6.DataBuffer.concat(...this.yields),Y=(0,g6.extractProtocolMessage)(G);if(Y!=="")try{let Q=g6.INFO.exec(Y);if(!Q)throw Error("unexpected response from server");let J=JSON.parse(Q[1]);$.resolve(J)}catch(Q){$.reject(Q)}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,g6.deferred)();try{if($=(0,Z$6.resolve)($),!(0,oC$.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,oC$.readFile)($,(X,G)=>{if(X)return Z.reject(X);Z.resolve(G)})}catch(X){Z.reject(X)}return Z}async loadClientCerts(){let $={},{certFile:Z,cert:X,caFile:G,ca:Y,keyFile:Q,key:J}=this.options.tls;try{if(Z){let W=await this.loadFile(Z);if(W)$.cert=W}else if(X)$.cert=X;if(Q){let W=await this.loadFile(Q);if(W)$.key=W}else if(J)$.key=J;if(G){let W=await this.loadFile(G);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,g6.extend)(X,this.options.tls,Y)}catch(Y){return Promise.reject(new g6.errors.ConnectionError(Y.message,{cause:Y}))}let G=(0,g6.deferred)();try{let Y=(0,J81.connect)($.port,$.hostname,X,()=>{Y.removeAllListeners(),G.resolve(Y)});Y.on("error",(Q)=>{Z=Q}),Y.on("secureConnect",()=>{if(X.rejectUnauthorized===!1)return;if(!Y.authorized)throw Y.authorizationError}),Y.on("close",()=>{G.reject(Z),Y.removeAllListeners()}),Y.setNoDelay(!0)}catch(Y){G.reject(new g6.errors.ConnectionError(Y.message,{cause:Y}))}return G}async startTLS(){let $,Z={socket:this.socket,servername:this.tlsName,rejectUnauthorized:!0};if(typeof this.options.tls==="object")try{let G=await this.loadClientCerts()||{};Z=(0,g6.extend)(Z,this.options.tls,G)}catch(G){return Promise.reject(new g6.errors.ConnectionError(G.message,{cause:G}))}let X=(0,g6.deferred)();try{let G=(0,J81.connect)(Z,()=>{G.removeAllListeners(),X.resolve(G)});G.on("error",(Y)=>{$=Y}),G.on("secureConnect",()=>{if(Z.rejectUnauthorized===!1)return;if(!G.authorized)throw G.authorizationError}),G.on("close",()=>{X.reject($),G.removeAllListeners()})}catch(G){X.reject(new g6.errors.ConnectionError(G.message,{cause:G}))}return X}setupHandlers(){let $;this.socket.on("data",(Z)=>{return this.yields.push(Z),this.signal.resolve()}),this.socket.on("error",(Z)=>{$=Z}),this.socket.on("end",()=>{if(this.socket?.destroyed)return;this.socket?.write(new Uint8Array(0),()=>{this.socket?.end()})}),this.socket.on("close",()=>{this._closed($,!1)})}[Symbol.asyncIterator](){return this.iterate()}async*iterate(){while(!0){if(this.yields.length===0)await this.signal;let $=this.yields;this.yields=[];for(let Z=0;Z<$.length;Z++){if(this.options.debug)console.info(`> ${(0,g6.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,g6.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 J81.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,g6.render)($)}`);let Z=(0,g6.deferred)();try{this.socket.write($,(X)=>{if(X){if(this.options.debug)console.error(`!!! ${(0,g6.render)($)}: ${X}`);return Z.reject(X)}return Z.resolve()})}catch(X){if(this.options.debug)console.error(`!!! ${(0,g6.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}}kK.NodeTransport=rC$;function Q$6($){let Z=(0,g6.deferred)();return X$6.default.lookup($,{all:!0},(X,G)=>{if(X){Z.reject(X);return}let Y=[];for(let Q of G)Y.push(Q.address);if(Y.length===0)Y.push($);Z.resolve(Y)}),Z}});var X_$=_((Z_$)=>{Object.defineProperty(Z_$,"__esModule",{value:!0});Z_$.connect=J$6;var sC$=aC$(),eC$=Do(),$_$=Do();function J$6($={}){if((0,$_$.hasWsProtocol)($))return Promise.reject($_$.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,eC$.setTransportFactory)({factory:()=>{return new sC$.NodeTransport},dnsResolveFn:sC$.nodeResolveHost}),eC$.NatsConnectionImpl.connect($)}});var G_$=_((pH)=>{var K$6=pH&&pH.__createBinding||(Object.create?function($,Z,X,G){if(G===void 0)G=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($,G,Y)}:function($,Z,X,G){if(G===void 0)G=X;$[G]=Z[X]}),N$6=pH&&pH.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))K$6(Z,$,X)};Object.defineProperty(pH,"__esModule",{value:!0});pH.connect=void 0;var H$6=X_$();Object.defineProperty(pH,"connect",{enumerable:!0,get:function(){return H$6.connect}});N$6(Do(),pH)});function W_$($){let Z=$?.connectFn??O$6,X=null,G=null,Y=!1,Q=!1,J=!1,W=[];function K(){return X!==null&&!X.isClosed()&&!X.isDraining()&&!J}function N(){console.log(`[NatsProvider] fireReady: ${W.length} callbacks`);for(let U of W)try{U()}catch{}}function H(U){(async()=>{for await(let w of U.status())if(w.type==="disconnect")console.log("[NatsProvider] Disconnected"),J=!0;else if(w.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),J=!1,G=null,N()})().catch(()=>{})}async function F(U,w){let O=0;while(!Q)try{X=await Z({servers:U,timeout:w$6,reconnect:!0,maxReconnectAttempts:-1,...w?{authenticator:w}:{}}),console.log(`[NatsProvider] Connected to ${X.getServer()} after ${O} attempt(s)`),G=null,J=!1,H(X),N();return}catch{O++;let D=lG(U$6,F$6,O-1,2,0.5);await a$(D)}}return{init(U,w){if(Y)return;Y=!0,Q=!1;let O=w?.creds?Y_$.credsAuthenticator(new TextEncoder().encode(w.creds)):void 0;F(U,O).catch(()=>{})},isConnected(){return K()},getConnection(){return K()?X:null},getJetStream(){if(!K())return null;if(!G)G=J_$.jetstream(X);return G},onReady(U){if(W.push(U),K())try{U()}catch{}},async drain(){if(Q=!0,Y=!1,G=null,J=!1,X){let U=X;X=null,await U.drain().catch(()=>{})}}}}function O$6($){return Q_$.connect($)}var Y_$,Q_$,J_$,F$6=100,U$6=3000,w$6=3000;var K_$=B(()=>{W5();Y_$=k(Yh(),1),Q_$=k(G_$(),1),J_$=k(eO(),1)});function W81($,Z){return`${$}.${Z}`}class K81{cache;constructor($){this.cache=Jg({ttlMs:$?.ttlMs??B$6,maxSize:$?.maxSize??D$6})}async get($,Z){return this.cache.get(W81($,Z))??null}async set($,Z,X){this.cache.set(W81($,Z),X)}async invalidate($,Z){this.cache.delete(W81($,Z))}teardown(){this.cache.clear()}}var B$6=600000,D$6=5000;var N_$=()=>{};function nE0($,Z){return`${$}:${Z}`}function N81($){let Z=Jg({ttlMs:$?.ttlMs??L$6,maxSize:$?.maxSize??E$6}),X=$?.getConnection,G=crypto.randomUUID(),Y=new TextEncoder,Q=new TextDecoder,J=null;function W(K,N){let H=X?.();if(!H)return;try{H.publish(H_$,Y.encode(JSON.stringify({organizationId:K,keyId:N,originId:G})))}catch(F){console.warn("[ProviderKeyCache] Publish failed (non-critical):",F)}}return{get(K,N){return Z.get(nE0(K,N))},set(K,N,H){Z.set(nE0(K,N),H)},invalidate(K,N){Z.delete(nE0(K,N)),W(K,N)},start(){if(J)return;let K=X?.();if(!K)return;J=K.subscribe(H_$),(async()=>{for await(let N of J)try{let H=JSON.parse(Q.decode(N.data));if(H.originId===G)continue;Z.delete(nE0(H.organizationId,H.keyId))}catch{}})().catch(console.error)},teardown(){J?.unsubscribe(),J=null,Z.clear()}}}var H_$="studio.ai-provider-keys.invalidate",L$6=30000,E$6=5000;var F_$=()=>{};class H81{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=U_$.map((G)=>Z.subscribe(G));for(let G of this.subscriptions)(async()=>{for await(let Y of G)try{let Q=JSON.parse(X.decode(Y.data));if(Q.originId===this.originId)continue;if(Q.messageId&&this.hasSeen(Q.messageId))continue;this.onCancel?.(Q.taskId)}catch{}})().catch(console.error)}broadcast($){if(/[.*>\s]/.test($)){console.warn("[NatsCancelBroadcast] Invalid threadId, skipping broadcast");return}this.onCancel?.($);try{let Z=this.options.getConnection();if(!Z)return;let X=this.encoder.encode(JSON.stringify({taskId:$,originId:this.originId,messageId:crypto.randomUUID()}));for(let G of U_$)Z.publish(G,X)}catch(Z){console.warn("[NatsCancelBroadcast] Publish failed (non-critical):",Z)}}publishControlFrame($,Z){}async stop(){for(let $ of this.subscriptions)$.unsubscribe();this.subscriptions=[],this.seenMessageIds.clear(),this.onCancel=null}hasSeen($){if(this.seenMessageIds.has($))return!0;if(this.seenMessageIds.add($),this.seenMessageIds.size>1000){let Z=this.seenMessageIds.values().next().value;if(Z)this.seenMessageIds.delete(Z)}return!1}}var U_$;var w_$=B(()=>{U_$=["studio.decopilot.cancel","mesh.decopilot.cancel"]});var O_$=($)=>{let Z;return()=>Z??=$()},F81,U81;var B_$=B(()=>{K5();F81=O_$(()=>J8.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),U81=O_$(()=>J8.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function I$6(){return{name:zH,subjects:[`${ZO0}.>`],storage:_3.StorageType.File,max_age:P$6,max_bytes:T$6,max_msgs_per_subject:R$6,discard:_3.DiscardPolicy.Old,retention:_3.RetentionPolicy.Limits,duplicate_window:A$6,num_replicas:1}}class E_${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 D_$($){let Z=L_$.headers();for(let[X,G]of Object.entries($))Z.set(X,G);return Z}function S$6($,Z){let X=0;return{publish(G,Y,Q,J){G.publish(Y,Q,J?{headers:J}:void 0).catch((W)=>{if(X++,j$6().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 V$6($){if(!($ instanceof Error))return!1;if($.name==="TimeoutError")return!0;return/timeout|no responders|503/i.test($.message)}class w81{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=I$6(),X=await dG(async()=>{let G=this.options.getJetStreamManager?await this.options.getJetStreamManager():await _3.jetstreamManager($);try{await G.streams.info(zH),await G.streams.update(zH,Z)}catch(Y){if(Y instanceof Error&&Y.message.includes("stream not found"))await G.streams.add(Z);else if(Y instanceof Error&&/can ?not change.*storage|storage type/i.test(Y.message))await G.streams.delete(zH),await G.streams.add(Z);else throw Y}return G},{maxAttempts:5,minTimeout:250,maxTimeout:4000,jitter:0.5,isRetriable:V$6});this.js=this.options.getJetStream(),this.jsm=X,console.log(`[Decopilot] StreamBuffer.init ${this.js?"ready":"degraded (js=null)"}`)}pump($,Z,X,G){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 Q=S$6(Z,G),J=!1,W=()=>{if(J)return;J=!0;let N=qK$(Z);Y.publish(N.subject,N.data).catch(()=>{})};X.addEventListener("abort",W,{once:!0});let K=(N)=>{let H=performance.now(),F=ip0(N,{runId:Z}),U=performance.now()-H;if(F81().record(U),U81().add(1,{"org.id":G??"unknown"}),k$6?.record(U,F.reduce((w,O)=>w+O.data.length,0)),F.length===0){console.warn(`[Decopilot] dropping oversized stream chunk for thread ${Z}`);return}for(let w of F)Q.publish(Y,w.subject,w.data,w.headers?D_$(w.headers):void 0)};return(async()=>{let N=$.getReader(),H=0,F=0,U;try{while(!0){let{done:w,value:O}=await N.read();if(w)break;if(K(O),F++,++H>=64)H=0,await new Promise((D)=>setImmediate(D))}}catch(w){U=w,console.warn(`[Decopilot] stream pump error for thread ${Z}:`,w?.message??w)}finally{if(N.releaseLock(),W(),M$6)console.warn(JSON.stringify({msg:"decopilot-stream-diag",event:"pump-done",taskId:Z,publishedChunks:F,publishErrors:Q.errorCount}))}if(U!==void 0)throw U})()}async publishRawChunk($,Z,X){let G=this.js;if(!G)return!1;let Y=performance.now(),Q=ip0(Z,{runId:$,dedup:X});if(F81().record(performance.now()-Y),U81().add(1),Q.length===0)return console.warn(`[Decopilot] dropping oversized raw chunk for thread ${$} (> MAX_CHUNKED_BYTES)`),!0;for(let J of Q)await G.publish(J.subject,J.data,{...J.headers?{headers:D_$(J.headers)}:{},...J.msgId?{msgID:J.msgId}:{}});return!0}async publishDone($,Z,X){let G=this.js;if(!G)return!1;let Y=IK$({runId:$,fenceToken:Z,finalSeq:X});return await G.publish(Y.subject,Y.data,{msgID:Y.msgId}),!0}async createTailStream($,Z,X){let G=this.js;if(!G)return console.warn(`[Decopilot] createTailStream: JetStream client unavailable for thread ${$}; no live tail`),null;let Y=X?.deliverPolicy==="new"?_3.DeliverPolicy.New:_3.DeliverPolicy.All,Q=X?.closeOnDone??!1,J=QO($),W;try{W=await(await G.consumers.get(zH,{filter_subjects:J,deliver_policy:Y})).consume()}catch(D){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",D?.message??D),null}let H=JO0({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(XO0()).pipeThrough(GO0()).getReader(),F=!1,U=()=>{if(F)return;F=!0;try{H.releaseLock()}catch{}},w=!1,O=()=>{if(w)return;w=!0,W.stop(),H.cancel().catch(()=>{}),U()};return Z?.addEventListener("abort",O,{once:!0}),new ReadableStream({async pull(D){for(;;){let{done:L,value:E}=await H.read();if(L){O(),D.close();return}let z=E;if(z.kind==="done"){if(Q){O(),D.close();return}continue}D.enqueue(z.chunk);return}},cancel(){O()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge(zH,{filter:QO($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var _3,L_$,z$6=($)=>{let Z;return()=>Z??=$()},j$6,P$6=86400000000000,A$6=120000000000,T$6=4294967296,R$6=500000,q$6,M$6,k$6;var z_$=B(()=>{W5();np0();WO0();YO0();K5();B_$();_3=k(eO(),1),L_$=k(Yh(),1),j$6=z$6(()=>J8.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"}));q$6=process.env.STREAM_ENCODE_TRACE==="1",M$6=process.env.DECOPILOT_STREAM_TRACE==="1";k$6=q$6?new E_$:null});function pE0($,Z,X,G){if(!G)return!1;return $.emit(Z,e3(X,G.status,{title:G.title??void 0,virtualMcpId:G.virtual_mcp_id??void 0,createdBy:G.created_by??void 0,triggerId:G.trigger_id??null,branch:G.branch??null,harnessId:G.harness_id??void 0,createdAt:G.created_at,updatedAt:G.updated_at})),!0}var j_$=B(()=>{O8()});class O81{storage;options;timer=null;constructor($,Z={}){this.storage=$;this.options=Z}start(){if(this.timer)return;let $=this.options.intervalMs??300000;this.timer=setInterval(()=>{this.runOnce()},$)}async runOnce(){let $=this.options.staleAfterMs??3600000;try{let Z=await this.storage.sweepAbandoned($);if(Z>0)console.log(`[async-research-sweeper] marked ${Z} stale jobs as abandoned`);return Z}catch(Z){return console.error("[async-research-sweeper] sweep failed",Z),0}}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}import{readdir as C$6,rm as tE0}from"fs/promises";import{join as oE0}from"path";async function rE0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-_$6),Z.setUTCHours(0,0,0,0);let X=0;try{let G=await vC($);for(let Y of G)if(/^\d{4}$/.test(Y))X+=await P_$($,Y,Z);else if(!Y.startsWith(".")){let Q=oE0($,Y),J=await vC(Q);for(let K of J){if(!/^\d{4}$/.test(K))continue;X+=await P_$(Q,K,Z)}if((await vC(Q)).length===0)await tE0(Q,{recursive:!0,force:!0})}}catch(G){console.warn("monitoring retention cleanup failed:",G)}return X}async function P_$($,Z,X){let G=0,Y=oE0($,Z),Q=await vC(Y);for(let W of Q){if(!/^\d{2}$/.test(W))continue;let K=oE0(Y,W),N=await vC(K);for(let F of N){if(!/^\d{2}$/.test(F))continue;let U=new Date(`${Z}-${W}-${F}T00:00:00Z`);if(isNaN(U.getTime()))continue;if(U<X){let w=oE0(K,F);await tE0(w,{recursive:!0,force:!0}),G++}}if((await vC(K)).length===0)await tE0(K,{recursive:!0,force:!0})}if((await vC(Y)).length===0)await tE0(Y,{recursive:!0,force:!0});return G}async function vC($){try{return(await C$6($)).filter((X)=>!X.startsWith("."))}catch{return[]}}var _$6=30;var B81=()=>{};import{DBOS as D81,SchedulerMode as v$6}from"@dbos-inc/dbos-sdk";async function f$6(){let $=[aQ(),bC(),_K()],Z=0;for(let X of $)try{Z+=await rE0(X)}catch(G){console.error("[monitoring-retention] cleanup failed:",G)}return console.log(`[monitoring-retention] deleted ${Z} day-dir(s) across ${$.length} signal dir(s)`),{deleted:Z,dirs:$.length}}async function x$6($,Z){await D81.runStep(()=>f$6(),{name:"monitoringRetention"})}function T_$(){if(A_$)return;A_$=!0;let $=D81.registerWorkflow(x$6,{name:"monitoringRetentionWorkflow"});D81.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:b$6,mode:v$6.ExactlyOncePerIntervalWhenActive})}var b$6="23 4 * * *",A_$=!1;var R_$=B(()=>{mG();B81()});function I_$($){return async(Z,X)=>{let G=await $.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["member.role","organization.id as orgId","organization.slug as orgSlug","organization.name as orgName"]).where("member.userId","=",X).where("member.organizationId","=",Z).executeTakeFirst();if(!G)return console.warn(`[automationContextFactory] User ${X} not found in org ${Z} \u2014 returning null`),null;let Y=await Bw.create();Y.auth.user={id:X,role:G.role},Y.organization={id:G.orgId,slug:G.orgSlug,name:G.orgName};let Q=await Dc0($.db,Z,G.role);return Y.boundAuth=Bc0({auth:Y.authInstance,headers:new Headers,role:G.role,permissions:Q,userId:X}),Y.access=new oD(X,void 0,Y.boundAuth,G.role,"self"),W50(Y,{id:G.orgId,slug:G.orgSlug}),Y}}var q_$=B(()=>{rD();Pi()});function y$6(){return{services:[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}],migrationsStatus:"pending",serverUrl:null,logs:[]}}function h$6(){for(let $ of g$6)$()}function M_$($){let Z=[...L81.logs,$];L81={...L81,logs:Z.length>500?Z.slice(-500):Z},h$6()}function E81(){return u$6}var L81,g$6,u$6=!1;var z81=B(()=>{L81=y$6(),g$6=new Set});import{EventEmitter as c$6}from"events";var j81;var k_$=B(()=>{z81();j81=new c$6;j81.on("request",($)=>{M_$($)})});function S_$(){return async($,Z)=>{let X=Date.now(),G=$.req.method,Y=$.req.path;if(Y==="/api/auth/get-session"||Y.includes("favicon")){await Z();return}let Q="",J=!1;if(Y.startsWith("/mcp")&&G==="POST"){J=!0;try{if($.req.header("Content-Type")?.includes("application/json")){let U=await $.req.raw.clone().json();if(U.method==="tools/call"&&U.params?.name){let w=_g(U.params.name),O=U.params.arguments||{},D=Object.keys(O).map((E)=>_g(E)),L=D.length>0?D.slice(0,3).join(",")+(D.length>3?"\u2026":""):"";Q=`${t6.tool}${w}${t6.dim}(${L})${t6.reset}`}else if(U.method)Q=`${t6.dim}${_g(U.method)}${t6.reset}`}}catch{}}let W=_g(Y);if(Y.startsWith("/mcp/conn_")){let H=Y.split("/")[2]??"";W=`/mcp/${t6.mcp}${_g(H.slice(0,12))}\u2026${t6.reset}`}else if(Y==="/mcp")W=`${t6.mcp}/mcp${t6.reset}`;else if(Y==="/mcp/registry")W=`${t6.mcp}/mcp/registry${t6.reset}`;let K=d$6(G),N=J?"\u25C0":"\u2190";if(!E81())console.log(`${t6.dim}${N}${t6.reset} ${K}${G}${t6.reset} ${W}${Q?` ${Q}`:""}`);try{await Z()}finally{let H=Date.now()-X,F=$.res.status,U=l$6(F),w=H<1000?`${H}ms`:`${(H/1000).toFixed(1)}s`,O=J?"\u25B6":"\u2192";if(!E81())console.log(`${t6.dim}${O}${t6.reset} ${K}${G}${t6.reset} ${W}${Q?` ${Q}`:""} ${U}${F}${t6.reset} ${t6.duration}${w}${t6.reset}`);j81.emit("request",{method:G,path:_g(Y),status:F,duration:H,timestamp:new Date})}}}var t6,l$6=($)=>{if($>=500)return t6.serverError;if($>=400)return t6.clientError;if($>=300)return t6.redirect;return t6.ok},d$6=($)=>{return t6[$]||t6.reset},_g=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var V_$=B(()=>{z81();k_$();t6={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 b_$}from"crypto";import{mkdir as m$6,readdir as i$6,rm as C_$,stat as f_$}from"fs/promises";import{join as A81,relative as n$6}from"path";import{z as L$}from"zod";function y_$($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return A81(p$6,Z)}function g_$($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function P81($,Z){let X=y_$($),G=g_$(Z);return A81(X,G)}function t$6($,Z,X,G){let Y=d0().encryptionKey||"dev-secret",Q=`${$}:${Z}:${X}:${G}`;return b_$("sha256",Y).update(Q).digest("hex")}function v_$($,Z,X,G,Y){let Q=Math.floor(Date.now()/1000)+G,J=t$6(Z,X,Q,Y),W=new URL(`/api/dev-assets/${Z}/${g_$(X)}`,$);return W.searchParams.set("expires",Q.toString()),W.searchParams.set("signature",J),W.searchParams.set("method",Y),W.toString()}function h_$($,Z,X){let G=`${$}:${Z.getTime()}:${X}`;return`"${b_$("md5","etag").update(G).digest("hex")}"`}async function u_$($,Z,X,G,Y){try{let Q=await i$6($,{withFileTypes:!0});for(let J of Q){let W=A81($,J.name),N=n$6(Z,W).replace(/\\/g,"/");if(X&&!N.startsWith(X))continue;if(J.isDirectory())if(G){let H=N+"/";if(!X||H.startsWith(X)){if(!(X?N.slice(X.length):N).includes("/"))Y.commonPrefixes.add(H)}}else await u_$(W,Z,X,G,Y);else if(J.isFile()){if(G&&X){let H=N.slice(X.length);if(H.includes(G)){let F=H.indexOf(G),U=X+H.slice(0,F+1);Y.commonPrefixes.add(U);continue}}try{let H=await f_$(W);Y.objects.push({key:N,size:H.size,lastModified:H.mtime.toISOString(),etag:h_$(W,H.mtime,H.size)})}catch{}}}}catch{}}function c_$($,Z){let G=s($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:L$.object({prefix:L$.string().optional(),maxKeys:L$.number().optional().default(1000),continuationToken:L$.string().optional(),delimiter:L$.string().optional()}),outputSchema:L$.object({objects:L$.array(L$.object({key:L$.string(),size:L$.number(),lastModified:L$.string(),etag:L$.string()})),nextContinuationToken:L$.string().optional(),isTruncated:L$.boolean(),commonPrefixes:L$.array(L$.string()).optional()}),handler:async(Y)=>{let Q=Y,J=Q.prefix||"",W=Q.maxKeys??1000,K=Q.delimiter,N=Q.continuationToken,H=y_$(G);await m$6(H,{recursive:!0});let F={objects:[],commonPrefixes:new Set};await u_$(H,H,J,K,F),F.objects.sort((L,E)=>L.key.localeCompare(E.key));let U=0;if(N){if(U=F.objects.findIndex((L)=>L.key>N),U===-1)U=F.objects.length}let w=F.objects.slice(U,U+W),O=U+W<F.objects.length,D=O?w[w.length-1]?.key:void 0;return{objects:w,isTruncated:O,nextContinuationToken:D,commonPrefixes:Array.from(F.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:L$.object({key:L$.string()}),outputSchema:L$.object({contentType:L$.string().optional(),contentLength:L$.number(),lastModified:L$.string(),etag:L$.string(),metadata:L$.record(L$.string(),L$.string()).optional()}),handler:async(Y)=>{let Q=Y,J=P81(G,Q.key),W=await f_$(J);return{contentType:L11(Q.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:h_$(J,W.mtime,W.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:L$.object({key:L$.string(),expiresIn:L$.number().optional()}),outputSchema:L$.object({url:L$.string(),expiresIn:L$.number()}),handler:async(Y)=>{let Q=Y,J=Q.expiresIn??__$;return{url:v_$(Z,G,Q.key,J,"GET"),expiresIn:J}}},{name:"PUT_PRESIGNED_URL",description:"Generate a presigned URL for uploading a file to local storage",inputSchema:L$.object({key:L$.string(),expiresIn:L$.number().optional(),contentType:L$.string().optional()}),outputSchema:L$.object({url:L$.string(),expiresIn:L$.number()}),handler:async(Y)=>{let Q=Y,J=Q.expiresIn??__$;return{url:v_$(Z,G,Q.key,J,"PUT"),expiresIn:J}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:L$.object({key:L$.string()}),outputSchema:L$.object({success:L$.boolean(),key:L$.string()}),handler:async(Y)=>{let Q=Y,J=P81(G,Q.key);try{return await C_$(J),{success:!0,key:Q.key}}catch{return{success:!1,key:Q.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:L$.object({keys:L$.array(L$.string()).max(1000)}),outputSchema:L$.object({deleted:L$.array(L$.string()),errors:L$.array(L$.object({key:L$.string(),message:L$.string()}))}),handler:async(Y)=>{let Q=Y,J=[],W=[];return await Promise.all(Q.keys.map(async(K)=>{let N=P81(G,K);try{await C_$(N),J.push(K)}catch(H){W.push({key:K,message:H instanceof Error?H.message:"Unknown error"})}})),{deleted:J,errors:W}}}]}async function T81($,Z,X){let G=c_$(Z,X),Y=new NW({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:e6});for(let J of G){let W="shape"in J.inputSchema?J.inputSchema.shape:L$.object({}).shape,K=J.outputSchema&&"shape"in J.outputSchema?J.outputSchema.shape:L$.object({}).shape;Y.registerTool(J.name,{description:J.description??"",inputSchema:W,outputSchema:K,annotations:J.annotations,_meta:J._meta},async(N)=>{try{let H=await J.handler(N);return{content:[{type:"text",text:JSON.stringify(H)}],structuredContent:H}}catch(H){return{content:[{type:"text",text:`Error: ${H.message}`}],isError:!0}}})}let Q=new yX({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await Y.connect(Q),hQ(Y,Q,$,"mcp:dev-assets")}async function l_$($,Z,X,G){let Q=c_$(X,G).find((J)=>J.name===$);if(!Q)return{content:[{type:"text",text:`Tool not found: ${$}`}],isError:!0};try{let J=await Q.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 p$6="./data/assets",__$=3600,x_$,d_$;var m_$=B(()=>{V$();Fy();u8();Gl();gV();PX();WE0();x_$=new D1;x_$.all("/",async($)=>{let Z=$.get("studioContext"),X=new URL($.req.url),G=`${X.protocol}//${X.host}`;return T81($.req.raw,Z,G)});d_$=x_$});var i_$={};N4(i_$,{mountDevRoutes:()=>o$6});function o$6($,Z){$.all("/mcp/:connectionId{.*_dev-assets$}",Z,async(G)=>{let Y=G.get("studioContext"),Q=new URL(G.req.url),J=`${Q.protocol}//${Q.host}`;return T81(G.req.raw,Y,J)}),$.all("/mcp/:connectionId{.*_dev-assets$}/call-tool/:toolName",Z,async(G)=>{let Y=G.get("studioContext"),Q=new URL(G.req.url),J=`${Q.protocol}//${Q.host}`,W=G.req.param("toolName");if(!W)return G.json({error:"Missing tool name"},400);let K=await G.req.json(),N=await l_$(W,K,Y,J);if(N.isError)return G.json(N.content,500);return G.json(N.content)}),$.use("/mcp/dev-assets",Z),$.route("/mcp/dev-assets",d_$);let X=new D1;X.use("*",S3({mountPath:"/api/dev-assets"})),X.route("/",JE0({orgFromPath:!1})),$.route("/api/dev-assets",X)}var n_$=B(()=>{u8();N11();WE0();m_$()});import{sql as r$6}from"kysely";import{randomUUID as p_$}from"crypto";import{z as a$6}from"zod";async function e$6($){let Z=new Date().toISOString(),X=p_$(),G=x4.SELF($.organizationId),Y="registry.publish_request.created",Q={requestId:$.request.id,requestedId:$.request.requested_id,title:$.request.title,status:$.request.status,createdAt:$.request.created_at,requester:{name:$.request.requester_name,email:$.request.requester_email}};await $.db.insertInto("events").values({id:X,organization_id:$.organizationId,type:"registry.publish_request.created",source:G,specversion:"1.0",subject:$.request.id,time:Z,datacontenttype:"application/json",dataschema:null,data:JSON.stringify(Q),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","=",G)])).execute();if(J.length>0)await $.db.insertInto("event_deliveries").values(J.map((W)=>({id:p_$(),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 r$6`SELECT
2734
2734
  pg_notify('studio_events', ${X}),