decocms 4.303.8 → 4.303.10

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 (230) hide show
  1. package/dist/client/assets/{AlertCircle-PGhwDRO2.js → AlertCircle-CMTmkvDN.js} +1 -1
  2. package/dist/client/assets/{AreaChart-CJBWqqUo.js → AreaChart-BAuhe9Vl.js} +1 -1
  3. package/dist/client/assets/{ArrowLeft-B9uVc2vG.js → ArrowLeft-9yo27wlH.js} +1 -1
  4. package/dist/client/assets/{ArrowUp-DJY7Zve6.js → ArrowUp-BGDaoV2y.js} +1 -1
  5. package/dist/client/assets/{Check-Bxf9sphg.js → Check-BmG6b3S9.js} +1 -1
  6. package/dist/client/assets/{CheckCircle-DmsnR_0H.js → CheckCircle-CegfzMgc.js} +1 -1
  7. package/dist/client/assets/{ChevronDown-rkENKyK-.js → ChevronDown-C4Y6c1S5.js} +1 -1
  8. package/dist/client/assets/{ChevronRight-iOhwRilW.js → ChevronRight-CGjMKmeV.js} +1 -1
  9. package/dist/client/assets/{ChevronSelectorVertical-DXq2BJQ5.js → ChevronSelectorVertical-ngmhwANB.js} +1 -1
  10. package/dist/client/assets/{ChevronUp-BTvLz9Z3.js → ChevronUp-ffPNSzcT.js} +1 -1
  11. package/dist/client/assets/{Copy01-CmfEZLEX.js → Copy01-BSA2KxC2.js} +1 -1
  12. package/dist/client/assets/{CreditCard01-D8zDomNl.js → CreditCard01-vnTgz9Zm.js} +1 -1
  13. package/dist/client/assets/{DotsVertical-C4FUHLhd.js → DotsVertical-IudFi734.js} +1 -1
  14. package/dist/client/assets/{Download01-DWhRPGnu.js → Download01-CKJeETm_.js} +1 -1
  15. package/dist/client/assets/{Eye-5myjznrD.js → Eye-CUj596h2.js} +1 -1
  16. package/dist/client/assets/{FilterLines-CbDh9x-A.js → FilterLines-Cdjwk80w.js} +1 -1
  17. package/dist/client/assets/{Globe01-De3483Di.js → Globe01-CvQmHlun.js} +1 -1
  18. package/dist/client/assets/{Globe04-Bp8BDu2i.js → Globe04-CAnWG0az.js} +1 -1
  19. package/dist/client/assets/{HardDrive-Cx7IAPKs.js → HardDrive-BOqvh3f2.js} +1 -1
  20. package/dist/client/assets/{Key01-DPPWAcMo.js → Key01-aS3s539d.js} +1 -1
  21. package/dist/client/assets/{LinkExternal01-AwI8KZER.js → LinkExternal01-BDW0S4lO.js} +1 -1
  22. package/dist/client/assets/{LockUnlocked01-3748kmJ6.js → LockUnlocked01-D13s1HCu.js} +1 -1
  23. package/dist/client/assets/{LogOut01-CMxDSEOB.js → LogOut01-B1zyzOxE.js} +1 -1
  24. package/dist/client/assets/{Monitor01-DiyhD_bb.js → Monitor01-DRu8-wuG.js} +1 -1
  25. package/dist/client/assets/{Palette-W6IF35ny.js → Palette-CmMMw9CF.js} +1 -1
  26. package/dist/client/assets/{Play-eM92Vm_y.js → Play-5tBaRjn6.js} +1 -1
  27. package/dist/client/assets/{Plus-dq2COYf5.js → Plus-cBKEMDFU.js} +1 -1
  28. package/dist/client/assets/{SearchLg-iIkz1o5T.js → SearchLg-UV8LoRH5.js} +1 -1
  29. package/dist/client/assets/{SearchMd-BYlSuc8N.js → SearchMd-WJ0ZXI0G.js} +1 -1
  30. package/dist/client/assets/{Settings02-CXwzM3Pz.js → Settings02-Ck1pwHhR.js} +1 -1
  31. package/dist/client/assets/{Share07-BMKip4ut.js → Share07-CpJzrNL5.js} +1 -1
  32. package/dist/client/assets/{Shield01-Bb-uSGdw.js → Shield01-DEjaQBul.js} +1 -1
  33. package/dist/client/assets/{Stars01-CqQHJRLr.js → Stars01-BYuT3-FH.js} +1 -1
  34. package/dist/client/assets/{Stars02-B6cu0HFW.js → Stars02-B7tpyypT.js} +1 -1
  35. package/dist/client/assets/{Sun-19Knp8qE.js → Sun-C0qjCz3X.js} +1 -1
  36. package/dist/client/assets/{SwitchHorizontal01-B5yz9Mpd.js → SwitchHorizontal01-HN5dBMvf.js} +1 -1
  37. package/dist/client/assets/{Tool01-BFgl2pPh.js → Tool01-DlNc5wfk.js} +1 -1
  38. package/dist/client/assets/{Tool02-3F01Yxkf.js → Tool02-BL3Z96Su.js} +1 -1
  39. package/dist/client/assets/{Trash01-DVq5ve6z.js → Trash01-CnmTPvZZ.js} +1 -1
  40. package/dist/client/assets/{TrendUp01-CVyejr0l.js → TrendUp01-CsNGUI9F.js} +1 -1
  41. package/dist/client/assets/{Upload01-BIJdchKQ.js → Upload01-B1ilTb3Q.js} +1 -1
  42. package/dist/client/assets/{User01-CqC6afsw.js → User01-BPID40-j.js} +1 -1
  43. package/dist/client/assets/{UserSquare-D8klbHyw.js → UserSquare-LjplIYV9.js} +1 -1
  44. package/dist/client/assets/{Users01-KK5EirG4.js → Users01-Dx9RduTL.js} +1 -1
  45. package/dist/client/assets/{Users03-CJj-Fh7M.js → Users03-BY_Lt-u6.js} +1 -1
  46. package/dist/client/assets/{XCircle-Vt9JFc1C.js → XCircle-BKXstYsQ.js} +1 -1
  47. package/dist/client/assets/{XClose-CHrI2bf_.js → XClose-CpaIl_OM.js} +1 -1
  48. package/dist/client/assets/{YAxis-Cl4FqPWP.js → YAxis-DS4tjRsr.js} +1 -1
  49. package/dist/client/assets/{Zap-CU7NjblA.js → Zap-CGwg-Sr1.js} +1 -1
  50. package/dist/client/assets/{ZapSquare-Bdu8likQ.js → ZapSquare-BhjdaiQ-.js} +1 -1
  51. package/dist/client/assets/{access-gate-CTMD9zCc.js → access-gate-CbM1wY7M.js} +1 -1
  52. package/dist/client/assets/{agent-icon-B63Eu8sz.js → agent-icon-BOJBZxvL.js} +1 -1
  53. package/dist/client/assets/{agents-list-cGhBeapI.js → agents-list-bdQSWu3G.js} +1 -1
  54. package/dist/client/assets/{ai-providers-DLsUDKb2.js → ai-providers-Dz0UwtKX.js} +1 -1
  55. package/dist/client/assets/{alert-DmvymNvM.js → alert-C53imx2L.js} +1 -1
  56. package/dist/client/assets/{alert-dialog-Dpeu20UJ.js → alert-dialog-D2aFNPAH.js} +1 -1
  57. package/dist/client/assets/{api-keys-C1DKf74r.js → api-keys-nUizK3q2.js} +1 -1
  58. package/dist/client/assets/{app-editor-DaB4SolT.js → app-editor-B8CDXGBK.js} +1 -1
  59. package/dist/client/assets/{auth-Ba5jKM30.js → auth-b8LLd7qm.js} +1 -1
  60. package/dist/client/assets/{auth-catchall-Dz-63fwm.js → auth-catchall-57Lx4ba1.js} +1 -1
  61. package/dist/client/assets/{auth-entry-Bwp_EN1E.js → auth-entry-CRtbo99v.js} +1 -1
  62. package/dist/client/assets/{auth-split-layout-himV7Fpf.js → auth-split-layout-BMdNkdoi.js} +1 -1
  63. package/dist/client/assets/{authenticate-and-persist-oauth-D8HL9uvi.js → authenticate-and-persist-oauth-B5hNLgrJ.js} +1 -1
  64. package/dist/client/assets/{automation-list-row-CiMMQLUz.js → automation-list-row-kbViZmtL.js} +1 -1
  65. package/dist/client/assets/{automation-runs-B-2CicLq.js → automation-runs-B6C35ouG.js} +2 -2
  66. package/dist/client/assets/{automations-BTPpCgSZ.js → automations-DK4jL6c8.js} +1 -1
  67. package/dist/client/assets/{avatar-DZZnGqMN.js → avatar-Dw6HXaRN.js} +1 -1
  68. package/dist/client/assets/{badge-BMyi3urZ.js → badge-DlNjaNBM.js} +1 -1
  69. package/dist/client/assets/{block-document-XhGqIffh.js → block-document-_6vnjYuF.js} +1 -1
  70. package/dist/client/assets/{breadcrumb-B8oJfWBX.js → breadcrumb-Czb3Bs9F.js} +1 -1
  71. package/dist/client/assets/{buckets-CVQkdUci.js → buckets-B4ozpVKY.js} +1 -1
  72. package/dist/client/assets/{bulk-category-panel-inklT4LE.js → bulk-category-panel-BciGOCRh.js} +1 -1
  73. package/dist/client/assets/{capability-load-error-LL8CfCoJ.js → capability-load-error-C5IXFhHB.js} +1 -1
  74. package/dist/client/assets/{cards-CmrIxZgj.js → cards-BPbGR6Ol.js} +1 -1
  75. package/dist/client/assets/{category-editor-DP8vZzez.js → category-editor-D91yMzIv.js} +1 -1
  76. package/dist/client/assets/{chart-CfChGvpy.js → chart-CE-aaSIV.js} +1 -1
  77. package/dist/client/assets/{chat-context-DJ4Dk0S-.js → chat-context-BDd-jb5j.js} +1 -1
  78. package/dist/client/assets/{checkbox-XKKoBHZM.js → checkbox-CGZPHwNl.js} +1 -1
  79. package/dist/client/assets/{choose-editor-D6jiY_bF.js → choose-editor-DGrpJZbe.js} +1 -1
  80. package/dist/client/assets/{cli-auth-success-S4_0NuBI.js → cli-auth-success-lqy21_sY.js} +1 -1
  81. package/dist/client/assets/{collection-detail-BvBBjQau.js → collection-detail-DWtYWG6w.js} +1 -1
  82. package/dist/client/assets/{collection-display-button-CS_xY6K3.js → collection-display-button-DJH0raBq.js} +1 -1
  83. package/dist/client/assets/{collection-search-DJnrEZ71.js → collection-search-C37PdqMF.js} +1 -1
  84. package/dist/client/assets/{collection-table-wrapper-BJ9L-dnG.js → collection-table-wrapper-BGytufe1.js} +1 -1
  85. package/dist/client/assets/{collection-tabs-CaPCV_45.js → collection-tabs-BHpVd8oQ.js} +1 -1
  86. package/dist/client/assets/{command-OVdKPj3Y.js → command-CBaUZr6u.js} +1 -1
  87. package/dist/client/assets/{commerce-onboarding-DuLlyW20.js → commerce-onboarding-GL_96WB1.js} +1 -1
  88. package/dist/client/assets/{config-BD3Ytvp8.js → config-C29F3CXY.js} +1 -1
  89. package/dist/client/assets/{connect-CnqHph6H.js → connect-D-RJK-Ht.js} +1 -1
  90. package/dist/client/assets/{connection-card-BaXz-bbX.js → connection-card-B1Kv98ke.js} +1 -1
  91. package/dist/client/assets/{connection-detail-2r-N-iEH.js → connection-detail-yY_gSpqp.js} +1 -1
  92. package/dist/client/assets/{connection-form-helpers-CJg4MNZR.js → connection-form-helpers-Bu5E1m7b.js} +1 -1
  93. package/dist/client/assets/{connection-CiFMtILQ.js → connection-obR7RNQB.js} +1 -1
  94. package/dist/client/assets/{connections-C5C7BgZ6.js → connections-CmRsq_H1.js} +1 -1
  95. package/dist/client/assets/{decopilot-sse-pool-DGqF2o_I.js → decopilot-sse-pool-C2DRqqzb.js} +1 -1
  96. package/dist/client/assets/{dialog-BxuBkJcO.js → dialog-B-aNs606.js} +1 -1
  97. package/dist/client/assets/{domain-settings-BRCooZ2L.js → domain-settings-Bm8Kxxgr.js} +1 -1
  98. package/dist/client/assets/{drawer-BiYtLN24.js → drawer-gWbrxszo.js} +1 -1
  99. package/dist/client/assets/{dropdown-menu-CMqKPsuY.js → dropdown-menu-nfSJEEyf.js} +1 -1
  100. package/dist/client/assets/{empty-state-BGPpgK7H.js → empty-state-CRZWFScF.js} +1 -1
  101. package/dist/client/assets/{extract-connection-data-CfN4JT7s.js → extract-connection-data-Bhc-mbrQ.js} +1 -1
  102. package/dist/client/assets/{file-explorer-CK9SpwVD.js → file-explorer-Cp0PPast.js} +1 -1
  103. package/dist/client/assets/{file-type-icon-AW-5rIm-.js → file-type-icon-CKHXdh6n.js} +1 -1
  104. package/dist/client/assets/{form-B_-2pymS.js → form-CZfjrPrb.js} +1 -1
  105. package/dist/client/assets/{general-DMqvv3EF.js → general-DNVgPVRI.js} +1 -1
  106. package/dist/client/assets/{github-repo-picker-CrWAAS8j.js → github-repo-picker-D8Cx-NPj.js} +1 -1
  107. package/dist/client/assets/{hooks-BYaEL5hE.js → hooks-adwUKQEy.js} +1 -1
  108. package/dist/client/assets/{index-BZydV5L6.js → index-8ZN8Ix8B.js} +1 -1
  109. package/dist/client/assets/{index-Cni5Elcv.js → index-B55dIkar.js} +1 -1
  110. package/dist/client/assets/{index-C2j-G59A.js → index-CrNgGfla.js} +1 -1
  111. package/dist/client/assets/{index-DqQa5Zl3.js → index-CtrTWESE.js} +3 -3
  112. package/dist/client/assets/{index-NCiqjkHD.js → index-DGAiD-n3.js} +1 -1
  113. package/dist/client/assets/{index-D_7OGi26.js → index-DYAbD7da.js} +6 -6
  114. package/dist/client/assets/{index-De-8tMj2.js → index-D_IG02oY.js} +1 -1
  115. package/dist/client/assets/{index-Tbn4dVD0.js → index-DcOJM9nx.js} +1 -1
  116. package/dist/client/assets/index-Hh5U0t8v.js +1 -0
  117. package/dist/client/assets/{index-redirect-k9eOZNDJ.js → index-redirect-DUKygWst.js} +1 -1
  118. package/dist/client/assets/{infra-billing-Bspc8tg_.js → infra-billing-CVvxfIeX.js} +1 -1
  119. package/dist/client/assets/{input-DkV3ETR3.js → input-CnqhmWgr.js} +1 -1
  120. package/dist/client/assets/{integration-icon-BoFzJjKC.js → integration-icon-BoPssjzH.js} +1 -1
  121. package/dist/client/assets/{invite-member-dialog-DyL0D_X-.js → invite-member-dialog-JQJrSWL2.js} +1 -1
  122. package/dist/client/assets/{label-KC1ikFji.js → label-CNWDPGce.js} +1 -1
  123. package/dist/client/assets/{layout-DKPNrD20.js → layout-gxIt7dCQ.js} +1 -1
  124. package/dist/client/assets/{login-I3IQPqr5.js → login-yMs2vwea.js} +1 -1
  125. package/dist/client/assets/{mcp-oauth-Cwc8HeWv.js → mcp-oauth-CdtsP1Qq.js} +1 -1
  126. package/dist/client/assets/{members-ClVhSGQ3.js → members-BCneMGrn.js} +1 -1
  127. package/dist/client/assets/{monaco-editor-CnrWCg1_.js → monaco-editor-Dq5_TFCT.js} +1 -1
  128. package/dist/client/assets/{monitoring-stats-row-MIYJoNSd.js → monitoring-stats-row-CUA8Uird.js} +1 -1
  129. package/dist/client/assets/{multi-select-BoTwMnEV.js → multi-select-BTFHHi5z.js} +1 -1
  130. package/dist/client/assets/{oauth-callback-DWMlY2ti.js → oauth-callback-C_BHFwHc.js} +1 -1
  131. package/dist/client/assets/{oauth-callback-ai-provider-BaYdED9Y.js → oauth-callback-ai-provider-DlOq5YBU.js} +1 -1
  132. package/dist/client/assets/{onboarding-Bja4QQvU.js → onboarding-BaE_M2_o.js} +1 -1
  133. package/dist/client/assets/{org-layout-ydE6UfEW.js → org-layout-BoVofWNS.js} +1 -1
  134. package/dist/client/assets/{organization-choice-TLnNz4DS.js → organization-choice-vQk7cGU1.js} +1 -1
  135. package/dist/client/assets/{orgs-BDxRjcgN.js → orgs-GPTFpdoE.js} +1 -1
  136. package/dist/client/assets/{page-seo-form-DPQ-LTT7.js → page-seo-form-CXxD2XhX.js} +1 -1
  137. package/dist/client/assets/{popover-WhKhwzu4.js → popover-ER5kFhd5.js} +1 -1
  138. package/dist/client/assets/{post-calendar-BdgWFcrP.js → post-calendar-D7O4FfKf.js} +1 -1
  139. package/dist/client/assets/{post-editor-CE65YVde.js → post-editor-BNQqdZZA.js} +1 -1
  140. package/dist/client/assets/{primitives-CSQyTS5F.js → primitives-DSHOkpQD.js} +1 -1
  141. package/dist/client/assets/{profile-D9tRSxSF.js → profile-BAQ1R0bW.js} +1 -1
  142. package/dist/client/assets/{project-app-view-B0l5k-nN.js → project-app-view-D4XIMelY.js} +1 -1
  143. package/dist/client/assets/{prompts-CyWrTL-P.js → prompts-D088iVdR.js} +1 -1
  144. package/dist/client/assets/record-editor-CqyDT08j.js +1 -0
  145. package/dist/client/assets/{redirect-editor-CISbjROl.js → redirect-editor-BQMfy2K_.js} +1 -1
  146. package/dist/client/assets/registry-DLXJEo7g.js +2 -0
  147. package/dist/client/assets/{registry-layout-BIVE7r74.js → registry-layout-CwG38xbF.js} +1 -1
  148. package/dist/client/assets/{reports-n6yZX9C-.js → reports-BtAto5AY.js} +1 -1
  149. package/dist/client/assets/{require-capability-Db4-e-od.js → require-capability-EFPYSMVg.js} +1 -1
  150. package/dist/client/assets/{required-auth-layout-Dl92FDtz.js → required-auth-layout-CBgndaXv.js} +1 -1
  151. package/dist/client/assets/{reset-password-CS3apV_D.js → reset-password-DuZiuU8M.js} +1 -1
  152. package/dist/client/assets/{review-settings-CmS4Frxm.js → review-settings-QlbwzteJ.js} +1 -1
  153. package/dist/client/assets/{roles-kuoWXrE3.js → roles-CUuldCBY.js} +1 -1
  154. package/dist/client/assets/{scroll-area-DKgo7rW6.js → scroll-area-BS1Ozt1z.js} +1 -1
  155. package/dist/client/assets/{search-input-7JEBvBvo.js → search-input-D8VtE4yy.js} +1 -1
  156. package/dist/client/assets/{secrets-CF0CoDkQ.js → secrets-srSUutpz.js} +1 -1
  157. package/dist/client/assets/{sections-editor-BtnRc_Ud.js → sections-editor-D9WBwC0x.js} +1 -1
  158. package/dist/client/assets/{select-DkB5AnLm.js → select-CHJpOmN9.js} +1 -1
  159. package/dist/client/assets/{select-model-oJE-ijeb.js → select-model-Dj8BSYbZ.js} +1 -1
  160. package/dist/client/assets/{self-tool-result-DK-smZRK.js → self-tool-result-D_GONLMm.js} +1 -1
  161. package/dist/client/assets/{seo-editor-CpBqUl6-.js → seo-editor-BnYyFIzq.js} +1 -1
  162. package/dist/client/assets/{settings-layout-D74s5HPq.js → settings-layout-CytB_91u.js} +1 -1
  163. package/dist/client/assets/{shell-controls-CEDVQdcq.js → shell-controls-CRoUGWTu.js} +1 -1
  164. package/dist/client/assets/{shell-layout-BADWD7u-.js → shell-layout-Bgy4QDik.js} +1 -1
  165. package/dist/client/assets/{spinner-igbQiFTa.js → spinner-CQWcIDGa.js} +1 -1
  166. package/dist/client/assets/{sso-CsK0Rma0.js → sso-DlArB0GA.js} +1 -1
  167. package/dist/client/assets/{store-Btm9MhR_.js → store-BxpICXvO.js} +1 -1
  168. package/dist/client/assets/store-registry-Czt53bDT.js +2 -0
  169. package/dist/client/assets/{super-agent-icon-OT2Kheot.js → super-agent-icon-fdpKpsLJ.js} +1 -1
  170. package/dist/client/assets/{switch-VFc2GlT2.js → switch-B0i38R-U.js} +1 -1
  171. package/dist/client/assets/{synced-repos-BCv4Uo6m.js → synced-repos-B1zeudAm.js} +1 -1
  172. package/dist/client/assets/{table-BxyLS7KR.js → table-Df10FVfQ.js} +1 -1
  173. package/dist/client/assets/{tabs-CFGVzE2l.js → tabs-DifZwfLS.js} +1 -1
  174. package/dist/client/assets/{task-board-tRTGLnVr.js → task-board-stQQll8e.js} +1 -1
  175. package/dist/client/assets/{tasks-Eaa2U8IH.js → tasks-D0aEaaS8.js} +1 -1
  176. package/dist/client/assets/{textarea-C8Th-lST.js → textarea-Beywpl1x.js} +1 -1
  177. package/dist/client/assets/{toggle-group-CmkqiWzS.js → toggle-group-D8hiKjrH.js} +1 -1
  178. package/dist/client/assets/{toolbar-DLJAY821.js → toolbar-vYm6faIe.js} +1 -1
  179. package/dist/client/assets/{track-DiDEzSlH.js → track-D9gviXIR.js} +1 -1
  180. package/dist/client/assets/{types-ouH604dG.js → types-BB7HRYbN.js} +1 -1
  181. package/dist/client/assets/{use-ai-providers-D4gEgfJn.js → use-ai-providers-C5AtyNJj.js} +1 -1
  182. package/dist/client/assets/{use-api-keys-sJLAoQ4a.js → use-api-keys-DVW8392B.js} +1 -1
  183. package/dist/client/assets/{use-automations-o1ZICiej.js → use-automations-CVOS6Gbf.js} +1 -1
  184. package/dist/client/assets/{use-autosave-Cu3BGbYF.js → use-autosave-C2NMvxeW.js} +1 -1
  185. package/dist/client/assets/{use-connection-Bm6g-wGP.js → use-connection-JPaAS2fH.js} +1 -1
  186. package/dist/client/assets/{use-copy-BuZUSLpX.js → use-copy-B8LGnW9A.js} +1 -1
  187. package/dist/client/assets/{use-create-virtual-mcp-DUATBGMJ.js → use-create-virtual-mcp-DYogpmLM.js} +1 -1
  188. package/dist/client/assets/{use-debounced-autosave-4etvWhG5.js → use-debounced-autosave-2xH00R3Y.js} +1 -1
  189. package/dist/client/assets/{use-debounced-value-D1gdJBEI.js → use-debounced-value-vP9-B4wZ.js} +1 -1
  190. package/dist/client/assets/{use-decopilot-events-yPufyE4B.js → use-decopilot-events-DkiL7cci.js} +1 -1
  191. package/dist/client/assets/{use-delete-connection-BfstkMHu.js → use-delete-connection-n-74DZMR.js} +1 -1
  192. package/dist/client/assets/{use-deployment-admin-CEYa2LQB.js → use-deployment-admin-st3XYt2T.js} +1 -1
  193. package/dist/client/assets/{use-destination-route-DCSYoEW2.js → use-destination-route-cDhIXrif.js} +1 -1
  194. package/dist/client/assets/{use-file-configs-D8WWJp7w.js → use-file-configs-UTTOKKod.js} +1 -1
  195. package/dist/client/assets/{use-infinite-scroll-DTe8ww8m.js → use-infinite-scroll-Bjh1ZOJz.js} +1 -1
  196. package/dist/client/assets/{use-join-requests-WIHSQCHU.js → use-join-requests-iHgGhRM3.js} +1 -1
  197. package/dist/client/assets/{use-mcp-auth-status-53kOT8Xy.js → use-mcp-auth-status-BI7B4w0i.js} +1 -1
  198. package/dist/client/assets/{use-mcp-client-DHyMnLAK.js → use-mcp-client-uSoC8XtC.js} +1 -1
  199. package/dist/client/assets/{use-mcp-tools-_SG225rz.js → use-mcp-tools-B5KwrPdk.js} +1 -1
  200. package/dist/client/assets/{use-members-mBfLaYfb.js → use-members-O7K_Dw-T.js} +1 -1
  201. package/dist/client/assets/{use-navigate-to-agent-IpWMsrVD.js → use-navigate-to-agent-DD_wgcDL.js} +1 -1
  202. package/dist/client/assets/{use-org-auth-client-Cgtlq-gg.js → use-org-auth-client-B7GgVMVa.js} +1 -1
  203. package/dist/client/assets/{use-org-repo-syncs-Skvs4vxS.js → use-org-repo-syncs-B-fN4-sg.js} +1 -1
  204. package/dist/client/assets/{use-org-sso-D76owulJ.js → use-org-sso-DEUJfqju.js} +1 -1
  205. package/dist/client/assets/{use-organization-roles-D8-Mt5J_.js → use-organization-roles-DC50At2P.js} +1 -1
  206. package/dist/client/assets/{use-organization-settings-BtEm4Xt4.js → use-organization-settings-33DPQ4xx.js} +1 -1
  207. package/dist/client/assets/use-panel-navigate-Bwqtgsls.js +1 -0
  208. package/dist/client/assets/{use-registry-connections-khTMZRTS.js → use-registry-connections-DzHQKCBk.js} +1 -1
  209. package/dist/client/assets/{use-secrets-B-BU1JlH.js → use-secrets-DAUYod4R.js} +1 -1
  210. package/dist/client/assets/{use-section-preview-base-C21xpYTB.js → use-section-preview-base-CoUwLk3d.js} +1 -1
  211. package/dist/client/assets/{use-status-sounds-BMsB-E6r.js → use-status-sounds-D-98VCnU.js} +1 -1
  212. package/dist/client/assets/{use-tags-BmHoKuW3.js → use-tags-Db50zMJp.js} +1 -1
  213. package/dist/client/assets/{use-view-mode-BDjOfYGQ.js → use-view-mode-Bcamhsiu.js} +1 -1
  214. package/dist/client/assets/{use-virtual-mcp-DBpWBX1F.js → use-virtual-mcp-CR9iSERj.js} +1 -1
  215. package/dist/client/assets/useInfiniteQuery-BJiVddph.js +1 -0
  216. package/dist/client/assets/useSuspenseInfiniteQuery-C1XIRGeA.js +1 -0
  217. package/dist/client/assets/{users-CtbSe9r6.js → users-BNeE9wGb.js} +1 -1
  218. package/dist/client/assets/{variant-calendar-BmOJwXey.js → variant-calendar-qAGFT7Rt.js} +1 -1
  219. package/dist/client/assets/{view-mode-toggle-BU4cOL93.js → view-mode-toggle-B8odvl3Z.js} +1 -1
  220. package/dist/client/index.html +1 -1
  221. package/dist/server/cli.js +519 -518
  222. package/dist/server/server.js +3 -2
  223. package/package.json +1 -1
  224. package/dist/client/assets/index-BEPvne-z.js +0 -1
  225. package/dist/client/assets/record-editor-DviGFKiO.js +0 -1
  226. package/dist/client/assets/registry-BsrGFj-v.js +0 -2
  227. package/dist/client/assets/store-registry-Bc4P5ky2.js +0 -2
  228. package/dist/client/assets/use-panel-navigate-Buf3cYai.js +0 -1
  229. package/dist/client/assets/useInfiniteQuery-BP38leyE.js +0 -1
  230. package/dist/client/assets/useSuspenseInfiniteQuery-DDPrSu8H.js +0 -1
@@ -886,7 +886,8 @@ You are the Usage Manager. You analyze how this workspace is actually used \u201
886
886
  b. MONITORING_LOGS_LIST with isError true (plus connectionId/toolName/virtualMcpId filters) \u2192 failing calls.
887
887
  c. MONITORING_LOG_GET on specific log ids for full input/output when the error message isn't enough.
888
888
  d. Report the failing tool/connection, error pattern, and suggest the fix or owner.
889
- </workflows>`,gr1={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:lr8,getId:qQ.USAGE_MANAGER}});function ic0($){return FE.find((Z)=>$.startsWith(`${Z.id}_`))??null}async function mr8($,Z){if("resolveRuntime"in $)return $.resolveRuntime(Z);return{instructions:$.instructions,selectedTools:$.selectedTools}}async function R90({virtualMcp:$,agentId:Z=$.id,organizationId:X,ctx:Q}){let Y=ic0(Z);if(!Y)return $;let G=await mr8(Y,{orgId:X,ctx:Q}),J=G.selectedTools?[...G.selectedTools]:null;return{...$,metadata:{...$.metadata??{},instructions:G.instructions},connections:$.connections.map((W)=>({...W,selected_tools:J}))}}async function I90($,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 ur1($,Z,X){let Q={self:C8.SELF($),registry:C8.REGISTRY($),"community-registry":C8.COMMUNITY_REGISTRY($)};await Promise.all(dr8.map((Y)=>X.delete(`${Y}${$}`))),await Promise.all(FE.map(async(Y)=>{let G=Y.getId($),J=await X.findById(G,$),K=(Y.selectedConnections??["self"]).map((F)=>Q[F]);if(J){await X.update(G,Z,{metadata:{...J.metadata??{},instructions:Y.instructions},connections:K.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:K.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 dr8,FE;var rx=D(()=>{_8();Rr1();qr1();kr1();vr1();br1();yr1();hr1();dr8=["studio-task-manager_"],FE=[_r1,Tr1,Mr1,fr1,Ir1,xr1,gr1]});import{DBOS as q90}from"@dbos-inc/dbos-sdk";async function ir8($){let Z=r8(),X=new Cb(Z.db);await ur1($.orgId,$.createdBy,X)}async function pr8($){let Z=r8(),X=new Cb(Z.db);for(let Q of FE){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((K)=>{let F=K.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((K)=>({connection_id:K.connection_id,selected_tools:K.selected_tools,selected_resources:K.selected_resources,selected_prompts:J}))})}}async function nr8($){await q90.runStep(()=>ir8($),{name:"installStudioPack"}),await q90.runStep(()=>pr8($),{name:"backfillSelectedPrompts"})}async function pc0($){await q90.startWorkflow(tr8,{workflowID:`install-studio-pack:${or8}:${$.orgId}`})($)}async function cr1(){let Z=await r8().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 T90(Array.from(X),10,async([Q,Y])=>{try{await pc0({orgId:Q,createdBy:Y})}catch(G){console.error("[studio-pack-backfill] enqueue failed",{orgId:Q},G)}})}var tr8,or8="v6";var M90=D(()=>{iG();Gg0();rx();tr8=q90.registerWorkflow(nr8,{name:"installStudioPackWorkflow"})});class di{constructor(){this._messageQueue=[]}static createLinkedPair(){let $=new di,Z=new di;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 R8}from"zod";var dr1,lr1=1000,rr8=500,mr1,ir1,pr1,nr1,tr1,or1,rr1,ar1,sr1,er1;var ax=D(()=>{dr1=R8.record(R8.string(),R8.array(R8.string())),mr1=R8.record(R8.string(),R8.array(R8.string()).max(rr8)).refine(($)=>Object.keys($).length<=lr1,{message:`Permissions cannot grant more than ${lr1} resources`}),ir1=R8.object({id:R8.string().describe("Unique identifier for the API key"),name:R8.string().describe("Human-readable name for the API key"),userId:R8.string().describe("ID of the user who owns this API key"),permissions:dr1.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:R8.string().datetime().nullable().optional().describe("Expiration date of the API key (ISO 8601)"),createdAt:R8.string().datetime().describe("When the API key was created (ISO 8601)")}),pr1=R8.object({name:R8.string().min(1).max(64).describe("Human-readable name for the API key"),permissions:mr1.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:R8.number().positive().optional().describe("Expiration time in seconds. If not provided, key never expires."),metadata:R8.record(R8.string(),R8.unknown()).optional().describe("Additional metadata to store with the API key")}),nr1=R8.object({id:R8.string().describe("Unique identifier for the API key"),name:R8.string().describe("Human-readable name for the API key"),key:R8.string().describe("The actual API key value. STORE THIS SECURELY - it will not be shown again!"),permissions:dr1.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:R8.string().datetime().nullable().optional().describe("Expiration date of the API key (ISO 8601)"),createdAt:R8.string().datetime().describe("When the API key was created (ISO 8601)")}),tr1=R8.object({}),or1=R8.object({items:R8.array(ir1).describe("List of API keys (without key values)")}),rr1=R8.object({keyId:R8.string().describe("ID of the API key to update"),name:R8.string().min(1).max(64).optional().describe("New name for the API key"),permissions:mr1.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:R8.record(R8.string(),R8.unknown()).optional().describe("New metadata. Replaces existing metadata.")}),ar1=R8.object({item:ir1.describe("The updated API key (without key value)")}),sr1=R8.object({keyId:R8.string().describe("ID of the API key to delete")}),er1=R8.object({success:R8.boolean().describe("Whether the deletion was successful"),keyId:R8.string().describe("ID of the deleted API key")})});var nc0;var $a1=D(()=>{S4();M0();ax();nc0=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:pr1,outputSchema:nr1,handler:async($,Z)=>{t(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 tc0;var Za1=D(()=>{S4();M0();ax();tc0=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:sr1,outputSchema:er1,handler:async($,Z)=>{t(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((K)=>K.id===$.keyId);if(!Y)throw Error("API key not found");let J=Y.metadata?.organization?.id,W=Z.organization?.id;if(J!==W)throw Error("Cannot delete API key from another organization");if(await Z.boundAuth.apiKey.delete($.keyId),W)x1.capture({distinctId:X,event:"api_key_deleted",groups:{organization:W},properties:{key_id:$.keyId,organization_id:W}});return{success:!0,keyId:$.keyId}}})});var oc0;var Xa1=D(()=>{M0();ax();oc0=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:tr1,outputSchema:or1,handler:async($,Z)=>{t(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 rc0;var Qa1=D(()=>{M0();ax();rc0=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:rr1,outputSchema:ar1,handler:async($,Z)=>{if(t(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,W=Z.organization?.id;if(J!==W)throw Error("Cannot update API key from another organization");let K=await Z.boundAuth.apiKey.update({keyId:$.keyId,name:$.name,permissions:$.permissions,metadata:{...$.metadata,organization:Z.organization}});if(!K)throw Error(`Failed to update API key: ${$.keyId}`);return{item:{id:K.id,name:K.name??$.name??"Unnamed Key",userId:K.userId,permissions:K.permissions??{},expiresAt:K.expiresAt?K.expiresAt instanceof Date?K.expiresAt.toISOString():K.expiresAt:null,createdAt:K.createdAt instanceof Date?K.createdAt.toISOString():K.createdAt}}}})});var Ya1=D(()=>{$a1();Za1();Xa1();Qa1();ax()});function pB($){let Z=$.trim();if(!Z)return{ok:!1,error:"Enter a website URL."};let X=sr8.test(Z),Q=er8.test(Z),Y=$a8.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 W=J.hostname.split(".");if(W.length<2||W.some((K)=>!K||!Za8.test(K)))return{ok:!1,error:"Enter a valid website URL."};return J.protocol="https:",{ok:!0,value:J.origin}}var sr8,er8,$a8,Za8;var mi=D(()=>{sr8=/^[a-zA-Z][a-zA-Z\d+.-]*:/,er8=/^[a-zA-Z][a-zA-Z\d+.-]*:\/\//,$a8=/^[^\s/:?#]+\.[^\s/:?#]+:\d+(?:[/?#]|$)/,Za8=/^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$/i});import{z as iX}from"zod";function GK($){if($.baseUrl)return $.baseUrl.replace(/\/+$/,"");return(($.settings??b0()).reportsInternalApiUrl??Xa8).replace(/\/+$/,"")}function Ja1($={}){return`${GK($)}/api/v2/mcp`}function HE($){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 k90($){return new URL($).hostname}function Ya8($){return $==="ownership_unverified"||$==="already_claimed_by_other_org"}function Ga8($,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 Ja8($){let Z=await ii($);return Ya8(Z?.error)?Z.error:"unknown"}async function ii($){let Z=await $.text().catch(()=>"");if(!Z)return;try{return JSON.parse(Z)}catch{return}}async function ac0($){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 Ka1($,Z={}){let X=GK(Z),Q=HE(Z),Y=Z.fetchImpl??fetch,G=k90($.siteUrl),J=`${X}/api/v2/internal/diagnostics/${encodeURIComponent(G)}/upgrade`,W=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(!W.ok){let F=await Ja8(W);throw new Wa1(F,{email:$.email,domain:G})}let K=Qa8.safeParse(await ii(W));if(!K.success)throw Error("Commerce Discovery auth response did not include a token.");return{authorizationToken:K.data.token}}async function Fa1($,Z={}){let X=GK(Z),Q=HE(Z),Y=Z.fetchImpl??fetch,G=k90($.siteUrl),J=`${X}/api/v2/internal/diagnostics/${encodeURIComponent(G)}/bindings`,W=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(W.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(W.status===422){let F=Ga1.safeParse(await ii(W));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(!W.ok)throw Error(await ac0(W));let K=Ga1.safeParse(await ii(W));if(!K.success||!K.data.binding)throw Error("Commerce Discovery bind response did not include a binding.");return{ok:!0,resourceId:K.data.binding.resource_id,evidence:K.data.binding.evidence}}async function Ha1($,Z={}){let X=GK(Z),Q=HE(Z),Y=Z.fetchImpl??fetch,G=k90($.siteUrl),J=`${X}/api/v2/internal/diagnostics/${encodeURIComponent(G)}/run`,W=await Y(J,{method:"POST",headers:{Authorization:`Bearer ${Q}`,"Content-Type":"application/json"},body:JSON.stringify({org_id:$.orgId,...$.githubRepo?{github_repo:$.githubRepo}:{}})});if(W.status===409)return{triggered:!1,reason:"not_upgraded"};if(!W.ok)throw Error(await ac0(W));return{triggered:!0}}async function Na1($,Z={}){let X=GK(Z),Q=HE(Z),Y=Z.fetchImpl??fetch,G=k90($.siteUrl),J=`${X}/api/v2/internal/diagnostics/${encodeURIComponent(G)}/connections/status?org_id=${encodeURIComponent($.orgId)}`,W=await Y(J,{method:"GET",headers:{Authorization:`Bearer ${Q}`}});if(W.status===404||W.status===409)return{providers:{},claimed:!1};if(!W.ok)throw Error(await ac0(W));let K=Wa8.safeParse(await ii(W));return{providers:K.success?K.data.providers:{},claimed:!0}}var Xa8,Qa8,Ga1,Wa1,Wa8;var NE=D(()=>{_8();R$();Xa8=new URL(ug1).origin,Qa8=iX.object({token:iX.string().min(1)}),Ga1=iX.object({binding:iX.object({resource_id:iX.string(),evidence:iX.string()}).optional(),reason:iX.string().optional(),detail:iX.string().optional()});Wa1=class Wa1 extends Error{code;constructor($,Z={}){super(Ga8($,Z));this.name="CommerceDiscoveryClaimError",this.code=$}};Wa8=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 gY}from"zod";var Ka8,Fa8,sc0;var Ua1=D(()=>{mi();M0();NE();Ka8=gY.object({siteUrl:gY.string().min(1).describe("Website URL of the store being bound."),provider:gY.enum(["ga4","gsc"]).describe("Which Google source to bind: ga4 (Analytics) or gsc (Search Console)."),resourceId:gY.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/).")}),Fa8=gY.discriminatedUnion("ok",[gY.object({ok:gY.literal(!0),resourceId:gY.string(),evidence:gY.string()}),gY.object({ok:gY.literal(!1),reason:gY.string(),detail:gY.string()})]),sc0=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:Ka8,outputSchema:Fa8,handler:async($,Z)=>{t(Z);let X=o(Z);await Z.access.check();let Q=pB($.siteUrl);if(!Q.ok)throw Error(Q.error);return Fa1({siteUrl:Q.value,orgId:X.id,provider:$.provider,resourceId:$.resourceId.trim()})}})});import{z as JK}from"zod";var Ha8,Na8,ec0;var Ba1=D(()=>{mi();M0();NE();Ha8=JK.object({siteUrl:JK.string().min(1).describe("Website URL of the store to inspect.")}),Na8=JK.object({providers:JK.record(JK.string(),JK.object({connected:JK.boolean(),via:JK.enum(["oauth","sa"]).nullable(),resource:JK.string().nullable()})),claimed:JK.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.")}),ec0=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:Ha8,outputSchema:Na8,handler:async($,Z)=>{t(Z);let X=o(Z);await Z.access.check();let Q=pB($.siteUrl);if(!Q.ok)throw Error(Q.error);return Na1({siteUrl:Q.value,orgId:X.id})}})});import{z as pi}from"zod";var Ua8,Ba8,$l0;var Oa1=D(()=>{_8();mi();M0();NE();Ua8=pi.object({siteUrl:pi.string().min(1).describe("Website URL to run the diagnostic for.")}),Ba8=pi.object({triggered:pi.boolean(),reason:pi.string().optional()}),$l0=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:Ua8,outputSchema:Ba8,handler:async($,Z)=>{t(Z);let X=o(Z);await Z.access.check();let Q=pB($.siteUrl);if(!Q.ok)throw Error(Q.error);let Y=C8.COMMERCE_DISCOVERY(X.id),J=(await Z.storage.connections.findById(Y,X.id))?.configuration_state,W=J&&typeof J==="object"&&typeof J.github_repo==="string"&&J.github_repo.length>0?J.github_repo:void 0;return Ha1({siteUrl:Q.value,orgId:X.id,githubRepo:W})}})});var nB=D(()=>{C80()});import{z as WK}from"zod";async function wa8($,Z,X,Q){let Y=await $.storage.connections.findById(Z,X);if(Y)return Y;throw Q}async function Ea8($,Z,X,Q){let Y=await $.storage.virtualMcps.findById(Z,X);if(Y)return Y;throw Q}var Zl0,Oa8=3600000,Da8,La8,Xl0;var Da1=D(()=>{_8();mi();M0();hW();nB();NE();Zl0=a40,Da8=WK.object({siteUrl:WK.string().min(1).describe("Website URL to configure.")}),La8=WK.object({connection:l7,virtualMcp:d7,reportApp:WK.object({connectionId:WK.string(),virtualMcpId:WK.string(),toolName:WK.literal(Zl0)}),created:WK.object({connection:WK.boolean(),virtualMcp:WK.boolean()})});Xl0=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:Da8,outputSchema:La8,handler:async($,Z)=>{t(Z);let X=o(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=pB($.siteUrl);if(!Y.ok)throw Error(Y.error);let G=C8.COMMERCE_DISCOVERY(X.id),J=e40(X.id),W=new URLSearchParams({connection:G,tool:Zl0}),K={email:Z.auth.user?.email,reportUrl:`${Z.baseUrl}/${encodeURIComponent(X.slug??X.id)}/agents/${J}/app?${W.toString()}`},F=await Z.storage.connections.findById(G,X.id),H={connection:!1,virtualMcp:!1},N=await Ka1({siteUrl:Y.value,orgId:X.id,orgName:X.name,...K}),U=Ja1();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=eg1(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 wa8(Z,G,X.id,w)}}let B=await Z.storage.virtualMcps.findById(J,X.id);if(!B){console.log("[commerce-discovery] creating virtual MCP",{orgId:X.id,siteUrl:Y.value,connectionId:F.id,virtualMcpId:J});try{B=await Z.storage.virtualMcps.create(X.id,Q,$h1(X.id,F.id),{id:J}),H.virtualMcp=!0}catch(w){B=await Ea8(Z,J,X.id,w)}}if(!B.pinned)B=await Z.storage.virtualMcps.update(B.id,Q,{pinned:!0});let O=await Z.db.selectFrom("organization").select(["createdAt"]).where("id","=",X.id).executeTakeFirst();if((O?Date.now()-new Date(O.createdAt).getTime():Number.POSITIVE_INFINITY)<Oa8){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:B,reportApp:{connectionId:F.id,virtualMcpId:B.id,toolName:Zl0},created:H}}})});var La1=D(()=>{Ua1();Ba1();Oa1();Da1()});var Ql0=_((wa1)=>{Object.defineProperty(wa1,"__esModule",{value:!0});wa1.kvPrefix=wa1.KvWatchInclude=void 0;wa1.KvWatchInclude={LastValue:"",AllHistory:"history",UpdatesOnly:"updates"};wa1.kvPrefix="KV_"});var Va1=_((Ma1)=>{Object.defineProperty(Ma1,"__esModule",{value:!0});Ma1.KvStatusImpl=Ma1.Bucket=Ma1.Kvm=Ma1.kvOperationHdr=void 0;Ma1.Base64KeyCodec=Pa8;Ma1.NoopKvCodecs=Yl0;Ma1.defaultBucketOpts=za1;Ma1.validateKey=Pa1;Ma1.validateSearchKey=Aa1;Ma1.hasWildcards=Ta1;Ma1.validateBucket=V90;var g5=PY(),Q5=Pe(),y5=Ql0();function Pa8(){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 Yl0(){return{key:{encode($){return $},decode($){return $}},value:{encode($){return typeof $==="string"?new TextEncoder().encode($):$},decode($){return $}}}}function za1(){return{replicas:1,history:1,timeout:2000,max_bytes:-1,maxValueSize:-1,codec:Yl0(),storage:Q5.StorageType.File}}Ma1.kvOperationHdr="KV-Operation";var ja1="$KV",Aa8=/^[-/=.\w]+$/,Ta8=/^[-/=.>*\w]+$/,Ra8=/^[-\w]+$/;function Pa1($){if($.startsWith(".")||$.endsWith(".")||!Aa8.test($))throw Error(`invalid key: ${$}`)}function Aa1($){if($.startsWith(".")||$.endsWith(".")||$.includes("..")||!Ta8.test($))throw Error(`invalid key: ${$}`)}function Ta1($){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 V90($){if(!Ra8.test($))throw Error(`invalid bucket name: ${$}`)}class Ra1{js;constructor($){this.js=(0,Q5.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(g5.Feature.JS_KV);if(!X)return Promise.reject(Error(`kv is only supported on servers ${Q} or better`));if(Z.bindOnly)return sx.bind(this.js,$,Z);return sx.create(this.js,$,Z)}list(){let $=(X)=>{let Y=X.streams.filter((J)=>{return J.config.name.startsWith(y5.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 S90(J,G)})},Z=`${this.js.prefix}.STREAM.LIST`;return new Q5.ListerImpl(Z,$,this.js)}}Ma1.Kvm=Ra1;class sx{js;jsm;stream;bucket;direct;codec;prefix;editPrefix;useJsPrefix;_prefixLen;constructor($,Z,X){V90($),this.js=Z,this.jsm=X,this.bucket=$,this.prefix=ja1,this.editPrefix="",this.useJsPrefix=!1,this._prefixLen=0}static async create($,Z,X={}){V90(Z);let Q=await $.jetstreamManager(),Y=new sx(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}};V90(Z);let J=new sx(Z,$,Y);return G.config.name=X.streamName??J.bucketName(),Object.assign(J,G),J.stream=G.config.name,J.codec=X.codec||Yl0(),J.direct=G.config.allow_direct??!1,J.initializePrefixes(G),J}async init($={}){let Z=Object.assign(za1(),$);this.codec=Z.codec;let X={};if(this.stream=X.name=$.streamName??this.bucketName(),X.retention=Q5.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,g5.nanos)(Z.markerTTL);if($.mirror){let F=Object.assign({},$.mirror);if(!F.name.startsWith(y5.kvPrefix))F.name=`${y5.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(y5.kvPrefix)?N.name.substring(y5.kvPrefix.length):N.name;if(!N.name.startsWith(y5.kvPrefix))N.name=`${y5.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?Q5.StoreCompression.S2:Q5.StoreCompression.None;let Q=this.js.nc,Y=Q.getServerVersion(),G=Y?(0,g5.compare)(Y,(0,g5.parseSemVer)("2.7.2"))>=0:!1;X.discard=G?Q5.DiscardPolicy.New:Q5.DiscardPolicy.Old;let{ok:J,min:W}=Q.features.get(g5.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 ${W}`))}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,g5.nanos)(Z.ttl);X.allow_rollup_hdrs=!0;let K;try{if(K=await this.jsm.streams.info(X.name),!K.config.allow_direct&&this.direct===!0)this.direct=!1}catch(F){if(F.message==="stream not found")K=await this.jsm.streams.add(X);else throw F}this.initializePrefixes(K)}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(y5.kvPrefix))X=X.substring(y5.kvPrefix.length);if(Z.external&&Z.external.api!==""){let Q=Z.name.substring(y5.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??`${y5.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`${ja1}.${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=Pa1;validateSearchKey=Aa1;hasWildcards=Ta1;close(){return Promise.resolve()}dataLen($,Z){let X=Z?Z.get(Q5.JsHeaders.MessageSizeHdr)||"":"";if(X!=="")return parseInt(X,10);return $.length}smToEntry($){return new Ia1(this.bucket,this.prefixLen,$,this.codec)}jmToWatchEntry($,Z){return new qa1(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 Q5.JetStreamApiError){let J=G;if(J.code!==Q5.JetStreamApiCodes.StreamWrongLastSequence&&J.code!==Q5.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,g5.headers)();G.headers=J,J.set(Q5.PubHeaders.ExpectedLastSubjectSequenceHdr,`${X.previousSeq}`)}if(Q)(G.headers||(0,g5.headers)()).set(Q5.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 W=this.subjectForKey(J.key);if(J.created.getTime()>=Q)return this.jsm.streams.purge(this.stream,{filter:W,keep:1});else return this.jsm.streams.purge(this.stream,{filter:W,keep:0})}),G=await Promise.all(Y);return G.unshift({success:!0,purged:0}),G.reduce((J,W)=>{return J.purged+=W.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,g5.headers)();if(Y.set(Ma1.kvOperationHdr,Z),Z==="PURGE"){let G=X;if(Y.set(Q5.JsHeaders.RollupHdr,Q5.JsHeaders.RollupValueSubject),typeof G?.ttl==="string"&&G.ttl!=="")Y.set(Q5.PubHeaders.MessageTTL,`${G.ttl}`)}if(X?.previousSeq)Y.set(Q5.PubHeaders.ExpectedLastSubjectSequenceHdr,`${X.previousSeq}`);await this.js.publish(this.subjectForKey(Q,!0),g5.Empty,{headers:Y})}_buildCC($,Z,X={}){let Y=(!Array.isArray($)?[$]:$).map((W)=>{let K=this.encodeKey(W);return this.validateSearchKey(W),this.fullKeyName(K)}),G=Q5.DeliverPolicy.LastPerSubject;if(Z===y5.KvWatchInclude.AllHistory)G=Q5.DeliverPolicy.All;if(Z===y5.KvWatchInclude.UpdatesOnly)G=Q5.DeliverPolicy.New;let J=void 0;if(Y.length===1)J=Y[0],Y=void 0;return Object.assign({deliver_policy:G,ack_policy:Q5.AckPolicy.None,filter_subjects:Y,filter_subject:J,flow_control:!0,idle_heartbeat:(0,g5.nanos)(5000)},X)}remove($){return this.purge($)}async history($={}){let Z=$.key??">",X={};X.headers_only=$.headers_only||!1;let Q=new g5.QueuedIteratorImpl,Y=()=>{Q.stop()},G=this._buildCC(Z,y5.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 K=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 K.closed().then(()=>{Q.push(Y)}),(async()=>{for await(let F of K.status())switch(F.type){case"heartbeat":Q.push(()=>{Q.stop()});break}})().then(),Q.iterClosed.then(()=>{K.stop()}),Q}canSetWatcherName(){let $=this.js.nc,{ok:Z}=$.features.get(g5.Feature.JS_NEW_CONSUMER_CREATE_API);return Z}async watch($={}){let Z=$.key??">",X=new g5.QueuedIteratorImpl,Q={};Q.headers_only=$.headers_only||!1;let Y=y5.KvWatchInclude.LastValue;if($.include===y5.KvWatchInclude.AllHistory)Y=y5.KvWatchInclude.AllHistory;else if($.include===y5.KvWatchInclude.UpdatesOnly)Y=y5.KvWatchInclude.UpdatesOnly;let G=$.ignoreDeletes===!0,J=this._buildCC(Z,Y,Q);if(J.name=`KV_WATCHER_${g5.nuid.next()}`,$.resumeFromRevision&&$.resumeFromRevision>0)J.deliver_policy=Q5.DeliverPolicy.StartSequence,J.opt_start_seq=$.resumeFromRevision;let W=await this.js.consumers.getPushConsumer(this.stream,J),F=(await W.info(!0)).num_pending,H=Y===y5.KvWatchInclude.UpdatesOnly||F===0;X._data=W;let N=0,U=await W.consume({callback:(B)=>{if(!H)N++,H=N>=F;let O=this.jmToWatchEntry(B,H);if(G&&O.operation==="DEL")return;X.push(O),X.received++}});return X.iterClosed.then(()=>{U.stop()}),U.closed().then(()=>{X.push(()=>{X.stop()})}),X}async keys($=">"){let Z=new g5.QueuedIteratorImpl,X=this._buildCC($,y5.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 W=J.headers?.get(Ma1.kvOperationHdr);if(W!=="DEL"&&W!=="PURGE"){let K=this.decodeKey(J.subject.substring(this.prefixLen));Z.push(K)}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 S90(Q,Z)}}Ma1.Bucket=sx;class S90{si;cluster;constructor($,Z=""){this.si=$,this.cluster=Z}get bucket(){return this.si.config.name.startsWith(y5.kvPrefix)?this.si.config.name.substring(y5.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,g5.millis)(this.si.config.max_age)}get markerTTL(){if(typeof this.si.config.subject_delete_marker_ttl==="number")return(0,g5.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!==Q5.StoreCompression.None;return!1}}Ma1.KvStatusImpl=S90;class Ia1{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(Ma1.kvOperationHdr)||"PUT"}get length(){let $=this.sm.header.get(Q5.JsHeaders.MessageSizeHdr)||"";if($!=="")return parseInt($,10);return this.sm.data.length}json($){return JSON.parse(g5.TD.decode(this.value),$)}string(){return g5.TD.decode(this.value)}}class qa1{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,g5.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(Ma1.kvOperationHdr)||"PUT"}get delta(){return this.sm.info.pending}get length(){let $=this.sm.headers?.get(Q5.JsHeaders.MessageSizeHdr)||"";if($!=="")return parseInt($,10);return this.sm.data.length}get isUpdate(){return this.update}json($){return JSON.parse(g5.TD.decode(this.value),$)}string(){return g5.TD.decode(this.value)}}});var Gl0=_((M3)=>{Object.defineProperty(M3,"__esModule",{value:!0});M3.validateKey=M3.validateBucket=M3.NoopKvCodecs=M3.Kvm=M3.defaultBucketOpts=M3.Bucket=M3.Base64KeyCodec=M3.KvWatchInclude=M3.kvPrefix=void 0;var Sa1=Ql0();Object.defineProperty(M3,"kvPrefix",{enumerable:!0,get:function(){return Sa1.kvPrefix}});Object.defineProperty(M3,"KvWatchInclude",{enumerable:!0,get:function(){return Sa1.KvWatchInclude}});var UE=Va1();Object.defineProperty(M3,"Base64KeyCodec",{enumerable:!0,get:function(){return UE.Base64KeyCodec}});Object.defineProperty(M3,"Bucket",{enumerable:!0,get:function(){return UE.Bucket}});Object.defineProperty(M3,"defaultBucketOpts",{enumerable:!0,get:function(){return UE.defaultBucketOpts}});Object.defineProperty(M3,"Kvm",{enumerable:!0,get:function(){return UE.Kvm}});Object.defineProperty(M3,"NoopKvCodecs",{enumerable:!0,get:function(){return UE.NoopKvCodecs}});Object.defineProperty(M3,"validateBucket",{enumerable:!0,get:function(){return UE.validateBucket}});Object.defineProperty(M3,"validateKey",{enumerable:!0,get:function(){return UE.validateKey}})});var Jl0=_((tB)=>{Object.defineProperty(tB,"__esModule",{value:!0});tB.NoopKvCodecs=tB.Kvm=tB.defaultBucketOpts=tB.Bucket=tB.Base64KeyCodec=tB.KvWatchInclude=void 0;var ba8=Gl0();Object.defineProperty(tB,"KvWatchInclude",{enumerable:!0,get:function(){return ba8.KvWatchInclude}});var ti=Gl0();Object.defineProperty(tB,"Base64KeyCodec",{enumerable:!0,get:function(){return ti.Base64KeyCodec}});Object.defineProperty(tB,"Bucket",{enumerable:!0,get:function(){return ti.Bucket}});Object.defineProperty(tB,"defaultBucketOpts",{enumerable:!0,get:function(){return ti.defaultBucketOpts}});Object.defineProperty(tB,"Kvm",{enumerable:!0,get:function(){return ti.Kvm}});Object.defineProperty(tB,"NoopKvCodecs",{enumerable:!0,get:function(){return ti.NoopKvCodecs}})});function C90(){let $=new TextEncoder,Z=new TextDecoder;return{encode:(X)=>$.encode(JSON.stringify(X)),decode:(X)=>JSON.parse(Z.decode(X))}}class Wl0{options;kv=null;codec=C90();constructor($){this.options=$}async init(){let $=this.options.getJetStream();if(!$)return;this.kv=await new _a1.Kvm($).create(ya8,{storage:Ca1.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 ga8($,Z,X){if(X<=0)return!0;if($===void 0)return!0;return Z-$>=X}function va1($){let Z=["tools","resources","prompts"];for(let X of Z){let Q=`${X}:${$}`;v90.delete(Q),ri.delete(Q)}}function _90($){return $ instanceof L1&&$.code===I1.MethodNotFound}function ha8($){return $ instanceof L1&&$.code===-32000&&/connection closed/i.test($.message)}async function rB($,Z,X,Q,Y,G=0){if(!Q)try{return await X()}catch(F){if(_90(F))return[];return oi.add(1,{type:$,outcome:"error",stage:"no_cache"}),null}let J=`${$}:${Z}`,W=await Q.get($,Z);if(W===null)try{let F=await X();return Q.set($,Z,F).catch(()=>{}),v90.set(J,Date.now()),oi.add(1,{type:$,outcome:"miss",stage:"miss"}),F}catch(F){if(_90(F))return Q.set($,Z,[]).catch(()=>{}),[];return oi.add(1,{type:$,outcome:"error",stage:"miss"}),null}if(oi.add(1,{type:$,outcome:"hit",stage:"hit"}),ga8(v90.get(J),Date.now(),G)&&!ri.has(J)){ri.add(J),v90.set(J,Date.now());let F=X().then((H)=>Q.set($,Z,H)).catch((H)=>{if(_90(H)||ha8(H)){if(_90(H))Q.set($,Z,[]).catch(()=>{});return}oi.add(1,{type:$,outcome:"error",stage:"revalidation"})}).finally(()=>ri.delete(J));Y?.(F)}return W}function Kl0($){fa1=$}function Y9(){return fa1}var Ca1,_a1,oi,ya8="DECOCMS_MCP_LISTS",ri,v90,oB=30000,fa1=null;var CQ=D(()=>{X9();I6();Ca1=V(OL(),1),_a1=V(Jl0(),1),oi=w$.createCounter("mcp_list_cache.fetches",{description:"MCP list cache fetch outcomes (hit, miss, error)",unit:"{fetches}"});ri=new Set;w$.createObservableGauge("mcp_list_cache.pending_revalidations",{description:"In-flight background MCP list revalidations on this pod",unit:"{revalidations}"}).addCallback(($)=>$.observe(ri.size));v90=new Map});async function Fl0($,Z,X){let Q=new AbortController,Y,G=new Promise((W,K)=>{Y=setTimeout(()=>{Q.abort(),K(new ba1($.id,X))},X)}),J=(async()=>{let W=await U5($,Z,!0);try{return(await W.listTools(void 0,{timeout:X,signal:Q.signal})).tools}finally{await W.close().catch(()=>{})}})();J.catch(()=>{});try{return await Promise.race([J,G])}finally{if(Y)clearTimeout(Y)}}var ba1;var xa1=D(()=>{ai();ba1=class ba1 extends Error{constructor($,Z){super(`listTools timed out after ${Z}ms for connection ${$}`);this.name="ListToolsTimeoutError"}}});function f90($){return(Z)=>{if(Z instanceof L1&&Z.code===I1.MethodNotFound)return $;throw Z}}var ya1=D(()=>{X9()});function b90($,Z,X){let Q=aB($,Z,X,Y9()??void 0),Y=Lw(Q,{name:"studio-mcp-server",version:"1.0.0"},{capabilities:ua8,toolCallTimeoutMs:Vb});Y.server.setRequestHandler(lU,async()=>{return await Q.listResources().catch(f90({resources:[]}))}),Y.server.setRequestHandler(dU,async()=>{return await Q.listResourceTemplates().catch(f90({resourceTemplates:[]}))}),Y.server.setRequestHandler(mU,async()=>{return await Q.listPrompts().catch(f90({prompts:[]}))});let G=Y.close.bind(Y);return Y.close=async()=>{await G(),await Q.close().catch(()=>{})},Y}var ua8;var ga1=D(()=>{hX();X9();si();CQ();ya1();ua8={tools:{},resources:{},prompts:{}}});var qH=D(()=>{ai();xa1();ga1()});function ei($,Z,X){if(Z.some((Q)=>Q!=="*"&&Q.startsWith("SELF::"))&&$.SELF===void 0)$.SELF={value:`${X}_self`}}function $p($,Z){let X=new Map;for(let Q of Z){if(Q==="*")continue;let[Y,G]=q50(Q);if(!ca8.has(G))continue;let J=Oi(Y,$);if(typeof J!=="object"||J===null||!("value"in J))continue;let W=J.value;if(typeof W!=="string")continue;X.set(`${W}:${G}`,{targetConnectionId:W,scope:G})}return[...X.values()]}async function Zp($,Z,X,Q){for(let J of Z){if(J==="*")continue;let[W]=q50(J),K=Oi(W,$);if(K===void 0||K===null)throw Error(`Scope references key "${W}" but it's not present in state`)}let Y=ym1($,Z),G=`${X}_self`;for(let J of Y){if(J===G)continue;let W=await Q.storage.connections.findById(J);if(!W||W.organization_id!==X)throw Error(`Referenced connection not found: ${J}`);try{await Q.access.check(J)}catch(K){throw Error(`Access denied to referenced connection: ${J}. ${K.message}`)}}}var ca8;var Hl0=D(()=>{Bu0();W60();ca8=new Set([G60,J60])});import{z as ha1}from"zod";var la8,da8,Nl0;var ua1=D(()=>{S4();M0();R$();CQ();qH();Hl0();li();hW();la8=ha1.object({data:R80.describe("Data for the new connection (id is auto-generated if not provided)")}),da8=ha1.object({item:l7.describe("The created connection entity")}),Nl0=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:la8,outputSchema:da8,handler:async($,Z)=>{t(Z);let X=o(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(await Z.storage.connections.findBySanitizedId(Y.id))throw Error("Connection id conflicts with an existing connection's isolated database schema")}if(Y.connection_type==="VIRTUAL"){let N=of(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=rf(N)}if(Y.connection_type==="STDIO"&&!b0().localMode)throw Error("STDIO connections are only available in local mode (--local-mode).");let G=await iB({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,W=G?.scopes?.length?G.scopes:Y.configuration_scopes??null,K=Y.configuration_state??null;if(K&&W?.length)ei(K,W,X.id),await Zp(K,W,X.id,Z);let F=await Z.storage.connections.createNew({...Y,tools:null,configuration_state:K,configuration_scopes:W}),H=K&&W?.length?$p(K,W):[];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:B}=await Z.storage.connectionCredentialVault.createOrRotateWorkloadToken({organizationId:X.id,subjectConnectionId:F.id});N=B.id,await(await U5(F,Z,!1)).callTool({name:"ON_MCP_CONFIGURATION",arguments:{state:K,scopes:W,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)Y9()?.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 nG}from"zod/v4";import{z as ca1}from"zod/v4";import{z as x90}from"zod/v4";import{z as KK}from"zod/v4";import{z as na8}from"zod/v4";import{z as BE}from"zod/v4";import{z as FK}from"zod/v4";import{z as xZ}from"zod/v4";import{z as la1}from"zod/v4";import{z as h90}from"zod/v4";import{z as Ls8}from"zod/v4";import{z as da1}from"zod/v4";import{z as y90}from"zod/v4";import{z as Is8}from"zod/v4";function Xp($,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)=>Xp(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)&&Xp($[Y],Z[Y]))}return!1}function Bs8(){return($)=>{if(!Array.isArray($))return!0;let Z=[];return $.every((X)=>{if(Z.some((Y)=>Xp(X,Y)))return!1;return Z.push(X),!0})}}function g90($,Z){return $.safeParse(Z).success}function O7($){if(typeof $==="boolean")return $?nG.any():nG.never();let Z={};for(let Y of Vs8)Y.apply(Z,$);let X=[];if(Z.string!==!1)X.push(Z.string||nG.string());if(Z.number!==!1)X.push(Z.number||nG.number());if(Z.boolean!==!1)X.push(Z.boolean||nG.boolean());if(Z.null!==!1)X.push(Z.null||nG.null());if(Z.array!==!1)X.push(Z.array||nG.array(nG.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=nG.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=nG.never();else if(X.length===1)Q=X[0];else if(!Object.keys($).some((G)=>G!=="$schema"&&G!=="title"&&G!=="description"))Q=nG.any();else Q=nG.union(X);for(let Y of Ss8)Q=Y.apply(Q,$);return Q}var ma8=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||ca1.number();if(Y instanceof ca1.ZodNumber)$.number=Y.int()}}},ia8=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=x90.literal(X);else if(typeof X==="number")$.number=x90.literal(X);else if(typeof X==="boolean")$.boolean=x90.literal(X);else if(X===null)$.null=x90.null();else if(Array.isArray(X))$.array=void 0;else if(typeof X==="object")$.object=void 0}},pa8=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?KK.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 KK.literal($[0]);if(Z==="string")return KK.enum($);if(Z==="number"){let[X,Q,...Y]=$;return KK.union([KK.literal(X),KK.literal(Q),...Y.map((G)=>KK.literal(G))])}if(Z==="boolean")return KK.union([KK.literal(!0),KK.literal(!1)]);return!1}},ta8=class{apply($,Z){let X=Z;if(X.type==="string"&&X.format==="binary"&&X.contentEncoding==="binary"){let Q=na8.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}}},oa8=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=BE.string()}}},ra8=class{apply($,Z){let X=Z;if(X.minLength===void 0)return;if($.string!==!1){let Q=$.string||BE.string();if(Q instanceof BE.ZodString)$.string=Q.refine((Y)=>{return Array.from(Y).length>=X.minLength},{message:`String must be at least ${X.minLength} characters long`})}}},aa8=class{apply($,Z){let X=Z;if(X.maxLength===void 0)return;if($.string!==!1){let Q=$.string||BE.string();if(Q instanceof BE.ZodString)$.string=Q.refine((Y)=>{return Array.from(Y).length<=X.maxLength},{message:`String must be at most ${X.maxLength} characters long`})}}},sa8=class{apply($,Z){let X=Z;if(!X.pattern)return;if($.string!==!1){let Q=$.string||BE.string();if(Q instanceof BE.ZodString){let Y=new RegExp(X.pattern);$.string=Q.regex(Y)}}}},ea8=class{apply($,Z){let X=Z;if(X.minimum===void 0)return;if($.number!==!1){let Q=$.number||FK.number();if(Q instanceof FK.ZodNumber)$.number=Q.min(X.minimum)}}},$s8=class{apply($,Z){let X=Z;if(X.maximum===void 0)return;if($.number!==!1){let Q=$.number||FK.number();if(Q instanceof FK.ZodNumber)$.number=Q.max(X.maximum)}}},Zs8=class{apply($,Z){let X=Z;if(X.exclusiveMinimum===void 0)return;if($.number!==!1){let Q=$.number||FK.number();if(Q instanceof FK.ZodNumber)if(typeof X.exclusiveMinimum==="number")$.number=Q.gt(X.exclusiveMinimum);else $.number=!1}}},Xs8=class{apply($,Z){let X=Z;if(X.exclusiveMaximum===void 0)return;if($.number!==!1){let Q=$.number||FK.number();if(Q instanceof FK.ZodNumber)if(typeof X.exclusiveMaximum==="number")$.number=Q.lt(X.exclusiveMaximum);else $.number=!1}}},Qs8=class{apply($,Z){let X=Z;if(X.multipleOf===void 0)return;if($.number!==!1){let Q=$.number||FK.number();if(Q instanceof FK.ZodNumber)$.number=Q.refine((Y)=>{if(X.multipleOf===0)return!1;let G=Y/X.multipleOf,J=Math.round(G),W=Math.min(Math.abs(Y)*Number.EPSILON*10,Math.abs(X.multipleOf)*Number.EPSILON*10);return Math.abs(G-J)<=W/Math.abs(X.multipleOf)},{message:`Must be a multiple of ${X.multipleOf}`})}}},Ys8=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=xZ.array(xZ.any())}}},Gs8=class{apply($,Z){let X=Z;if(X.minItems===void 0)return;if($.array!==!1)$.array=($.array||xZ.array(xZ.any())).min(X.minItems)}},Js8=class{apply($,Z){let X=Z;if(X.maxItems===void 0)return;if($.array!==!1)$.array=($.array||xZ.array(xZ.any())).max(X.maxItems)}},Ws8=class{apply($,Z){let X=Z;if($.array===!1)return;if(Array.isArray(X.items))$.array=$.array||xZ.array(xZ.any());else if(X.items&&typeof X.items!=="boolean"&&!X.prefixItems){let Q=O7(X.items),Y=xZ.array(Q);if($.array&&$.array instanceof xZ.ZodArray){let G=$.array._def;if(G.checks)G.checks.forEach((J)=>{if(J._zod&&J._zod.def){let W=J._zod.def;if(W.check==="min_length"&&W.minimum!==void 0)Y=Y.min(W.minimum);else if(W.check==="max_length"&&W.maximum!==void 0)Y=Y.max(W.maximum)}})}$.array=Y}else if(typeof X.items==="boolean"&&X.items===!1)if(!X.prefixItems)$.array=xZ.array(xZ.any()).max(0);else $.array=$.array||xZ.array(xZ.any());else if(typeof X.items==="boolean"&&X.items===!0)$.array=$.array||xZ.array(xZ.any());else if(X.prefixItems)$.array=$.array||xZ.array(xZ.any())}},Ks8=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)=>O7(G)),Y;if(Q.length===0)Y=la1.tuple([]);else Y=la1.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}},Fs8=class{apply($,Z){let X=Z;if($.object===!1)return;if(X.properties||X.required||X.additionalProperties!==void 0)$.object=$.object||h90.object({}).passthrough()}},Hs8=class{apply($,Z){let X=Z;if(Z.type===void 0&&(X.maxProperties!==void 0||X.minProperties!==void 0)){if($.object===void 0)$.object=h90.object({}).passthrough()}}},Ns8=class{apply($,Z){let X=Z;if(X.maxProperties===void 0)return;if($.object!==!1){let Q=$.object||h90.object({}).passthrough();$.object=Q.refine((Y)=>Object.keys(Y).length<=X.maxProperties,{message:`Object must have at most ${X.maxProperties} properties`})}}},Us8=class{apply($,Z){let X=Z;if(X.minProperties===void 0)return;if($.object!==!1){let Q=$.object||h90.object({}).passthrough();$.object=Q.refine((Y)=>Object.keys(Y).length>=X.minProperties,{message:`Object must have at least ${X.minProperties} properties`})}}},Os8=class{apply($,Z){if(!Z.not)return $;let X=O7(Z.not);return $.refine((Q)=>!g90(X,Q),{message:"Value must not match the 'not' schema"})}},Ds8=class{apply($,Z){if(Z.uniqueItems!==!0)return $;return $.refine(Bs8(),{message:"Array items must be unique"})}},ws8=class{apply($,Z){if(!Z.allOf||Z.allOf.length===0)return $;return Z.allOf.map((Q)=>O7(Q)).reduce((Q,Y)=>Ls8.intersection(Q,Y),$)}},Es8=class{apply($,Z){if(!Z.anyOf||Z.anyOf.length===0)return $;let X=Z.anyOf.length===1?O7(Z.anyOf[0]):da1.union([O7(Z.anyOf[0]),O7(Z.anyOf[1]),...Z.anyOf.slice(2).map((Q)=>O7(Q))]);return da1.intersection($,X)}},js8=class{apply($,Z){if(!Z.oneOf||Z.oneOf.length===0)return $;let X=Z.oneOf.map((Q)=>O7(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"})}},zs8=class{apply($,Z){let X=Z;if(X.prefixItems&&Array.isArray(X.prefixItems)){let Y=X.prefixItems.map((G)=>O7(G));return $.refine((G)=>{if(!Array.isArray(G))return!0;for(let J=0;J<Math.min(G.length,Y.length);J++)if(!g90(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=O7(X.items);for(let W=Y.length;W<G.length;W++)if(!g90(J,G[W]))return!1}}return!0},{message:"Array does not match prefixItems schema"})}return $}},Ps8=class{apply($,Z){let X=Z;if(!X.properties&&!X.required&&X.additionalProperties!==!1)return $;if($ instanceof y90.ZodObject||$ instanceof y90.ZodRecord){let Q={};if(X.properties){for(let[Y,G]of Object.entries(X.properties))if(G!==void 0)Q[Y]=O7(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 y90.object(Q);else return y90.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(!O7(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"})}},As8=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)=>Xp(Q,Y))},{message:"Value must match one of the enum values"})}},Ts8=class{apply($,Z){if(Z.const===void 0)return $;let X=Z.const;if(typeof X!=="object"||X===null)return $;return $.refine((Q)=>Xp(Q,X),{message:"Value must equal the const value"})}},Rs8=class{apply($,Z){if(Z.description)$=$.describe(Z.description);return $}},qs8=class{apply($,Z){var X;let Q=Z;if(!((X=Q.required)==null?void 0:X.includes("__proto__"))||Z.type!==void 0)return $;return Is8.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))}},Ms8=class{apply($,Z){var X;let Q=Z;if(Q.contains===void 0)return $;let Y=O7(Q.contains),G=(X=Q.minContains)!=null?X:1,J=Q.maxContains;return $.refine((W)=>{if(!Array.isArray(W))return!0;let K=0;for(let F of W)if(g90(Y,F))K++;if(K<G)return!1;if(J!==void 0&&K>J)return!1;return!0},{message:"Array must contain required items matching the schema"})}},ks8=class{apply($,Z){let{default:X}=Z;if(X===void 0)return $;if(!$.safeParse(X).success)return $;return $.default(X)}},Vs8,Ss8;var ma1=D(()=>{Vs8=[new ia8,new pa8,new ma8,new ta8,new oa8,new Ys8,new Hs8,new ra8,new aa8,new sa8,new ea8,new $s8,new Zs8,new Xs8,new Qs8,new Ks8,new Gs8,new Js8,new Ws8,new Ns8,new Us8,new Fs8],Ss8=[new qs8,new As8,new Ts8,new ws8,new Es8,new js8,new zs8,new Ps8,new Ms8,new Os8,new Ds8,new ks8,new Rs8]});class Ul0{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,Cs8),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=_Y.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 Cs8="mcp";var ia1=D(()=>{X9()});function _s8($){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 u90;var Bl0=D(()=>{jb();u90=class u90 extends pW{constructor($,Z){super($,Z)}send($,Z){let X=_s8($);if(X?.type==="emit")return this.onmessage?.(X.message),Promise.resolve();if(X?.type==="suppress")return Promise.resolve();return super.send($,Z)}}});var pa1,na1=async($,Z,X)=>{let Q=vs8($.connection,Z,X);if(!Q)throw Error("Unknown MCP connection type");let Y=new pa1({name:$?.name??"MCP Client",version:"1.0.0"});return await Y.connect(Q),{client:Y}},vs8=($,Z,X)=>{if($.type==="Websocket")return new Ul0(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,W)=>{return fetch(J,{...W,headers:{...Y,Accept:"text/event-stream"},signal:Z})}};return new wH(new URL($.url),G)}return new u90(new URL($.url),{requestInit:{headers:Y,signal:Z,credentials:"include"}})};var ta1=D(()=>{mW();pd();ia1();X9();hX();Bl0();pa1=class pa1 extends y9{constructor($,Z){super($,{jsonSchemaValidator:N5,...Z})}async listTools($,Z){return await this.request({method:"tools/list",params:$},Wd,Z)}}});function bs8($,Z){if(OE.set($,Z),OE.size>fs8){let X=OE.keys().next().value;if(X!==void 0)OE.delete(X)}}function aa1($){let Z=(X)=>{if("connection"in $)return na1({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 W;async function Y(K,F=Q){let H=$?.debugId?.(),N=H?{"x-trace-debug-id":H}:void 0,{client:U}=await Z(N),{structuredContent:B,isError:O,content:L}=await U.callTool({name:String(F),arguments:K});if(O){let E=L?.[0]?.text,j=typeof E==="string"?oa1(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(B??L)}`)}if(B!==void 0)return B;let w=L?.[0]?.text;return typeof w==="string"?oa1(w):void 0}async function G(){let{client:K}=await Z(),{tools:F}=await K.listTools();return F}async function J(){if(!("connection"in $))return G();let K=$.connection,F=JSON.stringify(K);try{if(!OE.has(F))bs8(F,G());return await OE.get(F)}catch(H){console.error("Failed to list tools",H),OE.delete(F);return}}async function W(){return(await J()??[]).map((F)=>ra1(F,Y))}return Y.asTool=async()=>{let F=(await J()??[]).find((H)=>H.name===Q);if(!F)throw Error(`Tool ${Q} not found`);return ra1(F,Y)},Y}})}var oa1=($)=>{try{return JSON.parse($)}catch{return $}},fs8=500,OE,ra1=($,Z)=>{return{...$,id:$.name,inputSchema:$.inputSchema?O7($.inputSchema):void 0,outputSchema:$.outputSchema?O7($.outputSchema):void 0,execute:(X)=>{return Z(X.context,$.name)}}};var sa1=D(()=>{ma1();ta1();OE=new Map});function sB($){return aa1($)}var ex;var Ol0=D(()=>{sa1();ex=new Proxy({},{get($,Z){if(Z==="toJSON")return null;if(Z==="forConnection")return(X)=>sB({connection:X});if(Z==="forClient")return(X)=>sB({client:X});return globalThis[Z]}})});function c90($){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 HK=($)=>{return{...c90($),forClient:(Z)=>{return sB({client:Z})},forConnection:(Z)=>{return sB({connection:Z})}}};var DE=D(()=>{Ol0()});import{z as h5}from"zod";var ea1,l90,$s1,d90,Zs1,xs8;var Xs1=D(()=>{DE();ea1=h5.object({specversion:h5.literal("1.0").describe("CloudEvents specification version"),id:h5.string().describe("Unique identifier for this event (UUID recommended)"),source:h5.string().describe("Connection ID of the event publisher"),type:h5.string().describe("Event type (e.g., 'order.created', 'user.signup')"),time:h5.string().datetime().optional().describe("Timestamp of when the event occurred (ISO 8601)"),subject:h5.string().optional().describe("Subject/resource identifier (e.g., order ID, user ID)"),datacontenttype:h5.string().optional().default("application/json").describe("Content type of the data attribute"),dataschema:h5.string().url().optional().describe("URI to the schema for the data attribute"),data:h5.unknown().optional().describe("Event payload (any JSON value)")}),l90=h5.object({events:h5.array(ea1).min(1).describe("Batch of CloudEvents to process")}),$s1=h5.object({success:h5.boolean().optional().describe("Whether this event was processed successfully"),error:h5.string().optional().describe("Error message for this event"),retryAfter:h5.number().int().positive().optional().describe("Re-deliver this event after this many ms")}),d90=h5.object({success:h5.boolean().optional().describe("Batch success - applies to events not in results"),error:h5.string().optional().describe("Batch error message - applies to events not in results"),processedCount:h5.number().int().min(0).optional().describe("Number of events successfully processed"),retryAfter:h5.number().int().positive().optional().describe("Batch retryAfter - applies to events not in results"),results:h5.record(h5.string(),$s1).optional().describe("Per-event results keyed by event ID")}),Zs1=[{name:"ON_EVENTS",inputSchema:l90,outputSchema:d90}],xs8=HK(Zs1)});import{z as u5}from"zod";var Qs1,Ys1,Gs1,Js1,Ws1,Ks1,m90,Dl0;var Ll0=D(()=>{DE();Qs1=u5.object({type:u5.literal("string"),enum:u5.array(u5.string()).optional(),description:u5.string().optional()}),Ys1=u5.object({type:u5.string(),description:u5.string(),paramsSchema:u5.record(u5.string(),Qs1)}),Gs1=u5.object({}),Js1=u5.object({triggers:u5.array(Ys1)}),Ws1=u5.object({type:u5.string(),params:u5.record(u5.string(),u5.string()),enabled:u5.boolean(),callbackUrl:u5.url().optional(),callbackToken:u5.string().min(1).optional()}),Ks1=u5.object({success:u5.boolean()}),m90=[{name:"TRIGGER_LIST",inputSchema:Gs1,outputSchema:Js1},{name:"TRIGGER_CONFIGURE",inputSchema:Ws1,outputSchema:Ks1}],Dl0=HK(m90)});import{z as M$}from"zod";var ys8,gs8,hs8,us8,cs8,ls8,ds8,ms8,is8,ps8,ns8,ts8,LE;var Qp=D(()=>{ys8=M$.object({prefix:M$.string().optional().describe("Filter objects by prefix (e.g., 'folder/' for folder contents)"),maxKeys:M$.number().optional().default(1000).describe("Maximum number of keys to return (default: 1000)"),continuationToken:M$.string().optional().describe("Token for pagination from previous response"),delimiter:M$.string().optional().describe("Delimiter for grouping keys (typically '/'). When set, commonPrefixes returns folder paths.")}),gs8=M$.object({objects:M$.array(M$.object({key:M$.string().describe("Object key/path"),size:M$.number().describe("Object size in bytes"),lastModified:M$.string().describe("Last modified timestamp"),etag:M$.string().describe("Entity tag for the object")})),nextContinuationToken:M$.string().optional().describe("Token for fetching next page of results"),isTruncated:M$.boolean().describe("Whether there are more results available"),commonPrefixes:M$.array(M$.string()).optional().describe("Folder paths when delimiter is used (e.g., ['photos/2024/', 'photos/2025/'])")}),hs8=M$.object({key:M$.string().describe("Object key/path to get metadata for")}),us8=M$.object({contentType:M$.string().optional().describe("MIME type of the object"),contentLength:M$.number().describe("Size of the object in bytes"),lastModified:M$.string().describe("Last modified timestamp"),etag:M$.string().describe("Entity tag for the object"),metadata:M$.record(M$.string(),M$.string()).optional().describe("Custom metadata key-value pairs")}),cs8=M$.object({key:M$.string().describe("Object key/path to generate URL for"),expiresIn:M$.number().optional().describe("URL expiration time in seconds (default: from state config or 3600)")}),ls8=M$.object({url:M$.string().describe("Presigned URL for downloading the object"),expiresIn:M$.number().describe("Expiration time in seconds that was used")}),ds8=M$.object({key:M$.string().describe("Object key/path for the upload"),expiresIn:M$.number().optional().describe("URL expiration time in seconds (default: from state config or 3600)"),contentType:M$.string().optional().describe("MIME type for the object being uploaded")}),ms8=M$.object({url:M$.string().describe("Presigned URL for uploading the object"),expiresIn:M$.number().describe("Expiration time in seconds that was used")}),is8=M$.object({key:M$.string().describe("Object key/path to delete")}),ps8=M$.object({success:M$.boolean().describe("Whether the deletion was successful"),key:M$.string().describe("The key that was deleted")}),ns8=M$.object({keys:M$.array(M$.string()).max(1000).describe("Array of object keys/paths to delete (max 1000)")}),ts8=M$.object({deleted:M$.array(M$.string()).describe("Array of successfully deleted keys"),errors:M$.array(M$.object({key:M$.string(),message:M$.string()})).describe("Array of errors for failed deletions")}),LE=[{name:"LIST_OBJECTS",inputSchema:ys8,outputSchema:gs8},{name:"GET_OBJECT_METADATA",inputSchema:hs8,outputSchema:us8},{name:"GET_PRESIGNED_URL",inputSchema:cs8,outputSchema:ls8},{name:"PUT_PRESIGNED_URL",inputSchema:ds8,outputSchema:ms8},{name:"DELETE_OBJECT",inputSchema:is8,outputSchema:ps8},{name:"DELETE_OBJECTS",inputSchema:ns8,outputSchema:ts8}]});import{z as w6}from"zod";var Fs1,Hs1,Ns1,Yp,i90,p90,n90,t90,os8;var wl0=D(()=>{DE();Fs1=w6.object({primary:w6.string().optional().describe("Primary brand color (hex)"),secondary:w6.string().optional().describe("Secondary brand color (hex)"),accent:w6.string().optional().describe("Accent / highlight color (hex)"),background:w6.string().optional().describe("Background color (hex)"),foreground:w6.string().optional().describe("Foreground / text color (hex)")}),Hs1=w6.object({heading:w6.string().optional().describe("Font family for headings"),body:w6.string().optional().describe("Font family for body text"),code:w6.string().optional().describe("Font family for code / monospace")}),Ns1=w6.object({logo:w6.string().optional().describe("Logo URL"),favicon:w6.string().optional().describe("Favicon URL"),ogImage:w6.string().optional().describe("Open Graph image URL")}),Yp=w6.object({id:w6.string(),name:w6.string().describe("Brand / company name"),domain:w6.string().optional().describe("Company domain (e.g. example.com)"),colors:Fs1.optional().describe("Semantic color palette"),fonts:Hs1.optional().describe("Font families by role"),assets:Ns1.optional().describe("Visual identity assets"),overview:w6.string().optional().describe("Company overview / description"),tagline:w6.string().optional().describe("Brand tagline"),tone:w6.string().optional().describe("Tone of voice description"),metadata:w6.record(w6.string(),w6.unknown()).optional().describe("Extra design tokens and metadata")}),i90=w6.object({id:w6.string().optional().describe("Brand ID. Omit to get the default brand.")}),p90=w6.object({}),n90=w6.object({items:w6.array(Yp)}),t90=[{name:"BRAND_GET",inputSchema:i90,outputSchema:Yp},{name:"BRAND_LIST",inputSchema:p90,outputSchema:n90,opt:!0}],os8=HK(t90)});var El0=D(()=>{DE();Xs1();Ll0();Qp();wl0()});import{z as E8}from"zod";function MH($){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 Jp($){return E8.object({item:$.nullable().describe("The retrieved item, or null if not found")})}function ss8($){return E8.object({data:$.partial().describe("Data for the new entity (id may be auto-generated)")})}function es8($){return E8.object({item:$.describe("The created entity with generated id")})}function $e8($){return E8.object({id:E8.string().describe("ID of the entity to update"),data:$.partial().describe("Partial entity data to update")})}function Ze8($){return E8.object({item:$.describe("The updated entity")})}function Kp($){return E8.object({item:$.describe("The deleted entity")})}function r90($,Z,X){let Q=$.toUpperCase(),Y=X?.readOnly??!1,G=[{name:`COLLECTION_${Q}_LIST`,inputSchema:k3,outputSchema:MH(Z)},{name:`COLLECTION_${Q}_GET`,inputSchema:Gp,outputSchema:Jp(Z)}];if(!Y)G.push({name:`COLLECTION_${Q}_CREATE`,inputSchema:ss8(Z),outputSchema:es8(Z),opt:!0},{name:`COLLECTION_${Q}_UPDATE`,inputSchema:$e8(Z),outputSchema:Ze8(Z),opt:!0},{name:`COLLECTION_${Q}_DELETE`,inputSchema:Wp,outputSchema:Kp(Z),opt:!0});return G}var o90,rs8,Us1,as8,k3,Gp,Wp;var tG=D(()=>{o90=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()}),rs8=E8.object({field:E8.array(E8.string()),operator:E8.enum(["eq","gt","gte","lt","lte","in","like","contains"]),value:E8.unknown()}),Us1=E8.lazy(()=>E8.union([rs8,E8.object({operator:E8.enum(["and","or","not"]),conditions:E8.array(Us1)})])),as8=E8.object({field:E8.array(E8.string()),direction:E8.enum(["asc","desc"]),nulls:E8.enum(["first","last"]).optional()}),k3=E8.object({where:Us1.optional().describe("Filter expression"),orderBy:E8.array(as8).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")});Gp=E8.object({id:E8.string().describe("ID of the entity to retrieve")});Wp=E8.object({id:E8.string().describe("ID of the entity to delete")})});import{z as $y}from"zod";var Xe8,Qe8,Bs1;var Os1=D(()=>{tG();Xe8=o90.extend({avatar:$y.string().describe("URL or data URI to the assistant's avatar image"),system_prompt:$y.string().describe("System prompt that defines the assistant's behavior"),virtual_mcp_id:$y.string().describe("Virtual MCP ID to use for this assistant"),model:$y.object({id:$y.string().describe("Model ID"),connectionId:$y.string().describe("Connection ID that provides the model")}).describe("Selected model reference for this assistant")}),Qe8=r90("assistant",Xe8),Bs1=[...Qe8]});import{z as F0}from"zod";var Fp,kH,Ls1,Ye8,Ge8,ws1,Je8,We8,Ke8,Fe8,He8,Ne8,Es1,Ue8,Be8,Oe8,De8,Le8,we8,Ee8,je8,ze8,Pe8,kQ5,Ae8,VQ5,Ds1,Te8,Re8,a90,SQ5;var js1=D(()=>{DE();tG();Fp=F0.lazy(()=>F0.union([F0.null(),F0.string(),F0.number(),F0.boolean(),F0.record(F0.string(),Fp),F0.array(Fp)])),kH=F0.record(F0.string(),F0.record(F0.string(),Fp)).optional().describe("Additional provider-specific options. Outer record keyed by provider name, inner by option key"),Ls1=F0.object({type:F0.literal("text"),text:F0.string().describe("The text content"),providerOptions:kH}),Ye8=F0.object({type:F0.literal("text"),text:F0.string().describe("The text content"),providerMetadata:F0.any().optional().describe("Additional provider-specific metadata")}),Ge8=F0.string().describe("File data as URL string"),ws1=F0.object({type:F0.literal("file"),filename:F0.string().optional().describe("Optional filename of the file"),data:Ge8,mediaType:F0.string().describe("IANA media type of the file (e.g., image/png, audio/mp3)"),providerOptions:kH}),Je8=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")}),We8=F0.object({type:F0.literal("reasoning"),text:F0.string().describe("The reasoning text"),providerOptions:kH}),Ke8=F0.object({type:F0.literal("reasoning"),text:F0.string().describe("The reasoning text"),providerMetadata:F0.any().optional().describe("Additional provider-specific metadata")}),Fe8=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:kH}),He8=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")}),Ne8=F0.union([F0.object({type:F0.literal("text"),value:F0.string()}),F0.object({type:F0.literal("json"),value:Fp}),F0.object({type:F0.literal("error-text"),value:F0.string()}),F0.object({type:F0.literal("error-json"),value:Fp}),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)")]),Es1=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:Ne8.describe("Result of the tool call"),result:F0.unknown().describe("Unknown result of the tool call"),providerOptions:kH}),Ue8=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")}),Be8=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")})]),Oe8=F0.object({role:F0.literal("system"),content:F0.string().describe("System message content"),providerOptions:kH}),De8=F0.object({role:F0.literal("user"),content:F0.array(F0.union([Ls1,ws1])).describe("User message content parts (text or file)"),providerOptions:kH}),Le8=F0.object({role:F0.literal("assistant"),content:F0.array(F0.union([Ls1,ws1,We8,Fe8,Es1])).describe("Assistant message content parts (text, file, reasoning, tool-call, or tool-result)"),providerOptions:kH}),we8=F0.object({role:F0.literal("tool"),content:F0.array(Es1).describe("Tool message content (tool results)"),providerOptions:kH}),Ee8=F0.union([Oe8,De8,Le8,we8]),je8=F0.array(Ee8).describe("A list of messages forming the prompt"),ze8=F0.object({prompt:je8.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")}),Pe8=F0.object({content:F0.array(F0.union([Ye8,Je8,Ke8,He8,Ue8,Be8])).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")}),kQ5=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")}),Ae8=F0.object({supportedUrls:F0.record(F0.string(),F0.array(F0.string())).describe("Supported URL patterns by media type for the provider")}),VQ5=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()}),Ds1=F0.object({modelId:F0.string().describe("The ID of the model"),callOptions:ze8}),Te8=o90.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()}),Re8=r90("llm",Te8,{readOnly:!0}),a90=[{name:"LLM_METADATA",inputSchema:F0.object({modelId:F0.string().describe("The ID of the model")}),outputSchema:Ae8},{name:"LLM_DO_STREAM",inputSchema:Ds1},{name:"LLM_DO_GENERATE",inputSchema:Ds1,outputSchema:Pe8},...Re8],SQ5=HK(a90)});import{z as wE}from"zod";var Ie8,zs1;var Ps1=D(()=>{Ie8=wE.object({scopes:wE.array(wE.string()).describe("List of scopes available"),stateSchema:wE.record(wE.string(),wE.unknown()).describe("JSON Schema (draft-07) defining the state structure")}),zs1=[{name:"MCP_CONFIGURATION",inputSchema:wE.object({}),outputSchema:Ie8}]});import{z as c5}from"zod";var qe8,Me8,As1;var Ts1=D(()=>{qe8=c5.object({}).strict(),Me8=c5.object({billing:c5.object({mode:c5.enum(["prepaid","postpaid"]),limitPeriod:c5.enum(["daily","weekly","monthly"]).nullable()}),limit:c5.object({total:c5.number().nullable(),remaining:c5.number().nullable(),reset:c5.string().nullable()}),usage:c5.object({total:c5.number(),daily:c5.number(),weekly:c5.number(),monthly:c5.number()}),alert:c5.object({enabled:c5.boolean(),threshold_usd:c5.number(),email:c5.string().nullable()}),connectionId:c5.string()}),As1=[{name:"GATEWAY_USAGE",inputSchema:qe8,outputSchema:Me8},{name:"GATEWAY_SET_LIMIT",inputSchema:c5.object({}),outputSchema:c5.object({}),opt:!0},{name:"GATEWAY_SET_ALERT",inputSchema:c5.object({}),outputSchema:c5.object({}),opt:!0}]});import{z as Rs1}from"zod";function oG(){return VY()===null}function s90($,Z){return $===C8.DEV_ASSETS(Z)}function Zy($,Z){let X=mg1(Z,$),Q=new Date().toISOString();return{id:X.id??C8.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:ke8,bindings:["OBJECT_STORAGE"],status:"active"}}var ke8;var Xy=D(()=>{Xw();Qp();_8();ke8=LE.map(($)=>({name:$.name,description:`${$.name} operation for local file storage`,inputSchema:Rs1.toJSONSchema($.inputSchema),outputSchema:Rs1.toJSONSchema($.outputSchema)}))});function Is1($,Z){return $||Z===0}function qs1($,Z,X,Q,Y){let G=Z?Y+1:Y,J=$.slice(0,X),W=Q+X<G;return{items:J,totalCount:G,hasMore:W}}function Ms1($,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 Ve8($,Z){if(Z.length===0)return;let[X,...Q]=Z,Y=X==="slug"?WB($):$[X];for(let G of Q){if(Y===null||typeof Y!=="object")return;Y=Y[G]}return Y}function Se8($){let X=$.replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/%/g,".*").replace(/_/g,".");return new RegExp(`^${X}$`,"i")}function Ce8($,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"&&Se8(String(X)).test($);case"contains":return String($).toLowerCase().includes(String(X).toLowerCase());default:return!0}}function Hp($,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)=>Hp($,G));case"or":return Y.some((G)=>Hp($,G));case"not":return!Y.every((G)=>Hp($,G));default:return!0}}let X=Ve8($,Z.field);return Ce8(X,Z.operator,Z.value)}var ks1=D(()=>{X60()});import{z as eB}from"zod";var _e8=8,ve8,fe8,be8,xe8,jl0;var Vs1=D(()=>{El0();Os1();tG();js1();Ps1();Qp();Ts1();_8();M0();Z9();CQ();qH();Xy();hW();X60();ks1();ve8=[{name:/^(COLLECTION_REGISTRY_APP_LIST|REGISTRY_ITEM_LIST)$/,inputSchema:eB.object({})}],fe8={LLM:a90,LLMS:a90,ASSISTANTS:Bs1,MCP:zs1,OBJECT_STORAGE:LE,AI_GATEWAY_BILLING:As1,TRIGGER:m90,REGISTRY:ve8,BRAND:t90},be8=k3.extend({binding:eB.union([eB.array(eB.object({}).passthrough()),eB.object({}).passthrough(),eB.string()]).optional(),include_virtual:eB.boolean().optional().describe("Whether to include VIRTUAL connections in the results. Defaults to false."),slug:eB.string().optional().describe("Filter by connection slug. Matches against app_name, or a slug derived from connection_url or title.")}),xe8=MH(l7),jl0=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:be8,outputSchema:xe8,handler:async($,Z)=>{await Z.access.check();let X=o(Z),Q=$.binding?typeof $.binding==="string"?(()=>{let E=fe8[$.binding.toUpperCase()];if(!E)throw Error(`Unknown binding: ${$.binding}`);return E})():$.binding:void 0,Y=Q?c90(Q):void 0,G=!!Y,J=$.limit??100,W=$.offset??0,K=$9(),F=C8.DEV_ASSETS(X.id),H=Zy(X.id,K),N=(!$.slug||WB(H)===$.slug)&&Hp(H,$.where),U=oG()&&!G&&N,{sqlOffset:B,sqlLimit:O}=Ms1(W,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:O,offset:G?void 0:B});if(Y){let E=Y9(),j=C8.SELF(X.id);await T90(L,_e8,async(z)=>{if(z.tools!==null)return;let A=z.id===j?async()=>{let{listManagementTools:I}=await Promise.resolve().then(() => ($O(),e90));return I(Z)}:()=>Fl0(z,Z,Q60),P=await rB("tools",z.id,A,E,(I)=>Z.pendingRevalidations.push(I),oB);if(P!==null)z.tools=P})}if(oG()&&Is1(G,W)&&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(W,W+J),A=W+J<j;return{items:z,totalCount:j,hasMore:A}}return qs1(L,U,J,W,w)}})});var ye8,zl0;var Ss1=D(()=>{tG();_8();M0();Z9();CQ();qH();Xy();hW();ye8=Jp(l7),zl0=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:Gp,outputSchema:ye8,handler:async($,Z)=>{let X=o(Z);if(await Z.access.check(),oG()&&s90($.id,X.id))return{item:Zy(X.id,$9())};let Q=await Z.storage.connections.findById($.id);if(!Q||Q.organization_id!==X.id)return{item:null};if(Q.tools===null){let Y=C8.SELF(X.id),G=Q.id===Y?async()=>{let{listManagementTools:W}=await Promise.resolve().then(() => ($O(),e90));return W(Z)}:async()=>{let W=await U5(Q,Z,!0);try{return(await W.listTools()).tools}finally{await W.close().catch(()=>{})}},J=await rB("tools",Q.id,G,Y9(),(W)=>Z.pendingRevalidations.push(W),oB);if(J!==null)Q.tools=J}return{item:Q}}})});class m6{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:p$("dtok"),connectionId:$.connectionId,accessToken:X,refreshToken:Q,scope:$.scope,expiresAt:G,clientId:$.clientId,clientSecret:Y,tokenEndpoint:$.tokenEndpoint,createdAt:Z,updatedAt:Z}).onConflict((W)=>W.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 rG=D(()=>{CZ()});function Qy(...$){if(ce8)console.log("[mcp-read-cache]",...$)}function le8($){return $.kind==="org"?"org":`u:${$.userId}`}function Pl0($){if($===null||typeof $!=="object")return JSON.stringify($)??"null";if(Array.isArray($))return`[${$.map(Pl0).join(",")}]`;return`{${Object.keys($).sort().map((X)=>`${JSON.stringify(X)}:${Pl0($[X])}`).join(",")}}`}class XZ0{config;maxEntries;now;maxTotalBytes;store=new Map;revalidating=new Set;totalBytes=0;constructor($=ge8,Z=he8,X=()=>Date.now(),Q=ue8){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}:${le8(X)}:${$}:${Pl0(Q)}`}storeSet($,Z,X,Q){let Y;try{Y=JSON.stringify(Z).length}catch{Qy("SKIP non-serializable",$);return}if(Y>Q){Qy("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:W}=$,K=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>K.maxStaleMs){$Z0.add(1,{type:Z,outcome:"miss"}),Qy(N?"EXPIRED":"MISS",F);let B=await G();if(J?.(B)??!0)this.storeSet(F,B,this.now(),K.maxValueBytes);else Qy("NOT-CACHED (shouldCache=false)",F);return B}if(this.store.delete(F),this.store.set(F,N),U>K.revalidateAfterMs&&!this.revalidating.has(F)){$Z0.add(1,{type:Z,outcome:"stale"}),Qy("STALE \u2192 serve + revalidate",F,`age=${U}ms`),this.revalidating.add(F);let B=G().then((O)=>{if(J?.(O)??!0)this.storeSet(F,O,this.now(),K.maxValueBytes)}).catch(()=>{$Z0.add(1,{type:Z,outcome:"error"})}).finally(()=>this.revalidating.delete(F));W?.(B)}else $Z0.add(1,{type:Z,outcome:"hit"}),Qy("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 Tl0(){return b0().mcpCacheEnabled}function QZ0(){return Tl0()?Al0:null}var $Z0,ZZ0=1024,Cs1,ge8,he8=2000,ue8,ce8,Al0;var Np=D(()=>{I6();R$();$Z0=w$.createCounter("mcp_read_cache.fetches",{description:"MCP read cache outcomes (hit, stale, miss, error)",unit:"{fetches}"}),Cs1=ZZ0*ZZ0,ge8={"tools/call":{revalidateAfterMs:30000,maxStaleMs:300000,maxValueBytes:512*ZZ0},"resources/read":{revalidateAfterMs:60000,maxStaleMs:300000,maxValueBytes:4*Cs1},"prompts/get":{revalidateAfterMs:60000,maxStaleMs:300000,maxValueBytes:512*ZZ0}},ue8=256*Cs1,ce8=typeof process<"u"&&!!process.env?.MCP_CACHE_DEBUG;Al0=new XZ0;w$.createObservableGauge("mcp_read_cache.entries",{description:"Current entry count in the per-pod MCP read cache",unit:"{entries}"}).addCallback(($)=>$.observe(Al0.stats().entries));w$.createObservableGauge("mcp_read_cache.bytes",{description:"Approximate total bytes held in the per-pod MCP read cache",unit:"By"}).addCallback(($)=>$.observe(Al0.stats().bytes))});function fs1($){QZ0()?.invalidate($),va1($)}function Yy($){fs1($);let Z=Rl0?.();if(!Z)return;try{Z.publish(_s1,de8.encode(JSON.stringify({connectionId:$,originId:vs1})))}catch(X){console.warn("[McpCacheInvalidation] publish failed (non-critical):",X)}}function bs1($){if(Rl0=$,Up)return;let Z=$();if(!Z)return;Up=Z.subscribe(_s1),(async()=>{for await(let X of Up)try{let Q=JSON.parse(me8.decode(X.data));if(Q.originId===vs1)continue;fs1(Q.connectionId)}catch{}})().catch(console.error)}function xs1(){Up?.unsubscribe(),Up=null,Rl0=void 0}var _s1="studio.mcp-cache.invalidate",vs1,de8,me8,Rl0,Up=null;var Bp=D(()=>{Np();CQ();vs1=crypto.randomUUID(),de8=new TextEncoder,me8=new TextDecoder});import{z as Il0}from"zod";function pe8($){let Z={...$};for(let X of ie8)delete Z[X];return Z}function ne8($,Z){return $.connection_url!==void 0?$.connection_url:Z}function re8($,Z){return $.length===Z.length&&$.every((X,Q)=>X===Z[Q])}var ie8,te8,oe8,ql0;var ys1=D(()=>{qH();rG();M0();R$();CQ();Bp();Hl0();li();hW();ie8=["id","organization_id","created_by","created_at"];te8=Il0.object({id:Il0.string().describe("ID of the connection to update"),data:I80.describe("Partial connection data to update")}),oe8=Il0.object({item:l7.describe("The updated connection entity")});ql0=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:te8,outputSchema:oe8,handler:async($,Z)=>{t(Z);let X=o(Z);await Z.access.check();let Q=o0(Z);if(!Q)throw Error("User ID required to update connection");let{id:Y}=$,G=pe8($.data),J=G.configuration_state!==void 0||G.configuration_scopes!==void 0,W=await Z.storage.connections.findById(Y);if(!W||W.organization_id!==X.id)throw Error("Connection not found in organization");let K=G.connection_type??W.connection_type,F=ne8(G,W.connection_url);if(K==="VIRTUAL"){let f=of(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=rf(f)}let H=G.configuration_state??W.configuration_state??{},N=G.configuration_scopes??W.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;ei(f,N,X.id),await Zp(f,N,X.id,Z)}}if(K==="STDIO"&&!b0().localMode)throw Error("STDIO connections are only available in local mode (--local-mode).");let U=G.connection_token??W.connection_token;if(!U)try{let b=await new m6(Z.db,Z.vault).get(Y);if(b?.accessToken)U=b.accessToken}catch{}let B=await iB({id:W.id,title:G.title??W.title,connection_type:K,connection_url:F,connection_token:U,connection_headers:G.connection_headers??W.connection_headers}).catch(()=>null),O=B?.tools?.length?B.tools:null,L=!1;if(G.configuration_scopes===void 0&&B?.scopes?.length)L=!re8(N,B.scopes),N=B.scopes;if(ei(H,N,X.id),L&&N.length>0)await Zp(H,N,X.id,Z);let w=J||L,E=w?$p(H,N):[],j=w?$p(W.configuration_state??{},W.configuration_scopes??[]):[],z=W.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},S={...W,...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:i}=await Z.storage.connectionCredentialVault.createOrRotateWorkloadToken({organizationId:X.id,subjectConnectionId:Y});I=i.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 U5(S,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(O)Y9()?.set("tools",Y,O).catch(()=>{});return Yy(Y),{item:m}}})});import{z as ae8}from"zod";var se8,Ml0;var gs1=D(()=>{tG();S4();M0();CQ();Bp();hW();se8=Wp.extend({force:ae8.boolean().optional().describe("If true, removes this connection from all agents that reference it before deleting")}),Ml0=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:se8,outputSchema:Kp(l7),handler:async($,Z)=>{t(Z);let X=o(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((K)=>K.title)}));await Z.storage.connections.delete($.id);let J=await Z.storage.organizationSettings.get(X.id);if(J?.registry_config){let{registries:K,blockedMcps:F}=J.registry_config;if($.id in K){let{[$.id]:H,...N}=K;await Z.storage.organizationSettings.upsert(X.id,{registry_config:{registries:N,blockedMcps:F}})}}Y9()?.invalidate($.id).catch(()=>{}),Yy($.id);let W=o0(Z);if(W)x1.capture({distinctId:W,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 Gy}from"zod";var kl0;var hs1=D(()=>{M0();kl0=u({name:"CONNECTION_TEST",description:"Test connection health and latency",annotations:{title:"Test Connection",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:Gy.object({id:Gy.string()}),outputSchema:Gy.object({id:Gy.string(),healthy:Gy.boolean(),latencyMs:Gy.number()}),handler:async($,Z)=>{let X=o(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 us1=D(()=>{ua1();Vs1();Ss1();ys1();gs1();hs1()});import{sql as C4}from"kysely";import{z as NK}from"zod";function cs1($){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 Z04($,Z){let X="",Q=0,Y=!1,G=!1,J=null;for(let W=0;W<$.length;W++){let K=$[W];if(J!==null){let F=`$${J}$`;if($.startsWith(F,W))X+=F,W+=F.length-1,J=null;else X+=K;continue}if(!G&&K==="'"){Y=!Y,X+=K;continue}if(!Y&&K==='"'){G=!G,X+=K;continue}if(!Y&&!G&&K==="$"){let F=/^\$(\d+)/.exec($.slice(W)),H=F?Number(F[1])-1:-1;if(F&&H>=0&&H<Z.length){X+=cs1(Z[H]),W+=F[0].length-1;continue}let N=/^\$([A-Za-z_][A-Za-z0-9_]*)?\$/.exec($.slice(W));if(N){J=N[1]??"",X+=N[0],W+=N[0].length-1;continue}}else if(!Y&&!G&&K==="?"&&Q<Z.length){X+=cs1(Z[Q]),Q++;continue}X+=K}return X}function ls1($){return $.replace(/-/g,"_")}function Q04($){return`app_${ls1($)}`}function Y04($){return`app_role_${ls1($)}`}function G04($){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 J04($,Z,X){if(await C4`CREATE SCHEMA IF NOT EXISTS ${C4.id(Z)}`.execute($),!(await C4`
889
+ </workflows>`,gr1={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:lr8,getId:qQ.USAGE_MANAGER}});function ic0($){return FE.find((Z)=>$.startsWith(`${Z.id}_`))??null}async function mr8($,Z){if("resolveRuntime"in $)return $.resolveRuntime(Z);return{instructions:$.instructions,selectedTools:$.selectedTools}}async function R90({virtualMcp:$,agentId:Z=$.id,organizationId:X,ctx:Q}){let Y=ic0(Z);if(!Y)return $;let G=await mr8(Y,{orgId:X,ctx:Q}),J=G.selectedTools?[...G.selectedTools]:null;return{...$,metadata:{...$.metadata??{},instructions:G.instructions},connections:$.connections.map((W)=>({...W,selected_tools:J}))}}async function I90($,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 ur1($,Z,X){let Q={self:C8.SELF($),registry:C8.REGISTRY($),"community-registry":C8.COMMUNITY_REGISTRY($)};await Promise.all(dr8.map((Y)=>X.delete(`${Y}${$}`))),await Promise.all(FE.map(async(Y)=>{let G=Y.getId($),J=await X.findById(G,$),K=(Y.selectedConnections??["self"]).map((F)=>Q[F]);if(J){await X.update(G,Z,{metadata:{...J.metadata??{},instructions:Y.instructions},connections:K.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:K.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 dr8,FE;var rx=D(()=>{_8();Rr1();qr1();kr1();vr1();br1();yr1();hr1();dr8=["studio-task-manager_"],FE=[_r1,Tr1,Mr1,fr1,Ir1,xr1,gr1]});import{DBOS as q90}from"@dbos-inc/dbos-sdk";async function ir8($){let Z=r8(),X=new Cb(Z.db);await ur1($.orgId,$.createdBy,X)}async function pr8($){let Z=r8(),X=new Cb(Z.db);for(let Q of FE){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((K)=>{let F=K.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((K)=>({connection_id:K.connection_id,selected_tools:K.selected_tools,selected_resources:K.selected_resources,selected_prompts:J}))})}}async function nr8($){await q90.runStep(()=>ir8($),{name:"installStudioPack"}),await q90.runStep(()=>pr8($),{name:"backfillSelectedPrompts"})}async function pc0($){await q90.startWorkflow(tr8,{workflowID:`install-studio-pack:${or8}:${$.orgId}`})($)}async function cr1(){let Z=await r8().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 T90(Array.from(X),10,async([Q,Y])=>{try{await pc0({orgId:Q,createdBy:Y})}catch(G){console.error("[studio-pack-backfill] enqueue failed",{orgId:Q},G)}})}var tr8,or8="v6";var M90=D(()=>{iG();Gg0();rx();tr8=q90.registerWorkflow(nr8,{name:"installStudioPackWorkflow"})});class di{constructor(){this._messageQueue=[]}static createLinkedPair(){let $=new di,Z=new di;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 R8}from"zod";var dr1,lr1=1000,rr8=500,mr1,ir1,pr1,nr1,tr1,or1,rr1,ar1,sr1,er1;var ax=D(()=>{dr1=R8.record(R8.string(),R8.array(R8.string())),mr1=R8.record(R8.string(),R8.array(R8.string()).max(rr8)).refine(($)=>Object.keys($).length<=lr1,{message:`Permissions cannot grant more than ${lr1} resources`}),ir1=R8.object({id:R8.string().describe("Unique identifier for the API key"),name:R8.string().describe("Human-readable name for the API key"),userId:R8.string().describe("ID of the user who owns this API key"),permissions:dr1.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:R8.string().datetime().nullable().optional().describe("Expiration date of the API key (ISO 8601)"),createdAt:R8.string().datetime().describe("When the API key was created (ISO 8601)")}),pr1=R8.object({name:R8.string().min(1).max(64).describe("Human-readable name for the API key"),permissions:mr1.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:R8.number().positive().optional().describe("Expiration time in seconds. If not provided, key never expires."),metadata:R8.record(R8.string(),R8.unknown()).optional().describe("Additional metadata to store with the API key")}),nr1=R8.object({id:R8.string().describe("Unique identifier for the API key"),name:R8.string().describe("Human-readable name for the API key"),key:R8.string().describe("The actual API key value. STORE THIS SECURELY - it will not be shown again!"),permissions:dr1.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:R8.string().datetime().nullable().optional().describe("Expiration date of the API key (ISO 8601)"),createdAt:R8.string().datetime().describe("When the API key was created (ISO 8601)")}),tr1=R8.object({}),or1=R8.object({items:R8.array(ir1).describe("List of API keys (without key values)")}),rr1=R8.object({keyId:R8.string().describe("ID of the API key to update"),name:R8.string().min(1).max(64).optional().describe("New name for the API key"),permissions:mr1.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:R8.record(R8.string(),R8.unknown()).optional().describe("New metadata. Replaces existing metadata.")}),ar1=R8.object({item:ir1.describe("The updated API key (without key value)")}),sr1=R8.object({keyId:R8.string().describe("ID of the API key to delete")}),er1=R8.object({success:R8.boolean().describe("Whether the deletion was successful"),keyId:R8.string().describe("ID of the deleted API key")})});var nc0;var $a1=D(()=>{S4();M0();ax();nc0=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:pr1,outputSchema:nr1,handler:async($,Z)=>{t(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 tc0;var Za1=D(()=>{S4();M0();ax();tc0=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:sr1,outputSchema:er1,handler:async($,Z)=>{t(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((K)=>K.id===$.keyId);if(!Y)throw Error("API key not found");let J=Y.metadata?.organization?.id,W=Z.organization?.id;if(J!==W)throw Error("Cannot delete API key from another organization");if(await Z.boundAuth.apiKey.delete($.keyId),W)x1.capture({distinctId:X,event:"api_key_deleted",groups:{organization:W},properties:{key_id:$.keyId,organization_id:W}});return{success:!0,keyId:$.keyId}}})});var oc0;var Xa1=D(()=>{M0();ax();oc0=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:tr1,outputSchema:or1,handler:async($,Z)=>{t(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 rc0;var Qa1=D(()=>{M0();ax();rc0=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:rr1,outputSchema:ar1,handler:async($,Z)=>{if(t(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,W=Z.organization?.id;if(J!==W)throw Error("Cannot update API key from another organization");let K=await Z.boundAuth.apiKey.update({keyId:$.keyId,name:$.name,permissions:$.permissions,metadata:{...$.metadata,organization:Z.organization}});if(!K)throw Error(`Failed to update API key: ${$.keyId}`);return{item:{id:K.id,name:K.name??$.name??"Unnamed Key",userId:K.userId,permissions:K.permissions??{},expiresAt:K.expiresAt?K.expiresAt instanceof Date?K.expiresAt.toISOString():K.expiresAt:null,createdAt:K.createdAt instanceof Date?K.createdAt.toISOString():K.createdAt}}}})});var Ya1=D(()=>{$a1();Za1();Xa1();Qa1();ax()});function pB($){let Z=$.trim();if(!Z)return{ok:!1,error:"Enter a website URL."};let X=sr8.test(Z),Q=er8.test(Z),Y=$a8.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 W=J.hostname.split(".");if(W.length<2||W.some((K)=>!K||!Za8.test(K)))return{ok:!1,error:"Enter a valid website URL."};return J.protocol="https:",{ok:!0,value:J.origin}}var sr8,er8,$a8,Za8;var mi=D(()=>{sr8=/^[a-zA-Z][a-zA-Z\d+.-]*:/,er8=/^[a-zA-Z][a-zA-Z\d+.-]*:\/\//,$a8=/^[^\s/:?#]+\.[^\s/:?#]+:\d+(?:[/?#]|$)/,Za8=/^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$/i});import{z as iX}from"zod";function GK($){if($.baseUrl)return $.baseUrl.replace(/\/+$/,"");return(($.settings??b0()).reportsInternalApiUrl??Xa8).replace(/\/+$/,"")}function Ja1($={}){return`${GK($)}/api/v2/mcp`}function HE($){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 k90($){return new URL($).hostname}function Ya8($){return $==="ownership_unverified"||$==="already_claimed_by_other_org"}function Ga8($,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 Ja8($){let Z=await ii($);return Ya8(Z?.error)?Z.error:"unknown"}async function ii($){let Z=await $.text().catch(()=>"");if(!Z)return;try{return JSON.parse(Z)}catch{return}}async function ac0($){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 Ka1($,Z={}){let X=GK(Z),Q=HE(Z),Y=Z.fetchImpl??fetch,G=k90($.siteUrl),J=`${X}/api/v2/internal/diagnostics/${encodeURIComponent(G)}/upgrade`,W=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(!W.ok){let F=await Ja8(W);throw new Wa1(F,{email:$.email,domain:G})}let K=Qa8.safeParse(await ii(W));if(!K.success)throw Error("Commerce Discovery auth response did not include a token.");return{authorizationToken:K.data.token}}async function Fa1($,Z={}){let X=GK(Z),Q=HE(Z),Y=Z.fetchImpl??fetch,G=k90($.siteUrl),J=`${X}/api/v2/internal/diagnostics/${encodeURIComponent(G)}/bindings`,W=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(W.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(W.status===422){let F=Ga1.safeParse(await ii(W));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(!W.ok)throw Error(await ac0(W));let K=Ga1.safeParse(await ii(W));if(!K.success||!K.data.binding)throw Error("Commerce Discovery bind response did not include a binding.");return{ok:!0,resourceId:K.data.binding.resource_id,evidence:K.data.binding.evidence}}async function Ha1($,Z={}){let X=GK(Z),Q=HE(Z),Y=Z.fetchImpl??fetch,G=k90($.siteUrl),J=`${X}/api/v2/internal/diagnostics/${encodeURIComponent(G)}/run`,W=await Y(J,{method:"POST",headers:{Authorization:`Bearer ${Q}`,"Content-Type":"application/json"},body:JSON.stringify({org_id:$.orgId,...$.githubRepo?{github_repo:$.githubRepo}:{}})});if(W.status===409)return{triggered:!1,reason:"not_upgraded"};if(!W.ok)throw Error(await ac0(W));return{triggered:!0}}async function Na1($,Z={}){let X=GK(Z),Q=HE(Z),Y=Z.fetchImpl??fetch,G=k90($.siteUrl),J=`${X}/api/v2/internal/diagnostics/${encodeURIComponent(G)}/connections/status?org_id=${encodeURIComponent($.orgId)}`,W=await Y(J,{method:"GET",headers:{Authorization:`Bearer ${Q}`}});if(W.status===404||W.status===409)return{providers:{},claimed:!1};if(!W.ok)throw Error(await ac0(W));let K=Wa8.safeParse(await ii(W));return{providers:K.success?K.data.providers:{},claimed:!0}}var Xa8,Qa8,Ga1,Wa1,Wa8;var NE=D(()=>{_8();R$();Xa8=new URL(ug1).origin,Qa8=iX.object({token:iX.string().min(1)}),Ga1=iX.object({binding:iX.object({resource_id:iX.string(),evidence:iX.string()}).optional(),reason:iX.string().optional(),detail:iX.string().optional()});Wa1=class Wa1 extends Error{code;constructor($,Z={}){super(Ga8($,Z));this.name="CommerceDiscoveryClaimError",this.code=$}};Wa8=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 gY}from"zod";var Ka8,Fa8,sc0;var Ua1=D(()=>{mi();M0();NE();Ka8=gY.object({siteUrl:gY.string().min(1).describe("Website URL of the store being bound."),provider:gY.enum(["ga4","gsc"]).describe("Which Google source to bind: ga4 (Analytics) or gsc (Search Console)."),resourceId:gY.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/).")}),Fa8=gY.discriminatedUnion("ok",[gY.object({ok:gY.literal(!0),resourceId:gY.string(),evidence:gY.string()}),gY.object({ok:gY.literal(!1),reason:gY.string(),detail:gY.string()})]),sc0=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:Ka8,outputSchema:Fa8,handler:async($,Z)=>{t(Z);let X=o(Z);await Z.access.check();let Q=pB($.siteUrl);if(!Q.ok)throw Error(Q.error);return Fa1({siteUrl:Q.value,orgId:X.id,provider:$.provider,resourceId:$.resourceId.trim()})}})});import{z as JK}from"zod";var Ha8,Na8,ec0;var Ba1=D(()=>{mi();M0();NE();Ha8=JK.object({siteUrl:JK.string().min(1).describe("Website URL of the store to inspect.")}),Na8=JK.object({providers:JK.record(JK.string(),JK.object({connected:JK.boolean(),via:JK.enum(["oauth","sa"]).nullable(),resource:JK.string().nullable()})),claimed:JK.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.")}),ec0=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:Ha8,outputSchema:Na8,handler:async($,Z)=>{t(Z);let X=o(Z);await Z.access.check();let Q=pB($.siteUrl);if(!Q.ok)throw Error(Q.error);return Na1({siteUrl:Q.value,orgId:X.id})}})});import{z as pi}from"zod";var Ua8,Ba8,$l0;var Oa1=D(()=>{_8();mi();M0();NE();Ua8=pi.object({siteUrl:pi.string().min(1).describe("Website URL to run the diagnostic for.")}),Ba8=pi.object({triggered:pi.boolean(),reason:pi.string().optional()}),$l0=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:Ua8,outputSchema:Ba8,handler:async($,Z)=>{t(Z);let X=o(Z);await Z.access.check();let Q=pB($.siteUrl);if(!Q.ok)throw Error(Q.error);let Y=C8.COMMERCE_DISCOVERY(X.id),J=(await Z.storage.connections.findById(Y,X.id))?.configuration_state,W=J&&typeof J==="object"&&typeof J.github_repo==="string"&&J.github_repo.length>0?J.github_repo:void 0;return Ha1({siteUrl:Q.value,orgId:X.id,githubRepo:W})}})});var nB=D(()=>{C80()});import{z as WK}from"zod";async function wa8($,Z,X,Q){let Y=await $.storage.connections.findById(Z,X);if(Y)return Y;throw Q}async function Ea8($,Z,X,Q){let Y=await $.storage.virtualMcps.findById(Z,X);if(Y)return Y;throw Q}var Zl0,Oa8=3600000,Da8,La8,Xl0;var Da1=D(()=>{_8();mi();M0();hW();nB();NE();Zl0=a40,Da8=WK.object({siteUrl:WK.string().min(1).describe("Website URL to configure.")}),La8=WK.object({connection:l7,virtualMcp:d7,reportApp:WK.object({connectionId:WK.string(),virtualMcpId:WK.string(),toolName:WK.literal(Zl0)}),created:WK.object({connection:WK.boolean(),virtualMcp:WK.boolean()})});Xl0=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:Da8,outputSchema:La8,handler:async($,Z)=>{t(Z);let X=o(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=pB($.siteUrl);if(!Y.ok)throw Error(Y.error);let G=C8.COMMERCE_DISCOVERY(X.id),J=e40(X.id),W=new URLSearchParams({connection:G,tool:Zl0}),K={email:Z.auth.user?.email,reportUrl:`${Z.baseUrl}/${encodeURIComponent(X.slug??X.id)}/agents/${J}/app?${W.toString()}`},F=await Z.storage.connections.findById(G,X.id),H={connection:!1,virtualMcp:!1},N=await Ka1({siteUrl:Y.value,orgId:X.id,orgName:X.name,...K}),U=Ja1();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=eg1(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 wa8(Z,G,X.id,w)}}let B=await Z.storage.virtualMcps.findById(J,X.id);if(!B){console.log("[commerce-discovery] creating virtual MCP",{orgId:X.id,siteUrl:Y.value,connectionId:F.id,virtualMcpId:J});try{B=await Z.storage.virtualMcps.create(X.id,Q,$h1(X.id,F.id),{id:J}),H.virtualMcp=!0}catch(w){B=await Ea8(Z,J,X.id,w)}}if(!B.pinned)B=await Z.storage.virtualMcps.update(B.id,Q,{pinned:!0});let O=await Z.db.selectFrom("organization").select(["createdAt"]).where("id","=",X.id).executeTakeFirst();if((O?Date.now()-new Date(O.createdAt).getTime():Number.POSITIVE_INFINITY)<Oa8){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:B,reportApp:{connectionId:F.id,virtualMcpId:B.id,toolName:Zl0},created:H}}})});var La1=D(()=>{Ua1();Ba1();Oa1();Da1()});var Ql0=_((wa1)=>{Object.defineProperty(wa1,"__esModule",{value:!0});wa1.kvPrefix=wa1.KvWatchInclude=void 0;wa1.KvWatchInclude={LastValue:"",AllHistory:"history",UpdatesOnly:"updates"};wa1.kvPrefix="KV_"});var Va1=_((Ma1)=>{Object.defineProperty(Ma1,"__esModule",{value:!0});Ma1.KvStatusImpl=Ma1.Bucket=Ma1.Kvm=Ma1.kvOperationHdr=void 0;Ma1.Base64KeyCodec=Pa8;Ma1.NoopKvCodecs=Yl0;Ma1.defaultBucketOpts=za1;Ma1.validateKey=Pa1;Ma1.validateSearchKey=Aa1;Ma1.hasWildcards=Ta1;Ma1.validateBucket=V90;var g5=PY(),Q5=Pe(),y5=Ql0();function Pa8(){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 Yl0(){return{key:{encode($){return $},decode($){return $}},value:{encode($){return typeof $==="string"?new TextEncoder().encode($):$},decode($){return $}}}}function za1(){return{replicas:1,history:1,timeout:2000,max_bytes:-1,maxValueSize:-1,codec:Yl0(),storage:Q5.StorageType.File}}Ma1.kvOperationHdr="KV-Operation";var ja1="$KV",Aa8=/^[-/=.\w]+$/,Ta8=/^[-/=.>*\w]+$/,Ra8=/^[-\w]+$/;function Pa1($){if($.startsWith(".")||$.endsWith(".")||!Aa8.test($))throw Error(`invalid key: ${$}`)}function Aa1($){if($.startsWith(".")||$.endsWith(".")||$.includes("..")||!Ta8.test($))throw Error(`invalid key: ${$}`)}function Ta1($){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 V90($){if(!Ra8.test($))throw Error(`invalid bucket name: ${$}`)}class Ra1{js;constructor($){this.js=(0,Q5.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(g5.Feature.JS_KV);if(!X)return Promise.reject(Error(`kv is only supported on servers ${Q} or better`));if(Z.bindOnly)return sx.bind(this.js,$,Z);return sx.create(this.js,$,Z)}list(){let $=(X)=>{let Y=X.streams.filter((J)=>{return J.config.name.startsWith(y5.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 S90(J,G)})},Z=`${this.js.prefix}.STREAM.LIST`;return new Q5.ListerImpl(Z,$,this.js)}}Ma1.Kvm=Ra1;class sx{js;jsm;stream;bucket;direct;codec;prefix;editPrefix;useJsPrefix;_prefixLen;constructor($,Z,X){V90($),this.js=Z,this.jsm=X,this.bucket=$,this.prefix=ja1,this.editPrefix="",this.useJsPrefix=!1,this._prefixLen=0}static async create($,Z,X={}){V90(Z);let Q=await $.jetstreamManager(),Y=new sx(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}};V90(Z);let J=new sx(Z,$,Y);return G.config.name=X.streamName??J.bucketName(),Object.assign(J,G),J.stream=G.config.name,J.codec=X.codec||Yl0(),J.direct=G.config.allow_direct??!1,J.initializePrefixes(G),J}async init($={}){let Z=Object.assign(za1(),$);this.codec=Z.codec;let X={};if(this.stream=X.name=$.streamName??this.bucketName(),X.retention=Q5.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,g5.nanos)(Z.markerTTL);if($.mirror){let F=Object.assign({},$.mirror);if(!F.name.startsWith(y5.kvPrefix))F.name=`${y5.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(y5.kvPrefix)?N.name.substring(y5.kvPrefix.length):N.name;if(!N.name.startsWith(y5.kvPrefix))N.name=`${y5.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?Q5.StoreCompression.S2:Q5.StoreCompression.None;let Q=this.js.nc,Y=Q.getServerVersion(),G=Y?(0,g5.compare)(Y,(0,g5.parseSemVer)("2.7.2"))>=0:!1;X.discard=G?Q5.DiscardPolicy.New:Q5.DiscardPolicy.Old;let{ok:J,min:W}=Q.features.get(g5.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 ${W}`))}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,g5.nanos)(Z.ttl);X.allow_rollup_hdrs=!0;let K;try{if(K=await this.jsm.streams.info(X.name),!K.config.allow_direct&&this.direct===!0)this.direct=!1}catch(F){if(F.message==="stream not found")K=await this.jsm.streams.add(X);else throw F}this.initializePrefixes(K)}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(y5.kvPrefix))X=X.substring(y5.kvPrefix.length);if(Z.external&&Z.external.api!==""){let Q=Z.name.substring(y5.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??`${y5.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`${ja1}.${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=Pa1;validateSearchKey=Aa1;hasWildcards=Ta1;close(){return Promise.resolve()}dataLen($,Z){let X=Z?Z.get(Q5.JsHeaders.MessageSizeHdr)||"":"";if(X!=="")return parseInt(X,10);return $.length}smToEntry($){return new Ia1(this.bucket,this.prefixLen,$,this.codec)}jmToWatchEntry($,Z){return new qa1(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 Q5.JetStreamApiError){let J=G;if(J.code!==Q5.JetStreamApiCodes.StreamWrongLastSequence&&J.code!==Q5.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,g5.headers)();G.headers=J,J.set(Q5.PubHeaders.ExpectedLastSubjectSequenceHdr,`${X.previousSeq}`)}if(Q)(G.headers||(0,g5.headers)()).set(Q5.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 W=this.subjectForKey(J.key);if(J.created.getTime()>=Q)return this.jsm.streams.purge(this.stream,{filter:W,keep:1});else return this.jsm.streams.purge(this.stream,{filter:W,keep:0})}),G=await Promise.all(Y);return G.unshift({success:!0,purged:0}),G.reduce((J,W)=>{return J.purged+=W.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,g5.headers)();if(Y.set(Ma1.kvOperationHdr,Z),Z==="PURGE"){let G=X;if(Y.set(Q5.JsHeaders.RollupHdr,Q5.JsHeaders.RollupValueSubject),typeof G?.ttl==="string"&&G.ttl!=="")Y.set(Q5.PubHeaders.MessageTTL,`${G.ttl}`)}if(X?.previousSeq)Y.set(Q5.PubHeaders.ExpectedLastSubjectSequenceHdr,`${X.previousSeq}`);await this.js.publish(this.subjectForKey(Q,!0),g5.Empty,{headers:Y})}_buildCC($,Z,X={}){let Y=(!Array.isArray($)?[$]:$).map((W)=>{let K=this.encodeKey(W);return this.validateSearchKey(W),this.fullKeyName(K)}),G=Q5.DeliverPolicy.LastPerSubject;if(Z===y5.KvWatchInclude.AllHistory)G=Q5.DeliverPolicy.All;if(Z===y5.KvWatchInclude.UpdatesOnly)G=Q5.DeliverPolicy.New;let J=void 0;if(Y.length===1)J=Y[0],Y=void 0;return Object.assign({deliver_policy:G,ack_policy:Q5.AckPolicy.None,filter_subjects:Y,filter_subject:J,flow_control:!0,idle_heartbeat:(0,g5.nanos)(5000)},X)}remove($){return this.purge($)}async history($={}){let Z=$.key??">",X={};X.headers_only=$.headers_only||!1;let Q=new g5.QueuedIteratorImpl,Y=()=>{Q.stop()},G=this._buildCC(Z,y5.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 K=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 K.closed().then(()=>{Q.push(Y)}),(async()=>{for await(let F of K.status())switch(F.type){case"heartbeat":Q.push(()=>{Q.stop()});break}})().then(),Q.iterClosed.then(()=>{K.stop()}),Q}canSetWatcherName(){let $=this.js.nc,{ok:Z}=$.features.get(g5.Feature.JS_NEW_CONSUMER_CREATE_API);return Z}async watch($={}){let Z=$.key??">",X=new g5.QueuedIteratorImpl,Q={};Q.headers_only=$.headers_only||!1;let Y=y5.KvWatchInclude.LastValue;if($.include===y5.KvWatchInclude.AllHistory)Y=y5.KvWatchInclude.AllHistory;else if($.include===y5.KvWatchInclude.UpdatesOnly)Y=y5.KvWatchInclude.UpdatesOnly;let G=$.ignoreDeletes===!0,J=this._buildCC(Z,Y,Q);if(J.name=`KV_WATCHER_${g5.nuid.next()}`,$.resumeFromRevision&&$.resumeFromRevision>0)J.deliver_policy=Q5.DeliverPolicy.StartSequence,J.opt_start_seq=$.resumeFromRevision;let W=await this.js.consumers.getPushConsumer(this.stream,J),F=(await W.info(!0)).num_pending,H=Y===y5.KvWatchInclude.UpdatesOnly||F===0;X._data=W;let N=0,U=await W.consume({callback:(B)=>{if(!H)N++,H=N>=F;let O=this.jmToWatchEntry(B,H);if(G&&O.operation==="DEL")return;X.push(O),X.received++}});return X.iterClosed.then(()=>{U.stop()}),U.closed().then(()=>{X.push(()=>{X.stop()})}),X}async keys($=">"){let Z=new g5.QueuedIteratorImpl,X=this._buildCC($,y5.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 W=J.headers?.get(Ma1.kvOperationHdr);if(W!=="DEL"&&W!=="PURGE"){let K=this.decodeKey(J.subject.substring(this.prefixLen));Z.push(K)}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 S90(Q,Z)}}Ma1.Bucket=sx;class S90{si;cluster;constructor($,Z=""){this.si=$,this.cluster=Z}get bucket(){return this.si.config.name.startsWith(y5.kvPrefix)?this.si.config.name.substring(y5.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,g5.millis)(this.si.config.max_age)}get markerTTL(){if(typeof this.si.config.subject_delete_marker_ttl==="number")return(0,g5.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!==Q5.StoreCompression.None;return!1}}Ma1.KvStatusImpl=S90;class Ia1{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(Ma1.kvOperationHdr)||"PUT"}get length(){let $=this.sm.header.get(Q5.JsHeaders.MessageSizeHdr)||"";if($!=="")return parseInt($,10);return this.sm.data.length}json($){return JSON.parse(g5.TD.decode(this.value),$)}string(){return g5.TD.decode(this.value)}}class qa1{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,g5.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(Ma1.kvOperationHdr)||"PUT"}get delta(){return this.sm.info.pending}get length(){let $=this.sm.headers?.get(Q5.JsHeaders.MessageSizeHdr)||"";if($!=="")return parseInt($,10);return this.sm.data.length}get isUpdate(){return this.update}json($){return JSON.parse(g5.TD.decode(this.value),$)}string(){return g5.TD.decode(this.value)}}});var Gl0=_((M3)=>{Object.defineProperty(M3,"__esModule",{value:!0});M3.validateKey=M3.validateBucket=M3.NoopKvCodecs=M3.Kvm=M3.defaultBucketOpts=M3.Bucket=M3.Base64KeyCodec=M3.KvWatchInclude=M3.kvPrefix=void 0;var Sa1=Ql0();Object.defineProperty(M3,"kvPrefix",{enumerable:!0,get:function(){return Sa1.kvPrefix}});Object.defineProperty(M3,"KvWatchInclude",{enumerable:!0,get:function(){return Sa1.KvWatchInclude}});var UE=Va1();Object.defineProperty(M3,"Base64KeyCodec",{enumerable:!0,get:function(){return UE.Base64KeyCodec}});Object.defineProperty(M3,"Bucket",{enumerable:!0,get:function(){return UE.Bucket}});Object.defineProperty(M3,"defaultBucketOpts",{enumerable:!0,get:function(){return UE.defaultBucketOpts}});Object.defineProperty(M3,"Kvm",{enumerable:!0,get:function(){return UE.Kvm}});Object.defineProperty(M3,"NoopKvCodecs",{enumerable:!0,get:function(){return UE.NoopKvCodecs}});Object.defineProperty(M3,"validateBucket",{enumerable:!0,get:function(){return UE.validateBucket}});Object.defineProperty(M3,"validateKey",{enumerable:!0,get:function(){return UE.validateKey}})});var Jl0=_((tB)=>{Object.defineProperty(tB,"__esModule",{value:!0});tB.NoopKvCodecs=tB.Kvm=tB.defaultBucketOpts=tB.Bucket=tB.Base64KeyCodec=tB.KvWatchInclude=void 0;var ba8=Gl0();Object.defineProperty(tB,"KvWatchInclude",{enumerable:!0,get:function(){return ba8.KvWatchInclude}});var ti=Gl0();Object.defineProperty(tB,"Base64KeyCodec",{enumerable:!0,get:function(){return ti.Base64KeyCodec}});Object.defineProperty(tB,"Bucket",{enumerable:!0,get:function(){return ti.Bucket}});Object.defineProperty(tB,"defaultBucketOpts",{enumerable:!0,get:function(){return ti.defaultBucketOpts}});Object.defineProperty(tB,"Kvm",{enumerable:!0,get:function(){return ti.Kvm}});Object.defineProperty(tB,"NoopKvCodecs",{enumerable:!0,get:function(){return ti.NoopKvCodecs}})});function C90(){let $=new TextEncoder,Z=new TextDecoder;return{encode:(X)=>$.encode(JSON.stringify(X)),decode:(X)=>JSON.parse(Z.decode(X))}}class Wl0{options;kv=null;codec=C90();constructor($){this.options=$}async init(){let $=this.options.getJetStream();if(!$)return;this.kv=await new _a1.Kvm($).create(ya8,{storage:Ca1.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 ga8($,Z,X){if(X<=0)return!0;if($===void 0)return!0;return Z-$>=X}function va1($){let Z=["tools","resources","prompts"];for(let X of Z){let Q=`${X}:${$}`;v90.delete(Q),ri.delete(Q)}}function _90($){return $ instanceof L1&&$.code===I1.MethodNotFound}function ha8($){return $ instanceof L1&&$.code===-32000&&/connection closed/i.test($.message)}async function rB($,Z,X,Q,Y,G=0){if(!Q)try{return await X()}catch(F){if(_90(F))return[];return oi.add(1,{type:$,outcome:"error",stage:"no_cache"}),null}let J=`${$}:${Z}`,W=await Q.get($,Z);if(W===null)try{let F=await X();return Q.set($,Z,F).catch(()=>{}),v90.set(J,Date.now()),oi.add(1,{type:$,outcome:"miss",stage:"miss"}),F}catch(F){if(_90(F))return Q.set($,Z,[]).catch(()=>{}),[];return oi.add(1,{type:$,outcome:"error",stage:"miss"}),null}if(oi.add(1,{type:$,outcome:"hit",stage:"hit"}),ga8(v90.get(J),Date.now(),G)&&!ri.has(J)){ri.add(J),v90.set(J,Date.now());let F=X().then((H)=>Q.set($,Z,H)).catch((H)=>{if(_90(H)||ha8(H)){if(_90(H))Q.set($,Z,[]).catch(()=>{});return}oi.add(1,{type:$,outcome:"error",stage:"revalidation"})}).finally(()=>ri.delete(J));Y?.(F)}return W}function Kl0($){fa1=$}function Y9(){return fa1}var Ca1,_a1,oi,ya8="DECOCMS_MCP_LISTS",ri,v90,oB=30000,fa1=null;var CQ=D(()=>{X9();I6();Ca1=V(OL(),1),_a1=V(Jl0(),1),oi=w$.createCounter("mcp_list_cache.fetches",{description:"MCP list cache fetch outcomes (hit, miss, error)",unit:"{fetches}"});ri=new Set;w$.createObservableGauge("mcp_list_cache.pending_revalidations",{description:"In-flight background MCP list revalidations on this pod",unit:"{revalidations}"}).addCallback(($)=>$.observe(ri.size));v90=new Map});async function Fl0($,Z,X){let Q=new AbortController,Y,G=new Promise((W,K)=>{Y=setTimeout(()=>{Q.abort(),K(new ba1($.id,X))},X)}),J=(async()=>{let W=await U5($,Z,!0);try{return(await W.listTools(void 0,{timeout:X,signal:Q.signal})).tools}finally{await W.close().catch(()=>{})}})();J.catch(()=>{});try{return await Promise.race([J,G])}finally{if(Y)clearTimeout(Y)}}var ba1;var xa1=D(()=>{ai();ba1=class ba1 extends Error{constructor($,Z){super(`listTools timed out after ${Z}ms for connection ${$}`);this.name="ListToolsTimeoutError"}}});function f90($){return(Z)=>{if(Z instanceof L1&&Z.code===I1.MethodNotFound)return $;throw Z}}var ya1=D(()=>{X9()});function b90($,Z,X){let Q=aB($,Z,X,Y9()??void 0),Y=Lw(Q,{name:"studio-mcp-server",version:"1.0.0"},{capabilities:ua8,toolCallTimeoutMs:Vb});Y.server.setRequestHandler(lU,async()=>{return await Q.listResources().catch(f90({resources:[]}))}),Y.server.setRequestHandler(dU,async()=>{return await Q.listResourceTemplates().catch(f90({resourceTemplates:[]}))}),Y.server.setRequestHandler(mU,async()=>{return await Q.listPrompts().catch(f90({prompts:[]}))});let G=Y.close.bind(Y);return Y.close=async()=>{await G(),await Q.close().catch(()=>{})},Y}var ua8;var ga1=D(()=>{hX();X9();si();CQ();ya1();ua8={tools:{},resources:{},prompts:{}}});var qH=D(()=>{ai();xa1();ga1()});function ei($,Z,X){if(Z.some((Q)=>Q!=="*"&&Q.startsWith("SELF::"))&&$.SELF===void 0)$.SELF={value:`${X}_self`}}function $p($,Z){let X=new Map;for(let Q of Z){if(Q==="*")continue;let[Y,G]=q50(Q);if(!ca8.has(G))continue;let J=Oi(Y,$);if(typeof J!=="object"||J===null||!("value"in J))continue;let W=J.value;if(typeof W!=="string")continue;X.set(`${W}:${G}`,{targetConnectionId:W,scope:G})}return[...X.values()]}async function Zp($,Z,X,Q){for(let J of Z){if(J==="*")continue;let[W]=q50(J),K=Oi(W,$);if(K===void 0||K===null)throw Error(`Scope references key "${W}" but it's not present in state`)}let Y=ym1($,Z),G=`${X}_self`;for(let J of Y){if(J===G)continue;let W=await Q.storage.connections.findById(J);if(!W||W.organization_id!==X)throw Error(`Referenced connection not found: ${J}`);try{await Q.access.check(J)}catch(K){throw Error(`Access denied to referenced connection: ${J}. ${K.message}`)}}}var ca8;var Hl0=D(()=>{Bu0();W60();ca8=new Set([G60,J60])});import{z as ha1}from"zod";var la8,da8,Nl0;var ua1=D(()=>{S4();M0();R$();CQ();qH();Hl0();li();hW();la8=ha1.object({data:R80.describe("Data for the new connection (id is auto-generated if not provided)")}),da8=ha1.object({item:l7.describe("The created connection entity")}),Nl0=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:la8,outputSchema:da8,handler:async($,Z)=>{t(Z);let X=o(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(await Z.storage.connections.findBySanitizedId(Y.id))throw Error("Connection id conflicts with an existing connection's isolated database schema")}if(Y.connection_type==="VIRTUAL"){let N=of(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=rf(N)}if(Y.connection_type==="STDIO"&&!b0().localMode)throw Error("STDIO connections are only available in local mode (--local-mode).");let G=await iB({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,W=G?.scopes?.length?G.scopes:Y.configuration_scopes??null,K=Y.configuration_state??null;if(K&&W?.length)ei(K,W,X.id),await Zp(K,W,X.id,Z);let F=await Z.storage.connections.createNew({...Y,tools:null,configuration_state:K,configuration_scopes:W}),H=K&&W?.length?$p(K,W):[];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:B}=await Z.storage.connectionCredentialVault.createOrRotateWorkloadToken({organizationId:X.id,subjectConnectionId:F.id});N=B.id,await(await U5(F,Z,!1)).callTool({name:"ON_MCP_CONFIGURATION",arguments:{state:K,scopes:W,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)Y9()?.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 nG}from"zod/v4";import{z as ca1}from"zod/v4";import{z as x90}from"zod/v4";import{z as KK}from"zod/v4";import{z as na8}from"zod/v4";import{z as BE}from"zod/v4";import{z as FK}from"zod/v4";import{z as xZ}from"zod/v4";import{z as la1}from"zod/v4";import{z as h90}from"zod/v4";import{z as Ls8}from"zod/v4";import{z as da1}from"zod/v4";import{z as y90}from"zod/v4";import{z as Is8}from"zod/v4";function Xp($,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)=>Xp(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)&&Xp($[Y],Z[Y]))}return!1}function Bs8(){return($)=>{if(!Array.isArray($))return!0;let Z=[];return $.every((X)=>{if(Z.some((Y)=>Xp(X,Y)))return!1;return Z.push(X),!0})}}function g90($,Z){return $.safeParse(Z).success}function O7($){if(typeof $==="boolean")return $?nG.any():nG.never();let Z={};for(let Y of Vs8)Y.apply(Z,$);let X=[];if(Z.string!==!1)X.push(Z.string||nG.string());if(Z.number!==!1)X.push(Z.number||nG.number());if(Z.boolean!==!1)X.push(Z.boolean||nG.boolean());if(Z.null!==!1)X.push(Z.null||nG.null());if(Z.array!==!1)X.push(Z.array||nG.array(nG.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=nG.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=nG.never();else if(X.length===1)Q=X[0];else if(!Object.keys($).some((G)=>G!=="$schema"&&G!=="title"&&G!=="description"))Q=nG.any();else Q=nG.union(X);for(let Y of Ss8)Q=Y.apply(Q,$);return Q}var ma8=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||ca1.number();if(Y instanceof ca1.ZodNumber)$.number=Y.int()}}},ia8=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=x90.literal(X);else if(typeof X==="number")$.number=x90.literal(X);else if(typeof X==="boolean")$.boolean=x90.literal(X);else if(X===null)$.null=x90.null();else if(Array.isArray(X))$.array=void 0;else if(typeof X==="object")$.object=void 0}},pa8=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?KK.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 KK.literal($[0]);if(Z==="string")return KK.enum($);if(Z==="number"){let[X,Q,...Y]=$;return KK.union([KK.literal(X),KK.literal(Q),...Y.map((G)=>KK.literal(G))])}if(Z==="boolean")return KK.union([KK.literal(!0),KK.literal(!1)]);return!1}},ta8=class{apply($,Z){let X=Z;if(X.type==="string"&&X.format==="binary"&&X.contentEncoding==="binary"){let Q=na8.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}}},oa8=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=BE.string()}}},ra8=class{apply($,Z){let X=Z;if(X.minLength===void 0)return;if($.string!==!1){let Q=$.string||BE.string();if(Q instanceof BE.ZodString)$.string=Q.refine((Y)=>{return Array.from(Y).length>=X.minLength},{message:`String must be at least ${X.minLength} characters long`})}}},aa8=class{apply($,Z){let X=Z;if(X.maxLength===void 0)return;if($.string!==!1){let Q=$.string||BE.string();if(Q instanceof BE.ZodString)$.string=Q.refine((Y)=>{return Array.from(Y).length<=X.maxLength},{message:`String must be at most ${X.maxLength} characters long`})}}},sa8=class{apply($,Z){let X=Z;if(!X.pattern)return;if($.string!==!1){let Q=$.string||BE.string();if(Q instanceof BE.ZodString){let Y=new RegExp(X.pattern);$.string=Q.regex(Y)}}}},ea8=class{apply($,Z){let X=Z;if(X.minimum===void 0)return;if($.number!==!1){let Q=$.number||FK.number();if(Q instanceof FK.ZodNumber)$.number=Q.min(X.minimum)}}},$s8=class{apply($,Z){let X=Z;if(X.maximum===void 0)return;if($.number!==!1){let Q=$.number||FK.number();if(Q instanceof FK.ZodNumber)$.number=Q.max(X.maximum)}}},Zs8=class{apply($,Z){let X=Z;if(X.exclusiveMinimum===void 0)return;if($.number!==!1){let Q=$.number||FK.number();if(Q instanceof FK.ZodNumber)if(typeof X.exclusiveMinimum==="number")$.number=Q.gt(X.exclusiveMinimum);else $.number=!1}}},Xs8=class{apply($,Z){let X=Z;if(X.exclusiveMaximum===void 0)return;if($.number!==!1){let Q=$.number||FK.number();if(Q instanceof FK.ZodNumber)if(typeof X.exclusiveMaximum==="number")$.number=Q.lt(X.exclusiveMaximum);else $.number=!1}}},Qs8=class{apply($,Z){let X=Z;if(X.multipleOf===void 0)return;if($.number!==!1){let Q=$.number||FK.number();if(Q instanceof FK.ZodNumber)$.number=Q.refine((Y)=>{if(X.multipleOf===0)return!1;let G=Y/X.multipleOf,J=Math.round(G),W=Math.min(Math.abs(Y)*Number.EPSILON*10,Math.abs(X.multipleOf)*Number.EPSILON*10);return Math.abs(G-J)<=W/Math.abs(X.multipleOf)},{message:`Must be a multiple of ${X.multipleOf}`})}}},Ys8=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=xZ.array(xZ.any())}}},Gs8=class{apply($,Z){let X=Z;if(X.minItems===void 0)return;if($.array!==!1)$.array=($.array||xZ.array(xZ.any())).min(X.minItems)}},Js8=class{apply($,Z){let X=Z;if(X.maxItems===void 0)return;if($.array!==!1)$.array=($.array||xZ.array(xZ.any())).max(X.maxItems)}},Ws8=class{apply($,Z){let X=Z;if($.array===!1)return;if(Array.isArray(X.items))$.array=$.array||xZ.array(xZ.any());else if(X.items&&typeof X.items!=="boolean"&&!X.prefixItems){let Q=O7(X.items),Y=xZ.array(Q);if($.array&&$.array instanceof xZ.ZodArray){let G=$.array._def;if(G.checks)G.checks.forEach((J)=>{if(J._zod&&J._zod.def){let W=J._zod.def;if(W.check==="min_length"&&W.minimum!==void 0)Y=Y.min(W.minimum);else if(W.check==="max_length"&&W.maximum!==void 0)Y=Y.max(W.maximum)}})}$.array=Y}else if(typeof X.items==="boolean"&&X.items===!1)if(!X.prefixItems)$.array=xZ.array(xZ.any()).max(0);else $.array=$.array||xZ.array(xZ.any());else if(typeof X.items==="boolean"&&X.items===!0)$.array=$.array||xZ.array(xZ.any());else if(X.prefixItems)$.array=$.array||xZ.array(xZ.any())}},Ks8=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)=>O7(G)),Y;if(Q.length===0)Y=la1.tuple([]);else Y=la1.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}},Fs8=class{apply($,Z){let X=Z;if($.object===!1)return;if(X.properties||X.required||X.additionalProperties!==void 0)$.object=$.object||h90.object({}).passthrough()}},Hs8=class{apply($,Z){let X=Z;if(Z.type===void 0&&(X.maxProperties!==void 0||X.minProperties!==void 0)){if($.object===void 0)$.object=h90.object({}).passthrough()}}},Ns8=class{apply($,Z){let X=Z;if(X.maxProperties===void 0)return;if($.object!==!1){let Q=$.object||h90.object({}).passthrough();$.object=Q.refine((Y)=>Object.keys(Y).length<=X.maxProperties,{message:`Object must have at most ${X.maxProperties} properties`})}}},Us8=class{apply($,Z){let X=Z;if(X.minProperties===void 0)return;if($.object!==!1){let Q=$.object||h90.object({}).passthrough();$.object=Q.refine((Y)=>Object.keys(Y).length>=X.minProperties,{message:`Object must have at least ${X.minProperties} properties`})}}},Os8=class{apply($,Z){if(!Z.not)return $;let X=O7(Z.not);return $.refine((Q)=>!g90(X,Q),{message:"Value must not match the 'not' schema"})}},Ds8=class{apply($,Z){if(Z.uniqueItems!==!0)return $;return $.refine(Bs8(),{message:"Array items must be unique"})}},ws8=class{apply($,Z){if(!Z.allOf||Z.allOf.length===0)return $;return Z.allOf.map((Q)=>O7(Q)).reduce((Q,Y)=>Ls8.intersection(Q,Y),$)}},Es8=class{apply($,Z){if(!Z.anyOf||Z.anyOf.length===0)return $;let X=Z.anyOf.length===1?O7(Z.anyOf[0]):da1.union([O7(Z.anyOf[0]),O7(Z.anyOf[1]),...Z.anyOf.slice(2).map((Q)=>O7(Q))]);return da1.intersection($,X)}},js8=class{apply($,Z){if(!Z.oneOf||Z.oneOf.length===0)return $;let X=Z.oneOf.map((Q)=>O7(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"})}},zs8=class{apply($,Z){let X=Z;if(X.prefixItems&&Array.isArray(X.prefixItems)){let Y=X.prefixItems.map((G)=>O7(G));return $.refine((G)=>{if(!Array.isArray(G))return!0;for(let J=0;J<Math.min(G.length,Y.length);J++)if(!g90(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=O7(X.items);for(let W=Y.length;W<G.length;W++)if(!g90(J,G[W]))return!1}}return!0},{message:"Array does not match prefixItems schema"})}return $}},Ps8=class{apply($,Z){let X=Z;if(!X.properties&&!X.required&&X.additionalProperties!==!1)return $;if($ instanceof y90.ZodObject||$ instanceof y90.ZodRecord){let Q={};if(X.properties){for(let[Y,G]of Object.entries(X.properties))if(G!==void 0)Q[Y]=O7(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 y90.object(Q);else return y90.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(!O7(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"})}},As8=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)=>Xp(Q,Y))},{message:"Value must match one of the enum values"})}},Ts8=class{apply($,Z){if(Z.const===void 0)return $;let X=Z.const;if(typeof X!=="object"||X===null)return $;return $.refine((Q)=>Xp(Q,X),{message:"Value must equal the const value"})}},Rs8=class{apply($,Z){if(Z.description)$=$.describe(Z.description);return $}},qs8=class{apply($,Z){var X;let Q=Z;if(!((X=Q.required)==null?void 0:X.includes("__proto__"))||Z.type!==void 0)return $;return Is8.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))}},Ms8=class{apply($,Z){var X;let Q=Z;if(Q.contains===void 0)return $;let Y=O7(Q.contains),G=(X=Q.minContains)!=null?X:1,J=Q.maxContains;return $.refine((W)=>{if(!Array.isArray(W))return!0;let K=0;for(let F of W)if(g90(Y,F))K++;if(K<G)return!1;if(J!==void 0&&K>J)return!1;return!0},{message:"Array must contain required items matching the schema"})}},ks8=class{apply($,Z){let{default:X}=Z;if(X===void 0)return $;if(!$.safeParse(X).success)return $;return $.default(X)}},Vs8,Ss8;var ma1=D(()=>{Vs8=[new ia8,new pa8,new ma8,new ta8,new oa8,new Ys8,new Hs8,new ra8,new aa8,new sa8,new ea8,new $s8,new Zs8,new Xs8,new Qs8,new Ks8,new Gs8,new Js8,new Ws8,new Ns8,new Us8,new Fs8],Ss8=[new qs8,new As8,new Ts8,new ws8,new Es8,new js8,new zs8,new Ps8,new Ms8,new Os8,new Ds8,new ks8,new Rs8]});class Ul0{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,Cs8),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=_Y.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 Cs8="mcp";var ia1=D(()=>{X9()});function _s8($){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 u90;var Bl0=D(()=>{jb();u90=class u90 extends pW{constructor($,Z){super($,Z)}send($,Z){let X=_s8($);if(X?.type==="emit")return this.onmessage?.(X.message),Promise.resolve();if(X?.type==="suppress")return Promise.resolve();return super.send($,Z)}}});var pa1,na1=async($,Z,X)=>{let Q=vs8($.connection,Z,X);if(!Q)throw Error("Unknown MCP connection type");let Y=new pa1({name:$?.name??"MCP Client",version:"1.0.0"});return await Y.connect(Q),{client:Y}},vs8=($,Z,X)=>{if($.type==="Websocket")return new Ul0(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,W)=>{return fetch(J,{...W,headers:{...Y,Accept:"text/event-stream"},signal:Z})}};return new wH(new URL($.url),G)}return new u90(new URL($.url),{requestInit:{headers:Y,signal:Z,credentials:"include"}})};var ta1=D(()=>{mW();pd();ia1();X9();hX();Bl0();pa1=class pa1 extends y9{constructor($,Z){super($,{jsonSchemaValidator:N5,...Z})}async listTools($,Z){return await this.request({method:"tools/list",params:$},Wd,Z)}}});function bs8($,Z){if(OE.set($,Z),OE.size>fs8){let X=OE.keys().next().value;if(X!==void 0)OE.delete(X)}}function aa1($){let Z=(X)=>{if("connection"in $)return na1({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 W;async function Y(K,F=Q){let H=$?.debugId?.(),N=H?{"x-trace-debug-id":H}:void 0,{client:U}=await Z(N),{structuredContent:B,isError:O,content:L}=await U.callTool({name:String(F),arguments:K});if(O){let E=L?.[0]?.text,j=typeof E==="string"?oa1(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(B??L)}`)}if(B!==void 0)return B;let w=L?.[0]?.text;return typeof w==="string"?oa1(w):void 0}async function G(){let{client:K}=await Z(),{tools:F}=await K.listTools();return F}async function J(){if(!("connection"in $))return G();let K=$.connection,F=JSON.stringify(K);try{if(!OE.has(F))bs8(F,G());return await OE.get(F)}catch(H){console.error("Failed to list tools",H),OE.delete(F);return}}async function W(){return(await J()??[]).map((F)=>ra1(F,Y))}return Y.asTool=async()=>{let F=(await J()??[]).find((H)=>H.name===Q);if(!F)throw Error(`Tool ${Q} not found`);return ra1(F,Y)},Y}})}var oa1=($)=>{try{return JSON.parse($)}catch{return $}},fs8=500,OE,ra1=($,Z)=>{return{...$,id:$.name,inputSchema:$.inputSchema?O7($.inputSchema):void 0,outputSchema:$.outputSchema?O7($.outputSchema):void 0,execute:(X)=>{return Z(X.context,$.name)}}};var sa1=D(()=>{ma1();ta1();OE=new Map});function sB($){return aa1($)}var ex;var Ol0=D(()=>{sa1();ex=new Proxy({},{get($,Z){if(Z==="toJSON")return null;if(Z==="forConnection")return(X)=>sB({connection:X});if(Z==="forClient")return(X)=>sB({client:X});return globalThis[Z]}})});function c90($){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 HK=($)=>{return{...c90($),forClient:(Z)=>{return sB({client:Z})},forConnection:(Z)=>{return sB({connection:Z})}}};var DE=D(()=>{Ol0()});import{z as h5}from"zod";var ea1,l90,$s1,d90,Zs1,xs8;var Xs1=D(()=>{DE();ea1=h5.object({specversion:h5.literal("1.0").describe("CloudEvents specification version"),id:h5.string().describe("Unique identifier for this event (UUID recommended)"),source:h5.string().describe("Connection ID of the event publisher"),type:h5.string().describe("Event type (e.g., 'order.created', 'user.signup')"),time:h5.string().datetime().optional().describe("Timestamp of when the event occurred (ISO 8601)"),subject:h5.string().optional().describe("Subject/resource identifier (e.g., order ID, user ID)"),datacontenttype:h5.string().optional().default("application/json").describe("Content type of the data attribute"),dataschema:h5.string().url().optional().describe("URI to the schema for the data attribute"),data:h5.unknown().optional().describe("Event payload (any JSON value)")}),l90=h5.object({events:h5.array(ea1).min(1).describe("Batch of CloudEvents to process")}),$s1=h5.object({success:h5.boolean().optional().describe("Whether this event was processed successfully"),error:h5.string().optional().describe("Error message for this event"),retryAfter:h5.number().int().positive().optional().describe("Re-deliver this event after this many ms")}),d90=h5.object({success:h5.boolean().optional().describe("Batch success - applies to events not in results"),error:h5.string().optional().describe("Batch error message - applies to events not in results"),processedCount:h5.number().int().min(0).optional().describe("Number of events successfully processed"),retryAfter:h5.number().int().positive().optional().describe("Batch retryAfter - applies to events not in results"),results:h5.record(h5.string(),$s1).optional().describe("Per-event results keyed by event ID")}),Zs1=[{name:"ON_EVENTS",inputSchema:l90,outputSchema:d90}],xs8=HK(Zs1)});import{z as u5}from"zod";var Qs1,Ys1,Gs1,Js1,Ws1,Ks1,m90,Dl0;var Ll0=D(()=>{DE();Qs1=u5.object({type:u5.literal("string"),enum:u5.array(u5.string()).optional(),description:u5.string().optional()}),Ys1=u5.object({type:u5.string(),description:u5.string(),paramsSchema:u5.record(u5.string(),Qs1)}),Gs1=u5.object({}),Js1=u5.object({triggers:u5.array(Ys1)}),Ws1=u5.object({type:u5.string(),params:u5.record(u5.string(),u5.string()),enabled:u5.boolean(),callbackUrl:u5.url().optional(),callbackToken:u5.string().min(1).optional()}),Ks1=u5.object({success:u5.boolean()}),m90=[{name:"TRIGGER_LIST",inputSchema:Gs1,outputSchema:Js1},{name:"TRIGGER_CONFIGURE",inputSchema:Ws1,outputSchema:Ks1}],Dl0=HK(m90)});import{z as M$}from"zod";var ys8,gs8,hs8,us8,cs8,ls8,ds8,ms8,is8,ps8,ns8,ts8,LE;var Qp=D(()=>{ys8=M$.object({prefix:M$.string().optional().describe("Filter objects by prefix (e.g., 'folder/' for folder contents)"),maxKeys:M$.number().optional().default(1000).describe("Maximum number of keys to return (default: 1000)"),continuationToken:M$.string().optional().describe("Token for pagination from previous response"),delimiter:M$.string().optional().describe("Delimiter for grouping keys (typically '/'). When set, commonPrefixes returns folder paths.")}),gs8=M$.object({objects:M$.array(M$.object({key:M$.string().describe("Object key/path"),size:M$.number().describe("Object size in bytes"),lastModified:M$.string().describe("Last modified timestamp"),etag:M$.string().describe("Entity tag for the object")})),nextContinuationToken:M$.string().optional().describe("Token for fetching next page of results"),isTruncated:M$.boolean().describe("Whether there are more results available"),commonPrefixes:M$.array(M$.string()).optional().describe("Folder paths when delimiter is used (e.g., ['photos/2024/', 'photos/2025/'])")}),hs8=M$.object({key:M$.string().describe("Object key/path to get metadata for")}),us8=M$.object({contentType:M$.string().optional().describe("MIME type of the object"),contentLength:M$.number().describe("Size of the object in bytes"),lastModified:M$.string().describe("Last modified timestamp"),etag:M$.string().describe("Entity tag for the object"),metadata:M$.record(M$.string(),M$.string()).optional().describe("Custom metadata key-value pairs")}),cs8=M$.object({key:M$.string().describe("Object key/path to generate URL for"),expiresIn:M$.number().optional().describe("URL expiration time in seconds (default: from state config or 3600)")}),ls8=M$.object({url:M$.string().describe("Presigned URL for downloading the object"),expiresIn:M$.number().describe("Expiration time in seconds that was used")}),ds8=M$.object({key:M$.string().describe("Object key/path for the upload"),expiresIn:M$.number().optional().describe("URL expiration time in seconds (default: from state config or 3600)"),contentType:M$.string().optional().describe("MIME type for the object being uploaded")}),ms8=M$.object({url:M$.string().describe("Presigned URL for uploading the object"),expiresIn:M$.number().describe("Expiration time in seconds that was used")}),is8=M$.object({key:M$.string().describe("Object key/path to delete")}),ps8=M$.object({success:M$.boolean().describe("Whether the deletion was successful"),key:M$.string().describe("The key that was deleted")}),ns8=M$.object({keys:M$.array(M$.string()).max(1000).describe("Array of object keys/paths to delete (max 1000)")}),ts8=M$.object({deleted:M$.array(M$.string()).describe("Array of successfully deleted keys"),errors:M$.array(M$.object({key:M$.string(),message:M$.string()})).describe("Array of errors for failed deletions")}),LE=[{name:"LIST_OBJECTS",inputSchema:ys8,outputSchema:gs8},{name:"GET_OBJECT_METADATA",inputSchema:hs8,outputSchema:us8},{name:"GET_PRESIGNED_URL",inputSchema:cs8,outputSchema:ls8},{name:"PUT_PRESIGNED_URL",inputSchema:ds8,outputSchema:ms8},{name:"DELETE_OBJECT",inputSchema:is8,outputSchema:ps8},{name:"DELETE_OBJECTS",inputSchema:ns8,outputSchema:ts8}]});import{z as w6}from"zod";var Fs1,Hs1,Ns1,Yp,i90,p90,n90,t90,os8;var wl0=D(()=>{DE();Fs1=w6.object({primary:w6.string().optional().describe("Primary brand color (hex)"),secondary:w6.string().optional().describe("Secondary brand color (hex)"),accent:w6.string().optional().describe("Accent / highlight color (hex)"),background:w6.string().optional().describe("Background color (hex)"),foreground:w6.string().optional().describe("Foreground / text color (hex)")}),Hs1=w6.object({heading:w6.string().optional().describe("Font family for headings"),body:w6.string().optional().describe("Font family for body text"),code:w6.string().optional().describe("Font family for code / monospace")}),Ns1=w6.object({logo:w6.string().optional().describe("Logo URL"),favicon:w6.string().optional().describe("Favicon URL"),ogImage:w6.string().optional().describe("Open Graph image URL")}),Yp=w6.object({id:w6.string(),name:w6.string().describe("Brand / company name"),domain:w6.string().optional().describe("Company domain (e.g. example.com)"),colors:Fs1.optional().describe("Semantic color palette"),fonts:Hs1.optional().describe("Font families by role"),assets:Ns1.optional().describe("Visual identity assets"),overview:w6.string().optional().describe("Company overview / description"),tagline:w6.string().optional().describe("Brand tagline"),tone:w6.string().optional().describe("Tone of voice description"),metadata:w6.record(w6.string(),w6.unknown()).optional().describe("Extra design tokens and metadata")}),i90=w6.object({id:w6.string().optional().describe("Brand ID. Omit to get the default brand.")}),p90=w6.object({}),n90=w6.object({items:w6.array(Yp)}),t90=[{name:"BRAND_GET",inputSchema:i90,outputSchema:Yp},{name:"BRAND_LIST",inputSchema:p90,outputSchema:n90,opt:!0}],os8=HK(t90)});var El0=D(()=>{DE();Xs1();Ll0();Qp();wl0()});import{z as E8}from"zod";function MH($){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 Jp($){return E8.object({item:$.nullable().describe("The retrieved item, or null if not found")})}function ss8($){return E8.object({data:$.partial().describe("Data for the new entity (id may be auto-generated)")})}function es8($){return E8.object({item:$.describe("The created entity with generated id")})}function $e8($){return E8.object({id:E8.string().describe("ID of the entity to update"),data:$.partial().describe("Partial entity data to update")})}function Ze8($){return E8.object({item:$.describe("The updated entity")})}function Kp($){return E8.object({item:$.describe("The deleted entity")})}function r90($,Z,X){let Q=$.toUpperCase(),Y=X?.readOnly??!1,G=[{name:`COLLECTION_${Q}_LIST`,inputSchema:k3,outputSchema:MH(Z)},{name:`COLLECTION_${Q}_GET`,inputSchema:Gp,outputSchema:Jp(Z)}];if(!Y)G.push({name:`COLLECTION_${Q}_CREATE`,inputSchema:ss8(Z),outputSchema:es8(Z),opt:!0},{name:`COLLECTION_${Q}_UPDATE`,inputSchema:$e8(Z),outputSchema:Ze8(Z),opt:!0},{name:`COLLECTION_${Q}_DELETE`,inputSchema:Wp,outputSchema:Kp(Z),opt:!0});return G}var o90,rs8,Us1,as8,k3,Gp,Wp;var tG=D(()=>{o90=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()}),rs8=E8.object({field:E8.array(E8.string()),operator:E8.enum(["eq","gt","gte","lt","lte","in","like","contains"]),value:E8.unknown()}),Us1=E8.lazy(()=>E8.union([rs8,E8.object({operator:E8.enum(["and","or","not"]),conditions:E8.array(Us1)})])),as8=E8.object({field:E8.array(E8.string()),direction:E8.enum(["asc","desc"]),nulls:E8.enum(["first","last"]).optional()}),k3=E8.object({where:Us1.optional().describe("Filter expression"),orderBy:E8.array(as8).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")});Gp=E8.object({id:E8.string().describe("ID of the entity to retrieve")});Wp=E8.object({id:E8.string().describe("ID of the entity to delete")})});import{z as $y}from"zod";var Xe8,Qe8,Bs1;var Os1=D(()=>{tG();Xe8=o90.extend({avatar:$y.string().describe("URL or data URI to the assistant's avatar image"),system_prompt:$y.string().describe("System prompt that defines the assistant's behavior"),virtual_mcp_id:$y.string().describe("Virtual MCP ID to use for this assistant"),model:$y.object({id:$y.string().describe("Model ID"),connectionId:$y.string().describe("Connection ID that provides the model")}).describe("Selected model reference for this assistant")}),Qe8=r90("assistant",Xe8),Bs1=[...Qe8]});import{z as F0}from"zod";var Fp,kH,Ls1,Ye8,Ge8,ws1,Je8,We8,Ke8,Fe8,He8,Ne8,Es1,Ue8,Be8,Oe8,De8,Le8,we8,Ee8,je8,ze8,Pe8,kQ5,Ae8,VQ5,Ds1,Te8,Re8,a90,SQ5;var js1=D(()=>{DE();tG();Fp=F0.lazy(()=>F0.union([F0.null(),F0.string(),F0.number(),F0.boolean(),F0.record(F0.string(),Fp),F0.array(Fp)])),kH=F0.record(F0.string(),F0.record(F0.string(),Fp)).optional().describe("Additional provider-specific options. Outer record keyed by provider name, inner by option key"),Ls1=F0.object({type:F0.literal("text"),text:F0.string().describe("The text content"),providerOptions:kH}),Ye8=F0.object({type:F0.literal("text"),text:F0.string().describe("The text content"),providerMetadata:F0.any().optional().describe("Additional provider-specific metadata")}),Ge8=F0.string().describe("File data as URL string"),ws1=F0.object({type:F0.literal("file"),filename:F0.string().optional().describe("Optional filename of the file"),data:Ge8,mediaType:F0.string().describe("IANA media type of the file (e.g., image/png, audio/mp3)"),providerOptions:kH}),Je8=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")}),We8=F0.object({type:F0.literal("reasoning"),text:F0.string().describe("The reasoning text"),providerOptions:kH}),Ke8=F0.object({type:F0.literal("reasoning"),text:F0.string().describe("The reasoning text"),providerMetadata:F0.any().optional().describe("Additional provider-specific metadata")}),Fe8=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:kH}),He8=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")}),Ne8=F0.union([F0.object({type:F0.literal("text"),value:F0.string()}),F0.object({type:F0.literal("json"),value:Fp}),F0.object({type:F0.literal("error-text"),value:F0.string()}),F0.object({type:F0.literal("error-json"),value:Fp}),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)")]),Es1=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:Ne8.describe("Result of the tool call"),result:F0.unknown().describe("Unknown result of the tool call"),providerOptions:kH}),Ue8=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")}),Be8=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")})]),Oe8=F0.object({role:F0.literal("system"),content:F0.string().describe("System message content"),providerOptions:kH}),De8=F0.object({role:F0.literal("user"),content:F0.array(F0.union([Ls1,ws1])).describe("User message content parts (text or file)"),providerOptions:kH}),Le8=F0.object({role:F0.literal("assistant"),content:F0.array(F0.union([Ls1,ws1,We8,Fe8,Es1])).describe("Assistant message content parts (text, file, reasoning, tool-call, or tool-result)"),providerOptions:kH}),we8=F0.object({role:F0.literal("tool"),content:F0.array(Es1).describe("Tool message content (tool results)"),providerOptions:kH}),Ee8=F0.union([Oe8,De8,Le8,we8]),je8=F0.array(Ee8).describe("A list of messages forming the prompt"),ze8=F0.object({prompt:je8.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")}),Pe8=F0.object({content:F0.array(F0.union([Ye8,Je8,Ke8,He8,Ue8,Be8])).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")}),kQ5=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")}),Ae8=F0.object({supportedUrls:F0.record(F0.string(),F0.array(F0.string())).describe("Supported URL patterns by media type for the provider")}),VQ5=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()}),Ds1=F0.object({modelId:F0.string().describe("The ID of the model"),callOptions:ze8}),Te8=o90.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()}),Re8=r90("llm",Te8,{readOnly:!0}),a90=[{name:"LLM_METADATA",inputSchema:F0.object({modelId:F0.string().describe("The ID of the model")}),outputSchema:Ae8},{name:"LLM_DO_STREAM",inputSchema:Ds1},{name:"LLM_DO_GENERATE",inputSchema:Ds1,outputSchema:Pe8},...Re8],SQ5=HK(a90)});import{z as wE}from"zod";var Ie8,zs1;var Ps1=D(()=>{Ie8=wE.object({scopes:wE.array(wE.string()).describe("List of scopes available"),stateSchema:wE.record(wE.string(),wE.unknown()).describe("JSON Schema (draft-07) defining the state structure")}),zs1=[{name:"MCP_CONFIGURATION",inputSchema:wE.object({}),outputSchema:Ie8}]});import{z as c5}from"zod";var qe8,Me8,As1;var Ts1=D(()=>{qe8=c5.object({}).strict(),Me8=c5.object({billing:c5.object({mode:c5.enum(["prepaid","postpaid"]),limitPeriod:c5.enum(["daily","weekly","monthly"]).nullable()}),limit:c5.object({total:c5.number().nullable(),remaining:c5.number().nullable(),reset:c5.string().nullable()}),usage:c5.object({total:c5.number(),daily:c5.number(),weekly:c5.number(),monthly:c5.number()}),alert:c5.object({enabled:c5.boolean(),threshold_usd:c5.number(),email:c5.string().nullable()}),connectionId:c5.string()}),As1=[{name:"GATEWAY_USAGE",inputSchema:qe8,outputSchema:Me8},{name:"GATEWAY_SET_LIMIT",inputSchema:c5.object({}),outputSchema:c5.object({}),opt:!0},{name:"GATEWAY_SET_ALERT",inputSchema:c5.object({}),outputSchema:c5.object({}),opt:!0}]});import{z as Rs1}from"zod";function oG(){return VY()===null}function s90($,Z){return $===C8.DEV_ASSETS(Z)}function Zy($,Z){let X=mg1(Z,$),Q=new Date().toISOString();return{id:X.id??C8.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:ke8,bindings:["OBJECT_STORAGE"],status:"active"}}var ke8;var Xy=D(()=>{Xw();Qp();_8();ke8=LE.map(($)=>({name:$.name,description:`${$.name} operation for local file storage`,inputSchema:Rs1.toJSONSchema($.inputSchema),outputSchema:Rs1.toJSONSchema($.outputSchema)}))});function Is1($,Z){return $||Z===0}function qs1($,Z,X,Q,Y){let G=Z?Y+1:Y,J=$.slice(0,X),W=Q+X<G;return{items:J,totalCount:G,hasMore:W}}function Ms1($,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 Ve8($,Z){if(Z.length===0)return;let[X,...Q]=Z,Y=X==="slug"?WB($):$[X];for(let G of Q){if(Y===null||typeof Y!=="object")return;Y=Y[G]}return Y}function Se8($){let X=$.replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/%/g,".*").replace(/_/g,".");return new RegExp(`^${X}$`,"i")}function Ce8($,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"&&Se8(String(X)).test($);case"contains":return String($).toLowerCase().includes(String(X).toLowerCase());default:return!0}}function Hp($,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)=>Hp($,G));case"or":return Y.some((G)=>Hp($,G));case"not":return!Y.every((G)=>Hp($,G));default:return!0}}let X=Ve8($,Z.field);return Ce8(X,Z.operator,Z.value)}var ks1=D(()=>{X60()});import{z as eB}from"zod";var _e8=8,ve8,fe8,be8,xe8,jl0;var Vs1=D(()=>{El0();Os1();tG();js1();Ps1();Qp();Ts1();_8();M0();Z9();CQ();qH();Xy();hW();X60();ks1();ve8=[{name:/^(COLLECTION_REGISTRY_APP_LIST|REGISTRY_ITEM_LIST)$/,inputSchema:eB.object({})}],fe8={LLM:a90,LLMS:a90,ASSISTANTS:Bs1,MCP:zs1,OBJECT_STORAGE:LE,AI_GATEWAY_BILLING:As1,TRIGGER:m90,REGISTRY:ve8,BRAND:t90},be8=k3.extend({binding:eB.union([eB.array(eB.object({}).passthrough()),eB.object({}).passthrough(),eB.string()]).optional(),include_virtual:eB.boolean().optional().describe("Whether to include VIRTUAL connections in the results. Defaults to false."),slug:eB.string().optional().describe("Filter by connection slug. Matches against app_name, or a slug derived from connection_url or title.")}),xe8=MH(l7),jl0=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:be8,outputSchema:xe8,handler:async($,Z)=>{await Z.access.check();let X=o(Z),Q=$.binding?typeof $.binding==="string"?(()=>{let E=fe8[$.binding.toUpperCase()];if(!E)throw Error(`Unknown binding: ${$.binding}`);return E})():$.binding:void 0,Y=Q?c90(Q):void 0,G=!!Y,J=$.limit??100,W=$.offset??0,K=$9(),F=C8.DEV_ASSETS(X.id),H=Zy(X.id,K),N=(!$.slug||WB(H)===$.slug)&&Hp(H,$.where),U=oG()&&!G&&N,{sqlOffset:B,sqlLimit:O}=Ms1(W,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:O,offset:G?void 0:B});if(Y){let E=Y9(),j=C8.SELF(X.id);await T90(L,_e8,async(z)=>{if(z.tools!==null)return;let A=z.id===j?async()=>{let{listManagementTools:I}=await Promise.resolve().then(() => ($O(),e90));return I(Z)}:()=>Fl0(z,Z,Q60),P=await rB("tools",z.id,A,E,(I)=>Z.pendingRevalidations.push(I),oB);if(P!==null)z.tools=P})}if(oG()&&Is1(G,W)&&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(W,W+J),A=W+J<j;return{items:z,totalCount:j,hasMore:A}}return qs1(L,U,J,W,w)}})});var ye8,zl0;var Ss1=D(()=>{tG();_8();M0();Z9();CQ();qH();Xy();hW();ye8=Jp(l7),zl0=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:Gp,outputSchema:ye8,handler:async($,Z)=>{let X=o(Z);if(await Z.access.check(),oG()&&s90($.id,X.id))return{item:Zy(X.id,$9())};let Q=await Z.storage.connections.findById($.id);if(!Q||Q.organization_id!==X.id)return{item:null};if(Q.tools===null){let Y=C8.SELF(X.id),G=Q.id===Y?async()=>{let{listManagementTools:W}=await Promise.resolve().then(() => ($O(),e90));return W(Z)}:async()=>{let W=await U5(Q,Z,!0);try{return(await W.listTools()).tools}finally{await W.close().catch(()=>{})}},J=await rB("tools",Q.id,G,Y9(),(W)=>Z.pendingRevalidations.push(W),oB);if(J!==null)Q.tools=J}return{item:Q}}})});class m6{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:p$("dtok"),connectionId:$.connectionId,accessToken:X,refreshToken:Q,scope:$.scope,expiresAt:G,clientId:$.clientId,clientSecret:Y,tokenEndpoint:$.tokenEndpoint,createdAt:Z,updatedAt:Z}).onConflict((W)=>W.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 rG=D(()=>{CZ()});function Qy(...$){if(ce8)console.log("[mcp-read-cache]",...$)}function le8($){return $.kind==="org"?"org":`u:${$.userId}`}function Pl0($){if($===null||typeof $!=="object")return JSON.stringify($)??"null";if(Array.isArray($))return`[${$.map(Pl0).join(",")}]`;return`{${Object.keys($).sort().map((X)=>`${JSON.stringify(X)}:${Pl0($[X])}`).join(",")}}`}class XZ0{config;maxEntries;now;maxTotalBytes;store=new Map;revalidating=new Set;totalBytes=0;constructor($=ge8,Z=he8,X=()=>Date.now(),Q=ue8){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}:${le8(X)}:${$}:${Pl0(Q)}`}storeSet($,Z,X,Q){let Y;try{Y=JSON.stringify(Z).length}catch{Qy("SKIP non-serializable",$);return}if(Y>Q){Qy("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:W}=$,K=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>K.maxStaleMs){$Z0.add(1,{type:Z,outcome:"miss"}),Qy(N?"EXPIRED":"MISS",F);let B=await G();if(J?.(B)??!0)this.storeSet(F,B,this.now(),K.maxValueBytes);else Qy("NOT-CACHED (shouldCache=false)",F);return B}if(this.store.delete(F),this.store.set(F,N),U>K.revalidateAfterMs&&!this.revalidating.has(F)){$Z0.add(1,{type:Z,outcome:"stale"}),Qy("STALE \u2192 serve + revalidate",F,`age=${U}ms`),this.revalidating.add(F);let B=G().then((O)=>{if(J?.(O)??!0)this.storeSet(F,O,this.now(),K.maxValueBytes)}).catch(()=>{$Z0.add(1,{type:Z,outcome:"error"})}).finally(()=>this.revalidating.delete(F));W?.(B)}else $Z0.add(1,{type:Z,outcome:"hit"}),Qy("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 Tl0(){return b0().mcpCacheEnabled}function QZ0(){return Tl0()?Al0:null}var $Z0,ZZ0=1024,Cs1,ge8,he8=2000,ue8,ce8,Al0;var Np=D(()=>{I6();R$();$Z0=w$.createCounter("mcp_read_cache.fetches",{description:"MCP read cache outcomes (hit, stale, miss, error)",unit:"{fetches}"}),Cs1=ZZ0*ZZ0,ge8={"tools/call":{revalidateAfterMs:30000,maxStaleMs:300000,maxValueBytes:512*ZZ0},"resources/read":{revalidateAfterMs:60000,maxStaleMs:300000,maxValueBytes:4*Cs1},"prompts/get":{revalidateAfterMs:60000,maxStaleMs:300000,maxValueBytes:512*ZZ0}},ue8=256*Cs1,ce8=typeof process<"u"&&!!process.env?.MCP_CACHE_DEBUG;Al0=new XZ0;w$.createObservableGauge("mcp_read_cache.entries",{description:"Current entry count in the per-pod MCP read cache",unit:"{entries}"}).addCallback(($)=>$.observe(Al0.stats().entries));w$.createObservableGauge("mcp_read_cache.bytes",{description:"Approximate total bytes held in the per-pod MCP read cache",unit:"By"}).addCallback(($)=>$.observe(Al0.stats().bytes))});function fs1($){QZ0()?.invalidate($),va1($)}function Yy($){fs1($);let Z=Rl0?.();if(!Z)return;try{Z.publish(_s1,de8.encode(JSON.stringify({connectionId:$,originId:vs1})))}catch(X){console.warn("[McpCacheInvalidation] publish failed (non-critical):",X)}}function bs1($){if(Rl0=$,Up)return;let Z=$();if(!Z)return;Up=Z.subscribe(_s1),(async()=>{for await(let X of Up)try{let Q=JSON.parse(me8.decode(X.data));if(Q.originId===vs1)continue;fs1(Q.connectionId)}catch{}})().catch(console.error)}function xs1(){Up?.unsubscribe(),Up=null,Rl0=void 0}var _s1="studio.mcp-cache.invalidate",vs1,de8,me8,Rl0,Up=null;var Bp=D(()=>{Np();CQ();vs1=crypto.randomUUID(),de8=new TextEncoder,me8=new TextDecoder});import{z as Il0}from"zod";function pe8($){let Z={...$};for(let X of ie8)delete Z[X];return Z}function ne8($,Z){return $.connection_url!==void 0?$.connection_url:Z}function re8($,Z){return $.length===Z.length&&$.every((X,Q)=>X===Z[Q])}var ie8,te8,oe8,ql0;var ys1=D(()=>{qH();rG();M0();R$();CQ();Bp();Hl0();li();hW();ie8=["id","organization_id","created_by","created_at"];te8=Il0.object({id:Il0.string().describe("ID of the connection to update"),data:I80.describe("Partial connection data to update")}),oe8=Il0.object({item:l7.describe("The updated connection entity")});ql0=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:te8,outputSchema:oe8,handler:async($,Z)=>{t(Z);let X=o(Z);await Z.access.check();let Q=o0(Z);if(!Q)throw Error("User ID required to update connection");let{id:Y}=$,G=pe8($.data),J=G.configuration_state!==void 0||G.configuration_scopes!==void 0,W=await Z.storage.connections.findById(Y);if(!W||W.organization_id!==X.id)throw Error("Connection not found in organization");let K=G.connection_type??W.connection_type,F=ne8(G,W.connection_url);if(K==="VIRTUAL"){let f=of(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=rf(f)}let H=G.configuration_state??W.configuration_state??{},N=G.configuration_scopes??W.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;ei(f,N,X.id),await Zp(f,N,X.id,Z)}}if(K==="STDIO"&&!b0().localMode)throw Error("STDIO connections are only available in local mode (--local-mode).");let U=G.connection_token??W.connection_token;if(!U)try{let b=await new m6(Z.db,Z.vault).get(Y);if(b?.accessToken)U=b.accessToken}catch{}let B=await iB({id:W.id,title:G.title??W.title,connection_type:K,connection_url:F,connection_token:U,connection_headers:G.connection_headers??W.connection_headers}).catch(()=>null),O=B?.tools?.length?B.tools:null,L=!1;if(G.configuration_scopes===void 0&&B?.scopes?.length)L=!re8(N,B.scopes),N=B.scopes;if(ei(H,N,X.id),L&&N.length>0)await Zp(H,N,X.id,Z);let w=J||L,E=w?$p(H,N):[],j=w?$p(W.configuration_state??{},W.configuration_scopes??[]):[],z=W.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},S={...W,...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:i}=await Z.storage.connectionCredentialVault.createOrRotateWorkloadToken({organizationId:X.id,subjectConnectionId:Y});I=i.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 U5(S,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(O)Y9()?.set("tools",Y,O).catch(()=>{});return Yy(Y),{item:m}}})});import{z as ae8}from"zod";var se8,Ml0;var gs1=D(()=>{tG();S4();M0();CQ();Bp();hW();se8=Wp.extend({force:ae8.boolean().optional().describe("If true, removes this connection from all agents that reference it before deleting")}),Ml0=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:se8,outputSchema:Kp(l7),handler:async($,Z)=>{t(Z);let X=o(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((K)=>K.title)}));await Z.storage.connections.delete($.id);let J=await Z.storage.organizationSettings.get(X.id);if(J?.registry_config){let{registries:K,blockedMcps:F}=J.registry_config;if($.id in K){let{[$.id]:H,...N}=K;await Z.storage.organizationSettings.upsert(X.id,{registry_config:{registries:N,blockedMcps:F}})}}Y9()?.invalidate($.id).catch(()=>{}),Yy($.id);let W=o0(Z);if(W)x1.capture({distinctId:W,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 Gy}from"zod";var kl0;var hs1=D(()=>{M0();kl0=u({name:"CONNECTION_TEST",description:"Test connection health and latency",annotations:{title:"Test Connection",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:Gy.object({id:Gy.string()}),outputSchema:Gy.object({id:Gy.string(),healthy:Gy.boolean(),latencyMs:Gy.number()}),handler:async($,Z)=>{let X=o(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 us1=D(()=>{ua1();Vs1();Ss1();ys1();gs1();hs1()});import{sql as C4}from"kysely";import{z as NK}from"zod";function cs1($){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 Z04($,Z){let X="",Q=0,Y=!1,G=!1,J=null;for(let W=0;W<$.length;W++){let K=$[W];if(!Y&&!G&&J===null){if($.startsWith("--",W)){let F=$.indexOf(`
890
+ `,W),H=F===-1?$.slice(W):$.slice(W,F);X+=H,W+=H.length-1;continue}if($.startsWith("/*",W)){let F=$.indexOf("*/",W+2),H=F===-1?$.slice(W):$.slice(W,F+2);X+=H,W+=H.length-1;continue}}if(J!==null){let F=`$${J}$`;if($.startsWith(F,W))X+=F,W+=F.length-1,J=null;else X+=K;continue}if(!G&&K==="'"){Y=!Y,X+=K;continue}if(!Y&&K==='"'){G=!G,X+=K;continue}if(!Y&&!G&&K==="$"){let F=/^\$(\d+)/.exec($.slice(W)),H=F?Number(F[1])-1:-1;if(F&&H>=0&&H<Z.length){X+=cs1(Z[H]),W+=F[0].length-1;continue}let N=/^\$([A-Za-z_][A-Za-z0-9_]*)?\$/.exec($.slice(W));if(N){J=N[1]??"",X+=N[0],W+=N[0].length-1;continue}}else if(!Y&&!G&&K==="?"&&Q<Z.length){X+=cs1(Z[Q]),Q++;continue}X+=K}return X}function ls1($){return $.replace(/-/g,"_")}function Q04($){return`app_${ls1($)}`}function Y04($){return`app_role_${ls1($)}`}function G04($){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 J04($,Z,X){if(await C4`CREATE SCHEMA IF NOT EXISTS ${C4.id(Z)}`.execute($),!(await C4`
890
891
  SELECT EXISTS (SELECT 1 FROM pg_roles WHERE rolname = ${X}) as exists
891
892
  `.execute($)).rows[0]?.exists)await C4`CREATE ROLE ${C4.id(X)} NOLOGIN`.execute($);await C4`GRANT ${C4.id(X)} TO CURRENT_USER`.execute($),await C4`GRANT USAGE, CREATE ON SCHEMA ${C4.id(Z)} TO ${C4.id(X)}`.execute($),await C4`GRANT ALL ON ALL TABLES IN SCHEMA ${C4.id(Z)} TO ${C4.id(X)}`.execute($),await C4`GRANT ALL ON ALL SEQUENCES IN SCHEMA ${C4.id(Z)} TO ${C4.id(X)}`.execute($),await C4`ALTER DEFAULT PRIVILEGES IN SCHEMA ${C4.id(Z)} GRANT ALL ON TABLES TO ${C4.id(X)}`.execute($),await C4`ALTER DEFAULT PRIVILEGES IN SCHEMA ${C4.id(Z)} GRANT ALL ON SEQUENCES TO ${C4.id(X)}`.execute($),await C4`REVOKE ALL ON SCHEMA public FROM ${C4.id(X)}`.execute($)}async function W04($,Z,X,Q){try{return await $.transaction().execute(async(Y)=>{return await C4`SET LOCAL ROLE ${C4.id(X)}`.execute(Y),await C4`SET LOCAL search_path TO ${C4.id(Z)}`.execute(Y),await C4.raw(Q).execute(Y)})}catch(Y){if(G04(Y))return await J04($,Z,X),await $.transaction().execute(async(G)=>{return await C4`SET LOCAL ROLE ${C4.id(X)}`.execute(G),await C4`SET LOCAL search_path TO ${C4.id(Z)}`.execute(G),await C4.raw(Q).execute(G)});throw Y}}var $04,X04,ds1;var ms1=D(()=>{M0();$04=NK.object({results:NK.array(NK.unknown()).optional(),success:NK.boolean().optional()});X04=NK.object({sql:NK.string().describe("The SQL query to run"),params:NK.array(NK.unknown()).describe("The parameters to pass to the SQL query").optional()});ds1=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:X04,outputSchema:NK.object({result:NK.array($04)}),handler:async($,Z)=>{t(Z),await Z.access.check();let X=Z04($.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=Q04(Z.connectionId),Y=Y04(Z.connectionId);return{result:[{results:(await W04(Z.db,Q,Y,X)).rows,success:!0}]}}})});function YZ0($){let Z=$.access.getRole();if(!o7(Z))throw new AH("Only organization owners and admins can change org-wide pin status")}var Vl0=D(()=>{VQ();ow()});async function GZ0($,Z,X){let Q=[...new Set(X)],Y=await Promise.all(Q.map((J)=>$.storage.connections.findById(J,Z))),G=Q.filter((J,W)=>!Y[W]);if(G.length>0)throw Error(`Connection not found: ${G.join(", ")}`)}function VH($){return $.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"")}function JZ0($){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 Op($){if($&&typeof $==="object"&&"gatewayClientId"in $&&typeof $.gatewayClientId==="string")return $.gatewayClientId;return}function Dp($,Z){if(!Z)return $;let X=`${JZ0(Z)}_`;return $.startsWith(X)?$.slice(X.length):$}function F04($){return $.split(/[-_]/).map((Z)=>Z?Z.charAt(0).toUpperCase()+Z.slice(1):Z).join(" ")}var Jy;var is1=D(()=>{mW();Jy=class Jy extends y9{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=JZ0(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`${JZ0($)}_${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=Op(Q._meta);if(!Y)continue;if(Dp(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=Op(Q._meta);if(!Y)continue;if(Dp(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<Jy.MAX_PAGES_PER_CLIENT);if(Y)console.warn(`GatewayClient: client "${$}" exceeded ${Jy.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,(K)=>this.fetchAllResources(K,Q),"resources"),J=Y.resources,W=J?new Set(J):null;for(let K of G){if(W&&!W.has(K.uri)&&!(K.name&&W.has(K.name)))continue;if($.has(K.uri)){console.warn(`GatewayClient: duplicate resource "${K.uri}" from client "${Q}" \u2014 skipping`);continue}$.add(K.uri),X.set(K.uri,Q),Z.push({...K,_meta:{...K._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??F04(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 WZ0=D(()=>{is1()});function Cl0($){return VH($)}function N04($,Z){let X=VH(Z)||"prompt";return`${String($).padStart(H04,"0")}-${X}`}async function _l0($,Z,X){try{await $.delete(KZ0,Cl0(Z),{actor:X})}catch(Q){console.error("[agent-prompts] failed to delete prompts",{agentId:Z,err:Q})}}async function FZ0($,Z,X,Q){let Y=Cl0(Z);await _l0($,Z,X),await Promise.all(Q.slice(0,Sl0).map(async(G,J)=>{let W=N04(J,G.title),K={name:W,title:G.title,description:G.description,text:G.text};try{await $.write(KZ0,`${Y}/${W}.json`,JSON.stringify(K),{actor:X,contentType:"application/json"})}catch(F){console.error("[agent-prompts] failed to seed prompt",{agentId:Z,name:W,err:F})}}))}async function ps1($,Z){let X=Cl0(Z),Q;try{Q=await $.listDir(KZ0,X)}catch{return[]}let Y=Q.filter((J)=>J.kind==="file"&&J.path.endsWith(".json")).slice(0,Sl0),G=[];for(let J of Y)try{let W=await $.read(KZ0,J.path),K=JSON.parse(new TextDecoder().decode(W));if(K&&typeof K.name==="string"&&typeof K.title==="string"&&typeof K.text==="string")G.push(K)}catch{}return G}var KZ0="agent-prompts",Sl0=20,H04;var Lp=D(()=>{WZ0();H04=String(Sl0-1).length});function Wy($){if(!$)return $;let Z={...$};return delete Z.sandboxMap,Z}import{z as os1}from"zod";function U04(){let $=ns1[Math.floor(Math.random()*ns1.length)];return`icon://${ts1[Math.floor(Math.random()*ts1.length)]}?color=${$}`}var ns1,ts1,B04,O04,vl0;var rs1=D(()=>{M0();nB();Vl0();Lp();ns1=["red","orange","amber","yellow","lime","green","emerald","cyan","sky","blue","indigo","violet","purple","fuchsia","pink","rose"],ts1=["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"];B04=os1.object({data:M80.describe("Data for the new virtual MCP")}),O04=os1.object({item:d7.describe("The created virtual MCP entity")}),vl0=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:B04,outputSchema:O04,handler:async($,Z)=>{t(Z);let X=o(Z);await Z.access.check();let Q=o0(Z);if(!Q)throw Error("User ID required to create virtual MCP");if($.data.pinned===!0)YZ0(Z);let{prompts:Y,metadata:G,...J}=$.data,W=Wy(G);if(J.connections.length>0)await GZ0(Z,X.id,J.connections.map((H)=>H.connection_id));let K={...J,metadata:W,icon:J.icon??U04()},F=await Z.storage.virtualMcps.create(X.id,Q,K);if(Y?.length&&Z.orgFs&&F.id)await FZ0(Z.orgFs,F.id,Q,Y);return{item:F}}})});function D04($){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 ZO($){return typeof $==="string"||typeof $==="number"}function fl0($,Z){let X=Z.split("."),Q=$;for(let Y of X){if(Q==null||typeof Q!=="object")return;Q=Q[Y]}return Q}function L04($,Z){return $.connections.some((X)=>X.connection_id===Z)}function HZ0($,Z){if("conditions"in Z){let{operator:W,conditions:K}=Z;switch(W){case"and":return K.every((F)=>HZ0($,F));case"or":return K.some((F)=>HZ0($,F));case"not":return!K.every((F)=>HZ0($,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 L04($,Y)}let J=fl0($,G);switch(Q){case"eq":return J===Y;case"gt":return ZO(J)&&ZO(Y)&&J>Y;case"gte":return ZO(J)&&ZO(Y)&&J>=Y;case"lt":return ZO(J)&&ZO(Y)&&J<Y;case"lte":return ZO(J)&&ZO(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 W=D04(Y);return new RegExp(`^${W}$`,"i").test(J);case"contains":if(typeof J!=="string"||typeof Y!=="string")return!1;return J.toLowerCase().includes(Y.toLowerCase());default:return!0}}function w04($,Z){return[...$].sort((X,Q)=>{for(let Y of Z){let G=Y.field.join("."),J=fl0(X,G),W=fl0(Q,G),K=0;if(J==null&&W==null)continue;if(J==null)K=Y.nulls==="first"?-1:1;else if(W==null)K=Y.nulls==="first"?1:-1;else if(typeof J==="string"&&typeof W==="string")K=J.localeCompare(W);else if(typeof J==="number"&&typeof W==="number")K=J-W;else K=String(J).localeCompare(String(W));if(K!==0)return Y.direction==="desc"?-K:K}return 0})}var E04,j04,bl0;var as1=D(()=>{tG();M0();nB();E04=k3,j04=MH(d7),bl0=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:E04,outputSchema:j04,handler:async($,Z)=>{await Z.access.check();let X=o(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)=>HZ0(U,$.where));if($.orderBy&&$.orderBy.length>0)J=w04(J,$.orderBy);let W=J.length,K=$.offset??0,F=$.limit??100,H=J.slice(K,K+F),N=K+F<W;return{items:H,totalCount:W,hasMore:N}}})});import{z as xl0}from"zod";var z04,P04,yl0;var ss1=D(()=>{M0();nB();z04=xl0.object({id:xl0.string().describe("ID of the virtual MCP to retrieve")}),P04=xl0.object({item:d7.nullable().describe("The retrieved virtual MCP, or null if not found")}),yl0=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:z04,outputSchema:P04,handler:async($,Z)=>{t(Z);let X=o(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 aG($){return gl0.test($)}function es1($){let Z=(X)=>typeof X==="string"?X.trim().toLowerCase():"";return Z($?.metadata?.siteSlug)||Z($?.title)||null}var gl0;var XO=D(()=>{gl0=/^[a-z0-9][a-z0-9-]{0,59}$/});function $e1($){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 aG(Y)?Y:null}var Ze1=D(()=>{XO()});import{z as hl0}from"zod";var A04,T04,ul0;var Xe1=D(()=>{M0();Lp();nB();Vl0();Ze1();A04=hl0.object({id:hl0.string().describe("ID of the virtual MCP to update"),data:k80.describe("Partial virtual MCP data to update")}),T04=hl0.object({item:d7.describe("The updated virtual MCP entity")}),ul0=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:A04,outputSchema:T04,handler:async($,Z)=>{t(Z);let X=o(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,...W}=$.data,K=Wy(J);if(K&&Y.metadata)K={...Y.metadata,...K};else if(K===null&&Y.metadata?.sandboxMap)K={sandboxMap:Y.metadata.sandboxMap};let F={...W,...J!==void 0?{metadata:K}:{}},H=$e1({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)YZ0(Z);if(F.connections?.length)await GZ0(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 FZ0(Z.orgFs,$.id,Q,G);return{item:N}}})});function R04($){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 Ye1($){let Z={...$};for(let X of ll0)Z[X]="read";return Z}async function Ge1($,Z){let X={...Z};for(;;){let Q=await $(X);if(!Q.isError)return{result:Q,grantedPermissions:X};let Y=Q.content?.find((K)=>K.type==="text")?.text,G=ll0.find((K)=>(K in X));if(!G||!R04(Y))return{result:Q,grantedPermissions:X};let{[G]:J,...W}=X;X=W}}function I04($){if(!$||typeof $!=="object"||Array.isArray($))return Qe1;let Z=$;if(Object.values(Z).some((X)=>typeof X!=="string"))return Qe1;return Z}function q04($){if(typeof $!=="number"||!Number.isFinite($)||!Number.isInteger($)||$<=0)return;return $}function k5($){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=q04(Z.repositoryId);return{sourceConnectionId:typeof Z.sourceConnectionId==="string"?Z.sourceConnectionId:void 0,installationId:Z.installationId,repositoryId:X,owner:Z.owner,repo:Z.repo,permissions:I04(Z.permissions),grantProvider:Z.grantProvider==="github-mcp"?"github-mcp":void 0}}function EE($){return $.metadata?.orgShared===!0}function Je1($){let Z=new Set,X=[];for(let Q of $??[]){if(Q.status!=="active")continue;let Y=k5(Q);if(Y===null)continue;let G=cl0(Y.owner,Y.repo);if(Z.has(G))continue;Z.add(G),X.push(`${Y.owner}/${Y.repo}`)}return X}function NZ0($,Z,X){let Q=cl0(Z,X),Y=($??[]).filter((G)=>{if(G.status&&G.status!=="active")return!1;let J=k5(G);return J!==null&&cl0(J.owner,J.repo)===Q});return Y.find(EE)??Y[0]??null}var Qe1,ll0,cl0=($,Z)=>`${$}/${Z}`.toLowerCase();var _Q=D(()=>{Qe1={contents:"write",metadata:"read",pull_requests:"write",issues:"write",checks:"read",deployments:"read"},ll0=["deployments","checks"]});function We1($){return gG($)!==null||s40($)!==null}var Ke1=D(()=>{_8()});import{z as dl0}from"zod";var M04,k04,ml0;var Fe1=D(()=>{_Q();rG();M0();Lp();nB();Ke1();M04=dl0.object({id:dl0.string().describe("ID of the virtual MCP to delete")}),k04=dl0.object({item:d7.describe("The deleted virtual MCP entity")}),ml0=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:M04,outputSchema:k04,handler:async($,Z)=>{t(Z);let X=o(Z);if(await Z.access.check(),We1($.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 _l0(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&&(EE(G)||(await Z.storage.virtualMcps.listByConnectionId(X.id,Y)).length>0||await Z.storage.connections.isReferencedByThread(Y));if(G&&k5(G)&&!J){let K=await new m6(Z.db,Z.vault).get(Y);if(K?.accessToken)try{await fetch("https://api.github.com/installation/token",{method:"DELETE",headers:{Authorization:`Bearer ${K.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 vQ}from"zod";var V04,il0;var He1=D(()=>{M0();V04=vQ.object({id:vQ.string(),virtualMcpId:vQ.string(),pluginId:vQ.string(),connectionId:vQ.string().nullable(),settings:vQ.record(vQ.string(),vQ.unknown()).nullable(),createdAt:vQ.string(),updatedAt:vQ.string()}),il0=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:vQ.object({virtualMcpId:vQ.string().describe("Virtual MCP ID"),pluginId:vQ.string().describe("Plugin ID")}),outputSchema:vQ.object({config:V04.nullable()}),handler:async($,Z)=>{t(Z);let X=o(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 yZ}from"zod";var S04,pl0;var Ne1=D(()=>{M0();Xy();Z9();S04=yZ.object({id:yZ.string(),virtualMcpId:yZ.string(),pluginId:yZ.string(),connectionId:yZ.string().nullable(),settings:yZ.record(yZ.string(),yZ.unknown()).nullable(),createdAt:yZ.string(),updatedAt:yZ.string()}),pl0=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:yZ.object({virtualMcpId:yZ.string().describe("Virtual MCP ID"),pluginId:yZ.string().describe("Plugin ID"),connectionId:yZ.string().nullable().optional().describe("MCP connection to bind"),settings:yZ.record(yZ.string(),yZ.unknown()).nullable().optional().describe("Plugin-specific settings")}),outputSchema:yZ.object({config:S04}),handler:async($,Z)=>{t(Z);let X=o(Z);await Z.access.check();let{virtualMcpId:Q,pluginId:Y,connectionId:G,settings:J}=$,W=o0(Z),K=await Z.storage.connections.findById(Q);if(!K)throw Error(`Connection not found: ${Q}`);if(K.organization_id!==X.id)throw Error(`Connection not found: ${Q}`);if(K.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&&K.organization_id&&!F&&oG()&&s90(G,K.organization_id)){if(!W)throw Error("User ID required to create dev-assets connection");let N=Zy(K.organization_id,$9());await Z.storage.connections.create({...N,organization_id:K.organization_id,created_by:W})}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 C04,nl0;var Ue1=D(()=>{M0();nB();C04=pX.object({connectionId:pX.string(),toolName:pX.string(),label:pX.string(),icon:pX.string().nullable().optional()}),nl0=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(C04).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:d7.nullable()}),handler:async($,Z)=>{t(Z);let X=o(Z);await Z.access.check();let{virtualMcpId:Q,pinnedViews:Y,layout:G}=$,J=o0(Z),W=await Z.storage.virtualMcps.findById(Q);if(!W)throw Error(`Virtual MCP not found: ${Q}`);if(W.organization_id!==X.id)throw Error(`Virtual MCP not found: ${Q}`);let K=W.metadata?.ui??{},F={...K,pinnedViews:Y.length>0?Y:null,layout:G??K.layout??null};return{item:await Z.storage.virtualMcps.update(Q,J??"system",{metadata:{...W.metadata,ui:F}})}}})});import{z as SH}from"zod";var _04,v04,tl0;var Be1=D(()=>{M0();_04=SH.object({ids:SH.array(SH.string()).max(1000).describe("Virtual MCP ids to look up")}),v04=SH.object({items:SH.array(SH.object({id:SH.string(),last_used_at:SH.string().optional(),last_used_by:SH.string().optional()}))}),tl0=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:_04,outputSchema:v04,handler:async($,Z)=>{t(Z),o(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 Oe1=D(()=>{rs1();as1();ss1();Xe1();Fe1();He1();Ne1();Ue1();Be1()});import{z as s7}from"zod";var ol0;var De1=D(()=>{I6();M0();ol0=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:s7.object({startDate:s7.string().datetime().optional().describe("Filter by start date (ISO 8601 datetime string)"),endDate:s7.string().datetime().optional().describe("Filter by end date (ISO 8601 datetime string)"),virtualMcpIds:s7.array(s7.string()).max(100).optional().describe("Filter by specific agent (Virtual MCP) IDs"),excludeConnectionIds:s7.array(s7.string()).max(100).optional().describe("Exclude tool calls from these connection IDs"),limit:s7.number().int().min(1).max(1000).optional().describe("Max number of (agent, tool) cells to return")}),outputSchema:s7.object({cells:s7.array(s7.object({virtualMcpId:s7.string().nullable(),toolName:s7.string(),calls:s7.number(),errors:s7.number(),outputSize:s7.number().describe("Sum of tool-output character length \u2014 a proxy for context weight, not LLM token count")}))}),handler:async($,Z)=>{let X=o(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 B5}from"zod";var rl0;var Le1=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:B5.object({id:B5.string().describe("Log ID to fetch")}),outputSchema:B5.object({log:B5.object({id:B5.string().optional(),organizationId:B5.string(),connectionId:B5.string(),toolName:B5.string(),input:B5.record(B5.string(),B5.unknown()),output:B5.record(B5.string(),B5.unknown()),isError:B5.boolean(),errorMessage:B5.string().nullish(),durationMs:B5.number(),timestamp:B5.string(),userId:B5.string().nullish(),requestId:B5.string(),userAgent:B5.string().nullish(),virtualMcpId:B5.string().nullish(),properties:B5.record(B5.string(),B5.string()).nullish()}).nullable().describe("The monitoring log, or null if not found")}),handler:async($,Z)=>{await Z.access.check(),await FQ();let X=o(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 B8}from"zod";var b04,al0;var we1=D(()=>{I6();M0();b04=B8.object({id:B8.string().optional().describe("Unique log identifier"),organizationId:B8.string().describe("Organization ID"),connectionId:B8.string().describe("Connection ID"),toolName:B8.string().describe("Name of the tool that was called"),isError:B8.boolean().describe("Whether the call resulted in an error"),errorMessage:B8.string().nullish().describe("Error message if applicable"),durationMs:B8.number().describe("Call duration in milliseconds"),timestamp:B8.string().describe("ISO 8601 timestamp of the call"),userId:B8.string().nullish().describe("User who triggered the call"),requestId:B8.string().describe("Unique request identifier"),userAgent:B8.string().nullish().describe("Client identifier (x-studio-client header)"),virtualMcpId:B8.string().nullish().describe("Virtual MCP (Agent) ID if routed through an agent"),properties:B8.record(B8.string(),B8.string()).nullish().describe("Custom key-value metadata attached to the log")}),al0=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:B8.object({connectionId:B8.string().optional().describe("Filter by connection ID"),excludeConnectionIds:B8.array(B8.string()).optional().describe("Exclude logs from these connection IDs (e.g. system connections)"),virtualMcpId:B8.string().optional().describe("Filter by Virtual MCP (Agent) ID"),toolName:B8.string().optional().describe("Filter by tool name"),isError:B8.boolean().optional().describe("Filter by error status"),startDate:B8.string().datetime().optional().describe("Filter by start date (ISO 8601 datetime string)"),endDate:B8.string().datetime().optional().describe("Filter by end date (ISO 8601 datetime string)"),limit:B8.number().default(20).describe("Maximum number of results"),offset:B8.number().default(0).describe("Offset for pagination"),properties:B8.record(B8.string(),B8.string()).optional().describe("Filter by exact property key=value matches"),propertyKeys:B8.array(B8.string()).optional().describe("Filter by logs that have these property keys"),propertyPatterns:B8.record(B8.string(),B8.string()).optional().describe("Filter by property value patterns (SQL LIKE, use % as wildcard)"),propertyInValues:B8.record(B8.string(),B8.string()).optional().describe("Filter by exact match within comma-separated values (e.g., user_tags in 'Engineering')")}),outputSchema:B8.object({logs:B8.array(b04).describe("Array of monitoring logs"),total:B8.number().describe("Total number of logs matching filters"),offset:B8.number().describe("Current offset for pagination"),limit:B8.number().describe("Current limit for pagination")}),handler:async($,Z)=>{await Z.access.check(),await FQ();let X=o(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:W,output:K,...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 sl0;var Ee1=D(()=>{I6();M0();sl0=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=o(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 el0;var je1=D(()=>{I6();M0();el0=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=o(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 ze1=D(()=>{De1();Le1();we1();Ee1();je1()});function UZ0($){return typeof $==="string"&&y04.has($.trim().toLowerCase())}var y04;var $d0=D(()=>{y04=new Set([".well-known","_admin","api","auth","choose-editor","cli","commerce-onboarding","dbos-queue-depth","health","hosted-run-pending","login","mcp","metrics","oauth","oauth-proxy","onboarding","org","report","reset-password"])});import{z as hY}from"zod";var Zd0;var Pe1=D(()=>{M0();$d0();Zd0=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:hY.object({slug:hY.string().min(1).max(50).regex(/^[a-z0-9-]+$/,"Slug must be lowercase alphanumeric with hyphens").refine(($)=>!UZ0($),"Slug is reserved by Studio"),name:hY.string().min(1).max(255),description:hY.string().optional()}),outputSchema:hY.object({id:hY.string(),name:hY.string(),slug:hY.string(),logo:hY.string().nullable().optional(),metadata:hY.any().optional(),createdAt:hY.string().datetime().describe("ISO 8601 timestamp"),members:hY.array(hY.any()).optional()}),handler:async($,Z)=>{t(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 UK}from"zod";var Xd0;var Ae1=D(()=>{M0();Xd0=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:UK.object({}),outputSchema:UK.object({organizations:UK.array(UK.object({id:UK.string(),name:UK.string(),slug:UK.string(),logo:UK.string().nullable().optional(),metadata:UK.any().optional(),createdAt:UK.string().datetime().describe("ISO 8601 timestamp")}))}),handler:async($,Z)=>{if(t(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 sG}from"zod";var Qd0;var Te1=D(()=>{M0();Qd0=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:sG.object({}),outputSchema:sG.object({id:sG.string(),name:sG.string(),slug:sG.string(),logo:sG.string().nullable().optional(),metadata:sG.any().optional(),createdAt:sG.string().datetime().describe("ISO 8601 timestamp"),members:sG.array(sG.any()).optional(),invitations:sG.array(sG.any()).optional()}),handler:async($,Z)=>{t(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 V3}from"zod";var Yd0;var Re1=D(()=>{M0();Yd0=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:V3.object({id:V3.string(),name:V3.string().min(1).max(255).optional(),description:V3.string().optional()}),outputSchema:V3.object({id:V3.string(),name:V3.string(),slug:V3.string(),logo:V3.string().nullable().optional(),metadata:V3.any().optional(),createdAt:V3.string().datetime().describe("ISO 8601 timestamp")}),handler:async($,Z)=>{if(t(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 Gd0;var Ie1=D(()=>{M0();Gd0=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(t(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 $$}from"zod";function D7($,Z){let X=$?.[Z];return g04.has(Z)?X!==!1:X===!0}var Ep,jp,CH,qe1,QO,zp,Pp,Ap,Tp,g04,YO;var c9=D(()=>{Ep=$$.object({title:$$.string(),url:$$.string(),icon:$$.string()}),jp=$$.object({registries:$$.record($$.string(),$$.object({enabled:$$.boolean()})).describe("Per-registry enabled/disabled state. Key is connection ID. Absent registries are treated as enabled."),blockedMcps:$$.array($$.string()).describe("List of MCP app_name or app_id values to hide from the store.")}),CH=$$.object({keyId:$$.string(),modelId:$$.string(),title:$$.string().optional()}).nullable(),qe1=$$.enum(["fast","smart","thinking","image","web_search","deep_research"]),QO=$$.enum(["fast","smart","thinking"]),zp=$$.object({tiers:$$.object({fast:CH,smart:CH,thinking:CH,image:CH,web_search:CH,deep_research:CH})}),Pp=$$.object({tiers:$$.object({fast:CH.optional(),smart:CH.optional(),thinking:CH.optional()})}),Ap=$$.object({ids:$$.array($$.string()).describe("Ordered list of custom virtual MCP agent ids to show on the home view.")}),Tp=$$.object({demo_mode:$$.boolean().optional().describe("Curated demo org: the commerce connect modal proceeds without a configured required data source."),reports_only:$$.boolean().optional().describe("Curated commerce (reports) look: hides agent navigation, the home Customize button, and the Settings/Automations tabs. Defaulted on for orgs created by commerce onboarding."),org_board_columns:$$.boolean().optional().describe("The task board's columns are this org's own, mirrored from its tracker, rather than the set Studio ships. Off means the canonical lanes, which is the only board most orgs want."),reviewer_enabled:$$.boolean().optional().describe("Run the Reviewer on a task's pull request once it's In Review \u2014 it reviews the code with the repo's stack-appropriate skills, fixes what it finds on the PR's own branch, then exercises the change on the deploy preview and approves or hands the card to a human."),qa_agent_enabled:$$.boolean().optional().describe("Deprecated: see reviewer_enabled."),code_reviewer_enabled:$$.boolean().optional().describe("Deprecated: see reviewer_enabled."),auto_merge:$$.boolean().optional().describe("When the Reviewer approves a task's pull request, merge it automatically instead of leaving the merge to a human. If the merge is blocked by a conflict with the base branch, hand the PR back to the Super Agent to resolve the conflict (check out the branch, merge the base, push) so it can then merge."),cheap_reviewer_model:$$.boolean().optional().describe("Run the Reviewer on a cheaper model than the Super Agent that wrote the code. On by default \u2014 turning it off trades cost for some review depth."),coding_agent_org_mcps:$$.boolean().optional().describe("Give a coding-agent run (the claude-code harness in a sandbox) every MCP connection in the org as its own MCP server, on top of the narrow task-run surface it always gets. Off by default: each connection is one more server the agent connects to at session start, and all of their tools land in its context."),coding_agents_claude_code:$$.boolean().optional().describe("Run chats on a Code Agent (an agent imported from a GitHub repo) with the claude-code harness inside its sandbox, instead of hosted Decopilot. Off by default: it changes the runtime of every such chat, and claude-code flushes whole turns rather than streaming tokens."),auto_assign_report_tasks_to_super_agent:$$.boolean().optional().describe("When a report import creates a task board item without an assignee, delegate it to the Super Agent automatically instead of leaving it unassigned."),delivery_lanes_enabled:$$.boolean().optional().describe("Board lanes for shipping: Approved, Merged and Post-deploy Validation sit between In Review and Done, and a merged pull request lands on Merged instead of Done. For teams whose release process continues after the merge. Off by default \u2014 with it off the board and the state machine behave exactly as if the lanes did not exist."),cms_auto_fresh_branch:$$.boolean().optional().describe("When a user opens the CMS on a branch whose last commit is older than the staleness window (2 days), move the session to a freshly minted branch cut from the default branch. The stale branch is left intact on GitHub. Off by default.")}),g04=new Set(["reviewer_enabled","cheap_reviewer_model"]);YO=$$.object({id:$$.string().describe("Brand context ID"),name:$$.string().describe("Company name"),domain:$$.string().describe("Company domain (e.g. example.com)"),overview:$$.string().describe("Company overview / description"),logo:$$.string().nullable().optional().describe("Logo URL"),favicon:$$.string().nullable().optional().describe("Favicon URL"),ogImage:$$.string().nullable().optional().describe("OG image URL"),fonts:$$.object({heading:$$.string().optional().describe("Font family for headings"),body:$$.string().optional().describe("Font family for body text"),code:$$.string().optional().describe("Font family for code / monospace")}).nullable().optional().describe("Font families by semantic role"),colors:$$.object({primary:$$.string().optional().describe("Primary brand color (hex)"),secondary:$$.string().optional().describe("Secondary brand color (hex)"),accent:$$.string().optional().describe("Accent / highlight color (hex)"),background:$$.string().optional().describe("Background color (hex)"),foreground:$$.string().optional().describe("Foreground / text color (hex)")}).nullable().optional().describe("Semantic color palette"),images:$$.array($$.record($$.string(),$$.unknown())).nullable().optional().describe("Brand images"),metadata:$$.record($$.string(),$$.unknown()).nullable().optional().describe("Extra design tokens (typography, components, spacing, layout, tone, etc.)"),archivedAt:$$.string().nullable().optional().describe("Archive timestamp (null to unarchive)"),isDefault:$$.boolean().optional().describe("Whether this is the default brand for the organization")})});import{z as _H}from"zod";var Jd0;var Me1=D(()=>{M0();c9();Jd0=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:_H.object({}),outputSchema:_H.object({organizationId:_H.string(),sidebar_items:_H.array(Ep).nullable().optional(),enabled_plugins:_H.array(_H.string()).nullable().optional(),registry_config:jp.nullable().optional(),simple_mode:zp.nullable().optional(),default_home_agents:Ap.nullable().optional(),flags:Tp.nullable().optional(),main_agent_id:_H.string().nullable().optional(),createdAt:_H.string().datetime().optional().describe("ISO 8601 timestamp"),updatedAt:_H.string().datetime().optional().describe("ISO 8601 timestamp")}),handler:async($,Z)=>{t(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 fQ}from"zod";var Wd0;var ke1=D(()=>{M0();c9();Wd0=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:fQ.object({organizationId:fQ.string(),sidebar_items:fQ.array(Ep).optional(),enabled_plugins:fQ.array(fQ.string()).optional(),registry_config:jp.optional(),simple_mode:zp.optional(),default_home_agents:Ap.optional(),flags:Tp.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:fQ.string().nullable().optional().describe("Virtual MCP id the org lands on instead of the Super Agent. Pass null to clear.")}),outputSchema:fQ.object({organizationId:fQ.string(),sidebar_items:fQ.array(Ep).nullable().optional(),enabled_plugins:fQ.array(fQ.string()).nullable().optional(),registry_config:jp.nullable().optional(),simple_mode:zp.nullable().optional(),default_home_agents:Ap.nullable().optional(),flags:Tp.nullable().optional(),main_agent_id:fQ.string().nullable().optional(),createdAt:fQ.string().datetime().describe("ISO 8601 timestamp"),updatedAt:fQ.string().datetime().describe("ISO 8601 timestamp")}),handler:async($,Z)=>{if(t(Z),await Z.access.check(),o(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});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 S3}from"zod";var Ve1,Kd0,Fd0;var Se1=D(()=>{M0();c9();Ve1=YO.extend({organizationId:S3.string(),archivedAt:S3.string().nullable().optional().describe("ISO 8601 timestamp"),createdAt:S3.string().describe("ISO 8601 timestamp"),updatedAt:S3.string().describe("ISO 8601 timestamp")}),Kd0=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:S3.object({includeArchived:S3.boolean().optional().describe("Include archived brands in the list")}),outputSchema:S3.object({items:S3.array(Ve1)}),handler:async($,Z)=>{t(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}))}}}),Fd0=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:S3.object({id:S3.string().describe("Brand context ID")}),outputSchema:Ve1.extend({organizationId:S3.string()}),handler:async($,Z)=>{t(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 jE}from"zod";var Ce1,Hd0,Nd0,Ud0;var _e1=D(()=>{M0();c9();Ce1=YO.extend({organizationId:jE.string(),createdAt:jE.string().describe("ISO 8601 timestamp"),updatedAt:jE.string().describe("ISO 8601 timestamp")}),Hd0=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:YO.omit({id:!0}),outputSchema:Ce1,handler:async($,Z)=>{t(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}}}),Nd0=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:YO.partial().required({id:!0}),outputSchema:Ce1,handler:async($,Z)=>{t(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}}}),Ud0=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:jE.object({id:jE.string().describe("Brand context ID")}),outputSchema:jE.object({success:jE.boolean()}),handler:async($,Z)=>{t(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 BZ0($,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,W=G.data.metadata??{},K=c04(J,W);return{name:W.title?.split(/[|\u2013\u2014]|\s+-\s+/).map((U)=>U.trim()).filter(Boolean)?.slice().sort((U,B)=>U.length-B.length)[0]??W.ogSiteName??X??$,domain:$,overview:W.description??"",logo:K.logo,favicon:K.favicon,ogImage:K.ogImage,fonts:K.fonts,colors:K.colors,images:null,metadata:Object.keys(K.metadata).length>0?K.metadata:null}}function c04($,Z){let X=$.images??{},Q=$.colors??{},Y={};for(let[H,N]of Object.entries(Q))if(typeof N==="string"&&N&&h04.has(H))Y[H]=N;let G={},W=($.typography??{}).fontFamilies??{};for(let[H,N]of Object.entries(W))if(typeof N==="string"&&N){let U=u04[H.toLowerCase()];if(U&&!G[U])G[U]=N}let K=$.fonts;if(Array.isArray(K))for(let H of K){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 h04,u04;var Bd0=D(()=>{h04=new Set(["primary","secondary","accent","background","foreground"]),u04={heading:"heading",headings:"heading",head:"heading",title:"heading",body:"body",primary:"body",text:"body",code:"code",monospace:"code",mono:"code"}});import{z as OZ0}from"zod";var l04,Od0;var ve1=D(()=>{M0();Bd0();c9();l04=YO.pick({id:!0,name:!0,domain:!0,overview:!0,logo:!0,favicon:!0,ogImage:!0,fonts:!0,colors:!0}).extend({success:OZ0.boolean()}),Od0=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:OZ0.object({domain:OZ0.string().describe("Website domain to extract brand from"),brandId:OZ0.string().optional().describe("Existing brand context ID to update (creates new if omitted)")}),outputSchema:l04,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)=>{t(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 BZ0($.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 fe1($){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 Dd0,Ld0;var be1=D(()=>{wl0();M0();Dd0=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:i90,outputSchema:Yp,handler:async($,Z)=>{t(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 fe1(Q)}}),Ld0=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:p90,outputSchema:n90,handler:async($,Z)=>{t(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(fe1)}}})});import{resolveTxt as d04}from"dns/promises";function wd0($){return`${m04}.${$.toLowerCase()}`}function xe1(){return`deco-verify-${crypto.randomUUID().replace(/-/g,"")}`}async function ye1($,Z,X=d04){if(!Z)return!1;try{return(await X(wd0($))).some((Y)=>Y.join("").trim()===Z)}catch{return!1}}var m04="_deco-verify";var ge1=()=>{};import{z as V5}from"zod";function GO($){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?wd0($.domain):null,recordValue:Z?$.verificationToken:null}}function p04($){let Z=$.toLowerCase().trim();if(!i04.test(Z))throw Error(`Invalid domain format: "${Z}". Must be a valid domain like "acme.com"`);if(C3.has(Z))throw Error(`Cannot claim generic email domain "${Z}". Only corporate domains are allowed.`);return Z}var i04,Ed0,DZ0,jd0,zd0,Pd0,Ad0,Td0;var he1=D(()=>{uY();ge1();M0();i04=/^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)+$/,Ed0=V5.enum(["off","auto","request"]),DZ0=V5.object({id:V5.string(),domain:V5.string(),joinMode:Ed0,verificationStatus:V5.enum(["pending","verified"]),verificationMethod:V5.enum(["email","dns"]).nullable(),verifiedAt:V5.string().nullable(),recordName:V5.string().nullable(),recordValue:V5.string().nullable()});jd0=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:V5.object({}),outputSchema:V5.object({domains:V5.array(DZ0)}),handler:async($,Z)=>{t(Z),await Z.access.check();let X=o(Z);return{domains:(await Z.storage.organizationDomains.listByOrganizationId(X.id)).map(GO)}}}),zd0=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:V5.object({domain:V5.string().min(1).max(255).describe("Domain to claim, e.g. acme.com"),joinMode:Ed0.optional().describe("Initial join mode (only applied when the domain is trusted immediately via email match).")}),outputSchema:DZ0,handler:async($,Z)=>{t(Z),await Z.access.check();let X=o(Z),Q=p04($.domain),G=Z.auth.user?.email?.split("@")[1]?.toLowerCase(),J=Boolean(Z.auth.user?.emailVerified)&&G===Q,W=await Z.storage.organizationDomains.getByOrgAndDomain(X.id,Q);if(W){if(W.verificationStatus!=="verified"&&J){let F=await Z.storage.organizationDomains.markVerified(W.id,"email");return GO(F)}return GO(W)}let K=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:xe1()});return GO(K)}}),Pd0=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:V5.object({id:V5.string(),joinMode:Ed0}),outputSchema:DZ0,handler:async($,Z)=>{t(Z),await Z.access.check();let X=o(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 GO(Y)}}),Ad0=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:V5.object({id:V5.string()}),outputSchema:V5.object({verified:V5.boolean(),domain:DZ0}),handler:async($,Z)=>{t(Z),await Z.access.check();let X=o(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:GO(Q)};if(!Q.verificationToken)throw Error("Domain has no pending DNS verification.");if(!await ye1(Q.domain,Q.verificationToken))return{verified:!1,domain:GO(Q)};let G=await Z.storage.organizationDomains.markVerified($.id,"dns");return{verified:!0,domain:GO(G)}}}),Td0=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:V5.object({id:V5.string()}),outputSchema:V5.object({success:V5.boolean()}),handler:async($,Z)=>{t(Z),await Z.access.check();let X=o(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 JO($){return($ instanceof Error?$.message.toLowerCase():"").includes("already a member")}import{z as P9}from"zod";var n04,Rd0,Id0,qd0;var ue1=D(()=>{M0();S4();n04=P9.object({id:P9.string(),userId:P9.string(),status:P9.enum(["pending","approved","denied"]),createdAt:P9.string(),user:P9.object({id:P9.string(),name:P9.string(),email:P9.string(),image:P9.string().nullable()}).nullable()}),Rd0=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:P9.object({}),outputSchema:P9.object({requests:P9.array(n04)}),handler:async($,Z)=>{t(Z),await Z.access.check();let X=o(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}))}}}),Id0=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:P9.object({requestId:P9.string()}),outputSchema:P9.object({success:P9.boolean()}),handler:async($,Z)=>{t(Z),await Z.access.check();let X=o(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(!JO(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}}}),qd0=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:P9.object({requestId:P9.string()}),outputSchema:P9.object({success:P9.boolean()}),handler:async($,Z)=>{t(Z),await Z.access.check();let X=o(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 bQ}from"zod";var Md0;var ce1=D(()=>{S4();M0();VQ();Md0=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:bQ.object({organizationId:bQ.string().optional(),userId:bQ.string(),role:bQ.array(bQ.string())}),outputSchema:bQ.object({id:bQ.string(),organizationId:bQ.string(),userId:bQ.string(),role:bQ.union([bQ.string(),bQ.array(bQ.string())]),createdAt:bQ.string().datetime().describe("ISO 8601 timestamp")}),handler:async($,Z)=>{t(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(!P50(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 Ky}from"zod";var kd0;var le1=D(()=>{S4();M0();kd0=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:Ky.object({organizationId:Ky.string().optional(),memberIdOrEmail:Ky.string()}),outputSchema:Ky.object({success:Ky.boolean(),memberIdOrEmail:Ky.string()}),handler:async($,Z)=>{t(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 e7}from"zod";var Vd0;var de1=D(()=>{M0();Vd0=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:e7.object({limit:e7.number().int().min(1).max(1000).optional(),offset:e7.number().int().min(0).optional()}),outputSchema:e7.object({members:e7.array(e7.object({id:e7.string(),organizationId:e7.string(),userId:e7.string(),role:e7.string(),createdAt:e7.string().datetime().describe("ISO 8601 timestamp"),user:e7.object({id:e7.string(),name:e7.string(),email:e7.string(),image:e7.string().optional()}).optional()}))}),handler:async($,Z)=>{t(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 gZ}from"zod";var Sd0;var me1=D(()=>{S4();M0();VQ();Sd0=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:gZ.object({organizationId:gZ.string().optional(),memberId:gZ.string(),role:gZ.array(gZ.string())}),outputSchema:gZ.object({id:gZ.string(),organizationId:gZ.string(),userId:gZ.string(),role:gZ.union([gZ.string(),gZ.array(gZ.string())]),createdAt:gZ.string().datetime().describe("ISO 8601 timestamp"),user:gZ.object({email:gZ.string(),name:gZ.string(),image:gZ.string().optional()})}),handler:async($,Z)=>{t(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(!P50(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 ie1(){if(Rp&&Date.now()-Rp.fetchedAt<600000)return Rp.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 Rp={rate:X,fetchedAt:Date.now()},X}catch{return Rp?.rate??5.5}}function pe1($,Z,X){if(Z==="brl")return Math.round($/X);return $}var Rp=null;function Cd0($,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,W)=>{if(typeof J==="object"&&J!==null)Cd0(J,`${G}[${W}]`,X);else X.append(`${G}[${W}]`,String(J))});else if(typeof Y==="object")Cd0(Y,G,X);else X.append(G,String(Y))}return X}async function Ip($,Z){let X=b0().stripeSecretKey;if(!X)throw new cY(503,"billing is not configured");let Q=Z?.params?Cd0(Z.params).toString():void 0,Y=await fetch(`${t04}${$}`,{method:Z?.method??(Q?"POST":"GET"),headers:{Authorization:`Bearer ${X}`,...Q&&{"Content-Type":"application/x-www-form-urlencoded"}},body:Q,signal:AbortSignal.timeout(o04)}),G=await Y.json().catch(()=>({}));if(!Y.ok){let J=G.error?.message??`HTTP ${Y.status}`;throw new cY(Y.status,J)}return G}function ne1($){return{billing_address_collection:"required",custom_fields:[{key:r04,label:{type:"custom",custom:"CPF / CNPJ"},type:"text",optional:!1,text:{minimum_length:a04,maximum_length:s04}}],...$&&{customer_update:{address:"auto",name:"auto"}}}}async function te1($){let Z=b0().stripeOrgPriceId;if(!Z)throw new cY(503,"billing is not configured");let X=await Ip("/checkout/sessions",{params:{mode:"subscription",...ne1(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 cY(500,"checkout session lacks url");return{url:X.url}}function e04($,Z){return Math.round($*(1+Z/100))}async function oe1($){let Z=e04($.amountCents,$.feePercent),X=pe1($.amountCents,$.currency,await ie1()),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 Ip("/checkout/sessions",{params:{mode:"payment",...$.customerId&&{customer:$.customerId},...ne1($.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 cY(500,"checkout session lacks url");return{url:J.url}}async function LZ0($){let Z=await Ip("/billing_portal/sessions",{params:{customer:$.customerId,return_url:$.returnUrl}});if(!Z.url)throw new cY(500,"portal session lacks url");return{url:Z.url}}async function wZ0($){return Ip(`/subscriptions/${encodeURIComponent($)}`)}async function re1($){await Ip(`/subscriptions/${encodeURIComponent($)}`,{method:"DELETE"})}var t04="https://api.stripe.com/v1",cY,o04=15000,r04="taxid",a04=11,s04=18;var zE=D(()=>{R$();cY=class cY extends Error{status;constructor($,Z){super(`Stripe API ${$}: ${Z}`);this.status=$;this.name="StripeApiError"}}});function WO($,Z){let X=`/${encodeURIComponent($)}/settings`;return Z?`${X}/${Z}`:X}import{z as _d0}from"zod";var vd0;var ae1=D(()=>{zE();Z9();M0();S4();vd0=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:_d0.object({}),outputSchema:_d0.object({url:_d0.string()}),handler:async($,Z)=>{t(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=`${b9()}${WO(Q,"members")}`,{url:J}=await te1({organizationId:X,successUrl:`${G}?checkout=success`,cancelUrl:`${G}?checkout=canceled`});return xY({event:"subscription_checkout_started",organizationId:X,...Z.auth?.user?.id?{userId:Z.auth.user.id}:{}}),{url:J}}})});import{z as fd0}from"zod";var bd0;var se1=D(()=>{zE();Z9();M0();bd0=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:fd0.object({}),outputSchema:fd0.object({url:fd0.string()}),handler:async($,Z)=>{t(Z),await Z.access.check();let X=o(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 LZ0({customerId:Q.stripeCustomerId,returnUrl:`${b9()}${WO(X.slug,"members")}`})}catch(Y){if(Y instanceof cY)throw Error(Y.message);throw Y}}})});function EZ0($){return xd0[$%xd0.length]??$14}function xQ($){return $.createdBy==="system"}function X14($){if($?.reviewer_enabled===void 0&&$?.qa_agent_enabled===!1&&$?.code_reviewer_enabled===!1)return!1;return D7($,"reviewer_enabled")}function vH($){return X14($)?BK:[]}function Q14($){return D7($,"delivery_lanes_enabled")}function DK($){return Q14($)?"merged":"done"}function FO($,Z){if(!$)return!1;return[OK[Z],...Z14].some((X)=>$.startsWith(`${X}:`))}function fH($,Z){if(Z)return new Date(Z).getTime();let X=0;for(let Q of $){if(Q.action!=="status_changed")continue;if(Q.data?.to!=="in_review")continue;X=Math.max(X,new Date(Q.occurredAt).getTime())}return X}function HO($,Z){let X=fH($,Z.cycleStartedAt),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!=="reviewer")continue;if(Y.action==="review_approved"){if(Z?.verifiedOnly&&G.verified!==!0)continue;Q.set("reviewer","approved")}else Q.set("reviewer","changes_requested")}return Q}function KO($,Z,X){if(Z.length===0)return!1;let Q=HO($,X);return Z.every((Y)=>Q.get(Y)==="approved")}function $0$($,Z,X){return KO($,Z,X)&&!KO($,Z,{...X,verifiedOnly:!0})}function Z0$($){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}var X8="super-agent",xd0,$14,qp='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.',ee1,yd0="chore",BK,OK,Z14,Mp="NO VISUAL SURFACE",jZ0,zZ0,X0$="task-board.item.updated",Q0$="task-board.item.deleted";var C6=D(()=>{c9();xd0=["#9ca3af","#ef4444","#f97316","#f59e0b","#22c55e","#3b82f6","#a855f7","#ec4899"],$14=xd0[0];ee1="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.",BK=["reviewer"],OK={reviewer:"Reviewer"},Z14=["QA Agent","Code Reviewer"];jZ0=["triage","todo","in_progress","in_review","approved","merged","post_deploy_validation","done","archived"],zZ0=["approved","merged","post_deploy_validation"]});function gd0($){return $==="trial"?"trial":"subscription"}function kp($,Z,X,Q={}){xY({event:Z,organizationId:X.organizationId,...$.auth?.user?.id?{userId:$.auth.user.id}:{},properties:{task_id:X.id,...Q}})}function hd0($){return $?.status==="active"||$?.status==="past_due"}function PZ0($,Z){if(hd0($))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 Vp(){let $=b0();return{enforced:$.taskQuotaEnforced,freeTaskExecutions:$.freeTaskExecutions,monthlyTaskExecutions:$.monthlyTaskExecutions,maxRunsPerTask:$.maxRunsPerTask}}function NO(){return{...Vp(),maxRunsPerTask:Number.POSITIVE_INFINITY}}async function Fy($,Z,X=Vp()){if(!X.enforced||!xQ(Z))return;let Q=await $.storage.organizationBilling.taskClaim(Z.id);if(Q&&Q.runCount>=X.maxRunsPerTask)throw kp($,"task_quota_blocked",Z,{phase:"precheck",reason:"runs_exhausted"}),new tX("runs_exhausted");if(Q&&Q.state!=="released")return;let Y=await $.storage.organizationBilling.getBilling(Z.organizationId),G=PZ0(Y,X);if(await $.storage.organizationBilling.countTaskClaims(Z.organizationId,G.periodKey)>=G.limit)throw kp($,"task_quota_blocked",Z,{phase:"precheck",reason:G.exhaustedReason,billing_mode:gd0(G.periodKey),limit:G.limit}),new tX(G.exhaustedReason)}async function Y0$($,Z,X=Vp()){if(!X.enforced||!xQ(Z))return"skipped";let Q=await $.storage.organizationBilling.getBilling(Z.organizationId),Y=PZ0(Q,X),G=await $.storage.organizationBilling.claimTaskUnderLimit(Z.organizationId,Z.id,Y.periodKey,Y.limit,X.maxRunsPerTask);if(G==="exhausted")throw kp($,"task_quota_blocked",Z,{phase:"claim",reason:Y.exhaustedReason,billing_mode:gd0(Y.periodKey),limit:Y.limit}),new tX(Y.exhaustedReason);if(G==="runs_exhausted")throw kp($,"task_quota_blocked",Z,{phase:"claim",reason:"runs_exhausted"}),new tX("runs_exhausted");if(G==="claimed")kp($,"task_quota_claimed",Z,{billing_mode:gd0(Y.periodKey),period_key:Y.periodKey,limit:Y.limit});return G}async function G0$($,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 J0$($,Z){let X=await $.storage.organizationBilling.taskClaim(Z);return!!X&&X.state!=="released"}async function W0$($,Z,X){if(await $.releaseTaskClaim(Z,X).catch((Y)=>{return console.error("[task-quota] refund failed (stays charged)",Y),!1}))xY({event:"task_quota_refunded",organizationId:Z,properties:{task_id:X}})}var Y14="[SUBSCRIPTION_REQUIRED]",G14,tX;var eG=D(()=>{C6();S4();R$();G14={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"};tX=class tX extends Error{reason;constructor($){super(`${Y14} ${G14[$]}`);this.reason=$;this.name="TaskQuotaError"}}});import{z as bH}from"zod";var ud0;var K0$=D(()=>{M0();eG();ud0=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:bH.object({}),outputSchema:bH.object({enforced:bH.boolean(),billingStatus:bH.string(),subscribed:bH.boolean(),hasBillingAccount:bH.boolean(),used:bH.number(),limit:bH.number(),currentPeriodEnd:bH.string().datetime().nullable()}),handler:async($,Z)=>{t(Z),await Z.access.check();let X=o(Z),Q=Vp(),Y=await Z.storage.organizationBilling.getBilling(X.id),G=PZ0(Y,Q),J=await Z.storage.organizationBilling.countTaskClaims(X.id,G.periodKey);return{enforced:Q.enforced,billingStatus:Y?.status??"none",subscribed:hd0(Y),hasBillingAccount:!!Y?.stripeCustomerId,used:J,limit:G.limit,currentPeriodEnd:Y?.currentPeriodEnd?.toISOString()??null}}})});var F0$=D(()=>{Pe1();Ae1();Te1();Re1();Ie1();Me1();ke1();Se1();_e1();ve1();be1();he1();ue1();ce1();le1();de1();me1();ae1();se1();K0$()});function LK($){if($==null)return"unknown error";if(typeof $==="string")return $;if($ instanceof Error)return $.message;return JSON.stringify($)}function AZ0($){if($===null||typeof $==="string"||typeof $==="number"||typeof $==="boolean")return!0;if(Array.isArray($))return $.every(AZ0);if(typeof $==="object")return Object.entries($).every(([Z,X])=>typeof Z==="string"&&(X===void 0||AZ0(X)));return!1}function cd0($){return Array.isArray($)&&$.every(AZ0)}function Sp($){return $!=null&&typeof $==="object"&&Object.entries($).every(([Z,X])=>typeof Z==="string"&&(X===void 0||AZ0(X)))}var g0$="vercel.ai.error",W14,H0$,N0$,J1,h0$="AI_APICallError",u0$,K14,U0$,B0$,Q4,c0$="AI_EmptyResponseBodyError",l0$,F14,O0$,D0$,TZ0,d0$="AI_InvalidArgumentError",m0$,H14,L0$,w0$,UO,i0$="AI_InvalidPromptError",p0$,N14,E0$,j0$,$J,n0$="AI_InvalidResponseDataError",t0$,U14,z0$,P0$,Hy,o0$="AI_JSONParseError",r0$,B14,A0$,T0$,xH,a0$="AI_LoadAPIKeyError",s0$,O14,R0$,I0$,PE,e0$="AI_LoadSettingError",$1$,D14,q0$,M0$,Z1$,X1$="AI_NoContentGeneratedError",Q1$,L14,k0$,V0$,Y1$,G1$="AI_NoSuchModelError",J1$,w14,S0$,C0$,l5,W1$="AI_TooManyEmbeddingValuesForCallError",K1$,E14,_0$,v0$,Ny,F1$="AI_TypeValidationError",H1$,j14,f0$,b0$,O5,N1$="AI_UnsupportedFunctionalityError",U1$,z14,x0$,y0$,_4;var a1=D(()=>{W14=Symbol.for(g0$),J1=class $ extends(N0$=Error,H0$=W14,N0$){constructor({name:Z,message:X,cause:Q}){super(X);this[H0$]=!0,this.name=Z,this.cause=Q}static isInstance(Z){return $.hasMarker(Z,g0$)}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}},u0$=`vercel.ai.error.${h0$}`,K14=Symbol.for(u0$),Q4=class extends(B0$=J1,U0$=K14,B0$){constructor({message:$,url:Z,requestBodyValues:X,statusCode:Q,responseHeaders:Y,responseBody:G,cause:J,isRetryable:W=Q!=null&&(Q===408||Q===409||Q===429||Q>=500),data:K}){super({name:h0$,message:$,cause:J});this[U0$]=!0,this.url=Z,this.requestBodyValues=X,this.statusCode=Q,this.responseHeaders=Y,this.responseBody=G,this.isRetryable=W,this.data=K}static isInstance($){return J1.hasMarker($,u0$)}},l0$=`vercel.ai.error.${c0$}`,F14=Symbol.for(l0$),TZ0=class extends(D0$=J1,O0$=F14,D0$){constructor({message:$="Empty response body"}={}){super({name:c0$,message:$});this[O0$]=!0}static isInstance($){return J1.hasMarker($,l0$)}};m0$=`vercel.ai.error.${d0$}`,H14=Symbol.for(m0$),UO=class extends(w0$=J1,L0$=H14,w0$){constructor({message:$,cause:Z,argument:X}){super({name:d0$,message:$,cause:Z});this[L0$]=!0,this.argument=X}static isInstance($){return J1.hasMarker($,m0$)}},p0$=`vercel.ai.error.${i0$}`,N14=Symbol.for(p0$),$J=class extends(j0$=J1,E0$=N14,j0$){constructor({prompt:$,message:Z,cause:X}){super({name:i0$,message:`Invalid prompt: ${Z}`,cause:X});this[E0$]=!0,this.prompt=$}static isInstance($){return J1.hasMarker($,p0$)}},t0$=`vercel.ai.error.${n0$}`,U14=Symbol.for(t0$),Hy=class extends(P0$=J1,z0$=U14,P0$){constructor({data:$,message:Z=`Invalid response data: ${JSON.stringify($)}.`}){super({name:n0$,message:Z});this[z0$]=!0,this.data=$}static isInstance($){return J1.hasMarker($,t0$)}},r0$=`vercel.ai.error.${o0$}`,B14=Symbol.for(r0$),xH=class extends(T0$=J1,A0$=B14,T0$){constructor({text:$,cause:Z}){super({name:o0$,message:`JSON parsing failed: Text: ${$}.
892
893
  Error message: ${LK(Z)}`,cause:Z});this[A0$]=!0,this.text=$}static isInstance($){return J1.hasMarker($,r0$)}},s0$=`vercel.ai.error.${a0$}`,O14=Symbol.for(s0$),PE=class extends(I0$=J1,R0$=O14,I0$){constructor({message:$}){super({name:a0$,message:$});this[R0$]=!0}static isInstance($){return J1.hasMarker($,s0$)}},$1$=`vercel.ai.error.${e0$}`,D14=Symbol.for($1$),Z1$=class extends(M0$=J1,q0$=D14,M0$){constructor({message:$}){super({name:e0$,message:$});this[q0$]=!0}static isInstance($){return J1.hasMarker($,$1$)}},Q1$=`vercel.ai.error.${X1$}`,L14=Symbol.for(Q1$),Y1$=class extends(V0$=J1,k0$=L14,V0$){constructor({message:$="No content generated."}={}){super({name:X1$,message:$});this[k0$]=!0}static isInstance($){return J1.hasMarker($,Q1$)}},J1$=`vercel.ai.error.${G1$}`,w14=Symbol.for(J1$),l5=class extends(C0$=J1,S0$=w14,C0$){constructor({errorName:$=G1$,modelId:Z,modelType:X,message:Q=`No such ${X}: ${Z}`}){super({name:$,message:Q});this[S0$]=!0,this.modelId=Z,this.modelType=X}static isInstance($){return J1.hasMarker($,J1$)}},K1$=`vercel.ai.error.${W1$}`,E14=Symbol.for(K1$),Ny=class extends(v0$=J1,_0$=E14,v0$){constructor($){super({name:W1$,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[_0$]=!0,this.provider=$.provider,this.modelId=$.modelId,this.maxEmbeddingsPerCall=$.maxEmbeddingsPerCall,this.values=$.values}static isInstance($){return J1.hasMarker($,K1$)}},H1$=`vercel.ai.error.${F1$}`,j14=Symbol.for(H1$),O5=class $ extends(b0$=J1,f0$=j14,b0$){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:F1$,message:`${Y}: Value: ${JSON.stringify(Z)}.
@@ -2876,7 +2877,7 @@ Respond with the structured verdict and a short reason.`,lc$;var mc$=D(()=>{l4()
2876
2877
  ${G.join(`
2877
2878
  `)}`:Y}function UN6($){let Z=new Set;for(let X of $)for(let Q of X.split(`
2878
2879
  `)){let Y=Q.trim();if(/^Co-authored-by:\s/i.test(Y))Z.add(Y)}return[...Z]}var Il$=200,XN6=12,YN6,JN6=300,E71=3;var j71=D(()=>{dD();KT0();YN6={aheadBy:0,behindBy:0,files:[]}});function ON6($){if(!$||$.includes(".."))return!1;return BN6.test($)}function Ml$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!ON6(Z))return null;let{__resolveType:X,...Q}=$;return{resolveType:Z,payload:Q}}function kl$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var BN6;var Vl$=D(()=>{BN6=/^[\w./@-]+$/});function Us($,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 Sl$($,Z,X,Q){if(!Q.connectionId)throw new Uv("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let Y=$.organization?.id;if(!Y)throw new Uv(J9);await kO({ctx:$,connectionId:Q.connectionId,organizationId:Y,forceRefresh:!0,onLegacyMintError:(H)=>{let N=H instanceof Error?H.message:J9;throw new Uv(N)}});let{cloneUrl:G,gitUserName:J,gitUserEmail:W}=await RK(Q.connectionId,Q.owner,Q.name,$.db,$.vault).catch((H)=>{let{code:N,message:U}=z5$(H instanceof Error?H.message:String(H));throw N?new Uv(U):H}),K=hu($),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:W}},...K?{operator:K}:{}})});if(!F.ok){let H=await MO(F,DN6).catch(()=>F.statusText);throw Error(`Failed to refresh sandbox git credentials (${F.status}): ${H}`)}}var DN6=10485760,Uv;var z71=D(()=>{YJ();aA0();Qn();Ui0();qy();Uv=class Uv extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function wN6($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!LN6.test(Z))throw Error(`Invalid branch name: ${$}`)}function Bv($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(jN6)])}async function PN6($,Z){let X=$.var.studioContext,Q=XJ(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,W=LC(J?.metadata?.runtime);if(W)return W;let K=mO0(Z.virtualMcpMetadata),F=K==="cms"?await Z71(X,{claimName:Z.claimName}):"alive",H=K==="cms"&&F!=="alive"?"cms":"sandbox",N=!!J&&(F==="gone"||F==="alive"&&K==="cms");if(N&&J)_n(X,J.id,H);if(K==="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 AN6($){let Z=$.get("vmClaim");if(Z.runner)return Z.runner;try{return await ZQ($.var.studioContext)}catch{return null}}function Ov($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}async function mu($){let{virtualMcpMetadata:Z,connectionIds:X}=$.get("vmClaim"),Q=$.var.studioContext,Y=Us(Z,X);if(!Y)throw new h4(404,"AUTH","repo","Project has no GitHub repository");let G=o(Q);return sA0(Q,G.id,Y)}function P71($,Z){if(Z instanceof QA0)return $.json({error:Z.message},429,{...A5,...Z.retryAfterMs===null?{}:{"Retry-After":String(Math.ceil(Z.retryAfterMs/1000))}});if(Z instanceof h4){let Q=Z.status===404?404:Z.status===409||Z.status===422?409:502;return $.json({error:Z.message},Q,A5)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},502,A5)}async function vl$($,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 fl$($){try{let Z=await mu($),X=await FT0(Z,$.get("vmClaim").branch);return $.json(X,200,A5)}catch(Z){return P71($,Z)}}function Bs($,Z){let Q=(UT0.get($)??Promise.resolve()).catch(()=>{}).then(Z),Y=Q.catch(()=>{});return UT0.set($,Y),Y.finally(()=>{if(UT0.get($)===Y)UT0.delete($)}),Q}async function oZ($,Z,X){if(!X?.runner&&$.get("vmClaim").runtime==="cms")return $.json({error:"sandbox not found: this session is sandbox-less"},404,A5);let Q=X?.runner??Ov($);if(Q instanceof Response)return Q;let{claimName:Y,userId:G,projectRef:J}=$.get("vmClaim"),W=X?.method??"POST",K=null,F=new Headers;if(X?.jsonBody!==void 0)K=X.jsonBody,F.set("content-type","application/json");else if(X?.forwardJsonBody)K=await $.req.text(),F.set("content-type","application/json");let H=X?.signal,N={method:W,headers:F,body:K,...H?{signal:H}:{}},U=async()=>{let B=await Q.proxyDaemonRequest(Y,Z,N);if(X?.map404to410&&B.status===404){try{await B.body?.cancel()}catch{}if(await Q.adoptLiveClaim({userId:G,projectRef:J},Y))B=await Q.proxyDaemonRequest(Y,Z,N);if(B.status===404){try{await B.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",...A5}})}}let O=await B.text(),L=X?.redactRepoDir?TN6(O):O,w=B.headers.get("content-type")??"application/json";return new Response(L,{status:B.status,headers:{"content-type":w,...A5}})};try{if(H){let B=U();return B.catch(()=>{}),await Promise.race([B,new Promise((L,w)=>{if(H.aborted)return w(H.reason);H.addEventListener("abort",()=>w(H.reason),{once:!0})})])}return await U()}catch(B){let O=B instanceof Error?B.message:String(B);return $.json({error:`Daemon unreachable: ${O}`},502)}}function TN6($){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 BT0($,Z,X,Q="GET",Y){let G=await $.proxyDaemonRequest(Z,X,{method:Q,headers:new Headers,body:null});if(G.status===404&&Y){try{await G.body?.cancel()}catch{}if(await $.adoptLiveClaim(Y,Z))G=await $.proxyDaemonRequest(Z,X,{method:Q,headers:new Headers,body:null})}if(G.status===404){try{await G.body?.cancel()}catch{}throw Error("SANDBOX_GONE")}let J=await G.text();if(!G.ok){let W=`Daemon error (${G.status})`;try{W=JSON.parse(J).error??W}catch{}throw Error(W)}return JSON.parse(J)}function RN6($){return bl$.includes($)}var LN6,Cl$=524288,EN6=65536,jN6=1e4,_l$=2000,zN6,UT0,A5,bl$,xl$=()=>{let $=new H1;$.use("/:virtualMcpId/:branch/*",zN6),$.post("/:virtualMcpId/:branch/write",(X)=>oZ(X,"/_sandbox/write",{forwardJsonBody:!0,signal:Bv(X)})),$.post("/:virtualMcpId/:branch/unlink",(X)=>oZ(X,"/_sandbox/unlink",{forwardJsonBody:!0,signal:Bv(X)})),$.post("/:virtualMcpId/:branch/mkdir",(X)=>oZ(X,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:Bv(X)})),$.post("/:virtualMcpId/:branch/rename",(X)=>oZ(X,"/_sandbox/rename",{forwardJsonBody:!0,signal:Bv(X)})),$.post("/:virtualMcpId/:branch/read",(X)=>oZ(X,"/_sandbox/read",{forwardJsonBody:!0,signal:Bv(X)})),$.post("/:virtualMcpId/:branch/glob",(X)=>oZ(X,"/_sandbox/glob",{forwardJsonBody:!0,signal:Bv(X)})),$.post("/:virtualMcpId/:branch/grep",(X)=>oZ(X,"/_sandbox/grep",{forwardJsonBody:!0,signal:Bv(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 oZ(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 oZ(X,`/_sandbox/exec/${encodeURIComponent(Q)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(X)=>oZ(X,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDir:!0})),$.put("/:virtualMcpId/:branch/config",(X)=>oZ(X,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(X)=>{let Q=X.req.param("step");if(!Q||!RN6(Q))return X.json({error:`step must be one of: ${bl$.join(", ")}`},400);let Y=X.get("vmClaim"),G=await Z71(X.var.studioContext,{claimName:Y.claimName})==="gone"?null:await AN6(X);if(!G)return X.json({error:"sandbox not found: nothing is running at this ref"},404,A5);if(Q==="start"){let J=o(X.var.studioContext),W=Ry(Y.virtualMcpMetadata);try{await J70({ctx:X.var.studioContext,runner:G,handle:Y.claimName,orgId:J.id,userId:Y.callerUserId,entries:W})}catch(K){let F=K instanceof Error?K.message:String(K);return X.json({error:`Failed to push env to daemon: ${F}`},502)}}return oZ(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 iN(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 xc$(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 fl$(X);return Z(X)});let Z=(X)=>oZ(X,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([X.req.raw.signal,AbortSignal.timeout(_l$)])});return $.post("/:virtualMcpId/:branch/git/status",(X)=>{if(X.get("vmClaim").runtime==="cms")return fl$(X);return oZ(X,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([X.req.raw.signal,AbortSignal.timeout(_l$)])})}),$.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 mu(X),J=await HT0(G,Q.branch,Y.base);return X.json(J,200,A5)}catch(Y){return P71(X,Y)}return oZ(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,A5);let Q=Ov(X);if(Q instanceof Response)return Q;let{claimName:Y,virtualMcpMetadata:G,connectionIds:J}=X.get("vmClaim"),W=X.var.studioContext;return Bs(Y,async()=>{try{await X71(W,Q,Y);let K=Us(G,J);if(K)await Sl$(W,Q,Y,K)}catch(K){if(K instanceof Uv)return X.json({error:K.message},403,A5);let F=K instanceof Error?K.message:String(K);return X.json({error:F},502,A5)}return oZ(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 Bs(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,A5);try{let J=await mu(X);return await ql$(J,Q.branch,G),X.json({ok:!0},200,A5)}catch(J){let W=J instanceof h4&&J.status===409?409:502,K=J instanceof Error?J.message:String(J);return X.json({error:K},W,A5)}});return Bs(Q.claimName,()=>oZ(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 Bs(Q.claimName,async()=>{try{let W=await X.req.json().catch(()=>({})),K=await mu(X),F=W.base??await K.getDefaultBranch();return await NT0(K,Q.branch,F),X.json({ok:!0},200,A5)}catch(W){return P71(X,W)}});let Y=Ov(X);if(Y instanceof Response)return Y;let{claimName:G}=X.get("vmClaim"),J=X.var.studioContext;return Bs(G,async()=>{try{await X71(J,Y,G)}catch(W){let K=W instanceof Error?W.message:String(W);return X.json({error:K},502,A5)}return oZ(X,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",n5({maxSize:Cl$,onError:(X)=>X.json({error:"Payload too large"},413,A5)}),async(X)=>{let Q=X.get("vmClaim"),Y=null;if(Q.runtime!=="cms"){let F=Ov(X);if(F instanceof Response)return F;Y=F}let{claimName:G,userId:J,projectRef:W}=Q,K=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,[B,O]=G71(H)&&U?[H,N]:Y?await Promise.all([BT0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:W}),BT0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:W})]):await(async()=>{let w=await mu(X);return Promise.all([FT0(w,Q.branch),HT0(w,Q.branch)])})(),L=await cc$(K,B,O);return X.json(L,200,A5)}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,A5);return X.json({error:H},502,A5)}}),$.post("/:virtualMcpId/:branch/git/judge-review",n5({maxSize:Cl$,onError:(X)=>X.json({error:"Payload too large"},413,A5)}),async(X)=>{let Q=X.get("vmClaim"),Y=null;if(Q.runtime!=="cms"){let F=Ov(X);if(F instanceof Response)return F;Y=F}let{claimName:G,userId:J,projectRef:W}=Q,K=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,[B,O]=G71(H)&&U?[H,N]:Y?await Promise.all([BT0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:W}),BT0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:W})]):await(async()=>{let w=await mu(X);return Promise.all([FT0(w,Q.branch),HT0(w,Q.branch)])})(),L=await dc$(K,B,O,typeof F.language==="string"?F.language:void 0);return X.json(L,200,A5)}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,A5);return X.json({error:H},502,A5)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(X)=>{let Q=Ov(X);if(Q instanceof Response)return Q;let{claimName:Y}=X.get("vmClaim"),G=X.req.query("path");if(!G||!G.startsWith("/")||G.startsWith("//")||G.includes("..")||G.includes("\\"))return X.json({error:"Path not allowed"},403);let J;try{J=await Q.getPreviewUrl(Y)}catch{return X.json({error:"Preview not available"},502)}if(!J)return X.json({error:"Preview not available"},502);let W=J.replace(/\/+$/,"");return vl$(X,`${W}${G}`)}),$.post("/:virtualMcpId/:branch/preview-invoke",n5({maxSize:EN6,onError:(X)=>X.json({error:"Payload too large"},413)}),async(X)=>{let Q=Ov(X);if(Q instanceof Response)return Q;let{claimName:Y}=X.get("vmClaim"),G;try{G=await Q.getPreviewUrl(Y)}catch{return X.json({error:"Preview not available"},502)}if(!G)return X.json({error:"Preview not available"},502);let J;try{J=await X.req.json()}catch{return X.json({error:"Invalid JSON body"},400)}if(!J||typeof J!=="object"||Array.isArray(J))return X.json({error:"Invalid JSON body"},400);let W=Ml$(J);if(!W)return X.json({error:"Invalid or missing __resolveType"},400);let K=kl$(G,W.resolveType);return vl$(X,K,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(W.payload),signal:AbortSignal.timeout(30000)})}),$};var yl$=D(()=>{U8();wF();gu();$71();sp();vc$();g3();dy();fc$();d3();bc$();yc$();Fi0();Zn();K71();mc$();H71();dD();j71();Vl$();z71();LN6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;zN6=rA0(async($,Z)=>{let X=$.var.studioContext;try{t(X)}catch{return $.json({error:"Unauthorized"},401)}let Q=o0(X);if(!Q)return $.json({error:"Unauthorized"},401);let Y;try{Y=o(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{wN6(J)}catch(L){let w=L instanceof Error?L.message:String(L);return $.json({error:w},400)}let W=await X.storage.virtualMcps.findById(G);if(!W||W.organization_id!==Y.id)return $.json({error:"Virtual MCP not found"},404);let K=rp({orgId:Y.id,virtualMcpId:G,branch:J}),F=await Qi0(X,J),H=Yi0(F,Q),N=_c$({userId:H,projectRef:K}),U=W.metadata??null,B=await PN6($,{claimName:N,branch:J,virtualMcpId:G,sandboxUserId:H,virtualMcpMetadata:U,branchThread:F});if(B==="cms")return $.set("vmClaim",{claimName:N,callerUserId:Q,runner:null,virtualMcpId:G,branch:J,userId:H,projectRef:K,virtualMcpMetadata:U,connectionIds:W.connections?.map((L)=>L.connection_id)??[],runtime:B}),Z();let O;try{O=await ZQ(X)}catch{O=null}if(!O)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:N,callerUserId:Q,runner:O,virtualMcpId:G,branch:J,userId:H,projectRef:K,virtualMcpMetadata:U,connectionIds:W.connections?.map((L)=>L.connection_id)??[],runtime:B}),Z()});UT0=new Map;A5={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};bl$=["clone","install","start"]});function gl$($,Z,X){let Q=A71.get($);if(!Q)Q={pending:null,running:!1},A71.set($,Q);if(!Q.pending)Q.pending={set:new Map,del:new Set,deps:Z,resolvers:[],rejecters:[]};let Y=Q.pending;Y.deps=Z;for(let[J,W]of Object.entries(X.set??{}))Y.set.set(J,W),Y.del.delete(J);for(let J of X.delete??[])Y.del.add(J),Y.set.delete(J);let G=new Promise((J,W)=>{Y.resolvers.push(J),Y.rejecters.push(W)});if(!Q.running)qN6($,Q);return G}async function qN6($,Z){Z.running=!0;try{while(Z.pending){let X=Z.pending;Z.pending=null;try{let Q=await MN6(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)A71.delete($)}}async function MN6($){let{client:Z,branch:X,packagePath:Q}=$.deps;for(let Y=0;;Y++){let G=await du(Z,X),J=await Z.getCommitTreeSha(G),W=await Z.getDecofileTree(J,Q),K=L71(W,Q),F=[],H=new Map(K.map((O)=>[O.path,{stem:O.stem,sha:O.sha}]));for(let[O,L]of $.set){let w=w71(K,O),E=`${JSON.stringify(L,null,2)}
2879
- `,j=await Z.createBlob(E);await Al$(Z.owner,Z.repo,j,E);let z=w[0]??`${WT0(Q)}/${N71(O)}.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 O of $.del)for(let L of w71(K,O))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(W.some((O)=>O.type==="blob"&&O.path===N)){let O=await Promise.all([...H.values()].map(async(j)=>({stem:j.stem,content:j.content??await Z.getBlobText(j.sha)}))),{decofile:L,skipped:w}=Ks(O);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),B=await Z.createCommit({message:kN6($),treeSha:U,parentShas:[G]});try{return await Z.updateRef(X,B),B}catch(O){if(!(O instanceof h4&&O.status===422)||Y>=IN6-1)throw O;await L$(sZ(2000,200,Y,2,0.5))}}}function kN6($){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 am0(Q,$.deps.coAuthor)}var IN6=3,A71;var hl$=D(()=>{gO0();$T0();W4();dD();KT0();A71=new Map});import{createHmac as ul$,randomBytes as VN6,timingSafeEqual as SN6}from"crypto";function cl$(){if(OT0)return OT0;let $;try{let Z=b0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return OT0=$?Buffer.from($):VN6(32),OT0}function T71($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+CN6)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=ul$("sha256",cl$()).update(Q).digest("base64url");return`${Q}.${Y}`}function ll$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(ul$("sha256",cl$()).update(Q).digest("base64url"));if(Y.length!==G.length||!SN6(Y,G))return!1;let J;try{J=JSON.parse(Buffer.from(Q,"base64url").toString())}catch{return!1}let W=Math.floor((Z.nowMs??Date.now())/1000);return J.o===Z.organizationId&&J.m===Z.virtualMcpId&&J.b===Z.branch&&typeof J.e==="number"&&J.e>=W}var CN6=21600000,OT0=null;var dl$=D(()=>{R$()});import{z as iu}from"zod";function vN6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&_N6.test($)}function tl$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function Os($){let Z=$.get("decofileScope");return sA0($.var.studioContext,Z.organizationId,Z.githubRepo)}function Ds($,Z){if(Z instanceof h4){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 ol$(){let $=new H1;return $.use("/:virtualMcpId/:branch",nl$),$.use("/:virtualMcpId/:branch/*",nl$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Os(Z),Y=await Tl$(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=T71({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(tl$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return Ds(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 Os(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 Ds(Z,Y)}}),$.patch("/:virtualMcpId/:branch",bN6,async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=xN6.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{eA0(J)}catch(W){let K=W instanceof Error?W.message:String(W);return Z.json({error:K},400)}for(let[J,W]of Object.entries(G.set??{}))if(typeof W!=="object"||W===null||Array.isArray(W))return Z.json({error:`Block "${J}" must be a JSON object`},400);try{let J=await Os(Z),W=await gl$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:hu(Q)},G),K=T71({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:W,token:K,apiHost:tl$(Z)})}catch(J){return Ds(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Os(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({error:"Branch is already the default branch"},400);let G=`chore(decofile): publish ${X.branch}`;try{let J;try{J=await Q.mergeBranch(Y,X.branch,G)}catch(W){if(!(W instanceof h4&&W.status===409))throw W;await NT0(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 h4&&J.status===409)return Z.json({error:"merge-conflict"},409);if(J instanceof h4&&J.status===405){let K=await Q.findOpenPullRequest(Y,X.branch)??await Q.createPullRequest({base:Y,head:X.branch,title:`Publish ${X.branch}`});return Z.json({result:"pull-request",number:K.number,url:K.html_url})}throw J}}catch(Q){return Ds(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Os(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0,lastCommitAt:null});try{let[{aheadBy:G,behindBy:J},W]=await Promise.all([Q.compare(Y,X.branch),Q.getBranchHead(X.branch)]);return Z.json({baseBranch:Y,aheadBy:G,behindBy:J,lastCommitAt:W.committedAt})}catch(G){if(G instanceof h4&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0,lastCommitAt:null});throw G}}catch(Q){return Ds(Z,Q)}}),$}var _N6,ml$=500,il$=1048576,pl$=1024,fN6=8388608,bN6,xN6,nl$;var rl$=D(()=>{vn0();$T0();U8();wF();$71();aA0();z71();H71();hl$();dl$();j71();dD();KT0();_N6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;bN6=n5({maxSize:fN6,onError:($)=>$.json({error:"Payload too large"},413)}),xN6=iu.object({set:iu.record(iu.string(),iu.unknown()).optional(),delete:iu.array(iu.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}).refine(($)=>Object.keys($.set??{}).length+($.delete?.length??0)<=ml$,{message:`Patch cannot touch more than ${ml$} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=il$),{message:`Each block must be at most ${il$} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=pl$),{message:`Each block key must be at most ${pl$} characters`}),nl$=rA0(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(!vN6(G))return $.json({error:`Invalid branch name: ${G}`},400);let J=X.auth?.user?.id??null;if(!J){let B=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!B||!ll$(B,{organizationId:Q.id,virtualMcpId:Y,branch:G}))return $.json({error:"Unauthorized"},401)}let W=await X.storage.virtualMcps.findById(Y);if(!W||W.organization_id!==Q.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!dO0(K))return $.json({error:"Project has no preview server configured"},404);let H=W.connections?.map((B)=>B.connection_id)??[],N=Us(K,H);if(!N)return $.json({error:"Project has no GitHub repository"},404);let U=K?.runtime;return $.set("decofileScope",{organizationId:Q.id,virtualMcpId:Y,branch:G,packagePath:U?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:N,userId:J}),Z()})});var al$=($)=>{let Z=new H1;if(Z.use("*",Xv),Z.route("/",BA0()),Z.route("/",Bg$()),Z.route("/",jc$()),Z.route("/",Lc$()),Z.route("/",nA0()),Z.route("/tools",qc$()),Z.route("/",Tc$()),Z.route("/",ou$({kvStorage:$.kvStorage})),Z.route("/",nu$()),Z.route("/fs",Fc$({getConnection:$.getNatsConnection})),Z.route("/sandbox",xl$()),Z.route("/decofile",ol$()),Z.route("/",Bc$()),Z.route("/deco-sites",DA0()),Z.route("/sso",WA0()),Z.route("/",tA0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",Gg$()),$.mountDevAssets)Z.route("/dev-assets",LA0({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("/",Ib$()),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",Nc$()),Z.route("/mcp",ww0()),Z.route("/mcp/self",pA0()),Z.route("/mcp",zw0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var sl$=D(()=>{U8();A91();Jg$();q91();wA0();fa();z91();tu$();ru$();Hc$();ct();O91();Pw0();nZ1();Uc$();Oc$();wc$();zc$();Rc$();oZ1();Mc$();rZ1();Ew0();yl$();rl$()});function yN6($){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 gN6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},el$=()=>{let $=new H1;return $.use("*",gN6),$.get("/",async(Z)=>{let X=b0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await tZ(Q,Y,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:yN6(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var $d$=D(()=>{U8();R$();NP0()});import{z as M1}from"zod";function AF($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function tN6($){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 oN6($,Z,X){try{return JSON.parse($)}catch{throw new Qd$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function rN6($){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:oN6(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 aN6($){let Z=$.map((X)=>{let Q=X.function.parameters?mY(X.function.parameters):mY({type:"object",properties:{}});return[X.function.name,h$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function sN6($){if(!$)return;return{openai:{response_format:$}}}function eN6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function Zd$($,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 Xd$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var hN6=256,uN6,cN6,lN6,dN6,mN6,iN6,pN6,nN6,Qd$,Yd$,Gd$;var Jd$=D(()=>{l4();U8();gu();RN();uN6=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),cN6=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),lN6=M1.discriminatedUnion("role",[M1.object({role:M1.literal("system"),content:M1.string(),name:M1.string().optional()}),M1.object({role:M1.literal("user"),content:M1.union([M1.string(),M1.array(M1.union([M1.object({type:M1.literal("text"),text:M1.string()}),M1.object({type:M1.literal("image_url"),image_url:M1.object({url:M1.string(),detail:M1.string().optional()})})]))]),name:M1.string().optional()}),M1.object({role:M1.literal("assistant"),content:M1.string().nullable().optional(),name:M1.string().optional(),tool_calls:M1.array(cN6).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),dN6=M1.object({type:M1.literal("text")}),mN6=M1.object({type:M1.literal("json_object")}),iN6=M1.object({type:M1.literal("json_schema"),json_schema:M1.object({name:M1.string(),description:M1.string().optional(),schema:M1.record(M1.string(),M1.unknown()),strict:M1.boolean().optional()})}),pN6=M1.union([dN6,mN6,iN6]),nN6=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(lN6),stream:M1.boolean().optional().default(!1),temperature:M1.number().min(0).max(2).optional(),max_tokens:M1.number().positive().optional(),top_p:M1.number().min(0).max(1).optional(),frequency_penalty:M1.number().min(-2).max(2).optional(),presence_penalty:M1.number().min(-2).max(2).optional(),stop:M1.union([M1.string(),M1.array(M1.string())]).optional(),tools:M1.array(uN6).optional(),tool_choice:M1.union([M1.literal("auto"),M1.literal("none"),M1.literal("required"),M1.object({type:M1.literal("function"),function:M1.object({name:M1.string()})})]).optional(),response_format:pN6.optional(),user:M1.string().optional()});Qd$=class Qd$ extends Error{constructor($){super($);this.name="MessageConversionError"}};Yd$=new H1;Yd$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(AF("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(AF("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(AF("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=nN6.safeParse(Q);if(!Y.success){let w=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(AF(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let G=Y.data,J=tN6(G.model);if(!J)return $.json(AF("Invalid model format. Expected 'model_id' or 'credential_id:model_id' (e.g., 'claude-sonnet-4-6' or 'key_abc123:claude-sonnet-4-6')","invalid_request_error","model"),400);let{credentialId:W}=J,{modelId:K}=J;if(!W){let E=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((j)=>Ww(j.providerId));if(!E)return $.json(AF("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);W=E.id}let F;try{F=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(AF(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let H=F.aiSdk.languageModel(K),N=rN6(G.messages),U=G.tools?aN6(G.tools):void 0,B=sN6(G.response_format),O=eN6(),L=Math.floor(Date.now()/1000);if(G.stream)return iN($,async(w)=>{let E=Zd$(H,N,U,G,B,$.req.raw.signal);try{let j=AO(E),z=!1,A=0,P="",I=async()=>{if(P.length===0)return;let k=P;P="",await w.writeSSE({data:JSON.stringify({id:O,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:O,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>=hN6)await I()}else if(k.type==="tool-call"){await I();let M=A++;await w.writeSSE({data:JSON.stringify({id:O,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:O,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{},finish_reason:Xd$(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=Zd$(H,N,U,G,B,$.req.raw.signal),E=await zO(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:O,object:"chat.completion",created:L,model:G.model,choices:[{index:0,message:j,finish_reason:Xd$(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(AF("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(AF(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(AF(Y.message,"server_error"),500)}});Gd$=Yd$});function $U6($){if(typeof $!=="object"||$===null)return!1;let X=$.githubRepo?.url;return typeof X==="string"&&X.length>0}function Wd$(){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(!aG(G))return Z.json({error:"Invalid site slug"},400);let J=await X.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["organization.id as id","organization.slug as slug","organization.name as name","organization.metadata as metadata"]).where("member.userId","=",Q).execute(),W=[];for(let F of J){if(!F.slug||fZ(F))continue;let H=await X.storage.virtualMcps.list(F.id);for(let N of H){if(es1(N)!==G)continue;if(!$U6(N.metadata))continue;W.push({orgSlug:F.slug,orgName:F.name??F.slug,project:{id:N.id,title:N.title,icon:N.icon??null}})}}let K={matches:W};return Z.json(K)}),$}var Kd$=D(()=>{U8();XO()});var Hd$;var Fd$=D(()=>{Hd$={name:"decocms",version:"4.303.8",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 QU6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??XU6}}var Nd$,XU6="https://ph.studio.decocms.com",Ud$;var Bd$=D(()=>{U8();h50();yC();Z9();R$();G91();Fd$();Nd$=new H1;Nd$.get("/",($)=>{let Z={version:Hd$.version,theme:Ti1(),...TH().logo&&{logo:TH().logo},...NN()&&{internalUrl:sC1()},...b0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!b0().firecrawlApiKey,auth:Dy$(),posthog:QU6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:Ts()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});Ud$=Nd$});function pu($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function R71($){return(pu($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function Dd$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(pu($))}&sz=${Z}`}function Od$($,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 Ld$($){let{brand:Z,domain:X,score:Q,verdict:Y}=$,G=typeof Q==="number"?`${Z} commerce report \u2014 ${Math.round(Q)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,J=`See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,W=Y?.trim()?Od$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):Od$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as l0}from"zod";var Dv,YU6,GU6,JU6,WU6,wd$;var Ed$=D(()=>{Dv=l0.enum(["good","bad","neutral"]),YU6=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:Dv.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 $})),GU6=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(YU6)),JU6={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()},WU6=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:Dv.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:Dv.optional()}),l0.object({template:l0.literal("stats"),stats:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),tone:Dv.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:Dv.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(GU6).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:Dv.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:Dv.optional()})).min(1)})]),wd$=l0.object({...JU6,template:WU6})});function DT0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=wd$.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 I71=D(()=>{Ed$()});import{join as jd$}from"path";async function FU6($){try{let Z=await fetch(`${GK({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(KU6)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=DT0(X);if(!Q.slides.length)return null;let Y=Q.slides.find((W)=>W.template.template==="cover"),G=Y?.template,J=G&&G.template==="cover"?G:void 0;return{brand:Q.meta.brand?.trim()||R71($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function wG($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function HU6($,Z){let X=pu($),Q=Z?.brand?.trim()||R71(X),Y=Dd$(X,128),J=`${(b0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=Ld$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),F=`${J}/og.png`,H=`${Q} commerce report by decocms`;return[`<title>${wG(W)}</title>`,`<meta name="description" content="${wG(K)}" />`,'<meta name="robots" content="noindex, follow" />','<meta property="og:type" content="website" />','<meta property="og:site_name" content="decocms" />',`<meta property="og:title" content="${wG(W)}" />`,`<meta property="og:description" content="${wG(K)}" />`,`<meta property="og:url" content="${wG(J)}" />`,`<meta property="og:image" content="${wG(F)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${wG(H)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${wG(W)}" />`,`<meta name="twitter:description" content="${wG(K)}" />`,`<meta name="twitter:image" content="${wG(F)}" />`,`<meta name="twitter:image:alt" content="${wG(H)}" />`,`<link rel="canonical" href="${wG(J)}" />`,`<link rel="icon" href="${wG(Y)}" sizes="any" />`].join(`
2880
+ `,j=await Z.createBlob(E);await Al$(Z.owner,Z.repo,j,E);let z=w[0]??`${WT0(Q)}/${N71(O)}.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 O of $.del)for(let L of w71(K,O))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(W.some((O)=>O.type==="blob"&&O.path===N)){let O=await Promise.all([...H.values()].map(async(j)=>({stem:j.stem,content:j.content??await Z.getBlobText(j.sha)}))),{decofile:L,skipped:w}=Ks(O);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),B=await Z.createCommit({message:kN6($),treeSha:U,parentShas:[G]});try{return await Z.updateRef(X,B),B}catch(O){if(!(O instanceof h4&&O.status===422)||Y>=IN6-1)throw O;await L$(sZ(2000,200,Y,2,0.5))}}}function kN6($){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 am0(Q,$.deps.coAuthor)}var IN6=3,A71;var hl$=D(()=>{gO0();$T0();W4();dD();KT0();A71=new Map});import{createHmac as ul$,randomBytes as VN6,timingSafeEqual as SN6}from"crypto";function cl$(){if(OT0)return OT0;let $;try{let Z=b0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return OT0=$?Buffer.from($):VN6(32),OT0}function T71($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+CN6)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=ul$("sha256",cl$()).update(Q).digest("base64url");return`${Q}.${Y}`}function ll$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(ul$("sha256",cl$()).update(Q).digest("base64url"));if(Y.length!==G.length||!SN6(Y,G))return!1;let J;try{J=JSON.parse(Buffer.from(Q,"base64url").toString())}catch{return!1}let W=Math.floor((Z.nowMs??Date.now())/1000);return J.o===Z.organizationId&&J.m===Z.virtualMcpId&&J.b===Z.branch&&typeof J.e==="number"&&J.e>=W}var CN6=21600000,OT0=null;var dl$=D(()=>{R$()});import{z as iu}from"zod";function vN6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&_N6.test($)}function tl$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function Os($){let Z=$.get("decofileScope");return sA0($.var.studioContext,Z.organizationId,Z.githubRepo)}function Ds($,Z){if(Z instanceof h4){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 ol$(){let $=new H1;return $.use("/:virtualMcpId/:branch",nl$),$.use("/:virtualMcpId/:branch/*",nl$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Os(Z),Y=await Tl$(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=T71({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(tl$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return Ds(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 Os(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 Ds(Z,Y)}}),$.patch("/:virtualMcpId/:branch",bN6,async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=xN6.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{eA0(J)}catch(W){let K=W instanceof Error?W.message:String(W);return Z.json({error:K},400)}for(let[J,W]of Object.entries(G.set??{}))if(typeof W!=="object"||W===null||Array.isArray(W))return Z.json({error:`Block "${J}" must be a JSON object`},400);try{let J=await Os(Z),W=await gl$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:hu(Q)},G),K=T71({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:W,token:K,apiHost:tl$(Z)})}catch(J){return Ds(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Os(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({error:"Branch is already the default branch"},400);let G=`chore(decofile): publish ${X.branch}`;try{let J;try{J=await Q.mergeBranch(Y,X.branch,G)}catch(W){if(!(W instanceof h4&&W.status===409))throw W;await NT0(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 h4&&J.status===409)return Z.json({error:"merge-conflict"},409);if(J instanceof h4&&J.status===405){let K=await Q.findOpenPullRequest(Y,X.branch)??await Q.createPullRequest({base:Y,head:X.branch,title:`Publish ${X.branch}`});return Z.json({result:"pull-request",number:K.number,url:K.html_url})}throw J}}catch(Q){return Ds(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Os(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0,lastCommitAt:null});try{let[{aheadBy:G,behindBy:J},W]=await Promise.all([Q.compare(Y,X.branch),Q.getBranchHead(X.branch)]);return Z.json({baseBranch:Y,aheadBy:G,behindBy:J,lastCommitAt:W.committedAt})}catch(G){if(G instanceof h4&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0,lastCommitAt:null});throw G}}catch(Q){return Ds(Z,Q)}}),$}var _N6,ml$=500,il$=1048576,pl$=1024,fN6=8388608,bN6,xN6,nl$;var rl$=D(()=>{vn0();$T0();U8();wF();$71();aA0();z71();H71();hl$();dl$();j71();dD();KT0();_N6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;bN6=n5({maxSize:fN6,onError:($)=>$.json({error:"Payload too large"},413)}),xN6=iu.object({set:iu.record(iu.string(),iu.unknown()).optional(),delete:iu.array(iu.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}).refine(($)=>Object.keys($.set??{}).length+($.delete?.length??0)<=ml$,{message:`Patch cannot touch more than ${ml$} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=il$),{message:`Each block must be at most ${il$} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=pl$),{message:`Each block key must be at most ${pl$} characters`}),nl$=rA0(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(!vN6(G))return $.json({error:`Invalid branch name: ${G}`},400);let J=X.auth?.user?.id??null;if(!J){let B=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!B||!ll$(B,{organizationId:Q.id,virtualMcpId:Y,branch:G}))return $.json({error:"Unauthorized"},401)}let W=await X.storage.virtualMcps.findById(Y);if(!W||W.organization_id!==Q.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!dO0(K))return $.json({error:"Project has no preview server configured"},404);let H=W.connections?.map((B)=>B.connection_id)??[],N=Us(K,H);if(!N)return $.json({error:"Project has no GitHub repository"},404);let U=K?.runtime;return $.set("decofileScope",{organizationId:Q.id,virtualMcpId:Y,branch:G,packagePath:U?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:N,userId:J}),Z()})});var al$=($)=>{let Z=new H1;if(Z.use("*",Xv),Z.route("/",BA0()),Z.route("/",Bg$()),Z.route("/",jc$()),Z.route("/",Lc$()),Z.route("/",nA0()),Z.route("/tools",qc$()),Z.route("/",Tc$()),Z.route("/",ou$({kvStorage:$.kvStorage})),Z.route("/",nu$()),Z.route("/fs",Fc$({getConnection:$.getNatsConnection})),Z.route("/sandbox",xl$()),Z.route("/decofile",ol$()),Z.route("/",Bc$()),Z.route("/deco-sites",DA0()),Z.route("/sso",WA0()),Z.route("/",tA0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",Gg$()),$.mountDevAssets)Z.route("/dev-assets",LA0({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("/",Ib$()),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",Nc$()),Z.route("/mcp",ww0()),Z.route("/mcp/self",pA0()),Z.route("/mcp",zw0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var sl$=D(()=>{U8();A91();Jg$();q91();wA0();fa();z91();tu$();ru$();Hc$();ct();O91();Pw0();nZ1();Uc$();Oc$();wc$();zc$();Rc$();oZ1();Mc$();rZ1();Ew0();yl$();rl$()});function yN6($){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 gN6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},el$=()=>{let $=new H1;return $.use("*",gN6),$.get("/",async(Z)=>{let X=b0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await tZ(Q,Y,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:yN6(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var $d$=D(()=>{U8();R$();NP0()});import{z as M1}from"zod";function AF($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function tN6($){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 oN6($,Z,X){try{return JSON.parse($)}catch{throw new Qd$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function rN6($){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:oN6(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 aN6($){let Z=$.map((X)=>{let Q=X.function.parameters?mY(X.function.parameters):mY({type:"object",properties:{}});return[X.function.name,h$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function sN6($){if(!$)return;return{openai:{response_format:$}}}function eN6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function Zd$($,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 Xd$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var hN6=256,uN6,cN6,lN6,dN6,mN6,iN6,pN6,nN6,Qd$,Yd$,Gd$;var Jd$=D(()=>{l4();U8();gu();RN();uN6=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),cN6=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),lN6=M1.discriminatedUnion("role",[M1.object({role:M1.literal("system"),content:M1.string(),name:M1.string().optional()}),M1.object({role:M1.literal("user"),content:M1.union([M1.string(),M1.array(M1.union([M1.object({type:M1.literal("text"),text:M1.string()}),M1.object({type:M1.literal("image_url"),image_url:M1.object({url:M1.string(),detail:M1.string().optional()})})]))]),name:M1.string().optional()}),M1.object({role:M1.literal("assistant"),content:M1.string().nullable().optional(),name:M1.string().optional(),tool_calls:M1.array(cN6).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),dN6=M1.object({type:M1.literal("text")}),mN6=M1.object({type:M1.literal("json_object")}),iN6=M1.object({type:M1.literal("json_schema"),json_schema:M1.object({name:M1.string(),description:M1.string().optional(),schema:M1.record(M1.string(),M1.unknown()),strict:M1.boolean().optional()})}),pN6=M1.union([dN6,mN6,iN6]),nN6=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(lN6),stream:M1.boolean().optional().default(!1),temperature:M1.number().min(0).max(2).optional(),max_tokens:M1.number().positive().optional(),top_p:M1.number().min(0).max(1).optional(),frequency_penalty:M1.number().min(-2).max(2).optional(),presence_penalty:M1.number().min(-2).max(2).optional(),stop:M1.union([M1.string(),M1.array(M1.string())]).optional(),tools:M1.array(uN6).optional(),tool_choice:M1.union([M1.literal("auto"),M1.literal("none"),M1.literal("required"),M1.object({type:M1.literal("function"),function:M1.object({name:M1.string()})})]).optional(),response_format:pN6.optional(),user:M1.string().optional()});Qd$=class Qd$ extends Error{constructor($){super($);this.name="MessageConversionError"}};Yd$=new H1;Yd$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(AF("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(AF("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(AF("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=nN6.safeParse(Q);if(!Y.success){let w=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(AF(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let G=Y.data,J=tN6(G.model);if(!J)return $.json(AF("Invalid model format. Expected 'model_id' or 'credential_id:model_id' (e.g., 'claude-sonnet-4-6' or 'key_abc123:claude-sonnet-4-6')","invalid_request_error","model"),400);let{credentialId:W}=J,{modelId:K}=J;if(!W){let E=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((j)=>Ww(j.providerId));if(!E)return $.json(AF("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);W=E.id}let F;try{F=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(AF(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let H=F.aiSdk.languageModel(K),N=rN6(G.messages),U=G.tools?aN6(G.tools):void 0,B=sN6(G.response_format),O=eN6(),L=Math.floor(Date.now()/1000);if(G.stream)return iN($,async(w)=>{let E=Zd$(H,N,U,G,B,$.req.raw.signal);try{let j=AO(E),z=!1,A=0,P="",I=async()=>{if(P.length===0)return;let k=P;P="",await w.writeSSE({data:JSON.stringify({id:O,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:O,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>=hN6)await I()}else if(k.type==="tool-call"){await I();let M=A++;await w.writeSSE({data:JSON.stringify({id:O,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:O,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{},finish_reason:Xd$(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=Zd$(H,N,U,G,B,$.req.raw.signal),E=await zO(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:O,object:"chat.completion",created:L,model:G.model,choices:[{index:0,message:j,finish_reason:Xd$(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(AF("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(AF(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(AF(Y.message,"server_error"),500)}});Gd$=Yd$});function $U6($){if(typeof $!=="object"||$===null)return!1;let X=$.githubRepo?.url;return typeof X==="string"&&X.length>0}function Wd$(){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(!aG(G))return Z.json({error:"Invalid site slug"},400);let J=await X.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["organization.id as id","organization.slug as slug","organization.name as name","organization.metadata as metadata"]).where("member.userId","=",Q).execute(),W=[];for(let F of J){if(!F.slug||fZ(F))continue;let H=await X.storage.virtualMcps.list(F.id);for(let N of H){if(es1(N)!==G)continue;if(!$U6(N.metadata))continue;W.push({orgSlug:F.slug,orgName:F.name??F.slug,project:{id:N.id,title:N.title,icon:N.icon??null}})}}let K={matches:W};return Z.json(K)}),$}var Kd$=D(()=>{U8();XO()});var Hd$;var Fd$=D(()=>{Hd$={name:"decocms",version:"4.303.10",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 QU6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??XU6}}var Nd$,XU6="https://ph.studio.decocms.com",Ud$;var Bd$=D(()=>{U8();h50();yC();Z9();R$();G91();Fd$();Nd$=new H1;Nd$.get("/",($)=>{let Z={version:Hd$.version,theme:Ti1(),...TH().logo&&{logo:TH().logo},...NN()&&{internalUrl:sC1()},...b0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!b0().firecrawlApiKey,auth:Dy$(),posthog:QU6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:Ts()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});Ud$=Nd$});function pu($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function R71($){return(pu($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function Dd$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(pu($))}&sz=${Z}`}function Od$($,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 Ld$($){let{brand:Z,domain:X,score:Q,verdict:Y}=$,G=typeof Q==="number"?`${Z} commerce report \u2014 ${Math.round(Q)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,J=`See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,W=Y?.trim()?Od$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):Od$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as l0}from"zod";var Dv,YU6,GU6,JU6,WU6,wd$;var Ed$=D(()=>{Dv=l0.enum(["good","bad","neutral"]),YU6=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:Dv.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 $})),GU6=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(YU6)),JU6={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()},WU6=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:Dv.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:Dv.optional()}),l0.object({template:l0.literal("stats"),stats:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),tone:Dv.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:Dv.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(GU6).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:Dv.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:Dv.optional()})).min(1)})]),wd$=l0.object({...JU6,template:WU6})});function DT0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=wd$.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 I71=D(()=>{Ed$()});import{join as jd$}from"path";async function FU6($){try{let Z=await fetch(`${GK({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(KU6)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=DT0(X);if(!Q.slides.length)return null;let Y=Q.slides.find((W)=>W.template.template==="cover"),G=Y?.template,J=G&&G.template==="cover"?G:void 0;return{brand:Q.meta.brand?.trim()||R71($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function wG($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function HU6($,Z){let X=pu($),Q=Z?.brand?.trim()||R71(X),Y=Dd$(X,128),J=`${(b0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=Ld$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),F=`${J}/og.png`,H=`${Q} commerce report by decocms`;return[`<title>${wG(W)}</title>`,`<meta name="description" content="${wG(K)}" />`,'<meta name="robots" content="noindex, follow" />','<meta property="og:type" content="website" />','<meta property="og:site_name" content="decocms" />',`<meta property="og:title" content="${wG(W)}" />`,`<meta property="og:description" content="${wG(K)}" />`,`<meta property="og:url" content="${wG(J)}" />`,`<meta property="og:image" content="${wG(F)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${wG(H)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${wG(W)}" />`,`<meta name="twitter:description" content="${wG(K)}" />`,`<meta name="twitter:image" content="${wG(F)}" />`,`<meta name="twitter:image:alt" content="${wG(H)}" />`,`<link rel="canonical" href="${wG(J)}" />`,`<link rel="icon" href="${wG(Y)}" sizes="any" />`].join(`
2880
2881
  `)}function NU6($,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}
2881
2882
  </head>`)}function zd$($){let Z=new H1;return Z.get("/:domain/og.png",async(X)=>{let Q=pu(X.req.param("domain")),Y=async()=>{let G=$?Bun.file(jd$($,"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(`${GK({})}/api/v2/public/diagnostics/${encodeURIComponent(Q)}/og.png`,{signal:AbortSignal.timeout(UU6)}),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=$?jd$($,"index.html"):null,G=Y?Bun.file(Y):null;if(!G||!await G.exists())return X.notFound();let J=await G.text();try{let W=await FU6(pu(Q)),K=HU6(Q,W);return X.html(NU6(J,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return X.html(J)}}),Z}var KU6=2500,UU6=1e4;var Pd$=D(()=>{U8();I71();NE();R$()});function Ls($,Z){return fetch(`${GK({})}${$}`,Z)}async function BU6($,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 Ls(`/api/v2/public/diagnostics/${encodeURIComponent($)}${Y}`,{headers:{Accept:"application/json"}});if(G.status===404)return{status:"not_found",deck:null,scanned_at:null,drops:[]};if(!G.ok)throw Error(`report read HTTP ${G.status}`);let J=await G.json(),{deck:W,drops:K}=DT0(J);return{status:W.slides.length?"ready":"empty",deck:W,scanned_at:J.scanned_at,drops:K}}var OU6,nN,Ad$=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},Td$;var Rd$=D(()=>{U8();uY();NE();I71();OU6=new Set(["complete","errored","terminated","unknown"]),nN=new H1;nN.use("*",async($,Z)=>{let X=await s$.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});nN.use("/link-token/*",Ad$);nN.use("/suggest",Ad$);nN.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 BU6(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)}});nN.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 Ls("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${HE({})}`},body:JSON.stringify({url:Q,...Y?{email:Y}:{},distinct_id:G})});if(!J.ok)return $.json({error:`run HTTP ${J.status}`},502);let W=await J.json(),K=W.blocked?{state:"blocked"}:W.status==="fresh"?{state:"fresh"}:W.mode==="sync"?{state:"sync"}:{state:"running",id:W.id??null};return $.json(K)}catch{return $.json({error:"run failed"},502)}});nN.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let X=await Ls(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${HE({})}`}});if(!X.ok)return $.json({error:`status HTTP ${X.status}`},502);let Y=(await X.json()).status??"unknown",G={done:OU6.has(Y),status:Y};return $.json(G)}catch{return $.json({error:"status failed"},502)}});nN.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let X=await Ls(`/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)}});nN.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let X=await Ls(`/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:[]})}});Td$=nN});import{createHmac as DU6,timingSafeEqual as LU6}from"crypto";function qd$($,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)>wU6)return!1;let W=DU6("sha256",X).update(`${Y}.${$}`).digest("hex"),K=Buffer.from(W,"hex");return G.some((F)=>{let H=Buffer.from(F,"hex");return K.length===H.length&&LU6(K,H)})}function Md$($){let Z;try{Z=JSON.parse($)}catch{return null}let X=yJ(Z),Q=yJ(yJ(X?.data)?.object);if(!X||typeof X.type!=="string"||!Q)return null;return{id:TF(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 kd$($){switch($){case"active":case"trialing":return"active";case"past_due":return"past_due";default:return"canceled"}}function TF($){return typeof $==="string"?$:void 0}function yJ($){return typeof $==="object"&&$!==null?$:void 0}function LT0($){return typeof $==="number"?new Date($*1000):null}function k71($){return TF($)??TF(yJ($)?.id)}function EU6($){return k71($.subscription)??TF(yJ(yJ($.parent)?.subscription_details)?.subscription)}function jU6($){let Z=LT0($.current_period_end);if(Z)return Z;let X=yJ($.items)?.data;if(!Array.isArray(X))return null;let Q=0;for(let Y of X){let G=yJ(Y)?.current_period_end;if(typeof G==="number"&&G>Q)Q=G}return Q>0?new Date(Q*1000):null}function q71($,Z){let X=LT0($.created);return!!X&&!!Z.lastStripeEventAt&&X<Z.lastStripeEventAt}function M71($,Z){let X=LT0($.created);if(!X)return;return Z.lastStripeEventAt&&Z.lastStripeEventAt>X?void 0:X}async function zU6($,Z){let X=Z.data.object;switch(Z.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":{let Q=TF(yJ(X.metadata)?.orgId);if(!Q)return{handled:!1,reason:"no orgId"};if(TF(yJ(X.metadata)?.kind)==="topup"){if(X.mode!=="payment")return{handled:!1,reason:"topup with wrong mode"};if(TF(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let J=TF(X.id);if(!J)return console.error("stripe webhook: topup session without id",{eventId:Z.id,organizationId:Q}),{handled:!1,reason:"topup session without id"};let W=Number(yJ(X.metadata)?.creditCents);if(!Number.isInteger(W)||W<=0)return console.error("stripe webhook: paid topup with bad metadata \u2014 credit NOT applied",{eventId:Z.id,organizationId:Q,creditCents:yJ(X.metadata)?.creditCents}),{handled:!1,reason:"bad topup metadata"};return{handled:!0,organizationId:Q,topUp:{creditCents:W,referenceId:`stripe-topup:${J}`}}}if(X.mode!=="subscription")return{handled:!1,reason:"not a subscription checkout"};if(TF(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=k71(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(q71(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Q,{stripeCustomerId:k71(X.customer),stripeSubscriptionId:G,status:"active",lastStripeEventAt:M71(Z,Y)}),{handled:!0,organizationId:Q}}case"customer.subscription.updated":case"customer.subscription.deleted":{let Q=TF(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&&q71(Z,Y))return{handled:!1,reason:"stale event"};let J=G?"canceled":kd$(X.status);return await $.updateStripeState(Y.organizationId,{status:J,currentPeriodEnd:jU6(X),...G&&{stripeSubscriptionId:null},lastStripeEventAt:M71(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}case"invoice.paid":{let Q=EU6(X);if(!Q)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(Q);if(!Y)return{handled:!1,reason:"unknown subscription"};if(q71(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Y.organizationId,{status:"active",currentPeriodEnd:LT0(X.period_end),lastStripeEventAt:M71(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}default:return{handled:!1,reason:`unhandled event ${Z.type}`}}}function PU6($,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:kd$(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 Id$($,Z){let X=PU6($,Z);if(!X)return;xY({event:X.name,organizationId:X.organizationId,...$.id?{uuid:Cn1(`stripe:${$.id}:${X.name}`)}:{},...$.created?{timestamp:new Date($.created*1000)}:{},properties:X.properties})}async function Vd$($){let Z=new ZK(r8().db),X=await zU6(Z,$);if(!(X.handled&&X.topUp))Id$($,X);if(X.handled&&X.topUp)await pE$({organizationId:X.organizationId,amountCents:X.topUp.creditCents,referenceId:X.topUp.referenceId}),Id$($,X);if(!X.handled&&X.orphanSubscriptionId)try{await re1(X.orphanSubscriptionId),console.error("stripe webhook: canceled orphan subscription",{subscriptionId:X.orphanSubscriptionId,eventId:$.id})}catch(Q){if(!(Q instanceof cY&&(Q.status===400||Q.status===404)))throw Q}return X}var wU6=300;var Sd$=D(()=>{iG();S4();E50();zE();g01()});var AU6=1048576,V71;var Cd$=D(()=>{U8();wF();R$();Sd$();V71=new H1;V71.post("/webhook",n5({maxSize:AU6,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(!qd$(X,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let Y=Md$(X);if(!Y)return $.json({error:"invalid payload"},400);let G=await Vd$(Y);return console.log("stripe webhook",{eventId:Y.id,type:Y.type,livemode:Y.livemode,...G}),$.json({received:!0})})});import{timingSafeEqual as TU6}from"crypto";function IU6($,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 TU6(Buffer.from(Y),Buffer.from(Q))}var RU6=5242880,S71;var _d$=D(()=>{U8();wF();d3();S71=new H1;S71.post("/webhook",n5({maxSize:RU6,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(!IU6(X,$.req.header("x-hub-signature-256"),Z))return $.json({error:"invalid signature"},400);if($.req.header("x-github-event")!=="push")return $.json({ok:!0,ignored:"event"});let Q;try{Q=JSON.parse(X)}catch{return $.json({error:"invalid payload"},400)}let Y=Q.ref,G=Q.repository?.full_name;if(!Y||!G)return $.json({ok:!0,ignored:"shape"});let W=(await Cn0())?.markTenantPoolsDirty(G,Y)??[];return $.json({ok:!0,pools:W})})});function vd$($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var fd$,qU6,MU6,bd$;var xd$=D(()=>{U8();P3();Ug();Xy();fd$=new H1,qU6=["range","if-none-match","if-modified-since"],MU6=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];fd$.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),X=Z.organization?.id;if(!Z.auth?.user?.id){if(ju($))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 Ut(Q,Z);if(!Y)throw new Z$(503,{message:"Object storage not configured"});if(Y.startsWith("data:")&&oG()){let K=Y.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new Z$(500,{message:"Invalid data URL from storage"});let[,F,H]=K,N=Buffer.from(H,"base64"),U=new Headers({"Content-Type":F,"Cache-Control":"private, max-age=86400"});return vd$(U,F),new Response(N,{status:200,headers:U})}let G=new Headers;for(let K of qU6){let F=$.req.header(K);if(F)G.set(K,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 W=new Headers;for(let K of MU6){let F=J.headers.get(K);if(F)W.set(K,F)}return W.set("Cache-Control","private, max-age=86400"),vd$(W,W.get("content-type")??""),new Response(J.body,{status:J.status,headers:W})});bd$=fd$});var ws=_((Lv)=>{var kU6=Lv&&Lv.__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]}),VU6=Lv&&Lv.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))kU6(Z,$,X)};Object.defineProperty(Lv,"__esModule",{value:!0});VU6(PY(),Lv)});var hd$=_((yd$)=>{Object.defineProperty(yd$,"__esModule",{value:!0});yd$.version=void 0;yd$.version="3.4.0"});var ld$=_((RF)=>{var SU6=RF&&RF.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(RF,"__esModule",{value:!0});RF.NodeTransport=RF.VERSION=void 0;RF.nodeResolveHost=xU6;var s6=ws(),CU6=z0("net"),C71=z0("tls"),_U6=z0("path"),ud$=z0("fs"),vU6=SU6(z0("dns")),fU6=hd$();RF.VERSION=fU6.version;var bU6="nats.js";class cd${socket;version;lang;yields=[];signal=(0,s6.deferred)();closedNotification=(0,s6.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=bU6,this.version=RF.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,s6.checkOptions)(Y,Z);let{tls_required:G,tls_available:J}=Y,W=J===!0&&Z.tls!==null;if(!Q&&(G||W))this.socket=await this.startTLS();if(this.done)this.socket?.destroy();if(G&&this.socket.encrypted!==!0)throw s6.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 s6.errors.ConnectionError("error connecting - node provided an undefined error");let{code:J}=G,W=J==="ECONNREFUSED"?new s6.errors.ConnectionError("connection refused",{cause:G}):G;throw this.socket?.destroy(),W}}dial($){let Z=(0,s6.deferred)(),X,Q=(0,CU6.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,s6.deferred)(),Z;return this.socket.on("data",(X)=>{this.yields.push(X);let Q=s6.DataBuffer.concat(...this.yields),Y=(0,s6.extractProtocolMessage)(Q);if(Y!=="")try{let G=s6.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,s6.deferred)();try{if($=(0,_U6.resolve)($),!(0,ud$.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,ud$.readFile)($,(X,Q)=>{if(X)return Z.reject(X);Z.resolve(Q)})}catch(X){Z.reject(X)}return Z}async loadClientCerts(){let $={},{certFile:Z,cert:X,caFile:Q,ca:Y,keyFile:G,key:J}=this.options.tls;try{if(Z){let W=await this.loadFile(Z);if(W)$.cert=W}else if(X)$.cert=X;if(G){let W=await this.loadFile(G);if(W)$.key=W}else if(J)$.key=J;if(Q){let W=await this.loadFile(Q);if(W)$.ca=[W]}else if(Y)$.ca=Y;return Promise.resolve($)}catch(W){return Promise.reject(W)}}async tlsFirst($){let Z,X={servername:this.tlsName,rejectUnauthorized:!0};if(this.socket)X.socket=this.socket;if(typeof this.options.tls==="object")try{let Y=await this.loadClientCerts()||{};X=(0,s6.extend)(X,this.options.tls,Y)}catch(Y){return Promise.reject(new s6.errors.ConnectionError(Y.message,{cause:Y}))}let Q=(0,s6.deferred)();try{let Y=(0,C71.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 s6.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,s6.extend)(Z,this.options.tls,Q)}catch(Q){return Promise.reject(new s6.errors.ConnectionError(Q.message,{cause:Q}))}let X=(0,s6.deferred)();try{let Q=(0,C71.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 s6.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,s6.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,s6.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 C71.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,s6.render)($)}`);let Z=(0,s6.deferred)();try{this.socket.write($,(X)=>{if(X){if(this.options.debug)console.error(`!!! ${(0,s6.render)($)}: ${X}`);return Z.reject(X)}return Z.resolve()})}catch(X){if(this.options.debug)console.error(`!!! ${(0,s6.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}}RF.NodeTransport=cd$;function xU6($){let Z=(0,s6.deferred)();return vU6.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 nd$=_((pd$)=>{Object.defineProperty(pd$,"__esModule",{value:!0});pd$.connect=yU6;var dd$=ld$(),md$=ws(),id$=ws();function yU6($={}){if((0,id$.hasWsProtocol)($))return Promise.reject(id$.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,md$.setTransportFactory)({factory:()=>{return new dd$.NodeTransport},dnsResolveFn:dd$.nodeResolveHost}),md$.NatsConnectionImpl.connect($)}});var td$=_((tN)=>{var hU6=tN&&tN.__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]}),uU6=tN&&tN.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))hU6(Z,$,X)};Object.defineProperty(tN,"__esModule",{value:!0});tN.connect=void 0;var cU6=nd$();Object.defineProperty(tN,"connect",{enumerable:!0,get:function(){return cU6.connect}});uU6(ws(),tN)});function sd$($){let Z=$?.connectFn??iU6,X=null,Q=null,Y=!1,G=!1,J=!1,W=[];function K(){return X!==null&&!X.isClosed()&&!X.isDraining()&&!J}function F(){console.log(`[NatsProvider] fireReady: ${W.length} callbacks`);for(let U of W)try{U()}catch{}}function H(U){(async()=>{for await(let B of U.status())if(B.type==="disconnect")console.log("[NatsProvider] Disconnected"),J=!0;else if(B.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),J=!1,Q=null,F()})().catch(()=>{})}async function N(U,B){let O=0;while(!G)try{X=await Z({servers:U,timeout:mU6,reconnect:!0,maxReconnectAttempts:-1,...B?{authenticator:B}:{}}),console.log(`[NatsProvider] Connected to ${X.getServer()} after ${O} attempt(s)`),Q=null,J=!1,H(X),F();return}catch{O++;let L=sZ(dU6,lU6,O-1,2,0.5);await L$(L)}}return{init(U,B){if(Y)return;Y=!0,G=!1;let O=B?.creds?od$.credsAuthenticator(new TextEncoder().encode(B.creds)):void 0;N(U,O).catch(()=>{})},isConnected(){return K()},getConnection(){return K()?X:null},getJetStream(){if(!K())return null;if(!Q)Q=ad$.jetstream(X);return Q},onReady(U){if(W.push(U),K())try{U()}catch{}},async drain(){if(G=!0,Y=!1,Q=null,J=!1,X){let U=X;X=null,await U.drain().catch(()=>{})}}}}function iU6($){return rd$.connect($)}var od$,rd$,ad$,lU6=100,dU6=3000,mU6=3000;var ed$=D(()=>{W4();od$=V(wc(),1),rd$=V(td$(),1),ad$=V(OL(),1)});function _71($,Z){return`${$}.${Z}`}class v71{cache;constructor($){this.cache=$u({ttlMs:$?.ttlMs??pU6,maxSize:$?.maxSize??nU6})}async get($,Z){return this.cache.get(_71($,Z))??null}async set($,Z,X){this.cache.set(_71($,Z),X)}async invalidate($,Z){this.cache.delete(_71($,Z))}teardown(){this.cache.clear()}}var pU6=600000,nU6=5000;var $m$=()=>{};function wT0($,Z){return`${$}:${Z}`}function f71($){let Z=$u({ttlMs:$?.ttlMs??tU6,maxSize:$?.maxSize??oU6}),X=$?.getConnection,Q=crypto.randomUUID(),Y=new TextEncoder,G=new TextDecoder,J=null;function W(K,F){let H=X?.();if(!H)return;try{H.publish(Zm$,Y.encode(JSON.stringify({organizationId:K,keyId:F,originId:Q})))}catch(N){console.warn("[ProviderKeyCache] Publish failed (non-critical):",N)}}return{get(K,F){return Z.get(wT0(K,F))},set(K,F,H){Z.set(wT0(K,F),H)},invalidate(K,F){Z.delete(wT0(K,F)),W(K,F)},start(){if(J)return;let K=X?.();if(!K)return;J=K.subscribe(Zm$),(async()=>{for await(let F of J)try{let H=JSON.parse(G.decode(F.data));if(H.originId===Q)continue;Z.delete(wT0(H.organizationId,H.keyId))}catch{}})().catch(console.error)},teardown(){J?.unsubscribe(),J=null,Z.clear()}}}var Zm$="studio.ai-provider-keys.invalidate",tU6=30000,oU6=5000;var Xm$=()=>{};class b71{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 Qm$=($)=>{let Z;return()=>Z??=$()},x71,y71;var Ym$=D(()=>{I6();x71=Qm$(()=>w$.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),y71=Qm$(()=>w$.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function XB6($=Wm$){return{name:mK,subjects:[`${sr0}.>`],storage:DW.StorageType.File,max_age:sU6,max_bytes:$B6,max_msgs_per_subject:ZB6,discard:DW.DiscardPolicy.Old,retention:DW.RetentionPolicy.Limits,duplicate_window:eU6,num_replicas:$}}class Km${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 Gm$($){let Z=Jm$.headers();for(let[X,Q]of Object.entries($))Z.set(X,Q);return Z}function JB6($,Z){let X=0;return{publish(Q,Y,G,J){Q.publish(Y,G,J?{headers:J}:void 0).catch((W)=>{if(X++,aU6().add(1,{"org.id":Z??"unknown"}),X===1||X%100===0)console.warn(`[Decopilot] JetStream publish failed for thread ${$} (${X} total):`,W)})},get errorCount(){return X}}}function WB6($,Z){return $.info?.cluster?Z:1}function KB6($){if(!($ instanceof Error))return!1;if(/non-clustered/i.test($.message))return!0;return/replicas?\b/i.test($.message)&&/not supported|can ?not|exceed|insufficient|greater than/i.test($.message)}class g71{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=async(Q,Y)=>{let G=XB6(Y);try{await Q.streams.info(mK),await Q.streams.update(mK,G)}catch(J){if(J instanceof Error&&J.message.includes("stream not found"))await Q.streams.add(G),await Q.streams.update(mK,G);else if(J instanceof Error&&/can ?not change.*storage|storage type/i.test(J.message))await Q.streams.delete(mK),await Q.streams.add(G);else throw J}},X=await g6(async()=>{let Q=this.options.getJetStreamManager?await this.options.getJetStreamManager():await DW.jetstreamManager($),Y=WB6($,Wm$);try{await Z(Q,Y)}catch(G){if(Y<=1||!KB6(G))throw G;console.warn(`[Decopilot] StreamBuffer: NATS rejected num_replicas=${Y} (${G.message}); falling back to an unreplicated stream`),await Z(Q,1)}return Q},{maxAttempts:5,minTimeout:250,maxTimeout:4000,jitter:0.5,isRetriable:Tg});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=JB6(Z,Q),J=!1,W=()=>{if(J)return;J=!0;let F=fB$(Z);Y.publish(F.subject,F.data).catch(()=>{})};X.addEventListener("abort",W,{once:!0});let K=(F)=>{let H=performance.now(),N=$a0(F,{runId:Z}),U=performance.now()-H;x71().record(U),y71().add(1,{"org.id":Q??"unknown"}),GB6?.record(U,N.reduce((B,O)=>B+O.data.length,0));for(let B of N)G.publish(Y,B.subject,B.data,B.headers?Gm$(B.headers):void 0)};return(async()=>{let F=$.getReader(),H=0,N=0,U;try{while(!0){let{done:B,value:O}=await F.read();if(B)break;if(K(O),N++,++H>=64)H=0,await new Promise((L)=>setImmediate(L))}}catch(B){U=B,console.warn(`[Decopilot] stream pump error for thread ${Z}:`,B?.message??B)}finally{if(F.releaseLock(),W(),YB6)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 publishSerialized($,Z){try{return await g6(()=>$.publish(Z.subject,Z.data,{...Z.headers?{headers:Gm$(Z.headers)}:{},...Z.msgId?{msgID:Z.msgId}:{}}),{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:Tg}),!0}catch(X){return console.error(`[Decopilot] publish failed after retries subject=${Z.subject}`,X),!1}}async publishRawChunk($,Z,X){let Q=this.js;if(!Q)return!1;let Y=performance.now(),G=$a0(Z,{runId:$,dedup:X});x71().record(performance.now()-Y),y71().add(1);for(let J of G)if(!await this.publishSerialized(Q,J))return!1;return!0}async publishDone($,Z,X){let Q=this.js;if(!Q)return!1;let Y=vB$({runId:$,fenceToken:Z,finalSeq:X});return await this.publishSerialized(Q,Y)}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"?DW.DeliverPolicy.New:DW.DeliverPolicy.All,G=X?.closeOnDone??!1,J=GD($),W;try{W=await g6(async()=>{return(await Q.consumers.get(mK,{filter_subjects:J,deliver_policy:Y})).consume()},{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:Tg})}catch(L){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",L?.message??L),null}let H=aL0({messages:async function*(){try{for await(let L of W)yield{subject:L.subject,data:L.data,headers:L.headers}}finally{W.stop()}}(),onCancel:()=>W.stop()}).pipeThrough(nL0()).pipeThrough(tL0()).getReader(),N=!1,U=()=>{if(N)return;N=!0;try{H.releaseLock()}catch{}},B=!1,O=()=>{if(B)return;B=!0,W.stop(),H.cancel().catch(()=>{}),U()};return Z?.addEventListener("abort",O,{once:!0}),new ReadableStream({async pull(L){for(;;){let{done:w,value:E}=await H.read();if(w){O(),L.close();return}let j=E;if(j.kind==="done"){if(G){O(),L.close();return}continue}L.enqueue(j.chunk);return}},cancel(){O()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge(mK,{filter:GD($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var DW,Jm$,rU6=($)=>{let Z;return()=>Z??=$()},aU6,sU6=86400000000000,eU6=120000000000,$B6=4294967296,Wm$,ZB6=500000,QB6,YB6,GB6;var Fm$=D(()=>{W4();Za0();sL0();oL0();I6();Ym$();DW=V(OL(),1),Jm$=V(wc(),1),aU6=rU6(()=>w$.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"})),Wm$=Math.max(1,Number(process.env.DECOPILOT_STREAM_REPLICAS??3)||3);QB6=process.env.STREAM_ENCODE_TRACE==="1",YB6=process.env.DECOPILOT_STREAM_TRACE==="1";GB6=QB6?new Km$:null});function ET0($,Z,X,Q){if(!Q)return!1;return $.emit(Z,gW(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 Hm$=D(()=>{_8()});class h71{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 Nm$($,Z,X){let Q=Z.organizationId;if(!aQ(Z))return!1;if(!vC(X))return!1;if(await $.storage.taskBoard.hasHumanRejectedDone(Z.id,Q))return!1;let Y=await $.storage.organizationSettings.get(Q),G=DK(Y?.flags),J=await E5($,Q),W=await $.storage.taskBoard.update(Z.id,Q,KJ(J,G),Z.updatedBy);return await z6($,{taskBoardItemId:Z.id,action:"status_changed",actorId:null,data:{from:Z.status,to:G,reason:"pr_merged"}}),b$(Q,W),console.log(`[task-board-review-sweeper] ${Z.id}: linked PR already merged \u2014 moved to ${G}`),!0}var Um$=D(()=>{C6();KX();Fg();aY();bK();j5()});function DB6($){return $ instanceof tX}function LB6($,Z){return Z-$>=BB6}class u71{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??FB6;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??NB6,X=this.options.itemIntervalMs??HB6,Q=new Date(Date.now()-X),Y=await this.taskBoard.listItemsPendingReview(Z,this.cursor,Q),G=Y.at(-1);this.cursor=Y.length===Z&&G?{updatedAt:G.updatedAt,id:G.id}:null;for(let{id:J,organizationId:W}of Y)try{if(await this.reconcileItem(J,W,Q))$++}catch(K){console.error(`[task-board-review-sweeper] ${J} failed`,K)}await this.reapNeverStartedThreads(Z),$+=await this.dispatchDueRetries(Z),await this.reactToUnhandledFailures(Z)}catch(Z){console.error("[task-board-review-sweeper] sweep failed",Z)}finally{this.running=!1}return $}async reapNeverStartedThreads($){try{let Z=await this.taskBoard.failNeverStartedLinkedThreads($,new Date(Date.now()-jt0),wo0);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()-OB6));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 Oo0(this.taskBoard,Y,Q),await Do0(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!==X8)continue;let W=await this.contextFactory(Y,J.assignedBy??J.createdBy);if(!W)continue;await FN(W,J,{runClass:"retry"}),Z++,console.warn(`[task-board-review-sweeper] re-dispatched ${Q} after a failure (attempt ${G})`)}catch(J){if(console.error(`[task-board-review-sweeper] retry dispatch for ${Q} failed`,J),DB6(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()+UB6)).catch((W)=>console.error(`[task-board-review-sweeper] re-arming ${Q} failed`,W))}return Z}async returnToTodo($,Z,X){try{let Q=await this.taskBoard.getById($,Z);if(!Q||Q.status!=="in_progress")return;let Y=await this.taskBoard.returnToTodoAfterFailure($,Z,Q.updatedBy);if(!Y)return;await this.taskBoard.recordActivity({taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:"in_progress",to:"todo",reason:X}}).catch(()=>{}),b$(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(!LB6(fH(X,Z.reviewCycleStartedAt),Date.now()))return;await gK($,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(!aQ(Q))return!1;let Y=Q.assigneeId===X8,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 W=await Promise.all(G.map(async(K)=>({...K,...await Ng(Z,K)})));if(W.every((K)=>K.state===null))console.warn(`[task-board-review-sweeper] ${$}: no live PR state from GitHub (${W.length} PR(s)) \u2014 proceeding on unknown`);if(await Nm$(J,Q,W))return!0;if(await TO$(J,Q))return!0;if(!Y)return!1;if(!yo0(W))return!1;return await FL0(J,Q,{previewMatchesHead:go0(W)}),!0}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}var FB6=60000,HB6=300000,NB6=50,UB6=60000,BB6=900000,OB6=120000;var Bm$=D(()=>{C6();ko0();WN();vt();bK();Um$();j5();eG();Eo0();XG();Kt()});import{readdir as wB6,rm as jT0}from"fs/promises";import{join as zT0}from"path";async function PT0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-EB6),Z.setUTCHours(0,0,0,0);let X=0;try{let Q=await wv($);for(let Y of Q)if(/^\d{4}$/.test(Y))X+=await Om$($,Y,Z);else if(!Y.startsWith(".")){let G=zT0($,Y),J=await wv(G);for(let K of J){if(!/^\d{4}$/.test(K))continue;X+=await Om$(G,K,Z)}if((await wv(G)).length===0)await jT0(G,{recursive:!0,force:!0})}}catch(Q){console.warn("monitoring retention cleanup failed:",Q)}return X}async function Om$($,Z,X){let Q=0,Y=zT0($,Z),G=await wv(Y);for(let W of G){if(!/^\d{2}$/.test(W))continue;let K=zT0(Y,W),F=await wv(K);for(let N of F){if(!/^\d{2}$/.test(N))continue;let U=new Date(`${Z}-${W}-${N}T00:00:00Z`);if(isNaN(U.getTime()))continue;if(U<X){let B=zT0(K,N);await jT0(B,{recursive:!0,force:!0}),Q++}}if((await wv(K)).length===0)await jT0(K,{recursive:!0,force:!0})}if((await wv(Y)).length===0)await jT0(Y,{recursive:!0,force:!0});return Q}async function wv($){try{return(await wB6($)).filter((X)=>!X.startsWith("."))}catch{return[]}}var EB6=30;var c71=()=>{};import{DBOS as l71,SchedulerMode as jB6}from"@dbos-inc/dbos-sdk";async function PB6(){let $=[hJ(),Ev(),kF()],Z=0;for(let X of $)try{Z+=await PT0(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 AB6($,Z){await l71.runStep(()=>PB6(),{name:"monitoringRetention"})}function Lm$(){if(Dm$)return;Dm$=!0;let $=l71.registerWorkflow(AB6,{name:"monitoringRetentionWorkflow"});l71.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:zB6,mode:jB6.ExactlyOncePerIntervalWhenActive})}var zB6="23 4 * * *",Dm$=!1;var wm$=D(()=>{wY();c71()});function Em$($){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 UJ.create();Y.auth.user={id:X,role:Q.role},Y.organization={id:Q.orgId,slug:Q.orgSlug,name:Q.orgName};let G=await Lt($.db,Z,Q.role);return Y.boundAuth=l51({auth:Y.authInstance,headers:new Headers,role:Q.role,permissions:G,userId:X}),Y.access=new tw(X,void 0,Y.boundAuth,Q.role,"self"),oO(Y,{id:Q.orgId,slug:Q.orgSlug}),Y}}var jm$=D(()=>{ow();rO()});function TB6(){return[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}]}function RB6(){return{services:TB6(),migrationsStatus:"pending",serverUrl:null,logs:[]}}function qB6(){for(let $ of IB6)$()}function zm$($){let Z=[...d71.logs,$];d71={...d71,logs:Z.length>500?Z.slice(-500):Z},qB6()}function m71(){return MB6}var d71,IB6,MB6=!1;var i71=D(()=>{d71=RB6(),IB6=new Set});import{EventEmitter as kB6}from"events";var p71;var Pm$=D(()=>{i71();p71=new kB6;p71.on("request",($)=>{zm$($)})});function Am$(){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 B=nu(U.params.name),O=U.params.arguments||{},L=Object.keys(O).map((E)=>nu(E)),w=L.length>0?L.slice(0,3).join(",")+(L.length>3?"\u2026":""):"";G=`${J5.tool}${B}${J5.dim}(${w})${J5.reset}`}else if(U.method)G=`${J5.dim}${nu(U.method)}${J5.reset}`}}catch{}}let W=nu(Y);if(Y.startsWith("/mcp/conn_")){let H=Y.split("/")[2]??"";W=`/mcp/${J5.mcp}${nu(H.slice(0,12))}\u2026${J5.reset}`}else if(Y==="/mcp")W=`${J5.mcp}/mcp${J5.reset}`;else if(Y==="/mcp/registry")W=`${J5.mcp}/mcp/registry${J5.reset}`;let K=SB6(Q),F=J?"\u25C0":"\u2190";if(!m71())console.log(`${J5.dim}${F}${J5.reset} ${K}${Q}${J5.reset} ${W}${G?` ${G}`:""}`);try{await Z()}finally{let H=Date.now()-X,N=$.res.status,U=VB6(N),B=H<1000?`${H}ms`:`${(H/1000).toFixed(1)}s`,O=J?"\u25B6":"\u2192";if(!m71())console.log(`${J5.dim}${O}${J5.reset} ${K}${Q}${J5.reset} ${W}${G?` ${G}`:""} ${U}${N}${J5.reset} ${J5.duration}${B}${J5.reset}`);p71.emit("request",{method:Q,path:nu(Y),status:N,duration:H,timestamp:new Date})}}}var J5,VB6=($)=>{if($>=500)return J5.serverError;if($>=400)return J5.clientError;if($>=300)return J5.redirect;return J5.ok},SB6=($)=>{return J5[$]||J5.reset},nu=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var Tm$=D(()=>{i71();Pm$();J5={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 Mm$}from"crypto";import{mkdir as CB6,readdir as _B6,rm as Rm$,stat as km$}from"fs/promises";import{join as t71,relative as vB6}from"path";import{z as P$}from"zod";function Sm$($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return t71(fB6,Z)}function Cm$($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function n71($,Z){let X=Sm$($),Q=Cm$(Z);return t71(X,Q)}function bB6($,Z,X,Q){let Y=b0().encryptionKey||"dev-secret",G=`${$}:${Z}:${X}:${Q}`;return Mm$("sha256",Y).update(G).digest("hex")}function qm$($,Z,X,Q,Y){let G=Math.floor(Date.now()/1000)+Q,J=bB6(Z,X,G,Y),W=new URL(`/api/dev-assets/${Z}/${Cm$(X)}`,$);return W.searchParams.set("expires",G.toString()),W.searchParams.set("signature",J),W.searchParams.set("method",Y),W.toString()}function _m$($,Z,X){let Q=`${$}:${Z.getTime()}:${X}`;return`"${Mm$("md5","etag").update(Q).digest("hex")}"`}async function vm$($,Z,X,Q,Y){try{let G=await _B6($,{withFileTypes:!0});for(let J of G){let W=t71($,J.name),F=vB6(Z,W).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 vm$(W,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 km$(W);Y.objects.push({key:F,size:H.size,lastModified:H.mtime.toISOString(),etag:_m$(W,H.mtime,H.size)})}catch{}}}}catch{}}function fm$($,Z){let Q=o($).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||"",W=G.maxKeys??1000,K=G.delimiter,F=G.continuationToken,H=Sm$(Q);await CB6(H,{recursive:!0});let N={objects:[],commonPrefixes:new Set};await vm$(H,H,J,K,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 B=N.objects.slice(U,U+W),O=U+W<N.objects.length,L=O?B[B.length-1]?.key:void 0;return{objects:B,isTruncated:O,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=n71(Q,G.key),W=await km$(J);return{contentType:k91(G.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:_m$(J,W.mtime,W.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??Im$;return{url:qm$(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??Im$;return{url:qm$(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=n71(Q,G.key);try{return await Rm$(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=[],W=[];return await Promise.all(G.keys.map(async(K)=>{let F=n71(Q,K);try{await Rm$(F),J.push(K)}catch(H){W.push({key:K,message:H instanceof Error?H.message:"Unknown error"})}})),{deleted:J,errors:W}}}]}async function o71($,Z,X){let Q=fm$(Z,X),Y=new iW({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:N5});for(let J of Q){let W="shape"in J.inputSchema?J.inputSchema.shape:P$.object({}).shape,K=J.outputSchema&&"shape"in J.outputSchema?J.outputSchema.shape:P$.object({}).shape;Y.registerTool(J.name,{description:J.description??"",inputSchema:W,outputSchema:K,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),PJ(Y,G,$,"mcp:dev-assets")}async function bm$($,Z,X,Q){let G=fm$(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 fB6="./data/assets",Im$=3600,Vm$,xm$;var ym$=D(()=>{R$();Sg();U8();ud();Z_();hX();wA0();Vm$=new H1;Vm$.all("/",async($)=>{let Z=$.get("studioContext"),X=new URL($.req.url),Q=`${X.protocol}//${X.host}`;return o71($.req.raw,Z,Q)});xm$=Vm$});var gm$={};J4(gm$,{mountDevRoutes:()=>xB6});function xB6($,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 o71(Q.req.raw,Y,J)}),$.all("/mcp/:connectionId{.*_dev-assets$}/call-tool/:toolName",Z,async(Q)=>{let Y=Q.get("studioContext"),G=new URL(Q.req.url),J=`${G.protocol}//${G.host}`,W=Q.req.param("toolName");if(!W)return Q.json({error:"Missing tool name"},400);let K=await Q.req.json(),F=await bm$(W,K,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",xm$);let X=new H1;X.use("*",BW({mountPath:"/api/dev-assets"})),X.route("/",LA0({orgFromPath:!1})),$.route("/api/dev-assets",X)}var hm$=D(()=>{U8();P91();wA0();ym$()});import{sql as yB6}from"kysely";import{randomUUID as um$}from"crypto";import{z as gB6}from"zod";async function uB6($){let Z=new Date().toISOString(),X=um$(),Q=C8.SELF($.organizationId),Y="registry.publish_request.created",G={requestId:$.request.id,requestedId:$.request.requested_id,title:$.request.title,status:$.request.status,createdAt:$.request.created_at,requester:{name:$.request.requester_name,email:$.request.requester_email}};await $.db.insertInto("events").values({id:X,organization_id:$.organizationId,type:"registry.publish_request.created",source:Q,specversion:"1.0",subject:$.request.id,time:Z,datacontenttype:"application/json",dataschema:null,data:JSON.stringify(G),cron:null,status:"pending",attempts:0,last_error:null,next_retry_at:null,created_at:Z,updated_at:Z}).execute();let J=await $.db.selectFrom("event_subscriptions").select(["id"]).where("organization_id","=",$.organizationId).where("enabled","=",1).where("event_type","=","registry.publish_request.created").where((W)=>W.or([W("publisher","is",null),W("publisher","=",Q)])).execute();if(J.length>0)await $.db.insertInto("event_deliveries").values(J.map((W)=>({id:um$(),event_id:X,subscription_id:W.id,status:"pending",attempts:0,last_error:null,delivered_at:null,next_retry_at:null,created_at:Z}))).execute();try{await yB6`SELECT
2882
2883
  pg_notify('studio_events', ${X}),