decocms 4.267.1 → 4.267.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (224) hide show
  1. package/dist/client/assets/{AlertCircle-CJ9wwmWU.js → AlertCircle-Bh5eyk7E.js} +1 -1
  2. package/dist/client/assets/{AreaChart-J-_KGvHx.js → AreaChart-CdgOhmeV.js} +1 -1
  3. package/dist/client/assets/{ArrowLeft-DiMYzkwG.js → ArrowLeft-DPAD_bDB.js} +1 -1
  4. package/dist/client/assets/{ArrowUp-O_ly97kJ.js → ArrowUp-CsQExObW.js} +1 -1
  5. package/dist/client/assets/{Check-D6SWnzv9.js → Check-C-fNWBtu.js} +1 -1
  6. package/dist/client/assets/{CheckCircle-HeUwwC_D.js → CheckCircle-CFZsf0nR.js} +1 -1
  7. package/dist/client/assets/{ChevronDown-CYw-1MyP.js → ChevronDown-C_fnroAG.js} +1 -1
  8. package/dist/client/assets/{ChevronRight-Dtf8gLIi.js → ChevronRight-l1PG_VwT.js} +1 -1
  9. package/dist/client/assets/{ChevronSelectorVertical-D4x6hSSX.js → ChevronSelectorVertical-BzYadQiY.js} +1 -1
  10. package/dist/client/assets/{ChevronUp-BFVqUCEa.js → ChevronUp-CPK7Ojor.js} +1 -1
  11. package/dist/client/assets/{Copy01-CDNaKgXg.js → Copy01-BlZkp5Ns.js} +1 -1
  12. package/dist/client/assets/{CreditCard01-DmiQCmiA.js → CreditCard01-iENL0AXn.js} +1 -1
  13. package/dist/client/assets/{DotsVertical-DAsyEFvH.js → DotsVertical-DxxkMkoH.js} +1 -1
  14. package/dist/client/assets/{Download01-3bywBEMV.js → Download01-BPK0JJ5z.js} +1 -1
  15. package/dist/client/assets/{Eye-BUR8MG0Y.js → Eye-CdCJO-3W.js} +1 -1
  16. package/dist/client/assets/{FilterLines-DnBTn6f_.js → FilterLines-Bmj7v-ot.js} +1 -1
  17. package/dist/client/assets/{Globe01-D0TDsB3a.js → Globe01--qhlOJ6B.js} +1 -1
  18. package/dist/client/assets/{Globe04-CZkEyVz4.js → Globe04-Dh6q8Mvj.js} +1 -1
  19. package/dist/client/assets/{HardDrive-CYJDZOd9.js → HardDrive-BawAldEC.js} +1 -1
  20. package/dist/client/assets/{Key01-CfE_26Cu.js → Key01-CMLRnJx8.js} +1 -1
  21. package/dist/client/assets/{LinkExternal01-N38kQz3j.js → LinkExternal01-CMMKWx57.js} +1 -1
  22. package/dist/client/assets/{LockUnlocked01-CtKtOau7.js → LockUnlocked01-C1dDmFUo.js} +1 -1
  23. package/dist/client/assets/{LogOut01-DKWRdcnN.js → LogOut01-Nm23XK3h.js} +1 -1
  24. package/dist/client/assets/{Monitor01-Dms_jXQP.js → Monitor01-AEemTAZ1.js} +1 -1
  25. package/dist/client/assets/{Palette-C8ZuaxLo.js → Palette-DNi9VW60.js} +1 -1
  26. package/dist/client/assets/{Play-C54bY5DK.js → Play-Dau0w8ZO.js} +1 -1
  27. package/dist/client/assets/{Plus-EqGyKjJh.js → Plus-C5T5cM4h.js} +1 -1
  28. package/dist/client/assets/{SearchLg-C3tJwOtw.js → SearchLg-DQlLXzHL.js} +1 -1
  29. package/dist/client/assets/{SearchMd-BkaIlVfN.js → SearchMd-B-NlJ1bi.js} +1 -1
  30. package/dist/client/assets/{Settings02-Bn5WdDiE.js → Settings02-CwVN1BRS.js} +1 -1
  31. package/dist/client/assets/{Share07-uLIuLzK5.js → Share07-BlSD-Drt.js} +1 -1
  32. package/dist/client/assets/{Shield01-CTre_Wbt.js → Shield01-D5XDUf8t.js} +1 -1
  33. package/dist/client/assets/{Stars01-gJkndlGx.js → Stars01-ByJhyDpp.js} +1 -1
  34. package/dist/client/assets/{Stars02-H1qOq2Hl.js → Stars02-CmIErHU_.js} +1 -1
  35. package/dist/client/assets/{Sun-BCplJMqz.js → Sun-DIQ80bYw.js} +1 -1
  36. package/dist/client/assets/{SwitchHorizontal01-DJyPk3EJ.js → SwitchHorizontal01-Cl5Lv5iH.js} +1 -1
  37. package/dist/client/assets/{Tool01-C0Bsrct9.js → Tool01-DUx0fv2T.js} +1 -1
  38. package/dist/client/assets/{Tool02-jO3cHmz2.js → Tool02-BE-ccYln.js} +1 -1
  39. package/dist/client/assets/{Trash01-C4WHkmHO.js → Trash01-C7rboEHp.js} +1 -1
  40. package/dist/client/assets/{TrendUp01-BU2HMoKo.js → TrendUp01-4FoplyO7.js} +1 -1
  41. package/dist/client/assets/{Upload01-R1Ewkrvb.js → Upload01-DjoVo2v3.js} +1 -1
  42. package/dist/client/assets/{User01-2f2qWx6r.js → User01-BR90VfhO.js} +1 -1
  43. package/dist/client/assets/{UserSquare-yd4ryQ0C.js → UserSquare-Dwd4DQOP.js} +1 -1
  44. package/dist/client/assets/{Users01-DBi1KuA6.js → Users01-BE1DUs4E.js} +1 -1
  45. package/dist/client/assets/{Users03-ySuakE9b.js → Users03-CeE8C-d7.js} +1 -1
  46. package/dist/client/assets/{XCircle-vXY6EmnO.js → XCircle-DqDyabCl.js} +1 -1
  47. package/dist/client/assets/{XClose-4W3i_kwZ.js → XClose-CyX_XSv6.js} +1 -1
  48. package/dist/client/assets/{YAxis-D8O-bwAN.js → YAxis-BxGZVgXn.js} +1 -1
  49. package/dist/client/assets/{Zap-DGpmQ2Zi.js → Zap-b89xcjwn.js} +1 -1
  50. package/dist/client/assets/{ZapSquare-DrsGt5pV.js → ZapSquare-Pv2XWcDI.js} +1 -1
  51. package/dist/client/assets/{access-gate-54YQZIe7.js → access-gate-DacPfb9U.js} +1 -1
  52. package/dist/client/assets/{agent-icon-BPvMo1Pj.js → agent-icon-CtJufrYT.js} +1 -1
  53. package/dist/client/assets/{agents-list-A4J2IB6w.js → agents-list-CeNW3qDw.js} +1 -1
  54. package/dist/client/assets/{ai-providers-8gOr0yRm.js → ai-providers-5Dcdw5qU.js} +1 -1
  55. package/dist/client/assets/{alert-Vhs6Ltkq.js → alert-2lkA4UzZ.js} +1 -1
  56. package/dist/client/assets/{alert-dialog-DYKPFY14.js → alert-dialog-BoAsOlul.js} +1 -1
  57. package/dist/client/assets/{api-keys-zuuq4fqZ.js → api-keys-Cj49m_uR.js} +1 -1
  58. package/dist/client/assets/{app-editor-C9LPJjBA.js → app-editor-TMsUVNlm.js} +1 -1
  59. package/dist/client/assets/{auth-Oh-sopr_.js → auth-BXopYCgq.js} +1 -1
  60. package/dist/client/assets/{auth-catchall-DkWnkS9E.js → auth-catchall-B0bKSImy.js} +1 -1
  61. package/dist/client/assets/{auth-entry-BWGic6mp.js → auth-entry-mVQq8sNe.js} +1 -1
  62. package/dist/client/assets/{auth-split-layout-h5D_6R5B.js → auth-split-layout-sVhvS-q9.js} +1 -1
  63. package/dist/client/assets/{authenticate-and-persist-oauth-DCneWr4S.js → authenticate-and-persist-oauth-ulRcvbLZ.js} +1 -1
  64. package/dist/client/assets/{automation-list-row-BrFWZND_.js → automation-list-row-CdzYLmNm.js} +1 -1
  65. package/dist/client/assets/{automation-runs-D_362Vzd.js → automation-runs-CyoL0OT8.js} +1 -1
  66. package/dist/client/assets/{automations-7ovzf1_n.js → automations-wKp2Kl_b.js} +1 -1
  67. package/dist/client/assets/{avatar-jOLcRw3-.js → avatar-8seM97b8.js} +1 -1
  68. package/dist/client/assets/{badge-IVfz4Ye4.js → badge-jrrFxN3_.js} +1 -1
  69. package/dist/client/assets/{block-document-ClJ5ERrh.js → block-document-BWmFVKc8.js} +1 -1
  70. package/dist/client/assets/{buckets-DjnIKswd.js → buckets-BumIoFpo.js} +1 -1
  71. package/dist/client/assets/{bulk-category-panel-9UlbAA3L.js → bulk-category-panel-BWiajq31.js} +1 -1
  72. package/dist/client/assets/{capability-load-error-Du_j_5c5.js → capability-load-error-DMXJVH0h.js} +1 -1
  73. package/dist/client/assets/{cards-DEHJJel1.js → cards-BIuzNDM7.js} +1 -1
  74. package/dist/client/assets/{category-editor-DzTwdhZs.js → category-editor-BdCOHsSR.js} +1 -1
  75. package/dist/client/assets/{chart-C6t22pIn.js → chart-kkq2bgBY.js} +1 -1
  76. package/dist/client/assets/{chat-context-DcdiZGES.js → chat-context-D4chPiQt.js} +1 -1
  77. package/dist/client/assets/{checkbox-Ct2iDcDN.js → checkbox-Dnt403I6.js} +1 -1
  78. package/dist/client/assets/{choose-editor-DJdxRTjH.js → choose-editor-CBEAn1ul.js} +1 -1
  79. package/dist/client/assets/{cli-auth-success-BPXHTaI9.js → cli-auth-success-DD_u66rV.js} +1 -1
  80. package/dist/client/assets/{collection-detail-D_-npsI8.js → collection-detail-Dpv36-Ki.js} +1 -1
  81. package/dist/client/assets/{collection-display-button-DOaJhx_I.js → collection-display-button-DFp9cQiu.js} +1 -1
  82. package/dist/client/assets/{collection-search-BQyWV-U9.js → collection-search-B30IDSnZ.js} +1 -1
  83. package/dist/client/assets/{collection-table-wrapper-LAJKgXA_.js → collection-table-wrapper-CG14_mEX.js} +1 -1
  84. package/dist/client/assets/{collection-tabs-3twtcsg_.js → collection-tabs-5yCqGK6s.js} +1 -1
  85. package/dist/client/assets/{command-_Kg6Y3bz.js → command-BkkmHFIO.js} +1 -1
  86. package/dist/client/assets/{commerce-onboarding-qIxqmKNe.js → commerce-onboarding-Dw8rs5k6.js} +1 -1
  87. package/dist/client/assets/{connect-CFsE1U1F.js → connect-N7BCQzS6.js} +1 -1
  88. package/dist/client/assets/{connection-C1FC6-dK.js → connection-BswRqtD2.js} +1 -1
  89. package/dist/client/assets/{connection-card-BwlT8_Hj.js → connection-card-BtjCr6O5.js} +1 -1
  90. package/dist/client/assets/{connection-detail-Guzp2CYD.js → connection-detail-CuzyLlZ-.js} +1 -1
  91. package/dist/client/assets/{connection-form-helpers-CS2czT_s.js → connection-form-helpers-DY1qYBUV.js} +1 -1
  92. package/dist/client/assets/{connections-DtQlGhuW.js → connections-2q0Qs_rp.js} +1 -1
  93. package/dist/client/assets/{decopilot-sse-pool-CRrEpueL.js → decopilot-sse-pool-C9seNiMP.js} +1 -1
  94. package/dist/client/assets/{dialog-CQ3kVG84.js → dialog-DZmDsmP_.js} +1 -1
  95. package/dist/client/assets/{domain-settings-BnyyU92-.js → domain-settings-SHrSqhGa.js} +1 -1
  96. package/dist/client/assets/{drawer-CwBCBxKC.js → drawer-BtPGjIk3.js} +1 -1
  97. package/dist/client/assets/{dropdown-menu-CV2Drnki.js → dropdown-menu-D04-Ikyq.js} +1 -1
  98. package/dist/client/assets/{empty-state-g7mQrC4G.js → empty-state-BKzqYQ6m.js} +1 -1
  99. package/dist/client/assets/{extract-connection-data-mDr9vDPM.js → extract-connection-data-CLCAoSbd.js} +1 -1
  100. package/dist/client/assets/{file-explorer-CQKLWA_i.js → file-explorer-DcdkH9N-.js} +1 -1
  101. package/dist/client/assets/{file-type-icon-wQhnHF5h.js → file-type-icon-Di3amUTj.js} +1 -1
  102. package/dist/client/assets/{form-DnxVTW4k.js → form-BuHQTvGF.js} +1 -1
  103. package/dist/client/assets/{general-CrbIPBEw.js → general-PU3-KTYp.js} +1 -1
  104. package/dist/client/assets/{github-repo-picker-DviAEfjQ.js → github-repo-picker-Bm_IgdMI.js} +1 -1
  105. package/dist/client/assets/{hooks-BVGAbABw.js → hooks-C4iyf31w.js} +1 -1
  106. package/dist/client/assets/{index-n_hKaK5i.js → index-B4VJanCn.js} +1 -1
  107. package/dist/client/assets/{index-BGxzIVA5.js → index-BWM9xKol.js} +1 -1
  108. package/dist/client/assets/{index-DFFqFRA_.js → index-C3LpEfG5.js} +1 -1
  109. package/dist/client/assets/{index-DGmZSxFg.js → index-CH2QJwMF.js} +1 -1
  110. package/dist/client/assets/{index-TmL3dv4s.js → index-CxTmBLCE.js} +1 -1
  111. package/dist/client/assets/{index-89I-FuJW.js → index-DP3cSVqr.js} +1 -1
  112. package/dist/client/assets/{index-S5P_Z59E.js → index-DWE4AWSk.js} +5 -5
  113. package/dist/client/assets/{index-B5t1W_FQ.js → index-Ds_uWlOe.js} +3 -3
  114. package/dist/client/assets/{index-BHQRv_8j.js → index-Dz1-uVCs.js} +1 -1
  115. package/dist/client/assets/{index-DiQD7hll.js → index-e2mgQvAh.js} +1 -1
  116. package/dist/client/assets/{index-redirect-o5Z3mkr1.js → index-redirect-BrUI5yEz.js} +1 -1
  117. package/dist/client/assets/{infra-billing-BSnRde9j.js → infra-billing-BaETBQJO.js} +1 -1
  118. package/dist/client/assets/{input-DTvM2_W3.js → input-DEouOEM4.js} +1 -1
  119. package/dist/client/assets/{integration-icon-DVRAyxbh.js → integration-icon-DvS6hHxI.js} +1 -1
  120. package/dist/client/assets/{invite-member-dialog-CQui3TBv.js → invite-member-dialog-BlFFHXQk.js} +1 -1
  121. package/dist/client/assets/{label-DDeSHuib.js → label-CE3-_9EQ.js} +1 -1
  122. package/dist/client/assets/{layout-Dqhq_mFg.js → layout-DW-NmD7W.js} +1 -1
  123. package/dist/client/assets/{login-By1qY5M7.js → login-BmYowdFi.js} +1 -1
  124. package/dist/client/assets/{mcp-oauth-DcXtY0av.js → mcp-oauth-Dbt9SYhY.js} +1 -1
  125. package/dist/client/assets/{members-DM0-Qu1r.js → members-BbMWilxg.js} +1 -1
  126. package/dist/client/assets/{monaco-editor-RDB4jCQm.js → monaco-editor-B317q7Ac.js} +1 -1
  127. package/dist/client/assets/{monitoring-stats-row-BzaptMZg.js → monitoring-stats-row-VtIm-QIa.js} +1 -1
  128. package/dist/client/assets/{multi-select-DI9QEXgP.js → multi-select-o90f6wd-.js} +1 -1
  129. package/dist/client/assets/{oauth-callback-C6dt3KtV.js → oauth-callback-OQKqByA1.js} +1 -1
  130. package/dist/client/assets/{oauth-callback-ai-provider-CY_oQnny.js → oauth-callback-ai-provider-BlghvLrE.js} +1 -1
  131. package/dist/client/assets/{onboarding-fCzXNSj-.js → onboarding-CrnIFAXa.js} +1 -1
  132. package/dist/client/assets/{org-layout-BmHA6s0U.js → org-layout-gGsmHstn.js} +1 -1
  133. package/dist/client/assets/{organization-choice-ry5PXUOi.js → organization-choice-BuIlGQZF.js} +1 -1
  134. package/dist/client/assets/{orgs-Dl8DYVQV.js → orgs-LrisCces.js} +1 -1
  135. package/dist/client/assets/{page-seo-form-DVq-ZF22.js → page-seo-form-CWOJ61uy.js} +1 -1
  136. package/dist/client/assets/{popover-BuQ2Aaif.js → popover-B2_mR6re.js} +1 -1
  137. package/dist/client/assets/{post-calendar-BMzUzcfy.js → post-calendar-BekZ24RM.js} +1 -1
  138. package/dist/client/assets/{post-editor-CzKyEr5v.js → post-editor-CidDiszY.js} +1 -1
  139. package/dist/client/assets/{primitives-CPpgwVn7.js → primitives-DhA_VJ7_.js} +1 -1
  140. package/dist/client/assets/{profile-DLz5em2n.js → profile-BQM9uoas.js} +1 -1
  141. package/dist/client/assets/{project-app-view-eia2rSV9.js → project-app-view-Be6gwZ7R.js} +1 -1
  142. package/dist/client/assets/record-editor-Csja9gIv.js +1 -0
  143. package/dist/client/assets/{redirect-editor-J6etNx4l.js → redirect-editor-BLDfNuvY.js} +1 -1
  144. package/dist/client/assets/registry-BR7iasWl.js +2 -0
  145. package/dist/client/assets/{registry-layout-Bpjz_W8Z.js → registry-layout-e3rHn9Aw.js} +1 -1
  146. package/dist/client/assets/{reports-wlYGmv6M.js → reports-DojtoZat.js} +1 -1
  147. package/dist/client/assets/{require-capability-Ctpmcphj.js → require-capability-d0zq3z2S.js} +1 -1
  148. package/dist/client/assets/{required-auth-layout-BF6_LYOJ.js → required-auth-layout-C_reFmtD.js} +1 -1
  149. package/dist/client/assets/{reset-password-DaYPVGP3.js → reset-password-CnTLnHKe.js} +1 -1
  150. package/dist/client/assets/{roles-DVLinAD5.js → roles-C3yuD9f4.js} +1 -1
  151. package/dist/client/assets/{search-input-QzmgF-65.js → search-input-COF_1sBU.js} +1 -1
  152. package/dist/client/assets/{secrets-BA90mxZe.js → secrets-BnPEgKYJ.js} +1 -1
  153. package/dist/client/assets/{sections-editor-DyRnyD9F.js → sections-editor-BAkmJiqf.js} +1 -1
  154. package/dist/client/assets/{select-BQ5nCEee.js → select-DCIBhUDV.js} +1 -1
  155. package/dist/client/assets/{select-model-JbZYj5EG.js → select-model-DbCVIOxU.js} +1 -1
  156. package/dist/client/assets/{self-tool-result-CURzAebA.js → self-tool-result-DSJu3K-X.js} +1 -1
  157. package/dist/client/assets/{seo-editor-Cmr3UiQB.js → seo-editor-zrcKeD6h.js} +1 -1
  158. package/dist/client/assets/{settings-layout-C6r9RR8M.js → settings-layout-J4DKx7QH.js} +1 -1
  159. package/dist/client/assets/{shell-controls-DakmqrxF.js → shell-controls-N8pawHxe.js} +1 -1
  160. package/dist/client/assets/{shell-layout-BU0mmxv0.js → shell-layout-B4uD5px4.js} +1 -1
  161. package/dist/client/assets/{spinner-B1bi2Hlr.js → spinner-g8HT-25A.js} +1 -1
  162. package/dist/client/assets/{sprints-bHejyMUl.js → sprints-DP-r2_-o.js} +1 -1
  163. package/dist/client/assets/{sso-ByHA8DiU.js → sso-C2-2G3_X.js} +1 -1
  164. package/dist/client/assets/{store-Tcmnulht.js → store-B8fwfamw.js} +1 -1
  165. package/dist/client/assets/store-registry-DRIsIXRG.js +2 -0
  166. package/dist/client/assets/{switch-INuPPcJm.js → switch-CDYIbA5A.js} +1 -1
  167. package/dist/client/assets/{synced-repos-DyM6z9S0.js → synced-repos-BcVFSgK-.js} +1 -1
  168. package/dist/client/assets/{tab-id-aVJM0RRI.js → tab-id-Ba-MZcEt.js} +1 -1
  169. package/dist/client/assets/{table-DBroxVLv.js → table-CKTJOTOn.js} +1 -1
  170. package/dist/client/assets/{tabs-XdPLLuDf.js → tabs-DFGtc0Jb.js} +1 -1
  171. package/dist/client/assets/{tasks-DGuFs9e4.js → tasks-BUoDVRCz.js} +1 -1
  172. package/dist/client/assets/{textarea-5HpnfzUp.js → textarea-DjZ4FeF-.js} +1 -1
  173. package/dist/client/assets/{toggle-group-B3IDMBf5.js → toggle-group-CylCYITU.js} +1 -1
  174. package/dist/client/assets/{toolbar-cAr6C3fn.js → toolbar-DzsOLMTt.js} +1 -1
  175. package/dist/client/assets/{track-CWwWdTHR.js → track-DbC9skEL.js} +1 -1
  176. package/dist/client/assets/{types-D3deRtLs.js → types-BtngBj2X.js} +1 -1
  177. package/dist/client/assets/{use-ai-providers-C98NxYyQ.js → use-ai-providers-DvUEyegR.js} +1 -1
  178. package/dist/client/assets/{use-api-keys-B9u4Fr5P.js → use-api-keys-B5VEMT0B.js} +1 -1
  179. package/dist/client/assets/{use-automations-BKiK1wBc.js → use-automations-ZILuN1hU.js} +1 -1
  180. package/dist/client/assets/{use-autosave-CdTPSZZO.js → use-autosave-DvO3ixq4.js} +1 -1
  181. package/dist/client/assets/{use-clock-tick-CLzUFIF8.js → use-clock-tick-AIAgVj5B.js} +1 -1
  182. package/dist/client/assets/{use-commerce-diagnostic-CMTBu61E.js → use-commerce-diagnostic-Bv5SzS_W.js} +1 -1
  183. package/dist/client/assets/{use-connection-awA-8uMM.js → use-connection-BVJIjJ4C.js} +1 -1
  184. package/dist/client/assets/{use-copy-BPhRUhgy.js → use-copy-TdRNlKZq.js} +1 -1
  185. package/dist/client/assets/{use-create-virtual-mcp-BSNLXy32.js → use-create-virtual-mcp-BMi0lmIc.js} +1 -1
  186. package/dist/client/assets/{use-debounced-autosave-CTZCql7-.js → use-debounced-autosave-CxIwvV_w.js} +1 -1
  187. package/dist/client/assets/{use-debounced-value-CiOTaiJR.js → use-debounced-value-B2kbD2pu.js} +1 -1
  188. package/dist/client/assets/{use-decopilot-events-CpcxDnb-.js → use-decopilot-events-DNqubiQn.js} +1 -1
  189. package/dist/client/assets/{use-delete-connection-Cw-NQEg7.js → use-delete-connection-BVp9x3KR.js} +1 -1
  190. package/dist/client/assets/{use-deployment-admin-DvHu61pX.js → use-deployment-admin-BASEqDiK.js} +1 -1
  191. package/dist/client/assets/{use-file-configs-ev_HC_0k.js → use-file-configs-JEp8kQGJ.js} +1 -1
  192. package/dist/client/assets/{use-infinite-scroll-DW4uVh_B.js → use-infinite-scroll-B6YIXqCg.js} +1 -1
  193. package/dist/client/assets/{use-join-requests-Ceh5l_AF.js → use-join-requests-PuT-TTys.js} +1 -1
  194. package/dist/client/assets/{use-mcp-client-BK6scNDB.js → use-mcp-client-Bj8K4eKE.js} +1 -1
  195. package/dist/client/assets/{use-mcp-tools-CHDrZXlN.js → use-mcp-tools-BiJWKd1X.js} +1 -1
  196. package/dist/client/assets/{use-members-Cf4d-2K4.js → use-members-WqPgSlhr.js} +1 -1
  197. package/dist/client/assets/{use-navigate-to-agent-BDGXR15r.js → use-navigate-to-agent-3A_qsfym.js} +1 -1
  198. package/dist/client/assets/{use-org-auth-client-B6AX8Fxp.js → use-org-auth-client-BXhdIN0j.js} +1 -1
  199. package/dist/client/assets/{use-org-repo-syncs-DcM8Zue8.js → use-org-repo-syncs-CkaNWi0w.js} +1 -1
  200. package/dist/client/assets/{use-org-sso-B4BxLz6S.js → use-org-sso-CdHOThJg.js} +1 -1
  201. package/dist/client/assets/{use-organization-roles-B-tgaD4w.js → use-organization-roles-D5zGbhvV.js} +1 -1
  202. package/dist/client/assets/{use-organization-settings-DcTpQwQj.js → use-organization-settings-Bg7k04lx.js} +1 -1
  203. package/dist/client/assets/{use-registry-connections-DDv0tqw6.js → use-registry-connections-B11hai6z.js} +1 -1
  204. package/dist/client/assets/{use-secrets-DzWNQ3oe.js → use-secrets-CLxvJlAK.js} +1 -1
  205. package/dist/client/assets/{use-section-preview-base-B33n4heT.js → use-section-preview-base-BKRRIZ-B.js} +1 -1
  206. package/dist/client/assets/{use-status-sounds-PaNHe7Xe.js → use-status-sounds-TaFIrZ2z.js} +1 -1
  207. package/dist/client/assets/{use-tags-CODnzIy0.js → use-tags-C9M3wQR3.js} +1 -1
  208. package/dist/client/assets/{use-task-board-items-CZPepz8K.js → use-task-board-items-DEOpHFlj.js} +1 -1
  209. package/dist/client/assets/{use-view-mode-Cxn9xSMG.js → use-view-mode-BSPEY1eM.js} +1 -1
  210. package/dist/client/assets/{use-virtual-mcp-DxufwI-o.js → use-virtual-mcp-BNiQL6RT.js} +1 -1
  211. package/dist/client/assets/useInfiniteQuery-b8V4fpGD.js +1 -0
  212. package/dist/client/assets/useSuspenseInfiniteQuery-BpvFpoz3.js +1 -0
  213. package/dist/client/assets/{users-yCyg65TE.js → users-DdUBfPF6.js} +1 -1
  214. package/dist/client/assets/{variant-calendar-eApAo8VS.js → variant-calendar-B_0e579e.js} +1 -1
  215. package/dist/client/assets/{view-mode-toggle-VWjOvx06.js → view-mode-toggle-aFmZxylk.js} +1 -1
  216. package/dist/client/index.html +1 -1
  217. package/dist/server/cli.js +2 -2
  218. package/dist/server/server.js +2 -2
  219. package/package.json +1 -1
  220. package/dist/client/assets/record-editor-BIb_VdAY.js +0 -1
  221. package/dist/client/assets/registry-D15V5q_Q.js +0 -2
  222. package/dist/client/assets/store-registry-DjP-xgAD.js +0 -2
  223. package/dist/client/assets/useInfiniteQuery-C8bQb7en.js +0 -1
  224. package/dist/client/assets/useSuspenseInfiniteQuery-CYKDX-yI.js +0 -1
@@ -1502,7 +1502,7 @@ ${$.description}
1502
1502
  `):Z?.feedback?[Z.pr?`A reviewer requested changes on the existing pull request #${Z.pr.number} (${Z.pr.url}):`:"A reviewer requested changes on your previous work:",Z.feedback,Z.pr?`Load the repo, then CHECK OUT that PR's branch (e.g. \`gh pr checkout ${Z.pr.number}\`) before editing, address the feedback, commit, and push to update the SAME pull request \u2014 do NOT open a new one or start a new branch.`:"Address this feedback.",""].join(`
1503
1503
  `):Z?.pr?[`This task already has an open pull request #${Z.pr.number} (${Z.pr.url}), and you are already on its branch.`,"Continue that work: commit and push to update the SAME pull request \u2014 do NOT open a new one or start a new branch. If you find it already does everything the task asks, say so and stop rather than changing it.",""].join(`
1504
1504
  `):"","How to work:","- First decide whether this task requires changing code in a repository. Some tasks (research, answering a question, planning) don't. If it doesn't, just do the work directly \u2014 don't load a repo or open a PR.",Z?.pr?"- If it DOES need code changes: use the `load_repo` tool to load the relevant repository, make the change, then commit and push to the pull request named above.":"- If it DOES need code changes: use the `load_repo` tool to load the relevant repository, then make the change, commit on a new branch, push, and open a pull request. Only then does a PR apply.","- Prefer the GitHub tool to open the PR. If it errors or targets the wrong repo, fall back to `git push` + the GitHub REST API (the auth token is embedded in the `origin` URL).","- If a dev server is running it hot-reloads your changes \u2014 don't restart it, hunt for its port, or run a full typecheck/build just to verify a small edit.","- Change only what the task needs. Don't trace the definition of a pre-existing symbol that's incidental to your change \u2014 note it in one line and move on. Prefer one or two broad searches over many narrow retries.","- Only if you hit a genuine blocker a human must clear (see above) may you call `user_ask` \u2014 otherwise keep going and finish the task.","",`(task id: ${$.id})`].join(`
