decocms 4.268.0 → 4.268.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-CRN3ysOa.js → AlertCircle-C9x_o_fj.js} +1 -1
  2. package/dist/client/assets/{AreaChart-CbyoUeNT.js → AreaChart-CdizwnZp.js} +1 -1
  3. package/dist/client/assets/{ArrowLeft-BWXVS7qh.js → ArrowLeft-DCj1qYfu.js} +1 -1
  4. package/dist/client/assets/{ArrowUp-BrQWZ_Zy.js → ArrowUp-Cpwos_DS.js} +1 -1
  5. package/dist/client/assets/{Check-BwPXViwQ.js → Check-CRnez91K.js} +1 -1
  6. package/dist/client/assets/{CheckCircle-DItEp_48.js → CheckCircle-vrC3_Vfx.js} +1 -1
  7. package/dist/client/assets/{ChevronDown-BQ2-avdq.js → ChevronDown-Dnsyqb8y.js} +1 -1
  8. package/dist/client/assets/{ChevronRight-DIQh4uVu.js → ChevronRight-0SqAtFA1.js} +1 -1
  9. package/dist/client/assets/{ChevronSelectorVertical-DyDtKivX.js → ChevronSelectorVertical-DSzDo6o_.js} +1 -1
  10. package/dist/client/assets/{ChevronUp-CfKmchlf.js → ChevronUp-laDKx_qP.js} +1 -1
  11. package/dist/client/assets/{Copy01-D1pYggcL.js → Copy01-DEZWAZG1.js} +1 -1
  12. package/dist/client/assets/{CreditCard01-Dvo2lC0V.js → CreditCard01-Dkn0rPz4.js} +1 -1
  13. package/dist/client/assets/{DotsVertical-VL5CgJFT.js → DotsVertical-CP_Ba8vF.js} +1 -1
  14. package/dist/client/assets/{Download01-CJO-bqRo.js → Download01-CsdEM1It.js} +1 -1
  15. package/dist/client/assets/{Eye-CxcSic4G.js → Eye-Bf62QX2T.js} +1 -1
  16. package/dist/client/assets/{FilterLines-BWSdkw7w.js → FilterLines-B_UrSrlu.js} +1 -1
  17. package/dist/client/assets/{Globe01-D8tRVhpe.js → Globe01-6XQXRvcD.js} +1 -1
  18. package/dist/client/assets/{Globe04-DnHo38ny.js → Globe04-CBwJkkBp.js} +1 -1
  19. package/dist/client/assets/{HardDrive-CNlRN2Wo.js → HardDrive-BizZ6Nr3.js} +1 -1
  20. package/dist/client/assets/{Key01-9m29DvMP.js → Key01-CdJqhAoR.js} +1 -1
  21. package/dist/client/assets/{LinkExternal01-BlQDZc-j.js → LinkExternal01-D9q7rgDw.js} +1 -1
  22. package/dist/client/assets/{LockUnlocked01-BJ7hCM9a.js → LockUnlocked01-BpoMod4u.js} +1 -1
  23. package/dist/client/assets/{LogOut01-CBbJc40V.js → LogOut01-B10JMwSA.js} +1 -1
  24. package/dist/client/assets/{Monitor01-0XMb8v0N.js → Monitor01-C4Ouypd6.js} +1 -1
  25. package/dist/client/assets/{Palette-DNlynCjo.js → Palette-oe01kSEa.js} +1 -1
  26. package/dist/client/assets/{Play-OyBWwsA4.js → Play-KMHtN3lK.js} +1 -1
  27. package/dist/client/assets/{Plus-DRRnvQI0.js → Plus-oUwwsQC9.js} +1 -1
  28. package/dist/client/assets/{SearchLg-Bpy1Joyi.js → SearchLg-C3VBwfYd.js} +1 -1
  29. package/dist/client/assets/{SearchMd-DIGlOPt4.js → SearchMd-BGMZJeg6.js} +1 -1
  30. package/dist/client/assets/{Settings02-CvPJabiD.js → Settings02-BPZYSjmn.js} +1 -1
  31. package/dist/client/assets/{Share07-CEZw5SIe.js → Share07-DIu06qTz.js} +1 -1
  32. package/dist/client/assets/{Shield01-BN5M_1sH.js → Shield01-DVVvoIO7.js} +1 -1
  33. package/dist/client/assets/{Stars01-ByLyqrmQ.js → Stars01-Dw5CB0PC.js} +1 -1
  34. package/dist/client/assets/{Stars02-CmD8jRsw.js → Stars02-mHwxurF4.js} +1 -1
  35. package/dist/client/assets/{Sun-DUoeL411.js → Sun-DMFD05T-.js} +1 -1
  36. package/dist/client/assets/{SwitchHorizontal01-B04U1YLb.js → SwitchHorizontal01-CsHaZMJn.js} +1 -1
  37. package/dist/client/assets/{Tool01-BYFqUT9W.js → Tool01-BP68Qora.js} +1 -1
  38. package/dist/client/assets/{Tool02-CePtOOf3.js → Tool02-CXYBw5DL.js} +1 -1
  39. package/dist/client/assets/{Trash01-URHNN6GM.js → Trash01-DzkE8NTa.js} +1 -1
  40. package/dist/client/assets/{TrendUp01-CGTVVbW6.js → TrendUp01-BRhahpgt.js} +1 -1
  41. package/dist/client/assets/{Upload01-BtRP0VLO.js → Upload01-DnE7SfBf.js} +1 -1
  42. package/dist/client/assets/{User01-BO58XeIX.js → User01-C-p_MCai.js} +1 -1
  43. package/dist/client/assets/{UserSquare-t5rXAN1M.js → UserSquare-BSu7ZveT.js} +1 -1
  44. package/dist/client/assets/{Users01-tfirKQ3F.js → Users01-Be7pBHW0.js} +1 -1
  45. package/dist/client/assets/{Users03-4OZ50Ayp.js → Users03-DxEkoIgf.js} +1 -1
  46. package/dist/client/assets/{XCircle-CaBYarfQ.js → XCircle-B1VYSijr.js} +1 -1
  47. package/dist/client/assets/{XClose-DQB5pcBJ.js → XClose-DFz1suZE.js} +1 -1
  48. package/dist/client/assets/{YAxis-Dkb1iXd_.js → YAxis-5SBfguMh.js} +1 -1
  49. package/dist/client/assets/{Zap-D-Ufypml.js → Zap-io0IWHC8.js} +1 -1
  50. package/dist/client/assets/{ZapSquare-DkRs1opt.js → ZapSquare-kYeEqhmP.js} +1 -1
  51. package/dist/client/assets/{access-gate-Rv5oSxyt.js → access-gate--ryS7FcR.js} +1 -1
  52. package/dist/client/assets/{agent-icon-C2Nj5gsU.js → agent-icon-C4ehI_AL.js} +1 -1
  53. package/dist/client/assets/{agents-list-DTWphv39.js → agents-list-DankSyQ2.js} +1 -1
  54. package/dist/client/assets/{ai-providers-DqND32wO.js → ai-providers-BLm_39rS.js} +1 -1
  55. package/dist/client/assets/{alert-DF-rjHyX.js → alert-7wmVTCWK.js} +1 -1
  56. package/dist/client/assets/{alert-dialog-BDUXGo8i.js → alert-dialog-Bi3hPgKg.js} +1 -1
  57. package/dist/client/assets/{api-keys-p8M2DGj-.js → api-keys-BE0aFhSN.js} +1 -1
  58. package/dist/client/assets/{app-editor-maPg1-eM.js → app-editor-W3g6THXT.js} +1 -1
  59. package/dist/client/assets/{auth-CRALwP64.js → auth-Du0wGEHb.js} +1 -1
  60. package/dist/client/assets/{auth-catchall-CdVoRM_Z.js → auth-catchall-DzkVIeHZ.js} +1 -1
  61. package/dist/client/assets/{auth-entry-C6-8MWJj.js → auth-entry-8v7nv4Ni.js} +1 -1
  62. package/dist/client/assets/{auth-split-layout-DintZRX3.js → auth-split-layout-DQHXIqO8.js} +1 -1
  63. package/dist/client/assets/{authenticate-and-persist-oauth-174lnU4h.js → authenticate-and-persist-oauth-B4Kz6kuS.js} +1 -1
  64. package/dist/client/assets/{automation-list-row-CvNgjZsk.js → automation-list-row-RPVHkJqI.js} +1 -1
  65. package/dist/client/assets/{automation-runs-BWgSMsTi.js → automation-runs-XcRWyfrc.js} +1 -1
  66. package/dist/client/assets/{automations-B29GcH9i.js → automations-BgKtaXdX.js} +1 -1
  67. package/dist/client/assets/{avatar-DanyGfDS.js → avatar-p_5i-UJo.js} +1 -1
  68. package/dist/client/assets/{badge-BWY65tCW.js → badge-Crq4wth1.js} +1 -1
  69. package/dist/client/assets/{block-document-k4V4XWGR.js → block-document-CGXA7MAc.js} +1 -1
  70. package/dist/client/assets/{buckets-kfDFtv4v.js → buckets-CXpWw6iY.js} +1 -1
  71. package/dist/client/assets/{bulk-category-panel-B6H_o_VV.js → bulk-category-panel-2ahc-rLM.js} +1 -1
  72. package/dist/client/assets/{capability-load-error-B7krW3A_.js → capability-load-error-CE02zRvO.js} +1 -1
  73. package/dist/client/assets/{cards-BZ7B5b1j.js → cards-3NOWVSxK.js} +1 -1
  74. package/dist/client/assets/{category-editor-wonMxxCG.js → category-editor-DWp5uKVg.js} +1 -1
  75. package/dist/client/assets/{chart-JM9xVURs.js → chart-uEMr8uaI.js} +1 -1
  76. package/dist/client/assets/{chat-context-DOdsyFhI.js → chat-context-B-iSjN3N.js} +1 -1
  77. package/dist/client/assets/{checkbox-BvLD9hvL.js → checkbox-BroXF3ag.js} +1 -1
  78. package/dist/client/assets/{choose-editor-CvxpFjwG.js → choose-editor-CytkD39w.js} +1 -1
  79. package/dist/client/assets/{cli-auth-success-CrwdXJcV.js → cli-auth-success-DHehN84P.js} +1 -1
  80. package/dist/client/assets/{collection-detail-CA7Q1ZE1.js → collection-detail-QINZeNGy.js} +1 -1
  81. package/dist/client/assets/{collection-display-button-rt9f21UG.js → collection-display-button-DCir567D.js} +1 -1
  82. package/dist/client/assets/{collection-search-BKB1YwJ0.js → collection-search-BXhBXCi-.js} +1 -1
  83. package/dist/client/assets/{collection-table-wrapper-D3cHUm1Q.js → collection-table-wrapper-AmwoYN9I.js} +1 -1
  84. package/dist/client/assets/{collection-tabs-D0a2kdll.js → collection-tabs-LG35r4I4.js} +1 -1
  85. package/dist/client/assets/{command-NY3axkQx.js → command-DSZSfDjR.js} +1 -1
  86. package/dist/client/assets/{commerce-onboarding-DYmdW0Ud.js → commerce-onboarding-DD88anrH.js} +1 -1
  87. package/dist/client/assets/{connect-DE1OoXEm.js → connect-DH0QxP-E.js} +1 -1
  88. package/dist/client/assets/{connection-Cq8ofZ3G.js → connection-Brpz6zmP.js} +1 -1
  89. package/dist/client/assets/{connection-card-oPn_nO2S.js → connection-card-CC0uKt4s.js} +1 -1
  90. package/dist/client/assets/{connection-detail-T9YPVs8e.js → connection-detail-CcUwK_Ms.js} +1 -1
  91. package/dist/client/assets/{connection-form-helpers-BV_nfQh-.js → connection-form-helpers-bxw2_dEI.js} +1 -1
  92. package/dist/client/assets/{connections-D7ednpkO.js → connections-RpshfmR7.js} +1 -1
  93. package/dist/client/assets/{decopilot-sse-pool-_-LDthKu.js → decopilot-sse-pool-DlrngIx-.js} +1 -1
  94. package/dist/client/assets/{dialog-F81nOmCB.js → dialog-CjqSJg65.js} +1 -1
  95. package/dist/client/assets/{domain-settings-qfRmbNuV.js → domain-settings-Bf9WXGCn.js} +1 -1
  96. package/dist/client/assets/{drawer-Bszwt4T_.js → drawer-DDaf7OuY.js} +1 -1
  97. package/dist/client/assets/{dropdown-menu-7kcp-OFr.js → dropdown-menu-Cn80C9Y9.js} +1 -1
  98. package/dist/client/assets/{empty-state-B0NySMko.js → empty-state-BcK7vjhM.js} +1 -1
  99. package/dist/client/assets/{extract-connection-data-JQBm1Bga.js → extract-connection-data-kSKAFNhL.js} +1 -1
  100. package/dist/client/assets/{file-explorer-DzEb9SYm.js → file-explorer-CMw8J8VE.js} +1 -1
  101. package/dist/client/assets/{file-type-icon-BH4Z0jp3.js → file-type-icon-BzS6xy4o.js} +1 -1
  102. package/dist/client/assets/{form-CICA2ZYq.js → form-BmZWcybV.js} +1 -1
  103. package/dist/client/assets/{general-D34Evk8x.js → general-Q3p9MywK.js} +1 -1
  104. package/dist/client/assets/{github-repo-picker-C8aJzAu3.js → github-repo-picker-Dxrdf_qM.js} +1 -1
  105. package/dist/client/assets/{hooks-CgEX-ag_.js → hooks-NPzkv3Sl.js} +1 -1
  106. package/dist/client/assets/{index-Dj7Z6qxO.js → index-6kgXY5UE.js} +1 -1
  107. package/dist/client/assets/{index-ZHJKW8ci.js → index-91rTMdKt.js} +3 -3
  108. package/dist/client/assets/{index-pUoK5Opt.js → index-BCEfzQBl.js} +1 -1
  109. package/dist/client/assets/{index-CCPyPdnI.js → index-CKiIsJn6.js} +1 -1
  110. package/dist/client/assets/{index-CTWM-OTM.js → index-CcXPuDdm.js} +1 -1
  111. package/dist/client/assets/{index-JPK3Ako2.js → index-DCwFdcAd.js} +1 -1
  112. package/dist/client/assets/{index-CdE5WfFO.js → index-DqUDJVF2.js} +1 -1
  113. package/dist/client/assets/{index-CYFWqD1M.js → index-DvF0F1gK.js} +56 -56
  114. package/dist/client/assets/{index-DofYUb_G.js → index-YzF9XmXm.js} +1 -1
  115. package/dist/client/assets/{index-redirect-BPhU15LX.js → index-redirect-B6Sc4t3y.js} +1 -1
  116. package/dist/client/assets/{index-B0rgkrbl.js → index-uPkmZNbL.js} +1 -1
  117. package/dist/client/assets/{infra-billing-BEWIbNCt.js → infra-billing-CLTREh_3.js} +1 -1
  118. package/dist/client/assets/{input-efp1Fr--.js → input-CcnIMVXv.js} +1 -1
  119. package/dist/client/assets/{integration-icon-iAX6PZKW.js → integration-icon-CF_2lOML.js} +1 -1
  120. package/dist/client/assets/{invite-member-dialog-DmAopVVS.js → invite-member-dialog-BkCL3-XZ.js} +1 -1
  121. package/dist/client/assets/{label-CIE4d5aH.js → label-Wi2DcjyJ.js} +1 -1
  122. package/dist/client/assets/{layout-CfEb2UNz.js → layout-CfadCIo3.js} +1 -1
  123. package/dist/client/assets/{login-CZxMFAf2.js → login-gMoN-j-y.js} +1 -1
  124. package/dist/client/assets/{mcp-oauth-BMwV8L30.js → mcp-oauth-CjjRf3rC.js} +1 -1
  125. package/dist/client/assets/{members-L5EKqTHZ.js → members-vHAmmfBG.js} +1 -1
  126. package/dist/client/assets/{monaco-editor-Bn0Zxy9y.js → monaco-editor-BfjsooG_.js} +1 -1
  127. package/dist/client/assets/{monitoring-stats-row-qfRtpbtR.js → monitoring-stats-row-guOGFjGd.js} +1 -1
  128. package/dist/client/assets/{multi-select-CqBIlHfR.js → multi-select-BDKJKpMd.js} +1 -1
  129. package/dist/client/assets/{oauth-callback-Ci_sllQd.js → oauth-callback-BgGCD7E-.js} +1 -1
  130. package/dist/client/assets/{oauth-callback-ai-provider-DhN6r3x3.js → oauth-callback-ai-provider--IGRGA-t.js} +1 -1
  131. package/dist/client/assets/{onboarding-DmPQfAET.js → onboarding-D74kx5cE.js} +1 -1
  132. package/dist/client/assets/{org-layout-DUE279kG.js → org-layout-0oLyaQxm.js} +1 -1
  133. package/dist/client/assets/{organization-choice-eJ91cCWK.js → organization-choice-BEy4qcqB.js} +1 -1
  134. package/dist/client/assets/{orgs-UsnF3IkQ.js → orgs-D9OcLc97.js} +1 -1
  135. package/dist/client/assets/{page-seo-form-BsqWtlIT.js → page-seo-form-BmC9OkCd.js} +1 -1
  136. package/dist/client/assets/{popover-XOH22QlB.js → popover-nPZxlN3z.js} +1 -1
  137. package/dist/client/assets/{post-calendar-Cw8NnHNr.js → post-calendar-Bf-_hVdn.js} +1 -1
  138. package/dist/client/assets/{post-editor-BUmKASSr.js → post-editor-CQcjAZqg.js} +1 -1
  139. package/dist/client/assets/{primitives-L3-Oyx10.js → primitives-Liten4bf.js} +1 -1
  140. package/dist/client/assets/{profile-CfsOQgAC.js → profile-CiK0jRVc.js} +1 -1
  141. package/dist/client/assets/{project-app-view-DR6clsPe.js → project-app-view-Bi70ZVyC.js} +1 -1
  142. package/dist/client/assets/record-editor-CwKO3F0O.js +1 -0
  143. package/dist/client/assets/{redirect-editor-BsFiNQGN.js → redirect-editor-BsONApGQ.js} +1 -1
  144. package/dist/client/assets/registry-CHlIJAAb.js +2 -0
  145. package/dist/client/assets/{registry-layout-Dt5fGdCZ.js → registry-layout-C7P--kH9.js} +1 -1
  146. package/dist/client/assets/{reports-BQHgNCQI.js → reports-BvcikYTb.js} +1 -1
  147. package/dist/client/assets/{require-capability-BHWbsyTt.js → require-capability-AtZ8bdjk.js} +1 -1
  148. package/dist/client/assets/{required-auth-layout-BboHmNiW.js → required-auth-layout-DvY9b3kt.js} +1 -1
  149. package/dist/client/assets/{reset-password-D83H50_z.js → reset-password-C3in8LOr.js} +1 -1
  150. package/dist/client/assets/{roles-BAwk7IFg.js → roles-BDngyfVR.js} +1 -1
  151. package/dist/client/assets/{search-input-BB9GiaVn.js → search-input-q52vy-2v.js} +1 -1
  152. package/dist/client/assets/{secrets-CaHlcOqt.js → secrets-C8vrjpOp.js} +1 -1
  153. package/dist/client/assets/{sections-editor-j8xVruyW.js → sections-editor-B1fho03h.js} +1 -1
  154. package/dist/client/assets/{select-DsQMK1Kj.js → select-CjhYFMs_.js} +1 -1
  155. package/dist/client/assets/{select-model-DEE4zP-y.js → select-model-CyZXDy75.js} +1 -1
  156. package/dist/client/assets/{self-tool-result-B49rNMh6.js → self-tool-result-XV9FG_fE.js} +1 -1
  157. package/dist/client/assets/{seo-editor-Bg3YtmSr.js → seo-editor-CeFdQ-g9.js} +1 -1
  158. package/dist/client/assets/{settings-layout-DrICPAk0.js → settings-layout-B1Qi4rhD.js} +1 -1
  159. package/dist/client/assets/{shell-controls-hqtY2GPr.js → shell-controls-CkRT8YS6.js} +1 -1
  160. package/dist/client/assets/{shell-layout-BTMdXIOz.js → shell-layout-BAJfyO_U.js} +1 -1
  161. package/dist/client/assets/{spinner-O0oAo1U7.js → spinner-CpOOkrLj.js} +1 -1
  162. package/dist/client/assets/{sprints-ZBXF3Lvs.js → sprints-CZeJxzps.js} +1 -1
  163. package/dist/client/assets/{sso-BgMy97T7.js → sso-Bf9El7Pp.js} +1 -1
  164. package/dist/client/assets/{store-DTA3iGq7.js → store-CxKUqSGB.js} +1 -1
  165. package/dist/client/assets/store-registry-C2X7SLOW.js +2 -0
  166. package/dist/client/assets/{switch-_-_134Vn.js → switch-Bd_a_uJ9.js} +1 -1
  167. package/dist/client/assets/{synced-repos-rpRBxilg.js → synced-repos-DEXCxv-e.js} +1 -1
  168. package/dist/client/assets/{tab-id-CiSJTLaO.js → tab-id-afG2_dXO.js} +1 -1
  169. package/dist/client/assets/{table-5ua8ktvf.js → table-Btx44eIZ.js} +1 -1
  170. package/dist/client/assets/{tabs-MGrZcv1s.js → tabs-DVYAmHFG.js} +1 -1
  171. package/dist/client/assets/{tasks-CnqrYTYG.js → tasks-DupkBGhk.js} +1 -1
  172. package/dist/client/assets/{textarea-CkdYtW-6.js → textarea-BeyaUsbB.js} +1 -1
  173. package/dist/client/assets/{toggle-group-OZZ51qxc.js → toggle-group-BGjnYU22.js} +1 -1
  174. package/dist/client/assets/{toolbar-DC8tV-kN.js → toolbar-LW4W_-dk.js} +1 -1
  175. package/dist/client/assets/{track-ivdTRSHc.js → track-DvIz6k1s.js} +1 -1
  176. package/dist/client/assets/{types-Cs1VZIbu.js → types-J4fj-pzu.js} +1 -1
  177. package/dist/client/assets/{use-ai-providers-RWKhxQjA.js → use-ai-providers-CqvuwT1M.js} +1 -1
  178. package/dist/client/assets/{use-api-keys-DTPKaNU4.js → use-api-keys-BVgLhEK_.js} +1 -1
  179. package/dist/client/assets/{use-automations-CiKVILWx.js → use-automations-B7W3Ba6c.js} +1 -1
  180. package/dist/client/assets/{use-autosave-BaJ7Jyqn.js → use-autosave-CqFhD4e_.js} +1 -1
  181. package/dist/client/assets/{use-clock-tick-IApfXDvA.js → use-clock-tick-qJYjmEWc.js} +1 -1
  182. package/dist/client/assets/{use-commerce-diagnostic-DVMKWKf9.js → use-commerce-diagnostic-D7plRWK0.js} +1 -1
  183. package/dist/client/assets/{use-connection-DVSYuZdw.js → use-connection-CjEL1MFQ.js} +1 -1
  184. package/dist/client/assets/{use-copy-CL2vmFNI.js → use-copy-B961PIR6.js} +1 -1
  185. package/dist/client/assets/{use-create-virtual-mcp-CAFzJ50q.js → use-create-virtual-mcp-CNagwvwa.js} +1 -1
  186. package/dist/client/assets/{use-debounced-autosave-DRkI1so0.js → use-debounced-autosave-Dpc9a6wM.js} +1 -1
  187. package/dist/client/assets/{use-debounced-value-C7_NO2MG.js → use-debounced-value-D4ro4Ufw.js} +1 -1
  188. package/dist/client/assets/{use-decopilot-events-4mBp_Y4o.js → use-decopilot-events-D-pU-gJa.js} +1 -1
  189. package/dist/client/assets/{use-delete-connection-LKu9BhfB.js → use-delete-connection-DBwsU4Mz.js} +1 -1
  190. package/dist/client/assets/{use-deployment-admin-DkYRPmiY.js → use-deployment-admin--SqRSwEB.js} +1 -1
  191. package/dist/client/assets/{use-file-configs-Bnc_8rdf.js → use-file-configs-B1s3W1fw.js} +1 -1
  192. package/dist/client/assets/{use-infinite-scroll-D__LBhMr.js → use-infinite-scroll-oC_jBmkI.js} +1 -1
  193. package/dist/client/assets/{use-join-requests-SR1cKEmD.js → use-join-requests-B2rD5GBi.js} +1 -1
  194. package/dist/client/assets/{use-mcp-client-Bi1AWJXj.js → use-mcp-client-DvNA775b.js} +1 -1
  195. package/dist/client/assets/{use-mcp-tools-BMjPNxfN.js → use-mcp-tools-CZZADNHS.js} +1 -1
  196. package/dist/client/assets/{use-members-J1sgUlv9.js → use-members-D10Zs46p.js} +1 -1
  197. package/dist/client/assets/{use-navigate-to-agent-ow_WzXBG.js → use-navigate-to-agent-BI1MNKgT.js} +1 -1
  198. package/dist/client/assets/{use-org-auth-client-DwrwZnit.js → use-org-auth-client-d2bnCp4y.js} +1 -1
  199. package/dist/client/assets/{use-org-repo-syncs-39X2w53W.js → use-org-repo-syncs-4_FaPS5V.js} +1 -1
  200. package/dist/client/assets/{use-org-sso-COgAi5zj.js → use-org-sso-Wh2UWw7w.js} +1 -1
  201. package/dist/client/assets/{use-organization-roles-BnSUpTJM.js → use-organization-roles-C1xp5Akk.js} +1 -1
  202. package/dist/client/assets/{use-organization-settings-C7baNVfn.js → use-organization-settings-CcLa10CW.js} +1 -1
  203. package/dist/client/assets/{use-registry-connections-BgNwA_qx.js → use-registry-connections-DD6WUfSb.js} +1 -1
  204. package/dist/client/assets/{use-secrets-cfR_qKt4.js → use-secrets-BFv0e5pq.js} +1 -1
  205. package/dist/client/assets/{use-section-preview-base-B4bokskA.js → use-section-preview-base-sRbrii4V.js} +1 -1
  206. package/dist/client/assets/{use-status-sounds-3xqQZm7g.js → use-status-sounds-5_XUvd7l.js} +1 -1
  207. package/dist/client/assets/{use-tags-DKd1wl6J.js → use-tags-BnJZ68y0.js} +1 -1
  208. package/dist/client/assets/{use-task-board-items-BoycgCOg.js → use-task-board-items-C9MctQeI.js} +1 -1
  209. package/dist/client/assets/{use-view-mode-D0OtPkEo.js → use-view-mode-DRrxvciE.js} +1 -1
  210. package/dist/client/assets/{use-virtual-mcp-DIU6uf6w.js → use-virtual-mcp-BtJMidiT.js} +1 -1
  211. package/dist/client/assets/useInfiniteQuery-Cccy2AUK.js +1 -0
  212. package/dist/client/assets/useSuspenseInfiniteQuery-Dm6ii004.js +1 -0
  213. package/dist/client/assets/{users-BWWXBI9s.js → users-Cr1QqZyz.js} +1 -1
  214. package/dist/client/assets/{variant-calendar-CSZcaldL.js → variant-calendar-K9Y9gFgs.js} +1 -1
  215. package/dist/client/assets/{view-mode-toggle-DBgOZAY4.js → view-mode-toggle-DAPUVXeU.js} +1 -1
  216. package/dist/client/index.html +1 -1
  217. package/dist/server/cli.js +4 -4
  218. package/dist/server/server.js +4 -4
  219. package/package.json +1 -1
  220. package/dist/client/assets/record-editor-DmkIRf1-.js +0 -1
  221. package/dist/client/assets/registry-EOzC4kGW.js +0 -2
  222. package/dist/client/assets/store-registry-1V6QycjH.js +0 -2
  223. package/dist/client/assets/useInfiniteQuery-CDVZLJAB.js +0 -1
  224. package/dist/client/assets/useSuspenseInfiniteQuery-Bg2626fW.js +0 -1
@@ -888,7 +888,7 @@ You are the Usage Manager. You analyze how this workspace is actually used \u201
888
888
  d. Report the failing tool/connection, error pattern, and suggest the fix or owner.
889
889
  </workflows>`,ao1={id:"studio-usage-manager",title:"Usage Manager",icon:"icon://BarChart10?color=blue",description:"Analyze usage, costs, and clean up idle agents and connections",selectedTools:["MONITORING_STATS","MONITORING_LOGS_LIST","MONITORING_LOG_GET","MONITORING_THREAD_USAGE","COLLECTION_VIRTUAL_MCP_LIST","COLLECTION_VIRTUAL_MCP_GET","COLLECTION_VIRTUAL_MCP_DELETE","VIRTUAL_MCP_LAST_USED_LIST","COLLECTION_CONNECTIONS_LIST","COLLECTION_CONNECTIONS_GET","COLLECTION_CONNECTIONS_DELETE","ORGANIZATION_MEMBER_LIST"],selectedConnections:null,selectedPrompts:[],instructions:Oo8,getId:qQ.USAGE_MANAGER}});function Ec0($){return pw.find((Z)=>$.startsWith(`${Z.id}_`))??null}async function Do8($,Z){if("resolveRuntime"in $)return $.resolveRuntime(Z);return{instructions:$.instructions,selectedTools:$.selectedTools}}async function Y90({virtualMcp:$,agentId:Z=$.id,organizationId:X,ctx:Q}){let Y=Ec0(Z);if(!Y)return $;let G=await Do8(Y,{orgId:X,ctx:Q}),J=G.selectedTools?[...G.selectedTools]:null;return{...$,metadata:{...$.metadata??{},instructions:G.instructions},connections:$.connections.map((K)=>({...K,selected_tools:J}))}}async function G90($,Z){if(!("checklist"in $))return[];return Promise.all($.checklist.map(async(X)=>({label:X.label,activeForm:X.activeForm,action:X.action,completed:await X.isCompleted(Z),alwaysSuggest:X.alwaysSuggest})))}async function eo1($,Z,X){let Q={self:S8.SELF($),registry:S8.REGISTRY($),"community-registry":S8.COMMUNITY_REGISTRY($)};await Promise.all(Bo8.map((Y)=>X.delete(`${Y}${$}`))),await Promise.all(pw.map(async(Y)=>{let G=Y.getId($),J=await X.findById(G,$),W=(Y.selectedConnections??["self"]).map((F)=>Q[F]);if(J){await X.update(G,Z,{metadata:{...J.metadata??{},instructions:Y.instructions},connections:W.map((F)=>{let H=J.connections.find((N)=>N.connection_id===F);return{connection_id:F,selected_tools:Y.selectedTools?[...Y.selectedTools]:null,selected_resources:H?.selected_resources??null,selected_prompts:H?.selected_prompts??null}})});return}await X.create($,Z,{title:Y.title,description:Y.description,icon:Y.icon,status:"active",pinned:!1,metadata:{instructions:Y.instructions},connections:W.map((F)=>({connection_id:F,selected_tools:Y.selectedTools?[...Y.selectedTools]:null,selected_resources:null,selected_prompts:Y.selectedPrompts?[...Y.selectedPrompts]:null}))},{id:G})}))}var Bo8,pw;var Cx=D(()=>{C8();yo1();ho1();co1();po1();to1();ro1();so1();Bo8=["studio-task-manager_"],pw=[io1,xo1,uo1,no1,go1,oo1,ao1]});import{DBOS as J90}from"@dbos-inc/dbos-sdk";async function Lo8($){let Z=d8(),X=new Ub(Z.db);await eo1($.orgId,$.createdBy,X)}async function wo8($){let Z=d8(),X=new Ub(Z.db);for(let Q of pw){let Y=Q.getId($.orgId),G=await X.findById(Y,$.orgId);if(!G)continue;let J=Q.selectedPrompts?[...Q.selectedPrompts]:null;if(G.connections.every((W)=>{let F=W.selected_prompts;if(J===null)return F===null;if(F===null)return!1;if(F.length!==J.length)return!1;return F.every((H,N)=>H===J[N])}))continue;await X.update(Y,$.createdBy,{connections:G.connections.map((W)=>({connection_id:W.connection_id,selected_tools:W.selected_tools,selected_resources:W.selected_resources,selected_prompts:J}))})}}async function Eo8($){await J90.runStep(()=>Lo8($),{name:"installStudioPack"}),await J90.runStep(()=>wo8($),{name:"backfillSelectedPrompts"})}async function jc0($){await J90.startWorkflow(jo8,{workflowID:`install-studio-pack:${zo8}:${$.orgId}`})($)}async function $r1(){let Z=await d8().db.selectFrom("member").select(["organizationId","userId"]).orderBy("createdAt","asc").execute(),X=new Map;for(let Q of Z)if(!X.has(Q.organizationId))X.set(Q.organizationId,Q.userId);await Q90(Array.from(X),10,async([Q,Y])=>{try{await jc0({orgId:Q,createdBy:Y})}catch(G){console.error("[studio-pack-backfill] enqueue failed",{orgId:Q},G)}})}var jo8,zo8="v6";var K90=D(()=>{hG();_y0();Cx();jo8=J90.registerWorkflow(Eo8,{name:"installStudioPackWorkflow"})});class bi{constructor(){this._messageQueue=[]}static createLinkedPair(){let $=new bi,Z=new bi;return $._otherTransport=Z,Z._otherTransport=$,[$,Z]}async start(){while(this._messageQueue.length>0){let $=this._messageQueue.shift();this.onmessage?.($.message,$.extra)}}async close(){let $=this._otherTransport;this._otherTransport=void 0,await $?.close(),this.onclose?.()}async send($,Z){if(!this._otherTransport)throw Error("Not connected");if(this._otherTransport.onmessage)this._otherTransport.onmessage($,{authInfo:Z?.authInfo});else this._otherTransport._messageQueue.push({message:$,extra:{authInfo:Z?.authInfo}})}}import{z as X4}from"zod";var W90,Zr1,Xr1,Qr1,Yr1,Gr1,Jr1,Kr1,Wr1,Fr1;var _x=D(()=>{W90=X4.record(X4.string(),X4.array(X4.string())),Zr1=X4.object({id:X4.string().describe("Unique identifier for the API key"),name:X4.string().describe("Human-readable name for the API key"),userId:X4.string().describe("ID of the user who owns this API key"),permissions:W90.describe('Permissions granted to this API key. Format: { resource: [actions] } where resource is "self" for management tools or "conn_<UUID>" for connection-specific tools. Example: { "self": ["API_KEY_CREATE"], "conn_abc123": ["SEND_MESSAGE"] }'),expiresAt:X4.string().datetime().nullable().optional().describe("Expiration date of the API key (ISO 8601)"),createdAt:X4.string().datetime().describe("When the API key was created (ISO 8601)")}),Xr1=X4.object({name:X4.string().min(1).max(64).describe("Human-readable name for the API key"),permissions:W90.describe(`Permissions to grant (REQUIRED \u2014 there is no implicit default). Format: { resource: [actions] }. Resource is "self" for management tools or "conn_<UUID>" for connection-specific tools. Actions are tool names (e.g., ["ORGANIZATION_GET"]) or ["*"] for all. Example: { "self": ["ORGANIZATION_GET", "COLLECTION_CONNECTIONS_LIST"] }. The key is authorized solely by this allowlist; the creator's role does not widen it.`),expiresIn:X4.number().positive().optional().describe("Expiration time in seconds. If not provided, key never expires."),metadata:X4.record(X4.string(),X4.unknown()).optional().describe("Additional metadata to store with the API key")}),Qr1=X4.object({id:X4.string().describe("Unique identifier for the API key"),name:X4.string().describe("Human-readable name for the API key"),key:X4.string().describe("The actual API key value. STORE THIS SECURELY - it will not be shown again!"),permissions:W90.describe('Permissions granted to this API key. Format: { resource: [actions] } where resource is "self" for management tools or "conn_<UUID>" for connection-specific tools'),expiresAt:X4.string().datetime().nullable().optional().describe("Expiration date of the API key (ISO 8601)"),createdAt:X4.string().datetime().describe("When the API key was created (ISO 8601)")}),Yr1=X4.object({}),Gr1=X4.object({items:X4.array(Zr1).describe("List of API keys (without key values)")}),Jr1=X4.object({keyId:X4.string().describe("ID of the API key to update"),name:X4.string().min(1).max(64).optional().describe("New name for the API key"),permissions:W90.optional().describe('New permissions. Format: { resource: [actions] } where resource is "self" for management tools or "conn_<UUID>" for connection-specific tools. Actions are tool names or "*" for all. Example: { "self": ["API_KEY_CREATE"] }. Replaces existing permissions.'),metadata:X4.record(X4.string(),X4.unknown()).optional().describe("New metadata. Replaces existing metadata.")}),Kr1=X4.object({item:Zr1.describe("The updated API key (without key value)")}),Wr1=X4.object({keyId:X4.string().describe("ID of the API key to delete")}),Fr1=X4.object({success:X4.boolean().describe("Whether the deletion was successful"),keyId:X4.string().describe("ID of the deleted API key")})});var zc0;var Hr1=D(()=>{C4();M0();_x();zc0=u({name:"API_KEY_CREATE",description:"Create an API key with scoped permissions. The key value is returned only once \u2014 store it immediately.",annotations:{title:"Create API Key",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:Xr1,outputSchema:Qr1,handler:async($,Z)=>{r(Z),await Z.access.check();let X=await Z.boundAuth.apiKey.create({name:$.name,permissions:$.permissions,expiresIn:$.expiresIn,metadata:{...$.metadata,organization:Z.organization}}),Q=X.expiresAt?X.expiresAt instanceof Date?X.expiresAt.toISOString():X.expiresAt:null,Y=X.createdAt instanceof Date?X.createdAt.toISOString():X.createdAt,G=o0(Z);if(G)x1.capture({distinctId:G,event:"api_key_created",...Z.organization?.id?{groups:{organization:Z.organization.id}}:{},properties:{key_id:X.id,key_name:X.name??$.name,organization_id:Z.organization?.id,has_expiry:!!Q}});return{id:X.id,name:X.name??$.name,key:X.key,permissions:X.permissions??{},expiresAt:Q,createdAt:Y}}})});var Pc0;var Nr1=D(()=>{C4();M0();_x();Pc0=u({name:"API_KEY_DELETE",description:"Delete and instantly revoke an API key. Cannot be undone.",annotations:{title:"Delete API Key",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:Wr1,outputSchema:Fr1,handler:async($,Z)=>{r(Z),await Z.access.check();let X=o0(Z);if(!X)throw Error("User ID required to delete API key");let Y=(await Z.boundAuth.apiKey.list())?.find((W)=>W.id===$.keyId);if(!Y)throw Error("API key not found");let J=Y.metadata?.organization?.id,K=Z.organization?.id;if(J!==K)throw Error("Cannot delete API key from another organization");if(await Z.boundAuth.apiKey.delete($.keyId),K)x1.capture({distinctId:X,event:"api_key_deleted",groups:{organization:K},properties:{key_id:$.keyId,organization_id:K}});return{success:!0,keyId:$.keyId}}})});var Ac0;var Ur1=D(()=>{M0();_x();Ac0=u({name:"API_KEY_LIST",description:"List API keys for the current user in the current organization. Returns metadata only \u2014 key values are never shown after creation.",annotations:{title:"List API Keys",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:Yr1,outputSchema:Gr1,handler:async($,Z)=>{r(Z),await Z.access.check();let X=await Z.boundAuth.apiKey.list(),Q=Z.organization?.id;return{items:(X??[]).filter((G)=>{return G.metadata?.organization?.id===Q}).map((G)=>({id:G.id,name:G.name??"Unnamed Key",userId:G.userId,permissions:G.permissions??{},expiresAt:G.expiresAt?G.expiresAt instanceof Date?G.expiresAt.toISOString():G.expiresAt:null,createdAt:G.createdAt instanceof Date?G.createdAt.toISOString():G.createdAt}))}}})});var Tc0;var Or1=D(()=>{M0();_x();Tc0=u({name:"API_KEY_UPDATE",description:"Update an API key's name, permissions, or metadata. The key value cannot be changed or retrieved.",annotations:{title:"Update API Key",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:Jr1,outputSchema:Kr1,handler:async($,Z)=>{if(r(Z),await Z.access.check(),!o0(Z))throw Error("User ID required to update API key");let Y=(await Z.boundAuth.apiKey.list())?.find((F)=>F.id===$.keyId);if(!Y)throw Error(`API key not found: ${$.keyId}`);let J=Y.metadata?.organization?.id,K=Z.organization?.id;if(J!==K)throw Error("Cannot update API key from another organization");let W=await Z.boundAuth.apiKey.update({keyId:$.keyId,name:$.name,permissions:$.permissions,metadata:{...$.metadata,organization:Z.organization}});if(!W)throw Error(`Failed to update API key: ${$.keyId}`);return{item:{id:W.id,name:W.name??$.name??"Unnamed Key",userId:W.userId,permissions:W.permissions??{},expiresAt:W.expiresAt?W.expiresAt instanceof Date?W.expiresAt.toISOString():W.expiresAt:null,createdAt:W.createdAt instanceof Date?W.createdAt.toISOString():W.createdAt}}}})});var Br1=D(()=>{Hr1();Nr1();Ur1();Or1();_x()});function _O($){let Z=$.trim();if(!Z)return{ok:!1,error:"Enter a website URL."};let X=Ao8.test(Z),Q=To8.test(Z),Y=Ro8.test(Z);if(X&&!Q&&!Y)return{ok:!1,error:"Use an HTTP or HTTPS website URL."};let G=Q?Z:`https://${Z}`,J;try{J=new URL(G)}catch{return{ok:!1,error:"Enter a valid website URL."}}if(J.protocol!=="http:"&&J.protocol!=="https:")return{ok:!1,error:"Use an HTTP or HTTPS website URL."};let K=J.hostname.split(".");if(K.length<2||K.some((W)=>!W||!Io8.test(W)))return{ok:!1,error:"Enter a valid website URL."};return J.protocol="https:",{ok:!0,value:J.origin}}var Ao8,To8,Ro8,Io8;var xi=D(()=>{Ao8=/^[a-zA-Z][a-zA-Z\d+.-]*:/,To8=/^[a-zA-Z][a-zA-Z\d+.-]*:\/\//,Ro8=/^[^\s/:?#]+\.[^\s/:?#]+:\d+(?:[/?#]|$)/,Io8=/^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$/i});import{z as iX}from"zod";function GW($){if($.baseUrl)return $.baseUrl.replace(/\/+$/,"");return(($.settings??b0()).reportsInternalApiUrl??qo8).replace(/\/+$/,"")}function Lr1($={}){return`${GW($)}/api/v2/mcp`}function nw($){let Z=$.apiKey??($.settings??b0()).reportsInternalApiKey;if(!Z)throw Error("REPORTS_INTERNAL_API_KEY (or the legacy COMMERCE_DISCOVERY_INTERNAL_API_KEY) is required to set up reports.");return Z}function F90($){return new URL($).hostname}function ko8($){return $==="ownership_unverified"||$==="already_claimed_by_other_org"}function Vo8($,Z={}){switch($){case"ownership_unverified":{let X=Z.email?`O e-mail ${Z.email}`:"Este e-mail",Q=Z.domain?` ${Z.domain}`:" este site";return`${X} n\xE3o tem permiss\xE3o para reivindicar${Q}. Use um e-mail do dom\xEDnio do site ou pe\xE7a ao suporte para autorizar seu dom\xEDnio.`}case"already_claimed_by_other_org":return"Este site j\xE1 pertence a outra organiza\xE7\xE3o. Fale com o suporte para transferir o acesso.";case"unknown":return"N\xE3o foi poss\xEDvel configurar o Commerce Discovery. Tente novamente ou fale com o suporte.";default:return $}}async function So8($){let Z=await yi($);return ko8(Z?.error)?Z.error:"unknown"}async function yi($){let Z=await $.text().catch(()=>"");if(!Z)return;try{return JSON.parse(Z)}catch{return}}async function Rc0($){let Z=`Commerce Discovery auth failed with status ${$.status}.`,X=await $.text().catch(()=>"");if(!X)return Z;try{let Q=JSON.parse(X),Y=typeof Q.error==="string"?Q.error:typeof Q.message==="string"?Q.message:null;return Y?`Commerce Discovery auth failed: ${Y}.`:Z}catch{return Z}}async function Er1($,Z={}){let X=GW(Z),Q=nw(Z),Y=Z.fetchImpl??fetch,G=F90($.siteUrl),J=`${X}/api/v2/internal/diagnostics/${encodeURIComponent(G)}/upgrade`,K=await Y(J,{method:"POST",headers:{Authorization:`Bearer ${Q}`,"Content-Type":"application/json"},body:JSON.stringify({org_id:$.orgId,...$.orgName?{name:$.orgName}:{},...$.email?{email:$.email}:{},...$.reportUrl?{report_url:$.reportUrl}:{}})});if(!K.ok){let F=await So8(K);throw new wr1(F,{email:$.email,domain:G})}let W=Mo8.safeParse(await yi(K));if(!W.success)throw Error("Commerce Discovery auth response did not include a token.");return{authorizationToken:W.data.token}}async function jr1($,Z={}){let X=GW(Z),Q=nw(Z),Y=Z.fetchImpl??fetch,G=F90($.siteUrl),J=`${X}/api/v2/internal/diagnostics/${encodeURIComponent(G)}/bindings`,K=await Y(J,{method:"POST",headers:{Authorization:`Bearer ${Q}`,"Content-Type":"application/json"},body:JSON.stringify({org_id:$.orgId,provider:$.provider,resource_id:$.resourceId})});if(K.status===409)return{ok:!1,reason:"resource_already_bound",detail:"Este recurso j\xE1 est\xE1 vinculado a outra loja. Se ele \xE9 seu, fale com o suporte para revis\xE3o manual."};if(K.status===422){let F=Dr1.safeParse(await yi(K));return{ok:!1,reason:F.success?F.data.reason??"verification_failed":"verification_failed",detail:(F.success?F.data.detail:void 0)??"N\xE3o foi poss\xEDvel verificar o acesso a este recurso."}}if(!K.ok)throw Error(await Rc0(K));let W=Dr1.safeParse(await yi(K));if(!W.success||!W.data.binding)throw Error("Commerce Discovery bind response did not include a binding.");return{ok:!0,resourceId:W.data.binding.resource_id,evidence:W.data.binding.evidence}}async function zr1($,Z={}){let X=GW(Z),Q=nw(Z),Y=Z.fetchImpl??fetch,G=F90($.siteUrl),J=`${X}/api/v2/internal/diagnostics/${encodeURIComponent(G)}/run`,K=await Y(J,{method:"POST",headers:{Authorization:`Bearer ${Q}`,"Content-Type":"application/json"},body:JSON.stringify({org_id:$.orgId,...$.githubRepo?{github_repo:$.githubRepo}:{}})});if(K.status===409)return{triggered:!1,reason:"not_upgraded"};if(!K.ok)throw Error(await Rc0(K));return{triggered:!0}}async function Pr1($,Z={}){let X=GW(Z),Q=nw(Z),Y=Z.fetchImpl??fetch,G=F90($.siteUrl),J=`${X}/api/v2/internal/diagnostics/${encodeURIComponent(G)}/connections/status?org_id=${encodeURIComponent($.orgId)}`,K=await Y(J,{method:"GET",headers:{Authorization:`Bearer ${Q}`}});if(K.status===404||K.status===409)return{providers:{},claimed:!1};if(!K.ok)throw Error(await Rc0(K));let W=Co8.safeParse(await yi(K));return{providers:W.success?W.data.providers:{},claimed:!0}}var qo8,Mo8,Dr1,wr1,Co8;var tw=D(()=>{C8();q$();qo8=new URL(ey1).origin,Mo8=iX.object({token:iX.string().min(1)}),Dr1=iX.object({binding:iX.object({resource_id:iX.string(),evidence:iX.string()}).optional(),reason:iX.string().optional(),detail:iX.string().optional()});wr1=class wr1 extends Error{code;constructor($,Z={}){super(Vo8($,Z));this.name="CommerceDiscoveryClaimError",this.code=$}};Co8=iX.object({providers:iX.record(iX.string(),iX.object({connected:iX.boolean(),via:iX.enum(["oauth","sa"]).nullable(),resource:iX.string().nullable()}))})});import{z as xY}from"zod";var _o8,vo8,Ic0;var Ar1=D(()=>{xi();M0();tw();_o8=xY.object({siteUrl:xY.string().min(1).describe("Website URL of the store being bound."),provider:xY.enum(["ga4","gsc"]).describe("Which Google source to bind: ga4 (Analytics) or gsc (Search Console)."),resourceId:xY.string().min(1).describe("The resource id the client typed: GA4 numeric property id, or GSC site (sc-domain:example.com or https://example.com/).")}),vo8=xY.discriminatedUnion("ok",[xY.object({ok:xY.literal(!0),resourceId:xY.string(),evidence:xY.string()}),xY.object({ok:xY.literal(!1),reason:xY.string(),detail:xY.string()})]),Ic0=u({name:"COMMERCE_DISCOVERY_BIND",description:"Bind a GA4 property or GSC site to the org's store via the shared service account (consent-free lane). The client grants deco-reader@\u2026 access to the resource and provides its id; Commerce Discovery verifies the resource belongs to this domain before persisting. Returns ok:false with an actionable pt-BR detail when verification fails or the resource is already bound elsewhere.",annotations:{title:"Bind Commerce Discovery Data Source",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:_o8,outputSchema:vo8,handler:async($,Z)=>{r(Z);let X=t(Z);await Z.access.check();let Q=_O($.siteUrl);if(!Q.ok)throw Error(Q.error);return jr1({siteUrl:Q.value,orgId:X.id,provider:$.provider,resourceId:$.resourceId.trim()})}})});import{z as JW}from"zod";var fo8,bo8,qc0;var Tr1=D(()=>{xi();M0();tw();fo8=JW.object({siteUrl:JW.string().min(1).describe("Website URL of the store to inspect.")}),bo8=JW.object({providers:JW.record(JW.string(),JW.object({connected:JW.boolean(),via:JW.enum(["oauth","sa"]).nullable(),resource:JW.string().nullable()})),claimed:JW.boolean().describe("False when the site isn't claimed/upgraded for this org \u2014 providers is then empty because the status is unreadable, NOT because nothing is connected. The UI must warn instead of rendering existing bindings as disconnected.")}),qc0=u({name:"COMMERCE_DISCOVERY_CONNECTION_STATUS",description:"Read per-provider connection status (ga4/gsc/vtex) for the org's store \u2014 { connected, via: oauth|sa, resource }. The single source of truth for whether a data source is connected, unifying the OAuth (Studio vault) and shared-SA binding lanes. Read-only.",annotations:{title:"Commerce Discovery Connection Status",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:fo8,outputSchema:bo8,handler:async($,Z)=>{r(Z);let X=t(Z);await Z.access.check();let Q=_O($.siteUrl);if(!Q.ok)throw Error(Q.error);return Pr1({siteUrl:Q.value,orgId:X.id})}})});import{z as gi}from"zod";var xo8,yo8,Mc0;var Rr1=D(()=>{C8();xi();M0();tw();xo8=gi.object({siteUrl:gi.string().min(1).describe("Website URL to run the diagnostic for.")}),yo8=gi.object({triggered:gi.boolean(),reason:gi.string().optional()}),Mc0=u({name:"COMMERCE_DISCOVERY_RUN",description:"Trigger the Commerce Discovery diagnostic run for the current organization's store. Call once the data sources (GA4/GSC/VTEX) are connected \u2014 this run resolves credentials and produces the enriched report.",annotations:{title:"Run Commerce Discovery",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:xo8,outputSchema:yo8,handler:async($,Z)=>{r(Z);let X=t(Z);await Z.access.check();let Q=_O($.siteUrl);if(!Q.ok)throw Error(Q.error);let Y=S8.COMMERCE_DISCOVERY(X.id),J=(await Z.storage.connections.findById(Y,X.id))?.configuration_state,K=J&&typeof J==="object"&&typeof J.github_repo==="string"&&J.github_repo.length>0?J.github_repo:void 0;return zr1({siteUrl:Q.value,orgId:X.id,githubRepo:K})}})});var vO=D(()=>{N80()});import{z as KW}from"zod";async function co8($,Z,X,Q){let Y=await $.storage.connections.findById(Z,X);if(Y)return Y;throw Q}async function lo8($,Z,X,Q){let Y=await $.storage.virtualMcps.findById(Z,X);if(Y)return Y;throw Q}var kc0,go8=3600000,ho8,uo8,Vc0;var Ir1=D(()=>{C8();xi();M0();hK();vO();tw();kc0=C40,ho8=KW.object({siteUrl:KW.string().min(1).describe("Website URL to configure.")}),uo8=KW.object({connection:h7,virtualMcp:u7,reportApp:KW.object({connectionId:KW.string(),virtualMcpId:KW.string(),toolName:KW.literal(kc0)}),created:KW.object({connection:KW.boolean(),virtualMcp:KW.boolean()})});Vc0=u({name:"COMMERCE_DISCOVERY_SETUP",description:"Create or return the Commerce Discovery connection and virtual MCP for the current organization.",annotations:{title:"Set Up Commerce Discovery",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:ho8,outputSchema:uo8,handler:async($,Z)=>{r(Z);let X=t(Z);await Z.access.check("COLLECTION_CONNECTIONS_CREATE");let Q=o0(Z);if(!Q)throw Error("User ID required to set up Commerce Discovery");let Y=_O($.siteUrl);if(!Y.ok)throw Error(Y.error);let G=S8.COMMERCE_DISCOVERY(X.id),J=v40(X.id),K=new URLSearchParams({virtualmcpid:J,main:`app:${G}:${kc0}`}),W={email:Z.auth.user?.email,reportUrl:`${Z.baseUrl}/${encodeURIComponent(X.slug??X.id)}/${crypto.randomUUID()}?${K.toString()}`},F=await Z.storage.connections.findById(G,X.id),H={connection:!1,virtualMcp:!1},N=await Er1({siteUrl:Y.value,orgId:X.id,orgName:X.name,...W}),U=Lr1();if(F)console.log("[commerce-discovery] syncing connection to claimed site",{orgId:X.id,siteUrl:Y.value,connectionId:G}),F=await Z.storage.connections.update(F.id,{connection_url:U,connection_token:N.authorizationToken,metadata:{...F.metadata??{},siteUrl:Y.value}});else{console.log("[commerce-discovery] creating connection",{orgId:X.id,siteUrl:Y.value,connectionId:G});try{let w=Ug1(X.id,N.authorizationToken,U);F=await Z.storage.connections.create({...w,metadata:{...w.metadata??{},siteUrl:Y.value},organization_id:X.id,created_by:Q}),H.connection=!0}catch(w){F=await co8(Z,G,X.id,w)}}let O=await Z.storage.virtualMcps.findById(J,X.id);if(!O){console.log("[commerce-discovery] creating virtual MCP",{orgId:X.id,siteUrl:Y.value,connectionId:F.id,virtualMcpId:J});try{O=await Z.storage.virtualMcps.create(X.id,Q,Og1(X.id,F.id),{id:J}),H.virtualMcp=!0}catch(w){O=await lo8(Z,J,X.id,w)}}if(!O.pinned)O=await Z.storage.virtualMcps.update(O.id,Q,{pinned:!0});let B=await Z.db.selectFrom("organization").select(["createdAt"]).where("id","=",X.id).executeTakeFirst();if((B?Date.now()-new Date(B.createdAt).getTime():Number.POSITIVE_INFINITY)<go8){let E=(await Z.storage.organizationSettings.get(X.id))?.flags,j={};if(E?.reports_only==null)j.reports_only=!0;if(Object.keys(j).length>0)await Z.storage.organizationSettings.upsert(X.id,{flags:j})}return{connection:F,virtualMcp:O,reportApp:{connectionId:F.id,virtualMcpId:O.id,toolName:kc0},created:H}}})});var qr1=D(()=>{Ar1();Tr1();Rr1();Ir1()});var Sc0=_((Mr1)=>{Object.defineProperty(Mr1,"__esModule",{value:!0});Mr1.kvPrefix=Mr1.KvWatchInclude=void 0;Mr1.KvWatchInclude={LastValue:"",AllHistory:"history",UpdatesOnly:"updates"};Mr1.kvPrefix="KV_"});var hr1=_((yr1)=>{Object.defineProperty(yr1,"__esModule",{value:!0});yr1.KvStatusImpl=yr1.Bucket=yr1.Kvm=yr1.kvOperationHdr=void 0;yr1.Base64KeyCodec=io8;yr1.NoopKvCodecs=Cc0;yr1.defaultBucketOpts=Sr1;yr1.validateKey=Cr1;yr1.validateSearchKey=_r1;yr1.hasWildcards=vr1;yr1.validateBucket=H90;var x5=jY(),Z5=Ze(),b5=Sc0();function io8(){let $=(Z,X)=>{let Q=[];for(let Y of Z.split("."))switch(Y){case">":case"*":Q.push(Y);break;default:Q.push(X(Y));break}return Q.join(".")};return{encode(Z){return $(Z,btoa)},decode(Z){return $(Z,atob)}}}function Cc0(){return{key:{encode($){return $},decode($){return $}},value:{encode($){return typeof $==="string"?new TextEncoder().encode($):$},decode($){return $}}}}function Sr1(){return{replicas:1,history:1,timeout:2000,max_bytes:-1,maxValueSize:-1,codec:Cc0(),storage:Z5.StorageType.File}}yr1.kvOperationHdr="KV-Operation";var Vr1="$KV",po8=/^[-/=.\w]+$/,no8=/^[-/=.>*\w]+$/,to8=/^[-\w]+$/;function Cr1($){if($.startsWith(".")||$.endsWith(".")||!po8.test($))throw Error(`invalid key: ${$}`)}function _r1($){if($.startsWith(".")||$.endsWith(".")||$.includes("..")||!no8.test($))throw Error(`invalid key: ${$}`)}function vr1($){if($.startsWith(".")||$.endsWith("."))throw Error(`invalid key: ${$}`);let Z=$.split("."),X=!1;for(let Q=0;Q<Z.length;Q++)switch(Z[Q]){case"*":X=!0;break;case">":if(Q!==Z.length-1)throw Error(`invalid key: ${$}`);X=!0;break;default:}return X}function H90($){if(!to8.test($))throw Error(`invalid bucket name: ${$}`)}class fr1{js;constructor($){this.js=(0,Z5.toJetStreamClient)($)}create($,Z={}){return this.#$($,Z)}open($,Z={}){return Z.bindOnly=!0,this.#$($,Z)}#$($,Z={}){let{ok:X,min:Q}=this.js.nc.features.get(x5.Feature.JS_KV);if(!X)return Promise.reject(Error(`kv is only supported on servers ${Q} or better`));if(Z.bindOnly)return vx.bind(this.js,$,Z);return vx.create(this.js,$,Z)}list(){let $=(X)=>{let Y=X.streams.filter((J)=>{return J.config.name.startsWith(b5.kvPrefix)});Y.forEach((J)=>{J.config.sealed=J.config.sealed||!1,J.config.deny_delete=J.config.deny_delete||!1,J.config.deny_purge=J.config.deny_purge||!1,J.config.allow_rollup_hdrs=J.config.allow_rollup_hdrs||!1});let G="";if(Y.length)G=this.js.nc.info?.cluster??"";return Y.map((J)=>{return new N90(J,G)})},Z=`${this.js.prefix}.STREAM.LIST`;return new Z5.ListerImpl(Z,$,this.js)}}yr1.Kvm=fr1;class vx{js;jsm;stream;bucket;direct;codec;prefix;editPrefix;useJsPrefix;_prefixLen;constructor($,Z,X){H90($),this.js=Z,this.jsm=X,this.bucket=$,this.prefix=Vr1,this.editPrefix="",this.useJsPrefix=!1,this._prefixLen=0}static async create($,Z,X={}){H90(Z);let Q=await $.jetstreamManager(),Y=new vx(Z,$,Q);return await Y.init(X),Y}static async bind($,Z,X={}){let Q=$.getOptions()?.checkAPI||X.bindOnly===!1,Y=await $.jetstreamManager(Q),G={config:{allow_direct:X.allow_direct}};H90(Z);let J=new vx(Z,$,Y);return G.config.name=X.streamName??J.bucketName(),Object.assign(J,G),J.stream=G.config.name,J.codec=X.codec||Cc0(),J.direct=G.config.allow_direct??!1,J.initializePrefixes(G),J}async init($={}){let Z=Object.assign(Sr1(),$);this.codec=Z.codec;let X={};if(this.stream=X.name=$.streamName??this.bucketName(),X.retention=Z5.RetentionPolicy.Limits,X.max_msgs_per_subject=Z.history,Z.max_bytes)X.max_bytes=Z.max_bytes;if(X.max_msg_size=Z.maxValueSize,X.storage=Z.storage,$.placement)X.placement=$.placement;if($.republish)X.republish=$.republish;if($.description)X.description=$.description;if($.markerTTL)X.allow_msg_ttl=!0,X.subject_delete_marker_ttl=(0,x5.nanos)(Z.markerTTL);if($.mirror){let F=Object.assign({},$.mirror);if(!F.name.startsWith(b5.kvPrefix))F.name=`${b5.kvPrefix}${F.name}`;X.mirror=F,X.mirror_direct=!0}else if($.sources){let F=$.sources.map((H)=>{let N=Object.assign({},H),U=N.name.startsWith(b5.kvPrefix)?N.name.substring(b5.kvPrefix.length):N.name;if(!N.name.startsWith(b5.kvPrefix))N.name=`${b5.kvPrefix}${N.name}`;if(!H.external&&U!==this.bucket)N.subject_transforms=[{src:`$KV.${U}.>`,dest:`$KV.${this.bucket}.>`}];return N});X.sources=F,X.subjects=[this.subjectForBucket()]}else X.subjects=[this.subjectForBucket()];if($.metadata)X.metadata=$.metadata;if(typeof $.compression==="boolean")X.compression=$.compression?Z5.StoreCompression.S2:Z5.StoreCompression.None;let Q=this.js.nc,Y=Q.getServerVersion(),G=Y?(0,x5.compare)(Y,(0,x5.parseSemVer)("2.7.2"))>=0:!1;X.discard=G?Z5.DiscardPolicy.New:Z5.DiscardPolicy.Old;let{ok:J,min:K}=Q.features.get(x5.Feature.JS_ALLOW_DIRECT);if(!J&&$.allow_direct===!0){let F=Y?`${Y.major}.${Y.minor}.${Y.micro}`:"unknown";return Promise.reject(Error(`allow_direct is not available on server version ${F} - requires ${K}`))}if($.allow_direct=typeof $.allow_direct==="boolean"?$.allow_direct:J,X.allow_direct=$.allow_direct,this.direct=X.allow_direct,X.num_replicas=Z.replicas,Z.ttl)X.max_age=(0,x5.nanos)(Z.ttl);X.allow_rollup_hdrs=!0;let W;try{if(W=await this.jsm.streams.info(X.name),!W.config.allow_direct&&this.direct===!0)this.direct=!1}catch(F){if(F.message==="stream not found")W=await this.jsm.streams.add(X);else throw F}this.initializePrefixes(W)}initializePrefixes($){this._prefixLen=0,this.prefix=`$KV.${this.bucket}`,this.useJsPrefix=this.js.apiPrefix!=="$JS.API";let{mirror:Z}=$.config;if(Z){let X=Z.name;if(X.startsWith(b5.kvPrefix))X=X.substring(b5.kvPrefix.length);if(Z.external&&Z.external.api!==""){let Q=Z.name.substring(b5.kvPrefix.length);this.useJsPrefix=!1,this.prefix=`$KV.${Q}`,this.editPrefix=`${Z.external.api}.$KV.${X}`}else this.editPrefix=this.prefix}}bucketName(){return this.stream??`${b5.kvPrefix}${this.bucket}`}subjectForBucket(){return`${this.prefix}.${this.bucket}.>`}subjectForKey($,Z=!1){let X=[];if(Z){if(this.useJsPrefix)X.push(this.js.apiPrefix);if(this.editPrefix!=="")X.push(this.editPrefix);else X.push(this.prefix)}else if(this.prefix)X.push(this.prefix);return X.push($),X.join(".")}fullKeyName($){if(this.prefix!=="")return`${this.prefix}.${$}`;return`${Vr1}.${this.bucket}.${$}`}get prefixLen(){if(this._prefixLen===0)this._prefixLen=this.prefix.length+1;return this._prefixLen}encodeKey($){let Z=[];for(let X of $.split("."))switch(X){case">":case"*":Z.push(X);break;default:Z.push(this.codec.key.encode(X));break}return Z.join(".")}decodeKey($){let Z=[];for(let X of $.split("."))switch(X){case">":case"*":Z.push(X);break;default:Z.push(this.codec.key.decode(X));break}return Z.join(".")}validateKey=Cr1;validateSearchKey=_r1;hasWildcards=vr1;close(){return Promise.resolve()}dataLen($,Z){let X=Z?Z.get(Z5.JsHeaders.MessageSizeHdr)||"":"";if(X!=="")return parseInt(X,10);return $.length}smToEntry($){return new br1(this.bucket,this.prefixLen,$,this.codec)}jmToWatchEntry($,Z){return new xr1(this.bucket,this.prefixLen,$,Z,this.codec)}async create($,Z,X){let Q;try{let G={previousSeq:0},J=await this._put($,Z,G,X);return Promise.resolve(J)}catch(G){if(Q=G,G instanceof Z5.JetStreamApiError){let J=G;if(J.code!==Z5.JetStreamApiCodes.StreamWrongLastSequence&&J.code!==Z5.JetStreamApiCodes.StreamWrongLastSequenceUnknown)return Promise.reject(G)}}let Y=0;try{let G=await this.get($);if(G?.operation==="DEL"||G?.operation==="PURGE")return Y=G!==null?G.revision:0,this._put($,Z,{previousSeq:Y},X);else return Promise.reject(Q)}catch(G){return Promise.reject(G)}}update($,Z,X,Q){if(X<=0)throw Error("version must be greater than 0");return this.put($,Z,{previousSeq:X,timeout:Q})}async _put($,Z,X={},Q){let Y=this.encodeKey($);this.validateKey(Y),Z=this.codec.value.encode(Z);let G={timeout:X?.timeout};if(X.previousSeq!==void 0){let J=(0,x5.headers)();G.headers=J,J.set(Z5.PubHeaders.ExpectedLastSubjectSequenceHdr,`${X.previousSeq}`)}if(Q)(G.headers||(0,x5.headers)()).set(Z5.PubHeaders.MessageTTL,Q);try{return(await this.js.publish(this.subjectForKey(Y,!0),Z,G)).seq}catch(J){return Promise.reject(J)}}put($,Z,X={}){return this._put($,Z,X)}async get($,Z){let X=this.encodeKey($);this.validateKey(X);let Q={last_by_subj:this.subjectForKey(X)};if(Z&&Z.revision>0)Q={seq:Z.revision};let Y=null;try{if(this.direct)Y=await this.jsm.direct.getMessage(this.bucketName(),Q);else Y=await this.jsm.streams.getMessage(this.bucketName(),Q);if(Y===null)return null;let G=this.smToEntry(Y);if(G.rawKey!==X)return null;return G}catch(G){throw G}}purge($,Z){return this._deleteOrPurge($,"PURGE",Z)}delete($,Z){return this._deleteOrPurge($,"DEL",Z)}async purgeDeletes($=1800000){let Z=[],X=await this.history({key:">"});await(async()=>{for await(let J of X)if(J.operation==="DEL"||J.operation==="PURGE")Z.push(J)})().then(),X.stop();let Q=Date.now()-$,Y=Z.map((J)=>{let K=this.subjectForKey(J.key);if(J.created.getTime()>=Q)return this.jsm.streams.purge(this.stream,{filter:K,keep:1});else return this.jsm.streams.purge(this.stream,{filter:K,keep:0})}),G=await Promise.all(Y);return G.unshift({success:!0,purged:0}),G.reduce((J,K)=>{return J.purged+=K.purged,J})}async _deleteOrPurge($,Z,X){if(!this.hasWildcards($))return this._doDeleteOrPurge($,Z,X);let Q=await this.keys($),Y=[];for await(let G of Q)if(Y.push(this._doDeleteOrPurge(G,Z)),Y.length===100)await Promise.all(Y),Y.length=0;if(Y.length>0)await Promise.all(Y)}async _doDeleteOrPurge($,Z,X){let Q=this.encodeKey($);this.validateKey(Q);let Y=(0,x5.headers)();if(Y.set(yr1.kvOperationHdr,Z),Z==="PURGE"){let G=X;if(Y.set(Z5.JsHeaders.RollupHdr,Z5.JsHeaders.RollupValueSubject),typeof G?.ttl==="string"&&G.ttl!=="")Y.set(Z5.PubHeaders.MessageTTL,`${G.ttl}`)}if(X?.previousSeq)Y.set(Z5.PubHeaders.ExpectedLastSubjectSequenceHdr,`${X.previousSeq}`);await this.js.publish(this.subjectForKey(Q,!0),x5.Empty,{headers:Y})}_buildCC($,Z,X={}){let Y=(!Array.isArray($)?[$]:$).map((K)=>{let W=this.encodeKey(K);return this.validateSearchKey(K),this.fullKeyName(W)}),G=Z5.DeliverPolicy.LastPerSubject;if(Z===b5.KvWatchInclude.AllHistory)G=Z5.DeliverPolicy.All;if(Z===b5.KvWatchInclude.UpdatesOnly)G=Z5.DeliverPolicy.New;let J=void 0;if(Y.length===1)J=Y[0],Y=void 0;return Object.assign({deliver_policy:G,ack_policy:Z5.AckPolicy.None,filter_subjects:Y,filter_subject:J,flow_control:!0,idle_heartbeat:(0,x5.nanos)(5000)},X)}remove($){return this.purge($)}async history($={}){let Z=$.key??">",X={};X.headers_only=$.headers_only||!1;let Q=new x5.QueuedIteratorImpl,Y=()=>{Q.stop()},G=this._buildCC(Z,b5.KvWatchInclude.AllHistory,X),J=await this.js.consumers.getPushConsumer(this.stream,G);if(Q._data=J,(await J.info(!0)).num_pending===0)return Q.push(Y),Q;let W=await J.consume({callback:(F)=>{let H=this.jmToWatchEntry(F,!1);if(Q.push(H),Q.received++,F.info.pending===0)Q.push(Y)}});return W.closed().then(()=>{Q.push(Y)}),(async()=>{for await(let F of W.status())switch(F.type){case"heartbeat":Q.push(()=>{Q.stop()});break}})().then(),Q.iterClosed.then(()=>{W.stop()}),Q}canSetWatcherName(){let $=this.js.nc,{ok:Z}=$.features.get(x5.Feature.JS_NEW_CONSUMER_CREATE_API);return Z}async watch($={}){let Z=$.key??">",X=new x5.QueuedIteratorImpl,Q={};Q.headers_only=$.headers_only||!1;let Y=b5.KvWatchInclude.LastValue;if($.include===b5.KvWatchInclude.AllHistory)Y=b5.KvWatchInclude.AllHistory;else if($.include===b5.KvWatchInclude.UpdatesOnly)Y=b5.KvWatchInclude.UpdatesOnly;let G=$.ignoreDeletes===!0,J=this._buildCC(Z,Y,Q);if(J.name=`KV_WATCHER_${x5.nuid.next()}`,$.resumeFromRevision&&$.resumeFromRevision>0)J.deliver_policy=Z5.DeliverPolicy.StartSequence,J.opt_start_seq=$.resumeFromRevision;let K=await this.js.consumers.getPushConsumer(this.stream,J),F=(await K.info(!0)).num_pending,H=Y===b5.KvWatchInclude.UpdatesOnly||F===0;X._data=K;let N=0,U=await K.consume({callback:(O)=>{if(!H)N++,H=N>=F;let B=this.jmToWatchEntry(O,H);if(G&&B.operation==="DEL")return;X.push(B),X.received++}});return X.iterClosed.then(()=>{U.stop()}),U.closed().then(()=>{X.push(()=>{X.stop()})}),X}async keys($=">"){let Z=new x5.QueuedIteratorImpl,X=this._buildCC($,b5.KvWatchInclude.LastValue,{headers_only:!0}),Q=await this.js.consumers.getPushConsumer(this.stream,X);if((await Q.info()).num_pending===0)return Z.stop(),Z;Z._data=Q;let G=await Q.consume({callback:(J)=>{let K=J.headers?.get(yr1.kvOperationHdr);if(K!=="DEL"&&K!=="PURGE"){let W=this.decodeKey(J.subject.substring(this.prefixLen));Z.push(W)}if(J.info.pending===0)G.stop()}});return(async()=>{for await(let J of G.status())switch(J.type){case"heartbeat":Z.push(()=>{Z.stop()});break}})().then(),G.closed().then(()=>{Z.push(()=>{Z.stop()})}),Z.iterClosed.then(()=>{G.stop()}),Z}purgeBucket($){return this.jsm.streams.purge(this.bucketName(),$)}destroy(){return this.jsm.streams.delete(this.bucketName())}async status(){let Z=this.js.nc.info?.cluster??"",X=this.bucketName(),Q=await this.jsm.streams.info(X);return new N90(Q,Z)}}yr1.Bucket=vx;class N90{si;cluster;constructor($,Z=""){this.si=$,this.cluster=Z}get bucket(){return this.si.config.name.startsWith(b5.kvPrefix)?this.si.config.name.substring(b5.kvPrefix.length):this.si.config.name}get values(){return this.si.state.messages}get history(){return this.si.config.max_msgs_per_subject}get ttl(){return(0,x5.millis)(this.si.config.max_age)}get markerTTL(){if(typeof this.si.config.subject_delete_marker_ttl==="number")return(0,x5.millis)(this.si.config.subject_delete_marker_ttl);return 0}get bucket_location(){return this.cluster}get backingStore(){return this.si.config.storage}get storage(){return this.si.config.storage}get replicas(){return this.si.config.num_replicas}get description(){return this.si.config.description??""}get maxBucketSize(){return this.si.config.max_bytes}get maxValueSize(){return this.si.config.max_msg_size}get max_bytes(){return this.si.config.max_bytes}get placement(){return this.si.config.placement||{cluster:"",tags:[]}}get placementCluster(){return this.si.config.placement?.cluster??""}get republish(){return this.si.config.republish??{src:"",dest:""}}get streamInfo(){return this.si}get size(){return this.si.state.bytes}get metadata(){return this.si.config.metadata??{}}get compression(){if(this.si.config.compression)return this.si.config.compression!==Z5.StoreCompression.None;return!1}}yr1.KvStatusImpl=N90;class br1{bucket;sm;prefixLen;codec;constructor($,Z,X,Q){this.bucket=$,this.prefixLen=Z,this.sm=X,this.codec=Q}get rawKey(){return this.sm.subject.substring(this.prefixLen)}get key(){return this.codec.key.decode(this.rawKey)}get value(){return this.codec.value.decode(this.sm.data)}get delta(){return 0}get created(){return this.sm.time}get revision(){return this.sm.seq}get operation(){if(this.sm.header?.has("Nats-Marker-Reason")){if(this.sm.header?.get("Nats-Marker-Reason")==="MaxAge")return"PURGE"}return this.sm.header?.get(yr1.kvOperationHdr)||"PUT"}get length(){let $=this.sm.header.get(Z5.JsHeaders.MessageSizeHdr)||"";if($!=="")return parseInt($,10);return this.sm.data.length}json($){return JSON.parse(x5.TD.decode(this.value),$)}string(){return x5.TD.decode(this.value)}}class xr1{bucket;sm;prefixLen;update;codec;constructor($,Z,X,Q,Y){this.bucket=$,this.prefixLen=Z,this.sm=X,this.update=Q,this.codec=Y}get rawKey(){return this.sm.subject.substring(this.prefixLen)}get key(){return this.codec.key.decode(this.rawKey)}get value(){return this.codec.value.decode(this.sm.data)}get created(){return new Date((0,x5.millis)(this.sm.info.timestampNanos))}get revision(){return this.sm.seq}get operation(){if(this.sm.headers?.has("Nats-Marker-Reason")){if(this.sm.headers?.get("Nats-Marker-Reason")==="MaxAge")return"PURGE"}return this.sm.headers?.get(yr1.kvOperationHdr)||"PUT"}get delta(){return this.sm.info.pending}get length(){let $=this.sm.headers?.get(Z5.JsHeaders.MessageSizeHdr)||"";if($!=="")return parseInt($,10);return this.sm.data.length}get isUpdate(){return this.update}json($){return JSON.parse(x5.TD.decode(this.value),$)}string(){return x5.TD.decode(this.value)}}});var _c0=_((P3)=>{Object.defineProperty(P3,"__esModule",{value:!0});P3.validateKey=P3.validateBucket=P3.NoopKvCodecs=P3.Kvm=P3.defaultBucketOpts=P3.Bucket=P3.Base64KeyCodec=P3.KvWatchInclude=P3.kvPrefix=void 0;var ur1=Sc0();Object.defineProperty(P3,"kvPrefix",{enumerable:!0,get:function(){return ur1.kvPrefix}});Object.defineProperty(P3,"KvWatchInclude",{enumerable:!0,get:function(){return ur1.KvWatchInclude}});var ow=hr1();Object.defineProperty(P3,"Base64KeyCodec",{enumerable:!0,get:function(){return ow.Base64KeyCodec}});Object.defineProperty(P3,"Bucket",{enumerable:!0,get:function(){return ow.Bucket}});Object.defineProperty(P3,"defaultBucketOpts",{enumerable:!0,get:function(){return ow.defaultBucketOpts}});Object.defineProperty(P3,"Kvm",{enumerable:!0,get:function(){return ow.Kvm}});Object.defineProperty(P3,"NoopKvCodecs",{enumerable:!0,get:function(){return ow.NoopKvCodecs}});Object.defineProperty(P3,"validateBucket",{enumerable:!0,get:function(){return ow.validateBucket}});Object.defineProperty(P3,"validateKey",{enumerable:!0,get:function(){return ow.validateKey}})});var vc0=_((fO)=>{Object.defineProperty(fO,"__esModule",{value:!0});fO.NoopKvCodecs=fO.Kvm=fO.defaultBucketOpts=fO.Bucket=fO.Base64KeyCodec=fO.KvWatchInclude=void 0;var Gr8=_c0();Object.defineProperty(fO,"KvWatchInclude",{enumerable:!0,get:function(){return Gr8.KvWatchInclude}});var ui=_c0();Object.defineProperty(fO,"Base64KeyCodec",{enumerable:!0,get:function(){return ui.Base64KeyCodec}});Object.defineProperty(fO,"Bucket",{enumerable:!0,get:function(){return ui.Bucket}});Object.defineProperty(fO,"defaultBucketOpts",{enumerable:!0,get:function(){return ui.defaultBucketOpts}});Object.defineProperty(fO,"Kvm",{enumerable:!0,get:function(){return ui.Kvm}});Object.defineProperty(fO,"NoopKvCodecs",{enumerable:!0,get:function(){return ui.NoopKvCodecs}})});function U90(){let $=new TextEncoder,Z=new TextDecoder;return{encode:(X)=>$.encode(JSON.stringify(X)),decode:(X)=>JSON.parse(Z.decode(X))}}class bc0{options;kv=null;codec=U90();constructor($){this.options=$}async init(){let $=this.options.getJetStream();if(!$)return;this.kv=await new lr1.Kvm($).create(Kr8,{storage:cr1.StorageType.Memory})}async get($,Z){if(!this.kv)return null;try{let X=await this.kv.get(`${$}.${Z}`);if(!X?.value?.length)return null;if(X.operation==="DEL"||X.operation==="PURGE")return null;return this.codec.decode(X.value)}catch{return null}}async set($,Z,X){if(!this.kv)return;try{await this.kv.put(`${$}.${Z}`,this.codec.encode(X))}catch{}}async invalidate($){if(!this.kv)return;await Promise.all(["tools","resources","prompts"].map(async(X)=>{try{await this.kv.delete(`${X}.${$}`)}catch{}}))}teardown(){this.kv=null}}function Wr8($,Z,X){if(X<=0)return!0;if($===void 0)return!0;return Z-$>=X}function O90($){return $ instanceof L1&&$.code===R1.MethodNotFound}function Fr8($){return $ instanceof L1&&$.code===-32000&&/connection closed/i.test($.message)}async function xO($,Z,X,Q,Y,G=0){if(!Q)try{return await X()}catch(F){if(O90(F))return[];return ci.add(1,{type:$,outcome:"error",stage:"no_cache"}),null}let J=`${$}:${Z}`,K=await Q.get($,Z);if(K===null)try{let F=await X();return Q.set($,Z,F).catch(()=>{}),fc0.set(J,Date.now()),ci.add(1,{type:$,outcome:"miss",stage:"miss"}),F}catch(F){if(O90(F))return Q.set($,Z,[]).catch(()=>{}),[];return ci.add(1,{type:$,outcome:"error",stage:"miss"}),null}if(ci.add(1,{type:$,outcome:"hit",stage:"hit"}),Wr8(fc0.get(J),Date.now(),G)&&!B90.has(J)){B90.add(J),fc0.set(J,Date.now());let F=X().then((H)=>Q.set($,Z,H)).catch((H)=>{if(O90(H)||Fr8(H)){if(O90(H))Q.set($,Z,[]).catch(()=>{});return}ci.add(1,{type:$,outcome:"error",stage:"revalidation"})}).finally(()=>B90.delete(J));Y?.(F)}return K}function xc0($){dr1=$}function Z9(){return dr1}var cr1,lr1,ci,Kr8="DECOCMS_MCP_LISTS",B90,fc0,bO=30000,dr1=null;var yY=D(()=>{e5();I6();cr1=V(rD(),1),lr1=V(vc0(),1),ci=w$.createCounter("mcp_list_cache.fetches",{description:"MCP list cache fetch outcomes (hit, miss, error)",unit:"{fetches}"});B90=new Set;w$.createObservableGauge("mcp_list_cache.pending_revalidations",{description:"In-flight background MCP list revalidations on this pod",unit:"{revalidations}"}).addCallback(($)=>$.observe(B90.size));fc0=new Map});async function yc0($,Z,X){let Q=new AbortController,Y,G=new Promise((K,W)=>{Y=setTimeout(()=>{Q.abort(),W(new mr1($.id,X))},X)}),J=(async()=>{let K=await H5($,Z,!0);try{return(await K.listTools(void 0,{timeout:X,signal:Q.signal})).tools}finally{await K.close().catch(()=>{})}})();J.catch(()=>{});try{return await Promise.race([J,G])}finally{if(Y)clearTimeout(Y)}}var mr1;var ir1=D(()=>{li();mr1=class mr1 extends Error{constructor($,Z){super(`listTools timed out after ${Z}ms for connection ${$}`);this.name="ListToolsTimeoutError"}}});function D90($){return(Z)=>{if(Z instanceof L1&&Z.code===R1.MethodNotFound)return $;throw Z}}var pr1=D(()=>{e5()});function L90($,Z,X){let Q=yO($,Z,X,Z9()??void 0),Y=sL(Q,{name:"studio-mcp-server",version:"1.0.0"},{capabilities:Hr8,toolCallTimeoutMs:Hb});Y.server.setRequestHandler(qU,async()=>{return await Q.listResources().catch(D90({resources:[]}))}),Y.server.setRequestHandler(MU,async()=>{return await Q.listResourceTemplates().catch(D90({resourceTemplates:[]}))}),Y.server.setRequestHandler(kU,async()=>{return await Q.listPrompts().catch(D90({prompts:[]}))});let G=Y.close.bind(Y);return Y.close=async()=>{await G(),await Q.close().catch(()=>{})},Y}var Hr8;var nr1=D(()=>{hX();e5();di();yY();pr1();Hr8={tools:{},resources:{},prompts:{}}});var wH=D(()=>{li();ir1();nr1()});function mi($,Z,X){if(Z.some((Q)=>Q!=="*"&&Q.startsWith("SELF::"))&&$.SELF===void 0)$.SELF={value:`${X}_self`}}function ii($,Z){let X=new Map;for(let Q of Z){if(Q==="*")continue;let[Y,G]=J50(Q);if(!Nr8.has(G))continue;let J=em(Y,$);if(typeof J!=="object"||J===null||!("value"in J))continue;let K=J.value;if(typeof K!=="string")continue;X.set(`${K}:${G}`,{targetConnectionId:K,scope:G})}return[...X.values()]}async function pi($,Z,X,Q){for(let J of Z){if(J==="*")continue;let[K]=J50(J),W=em(K,$);if(W===void 0||W===null)throw Error(`Scope references key "${K}" but it's not present in state`)}let Y=td1($,Z),G=`${X}_self`;for(let J of Y){if(J===G)continue;let K=await Q.storage.connections.findById(J);if(!K||K.organization_id!==X)throw Error(`Referenced connection not found: ${J}`);try{await Q.access.check(J)}catch(W){throw Error(`Access denied to referenced connection: ${J}. ${W.message}`)}}}var Nr8;var gc0=D(()=>{uh0();c40();Nr8=new Set([h40,u40])});import{z as tr1}from"zod";var Ur8,Or8,hc0;var or1=D(()=>{C4();M0();q$();yY();wH();gc0();fi();hK();Ur8=tr1.object({data:Y80.describe("Data for the new connection (id is auto-generated if not provided)")}),Or8=tr1.object({item:h7.describe("The created connection entity")}),hc0=u({name:"COLLECTION_CONNECTIONS_CREATE",description:"Create a new MCP connection. Auto-fetches and caches the server's tool list.",annotations:{title:"Create Connection",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:Ur8,outputSchema:Or8,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 connection");let Y={...$.data,organization_id:X.id,created_by:Q};if(Y.id){if((await Z.storage.connections.findById(Y.id))?.organization_id===X.id)throw Error("Connection already exists in organization")}if(Y.connection_type==="VIRTUAL"){let N=Vf(Y.connection_url);if(!N)throw Error("VIRTUAL connection requires connection_url in format: virtual://$virtual_mcp_id");let U=await Z.storage.virtualMcps.findById(N);if(!U)throw Error(`Virtual MCP not found: ${N}`);if(U.organization_id!==X.id)throw Error("Virtual MCP does not belong to the current organization");Y.connection_url=Sf(N)}if(Y.connection_type==="STDIO"&&!b0().localMode)throw Error("STDIO connections are only available in local mode (--local-mode).");let G=await CO({id:`pending-${Date.now()}`,title:Y.title,connection_type:Y.connection_type,connection_url:Y.connection_url,connection_token:Y.connection_token,connection_headers:Y.connection_headers}).catch(()=>null),J=G?.tools?.length?G.tools:null,K=G?.scopes?.length?G.scopes:Y.configuration_scopes??null,W=Y.configuration_state??null;if(W&&K?.length)mi(W,K,X.id),await pi(W,K,X.id,Z);let F=await Z.storage.connections.createNew({...Y,tools:null,configuration_state:W,configuration_scopes:K}),H=W&&K?.length?ii(W,K):[];if(H.length>0){let N;try{await Z.storage.connectionCredentialVault.replaceGrantsForSubject({organizationId:X.id,subjectConnectionId:F.id,createdBy:Q,grants:H});let{plaintextToken:U,record:O}=await Z.storage.connectionCredentialVault.createOrRotateWorkloadToken({organizationId:X.id,subjectConnectionId:F.id});N=O.id,await(await H5(F,Z,!1)).callTool({name:"ON_MCP_CONFIGURATION",arguments:{state:W,scopes:K,firstRun:!0,vault:{baseUrl:Z.baseUrl,org:X.slug??X.id,subjectConnectionId:F.id,token:U}}})}catch(U){if(N)await Z.storage.connectionCredentialVault.revokeWorkloadToken({organizationId:X.id,subjectConnectionId:F.id,tokenId:N});throw await Z.storage.connections.delete(F.id),U}}if(J)Z9()?.set("tools",F.id,J).catch(()=>{});return x1.capture({distinctId:Q,event:"connection_created",groups:{organization:X.id},properties:{connection_id:F.id,connection_type:F.connection_type,app_name:F.app_name??null,organization_id:X.id,tools_count:J?.length??0}}),{item:F}}})});import{z as cG}from"zod/v4";import{z as rr1}from"zod/v4";import{z as w90}from"zod/v4";import{z as WW}from"zod/v4";import{z as wr8}from"zod/v4";import{z as rw}from"zod/v4";import{z as FW}from"zod/v4";import{z as _Z}from"zod/v4";import{z as ar1}from"zod/v4";import{z as z90}from"zod/v4";import{z as ur8}from"zod/v4";import{z as sr1}from"zod/v4";import{z as E90}from"zod/v4";import{z as or8}from"zod/v4";function ni($,Z){if($===Z)return!0;if($==null||Z==null)return $===Z;if(typeof $!==typeof Z)return!1;if(Array.isArray($)&&Array.isArray(Z)){if($.length!==Z.length)return!1;return $.every((X,Q)=>ni(X,Z[Q]))}if(typeof $==="object"&&typeof Z==="object"){let X=Object.keys($),Q=Object.keys(Z);if(X.length!==Q.length)return!1;return X.every((Y)=>Q.includes(Y)&&ni($[Y],Z[Y]))}return!1}function yr8(){return($)=>{if(!Array.isArray($))return!0;let Z=[];return $.every((X)=>{if(Z.some((Y)=>ni(X,Y)))return!1;return Z.push(X),!0})}}function j90($,Z){return $.safeParse(Z).success}function U7($){if(typeof $==="boolean")return $?cG.any():cG.never();let Z={};for(let Y of er8)Y.apply(Z,$);let X=[];if(Z.string!==!1)X.push(Z.string||cG.string());if(Z.number!==!1)X.push(Z.number||cG.number());if(Z.boolean!==!1)X.push(Z.boolean||cG.boolean());if(Z.null!==!1)X.push(Z.null||cG.null());if(Z.array!==!1)X.push(Z.array||cG.array(cG.any()));if(Z.tuple!==!1&&Z.tuple!==void 0)X.push(Z.tuple);if(Z.object!==!1)if(Z.object)X.push(Z.object);else{let Y=cG.custom((G)=>{return typeof G==="object"&&G!==null&&!Array.isArray(G)},"Must be an object, not an array");X.push(Y)}if(Z.file!==!1&&Z.file!==void 0)X.push(Z.file);let Q;if(X.length===0)Q=cG.never();else if(X.length===1)Q=X[0];else if(!Object.keys($).some((G)=>G!=="$schema"&&G!=="title"&&G!=="description"))Q=cG.any();else Q=cG.union(X);for(let Y of $a8)Q=Y.apply(Q,$);return Q}var Br8=class{apply($,Z){if(!Z.type)return;let X=Array.isArray(Z.type)?Z.type:[Z.type],Q=new Set(X);if(!Q.has("string"))$.string=!1;if(!Q.has("number")&&!Q.has("integer"))$.number=!1;if(!Q.has("boolean"))$.boolean=!1;if(!Q.has("null"))$.null=!1;if(!Q.has("array"))$.array=!1;if(!Q.has("object"))$.object=!1;if(Q.has("integer")&&$.number!==!1){let Y=$.number||rr1.number();if(Y instanceof rr1.ZodNumber)$.number=Y.int()}}},Dr8=class{apply($,Z){if(Z.const===void 0)return;let X=Z.const;if($.string=!1,$.number=!1,$.boolean=!1,$.null=!1,$.array=!1,$.object=!1,typeof X==="string")$.string=w90.literal(X);else if(typeof X==="number")$.number=w90.literal(X);else if(typeof X==="boolean")$.boolean=w90.literal(X);else if(X===null)$.null=w90.null();else if(Array.isArray(X))$.array=void 0;else if(typeof X==="object")$.object=void 0}},Lr8=class{apply($,Z){if(!Z.enum)return;if(Z.enum.length===0){if(!Z.type)$.string=!1,$.number=!1,$.boolean=!1,$.null=!1,$.array=!1,$.object=!1;return}let X={string:Z.enum.filter((Q)=>typeof Q==="string"),number:Z.enum.filter((Q)=>typeof Q==="number"),boolean:Z.enum.filter((Q)=>typeof Q==="boolean"),null:Z.enum.filter((Q)=>Q===null),array:Z.enum.filter((Q)=>Array.isArray(Q)),object:Z.enum.filter((Q)=>typeof Q==="object"&&Q!==null&&!Array.isArray(Q))};$.string=this.createTypeSchema(X.string,"string"),$.number=this.createTypeSchema(X.number,"number"),$.boolean=this.createTypeSchema(X.boolean,"boolean"),$.null=X.null.length>0?WW.null():!1,$.array=X.array.length>0?void 0:!1,$.object=X.object.length>0?void 0:!1}createTypeSchema($,Z){if($.length===0)return!1;if($.length===1)return WW.literal($[0]);if(Z==="string")return WW.enum($);if(Z==="number"){let[X,Q,...Y]=$;return WW.union([WW.literal(X),WW.literal(Q),...Y.map((G)=>WW.literal(G))])}if(Z==="boolean")return WW.union([WW.literal(!0),WW.literal(!1)]);return!1}},Er8=class{apply($,Z){let X=Z;if(X.type==="string"&&X.format==="binary"&&X.contentEncoding==="binary"){let Q=wr8.file();if(X.minLength!==void 0)Q=Q.min(X.minLength);if(X.maxLength!==void 0)Q=Q.max(X.maxLength);if(X.contentMediaType!==void 0)Q=Q.mime(X.contentMediaType);$.file=Q,$.string=!1}}},jr8=class{apply($,Z){let X=Z;if(Z.type===void 0&&(X.minLength!==void 0||X.maxLength!==void 0||X.pattern!==void 0)){if($.string===void 0)$.string=rw.string()}}},zr8=class{apply($,Z){let X=Z;if(X.minLength===void 0)return;if($.string!==!1){let Q=$.string||rw.string();if(Q instanceof rw.ZodString)$.string=Q.refine((Y)=>{return Array.from(Y).length>=X.minLength},{message:`String must be at least ${X.minLength} characters long`})}}},Pr8=class{apply($,Z){let X=Z;if(X.maxLength===void 0)return;if($.string!==!1){let Q=$.string||rw.string();if(Q instanceof rw.ZodString)$.string=Q.refine((Y)=>{return Array.from(Y).length<=X.maxLength},{message:`String must be at most ${X.maxLength} characters long`})}}},Ar8=class{apply($,Z){let X=Z;if(!X.pattern)return;if($.string!==!1){let Q=$.string||rw.string();if(Q instanceof rw.ZodString){let Y=new RegExp(X.pattern);$.string=Q.regex(Y)}}}},Tr8=class{apply($,Z){let X=Z;if(X.minimum===void 0)return;if($.number!==!1){let Q=$.number||FW.number();if(Q instanceof FW.ZodNumber)$.number=Q.min(X.minimum)}}},Rr8=class{apply($,Z){let X=Z;if(X.maximum===void 0)return;if($.number!==!1){let Q=$.number||FW.number();if(Q instanceof FW.ZodNumber)$.number=Q.max(X.maximum)}}},Ir8=class{apply($,Z){let X=Z;if(X.exclusiveMinimum===void 0)return;if($.number!==!1){let Q=$.number||FW.number();if(Q instanceof FW.ZodNumber)if(typeof X.exclusiveMinimum==="number")$.number=Q.gt(X.exclusiveMinimum);else $.number=!1}}},qr8=class{apply($,Z){let X=Z;if(X.exclusiveMaximum===void 0)return;if($.number!==!1){let Q=$.number||FW.number();if(Q instanceof FW.ZodNumber)if(typeof X.exclusiveMaximum==="number")$.number=Q.lt(X.exclusiveMaximum);else $.number=!1}}},Mr8=class{apply($,Z){let X=Z;if(X.multipleOf===void 0)return;if($.number!==!1){let Q=$.number||FW.number();if(Q instanceof FW.ZodNumber)$.number=Q.refine((Y)=>{if(X.multipleOf===0)return!1;let G=Y/X.multipleOf,J=Math.round(G),K=Math.min(Math.abs(Y)*Number.EPSILON*10,Math.abs(X.multipleOf)*Number.EPSILON*10);return Math.abs(G-J)<=K/Math.abs(X.multipleOf)},{message:`Must be a multiple of ${X.multipleOf}`})}}},kr8=class{apply($,Z){let X=Z;if(Z.type===void 0&&(X.minItems!==void 0||X.maxItems!==void 0||X.items!==void 0||X.prefixItems!==void 0)){if($.array===void 0)$.array=_Z.array(_Z.any())}}},Vr8=class{apply($,Z){let X=Z;if(X.minItems===void 0)return;if($.array!==!1)$.array=($.array||_Z.array(_Z.any())).min(X.minItems)}},Sr8=class{apply($,Z){let X=Z;if(X.maxItems===void 0)return;if($.array!==!1)$.array=($.array||_Z.array(_Z.any())).max(X.maxItems)}},Cr8=class{apply($,Z){let X=Z;if($.array===!1)return;if(Array.isArray(X.items))$.array=$.array||_Z.array(_Z.any());else if(X.items&&typeof X.items!=="boolean"&&!X.prefixItems){let Q=U7(X.items),Y=_Z.array(Q);if($.array&&$.array instanceof _Z.ZodArray){let G=$.array._def;if(G.checks)G.checks.forEach((J)=>{if(J._zod&&J._zod.def){let K=J._zod.def;if(K.check==="min_length"&&K.minimum!==void 0)Y=Y.min(K.minimum);else if(K.check==="max_length"&&K.maximum!==void 0)Y=Y.max(K.maximum)}})}$.array=Y}else if(typeof X.items==="boolean"&&X.items===!1)if(!X.prefixItems)$.array=_Z.array(_Z.any()).max(0);else $.array=$.array||_Z.array(_Z.any());else if(typeof X.items==="boolean"&&X.items===!0)$.array=$.array||_Z.array(_Z.any());else if(X.prefixItems)$.array=$.array||_Z.array(_Z.any())}},_r8=class{apply($,Z){if(Z.type!=="array")return;let X=Z;if(!Array.isArray(X.items))return;if($.array===!1)return;let Q=X.items.map((G)=>U7(G)),Y;if(Q.length===0)Y=ar1.tuple([]);else Y=ar1.tuple(Q);if(X.minItems!==void 0&&X.minItems>Q.length)Y=!1;if(X.maxItems!==void 0&&X.maxItems<Q.length)Y=!1;$.tuple=Y,$.array=!1}},vr8=class{apply($,Z){let X=Z;if($.object===!1)return;if(X.properties||X.required||X.additionalProperties!==void 0)$.object=$.object||z90.object({}).passthrough()}},fr8=class{apply($,Z){let X=Z;if(Z.type===void 0&&(X.maxProperties!==void 0||X.minProperties!==void 0)){if($.object===void 0)$.object=z90.object({}).passthrough()}}},br8=class{apply($,Z){let X=Z;if(X.maxProperties===void 0)return;if($.object!==!1){let Q=$.object||z90.object({}).passthrough();$.object=Q.refine((Y)=>Object.keys(Y).length<=X.maxProperties,{message:`Object must have at most ${X.maxProperties} properties`})}}},xr8=class{apply($,Z){let X=Z;if(X.minProperties===void 0)return;if($.object!==!1){let Q=$.object||z90.object({}).passthrough();$.object=Q.refine((Y)=>Object.keys(Y).length>=X.minProperties,{message:`Object must have at least ${X.minProperties} properties`})}}},gr8=class{apply($,Z){if(!Z.not)return $;let X=U7(Z.not);return $.refine((Q)=>!j90(X,Q),{message:"Value must not match the 'not' schema"})}},hr8=class{apply($,Z){if(Z.uniqueItems!==!0)return $;return $.refine(yr8(),{message:"Array items must be unique"})}},cr8=class{apply($,Z){if(!Z.allOf||Z.allOf.length===0)return $;return Z.allOf.map((Q)=>U7(Q)).reduce((Q,Y)=>ur8.intersection(Q,Y),$)}},lr8=class{apply($,Z){if(!Z.anyOf||Z.anyOf.length===0)return $;let X=Z.anyOf.length===1?U7(Z.anyOf[0]):sr1.union([U7(Z.anyOf[0]),U7(Z.anyOf[1]),...Z.anyOf.slice(2).map((Q)=>U7(Q))]);return sr1.intersection($,X)}},dr8=class{apply($,Z){if(!Z.oneOf||Z.oneOf.length===0)return $;let X=Z.oneOf.map((Q)=>U7(Q));return $.refine((Q)=>{let Y=0;for(let G of X)if(G.safeParse(Q).success){if(Y++,Y>1)return!1}return Y===1},{message:"Value must match exactly one of the oneOf schemas"})}},mr8=class{apply($,Z){let X=Z;if(X.prefixItems&&Array.isArray(X.prefixItems)){let Y=X.prefixItems.map((G)=>U7(G));return $.refine((G)=>{if(!Array.isArray(G))return!0;for(let J=0;J<Math.min(G.length,Y.length);J++)if(!j90(Y[J],G[J]))return!1;if(G.length>Y.length){if(typeof X.items==="boolean"&&X.items===!1)return!1;else if(X.items&&typeof X.items==="object"&&!Array.isArray(X.items)){let J=U7(X.items);for(let K=Y.length;K<G.length;K++)if(!j90(J,G[K]))return!1}}return!0},{message:"Array does not match prefixItems schema"})}return $}},ir8=class{apply($,Z){let X=Z;if(!X.properties&&!X.required&&X.additionalProperties!==!1)return $;if($ instanceof E90.ZodObject||$ instanceof E90.ZodRecord){let Q={};if(X.properties){for(let[Y,G]of Object.entries(X.properties))if(G!==void 0)Q[Y]=U7(G)}if(X.required&&Array.isArray(X.required)){let Y=new Set(X.required);for(let G of Object.keys(Q))if(!Y.has(G))Q[G]=Q[G].optional()}else for(let Y of Object.keys(Q))Q[Y]=Q[Y].optional();if(X.additionalProperties===!1)return E90.object(Q);else return E90.object(Q).passthrough()}return $.refine((Q)=>{if(typeof Q!=="object"||Q===null||Array.isArray(Q))return!0;if(X.properties){for(let[Y,G]of Object.entries(X.properties))if(G!==void 0){if(Object.getOwnPropertyDescriptor(Q,Y)!==void 0){if(!U7(G).safeParse(Q[Y]).success)return!1}}}if(X.required&&Array.isArray(X.required)){for(let Y of X.required)if(Object.getOwnPropertyDescriptor(Q,Y)===void 0)return!1}if(X.additionalProperties===!1&&X.properties){let Y=new Set(Object.keys(X.properties));for(let G in Q)if(!Y.has(G))return!1}return!0},{message:"Object constraints validation failed"})}},pr8=class{apply($,Z){if(!Z.enum||Z.enum.length===0)return $;let X=Z.enum.filter((Q)=>Array.isArray(Q)||typeof Q==="object"&&Q!==null);if(X.length===0)return $;return $.refine((Q)=>{if(typeof Q!=="object"||Q===null)return!0;return X.some((Y)=>ni(Q,Y))},{message:"Value must match one of the enum values"})}},nr8=class{apply($,Z){if(Z.const===void 0)return $;let X=Z.const;if(typeof X!=="object"||X===null)return $;return $.refine((Q)=>ni(Q,X),{message:"Value must equal the const value"})}},tr8=class{apply($,Z){if(Z.description)$=$.describe(Z.description);return $}},rr8=class{apply($,Z){var X;let Q=Z;if(!((X=Q.required)==null?void 0:X.includes("__proto__"))||Z.type!==void 0)return $;return or8.any().refine((Y)=>this.validateRequired(Y,Q.required),{message:"Missing required properties"})}validateRequired($,Z){if(typeof $!=="object"||$===null||Array.isArray($))return!0;return Z.every((X)=>Object.prototype.hasOwnProperty.call($,X))}},ar8=class{apply($,Z){var X;let Q=Z;if(Q.contains===void 0)return $;let Y=U7(Q.contains),G=(X=Q.minContains)!=null?X:1,J=Q.maxContains;return $.refine((K)=>{if(!Array.isArray(K))return!0;let W=0;for(let F of K)if(j90(Y,F))W++;if(W<G)return!1;if(J!==void 0&&W>J)return!1;return!0},{message:"Array must contain required items matching the schema"})}},sr8=class{apply($,Z){let{default:X}=Z;if(X===void 0)return $;if(!$.safeParse(X).success)return $;return $.default(X)}},er8,$a8;var er1=D(()=>{er8=[new Dr8,new Lr8,new Br8,new Er8,new jr8,new kr8,new fr8,new zr8,new Pr8,new Ar8,new Tr8,new Rr8,new Ir8,new qr8,new Mr8,new _r8,new Vr8,new Sr8,new Cr8,new br8,new xr8,new vr8],$a8=[new rr8,new pr8,new nr8,new cr8,new lr8,new dr8,new mr8,new ir8,new ar8,new gr8,new hr8,new sr8,new tr8]});class uc0{constructor($){this._url=$}start(){if(this._socket)throw Error("WebSocketClientTransport already started! If using Client class, note that connect() calls start() automatically.");return new Promise(($,Z)=>{this._socket=new WebSocket(this._url,Za8),this._socket.onerror=(X)=>{let Q="error"in X?X.error:Error(`WebSocket error: ${JSON.stringify(X)}`);Z(Q),this.onerror?.(Q)},this._socket.onopen=()=>{$()},this._socket.onclose=()=>{this.onclose?.()},this._socket.onmessage=(X)=>{let Q;try{Q=SY.parse(JSON.parse(X.data))}catch(Y){this.onerror?.(Y);return}this.onmessage?.(Q)}})}async close(){this._socket?.close()}send($){return new Promise((Z,X)=>{if(!this._socket){X(Error("Not connected"));return}this._socket?.send(JSON.stringify($)),Z()})}}var Za8="mcp";var $a1=D(()=>{e5()});function Xa8($){let Z=$;if(!Z||typeof Z!=="object"||!("method"in Z))return null;switch(Z.method){case"initialize":{let X=Z?.params?.protocolVersion;if(!X)return null;return{type:"emit",message:{result:{protocolVersion:X,capabilities:{tools:{}},serverInfo:{name:"deco-chat-server",version:"1.0.0"}},jsonrpc:Z.jsonrpc??"2.0",id:Z.id}}}case"notifications/roots/list_changed":case"notifications/initialized":case"notifications/cancelled":case"notifications/progress":return{type:"suppress"};default:return null}}var P90;var cc0=D(()=>{$b();P90=class P90 extends pK{constructor($,Z){super($,Z)}send($,Z){let X=Xa8($);if(X?.type==="emit")return this.onmessage?.(X.message),Promise.resolve();if(X?.type==="suppress")return Promise.resolve();return super.send($,Z)}}});var Za1,Xa1=async($,Z,X)=>{let Q=Qa8($.connection,Z,X);if(!Q)throw Error("Unknown MCP connection type");let Y=new Za1({name:$?.name??"MCP Client",version:"1.0.0"});return await Y.connect(Q),{client:Y}},Qa8=($,Z,X)=>{if($.type==="Websocket")return new uc0(new URL($.url));if($.type!=="SSE"&&$.type!=="HTTP")return null;let Y={...$.token?{authorization:`Bearer ${$.token}`}:{},...X??{},..."headers"in $?$.headers||{}:{}};if($.type==="SSE"){let G={requestInit:{headers:Y,signal:Z}};if($.token)G.eventSourceInit={fetch:(J,K)=>{return fetch(J,{...K,headers:{...Y,Accept:"text/event-stream"},signal:Z})}};return new KH(new URL($.url),G)}return new P90(new URL($.url),{requestInit:{headers:Y,signal:Z,credentials:"include"}})};var Qa1=D(()=>{mK();Sd();$a1();e5();hX();cc0();Za1=class Za1 extends x9{constructor($,Z){super($,{jsonSchemaValidator:F5,...Z})}async listTools($,Z){return await this.request({method:"tools/list",params:$},il,Z)}}});function Ga8($,Z){if(aw.set($,Z),aw.size>Ya8){let X=aw.keys().next().value;if(X!==void 0)aw.delete(X)}}function Ja1($){let Z=(X)=>{if("connection"in $)return Xa1({connection:$.connection},void 0,X);return $.client};return new Proxy({},{get(X,Q){if(Q==="toJSON")return null;if(typeof Q!=="string")throw Error("Name must be a string");if(Q==="listTools")return K;async function Y(W,F=Q){let H=$?.debugId?.(),N=H?{"x-trace-debug-id":H}:void 0,{client:U}=await Z(N),{structuredContent:O,isError:B,content:L}=await U.callTool({name:String(F),arguments:W});if(B){let E=L?.[0]?.text,j=typeof E==="string"?Ya1(E):null,z=j?.code&&typeof $?.getErrorByStatusCode==="function"?$.getErrorByStatusCode(j.code,j.message,j.traceId):null;if(z)throw z;throw Error(`Tool ${String(F)} returned an error: ${JSON.stringify(O??L)}`)}if(O!==void 0)return O;let w=L?.[0]?.text;return typeof w==="string"?Ya1(w):void 0}async function G(){let{client:W}=await Z(),{tools:F}=await W.listTools();return F}async function J(){if(!("connection"in $))return G();let W=$.connection,F=JSON.stringify(W);try{if(!aw.has(F))Ga8(F,G());return await aw.get(F)}catch(H){console.error("Failed to list tools",H),aw.delete(F);return}}async function K(){return(await J()??[]).map((F)=>Ga1(F,Y))}return Y.asTool=async()=>{let F=(await J()??[]).find((H)=>H.name===Q);if(!F)throw Error(`Tool ${Q} not found`);return Ga1(F,Y)},Y}})}var Ya1=($)=>{try{return JSON.parse($)}catch{return $}},Ya8=500,aw,Ga1=($,Z)=>{return{...$,id:$.name,inputSchema:$.inputSchema?U7($.inputSchema):void 0,outputSchema:$.outputSchema?U7($.outputSchema):void 0,execute:(X)=>{return Z(X.context,$.name)}}};var Ka1=D(()=>{er1();Qa1();aw=new Map});function gO($){return Ja1($)}var fx;var lc0=D(()=>{Ka1();fx=new Proxy({},{get($,Z){if(Z==="toJSON")return null;if(Z==="forConnection")return(X)=>gO({connection:X});if(Z==="forClient")return(X)=>gO({client:X});return globalThis[Z]}})});function A90($){return{isImplementedBy:(Z)=>{for(let X of $){let Q=typeof X.name==="string"?new RegExp(`^${X.name}$`):X.name,Y=Z.find((G)=>Q.test(G.name));if(!Y&&X.opt)continue;if(!Y)return!1}return!0}}}var HW=($)=>{return{...A90($),forClient:(Z)=>{return gO({client:Z})},forConnection:(Z)=>{return gO({connection:Z})}}};var sw=D(()=>{lc0()});import{z as y5}from"zod";var Wa1,T90,Fa1,R90,Ha1,Ja8;var Na1=D(()=>{sw();Wa1=y5.object({specversion:y5.literal("1.0").describe("CloudEvents specification version"),id:y5.string().describe("Unique identifier for this event (UUID recommended)"),source:y5.string().describe("Connection ID of the event publisher"),type:y5.string().describe("Event type (e.g., 'order.created', 'user.signup')"),time:y5.string().datetime().optional().describe("Timestamp of when the event occurred (ISO 8601)"),subject:y5.string().optional().describe("Subject/resource identifier (e.g., order ID, user ID)"),datacontenttype:y5.string().optional().default("application/json").describe("Content type of the data attribute"),dataschema:y5.string().url().optional().describe("URI to the schema for the data attribute"),data:y5.unknown().optional().describe("Event payload (any JSON value)")}),T90=y5.object({events:y5.array(Wa1).min(1).describe("Batch of CloudEvents to process")}),Fa1=y5.object({success:y5.boolean().optional().describe("Whether this event was processed successfully"),error:y5.string().optional().describe("Error message for this event"),retryAfter:y5.number().int().positive().optional().describe("Re-deliver this event after this many ms")}),R90=y5.object({success:y5.boolean().optional().describe("Batch success - applies to events not in results"),error:y5.string().optional().describe("Batch error message - applies to events not in results"),processedCount:y5.number().int().min(0).optional().describe("Number of events successfully processed"),retryAfter:y5.number().int().positive().optional().describe("Batch retryAfter - applies to events not in results"),results:y5.record(y5.string(),Fa1).optional().describe("Per-event results keyed by event ID")}),Ha1=[{name:"ON_EVENTS",inputSchema:T90,outputSchema:R90}],Ja8=HW(Ha1)});import{z as g5}from"zod";var Ua1,Oa1,Ba1,Da1,La1,wa1,I90,dc0;var mc0=D(()=>{sw();Ua1=g5.object({type:g5.literal("string"),enum:g5.array(g5.string()).optional(),description:g5.string().optional()}),Oa1=g5.object({type:g5.string(),description:g5.string(),paramsSchema:g5.record(g5.string(),Ua1)}),Ba1=g5.object({}),Da1=g5.object({triggers:g5.array(Oa1)}),La1=g5.object({type:g5.string(),params:g5.record(g5.string(),g5.string()),enabled:g5.boolean(),callbackUrl:g5.url().optional(),callbackToken:g5.string().min(1).optional()}),wa1=g5.object({success:g5.boolean()}),I90=[{name:"TRIGGER_LIST",inputSchema:Ba1,outputSchema:Da1},{name:"TRIGGER_CONFIGURE",inputSchema:La1,outputSchema:wa1}],dc0=HW(I90)});import{z as k$}from"zod";var Ka8,Wa8,Fa8,Ha8,Na8,Ua8,Oa8,Ba8,Da8,La8,wa8,Ea8,ew;var ti=D(()=>{Ka8=k$.object({prefix:k$.string().optional().describe("Filter objects by prefix (e.g., 'folder/' for folder contents)"),maxKeys:k$.number().optional().default(1000).describe("Maximum number of keys to return (default: 1000)"),continuationToken:k$.string().optional().describe("Token for pagination from previous response"),delimiter:k$.string().optional().describe("Delimiter for grouping keys (typically '/'). When set, commonPrefixes returns folder paths.")}),Wa8=k$.object({objects:k$.array(k$.object({key:k$.string().describe("Object key/path"),size:k$.number().describe("Object size in bytes"),lastModified:k$.string().describe("Last modified timestamp"),etag:k$.string().describe("Entity tag for the object")})),nextContinuationToken:k$.string().optional().describe("Token for fetching next page of results"),isTruncated:k$.boolean().describe("Whether there are more results available"),commonPrefixes:k$.array(k$.string()).optional().describe("Folder paths when delimiter is used (e.g., ['photos/2024/', 'photos/2025/'])")}),Fa8=k$.object({key:k$.string().describe("Object key/path to get metadata for")}),Ha8=k$.object({contentType:k$.string().optional().describe("MIME type of the object"),contentLength:k$.number().describe("Size of the object in bytes"),lastModified:k$.string().describe("Last modified timestamp"),etag:k$.string().describe("Entity tag for the object"),metadata:k$.record(k$.string(),k$.string()).optional().describe("Custom metadata key-value pairs")}),Na8=k$.object({key:k$.string().describe("Object key/path to generate URL for"),expiresIn:k$.number().optional().describe("URL expiration time in seconds (default: from state config or 3600)")}),Ua8=k$.object({url:k$.string().describe("Presigned URL for downloading the object"),expiresIn:k$.number().describe("Expiration time in seconds that was used")}),Oa8=k$.object({key:k$.string().describe("Object key/path for the upload"),expiresIn:k$.number().optional().describe("URL expiration time in seconds (default: from state config or 3600)"),contentType:k$.string().optional().describe("MIME type for the object being uploaded")}),Ba8=k$.object({url:k$.string().describe("Presigned URL for uploading the object"),expiresIn:k$.number().describe("Expiration time in seconds that was used")}),Da8=k$.object({key:k$.string().describe("Object key/path to delete")}),La8=k$.object({success:k$.boolean().describe("Whether the deletion was successful"),key:k$.string().describe("The key that was deleted")}),wa8=k$.object({keys:k$.array(k$.string()).max(1000).describe("Array of object keys/paths to delete (max 1000)")}),Ea8=k$.object({deleted:k$.array(k$.string()).describe("Array of successfully deleted keys"),errors:k$.array(k$.object({key:k$.string(),message:k$.string()})).describe("Array of errors for failed deletions")}),ew=[{name:"LIST_OBJECTS",inputSchema:Ka8,outputSchema:Wa8},{name:"GET_OBJECT_METADATA",inputSchema:Fa8,outputSchema:Ha8},{name:"GET_PRESIGNED_URL",inputSchema:Na8,outputSchema:Ua8},{name:"PUT_PRESIGNED_URL",inputSchema:Oa8,outputSchema:Ba8},{name:"DELETE_OBJECT",inputSchema:Da8,outputSchema:La8},{name:"DELETE_OBJECTS",inputSchema:wa8,outputSchema:Ea8}]});import{z as E6}from"zod";var Ea1,ja1,za1,oi,q90,M90,k90,V90,ja8;var ic0=D(()=>{sw();Ea1=E6.object({primary:E6.string().optional().describe("Primary brand color (hex)"),secondary:E6.string().optional().describe("Secondary brand color (hex)"),accent:E6.string().optional().describe("Accent / highlight color (hex)"),background:E6.string().optional().describe("Background color (hex)"),foreground:E6.string().optional().describe("Foreground / text color (hex)")}),ja1=E6.object({heading:E6.string().optional().describe("Font family for headings"),body:E6.string().optional().describe("Font family for body text"),code:E6.string().optional().describe("Font family for code / monospace")}),za1=E6.object({logo:E6.string().optional().describe("Logo URL"),favicon:E6.string().optional().describe("Favicon URL"),ogImage:E6.string().optional().describe("Open Graph image URL")}),oi=E6.object({id:E6.string(),name:E6.string().describe("Brand / company name"),domain:E6.string().optional().describe("Company domain (e.g. example.com)"),colors:Ea1.optional().describe("Semantic color palette"),fonts:ja1.optional().describe("Font families by role"),assets:za1.optional().describe("Visual identity assets"),overview:E6.string().optional().describe("Company overview / description"),tagline:E6.string().optional().describe("Brand tagline"),tone:E6.string().optional().describe("Tone of voice description"),metadata:E6.record(E6.string(),E6.unknown()).optional().describe("Extra design tokens and metadata")}),q90=E6.object({id:E6.string().optional().describe("Brand ID. Omit to get the default brand.")}),M90=E6.object({}),k90=E6.object({items:E6.array(oi)}),V90=[{name:"BRAND_GET",inputSchema:q90,outputSchema:oi},{name:"BRAND_LIST",inputSchema:M90,outputSchema:k90,opt:!0}],ja8=HW(V90)});var pc0=D(()=>{sw();Na1();mc0();ti();ic0()});import{z as E8}from"zod";function EH($){return E8.object({items:E8.array($).describe("Array of collection items"),totalCount:E8.number().int().min(0).optional().describe("Total number of matching items (if available)"),hasMore:E8.boolean().optional().describe("Whether there are more items available")})}function ai($){return E8.object({item:$.nullable().describe("The retrieved item, or null if not found")})}function Aa8($){return E8.object({data:$.partial().describe("Data for the new entity (id may be auto-generated)")})}function Ta8($){return E8.object({item:$.describe("The created entity with generated id")})}function Ra8($){return E8.object({id:E8.string().describe("ID of the entity to update"),data:$.partial().describe("Partial entity data to update")})}function Ia8($){return E8.object({item:$.describe("The updated entity")})}function ei($){return E8.object({item:$.describe("The deleted entity")})}function C90($,Z,X){let Q=$.toUpperCase(),Y=X?.readOnly??!1,G=[{name:`COLLECTION_${Q}_LIST`,inputSchema:A3,outputSchema:EH(Z)},{name:`COLLECTION_${Q}_GET`,inputSchema:ri,outputSchema:ai(Z)}];if(!Y)G.push({name:`COLLECTION_${Q}_CREATE`,inputSchema:Aa8(Z),outputSchema:Ta8(Z),opt:!0},{name:`COLLECTION_${Q}_UPDATE`,inputSchema:Ra8(Z),outputSchema:Ia8(Z),opt:!0},{name:`COLLECTION_${Q}_DELETE`,inputSchema:si,outputSchema:ei(Z),opt:!0});return G}var S90,za8,Pa1,Pa8,A3,ri,si;var lG=D(()=>{S90=E8.object({id:E8.string().describe("Unique identifier for the entity"),title:E8.string().describe("Human-readable title for the entity"),description:E8.string().nullish().describe("Description of the entity"),created_at:E8.string().datetime(),updated_at:E8.string().datetime(),created_by:E8.string().optional(),updated_by:E8.string().optional()}),za8=E8.object({field:E8.array(E8.string()),operator:E8.enum(["eq","gt","gte","lt","lte","in","like","contains"]),value:E8.unknown()}),Pa1=E8.lazy(()=>E8.union([za8,E8.object({operator:E8.enum(["and","or","not"]),conditions:E8.array(Pa1)})])),Pa8=E8.object({field:E8.array(E8.string()),direction:E8.enum(["asc","desc"]),nulls:E8.enum(["first","last"]).optional()}),A3=E8.object({where:Pa1.optional().describe("Filter expression"),orderBy:E8.array(Pa8).optional().describe("Sort expressions"),limit:E8.number().int().min(1).max(1000).optional().describe("Maximum number of items to return"),offset:E8.number().int().min(0).optional().describe("Number of items to skip")});ri=E8.object({id:E8.string().describe("ID of the entity to retrieve")});si=E8.object({id:E8.string().describe("ID of the entity to delete")})});import{z as bx}from"zod";var qa8,Ma8,Aa1;var Ta1=D(()=>{lG();qa8=S90.extend({avatar:bx.string().describe("URL or data URI to the assistant's avatar image"),system_prompt:bx.string().describe("System prompt that defines the assistant's behavior"),virtual_mcp_id:bx.string().describe("Virtual MCP ID to use for this assistant"),model:bx.object({id:bx.string().describe("Model ID"),connectionId:bx.string().describe("Connection ID that provides the model")}).describe("Selected model reference for this assistant")}),Ma8=C90("assistant",qa8),Aa1=[...Ma8]});import{z as F0}from"zod";var $p,jH,Ia1,ka8,Va8,qa1,Sa8,Ca8,_a8,va8,fa8,ba8,Ma1,xa8,ya8,ga8,ha8,ua8,ca8,la8,da8,ma8,ia8,Y75,pa8,G75,Ra1,na8,ta8,_90,J75;var ka1=D(()=>{sw();lG();$p=F0.lazy(()=>F0.union([F0.null(),F0.string(),F0.number(),F0.boolean(),F0.record(F0.string(),$p),F0.array($p)])),jH=F0.record(F0.string(),F0.record(F0.string(),$p)).optional().describe("Additional provider-specific options. Outer record keyed by provider name, inner by option key"),Ia1=F0.object({type:F0.literal("text"),text:F0.string().describe("The text content"),providerOptions:jH}),ka8=F0.object({type:F0.literal("text"),text:F0.string().describe("The text content"),providerMetadata:F0.any().optional().describe("Additional provider-specific metadata")}),Va8=F0.string().describe("File data as URL string"),qa1=F0.object({type:F0.literal("file"),filename:F0.string().optional().describe("Optional filename of the file"),data:Va8,mediaType:F0.string().describe("IANA media type of the file (e.g., image/png, audio/mp3)"),providerOptions:jH}),Sa8=F0.object({type:F0.literal("file"),mediaType:F0.string().describe("IANA media type of the file (e.g., image/png, audio/mp3)"),data:F0.string().describe("Generated file data as base64 encoded string")}),Ca8=F0.object({type:F0.literal("reasoning"),text:F0.string().describe("The reasoning text"),providerOptions:jH}),_a8=F0.object({type:F0.literal("reasoning"),text:F0.string().describe("The reasoning text"),providerMetadata:F0.any().optional().describe("Additional provider-specific metadata")}),va8=F0.object({type:F0.literal("tool-call"),toolCallId:F0.string().describe("ID of the tool call, used to match with tool result"),toolName:F0.string().describe("Name of the tool being called"),input:F0.string().describe("Arguments of the tool call (JSON-serializable object matching tool input schema)"),providerExecuted:F0.boolean().optional().describe("Whether the tool call will be executed by the provider"),providerOptions:jH}),fa8=F0.object({type:F0.literal("tool-call"),toolCallId:F0.string().describe("ID of the tool call"),toolName:F0.string().describe("Name of the tool being called"),input:F0.string().describe("Stringified JSON object with the tool call arguments"),providerExecuted:F0.boolean().optional().describe("Whether the tool call will be executed by the provider"),providerMetadata:F0.any().optional().describe("Additional provider-specific metadata")}),ba8=F0.union([F0.object({type:F0.literal("text"),value:F0.string()}),F0.object({type:F0.literal("json"),value:$p}),F0.object({type:F0.literal("error-text"),value:F0.string()}),F0.object({type:F0.literal("error-json"),value:$p}),F0.object({type:F0.literal("content"),value:F0.array(F0.union([F0.object({type:F0.literal("text"),text:F0.string().describe("Text content")}),F0.object({type:F0.literal("media"),data:F0.string().describe("Base-64 encoded media data"),mediaType:F0.string().describe("IANA media type")})]))}),F0.object({type:F0.literal("execution-denied"),reason:F0.string().optional()}),F0.string().describe("Raw or JSON-serialized output (e.g. from AI SDK mapToolResultOutput)")]),Ma1=F0.object({type:F0.literal("tool-result"),toolCallId:F0.string().describe("ID of the tool call that this result is associated with"),toolName:F0.string().describe("Name of the tool that generated this result"),output:ba8.describe("Result of the tool call"),result:F0.unknown().describe("Unknown result of the tool call"),providerOptions:jH}),xa8=F0.object({type:F0.literal("tool-result"),toolCallId:F0.string().describe("ID of the tool call that this result is associated with"),toolName:F0.string().describe("Name of the tool that generated this result"),result:F0.any().describe("Result of the tool call (JSON-serializable)"),isError:F0.boolean().optional().describe("Whether the result is an error or error message"),providerExecuted:F0.boolean().optional().describe("Whether the tool result was generated by the provider"),providerMetadata:F0.any().optional().describe("Additional provider-specific metadata")}),ya8=F0.union([F0.object({type:F0.literal("source"),sourceType:F0.literal("url"),id:F0.string().describe("The ID of the source"),url:F0.string().describe("The URL of the source"),title:F0.string().optional().describe("The title of the source"),providerMetadata:F0.any().optional().describe("Additional provider-specific metadata")}),F0.object({type:F0.literal("source"),sourceType:F0.literal("document"),id:F0.string().describe("The ID of the source"),mediaType:F0.string().describe("IANA media type of the document (e.g., application/pdf)"),title:F0.string().describe("The title of the document"),filename:F0.string().optional().describe("Optional filename of the document"),providerMetadata:F0.any().optional().describe("Additional provider-specific metadata")})]),ga8=F0.object({role:F0.literal("system"),content:F0.string().describe("System message content"),providerOptions:jH}),ha8=F0.object({role:F0.literal("user"),content:F0.array(F0.union([Ia1,qa1])).describe("User message content parts (text or file)"),providerOptions:jH}),ua8=F0.object({role:F0.literal("assistant"),content:F0.array(F0.union([Ia1,qa1,Ca8,va8,Ma1])).describe("Assistant message content parts (text, file, reasoning, tool-call, or tool-result)"),providerOptions:jH}),ca8=F0.object({role:F0.literal("tool"),content:F0.array(Ma1).describe("Tool message content (tool results)"),providerOptions:jH}),la8=F0.union([ga8,ha8,ua8,ca8]),da8=F0.array(la8).describe("A list of messages forming the prompt"),ma8=F0.object({prompt:da8.describe("A language model prompt is a standardized prompt type (array of messages with roles: system, user, assistant, tool)"),maxOutputTokens:F0.number().optional().describe("Maximum number of tokens to generate"),temperature:F0.number().optional().describe("Temperature setting. The range depends on the provider and model"),topP:F0.number().optional().describe("Nucleus sampling parameter"),topK:F0.number().optional().describe("Only sample from the top K options for each subsequent token. Used to remove long tail low probability responses"),presencePenalty:F0.number().optional().describe("Presence penalty setting. It affects the likelihood of the model to repeat information that is already in the prompt"),frequencyPenalty:F0.number().optional().describe("Frequency penalty setting. It affects the likelihood of the model to repeatedly use the same words or phrases"),seed:F0.number().optional().describe("The seed (integer) to use for random sampling. If set and supported by the model, calls will generate deterministic results"),stopSequences:F0.array(F0.string()).optional().describe("Stop sequences. If set, the model will stop generating text when one of the stop sequences is generated"),responseFormat:F0.union([F0.object({type:F0.literal("text")}),F0.object({type:F0.literal("json"),schema:F0.any().optional().describe("JSON schema that the generated output should conform to"),name:F0.string().optional().describe("Name of output that should be generated"),description:F0.string().optional().describe("Description of the output that should be generated")})]).optional().describe("Response format. The output can either be text or JSON. Default is text"),tools:F0.array(F0.any()).optional().describe("The tools that are available for the model"),toolChoice:F0.any().optional().describe("Specifies how the tool should be selected. Defaults to 'auto'"),includeRawChunks:F0.boolean().optional().describe("Include raw chunks in the stream. Only applicable for streaming calls"),abortSignal:F0.any().optional().describe("Abort signal for cancelling the operation"),providerOptions:F0.any().optional().describe("Additional provider-specific options")}),ia8=F0.object({content:F0.array(F0.union([ka8,Sa8,_a8,fa8,xa8,ya8])).describe("Ordered content that the model has generated (text, tool-calls, reasoning, files, sources)"),finishReason:F0.enum(["stop","length","content-filter","tool-calls","error","other","unknown"]).describe("Reason why generation stopped"),usage:F0.looseObject({inputTokens:F0.number().optional(),outputTokens:F0.number().optional(),totalTokens:F0.number().optional(),reasoningTokens:F0.number().optional()}).describe("Usage information for the language model call"),providerMetadata:F0.any().optional().describe("Additional provider-specific metadata"),request:F0.object({body:F0.any().optional().describe("Request HTTP body sent to the provider API")}).optional().describe("Optional request information for telemetry and debugging"),response:F0.object({id:F0.string().optional().describe("ID for the generated response"),timestamp:F0.iso.datetime().optional().describe("Timestamp for the start of the generated response"),modelId:F0.string().optional().describe("The ID of the response model that was used"),headers:F0.record(F0.string(),F0.string()).optional().describe("Response headers"),body:F0.any().optional().describe("Response HTTP body")}).optional().describe("Optional response information for telemetry and debugging"),warnings:F0.array(F0.any()).describe("Warnings for the call, e.g. unsupported settings")}),Y75=F0.object({stream:F0.any().describe("ReadableStream of LanguageModelV2StreamPart"),request:F0.object({body:F0.any().optional().describe("Request HTTP body sent to the provider API")}).optional().describe("Optional request information for telemetry and debugging"),response:F0.object({headers:F0.record(F0.string(),F0.string()).optional().describe("Response headers")}).optional().describe("Optional response data")}),pa8=F0.object({supportedUrls:F0.record(F0.string(),F0.array(F0.string())).describe("Supported URL patterns by media type for the provider")}),G75=F0.object({modelId:F0.string().describe("The ID of the model"),logo:F0.string().nullable(),description:F0.string().nullable(),capabilities:F0.array(F0.string()),limits:F0.object({contextWindow:F0.number(),maxOutputTokens:F0.number()}).nullable(),costs:F0.object({input:F0.number(),output:F0.number()}).nullable(),provider:F0.enum(["openai","anthropic","google","x-ai","deepseek","openai-compatible","openrouter"]).nullable()}),Ra1=F0.object({modelId:F0.string().describe("The ID of the model"),callOptions:ma8}),na8=S90.extend({logo:F0.string().nullable(),description:F0.string().nullable(),capabilities:F0.array(F0.string()),limits:F0.object({contextWindow:F0.number(),maxOutputTokens:F0.number()}).nullable(),costs:F0.object({input:F0.number(),output:F0.number()}).nullable(),provider:F0.enum(["openai","anthropic","google","xai","deepseek","openai-compatible","openrouter"]).nullable()}),ta8=C90("llm",na8,{readOnly:!0}),_90=[{name:"LLM_METADATA",inputSchema:F0.object({modelId:F0.string().describe("The ID of the model")}),outputSchema:pa8},{name:"LLM_DO_STREAM",inputSchema:Ra1},{name:"LLM_DO_GENERATE",inputSchema:Ra1,outputSchema:ia8},...ta8],J75=HW(_90)});import{z as $E}from"zod";var oa8,Va1;var Sa1=D(()=>{oa8=$E.object({scopes:$E.array($E.string()).describe("List of scopes available"),stateSchema:$E.record($E.string(),$E.unknown()).describe("JSON Schema (draft-07) defining the state structure")}),Va1=[{name:"MCP_CONFIGURATION",inputSchema:$E.object({}),outputSchema:oa8}]});import{z as h5}from"zod";var ra8,aa8,Ca1;var _a1=D(()=>{ra8=h5.object({}).strict(),aa8=h5.object({billing:h5.object({mode:h5.enum(["prepaid","postpaid"]),limitPeriod:h5.enum(["daily","weekly","monthly"]).nullable()}),limit:h5.object({total:h5.number().nullable(),remaining:h5.number().nullable(),reset:h5.string().nullable()}),usage:h5.object({total:h5.number(),daily:h5.number(),weekly:h5.number(),monthly:h5.number()}),alert:h5.object({enabled:h5.boolean(),threshold_usd:h5.number(),email:h5.string().nullable()}),connectionId:h5.string()}),Ca1=[{name:"GATEWAY_USAGE",inputSchema:ra8,outputSchema:aa8},{name:"GATEWAY_SET_LIMIT",inputSchema:h5.object({}),outputSchema:h5.object({}),opt:!0},{name:"GATEWAY_SET_ALERT",inputSchema:h5.object({}),outputSchema:h5.object({}),opt:!0}]});import{z as va1}from"zod";function dG(){return MY()===null}function v90($,Z){return $===S8.DEV_ASSETS(Z)}function xx($,Z){let X=Qg1(Z,$),Q=new Date().toISOString();return{id:X.id??S8.DEV_ASSETS($),title:X.title,description:X.description??null,icon:X.icon??null,app_name:X.app_name??null,app_id:X.app_id??null,organization_id:$,created_by:"system",created_at:Q,updated_at:Q,connection_type:X.connection_type,connection_url:X.connection_url??null,connection_token:null,connection_headers:null,oauth_config:null,configuration_state:null,configuration_scopes:null,metadata:X.metadata??null,tools:sa8,bindings:["OBJECT_STORAGE"],status:"active"}}var sa8;var yx=D(()=>{gL();ti();C8();sa8=ew.map(($)=>({name:$.name,description:`${$.name} operation for local file storage`,inputSchema:va1.toJSONSchema($.inputSchema),outputSchema:va1.toJSONSchema($.outputSchema)}))});function fa1($,Z){return $||Z===0}function ba1($,Z,X,Q,Y){let G=Z?Y+1:Y,J=$.slice(0,X),K=Q+X<G;return{items:J,totalCount:G,hasMore:K}}function xa1($,Z,X){if(!X)return{sqlOffset:$,sqlLimit:Z};if($===0)return{sqlOffset:0,sqlLimit:Math.max(Z-1,0)};return{sqlOffset:$-1,sqlLimit:Z}}function ea8($,Z){if(Z.length===0)return;let[X,...Q]=Z,Y=X==="slug"?iU($):$[X];for(let G of Q){if(Y===null||typeof Y!=="object")return;Y=Y[G]}return Y}function $s8($){let X=$.replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/%/g,".*").replace(/_/g,".");return new RegExp(`^${X}$`,"i")}function Zs8($,Z,X){if($===void 0)return!0;switch(Z){case"eq":return X===null?$===null:$===X;case"gt":return $>X;case"gte":return $>=X;case"lt":return $<X;case"lte":return $<=X;case"in":return Array.isArray(X)&&X.includes($);case"like":return typeof $==="string"&&$s8(String(X)).test($);case"contains":return String($).toLowerCase().includes(String(X).toLowerCase());default:return!0}}function Zp($,Z){if(!Z)return!0;if("conditions"in Z){let{operator:Q,conditions:Y}=Z;if(Y.length===0)return!0;switch(Q){case"and":return Y.every((G)=>Zp($,G));case"or":return Y.some((G)=>Zp($,G));case"not":return!Y.every((G)=>Zp($,G));default:return!0}}let X=ea8($,Z.field);return Zs8(X,Z.operator,Z.value)}var ya1=D(()=>{x40()});import{z as hO}from"zod";var Xs8=8,Qs8,Ys8,Gs8,Js8,nc0;var ga1=D(()=>{pc0();Ta1();lG();ka1();Sa1();ti();_a1();C8();M0();s5();yY();wH();yx();hK();x40();ya1();Qs8=[{name:/^(COLLECTION_REGISTRY_APP_LIST|REGISTRY_ITEM_LIST)$/,inputSchema:hO.object({})}],Ys8={LLM:_90,LLMS:_90,ASSISTANTS:Aa1,MCP:Va1,OBJECT_STORAGE:ew,AI_GATEWAY_BILLING:Ca1,TRIGGER:I90,REGISTRY:Qs8,BRAND:V90},Gs8=A3.extend({binding:hO.union([hO.array(hO.object({}).passthrough()),hO.object({}).passthrough(),hO.string()]).optional(),include_virtual:hO.boolean().optional().describe("Whether to include VIRTUAL connections in the results. Defaults to false."),slug:hO.string().optional().describe("Filter by connection slug. Matches against app_name, or a slug derived from connection_url or title.")}),Js8=EH(h7),nc0=u({name:"COLLECTION_CONNECTIONS_LIST",description:"List all connections in the organization with filtering, sorting, and pagination",annotations:{title:"List Connections",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:Gs8,outputSchema:Js8,handler:async($,Z)=>{await Z.access.check();let X=t(Z),Q=$.binding?typeof $.binding==="string"?(()=>{let E=Ys8[$.binding.toUpperCase()];if(!E)throw Error(`Unknown binding: ${$.binding}`);return E})():$.binding:void 0,Y=Q?A90(Q):void 0,G=!!Y,J=$.limit??100,K=$.offset??0,W=a5(),F=S8.DEV_ASSETS(X.id),H=xx(X.id,W),N=(!$.slug||iU(H)===$.slug)&&Zp(H,$.where),U=dG()&&!G&&N,{sqlOffset:O,sqlLimit:B}=xa1(K,J,U),{items:L,totalCount:w}=await Z.storage.connections.list(X.id,{includeVirtual:$.include_virtual??!1,slug:$.slug,where:$.where,orderBy:$.orderBy,limit:G?void 0:B,offset:G?void 0:O});if(Y){let E=Z9(),j=S8.SELF(X.id);await Q90(L,Xs8,async(z)=>{if(z.tools!==null)return;let A=z.id===j?async()=>{let{listManagementTools:I}=await Promise.resolve().then(() => (uO(),f90));return I(Z)}:()=>yc0(z,Z,y40),P=await xO("tools",z.id,A,E,(I)=>Z.pendingRevalidations.push(I),bO);if(P!==null)z.tools=P})}if(dG()&&fa1(G,K)&&N&&!L.some((E)=>E.id===F))L.unshift(H);if(G){let E=(await Promise.all(L.map(async(P)=>{if(!P.tools||P.tools.length===0)return null;return Y.isImplementedBy(P.tools.map((k)=>({name:k.name,inputSchema:k.inputSchema,outputSchema:k.outputSchema})))?P:null}))).filter((P)=>P!==null),j=E.length,z=E.slice(K,K+J),A=K+J<j;return{items:z,totalCount:j,hasMore:A}}return ba1(L,U,J,K,w)}})});var Ks8,tc0;var ha1=D(()=>{lG();C8();M0();s5();yY();wH();yx();hK();Ks8=ai(h7),tc0=u({name:"COLLECTION_CONNECTIONS_GET",description:"Get a connection's configuration, tools list, and status by ID.",annotations:{title:"Get Connection",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},_meta:{ui:{visibility:["app"]}},inputSchema:ri,outputSchema:Ks8,handler:async($,Z)=>{let X=t(Z);if(await Z.access.check(),dG()&&v90($.id,X.id))return{item:xx(X.id,a5())};let Q=await Z.storage.connections.findById($.id);if(!Q||Q.organization_id!==X.id)return{item:null};if(Q.tools===null){let Y=S8.SELF(X.id),G=Q.id===Y?async()=>{let{listManagementTools:K}=await Promise.resolve().then(() => (uO(),f90));return K(Z)}:async()=>{let K=await H5(Q,Z,!0);try{return(await K.listTools()).tools}finally{await K.close().catch(()=>{})}},J=await xO("tools",Q.id,G,Z9(),(K)=>Z.pendingRevalidations.push(K),bO);if(J!==null)Q.tools=J}return{item:Q}}})});class l6{db;vault;constructor($,Z){this.db=$;this.vault=Z}async get($){let Z=await this.db.selectFrom("downstream_tokens").selectAll().where("connectionId","=",$).executeTakeFirst();if(!Z)return null;return this.decryptToken(Z)}async upsert($){let Z=new Date().toISOString(),X=await this.vault.encrypt($.accessToken),Q=$.refreshToken?await this.vault.encrypt($.refreshToken):null,Y=$.clientSecret?await this.vault.encrypt($.clientSecret):null,G=$.expiresAt?.toISOString()??null,J=await this.db.insertInto("downstream_tokens").values({id:F8("dtok"),connectionId:$.connectionId,accessToken:X,refreshToken:Q,scope:$.scope,expiresAt:G,clientId:$.clientId,clientSecret:Y,tokenEndpoint:$.tokenEndpoint,createdAt:Z,updatedAt:Z}).onConflict((K)=>K.column("connectionId").doUpdateSet({accessToken:X,refreshToken:Q,scope:$.scope,expiresAt:G,clientId:$.clientId,clientSecret:Y,tokenEndpoint:$.tokenEndpoint,updatedAt:Z})).returning(["id","createdAt"]).executeTakeFirstOrThrow();return{id:J.id,connectionId:$.connectionId,accessToken:$.accessToken,refreshToken:$.refreshToken,scope:$.scope,expiresAt:$.expiresAt,createdAt:J.createdAt,updatedAt:Z,clientId:$.clientId,clientSecret:$.clientSecret,tokenEndpoint:$.tokenEndpoint}}async delete($){await this.db.deleteFrom("downstream_tokens").where("connectionId","=",$).execute()}isExpired($,Z=0){if(!$.expiresAt)return!1;let Q=($.expiresAt instanceof Date?$.expiresAt:new Date($.expiresAt)).getTime();if(Number.isNaN(Q))return!0;return Q-Z<Date.now()}async decryptToken($){let Z=await this.vault.decrypt($.accessToken),X=$.refreshToken?await this.vault.decrypt($.refreshToken):null,Q=$.clientSecret?await this.vault.decrypt($.clientSecret):null;return{id:$.id,connectionId:$.connectionId,accessToken:Z,refreshToken:X,scope:$.scope,expiresAt:$.expiresAt,createdAt:$.createdAt,updatedAt:$.updatedAt,clientId:$.clientId,clientSecret:Q,tokenEndpoint:$.tokenEndpoint}}}var mG=D(()=>{W7()});function gx(...$){if(Ns8)console.log("[mcp-read-cache]",...$)}function Us8($){return $.kind==="org"?"org":`u:${$.userId}`}function oc0($){if($===null||typeof $!=="object")return JSON.stringify($)??"null";if(Array.isArray($))return`[${$.map(oc0).join(",")}]`;return`{${Object.keys($).sort().map((X)=>`${JSON.stringify(X)}:${oc0($[X])}`).join(",")}}`}class y90{config;maxEntries;now;maxTotalBytes;store=new Map;revalidating=new Set;totalBytes=0;constructor($=Ws8,Z=Fs8,X=()=>Date.now(),Q=Hs8){this.config=$;this.maxEntries=Z;this.now=X;this.maxTotalBytes=Q}stats(){return{entries:this.store.size,bytes:this.totalBytes}}deleteKey($){let Z=this.store.get($);if(Z)this.store.delete($),this.totalBytes-=Z.bytes}key($,Z,X,Q){return`${Z}:${Us8(X)}:${$}:${oc0(Q)}`}storeSet($,Z,X,Q){let Y;try{Y=JSON.stringify(Z).length}catch{gx("SKIP non-serializable",$);return}if(Y>Q){gx("SKIP oversize",$,`${Y}b > cap ${Q}b`);return}this.deleteKey($);while(this.store.size>0&&(this.store.size>=this.maxEntries||this.totalBytes+Y>this.maxTotalBytes)){let G=this.store.keys().next().value;if(G===void 0)break;this.deleteKey(G)}this.store.set($,{value:Z,storedAt:X,bytes:Y}),this.totalBytes+=Y}async fetch($){let{type:Z,connectionId:X,scope:Q,params:Y,fetchLive:G,shouldCache:J,onRevalidation:K}=$,W=this.config[Z],F=this.key(Z,X,Q,Y),H=this.now(),N=this.store.get(F),U=N?H-N.storedAt:1/0;if(!N||U>W.maxStaleMs){b90.add(1,{type:Z,outcome:"miss"}),gx(N?"EXPIRED":"MISS",F);let O=await G();if(J?.(O)??!0)this.storeSet(F,O,this.now(),W.maxValueBytes);else gx("NOT-CACHED (shouldCache=false)",F);return O}if(this.store.delete(F),this.store.set(F,N),U>W.revalidateAfterMs&&!this.revalidating.has(F)){b90.add(1,{type:Z,outcome:"stale"}),gx("STALE \u2192 serve + revalidate",F,`age=${U}ms`),this.revalidating.add(F);let O=G().then((B)=>{if(J?.(B)??!0)this.storeSet(F,B,this.now(),W.maxValueBytes)}).catch(()=>{b90.add(1,{type:Z,outcome:"error"})}).finally(()=>this.revalidating.delete(F));K?.(O)}else b90.add(1,{type:Z,outcome:"hit"}),gx("HIT",F,`age=${U}ms`);return N.value}invalidate($){let Z=`${$}:`;for(let X of[...this.store.keys()])if(X.startsWith(Z))this.deleteKey(X)}}function ac0(){return b0().mcpCacheEnabled}function g90(){return ac0()?rc0:null}var b90,x90=1024,ua1,Ws8,Fs8=2000,Hs8,Ns8,rc0;var Xp=D(()=>{I6();q$();b90=w$.createCounter("mcp_read_cache.fetches",{description:"MCP read cache outcomes (hit, stale, miss, error)",unit:"{fetches}"}),ua1=x90*x90,Ws8={"tools/call":{revalidateAfterMs:30000,maxStaleMs:300000,maxValueBytes:512*x90},"resources/read":{revalidateAfterMs:60000,maxStaleMs:300000,maxValueBytes:4*ua1},"prompts/get":{revalidateAfterMs:60000,maxStaleMs:300000,maxValueBytes:512*x90}},Hs8=256*ua1,Ns8=typeof process<"u"&&!!process.env?.MCP_CACHE_DEBUG;rc0=new y90;w$.createObservableGauge("mcp_read_cache.entries",{description:"Current entry count in the per-pod MCP read cache",unit:"{entries}"}).addCallback(($)=>$.observe(rc0.stats().entries));w$.createObservableGauge("mcp_read_cache.bytes",{description:"Approximate total bytes held in the per-pod MCP read cache",unit:"By"}).addCallback(($)=>$.observe(rc0.stats().bytes))});function da1($){g90()?.invalidate($)}function hx($){da1($);let Z=sc0?.();if(!Z)return;try{Z.publish(ca1,Os8.encode(JSON.stringify({connectionId:$,originId:la1})))}catch(X){console.warn("[McpCacheInvalidation] publish failed (non-critical):",X)}}function ma1($){if(sc0=$,Qp)return;let Z=$();if(!Z)return;Qp=Z.subscribe(ca1),(async()=>{for await(let X of Qp)try{let Q=JSON.parse(Bs8.decode(X.data));if(Q.originId===la1)continue;da1(Q.connectionId)}catch{}})().catch(console.error)}function ia1(){Qp?.unsubscribe(),Qp=null,sc0=void 0}var ca1="studio.mcp-cache.invalidate",la1,Os8,Bs8,sc0,Qp=null;var Yp=D(()=>{Xp();la1=crypto.randomUUID(),Os8=new TextEncoder,Bs8=new TextDecoder});import{z as ec0}from"zod";function Ls8($){let Z={...$};for(let X of Ds8)delete Z[X];return Z}function ws8($,Z){return $.connection_url!==void 0?$.connection_url:Z}function zs8($,Z){return $.length===Z.length&&$.every((X,Q)=>X===Z[Q])}var Ds8,Es8,js8,$l0;var pa1=D(()=>{wH();mG();M0();q$();yY();Yp();gc0();fi();hK();Ds8=["id","organization_id","created_by","created_at"];Es8=ec0.object({id:ec0.string().describe("ID of the connection to update"),data:G80.describe("Partial connection data to update")}),js8=ec0.object({item:h7.describe("The updated connection entity")});$l0=u({name:"COLLECTION_CONNECTIONS_UPDATE",description:"Update a connection's configuration. Re-fetches tools from the server on URL change.",annotations:{title:"Update Connection",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:Es8,outputSchema:js8,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 connection");let{id:Y}=$,G=Ls8($.data),J=G.configuration_state!==void 0||G.configuration_scopes!==void 0,K=await Z.storage.connections.findById(Y);if(!K||K.organization_id!==X.id)throw Error("Connection not found in organization");let W=G.connection_type??K.connection_type,F=ws8(G,K.connection_url);if(W==="VIRTUAL"){let f=Vf(F);if(!f)throw Error("VIRTUAL connection requires connection_url in format: virtual://$virtual_mcp_id");let b=await Z.storage.virtualMcps.findById(f);if(!b)throw Error(`Virtual MCP not found: ${f}`);if(b.organization_id!==X.id)throw Error("Virtual MCP does not belong to the current organization");F=Sf(f)}let H=G.configuration_state??K.configuration_state??{},N=G.configuration_scopes??K.configuration_scopes??[];if(J){if(G.configuration_state!==void 0)H=G.configuration_state??{};else if(H===null||H===void 0)H={};if(G.configuration_scopes!==void 0)N=G.configuration_scopes??[];if(N.length>0){let f=H;mi(f,N,X.id),await pi(f,N,X.id,Z)}}if(W==="STDIO"&&!b0().localMode)throw Error("STDIO connections are only available in local mode (--local-mode).");let U=G.connection_token??K.connection_token;if(!U)try{let b=await new l6(Z.db,Z.vault).get(Y);if(b?.accessToken)U=b.accessToken}catch{}let O=await CO({id:K.id,title:G.title??K.title,connection_type:W,connection_url:F,connection_token:U,connection_headers:G.connection_headers??K.connection_headers}).catch(()=>null),B=O?.tools?.length?O.tools:null,L=!1;if(G.configuration_scopes===void 0&&O?.scopes?.length)L=!zs8(N,O.scopes),N=O.scopes;if(mi(H,N,X.id),L&&N.length>0)await pi(H,N,X.id,Z);let w=J||L,E=w?ii(H,N):[],j=w?ii(K.configuration_state??{},K.configuration_scopes??[]):[],z=K.configuration_state,A=z==null||Object.keys(z).length===0,P,I,k=async()=>{try{await Z.storage.connectionCredentialVault.replaceGrantsForSubject({organizationId:X.id,subjectConnectionId:Y,createdBy:Q,grants:j})}catch(f){console.error("Failed to restore credential grants after credential vault mutation failed",f)}},M={...G,connection_url:F,tools:null,configuration_state:H,configuration_scopes:N,updated_by:Q},C={...K,...M};if(w)try{if(await Z.storage.connectionCredentialVault.replaceGrantsForSubject({organizationId:X.id,subjectConnectionId:Y,createdBy:Q,grants:E}),E.length>0){if(!await Z.storage.connectionCredentialVault.findActiveWorkloadToken({organizationId:X.id,subjectConnectionId:Y})){let{plaintextToken:b,record:p}=await Z.storage.connectionCredentialVault.createOrRotateWorkloadToken({organizationId:X.id,subjectConnectionId:Y});I=p.id,P={baseUrl:Z.baseUrl,org:X.slug??X.id,subjectConnectionId:Y,token:b}}}}catch(f){if(I)await Z.storage.connectionCredentialVault.revokeWorkloadToken({organizationId:X.id,subjectConnectionId:Y,tokenId:I});throw await k(),f}if(w&&H&&N)try{await(await H5(C,Z,!1)).callTool({name:"ON_MCP_CONFIGURATION",arguments:{state:H,scopes:N,firstRun:A,...P?{vault:P}:{}}})}catch(f){if(console.error("Failed to invoke ON_MCP_CONFIGURATION callback",f),I)await Z.storage.connectionCredentialVault.revokeWorkloadToken({organizationId:X.id,subjectConnectionId:Y,tokenId:I});if(E.length>0)throw await k(),f}let m;try{m=await Z.storage.connections.update(Y,M)}catch(f){if(w){if(I)await Z.storage.connectionCredentialVault.revokeWorkloadToken({organizationId:X.id,subjectConnectionId:Y,tokenId:I});await k()}throw f}if(B)Z9()?.set("tools",Y,B).catch(()=>{});return hx(Y),{item:m}}})});import{z as Ps8}from"zod";var As8,Zl0;var na1=D(()=>{lG();C4();M0();yY();Yp();hK();As8=si.extend({force:Ps8.boolean().optional().describe("If true, removes this connection from all agents that reference it before deleting")}),Zl0=u({name:"COLLECTION_CONNECTIONS_DELETE",description:"Permanently delete a connection. Set force=true to auto-remove from referencing Virtual MCPs.",annotations:{title:"Delete Connection",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:As8,outputSchema:ei(h7),handler:async($,Z)=>{r(Z);let X=t(Z);await Z.access.check();let Q=await Z.storage.connections.findById($.id);if(!Q)throw Error(`Connection not found: ${$.id}`);if(Q.organization_id!==X.id)throw Error("Connection not found in organization");if(Q.metadata?.isFixed===!0)throw Error("This connection is a fixed system connection and cannot be deleted");let G=await Z.storage.virtualMcps.listByConnectionId(X.id,$.id);if(G.length>0)if($.force)await Z.storage.virtualMcps.removeConnectionReferences($.id);else throw Error(JSON.stringify({code:"CONNECTION_IN_USE",agentNames:G.map((W)=>W.title)}));await Z.storage.connections.delete($.id);let J=await Z.storage.organizationSettings.get(X.id);if(J?.registry_config){let{registries:W,blockedMcps:F}=J.registry_config;if($.id in W){let{[$.id]:H,...N}=W;await Z.storage.organizationSettings.upsert(X.id,{registry_config:{registries:N,blockedMcps:F}})}}Z9()?.invalidate($.id).catch(()=>{}),hx($.id);let K=o0(Z);if(K)x1.capture({distinctId:K,event:"connection_deleted",groups:{organization:X.id},properties:{connection_id:Q.id,connection_type:Q.connection_type,app_name:Q.app_name??null,organization_id:X.id,forced:$.force??!1}});return{item:Q}}})});import{z as ux}from"zod";var Xl0;var ta1=D(()=>{M0();Xl0=u({name:"CONNECTION_TEST",description:"Test connection health and latency",annotations:{title:"Test Connection",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:ux.object({id:ux.string()}),outputSchema:ux.object({id:ux.string(),healthy:ux.boolean(),latencyMs:ux.number()}),handler:async($,Z)=>{let X=t(Z);await Z.access.check();let Q=await Z.storage.connections.findById($.id);if(!Q||Q.organization_id!==X.id)throw Error("Connection not found");let Y=await Z.storage.connections.testConnection($.id);return{id:$.id,...Y}}})});var oa1=D(()=>{or1();ga1();ha1();pa1();na1();ta1()});import{sql as _4}from"kysely";import{z as NW}from"zod";function ra1($){if($===null||$===void 0)return"NULL";if(typeof $==="number")return String($);if(typeof $==="boolean")return $?"TRUE":"FALSE";if(typeof $==="string")return`'${$.replace(/'/g,"''")}'`;if($ instanceof Date)return`'${$.toISOString()}'`;return`'${JSON.stringify($).replace(/'/g,"''")}'`}function Is8($,Z){let X=$;for(let Y=Z.length;Y>=1;Y--){let G=`$${Y}`;if(X.includes(G))X=X.replaceAll(G,ra1(Z[Y-1]))}let Q=[];for(let Y=0;Y<X.length;Y++)if(X[Y]==="?")Q.push(Y);for(let Y=Math.min(Q.length,Z.length)-1;Y>=0;Y--){let G=Q[Y],J=ra1(Z[Y]);X=X.slice(0,G)+J+X.slice(G+1)}return X}function aa1($){return $.replace(/-/g,"_")}function Ms8($){return`app_${aa1($)}`}function ks8($){return`app_role_${aa1($)}`}function Vs8($){if($ instanceof Error){let Z=$.message.toLowerCase(),X=$.code;return X==="3F000"||X==="42704"||X==="22023"||Z.includes("schema")&&Z.includes("does not exist")||Z.includes("role")&&Z.includes("does not exist")}return!1}async function Ss8($,Z,X){if(await _4`CREATE SCHEMA IF NOT EXISTS ${_4.id(Z)}`.execute($),!(await _4`
890
890
  SELECT EXISTS (SELECT 1 FROM pg_roles WHERE rolname = ${X}) as exists
891
- `.execute($)).rows[0]?.exists)await _4`CREATE ROLE ${_4.id(X)} NOLOGIN`.execute($);await _4`GRANT ${_4.id(X)} TO CURRENT_USER`.execute($),await _4`GRANT USAGE, CREATE ON SCHEMA ${_4.id(Z)} TO ${_4.id(X)}`.execute($),await _4`GRANT ALL ON ALL TABLES IN SCHEMA ${_4.id(Z)} TO ${_4.id(X)}`.execute($),await _4`GRANT ALL ON ALL SEQUENCES IN SCHEMA ${_4.id(Z)} TO ${_4.id(X)}`.execute($),await _4`ALTER DEFAULT PRIVILEGES IN SCHEMA ${_4.id(Z)} GRANT ALL ON TABLES TO ${_4.id(X)}`.execute($),await _4`ALTER DEFAULT PRIVILEGES IN SCHEMA ${_4.id(Z)} GRANT ALL ON SEQUENCES TO ${_4.id(X)}`.execute($),await _4`REVOKE ALL ON SCHEMA public FROM ${_4.id(X)}`.execute($)}async function Cs8($,Z,X,Q){try{return await $.transaction().execute(async(Y)=>{return await _4`SET LOCAL ROLE ${_4.id(X)}`.execute(Y),await _4`SET LOCAL search_path TO ${_4.id(Z)}`.execute(Y),await _4.raw(Q).execute(Y)})}catch(Y){if(Vs8(Y))return await Ss8($,Z,X),await $.transaction().execute(async(G)=>{return await _4`SET LOCAL ROLE ${_4.id(X)}`.execute(G),await _4`SET LOCAL search_path TO ${_4.id(Z)}`.execute(G),await _4.raw(Q).execute(G)});throw Y}}var Rs8,qs8,sa1;var ea1=D(()=>{M0();Rs8=NW.object({results:NW.array(NW.unknown()).optional(),success:NW.boolean().optional()});qs8=NW.object({sql:NW.string().describe("The SQL query to run"),params:NW.array(NW.any()).describe("The parameters to pass to the SQL query").optional()});sa1=u({name:"DATABASES_RUN_SQL",description:"Run a SQL query in a connection-scoped isolated schema. Supports SELECT, DDL, and DML.",annotations:{title:"Run SQL Query",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:qs8,outputSchema:NW.object({result:NW.array(Rs8)}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=Is8($.sql,$.params||[]);if(!Z.connectionId)throw Error("Connection context required for database access");console.warn("DATABASES_RUN_SQL invoked",{"tool.deprecation_probe":"DATABASES_RUN_SQL","connection.id":Z.connectionId,"organization.id":Z.organization?.id??null,"user.id":Z.auth.user?.id??null});let Q=Ms8(Z.connectionId),Y=ks8(Z.connectionId);return{result:[{results:(await Cs8(Z.db,Q,Y,X)).rows,success:!0}]}}})});function h90($){let Z=$.access.getRole();if(!p7(Z))throw new UH("Only organization owners and admins can change org-wide pin status")}var Ql0=D(()=>{VQ();_w()});async function u90($,Z,X){let Q=[...new Set(X)],Y=await Promise.all(Q.map((J)=>$.storage.connections.findById(J,Z))),G=Q.filter((J,K)=>!Y[K]);if(G.length>0)throw Error(`Connection not found: ${G.join(", ")}`)}function zH($){return $.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"")}function c90($){let Z=2166136261;for(let X=0;X<$.length;X++)Z=Math.imul(Z^$.charCodeAt(X),16777619);return`a${(Z>>>0).toString(36).padStart(6,"0").slice(-6)}`}function Gp($){if($&&typeof $==="object"&&"gatewayClientId"in $&&typeof $.gatewayClientId==="string")return $.gatewayClientId;return}function Jp($,Z){if(!Z)return $;let X=`${c90(Z)}_`;return $.startsWith(X)?$.slice(X.length):$}function vs8($){return $.split(/[-_]/).map((Z)=>Z?Z.charAt(0).toUpperCase()+Z.slice(1):Z).join(" ")}var cx;var $s1=D(()=>{mK();cx=class cx extends x9{static MAX_PAGES_PER_CLIENT=1000;clients;slugToKey=new Map;resolvedClients=new Map;toolsCache=null;resourcesCache=null;resourceTemplatesCache=null;promptsCache=null;resourceRouteMap=new Map;constructor($,Z){super(Z?.clientInfo??{name:"gateway-client",version:"1.0.0"},{capabilities:Z?.capabilities});this.clients=$;for(let X of Object.keys($)){let Q=c90(X);if(this.slugToKey.has(Q))throw Error(`GatewayClient: duplicate namespace code "${Q}" from keys "${this.slugToKey.get(Q)}" and "${X}"`);this.slugToKey.set(Q,X)}}namespace($,Z){return`${c90($)}_${Z}`}async resolveToolTarget($){let Z=$.indexOf("_");if(Z!==-1){let Q=$.slice(0,Z),Y=this.slugToKey.get(Q);if(Y)return[Y,$.slice(Z+1)]}let{tools:X}=await this.listTools();for(let Q of X){let Y=Gp(Q._meta);if(!Y)continue;if(Jp(Q.name,Y)===$)return[Y,$]}if(Z===-1)throw Error(`GatewayClient: could not resolve tool "${$}" \u2014 no namespace prefix and not found in any client`);throw Error(`GatewayClient: unknown namespace "${$.slice(0,Z)}" in "${$}" and not found by original name in any client`)}async resolvePromptTarget($){let Z=$.indexOf("_");if(Z!==-1){let Q=$.slice(0,Z),Y=this.slugToKey.get(Q);if(Y)return[Y,$.slice(Z+1)]}let{prompts:X}=await this.listPrompts();for(let Q of X){let Y=Gp(Q._meta);if(!Y)continue;if(Jp(Q.name,Y)===$)return[Y,$]}if(Z===-1)throw Error(`GatewayClient: could not resolve prompt "${$}" \u2014 no namespace prefix and not found in any client`);throw Error(`GatewayClient: unknown namespace "${$.slice(0,Z)}" in "${$}" and not found by original name in any client`)}resolveClient($){let Z=this.resolvedClients.get($);if(Z)return Z;let X=this.clients[$];if(!X)return Promise.reject(Error(`GatewayClient: unknown client key "${$}"`));let Q=X.client,Y;try{Y=typeof Q==="function"?Promise.resolve(Q()):Promise.resolve(Q)}catch(J){return Promise.reject(J)}let G=Y.catch((J)=>{throw this.resolvedClients.delete($),J});return this.resolvedClients.set($,G),G}getResolvedClient($){return this.resolveClient($)}async listFromClient($,Z,X){try{let Q=await this.resolveClient($);return await Z(Q)}catch(Q){return console.warn(`GatewayClient: skipping ${X} from client "${$}" \u2014 ${Q?.message??Q}`),[]}}async paginate($,Z,X){let Q=[],Y,G=0;do{let J=await X(Y);Q.push(...J.items),Y=J.nextCursor,G++}while(Y&&G<cx.MAX_PAGES_PER_CLIENT);if(Y)console.warn(`GatewayClient: client "${$}" exceeded ${cx.MAX_PAGES_PER_CLIENT} pages listing ${Z} \u2014 truncating`);return Q}fetchAllTools($,Z){return this.paginate(Z,"tools",async(X)=>{let Q=await $.listTools(X?{cursor:X}:void 0);return{items:Q.tools,nextCursor:Q.nextCursor}})}fetchAllResources($,Z){return this.paginate(Z,"resources",async(X)=>{let Q=await $.listResources(X?{cursor:X}:void 0);return{items:Q.resources,nextCursor:Q.nextCursor}})}fetchAllResourceTemplates($,Z){return this.paginate(Z,"resource templates",async(X)=>{let Q=await $.listResourceTemplates(X?{cursor:X}:void 0);return{items:Q.resourceTemplates,nextCursor:Q.nextCursor}})}fetchAllPrompts($,Z){return this.paginate(Z,"prompts",async(X)=>{let Q=await $.listPrompts(X?{cursor:X}:void 0);return{items:Q.prompts,nextCursor:Q.nextCursor}})}listTools($,Z){if(!this.toolsCache)this.toolsCache=this.aggregateTools();return this.toolsCache}async aggregateTools(){let $=[];for(let[Z,X]of Object.entries(this.clients)){let Q=await this.listFromClient(Z,(J)=>this.fetchAllTools(J,Z),"tools"),Y=X.tools,G=Y?new Set(Y):null;for(let J of Q){if(G&&!G.has(J.name))continue;$.push({...J,name:this.namespace(Z,J.name),_meta:{...J._meta??{},gatewayClientId:Z}})}}return{tools:$}}listResources($,Z){if(!this.resourcesCache)this.resourcesCache=this.aggregateResources();return this.resourcesCache}async aggregateResources(){let $=new Set,Z=[],X=new Map;for(let[Q,Y]of Object.entries(this.clients)){let G=await this.listFromClient(Q,(W)=>this.fetchAllResources(W,Q),"resources"),J=Y.resources,K=J?new Set(J):null;for(let W of G){if(K&&!K.has(W.uri)&&!(W.name&&K.has(W.name)))continue;if($.has(W.uri)){console.warn(`GatewayClient: duplicate resource "${W.uri}" from client "${Q}" \u2014 skipping`);continue}$.add(W.uri),X.set(W.uri,Q),Z.push({...W,_meta:{...W._meta??{},gatewayClientId:Q}})}}return this.resourceRouteMap=X,{resources:Z}}listResourceTemplates($,Z){if(!this.resourceTemplatesCache)this.resourceTemplatesCache=this.aggregateResourceTemplates();return this.resourceTemplatesCache}async aggregateResourceTemplates(){let $=new Set,Z=[];for(let[X,Q]of Object.entries(this.clients)){let Y=await this.listFromClient(X,(G)=>this.fetchAllResourceTemplates(G,X),"resource templates");for(let G of Y){if($.has(G.uriTemplate)){console.warn(`GatewayClient: duplicate resource template "${G.uriTemplate}" from client "${X}" \u2014 skipping`);continue}$.add(G.uriTemplate),Z.push({...G,_meta:{...G._meta??{},gatewayClientId:X}})}}return{resourceTemplates:Z}}listPrompts($,Z){if(!this.promptsCache)this.promptsCache=this.aggregatePrompts();return this.promptsCache}async aggregatePrompts(){let $=[];for(let[Z,X]of Object.entries(this.clients)){let Q=await this.listFromClient(Z,(J)=>this.fetchAllPrompts(J,Z),"prompts"),Y=X.prompts,G=Y?new Set(Y):null;for(let J of Q){if(G&&!G.has(J.name))continue;$.push({...J,name:this.namespace(Z,J.name),title:J.title??vs8(J.name),_meta:{...J._meta??{},gatewayClientId:Z}})}}return{prompts:$}}async callTool($,Z,X){let[Q,Y]=await this.resolveToolTarget($.name);return(await this.resolveClient(Q)).callTool({...$,name:Y},Z,X)}async readResource($,Z){let X=await this.resolveResourceRoute($.uri);return(await this.resolveClient(X)).readResource($)}async getPrompt($,Z){let[X,Q]=await this.resolvePromptTarget($.name);return(await this.resolveClient(X)).getPrompt({...$,name:Q})}async resolveResourceRoute($){let Z=this.resourceRouteMap.get($);if(Z)return Z;if(this.resourcesCache=null,await this.listResources(),Z=this.resourceRouteMap.get($),Z)return Z;throw Error(`GatewayClient: resource "${$}" not found in any upstream client`)}getServerCapabilities(){return{tools:{},resources:{},prompts:{}}}getInstructions(){return}refresh(){this.toolsCache=null,this.resourcesCache=null,this.resourceTemplatesCache=null,this.promptsCache=null}async close(){let $=[...this.resolvedClients.values()].map((Z)=>Z.then((X)=>X.close()).catch(()=>{}));await Promise.allSettled($),await super.close()}}});var l90=D(()=>{$s1()});function Gl0($){return zH($)}function bs8($,Z){let X=zH(Z)||"prompt";return`${String($).padStart(fs8,"0")}-${X}`}async function Jl0($,Z,X){try{await $.delete(d90,Gl0(Z),{actor:X})}catch(Q){console.error("[agent-prompts] failed to delete prompts",{agentId:Z,err:Q})}}async function m90($,Z,X,Q){let Y=Gl0(Z);await Jl0($,Z,X),await Promise.all(Q.slice(0,Yl0).map(async(G,J)=>{let K=bs8(J,G.title),W={name:K,title:G.title,description:G.description,text:G.text};try{await $.write(d90,`${Y}/${K}.json`,JSON.stringify(W),{actor:X,contentType:"application/json"})}catch(F){console.error("[agent-prompts] failed to seed prompt",{agentId:Z,name:K,err:F})}}))}async function Zs1($,Z){let X=Gl0(Z),Q;try{Q=await $.listDir(d90,X)}catch{return[]}let Y=Q.filter((J)=>J.kind==="file"&&J.path.endsWith(".json")).slice(0,Yl0),G=[];for(let J of Y)try{let K=await $.read(d90,J.path),W=JSON.parse(new TextDecoder().decode(K));if(W&&typeof W.name==="string"&&typeof W.title==="string"&&typeof W.text==="string")G.push(W)}catch{}return G}var d90="agent-prompts",Yl0=20,fs8;var Kp=D(()=>{l90();fs8=String(Yl0-1).length});function lx($){if(!$)return $;let Z={...$};return delete Z.sandboxMap,Z}import{z as Ys1}from"zod";function xs8(){let $=Xs1[Math.floor(Math.random()*Xs1.length)];return`icon://${Qs1[Math.floor(Math.random()*Qs1.length)]}?color=${$}`}var Xs1,Qs1,ys8,gs8,Kl0;var Gs1=D(()=>{M0();vO();Ql0();Kp();Xs1=["red","orange","amber","yellow","lime","green","emerald","cyan","sky","blue","indigo","violet","purple","fuchsia","pink","rose"],Qs1=["Star01","Zap","Heart","Globe01","Compass03","Lightbulb02","Rocket01","Flag01","BookOpen01","Shield01","Key01","Diamond01","Cube01","Target04","Award01","Briefcase01","Coffee","Feather","Hexagon01","Layers3_01","Map01","Palette","Package","Terminal"];ys8=Ys1.object({data:K80.describe("Data for the new virtual MCP")}),gs8=Ys1.object({item:u7.describe("The created virtual MCP entity")}),Kl0=u({name:"COLLECTION_VIRTUAL_MCP_CREATE",description:"Create a Virtual MCP (agent) that aggregates tools from multiple connections into one endpoint. Pass `prompts` to seed the agent with kickstart prompts (conversation starters shown as icebreakers). Author them from the agent's role/instructions and the descriptions of the tools it will have, so the starters are coherent and immediately useful.",annotations:{title:"Create Virtual MCP",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:ys8,outputSchema:gs8,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 virtual MCP");if($.data.pinned===!0)h90(Z);let{prompts:Y,metadata:G,...J}=$.data,K=lx(G);if(J.connections.length>0)await u90(Z,X.id,J.connections.map((H)=>H.connection_id));let W={...J,metadata:K,icon:J.icon??xs8()},F=await Z.storage.virtualMcps.create(X.id,Q,W);if(Y?.length&&Z.orgFs&&F.id)await m90(Z.orgFs,F.id,Q,Y);return{item:F}}})});function hs8($){let Z=[],X=0;while(X<$.length){let Q=$[X];if(Q==="%")Z.push(".*");else if(Q==="_")Z.push(".");else if(/[.*+?^${}()|[\]\\]/.test(Q))Z.push("\\"+Q);else Z.push(Q);X++}return Z.join("")}function cO($){return typeof $==="string"||typeof $==="number"}function Wl0($,Z){let X=Z.split("."),Q=$;for(let Y of X){if(Q==null||typeof Q!=="object")return;Q=Q[Y]}return Q}function us8($,Z){return $.connections.some((X)=>X.connection_id===Z)}function i90($,Z){if("conditions"in Z){let{operator:K,conditions:W}=Z;switch(K){case"and":return W.every((F)=>i90($,F));case"or":return W.some((F)=>i90($,F));case"not":return!W.every((F)=>i90($,F));default:return!0}}let{field:X,operator:Q,value:Y}=Z,G=X.join(".");if(G==="connection_id"){if(Q!=="eq"||typeof Y!=="string")return!1;return us8($,Y)}let J=Wl0($,G);switch(Q){case"eq":return J===Y;case"gt":return cO(J)&&cO(Y)&&J>Y;case"gte":return cO(J)&&cO(Y)&&J>=Y;case"lt":return cO(J)&&cO(Y)&&J<Y;case"lte":return cO(J)&&cO(Y)&&J<=Y;case"in":return Array.isArray(Y)&&Y.includes(J);case"like":if(typeof J!=="string"||typeof Y!=="string")return!1;if(Y.length>100)return!1;let K=hs8(Y);return new RegExp(`^${K}$`,"i").test(J);case"contains":if(typeof J!=="string"||typeof Y!=="string")return!1;return J.toLowerCase().includes(Y.toLowerCase());default:return!0}}function cs8($,Z){return[...$].sort((X,Q)=>{for(let Y of Z){let G=Y.field.join("."),J=Wl0(X,G),K=Wl0(Q,G),W=0;if(J==null&&K==null)continue;if(J==null)W=Y.nulls==="first"?-1:1;else if(K==null)W=Y.nulls==="first"?1:-1;else if(typeof J==="string"&&typeof K==="string")W=J.localeCompare(K);else if(typeof J==="number"&&typeof K==="number")W=J-K;else W=String(J).localeCompare(String(K));if(W!==0)return Y.direction==="desc"?-W:W}return 0})}var ls8,ds8,Fl0;var Js1=D(()=>{lG();M0();vO();ls8=A3,ds8=EH(u7),Fl0=u({name:"COLLECTION_VIRTUAL_MCP_LIST",description:"List all MCP virtual MCPs in the organization",annotations:{title:"List Virtual MCPs",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:ls8,outputSchema:ds8,handler:async($,Z)=>{await Z.access.check();let X=t(Z),Q=$.where&&!("conditions"in $.where)&&$.where.field.join(".")==="connection_id"&&$.where.operator==="eq"&&typeof $.where.value==="string"?$.where.value:void 0,Y=$.where&&!("conditions"in $.where)&&$.where.field.join(".")==="pinned"&&$.where.operator==="eq"&&typeof $.where.value==="boolean"?$.where.value:void 0,J=Q?await Z.storage.virtualMcps.listByConnectionId(X.id,Q):await Z.storage.virtualMcps.list(X.id,Y!==void 0?{pinnedOnly:Y}:void 0);if($.where)J=J.filter((U)=>i90(U,$.where));if($.orderBy&&$.orderBy.length>0)J=cs8(J,$.orderBy);let K=J.length,W=$.offset??0,F=$.limit??100,H=J.slice(W,W+F),N=W+F<K;return{items:H,totalCount:K,hasMore:N}}})});import{z as Hl0}from"zod";var ms8,is8,Nl0;var Ks1=D(()=>{M0();vO();ms8=Hl0.object({id:Hl0.string().describe("ID of the virtual MCP to retrieve")}),is8=Hl0.object({item:u7.nullable().describe("The retrieved virtual MCP, or null if not found")}),Nl0=u({name:"COLLECTION_VIRTUAL_MCP_GET",description:"Get a Virtual MCP's configuration, connections, and virtual tools by ID.",annotations:{title:"Get Virtual MCP",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:ms8,outputSchema:is8,handler:async($,Z)=>{r(Z);let X=t(Z);await Z.access.check();let Q=await Z.storage.virtualMcps.findById($.id);if(Q&&Q.organization_id!==X.id)return{item:null};if(!Q)return{item:null};return{item:Q}}})});function iG($){return Ul0.test($)}function Ws1($){let Z=(X)=>typeof X==="string"?X.trim().toLowerCase():"";return Z($?.metadata?.siteSlug)||Z($?.title)||null}var Ul0;var lO=D(()=>{Ul0=/^[a-z0-9][a-z0-9-]{0,59}$/});function Fs1($){let{nextTitle:Z,currentTitle:X,currentSiteSlug:Q}=$;if(Q?.trim())return null;if(Z===void 0||Z===X)return null;let Y=X?.trim().toLowerCase()??"";return iG(Y)?Y:null}var Hs1=D(()=>{lO()});import{z as Ol0}from"zod";var ps8,ns8,Bl0;var Ns1=D(()=>{M0();Kp();vO();Ql0();Hs1();ps8=Ol0.object({id:Ol0.string().describe("ID of the virtual MCP to update"),data:W80.describe("Partial virtual MCP data to update")}),ns8=Ol0.object({item:u7.describe("The updated virtual MCP entity")}),Bl0=u({name:"COLLECTION_VIRTUAL_MCP_UPDATE",description:"Update a Virtual MCP's name, slug, connection list, or kickstart prompts. Pass `prompts` to replace the agent's conversation starters (full set; empty array clears them).",annotations:{title:"Update Virtual MCP",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:ps8,outputSchema:ns8,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 virtual MCP");let Y=await Z.storage.virtualMcps.findById($.id);if(!Y)throw Error(`Virtual MCP not found: ${$.id}`);if(Y.organization_id!==X.id)throw Error(`Virtual MCP not found: ${$.id}`);let{prompts:G,metadata:J,...K}=$.data,W=lx(J);if(W&&Y.metadata)W={...Y.metadata,...W};else if(W===null&&Y.metadata?.sandboxMap)W={sandboxMap:Y.metadata.sandboxMap};let F={...K,...J!==void 0?{metadata:W}:{}},H=Fs1({nextTitle:F.title,currentTitle:Y.title,currentSiteSlug:Y.metadata?.siteSlug});if(H)F.metadata={...Y.metadata,...F.metadata,siteSlug:H};if(F.pinned!==void 0&&F.pinned!==Y.pinned)h90(Z);if(F.connections?.length)await u90(Z,X.id,F.connections.map((U)=>U.connection_id));let N=await Z.storage.virtualMcps.update($.id,Q,F);if(G!==void 0&&Z.orgFs)await m90(Z.orgFs,$.id,Q,G);return{item:N}}})});function ts8($){if(!$)return!1;let Z=Ll0.join("|");return new RegExp(`permission\\s+"?(?:${Z})"?\\s+is not allowed`,"i").test($)||/permissions exceed what the github app/i.test($)}function Os1($){let Z={...$};for(let X of Ll0)Z[X]="read";return Z}async function Bs1($,Z){let X={...Z};for(;;){let Q=await $(X);if(!Q.isError)return{result:Q,grantedPermissions:X};let Y=Q.content?.find((W)=>W.type==="text")?.text,G=Ll0.find((W)=>(W in X));if(!G||!ts8(Y))return{result:Q,grantedPermissions:X};let{[G]:J,...K}=X;X=K}}function os8($){if(!$||typeof $!=="object"||Array.isArray($))return Us1;let Z=$;if(Object.values(Z).some((X)=>typeof X!=="string"))return Us1;return Z}function rs8($){if(typeof $!=="number"||!Number.isFinite($)||!Number.isInteger($)||$<=0)return;return $}function I5($){let Z=$.metadata?.repoScope;if(!Z||typeof Z.installationId!=="number"||!Number.isFinite(Z.installationId)||!Number.isInteger(Z.installationId)||Z.installationId<=0||typeof Z.owner!=="string"||typeof Z.repo!=="string"||Z.owner.length===0||Z.repo.length===0)return null;let X=rs8(Z.repositoryId);return{sourceConnectionId:typeof Z.sourceConnectionId==="string"?Z.sourceConnectionId:void 0,installationId:Z.installationId,repositoryId:X,owner:Z.owner,repo:Z.repo,permissions:os8(Z.permissions),grantProvider:Z.grantProvider==="github-mcp"?"github-mcp":void 0}}function ZE($){return $.metadata?.orgShared===!0}function Ds1($){let Z=new Set,X=[];for(let Q of $??[]){if(Q.status!=="active")continue;let Y=I5(Q);if(Y===null)continue;let G=Dl0(Y.owner,Y.repo);if(Z.has(G))continue;Z.add(G),X.push(`${Y.owner}/${Y.repo}`)}return X}function p90($,Z,X){let Q=Dl0(Z,X),Y=($??[]).filter((G)=>{if(G.status&&G.status!=="active")return!1;let J=I5(G);return J!==null&&Dl0(J.owner,J.repo)===Q});return Y.find(ZE)??Y[0]??null}var Us1,Ll0,Dl0=($,Z)=>`${$}/${Z}`.toLowerCase();var CQ=D(()=>{Us1={contents:"write",metadata:"read",pull_requests:"write",issues:"write",checks:"read",deployments:"read"},Ll0=["deployments","checks"]});function Ls1($){return _G($)!==null||_40($)!==null}var ws1=D(()=>{C8()});import{z as wl0}from"zod";var as8,ss8,El0;var Es1=D(()=>{CQ();mG();M0();Kp();vO();ws1();as8=wl0.object({id:wl0.string().describe("ID of the virtual MCP to delete")}),ss8=wl0.object({item:u7.describe("The deleted virtual MCP entity")}),El0=u({name:"COLLECTION_VIRTUAL_MCP_DELETE",description:"Permanently delete a Virtual MCP and its virtual tools.",annotations:{title:"Delete Virtual MCP",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:as8,outputSchema:ss8,handler:async($,Z)=>{r(Z);let X=t(Z);if(await Z.access.check(),Ls1($.id))throw Error(`Virtual MCP not found: ${$.id}`);let Q=await Z.storage.virtualMcps.findById($.id);if(!Q)throw Error(`Virtual MCP not found: ${$.id}`);if(Q.organization_id!==X.id)throw Error(`Virtual MCP not found: ${$.id}`);await Z.storage.virtualMcps.delete($.id);try{if((await Z.storage.organizationSettings.get(X.id))?.main_agent_id===$.id)await Z.storage.organizationSettings.upsert(X.id,{main_agent_id:null})}catch(G){console.error("[VIRTUAL_MCP_DELETE] failed to clear main agent pointer",{id:$.id,error:G.message})}if(Z.orgFs)await Jl0(Z.orgFs,$.id,o0(Z)??"system");let Y=Q.metadata?.githubRepo?.connectionId;if(Y)try{let G=await Z.storage.connections.findById(Y,X.id),J=G&&(ZE(G)||(await Z.storage.virtualMcps.listByConnectionId(X.id,Y)).length>0||await Z.storage.connections.isReferencedByThread(Y));if(G&&I5(G)&&!J){let W=await new l6(Z.db,Z.vault).get(Y);if(W?.accessToken)try{await fetch("https://api.github.com/installation/token",{method:"DELETE",headers:{Authorization:`Bearer ${W.accessToken}`,Accept:"application/vnd.github+json","X-GitHub-Api-Version":"2022-11-28"},signal:AbortSignal.timeout(5000)})}catch{}await Z.storage.connections.delete(Y)}}catch(G){console.error("[VIRTUAL_MCP_DELETE] failed to tear down repo-scoped connection",{childConnectionId:Y,error:G.message})}return{item:Q}}})});import{z as _Q}from"zod";var es8,jl0;var js1=D(()=>{M0();es8=_Q.object({id:_Q.string(),virtualMcpId:_Q.string(),pluginId:_Q.string(),connectionId:_Q.string().nullable(),settings:_Q.record(_Q.string(),_Q.unknown()).nullable(),createdAt:_Q.string(),updatedAt:_Q.string()}),jl0=u({name:"VIRTUAL_MCP_PLUGIN_CONFIG_GET",description:"Get a plugin's current configuration for a specific virtual MCP.",annotations:{title:"Get Virtual MCP Plugin Config",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:_Q.object({virtualMcpId:_Q.string().describe("Virtual MCP ID"),pluginId:_Q.string().describe("Plugin ID")}),outputSchema:_Q.object({config:es8.nullable()}),handler:async($,Z)=>{r(Z);let X=t(Z);await Z.access.check();let{virtualMcpId:Q,pluginId:Y}=$,G=await Z.storage.connections.findById(Q);if(!G||G.organization_id!==X.id)return{config:null};if(G.connection_type!=="VIRTUAL")return{config:null};let J=await Z.storage.virtualMcpPluginConfigs.get(Q,Y);if(!J)return{config:null};return{config:{id:J.id,virtualMcpId:J.virtualMcpId,pluginId:J.pluginId,connectionId:J.connectionId,settings:J.settings,createdAt:J.createdAt instanceof Date?J.createdAt.toISOString():J.createdAt,updatedAt:J.updatedAt instanceof Date?J.updatedAt.toISOString():J.updatedAt}}}})});import{z as vZ}from"zod";var $e8,zl0;var zs1=D(()=>{M0();yx();s5();$e8=vZ.object({id:vZ.string(),virtualMcpId:vZ.string(),pluginId:vZ.string(),connectionId:vZ.string().nullable(),settings:vZ.record(vZ.string(),vZ.unknown()).nullable(),createdAt:vZ.string(),updatedAt:vZ.string()}),zl0=u({name:"VIRTUAL_MCP_PLUGIN_CONFIG_UPDATE",description:"Set or update a plugin's configuration for a specific virtual MCP.",annotations:{title:"Update Virtual MCP Plugin Config",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:vZ.object({virtualMcpId:vZ.string().describe("Virtual MCP ID"),pluginId:vZ.string().describe("Plugin ID"),connectionId:vZ.string().nullable().optional().describe("MCP connection to bind"),settings:vZ.record(vZ.string(),vZ.unknown()).nullable().optional().describe("Plugin-specific settings")}),outputSchema:vZ.object({config:$e8}),handler:async($,Z)=>{r(Z);let X=t(Z);await Z.access.check();let{virtualMcpId:Q,pluginId:Y,connectionId:G,settings:J}=$,K=o0(Z),W=await Z.storage.connections.findById(Q);if(!W)throw Error(`Connection not found: ${Q}`);if(W.organization_id!==X.id)throw Error(`Connection not found: ${Q}`);if(W.connection_type!=="VIRTUAL")throw Error(`Connection not found: ${Q}`);let F=G?await Z.storage.connections.findById(G):null;if(G&&F&&F.organization_id!==X.id)throw Error(`Connection not found: ${G}`);if(G&&W.organization_id&&!F&&dG()&&v90(G,W.organization_id)){if(!K)throw Error("User ID required to create dev-assets connection");let N=xx(W.organization_id,a5());await Z.storage.connections.create({...N,organization_id:W.organization_id,created_by:K})}else if(G&&!F)throw Error(`Connection not found: ${G}`);let H=await Z.storage.virtualMcpPluginConfigs.upsert(Q,Y,{connectionId:G,settings:J});return{config:{id:H.id,virtualMcpId:H.virtualMcpId,pluginId:H.pluginId,connectionId:H.connectionId,settings:H.settings,createdAt:H.createdAt instanceof Date?H.createdAt.toISOString():H.createdAt,updatedAt:H.updatedAt instanceof Date?H.updatedAt.toISOString():H.updatedAt}}}})});import{z as pX}from"zod";var Ze8,Pl0;var Ps1=D(()=>{M0();vO();Ze8=pX.object({connectionId:pX.string(),toolName:pX.string(),label:pX.string(),icon:pX.string().nullable().optional()}),Pl0=u({name:"VIRTUAL_MCP_PINNED_VIEWS_UPDATE",description:"Update the pinned sidebar views for a virtual MCP. Replaces all current pins.",annotations:{title:"Update Pinned Views",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:pX.object({virtualMcpId:pX.string().describe("Virtual MCP ID"),pinnedViews:pX.array(Ze8).describe("Pinned views to set for the virtual MCP sidebar"),layout:pX.object({defaultMainView:pX.object({type:pX.string(),id:pX.string().optional(),toolName:pX.string().optional()}).nullable().optional(),chatDefaultOpen:pX.boolean().nullable().optional()}).optional()}),outputSchema:pX.object({item:u7.nullable()}),handler:async($,Z)=>{r(Z);let X=t(Z);await Z.access.check();let{virtualMcpId:Q,pinnedViews:Y,layout:G}=$,J=o0(Z),K=await Z.storage.virtualMcps.findById(Q);if(!K)throw Error(`Virtual MCP not found: ${Q}`);if(K.organization_id!==X.id)throw Error(`Virtual MCP not found: ${Q}`);let W=K.metadata?.ui??{},F={...W,pinnedViews:Y.length>0?Y:null,layout:G??W.layout??null};return{item:await Z.storage.virtualMcps.update(Q,J??"system",{metadata:{...K.metadata,ui:F}})}}})});import{z as PH}from"zod";var Xe8,Qe8,Al0;var As1=D(()=>{M0();Xe8=PH.object({ids:PH.array(PH.string()).describe("Virtual MCP ids to look up")}),Qe8=PH.object({items:PH.array(PH.object({id:PH.string(),last_used_at:PH.string().optional(),last_used_by:PH.string().optional()}))}),Al0=u({name:"VIRTUAL_MCP_LAST_USED_LIST",description:"Get last-used info (timestamp + user) for one or more virtual MCPs, derived from the most recent thread per agent.",annotations:{title:"List Virtual MCP Last Used",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:Xe8,outputSchema:Qe8,handler:async($,Z)=>{r(Z),t(Z),await Z.access.check();let X=await Z.storage.threads.findLastUsedByVirtualMcpIds($.ids);return{items:$.ids.map((Q)=>({id:Q,last_used_at:X.get(Q)?.last_used_at,last_used_by:X.get(Q)?.last_used_by}))}}})});var Ts1=D(()=>{Gs1();Js1();Ks1();Ns1();Es1();js1();zs1();Ps1();As1()});import{z as r7}from"zod";var Tl0;var Rs1=D(()=>{I6();M0();Tl0=u({name:"MONITORING_HEATMAP",description:"Get tool-call volume broken down by agent and tool name, for spotting heavily-used tools per agent.",annotations:{title:"Get Tool-Call Heatmap",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:r7.object({startDate:r7.string().datetime().optional().describe("Filter by start date (ISO 8601 datetime string)"),endDate:r7.string().datetime().optional().describe("Filter by end date (ISO 8601 datetime string)"),virtualMcpIds:r7.array(r7.string()).max(100).optional().describe("Filter by specific agent (Virtual MCP) IDs"),excludeConnectionIds:r7.array(r7.string()).max(100).optional().describe("Exclude tool calls from these connection IDs"),limit:r7.number().int().min(1).max(1000).optional().describe("Max number of (agent, tool) cells to return")}),outputSchema:r7.object({cells:r7.array(r7.object({virtualMcpId:r7.string().nullable(),toolName:r7.string(),calls:r7.number(),errors:r7.number(),outputSize:r7.number().describe("Sum of tool-output character length \u2014 a proxy for context weight, not LLM token count")}))}),handler:async($,Z)=>{let X=t(Z);return await Z.access.check(),await FQ(),Z.storage.monitoring.queryToolCallHeatmap({organizationId:X.id,startDate:$.startDate?new Date($.startDate):void 0,endDate:$.endDate?new Date($.endDate):void 0,filters:{virtualMcpIds:$.virtualMcpIds,excludeConnectionIds:$.excludeConnectionIds},limit:$.limit})}})});import{z as N5}from"zod";var Rl0;var Is1=D(()=>{I6();M0();Rl0=u({name:"MONITORING_LOG_GET",description:"Get a single monitoring log by ID with full input and output data.",annotations:{title:"Get Monitoring Log",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:N5.object({id:N5.string().describe("Log ID to fetch")}),outputSchema:N5.object({log:N5.object({id:N5.string().optional(),organizationId:N5.string(),connectionId:N5.string(),toolName:N5.string(),input:N5.record(N5.string(),N5.unknown()),output:N5.record(N5.string(),N5.unknown()),isError:N5.boolean(),errorMessage:N5.string().nullish(),durationMs:N5.number(),timestamp:N5.string(),userId:N5.string().nullish(),requestId:N5.string(),userAgent:N5.string().nullish(),virtualMcpId:N5.string().nullish(),properties:N5.record(N5.string(),N5.string()).nullish()}).nullable().describe("The monitoring log, or null if not found")}),handler:async($,Z)=>{await Z.access.check(),await FQ();let X=t(Z),Q=await Z.storage.monitoring.getById(X.id,$.id);if(!Q)return{log:null};return{log:{...Q,timestamp:Q.timestamp instanceof Date?Q.timestamp.toISOString():Q.timestamp}}}})});import{z as N8}from"zod";var Ge8,Il0;var qs1=D(()=>{I6();M0();Ge8=N8.object({id:N8.string().optional().describe("Unique log identifier"),organizationId:N8.string().describe("Organization ID"),connectionId:N8.string().describe("Connection ID"),toolName:N8.string().describe("Name of the tool that was called"),isError:N8.boolean().describe("Whether the call resulted in an error"),errorMessage:N8.string().nullish().describe("Error message if applicable"),durationMs:N8.number().describe("Call duration in milliseconds"),timestamp:N8.string().describe("ISO 8601 timestamp of the call"),userId:N8.string().nullish().describe("User who triggered the call"),requestId:N8.string().describe("Unique request identifier"),userAgent:N8.string().nullish().describe("Client identifier (x-studio-client header)"),virtualMcpId:N8.string().nullish().describe("Virtual MCP (Agent) ID if routed through an agent"),properties:N8.record(N8.string(),N8.string()).nullish().describe("Custom key-value metadata attached to the log")}),Il0=u({name:"MONITORING_LOGS_LIST",description:"List monitoring logs for tool calls with filtering and pagination.",annotations:{title:"List Monitoring Logs",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:N8.object({connectionId:N8.string().optional().describe("Filter by connection ID"),excludeConnectionIds:N8.array(N8.string()).optional().describe("Exclude logs from these connection IDs (e.g. system connections)"),virtualMcpId:N8.string().optional().describe("Filter by Virtual MCP (Agent) ID"),toolName:N8.string().optional().describe("Filter by tool name"),isError:N8.boolean().optional().describe("Filter by error status"),startDate:N8.string().datetime().optional().describe("Filter by start date (ISO 8601 datetime string)"),endDate:N8.string().datetime().optional().describe("Filter by end date (ISO 8601 datetime string)"),limit:N8.number().default(20).describe("Maximum number of results"),offset:N8.number().default(0).describe("Offset for pagination"),properties:N8.record(N8.string(),N8.string()).optional().describe("Filter by exact property key=value matches"),propertyKeys:N8.array(N8.string()).optional().describe("Filter by logs that have these property keys"),propertyPatterns:N8.record(N8.string(),N8.string()).optional().describe("Filter by property value patterns (SQL LIKE, use % as wildcard)"),propertyInValues:N8.record(N8.string(),N8.string()).optional().describe("Filter by exact match within comma-separated values (e.g., user_tags in 'Engineering')")}),outputSchema:N8.object({logs:N8.array(Ge8).describe("Array of monitoring logs"),total:N8.number().describe("Total number of logs matching filters"),offset:N8.number().describe("Current offset for pagination"),limit:N8.number().describe("Current limit for pagination")}),handler:async($,Z)=>{await Z.access.check(),await FQ();let X=t(Z),Y=$.properties||$.propertyKeys||$.propertyPatterns||$.propertyInValues?{properties:$.properties,propertyKeys:$.propertyKeys,propertyPatterns:$.propertyPatterns,propertyInValues:$.propertyInValues}:void 0,G={organizationId:X.id,connectionId:$.connectionId,excludeConnectionIds:$.excludeConnectionIds,virtualMcpId:$.virtualMcpId,toolName:$.toolName,isError:$.isError,startDate:$.startDate?new Date($.startDate):void 0,endDate:$.endDate?new Date($.endDate):void 0,limit:$.limit,offset:$.offset,propertyFilters:Y},J=await Z.storage.monitoring.query(G);return{logs:J.logs.map(({input:K,output:W,...F})=>({...F,timestamp:F.timestamp instanceof Date?F.timestamp.toISOString():F.timestamp})),total:J.total,offset:$.offset,limit:$.limit}}})});import{z as J$}from"zod";var ql0;var Ms1=D(()=>{I6();M0();ql0=u({name:"MONITORING_STATS",description:"Get aggregated statistics (counts, latency, error rates) for tool call monitoring.",annotations:{title:"Get Monitoring Stats",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:J$.object({startDate:J$.string().datetime().optional().describe("Filter by start date (ISO 8601 datetime string)"),endDate:J$.string().datetime().optional().describe("Filter by end date (ISO 8601 datetime string)"),interval:J$.string().regex(/^\d+[mhd]$/).optional().describe("Bucket interval for timeseries data (e.g. 1m, 5m, 2h, 1d). When provided, returns timeseries array."),connectionIds:J$.array(J$.string()).max(100).optional().describe("Filter by specific connection IDs (max 100)"),excludeConnectionIds:J$.array(J$.string()).max(100).optional().describe("Exclude specific connection IDs (max 100)"),toolNames:J$.array(J$.string()).max(100).optional().describe("Filter by specific tool names (max 100)"),status:J$.enum(["success","error"]).optional().describe("Filter metrics by execution status"),topN:J$.number().int().min(1).max(20).optional().describe("When provided with interval, also return top tools and their timeseries"),userIds:J$.array(J$.string()).max(100).optional().describe("Filter LLM usage by user IDs (only applied when llmUsage is true)"),llmUsage:J$.boolean().optional().describe("Aggregate LLM-call usage (tokens + USD cost) from raw log rows for the given connection. Returns token/cost totals and timeseries. Requires interval.")}),outputSchema:J$.object({totalCalls:J$.number().describe("Total number of tool calls"),errorRate:J$.number().optional().describe("Error rate as a decimal (0 to 1)"),avgDurationMs:J$.number().describe("Average call duration in milliseconds"),errorRatePercent:J$.string().optional().describe("Error rate as a percentage string"),totalErrors:J$.number().optional().describe("Total number of errors"),p50DurationMs:J$.number().optional().describe("50th percentile duration in milliseconds"),p95DurationMs:J$.number().optional().describe("95th percentile duration in milliseconds"),connectionBreakdown:J$.array(J$.object({connectionId:J$.string(),calls:J$.number(),errors:J$.number(),errorRate:J$.number(),avgDurationMs:J$.number()})).optional().describe("Per-connection metric breakdown"),totalInputTokens:J$.number().optional().describe("Total input tokens (LLM usage mode)"),totalOutputTokens:J$.number().optional().describe("Total output tokens (LLM usage mode)"),totalTokens:J$.number().optional().describe("Total tokens (LLM usage mode)"),totalCostUsd:J$.number().optional().describe("Total USD cost (LLM usage mode; only non-zero for providers that report cost)"),topTools:J$.array(J$.object({toolName:J$.string(),connectionId:J$.string().nullable(),calls:J$.number(),inputTokens:J$.number().optional(),outputTokens:J$.number().optional(),costUsd:J$.number().optional()})).optional().describe("Top tools ranked by calls"),topToolsTimeseries:J$.array(J$.object({timestamp:J$.string(),toolName:J$.string(),calls:J$.number(),errors:J$.number(),avg:J$.number(),p95:J$.number()})).optional().describe("Per-tool metric timeseries for the top tools"),timeseries:J$.array(J$.object({timestamp:J$.string(),calls:J$.number(),errors:J$.number(),errorRate:J$.number(),avg:J$.number(),p50:J$.number(),p95:J$.number(),inputTokens:J$.number().optional(),outputTokens:J$.number().optional(),totalTokens:J$.number().optional(),costUsd:J$.number().optional()})).optional().describe("Timeseries data points bucketed by interval")}),handler:async($,Z)=>{let X=t(Z);if(await Z.access.check(),await FQ(),$.interval&&$.llmUsage)return Z.storage.monitoring.queryLlmUsageStats({organizationId:X.id,interval:$.interval,connectionId:$.connectionIds?.[0]??"decopilot",startDate:$.startDate?new Date($.startDate):void 0,endDate:$.endDate?new Date($.endDate):void 0,userIds:$.userIds,topN:$.topN});if($.interval){let Y=await Z.storage.monitoring.queryMetricTimeseries({organizationId:X.id,interval:$.interval,startDate:$.startDate?new Date($.startDate):void 0,endDate:$.endDate?new Date($.endDate):void 0,filters:{connectionIds:$.connectionIds,excludeConnectionIds:$.excludeConnectionIds,toolNames:$.toolNames,status:$.status}});if(!$.topN)return Y;let G=await Z.storage.monitoring.queryMetricTopToolsTimeseries({organizationId:X.id,interval:$.interval,startDate:$.startDate?new Date($.startDate):void 0,endDate:$.endDate?new Date($.endDate):void 0,topN:$.topN,filters:{connectionIds:$.connectionIds,excludeConnectionIds:$.excludeConnectionIds,toolNames:$.toolNames,status:$.status}});return{...Y,topTools:G.topTools,topToolsTimeseries:G.timeseries}}let Q=await Z.storage.monitoring.getStats({organizationId:X.id,startDate:$.startDate?new Date($.startDate):void 0,endDate:$.endDate?new Date($.endDate):void 0});return{...Q,errorRatePercent:(Q.errorRate*100).toFixed(2)}}})});import{z as nX}from"zod";var Ml0;var ks1=D(()=>{I6();M0();Ml0=u({name:"MONITORING_THREAD_USAGE",description:"Aggregate LLM token usage and USD cost per thread for the given thread IDs.",annotations:{title:"Get Thread Usage",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:nX.object({threadIds:nX.array(nX.string()).min(1).max(500).describe("Thread IDs to aggregate usage for (max 500)"),connectionId:nX.string().optional().describe("LLM connection ID (defaults to 'decopilot')"),startDate:nX.string().datetime().optional().describe("Filter by start date (ISO 8601 datetime string)"),endDate:nX.string().datetime().optional().describe("Filter by end date (ISO 8601 datetime string)")}),outputSchema:nX.object({items:nX.array(nX.object({threadId:nX.string(),calls:nX.number(),inputTokens:nX.number(),outputTokens:nX.number(),totalTokens:nX.number(),costUsd:nX.number()}))}),handler:async($,Z)=>{let X=t(Z);return await Z.access.check(),await FQ(),{items:await Z.storage.monitoring.queryThreadUsage({organizationId:X.id,connectionId:$.connectionId??"decopilot",threadIds:$.threadIds,startDate:$.startDate?new Date($.startDate):void 0,endDate:$.endDate?new Date($.endDate):void 0})}}})});var Vs1=D(()=>{Rs1();Is1();qs1();Ms1();ks1()});function n90($){return typeof $==="string"&&Ke8.has($.trim().toLowerCase())}var Ke8;var kl0=D(()=>{Ke8=new Set([".well-known","_admin","api","auth","cli","commerce-onboarding","dbos-queue-depth","health","hosted-run-pending","login","mcp","metrics","oauth","oauth-proxy","onboarding","org","report","reset-password"])});import{z as gY}from"zod";var Vl0;var Ss1=D(()=>{M0();kl0();Vl0=u({name:"ORGANIZATION_CREATE",description:"Create a new organization. The caller becomes the owner automatically.",annotations:{title:"Create Organization",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:gY.object({slug:gY.string().min(1).max(50).regex(/^[a-z0-9-]+$/,"Slug must be lowercase alphanumeric with hyphens").refine(($)=>!n90($),"Slug is reserved by Studio"),name:gY.string().min(1).max(255),description:gY.string().optional()}),outputSchema:gY.object({id:gY.string(),name:gY.string(),slug:gY.string(),logo:gY.string().nullable().optional(),metadata:gY.any().optional(),createdAt:gY.string().datetime().describe("ISO 8601 timestamp"),members:gY.array(gY.any()).optional()}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=o0(Z);if(!X)throw Error("User ID required to create organization");let Q=await Z.boundAuth.organization.create({name:$.name,slug:$.slug,metadata:$.description?{description:$.description}:void 0,userId:X});if(!Q)throw Error("Failed to create organization");return{...Q,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt}}})});import{z as UW}from"zod";var Sl0;var Cs1=D(()=>{M0();Sl0=u({name:"ORGANIZATION_LIST",description:"List organizations the current user belongs to.",annotations:{title:"List Organizations",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},_meta:{ui:{visibility:"app"}},inputSchema:UW.object({}),outputSchema:UW.object({organizations:UW.array(UW.object({id:UW.string(),name:UW.string(),slug:UW.string(),logo:UW.string().nullable().optional(),metadata:UW.any().optional(),createdAt:UW.string().datetime().describe("ISO 8601 timestamp")}))}),handler:async($,Z)=>{if(r(Z),await Z.access.check(),!o0(Z))throw Error("User ID required to list organizations");return{organizations:(await Z.boundAuth.organization.list()).map((Q)=>({...Q,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt}))}}})});import{z as pG}from"zod";var Cl0;var _s1=D(()=>{M0();Cl0=u({name:"ORGANIZATION_GET",description:"Get an organization's details, members, and settings by slug or ID.",annotations:{title:"Get Organization",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:pG.object({}),outputSchema:pG.object({id:pG.string(),name:pG.string(),slug:pG.string(),logo:pG.string().nullable().optional(),metadata:pG.any().optional(),createdAt:pG.string().datetime().describe("ISO 8601 timestamp"),members:pG.array(pG.any()).optional(),invitations:pG.array(pG.any()).optional()}),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=await Z.boundAuth.organization.get(X);if(!Q)throw Error("No active organization found");let Y=new Date,G=Q.invitations?.filter((J)=>new Date(J.expiresAt)>Y);return{...Q,invitations:G,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt}}})});import{z as T3}from"zod";var _l0;var vs1=D(()=>{M0();_l0=u({name:"ORGANIZATION_UPDATE",description:"Update an organization's name or description.",annotations:{title:"Update Organization",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:T3.object({id:T3.string(),name:T3.string().min(1).max(255).optional(),description:T3.string().optional()}),outputSchema:T3.object({id:T3.string(),name:T3.string(),slug:T3.string(),logo:T3.string().nullable().optional(),metadata:T3.any().optional(),createdAt:T3.string().datetime().describe("ISO 8601 timestamp")}),handler:async($,Z)=>{if(r(Z),await Z.access.check(),$.id!==Z.organization?.id)throw Error("Organization ID does not match authenticated organization");let X={};if($.name)X.name=$.name;if($.description!==void 0)X.metadata={description:$.description};let Q=await Z.boundAuth.organization.update({organizationId:$.id,data:X});if(!Q)throw Error("Failed to update organization");return{...Q,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt}}})});import{z as Wp}from"zod";var vl0;var fs1=D(()=>{M0();vl0=u({name:"ORGANIZATION_DELETE",description:"Archive an organization (soft delete).",annotations:{title:"Delete Organization",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:Wp.object({id:Wp.string()}),outputSchema:Wp.object({success:Wp.boolean(),id:Wp.string()}),handler:async($,Z)=>{if(r(Z),await Z.access.check(),$.id!==Z.organization?.id)throw Error("Organization ID does not match authenticated organization");let X=await Z.boundAuth.organization.get($.id);return await Z.boundAuth.organization.update({organizationId:$.id,data:{metadata:{...X?.metadata,archived:!0,archivedAt:new Date().toISOString()}}}),{success:!0,id:$.id}}})});import{z as AH}from"zod";var fl0;var bs1=D(()=>{M0();t7();fl0=u({name:"ORGANIZATION_SETTINGS_GET",description:"Get organization-level settings including sidebar configuration, store registry settings, simple model mode, and default home agents.",annotations:{title:"Get Organization Settings",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:AH.object({}),outputSchema:AH.object({organizationId:AH.string(),sidebar_items:AH.array(ji).nullable().optional(),enabled_plugins:AH.array(AH.string()).nullable().optional(),registry_config:zi.nullable().optional(),simple_mode:Pi.nullable().optional(),default_home_agents:Ti.nullable().optional(),flags:Ii.nullable().optional(),main_agent_id:AH.string().nullable().optional(),sprint_config:Ri.nullable().optional(),createdAt:AH.string().datetime().optional().describe("ISO 8601 timestamp"),updatedAt:AH.string().datetime().optional().describe("ISO 8601 timestamp")}),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=await Z.storage.organizationSettings.get(X);if(!Q)return{organizationId:X};return{...Q,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt,updatedAt:Q.updatedAt instanceof Date?Q.updatedAt.toISOString():Q.updatedAt}}})});import{z as vQ}from"zod";var bl0;var xs1=D(()=>{M0();t7();bl0=u({name:"ORGANIZATION_SETTINGS_UPDATE",description:"Update organization-level settings such as sidebar configuration, store registry settings, simple model mode, and default home agents.",annotations:{title:"Update Organization Settings",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:vQ.object({organizationId:vQ.string(),sidebar_items:vQ.array(ji).optional(),enabled_plugins:vQ.array(vQ.string()).optional(),registry_config:zi.optional(),simple_mode:Pi.optional(),default_home_agents:Ti.optional(),flags:Ii.strict().optional().describe("Org boolean toggles. Shallow-merged into the stored flags: keys you pass win (explicit false persists), omitted keys keep their value."),main_agent_id:vQ.string().nullable().optional().describe("Virtual MCP id the org lands on instead of the Super Agent. Pass null to clear."),sprint_config:Ri.optional().describe("Task board sprint cadence. Replaced whole (not merged), so pass all three fields.")}),outputSchema:vQ.object({organizationId:vQ.string(),sidebar_items:vQ.array(ji).nullable().optional(),enabled_plugins:vQ.array(vQ.string()).nullable().optional(),registry_config:zi.nullable().optional(),simple_mode:Pi.nullable().optional(),default_home_agents:Ti.nullable().optional(),flags:Ii.nullable().optional(),main_agent_id:vQ.string().nullable().optional(),sprint_config:Ri.nullable().optional(),createdAt:vQ.string().datetime().describe("ISO 8601 timestamp"),updatedAt:vQ.string().datetime().describe("ISO 8601 timestamp")}),handler:async($,Z)=>{if(r(Z),await Z.access.check(),t(Z).id!==$.organizationId)throw Error("Cannot update settings for a different organization");let Q=await Z.storage.organizationSettings.upsert($.organizationId,{sidebar_items:$.sidebar_items,enabled_plugins:$.enabled_plugins,registry_config:$.registry_config,simple_mode:$.simple_mode,default_home_agents:$.default_home_agents,flags:$.flags,main_agent_id:$.main_agent_id,sprint_config:$.sprint_config});return{...Q,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt,updatedAt:Q.updatedAt instanceof Date?Q.updatedAt.toISOString():Q.updatedAt}}})});import{z as R3}from"zod";var ys1,xl0,yl0;var gs1=D(()=>{M0();t7();ys1=IO.extend({organizationId:R3.string(),archivedAt:R3.string().nullable().optional().describe("ISO 8601 timestamp"),createdAt:R3.string().describe("ISO 8601 timestamp"),updatedAt:R3.string().describe("ISO 8601 timestamp")}),xl0=u({name:"BRAND_CONTEXT_LIST",description:"List all brand contexts (company profiles) for the current organization.",annotations:{title:"List Brand Contexts",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:R3.object({includeArchived:R3.boolean().optional().describe("Include archived brands in the list")}),outputSchema:R3.object({items:R3.array(ys1)}),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)");return{items:(await Z.storage.brandContext.list(X,{includeArchived:$.includeArchived})).map((Y)=>({...Y,archivedAt:Y.archivedAt instanceof Date?Y.archivedAt.toISOString():Y.archivedAt,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():Y.createdAt,updatedAt:Y.updatedAt instanceof Date?Y.updatedAt.toISOString():Y.updatedAt}))}}}),yl0=u({name:"BRAND_CONTEXT_GET",description:"Get a specific brand context by ID.",annotations:{title:"Get Brand Context",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:R3.object({id:R3.string().describe("Brand context ID")}),outputSchema:ys1.extend({organizationId:R3.string()}),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=await Z.storage.brandContext.get($.id,X);if(!Q)throw Error("Brand context not found");return{...Q,archivedAt:Q.archivedAt instanceof Date?Q.archivedAt.toISOString():Q.archivedAt,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt,updatedAt:Q.updatedAt instanceof Date?Q.updatedAt.toISOString():Q.updatedAt}}})});import{z as XE}from"zod";var hs1,gl0,hl0,ul0;var us1=D(()=>{M0();t7();hs1=IO.extend({organizationId:XE.string(),createdAt:XE.string().describe("ISO 8601 timestamp"),updatedAt:XE.string().describe("ISO 8601 timestamp")}),gl0=u({name:"BRAND_CONTEXT_CREATE",description:"Create a new brand context (company profile) for the current organization.",annotations:{title:"Create Brand Context",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!1},inputSchema:IO.omit({id:!0}),outputSchema:hs1,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=await Z.storage.brandContext.create(X,{name:$.name,domain:$.domain,overview:$.overview,logo:$.logo??null,favicon:$.favicon??null,ogImage:$.ogImage??null,fonts:$.fonts??null,colors:$.colors??null,images:$.images??null,metadata:$.metadata??null});return{...Q,archivedAt:Q.archivedAt instanceof Date?Q.archivedAt.toISOString():Q.archivedAt,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt,updatedAt:Q.updatedAt instanceof Date?Q.updatedAt.toISOString():Q.updatedAt}}}),hl0=u({name:"BRAND_CONTEXT_UPDATE",description:"Update an existing brand context by ID.",annotations:{title:"Update Brand Context",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:IO.partial().required({id:!0}),outputSchema:hs1,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)");if(!await Z.storage.brandContext.get($.id,X))throw Error("Brand context not found");let{id:Y,...G}=$;if(G.isDefault===!0)await Z.storage.brandContext.setDefault(Y,X);let J=await Z.storage.brandContext.update(Y,X,{name:G.name,domain:G.domain,overview:G.overview,logo:G.logo!==void 0?G.logo??null:void 0,favicon:G.favicon!==void 0?G.favicon??null:void 0,ogImage:G.ogImage!==void 0?G.ogImage??null:void 0,fonts:G.fonts!==void 0?G.fonts??null:void 0,colors:G.colors!==void 0?G.colors??null:void 0,images:G.images!==void 0?G.images??null:void 0,metadata:G.metadata!==void 0?G.metadata??null:void 0,archivedAt:G.archivedAt!==void 0?G.archivedAt??null:void 0,isDefault:G.isDefault===!1?!1:void 0});return{...J,archivedAt:J.archivedAt instanceof Date?J.archivedAt.toISOString():J.archivedAt,createdAt:J.createdAt instanceof Date?J.createdAt.toISOString():J.createdAt,updatedAt:J.updatedAt instanceof Date?J.updatedAt.toISOString():J.updatedAt}}}),ul0=u({name:"BRAND_CONTEXT_DELETE",description:"Archive a brand context by ID (soft delete).",annotations:{title:"Archive Brand Context",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:XE.object({id:XE.string().describe("Brand context ID")}),outputSchema:XE.object({success:XE.boolean()}),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)");if(!await Z.storage.brandContext.get($.id,X))throw Error("Brand context not found");return await Z.storage.brandContext.update($.id,X,{archivedAt:new Date().toISOString(),isDefault:!1}),{success:!0}}})});async function t90($,Z,X){let Q=$.trim();if(!Q.startsWith("http"))Q=`https://${Q}`;let Y=await fetch("https://api.firecrawl.dev/v1/scrape",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${Z}`},body:JSON.stringify({url:Q,formats:["branding"]})});if(!Y.ok){let U=await Y.text().catch(()=>"");throw Error(`Firecrawl API error: ${Y.status} ${U.slice(0,200)}`)}let G=await Y.json();if(!G.success||!G.data?.branding)return null;let J=G.data.branding,K=G.data.metadata??{},W=He8(J,K);return{name:K.title?.split(/[|\u2013\u2014]|\s+-\s+/).map((U)=>U.trim()).filter(Boolean)?.slice().sort((U,O)=>U.length-O.length)[0]??K.ogSiteName??X??$,domain:$,overview:K.description??"",logo:W.logo,favicon:W.favicon,ogImage:W.ogImage,fonts:W.fonts,colors:W.colors,images:null,metadata:Object.keys(W.metadata).length>0?W.metadata:null}}function He8($,Z){let X=$.images??{},Q=$.colors??{},Y={};for(let[H,N]of Object.entries(Q))if(typeof N==="string"&&N&&We8.has(H))Y[H]=N;let G={},K=($.typography??{}).fontFamilies??{};for(let[H,N]of Object.entries(K))if(typeof N==="string"&&N){let U=Fe8[H.toLowerCase()];if(U&&!G[U])G[U]=N}let W=$.fonts;if(Array.isArray(W))for(let H of W){let N=H.family;if(typeof N==="string"&&N&&!G.body)G.body=N}let F={};for(let H of["typography","components","spacing","layout","animations","icons","tone","personality","colorScheme"])if($[H]!==void 0)F[H]=$[H];return{logo:X.logo??null,favicon:X.favicon??null,ogImage:X.ogImage??Z.ogImage??null,fonts:Object.keys(G).length>0?G:null,colors:Object.keys(Y).length>0?Y:null,metadata:F}}var We8,Fe8;var cl0=D(()=>{We8=new Set(["primary","secondary","accent","background","foreground"]),Fe8={heading:"heading",headings:"heading",head:"heading",title:"heading",body:"body",primary:"body",text:"body",code:"code",monospace:"code",mono:"code"}});import{z as o90}from"zod";var Ne8,ll0;var cs1=D(()=>{M0();cl0();t7();Ne8=IO.pick({id:!0,name:!0,domain:!0,overview:!0,logo:!0,favicon:!0,ogImage:!0,fonts:!0,colors:!0}).extend({success:o90.boolean()}),ll0=u({name:"BRAND_CONTEXT_EXTRACT",description:"Extract brand context (colors, fonts, logos) from a website URL using Firecrawl.",annotations:{title:"Extract Brand Context",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:o90.object({domain:o90.string().describe("Website domain to extract brand from"),brandId:o90.string().optional().describe("Existing brand context ID to update (creates new if omitted)")}),outputSchema:Ne8,modelSummary:($)=>$.success?`Brand saved (id=${$.id}, name=${$.name}, domain=${$.domain}). The UI rendered the logo, colors, fonts, and overview.`:"Brand extraction failed.",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=Z.firecrawlApiKey;if(!Q)throw Error("FIRECRAWL_API_KEY is not configured. Set the environment variable to enable brand extraction.");let Y=await t90($.domain,Q,$.domain);if(!Y)throw Error("Firecrawl did not return branding data for this URL");let G={name:Y.name,domain:Y.domain,overview:Y.overview,logo:Y.logo,favicon:Y.favicon,ogImage:Y.ogImage,fonts:Y.fonts,colors:Y.colors,images:Y.images,metadata:Y.metadata},J=$.brandId?await(async()=>{if(!await Z.storage.brandContext.get($.brandId,X))throw Error("Brand context not found");return Z.storage.brandContext.update($.brandId,X,G)})():await Z.storage.brandContext.create(X,G);return{id:J.id,name:J.name,domain:J.domain,overview:J.overview,logo:J.logo,favicon:J.favicon,ogImage:J.ogImage,fonts:J.fonts,colors:J.colors,success:!0}}})});function ls1($){let Z=$.metadata??{};return{id:$.id,name:$.name,domain:$.domain||void 0,colors:$.colors??void 0,fonts:$.fonts??void 0,assets:$.logo||$.favicon||$.ogImage?{logo:$.logo??void 0,favicon:$.favicon??void 0,ogImage:$.ogImage??void 0}:void 0,overview:$.overview||void 0,tagline:typeof Z.tagline==="string"?Z.tagline:void 0,tone:typeof Z.tone==="string"?Z.tone:void 0,metadata:(()=>{let X=Object.fromEntries(Object.entries(Z).filter(([Q])=>Q!=="tagline"&&Q!=="tone"));return Object.keys(X).length>0?X:void 0})()}}var dl0,ml0;var ds1=D(()=>{ic0();M0();dl0=u({name:"BRAND_GET",description:"Get a brand context by ID. Omit the ID to get the default brand for the organization.",annotations:{title:"Get Brand",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:q90,outputSchema:oi,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=$.id?await Z.storage.brandContext.get($.id,X):await Z.storage.brandContext.getDefault(X);if(!Q)throw Error($.id?"Brand not found":"No default brand configured");return ls1(Q)}}),ml0=u({name:"BRAND_LIST",description:"List all active brands for the current organization.",annotations:{title:"List Brands",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:M90,outputSchema:k90,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)");return{items:(await Z.storage.brandContext.list(X)).map(ls1)}}})});import{resolveTxt as Ue8}from"dns/promises";function il0($){return`${Oe8}.${$.toLowerCase()}`}function ms1(){return`deco-verify-${crypto.randomUUID().replace(/-/g,"")}`}async function is1($,Z,X=Ue8){if(!Z)return!1;try{return(await X(il0($))).some((Y)=>Y.join("").trim()===Z)}catch{return!1}}var Oe8="_deco-verify";var ps1=()=>{};import{z as q5}from"zod";function dO($){let Z=$.verificationStatus==="pending"&&Boolean($.verificationToken);return{id:$.id,domain:$.domain,joinMode:$.joinMode,verificationStatus:$.verificationStatus,verificationMethod:$.verificationMethod,verifiedAt:$.verifiedAt?new Date($.verifiedAt).toISOString():null,recordName:Z?il0($.domain):null,recordValue:Z?$.verificationToken:null}}function De8($){let Z=$.toLowerCase().trim();if(!Be8.test(Z))throw Error(`Invalid domain format: "${Z}". Must be a valid domain like "acme.com"`);if(I3.has(Z))throw Error(`Cannot claim generic email domain "${Z}". Only corporate domains are allowed.`);return Z}var Be8,pl0,r90,nl0,tl0,ol0,rl0,al0;var ns1=D(()=>{hY();ps1();M0();Be8=/^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)+$/,pl0=q5.enum(["off","auto","request"]),r90=q5.object({id:q5.string(),domain:q5.string(),joinMode:pl0,verificationStatus:q5.enum(["pending","verified"]),verificationMethod:q5.enum(["email","dns"]).nullable(),verifiedAt:q5.string().nullable(),recordName:q5.string().nullable(),recordValue:q5.string().nullable()});nl0=u({name:"ORGANIZATION_DOMAIN_LIST",description:"List the email domains claimed by an organization.",annotations:{title:"List Organization Domains",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:q5.object({}),outputSchema:q5.object({domains:q5.array(r90)}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=t(Z);return{domains:(await Z.storage.organizationDomains.listByOrganizationId(X.id)).map(dO)}}}),tl0=u({name:"ORGANIZATION_DOMAIN_ADD",description:"Claim an email domain for an organization. If the caller's verified email matches the domain it is trusted immediately; otherwise it requires DNS verification.",annotations:{title:"Add Organization Domain",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:q5.object({domain:q5.string().min(1).max(255).describe("Domain to claim, e.g. acme.com"),joinMode:pl0.optional().describe("Initial join mode (only applied when the domain is trusted immediately via email match).")}),outputSchema:r90,handler:async($,Z)=>{r(Z),await Z.access.check();let X=t(Z),Q=De8($.domain),G=Z.auth.user?.email?.split("@")[1]?.toLowerCase(),J=Boolean(Z.auth.user?.emailVerified)&&G===Q,K=await Z.storage.organizationDomains.getByOrgAndDomain(X.id,Q);if(K){if(K.verificationStatus!=="verified"&&J){let F=await Z.storage.organizationDomains.markVerified(K.id,"email");return dO(F)}return dO(K)}let W=J?await Z.storage.organizationDomains.add(X.id,Q,{joinMode:$.joinMode??"off",verificationStatus:"verified",verificationMethod:"email"}):await Z.storage.organizationDomains.add(X.id,Q,{joinMode:"off",verificationStatus:"pending",verificationToken:ms1()});return dO(W)}}),ol0=u({name:"ORGANIZATION_DOMAIN_UPDATE",description:"Set the join mode for a claimed domain. Discoverable modes (auto/request) require the domain to be verified.",annotations:{title:"Update Organization Domain",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:q5.object({id:q5.string(),joinMode:pl0}),outputSchema:r90,handler:async($,Z)=>{r(Z),await Z.access.check();let X=t(Z),Q=await Z.storage.organizationDomains.getById($.id);if(!Q||Q.organizationId!==X.id)throw Error("Domain not found");if($.joinMode!=="off"&&Q.verificationStatus!=="verified")throw Error("Verify the domain before enabling auto-join or requests.");let Y=await Z.storage.organizationDomains.updateJoinMode($.id,$.joinMode);return dO(Y)}}),rl0=u({name:"ORGANIZATION_DOMAIN_VERIFY",description:"Check the DNS TXT record for a pending domain and mark it verified if present.",annotations:{title:"Verify Organization Domain",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:q5.object({id:q5.string()}),outputSchema:q5.object({verified:q5.boolean(),domain:r90}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=t(Z),Q=await Z.storage.organizationDomains.getById($.id);if(!Q||Q.organizationId!==X.id)throw Error("Domain not found");if(Q.verificationStatus==="verified")return{verified:!0,domain:dO(Q)};if(!Q.verificationToken)throw Error("Domain has no pending DNS verification.");if(!await is1(Q.domain,Q.verificationToken))return{verified:!1,domain:dO(Q)};let G=await Z.storage.organizationDomains.markVerified($.id,"dns");return{verified:!0,domain:dO(G)}}}),al0=u({name:"ORGANIZATION_DOMAIN_REMOVE",description:"Remove a claimed domain from an organization.",annotations:{title:"Remove Organization Domain",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:q5.object({id:q5.string()}),outputSchema:q5.object({success:q5.boolean()}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=t(Z),Q=await Z.storage.organizationDomains.getById($.id);if(!Q||Q.organizationId!==X.id)throw Error("Domain not found");return await Z.storage.organizationDomains.removeById($.id),{success:!0}}})});function mO($){return($ instanceof Error?$.message.toLowerCase():"").includes("already a member")}import{z as j9}from"zod";var Le8,sl0,el0,$d0;var ts1=D(()=>{M0();C4();Le8=j9.object({id:j9.string(),userId:j9.string(),status:j9.enum(["pending","approved","denied"]),createdAt:j9.string(),user:j9.object({id:j9.string(),name:j9.string(),email:j9.string(),image:j9.string().nullable()}).nullable()}),sl0=u({name:"ORGANIZATION_JOIN_REQUEST_LIST",description:"List pending requests to join the organization.",annotations:{title:"List Join Requests",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:j9.object({}),outputSchema:j9.object({requests:j9.array(Le8)}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=t(Z);return{requests:(await Z.storage.organizationJoinRequests.listPendingWithUser(X.id)).map((Y)=>({id:Y.id,userId:Y.userId,status:Y.status,createdAt:new Date(Y.createdAt).toISOString(),user:Y.user}))}}}),el0=u({name:"ORGANIZATION_JOIN_REQUEST_APPROVE",description:"Approve a pending join request, adding the user as a member.",annotations:{title:"Approve Join Request",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:j9.object({requestId:j9.string()}),outputSchema:j9.object({success:j9.boolean()}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=t(Z),Q=await Z.storage.organizationJoinRequests.getById($.requestId);if(!Q||Q.organizationId!==X.id)throw Error("Join request not found");if(Q.status!=="pending")throw Error("Join request has already been decided");let Y=o0(Z);if(!await Z.storage.organizationJoinRequests.decide(Q.id,"approved",Y??Q.userId))return{success:!0};try{await Z.boundAuth.organization.addMember({organizationId:X.id,userId:Q.userId,role:["user"]})}catch(J){if(!mO(J))throw J}if(Y)x1.capture({distinctId:Y,event:"organization_join_request_approved",groups:{organization:X.id},properties:{organization_id:X.id,user_id:Q.userId}});return{success:!0}}}),$d0=u({name:"ORGANIZATION_JOIN_REQUEST_DENY",description:"Deny a pending join request.",annotations:{title:"Deny Join Request",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:j9.object({requestId:j9.string()}),outputSchema:j9.object({success:j9.boolean()}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=t(Z),Q=await Z.storage.organizationJoinRequests.getById($.requestId);if(!Q||Q.organizationId!==X.id)throw Error("Join request not found");if(Q.status!=="pending")throw Error("Join request has already been decided");let Y=o0(Z);if(await Z.storage.organizationJoinRequests.decide(Q.id,"denied",Y??Q.userId)&&Y)x1.capture({distinctId:Y,event:"organization_join_request_denied",groups:{organization:X.id},properties:{organization_id:X.id,user_id:Q.userId}});return{success:!0}}})});import{z as fQ}from"zod";var Zd0;var os1=D(()=>{C4();M0();VQ();Zd0=u({name:"ORGANIZATION_MEMBER_ADD",description:"Invite a member to the organization by email with an assigned role.",annotations:{title:"Add Organization Member",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:fQ.object({organizationId:fQ.string().optional(),userId:fQ.string(),role:fQ.array(fQ.string())}),outputSchema:fQ.object({id:fQ.string(),organizationId:fQ.string(),userId:fQ.string(),role:fQ.union([fQ.string(),fQ.array(fQ.string())]),createdAt:fQ.string().datetime().describe("ISO 8601 timestamp")}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=$.organizationId||Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");if(X!==Z.organization?.id)throw Error("Organization ID does not match authenticated organization");let Q=await Z.db.selectFrom("member").select(["role"]).where("userId","=",o0(Z)??"").where("organizationId","=",X).executeTakeFirst();if(!Z50(Q?.role,$.role))throw Error(`Insufficient privileges to assign role "${$.role.join(",")}"`);let Y=await Z.boundAuth.organization.addMember({organizationId:X,userId:$.userId,role:$.role});if(!Y)throw Error("Failed to add member");let G=o0(Z);if(G)x1.capture({distinctId:G,event:"organization_member_added",groups:{organization:X},properties:{organization_id:X,added_user_id:$.userId,role:$.role}});return{...Y,role:Y.role,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():Y.createdAt}}})});import{z as dx}from"zod";var Xd0;var rs1=D(()=>{C4();M0();Xd0=u({name:"ORGANIZATION_MEMBER_REMOVE",description:"Remove a member from the organization. Revokes all their access immediately.",annotations:{title:"Remove Organization Member",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:dx.object({organizationId:dx.string().optional(),memberIdOrEmail:dx.string()}),outputSchema:dx.object({success:dx.boolean(),memberIdOrEmail:dx.string()}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=$.organizationId||Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");if(X!==Z.organization?.id)throw Error("Organization ID does not match authenticated organization");let Q=await Z.boundAuth.organization.removeMember({organizationId:X,memberIdOrEmail:$.memberIdOrEmail});Z.invalidateMemberRole?.(Q.member.userId,X);let Y=o0(Z);if(Y)x1.capture({distinctId:Y,event:"organization_member_removed",groups:{organization:X},properties:{organization_id:X,member_id_or_email:$.memberIdOrEmail}});return{success:!0,memberIdOrEmail:$.memberIdOrEmail}}})});import{z as a7}from"zod";var Qd0;var as1=D(()=>{M0();Qd0=u({name:"ORGANIZATION_MEMBER_LIST",description:"List all members in the organization with their roles.",annotations:{title:"List Organization Members",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:a7.object({limit:a7.number().int().min(1).max(1000).optional(),offset:a7.number().int().min(0).optional()}),outputSchema:a7.object({members:a7.array(a7.object({id:a7.string(),organizationId:a7.string(),userId:a7.string(),role:a7.string(),createdAt:a7.string().datetime().describe("ISO 8601 timestamp"),user:a7.object({id:a7.string(),name:a7.string(),email:a7.string(),image:a7.string().optional()}).optional()}))}),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)");return{members:((await Z.boundAuth.organization.listMembers({organizationId:X,limit:$.limit,offset:$.offset}))?.members??[]).map((G)=>({...G,createdAt:G.createdAt instanceof Date?G.createdAt.toISOString():G.createdAt}))}}})});import{z as fZ}from"zod";var Yd0;var ss1=D(()=>{C4();M0();VQ();Yd0=u({name:"ORGANIZATION_MEMBER_UPDATE_ROLE",description:"Change a member's role (e.g., admin, member) within the organization.",annotations:{title:"Update Member Role",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:fZ.object({organizationId:fZ.string().optional(),memberId:fZ.string(),role:fZ.array(fZ.string())}),outputSchema:fZ.object({id:fZ.string(),organizationId:fZ.string(),userId:fZ.string(),role:fZ.union([fZ.string(),fZ.array(fZ.string())]),createdAt:fZ.string().datetime().describe("ISO 8601 timestamp"),user:fZ.object({email:fZ.string(),name:fZ.string(),image:fZ.string().optional()})}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=$.organizationId||Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");let Q=await Z.db.selectFrom("member").select(["role"]).where("userId","=",o0(Z)??"").where("organizationId","=",X).executeTakeFirst();if(!Z50(Q?.role,$.role))throw Error(`Insufficient privileges to assign role "${$.role.join(",")}"`);let Y=await Z.boundAuth.organization.updateMemberRole({organizationId:X,memberId:$.memberId,role:$.role});if(!Y)throw Error("Failed to update member role");Z.invalidateMemberRole?.(Y.userId,X);let G=o0(Z);if(G)x1.capture({distinctId:G,event:"organization_member_role_updated",groups:{organization:X},properties:{organization_id:X,member_id:$.memberId,target_user_id:Y.userId,new_role:Array.isArray($.role)?$.role.join(","):$.role}});return{...Y,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():Y.createdAt}}})});async function es1(){if(Fp&&Date.now()-Fp.fetchedAt<600000)return Fp.rate;try{let Z=await(await fetch("https://economia.awesomeapi.com.br/json/last/USD-BRL",{signal:AbortSignal.timeout(5000)})).json(),X=parseFloat(Z.USDBRL?.bid??"");if(Number.isNaN(X)||X<=0)throw Error("Invalid rate");return Fp={rate:X,fetchedAt:Date.now()},X}catch{return Fp?.rate??5.5}}function $e1($,Z,X){if(Z==="brl")return Math.round($/X);return $}var Fp=null;function Gd0($,Z="",X=new URLSearchParams){for(let[Q,Y]of Object.entries($)){if(Y===void 0||Y===null)continue;let G=Z?`${Z}[${Q}]`:Q;if(Array.isArray(Y))Y.forEach((J,K)=>{if(typeof J==="object"&&J!==null)Gd0(J,`${G}[${K}]`,X);else X.append(`${G}[${K}]`,String(J))});else if(typeof Y==="object")Gd0(Y,G,X);else X.append(G,String(Y))}return X}async function Hp($,Z){let X=b0().stripeSecretKey;if(!X)throw new uY(503,"billing is not configured");let Q=Z?.params?Gd0(Z.params).toString():void 0,Y=await fetch(`${we8}${$}`,{method:Z?.method??(Q?"POST":"GET"),headers:{Authorization:`Bearer ${X}`,...Q&&{"Content-Type":"application/x-www-form-urlencoded"}},body:Q,signal:AbortSignal.timeout(Ee8)}),G=await Y.json().catch(()=>({}));if(!Y.ok){let J=G.error?.message??`HTTP ${Y.status}`;throw new uY(Y.status,J)}return G}function Ze1($){return{billing_address_collection:"required",tax_id_collection:{enabled:!0},...$&&{customer_update:{address:"auto",name:"auto"}}}}async function Xe1($){let Z=b0().stripeOrgPriceId;if(!Z)throw new uY(503,"billing is not configured");let X=await Hp("/checkout/sessions",{params:{mode:"subscription",...Ze1(null),line_items:[{price:Z,quantity:1}],success_url:$.successUrl,cancel_url:$.cancelUrl,metadata:{orgId:$.organizationId},subscription_data:{metadata:{orgId:$.organizationId}}}});if(!X.url)throw new uY(500,"checkout session lacks url");return{url:X.url}}function je8($,Z){return Math.round($*(1+Z/100))}async function Qe1($){let Z=je8($.amountCents,$.feePercent),X=$e1($.amountCents,$.currency,await es1()),Q=b0().stripeTopupProductId,Y={kind:"topup",orgId:$.organizationId,creditCents:X},G=$.currency==="brl"?`Studio AI credits (R$ ${($.amountCents/100).toFixed(2)})`:`Studio AI credits ($${($.amountCents/100).toFixed(2)})`,J=await Hp("/checkout/sessions",{params:{mode:"payment",...$.customerId&&{customer:$.customerId},...Ze1($.customerId),line_items:[{quantity:1,price_data:{currency:$.currency,unit_amount:Z,...Q?{product:Q}:{product_data:{name:G}}}}],success_url:$.successUrl,cancel_url:$.cancelUrl,metadata:Y,payment_intent_data:{metadata:Y}}});if(!J.url)throw new uY(500,"checkout session lacks url");return{url:J.url}}async function a90($){let Z=await Hp("/billing_portal/sessions",{params:{customer:$.customerId,return_url:$.returnUrl}});if(!Z.url)throw new uY(500,"portal session lacks url");return{url:Z.url}}async function s90($){return Hp(`/subscriptions/${encodeURIComponent($)}`)}async function Ye1($){await Hp(`/subscriptions/${encodeURIComponent($)}`,{method:"DELETE"})}var we8="https://api.stripe.com/v1",uY,Ee8=15000;var QE=D(()=>{q$();uY=class uY extends Error{status;constructor($,Z){super(`Stripe API ${$}: ${Z}`);this.status=$;this.name="StripeApiError"}}});import{z as Jd0}from"zod";var Kd0;var Ge1=D(()=>{QE();s5();M0();C4();Kd0=u({name:"ORGANIZATION_BILLING_CHECKOUT_START",description:"Start the organization's subscription: creates a Stripe Checkout session and returns its URL.",annotations:{title:"Start Billing Checkout",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!0},inputSchema:Jd0.object({}),outputSchema:Jd0.object({url:Jd0.string()}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=Z.organization?.id,Q=Z.organization?.slug;if(!X||!Q)throw Error("Organization context required");let Y=await Z.storage.organizationBilling.getBilling(X);if(Y?.status==="active")throw Error("This organization already has an active subscription.");if(Y?.stripeSubscriptionId)throw Error("This organization still has a subscription on file \u2014 settle or cancel it before starting a new checkout.");let G=`${f9()}/${encodeURIComponent(Q)}/members`,{url:J}=await Xe1({organizationId:X,successUrl:`${G}?checkout=success`,cancelUrl:`${G}?checkout=canceled`});return fY({event:"subscription_checkout_started",organizationId:X,...Z.auth?.user?.id?{userId:Z.auth.user.id}:{}}),{url:J}}})});import{z as Wd0}from"zod";var Fd0;var Je1=D(()=>{QE();s5();M0();Fd0=u({name:"ORGANIZATION_BILLING_PORTAL",description:"Open the organization's Stripe billing portal (manage card, invoices, cancellation). Returns the portal URL.",annotations:{title:"Open Billing Portal",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!0},inputSchema:Wd0.object({}),outputSchema:Wd0.object({url:Wd0.string()}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=t(Z);if(!X.slug)throw Error("Organization context required");let Q=await Z.storage.organizationBilling.getBilling(X.id);if(!Q?.stripeCustomerId)throw Error("This organization has no billing account yet \u2014 subscribe first.");try{return await a90({customerId:Q.stripeCustomerId,returnUrl:`${f9()}/${encodeURIComponent(X.slug)}/members`})}catch(Y){if(Y instanceof uY)throw Error(Y.message);throw Y}}})});function e90($){return Hd0[$%Hd0.length]??ze8}function bQ($){return $.createdBy==="system"}function TH($){return $Z0.filter((Z)=>qx($,Pe8[Z]))}function ix($,Z){return $?.startsWith(`${mx[Z]}:`)??!1}function RH($){let Z=0;for(let X of $){if(X.action!=="status_changed")continue;if(X.data?.to!=="in_review")continue;Z=Math.max(Z,new Date(X.occurredAt).getTime())}return Z}function Nd0($,Z){let X=RH($),Q=new Map;for(let Y of $){if(Y.action!=="review_approved"&&Y.action!=="review_changes_requested")continue;if(new Date(Y.occurredAt).getTime()<X)continue;let G=Y.data??{};if(G.reviewer!=="qa"&&G.reviewer!=="code_review")continue;if(Y.action==="review_approved"){if(Z?.verifiedOnly&&G.verified!==!0)continue;Q.set(G.reviewer,"approved")}else Q.set(G.reviewer,"changes_requested")}return Q}function iO($,Z,X){if(Z.length===0)return!1;let Q=Nd0($,X);return Z.every((Y)=>Q.get(Y)==="approved")}function We1($,Z){return iO($,Z)&&!iO($,Z,{verifiedOnly:!0})}function Fe1($){let Z=null;for(let X of $){if(X.action!=="review_approved"&&X.action!=="review_changes_requested")continue;let Q=new Date(X.occurredAt).getTime();if(Z&&Q<Z.at)continue;let Y=X.data?.notes;Z={at:Q,notes:X.action==="review_changes_requested"&&typeof Y==="string"?Y:null}}return Z?.notes??null}function Ae8($){let Z=0;for(let X of $){if(X.action!=="assignee_changed")continue;if(X.data?.to!==U8)continue;Z=Math.max(Z,new Date(X.occurredAt).getTime())}return Z}function He1($,Z=Ud0){let X=Ae8($),Q=new Set,Y=0;for(let G of[...$].sort((J,K)=>J.occurredAt.localeCompare(K.occurredAt))){let J=new Date(G.occurredAt).getTime();if(G.action==="status_changed"){if(G.data?.to==="in_review")Y=J;continue}if(G.action==="review_changes_requested"&&J>=X)Q.add(Y)}return Q.size+1>=Z}var U8="super-agent",Hd0,ze8,Np='Your checkout is SHALLOW (`git clone --depth 1`), so it has no merge base and `git diff main...HEAD` (three dots) fails with "fatal: main...HEAD: no merge base". To see a branch diff, either use the two-dot form against the fetched remote ref (`git fetch origin <base> && git diff origin/<base> HEAD`), or deepen first with `git fetch --deepen=100`. Same for `git log main..HEAD` and anything else that needs shared history.',Ke1,$Z0,mx,Pe8,Ud0=5,Ne1="task-board.item.updated",Ue1="task-board.item.deleted";var X9=D(()=>{t7();Hd0=["#9ca3af","#ef4444","#f97316","#f59e0b","#22c55e","#3b82f6","#a855f7","#ec4899"],ze8=Hd0[0];Ke1="Read the diff with `gh pr diff <number>`. It comes from the API, so it needs no fetch, no merge base, and is unaffected by the shallow checkout. "+"Read it ONCE \u2014 `gh pr diff <number> --name-only` first if you need to size "+"it, then pull the hunks you need per FILE. Do NOT re-run the diff sliced by directory: each slice re-reads bytes you already have into every remaining turn's context, and it is the largest avoidable cost in a review.",$Z0=["qa","code_review"],mx={qa:"QA Agent",code_review:"Code Reviewer"},Pe8={qa:"qa_agent_enabled",code_review:"code_reviewer_enabled"}});function Od0($){return $==="trial"?"trial":"subscription"}function Up($,Z,X,Q={}){fY({event:Z,organizationId:X.organizationId,...$.auth?.user?.id?{userId:$.auth.user.id}:{},properties:{task_id:X.id,...Q}})}function Bd0($){return $?.status==="active"||$?.status==="past_due"}function ZZ0($,Z){if(Bd0($))return{periodKey:$?.currentPeriodEnd?`sub:${$.currentPeriodEnd.toISOString()}`:"sub:pending",limit:$?.monthlyTaskExecutions??Z.monthlyTaskExecutions,exhaustedReason:"monthly_exhausted"};return{periodKey:"trial",limit:$?.freeTaskExecutions??Z.freeTaskExecutions,exhaustedReason:"trial_exhausted"}}function Op(){let $=b0();return{enforced:$.taskQuotaEnforced,freeTaskExecutions:$.freeTaskExecutions,monthlyTaskExecutions:$.monthlyTaskExecutions,maxRunsPerTask:$.maxRunsPerTask}}function pO(){return{...Op(),maxRunsPerTask:Number.POSITIVE_INFINITY}}async function px($,Z,X=Op()){if(!X.enforced||!bQ(Z))return;let Q=await $.storage.organizationBilling.taskClaim(Z.id);if(Q&&Q.runCount>=X.maxRunsPerTask)throw Up($,"task_quota_blocked",Z,{phase:"precheck",reason:"runs_exhausted"}),new s7("runs_exhausted");if(Q&&Q.state!=="released")return;let Y=await $.storage.organizationBilling.getBilling(Z.organizationId),G=ZZ0(Y,X);if(await $.storage.organizationBilling.countTaskClaims(Z.organizationId,G.periodKey)>=G.limit)throw Up($,"task_quota_blocked",Z,{phase:"precheck",reason:G.exhaustedReason,billing_mode:Od0(G.periodKey),limit:G.limit}),new s7(G.exhaustedReason)}async function Oe1($,Z,X=Op()){if(!X.enforced||!bQ(Z))return"skipped";let Q=await $.storage.organizationBilling.getBilling(Z.organizationId),Y=ZZ0(Q,X),G=await $.storage.organizationBilling.claimTaskUnderLimit(Z.organizationId,Z.id,Y.periodKey,Y.limit,X.maxRunsPerTask);if(G==="exhausted")throw Up($,"task_quota_blocked",Z,{phase:"claim",reason:Y.exhaustedReason,billing_mode:Od0(Y.periodKey),limit:Y.limit}),new s7(Y.exhaustedReason);if(G==="runs_exhausted")throw Up($,"task_quota_blocked",Z,{phase:"claim",reason:"runs_exhausted"}),new s7("runs_exhausted");if(G==="claimed")Up($,"task_quota_claimed",Z,{billing_mode:Od0(Y.periodKey),period_key:Y.periodKey,limit:Y.limit});return G}async function Be1($,Z,X,Q){if(Q==="skipped")return;await $.rollbackTaskClaim(Z,X,{releaseSlot:Q==="claimed"}).catch((Y)=>console.error("[task-quota] rollback failed (stays charged)",Y))}async function De1($,Z){let X=await $.storage.organizationBilling.taskClaim(Z);return!!X&&X.state!=="released"}async function Le1($,Z,X){if(await $.releaseTaskClaim(Z,X).catch((Y)=>{return console.error("[task-quota] refund failed (stays charged)",Y),!1}))fY({event:"task_quota_refunded",organizationId:Z,properties:{task_id:X}})}var Te8="[SUBSCRIPTION_REQUIRED]",Re8,s7;var nG=D(()=>{X9();C4();q$();Re8={trial_exhausted:"this organization used its free task executions \u2014 subscribe to keep running tasks",monthly_exhausted:"this organization used its monthly task executions \u2014 more become available next billing cycle",runs_exhausted:"this task reached its execution limit \u2014 create a new task to keep going"};s7=class s7 extends Error{reason;constructor($){super(`${Te8} ${Re8[$]}`);this.reason=$;this.name="TaskQuotaError"}}});import{z as IH}from"zod";var Dd0;var we1=D(()=>{M0();nG();Dd0=u({name:"ORGANIZATION_TASK_QUOTA_GET",description:"Get the organization's auto-task quota: how many runs are used in the current period, the limit, and the subscription's billing status.",annotations:{title:"Get Task Quota",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:IH.object({}),outputSchema:IH.object({enforced:IH.boolean(),billingStatus:IH.string(),subscribed:IH.boolean(),hasBillingAccount:IH.boolean(),used:IH.number(),limit:IH.number(),currentPeriodEnd:IH.string().datetime().nullable()}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=t(Z),Q=Op(),Y=await Z.storage.organizationBilling.getBilling(X.id),G=ZZ0(Y,Q),J=await Z.storage.organizationBilling.countTaskClaims(X.id,G.periodKey);return{enforced:Q.enforced,billingStatus:Y?.status??"none",subscribed:Bd0(Y),hasBillingAccount:!!Y?.stripeCustomerId,used:J,limit:G.limit,currentPeriodEnd:Y?.currentPeriodEnd?.toISOString()??null}}})});var Ee1=D(()=>{Ss1();Cs1();_s1();vs1();fs1();bs1();xs1();gs1();us1();cs1();ds1();ns1();ts1();os1();rs1();as1();ss1();Ge1();Je1();we1()});function OW($){if($==null)return"unknown error";if(typeof $==="string")return $;if($ instanceof Error)return $.message;return JSON.stringify($)}function XZ0($){if($===null||typeof $==="string"||typeof $==="number"||typeof $==="boolean")return!0;if(Array.isArray($))return $.every(XZ0);if(typeof $==="object")return Object.entries($).every(([Z,X])=>typeof Z==="string"&&(X===void 0||XZ0(X)));return!1}function Ld0($){return Array.isArray($)&&$.every(XZ0)}function Bp($){return $!=null&&typeof $==="object"&&Object.entries($).every(([Z,X])=>typeof Z==="string"&&(X===void 0||XZ0(X)))}var ne1="vercel.ai.error",qe8,je1,ze1,J1,te1="AI_APICallError",oe1,Me8,Pe1,Ae1,Q4,re1="AI_EmptyResponseBodyError",ae1,ke8,Te1,Re1,QZ0,se1="AI_InvalidArgumentError",ee1,Ve8,Ie1,qe1,nO,$0$="AI_InvalidPromptError",Z0$,Se8,Me1,ke1,tG,X0$="AI_InvalidResponseDataError",Q0$,Ce8,Ve1,Se1,nx,Y0$="AI_JSONParseError",G0$,_e8,Ce1,_e1,qH,J0$="AI_LoadAPIKeyError",K0$,ve8,ve1,fe1,YE,W0$="AI_LoadSettingError",F0$,fe8,be1,xe1,H0$,N0$="AI_NoContentGeneratedError",U0$,be8,ye1,ge1,O0$,B0$="AI_NoSuchModelError",D0$,xe8,he1,ue1,u5,L0$="AI_TooManyEmbeddingValuesForCallError",w0$,ye8,ce1,le1,tx,E0$="AI_TypeValidationError",j0$,ge8,de1,me1,U5,z0$="AI_UnsupportedFunctionalityError",P0$,he8,ie1,pe1,v4;var a1=D(()=>{qe8=Symbol.for(ne1),J1=class $ extends(ze1=Error,je1=qe8,ze1){constructor({name:Z,message:X,cause:Q}){super(X);this[je1]=!0,this.name=Z,this.cause=Q}static isInstance(Z){return $.hasMarker(Z,ne1)}static hasMarker(Z,X){let Q=Symbol.for(X);return Z!=null&&typeof Z==="object"&&Q in Z&&typeof Z[Q]==="boolean"&&Z[Q]===!0}},oe1=`vercel.ai.error.${te1}`,Me8=Symbol.for(oe1),Q4=class extends(Ae1=J1,Pe1=Me8,Ae1){constructor({message:$,url:Z,requestBodyValues:X,statusCode:Q,responseHeaders:Y,responseBody:G,cause:J,isRetryable:K=Q!=null&&(Q===408||Q===409||Q===429||Q>=500),data:W}){super({name:te1,message:$,cause:J});this[Pe1]=!0,this.url=Z,this.requestBodyValues=X,this.statusCode=Q,this.responseHeaders=Y,this.responseBody=G,this.isRetryable=K,this.data=W}static isInstance($){return J1.hasMarker($,oe1)}},ae1=`vercel.ai.error.${re1}`,ke8=Symbol.for(ae1),QZ0=class extends(Re1=J1,Te1=ke8,Re1){constructor({message:$="Empty response body"}={}){super({name:re1,message:$});this[Te1]=!0}static isInstance($){return J1.hasMarker($,ae1)}};ee1=`vercel.ai.error.${se1}`,Ve8=Symbol.for(ee1),nO=class extends(qe1=J1,Ie1=Ve8,qe1){constructor({message:$,cause:Z,argument:X}){super({name:se1,message:$,cause:Z});this[Ie1]=!0,this.argument=X}static isInstance($){return J1.hasMarker($,ee1)}},Z0$=`vercel.ai.error.${$0$}`,Se8=Symbol.for(Z0$),tG=class extends(ke1=J1,Me1=Se8,ke1){constructor({prompt:$,message:Z,cause:X}){super({name:$0$,message:`Invalid prompt: ${Z}`,cause:X});this[Me1]=!0,this.prompt=$}static isInstance($){return J1.hasMarker($,Z0$)}},Q0$=`vercel.ai.error.${X0$}`,Ce8=Symbol.for(Q0$),nx=class extends(Se1=J1,Ve1=Ce8,Se1){constructor({data:$,message:Z=`Invalid response data: ${JSON.stringify($)}.`}){super({name:X0$,message:Z});this[Ve1]=!0,this.data=$}static isInstance($){return J1.hasMarker($,Q0$)}},G0$=`vercel.ai.error.${Y0$}`,_e8=Symbol.for(G0$),qH=class extends(_e1=J1,Ce1=_e8,_e1){constructor({text:$,cause:Z}){super({name:Y0$,message:`JSON parsing failed: Text: ${$}.
891
+ `.execute($)).rows[0]?.exists)await _4`CREATE ROLE ${_4.id(X)} NOLOGIN`.execute($);await _4`GRANT ${_4.id(X)} TO CURRENT_USER`.execute($),await _4`GRANT USAGE, CREATE ON SCHEMA ${_4.id(Z)} TO ${_4.id(X)}`.execute($),await _4`GRANT ALL ON ALL TABLES IN SCHEMA ${_4.id(Z)} TO ${_4.id(X)}`.execute($),await _4`GRANT ALL ON ALL SEQUENCES IN SCHEMA ${_4.id(Z)} TO ${_4.id(X)}`.execute($),await _4`ALTER DEFAULT PRIVILEGES IN SCHEMA ${_4.id(Z)} GRANT ALL ON TABLES TO ${_4.id(X)}`.execute($),await _4`ALTER DEFAULT PRIVILEGES IN SCHEMA ${_4.id(Z)} GRANT ALL ON SEQUENCES TO ${_4.id(X)}`.execute($),await _4`REVOKE ALL ON SCHEMA public FROM ${_4.id(X)}`.execute($)}async function Cs8($,Z,X,Q){try{return await $.transaction().execute(async(Y)=>{return await _4`SET LOCAL ROLE ${_4.id(X)}`.execute(Y),await _4`SET LOCAL search_path TO ${_4.id(Z)}`.execute(Y),await _4.raw(Q).execute(Y)})}catch(Y){if(Vs8(Y))return await Ss8($,Z,X),await $.transaction().execute(async(G)=>{return await _4`SET LOCAL ROLE ${_4.id(X)}`.execute(G),await _4`SET LOCAL search_path TO ${_4.id(Z)}`.execute(G),await _4.raw(Q).execute(G)});throw Y}}var Rs8,qs8,sa1;var ea1=D(()=>{M0();Rs8=NW.object({results:NW.array(NW.unknown()).optional(),success:NW.boolean().optional()});qs8=NW.object({sql:NW.string().describe("The SQL query to run"),params:NW.array(NW.any()).describe("The parameters to pass to the SQL query").optional()});sa1=u({name:"DATABASES_RUN_SQL",description:"Run a SQL query in a connection-scoped isolated schema. Supports SELECT, DDL, and DML.",annotations:{title:"Run SQL Query",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:qs8,outputSchema:NW.object({result:NW.array(Rs8)}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=Is8($.sql,$.params||[]);if(!Z.connectionId)throw Error("Connection context required for database access");console.warn("DATABASES_RUN_SQL invoked",{"tool.deprecation_probe":"DATABASES_RUN_SQL","connection.id":Z.connectionId,"organization.id":Z.organization?.id??null,"user.id":Z.auth.user?.id??null});let Q=Ms8(Z.connectionId),Y=ks8(Z.connectionId);return{result:[{results:(await Cs8(Z.db,Q,Y,X)).rows,success:!0}]}}})});function h90($){let Z=$.access.getRole();if(!p7(Z))throw new UH("Only organization owners and admins can change org-wide pin status")}var Ql0=D(()=>{VQ();_w()});async function u90($,Z,X){let Q=[...new Set(X)],Y=await Promise.all(Q.map((J)=>$.storage.connections.findById(J,Z))),G=Q.filter((J,K)=>!Y[K]);if(G.length>0)throw Error(`Connection not found: ${G.join(", ")}`)}function zH($){return $.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"")}function c90($){let Z=2166136261;for(let X=0;X<$.length;X++)Z=Math.imul(Z^$.charCodeAt(X),16777619);return`a${(Z>>>0).toString(36).padStart(6,"0").slice(-6)}`}function Gp($){if($&&typeof $==="object"&&"gatewayClientId"in $&&typeof $.gatewayClientId==="string")return $.gatewayClientId;return}function Jp($,Z){if(!Z)return $;let X=`${c90(Z)}_`;return $.startsWith(X)?$.slice(X.length):$}function vs8($){return $.split(/[-_]/).map((Z)=>Z?Z.charAt(0).toUpperCase()+Z.slice(1):Z).join(" ")}var cx;var $s1=D(()=>{mK();cx=class cx extends x9{static MAX_PAGES_PER_CLIENT=1000;clients;slugToKey=new Map;resolvedClients=new Map;toolsCache=null;resourcesCache=null;resourceTemplatesCache=null;promptsCache=null;resourceRouteMap=new Map;constructor($,Z){super(Z?.clientInfo??{name:"gateway-client",version:"1.0.0"},{capabilities:Z?.capabilities});this.clients=$;for(let X of Object.keys($)){let Q=c90(X);if(this.slugToKey.has(Q))throw Error(`GatewayClient: duplicate namespace code "${Q}" from keys "${this.slugToKey.get(Q)}" and "${X}"`);this.slugToKey.set(Q,X)}}namespace($,Z){return`${c90($)}_${Z}`}async resolveToolTarget($){let Z=$.indexOf("_");if(Z!==-1){let Q=$.slice(0,Z),Y=this.slugToKey.get(Q);if(Y)return[Y,$.slice(Z+1)]}let{tools:X}=await this.listTools();for(let Q of X){let Y=Gp(Q._meta);if(!Y)continue;if(Jp(Q.name,Y)===$)return[Y,$]}if(Z===-1)throw Error(`GatewayClient: could not resolve tool "${$}" \u2014 no namespace prefix and not found in any client`);throw Error(`GatewayClient: unknown namespace "${$.slice(0,Z)}" in "${$}" and not found by original name in any client`)}async resolvePromptTarget($){let Z=$.indexOf("_");if(Z!==-1){let Q=$.slice(0,Z),Y=this.slugToKey.get(Q);if(Y)return[Y,$.slice(Z+1)]}let{prompts:X}=await this.listPrompts();for(let Q of X){let Y=Gp(Q._meta);if(!Y)continue;if(Jp(Q.name,Y)===$)return[Y,$]}if(Z===-1)throw Error(`GatewayClient: could not resolve prompt "${$}" \u2014 no namespace prefix and not found in any client`);throw Error(`GatewayClient: unknown namespace "${$.slice(0,Z)}" in "${$}" and not found by original name in any client`)}resolveClient($){let Z=this.resolvedClients.get($);if(Z)return Z;let X=this.clients[$];if(!X)return Promise.reject(Error(`GatewayClient: unknown client key "${$}"`));let Q=X.client,Y;try{Y=typeof Q==="function"?Promise.resolve(Q()):Promise.resolve(Q)}catch(J){return Promise.reject(J)}let G=Y.catch((J)=>{throw this.resolvedClients.delete($),J});return this.resolvedClients.set($,G),G}getResolvedClient($){return this.resolveClient($)}async listFromClient($,Z,X){try{let Q=await this.resolveClient($);return await Z(Q)}catch(Q){return console.warn(`GatewayClient: skipping ${X} from client "${$}" \u2014 ${Q?.message??Q}`),[]}}async paginate($,Z,X){let Q=[],Y,G=0;do{let J=await X(Y);Q.push(...J.items),Y=J.nextCursor,G++}while(Y&&G<cx.MAX_PAGES_PER_CLIENT);if(Y)console.warn(`GatewayClient: client "${$}" exceeded ${cx.MAX_PAGES_PER_CLIENT} pages listing ${Z} \u2014 truncating`);return Q}fetchAllTools($,Z){return this.paginate(Z,"tools",async(X)=>{let Q=await $.listTools(X?{cursor:X}:void 0);return{items:Q.tools,nextCursor:Q.nextCursor}})}fetchAllResources($,Z){return this.paginate(Z,"resources",async(X)=>{let Q=await $.listResources(X?{cursor:X}:void 0);return{items:Q.resources,nextCursor:Q.nextCursor}})}fetchAllResourceTemplates($,Z){return this.paginate(Z,"resource templates",async(X)=>{let Q=await $.listResourceTemplates(X?{cursor:X}:void 0);return{items:Q.resourceTemplates,nextCursor:Q.nextCursor}})}fetchAllPrompts($,Z){return this.paginate(Z,"prompts",async(X)=>{let Q=await $.listPrompts(X?{cursor:X}:void 0);return{items:Q.prompts,nextCursor:Q.nextCursor}})}listTools($,Z){if(!this.toolsCache)this.toolsCache=this.aggregateTools();return this.toolsCache}async aggregateTools(){let $=[];for(let[Z,X]of Object.entries(this.clients)){let Q=await this.listFromClient(Z,(J)=>this.fetchAllTools(J,Z),"tools"),Y=X.tools,G=Y?new Set(Y):null;for(let J of Q){if(G&&!G.has(J.name))continue;$.push({...J,name:this.namespace(Z,J.name),_meta:{...J._meta??{},gatewayClientId:Z}})}}return{tools:$}}listResources($,Z){if(!this.resourcesCache)this.resourcesCache=this.aggregateResources();return this.resourcesCache}async aggregateResources(){let $=new Set,Z=[],X=new Map;for(let[Q,Y]of Object.entries(this.clients)){let G=await this.listFromClient(Q,(W)=>this.fetchAllResources(W,Q),"resources"),J=Y.resources,K=J?new Set(J):null;for(let W of G){if(K&&!K.has(W.uri)&&!(W.name&&K.has(W.name)))continue;if($.has(W.uri)){console.warn(`GatewayClient: duplicate resource "${W.uri}" from client "${Q}" \u2014 skipping`);continue}$.add(W.uri),X.set(W.uri,Q),Z.push({...W,_meta:{...W._meta??{},gatewayClientId:Q}})}}return this.resourceRouteMap=X,{resources:Z}}listResourceTemplates($,Z){if(!this.resourceTemplatesCache)this.resourceTemplatesCache=this.aggregateResourceTemplates();return this.resourceTemplatesCache}async aggregateResourceTemplates(){let $=new Set,Z=[];for(let[X,Q]of Object.entries(this.clients)){let Y=await this.listFromClient(X,(G)=>this.fetchAllResourceTemplates(G,X),"resource templates");for(let G of Y){if($.has(G.uriTemplate)){console.warn(`GatewayClient: duplicate resource template "${G.uriTemplate}" from client "${X}" \u2014 skipping`);continue}$.add(G.uriTemplate),Z.push({...G,_meta:{...G._meta??{},gatewayClientId:X}})}}return{resourceTemplates:Z}}listPrompts($,Z){if(!this.promptsCache)this.promptsCache=this.aggregatePrompts();return this.promptsCache}async aggregatePrompts(){let $=[];for(let[Z,X]of Object.entries(this.clients)){let Q=await this.listFromClient(Z,(J)=>this.fetchAllPrompts(J,Z),"prompts"),Y=X.prompts,G=Y?new Set(Y):null;for(let J of Q){if(G&&!G.has(J.name))continue;$.push({...J,name:this.namespace(Z,J.name),title:J.title??vs8(J.name),_meta:{...J._meta??{},gatewayClientId:Z}})}}return{prompts:$}}async callTool($,Z,X){let[Q,Y]=await this.resolveToolTarget($.name);return(await this.resolveClient(Q)).callTool({...$,name:Y},Z,X)}async readResource($,Z){let X=await this.resolveResourceRoute($.uri);return(await this.resolveClient(X)).readResource($)}async getPrompt($,Z){let[X,Q]=await this.resolvePromptTarget($.name);return(await this.resolveClient(X)).getPrompt({...$,name:Q})}async resolveResourceRoute($){let Z=this.resourceRouteMap.get($);if(Z)return Z;if(this.resourcesCache=null,await this.listResources(),Z=this.resourceRouteMap.get($),Z)return Z;throw Error(`GatewayClient: resource "${$}" not found in any upstream client`)}getServerCapabilities(){return{tools:{},resources:{},prompts:{}}}getInstructions(){return}refresh(){this.toolsCache=null,this.resourcesCache=null,this.resourceTemplatesCache=null,this.promptsCache=null}async close(){let $=[...this.resolvedClients.values()].map((Z)=>Z.then((X)=>X.close()).catch(()=>{}));await Promise.allSettled($),await super.close()}}});var l90=D(()=>{$s1()});function Gl0($){return zH($)}function bs8($,Z){let X=zH(Z)||"prompt";return`${String($).padStart(fs8,"0")}-${X}`}async function Jl0($,Z,X){try{await $.delete(d90,Gl0(Z),{actor:X})}catch(Q){console.error("[agent-prompts] failed to delete prompts",{agentId:Z,err:Q})}}async function m90($,Z,X,Q){let Y=Gl0(Z);await Jl0($,Z,X),await Promise.all(Q.slice(0,Yl0).map(async(G,J)=>{let K=bs8(J,G.title),W={name:K,title:G.title,description:G.description,text:G.text};try{await $.write(d90,`${Y}/${K}.json`,JSON.stringify(W),{actor:X,contentType:"application/json"})}catch(F){console.error("[agent-prompts] failed to seed prompt",{agentId:Z,name:K,err:F})}}))}async function Zs1($,Z){let X=Gl0(Z),Q;try{Q=await $.listDir(d90,X)}catch{return[]}let Y=Q.filter((J)=>J.kind==="file"&&J.path.endsWith(".json")).slice(0,Yl0),G=[];for(let J of Y)try{let K=await $.read(d90,J.path),W=JSON.parse(new TextDecoder().decode(K));if(W&&typeof W.name==="string"&&typeof W.title==="string"&&typeof W.text==="string")G.push(W)}catch{}return G}var d90="agent-prompts",Yl0=20,fs8;var Kp=D(()=>{l90();fs8=String(Yl0-1).length});function lx($){if(!$)return $;let Z={...$};return delete Z.sandboxMap,Z}import{z as Ys1}from"zod";function xs8(){let $=Xs1[Math.floor(Math.random()*Xs1.length)];return`icon://${Qs1[Math.floor(Math.random()*Qs1.length)]}?color=${$}`}var Xs1,Qs1,ys8,gs8,Kl0;var Gs1=D(()=>{M0();vO();Ql0();Kp();Xs1=["red","orange","amber","yellow","lime","green","emerald","cyan","sky","blue","indigo","violet","purple","fuchsia","pink","rose"],Qs1=["Star01","Zap","Heart","Globe01","Compass03","Lightbulb02","Rocket01","Flag01","BookOpen01","Shield01","Key01","Diamond01","Cube01","Target04","Award01","Briefcase01","Coffee","Feather","Hexagon01","Layers3_01","Map01","Palette","Package","Terminal"];ys8=Ys1.object({data:K80.describe("Data for the new virtual MCP")}),gs8=Ys1.object({item:u7.describe("The created virtual MCP entity")}),Kl0=u({name:"COLLECTION_VIRTUAL_MCP_CREATE",description:"Create a Virtual MCP (agent) that aggregates tools from multiple connections into one endpoint. Pass `prompts` to seed the agent with kickstart prompts (conversation starters shown as icebreakers). Author them from the agent's role/instructions and the descriptions of the tools it will have, so the starters are coherent and immediately useful.",annotations:{title:"Create Virtual MCP",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:ys8,outputSchema:gs8,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 virtual MCP");if($.data.pinned===!0)h90(Z);let{prompts:Y,metadata:G,...J}=$.data,K=lx(G);if(J.connections.length>0)await u90(Z,X.id,J.connections.map((H)=>H.connection_id));let W={...J,metadata:K,icon:J.icon??xs8()},F=await Z.storage.virtualMcps.create(X.id,Q,W);if(Y?.length&&Z.orgFs&&F.id)await m90(Z.orgFs,F.id,Q,Y);return{item:F}}})});function hs8($){let Z=[],X=0;while(X<$.length){let Q=$[X];if(Q==="%")Z.push(".*");else if(Q==="_")Z.push(".");else if(/[.*+?^${}()|[\]\\]/.test(Q))Z.push("\\"+Q);else Z.push(Q);X++}return Z.join("")}function cO($){return typeof $==="string"||typeof $==="number"}function Wl0($,Z){let X=Z.split("."),Q=$;for(let Y of X){if(Q==null||typeof Q!=="object")return;Q=Q[Y]}return Q}function us8($,Z){return $.connections.some((X)=>X.connection_id===Z)}function i90($,Z){if("conditions"in Z){let{operator:K,conditions:W}=Z;switch(K){case"and":return W.every((F)=>i90($,F));case"or":return W.some((F)=>i90($,F));case"not":return!W.every((F)=>i90($,F));default:return!0}}let{field:X,operator:Q,value:Y}=Z,G=X.join(".");if(G==="connection_id"){if(Q!=="eq"||typeof Y!=="string")return!1;return us8($,Y)}let J=Wl0($,G);switch(Q){case"eq":return J===Y;case"gt":return cO(J)&&cO(Y)&&J>Y;case"gte":return cO(J)&&cO(Y)&&J>=Y;case"lt":return cO(J)&&cO(Y)&&J<Y;case"lte":return cO(J)&&cO(Y)&&J<=Y;case"in":return Array.isArray(Y)&&Y.includes(J);case"like":if(typeof J!=="string"||typeof Y!=="string")return!1;if(Y.length>100)return!1;let K=hs8(Y);return new RegExp(`^${K}$`,"i").test(J);case"contains":if(typeof J!=="string"||typeof Y!=="string")return!1;return J.toLowerCase().includes(Y.toLowerCase());default:return!0}}function cs8($,Z){return[...$].sort((X,Q)=>{for(let Y of Z){let G=Y.field.join("."),J=Wl0(X,G),K=Wl0(Q,G),W=0;if(J==null&&K==null)continue;if(J==null)W=Y.nulls==="first"?-1:1;else if(K==null)W=Y.nulls==="first"?1:-1;else if(typeof J==="string"&&typeof K==="string")W=J.localeCompare(K);else if(typeof J==="number"&&typeof K==="number")W=J-K;else W=String(J).localeCompare(String(K));if(W!==0)return Y.direction==="desc"?-W:W}return 0})}var ls8,ds8,Fl0;var Js1=D(()=>{lG();M0();vO();ls8=A3,ds8=EH(u7),Fl0=u({name:"COLLECTION_VIRTUAL_MCP_LIST",description:"List all MCP virtual MCPs in the organization",annotations:{title:"List Virtual MCPs",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:ls8,outputSchema:ds8,handler:async($,Z)=>{await Z.access.check();let X=t(Z),Q=$.where&&!("conditions"in $.where)&&$.where.field.join(".")==="connection_id"&&$.where.operator==="eq"&&typeof $.where.value==="string"?$.where.value:void 0,Y=$.where&&!("conditions"in $.where)&&$.where.field.join(".")==="pinned"&&$.where.operator==="eq"&&typeof $.where.value==="boolean"?$.where.value:void 0,J=Q?await Z.storage.virtualMcps.listByConnectionId(X.id,Q):await Z.storage.virtualMcps.list(X.id,Y!==void 0?{pinnedOnly:Y}:void 0);if($.where)J=J.filter((U)=>i90(U,$.where));if($.orderBy&&$.orderBy.length>0)J=cs8(J,$.orderBy);let K=J.length,W=$.offset??0,F=$.limit??100,H=J.slice(W,W+F),N=W+F<K;return{items:H,totalCount:K,hasMore:N}}})});import{z as Hl0}from"zod";var ms8,is8,Nl0;var Ks1=D(()=>{M0();vO();ms8=Hl0.object({id:Hl0.string().describe("ID of the virtual MCP to retrieve")}),is8=Hl0.object({item:u7.nullable().describe("The retrieved virtual MCP, or null if not found")}),Nl0=u({name:"COLLECTION_VIRTUAL_MCP_GET",description:"Get a Virtual MCP's configuration, connections, and virtual tools by ID.",annotations:{title:"Get Virtual MCP",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:ms8,outputSchema:is8,handler:async($,Z)=>{r(Z);let X=t(Z);await Z.access.check();let Q=await Z.storage.virtualMcps.findById($.id);if(Q&&Q.organization_id!==X.id)return{item:null};if(!Q)return{item:null};return{item:Q}}})});function iG($){return Ul0.test($)}function Ws1($){let Z=(X)=>typeof X==="string"?X.trim().toLowerCase():"";return Z($?.metadata?.siteSlug)||Z($?.title)||null}var Ul0;var lO=D(()=>{Ul0=/^[a-z0-9][a-z0-9-]{0,59}$/});function Fs1($){let{nextTitle:Z,currentTitle:X,currentSiteSlug:Q}=$;if(Q?.trim())return null;if(Z===void 0||Z===X)return null;let Y=X?.trim().toLowerCase()??"";return iG(Y)?Y:null}var Hs1=D(()=>{lO()});import{z as Ol0}from"zod";var ps8,ns8,Bl0;var Ns1=D(()=>{M0();Kp();vO();Ql0();Hs1();ps8=Ol0.object({id:Ol0.string().describe("ID of the virtual MCP to update"),data:W80.describe("Partial virtual MCP data to update")}),ns8=Ol0.object({item:u7.describe("The updated virtual MCP entity")}),Bl0=u({name:"COLLECTION_VIRTUAL_MCP_UPDATE",description:"Update a Virtual MCP's name, slug, connection list, or kickstart prompts. Pass `prompts` to replace the agent's conversation starters (full set; empty array clears them).",annotations:{title:"Update Virtual MCP",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:ps8,outputSchema:ns8,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 virtual MCP");let Y=await Z.storage.virtualMcps.findById($.id);if(!Y)throw Error(`Virtual MCP not found: ${$.id}`);if(Y.organization_id!==X.id)throw Error(`Virtual MCP not found: ${$.id}`);let{prompts:G,metadata:J,...K}=$.data,W=lx(J);if(W&&Y.metadata)W={...Y.metadata,...W};else if(W===null&&Y.metadata?.sandboxMap)W={sandboxMap:Y.metadata.sandboxMap};let F={...K,...J!==void 0?{metadata:W}:{}},H=Fs1({nextTitle:F.title,currentTitle:Y.title,currentSiteSlug:Y.metadata?.siteSlug});if(H)F.metadata={...Y.metadata,...F.metadata,siteSlug:H};if(F.pinned!==void 0&&F.pinned!==Y.pinned)h90(Z);if(F.connections?.length)await u90(Z,X.id,F.connections.map((U)=>U.connection_id));let N=await Z.storage.virtualMcps.update($.id,Q,F);if(G!==void 0&&Z.orgFs)await m90(Z.orgFs,$.id,Q,G);return{item:N}}})});function ts8($){if(!$)return!1;let Z=Ll0.join("|");return new RegExp(`permission\\s+"?(?:${Z})"?\\s+is not allowed`,"i").test($)||/permissions exceed what the github app/i.test($)}function Os1($){let Z={...$};for(let X of Ll0)Z[X]="read";return Z}async function Bs1($,Z){let X={...Z};for(;;){let Q=await $(X);if(!Q.isError)return{result:Q,grantedPermissions:X};let Y=Q.content?.find((W)=>W.type==="text")?.text,G=Ll0.find((W)=>(W in X));if(!G||!ts8(Y))return{result:Q,grantedPermissions:X};let{[G]:J,...K}=X;X=K}}function os8($){if(!$||typeof $!=="object"||Array.isArray($))return Us1;let Z=$;if(Object.values(Z).some((X)=>typeof X!=="string"))return Us1;return Z}function rs8($){if(typeof $!=="number"||!Number.isFinite($)||!Number.isInteger($)||$<=0)return;return $}function I5($){let Z=$.metadata?.repoScope;if(!Z||typeof Z.installationId!=="number"||!Number.isFinite(Z.installationId)||!Number.isInteger(Z.installationId)||Z.installationId<=0||typeof Z.owner!=="string"||typeof Z.repo!=="string"||Z.owner.length===0||Z.repo.length===0)return null;let X=rs8(Z.repositoryId);return{sourceConnectionId:typeof Z.sourceConnectionId==="string"?Z.sourceConnectionId:void 0,installationId:Z.installationId,repositoryId:X,owner:Z.owner,repo:Z.repo,permissions:os8(Z.permissions),grantProvider:Z.grantProvider==="github-mcp"?"github-mcp":void 0}}function ZE($){return $.metadata?.orgShared===!0}function Ds1($){let Z=new Set,X=[];for(let Q of $??[]){if(Q.status!=="active")continue;let Y=I5(Q);if(Y===null)continue;let G=Dl0(Y.owner,Y.repo);if(Z.has(G))continue;Z.add(G),X.push(`${Y.owner}/${Y.repo}`)}return X}function p90($,Z,X){let Q=Dl0(Z,X),Y=($??[]).filter((G)=>{if(G.status&&G.status!=="active")return!1;let J=I5(G);return J!==null&&Dl0(J.owner,J.repo)===Q});return Y.find(ZE)??Y[0]??null}var Us1,Ll0,Dl0=($,Z)=>`${$}/${Z}`.toLowerCase();var CQ=D(()=>{Us1={contents:"write",metadata:"read",pull_requests:"write",issues:"write",checks:"read",deployments:"read"},Ll0=["deployments","checks"]});function Ls1($){return _G($)!==null||_40($)!==null}var ws1=D(()=>{C8()});import{z as wl0}from"zod";var as8,ss8,El0;var Es1=D(()=>{CQ();mG();M0();Kp();vO();ws1();as8=wl0.object({id:wl0.string().describe("ID of the virtual MCP to delete")}),ss8=wl0.object({item:u7.describe("The deleted virtual MCP entity")}),El0=u({name:"COLLECTION_VIRTUAL_MCP_DELETE",description:"Permanently delete a Virtual MCP and its virtual tools.",annotations:{title:"Delete Virtual MCP",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:as8,outputSchema:ss8,handler:async($,Z)=>{r(Z);let X=t(Z);if(await Z.access.check(),Ls1($.id))throw Error(`Virtual MCP not found: ${$.id}`);let Q=await Z.storage.virtualMcps.findById($.id);if(!Q)throw Error(`Virtual MCP not found: ${$.id}`);if(Q.organization_id!==X.id)throw Error(`Virtual MCP not found: ${$.id}`);await Z.storage.virtualMcps.delete($.id);try{if((await Z.storage.organizationSettings.get(X.id))?.main_agent_id===$.id)await Z.storage.organizationSettings.upsert(X.id,{main_agent_id:null})}catch(G){console.error("[VIRTUAL_MCP_DELETE] failed to clear main agent pointer",{id:$.id,error:G.message})}if(Z.orgFs)await Jl0(Z.orgFs,$.id,o0(Z)??"system");let Y=Q.metadata?.githubRepo?.connectionId;if(Y)try{let G=await Z.storage.connections.findById(Y,X.id),J=G&&(ZE(G)||(await Z.storage.virtualMcps.listByConnectionId(X.id,Y)).length>0||await Z.storage.connections.isReferencedByThread(Y));if(G&&I5(G)&&!J){let W=await new l6(Z.db,Z.vault).get(Y);if(W?.accessToken)try{await fetch("https://api.github.com/installation/token",{method:"DELETE",headers:{Authorization:`Bearer ${W.accessToken}`,Accept:"application/vnd.github+json","X-GitHub-Api-Version":"2022-11-28"},signal:AbortSignal.timeout(5000)})}catch{}await Z.storage.connections.delete(Y)}}catch(G){console.error("[VIRTUAL_MCP_DELETE] failed to tear down repo-scoped connection",{childConnectionId:Y,error:G.message})}return{item:Q}}})});import{z as _Q}from"zod";var es8,jl0;var js1=D(()=>{M0();es8=_Q.object({id:_Q.string(),virtualMcpId:_Q.string(),pluginId:_Q.string(),connectionId:_Q.string().nullable(),settings:_Q.record(_Q.string(),_Q.unknown()).nullable(),createdAt:_Q.string(),updatedAt:_Q.string()}),jl0=u({name:"VIRTUAL_MCP_PLUGIN_CONFIG_GET",description:"Get a plugin's current configuration for a specific virtual MCP.",annotations:{title:"Get Virtual MCP Plugin Config",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:_Q.object({virtualMcpId:_Q.string().describe("Virtual MCP ID"),pluginId:_Q.string().describe("Plugin ID")}),outputSchema:_Q.object({config:es8.nullable()}),handler:async($,Z)=>{r(Z);let X=t(Z);await Z.access.check();let{virtualMcpId:Q,pluginId:Y}=$,G=await Z.storage.connections.findById(Q);if(!G||G.organization_id!==X.id)return{config:null};if(G.connection_type!=="VIRTUAL")return{config:null};let J=await Z.storage.virtualMcpPluginConfigs.get(Q,Y);if(!J)return{config:null};return{config:{id:J.id,virtualMcpId:J.virtualMcpId,pluginId:J.pluginId,connectionId:J.connectionId,settings:J.settings,createdAt:J.createdAt instanceof Date?J.createdAt.toISOString():J.createdAt,updatedAt:J.updatedAt instanceof Date?J.updatedAt.toISOString():J.updatedAt}}}})});import{z as vZ}from"zod";var $e8,zl0;var zs1=D(()=>{M0();yx();s5();$e8=vZ.object({id:vZ.string(),virtualMcpId:vZ.string(),pluginId:vZ.string(),connectionId:vZ.string().nullable(),settings:vZ.record(vZ.string(),vZ.unknown()).nullable(),createdAt:vZ.string(),updatedAt:vZ.string()}),zl0=u({name:"VIRTUAL_MCP_PLUGIN_CONFIG_UPDATE",description:"Set or update a plugin's configuration for a specific virtual MCP.",annotations:{title:"Update Virtual MCP Plugin Config",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:vZ.object({virtualMcpId:vZ.string().describe("Virtual MCP ID"),pluginId:vZ.string().describe("Plugin ID"),connectionId:vZ.string().nullable().optional().describe("MCP connection to bind"),settings:vZ.record(vZ.string(),vZ.unknown()).nullable().optional().describe("Plugin-specific settings")}),outputSchema:vZ.object({config:$e8}),handler:async($,Z)=>{r(Z);let X=t(Z);await Z.access.check();let{virtualMcpId:Q,pluginId:Y,connectionId:G,settings:J}=$,K=o0(Z),W=await Z.storage.connections.findById(Q);if(!W)throw Error(`Connection not found: ${Q}`);if(W.organization_id!==X.id)throw Error(`Connection not found: ${Q}`);if(W.connection_type!=="VIRTUAL")throw Error(`Connection not found: ${Q}`);let F=G?await Z.storage.connections.findById(G):null;if(G&&F&&F.organization_id!==X.id)throw Error(`Connection not found: ${G}`);if(G&&W.organization_id&&!F&&dG()&&v90(G,W.organization_id)){if(!K)throw Error("User ID required to create dev-assets connection");let N=xx(W.organization_id,a5());await Z.storage.connections.create({...N,organization_id:W.organization_id,created_by:K})}else if(G&&!F)throw Error(`Connection not found: ${G}`);let H=await Z.storage.virtualMcpPluginConfigs.upsert(Q,Y,{connectionId:G,settings:J});return{config:{id:H.id,virtualMcpId:H.virtualMcpId,pluginId:H.pluginId,connectionId:H.connectionId,settings:H.settings,createdAt:H.createdAt instanceof Date?H.createdAt.toISOString():H.createdAt,updatedAt:H.updatedAt instanceof Date?H.updatedAt.toISOString():H.updatedAt}}}})});import{z as pX}from"zod";var Ze8,Pl0;var Ps1=D(()=>{M0();vO();Ze8=pX.object({connectionId:pX.string(),toolName:pX.string(),label:pX.string(),icon:pX.string().nullable().optional()}),Pl0=u({name:"VIRTUAL_MCP_PINNED_VIEWS_UPDATE",description:"Update the pinned sidebar views for a virtual MCP. Replaces all current pins.",annotations:{title:"Update Pinned Views",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:pX.object({virtualMcpId:pX.string().describe("Virtual MCP ID"),pinnedViews:pX.array(Ze8).describe("Pinned views to set for the virtual MCP sidebar"),layout:pX.object({defaultMainView:pX.object({type:pX.string(),id:pX.string().optional(),toolName:pX.string().optional()}).nullable().optional(),chatDefaultOpen:pX.boolean().nullable().optional()}).optional()}),outputSchema:pX.object({item:u7.nullable()}),handler:async($,Z)=>{r(Z);let X=t(Z);await Z.access.check();let{virtualMcpId:Q,pinnedViews:Y,layout:G}=$,J=o0(Z),K=await Z.storage.virtualMcps.findById(Q);if(!K)throw Error(`Virtual MCP not found: ${Q}`);if(K.organization_id!==X.id)throw Error(`Virtual MCP not found: ${Q}`);let W=K.metadata?.ui??{},F={...W,pinnedViews:Y.length>0?Y:null,layout:G??W.layout??null};return{item:await Z.storage.virtualMcps.update(Q,J??"system",{metadata:{...K.metadata,ui:F}})}}})});import{z as PH}from"zod";var Xe8,Qe8,Al0;var As1=D(()=>{M0();Xe8=PH.object({ids:PH.array(PH.string()).max(1000).describe("Virtual MCP ids to look up")}),Qe8=PH.object({items:PH.array(PH.object({id:PH.string(),last_used_at:PH.string().optional(),last_used_by:PH.string().optional()}))}),Al0=u({name:"VIRTUAL_MCP_LAST_USED_LIST",description:"Get last-used info (timestamp + user) for one or more virtual MCPs, derived from the most recent thread per agent.",annotations:{title:"List Virtual MCP Last Used",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:Xe8,outputSchema:Qe8,handler:async($,Z)=>{r(Z),t(Z),await Z.access.check();let X=await Z.storage.threads.findLastUsedByVirtualMcpIds($.ids);return{items:$.ids.map((Q)=>({id:Q,last_used_at:X.get(Q)?.last_used_at,last_used_by:X.get(Q)?.last_used_by}))}}})});var Ts1=D(()=>{Gs1();Js1();Ks1();Ns1();Es1();js1();zs1();Ps1();As1()});import{z as r7}from"zod";var Tl0;var Rs1=D(()=>{I6();M0();Tl0=u({name:"MONITORING_HEATMAP",description:"Get tool-call volume broken down by agent and tool name, for spotting heavily-used tools per agent.",annotations:{title:"Get Tool-Call Heatmap",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:r7.object({startDate:r7.string().datetime().optional().describe("Filter by start date (ISO 8601 datetime string)"),endDate:r7.string().datetime().optional().describe("Filter by end date (ISO 8601 datetime string)"),virtualMcpIds:r7.array(r7.string()).max(100).optional().describe("Filter by specific agent (Virtual MCP) IDs"),excludeConnectionIds:r7.array(r7.string()).max(100).optional().describe("Exclude tool calls from these connection IDs"),limit:r7.number().int().min(1).max(1000).optional().describe("Max number of (agent, tool) cells to return")}),outputSchema:r7.object({cells:r7.array(r7.object({virtualMcpId:r7.string().nullable(),toolName:r7.string(),calls:r7.number(),errors:r7.number(),outputSize:r7.number().describe("Sum of tool-output character length \u2014 a proxy for context weight, not LLM token count")}))}),handler:async($,Z)=>{let X=t(Z);return await Z.access.check(),await FQ(),Z.storage.monitoring.queryToolCallHeatmap({organizationId:X.id,startDate:$.startDate?new Date($.startDate):void 0,endDate:$.endDate?new Date($.endDate):void 0,filters:{virtualMcpIds:$.virtualMcpIds,excludeConnectionIds:$.excludeConnectionIds},limit:$.limit})}})});import{z as N5}from"zod";var Rl0;var Is1=D(()=>{I6();M0();Rl0=u({name:"MONITORING_LOG_GET",description:"Get a single monitoring log by ID with full input and output data.",annotations:{title:"Get Monitoring Log",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:N5.object({id:N5.string().describe("Log ID to fetch")}),outputSchema:N5.object({log:N5.object({id:N5.string().optional(),organizationId:N5.string(),connectionId:N5.string(),toolName:N5.string(),input:N5.record(N5.string(),N5.unknown()),output:N5.record(N5.string(),N5.unknown()),isError:N5.boolean(),errorMessage:N5.string().nullish(),durationMs:N5.number(),timestamp:N5.string(),userId:N5.string().nullish(),requestId:N5.string(),userAgent:N5.string().nullish(),virtualMcpId:N5.string().nullish(),properties:N5.record(N5.string(),N5.string()).nullish()}).nullable().describe("The monitoring log, or null if not found")}),handler:async($,Z)=>{await Z.access.check(),await FQ();let X=t(Z),Q=await Z.storage.monitoring.getById(X.id,$.id);if(!Q)return{log:null};return{log:{...Q,timestamp:Q.timestamp instanceof Date?Q.timestamp.toISOString():Q.timestamp}}}})});import{z as N8}from"zod";var Ge8,Il0;var qs1=D(()=>{I6();M0();Ge8=N8.object({id:N8.string().optional().describe("Unique log identifier"),organizationId:N8.string().describe("Organization ID"),connectionId:N8.string().describe("Connection ID"),toolName:N8.string().describe("Name of the tool that was called"),isError:N8.boolean().describe("Whether the call resulted in an error"),errorMessage:N8.string().nullish().describe("Error message if applicable"),durationMs:N8.number().describe("Call duration in milliseconds"),timestamp:N8.string().describe("ISO 8601 timestamp of the call"),userId:N8.string().nullish().describe("User who triggered the call"),requestId:N8.string().describe("Unique request identifier"),userAgent:N8.string().nullish().describe("Client identifier (x-studio-client header)"),virtualMcpId:N8.string().nullish().describe("Virtual MCP (Agent) ID if routed through an agent"),properties:N8.record(N8.string(),N8.string()).nullish().describe("Custom key-value metadata attached to the log")}),Il0=u({name:"MONITORING_LOGS_LIST",description:"List monitoring logs for tool calls with filtering and pagination.",annotations:{title:"List Monitoring Logs",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:N8.object({connectionId:N8.string().optional().describe("Filter by connection ID"),excludeConnectionIds:N8.array(N8.string()).optional().describe("Exclude logs from these connection IDs (e.g. system connections)"),virtualMcpId:N8.string().optional().describe("Filter by Virtual MCP (Agent) ID"),toolName:N8.string().optional().describe("Filter by tool name"),isError:N8.boolean().optional().describe("Filter by error status"),startDate:N8.string().datetime().optional().describe("Filter by start date (ISO 8601 datetime string)"),endDate:N8.string().datetime().optional().describe("Filter by end date (ISO 8601 datetime string)"),limit:N8.number().default(20).describe("Maximum number of results"),offset:N8.number().default(0).describe("Offset for pagination"),properties:N8.record(N8.string(),N8.string()).optional().describe("Filter by exact property key=value matches"),propertyKeys:N8.array(N8.string()).optional().describe("Filter by logs that have these property keys"),propertyPatterns:N8.record(N8.string(),N8.string()).optional().describe("Filter by property value patterns (SQL LIKE, use % as wildcard)"),propertyInValues:N8.record(N8.string(),N8.string()).optional().describe("Filter by exact match within comma-separated values (e.g., user_tags in 'Engineering')")}),outputSchema:N8.object({logs:N8.array(Ge8).describe("Array of monitoring logs"),total:N8.number().describe("Total number of logs matching filters"),offset:N8.number().describe("Current offset for pagination"),limit:N8.number().describe("Current limit for pagination")}),handler:async($,Z)=>{await Z.access.check(),await FQ();let X=t(Z),Y=$.properties||$.propertyKeys||$.propertyPatterns||$.propertyInValues?{properties:$.properties,propertyKeys:$.propertyKeys,propertyPatterns:$.propertyPatterns,propertyInValues:$.propertyInValues}:void 0,G={organizationId:X.id,connectionId:$.connectionId,excludeConnectionIds:$.excludeConnectionIds,virtualMcpId:$.virtualMcpId,toolName:$.toolName,isError:$.isError,startDate:$.startDate?new Date($.startDate):void 0,endDate:$.endDate?new Date($.endDate):void 0,limit:$.limit,offset:$.offset,propertyFilters:Y},J=await Z.storage.monitoring.query(G);return{logs:J.logs.map(({input:K,output:W,...F})=>({...F,timestamp:F.timestamp instanceof Date?F.timestamp.toISOString():F.timestamp})),total:J.total,offset:$.offset,limit:$.limit}}})});import{z as J$}from"zod";var ql0;var Ms1=D(()=>{I6();M0();ql0=u({name:"MONITORING_STATS",description:"Get aggregated statistics (counts, latency, error rates) for tool call monitoring.",annotations:{title:"Get Monitoring Stats",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:J$.object({startDate:J$.string().datetime().optional().describe("Filter by start date (ISO 8601 datetime string)"),endDate:J$.string().datetime().optional().describe("Filter by end date (ISO 8601 datetime string)"),interval:J$.string().regex(/^\d+[mhd]$/).optional().describe("Bucket interval for timeseries data (e.g. 1m, 5m, 2h, 1d). When provided, returns timeseries array."),connectionIds:J$.array(J$.string()).max(100).optional().describe("Filter by specific connection IDs (max 100)"),excludeConnectionIds:J$.array(J$.string()).max(100).optional().describe("Exclude specific connection IDs (max 100)"),toolNames:J$.array(J$.string()).max(100).optional().describe("Filter by specific tool names (max 100)"),status:J$.enum(["success","error"]).optional().describe("Filter metrics by execution status"),topN:J$.number().int().min(1).max(20).optional().describe("When provided with interval, also return top tools and their timeseries"),userIds:J$.array(J$.string()).max(100).optional().describe("Filter LLM usage by user IDs (only applied when llmUsage is true)"),llmUsage:J$.boolean().optional().describe("Aggregate LLM-call usage (tokens + USD cost) from raw log rows for the given connection. Returns token/cost totals and timeseries. Requires interval.")}),outputSchema:J$.object({totalCalls:J$.number().describe("Total number of tool calls"),errorRate:J$.number().optional().describe("Error rate as a decimal (0 to 1)"),avgDurationMs:J$.number().describe("Average call duration in milliseconds"),errorRatePercent:J$.string().optional().describe("Error rate as a percentage string"),totalErrors:J$.number().optional().describe("Total number of errors"),p50DurationMs:J$.number().optional().describe("50th percentile duration in milliseconds"),p95DurationMs:J$.number().optional().describe("95th percentile duration in milliseconds"),connectionBreakdown:J$.array(J$.object({connectionId:J$.string(),calls:J$.number(),errors:J$.number(),errorRate:J$.number(),avgDurationMs:J$.number()})).optional().describe("Per-connection metric breakdown"),totalInputTokens:J$.number().optional().describe("Total input tokens (LLM usage mode)"),totalOutputTokens:J$.number().optional().describe("Total output tokens (LLM usage mode)"),totalTokens:J$.number().optional().describe("Total tokens (LLM usage mode)"),totalCostUsd:J$.number().optional().describe("Total USD cost (LLM usage mode; only non-zero for providers that report cost)"),topTools:J$.array(J$.object({toolName:J$.string(),connectionId:J$.string().nullable(),calls:J$.number(),inputTokens:J$.number().optional(),outputTokens:J$.number().optional(),costUsd:J$.number().optional()})).optional().describe("Top tools ranked by calls"),topToolsTimeseries:J$.array(J$.object({timestamp:J$.string(),toolName:J$.string(),calls:J$.number(),errors:J$.number(),avg:J$.number(),p95:J$.number()})).optional().describe("Per-tool metric timeseries for the top tools"),timeseries:J$.array(J$.object({timestamp:J$.string(),calls:J$.number(),errors:J$.number(),errorRate:J$.number(),avg:J$.number(),p50:J$.number(),p95:J$.number(),inputTokens:J$.number().optional(),outputTokens:J$.number().optional(),totalTokens:J$.number().optional(),costUsd:J$.number().optional()})).optional().describe("Timeseries data points bucketed by interval")}),handler:async($,Z)=>{let X=t(Z);if(await Z.access.check(),await FQ(),$.interval&&$.llmUsage)return Z.storage.monitoring.queryLlmUsageStats({organizationId:X.id,interval:$.interval,connectionId:$.connectionIds?.[0]??"decopilot",startDate:$.startDate?new Date($.startDate):void 0,endDate:$.endDate?new Date($.endDate):void 0,userIds:$.userIds,topN:$.topN});if($.interval){let Y=await Z.storage.monitoring.queryMetricTimeseries({organizationId:X.id,interval:$.interval,startDate:$.startDate?new Date($.startDate):void 0,endDate:$.endDate?new Date($.endDate):void 0,filters:{connectionIds:$.connectionIds,excludeConnectionIds:$.excludeConnectionIds,toolNames:$.toolNames,status:$.status}});if(!$.topN)return Y;let G=await Z.storage.monitoring.queryMetricTopToolsTimeseries({organizationId:X.id,interval:$.interval,startDate:$.startDate?new Date($.startDate):void 0,endDate:$.endDate?new Date($.endDate):void 0,topN:$.topN,filters:{connectionIds:$.connectionIds,excludeConnectionIds:$.excludeConnectionIds,toolNames:$.toolNames,status:$.status}});return{...Y,topTools:G.topTools,topToolsTimeseries:G.timeseries}}let Q=await Z.storage.monitoring.getStats({organizationId:X.id,startDate:$.startDate?new Date($.startDate):void 0,endDate:$.endDate?new Date($.endDate):void 0});return{...Q,errorRatePercent:(Q.errorRate*100).toFixed(2)}}})});import{z as nX}from"zod";var Ml0;var ks1=D(()=>{I6();M0();Ml0=u({name:"MONITORING_THREAD_USAGE",description:"Aggregate LLM token usage and USD cost per thread for the given thread IDs.",annotations:{title:"Get Thread Usage",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:nX.object({threadIds:nX.array(nX.string()).min(1).max(500).describe("Thread IDs to aggregate usage for (max 500)"),connectionId:nX.string().optional().describe("LLM connection ID (defaults to 'decopilot')"),startDate:nX.string().datetime().optional().describe("Filter by start date (ISO 8601 datetime string)"),endDate:nX.string().datetime().optional().describe("Filter by end date (ISO 8601 datetime string)")}),outputSchema:nX.object({items:nX.array(nX.object({threadId:nX.string(),calls:nX.number(),inputTokens:nX.number(),outputTokens:nX.number(),totalTokens:nX.number(),costUsd:nX.number()}))}),handler:async($,Z)=>{let X=t(Z);return await Z.access.check(),await FQ(),{items:await Z.storage.monitoring.queryThreadUsage({organizationId:X.id,connectionId:$.connectionId??"decopilot",threadIds:$.threadIds,startDate:$.startDate?new Date($.startDate):void 0,endDate:$.endDate?new Date($.endDate):void 0})}}})});var Vs1=D(()=>{Rs1();Is1();qs1();Ms1();ks1()});function n90($){return typeof $==="string"&&Ke8.has($.trim().toLowerCase())}var Ke8;var kl0=D(()=>{Ke8=new Set([".well-known","_admin","api","auth","cli","commerce-onboarding","dbos-queue-depth","health","hosted-run-pending","login","mcp","metrics","oauth","oauth-proxy","onboarding","org","report","reset-password"])});import{z as gY}from"zod";var Vl0;var Ss1=D(()=>{M0();kl0();Vl0=u({name:"ORGANIZATION_CREATE",description:"Create a new organization. The caller becomes the owner automatically.",annotations:{title:"Create Organization",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:gY.object({slug:gY.string().min(1).max(50).regex(/^[a-z0-9-]+$/,"Slug must be lowercase alphanumeric with hyphens").refine(($)=>!n90($),"Slug is reserved by Studio"),name:gY.string().min(1).max(255),description:gY.string().optional()}),outputSchema:gY.object({id:gY.string(),name:gY.string(),slug:gY.string(),logo:gY.string().nullable().optional(),metadata:gY.any().optional(),createdAt:gY.string().datetime().describe("ISO 8601 timestamp"),members:gY.array(gY.any()).optional()}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=o0(Z);if(!X)throw Error("User ID required to create organization");let Q=await Z.boundAuth.organization.create({name:$.name,slug:$.slug,metadata:$.description?{description:$.description}:void 0,userId:X});if(!Q)throw Error("Failed to create organization");return{...Q,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt}}})});import{z as UW}from"zod";var Sl0;var Cs1=D(()=>{M0();Sl0=u({name:"ORGANIZATION_LIST",description:"List organizations the current user belongs to.",annotations:{title:"List Organizations",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},_meta:{ui:{visibility:"app"}},inputSchema:UW.object({}),outputSchema:UW.object({organizations:UW.array(UW.object({id:UW.string(),name:UW.string(),slug:UW.string(),logo:UW.string().nullable().optional(),metadata:UW.any().optional(),createdAt:UW.string().datetime().describe("ISO 8601 timestamp")}))}),handler:async($,Z)=>{if(r(Z),await Z.access.check(),!o0(Z))throw Error("User ID required to list organizations");return{organizations:(await Z.boundAuth.organization.list()).map((Q)=>({...Q,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt}))}}})});import{z as pG}from"zod";var Cl0;var _s1=D(()=>{M0();Cl0=u({name:"ORGANIZATION_GET",description:"Get an organization's details, members, and settings by slug or ID.",annotations:{title:"Get Organization",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:pG.object({}),outputSchema:pG.object({id:pG.string(),name:pG.string(),slug:pG.string(),logo:pG.string().nullable().optional(),metadata:pG.any().optional(),createdAt:pG.string().datetime().describe("ISO 8601 timestamp"),members:pG.array(pG.any()).optional(),invitations:pG.array(pG.any()).optional()}),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=await Z.boundAuth.organization.get(X);if(!Q)throw Error("No active organization found");let Y=new Date,G=Q.invitations?.filter((J)=>new Date(J.expiresAt)>Y);return{...Q,invitations:G,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt}}})});import{z as T3}from"zod";var _l0;var vs1=D(()=>{M0();_l0=u({name:"ORGANIZATION_UPDATE",description:"Update an organization's name or description.",annotations:{title:"Update Organization",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:T3.object({id:T3.string(),name:T3.string().min(1).max(255).optional(),description:T3.string().optional()}),outputSchema:T3.object({id:T3.string(),name:T3.string(),slug:T3.string(),logo:T3.string().nullable().optional(),metadata:T3.any().optional(),createdAt:T3.string().datetime().describe("ISO 8601 timestamp")}),handler:async($,Z)=>{if(r(Z),await Z.access.check(),$.id!==Z.organization?.id)throw Error("Organization ID does not match authenticated organization");let X={};if($.name)X.name=$.name;if($.description!==void 0)X.metadata={description:$.description};let Q=await Z.boundAuth.organization.update({organizationId:$.id,data:X});if(!Q)throw Error("Failed to update organization");return{...Q,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt}}})});import{z as Wp}from"zod";var vl0;var fs1=D(()=>{M0();vl0=u({name:"ORGANIZATION_DELETE",description:"Archive an organization (soft delete).",annotations:{title:"Delete Organization",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:Wp.object({id:Wp.string()}),outputSchema:Wp.object({success:Wp.boolean(),id:Wp.string()}),handler:async($,Z)=>{if(r(Z),await Z.access.check(),$.id!==Z.organization?.id)throw Error("Organization ID does not match authenticated organization");let X=await Z.boundAuth.organization.get($.id);return await Z.boundAuth.organization.update({organizationId:$.id,data:{metadata:{...X?.metadata,archived:!0,archivedAt:new Date().toISOString()}}}),{success:!0,id:$.id}}})});import{z as AH}from"zod";var fl0;var bs1=D(()=>{M0();t7();fl0=u({name:"ORGANIZATION_SETTINGS_GET",description:"Get organization-level settings including sidebar configuration, store registry settings, simple model mode, and default home agents.",annotations:{title:"Get Organization Settings",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:AH.object({}),outputSchema:AH.object({organizationId:AH.string(),sidebar_items:AH.array(ji).nullable().optional(),enabled_plugins:AH.array(AH.string()).nullable().optional(),registry_config:zi.nullable().optional(),simple_mode:Pi.nullable().optional(),default_home_agents:Ti.nullable().optional(),flags:Ii.nullable().optional(),main_agent_id:AH.string().nullable().optional(),sprint_config:Ri.nullable().optional(),createdAt:AH.string().datetime().optional().describe("ISO 8601 timestamp"),updatedAt:AH.string().datetime().optional().describe("ISO 8601 timestamp")}),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=await Z.storage.organizationSettings.get(X);if(!Q)return{organizationId:X};return{...Q,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt,updatedAt:Q.updatedAt instanceof Date?Q.updatedAt.toISOString():Q.updatedAt}}})});import{z as vQ}from"zod";var bl0;var xs1=D(()=>{M0();t7();bl0=u({name:"ORGANIZATION_SETTINGS_UPDATE",description:"Update organization-level settings such as sidebar configuration, store registry settings, simple model mode, and default home agents.",annotations:{title:"Update Organization Settings",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:vQ.object({organizationId:vQ.string(),sidebar_items:vQ.array(ji).optional(),enabled_plugins:vQ.array(vQ.string()).optional(),registry_config:zi.optional(),simple_mode:Pi.optional(),default_home_agents:Ti.optional(),flags:Ii.strict().optional().describe("Org boolean toggles. Shallow-merged into the stored flags: keys you pass win (explicit false persists), omitted keys keep their value."),main_agent_id:vQ.string().nullable().optional().describe("Virtual MCP id the org lands on instead of the Super Agent. Pass null to clear."),sprint_config:Ri.optional().describe("Task board sprint cadence. Replaced whole (not merged), so pass all three fields.")}),outputSchema:vQ.object({organizationId:vQ.string(),sidebar_items:vQ.array(ji).nullable().optional(),enabled_plugins:vQ.array(vQ.string()).nullable().optional(),registry_config:zi.nullable().optional(),simple_mode:Pi.nullable().optional(),default_home_agents:Ti.nullable().optional(),flags:Ii.nullable().optional(),main_agent_id:vQ.string().nullable().optional(),sprint_config:Ri.nullable().optional(),createdAt:vQ.string().datetime().describe("ISO 8601 timestamp"),updatedAt:vQ.string().datetime().describe("ISO 8601 timestamp")}),handler:async($,Z)=>{if(r(Z),await Z.access.check(),t(Z).id!==$.organizationId)throw Error("Cannot update settings for a different organization");let Q=await Z.storage.organizationSettings.upsert($.organizationId,{sidebar_items:$.sidebar_items,enabled_plugins:$.enabled_plugins,registry_config:$.registry_config,simple_mode:$.simple_mode,default_home_agents:$.default_home_agents,flags:$.flags,main_agent_id:$.main_agent_id,sprint_config:$.sprint_config});return{...Q,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt,updatedAt:Q.updatedAt instanceof Date?Q.updatedAt.toISOString():Q.updatedAt}}})});import{z as R3}from"zod";var ys1,xl0,yl0;var gs1=D(()=>{M0();t7();ys1=IO.extend({organizationId:R3.string(),archivedAt:R3.string().nullable().optional().describe("ISO 8601 timestamp"),createdAt:R3.string().describe("ISO 8601 timestamp"),updatedAt:R3.string().describe("ISO 8601 timestamp")}),xl0=u({name:"BRAND_CONTEXT_LIST",description:"List all brand contexts (company profiles) for the current organization.",annotations:{title:"List Brand Contexts",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:R3.object({includeArchived:R3.boolean().optional().describe("Include archived brands in the list")}),outputSchema:R3.object({items:R3.array(ys1)}),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)");return{items:(await Z.storage.brandContext.list(X,{includeArchived:$.includeArchived})).map((Y)=>({...Y,archivedAt:Y.archivedAt instanceof Date?Y.archivedAt.toISOString():Y.archivedAt,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():Y.createdAt,updatedAt:Y.updatedAt instanceof Date?Y.updatedAt.toISOString():Y.updatedAt}))}}}),yl0=u({name:"BRAND_CONTEXT_GET",description:"Get a specific brand context by ID.",annotations:{title:"Get Brand Context",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:R3.object({id:R3.string().describe("Brand context ID")}),outputSchema:ys1.extend({organizationId:R3.string()}),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=await Z.storage.brandContext.get($.id,X);if(!Q)throw Error("Brand context not found");return{...Q,archivedAt:Q.archivedAt instanceof Date?Q.archivedAt.toISOString():Q.archivedAt,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt,updatedAt:Q.updatedAt instanceof Date?Q.updatedAt.toISOString():Q.updatedAt}}})});import{z as XE}from"zod";var hs1,gl0,hl0,ul0;var us1=D(()=>{M0();t7();hs1=IO.extend({organizationId:XE.string(),createdAt:XE.string().describe("ISO 8601 timestamp"),updatedAt:XE.string().describe("ISO 8601 timestamp")}),gl0=u({name:"BRAND_CONTEXT_CREATE",description:"Create a new brand context (company profile) for the current organization.",annotations:{title:"Create Brand Context",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!1},inputSchema:IO.omit({id:!0}),outputSchema:hs1,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=await Z.storage.brandContext.create(X,{name:$.name,domain:$.domain,overview:$.overview,logo:$.logo??null,favicon:$.favicon??null,ogImage:$.ogImage??null,fonts:$.fonts??null,colors:$.colors??null,images:$.images??null,metadata:$.metadata??null});return{...Q,archivedAt:Q.archivedAt instanceof Date?Q.archivedAt.toISOString():Q.archivedAt,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt,updatedAt:Q.updatedAt instanceof Date?Q.updatedAt.toISOString():Q.updatedAt}}}),hl0=u({name:"BRAND_CONTEXT_UPDATE",description:"Update an existing brand context by ID.",annotations:{title:"Update Brand Context",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:IO.partial().required({id:!0}),outputSchema:hs1,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)");if(!await Z.storage.brandContext.get($.id,X))throw Error("Brand context not found");let{id:Y,...G}=$;if(G.isDefault===!0)await Z.storage.brandContext.setDefault(Y,X);let J=await Z.storage.brandContext.update(Y,X,{name:G.name,domain:G.domain,overview:G.overview,logo:G.logo!==void 0?G.logo??null:void 0,favicon:G.favicon!==void 0?G.favicon??null:void 0,ogImage:G.ogImage!==void 0?G.ogImage??null:void 0,fonts:G.fonts!==void 0?G.fonts??null:void 0,colors:G.colors!==void 0?G.colors??null:void 0,images:G.images!==void 0?G.images??null:void 0,metadata:G.metadata!==void 0?G.metadata??null:void 0,archivedAt:G.archivedAt!==void 0?G.archivedAt??null:void 0,isDefault:G.isDefault===!1?!1:void 0});return{...J,archivedAt:J.archivedAt instanceof Date?J.archivedAt.toISOString():J.archivedAt,createdAt:J.createdAt instanceof Date?J.createdAt.toISOString():J.createdAt,updatedAt:J.updatedAt instanceof Date?J.updatedAt.toISOString():J.updatedAt}}}),ul0=u({name:"BRAND_CONTEXT_DELETE",description:"Archive a brand context by ID (soft delete).",annotations:{title:"Archive Brand Context",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:XE.object({id:XE.string().describe("Brand context ID")}),outputSchema:XE.object({success:XE.boolean()}),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)");if(!await Z.storage.brandContext.get($.id,X))throw Error("Brand context not found");return await Z.storage.brandContext.update($.id,X,{archivedAt:new Date().toISOString(),isDefault:!1}),{success:!0}}})});async function t90($,Z,X){let Q=$.trim();if(!Q.startsWith("http"))Q=`https://${Q}`;let Y=await fetch("https://api.firecrawl.dev/v1/scrape",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${Z}`},body:JSON.stringify({url:Q,formats:["branding"]})});if(!Y.ok){let U=await Y.text().catch(()=>"");throw Error(`Firecrawl API error: ${Y.status} ${U.slice(0,200)}`)}let G=await Y.json();if(!G.success||!G.data?.branding)return null;let J=G.data.branding,K=G.data.metadata??{},W=He8(J,K);return{name:K.title?.split(/[|\u2013\u2014]|\s+-\s+/).map((U)=>U.trim()).filter(Boolean)?.slice().sort((U,O)=>U.length-O.length)[0]??K.ogSiteName??X??$,domain:$,overview:K.description??"",logo:W.logo,favicon:W.favicon,ogImage:W.ogImage,fonts:W.fonts,colors:W.colors,images:null,metadata:Object.keys(W.metadata).length>0?W.metadata:null}}function He8($,Z){let X=$.images??{},Q=$.colors??{},Y={};for(let[H,N]of Object.entries(Q))if(typeof N==="string"&&N&&We8.has(H))Y[H]=N;let G={},K=($.typography??{}).fontFamilies??{};for(let[H,N]of Object.entries(K))if(typeof N==="string"&&N){let U=Fe8[H.toLowerCase()];if(U&&!G[U])G[U]=N}let W=$.fonts;if(Array.isArray(W))for(let H of W){let N=H.family;if(typeof N==="string"&&N&&!G.body)G.body=N}let F={};for(let H of["typography","components","spacing","layout","animations","icons","tone","personality","colorScheme"])if($[H]!==void 0)F[H]=$[H];return{logo:X.logo??null,favicon:X.favicon??null,ogImage:X.ogImage??Z.ogImage??null,fonts:Object.keys(G).length>0?G:null,colors:Object.keys(Y).length>0?Y:null,metadata:F}}var We8,Fe8;var cl0=D(()=>{We8=new Set(["primary","secondary","accent","background","foreground"]),Fe8={heading:"heading",headings:"heading",head:"heading",title:"heading",body:"body",primary:"body",text:"body",code:"code",monospace:"code",mono:"code"}});import{z as o90}from"zod";var Ne8,ll0;var cs1=D(()=>{M0();cl0();t7();Ne8=IO.pick({id:!0,name:!0,domain:!0,overview:!0,logo:!0,favicon:!0,ogImage:!0,fonts:!0,colors:!0}).extend({success:o90.boolean()}),ll0=u({name:"BRAND_CONTEXT_EXTRACT",description:"Extract brand context (colors, fonts, logos) from a website URL using Firecrawl.",annotations:{title:"Extract Brand Context",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:o90.object({domain:o90.string().describe("Website domain to extract brand from"),brandId:o90.string().optional().describe("Existing brand context ID to update (creates new if omitted)")}),outputSchema:Ne8,modelSummary:($)=>$.success?`Brand saved (id=${$.id}, name=${$.name}, domain=${$.domain}). The UI rendered the logo, colors, fonts, and overview.`:"Brand extraction failed.",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=Z.firecrawlApiKey;if(!Q)throw Error("FIRECRAWL_API_KEY is not configured. Set the environment variable to enable brand extraction.");let Y=await t90($.domain,Q,$.domain);if(!Y)throw Error("Firecrawl did not return branding data for this URL");let G={name:Y.name,domain:Y.domain,overview:Y.overview,logo:Y.logo,favicon:Y.favicon,ogImage:Y.ogImage,fonts:Y.fonts,colors:Y.colors,images:Y.images,metadata:Y.metadata},J=$.brandId?await(async()=>{if(!await Z.storage.brandContext.get($.brandId,X))throw Error("Brand context not found");return Z.storage.brandContext.update($.brandId,X,G)})():await Z.storage.brandContext.create(X,G);return{id:J.id,name:J.name,domain:J.domain,overview:J.overview,logo:J.logo,favicon:J.favicon,ogImage:J.ogImage,fonts:J.fonts,colors:J.colors,success:!0}}})});function ls1($){let Z=$.metadata??{};return{id:$.id,name:$.name,domain:$.domain||void 0,colors:$.colors??void 0,fonts:$.fonts??void 0,assets:$.logo||$.favicon||$.ogImage?{logo:$.logo??void 0,favicon:$.favicon??void 0,ogImage:$.ogImage??void 0}:void 0,overview:$.overview||void 0,tagline:typeof Z.tagline==="string"?Z.tagline:void 0,tone:typeof Z.tone==="string"?Z.tone:void 0,metadata:(()=>{let X=Object.fromEntries(Object.entries(Z).filter(([Q])=>Q!=="tagline"&&Q!=="tone"));return Object.keys(X).length>0?X:void 0})()}}var dl0,ml0;var ds1=D(()=>{ic0();M0();dl0=u({name:"BRAND_GET",description:"Get a brand context by ID. Omit the ID to get the default brand for the organization.",annotations:{title:"Get Brand",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:q90,outputSchema:oi,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=$.id?await Z.storage.brandContext.get($.id,X):await Z.storage.brandContext.getDefault(X);if(!Q)throw Error($.id?"Brand not found":"No default brand configured");return ls1(Q)}}),ml0=u({name:"BRAND_LIST",description:"List all active brands for the current organization.",annotations:{title:"List Brands",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:M90,outputSchema:k90,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)");return{items:(await Z.storage.brandContext.list(X)).map(ls1)}}})});import{resolveTxt as Ue8}from"dns/promises";function il0($){return`${Oe8}.${$.toLowerCase()}`}function ms1(){return`deco-verify-${crypto.randomUUID().replace(/-/g,"")}`}async function is1($,Z,X=Ue8){if(!Z)return!1;try{return(await X(il0($))).some((Y)=>Y.join("").trim()===Z)}catch{return!1}}var Oe8="_deco-verify";var ps1=()=>{};import{z as q5}from"zod";function dO($){let Z=$.verificationStatus==="pending"&&Boolean($.verificationToken);return{id:$.id,domain:$.domain,joinMode:$.joinMode,verificationStatus:$.verificationStatus,verificationMethod:$.verificationMethod,verifiedAt:$.verifiedAt?new Date($.verifiedAt).toISOString():null,recordName:Z?il0($.domain):null,recordValue:Z?$.verificationToken:null}}function De8($){let Z=$.toLowerCase().trim();if(!Be8.test(Z))throw Error(`Invalid domain format: "${Z}". Must be a valid domain like "acme.com"`);if(I3.has(Z))throw Error(`Cannot claim generic email domain "${Z}". Only corporate domains are allowed.`);return Z}var Be8,pl0,r90,nl0,tl0,ol0,rl0,al0;var ns1=D(()=>{hY();ps1();M0();Be8=/^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)+$/,pl0=q5.enum(["off","auto","request"]),r90=q5.object({id:q5.string(),domain:q5.string(),joinMode:pl0,verificationStatus:q5.enum(["pending","verified"]),verificationMethod:q5.enum(["email","dns"]).nullable(),verifiedAt:q5.string().nullable(),recordName:q5.string().nullable(),recordValue:q5.string().nullable()});nl0=u({name:"ORGANIZATION_DOMAIN_LIST",description:"List the email domains claimed by an organization.",annotations:{title:"List Organization Domains",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:q5.object({}),outputSchema:q5.object({domains:q5.array(r90)}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=t(Z);return{domains:(await Z.storage.organizationDomains.listByOrganizationId(X.id)).map(dO)}}}),tl0=u({name:"ORGANIZATION_DOMAIN_ADD",description:"Claim an email domain for an organization. If the caller's verified email matches the domain it is trusted immediately; otherwise it requires DNS verification.",annotations:{title:"Add Organization Domain",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:q5.object({domain:q5.string().min(1).max(255).describe("Domain to claim, e.g. acme.com"),joinMode:pl0.optional().describe("Initial join mode (only applied when the domain is trusted immediately via email match).")}),outputSchema:r90,handler:async($,Z)=>{r(Z),await Z.access.check();let X=t(Z),Q=De8($.domain),G=Z.auth.user?.email?.split("@")[1]?.toLowerCase(),J=Boolean(Z.auth.user?.emailVerified)&&G===Q,K=await Z.storage.organizationDomains.getByOrgAndDomain(X.id,Q);if(K){if(K.verificationStatus!=="verified"&&J){let F=await Z.storage.organizationDomains.markVerified(K.id,"email");return dO(F)}return dO(K)}let W=J?await Z.storage.organizationDomains.add(X.id,Q,{joinMode:$.joinMode??"off",verificationStatus:"verified",verificationMethod:"email"}):await Z.storage.organizationDomains.add(X.id,Q,{joinMode:"off",verificationStatus:"pending",verificationToken:ms1()});return dO(W)}}),ol0=u({name:"ORGANIZATION_DOMAIN_UPDATE",description:"Set the join mode for a claimed domain. Discoverable modes (auto/request) require the domain to be verified.",annotations:{title:"Update Organization Domain",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:q5.object({id:q5.string(),joinMode:pl0}),outputSchema:r90,handler:async($,Z)=>{r(Z),await Z.access.check();let X=t(Z),Q=await Z.storage.organizationDomains.getById($.id);if(!Q||Q.organizationId!==X.id)throw Error("Domain not found");if($.joinMode!=="off"&&Q.verificationStatus!=="verified")throw Error("Verify the domain before enabling auto-join or requests.");let Y=await Z.storage.organizationDomains.updateJoinMode($.id,$.joinMode);return dO(Y)}}),rl0=u({name:"ORGANIZATION_DOMAIN_VERIFY",description:"Check the DNS TXT record for a pending domain and mark it verified if present.",annotations:{title:"Verify Organization Domain",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:q5.object({id:q5.string()}),outputSchema:q5.object({verified:q5.boolean(),domain:r90}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=t(Z),Q=await Z.storage.organizationDomains.getById($.id);if(!Q||Q.organizationId!==X.id)throw Error("Domain not found");if(Q.verificationStatus==="verified")return{verified:!0,domain:dO(Q)};if(!Q.verificationToken)throw Error("Domain has no pending DNS verification.");if(!await is1(Q.domain,Q.verificationToken))return{verified:!1,domain:dO(Q)};let G=await Z.storage.organizationDomains.markVerified($.id,"dns");return{verified:!0,domain:dO(G)}}}),al0=u({name:"ORGANIZATION_DOMAIN_REMOVE",description:"Remove a claimed domain from an organization.",annotations:{title:"Remove Organization Domain",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:q5.object({id:q5.string()}),outputSchema:q5.object({success:q5.boolean()}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=t(Z),Q=await Z.storage.organizationDomains.getById($.id);if(!Q||Q.organizationId!==X.id)throw Error("Domain not found");return await Z.storage.organizationDomains.removeById($.id),{success:!0}}})});function mO($){return($ instanceof Error?$.message.toLowerCase():"").includes("already a member")}import{z as j9}from"zod";var Le8,sl0,el0,$d0;var ts1=D(()=>{M0();C4();Le8=j9.object({id:j9.string(),userId:j9.string(),status:j9.enum(["pending","approved","denied"]),createdAt:j9.string(),user:j9.object({id:j9.string(),name:j9.string(),email:j9.string(),image:j9.string().nullable()}).nullable()}),sl0=u({name:"ORGANIZATION_JOIN_REQUEST_LIST",description:"List pending requests to join the organization.",annotations:{title:"List Join Requests",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:j9.object({}),outputSchema:j9.object({requests:j9.array(Le8)}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=t(Z);return{requests:(await Z.storage.organizationJoinRequests.listPendingWithUser(X.id)).map((Y)=>({id:Y.id,userId:Y.userId,status:Y.status,createdAt:new Date(Y.createdAt).toISOString(),user:Y.user}))}}}),el0=u({name:"ORGANIZATION_JOIN_REQUEST_APPROVE",description:"Approve a pending join request, adding the user as a member.",annotations:{title:"Approve Join Request",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:j9.object({requestId:j9.string()}),outputSchema:j9.object({success:j9.boolean()}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=t(Z),Q=await Z.storage.organizationJoinRequests.getById($.requestId);if(!Q||Q.organizationId!==X.id)throw Error("Join request not found");if(Q.status!=="pending")throw Error("Join request has already been decided");let Y=o0(Z);if(!await Z.storage.organizationJoinRequests.decide(Q.id,"approved",Y??Q.userId))return{success:!0};try{await Z.boundAuth.organization.addMember({organizationId:X.id,userId:Q.userId,role:["user"]})}catch(J){if(!mO(J))throw J}if(Y)x1.capture({distinctId:Y,event:"organization_join_request_approved",groups:{organization:X.id},properties:{organization_id:X.id,user_id:Q.userId}});return{success:!0}}}),$d0=u({name:"ORGANIZATION_JOIN_REQUEST_DENY",description:"Deny a pending join request.",annotations:{title:"Deny Join Request",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:j9.object({requestId:j9.string()}),outputSchema:j9.object({success:j9.boolean()}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=t(Z),Q=await Z.storage.organizationJoinRequests.getById($.requestId);if(!Q||Q.organizationId!==X.id)throw Error("Join request not found");if(Q.status!=="pending")throw Error("Join request has already been decided");let Y=o0(Z);if(await Z.storage.organizationJoinRequests.decide(Q.id,"denied",Y??Q.userId)&&Y)x1.capture({distinctId:Y,event:"organization_join_request_denied",groups:{organization:X.id},properties:{organization_id:X.id,user_id:Q.userId}});return{success:!0}}})});import{z as fQ}from"zod";var Zd0;var os1=D(()=>{C4();M0();VQ();Zd0=u({name:"ORGANIZATION_MEMBER_ADD",description:"Invite a member to the organization by email with an assigned role.",annotations:{title:"Add Organization Member",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:fQ.object({organizationId:fQ.string().optional(),userId:fQ.string(),role:fQ.array(fQ.string())}),outputSchema:fQ.object({id:fQ.string(),organizationId:fQ.string(),userId:fQ.string(),role:fQ.union([fQ.string(),fQ.array(fQ.string())]),createdAt:fQ.string().datetime().describe("ISO 8601 timestamp")}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=$.organizationId||Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");if(X!==Z.organization?.id)throw Error("Organization ID does not match authenticated organization");let Q=await Z.db.selectFrom("member").select(["role"]).where("userId","=",o0(Z)??"").where("organizationId","=",X).executeTakeFirst();if(!Z50(Q?.role,$.role))throw Error(`Insufficient privileges to assign role "${$.role.join(",")}"`);let Y=await Z.boundAuth.organization.addMember({organizationId:X,userId:$.userId,role:$.role});if(!Y)throw Error("Failed to add member");let G=o0(Z);if(G)x1.capture({distinctId:G,event:"organization_member_added",groups:{organization:X},properties:{organization_id:X,added_user_id:$.userId,role:$.role}});return{...Y,role:Y.role,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():Y.createdAt}}})});import{z as dx}from"zod";var Xd0;var rs1=D(()=>{C4();M0();Xd0=u({name:"ORGANIZATION_MEMBER_REMOVE",description:"Remove a member from the organization. Revokes all their access immediately.",annotations:{title:"Remove Organization Member",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:dx.object({organizationId:dx.string().optional(),memberIdOrEmail:dx.string()}),outputSchema:dx.object({success:dx.boolean(),memberIdOrEmail:dx.string()}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=$.organizationId||Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");if(X!==Z.organization?.id)throw Error("Organization ID does not match authenticated organization");let Q=await Z.boundAuth.organization.removeMember({organizationId:X,memberIdOrEmail:$.memberIdOrEmail});Z.invalidateMemberRole?.(Q.member.userId,X);let Y=o0(Z);if(Y)x1.capture({distinctId:Y,event:"organization_member_removed",groups:{organization:X},properties:{organization_id:X,member_id_or_email:$.memberIdOrEmail}});return{success:!0,memberIdOrEmail:$.memberIdOrEmail}}})});import{z as a7}from"zod";var Qd0;var as1=D(()=>{M0();Qd0=u({name:"ORGANIZATION_MEMBER_LIST",description:"List all members in the organization with their roles.",annotations:{title:"List Organization Members",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:a7.object({limit:a7.number().int().min(1).max(1000).optional(),offset:a7.number().int().min(0).optional()}),outputSchema:a7.object({members:a7.array(a7.object({id:a7.string(),organizationId:a7.string(),userId:a7.string(),role:a7.string(),createdAt:a7.string().datetime().describe("ISO 8601 timestamp"),user:a7.object({id:a7.string(),name:a7.string(),email:a7.string(),image:a7.string().optional()}).optional()}))}),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)");return{members:((await Z.boundAuth.organization.listMembers({organizationId:X,limit:$.limit,offset:$.offset}))?.members??[]).map((G)=>({...G,createdAt:G.createdAt instanceof Date?G.createdAt.toISOString():G.createdAt}))}}})});import{z as fZ}from"zod";var Yd0;var ss1=D(()=>{C4();M0();VQ();Yd0=u({name:"ORGANIZATION_MEMBER_UPDATE_ROLE",description:"Change a member's role (e.g., admin, member) within the organization.",annotations:{title:"Update Member Role",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:fZ.object({organizationId:fZ.string().optional(),memberId:fZ.string(),role:fZ.array(fZ.string())}),outputSchema:fZ.object({id:fZ.string(),organizationId:fZ.string(),userId:fZ.string(),role:fZ.union([fZ.string(),fZ.array(fZ.string())]),createdAt:fZ.string().datetime().describe("ISO 8601 timestamp"),user:fZ.object({email:fZ.string(),name:fZ.string(),image:fZ.string().optional()})}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=$.organizationId||Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");let Q=await Z.db.selectFrom("member").select(["role"]).where("userId","=",o0(Z)??"").where("organizationId","=",X).executeTakeFirst();if(!Z50(Q?.role,$.role))throw Error(`Insufficient privileges to assign role "${$.role.join(",")}"`);let Y=await Z.boundAuth.organization.updateMemberRole({organizationId:X,memberId:$.memberId,role:$.role});if(!Y)throw Error("Failed to update member role");Z.invalidateMemberRole?.(Y.userId,X);let G=o0(Z);if(G)x1.capture({distinctId:G,event:"organization_member_role_updated",groups:{organization:X},properties:{organization_id:X,member_id:$.memberId,target_user_id:Y.userId,new_role:Array.isArray($.role)?$.role.join(","):$.role}});return{...Y,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():Y.createdAt}}})});async function es1(){if(Fp&&Date.now()-Fp.fetchedAt<600000)return Fp.rate;try{let Z=await(await fetch("https://economia.awesomeapi.com.br/json/last/USD-BRL",{signal:AbortSignal.timeout(5000)})).json(),X=parseFloat(Z.USDBRL?.bid??"");if(Number.isNaN(X)||X<=0)throw Error("Invalid rate");return Fp={rate:X,fetchedAt:Date.now()},X}catch{return Fp?.rate??5.5}}function $e1($,Z,X){if(Z==="brl")return Math.round($/X);return $}var Fp=null;function Gd0($,Z="",X=new URLSearchParams){for(let[Q,Y]of Object.entries($)){if(Y===void 0||Y===null)continue;let G=Z?`${Z}[${Q}]`:Q;if(Array.isArray(Y))Y.forEach((J,K)=>{if(typeof J==="object"&&J!==null)Gd0(J,`${G}[${K}]`,X);else X.append(`${G}[${K}]`,String(J))});else if(typeof Y==="object")Gd0(Y,G,X);else X.append(G,String(Y))}return X}async function Hp($,Z){let X=b0().stripeSecretKey;if(!X)throw new uY(503,"billing is not configured");let Q=Z?.params?Gd0(Z.params).toString():void 0,Y=await fetch(`${we8}${$}`,{method:Z?.method??(Q?"POST":"GET"),headers:{Authorization:`Bearer ${X}`,...Q&&{"Content-Type":"application/x-www-form-urlencoded"}},body:Q,signal:AbortSignal.timeout(Ee8)}),G=await Y.json().catch(()=>({}));if(!Y.ok){let J=G.error?.message??`HTTP ${Y.status}`;throw new uY(Y.status,J)}return G}function Ze1($){return{billing_address_collection:"required",tax_id_collection:{enabled:!0},...$&&{customer_update:{address:"auto",name:"auto"}}}}async function Xe1($){let Z=b0().stripeOrgPriceId;if(!Z)throw new uY(503,"billing is not configured");let X=await Hp("/checkout/sessions",{params:{mode:"subscription",...Ze1(null),line_items:[{price:Z,quantity:1}],success_url:$.successUrl,cancel_url:$.cancelUrl,metadata:{orgId:$.organizationId},subscription_data:{metadata:{orgId:$.organizationId}}}});if(!X.url)throw new uY(500,"checkout session lacks url");return{url:X.url}}function je8($,Z){return Math.round($*(1+Z/100))}async function Qe1($){let Z=je8($.amountCents,$.feePercent),X=$e1($.amountCents,$.currency,await es1()),Q=b0().stripeTopupProductId,Y={kind:"topup",orgId:$.organizationId,creditCents:X},G=$.currency==="brl"?`Studio AI credits (R$ ${($.amountCents/100).toFixed(2)})`:`Studio AI credits ($${($.amountCents/100).toFixed(2)})`,J=await Hp("/checkout/sessions",{params:{mode:"payment",...$.customerId&&{customer:$.customerId},...Ze1($.customerId),line_items:[{quantity:1,price_data:{currency:$.currency,unit_amount:Z,...Q?{product:Q}:{product_data:{name:G}}}}],success_url:$.successUrl,cancel_url:$.cancelUrl,metadata:Y,payment_intent_data:{metadata:Y}}});if(!J.url)throw new uY(500,"checkout session lacks url");return{url:J.url}}async function a90($){let Z=await Hp("/billing_portal/sessions",{params:{customer:$.customerId,return_url:$.returnUrl}});if(!Z.url)throw new uY(500,"portal session lacks url");return{url:Z.url}}async function s90($){return Hp(`/subscriptions/${encodeURIComponent($)}`)}async function Ye1($){await Hp(`/subscriptions/${encodeURIComponent($)}`,{method:"DELETE"})}var we8="https://api.stripe.com/v1",uY,Ee8=15000;var QE=D(()=>{q$();uY=class uY extends Error{status;constructor($,Z){super(`Stripe API ${$}: ${Z}`);this.status=$;this.name="StripeApiError"}}});import{z as Jd0}from"zod";var Kd0;var Ge1=D(()=>{QE();s5();M0();C4();Kd0=u({name:"ORGANIZATION_BILLING_CHECKOUT_START",description:"Start the organization's subscription: creates a Stripe Checkout session and returns its URL.",annotations:{title:"Start Billing Checkout",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!0},inputSchema:Jd0.object({}),outputSchema:Jd0.object({url:Jd0.string()}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=Z.organization?.id,Q=Z.organization?.slug;if(!X||!Q)throw Error("Organization context required");let Y=await Z.storage.organizationBilling.getBilling(X);if(Y?.status==="active")throw Error("This organization already has an active subscription.");if(Y?.stripeSubscriptionId)throw Error("This organization still has a subscription on file \u2014 settle or cancel it before starting a new checkout.");let G=`${f9()}/${encodeURIComponent(Q)}/members`,{url:J}=await Xe1({organizationId:X,successUrl:`${G}?checkout=success`,cancelUrl:`${G}?checkout=canceled`});return fY({event:"subscription_checkout_started",organizationId:X,...Z.auth?.user?.id?{userId:Z.auth.user.id}:{}}),{url:J}}})});import{z as Wd0}from"zod";var Fd0;var Je1=D(()=>{QE();s5();M0();Fd0=u({name:"ORGANIZATION_BILLING_PORTAL",description:"Open the organization's Stripe billing portal (manage card, invoices, cancellation). Returns the portal URL.",annotations:{title:"Open Billing Portal",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!0},inputSchema:Wd0.object({}),outputSchema:Wd0.object({url:Wd0.string()}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=t(Z);if(!X.slug)throw Error("Organization context required");let Q=await Z.storage.organizationBilling.getBilling(X.id);if(!Q?.stripeCustomerId)throw Error("This organization has no billing account yet \u2014 subscribe first.");try{return await a90({customerId:Q.stripeCustomerId,returnUrl:`${f9()}/${encodeURIComponent(X.slug)}/members`})}catch(Y){if(Y instanceof uY)throw Error(Y.message);throw Y}}})});function e90($){return Hd0[$%Hd0.length]??ze8}function bQ($){return $.createdBy==="system"}function TH($){return $Z0.filter((Z)=>qx($,Pe8[Z]))}function ix($,Z){return $?.startsWith(`${mx[Z]}:`)??!1}function RH($){let Z=0;for(let X of $){if(X.action!=="status_changed")continue;if(X.data?.to!=="in_review")continue;Z=Math.max(Z,new Date(X.occurredAt).getTime())}return Z}function Nd0($,Z){let X=RH($),Q=new Map;for(let Y of $){if(Y.action!=="review_approved"&&Y.action!=="review_changes_requested")continue;if(new Date(Y.occurredAt).getTime()<X)continue;let G=Y.data??{};if(G.reviewer!=="qa"&&G.reviewer!=="code_review")continue;if(Y.action==="review_approved"){if(Z?.verifiedOnly&&G.verified!==!0)continue;Q.set(G.reviewer,"approved")}else Q.set(G.reviewer,"changes_requested")}return Q}function iO($,Z,X){if(Z.length===0)return!1;let Q=Nd0($,X);return Z.every((Y)=>Q.get(Y)==="approved")}function We1($,Z){return iO($,Z)&&!iO($,Z,{verifiedOnly:!0})}function Fe1($){let Z=null;for(let X of $){if(X.action!=="review_approved"&&X.action!=="review_changes_requested")continue;let Q=new Date(X.occurredAt).getTime();if(Z&&Q<Z.at)continue;let Y=X.data?.notes;Z={at:Q,notes:X.action==="review_changes_requested"&&typeof Y==="string"?Y:null}}return Z?.notes??null}function Ae8($){let Z=0;for(let X of $){if(X.action!=="assignee_changed")continue;if(X.data?.to!==U8)continue;Z=Math.max(Z,new Date(X.occurredAt).getTime())}return Z}function He1($,Z=Ud0){let X=Ae8($),Q=new Set,Y=0;for(let G of[...$].sort((J,K)=>J.occurredAt.localeCompare(K.occurredAt))){let J=new Date(G.occurredAt).getTime();if(G.action==="status_changed"){if(G.data?.to==="in_review")Y=J;continue}if(G.action==="review_changes_requested"&&J>=X)Q.add(Y)}return Q.size+1>=Z}var U8="super-agent",Hd0,ze8,Np='Your checkout is SHALLOW (`git clone --depth 1`), so it has no merge base and `git diff main...HEAD` (three dots) fails with "fatal: main...HEAD: no merge base". To see a branch diff, either use the two-dot form against the fetched remote ref (`git fetch origin <base> && git diff origin/<base> HEAD`), or deepen first with `git fetch --deepen=100`. Same for `git log main..HEAD` and anything else that needs shared history.',Ke1,$Z0,mx,Pe8,Ud0=5,Ne1="task-board.item.updated",Ue1="task-board.item.deleted";var X9=D(()=>{t7();Hd0=["#9ca3af","#ef4444","#f97316","#f59e0b","#22c55e","#3b82f6","#a855f7","#ec4899"],ze8=Hd0[0];Ke1="Read the diff with `gh pr diff <number>`. It comes from the API, so it needs no fetch, no merge base, and is unaffected by the shallow checkout. "+"Read it ONCE \u2014 `gh pr diff <number> --name-only` first if you need to size "+"it, then pull the hunks you need per FILE. Do NOT re-run the diff sliced by directory: each slice re-reads bytes you already have into every remaining turn's context, and it is the largest avoidable cost in a review.",$Z0=["qa","code_review"],mx={qa:"QA Agent",code_review:"Code Reviewer"},Pe8={qa:"qa_agent_enabled",code_review:"code_reviewer_enabled"}});function Od0($){return $==="trial"?"trial":"subscription"}function Up($,Z,X,Q={}){fY({event:Z,organizationId:X.organizationId,...$.auth?.user?.id?{userId:$.auth.user.id}:{},properties:{task_id:X.id,...Q}})}function Bd0($){return $?.status==="active"||$?.status==="past_due"}function ZZ0($,Z){if(Bd0($))return{periodKey:$?.currentPeriodEnd?`sub:${$.currentPeriodEnd.toISOString()}`:"sub:pending",limit:$?.monthlyTaskExecutions??Z.monthlyTaskExecutions,exhaustedReason:"monthly_exhausted"};return{periodKey:"trial",limit:$?.freeTaskExecutions??Z.freeTaskExecutions,exhaustedReason:"trial_exhausted"}}function Op(){let $=b0();return{enforced:$.taskQuotaEnforced,freeTaskExecutions:$.freeTaskExecutions,monthlyTaskExecutions:$.monthlyTaskExecutions,maxRunsPerTask:$.maxRunsPerTask}}function pO(){return{...Op(),maxRunsPerTask:Number.POSITIVE_INFINITY}}async function px($,Z,X=Op()){if(!X.enforced||!bQ(Z))return;let Q=await $.storage.organizationBilling.taskClaim(Z.id);if(Q&&Q.runCount>=X.maxRunsPerTask)throw Up($,"task_quota_blocked",Z,{phase:"precheck",reason:"runs_exhausted"}),new s7("runs_exhausted");if(Q&&Q.state!=="released")return;let Y=await $.storage.organizationBilling.getBilling(Z.organizationId),G=ZZ0(Y,X);if(await $.storage.organizationBilling.countTaskClaims(Z.organizationId,G.periodKey)>=G.limit)throw Up($,"task_quota_blocked",Z,{phase:"precheck",reason:G.exhaustedReason,billing_mode:Od0(G.periodKey),limit:G.limit}),new s7(G.exhaustedReason)}async function Oe1($,Z,X=Op()){if(!X.enforced||!bQ(Z))return"skipped";let Q=await $.storage.organizationBilling.getBilling(Z.organizationId),Y=ZZ0(Q,X),G=await $.storage.organizationBilling.claimTaskUnderLimit(Z.organizationId,Z.id,Y.periodKey,Y.limit,X.maxRunsPerTask);if(G==="exhausted")throw Up($,"task_quota_blocked",Z,{phase:"claim",reason:Y.exhaustedReason,billing_mode:Od0(Y.periodKey),limit:Y.limit}),new s7(Y.exhaustedReason);if(G==="runs_exhausted")throw Up($,"task_quota_blocked",Z,{phase:"claim",reason:"runs_exhausted"}),new s7("runs_exhausted");if(G==="claimed")Up($,"task_quota_claimed",Z,{billing_mode:Od0(Y.periodKey),period_key:Y.periodKey,limit:Y.limit});return G}async function Be1($,Z,X,Q){if(Q==="skipped")return;await $.rollbackTaskClaim(Z,X,{releaseSlot:Q==="claimed"}).catch((Y)=>console.error("[task-quota] rollback failed (stays charged)",Y))}async function De1($,Z){let X=await $.storage.organizationBilling.taskClaim(Z);return!!X&&X.state!=="released"}async function Le1($,Z,X){if(await $.releaseTaskClaim(Z,X).catch((Y)=>{return console.error("[task-quota] refund failed (stays charged)",Y),!1}))fY({event:"task_quota_refunded",organizationId:Z,properties:{task_id:X}})}var Te8="[SUBSCRIPTION_REQUIRED]",Re8,s7;var nG=D(()=>{X9();C4();q$();Re8={trial_exhausted:"this organization used its free task executions \u2014 subscribe to keep running tasks",monthly_exhausted:"this organization used its monthly task executions \u2014 more become available next billing cycle",runs_exhausted:"this task reached its execution limit \u2014 create a new task to keep going"};s7=class s7 extends Error{reason;constructor($){super(`${Te8} ${Re8[$]}`);this.reason=$;this.name="TaskQuotaError"}}});import{z as IH}from"zod";var Dd0;var we1=D(()=>{M0();nG();Dd0=u({name:"ORGANIZATION_TASK_QUOTA_GET",description:"Get the organization's auto-task quota: how many runs are used in the current period, the limit, and the subscription's billing status.",annotations:{title:"Get Task Quota",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:IH.object({}),outputSchema:IH.object({enforced:IH.boolean(),billingStatus:IH.string(),subscribed:IH.boolean(),hasBillingAccount:IH.boolean(),used:IH.number(),limit:IH.number(),currentPeriodEnd:IH.string().datetime().nullable()}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=t(Z),Q=Op(),Y=await Z.storage.organizationBilling.getBilling(X.id),G=ZZ0(Y,Q),J=await Z.storage.organizationBilling.countTaskClaims(X.id,G.periodKey);return{enforced:Q.enforced,billingStatus:Y?.status??"none",subscribed:Bd0(Y),hasBillingAccount:!!Y?.stripeCustomerId,used:J,limit:G.limit,currentPeriodEnd:Y?.currentPeriodEnd?.toISOString()??null}}})});var Ee1=D(()=>{Ss1();Cs1();_s1();vs1();fs1();bs1();xs1();gs1();us1();cs1();ds1();ns1();ts1();os1();rs1();as1();ss1();Ge1();Je1();we1()});function OW($){if($==null)return"unknown error";if(typeof $==="string")return $;if($ instanceof Error)return $.message;return JSON.stringify($)}function XZ0($){if($===null||typeof $==="string"||typeof $==="number"||typeof $==="boolean")return!0;if(Array.isArray($))return $.every(XZ0);if(typeof $==="object")return Object.entries($).every(([Z,X])=>typeof Z==="string"&&(X===void 0||XZ0(X)));return!1}function Ld0($){return Array.isArray($)&&$.every(XZ0)}function Bp($){return $!=null&&typeof $==="object"&&Object.entries($).every(([Z,X])=>typeof Z==="string"&&(X===void 0||XZ0(X)))}var ne1="vercel.ai.error",qe8,je1,ze1,J1,te1="AI_APICallError",oe1,Me8,Pe1,Ae1,Q4,re1="AI_EmptyResponseBodyError",ae1,ke8,Te1,Re1,QZ0,se1="AI_InvalidArgumentError",ee1,Ve8,Ie1,qe1,nO,$0$="AI_InvalidPromptError",Z0$,Se8,Me1,ke1,tG,X0$="AI_InvalidResponseDataError",Q0$,Ce8,Ve1,Se1,nx,Y0$="AI_JSONParseError",G0$,_e8,Ce1,_e1,qH,J0$="AI_LoadAPIKeyError",K0$,ve8,ve1,fe1,YE,W0$="AI_LoadSettingError",F0$,fe8,be1,xe1,H0$,N0$="AI_NoContentGeneratedError",U0$,be8,ye1,ge1,O0$,B0$="AI_NoSuchModelError",D0$,xe8,he1,ue1,u5,L0$="AI_TooManyEmbeddingValuesForCallError",w0$,ye8,ce1,le1,tx,E0$="AI_TypeValidationError",j0$,ge8,de1,me1,U5,z0$="AI_UnsupportedFunctionalityError",P0$,he8,ie1,pe1,v4;var a1=D(()=>{qe8=Symbol.for(ne1),J1=class $ extends(ze1=Error,je1=qe8,ze1){constructor({name:Z,message:X,cause:Q}){super(X);this[je1]=!0,this.name=Z,this.cause=Q}static isInstance(Z){return $.hasMarker(Z,ne1)}static hasMarker(Z,X){let Q=Symbol.for(X);return Z!=null&&typeof Z==="object"&&Q in Z&&typeof Z[Q]==="boolean"&&Z[Q]===!0}},oe1=`vercel.ai.error.${te1}`,Me8=Symbol.for(oe1),Q4=class extends(Ae1=J1,Pe1=Me8,Ae1){constructor({message:$,url:Z,requestBodyValues:X,statusCode:Q,responseHeaders:Y,responseBody:G,cause:J,isRetryable:K=Q!=null&&(Q===408||Q===409||Q===429||Q>=500),data:W}){super({name:te1,message:$,cause:J});this[Pe1]=!0,this.url=Z,this.requestBodyValues=X,this.statusCode=Q,this.responseHeaders=Y,this.responseBody=G,this.isRetryable=K,this.data=W}static isInstance($){return J1.hasMarker($,oe1)}},ae1=`vercel.ai.error.${re1}`,ke8=Symbol.for(ae1),QZ0=class extends(Re1=J1,Te1=ke8,Re1){constructor({message:$="Empty response body"}={}){super({name:re1,message:$});this[Te1]=!0}static isInstance($){return J1.hasMarker($,ae1)}};ee1=`vercel.ai.error.${se1}`,Ve8=Symbol.for(ee1),nO=class extends(qe1=J1,Ie1=Ve8,qe1){constructor({message:$,cause:Z,argument:X}){super({name:se1,message:$,cause:Z});this[Ie1]=!0,this.argument=X}static isInstance($){return J1.hasMarker($,ee1)}},Z0$=`vercel.ai.error.${$0$}`,Se8=Symbol.for(Z0$),tG=class extends(ke1=J1,Me1=Se8,ke1){constructor({prompt:$,message:Z,cause:X}){super({name:$0$,message:`Invalid prompt: ${Z}`,cause:X});this[Me1]=!0,this.prompt=$}static isInstance($){return J1.hasMarker($,Z0$)}},Q0$=`vercel.ai.error.${X0$}`,Ce8=Symbol.for(Q0$),nx=class extends(Se1=J1,Ve1=Ce8,Se1){constructor({data:$,message:Z=`Invalid response data: ${JSON.stringify($)}.`}){super({name:X0$,message:Z});this[Ve1]=!0,this.data=$}static isInstance($){return J1.hasMarker($,Q0$)}},G0$=`vercel.ai.error.${Y0$}`,_e8=Symbol.for(G0$),qH=class extends(_e1=J1,Ce1=_e8,_e1){constructor({text:$,cause:Z}){super({name:Y0$,message:`JSON parsing failed: Text: ${$}.
892
892
  Error message: ${OW(Z)}`,cause:Z});this[Ce1]=!0,this.text=$}static isInstance($){return J1.hasMarker($,G0$)}},K0$=`vercel.ai.error.${J0$}`,ve8=Symbol.for(K0$),YE=class extends(fe1=J1,ve1=ve8,fe1){constructor({message:$}){super({name:J0$,message:$});this[ve1]=!0}static isInstance($){return J1.hasMarker($,K0$)}},F0$=`vercel.ai.error.${W0$}`,fe8=Symbol.for(F0$),H0$=class extends(xe1=J1,be1=fe8,xe1){constructor({message:$}){super({name:W0$,message:$});this[be1]=!0}static isInstance($){return J1.hasMarker($,F0$)}},U0$=`vercel.ai.error.${N0$}`,be8=Symbol.for(U0$),O0$=class extends(ge1=J1,ye1=be8,ge1){constructor({message:$="No content generated."}={}){super({name:N0$,message:$});this[ye1]=!0}static isInstance($){return J1.hasMarker($,U0$)}},D0$=`vercel.ai.error.${B0$}`,xe8=Symbol.for(D0$),u5=class extends(ue1=J1,he1=xe8,ue1){constructor({errorName:$=B0$,modelId:Z,modelType:X,message:Q=`No such ${X}: ${Z}`}){super({name:$,message:Q});this[he1]=!0,this.modelId=Z,this.modelType=X}static isInstance($){return J1.hasMarker($,D0$)}},w0$=`vercel.ai.error.${L0$}`,ye8=Symbol.for(w0$),tx=class extends(le1=J1,ce1=ye8,le1){constructor($){super({name:L0$,message:`Too many values for a single embedding call. The ${$.provider} model "${$.modelId}" can only embed up to ${$.maxEmbeddingsPerCall} values per call, but ${$.values.length} values were provided.`});this[ce1]=!0,this.provider=$.provider,this.modelId=$.modelId,this.maxEmbeddingsPerCall=$.maxEmbeddingsPerCall,this.values=$.values}static isInstance($){return J1.hasMarker($,w0$)}},j0$=`vercel.ai.error.${E0$}`,ge8=Symbol.for(j0$),U5=class $ extends(me1=J1,de1=ge8,me1){constructor({value:Z,cause:X,context:Q}){let Y="Type validation failed";if(Q==null?void 0:Q.field)Y+=` for ${Q.field}`;if((Q==null?void 0:Q.entityName)||(Q==null?void 0:Q.entityId)){Y+=" (";let G=[];if(Q.entityName)G.push(Q.entityName);if(Q.entityId)G.push(`id: "${Q.entityId}"`);Y+=G.join(", "),Y+=")"}super({name:E0$,message:`${Y}: Value: ${JSON.stringify(Z)}.
893
893
  Error message: ${OW(X)}`,cause:X});this[de1]=!0,this.value=Z,this.context=Q}static isInstance(Z){return J1.hasMarker(Z,j0$)}static wrap({value:Z,cause:X,context:Q}){var Y,G,J;if($.isInstance(X)&&X.value===Z&&((Y=X.context)==null?void 0:Y.field)===(Q==null?void 0:Q.field)&&((G=X.context)==null?void 0:G.entityName)===(Q==null?void 0:Q.entityName)&&((J=X.context)==null?void 0:J.entityId)===(Q==null?void 0:Q.entityId))return X;return new $({value:Z,cause:X,context:Q})}},P0$=`vercel.ai.error.${z0$}`,he8=Symbol.for(P0$),v4=class extends(pe1=J1,ie1=he8,pe1){constructor({functionality:$,message:Z=`'${$}' functionality not supported.`}){super({name:z0$,message:Z});this[ie1]=!0,this.functionality=$}static isInstance($){return J1.hasMarker($,P0$)}}});import*as KZ0 from"zod/v4";import{ZodFirstPartyTypeKind as O4}from"zod/v3";import{ZodFirstPartyTypeKind as Q04}from"zod/v3";import{ZodFirstPartyTypeKind as YZ0}from"zod/v3";function o$(...$){return $.reduce((Z,X)=>({...Z,...X!=null?X:{}}),{})}function GZ0({tools:$=[],providerToolNames:Z,resolveProviderToolName:X}){var Q;let Y={},G={};for(let J of $)if(J.type==="provider"){let K=(Q=X==null?void 0:X(J))!=null?Q:(J.id in Z)?Z[J.id]:void 0;if(K==null)continue;Y[J.name]=K,G[K]=J.name}return{toProviderToolName:(J)=>{var K;return(K=Y[J])!=null?K:J},toCustomToolName:(J)=>{var K;return(K=G[J])!=null?K:J}}}async function yQ($,Z){if($==null)return Promise.resolve();let X=Z==null?void 0:Z.abortSignal;return new Promise((Q,Y)=>{if(X==null?void 0:X.aborted){Y(A0$());return}let G=setTimeout(()=>{J(),Q()},$),J=()=>{clearTimeout(G),X==null||X.removeEventListener("abort",K)},K=()=>{J(),Y(A0$())};X==null||X.addEventListener("abort",K)})}function A0$(){return new DOMException("Delay was aborted","AbortError")}function ox($){return Object.fromEntries([...$.headers])}function z9($){let Z=$.replace(/-/g,"+").replace(/_/g,"/"),X=ce8(Z);return Uint8Array.from(X,(Q)=>Q.codePointAt(0))}function hQ($){let Z="";for(let X=0;X<$.length;X++)Z+=String.fromCodePoint($[X]);return ue8(Z)}function KZ($){return $ instanceof Uint8Array?hQ($):$}function k0$($,Z={}){let{useArrayBrackets:X=!0}=Z,Q=new FormData;for(let[Y,G]of Object.entries($)){if(G==null)continue;if(Array.isArray(G)){if(G.length===1){Q.append(Y,G[0]);continue}let J=X?`${Y}[]`:Y;for(let K of G)Q.append(J,K);continue}Q.append(Y,G)}return Q}async function Dp($){var Z;try{await((Z=$.body)==null?void 0:Z.cancel())}catch(X){}}function de8($=globalThis){return $.window!=null}function me8($){let Z;try{Z=new URL($)}catch(Q){throw new JZ({url:$,message:`Invalid URL: ${$}`})}if(Z.protocol==="data:")return;if(Z.protocol!=="http:"&&Z.protocol!=="https:")throw new JZ({url:$,message:`URL scheme must be http, https, or data, got ${Z.protocol}`});let X=Z.hostname.toLowerCase().replace(/\.+$/,"");if(!X)throw new JZ({url:$,message:"URL must have a hostname"});if(X==="localhost"||X.endsWith(".local")||X.endsWith(".localhost"))throw new JZ({url:$,message:`URL with hostname ${X} is not allowed`});if(X.startsWith("[")&&X.endsWith("]")){let Q=X.slice(1,-1);if(pe8(Q))throw new JZ({url:$,message:`URL with IPv6 address ${X} is not allowed`});return}if(C0$(X)){if(_0$(X))throw new JZ({url:$,message:`URL with IP address ${X} is not allowed`});return}}function C0$($){let Z=$.split(".");if(Z.length!==4)return!1;return Z.every((X)=>{let Q=Number(X);return Number.isInteger(Q)&&Q>=0&&Q<=255&&String(Q)===X})}function _0$($){let Z=$.split(".").map(Number),[X,Q,Y]=Z;if(X===0)return!0;if(X===10)return!0;if(X===100&&Q>=64&&Q<=127)return!0;if(X===127)return!0;if(X===169&&Q===254)return!0;if(X===172&&Q>=16&&Q<=31)return!0;if(X===192&&Q===0&&Y===0)return!0;if(X===192&&Q===168)return!0;if(X===198&&(Q===18||Q===19))return!0;if(X>=240)return!0;return!1}function ie8($){let Z=$.toLowerCase(),X=Z.indexOf("%");if(X!==-1)Z=Z.slice(0,X);let Q=Z.split("::");if(Q.length>2)return null;let Y=(J)=>{if(J==="")return[];let K=[],W=J.split(":");for(let F=0;F<W.length;F++){let H=W[F];if(H.includes(".")){if(F!==W.length-1||!C0$(H))return null;let[N,U,O,B]=H.split(".").map(Number);K.push(N<<8|U,O<<8|B);continue}if(!/^[0-9a-f]{1,4}$/.test(H))return null;K.push(parseInt(H,16))}return K},G=Y(Q[0]);if(G===null)return null;if(Q.length===2){let J=Y(Q[1]);if(J===null)return null;let K=8-G.length-J.length;if(K<0)return null;return[...G,...Array(K).fill(0),...J]}return G.length===8?G:null}function pe8($){let Z=ie8($);if(Z===null)return!0;let X=(Y)=>Z.slice(0,Y).every((G)=>G===0);if(X(7)&&(Z[7]===0||Z[7]===1))return!0;if((Z[0]&65024)===64512)return!0;if((Z[0]&65472)===65152)return!0;if((Z[0]&65472)===65216)return!0;if((Z[0]&65280)===65280)return!0;if(X(6)||X(5)&&Z[5]===65535||X(4)&&Z[4]===65535&&Z[5]===0||Z[0]===100&&Z[1]===65435&&Z[2]===0&&Z[3]===0&&Z[4]===0&&Z[5]===0||Z[0]===100&&Z[1]===65435&&Z[2]===1){let Y=Z[6]>>8&255,G=Z[6]&255,J=Z[7]>>8&255,K=Z[7]&255;return _0$(`${Y}.${G}.${J}.${K}`)}return!1}async function Pd0({url:$,headers:Z,abortSignal:X,maxRedirects:Q=ne8}){let Y={signal:X};if(Z!==void 0)Y.headers=Z;let G=$;for(let J=0;J<=Q;J++){me8(G);let K=await fetch(G,{...Y,redirect:"manual"});if(K.type==="opaqueredirect"){if(!de8())throw new JZ({url:$,message:`Redirect from ${G} could not be validated and was blocked`});return await fetch(G,{...Y,redirect:"follow"})}let W=K.headers.get("location");if(K.status>=300&&K.status<400&&W){await Dp(K),G=new URL(W,G).toString();continue}return K}throw new JZ({url:$,message:`Too many redirects (max ${Q})`})}async function Ad0({response:$,url:Z,maxBytes:X=JZ0}){let Q=$.headers.get("content-length");if(Q!=null){let H=parseInt(Q,10);if(!isNaN(H)&&H>X)throw await Dp($),new JZ({url:Z,message:`Download of ${Z} exceeded maximum size of ${X} bytes (Content-Length: ${H}).`})}let Y=$.body;if(Y==null)return new Uint8Array(0);let G=Y.getReader(),J=[],K=0;try{while(!0){let{done:H,value:N}=await G.read();if(H)break;if(K+=N.length,K>X)throw new JZ({url:Z,message:`Download of ${Z} exceeded maximum size of ${X} bytes.`});J.push(N)}}finally{try{await G.cancel()}finally{G.releaseLock()}}let W=new Uint8Array(K),F=0;for(let H of J)W.set(H,F),F+=H.length;return W}async function Td0($,Z){var X,Q;try{let Y=await Pd0({url:$,abortSignal:Z==null?void 0:Z.abortSignal});if(!Y.ok)throw await Dp(Y),new JZ({url:$,statusCode:Y.status,statusText:Y.statusText});let G=await Ad0({response:Y,url:$,maxBytes:(X=Z==null?void 0:Z.maxBytes)!=null?X:JZ0}),J=(Q=Y.headers.get("content-type"))!=null?Q:void 0;return new Blob([G],J?{type:J}:void 0)}catch(Y){if(JZ.isInstance(Y))throw Y;throw new JZ({url:$,cause:Y})}}function rx($){if($==null)return"unknown error";if(typeof $==="string")return $;if($ instanceof Error)return $.message;return JSON.stringify($)}function xQ($){return($ instanceof Error||$ instanceof DOMException)&&($.name==="AbortError"||$.name==="ResponseAborted"||$.name==="TimeoutError")}function re8($){if(!($ instanceof Error))return!1;let Z=$.code;if(typeof Z==="string"&&oe8.includes(Z))return!0;return!1}function v0$({error:$,url:Z,requestBodyValues:X}){if(xQ($))return $;if($ instanceof TypeError&&te8.includes($.message.toLowerCase())){let Q=$.cause;if(Q!=null)return new Q4({message:`Cannot connect to API: ${Q.message}`,cause:Q,url:Z,requestBodyValues:X,isRetryable:!0})}if(re8($))return new Q4({message:`Cannot connect to API: ${$.message}`,cause:$,url:Z,requestBodyValues:X,isRetryable:!0});return $}function tO($=globalThis){var Z,X,Q;if($.window)return"runtime/browser";if((Z=$.navigator)==null?void 0:Z.userAgent)return`runtime/${$.navigator.userAgent.toLowerCase()}`;if((Q=(X=$.process)==null?void 0:X.versions)==null?void 0:Q.node)return`runtime/node.js/${$.process.version.substring(0)}`;if($.EdgeRuntime)return"runtime/vercel-edge";return"runtime/unknown"}function oO($){if($==null)return{};let Z={};if($ instanceof Headers)$.forEach((X,Q)=>{Z[Q.toLowerCase()]=X});else{if(!Array.isArray($))$=Object.entries($);for(let[X,Q]of $)if(Q!=null)Z[X.toLowerCase()]=Q}return Z}function t4($,...Z){let X=new Headers(oO($)),Q=X.get("user-agent")||"";return X.set("user-agent",[Q,...Z].filter(Boolean).join(" ")),Object.fromEntries(X.entries())}function JE($){return $!=null}function b0$($,Z){try{return new URL($).origin===new URL(Z).origin}catch(X){return!1}}function x0$({mediaType:$,url:Z,supportedUrls:X}){return Z=Z.toLowerCase(),$=$.toLowerCase(),Object.entries(X).map(([Q,Y])=>{let G=Q.toLowerCase();return G==="*"||G==="*/*"?{mediaTypePrefix:"",regexes:Y}:{mediaTypePrefix:G.replace(/\*/,""),regexes:Y}}).filter(({mediaTypePrefix:Q})=>$.startsWith(Q)).flatMap(({regexes:Q})=>Q).some((Q)=>Q.test(Z))}function ax({apiKey:$,environmentVariableName:Z,apiKeyParameterName:X="apiKey",description:Q}){if(typeof $==="string")return $;if($!=null)throw new YE({message:`${Q} API key must be a string.`});if(typeof process>"u")throw new YE({message:`${Q} API key is missing. Pass it using the '${X}' parameter. Environment variables are not supported in this environment.`});if($=process.env[Z],$==null)throw new YE({message:`${Q} API key is missing. Pass it using the '${X}' parameter or the ${Z} environment variable.`});if(typeof $!=="string")throw new YE({message:`${Q} API key must be a string. The value of the ${Z} environment variable is not a string.`});return $}function BW({settingValue:$,environmentVariableName:Z}){if(typeof $==="string")return $;if($!=null||typeof process>"u")return;if($=process.env[Z],$==null||typeof $!=="string")return;return $}function y0$($){var Z;let[X,Q=""]=$.toLowerCase().split("/");return(Z={mpeg:"mp3","x-wav":"wav",opus:"ogg",mp4:"m4a","x-m4a":"m4a"}[Q])!=null?Z:Q}function I0$($){let Z=JSON.parse($);if(Z===null||typeof Z!=="object")return Z;if(se8.test($)===!1&&ee8.test($)===!1)return Z;return $04(Z)}function $04($){let Z=[$];while(Z.length){let X=Z;Z=[];for(let Q of X){if(Object.prototype.hasOwnProperty.call(Q,"__proto__"))throw SyntaxError("Object contains forbidden prototype property");if(Object.prototype.hasOwnProperty.call(Q,"constructor")&&Q.constructor!==null&&typeof Q.constructor==="object"&&Object.prototype.hasOwnProperty.call(Q.constructor,"prototype"))throw SyntaxError("Object contains forbidden prototype property");for(let Y in Q){let G=Q[Y];if(G&&typeof G==="object")Z.push(G)}}}return $}function Rd0($){let{stackTraceLimit:Z}=Error;try{Error.stackTraceLimit=0}catch(X){return I0$($)}try{return I0$($)}finally{Error.stackTraceLimit=Z}}function Id0($){if($.type==="object"||Array.isArray($.type)&&$.type.includes("object")){$.additionalProperties=!1;let{properties:X}=$;if(X!=null)for(let Q of Object.keys(X))X[Q]=GE(X[Q])}if($.items!=null)$.items=Array.isArray($.items)?$.items.map(GE):GE($.items);if($.anyOf!=null)$.anyOf=$.anyOf.map(GE);if($.allOf!=null)$.allOf=$.allOf.map(GE);if($.oneOf!=null)$.oneOf=$.oneOf.map(GE);let{definitions:Z}=$;if(Z!=null)for(let X of Object.keys(Z))Z[X]=GE(Z[X]);return $}function GE($){if(typeof $==="boolean")return $;return Id0($)}function cY(){return{}}function Y04($,Z){var X,Q,Y;let G={type:"array"};if(((X=$.type)==null?void 0:X._def)&&((Y=(Q=$.type)==null?void 0:Q._def)==null?void 0:Y.typeName)!==Q04.ZodAny)G.items=j6($.type._def,{...Z,currentPath:[...Z.currentPath,"items"]});if($.minLength)G.minItems=$.minLength.value;if($.maxLength)G.maxItems=$.maxLength.value;if($.exactLength)G.minItems=$.exactLength.value,G.maxItems=$.exactLength.value;return G}function G04($){let Z={type:"integer",format:"int64"};if(!$.checks)return Z;for(let X of $.checks)switch(X.kind){case"min":if(X.inclusive)Z.minimum=X.value;else Z.exclusiveMinimum=X.value;break;case"max":if(X.inclusive)Z.maximum=X.value;else Z.exclusiveMaximum=X.value;break;case"multipleOf":Z.multipleOf=X.value;break}return Z}function J04(){return{type:"boolean"}}function g0$($,Z){return j6($.type._def,Z)}function h0$($,Z,X){let Q=X!=null?X:Z.dateStrategy;if(Array.isArray(Q))return{anyOf:Q.map((Y,G)=>h0$($,Z,Y))};switch(Q){case"string":case"format:date-time":return{type:"string",format:"date-time"};case"format:date":return{type:"string",format:"date"};case"integer":return W04($)}}function F04($,Z){return{...j6($.innerType._def,Z),default:$.defaultValue()}}function H04($,Z){return Z.effectStrategy==="input"?j6($.schema._def,Z):cY()}function N04($){return{type:"string",enum:Array.from($.values)}}function O04($,Z){let X=[j6($.left._def,{...Z,currentPath:[...Z.currentPath,"allOf","0"]}),j6($.right._def,{...Z,currentPath:[...Z.currentPath,"allOf","1"]})].filter((Y)=>!!Y),Q=[];return X.forEach((Y)=>{if(U04(Y))Q.push(...Y.allOf);else{let G=Y;if("additionalProperties"in Y&&Y.additionalProperties===!1){let{additionalProperties:J,...K}=Y;G=K}Q.push(G)}}),Q.length?{allOf:Q}:void 0}function B04($){let Z=typeof $.value;if(Z!=="bigint"&&Z!=="number"&&Z!=="boolean"&&Z!=="string")return{type:Array.isArray($.value)?"array":"object"};return{type:Z==="bigint"?"integer":Z,const:$.value}}function u0$($,Z){let X={type:"string"};if($.checks)for(let Q of $.checks)switch(Q.kind){case"min":X.minLength=typeof X.minLength==="number"?Math.max(X.minLength,Q.value):Q.value;break;case"max":X.maxLength=typeof X.maxLength==="number"?Math.min(X.maxLength,Q.value):Q.value;break;case"email":switch(Z.emailStrategy){case"format:email":M3(X,"email",Q.message,Z);break;case"format:idn-email":M3(X,"idn-email",Q.message,Z);break;case"pattern:zod":tX(X,q3.email,Q.message,Z);break}break;case"url":M3(X,"uri",Q.message,Z);break;case"uuid":M3(X,"uuid",Q.message,Z);break;case"regex":tX(X,Q.regex,Q.message,Z);break;case"cuid":tX(X,q3.cuid,Q.message,Z);break;case"cuid2":tX(X,q3.cuid2,Q.message,Z);break;case"startsWith":tX(X,RegExp(`^${Ed0(Q.value,Z)}`),Q.message,Z);break;case"endsWith":tX(X,RegExp(`${Ed0(Q.value,Z)}$`),Q.message,Z);break;case"datetime":M3(X,"date-time",Q.message,Z);break;case"date":M3(X,"date",Q.message,Z);break;case"time":M3(X,"time",Q.message,Z);break;case"duration":M3(X,"duration",Q.message,Z);break;case"length":X.minLength=typeof X.minLength==="number"?Math.max(X.minLength,Q.value):Q.value,X.maxLength=typeof X.maxLength==="number"?Math.min(X.maxLength,Q.value):Q.value;break;case"includes":{tX(X,RegExp(Ed0(Q.value,Z)),Q.message,Z);break}case"ip":{if(Q.version!=="v6")M3(X,"ipv4",Q.message,Z);if(Q.version!=="v4")M3(X,"ipv6",Q.message,Z);break}case"base64url":tX(X,q3.base64url,Q.message,Z);break;case"jwt":tX(X,q3.jwt,Q.message,Z);break;case"cidr":{if(Q.version!=="v6")tX(X,q3.ipv4Cidr,Q.message,Z);if(Q.version!=="v4")tX(X,q3.ipv6Cidr,Q.message,Z);break}case"emoji":tX(X,q3.emoji(),Q.message,Z);break;case"ulid":{tX(X,q3.ulid,Q.message,Z);break}case"base64":{switch(Z.base64Strategy){case"format:binary":{M3(X,"binary",Q.message,Z);break}case"contentEncoding:base64":{X.contentEncoding="base64";break}case"pattern:zod":{tX(X,q3.base64,Q.message,Z);break}}break}case"nanoid":tX(X,q3.nanoid,Q.message,Z);case"toLowerCase":case"toUpperCase":case"trim":break;default:}return X}function Ed0($,Z){return Z.patternStrategy==="escape"?L04($):$}function L04($){let Z="";for(let X=0;X<$.length;X++){if(!D04.has($[X]))Z+="\\";Z+=$[X]}return Z}function M3($,Z,X,Q){var Y;if($.format||((Y=$.anyOf)==null?void 0:Y.some((G)=>G.format))){if(!$.anyOf)$.anyOf=[];if($.format)$.anyOf.push({format:$.format}),delete $.format;$.anyOf.push({format:Z,...X&&Q.errorMessages&&{errorMessage:{format:X}}})}else $.format=Z}function tX($,Z,X,Q){var Y;if($.pattern||((Y=$.allOf)==null?void 0:Y.some((G)=>G.pattern))){if(!$.allOf)$.allOf=[];if($.pattern)$.allOf.push({pattern:$.pattern}),delete $.pattern;$.allOf.push({pattern:M0$(Z,Q),...X&&Q.errorMessages&&{errorMessage:{pattern:X}}})}else $.pattern=M0$(Z,Q)}function M0$($,Z){var X;if(!Z.applyRegexFlags||!$.flags)return $.source;let Q={i:$.flags.includes("i"),m:$.flags.includes("m"),s:$.flags.includes("s")},Y=Q.i?$.source.toLowerCase():$.source,G="",J=!1,K=!1,W=!1;for(let F=0;F<Y.length;F++){if(J){G+=Y[F],J=!1;continue}if(Q.i){if(K){if(Y[F].match(/[a-z]/)){if(W)G+=Y[F],G+=`${Y[F-2]}-${Y[F]}`.toUpperCase(),W=!1;else if(Y[F+1]==="-"&&((X=Y[F+2])==null?void 0:X.match(/[a-z]/)))G+=Y[F],W=!0;else G+=`${Y[F]}${Y[F].toUpperCase()}`;continue}}else if(Y[F].match(/[a-z]/)){G+=`[${Y[F]}${Y[F].toUpperCase()}]`;continue}}if(Q.m){if(Y[F]==="^"){G+=`(^|(?<=[\r
894
894
  ]))`;continue}else if(Y[F]==="$"){G+=`($|(?=[\r
@@ -1390,7 +1390,7 @@ ${Z}`:Z))}}async listAttachments($){return(await this.request(`/rest/api/3/issue
1390
1390
  ${G}`.trim().slice(0,ZW$)}function pN4($){let Z=$.fields.priority?.name?.toLowerCase();return Z&&lN4[Z]||"medium"}async function eK$($,Z,X){if(!Z.autoDelegate)return X;if(X.status!=="todo"||X.assigneeId)return X;let Q=Z.organizationId,Y=await $.storage.taskBoard.claimUnassignedForSuperAgent(X.id,Q,Z.createdBy,iH);if(!Y)return X;await $.storage.taskBoard.recordActivity({taskBoardItemId:X.id,action:"assignee_changed",actorId:null,data:{from:null,to:U8}});try{await _B($,Y)}catch(G){return console.warn(`[jira] auto-delegate of ${X.id} rejected, un-delegating:`,G instanceof Error?G.message:G),await $.storage.taskBoard.update(X.id,Q,{assigneeId:null,assignedBy:null},iH)}return Y}async function $W$($,Z,X,Q,Y,G,J){let K=Z.organizationId,W=Q.fields.comment;if(W&&W.total===0)return;let F=W&&W.comments.length>=W.total?W.comments:await X.listComments(Q.id),H=await $.storage.jiraIntegrations.knownJiraCommentIds(K,F.map((O)=>O.id)),N=F.filter((O)=>!H.has(O.id)&&O.author?.accountId!==G);if(N.length===0)return;let U=await J.resolve(N.flatMap((O)=>hn(O.body)));for(let O of N){let B=qD0(O.body,U).slice(0,ZW$),L=await $.storage.taskBoard.createComment({taskBoardItemId:Y,organizationId:K,authorId:iH,body:`**${O.author?.displayName??"Jira"} \xB7 via Jira:**
1391
1391
 
1392
1392
  ${B}`});if(!L)continue;try{await $.storage.jiraIntegrations.createCommentLink({commentId:L.id,organizationId:K,jiraCommentId:O.id})}catch(w){if(w.code==="23505"){await $.storage.taskBoard.deleteComment(L.id,K,iH);continue}throw w}}}async function nN4($,Z){let{organizationId:X,boardId:Q}=Z;if(!Q)throw Error("No Jira board selected");let Y=OK$(Z.statusMapping);if(Y.size===0)throw Error("No status mapping configured");let G=Z.lastSyncedAt===null,J=new JJ(Z.siteUrl,Z.email,Z.apiToken),{accountId:K}=await J.myself(),W=new Mt0(J),F=await J.listBacklogIssueIds(Q),H=dN4(Z),N={created:0,updated:0,unchanged:0,skipped:0},U,O=0,B=0,L=new Date;while(B<sK$){let w=await J.listBoardIssues({boardId:Q,jql:H,startAt:O});if(w.issues.length===0)break;O+=w.issues.length;let E=await $.storage.jiraIntegrations.getLinksByIssueIds(X,w.issues.map((j)=>j.id));await W.resolve(w.issues.flatMap((j)=>[...hn(j.fields.description),...(j.fields.comment?.comments??[]).flatMap((z)=>hn(z.body))]));for(let j of w.issues){if(B>=sK$)break;B++;let z=new Date(j.fields.updated);if(Number.isNaN(z.getTime()))throw Error(`Unparseable updated on ${j.key}`);let A=Y.get(j.fields.status.name);if(!A||!mN4(j)||F.has(j.id)){N.skipped++,U=z;continue}let P=E.get(j.id);if(P&&new Date(P.jiraUpdatedAt)>=z){N.unchanged++,U=z;continue}let I=j.fields.status.name,k={title:j.fields.summary,description:await iN4(Z.siteUrl,j,W),priority:pN4(j)};if(P){let M=P.jiraStatus!==I,C=await $.storage.taskBoard.getById(P.itemId,X),m=await $.storage.taskBoard.update(P.itemId,X,{...k,...M?{status:A}:{}},iH);if(await $.storage.jiraIntegrations.touchLink(P.itemId,{jiraStatus:I}),C&&M&&C.status!==A)await $.storage.taskBoard.recordActivity({taskBoardItemId:P.itemId,action:"status_changed",actorId:null,data:{from:C.status,to:A}});if(M&&!G)m=await eK$($,Z,m);await $W$($,Z,J,j,P.itemId,K,W),await $.storage.jiraIntegrations.touchLink(P.itemId,{jiraUpdatedAt:z}),h$(X,m),N.updated++}else{let M=await $.storage.taskBoard.create({organizationId:X,...k,status:A,by:iH});try{await $.storage.jiraIntegrations.createLink({itemId:M.id,organizationId:X,jiraIssueId:j.id,jiraIssueKey:j.key,jiraUpdatedAt:new Date(0),jiraStatus:I})}catch(C){if(C.code==="23505"){await $.storage.taskBoard.delete(M.id,X,iH),N.unchanged++,U=z;continue}throw C}if(!G)M=await eK$($,Z,M);await $W$($,Z,J,j,M.id,K,W),await $.storage.jiraIntegrations.touchLink(M.id,{jiraUpdatedAt:z}),h$(X,M),N.created++}U=z}if(O>=w.total)break}if(U===void 0&&B===0)return{counts:N,watermark:L};return{counts:N,watermark:U}}var iH="jira",sK$=500,cN4=5,ZW$=1e4,lN4;var kD0=D(()=>{X9();SW();L5();MD0();lN4={highest:"urgent",high:"high",medium:"medium",low:"low",lowest:"low"}});var XW$={};J4(XW$,{setJiraSyncRuntime:()=>Ct0,registerJiraSyncWorkflow:()=>vt0,maybeEnqueueJiraStatusPush:()=>FU4,enqueueJiraCommentPush:()=>_t0});import{DBOS as QQ,SchedulerMode as tN4}from"@dbos-inc/dbos-sdk";function Ct0($){VD0=$}function un(){if(!VD0)throw Error("[jira] sync runtime not initialized \u2014 setJiraSyncRuntime() must run before the workflow fires");return VD0}function pH(){let{db:$,encryptionKey:Z}=un();return new NC($,new kY(Z))}function rN4(){return new XQ(un().db)}async function aN4($){try{let{db:Z}=un(),X=await pH().getById($);if(!X)return{id:$,error:"integration no longer exists"};if(!X.enabled)return{id:$};let Q=await d3(Z,X.organizationId);if(!Q)return{id:$,error:"organization no longer exists"};let Y=await ly(Q,X);return"error"in Y?{id:$,error:Y.error}:{id:$}}catch(Z){return{id:$,error:Z instanceof Error?Z.message:String(Z)}}}async function sN4($,Z){let X=await QQ.runStep(()=>pH().listEnabledIds(),{name:"loadJiraIntegrations"});for(let Q of X){let Y=await QQ.runStep(()=>aN4(Q),{name:`syncJira:${Q}`});if(Y.error)console.warn(`[jira] sync ${Y.id} failed: ${Y.error}`)}}async function $U4($){let Z=pH();if(!(await Z.getByOrg($.organizationId))?.enabled)return null;let Q=await Z.getLinkByItemId($.taskBoardItemId,$.organizationId);if(!Q)return null;if(await Z.hasCommentLink($.commentId))return null;return{jiraIssueId:Q.jiraIssueId}}async function ZU4($){return(await un().db.selectFrom("organization").select("slug").where("id","=",$).executeTakeFirst())?.slug??null}async function XU4($,Z,X){let Q=await pH().getByOrg($);if(!Q?.enabled)return null;let G=(await d3(un().db,$))?.orgFs;if(!G)return null;let J=new JJ(Q.siteUrl,Q.email,Q.apiToken);return rK$(X,{read:(K)=>G.read(K.volume,K.path).catch((W)=>{if(W instanceof RG)return null;throw W}),listAttachments:()=>J.listAttachments(Z),upload:(K)=>J.addAttachment(Z,K),mediaIdFor:(K)=>J.resolveMediaId(K)})}async function QU4($,Z,X){let Q=pH(),Y=await Q.getByOrg($.organizationId);if(!Y?.enabled)return null;let G=await Q.getLinkByItemId($.taskBoardItemId,$.organizationId);if(!G)return null;if(await Q.hasCommentLink($.commentId))return null;return(await new JJ(Y.siteUrl,Y.email,Y.apiToken).addComment(G.jiraIssueId,Z,{header:`${$.authorLabel} \xB7 via Studio:`,media:new Map(X)})).id}async function YU4($,Z){try{await pH().createCommentLink({commentId:$.commentId,organizationId:$.organizationId,jiraCommentId:Z})}catch(X){if(X.code!=="23505")throw X}}async function GU4($){let Z=$.body.slice(0,eN4),X=await QQ.runStep(()=>$U4($),{name:"resolveCommentTarget",retriesAllowed:!0,maxAttempts:3});if(!X)return;let Q=[],Y=IK$(Z);if(Y.length>0){let J=await QQ.runStep(()=>ZU4($.organizationId),{name:"readOrgSlug",retriesAllowed:!0,maxAttempts:3});for(let K of oK$(Y,J??""))try{let W=await QQ.runStep(()=>XU4($.organizationId,X.jiraIssueId,K),{name:`attachCommentImage:${K.name}`,retriesAllowed:!0,maxAttempts:3});if(W)Q.push([K.target,W])}catch(W){if(!HK$(W))throw W;console.warn(`[jira] could not attach ${K.ref.path}:`,W)}}let G=await QQ.runStep(()=>QU4($,Z,Q),{name:"postCommentToJira",retriesAllowed:!1});if(!G)return;await QQ.runStep(()=>YU4($,G),{name:"recordCommentLink",retriesAllowed:!0,maxAttempts:4})}async function JU4($){let Z=pH(),X=await Z.getByOrg($.organizationId);if(!X?.enabled)return null;let Q=await Z.getLinkByItemId($.itemId,$.organizationId);if(!Q)return null;let Y=await rN4().getById($.itemId,$.organizationId);if(!Y)return null;if(Ut0(X.statusMapping,Y.status,Q.jiraStatus))return null;let J=await new JJ(X.siteUrl,X.email,X.apiToken).listTransitions(Q.jiraIssueId),K=DK$({mapping:X.statusMapping,lane:Y.status,currentJiraStatus:Q.jiraStatus,availableTransitions:J.map((F)=>F.to.name)});if(K.kind!=="transition"){if(K.kind==="unreachable")console.warn(`[jira] ${Q.jiraIssueKey} is ${Y.status} on the board, but its workflow offers no transition to ${K.targets.join(" / ")} \u2014 `+"the card will not move on the Jira board");return null}let W=J.find((F)=>F.to.name===K.targetName);if(!W)return null;return{jiraIssueId:Q.jiraIssueId,transitionId:W.id,targetName:K.targetName}}async function KU4($,Z){let X=pH(),Q=await X.getByOrg($.organizationId);if(!Q?.enabled)return;let Y=await X.getLinkByItemId($.itemId,$.organizationId);if(!Y||Y.jiraStatus===Z.targetName)return;let G=new JJ(Q.siteUrl,Q.email,Q.apiToken);if(await G.getStatusName(Z.jiraIssueId)===Z.targetName){await X.touchLink($.itemId,{jiraStatus:Z.targetName});return}await G.transitionIssue(Z.jiraIssueId,Z.transitionId),await X.touchLink($.itemId,{jiraStatus:Z.targetName})}async function WU4($){let Z=await QQ.runStep(()=>JU4($),{name:"resolveStatusTransition",retriesAllowed:!0,maxAttempts:3});if(!Z)return;await QQ.runStep(()=>KU4($,Z),{name:"executeStatusTransition",retriesAllowed:!0,maxAttempts:3})}function FU4($,Z){if(Z.updatedBy===iH)return;if(!St0||!VD0)return;let X=St0;(async()=>{if(!await pH().getLinkByItemId(Z.id,$))return;await QQ.startWorkflow(X,{queueName:fD,workflowID:`jira-status:${Z.id}:${Z.status}:${Date.parse(Z.updatedAt)}`,enqueueOptions:{queuePartitionKey:$}})({organizationId:$,itemId:Z.id})})().catch((Q)=>{console.warn(`[jira] status push enqueue failed for ${Z.id}:`,Q instanceof Error?Q.message:Q)})}async function _t0($,Z){try{if(!Vt0)return;if(!await $.storage.jiraIntegrations.getLinkByItemId(Z.taskBoardItemId,Z.organizationId))return;await QQ.startWorkflow(Vt0,{queueName:fD,workflowID:`jira-cmt-push:${Z.commentId}`,enqueueOptions:{queuePartitionKey:Z.organizationId}})(Z)}catch(X){console.warn(`[jira] comment push enqueue failed for ${Z.commentId}:`,X instanceof Error?X.message:X)}}function vt0(){if(kt0)return;kt0=QQ.registerWorkflow(sN4,{name:"jiraSyncWorkflow"}),QQ.registerScheduled(kt0,{name:"jiraSyncWorkflow",crontab:oN4,mode:tN4.ExactlyOncePerIntervalWhenActive}),Vt0=QQ.registerWorkflow(GU4,{name:"jiraCommentPushWorkflow"}),St0=QQ.registerWorkflow(WU4,{name:"jiraStatusPushWorkflow"})}var oN4="2-59/10 * * * *",VD0=null,eN4=30000,kt0=null,Vt0=null,St0=null;var SD0=D(()=>{NK$();zU();cy();jD0();VW();cL();MD0();aK$();Pt0();kD0()});function ft0($,Z,X,Q){fY({event:$,organizationId:Z,properties:{task_id:X.id,reports_task:bQ(X),...Q}})}function h$($,Z){V5.emit($,{id:crypto.randomUUID(),type:Ne1,source:"task-board",subject:Z.id,data:Z,time:new Date().toISOString()}),Promise.resolve().then(() => (SD0(),XW$)).then((X)=>X.maybeEnqueueJiraStatusPush($,Z)).catch((X)=>{console.warn("[jira] status push hook unavailable:",X)})}function QW$($,Z){V5.emit($,{id:crypto.randomUUID(),type:Ue1,source:"task-board",subject:Z,data:{id:Z},time:new Date().toISOString()})}function HU4($,Z){return $?[$]:Z}async function dy($,Z,X){let Q=$.metadata?.runMetadata?.taskBoardItemId,Y=!Q&&X?await $.storage.taskBoard.linkedTaskIds(X,Z):[];return HU4(Q,Y)}async function my($,Z,X){let Q=$.organization?.id;if(!Q)return;try{for(let Y of await dy($,Q,X)){let G=await $.storage.taskBoard.getById(Y,Q);if(!G||CD0[Z]<=CD0[G.status])continue;let J=await $.storage.taskBoard.update(Y,Q,{status:Z},$.auth?.user?.id??G.updatedBy);if(await $.storage.taskBoard.recordActivity({taskBoardItemId:Y,action:"status_changed",actorId:null,data:{from:G.status,to:Z}}).catch((K)=>console.error("[task-board] activity log write failed",K)),h$(Q,J),Z==="in_progress"||Z==="in_review")ft0(Z==="in_progress"?"task_run_started":"task_run_completed",Q,J,{from:G.status,via:"pr_open"})}}catch(Y){console.error("[task-board] run transition failed",Y)}}async function _D0($,Z,X,Q){let Y=$.organization?.id;if(!Y)return;try{let G=wD0(Z);if(!G)return;let J=await dy($,Y,Q);for(let K of J)await $.storage.taskBoard.linkPr({taskBoardItemId:K,organizationId:Y,url:G.url,prNumber:G.number,repoOwner:G.owner,repoName:G.repo,connectionId:X??null})}catch(G){console.error("[task-board] PR capture failed",G)}}async function iy($,Z,X,Q){try{let Y=await $.advanceLinkedTasksToReviewOnThreadFinish(Z,X);for(let G of Y)h$(X,G),ft0("task_run_completed",X,G,{from:"in_progress",via:"thread_finish"});for(let G of Y)await $.clearRunRetry(G.id,X).catch(()=>{})}catch(Y){console.error("[task-board] thread-finish transition failed",Y)}await bt0($,Z,X),await xt0($,Q,Z,X)}async function bt0($,Z,X){try{let Q=await $.failedRunInfo(Z,X);if(!Q)return;let Y=KK$(Q);for(let G of await $.linkedTaskIds(Z,X)){let J=await $.getById(G,X);if(!J)continue;if(J.status==="in_review"||J.status==="done")await $.relabelDeliveredFailure(Z,X,OU4).catch(()=>{});if(J.status!=="in_progress")continue;if(J.threads.some((F)=>F.hasMessages&&F.status==="in_progress"))continue;let K=J.retryAttempts;if(K<Y){let F=tZ(UU4,NU4,K,2,0.5);if(!await $.scheduleRunRetry(G,X,K+1,new Date(Date.now()+F)))continue;await $.recordActivity({taskBoardItemId:G,action:"status_changed",actorId:null,data:{from:"in_progress",to:"in_progress",retry:K+1,of:Y,reason:Q.errorText??Q.kind}}).catch(()=>{});continue}let W=await $.returnToTodoAfterFailure(G,X,J.updatedBy);if(!W)continue;await $.recordActivity({taskBoardItemId:G,action:"status_changed",actorId:null,data:{from:"in_progress",to:"todo",reason:Q.errorText??Q.kind,retriesSpent:K}}).catch(()=>{}),h$(X,W),ft0("task_run_failed",X,J,{reason:Q.kind??"error",retries_spent:K})}}catch(Q){console.error("[task-board] failed-run reaction failed",Q)}}async function xt0($,Z,X,Q){try{for(let Y of await $.linkedTaskIds(X,Q)){let G=await $.getById(Y,Q);if(!G)continue;if(CD0[G.status]>=CD0.in_review)continue;if(G.threads.some((K)=>K.hasMessages&&(K.status===null||!bn.has(K.status))))continue;if((await $.listPrs(Y,Q)).length>0)continue;await Le1(Z,Q,Y)}}catch(Y){console.error("[task-board] quota refund pass failed",Y)}}async function CW($,Z,X){let Q=Z.organizationId;if(Z.assigneeId!==U8)return!1;try{let Y=await $.storage.taskBoard.unassignSuperAgent(Z.id,Q,Z.updatedBy);if(!Y)return!1;return await W6($,{taskBoardItemId:Z.id,action:"assignee_changed",actorId:null,data:{from:Z.assigneeId,to:null,reason:X}}),console.warn(`[task-board] ${Z.id} handed to a human: ${X}`),h$(Q,Y),!0}catch(Y){return console.error(`[task-board] handing ${Z.id} to a human failed`,Y),!1}}async function vD0($,Z,X){if(!(X instanceof s7))return!1;if(X.reason!=="runs_exhausted")return!1;return await CW($,Z,"per-task run limit reached \u2014 the Super Agent can no longer re-dispatch "+"itself on this task. Re-run it manually to continue."),!0}async function YW$($,Z){let X=$.organization?.id;if(!X)return;try{let Q=await $.storage.taskBoard.reopenLinkedTasksOnThreadRun(Z,X);for(let Y of Q)h$(X,Y)}catch(Q){console.error("[task-board] thread-run reopen failed",Q)}}function GW$($){return $.includes("create_pull_request")||$.includes("createPullRequest")}function JW$($){if(BU4.test($))return!0;return DU4.test($)&&LU4.test($)}var CD0,NU4=30000,UU4=120000,OU4="Run ended after it had already delivered \u2014 the task moved on without it",BU4,DU4,LU4;var L5=D(()=>{nG();C4();VW();uy();WK$();w4();vn();X9();WX();CD0={triage:0,todo:1,in_progress:2,in_review:3,done:4,archived:5};BU4=/\bgh\s+pr\s+create\b/,DU4=/api\.github\.com\/repos\/[^\s"']+\/pulls\b/,LU4=/(?:-X|--request)\s+POST/});function wU4($){if($.status==="completed")return"advance";if($.status==="failed"&&$.messageStorageVersion===2&&($.harnessId==="decopilot"||$.harnessId==="claude-code"))return"nudge";return"none"}function EU4($){return["This task is still In Progress on the board and your last run ended without finishing it.","","Look at what you already did (`git log`, `git status`, and the messages above), then either:","- finish the remaining work (and open the PR, if it needed code changes),","- or, if it's actually done, say so in one line \u2014 the board moves the card for you,",$==="decopilot"?"- or, if you're blocked on something only a human knows, call the `user_ask` tool.":"- or, if you're blocked on something only a human knows, say what you need and stop.","","Don't start over and don't redo work you already committed or pushed. You are on the same branch as before \u2014 push to it and update your existing pull request rather than opening a second one."].join(`
1393
- `)}async function jU4($,Z,X){let Q=Z.organizationId,Y=await gZ($,"smart"),G=X.virtual_mcp_id??Yw(Q),J={id:`stall-nudge-${Z.id}-${X.id}`,role:"user",parts:[{type:"text",text:EU4(X.harness_id)}]};await new KX({storage:$.storage.threads.messageParts(),orgId:Q,threadId:X.id,runId:X.id}).emitRequestMessage(J),await nH({threadId:X.id,source:"background-tool",request:{messages:[J],models:{credentialId:Y.credentialId,thinking:{id:Y.modelId,title:Y.modelMeta.title}},agent:{id:G},temperature:0.5,toolApprovalLevel:"auto",mode:"default",organizationId:Q,userId:Z.assignedBy??Z.createdBy,harnessId:X.harness_id==="claude-code"?"claude-code":"decopilot",...X.branch?{branch:X.branch}:{},taskId:X.id,runMetadata:vB0(Z)}},{workflowID:`stall-nudge:${Z.id}:${X.id}`})}async function zU4($,Z){let X=await $.storage.threads.get(Z);if(!X)return{action:"none",thread:null};return{action:wU4({status:X.status,messageStorageVersion:X.message_storage_version,harnessId:X.harness_id}),thread:X}}function PU4($,Z=Date.now()){if($.status!=="in_progress")return!1;if($.run_started_at)return!1;return Cn($,Z)}async function AU4($,Z){let X=[];for(let Q of Z.threads){if(Q.status!=="in_progress")continue;let Y=await $.storage.threads.get(Q.threadId);if(!Y||!PU4(Y))continue;if(await $.storage.threads.markRunFailed(Q.threadId,yt0,"abandoned"))X.push(Q.threadId),console.warn(`[task-board] failed never-started thread ${Q.threadId} on ${Z.id}`)}return X}async function KW$($,Z){let X=$.organization?.id;if(!X)return;for(let Q of Z){if(Q.status==="in_progress")try{if((await AU4($,Q)).length>0)continue}catch(J){console.error(`[task-board] reaping threads for ${Q.id} failed`,J)}let Y;try{Y=Q.repo!=null&&(await $.storage.taskBoard.listPrs(Q.id,X)).length>0}catch(J){console.error(`[task-board] listPrs for ${Q.id} failed`,J);continue}if(!Ht0(Q,Y))continue;let G=Q.threads.find((J)=>J.hasMessages);if(!G)continue;try{let{action:J,thread:K}=await zU4($,G.threadId);if(J==="none"||!K)continue;if(J==="advance")await iy($.storage.taskBoard,G.threadId,X,$.storage.organizationBilling);else await jU4($,Q,K)}catch(J){console.error(`[task-board] stall recovery failed for ${Q.id}`,J)}}}var yt0="Run never started \u2014 no pod picked it up before the idle window elapsed";var gt0=D(()=>{jn();MB();cH();tH();VW();C8();L5()});import{z as cn}from"zod";var BC;var ht0=D(()=>{M0();CQ();u3();gt0();BC=u({name:"TASK_BOARD_ITEM_LIST",description:"List all task board items for the organization, plus the `owner/name` repos this organization has imported (the valid values for a task's `repo` field).",annotations:{title:"List Task Board Items",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:cn.object({}),outputSchema:cn.object({items:cn.array(Sy),repos:cn.array(cn.string())}),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,{items:Y}]=await Promise.all([Z.storage.taskBoard.list(X),Z.storage.connections.list(X,{slug:"mcp-github"})]),G=Ds1(Y);return KW$(Z,Q),{items:Q,repos:G}}})});import{z as rQ}from"zod";function RU4($,Z){let X=[];for(let{field:G,action:J}of TU4){if(Z[G]===$[G])continue;X.push({action:J,data:{from:$[G],to:Z[G]}})}if(Z.description!==$.description)X.push({action:"description_changed"});let Q=new Set($.tags.map((G)=>G.id));if(Z.tags.length!==$.tags.length||Z.tags.some((G)=>!Q.has(G.id)))X.push({action:"tags_changed",data:{from:$.tags,to:Z.tags}});return X}function IU4($,Z){if($!==U8)return!1;if(!Z)return!1;return Z.assigneeId!==U8?!0:Z.status==="todo"}function MU4($,Z,X){let Q=$!==void 0&&qU4.has($);return X&&Q&&Z==="in_review"}var TU4,qU4,DC;var ut0=D(()=>{M0();Un0();u3();On0();SW();WX();$C();L5();uy();nG();TU4=[{field:"status",action:"status_changed"},{field:"assigneeId",action:"assignee_changed"},{field:"priority",action:"priority_changed"},{field:"dueDate",action:"due_date_changed"},{field:"title",action:"title_changed"}];qU4=new Set(["done","archived"]);DC=u({name:"TASK_BOARD_ITEM_UPDATE",description:"Update a task board item's fields (title, description, status, priority, assignee), and/or link a chat thread to it.",annotations:{title:"Update Task Board Item",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:rQ.object({id:rQ.string(),title:rQ.string().min(1).optional(),description:rQ.string().nullable().optional(),status:h3.optional(),priority:ZC.optional(),assigneeId:rQ.string().nullable().optional(),repo:rQ.string().nullable().optional(),dueDate:rQ.string().datetime().nullable().optional(),sprint:rQ.number().int().min(1).max(CB0).nullable().optional(),sortOrder:rQ.number().optional(),tagIds:rQ.array(rQ.string()).optional(),linkThreadId:rQ.string().optional(),prUrl:rQ.string().nullable().optional().describe('GitHub pull request URL to link to this task, e.g. https://github.com/owner/repo/pull/123. Pass this with `status: "in_review"` after opening a PR for an existing card.')}),outputSchema:rQ.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);if($.linkThreadId){if(!await Z.storage.taskBoard.getById($.id,X))throw Error(`Task board item not found: ${$.id}`);if(!await Z.storage.threads.get($.linkThreadId))throw Error(`Thread not found: ${$.linkThreadId}`);await Z.storage.taskBoard.linkThread($.id,$.linkThreadId,X)}let Y=$.title!==void 0||$.description!==void 0||$.status!==void 0||$.priority!==void 0||$.assigneeId!==void 0||$.repo!==void 0||$.dueDate!==void 0||$.sprint!==void 0||$.sortOrder!==void 0||$.tagIds!==void 0,G=Y?await Z.storage.taskBoard.getById($.id,X):null;if(Y&&!G)throw Error(`Task board item not found: ${$.id}`);let J=eS.getStore()!==void 0;if(MU4($.status,G?.status,J))throw Error("This task is In Review \u2014 a run can't move it to Done or Archived. "+"Leave it in in_review for the reviewer; only a person, or TASK_BOARD_REVIEW_DECISION on a reviewer's own run, closes out a task under review.");let K=$.assigneeId!==void 0&&$.assigneeId!==(G?.assigneeId??null),W=IU4($.assigneeId,G);if(G&&bQ(G)){if($.title!==void 0||$.description!==void 0||$.priority!==void 0)throw Error("This task was generated from your report and can't be edited \u2014 create your own task instead.");if(W)await px(Z,G,pO())}if($.tagIds!==void 0){let H=await Z.storage.tags.listOrgTags(X),N=new Set(H.map((U)=>U.id));for(let U of $.tagIds)if(!N.has(U))throw Error(`Tag not found: ${U}`);await Z.storage.taskBoard.setItemTags($.id,$.tagIds,o0(Z))}let F;if(Y)F=await Z.storage.taskBoard.update($.id,X,{title:$.title,description:$.description,status:W?"todo":$.status,priority:$.priority,assigneeId:$.assigneeId,assignedBy:K?$.assigneeId?o0(Z):null:void 0,repo:$.repo,dueDate:$.dueDate,sprint:$.sprint,sortOrder:$.sortOrder},o0(Z));else{let H=await Z.storage.taskBoard.getById($.id,X);if(!H)throw Error(`Task board item not found: ${$.id}`);F=H}if(Q)await Z.storage.taskBoard.linkPr({taskBoardItemId:F.id,organizationId:X,url:Q.url,prNumber:Q.number,repoOwner:Q.owner,repoName:Q.repo,connectionId:null});if(G){let H=o0(Z),N=RU4(G,F);if(N.length>0)await FK$(Z,N.map((U)=>({taskBoardItemId:F.id,actorId:H,...U,alsoSubscribe:U.action==="assignee_changed"&&F.assigneeId!==U8?[F.assigneeId]:void 0})))}if(G&&F.description!==G.description)await Z.storage.notifications.notifyMentions({taskBoardItemId:F.id,organizationId:X,actorId:o0(Z),body:F.description??"",previousBody:G.description});if(Y||$.linkThreadId||Q)h$(X,F);if(W)await _B(Z,F,{userInitiated:!0});return{item:F}}})});import{z as fD0}from"zod";var LC;var ct0=D(()=>{M0();L5();LC=u({name:"TASK_BOARD_ITEM_DELETE",description:"Delete a task board item. A reports-pushed task also dismisses its finding, so the next diagnostic import won't re-create the card.",annotations:{title:"Delete Task Board Item",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:fD0.object({id:fD0.string()}),outputSchema:fD0.object({success:fD0.boolean()}),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)");if(!await Z.storage.taskBoard.delete($.id,X,o0(Z)??"system"))throw Error(`Task board item not found: ${$.id}`);return QW$(X,$.id),{success:!0}}})});function wC($){if($.length===0)return!1;let Z=new Map;for(let X of $){let Q=`${X.repoOwner}/${X.repoName}`.toLowerCase(),Y=Z.get(Q);if(Y)Y.push(X);else Z.set(Q,[X])}return[...Z.values()].every(kU4)}function kU4($){return $.some((Z)=>Z.merged===!0)&&$.every((Z)=>Z.merged===!0||Z.state==="closed")}async function VU4($,Z,X,Q){let Y=await $.storage.taskBoard.getById(X,Z);if(!Y||Y.status!=="done")return!1;let G=await $.storage.taskBoard.listPrs(X,Z),J=await Promise.all(G.map(async(W)=>({...W,...await Q($,Z,W)})));if(!wC(J))return!1;let K=await $.storage.taskBoard.update(X,Z,{status:"archived"},Y.updatedBy);return await W6($,{taskBoardItemId:X,action:"status_changed",actorId:null,data:{from:"done",to:"archived",reason:"merged_pr_auto_archive"}}),h$(Z,K),!0}async function WW$($,Z,X,Q=xD0){let Y=0;for(let G of X)try{if(await VU4($,Z,G,Q))Y+=1}catch(J){console.error(`[task-board-archive] ${G} failed`,J)}return{archived:Y}}function bD0($){let Z=new Map;for(let{id:X,organizationId:Q}of $){let Y=Z.get(Q);if(Y)Y.push(X);else Z.set(Q,[X])}return[...Z].map(([X,Q])=>({organizationId:X,itemIds:Q}))}var py=D(()=>{WX();KJ();L5()});function SU4($){let Z=new Map($.map((G)=>[G.id,G])),X=new Map;for(let G of Vy($)){let J=FW$(G.owner,G.repo);X.set(J,[...X.get(J)??[],G])}if(X.size!==1)return null;let Q=[...X.values()][0],Y=Q.find((G)=>{let J=Z.get(G.connectionId);return J?ZE(J):!1})??Q[0];return{connectionId:Y.connectionId,owner:Y.owner,name:Y.repo,installationId:Y.installationId,url:`https://github.com/${Y.owner}/${Y.repo}`}}async function yD0($,Z){try{let{items:X}=await $.storage.connections.list(Z,{slug:"mcp-github"}),Q=SU4(X);if(Q)return{repo:Q};let Y=new Map;for(let J of Vy(X)){let K=FW$(J.owner,J.repo);if(!Y.has(K))Y.set(K,{connectionId:J.connectionId,repo:`${J.owner}/${J.repo}`})}let G=Y;if(G.size===0)return console.warn(`[task-board] claude-code skipped for org ${Z}: `+"no importable repos \u2014 running Decopilot"),null;return console.warn(`[task-board] claude-code for org ${Z}: ${G.size} importable repos \u2014 the run picks one with TASK_ADD_REPO`),{choices:[...G.values()]}}catch(X){return console.warn("[task-board] repo lookup for claude-code failed",X),null}}function HW$($,Z,X){let Q=["You've been assigned this task. Complete it and finish with a pull request if it makes sense (like a coding task) or is explicitly requested.","","You are running AUTONOMOUSLY \u2014 no human is watching, so drive this to "+"completion yourself. Make reasonable decisions and move on; do not stop to ask for confirmation.","",`Title: ${$.title}`];if($.description)Q.push("","Description:",$.description);if(Q.push("",Z?`The repository ${Z.owner}/${Z.name} is already cloned at your working directory, on its own branch. \`git\` and \`gh\` are authenticated. ${Np}`:["Your working directory is EMPTY: this organization has several repositories, so nothing has been cloned yet. FIRST call `mcp__studio__TASK_ADD_REPO` with the connectionId of the repository this task is about. It clones that repository into your working directory and waits for the checkout, so once it returns the repository is there on its own branch and `git` and `gh` are authenticated. Do not read files, run `git`, or run `gh` before it returns; there is nothing there yet.","","Repositories in this organization:",...(X?.repoChoices??[]).map((Y)=>`- ${Y.repo} (connectionId: ${Y.connectionId})`),X?.repoChoices?.length?"Pick the one the task is about. If the task doesn't say and the names don't settle it, take the first.":"Call `mcp__studio__TASK_ADD_REPO` with no arguments to list them."].join(`
1393
+ `)}async function jU4($,Z,X){let Q=Z.organizationId,Y=await gZ($,"smart"),G=X.virtual_mcp_id??Yw(Q),J={id:`stall-nudge-${Z.id}-${X.id}`,role:"user",parts:[{type:"text",text:EU4(X.harness_id)}]};await new KX({storage:$.storage.threads.messageParts(),orgId:Q,threadId:X.id,runId:X.id}).emitRequestMessage(J),await nH({threadId:X.id,source:"background-tool",request:{messages:[J],models:{credentialId:Y.credentialId,thinking:{id:Y.modelId,title:Y.modelMeta.title}},agent:{id:G},temperature:0.5,toolApprovalLevel:"auto",mode:"default",organizationId:Q,userId:Z.assignedBy??Z.createdBy,harnessId:X.harness_id==="claude-code"?"claude-code":"decopilot",...X.branch?{branch:X.branch}:{},taskId:X.id,runMetadata:vB0(Z)}},{workflowID:`stall-nudge:${Z.id}:${X.id}`})}async function zU4($,Z){let X=await $.storage.threads.get(Z);if(!X)return{action:"none",thread:null};return{action:wU4({status:X.status,messageStorageVersion:X.message_storage_version,harnessId:X.harness_id}),thread:X}}function PU4($,Z=Date.now()){if($.status!=="in_progress")return!1;if($.run_started_at)return!1;return Cn($,Z)}async function AU4($,Z){let X=[];for(let Q of Z.threads){if(Q.status!=="in_progress")continue;let Y=await $.storage.threads.get(Q.threadId);if(!Y||!PU4(Y))continue;if(await $.storage.threads.markRunFailed(Q.threadId,yt0,"abandoned"))X.push(Q.threadId),console.warn(`[task-board] failed never-started thread ${Q.threadId} on ${Z.id}`)}return X}async function KW$($,Z){let X=$.organization?.id;if(!X)return;for(let Q of Z){if(Q.status==="in_progress")try{if((await AU4($,Q)).length>0)continue}catch(J){console.error(`[task-board] reaping threads for ${Q.id} failed`,J)}let Y;try{Y=Q.repo!=null&&(await $.storage.taskBoard.listPrs(Q.id,X)).length>0}catch(J){console.error(`[task-board] listPrs for ${Q.id} failed`,J);continue}if(!Ht0(Q,Y))continue;let G=Q.threads.find((J)=>J.hasMessages);if(!G)continue;try{let{action:J,thread:K}=await zU4($,G.threadId);if(J==="none"||!K)continue;if(J==="advance")await iy($.storage.taskBoard,G.threadId,X,$.storage.organizationBilling);else await jU4($,Q,K)}catch(J){console.error(`[task-board] stall recovery failed for ${Q.id}`,J)}}}var yt0="Run never started \u2014 no pod picked it up before the idle window elapsed";var gt0=D(()=>{jn();MB();cH();tH();VW();C8();L5()});import{z as cn}from"zod";var BC;var ht0=D(()=>{M0();CQ();u3();gt0();BC=u({name:"TASK_BOARD_ITEM_LIST",description:"List all task board items for the organization, plus the `owner/name` repos this organization has imported (the valid values for a task's `repo` field).",annotations:{title:"List Task Board Items",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:cn.object({}),outputSchema:cn.object({items:cn.array(Sy),repos:cn.array(cn.string())}),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,{items:Y}]=await Promise.all([Z.storage.taskBoard.list(X),Z.storage.connections.list(X,{slug:"mcp-github"})]),G=Ds1(Y);return KW$(Z,Q),{items:Q,repos:G}}})});import{z as rQ}from"zod";function RU4($,Z){let X=[];for(let{field:G,action:J}of TU4){if(Z[G]===$[G])continue;X.push({action:J,data:{from:$[G],to:Z[G]}})}if(Z.description!==$.description)X.push({action:"description_changed"});let Q=new Set($.tags.map((G)=>G.id));if(Z.tags.length!==$.tags.length||Z.tags.some((G)=>!Q.has(G.id)))X.push({action:"tags_changed",data:{from:$.tags,to:Z.tags}});return X}function IU4($,Z){if($!==U8)return!1;if(!Z)return!1;return Z.assigneeId!==U8?!0:Z.status==="todo"}function MU4($,Z,X){let Q=$!==void 0&&qU4.has($);return X&&Q&&Z==="in_review"}var TU4,qU4,DC;var ut0=D(()=>{M0();Un0();u3();On0();SW();WX();$C();L5();uy();nG();TU4=[{field:"status",action:"status_changed"},{field:"assigneeId",action:"assignee_changed"},{field:"priority",action:"priority_changed"},{field:"dueDate",action:"due_date_changed"},{field:"title",action:"title_changed"}];qU4=new Set(["done","archived"]);DC=u({name:"TASK_BOARD_ITEM_UPDATE",description:"Update a task board item's fields (title, description, status, priority, assignee), and/or link a chat thread to it.",annotations:{title:"Update Task Board Item",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:rQ.object({id:rQ.string(),title:rQ.string().min(1).optional(),description:rQ.string().nullable().optional(),status:h3.optional(),priority:ZC.optional(),assigneeId:rQ.string().nullable().optional(),repo:rQ.string().nullable().optional(),dueDate:rQ.string().datetime().nullable().optional(),sprint:rQ.number().int().min(1).max(CB0).nullable().optional(),sortOrder:rQ.number().optional(),tagIds:rQ.array(rQ.string()).max(1000).optional(),linkThreadId:rQ.string().optional(),prUrl:rQ.string().nullable().optional().describe('GitHub pull request URL to link to this task, e.g. https://github.com/owner/repo/pull/123. Pass this with `status: "in_review"` after opening a PR for an existing card.')}),outputSchema:rQ.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);if($.linkThreadId){if(!await Z.storage.taskBoard.getById($.id,X))throw Error(`Task board item not found: ${$.id}`);if(!await Z.storage.threads.get($.linkThreadId))throw Error(`Thread not found: ${$.linkThreadId}`);await Z.storage.taskBoard.linkThread($.id,$.linkThreadId,X)}let Y=$.title!==void 0||$.description!==void 0||$.status!==void 0||$.priority!==void 0||$.assigneeId!==void 0||$.repo!==void 0||$.dueDate!==void 0||$.sprint!==void 0||$.sortOrder!==void 0||$.tagIds!==void 0,G=Y?await Z.storage.taskBoard.getById($.id,X):null;if(Y&&!G)throw Error(`Task board item not found: ${$.id}`);let J=eS.getStore()!==void 0;if(MU4($.status,G?.status,J))throw Error("This task is In Review \u2014 a run can't move it to Done or Archived. "+"Leave it in in_review for the reviewer; only a person, or TASK_BOARD_REVIEW_DECISION on a reviewer's own run, closes out a task under review.");let K=$.assigneeId!==void 0&&$.assigneeId!==(G?.assigneeId??null),W=IU4($.assigneeId,G);if(G&&bQ(G)){if($.title!==void 0||$.description!==void 0||$.priority!==void 0)throw Error("This task was generated from your report and can't be edited \u2014 create your own task instead.");if(W)await px(Z,G,pO())}if($.tagIds!==void 0){let H=await Z.storage.tags.listOrgTags(X),N=new Set(H.map((U)=>U.id));for(let U of $.tagIds)if(!N.has(U))throw Error(`Tag not found: ${U}`);await Z.storage.taskBoard.setItemTags($.id,$.tagIds,o0(Z))}let F;if(Y)F=await Z.storage.taskBoard.update($.id,X,{title:$.title,description:$.description,status:W?"todo":$.status,priority:$.priority,assigneeId:$.assigneeId,assignedBy:K?$.assigneeId?o0(Z):null:void 0,repo:$.repo,dueDate:$.dueDate,sprint:$.sprint,sortOrder:$.sortOrder},o0(Z));else{let H=await Z.storage.taskBoard.getById($.id,X);if(!H)throw Error(`Task board item not found: ${$.id}`);F=H}if(Q)await Z.storage.taskBoard.linkPr({taskBoardItemId:F.id,organizationId:X,url:Q.url,prNumber:Q.number,repoOwner:Q.owner,repoName:Q.repo,connectionId:null});if(G){let H=o0(Z),N=RU4(G,F);if(N.length>0)await FK$(Z,N.map((U)=>({taskBoardItemId:F.id,actorId:H,...U,alsoSubscribe:U.action==="assignee_changed"&&F.assigneeId!==U8?[F.assigneeId]:void 0})))}if(G&&F.description!==G.description)await Z.storage.notifications.notifyMentions({taskBoardItemId:F.id,organizationId:X,actorId:o0(Z),body:F.description??"",previousBody:G.description});if(Y||$.linkThreadId||Q)h$(X,F);if(W)await _B(Z,F,{userInitiated:!0});return{item:F}}})});import{z as fD0}from"zod";var LC;var ct0=D(()=>{M0();L5();LC=u({name:"TASK_BOARD_ITEM_DELETE",description:"Delete a task board item. A reports-pushed task also dismisses its finding, so the next diagnostic import won't re-create the card.",annotations:{title:"Delete Task Board Item",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:fD0.object({id:fD0.string()}),outputSchema:fD0.object({success:fD0.boolean()}),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)");if(!await Z.storage.taskBoard.delete($.id,X,o0(Z)??"system"))throw Error(`Task board item not found: ${$.id}`);return QW$(X,$.id),{success:!0}}})});function wC($){if($.length===0)return!1;let Z=new Map;for(let X of $){let Q=`${X.repoOwner}/${X.repoName}`.toLowerCase(),Y=Z.get(Q);if(Y)Y.push(X);else Z.set(Q,[X])}return[...Z.values()].every(kU4)}function kU4($){return $.some((Z)=>Z.merged===!0)&&$.every((Z)=>Z.merged===!0||Z.state==="closed")}async function VU4($,Z,X,Q){let Y=await $.storage.taskBoard.getById(X,Z);if(!Y||Y.status!=="done")return!1;let G=await $.storage.taskBoard.listPrs(X,Z),J=await Promise.all(G.map(async(W)=>({...W,...await Q($,Z,W)})));if(!wC(J))return!1;let K=await $.storage.taskBoard.update(X,Z,{status:"archived"},Y.updatedBy);return await W6($,{taskBoardItemId:X,action:"status_changed",actorId:null,data:{from:"done",to:"archived",reason:"merged_pr_auto_archive"}}),h$(Z,K),!0}async function WW$($,Z,X,Q=xD0){let Y=0;for(let G of X)try{if(await VU4($,Z,G,Q))Y+=1}catch(J){console.error(`[task-board-archive] ${G} failed`,J)}return{archived:Y}}function bD0($){let Z=new Map;for(let{id:X,organizationId:Q}of $){let Y=Z.get(Q);if(Y)Y.push(X);else Z.set(Q,[X])}return[...Z].map(([X,Q])=>({organizationId:X,itemIds:Q}))}var py=D(()=>{WX();KJ();L5()});function SU4($){let Z=new Map($.map((G)=>[G.id,G])),X=new Map;for(let G of Vy($)){let J=FW$(G.owner,G.repo);X.set(J,[...X.get(J)??[],G])}if(X.size!==1)return null;let Q=[...X.values()][0],Y=Q.find((G)=>{let J=Z.get(G.connectionId);return J?ZE(J):!1})??Q[0];return{connectionId:Y.connectionId,owner:Y.owner,name:Y.repo,installationId:Y.installationId,url:`https://github.com/${Y.owner}/${Y.repo}`}}async function yD0($,Z){try{let{items:X}=await $.storage.connections.list(Z,{slug:"mcp-github"}),Q=SU4(X);if(Q)return{repo:Q};let Y=new Map;for(let J of Vy(X)){let K=FW$(J.owner,J.repo);if(!Y.has(K))Y.set(K,{connectionId:J.connectionId,repo:`${J.owner}/${J.repo}`})}let G=Y;if(G.size===0)return console.warn(`[task-board] claude-code skipped for org ${Z}: `+"no importable repos \u2014 running Decopilot"),null;return console.warn(`[task-board] claude-code for org ${Z}: ${G.size} importable repos \u2014 the run picks one with TASK_ADD_REPO`),{choices:[...G.values()]}}catch(X){return console.warn("[task-board] repo lookup for claude-code failed",X),null}}function HW$($,Z,X){let Q=["You've been assigned this task. Complete it and finish with a pull request if it makes sense (like a coding task) or is explicitly requested.","","You are running AUTONOMOUSLY \u2014 no human is watching, so drive this to "+"completion yourself. Make reasonable decisions and move on; do not stop to ask for confirmation.","",`Title: ${$.title}`];if($.description)Q.push("","Description:",$.description);if(Q.push("",Z?`The repository ${Z.owner}/${Z.name} is already cloned at your working directory, on its own branch. \`git\` and \`gh\` are authenticated. ${Np}`:["Your working directory is EMPTY: this organization has several repositories, so nothing has been cloned yet. FIRST call `mcp__studio__TASK_ADD_REPO` with the connectionId of the repository this task is about. It clones that repository into your working directory and waits for the checkout, so once it returns the repository is there on its own branch and `git` and `gh` are authenticated. Do not read files, run `git`, or run `gh` before it returns; there is nothing there yet.","","Repositories in this organization:",...(X?.repoChoices??[]).map((Y)=>`- ${Y.repo} (connectionId: ${Y.connectionId})`),X?.repoChoices?.length?"Pick the one the task is about. If the task doesn't say and the names don't settle it, take the first.":"Call `mcp__studio__TASK_ADD_REPO` with no arguments to list them."].join(`
1394
1394
  `),""),X?.resolveConflict&&X.pr)Q.push(`Pull request #${X.pr.number} (${X.pr.url}) is approved but has a MERGE CONFLICT with its base branch.`,`Check that branch out (\`gh pr checkout ${X.pr.number}\`), merge or rebase the base branch into it, resolve the conflicts, and push to update the SAME pull request \u2014 do NOT open a new one. Resolve by preserving BOTH sides' intent; never blindly discard either side, and change only what the conflict requires.`,"");else if(X?.feedback)Q.push(X.pr?`A reviewer requested changes on pull request #${X.pr.number} (${X.pr.url}):`:"A reviewer requested changes on your previous work:",X.feedback,X.pr?`Check that branch out (\`gh pr checkout ${X.pr.number}\`) before editing, address the feedback, then push to update the SAME pull request \u2014 do NOT open a new one.`:"Address this feedback.","The reviewer judged the DEPLOYED PREVIEW, not your diff. Reproduce their check there before you push again \u2014 a fix that only looks right in the code comes straight back.","");else if(X?.pr)Q.push(`This task already has an open pull request #${X.pr.number} (${X.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. If it already does everything the task asks, say so and stop rather than changing it.","");return Q.push("How to finish:","- Make the change, commit it, push the branch, and open a pull request"+(X?.pr?" \u2014 or push to the existing one, per the instruction above.":"."),"- Change only what the task needs. Don't refactor around it.","- The change must be REACHABLE from the surface the task names: edit the component that route actually renders, not one that merely looks like the right place. A change nothing imports is dead code, and it is the most common reason a task comes back rejected.","- Before handing over, VERIFY the task's outcome the way the reviewer will: get the PR's `previewUrl` from `mcp__studio__TASK_BOARD_ITEM_PRS_GET` (give the deploy a minute), open the affected route there, and confirm the behaviour actually happens. A green test suite is not the bar \u2014 the reviewer approves what it can see on the preview.","- As soon as `gh pr create` prints the URL, call `mcp__studio__TASK_BOARD_ITEM_PR_LINK` with that url. Do this even if you also mention the PR in a comment \u2014 the reviewers are dispatched from the linked PR, not from your message.",`- Then move this task to review on the board: call \`mcp__studio__TASK_BOARD_ITEM_UPDATE\` with id "${$.id}" and status "in_review". Pass ONLY the fields you are changing.`,'- If the task turns out to need no code change, do NOT open a PR: explain why in a comment on the task (`mcp__studio__TASK_BOARD_COMMENT_CREATE`) and move it to "done" instead of "in_review". There is nothing for a reviewer to review, so In Review would strand it.',`- Anything a reviewer should know (a decision you made, something you found and deliberately left alone, a question) goes on the task as a comment: \`mcp__studio__TASK_BOARD_COMMENT_CREATE\` with taskBoardItemId "${$.id}". Read what's already there first with \`mcp__studio__TASK_BOARD_COMMENT_LIST\` \u2014 a comment may be addressed to you.`,"",`(task id: ${$.id})`),Q.join(`
1395
1395
  `)}var FW$=($,Z)=>`${$}/${Z}`.toLowerCase();var lt0=D(()=>{VB0();CQ();X9()});import{createHmac as CU4,randomBytes as _U4,timingSafeEqual as vU4}from"crypto";function fU4(){if(gD0)return gD0;let $;try{let Z=b0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return gD0=$?Buffer.from($):_U4(32),gD0}function dt0($,Z,X){return`rtok_${CU4("sha256",fU4()).update(`${$}:${Z}:${X.toISOString()}`).digest("base64url")}`}function NW$($,Z,X,Q){let Y=Buffer.from($),G=Buffer.from(dt0(Z,X,Q));return Y.length===G.length&&vU4(Y,G)}var gD0=null;var mt0=D(()=>{q$()});import{createHash as bU4}from"crypto";function it0($,Z){if($.status===null||UW$.has($.status))return!1;return!Cn({updated_at:$.lastActiveAt,last_progress_at:null},Z)}function hU4($,Z){return Z-$>=gU4}async function hD0($,Z,X){let Q=await $.storage.organizationSettings.get(Z.organizationId),Y=TH(Q?.flags);if(Y.length===0)return;let G=qx(Q?.flags,"cheap_reviewer_model")?"reviewer":"default",J=await iU4($,Z),K=new Date(J);await Promise.all(Y.map(async(W)=>{if(dU4(Z,W,J)){await CW($,Z,`${mx[W]} failed ${pt0} times on `+"this review \u2014 it will not be retried");return}if(W==="qa"&&X?.previewMatchesHead===!1){if(hU4(J,Date.now()))await CW($,Z,"the pull request's deploy preview is not showing its latest commit (its checks never went green), so QA cannot verify this change against what the PR actually does");return}if(mU4(Z,W,J))return;let F=uU4(Z,W,J);await tU4($,Z,W,K,F,G).catch((H)=>console.error(`[task-board] ${W} reviewer enqueue failed`,H))}))}function uU4($,Z,X,Q=Date.now()){return $.threads.filter((Y)=>ix(Y.title,Z)&&nt0(Y,Q)&&new Date(Y.createdAt).getTime()>=X).length}function cU4($,Z){if(!$||!Z||!("choices"in Z))return null;return Z.choices.find((X)=>X.repo===$)?.connectionId??null}function lU4($,Z,X){let Q=$.threads.filter((Y)=>ix(Y.title,Z)&&Y.status==="completed"&&new Date(Y.createdAt).getTime()<X).map((Y)=>new Date(Y.lastActiveAt).getTime()).filter((Y)=>Number.isFinite(Y));return Q.length===0?0:Math.max(...Q)}function nt0($,Z){if($.status==="failed")return!0;return $.status!==null&&!UW$.has($.status)&&!it0($,Z)}function OW$($,Z,X,Q=Date.now()){return $.threads.filter((Y)=>{if(!ix(Y.title,Z))return!1;return it0(Y,Q)||new Date(Y.createdAt).getTime()>=X})}function dU4($,Z,X,Q=Date.now()){let Y=OW$($,Z,X,Q);return Y.length>0&&Y.every((G)=>nt0(G,Q))&&Y.length>=pt0}function mU4($,Z,X,Q=Date.now()){let Y=OW$($,Z,X,Q);if(Y.length===0)return!1;if(Y.some((J)=>it0(J,Q)))return!0;let G=Y.filter((J)=>nt0(J,Q));if(G.length>=pt0)return!0;return G.length!==Y.length}async function iU4($,Z){let X=await $.storage.taskBoard.listActivity(Z.id,Z.organizationId);return RH(X)}function pU4($,Z,X,Q){return`review:${$}:${Z}:${X.toISOString()}:${Q}`}function nU4($){return`thrd_${bU4("sha256").update($).digest("hex").slice(0,32)}`}async function tU4($,Z,X,Q,Y,G){let J=Z.organizationId,K=dt0(Z.id,X,Q),W=await yD0($,J),F=W&&"repo"in W?W.repo:null,H=W!==null,N=lU4(Z,X,Q.getTime()),U=cU4(Z.repo,W),O=H?"mcp__studio__TASK_BOARD_ITEM_PRS_GET":"TASK_BOARD_ITEM_PRS_GET",B=H?"mcp__studio__TASK_BOARD_REVIEW_DECISION":"TASK_BOARD_REVIEW_DECISION",L=H?"mcp__studio__TASK_BOARD_COMMENT_CREATE":"TASK_BOARD_COMMENT_CREATE",w=H?"mcp__studio__TASK_BOARD_COMMENT_LIST":"TASK_BOARD_COMMENT_LIST",E=[yU4[X],"","You are running AUTONOMOUSLY \u2014 no human is watching this run. Making the "+'approve / request-changes call IS your job; you are the decision-maker, not an assistant asking a human to decide. NEVER use `user_ask` to ask whether to approve, or to confirm an obvious call ("Approve the PR?"). Reserve `user_ask` for a genuine, unresolvable blocker only a human can clear (e.g. a missing credential, or a requirement so ambiguous you '+"truly cannot judge the outcome) \u2014 that should be rare. When in doubt "+"between asking and deciding, DECIDE.","","Do NOT push commits, merge, or change the code to fix what you find. You "+"are reviewing, not implementing \u2014 the tools that would let you rewrite "+"the checkout are removed from this run on purpose. Report what you find in your decision instead."].join(`
1396
1396
  `),j=[...H?[]:[E,""],`Task title: ${Z.title}`,Z.description?`
@@ -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 yD0($,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();Un0();u3();On0();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 CL0($){YO$?.broadcast($)}var YO$=null;import{DBOS as _L0}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 _L0.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 _L0.cancelWorkflows([Z]),!0}async function Fg($){let Z=await _L0.listWorkflows({workflow_id_prefix:`thread-run:${$}:`,status:["PENDING"],loadInput:!1,loadOutput:!1});if(Z.length===0)return;await _L0.cancelWorkflows(Z.map((X)=>X.workflowID))}var vL0=()=>{};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(dD0(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(dD0(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"));CL0(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();vL0();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 Nd0($).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,`${Ud0} 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 vD0(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 fL0}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:fL0.object({taskBoardItemId:fL0.string()}),outputSchema:fL0.object({status:h3,merged:fL0.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()).max(1000).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 bL0($){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();SD0();$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,bL0(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=bL0(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=bL0(Z),Q=$.body!==void 0?await Z.storage.taskBoard.getComment($.id,X):null,Y=await Z.storage.taskBoard.updateComment({id:$.id,organizationId:X,callerId:o0(Z),body:$.body,resolved:$.resolved});if(!Y)throw Error("Comment not found, or you can only edit your own comments");if($.body!==void 0&&Y.body!==Q?.body)await Z.storage.notifications.notifyMentions({taskBoardItemId:Y.taskBoardItemId,organizationId:X,actorId:o0(Z),body:Y.body,previousBody:Q?.body??null});return{comment:Y}}}),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,bL0(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 xL0}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:xL0.object({tagId:xL0.string().describe("Tag ID to delete")}),outputSchema:xL0.object({success:xL0.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();vL0();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"));CL0($.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$();on0();rn0();vO$();fO$();an0()});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 yL0($){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=yL0($.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,gL0,hL0=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(gL0.find((G)=>G.name===this.name))throw Error("Cron: Tried to initialize new named job '"+this.name+"', but name already taken.");gL0.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 $=gL0.indexOf(this);$>=0&&gL0.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]];gL0=[]});function uL0($,Z){try{return new hL0($,{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 yD0($,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();Un0();u3();On0();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()).max(1000).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 CL0($){YO$?.broadcast($)}var YO$=null;import{DBOS as _L0}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 _L0.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 _L0.cancelWorkflows([Z]),!0}async function Fg($){let Z=await _L0.listWorkflows({workflow_id_prefix:`thread-run:${$}:`,status:["PENDING"],loadInput:!1,loadOutput:!1});if(Z.length===0)return;await _L0.cancelWorkflows(Z.map((X)=>X.workflowID))}var vL0=()=>{};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(dD0(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(dD0(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"));CL0(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();vL0();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 Nd0($).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,`${Ud0} 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 vD0(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 fL0}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:fL0.object({taskBoardItemId:fL0.string()}),outputSchema:fL0.object({status:h3,merged:fL0.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()).max(1000).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 bL0($){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();SD0();$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,bL0(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=bL0(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=bL0(Z),Q=$.body!==void 0?await Z.storage.taskBoard.getComment($.id,X):null,Y=await Z.storage.taskBoard.updateComment({id:$.id,organizationId:X,callerId:o0(Z),body:$.body,resolved:$.resolved});if(!Y)throw Error("Comment not found, or you can only edit your own comments");if($.body!==void 0&&Y.body!==Q?.body)await Z.storage.notifications.notifyMentions({taskBoardItemId:Y.taskBoardItemId,organizationId:X,actorId:o0(Z),body:Y.body,previousBody:Q?.body??null});return{comment:Y}}}),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,bL0(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 xL0}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:xL0.object({tagId:xL0.string().describe("Tag ID to delete")}),outputSchema:xL0.object({success:xL0.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()).max(1000).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();vL0();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"));CL0($.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$();on0();rn0();vO$();fO$();an0()});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 yL0($){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=yL0($.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,gL0,hL0=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(gL0.find((G)=>G.name===this.name))throw Error("Cron: Tried to initialize new named job '"+this.name+"', but name already taken.");gL0.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 $=gL0.indexOf(this);$>=0&&gL0.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]];gL0=[]});function uL0($,Z){try{return new hL0($,{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_();bA0();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();TA0();up();um0();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 IA0(Q,G.id,Y)}function bZ1($,Z){if(Z instanceof RA0)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 xA0(Z,$.get("vmClaim").branch);return $.json(X,200,j5)}catch(Z){return bZ1($,Z)}}function ta($,Z){let Q=(hA0.get($)??Promise.resolve()).catch(()=>{}).then(Z),Y=Q.catch(()=>{});return hA0.set($,Y),Y.finally(()=>{if(hA0.get($)===Y)hA0.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 uA0($,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,hA0,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 yA0(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 gA0(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([uA0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:K}),uA0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:K})]):await(async()=>{let w=await ku(X);return Promise.all([xA0(w,Q.branch),yA0(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([uA0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:K}),uA0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:K})]):await(async()=>{let w=await ku(X);return Promise.all([xA0(w,Q.branch),yA0(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$();ym0();gp();jZ1();Ou$();RZ1();i_();vZ1();Zc$();fZ1();rW6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;$F6=AA0(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 _m0(X,J),H=vm0(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()});hA0=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]??`${fA0(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 qm0(Q,$.deps.coAuthor)}var GF6=3,xZ1;var Nc$=D(()=>{EB0();MA0();w4();i_();bA0();xZ1=new Map});import{createHmac as Uc$,randomBytes as FF6,timingSafeEqual as HF6}from"crypto";function Oc$(){if(cA0)return cA0;let $;try{let Z=b0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return cA0=$?Buffer.from($):FF6(32),cA0}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,cA0=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 IA0($.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{qA0(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 gA0(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(()=>{MA0();w8();NZ1();TA0();fZ1();RZ1();Nc$();Dc$();vZ1();i_();bA0();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$=AA0(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("/",hP0()),Z.route("/",xx$()),Z.route("/",lh$()),Z.route("/",hh$()),Z.route("/",jA0()),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",cP0()),Z.route("/sso",vP0()),Z.route("/",zA0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",kx$()),$.mountDevAssets)Z.route("/dev-assets",lP0({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",pL0()),Z.route("/mcp/self",EA0()),Z.route("/mcp",oL0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var Pc$=D(()=>{w8();v51();Vx$();y51();dP0();Da();C51();wh$();jh$();vh$();It();I51();rL0();YZ1();bh$();yh$();uh$();dh$();nh$();JZ1();rh$();KZ1();nL0();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$();uz0()});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.268.0",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@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 lA0($){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}=lA0(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]??`${fA0(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 qm0(Q,$.deps.coAuthor)}var GF6=3,xZ1;var Nc$=D(()=>{EB0();MA0();w4();i_();bA0();xZ1=new Map});import{createHmac as Uc$,randomBytes as FF6,timingSafeEqual as HF6}from"crypto";function Oc$(){if(cA0)return cA0;let $;try{let Z=b0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return cA0=$?Buffer.from($):FF6(32),cA0}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,cA0=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 IA0($.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{qA0(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 gA0(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(()=>{MA0();w8();NZ1();TA0();fZ1();RZ1();Nc$();Dc$();vZ1();i_();bA0();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$=AA0(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("/",hP0()),Z.route("/",xx$()),Z.route("/",lh$()),Z.route("/",hh$()),Z.route("/",jA0()),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",cP0()),Z.route("/sso",vP0()),Z.route("/",zA0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",kx$()),$.mountDevAssets)Z.route("/dev-assets",lP0({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",pL0()),Z.route("/mcp/self",EA0()),Z.route("/mcp",oL0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var Pc$=D(()=>{w8();v51();Vx$();y51();dP0();Da();C51();wh$();jh$();vh$();It();I51();rL0();YZ1();bh$();yh$();uh$();dh$();nh$();JZ1();rh$();KZ1();nL0();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$();uz0()});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.268.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 lA0($){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}=lA0(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}=lA0(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 dA0($){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=dA0($.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=dA0($.created);return!!X&&!!Z.lastStripeEventAt&&X<Z.lastStripeEventAt}function cZ1($,Z){let X=dA0($.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:dA0(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 Gn0())?.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 mA0($,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(mA0(W,F))},set(W,F,H){Z.set(mA0(W,F),H)},invalidate(W,F){Z.delete(mA0(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(mA0(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=qL0({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(AL0()).pipeThrough(TL0()).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();ML0();RL0();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 iA0($,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()-nn0),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 hD0(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 pA0}from"fs/promises";import{join as nA0}from"path";async function tA0($){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=nA0($,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 pA0(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=nA0($,Z),G=await s_(Y);for(let K of G){if(!/^\d{2}$/.test(K))continue;let W=nA0(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=nA0(W,N);await pA0(O,{recursive:!0,force:!0}),Q++}}if((await s_(W)).length===0)await pA0(W,{recursive:!0,force:!0})}if((await s_(Y)).length===0)await pA0(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 tA0(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();dP0();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("/",lP0({orgFromPath:!1})),$.route("/api/dev-assets",X)}var Kd$=D(()=>{w8();_51();dP0();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}),