1505
- `)}async function sz4($,Z,X){let Y=(await $.storage.taskBoard.listPrs(Z.id,Z.organizationId).catch(()=>[])).find((G)=>G.number===X);if(!Y)return null;return VW$($,Z.organizationId,Y).catch(()=>null)}async function ez4($,Z){let X=await $.storage.taskBoard.listActivity(Z.id,Z.organizationId).catch(()=>[]);return Fe1(X)}function $P4($){return $!=="closed"}async function ZP4($,Z){let X=await $.storage.taskBoard.listPrs(Z.id,Z.organizationId).catch(()=>[]);for(let Q of X){let{state:Y}=await ty(Z.organizationId,Q);if($P4(Y))return{number:Q.number,url:Q.url}}return}async function m3($,Z,X){let Q=await Oe1($,Z,X?.userInitiated?pO():void 0),Y="decopilot";try{let G=b0().taskBoardRerunReusesPrBranch,J=X?.pr??(G?await ZP4($,Z):void 0),K=G&&J?await sz4($,Z,J.number):null,W=!X?.feedback&&!X?.resolveConflict,F=J&&W?await ez4($,Z):null,H=J&&J!==X?.pr||F?{...X,...J?{pr:J}:{},...F?{feedback:F}:{}}:X,N=await xD0($,Z.organizationId);if(N){Y="claude-code";let U="repo"in N?N.repo:null;await ln($,Z,{title:`Super Agent: ${Z.title}`,...X?.runClass?{runClass:X.runClass}:{},...K?{pinnedRef:K}:{},prompt:HW$(Z,U,{...H,..."choices"in N?{repoChoices:N.choices}:{}}),temperature:0.5,harnessId:"claude-code",...U?{repo:U}:{}})}else await ln($,Z,{title:`Super Agent: ${Z.title}`,...X?.runClass?{runClass:X.runClass}:{},prompt:az4(Z,H),temperature:0.5,...K?{pinnedRef:K}:{}})}catch(G){throw await Be1($.storage.organizationBilling,Z.organizationId,Z.id,Q),G}await $.storage.taskBoard.supersedeFailedThreads(Z.id,Z.organizationId).catch((G)=>console.error("[task-board] superseding failed threads failed",G)),fY({event:"task_run_enqueued",organizationId:Z.organizationId,properties:{task_id:Z.id,reports_task:bQ(Z),claim:Q,harness:Y,...X?.runClass?{run_class:X.runClass}:{}}})}var SW=D(()=>{X9();nG();X9();C4();q$();ot0();KJ();mn();lt0()});import{z as s3}from"zod";var zC;var Go0=D(()=>{M0();Nn0();u3();Un0();SW();WX();L5();uy();zC=u({name:"TASK_BOARD_ITEM_CREATE",description:"Create a new task board item for the organization.",annotations:{title:"Create Task Board Item",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!1},inputSchema:s3.object({title:s3.string().min(1),description:s3.string().nullable().optional(),status:h3.optional(),priority:ZC.optional(),assigneeId:s3.string().nullable().optional(),repo:s3.string().nullable().optional(),dueDate:s3.string().datetime().nullable().optional(),sprint:s3.number().int().min(1).max(CB0).nullable().optional().describe("Sprint to plan this task into (1-based, counted from the org's sprint cadence). Omit or null to leave it in the backlog."),tagIds:s3.array(s3.string()).optional(),prUrl:s3.string().nullable().optional().describe('GitHub pull request URL to link to the new task, e.g. https://github.com/owner/repo/pull/123. Pass this with `status: "in_review"` right after you open a PR so the card lands on the board with its PR already attached for review.')}),outputSchema:s3.object({item:Sy}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");let Q=$.prUrl?VB($.prUrl):null;if($.prUrl&&!Q)throw Error(`Not a GitHub pull request URL: ${$.prUrl} (expected https://github.com/<owner>/<repo>/pull/<number>)`);if($.assigneeId)await _B0(Z,X,$.assigneeId);let Y=$.assigneeId===U8;if($.tagIds?.length){let J=await Z.storage.tags.listOrgTags(X),K=new Set(J.map((W)=>W.id));for(let W of $.tagIds)if(!K.has(W))throw Error(`Tag not found: ${W}`)}let G=await Z.storage.taskBoard.create({organizationId:X,title:$.title,description:$.description??null,status:Y?"todo":$.status,priority:$.priority,assigneeId:$.assigneeId??null,assignedBy:$.assigneeId?o0(Z):null,repo:$.repo??null,dueDate:$.dueDate??null,sprint:$.sprint??null,by:o0(Z)});if($.tagIds?.length)await Z.storage.taskBoard.setItemTags(G.id,$.tagIds,o0(Z)),G=await Z.storage.taskBoard.getById(G.id,X);if(Q)await Z.storage.taskBoard.linkPr({taskBoardItemId:G.id,organizationId:X,url:Q.url,prNumber:Q.number,repoOwner:Q.owner,repoName:Q.repo,connectionId:null});return await W6(Z,{taskBoardItemId:G.id,action:"created",actorId:o0(Z),alsoSubscribe:[o0(Z),G.assigneeId===U8?null:G.assigneeId]}),await Z.storage.notifications.notifyMentions({taskBoardItemId:G.id,organizationId:X,actorId:o0(Z),body:G.description??""}),h$(X,G),await _B(Z,G),{item:G}}})});import{z as vC}from"zod";var gr0;var QO$=D(()=>{M0();uy();L5();$C();gr0=u({name:"TASK_BOARD_ITEM_PR_LINK",description:"Link the pull request you just opened to this run's task board item. Call this right after `gh pr create` succeeds, with the PR URL it printed. Reviewers (QA, code review) are dispatched from the linked PR, so a task whose PR is not linked never gets reviewed.",annotations:{title:"Link Pull Request to Task",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:vC.object({url:vC.string().describe("The pull request URL, e.g. https://github.com/owner/repo/pull/123")}),outputSchema:vC.object({url:vC.string(),prNumber:vC.number(),taskBoardItemIds:vC.array(vC.string())}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=t(Z).id,{threadId:Q}=SB0(),Y=VB($.url);if(!Y)throw Error(`Not a GitHub pull request URL: ${$.url} (expected https://github.com/<owner>/<repo>/pull/<number>)`);let G=await dy(Z,X,Q);for(let J of G)await Z.storage.taskBoard.linkPr({taskBoardItemId:J,organizationId:X,url:Y.url,prNumber:Y.number,repoOwner:Y.owner,repoName:Y.repo}),await Z.storage.taskBoard.clearSweepBudget(J,X);return{url:Y.url,prNumber:Y.number,taskBoardItemIds:G}}})});function GO$($){YO$=$}function SL0($){YO$?.broadcast($)}var YO$=null;import{DBOS as CL0}from"@dbos-inc/dbos-sdk";function XP4($,Z){let X=`thread-run:${Z}:`;if(!$.workflowID.startsWith(X))return null;let Q=$.input?.[0],Y=Q?.request;return{workflowId:$.workflowID,messageId:Y?.messageId??$.workflowID.slice(X.length),status:$.status==="PENDING"?"running":"queued",enqueuedAt:$.createdAt,...Q?.source!==void 0?{source:Q.source}:{}}}async function hr0($){return(await CL0.listWorkflows({workflow_id_prefix:`thread-run:${$}:`,status:["PENDING","ENQUEUED"],loadInput:!0,loadOutput:!1})).map((X)=>XP4(X,$)).filter((X)=>X!==null).sort((X,Q)=>X.enqueuedAt-Q.enqueuedAt)}async function JO$($,Z){if(!Z.startsWith(`thread-run:${$}:`))return!1;return await CL0.cancelWorkflows([Z]),!0}async function Fg($){let Z=await CL0.listWorkflows({workflow_id_prefix:`thread-run:${$}:`,status:["PENDING"],loadInput:!1,loadOutput:!1});if(Z.length===0)return;await CL0.cancelWorkflows(Z.map((X)=>X.workflowID))}var _L0=()=>{};function GP4($){return/\b405\b/.test($)&&/not allowed on this repository/i.test($)}function KP4($,Z={}){if($==="failing")return!0;if($==="pending")return!Z.allowPendingChecks;return!1}async function WP4($,Z,X,Q,Y){if(JP4.has(Q))return;let J=(await $.storage.taskBoard.listActivity(X,Z).catch(()=>[])).at(-1);if(J?.action==="merge_failed"&&J.data?.reason===Q)return;await W6($,{taskBoardItemId:X,action:"merge_failed",actorId:null,data:{reason:Q,...Y?{detail:Y}:{}}})}function FP4($){if(!$?.isError)return{kind:"merged"};let Z=JSON.stringify($?.content)??"";if(GP4(Z))return{kind:"method_not_allowed",detail:Z};if(lD0(Z))return{kind:"rate_limited",detail:Z};return{kind:"refused",detail:Z}}async function HP4($,Z,X){let Q=await $.callTool({name:"merge_pull_request",arguments:{owner:Z.repoOwner,repo:Z.repoName,pullNumber:Z.number,merge_method:X}},void 0,{timeout:QP4});return FP4(Q)}async function Dt($,Z,X,Q={}){let Y=async(N,U)=>{return await WP4($,Z,X,N,U),{merged:!1,reason:N,...U?{detail:U}:{}}},G=await $.storage.taskBoard.listPrs(X,Z),J=await fB($,Z,G);if(!J)return console.warn(`[task-board] merge skipped \u2014 no linked PR on ${X}`),Y("no_pr");let K=await qW$($,Z,J);if(KP4(K,Q))return console.warn(`[task-board] merge blocked \u2014 checks ${K} on PR #${J.number}`),Y(K==="failing"?"checks_failing":"checks_pending");let W=`${J.repoOwner}/${J.repoName}`,F=await EC($,Z,J.connectionId,{owner:J.repoOwner,name:J.repoName});if(!F)return console.warn("[task-board] merge blocked \u2014 no active GitHub connection for "+`${W} (PR #${J.number})`),Y("no_connection",W);let H=await H5(F,$,!0);try{let N=null;for(let U of YP4){let O=await HP4(H,J,U);if(O.kind==="merged")return zW$(F.id),{merged:!0};if(O.kind==="rate_limited")return console.warn(`[task-board] merge rate-limited on PR #${J.number} \u2014 sweep retries`),Y("rate_limited",O.detail.slice(0,500));if(O.kind==="method_not_allowed"){console.warn(`[task-board] merge method '${U}' not allowed on ${W} \u2014 trying next`),N=O.detail;continue}return console.error(`[task-board] merge refused by GitHub on PR #${J.number}:`,O.detail),Y("refused",O.detail.slice(0,500))}return console.error(`[task-board] no merge method allowed on ${W} (PR #${J.number})`,N),Y("refused",N?.slice(0,500))}catch(N){let U=N instanceof Error?N.message:String(N);if(lD0(N))return Y("rate_limited",U);return console.error("[task-board] merge PR failed",N),Y("error",U)}finally{await H.close().catch(()=>{})}}async function Lt($,Z,X){let Q=await $.storage.organizationSettings.get(Z),Y=TH(Q?.flags),G=await $.storage.taskBoard.listActivity(X,Z);return iO(G,Y,{verifiedOnly:!0})}async function NP4($,Z){let X=await $.storage.organizationSettings.get(Z.organizationId),Q=TH(X?.flags),Y=await $.storage.taskBoard.listActivity(Z.id,Z.organizationId);if(!We1(Y,Q))return;await CW($,Z,"every reviewer approved, but an approval could not be verified \u2014 "+"auto-merge is blocked and no reviewer can be re-dispatched this cycle")}function KO$($){return!$.merged&&$.reason==="refused"}function ur0($,Z){if($!==null)return $;if(Z===null||!KO$(Z))return null;return(Z.detail??"").toLowerCase().includes("merge conflict")?!0:null}async function UP4($,Z,X){if(!KO$(X))return;let Q=Z.organizationId,Y=await $.storage.taskBoard.listPrs(Z.id,Q),G=await fB($,Q,Y);if(!G)return;await ny($,Q,Z,{pr:{number:G.number,url:G.url},conflict:ur0(await vB($,Q,G),X)}).catch((J)=>{console.error("[task-board] sweep conflict auto-resolve failed",J)})}async function WO$($,Z){let X=Z.organizationId;if(Z.status!=="in_review")return!1;if((await $.storage.organizationSettings.get(X))?.flags?.auto_merge!==!0)return!1;if(await $.storage.taskBoard.hasHumanRejectedDone(Z.id,X))return!1;if(!await Lt($,X,Z.id))return await NP4($,Z),!1;let Y=await Dt($,X,Z.id);if(!Y.merged)return await UP4($,Z,Y),!1;let G=await $.storage.taskBoard.update(Z.id,X,{status:"done"},Z.updatedBy);return await W6($,{taskBoardItemId:Z.id,action:"status_changed",actorId:null,data:{from:Z.status,to:"done"}}),h$(X,G),!0}var QP4=15000,YP4,JP4;var wt=D(()=>{wH();X9();WX();dn();KJ();L5();YP4=["merge","squash","rebase"];JP4=new Set(["checks_pending"])});import{z as Hg}from"zod";function BP4($){return $.threads.filter((Z)=>Z.status!==null&&!bn.has(Z.status)).map((Z)=>Z.threadId)}async function DP4($,Z,X){let Q=(G)=>(J)=>console.error("[task-board] rerun takeover step failed",{threadId:Z,step:G,err:J});await $.storage.threads.setCancelRequested(Z,X).catch(Q("cancel-flag")),await Xg(Z).catch(Q("background-jobs")),await Fg(Z).catch(Q("gate-head"));let Y=await $.storage.threads.getRunFence(Z).catch(()=>null);if(Y)await _C(Z,Y).catch(Q("hosted-harness"));SL0(Z)}function LP4($,Z){return $===!0&&rt0(Z)}async function wP4($,Z,X){let Q=Z.organizationId,Y=await $.storage.taskBoard.listPrs(Z.id,Q).catch(()=>[]),G=await fB($,Q,Y).catch(()=>{return});if(!G)return!1;let J=await vB($,Q,G).catch(()=>null);return LP4(J,X)}function jP4($,Z){let X=RH($),Q=0;for(let Y of $){if(Y.action!=="review_approved")continue;let G=new Date(Y.occurredAt).getTime();if(G>=X)Q=Math.max(Q,G)}return Z-Q>=EP4}async function zP4($,Z){if(Z.status!=="in_review")return;if((await $.storage.organizationSettings.get(Z.organizationId))?.flags?.auto_merge!==!0)return;if(!await Lt($,Z.organizationId,Z.id))return;let Y=await $.storage.taskBoard.listActivity(Z.id,Z.organizationId).catch(()=>[]);if(jP4(Y,Date.now()))return;if(await wP4($,Z,Y))return;throw Error("Every reviewer approved this task and its merge is retrying \u2014 re-running "+"would throw that away and start a new review cycle. Wait for the merge, or use the ship button if the PR needs a nudge.")}var OP4="Superseded by a manual re-run of this task",EP4=900000,cr0;var FO$=D(()=>{M0();X9();VW();tH();_L0();Qg();WX();L5();SW();wt();KJ();dn();nG();cr0=u({name:"TASK_BOARD_ITEM_RERUN",description:"Re-run a task board item with the Super Agent, whatever lane it is in. Use this to retry a task that stalled, finished without doing the job, or is already assigned to the Super Agent (in which case re-assigning it does nothing). Fails any run still holding the task open, moves it to In Progress, and queues a fresh run.",annotations:{title:"Re-run Task",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!0},inputSchema:Hg.object({id:Hg.string().describe("The task board item to re-run.")}),outputSchema:Hg.object({status:Hg.string().describe("The task's lane after the re-run was queued."),supersededThreadIds:Hg.array(Hg.string()).describe("Runs that were failed to make room for this one.")}),handler:async({id:$},Z)=>{r(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");let Q=await Z.storage.taskBoard.getById($,X);if(!Q)throw Error(`Task board item not found: ${$}`);if(Q.assigneeId!==U8)throw Error("Only a task assigned to the Super Agent can be re-run. Assign it to "+"the Super Agent instead \u2014 that queues a run by itself.");await zP4(Z,Q),await px(Z,Q,pO());let Y=[];for(let J of BP4(Q)){if(!await Z.storage.threads.failIfNotTerminal(J,OP4,"superseded"))continue;Y.push(J),await DP4(Z,J,X)}let G=await Z.storage.taskBoard.update($,X,{status:"in_progress"},o0(Z));return await W6(Z,{taskBoardItemId:$,action:"status_changed",actorId:o0(Z),data:{from:Q.status,to:"in_progress",reason:"rerun"}}),h$(X,G),await m3(Z,G,{userInitiated:!0}),{status:G.status,supersededThreadIds:Y}}})});import{z as Et}from"zod";var lr0;var HO$=D(()=>{M0();nG();WX();L5();SW();KJ();lr0=u({name:"TASK_BOARD_RESOLVE_CONFLICT",description:"Hand a task's pull request back to the Super Agent to resolve a merge conflict with its base branch. Use when a reviewed PR can't be shipped because it conflicts. Bounces the task to In Progress and queues a run that checks out the existing PR's branch, merges the base, resolves the conflicts, and pushes to the same PR.",annotations:{title:"Resolve Merge Conflict",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!0},inputSchema:Et.object({id:Et.string().describe("The task board item whose PR conflicts."),prNumber:Et.number().describe("The conflicting pull request's number, linked to this task.")}),outputSchema:Et.object({status:Et.string().describe("The task's lane after the resolution run was queued.")}),handler:async({id:$,prNumber:Z},X)=>{r(X),await X.access.check();let Q=X.organization?.id;if(!Q)throw Error("Organization ID required (no active organization in context)");let Y=await X.storage.taskBoard.getById($,Q);if(!Y)throw Error(`Task board item not found: ${$}`);let J=(await X.storage.taskBoard.listPrs($,Q)).find((F)=>F.number===Z);if(!J)throw Error(`Pull request #${Z} is not linked to this task.`);if(await vB(X,Q,J).catch(()=>null)!==!0)throw Error("This pull request no longer has a merge conflict \u2014 refresh and try again.");await px(X,Y,pO());let W=await X.storage.taskBoard.claimConflictResolution($,Q,o0(X));if(!W)throw Error("Couldn't start conflict resolution \u2014 the task may have moved, been "+"reassigned, or already be resolving. Refresh and try again.");h$(Q,W);try{await m3(X,W,{pr:{number:J.number,url:J.url},resolveConflict:!0,runClass:"retry",userInitiated:!0})}catch(F){throw await X.storage.taskBoard.update(W.id,Q,{status:"in_review"},"system").then((H)=>h$(Q,H)).catch((H)=>console.error("[task-board] resolve-conflict status revert failed",H)),F}return await W6(X,{taskBoardItemId:$,action:"merge_conflict_resolution",actorId:null,data:{prNumber:J.number}}),{status:W.status}}})});import{z as lB}from"zod";function PP4($,Z,X){return $!==null&&$.reviewer===Z&&$.cycleAt.getTime()===X}function AP4($,Z){return Hd0($).get(Z)==="changes_requested"}var dr0;var NO$=D(()=>{M0();X9();u3();WX();L5();SW();wt();KJ();mt0();dn();nG();dr0=u({name:"TASK_BOARD_REVIEW_DECISION",description:"Record a reviewer's decision for a task under review. `approve` marks the pull request approved by that reviewer (and, once EVERY enabled reviewer has approved, merges it when the org enabled auto-merge, advancing the task to Done); `request_changes` hands the task back to the Super Agent with your notes so it can fix the PR.",annotations:{title:"Review Decision",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!0},inputSchema:lB.object({taskBoardItemId:lB.string(),reviewer:lB.enum(["qa","code_review"]).describe("Which reviewer you are: `qa` (QA Agent) or `code_review` (Code Reviewer)."),reviewToken:lB.string().optional().describe("The reviewToken from your prompt \u2014 proves you are this reviewer. "+"Pass it through exactly; an approval without a valid token is recorded but does NOT count toward an automatic merge."),decision:lB.enum(["approve","request_changes"]),notes:lB.string().min(1).describe("For approve: a short summary of what you verified. For request_changes: specific, actionable feedback the Super Agent must address.")}),outputSchema:lB.object({status:h3,merged:lB.boolean().describe("True when this approval completed the review and merged the PR.")}),handler:async({taskBoardItemId:$,reviewer:Z,reviewToken:X,decision:Q,notes:Y},G)=>{r(G),await G.access.check();let J=G.organization?.id;if(!J)throw Error("Organization ID required (no active organization in context)");let K=await G.storage.taskBoard.getById($,J);if(!K)throw Error(`Task board item not found: ${$}`);let W=X?RH(await G.storage.taskBoard.listActivity($,J)):0,F=!!X&&(NW$(X,$,Z,new Date(W))||PP4(await G.storage.taskBoard.resolveReviewClaimByToken($,X),Z,W));if(Q==="request_changes"){let j=await G.storage.taskBoard.listActivity($,J);if(AP4(j,Z))return{status:K.status,merged:!1};if(He1(j))return await W6(G,{taskBoardItemId:$,action:"review_changes_requested",actorId:null,data:{reviewer:Z,notes:Y,verified:F,bounceLimitReached:!0}}),await CW(G,K,`${Nd0} review bounces reached \u2014 the reviewer and the `+"Super Agent are not converging"),{status:(await G.storage.taskBoard.getById($,J)??K).status,merged:!1};let z=await G.storage.taskBoard.claimReviewChangesBounce($,J,K.updatedBy);if(await W6(G,{taskBoardItemId:$,action:"review_changes_requested",actorId:null,data:{reviewer:Z,notes:Y,verified:F}}),!z)return{status:(await G.storage.taskBoard.getById($,J)??K).status,merged:!1};h$(J,z);let A=await G.storage.taskBoard.listPrs($,J),P=await fB(G,J,A);return await m3(G,z,{feedback:`${mx[Z]}: ${Y}`,pr:P?{number:P.number,url:P.url}:void 0}).catch(async(I)=>{if(await _D0(G,z,I)){await G.storage.taskBoard.update(z.id,J,{status:"in_review"},"system").then((k)=>h$(J,k)).catch((k)=>console.error("[task-board] runs-exhausted status revert failed",k));return}if(I instanceof s7)throw I;console.error("[task-board] request_changes re-enqueue failed",I)}),{status:z.status,merged:!1}}if(await W6(G,{taskBoardItemId:$,action:"review_approved",actorId:null,data:{reviewer:Z,notes:Y,verified:F}}),!await Lt(G,J,$)){let j=await G.storage.taskBoard.getById($,J)??K;return h$(J,j),{status:j.status,merged:!1}}let U=(await G.storage.organizationSettings.get(J))?.flags?.auto_merge===!0,O=await G.storage.taskBoard.hasHumanRejectedDone($,J),B=U&&!O,L=B?await Dt(G,J,$):null;if(L?.merged===!0){let j=await G.storage.taskBoard.update($,J,{status:"done"},K.updatedBy);return await W6(G,{taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:K.status,to:"done"}}),h$(J,j),{status:j.status,merged:!0}}let E=await G.storage.taskBoard.getById($,J)??K;if(B){let j=await G.storage.taskBoard.listPrs($,J),z=await fB(G,J,j);if(z?await ny(G,J,E,{pr:{number:z.number,url:z.url},conflict:ur0(await vB(G,J,z),L)}).catch((P)=>{if(P instanceof s7)throw P;return console.error("[task-board] conflict auto-resolve failed",P),!1}):!1)return{status:(await G.storage.taskBoard.getById($,J)??E).status,merged:!1}}return h$(J,E),{status:E.status,merged:!1}}})});import{z as vL0}from"zod";function TP4($,Z,X){if($!=="in_review")return!1;return X.length===0||iO(Z,X)}var mr0;var UO$=D(()=>{M0();X9();u3();WX();L5();wt();mr0=u({name:"TASK_BOARD_PROMOTE_TO_PRODUCTION",description:"Ship a reviewed task: merge its open pull request and move the task to Done. Used by the board's 'Ship to production' button after the enabled reviewers approved, when auto-merge is off (a human does the final merge).",annotations:{title:"Ship to Production",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!0},inputSchema:vL0.object({taskBoardItemId:vL0.string()}),outputSchema:vL0.object({status:h3,merged:vL0.boolean().describe("True when the PR was merged.")}),handler:async({taskBoardItemId:$},Z)=>{r(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");let Q=await Z.storage.taskBoard.getById($,X);if(!Q)throw Error(`Task board item not found: ${$}`);let Y=await Z.storage.organizationSettings.get(X),G=TH(Y?.flags),J=await Z.storage.taskBoard.listActivity($,X);if(!TP4(Q.status,J,G))throw Error("Task is not ready to ship: it must be In Review with every enabled reviewer approved");if(!(await Dt(Z,X,$,{allowPendingChecks:!0})).merged){let F=await Z.storage.taskBoard.getById($,X)??Q;return h$(X,F),{status:Q.status,merged:!1}}let W=await Z.storage.taskBoard.update($,X,{status:"done"},Q.updatedBy);if(Q.status!=="done")await W6(Z,{taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:Q.status,to:"done"}});return h$(X,W),{status:W.status,merged:!0}}})});import{z as NJ}from"zod";function OO$($){if(!$)throw Error("Organization ID required (no active organization in context)");return $}var RP4,ir0,pr0;var BO$=D(()=>{M0();RP4=NJ.object({externalKey:NJ.string(),dismissedBy:NJ.string(),dismissedAt:NJ.string()});ir0=u({name:"TASK_BOARD_DISMISSED_LIST",description:"List the diagnostic findings this organization has dismissed by deleting their task board cards. The import skips these until they're restored.",annotations:{title:"List Dismissed Findings",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:NJ.object({}),outputSchema:NJ.object({findings:NJ.array(RP4)}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=OO$(Z.organization?.id);return{findings:await Z.storage.taskBoard.listDismissedFindings(X)}}}),pr0=u({name:"TASK_BOARD_DISMISSED_RESTORE",description:"Un-dismiss diagnostic findings, returning their cards to the board. Omit externalKeys to restore every dismissed finding.",annotations:{title:"Restore Dismissed Findings",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:NJ.object({externalKeys:NJ.array(NJ.string()).optional()}),outputSchema:NJ.object({restored:NJ.number()}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=OO$(Z.organization?.id);return{restored:await Z.storage.taskBoard.restoreDismissedFindings(X,$.externalKeys)}}})});import{z as i6}from"zod";function fL0($){let Z=$.organization?.id;if(!Z)throw Error("Organization ID required (no active organization in context)");return Z}function qP4($,Z,X){return $.replace(IP4,(Q,Y,G,J)=>{let K=encodeURIComponent(`${Z}/${G}`);return`${Y}/api/${encodeURIComponent(X)}/fs/outputs/read?path=${K}${J}`})}var nr0,tr0,IP4,or0,rr0,ar0;var DO$=D(()=>{M0();X9();VD0();$C();nr0=i6.object({id:i6.string(),taskBoardItemId:i6.string(),parentId:i6.string().nullable(),authorId:i6.string(),body:i6.string(),resolved:i6.boolean(),createdAt:i6.string(),updatedAt:i6.string()});tr0=u({name:"TASK_BOARD_COMMENT_LIST",description:"List a task board item's comments (flat, oldest first; replies carry parentId).",annotations:{title:"List Task Comments",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:i6.object({taskBoardItemId:i6.string()}),outputSchema:i6.object({comments:i6.array(nr0)}),handler:async($,Z)=>{return r(Z),await Z.access.check(),{comments:await Z.storage.taskBoard.listComments($.taskBoardItemId,fL0(Z))}}}),IP4=/(!\[[^\]]*\]\()org\/output\/([^)\s]+)(\))/g;or0=u({name:"TASK_BOARD_COMMENT_CREATE",description:"Post a comment on a task board item, or a reply to one.",annotations:{title:"Create Task Comment",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!1},inputSchema:i6.object({taskBoardItemId:i6.string(),body:i6.string().trim().min(1),parentId:i6.string().nullish()}),outputSchema:i6.object({comment:nr0}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=fL0(Z),Q=eS.getStore(),Y=Z.organization?.slug,G=Q?.threadId&&Y?qP4($.body,Q.threadId,Y):$.body,J=await Z.storage.taskBoard.createComment({taskBoardItemId:$.taskBoardItemId,organizationId:X,parentId:$.parentId??null,authorId:Q?U8:o0(Z),body:G});if(!J)throw Error("Task board item not found");return await Z.storage.notifications.notify({taskBoardItemId:J.taskBoardItemId,type:"commented",actorId:Q?null:o0(Z),alsoSubscribe:Q?[]:[o0(Z)]}),await Z.storage.notifications.notifyMentions({taskBoardItemId:J.taskBoardItemId,organizationId:X,actorId:Q?null:o0(Z),body:J.body}),await _t0(Z,{commentId:J.id,taskBoardItemId:J.taskBoardItemId,organizationId:X,authorLabel:Q?"Super Agent":Z.auth?.user?.name??Z.auth?.user?.email??"Studio",body:J.body}),{comment:J}}}),rr0=u({name:"TASK_BOARD_COMMENT_UPDATE",description:"Edit your own comment's body, or resolve/unresolve a comment thread (root only, any org member may toggle it).",annotations:{title:"Update Task Comment",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:i6.object({id:i6.string(),body:i6.string().trim().min(1).optional(),resolved:i6.boolean().optional()}),outputSchema:i6.object({comment:nr0}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=await Z.storage.taskBoard.updateComment({id:$.id,organizationId:fL0(Z),callerId:o0(Z),body:$.body,resolved:$.resolved});if(!X)throw Error("Comment not found, or you can only edit your own comments");return{comment:X}}}),ar0=u({name:"TASK_BOARD_COMMENT_DELETE",description:"Delete your own comment. Deleting a thread root deletes its replies too.",annotations:{title:"Delete Task Comment",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:i6.object({id:i6.string()}),outputSchema:i6.object({success:i6.boolean()}),handler:async($,Z)=>{return r(Z),await Z.access.check(),{success:await Z.storage.taskBoard.deleteComment($.id,fL0(Z),o0(Z))}}})});var LO$=D(()=>{MG$();Go0();ht0();ut0();ct0();KJ();QO$();FO$();HO$();NO$();UO$();WX();BO$();DO$()});function jt($){let Z=$.organization?.id;if(!Z)throw Error("Organization ID required (no active organization in context)");return Z}async function sr0($,Z){let X=jt($);if(!await $.storage.taskBoard.getById(Z,X))throw Error("Task board item not found");return X}import{z as NX}from"zod";var kP4,wO$;var EO$=D(()=>{M0();OD0();kP4=NX.object({id:NX.string(),taskBoardItemId:NX.string(),type:NX.enum(UD0),taskTitle:NX.string(),taskKeySeq:NX.number().nullable(),actorName:NX.string().nullable(),actorImage:NX.string().nullable(),createdAt:NX.string()}),wO$=u({name:"NOTIFICATION_LIST",description:"List the current user's unread notifications in the current organization, newest first.",annotations:{title:"List Notifications",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:NX.object({cursor:NX.string().optional(),limit:NX.number().int().positive().max(50).optional()}),outputSchema:NX.object({notifications:NX.array(kP4),unreadCount:NX.number(),nextCursor:NX.string().nullable()}),handler:async($,Z)=>{r(Z),await Z.access.check();let{notifications:X,unreadCount:Q,nextCursor:Y}=await Z.storage.notifications.listUnread(o0(Z),jt(Z),{cursor:$.cursor,limit:$.limit});return{notifications:X.map((G)=>({id:G.id,taskBoardItemId:G.taskBoardItemId,type:G.type,taskTitle:G.data.taskTitle,taskKeySeq:G.data.taskKeySeq,actorName:G.data.actorName,actorImage:G.data.actorImage,createdAt:G.createdAt})),unreadCount:Q,nextCursor:Y}}})});import{z as zt}from"zod";var jO$;var zO$=D(()=>{M0();jO$=u({name:"NOTIFICATION_MARK_READ",description:"Mark notifications read. Omit `ids` to mark all of the current user's unread ones in this organization.",annotations:{title:"Mark Notifications Read",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:zt.object({ids:zt.array(zt.string()).optional()}),outputSchema:zt.object({marked:zt.number()}),handler:async($,Z)=>{return r(Z),await Z.access.check(),{marked:await Z.storage.notifications.markRead(o0(Z),jt(Z),$.ids)}}})});import{z as gW}from"zod";var PO$,AO$;var TO$=D(()=>{M0();PO$=u({name:"NOTIFICATION_SUBSCRIPTION_SET",description:"Follow or unfollow a task board item.",annotations:{title:"Set Notification Subscription",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:gW.object({taskBoardItemId:gW.string(),subscribed:gW.boolean()}),outputSchema:gW.object({subscribed:gW.boolean()}),handler:async($,Z)=>{return r(Z),await Z.access.check(),await sr0(Z,$.taskBoardItemId),await Z.storage.notifications.setSubscribed(o0(Z),$.taskBoardItemId,$.subscribed),{subscribed:$.subscribed}}}),AO$=u({name:"NOTIFICATION_SUBSCRIPTION_LIST",description:"List the user ids following a task board item.",annotations:{title:"List Notification Subscribers",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:gW.object({taskBoardItemId:gW.string()}),outputSchema:gW.object({userIds:gW.array(gW.string())}),handler:async($,Z)=>{return r(Z),await Z.access.check(),await sr0(Z,$.taskBoardItemId),{userIds:await Z.storage.notifications.listSubscribers($.taskBoardItemId)}}})});var RO$=D(()=>{EO$();zO$();TO$()});import{z as eH}from"zod";var er0;var IO$=D(()=>{M0();er0=u({name:"TAGS_LIST",description:"List all tags available in the organization.",annotations:{title:"List Tags",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:eH.object({}),outputSchema:eH.object({tags:eH.array(eH.object({id:eH.string(),organizationId:eH.string(),name:eH.string(),color:eH.string().nullable(),createdAt:eH.string().describe("ISO 8601 timestamp")}))}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=t(Z);return{tags:(await Z.storage.tags.listOrgTags(X.id)).map((Y)=>({...Y,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():String(Y.createdAt)}))}}})});import{z as hW}from"zod";var $a0;var qO$=D(()=>{M0();$a0=u({name:"TAGS_CREATE",description:"Create a new tag, usable on organization members and task board items.",annotations:{title:"Create Tag",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:hW.object({name:hW.string().min(1).max(50).describe("Tag name"),color:hW.string().regex(/^#[0-9a-fA-F]{6}$/).nullable().optional().describe('Hex color the tag renders its dot with, e.g. "#3b82f6"')}),outputSchema:hW.object({tag:hW.object({id:hW.string(),organizationId:hW.string(),name:hW.string(),color:hW.string().nullable(),createdAt:hW.string().describe("ISO 8601 timestamp")})}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=t(Z),Q=await Z.storage.tags.createTag(X.id,$.name,$.color);return{tag:{...Q,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():String(Q.createdAt)}}}})});import{z as bL0}from"zod";var Za0;var MO$=D(()=>{M0();Za0=u({name:"TAGS_DELETE",description:"Delete a tag and automatically remove it from all assigned members.",annotations:{title:"Delete Tag",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:bL0.object({tagId:bL0.string().describe("Tag ID to delete")}),outputSchema:bL0.object({success:bL0.boolean()}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=t(Z),Q=await Z.storage.tags.getTag($.tagId);if(!Q)throw Error("Tag not found");if(Q.organizationId!==X.id)throw Error("Tag does not belong to this organization");return await Z.storage.tags.deleteTag($.tagId),{success:!0}}})});import{z as uW}from"zod";var Xa0;var kO$=D(()=>{M0();Xa0=u({name:"MEMBER_TAGS_GET",description:"Get all tags currently assigned to a specific member.",annotations:{title:"Get Member Tags",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:uW.object({memberId:uW.string().describe("Member ID")}),outputSchema:uW.object({tags:uW.array(uW.object({id:uW.string(),organizationId:uW.string(),name:uW.string(),color:uW.string().nullable(),createdAt:uW.string().describe("ISO 8601 timestamp")}))}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=t(Z);if(!await Z.storage.tags.verifyMemberOrg($.memberId,X.id))throw Error(`Member not found in this organization: ${$.memberId}`);return{tags:(await Z.storage.tags.getMemberTags($.memberId)).map((G)=>({...G,createdAt:G.createdAt instanceof Date?G.createdAt.toISOString():String(G.createdAt)}))}}})});import{z as UJ}from"zod";var Qa0;var VO$=D(()=>{M0();Qa0=u({name:"MEMBER_TAGS_SET",description:"Replace all tags on a member with the given set. Pass empty array to clear.",annotations:{title:"Set Member Tags",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:UJ.object({memberId:UJ.string().describe("Member ID"),tagIds:UJ.array(UJ.string()).describe("Array of tag IDs to assign")}),outputSchema:UJ.object({success:UJ.boolean(),tags:UJ.array(UJ.object({id:UJ.string(),organizationId:UJ.string(),name:UJ.string(),createdAt:UJ.string().describe("ISO 8601 timestamp")}))}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=t(Z);if(!await Z.storage.tags.verifyMemberOrg($.memberId,X.id))throw Error(`Member not found in this organization: ${$.memberId}`);for(let G of $.tagIds){let J=await Z.storage.tags.getTag(G);if(!J)throw Error(`Tag not found: ${G}`);if(J.organizationId!==X.id)throw Error(`Tag does not belong to this organization: ${G}`)}return await Z.storage.tags.setMemberTags($.memberId,$.tagIds),{success:!0,tags:(await Z.storage.tags.getMemberTags($.memberId)).map((G)=>({...G,createdAt:G.createdAt instanceof Date?G.createdAt.toISOString():String(G.createdAt)}))}}})});var SO$=D(()=>{IO$();qO$();MO$();kO$();VO$()});import{z as CO$}from"zod";function vP4($,Z){let X=$?.[Z];if(!X)return;return Object.entries(X).filter(([,Y])=>(O7 in Y)).sort(([,Y],[,G])=>(G[O7]?.createdAt??0)-(Y[O7]?.createdAt??0))[0]?.[0]}var CP4,_P4,Ya0;var _O$=D(()=>{C4();M0();KC();qy();W7();mQ();CP4=CO$.object({data:g3$.describe("Data for the new thread (id is auto-generated if not provided)")}),_P4=CO$.object({item:MW.describe("The created thread entity")});Ya0=u({name:"COLLECTION_THREADS_CREATE",description:"Create a new thread for organizing messages and conversations.",annotations:{title:"Create Thread",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:CP4,outputSchema:_P4,handler:async($,Z)=>{r(Z);let X=t(Z);await Z.access.check();let Q=o0(Z);if(!Q)throw Error("User ID required to create thread");let{data:Y}=$,G=Y.id??F8("thrd"),K=(await FD0(Z.storage.virtualMcps,Y.virtual_mcp_id,X.id)).metadata,W=K?.githubRepo,F=null;if(W)F=Y.branch??vP4(K?.sandboxMap,Q)??mZ0(dZ0(Z.auth.user));let H=await Z.storage.threads.create({id:G,organization_id:X.id,title:Y.title,description:Y.description,virtual_mcp_id:Y.virtual_mcp_id,branch:F,created_by:Q,metadata:{runtime:Y.runtime??RB0(K)}});if(H.isNew)x1.capture({distinctId:Q,event:"chat_started",groups:{organization:X.id},properties:{organization_id:X.id,thread_id:G,has_title:!!$.data.title,created_via:"tool"}});return{item:YJ(H)}}})});import{z as Ga0}from"zod";var fP4,bP4,Ja0;var vO$=D(()=>{C4();M0();KC();qy();fP4=Ga0.object({id:Ga0.string().describe("ID of the thread to update"),data:h3$.describe("Partial thread data to update")}),bP4=Ga0.object({item:MW.describe("The updated thread entity")}),Ja0=u({name:"COLLECTION_THREADS_UPDATE",description:"Update a thread's title, description, or visibility.",annotations:{title:"Update Thread",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:fP4,outputSchema:bP4,handler:async($,Z)=>{r(Z);let X=t(Z);await Z.access.check();let Q=o0(Z);if(!Q)throw Error("User ID required to update thread");let{id:Y,data:G}=$,J=await Z.storage.threads.get(Y);if(!J)throw Error("Thread not found in organization");if(G.virtual_mcp_id!==void 0)await FD0(Z.storage.virtualMcps,G.virtual_mcp_id,X.id);if(G.branch===null&&J.virtual_mcp_id){if((await Z.storage.virtualMcps.findById(J.virtual_mcp_id,X.id))?.metadata?.githubRepo)throw Error("Cannot set branch=null on a github-linked thread (vMCP has githubRepo)")}let K={title:G.title,description:G.description,hidden:G.hidden,updated_by:Q};if(G.status)K.status=G.status;if(G.metadata!==void 0){let F=lx(G.metadata)??{},H=sS(J.metadata?.runtime),N=sS(F.runtime);if(H&&N&&N!==H)throw Error(`Cannot change a thread's runtime (${H} \u2192 ${N}); it is stamped once at creation. Start a new chat instead.`);let U=J.metadata?.sandboxMap;K.metadata={...F,...H?{runtime:H}:{},...U!==void 0?{sandboxMap:U}:{}}}if(G.branch!==void 0)K.branch=G.branch;if(G.virtual_mcp_id!==void 0)K.virtual_mcp_id=G.virtual_mcp_id;let W=await Z.storage.threads.update(Y,K);if(G.hidden!==void 0&&G.hidden!==J.hidden)x1.capture({distinctId:Q,event:G.hidden?"chat_archived":"chat_unarchived",groups:{organization:X.id},properties:{organization_id:X.id,thread_id:Y}});return{item:YJ(W)}}})});var Ka0;var fO$=D(()=>{lG();KC();C4();M0();tH();_L0();Qg();Ka0=u({name:"COLLECTION_THREADS_DELETE",description:"Permanently delete a thread and all its messages.",annotations:{title:"Delete Thread",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:si,outputSchema:ei(MW),handler:async($,Z)=>{r(Z);let X=t(Z);await Z.access.check();let Q=await Z.storage.threads.get($.id);if(!Q)throw Error(`Thread not found: ${$.id}`);if(Q.status==="in_progress"){let G=(K)=>(W)=>console.error("[thread] delete-time run cancel step failed",{threadId:$.id,step:K,err:W});await Xg($.id).catch(G("background-jobs")),await Fg($.id).catch(G("gate-head"));let J=await Z.storage.threads.getRunFence($.id).catch(()=>null);if(J)await _C($.id,J).catch(G("hosted-harness"));SL0($.id)}await Z.storage.threads.delete($.id);let Y=o0(Z);if(Y)x1.capture({distinctId:Y,event:"chat_deleted",groups:{organization:X.id},properties:{organization_id:X.id,thread_id:$.id}});return{item:YJ(Q)}}})});var bO$=D(()=>{_O$();tn0();on0();vO$();fO$();rn0()});function yP4($){return{type:"doc",content:[{type:"paragraph",content:[{type:"text",text:$}]}]}}function gP4($){return $.map((Z)=>{let X=Z.metadata;if(X?.tiptapDoc)return Z;let Q=Z.parts.find((Y)=>Y.type==="text"&&typeof Y.text==="string");if(!Q?.text||typeof Q.text!=="string")return Z;return{...Z,metadata:{...X,tiptapDoc:yP4(Q.text)}}})}function xL0($){let Z;if(typeof $==="string")try{let X=JSON.parse($);if(Array.isArray(X)&&X.length>0&&X[0]?.role&&Array.isArray(X[0]?.parts))Z=X;else Z=[{role:"user",parts:[{type:"text",text:$}]}]}catch{Z=[{role:"user",parts:[{type:"text",text:$}]}]}else Z=$;return gP4(Z)}import{z as p6}from"zod";var Wa0;var xO$=D(()=>{C4();M0();t7();Wa0=u({name:"AUTOMATION_CREATE",description:"Create an automation that runs an agent thread on trigger fire. Requires virtual_mcp_id + messages.",annotations:{title:"Create Automation",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!1},inputSchema:p6.object({name:p6.string().min(1).max(255),virtual_mcp_id:p6.string(),messages:p6.union([p6.string(),p6.array(p6.looseObject({id:p6.string().optional(),role:p6.enum(["user","assistant","system"]),parts:p6.array(p6.record(p6.string(),p6.unknown())),metadata:p6.unknown().optional()}))]),models:p6.object({tier:RO,modelId:p6.string().optional(),credentialId:p6.string().optional()}).loose().default({tier:"smart"}),tools:p6.array(p6.string()).nullable().optional(),maxAgentSteps:p6.number().int().min(1).max(100).nullable().optional(),temperature:p6.number().default(0.5),active:p6.boolean().default(!0)}),outputSchema:p6.object({id:p6.string(),name:p6.string(),active:p6.boolean(),created_at:p6.string()}),handler:async($,Z)=>{r(Z);let X=t(Z);await Z.access.check();let Q=o0(Z);if(!Q)throw Error("Unable to determine user identity");let Y=xL0($.messages),G=await Z.storage.automations.create({organization_id:X.id,created_by:Q,name:$.name,messages:JSON.stringify(Y),models:JSON.stringify($.models),tools:$.tools===void 0||$.tools===null?null:JSON.stringify($.tools),max_agent_steps:$.maxAgentSteps??null,temperature:$.temperature,active:$.active,virtual_mcp_id:$.virtual_mcp_id});return x1.capture({distinctId:Q,event:"automation_created",groups:{organization:X.id},properties:{organization_id:X.id,automation_id:G.id,virtual_mcp_id:$.virtual_mcp_id,active:G.active,tier:$.models.tier}}),{id:G.id,name:G.name,active:G.active,created_at:G.created_at}}})});import{z as f6}from"zod";var Fa0;var yO$=D(()=>{M0();Fa0=u({name:"AUTOMATION_GET",description:"Get an automation's full configuration and triggers by ID.",annotations:{title:"Get Automation",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:f6.object({id:f6.string()}),outputSchema:f6.object({automation:f6.object({id:f6.string(),name:f6.string(),active:f6.boolean(),created_by:f6.string(),created_at:f6.string(),updated_at:f6.string(),virtual_mcp_id:f6.string(),messages:f6.unknown(),models:f6.unknown(),tools:f6.array(f6.string()).nullable(),maxAgentSteps:f6.number().nullable(),temperature:f6.number(),triggers:f6.array(f6.object({id:f6.string(),type:f6.enum(["cron","event","webhook"]),cron_expression:f6.string().nullable(),connection_id:f6.string().nullable(),event_type:f6.string().nullable(),params:f6.unknown().nullable(),last_run_at:f6.string().nullable(),api_key_id:f6.string().nullable(),created_at:f6.string()}))}).nullable()}),handler:async($,Z)=>{r(Z);let X=t(Z);await Z.access.check();let Q=await Z.storage.automations.findById($.id,X.id);if(!Q)return{automation:null};let Y=await Z.storage.automations.listTriggers(Q.id);return{automation:{id:Q.id,name:Q.name,active:Q.active,created_by:Q.created_by,created_at:Q.created_at,updated_at:Q.updated_at,virtual_mcp_id:Q.virtual_mcp_id,messages:JSON.parse(Q.messages),models:JSON.parse(Q.models),tools:Q.tools?JSON.parse(Q.tools):null,maxAgentSteps:Q.max_agent_steps,temperature:Q.temperature,triggers:Y.map((G)=>({id:G.id,type:G.type,cron_expression:G.cron_expression,connection_id:G.connection_id,event_type:G.event_type,params:G.params?JSON.parse(G.params):null,last_run_at:G.last_run_at,api_key_id:G.api_key_id,created_at:G.created_at}))}}}})});import{z as eY}from"zod";var Ha0;var gO$=D(()=>{M0();Ha0=u({name:"AUTOMATION_LIST",description:"List automations with their status, triggers, and configuration.",annotations:{title:"List Automations",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:eY.object({virtual_mcp_id:eY.string().optional().nullable()}),outputSchema:eY.object({automations:eY.array(eY.object({id:eY.string(),name:eY.string(),active:eY.boolean(),created_by:eY.string(),created_at:eY.string(),trigger_count:eY.number(),nearest_next_run_at:eY.string().nullable(),virtual_mcp_id:eY.string()}))}),handler:async($,Z)=>{r(Z);let X=t(Z);return await Z.access.check(),{automations:(await Z.storage.automations.listWithTriggerCounts(X.id,$.virtual_mcp_id)).map((G)=>({id:G.id,name:G.name,active:G.active,created_by:G.created_by,created_at:G.created_at,trigger_count:G.trigger_count,nearest_next_run_at:G.nearest_next_run_at,virtual_mcp_id:G.virtual_mcp_id}))}}})});function uP4($){if(!$)return null;try{let Z=JSON.parse($);if(Array.isArray(Z)&&Z.every((X)=>typeof X==="string"))return Z.length>0?Z:null}catch{}return null}function hO$($){return`${$}:context`}function uO$($,Z,X,Q,Y){let J=JSON.parse($.messages).map((F,H)=>({...F,id:`${X}:${H}`})),K=Z?{...Y,[fB0]:hP4}:Y;return{messages:J,models:{credentialId:Q.credentialId,thinking:Q.thinking,...Q.image?{image:Q.image}:{},...Q.webSearch?{webSearch:Q.webSearch}:{},...Q.deepResearch?{deepResearch:Q.deepResearch}:{}},agent:{id:$.virtual_mcp_id},toolAllowlist:uP4($.tools),maxAgentSteps:$.max_agent_steps??void 0,temperature:$.temperature??0.5,toolApprovalLevel:"auto",mode:"default",organizationId:$.organization_id,userId:$.created_by,harnessId:"decopilot",triggerId:Z??void 0,...K?{runMetadata:K}:{},taskId:X}}var hP4="new_task";var cO$=D(()=>{zn()});function UX($,Z,X,Q,Y,G,J,K){return UX.fromTZ(UX.tp($,Z,X,Q,Y,G,J),K)}function Na0($,Z=new Date){let X=Z.toLocaleString("en-US",{timeZone:$,timeZoneName:"shortOffset"}).split(" ").slice(-1)[0],Q=Z.toLocaleString("en-US").replace(/[\u202f]/," ");return Date.parse(`${Q} GMT`)-Date.parse(`${Q} ${X}`)}function cP4($,Z){let X=new Date(Date.parse($));if(isNaN(X))throw Error("minitz: Invalid ISO8601 passed to parser.");let Q=$.substring(9);return $.includes("Z")||Q.includes("-")||Q.includes("+")?UX.tp(X.getUTCFullYear(),X.getUTCMonth()+1,X.getUTCDate(),X.getUTCHours(),X.getUTCMinutes(),X.getUTCSeconds(),"Etc/UTC"):UX.tp(X.getFullYear(),X.getMonth()+1,X.getDate(),X.getHours(),X.getMinutes(),X.getSeconds(),Z)}function lP4($){if($===void 0&&($={}),delete $.name,$.legacyMode=$.legacyMode===void 0?!0:$.legacyMode,$.paused=$.paused===void 0?!1:$.paused,$.maxRuns=$.maxRuns===void 0?1/0:$.maxRuns,$.catch=$.catch===void 0?!1:$.catch,$.interval=$.interval===void 0?0:parseInt($.interval.toString(),10),$.utcOffset=$.utcOffset===void 0?void 0:parseInt($.utcOffset.toString(),10),$.unref=$.unref===void 0?!1:$.unref,$.startAt&&($.startAt=new OJ($.startAt,$.timezone)),$.stopAt&&($.stopAt=new OJ($.stopAt,$.timezone)),$.interval!==null){if(isNaN($.interval))throw Error("CronOptions: Supplied value for interval is not a number");if($.interval<0)throw Error("CronOptions: Supplied value for interval can not be negative")}if($.utcOffset!==void 0){if(isNaN($.utcOffset))throw Error("CronOptions: Invalid value passed for utcOffset, should be number representing minutes offset from UTC.");if($.utcOffset<-870||$.utcOffset>870)throw Error("CronOptions: utcOffset out of bounds.");if($.utcOffset!==void 0&&$.timezone)throw Error("CronOptions: Combining 'utcOffset' with 'timezone' is not allowed.")}if($.unref!==!0&&$.unref!==!1)throw Error("CronOptions: Unref should be either true, false or undefined(false).");return $}function Pt($){return Object.prototype.toString.call($)==="[object Function]"||typeof $=="function"||$ instanceof Function}function dP4($){return Pt($)}function mP4($){typeof Deno<"u"&&typeof Deno.unrefTimer<"u"?Deno.unrefTimer($):$&&typeof $.unref<"u"&&$.unref()}var Ua0=32,At,iO$,lO$=class{pattern;timezone;second;minute;hour;day;month;dayOfWeek;lastDayOfMonth;starDOM;starDOW;constructor($,Z){this.pattern=$,this.timezone=Z,this.second=Array(60).fill(0),this.minute=Array(60).fill(0),this.hour=Array(24).fill(0),this.day=Array(31).fill(0),this.month=Array(12).fill(0),this.dayOfWeek=Array(7).fill(0),this.lastDayOfMonth=!1,this.starDOM=!1,this.starDOW=!1,this.parse()}parse(){if(!(typeof this.pattern=="string"||this.pattern instanceof String))throw TypeError("CronPattern: Pattern has to be of type string.");this.pattern.indexOf("@")>=0&&(this.pattern=this.handleNicknames(this.pattern).trim());let $=this.pattern.replace(/\s+/g," ").split(" ");if($.length<5||$.length>6)throw TypeError("CronPattern: invalid configuration format ('"+this.pattern+"'), exactly five or six space separated parts are required.");if($.length===5&&$.unshift("0"),$[3].indexOf("L")>=0&&($[3]=$[3].replace("L",""),this.lastDayOfMonth=!0),$[3]=="*"&&(this.starDOM=!0),$[4].length>=3&&($[4]=this.replaceAlphaMonths($[4])),$[5].length>=3&&($[5]=this.replaceAlphaDays($[5])),$[5]=="*"&&(this.starDOW=!0),this.pattern.indexOf("?")>=0){let Z=new OJ(new Date,this.timezone).getDate(!0);$[0]=$[0].replace("?",Z.getSeconds().toString()),$[1]=$[1].replace("?",Z.getMinutes().toString()),$[2]=$[2].replace("?",Z.getHours().toString()),this.starDOM||($[3]=$[3].replace("?",Z.getDate().toString())),$[4]=$[4].replace("?",(Z.getMonth()+1).toString()),this.starDOW||($[5]=$[5].replace("?",Z.getDay().toString()))}this.throwAtIllegalCharacters($),this.partToArray("second",$[0],0,1),this.partToArray("minute",$[1],0,1),this.partToArray("hour",$[2],0,1),this.partToArray("day",$[3],-1,1),this.partToArray("month",$[4],-1,1),this.partToArray("dayOfWeek",$[5],0,At),this.dayOfWeek[7]&&(this.dayOfWeek[0]=this.dayOfWeek[7])}partToArray($,Z,X,Q){let Y=this[$],G=$==="day"&&this.lastDayOfMonth;if(Z===""&&!G)throw TypeError("CronPattern: configuration entry "+$+" ("+Z+") is empty, check for trailing spaces.");if(Z==="*")return Y.fill(Q);let J=Z.split(",");if(J.length>1)for(let K=0;K<J.length;K++)this.partToArray($,J[K],X,Q);else Z.indexOf("-")!==-1&&Z.indexOf("/")!==-1?this.handleRangeWithStepping(Z,$,X,Q):Z.indexOf("-")!==-1?this.handleRange(Z,$,X,Q):Z.indexOf("/")!==-1?this.handleStepping(Z,$,X,Q):Z!==""&&this.handleNumber(Z,$,X,Q)}throwAtIllegalCharacters($){for(let Z=0;Z<$.length;Z++)if((Z===5?/[^/*0-9,\-#L]+/:/[^/*0-9,-]+/).test($[Z]))throw TypeError("CronPattern: configuration entry "+Z+" ("+$[Z]+") contains illegal characters.")}handleNumber($,Z,X,Q){let Y=this.extractNth($,Z),G=parseInt(Y[0],10)+X;if(isNaN(G))throw TypeError("CronPattern: "+Z+" is not a number: '"+$+"'");this.setPart(Z,G,Y[1]||Q)}setPart($,Z,X){if(!Object.prototype.hasOwnProperty.call(this,$))throw TypeError("CronPattern: Invalid part specified: "+$);if($==="dayOfWeek"){if(Z===7&&(Z=0),Z<0||Z>6)throw RangeError("CronPattern: Invalid value for dayOfWeek: "+Z);this.setNthWeekdayOfMonth(Z,X);return}if($==="second"||$==="minute"){if(Z<0||Z>=60)throw RangeError("CronPattern: Invalid value for "+$+": "+Z)}else if($==="hour"){if(Z<0||Z>=24)throw RangeError("CronPattern: Invalid value for "+$+": "+Z)}else if($==="day"){if(Z<0||Z>=31)throw RangeError("CronPattern: Invalid value for "+$+": "+Z)}else if($==="month"&&(Z<0||Z>=12))throw RangeError("CronPattern: Invalid value for "+$+": "+Z);this[$][Z]=X}handleRangeWithStepping($,Z,X,Q){let Y=this.extractNth($,Z),G=Y[0].match(/^(\d+)-(\d+)\/(\d+)$/);if(G===null)throw TypeError("CronPattern: Syntax error, illegal range with stepping: '"+$+"'");let[,J,K,W]=G,F=parseInt(J,10)+X,H=parseInt(K,10)+X,N=parseInt(W,10);if(isNaN(F))throw TypeError("CronPattern: Syntax error, illegal lower range (NaN)");if(isNaN(H))throw TypeError("CronPattern: Syntax error, illegal upper range (NaN)");if(isNaN(N))throw TypeError("CronPattern: Syntax error, illegal stepping: (NaN)");if(N===0)throw TypeError("CronPattern: Syntax error, illegal stepping: 0");if(N>this[Z].length)throw TypeError("CronPattern: Syntax error, steps cannot be greater than maximum value of part ("+this[Z].length+")");if(F>H)throw TypeError("CronPattern: From value is larger than to value: '"+$+"'");for(let U=F;U<=H;U+=N)this.setPart(Z,U,Y[1]||Q)}extractNth($,Z){let X=$,Q;if(X.includes("#")){if(Z!=="dayOfWeek")throw Error("CronPattern: nth (#) only allowed in day-of-week field");Q=X.split("#")[1],X=X.split("#")[0]}return[X,Q]}handleRange($,Z,X,Q){let Y=this.extractNth($,Z),G=Y[0].split("-");if(G.length!==2)throw TypeError("CronPattern: Syntax error, illegal range: '"+$+"'");let J=parseInt(G[0],10)+X,K=parseInt(G[1],10)+X;if(isNaN(J))throw TypeError("CronPattern: Syntax error, illegal lower range (NaN)");if(isNaN(K))throw TypeError("CronPattern: Syntax error, illegal upper range (NaN)");if(J>K)throw TypeError("CronPattern: From value is larger than to value: '"+$+"'");for(let W=J;W<=K;W++)this.setPart(Z,W,Y[1]||Q)}handleStepping($,Z,X,Q){let Y=this.extractNth($,Z),G=Y[0].split("/");if(G.length!==2)throw TypeError("CronPattern: Syntax error, illegal stepping: '"+$+"'");G[0]===""&&(G[0]="*");let J=0;G[0]!=="*"&&(J=parseInt(G[0],10)+X);let K=parseInt(G[1],10);if(isNaN(K))throw TypeError("CronPattern: Syntax error, illegal stepping: (NaN)");if(K===0)throw TypeError("CronPattern: Syntax error, illegal stepping: 0");if(K>this[Z].length)throw TypeError("CronPattern: Syntax error, max steps for part is ("+this[Z].length+")");for(let W=J;W<this[Z].length;W+=K)this.setPart(Z,W,Y[1]||Q)}replaceAlphaDays($){return $.replace(/-sun/gi,"-7").replace(/sun/gi,"0").replace(/mon/gi,"1").replace(/tue/gi,"2").replace(/wed/gi,"3").replace(/thu/gi,"4").replace(/fri/gi,"5").replace(/sat/gi,"6")}replaceAlphaMonths($){return $.replace(/jan/gi,"1").replace(/feb/gi,"2").replace(/mar/gi,"3").replace(/apr/gi,"4").replace(/may/gi,"5").replace(/jun/gi,"6").replace(/jul/gi,"7").replace(/aug/gi,"8").replace(/sep/gi,"9").replace(/oct/gi,"10").replace(/nov/gi,"11").replace(/dec/gi,"12")}handleNicknames($){let Z=$.trim().toLowerCase();return Z==="@yearly"||Z==="@annually"?"0 0 1 1 *":Z==="@monthly"?"0 0 1 * *":Z==="@weekly"?"0 0 * * 0":Z==="@daily"?"0 0 * * *":Z==="@hourly"?"0 * * * *":$}setNthWeekdayOfMonth($,Z){if(typeof Z!="number"&&Z==="L")this.dayOfWeek[$]=this.dayOfWeek[$]|Ua0;else if(Z===At)this.dayOfWeek[$]=At;else if(Z<6&&Z>0)this.dayOfWeek[$]=this.dayOfWeek[$]|iO$[Z-1];else throw TypeError(`CronPattern: nth weekday out of range, should be 1-5 or L. Value: ${Z}, Type: ${typeof Z}`)}},dO$,$N,OJ=class ${tz;ms;second;minute;hour;day;month;year;constructor(Z,X){if(this.tz=X,Z&&Z instanceof Date)if(!isNaN(Z))this.fromDate(Z);else throw TypeError("CronDate: Invalid date passed to CronDate constructor");else if(Z===void 0)this.fromDate(new Date);else if(Z&&typeof Z=="string")this.fromString(Z);else if(Z instanceof $)this.fromCronDate(Z);else throw TypeError("CronDate: Invalid type ("+typeof Z+") passed to CronDate constructor")}isNthWeekdayOfMonth(Z,X,Q,Y){let G=new Date(Date.UTC(Z,X,Q)).getUTCDay(),J=0;for(let K=1;K<=Q;K++)new Date(Date.UTC(Z,X,K)).getUTCDay()===G&&J++;if(Y&At&&iO$[J-1]&Y)return!0;if(Y&Ua0){let K=new Date(Date.UTC(Z,X+1,0)).getUTCDate();for(let W=Q+1;W<=K;W++)if(new Date(Date.UTC(Z,X,W)).getUTCDay()===G)return!1;return!0}return!1}fromDate(Z){if(this.tz!==void 0)if(typeof this.tz=="number")this.ms=Z.getUTCMilliseconds(),this.second=Z.getUTCSeconds(),this.minute=Z.getUTCMinutes()+this.tz,this.hour=Z.getUTCHours(),this.day=Z.getUTCDate(),this.month=Z.getUTCMonth(),this.year=Z.getUTCFullYear(),this.apply();else{let X=UX.toTZ(Z,this.tz);this.ms=Z.getMilliseconds(),this.second=X.s,this.minute=X.i,this.hour=X.h,this.day=X.d,this.month=X.m-1,this.year=X.y}else this.ms=Z.getMilliseconds(),this.second=Z.getSeconds(),this.minute=Z.getMinutes(),this.hour=Z.getHours(),this.day=Z.getDate(),this.month=Z.getMonth(),this.year=Z.getFullYear()}fromCronDate(Z){this.tz=Z.tz,this.year=Z.year,this.month=Z.month,this.day=Z.day,this.hour=Z.hour,this.minute=Z.minute,this.second=Z.second,this.ms=Z.ms}apply(){if(this.month>11||this.day>dO$[this.month]||this.hour>59||this.minute>59||this.second>59||this.hour<0||this.minute<0||this.second<0){let Z=new Date(Date.UTC(this.year,this.month,this.day,this.hour,this.minute,this.second,this.ms));return this.ms=Z.getUTCMilliseconds(),this.second=Z.getUTCSeconds(),this.minute=Z.getUTCMinutes(),this.hour=Z.getUTCHours(),this.day=Z.getUTCDate(),this.month=Z.getUTCMonth(),this.year=Z.getUTCFullYear(),!0}else return!1}fromString(Z){if(typeof this.tz=="number"){let X=UX.fromTZISO(Z);this.ms=X.getUTCMilliseconds(),this.second=X.getUTCSeconds(),this.minute=X.getUTCMinutes(),this.hour=X.getUTCHours(),this.day=X.getUTCDate(),this.month=X.getUTCMonth(),this.year=X.getUTCFullYear(),this.apply()}else return this.fromDate(UX.fromTZISO(Z,this.tz))}findNext(Z,X,Q,Y){let G=this[X],J;Q.lastDayOfMonth&&(this.month!==1?J=dO$[this.month]:J=new Date(Date.UTC(this.year,this.month+1,0,0,0,0,0)).getUTCDate());let K=!Q.starDOW&&X=="day"?new Date(Date.UTC(this.year,this.month,1,0,0,0,0)).getUTCDay():void 0;for(let W=this[X]+Y;W<Q[X].length;W++){let F=Q[X][W];if(X==="day"&&Q.lastDayOfMonth&&W-Y==J&&(F=1),X==="day"&&!Q.starDOW){let H=Q.dayOfWeek[(K+(W-Y-1))%7];if(H&&H&At)H=this.isNthWeekdayOfMonth(this.year,this.month,W-Y,H)?1:0;else if(H)throw Error(`CronDate: Invalid value for dayOfWeek encountered. ${H}`);Z.legacyMode&&!Q.starDOM?F=F||H:F=F&&H}if(F)return this[X]=W-Y,G!==this[X]?2:1}return 3}recurse(Z,X,Q){let Y=this.findNext(X,$N[Q][0],Z,$N[Q][2]);if(Y>1){let G=Q+1;for(;G<$N.length;)this[$N[G][0]]=-$N[G][2],G++;if(Y===3)return this[$N[Q][1]]++,this[$N[Q][0]]=-$N[Q][2],this.apply(),this.recurse(Z,X,0);if(this.apply())return this.recurse(Z,X,Q-1)}return Q+=1,Q>=$N.length?this:this.year>=3000?null:this.recurse(Z,X,Q)}increment(Z,X,Q){return this.second+=X.interval!==void 0&&X.interval>1&&Q?X.interval:1,this.ms=0,this.apply(),this.recurse(Z,X,0)}getDate(Z){return Z||this.tz===void 0?new Date(this.year,this.month,this.day,this.hour,this.minute,this.second,this.ms):typeof this.tz=="number"?new Date(Date.UTC(this.year,this.month,this.day,this.hour,this.minute-this.tz,this.second,this.ms)):UX.fromTZ(UX.tp(this.year,this.month+1,this.day,this.hour,this.minute,this.second,this.tz),!1)}getTime(){return this.getDate(!1).getTime()}},mO$=30000,yL0,gL0=class{name;options;_states;fn;constructor($,Z,X){let Q,Y;if(Pt(Z))Y=Z;else if(typeof Z=="object")Q=Z;else if(Z!==void 0)throw Error("Cron: Invalid argument passed for optionsIn. Should be one of function, or object (options).");if(Pt(X))Y=X;else if(typeof X=="object")Q=X;else if(X!==void 0)throw Error("Cron: Invalid argument passed for funcIn. Should be one of function, or object (options).");if(this.name=Q?.name,this.options=lP4(Q),this._states={kill:!1,blocking:!1,previousRun:void 0,currentRun:void 0,once:void 0,currentTimeout:void 0,maxRuns:Q?Q.maxRuns:void 0,paused:Q?Q.paused:!1,pattern:new lO$("* * * * *")},$&&($ instanceof Date||typeof $=="string"&&$.indexOf(":")>0)?this._states.once=new OJ($,this.options.timezone||this.options.utcOffset):this._states.pattern=new lO$($,this.options.timezone),this.name){if(yL0.find((G)=>G.name===this.name))throw Error("Cron: Tried to initialize new named job '"+this.name+"', but name already taken.");yL0.push(this)}return Y!==void 0&&dP4(Y)&&(this.fn=Y,this.schedule()),this}nextRun($){let Z=this._next($);return Z?Z.getDate(!1):null}nextRuns($,Z){this._states.maxRuns!==void 0&&$>this._states.maxRuns&&($=this._states.maxRuns);let X=[],Q=Z||this._states.currentRun||void 0;for(;$--&&(Q=this.nextRun(Q));)X.push(Q);return X}getPattern(){return this._states.pattern?this._states.pattern.pattern:void 0}isRunning(){let $=this.nextRun(this._states.currentRun),Z=!this._states.paused,X=this.fn!==void 0,Q=!this._states.kill;return Z&&X&&Q&&$!==null}isStopped(){return this._states.kill}isBusy(){return this._states.blocking}currentRun(){return this._states.currentRun?this._states.currentRun.getDate():null}previousRun(){return this._states.previousRun?this._states.previousRun.getDate():null}msToNext($){let Z=this._next($);return Z?$ instanceof OJ||$ instanceof Date?Z.getTime()-$.getTime():Z.getTime()-new OJ($).getTime():null}stop(){this._states.kill=!0,this._states.currentTimeout&&clearTimeout(this._states.currentTimeout);let $=yL0.indexOf(this);$>=0&&yL0.splice($,1)}pause(){return this._states.paused=!0,!this._states.kill}resume(){return this._states.paused=!1,!this._states.kill}schedule($){if($&&this.fn)throw Error("Cron: It is not allowed to schedule two functions using the same Croner instance.");$&&(this.fn=$);let Z=this.msToNext(),X=this.nextRun(this._states.currentRun);return Z==null||isNaN(Z)||X===null?this:(Z>mO$&&(Z=mO$),this._states.currentTimeout=setTimeout(()=>this._checkTrigger(X),Z),this._states.currentTimeout&&this.options.unref&&mP4(this._states.currentTimeout),this)}async _trigger($){if(this._states.blocking=!0,this._states.currentRun=new OJ(void 0,this.options.timezone||this.options.utcOffset),this.options.catch)try{this.fn!==void 0&&await this.fn(this,this.options.context)}catch(Z){Pt(this.options.catch)&&this.options.catch(Z,this)}else this.fn!==void 0&&await this.fn(this,this.options.context);this._states.previousRun=new OJ($,this.options.timezone||this.options.utcOffset),this._states.blocking=!1}async trigger(){await this._trigger()}runsLeft(){return this._states.maxRuns}_checkTrigger($){let Z=new Date,X=!this._states.paused&&Z.getTime()>=$.getTime(),Q=this._states.blocking&&this.options.protect;X&&!Q?(this._states.maxRuns!==void 0&&this._states.maxRuns--,this._trigger()):X&&Q&&Pt(this.options.protect)&&setTimeout(()=>this.options.protect(this),0),this.schedule()}_next($){let Z=!!($||this._states.currentRun),X=!1;!$&&this.options.startAt&&this.options.interval&&([$,Z]=this._calculatePreviousRun($,Z),X=!$),$=new OJ($,this.options.timezone||this.options.utcOffset),this.options.startAt&&$&&$.getTime()<this.options.startAt.getTime()&&($=this.options.startAt);let Q=this._states.once||new OJ($,this.options.timezone||this.options.utcOffset);return!X&&Q!==this._states.once&&(Q=Q.increment(this._states.pattern,this.options,Z)),this._states.once&&this._states.once.getTime()<=$.getTime()||Q===null||this._states.maxRuns!==void 0&&this._states.maxRuns<=0||this._states.kill||this.options.stopAt&&Q.getTime()>=this.options.stopAt.getTime()?null:Q}_calculatePreviousRun($,Z){let X=new OJ(void 0,this.options.timezone||this.options.utcOffset),Q=$;if(this.options.startAt.getTime()<=X.getTime()){Q=this.options.startAt;let Y=Q.getTime()+this.options.interval*1000;for(;Y<=X.getTime();)Q=new OJ(Q,this.options.timezone||this.options.utcOffset).increment(this._states.pattern,this.options,!0),Y=Q.getTime()+this.options.interval*1000;Z=!0}return Q===null&&(Q=void 0),[Q,Z]}};var Oa0=D(()=>{UX.fromTZISO=($,Z,X)=>UX.fromTZ(cP4($,Z),X);UX.fromTZ=function($,Z){let X=new Date(Date.UTC($.y,$.m-1,$.d,$.h,$.i,$.s)),Q=Na0($.tz,X),Y=new Date(X.getTime()-Q),G=Na0($.tz,Y);if(G-Q===0)return Y;{let J=new Date(X.getTime()-G),K=Na0($.tz,J);if(K-G===0)return J;if(!Z&&K-G>0)return J;if(Z)throw Error("Invalid date passed to fromTZ()");return Y}};UX.toTZ=function($,Z){let X=$.toLocaleString("en-US",{timeZone:Z}).replace(/[\u202f]/," "),Q=new Date(X);return{y:Q.getFullYear(),m:Q.getMonth()+1,d:Q.getDate(),h:Q.getHours(),i:Q.getMinutes(),s:Q.getSeconds(),tz:Z}};UX.tp=($,Z,X,Q,Y,G,J)=>({y:$,m:Z,d:X,h:Q,i:Y,s:G,tz:J});UX.minitz=UX;At=31|Ua0,iO$=[1,2,4,8,16],dO$=[31,28,31,30,31,30,31,31,30,31,30,31],$N=[["month","year",0],["day","month",-1],["hour","day",0],["minute","hour",0],["second","minute",0]];yL0=[]});function hL0($,Z){try{return new gL0($,{timezone:"UTC"}).nextRun(Z)??null}catch{return null}}var Ba0=D(()=>{Oa0()});import{DBOS as w7,SchedulerMode as iP4}from"@dbos-inc/dbos-sdk";async function ja0($){try{let{rows:Z}=await $.query(`SELECT q.name FROM dbos.queues q
1505
+ `)}async function sz4($,Z,X){let Y=(await $.storage.taskBoard.listPrs(Z.id,Z.organizationId).catch(()=>[])).find((G)=>G.number===X);if(!Y)return null;return VW$($,Z.organizationId,Y).catch(()=>null)}async function ez4($,Z){let X=await $.storage.taskBoard.listActivity(Z.id,Z.organizationId).catch(()=>[]);return Fe1(X)}function $P4($){return $!=="closed"}async function ZP4($,Z){let X=await $.storage.taskBoard.listPrs(Z.id,Z.organizationId).catch(()=>[]);for(let Q of X){let{state:Y}=await ty(Z.organizationId,Q);if($P4(Y))return{number:Q.number,url:Q.url}}return}async function m3($,Z,X){let Q=await Oe1($,Z,X?.userInitiated?pO():void 0),Y="decopilot";try{let G=b0().taskBoardRerunReusesPrBranch,J=X?.pr??(G?await ZP4($,Z):void 0),K=G&&J?await sz4($,Z,J.number):null,W=!X?.feedback&&!X?.resolveConflict,F=J&&W?await ez4($,Z):null,H=J&&J!==X?.pr||F?{...X,...J?{pr:J}:{},...F?{feedback:F}:{}}:X,N=await xD0($,Z.organizationId);if(N){Y="claude-code";let U="repo"in N?N.repo:null;await ln($,Z,{title:`Super Agent: ${Z.title}`,...X?.runClass?{runClass:X.runClass}:{},...K?{pinnedRef:K}:{},prompt:HW$(Z,U,{...H,..."choices"in N?{repoChoices:N.choices}:{}}),temperature:0.5,harnessId:"claude-code",...U?{repo:U}:{}})}else await ln($,Z,{title:`Super Agent: ${Z.title}`,...X?.runClass?{runClass:X.runClass}:{},prompt:az4(Z,H),temperature:0.5,...K?{pinnedRef:K}:{}})}catch(G){throw await Be1($.storage.organizationBilling,Z.organizationId,Z.id,Q),G}await $.storage.taskBoard.supersedeFailedThreads(Z.id,Z.organizationId).catch((G)=>console.error("[task-board] superseding failed threads failed",G)),fY({event:"task_run_enqueued",organizationId:Z.organizationId,properties:{task_id:Z.id,reports_task:bQ(Z),claim:Q,harness:Y,...X?.runClass?{run_class:X.runClass}:{}}})}var SW=D(()=>{X9();nG();X9();C4();q$();ot0();KJ();mn();lt0()});import{z as s3}from"zod";var zC;var Go0=D(()=>{M0();Nn0();u3();Un0();SW();WX();L5();uy();zC=u({name:"TASK_BOARD_ITEM_CREATE",description:"Create a new task board item for the organization.",annotations:{title:"Create Task Board Item",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!1},inputSchema:s3.object({title:s3.string().min(1),description:s3.string().nullable().optional(),status:h3.optional(),priority:ZC.optional(),assigneeId:s3.string().nullable().optional(),repo:s3.string().nullable().optional(),dueDate:s3.string().datetime().nullable().optional(),sprint:s3.number().int().min(1).max(CB0).nullable().optional().describe("Sprint to plan this task into (1-based, counted from the org's sprint cadence). Omit or null to leave it in the backlog."),tagIds:s3.array(s3.string()).optional(),prUrl:s3.string().nullable().optional().describe('GitHub pull request URL to link to the new task, e.g. https://github.com/owner/repo/pull/123. Pass this with `status: "in_review"` right after you open a PR so the card lands on the board with its PR already attached for review.')}),outputSchema:s3.object({item:Sy}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");let Q=$.prUrl?VB($.prUrl):null;if($.prUrl&&!Q)throw Error(`Not a GitHub pull request URL: ${$.prUrl} (expected https://github.com/<owner>/<repo>/pull/<number>)`);if($.assigneeId)await _B0(Z,X,$.assigneeId);let Y=$.assigneeId===U8;if($.tagIds?.length){let J=await Z.storage.tags.listOrgTags(X),K=new Set(J.map((W)=>W.id));for(let W of $.tagIds)if(!K.has(W))throw Error(`Tag not found: ${W}`)}let G=await Z.storage.taskBoard.create({organizationId:X,title:$.title,description:$.description??null,status:Y?"todo":$.status,priority:$.priority,assigneeId:$.assigneeId??null,assignedBy:$.assigneeId?o0(Z):null,repo:$.repo??null,dueDate:$.dueDate??null,sprint:$.sprint??null,by:o0(Z)});if($.tagIds?.length)await Z.storage.taskBoard.setItemTags(G.id,$.tagIds,o0(Z)),G=await Z.storage.taskBoard.getById(G.id,X);if(Q)await Z.storage.taskBoard.linkPr({taskBoardItemId:G.id,organizationId:X,url:Q.url,prNumber:Q.number,repoOwner:Q.owner,repoName:Q.repo,connectionId:null});return await W6(Z,{taskBoardItemId:G.id,action:"created",actorId:o0(Z),alsoSubscribe:[o0(Z),G.assigneeId===U8?null:G.assigneeId]}),await Z.storage.notifications.notifyMentions({taskBoardItemId:G.id,organizationId:X,actorId:o0(Z),body:G.description??""}),h$(X,G),await _B(Z,G),{item:G}}})});import{z as vC}from"zod";var gr0;var QO$=D(()=>{M0();uy();L5();$C();gr0=u({name:"TASK_BOARD_ITEM_PR_LINK",description:"Link the pull request you just opened to this run's task board item. Call this right after `gh pr create` succeeds, with the PR URL it printed. Reviewers (QA, code review) are dispatched from the linked PR, so a task whose PR is not linked never gets reviewed.",annotations:{title:"Link Pull Request to Task",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:vC.object({url:vC.string().describe("The pull request URL, e.g. https://github.com/owner/repo/pull/123")}),outputSchema:vC.object({url:vC.string(),prNumber:vC.number(),taskBoardItemIds:vC.array(vC.string())}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=t(Z).id,{threadId:Q}=SB0(),Y=VB($.url);if(!Y)throw Error(`Not a GitHub pull request URL: ${$.url} (expected https://github.com/<owner>/<repo>/pull/<number>)`);let G=await dy(Z,X,Q);for(let J of G)await Z.storage.taskBoard.linkPr({taskBoardItemId:J,organizationId:X,url:Y.url,prNumber:Y.number,repoOwner:Y.owner,repoName:Y.repo}),await Z.storage.taskBoard.clearSweepBudget(J,X);return{url:Y.url,prNumber:Y.number,taskBoardItemIds:G}}})});function GO$($){YO$=$}function SL0($){YO$?.broadcast($)}var YO$=null;import{DBOS as CL0}from"@dbos-inc/dbos-sdk";function XP4($,Z){let X=`thread-run:${Z}:`;if(!$.workflowID.startsWith(X))return null;let Q=$.input?.[0],Y=Q?.request;return{workflowId:$.workflowID,messageId:Y?.messageId??$.workflowID.slice(X.length),status:$.status==="PENDING"?"running":"queued",enqueuedAt:$.createdAt,...Q?.source!==void 0?{source:Q.source}:{}}}async function hr0($){return(await CL0.listWorkflows({workflow_id_prefix:`thread-run:${$}:`,status:["PENDING","ENQUEUED"],loadInput:!0,loadOutput:!1})).map((X)=>XP4(X,$)).filter((X)=>X!==null).sort((X,Q)=>X.enqueuedAt-Q.enqueuedAt)}async function JO$($,Z){if(!Z.startsWith(`thread-run:${$}:`))return!1;return await CL0.cancelWorkflows([Z]),!0}async function Fg($){let Z=await CL0.listWorkflows({workflow_id_prefix:`thread-run:${$}:`,status:["PENDING"],loadInput:!1,loadOutput:!1});if(Z.length===0)return;await CL0.cancelWorkflows(Z.map((X)=>X.workflowID))}var _L0=()=>{};function GP4($){return/\b405\b/.test($)&&/not allowed on this repository/i.test($)}function KP4($,Z={}){if($==="failing")return!0;if($==="pending")return!Z.allowPendingChecks;return!1}async function WP4($,Z,X,Q,Y){if(JP4.has(Q))return;let J=(await $.storage.taskBoard.listActivity(X,Z).catch(()=>[])).at(-1);if(J?.action==="merge_failed"&&J.data?.reason===Q)return;await W6($,{taskBoardItemId:X,action:"merge_failed",actorId:null,data:{reason:Q,...Y?{detail:Y}:{}}})}function FP4($){if(!$?.isError)return{kind:"merged"};let Z=JSON.stringify($?.content)??"";if(GP4(Z))return{kind:"method_not_allowed",detail:Z};if(lD0(Z))return{kind:"rate_limited",detail:Z};return{kind:"refused",detail:Z}}async function HP4($,Z,X){let Q=await $.callTool({name:"merge_pull_request",arguments:{owner:Z.repoOwner,repo:Z.repoName,pullNumber:Z.number,merge_method:X}},void 0,{timeout:QP4});return FP4(Q)}async function Dt($,Z,X,Q={}){let Y=async(N,U)=>{return await WP4($,Z,X,N,U),{merged:!1,reason:N,...U?{detail:U}:{}}},G=await $.storage.taskBoard.listPrs(X,Z),J=await fB($,Z,G);if(!J)return console.warn(`[task-board] merge skipped \u2014 no linked PR on ${X}`),Y("no_pr");let K=await qW$($,Z,J);if(KP4(K,Q))return console.warn(`[task-board] merge blocked \u2014 checks ${K} on PR #${J.number}`),Y(K==="failing"?"checks_failing":"checks_pending");let W=`${J.repoOwner}/${J.repoName}`,F=await EC($,Z,J.connectionId,{owner:J.repoOwner,name:J.repoName});if(!F)return console.warn("[task-board] merge blocked \u2014 no active GitHub connection for "+`${W} (PR #${J.number})`),Y("no_connection",W);let H=await H5(F,$,!0);try{let N=null;for(let U of YP4){let O=await HP4(H,J,U);if(O.kind==="merged")return zW$(F.id),{merged:!0};if(O.kind==="rate_limited")return console.warn(`[task-board] merge rate-limited on PR #${J.number} \u2014 sweep retries`),Y("rate_limited",O.detail.slice(0,500));if(O.kind==="method_not_allowed"){console.warn(`[task-board] merge method '${U}' not allowed on ${W} \u2014 trying next`),N=O.detail;continue}return console.error(`[task-board] merge refused by GitHub on PR #${J.number}:`,O.detail),Y("refused",O.detail.slice(0,500))}return console.error(`[task-board] no merge method allowed on ${W} (PR #${J.number})`,N),Y("refused",N?.slice(0,500))}catch(N){let U=N instanceof Error?N.message:String(N);if(lD0(N))return Y("rate_limited",U);return console.error("[task-board] merge PR failed",N),Y("error",U)}finally{await H.close().catch(()=>{})}}async function Lt($,Z,X){let Q=await $.storage.organizationSettings.get(Z),Y=TH(Q?.flags),G=await $.storage.taskBoard.listActivity(X,Z);return iO(G,Y,{verifiedOnly:!0})}async function NP4($,Z){let X=await $.storage.organizationSettings.get(Z.organizationId),Q=TH(X?.flags),Y=await $.storage.taskBoard.listActivity(Z.id,Z.organizationId);if(!We1(Y,Q))return;await CW($,Z,"every reviewer approved, but an approval could not be verified \u2014 "+"auto-merge is blocked and no reviewer can be re-dispatched this cycle")}function KO$($){return!$.merged&&$.reason==="refused"}function ur0($,Z){if($!==null)return $;if(Z===null||!KO$(Z))return null;return(Z.detail??"").toLowerCase().includes("merge conflict")?!0:null}async function UP4($,Z,X){if(!KO$(X))return;let Q=Z.organizationId,Y=await $.storage.taskBoard.listPrs(Z.id,Q),G=await fB($,Q,Y);if(!G)return;await ny($,Q,Z,{pr:{number:G.number,url:G.url},conflict:ur0(await vB($,Q,G),X)}).catch((J)=>{console.error("[task-board] sweep conflict auto-resolve failed",J)})}async function WO$($,Z){let X=Z.organizationId;if(Z.status!=="in_review")return!1;if((await $.storage.organizationSettings.get(X))?.flags?.auto_merge!==!0)return!1;if(await $.storage.taskBoard.hasHumanRejectedDone(Z.id,X))return!1;if(!await Lt($,X,Z.id))return await NP4($,Z),!1;let Y=await Dt($,X,Z.id);if(!Y.merged)return await UP4($,Z,Y),!1;let G=await $.storage.taskBoard.update(Z.id,X,{status:"done"},Z.updatedBy);return await W6($,{taskBoardItemId:Z.id,action:"status_changed",actorId:null,data:{from:Z.status,to:"done"}}),h$(X,G),!0}var QP4=15000,YP4,JP4;var wt=D(()=>{wH();X9();WX();dn();KJ();L5();YP4=["merge","squash","rebase"];JP4=new Set(["checks_pending"])});import{z as Hg}from"zod";function BP4($){return $.threads.filter((Z)=>Z.status!==null&&!bn.has(Z.status)).map((Z)=>Z.threadId)}async function DP4($,Z,X){let Q=(G)=>(J)=>console.error("[task-board] rerun takeover step failed",{threadId:Z,step:G,err:J});await $.storage.threads.setCancelRequested(Z,X).catch(Q("cancel-flag")),await Xg(Z).catch(Q("background-jobs")),await Fg(Z).catch(Q("gate-head"));let Y=await $.storage.threads.getRunFence(Z).catch(()=>null);if(Y)await _C(Z,Y).catch(Q("hosted-harness"));SL0(Z)}function LP4($,Z){return $===!0&&rt0(Z)}async function wP4($,Z,X){let Q=Z.organizationId,Y=await $.storage.taskBoard.listPrs(Z.id,Q).catch(()=>[]),G=await fB($,Q,Y).catch(()=>{return});if(!G)return!1;let J=await vB($,Q,G).catch(()=>null);return LP4(J,X)}function jP4($,Z){let X=RH($),Q=0;for(let Y of $){if(Y.action!=="review_approved")continue;let G=new Date(Y.occurredAt).getTime();if(G>=X)Q=Math.max(Q,G)}return Z-Q>=EP4}async function zP4($,Z){if(Z.status!=="in_review")return;if((await $.storage.organizationSettings.get(Z.organizationId))?.flags?.auto_merge!==!0)return;if(!await Lt($,Z.organizationId,Z.id))return;let Y=await $.storage.taskBoard.listActivity(Z.id,Z.organizationId).catch(()=>[]);if(jP4(Y,Date.now()))return;if(await wP4($,Z,Y))return;throw Error("Every reviewer approved this task and its merge is retrying \u2014 re-running "+"would throw that away and start a new review cycle. Wait for the merge, or use the ship button if the PR needs a nudge.")}var OP4="Superseded by a manual re-run of this task",EP4=900000,cr0;var FO$=D(()=>{M0();X9();VW();tH();_L0();Qg();WX();L5();SW();wt();KJ();dn();nG();cr0=u({name:"TASK_BOARD_ITEM_RERUN",description:"Re-run a task board item with the Super Agent, whatever lane it is in. Use this to retry a task that stalled, finished without doing the job, or is already assigned to the Super Agent (in which case re-assigning it does nothing). Fails any run still holding the task open, moves it to In Progress, and queues a fresh run.",annotations:{title:"Re-run Task",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!0},inputSchema:Hg.object({id:Hg.string().describe("The task board item to re-run.")}),outputSchema:Hg.object({status:Hg.string().describe("The task's lane after the re-run was queued."),supersededThreadIds:Hg.array(Hg.string()).describe("Runs that were failed to make room for this one.")}),handler:async({id:$},Z)=>{r(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");let Q=await Z.storage.taskBoard.getById($,X);if(!Q)throw Error(`Task board item not found: ${$}`);if(Q.assigneeId!==U8)throw Error("Only a task assigned to the Super Agent can be re-run. Assign it to "+"the Super Agent instead \u2014 that queues a run by itself.");await zP4(Z,Q),await px(Z,Q,pO());let Y=[];for(let J of BP4(Q)){if(!await Z.storage.threads.failIfNotTerminal(J,OP4,"superseded"))continue;Y.push(J),await DP4(Z,J,X)}let G=await Z.storage.taskBoard.update($,X,{status:"in_progress"},o0(Z));return await W6(Z,{taskBoardItemId:$,action:"status_changed",actorId:o0(Z),data:{from:Q.status,to:"in_progress",reason:"rerun"}}),h$(X,G),await m3(Z,G,{userInitiated:!0}),{status:G.status,supersededThreadIds:Y}}})});import{z as Et}from"zod";var lr0;var HO$=D(()=>{M0();nG();WX();L5();SW();KJ();lr0=u({name:"TASK_BOARD_RESOLVE_CONFLICT",description:"Hand a task's pull request back to the Super Agent to resolve a merge conflict with its base branch. Use when a reviewed PR can't be shipped because it conflicts. Bounces the task to In Progress and queues a run that checks out the existing PR's branch, merges the base, resolves the conflicts, and pushes to the same PR.",annotations:{title:"Resolve Merge Conflict",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!0},inputSchema:Et.object({id:Et.string().describe("The task board item whose PR conflicts."),prNumber:Et.number().describe("The conflicting pull request's number, linked to this task.")}),outputSchema:Et.object({status:Et.string().describe("The task's lane after the resolution run was queued.")}),handler:async({id:$,prNumber:Z},X)=>{r(X),await X.access.check();let Q=X.organization?.id;if(!Q)throw Error("Organization ID required (no active organization in context)");let Y=await X.storage.taskBoard.getById($,Q);if(!Y)throw Error(`Task board item not found: ${$}`);let J=(await X.storage.taskBoard.listPrs($,Q)).find((F)=>F.number===Z);if(!J)throw Error(`Pull request #${Z} is not linked to this task.`);if(await vB(X,Q,J).catch(()=>null)!==!0)throw Error("This pull request no longer has a merge conflict \u2014 refresh and try again.");await px(X,Y,pO());let W=await X.storage.taskBoard.claimConflictResolution($,Q,o0(X));if(!W)throw Error("Couldn't start conflict resolution \u2014 the task may have moved, been "+"reassigned, or already be resolving. Refresh and try again.");h$(Q,W);try{await m3(X,W,{pr:{number:J.number,url:J.url},resolveConflict:!0,runClass:"retry",userInitiated:!0})}catch(F){throw await X.storage.taskBoard.update(W.id,Q,{status:"in_review"},"system").then((H)=>h$(Q,H)).catch((H)=>console.error("[task-board] resolve-conflict status revert failed",H)),F}return await W6(X,{taskBoardItemId:$,action:"merge_conflict_resolution",actorId:null,data:{prNumber:J.number}}),{status:W.status}}})});import{z as lB}from"zod";function PP4($,Z,X){return $!==null&&$.reviewer===Z&&$.cycleAt.getTime()===X}function AP4($,Z){return Hd0($).get(Z)==="changes_requested"}var dr0;var NO$=D(()=>{M0();X9();u3();WX();L5();SW();wt();KJ();mt0();dn();nG();dr0=u({name:"TASK_BOARD_REVIEW_DECISION",description:"Record a reviewer's decision for a task under review. `approve` marks the pull request approved by that reviewer (and, once EVERY enabled reviewer has approved, merges it when the org enabled auto-merge, advancing the task to Done); `request_changes` hands the task back to the Super Agent with your notes so it can fix the PR.",annotations:{title:"Review Decision",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!0},inputSchema:lB.object({taskBoardItemId:lB.string(),reviewer:lB.enum(["qa","code_review"]).describe("Which reviewer you are: `qa` (QA Agent) or `code_review` (Code Reviewer)."),reviewToken:lB.string().optional().describe("The reviewToken from your prompt \u2014 proves you are this reviewer. "+"Pass it through exactly; an approval without a valid token is recorded but does NOT count toward an automatic merge."),decision:lB.enum(["approve","request_changes"]),notes:lB.string().min(1).describe("For approve: a short summary of what you verified. For request_changes: specific, actionable feedback the Super Agent must address.")}),outputSchema:lB.object({status:h3,merged:lB.boolean().describe("True when this approval completed the review and merged the PR.")}),handler:async({taskBoardItemId:$,reviewer:Z,reviewToken:X,decision:Q,notes:Y},G)=>{r(G),await G.access.check();let J=G.organization?.id;if(!J)throw Error("Organization ID required (no active organization in context)");let K=await G.storage.taskBoard.getById($,J);if(!K)throw Error(`Task board item not found: ${$}`);let W=X?RH(await G.storage.taskBoard.listActivity($,J)):0,F=!!X&&(NW$(X,$,Z,new Date(W))||PP4(await G.storage.taskBoard.resolveReviewClaimByToken($,X),Z,W));if(Q==="request_changes"){let j=await G.storage.taskBoard.listActivity($,J);if(AP4(j,Z))return{status:K.status,merged:!1};if(He1(j))return await W6(G,{taskBoardItemId:$,action:"review_changes_requested",actorId:null,data:{reviewer:Z,notes:Y,verified:F,bounceLimitReached:!0}}),await CW(G,K,`${Nd0} review bounces reached \u2014 the reviewer and the `+"Super Agent are not converging"),{status:(await G.storage.taskBoard.getById($,J)??K).status,merged:!1};let z=await G.storage.taskBoard.claimReviewChangesBounce($,J,K.updatedBy);if(await W6(G,{taskBoardItemId:$,action:"review_changes_requested",actorId:null,data:{reviewer:Z,notes:Y,verified:F}}),!z)return{status:(await G.storage.taskBoard.getById($,J)??K).status,merged:!1};h$(J,z);let A=await G.storage.taskBoard.listPrs($,J),P=await fB(G,J,A);return await m3(G,z,{feedback:`${mx[Z]}: ${Y}`,pr:P?{number:P.number,url:P.url}:void 0}).catch(async(I)=>{if(await _D0(G,z,I)){await G.storage.taskBoard.update(z.id,J,{status:"in_review"},"system").then((k)=>h$(J,k)).catch((k)=>console.error("[task-board] runs-exhausted status revert failed",k));return}if(I instanceof s7)throw I;console.error("[task-board] request_changes re-enqueue failed",I)}),{status:z.status,merged:!1}}if(await W6(G,{taskBoardItemId:$,action:"review_approved",actorId:null,data:{reviewer:Z,notes:Y,verified:F}}),!await Lt(G,J,$)){let j=await G.storage.taskBoard.getById($,J)??K;return h$(J,j),{status:j.status,merged:!1}}let U=(await G.storage.organizationSettings.get(J))?.flags?.auto_merge===!0,O=await G.storage.taskBoard.hasHumanRejectedDone($,J),B=U&&!O,L=B?await Dt(G,J,$):null;if(L?.merged===!0){let j=await G.storage.taskBoard.update($,J,{status:"done"},K.updatedBy);return await W6(G,{taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:K.status,to:"done"}}),h$(J,j),{status:j.status,merged:!0}}let E=await G.storage.taskBoard.getById($,J)??K;if(B){let j=await G.storage.taskBoard.listPrs($,J),z=await fB(G,J,j);if(z?await ny(G,J,E,{pr:{number:z.number,url:z.url},conflict:ur0(await vB(G,J,z),L)}).catch((P)=>{if(P instanceof s7)throw P;return console.error("[task-board] conflict auto-resolve failed",P),!1}):!1)return{status:(await G.storage.taskBoard.getById($,J)??E).status,merged:!1}}return h$(J,E),{status:E.status,merged:!1}}})});import{z as vL0}from"zod";function TP4($,Z,X){if($!=="in_review")return!1;return X.length===0||iO(Z,X)}var mr0;var UO$=D(()=>{M0();X9();u3();WX();L5();wt();mr0=u({name:"TASK_BOARD_PROMOTE_TO_PRODUCTION",description:"Ship a reviewed task: merge its open pull request and move the task to Done. Used by the board's 'Ship to production' button after the enabled reviewers approved, when auto-merge is off (a human does the final merge).",annotations:{title:"Ship to Production",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!0},inputSchema:vL0.object({taskBoardItemId:vL0.string()}),outputSchema:vL0.object({status:h3,merged:vL0.boolean().describe("True when the PR was merged.")}),handler:async({taskBoardItemId:$},Z)=>{r(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");let Q=await Z.storage.taskBoard.getById($,X);if(!Q)throw Error(`Task board item not found: ${$}`);let Y=await Z.storage.organizationSettings.get(X),G=TH(Y?.flags),J=await Z.storage.taskBoard.listActivity($,X);if(!TP4(Q.status,J,G))throw Error("Task is not ready to ship: it must be In Review with every enabled reviewer approved");if(!(await Dt(Z,X,$,{allowPendingChecks:!0})).merged){let F=await Z.storage.taskBoard.getById($,X)??Q;return h$(X,F),{status:Q.status,merged:!1}}let W=await Z.storage.taskBoard.update($,X,{status:"done"},Q.updatedBy);if(Q.status!=="done")await W6(Z,{taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:Q.status,to:"done"}});return h$(X,W),{status:W.status,merged:!0}}})});import{z as NJ}from"zod";function OO$($){if(!$)throw Error("Organization ID required (no active organization in context)");return $}var RP4,ir0,pr0;var BO$=D(()=>{M0();RP4=NJ.object({externalKey:NJ.string(),dismissedBy:NJ.string(),dismissedAt:NJ.string()});ir0=u({name:"TASK_BOARD_DISMISSED_LIST",description:"List the diagnostic findings this organization has dismissed by deleting their task board cards. The import skips these until they're restored.",annotations:{title:"List Dismissed Findings",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:NJ.object({}),outputSchema:NJ.object({findings:NJ.array(RP4)}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=OO$(Z.organization?.id);return{findings:await Z.storage.taskBoard.listDismissedFindings(X)}}}),pr0=u({name:"TASK_BOARD_DISMISSED_RESTORE",description:"Un-dismiss diagnostic findings, returning their cards to the board. Omit externalKeys to restore every dismissed finding.",annotations:{title:"Restore Dismissed Findings",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:NJ.object({externalKeys:NJ.array(NJ.string()).optional()}),outputSchema:NJ.object({restored:NJ.number()}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=OO$(Z.organization?.id);return{restored:await Z.storage.taskBoard.restoreDismissedFindings(X,$.externalKeys)}}})});import{z as i6}from"zod";function fL0($){let Z=$.organization?.id;if(!Z)throw Error("Organization ID required (no active organization in context)");return Z}function qP4($,Z,X){return $.replace(IP4,(Q,Y,G,J)=>{let K=encodeURIComponent(`${Z}/${G}`);return`${Y}/api/${encodeURIComponent(X)}/fs/outputs/read?path=${K}${J}`})}var nr0,tr0,IP4,or0,rr0,ar0;var DO$=D(()=>{M0();X9();VD0();$C();nr0=i6.object({id:i6.string(),taskBoardItemId:i6.string(),parentId:i6.string().nullable(),authorId:i6.string(),body:i6.string(),resolved:i6.boolean(),createdAt:i6.string(),updatedAt:i6.string()});tr0=u({name:"TASK_BOARD_COMMENT_LIST",description:"List a task board item's comments (flat, oldest first; replies carry parentId).",annotations:{title:"List Task Comments",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:i6.object({taskBoardItemId:i6.string()}),outputSchema:i6.object({comments:i6.array(nr0)}),handler:async($,Z)=>{return r(Z),await Z.access.check(),{comments:await Z.storage.taskBoard.listComments($.taskBoardItemId,fL0(Z))}}}),IP4=/(!\[[^\]]*\]\()org\/output\/([^)\s]+)(\))/g;or0=u({name:"TASK_BOARD_COMMENT_CREATE",description:"Post a comment on a task board item, or a reply to one.",annotations:{title:"Create Task Comment",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!1},inputSchema:i6.object({taskBoardItemId:i6.string(),body:i6.string().trim().min(1),parentId:i6.string().nullish()}),outputSchema:i6.object({comment:nr0}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=fL0(Z),Q=eS.getStore(),Y=Z.organization?.slug,G=Q?.threadId&&Y?qP4($.body,Q.threadId,Y):$.body,J=await Z.storage.taskBoard.createComment({taskBoardItemId:$.taskBoardItemId,organizationId:X,parentId:$.parentId??null,authorId:Q?U8:o0(Z),body:G});if(!J)throw Error("Task board item not found");return await Z.storage.notifications.notify({taskBoardItemId:J.taskBoardItemId,type:"commented",actorId:Q?null:o0(Z),alsoSubscribe:Q?[]:[o0(Z)]}),await Z.storage.notifications.notifyMentions({taskBoardItemId:J.taskBoardItemId,organizationId:X,actorId:Q?null:o0(Z),body:J.body}),await _t0(Z,{commentId:J.id,taskBoardItemId:J.taskBoardItemId,organizationId:X,authorLabel:Q?"Super Agent":Z.auth?.user?.name??Z.auth?.user?.email??"Studio",body:J.body}),{comment:J}}}),rr0=u({name:"TASK_BOARD_COMMENT_UPDATE",description:"Edit your own comment's body, or resolve/unresolve a comment thread (root only, any org member may toggle it).",annotations:{title:"Update Task Comment",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:i6.object({id:i6.string(),body:i6.string().trim().min(1).optional(),resolved:i6.boolean().optional()}),outputSchema:i6.object({comment:nr0}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=await Z.storage.taskBoard.updateComment({id:$.id,organizationId:fL0(Z),callerId:o0(Z),body:$.body,resolved:$.resolved});if(!X)throw Error("Comment not found, or you can only edit your own comments");return{comment:X}}}),ar0=u({name:"TASK_BOARD_COMMENT_DELETE",description:"Delete your own comment. Deleting a thread root deletes its replies too.",annotations:{title:"Delete Task Comment",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:i6.object({id:i6.string()}),outputSchema:i6.object({success:i6.boolean()}),handler:async($,Z)=>{return r(Z),await Z.access.check(),{success:await Z.storage.taskBoard.deleteComment($.id,fL0(Z),o0(Z))}}})});var LO$=D(()=>{MG$();Go0();ht0();ut0();ct0();KJ();QO$();FO$();HO$();NO$();UO$();WX();BO$();DO$()});function jt($){let Z=$.organization?.id;if(!Z)throw Error("Organization ID required (no active organization in context)");return Z}async function sr0($,Z){let X=jt($);if(!await $.storage.taskBoard.getById(Z,X))throw Error("Task board item not found");return X}import{z as NX}from"zod";var kP4,wO$;var EO$=D(()=>{M0();OD0();kP4=NX.object({id:NX.string(),taskBoardItemId:NX.string(),type:NX.enum(UD0),taskTitle:NX.string(),taskKeySeq:NX.number().nullable(),actorName:NX.string().nullable(),actorImage:NX.string().nullable(),createdAt:NX.string()}),wO$=u({name:"NOTIFICATION_LIST",description:"List the current user's unread notifications in the current organization, newest first.",annotations:{title:"List Notifications",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:NX.object({cursor:NX.string().optional(),limit:NX.number().int().positive().max(50).optional()}),outputSchema:NX.object({notifications:NX.array(kP4),unreadCount:NX.number(),nextCursor:NX.string().nullable()}),handler:async($,Z)=>{r(Z),await Z.access.check();let{notifications:X,unreadCount:Q,nextCursor:Y}=await Z.storage.notifications.listUnread(o0(Z),jt(Z),{cursor:$.cursor,limit:$.limit});return{notifications:X.map((G)=>({id:G.id,taskBoardItemId:G.taskBoardItemId,type:G.type,taskTitle:G.data.taskTitle,taskKeySeq:G.data.taskKeySeq,actorName:G.data.actorName,actorImage:G.data.actorImage,createdAt:G.createdAt})),unreadCount:Q,nextCursor:Y}}})});import{z as zt}from"zod";var jO$;var zO$=D(()=>{M0();jO$=u({name:"NOTIFICATION_MARK_READ",description:"Mark notifications read. Omit `ids` to mark all of the current user's unread ones in this organization.",annotations:{title:"Mark Notifications Read",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:zt.object({ids:zt.array(zt.string()).max(1000).optional()}),outputSchema:zt.object({marked:zt.number()}),handler:async($,Z)=>{return r(Z),await Z.access.check(),{marked:await Z.storage.notifications.markRead(o0(Z),jt(Z),$.ids)}}})});import{z as gW}from"zod";var PO$,AO$;var TO$=D(()=>{M0();PO$=u({name:"NOTIFICATION_SUBSCRIPTION_SET",description:"Follow or unfollow a task board item.",annotations:{title:"Set Notification Subscription",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:gW.object({taskBoardItemId:gW.string(),subscribed:gW.boolean()}),outputSchema:gW.object({subscribed:gW.boolean()}),handler:async($,Z)=>{return r(Z),await Z.access.check(),await sr0(Z,$.taskBoardItemId),await Z.storage.notifications.setSubscribed(o0(Z),$.taskBoardItemId,$.subscribed),{subscribed:$.subscribed}}}),AO$=u({name:"NOTIFICATION_SUBSCRIPTION_LIST",description:"List the user ids following a task board item.",annotations:{title:"List Notification Subscribers",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:gW.object({taskBoardItemId:gW.string()}),outputSchema:gW.object({userIds:gW.array(gW.string())}),handler:async($,Z)=>{return r(Z),await Z.access.check(),await sr0(Z,$.taskBoardItemId),{userIds:await Z.storage.notifications.listSubscribers($.taskBoardItemId)}}})});var RO$=D(()=>{EO$();zO$();TO$()});import{z as eH}from"zod";var er0;var IO$=D(()=>{M0();er0=u({name:"TAGS_LIST",description:"List all tags available in the organization.",annotations:{title:"List Tags",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:eH.object({}),outputSchema:eH.object({tags:eH.array(eH.object({id:eH.string(),organizationId:eH.string(),name:eH.string(),color:eH.string().nullable(),createdAt:eH.string().describe("ISO 8601 timestamp")}))}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=t(Z);return{tags:(await Z.storage.tags.listOrgTags(X.id)).map((Y)=>({...Y,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():String(Y.createdAt)}))}}})});import{z as hW}from"zod";var $a0;var qO$=D(()=>{M0();$a0=u({name:"TAGS_CREATE",description:"Create a new tag, usable on organization members and task board items.",annotations:{title:"Create Tag",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:hW.object({name:hW.string().min(1).max(50).describe("Tag name"),color:hW.string().regex(/^#[0-9a-fA-F]{6}$/).nullable().optional().describe('Hex color the tag renders its dot with, e.g. "#3b82f6"')}),outputSchema:hW.object({tag:hW.object({id:hW.string(),organizationId:hW.string(),name:hW.string(),color:hW.string().nullable(),createdAt:hW.string().describe("ISO 8601 timestamp")})}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=t(Z),Q=await Z.storage.tags.createTag(X.id,$.name,$.color);return{tag:{...Q,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():String(Q.createdAt)}}}})});import{z as bL0}from"zod";var Za0;var MO$=D(()=>{M0();Za0=u({name:"TAGS_DELETE",description:"Delete a tag and automatically remove it from all assigned members.",annotations:{title:"Delete Tag",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:bL0.object({tagId:bL0.string().describe("Tag ID to delete")}),outputSchema:bL0.object({success:bL0.boolean()}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=t(Z),Q=await Z.storage.tags.getTag($.tagId);if(!Q)throw Error("Tag not found");if(Q.organizationId!==X.id)throw Error("Tag does not belong to this organization");return await Z.storage.tags.deleteTag($.tagId),{success:!0}}})});import{z as uW}from"zod";var Xa0;var kO$=D(()=>{M0();Xa0=u({name:"MEMBER_TAGS_GET",description:"Get all tags currently assigned to a specific member.",annotations:{title:"Get Member Tags",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:uW.object({memberId:uW.string().describe("Member ID")}),outputSchema:uW.object({tags:uW.array(uW.object({id:uW.string(),organizationId:uW.string(),name:uW.string(),color:uW.string().nullable(),createdAt:uW.string().describe("ISO 8601 timestamp")}))}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=t(Z);if(!await Z.storage.tags.verifyMemberOrg($.memberId,X.id))throw Error(`Member not found in this organization: ${$.memberId}`);return{tags:(await Z.storage.tags.getMemberTags($.memberId)).map((G)=>({...G,createdAt:G.createdAt instanceof Date?G.createdAt.toISOString():String(G.createdAt)}))}}})});import{z as UJ}from"zod";var Qa0;var VO$=D(()=>{M0();Qa0=u({name:"MEMBER_TAGS_SET",description:"Replace all tags on a member with the given set. Pass empty array to clear.",annotations:{title:"Set Member Tags",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:UJ.object({memberId:UJ.string().describe("Member ID"),tagIds:UJ.array(UJ.string()).describe("Array of tag IDs to assign")}),outputSchema:UJ.object({success:UJ.boolean(),tags:UJ.array(UJ.object({id:UJ.string(),organizationId:UJ.string(),name:UJ.string(),createdAt:UJ.string().describe("ISO 8601 timestamp")}))}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=t(Z);if(!await Z.storage.tags.verifyMemberOrg($.memberId,X.id))throw Error(`Member not found in this organization: ${$.memberId}`);for(let G of $.tagIds){let J=await Z.storage.tags.getTag(G);if(!J)throw Error(`Tag not found: ${G}`);if(J.organizationId!==X.id)throw Error(`Tag does not belong to this organization: ${G}`)}return await Z.storage.tags.setMemberTags($.memberId,$.tagIds),{success:!0,tags:(await Z.storage.tags.getMemberTags($.memberId)).map((G)=>({...G,createdAt:G.createdAt instanceof Date?G.createdAt.toISOString():String(G.createdAt)}))}}})});var SO$=D(()=>{IO$();qO$();MO$();kO$();VO$()});import{z as CO$}from"zod";function vP4($,Z){let X=$?.[Z];if(!X)return;return Object.entries(X).filter(([,Y])=>(O7 in Y)).sort(([,Y],[,G])=>(G[O7]?.createdAt??0)-(Y[O7]?.createdAt??0))[0]?.[0]}var CP4,_P4,Ya0;var _O$=D(()=>{C4();M0();KC();qy();W7();mQ();CP4=CO$.object({data:g3$.describe("Data for the new thread (id is auto-generated if not provided)")}),_P4=CO$.object({item:MW.describe("The created thread entity")});Ya0=u({name:"COLLECTION_THREADS_CREATE",description:"Create a new thread for organizing messages and conversations.",annotations:{title:"Create Thread",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:CP4,outputSchema:_P4,handler:async($,Z)=>{r(Z);let X=t(Z);await Z.access.check();let Q=o0(Z);if(!Q)throw Error("User ID required to create thread");let{data:Y}=$,G=Y.id??F8("thrd"),K=(await FD0(Z.storage.virtualMcps,Y.virtual_mcp_id,X.id)).metadata,W=K?.githubRepo,F=null;if(W)F=Y.branch??vP4(K?.sandboxMap,Q)??mZ0(dZ0(Z.auth.user));let H=await Z.storage.threads.create({id:G,organization_id:X.id,title:Y.title,description:Y.description,virtual_mcp_id:Y.virtual_mcp_id,branch:F,created_by:Q,metadata:{runtime:Y.runtime??RB0(K)}});if(H.isNew)x1.capture({distinctId:Q,event:"chat_started",groups:{organization:X.id},properties:{organization_id:X.id,thread_id:G,has_title:!!$.data.title,created_via:"tool"}});return{item:YJ(H)}}})});import{z as Ga0}from"zod";var fP4,bP4,Ja0;var vO$=D(()=>{C4();M0();KC();qy();fP4=Ga0.object({id:Ga0.string().describe("ID of the thread to update"),data:h3$.describe("Partial thread data to update")}),bP4=Ga0.object({item:MW.describe("The updated thread entity")}),Ja0=u({name:"COLLECTION_THREADS_UPDATE",description:"Update a thread's title, description, or visibility.",annotations:{title:"Update Thread",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:fP4,outputSchema:bP4,handler:async($,Z)=>{r(Z);let X=t(Z);await Z.access.check();let Q=o0(Z);if(!Q)throw Error("User ID required to update thread");let{id:Y,data:G}=$,J=await Z.storage.threads.get(Y);if(!J)throw Error("Thread not found in organization");if(G.virtual_mcp_id!==void 0)await FD0(Z.storage.virtualMcps,G.virtual_mcp_id,X.id);if(G.branch===null&&J.virtual_mcp_id){if((await Z.storage.virtualMcps.findById(J.virtual_mcp_id,X.id))?.metadata?.githubRepo)throw Error("Cannot set branch=null on a github-linked thread (vMCP has githubRepo)")}let K={title:G.title,description:G.description,hidden:G.hidden,updated_by:Q};if(G.status)K.status=G.status;if(G.metadata!==void 0){let F=lx(G.metadata)??{},H=sS(J.metadata?.runtime),N=sS(F.runtime);if(H&&N&&N!==H)throw Error(`Cannot change a thread's runtime (${H} \u2192 ${N}); it is stamped once at creation. Start a new chat instead.`);let U=J.metadata?.sandboxMap;K.metadata={...F,...H?{runtime:H}:{},...U!==void 0?{sandboxMap:U}:{}}}if(G.branch!==void 0)K.branch=G.branch;if(G.virtual_mcp_id!==void 0)K.virtual_mcp_id=G.virtual_mcp_id;let W=await Z.storage.threads.update(Y,K);if(G.hidden!==void 0&&G.hidden!==J.hidden)x1.capture({distinctId:Q,event:G.hidden?"chat_archived":"chat_unarchived",groups:{organization:X.id},properties:{organization_id:X.id,thread_id:Y}});return{item:YJ(W)}}})});var Ka0;var fO$=D(()=>{lG();KC();C4();M0();tH();_L0();Qg();Ka0=u({name:"COLLECTION_THREADS_DELETE",description:"Permanently delete a thread and all its messages.",annotations:{title:"Delete Thread",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:si,outputSchema:ei(MW),handler:async($,Z)=>{r(Z);let X=t(Z);await Z.access.check();let Q=await Z.storage.threads.get($.id);if(!Q)throw Error(`Thread not found: ${$.id}`);if(Q.status==="in_progress"){let G=(K)=>(W)=>console.error("[thread] delete-time run cancel step failed",{threadId:$.id,step:K,err:W});await Xg($.id).catch(G("background-jobs")),await Fg($.id).catch(G("gate-head"));let J=await Z.storage.threads.getRunFence($.id).catch(()=>null);if(J)await _C($.id,J).catch(G("hosted-harness"));SL0($.id)}await Z.storage.threads.delete($.id);let Y=o0(Z);if(Y)x1.capture({distinctId:Y,event:"chat_deleted",groups:{organization:X.id},properties:{organization_id:X.id,thread_id:$.id}});return{item:YJ(Q)}}})});var bO$=D(()=>{_O$();tn0();on0();vO$();fO$();rn0()});function yP4($){return{type:"doc",content:[{type:"paragraph",content:[{type:"text",text:$}]}]}}function gP4($){return $.map((Z)=>{let X=Z.metadata;if(X?.tiptapDoc)return Z;let Q=Z.parts.find((Y)=>Y.type==="text"&&typeof Y.text==="string");if(!Q?.text||typeof Q.text!=="string")return Z;return{...Z,metadata:{...X,tiptapDoc:yP4(Q.text)}}})}function xL0($){let Z;if(typeof $==="string")try{let X=JSON.parse($);if(Array.isArray(X)&&X.length>0&&X[0]?.role&&Array.isArray(X[0]?.parts))Z=X;else Z=[{role:"user",parts:[{type:"text",text:$}]}]}catch{Z=[{role:"user",parts:[{type:"text",text:$}]}]}else Z=$;return gP4(Z)}import{z as p6}from"zod";var Wa0;var xO$=D(()=>{C4();M0();t7();Wa0=u({name:"AUTOMATION_CREATE",description:"Create an automation that runs an agent thread on trigger fire. Requires virtual_mcp_id + messages.",annotations:{title:"Create Automation",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!1},inputSchema:p6.object({name:p6.string().min(1).max(255),virtual_mcp_id:p6.string(),messages:p6.union([p6.string(),p6.array(p6.looseObject({id:p6.string().optional(),role:p6.enum(["user","assistant","system"]),parts:p6.array(p6.record(p6.string(),p6.unknown())),metadata:p6.unknown().optional()}))]),models:p6.object({tier:RO,modelId:p6.string().optional(),credentialId:p6.string().optional()}).loose().default({tier:"smart"}),tools:p6.array(p6.string()).nullable().optional(),maxAgentSteps:p6.number().int().min(1).max(100).nullable().optional(),temperature:p6.number().default(0.5),active:p6.boolean().default(!0)}),outputSchema:p6.object({id:p6.string(),name:p6.string(),active:p6.boolean(),created_at:p6.string()}),handler:async($,Z)=>{r(Z);let X=t(Z);await Z.access.check();let Q=o0(Z);if(!Q)throw Error("Unable to determine user identity");let Y=xL0($.messages),G=await Z.storage.automations.create({organization_id:X.id,created_by:Q,name:$.name,messages:JSON.stringify(Y),models:JSON.stringify($.models),tools:$.tools===void 0||$.tools===null?null:JSON.stringify($.tools),max_agent_steps:$.maxAgentSteps??null,temperature:$.temperature,active:$.active,virtual_mcp_id:$.virtual_mcp_id});return x1.capture({distinctId:Q,event:"automation_created",groups:{organization:X.id},properties:{organization_id:X.id,automation_id:G.id,virtual_mcp_id:$.virtual_mcp_id,active:G.active,tier:$.models.tier}}),{id:G.id,name:G.name,active:G.active,created_at:G.created_at}}})});import{z as f6}from"zod";var Fa0;var yO$=D(()=>{M0();Fa0=u({name:"AUTOMATION_GET",description:"Get an automation's full configuration and triggers by ID.",annotations:{title:"Get Automation",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:f6.object({id:f6.string()}),outputSchema:f6.object({automation:f6.object({id:f6.string(),name:f6.string(),active:f6.boolean(),created_by:f6.string(),created_at:f6.string(),updated_at:f6.string(),virtual_mcp_id:f6.string(),messages:f6.unknown(),models:f6.unknown(),tools:f6.array(f6.string()).nullable(),maxAgentSteps:f6.number().nullable(),temperature:f6.number(),triggers:f6.array(f6.object({id:f6.string(),type:f6.enum(["cron","event","webhook"]),cron_expression:f6.string().nullable(),connection_id:f6.string().nullable(),event_type:f6.string().nullable(),params:f6.unknown().nullable(),last_run_at:f6.string().nullable(),api_key_id:f6.string().nullable(),created_at:f6.string()}))}).nullable()}),handler:async($,Z)=>{r(Z);let X=t(Z);await Z.access.check();let Q=await Z.storage.automations.findById($.id,X.id);if(!Q)return{automation:null};let Y=await Z.storage.automations.listTriggers(Q.id);return{automation:{id:Q.id,name:Q.name,active:Q.active,created_by:Q.created_by,created_at:Q.created_at,updated_at:Q.updated_at,virtual_mcp_id:Q.virtual_mcp_id,messages:JSON.parse(Q.messages),models:JSON.parse(Q.models),tools:Q.tools?JSON.parse(Q.tools):null,maxAgentSteps:Q.max_agent_steps,temperature:Q.temperature,triggers:Y.map((G)=>({id:G.id,type:G.type,cron_expression:G.cron_expression,connection_id:G.connection_id,event_type:G.event_type,params:G.params?JSON.parse(G.params):null,last_run_at:G.last_run_at,api_key_id:G.api_key_id,created_at:G.created_at}))}}}})});import{z as eY}from"zod";var Ha0;var gO$=D(()=>{M0();Ha0=u({name:"AUTOMATION_LIST",description:"List automations with their status, triggers, and configuration.",annotations:{title:"List Automations",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:eY.object({virtual_mcp_id:eY.string().optional().nullable()}),outputSchema:eY.object({automations:eY.array(eY.object({id:eY.string(),name:eY.string(),active:eY.boolean(),created_by:eY.string(),created_at:eY.string(),trigger_count:eY.number(),nearest_next_run_at:eY.string().nullable(),virtual_mcp_id:eY.string()}))}),handler:async($,Z)=>{r(Z);let X=t(Z);return await Z.access.check(),{automations:(await Z.storage.automations.listWithTriggerCounts(X.id,$.virtual_mcp_id)).map((G)=>({id:G.id,name:G.name,active:G.active,created_by:G.created_by,created_at:G.created_at,trigger_count:G.trigger_count,nearest_next_run_at:G.nearest_next_run_at,virtual_mcp_id:G.virtual_mcp_id}))}}})});function uP4($){if(!$)return null;try{let Z=JSON.parse($);if(Array.isArray(Z)&&Z.every((X)=>typeof X==="string"))return Z.length>0?Z:null}catch{}return null}function hO$($){return`${$}:context`}function uO$($,Z,X,Q,Y){let J=JSON.parse($.messages).map((F,H)=>({...F,id:`${X}:${H}`})),K=Z?{...Y,[fB0]:hP4}:Y;return{messages:J,models:{credentialId:Q.credentialId,thinking:Q.thinking,...Q.image?{image:Q.image}:{},...Q.webSearch?{webSearch:Q.webSearch}:{},...Q.deepResearch?{deepResearch:Q.deepResearch}:{}},agent:{id:$.virtual_mcp_id},toolAllowlist:uP4($.tools),maxAgentSteps:$.max_agent_steps??void 0,temperature:$.temperature??0.5,toolApprovalLevel:"auto",mode:"default",organizationId:$.organization_id,userId:$.created_by,harnessId:"decopilot",triggerId:Z??void 0,...K?{runMetadata:K}:{},taskId:X}}var hP4="new_task";var cO$=D(()=>{zn()});function UX($,Z,X,Q,Y,G,J,K){return UX.fromTZ(UX.tp($,Z,X,Q,Y,G,J),K)}function Na0($,Z=new Date){let X=Z.toLocaleString("en-US",{timeZone:$,timeZoneName:"shortOffset"}).split(" ").slice(-1)[0],Q=Z.toLocaleString("en-US").replace(/[\u202f]/," ");return Date.parse(`${Q} GMT`)-Date.parse(`${Q} ${X}`)}function cP4($,Z){let X=new Date(Date.parse($));if(isNaN(X))throw Error("minitz: Invalid ISO8601 passed to parser.");let Q=$.substring(9);return $.includes("Z")||Q.includes("-")||Q.includes("+")?UX.tp(X.getUTCFullYear(),X.getUTCMonth()+1,X.getUTCDate(),X.getUTCHours(),X.getUTCMinutes(),X.getUTCSeconds(),"Etc/UTC"):UX.tp(X.getFullYear(),X.getMonth()+1,X.getDate(),X.getHours(),X.getMinutes(),X.getSeconds(),Z)}function lP4($){if($===void 0&&($={}),delete $.name,$.legacyMode=$.legacyMode===void 0?!0:$.legacyMode,$.paused=$.paused===void 0?!1:$.paused,$.maxRuns=$.maxRuns===void 0?1/0:$.maxRuns,$.catch=$.catch===void 0?!1:$.catch,$.interval=$.interval===void 0?0:parseInt($.interval.toString(),10),$.utcOffset=$.utcOffset===void 0?void 0:parseInt($.utcOffset.toString(),10),$.unref=$.unref===void 0?!1:$.unref,$.startAt&&($.startAt=new OJ($.startAt,$.timezone)),$.stopAt&&($.stopAt=new OJ($.stopAt,$.timezone)),$.interval!==null){if(isNaN($.interval))throw Error("CronOptions: Supplied value for interval is not a number");if($.interval<0)throw Error("CronOptions: Supplied value for interval can not be negative")}if($.utcOffset!==void 0){if(isNaN($.utcOffset))throw Error("CronOptions: Invalid value passed for utcOffset, should be number representing minutes offset from UTC.");if($.utcOffset<-870||$.utcOffset>870)throw Error("CronOptions: utcOffset out of bounds.");if($.utcOffset!==void 0&&$.timezone)throw Error("CronOptions: Combining 'utcOffset' with 'timezone' is not allowed.")}if($.unref!==!0&&$.unref!==!1)throw Error("CronOptions: Unref should be either true, false or undefined(false).");return $}function Pt($){return Object.prototype.toString.call($)==="[object Function]"||typeof $=="function"||$ instanceof Function}function dP4($){return Pt($)}function mP4($){typeof Deno<"u"&&typeof Deno.unrefTimer<"u"?Deno.unrefTimer($):$&&typeof $.unref<"u"&&$.unref()}var Ua0=32,At,iO$,lO$=class{pattern;timezone;second;minute;hour;day;month;dayOfWeek;lastDayOfMonth;starDOM;starDOW;constructor($,Z){this.pattern=$,this.timezone=Z,this.second=Array(60).fill(0),this.minute=Array(60).fill(0),this.hour=Array(24).fill(0),this.day=Array(31).fill(0),this.month=Array(12).fill(0),this.dayOfWeek=Array(7).fill(0),this.lastDayOfMonth=!1,this.starDOM=!1,this.starDOW=!1,this.parse()}parse(){if(!(typeof this.pattern=="string"||this.pattern instanceof String))throw TypeError("CronPattern: Pattern has to be of type string.");this.pattern.indexOf("@")>=0&&(this.pattern=this.handleNicknames(this.pattern).trim());let $=this.pattern.replace(/\s+/g," ").split(" ");if($.length<5||$.length>6)throw TypeError("CronPattern: invalid configuration format ('"+this.pattern+"'), exactly five or six space separated parts are required.");if($.length===5&&$.unshift("0"),$[3].indexOf("L")>=0&&($[3]=$[3].replace("L",""),this.lastDayOfMonth=!0),$[3]=="*"&&(this.starDOM=!0),$[4].length>=3&&($[4]=this.replaceAlphaMonths($[4])),$[5].length>=3&&($[5]=this.replaceAlphaDays($[5])),$[5]=="*"&&(this.starDOW=!0),this.pattern.indexOf("?")>=0){let Z=new OJ(new Date,this.timezone).getDate(!0);$[0]=$[0].replace("?",Z.getSeconds().toString()),$[1]=$[1].replace("?",Z.getMinutes().toString()),$[2]=$[2].replace("?",Z.getHours().toString()),this.starDOM||($[3]=$[3].replace("?",Z.getDate().toString())),$[4]=$[4].replace("?",(Z.getMonth()+1).toString()),this.starDOW||($[5]=$[5].replace("?",Z.getDay().toString()))}this.throwAtIllegalCharacters($),this.partToArray("second",$[0],0,1),this.partToArray("minute",$[1],0,1),this.partToArray("hour",$[2],0,1),this.partToArray("day",$[3],-1,1),this.partToArray("month",$[4],-1,1),this.partToArray("dayOfWeek",$[5],0,At),this.dayOfWeek[7]&&(this.dayOfWeek[0]=this.dayOfWeek[7])}partToArray($,Z,X,Q){let Y=this[$],G=$==="day"&&this.lastDayOfMonth;if(Z===""&&!G)throw TypeError("CronPattern: configuration entry "+$+" ("+Z+") is empty, check for trailing spaces.");if(Z==="*")return Y.fill(Q);let J=Z.split(",");if(J.length>1)for(let K=0;K<J.length;K++)this.partToArray($,J[K],X,Q);else Z.indexOf("-")!==-1&&Z.indexOf("/")!==-1?this.handleRangeWithStepping(Z,$,X,Q):Z.indexOf("-")!==-1?this.handleRange(Z,$,X,Q):Z.indexOf("/")!==-1?this.handleStepping(Z,$,X,Q):Z!==""&&this.handleNumber(Z,$,X,Q)}throwAtIllegalCharacters($){for(let Z=0;Z<$.length;Z++)if((Z===5?/[^/*0-9,\-#L]+/:/[^/*0-9,-]+/).test($[Z]))throw TypeError("CronPattern: configuration entry "+Z+" ("+$[Z]+") contains illegal characters.")}handleNumber($,Z,X,Q){let Y=this.extractNth($,Z),G=parseInt(Y[0],10)+X;if(isNaN(G))throw TypeError("CronPattern: "+Z+" is not a number: '"+$+"'");this.setPart(Z,G,Y[1]||Q)}setPart($,Z,X){if(!Object.prototype.hasOwnProperty.call(this,$))throw TypeError("CronPattern: Invalid part specified: "+$);if($==="dayOfWeek"){if(Z===7&&(Z=0),Z<0||Z>6)throw RangeError("CronPattern: Invalid value for dayOfWeek: "+Z);this.setNthWeekdayOfMonth(Z,X);return}if($==="second"||$==="minute"){if(Z<0||Z>=60)throw RangeError("CronPattern: Invalid value for "+$+": "+Z)}else if($==="hour"){if(Z<0||Z>=24)throw RangeError("CronPattern: Invalid value for "+$+": "+Z)}else if($==="day"){if(Z<0||Z>=31)throw RangeError("CronPattern: Invalid value for "+$+": "+Z)}else if($==="month"&&(Z<0||Z>=12))throw RangeError("CronPattern: Invalid value for "+$+": "+Z);this[$][Z]=X}handleRangeWithStepping($,Z,X,Q){let Y=this.extractNth($,Z),G=Y[0].match(/^(\d+)-(\d+)\/(\d+)$/);if(G===null)throw TypeError("CronPattern: Syntax error, illegal range with stepping: '"+$+"'");let[,J,K,W]=G,F=parseInt(J,10)+X,H=parseInt(K,10)+X,N=parseInt(W,10);if(isNaN(F))throw TypeError("CronPattern: Syntax error, illegal lower range (NaN)");if(isNaN(H))throw TypeError("CronPattern: Syntax error, illegal upper range (NaN)");if(isNaN(N))throw TypeError("CronPattern: Syntax error, illegal stepping: (NaN)");if(N===0)throw TypeError("CronPattern: Syntax error, illegal stepping: 0");if(N>this[Z].length)throw TypeError("CronPattern: Syntax error, steps cannot be greater than maximum value of part ("+this[Z].length+")");if(F>H)throw TypeError("CronPattern: From value is larger than to value: '"+$+"'");for(let U=F;U<=H;U+=N)this.setPart(Z,U,Y[1]||Q)}extractNth($,Z){let X=$,Q;if(X.includes("#")){if(Z!=="dayOfWeek")throw Error("CronPattern: nth (#) only allowed in day-of-week field");Q=X.split("#")[1],X=X.split("#")[0]}return[X,Q]}handleRange($,Z,X,Q){let Y=this.extractNth($,Z),G=Y[0].split("-");if(G.length!==2)throw TypeError("CronPattern: Syntax error, illegal range: '"+$+"'");let J=parseInt(G[0],10)+X,K=parseInt(G[1],10)+X;if(isNaN(J))throw TypeError("CronPattern: Syntax error, illegal lower range (NaN)");if(isNaN(K))throw TypeError("CronPattern: Syntax error, illegal upper range (NaN)");if(J>K)throw TypeError("CronPattern: From value is larger than to value: '"+$+"'");for(let W=J;W<=K;W++)this.setPart(Z,W,Y[1]||Q)}handleStepping($,Z,X,Q){let Y=this.extractNth($,Z),G=Y[0].split("/");if(G.length!==2)throw TypeError("CronPattern: Syntax error, illegal stepping: '"+$+"'");G[0]===""&&(G[0]="*");let J=0;G[0]!=="*"&&(J=parseInt(G[0],10)+X);let K=parseInt(G[1],10);if(isNaN(K))throw TypeError("CronPattern: Syntax error, illegal stepping: (NaN)");if(K===0)throw TypeError("CronPattern: Syntax error, illegal stepping: 0");if(K>this[Z].length)throw TypeError("CronPattern: Syntax error, max steps for part is ("+this[Z].length+")");for(let W=J;W<this[Z].length;W+=K)this.setPart(Z,W,Y[1]||Q)}replaceAlphaDays($){return $.replace(/-sun/gi,"-7").replace(/sun/gi,"0").replace(/mon/gi,"1").replace(/tue/gi,"2").replace(/wed/gi,"3").replace(/thu/gi,"4").replace(/fri/gi,"5").replace(/sat/gi,"6")}replaceAlphaMonths($){return $.replace(/jan/gi,"1").replace(/feb/gi,"2").replace(/mar/gi,"3").replace(/apr/gi,"4").replace(/may/gi,"5").replace(/jun/gi,"6").replace(/jul/gi,"7").replace(/aug/gi,"8").replace(/sep/gi,"9").replace(/oct/gi,"10").replace(/nov/gi,"11").replace(/dec/gi,"12")}handleNicknames($){let Z=$.trim().toLowerCase();return Z==="@yearly"||Z==="@annually"?"0 0 1 1 *":Z==="@monthly"?"0 0 1 * *":Z==="@weekly"?"0 0 * * 0":Z==="@daily"?"0 0 * * *":Z==="@hourly"?"0 * * * *":$}setNthWeekdayOfMonth($,Z){if(typeof Z!="number"&&Z==="L")this.dayOfWeek[$]=this.dayOfWeek[$]|Ua0;else if(Z===At)this.dayOfWeek[$]=At;else if(Z<6&&Z>0)this.dayOfWeek[$]=this.dayOfWeek[$]|iO$[Z-1];else throw TypeError(`CronPattern: nth weekday out of range, should be 1-5 or L. Value: ${Z}, Type: ${typeof Z}`)}},dO$,$N,OJ=class ${tz;ms;second;minute;hour;day;month;year;constructor(Z,X){if(this.tz=X,Z&&Z instanceof Date)if(!isNaN(Z))this.fromDate(Z);else throw TypeError("CronDate: Invalid date passed to CronDate constructor");else if(Z===void 0)this.fromDate(new Date);else if(Z&&typeof Z=="string")this.fromString(Z);else if(Z instanceof $)this.fromCronDate(Z);else throw TypeError("CronDate: Invalid type ("+typeof Z+") passed to CronDate constructor")}isNthWeekdayOfMonth(Z,X,Q,Y){let G=new Date(Date.UTC(Z,X,Q)).getUTCDay(),J=0;for(let K=1;K<=Q;K++)new Date(Date.UTC(Z,X,K)).getUTCDay()===G&&J++;if(Y&At&&iO$[J-1]&Y)return!0;if(Y&Ua0){let K=new Date(Date.UTC(Z,X+1,0)).getUTCDate();for(let W=Q+1;W<=K;W++)if(new Date(Date.UTC(Z,X,W)).getUTCDay()===G)return!1;return!0}return!1}fromDate(Z){if(this.tz!==void 0)if(typeof this.tz=="number")this.ms=Z.getUTCMilliseconds(),this.second=Z.getUTCSeconds(),this.minute=Z.getUTCMinutes()+this.tz,this.hour=Z.getUTCHours(),this.day=Z.getUTCDate(),this.month=Z.getUTCMonth(),this.year=Z.getUTCFullYear(),this.apply();else{let X=UX.toTZ(Z,this.tz);this.ms=Z.getMilliseconds(),this.second=X.s,this.minute=X.i,this.hour=X.h,this.day=X.d,this.month=X.m-1,this.year=X.y}else this.ms=Z.getMilliseconds(),this.second=Z.getSeconds(),this.minute=Z.getMinutes(),this.hour=Z.getHours(),this.day=Z.getDate(),this.month=Z.getMonth(),this.year=Z.getFullYear()}fromCronDate(Z){this.tz=Z.tz,this.year=Z.year,this.month=Z.month,this.day=Z.day,this.hour=Z.hour,this.minute=Z.minute,this.second=Z.second,this.ms=Z.ms}apply(){if(this.month>11||this.day>dO$[this.month]||this.hour>59||this.minute>59||this.second>59||this.hour<0||this.minute<0||this.second<0){let Z=new Date(Date.UTC(this.year,this.month,this.day,this.hour,this.minute,this.second,this.ms));return this.ms=Z.getUTCMilliseconds(),this.second=Z.getUTCSeconds(),this.minute=Z.getUTCMinutes(),this.hour=Z.getUTCHours(),this.day=Z.getUTCDate(),this.month=Z.getUTCMonth(),this.year=Z.getUTCFullYear(),!0}else return!1}fromString(Z){if(typeof this.tz=="number"){let X=UX.fromTZISO(Z);this.ms=X.getUTCMilliseconds(),this.second=X.getUTCSeconds(),this.minute=X.getUTCMinutes(),this.hour=X.getUTCHours(),this.day=X.getUTCDate(),this.month=X.getUTCMonth(),this.year=X.getUTCFullYear(),this.apply()}else return this.fromDate(UX.fromTZISO(Z,this.tz))}findNext(Z,X,Q,Y){let G=this[X],J;Q.lastDayOfMonth&&(this.month!==1?J=dO$[this.month]:J=new Date(Date.UTC(this.year,this.month+1,0,0,0,0,0)).getUTCDate());let K=!Q.starDOW&&X=="day"?new Date(Date.UTC(this.year,this.month,1,0,0,0,0)).getUTCDay():void 0;for(let W=this[X]+Y;W<Q[X].length;W++){let F=Q[X][W];if(X==="day"&&Q.lastDayOfMonth&&W-Y==J&&(F=1),X==="day"&&!Q.starDOW){let H=Q.dayOfWeek[(K+(W-Y-1))%7];if(H&&H&At)H=this.isNthWeekdayOfMonth(this.year,this.month,W-Y,H)?1:0;else if(H)throw Error(`CronDate: Invalid value for dayOfWeek encountered. ${H}`);Z.legacyMode&&!Q.starDOM?F=F||H:F=F&&H}if(F)return this[X]=W-Y,G!==this[X]?2:1}return 3}recurse(Z,X,Q){let Y=this.findNext(X,$N[Q][0],Z,$N[Q][2]);if(Y>1){let G=Q+1;for(;G<$N.length;)this[$N[G][0]]=-$N[G][2],G++;if(Y===3)return this[$N[Q][1]]++,this[$N[Q][0]]=-$N[Q][2],this.apply(),this.recurse(Z,X,0);if(this.apply())return this.recurse(Z,X,Q-1)}return Q+=1,Q>=$N.length?this:this.year>=3000?null:this.recurse(Z,X,Q)}increment(Z,X,Q){return this.second+=X.interval!==void 0&&X.interval>1&&Q?X.interval:1,this.ms=0,this.apply(),this.recurse(Z,X,0)}getDate(Z){return Z||this.tz===void 0?new Date(this.year,this.month,this.day,this.hour,this.minute,this.second,this.ms):typeof this.tz=="number"?new Date(Date.UTC(this.year,this.month,this.day,this.hour,this.minute-this.tz,this.second,this.ms)):UX.fromTZ(UX.tp(this.year,this.month+1,this.day,this.hour,this.minute,this.second,this.tz),!1)}getTime(){return this.getDate(!1).getTime()}},mO$=30000,yL0,gL0=class{name;options;_states;fn;constructor($,Z,X){let Q,Y;if(Pt(Z))Y=Z;else if(typeof Z=="object")Q=Z;else if(Z!==void 0)throw Error("Cron: Invalid argument passed for optionsIn. Should be one of function, or object (options).");if(Pt(X))Y=X;else if(typeof X=="object")Q=X;else if(X!==void 0)throw Error("Cron: Invalid argument passed for funcIn. Should be one of function, or object (options).");if(this.name=Q?.name,this.options=lP4(Q),this._states={kill:!1,blocking:!1,previousRun:void 0,currentRun:void 0,once:void 0,currentTimeout:void 0,maxRuns:Q?Q.maxRuns:void 0,paused:Q?Q.paused:!1,pattern:new lO$("* * * * *")},$&&($ instanceof Date||typeof $=="string"&&$.indexOf(":")>0)?this._states.once=new OJ($,this.options.timezone||this.options.utcOffset):this._states.pattern=new lO$($,this.options.timezone),this.name){if(yL0.find((G)=>G.name===this.name))throw Error("Cron: Tried to initialize new named job '"+this.name+"', but name already taken.");yL0.push(this)}return Y!==void 0&&dP4(Y)&&(this.fn=Y,this.schedule()),this}nextRun($){let Z=this._next($);return Z?Z.getDate(!1):null}nextRuns($,Z){this._states.maxRuns!==void 0&&$>this._states.maxRuns&&($=this._states.maxRuns);let X=[],Q=Z||this._states.currentRun||void 0;for(;$--&&(Q=this.nextRun(Q));)X.push(Q);return X}getPattern(){return this._states.pattern?this._states.pattern.pattern:void 0}isRunning(){let $=this.nextRun(this._states.currentRun),Z=!this._states.paused,X=this.fn!==void 0,Q=!this._states.kill;return Z&&X&&Q&&$!==null}isStopped(){return this._states.kill}isBusy(){return this._states.blocking}currentRun(){return this._states.currentRun?this._states.currentRun.getDate():null}previousRun(){return this._states.previousRun?this._states.previousRun.getDate():null}msToNext($){let Z=this._next($);return Z?$ instanceof OJ||$ instanceof Date?Z.getTime()-$.getTime():Z.getTime()-new OJ($).getTime():null}stop(){this._states.kill=!0,this._states.currentTimeout&&clearTimeout(this._states.currentTimeout);let $=yL0.indexOf(this);$>=0&&yL0.splice($,1)}pause(){return this._states.paused=!0,!this._states.kill}resume(){return this._states.paused=!1,!this._states.kill}schedule($){if($&&this.fn)throw Error("Cron: It is not allowed to schedule two functions using the same Croner instance.");$&&(this.fn=$);let Z=this.msToNext(),X=this.nextRun(this._states.currentRun);return Z==null||isNaN(Z)||X===null?this:(Z>mO$&&(Z=mO$),this._states.currentTimeout=setTimeout(()=>this._checkTrigger(X),Z),this._states.currentTimeout&&this.options.unref&&mP4(this._states.currentTimeout),this)}async _trigger($){if(this._states.blocking=!0,this._states.currentRun=new OJ(void 0,this.options.timezone||this.options.utcOffset),this.options.catch)try{this.fn!==void 0&&await this.fn(this,this.options.context)}catch(Z){Pt(this.options.catch)&&this.options.catch(Z,this)}else this.fn!==void 0&&await this.fn(this,this.options.context);this._states.previousRun=new OJ($,this.options.timezone||this.options.utcOffset),this._states.blocking=!1}async trigger(){await this._trigger()}runsLeft(){return this._states.maxRuns}_checkTrigger($){let Z=new Date,X=!this._states.paused&&Z.getTime()>=$.getTime(),Q=this._states.blocking&&this.options.protect;X&&!Q?(this._states.maxRuns!==void 0&&this._states.maxRuns--,this._trigger()):X&&Q&&Pt(this.options.protect)&&setTimeout(()=>this.options.protect(this),0),this.schedule()}_next($){let Z=!!($||this._states.currentRun),X=!1;!$&&this.options.startAt&&this.options.interval&&([$,Z]=this._calculatePreviousRun($,Z),X=!$),$=new OJ($,this.options.timezone||this.options.utcOffset),this.options.startAt&&$&&$.getTime()<this.options.startAt.getTime()&&($=this.options.startAt);let Q=this._states.once||new OJ($,this.options.timezone||this.options.utcOffset);return!X&&Q!==this._states.once&&(Q=Q.increment(this._states.pattern,this.options,Z)),this._states.once&&this._states.once.getTime()<=$.getTime()||Q===null||this._states.maxRuns!==void 0&&this._states.maxRuns<=0||this._states.kill||this.options.stopAt&&Q.getTime()>=this.options.stopAt.getTime()?null:Q}_calculatePreviousRun($,Z){let X=new OJ(void 0,this.options.timezone||this.options.utcOffset),Q=$;if(this.options.startAt.getTime()<=X.getTime()){Q=this.options.startAt;let Y=Q.getTime()+this.options.interval*1000;for(;Y<=X.getTime();)Q=new OJ(Q,this.options.timezone||this.options.utcOffset).increment(this._states.pattern,this.options,!0),Y=Q.getTime()+this.options.interval*1000;Z=!0}return Q===null&&(Q=void 0),[Q,Z]}};var Oa0=D(()=>{UX.fromTZISO=($,Z,X)=>UX.fromTZ(cP4($,Z),X);UX.fromTZ=function($,Z){let X=new Date(Date.UTC($.y,$.m-1,$.d,$.h,$.i,$.s)),Q=Na0($.tz,X),Y=new Date(X.getTime()-Q),G=Na0($.tz,Y);if(G-Q===0)return Y;{let J=new Date(X.getTime()-G),K=Na0($.tz,J);if(K-G===0)return J;if(!Z&&K-G>0)return J;if(Z)throw Error("Invalid date passed to fromTZ()");return Y}};UX.toTZ=function($,Z){let X=$.toLocaleString("en-US",{timeZone:Z}).replace(/[\u202f]/," "),Q=new Date(X);return{y:Q.getFullYear(),m:Q.getMonth()+1,d:Q.getDate(),h:Q.getHours(),i:Q.getMinutes(),s:Q.getSeconds(),tz:Z}};UX.tp=($,Z,X,Q,Y,G,J)=>({y:$,m:Z,d:X,h:Q,i:Y,s:G,tz:J});UX.minitz=UX;At=31|Ua0,iO$=[1,2,4,8,16],dO$=[31,28,31,30,31,30,31,31,30,31,30,31],$N=[["month","year",0],["day","month",-1],["hour","day",0],["minute","hour",0],["second","minute",0]];yL0=[]});function hL0($,Z){try{return new gL0($,{timezone:"UTC"}).nextRun(Z)??null}catch{return null}}var Ba0=D(()=>{Oa0()});import{DBOS as w7,SchedulerMode as iP4}from"@dbos-inc/dbos-sdk";async function ja0($){try{let{rows:Z}=await $.query(`SELECT q.name FROM dbos.queues q
1506
1506
  WHERE q.name LIKE $1
1507
1507
  AND NOT EXISTS (
1508
1508
  SELECT 1 FROM dbos.workflow_status w
@@ -2863,7 +2863,7 @@ Respond with the structured verdict and a short reason.`,Nu$;var Ou$=D(()=>{B4()
2863
2863
  ${G.join(`
2864
2864
  `)}`:Y}function pW6($){let Z=new Set;for(let X of $)for(let Q of X.split(`
2865
2865
  `)){let Y=Q.trim();if(/^Co-authored-by:\s/i.test(Y))Z.add(Y)}return[...Z]}var au$=200,yW6=12,hW6,cW6=300,_Z1=3;var vZ1=D(()=>{i_();fA0();hW6={aheadBy:0,behindBy:0,files:[]}});function tW6($){if(!$||$.includes(".."))return!1;return nW6.test($)}function eu$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!tW6(Z))return null;let{__resolveType:X,...Q}=$;return{resolveType:Z,payload:Q}}function $c$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var nW6;var Zc$=D(()=>{nW6=/^[\w./@-]+$/});function na($,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 Xc$($,Z,X,Q){if(!Q.connectionId)throw new n_("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let Y=$.organization?.id;if(!Y)throw new n_(Y9);await WB({ctx:$,connectionId:Q.connectionId,organizationId:Y,forceRefresh:!0,onLegacyMintError:(H)=>{let N=H instanceof Error?H.message:Y9;throw new n_(N)}});let{cloneUrl:G,gitUserName:J,gitUserEmail:K}=await FB(Q.connectionId,Q.owner,Q.name,$.db,$.vault).catch((H)=>{let{code:N,message:U}=M6$(H instanceof Error?H.message:String(H));throw N?new n_(U):H}),W=Au($),F=await Z.proxyDaemonRequest(X,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{repository:{cloneUrl:G},identity:{userName:J,userEmail:K}},...W?{operator:W}:{}})});if(!F.ok){let H=await KB(F,oW6).catch(()=>F.statusText);throw Error(`Failed to refresh sandbox git credentials (${F.status}): ${H}`)}}var oW6=10485760,n_;var fZ1=D(()=>{aG();AA0();up();hm0();Wy();n_=class n_ extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function aW6($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!rW6.test(Z))throw Error(`Invalid branch name: ${$}`)}function t_($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(eW6)])}async function ZF6($,Z){let X=$.var.studioContext,Q=_3(Z.branch),Y=$.req.query("thread")??Q,G=Y&&Y===Q?Z.branchThread:Y?await X.storage.threads.get(Y).catch(()=>null):null,J=G?.virtual_mcp_id===Z.virtualMcpId?G:null,K=sS(J?.metadata?.runtime);if(K)return K;let W=RB0(Z.virtualMcpMetadata),F=W==="cms"?await UZ1(X,{claimName:Z.claimName}):"alive",H=W==="cms"&&F!=="alive"?"cms":"sandbox",N=!!J&&(F==="gone"||F==="alive"&&W==="cms");if(N&&J)wn(X,J.id,H);if(W==="cms")console.log("sandbox proxy: no runtime stamp",{route:$.req.path,method:$.req.method,reason:J?"unstamped":"threadless",liveness:F,resolved:H,stamped:N});return H}async function XF6($){let Z=$.get("vmClaim");if(Z.runner)return Z.runner;try{return await $Q($.var.studioContext)}catch{return null}}function o_($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}async function ku($){let{virtualMcpMetadata:Z,connectionIds:X}=$.get("vmClaim"),Q=$.var.studioContext,Y=na(Z,X);if(!Y)throw new u4(404,"AUTH","repo","Project has no GitHub repository");let G=t(Q);return RA0(Q,G.id,Y)}function bZ1($,Z){if(Z instanceof TA0)return $.json({error:Z.message},429,{...j5,...Z.retryAfterMs===null?{}:{"Retry-After":String(Math.ceil(Z.retryAfterMs/1000))}});if(Z instanceof u4){let Q=Z.status===404?404:Z.status===409||Z.status===422?409:502;return $.json({error:Z.message},Q,j5)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},502,j5)}async function Gc$($,Z,X){let Q;try{Q=await fetch(Z,X)}catch{return $.json({error:"Preview unreachable"},502)}let Y;try{Y=await Q.text()}catch{return $.json({error:"Preview unreachable"},502)}return new Response(Y,{status:Q.status,headers:{"content-type":Q.headers.get("content-type")??"application/json"}})}async function Jc$($){try{let Z=await ku($),X=await bA0(Z,$.get("vmClaim").branch);return $.json(X,200,j5)}catch(Z){return bZ1($,Z)}}function ta($,Z){let Q=(gA0.get($)??Promise.resolve()).catch(()=>{}).then(Z),Y=Q.catch(()=>{});return gA0.set($,Y),Y.finally(()=>{if(gA0.get($)===Y)gA0.delete($)}),Q}async function iZ($,Z,X){if(!X?.runner&&$.get("vmClaim").runtime==="cms")return $.json({error:"sandbox not found: this session is sandbox-less"},404,j5);let Q=X?.runner??o_($);if(Q instanceof Response)return Q;let{claimName:Y,userId:G,projectRef:J}=$.get("vmClaim"),K=X?.method??"POST",W=null,F=new Headers;if(X?.jsonBody!==void 0)W=X.jsonBody,F.set("content-type","application/json");else if(X?.forwardJsonBody)W=await $.req.text(),F.set("content-type","application/json");let H=X?.signal,N={method:K,headers:F,body:W,...H?{signal:H}:{}},U=async()=>{let O=await Q.proxyDaemonRequest(Y,Z,N);if(X?.map404to410&&O.status===404){try{await O.body?.cancel()}catch{}if(await Q.adoptLiveClaim({userId:G,projectRef:J},Y))O=await Q.proxyDaemonRequest(Y,Z,N);if(O.status===404){try{await O.body?.cancel()}catch{}return new Response(JSON.stringify({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."}),{status:410,headers:{"content-type":"application/json",...j5}})}}let B=await O.text(),L=X?.redactRepoDir?QF6(B):B,w=O.headers.get("content-type")??"application/json";return new Response(L,{status:O.status,headers:{"content-type":w,...j5}})};try{if(H){let O=U();return O.catch(()=>{}),await Promise.race([O,new Promise((L,w)=>{if(H.aborted)return w(H.reason);H.addEventListener("abort",()=>w(H.reason),{once:!0})})])}return await U()}catch(O){let B=O instanceof Error?O.message:String(O);return $.json({error:`Daemon unreachable: ${B}`},502)}}function QF6($){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 hA0($,Z,X,Q="GET",Y){let G=await $.proxyDaemonRequest(Z,X,{method:Q,headers:new Headers,body:null});if(G.status===404&&Y){try{await G.body?.cancel()}catch{}if(await $.adoptLiveClaim(Y,Z))G=await $.proxyDaemonRequest(Z,X,{method:Q,headers:new Headers,body:null})}if(G.status===404){try{await G.body?.cancel()}catch{}throw Error("SANDBOX_GONE")}let J=await G.text();if(!G.ok){let K=`Daemon error (${G.status})`;try{K=JSON.parse(J).error??K}catch{}throw Error(K)}return JSON.parse(J)}function YF6($){return Kc$.includes($)}var rW6,Qc$=524288,sW6=65536,eW6=1e4,Yc$=2000,$F6,gA0,j5,Kc$,Wc$=()=>{let $=new H1;$.use("/:virtualMcpId/:branch/*",$F6),$.post("/:virtualMcpId/:branch/write",(X)=>iZ(X,"/_sandbox/write",{forwardJsonBody:!0,signal:t_(X)})),$.post("/:virtualMcpId/:branch/unlink",(X)=>iZ(X,"/_sandbox/unlink",{forwardJsonBody:!0,signal:t_(X)})),$.post("/:virtualMcpId/:branch/mkdir",(X)=>iZ(X,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:t_(X)})),$.post("/:virtualMcpId/:branch/rename",(X)=>iZ(X,"/_sandbox/rename",{forwardJsonBody:!0,signal:t_(X)})),$.post("/:virtualMcpId/:branch/read",(X)=>iZ(X,"/_sandbox/read",{forwardJsonBody:!0,signal:t_(X)})),$.post("/:virtualMcpId/:branch/glob",(X)=>iZ(X,"/_sandbox/glob",{forwardJsonBody:!0,signal:t_(X)})),$.post("/:virtualMcpId/:branch/grep",(X)=>iZ(X,"/_sandbox/grep",{forwardJsonBody:!0,signal:t_(X)})),$.post("/:virtualMcpId/:branch/exec/:script",async(X)=>{let Q=X.req.param("script");if(!Q)return X.json({error:"missing script name"},400);return iZ(X,`/_sandbox/exec/${encodeURIComponent(Q)}`)}),$.post("/:virtualMcpId/:branch/exec/:script/kill",async(X)=>{let Q=X.req.param("script");if(!Q)return X.json({error:"missing script name"},400);return iZ(X,`/_sandbox/exec/${encodeURIComponent(Q)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(X)=>iZ(X,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDir:!0})),$.put("/:virtualMcpId/:branch/config",(X)=>iZ(X,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(X)=>{let Q=X.req.param("step");if(!Q||!YF6(Q))return X.json({error:`step must be one of: ${Kc$.join(", ")}`},400);let Y=X.get("vmClaim"),G=await UZ1(X.var.studioContext,{claimName:Y.claimName})==="gone"?null:await XF6(X);if(!G)return X.json({error:"sandbox not found: nothing is running at this ref"},404,j5);if(Q==="start"){let J=t(X.var.studioContext),K=Ky(Y.virtualMcpMetadata);try{await uZ0({ctx:X.var.studioContext,runner:G,handle:Y.claimName,orgId:J.id,userId:Y.callerUserId,entries:K})}catch(W){let F=W instanceof Error?W.message:String(W);return X.json({error:`Failed to push env to daemon: ${F}`},502)}}return iZ(X,`/_sandbox/setup/${Q}`,{signal:X.req.raw.signal,map404to410:!0,runner:G})}),$.get("/:virtualMcpId/:branch/events",(X)=>{let Q=X.get("vmClaim");if(!Q.runner)return VN(X,async(Y)=>{await Y.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this studio instance."})})});return Gu$(X,{ctx:X.var.studioContext,claimName:Q.claimName,runner:Q.runner,virtualMcpId:Q.virtualMcpId,branch:Q.branch,userId:Q.userId,projectRef:Q.projectRef,virtualMcpMetadata:Q.virtualMcpMetadata})}),$.get("/:virtualMcpId/:branch/git/status",(X)=>{if(X.get("vmClaim").runtime==="cms")return Jc$(X);return Z(X)});let Z=(X)=>iZ(X,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([X.req.raw.signal,AbortSignal.timeout(Yc$)])});return $.post("/:virtualMcpId/:branch/git/status",(X)=>{if(X.get("vmClaim").runtime==="cms")return Jc$(X);return iZ(X,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([X.req.raw.signal,AbortSignal.timeout(Yc$)])})}),$.post("/:virtualMcpId/:branch/git/diff",async(X)=>{let Q=X.get("vmClaim");if(Q.runtime==="cms")try{let Y=await X.req.json().catch(()=>({})),G=await ku(X),J=await xA0(G,Q.branch,Y.base);return X.json(J,200,j5)}catch(Y){return bZ1(X,Y)}return iZ(X,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})}),$.post("/:virtualMcpId/:branch/git/publish",async(X)=>{if(X.get("vmClaim").runtime==="cms")return X.json({ok:!0},200,j5);let Q=o_(X);if(Q instanceof Response)return Q;let{claimName:Y,virtualMcpMetadata:G,connectionIds:J}=X.get("vmClaim"),K=X.var.studioContext;return ta(Y,async()=>{try{await OZ1(K,Q,Y);let W=na(G,J);if(W)await Xc$(K,Q,Y,W)}catch(W){if(W instanceof n_)return X.json({error:W.message},403,j5);let F=W instanceof Error?W.message:String(W);return X.json({error:F},502,j5)}return iZ(X,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",async(X)=>{let Q=X.get("vmClaim");if(Q.runtime==="cms")return ta(Q.claimName,async()=>{let Y=await X.req.json().catch(()=>({})),G=Array.isArray(Y.filepaths)?Y.filepaths.filter((J)=>typeof J==="string"):[];if(G.length===0)return X.json({error:"filepaths is required"},400,j5);try{let J=await ku(X);return await su$(J,Q.branch,G),X.json({ok:!0},200,j5)}catch(J){let K=J instanceof u4&&J.status===409?409:502,W=J instanceof Error?J.message:String(J);return X.json({error:W},K,j5)}});return ta(Q.claimName,()=>iZ(X,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(X)=>{let Q=X.get("vmClaim");if(Q.runtime==="cms")return ta(Q.claimName,async()=>{try{let K=await X.req.json().catch(()=>({})),W=await ku(X),F=K.base??await W.getDefaultBranch();return await yA0(W,Q.branch,F),X.json({ok:!0},200,j5)}catch(K){return bZ1(X,K)}});let Y=o_(X);if(Y instanceof Response)return Y;let{claimName:G}=X.get("vmClaim"),J=X.var.studioContext;return ta(G,async()=>{try{await OZ1(J,Y,G)}catch(K){let W=K instanceof Error?K.message:String(K);return X.json({error:W},502,j5)}return iZ(X,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",k9({maxSize:Qc$,onError:(X)=>X.json({error:"Payload too large"},413,j5)}),async(X)=>{let Q=X.get("vmClaim"),Y=null;if(Q.runtime!=="cms"){let F=o_(X);if(F instanceof Response)return F;Y=F}let{claimName:G,userId:J,projectRef:K}=Q,W=X.var.studioContext;try{let F=await X.req.json().catch(()=>({})),H=F.status,N=F.diff,U=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[O,B]=LZ1(H)&&U?[H,N]:Y?await Promise.all([hA0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:K}),hA0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:K})]):await(async()=>{let w=await ku(X);return Promise.all([bA0(w,Q.branch),xA0(w,Q.branch)])})(),L=await Hu$(W,O,B);return X.json(L,200,j5)}catch(F){let H=F instanceof Error?F.message:String(F);if(H==="SANDBOX_GONE")return X.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,j5);return X.json({error:H},502,j5)}}),$.post("/:virtualMcpId/:branch/git/judge-review",k9({maxSize:Qc$,onError:(X)=>X.json({error:"Payload too large"},413,j5)}),async(X)=>{let Q=X.get("vmClaim"),Y=null;if(Q.runtime!=="cms"){let F=o_(X);if(F instanceof Response)return F;Y=F}let{claimName:G,userId:J,projectRef:K}=Q,W=X.var.studioContext;try{let F=await X.req.json().catch(()=>({})),H=F.status,N=F.diff,U=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[O,B]=LZ1(H)&&U?[H,N]:Y?await Promise.all([hA0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:K}),hA0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:K})]):await(async()=>{let w=await ku(X);return Promise.all([bA0(w,Q.branch),xA0(w,Q.branch)])})(),L=await Uu$(W,O,B,typeof F.language==="string"?F.language:void 0);return X.json(L,200,j5)}catch(F){let H=F instanceof Error?F.message:String(F);if(H==="SANDBOX_GONE")return X.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,j5);return X.json({error:H},502,j5)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(X)=>{let Q=o_(X);if(Q instanceof Response)return Q;let{claimName:Y}=X.get("vmClaim"),G=X.req.query("path");if(!G||!G.startsWith("/")||G.startsWith("//")||G.includes("..")||G.includes("\\"))return X.json({error:"Path not allowed"},403);let J;try{J=await Q.getPreviewUrl(Y)}catch{return X.json({error:"Preview not available"},502)}if(!J)return X.json({error:"Preview not available"},502);let K=J.replace(/\/+$/,"");return Gc$(X,`${K}${G}`)}),$.post("/:virtualMcpId/:branch/preview-invoke",k9({maxSize:sW6,onError:(X)=>X.json({error:"Payload too large"},413)}),async(X)=>{let Q=o_(X);if(Q instanceof Response)return Q;let{claimName:Y}=X.get("vmClaim"),G;try{G=await Q.getPreviewUrl(Y)}catch{return X.json({error:"Preview not available"},502)}if(!G)return X.json({error:"Preview not available"},502);let J;try{J=await X.req.json()}catch{return X.json({error:"Invalid JSON body"},400)}if(!J||typeof J!=="object"||Array.isArray(J))return X.json({error:"Invalid JSON body"},400);let K=eu$(J);if(!K)return X.json({error:"Invalid or missing __resolveType"},400);let W=$c$(G,K.resolveType);return Gc$(X,W,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(K.payload),signal:AbortSignal.timeout(30000)})}),$};var Fc$=D(()=>{w8();zN();Pu();NZ1();xp();Xu$();v3();qy();Qu$();g3();Yu$();Ju$();xm0();gp();jZ1();Ou$();RZ1();i_();vZ1();Zc$();fZ1();rW6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;$F6=PA0(async($,Z)=>{let X=$.var.studioContext;try{r(X)}catch{return $.json({error:"Unauthorized"},401)}let Q=o0(X);if(!Q)return $.json({error:"Unauthorized"},401);let Y;try{Y=t(X)}catch{return $.json({error:"Organization scope required"},403)}let G=$.req.param("virtualMcpId"),J=$.req.param("branch");if(!G||!J)return $.json({error:"virtualMcpId and branch are required"},400);try{aW6(J)}catch(L){let w=L instanceof Error?L.message:String(L);return $.json({error:w},400)}let K=await X.storage.virtualMcps.findById(G);if(!K||K.organization_id!==Y.id)return $.json({error:"Virtual MCP not found"},404);let W=fp({orgId:Y.id,virtualMcpId:G,branch:J}),F=await Cm0(X,J),H=_m0(F,Q),N=Zu$({userId:H,projectRef:W}),U=K.metadata??null,O=await ZF6($,{claimName:N,branch:J,virtualMcpId:G,sandboxUserId:H,virtualMcpMetadata:U,branchThread:F});if(O==="cms")return $.set("vmClaim",{claimName:N,callerUserId:Q,runner:null,virtualMcpId:G,branch:J,userId:H,projectRef:W,virtualMcpMetadata:U,connectionIds:K.connections?.map((L)=>L.connection_id)??[],runtime:O}),Z();let B;try{B=await $Q(X)}catch{B=null}if(!B)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:N,callerUserId:Q,runner:B,virtualMcpId:G,branch:J,userId:H,projectRef:W,virtualMcpMetadata:U,connectionIds:K.connections?.map((L)=>L.connection_id)??[],runtime:O}),Z()});gA0=new Map;j5={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};Kc$=["clone","install","start"]});function Hc$($,Z,X){let Q=xZ1.get($);if(!Q)Q={pending:null,running:!1},xZ1.set($,Q);if(!Q.pending)Q.pending={set:new Map,del:new Set,deps:Z,resolvers:[],rejecters:[]};let Y=Q.pending;Y.deps=Z;for(let[J,K]of Object.entries(X.set??{}))Y.set.set(J,K),Y.del.delete(J);for(let J of X.delete??[])Y.del.add(J),Y.set.delete(J);let G=new Promise((J,K)=>{Y.resolvers.push(J),Y.rejecters.push(K)});if(!Q.running)JF6($,Q);return G}async function JF6($,Z){Z.running=!0;try{while(Z.pending){let X=Z.pending;Z.pending=null;try{let Q=await KF6(X);for(let Y of X.resolvers)Y(Q)}catch(Q){for(let Y of X.rejecters)Y(Q)}}}finally{if(Z.running=!1,!Z.pending)xZ1.delete($)}}async function KF6($){let{client:Z,branch:X,packagePath:Q}=$.deps;for(let Y=0;;Y++){let G=await Mu(Z,X),J=await Z.getCommitTreeSha(G),K=await Z.getTreeRecursive(J),W=SZ1(K,Q),F=[],H=new Map(W.map((B)=>[B.path,{stem:B.stem,sha:B.sha}]));for(let[B,L]of $.set){let w=CZ1(W,B),E=`${JSON.stringify(L,null,2)}
2866
- `,j=await Z.createBlob(E);await tu$(Z.owner,Z.repo,j,E);let z=w[0]??`${vA0(Q)}/${IZ1(B)}.json`;F.push({path:z,mode:"100644",type:"blob",sha:j});let A=z.slice(z.lastIndexOf("/")+1,-5);H.set(z,{stem:A,sha:j,content:E});for(let P of w.slice(1))F.push({path:P,mode:"100644",type:"blob",sha:null}),H.delete(P)}for(let B of $.del)for(let L of CZ1(W,B))F.push({path:L,mode:"100644",type:"blob",sha:null}),H.delete(L);if(F.length===0)return G;let N=Q?`${Q}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(K.some((B)=>B.type==="blob"&&B.path===N)){let B=await Promise.all([...H.values()].map(async(j)=>({stem:j.stem,content:j.content??await Z.getBlobText(j.sha)}))),{decofile:L,skipped:w}=da(B);if(w.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:`${Z.owner}/${Z.repo}`,branch:X,packagePath:Q,blocks:w.map((j)=>j.key)});let E=await Z.createBlob(L);F.push({path:N,mode:"100644",type:"blob",sha:E})}let U=await Z.createTree(J,F),O=await Z.createCommit({message:WF6($),treeSha:U,parentShas:[G]});try{return await Z.updateRef(X,O),O}catch(B){if(!(B instanceof u4&&B.status===422)||Y>=GF6-1)throw B;await L$(tZ(2000,200,Y,2,0.5))}}}function WF6($){let Z=(Y)=>{let G=Y.slice(0,3).join(", ");return Y.length>3?`${G} (+${Y.length-3} more)`:G},X=[];if($.set.size>0)X.push(`update ${Z([...$.set.keys()])}`);if($.del.size>0)X.push(`delete ${Z([...$.del])}`);let Q=`chore(decofile): ${X.join("; ")}`;return Im0(Q,$.deps.coAuthor)}var GF6=3,xZ1;var Nc$=D(()=>{EB0();qA0();w4();i_();fA0();xZ1=new Map});import{createHmac as Uc$,randomBytes as FF6,timingSafeEqual as HF6}from"crypto";function Oc$(){if(uA0)return uA0;let $;try{let Z=b0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return uA0=$?Buffer.from($):FF6(32),uA0}function yZ1($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+NF6)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=Uc$("sha256",Oc$()).update(Q).digest("base64url");return`${Q}.${Y}`}function Bc$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(Uc$("sha256",Oc$()).update(Q).digest("base64url"));if(Y.length!==G.length||!HF6(Y,G))return!1;let J;try{J=JSON.parse(Buffer.from(Q,"base64url").toString())}catch{return!1}let K=Math.floor((Z.nowMs??Date.now())/1000);return J.o===Z.organizationId&&J.m===Z.virtualMcpId&&J.b===Z.branch&&typeof J.e==="number"&&J.e>=K}var NF6=21600000,uA0=null;var Dc$=D(()=>{q$()});import{z as Vu}from"zod";function OF6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&UF6.test($)}function wc$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function oa($){let Z=$.get("decofileScope");return RA0($.var.studioContext,Z.organizationId,Z.githubRepo)}function ra($,Z){if(Z instanceof u4){let Q=Z.status===404?404:Z.status===409?409:Z.status===422?409:502;return $.json({error:Z.message},Q)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},500)}function Ec$(){let $=new H1;return $.use("/:virtualMcpId/:branch",Lc$),$.use("/:virtualMcpId/:branch/*",Lc$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await oa(Z),Y=await ou$(Q,X.branch,X.packagePath,{createBranchIfMissing:!!X.userId}),G={ETag:`"${Y.sha}"`,"Cache-Control":"no-store","Access-Control-Allow-Origin":"*"};if(Z.req.header("if-none-match")===`"${Y.sha}"`)return Z.body(null,304,G);if(!X.userId)return Z.body(Y.decofile,200,{...G,"content-type":"application/json"});let J=yZ1({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(wc$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return ra(Z,Q)}}),$.get("/:virtualMcpId/:branch/meta",async(Z)=>{let X=Z.get("decofileScope"),Q=X.packagePath?`${X.packagePath}/.deco/meta.gen.json`:".deco/meta.gen.json";try{let Y=await oa(Z),G=await Y.getFileTextAtRef(X.branch,Q);if(G===null){let J=await Y.getDefaultBranch();if(J!==X.branch)G=await Y.getFileTextAtRef(J,Q)}if(G===null)return Z.json({error:"meta.gen.json not committed"},404);return Z.body(G,200,{"content-type":"application/json","Cache-Control":"no-store","Access-Control-Allow-Origin":"*"})}catch(Y){return ra(Z,Y)}}),$.patch("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=BF6.safeParse(await Z.req.json().catch(()=>null));if(!Y.success)return Z.json({error:"Invalid body",details:Y.error.issues},400);let G=Y.data;for(let J of[...Object.keys(G.set??{}),...G.delete??[]])try{IA0(J)}catch(K){let W=K instanceof Error?K.message:String(K);return Z.json({error:W},400)}for(let[J,K]of Object.entries(G.set??{}))if(typeof K!=="object"||K===null||Array.isArray(K))return Z.json({error:`Block "${J}" must be a JSON object`},400);try{let J=await oa(Z),K=await Hc$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:Au(Q)},G),W=yZ1({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:K,token:W,apiHost:wc$(Z)})}catch(J){return ra(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await oa(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({error:"Branch is already the default branch"},400);let G=`chore(decofile): publish ${X.branch}`;try{let J;try{J=await Q.mergeBranch(Y,X.branch,G)}catch(K){if(!(K instanceof u4&&K.status===409))throw K;await yA0(Q,X.branch,Y),J=await Q.mergeBranch(Y,X.branch,G)}return J?Z.json({result:"merged",sha:J}):Z.json({result:"up-to-date"})}catch(J){if(J instanceof u4&&J.status===409)return Z.json({error:"merge-conflict"},409);if(J instanceof u4&&J.status===405){let W=await Q.findOpenPullRequest(Y,X.branch)??await Q.createPullRequest({base:Y,head:X.branch,title:`Publish ${X.branch}`});return Z.json({result:"pull-request",number:W.number,url:W.html_url})}throw J}}catch(Q){return ra(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await oa(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});try{let{aheadBy:G,behindBy:J}=await Q.compare(Y,X.branch);return Z.json({baseBranch:Y,aheadBy:G,behindBy:J})}catch(G){if(G instanceof u4&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});throw G}}catch(Q){return ra(Z,Q)}}),$}var UF6,BF6,Lc$;var jc$=D(()=>{qA0();w8();NZ1();AA0();fZ1();RZ1();Nc$();Dc$();vZ1();i_();fA0();UF6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;BF6=Vu.object({set:Vu.record(Vu.string(),Vu.unknown()).optional(),delete:Vu.array(Vu.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}),Lc$=PA0(async($,Z)=>{let X=$.var.studioContext,Q=X.organization;if(!Q)return $.json({error:"Organization scope required"},500);let Y=$.req.param("virtualMcpId"),G=$.req.param("branch");if(!Y||!G)return $.json({error:"virtualMcpId and branch are required"},400);if(!OF6(G))return $.json({error:`Invalid branch name: ${G}`},400);let J=X.auth?.user?.id??null;if(!J){let O=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!O||!Bc$(O,{organizationId:Q.id,virtualMcpId:Y,branch:G}))return $.json({error:"Unauthorized"},401)}let K=await X.storage.virtualMcps.findById(Y);if(!K||K.organization_id!==Q.id)return $.json({error:"Virtual MCP not found"},404);let W=K.metadata??null;if(!TB0(W))return $.json({error:"Project has no preview server configured"},404);let H=K.connections?.map((O)=>O.connection_id)??[],N=na(W,H);if(!N)return $.json({error:"Project has no GitHub repository"},404);let U=W?.runtime;return $.set("decofileScope",{organizationId:Q.id,virtualMcpId:Y,branch:G,packagePath:U?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:N,userId:J}),Z()})});var zc$=($)=>{let Z=new H1;if(Z.use("*",x_),Z.route("/",gP0()),Z.route("/",xx$()),Z.route("/",lh$()),Z.route("/",hh$()),Z.route("/",EA0()),Z.route("/tools",oh$()),Z.route("/",ph$()),Z.route("/",Eh$({kvStorage:$.kvStorage})),Z.route("/",Lh$()),Z.route("/fs",_h$({getConnection:$.getNatsConnection})),Z.route("/sandbox",Wc$()),Z.route("/decofile",Ec$()),Z.route("/",xh$()),Z.route("/deco-sites",uP0()),Z.route("/sso",_P0()),Z.route("/",jA0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",kx$()),$.mountDevAssets)Z.route("/dev-assets",cP0({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("/",Gf$()),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",fh$()),Z.route("/mcp",iL0()),Z.route("/mcp/self",wA0()),Z.route("/mcp",tL0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var Pc$=D(()=>{w8();v51();Vx$();y51();lP0();Da();C51();wh$();jh$();vh$();It();I51();oL0();YZ1();bh$();yh$();uh$();dh$();nh$();JZ1();rh$();KZ1();pL0();Fc$();jc$()});function DF6($){return $.filter((Z)=>Z.vendors?.alias).map((Z)=>({name:Z.name,title:Z.title,description:Z.description,logo:Z.logo,category:Z.category,vendor:{alias:Z.vendors.alias,url:Z.vendors.url}}))}var LF6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},Ac$=()=>{let $=new H1;return $.use("*",LF6),$.get("/",async(Z)=>{let X=b0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await mZ(Q,Y,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:DF6(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var Tc$=D(()=>{w8();q$();hz0()});import{z as q1}from"zod";function UF($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function qF6($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let X=$.substring(0,Z),Q=$.substring(Z+1);if(!X||!Q)return null;return{credentialId:X,modelId:Q}}function MF6($,Z,X){try{return JSON.parse($)}catch{throw new qc$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function kF6($){let Z={};for(let X of $)if(X.role==="assistant"&&X.tool_calls)for(let Q of X.tool_calls)Z[Q.id]=Q.function.name;return $.map((X)=>{switch(X.role){case"system":return{role:"system",content:X.content};case"user":if(typeof X.content==="string")return{role:"user",content:X.content};return{role:"user",content:X.content.map((Y)=>{if(Y.type==="text")return{type:"text",text:Y.text};return{type:"image",image:Y.image_url.url}})};case"assistant":if(X.tool_calls&&X.tool_calls.length>0)return{role:"assistant",content:X.tool_calls.map((Y)=>({type:"tool-call",toolCallId:Y.id,toolName:Y.function.name,input:MF6(Y.function.arguments,Y.id,Y.function.name)}))};return{role:"assistant",content:X.content??""};case"tool":let Q=Z[X.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:X.tool_call_id,toolName:Q,output:{type:"text",value:X.content}}]}}})}function VF6($){let Z=$.map((X)=>{let Q=X.function.parameters?dY(X.function.parameters):dY({type:"object",properties:{}});return[X.function.name,R$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function SF6($){if(!$)return;return{openai:{response_format:$}}}function CF6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function Rc$($,Z,X,Q,Y,G){let J={model:$,messages:Z,tools:X,temperature:Q.temperature,maxTokens:Q.max_tokens,topP:Q.top_p,frequencyPenalty:Q.frequency_penalty,presencePenalty:Q.presence_penalty,stopSequences:Q.stop?Array.isArray(Q.stop)?Q.stop:[Q.stop]:void 0,abortSignal:G};return Y?{...J,providerOptions:Y}:J}function Ic$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var wF6=256,EF6,jF6,zF6,PF6,AF6,TF6,RF6,IF6,qc$,Mc$,kc$;var Vc$=D(()=>{B4();w8();Pu();WN();EF6=q1.object({type:q1.literal("function"),function:q1.object({name:q1.string(),description:q1.string().optional(),parameters:q1.record(q1.string(),q1.unknown()).optional()})}),jF6=q1.object({id:q1.string(),type:q1.literal("function"),function:q1.object({name:q1.string(),arguments:q1.string()})}),zF6=q1.discriminatedUnion("role",[q1.object({role:q1.literal("system"),content:q1.string(),name:q1.string().optional()}),q1.object({role:q1.literal("user"),content:q1.union([q1.string(),q1.array(q1.union([q1.object({type:q1.literal("text"),text:q1.string()}),q1.object({type:q1.literal("image_url"),image_url:q1.object({url:q1.string(),detail:q1.string().optional()})})]))]),name:q1.string().optional()}),q1.object({role:q1.literal("assistant"),content:q1.string().nullable().optional(),name:q1.string().optional(),tool_calls:q1.array(jF6).optional()}),q1.object({role:q1.literal("tool"),content:q1.string(),tool_call_id:q1.string()})]),PF6=q1.object({type:q1.literal("text")}),AF6=q1.object({type:q1.literal("json_object")}),TF6=q1.object({type:q1.literal("json_schema"),json_schema:q1.object({name:q1.string(),description:q1.string().optional(),schema:q1.record(q1.string(),q1.unknown()),strict:q1.boolean().optional()})}),RF6=q1.union([PF6,AF6,TF6]),IF6=q1.object({model:q1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:q1.array(zF6),stream:q1.boolean().optional().default(!1),temperature:q1.number().min(0).max(2).optional(),max_tokens:q1.number().positive().optional(),top_p:q1.number().min(0).max(1).optional(),frequency_penalty:q1.number().min(-2).max(2).optional(),presence_penalty:q1.number().min(-2).max(2).optional(),stop:q1.union([q1.string(),q1.array(q1.string())]).optional(),tools:q1.array(EF6).optional(),tool_choice:q1.union([q1.literal("auto"),q1.literal("none"),q1.literal("required"),q1.object({type:q1.literal("function"),function:q1.object({name:q1.string()})})]).optional(),response_format:RF6.optional(),user:q1.string().optional()});qc$=class qc$ extends Error{constructor($){super($);this.name="MessageConversionError"}};Mc$=new H1;Mc$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(UF("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(UF("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(UF("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=IF6.safeParse(Q);if(!Y.success){let w=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(UF(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let G=Y.data,J=qF6(G.model);if(!J)return $.json(UF("Invalid model format. Expected 'model_id' or 'credential_id:model_id' (e.g., 'claude-sonnet-4-6' or 'key_abc123:claude-sonnet-4-6')","invalid_request_error","model"),400);let{credentialId:K}=J,{modelId:W}=J;if(!K){let E=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((j)=>dL(j.providerId));if(!E)return $.json(UF("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);K=E.id}let F;try{F=await Z.aiProviders.activate(K,Z.organization.id)}catch{return $.json(UF(`AI provider credential not found or inaccessible: ${K}`,"invalid_request_error","model"),404)}let H=F.aiSdk.languageModel(W),N=kF6(G.messages),U=G.tools?VF6(G.tools):void 0,O=SF6(G.response_format),B=CF6(),L=Math.floor(Date.now()/1000);if(G.stream)return VN($,async(w)=>{let E=Rc$(H,N,U,G,O,$.req.raw.signal);try{let j=QB(E),z=!1,A=0,P="",I=async()=>{if(P.length===0)return;let k=P;P="",await w.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{content:k},finish_reason:null}]})})};for await(let k of j.fullStream){if(!z&&(k.type==="text-delta"||k.type==="tool-call"))await w.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(k.type==="text-delta"){if(P+=k.text,P.length>=wF6)await I()}else if(k.type==="tool-call"){await I();let M=A++;await w.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{tool_calls:[{index:M,id:k.toolCallId,type:"function",function:{name:k.toolName,arguments:JSON.stringify(k.input)}}]},finish_reason:null}]})})}else if(k.type==="finish")await I(),await w.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{},finish_reason:Ic$(k.finishReason)}],usage:k.totalUsage?{prompt_tokens:k.totalUsage.inputTokens??0,completion_tokens:k.totalUsage.outputTokens??0,total_tokens:k.totalUsage.totalTokens??0}:void 0})})}await I(),await w.writeSSE({data:"[DONE]"})}catch(j){let z=j;console.error("[openai-compat:stream] Error:",z.message),await w.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let w=Rc$(H,N,U,G,O,$.req.raw.signal),E=await ZB(w),j={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)j.tool_calls=E.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),j.content=null;return $.json({id:B,object:"chat.completion",created:L,model:G.model,choices:[{index:0,message:j,finish_reason:Ic$(E.finishReason)}],usage:{prompt_tokens:E.usage?.inputTokens??0,completion_tokens:E.usage?.outputTokens??0,total_tokens:E.usage?.totalTokens??0}})}}catch(Q){let Y=Q;if(Y.name==="AbortError")return $.json(UF("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(UF(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(UF(Y.message,"server_error"),500)}});kc$=Mc$});function _F6($){if(typeof $!=="object"||$===null)return!1;let X=$.githubRepo?.url;return typeof X==="string"&&X.length>0}function Sc$(){let $=new H1;return $.use("*",async(Z,X)=>{await X(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let X=Z.get("studioContext"),Q=o0(X);if(!Q)return Z.json({error:"Authentication required"},401);let G=(Z.req.query("site")??"").trim().toLowerCase();if(!iG(G))return Z.json({error:"Invalid site slug"},400);let J=await X.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["organization.id as id","organization.slug as slug","organization.name as name","organization.metadata as metadata"]).where("member.userId","=",Q).execute(),K=[];for(let F of J){if(!F.slug||F7(F))continue;let H=await X.storage.virtualMcps.list(F.id);for(let N of H){if(Ws1(N)!==G)continue;if(!_F6(N.metadata))continue;K.push({orgSlug:F.slug,orgName:F.name??F.slug,project:{id:N.id,title:N.title,icon:N.icon??null}})}}let W={matches:K};return Z.json(W)}),$}var Cc$=D(()=>{w8();lO()});var vc$;var _c$=D(()=>{vc$={name:"decocms",version:"4.267.1",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function bF6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??fF6}}var fc$,fF6="https://ph.studio.decocms.com",bc$;var xc$=D(()=>{w8();j50();PC();s5();q$();j51();_c$();fc$=new H1;fc$.get("/",($)=>{let Z={version:vc$.version,theme:fm1(),...OH().logo&&{logo:OH().logo},..._W()&&{internalUrl:UC1()},...b0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!b0().firecrawlApiKey,auth:nb$(),posthog:bF6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!_W()&&b0().agentSandboxEnabled}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});bc$=fc$});function Su($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function gZ1($){return(Su($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function gc$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Su($))}&sz=${Z}`}function yc$($,Z){let X=$.trim();if(X.length<=Z)return X;let Q=X.slice(0,Z-1),Y=Q.lastIndexOf(" ");return`${(Y>Z*0.6?Q.slice(0,Y):Q).trimEnd()}\u2026`}function hc$($){let{brand:Z,domain:X,score:Q,verdict:Y}=$,G=typeof Q==="number"?`${Z} commerce report \u2014 ${Math.round(Q)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,J=`See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,K=Y?.trim()?yc$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):yc$(`How does ${X} really perform? ${J}`,200);return{title:G,description:K}}import{z as l0}from"zod";var r_,xF6,yF6,gF6,hF6,uc$;var cc$=D(()=>{r_=l0.enum(["good","bad","neutral"]),xF6=l0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},l0.object({kind:l0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:l0.coerce.string().optional(),tone:r_.optional(),muted:l0.boolean().optional(),delta:l0.coerce.string().optional(),deltaDir:l0.enum(["up","down","neutral"]).optional(),points:l0.array(l0.coerce.number()).optional(),label:l0.coerce.string().optional()}).transform(($)=>{if($.kind==="badge"&&$.label==null)$.label=$.value??"";if($.kind==="score"){let Z=Number($.value);if(Number.isNaN(Z))return{...$,kind:"text"}}return $})),yF6=l0.preprocess(($)=>{let Z=$;if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&Array.isArray(Z.cells))Z=Z.cells;if(Array.isArray(Z)&&Z.length===1&&Array.isArray(Z[0]))Z=Z[0];if(Array.isArray(Z))return Z;if(Z&&typeof Z==="object")return Object.values(Z);return Z},l0.array(xF6)),gF6={key:l0.coerce.string(),title:l0.coerce.string(),eyebrow:l0.coerce.string().optional(),headline:l0.coerce.string(),annotation:l0.coerce.string().optional(),methodology:l0.coerce.string().optional(),sources:l0.array(l0.object({name:l0.coerce.string(),logoUrl:l0.coerce.string()})).optional()},hF6=l0.discriminatedUnion("template",[l0.object({template:l0.literal("cover"),score:l0.object({value:l0.coerce.number(),max:l0.coerce.number().optional(),grade:l0.coerce.string().optional(),label:l0.coerce.string().optional()}).optional(),brandImage:l0.coerce.string().optional(),screenshot:l0.coerce.string().optional(),mobileScreenshot:l0.coerce.string().optional()}),l0.object({template:l0.literal("cta"),ctaUrl:l0.coerce.string().optional(),ctaLabel:l0.coerce.string().optional(),bullets:l0.array(l0.coerce.string()).optional()}),l0.object({template:l0.literal("series"),points:l0.array(l0.coerce.number()).min(2),xLabels:l0.array(l0.coerce.string()).min(1),unit:l0.coerce.string().optional(),callout:l0.object({index:l0.coerce.number(),value:l0.coerce.string(),tone:r_.optional()})}),l0.object({template:l0.literal("threshold"),value:l0.coerce.string().default(""),metricLabel:l0.coerce.string().optional(),ratio:l0.coerce.number(),thresholdRatio:l0.coerce.number().optional(),thresholdLabel:l0.coerce.string().default(""),tone:r_.optional()}),l0.object({template:l0.literal("stats"),stats:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),tone:r_.optional()})).min(1)}),l0.object({template:l0.literal("bars"),items:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),ratio:l0.coerce.number(),tone:r_.optional()})).min(1)}),l0.object({template:l0.literal("gauges"),gauges:l0.array(l0.object({label:l0.coerce.string(),value:l0.coerce.string(),status:l0.enum(["good","warn","bad"]).catch("warn"),caption:l0.coerce.string().optional(),ratio:l0.coerce.number().optional()})).min(1)}),l0.object({template:l0.literal("checklist"),checks:l0.array(l0.object({label:l0.coerce.string(),status:l0.enum(["pass","fail","warn"]).catch("fail"),value:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("table"),columns:l0.array(l0.object({label:l0.coerce.string(),align:l0.enum(["left","right"]).optional()})).min(1),rows:l0.array(yF6).min(1),highlightRow:l0.coerce.number().optional()}),l0.object({template:l0.literal("products"),products:l0.array(l0.object({name:l0.coerce.string(),price:l0.coerce.string().optional(),image:l0.coerce.string().optional(),url:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("list"),entries:l0.array(l0.object({label:l0.coerce.string(),severity:l0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:l0.coerce.number().optional()}),l0.object({template:l0.literal("keywords"),volumeLabel:l0.coerce.string().optional(),keywords:l0.array(l0.object({term:l0.coerce.string(),volume:l0.coerce.string(),position:l0.coerce.number().catch(0)})).min(1)}),l0.object({template:l0.literal("competitor"),metricLabel:l0.coerce.string().optional(),competitors:l0.array(l0.object({name:l0.coerce.string(),value:l0.coerce.string(),tone:r_.optional(),isYou:l0.boolean().optional()})).min(1)}),l0.object({template:l0.literal("scorecard"),rivalLabel:l0.coerce.string().optional(),dimensions:l0.array(l0.object({label:l0.coerce.string(),you:l0.coerce.string(),rival:l0.coerce.string().optional(),rivalName:l0.coerce.string().optional(),tone:r_.optional()})).min(1)})]),uc$=l0.object({...gF6,template:hF6})});function cA0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=uc$.safeParse(Y.props);if(G.success)return G.data;let J=G.error.issues[0];return Z.push({section_type:Y.section_type,position:Y.position,reason:J?`${J.path.join(".")||"(root)"}: ${J.message}`:"contract violation"}),null}).filter((Y)=>Y!==null),Q=X.filter((Y)=>Y.template.template!=="cover"&&Y.template.template!=="cta").map((Y)=>({key:Y.key,title:Y.title}));return{deck:{meta:{...$.meta,scores:$.summary?.scores,scannedAt:$.scanned_at,toc:Q},slides:X},drops:Z}}var hZ1=D(()=>{cc$()});import{join as lc$}from"path";async function cF6($){try{let Z=await fetch(`${GW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(uF6)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=cA0(X);if(!Q.slides.length)return null;let Y=Q.slides.find((K)=>K.template.template==="cover"),G=Y?.template,J=G&&G.template==="cover"?G:void 0;return{brand:Q.meta.brand?.trim()||gZ1($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function NG($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function lF6($,Z){let X=Su($),Q=Z?.brand?.trim()||gZ1(X),Y=gc$(X,128),J=`${(b0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:K,description:W}=hc$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),F=`${J}/og.png`,H=`${Q} commerce report by decocms`;return[`<title>${NG(K)}</title>`,`<meta name="description" content="${NG(W)}" />`,'<meta name="robots" content="noindex, follow" />','<meta property="og:type" content="website" />','<meta property="og:site_name" content="decocms" />',`<meta property="og:title" content="${NG(K)}" />`,`<meta property="og:description" content="${NG(W)}" />`,`<meta property="og:url" content="${NG(J)}" />`,`<meta property="og:image" content="${NG(F)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${NG(H)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${NG(K)}" />`,`<meta name="twitter:description" content="${NG(W)}" />`,`<meta name="twitter:image" content="${NG(F)}" />`,`<meta name="twitter:image:alt" content="${NG(H)}" />`,`<link rel="canonical" href="${NG(J)}" />`,`<link rel="icon" href="${NG(Y)}" sizes="any" />`].join(`
2866
+ `,j=await Z.createBlob(E);await tu$(Z.owner,Z.repo,j,E);let z=w[0]??`${vA0(Q)}/${IZ1(B)}.json`;F.push({path:z,mode:"100644",type:"blob",sha:j});let A=z.slice(z.lastIndexOf("/")+1,-5);H.set(z,{stem:A,sha:j,content:E});for(let P of w.slice(1))F.push({path:P,mode:"100644",type:"blob",sha:null}),H.delete(P)}for(let B of $.del)for(let L of CZ1(W,B))F.push({path:L,mode:"100644",type:"blob",sha:null}),H.delete(L);if(F.length===0)return G;let N=Q?`${Q}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(K.some((B)=>B.type==="blob"&&B.path===N)){let B=await Promise.all([...H.values()].map(async(j)=>({stem:j.stem,content:j.content??await Z.getBlobText(j.sha)}))),{decofile:L,skipped:w}=da(B);if(w.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:`${Z.owner}/${Z.repo}`,branch:X,packagePath:Q,blocks:w.map((j)=>j.key)});let E=await Z.createBlob(L);F.push({path:N,mode:"100644",type:"blob",sha:E})}let U=await Z.createTree(J,F),O=await Z.createCommit({message:WF6($),treeSha:U,parentShas:[G]});try{return await Z.updateRef(X,O),O}catch(B){if(!(B instanceof u4&&B.status===422)||Y>=GF6-1)throw B;await L$(tZ(2000,200,Y,2,0.5))}}}function WF6($){let Z=(Y)=>{let G=Y.slice(0,3).join(", ");return Y.length>3?`${G} (+${Y.length-3} more)`:G},X=[];if($.set.size>0)X.push(`update ${Z([...$.set.keys()])}`);if($.del.size>0)X.push(`delete ${Z([...$.del])}`);let Q=`chore(decofile): ${X.join("; ")}`;return Im0(Q,$.deps.coAuthor)}var GF6=3,xZ1;var Nc$=D(()=>{EB0();qA0();w4();i_();fA0();xZ1=new Map});import{createHmac as Uc$,randomBytes as FF6,timingSafeEqual as HF6}from"crypto";function Oc$(){if(uA0)return uA0;let $;try{let Z=b0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return uA0=$?Buffer.from($):FF6(32),uA0}function yZ1($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+NF6)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=Uc$("sha256",Oc$()).update(Q).digest("base64url");return`${Q}.${Y}`}function Bc$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(Uc$("sha256",Oc$()).update(Q).digest("base64url"));if(Y.length!==G.length||!HF6(Y,G))return!1;let J;try{J=JSON.parse(Buffer.from(Q,"base64url").toString())}catch{return!1}let K=Math.floor((Z.nowMs??Date.now())/1000);return J.o===Z.organizationId&&J.m===Z.virtualMcpId&&J.b===Z.branch&&typeof J.e==="number"&&J.e>=K}var NF6=21600000,uA0=null;var Dc$=D(()=>{q$()});import{z as Vu}from"zod";function OF6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&UF6.test($)}function wc$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function oa($){let Z=$.get("decofileScope");return RA0($.var.studioContext,Z.organizationId,Z.githubRepo)}function ra($,Z){if(Z instanceof u4){let Q=Z.status===404?404:Z.status===409?409:Z.status===422?409:502;return $.json({error:Z.message},Q)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},500)}function Ec$(){let $=new H1;return $.use("/:virtualMcpId/:branch",Lc$),$.use("/:virtualMcpId/:branch/*",Lc$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await oa(Z),Y=await ou$(Q,X.branch,X.packagePath,{createBranchIfMissing:!!X.userId}),G={ETag:`"${Y.sha}"`,"Cache-Control":"no-store","Access-Control-Allow-Origin":"*"};if(Z.req.header("if-none-match")===`"${Y.sha}"`)return Z.body(null,304,G);if(!X.userId)return Z.body(Y.decofile,200,{...G,"content-type":"application/json"});let J=yZ1({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(wc$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return ra(Z,Q)}}),$.get("/:virtualMcpId/:branch/meta",async(Z)=>{let X=Z.get("decofileScope"),Q=X.packagePath?`${X.packagePath}/.deco/meta.gen.json`:".deco/meta.gen.json";try{let Y=await oa(Z),G=await Y.getFileTextAtRef(X.branch,Q);if(G===null){let J=await Y.getDefaultBranch();if(J!==X.branch)G=await Y.getFileTextAtRef(J,Q)}if(G===null)return Z.json({error:"meta.gen.json not committed"},404);return Z.body(G,200,{"content-type":"application/json","Cache-Control":"no-store","Access-Control-Allow-Origin":"*"})}catch(Y){return ra(Z,Y)}}),$.patch("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=BF6.safeParse(await Z.req.json().catch(()=>null));if(!Y.success)return Z.json({error:"Invalid body",details:Y.error.issues},400);let G=Y.data;for(let J of[...Object.keys(G.set??{}),...G.delete??[]])try{IA0(J)}catch(K){let W=K instanceof Error?K.message:String(K);return Z.json({error:W},400)}for(let[J,K]of Object.entries(G.set??{}))if(typeof K!=="object"||K===null||Array.isArray(K))return Z.json({error:`Block "${J}" must be a JSON object`},400);try{let J=await oa(Z),K=await Hc$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:Au(Q)},G),W=yZ1({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:K,token:W,apiHost:wc$(Z)})}catch(J){return ra(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await oa(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({error:"Branch is already the default branch"},400);let G=`chore(decofile): publish ${X.branch}`;try{let J;try{J=await Q.mergeBranch(Y,X.branch,G)}catch(K){if(!(K instanceof u4&&K.status===409))throw K;await yA0(Q,X.branch,Y),J=await Q.mergeBranch(Y,X.branch,G)}return J?Z.json({result:"merged",sha:J}):Z.json({result:"up-to-date"})}catch(J){if(J instanceof u4&&J.status===409)return Z.json({error:"merge-conflict"},409);if(J instanceof u4&&J.status===405){let W=await Q.findOpenPullRequest(Y,X.branch)??await Q.createPullRequest({base:Y,head:X.branch,title:`Publish ${X.branch}`});return Z.json({result:"pull-request",number:W.number,url:W.html_url})}throw J}}catch(Q){return ra(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await oa(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});try{let{aheadBy:G,behindBy:J}=await Q.compare(Y,X.branch);return Z.json({baseBranch:Y,aheadBy:G,behindBy:J})}catch(G){if(G instanceof u4&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});throw G}}catch(Q){return ra(Z,Q)}}),$}var UF6,BF6,Lc$;var jc$=D(()=>{qA0();w8();NZ1();AA0();fZ1();RZ1();Nc$();Dc$();vZ1();i_();fA0();UF6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;BF6=Vu.object({set:Vu.record(Vu.string(),Vu.unknown()).optional(),delete:Vu.array(Vu.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}),Lc$=PA0(async($,Z)=>{let X=$.var.studioContext,Q=X.organization;if(!Q)return $.json({error:"Organization scope required"},500);let Y=$.req.param("virtualMcpId"),G=$.req.param("branch");if(!Y||!G)return $.json({error:"virtualMcpId and branch are required"},400);if(!OF6(G))return $.json({error:`Invalid branch name: ${G}`},400);let J=X.auth?.user?.id??null;if(!J){let O=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!O||!Bc$(O,{organizationId:Q.id,virtualMcpId:Y,branch:G}))return $.json({error:"Unauthorized"},401)}let K=await X.storage.virtualMcps.findById(Y);if(!K||K.organization_id!==Q.id)return $.json({error:"Virtual MCP not found"},404);let W=K.metadata??null;if(!TB0(W))return $.json({error:"Project has no preview server configured"},404);let H=K.connections?.map((O)=>O.connection_id)??[],N=na(W,H);if(!N)return $.json({error:"Project has no GitHub repository"},404);let U=W?.runtime;return $.set("decofileScope",{organizationId:Q.id,virtualMcpId:Y,branch:G,packagePath:U?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:N,userId:J}),Z()})});var zc$=($)=>{let Z=new H1;if(Z.use("*",x_),Z.route("/",gP0()),Z.route("/",xx$()),Z.route("/",lh$()),Z.route("/",hh$()),Z.route("/",EA0()),Z.route("/tools",oh$()),Z.route("/",ph$()),Z.route("/",Eh$({kvStorage:$.kvStorage})),Z.route("/",Lh$()),Z.route("/fs",_h$({getConnection:$.getNatsConnection})),Z.route("/sandbox",Wc$()),Z.route("/decofile",Ec$()),Z.route("/",xh$()),Z.route("/deco-sites",uP0()),Z.route("/sso",_P0()),Z.route("/",jA0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",kx$()),$.mountDevAssets)Z.route("/dev-assets",cP0({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("/",Gf$()),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",fh$()),Z.route("/mcp",iL0()),Z.route("/mcp/self",wA0()),Z.route("/mcp",tL0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var Pc$=D(()=>{w8();v51();Vx$();y51();lP0();Da();C51();wh$();jh$();vh$();It();I51();oL0();YZ1();bh$();yh$();uh$();dh$();nh$();JZ1();rh$();KZ1();pL0();Fc$();jc$()});function DF6($){return $.filter((Z)=>Z.vendors?.alias).map((Z)=>({name:Z.name,title:Z.title,description:Z.description,logo:Z.logo,category:Z.category,vendor:{alias:Z.vendors.alias,url:Z.vendors.url}}))}var LF6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},Ac$=()=>{let $=new H1;return $.use("*",LF6),$.get("/",async(Z)=>{let X=b0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await mZ(Q,Y,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:DF6(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var Tc$=D(()=>{w8();q$();hz0()});import{z as q1}from"zod";function UF($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function qF6($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let X=$.substring(0,Z),Q=$.substring(Z+1);if(!X||!Q)return null;return{credentialId:X,modelId:Q}}function MF6($,Z,X){try{return JSON.parse($)}catch{throw new qc$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function kF6($){let Z={};for(let X of $)if(X.role==="assistant"&&X.tool_calls)for(let Q of X.tool_calls)Z[Q.id]=Q.function.name;return $.map((X)=>{switch(X.role){case"system":return{role:"system",content:X.content};case"user":if(typeof X.content==="string")return{role:"user",content:X.content};return{role:"user",content:X.content.map((Y)=>{if(Y.type==="text")return{type:"text",text:Y.text};return{type:"image",image:Y.image_url.url}})};case"assistant":if(X.tool_calls&&X.tool_calls.length>0)return{role:"assistant",content:X.tool_calls.map((Y)=>({type:"tool-call",toolCallId:Y.id,toolName:Y.function.name,input:MF6(Y.function.arguments,Y.id,Y.function.name)}))};return{role:"assistant",content:X.content??""};case"tool":let Q=Z[X.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:X.tool_call_id,toolName:Q,output:{type:"text",value:X.content}}]}}})}function VF6($){let Z=$.map((X)=>{let Q=X.function.parameters?dY(X.function.parameters):dY({type:"object",properties:{}});return[X.function.name,R$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function SF6($){if(!$)return;return{openai:{response_format:$}}}function CF6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function Rc$($,Z,X,Q,Y,G){let J={model:$,messages:Z,tools:X,temperature:Q.temperature,maxTokens:Q.max_tokens,topP:Q.top_p,frequencyPenalty:Q.frequency_penalty,presencePenalty:Q.presence_penalty,stopSequences:Q.stop?Array.isArray(Q.stop)?Q.stop:[Q.stop]:void 0,abortSignal:G};return Y?{...J,providerOptions:Y}:J}function Ic$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var wF6=256,EF6,jF6,zF6,PF6,AF6,TF6,RF6,IF6,qc$,Mc$,kc$;var Vc$=D(()=>{B4();w8();Pu();WN();EF6=q1.object({type:q1.literal("function"),function:q1.object({name:q1.string(),description:q1.string().optional(),parameters:q1.record(q1.string(),q1.unknown()).optional()})}),jF6=q1.object({id:q1.string(),type:q1.literal("function"),function:q1.object({name:q1.string(),arguments:q1.string()})}),zF6=q1.discriminatedUnion("role",[q1.object({role:q1.literal("system"),content:q1.string(),name:q1.string().optional()}),q1.object({role:q1.literal("user"),content:q1.union([q1.string(),q1.array(q1.union([q1.object({type:q1.literal("text"),text:q1.string()}),q1.object({type:q1.literal("image_url"),image_url:q1.object({url:q1.string(),detail:q1.string().optional()})})]))]),name:q1.string().optional()}),q1.object({role:q1.literal("assistant"),content:q1.string().nullable().optional(),name:q1.string().optional(),tool_calls:q1.array(jF6).optional()}),q1.object({role:q1.literal("tool"),content:q1.string(),tool_call_id:q1.string()})]),PF6=q1.object({type:q1.literal("text")}),AF6=q1.object({type:q1.literal("json_object")}),TF6=q1.object({type:q1.literal("json_schema"),json_schema:q1.object({name:q1.string(),description:q1.string().optional(),schema:q1.record(q1.string(),q1.unknown()),strict:q1.boolean().optional()})}),RF6=q1.union([PF6,AF6,TF6]),IF6=q1.object({model:q1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:q1.array(zF6),stream:q1.boolean().optional().default(!1),temperature:q1.number().min(0).max(2).optional(),max_tokens:q1.number().positive().optional(),top_p:q1.number().min(0).max(1).optional(),frequency_penalty:q1.number().min(-2).max(2).optional(),presence_penalty:q1.number().min(-2).max(2).optional(),stop:q1.union([q1.string(),q1.array(q1.string())]).optional(),tools:q1.array(EF6).optional(),tool_choice:q1.union([q1.literal("auto"),q1.literal("none"),q1.literal("required"),q1.object({type:q1.literal("function"),function:q1.object({name:q1.string()})})]).optional(),response_format:RF6.optional(),user:q1.string().optional()});qc$=class qc$ extends Error{constructor($){super($);this.name="MessageConversionError"}};Mc$=new H1;Mc$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(UF("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(UF("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(UF("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=IF6.safeParse(Q);if(!Y.success){let w=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(UF(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let G=Y.data,J=qF6(G.model);if(!J)return $.json(UF("Invalid model format. Expected 'model_id' or 'credential_id:model_id' (e.g., 'claude-sonnet-4-6' or 'key_abc123:claude-sonnet-4-6')","invalid_request_error","model"),400);let{credentialId:K}=J,{modelId:W}=J;if(!K){let E=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((j)=>dL(j.providerId));if(!E)return $.json(UF("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);K=E.id}let F;try{F=await Z.aiProviders.activate(K,Z.organization.id)}catch{return $.json(UF(`AI provider credential not found or inaccessible: ${K}`,"invalid_request_error","model"),404)}let H=F.aiSdk.languageModel(W),N=kF6(G.messages),U=G.tools?VF6(G.tools):void 0,O=SF6(G.response_format),B=CF6(),L=Math.floor(Date.now()/1000);if(G.stream)return VN($,async(w)=>{let E=Rc$(H,N,U,G,O,$.req.raw.signal);try{let j=QB(E),z=!1,A=0,P="",I=async()=>{if(P.length===0)return;let k=P;P="",await w.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{content:k},finish_reason:null}]})})};for await(let k of j.fullStream){if(!z&&(k.type==="text-delta"||k.type==="tool-call"))await w.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(k.type==="text-delta"){if(P+=k.text,P.length>=wF6)await I()}else if(k.type==="tool-call"){await I();let M=A++;await w.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{tool_calls:[{index:M,id:k.toolCallId,type:"function",function:{name:k.toolName,arguments:JSON.stringify(k.input)}}]},finish_reason:null}]})})}else if(k.type==="finish")await I(),await w.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{},finish_reason:Ic$(k.finishReason)}],usage:k.totalUsage?{prompt_tokens:k.totalUsage.inputTokens??0,completion_tokens:k.totalUsage.outputTokens??0,total_tokens:k.totalUsage.totalTokens??0}:void 0})})}await I(),await w.writeSSE({data:"[DONE]"})}catch(j){let z=j;console.error("[openai-compat:stream] Error:",z.message),await w.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let w=Rc$(H,N,U,G,O,$.req.raw.signal),E=await ZB(w),j={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)j.tool_calls=E.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),j.content=null;return $.json({id:B,object:"chat.completion",created:L,model:G.model,choices:[{index:0,message:j,finish_reason:Ic$(E.finishReason)}],usage:{prompt_tokens:E.usage?.inputTokens??0,completion_tokens:E.usage?.outputTokens??0,total_tokens:E.usage?.totalTokens??0}})}}catch(Q){let Y=Q;if(Y.name==="AbortError")return $.json(UF("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(UF(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(UF(Y.message,"server_error"),500)}});kc$=Mc$});function _F6($){if(typeof $!=="object"||$===null)return!1;let X=$.githubRepo?.url;return typeof X==="string"&&X.length>0}function Sc$(){let $=new H1;return $.use("*",async(Z,X)=>{await X(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let X=Z.get("studioContext"),Q=o0(X);if(!Q)return Z.json({error:"Authentication required"},401);let G=(Z.req.query("site")??"").trim().toLowerCase();if(!iG(G))return Z.json({error:"Invalid site slug"},400);let J=await X.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["organization.id as id","organization.slug as slug","organization.name as name","organization.metadata as metadata"]).where("member.userId","=",Q).execute(),K=[];for(let F of J){if(!F.slug||F7(F))continue;let H=await X.storage.virtualMcps.list(F.id);for(let N of H){if(Ws1(N)!==G)continue;if(!_F6(N.metadata))continue;K.push({orgSlug:F.slug,orgName:F.name??F.slug,project:{id:N.id,title:N.title,icon:N.icon??null}})}}let W={matches:K};return Z.json(W)}),$}var Cc$=D(()=>{w8();lO()});var vc$;var _c$=D(()=>{vc$={name:"decocms",version:"4.267.2",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@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 bF6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??fF6}}var fc$,fF6="https://ph.studio.decocms.com",bc$;var xc$=D(()=>{w8();j50();PC();s5();q$();j51();_c$();fc$=new H1;fc$.get("/",($)=>{let Z={version:vc$.version,theme:fm1(),...OH().logo&&{logo:OH().logo},..._W()&&{internalUrl:UC1()},...b0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!b0().firecrawlApiKey,auth:nb$(),posthog:bF6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!_W()&&b0().agentSandboxEnabled}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});bc$=fc$});function Su($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function gZ1($){return(Su($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function gc$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Su($))}&sz=${Z}`}function yc$($,Z){let X=$.trim();if(X.length<=Z)return X;let Q=X.slice(0,Z-1),Y=Q.lastIndexOf(" ");return`${(Y>Z*0.6?Q.slice(0,Y):Q).trimEnd()}\u2026`}function hc$($){let{brand:Z,domain:X,score:Q,verdict:Y}=$,G=typeof Q==="number"?`${Z} commerce report \u2014 ${Math.round(Q)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,J=`See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,K=Y?.trim()?yc$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):yc$(`How does ${X} really perform? ${J}`,200);return{title:G,description:K}}import{z as l0}from"zod";var r_,xF6,yF6,gF6,hF6,uc$;var cc$=D(()=>{r_=l0.enum(["good","bad","neutral"]),xF6=l0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},l0.object({kind:l0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:l0.coerce.string().optional(),tone:r_.optional(),muted:l0.boolean().optional(),delta:l0.coerce.string().optional(),deltaDir:l0.enum(["up","down","neutral"]).optional(),points:l0.array(l0.coerce.number()).optional(),label:l0.coerce.string().optional()}).transform(($)=>{if($.kind==="badge"&&$.label==null)$.label=$.value??"";if($.kind==="score"){let Z=Number($.value);if(Number.isNaN(Z))return{...$,kind:"text"}}return $})),yF6=l0.preprocess(($)=>{let Z=$;if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&Array.isArray(Z.cells))Z=Z.cells;if(Array.isArray(Z)&&Z.length===1&&Array.isArray(Z[0]))Z=Z[0];if(Array.isArray(Z))return Z;if(Z&&typeof Z==="object")return Object.values(Z);return Z},l0.array(xF6)),gF6={key:l0.coerce.string(),title:l0.coerce.string(),eyebrow:l0.coerce.string().optional(),headline:l0.coerce.string(),annotation:l0.coerce.string().optional(),methodology:l0.coerce.string().optional(),sources:l0.array(l0.object({name:l0.coerce.string(),logoUrl:l0.coerce.string()})).optional()},hF6=l0.discriminatedUnion("template",[l0.object({template:l0.literal("cover"),score:l0.object({value:l0.coerce.number(),max:l0.coerce.number().optional(),grade:l0.coerce.string().optional(),label:l0.coerce.string().optional()}).optional(),brandImage:l0.coerce.string().optional(),screenshot:l0.coerce.string().optional(),mobileScreenshot:l0.coerce.string().optional()}),l0.object({template:l0.literal("cta"),ctaUrl:l0.coerce.string().optional(),ctaLabel:l0.coerce.string().optional(),bullets:l0.array(l0.coerce.string()).optional()}),l0.object({template:l0.literal("series"),points:l0.array(l0.coerce.number()).min(2),xLabels:l0.array(l0.coerce.string()).min(1),unit:l0.coerce.string().optional(),callout:l0.object({index:l0.coerce.number(),value:l0.coerce.string(),tone:r_.optional()})}),l0.object({template:l0.literal("threshold"),value:l0.coerce.string().default(""),metricLabel:l0.coerce.string().optional(),ratio:l0.coerce.number(),thresholdRatio:l0.coerce.number().optional(),thresholdLabel:l0.coerce.string().default(""),tone:r_.optional()}),l0.object({template:l0.literal("stats"),stats:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),tone:r_.optional()})).min(1)}),l0.object({template:l0.literal("bars"),items:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),ratio:l0.coerce.number(),tone:r_.optional()})).min(1)}),l0.object({template:l0.literal("gauges"),gauges:l0.array(l0.object({label:l0.coerce.string(),value:l0.coerce.string(),status:l0.enum(["good","warn","bad"]).catch("warn"),caption:l0.coerce.string().optional(),ratio:l0.coerce.number().optional()})).min(1)}),l0.object({template:l0.literal("checklist"),checks:l0.array(l0.object({label:l0.coerce.string(),status:l0.enum(["pass","fail","warn"]).catch("fail"),value:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("table"),columns:l0.array(l0.object({label:l0.coerce.string(),align:l0.enum(["left","right"]).optional()})).min(1),rows:l0.array(yF6).min(1),highlightRow:l0.coerce.number().optional()}),l0.object({template:l0.literal("products"),products:l0.array(l0.object({name:l0.coerce.string(),price:l0.coerce.string().optional(),image:l0.coerce.string().optional(),url:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("list"),entries:l0.array(l0.object({label:l0.coerce.string(),severity:l0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:l0.coerce.number().optional()}),l0.object({template:l0.literal("keywords"),volumeLabel:l0.coerce.string().optional(),keywords:l0.array(l0.object({term:l0.coerce.string(),volume:l0.coerce.string(),position:l0.coerce.number().catch(0)})).min(1)}),l0.object({template:l0.literal("competitor"),metricLabel:l0.coerce.string().optional(),competitors:l0.array(l0.object({name:l0.coerce.string(),value:l0.coerce.string(),tone:r_.optional(),isYou:l0.boolean().optional()})).min(1)}),l0.object({template:l0.literal("scorecard"),rivalLabel:l0.coerce.string().optional(),dimensions:l0.array(l0.object({label:l0.coerce.string(),you:l0.coerce.string(),rival:l0.coerce.string().optional(),rivalName:l0.coerce.string().optional(),tone:r_.optional()})).min(1)})]),uc$=l0.object({...gF6,template:hF6})});function cA0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=uc$.safeParse(Y.props);if(G.success)return G.data;let J=G.error.issues[0];return Z.push({section_type:Y.section_type,position:Y.position,reason:J?`${J.path.join(".")||"(root)"}: ${J.message}`:"contract violation"}),null}).filter((Y)=>Y!==null),Q=X.filter((Y)=>Y.template.template!=="cover"&&Y.template.template!=="cta").map((Y)=>({key:Y.key,title:Y.title}));return{deck:{meta:{...$.meta,scores:$.summary?.scores,scannedAt:$.scanned_at,toc:Q},slides:X},drops:Z}}var hZ1=D(()=>{cc$()});import{join as lc$}from"path";async function cF6($){try{let Z=await fetch(`${GW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(uF6)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=cA0(X);if(!Q.slides.length)return null;let Y=Q.slides.find((K)=>K.template.template==="cover"),G=Y?.template,J=G&&G.template==="cover"?G:void 0;return{brand:Q.meta.brand?.trim()||gZ1($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function NG($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function lF6($,Z){let X=Su($),Q=Z?.brand?.trim()||gZ1(X),Y=gc$(X,128),J=`${(b0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:K,description:W}=hc$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),F=`${J}/og.png`,H=`${Q} commerce report by decocms`;return[`<title>${NG(K)}</title>`,`<meta name="description" content="${NG(W)}" />`,'<meta name="robots" content="noindex, follow" />','<meta property="og:type" content="website" />','<meta property="og:site_name" content="decocms" />',`<meta property="og:title" content="${NG(K)}" />`,`<meta property="og:description" content="${NG(W)}" />`,`<meta property="og:url" content="${NG(J)}" />`,`<meta property="og:image" content="${NG(F)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${NG(H)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${NG(K)}" />`,`<meta name="twitter:description" content="${NG(W)}" />`,`<meta name="twitter:image" content="${NG(F)}" />`,`<meta name="twitter:image:alt" content="${NG(H)}" />`,`<link rel="canonical" href="${NG(J)}" />`,`<link rel="icon" href="${NG(Y)}" sizes="any" />`].join(`
2867
2867
  `)}function dF6($,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}
2868
2868
  </head>`)}function dc$($){let Z=new H1;return Z.get("/:domain/og.png",async(X)=>{let Q=Su(X.req.param("domain")),Y=async()=>{let G=$?Bun.file(lc$($,"report-og-fallback.png")):null;if(!G||!await G.exists())return X.notFound();return X.body(new Uint8Array(await G.arrayBuffer()),200,{"Content-Type":"image/png","Cache-Control":"public, max-age=0, s-maxage=3600"})};try{let G=await fetch(`${GW({})}/api/v2/public/diagnostics/${encodeURIComponent(Q)}/og.png`,{signal:AbortSignal.timeout(mF6)}),J=G.headers.get("content-type")??"";if(!G.ok||!J.startsWith("image/")||!G.body)return Y();return X.body(G.body,200,{"Content-Type":J,"Cache-Control":"public, max-age=0, s-maxage=604800"})}catch{return Y()}}),Z.get("/:domain",async(X)=>{let Q=X.req.param("domain"),Y=$?lc$($,"index.html"):null,G=Y?Bun.file(Y):null;if(!G||!await G.exists())return X.notFound();let J=await G.text();try{let K=await cF6(Su(Q)),W=lF6(Q,K);return X.html(dF6(J,W),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return X.html(J)}}),Z}var uF6=2500,mF6=1e4;var mc$=D(()=>{w8();hZ1();tw();q$()});function aa($,Z){return fetch(`${GW({})}${$}`,Z)}async function iF6($,Z,X){let Q=new URLSearchParams;if(Z)Q.set("pw",Z);if(X)Q.set("lang",X);let Y=Q.toString()?`?${Q.toString()}`:"",G=await aa(`/api/v2/public/diagnostics/${encodeURIComponent($)}${Y}`,{headers:{Accept:"application/json"}});if(G.status===404)return{status:"not_found",deck:null,scanned_at:null,drops:[]};if(!G.ok)throw Error(`report read HTTP ${G.status}`);let J=await G.json(),{deck:K,drops:W}=cA0(J);return{status:K.slides.length?"ready":"empty",deck:K,scanned_at:J.scanned_at,drops:W}}var pF6,CN,ic$=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},pc$;var nc$=D(()=>{w8();hY();tw();hZ1();pF6=new Set(["complete","errored","terminated","unknown"]),CN=new H1;CN.use("*",async($,Z)=>{let X=await Z8.api.getSession({headers:$.req.raw.headers});$.set("reportUser",X?.user?.id?{email:X.user.email}:void 0),await Z(),$.header("Cache-Control","private, no-store"),$.header("Vary","Cookie");return});CN.use("/link-token/*",ic$);CN.use("/suggest",ic$);CN.get("/site/:domain",async($)=>{let Z=$.req.param("domain").trim();if(!Z)return $.json({error:"domain is required"},400);let X=$.get("reportUser"),Q=$.req.query("key")?.trim()||void 0,Y=$.req.query("lang")?.trim()||void 0;try{let G=await iF6(Z,Q,Y);if($.header("Cache-Control","private, no-store"),X||!G.deck)return $.json(G);return $.json({...G,deck:{...G.deck,slides:G.deck.slides.slice(0,1)},truncated:G.status==="ready"})}catch{return $.json({error:"report read failed"},502)}});CN.post("/run",async($)=>{let Z=$.get("reportUser"),X;try{X=await $.req.json()}catch{return $.json({error:"invalid JSON"},400)}let Q=typeof X.domain==="string"?X.domain.trim():"";if(!Q)return $.json({error:"domain is required"},400);let Y=Z?.email,G=typeof X.distinctId==="string"&&X.distinctId.trim()&&X.distinctId.length<=200?X.distinctId.trim():void 0;try{let J=await aa("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${nw({})}`},body:JSON.stringify({url:Q,...Y?{email:Y}:{},distinct_id:G})});if(!J.ok)return $.json({error:`run HTTP ${J.status}`},502);let K=await J.json(),W=K.blocked?{state:"blocked"}:K.status==="fresh"?{state:"fresh"}:K.mode==="sync"?{state:"sync"}:{state:"running",id:K.id??null};return $.json(W)}catch{return $.json({error:"run failed"},502)}});CN.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let X=await aa(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${nw({})}`}});if(!X.ok)return $.json({error:`status HTTP ${X.status}`},502);let Y=(await X.json()).status??"unknown",G={done:pF6.has(Y),status:Y};return $.json(G)}catch{return $.json({error:"status failed"},502)}});CN.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let X=await aa(`/api/v2/public/link-tokens/${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(X.status===404)return $.json(null);if(!X.ok)return $.json({error:`link token HTTP ${X.status}`},502);return $.json(await X.json())}catch{return $.json({error:"link token resolve failed"},502)}});CN.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let X=await aa(`/api/v2/public/suggest?q=${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(!X.ok)return $.json({suggestions:[]});let Q=await X.json();return $.json({suggestions:Array.isArray(Q.suggestions)?Q.suggestions:[]})}catch{return $.json({suggestions:[]})}});pc$=CN});import{createHmac as nF6,timingSafeEqual as tF6}from"crypto";function oc$($,Z,X,Q=Date.now()){if(!Z||!X)return!1;let Y,G=[];for(let F of Z.split(",")){let H=F.indexOf("=");if(H<=0)continue;let N=F.slice(0,H).trim(),U=F.slice(H+1).trim();if(N==="t")Y=U;else if(N==="v1")G.push(U)}if(!Y||G.length===0)return!1;let J=Number(Y);if(!Number.isFinite(J)||Math.abs(Q/1000-J)>oF6)return!1;let K=nF6("sha256",X).update(`${Y}.${$}`).digest("hex"),W=Buffer.from(K,"hex");return G.some((F)=>{let H=Buffer.from(F,"hex");return W.length===H.length&&tF6(W,H)})}function rc$($){let Z;try{Z=JSON.parse($)}catch{return null}let X=CJ(Z),Q=CJ(CJ(X?.data)?.object);if(!X||typeof X.type!=="string"||!Q)return null;return{id:OF(X.id),type:X.type,created:typeof X.created==="number"?X.created:void 0,livemode:typeof X.livemode==="boolean"?X.livemode:void 0,data:{object:Q}}}function ac$($){switch($){case"active":case"trialing":return"active";case"past_due":return"past_due";default:return"canceled"}}function OF($){return typeof $==="string"?$:void 0}function CJ($){return typeof $==="object"&&$!==null?$:void 0}function lA0($){return typeof $==="number"?new Date($*1000):null}function lZ1($){return OF($)??OF(CJ($)?.id)}function rF6($){return lZ1($.subscription)??OF(CJ(CJ($.parent)?.subscription_details)?.subscription)}function aF6($){let Z=lA0($.current_period_end);if(Z)return Z;let X=CJ($.items)?.data;if(!Array.isArray(X))return null;let Q=0;for(let Y of X){let G=CJ(Y)?.current_period_end;if(typeof G==="number"&&G>Q)Q=G}return Q>0?new Date(Q*1000):null}function uZ1($,Z){let X=lA0($.created);return!!X&&!!Z.lastStripeEventAt&&X<Z.lastStripeEventAt}function cZ1($,Z){let X=lA0($.created);if(!X)return;return Z.lastStripeEventAt&&Z.lastStripeEventAt>X?void 0:X}async function sF6($,Z){let X=Z.data.object;switch(Z.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":{let Q=OF(CJ(X.metadata)?.orgId);if(!Q)return{handled:!1,reason:"no orgId"};if(OF(CJ(X.metadata)?.kind)==="topup"){if(X.mode!=="payment")return{handled:!1,reason:"topup with wrong mode"};if(OF(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let J=OF(X.id);if(!J)return console.error("stripe webhook: topup session without id",{eventId:Z.id,organizationId:Q}),{handled:!1,reason:"topup session without id"};let K=Number(CJ(X.metadata)?.creditCents);if(!Number.isInteger(K)||K<=0)return console.error("stripe webhook: paid topup with bad metadata \u2014 credit NOT applied",{eventId:Z.id,organizationId:Q,creditCents:CJ(X.metadata)?.creditCents}),{handled:!1,reason:"bad topup metadata"};return{handled:!0,organizationId:Q,topUp:{creditCents:K,referenceId:`stripe-topup:${J}`}}}if(X.mode!=="subscription")return{handled:!1,reason:"not a subscription checkout"};if(OF(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let Y=await $.getBilling(Q);if(!Y)return{handled:!1,reason:"unknown org"};let G=lZ1(X.subscription);if(Y.stripeSubscriptionId&&G&&Y.stripeSubscriptionId!==G)return console.error("stripe webhook: refused checkout rebind",{organizationId:Q,eventId:Z.id}),{handled:!1,reason:"org already bound to another subscription",orphanSubscriptionId:G};if(uZ1(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Q,{stripeCustomerId:lZ1(X.customer),stripeSubscriptionId:G,status:"active",lastStripeEventAt:cZ1(Z,Y)}),{handled:!0,organizationId:Q}}case"customer.subscription.updated":case"customer.subscription.deleted":{let Q=OF(X.id);if(!Q)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(Q);if(!Y)return{handled:!1,reason:"unknown subscription"};let G=Z.type==="customer.subscription.deleted";if(!G&&uZ1(Z,Y))return{handled:!1,reason:"stale event"};let J=G?"canceled":ac$(X.status);return await $.updateStripeState(Y.organizationId,{status:J,currentPeriodEnd:aF6(X),...G&&{stripeSubscriptionId:null},lastStripeEventAt:cZ1(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}case"invoice.paid":{let Q=rF6(X);if(!Q)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(Q);if(!Y)return{handled:!1,reason:"unknown subscription"};if(uZ1(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Y.organizationId,{status:"active",currentPeriodEnd:lA0(X.period_end),lastStripeEventAt:cZ1(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}default:return{handled:!1,reason:`unhandled event ${Z.type}`}}}function eF6($,Z){if(!Z.handled||$.livemode===!1)return null;let X=$.data.object;if(Z.topUp)return{name:"credits_topup_succeeded",organizationId:Z.organizationId,properties:{credit_cents:Z.topUp.creditCents}};switch($.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":return{name:"subscription_started",organizationId:Z.organizationId,properties:{}};case"customer.subscription.deleted":return{name:"subscription_canceled",organizationId:Z.organizationId,properties:{}};case"customer.subscription.updated":return{name:"subscription_updated",organizationId:Z.organizationId,properties:{status:ac$(X.status),...typeof X.cancel_at_period_end==="boolean"?{cancel_at_period_end:X.cancel_at_period_end}:{}}};case"invoice.paid":if(X.billing_reason==="subscription_create")return null;return{name:"subscription_renewed",organizationId:Z.organizationId,properties:{}};default:return null}}function tc$($,Z){let X=eF6($,Z);if(!X)return;fY({event:X.name,organizationId:X.organizationId,...$.id?{uuid:lp1(`stripe:${$.id}:${X.name}`)}:{},...$.created?{timestamp:new Date($.created*1000)}:{},properties:X.properties})}async function sc$($){let Z=new ZW(d8().db),X=await sF6(Z,$);if(!(X.handled&&X.topUp))tc$($,X);if(X.handled&&X.topUp)await Mw$({organizationId:X.organizationId,amountCents:X.topUp.creditCents,referenceId:X.topUp.referenceId}),tc$($,X);if(!X.handled&&X.orphanSubscriptionId)try{await Ye1(X.orphanSubscriptionId),console.error("stripe webhook: canceled orphan subscription",{subscriptionId:X.orphanSubscriptionId,eventId:$.id})}catch(Q){if(!(Q instanceof uY&&(Q.status===400||Q.status===404)))throw Q}return X}var oF6=300;var ec$=D(()=>{hG();C4();s60();QE();$01()});var $H6=1048576,dZ1;var $l$=D(()=>{w8();zN();q$();ec$();dZ1=new H1;dZ1.post("/webhook",k9({maxSize:$H6,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=b0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let X=await $.req.text();if(!oc$(X,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let Y=rc$(X);if(!Y)return $.json({error:"invalid payload"},400);let G=await sc$(Y);return console.log("stripe webhook",{eventId:Y.id,type:Y.type,livemode:Y.livemode,...G}),$.json({received:!0})})});import{timingSafeEqual as ZH6}from"crypto";function QH6($,Z,X){if(!Z?.startsWith("sha256="))return!1;let Q=new Bun.CryptoHasher("sha256",X).update($).digest("hex"),Y=Z.slice(7);if(Y.length!==Q.length)return!1;return ZH6(Buffer.from(Y),Buffer.from(Q))}var XH6=5242880,mZ1;var Zl$=D(()=>{w8();zN();g3();mZ1=new H1;mZ1.post("/webhook",k9({maxSize:XH6,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=process.env.GITHUB_WEBHOOK_SECRET;if(!Z)return $.json({error:"github webhook not configured"},503);let X=await $.req.text();if(!QH6(X,$.req.header("x-hub-signature-256"),Z))return $.json({error:"invalid signature"},400);if($.req.header("x-github-event")!=="push")return $.json({ok:!0,ignored:"event"});let Q;try{Q=JSON.parse(X)}catch{return $.json({error:"invalid payload"},400)}let Y=Q.ref,G=Q.repository?.full_name;if(!Y||!G)return $.json({ok:!0,ignored:"shape"});let K=(await Yn0())?.markTenantPoolsDirty(G,Y)??[];return $.json({ok:!0,pools:K})})});function Xl$($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var Ql$,YH6,GH6,Yl$;var Gl$=D(()=>{w8();D3();oy();yx();Ql$=new H1,YH6=["range","if-none-match","if-modified-since"],GH6=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];Ql$.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),X=Z.organization?.id;if(!Z.auth?.user?.id){if(Xu($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new Z$(401,{message:"Authentication required"})}if(!X)throw new Z$(401,{message:"Organization context required"});let Q=$.req.path.replace(/^.*\/files\//,"");if(!Q)throw new Z$(400,{message:"Missing file key"});let Y=await on(Q,Z);if(!Y)throw new Z$(503,{message:"Object storage not configured"});if(Y.startsWith("data:")&&dG()){let W=Y.match(/^data:([^;]+);base64,(.+)$/s);if(!W)throw new Z$(500,{message:"Invalid data URL from storage"});let[,F,H]=W,N=Buffer.from(H,"base64"),U=new Headers({"Content-Type":F,"Cache-Control":"private, max-age=86400"});return Xl$(U,F),new Response(N,{status:200,headers:U})}let G=new Headers;for(let W of YH6){let F=$.req.header(W);if(F)G.set(W,F)}let J=await fetch(Y,{headers:G});if(J.status===403||J.status===404)throw new Z$(404,{message:"File not found"});if(!J.ok&&J.status!==304&&J.status!==416)throw console.error(`[files] upstream storage error ${J.status} for key:`,Q),new Z$(502,{message:"Upstream storage error"});let K=new Headers;for(let W of GH6){let F=J.headers.get(W);if(F)K.set(W,F)}return K.set("Cache-Control","private, max-age=86400"),Xl$(K,K.get("content-type")??""),new Response(J.body,{status:J.status,headers:K})});Yl$=Ql$});var sa=_((a_)=>{var JH6=a_&&a_.__createBinding||(Object.create?function($,Z,X,Q){if(Q===void 0)Q=X;var Y=Object.getOwnPropertyDescriptor(Z,X);if(!Y||("get"in Y?!Z.__esModule:Y.writable||Y.configurable))Y={enumerable:!0,get:function(){return Z[X]}};Object.defineProperty($,Q,Y)}:function($,Z,X,Q){if(Q===void 0)Q=X;$[Q]=Z[X]}),KH6=a_&&a_.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))JH6(Z,$,X)};Object.defineProperty(a_,"__esModule",{value:!0});KH6(jY(),a_)});var Wl$=_((Jl$)=>{Object.defineProperty(Jl$,"__esModule",{value:!0});Jl$.version=void 0;Jl$.version="3.4.0"});var Nl$=_((BF)=>{var WH6=BF&&BF.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(BF,"__esModule",{value:!0});BF.NodeTransport=BF.VERSION=void 0;BF.nodeResolveHost=BH6;var r6=sa(),FH6=z0("net"),iZ1=z0("tls"),HH6=z0("path"),Fl$=z0("fs"),NH6=WH6(z0("dns")),UH6=Wl$();BF.VERSION=UH6.version;var OH6="nats.js";class Hl${socket;version;lang;yields=[];signal=(0,r6.deferred)();closedNotification=(0,r6.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=OH6,this.version=BF.VERSION}async connect($,Z){this.tlsName=$.tlsName,this.options=Z;let{tls:X}=this.options,{handshakeFirst:Q}=X||{};try{if(Q===!0)this.socket=await this.tlsFirst($);else this.socket=await this.dial($);if(this.done)this.socket?.destroy();let Y=await this.peekInfo();(0,r6.checkOptions)(Y,Z);let{tls_required:G,tls_available:J}=Y,K=J===!0&&Z.tls!==null;if(!Q&&(G||K))this.socket=await this.startTLS();if(this.done)this.socket?.destroy();if(G&&this.socket.encrypted!==!0)throw r6.errors.InvalidArgumentError.format("tls","is not available on this server");return this.connected=!0,this.setupHandlers(),this.signal.resolve(),Promise.resolve()}catch(Y){let G=Y;if(!G)G=new r6.errors.ConnectionError("error connecting - node provided an undefined error");let{code:J}=G,K=J==="ECONNREFUSED"?new r6.errors.ConnectionError("connection refused",{cause:G}):G;throw this.socket?.destroy(),K}}dial($){let Z=(0,r6.deferred)(),X,Q=(0,FH6.createConnection)($.port,$.hostname,()=>{Z.resolve(Q),Q.removeAllListeners()});return Q.on("error",(Y)=>{X=Y}),Q.on("close",()=>{Q.removeAllListeners(),Z.reject(X)}),Q.setNoDelay(!0),Z}get isClosed(){return this.done}close($){return this._closed($,!1)}peekInfo(){let $=(0,r6.deferred)(),Z;return this.socket.on("data",(X)=>{this.yields.push(X);let Q=r6.DataBuffer.concat(...this.yields),Y=(0,r6.extractProtocolMessage)(Q);if(Y!=="")try{let G=r6.INFO.exec(Y);if(!G)throw Error("unexpected response from server");let J=JSON.parse(G[1]);$.resolve(J)}catch(G){$.reject(G)}finally{this.socket.removeAllListeners()}}),this.socket.on("error",(X)=>{Z=X}),this.socket.on("close",()=>{this.socket.removeAllListeners(),$.reject(Z)}),$}loadFile($){if(!$)return Promise.resolve();let Z=(0,r6.deferred)();try{if($=(0,HH6.resolve)($),!(0,Fl$.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,Fl$.readFile)($,(X,Q)=>{if(X)return Z.reject(X);Z.resolve(Q)})}catch(X){Z.reject(X)}return Z}async loadClientCerts(){let $={},{certFile:Z,cert:X,caFile:Q,ca:Y,keyFile:G,key:J}=this.options.tls;try{if(Z){let K=await this.loadFile(Z);if(K)$.cert=K}else if(X)$.cert=X;if(G){let K=await this.loadFile(G);if(K)$.key=K}else if(J)$.key=J;if(Q){let K=await this.loadFile(Q);if(K)$.ca=[K]}else if(Y)$.ca=Y;return Promise.resolve($)}catch(K){return Promise.reject(K)}}async tlsFirst($){let Z,X={servername:this.tlsName,rejectUnauthorized:!0};if(this.socket)X.socket=this.socket;if(typeof this.options.tls==="object")try{let Y=await this.loadClientCerts()||{};X=(0,r6.extend)(X,this.options.tls,Y)}catch(Y){return Promise.reject(new r6.errors.ConnectionError(Y.message,{cause:Y}))}let Q=(0,r6.deferred)();try{let Y=(0,iZ1.connect)($.port,$.hostname,X,()=>{Y.removeAllListeners(),Q.resolve(Y)});Y.on("error",(G)=>{Z=G}),Y.on("secureConnect",()=>{if(X.rejectUnauthorized===!1)return;if(!Y.authorized)throw Y.authorizationError}),Y.on("close",()=>{Q.reject(Z),Y.removeAllListeners()}),Y.setNoDelay(!0)}catch(Y){Q.reject(new r6.errors.ConnectionError(Y.message,{cause:Y}))}return Q}async startTLS(){let $,Z={socket:this.socket,servername:this.tlsName,rejectUnauthorized:!0};if(typeof this.options.tls==="object")try{let Q=await this.loadClientCerts()||{};Z=(0,r6.extend)(Z,this.options.tls,Q)}catch(Q){return Promise.reject(new r6.errors.ConnectionError(Q.message,{cause:Q}))}let X=(0,r6.deferred)();try{let Q=(0,iZ1.connect)(Z,()=>{Q.removeAllListeners(),X.resolve(Q)});Q.on("error",(Y)=>{$=Y}),Q.on("secureConnect",()=>{if(Z.rejectUnauthorized===!1)return;if(!Q.authorized)throw Q.authorizationError}),Q.on("close",()=>{X.reject($),Q.removeAllListeners()})}catch(Q){X.reject(new r6.errors.ConnectionError(Q.message,{cause:Q}))}return X}setupHandlers(){let $;this.socket.on("data",(Z)=>{return this.yields.push(Z),this.signal.resolve()}),this.socket.on("error",(Z)=>{$=Z}),this.socket.on("end",()=>{if(this.socket?.destroyed)return;this.socket?.write(new Uint8Array(0),()=>{this.socket?.end()})}),this.socket.on("close",()=>{this._closed($,!1)})}[Symbol.asyncIterator](){return this.iterate()}async*iterate(){while(!0){if(this.yields.length===0)await this.signal;let $=this.yields;this.yields=[];for(let Z=0;Z<$.length;Z++){if(this.options.debug)console.info(`> ${(0,r6.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,r6.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 iZ1.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,r6.render)($)}`);let Z=(0,r6.deferred)();try{this.socket.write($,(X)=>{if(X){if(this.options.debug)console.error(`!!! ${(0,r6.render)($)}: ${X}`);return Z.reject(X)}return Z.resolve()})}catch(X){if(this.options.debug)console.error(`!!! ${(0,r6.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}}BF.NodeTransport=Hl$;function BH6($){let Z=(0,r6.deferred)();return NH6.default.lookup($,{all:!0},(X,Q)=>{if(X){Z.reject(X);return}let Y=[];for(let G of Q)Y.push(G.address);if(Y.length===0)Y.push($);Z.resolve(Y)}),Z}});var Ll$=_((Dl$)=>{Object.defineProperty(Dl$,"__esModule",{value:!0});Dl$.connect=DH6;var Ul$=Nl$(),Ol$=sa(),Bl$=sa();function DH6($={}){if((0,Bl$.hasWsProtocol)($))return Promise.reject(Bl$.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,Ol$.setTransportFactory)({factory:()=>{return new Ul$.NodeTransport},dnsResolveFn:Ul$.nodeResolveHost}),Ol$.NatsConnectionImpl.connect($)}});var wl$=_((_N)=>{var wH6=_N&&_N.__createBinding||(Object.create?function($,Z,X,Q){if(Q===void 0)Q=X;var Y=Object.getOwnPropertyDescriptor(Z,X);if(!Y||("get"in Y?!Z.__esModule:Y.writable||Y.configurable))Y={enumerable:!0,get:function(){return Z[X]}};Object.defineProperty($,Q,Y)}:function($,Z,X,Q){if(Q===void 0)Q=X;$[Q]=Z[X]}),EH6=_N&&_N.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))wH6(Z,$,X)};Object.defineProperty(_N,"__esModule",{value:!0});_N.connect=void 0;var jH6=Ll$();Object.defineProperty(_N,"connect",{enumerable:!0,get:function(){return jH6.connect}});EH6(sa(),_N)});function Pl$($){let Z=$?.connectFn??TH6,X=null,Q=null,Y=!1,G=!1,J=!1,K=[];function W(){return X!==null&&!X.isClosed()&&!X.isDraining()&&!J}function F(){console.log(`[NatsProvider] fireReady: ${K.length} callbacks`);for(let U of K)try{U()}catch{}}function H(U){(async()=>{for await(let O of U.status())if(O.type==="disconnect")console.log("[NatsProvider] Disconnected"),J=!0;else if(O.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),J=!1,Q=null,F()})().catch(()=>{})}async function N(U,O){let B=0;while(!G)try{X=await Z({servers:U,timeout:AH6,reconnect:!0,maxReconnectAttempts:-1,...O?{authenticator:O}:{}}),console.log(`[NatsProvider] Connected to ${X.getServer()} after ${B} attempt(s)`),Q=null,J=!1,H(X),F();return}catch{B++;let L=tZ(PH6,zH6,B-1,2,0.5);await L$(L)}}return{init(U,O){if(Y)return;Y=!0,G=!1;let B=O?.creds?El$.credsAuthenticator(new TextEncoder().encode(O.creds)):void 0;N(U,B).catch(()=>{})},isConnected(){return W()},getConnection(){return W()?X:null},getJetStream(){if(!W())return null;if(!Q)Q=zl$.jetstream(X);return Q},onReady(U){if(K.push(U),W())try{U()}catch{}},async drain(){if(G=!0,Y=!1,Q=null,J=!1,X){let U=X;X=null,await U.drain().catch(()=>{})}}}}function TH6($){return jl$.connect($)}var El$,jl$,zl$,zH6=100,PH6=3000,AH6=3000;var Al$=D(()=>{w4();El$=V(Zc(),1),jl$=V(wl$(),1),zl$=V(rD(),1)});function pZ1($,Z){return`${$}.${Z}`}class nZ1{cache;constructor($){this.cache=yh({ttlMs:$?.ttlMs??RH6,maxSize:$?.maxSize??IH6})}async get($,Z){return this.cache.get(pZ1($,Z))??null}async set($,Z,X){this.cache.set(pZ1($,Z),X)}async invalidate($,Z){this.cache.delete(pZ1($,Z))}teardown(){this.cache.clear()}}var RH6=600000,IH6=5000;var Tl$=()=>{};function dA0($,Z){return`${$}:${Z}`}function tZ1($){let Z=yh({ttlMs:$?.ttlMs??qH6,maxSize:$?.maxSize??MH6}),X=$?.getConnection,Q=crypto.randomUUID(),Y=new TextEncoder,G=new TextDecoder,J=null;function K(W,F){let H=X?.();if(!H)return;try{H.publish(Rl$,Y.encode(JSON.stringify({organizationId:W,keyId:F,originId:Q})))}catch(N){console.warn("[ProviderKeyCache] Publish failed (non-critical):",N)}}return{get(W,F){return Z.get(dA0(W,F))},set(W,F,H){Z.set(dA0(W,F),H)},invalidate(W,F){Z.delete(dA0(W,F)),K(W,F)},start(){if(J)return;let W=X?.();if(!W)return;J=W.subscribe(Rl$),(async()=>{for await(let F of J)try{let H=JSON.parse(G.decode(F.data));if(H.originId===Q)continue;Z.delete(dA0(H.organizationId,H.keyId))}catch{}})().catch(console.error)},teardown(){J?.unsubscribe(),J=null,Z.clear()}}}var Rl$="studio.ai-provider-keys.invalidate",qH6=30000,MH6=5000;var Il$=()=>{};class oZ1{options;subscription=null;onCancel=null;encoder=new TextEncoder;originId=crypto.randomUUID();constructor($){this.options=$}async start($){if($)this.onCancel=$;if(this.subscription)return;if(!this.onCancel)return;let Z=this.options.getConnection();if(!Z)return;let X=new TextDecoder,Q=Z.subscribe("studio.decopilot.cancel");this.subscription=Q,(async()=>{for await(let Y of Q)try{let G=JSON.parse(X.decode(Y.data));if(G.originId===this.originId)continue;this.onCancel?.(G.taskId)}catch{}})().catch(console.error)}broadcast($){if(/[.*>\s]/.test($)){console.warn("[NatsCancelBroadcast] Invalid threadId, skipping broadcast");return}this.onCancel?.($);try{let Z=this.options.getConnection();if(!Z)return;let X=this.encoder.encode(JSON.stringify({taskId:$,originId:this.originId}));Z.publish("studio.decopilot.cancel",X)}catch(Z){console.warn("[NatsCancelBroadcast] Publish failed (non-critical):",Z)}}async stop(){this.subscription?.unsubscribe(),this.subscription=null,this.onCancel=null}}var ql$=($)=>{let Z;return()=>Z??=$()},rZ1,aZ1;var Ml$=D(()=>{I6();rZ1=ql$(()=>w$.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),aZ1=ql$(()=>w$.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function fH6(){return{name:sH,subjects:[`${Er0}.>`],storage:DK.StorageType.File,max_age:SH6,max_bytes:_H6,max_msgs_per_subject:vH6,discard:DK.DiscardPolicy.Old,retention:DK.RetentionPolicy.Limits,duplicate_window:CH6,num_replicas:1}}class Sl${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 kl$($){let Z=Vl$.headers();for(let[X,Q]of Object.entries($))Z.set(X,Q);return Z}function gH6($,Z){let X=0;return{publish(Q,Y,G,J){Q.publish(Y,G,J?{headers:J}:void 0).catch((K)=>{if(X++,VH6().add(1,{"org.id":Z??"unknown"}),X===1||X%100===0)console.warn(`[Decopilot] JetStream publish failed for thread ${$} (${X} total):`,K)})},get errorCount(){return X}}}function hH6($){if(!($ instanceof Error))return!1;if($.name==="TimeoutError")return!0;return/timeout|no responders|503/i.test($.message)}class sZ1{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=fH6(),X=await v5(async()=>{let Q=this.options.getJetStreamManager?await this.options.getJetStreamManager():await DK.jetstreamManager($);try{await Q.streams.info(sH),await Q.streams.update(sH,Z)}catch(Y){if(Y instanceof Error&&Y.message.includes("stream not found"))await Q.streams.add(Z);else if(Y instanceof Error&&/can ?not change.*storage|storage type/i.test(Y.message))await Q.streams.delete(sH),await Q.streams.add(Z);else throw Y}return Q},{maxAttempts:5,minTimeout:250,maxTimeout:4000,jitter:0.5,isRetriable:hH6});this.js=this.options.getJetStream(),this.jsm=X,console.log(`[Decopilot] StreamBuffer.init ${this.js?"ready":"degraded (js=null)"}`)}pump($,Z,X,Q){let Y=this.js;if(!Y)return console.warn(`[Decopilot] pump: JetStream client unavailable for thread ${Z}; chunks NOT published to NATS`),Promise.resolve();let G=gH6(Z,Q),J=!1,K=()=>{if(J)return;J=!0;let F=AU$(Z);Y.publish(F.subject,F.data).catch(()=>{})};X.addEventListener("abort",K,{once:!0});let W=(F)=>{let H=performance.now(),N=zr0(F,{runId:Z}),U=performance.now()-H;rZ1().record(U),aZ1().add(1,{"org.id":Q??"unknown"}),yH6?.record(U,N.reduce((O,B)=>O+B.data.length,0));for(let O of N)G.publish(Y,O.subject,O.data,O.headers?kl$(O.headers):void 0)};return(async()=>{let F=$.getReader(),H=0,N=0,U;try{while(!0){let{done:O,value:B}=await F.read();if(O)break;if(W(B),N++,++H>=64)H=0,await new Promise((L)=>setImmediate(L))}}catch(O){U=O,console.warn(`[Decopilot] stream pump error for thread ${Z}:`,O?.message??O)}finally{if(F.releaseLock(),K(),xH6)console.warn(JSON.stringify({msg:"decopilot-stream-diag",event:"pump-done",taskId:Z,publishedChunks:N,publishErrors:G.errorCount}))}if(U!==void 0)throw U})()}async publishRawChunk($,Z,X){let Q=this.js;if(!Q)return!1;let Y=performance.now(),G=zr0(Z,{runId:$,dedup:X});rZ1().record(performance.now()-Y),aZ1().add(1);for(let J of G)await Q.publish(J.subject,J.data,{...J.headers?{headers:kl$(J.headers)}:{},...J.msgId?{msgID:J.msgId}:{}});return!0}async publishDone($,Z,X){let Q=this.js;if(!Q)return!1;let Y=PU$({runId:$,fenceToken:Z,finalSeq:X});return await Q.publish(Y.subject,Y.data,{msgID:Y.msgId}),!0}async createTailStream($,Z,X){let Q=this.js;if(!Q)return console.warn(`[Decopilot] createTailStream: JetStream client unavailable for thread ${$}; no live tail`),null;let Y=X?.deliverPolicy==="new"?DK.DeliverPolicy.New:DK.DeliverPolicy.All,G=X?.closeOnDone??!1,J=cB($),K;try{K=await(await Q.consumers.get(sH,{filter_subjects:J,deliver_policy:Y})).consume()}catch(L){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",L?.message??L),null}let H=IL0({messages:async function*(){try{for await(let L of K)yield{subject:L.subject,data:L.data,headers:L.headers}}finally{K.stop()}}(),onCancel:()=>K.stop()}).pipeThrough(PL0()).pipeThrough(AL0()).getReader(),N=!1,U=()=>{if(N)return;N=!0;try{H.releaseLock()}catch{}},O=!1,B=()=>{if(O)return;O=!0,K.stop(),H.cancel().catch(()=>{}),U()};return Z?.addEventListener("abort",B,{once:!0}),new ReadableStream({async pull(L){for(;;){let{done:w,value:E}=await H.read();if(w){B(),L.close();return}let j=E;if(j.kind==="done"){if(G){B(),L.close();return}continue}L.enqueue(j.chunk);return}},cancel(){B()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge(sH,{filter:cB($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var DK,Vl$,kH6=($)=>{let Z;return()=>Z??=$()},VH6,SH6=86400000000000,CH6=120000000000,_H6=4294967296,vH6=500000,bH6,xH6,yH6;var Cl$=D(()=>{w4();Pr0();qL0();TL0();I6();Ml$();DK=V(rD(),1),Vl$=V(Zc(),1),VH6=kH6(()=>w$.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"}));bH6=process.env.STREAM_ENCODE_TRACE==="1",xH6=process.env.DECOPILOT_STREAM_TRACE==="1";yH6=bH6?new Sl$:null});function mA0($,Z,X,Q){if(!Q)return!1;return $.emit(Z,gK(X,Q.status,{title:Q.title??void 0,virtualMcpId:Q.virtual_mcp_id??void 0,createdBy:Q.created_by??void 0,triggerId:Q.trigger_id??null,branch:Q.branch??null,harnessId:Q.harness_id??void 0,createdAt:Q.created_at,updatedAt:Q.updated_at})),!0}var _l$=D(()=>{C8()});class eZ1{storage;options;timer=null;constructor($,Z={}){this.storage=$;this.options=Z}start(){if(this.timer)return;let $=this.options.intervalMs??300000;this.timer=setInterval(()=>{this.runOnce()},$)}async runOnce(){let $=this.options.staleAfterMs??3600000;try{let Z=await this.storage.sweepAbandoned($);if(Z>0)console.log(`[async-research-sweeper] marked ${Z} stale jobs as abandoned`);return Z}catch(Z){return console.error("[async-research-sweeper] sweep failed",Z),0}}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}async function vl$($,Z,X){let Q=Z.organizationId;if(Z.status!=="in_review")return!1;if(!wC(X))return!1;if(await $.storage.taskBoard.hasHumanRejectedDone(Z.id,Q))return!1;let Y=await $.storage.taskBoard.update(Z.id,Q,{status:"done"},Z.updatedBy);return await W6($,{taskBoardItemId:Z.id,action:"status_changed",actorId:null,data:{from:Z.status,to:"done",reason:"pr_merged"}}),h$(Q,Y),console.log(`[task-board-review-sweeper] ${Z.id}: linked PR already merged \u2014 moved to done`),!0}var fl$=D(()=>{WX();py();L5()});function pH6($){return $ instanceof s7}function nH6($,Z){return Z-$>=mH6}class $71{taskBoard;contextFactory;billing;options;timer=null;running=!1;cursor=null;constructor($,Z,X,Q={}){this.taskBoard=$;this.contextFactory=Z;this.billing=X;this.options=Q}start(){if(this.timer)return;let $=this.options.intervalMs??uH6;this.timer=setInterval(()=>{this.runOnce()},$),this.timer.unref()}async runOnce(){if(this.running)return 0;this.running=!0;let $=0;try{let Z=this.options.batchSize??lH6,X=this.options.itemIntervalMs??cH6,Q=new Date(Date.now()-X),Y=await this.taskBoard.listItemsPendingReview(Z,this.cursor,Q),G=Y.at(-1);this.cursor=Y.length===Z&&G?{updatedAt:G.updatedAt,id:G.id}:null;for(let{id:J,organizationId:K}of Y)try{if(await this.reconcileItem(J,K,Q))$++}catch(W){console.error(`[task-board-review-sweeper] ${J} failed`,W)}await this.reapNeverStartedThreads(Z),$+=await this.dispatchDueRetries(Z),await this.reactToUnhandledFailures(Z)}catch(Z){console.error("[task-board-review-sweeper] sweep failed",Z)}finally{this.running=!1}return $}async reapNeverStartedThreads($){try{let Z=await this.taskBoard.failNeverStartedLinkedThreads($,new Date(Date.now()-pn0),yt0);for(let X of Z)console.warn(`[task-board-review-sweeper] failed never-started thread ${X.threadId} on ${X.itemId}`)}catch(Z){console.error("[task-board-review-sweeper] reaping failed",Z)}}async reactToUnhandledFailures($){let Z=await this.taskBoard.listItemsStuckAfterFailure($,new Date(Date.now()-iH6));for(let{id:X,organizationId:Q,threadId:Y}of Z)try{console.warn(`[task-board-review-sweeper] reacting to an unhandled failure on ${X}`),await bt0(this.taskBoard,Y,Q),await xt0(this.taskBoard,this.billing,Y,Q)}catch(G){console.error(`[task-board-review-sweeper] unhandled-failure reaction for ${X} failed`,G)}}async dispatchDueRetries($){let Z=0,X=await this.taskBoard.listItemsDueForRetry($,new Date);for(let{id:Q,organizationId:Y,attempts:G}of X)try{if(!await this.taskBoard.claimDueRetry(Q,Y,new Date))continue;let J=await this.taskBoard.getById(Q,Y);if(!J||J.status!=="in_progress"||J.assigneeId!==U8)continue;let K=await this.contextFactory(Y,J.assignedBy??J.createdBy);if(!K)continue;await m3(K,J,{runClass:"retry"}),Z++,console.warn(`[task-board-review-sweeper] re-dispatched ${Q} after a failure (attempt ${G})`)}catch(J){if(console.error(`[task-board-review-sweeper] retry dispatch for ${Q} failed`,J),pH6(J)){await this.returnToTodo(Q,Y,J instanceof Error?J.message:String(J));continue}await this.taskBoard.scheduleRunRetry(Q,Y,G,new Date(Date.now()+dH6)).catch((K)=>console.error(`[task-board-review-sweeper] re-arming ${Q} failed`,K))}return Z}async returnToTodo($,Z,X){try{let Q=await this.taskBoard.getById($,Z);if(!Q||Q.status!=="in_progress")return;let Y=await this.taskBoard.returnToTodoAfterFailure($,Z,Q.updatedBy);if(!Y)return;await this.taskBoard.recordActivity({taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:"in_progress",to:"todo",reason:X}}).catch(()=>{}),h$(Z,Y)}catch(Q){console.error(`[task-board-review-sweeper] returning ${$} to todo failed`,Q)}}async handOffReviewWithoutPr($,Z){let X=await this.taskBoard.listActivity(Z.id,Z.organizationId);if(!nH6(RH(X),Date.now()))return;await CW($,Z,"no pull request is linked to this task \u2014 there is nothing for a "+"reviewer to review")}async reconcileItem($,Z,X){if(!await this.taskBoard.claimSweep($,Z,X))return!1;let Q=await this.taskBoard.getById($,Z);if(!Q)return!1;if(Q.status!=="in_review")return!1;let Y=Q.assigneeId===U8,G=await this.taskBoard.listPrs($,Z),J=await this.contextFactory(Z,Q.assignedBy??Q.createdBy);if(!J)return!1;if(G.length===0){if(Y)await this.handOffReviewWithoutPr(J,Q);return!1}let K=await Promise.all(G.map(async(W)=>({...W,...await ty(Z,W)})));if(K.every((W)=>W.state===null))console.warn(`[task-board-review-sweeper] ${$}: no live PR state from GitHub (${K.length} PR(s)) \u2014 proceeding on unknown`);if(await vl$(J,Q,K))return!0;if(await WO$(J,Q))return!0;if(!Y)return!1;if(!Qo0(K))return!1;return await gD0(J,Q,{previewMatchesHead:Yo0(K)}),!0}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}var uH6=60000,cH6=300000,lH6=50,dH6=60000,mH6=900000,iH6=120000;var bl$=D(()=>{X9();tt0();SW();wt();fl$();L5();nG();gt0();KJ();mn()});import{readdir as tH6,rm as iA0}from"fs/promises";import{join as pA0}from"path";async function nA0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-oH6),Z.setUTCHours(0,0,0,0);let X=0;try{let Q=await s_($);for(let Y of Q)if(/^\d{4}$/.test(Y))X+=await xl$($,Y,Z);else if(!Y.startsWith(".")){let G=pA0($,Y),J=await s_(G);for(let W of J){if(!/^\d{4}$/.test(W))continue;X+=await xl$(G,W,Z)}if((await s_(G)).length===0)await iA0(G,{recursive:!0,force:!0})}}catch(Q){console.warn("monitoring retention cleanup failed:",Q)}return X}async function xl$($,Z,X){let Q=0,Y=pA0($,Z),G=await s_(Y);for(let K of G){if(!/^\d{2}$/.test(K))continue;let W=pA0(Y,K),F=await s_(W);for(let N of F){if(!/^\d{2}$/.test(N))continue;let U=new Date(`${Z}-${K}-${N}T00:00:00Z`);if(isNaN(U.getTime()))continue;if(U<X){let O=pA0(W,N);await iA0(O,{recursive:!0,force:!0}),Q++}}if((await s_(W)).length===0)await iA0(W,{recursive:!0,force:!0})}if((await s_(Y)).length===0)await iA0(Y,{recursive:!0,force:!0});return Q}async function s_($){try{return(await tH6($)).filter((X)=>!X.startsWith("."))}catch{return[]}}var oH6=30;var Z71=()=>{};import{DBOS as X71,SchedulerMode as rH6}from"@dbos-inc/dbos-sdk";async function sH6(){let $=[vJ(),e_(),EF()],Z=0;for(let X of $)try{Z+=await nA0(X)}catch(Q){console.error("[monitoring-retention] cleanup failed:",Q)}return console.log(`[monitoring-retention] deleted ${Z} day-dir(s) across ${$.length} signal dir(s)`),{deleted:Z,dirs:$.length}}async function eH6($,Z){await X71.runStep(()=>sH6(),{name:"monitoringRetention"})}function gl$(){if(yl$)return;yl$=!0;let $=X71.registerWorkflow(eH6,{name:"monitoringRetentionWorkflow"});X71.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:aH6,mode:rH6.ExactlyOncePerIntervalWhenActive})}var aH6="23 4 * * *",yl$=!1;var hl$=D(()=>{DY();Z71()});function ul$($){return async(Z,X)=>{let Q=await $.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["member.role","organization.id as orgId","organization.slug as orgSlug","organization.name as orgName"]).where("member.userId","=",X).where("member.organizationId","=",Z).executeTakeFirst();if(!Q)return console.warn(`[automationContextFactory] User ${X} not found in org ${Z} \u2014 returning null`),null;let Y=await GJ.create();Y.auth.user={id:X,role:Q.role},Y.organization={id:Q.orgId,slug:Q.orgSlug,name:Q.orgName};let G=await en($.db,Z,Q.role);return Y.boundAuth=X51({auth:Y.authInstance,headers:new Headers,role:Q.role,permissions:G,userId:X}),Y.access=new Cw(X,void 0,Y.boundAuth,Q.role,"self"),SB(Y,{id:Q.orgId,slug:Q.orgSlug}),Y}}var cl$=D(()=>{_w();CB()});function $N6(){return[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}]}function ZN6(){return{services:$N6(),migrationsStatus:"pending",serverUrl:null,logs:[]}}function QN6(){for(let $ of XN6)$()}function ll$($){let Z=[...Q71.logs,$];Q71={...Q71,logs:Z.length>500?Z.slice(-500):Z},QN6()}function Y71(){return YN6}var Q71,XN6,YN6=!1;var G71=D(()=>{Q71=ZN6(),XN6=new Set});import{EventEmitter as GN6}from"events";var J71;var dl$=D(()=>{G71();J71=new GN6;J71.on("request",($)=>{ll$($)})});function ml$(){return async($,Z)=>{let X=Date.now(),Q=$.req.method,Y=$.req.path;if(Y==="/api/auth/get-session"||Y.includes("favicon")){await Z();return}let G="",J=!1;if(Y.startsWith("/mcp")&&Q==="POST"){J=!0;try{if($.req.header("Content-Type")?.includes("application/json")){let U=await $.req.raw.clone().json();if(U.method==="tools/call"&&U.params?.name){let O=Cu(U.params.name),B=U.params.arguments||{},L=Object.keys(B).map((E)=>Cu(E)),w=L.length>0?L.slice(0,3).join(",")+(L.length>3?"\u2026":""):"";G=`${Y5.tool}${O}${Y5.dim}(${w})${Y5.reset}`}else if(U.method)G=`${Y5.dim}${Cu(U.method)}${Y5.reset}`}}catch{}}let K=Cu(Y);if(Y.startsWith("/mcp/conn_")){let H=Y.split("/")[2]??"";K=`/mcp/${Y5.mcp}${Cu(H.slice(0,12))}\u2026${Y5.reset}`}else if(Y==="/mcp")K=`${Y5.mcp}/mcp${Y5.reset}`;else if(Y==="/mcp/registry")K=`${Y5.mcp}/mcp/registry${Y5.reset}`;let W=KN6(Q),F=J?"\u25C0":"\u2190";if(!Y71())console.log(`${Y5.dim}${F}${Y5.reset} ${W}${Q}${Y5.reset} ${K}${G?` ${G}`:""}`);try{await Z()}finally{let H=Date.now()-X,N=$.res.status,U=JN6(N),O=H<1000?`${H}ms`:`${(H/1000).toFixed(1)}s`,B=J?"\u25B6":"\u2192";if(!Y71())console.log(`${Y5.dim}${B}${Y5.reset} ${W}${Q}${Y5.reset} ${K}${G?` ${G}`:""} ${U}${N}${Y5.reset} ${Y5.duration}${O}${Y5.reset}`);J71.emit("request",{method:Q,path:Cu(Y),status:N,duration:H,timestamp:new Date})}}}var Y5,JN6=($)=>{if($>=500)return Y5.serverError;if($>=400)return Y5.clientError;if($>=300)return Y5.redirect;return Y5.ok},KN6=($)=>{return Y5[$]||Y5.reset},Cu=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var il$=D(()=>{G71();dl$();Y5={reset:"\x1B[0m",dim:"\x1B[2m",bold:"\x1B[1m",GET:"\x1B[36m",POST:"\x1B[33m",PUT:"\x1B[35m",DELETE:"\x1B[31m",ok:"\x1B[32m",redirect:"\x1B[36m",clientError:"\x1B[33m",serverError:"\x1B[31m",mcp:"\x1B[35m",tool:"\x1B[96m",duration:"\x1B[90m"}});import{createHmac as ol$}from"crypto";import{mkdir as WN6,readdir as FN6,rm as pl$,stat as rl$}from"fs/promises";import{join as W71,relative as HN6}from"path";import{z as P$}from"zod";function sl$($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return W71(NN6,Z)}function el$($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function K71($,Z){let X=sl$($),Q=el$(Z);return W71(X,Q)}function UN6($,Z,X,Q){let Y=b0().encryptionKey||"dev-secret",G=`${$}:${Z}:${X}:${Q}`;return ol$("sha256",Y).update(G).digest("hex")}function tl$($,Z,X,Q,Y){let G=Math.floor(Date.now()/1000)+Q,J=UN6(Z,X,G,Y),K=new URL(`/api/dev-assets/${Z}/${el$(X)}`,$);return K.searchParams.set("expires",G.toString()),K.searchParams.set("signature",J),K.searchParams.set("method",Y),K.toString()}function $d$($,Z,X){let Q=`${$}:${Z.getTime()}:${X}`;return`"${ol$("md5","etag").update(Q).digest("hex")}"`}async function Zd$($,Z,X,Q,Y){try{let G=await FN6($,{withFileTypes:!0});for(let J of G){let K=W71($,J.name),F=HN6(Z,K).replace(/\\/g,"/");if(X&&!F.startsWith(X))continue;if(J.isDirectory())if(Q){let H=F+"/";if(!X||H.startsWith(X)){if(!(X?F.slice(X.length):F).includes("/"))Y.commonPrefixes.add(H)}}else await Zd$(K,Z,X,Q,Y);else if(J.isFile()){if(Q&&X){let H=F.slice(X.length);if(H.includes(Q)){let N=H.indexOf(Q),U=X+H.slice(0,N+1);Y.commonPrefixes.add(U);continue}}try{let H=await rl$(K);Y.objects.push({key:F,size:H.size,lastModified:H.mtime.toISOString(),etag:$d$(K,H.mtime,H.size)})}catch{}}}}catch{}}function Xd$($,Z){let Q=t($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:P$.object({prefix:P$.string().optional(),maxKeys:P$.number().optional().default(1000),continuationToken:P$.string().optional(),delimiter:P$.string().optional()}),outputSchema:P$.object({objects:P$.array(P$.object({key:P$.string(),size:P$.number(),lastModified:P$.string(),etag:P$.string()})),nextContinuationToken:P$.string().optional(),isTruncated:P$.boolean(),commonPrefixes:P$.array(P$.string()).optional()}),handler:async(Y)=>{let G=Y,J=G.prefix||"",K=G.maxKeys??1000,W=G.delimiter,F=G.continuationToken,H=sl$(Q);await WN6(H,{recursive:!0});let N={objects:[],commonPrefixes:new Set};await Zd$(H,H,J,W,N),N.objects.sort((w,E)=>w.key.localeCompare(E.key));let U=0;if(F){if(U=N.objects.findIndex((w)=>w.key>F),U===-1)U=N.objects.length}let O=N.objects.slice(U,U+K),B=U+K<N.objects.length,L=B?O[O.length-1]?.key:void 0;return{objects:O,isTruncated:B,nextContinuationToken:L,commonPrefixes:Array.from(N.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:P$.object({key:P$.string()}),outputSchema:P$.object({contentType:P$.string().optional(),contentLength:P$.number(),lastModified:P$.string(),etag:P$.string(),metadata:P$.record(P$.string(),P$.string()).optional()}),handler:async(Y)=>{let G=Y,J=K71(Q,G.key),K=await rl$(J);return{contentType:h51(G.key),contentLength:K.size,lastModified:K.mtime.toISOString(),etag:$d$(J,K.mtime,K.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:P$.object({key:P$.string(),expiresIn:P$.number().optional()}),outputSchema:P$.object({url:P$.string(),expiresIn:P$.number()}),handler:async(Y)=>{let G=Y,J=G.expiresIn??nl$;return{url:tl$(Z,Q,G.key,J,"GET"),expiresIn:J}}},{name:"PUT_PRESIGNED_URL",description:"Generate a presigned URL for uploading a file to local storage",inputSchema:P$.object({key:P$.string(),expiresIn:P$.number().optional(),contentType:P$.string().optional()}),outputSchema:P$.object({url:P$.string(),expiresIn:P$.number()}),handler:async(Y)=>{let G=Y,J=G.expiresIn??nl$;return{url:tl$(Z,Q,G.key,J,"PUT"),expiresIn:J}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:P$.object({key:P$.string()}),outputSchema:P$.object({success:P$.boolean(),key:P$.string()}),handler:async(Y)=>{let G=Y,J=K71(Q,G.key);try{return await pl$(J),{success:!0,key:G.key}}catch{return{success:!1,key:G.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:P$.object({keys:P$.array(P$.string()).max(1000)}),outputSchema:P$.object({deleted:P$.array(P$.string()),errors:P$.array(P$.object({key:P$.string(),message:P$.string()}))}),handler:async(Y)=>{let G=Y,J=[],K=[];return await Promise.all(G.keys.map(async(W)=>{let F=K71(Q,W);try{await pl$(F),J.push(W)}catch(H){K.push({key:W,message:H instanceof Error?H.message:"Unknown error"})}})),{deleted:J,errors:K}}}]}async function F71($,Z,X){let Q=Xd$(Z,X),Y=new iK({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:F5});for(let J of Q){let K="shape"in J.inputSchema?J.inputSchema.shape:P$.object({}).shape,W=J.outputSchema&&"shape"in J.outputSchema?J.outputSchema.shape:P$.object({}).shape;Y.registerTool(J.name,{description:J.description??"",inputSchema:K,outputSchema:W,annotations:J.annotations,_meta:J._meta},async(F)=>{try{let H=await J.handler(F);return{content:[{type:"text",text:JSON.stringify(H)}],structuredContent:H}}catch(H){return{content:[{type:"text",text:`Error: ${H.message}`}],isError:!0}}})}let G=new YQ({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await Y.connect(G),DJ(Y,G,$,"mcp:dev-assets")}async function Qd$($,Z,X,Q){let G=Xd$(X,Q).find((J)=>J.name===$);if(!G)return{content:[{type:"text",text:`Tool not found: ${$}`}],isError:!0};try{let J=await G.handler(Z);return{content:[{type:"text",text:JSON.stringify(J)}]}}catch(J){return{content:[{type:"text",text:J instanceof Error?J.message:String(J)}],isError:!0}}}var NN6="./data/assets",nl$=3600,al$,Yd$;var Gd$=D(()=>{q$();Og();w8();Rd();xC();hX();lP0();al$=new H1;al$.all("/",async($)=>{let Z=$.get("studioContext"),X=new URL($.req.url),Q=`${X.protocol}//${X.host}`;return F71($.req.raw,Z,Q)});Yd$=al$});var Jd$={};J4(Jd$,{mountDevRoutes:()=>ON6});function ON6($,Z){$.all("/mcp/:connectionId{.*_dev-assets$}",Z,async(Q)=>{let Y=Q.get("studioContext"),G=new URL(Q.req.url),J=`${G.protocol}//${G.host}`;return F71(Q.req.raw,Y,J)}),$.all("/mcp/:connectionId{.*_dev-assets$}/call-tool/:toolName",Z,async(Q)=>{let Y=Q.get("studioContext"),G=new URL(Q.req.url),J=`${G.protocol}//${G.host}`,K=Q.req.param("toolName");if(!K)return Q.json({error:"Missing tool name"},400);let W=await Q.req.json(),F=await Qd$(K,W,Y,J);if(F.isError)return Q.json(F.content,500);return Q.json(F.content)}),$.use("/mcp/dev-assets",Z),$.route("/mcp/dev-assets",Yd$);let X=new H1;X.use("*",OK({mountPath:"/api/dev-assets"})),X.route("/",cP0({orgFromPath:!1})),$.route("/api/dev-assets",X)}var Kd$=D(()=>{w8();_51();lP0();Gd$()});import{sql as BN6}from"kysely";import{randomUUID as Wd$}from"crypto";import{z as DN6}from"zod";async function wN6($){let Z=new Date().toISOString(),X=Wd$(),Q=S8.SELF($.organizationId),Y="registry.publish_request.created",G={requestId:$.request.id,requestedId:$.request.requested_id,title:$.request.title,status:$.request.status,createdAt:$.request.created_at,requester:{name:$.request.requester_name,email:$.request.requester_email}};await $.db.insertInto("events").values({id:X,organization_id:$.organizationId,type:"registry.publish_request.created",source:Q,specversion:"1.0",subject:$.request.id,time:Z,datacontenttype:"application/json",dataschema:null,data:JSON.stringify(G),cron:null,status:"pending",attempts:0,last_error:null,next_retry_at:null,created_at:Z,updated_at:Z}).execute();let J=await $.db.selectFrom("event_subscriptions").select(["id"]).where("organization_id","=",$.organizationId).where("enabled","=",1).where("event_type","=","registry.publish_request.created").where((K)=>K.or([K("publisher","is",null),K("publisher","=",Q)])).execute();if(J.length>0)await $.db.insertInto("event_deliveries").values(J.map((K)=>({id:Wd$(),event_id:X,subscription_id:K.id,status:"pending",attempts:0,last_error:null,delivered_at:null,next_retry_at:null,created_at:Z}))).execute();try{await BN6`SELECT
2869
2869
  pg_notify('studio_events', ${X}),