decocms 3.18.8 → 3.18.9

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-CEjUR4ma.js → AlertCircle-BHVtmqg5.js} +1 -1
  2. package/dist/client/assets/{ArrowUpRight-uT8JCIJs.js → ArrowUpRight-BjNBbpmV.js} +1 -1
  3. package/dist/client/assets/{Check-ue2KWgWJ.js → Check-B0P5hodH.js} +1 -1
  4. package/dist/client/assets/{CheckCircle-Df84AR9T.js → CheckCircle-Bdqev0nO.js} +1 -1
  5. package/dist/client/assets/{ChevronDown-BVZtjVJY.js → ChevronDown-BLvS4ToG.js} +1 -1
  6. package/dist/client/assets/{ChevronLeft-BEr47RT8.js → ChevronLeft-DkNaQH3V.js} +1 -1
  7. package/dist/client/assets/{ChevronRight-ujoE2UV4.js → ChevronRight-4ehX8OPq.js} +1 -1
  8. package/dist/client/assets/{ChevronUp-OiyEMSaq.js → ChevronUp-BPS-J5rQ.js} +1 -1
  9. package/dist/client/assets/{Container-CaubKIrE.js → Container-BgS7rK8J.js} +1 -1
  10. package/dist/client/assets/{DotsVertical-D_SVgGJh.js → DotsVertical-J6xX8bRK.js} +1 -1
  11. package/dist/client/assets/{Eye-DkhRhMug.js → Eye-B4txmFQS.js} +1 -1
  12. package/dist/client/assets/{FilterLines-B8a9imyL.js → FilterLines-BTMjQgiq.js} +1 -1
  13. package/dist/client/assets/{Globe01-633RJxT_.js → Globe01-xi-0s299.js} +1 -1
  14. package/dist/client/assets/{HardDrive-CZ5s_-mg.js → HardDrive-Cw5wbzfr.js} +1 -1
  15. package/dist/client/assets/{Key01-CDeLFobi.js → Key01-CIFx1b27.js} +1 -1
  16. package/dist/client/assets/{LayoutLeft-4RVUmS78.js → LayoutLeft-DoTZR2dr.js} +1 -1
  17. package/dist/client/assets/{LinkExternal01-BzkLuA4g.js → LinkExternal01-BUo_Z2Ai.js} +1 -1
  18. package/dist/client/assets/{Monitor01-B88WY9Iw.js → Monitor01-CU2IldL2.js} +1 -1
  19. package/dist/client/assets/{Palette-Bb6hf4rf.js → Palette-C1x3Xgx8.js} +1 -1
  20. package/dist/client/assets/{Play-BLU1qgQg.js → Play-cC3e0aRw.js} +1 -1
  21. package/dist/client/assets/{Plus-3hleEabH.js → Plus-C-omi-dN.js} +1 -1
  22. package/dist/client/assets/{RefreshCcw01-BKnMn9th.js → RefreshCcw01-BRsF38y3.js} +1 -1
  23. package/dist/client/assets/{SearchMd-C3Y3mLEO.js → SearchMd-B0_Yf3yk.js} +1 -1
  24. package/dist/client/assets/{Settings02-u9JAPlgK.js → Settings02-BAzPyCQK.js} +1 -1
  25. package/dist/client/assets/{Shield01-C6EForQ7.js → Shield01-D-Ka40fc.js} +1 -1
  26. package/dist/client/assets/{Star01-6IK5vWKT.js → Star01-BTZ2441m.js} +1 -1
  27. package/dist/client/assets/{Stars01-Bjw9UO9d.js → Stars01-BvMjy7DM.js} +1 -1
  28. package/dist/client/assets/{Stars02-0fXTHbN5.js → Stars02-D5yjx9l2.js} +1 -1
  29. package/dist/client/assets/{Sun-CnvIG-j_.js → Sun-CU5c1BQU.js} +1 -1
  30. package/dist/client/assets/{SwitchHorizontal01-DRwxpGUn.js → SwitchHorizontal01-CI__ZFHo.js} +1 -1
  31. package/dist/client/assets/{Tool01-CB_-beME.js → Tool01-jh5OdcD_.js} +1 -1
  32. package/dist/client/assets/{Trash01-BJy-vGUY.js → Trash01-CY-IoFVl.js} +1 -1
  33. package/dist/client/assets/{Upload01-KqpVjI3s.js → Upload01-Dws98jTe.js} +1 -1
  34. package/dist/client/assets/{User01-BpmsHyRl.js → User01-CsfdlOo_.js} +1 -1
  35. package/dist/client/assets/{Users01-YZ2cXgHg.js → Users01-KgnDENeu.js} +1 -1
  36. package/dist/client/assets/{Users03-CxmtbRIo.js → Users03-B1-zgOdp.js} +1 -1
  37. package/dist/client/assets/{X-CN6_h3Qw.js → X-wAJMKsDG.js} +1 -1
  38. package/dist/client/assets/{XCircle-CJjS_Uo7.js → XCircle-C5XzBzrQ.js} +1 -1
  39. package/dist/client/assets/{XClose-Bq9zB2Rx.js → XClose-Wh4jKrco.js} +1 -1
  40. package/dist/client/assets/{Zap-DUwgtpoY.js → Zap-Cd9ypkMC.js} +1 -1
  41. package/dist/client/assets/{ZapSquare-DiwhXiB0.js → ZapSquare-BdJ-x7Vi.js} +1 -1
  42. package/dist/client/assets/{ZoomOut-uTNlQ9-Z.js → ZoomOut-DnPCWp9x.js} +1 -1
  43. package/dist/client/assets/{access-gate-ywabkFHK.js → access-gate-CNsIQ_vY.js} +1 -1
  44. package/dist/client/assets/{accordion-DRUVOrVO.js → accordion-CCq9lsEc.js} +1 -1
  45. package/dist/client/assets/{add-section-modal-DF4GaxjG.js → add-section-modal-DRe-XbIV.js} +1 -1
  46. package/dist/client/assets/agent-capabilities-Dk3tx7gd.js +3 -0
  47. package/dist/client/assets/{agent-icon-C7sEhkqy.js → agent-icon-Dr1bpYZ_.js} +1 -1
  48. package/dist/client/assets/{agent-icons-CCCuKTPg.js → agent-icons-CzC15bIN.js} +1 -1
  49. package/dist/client/assets/{agents-list-fCzIFEzp.js → agents-list-DWy0GtDE.js} +1 -1
  50. package/dist/client/assets/{ai-providers-Ctfzz9FP.js → ai-providers-BmFmfBdt.js} +1 -1
  51. package/dist/client/assets/{alert-DRIlVPTa.js → alert-BYbunVHe.js} +1 -1
  52. package/dist/client/assets/{alert-dialog-05vuxBW-.js → alert-dialog-B_G3fFis.js} +1 -1
  53. package/dist/client/assets/app-editor-eVQHoVzV.js +1 -0
  54. package/dist/client/assets/{auth-catchall-y-zNLQtU.js → auth-catchall-DbEVklo6.js} +1 -1
  55. package/dist/client/assets/{auth-split-layout-BKVr4qiG.js → auth-split-layout-DuWIkei5.js} +1 -1
  56. package/dist/client/assets/{automation-list-row-DaxhoGhH.js → automation-list-row-Ca7Xhucl.js} +1 -1
  57. package/dist/client/assets/{automation-runs-DTTRWfsD.js → automation-runs-hyU42Y3D.js} +1 -1
  58. package/dist/client/assets/{automations-CLHblXAJ.js → automations-2cAsHwG9.js} +1 -1
  59. package/dist/client/assets/{avatar-UPASX_UE.js → avatar-DhzY0Eh2.js} +1 -1
  60. package/dist/client/assets/{badge-BMuzCes_.js → badge-bZNUWBV_.js} +1 -1
  61. package/dist/client/assets/{brand-context-zmE2IoGe.js → brand-context-D0vg5dZK.js} +1 -1
  62. package/dist/client/assets/{buckets-CAGbnlcp.js → buckets-DBovtxB9.js} +1 -1
  63. package/dist/client/assets/{calendar-BboUBemn.js → calendar-BLg-8LXk.js} +1 -1
  64. package/dist/client/assets/{capability-load-error-fYP5ZRRQ.js → capability-load-error-DBKsDtKJ.js} +1 -1
  65. package/dist/client/assets/{card-D-E4pj4Q.js → card-BDlh34z0.js} +1 -1
  66. package/dist/client/assets/{chat-context-C__4UOUU.js → chat-context-n64-vv_1.js} +1 -1
  67. package/dist/client/assets/{checkbox-BowaqmGc.js → checkbox-X6v3rKHo.js} +1 -1
  68. package/dist/client/assets/{cli-auth-success-4yFoRjEw.js → cli-auth-success-CQVq7_y_.js} +1 -1
  69. package/dist/client/assets/{collection-detail-Hnnv5RFG.js → collection-detail-C5P4CU7T.js} +1 -1
  70. package/dist/client/assets/{collection-display-button-DVoVt_QE.js → collection-display-button-BV3ToLFg.js} +1 -1
  71. package/dist/client/assets/{collection-search-C_o__TJL.js → collection-search-B7dmZ18T.js} +1 -1
  72. package/dist/client/assets/{collection-table-wrapper-BtXPNkm5.js → collection-table-wrapper-B0Cp6x2U.js} +1 -1
  73. package/dist/client/assets/{collection-tabs-BzQOcXsw.js → collection-tabs-IXoyjsqg.js} +1 -1
  74. package/dist/client/assets/{collections-Dl-QJ4h-.js → collections-Ca9cgdYF.js} +1 -1
  75. package/dist/client/assets/{command-7iumxWDA.js → command-eM0_ztLa.js} +1 -1
  76. package/dist/client/assets/{connect-desktop-dialog-D8fATkZL.js → connect-desktop-dialog-BnrR7FIp.js} +1 -1
  77. package/dist/client/assets/{connection-card-Di3rJz5O.js → connection-card-BNhxgt1r.js} +1 -1
  78. package/dist/client/assets/{connection-detail-CuYkU5_j.js → connection-detail-BfklQCKA.js} +1 -1
  79. package/dist/client/assets/{connection-form-helpers-CseaFBQ4.js → connection-form-helpers-E666kWj7.js} +1 -1
  80. package/dist/client/assets/{connections-C4UeseRl.js → connections-Bayyg13Q.js} +1 -1
  81. package/dist/client/assets/{constants-BwASqV3o.js → constants-CNZvm1cO.js} +1 -1
  82. package/dist/client/assets/{decopilot-sse-pool-KTigFmmV.js → decopilot-sse-pool-BbXhLnto.js} +1 -1
  83. package/dist/client/assets/{dialog-tMBQk8ZQ.js → dialog-B25EnfSZ.js} +1 -1
  84. package/dist/client/assets/{domain-settings-Cf9H7T-u.js → domain-settings-DeaBF1NN.js} +1 -1
  85. package/dist/client/assets/{drawer-BpXrHY4O.js → drawer-fSMBE52Q.js} +1 -1
  86. package/dist/client/assets/{dropdown-menu-CbEkLV1V.js → dropdown-menu-CqB2EneR.js} +1 -1
  87. package/dist/client/assets/{dynamic-plugin-layout-3UM11YBS.js → dynamic-plugin-layout-Hd9w0NQy.js} +1 -1
  88. package/dist/client/assets/{empty-state-BO24t3v_.js → empty-state-BZ5IbUpC.js} +1 -1
  89. package/dist/client/assets/{empty-state-B1zyKCjz.js → empty-state-ntjfA1V-.js} +1 -1
  90. package/dist/client/assets/{extract-connection-data-MFgoHej-.js → extract-connection-data-DtUMTD6M.js} +1 -1
  91. package/dist/client/assets/{features-B3jKlzdd.js → features-Do_DYvUG.js} +1 -1
  92. package/dist/client/assets/{file-explorer-DNPCQ0QL.js → file-explorer-CzHWiTKa.js} +1 -1
  93. package/dist/client/assets/{file-type-icon-Bc5TOpv6.js → file-type-icon-vEyv3GKo.js} +1 -1
  94. package/dist/client/assets/{files-AvcoPOSC.js → files-CqHDF15j.js} +1 -1
  95. package/dist/client/assets/{form-DfPEVJTD.js → form-Ck7oM85d.js} +1 -1
  96. package/dist/client/assets/{general-B-NiadKd.js → general-CiySELJl.js} +1 -1
  97. package/dist/client/assets/{generate-id-Clgx4NVq.js → generate-id-DFeI4rCP.js} +1 -1
  98. package/dist/client/assets/{github-repo-picker-htEMjZoZ.js → github-repo-picker-C8SuJIC3.js} +1 -1
  99. package/dist/client/assets/{header-tab-button-BSwyVhW5.js → header-tab-button-ByTfW4d9.js} +1 -1
  100. package/dist/client/assets/{hover-card-2-51SEXp.js → hover-card-Bs_VQXY_.js} +1 -1
  101. package/dist/client/assets/{image-field-nWZcKEH-.js → image-field-DsGhzGiD.js} +1 -1
  102. package/dist/client/assets/{index-8u18oRGg.js → index-B6C3Resz.js} +1 -1
  103. package/dist/client/assets/{index-CR4WWquJ.js → index-B7tMIGCq.js} +3 -3
  104. package/dist/client/assets/{index-Cx15R5eR.js → index-B9ljcRCy.js} +1 -1
  105. package/dist/client/assets/{index-mlAHnhfZ.js → index-BHIyMqy_.js} +1 -1
  106. package/dist/client/assets/{index-C96L2NKT.js → index-BNuieAvN.js} +1 -1
  107. package/dist/client/assets/{index-CG1T2pxn.js → index-BaZaX52j.js} +1 -1
  108. package/dist/client/assets/{index-DpCqt8sL.js → index-BicGKvEo.js} +4 -4
  109. package/dist/client/assets/{index-B7Oaq-RZ.js → index-BraUXQtj.js} +1 -1
  110. package/dist/client/assets/{index-D8bRG89r.js → index-CCsVvAb0.js} +1 -1
  111. package/dist/client/assets/{index-CCfeFYV7.js → index-CF0CDpUh.js} +1 -1
  112. package/dist/client/assets/{index-T0EnlyFn.js → index-DFwf5_Tj.js} +1 -1
  113. package/dist/client/assets/{index-pI38WS1y.js → index-DJZidEIe.js} +1 -1
  114. package/dist/client/assets/{index-DE7HYgXQ.js → index-DjvTsn28.js} +1 -1
  115. package/dist/client/assets/{index-CTrdUbeV.js → index-DllrVy9q.js} +1 -1
  116. package/dist/client/assets/{index-3AF5lDLi.js → index-IIM93U8v.js} +1 -1
  117. package/dist/client/assets/{index-redirect-Cwo593S2.js → index-redirect-DwG4UFJN.js} +1 -1
  118. package/dist/client/assets/{infiniteQueryObserver-t6Hi_iG4.js → infiniteQueryObserver-GqeTL4E_.js} +1 -1
  119. package/dist/client/assets/{input-CxHC3x-C.js → input-DwlCJ28N.js} +1 -1
  120. package/dist/client/assets/{integration-icon-DucQ1W5m.js → integration-icon-BI887rQg.js} +1 -1
  121. package/dist/client/assets/{label-Bf55THi9.js → label-Cp7h2a1f.js} +1 -1
  122. package/dist/client/assets/{layout-2VN2W-NR.js → layout-CHqfnKZ0.js} +1 -1
  123. package/dist/client/assets/{login-DSl4fRSa.js → login-CxERd25A.js} +1 -1
  124. package/dist/client/assets/{members-DZfsDziN.js → members-BIU1EAnp.js} +1 -1
  125. package/dist/client/assets/{monaco-editor-DIa_WLht.js → monaco-editor-4zJKgWND.js} +1 -1
  126. package/dist/client/assets/{monitoring-stats-row-Snbqz0zD.js → monitoring-stats-row-Ckcrs5bU.js} +1 -1
  127. package/dist/client/assets/{oauth-callback-BY98PKae.js → oauth-callback-C1wSOpSi.js} +1 -1
  128. package/dist/client/assets/{oauth-callback-ai-provider-Dd2FijSC.js → oauth-callback-ai-provider-CIslKnkJ.js} +1 -1
  129. package/dist/client/assets/{onboarding-Bw2VLGbm.js → onboarding-DzOFbPHY.js} +1 -1
  130. package/dist/client/assets/{org-install-CGKkBZWa.js → org-install-DkWUqjZM.js} +1 -1
  131. package/dist/client/assets/{org-layout-B1dhdiyk.js → org-layout-D9qKjB7L.js} +1 -1
  132. package/dist/client/assets/{org-plugin-layout-D_B8r2WM.js → org-plugin-layout-CQA5014y.js} +1 -1
  133. package/dist/client/assets/{page-seo-form-9YbOybhS.js → page-seo-form-CCHdZJVC.js} +1 -1
  134. package/dist/client/assets/page-seo-sheet-muZrfYn9.js +1 -0
  135. package/dist/client/assets/{pair-VPgfw_dR.js → pair-DbyXobZ6.js} +1 -1
  136. package/dist/client/assets/{plugin-empty-state-BbDVh2Q3.js → plugin-empty-state-ClBAOxte.js} +1 -1
  137. package/dist/client/assets/{plugin-header-D0xXFHIE.js → plugin-header-0fc0DfDo.js} +1 -1
  138. package/dist/client/assets/{plugin-layout-C7-ysT8S.js → plugin-layout-CQ-ZS4on.js} +1 -1
  139. package/dist/client/assets/{popover-DbAqn4v_.js → popover-BpkFIRrC.js} +1 -1
  140. package/dist/client/assets/{post-editor-DOqkC-Vd.js → post-editor-B4qR5gjS.js} +1 -1
  141. package/dist/client/assets/{primitives-BRI9kffp.js → primitives-C0xseebZ.js} +1 -1
  142. package/dist/client/assets/{profile-D7KLPqHP.js → profile-j_YIrPxD.js} +1 -1
  143. package/dist/client/assets/project-app-view-BIOfOBLG.js +1 -0
  144. package/dist/client/assets/record-editor-DF21NWvv.js +1 -0
  145. package/dist/client/assets/registry-BiWmGi9J.js +2 -0
  146. package/dist/client/assets/{registry-layout-D5jxDFyv.js → registry-layout-DVn6I6vz.js} +1 -1
  147. package/dist/client/assets/{require-capability-DXhKEWoR.js → require-capability-DfrpjX-u.js} +1 -1
  148. package/dist/client/assets/{required-auth-layout-DYdo_YVd.js → required-auth-layout-D-bn_J69.js} +1 -1
  149. package/dist/client/assets/{reset-password-CLZZfW7x.js → reset-password-CiNms6Sr.js} +1 -1
  150. package/dist/client/assets/{resizable-CWjPzzv5.js → resizable-v_bPD4vg.js} +1 -1
  151. package/dist/client/assets/{roles-YjoBz0aH.js → roles-A-J3RPs5.js} +1 -1
  152. package/dist/client/assets/{save-status-cMbN8LPM.js → save-status-caXPf-sW.js} +1 -1
  153. package/dist/client/assets/{schema-form-BxDlImtE.js → schema-form-OP25FipI.js} +1 -1
  154. package/dist/client/assets/{scroll-area-aBuzu5yV.js → scroll-area-DfF1DGTO.js} +1 -1
  155. package/dist/client/assets/{search-input-DLnPRfQp.js → search-input-D2vapx7T.js} +1 -1
  156. package/dist/client/assets/{secrets-BJaOwGjW.js → secrets-D9MKTymT.js} +1 -1
  157. package/dist/client/assets/{sections-editor-BePjOXsy.js → sections-editor-7GVJxDWw.js} +1 -1
  158. package/dist/client/assets/{select-nhrqzBAK.js → select-D6NiWcOv.js} +1 -1
  159. package/dist/client/assets/{select-model-De_ScBz5.js → select-model-TEFtvtVK.js} +1 -1
  160. package/dist/client/assets/{seo-editor-DN4MvkY2.js → seo-editor-CxuXRBUg.js} +1 -1
  161. package/dist/client/assets/{settings-layout-wJQfRs1C.js → settings-layout-q8E9c9E2.js} +1 -1
  162. package/dist/client/assets/{settings-section-DSFvAhyf.js → settings-section-BhG1oXRm.js} +1 -1
  163. package/dist/client/assets/{sheet-CuBrIJtg.js → sheet-CA-bu41g.js} +1 -1
  164. package/dist/client/assets/{shell-controls-q-XCzzlI.js → shell-controls-_xZFFXXO.js} +1 -1
  165. package/dist/client/assets/{shell-layout-BzFvzE6D.js → shell-layout-BJmtvdOF.js} +1 -1
  166. package/dist/client/assets/{shell-route-loading-WLTOuT1-.js → shell-route-loading-kYHtFyzE.js} +1 -1
  167. package/dist/client/assets/{sidebar-BEIQqG7v.js → sidebar-MAITYPYL.js} +1 -1
  168. package/dist/client/assets/{skeleton-CVzqY297.js → skeleton-B3z9RhFw.js} +1 -1
  169. package/dist/client/assets/{sortable.esm-DvKAwT6T.js → sortable.esm-ChXSQgk4.js} +1 -1
  170. package/dist/client/assets/{spinner-DZG11PAv.js → spinner-u4N4s9Z6.js} +1 -1
  171. package/dist/client/assets/{sso-BUixu3Zz.js → sso-QXpS_be1.js} +1 -1
  172. package/dist/client/assets/{store-BTnNlZj8.js → store-D0VBS3Tx.js} +1 -1
  173. package/dist/client/assets/store-registry-xnI7S9bB.js +2 -0
  174. package/dist/client/assets/{switch-P3zLSFv8.js → switch-B-X7IR6_.js} +1 -1
  175. package/dist/client/assets/{tab-id-DhCb_abW.js → tab-id-D4XtWZcv.js} +1 -1
  176. package/dist/client/assets/{table-yFj0stfJ.js → table-CUgkm7T_.js} +1 -1
  177. package/dist/client/assets/{tabs-4xCvoe9h.js → tabs-CxIIMzaj.js} +1 -1
  178. package/dist/client/assets/{task-status-B33JSiVR.js → task-status-4rr9cZ7d.js} +1 -1
  179. package/dist/client/assets/{textarea-DBZsWt4d.js → textarea-AHMya-Yu.js} +1 -1
  180. package/dist/client/assets/{toggle-group-BP_ogdFV.js → toggle-group-B_TX0y3P.js} +1 -1
  181. package/dist/client/assets/{toolbar-B-ecUSaD.js → toolbar-BNPhEiqF.js} +1 -1
  182. package/dist/client/assets/{tools-list-DurkYI7V.js → tools-list-ASCoS6LU.js} +1 -1
  183. package/dist/client/assets/{tooltip-SvWIEz4F.js → tooltip-VoacnTKM.js} +1 -1
  184. package/dist/client/assets/{types-dRDAzIp3.js → types-DGaPEJ11.js} +1 -1
  185. package/dist/client/assets/{use-ai-providers-DGVQckBg.js → use-ai-providers-B08Dfztq.js} +1 -1
  186. package/dist/client/assets/{use-automations-MzX-pnft.js → use-automations-D6JWA2qr.js} +1 -1
  187. package/dist/client/assets/{use-capability-wOZj0F9y.js → use-capability-CD7uDLwB.js} +1 -1
  188. package/dist/client/assets/{use-collections-r13pSQw9.js → use-collections-DEYzPSLv.js} +1 -1
  189. package/dist/client/assets/{use-connection-CxabpxQN.js → use-connection-DY59WvYT.js} +1 -1
  190. package/dist/client/assets/{use-copy-BeP0rgAX.js → use-copy-DAGbC1GA.js} +1 -1
  191. package/dist/client/assets/{use-create-virtual-mcp-DiFo-I35.js → use-create-virtual-mcp-BXxjk7k6.js} +1 -1
  192. package/dist/client/assets/{use-debounced-autosave-KdYwTFfQ.js → use-debounced-autosave-BOriK1WA.js} +1 -1
  193. package/dist/client/assets/{use-delete-connection-BBrQ4LFO.js → use-delete-connection-wvPOAsuG.js} +1 -1
  194. package/dist/client/assets/{use-file-configs-DC8qoJy2.js → use-file-configs-c_8gPz9N.js} +1 -1
  195. package/dist/client/assets/{use-infinite-scroll-YklEtrt9.js → use-infinite-scroll-2beLt-Er.js} +1 -1
  196. package/dist/client/assets/{use-list-state-B__YGfxw.js → use-list-state-ZOMnKb9E.js} +1 -1
  197. package/dist/client/assets/{use-mcp-prompts-DSX3V-bQ.js → use-mcp-prompts-Z9l1A0Zz.js} +1 -1
  198. package/dist/client/assets/{use-mcp-tools-pbSeY5Lj.js → use-mcp-tools-Da-abucn.js} +1 -1
  199. package/dist/client/assets/{use-members-DZ-u6V-u.js → use-members-BbxKUa81.js} +1 -1
  200. package/dist/client/assets/{use-navigate-to-agent-DF_KNeZq.js → use-navigate-to-agent-D4fCB-ku.js} +1 -1
  201. package/dist/client/assets/{use-org-auth-client-yy03WxT-.js → use-org-auth-client-D8pwkohW.js} +1 -1
  202. package/dist/client/assets/{use-org-sso-CRtw-FZU.js → use-org-sso-Z-KrfZMw.js} +1 -1
  203. package/dist/client/assets/{use-organization-roles-DQLKA3oR.js → use-organization-roles-BPbcrovc.js} +1 -1
  204. package/dist/client/assets/{use-organization-settings-DWlWbg2C.js → use-organization-settings-DK19F2g9.js} +1 -1
  205. package/dist/client/assets/{use-registry-connections-bbGWBclV.js → use-registry-connections-BT5RIBa1.js} +1 -1
  206. package/dist/client/assets/{use-secrets-rUozqC0V.js → use-secrets-HKPmUn7b.js} +1 -1
  207. package/dist/client/assets/{use-status-sounds-Cf4933eB.js → use-status-sounds-bkoIBdSr.js} +1 -1
  208. package/dist/client/assets/{use-view-mode-DdEspuVM.js → use-view-mode-DTI3AORs.js} +1 -1
  209. package/dist/client/assets/{use-virtual-mcp-BMeG-Ahu.js → use-virtual-mcp-C0J6vZOy.js} +1 -1
  210. package/dist/client/assets/useInfiniteQuery-BYU0zu4v.js +1 -0
  211. package/dist/client/assets/{useRouterState-CrRn_Y16.js → useRouterState-BpN6uFWZ.js} +1 -1
  212. package/dist/client/assets/useSuspenseInfiniteQuery-CsscVl3c.js +1 -0
  213. package/dist/client/assets/{user-DVFRvErN.js → user-DICnku4_.js} +1 -1
  214. package/dist/client/assets/{view-mode-toggle-DScb7qQz.js → view-mode-toggle-CbsM9RpS.js} +1 -1
  215. package/dist/client/assets/{workflow-DQR2vEK6.js → workflow-3MM_iKc4.js} +1 -1
  216. package/dist/client/assets/workflow-detail-Nu0x63kt.js +1 -0
  217. package/dist/client/index.html +1 -1
  218. package/dist/server/cli.js +3 -3
  219. package/dist/server/server.js +2 -2
  220. package/package.json +1 -1
  221. package/dist/client/assets/agent-capabilities-DNEvySpc.js +0 -3
  222. package/dist/client/assets/app-editor-DRNBwOi5.js +0 -1
  223. package/dist/client/assets/page-seo-sheet-Cc0yvkD9.js +0 -1
  224. package/dist/client/assets/project-app-view-BNF63H5u.js +0 -1
  225. package/dist/client/assets/record-editor-EdXktlRb.js +0 -1
  226. package/dist/client/assets/registry-j83MXDkD.js +0 -2
  227. package/dist/client/assets/store-registry--w5svgmD.js +0 -2
  228. package/dist/client/assets/useInfiniteQuery-DHYfiX8a.js +0 -1
  229. package/dist/client/assets/useSuspenseInfiniteQuery-BQXUxrp-.js +0 -1
  230. package/dist/client/assets/workflow-detail-BiAjVJyT.js +0 -1
@@ -104807,7 +104807,7 @@ ${c.stack}`;f.reject(d)}else f.resolve(_)}});return $.requestSubject=i,this.prot
104807
104807
  `);if(g===-1)return;let h=$.subarray(0,g).toString("utf8"),E=$.subarray(g+4),v=h.split(`\r
104808
104808
  `,1)[0]??"";if(!/^HTTP\/1\.[01] 101(?:\s|$)/.test(v)){M8(i,1011,t.upstreamErrorReason);try{c.end()}catch{}return}d=!0,i.data.upstream=c;let r=z9l((x,O)=>{try{if(x===1)i.send(O.toString("utf8"));else if(x===2)i.send(O);else if(x===8){let{code:y,reason:X}=S9l(O);M8(i,y,X);try{c.end()}catch{}}}catch{}});if(c.removeAllListeners("data"),E.length>0)r(E);c.on("data",(x)=>r(x));for(let x of i.data.pending)try{c.write(Oki(x,!0))}catch{}i.data.pending.length=0})}function j9l(i,t){let u=[`GET ${i} HTTP/1.1`];for(let[l,n]of Object.entries(t))u.push(`${l}: ${n}`);return u.push("",""),u.join(`\r
104809
104809
  `)}function M8(i,t,u){try{if(t!==void 0)i.close(t,u??"");else i.close()}catch{}}function Oki(i,t,u){let l,n;if(typeof i==="string")l=Buffer.from(i,"utf8"),n=1;else if(i instanceof ArrayBuffer)l=Buffer.from(i),n=2;else if(Buffer.isBuffer(i))l=i,n=2;else l=Buffer.from(i),n=2;let f=u??n,c=l.length,$=[];$.push(128|f&15);let d=t?128:0;if(c<126)$.push(d|c);else if(c<65536)$.push(d|126,c>>8&255,c&255);else $.push(d|127,0,0,0,0),$.push(c>>>24&255,c>>>16&255,c>>>8&255,c&255);let _=t?4:0,g=Buffer.allocUnsafe($.length+_+c),h=0;for(let E=0;E<$.length;E++)g[h++]=$[E];if(t){let E=NSt(4);g[h++]=E[0],g[h++]=E[1],g[h++]=E[2],g[h++]=E[3];for(let v=0;v<c;v++)g[h++]=l[v]^E[v&3]}else l.copy(g,h);return g}function S9l(i){if(i.length<2)return{code:1000,reason:""};return{code:i.readUInt16BE(0),reason:i.subarray(2).toString("utf8")}}function z9l(i){let t=Buffer.alloc(0);return(u)=>{t=t.length===0?u:Buffer.concat([t,u]);while(!0){if(t.length<2)return;let l=t[0],n=t[1],f=l&15,c=(n&128)!==0,$=n&127,d=2;if($===126){if(t.length<d+2)return;$=t[d]<<8|t[d+1],d+=2}else if($===127){if(t.length<d+8)return;$=t[d+4]*16777216+(t[d+5]<<16|t[d+6]<<8|t[d+7]),d+=8}let _=null;if(c){if(t.length<d+4)return;_=t.subarray(d,d+4),d+=4}if(t.length<d+$)return;let g=t.subarray(d,d+$);if(_){let h=Buffer.alloc($);for(let E=0;E<$;E++)h[E]=g[E]^_[E&3];g=h}t=t.subarray(d+$),i(f,g)}}}var W9l=256;var TSt=w(()=>{XSt()});function ISt(i){if(typeof i!=="string"||i.length===0)return null;let t=i.lastIndexOf(":");if(i.startsWith("["))return null;let l=(t>=0?i.slice(0,t):i).replace(/\.$/,"").toLowerCase(),n=".localhost";if(!l.endsWith(n))return null;let f=l.slice(0,-n.length);if(f.length===0)return null;if(f.includes("."))return null;return f}async function ZSt(i){let t=FSt({maxPendingFrames:i.maxPendingWsFrames??b9l,backlogOverflowReason:"ingress backlog overflow"}),u=Bun.serve({port:i.port,hostname:"127.0.0.1",idleTimeout:0,async fetch(l,n){let f=l.headers.get("host"),c=ISt(f);if(!c)return new Response("not found",{status:404});let $=i.lookupSandboxPort(c);if(!$){if(l.headers.get("upgrade")==="websocket")return new Response("unknown handle",{status:404});return new Response(K9l,{status:503,headers:{"Content-Type":"text/html; charset=utf-8","Cache-Control":"no-store","Retry-After":"1"}})}if(l.headers.get("upgrade")==="websocket"){let h=new URL(l.url);if(!n.upgrade(l,{data:USt({port:$,pathQuery:`${h.pathname}${h.search}`,protocols:JSt(l.headers)})}))return new Response("ws upgrade failed",{status:400});return}let d=new URL(l.url),_=`http://127.0.0.1:${$}${d.pathname}${d.search}`,g=new Headers(l.headers);return g.set("host",`127.0.0.1:${$}`),fetch(_,{method:l.method,headers:g,body:l.body,redirect:"manual"})},websocket:{open:t.open,message:t.message,close:t.close}});return{port:u.port??0,async stop(){u.stop(!0)}}}var b9l=256,K9l='<!DOCTYPE html><html><head><meta charset="utf-8"><title>Connecting\u2026</title><style>body{font-family:system-ui,sans-serif;display:flex;align-items:center;justify-content:center;min-height:100vh;margin:0;background:#fafafa;color:#555}div{text-align:center;max-width:420px;padding:24px}h3{margin:0 0 8px}p{margin:0;font-size:14px;color:#999;line-height:1.5}</style></head><body><div><h3>Connecting to sandbox\u2026</h3><p>Waiting for the local sandbox to come online. This page refreshes automatically.</p></div><script>setTimeout(function(){window.location.reload()},1500)</script></body></html>';var BSt=w(()=>{TSt()});async function yki(i=M9l){let t=["decopilot-sandbox","body-offload"],[u,l]=await Promise.all([i.detectClaudeCode().catch(()=>!1),i.detectCodex().catch(()=>!1)]);if(u)t.push("claude-code");if(l)t.push("codex");return t}function R9l(i){return H9l.filter((t)=>!i.includes(t))}function L9l(i,t){let u=t.filter((l)=>!i.includes(l));return i.push(...u),u}function QSt(i,t={}){let u=t.detect??(()=>yki()),l=setInterval(()=>{if(R9l(i).length===0)return;u().then((n)=>{let f=L9l(i,n);if(f.length>0)t.onChange?.(f)}).catch(()=>{})},t.intervalMs??60000);return l.unref?.(),()=>clearInterval(l)}async function e9l(){try{let{query:i}=await import("@anthropic-ai/claude-agent-sdk"),t=i({prompt:"",options:{maxTurns:1}}),u=await t.accountInfo();return t.return(void 0),Boolean(u.email)}catch{return!1}}async function C9l(){try{let i=Bun.spawn(["codex","--version"],{stdout:"ignore",stderr:"ignore"}),t=setTimeout(()=>i.kill(),1e4),u=await i.exited;return clearTimeout(t),u===0}catch{return!1}}var H9l,M9l;var PSt=w(()=>{H9l=["claude-code","codex"];M9l={detectClaudeCode:e9l,detectCodex:C9l}});import{randomBytes as q9l}from"crypto";import{mkdir as V9l,readFile as a9l,writeFile as m9l}from"fs/promises";import{dirname as o9l,join as s9l}from"path";function p9l(i){return s9l(i,"machine-id")}async function YSt(i){let t=p9l(i);try{let n=(await a9l(t,"utf8")).trim();if(n)return n}catch{}let u=q9l(16).toString("hex");return await V9l(o9l(t),{recursive:!0}),await m9l(t,u),u}var ASt=()=>{};import{randomBytes as iNl}from"crypto";import{mkdir as tNl}from"fs/promises";import{createServer as uNl}from"net";import{join as lNl}from"path";function GSt(i,t){return Error(`sandbox failed to start: ${i}`,{cause:t})}function nNl(i){if(!(i instanceof Error))return!1;return i.name==="TimeoutError"||/timed out|timeout|operation was aborted|aborted/i.test(i.message)}function fNl(i){if(i instanceof Error){let t=i.cause;if(t instanceof Error&&t.message)return t.message;return i.message}return String(i)}function WSt(i){let t=i.maxSandboxes??20,u=new Map,l=i.pickPort??cNl,n=i.fetchImpl??fetch,f=i.resolvePreviewUrl??((E,v)=>`http://127.0.0.1:${v}`),c=(E)=>{try{i.onEvent?.(E)}catch{}},$=async(E)=>{let v=new AbortController,r=setTimeout(()=>v.abort(),1500);try{let x=await n(`${E}/health`,{signal:v.signal});if(!x.ok)console.warn(`[user-desktop] probe ${E}/health \u2192 ${x.status} (treating as dead)`);return x.ok}catch(x){return console.warn(`[user-desktop] probe ${E}/health failed: ${x instanceof Error?x.message:String(x)} (treating as dead)`),!1}finally{clearTimeout(r)}},d=(E)=>{console.warn(`[user-desktop] evicting dead daemon handle=${E.handle} port=${E.port}`);try{E.process.kill("SIGTERM")}catch{}if(u.get(E.handle)===E)u.delete(E.handle),c({handle:E.handle,phase:"evicted"})},_=new Map;function g(){if(u.size<t)return;let E=[...u.values()].filter((r)=>r.activeDispatchCount===0).sort((r,x)=>r.lastUsedAt-x.lastUsedAt);if(E.length===0){console.warn(`[user-desktop] at cap ${u.size}/${t} but every sandbox is pinned (active dispatch) \u2014 exceeding cap temporarily`);return}let v=E[0];console.log(`[user-desktop] evicting LRU victim handle=${v.handle} port=${v.port} (cap ${t} reached, size=${u.size})`);try{v.process.kill("SIGTERM")}catch{}u.delete(v.handle),c({handle:v.handle,phase:"evicted"})}let h=async(E)=>{c({handle:E.handle,phase:"spawning"}),g();let v=lNl(i.dataDir,"sandboxes",E.handle);await tNl(v,{recursive:!0}),console.log(`[user-desktop] ensure handle=${E.handle} repo=${E.repo?.cloneUrl??"(none)"} branch=${E.repo?.branch??"(none)"} runtime=${E.workload?.runtime??"(autodetect)"} pm=${E.workload?.packageManager??"(autodetect)"}`);let r=iNl(24).toString("hex"),[x,O]=await Promise.all([l(),l()]);console.log(`[user-desktop] spawn handle=${E.handle} port=${x} devPort=${O} workdir=${v}`);let y=await Promise.resolve(i.spawnDaemon({workdir:v,handle:E.handle,port:x,daemonToken:r,offloadAllowedHosts:E.offloadAllowedHosts??[],offloadAllowSameHostDev:E.offloadAllowSameHostDev??!1,orgFsConfigJson:E.orgFsConfigJson}));try{try{await i.waitForHealth(x)}catch(J){throw GSt("the sandbox didn't come online in time",J)}console.log(`[user-desktop] healthy handle=${E.handle} port=${x} \u2014 posting config`);try{await i.postConfig(x,O,{repo:E.repo,workload:E.workload,operator:E.operator},r)}catch(J){throw GSt(nNl(J)?"configuration timed out":"the sandbox rejected its configuration",J)}}catch(J){console.error(`[user-desktop] sandbox bring-up failed handle=${E.handle} port=${x} (killing daemon):`,J);try{y.kill("SIGKILL")}catch{}throw c({handle:E.handle,phase:"failed",error:fNl(J)}),J}let X=`http://127.0.0.1:${x}`,N=f(E.handle,x);console.log(`[user-desktop] ready handle=${E.handle} port=${x} sandboxApiUrl=${X} previewUrl=${N}`);let U={handle:E.handle,port:x,process:y,sandboxApiUrl:X,previewUrl:N,lastUsedAt:Date.now(),activeDispatchCount:0,daemonToken:r};if(u.set(E.handle,U),c({handle:E.handle,phase:"ready",port:x,previewUrl:N}),y.exited)y.exited.then(()=>{if(u.get(E.handle)===U)console.warn(`[user-desktop] daemon process exited unexpectedly handle=${E.handle} port=${x} \u2014 removing from cache`),u.delete(E.handle),c({handle:E.handle,phase:"evicted"});else console.log(`[user-desktop] daemon process exited handle=${E.handle} port=${x} (already replaced/removed)`)});return{sandboxApiUrl:X,previewUrl:N,port:x}};return{async ensureSandbox(E){let v=u.get(E.handle);if(v){if(await $(v.sandboxApiUrl))return console.log(`[user-desktop] cache hit handle=${E.handle} port=${v.port} (alive)`),v.lastUsedAt=Date.now(),{sandboxApiUrl:v.sandboxApiUrl,previewUrl:v.previewUrl,port:v.port};console.warn(`[user-desktop] cache stale handle=${E.handle} port=${v.port} \u2014 respawning`),d(v)}let r=_.get(E.handle);if(r)return console.log(`[user-desktop] joining in-flight ensure handle=${E.handle}`),r;let x=h(E).finally(()=>{_.delete(E.handle)});return _.set(E.handle,x),x},proxyPort(E){let v=u.get(E);if(v)v.lastUsedAt=Date.now();return v?.port??null},getDaemonToken(E){return u.get(E)?.daemonToken??null},hasHandle(E){return u.has(E)||_.has(E)},recordHit(E){let v=u.get(E);if(v)v.lastUsedAt=Date.now()},acquireDispatch(E){let v=u.get(E);if(!v)return()=>{};v.activeDispatchCount+=1;let r=!1;return()=>{if(r)return;r=!0;let x=u.get(E);if(x)x.activeDispatchCount=Math.max(0,x.activeDispatchCount-1)}},listSandboxes(){return[...u.values()]},async deleteSandbox(E){let v=u.get(E);if(!v){console.log(`[user-desktop] delete handle=${E} (not found, no-op)`);return}console.log(`[user-desktop] delete handle=${E} port=${v.port}`);try{v.process.kill("SIGTERM")}catch{}u.delete(E),c({handle:E,phase:"deleted"})},async shutdown(){console.log(`[user-desktop] shutdown \u2014 killing ${u.size} sandbox(es)`);for(let E of u.values())try{E.process.kill("SIGTERM")}catch{}u.clear()}}}function cNl(){return new Promise((i,t)=>{let u=uNl();u.unref(),u.on("error",t),u.listen(0,"127.0.0.1",()=>{let l=u.address();if(l&&typeof l==="object"){let n=l.port;u.close(()=>i(n))}else u.close(()=>t(Error("could not allocate port")))})})}var kSt=()=>{};import{randomUUID as $Nl}from"crypto";import{hostname as dNl}from"os";async function jSt(i){let t=dNl()||void 0;i.monitor?.onMachine?.(t??"this machine");let u=oYt(i.dataDir,{outFd:i.logFd,perSandboxLog:i.perSandboxLogs,hotReload:i.hotReload}),l=0,n=WSt({dataDir:i.dataDir,resolvePreviewUrl:(N,U)=>l>0?`http://${N}.localhost:${l}`:`http://127.0.0.1:${U}`,spawnDaemon:async(N)=>{let U={DAEMON_BOOT_ID:$Nl(),APP_ROOT:N.workdir,PROXY_PORT:String(N.port),DAEMON_TOKEN:N.daemonToken,OFFLOAD_ALLOWED_HOSTS:N.offloadAllowedHosts.join(","),...N.offloadAllowSameHostDev?{OFFLOAD_ALLOW_SAME_HOST_DEV:"1"}:{}};if(N.orgFsConfigJson){let F=await tAt(i.dataDir);if(F)U.ORGFS_CONFIG=N.orgFsConfigJson,U.ORGFS_RCLONE_PATH=F}let J=await u({workdir:N.workdir,env:U,daemonPort:N.port});return{port:N.port,kill:(F)=>J.kill(F),exited:J.exited.then(()=>{return})}},postConfig:async(N,U,J,F)=>{let Q={port:U};if(J.workload)Q.runtime=J.workload.runtime,Q.packageManager={name:J.workload.packageManager,...J.workload.packageManagerPath?{path:J.workload.packageManagerPath}:{}};let B={application:Q},Y=p6(J.operator??null);if(Y)B.operator=Y;if(J.repo)B.git={repository:{cloneUrl:J.repo.cloneUrl,branch:J.repo.branch},...J.repo.userName&&J.repo.userEmail?{identity:{userName:J.repo.userName,userEmail:J.repo.userEmail}}:{}};await B8(`http://127.0.0.1:${N}`,F,B)},waitForHealth:async(N)=>{await uli(`http://127.0.0.1:${N}`)},maxSandboxes:20,onEvent:i.monitor?.onEvent}),f=await ZSt({port:i.port,lookupSandboxPort:(N)=>n.proxyPort(N)});l=f.port,console.log(`Local ingress listening on http://127.0.0.1:${f.port} (use http://<handle>.localhost:${f.port}/)`),i.monitor?.onIngress?.(f.port);let c=lAt({provider:n}),$=async()=>{let N=await Sw({dataDir:i.dataDir,target:i.clusterBaseUrl});if(!N)throw Object.assign(Error(`Session for ${i.clusterBaseUrl} is no longer valid \u2014 run \`deco auth login --target ${i.clusterBaseUrl}\` and restart \`deco link\`.`),{fatal:!0});return N.accessToken};console.log(`[link-daemon] transport=pull cluster=${i.clusterBaseUrl}`);let d=await YSt(i.dataDir),_=process.env.npm_package_version??"0.0.0",g=await yki(),h=QSt(g,{onChange:(N)=>{console.log(`[link-daemon] capabilities detected: +${N.join(",")} (now: ${g.join(",")})`)}}),E=wki({path:`${i.dataDir}/link/outbox.sqlite`}),v=()=>{},r=await wSt({clusterBaseUrl:i.clusterBaseUrl,getAccessToken:$,provider:n,outbox:E,controlHandler:c,capabilities:g,machineId:d,cliVersion:_,previewPort:f.port,onConnected:()=>{i.monitor?.onCluster?.("linked"),console.log(`Linked to ${i.clusterBaseUrl} (pull transport)`)},onShutdown:()=>v()}),x,O=new Promise((N)=>{x=N}),y=!1,X=async()=>{if(y)return;y=!0,console.log(`
104810
- Shutting down\u2026`),h();try{await r.close()}catch{}try{await f.stop()}catch{}try{await n.shutdown()}catch{}try{E.close()}catch{}x(0)};return process.on("SIGINT",()=>void X()),process.on("SIGTERM",()=>void X()),v=()=>{console.log("Disconnect requested from the Studio web UI \u2014 shutting down. Run `bunx decocms link` to reconnect."),X()},r.closed.then(()=>{if(i.monitor?.onCluster?.("closed"),!y)console.error("Cluster connection closed permanently; exiting."),X()}),{stopped:O,stop:X}}var SSt=w(()=>{vGi();RH();sYt();uAt();nAt();xSt();xki();BSt();PSt();ASt();HH();kSt()});function Xki(i){return i.map((t)=>typeof t==="string"?t:String(t)).join(" ")}var r0i;var Nki=w(()=>{r0i={name:"decocms",version:"3.18.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/mesh"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:'bun run migrate && concurrently "bun run dev:client" "bun run dev:server"',"dev:servers":'concurrently "bun run dev:client" "bun run dev:server"',"dev:client":"vite dev","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts","build:client":"bun --bun vite build","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","db:migrate":"bun run ./dist/server/migrate.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts",test:"bun test","test:e2e":"playwright test","test:e2e:ui":"playwright test --ui","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts","smoke:link":"bun run scripts/smoke-link.ts",prepublishOnly:"bun run build:client && bun run build:server"},optionalDependencies:{"@anthropic-ai/claude-agent-sdk":"^0.2.141","@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.80","@ai-sdk/google":"^3.0.80","@ai-sdk/openai":"^3.0.65","@anthropic-ai/sdk":"^0.96.0","@aws-sdk/client-s3":"^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.17.6","@dnd-kit/core":"^6.3.1","@dnd-kit/sortable":"^10.0.0","@dnd-kit/utilities":"^3.2.2","@inkjs/ui":"^2.0.0","@modelcontextprotocol/ext-apps":"^1.7.1","@openrouter/ai-sdk-provider":"^2.9.0","@opentelemetry/core":"^2.6.0","@tanstack/react-virtual":"3.13.24","@xterm/addon-fit":"^0.11.0","@xterm/xterm":"^6.0.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12",nats:"^2.29.3","node-pty":"^1.0.0","posthog-js":"^1.371.1","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@ai-sdk/react":"^3.0.193","@better-auth/sso":"1.4.1","@daveyplate/better-auth-ui":"^3.2.7","@deco/ui":"workspace:*","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/harness":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/mesh-sdk":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/std":"workspace:*","@floating-ui/react":"^0.27.16","@happy-dom/global-registrator":"^20.9.0","@hookform/resolvers":"^5.2.2","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@monaco-editor/react":"^4.7.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","@playwright/test":"^1.58.2","@radix-ui/react-avatar":"^1.1.10","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-dropdown-menu":"^2.1.16","@radix-ui/react-label":"^2.1.7","@radix-ui/react-select":"^2.2.6","@radix-ui/react-separator":"^1.1.7","@radix-ui/react-slot":"^1.2.3","@radix-ui/react-tabs":"^1.1.13","@rjsf/core":"^6.1.2","@rjsf/shadcn":"^6.1.2","@rjsf/utils":"^6.1.2","@rjsf/validator-ajv8":"^6.1.2","@tailwindcss/vite":"^4.1.17","@tanstack/react-query":"5.100.10","@tanstack/react-router":"1.169.2","@testing-library/jest-dom":"^6.9.1","@testing-library/react":"^16.3.2","@tiptap/core":"3.20.2","@tiptap/extension-mention":"3.20.2","@tiptap/extension-placeholder":"3.20.2","@tiptap/pm":"3.20.2","@tiptap/react":"3.20.2","@tiptap/starter-kit":"3.20.2","@tiptap/suggestion":"3.20.2","@types/bun":"^1.3.1","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@untitledui/icons":"^0.0.19","@vercel/nft":"^1.1.1","@vitejs/plugin-react":"^5.1.0",ai:"^6.0.191","babel-plugin-react-compiler":"^1.0.0","better-auth":"1.4.22","class-variance-authority":"^0.7.1",clsx:"^2.1.1",concurrently:"^9.2.1",croner:"^9.1.0","date-fns":"^4.1.0",degit:"^2.8.4",hono:"^4.10.7","input-otp":"^1.4.2",jose:"^6.0.11","lucide-react":"^0.468.0",marked:"^15.0.6","mesh-plugin-workflows":"workspace:*",nanoid:"^5.1.6",pg:"^8.16.3",prettier:"^3.4.2","react-hook-form":"^7.66.0","react-markdown":"^10.1.0","react-resizable-panels":"^2.1.7","react-syntax-highlighter":"^15.6.1",recharts:"^3.6.0","rehype-raw":"^7.0.0","remark-gfm":"^4.0.0","sass-embedded":"^1.97.2",sonner:"^2.0.7","tailwind-merge":"^3.3.1",tailwindcss:"^4.1.17",typescript:"^5.9.3",vite:"^7.2.1","vite-tsconfig-paths":"^5.1.4",zod:"^4.0.0",zustand:"^5.0.9"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","mesh","tools"],license:"MIT",publishConfig:{access:"public"}}});var vR={};Gi(vR,{printBanner:()=>hNl,bannerLines:()=>zSt,BANNER_LINES:()=>w0i,BANNER_GRADIENT:()=>x0i});function gNl(i){let t=Number.parseInt(i.slice(1),16);return[t>>16&255,t>>8&255,t&255]}function zSt(i){let t=w0i.map((u,l)=>{let[n,f,c]=gNl(x0i[l]);return`\x1B[38;2;${n};${f};${c}m${u}\x1B[39m`});if(i!==void 0)t.push(`\x1B[2m v${i}\x1B[22m`);return t}function hNl(i){console.log("");for(let t of zSt(i))console.log(t);console.log("")}var w0i,x0i;var ZW=w(()=>{w0i=[" \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588 ","\u2591\u2591\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588 \u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588\u2588\u2588 "," \u2591\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2588 \u2591 \u2588\u2588\u2588 \u2591\u2591\u2591 \u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2591\u2591\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591 \u2588\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588 "," \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2591\u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2591 ","\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591 "],x0i=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"]});import{Box as ENl,Text as bSt}from"ink";import{jsx as vNl,jsxs as KSt}from"react/jsx-runtime";function D0i({version:i}){return KSt(ENl,{flexDirection:"column",marginTop:1,children:[w0i.map((t,u)=>vNl(bSt,{color:x0i[u],children:t},u)),KSt(bSt,{dimColor:!0,children:[" v",i]})]})}var Jki=w(()=>{ZW()});var RSt={};Gi(RSt,{subscribeLinkState:()=>Tki,setMachine:()=>DNl,setLogPath:()=>yNl,setIngress:()=>xNl,setDaemonError:()=>ONl,setClusterUrl:()=>wNl,setCluster:()=>rNl,pushSandboxEvent:()=>XNl,getLinkState:()=>Fki,applySandboxEvent:()=>HSt});function HSt(i,t){let u=new Map(i);if(t.phase==="evicted"||t.phase==="deleted")return u.delete(t.handle),u;let l=u.get(t.handle);return u.set(t.handle,{handle:t.handle,port:t.port??l?.port??null,previewUrl:t.previewUrl??l?.previewUrl??null,status:t.phase,error:t.phase==="failed"?t.error??"failed":null}),u}function q8(){for(let i of Uki)i()}function Fki(){return i$}function Tki(i){return Uki.add(i),()=>Uki.delete(i)}function rNl(i){i$={...i$,cluster:i},q8()}function wNl(i){i$={...i$,clusterUrl:i},q8()}function xNl(i,t){i$={...i$,ingressPort:i,ingressUrl:t},q8()}function DNl(i){i$={...i$,machine:i},q8()}function ONl(i){i$={...i$,daemonError:i},q8()}function yNl(i){i$={...i$,logPath:i},q8()}function XNl(i){i$={...i$,sandboxes:HSt(i$.sandboxes,i)},q8()}var i$,Uki;var Iki=w(()=>{i$={cluster:"connecting",clusterUrl:null,ingressUrl:null,ingressPort:null,machine:null,cap:20,sandboxes:new Map,daemonError:null,logPath:null},Uki=new Set});var LSt={};Gi(LSt,{LinkApp:()=>UNl});import{Box as t$,Text as u$}from"ink";import{useSyncExternalStore as NNl}from"react";import{jsx as $1,jsxs as RE}from"react/jsx-runtime";function JNl(i){if(i.status==="ready")return{color:"green",text:"\u25CF Live"};if(i.status==="spawning")return{color:"yellow",text:"\u25CC Starting\u2026"};return{color:"red",text:`\u2717 Error: ${i.error??""}`}}function UNl(){let i=NNl(Tki,Fki),t=[...i.sandboxes.values()].sort((u,l)=>u.handle.localeCompare(l.handle));return RE(t$,{flexDirection:"column",children:[$1(D0i,{version:r0i.version}),$1(t$,{marginBottom:1,children:$1(u$,{dimColor:!0,children:"\u2500".repeat(80)})}),$1(t$,{children:i.cluster==="linked"?RE(u$,{color:"green",children:["\u2713 Connected to ",i.clusterUrl??"deco"]}):i.cluster==="connecting"?RE(u$,{color:"yellow",children:["\u25CC Connecting to ",i.clusterUrl??"deco","\u2026"]}):RE(u$,{color:"red",children:["\u2717 Disconnected from ",i.clusterUrl??"deco"]})}),$1(t$,{children:i.ingressUrl?RE(u$,{color:"green",children:["\u2713 Serving at ",i.ingressUrl]}):$1(u$,{dimColor:!0,children:"\u25CC Starting local server\u2026"})}),$1(t$,{marginBottom:1,children:$1(u$,{dimColor:!0,children:`${"Computer".padEnd(16)}${i.machine??"this computer"} \xB7 ${t.length} of ${i.cap} previews`})}),t.length===0?$1(u$,{dimColor:!0,children:"No previews running yet."}):RE(t$,{flexDirection:"column",children:[RE(t$,{children:[$1(t$,{width:O0i.project,flexShrink:0,marginRight:1,children:$1(u$,{dimColor:!0,wrap:"truncate-end",children:"PROJECT"})}),$1(t$,{width:O0i.status,flexShrink:0,marginRight:1,children:$1(u$,{dimColor:!0,wrap:"truncate-end",children:"STATUS"})}),$1(t$,{flexGrow:1,children:$1(u$,{dimColor:!0,wrap:"truncate-end",children:"PREVIEW URL"})})]}),t.map((u)=>{let l=JNl(u);return RE(t$,{children:[$1(t$,{width:O0i.project,flexShrink:0,marginRight:1,children:$1(u$,{wrap:"truncate-end",children:u.handle})}),$1(t$,{width:O0i.status,flexShrink:0,marginRight:1,children:$1(u$,{color:l.color,wrap:"truncate-end",children:l.text})}),$1(t$,{flexGrow:1,children:$1(u$,{dimColor:!0,wrap:"truncate-end",children:u.previewUrl??"\u2014"})})]},u.handle)})]}),i.daemonError?$1(t$,{marginTop:1,children:RE(u$,{color:"red",children:["\u26A0 ",i.daemonError]})}):null,i.logPath?$1(t$,{marginTop:1,children:RE(u$,{dimColor:!0,children:["Logs: ",i.logPath]})}):null]})}var O0i;var eSt=w(()=>{Nki();Jki();Iki();O0i={project:18,status:14}});var MSt={};Gi(MSt,{runLinkCommand:()=>YNl});import{closeSync as FNl,mkdirSync as TNl,openSync as INl,writeSync as ZNl}from"fs";import{homedir as BNl}from"os";import{join as CSt}from"path";function QNl(i,t){let u={log:console.log,warn:console.warn,error:console.error},l=(n)=>{if(t===void 0)return;try{ZNl(t,`${Xki(n)}
104810
+ Shutting down\u2026`),h();try{await r.close()}catch{}try{await f.stop()}catch{}try{await n.shutdown()}catch{}try{E.close()}catch{}x(0)};return process.on("SIGINT",()=>void X()),process.on("SIGTERM",()=>void X()),v=()=>{console.log("Disconnect requested from the Studio web UI \u2014 shutting down. Run `bunx decocms link` to reconnect."),X()},r.closed.then(()=>{if(i.monitor?.onCluster?.("closed"),!y)console.error("Cluster connection closed permanently; exiting."),X()}),{stopped:O,stop:X}}var SSt=w(()=>{vGi();RH();sYt();uAt();nAt();xSt();xki();BSt();PSt();ASt();HH();kSt()});function Xki(i){return i.map((t)=>typeof t==="string"?t:String(t)).join(" ")}var r0i;var Nki=w(()=>{r0i={name:"decocms",version:"3.18.9",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/mesh"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:'bun run migrate && concurrently "bun run dev:client" "bun run dev:server"',"dev:servers":'concurrently "bun run dev:client" "bun run dev:server"',"dev:client":"vite dev","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts","build:client":"bun --bun vite build","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","db:migrate":"bun run ./dist/server/migrate.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts",test:"bun test","test:e2e":"playwright test","test:e2e:ui":"playwright test --ui","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts","smoke:link":"bun run scripts/smoke-link.ts",prepublishOnly:"bun run build:client && bun run build:server"},optionalDependencies:{"@anthropic-ai/claude-agent-sdk":"^0.2.141","@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.80","@ai-sdk/google":"^3.0.80","@ai-sdk/openai":"^3.0.65","@anthropic-ai/sdk":"^0.96.0","@aws-sdk/client-s3":"^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.17.6","@dnd-kit/core":"^6.3.1","@dnd-kit/sortable":"^10.0.0","@dnd-kit/utilities":"^3.2.2","@inkjs/ui":"^2.0.0","@modelcontextprotocol/ext-apps":"^1.7.1","@openrouter/ai-sdk-provider":"^2.9.0","@opentelemetry/core":"^2.6.0","@tanstack/react-virtual":"3.13.24","@xterm/addon-fit":"^0.11.0","@xterm/xterm":"^6.0.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12",nats:"^2.29.3","node-pty":"^1.0.0","posthog-js":"^1.371.1","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@ai-sdk/react":"^3.0.193","@better-auth/sso":"1.4.1","@daveyplate/better-auth-ui":"^3.2.7","@deco/ui":"workspace:*","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/harness":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/mesh-sdk":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/std":"workspace:*","@floating-ui/react":"^0.27.16","@happy-dom/global-registrator":"^20.9.0","@hookform/resolvers":"^5.2.2","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@monaco-editor/react":"^4.7.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","@playwright/test":"^1.58.2","@radix-ui/react-avatar":"^1.1.10","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-dropdown-menu":"^2.1.16","@radix-ui/react-label":"^2.1.7","@radix-ui/react-select":"^2.2.6","@radix-ui/react-separator":"^1.1.7","@radix-ui/react-slot":"^1.2.3","@radix-ui/react-tabs":"^1.1.13","@rjsf/core":"^6.1.2","@rjsf/shadcn":"^6.1.2","@rjsf/utils":"^6.1.2","@rjsf/validator-ajv8":"^6.1.2","@tailwindcss/vite":"^4.1.17","@tanstack/react-query":"5.100.10","@tanstack/react-router":"1.169.2","@testing-library/jest-dom":"^6.9.1","@testing-library/react":"^16.3.2","@tiptap/core":"3.20.2","@tiptap/extension-mention":"3.20.2","@tiptap/extension-placeholder":"3.20.2","@tiptap/pm":"3.20.2","@tiptap/react":"3.20.2","@tiptap/starter-kit":"3.20.2","@tiptap/suggestion":"3.20.2","@types/bun":"^1.3.1","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@untitledui/icons":"^0.0.19","@vercel/nft":"^1.1.1","@vitejs/plugin-react":"^5.1.0",ai:"^6.0.191","babel-plugin-react-compiler":"^1.0.0","better-auth":"1.4.22","class-variance-authority":"^0.7.1",clsx:"^2.1.1",concurrently:"^9.2.1",croner:"^9.1.0","date-fns":"^4.1.0",degit:"^2.8.4",hono:"^4.10.7","input-otp":"^1.4.2",jose:"^6.0.11","lucide-react":"^0.468.0",marked:"^15.0.6","mesh-plugin-workflows":"workspace:*",nanoid:"^5.1.6",pg:"^8.16.3",prettier:"^3.4.2","react-hook-form":"^7.66.0","react-markdown":"^10.1.0","react-resizable-panels":"^2.1.7","react-syntax-highlighter":"^15.6.1",recharts:"^3.6.0","rehype-raw":"^7.0.0","remark-gfm":"^4.0.0","sass-embedded":"^1.97.2",sonner:"^2.0.7","tailwind-merge":"^3.3.1",tailwindcss:"^4.1.17",typescript:"^5.9.3",vite:"^7.2.1","vite-tsconfig-paths":"^5.1.4",zod:"^4.0.0",zustand:"^5.0.9"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","mesh","tools"],license:"MIT",publishConfig:{access:"public"}}});var vR={};Gi(vR,{printBanner:()=>hNl,bannerLines:()=>zSt,BANNER_LINES:()=>w0i,BANNER_GRADIENT:()=>x0i});function gNl(i){let t=Number.parseInt(i.slice(1),16);return[t>>16&255,t>>8&255,t&255]}function zSt(i){let t=w0i.map((u,l)=>{let[n,f,c]=gNl(x0i[l]);return`\x1B[38;2;${n};${f};${c}m${u}\x1B[39m`});if(i!==void 0)t.push(`\x1B[2m v${i}\x1B[22m`);return t}function hNl(i){console.log("");for(let t of zSt(i))console.log(t);console.log("")}var w0i,x0i;var ZW=w(()=>{w0i=[" \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588 ","\u2591\u2591\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588 \u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588\u2588\u2588 "," \u2591\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2588 \u2591 \u2588\u2588\u2588 \u2591\u2591\u2591 \u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2591\u2591\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591 \u2588\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588 "," \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2591\u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2591 ","\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591 "],x0i=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"]});import{Box as ENl,Text as bSt}from"ink";import{jsx as vNl,jsxs as KSt}from"react/jsx-runtime";function D0i({version:i}){return KSt(ENl,{flexDirection:"column",marginTop:1,children:[w0i.map((t,u)=>vNl(bSt,{color:x0i[u],children:t},u)),KSt(bSt,{dimColor:!0,children:[" v",i]})]})}var Jki=w(()=>{ZW()});var RSt={};Gi(RSt,{subscribeLinkState:()=>Tki,setMachine:()=>DNl,setLogPath:()=>yNl,setIngress:()=>xNl,setDaemonError:()=>ONl,setClusterUrl:()=>wNl,setCluster:()=>rNl,pushSandboxEvent:()=>XNl,getLinkState:()=>Fki,applySandboxEvent:()=>HSt});function HSt(i,t){let u=new Map(i);if(t.phase==="evicted"||t.phase==="deleted")return u.delete(t.handle),u;let l=u.get(t.handle);return u.set(t.handle,{handle:t.handle,port:t.port??l?.port??null,previewUrl:t.previewUrl??l?.previewUrl??null,status:t.phase,error:t.phase==="failed"?t.error??"failed":null}),u}function q8(){for(let i of Uki)i()}function Fki(){return i$}function Tki(i){return Uki.add(i),()=>Uki.delete(i)}function rNl(i){i$={...i$,cluster:i},q8()}function wNl(i){i$={...i$,clusterUrl:i},q8()}function xNl(i,t){i$={...i$,ingressPort:i,ingressUrl:t},q8()}function DNl(i){i$={...i$,machine:i},q8()}function ONl(i){i$={...i$,daemonError:i},q8()}function yNl(i){i$={...i$,logPath:i},q8()}function XNl(i){i$={...i$,sandboxes:HSt(i$.sandboxes,i)},q8()}var i$,Uki;var Iki=w(()=>{i$={cluster:"connecting",clusterUrl:null,ingressUrl:null,ingressPort:null,machine:null,cap:20,sandboxes:new Map,daemonError:null,logPath:null},Uki=new Set});var LSt={};Gi(LSt,{LinkApp:()=>UNl});import{Box as t$,Text as u$}from"ink";import{useSyncExternalStore as NNl}from"react";import{jsx as $1,jsxs as RE}from"react/jsx-runtime";function JNl(i){if(i.status==="ready")return{color:"green",text:"\u25CF Live"};if(i.status==="spawning")return{color:"yellow",text:"\u25CC Starting\u2026"};return{color:"red",text:`\u2717 Error: ${i.error??""}`}}function UNl(){let i=NNl(Tki,Fki),t=[...i.sandboxes.values()].sort((u,l)=>u.handle.localeCompare(l.handle));return RE(t$,{flexDirection:"column",children:[$1(D0i,{version:r0i.version}),$1(t$,{marginBottom:1,children:$1(u$,{dimColor:!0,children:"\u2500".repeat(80)})}),$1(t$,{children:i.cluster==="linked"?RE(u$,{color:"green",children:["\u2713 Connected to ",i.clusterUrl??"deco"]}):i.cluster==="connecting"?RE(u$,{color:"yellow",children:["\u25CC Connecting to ",i.clusterUrl??"deco","\u2026"]}):RE(u$,{color:"red",children:["\u2717 Disconnected from ",i.clusterUrl??"deco"]})}),$1(t$,{children:i.ingressUrl?RE(u$,{color:"green",children:["\u2713 Serving at ",i.ingressUrl]}):$1(u$,{dimColor:!0,children:"\u25CC Starting local server\u2026"})}),$1(t$,{marginBottom:1,children:$1(u$,{dimColor:!0,children:`${"Computer".padEnd(16)}${i.machine??"this computer"} \xB7 ${t.length} of ${i.cap} previews`})}),t.length===0?$1(u$,{dimColor:!0,children:"No previews running yet."}):RE(t$,{flexDirection:"column",children:[RE(t$,{children:[$1(t$,{width:O0i.project,flexShrink:0,marginRight:1,children:$1(u$,{dimColor:!0,wrap:"truncate-end",children:"PROJECT"})}),$1(t$,{width:O0i.status,flexShrink:0,marginRight:1,children:$1(u$,{dimColor:!0,wrap:"truncate-end",children:"STATUS"})}),$1(t$,{flexGrow:1,children:$1(u$,{dimColor:!0,wrap:"truncate-end",children:"PREVIEW URL"})})]}),t.map((u)=>{let l=JNl(u);return RE(t$,{children:[$1(t$,{width:O0i.project,flexShrink:0,marginRight:1,children:$1(u$,{wrap:"truncate-end",children:u.handle})}),$1(t$,{width:O0i.status,flexShrink:0,marginRight:1,children:$1(u$,{color:l.color,wrap:"truncate-end",children:l.text})}),$1(t$,{flexGrow:1,children:$1(u$,{dimColor:!0,wrap:"truncate-end",children:u.previewUrl??"\u2014"})})]},u.handle)})]}),i.daemonError?$1(t$,{marginTop:1,children:RE(u$,{color:"red",children:["\u26A0 ",i.daemonError]})}):null,i.logPath?$1(t$,{marginTop:1,children:RE(u$,{dimColor:!0,children:["Logs: ",i.logPath]})}):null]})}var O0i;var eSt=w(()=>{Nki();Jki();Iki();O0i={project:18,status:14}});var MSt={};Gi(MSt,{runLinkCommand:()=>YNl});import{closeSync as FNl,mkdirSync as TNl,openSync as INl,writeSync as ZNl}from"fs";import{homedir as BNl}from"os";import{join as CSt}from"path";function QNl(i,t){let u={log:console.log,warn:console.warn,error:console.error},l=(n)=>{if(t===void 0)return;try{ZNl(t,`${Xki(n)}
104811
104811
  `)}catch{}};return console.log=(...n)=>l(n),console.warn=(...n)=>l(n),console.error=(...n)=>{l(n),i(Xki(n))},()=>{console.log=u.log,console.warn=u.warn,console.error=u.error}}async function PNl(i,t){let u;try{u=await fetch(`${i}/api/links/me`,{headers:{authorization:`Bearer ${t}`},signal:AbortSignal.timeout(1e4)})}catch{return}if(u.status===401||u.status===403)throw Error(`Authentication rejected by ${i} \u2014 the session token was not accepted. `+`Run \`deco auth login --target ${i}\` and try again.`)}async function YNl(i={}){let t=i.port??5174,u=i.dataDir??process.env.DATA_DIR??process.env.DECOCMS_HOME??CSt(BNl(),"deco"),l=i.clusterBaseUrl??process.env.MESH_CLUSTER_URL??"https://studio.decocms.com",n,f;try{let c=await sui({dataDir:u,intent:"Link",target:l});if(process.env.DECOCMS_LINK_MANAGED!=="1")await PNl(l,c.accessToken);let $;if(i.tui){let{render:g}=await import("ink"),{createElement:h}=await import("react"),{LinkApp:E}=await Promise.resolve().then(() => (eSt(),LSt)),{pushSandboxEvent:v,setCluster:r,setClusterUrl:x,setDaemonError:O,setIngress:y,setLogPath:X,setMachine:N}=await Promise.resolve().then(() => (Iki(),RSt));TNl(u,{recursive:!0});let U=CSt(u,"link.log");f=INl(U,"w"),X(U),x(l),r("connecting"),$={onEvent:(J)=>v(J),onIngress:(J)=>y(J,`http://127.0.0.1:${J}`),onCluster:(J)=>r(J),onMachine:(J)=>N(J)},n=QNl(O,f),g(h(E),{patchConsole:!1})}else if(i.banner!==!1){let{printBanner:g}=await Promise.resolve().then(() => (ZW(),vR));g(i.version??"0.0.0")}let d=process.env.DECOCMS_LINK_MANAGED!=="1";return await(await jSt({port:t,clusterBaseUrl:l,dataDir:u,session:c,monitor:$,logFd:f,perSandboxLogs:d,hotReload:i.hotReload})).stopped}catch(c){return n?.(),console.error(c instanceof Error?c.message:String(c)),1}finally{if(n?.(),f!==void 0)try{FNl(f)}catch{}}}var qSt=w(()=>{EGi();SSt()});var Aki={};Gi(Aki,{resolveDevLinkClusterUrl:()=>kNl,populateDevLinkToxiProxy:()=>pSt,isDevLinkToxiProxyEnabled:()=>WNl,ensureDevLinkToxiProxy:()=>KNl,buildDevLinkToxiProxyConfig:()=>oSt,DEV_LINK_TOXIPROXY_SERVICE_NAME:()=>aSt,DEV_LINK_TOXIPROXY_PROXY_NAME:()=>mSt});function WNl(i=process.env){return i.DECO_DEV_LINK_TOXIPROXY==="1"}function Zki(i,t){if(!Number.isInteger(i)||i<1||i>65535)throw Error(`${t} must be an integer port in 1..65535`);return i}function oSt(i){let t=new URL(i.serverUrl);if(t.protocol!=="http:")throw Error("DECO_DEV_LINK_TOXIPROXY only supports http local Studio URLs");let u=Zki(i.apiPort,"apiPort"),l=Zki(i.listenPort,"listenPort");if(t.port.length===0)throw Error("serverUrl must include an explicit valid port");let n=Zki(Number.parseInt(t.port,10),"upstreamPort"),f=`http://127.0.0.1:${n}`,c=`http://127.0.0.1:${l}`;return{serviceName:aSt,proxyName:mSt,apiUrl:`http://127.0.0.1:${u}`,listen:`0.0.0.0:${l}`,upstream:`host.docker.internal:${n}`,publicTargetUrl:f,clusterUrl:c,logLine:`[dev-link-toxiproxy] ready: ${c} -> ${f}`}}function kNl(i){return i.toxiproxy?.clusterUrl??i.serverUrl}async function Bki(i,t,u){if(i.ok)return;let l=await i.text();throw Error(`ToxiProxy ${t} failed for ${u}: status=${i.status} statusText=${i.statusText} body=${l}`)}function Yki(i){if(i instanceof Error)return i.name==="Error"?i.message:`${i.name}: ${i.message}`;return String(i)}function sSt(i){if(!(i instanceof Error))return!1;if(i.name==="TimeoutError")return!0;return sSt(i.cause)}async function Qki(i,t,u,l){try{return await i(u,l)}catch(n){throw Error(`ToxiProxy ${t} failed for ${u}: ${Yki(n)}`,{cause:n})}}async function pSt(i,t=fetch){let u=`${i.apiUrl}/reset`,l=await Qki(t,"reset",u,{method:"POST"});await Bki(l,"reset",u);let n=`${i.apiUrl}/populate`,f=await Qki(t,"populate",n,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify([{name:i.proxyName,listen:i.listen,upstream:i.upstream,enabled:!0}])});await Bki(f,"populate",n)}async function jNl(i,t){let u=`${i.apiUrl}/version`;try{await Ur(async()=>{let l=await Qki(t,"readiness check",u,{method:"GET",signal:AbortSignal.timeout(GNl)});await Bki(l,"readiness check",u)},{maxAttempts:ANl,minTimeout:VSt,maxTimeout:VSt,multiplier:1,jitter:0,isRetriable:(l)=>!sSt(l)})}catch(l){let n=l instanceof Tg?l.cause:l;throw Error(`ToxiProxy API did not become ready at ${u}: ${Yki(n)}`,{cause:n})}}async function SNl(i){if(i===null)return"";return await new Response(i).text()}async function Pki(i,t={}){let u=["docker",...i].join(" "),l=(()=>{try{return Bun.spawn(["docker",...i],{stdout:"ignore",stderr:"pipe"})}catch($){throw Error(`Docker command failed to start (${u}): ${Yki($)}`,{cause:$})}})(),[n,f]=await Promise.all([l.exited,SNl(l.stderr)]);if(n===0||t.ignoreFailure===!0)return;let c=f.trim().length>0?`: ${f.trim()}`:"";throw Error(`Docker command failed (${u}) with exit ${n}${c}`)}async function zNl(i,t){let u=`deco-dev-link-toxiproxy-${i}`;await Pki(["rm","-f",u],{ignoreFailure:!0}),await Pki(["run","--rm","-d","--name",u,"-p",`127.0.0.1:${i}:8474`,"-p",`127.0.0.1:${t}:${t}`,"ghcr.io/shopify/toxiproxy:2.12.0","-host=0.0.0.0"])}async function bNl(i,t){let u=`deco-dev-link-toxiproxy-${i}`;await Pki(["rm","-f",u],{ignoreFailure:!0})}async function KNl(i){let t=oSt(i),u=i.startDaemon??zNl,l=i.stopDaemon??(i.startDaemon===void 0?bNl:void 0);await u(i.apiPort,i.listenPort);let n=i.fetchImpl??fetch;try{await jNl(t,n),await pSt(t,n)}catch(f){if(l!==void 0)try{await l(i.apiPort,i.listenPort)}catch{}throw f}return{config:t,stop:async()=>{if(l!==void 0)await l(i.apiPort,i.listenPort)}}}var aSt="ToxiProxy",mSt="dev_link_studio",ANl=20,VSt=100,GNl=100;var Gki=w(()=>{Rf()});var izt={};Gi(izt,{migrateBetterAuth:()=>Wki});import{getMigrations as HNl}from"better-auth/db";import{sso as RNl}from"@better-auth/sso";import{organization as LNl}from"@decocms/better-auth/plugins";import{admin as eNl,apiKey as CNl,jwt as MNl,magicLink as qNl,mcp as VNl,openAPI as aNl}from"better-auth/plugins";import{emailOTP as mNl}from"better-auth/plugins/email-otp";async function Wki(i){let u={database:jH(i||Gw()),plugins:[LNl({dynamicAccessControl:{enabled:!0,enableCustomResources:!0}}),eNl(),CNl(),MNl(),aNl(),VNl({loginPage:"/login"}),RNl(),qNl({sendMagicLink:async()=>{}}),mNl({sendVerificationOTP:async()=>{}})]},{toBeAdded:l,toBeCreated:n,runMigrations:f}=await HNl(u);if(!l.length&&!n.length)return"up to date";return await f(),`${n.length+l.length} table(s) migrated`}var kki=w(()=>{j$()});var jki={};Gi(jki,{up:()=>oNl,down:()=>sNl});import{sql as LE}from"kysely";async function oNl(i){await i.schema.createTable("connections").addColumn("id","text",(t)=>t.primaryKey()).addColumn("organizationId","text",(t)=>t.notNull().references("organization.id").onDelete("cascade")).addColumn("createdById","text",(t)=>t.notNull().references("user.id").onDelete("cascade")).addColumn("name","text",(t)=>t.notNull()).addColumn("description","text").addColumn("icon","text").addColumn("appName","text").addColumn("appId","text").addColumn("connectionType","text",(t)=>t.notNull()).addColumn("connectionUrl","text",(t)=>t.notNull()).addColumn("connectionToken","text").addColumn("connectionHeaders","text").addColumn("oauthConfig","text").addColumn("metadata","text").addColumn("tools","text").addColumn("bindings","text").addColumn("status","text",(t)=>t.notNull().defaultTo("active")).addColumn("createdAt","text",(t)=>t.notNull().defaultTo(LE`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(t)=>t.notNull().defaultTo(LE`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("api_keys").addColumn("id","text",(t)=>t.primaryKey()).addColumn("userId","text",(t)=>t.notNull().references("user.id").onDelete("cascade")).addColumn("name","text",(t)=>t.notNull()).addColumn("hashedKey","text",(t)=>t.notNull().unique()).addColumn("permissions","text",(t)=>t.notNull()).addColumn("expiresAt","text").addColumn("remaining","integer").addColumn("metadata","text").addColumn("createdAt","text",(t)=>t.notNull().defaultTo(LE`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(t)=>t.notNull().defaultTo(LE`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("audit_logs").addColumn("id","text",(t)=>t.primaryKey()).addColumn("organizationId","text").addColumn("userId","text",(t)=>t.references("user.id").onDelete("set null")).addColumn("connectionId","text",(t)=>t.references("connections.id").onDelete("set null")).addColumn("toolName","text",(t)=>t.notNull()).addColumn("allowed","integer",(t)=>t.notNull()).addColumn("duration","integer").addColumn("timestamp","text",(t)=>t.notNull().defaultTo(LE`CURRENT_TIMESTAMP`)).addColumn("requestMetadata","text").execute(),await i.schema.createTable("oauth_clients").addColumn("id","text",(t)=>t.primaryKey()).addColumn("clientId","text",(t)=>t.notNull().unique()).addColumn("clientSecret","text").addColumn("clientName","text",(t)=>t.notNull()).addColumn("redirectUris","text",(t)=>t.notNull()).addColumn("grantTypes","text",(t)=>t.notNull()).addColumn("scope","text").addColumn("clientUri","text").addColumn("logoUri","text").addColumn("createdAt","text",(t)=>t.notNull().defaultTo(LE`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("oauth_authorization_codes").addColumn("code","text",(t)=>t.primaryKey()).addColumn("clientId","text",(t)=>t.notNull().references("oauth_clients.clientId").onDelete("cascade")).addColumn("userId","text",(t)=>t.notNull().references("user.id").onDelete("cascade")).addColumn("redirectUri","text",(t)=>t.notNull()).addColumn("scope","text").addColumn("codeChallenge","text").addColumn("codeChallengeMethod","text").addColumn("expiresAt","text",(t)=>t.notNull()).addColumn("createdAt","text",(t)=>t.notNull().defaultTo(LE`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("oauth_refresh_tokens").addColumn("token","text",(t)=>t.primaryKey()).addColumn("clientId","text",(t)=>t.notNull().references("oauth_clients.clientId").onDelete("cascade")).addColumn("userId","text",(t)=>t.notNull().references("user.id").onDelete("cascade")).addColumn("scope","text").addColumn("expiresAt","text").addColumn("createdAt","text",(t)=>t.notNull().defaultTo(LE`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("downstream_tokens").addColumn("id","text",(t)=>t.primaryKey()).addColumn("connectionId","text",(t)=>t.notNull().references("connections.id").onDelete("cascade")).addColumn("userId","text",(t)=>t.references("user.id").onDelete("cascade")).addColumn("accessToken","text",(t)=>t.notNull()).addColumn("refreshToken","text").addColumn("scope","text").addColumn("expiresAt","text").addColumn("createdAt","text",(t)=>t.notNull().defaultTo(LE`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(t)=>t.notNull().defaultTo(LE`CURRENT_TIMESTAMP`)).execute(),await i.schema.createIndex("idx_connections_organizationId").on("connections").column("organizationId").execute(),await i.schema.createIndex("idx_audit_logs_organizationId").on("audit_logs").column("organizationId").execute(),await i.schema.createIndex("idx_audit_logs_userId").on("audit_logs").column("userId").execute(),await i.schema.createIndex("idx_audit_logs_timestamp").on("audit_logs").column("timestamp").execute()}async function sNl(i){await i.schema.dropTable("downstream_tokens").execute(),await i.schema.dropTable("oauth_refresh_tokens").execute(),await i.schema.dropTable("oauth_authorization_codes").execute(),await i.schema.dropTable("oauth_clients").execute(),await i.schema.dropTable("audit_logs").execute(),await i.schema.dropTable("api_keys").execute(),await i.schema.dropTable("connections").execute()}var tzt=()=>{};var Ski={};Gi(Ski,{up:()=>pNl,down:()=>iJl});import{sql as uzt}from"kysely";async function pNl(i){await i.schema.createTable("organization_settings").addColumn("organizationId","text",(t)=>t.primaryKey().references("organization.id").onDelete("cascade")).addColumn("modelsBindingConnectionId","text",(t)=>t.references("connections.id").onDelete("set null")).addColumn("createdAt","text",(t)=>t.notNull().defaultTo(uzt`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(t)=>t.notNull().defaultTo(uzt`CURRENT_TIMESTAMP`)).execute()}async function iJl(i){await i.schema.dropTable("organization_settings").execute()}var lzt=()=>{};var zki={};Gi(zki,{up:()=>tJl,down:()=>uJl});async function tJl(i){await i.schema.alterTable("connections").renameColumn("name","title").execute(),await i.schema.alterTable("connections").renameColumn("createdById","created_by").execute(),await i.schema.alterTable("connections").renameColumn("createdAt","created_at").execute(),await i.schema.alterTable("connections").renameColumn("updatedAt","updated_at").execute(),await i.schema.alterTable("connections").renameColumn("organizationId","organization_id").execute(),await i.schema.alterTable("connections").renameColumn("connectionType","connection_type").execute(),await i.schema.alterTable("connections").renameColumn("connectionUrl","connection_url").execute(),await i.schema.alterTable("connections").renameColumn("connectionToken","connection_token").execute(),await i.schema.alterTable("connections").renameColumn("connectionHeaders","connection_headers").execute(),await i.schema.alterTable("connections").renameColumn("oauthConfig","oauth_config").execute(),await i.schema.alterTable("connections").renameColumn("appName","app_name").execute(),await i.schema.alterTable("connections").renameColumn("appId","app_id").execute()}async function uJl(i){await i.schema.alterTable("connections").renameColumn("title","name").execute(),await i.schema.alterTable("connections").renameColumn("created_by","createdById").execute(),await i.schema.alterTable("connections").renameColumn("created_at","createdAt").execute(),await i.schema.alterTable("connections").renameColumn("updated_at","updatedAt").execute(),await i.schema.alterTable("connections").renameColumn("organization_id","organizationId").execute(),await i.schema.alterTable("connections").renameColumn("connection_type","connectionType").execute(),await i.schema.alterTable("connections").renameColumn("connection_url","connectionUrl").execute(),await i.schema.alterTable("connections").renameColumn("connection_token","connectionToken").execute(),await i.schema.alterTable("connections").renameColumn("connection_headers","connectionHeaders").execute(),await i.schema.alterTable("connections").renameColumn("oauth_config","oauthConfig").execute(),await i.schema.alterTable("connections").renameColumn("app_name","appName").execute(),await i.schema.alterTable("connections").renameColumn("app_id","appId").execute()}var bki={};Gi(bki,{up:()=>lJl,down:()=>nJl});async function lJl(i){await i.schema.createTable("organization_settings_new").addColumn("organizationId","text",(t)=>t.primaryKey().references("organization.id").onDelete("cascade")).addColumn("createdAt","text",(t)=>t.notNull()).addColumn("updatedAt","text",(t)=>t.notNull()).execute(),await i.insertInto("organization_settings_new").columns(["organizationId","createdAt","updatedAt"]).expression((t)=>t.selectFrom("organization_settings").select(["organizationId","createdAt","updatedAt"])).execute(),await i.schema.dropTable("organization_settings").execute(),await i.schema.alterTable("organization_settings_new").renameTo("organization_settings").execute()}async function nJl(i){await i.schema.createTable("organization_settings_new").addColumn("organizationId","text",(t)=>t.primaryKey().references("organization.id").onDelete("cascade")).addColumn("modelsBindingConnectionId","text",(t)=>t.references("connections.id").onDelete("set null")).addColumn("createdAt","text",(t)=>t.notNull()).addColumn("updatedAt","text",(t)=>t.notNull()).execute(),await i.insertInto("organization_settings_new").columns(["organizationId","modelsBindingConnectionId","createdAt","updatedAt"]).expression((t)=>t.selectFrom("organization_settings").select(["organizationId",t.val(null).as("modelsBindingConnectionId"),"createdAt","updatedAt"])).execute(),await i.schema.dropTable("organization_settings").execute(),await i.schema.alterTable("organization_settings_new").renameTo("organization_settings").execute()}var Kki={};Gi(Kki,{up:()=>fJl,down:()=>cJl});async function fJl(i){await i.schema.alterTable("connections").addColumn("configuration_state","text").execute(),await i.schema.alterTable("connections").addColumn("configuration_scopes","text").execute()}async function cJl(i){await i.schema.alterTable("connections").dropColumn("configuration_state").execute(),await i.schema.alterTable("connections").dropColumn("configuration_scopes").execute()}var Hki={};Gi(Hki,{up:()=>dJl,down:()=>_Jl});import{sql as $Jl}from"kysely";async function dJl(i){await i.schema.alterTable("organization_settings").addColumn("sidebar_items",$Jl`text`).execute()}async function _Jl(i){await i.schema.alterTable("organization_settings").dropColumn("sidebar_items").execute()}var nzt=()=>{};var Rki={};Gi(Rki,{up:()=>gJl,down:()=>hJl});async function gJl(i){await i.schema.createTable("monitoring_logs").addColumn("id","text",(t)=>t.primaryKey()).addColumn("organization_id","text",(t)=>t.notNull().references("organization.id").onDelete("cascade")).addColumn("connection_id","text",(t)=>t.notNull().references("connections.id").onDelete("cascade")).addColumn("connection_title","text",(t)=>t.notNull()).addColumn("tool_name","text",(t)=>t.notNull()).addColumn("input","text",(t)=>t.notNull()).addColumn("output","text",(t)=>t.notNull()).addColumn("is_error","integer",(t)=>t.notNull()).addColumn("error_message","text").addColumn("duration_ms","integer",(t)=>t.notNull()).addColumn("timestamp","text",(t)=>t.notNull()).addColumn("user_id","text").addColumn("request_id","text",(t)=>t.notNull()).execute(),await i.schema.createIndex("monitoring_logs_org_timestamp").on("monitoring_logs").columns(["organization_id","timestamp"]).execute(),await i.schema.createIndex("monitoring_logs_connection_timestamp").on("monitoring_logs").columns(["connection_id","timestamp"]).execute(),await i.schema.createIndex("monitoring_logs_is_error").on("monitoring_logs").columns(["organization_id","is_error","timestamp"]).execute()}async function hJl(i){await i.schema.dropIndex("monitoring_logs_is_error").execute(),await i.schema.dropIndex("monitoring_logs_connection_timestamp").execute(),await i.schema.dropIndex("monitoring_logs_org_timestamp").execute(),await i.schema.dropTable("monitoring_logs").execute()}var Lki={};Gi(Lki,{up:()=>EJl,down:()=>vJl});import{sql as rR}from"kysely";async function EJl(i){await i.schema.createTable("events").addColumn("id","text",(t)=>t.primaryKey()).addColumn("organization_id","text",(t)=>t.notNull().references("organization.id").onDelete("cascade")).addColumn("type","text",(t)=>t.notNull()).addColumn("source","text",(t)=>t.notNull()).addColumn("specversion","text",(t)=>t.notNull().defaultTo("1.0")).addColumn("subject","text").addColumn("time","text",(t)=>t.notNull()).addColumn("datacontenttype","text",(t)=>t.notNull().defaultTo("application/json")).addColumn("dataschema","text").addColumn("data","text").addColumn("cron","varchar(255)").addColumn("status","text",(t)=>t.notNull().defaultTo("pending")).addColumn("attempts","integer",(t)=>t.notNull().defaultTo(0)).addColumn("last_error","text").addColumn("next_retry_at","text").addColumn("created_at","text",(t)=>t.notNull().defaultTo(rR`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(t)=>t.notNull().defaultTo(rR`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("event_subscriptions").addColumn("id","text",(t)=>t.primaryKey()).addColumn("organization_id","text",(t)=>t.notNull().references("organization.id").onDelete("cascade")).addColumn("connection_id","text",(t)=>t.notNull().references("connections.id").onDelete("cascade")).addColumn("publisher","text").addColumn("event_type","text",(t)=>t.notNull()).addColumn("filter","text").addColumn("enabled","integer",(t)=>t.notNull().defaultTo(1)).addColumn("created_at","text",(t)=>t.notNull().defaultTo(rR`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(t)=>t.notNull().defaultTo(rR`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("event_deliveries").addColumn("id","text",(t)=>t.primaryKey()).addColumn("event_id","text",(t)=>t.notNull()).addColumn("subscription_id","text",(t)=>t.notNull().references("event_subscriptions.id").onDelete("cascade")).addColumn("status","text",(t)=>t.notNull().defaultTo("pending")).addColumn("attempts","integer",(t)=>t.notNull().defaultTo(0)).addColumn("last_error","text").addColumn("delivered_at","text").addColumn("next_retry_at","text").addColumn("created_at","text",(t)=>t.notNull().defaultTo(rR`CURRENT_TIMESTAMP`)).execute(),await i.schema.createIndex("idx_events_org_status").on("events").columns(["organization_id","status"]).execute(),await i.schema.createIndex("idx_events_source").on("events").columns(["source"]).execute(),await i.schema.createIndex("idx_events_type").on("events").columns(["type"]).execute(),await i.schema.createIndex("idx_events_retry").on("events").columns(["status","next_retry_at"]).execute(),await i.schema.createIndex("idx_subscriptions_connection").on("event_subscriptions").columns(["connection_id"]).execute(),await i.schema.createIndex("idx_subscriptions_type").on("event_subscriptions").columns(["event_type"]).execute(),await i.schema.createIndex("idx_subscriptions_org_enabled").on("event_subscriptions").columns(["organization_id","enabled"]).execute(),await i.schema.createIndex("idx_subscriptions_unique").on("event_subscriptions").columns(["connection_id","event_type","publisher","filter"]).unique().execute(),await i.schema.createIndex("idx_deliveries_event").on("event_deliveries").columns(["event_id"]).execute(),await i.schema.createIndex("idx_deliveries_subscription_status").on("event_deliveries").columns(["subscription_id","status"]).execute(),await i.schema.createIndex("idx_deliveries_retry").on("event_deliveries").columns(["status","next_retry_at"]).execute()}async function vJl(i){await i.schema.dropIndex("idx_deliveries_retry").execute(),await i.schema.dropIndex("idx_deliveries_subscription_status").execute(),await i.schema.dropIndex("idx_deliveries_event").execute(),await i.schema.dropIndex("idx_subscriptions_unique").execute(),await i.schema.dropIndex("idx_subscriptions_org_enabled").execute(),await i.schema.dropIndex("idx_subscriptions_type").execute(),await i.schema.dropIndex("idx_subscriptions_connection").execute(),await i.schema.dropIndex("idx_events_retry").execute(),await i.schema.dropIndex("idx_events_type").execute(),await i.schema.dropIndex("idx_events_source").execute(),await i.schema.dropIndex("idx_events_org_status").execute(),await i.schema.dropTable("event_deliveries").execute(),await i.schema.dropTable("event_subscriptions").execute(),await i.schema.dropTable("events").execute()}var fzt=()=>{};var eki={};Gi(eki,{up:()=>wJl,down:()=>xJl});import{sql as rJl}from"kysely";async function wJl(i){await i.schema.dropTable("audit_logs").ifExists().execute()}async function xJl(i){await i.schema.createTable("audit_logs").ifNotExists().addColumn("id","text",(t)=>t.primaryKey()).addColumn("organizationId","text").addColumn("userId","text",(t)=>t.references("user.id").onDelete("set null")).addColumn("connectionId","text",(t)=>t.references("connections.id").onDelete("set null")).addColumn("toolName","text",(t)=>t.notNull()).addColumn("allowed","integer",(t)=>t.notNull()).addColumn("duration","integer").addColumn("timestamp","text",(t)=>t.notNull().defaultTo(rJl`CURRENT_TIMESTAMP`)).addColumn("requestMetadata","text").execute(),await i.schema.createIndex("idx_audit_logs_organizationId").on("audit_logs").column("organizationId").execute(),await i.schema.createIndex("idx_audit_logs_userId").on("audit_logs").column("userId").execute(),await i.schema.createIndex("idx_audit_logs_timestamp").on("audit_logs").column("timestamp").execute()}var czt=()=>{};var Cki={};Gi(Cki,{up:()=>DJl,down:()=>OJl});import{sql as y0i}from"kysely";async function DJl(i){await i.schema.createTable("gateways").addColumn("id","text",(t)=>t.primaryKey()).addColumn("organization_id","text",(t)=>t.notNull().references("organization.id").onDelete("cascade")).addColumn("title","text",(t)=>t.notNull()).addColumn("description","text").addColumn("tool_selection_strategy","text").addColumn("status","text",(t)=>t.notNull().defaultTo("active")).addColumn("is_default","integer",(t)=>t.notNull().defaultTo(0)).addColumn("created_at","text",(t)=>t.notNull().defaultTo(y0i`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(t)=>t.notNull().defaultTo(y0i`CURRENT_TIMESTAMP`)).addColumn("created_by","text",(t)=>t.notNull().references("user.id").onDelete("cascade")).addColumn("updated_by","text").execute(),await i.schema.createTable("gateway_connections").addColumn("id","text",(t)=>t.primaryKey()).addColumn("gateway_id","text",(t)=>t.notNull().references("gateways.id").onDelete("cascade")).addColumn("connection_id","text",(t)=>t.notNull().references("connections.id").onDelete("cascade")).addColumn("selected_tools","text").addColumn("created_at","text",(t)=>t.notNull().defaultTo(y0i`CURRENT_TIMESTAMP`)).execute(),await i.schema.createIndex("idx_gateways_org").on("gateways").columns(["organization_id"]).execute(),await i.schema.createIndex("idx_gateways_org_status").on("gateways").columns(["organization_id","status"]).execute(),await y0i`CREATE UNIQUE INDEX idx_gateways_default_per_org ON gateways (organization_id) WHERE is_default = 1`.execute(i),await i.schema.createIndex("idx_gateway_connections_gateway").on("gateway_connections").columns(["gateway_id"]).execute(),await i.schema.createIndex("idx_gateway_connections_connection").on("gateway_connections").columns(["connection_id"]).execute(),await i.schema.createIndex("idx_gateway_connections_unique").on("gateway_connections").columns(["gateway_id","connection_id"]).unique().execute()}async function OJl(i){await i.schema.dropIndex("idx_gateway_connections_unique").execute(),await i.schema.dropIndex("idx_gateway_connections_connection").execute(),await i.schema.dropIndex("idx_gateway_connections_gateway").execute(),await i.schema.dropIndex("idx_gateways_default_per_org").execute(),await i.schema.dropIndex("idx_gateways_org_status").execute(),await i.schema.dropIndex("idx_gateways_org").execute(),await i.schema.dropTable("gateway_connections").execute(),await i.schema.dropTable("gateways").execute()}var $zt=()=>{};var Mki={};Gi(Mki,{up:()=>yJl,down:()=>XJl});async function yJl(i){await i.schema.alterTable("gateways").addColumn("icon","text").execute()}async function XJl(i){await i.schema.alterTable("gateways").dropColumn("icon").execute()}var qki={};Gi(qki,{up:()=>NJl,down:()=>JJl});import{sql as X0i}from"kysely";async function NJl(i){await i.schema.alterTable("gateways").addColumn("tool_selection_mode","text",(t)=>t.notNull().defaultTo("inclusion")).execute(),await X0i`
104812
104812
  UPDATE gateways
104813
104813
  SET tool_selection_mode = CASE
@@ -106861,7 +106861,7 @@ ${t}:`]}}function phu({id:i,model:t,created:u}){return{id:i!=null?i:void 0,model
106861
106861
  `.execute(i)).rows[0]?.exists)await q0`CREATE ROLE ${q0.id(u)} NOLOGIN`.execute(i);await q0`GRANT ${q0.id(u)} TO CURRENT_USER`.execute(i),await q0`GRANT USAGE, CREATE ON SCHEMA ${q0.id(t)} TO ${q0.id(u)}`.execute(i),await q0`GRANT ALL ON ALL TABLES IN SCHEMA ${q0.id(t)} TO ${q0.id(u)}`.execute(i),await q0`GRANT ALL ON ALL SEQUENCES IN SCHEMA ${q0.id(t)} TO ${q0.id(u)}`.execute(i),await q0`ALTER DEFAULT PRIVILEGES IN SCHEMA ${q0.id(t)} GRANT ALL ON TABLES TO ${q0.id(u)}`.execute(i),await q0`ALTER DEFAULT PRIVILEGES IN SCHEMA ${q0.id(t)} GRANT ALL ON SEQUENCES TO ${q0.id(u)}`.execute(i),await q0`REVOKE ALL ON SCHEMA public FROM ${q0.id(u)}`.execute(i)}async function Jh0(i,t,u,l){try{return await i.transaction().execute(async(n)=>{return await q0`SET LOCAL ROLE ${q0.id(u)}`.execute(n),await q0`SET LOCAL search_path TO ${q0.id(t)}`.execute(n),await q0.raw(l).execute(n)})}catch(n){if(Xh0(n))return await Nh0(i,t,u),await i.transaction().execute(async(f)=>{return await q0`SET LOCAL ROLE ${q0.id(u)}`.execute(f),await q0`SET LOCAL search_path TO ${q0.id(t)}`.execute(f),await q0.raw(l).execute(f)});throw n}}var wh0,Dh0,Yvu;var Avu=w(()=>{ai();wh0=jv.object({results:jv.array(jv.unknown()).optional(),success:jv.boolean().optional()});Dh0=jv.object({sql:jv.string().describe("The SQL query to run"),params:jv.array(jv.any()).describe("The parameters to pass to the SQL query").optional()});Yvu=li({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:Dh0,outputSchema:jv.object({result:jv.array(wh0)}),handler:async(i,t)=>{Ji(t),await t.access.check();let u=xh0(i.sql,i.params||[]);if(!t.connectionId)throw Error("Connection context required for database access");console.warn("DATABASES_RUN_SQL invoked",{"tool.deprecation_probe":"DATABASES_RUN_SQL","connection.id":t.connectionId,"organization.id":t.organization?.id??null,"user.id":t.auth.user?.id??null});let l=Oh0(t.connectionId),n=yh0(t.connectionId);return{result:[{results:(await Jh0(t.db,l,n,u)).rows,success:!0}]}}})});import{z as lg}from"zod";var Gvu,Fh0,Wvu;var $2=w(()=>{gC();Gvu=lg.object({connectionId:lg.string().optional().describe("Filter subscriptions by connection ID (optional)")}),Fh0=lg.object({id:lg.string().describe("Subscription ID"),connectionId:lg.string().describe("Subscriber connection ID"),eventType:lg.string().describe("Event type pattern"),publisher:lg.string().nullable().describe("Publisher connection filter (null = all publishers)"),filter:lg.string().nullable().describe("JSONPath filter expression"),enabled:lg.boolean().describe("Whether subscription is enabled"),createdAt:lg.string().datetime().describe("Created timestamp (ISO 8601)"),updatedAt:lg.string().datetime().describe("Updated timestamp (ISO 8601)")}),Wvu=lg.object({subscriptions:lg.array(Fh0).describe("List of subscriptions")})});var ami;var kvu=w(()=>{ai();$2();ami=li({name:"EVENT_PUBLISH",description:`Publish an event. Supports immediate, scheduled (deliverAt), and recurring (cron) delivery.
106862
106862
 
106863
106863
  - Source is auto-set to the caller's connection ID.
106864
- - Use EVENT_CANCEL to stop recurring events.`,annotations:{title:"Publish Event",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!1},inputSchema:oe,outputSchema:se,handler:async(i,t)=>{Ji(t);let u=hi(t);await t.access.check();let l=t.connectionId;if(!l)throw Error("Connection ID required to publish events. Use a connection-scoped token.");let n=await t.eventBus.publish(u.id,l,{type:i.type,subject:i.subject,data:i.data,deliverAt:i.deliverAt,cron:i.cron});return{id:n.id,type:n.type,source:n.source,time:n.time}}})});var mmi;var jvu=w(()=>{ai();$2();mmi=li({name:"EVENT_SUBSCRIBE",description:"Subscribe to events of a specific type. Caller's connection is set as subscriber automatically.",annotations:{title:"Subscribe to Events",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:pe,outputSchema:iC,handler:async(i,t)=>{Ji(t);let u=hi(t);await t.access.check();let l=t.connectionId;if(!l)throw Error("Connection ID required to subscribe. Use a connection-scoped token.");let n=await t.eventBus.subscribe(u.id,{connectionId:l,eventType:i.eventType,publisher:i.publisher,filter:i.filter});return{subscription:{id:n.id,connectionId:n.connectionId,eventType:n.eventType,publisher:n.publisher,filter:n.filter,enabled:n.enabled,createdAt:n.createdAt instanceof Date?n.createdAt.toISOString():n.createdAt,updatedAt:n.updatedAt instanceof Date?n.updatedAt.toISOString():n.updatedAt}}}})});var omi;var Svu=w(()=>{ai();$2();omi=li({name:"EVENT_UNSUBSCRIBE",description:"Remove a subscription to stop receiving events of that type.",annotations:{title:"Unsubscribe from Events",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:lC,outputSchema:nC,handler:async(i,t)=>{Ji(t);let u=hi(t);await t.access.check();let l=t.connectionId;if(!l)throw Error("Connection ID required to unsubscribe. Use a connection-scoped token.");let n=await t.eventBus.getSubscription(u.id,i.subscriptionId);if(!n)throw Error(`Subscription not found: ${i.subscriptionId}`);if(n.connectionId!==l)throw Error("Cannot unsubscribe from a subscription owned by another connection");return{success:(await t.eventBus.unsubscribe(u.id,i.subscriptionId)).success,subscriptionId:i.subscriptionId}}})});var smi;var zvu=w(()=>{ai();$2();smi=li({name:"EVENT_CANCEL",description:"Stop a recurring event from delivering further. Only the original publisher can cancel.",annotations:{title:"Cancel Recurring Event",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:fC,outputSchema:cC,handler:async(i,t)=>{Ji(t);let u=hi(t);await t.access.check();let l=t.connectionId;if(!l)throw Error("Connection ID required to cancel events. Use a connection-scoped token.");if(!await t.eventBus.getEvent(u.id,i.eventId))throw Error(`Event not found: ${i.eventId}`);if(!(await t.eventBus.cancelEvent(u.id,i.eventId,l)).success)throw Error("Failed to cancel event. Either the event is already completed/failed, or you are not the publisher.");return{success:!0,eventId:i.eventId}}})});var pmi;var bvu=w(()=>{ai();$2();pmi=li({name:"EVENT_ACK",description:"Acknowledge event delivery after processing. Only needed for events received with retryAfter.",annotations:{title:"Acknowledge Event",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:$C,outputSchema:dC,handler:async(i,t)=>{Ji(t);let u=hi(t);await t.access.check();let l=t.connectionId;if(!l)throw Error("Connection ID required to acknowledge events. Use a connection-scoped token.");if(!(await t.eventBus.ackEvent(u.id,i.eventId,l)).success)throw Error("Failed to acknowledge event. Either the event was not found, already delivered, or you are not a subscriber.");return{success:!0,eventId:i.eventId}}})});var ioi;var Kvu=w(()=>{ai();$2();ioi=li({name:"EVENT_SUBSCRIPTION_LIST",description:"List event subscriptions. Filter by connection ID to scope results.",annotations:{title:"List Event Subscriptions",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:Gvu,outputSchema:Wvu,handler:async(i,t)=>{Ji(t);let u=hi(t);return await t.access.check(),{subscriptions:(await t.eventBus.listSubscriptions(u.id,i.connectionId)).map((n)=>({id:n.id,connectionId:n.connectionId,eventType:n.eventType,publisher:n.publisher,filter:n.filter,enabled:n.enabled,createdAt:n.createdAt instanceof Date?n.createdAt.toISOString():n.createdAt,updatedAt:n.updatedAt instanceof Date?n.updatedAt.toISOString():n.updatedAt}))}}})});var toi;var Hvu=w(()=>{ai();$2();toi=li({name:"EVENT_SYNC_SUBSCRIPTIONS",description:"Declaratively sync subscriptions: creates new, deletes removed, updates changed filters.",annotations:{title:"Sync Event Subscriptions",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:tC,outputSchema:uC,handler:async(i,t)=>{Ji(t);let u=hi(t);await t.access.check();let l=t.connectionId;if(!l)throw Error("Connection ID required to sync subscriptions. Use a connection-scoped token.");let n=await t.eventBus.syncSubscriptions(u.id,{connectionId:l,subscriptions:i.subscriptions});return{created:n.created,updated:n.updated,deleted:n.deleted,unchanged:n.unchanged,subscriptions:n.subscriptions.map((f)=>({id:f.id,connectionId:f.connectionId,eventType:f.eventType,publisher:f.publisher,filter:f.filter,enabled:f.enabled,createdAt:f.createdAt instanceof Date?f.createdAt.toISOString():f.createdAt,updatedAt:f.updatedAt instanceof Date?f.updatedAt.toISOString():f.updatedAt}))}}})});var Rvu=w(()=>{kvu();jvu();Svu();zvu();bvu();Kvu();Hvu();$2()});var qy=w(()=>{xfi()});function Gdi(i){let t=i.access.getRole();if(!t||!Tv.includes(t))throw new yy("Only organization owners and admins can change org-wide pin status")}var uoi=w(()=>{Jy();dS()});import{z as Cvu}from"zod";function Ih0(){let i=Lvu[Math.floor(Math.random()*Lvu.length)];return`icon://${evu[Math.floor(Math.random()*evu.length)]}?color=${i}`}var Lvu,evu,Zh0,Bh0,loi;var Mvu=w(()=>{ai();qy();uoi();Lvu=["red","orange","amber","yellow","lime","green","emerald","cyan","sky","blue","indigo","violet","purple","fuchsia","pink","rose"],evu=["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"];Zh0=Cvu.object({data:gL.describe("Data for the new virtual MCP")}),Bh0=Cvu.object({item:q$.describe("The created virtual MCP entity")}),loi=li({name:"COLLECTION_VIRTUAL_MCP_CREATE",description:"Create a Virtual MCP that aggregates tools from multiple connections into one endpoint.",annotations:{title:"Create Virtual MCP",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:Zh0,outputSchema:Bh0,handler:async(i,t)=>{Ji(t);let u=hi(t);await t.access.check();let l=Ou(t);if(!l)throw Error("User ID required to create virtual MCP");if(i.data.pinned===!0)Gdi(t);let n={...i.data,icon:i.data.icon??Ih0()};return{item:await t.storage.virtualMcps.create(u.id,l,n)}}})});function Qh0(i){let t=[],u=0;while(u<i.length){let l=i[u];if(l==="%")t.push(".*");else if(l==="_")t.push(".");else if(/[.*+?^${}()|[\]\\]/.test(l))t.push("\\"+l);else t.push(l);u++}return t.join("")}function G5(i){return typeof i==="string"||typeof i==="number"}function noi(i,t){let u=t.split("."),l=i;for(let n of u){if(l==null||typeof l!=="object")return;l=l[n]}return l}function Ph0(i,t){return i.connections.some((u)=>u.connection_id===t)}function Wdi(i,t){if("conditions"in t){let{operator:$,conditions:d}=t;switch($){case"and":return d.every((_)=>Wdi(i,_));case"or":return d.some((_)=>Wdi(i,_));case"not":return!d.every((_)=>Wdi(i,_));default:return!0}}let{field:u,operator:l,value:n}=t,f=u.join(".");if(f==="connection_id"){if(l!=="eq"||typeof n!=="string")return!1;return Ph0(i,n)}let c=noi(i,f);switch(l){case"eq":return c===n;case"gt":return G5(c)&&G5(n)&&c>n;case"gte":return G5(c)&&G5(n)&&c>=n;case"lt":return G5(c)&&G5(n)&&c<n;case"lte":return G5(c)&&G5(n)&&c<=n;case"in":return Array.isArray(n)&&n.includes(c);case"like":if(typeof c!=="string"||typeof n!=="string")return!1;if(n.length>100)return!1;let $=Qh0(n);return new RegExp(`^${$}$`,"i").test(c);case"contains":if(typeof c!=="string"||typeof n!=="string")return!1;return c.toLowerCase().includes(n.toLowerCase());default:return!0}}function Yh0(i,t){return[...i].sort((u,l)=>{for(let n of t){let f=n.field.join("."),c=noi(u,f),$=noi(l,f),d=0;if(c==null&&$==null)continue;if(c==null)d=n.nulls==="first"?-1:1;else if($==null)d=n.nulls==="first"?1:-1;else if(typeof c==="string"&&typeof $==="string")d=c.localeCompare($);else if(typeof c==="number"&&typeof $==="number")d=c-$;else d=String(c).localeCompare(String($));if(d!==0)return n.direction==="desc"?-d:d}return 0})}var Ah0,Gh0,foi;var qvu=w(()=>{jd();ai();qy();Ah0=Nh,Gh0=y3(q$),foi=li({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:Ah0,outputSchema:Gh0,handler:async(i,t)=>{await t.access.check();let u=hi(t),l=i.where&&!("conditions"in i.where)&&i.where.field.join(".")==="connection_id"&&i.where.operator==="eq"&&typeof i.where.value==="string"?i.where.value:void 0,n=i.where&&!("conditions"in i.where)&&i.where.field.join(".")==="pinned"&&i.where.operator==="eq"&&typeof i.where.value==="boolean"?i.where.value:void 0,c=l?await t.storage.virtualMcps.listByConnectionId(u.id,l):await t.storage.virtualMcps.list(u.id,n!==void 0?{pinnedOnly:n}:void 0);if(i.where)c=c.filter((E)=>Wdi(E,i.where));if(i.orderBy&&i.orderBy.length>0)c=Yh0(c,i.orderBy);let $=c.length,d=i.offset??0,_=i.limit??100,g=c.slice(d,d+_),h=d+_<$;return{items:g,totalCount:$,hasMore:h}}})});import{z as coi}from"zod";var Wh0,kh0,$oi;var Vvu=w(()=>{ai();qy();Wh0=coi.object({id:coi.string().describe("ID of the virtual MCP to retrieve")}),kh0=coi.object({item:q$.nullable().describe("The retrieved virtual MCP, or null if not found")}),$oi=li({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:Wh0,outputSchema:kh0,handler:async(i,t)=>{Ji(t);let u=hi(t);await t.access.check();let l=await t.storage.virtualMcps.findById(i.id);if(l&&l.organization_id!==u.id)return{item:null};if(!l)return{item:null};return{item:l}}})});import{z as doi}from"zod";var jh0,Sh0,_oi;var avu=w(()=>{ai();qy();uoi();jh0=doi.object({id:doi.string().describe("ID of the virtual MCP to update"),data:hL.describe("Partial virtual MCP data to update")}),Sh0=doi.object({item:q$.describe("The updated virtual MCP entity")}),_oi=li({name:"COLLECTION_VIRTUAL_MCP_UPDATE",description:"Update a Virtual MCP's name, slug, or connection list.",annotations:{title:"Update Virtual MCP",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:jh0,outputSchema:Sh0,handler:async(i,t)=>{Ji(t);let u=hi(t);await t.access.check();let l=Ou(t);if(!l)throw Error("User ID required to update virtual MCP");let n=await t.storage.virtualMcps.findById(i.id);if(!n)throw Error(`Virtual MCP not found: ${i.id}`);if(n.organization_id!==u.id)throw Error(`Virtual MCP not found: ${i.id}`);let f={...i.data};if(f.metadata&&n.metadata)f.metadata={...n.metadata,...f.metadata};if(f.pinned!==void 0&&f.pinned!==n.pinned)Gdi(t);return{item:await t.storage.virtualMcps.update(i.id,l,f)}}})});import{z as goi}from"zod";var zh0,bh0,hoi;var mvu=w(()=>{eS();Wv();ai();qy();zh0=goi.object({id:goi.string().describe("ID of the virtual MCP to delete")}),bh0=goi.object({item:q$.describe("The deleted virtual MCP entity")}),hoi=li({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:zh0,outputSchema:bh0,handler:async(i,t)=>{Ji(t);let u=hi(t);await t.access.check();let l=await t.storage.virtualMcps.findById(i.id);if(!l)throw Error(`Virtual MCP not found: ${i.id}`);if(l.organization_id!==u.id)throw Error(`Virtual MCP not found: ${i.id}`);await t.storage.virtualMcps.delete(i.id);let n=l.metadata?.githubRepo?.connectionId;if(n)try{let f=await t.storage.connections.findById(n,u.id);if(f&&kv(f)){let $=await new C1(t.db,t.vault).get(n);if($?.accessToken)try{await fetch("https://api.github.com/installation/token",{method:"DELETE",headers:{Authorization:`Bearer ${$.accessToken}`,Accept:"application/vnd.github+json","X-GitHub-Api-Version":"2022-11-28"},signal:AbortSignal.timeout(5000)})}catch{}await t.storage.connections.delete(n)}}catch(f){console.error("[VIRTUAL_MCP_DELETE] failed to tear down repo-scoped connection",{childConnectionId:n,error:f.message})}return{item:l}}})});import{z as md}from"zod";var Kh0,Eoi;var ovu=w(()=>{ai();Kh0=md.object({id:md.string(),virtualMcpId:md.string(),pluginId:md.string(),connectionId:md.string().nullable(),settings:md.record(md.string(),md.unknown()).nullable(),createdAt:md.string(),updatedAt:md.string()}),Eoi=li({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:md.object({virtualMcpId:md.string().describe("Virtual MCP ID"),pluginId:md.string().describe("Plugin ID")}),outputSchema:md.object({config:Kh0.nullable()}),handler:async(i,t)=>{Ji(t),await t.access.check();let{virtualMcpId:u,pluginId:l}=i,n=await t.storage.virtualMcpPluginConfigs.get(u,l);if(!n)return{config:null};return{config:{id:n.id,virtualMcpId:n.virtualMcpId,pluginId:n.pluginId,connectionId:n.connectionId,settings:n.settings,createdAt:n.createdAt instanceof Date?n.createdAt.toISOString():n.createdAt,updatedAt:n.updatedAt instanceof Date?n.updatedAt.toISOString():n.updatedAt}}}})});import{z as i4}from"zod";var Hh0,voi;var svu=w(()=>{ai();Lk();Ud();Hh0=i4.object({id:i4.string(),virtualMcpId:i4.string(),pluginId:i4.string(),connectionId:i4.string().nullable(),settings:i4.record(i4.string(),i4.unknown()).nullable(),createdAt:i4.string(),updatedAt:i4.string()}),voi=li({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:i4.object({virtualMcpId:i4.string().describe("Virtual MCP ID"),pluginId:i4.string().describe("Plugin ID"),connectionId:i4.string().nullable().optional().describe("MCP connection to bind"),settings:i4.record(i4.string(),i4.unknown()).nullable().optional().describe("Plugin-specific settings")}),outputSchema:i4.object({config:Hh0}),handler:async(i,t)=>{Ji(t),await t.access.check();let{virtualMcpId:u,pluginId:l,connectionId:n,settings:f}=i,c=Ou(t),$=await t.storage.connections.findById(u);if(!$)throw Error(`Connection not found: ${u}`);let d=n?await t.storage.connections.findById(n):null;if(n&&$.organization_id&&!d&&Ih()){if(G1i(n,$.organization_id)){if(!c)throw Error("User ID required to create dev-assets connection");let g=Rk($.organization_id,Hc());await t.storage.connections.create({...g,organization_id:$.organization_id,created_by:c})}}let _=await t.storage.virtualMcpPluginConfigs.upsert(u,l,{connectionId:n,settings:f});return{config:{id:_.id,virtualMcpId:_.virtualMcpId,pluginId:_.pluginId,connectionId:_.connectionId,settings:_.settings,createdAt:_.createdAt instanceof Date?_.createdAt.toISOString():_.createdAt,updatedAt:_.updatedAt instanceof Date?_.updatedAt.toISOString():_.updatedAt}}}})});import{z as nd}from"zod";var Rh0,roi;var pvu=w(()=>{ai();qy();Rh0=nd.object({connectionId:nd.string(),toolName:nd.string(),label:nd.string(),icon:nd.string().nullable().optional()}),roi=li({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:nd.object({virtualMcpId:nd.string().describe("Virtual MCP ID"),pinnedViews:nd.array(Rh0).describe("Pinned views to set for the virtual MCP sidebar"),layout:nd.object({defaultMainView:nd.object({type:nd.string(),id:nd.string().optional(),toolName:nd.string().optional()}).nullable().optional(),chatDefaultOpen:nd.boolean().nullable().optional()}).optional()}),outputSchema:nd.object({item:q$.nullable()}),handler:async(i,t)=>{Ji(t);let u=hi(t);await t.access.check();let{virtualMcpId:l,pinnedViews:n,layout:f}=i,c=Ou(t),$=await t.storage.virtualMcps.findById(l);if(!$)throw Error(`Virtual MCP not found: ${l}`);if($.organization_id!==u.id)throw Error(`Virtual MCP not found: ${l}`);let d=$.metadata?.ui??{},_={...d,pinnedViews:n.length>0?n:null,layout:f??d.layout??null};return{item:await t.storage.virtualMcps.update(l,c??"system",{metadata:{...$.metadata,ui:_}})}}})});import{z as d2}from"zod";var Lh0,eh0,woi;var iru=w(()=>{ai();Lh0=d2.object({ids:d2.array(d2.string()).describe("Virtual MCP ids to look up")}),eh0=d2.object({items:d2.array(d2.object({id:d2.string(),last_used_at:d2.string().optional(),last_used_by:d2.string().optional()}))}),woi=li({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:Lh0,outputSchema:eh0,handler:async(i,t)=>{Ji(t),hi(t),await t.access.check();let u=await t.storage.threads.findLastUsedByVirtualMcpIds(i.ids);return{items:i.ids.map((l)=>({id:l,last_used_at:u.get(l)?.last_used_at,last_used_by:u.get(l)?.last_used_by}))}}})});var tru=w(()=>{Mvu();qvu();Vvu();avu();mvu();ovu();svu();pvu();iru()});import{z as zf}from"zod";var xoi;var uru=w(()=>{p1();ai();xoi=li({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:zf.object({id:zf.string().describe("Log ID to fetch")}),outputSchema:zf.object({log:zf.object({id:zf.string().optional(),organizationId:zf.string(),connectionId:zf.string(),toolName:zf.string(),input:zf.record(zf.string(),zf.unknown()),output:zf.record(zf.string(),zf.unknown()),isError:zf.boolean(),errorMessage:zf.string().nullish(),durationMs:zf.number(),timestamp:zf.string(),userId:zf.string().nullish(),requestId:zf.string(),userAgent:zf.string().nullish(),virtualMcpId:zf.string().nullish(),properties:zf.record(zf.string(),zf.string()).nullish()}).nullable().describe("The monitoring log, or null if not found")}),handler:async(i,t)=>{await t.access.check(),await Sg();let u=hi(t),l=await t.storage.monitoring.getById(u.id,i.id);if(!l)return{log:null};return{log:{...l,timestamp:l.timestamp instanceof Date?l.timestamp.toISOString():l.timestamp}}}})});import{z as Ql}from"zod";var Mh0,Doi;var lru=w(()=>{p1();ai();Mh0=Ql.object({id:Ql.string().optional().describe("Unique log identifier"),organizationId:Ql.string().describe("Organization ID"),connectionId:Ql.string().describe("Connection ID"),toolName:Ql.string().describe("Name of the tool that was called"),isError:Ql.boolean().describe("Whether the call resulted in an error"),errorMessage:Ql.string().nullish().describe("Error message if applicable"),durationMs:Ql.number().describe("Call duration in milliseconds"),timestamp:Ql.string().describe("ISO 8601 timestamp of the call"),userId:Ql.string().nullish().describe("User who triggered the call"),requestId:Ql.string().describe("Unique request identifier"),userAgent:Ql.string().nullish().describe("Client identifier (x-mesh-client header)"),virtualMcpId:Ql.string().nullish().describe("Virtual MCP (Agent) ID if routed through an agent"),properties:Ql.record(Ql.string(),Ql.string()).nullish().describe("Custom key-value metadata attached to the log")}),Doi=li({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:Ql.object({connectionId:Ql.string().optional().describe("Filter by connection ID"),excludeConnectionIds:Ql.array(Ql.string()).optional().describe("Exclude logs from these connection IDs (e.g. system connections)"),virtualMcpId:Ql.string().optional().describe("Filter by Virtual MCP (Agent) ID"),toolName:Ql.string().optional().describe("Filter by tool name"),isError:Ql.boolean().optional().describe("Filter by error status"),startDate:Ql.string().datetime().optional().describe("Filter by start date (ISO 8601 datetime string)"),endDate:Ql.string().datetime().optional().describe("Filter by end date (ISO 8601 datetime string)"),limit:Ql.number().default(20).describe("Maximum number of results"),offset:Ql.number().default(0).describe("Offset for pagination"),properties:Ql.record(Ql.string(),Ql.string()).optional().describe("Filter by exact property key=value matches"),propertyKeys:Ql.array(Ql.string()).optional().describe("Filter by logs that have these property keys"),propertyPatterns:Ql.record(Ql.string(),Ql.string()).optional().describe("Filter by property value patterns (SQL LIKE, use % as wildcard)"),propertyInValues:Ql.record(Ql.string(),Ql.string()).optional().describe("Filter by exact match within comma-separated values (e.g., user_tags in 'Engineering')")}),outputSchema:Ql.object({logs:Ql.array(Mh0).describe("Array of monitoring logs"),total:Ql.number().describe("Total number of logs matching filters"),offset:Ql.number().describe("Current offset for pagination"),limit:Ql.number().describe("Current limit for pagination")}),handler:async(i,t)=>{await Sg();let u=hi(t),n=i.properties||i.propertyKeys||i.propertyPatterns||i.propertyInValues?{properties:i.properties,propertyKeys:i.propertyKeys,propertyPatterns:i.propertyPatterns,propertyInValues:i.propertyInValues}:void 0,f={organizationId:u.id,connectionId:i.connectionId,excludeConnectionIds:i.excludeConnectionIds,virtualMcpId:i.virtualMcpId,toolName:i.toolName,isError:i.isError,startDate:i.startDate?new Date(i.startDate):void 0,endDate:i.endDate?new Date(i.endDate):void 0,limit:i.limit,offset:i.offset,propertyFilters:n},c=await t.storage.monitoring.query(f);return{logs:c.logs.map(({input:$,output:d,..._})=>({..._,timestamp:_.timestamp instanceof Date?_.timestamp.toISOString():_.timestamp})),total:c.total,offset:i.offset,limit:i.limit}}})});import{z as yu}from"zod";var Ooi;var nru=w(()=>{p1();ai();Ooi=li({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:yu.object({startDate:yu.string().datetime().optional().describe("Filter by start date (ISO 8601 datetime string)"),endDate:yu.string().datetime().optional().describe("Filter by end date (ISO 8601 datetime string)"),interval:yu.string().regex(/^\d+[mhd]$/).optional().describe("Bucket interval for timeseries data (e.g. 1m, 5m, 2h, 1d). When provided, returns timeseries array."),connectionIds:yu.array(yu.string()).max(100).optional().describe("Filter by specific connection IDs (max 100)"),excludeConnectionIds:yu.array(yu.string()).max(100).optional().describe("Exclude specific connection IDs (max 100)"),toolNames:yu.array(yu.string()).max(100).optional().describe("Filter by specific tool names (max 100)"),status:yu.enum(["success","error"]).optional().describe("Filter metrics by execution status"),topN:yu.number().int().min(1).max(20).optional().describe("When provided with interval, also return top tools and their timeseries"),userIds:yu.array(yu.string()).max(100).optional().describe("Filter LLM usage by user IDs (only applied when llmUsage is true)"),llmUsage:yu.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:yu.object({totalCalls:yu.number().describe("Total number of tool calls"),errorRate:yu.number().optional().describe("Error rate as a decimal (0 to 1)"),avgDurationMs:yu.number().describe("Average call duration in milliseconds"),errorRatePercent:yu.string().optional().describe("Error rate as a percentage string"),totalErrors:yu.number().optional().describe("Total number of errors"),p50DurationMs:yu.number().optional().describe("50th percentile duration in milliseconds"),p95DurationMs:yu.number().optional().describe("95th percentile duration in milliseconds"),connectionBreakdown:yu.array(yu.object({connectionId:yu.string(),calls:yu.number(),errors:yu.number(),errorRate:yu.number(),avgDurationMs:yu.number()})).optional().describe("Per-connection metric breakdown"),totalInputTokens:yu.number().optional().describe("Total input tokens (LLM usage mode)"),totalOutputTokens:yu.number().optional().describe("Total output tokens (LLM usage mode)"),totalTokens:yu.number().optional().describe("Total tokens (LLM usage mode)"),totalCostUsd:yu.number().optional().describe("Total USD cost (LLM usage mode; only non-zero for providers that report cost)"),topTools:yu.array(yu.object({toolName:yu.string(),connectionId:yu.string().nullable(),calls:yu.number(),inputTokens:yu.number().optional(),outputTokens:yu.number().optional(),costUsd:yu.number().optional()})).optional().describe("Top tools ranked by calls"),topToolsTimeseries:yu.array(yu.object({timestamp:yu.string(),toolName:yu.string(),calls:yu.number(),errors:yu.number(),avg:yu.number(),p95:yu.number()})).optional().describe("Per-tool metric timeseries for the top tools"),timeseries:yu.array(yu.object({timestamp:yu.string(),calls:yu.number(),errors:yu.number(),errorRate:yu.number(),avg:yu.number(),p50:yu.number(),p95:yu.number(),inputTokens:yu.number().optional(),outputTokens:yu.number().optional(),totalTokens:yu.number().optional(),costUsd:yu.number().optional()})).optional().describe("Timeseries data points bucketed by interval")}),handler:async(i,t)=>{let u=hi(t);if(await t.access.check(),await Sg(),i.interval&&i.llmUsage)return t.storage.monitoring.queryLlmUsageStats({organizationId:u.id,interval:i.interval,connectionId:i.connectionIds?.[0]??"decopilot",startDate:i.startDate?new Date(i.startDate):void 0,endDate:i.endDate?new Date(i.endDate):void 0,userIds:i.userIds,topN:i.topN});if(i.interval){let n=await t.storage.monitoring.queryMetricTimeseries({organizationId:u.id,interval:i.interval,startDate:i.startDate?new Date(i.startDate):void 0,endDate:i.endDate?new Date(i.endDate):void 0,filters:{connectionIds:i.connectionIds,excludeConnectionIds:i.excludeConnectionIds,toolNames:i.toolNames,status:i.status}});if(!i.topN)return n;let f=await t.storage.monitoring.queryMetricTopToolsTimeseries({organizationId:u.id,interval:i.interval,startDate:i.startDate?new Date(i.startDate):void 0,endDate:i.endDate?new Date(i.endDate):void 0,topN:i.topN,filters:{connectionIds:i.connectionIds,excludeConnectionIds:i.excludeConnectionIds,toolNames:i.toolNames,status:i.status}});return{...n,topTools:f.topTools,topToolsTimeseries:f.timeseries}}let l=await t.storage.monitoring.getStats({organizationId:u.id,startDate:i.startDate?new Date(i.startDate):void 0,endDate:i.endDate?new Date(i.endDate):void 0});return{...l,errorRatePercent:(l.errorRate*100).toFixed(2)}}})});import{z as fd}from"zod";var yoi;var fru=w(()=>{p1();ai();yoi=li({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:fd.object({threadIds:fd.array(fd.string()).min(1).max(500).describe("Thread IDs to aggregate usage for (max 500)"),connectionId:fd.string().optional().describe("LLM connection ID (defaults to 'decopilot')"),startDate:fd.string().datetime().optional().describe("Filter by start date (ISO 8601 datetime string)"),endDate:fd.string().datetime().optional().describe("Filter by end date (ISO 8601 datetime string)")}),outputSchema:fd.object({items:fd.array(fd.object({threadId:fd.string(),calls:fd.number(),inputTokens:fd.number(),outputTokens:fd.number(),totalTokens:fd.number(),costUsd:fd.number()}))}),handler:async(i,t)=>{let u=hi(t);return await t.access.check(),await Sg(),{items:await t.storage.monitoring.queryThreadUsage({organizationId:u.id,connectionId:i.connectionId??"decopilot",threadIds:i.threadIds,startDate:i.startDate?new Date(i.startDate):void 0,endDate:i.endDate?new Date(i.endDate):void 0})}}})});var cru=w(()=>{uru();lru();nru();fru()});import{z as ng}from"zod";var Xoi;var $ru=w(()=>{ai();Xoi=li({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:ng.object({slug:ng.string().min(1).max(50).regex(/^[a-z0-9-]+$/,"Slug must be lowercase alphanumeric with hyphens"),name:ng.string().min(1).max(255),description:ng.string().optional()}),outputSchema:ng.object({id:ng.string(),name:ng.string(),slug:ng.string(),logo:ng.string().nullable().optional(),metadata:ng.any().optional(),createdAt:ng.string().datetime().describe("ISO 8601 timestamp"),members:ng.array(ng.any()).optional()}),handler:async(i,t)=>{Ji(t),await t.access.check();let u=Ou(t);if(!u)throw Error("User ID required to create organization");let l=await t.boundAuth.organization.create({name:i.name,slug:i.slug,metadata:i.description?{description:i.description}:void 0,userId:u});if(!l)throw Error("Failed to create organization");return{...l,createdAt:l.createdAt instanceof Date?l.createdAt.toISOString():l.createdAt}}})});import{z as Vh}from"zod";var Noi;var dru=w(()=>{ai();Noi=li({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:Vh.object({userId:Vh.string().optional()}),outputSchema:Vh.object({organizations:Vh.array(Vh.object({id:Vh.string(),name:Vh.string(),slug:Vh.string(),logo:Vh.string().nullable().optional(),metadata:Vh.any().optional(),createdAt:Vh.string().datetime().describe("ISO 8601 timestamp")}))}),handler:async(i,t)=>{Ji(t),await t.access.check();let u=Ou(t),l=i.userId||u;if(!l)throw Error("User ID required to list organizations");return{organizations:(await t.boundAuth.organization.list(l)).map((f)=>({...f,createdAt:f.createdAt instanceof Date?f.createdAt.toISOString():f.createdAt}))}}})});import{z as J6}from"zod";var Joi;var _ru=w(()=>{ai();Joi=li({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:J6.object({}),outputSchema:J6.object({id:J6.string(),name:J6.string(),slug:J6.string(),logo:J6.string().nullable().optional(),metadata:J6.any().optional(),createdAt:J6.string().datetime().describe("ISO 8601 timestamp"),members:J6.array(J6.any()).optional(),invitations:J6.array(J6.any()).optional()}),handler:async(i,t)=>{Ji(t),await t.access.check();let u=t.organization?.id;if(!u)throw Error("Organization ID required (no active organization in context)");let l=await t.boundAuth.organization.get(u);if(!l)throw Error("No active organization found");let n=new Date,f=l.invitations?.filter((c)=>new Date(c.expiresAt)>n);return{...l,invitations:f,createdAt:l.createdAt instanceof Date?l.createdAt.toISOString():l.createdAt}}})});import{z as ah}from"zod";var Uoi;var gru=w(()=>{ai();Uoi=li({name:"ORGANIZATION_UPDATE",description:"Update an organization's name or description.",annotations:{title:"Update Organization",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:ah.object({id:ah.string(),name:ah.string().min(1).max(255).optional(),description:ah.string().optional()}),outputSchema:ah.object({id:ah.string(),name:ah.string(),slug:ah.string(),logo:ah.string().nullable().optional(),metadata:ah.any().optional(),createdAt:ah.string().datetime().describe("ISO 8601 timestamp")}),handler:async(i,t)=>{Ji(t),await t.access.check();let u={};if(i.name)u.name=i.name;if(i.description)u.metadata={description:i.description};let l=await t.boundAuth.organization.update({organizationId:i.id,data:u});if(!l)throw Error("Failed to update organization");return{...l,createdAt:l.createdAt instanceof Date?l.createdAt.toISOString():l.createdAt}}})});import{z as uV}from"zod";var Foi;var hru=w(()=>{ai();Foi=li({name:"ORGANIZATION_DELETE",description:"Archive an organization (soft delete).",annotations:{title:"Delete Organization",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:uV.object({id:uV.string()}),outputSchema:uV.object({success:uV.boolean(),id:uV.string()}),handler:async(i,t)=>{return Ji(t),await t.access.check(),await t.boundAuth.organization.update({organizationId:i.id,data:{metadata:{archived:!0,archivedAt:new Date().toISOString()}}}),{success:!0,id:i.id}}})});import{z as cl}from"zod";var nV,fV,lV,Eru,kdi,cV,$V,W5;var _2=w(()=>{nV=cl.object({title:cl.string(),url:cl.string(),icon:cl.string()}),fV=cl.object({registries:cl.record(cl.string(),cl.object({enabled:cl.boolean()})).describe("Per-registry enabled/disabled state. Key is connection ID. Absent registries are treated as enabled."),blockedMcps:cl.array(cl.string()).describe("List of MCP app_name or app_id values to hide from the store.")}),lV=cl.object({keyId:cl.string(),modelId:cl.string(),title:cl.string().optional()}).nullable(),Eru=cl.enum(["fast","smart","thinking","image","web_research"]),kdi=cl.enum(["fast","smart","thinking"]),cV=cl.object({tiers:cl.object({fast:lV,smart:lV,thinking:lV,image:lV,web_research:lV})}),$V=cl.object({ids:cl.array(cl.string()).describe("Ordered list of custom virtual MCP agent ids to show on the home view.")}),W5=cl.object({id:cl.string().describe("Brand context ID"),name:cl.string().describe("Company name"),domain:cl.string().describe("Company domain (e.g. example.com)"),overview:cl.string().describe("Company overview / description"),logo:cl.string().nullable().optional().describe("Logo URL"),favicon:cl.string().nullable().optional().describe("Favicon URL"),ogImage:cl.string().nullable().optional().describe("OG image URL"),fonts:cl.object({heading:cl.string().optional().describe("Font family for headings"),body:cl.string().optional().describe("Font family for body text"),code:cl.string().optional().describe("Font family for code / monospace")}).nullable().optional().describe("Font families by semantic role"),colors:cl.object({primary:cl.string().optional().describe("Primary brand color (hex)"),secondary:cl.string().optional().describe("Secondary brand color (hex)"),accent:cl.string().optional().describe("Accent / highlight color (hex)"),background:cl.string().optional().describe("Background color (hex)"),foreground:cl.string().optional().describe("Foreground / text color (hex)")}).nullable().optional().describe("Semantic color palette"),images:cl.array(cl.record(cl.string(),cl.unknown())).nullable().optional().describe("Brand images"),metadata:cl.record(cl.string(),cl.unknown()).nullable().optional().describe("Extra design tokens (typography, components, spacing, layout, tone, etc.)"),archivedAt:cl.string().nullable().optional().describe("Archive timestamp (null to unarchive)"),isDefault:cl.boolean().optional().describe("Whether this is the default brand for the organization")})});import{z as k5}from"zod";var Toi;var vru=w(()=>{ai();_2();Toi=li({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:k5.object({}),outputSchema:k5.object({organizationId:k5.string(),sidebar_items:k5.array(nV).nullable().optional(),enabled_plugins:k5.array(k5.string()).nullable().optional(),registry_config:fV.nullable().optional(),simple_mode:cV.nullable().optional(),default_home_agents:$V.nullable().optional(),createdAt:k5.string().datetime().optional().describe("ISO 8601 timestamp"),updatedAt:k5.string().datetime().optional().describe("ISO 8601 timestamp")}),handler:async(i,t)=>{Ji(t),await t.access.check();let u=t.organization?.id;if(!u)throw Error("Organization ID required (no active organization in context)");let l=await t.storage.organizationSettings.get(u);if(!l)return{organizationId:u};return{...l,createdAt:l.createdAt instanceof Date?l.createdAt.toISOString():l.createdAt,updatedAt:l.updatedAt instanceof Date?l.updatedAt.toISOString():l.updatedAt}}})});import{z as U6}from"zod";var Ioi;var rru=w(()=>{ai();_2();Ioi=li({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:U6.object({organizationId:U6.string(),sidebar_items:U6.array(nV).optional(),enabled_plugins:U6.array(U6.string()).optional(),registry_config:fV.optional(),simple_mode:cV.optional(),default_home_agents:$V.optional()}),outputSchema:U6.object({organizationId:U6.string(),sidebar_items:U6.array(nV).nullable().optional(),enabled_plugins:U6.array(U6.string()).nullable().optional(),registry_config:fV.nullable().optional(),simple_mode:cV.nullable().optional(),default_home_agents:$V.nullable().optional(),createdAt:U6.string().datetime().describe("ISO 8601 timestamp"),updatedAt:U6.string().datetime().describe("ISO 8601 timestamp")}),handler:async(i,t)=>{if(Ji(t),await t.access.check(),t.organization&&t.organization.id!==i.organizationId)throw Error("Cannot update settings for a different organization");let u=await t.storage.organizationSettings.upsert(i.organizationId,{sidebar_items:i.sidebar_items,enabled_plugins:i.enabled_plugins,registry_config:i.registry_config,simple_mode:i.simple_mode,default_home_agents:i.default_home_agents});return{...u,createdAt:u.createdAt instanceof Date?u.createdAt.toISOString():u.createdAt,updatedAt:u.updatedAt instanceof Date?u.updatedAt.toISOString():u.updatedAt}}})});import{z as mh}from"zod";var wru,Zoi,Boi;var xru=w(()=>{ai();_2();wru=W5.extend({organizationId:mh.string(),archivedAt:mh.string().nullable().optional().describe("ISO 8601 timestamp"),createdAt:mh.string().describe("ISO 8601 timestamp"),updatedAt:mh.string().describe("ISO 8601 timestamp")}),Zoi=li({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:mh.object({includeArchived:mh.boolean().optional().describe("Include archived brands in the list")}),outputSchema:mh.object({items:mh.array(wru)}),handler:async(i,t)=>{Ji(t),await t.access.check();let u=t.organization?.id;if(!u)throw Error("Organization ID required (no active organization in context)");return{items:(await t.storage.brandContext.list(u,{includeArchived:i.includeArchived})).map((n)=>({...n,archivedAt:n.archivedAt instanceof Date?n.archivedAt.toISOString():n.archivedAt,createdAt:n.createdAt instanceof Date?n.createdAt.toISOString():n.createdAt,updatedAt:n.updatedAt instanceof Date?n.updatedAt.toISOString():n.updatedAt}))}}}),Boi=li({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:mh.object({id:mh.string().describe("Brand context ID")}),outputSchema:wru.extend({organizationId:mh.string()}),handler:async(i,t)=>{Ji(t),await t.access.check();let u=t.organization?.id;if(!u)throw Error("Organization ID required (no active organization in context)");let l=await t.storage.brandContext.get(i.id,u);if(!l)throw Error("Brand context not found");return{...l,archivedAt:l.archivedAt instanceof Date?l.archivedAt.toISOString():l.archivedAt,createdAt:l.createdAt instanceof Date?l.createdAt.toISOString():l.createdAt,updatedAt:l.updatedAt instanceof Date?l.updatedAt.toISOString():l.updatedAt}}})});import{z as Vy}from"zod";var Dru,Qoi,Poi,Yoi;var Oru=w(()=>{ai();_2();Dru=W5.extend({organizationId:Vy.string(),createdAt:Vy.string().describe("ISO 8601 timestamp"),updatedAt:Vy.string().describe("ISO 8601 timestamp")}),Qoi=li({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:W5.omit({id:!0}),outputSchema:Dru,handler:async(i,t)=>{Ji(t),await t.access.check();let u=t.organization?.id;if(!u)throw Error("Organization ID required (no active organization in context)");let l=await t.storage.brandContext.create(u,{name:i.name,domain:i.domain,overview:i.overview,logo:i.logo??null,favicon:i.favicon??null,ogImage:i.ogImage??null,fonts:i.fonts??null,colors:i.colors??null,images:i.images??null,metadata:i.metadata??null});return{...l,archivedAt:l.archivedAt instanceof Date?l.archivedAt.toISOString():l.archivedAt,createdAt:l.createdAt instanceof Date?l.createdAt.toISOString():l.createdAt,updatedAt:l.updatedAt instanceof Date?l.updatedAt.toISOString():l.updatedAt}}}),Poi=li({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:W5.partial().required({id:!0}),outputSchema:Dru,handler:async(i,t)=>{Ji(t),await t.access.check();let u=t.organization?.id;if(!u)throw Error("Organization ID required (no active organization in context)");if(!await t.storage.brandContext.get(i.id,u))throw Error("Brand context not found");let{id:n,...f}=i;if(f.isDefault===!0)await t.storage.brandContext.setDefault(n,u);let c=await t.storage.brandContext.update(n,u,{name:f.name,domain:f.domain,overview:f.overview,logo:f.logo!==void 0?f.logo??null:void 0,favicon:f.favicon!==void 0?f.favicon??null:void 0,ogImage:f.ogImage!==void 0?f.ogImage??null:void 0,fonts:f.fonts!==void 0?f.fonts??null:void 0,colors:f.colors!==void 0?f.colors??null:void 0,images:f.images!==void 0?f.images??null:void 0,metadata:f.metadata!==void 0?f.metadata??null:void 0,archivedAt:f.archivedAt!==void 0?f.archivedAt??null:void 0,isDefault:f.isDefault===!1?!1:void 0});return{...c,archivedAt:c.archivedAt instanceof Date?c.archivedAt.toISOString():c.archivedAt,createdAt:c.createdAt instanceof Date?c.createdAt.toISOString():c.createdAt,updatedAt:c.updatedAt instanceof Date?c.updatedAt.toISOString():c.updatedAt}}}),Yoi=li({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:Vy.object({id:Vy.string().describe("Brand context ID")}),outputSchema:Vy.object({success:Vy.boolean()}),handler:async(i,t)=>{Ji(t),await t.access.check();let u=t.organization?.id;if(!u)throw Error("Organization ID required (no active organization in context)");if(!await t.storage.brandContext.get(i.id,u))throw Error("Brand context not found");return await t.storage.brandContext.update(i.id,u,{archivedAt:new Date().toISOString(),isDefault:!1}),{success:!0}}})});async function jdi(i,t,u){let l=i.trim();if(!l.startsWith("http"))l=`https://${l}`;let n=await fetch("https://api.firecrawl.dev/v1/scrape",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${t}`},body:JSON.stringify({url:l,formats:["branding"]})});if(!n.ok){let E=await n.text().catch(()=>"");throw Error(`Firecrawl API error: ${n.status} ${E.slice(0,200)}`)}let f=await n.json();if(!f.success||!f.data?.branding)return null;let c=f.data.branding,$=f.data.metadata??{},d=mh0(c,$);return{name:$.title?.split(/[|\u2013\u2014]|\s+-\s+/).map((E)=>E.trim()).filter(Boolean)?.slice().sort((E,v)=>E.length-v.length)[0]??$.ogSiteName??u??i,domain:i,overview:$.description??"",logo:d.logo,favicon:d.favicon,ogImage:d.ogImage,fonts:d.fonts,colors:d.colors,images:null,metadata:Object.keys(d.metadata).length>0?d.metadata:null}}function mh0(i,t){let u=i.images??{},l=i.colors??{},n={};for(let[g,h]of Object.entries(l))if(typeof h==="string"&&h&&Vh0.has(g))n[g]=h;let f={},$=(i.typography??{}).fontFamilies??{};for(let[g,h]of Object.entries($))if(typeof h==="string"&&h){let E=ah0[g.toLowerCase()];if(E&&!f[E])f[E]=h}let d=i.fonts;if(Array.isArray(d))for(let g of d){let h=g.family;if(typeof h==="string"&&h&&!f.body)f.body=h}let _={};for(let g of["typography","components","spacing","layout","animations","icons","tone","personality","colorScheme"])if(i[g]!==void 0)_[g]=i[g];return{logo:u.logo??null,favicon:u.favicon??null,ogImage:u.ogImage??t.ogImage??null,fonts:Object.keys(f).length>0?f:null,colors:Object.keys(n).length>0?n:null,metadata:_}}var Vh0,ah0;var Aoi=w(()=>{Vh0=new Set(["primary","secondary","accent","background","foreground"]),ah0={heading:"heading",headings:"heading",head:"heading",title:"heading",body:"body",primary:"body",text:"body",code:"code",monospace:"code",mono:"code"}});import{z as Sdi}from"zod";var oh0,Goi;var yru=w(()=>{ai();Aoi();_2();oh0=W5.pick({id:!0,name:!0,domain:!0,overview:!0,logo:!0,favicon:!0,ogImage:!0,fonts:!0,colors:!0}).extend({success:Sdi.boolean()}),Goi=li({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:Sdi.object({domain:Sdi.string().describe("Website domain to extract brand from"),brandId:Sdi.string().optional().describe("Existing brand context ID to update (creates new if omitted)")}),outputSchema:oh0,modelSummary:(i)=>i.success?`Brand saved (id=${i.id}, name=${i.name}, domain=${i.domain}). The UI rendered the logo, colors, fonts, and overview.`:"Brand extraction failed.",handler:async(i,t)=>{Ji(t),await t.access.check();let u=t.organization?.id;if(!u)throw Error("Organization ID required (no active organization in context)");let l=t.firecrawlApiKey;if(!l)throw Error("FIRECRAWL_API_KEY is not configured. Set the environment variable to enable brand extraction.");let n=await jdi(i.domain,l,i.domain);if(!n)throw Error("Firecrawl did not return branding data for this URL");let f={name:n.name,domain:n.domain,overview:n.overview,logo:n.logo,favicon:n.favicon,ogImage:n.ogImage,fonts:n.fonts,colors:n.colors,images:n.images,metadata:n.metadata},c=i.brandId?await(async()=>{if(!await t.storage.brandContext.get(i.brandId,u))throw Error("Brand context not found");return t.storage.brandContext.update(i.brandId,u,f)})():await t.storage.brandContext.create(u,f);return{id:c.id,name:c.name,domain:c.domain,overview:c.overview,logo:c.logo,favicon:c.favicon,ogImage:c.ogImage,fonts:c.fonts,colors:c.colors,success:!0}}})});function Xru(i){let t=i.metadata??{};return{id:i.id,name:i.name,domain:i.domain||void 0,colors:i.colors??void 0,fonts:i.fonts??void 0,assets:i.logo||i.favicon||i.ogImage?{logo:i.logo??void 0,favicon:i.favicon??void 0,ogImage:i.ogImage??void 0}:void 0,overview:i.overview||void 0,tagline:typeof t.tagline==="string"?t.tagline:void 0,tone:typeof t.tone==="string"?t.tone:void 0,metadata:(()=>{let u=Object.fromEntries(Object.entries(t).filter(([l])=>l!=="tagline"&&l!=="tone"));return Object.keys(u).length>0?u:void 0})()}}var Woi,koi;var Nru=w(()=>{bCi();ai();Woi=li({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:qci,outputSchema:_C,handler:async(i,t)=>{Ji(t),await t.access.check();let u=t.organization?.id;if(!u)throw Error("Organization ID required (no active organization in context)");let l=i.id?await t.storage.brandContext.get(i.id,u):await t.storage.brandContext.getDefault(u);if(!l)throw Error(i.id?"Brand not found":"No default brand configured");return Xru(l)}}),koi=li({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:Vci,outputSchema:aci,handler:async(i,t)=>{Ji(t),await t.access.check();let u=t.organization?.id;if(!u)throw Error("Organization ID required (no active organization in context)");return{items:(await t.storage.brandContext.list(u)).map(Xru)}}})});import{z as zdi}from"zod";var joi;var Jru=w(()=>{ai();joi=li({name:"ORGANIZATION_DOMAIN_GET",description:"Get the claimed email domain for an organization.",annotations:{title:"Get Organization Domain",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:zdi.object({}),outputSchema:zdi.object({domain:zdi.string().nullable(),autoJoinEnabled:zdi.boolean()}),handler:async(i,t)=>{Ji(t),await t.access.check();let u=hi(t),l=await t.storage.organizationDomains.getByOrganizationId(u.id);return{domain:l?.domain??null,autoJoinEnabled:l?.autoJoinEnabled??!1}}})});import{z as od}from"zod";var sh0,Soi,zoi,boi;var Uru=w(()=>{ai();h2();sh0=/^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)+$/,Soi=li({name:"ORGANIZATION_DOMAIN_SET",description:"Claim an email domain for an organization. The caller's verified email must match the domain.",annotations:{title:"Set Organization Domain",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:od.object({domain:od.string().min(1).max(255).describe("Email domain to claim (e.g. 'acme.com')"),autoJoinEnabled:od.boolean().optional().default(!1).describe("Whether users with matching email domain can auto-join")}),outputSchema:od.object({domain:od.string(),autoJoinEnabled:od.boolean()}),handler:async(i,t)=>{Ji(t),await t.access.check();let u=hi(t),l=i.domain.toLowerCase().trim();if(!sh0.test(l))throw Error(`Invalid domain format: "${l}". Must be a valid domain like "acme.com"`);if(g2.has(l))throw Error(`Cannot claim generic email domain "${l}". Only corporate domains are allowed.`);let n=t.auth.user?.email;if(!n)throw Error("User email is required to claim a domain.");if(!t.auth.user?.emailVerified)throw Error("Email must be verified before claiming a domain.");let f=n.split("@")[1]?.toLowerCase();if(f!==l)throw Error(`You can only claim your own email domain ("${f}"), not "${l}".`);let c=await t.storage.organizationDomains.getByOrganizationId(u.id);if(c&&c.domain!==l)throw Error(`This organization already claims "${c.domain}". Clear it first before claiming a new domain.`);let $=await t.storage.organizationDomains.setDomain(u.id,l,i.autoJoinEnabled);return{domain:$.domain,autoJoinEnabled:$.autoJoinEnabled}}}),zoi=li({name:"ORGANIZATION_DOMAIN_UPDATE",description:"Update auto-join setting for the organization's already-claimed domain.",annotations:{title:"Update Organization Domain Settings",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:od.object({autoJoinEnabled:od.boolean().describe("Whether users with matching email domain can auto-join")}),outputSchema:od.object({domain:od.string(),autoJoinEnabled:od.boolean()}),handler:async(i,t)=>{Ji(t),await t.access.check();let u=hi(t);if(!await t.storage.organizationDomains.getByOrganizationId(u.id))throw Error("No domain claimed for this organization.");let n=await t.storage.organizationDomains.updateAutoJoin(u.id,i.autoJoinEnabled);return{domain:n.domain,autoJoinEnabled:n.autoJoinEnabled}}}),boi=li({name:"ORGANIZATION_DOMAIN_CLEAR",description:"Remove the claimed email domain for an organization.",annotations:{title:"Clear Organization Domain",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:od.object({}),outputSchema:od.object({success:od.boolean()}),handler:async(i,t)=>{Ji(t),await t.access.check();let u=hi(t);return await t.storage.organizationDomains.clearDomain(u.id),{success:!0}}})});import{z as sd}from"zod";var Koi;var Fru=w(()=>{Tf();ai();Koi=li({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:sd.object({organizationId:sd.string().optional(),userId:sd.string(),role:sd.array(sd.string())}),outputSchema:sd.object({id:sd.string(),organizationId:sd.string(),userId:sd.string(),role:sd.union([sd.string(),sd.array(sd.string())]),createdAt:sd.string().datetime().describe("ISO 8601 timestamp")}),handler:async(i,t)=>{Ji(t),await t.access.check();let u=i.organizationId||t.organization?.id;if(!u)throw Error("Organization ID required (no active organization in context)");if(u!==t.organization?.id)throw Error("Organization ID does not match authenticated organization");let l=await t.boundAuth.organization.addMember({organizationId:u,userId:i.userId,role:i.role});if(!l)throw Error("Failed to add member");let n=Ou(t);if(n)Nu.capture({distinctId:n,event:"organization_member_added",groups:{organization:u},properties:{organization_id:u,added_user_id:i.userId,role:i.role}});return{...l,role:l.role,createdAt:l.createdAt instanceof Date?l.createdAt.toISOString():l.createdAt}}})});import{z as sS}from"zod";var Hoi;var Tru=w(()=>{Tf();ai();Hoi=li({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:sS.object({organizationId:sS.string().optional(),memberIdOrEmail:sS.string()}),outputSchema:sS.object({success:sS.boolean(),memberIdOrEmail:sS.string()}),handler:async(i,t)=>{Ji(t),await t.access.check();let u=i.organizationId||t.organization?.id;if(!u)throw Error("Organization ID required (no active organization in context)");await t.boundAuth.organization.removeMember({organizationId:u,memberIdOrEmail:i.memberIdOrEmail});let l=Ou(t);if(l)Nu.capture({distinctId:l,event:"organization_member_removed",groups:{organization:u},properties:{organization_id:u,member_id_or_email:i.memberIdOrEmail}});return{success:!0,memberIdOrEmail:i.memberIdOrEmail}}})});import{z as O$}from"zod";var Roi;var Iru=w(()=>{ai();Roi=li({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:O$.object({limit:O$.number().optional(),offset:O$.number().optional()}),outputSchema:O$.object({members:O$.array(O$.object({id:O$.string(),organizationId:O$.string(),userId:O$.string(),role:O$.string(),createdAt:O$.string().datetime().describe("ISO 8601 timestamp"),user:O$.object({id:O$.string(),name:O$.string(),email:O$.string(),image:O$.string().optional()}).optional()}))}),handler:async(i,t)=>{Ji(t),await t.access.check();let u=t.organization?.id;if(!u)throw Error("Organization ID required (no active organization in context)");let l=await t.boundAuth.organization.listMembers({organizationId:u,limit:i.limit,offset:i.offset});return{members:(Array.isArray(l)?l:[]).map((f)=>({...f,createdAt:f.createdAt instanceof Date?f.createdAt.toISOString():f.createdAt}))}}})});import{z as t4}from"zod";var Loi;var Zru=w(()=>{Tf();ai();Loi=li({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:t4.object({organizationId:t4.string().optional(),memberId:t4.string(),role:t4.array(t4.string())}),outputSchema:t4.object({id:t4.string(),organizationId:t4.string(),userId:t4.string(),role:t4.union([t4.literal("admin"),t4.literal("member"),t4.literal("owner")]),createdAt:t4.string().datetime().describe("ISO 8601 timestamp"),user:t4.object({email:t4.string(),name:t4.string(),image:t4.string().optional()})}),handler:async(i,t)=>{Ji(t),await t.access.check();let u=i.organizationId||t.organization?.id;if(!u)throw Error("Organization ID required (no active organization in context)");let l=await t.boundAuth.organization.updateMemberRole({organizationId:u,memberId:i.memberId,role:i.role});if(!l)throw Error("Failed to update member role");t.invalidateMemberRole?.(l.userId,u);let n=Ou(t);if(n)Nu.capture({distinctId:n,event:"organization_member_role_updated",groups:{organization:u},properties:{organization_id:u,member_id:i.memberId,target_user_id:l.userId,new_role:Array.isArray(i.role)?i.role.join(","):i.role}});return{...l,createdAt:l.createdAt instanceof Date?l.createdAt.toISOString():l.createdAt}}})});var Bru=w(()=>{$ru();dru();_ru();gru();hru();vru();rru();xru();Oru();yru();Nru();Jru();Uru();Fru();Tru();Iru();Zru()});import{z as j5}from"zod";var eoi;var Qru=w(()=>{ai();eoi=li({name:"TAGS_LIST",description:"List all tags available in the organization.",annotations:{title:"List Tags",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:j5.object({}),outputSchema:j5.object({tags:j5.array(j5.object({id:j5.string(),organizationId:j5.string(),name:j5.string(),createdAt:j5.string().describe("ISO 8601 timestamp")}))}),handler:async(i,t)=>{Ji(t),await t.access.check();let u=hi(t);return{tags:(await t.storage.tags.listOrgTags(u.id)).map((n)=>({...n,createdAt:n.createdAt instanceof Date?n.createdAt.toISOString():String(n.createdAt)}))}}})});import{z as S5}from"zod";var Coi;var Pru=w(()=>{ai();Coi=li({name:"TAGS_CREATE",description:"Create a new tag that can be assigned to organization members.",annotations:{title:"Create Tag",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:S5.object({name:S5.string().min(1).max(50).describe("Tag name")}),outputSchema:S5.object({tag:S5.object({id:S5.string(),organizationId:S5.string(),name:S5.string(),createdAt:S5.string().describe("ISO 8601 timestamp")})}),handler:async(i,t)=>{Ji(t),await t.access.check();let u=hi(t),l=await t.storage.tags.createTag(u.id,i.name);return{tag:{...l,createdAt:l.createdAt instanceof Date?l.createdAt.toISOString():String(l.createdAt)}}}})});import{z as bdi}from"zod";var Moi;var Yru=w(()=>{ai();Moi=li({name:"TAGS_DELETE",description:"Delete a tag and automatically remove it from all assigned members.",annotations:{title:"Delete Tag",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:bdi.object({tagId:bdi.string().describe("Tag ID to delete")}),outputSchema:bdi.object({success:bdi.boolean()}),handler:async(i,t)=>{Ji(t),await t.access.check();let u=hi(t),l=await t.storage.tags.getTag(i.tagId);if(!l)throw Error("Tag not found");if(l.organizationId!==u.id)throw Error("Tag does not belong to this organization");return await t.storage.tags.deleteTag(i.tagId),{success:!0}}})});import{z as E2}from"zod";var qoi;var Aru=w(()=>{ai();qoi=li({name:"MEMBER_TAGS_GET",description:"Get all tags currently assigned to a specific member.",annotations:{title:"Get Member Tags",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:E2.object({memberId:E2.string().describe("Member ID")}),outputSchema:E2.object({tags:E2.array(E2.object({id:E2.string(),organizationId:E2.string(),name:E2.string(),createdAt:E2.string().describe("ISO 8601 timestamp")}))}),handler:async(i,t)=>{Ji(t),await t.access.check();let u=hi(t);if(!await t.storage.tags.verifyMemberOrg(i.memberId,u.id))throw Error(`Member not found in this organization: ${i.memberId}`);return{tags:(await t.storage.tags.getMemberTags(i.memberId)).map((f)=>({...f,createdAt:f.createdAt instanceof Date?f.createdAt.toISOString():String(f.createdAt)}))}}})});import{z as F6}from"zod";var Voi;var Gru=w(()=>{ai();Voi=li({name:"MEMBER_TAGS_SET",description:"Replace all tags on a member with the given set. Pass empty array to clear.",annotations:{title:"Set Member Tags",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:F6.object({memberId:F6.string().describe("Member ID"),tagIds:F6.array(F6.string()).describe("Array of tag IDs to assign")}),outputSchema:F6.object({success:F6.boolean(),tags:F6.array(F6.object({id:F6.string(),organizationId:F6.string(),name:F6.string(),createdAt:F6.string().describe("ISO 8601 timestamp")}))}),handler:async(i,t)=>{Ji(t),await t.access.check();let u=hi(t);if(!await t.storage.tags.verifyMemberOrg(i.memberId,u.id))throw Error(`Member not found in this organization: ${i.memberId}`);for(let f of i.tagIds){let c=await t.storage.tags.getTag(f);if(!c)throw Error(`Tag not found: ${f}`);if(c.organizationId!==u.id)throw Error(`Tag does not belong to this organization: ${f}`)}return await t.storage.tags.setMemberTags(i.memberId,i.tagIds),{success:!0,tags:(await t.storage.tags.getMemberTags(i.memberId)).map((f)=>({...f,createdAt:f.createdAt instanceof Date?f.createdAt.toISOString():String(f.createdAt)}))}}})});var Wru=w(()=>{Qru();Pru();Yru();Aru();Gru()});function Sv(i,t=Date.now()){let u=i.status;if(u==="in_progress"){let l=new Date(i.updated_at).getTime();if(!Number.isFinite(l)||t-l>1800000)u="expired"}return{id:i.id,organization_id:i.organization_id,title:i.title,description:i.description,created_at:i.created_at,updated_at:i.updated_at,created_by:i.created_by,updated_by:i.updated_by,hidden:i.hidden??!1,status:u,virtual_mcp_id:i.virtual_mcp_id||void 0,trigger_id:i.trigger_id,branch:i.branch,sandbox_provider_kind:i.sandbox_provider_kind,harness_id:i.harness_id,metadata:i.metadata&&Object.keys(i.metadata).length>0?i.metadata:void 0,run_config:i.run_config}}var kru=w(()=>{kl()});import{z as pu}from"zod";var jru,tE0,Sru,zv,zru,bru;var ay=w(()=>{kru();jru=pu.object({id:pu.string().describe("Unique message ID"),thread_id:pu.string().describe("ID of the parent thread"),metadata:pu.unknown().optional().describe("Optional message metadata"),parts:pu.array(pu.record(pu.string(),pu.unknown())).describe("Message content parts (AI SDK UIMessagePart format)"),role:pu.enum(["user","assistant","system"]).describe("Message role"),created_at:pu.string().datetime().describe("Timestamp of creation"),updated_at:pu.string().datetime().describe("Timestamp of last update")}),tE0=pu.object({toolName:pu.string().describe("Fully qualified tool name"),appId:pu.string().describe("App ID that owns the tool"),args:pu.record(pu.string(),pu.unknown()).describe("Arguments used when expanding the tool"),expandedAt:pu.string().datetime().describe("When the tool was expanded")}),Sru=pu.object({expanded_tools:pu.array(tE0).optional()}).catchall(pu.unknown()),zv=pu.object({id:pu.string().describe("Unique thread ID"),organization_id:pu.string().describe("Organization this thread belongs to"),title:pu.string().describe("Thread title"),description:pu.string().nullable().describe("Thread description"),created_at:pu.string().datetime().describe("Timestamp of creation"),updated_at:pu.string().datetime().describe("Timestamp of last update"),hidden:pu.boolean().optional().describe("Whether the thread is hidden"),status:pu.enum([...fk,"expired"]).describe("Thread execution status. 'expired' is virtual -- computed at read time for stale in_progress threads"),created_by:pu.string().describe("User ID who created the thread"),updated_by:pu.string().optional().describe("User ID who last updated the thread"),virtual_mcp_id:pu.string().optional().describe("Virtual MCP (agent) this thread was initiated with"),trigger_id:pu.string().nullable().optional().describe("Automation trigger that created this thread; null/absent for human-initiated threads."),branch:pu.string().nullable().optional().describe("Git branch this thread is pinned to (GitHub-linked vms only)"),sandbox_provider_kind:pu.string().nullable().optional().describe("Pinned on first message; identifies which sandbox provider to dispatch to (e.g. 'agent-sandbox', 'user-desktop')."),harness_id:pu.string().nullable().optional().describe("Pinned on first message; selects which harness runs the thread (e.g. 'claude-code', 'codex', 'decopilot')."),metadata:Sru.optional().describe("Free-form per-thread UI state (e.g. expanded_tools)"),run_config:pu.record(pu.string(),pu.unknown()).nullable().optional().describe("Persisted run configuration (contains agent and model info)")}),zru=pu.object({id:pu.string().optional().describe("Optional custom ID for the thread"),title:pu.string().optional().describe("Thread title"),description:pu.string().nullish().describe("Thread description"),virtual_mcp_id:pu.string().describe("Virtual MCP (agent) this thread is bound to"),branch:pu.string().min(1).optional().describe("Preferred branch. Used only when the vMCP has a githubRepo; ignored otherwise. When omitted, the server picks the most-recently-touched branch from the user's sandboxMap, falling back to a freshly generated name.")}),bru=pu.object({title:pu.string().optional().describe("New thread title"),description:pu.string().nullish().describe("New thread description"),hidden:pu.boolean().optional().describe("Whether the thread is hidden"),status:pu.enum(["requires_action","failed","in_progress","completed"]).optional().describe("New thread status (user-set override). 'expired' is a computed virtual status and cannot be set directly."),metadata:Sru.optional().describe("Full replacement of the thread's metadata object"),branch:pu.string().nullish().describe("New git branch for this thread")})});function Kdi(){let i=Kru[Math.floor(Math.random()*Kru.length)],t=Hru[Math.floor(Math.random()*Hru.length)];return`deco/${i}-${t}`}var Kru,Hru;var aoi=w(()=>{Kru=["amber","bold","bright","calm","crimson","coral","daring","deep","dusty","eager","faint","fierce","frozen","gentle","golden","grand","green","hollow","iron","ivory","keen","lasting","lunar","mellow","misty","noble","olive","pale","prime","quiet","rapid","rustic","serene","sharp","silver","sleek","solar","stark","still","swift","tawny","tender","thin","true","vast","velvet","warm","wild","young","zen"],Hru=["anchor","birch","brook","cedar","cliff","cove","crane","dune","echo","ember","falcon","fern","flint","forge","frost","glade","grove","harbor","hawk","iris","jade","lark","maple","marsh","mesa","opal","orbit","peak","pine","plume","quartz","rapids","reef","ridge","river","sage","shore","slate","spruce","stone","summit","thorn","tide","trail","vale","wren","aspen","delta","crest","spark"]});import{z as Rru}from"zod";function nE0(i,t){let u=i?.[t];if(!u)return;return Object.entries(u).sort(([,n],[,f])=>{let c=Math.max(0,...Object.values(n).map((d)=>d.createdAt??0));return Math.max(0,...Object.values(f).map((d)=>d.createdAt??0))-c})[0]?.[0]}var uE0,lE0,moi;var Lru=w(()=>{Tf();ai();ay();C_();aoi();uE0=Rru.object({data:zru.describe("Data for the new thread (id is auto-generated if not provided)")}),lE0=Rru.object({item:zv.describe("The created thread entity")});moi=li({name:"COLLECTION_THREADS_CREATE",description:"Create a new thread for organizing messages and conversations.",annotations:{title:"Create Thread",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:uE0,outputSchema:lE0,handler:async(i,t)=>{Ji(t);let u=hi(t);await t.access.check();let l=Ou(t);if(!l)throw Error("User ID required to create thread");let{data:n}=i,f=n.id??Rn("thrd"),c=await t.storage.virtualMcps.findById(n.virtual_mcp_id,u.id);if(!c)throw Error(`Virtual MCP not found: ${n.virtual_mcp_id}`);let $=c.metadata,d=$?.githubRepo,_=null;if(d)_=n.branch??nE0($?.sandboxMap,l)??Kdi();let g=await t.storage.threads.create({id:f,organization_id:u.id,title:n.title,description:n.description,virtual_mcp_id:n.virtual_mcp_id,branch:_,created_by:l});return Nu.capture({distinctId:l,event:"chat_started",groups:{organization:u.id},properties:{organization_id:u.id,thread_id:f,has_title:!!i.data.title,created_via:"tool"}}),{item:Sv(g)}}})});import{z as fg}from"zod";var fE0,cE0,ooi;var eru=w(()=>{jd();ai();ay();fE0=Nh.extend({where:fg.object({created_by:fg.string().optional(),trigger_ids:fg.array(fg.string()).optional(),virtual_mcp_id:fg.string().optional(),hidden:fg.boolean().optional(),has_trigger:fg.boolean().optional()}).optional(),startDate:fg.string().datetime().optional().describe("Filter threads updated at or after this ISO timestamp"),endDate:fg.string().datetime().optional().describe("Filter threads updated at or before this ISO timestamp"),search:fg.string().optional().describe("Full-text search on thread title (case-insensitive)"),status:fg.string().optional().describe("Filter by thread status (e.g. completed, failed, in_progress)"),userId:fg.string().optional().describe("Filter by the user who created the thread"),agentId:fg.string().optional().describe("Filter by agent (connection or virtual MCP) ID")}),cE0=y3(zv),ooi=li({name:"COLLECTION_THREADS_LIST",description:"List threads with filtering, sorting, and pagination.",annotations:{title:"List Threads",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:fE0,outputSchema:cE0,handler:async(i,t)=>{await t.access.check();let u=t.auth.user?.id;if(!u)throw Error("User ID required to list threads");hi(t);let l=i.offset??0,n=i.limit??100,f=i.where?.trigger_ids,c=i.where?.virtual_mcp_id,$=i.userId??(i.where?.created_by==="me"?u:i.where?.created_by),{threads:d,total:_}=f?.length?await t.storage.threads.listByTriggerIds(f,{limit:n,offset:l}):await t.storage.threads.list($,{limit:n,offset:l,virtualMcpId:c,startDate:i.startDate,endDate:i.endDate,search:i.search,status:i.status,agentId:i.agentId,includeArchived:i.where?.hidden,hasTrigger:i.where?.has_trigger}),g=l+n<_,h=Date.now();return{items:d.map((E)=>Sv(E,h)),totalCount:_,hasMore:g}}})});var $E0,soi;var Cru=w(()=>{jd();ai();ay();$E0=FL(zv),soi=li({name:"COLLECTION_THREADS_GET",description:"Get a thread's details and metadata by ID.",annotations:{title:"Get Thread",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:UL,outputSchema:$E0,handler:async(i,t)=>{Ji(t),hi(t),await t.access.check();let u=await t.storage.threads.get(i.id);if(!u)return{item:null};return{item:Sv(u)}}})});import{z as poi}from"zod";var dE0,_E0,isi;var Mru=w(()=>{Tf();ai();ay();dE0=poi.object({id:poi.string().describe("ID of the thread to update"),data:bru.describe("Partial thread data to update")}),_E0=poi.object({item:zv.describe("The updated thread entity")}),isi=li({name:"COLLECTION_THREADS_UPDATE",description:"Update a thread's title, description, or visibility.",annotations:{title:"Update Thread",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:dE0,outputSchema:_E0,handler:async(i,t)=>{Ji(t);let u=hi(t);await t.access.check();let l=Ou(t);if(!l)throw Error("User ID required to update thread");let{id:n,data:f}=i,c=await t.storage.threads.get(n);if(!c)throw Error("Thread not found in organization");if(f.branch===null&&c.virtual_mcp_id){if((await t.storage.virtualMcps.findById(c.virtual_mcp_id,hi(t).id))?.metadata?.githubRepo)throw Error("Cannot set branch=null on a github-linked thread (vMCP has githubRepo)")}let $={title:f.title,description:f.description,hidden:f.hidden,updated_by:l};if(f.status)$.status=f.status;if(f.metadata!==void 0)$.metadata=f.metadata;if(f.branch!==void 0)$.branch=f.branch;let d=await t.storage.threads.update(n,$);if(f.hidden!==void 0&&f.hidden!==c.hidden)Nu.capture({distinctId:l,event:f.hidden?"chat_archived":"chat_unarchived",groups:{organization:u.id},properties:{organization_id:u.id,thread_id:n}});return{item:Sv(d)}}})});var tsi;var qru=w(()=>{jd();Tf();ai();ay();tsi=li({name:"COLLECTION_THREADS_DELETE",description:"Permanently delete a thread and all its messages.",annotations:{title:"Delete Thread",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:TL,outputSchema:IL(zv),handler:async(i,t)=>{Ji(t);let u=hi(t);await t.access.check();let l=await t.storage.threads.get(i.id);if(!l)throw Error(`Thread not found: ${i.id}`);await t.storage.threads.delete(i.id);let n=Ou(t);if(n)Nu.capture({distinctId:n,event:"chat_deleted",groups:{organization:u.id},properties:{organization_id:u.id,thread_id:i.id}});return{item:Sv(l)}}})});import{z as gE0}from"zod";function Vru(i){if(!i)return null;if("field"in i&&i.field[0]==="thread_id"&&i.operator==="eq")return String(i.value);if("conditions"in i)for(let t of i.conditions){let u=Vru(t);if(u)return u}return null}var hE0,EE0,usi;var aru=w(()=>{jd();ai();ay();hE0=Nh.extend({thread_id:gE0.string().optional().describe("ID of the thread to list messages for (required)")}),EE0=y3(jru),usi=li({name:"COLLECTION_THREAD_MESSAGES_LIST",description:"List messages in a thread with pagination. Requires thread_id. Returns messages in chronological order.",annotations:{title:"List Thread Messages",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:hE0,outputSchema:EE0,handler:async(i,t)=>{hi(t),await t.access.check();let u=i.thread_id??Vru(i.where);if(!u)throw Error("thread_id is required (provide as top-level param or in where clause)");let l=i.offset??0,n=i.limit??100,f=i.orderBy?.[0]?.direction??"asc",c=await t.storage.threads.get(u);if(!c)return{items:[],totalCount:0,hasMore:!1};if(c.message_storage_version===2){let{messages:g,total:h}=await t.storage.threads.messageParts().loadWindow(u,{limit:n,offset:l});return{items:g.map((E)=>({id:E.id,thread_id:u,role:E.role,parts:E.parts,metadata:E.metadata??null,created_at:E.created_at,updated_at:E.created_at})),totalCount:h,hasMore:l+n<h}}let{messages:$,total:d}=await t.storage.threads.listMessages(u,{limit:n,offset:l,sort:f}),_=l+n<d;return{items:$,totalCount:d,hasMore:_}}})});var mru=w(()=>{Lru();eru();Cru();Mru();qru();aru()});function rE0(i){return{type:"doc",content:[{type:"paragraph",content:[{type:"text",text:i}]}]}}function wE0(i){return i.map((t)=>{let u=t.metadata;if(u?.tiptapDoc)return t;let l=t.parts.find((n)=>n.type==="text"&&typeof n.text==="string");if(!l?.text||typeof l.text!=="string")return t;return{...t,metadata:{...u,tiptapDoc:rE0(l.text)}}})}function Hdi(i){let t;if(typeof i==="string")try{let u=JSON.parse(i);if(Array.isArray(u)&&u.length>0&&u[0]?.role&&Array.isArray(u[0]?.parts))t=u;else t=[{role:"user",parts:[{type:"text",text:i}]}]}catch{t=[{role:"user",parts:[{type:"text",text:i}]}]}else t=i;return wE0(t)}import{z as Of}from"zod";var lsi;var oru=w(()=>{Tf();ai();_2();lsi=li({name:"AUTOMATION_CREATE",description:"Create an automation that runs an agent thread on trigger fire. Requires virtual_mcp_id + messages.",annotations:{title:"Create Automation",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!1},inputSchema:Of.object({name:Of.string().min(1).max(255),virtual_mcp_id:Of.string(),messages:Of.union([Of.string(),Of.array(Of.looseObject({id:Of.string().optional(),role:Of.enum(["user","assistant","system"]),parts:Of.array(Of.record(Of.string(),Of.unknown())),metadata:Of.unknown().optional()}))]),models:Of.object({tier:kdi,modelId:Of.string().optional(),credentialId:Of.string().optional()}).loose().default({tier:"smart"}),tools:Of.array(Of.string()).nullable().optional(),maxAgentSteps:Of.number().int().min(1).max(100).nullable().optional(),temperature:Of.number().default(0.5),active:Of.boolean().default(!0)}),outputSchema:Of.object({id:Of.string(),name:Of.string(),active:Of.boolean(),created_at:Of.string()}),handler:async(i,t)=>{Ji(t);let u=hi(t);await t.access.check();let l=Ou(t);if(!l)throw Error("Unable to determine user identity");let n=Hdi(i.messages),f=await t.storage.automations.create({organization_id:u.id,created_by:l,name:i.name,messages:JSON.stringify(n),models:JSON.stringify(i.models),tools:i.tools===void 0||i.tools===null?null:JSON.stringify(i.tools),max_agent_steps:i.maxAgentSteps??null,temperature:i.temperature,active:i.active,virtual_mcp_id:i.virtual_mcp_id});return Nu.capture({distinctId:l,event:"automation_created",groups:{organization:u.id},properties:{organization_id:u.id,automation_id:f.id,virtual_mcp_id:i.virtual_mcp_id,active:f.active,tier:i.models.tier}}),{id:f.id,name:f.name,active:f.active,created_at:f.created_at}}})});import{z as gf}from"zod";var nsi;var sru=w(()=>{ai();nsi=li({name:"AUTOMATION_GET",description:"Get an automation's full configuration and triggers by ID.",annotations:{title:"Get Automation",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:gf.object({id:gf.string()}),outputSchema:gf.object({automation:gf.object({id:gf.string(),name:gf.string(),active:gf.boolean(),created_by:gf.string(),created_at:gf.string(),updated_at:gf.string(),virtual_mcp_id:gf.string(),messages:gf.unknown(),models:gf.unknown(),tools:gf.array(gf.string()).nullable(),maxAgentSteps:gf.number().nullable(),temperature:gf.number(),triggers:gf.array(gf.object({id:gf.string(),type:gf.enum(["cron","event","webhook"]),cron_expression:gf.string().nullable(),connection_id:gf.string().nullable(),event_type:gf.string().nullable(),params:gf.unknown().nullable(),last_run_at:gf.string().nullable(),api_key_id:gf.string().nullable(),created_at:gf.string()}))}).nullable()}),handler:async(i,t)=>{Ji(t);let u=hi(t);await t.access.check();let l=await t.storage.automations.findById(i.id,u.id);if(!l)return{automation:null};let n=await t.storage.automations.listTriggers(l.id);return{automation:{id:l.id,name:l.name,active:l.active,created_by:l.created_by,created_at:l.created_at,updated_at:l.updated_at,virtual_mcp_id:l.virtual_mcp_id,messages:JSON.parse(l.messages),models:JSON.parse(l.models),tools:l.tools?JSON.parse(l.tools):null,maxAgentSteps:l.max_agent_steps,temperature:l.temperature,triggers:n.map((f)=>({id:f.id,type:f.type,cron_expression:f.cron_expression,connection_id:f.connection_id,event_type:f.event_type,params:f.params?JSON.parse(f.params):null,last_run_at:f.last_run_at,api_key_id:f.api_key_id,created_at:f.created_at}))}}}})});import{z as cg}from"zod";var fsi;var pru=w(()=>{ai();fsi=li({name:"AUTOMATION_LIST",description:"List automations with their status, triggers, and configuration.",annotations:{title:"List Automations",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:cg.object({virtual_mcp_id:cg.string().optional().nullable()}),outputSchema:cg.object({automations:cg.array(cg.object({id:cg.string(),name:cg.string(),active:cg.boolean(),created_by:cg.string(),created_at:cg.string(),trigger_count:cg.number(),nearest_next_run_at:cg.string().nullable(),virtual_mcp_id:cg.string()}))}),handler:async(i,t)=>{Ji(t);let u=hi(t);return await t.access.check(),{automations:(await t.storage.automations.listWithTriggerCounts(u.id,i.virtual_mcp_id)).map((f)=>({id:f.id,name:f.name,active:f.active,created_by:f.created_by,created_at:f.created_at,trigger_count:f.trigger_count,nearest_next_run_at:f.nearest_next_run_at,virtual_mcp_id:f.virtual_mcp_id}))}}})});import{DBOS as pS}from"@dbos-inc/dbos-sdk";async function DE0(i,t){for(let u=0;u<t.maxAttempts;u++){if(t.signal?.aborted)throw t.signal.reason??Error("gate aborted");let l=await i();if(xE0.has(l))return l;if(u<t.maxAttempts-1)await Vu(t.intervalMs,{signal:t.signal}).catch(()=>{})}throw Error(`[threadGate] gate timed out polling for terminal status (${t.maxAttempts} attempts)`)}function OE0(i){return i.isPullCapable&&i.sandboxProviderKind==="user-desktop"}function dsi(i){csi=i}function yE0(){if(!csi)throw Error("[threadGate] runtime not initialized \u2014 setThreadGateRuntime() must run before workflows fire");return csi}async function XE0(i){let t=yE0(),{request:u}=i,l=await t.meshContextFactory(u.organizationId,u.userId);if(!l)throw Error("user membership lost mid-dispatch");let n=t.pullDispatchFn!=null&&t.workQueue!=null;if(!OE0({isPullCapable:n,sandboxProviderKind:u.target?.sandboxProviderKind})){let _=i.timeoutMs??t.runTimeoutMs,g=new AbortController,h=_!=null?setTimeout(()=>g.abort(),_):null;try{await t.dispatchRunFn({...u,abortSignal:g.signal},l,t.deps)}finally{if(h!==null)clearTimeout(h)}return}let c=i.timeoutMs??t.runTimeoutMs,$=new AbortController,d=c!=null?setTimeout(()=>$.abort(),c):null;try{let{taskId:_,runFenceToken:g,harnessInput:h,messagesRef:E,sandboxConfig:v,orgSlug:r}=await t.pullDispatchFn({...u,abortSignal:$.signal},l,t.deps),x={runId:_,threadId:u.taskId??i.threadId,orgId:u.organizationId,userId:u.userId,runFenceToken:g,harnessInput:h,...v?{sandbox:v}:{},orgSlug:r,...E?{messagesRef:E}:{}};await t.workQueue.publish(u.userId,x);let O=t.gatePollIntervalMs??3000,y=t.gatePollMaxAttempts??1200;await DE0(async()=>{return(await l.storage.threads.get(_))?.status??"unknown"},{intervalMs:O,maxAttempts:y,signal:$.signal})}finally{if(d!==null)clearTimeout(d)}}async function NE0(i){if(i.source!=="user-message")return;let{request:t}=i;Nu.capture({distinctId:t.userId,event:"chat_message_started",groups:{organization:t.organizationId},properties:{organization_id:t.organizationId,agent_id:t.agent,mode:t.mode,thread_id:t.taskId??i.threadId,credential_id:t.models.credentialId}})}async function JE0(i,t){if(i.source!=="user-message")return;let{request:u}=i;Nu.capture({distinctId:u.userId,event:"chat_message_failed",groups:{organization:u.organizationId},properties:{organization_id:u.organizationId,thread_id:u.taskId??i.threadId,agent_id:u.agent,model_id:u.models.thinking.id,mode:u.mode,error_category:"setup",error_message:t}})}async function UE0(i){await pS.runStep(()=>NE0(i),{name:"trackMessageStarted"});try{await pS.runStep(()=>XE0(i),{name:"dispatchRunAndWait",retriesAllowed:!1})}catch(t){let u=t instanceof Error?t.message:String(t);throw await pS.runStep(()=>JE0(i,u),{name:"trackMessageFailed"}),t}return{taskId:i.request.taskId??i.threadId}}async function _si(i,t){return{workflowID:(await pS.startWorkflow(i3u,{queueName:dV,enqueueOptions:{queuePartitionKey:i.threadId},workflowID:t?.workflowID})(i)).workflowID}}async function gsi(i,t){return await(await pS.startWorkflow(i3u,{queueName:dV,enqueueOptions:{queuePartitionKey:i.threadId},workflowID:t?.workflowID})(i)).getResult()}var dV="thread-gate",xE0,$si=1,csi=null,i3u;var t3u=w(()=>{Tf();Rf();xE0=new Set(["completed","failed","requires_action"]);i3u=pS.registerWorkflow(UE0,{name:"threadGateWorkflow"})});var Rdi=w(()=>{t3u()});async function hsi(i,t,u){let l;try{return await Promise.race([i.aiProviders.listModels(t,u),new Promise((f,c)=>{l=setTimeout(()=>c(Error("listModels timeout")),FE0)})])}finally{if(l)clearTimeout(l)}}function TE0(i,t){switch(i){case"fast":return t.chat.fast;case"smart":return t.chat.smart;case"thinking":return t.chat.thinking;case"image":return t.image;case"web_research":return t.webResearch}}function Esi(i,t,u){let l=i.find((n)=>n.modelId===t);return{title:l?.title??u??t,providerId:l?.providerId,capabilities:l?.capabilities,limits:l?.limits??null}}async function my(i,t){let u=i.organization?.id;if(!u)throw Error("resolveTier called without an organization");let n=(await i.storage.organizationSettings.get(u))?.simple_mode?.tiers?.[t]??null,f=await i.storage.aiProviderKeys.list({organizationId:u});if(n&&f.some((g)=>g.id===n.keyId)){let g=await hsi(i,n.keyId,u).catch(()=>[]);return{credentialId:n.keyId,modelId:n.modelId,modelMeta:Esi(g,n.modelId,n.title)}}if(f.length===0)throw new iz(t);let c={};await Promise.all(f.map(async(g)=>{c[g.id]=await hsi(i,g.id,u).catch(()=>[])}));let $=f.map((g)=>({id:g.id,providerId:g.providerId,label:g.label,presetId:g.presetId,createdBy:g.createdBy,createdAt:g.createdAt})),d=aKi($,c),_=TE0(t,d);if(!_)throw new iz(t);return{credentialId:_.keyId,modelId:_.modelId,modelMeta:Esi(c[_.keyId]??[],_.modelId,_.title)}}async function u3u(i,t,u){let l=i.organization?.id;if(!l)throw Error("resolveSpecificModel called without an organization");let n=await hsi(i,t,l).catch(()=>[]);return{credentialId:t,modelId:u,modelMeta:Esi(n,u)}}async function tz(i,t){try{return await my(i,t)}catch(u){if(u instanceof iz)return null;return console.warn(`[resolveTier] tier "${t}" resolution failed:`,u),null}}var iz,FE0=5000;var Ldi=w(()=>{kl();iz=class iz extends Error{tier;constructor(i){super(`No model available for tier "${i}". Connect a provider or configure the tier in organization settings.`);this.tier=i;this.name="TierUnavailableError"}}});function l3u(i){return i instanceof _V||typeof i==="object"&&i!==null&&i.permanent===!0}var _V;var vsi=w(()=>{_V=class _V extends Error{permanent=!0;code;constructor(i,t){super(t);this.name="PermanentRunError",this.code=i}}});function IE0(i){if(!i)return null;try{let t=JSON.parse(i);if(Array.isArray(t)&&t.every((u)=>typeof u==="string"))return t.length>0?t:null}catch{}return null}function n3u(i,t,u,l){return{messages:JSON.parse(i.messages).map(($)=>({...$,id:crypto.randomUUID()})),models:{credentialId:l.credentialId,thinking:l.thinking,...l.image?{image:l.image}:{},...l.deepResearch?{deepResearch:l.deepResearch}:{}},agent:{id:i.virtual_mcp_id},toolAllowlist:IE0(i.tools),maxAgentSteps:i.max_agent_steps??void 0,temperature:i.temperature??0.5,toolApprovalLevel:"auto",mode:"default",organizationId:i.organization_id,userId:i.created_by,triggerId:t??void 0,taskId:u}}function y$(i,t,u,l,n,f,c,$){return y$.fromTZ(y$.tp(i,t,u,l,n,f,c),$)}function rsi(i,t=new Date){let u=t.toLocaleString("en-US",{timeZone:i,timeZoneName:"shortOffset"}).split(" ").slice(-1)[0],l=t.toLocaleString("en-US").replace(/[\u202f]/," ");return Date.parse(`${l} GMT`)-Date.parse(`${l} ${u}`)}function ZE0(i,t){let u=new Date(Date.parse(i));if(isNaN(u))throw Error("minitz: Invalid ISO8601 passed to parser.");let l=i.substring(9);return i.includes("Z")||l.includes("-")||l.includes("+")?y$.tp(u.getUTCFullYear(),u.getUTCMonth()+1,u.getUTCDate(),u.getUTCHours(),u.getUTCMinutes(),u.getUTCSeconds(),"Etc/UTC"):y$.tp(u.getFullYear(),u.getMonth()+1,u.getDate(),u.getHours(),u.getMinutes(),u.getSeconds(),t)}function BE0(i){if(i===void 0&&(i={}),delete i.name,i.legacyMode=i.legacyMode===void 0?!0:i.legacyMode,i.paused=i.paused===void 0?!1:i.paused,i.maxRuns=i.maxRuns===void 0?1/0:i.maxRuns,i.catch=i.catch===void 0?!1:i.catch,i.interval=i.interval===void 0?0:parseInt(i.interval.toString(),10),i.utcOffset=i.utcOffset===void 0?void 0:parseInt(i.utcOffset.toString(),10),i.unref=i.unref===void 0?!1:i.unref,i.startAt&&(i.startAt=new T6(i.startAt,i.timezone)),i.stopAt&&(i.stopAt=new T6(i.stopAt,i.timezone)),i.interval!==null){if(isNaN(i.interval))throw Error("CronOptions: Supplied value for interval is not a number");if(i.interval<0)throw Error("CronOptions: Supplied value for interval can not be negative")}if(i.utcOffset!==void 0){if(isNaN(i.utcOffset))throw Error("CronOptions: Invalid value passed for utcOffset, should be number representing minutes offset from UTC.");if(i.utcOffset<-870||i.utcOffset>870)throw Error("CronOptions: utcOffset out of bounds.");if(i.utcOffset!==void 0&&i.timezone)throw Error("CronOptions: Combining 'utcOffset' with 'timezone' is not allowed.")}if(i.unref!==!0&&i.unref!==!1)throw Error("CronOptions: Unref should be either true, false or undefined(false).");return i}function gV(i){return Object.prototype.toString.call(i)==="[object Function]"||typeof i=="function"||i instanceof Function}function QE0(i){return gV(i)}function PE0(i){typeof Deno<"u"&&typeof Deno.unrefTimer<"u"?Deno.unrefTimer(i):i&&typeof i.unref<"u"&&i.unref()}var wsi=32,hV,d3u,f3u=class{pattern;timezone;second;minute;hour;day;month;dayOfWeek;lastDayOfMonth;starDOM;starDOW;constructor(i,t){this.pattern=i,this.timezone=t,this.second=Array(60).fill(0),this.minute=Array(60).fill(0),this.hour=Array(24).fill(0),this.day=Array(31).fill(0),this.month=Array(12).fill(0),this.dayOfWeek=Array(7).fill(0),this.lastDayOfMonth=!1,this.starDOM=!1,this.starDOW=!1,this.parse()}parse(){if(!(typeof this.pattern=="string"||this.pattern instanceof String))throw TypeError("CronPattern: Pattern has to be of type string.");this.pattern.indexOf("@")>=0&&(this.pattern=this.handleNicknames(this.pattern).trim());let i=this.pattern.replace(/\s+/g," ").split(" ");if(i.length<5||i.length>6)throw TypeError("CronPattern: invalid configuration format ('"+this.pattern+"'), exactly five or six space separated parts are required.");if(i.length===5&&i.unshift("0"),i[3].indexOf("L")>=0&&(i[3]=i[3].replace("L",""),this.lastDayOfMonth=!0),i[3]=="*"&&(this.starDOM=!0),i[4].length>=3&&(i[4]=this.replaceAlphaMonths(i[4])),i[5].length>=3&&(i[5]=this.replaceAlphaDays(i[5])),i[5]=="*"&&(this.starDOW=!0),this.pattern.indexOf("?")>=0){let t=new T6(new Date,this.timezone).getDate(!0);i[0]=i[0].replace("?",t.getSeconds().toString()),i[1]=i[1].replace("?",t.getMinutes().toString()),i[2]=i[2].replace("?",t.getHours().toString()),this.starDOM||(i[3]=i[3].replace("?",t.getDate().toString())),i[4]=i[4].replace("?",(t.getMonth()+1).toString()),this.starDOW||(i[5]=i[5].replace("?",t.getDay().toString()))}this.throwAtIllegalCharacters(i),this.partToArray("second",i[0],0,1),this.partToArray("minute",i[1],0,1),this.partToArray("hour",i[2],0,1),this.partToArray("day",i[3],-1,1),this.partToArray("month",i[4],-1,1),this.partToArray("dayOfWeek",i[5],0,hV),this.dayOfWeek[7]&&(this.dayOfWeek[0]=this.dayOfWeek[7])}partToArray(i,t,u,l){let n=this[i],f=i==="day"&&this.lastDayOfMonth;if(t===""&&!f)throw TypeError("CronPattern: configuration entry "+i+" ("+t+") is empty, check for trailing spaces.");if(t==="*")return n.fill(l);let c=t.split(",");if(c.length>1)for(let $=0;$<c.length;$++)this.partToArray(i,c[$],u,l);else t.indexOf("-")!==-1&&t.indexOf("/")!==-1?this.handleRangeWithStepping(t,i,u,l):t.indexOf("-")!==-1?this.handleRange(t,i,u,l):t.indexOf("/")!==-1?this.handleStepping(t,i,u,l):t!==""&&this.handleNumber(t,i,u,l)}throwAtIllegalCharacters(i){for(let t=0;t<i.length;t++)if((t===5?/[^/*0-9,\-#L]+/:/[^/*0-9,-]+/).test(i[t]))throw TypeError("CronPattern: configuration entry "+t+" ("+i[t]+") contains illegal characters.")}handleNumber(i,t,u,l){let n=this.extractNth(i,t),f=parseInt(n[0],10)+u;if(isNaN(f))throw TypeError("CronPattern: "+t+" is not a number: '"+i+"'");this.setPart(t,f,n[1]||l)}setPart(i,t,u){if(!Object.prototype.hasOwnProperty.call(this,i))throw TypeError("CronPattern: Invalid part specified: "+i);if(i==="dayOfWeek"){if(t===7&&(t=0),t<0||t>6)throw RangeError("CronPattern: Invalid value for dayOfWeek: "+t);this.setNthWeekdayOfMonth(t,u);return}if(i==="second"||i==="minute"){if(t<0||t>=60)throw RangeError("CronPattern: Invalid value for "+i+": "+t)}else if(i==="hour"){if(t<0||t>=24)throw RangeError("CronPattern: Invalid value for "+i+": "+t)}else if(i==="day"){if(t<0||t>=31)throw RangeError("CronPattern: Invalid value for "+i+": "+t)}else if(i==="month"&&(t<0||t>=12))throw RangeError("CronPattern: Invalid value for "+i+": "+t);this[i][t]=u}handleRangeWithStepping(i,t,u,l){let n=this.extractNth(i,t),f=n[0].match(/^(\d+)-(\d+)\/(\d+)$/);if(f===null)throw TypeError("CronPattern: Syntax error, illegal range with stepping: '"+i+"'");let[,c,$,d]=f,_=parseInt(c,10)+u,g=parseInt($,10)+u,h=parseInt(d,10);if(isNaN(_))throw TypeError("CronPattern: Syntax error, illegal lower range (NaN)");if(isNaN(g))throw TypeError("CronPattern: Syntax error, illegal upper range (NaN)");if(isNaN(h))throw TypeError("CronPattern: Syntax error, illegal stepping: (NaN)");if(h===0)throw TypeError("CronPattern: Syntax error, illegal stepping: 0");if(h>this[t].length)throw TypeError("CronPattern: Syntax error, steps cannot be greater than maximum value of part ("+this[t].length+")");if(_>g)throw TypeError("CronPattern: From value is larger than to value: '"+i+"'");for(let E=_;E<=g;E+=h)this.setPart(t,E,n[1]||l)}extractNth(i,t){let u=i,l;if(u.includes("#")){if(t!=="dayOfWeek")throw Error("CronPattern: nth (#) only allowed in day-of-week field");l=u.split("#")[1],u=u.split("#")[0]}return[u,l]}handleRange(i,t,u,l){let n=this.extractNth(i,t),f=n[0].split("-");if(f.length!==2)throw TypeError("CronPattern: Syntax error, illegal range: '"+i+"'");let c=parseInt(f[0],10)+u,$=parseInt(f[1],10)+u;if(isNaN(c))throw TypeError("CronPattern: Syntax error, illegal lower range (NaN)");if(isNaN($))throw TypeError("CronPattern: Syntax error, illegal upper range (NaN)");if(c>$)throw TypeError("CronPattern: From value is larger than to value: '"+i+"'");for(let d=c;d<=$;d++)this.setPart(t,d,n[1]||l)}handleStepping(i,t,u,l){let n=this.extractNth(i,t),f=n[0].split("/");if(f.length!==2)throw TypeError("CronPattern: Syntax error, illegal stepping: '"+i+"'");f[0]===""&&(f[0]="*");let c=0;f[0]!=="*"&&(c=parseInt(f[0],10)+u);let $=parseInt(f[1],10);if(isNaN($))throw TypeError("CronPattern: Syntax error, illegal stepping: (NaN)");if($===0)throw TypeError("CronPattern: Syntax error, illegal stepping: 0");if($>this[t].length)throw TypeError("CronPattern: Syntax error, max steps for part is ("+this[t].length+")");for(let d=c;d<this[t].length;d+=$)this.setPart(t,d,n[1]||l)}replaceAlphaDays(i){return i.replace(/-sun/gi,"-7").replace(/sun/gi,"0").replace(/mon/gi,"1").replace(/tue/gi,"2").replace(/wed/gi,"3").replace(/thu/gi,"4").replace(/fri/gi,"5").replace(/sat/gi,"6")}replaceAlphaMonths(i){return i.replace(/jan/gi,"1").replace(/feb/gi,"2").replace(/mar/gi,"3").replace(/apr/gi,"4").replace(/may/gi,"5").replace(/jun/gi,"6").replace(/jul/gi,"7").replace(/aug/gi,"8").replace(/sep/gi,"9").replace(/oct/gi,"10").replace(/nov/gi,"11").replace(/dec/gi,"12")}handleNicknames(i){let t=i.trim().toLowerCase();return t==="@yearly"||t==="@annually"?"0 0 1 1 *":t==="@monthly"?"0 0 1 * *":t==="@weekly"?"0 0 * * 0":t==="@daily"?"0 0 * * *":t==="@hourly"?"0 * * * *":i}setNthWeekdayOfMonth(i,t){if(typeof t!="number"&&t==="L")this.dayOfWeek[i]=this.dayOfWeek[i]|wsi;else if(t===hV)this.dayOfWeek[i]=hV;else if(t<6&&t>0)this.dayOfWeek[i]=this.dayOfWeek[i]|d3u[t-1];else throw TypeError(`CronPattern: nth weekday out of range, should be 1-5 or L. Value: ${t}, Type: ${typeof t}`)}},c3u,v2,T6=class i{tz;ms;second;minute;hour;day;month;year;constructor(t,u){if(this.tz=u,t&&t instanceof Date)if(!isNaN(t))this.fromDate(t);else throw TypeError("CronDate: Invalid date passed to CronDate constructor");else if(t===void 0)this.fromDate(new Date);else if(t&&typeof t=="string")this.fromString(t);else if(t instanceof i)this.fromCronDate(t);else throw TypeError("CronDate: Invalid type ("+typeof t+") passed to CronDate constructor")}isNthWeekdayOfMonth(t,u,l,n){let f=new Date(Date.UTC(t,u,l)).getUTCDay(),c=0;for(let $=1;$<=l;$++)new Date(Date.UTC(t,u,$)).getUTCDay()===f&&c++;if(n&hV&&d3u[c-1]&n)return!0;if(n&wsi){let $=new Date(Date.UTC(t,u+1,0)).getUTCDate();for(let d=l+1;d<=$;d++)if(new Date(Date.UTC(t,u,d)).getUTCDay()===f)return!1;return!0}return!1}fromDate(t){if(this.tz!==void 0)if(typeof this.tz=="number")this.ms=t.getUTCMilliseconds(),this.second=t.getUTCSeconds(),this.minute=t.getUTCMinutes()+this.tz,this.hour=t.getUTCHours(),this.day=t.getUTCDate(),this.month=t.getUTCMonth(),this.year=t.getUTCFullYear(),this.apply();else{let u=y$.toTZ(t,this.tz);this.ms=t.getMilliseconds(),this.second=u.s,this.minute=u.i,this.hour=u.h,this.day=u.d,this.month=u.m-1,this.year=u.y}else this.ms=t.getMilliseconds(),this.second=t.getSeconds(),this.minute=t.getMinutes(),this.hour=t.getHours(),this.day=t.getDate(),this.month=t.getMonth(),this.year=t.getFullYear()}fromCronDate(t){this.tz=t.tz,this.year=t.year,this.month=t.month,this.day=t.day,this.hour=t.hour,this.minute=t.minute,this.second=t.second,this.ms=t.ms}apply(){if(this.month>11||this.day>c3u[this.month]||this.hour>59||this.minute>59||this.second>59||this.hour<0||this.minute<0||this.second<0){let t=new Date(Date.UTC(this.year,this.month,this.day,this.hour,this.minute,this.second,this.ms));return this.ms=t.getUTCMilliseconds(),this.second=t.getUTCSeconds(),this.minute=t.getUTCMinutes(),this.hour=t.getUTCHours(),this.day=t.getUTCDate(),this.month=t.getUTCMonth(),this.year=t.getUTCFullYear(),!0}else return!1}fromString(t){if(typeof this.tz=="number"){let u=y$.fromTZISO(t);this.ms=u.getUTCMilliseconds(),this.second=u.getUTCSeconds(),this.minute=u.getUTCMinutes(),this.hour=u.getUTCHours(),this.day=u.getUTCDate(),this.month=u.getUTCMonth(),this.year=u.getUTCFullYear(),this.apply()}else return this.fromDate(y$.fromTZISO(t,this.tz))}findNext(t,u,l,n){let f=this[u],c;l.lastDayOfMonth&&(this.month!==1?c=c3u[this.month]:c=new Date(Date.UTC(this.year,this.month+1,0,0,0,0,0)).getUTCDate());let $=!l.starDOW&&u=="day"?new Date(Date.UTC(this.year,this.month,1,0,0,0,0)).getUTCDay():void 0;for(let d=this[u]+n;d<l[u].length;d++){let _=l[u][d];if(u==="day"&&l.lastDayOfMonth&&d-n==c&&(_=1),u==="day"&&!l.starDOW){let g=l.dayOfWeek[($+(d-n-1))%7];if(g&&g&hV)g=this.isNthWeekdayOfMonth(this.year,this.month,d-n,g)?1:0;else if(g)throw Error(`CronDate: Invalid value for dayOfWeek encountered. ${g}`);t.legacyMode&&!l.starDOM?_=_||g:_=_&&g}if(_)return this[u]=d-n,f!==this[u]?2:1}return 3}recurse(t,u,l){let n=this.findNext(u,v2[l][0],t,v2[l][2]);if(n>1){let f=l+1;for(;f<v2.length;)this[v2[f][0]]=-v2[f][2],f++;if(n===3)return this[v2[l][1]]++,this[v2[l][0]]=-v2[l][2],this.apply(),this.recurse(t,u,0);if(this.apply())return this.recurse(t,u,l-1)}return l+=1,l>=v2.length?this:this.year>=3000?null:this.recurse(t,u,l)}increment(t,u,l){return this.second+=u.interval!==void 0&&u.interval>1&&l?u.interval:1,this.ms=0,this.apply(),this.recurse(t,u,0)}getDate(t){return t||this.tz===void 0?new Date(this.year,this.month,this.day,this.hour,this.minute,this.second,this.ms):typeof this.tz=="number"?new Date(Date.UTC(this.year,this.month,this.day,this.hour,this.minute-this.tz,this.second,this.ms)):y$.fromTZ(y$.tp(this.year,this.month+1,this.day,this.hour,this.minute,this.second,this.tz),!1)}getTime(){return this.getDate(!1).getTime()}},$3u=30000,edi,z5=class{name;options;_states;fn;constructor(i,t,u){let l,n;if(gV(t))n=t;else if(typeof t=="object")l=t;else if(t!==void 0)throw Error("Cron: Invalid argument passed for optionsIn. Should be one of function, or object (options).");if(gV(u))n=u;else if(typeof u=="object")l=u;else if(u!==void 0)throw Error("Cron: Invalid argument passed for funcIn. Should be one of function, or object (options).");if(this.name=l?.name,this.options=BE0(l),this._states={kill:!1,blocking:!1,previousRun:void 0,currentRun:void 0,once:void 0,currentTimeout:void 0,maxRuns:l?l.maxRuns:void 0,paused:l?l.paused:!1,pattern:new f3u("* * * * *")},i&&(i instanceof Date||typeof i=="string"&&i.indexOf(":")>0)?this._states.once=new T6(i,this.options.timezone||this.options.utcOffset):this._states.pattern=new f3u(i,this.options.timezone),this.name){if(edi.find((f)=>f.name===this.name))throw Error("Cron: Tried to initialize new named job '"+this.name+"', but name already taken.");edi.push(this)}return n!==void 0&&QE0(n)&&(this.fn=n,this.schedule()),this}nextRun(i){let t=this._next(i);return t?t.getDate(!1):null}nextRuns(i,t){this._states.maxRuns!==void 0&&i>this._states.maxRuns&&(i=this._states.maxRuns);let u=[],l=t||this._states.currentRun||void 0;for(;i--&&(l=this.nextRun(l));)u.push(l);return u}getPattern(){return this._states.pattern?this._states.pattern.pattern:void 0}isRunning(){let i=this.nextRun(this._states.currentRun),t=!this._states.paused,u=this.fn!==void 0,l=!this._states.kill;return t&&u&&l&&i!==null}isStopped(){return this._states.kill}isBusy(){return this._states.blocking}currentRun(){return this._states.currentRun?this._states.currentRun.getDate():null}previousRun(){return this._states.previousRun?this._states.previousRun.getDate():null}msToNext(i){let t=this._next(i);return t?i instanceof T6||i instanceof Date?t.getTime()-i.getTime():t.getTime()-new T6(i).getTime():null}stop(){this._states.kill=!0,this._states.currentTimeout&&clearTimeout(this._states.currentTimeout);let i=edi.indexOf(this);i>=0&&edi.splice(i,1)}pause(){return this._states.paused=!0,!this._states.kill}resume(){return this._states.paused=!1,!this._states.kill}schedule(i){if(i&&this.fn)throw Error("Cron: It is not allowed to schedule two functions using the same Croner instance.");i&&(this.fn=i);let t=this.msToNext(),u=this.nextRun(this._states.currentRun);return t==null||isNaN(t)||u===null?this:(t>$3u&&(t=$3u),this._states.currentTimeout=setTimeout(()=>this._checkTrigger(u),t),this._states.currentTimeout&&this.options.unref&&PE0(this._states.currentTimeout),this)}async _trigger(i){if(this._states.blocking=!0,this._states.currentRun=new T6(void 0,this.options.timezone||this.options.utcOffset),this.options.catch)try{this.fn!==void 0&&await this.fn(this,this.options.context)}catch(t){gV(this.options.catch)&&this.options.catch(t,this)}else this.fn!==void 0&&await this.fn(this,this.options.context);this._states.previousRun=new T6(i,this.options.timezone||this.options.utcOffset),this._states.blocking=!1}async trigger(){await this._trigger()}runsLeft(){return this._states.maxRuns}_checkTrigger(i){let t=new Date,u=!this._states.paused&&t.getTime()>=i.getTime(),l=this._states.blocking&&this.options.protect;u&&!l?(this._states.maxRuns!==void 0&&this._states.maxRuns--,this._trigger()):u&&l&&gV(this.options.protect)&&setTimeout(()=>this.options.protect(this),0),this.schedule()}_next(i){let t=!!(i||this._states.currentRun),u=!1;!i&&this.options.startAt&&this.options.interval&&([i,t]=this._calculatePreviousRun(i,t),u=!i),i=new T6(i,this.options.timezone||this.options.utcOffset),this.options.startAt&&i&&i.getTime()<this.options.startAt.getTime()&&(i=this.options.startAt);let l=this._states.once||new T6(i,this.options.timezone||this.options.utcOffset);return!u&&l!==this._states.once&&(l=l.increment(this._states.pattern,this.options,t)),this._states.once&&this._states.once.getTime()<=i.getTime()||l===null||this._states.maxRuns!==void 0&&this._states.maxRuns<=0||this._states.kill||this.options.stopAt&&l.getTime()>=this.options.stopAt.getTime()?null:l}_calculatePreviousRun(i,t){let u=new T6(void 0,this.options.timezone||this.options.utcOffset),l=i;if(this.options.startAt.getTime()<=u.getTime()){l=this.options.startAt;let n=l.getTime()+this.options.interval*1000;for(;n<=u.getTime();)l=new T6(l,this.options.timezone||this.options.utcOffset).increment(this._states.pattern,this.options,!0),n=l.getTime()+this.options.interval*1000;t=!0}return l===null&&(l=void 0),[l,t]}};var EV=w(()=>{y$.fromTZISO=(i,t,u)=>y$.fromTZ(ZE0(i,t),u);y$.fromTZ=function(i,t){let u=new Date(Date.UTC(i.y,i.m-1,i.d,i.h,i.i,i.s)),l=rsi(i.tz,u),n=new Date(u.getTime()-l),f=rsi(i.tz,n);if(f-l===0)return n;{let c=new Date(u.getTime()-f),$=rsi(i.tz,c);if($-f===0)return c;if(!t&&$-f>0)return c;if(t)throw Error("Invalid date passed to fromTZ()");return n}};y$.toTZ=function(i,t){let u=i.toLocaleString("en-US",{timeZone:t}).replace(/[\u202f]/," "),l=new Date(u);return{y:l.getFullYear(),m:l.getMonth()+1,d:l.getDate(),h:l.getHours(),i:l.getMinutes(),s:l.getSeconds(),tz:t}};y$.tp=(i,t,u,l,n,f,c)=>({y:i,m:t,d:u,h:l,i:n,s:f,tz:c});y$.minitz=y$;hV=31|wsi,d3u=[1,2,4,8,16],c3u=[31,28,31,30,31,30,31,31,30,31,30,31],v2=[["month","year",0],["day","month",-1],["hour","day",0],["minute","hour",0],["second","minute",0]];edi=[]});function Cdi(i,t){try{return new z5(i,{timezone:"UTC"}).nextRun(t)??null}catch{return null}}var xsi=w(()=>{EV()});import{DBOS as G4,SchedulerMode as YE0}from"@dbos-inc/dbos-sdk";function vV(i){return`${AE0}${i}`}async function Mdi(i){await G4.registerQueue(vV(i),{concurrency:GE0,onConflict:"never_update"})}function ysi(i){Osi=i}function oy(){if(!Osi)throw Error("[automations] DBOS runtime not initialized \u2014 setAutomationRuntime() must run before workflows fire");return Osi}function kE0(i){if(!i||i.length===0)return;return{vision:i.includes("vision")||i.includes("image")||void 0,text:i.includes("text")||void 0,reasoning:i.includes("reasoning")||void 0,file:i.includes("file")||void 0}}async function jE0(i){let t=oy(),u=await t.storage.findById(i.automationId,i.organizationId);if(!u)return{skip:"not_found"};if(!u.active)return{skip:"inactive"};let l=await t.meshContextFactory(u.organization_id,u.created_by);if(!l)return console.warn(`[fireAutomationWorkflow] deactivating "${u.name}" \u2014 creator ${u.created_by} no longer in org ${u.organization_id}`),await t.storage.deactivateAutomation(u.id),{skip:"creator_invalid"};let n=JSON.parse(u.models),f=n.modelId&&n.credentialId?{modelId:n.modelId,credentialId:n.credentialId}:null;if(!f&&!n.tier)console.warn(`[fireAutomationWorkflow] automation ${u.id} missing tier, defaulting to "smart"`);let c=n.tier??"smart",[$,d,_]=await Promise.all([f?u3u(l,f.credentialId,f.modelId):my(l,c),tz(l,"image"),tz(l,"web_research")]),g=(E)=>({id:E.modelId,title:E.modelMeta.title,provider:E.modelMeta.providerId??null,capabilities:kE0(E.modelMeta.capabilities),limits:E.modelMeta.limits?{contextWindow:E.modelMeta.limits.contextWindow,maxOutputTokens:E.modelMeta.limits.maxOutputTokens??void 0}:void 0}),h={credentialId:$.credentialId,thinking:g($),...d?{image:{...g(d),credentialId:d.credentialId}}:{},..._?{deepResearch:{...g(_),credentialId:_.credentialId}}:{}};return{automation:u,resolvedModel:h}}async function SE0(i,t){return await oy().storage.createAutomationRunThread(i,t)}async function zE0(i){let t=oy();try{let u=new Date().toISOString();await t.storage.updateTriggerLastRunAt(i,u);let l=await t.storage.findTriggerById(i);if(l?.cron_expression){let n=Cdi(l.cron_expression,new Date);await t.storage.updateNextRunAt(i,n?n.toISOString():null)}}catch(u){console.warn(`[fireAutomationWorkflow] trigger ${i} run-time write failed:`,u instanceof Error?u.message:u)}}async function bE0(i,t,u,l){if(!await oy().meshContextFactory(i.organization_id,i.created_by))return{ok:!1,reason:"creator membership lost mid-fire"};let c=n3u(i,u.triggerId,l,t);if(u.contextMessages&&u.contextMessages.length>0){let _=u.contextMessages.flatMap((h)=>h.parts),g=c.messages.find((h)=>h.role!=="system");if(g)g.parts=[..._,...g.parts];else c.messages=[...c.messages,{id:crypto.randomUUID(),role:"user",parts:_}]}let{abortSignal:$,...d}=c;return{ok:!0,request:d}}async function Dsi(i){let t=oy();try{await t.storage.markRunFailed(i)}catch{}}async function KE0(i){let t=oy();try{await t.storage.deactivateAutomation(i)}catch{}}async function HE0(i){let t=await G4.runStep(()=>jE0(i),{name:"prepareFire"});if("skip"in t)return{skipped:t.skip};let u=await G4.runStep(()=>SE0(t.automation,i.triggerId),{name:"createRunThread"});if(i.triggerId){let f=i.triggerId;await G4.runStep(()=>zE0(f),{name:"updateTriggerTiming"})}let l=await G4.runStep(()=>bE0(t.automation,t.resolvedModel,i,u),{name:"buildDispatchRequest"});if(!l.ok)return await G4.runStep(()=>Dsi(u),{name:"markRunFailed"}),{taskId:u,error:l.reason};let n=oy();try{await gsi({threadId:u,request:l.request,timeoutMs:n.runTimeoutMs??WE0,source:"automation"})}catch(f){let c=f instanceof Error?f.message:String(f);if(l3u(f))return console.warn(`[fireAutomationWorkflow] deactivating "${t.automation.name}" (${t.automation.id}) \u2014 permanent dispatch error, will not fire again: ${c}`),await G4.runStep(()=>KE0(t.automation.id),{name:"deactivateAutomation"}),await G4.runStep(()=>Dsi(u),{name:"markRunFailed"}),{taskId:u,error:c};return console.error(`[fireAutomationWorkflow] ERROR "${t.automation.name}" taskId=${u}:`,c),await G4.runStep(()=>Dsi(u),{name:"markRunFailed"}),{taskId:u,error:c}}return{taskId:u}}async function RE0(i,t){await Mdi(t.organizationId),await G4.startWorkflow(qdi,{queueName:vV(t.organizationId)})(t)}async function ME0(){let i=Date.now()-LE0,t=new Date(i).toISOString(),u=0,l=0;while(l<200){let n=await G4.listWorkflows({status:[...CE0],endTime:t,limit:_3u,loadInput:!1,loadOutput:!1});if(n.length===0)break;if(await G4.deleteWorkflows(n.map((f)=>f.workflowID)),u+=n.length,l++,n.length<_3u)break}return console.log(`[automations-gc] deleted ${u} workflow(s) in ${l} batch(es) (cutoff=${t})`),{deleted:u,batches:l,cutoffMs:i}}async function qE0(i,t){await G4.runStep(()=>ME0(),{name:"automationsGarbageCollect"})}var AE0="automations-org-",GE0=10,WE0=300000,Osi=null,qdi,g3u,LE0=604800000,_3u=500,eE0="17 3 * * *",CE0,VE0;var Xsi=w(()=>{Rdi();Ldi();vsi();xsi();qdi=G4.registerWorkflow(HE0,{name:"fireAutomationWorkflow"});g3u=G4.registerWorkflow(RE0,{name:"cronEntryWorkflow"}),CE0=["SUCCESS","ERROR","CANCELLED"];VE0=G4.registerWorkflow(qE0,{name:"automationsGcWorkflow"});G4.registerScheduled(VE0,{name:"automationsGcWorkflow",crontab:eE0,mode:YE0.ExactlyOncePerIntervalWhenActive})});import{DBOS as uz}from"@dbos-inc/dbos-sdk";function sy(i){return`auto-trigger-${i}`}async function Vdi(i,t){if(i.type!=="cron"||!i.cron_expression)return;await uz.createSchedule({scheduleName:sy(i.id),workflowFn:g3u,schedule:i.cron_expression,context:{automationId:t.id,organizationId:t.organization_id,triggerId:i.id}})}async function Nsi(i){try{await uz.deleteSchedule(sy(i))}catch(t){console.warn(`[dbos-sync] deleteSchedule(${i}) failed:`,t instanceof Error?t.message:t)}}async function E3u(i,t){let u=i.filter((l)=>l.type==="cron");await Promise.allSettled(u.map(async(l)=>{try{if(t)await uz.resumeSchedule(sy(l.id));else await uz.pauseSchedule(sy(l.id))}catch(n){console.warn(`[dbos-sync] ${t?"resume":"pause"}Schedule(${l.id}) failed:`,n instanceof Error?n.message:n)}}))}async function v3u(i){await Promise.allSettled(i.filter((t)=>t.type==="cron").map((t)=>Nsi(t.id)))}function r3u(i,t){return t?`auto:${i.automationId}:${t}`:void 0}async function Jsi(i,t){await Mdi(i.organizationId);let u=r3u(i,t?.idempotencyKey);return await(await uz.startWorkflow(qdi,{workflowID:u,queueName:vV(i.organizationId)})(i)).getResult()}async function rV(i,t){await Mdi(i.organizationId);let u=r3u(i,t?.idempotencyKey);await uz.startWorkflow(qdi,{workflowID:u,queueName:vV(i.organizationId)})(i)}var h3u="auto-trigger-";var py=w(()=>{Xsi()});class I6{constructor(i={}){this._started=!1,this._hasHandledRequest=!1,this._streamMapping=new Map,this._requestToStreamMapping=new Map,this._requestResponseMap=new Map,this._initialized=!1,this._enableJsonResponse=!1,this._standaloneSseStreamId="_GET_stream",this.sessionIdGenerator=i.sessionIdGenerator,this._enableJsonResponse=i.enableJsonResponse??!1,this._eventStore=i.eventStore,this._onsessioninitialized=i.onsessioninitialized,this._onsessionclosed=i.onsessionclosed,this._allowedHosts=i.allowedHosts,this._allowedOrigins=i.allowedOrigins,this._enableDnsRebindingProtection=i.enableDnsRebindingProtection??!1,this._retryInterval=i.retryInterval}async start(){if(this._started)throw Error("Transport already started");this._started=!0}createJsonErrorResponse(i,t,u,l){let n={code:t,message:u};if(l?.data!==void 0)n.data=l.data;return new Response(JSON.stringify({jsonrpc:"2.0",error:n,id:null}),{status:i,headers:{"Content-Type":"application/json",...l?.headers}})}validateRequestHeaders(i){if(!this._enableDnsRebindingProtection)return;if(this._allowedHosts&&this._allowedHosts.length>0){let t=i.headers.get("host");if(!t||!this._allowedHosts.includes(t)){let u=`Invalid Host header: ${t}`;return this.onerror?.(Error(u)),this.createJsonErrorResponse(403,-32000,u)}}if(this._allowedOrigins&&this._allowedOrigins.length>0){let t=i.headers.get("origin");if(t&&!this._allowedOrigins.includes(t)){let u=`Invalid Origin header: ${t}`;return this.onerror?.(Error(u)),this.createJsonErrorResponse(403,-32000,u)}}return}async handleRequest(i,t){if(!this.sessionIdGenerator&&this._hasHandledRequest)throw Error("Stateless transport cannot be reused across requests. Create a new transport per request.");this._hasHandledRequest=!0;let u=this.validateRequestHeaders(i);if(u)return u;switch(i.method){case"POST":return this.handlePostRequest(i,t);case"GET":return this.handleGetRequest(i);case"DELETE":return this.handleDeleteRequest(i);default:return this.handleUnsupportedRequest()}}async writePrimingEvent(i,t,u,l){if(!this._eventStore)return;if(l<"2025-11-25")return;let n=await this._eventStore.storeEvent(u,{}),f=`id: ${n}
106864
+ - Use EVENT_CANCEL to stop recurring events.`,annotations:{title:"Publish Event",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!1},inputSchema:oe,outputSchema:se,handler:async(i,t)=>{Ji(t);let u=hi(t);await t.access.check();let l=t.connectionId;if(!l)throw Error("Connection ID required to publish events. Use a connection-scoped token.");let n=await t.eventBus.publish(u.id,l,{type:i.type,subject:i.subject,data:i.data,deliverAt:i.deliverAt,cron:i.cron});return{id:n.id,type:n.type,source:n.source,time:n.time}}})});var mmi;var jvu=w(()=>{ai();$2();mmi=li({name:"EVENT_SUBSCRIBE",description:"Subscribe to events of a specific type. Caller's connection is set as subscriber automatically.",annotations:{title:"Subscribe to Events",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:pe,outputSchema:iC,handler:async(i,t)=>{Ji(t);let u=hi(t);await t.access.check();let l=t.connectionId;if(!l)throw Error("Connection ID required to subscribe. Use a connection-scoped token.");let n=await t.eventBus.subscribe(u.id,{connectionId:l,eventType:i.eventType,publisher:i.publisher,filter:i.filter});return{subscription:{id:n.id,connectionId:n.connectionId,eventType:n.eventType,publisher:n.publisher,filter:n.filter,enabled:n.enabled,createdAt:n.createdAt instanceof Date?n.createdAt.toISOString():n.createdAt,updatedAt:n.updatedAt instanceof Date?n.updatedAt.toISOString():n.updatedAt}}}})});var omi;var Svu=w(()=>{ai();$2();omi=li({name:"EVENT_UNSUBSCRIBE",description:"Remove a subscription to stop receiving events of that type.",annotations:{title:"Unsubscribe from Events",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:lC,outputSchema:nC,handler:async(i,t)=>{Ji(t);let u=hi(t);await t.access.check();let l=t.connectionId;if(!l)throw Error("Connection ID required to unsubscribe. Use a connection-scoped token.");let n=await t.eventBus.getSubscription(u.id,i.subscriptionId);if(!n)throw Error(`Subscription not found: ${i.subscriptionId}`);if(n.connectionId!==l)throw Error("Cannot unsubscribe from a subscription owned by another connection");return{success:(await t.eventBus.unsubscribe(u.id,i.subscriptionId)).success,subscriptionId:i.subscriptionId}}})});var smi;var zvu=w(()=>{ai();$2();smi=li({name:"EVENT_CANCEL",description:"Stop a recurring event from delivering further. Only the original publisher can cancel.",annotations:{title:"Cancel Recurring Event",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:fC,outputSchema:cC,handler:async(i,t)=>{Ji(t);let u=hi(t);await t.access.check();let l=t.connectionId;if(!l)throw Error("Connection ID required to cancel events. Use a connection-scoped token.");if(!await t.eventBus.getEvent(u.id,i.eventId))throw Error(`Event not found: ${i.eventId}`);if(!(await t.eventBus.cancelEvent(u.id,i.eventId,l)).success)throw Error("Failed to cancel event. Either the event is already completed/failed, or you are not the publisher.");return{success:!0,eventId:i.eventId}}})});var pmi;var bvu=w(()=>{ai();$2();pmi=li({name:"EVENT_ACK",description:"Acknowledge event delivery after processing. Only needed for events received with retryAfter.",annotations:{title:"Acknowledge Event",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:$C,outputSchema:dC,handler:async(i,t)=>{Ji(t);let u=hi(t);await t.access.check();let l=t.connectionId;if(!l)throw Error("Connection ID required to acknowledge events. Use a connection-scoped token.");if(!(await t.eventBus.ackEvent(u.id,i.eventId,l)).success)throw Error("Failed to acknowledge event. Either the event was not found, already delivered, or you are not a subscriber.");return{success:!0,eventId:i.eventId}}})});var ioi;var Kvu=w(()=>{ai();$2();ioi=li({name:"EVENT_SUBSCRIPTION_LIST",description:"List event subscriptions. Filter by connection ID to scope results.",annotations:{title:"List Event Subscriptions",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:Gvu,outputSchema:Wvu,handler:async(i,t)=>{Ji(t);let u=hi(t);return await t.access.check(),{subscriptions:(await t.eventBus.listSubscriptions(u.id,i.connectionId)).map((n)=>({id:n.id,connectionId:n.connectionId,eventType:n.eventType,publisher:n.publisher,filter:n.filter,enabled:n.enabled,createdAt:n.createdAt instanceof Date?n.createdAt.toISOString():n.createdAt,updatedAt:n.updatedAt instanceof Date?n.updatedAt.toISOString():n.updatedAt}))}}})});var toi;var Hvu=w(()=>{ai();$2();toi=li({name:"EVENT_SYNC_SUBSCRIPTIONS",description:"Declaratively sync subscriptions: creates new, deletes removed, updates changed filters.",annotations:{title:"Sync Event Subscriptions",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:tC,outputSchema:uC,handler:async(i,t)=>{Ji(t);let u=hi(t);await t.access.check();let l=t.connectionId;if(!l)throw Error("Connection ID required to sync subscriptions. Use a connection-scoped token.");let n=await t.eventBus.syncSubscriptions(u.id,{connectionId:l,subscriptions:i.subscriptions});return{created:n.created,updated:n.updated,deleted:n.deleted,unchanged:n.unchanged,subscriptions:n.subscriptions.map((f)=>({id:f.id,connectionId:f.connectionId,eventType:f.eventType,publisher:f.publisher,filter:f.filter,enabled:f.enabled,createdAt:f.createdAt instanceof Date?f.createdAt.toISOString():f.createdAt,updatedAt:f.updatedAt instanceof Date?f.updatedAt.toISOString():f.updatedAt}))}}})});var Rvu=w(()=>{kvu();jvu();Svu();zvu();bvu();Kvu();Hvu();$2()});var qy=w(()=>{xfi()});function Gdi(i){let t=i.access.getRole();if(!t||!Tv.includes(t))throw new yy("Only organization owners and admins can change org-wide pin status")}var uoi=w(()=>{Jy();dS()});import{z as Cvu}from"zod";function Ih0(){let i=Lvu[Math.floor(Math.random()*Lvu.length)];return`icon://${evu[Math.floor(Math.random()*evu.length)]}?color=${i}`}var Lvu,evu,Zh0,Bh0,loi;var Mvu=w(()=>{ai();qy();uoi();Lvu=["red","orange","amber","yellow","lime","green","emerald","cyan","sky","blue","indigo","violet","purple","fuchsia","pink","rose"],evu=["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"];Zh0=Cvu.object({data:gL.describe("Data for the new virtual MCP")}),Bh0=Cvu.object({item:q$.describe("The created virtual MCP entity")}),loi=li({name:"COLLECTION_VIRTUAL_MCP_CREATE",description:"Create a Virtual MCP that aggregates tools from multiple connections into one endpoint.",annotations:{title:"Create Virtual MCP",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:Zh0,outputSchema:Bh0,handler:async(i,t)=>{Ji(t);let u=hi(t);await t.access.check();let l=Ou(t);if(!l)throw Error("User ID required to create virtual MCP");if(i.data.pinned===!0)Gdi(t);let n={...i.data,icon:i.data.icon??Ih0()};return{item:await t.storage.virtualMcps.create(u.id,l,n)}}})});function Qh0(i){let t=[],u=0;while(u<i.length){let l=i[u];if(l==="%")t.push(".*");else if(l==="_")t.push(".");else if(/[.*+?^${}()|[\]\\]/.test(l))t.push("\\"+l);else t.push(l);u++}return t.join("")}function G5(i){return typeof i==="string"||typeof i==="number"}function noi(i,t){let u=t.split("."),l=i;for(let n of u){if(l==null||typeof l!=="object")return;l=l[n]}return l}function Ph0(i,t){return i.connections.some((u)=>u.connection_id===t)}function Wdi(i,t){if("conditions"in t){let{operator:$,conditions:d}=t;switch($){case"and":return d.every((_)=>Wdi(i,_));case"or":return d.some((_)=>Wdi(i,_));case"not":return!d.every((_)=>Wdi(i,_));default:return!0}}let{field:u,operator:l,value:n}=t,f=u.join(".");if(f==="connection_id"){if(l!=="eq"||typeof n!=="string")return!1;return Ph0(i,n)}let c=noi(i,f);switch(l){case"eq":return c===n;case"gt":return G5(c)&&G5(n)&&c>n;case"gte":return G5(c)&&G5(n)&&c>=n;case"lt":return G5(c)&&G5(n)&&c<n;case"lte":return G5(c)&&G5(n)&&c<=n;case"in":return Array.isArray(n)&&n.includes(c);case"like":if(typeof c!=="string"||typeof n!=="string")return!1;if(n.length>100)return!1;let $=Qh0(n);return new RegExp(`^${$}$`,"i").test(c);case"contains":if(typeof c!=="string"||typeof n!=="string")return!1;return c.toLowerCase().includes(n.toLowerCase());default:return!0}}function Yh0(i,t){return[...i].sort((u,l)=>{for(let n of t){let f=n.field.join("."),c=noi(u,f),$=noi(l,f),d=0;if(c==null&&$==null)continue;if(c==null)d=n.nulls==="first"?-1:1;else if($==null)d=n.nulls==="first"?1:-1;else if(typeof c==="string"&&typeof $==="string")d=c.localeCompare($);else if(typeof c==="number"&&typeof $==="number")d=c-$;else d=String(c).localeCompare(String($));if(d!==0)return n.direction==="desc"?-d:d}return 0})}var Ah0,Gh0,foi;var qvu=w(()=>{jd();ai();qy();Ah0=Nh,Gh0=y3(q$),foi=li({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:Ah0,outputSchema:Gh0,handler:async(i,t)=>{await t.access.check();let u=hi(t),l=i.where&&!("conditions"in i.where)&&i.where.field.join(".")==="connection_id"&&i.where.operator==="eq"&&typeof i.where.value==="string"?i.where.value:void 0,n=i.where&&!("conditions"in i.where)&&i.where.field.join(".")==="pinned"&&i.where.operator==="eq"&&typeof i.where.value==="boolean"?i.where.value:void 0,c=l?await t.storage.virtualMcps.listByConnectionId(u.id,l):await t.storage.virtualMcps.list(u.id,n!==void 0?{pinnedOnly:n}:void 0);if(i.where)c=c.filter((E)=>Wdi(E,i.where));if(i.orderBy&&i.orderBy.length>0)c=Yh0(c,i.orderBy);let $=c.length,d=i.offset??0,_=i.limit??100,g=c.slice(d,d+_),h=d+_<$;return{items:g,totalCount:$,hasMore:h}}})});import{z as coi}from"zod";var Wh0,kh0,$oi;var Vvu=w(()=>{ai();qy();Wh0=coi.object({id:coi.string().describe("ID of the virtual MCP to retrieve")}),kh0=coi.object({item:q$.nullable().describe("The retrieved virtual MCP, or null if not found")}),$oi=li({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:Wh0,outputSchema:kh0,handler:async(i,t)=>{Ji(t);let u=hi(t);await t.access.check();let l=await t.storage.virtualMcps.findById(i.id);if(l&&l.organization_id!==u.id)return{item:null};if(!l)return{item:null};return{item:l}}})});import{z as doi}from"zod";var jh0,Sh0,_oi;var avu=w(()=>{ai();qy();uoi();jh0=doi.object({id:doi.string().describe("ID of the virtual MCP to update"),data:hL.describe("Partial virtual MCP data to update")}),Sh0=doi.object({item:q$.describe("The updated virtual MCP entity")}),_oi=li({name:"COLLECTION_VIRTUAL_MCP_UPDATE",description:"Update a Virtual MCP's name, slug, or connection list.",annotations:{title:"Update Virtual MCP",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:jh0,outputSchema:Sh0,handler:async(i,t)=>{Ji(t);let u=hi(t);await t.access.check();let l=Ou(t);if(!l)throw Error("User ID required to update virtual MCP");let n=await t.storage.virtualMcps.findById(i.id);if(!n)throw Error(`Virtual MCP not found: ${i.id}`);if(n.organization_id!==u.id)throw Error(`Virtual MCP not found: ${i.id}`);let f={...i.data};if(f.metadata&&n.metadata)f.metadata={...n.metadata,...f.metadata};if(f.pinned!==void 0&&f.pinned!==n.pinned)Gdi(t);return{item:await t.storage.virtualMcps.update(i.id,l,f)}}})});import{z as goi}from"zod";var zh0,bh0,hoi;var mvu=w(()=>{eS();Wv();ai();qy();zh0=goi.object({id:goi.string().describe("ID of the virtual MCP to delete")}),bh0=goi.object({item:q$.describe("The deleted virtual MCP entity")}),hoi=li({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:zh0,outputSchema:bh0,handler:async(i,t)=>{Ji(t);let u=hi(t);await t.access.check();let l=await t.storage.virtualMcps.findById(i.id);if(!l)throw Error(`Virtual MCP not found: ${i.id}`);if(l.organization_id!==u.id)throw Error(`Virtual MCP not found: ${i.id}`);await t.storage.virtualMcps.delete(i.id);let n=l.metadata?.githubRepo?.connectionId;if(n)try{let f=await t.storage.connections.findById(n,u.id);if(f&&kv(f)){let $=await new C1(t.db,t.vault).get(n);if($?.accessToken)try{await fetch("https://api.github.com/installation/token",{method:"DELETE",headers:{Authorization:`Bearer ${$.accessToken}`,Accept:"application/vnd.github+json","X-GitHub-Api-Version":"2022-11-28"},signal:AbortSignal.timeout(5000)})}catch{}await t.storage.connections.delete(n)}}catch(f){console.error("[VIRTUAL_MCP_DELETE] failed to tear down repo-scoped connection",{childConnectionId:n,error:f.message})}return{item:l}}})});import{z as md}from"zod";var Kh0,Eoi;var ovu=w(()=>{ai();Kh0=md.object({id:md.string(),virtualMcpId:md.string(),pluginId:md.string(),connectionId:md.string().nullable(),settings:md.record(md.string(),md.unknown()).nullable(),createdAt:md.string(),updatedAt:md.string()}),Eoi=li({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:md.object({virtualMcpId:md.string().describe("Virtual MCP ID"),pluginId:md.string().describe("Plugin ID")}),outputSchema:md.object({config:Kh0.nullable()}),handler:async(i,t)=>{Ji(t),await t.access.check();let{virtualMcpId:u,pluginId:l}=i,n=await t.storage.virtualMcpPluginConfigs.get(u,l);if(!n)return{config:null};return{config:{id:n.id,virtualMcpId:n.virtualMcpId,pluginId:n.pluginId,connectionId:n.connectionId,settings:n.settings,createdAt:n.createdAt instanceof Date?n.createdAt.toISOString():n.createdAt,updatedAt:n.updatedAt instanceof Date?n.updatedAt.toISOString():n.updatedAt}}}})});import{z as i4}from"zod";var Hh0,voi;var svu=w(()=>{ai();Lk();Ud();Hh0=i4.object({id:i4.string(),virtualMcpId:i4.string(),pluginId:i4.string(),connectionId:i4.string().nullable(),settings:i4.record(i4.string(),i4.unknown()).nullable(),createdAt:i4.string(),updatedAt:i4.string()}),voi=li({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:i4.object({virtualMcpId:i4.string().describe("Virtual MCP ID"),pluginId:i4.string().describe("Plugin ID"),connectionId:i4.string().nullable().optional().describe("MCP connection to bind"),settings:i4.record(i4.string(),i4.unknown()).nullable().optional().describe("Plugin-specific settings")}),outputSchema:i4.object({config:Hh0}),handler:async(i,t)=>{Ji(t),await t.access.check();let{virtualMcpId:u,pluginId:l,connectionId:n,settings:f}=i,c=Ou(t),$=await t.storage.connections.findById(u);if(!$)throw Error(`Connection not found: ${u}`);let d=n?await t.storage.connections.findById(n):null;if(n&&$.organization_id&&!d&&Ih()){if(G1i(n,$.organization_id)){if(!c)throw Error("User ID required to create dev-assets connection");let g=Rk($.organization_id,Hc());await t.storage.connections.create({...g,organization_id:$.organization_id,created_by:c})}}let _=await t.storage.virtualMcpPluginConfigs.upsert(u,l,{connectionId:n,settings:f});return{config:{id:_.id,virtualMcpId:_.virtualMcpId,pluginId:_.pluginId,connectionId:_.connectionId,settings:_.settings,createdAt:_.createdAt instanceof Date?_.createdAt.toISOString():_.createdAt,updatedAt:_.updatedAt instanceof Date?_.updatedAt.toISOString():_.updatedAt}}}})});import{z as nd}from"zod";var Rh0,roi;var pvu=w(()=>{ai();qy();Rh0=nd.object({connectionId:nd.string(),toolName:nd.string(),label:nd.string(),icon:nd.string().nullable().optional()}),roi=li({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:nd.object({virtualMcpId:nd.string().describe("Virtual MCP ID"),pinnedViews:nd.array(Rh0).describe("Pinned views to set for the virtual MCP sidebar"),layout:nd.object({defaultMainView:nd.object({type:nd.string(),id:nd.string().optional(),toolName:nd.string().optional()}).nullable().optional(),chatDefaultOpen:nd.boolean().nullable().optional()}).optional()}),outputSchema:nd.object({item:q$.nullable()}),handler:async(i,t)=>{Ji(t);let u=hi(t);await t.access.check();let{virtualMcpId:l,pinnedViews:n,layout:f}=i,c=Ou(t),$=await t.storage.virtualMcps.findById(l);if(!$)throw Error(`Virtual MCP not found: ${l}`);if($.organization_id!==u.id)throw Error(`Virtual MCP not found: ${l}`);let d=$.metadata?.ui??{},_={...d,pinnedViews:n.length>0?n:null,layout:f??d.layout??null};return{item:await t.storage.virtualMcps.update(l,c??"system",{metadata:{...$.metadata,ui:_}})}}})});import{z as d2}from"zod";var Lh0,eh0,woi;var iru=w(()=>{ai();Lh0=d2.object({ids:d2.array(d2.string()).describe("Virtual MCP ids to look up")}),eh0=d2.object({items:d2.array(d2.object({id:d2.string(),last_used_at:d2.string().optional(),last_used_by:d2.string().optional()}))}),woi=li({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:Lh0,outputSchema:eh0,handler:async(i,t)=>{Ji(t),hi(t),await t.access.check();let u=await t.storage.threads.findLastUsedByVirtualMcpIds(i.ids);return{items:i.ids.map((l)=>({id:l,last_used_at:u.get(l)?.last_used_at,last_used_by:u.get(l)?.last_used_by}))}}})});var tru=w(()=>{Mvu();qvu();Vvu();avu();mvu();ovu();svu();pvu();iru()});import{z as zf}from"zod";var xoi;var uru=w(()=>{p1();ai();xoi=li({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:zf.object({id:zf.string().describe("Log ID to fetch")}),outputSchema:zf.object({log:zf.object({id:zf.string().optional(),organizationId:zf.string(),connectionId:zf.string(),toolName:zf.string(),input:zf.record(zf.string(),zf.unknown()),output:zf.record(zf.string(),zf.unknown()),isError:zf.boolean(),errorMessage:zf.string().nullish(),durationMs:zf.number(),timestamp:zf.string(),userId:zf.string().nullish(),requestId:zf.string(),userAgent:zf.string().nullish(),virtualMcpId:zf.string().nullish(),properties:zf.record(zf.string(),zf.string()).nullish()}).nullable().describe("The monitoring log, or null if not found")}),handler:async(i,t)=>{await t.access.check(),await Sg();let u=hi(t),l=await t.storage.monitoring.getById(u.id,i.id);if(!l)return{log:null};return{log:{...l,timestamp:l.timestamp instanceof Date?l.timestamp.toISOString():l.timestamp}}}})});import{z as Ql}from"zod";var Mh0,Doi;var lru=w(()=>{p1();ai();Mh0=Ql.object({id:Ql.string().optional().describe("Unique log identifier"),organizationId:Ql.string().describe("Organization ID"),connectionId:Ql.string().describe("Connection ID"),toolName:Ql.string().describe("Name of the tool that was called"),isError:Ql.boolean().describe("Whether the call resulted in an error"),errorMessage:Ql.string().nullish().describe("Error message if applicable"),durationMs:Ql.number().describe("Call duration in milliseconds"),timestamp:Ql.string().describe("ISO 8601 timestamp of the call"),userId:Ql.string().nullish().describe("User who triggered the call"),requestId:Ql.string().describe("Unique request identifier"),userAgent:Ql.string().nullish().describe("Client identifier (x-mesh-client header)"),virtualMcpId:Ql.string().nullish().describe("Virtual MCP (Agent) ID if routed through an agent"),properties:Ql.record(Ql.string(),Ql.string()).nullish().describe("Custom key-value metadata attached to the log")}),Doi=li({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:Ql.object({connectionId:Ql.string().optional().describe("Filter by connection ID"),excludeConnectionIds:Ql.array(Ql.string()).optional().describe("Exclude logs from these connection IDs (e.g. system connections)"),virtualMcpId:Ql.string().optional().describe("Filter by Virtual MCP (Agent) ID"),toolName:Ql.string().optional().describe("Filter by tool name"),isError:Ql.boolean().optional().describe("Filter by error status"),startDate:Ql.string().datetime().optional().describe("Filter by start date (ISO 8601 datetime string)"),endDate:Ql.string().datetime().optional().describe("Filter by end date (ISO 8601 datetime string)"),limit:Ql.number().default(20).describe("Maximum number of results"),offset:Ql.number().default(0).describe("Offset for pagination"),properties:Ql.record(Ql.string(),Ql.string()).optional().describe("Filter by exact property key=value matches"),propertyKeys:Ql.array(Ql.string()).optional().describe("Filter by logs that have these property keys"),propertyPatterns:Ql.record(Ql.string(),Ql.string()).optional().describe("Filter by property value patterns (SQL LIKE, use % as wildcard)"),propertyInValues:Ql.record(Ql.string(),Ql.string()).optional().describe("Filter by exact match within comma-separated values (e.g., user_tags in 'Engineering')")}),outputSchema:Ql.object({logs:Ql.array(Mh0).describe("Array of monitoring logs"),total:Ql.number().describe("Total number of logs matching filters"),offset:Ql.number().describe("Current offset for pagination"),limit:Ql.number().describe("Current limit for pagination")}),handler:async(i,t)=>{await Sg();let u=hi(t),n=i.properties||i.propertyKeys||i.propertyPatterns||i.propertyInValues?{properties:i.properties,propertyKeys:i.propertyKeys,propertyPatterns:i.propertyPatterns,propertyInValues:i.propertyInValues}:void 0,f={organizationId:u.id,connectionId:i.connectionId,excludeConnectionIds:i.excludeConnectionIds,virtualMcpId:i.virtualMcpId,toolName:i.toolName,isError:i.isError,startDate:i.startDate?new Date(i.startDate):void 0,endDate:i.endDate?new Date(i.endDate):void 0,limit:i.limit,offset:i.offset,propertyFilters:n},c=await t.storage.monitoring.query(f);return{logs:c.logs.map(({input:$,output:d,..._})=>({..._,timestamp:_.timestamp instanceof Date?_.timestamp.toISOString():_.timestamp})),total:c.total,offset:i.offset,limit:i.limit}}})});import{z as yu}from"zod";var Ooi;var nru=w(()=>{p1();ai();Ooi=li({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:yu.object({startDate:yu.string().datetime().optional().describe("Filter by start date (ISO 8601 datetime string)"),endDate:yu.string().datetime().optional().describe("Filter by end date (ISO 8601 datetime string)"),interval:yu.string().regex(/^\d+[mhd]$/).optional().describe("Bucket interval for timeseries data (e.g. 1m, 5m, 2h, 1d). When provided, returns timeseries array."),connectionIds:yu.array(yu.string()).max(100).optional().describe("Filter by specific connection IDs (max 100)"),excludeConnectionIds:yu.array(yu.string()).max(100).optional().describe("Exclude specific connection IDs (max 100)"),toolNames:yu.array(yu.string()).max(100).optional().describe("Filter by specific tool names (max 100)"),status:yu.enum(["success","error"]).optional().describe("Filter metrics by execution status"),topN:yu.number().int().min(1).max(20).optional().describe("When provided with interval, also return top tools and their timeseries"),userIds:yu.array(yu.string()).max(100).optional().describe("Filter LLM usage by user IDs (only applied when llmUsage is true)"),llmUsage:yu.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:yu.object({totalCalls:yu.number().describe("Total number of tool calls"),errorRate:yu.number().optional().describe("Error rate as a decimal (0 to 1)"),avgDurationMs:yu.number().describe("Average call duration in milliseconds"),errorRatePercent:yu.string().optional().describe("Error rate as a percentage string"),totalErrors:yu.number().optional().describe("Total number of errors"),p50DurationMs:yu.number().optional().describe("50th percentile duration in milliseconds"),p95DurationMs:yu.number().optional().describe("95th percentile duration in milliseconds"),connectionBreakdown:yu.array(yu.object({connectionId:yu.string(),calls:yu.number(),errors:yu.number(),errorRate:yu.number(),avgDurationMs:yu.number()})).optional().describe("Per-connection metric breakdown"),totalInputTokens:yu.number().optional().describe("Total input tokens (LLM usage mode)"),totalOutputTokens:yu.number().optional().describe("Total output tokens (LLM usage mode)"),totalTokens:yu.number().optional().describe("Total tokens (LLM usage mode)"),totalCostUsd:yu.number().optional().describe("Total USD cost (LLM usage mode; only non-zero for providers that report cost)"),topTools:yu.array(yu.object({toolName:yu.string(),connectionId:yu.string().nullable(),calls:yu.number(),inputTokens:yu.number().optional(),outputTokens:yu.number().optional(),costUsd:yu.number().optional()})).optional().describe("Top tools ranked by calls"),topToolsTimeseries:yu.array(yu.object({timestamp:yu.string(),toolName:yu.string(),calls:yu.number(),errors:yu.number(),avg:yu.number(),p95:yu.number()})).optional().describe("Per-tool metric timeseries for the top tools"),timeseries:yu.array(yu.object({timestamp:yu.string(),calls:yu.number(),errors:yu.number(),errorRate:yu.number(),avg:yu.number(),p50:yu.number(),p95:yu.number(),inputTokens:yu.number().optional(),outputTokens:yu.number().optional(),totalTokens:yu.number().optional(),costUsd:yu.number().optional()})).optional().describe("Timeseries data points bucketed by interval")}),handler:async(i,t)=>{let u=hi(t);if(await t.access.check(),await Sg(),i.interval&&i.llmUsage)return t.storage.monitoring.queryLlmUsageStats({organizationId:u.id,interval:i.interval,connectionId:i.connectionIds?.[0]??"decopilot",startDate:i.startDate?new Date(i.startDate):void 0,endDate:i.endDate?new Date(i.endDate):void 0,userIds:i.userIds,topN:i.topN});if(i.interval){let n=await t.storage.monitoring.queryMetricTimeseries({organizationId:u.id,interval:i.interval,startDate:i.startDate?new Date(i.startDate):void 0,endDate:i.endDate?new Date(i.endDate):void 0,filters:{connectionIds:i.connectionIds,excludeConnectionIds:i.excludeConnectionIds,toolNames:i.toolNames,status:i.status}});if(!i.topN)return n;let f=await t.storage.monitoring.queryMetricTopToolsTimeseries({organizationId:u.id,interval:i.interval,startDate:i.startDate?new Date(i.startDate):void 0,endDate:i.endDate?new Date(i.endDate):void 0,topN:i.topN,filters:{connectionIds:i.connectionIds,excludeConnectionIds:i.excludeConnectionIds,toolNames:i.toolNames,status:i.status}});return{...n,topTools:f.topTools,topToolsTimeseries:f.timeseries}}let l=await t.storage.monitoring.getStats({organizationId:u.id,startDate:i.startDate?new Date(i.startDate):void 0,endDate:i.endDate?new Date(i.endDate):void 0});return{...l,errorRatePercent:(l.errorRate*100).toFixed(2)}}})});import{z as fd}from"zod";var yoi;var fru=w(()=>{p1();ai();yoi=li({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:fd.object({threadIds:fd.array(fd.string()).min(1).max(500).describe("Thread IDs to aggregate usage for (max 500)"),connectionId:fd.string().optional().describe("LLM connection ID (defaults to 'decopilot')"),startDate:fd.string().datetime().optional().describe("Filter by start date (ISO 8601 datetime string)"),endDate:fd.string().datetime().optional().describe("Filter by end date (ISO 8601 datetime string)")}),outputSchema:fd.object({items:fd.array(fd.object({threadId:fd.string(),calls:fd.number(),inputTokens:fd.number(),outputTokens:fd.number(),totalTokens:fd.number(),costUsd:fd.number()}))}),handler:async(i,t)=>{let u=hi(t);return await t.access.check(),await Sg(),{items:await t.storage.monitoring.queryThreadUsage({organizationId:u.id,connectionId:i.connectionId??"decopilot",threadIds:i.threadIds,startDate:i.startDate?new Date(i.startDate):void 0,endDate:i.endDate?new Date(i.endDate):void 0})}}})});var cru=w(()=>{uru();lru();nru();fru()});import{z as ng}from"zod";var Xoi;var $ru=w(()=>{ai();Xoi=li({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:ng.object({slug:ng.string().min(1).max(50).regex(/^[a-z0-9-]+$/,"Slug must be lowercase alphanumeric with hyphens"),name:ng.string().min(1).max(255),description:ng.string().optional()}),outputSchema:ng.object({id:ng.string(),name:ng.string(),slug:ng.string(),logo:ng.string().nullable().optional(),metadata:ng.any().optional(),createdAt:ng.string().datetime().describe("ISO 8601 timestamp"),members:ng.array(ng.any()).optional()}),handler:async(i,t)=>{Ji(t),await t.access.check();let u=Ou(t);if(!u)throw Error("User ID required to create organization");let l=await t.boundAuth.organization.create({name:i.name,slug:i.slug,metadata:i.description?{description:i.description}:void 0,userId:u});if(!l)throw Error("Failed to create organization");return{...l,createdAt:l.createdAt instanceof Date?l.createdAt.toISOString():l.createdAt}}})});import{z as Vh}from"zod";var Noi;var dru=w(()=>{ai();Noi=li({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:Vh.object({userId:Vh.string().optional()}),outputSchema:Vh.object({organizations:Vh.array(Vh.object({id:Vh.string(),name:Vh.string(),slug:Vh.string(),logo:Vh.string().nullable().optional(),metadata:Vh.any().optional(),createdAt:Vh.string().datetime().describe("ISO 8601 timestamp")}))}),handler:async(i,t)=>{Ji(t),await t.access.check();let u=Ou(t),l=i.userId||u;if(!l)throw Error("User ID required to list organizations");return{organizations:(await t.boundAuth.organization.list(l)).map((f)=>({...f,createdAt:f.createdAt instanceof Date?f.createdAt.toISOString():f.createdAt}))}}})});import{z as J6}from"zod";var Joi;var _ru=w(()=>{ai();Joi=li({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:J6.object({}),outputSchema:J6.object({id:J6.string(),name:J6.string(),slug:J6.string(),logo:J6.string().nullable().optional(),metadata:J6.any().optional(),createdAt:J6.string().datetime().describe("ISO 8601 timestamp"),members:J6.array(J6.any()).optional(),invitations:J6.array(J6.any()).optional()}),handler:async(i,t)=>{Ji(t),await t.access.check();let u=t.organization?.id;if(!u)throw Error("Organization ID required (no active organization in context)");let l=await t.boundAuth.organization.get(u);if(!l)throw Error("No active organization found");let n=new Date,f=l.invitations?.filter((c)=>new Date(c.expiresAt)>n);return{...l,invitations:f,createdAt:l.createdAt instanceof Date?l.createdAt.toISOString():l.createdAt}}})});import{z as ah}from"zod";var Uoi;var gru=w(()=>{ai();Uoi=li({name:"ORGANIZATION_UPDATE",description:"Update an organization's name or description.",annotations:{title:"Update Organization",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:ah.object({id:ah.string(),name:ah.string().min(1).max(255).optional(),description:ah.string().optional()}),outputSchema:ah.object({id:ah.string(),name:ah.string(),slug:ah.string(),logo:ah.string().nullable().optional(),metadata:ah.any().optional(),createdAt:ah.string().datetime().describe("ISO 8601 timestamp")}),handler:async(i,t)=>{Ji(t),await t.access.check();let u={};if(i.name)u.name=i.name;if(i.description)u.metadata={description:i.description};let l=await t.boundAuth.organization.update({organizationId:i.id,data:u});if(!l)throw Error("Failed to update organization");return{...l,createdAt:l.createdAt instanceof Date?l.createdAt.toISOString():l.createdAt}}})});import{z as uV}from"zod";var Foi;var hru=w(()=>{ai();Foi=li({name:"ORGANIZATION_DELETE",description:"Archive an organization (soft delete).",annotations:{title:"Delete Organization",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:uV.object({id:uV.string()}),outputSchema:uV.object({success:uV.boolean(),id:uV.string()}),handler:async(i,t)=>{return Ji(t),await t.access.check(),await t.boundAuth.organization.update({organizationId:i.id,data:{metadata:{archived:!0,archivedAt:new Date().toISOString()}}}),{success:!0,id:i.id}}})});import{z as cl}from"zod";var nV,fV,lV,Eru,kdi,cV,$V,W5;var _2=w(()=>{nV=cl.object({title:cl.string(),url:cl.string(),icon:cl.string()}),fV=cl.object({registries:cl.record(cl.string(),cl.object({enabled:cl.boolean()})).describe("Per-registry enabled/disabled state. Key is connection ID. Absent registries are treated as enabled."),blockedMcps:cl.array(cl.string()).describe("List of MCP app_name or app_id values to hide from the store.")}),lV=cl.object({keyId:cl.string(),modelId:cl.string(),title:cl.string().optional()}).nullable(),Eru=cl.enum(["fast","smart","thinking","image","web_research"]),kdi=cl.enum(["fast","smart","thinking"]),cV=cl.object({tiers:cl.object({fast:lV,smart:lV,thinking:lV,image:lV,web_research:lV})}),$V=cl.object({ids:cl.array(cl.string()).describe("Ordered list of custom virtual MCP agent ids to show on the home view.")}),W5=cl.object({id:cl.string().describe("Brand context ID"),name:cl.string().describe("Company name"),domain:cl.string().describe("Company domain (e.g. example.com)"),overview:cl.string().describe("Company overview / description"),logo:cl.string().nullable().optional().describe("Logo URL"),favicon:cl.string().nullable().optional().describe("Favicon URL"),ogImage:cl.string().nullable().optional().describe("OG image URL"),fonts:cl.object({heading:cl.string().optional().describe("Font family for headings"),body:cl.string().optional().describe("Font family for body text"),code:cl.string().optional().describe("Font family for code / monospace")}).nullable().optional().describe("Font families by semantic role"),colors:cl.object({primary:cl.string().optional().describe("Primary brand color (hex)"),secondary:cl.string().optional().describe("Secondary brand color (hex)"),accent:cl.string().optional().describe("Accent / highlight color (hex)"),background:cl.string().optional().describe("Background color (hex)"),foreground:cl.string().optional().describe("Foreground / text color (hex)")}).nullable().optional().describe("Semantic color palette"),images:cl.array(cl.record(cl.string(),cl.unknown())).nullable().optional().describe("Brand images"),metadata:cl.record(cl.string(),cl.unknown()).nullable().optional().describe("Extra design tokens (typography, components, spacing, layout, tone, etc.)"),archivedAt:cl.string().nullable().optional().describe("Archive timestamp (null to unarchive)"),isDefault:cl.boolean().optional().describe("Whether this is the default brand for the organization")})});import{z as k5}from"zod";var Toi;var vru=w(()=>{ai();_2();Toi=li({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:k5.object({}),outputSchema:k5.object({organizationId:k5.string(),sidebar_items:k5.array(nV).nullable().optional(),enabled_plugins:k5.array(k5.string()).nullable().optional(),registry_config:fV.nullable().optional(),simple_mode:cV.nullable().optional(),default_home_agents:$V.nullable().optional(),createdAt:k5.string().datetime().optional().describe("ISO 8601 timestamp"),updatedAt:k5.string().datetime().optional().describe("ISO 8601 timestamp")}),handler:async(i,t)=>{Ji(t),await t.access.check();let u=t.organization?.id;if(!u)throw Error("Organization ID required (no active organization in context)");let l=await t.storage.organizationSettings.get(u);if(!l)return{organizationId:u};return{...l,createdAt:l.createdAt instanceof Date?l.createdAt.toISOString():l.createdAt,updatedAt:l.updatedAt instanceof Date?l.updatedAt.toISOString():l.updatedAt}}})});import{z as U6}from"zod";var Ioi;var rru=w(()=>{ai();_2();Ioi=li({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:U6.object({organizationId:U6.string(),sidebar_items:U6.array(nV).optional(),enabled_plugins:U6.array(U6.string()).optional(),registry_config:fV.optional(),simple_mode:cV.optional(),default_home_agents:$V.optional()}),outputSchema:U6.object({organizationId:U6.string(),sidebar_items:U6.array(nV).nullable().optional(),enabled_plugins:U6.array(U6.string()).nullable().optional(),registry_config:fV.nullable().optional(),simple_mode:cV.nullable().optional(),default_home_agents:$V.nullable().optional(),createdAt:U6.string().datetime().describe("ISO 8601 timestamp"),updatedAt:U6.string().datetime().describe("ISO 8601 timestamp")}),handler:async(i,t)=>{if(Ji(t),await t.access.check(),t.organization&&t.organization.id!==i.organizationId)throw Error("Cannot update settings for a different organization");let u=await t.storage.organizationSettings.upsert(i.organizationId,{sidebar_items:i.sidebar_items,enabled_plugins:i.enabled_plugins,registry_config:i.registry_config,simple_mode:i.simple_mode,default_home_agents:i.default_home_agents});return{...u,createdAt:u.createdAt instanceof Date?u.createdAt.toISOString():u.createdAt,updatedAt:u.updatedAt instanceof Date?u.updatedAt.toISOString():u.updatedAt}}})});import{z as mh}from"zod";var wru,Zoi,Boi;var xru=w(()=>{ai();_2();wru=W5.extend({organizationId:mh.string(),archivedAt:mh.string().nullable().optional().describe("ISO 8601 timestamp"),createdAt:mh.string().describe("ISO 8601 timestamp"),updatedAt:mh.string().describe("ISO 8601 timestamp")}),Zoi=li({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:mh.object({includeArchived:mh.boolean().optional().describe("Include archived brands in the list")}),outputSchema:mh.object({items:mh.array(wru)}),handler:async(i,t)=>{Ji(t),await t.access.check();let u=t.organization?.id;if(!u)throw Error("Organization ID required (no active organization in context)");return{items:(await t.storage.brandContext.list(u,{includeArchived:i.includeArchived})).map((n)=>({...n,archivedAt:n.archivedAt instanceof Date?n.archivedAt.toISOString():n.archivedAt,createdAt:n.createdAt instanceof Date?n.createdAt.toISOString():n.createdAt,updatedAt:n.updatedAt instanceof Date?n.updatedAt.toISOString():n.updatedAt}))}}}),Boi=li({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:mh.object({id:mh.string().describe("Brand context ID")}),outputSchema:wru.extend({organizationId:mh.string()}),handler:async(i,t)=>{Ji(t),await t.access.check();let u=t.organization?.id;if(!u)throw Error("Organization ID required (no active organization in context)");let l=await t.storage.brandContext.get(i.id,u);if(!l)throw Error("Brand context not found");return{...l,archivedAt:l.archivedAt instanceof Date?l.archivedAt.toISOString():l.archivedAt,createdAt:l.createdAt instanceof Date?l.createdAt.toISOString():l.createdAt,updatedAt:l.updatedAt instanceof Date?l.updatedAt.toISOString():l.updatedAt}}})});import{z as Vy}from"zod";var Dru,Qoi,Poi,Yoi;var Oru=w(()=>{ai();_2();Dru=W5.extend({organizationId:Vy.string(),createdAt:Vy.string().describe("ISO 8601 timestamp"),updatedAt:Vy.string().describe("ISO 8601 timestamp")}),Qoi=li({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:W5.omit({id:!0}),outputSchema:Dru,handler:async(i,t)=>{Ji(t),await t.access.check();let u=t.organization?.id;if(!u)throw Error("Organization ID required (no active organization in context)");let l=await t.storage.brandContext.create(u,{name:i.name,domain:i.domain,overview:i.overview,logo:i.logo??null,favicon:i.favicon??null,ogImage:i.ogImage??null,fonts:i.fonts??null,colors:i.colors??null,images:i.images??null,metadata:i.metadata??null});return{...l,archivedAt:l.archivedAt instanceof Date?l.archivedAt.toISOString():l.archivedAt,createdAt:l.createdAt instanceof Date?l.createdAt.toISOString():l.createdAt,updatedAt:l.updatedAt instanceof Date?l.updatedAt.toISOString():l.updatedAt}}}),Poi=li({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:W5.partial().required({id:!0}),outputSchema:Dru,handler:async(i,t)=>{Ji(t),await t.access.check();let u=t.organization?.id;if(!u)throw Error("Organization ID required (no active organization in context)");if(!await t.storage.brandContext.get(i.id,u))throw Error("Brand context not found");let{id:n,...f}=i;if(f.isDefault===!0)await t.storage.brandContext.setDefault(n,u);let c=await t.storage.brandContext.update(n,u,{name:f.name,domain:f.domain,overview:f.overview,logo:f.logo!==void 0?f.logo??null:void 0,favicon:f.favicon!==void 0?f.favicon??null:void 0,ogImage:f.ogImage!==void 0?f.ogImage??null:void 0,fonts:f.fonts!==void 0?f.fonts??null:void 0,colors:f.colors!==void 0?f.colors??null:void 0,images:f.images!==void 0?f.images??null:void 0,metadata:f.metadata!==void 0?f.metadata??null:void 0,archivedAt:f.archivedAt!==void 0?f.archivedAt??null:void 0,isDefault:f.isDefault===!1?!1:void 0});return{...c,archivedAt:c.archivedAt instanceof Date?c.archivedAt.toISOString():c.archivedAt,createdAt:c.createdAt instanceof Date?c.createdAt.toISOString():c.createdAt,updatedAt:c.updatedAt instanceof Date?c.updatedAt.toISOString():c.updatedAt}}}),Yoi=li({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:Vy.object({id:Vy.string().describe("Brand context ID")}),outputSchema:Vy.object({success:Vy.boolean()}),handler:async(i,t)=>{Ji(t),await t.access.check();let u=t.organization?.id;if(!u)throw Error("Organization ID required (no active organization in context)");if(!await t.storage.brandContext.get(i.id,u))throw Error("Brand context not found");return await t.storage.brandContext.update(i.id,u,{archivedAt:new Date().toISOString(),isDefault:!1}),{success:!0}}})});async function jdi(i,t,u){let l=i.trim();if(!l.startsWith("http"))l=`https://${l}`;let n=await fetch("https://api.firecrawl.dev/v1/scrape",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${t}`},body:JSON.stringify({url:l,formats:["branding"]})});if(!n.ok){let E=await n.text().catch(()=>"");throw Error(`Firecrawl API error: ${n.status} ${E.slice(0,200)}`)}let f=await n.json();if(!f.success||!f.data?.branding)return null;let c=f.data.branding,$=f.data.metadata??{},d=mh0(c,$);return{name:$.title?.split(/[|\u2013\u2014]|\s+-\s+/).map((E)=>E.trim()).filter(Boolean)?.slice().sort((E,v)=>E.length-v.length)[0]??$.ogSiteName??u??i,domain:i,overview:$.description??"",logo:d.logo,favicon:d.favicon,ogImage:d.ogImage,fonts:d.fonts,colors:d.colors,images:null,metadata:Object.keys(d.metadata).length>0?d.metadata:null}}function mh0(i,t){let u=i.images??{},l=i.colors??{},n={};for(let[g,h]of Object.entries(l))if(typeof h==="string"&&h&&Vh0.has(g))n[g]=h;let f={},$=(i.typography??{}).fontFamilies??{};for(let[g,h]of Object.entries($))if(typeof h==="string"&&h){let E=ah0[g.toLowerCase()];if(E&&!f[E])f[E]=h}let d=i.fonts;if(Array.isArray(d))for(let g of d){let h=g.family;if(typeof h==="string"&&h&&!f.body)f.body=h}let _={};for(let g of["typography","components","spacing","layout","animations","icons","tone","personality","colorScheme"])if(i[g]!==void 0)_[g]=i[g];return{logo:u.logo??null,favicon:u.favicon??null,ogImage:u.ogImage??t.ogImage??null,fonts:Object.keys(f).length>0?f:null,colors:Object.keys(n).length>0?n:null,metadata:_}}var Vh0,ah0;var Aoi=w(()=>{Vh0=new Set(["primary","secondary","accent","background","foreground"]),ah0={heading:"heading",headings:"heading",head:"heading",title:"heading",body:"body",primary:"body",text:"body",code:"code",monospace:"code",mono:"code"}});import{z as Sdi}from"zod";var oh0,Goi;var yru=w(()=>{ai();Aoi();_2();oh0=W5.pick({id:!0,name:!0,domain:!0,overview:!0,logo:!0,favicon:!0,ogImage:!0,fonts:!0,colors:!0}).extend({success:Sdi.boolean()}),Goi=li({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:Sdi.object({domain:Sdi.string().describe("Website domain to extract brand from"),brandId:Sdi.string().optional().describe("Existing brand context ID to update (creates new if omitted)")}),outputSchema:oh0,modelSummary:(i)=>i.success?`Brand saved (id=${i.id}, name=${i.name}, domain=${i.domain}). The UI rendered the logo, colors, fonts, and overview.`:"Brand extraction failed.",handler:async(i,t)=>{Ji(t),await t.access.check();let u=t.organization?.id;if(!u)throw Error("Organization ID required (no active organization in context)");let l=t.firecrawlApiKey;if(!l)throw Error("FIRECRAWL_API_KEY is not configured. Set the environment variable to enable brand extraction.");let n=await jdi(i.domain,l,i.domain);if(!n)throw Error("Firecrawl did not return branding data for this URL");let f={name:n.name,domain:n.domain,overview:n.overview,logo:n.logo,favicon:n.favicon,ogImage:n.ogImage,fonts:n.fonts,colors:n.colors,images:n.images,metadata:n.metadata},c=i.brandId?await(async()=>{if(!await t.storage.brandContext.get(i.brandId,u))throw Error("Brand context not found");return t.storage.brandContext.update(i.brandId,u,f)})():await t.storage.brandContext.create(u,f);return{id:c.id,name:c.name,domain:c.domain,overview:c.overview,logo:c.logo,favicon:c.favicon,ogImage:c.ogImage,fonts:c.fonts,colors:c.colors,success:!0}}})});function Xru(i){let t=i.metadata??{};return{id:i.id,name:i.name,domain:i.domain||void 0,colors:i.colors??void 0,fonts:i.fonts??void 0,assets:i.logo||i.favicon||i.ogImage?{logo:i.logo??void 0,favicon:i.favicon??void 0,ogImage:i.ogImage??void 0}:void 0,overview:i.overview||void 0,tagline:typeof t.tagline==="string"?t.tagline:void 0,tone:typeof t.tone==="string"?t.tone:void 0,metadata:(()=>{let u=Object.fromEntries(Object.entries(t).filter(([l])=>l!=="tagline"&&l!=="tone"));return Object.keys(u).length>0?u:void 0})()}}var Woi,koi;var Nru=w(()=>{bCi();ai();Woi=li({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:qci,outputSchema:_C,handler:async(i,t)=>{Ji(t),await t.access.check();let u=t.organization?.id;if(!u)throw Error("Organization ID required (no active organization in context)");let l=i.id?await t.storage.brandContext.get(i.id,u):await t.storage.brandContext.getDefault(u);if(!l)throw Error(i.id?"Brand not found":"No default brand configured");return Xru(l)}}),koi=li({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:Vci,outputSchema:aci,handler:async(i,t)=>{Ji(t),await t.access.check();let u=t.organization?.id;if(!u)throw Error("Organization ID required (no active organization in context)");return{items:(await t.storage.brandContext.list(u)).map(Xru)}}})});import{z as zdi}from"zod";var joi;var Jru=w(()=>{ai();joi=li({name:"ORGANIZATION_DOMAIN_GET",description:"Get the claimed email domain for an organization.",annotations:{title:"Get Organization Domain",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:zdi.object({}),outputSchema:zdi.object({domain:zdi.string().nullable(),autoJoinEnabled:zdi.boolean()}),handler:async(i,t)=>{Ji(t),await t.access.check();let u=hi(t),l=await t.storage.organizationDomains.getByOrganizationId(u.id);return{domain:l?.domain??null,autoJoinEnabled:l?.autoJoinEnabled??!1}}})});import{z as od}from"zod";var sh0,Soi,zoi,boi;var Uru=w(()=>{ai();h2();sh0=/^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)+$/,Soi=li({name:"ORGANIZATION_DOMAIN_SET",description:"Claim an email domain for an organization. The caller's verified email must match the domain.",annotations:{title:"Set Organization Domain",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:od.object({domain:od.string().min(1).max(255).describe("Email domain to claim (e.g. 'acme.com')"),autoJoinEnabled:od.boolean().optional().default(!1).describe("Whether users with matching email domain can auto-join")}),outputSchema:od.object({domain:od.string(),autoJoinEnabled:od.boolean()}),handler:async(i,t)=>{Ji(t),await t.access.check();let u=hi(t),l=i.domain.toLowerCase().trim();if(!sh0.test(l))throw Error(`Invalid domain format: "${l}". Must be a valid domain like "acme.com"`);if(g2.has(l))throw Error(`Cannot claim generic email domain "${l}". Only corporate domains are allowed.`);let n=t.auth.user?.email;if(!n)throw Error("User email is required to claim a domain.");if(!t.auth.user?.emailVerified)throw Error("Email must be verified before claiming a domain.");let f=n.split("@")[1]?.toLowerCase();if(f!==l)throw Error(`You can only claim your own email domain ("${f}"), not "${l}".`);let c=await t.storage.organizationDomains.getByOrganizationId(u.id);if(c&&c.domain!==l)throw Error(`This organization already claims "${c.domain}". Clear it first before claiming a new domain.`);let $=await t.storage.organizationDomains.setDomain(u.id,l,i.autoJoinEnabled);return{domain:$.domain,autoJoinEnabled:$.autoJoinEnabled}}}),zoi=li({name:"ORGANIZATION_DOMAIN_UPDATE",description:"Update auto-join setting for the organization's already-claimed domain.",annotations:{title:"Update Organization Domain Settings",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:od.object({autoJoinEnabled:od.boolean().describe("Whether users with matching email domain can auto-join")}),outputSchema:od.object({domain:od.string(),autoJoinEnabled:od.boolean()}),handler:async(i,t)=>{Ji(t),await t.access.check();let u=hi(t);if(!await t.storage.organizationDomains.getByOrganizationId(u.id))throw Error("No domain claimed for this organization.");let n=await t.storage.organizationDomains.updateAutoJoin(u.id,i.autoJoinEnabled);return{domain:n.domain,autoJoinEnabled:n.autoJoinEnabled}}}),boi=li({name:"ORGANIZATION_DOMAIN_CLEAR",description:"Remove the claimed email domain for an organization.",annotations:{title:"Clear Organization Domain",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:od.object({}),outputSchema:od.object({success:od.boolean()}),handler:async(i,t)=>{Ji(t),await t.access.check();let u=hi(t);return await t.storage.organizationDomains.clearDomain(u.id),{success:!0}}})});import{z as sd}from"zod";var Koi;var Fru=w(()=>{Tf();ai();Koi=li({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:sd.object({organizationId:sd.string().optional(),userId:sd.string(),role:sd.array(sd.string())}),outputSchema:sd.object({id:sd.string(),organizationId:sd.string(),userId:sd.string(),role:sd.union([sd.string(),sd.array(sd.string())]),createdAt:sd.string().datetime().describe("ISO 8601 timestamp")}),handler:async(i,t)=>{Ji(t),await t.access.check();let u=i.organizationId||t.organization?.id;if(!u)throw Error("Organization ID required (no active organization in context)");if(u!==t.organization?.id)throw Error("Organization ID does not match authenticated organization");let l=await t.boundAuth.organization.addMember({organizationId:u,userId:i.userId,role:i.role});if(!l)throw Error("Failed to add member");let n=Ou(t);if(n)Nu.capture({distinctId:n,event:"organization_member_added",groups:{organization:u},properties:{organization_id:u,added_user_id:i.userId,role:i.role}});return{...l,role:l.role,createdAt:l.createdAt instanceof Date?l.createdAt.toISOString():l.createdAt}}})});import{z as sS}from"zod";var Hoi;var Tru=w(()=>{Tf();ai();Hoi=li({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:sS.object({organizationId:sS.string().optional(),memberIdOrEmail:sS.string()}),outputSchema:sS.object({success:sS.boolean(),memberIdOrEmail:sS.string()}),handler:async(i,t)=>{Ji(t),await t.access.check();let u=i.organizationId||t.organization?.id;if(!u)throw Error("Organization ID required (no active organization in context)");await t.boundAuth.organization.removeMember({organizationId:u,memberIdOrEmail:i.memberIdOrEmail});let l=Ou(t);if(l)Nu.capture({distinctId:l,event:"organization_member_removed",groups:{organization:u},properties:{organization_id:u,member_id_or_email:i.memberIdOrEmail}});return{success:!0,memberIdOrEmail:i.memberIdOrEmail}}})});import{z as O$}from"zod";var Roi;var Iru=w(()=>{ai();Roi=li({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:O$.object({limit:O$.number().optional(),offset:O$.number().optional()}),outputSchema:O$.object({members:O$.array(O$.object({id:O$.string(),organizationId:O$.string(),userId:O$.string(),role:O$.string(),createdAt:O$.string().datetime().describe("ISO 8601 timestamp"),user:O$.object({id:O$.string(),name:O$.string(),email:O$.string(),image:O$.string().optional()}).optional()}))}),handler:async(i,t)=>{Ji(t),await t.access.check();let u=t.organization?.id;if(!u)throw Error("Organization ID required (no active organization in context)");let l=await t.boundAuth.organization.listMembers({organizationId:u,limit:i.limit,offset:i.offset});return{members:(Array.isArray(l)?l:[]).map((f)=>({...f,createdAt:f.createdAt instanceof Date?f.createdAt.toISOString():f.createdAt}))}}})});import{z as t4}from"zod";var Loi;var Zru=w(()=>{Tf();ai();Loi=li({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:t4.object({organizationId:t4.string().optional(),memberId:t4.string(),role:t4.array(t4.string())}),outputSchema:t4.object({id:t4.string(),organizationId:t4.string(),userId:t4.string(),role:t4.union([t4.literal("admin"),t4.literal("member"),t4.literal("owner")]),createdAt:t4.string().datetime().describe("ISO 8601 timestamp"),user:t4.object({email:t4.string(),name:t4.string(),image:t4.string().optional()})}),handler:async(i,t)=>{Ji(t),await t.access.check();let u=i.organizationId||t.organization?.id;if(!u)throw Error("Organization ID required (no active organization in context)");let l=await t.boundAuth.organization.updateMemberRole({organizationId:u,memberId:i.memberId,role:i.role});if(!l)throw Error("Failed to update member role");t.invalidateMemberRole?.(l.userId,u);let n=Ou(t);if(n)Nu.capture({distinctId:n,event:"organization_member_role_updated",groups:{organization:u},properties:{organization_id:u,member_id:i.memberId,target_user_id:l.userId,new_role:Array.isArray(i.role)?i.role.join(","):i.role}});return{...l,createdAt:l.createdAt instanceof Date?l.createdAt.toISOString():l.createdAt}}})});var Bru=w(()=>{$ru();dru();_ru();gru();hru();vru();rru();xru();Oru();yru();Nru();Jru();Uru();Fru();Tru();Iru();Zru()});import{z as j5}from"zod";var eoi;var Qru=w(()=>{ai();eoi=li({name:"TAGS_LIST",description:"List all tags available in the organization.",annotations:{title:"List Tags",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:j5.object({}),outputSchema:j5.object({tags:j5.array(j5.object({id:j5.string(),organizationId:j5.string(),name:j5.string(),createdAt:j5.string().describe("ISO 8601 timestamp")}))}),handler:async(i,t)=>{Ji(t),await t.access.check();let u=hi(t);return{tags:(await t.storage.tags.listOrgTags(u.id)).map((n)=>({...n,createdAt:n.createdAt instanceof Date?n.createdAt.toISOString():String(n.createdAt)}))}}})});import{z as S5}from"zod";var Coi;var Pru=w(()=>{ai();Coi=li({name:"TAGS_CREATE",description:"Create a new tag that can be assigned to organization members.",annotations:{title:"Create Tag",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:S5.object({name:S5.string().min(1).max(50).describe("Tag name")}),outputSchema:S5.object({tag:S5.object({id:S5.string(),organizationId:S5.string(),name:S5.string(),createdAt:S5.string().describe("ISO 8601 timestamp")})}),handler:async(i,t)=>{Ji(t),await t.access.check();let u=hi(t),l=await t.storage.tags.createTag(u.id,i.name);return{tag:{...l,createdAt:l.createdAt instanceof Date?l.createdAt.toISOString():String(l.createdAt)}}}})});import{z as bdi}from"zod";var Moi;var Yru=w(()=>{ai();Moi=li({name:"TAGS_DELETE",description:"Delete a tag and automatically remove it from all assigned members.",annotations:{title:"Delete Tag",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:bdi.object({tagId:bdi.string().describe("Tag ID to delete")}),outputSchema:bdi.object({success:bdi.boolean()}),handler:async(i,t)=>{Ji(t),await t.access.check();let u=hi(t),l=await t.storage.tags.getTag(i.tagId);if(!l)throw Error("Tag not found");if(l.organizationId!==u.id)throw Error("Tag does not belong to this organization");return await t.storage.tags.deleteTag(i.tagId),{success:!0}}})});import{z as E2}from"zod";var qoi;var Aru=w(()=>{ai();qoi=li({name:"MEMBER_TAGS_GET",description:"Get all tags currently assigned to a specific member.",annotations:{title:"Get Member Tags",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:E2.object({memberId:E2.string().describe("Member ID")}),outputSchema:E2.object({tags:E2.array(E2.object({id:E2.string(),organizationId:E2.string(),name:E2.string(),createdAt:E2.string().describe("ISO 8601 timestamp")}))}),handler:async(i,t)=>{Ji(t),await t.access.check();let u=hi(t);if(!await t.storage.tags.verifyMemberOrg(i.memberId,u.id))throw Error(`Member not found in this organization: ${i.memberId}`);return{tags:(await t.storage.tags.getMemberTags(i.memberId)).map((f)=>({...f,createdAt:f.createdAt instanceof Date?f.createdAt.toISOString():String(f.createdAt)}))}}})});import{z as F6}from"zod";var Voi;var Gru=w(()=>{ai();Voi=li({name:"MEMBER_TAGS_SET",description:"Replace all tags on a member with the given set. Pass empty array to clear.",annotations:{title:"Set Member Tags",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:F6.object({memberId:F6.string().describe("Member ID"),tagIds:F6.array(F6.string()).describe("Array of tag IDs to assign")}),outputSchema:F6.object({success:F6.boolean(),tags:F6.array(F6.object({id:F6.string(),organizationId:F6.string(),name:F6.string(),createdAt:F6.string().describe("ISO 8601 timestamp")}))}),handler:async(i,t)=>{Ji(t),await t.access.check();let u=hi(t);if(!await t.storage.tags.verifyMemberOrg(i.memberId,u.id))throw Error(`Member not found in this organization: ${i.memberId}`);for(let f of i.tagIds){let c=await t.storage.tags.getTag(f);if(!c)throw Error(`Tag not found: ${f}`);if(c.organizationId!==u.id)throw Error(`Tag does not belong to this organization: ${f}`)}return await t.storage.tags.setMemberTags(i.memberId,i.tagIds),{success:!0,tags:(await t.storage.tags.getMemberTags(i.memberId)).map((f)=>({...f,createdAt:f.createdAt instanceof Date?f.createdAt.toISOString():String(f.createdAt)}))}}})});var Wru=w(()=>{Qru();Pru();Yru();Aru();Gru()});function Sv(i,t=Date.now()){let u=i.status;if(u==="in_progress"){let l=new Date(i.updated_at).getTime();if(!Number.isFinite(l)||t-l>1800000)u="expired"}return{id:i.id,organization_id:i.organization_id,title:i.title,description:i.description,created_at:i.created_at,updated_at:i.updated_at,created_by:i.created_by,updated_by:i.updated_by,hidden:i.hidden??!1,status:u,virtual_mcp_id:i.virtual_mcp_id||void 0,trigger_id:i.trigger_id,branch:i.branch,sandbox_provider_kind:i.sandbox_provider_kind,harness_id:i.harness_id,metadata:i.metadata&&Object.keys(i.metadata).length>0?i.metadata:void 0,run_config:i.run_config}}var kru=w(()=>{kl()});import{z as pu}from"zod";var jru,tE0,Sru,zv,zru,bru;var ay=w(()=>{kru();jru=pu.object({id:pu.string().describe("Unique message ID"),thread_id:pu.string().describe("ID of the parent thread"),metadata:pu.unknown().optional().describe("Optional message metadata"),parts:pu.array(pu.record(pu.string(),pu.unknown())).describe("Message content parts (AI SDK UIMessagePart format)"),role:pu.enum(["user","assistant","system"]).describe("Message role"),created_at:pu.string().datetime().describe("Timestamp of creation"),updated_at:pu.string().datetime().describe("Timestamp of last update")}),tE0=pu.object({toolName:pu.string().describe("Fully qualified tool name"),appId:pu.string().describe("App ID that owns the tool"),args:pu.record(pu.string(),pu.unknown()).describe("Arguments used when expanding the tool"),expandedAt:pu.string().datetime().describe("When the tool was expanded")}),Sru=pu.object({expanded_tools:pu.array(tE0).optional()}).catchall(pu.unknown()),zv=pu.object({id:pu.string().describe("Unique thread ID"),organization_id:pu.string().describe("Organization this thread belongs to"),title:pu.string().describe("Thread title"),description:pu.string().nullable().describe("Thread description"),created_at:pu.string().datetime().describe("Timestamp of creation"),updated_at:pu.string().datetime().describe("Timestamp of last update"),hidden:pu.boolean().optional().describe("Whether the thread is hidden"),status:pu.enum([...fk,"expired"]).describe("Thread execution status. 'expired' is virtual -- computed at read time for stale in_progress threads"),created_by:pu.string().describe("User ID who created the thread"),updated_by:pu.string().optional().describe("User ID who last updated the thread"),virtual_mcp_id:pu.string().optional().describe("Virtual MCP (agent) this thread was initiated with"),trigger_id:pu.string().nullable().optional().describe("Automation trigger that created this thread; null/absent for human-initiated threads."),branch:pu.string().nullable().optional().describe("Git branch this thread is pinned to (GitHub-linked vms only)"),sandbox_provider_kind:pu.string().nullable().optional().describe("Pinned on first message; identifies which sandbox provider to dispatch to (e.g. 'agent-sandbox', 'user-desktop')."),harness_id:pu.string().nullable().optional().describe("Pinned on first message; selects which harness runs the thread (e.g. 'claude-code', 'codex', 'decopilot')."),metadata:Sru.optional().describe("Free-form per-thread UI state (e.g. expanded_tools)"),run_config:pu.record(pu.string(),pu.unknown()).nullable().optional().describe("Persisted run configuration (contains agent and model info)")}),zru=pu.object({id:pu.string().optional().describe("Optional custom ID for the thread"),title:pu.string().optional().describe("Thread title"),description:pu.string().nullish().describe("Thread description"),virtual_mcp_id:pu.string().describe("Virtual MCP (agent) this thread is bound to"),branch:pu.string().min(1).optional().describe("Preferred branch. Used only when the vMCP has a githubRepo; ignored otherwise. When omitted, the server picks the most-recently-touched branch from the user's sandboxMap, falling back to a freshly generated name.")}),bru=pu.object({title:pu.string().optional().describe("New thread title"),description:pu.string().nullish().describe("New thread description"),hidden:pu.boolean().optional().describe("Whether the thread is hidden"),status:pu.enum(["requires_action","failed","in_progress","completed"]).optional().describe("New thread status (user-set override). 'expired' is a computed virtual status and cannot be set directly."),metadata:Sru.optional().describe("Full replacement of the thread's metadata object"),branch:pu.string().nullish().describe("New git branch for this thread")})});function Kdi(){let i=Kru[Math.floor(Math.random()*Kru.length)],t=Hru[Math.floor(Math.random()*Hru.length)];return`${i}-${t}`}var Kru,Hru;var aoi=w(()=>{Kru=["alpha","beta","gamma","delta","epsilon","zeta","eta","theta","iota","kappa","lambda","mu","nu","xi","omicron","pi","rho","sigma","tau","upsilon","phi","chi","psi","omega"],Hru=["andromedae","antliae","apodis","aquarii","aquilae","arae","arietis","aurigae","bootis","caeli","camelopardalis","cancri","capricorni","carinae","cassiopeiae","centauri","cephei","ceti","chamaeleontis","circini","columbae","corvi","crateris","crucis","cygni","delphini","doradus","draconis","equulei","eridani","fornacis","geminorum","gruis","herculis","horologii","hydrae","hydri","indi","lacertae","leonis","leporis","librae","lupi","lyncis","lyrae","mensae","microscopii","monocerotis","muscae","normae","octantis","ophiuchi","orionis","pavonis","pegasi","persei","phoenicis","pictoris","piscium","puppis","pyxidis","reticuli","sagittae","sagittarii","scorpii","sculptoris","scuti","serpentis","sextantis","tauri","telescopii","trianguli","tucanae","velorum","virginis","volantis","vulpeculae"]});import{z as Rru}from"zod";function nE0(i,t){let u=i?.[t];if(!u)return;return Object.entries(u).sort(([,n],[,f])=>{let c=Math.max(0,...Object.values(n).map((d)=>d.createdAt??0));return Math.max(0,...Object.values(f).map((d)=>d.createdAt??0))-c})[0]?.[0]}var uE0,lE0,moi;var Lru=w(()=>{Tf();ai();ay();C_();aoi();uE0=Rru.object({data:zru.describe("Data for the new thread (id is auto-generated if not provided)")}),lE0=Rru.object({item:zv.describe("The created thread entity")});moi=li({name:"COLLECTION_THREADS_CREATE",description:"Create a new thread for organizing messages and conversations.",annotations:{title:"Create Thread",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:uE0,outputSchema:lE0,handler:async(i,t)=>{Ji(t);let u=hi(t);await t.access.check();let l=Ou(t);if(!l)throw Error("User ID required to create thread");let{data:n}=i,f=n.id??Rn("thrd"),c=await t.storage.virtualMcps.findById(n.virtual_mcp_id,u.id);if(!c)throw Error(`Virtual MCP not found: ${n.virtual_mcp_id}`);let $=c.metadata,d=$?.githubRepo,_=null;if(d)_=n.branch??nE0($?.sandboxMap,l)??Kdi();let g=await t.storage.threads.create({id:f,organization_id:u.id,title:n.title,description:n.description,virtual_mcp_id:n.virtual_mcp_id,branch:_,created_by:l});return Nu.capture({distinctId:l,event:"chat_started",groups:{organization:u.id},properties:{organization_id:u.id,thread_id:f,has_title:!!i.data.title,created_via:"tool"}}),{item:Sv(g)}}})});import{z as fg}from"zod";var fE0,cE0,ooi;var eru=w(()=>{jd();ai();ay();fE0=Nh.extend({where:fg.object({created_by:fg.string().optional(),trigger_ids:fg.array(fg.string()).optional(),virtual_mcp_id:fg.string().optional(),hidden:fg.boolean().optional(),has_trigger:fg.boolean().optional()}).optional(),startDate:fg.string().datetime().optional().describe("Filter threads updated at or after this ISO timestamp"),endDate:fg.string().datetime().optional().describe("Filter threads updated at or before this ISO timestamp"),search:fg.string().optional().describe("Full-text search on thread title (case-insensitive)"),status:fg.string().optional().describe("Filter by thread status (e.g. completed, failed, in_progress)"),userId:fg.string().optional().describe("Filter by the user who created the thread"),agentId:fg.string().optional().describe("Filter by agent (connection or virtual MCP) ID")}),cE0=y3(zv),ooi=li({name:"COLLECTION_THREADS_LIST",description:"List threads with filtering, sorting, and pagination.",annotations:{title:"List Threads",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:fE0,outputSchema:cE0,handler:async(i,t)=>{await t.access.check();let u=t.auth.user?.id;if(!u)throw Error("User ID required to list threads");hi(t);let l=i.offset??0,n=i.limit??100,f=i.where?.trigger_ids,c=i.where?.virtual_mcp_id,$=i.userId??(i.where?.created_by==="me"?u:i.where?.created_by),{threads:d,total:_}=f?.length?await t.storage.threads.listByTriggerIds(f,{limit:n,offset:l}):await t.storage.threads.list($,{limit:n,offset:l,virtualMcpId:c,startDate:i.startDate,endDate:i.endDate,search:i.search,status:i.status,agentId:i.agentId,includeArchived:i.where?.hidden,hasTrigger:i.where?.has_trigger}),g=l+n<_,h=Date.now();return{items:d.map((E)=>Sv(E,h)),totalCount:_,hasMore:g}}})});var $E0,soi;var Cru=w(()=>{jd();ai();ay();$E0=FL(zv),soi=li({name:"COLLECTION_THREADS_GET",description:"Get a thread's details and metadata by ID.",annotations:{title:"Get Thread",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:UL,outputSchema:$E0,handler:async(i,t)=>{Ji(t),hi(t),await t.access.check();let u=await t.storage.threads.get(i.id);if(!u)return{item:null};return{item:Sv(u)}}})});import{z as poi}from"zod";var dE0,_E0,isi;var Mru=w(()=>{Tf();ai();ay();dE0=poi.object({id:poi.string().describe("ID of the thread to update"),data:bru.describe("Partial thread data to update")}),_E0=poi.object({item:zv.describe("The updated thread entity")}),isi=li({name:"COLLECTION_THREADS_UPDATE",description:"Update a thread's title, description, or visibility.",annotations:{title:"Update Thread",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:dE0,outputSchema:_E0,handler:async(i,t)=>{Ji(t);let u=hi(t);await t.access.check();let l=Ou(t);if(!l)throw Error("User ID required to update thread");let{id:n,data:f}=i,c=await t.storage.threads.get(n);if(!c)throw Error("Thread not found in organization");if(f.branch===null&&c.virtual_mcp_id){if((await t.storage.virtualMcps.findById(c.virtual_mcp_id,hi(t).id))?.metadata?.githubRepo)throw Error("Cannot set branch=null on a github-linked thread (vMCP has githubRepo)")}let $={title:f.title,description:f.description,hidden:f.hidden,updated_by:l};if(f.status)$.status=f.status;if(f.metadata!==void 0)$.metadata=f.metadata;if(f.branch!==void 0)$.branch=f.branch;let d=await t.storage.threads.update(n,$);if(f.hidden!==void 0&&f.hidden!==c.hidden)Nu.capture({distinctId:l,event:f.hidden?"chat_archived":"chat_unarchived",groups:{organization:u.id},properties:{organization_id:u.id,thread_id:n}});return{item:Sv(d)}}})});var tsi;var qru=w(()=>{jd();Tf();ai();ay();tsi=li({name:"COLLECTION_THREADS_DELETE",description:"Permanently delete a thread and all its messages.",annotations:{title:"Delete Thread",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:TL,outputSchema:IL(zv),handler:async(i,t)=>{Ji(t);let u=hi(t);await t.access.check();let l=await t.storage.threads.get(i.id);if(!l)throw Error(`Thread not found: ${i.id}`);await t.storage.threads.delete(i.id);let n=Ou(t);if(n)Nu.capture({distinctId:n,event:"chat_deleted",groups:{organization:u.id},properties:{organization_id:u.id,thread_id:i.id}});return{item:Sv(l)}}})});import{z as gE0}from"zod";function Vru(i){if(!i)return null;if("field"in i&&i.field[0]==="thread_id"&&i.operator==="eq")return String(i.value);if("conditions"in i)for(let t of i.conditions){let u=Vru(t);if(u)return u}return null}var hE0,EE0,usi;var aru=w(()=>{jd();ai();ay();hE0=Nh.extend({thread_id:gE0.string().optional().describe("ID of the thread to list messages for (required)")}),EE0=y3(jru),usi=li({name:"COLLECTION_THREAD_MESSAGES_LIST",description:"List messages in a thread with pagination. Requires thread_id. Returns messages in chronological order.",annotations:{title:"List Thread Messages",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:hE0,outputSchema:EE0,handler:async(i,t)=>{hi(t),await t.access.check();let u=i.thread_id??Vru(i.where);if(!u)throw Error("thread_id is required (provide as top-level param or in where clause)");let l=i.offset??0,n=i.limit??100,f=i.orderBy?.[0]?.direction??"asc",c=await t.storage.threads.get(u);if(!c)return{items:[],totalCount:0,hasMore:!1};if(c.message_storage_version===2){let{messages:g,total:h}=await t.storage.threads.messageParts().loadWindow(u,{limit:n,offset:l});return{items:g.map((E)=>({id:E.id,thread_id:u,role:E.role,parts:E.parts,metadata:E.metadata??null,created_at:E.created_at,updated_at:E.created_at})),totalCount:h,hasMore:l+n<h}}let{messages:$,total:d}=await t.storage.threads.listMessages(u,{limit:n,offset:l,sort:f}),_=l+n<d;return{items:$,totalCount:d,hasMore:_}}})});var mru=w(()=>{Lru();eru();Cru();Mru();qru();aru()});function rE0(i){return{type:"doc",content:[{type:"paragraph",content:[{type:"text",text:i}]}]}}function wE0(i){return i.map((t)=>{let u=t.metadata;if(u?.tiptapDoc)return t;let l=t.parts.find((n)=>n.type==="text"&&typeof n.text==="string");if(!l?.text||typeof l.text!=="string")return t;return{...t,metadata:{...u,tiptapDoc:rE0(l.text)}}})}function Hdi(i){let t;if(typeof i==="string")try{let u=JSON.parse(i);if(Array.isArray(u)&&u.length>0&&u[0]?.role&&Array.isArray(u[0]?.parts))t=u;else t=[{role:"user",parts:[{type:"text",text:i}]}]}catch{t=[{role:"user",parts:[{type:"text",text:i}]}]}else t=i;return wE0(t)}import{z as Of}from"zod";var lsi;var oru=w(()=>{Tf();ai();_2();lsi=li({name:"AUTOMATION_CREATE",description:"Create an automation that runs an agent thread on trigger fire. Requires virtual_mcp_id + messages.",annotations:{title:"Create Automation",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!1},inputSchema:Of.object({name:Of.string().min(1).max(255),virtual_mcp_id:Of.string(),messages:Of.union([Of.string(),Of.array(Of.looseObject({id:Of.string().optional(),role:Of.enum(["user","assistant","system"]),parts:Of.array(Of.record(Of.string(),Of.unknown())),metadata:Of.unknown().optional()}))]),models:Of.object({tier:kdi,modelId:Of.string().optional(),credentialId:Of.string().optional()}).loose().default({tier:"smart"}),tools:Of.array(Of.string()).nullable().optional(),maxAgentSteps:Of.number().int().min(1).max(100).nullable().optional(),temperature:Of.number().default(0.5),active:Of.boolean().default(!0)}),outputSchema:Of.object({id:Of.string(),name:Of.string(),active:Of.boolean(),created_at:Of.string()}),handler:async(i,t)=>{Ji(t);let u=hi(t);await t.access.check();let l=Ou(t);if(!l)throw Error("Unable to determine user identity");let n=Hdi(i.messages),f=await t.storage.automations.create({organization_id:u.id,created_by:l,name:i.name,messages:JSON.stringify(n),models:JSON.stringify(i.models),tools:i.tools===void 0||i.tools===null?null:JSON.stringify(i.tools),max_agent_steps:i.maxAgentSteps??null,temperature:i.temperature,active:i.active,virtual_mcp_id:i.virtual_mcp_id});return Nu.capture({distinctId:l,event:"automation_created",groups:{organization:u.id},properties:{organization_id:u.id,automation_id:f.id,virtual_mcp_id:i.virtual_mcp_id,active:f.active,tier:i.models.tier}}),{id:f.id,name:f.name,active:f.active,created_at:f.created_at}}})});import{z as gf}from"zod";var nsi;var sru=w(()=>{ai();nsi=li({name:"AUTOMATION_GET",description:"Get an automation's full configuration and triggers by ID.",annotations:{title:"Get Automation",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:gf.object({id:gf.string()}),outputSchema:gf.object({automation:gf.object({id:gf.string(),name:gf.string(),active:gf.boolean(),created_by:gf.string(),created_at:gf.string(),updated_at:gf.string(),virtual_mcp_id:gf.string(),messages:gf.unknown(),models:gf.unknown(),tools:gf.array(gf.string()).nullable(),maxAgentSteps:gf.number().nullable(),temperature:gf.number(),triggers:gf.array(gf.object({id:gf.string(),type:gf.enum(["cron","event","webhook"]),cron_expression:gf.string().nullable(),connection_id:gf.string().nullable(),event_type:gf.string().nullable(),params:gf.unknown().nullable(),last_run_at:gf.string().nullable(),api_key_id:gf.string().nullable(),created_at:gf.string()}))}).nullable()}),handler:async(i,t)=>{Ji(t);let u=hi(t);await t.access.check();let l=await t.storage.automations.findById(i.id,u.id);if(!l)return{automation:null};let n=await t.storage.automations.listTriggers(l.id);return{automation:{id:l.id,name:l.name,active:l.active,created_by:l.created_by,created_at:l.created_at,updated_at:l.updated_at,virtual_mcp_id:l.virtual_mcp_id,messages:JSON.parse(l.messages),models:JSON.parse(l.models),tools:l.tools?JSON.parse(l.tools):null,maxAgentSteps:l.max_agent_steps,temperature:l.temperature,triggers:n.map((f)=>({id:f.id,type:f.type,cron_expression:f.cron_expression,connection_id:f.connection_id,event_type:f.event_type,params:f.params?JSON.parse(f.params):null,last_run_at:f.last_run_at,api_key_id:f.api_key_id,created_at:f.created_at}))}}}})});import{z as cg}from"zod";var fsi;var pru=w(()=>{ai();fsi=li({name:"AUTOMATION_LIST",description:"List automations with their status, triggers, and configuration.",annotations:{title:"List Automations",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:cg.object({virtual_mcp_id:cg.string().optional().nullable()}),outputSchema:cg.object({automations:cg.array(cg.object({id:cg.string(),name:cg.string(),active:cg.boolean(),created_by:cg.string(),created_at:cg.string(),trigger_count:cg.number(),nearest_next_run_at:cg.string().nullable(),virtual_mcp_id:cg.string()}))}),handler:async(i,t)=>{Ji(t);let u=hi(t);return await t.access.check(),{automations:(await t.storage.automations.listWithTriggerCounts(u.id,i.virtual_mcp_id)).map((f)=>({id:f.id,name:f.name,active:f.active,created_by:f.created_by,created_at:f.created_at,trigger_count:f.trigger_count,nearest_next_run_at:f.nearest_next_run_at,virtual_mcp_id:f.virtual_mcp_id}))}}})});import{DBOS as pS}from"@dbos-inc/dbos-sdk";async function DE0(i,t){for(let u=0;u<t.maxAttempts;u++){if(t.signal?.aborted)throw t.signal.reason??Error("gate aborted");let l=await i();if(xE0.has(l))return l;if(u<t.maxAttempts-1)await Vu(t.intervalMs,{signal:t.signal}).catch(()=>{})}throw Error(`[threadGate] gate timed out polling for terminal status (${t.maxAttempts} attempts)`)}function OE0(i){return i.isPullCapable&&i.sandboxProviderKind==="user-desktop"}function dsi(i){csi=i}function yE0(){if(!csi)throw Error("[threadGate] runtime not initialized \u2014 setThreadGateRuntime() must run before workflows fire");return csi}async function XE0(i){let t=yE0(),{request:u}=i,l=await t.meshContextFactory(u.organizationId,u.userId);if(!l)throw Error("user membership lost mid-dispatch");let n=t.pullDispatchFn!=null&&t.workQueue!=null;if(!OE0({isPullCapable:n,sandboxProviderKind:u.target?.sandboxProviderKind})){let _=i.timeoutMs??t.runTimeoutMs,g=new AbortController,h=_!=null?setTimeout(()=>g.abort(),_):null;try{await t.dispatchRunFn({...u,abortSignal:g.signal},l,t.deps)}finally{if(h!==null)clearTimeout(h)}return}let c=i.timeoutMs??t.runTimeoutMs,$=new AbortController,d=c!=null?setTimeout(()=>$.abort(),c):null;try{let{taskId:_,runFenceToken:g,harnessInput:h,messagesRef:E,sandboxConfig:v,orgSlug:r}=await t.pullDispatchFn({...u,abortSignal:$.signal},l,t.deps),x={runId:_,threadId:u.taskId??i.threadId,orgId:u.organizationId,userId:u.userId,runFenceToken:g,harnessInput:h,...v?{sandbox:v}:{},orgSlug:r,...E?{messagesRef:E}:{}};await t.workQueue.publish(u.userId,x);let O=t.gatePollIntervalMs??3000,y=t.gatePollMaxAttempts??1200;await DE0(async()=>{return(await l.storage.threads.get(_))?.status??"unknown"},{intervalMs:O,maxAttempts:y,signal:$.signal})}finally{if(d!==null)clearTimeout(d)}}async function NE0(i){if(i.source!=="user-message")return;let{request:t}=i;Nu.capture({distinctId:t.userId,event:"chat_message_started",groups:{organization:t.organizationId},properties:{organization_id:t.organizationId,agent_id:t.agent,mode:t.mode,thread_id:t.taskId??i.threadId,credential_id:t.models.credentialId}})}async function JE0(i,t){if(i.source!=="user-message")return;let{request:u}=i;Nu.capture({distinctId:u.userId,event:"chat_message_failed",groups:{organization:u.organizationId},properties:{organization_id:u.organizationId,thread_id:u.taskId??i.threadId,agent_id:u.agent,model_id:u.models.thinking.id,mode:u.mode,error_category:"setup",error_message:t}})}async function UE0(i){await pS.runStep(()=>NE0(i),{name:"trackMessageStarted"});try{await pS.runStep(()=>XE0(i),{name:"dispatchRunAndWait",retriesAllowed:!1})}catch(t){let u=t instanceof Error?t.message:String(t);throw await pS.runStep(()=>JE0(i,u),{name:"trackMessageFailed"}),t}return{taskId:i.request.taskId??i.threadId}}async function _si(i,t){return{workflowID:(await pS.startWorkflow(i3u,{queueName:dV,enqueueOptions:{queuePartitionKey:i.threadId},workflowID:t?.workflowID})(i)).workflowID}}async function gsi(i,t){return await(await pS.startWorkflow(i3u,{queueName:dV,enqueueOptions:{queuePartitionKey:i.threadId},workflowID:t?.workflowID})(i)).getResult()}var dV="thread-gate",xE0,$si=1,csi=null,i3u;var t3u=w(()=>{Tf();Rf();xE0=new Set(["completed","failed","requires_action"]);i3u=pS.registerWorkflow(UE0,{name:"threadGateWorkflow"})});var Rdi=w(()=>{t3u()});async function hsi(i,t,u){let l;try{return await Promise.race([i.aiProviders.listModels(t,u),new Promise((f,c)=>{l=setTimeout(()=>c(Error("listModels timeout")),FE0)})])}finally{if(l)clearTimeout(l)}}function TE0(i,t){switch(i){case"fast":return t.chat.fast;case"smart":return t.chat.smart;case"thinking":return t.chat.thinking;case"image":return t.image;case"web_research":return t.webResearch}}function Esi(i,t,u){let l=i.find((n)=>n.modelId===t);return{title:l?.title??u??t,providerId:l?.providerId,capabilities:l?.capabilities,limits:l?.limits??null}}async function my(i,t){let u=i.organization?.id;if(!u)throw Error("resolveTier called without an organization");let n=(await i.storage.organizationSettings.get(u))?.simple_mode?.tiers?.[t]??null,f=await i.storage.aiProviderKeys.list({organizationId:u});if(n&&f.some((g)=>g.id===n.keyId)){let g=await hsi(i,n.keyId,u).catch(()=>[]);return{credentialId:n.keyId,modelId:n.modelId,modelMeta:Esi(g,n.modelId,n.title)}}if(f.length===0)throw new iz(t);let c={};await Promise.all(f.map(async(g)=>{c[g.id]=await hsi(i,g.id,u).catch(()=>[])}));let $=f.map((g)=>({id:g.id,providerId:g.providerId,label:g.label,presetId:g.presetId,createdBy:g.createdBy,createdAt:g.createdAt})),d=aKi($,c),_=TE0(t,d);if(!_)throw new iz(t);return{credentialId:_.keyId,modelId:_.modelId,modelMeta:Esi(c[_.keyId]??[],_.modelId,_.title)}}async function u3u(i,t,u){let l=i.organization?.id;if(!l)throw Error("resolveSpecificModel called without an organization");let n=await hsi(i,t,l).catch(()=>[]);return{credentialId:t,modelId:u,modelMeta:Esi(n,u)}}async function tz(i,t){try{return await my(i,t)}catch(u){if(u instanceof iz)return null;return console.warn(`[resolveTier] tier "${t}" resolution failed:`,u),null}}var iz,FE0=5000;var Ldi=w(()=>{kl();iz=class iz extends Error{tier;constructor(i){super(`No model available for tier "${i}". Connect a provider or configure the tier in organization settings.`);this.tier=i;this.name="TierUnavailableError"}}});function l3u(i){return i instanceof _V||typeof i==="object"&&i!==null&&i.permanent===!0}var _V;var vsi=w(()=>{_V=class _V extends Error{permanent=!0;code;constructor(i,t){super(t);this.name="PermanentRunError",this.code=i}}});function IE0(i){if(!i)return null;try{let t=JSON.parse(i);if(Array.isArray(t)&&t.every((u)=>typeof u==="string"))return t.length>0?t:null}catch{}return null}function n3u(i,t,u,l){return{messages:JSON.parse(i.messages).map(($)=>({...$,id:crypto.randomUUID()})),models:{credentialId:l.credentialId,thinking:l.thinking,...l.image?{image:l.image}:{},...l.deepResearch?{deepResearch:l.deepResearch}:{}},agent:{id:i.virtual_mcp_id},toolAllowlist:IE0(i.tools),maxAgentSteps:i.max_agent_steps??void 0,temperature:i.temperature??0.5,toolApprovalLevel:"auto",mode:"default",organizationId:i.organization_id,userId:i.created_by,triggerId:t??void 0,taskId:u}}function y$(i,t,u,l,n,f,c,$){return y$.fromTZ(y$.tp(i,t,u,l,n,f,c),$)}function rsi(i,t=new Date){let u=t.toLocaleString("en-US",{timeZone:i,timeZoneName:"shortOffset"}).split(" ").slice(-1)[0],l=t.toLocaleString("en-US").replace(/[\u202f]/," ");return Date.parse(`${l} GMT`)-Date.parse(`${l} ${u}`)}function ZE0(i,t){let u=new Date(Date.parse(i));if(isNaN(u))throw Error("minitz: Invalid ISO8601 passed to parser.");let l=i.substring(9);return i.includes("Z")||l.includes("-")||l.includes("+")?y$.tp(u.getUTCFullYear(),u.getUTCMonth()+1,u.getUTCDate(),u.getUTCHours(),u.getUTCMinutes(),u.getUTCSeconds(),"Etc/UTC"):y$.tp(u.getFullYear(),u.getMonth()+1,u.getDate(),u.getHours(),u.getMinutes(),u.getSeconds(),t)}function BE0(i){if(i===void 0&&(i={}),delete i.name,i.legacyMode=i.legacyMode===void 0?!0:i.legacyMode,i.paused=i.paused===void 0?!1:i.paused,i.maxRuns=i.maxRuns===void 0?1/0:i.maxRuns,i.catch=i.catch===void 0?!1:i.catch,i.interval=i.interval===void 0?0:parseInt(i.interval.toString(),10),i.utcOffset=i.utcOffset===void 0?void 0:parseInt(i.utcOffset.toString(),10),i.unref=i.unref===void 0?!1:i.unref,i.startAt&&(i.startAt=new T6(i.startAt,i.timezone)),i.stopAt&&(i.stopAt=new T6(i.stopAt,i.timezone)),i.interval!==null){if(isNaN(i.interval))throw Error("CronOptions: Supplied value for interval is not a number");if(i.interval<0)throw Error("CronOptions: Supplied value for interval can not be negative")}if(i.utcOffset!==void 0){if(isNaN(i.utcOffset))throw Error("CronOptions: Invalid value passed for utcOffset, should be number representing minutes offset from UTC.");if(i.utcOffset<-870||i.utcOffset>870)throw Error("CronOptions: utcOffset out of bounds.");if(i.utcOffset!==void 0&&i.timezone)throw Error("CronOptions: Combining 'utcOffset' with 'timezone' is not allowed.")}if(i.unref!==!0&&i.unref!==!1)throw Error("CronOptions: Unref should be either true, false or undefined(false).");return i}function gV(i){return Object.prototype.toString.call(i)==="[object Function]"||typeof i=="function"||i instanceof Function}function QE0(i){return gV(i)}function PE0(i){typeof Deno<"u"&&typeof Deno.unrefTimer<"u"?Deno.unrefTimer(i):i&&typeof i.unref<"u"&&i.unref()}var wsi=32,hV,d3u,f3u=class{pattern;timezone;second;minute;hour;day;month;dayOfWeek;lastDayOfMonth;starDOM;starDOW;constructor(i,t){this.pattern=i,this.timezone=t,this.second=Array(60).fill(0),this.minute=Array(60).fill(0),this.hour=Array(24).fill(0),this.day=Array(31).fill(0),this.month=Array(12).fill(0),this.dayOfWeek=Array(7).fill(0),this.lastDayOfMonth=!1,this.starDOM=!1,this.starDOW=!1,this.parse()}parse(){if(!(typeof this.pattern=="string"||this.pattern instanceof String))throw TypeError("CronPattern: Pattern has to be of type string.");this.pattern.indexOf("@")>=0&&(this.pattern=this.handleNicknames(this.pattern).trim());let i=this.pattern.replace(/\s+/g," ").split(" ");if(i.length<5||i.length>6)throw TypeError("CronPattern: invalid configuration format ('"+this.pattern+"'), exactly five or six space separated parts are required.");if(i.length===5&&i.unshift("0"),i[3].indexOf("L")>=0&&(i[3]=i[3].replace("L",""),this.lastDayOfMonth=!0),i[3]=="*"&&(this.starDOM=!0),i[4].length>=3&&(i[4]=this.replaceAlphaMonths(i[4])),i[5].length>=3&&(i[5]=this.replaceAlphaDays(i[5])),i[5]=="*"&&(this.starDOW=!0),this.pattern.indexOf("?")>=0){let t=new T6(new Date,this.timezone).getDate(!0);i[0]=i[0].replace("?",t.getSeconds().toString()),i[1]=i[1].replace("?",t.getMinutes().toString()),i[2]=i[2].replace("?",t.getHours().toString()),this.starDOM||(i[3]=i[3].replace("?",t.getDate().toString())),i[4]=i[4].replace("?",(t.getMonth()+1).toString()),this.starDOW||(i[5]=i[5].replace("?",t.getDay().toString()))}this.throwAtIllegalCharacters(i),this.partToArray("second",i[0],0,1),this.partToArray("minute",i[1],0,1),this.partToArray("hour",i[2],0,1),this.partToArray("day",i[3],-1,1),this.partToArray("month",i[4],-1,1),this.partToArray("dayOfWeek",i[5],0,hV),this.dayOfWeek[7]&&(this.dayOfWeek[0]=this.dayOfWeek[7])}partToArray(i,t,u,l){let n=this[i],f=i==="day"&&this.lastDayOfMonth;if(t===""&&!f)throw TypeError("CronPattern: configuration entry "+i+" ("+t+") is empty, check for trailing spaces.");if(t==="*")return n.fill(l);let c=t.split(",");if(c.length>1)for(let $=0;$<c.length;$++)this.partToArray(i,c[$],u,l);else t.indexOf("-")!==-1&&t.indexOf("/")!==-1?this.handleRangeWithStepping(t,i,u,l):t.indexOf("-")!==-1?this.handleRange(t,i,u,l):t.indexOf("/")!==-1?this.handleStepping(t,i,u,l):t!==""&&this.handleNumber(t,i,u,l)}throwAtIllegalCharacters(i){for(let t=0;t<i.length;t++)if((t===5?/[^/*0-9,\-#L]+/:/[^/*0-9,-]+/).test(i[t]))throw TypeError("CronPattern: configuration entry "+t+" ("+i[t]+") contains illegal characters.")}handleNumber(i,t,u,l){let n=this.extractNth(i,t),f=parseInt(n[0],10)+u;if(isNaN(f))throw TypeError("CronPattern: "+t+" is not a number: '"+i+"'");this.setPart(t,f,n[1]||l)}setPart(i,t,u){if(!Object.prototype.hasOwnProperty.call(this,i))throw TypeError("CronPattern: Invalid part specified: "+i);if(i==="dayOfWeek"){if(t===7&&(t=0),t<0||t>6)throw RangeError("CronPattern: Invalid value for dayOfWeek: "+t);this.setNthWeekdayOfMonth(t,u);return}if(i==="second"||i==="minute"){if(t<0||t>=60)throw RangeError("CronPattern: Invalid value for "+i+": "+t)}else if(i==="hour"){if(t<0||t>=24)throw RangeError("CronPattern: Invalid value for "+i+": "+t)}else if(i==="day"){if(t<0||t>=31)throw RangeError("CronPattern: Invalid value for "+i+": "+t)}else if(i==="month"&&(t<0||t>=12))throw RangeError("CronPattern: Invalid value for "+i+": "+t);this[i][t]=u}handleRangeWithStepping(i,t,u,l){let n=this.extractNth(i,t),f=n[0].match(/^(\d+)-(\d+)\/(\d+)$/);if(f===null)throw TypeError("CronPattern: Syntax error, illegal range with stepping: '"+i+"'");let[,c,$,d]=f,_=parseInt(c,10)+u,g=parseInt($,10)+u,h=parseInt(d,10);if(isNaN(_))throw TypeError("CronPattern: Syntax error, illegal lower range (NaN)");if(isNaN(g))throw TypeError("CronPattern: Syntax error, illegal upper range (NaN)");if(isNaN(h))throw TypeError("CronPattern: Syntax error, illegal stepping: (NaN)");if(h===0)throw TypeError("CronPattern: Syntax error, illegal stepping: 0");if(h>this[t].length)throw TypeError("CronPattern: Syntax error, steps cannot be greater than maximum value of part ("+this[t].length+")");if(_>g)throw TypeError("CronPattern: From value is larger than to value: '"+i+"'");for(let E=_;E<=g;E+=h)this.setPart(t,E,n[1]||l)}extractNth(i,t){let u=i,l;if(u.includes("#")){if(t!=="dayOfWeek")throw Error("CronPattern: nth (#) only allowed in day-of-week field");l=u.split("#")[1],u=u.split("#")[0]}return[u,l]}handleRange(i,t,u,l){let n=this.extractNth(i,t),f=n[0].split("-");if(f.length!==2)throw TypeError("CronPattern: Syntax error, illegal range: '"+i+"'");let c=parseInt(f[0],10)+u,$=parseInt(f[1],10)+u;if(isNaN(c))throw TypeError("CronPattern: Syntax error, illegal lower range (NaN)");if(isNaN($))throw TypeError("CronPattern: Syntax error, illegal upper range (NaN)");if(c>$)throw TypeError("CronPattern: From value is larger than to value: '"+i+"'");for(let d=c;d<=$;d++)this.setPart(t,d,n[1]||l)}handleStepping(i,t,u,l){let n=this.extractNth(i,t),f=n[0].split("/");if(f.length!==2)throw TypeError("CronPattern: Syntax error, illegal stepping: '"+i+"'");f[0]===""&&(f[0]="*");let c=0;f[0]!=="*"&&(c=parseInt(f[0],10)+u);let $=parseInt(f[1],10);if(isNaN($))throw TypeError("CronPattern: Syntax error, illegal stepping: (NaN)");if($===0)throw TypeError("CronPattern: Syntax error, illegal stepping: 0");if($>this[t].length)throw TypeError("CronPattern: Syntax error, max steps for part is ("+this[t].length+")");for(let d=c;d<this[t].length;d+=$)this.setPart(t,d,n[1]||l)}replaceAlphaDays(i){return i.replace(/-sun/gi,"-7").replace(/sun/gi,"0").replace(/mon/gi,"1").replace(/tue/gi,"2").replace(/wed/gi,"3").replace(/thu/gi,"4").replace(/fri/gi,"5").replace(/sat/gi,"6")}replaceAlphaMonths(i){return i.replace(/jan/gi,"1").replace(/feb/gi,"2").replace(/mar/gi,"3").replace(/apr/gi,"4").replace(/may/gi,"5").replace(/jun/gi,"6").replace(/jul/gi,"7").replace(/aug/gi,"8").replace(/sep/gi,"9").replace(/oct/gi,"10").replace(/nov/gi,"11").replace(/dec/gi,"12")}handleNicknames(i){let t=i.trim().toLowerCase();return t==="@yearly"||t==="@annually"?"0 0 1 1 *":t==="@monthly"?"0 0 1 * *":t==="@weekly"?"0 0 * * 0":t==="@daily"?"0 0 * * *":t==="@hourly"?"0 * * * *":i}setNthWeekdayOfMonth(i,t){if(typeof t!="number"&&t==="L")this.dayOfWeek[i]=this.dayOfWeek[i]|wsi;else if(t===hV)this.dayOfWeek[i]=hV;else if(t<6&&t>0)this.dayOfWeek[i]=this.dayOfWeek[i]|d3u[t-1];else throw TypeError(`CronPattern: nth weekday out of range, should be 1-5 or L. Value: ${t}, Type: ${typeof t}`)}},c3u,v2,T6=class i{tz;ms;second;minute;hour;day;month;year;constructor(t,u){if(this.tz=u,t&&t instanceof Date)if(!isNaN(t))this.fromDate(t);else throw TypeError("CronDate: Invalid date passed to CronDate constructor");else if(t===void 0)this.fromDate(new Date);else if(t&&typeof t=="string")this.fromString(t);else if(t instanceof i)this.fromCronDate(t);else throw TypeError("CronDate: Invalid type ("+typeof t+") passed to CronDate constructor")}isNthWeekdayOfMonth(t,u,l,n){let f=new Date(Date.UTC(t,u,l)).getUTCDay(),c=0;for(let $=1;$<=l;$++)new Date(Date.UTC(t,u,$)).getUTCDay()===f&&c++;if(n&hV&&d3u[c-1]&n)return!0;if(n&wsi){let $=new Date(Date.UTC(t,u+1,0)).getUTCDate();for(let d=l+1;d<=$;d++)if(new Date(Date.UTC(t,u,d)).getUTCDay()===f)return!1;return!0}return!1}fromDate(t){if(this.tz!==void 0)if(typeof this.tz=="number")this.ms=t.getUTCMilliseconds(),this.second=t.getUTCSeconds(),this.minute=t.getUTCMinutes()+this.tz,this.hour=t.getUTCHours(),this.day=t.getUTCDate(),this.month=t.getUTCMonth(),this.year=t.getUTCFullYear(),this.apply();else{let u=y$.toTZ(t,this.tz);this.ms=t.getMilliseconds(),this.second=u.s,this.minute=u.i,this.hour=u.h,this.day=u.d,this.month=u.m-1,this.year=u.y}else this.ms=t.getMilliseconds(),this.second=t.getSeconds(),this.minute=t.getMinutes(),this.hour=t.getHours(),this.day=t.getDate(),this.month=t.getMonth(),this.year=t.getFullYear()}fromCronDate(t){this.tz=t.tz,this.year=t.year,this.month=t.month,this.day=t.day,this.hour=t.hour,this.minute=t.minute,this.second=t.second,this.ms=t.ms}apply(){if(this.month>11||this.day>c3u[this.month]||this.hour>59||this.minute>59||this.second>59||this.hour<0||this.minute<0||this.second<0){let t=new Date(Date.UTC(this.year,this.month,this.day,this.hour,this.minute,this.second,this.ms));return this.ms=t.getUTCMilliseconds(),this.second=t.getUTCSeconds(),this.minute=t.getUTCMinutes(),this.hour=t.getUTCHours(),this.day=t.getUTCDate(),this.month=t.getUTCMonth(),this.year=t.getUTCFullYear(),!0}else return!1}fromString(t){if(typeof this.tz=="number"){let u=y$.fromTZISO(t);this.ms=u.getUTCMilliseconds(),this.second=u.getUTCSeconds(),this.minute=u.getUTCMinutes(),this.hour=u.getUTCHours(),this.day=u.getUTCDate(),this.month=u.getUTCMonth(),this.year=u.getUTCFullYear(),this.apply()}else return this.fromDate(y$.fromTZISO(t,this.tz))}findNext(t,u,l,n){let f=this[u],c;l.lastDayOfMonth&&(this.month!==1?c=c3u[this.month]:c=new Date(Date.UTC(this.year,this.month+1,0,0,0,0,0)).getUTCDate());let $=!l.starDOW&&u=="day"?new Date(Date.UTC(this.year,this.month,1,0,0,0,0)).getUTCDay():void 0;for(let d=this[u]+n;d<l[u].length;d++){let _=l[u][d];if(u==="day"&&l.lastDayOfMonth&&d-n==c&&(_=1),u==="day"&&!l.starDOW){let g=l.dayOfWeek[($+(d-n-1))%7];if(g&&g&hV)g=this.isNthWeekdayOfMonth(this.year,this.month,d-n,g)?1:0;else if(g)throw Error(`CronDate: Invalid value for dayOfWeek encountered. ${g}`);t.legacyMode&&!l.starDOM?_=_||g:_=_&&g}if(_)return this[u]=d-n,f!==this[u]?2:1}return 3}recurse(t,u,l){let n=this.findNext(u,v2[l][0],t,v2[l][2]);if(n>1){let f=l+1;for(;f<v2.length;)this[v2[f][0]]=-v2[f][2],f++;if(n===3)return this[v2[l][1]]++,this[v2[l][0]]=-v2[l][2],this.apply(),this.recurse(t,u,0);if(this.apply())return this.recurse(t,u,l-1)}return l+=1,l>=v2.length?this:this.year>=3000?null:this.recurse(t,u,l)}increment(t,u,l){return this.second+=u.interval!==void 0&&u.interval>1&&l?u.interval:1,this.ms=0,this.apply(),this.recurse(t,u,0)}getDate(t){return t||this.tz===void 0?new Date(this.year,this.month,this.day,this.hour,this.minute,this.second,this.ms):typeof this.tz=="number"?new Date(Date.UTC(this.year,this.month,this.day,this.hour,this.minute-this.tz,this.second,this.ms)):y$.fromTZ(y$.tp(this.year,this.month+1,this.day,this.hour,this.minute,this.second,this.tz),!1)}getTime(){return this.getDate(!1).getTime()}},$3u=30000,edi,z5=class{name;options;_states;fn;constructor(i,t,u){let l,n;if(gV(t))n=t;else if(typeof t=="object")l=t;else if(t!==void 0)throw Error("Cron: Invalid argument passed for optionsIn. Should be one of function, or object (options).");if(gV(u))n=u;else if(typeof u=="object")l=u;else if(u!==void 0)throw Error("Cron: Invalid argument passed for funcIn. Should be one of function, or object (options).");if(this.name=l?.name,this.options=BE0(l),this._states={kill:!1,blocking:!1,previousRun:void 0,currentRun:void 0,once:void 0,currentTimeout:void 0,maxRuns:l?l.maxRuns:void 0,paused:l?l.paused:!1,pattern:new f3u("* * * * *")},i&&(i instanceof Date||typeof i=="string"&&i.indexOf(":")>0)?this._states.once=new T6(i,this.options.timezone||this.options.utcOffset):this._states.pattern=new f3u(i,this.options.timezone),this.name){if(edi.find((f)=>f.name===this.name))throw Error("Cron: Tried to initialize new named job '"+this.name+"', but name already taken.");edi.push(this)}return n!==void 0&&QE0(n)&&(this.fn=n,this.schedule()),this}nextRun(i){let t=this._next(i);return t?t.getDate(!1):null}nextRuns(i,t){this._states.maxRuns!==void 0&&i>this._states.maxRuns&&(i=this._states.maxRuns);let u=[],l=t||this._states.currentRun||void 0;for(;i--&&(l=this.nextRun(l));)u.push(l);return u}getPattern(){return this._states.pattern?this._states.pattern.pattern:void 0}isRunning(){let i=this.nextRun(this._states.currentRun),t=!this._states.paused,u=this.fn!==void 0,l=!this._states.kill;return t&&u&&l&&i!==null}isStopped(){return this._states.kill}isBusy(){return this._states.blocking}currentRun(){return this._states.currentRun?this._states.currentRun.getDate():null}previousRun(){return this._states.previousRun?this._states.previousRun.getDate():null}msToNext(i){let t=this._next(i);return t?i instanceof T6||i instanceof Date?t.getTime()-i.getTime():t.getTime()-new T6(i).getTime():null}stop(){this._states.kill=!0,this._states.currentTimeout&&clearTimeout(this._states.currentTimeout);let i=edi.indexOf(this);i>=0&&edi.splice(i,1)}pause(){return this._states.paused=!0,!this._states.kill}resume(){return this._states.paused=!1,!this._states.kill}schedule(i){if(i&&this.fn)throw Error("Cron: It is not allowed to schedule two functions using the same Croner instance.");i&&(this.fn=i);let t=this.msToNext(),u=this.nextRun(this._states.currentRun);return t==null||isNaN(t)||u===null?this:(t>$3u&&(t=$3u),this._states.currentTimeout=setTimeout(()=>this._checkTrigger(u),t),this._states.currentTimeout&&this.options.unref&&PE0(this._states.currentTimeout),this)}async _trigger(i){if(this._states.blocking=!0,this._states.currentRun=new T6(void 0,this.options.timezone||this.options.utcOffset),this.options.catch)try{this.fn!==void 0&&await this.fn(this,this.options.context)}catch(t){gV(this.options.catch)&&this.options.catch(t,this)}else this.fn!==void 0&&await this.fn(this,this.options.context);this._states.previousRun=new T6(i,this.options.timezone||this.options.utcOffset),this._states.blocking=!1}async trigger(){await this._trigger()}runsLeft(){return this._states.maxRuns}_checkTrigger(i){let t=new Date,u=!this._states.paused&&t.getTime()>=i.getTime(),l=this._states.blocking&&this.options.protect;u&&!l?(this._states.maxRuns!==void 0&&this._states.maxRuns--,this._trigger()):u&&l&&gV(this.options.protect)&&setTimeout(()=>this.options.protect(this),0),this.schedule()}_next(i){let t=!!(i||this._states.currentRun),u=!1;!i&&this.options.startAt&&this.options.interval&&([i,t]=this._calculatePreviousRun(i,t),u=!i),i=new T6(i,this.options.timezone||this.options.utcOffset),this.options.startAt&&i&&i.getTime()<this.options.startAt.getTime()&&(i=this.options.startAt);let l=this._states.once||new T6(i,this.options.timezone||this.options.utcOffset);return!u&&l!==this._states.once&&(l=l.increment(this._states.pattern,this.options,t)),this._states.once&&this._states.once.getTime()<=i.getTime()||l===null||this._states.maxRuns!==void 0&&this._states.maxRuns<=0||this._states.kill||this.options.stopAt&&l.getTime()>=this.options.stopAt.getTime()?null:l}_calculatePreviousRun(i,t){let u=new T6(void 0,this.options.timezone||this.options.utcOffset),l=i;if(this.options.startAt.getTime()<=u.getTime()){l=this.options.startAt;let n=l.getTime()+this.options.interval*1000;for(;n<=u.getTime();)l=new T6(l,this.options.timezone||this.options.utcOffset).increment(this._states.pattern,this.options,!0),n=l.getTime()+this.options.interval*1000;t=!0}return l===null&&(l=void 0),[l,t]}};var EV=w(()=>{y$.fromTZISO=(i,t,u)=>y$.fromTZ(ZE0(i,t),u);y$.fromTZ=function(i,t){let u=new Date(Date.UTC(i.y,i.m-1,i.d,i.h,i.i,i.s)),l=rsi(i.tz,u),n=new Date(u.getTime()-l),f=rsi(i.tz,n);if(f-l===0)return n;{let c=new Date(u.getTime()-f),$=rsi(i.tz,c);if($-f===0)return c;if(!t&&$-f>0)return c;if(t)throw Error("Invalid date passed to fromTZ()");return n}};y$.toTZ=function(i,t){let u=i.toLocaleString("en-US",{timeZone:t}).replace(/[\u202f]/," "),l=new Date(u);return{y:l.getFullYear(),m:l.getMonth()+1,d:l.getDate(),h:l.getHours(),i:l.getMinutes(),s:l.getSeconds(),tz:t}};y$.tp=(i,t,u,l,n,f,c)=>({y:i,m:t,d:u,h:l,i:n,s:f,tz:c});y$.minitz=y$;hV=31|wsi,d3u=[1,2,4,8,16],c3u=[31,28,31,30,31,30,31,31,30,31,30,31],v2=[["month","year",0],["day","month",-1],["hour","day",0],["minute","hour",0],["second","minute",0]];edi=[]});function Cdi(i,t){try{return new z5(i,{timezone:"UTC"}).nextRun(t)??null}catch{return null}}var xsi=w(()=>{EV()});import{DBOS as G4,SchedulerMode as YE0}from"@dbos-inc/dbos-sdk";function vV(i){return`${AE0}${i}`}async function Mdi(i){await G4.registerQueue(vV(i),{concurrency:GE0,onConflict:"never_update"})}function ysi(i){Osi=i}function oy(){if(!Osi)throw Error("[automations] DBOS runtime not initialized \u2014 setAutomationRuntime() must run before workflows fire");return Osi}function kE0(i){if(!i||i.length===0)return;return{vision:i.includes("vision")||i.includes("image")||void 0,text:i.includes("text")||void 0,reasoning:i.includes("reasoning")||void 0,file:i.includes("file")||void 0}}async function jE0(i){let t=oy(),u=await t.storage.findById(i.automationId,i.organizationId);if(!u)return{skip:"not_found"};if(!u.active)return{skip:"inactive"};let l=await t.meshContextFactory(u.organization_id,u.created_by);if(!l)return console.warn(`[fireAutomationWorkflow] deactivating "${u.name}" \u2014 creator ${u.created_by} no longer in org ${u.organization_id}`),await t.storage.deactivateAutomation(u.id),{skip:"creator_invalid"};let n=JSON.parse(u.models),f=n.modelId&&n.credentialId?{modelId:n.modelId,credentialId:n.credentialId}:null;if(!f&&!n.tier)console.warn(`[fireAutomationWorkflow] automation ${u.id} missing tier, defaulting to "smart"`);let c=n.tier??"smart",[$,d,_]=await Promise.all([f?u3u(l,f.credentialId,f.modelId):my(l,c),tz(l,"image"),tz(l,"web_research")]),g=(E)=>({id:E.modelId,title:E.modelMeta.title,provider:E.modelMeta.providerId??null,capabilities:kE0(E.modelMeta.capabilities),limits:E.modelMeta.limits?{contextWindow:E.modelMeta.limits.contextWindow,maxOutputTokens:E.modelMeta.limits.maxOutputTokens??void 0}:void 0}),h={credentialId:$.credentialId,thinking:g($),...d?{image:{...g(d),credentialId:d.credentialId}}:{},..._?{deepResearch:{...g(_),credentialId:_.credentialId}}:{}};return{automation:u,resolvedModel:h}}async function SE0(i,t){return await oy().storage.createAutomationRunThread(i,t)}async function zE0(i){let t=oy();try{let u=new Date().toISOString();await t.storage.updateTriggerLastRunAt(i,u);let l=await t.storage.findTriggerById(i);if(l?.cron_expression){let n=Cdi(l.cron_expression,new Date);await t.storage.updateNextRunAt(i,n?n.toISOString():null)}}catch(u){console.warn(`[fireAutomationWorkflow] trigger ${i} run-time write failed:`,u instanceof Error?u.message:u)}}async function bE0(i,t,u,l){if(!await oy().meshContextFactory(i.organization_id,i.created_by))return{ok:!1,reason:"creator membership lost mid-fire"};let c=n3u(i,u.triggerId,l,t);if(u.contextMessages&&u.contextMessages.length>0){let _=u.contextMessages.flatMap((h)=>h.parts),g=c.messages.find((h)=>h.role!=="system");if(g)g.parts=[..._,...g.parts];else c.messages=[...c.messages,{id:crypto.randomUUID(),role:"user",parts:_}]}let{abortSignal:$,...d}=c;return{ok:!0,request:d}}async function Dsi(i){let t=oy();try{await t.storage.markRunFailed(i)}catch{}}async function KE0(i){let t=oy();try{await t.storage.deactivateAutomation(i)}catch{}}async function HE0(i){let t=await G4.runStep(()=>jE0(i),{name:"prepareFire"});if("skip"in t)return{skipped:t.skip};let u=await G4.runStep(()=>SE0(t.automation,i.triggerId),{name:"createRunThread"});if(i.triggerId){let f=i.triggerId;await G4.runStep(()=>zE0(f),{name:"updateTriggerTiming"})}let l=await G4.runStep(()=>bE0(t.automation,t.resolvedModel,i,u),{name:"buildDispatchRequest"});if(!l.ok)return await G4.runStep(()=>Dsi(u),{name:"markRunFailed"}),{taskId:u,error:l.reason};let n=oy();try{await gsi({threadId:u,request:l.request,timeoutMs:n.runTimeoutMs??WE0,source:"automation"})}catch(f){let c=f instanceof Error?f.message:String(f);if(l3u(f))return console.warn(`[fireAutomationWorkflow] deactivating "${t.automation.name}" (${t.automation.id}) \u2014 permanent dispatch error, will not fire again: ${c}`),await G4.runStep(()=>KE0(t.automation.id),{name:"deactivateAutomation"}),await G4.runStep(()=>Dsi(u),{name:"markRunFailed"}),{taskId:u,error:c};return console.error(`[fireAutomationWorkflow] ERROR "${t.automation.name}" taskId=${u}:`,c),await G4.runStep(()=>Dsi(u),{name:"markRunFailed"}),{taskId:u,error:c}}return{taskId:u}}async function RE0(i,t){await Mdi(t.organizationId),await G4.startWorkflow(qdi,{queueName:vV(t.organizationId)})(t)}async function ME0(){let i=Date.now()-LE0,t=new Date(i).toISOString(),u=0,l=0;while(l<200){let n=await G4.listWorkflows({status:[...CE0],endTime:t,limit:_3u,loadInput:!1,loadOutput:!1});if(n.length===0)break;if(await G4.deleteWorkflows(n.map((f)=>f.workflowID)),u+=n.length,l++,n.length<_3u)break}return console.log(`[automations-gc] deleted ${u} workflow(s) in ${l} batch(es) (cutoff=${t})`),{deleted:u,batches:l,cutoffMs:i}}async function qE0(i,t){await G4.runStep(()=>ME0(),{name:"automationsGarbageCollect"})}var AE0="automations-org-",GE0=10,WE0=300000,Osi=null,qdi,g3u,LE0=604800000,_3u=500,eE0="17 3 * * *",CE0,VE0;var Xsi=w(()=>{Rdi();Ldi();vsi();xsi();qdi=G4.registerWorkflow(HE0,{name:"fireAutomationWorkflow"});g3u=G4.registerWorkflow(RE0,{name:"cronEntryWorkflow"}),CE0=["SUCCESS","ERROR","CANCELLED"];VE0=G4.registerWorkflow(qE0,{name:"automationsGcWorkflow"});G4.registerScheduled(VE0,{name:"automationsGcWorkflow",crontab:eE0,mode:YE0.ExactlyOncePerIntervalWhenActive})});import{DBOS as uz}from"@dbos-inc/dbos-sdk";function sy(i){return`auto-trigger-${i}`}async function Vdi(i,t){if(i.type!=="cron"||!i.cron_expression)return;await uz.createSchedule({scheduleName:sy(i.id),workflowFn:g3u,schedule:i.cron_expression,context:{automationId:t.id,organizationId:t.organization_id,triggerId:i.id}})}async function Nsi(i){try{await uz.deleteSchedule(sy(i))}catch(t){console.warn(`[dbos-sync] deleteSchedule(${i}) failed:`,t instanceof Error?t.message:t)}}async function E3u(i,t){let u=i.filter((l)=>l.type==="cron");await Promise.allSettled(u.map(async(l)=>{try{if(t)await uz.resumeSchedule(sy(l.id));else await uz.pauseSchedule(sy(l.id))}catch(n){console.warn(`[dbos-sync] ${t?"resume":"pause"}Schedule(${l.id}) failed:`,n instanceof Error?n.message:n)}}))}async function v3u(i){await Promise.allSettled(i.filter((t)=>t.type==="cron").map((t)=>Nsi(t.id)))}function r3u(i,t){return t?`auto:${i.automationId}:${t}`:void 0}async function Jsi(i,t){await Mdi(i.organizationId);let u=r3u(i,t?.idempotencyKey);return await(await uz.startWorkflow(qdi,{workflowID:u,queueName:vV(i.organizationId)})(i)).getResult()}async function rV(i,t){await Mdi(i.organizationId);let u=r3u(i,t?.idempotencyKey);await uz.startWorkflow(qdi,{workflowID:u,queueName:vV(i.organizationId)})(i)}var h3u="auto-trigger-";var py=w(()=>{Xsi()});class I6{constructor(i={}){this._started=!1,this._hasHandledRequest=!1,this._streamMapping=new Map,this._requestToStreamMapping=new Map,this._requestResponseMap=new Map,this._initialized=!1,this._enableJsonResponse=!1,this._standaloneSseStreamId="_GET_stream",this.sessionIdGenerator=i.sessionIdGenerator,this._enableJsonResponse=i.enableJsonResponse??!1,this._eventStore=i.eventStore,this._onsessioninitialized=i.onsessioninitialized,this._onsessionclosed=i.onsessionclosed,this._allowedHosts=i.allowedHosts,this._allowedOrigins=i.allowedOrigins,this._enableDnsRebindingProtection=i.enableDnsRebindingProtection??!1,this._retryInterval=i.retryInterval}async start(){if(this._started)throw Error("Transport already started");this._started=!0}createJsonErrorResponse(i,t,u,l){let n={code:t,message:u};if(l?.data!==void 0)n.data=l.data;return new Response(JSON.stringify({jsonrpc:"2.0",error:n,id:null}),{status:i,headers:{"Content-Type":"application/json",...l?.headers}})}validateRequestHeaders(i){if(!this._enableDnsRebindingProtection)return;if(this._allowedHosts&&this._allowedHosts.length>0){let t=i.headers.get("host");if(!t||!this._allowedHosts.includes(t)){let u=`Invalid Host header: ${t}`;return this.onerror?.(Error(u)),this.createJsonErrorResponse(403,-32000,u)}}if(this._allowedOrigins&&this._allowedOrigins.length>0){let t=i.headers.get("origin");if(t&&!this._allowedOrigins.includes(t)){let u=`Invalid Origin header: ${t}`;return this.onerror?.(Error(u)),this.createJsonErrorResponse(403,-32000,u)}}return}async handleRequest(i,t){if(!this.sessionIdGenerator&&this._hasHandledRequest)throw Error("Stateless transport cannot be reused across requests. Create a new transport per request.");this._hasHandledRequest=!0;let u=this.validateRequestHeaders(i);if(u)return u;switch(i.method){case"POST":return this.handlePostRequest(i,t);case"GET":return this.handleGetRequest(i);case"DELETE":return this.handleDeleteRequest(i);default:return this.handleUnsupportedRequest()}}async writePrimingEvent(i,t,u,l){if(!this._eventStore)return;if(l<"2025-11-25")return;let n=await this._eventStore.storeEvent(u,{}),f=`id: ${n}
106865
106865
  data:
106866
106866
 
106867
106867
  `;if(this._retryInterval!==void 0)f=`id: ${n}
@@ -107885,7 +107885,7 @@ Hint: Configure a valid Google account email in Monitor Configuration > Contexto
107885
107885
  `);let l=t.pax;if(l)for(let n in l)u+=Zut(" "+n+"="+l[n]+`
107886
107886
  `);return m0.from(u)};hJ0.decodePax=function(t){let u={};while(t.length){let l=0;while(l<t.length&&t[l]!==32)l++;let n=parseInt(m0.toString(t.subarray(0,l)),10);if(!n)return u;let f=m0.toString(t.subarray(l+1,n-1)),c=f.indexOf("=");if(c===-1)return u;u[f.slice(0,c)]=f.slice(c+1),t=t.subarray(n)}return u};hJ0.encode=function(t){let u=m0.alloc(512),l=t.name,n="";if(t.typeflag===5&&l[l.length-1]!=="/")l+="/";if(m0.byteLength(l)!==l.length)return null;while(m0.byteLength(l)>100){let f=l.indexOf("/");if(f===-1)return null;n+=n?"/"+l.slice(0,f):l.slice(0,f),l=l.slice(f+1)}if(m0.byteLength(l)>100||m0.byteLength(n)>155)return null;if(t.linkname&&m0.byteLength(t.linkname)>100)return null;if(m0.write(u,l),m0.write(u,$D(t.mode&4095,6),100),m0.write(u,$D(t.uid,6),108),m0.write(u,$D(t.gid,6),116),_J0(t.size,u,124),m0.write(u,$D(t.mtime.getTime()/1000|0,11),136),u[156]=48+$J0(t.type),t.linkname)m0.write(u,t.linkname,157);if(m0.copy(uUu,u,257),m0.copy(iJ0,u,263),t.uname)m0.write(u,t.uname,265);if(t.gname)m0.write(u,t.gname,297);if(m0.write(u,$D(t.devmajor||0,6),329),m0.write(u,$D(t.devminor||0,6),337),n)m0.write(u,n,345);return m0.write(u,$D(nUu(u),6),148),u};hJ0.decode=function(t,u,l){let n=t[156]===0?0:t[156]-48,f=Kz(t,0,100,u),c=cD(t,100,8),$=cD(t,108,8),d=cD(t,116,8),_=cD(t,124,12),g=cD(t,136,12),h=cJ0(n),E=t[157]===0?null:Kz(t,157,100,u),v=Kz(t,265,32),r=Kz(t,297,32),x=cD(t,329,8),O=cD(t,337,8),y=nUu(t);if(y===256)return null;if(y!==cD(t,148,8))throw Error("Invalid tar header. Maybe the tar is corrupted or it needs to be gunzipped?");if(lJ0(t)){if(t[345])f=Kz(t,345,155,u)+"/"+f}else if(nJ0(t));else if(!l)throw Error("Invalid tar header: unknown format.");if(n===0&&f&&f[f.length-1]==="/")n=5;return{name:f,mode:c,uid:$,gid:d,size:_,mtime:new Date(1000*g),type:h,linkname:E,uname:v,gname:r,devmajor:x,devminor:O,pax:null}};function lJ0(i){return m0.equals(uUu,i.subarray(257,263))}function nJ0(i){return m0.equals(tJ0,i.subarray(257,263))&&m0.equals(uJ0,i.subarray(263,265))}function fJ0(i,t,u){if(typeof i!=="number")return u;if(i=~~i,i>=t)return t;if(i>=0)return i;if(i+=t,i>=0)return i;return 0}function cJ0(i){switch(i){case 0:return"file";case 1:return"link";case 2:return"symlink";case 3:return"character-device";case 4:return"block-device";case 5:return"directory";case 6:return"fifo";case 7:return"contiguous-file";case 72:return"pax-header";case 55:return"pax-global-header";case 27:return"gnu-long-link-path";case 28:case 30:return"gnu-long-path"}return null}function $J0(i){switch(i){case"file":return 0;case"link":return 1;case"symlink":return 2;case"character-device":return 3;case"block-device":return 4;case"directory":return 5;case"fifo":return 6;case"contiguous-file":return 7;case"pax-header":return 72}return 0}function lUu(i,t,u,l){for(;u<l;u++)if(i[u]===t)return u;return l}function nUu(i){let t=256;for(let u=0;u<148;u++)t+=i[u];for(let u=156;u<512;u++)t+=i[u];return t}function $D(i,t){if(i=i.toString(8),i.length>t)return"7777777777777777777".slice(0,t)+" ";return"0000000000000000000".slice(0,t-i.length)+i+" "}function dJ0(i,t,u){t[u]=128;for(let l=11;l>0;l--)t[u+l]=i&255,i=Math.floor(i/256)}function _J0(i,t,u){if(i.toString(8).length>11)dJ0(i,t,u);else m0.write(t,$D(i,11),u)}function gJ0(i){let t;if(i[0]===128)t=!0;else if(i[0]===255)t=!1;else return null;let u=[],l;for(l=i.length-1;l>0;l--){let c=i[l];if(t)u.push(c);else u.push(255-c)}let n=0,f=u.length;for(l=0;l<f;l++)n+=u[l]*Math.pow(256,l);return t?n:-1*n}function cD(i,t,u){if(i=i.subarray(t,t+u),t=0,i[t]&128)return gJ0(i);else{while(t<i.length&&i[t]===32)t++;let l=fJ0(lUu(i,32,t,i.length),i.length,i.length);while(t<l&&i[t]===0)t++;if(l===t)return 0;return parseInt(m0.toString(i.subarray(t,l)),8)}}function Kz(i,t,u,l){return m0.toString(i.subarray(t,lUu(i,0,t,t+u)),l)}function Zut(i){let t=m0.byteLength(i),u=Math.floor(Math.log(t)/Math.log(10))+1;if(t+u>=Math.pow(10,u))u++;return t+u+i}});var EUu=W((GU1,hUu)=>{var{Writable:DJ0,Readable:OJ0,getStreamError:fUu}=Iut(),yJ0=Xut(),cUu=bz(),Hz=But(),XJ0=cUu.alloc(0);class $Uu{constructor(){this.buffered=0,this.shifted=0,this.queue=new yJ0,this._offset=0}push(i){this.buffered+=i.byteLength,this.queue.push(i)}shiftFirst(i){return this._buffered===0?null:this._next(i)}shift(i){if(i>this.buffered)return null;if(i===0)return XJ0;let t=this._next(i);if(i===t.byteLength)return t;let u=[t];while((i-=t.byteLength)>0)t=this._next(i),u.push(t);return cUu.concat(u)}_next(i){let t=this.queue.peek(),u=t.byteLength-this._offset;if(i>=u){let l=this._offset?t.subarray(this._offset,t.byteLength):t;return this.queue.shift(),this._offset=0,this.buffered-=u,this.shifted+=u,l}return this.buffered-=i,this.shifted+=i,t.subarray(this._offset,this._offset+=i)}}class dUu extends OJ0{constructor(i,t,u){super();this.header=t,this.offset=u,this._parent=i}_read(i){if(this.header.size===0)this.push(null);if(this._parent._stream===this)this._parent._update();i(null)}_predestroy(){this._parent.destroy(fUu(this))}_detach(){if(this._parent._stream===this)this._parent._stream=null,this._parent._missing=gUu(this.header.size),this._parent._update()}_destroy(i){this._detach(),i(null)}}class _Uu extends DJ0{constructor(i){super(i);if(!i)i={};this._buffer=new $Uu,this._offset=0,this._header=null,this._stream=null,this._missing=0,this._longHeader=!1,this._callback=Qut,this._locked=!1,this._finished=!1,this._pax=null,this._paxGlobal=null,this._gnuLongPath=null,this._gnuLongLinkPath=null,this._filenameEncoding=i.filenameEncoding||"utf-8",this._allowUnknownFormat=!!i.allowUnknownFormat,this._unlockBound=this._unlock.bind(this)}_unlock(i){if(this._locked=!1,i){this.destroy(i),this._continueWrite(i);return}this._update()}_consumeHeader(){if(this._locked)return!1;this._offset=this._buffer.shifted;try{this._header=Hz.decode(this._buffer.shift(512),this._filenameEncoding,this._allowUnknownFormat)}catch(i){return this._continueWrite(i),!1}if(!this._header)return!0;switch(this._header.type){case"gnu-long-path":case"gnu-long-link-path":case"pax-global-header":case"pax-header":return this._longHeader=!0,this._missing=this._header.size,!0}if(this._locked=!0,this._applyLongHeaders(),this._header.size===0||this._header.type==="directory")return this.emit("entry",this._header,this._createStream(),this._unlockBound),!0;return this._stream=this._createStream(),this._missing=this._header.size,this.emit("entry",this._header,this._stream,this._unlockBound),!0}_applyLongHeaders(){if(this._gnuLongPath)this._header.name=this._gnuLongPath,this._gnuLongPath=null;if(this._gnuLongLinkPath)this._header.linkname=this._gnuLongLinkPath,this._gnuLongLinkPath=null;if(this._pax){if(this._pax.path)this._header.name=this._pax.path;if(this._pax.linkpath)this._header.linkname=this._pax.linkpath;if(this._pax.size)this._header.size=parseInt(this._pax.size,10);this._header.pax=this._pax,this._pax=null}}_decodeLongHeader(i){switch(this._header.type){case"gnu-long-path":this._gnuLongPath=Hz.decodeLongPath(i,this._filenameEncoding);break;case"gnu-long-link-path":this._gnuLongLinkPath=Hz.decodeLongPath(i,this._filenameEncoding);break;case"pax-global-header":this._paxGlobal=Hz.decodePax(i);break;case"pax-header":this._pax=this._paxGlobal===null?Hz.decodePax(i):Object.assign({},this._paxGlobal,Hz.decodePax(i));break}}_consumeLongHeader(){this._longHeader=!1,this._missing=gUu(this._header.size);let i=this._buffer.shift(this._header.size);try{this._decodeLongHeader(i)}catch(t){return this._continueWrite(t),!1}return!0}_consumeStream(){let i=this._buffer.shiftFirst(this._missing);if(i===null)return!1;this._missing-=i.byteLength;let t=this._stream.push(i);if(this._missing===0){if(this._stream.push(null),t)this._stream._detach();return t&&this._locked===!1}return t}_createStream(){return new dUu(this,this._header,this._offset)}_update(){while(this._buffer.buffered>0&&!this.destroying){if(this._missing>0){if(this._stream!==null){if(this._consumeStream()===!1)return;continue}if(this._longHeader===!0){if(this._missing>this._buffer.buffered)break;if(this._consumeLongHeader()===!1)return!1;continue}let i=this._buffer.shiftFirst(this._missing);if(i!==null)this._missing-=i.byteLength;continue}if(this._buffer.buffered<512)break;if(this._stream!==null||this._consumeHeader()===!1)return}this._continueWrite(null)}_continueWrite(i){let t=this._callback;this._callback=Qut,t(i)}_write(i,t){this._callback=t,this._buffer.push(i),this._update()}_final(i){this._finished=this._missing===0&&this._buffer.buffered===0,i(this._finished?null:Error("Unexpected end of data"))}_predestroy(){this._continueWrite(null)}_destroy(i){if(this._stream)this._stream.destroy(fUu(this));i(null)}[Symbol.asyncIterator](){let i=null,t=null,u=null,l=null,n=null,f=this;return this.on("entry",d),this.on("error",(h)=>{i=h}),this.on("close",_),{[Symbol.asyncIterator](){return this},next(){return new Promise($)},return(){return g(null)},throw(h){return g(h)}};function c(h){if(!n)return;let E=n;n=null,E(h)}function $(h,E){if(i)return E(i);if(l){h({value:l,done:!1}),l=null;return}if(t=h,u=E,c(null),f._finished&&t)t({value:void 0,done:!0}),t=u=null}function d(h,E,v){if(n=v,E.on("error",Qut),t)t({value:E,done:!1}),t=u=null;else l=E}function _(){if(c(i),!t)return;if(i)u(i);else t({value:void 0,done:!0});t=u=null}function g(h){return f.destroy(h),c(h),new Promise((E,v)=>{if(f.destroyed)return E({value:void 0,done:!0});f.once("close",function(){if(h)v(h);else E({value:void 0,done:!0})})})}}}hUu.exports=function(t){return new _Uu(t)};function Qut(){}function gUu(i){return i&=511,i&&512-i}});var rUu=W((WU1,Put)=>{var vUu={S_IFMT:61440,S_IFDIR:16384,S_IFCHR:8192,S_IFBLK:24576,S_IFIFO:4096,S_IFLNK:40960};try{Put.exports=Ei("fs").constants||vUu}catch{Put.exports=vUu}});var NUu=W((kU1,XUu)=>{var{Readable:NJ0,Writable:JJ0,getStreamError:wUu}=Iut(),HY=bz(),Rz=rUu(),yyi=But(),xUu=HY.alloc(1024);class DUu extends JJ0{constructor(i,t,u){super({mapWritable:FJ0,eagerOpen:!0});if(this.written=0,this.header=t,this._callback=u,this._linkname=null,this._isLinkname=t.type==="symlink"&&!t.linkname,this._isVoid=t.type!=="file"&&t.type!=="contiguous-file",this._finished=!1,this._pack=i,this._openCallback=null,this._pack._stream===null)this._pack._stream=this;else this._pack._pending.push(this)}_open(i){if(this._openCallback=i,this._pack._stream===this)this._continueOpen()}_continuePack(i){if(this._callback===null)return;let t=this._callback;this._callback=null,t(i)}_continueOpen(){if(this._pack._stream===null)this._pack._stream=this;let i=this._openCallback;if(this._openCallback=null,i===null)return;if(this._pack.destroying)return i(Error("pack stream destroyed"));if(this._pack._finalized)return i(Error("pack stream is already finalized"));if(this._pack._stream=this,!this._isLinkname)this._pack._encode(this.header);if(this._isVoid)this._finish(),this._continuePack(null);i(null)}_write(i,t){if(this._isLinkname)return this._linkname=this._linkname?HY.concat([this._linkname,i]):i,t(null);if(this._isVoid){if(i.byteLength>0)return t(Error("No body allowed for this entry"));return t()}if(this.written+=i.byteLength,this._pack.push(i))return t();this._pack._drain=t}_finish(){if(this._finished)return;if(this._finished=!0,this._isLinkname)this.header.linkname=this._linkname?HY.toString(this._linkname,"utf-8"):"",this._pack._encode(this.header);yUu(this._pack,this.header.size),this._pack._done(this)}_final(i){if(this.written!==this.header.size)return i(Error("Size mismatch"));this._finish(),i(null)}_getError(){return wUu(this)||Error("tar entry destroyed")}_predestroy(){this._pack.destroy(this._getError())}_destroy(i){this._pack._done(this),this._continuePack(this._finished?null:this._getError()),i()}}class OUu extends NJ0{constructor(i){super(i);this._drain=Yut,this._finalized=!1,this._finalizing=!1,this._pending=[],this._stream=null}entry(i,t,u){if(this._finalized||this.destroying)throw Error("already finalized or destroyed");if(typeof t==="function")u=t,t=null;if(!u)u=Yut;if(!i.size||i.type==="symlink")i.size=0;if(!i.type)i.type=UJ0(i.mode);if(!i.mode)i.mode=i.type==="directory"?493:420;if(!i.uid)i.uid=0;if(!i.gid)i.gid=0;if(!i.mtime)i.mtime=new Date;if(typeof t==="string")t=HY.from(t);let l=new DUu(this,i,u);if(HY.isBuffer(t))return i.size=t.byteLength,l.write(t),l.end(),l;if(l._isVoid)return l;return l}finalize(){if(this._stream||this._pending.length>0){this._finalizing=!0;return}if(this._finalized)return;this._finalized=!0,this.push(xUu),this.push(null)}_done(i){if(i!==this._stream)return;if(this._stream=null,this._finalizing)this.finalize();if(this._pending.length)this._pending.shift()._continueOpen()}_encode(i){if(!i.pax){let t=yyi.encode(i);if(t){this.push(t);return}}this._encodePax(i)}_encodePax(i){let t=yyi.encodePax({name:i.name,linkname:i.linkname,pax:i.pax}),u={name:"PaxHeader",mode:i.mode,uid:i.uid,gid:i.gid,size:t.byteLength,mtime:i.mtime,type:"pax-header",linkname:i.linkname&&"PaxHeader",uname:i.uname,gname:i.gname,devmajor:i.devmajor,devminor:i.devminor};this.push(yyi.encode(u)),this.push(t),yUu(this,t.byteLength),u.size=i.size,u.type=i.type,this.push(yyi.encode(u))}_doDrain(){let i=this._drain;this._drain=Yut,i()}_predestroy(){let i=wUu(this);if(this._stream)this._stream.destroy(i);while(this._pending.length){let t=this._pending.shift();t.destroy(i),t._continueOpen()}this._doDrain()}_read(i){this._doDrain(),i()}}XUu.exports=function(t){return new OUu(t)};function UJ0(i){switch(i&Rz.S_IFMT){case Rz.S_IFBLK:return"block-device";case Rz.S_IFCHR:return"character-device";case Rz.S_IFDIR:return"directory";case Rz.S_IFIFO:return"fifo";case Rz.S_IFLNK:return"symlink"}return"file"}function Yut(){}function yUu(i,t){if(t&=511,t)i.push(xUu.subarray(0,512-t))}function FJ0(i){return HY.isBuffer(i)?i:HY.from(i)}});var JUu=W((TJ0)=>{TJ0.extract=EUu();TJ0.pack=NUu()});var TUu=W((SU1,FUu)=>{FUu.exports=UUu;function UUu(i,t){if(i&&t)return UUu(i)(t);if(typeof i!=="function")throw TypeError("need wrapper function");return Object.keys(i).forEach(function(l){u[l]=i[l]}),u;function u(){var l=Array(arguments.length);for(var n=0;n<l.length;n++)l[n]=arguments[n];var f=i.apply(this,l),c=l[l.length-1];if(typeof f==="function"&&f!==c)Object.keys(c).forEach(function($){f[$]=c[$]});return f}}});var Gut=W((zU1,Aut)=>{var IUu=TUu();Aut.exports=IUu(Xyi);Aut.exports.strict=IUu(ZUu);Xyi.proto=Xyi(function(){Object.defineProperty(Function.prototype,"once",{value:function(){return Xyi(this)},configurable:!0}),Object.defineProperty(Function.prototype,"onceStrict",{value:function(){return ZUu(this)},configurable:!0})});function Xyi(i){var t=function(){if(t.called)return t.value;return t.called=!0,t.value=i.apply(this,arguments)};return t.called=!1,t}function ZUu(i){var t=function(){if(t.called)throw Error(t.onceError);return t.called=!0,t.value=i.apply(this,arguments)},u=i.name||"Function wrapped with `once`";return t.onceError=u+" shouldn't be called more than once",t.called=!1,t}});var PUu=W((bU1,QUu)=>{var BJ0=Gut(),QJ0=function(){},PJ0=global.Bare?queueMicrotask:process.nextTick.bind(process),YJ0=function(i){return i.setHeader&&typeof i.abort==="function"},AJ0=function(i){return i.stdio&&Array.isArray(i.stdio)&&i.stdio.length===3},BUu=function(i,t,u){if(typeof t==="function")return BUu(i,null,t);if(!t)t={};u=BJ0(u||QJ0);var{_writableState:l,_readableState:n}=i,f=t.readable||t.readable!==!1&&i.readable,c=t.writable||t.writable!==!1&&i.writable,$=!1,d=function(){if(!i.writable)_()},_=function(){if(c=!1,!f)u.call(i)},g=function(){if(f=!1,!c)u.call(i)},h=function(O){u.call(i,O?Error("exited with error code: "+O):null)},E=function(O){u.call(i,O)},v=function(){PJ0(r)},r=function(){if($)return;if(f&&!(n&&(n.ended&&!n.destroyed)))return u.call(i,Error("premature close"));if(c&&!(l&&(l.ended&&!l.destroyed)))return u.call(i,Error("premature close"))},x=function(){i.req.on("finish",_)};if(YJ0(i))if(i.on("complete",_),i.on("abort",v),i.req)x();else i.on("request",x);else if(c&&!l)i.on("end",d),i.on("close",d);if(AJ0(i))i.on("exit",h);if(i.on("end",g),i.on("finish",_),t.error!==!1)i.on("error",E);return i.on("close",v),function(){if($=!0,i.removeListener("complete",_),i.removeListener("abort",v),i.removeListener("request",x),i.req)i.req.removeListener("finish",_);i.removeListener("end",d),i.removeListener("close",d),i.removeListener("finish",_),i.removeListener("exit",h),i.removeListener("end",g),i.removeListener("error",E),i.removeListener("close",v)}};QUu.exports=BUu});var GUu=W((KU1,AUu)=>{var GJ0=Gut(),WJ0=PUu(),Nyi;try{Nyi=Ei("fs")}catch(i){}var da=function(){},kJ0=typeof process>"u"?!1:/^v?\.0/.test(process.version),Jyi=function(i){return typeof i==="function"},jJ0=function(i){if(!kJ0)return!1;if(!Nyi)return!1;return(i instanceof(Nyi.ReadStream||da)||i instanceof(Nyi.WriteStream||da))&&Jyi(i.close)},SJ0=function(i){return i.setHeader&&Jyi(i.abort)},zJ0=function(i,t,u,l){l=GJ0(l);var n=!1;i.on("close",function(){n=!0}),WJ0(i,{readable:t,writable:u},function(c){if(c)return l(c);n=!0,l()});var f=!1;return function(c){if(n)return;if(f)return;if(f=!0,jJ0(i))return i.close(da);if(SJ0(i))return i.abort();if(Jyi(i.destroy))return i.destroy();l(c||Error("stream was destroyed"))}},YUu=function(i){i()},bJ0=function(i,t){return i.pipe(t)},KJ0=function(){var i=Array.prototype.slice.call(arguments),t=Jyi(i[i.length-1]||da)&&i.pop()||da;if(Array.isArray(i[0]))i=i[0];if(i.length<2)throw Error("pump requires two streams per minimum");var u,l=i.map(function(n,f){var c=f<i.length-1,$=f>0;return zJ0(n,c,$,function(d){if(!u)u=d;if(d)l.forEach(YUu);if(c)return;l.forEach(YUu),t(u)})});return i.reduce(bJ0)};AUu.exports=KJ0});var RUu=W((eJ0)=>{var WUu=JUu(),kUu=GUu(),jUu=Ei("fs"),P1=Ei("path"),_a=(global.Bare?global.Bare.platform:process.platform)==="win32";eJ0.pack=function(t,u){if(!t)t=".";if(!u)u={};let l=u.fs||jUu,n=u.ignore||u.filter||ga,f=u.mapStream||KUu,c=LJ0(l,u.dereference?l.stat:l.lstat,t,n,u.entries,u.sort),$=u.strict!==!1,d=typeof u.umask==="number"?~u.umask:~SUu(),_=u.pack||WUu.pack(),g=u.finish||ga,h=u.map||ga,E=typeof u.dmode==="number"?u.dmode:0,v=typeof u.fmode==="number"?u.fmode:0;if(u.strip)h=HUu(h,u.strip);if(u.readable)E|=parseInt(555,8),v|=parseInt(444,8);if(u.writable)E|=parseInt(333,8),v|=parseInt(222,8);O();function r(y,X){l.readlink(P1.join(t,y),function(N,U){if(N)return _.destroy(N);X.linkname=Wut(U),_.entry(X,O)})}function x(y,X,N){if(_.destroyed)return;if(y)return _.destroy(y);if(!X){if(u.finalize!==!1)_.finalize();return g(_)}if(N.isSocket())return O();let U={name:Wut(X),mode:(N.mode|(N.isDirectory()?E:v))&d,mtime:N.mtime,size:N.size,type:"file",uid:N.uid,gid:N.gid};if(N.isDirectory())return U.size=0,U.type="directory",U=h(U)||U,_.entry(U,O);if(N.isSymbolicLink())return U.size=0,U.type="symlink",U=h(U)||U,r(X,U);if(U=h(U)||U,!N.isFile()){if($)return _.destroy(Error("unsupported type for "+X));return O()}let J=_.entry(U,O),F=f(l.createReadStream(P1.join(t,X),{start:0,end:U.size>0?U.size-1:U.size}),U);F.on("error",function(Q){J.destroy(Q)}),kUu(F,J)}function O(y){if(y)return _.destroy(y);c(x)}return _};function HJ0(i){return i.length?i[i.length-1]:null}function RJ0(){return!global.Bare&&process.getuid?process.getuid():-1}function SUu(){return!global.Bare&&process.umask?process.umask():0}eJ0.extract=function(t,u){if(!t)t=".";if(!u)u={};t=P1.resolve(t);let l=u.fs||jUu,n=u.ignore||u.filter||ga,f=u.mapStream||KUu,c=u.chown!==!1&&!_a&&RJ0()===0,$=u.extract||WUu.extract(),d=[],_=new Date,g=typeof u.umask==="number"?~u.umask:~SUu(),h=u.strict!==!1,E=u.validateSymlinks!==!1,v=u.map||ga,r=typeof u.dmode==="number"?u.dmode:0,x=typeof u.fmode==="number"?u.fmode:0;if(u.strip)v=HUu(v,u.strip);if(u.readable)r|=parseInt(555,8),x|=parseInt(444,8);if(u.writable)r|=parseInt(333,8),x|=parseInt(222,8);if($.on("entry",O),u.finish)$.on("finish",u.finish);return $;function O(J,F,Q){J=v(J)||J,J.name=Wut(J.name);let B=P1.join(t,P1.join("/",J.name));if(n(B,J))return F.resume(),Q();let Y=P1.join(B,".")===P1.join(t,".")?t:P1.dirname(B);bUu(l,Y,P1.join(t,"."),function(M,p){if(M)return Q(M);if(!p)return Q(Error(Y+" is not a valid path"));if(J.type==="directory")return d.push([B,J.mtime]),U(B,{fs:l,own:c,uid:J.uid,gid:J.gid,mode:J.mode},H);U(Y,{fs:l,own:c,uid:J.uid,gid:J.gid,mode:493},function(s){if(s)return Q(s);switch(J.type){case"file":return z();case"link":return k();case"symlink":return j()}if(h)return Q(Error("unsupported type for "+B+" ("+J.type+")"));F.resume(),Q()})});function H(M){if(M)return Q(M);X(B,J,function(p){if(p)return Q(p);if(_a)return Q();N(B,J,Q)})}function j(){if(_a)return Q();l.unlink(B,function(){let M=P1.resolve(P1.dirname(B),J.linkname);if(!a(M)&&E)return Q(Error(B+" is not a valid symlink"));zUu(l,M,P1.join(t,"."),function(p,s){if(p)return Q(p);if(!s&&E)return Q(Error(B+" is not a valid symlink"));l.symlink(J.linkname,B,H)})})}function k(){if(_a)return Q();l.unlink(B,function(){let M=P1.join(t,P1.join("/",J.linkname));l.realpath(M,function(p,s){if(p||!a(s))return Q(Error(B+" is not a valid hardlink"));l.link(s,B,function($i){if($i&&$i.code==="EPERM"&&u.hardlinkAsFilesFallback)return F=l.createReadStream(s),z();H($i)})})})}function a(M){return M===t||M.startsWith(t+P1.sep)}function z(){let M=l.createWriteStream(B),p=f(F,J);M.on("error",function(s){p.destroy(s)}),kUu(p,M,function(s){if(s)return Q(s);M.on("close",H)})}}function y(J,F){let Q;while((Q=HJ0(d))&&J.slice(0,Q[0].length)!==Q[0])d.pop();if(!Q)return F();l.utimes(Q[0],_,Q[1],F)}function X(J,F,Q){if(u.utimes===!1)return Q();if(F.type==="directory")return l.utimes(J,_,F.mtime,Q);if(F.type==="symlink")return y(J,Q);l.utimes(J,_,F.mtime,function(B){if(B)return Q(B);y(J,Q)})}function N(J,F,Q){let B=F.type==="symlink",Y=B?l.lchmod:l.chmod,H=B?l.lchown:l.chown;if(!Y)return Q();let j=(F.mode|(F.type==="directory"?r:x))&g;if(H&&c)H.call(l,J,F.uid,F.gid,k);else k(null);function k(a){if(a)return Q(a);if(!Y)return Q();Y.call(l,J,j,Q)}}function U(J,F,Q){l.stat(J,function(B){if(!B)return Q(null);if(B.code!=="ENOENT")return Q(B);l.mkdir(J,{mode:F.mode,recursive:!0},function(Y,H){if(Y)return Q(Y);N(J,F,Q)})})}};function zUu(i,t,u,l){if(t===u)return l(null,!0);if(!t.startsWith(u+P1.sep))return l(null,!1);i.lstat(t,function(n,f){if(n&&n.code!=="ENOENT"&&n.code!=="EPERM")return l(n);if(n||!f.isSymbolicLink())return zUu(i,P1.join(t,".."),u,l);l(null,!1)})}function bUu(i,t,u,l){if(t===u)return l(null,!0);i.lstat(t,function(n,f){if(n&&n.code!=="ENOENT"&&n.code!=="EPERM")return l(n);if(n||f.isDirectory())return bUu(i,P1.join(t,".."),u,l);l(null,!1)})}function ga(){}function KUu(i){return i}function Wut(i){return _a?i.replace(/\\/g,"/").replace(/[:?<>|]/g,"_"):i}function LJ0(i,t,u,l,n,f){if(!n)n=["."];let c=n.slice(0);return function(d){if(!c.length)return d(null);let _=c.shift(),g=P1.join(u,_);t.call(i,g,function(h,E){if(h)return d(n.indexOf(_)===-1&&h.code==="ENOENT"?null:h);if(!E.isDirectory())return d(null,_,E);i.readdir(g,function(v,r){if(v)return d(v);if(f)r.sort();for(let x=0;x<r.length;x++)if(!l(P1.join(u,_,r[x])))c.push(P1.join(_,r[x]));d(null,_,E)})})}}function HUu(i,t){return function(u){u.name=u.name.split("/").slice(t).join("/");let l=u.linkname;if(l&&(u.type==="link"||P1.isAbsolute(l)))u.linkname=l.split("/").slice(t).join("/");return i(u)}}});var qJ0,VJ0;var LUu=w(()=>{Out();qJ0=S(PJu(),1),VJ0=S(RUu(),1)});var Uyi=()=>{};var eUu=w(()=>{SOi()});var CUu=w(()=>{gyi();_yi();Uyi()});var MUu=()=>{};var qUu=()=>{};var kut=w(()=>{hJu();xut();gyi();xJu();rut();Out();DJu();OJu();yJu();XJu();wut();NJu();LUu();Uyi();eUu();CUu();MUu();qUu();Uyi()});var V1,hc,RY,ha;var Ea=w(()=>{V1={CLAIM_API_GROUP:"extensions.agents.x-k8s.io",CLAIM_API_VERSION:"v1alpha1",CLAIM_PLURAL:"sandboxclaims",SANDBOX_API_GROUP:"agents.x-k8s.io",SANDBOX_API_VERSION:"v1alpha1",SANDBOX_PLURAL:"sandboxes",POD_NAME_ANNOTATION:"agents.x-k8s.io/pod-name"};hc=class hc extends Error{cause;constructor(i,t){super(i);if(this.name="SandboxError",this.cause=t,t instanceof Error&&t.stack)this.stack=`${this.stack}
107887
107887
  Caused by: ${t.stack}`}};RY=class RY extends hc{constructor(i,t){super(i,t);this.name="SandboxTimeoutError"}};ha=class ha extends hc{constructor(i,t){super(i,t);this.name="SandboxAlreadyExistsError"}}});async function aJ0(i){let t=i.getCurrentCluster();if(!t)throw new hc("No active cluster in kubeconfig");let u={};await i.applyToHTTPSOptions(u);let l={},n=u.headers??{};for(let[f,c]of Object.entries(n))if(Array.isArray(c))l[f]=c.join(", ");else if(c!==void 0)l[f]=String(c);if(typeof u.auth==="string"&&!l.Authorization)l.Authorization=`Basic ${Buffer.from(u.auth).toString("base64")}`;return{server:t.server.replace(/\/+$/,""),headers:l,tls:{cert:jut(u.cert),key:jut(u.key),ca:jut(u.ca),rejectUnauthorized:t.skipTLSVerify?!1:void 0}}}function jut(i){if(i==null)return;if(typeof i==="string")return i;if(Buffer.isBuffer(i))return i.toString("utf8");return String(i)}async function LY(i,t){let u=await aJ0(i),l={...u.headers,...t.headers};if(t.method==="PATCH")l["content-type"]=t.patchType==="apply"?"application/apply-patch+yaml":t.patchType==="strategic-merge"?"application/strategic-merge-patch+json":"application/merge-patch+json";else if(t.body!==void 0&&!("content-type"in l))l["content-type"]="application/json";let n={method:t.method,headers:l,body:t.body===void 0?void 0:JSON.stringify(t.body),signal:t.signal,tls:u.tls,...t.stream?{timeout:!1}:{}};return fetch(`${u.server}${t.path}`,n)}async function Sut(i){try{return await i.json()}catch{return null}}async function zut(i,t){if(i.ok)return;let u=await Sut(i),l=u?.message??`${t} failed: ${i.status} ${i.statusText}`;throw new VUu(i.status,u,l)}async function va(i,t,u,l,n="none"){try{let f=await LY(i,t);if(f.status===404)return null;if(await zut(f,u),n==="json")return await f.json();return null}catch(f){throw new hc(l,f)}}async function ra(i,t,u){let l=`${aUu}/${encodeURIComponent(t)}/${V1.CLAIM_PLURAL}`,n;try{n=await LY(i,{method:"POST",path:l,body:u})}catch(_){let g=_ instanceof Error?_.message:String(_);throw console.warn(`[agent-sandbox/client] createSandboxClaim ${u.metadata.name} transport error: ${g}`),new hc(`Failed to create SandboxClaim: ${u.metadata.name} (transport error: ${g})`,_)}if(n.ok)return;let f=await Sut(n),c=f?.reason?` ${f.reason}`:"",$=f?.message??n.statusText,d=`Failed to create SandboxClaim: ${u.metadata.name} (${n.status}${c}: ${$})`;if(console.warn(`[agent-sandbox/client] createSandboxClaim ${u.metadata.name} rejected: status=${n.status} reason=${f?.reason??"<none>"} message=${$}`),n.status===409)throw new ha(d);throw new hc(d)}async function Fyi(i,t,u,l=60000){let n=Date.now()+l,f=500,c;while(!0){let $=await P2(i,t,u).catch(()=>{return});if(!$)return;if(c=$,Date.now()>=n){let d=c.metadata?.finalizers??[],_=c.metadata?.deletionTimestamp??"<unknown>";throw new RY(`SandboxClaim ${u} still terminating after ${l}ms (deletionTimestamp=${_}, finalizers=[${d.join(", ")}])`)}await new Promise((d)=>setTimeout(d,500))}}function but(i,t){return`${aUu}/${encodeURIComponent(i)}/${V1.CLAIM_PLURAL}/${encodeURIComponent(t)}`}async function mUu(i,t,u,l){await va(i,{method:"PATCH",path:but(t,u),patchType:"merge",body:{spec:{lifecycle:{shutdownPolicy:"Delete",shutdownTime:l}}}},"patchSandboxClaimShutdown",`Failed to patch SandboxClaim shutdownTime: ${u}`)}async function dD(i,t,u){await va(i,{method:"DELETE",path:but(t,u)},"deleteSandboxClaim",`Failed to delete SandboxClaim: ${u}`)}async function P2(i,t,u){return await va(i,{method:"GET",path:but(t,u)},"getSandboxClaim",`Failed to get SandboxClaim: ${u}`,"json")??void 0}async function oUu(i,t,u,l=60){let n=Date.now()+l*1000,f=200;while(Date.now()<n){let $=(await P2(i,t,u).catch(()=>{return}))?.status?.sandbox?.name;if($)return $;await new Promise((d)=>setTimeout(d,200))}throw new RY(`SandboxClaim ${u} did not record an adopted Sandbox (status.sandbox.name) within ${l}s`)}function Kut(i,t){return`${mJ0}/${encodeURIComponent(i)}/${iFu}/${encodeURIComponent(t)}`}async function Tyi(i,t,u){let l=new URLSearchParams({fieldManager:uFu,force:"true"}),n=`${Kut(t,u.metadata.name)}?${l}`;try{let f=await LY(i,{method:"PATCH",path:n,patchType:"apply",body:u});await zut(f,"applyHttpRoute")}catch(f){throw new hc(`Failed to apply HTTPRoute: ${u.metadata.name}`,f)}}async function Iyi(i,t,u){await va(i,{method:"DELETE",path:Kut(t,u)},"deleteHttpRoute",`Failed to delete HTTPRoute: ${u}`)}async function tFu(i,t,u){return await va(i,{method:"GET",path:Kut(t,u)},"getHttpRoute",`Failed to get HTTPRoute: ${u}`,"json")??void 0}async function lFu(i,t,u,l){let n={apiVersion:"v1",kind:"Service",metadata:{name:u},spec:{ports:[{name:l.name,port:l.port,targetPort:l.targetPort,protocol:l.protocol??"TCP"}]}},f=new URLSearchParams({fieldManager:uFu,force:"true"}),c=`/api/v1/namespaces/${encodeURIComponent(t)}/services/${encodeURIComponent(u)}?${f}`;try{let $=await LY(i,{method:"PATCH",path:c,patchType:"apply",body:n});await zut($,"ensureServicePort")}catch($){throw new hc(`Failed to apply Service ports: ${u}`,$)}}function Zyi(i,t,u,l=180){let n=`/apis/${V1.SANDBOX_API_GROUP}/${V1.SANDBOX_API_VERSION}/namespaces/${encodeURIComponent(t)}/${V1.SANDBOX_PLURAL}?watch=true&fieldSelector=${encodeURIComponent(`metadata.name=${u}`)}`,{resolve:f,reject:c,promise:$}=Promise.withResolvers(),d=new AbortController,_=!1,g=setTimeout(()=>{if(_)return;_=!0,d.abort(),c(new RY(`Sandbox did not become ready within ${l} seconds`))},l*1000),h=(E)=>{if(_)return;_=!0,clearTimeout(g),d.abort(),E()};return(async()=>{let E;try{E=await LY(i,{method:"GET",path:n,signal:d.signal,headers:{accept:"application/json"},stream:!0})}catch(v){h(()=>c(new hc("Failed to start watch for sandbox readiness",v)));return}if(!E.ok||!E.body){let v=await Sut(E).catch(()=>null);h(()=>c(new hc(`Watch handshake failed (${E.status}): ${v?.message??E.statusText}`)));return}try{for await(let v of Hut(E.body)){if(_)return;if(v.type==="ERROR"){let X=v.object;h(()=>c(new hc(`Watch stream error while waiting for sandbox: ${X.message??"unknown"}`)));return}if(v.type!=="ADDED"&&v.type!=="MODIFIED")continue;let r=v.object;if(!r.status?.conditions?.find((X)=>X.type==="Ready"&&X.status==="True"))continue;let O=r.metadata?.name;if(!O){h(()=>c(new hc("Sandbox metadata or name is missing")));return}let y=r.metadata?.annotations?.[V1.POD_NAME_ANNOTATION]??O;h(()=>f({sandboxName:O,podName:y}));return}h(()=>c(new hc("Watch stream closed before sandbox became ready")))}catch(v){if(_)return;if(v instanceof Error&&(v.name==="AbortError"||d.signal.aborted))return;h(()=>c(new hc("Watch stream error while waiting for sandbox",v)))}})(),$}async function*Hut(i){let t=i.getReader(),u=new TextDecoder,l="";try{while(!0){let{value:f,done:c}=await t.read();if(c)break;l+=u.decode(f,{stream:!0});let $;while(($=l.indexOf(`
107888
- `))>=0){let d=l.slice(0,$).trim();if(l=l.slice($+1),!d)continue;yield JSON.parse(d)}}let n=l.trim();if(n)yield JSON.parse(n)}finally{t.releaseLock()}}var VUu,aUu,sUu="gateway.networking.k8s.io",pUu="v1",iFu="httproutes",mJ0,wa,uFu="mesh-sandbox-runner";var Byi=w(()=>{Ea();VUu=class VUu extends Error{status;body;constructor(i,t,u){super(u);this.status=i;this.body=t;this.name="KubeHttpError"}};aUu=`/apis/${V1.CLAIM_API_GROUP}/${V1.CLAIM_API_VERSION}/namespaces`;mJ0=`/apis/${sUu}/${pUu}/namespaces`;wa={API_GROUP:sUu,API_VERSION:pUu,PLURAL:iFu}});async function*cFu(i){let t=i.now??(()=>Date.now()),u=t(),l=i.schedulingTimeoutMs??pJ0,n={pod:{},sandbox:{},events:{hasPulling:!1,hasPulled:!1},startedAt:u},f=[],c=null,$=!1,d=(X)=>{if($)return;if(c){let N=c;c=null,N(X)}else f.push(X)},_=()=>{if(f.length>0)return Promise.resolve(f.shift());if($)return Promise.resolve(null);return new Promise((X)=>{c=X})},g=()=>{if($)return;if($=!0,c){let X=c;c=null,X(null)}},h=new AbortController,E=()=>{h.abort(),g()};if(i.signal)if(i.signal.aborted)h.abort(),g();else i.signal.addEventListener("abort",E,{once:!0});let v=Math.max(0,l-(t()-u)),r=setTimeout(()=>d("tick"),v+100),x,O=new Promise((X)=>{x=X}),y=Promise.allSettled([iU0(i.kc,i.namespace,i.claimName,h.signal,n,d,t,x),uU0(i.kc,i.namespace,i.claimName,h.signal,n,d),lU0(i.kc,i.namespace,i.claimName,O,h.signal,n,d,t)]);try{let X=null,N=-1,U=nFu(n,l,t);if(X=Lut(U),!Rut(U))N=fFu(U);if(yield U,Rut(U))return;while(!$){if(await _()===null)break;let F=nFu(n,l,t);if(Rut(F)){let Y=Lut(F);if(Y!==X)X=Y,yield F;return}let Q=fFu(F);if(Q<N)continue;let B=Lut(F);if(B!==X)X=B,N=Q,yield F}}finally{if(clearTimeout(r),h.abort(),i.signal)i.signal.removeEventListener("abort",E);g(),await y.catch(()=>{})}}function nFu(i,t,u){let{pod:l,sandbox:n,events:f,startedAt:c}=i;if(n.ready)return{kind:"ready"};let $=l.containerWaitingReason;if($==="ImagePullBackOff"||$==="ErrImagePull")return{kind:"failed",reason:"image-pull-backoff",message:"Sandbox image failed to download. The cluster may be missing pull credentials or the image tag may not exist."};if($==="CrashLoopBackOff")return{kind:"failed",reason:"crash-loop-backoff",message:"Sandbox crashed during startup and is now in CrashLoopBackOff. Check pod logs."};if(!l.scheduled&&f.lastFailedSchedulingAt!==void 0&&u()-c>t)return{kind:"failed",reason:"scheduling-timeout",message:f.failedSchedulingMessage??`Pod could not be scheduled within ${Math.round(t/1000)}s.`};if(l.containerRunning&&!l.containerReady)return{kind:"warming-daemon",since:c};if(f.hasPulling&&!f.hasPulled)return{kind:"pulling-image",since:c};if($==="ContainerCreating"||$==="PodInitializing"||l.scheduled&&!l.containerRunning)return{kind:"starting-container",since:c};if(l.scheduledFalseReason==="Unschedulable"||f.lastFailedSchedulingAt!==void 0&&!l.scheduled)return{kind:"waiting-for-capacity",since:c,message:f.failedSchedulingMessage??l.scheduledFalseMessage,nodeClaim:f.nominatedNodeClaim};return{kind:"claiming",since:c}}function Rut(i){return i.kind==="ready"||i.kind==="failed"}function fFu(i){switch(i.kind){case"claiming":return 0;case"waiting-for-capacity":return 1;case"pulling-image":return 2;case"starting-container":return 3;case"warming-daemon":return 4;case"ready":case"failed":return 99}}function Lut(i){switch(i.kind){case"claiming":case"pulling-image":case"starting-container":case"warming-daemon":return i.kind;case"waiting-for-capacity":return`waiting-for-capacity:${i.message??""}:${i.nodeClaim??""}`;case"ready":return"ready";case"failed":return`failed:${i.reason}:${i.message}`}}async function iU0(i,t,u,l,n,f,c,$){let d=`/api/v1/namespaces/${encodeURIComponent(t)}/pods?watch=true&labelSelector=${encodeURIComponent(`${oJ0}=${u}`)}`;return Qyi({kc:i,path:d,signal:l,label:`pod/${u}`,onEvent:(_)=>{if(_.type!=="ADDED"&&_.type!=="MODIFIED")return;let g=_.object;if(g.metadata?.name)$(g.metadata.name);tU0(g,n,c),f("pod")}})}function tU0(i,t,u){let n=(i.status?.conditions??[]).find((c)=>c.type==="PodScheduled");if(n?.status==="True")t.pod.scheduled=!0,t.pod.scheduledFalseReason=void 0,t.pod.scheduledFalseMessage=void 0;else if(n?.status==="False")t.pod.scheduled=!1,t.pod.scheduledFalseReason=n.reason,t.pod.scheduledFalseMessage=n.message;let f=(i.status?.containerStatuses??[]).find((c)=>c.name===sJ0);if(f)t.pod.containerWaitingReason=f.state?.waiting?.reason,t.pod.containerRunning=!!f.state?.running,t.pod.containerReady=f.ready===!0}async function uU0(i,t,u,l,n,f){let c=`/apis/${V1.CLAIM_API_GROUP}/${V1.CLAIM_API_VERSION}/namespaces/${encodeURIComponent(t)}/${V1.CLAIM_PLURAL}?watch=true&fieldSelector=${encodeURIComponent(`metadata.name=${u}`)}`;return Qyi({kc:i,path:c,signal:l,label:`sandboxclaim/${u}`,onEvent:($)=>{if($.type!=="ADDED"&&$.type!=="MODIFIED")return;let _=$.object.status?.conditions?.find((g)=>g.type==="Ready");if(!_)return;if(_.status==="True")n.sandbox.ready=!0,n.sandbox.notReadyReason=void 0,n.sandbox.notReadyMessage=void 0;else n.sandbox.ready=!1,n.sandbox.notReadyReason=_.reason,n.sandbox.notReadyMessage=_.message;f("sandbox")}})}async function lU0(i,t,u,l,n,f,c,$){let d=await Promise.race([l,new Promise((g)=>{if(n.aborted){g(u);return}n.addEventListener("abort",()=>g(u),{once:!0})})]);if(n.aborted)return;let _=`/api/v1/namespaces/${encodeURIComponent(t)}/events?watch=true&fieldSelector=${encodeURIComponent(`involvedObject.name=${d},involvedObject.kind=Pod`)}`;return Qyi({kc:i,path:_,signal:n,label:`events/${u}`,onEvent:(g)=>{if(g.type!=="ADDED"&&g.type!=="MODIFIED")return;let h=g.object,E=h.reason;if(!E)return;switch(E){case"Pulling":f.events.hasPulling=!0;break;case"Pulled":f.events.hasPulling=!0,f.events.hasPulled=!0;break;case"FailedScheduling":f.events.lastFailedSchedulingAt=$(),f.events.failedSchedulingMessage=h.message;break;case"Nominated":{let v=h.message?.match(/nodeclaim\/([\w-]+)/);if(v)f.events.nominatedNodeClaim=v[1];break}default:return}c("event")}})}async function $Fu(i){let{kc:t,namespace:u,labelSelector:l,signal:n,onDelete:f}=i,c=`/apis/${V1.CLAIM_API_GROUP}/${V1.CLAIM_API_VERSION}/namespaces/${encodeURIComponent(u)}/${V1.CLAIM_PLURAL}?watch=true&labelSelector=${encodeURIComponent(l)}`;return Qyi({kc:t,path:c,signal:n,label:"sandboxclaim-reaper",onEvent:($)=>{if($.type!=="DELETED")return;let d=$.object.metadata?.name;if(d)f(d)}})}async function Qyi(i){let{kc:t,path:u,signal:l,label:n,onEvent:f}=i,c=0;while(!l.aborted){try{let d=await LY(t,{method:"GET",path:u,signal:l,headers:{accept:"application/json"},stream:!0});if(!d.ok||!d.body){try{await d.body?.cancel()}catch{}throw Error(`watch handshake failed: ${d.status} ${d.statusText}`)}c=0;for await(let _ of Hut(d.body)){if(l.aborted)return;try{f(_)}catch(g){console.warn(`[lifecycle-watcher] ${n} onEvent threw: ${g instanceof Error?g.message:String(g)}`)}}}catch(d){if(l.aborted)return;let _=d instanceof Error?d.message:String(d);console.warn(`[lifecycle-watcher] ${n} watch ended: ${_}`)}if(l.aborted)return;let $=Nn(5000,250,c,2,0);c+=1,await Vu($,{signal:l}).catch(()=>{})}}var oJ0="studio.decocms.com/sandbox-handle",sJ0="sandbox",pJ0=300000;var dFu=w(()=>{Rf();Ea();Byi()});import{createHash as nU0,randomBytes as fU0,randomUUID as cU0}from"crypto";import*as EFu from"net";import{PassThrough as $U0}from"stream";function dU0(i){if(i instanceof Error)return i.message;if(i&&typeof i==="object"){let t=i;if(t.error instanceof Error)return t.error.message;if(typeof t.message==="string"&&t.message)return t.message}return String(i)}class aut{kind=d_;records=new Map;inflight=new p_i;stateStore;previewUrlPattern;kubeConfig;portForward;namespace;sandboxTemplateName;envName;tokenGenerator;idleTtlMs;metrics;previewGateway;sentinelToken;closed=!1;claimWatchAbort=new AbortController;constructor(i={}){this.stateStore=i.stateStore??null,this.previewUrlPattern=i.previewUrlPattern??null,this.kubeConfig=i.kubeConfig??OU0(),this.portForward=new yut(this.kubeConfig),this.namespace=i.namespace??_U0,this.sandboxTemplateName=i.sandboxTemplateName??gU0,this.envName=FU0(i.envName),this.tokenGenerator=i.tokenGenerator??(()=>fU0(EU0).toString("hex")),this.idleTtlMs=i.idleTtlMs??rU0,this.metrics=i.meter?DU0(i.meter):null,this.previewGateway=i.previewGateway&&i.previewUrlPattern?{...i.previewGateway}:null;let t=i.sentinelToken?.trim()??"";this.sentinelToken=t.length>0?t:null,this.startClaimReaper()}startClaimReaper(){let i=["app.kubernetes.io/managed-by=studio","app.kubernetes.io/name=studio-sandbox",...this.envName?[`${k6.env}=${this.envName}`]:[]].join(",");$Fu({kc:this.kubeConfig,namespace:this.namespace,labelSelector:i,signal:this.claimWatchAbort.signal,onDelete:(t)=>this.invalidateRecord(t)})}async ensure(i,t={}){let u=a5(i,t.branch??t.repo?.branch??null);return this.inflight.run(u,()=>igi(this.stateStore,i,d_,(l)=>this.ensureLocked(i,u,t,l)))}async delete(i){let t=await this.getRecord(i);if(this.records.delete(i),t)this.closeForwarder(t.daemonForward),this.metrics?.active.add(-1,qut(t.tenant));if(await this.deleteHttpRouteIfManaged(i).catch((u)=>{console.warn(`[${S4}] HTTPRoute delete failed for ${i}: ${u instanceof Error?u.message:String(u)}`)}),await dD(this.kubeConfig,this.namespace,i),this.stateStore)if(t)await this.stateStore.delete(t.id,d_);else await this.stateStore.deleteByHandle(d_,i)}async alive(i){return await P2(this.kubeConfig,this.namespace,i)!==void 0}watchClaimLifecycle(i,t){return cFu({kc:this.kubeConfig,namespace:this.namespace,claimName:i,signal:t})}async getPreviewUrl(i){let t=await this.getRecord(i);if(!t)return null;return this.composePreviewUrl(t)}async proxyDaemonRequest(i,t,u){let l=await this.getRecord(i);if(!l&&this.previewUrlPattern&&this.stateStore){let d=await this.stateStore.getByHandle(d_,i),_=d?.state,g=_?.token;if(d&&g){let E=`http://${_?.adoptedSandboxName??i}.${this.namespace}.svc.cluster.local:${_D}`;try{let v=await LH(E,g,t,u);if(v.status!==404)return v;try{await v.body?.cancel()}catch{}}catch{}}}if(!l)l=await this.resurrectByHandle(i);if(!l)return new Response(JSON.stringify({error:"sandbox not found"}),{status:404,headers:{"content-type":"application/json"}});let n=l,f=performance.now(),c=0,$=!(u.body instanceof ReadableStream);try{let d=await LH(l.daemonUrl,l.token,t,u);if(d.status===401&&$){this.invalidateRecord(i);let _=await this.getRecord(i).catch(()=>null)??await this.resurrectByHandle(i).catch(()=>null);if(_)n=_,d=await LH(_.daemonUrl,_.token,t,u)}return c=d.status,d}catch(d){if(!$)throw d;this.invalidateRecord(i);let _=await this.resurrectByHandle(i)??await this.getRecord(i).catch(()=>null);if(!_)throw d;n=_;let g=await LH(_.daemonUrl,_.token,t,u);return c=g.status,g}finally{this.recordProxyDuration("daemon",c,n,performance.now()-f)}}async adoptLiveClaim(i,t){if(this.records.has(t))return!0;let u=await P2(this.kubeConfig,this.namespace,t).catch(()=>{return});if(!u||u.metadata?.deletionTimestamp)return!1;return await this.inflight.run(t,async()=>{let n=this.records.get(t);if(n)return this.toSandbox(n);let f=await this.adopt(i,t,u);if(!f)throw Error(`cannot adopt live claim ${t}`);return igi(this.stateStore,i,d_,(c)=>this.finish(f,c,!0,!0,"adopt"))}).catch(()=>null)!=null}async resolvePreviewUpstreamUrl(i){if(this.previewUrlPattern)return`http://${await this.resolveServiceNameForHandle(i)}.${this.namespace}.svc.cluster.local:${_D}`;let t=await this.getRecord(i);if(t)return t.daemonUrl;let u=await this.resurrectByHandle(i);return u?u.daemonUrl:null}async resolveServiceNameForHandle(i){let t=this.records.get(i);if(t)return t.adoptedSandboxName;if(this.stateStore){let l=(await this.stateStore.getByHandle(d_,i).catch(()=>null))?.state?.adoptedSandboxName;if(l)return l}return i}async proxyPreviewRequest(i,t){let u=performance.now(),l=this.records.get(i)??null,n=0;try{let f=await this.resolvePreviewUpstreamUrl(i);if(!f){n=404;let r=Cut(404,{error:"sandbox not found"});return r.headers.set(CY,"1"),r}let c=new URL(t.url);if((c.pathname==="/_sandbox"||c.pathname.startsWith("/_sandbox/")||c.pathname==="/_decopilot_vm"||c.pathname.startsWith("/_decopilot_vm/"))&&t.method!=="GET")return n=404,Cut(404,{error:"not found"});let d=(r)=>`${r}${c.pathname}${c.search}`,_=new Headers(t.headers);for(let r of wU0)_.delete(r);let g=t.method!=="GET"&&t.method!=="HEAD",h={method:t.method,headers:_,body:g?t.body:void 0,redirect:"manual",signal:t.signal,duplex:g?"half":void 0},E;try{E=await fetch(d(f),h)}catch(r){let x=`${f}${c.pathname}`;if(console.warn(`[${S4}] preview fetch to ${x} failed: ${r instanceof Error?r.message:String(r)}`),t.method==="GET"||t.method==="HEAD"){if(this.invalidateRecord(i),await this.resurrectByHandle(i).catch(()=>null)){let X=await this.resolvePreviewUpstreamUrl(i);if(X)try{E=await fetch(d(X),h);let N=new Headers;for(let[U,J]of E.headers.entries())if(!_Fu.includes(U.toLowerCase()))N.set(U,J);return n=E.status,new Response(E.body,{status:E.status,statusText:E.statusText,headers:N})}catch(N){console.warn(`[${S4}] preview fetch retry to ${x} failed: ${N instanceof Error?N.message:String(N)}`)}}}else this.invalidateRecord(i);n=502;let O=Cut(502,{error:"sandbox daemon unreachable"});return O.headers.set(CY,"1"),O}let v=new Headers;for(let[r,x]of E.headers.entries())if(!_Fu.includes(r.toLowerCase()))v.set(r,x);return n=E.status,new Response(E.body,{status:E.status,statusText:E.statusText,headers:v})}finally{this.recordProxyDuration("preview",n,l,performance.now()-u,i)}}async ensureLocked(i,t,u,l){if(u.image)console.warn(`[${S4}] opts.image ignored (template ${this.sandboxTemplateName} pins image): got ${u.image}`);if(l){let c=await l.get(i,d_);if(c){let $=await this.rehydrate(i,t,c);if($)return this.finish($,l,!1,!0,"resume");await l.delete(i,d_)}}let n=await P2(this.kubeConfig,this.namespace,t).catch(()=>{return});if(n)if(n.metadata?.deletionTimestamp)await Fyi(this.kubeConfig,this.namespace,t).catch((c)=>{console.warn(`[${S4}] wait for terminating claim ${t} failed: ${c instanceof Error?c.message:String(c)}`)});else{let c=await this.adopt(i,t,n).catch(($)=>{return console.warn(`[${S4}] adopt ${t} failed, recreating: ${$ instanceof Error?$.message:String($)}`),null});if(c)return this.finish(c,l,!0,!0,"adopt");await dD(this.kubeConfig,this.namespace,t).catch(()=>{}),await Fyi(this.kubeConfig,this.namespace,t).catch(($)=>{console.warn(`[${S4}] wait for deleted claim ${t} failed: ${$ instanceof Error?$.message:String($)}`)})}let f=await this.provision(i,t,u);return this.finish(f,l,!0,!1,"fresh")}async finish(i,t,u,l,n){let f=this.records.get(i.handle),c=f!==void 0;if(f&&f.daemonForward!==i.daemonForward)this.closeForwarder(f.daemonForward);if(this.records.set(i.handle,i),u)await this.persist(t,i);if(l)await mUu(this.kubeConfig,this.namespace,i.handle,this.computeShutdownTime()).catch(($)=>console.warn(`[${S4}] TTL refresh failed for ${i.handle}: ${$ instanceof Error?$.message:String($)}`));if(this.metrics){let $=qut(i.tenant);if(this.metrics.ensureOutcome.add(1,{...$,outcome:n}),!c)this.metrics.active.add(1,$)}return this.toSandbox(i)}buildEnvMap(i,t){let u={},l=[];for(let[n,f]of Object.entries(i.env??{}))if(vU0.has(n))l.push(n);else u[n]=f;if(l.length>0)console.warn(`[${S4}] opts.env keys overlap reserved bootstrap names and were dropped: ${l.join(",")}`);return{...u,DAEMON_TOKEN:t.token,DAEMON_BOOT_ID:t.daemonBootId,APP_ROOT:t.workdir,PROXY_PORT:String(_D)}}buildClaim(i,t,u){let l=this.sentinelToken!==null,n=l?[]:Object.entries(this.buildEnvMap(t,u)).sort(([$],[d])=>$<d?-1:$>d?1:0).map(([$,d])=>({name:$,value:d})),f=ZU0(t),c=Object.keys(f).length>0;return{apiVersion:`${V1.CLAIM_API_GROUP}/${V1.CLAIM_API_VERSION}`,kind:"SandboxClaim",metadata:{name:i,namespace:this.namespace,labels:{"app.kubernetes.io/name":"studio-sandbox","app.kubernetes.io/managed-by":"studio",...this.envName?{[k6.env]:this.envName}:{},...Mut(t.tenant)},...c?{annotations:f}:{}},spec:{sandboxTemplateRef:{name:this.sandboxTemplateName},additionalPodMetadata:{labels:Mut(t.tenant,{[k6.role]:"claimed",[k6.sandboxHandle]:i,...this.envName?{[k6.env]:this.envName}:{}}),...c?{annotations:f}:{}},env:n,warmpool:l?"default":"none",lifecycle:{shutdownPolicy:"Delete",shutdownTime:this.computeShutdownTime()}}}}async provision(i,t,u){let l=this.tokenGenerator(),n=cU0(),f=eut,c=this.buildClaim(t,u,{token:l,daemonBootId:n,workdir:f});try{await ra(this.kubeConfig,this.namespace,c)}catch(E){if(E instanceof ha)await Fyi(this.kubeConfig,this.namespace,t),await ra(this.kubeConfig,this.namespace,c);else throw E}let $;try{$=await oUu(this.kubeConfig,this.namespace,t),await Zyi(this.kubeConfig,this.namespace,$)}catch(E){throw await dD(this.kubeConfig,this.namespace,t).catch(()=>{}),E}try{await this.ensureServicePortForAdoptedSandbox($),await this.ensureHttpRouteForHandle(t,$,u.tenant??null)}catch(E){throw await dD(this.kubeConfig,this.namespace,t).catch(()=>{}),E}let d=await this.openForwarder($,_D,t),_=`http://127.0.0.1:${d.localPort}`,g=this.workloadConfigPayload(u),h=n;try{if(await uli(_),this.sentinelToken!==null){let E=await tli(_);if(E)h=E.bootId;await B8(_,this.sentinelToken,g??{},{rotateToken:l})}else if(g)await B8(_,l,g);if(u.orgFsConfigJson)await eYt(_,l,u.orgFsConfigJson).catch((E)=>console.warn("[org-fs] sidecar config relay failed",E))}catch(E){throw this.closeForwarder(d),await this.deleteHttpRouteIfManaged(t).catch(()=>{}),await dD(this.kubeConfig,this.namespace,t).catch(()=>{}),E}return{id:i,handle:t,adoptedSandboxName:$,token:l,workdir:f,daemonUrl:_,daemonForward:d,workload:u.workload??null,daemonBootId:h,tenant:u.tenant??null,ensureOpts:QU0(u)}}workloadConfigPayload(i){return bit({runtime:i?.workload?.runtime??"node",packageManager:i?.workload?.packageManager?{name:i.workload.packageManager,...i.workload.packageManagerPath?{path:i.workload.packageManagerPath}:{}}:null,repo:i?.repo??null,port:i?.workload?.devPort??hU0,tenant:i?.tenant??void 0})}async rebootstrapDaemon(i,t,u){if(this.sentinelToken===null)return!1;let l=this.workloadConfigPayload(u)??{};try{return await B8(i,this.sentinelToken,l,{rotateToken:t}),!0}catch(n){if(n instanceof ili&&n.status===401)try{return await B8(i,t,l,{rotateToken:t}),!0}catch(f){return console.warn(`[${S4}] re-bootstrap retry with claim token failed: ${f instanceof Error?f.message:String(f)}`),!1}return console.warn(`[${S4}] re-bootstrap failed: ${n instanceof Error?n.message:String(n)}`),!1}}async ensureServicePortForAdoptedSandbox(i){if(!this.previewGateway||!this.previewUrlPattern)return;await lFu(this.kubeConfig,this.namespace,i,{name:"daemon",port:_D,targetPort:_D})}async ensureHttpRouteForHandle(i,t,u){if(!this.previewGateway||!this.previewUrlPattern)return;let l=PU0(this.previewUrlPattern,i);if(!l)throw new hc(`Unable to derive preview hostname for ${i} from pattern: ${this.previewUrlPattern}`);let n={apiVersion:`${wa.API_GROUP}/${wa.API_VERSION}`,kind:"HTTPRoute",metadata:{name:i,namespace:this.namespace,labels:Mut(u??void 0,{[k6.role]:"claimed",[k6.sandboxHandle]:i,"app.kubernetes.io/name":"studio-sandbox","app.kubernetes.io/managed-by":"studio",...this.envName?{[k6.env]:this.envName}:{}})},spec:{parentRefs:[{kind:"Gateway",group:"gateway.networking.k8s.io",name:this.previewGateway.name,namespace:this.previewGateway.namespace}],hostnames:[l],rules:[{backendRefs:[{group:"",kind:"Service",name:t,port:_D}]}]}};await Tyi(this.kubeConfig,this.namespace,n)}async deleteHttpRouteIfManaged(i){if(!this.previewGateway)return;await Iyi(this.kubeConfig,this.namespace,i)}async rehydrate(i,t,u){let l=u.state;if(!l.adoptedSandboxName&&!l.podName||!l.token)return null;let n=await P2(this.kubeConfig,this.namespace,t).catch(()=>{return});if(!n||!gFu(n))return null;let f=n.status?.sandbox?.name??l.adoptedSandboxName??l.podName??t,c=await this.openAndProbeDaemon(f,t);if(!c)return null;if(l.daemonBootId&&l.daemonBootId!==c.bootId){if(this.sentinelToken!==null){if(!await this.rebootstrapDaemon(c.daemonUrl,l.token,l.ensureOpts??null))return this.closeForwarder(c.daemonForward),null}else console.warn(`[${S4}] daemon restart detected (handle=${t}): stored bootId=${l.daemonBootId} live bootId=${c.bootId}`);await this.stateStore?.put(i,d_,{handle:t,state:{...l,daemonBootId:c.bootId}}).catch(($)=>console.warn(`[${S4}] bootId persist failed for ${t}: ${$ instanceof Error?$.message:String($)}`))}return{id:i,handle:t,adoptedSandboxName:f,token:l.token,workdir:l.workdir??eut,daemonUrl:c.daemonUrl,daemonForward:c.daemonForward,workload:l.workload??null,daemonBootId:c.bootId,tenant:l.tenant??null,ensureOpts:l.ensureOpts??null}}async adopt(i,t,u){if(!gFu(u))return null;let l=u.status?.sandbox?.name??t;if(this.sentinelToken!==null)return null;let n=yU0(u);if(!n)return null;let f=await this.openAndProbeDaemon(l,t);if(!f)return null;let c=BU0(u);if(this.previewGateway)await this.ensureServicePortForAdoptedSandbox(l).catch(($)=>{console.warn(`[${S4}] Service port backfill failed for ${t}: ${$ instanceof Error?$.message:String($)}`)}),await this.ensureHttpRouteForHandle(t,l,c).catch(($)=>{console.warn(`[${S4}] HTTPRoute backfill failed for ${t}: ${$ instanceof Error?$.message:String($)}`)});return{id:i,handle:t,adoptedSandboxName:l,token:n,workdir:eut,daemonUrl:f.daemonUrl,daemonForward:f.daemonForward,workload:null,daemonBootId:f.bootId,tenant:c,ensureOpts:null}}async openAndProbeDaemon(i,t){let u=await this.openForwarder(i,_D,t).catch(()=>null);if(!u)return null;let l=`http://127.0.0.1:${u.localPort}`,n=await tli(l);if(!n)return this.closeForwarder(u),null;return{daemonForward:u,daemonUrl:l,bootId:n.bootId}}async getRecord(i){let t=this.records.get(i);if(t)return t;if(!this.stateStore)return null;let u=await this.stateStore.getByHandle(d_,i);if(!u)return null;let l=await this.rehydrate(u.id,i,u);if(l)this.records.set(i,l);return l}async resurrectByHandle(i){if(!this.stateStore)return null;let t=await this.stateStore.getByHandle(d_,i);if(!t)return null;let u=t.state.ensureOpts;if(!u)return null;return await this.ensure(t.id,u),this.records.get(i)??null}invalidateRecord(i){let t=this.records.get(i);if(!t)return;this.records.delete(i),this.closeForwarder(t.daemonForward)}recordProxyDuration(i,t,u,l,n){if(!this.metrics)return;this.metrics.proxyDurationMs.record(l,{...qut(u?.tenant??null),source:i,sandbox_handle:u?.handle??n??"",status_code:t||0})}composePreviewUrl(i){if(this.previewUrlPattern)return tgi(this.previewUrlPattern,i.handle);return`http://127.0.0.1:${i.daemonForward.localPort}/`}toSandbox(i){return{handle:i.handle,workdir:i.workdir,previewUrl:this.composePreviewUrl(i)}}async persist(i,t){if(!i)return;let u={adoptedSandboxName:t.adoptedSandboxName,token:t.token,workdir:t.workdir,workload:t.workload,daemonBootId:t.daemonBootId,tenant:t.tenant,...t.ensureOpts?{ensureOpts:t.ensureOpts}:{}};await i.put(t.id,d_,{handle:t.handle,state:u})}computeShutdownTime(){return new Date(Date.now()+this.idleTtlMs).toISOString()}openForwarder(i,t,u=i){let l=XU0(u,t);return new Promise((n,f)=>{let c=($,d)=>{let _=EFu.createServer((g)=>this.handleForwardedConnection(g,i,t,u));_.once("error",(g)=>{if(g.code==="EADDRINUSE"&&d<xU0){try{_.close()}catch{}let h=Vut+($-Vut+1)%vFu;c(h,d+1);return}f(g)}),_.listen($,"127.0.0.1",()=>{let g=_.address();if(!g||typeof g==="string"){_.close(),f(Error("port-forward listener failed to bind"));return}n({server:_,localPort:g.port})})};c(l,0)})}handleForwardedConnection(i,t,u,l){let n=new $U0,f=null,c=!1,$=()=>{if(c)return;if(c=!0,n.destroy(),f)try{f.close()}catch{}if(!i.destroyed)i.destroy()};i.pipe(n),i.on("error",$),i.on("close",$),this.portForward.portForward(this.namespace,t,[u],i,null,n).then((d)=>{let _=typeof d==="function"?d():d;if(!_){$();return}if(f=_,f.on("close",$),f.on("error",()=>{this.invalidateRecord(l),$()}),c)try{f.close()}catch{}}).catch((d)=>{console.warn(`[${S4}] port-forward to ${t}:${u} failed: ${dU0(d)}`),this.invalidateRecord(l),$()})}closeForwarder(i){i.server.close((t)=>{if(t)console.warn(`[${S4}] port-forward close on :${i.localPort} errored: ${t instanceof Error?t.message:String(t)}`)})}close(){if(this.closed)return;this.closed=!0,this.claimWatchAbort.abort();for(let i of this.records.values())this.closeForwarder(i.daemonForward);this.records.clear()}}function DU0(i){return{active:i.createUpDownCounter("studio.sandbox.active",{description:"Active sandbox count, by runner kind and owning org. Cross-checks the cAdvisor-derived count from the cluster \u2014 divergence between the two indicates orphaned claims (mesh deleted but K8s didn't reap) or unattributed pods.",unit:"{sandbox}"}),ensureOutcome:i.createCounter("studio.sandbox.ensure.outcome",{description:"Outcome of each ensure() call: fresh provision, resume from state-store after restart, or adopt of a cluster-side claim mesh didn't know about. Cold-start ratio is the primary input for warm-pool sizing.",unit:"{call}"}),proxyDurationMs:i.createHistogram("studio.sandbox.proxy.duration_ms",{description:"Wall-clock latency of mesh-mediated requests to the sandbox daemon: tool exec proxies (source=daemon) and preview iframe traffic (source=preview).",unit:"ms"})}}function OU0(){let i=new zz;return i.loadFromDefault(),i}function gFu(i){return Boolean(i.status?.conditions?.some((t)=>t.type==="Ready"&&t.status==="True"))}function yU0(i){let t=i.spec?.env;if(!t)return null;for(let u of t)if(u.name==="DAEMON_TOKEN"&&u.value)return u.value;return null}function XU0(i,t){let u=nU0("sha256").update(`${i}:${t}`).digest();return Vut+u.readUInt32BE(0)%vFu}function Cut(i,t){return new Response(JSON.stringify(t),{status:i,headers:{"content-type":"application/json","access-control-allow-origin":"*"}})}function hFu(i){let t=i.slice(0,JU0);return NU0.test(t)?t:""}function FU0(i){if(i===void 0)return null;let t=i.trim();if(t==="")return null;if(!UU0.test(t))throw Error(`AgentSandboxProvider: envName=${JSON.stringify(t)} is not a valid DNS-label-safe environment name (lowercase alphanumeric or '-', starts with a letter, ends alphanumeric, \u226432 chars). Mesh sets this from STUDIO_ENV; check the studio chart's configMap.`);return t}function Mut(i,t={}){let u={...t};if(i){let l=hFu(i.orgId),n=hFu(i.userId);if(l)u[k6.orgId]=l;if(n)u[k6.userId]=n}return u}function eY(i){let t="";for(let u of i){let l=u.codePointAt(0)??0;t+=l<32||l===127?" ":u}return t.slice(0,TU0)}function IU0(i){try{let t=new URL(i);return t.username="",t.password="",t.toString()}catch{return""}}function ZU0(i){let t={},u=i.tenant;if(u?.orgSlug)t[$E.orgSlug]=eY(u.orgSlug);if(u?.orgName)t[$E.orgName]=eY(u.orgName);if(u?.userEmail)t[$E.userEmail]=eY(u.userEmail);if(u?.userName)t[$E.userName]=eY(u.userName);let l=i.repo;if(l){if(l.displayName)t[$E.gitRepo]=eY(l.displayName);let n=IU0(l.cloneUrl);if(n)t[$E.gitRepoUrl]=eY(n);let f=i.branch??l.branch;if(f)t[$E.gitBranch]=eY(f)}return t}function BU0(i){let t=i.metadata?.labels;if(!t)return null;let u=t[k6.orgId],l=t[k6.userId];if(!u||!l)return null;let n=i.metadata?.annotations??{};return{orgId:u,userId:l,orgSlug:n[$E.orgSlug],orgName:n[$E.orgName],userEmail:n[$E.userEmail],userName:n[$E.userName]}}function qut(i){return{org_id:i?.orgId??"",user_id:i?.userId??"",runner_kind:d_}}function QU0(i){let t={};if(i.repo)t.repo=i.repo;if(i.workload)t.workload=i.workload;if(i.env&&Object.keys(i.env).length>0)t.env=i.env;if(i.tenant)t.tenant=i.tenant;return Object.keys(t).length>0?t:null}function PU0(i,t){try{return new URL(tgi(i,t)).hostname||null}catch{return null}}var d_="agent-sandbox",S4="AgentSandboxProvider",CY="x-sandbox-preview-not-ready",_U0="agent-sandbox-system",gU0="studio-sandbox",_D=9000,hU0=3000,eut="/app",EU0=32,vU0,rU0=900000,wU0,_Fu,Vut=40000,vFu=1e4,xU0=256,k6,$E,NU0,JU0=63,UU0,TU0=253;var rFu=w(()=>{kut();vGi();ugi();Byi();Ea();dFu();vU0=new Set(["DAEMON_TOKEN","DAEMON_BOOT_ID","APP_ROOT","PROXY_PORT"]),wU0=["cookie","host","connection","keep-alive","proxy-authenticate","proxy-authorization","te","trailer","transfer-encoding","accept-encoding","content-length","upgrade"],_Fu=["connection","keep-alive","transfer-encoding","content-encoding","content-length"];k6={role:"studio.decocms.com/role",sandboxHandle:"studio.decocms.com/sandbox-handle",orgId:"studio.decocms.com/org-id",userId:"studio.decocms.com/user-id",env:"studio.decocms.com/env"},$E={orgSlug:"studio.decocms.com/org-slug",orgName:"studio.decocms.com/org-name",userEmail:"studio.decocms.com/user-email",userName:"studio.decocms.com/user-name",gitRepo:"studio.decocms.com/git-repo",gitRepoUrl:"studio.decocms.com/git-repo-url",gitBranch:"studio.decocms.com/git-branch"},NU0=/^([A-Za-z0-9]([-A-Za-z0-9_.]*[A-Za-z0-9])?)?$/;UU0=/^[a-z]([a-z0-9-]{0,30}[a-z0-9])?$/});var wFu={};Gi(wFu,{waitForSandboxReady:()=>Zyi,getSandboxClaim:()=>P2,getHttpRoute:()=>tFu,deleteSandboxClaim:()=>dD,deleteHttpRoute:()=>Iyi,createSandboxClaim:()=>ra,applyHttpRoute:()=>Tyi,SandboxTimeoutError:()=>RY,SandboxError:()=>hc,PREVIEW_NOT_READY_HEADER:()=>CY,KubeConfig:()=>zz,K8S_CONSTANTS:()=>V1,HTTPROUTE_CONSTANTS:()=>wa,AgentSandboxProvider:()=>aut});var mut=w(()=>{kut();Ea();Byi();rFu()});class Pyi{kind=gD;userSub;dispatch;stateStore;records=new Map;constructor(i){if(!i.userSub)throw Error("DesktopSandboxProvider requires userSub");if(!i.dispatch)throw Error("DesktopSandboxProvider requires dispatch");this.userSub=i.userSub,this.dispatch=i.dispatch,this.stateStore=i.stateStore??null}async ensure(i,t={}){let u=t.branch??t.repo?.branch,l=a5(i,u),n=this.records.get(l);if(n){if(await this.probeHealth(l))return this.toSandbox(n);if(this.records.delete(l),this.stateStore)await this.stateStore.deleteByHandle(gD,l).catch(()=>{})}else if(this.stateStore){let E=(await this.stateStore.getByHandle(gD,l))?.state,v=E?.sandboxApiUrl;if(v){if(await this.probeHealth(l)){let r={handle:l,sandboxApiUrl:v,previewUrl:E?.previewUrl??v};return this.records.set(l,r),this.toSandbox(r)}await this.stateStore.deleteByHandle(gD,l).catch(()=>{})}}let f=p6({userName:t.tenant?.userName,userEmail:t.tenant?.userEmail}),c=JSON.stringify({handle:l,repo:t.repo,branch:u,...t.workload?{workload:t.workload}:{},...f?{operator:f}:{},...t.offloadAllowedHosts?{offloadAllowedHosts:t.offloadAllowedHosts}:{},...t.offloadAllowSameHostDev!==void 0?{offloadAllowSameHostDev:t.offloadAllowSameHostDev}:{},...t.orgFsConfigJson?{orgFsConfigJson:t.orgFsConfigJson}:{}}),$=await this.dispatchJson("POST","/api/sandboxes",c),d=JSON.parse($);if(typeof d.sandboxApiUrl!=="string")throw Error("desktop ensure: daemon did not return a sandboxApiUrl string");let _=typeof d.previewUrl==="string"?d.previewUrl:d.sandboxApiUrl,g={handle:l,sandboxApiUrl:d.sandboxApiUrl,previewUrl:_};if(this.records.set(l,g),this.stateStore)await this.stateStore.put(i,gD,{handle:l,state:{handle:l,sandboxApiUrl:d.sandboxApiUrl,previewUrl:_}});return this.toSandbox(g)}async proxyDaemonRequest(i,t,u){let l=t.startsWith("/")?t:`/${t}`,n=l.startsWith("/_sandbox/")?l.slice(9):l,f=`/_sandbox/${encodeURIComponent(i)}${n}`,c=new Headers(u.headers);for(let y of["host","cookie","connection","keep-alive","transfer-encoding","upgrade","authorization"])c.delete(y);let $={};c.forEach((y,X)=>{$[X]=y});let d;if(u.body!=null)d=await AU0(u.body);let g=this.dispatch(this.userSub,{method:u.method,path:f,headers:$,body:d},{signal:u.signal})[Symbol.asyncIterator](),h=YU0(),E=200,v={"content-type":"application/octet-stream"},r=[];try{while(!0){let y=await g.next();if(y.done)break;let X=y.value;if(X.headers){E=X.headers.status,v=X.headers.headers;break}if(X.data!=null){let N=h.push(X.data);if(N.length)r.push(N)}}}catch(y){let X=y instanceof Error?y.message:"dispatch error";return new Response(JSON.stringify({error:X}),{status:502,headers:{"content-type":"application/json"}})}let x=!1,O=new ReadableStream({async start(y){for(let X of r)y.enqueue(X)},async pull(y){try{while(!0){let X=await g.next();if(x)return;if(X.done){let U=h.flush();if(U.length)y.enqueue(U);y.close();return}let N=X.value;if(N.data!=null){let U=h.push(N.data);if(U.length){y.enqueue(U);return}}}}catch(X){if(!x)y.error(X)}},cancel(){x=!0,g.return?.()}});return new Response(O,{status:E,headers:v})}async alive(i){return this.probeHealth(i)}async probeHealth(i){let t=new AbortController,u=setTimeout(()=>t.abort(),3000);try{return await this.dispatchJson("GET",`/api/sandboxes/${encodeURIComponent(i)}`,void 0,t.signal),!0}catch{return!1}finally{clearTimeout(u)}}async forgetHandle(i){if(this.records.delete(i),this.stateStore)await this.stateStore.deleteByHandle(gD,i).catch(()=>{})}async delete(i){if(this.records.delete(i),this.stateStore)await this.stateStore.deleteByHandle(gD,i).catch(()=>{});try{await this.dispatchJson("DELETE",`/api/sandboxes/${encodeURIComponent(i)}`)}catch(t){if(!(t instanceof Error?t.message:String(t)).includes("404"))throw t}}async getPreviewUrl(i){return(await this.resolveRecord(i))?.previewUrl??null}async localWorkdir(i){return null}async*watchClaimLifecycle(i,t){yield{kind:"ready"}}toSandbox(i){return{handle:i.handle,workdir:i.sandboxApiUrl,previewUrl:i.previewUrl}}async resolveRecord(i){let t=this.records.get(i);if(t)return t;if(!this.stateStore)return null;let l=(await this.stateStore.getByHandle(gD,i))?.state,n=l?.sandboxApiUrl;if(!n)return null;let f={handle:i,sandboxApiUrl:n,previewUrl:l?.previewUrl??n};return this.records.set(i,f),f}async dispatchJson(i,t,u,l){let n={accept:"application/json"};if(u!==void 0)n["content-type"]="application/json";let f=this.dispatch(this.userSub,{method:i,path:t,headers:n,body:u},{signal:l}),c=null,$="";for await(let _ of f)if(_.headers)c=_.headers.status;else if(_.data!=null)$+=_.data;let d=Buffer.from($,"base64").toString("utf8");if(c!=null&&(c<200||c>=300))throw Error(`daemon returned ${c}: ${d}`);return d}}function xFu(i){return new Pyi(i)}function YU0(){let i="";return{push(t){if(t.length===0)return out;i+=t;let u=i.length-i.length%4;if(u===0)return out;let l=i.slice(0,u);return i=i.slice(u),new Uint8Array(Buffer.from(l,"base64"))},flush(){if(i.length===0)return out;let t=i;return i="",new Uint8Array(Buffer.from(t,"base64"))}}}async function AU0(i){if(typeof i==="string")return i;if(i instanceof ArrayBuffer)return Buffer.from(i).toString("utf8");if(ArrayBuffer.isView(i))return Buffer.from(i.buffer,i.byteOffset,i.byteLength).toString("utf8");if(i instanceof URLSearchParams)return i.toString();return await new Response(i).text()}var gD="user-desktop",out;var DFu=w(()=>{ugi();pui();out=new Uint8Array(0)});var OFu={};Gi(OFu,{createDesktopProvider:()=>xFu,DesktopSandboxProvider:()=>Pyi});var yFu=w(()=>{DFu()});var TFu={};Gi(TFu,{subscribeLifecycle:()=>xa,getSandboxProviderByKind:()=>put,getOrInitSharedRunner:()=>KU0,buildDesktopProvider:()=>Yyi,__resetSharedLifecyclesForTesting:()=>CU0});function UFu(i,t){let u=XFu[i];if(u)return Promise.resolve(u);let l=sut[i];if(l)return l;let n=t().then((f)=>{return XFu[i]=f,f}).finally(()=>{delete sut[i]});return sut[i]=n,n}function kU0(){let i=process.env.STUDIO_SANDBOX_PREVIEW_URL_PATTERN;return i&&i.trim()!==""?i:void 0}function jU0(){let i=process.env.STUDIO_SANDBOX_TEMPLATE_NAME;return i&&i.trim()!==""?i:void 0}function SU0(){let i=process.env.STUDIO_ENV;return i&&i.trim()!==""?i:void 0}function zU0(){let i=process.env.STUDIO_SANDBOX_SENTINEL_TOKEN;return i&&i.trim()!==""?i:void 0}function bU0(){let i=process.env.STUDIO_SANDBOX_PREVIEW_GATEWAY_NAME?.trim(),t=process.env.STUDIO_SANDBOX_PREVIEW_GATEWAY_NAMESPACE?.trim();if(!i&&!t)return;if(!i||!t)throw Error("STUDIO_SANDBOX_PREVIEW_GATEWAY_NAME and STUDIO_SANDBOX_PREVIEW_GATEWAY_NAMESPACE must both be set, or both unset. Half-configured per-claim HTTPRoute routing would silently fail to attach.");return{name:i,namespace:t}}async function FFu(i,t){let u=new o5(t),l=kU0();switch(i){case"agent-sandbox":{let{AgentSandboxProvider:n}=await Promise.resolve().then(() => (mut(),wFu));return new n({stateStore:u,previewUrlPattern:l,sandboxTemplateName:jU0(),envName:SU0(),previewGateway:bU0(),sentinelToken:zU0(),meter:lf})}case"user-desktop":throw Error("user-desktop provider cannot be instantiated without a per-run link claim \u2014 call resolveSandboxProvider, which binds the link before constructing the provider.");default:throw Error(`Unknown sandbox provider kind: ${String(i)}`)}}async function Yyi(i,t){let{DesktopSandboxProvider:u}=await Promise.resolve().then(() => (yFu(),OFu)),{getProxyDispatch:l}=await Promise.resolve().then(() => (tlt(),ilt)),n=new o5(i.db);if(!t)throw Error("buildDesktopProvider: userSub must be a non-empty string");let f=l();return new u({userSub:t,dispatch:f,stateStore:n})}function put(i,t){return UFu(t,()=>FFu(t,i.db))}async function KU0(){let i;try{i=Vv()}catch(u){return console.warn("[lifecycle] cannot resolve sandbox runner:",u instanceof Error?u.message:String(u)),null}return await UFu(i,()=>FFu(i,U0().db))}function xa(i,t,u){let l=hD.get(t);if(l){if(l.terminated){if(l.lastPhase)try{u(l.lastPhase)}catch{}return{unsubscribe:LU0}}if(l.listeners.add(u),l.lastPhase)try{u(l.lastPhase)}catch{}return NFu(t,l,u)}let n=new AbortController,f={lastPhase:null,terminated:!1,listeners:new Set([u]),abort:n};return hD.set(t,f),eU0(i,t,f),NFu(t,f,u)}function LU0(){}function NFu(i,t,u){return{unsubscribe(){if(hD.get(i)!==t)return;if(t.listeners.delete(u),t.listeners.size===0)hD.delete(i),t.abort.abort()}}}async function eU0(i,t,u){let l=null;try{for await(let n of i.watchClaimLifecycle(t,u.abort.signal)){if(u.abort.signal.aborted)break;u.lastPhase=n;let f=n.kind==="ready"||n.kind==="failed";if(f)u.terminated=!0;let c=Array.from(u.listeners);for(let $ of c)try{$(n)}catch{}if(f)break}}catch(n){l=n}finally{if(!u.terminated&&!u.abort.signal.aborted&&u.listeners.size>0){let n={kind:"failed",reason:"unknown",message:l instanceof Error?l.message:"Lifecycle watcher ended unexpectedly"};u.lastPhase=n,u.terminated=!0;for(let f of Array.from(u.listeners))try{f(n)}catch{}}if(hD.get(t)===u)hD.delete(t)}}function CU0(){for(let i of hD.values())i.abort.abort();hD.clear()}var GU0,WU0,JFu,XFu,sut,HU0,RU0,hD;var Da=w(()=>{_g();j$();p1();dgi();GU0=Symbol.for("decocms.sandbox.lifecycle.runners"),WU0=Symbol.for("decocms.sandbox.lifecycle.inflight"),JFu=globalThis,XFu=JFu[GU0]??={},sut=JFu[WU0]??={};HU0=Symbol.for("decocms.sandbox.lifecycle.shared-lifecycles"),RU0=globalThis,hD=RU0[HU0]??=new Map});async function Ayi(i,t){if(await t.linkClaimRegistry.get(i))return"user-desktop";return t.resolveEnvKind()}async function dE(i,t){let{userId:u,branch:l,virtualMcpMetadata:n,explicitKind:f}=t;if(f)return{provider:await Oa(i,u,f),kind:f};if(i.sandboxPreference==="agent-sandbox")return{provider:await Oa(i,u,"agent-sandbox"),kind:"agent-sandbox"};if(i.sandboxPreference==="user-desktop"&&i.linkForCurrentRun)return{provider:await Yyi(i,u),kind:"user-desktop"};if(i.sandboxPreference==="cluster-default"){let g=Vv();return{provider:await Oa(i,u,g),kind:g}}let[c,...$]=MU0(n,u,l);if(c){let g=$.length===0?c:await qU0(i,u,c,$);return{provider:await Oa(i,u,g),kind:g}}let d=await IFu(i,u);return{provider:await Oa(i,u,d),kind:d}}function MU0(i,t,u){let l=gg(i)[t]?.[u];if(!l)return[];let n=v3(l);return Object.keys(n)}async function qU0(i,t,u,l){let n=await IFu(i,t);if(n===u||l.includes(n))return n;return u}async function IFu(i,t){if(!i.linkClaimRegistry)return Vv();return Ayi(t,{linkClaimRegistry:i.linkClaimRegistry,resolveEnvKind:Vv})}async function Oa(i,t,u){if(u!=="user-desktop")return put(i,u);if(!i.linkClaimRegistry)throw Error("user-desktop sandbox provider requires ctx.linkClaimRegistry to be wired (set on StudioContextConfig).");if(!await i.linkClaimRegistry.get(t))throw Error(`No link daemon registered for user "${t}". Start one with \`deco link\` (or run \`bun run dev --local-sandbox-provider\` for dev).`);return Yyi(i,t)}var Lz=w(()=>{kl();_g();U2();Da()});async function Gyi(i,t){if(!i)return{hosts:[],allowSameHostDev:!1};let u;try{u=await i.presignedGetUrl("link-dispatch/_allowlist_probe",60,{requireFetchable:!0})}catch{return{hosts:[],allowSameHostDev:!1}}let l;try{l=new URL(u)}catch{return{hosts:[],allowSameHostDev:!1}}if(l.protocol!=="https:"&&l.protocol!=="http:")return{hosts:[],allowSameHostDev:!1};let n=l.hostname,f=VU0.has(n);return{hosts:[n],allowSameHostDev:f&&!t.isProduction}}var VU0;var ult=w(()=>{VU0=new Set(["127.0.0.1","localhost","::1","[::1]","0.0.0.0"])});function ez(i){if(aU0.has(i)||!mU0.test(i))return"home";return i}var aU0,mU0;var Wyi=w(()=>{aU0=new Set(["output","upload","public","home"]),mU0=/^[A-Za-z0-9][A-Za-z0-9._-]*$/});function iF0(i){return{baseUrl:i.baseUrl.replace(/\/+$/,""),orgSlug:i.orgSlug,token:i.token,mounts:[{volume:"home",path:ez(i.orgSlug)},...pU0.map((t)=>({...t})),...(i.publicSets??[]).map((t)=>({volume:B1i(t),path:`public/${t}`,readonly:!0}))]}}async function kyi(i,t){try{let u=await i.boundAuth.apiKey.create({name:`orgfs-${t.orgSlug}`,expiresIn:tF0,metadata:{organization:{id:t.orgId,slug:t.orgSlug}}});return JSON.stringify(iF0({baseUrl:t.baseUrl,orgSlug:t.orgSlug,token:u.key,publicSets:Th().map((l)=>l.set)}))}catch(u){console.warn("[org-fs] token mint failed; mounts disabled for this sandbox",u);return}}var oU0=".outputs",sU0=".uploads",pU0,tF0=604800;var llt=w(()=>{Wyi();Hk();pU0=[{volume:"outputs",path:oU0},{volume:"uploads",path:sU0}]});import{z as ir}from"zod";async function ZFu(i,t){Ji(t);let u=hi(t),l=Ou(t);if(!l)throw Error("User ID required");let n=await t.storage.virtualMcps.findById(i.virtualMcpId);if(!n||n.organization_id!==u.id)throw Error("Virtual MCP not found");let f=n.metadata??{},c=J2(gg(f),l,i.branch,i.sandboxProviderKind),$=i.sandboxProviderKind,{provider:d}=await dE(t,{userId:l,branch:i.branch,virtualMcpMetadata:f,explicitKind:$});if(c){if($!=="user-desktop")return c;if(await d.alive(c.sandboxHandle).catch(()=>!1))return c;await m5(t.storage.virtualMcps,i.virtualMcpId,l,l,i.branch,$).catch((E)=>{console.warn("[ensureSandbox] failed to reap stale user-desktop entry",E)})}let _=f.githubRepo??null,{entry:g}=await BFu({ctx:t,userId:l,orgId:u.id,virtualMcpId:i.virtualMcpId,branch:i.branch,metadata:f,githubRepo:_,existing:null,providerKind:$,runner:d});return g}async function BFu(i){let{ctx:t,userId:u,orgId:l,virtualMcpId:n,branch:f,metadata:c,githubRepo:$,existing:d,runner:_}=i,{runtime:g,packageManager:h,port:E,packageManagerPath:v}=lgi(c),r;if($){if($.connectionId)await Iz({ctx:t,connectionId:$.connectionId,organizationId:l,onLegacyMintError:(p)=>{console.error("[provisionSandbox] repo-scoped legacy token mint failed",{connectionId:$.connectionId,error:p.message})}});let{cloneUrl:a,gitUserName:z,gitUserEmail:M}=$.connectionId?await Zz($.connectionId,$.owner,$.name,t.db,t.vault):fgi($.owner,$.name);if(!h){let p=$.connectionId?await ryu($.connectionId,$.owner,$.name,t.db,t.vault):await wyu($.owner,$.name);if(p)h=p.packageManager,g=CV[p.packageManager].runtime,E=p.devPort??E,await lF0(t,n,u,p.packageManager,p.devPort)}r={cloneUrl:a,userName:z,userEmail:M,branch:f,displayName:`${$.owner}/${$.name}`}}let x=g&&h?{runtime:g,packageManager:h,...E!==null?{devPort:Number(E)}:{},...v?{packageManagerPath:v}:{}}:void 0,O=N2({orgId:l,virtualMcpId:n,branch:f}),y=_.kind==="user-desktop"?await Gyi(t.objectStorage,{isProduction:Zt().nodeEnv==="production"}):null,X=_.kind==="user-desktop"||_.kind==="agent-sandbox"&&Zt().orgFsClusterMounts,N;if(X){let a=t.organization?.slug??(await t.db.selectFrom("organization").select(["slug"]).where("id","=",l).executeTakeFirst())?.slug;if(a)N=await kyi(t,{orgSlug:a,orgId:l,baseUrl:BE()})}let U=await _.ensure({userId:u,projectRef:O},{branch:f,repo:r,workload:x,tenant:{orgId:l,userId:u,...t.organization?.slug?{orgSlug:t.organization.slug}:{},...t.organization?.name?{orgName:t.organization.name}:{},...t.auth.user?.email?{userEmail:t.auth.user.email}:{},...t.auth.user?.name?{userName:t.auth.user.name}:{}},...y?{offloadAllowedHosts:y.hosts,offloadAllowSameHostDev:y.allowSameHostDev}:{},...N?{orgFsConfigJson:N}:{}}),J=c.runtime?.env??null;await ngi({ctx:t,runner:_,handle:U.handle,orgId:l,userId:u,entries:J});let Q=!!d&&d.sandboxHandle===U.handle&&d?.createdAt?d.createdAt:Date.now(),B=c.runtime?.selected??null,Y=c.runtime?.port??null,H=c.runtime?.path??null,j={sandboxHandle:U.handle,previewUrl:U.previewUrl,sandboxApiUrl:U.previewUrl,sandboxProviderKind:_.kind,createdAt:Q,startedWith:{packageManager:B,port:Y,path:H}};await _yu(t.storage.virtualMcps,n,u,u,f,i.providerKind,j);let k=!d||d.sandboxHandle!==U.handle;return{entry:j,isNewVm:k}}async function lF0(i,t,u,l,n){let f=await i.storage.virtualMcps.findById(t);if(!f)return;let c=f.metadata??{};await i.storage.virtualMcps.update(t,u,{metadata:{...c,runtime:{selected:l,port:n}}})}var uF0,nlt;var flt=w(()=>{_g();ai();MV();Rit();U2();cgi();Dyu();aoi();Hit();Lz();ult();h0();Ud();llt();U2();uF0=ir.enum(["agent-sandbox","user-desktop","cluster"]),nlt=li({name:"SANDBOX_START",description:"Start a sandbox with the connected GitHub repo and dev server.",annotations:{title:"Start VM Preview",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:ir.object({virtualMcpId:ir.string().describe("Virtual MCP ID"),branch:ir.string().min(1).optional().describe("Optional git branch to check out. When omitted the handler generates `deco/<adjective>-<noun>` and uses it. The resolved branch is returned in the response so callers can persist it."),sandboxProviderKind:uF0.optional().describe("Explicit runtime choice. Hosted provider is `agent-sandbox`; legacy `cluster` input is accepted only for compatibility and normalized to `agent-sandbox`. When omitted, defaults to `user-desktop` if the acting user's link daemon is online, else the env kind.")}),outputSchema:ir.object({previewUrl:ir.string().nullable(),sandboxHandle:ir.string(),branch:ir.string(),isNewVm:ir.boolean(),sandboxProviderKind:ir.enum(["agent-sandbox","user-desktop"])}),handler:async(i,t)=>{Ji(t);let u=hi(t);await t.access.check();let l=i.branch??Kdi(),n=Ou(t);if(!n)throw Error("User ID required");let f=await t.storage.virtualMcps.findById(i.virtualMcpId);if(!f||f.organization_id!==u.id)throw Error("Virtual MCP not found");let c=f.metadata??{},$=i.sandboxProviderKind?X2(i.sandboxProviderKind):void 0,{provider:d,kind:_}=await dE(t,{userId:n,branch:l,virtualMcpMetadata:c,explicitKind:$}),g=J2(gg(c),n,l,_),h=c.githubRepo??null,{entry:E,isNewVm:v}=await BFu({ctx:t,userId:n,orgId:u.id,virtualMcpId:i.virtualMcpId,branch:l,metadata:c,githubRepo:h,existing:g,providerKind:_,runner:d});return{...E,branch:l,isNewVm:v,sandboxProviderKind:_}}})});import{z as Cz}from"zod";var nF0,clt;var QFu=w(()=>{_g();ai();MV();U2();Lz();nF0=Cz.enum(["agent-sandbox","user-desktop","cluster"]),clt=li({name:"SANDBOX_DELETE",description:"Delete a sandbox.",annotations:{title:"Delete VM Preview",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:Cz.object({virtualMcpId:Cz.string().describe("Virtual MCP ID that owns this VM"),branch:Cz.string().min(1).describe("Branch whose vm should be deleted (sandboxMap[userId][branch])"),sandboxProviderKind:nF0.describe("Kind of sandbox provider the VM was started with. Hosted provider is `agent-sandbox`; legacy `cluster` input is accepted only for compatibility and normalized to `agent-sandbox`. Used to locate the correct 3-level sandboxMap entry.")}),outputSchema:Cz.object({success:Cz.boolean()}),handler:async(i,t)=>{let u=X2(i.sandboxProviderKind),l;try{l=await hyu({...i,sandboxProviderKind:u},t)}catch($){if($ instanceof Error&&$.message==="Virtual MCP not found")return{success:!0};throw $}let{entry:n,userId:f}=l;if(!n)return{success:!0};let{provider:c}=await dE(t,{userId:f,branch:i.branch,virtualMcpMetadata:l.metadata,explicitKind:u});return await m5(t.storage.virtualMcps,i.virtualMcpId,f,f,i.branch,u),await c.delete(n.sandboxHandle).catch(($)=>console.error(`[SANDBOX_DELETE] ${u} ${n.sandboxHandle}: ${$ instanceof Error?$.message:String($)}`)),{success:!0}}})});var PFu=w(()=>{flt();QFu()});import{z as tr}from"zod";var cF0="https://api.github.com",$lt;var YFu=w(()=>{ai();My();eS();Wv();$lt=li({name:"GITHUB_LIST_USER_ORGS",description:"List GitHub App installations (orgs/accounts) accessible to the authenticated user.",annotations:{title:"List GitHub User Orgs",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:tr.object({connectionId:tr.string().describe("ID of the mcp-github connection to use")}),outputSchema:tr.object({installations:tr.array(tr.object({installationId:tr.number(),login:tr.string(),avatarUrl:tr.string(),type:tr.string()})),appSlug:tr.string().optional()}),handler:async(i,t)=>{await t.access.check();let u=t.organization?.id;if(!u)throw Error("Organization context required");let l=await t.storage.connections.findById(i.connectionId,u);if(!l)throw Error("Connection not found");if(kv(l))throw Error("Repo-scoped connections cannot list installations \u2014 use an org-level mcp-github connection");let n=new C1(t.db,t.vault),f=await n.get(i.connectionId);if(!f)throw Error("No GitHub token found. Ensure the mcp-github connection is authenticated.");let c=f.accessToken;if(Idi(f)&&n.isExpired(f,oq)){let E=await Zdi(f,n);if(!E)throw Error(D$);c=E,f=await n.get(i.connectionId)??f}let $=[],d,_=1,g=100,h=async(E)=>fetch(`${cF0}/user/installations?per_page=${g}&page=${_}`,{headers:{Authorization:`Bearer ${E}`,Accept:"application/vnd.github+json","X-GitHub-Api-Version":"2022-11-28"}});while(!0){let E=await h(c);if(E.status===401){let r=await n.get(i.connectionId);if(!r||!Idi(r))throw Error(D$);let x=await Zdi(r,n);if(!x)throw Error(D$);if(c=x,E=await h(c),E.status===401)throw Error(D$)}if(!E.ok)throw Error(`GitHub /user/installations failed: ${E.status}`);let v=await E.json();for(let r of v.installations){if(!d)d=r.app_slug??r.app?.slug;$.push({installationId:r.id,login:r.account.login,avatarUrl:r.account.avatar_url,type:r.account.type})}if(v.installations.length<g)break;_++}return{installations:$,...d?{appSlug:d}:{}}}})});var AFu=w(()=>{YFu()});import MY from"zod";var dlt;var GFu=w(()=>{g0i();ai();dlt=li({name:"LINK_CURRENT_GET",description:"Return the calling user's currently registered desktop link, or `online: false` if no link is registered or the TTL has expired.",inputSchema:MY.object({}),outputSchema:MY.object({online:MY.boolean(),machineId:MY.string().optional(),hostname:MY.string().optional(),cliVersion:MY.string().optional(),capabilities:MY.array(uki).default([])}),handler:async(i,t)=>{Ji(t),await t.access.check();let u=t.linkClaimRegistry;if(!u)return{online:!1,capabilities:[]};let l=await u.get(t.auth.user.id);if(!l)return{online:!1,capabilities:[]};return{online:!0,machineId:l.machineId,hostname:l.hostname,cliVersion:l.cliVersion,capabilities:l.capabilities}}})});import _lt from"zod";var glt;var WFu=w(()=>{ai();glt=li({name:"LINK_DISCONNECT",description:"Disconnect the calling user's desktop link from the Studio side: tells the linked daemon to shut down (via a `shutdown` control frame) and removes the presence claim. The user re-links by running `bunx decocms link` on the desktop.",inputSchema:_lt.object({}),outputSchema:_lt.object({disconnected:_lt.boolean()}),handler:async(i,t)=>{Ji(t),await t.access.check();let u=t.auth.user.id,l=t.linkClaimRegistry;if(!(l?await l.get(u):null))return{disconnected:!1};return t.publishLinkControlFrame?.(u,{type:"shutdown"}),await l.delete(u),{disconnected:!0}}})});var kFu=w(()=>{GFu();WFu()});import{z as Ec}from"zod";function jFu(i){if(!i)return"";return typeof i==="string"?i:i.toISOString()}var _F0,gF0,hF0,EF0,vF0,hlt;var SFu=w(()=>{ai();_F0=["thread"],gF0=Ec.object({type:Ec.literal("thread"),id:Ec.string(),title:Ec.string(),created_at:Ec.string(),updated_at:Ec.string(),virtual_mcp_id:Ec.string().nullable(),run_config:Ec.record(Ec.string(),Ec.unknown()).nullable(),status:Ec.string().nullable()}),hF0=Ec.discriminatedUnion("type",[gF0]),EF0=Ec.object({query:Ec.string().min(1).describe("Free-text search query."),limit:Ec.number().int().min(1).max(50).optional().describe("Maximum results per resource type (default: 20)."),types:Ec.array(Ec.enum(_F0)).optional().describe("Restrict the search to specific resource types. Omit to search across all available types.")}),vF0=Ec.object({items:Ec.array(hF0),totalCount:Ec.number()});hlt=li({name:"GLOBAL_SEARCH",description:"Search across organization resources by free-text query. Returns a typed union of matches (currently: threads). New resource types may be added over time without changes to the call shape.",annotations:{title:"Global Search",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:EF0,outputSchema:vF0,handler:async(i,t)=>{await t.access.check(),hi(t);let u=i.limit??20,l=i.types?.length?new Set(i.types):null,n=!l||l.has("thread"),f=[],c=0;if(n){let{threads:$,total:d}=await t.storage.threads.list(void 0,{limit:u,offset:0,search:i.query,includeArchived:!1});c+=d;for(let _ of $)f.push({type:"thread",id:_.id,title:_.title??"",created_at:jFu(_.created_at),updated_at:jFu(_.updated_at),virtual_mcp_id:_.virtual_mcp_id??null,run_config:_.run_config??null,status:_.status??null})}return{items:f,totalCount:c}}})});var zFu=w(()=>{SFu()});var Adi={};Gi(Adi,{managementMCP:()=>fz,managementContextStore:()=>i7,listManagementTools:()=>DF0,ALL_TOOLS:()=>KFu});import{z as bFu}from"zod";async function DF0(i){let t=await fz(i),[u,l]=ae.createLinkedPair();await t.connect(l);let n=new N1({name:"tools-hydration",version:"1.0.0"},{jsonSchemaValidator:af});try{return await n.connect(u),(await n.listTools()).tools}finally{await n.close().catch(()=>{}),await t.close().catch(()=>{})}}var wF0,xF0,KFu,fz=async(i)=>{let t=null;if(i.organization){let c=await i.storage.organizationSettings.get(i.organization.id),$=await i.storage.virtualMcps.listEnabledPlugins(i.organization.id),d=new Set(c?.enabled_plugins??[]);for(let _ of $)d.add(_);t=d.size>0?[...d]:null}let u=qot(KFu,t),l=new r3({name:"mcp-cms-management",version:"1.0.0"},{capabilities:{tools:{},prompts:{},resources:{}},jsonSchemaValidator:af});for(let c of u){let{config:$,handler:d}=L2u(c);l.registerTool(c.name,$,d)}let n=O_i();for(let c of n){let $=c.arguments?.length?Object.fromEntries(c.arguments.map((d)=>{let _=d.required?bFu.string():bFu.string().optional();return[d.name,d.description?_.describe(d.description):_]})):void 0;l.registerPrompt(c.name,{title:c.title,description:c.description,...$?{argsSchema:$}:{}},(d)=>{return{messages:[{role:"user",content:{type:"text",text:typeof c.text==="function"?c.text(d??{}):c.text}}]}})}if(i.organization?.id){let c=await i.storage.brandContext.list(i.organization.id),$=new Set;for(let d of c){let _=d.name.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,""),g=_?`brand-${_}`:`brand-${d.id}`;if($.has(g))g=`${g}-${d.id.slice(0,8)}`;$.add(g);let h=[`# Brand: ${d.name}`,"",`**Domain:** ${d.domain}`,"","## Overview",d.overview];if(d.colors){let v=Object.entries(d.colors).filter(([,r])=>r);if(v.length>0){h.push("","## Colors");for(let[r,x]of v)h.push(`- **${r}:** ${x}`)}}if(d.fonts){let v=Object.entries(d.fonts).filter(([,r])=>r);if(v.length>0){h.push("","## Fonts");for(let[r,x]of v)h.push(`- ${x} (${r})`)}}if(d.logo)h.push("",`**Logo:** ${d.logo}`);if(d.favicon)h.push(`**Favicon:** ${d.favicon}`);if(d.ogImage)h.push(`**OG Image:** ${d.ogImage}`);if(d.images&&d.images.length>0){h.push("","## Images");for(let v of d.images){let r=Object.entries(v).map(([x,O])=>`${x}: ${O}`).join(", ");h.push(`- ${r}`)}}let E=h.join(`
107888
+ `))>=0){let d=l.slice(0,$).trim();if(l=l.slice($+1),!d)continue;yield JSON.parse(d)}}let n=l.trim();if(n)yield JSON.parse(n)}finally{t.releaseLock()}}var VUu,aUu,sUu="gateway.networking.k8s.io",pUu="v1",iFu="httproutes",mJ0,wa,uFu="mesh-sandbox-runner";var Byi=w(()=>{Ea();VUu=class VUu extends Error{status;body;constructor(i,t,u){super(u);this.status=i;this.body=t;this.name="KubeHttpError"}};aUu=`/apis/${V1.CLAIM_API_GROUP}/${V1.CLAIM_API_VERSION}/namespaces`;mJ0=`/apis/${sUu}/${pUu}/namespaces`;wa={API_GROUP:sUu,API_VERSION:pUu,PLURAL:iFu}});async function*cFu(i){let t=i.now??(()=>Date.now()),u=t(),l=i.schedulingTimeoutMs??pJ0,n={pod:{},sandbox:{},events:{hasPulling:!1,hasPulled:!1},startedAt:u},f=[],c=null,$=!1,d=(X)=>{if($)return;if(c){let N=c;c=null,N(X)}else f.push(X)},_=()=>{if(f.length>0)return Promise.resolve(f.shift());if($)return Promise.resolve(null);return new Promise((X)=>{c=X})},g=()=>{if($)return;if($=!0,c){let X=c;c=null,X(null)}},h=new AbortController,E=()=>{h.abort(),g()};if(i.signal)if(i.signal.aborted)h.abort(),g();else i.signal.addEventListener("abort",E,{once:!0});let v=Math.max(0,l-(t()-u)),r=setTimeout(()=>d("tick"),v+100),x,O=new Promise((X)=>{x=X}),y=Promise.allSettled([iU0(i.kc,i.namespace,i.claimName,h.signal,n,d,t,x),uU0(i.kc,i.namespace,i.claimName,h.signal,n,d),lU0(i.kc,i.namespace,i.claimName,O,h.signal,n,d,t)]);try{let X=null,N=-1,U=nFu(n,l,t);if(X=Lut(U),!Rut(U))N=fFu(U);if(yield U,Rut(U))return;while(!$){if(await _()===null)break;let F=nFu(n,l,t);if(Rut(F)){let Y=Lut(F);if(Y!==X)X=Y,yield F;return}let Q=fFu(F);if(Q<N)continue;let B=Lut(F);if(B!==X)X=B,N=Q,yield F}}finally{if(clearTimeout(r),h.abort(),i.signal)i.signal.removeEventListener("abort",E);g(),await y.catch(()=>{})}}function nFu(i,t,u){let{pod:l,sandbox:n,events:f,startedAt:c}=i;if(n.ready)return{kind:"ready"};let $=l.containerWaitingReason;if($==="ImagePullBackOff"||$==="ErrImagePull")return{kind:"failed",reason:"image-pull-backoff",message:"Sandbox image failed to download. The cluster may be missing pull credentials or the image tag may not exist."};if($==="CrashLoopBackOff")return{kind:"failed",reason:"crash-loop-backoff",message:"Sandbox crashed during startup and is now in CrashLoopBackOff. Check pod logs."};if(!l.scheduled&&f.lastFailedSchedulingAt!==void 0&&u()-c>t)return{kind:"failed",reason:"scheduling-timeout",message:f.failedSchedulingMessage??`Pod could not be scheduled within ${Math.round(t/1000)}s.`};if(l.containerRunning&&!l.containerReady)return{kind:"warming-daemon",since:c};if(f.hasPulling&&!f.hasPulled)return{kind:"pulling-image",since:c};if($==="ContainerCreating"||$==="PodInitializing"||l.scheduled&&!l.containerRunning)return{kind:"starting-container",since:c};if(l.scheduledFalseReason==="Unschedulable"||f.lastFailedSchedulingAt!==void 0&&!l.scheduled)return{kind:"waiting-for-capacity",since:c,message:f.failedSchedulingMessage??l.scheduledFalseMessage,nodeClaim:f.nominatedNodeClaim};return{kind:"claiming",since:c}}function Rut(i){return i.kind==="ready"||i.kind==="failed"}function fFu(i){switch(i.kind){case"claiming":return 0;case"waiting-for-capacity":return 1;case"pulling-image":return 2;case"starting-container":return 3;case"warming-daemon":return 4;case"ready":case"failed":return 99}}function Lut(i){switch(i.kind){case"claiming":case"pulling-image":case"starting-container":case"warming-daemon":return i.kind;case"waiting-for-capacity":return`waiting-for-capacity:${i.message??""}:${i.nodeClaim??""}`;case"ready":return"ready";case"failed":return`failed:${i.reason}:${i.message}`}}async function iU0(i,t,u,l,n,f,c,$){let d=`/api/v1/namespaces/${encodeURIComponent(t)}/pods?watch=true&labelSelector=${encodeURIComponent(`${oJ0}=${u}`)}`;return Qyi({kc:i,path:d,signal:l,label:`pod/${u}`,onEvent:(_)=>{if(_.type!=="ADDED"&&_.type!=="MODIFIED")return;let g=_.object;if(g.metadata?.name)$(g.metadata.name);tU0(g,n,c),f("pod")}})}function tU0(i,t,u){let n=(i.status?.conditions??[]).find((c)=>c.type==="PodScheduled");if(n?.status==="True")t.pod.scheduled=!0,t.pod.scheduledFalseReason=void 0,t.pod.scheduledFalseMessage=void 0;else if(n?.status==="False")t.pod.scheduled=!1,t.pod.scheduledFalseReason=n.reason,t.pod.scheduledFalseMessage=n.message;let f=(i.status?.containerStatuses??[]).find((c)=>c.name===sJ0);if(f)t.pod.containerWaitingReason=f.state?.waiting?.reason,t.pod.containerRunning=!!f.state?.running,t.pod.containerReady=f.ready===!0}async function uU0(i,t,u,l,n,f){let c=`/apis/${V1.CLAIM_API_GROUP}/${V1.CLAIM_API_VERSION}/namespaces/${encodeURIComponent(t)}/${V1.CLAIM_PLURAL}?watch=true&fieldSelector=${encodeURIComponent(`metadata.name=${u}`)}`;return Qyi({kc:i,path:c,signal:l,label:`sandboxclaim/${u}`,onEvent:($)=>{if($.type!=="ADDED"&&$.type!=="MODIFIED")return;let _=$.object.status?.conditions?.find((g)=>g.type==="Ready");if(!_)return;if(_.status==="True")n.sandbox.ready=!0,n.sandbox.notReadyReason=void 0,n.sandbox.notReadyMessage=void 0;else n.sandbox.ready=!1,n.sandbox.notReadyReason=_.reason,n.sandbox.notReadyMessage=_.message;f("sandbox")}})}async function lU0(i,t,u,l,n,f,c,$){let d=await Promise.race([l,new Promise((g)=>{if(n.aborted){g(u);return}n.addEventListener("abort",()=>g(u),{once:!0})})]);if(n.aborted)return;let _=`/api/v1/namespaces/${encodeURIComponent(t)}/events?watch=true&fieldSelector=${encodeURIComponent(`involvedObject.name=${d},involvedObject.kind=Pod`)}`;return Qyi({kc:i,path:_,signal:n,label:`events/${u}`,onEvent:(g)=>{if(g.type!=="ADDED"&&g.type!=="MODIFIED")return;let h=g.object,E=h.reason;if(!E)return;switch(E){case"Pulling":f.events.hasPulling=!0;break;case"Pulled":f.events.hasPulling=!0,f.events.hasPulled=!0;break;case"FailedScheduling":f.events.lastFailedSchedulingAt=$(),f.events.failedSchedulingMessage=h.message;break;case"Nominated":{let v=h.message?.match(/nodeclaim\/([\w-]+)/);if(v)f.events.nominatedNodeClaim=v[1];break}default:return}c("event")}})}async function $Fu(i){let{kc:t,namespace:u,labelSelector:l,signal:n,onDelete:f}=i,c=`/apis/${V1.CLAIM_API_GROUP}/${V1.CLAIM_API_VERSION}/namespaces/${encodeURIComponent(u)}/${V1.CLAIM_PLURAL}?watch=true&labelSelector=${encodeURIComponent(l)}`;return Qyi({kc:t,path:c,signal:n,label:"sandboxclaim-reaper",onEvent:($)=>{if($.type!=="DELETED")return;let d=$.object.metadata?.name;if(d)f(d)}})}async function Qyi(i){let{kc:t,path:u,signal:l,label:n,onEvent:f}=i,c=0;while(!l.aborted){try{let d=await LY(t,{method:"GET",path:u,signal:l,headers:{accept:"application/json"},stream:!0});if(!d.ok||!d.body){try{await d.body?.cancel()}catch{}throw Error(`watch handshake failed: ${d.status} ${d.statusText}`)}c=0;for await(let _ of Hut(d.body)){if(l.aborted)return;try{f(_)}catch(g){console.warn(`[lifecycle-watcher] ${n} onEvent threw: ${g instanceof Error?g.message:String(g)}`)}}}catch(d){if(l.aborted)return;let _=d instanceof Error?d.message:String(d);console.warn(`[lifecycle-watcher] ${n} watch ended: ${_}`)}if(l.aborted)return;let $=Nn(5000,250,c,2,0);c+=1,await Vu($,{signal:l}).catch(()=>{})}}var oJ0="studio.decocms.com/sandbox-handle",sJ0="sandbox",pJ0=300000;var dFu=w(()=>{Rf();Ea();Byi()});import{createHash as nU0,randomBytes as fU0,randomUUID as cU0}from"crypto";import*as EFu from"net";import{PassThrough as $U0}from"stream";function dU0(i){if(i instanceof Error)return i.message;if(i&&typeof i==="object"){let t=i;if(t.error instanceof Error)return t.error.message;if(typeof t.message==="string"&&t.message)return t.message}return String(i)}class aut{kind=d_;records=new Map;inflight=new p_i;stateStore;previewUrlPattern;kubeConfig;portForward;namespace;sandboxTemplateName;envName;tokenGenerator;idleTtlMs;metrics;previewGateway;sentinelToken;closed=!1;claimWatchAbort=new AbortController;constructor(i={}){this.stateStore=i.stateStore??null,this.previewUrlPattern=i.previewUrlPattern??null,this.kubeConfig=i.kubeConfig??OU0(),this.portForward=new yut(this.kubeConfig),this.namespace=i.namespace??_U0,this.sandboxTemplateName=i.sandboxTemplateName??gU0,this.envName=FU0(i.envName),this.tokenGenerator=i.tokenGenerator??(()=>fU0(EU0).toString("hex")),this.idleTtlMs=i.idleTtlMs??rU0,this.metrics=i.meter?DU0(i.meter):null,this.previewGateway=i.previewGateway&&i.previewUrlPattern?{...i.previewGateway}:null;let t=i.sentinelToken?.trim()??"";this.sentinelToken=t.length>0?t:null,this.startClaimReaper()}startClaimReaper(){let i=["app.kubernetes.io/managed-by=studio","app.kubernetes.io/name=studio-sandbox",...this.envName?[`${k6.env}=${this.envName}`]:[]].join(",");$Fu({kc:this.kubeConfig,namespace:this.namespace,labelSelector:i,signal:this.claimWatchAbort.signal,onDelete:(t)=>this.invalidateRecord(t)})}async ensure(i,t={}){let u=a5(i,t.branch??t.repo?.branch??null);return this.inflight.run(u,()=>igi(this.stateStore,i,d_,(l)=>this.ensureLocked(i,u,t,l)))}async delete(i){let t=await this.getRecord(i);if(this.records.delete(i),t)this.closeForwarder(t.daemonForward),this.metrics?.active.add(-1,qut(t.tenant));if(await this.deleteHttpRouteIfManaged(i).catch((u)=>{console.warn(`[${S4}] HTTPRoute delete failed for ${i}: ${u instanceof Error?u.message:String(u)}`)}),await dD(this.kubeConfig,this.namespace,i),this.stateStore)if(t)await this.stateStore.delete(t.id,d_);else await this.stateStore.deleteByHandle(d_,i)}async alive(i){return await P2(this.kubeConfig,this.namespace,i)!==void 0}watchClaimLifecycle(i,t){return cFu({kc:this.kubeConfig,namespace:this.namespace,claimName:i,signal:t})}async getPreviewUrl(i){let t=await this.getRecord(i);if(!t)return null;return this.composePreviewUrl(t)}async proxyDaemonRequest(i,t,u){let l=await this.getRecord(i);if(!l&&this.previewUrlPattern&&this.stateStore){let d=await this.stateStore.getByHandle(d_,i),_=d?.state,g=_?.token;if(d&&g){let E=`http://${_?.adoptedSandboxName??i}.${this.namespace}.svc.cluster.local:${_D}`;try{let v=await LH(E,g,t,u);if(v.status!==404)return v;try{await v.body?.cancel()}catch{}}catch{}}}if(!l)l=await this.resurrectByHandle(i);if(!l)return new Response(JSON.stringify({error:"sandbox not found"}),{status:404,headers:{"content-type":"application/json"}});let n=l,f=performance.now(),c=0,$=!(u.body instanceof ReadableStream);try{let d=await LH(l.daemonUrl,l.token,t,u);if(d.status===401&&$){this.invalidateRecord(i);let _=await this.getRecord(i).catch(()=>null)??await this.resurrectByHandle(i).catch(()=>null);if(_)n=_,d=await LH(_.daemonUrl,_.token,t,u)}return c=d.status,d}catch(d){if(!$)throw d;this.invalidateRecord(i);let _=await this.resurrectByHandle(i)??await this.getRecord(i).catch(()=>null);if(!_)throw d;n=_;let g=await LH(_.daemonUrl,_.token,t,u);return c=g.status,g}finally{this.recordProxyDuration("daemon",c,n,performance.now()-f)}}async adoptLiveClaim(i,t){if(this.records.has(t))return!0;let u=await P2(this.kubeConfig,this.namespace,t).catch(()=>{return});if(!u||u.metadata?.deletionTimestamp)return!1;return await this.inflight.run(t,async()=>{let n=this.records.get(t);if(n)return this.toSandbox(n);let f=await this.adopt(i,t,u);if(!f)throw Error(`cannot adopt live claim ${t}`);return igi(this.stateStore,i,d_,(c)=>this.finish(f,c,!0,!0,"adopt"))}).catch(()=>null)!=null}async resolvePreviewUpstreamUrl(i){if(this.previewUrlPattern)return`http://${await this.resolveServiceNameForHandle(i)}.${this.namespace}.svc.cluster.local:${_D}`;let t=await this.getRecord(i);if(t)return t.daemonUrl;let u=await this.resurrectByHandle(i);return u?u.daemonUrl:null}async resolveServiceNameForHandle(i){let t=this.records.get(i);if(t)return t.adoptedSandboxName;if(this.stateStore){let l=(await this.stateStore.getByHandle(d_,i).catch(()=>null))?.state?.adoptedSandboxName;if(l)return l}return i}async proxyPreviewRequest(i,t){let u=performance.now(),l=this.records.get(i)??null,n=0;try{let f=await this.resolvePreviewUpstreamUrl(i);if(!f){n=404;let r=Cut(404,{error:"sandbox not found"});return r.headers.set(CY,"1"),r}let c=new URL(t.url);if((c.pathname==="/_sandbox"||c.pathname.startsWith("/_sandbox/")||c.pathname==="/_decopilot_vm"||c.pathname.startsWith("/_decopilot_vm/"))&&t.method!=="GET")return n=404,Cut(404,{error:"not found"});let d=(r)=>`${r}${c.pathname}${c.search}`,_=new Headers(t.headers);for(let r of wU0)_.delete(r);let g=t.method!=="GET"&&t.method!=="HEAD",h={method:t.method,headers:_,body:g?t.body:void 0,redirect:"manual",signal:t.signal,duplex:g?"half":void 0},E;try{E=await fetch(d(f),h)}catch(r){let x=`${f}${c.pathname}`;if(console.warn(`[${S4}] preview fetch to ${x} failed: ${r instanceof Error?r.message:String(r)}`),t.method==="GET"||t.method==="HEAD"){if(this.invalidateRecord(i),await this.resurrectByHandle(i).catch(()=>null)){let X=await this.resolvePreviewUpstreamUrl(i);if(X)try{E=await fetch(d(X),h);let N=new Headers;for(let[U,J]of E.headers.entries())if(!_Fu.includes(U.toLowerCase()))N.set(U,J);return n=E.status,new Response(E.body,{status:E.status,statusText:E.statusText,headers:N})}catch(N){console.warn(`[${S4}] preview fetch retry to ${x} failed: ${N instanceof Error?N.message:String(N)}`)}}}else this.invalidateRecord(i);n=502;let O=Cut(502,{error:"sandbox daemon unreachable"});return O.headers.set(CY,"1"),O}let v=new Headers;for(let[r,x]of E.headers.entries())if(!_Fu.includes(r.toLowerCase()))v.set(r,x);return n=E.status,new Response(E.body,{status:E.status,statusText:E.statusText,headers:v})}finally{this.recordProxyDuration("preview",n,l,performance.now()-u,i)}}async ensureLocked(i,t,u,l){if(u.image)console.warn(`[${S4}] opts.image ignored (template ${this.sandboxTemplateName} pins image): got ${u.image}`);if(l){let c=await l.get(i,d_);if(c){let $=await this.rehydrate(i,t,c);if($)return this.finish($,l,!1,!0,"resume");await l.delete(i,d_)}}let n=await P2(this.kubeConfig,this.namespace,t).catch(()=>{return});if(n)if(n.metadata?.deletionTimestamp)await Fyi(this.kubeConfig,this.namespace,t).catch((c)=>{console.warn(`[${S4}] wait for terminating claim ${t} failed: ${c instanceof Error?c.message:String(c)}`)});else{let c=await this.adopt(i,t,n).catch(($)=>{return console.warn(`[${S4}] adopt ${t} failed, recreating: ${$ instanceof Error?$.message:String($)}`),null});if(c)return this.finish(c,l,!0,!0,"adopt");await dD(this.kubeConfig,this.namespace,t).catch(()=>{}),await Fyi(this.kubeConfig,this.namespace,t).catch(($)=>{console.warn(`[${S4}] wait for deleted claim ${t} failed: ${$ instanceof Error?$.message:String($)}`)})}let f=await this.provision(i,t,u);return this.finish(f,l,!0,!1,"fresh")}async finish(i,t,u,l,n){let f=this.records.get(i.handle),c=f!==void 0;if(f&&f.daemonForward!==i.daemonForward)this.closeForwarder(f.daemonForward);if(this.records.set(i.handle,i),u)await this.persist(t,i);if(l)await mUu(this.kubeConfig,this.namespace,i.handle,this.computeShutdownTime()).catch(($)=>console.warn(`[${S4}] TTL refresh failed for ${i.handle}: ${$ instanceof Error?$.message:String($)}`));if(this.metrics){let $=qut(i.tenant);if(this.metrics.ensureOutcome.add(1,{...$,outcome:n}),!c)this.metrics.active.add(1,$)}return this.toSandbox(i)}buildEnvMap(i,t){let u={},l=[];for(let[n,f]of Object.entries(i.env??{}))if(vU0.has(n))l.push(n);else u[n]=f;if(l.length>0)console.warn(`[${S4}] opts.env keys overlap reserved bootstrap names and were dropped: ${l.join(",")}`);return{...u,DAEMON_TOKEN:t.token,DAEMON_BOOT_ID:t.daemonBootId,APP_ROOT:t.workdir,PROXY_PORT:String(_D)}}buildClaim(i,t,u){let l=this.sentinelToken!==null,n=l?[]:Object.entries(this.buildEnvMap(t,u)).sort(([$],[d])=>$<d?-1:$>d?1:0).map(([$,d])=>({name:$,value:d})),f=ZU0(t),c=Object.keys(f).length>0;return{apiVersion:`${V1.CLAIM_API_GROUP}/${V1.CLAIM_API_VERSION}`,kind:"SandboxClaim",metadata:{name:i,namespace:this.namespace,labels:{"app.kubernetes.io/name":"studio-sandbox","app.kubernetes.io/managed-by":"studio",...this.envName?{[k6.env]:this.envName}:{},...Mut(t.tenant)},...c?{annotations:f}:{}},spec:{sandboxTemplateRef:{name:this.sandboxTemplateName},additionalPodMetadata:{labels:Mut(t.tenant,{[k6.role]:"claimed",[k6.sandboxHandle]:i,...this.envName?{[k6.env]:this.envName}:{}}),...c?{annotations:f}:{}},env:n,warmpool:l?"default":"none",lifecycle:{shutdownPolicy:"Delete",shutdownTime:this.computeShutdownTime()}}}}async provision(i,t,u){let l=this.tokenGenerator(),n=cU0(),f=eut,c=this.buildClaim(t,u,{token:l,daemonBootId:n,workdir:f});try{await ra(this.kubeConfig,this.namespace,c)}catch(E){if(E instanceof ha)await Fyi(this.kubeConfig,this.namespace,t),await ra(this.kubeConfig,this.namespace,c);else throw E}let $;try{$=await oUu(this.kubeConfig,this.namespace,t),await Zyi(this.kubeConfig,this.namespace,$)}catch(E){throw await dD(this.kubeConfig,this.namespace,t).catch(()=>{}),E}try{await this.ensureServicePortForAdoptedSandbox($),await this.ensureHttpRouteForHandle(t,$,u.tenant??null)}catch(E){throw await dD(this.kubeConfig,this.namespace,t).catch(()=>{}),E}let d=await this.openForwarder($,_D,t),_=`http://127.0.0.1:${d.localPort}`,g=this.workloadConfigPayload(u),h=n;try{if(await uli(_),this.sentinelToken!==null){let E=await tli(_);if(E)h=E.bootId;await B8(_,this.sentinelToken,g??{},{rotateToken:l})}else if(g)await B8(_,l,g);if(u.orgFsConfigJson)await eYt(_,l,u.orgFsConfigJson).catch((E)=>console.warn("[org-fs] sidecar config relay failed",E))}catch(E){throw this.closeForwarder(d),await this.deleteHttpRouteIfManaged(t).catch(()=>{}),await dD(this.kubeConfig,this.namespace,t).catch(()=>{}),E}return{id:i,handle:t,adoptedSandboxName:$,token:l,workdir:f,daemonUrl:_,daemonForward:d,workload:u.workload??null,daemonBootId:h,tenant:u.tenant??null,ensureOpts:QU0(u)}}workloadConfigPayload(i){return bit({runtime:i?.workload?.runtime??"node",packageManager:i?.workload?.packageManager?{name:i.workload.packageManager,...i.workload.packageManagerPath?{path:i.workload.packageManagerPath}:{}}:null,repo:i?.repo??null,port:i?.workload?.devPort??hU0,tenant:i?.tenant??void 0})}async rebootstrapDaemon(i,t,u){if(this.sentinelToken===null)return!1;let l=this.workloadConfigPayload(u)??{};try{return await B8(i,this.sentinelToken,l,{rotateToken:t}),!0}catch(n){if(n instanceof ili&&n.status===401)try{return await B8(i,t,l,{rotateToken:t}),!0}catch(f){return console.warn(`[${S4}] re-bootstrap retry with claim token failed: ${f instanceof Error?f.message:String(f)}`),!1}return console.warn(`[${S4}] re-bootstrap failed: ${n instanceof Error?n.message:String(n)}`),!1}}async ensureServicePortForAdoptedSandbox(i){if(!this.previewGateway||!this.previewUrlPattern)return;await lFu(this.kubeConfig,this.namespace,i,{name:"daemon",port:_D,targetPort:_D})}async ensureHttpRouteForHandle(i,t,u){if(!this.previewGateway||!this.previewUrlPattern)return;let l=PU0(this.previewUrlPattern,i);if(!l)throw new hc(`Unable to derive preview hostname for ${i} from pattern: ${this.previewUrlPattern}`);let n={apiVersion:`${wa.API_GROUP}/${wa.API_VERSION}`,kind:"HTTPRoute",metadata:{name:i,namespace:this.namespace,labels:Mut(u??void 0,{[k6.role]:"claimed",[k6.sandboxHandle]:i,"app.kubernetes.io/name":"studio-sandbox","app.kubernetes.io/managed-by":"studio",...this.envName?{[k6.env]:this.envName}:{}})},spec:{parentRefs:[{kind:"Gateway",group:"gateway.networking.k8s.io",name:this.previewGateway.name,namespace:this.previewGateway.namespace}],hostnames:[l],rules:[{backendRefs:[{group:"",kind:"Service",name:t,port:_D}]}]}};await Tyi(this.kubeConfig,this.namespace,n)}async deleteHttpRouteIfManaged(i){if(!this.previewGateway)return;await Iyi(this.kubeConfig,this.namespace,i)}async rehydrate(i,t,u){let l=u.state;if(!l.adoptedSandboxName&&!l.podName||!l.token)return null;let n=await P2(this.kubeConfig,this.namespace,t).catch(()=>{return});if(!n||!gFu(n))return null;let f=n.status?.sandbox?.name??l.adoptedSandboxName??l.podName??t,c=await this.openAndProbeDaemon(f,t);if(!c)return null;if(l.daemonBootId&&l.daemonBootId!==c.bootId){if(this.sentinelToken!==null){if(!await this.rebootstrapDaemon(c.daemonUrl,l.token,l.ensureOpts??null))return this.closeForwarder(c.daemonForward),null}else console.warn(`[${S4}] daemon restart detected (handle=${t}): stored bootId=${l.daemonBootId} live bootId=${c.bootId}`);await this.stateStore?.put(i,d_,{handle:t,state:{...l,daemonBootId:c.bootId}}).catch(($)=>console.warn(`[${S4}] bootId persist failed for ${t}: ${$ instanceof Error?$.message:String($)}`))}return{id:i,handle:t,adoptedSandboxName:f,token:l.token,workdir:l.workdir??eut,daemonUrl:c.daemonUrl,daemonForward:c.daemonForward,workload:l.workload??null,daemonBootId:c.bootId,tenant:l.tenant??null,ensureOpts:l.ensureOpts??null}}async adopt(i,t,u){if(!gFu(u))return null;let l=u.status?.sandbox?.name??t;if(this.sentinelToken!==null)return null;let n=yU0(u);if(!n)return null;let f=await this.openAndProbeDaemon(l,t);if(!f)return null;let c=BU0(u);if(this.previewGateway)await this.ensureServicePortForAdoptedSandbox(l).catch(($)=>{console.warn(`[${S4}] Service port backfill failed for ${t}: ${$ instanceof Error?$.message:String($)}`)}),await this.ensureHttpRouteForHandle(t,l,c).catch(($)=>{console.warn(`[${S4}] HTTPRoute backfill failed for ${t}: ${$ instanceof Error?$.message:String($)}`)});return{id:i,handle:t,adoptedSandboxName:l,token:n,workdir:eut,daemonUrl:f.daemonUrl,daemonForward:f.daemonForward,workload:null,daemonBootId:f.bootId,tenant:c,ensureOpts:null}}async openAndProbeDaemon(i,t){let u=await this.openForwarder(i,_D,t).catch(()=>null);if(!u)return null;let l=`http://127.0.0.1:${u.localPort}`,n=await tli(l);if(!n)return this.closeForwarder(u),null;return{daemonForward:u,daemonUrl:l,bootId:n.bootId}}async getRecord(i){let t=this.records.get(i);if(t)return t;if(!this.stateStore)return null;let u=await this.stateStore.getByHandle(d_,i);if(!u)return null;let l=await this.rehydrate(u.id,i,u);if(l)this.records.set(i,l);return l}async resurrectByHandle(i){if(!this.stateStore)return null;let t=await this.stateStore.getByHandle(d_,i);if(!t)return null;let u=t.state.ensureOpts;if(!u)return null;return await this.ensure(t.id,u),this.records.get(i)??null}invalidateRecord(i){let t=this.records.get(i);if(!t)return;this.records.delete(i),this.closeForwarder(t.daemonForward)}recordProxyDuration(i,t,u,l,n){if(!this.metrics)return;this.metrics.proxyDurationMs.record(l,{...qut(u?.tenant??null),source:i,sandbox_handle:u?.handle??n??"",status_code:t||0})}composePreviewUrl(i){if(this.previewUrlPattern)return tgi(this.previewUrlPattern,i.handle);return`http://127.0.0.1:${i.daemonForward.localPort}/`}toSandbox(i){return{handle:i.handle,workdir:i.workdir,previewUrl:this.composePreviewUrl(i)}}async persist(i,t){if(!i)return;let u={adoptedSandboxName:t.adoptedSandboxName,token:t.token,workdir:t.workdir,workload:t.workload,daemonBootId:t.daemonBootId,tenant:t.tenant,...t.ensureOpts?{ensureOpts:t.ensureOpts}:{}};await i.put(t.id,d_,{handle:t.handle,state:u})}computeShutdownTime(){return new Date(Date.now()+this.idleTtlMs).toISOString()}openForwarder(i,t,u=i){let l=XU0(u,t);return new Promise((n,f)=>{let c=($,d)=>{let _=EFu.createServer((g)=>this.handleForwardedConnection(g,i,t,u));_.once("error",(g)=>{if(g.code==="EADDRINUSE"&&d<xU0){try{_.close()}catch{}let h=Vut+($-Vut+1)%vFu;c(h,d+1);return}f(g)}),_.listen($,"127.0.0.1",()=>{let g=_.address();if(!g||typeof g==="string"){_.close(),f(Error("port-forward listener failed to bind"));return}n({server:_,localPort:g.port})})};c(l,0)})}handleForwardedConnection(i,t,u,l){let n=new $U0,f=null,c=!1,$=()=>{if(c)return;if(c=!0,n.destroy(),f)try{f.close()}catch{}if(!i.destroyed)i.destroy()};i.pipe(n),i.on("error",$),i.on("close",$),this.portForward.portForward(this.namespace,t,[u],i,null,n).then((d)=>{let _=typeof d==="function"?d():d;if(!_){$();return}if(f=_,f.on("close",$),f.on("error",()=>{this.invalidateRecord(l),$()}),c)try{f.close()}catch{}}).catch((d)=>{console.warn(`[${S4}] port-forward to ${t}:${u} failed: ${dU0(d)}`),this.invalidateRecord(l),$()})}closeForwarder(i){i.server.close((t)=>{if(t)console.warn(`[${S4}] port-forward close on :${i.localPort} errored: ${t instanceof Error?t.message:String(t)}`)})}close(){if(this.closed)return;this.closed=!0,this.claimWatchAbort.abort();for(let i of this.records.values())this.closeForwarder(i.daemonForward);this.records.clear()}}function DU0(i){return{active:i.createUpDownCounter("studio.sandbox.active",{description:"Active sandbox count, by runner kind and owning org. Cross-checks the cAdvisor-derived count from the cluster \u2014 divergence between the two indicates orphaned claims (mesh deleted but K8s didn't reap) or unattributed pods.",unit:"{sandbox}"}),ensureOutcome:i.createCounter("studio.sandbox.ensure.outcome",{description:"Outcome of each ensure() call: fresh provision, resume from state-store after restart, or adopt of a cluster-side claim mesh didn't know about. Cold-start ratio is the primary input for warm-pool sizing.",unit:"{call}"}),proxyDurationMs:i.createHistogram("studio.sandbox.proxy.duration_ms",{description:"Wall-clock latency of mesh-mediated requests to the sandbox daemon: tool exec proxies (source=daemon) and preview iframe traffic (source=preview).",unit:"ms"})}}function OU0(){let i=new zz;return i.loadFromDefault(),i}function gFu(i){return Boolean(i.status?.conditions?.some((t)=>t.type==="Ready"&&t.status==="True"))}function yU0(i){let t=i.spec?.env;if(!t)return null;for(let u of t)if(u.name==="DAEMON_TOKEN"&&u.value)return u.value;return null}function XU0(i,t){let u=nU0("sha256").update(`${i}:${t}`).digest();return Vut+u.readUInt32BE(0)%vFu}function Cut(i,t){return new Response(JSON.stringify(t),{status:i,headers:{"content-type":"application/json","access-control-allow-origin":"*"}})}function hFu(i){let t=i.slice(0,JU0);return NU0.test(t)?t:""}function FU0(i){if(i===void 0)return null;let t=i.trim();if(t==="")return null;if(!UU0.test(t))throw Error(`AgentSandboxProvider: envName=${JSON.stringify(t)} is not a valid DNS-label-safe environment name (lowercase alphanumeric or '-', starts with a letter, ends alphanumeric, \u226432 chars). Mesh sets this from STUDIO_ENV; check the studio chart's configMap.`);return t}function Mut(i,t={}){let u={...t};if(i){let l=hFu(i.orgId),n=hFu(i.userId);if(l)u[k6.orgId]=l;if(n)u[k6.userId]=n}return u}function eY(i){let t="";for(let u of i){let l=u.codePointAt(0)??0;t+=l<32||l===127?" ":u}return t.slice(0,TU0)}function IU0(i){try{let t=new URL(i);return t.username="",t.password="",t.toString()}catch{return""}}function ZU0(i){let t={},u=i.tenant;if(u?.orgSlug)t[$E.orgSlug]=eY(u.orgSlug);if(u?.orgName)t[$E.orgName]=eY(u.orgName);if(u?.userEmail)t[$E.userEmail]=eY(u.userEmail);if(u?.userName)t[$E.userName]=eY(u.userName);let l=i.repo;if(l){if(l.displayName)t[$E.gitRepo]=eY(l.displayName);let n=IU0(l.cloneUrl);if(n)t[$E.gitRepoUrl]=eY(n);let f=i.branch??l.branch;if(f)t[$E.gitBranch]=eY(f)}return t}function BU0(i){let t=i.metadata?.labels;if(!t)return null;let u=t[k6.orgId],l=t[k6.userId];if(!u||!l)return null;let n=i.metadata?.annotations??{};return{orgId:u,userId:l,orgSlug:n[$E.orgSlug],orgName:n[$E.orgName],userEmail:n[$E.userEmail],userName:n[$E.userName]}}function qut(i){return{org_id:i?.orgId??"",user_id:i?.userId??"",runner_kind:d_}}function QU0(i){let t={};if(i.repo)t.repo=i.repo;if(i.workload)t.workload=i.workload;if(i.env&&Object.keys(i.env).length>0)t.env=i.env;if(i.tenant)t.tenant=i.tenant;return Object.keys(t).length>0?t:null}function PU0(i,t){try{return new URL(tgi(i,t)).hostname||null}catch{return null}}var d_="agent-sandbox",S4="AgentSandboxProvider",CY="x-sandbox-preview-not-ready",_U0="agent-sandbox-system",gU0="studio-sandbox",_D=9000,hU0=3000,eut="/app",EU0=32,vU0,rU0=900000,wU0,_Fu,Vut=40000,vFu=1e4,xU0=256,k6,$E,NU0,JU0=63,UU0,TU0=253;var rFu=w(()=>{kut();vGi();ugi();Byi();Ea();dFu();vU0=new Set(["DAEMON_TOKEN","DAEMON_BOOT_ID","APP_ROOT","PROXY_PORT"]),wU0=["cookie","host","connection","keep-alive","proxy-authenticate","proxy-authorization","te","trailer","transfer-encoding","accept-encoding","content-length","upgrade"],_Fu=["connection","keep-alive","transfer-encoding","content-encoding","content-length"];k6={role:"studio.decocms.com/role",sandboxHandle:"studio.decocms.com/sandbox-handle",orgId:"studio.decocms.com/org-id",userId:"studio.decocms.com/user-id",env:"studio.decocms.com/env"},$E={orgSlug:"studio.decocms.com/org-slug",orgName:"studio.decocms.com/org-name",userEmail:"studio.decocms.com/user-email",userName:"studio.decocms.com/user-name",gitRepo:"studio.decocms.com/git-repo",gitRepoUrl:"studio.decocms.com/git-repo-url",gitBranch:"studio.decocms.com/git-branch"},NU0=/^([A-Za-z0-9]([-A-Za-z0-9_.]*[A-Za-z0-9])?)?$/;UU0=/^[a-z]([a-z0-9-]{0,30}[a-z0-9])?$/});var wFu={};Gi(wFu,{waitForSandboxReady:()=>Zyi,getSandboxClaim:()=>P2,getHttpRoute:()=>tFu,deleteSandboxClaim:()=>dD,deleteHttpRoute:()=>Iyi,createSandboxClaim:()=>ra,applyHttpRoute:()=>Tyi,SandboxTimeoutError:()=>RY,SandboxError:()=>hc,PREVIEW_NOT_READY_HEADER:()=>CY,KubeConfig:()=>zz,K8S_CONSTANTS:()=>V1,HTTPROUTE_CONSTANTS:()=>wa,AgentSandboxProvider:()=>aut});var mut=w(()=>{kut();Ea();Byi();rFu()});class Pyi{kind=gD;userSub;dispatch;stateStore;records=new Map;constructor(i){if(!i.userSub)throw Error("DesktopSandboxProvider requires userSub");if(!i.dispatch)throw Error("DesktopSandboxProvider requires dispatch");this.userSub=i.userSub,this.dispatch=i.dispatch,this.stateStore=i.stateStore??null}async ensure(i,t={}){let u=t.branch??t.repo?.branch,l=a5(i,u),n=this.records.get(l);if(n){if(await this.probeHealth(l))return this.toSandbox(n);if(this.records.delete(l),this.stateStore)await this.stateStore.deleteByHandle(gD,l).catch(()=>{})}else if(this.stateStore){let E=(await this.stateStore.getByHandle(gD,l))?.state,v=E?.sandboxApiUrl;if(v){if(await this.probeHealth(l)){let r={handle:l,sandboxApiUrl:v,previewUrl:E?.previewUrl??v};return this.records.set(l,r),this.toSandbox(r)}await this.stateStore.deleteByHandle(gD,l).catch(()=>{})}}let f=p6({userName:t.tenant?.userName,userEmail:t.tenant?.userEmail}),c=JSON.stringify({handle:l,repo:t.repo,branch:u,...t.workload?{workload:t.workload}:{},...f?{operator:f}:{},...t.offloadAllowedHosts?{offloadAllowedHosts:t.offloadAllowedHosts}:{},...t.offloadAllowSameHostDev!==void 0?{offloadAllowSameHostDev:t.offloadAllowSameHostDev}:{},...t.orgFsConfigJson?{orgFsConfigJson:t.orgFsConfigJson}:{}}),$=await this.dispatchJson("POST","/api/sandboxes",c),d=JSON.parse($);if(typeof d.sandboxApiUrl!=="string")throw Error("desktop ensure: daemon did not return a sandboxApiUrl string");let _=typeof d.previewUrl==="string"?d.previewUrl:d.sandboxApiUrl,g={handle:l,sandboxApiUrl:d.sandboxApiUrl,previewUrl:_};if(this.records.set(l,g),this.stateStore)await this.stateStore.put(i,gD,{handle:l,state:{handle:l,sandboxApiUrl:d.sandboxApiUrl,previewUrl:_}});return this.toSandbox(g)}async proxyDaemonRequest(i,t,u){let l=t.startsWith("/")?t:`/${t}`,n=l.startsWith("/_sandbox/")?l.slice(9):l,f=`/_sandbox/${encodeURIComponent(i)}${n}`,c=new Headers(u.headers);for(let y of["host","cookie","connection","keep-alive","transfer-encoding","upgrade","authorization"])c.delete(y);let $={};c.forEach((y,X)=>{$[X]=y});let d;if(u.body!=null)d=await AU0(u.body);let g=this.dispatch(this.userSub,{method:u.method,path:f,headers:$,body:d},{signal:u.signal})[Symbol.asyncIterator](),h=YU0(),E=200,v={"content-type":"application/octet-stream"},r=[];try{while(!0){let y=await g.next();if(y.done)break;let X=y.value;if(X.headers){E=X.headers.status,v=X.headers.headers;break}if(X.data!=null){let N=h.push(X.data);if(N.length)r.push(N)}}}catch(y){let X=y instanceof Error?y.message:"dispatch error";return new Response(JSON.stringify({error:X}),{status:502,headers:{"content-type":"application/json"}})}let x=!1,O=new ReadableStream({async start(y){for(let X of r)y.enqueue(X)},async pull(y){try{while(!0){let X=await g.next();if(x)return;if(X.done){let U=h.flush();if(U.length)y.enqueue(U);y.close();return}let N=X.value;if(N.data!=null){let U=h.push(N.data);if(U.length){y.enqueue(U);return}}}}catch(X){if(!x)y.error(X)}},cancel(){x=!0,g.return?.()}});return new Response(O,{status:E,headers:v})}async alive(i){return this.probeHealth(i)}async probeHealth(i){let t=new AbortController,u=setTimeout(()=>t.abort(),3000);try{return await this.dispatchJson("GET",`/api/sandboxes/${encodeURIComponent(i)}`,void 0,t.signal),!0}catch{return!1}finally{clearTimeout(u)}}async forgetHandle(i){if(this.records.delete(i),this.stateStore)await this.stateStore.deleteByHandle(gD,i).catch(()=>{})}async delete(i){if(this.records.delete(i),this.stateStore)await this.stateStore.deleteByHandle(gD,i).catch(()=>{});try{await this.dispatchJson("DELETE",`/api/sandboxes/${encodeURIComponent(i)}`)}catch(t){if(!(t instanceof Error?t.message:String(t)).includes("404"))throw t}}async getPreviewUrl(i){return(await this.resolveRecord(i))?.previewUrl??null}async localWorkdir(i){return null}async*watchClaimLifecycle(i,t){yield{kind:"ready"}}toSandbox(i){return{handle:i.handle,workdir:i.sandboxApiUrl,previewUrl:i.previewUrl}}async resolveRecord(i){let t=this.records.get(i);if(t)return t;if(!this.stateStore)return null;let l=(await this.stateStore.getByHandle(gD,i))?.state,n=l?.sandboxApiUrl;if(!n)return null;let f={handle:i,sandboxApiUrl:n,previewUrl:l?.previewUrl??n};return this.records.set(i,f),f}async dispatchJson(i,t,u,l){let n={accept:"application/json"};if(u!==void 0)n["content-type"]="application/json";let f=this.dispatch(this.userSub,{method:i,path:t,headers:n,body:u},{signal:l}),c=null,$="";for await(let _ of f)if(_.headers)c=_.headers.status;else if(_.data!=null)$+=_.data;let d=Buffer.from($,"base64").toString("utf8");if(c!=null&&(c<200||c>=300))throw Error(`daemon returned ${c}: ${d}`);return d}}function xFu(i){return new Pyi(i)}function YU0(){let i="";return{push(t){if(t.length===0)return out;i+=t;let u=i.length-i.length%4;if(u===0)return out;let l=i.slice(0,u);return i=i.slice(u),new Uint8Array(Buffer.from(l,"base64"))},flush(){if(i.length===0)return out;let t=i;return i="",new Uint8Array(Buffer.from(t,"base64"))}}}async function AU0(i){if(typeof i==="string")return i;if(i instanceof ArrayBuffer)return Buffer.from(i).toString("utf8");if(ArrayBuffer.isView(i))return Buffer.from(i.buffer,i.byteOffset,i.byteLength).toString("utf8");if(i instanceof URLSearchParams)return i.toString();return await new Response(i).text()}var gD="user-desktop",out;var DFu=w(()=>{ugi();pui();out=new Uint8Array(0)});var OFu={};Gi(OFu,{createDesktopProvider:()=>xFu,DesktopSandboxProvider:()=>Pyi});var yFu=w(()=>{DFu()});var TFu={};Gi(TFu,{subscribeLifecycle:()=>xa,getSandboxProviderByKind:()=>put,getOrInitSharedRunner:()=>KU0,buildDesktopProvider:()=>Yyi,__resetSharedLifecyclesForTesting:()=>CU0});function UFu(i,t){let u=XFu[i];if(u)return Promise.resolve(u);let l=sut[i];if(l)return l;let n=t().then((f)=>{return XFu[i]=f,f}).finally(()=>{delete sut[i]});return sut[i]=n,n}function kU0(){let i=process.env.STUDIO_SANDBOX_PREVIEW_URL_PATTERN;return i&&i.trim()!==""?i:void 0}function jU0(){let i=process.env.STUDIO_SANDBOX_TEMPLATE_NAME;return i&&i.trim()!==""?i:void 0}function SU0(){let i=process.env.STUDIO_ENV;return i&&i.trim()!==""?i:void 0}function zU0(){let i=process.env.STUDIO_SANDBOX_SENTINEL_TOKEN;return i&&i.trim()!==""?i:void 0}function bU0(){let i=process.env.STUDIO_SANDBOX_PREVIEW_GATEWAY_NAME?.trim(),t=process.env.STUDIO_SANDBOX_PREVIEW_GATEWAY_NAMESPACE?.trim();if(!i&&!t)return;if(!i||!t)throw Error("STUDIO_SANDBOX_PREVIEW_GATEWAY_NAME and STUDIO_SANDBOX_PREVIEW_GATEWAY_NAMESPACE must both be set, or both unset. Half-configured per-claim HTTPRoute routing would silently fail to attach.");return{name:i,namespace:t}}async function FFu(i,t){let u=new o5(t),l=kU0();switch(i){case"agent-sandbox":{let{AgentSandboxProvider:n}=await Promise.resolve().then(() => (mut(),wFu));return new n({stateStore:u,previewUrlPattern:l,sandboxTemplateName:jU0(),envName:SU0(),previewGateway:bU0(),sentinelToken:zU0(),meter:lf})}case"user-desktop":throw Error("user-desktop provider cannot be instantiated without a per-run link claim \u2014 call resolveSandboxProvider, which binds the link before constructing the provider.");default:throw Error(`Unknown sandbox provider kind: ${String(i)}`)}}async function Yyi(i,t){let{DesktopSandboxProvider:u}=await Promise.resolve().then(() => (yFu(),OFu)),{getProxyDispatch:l}=await Promise.resolve().then(() => (tlt(),ilt)),n=new o5(i.db);if(!t)throw Error("buildDesktopProvider: userSub must be a non-empty string");let f=l();return new u({userSub:t,dispatch:f,stateStore:n})}function put(i,t){return UFu(t,()=>FFu(t,i.db))}async function KU0(){let i;try{i=Vv()}catch(u){return console.warn("[lifecycle] cannot resolve sandbox runner:",u instanceof Error?u.message:String(u)),null}return await UFu(i,()=>FFu(i,U0().db))}function xa(i,t,u){let l=hD.get(t);if(l){if(l.terminated){if(l.lastPhase)try{u(l.lastPhase)}catch{}return{unsubscribe:LU0}}if(l.listeners.add(u),l.lastPhase)try{u(l.lastPhase)}catch{}return NFu(t,l,u)}let n=new AbortController,f={lastPhase:null,terminated:!1,listeners:new Set([u]),abort:n};return hD.set(t,f),eU0(i,t,f),NFu(t,f,u)}function LU0(){}function NFu(i,t,u){return{unsubscribe(){if(hD.get(i)!==t)return;if(t.listeners.delete(u),t.listeners.size===0)hD.delete(i),t.abort.abort()}}}async function eU0(i,t,u){let l=null;try{for await(let n of i.watchClaimLifecycle(t,u.abort.signal)){if(u.abort.signal.aborted)break;u.lastPhase=n;let f=n.kind==="ready"||n.kind==="failed";if(f)u.terminated=!0;let c=Array.from(u.listeners);for(let $ of c)try{$(n)}catch{}if(f)break}}catch(n){l=n}finally{if(!u.terminated&&!u.abort.signal.aborted&&u.listeners.size>0){let n={kind:"failed",reason:"unknown",message:l instanceof Error?l.message:"Lifecycle watcher ended unexpectedly"};u.lastPhase=n,u.terminated=!0;for(let f of Array.from(u.listeners))try{f(n)}catch{}}if(hD.get(t)===u)hD.delete(t)}}function CU0(){for(let i of hD.values())i.abort.abort();hD.clear()}var GU0,WU0,JFu,XFu,sut,HU0,RU0,hD;var Da=w(()=>{_g();j$();p1();dgi();GU0=Symbol.for("decocms.sandbox.lifecycle.runners"),WU0=Symbol.for("decocms.sandbox.lifecycle.inflight"),JFu=globalThis,XFu=JFu[GU0]??={},sut=JFu[WU0]??={};HU0=Symbol.for("decocms.sandbox.lifecycle.shared-lifecycles"),RU0=globalThis,hD=RU0[HU0]??=new Map});async function Ayi(i,t){if(await t.linkClaimRegistry.get(i))return"user-desktop";return t.resolveEnvKind()}async function dE(i,t){let{userId:u,branch:l,virtualMcpMetadata:n,explicitKind:f}=t;if(f)return{provider:await Oa(i,u,f),kind:f};if(i.sandboxPreference==="agent-sandbox")return{provider:await Oa(i,u,"agent-sandbox"),kind:"agent-sandbox"};if(i.sandboxPreference==="user-desktop"&&i.linkForCurrentRun)return{provider:await Yyi(i,u),kind:"user-desktop"};if(i.sandboxPreference==="cluster-default"){let g=Vv();return{provider:await Oa(i,u,g),kind:g}}let[c,...$]=MU0(n,u,l);if(c){let g=$.length===0?c:await qU0(i,u,c,$);return{provider:await Oa(i,u,g),kind:g}}let d=await IFu(i,u);return{provider:await Oa(i,u,d),kind:d}}function MU0(i,t,u){let l=gg(i)[t]?.[u];if(!l)return[];let n=v3(l);return Object.keys(n)}async function qU0(i,t,u,l){let n=await IFu(i,t);if(n===u||l.includes(n))return n;return u}async function IFu(i,t){if(!i.linkClaimRegistry)return Vv();return Ayi(t,{linkClaimRegistry:i.linkClaimRegistry,resolveEnvKind:Vv})}async function Oa(i,t,u){if(u!=="user-desktop")return put(i,u);if(!i.linkClaimRegistry)throw Error("user-desktop sandbox provider requires ctx.linkClaimRegistry to be wired (set on StudioContextConfig).");if(!await i.linkClaimRegistry.get(t))throw Error(`No link daemon registered for user "${t}". Start one with \`deco link\` (or run \`bun run dev --local-sandbox-provider\` for dev).`);return Yyi(i,t)}var Lz=w(()=>{kl();_g();U2();Da()});async function Gyi(i,t){if(!i)return{hosts:[],allowSameHostDev:!1};let u;try{u=await i.presignedGetUrl("link-dispatch/_allowlist_probe",60,{requireFetchable:!0})}catch{return{hosts:[],allowSameHostDev:!1}}let l;try{l=new URL(u)}catch{return{hosts:[],allowSameHostDev:!1}}if(l.protocol!=="https:"&&l.protocol!=="http:")return{hosts:[],allowSameHostDev:!1};let n=l.hostname,f=VU0.has(n);return{hosts:[n],allowSameHostDev:f&&!t.isProduction}}var VU0;var ult=w(()=>{VU0=new Set(["127.0.0.1","localhost","::1","[::1]","0.0.0.0"])});function ez(i){if(aU0.has(i)||!mU0.test(i))return"home";return i}var aU0,mU0;var Wyi=w(()=>{aU0=new Set(["output","upload","public","home"]),mU0=/^[A-Za-z0-9][A-Za-z0-9._-]*$/});function iF0(i){return{baseUrl:i.baseUrl.replace(/\/+$/,""),orgSlug:i.orgSlug,token:i.token,mounts:[{volume:"home",path:ez(i.orgSlug)},...pU0.map((t)=>({...t})),...(i.publicSets??[]).map((t)=>({volume:B1i(t),path:`public/${t}`,readonly:!0}))]}}async function kyi(i,t){try{let u=await i.boundAuth.apiKey.create({name:`orgfs-${t.orgSlug}`,expiresIn:tF0,metadata:{organization:{id:t.orgId,slug:t.orgSlug}}});return JSON.stringify(iF0({baseUrl:t.baseUrl,orgSlug:t.orgSlug,token:u.key,publicSets:Th().map((l)=>l.set)}))}catch(u){console.warn("[org-fs] token mint failed; mounts disabled for this sandbox",u);return}}var oU0=".outputs",sU0=".uploads",pU0,tF0=604800;var llt=w(()=>{Wyi();Hk();pU0=[{volume:"outputs",path:oU0},{volume:"uploads",path:sU0}]});import{z as ir}from"zod";async function ZFu(i,t){Ji(t);let u=hi(t),l=Ou(t);if(!l)throw Error("User ID required");let n=await t.storage.virtualMcps.findById(i.virtualMcpId);if(!n||n.organization_id!==u.id)throw Error("Virtual MCP not found");let f=n.metadata??{},c=J2(gg(f),l,i.branch,i.sandboxProviderKind),$=i.sandboxProviderKind,{provider:d}=await dE(t,{userId:l,branch:i.branch,virtualMcpMetadata:f,explicitKind:$});if(c){if($!=="user-desktop")return c;if(await d.alive(c.sandboxHandle).catch(()=>!1))return c;await m5(t.storage.virtualMcps,i.virtualMcpId,l,l,i.branch,$).catch((E)=>{console.warn("[ensureSandbox] failed to reap stale user-desktop entry",E)})}let _=f.githubRepo??null,{entry:g}=await BFu({ctx:t,userId:l,orgId:u.id,virtualMcpId:i.virtualMcpId,branch:i.branch,metadata:f,githubRepo:_,existing:null,providerKind:$,runner:d});return g}async function BFu(i){let{ctx:t,userId:u,orgId:l,virtualMcpId:n,branch:f,metadata:c,githubRepo:$,existing:d,runner:_}=i,{runtime:g,packageManager:h,port:E,packageManagerPath:v}=lgi(c),r;if($){if($.connectionId)await Iz({ctx:t,connectionId:$.connectionId,organizationId:l,onLegacyMintError:(p)=>{console.error("[provisionSandbox] repo-scoped legacy token mint failed",{connectionId:$.connectionId,error:p.message})}});let{cloneUrl:a,gitUserName:z,gitUserEmail:M}=$.connectionId?await Zz($.connectionId,$.owner,$.name,t.db,t.vault):fgi($.owner,$.name);if(!h){let p=$.connectionId?await ryu($.connectionId,$.owner,$.name,t.db,t.vault):await wyu($.owner,$.name);if(p)h=p.packageManager,g=CV[p.packageManager].runtime,E=p.devPort??E,await lF0(t,n,u,p.packageManager,p.devPort)}r={cloneUrl:a,userName:z,userEmail:M,branch:f,displayName:`${$.owner}/${$.name}`}}let x=g&&h?{runtime:g,packageManager:h,...E!==null?{devPort:Number(E)}:{},...v?{packageManagerPath:v}:{}}:void 0,O=N2({orgId:l,virtualMcpId:n,branch:f}),y=_.kind==="user-desktop"?await Gyi(t.objectStorage,{isProduction:Zt().nodeEnv==="production"}):null,X=_.kind==="user-desktop"||_.kind==="agent-sandbox"&&Zt().orgFsClusterMounts,N;if(X){let a=t.organization?.slug??(await t.db.selectFrom("organization").select(["slug"]).where("id","=",l).executeTakeFirst())?.slug;if(a)N=await kyi(t,{orgSlug:a,orgId:l,baseUrl:BE()})}let U=await _.ensure({userId:u,projectRef:O},{branch:f,repo:r,workload:x,tenant:{orgId:l,userId:u,...t.organization?.slug?{orgSlug:t.organization.slug}:{},...t.organization?.name?{orgName:t.organization.name}:{},...t.auth.user?.email?{userEmail:t.auth.user.email}:{},...t.auth.user?.name?{userName:t.auth.user.name}:{}},...y?{offloadAllowedHosts:y.hosts,offloadAllowSameHostDev:y.allowSameHostDev}:{},...N?{orgFsConfigJson:N}:{}}),J=c.runtime?.env??null;await ngi({ctx:t,runner:_,handle:U.handle,orgId:l,userId:u,entries:J});let Q=!!d&&d.sandboxHandle===U.handle&&d?.createdAt?d.createdAt:Date.now(),B=c.runtime?.selected??null,Y=c.runtime?.port??null,H=c.runtime?.path??null,j={sandboxHandle:U.handle,previewUrl:U.previewUrl,sandboxApiUrl:U.previewUrl,sandboxProviderKind:_.kind,createdAt:Q,startedWith:{packageManager:B,port:Y,path:H}};await _yu(t.storage.virtualMcps,n,u,u,f,i.providerKind,j);let k=!d||d.sandboxHandle!==U.handle;return{entry:j,isNewVm:k}}async function lF0(i,t,u,l,n){let f=await i.storage.virtualMcps.findById(t);if(!f)return;let c=f.metadata??{};await i.storage.virtualMcps.update(t,u,{metadata:{...c,runtime:{selected:l,port:n}}})}var uF0,nlt;var flt=w(()=>{_g();ai();MV();Rit();U2();cgi();Dyu();aoi();Hit();Lz();ult();h0();Ud();llt();U2();uF0=ir.enum(["agent-sandbox","user-desktop","cluster"]),nlt=li({name:"SANDBOX_START",description:"Start a sandbox with the connected GitHub repo and dev server.",annotations:{title:"Start VM Preview",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:ir.object({virtualMcpId:ir.string().describe("Virtual MCP ID"),branch:ir.string().min(1).optional().describe("Optional git branch to check out. When omitted the handler generates a Bayer-style `<greek-letter>-<constellation>` name (e.g. `alpha-centauri`) and uses it. The resolved branch is returned in the response so callers can persist it."),sandboxProviderKind:uF0.optional().describe("Explicit runtime choice. Hosted provider is `agent-sandbox`; legacy `cluster` input is accepted only for compatibility and normalized to `agent-sandbox`. When omitted, defaults to `user-desktop` if the acting user's link daemon is online, else the env kind.")}),outputSchema:ir.object({previewUrl:ir.string().nullable(),sandboxHandle:ir.string(),branch:ir.string(),isNewVm:ir.boolean(),sandboxProviderKind:ir.enum(["agent-sandbox","user-desktop"])}),handler:async(i,t)=>{Ji(t);let u=hi(t);await t.access.check();let l=i.branch??Kdi(),n=Ou(t);if(!n)throw Error("User ID required");let f=await t.storage.virtualMcps.findById(i.virtualMcpId);if(!f||f.organization_id!==u.id)throw Error("Virtual MCP not found");let c=f.metadata??{},$=i.sandboxProviderKind?X2(i.sandboxProviderKind):void 0,{provider:d,kind:_}=await dE(t,{userId:n,branch:l,virtualMcpMetadata:c,explicitKind:$}),g=J2(gg(c),n,l,_),h=c.githubRepo??null,{entry:E,isNewVm:v}=await BFu({ctx:t,userId:n,orgId:u.id,virtualMcpId:i.virtualMcpId,branch:l,metadata:c,githubRepo:h,existing:g,providerKind:_,runner:d});return{...E,branch:l,isNewVm:v,sandboxProviderKind:_}}})});import{z as Cz}from"zod";var nF0,clt;var QFu=w(()=>{_g();ai();MV();U2();Lz();nF0=Cz.enum(["agent-sandbox","user-desktop","cluster"]),clt=li({name:"SANDBOX_DELETE",description:"Delete a sandbox.",annotations:{title:"Delete VM Preview",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:Cz.object({virtualMcpId:Cz.string().describe("Virtual MCP ID that owns this VM"),branch:Cz.string().min(1).describe("Branch whose vm should be deleted (sandboxMap[userId][branch])"),sandboxProviderKind:nF0.describe("Kind of sandbox provider the VM was started with. Hosted provider is `agent-sandbox`; legacy `cluster` input is accepted only for compatibility and normalized to `agent-sandbox`. Used to locate the correct 3-level sandboxMap entry.")}),outputSchema:Cz.object({success:Cz.boolean()}),handler:async(i,t)=>{let u=X2(i.sandboxProviderKind),l;try{l=await hyu({...i,sandboxProviderKind:u},t)}catch($){if($ instanceof Error&&$.message==="Virtual MCP not found")return{success:!0};throw $}let{entry:n,userId:f}=l;if(!n)return{success:!0};let{provider:c}=await dE(t,{userId:f,branch:i.branch,virtualMcpMetadata:l.metadata,explicitKind:u});return await m5(t.storage.virtualMcps,i.virtualMcpId,f,f,i.branch,u),await c.delete(n.sandboxHandle).catch(($)=>console.error(`[SANDBOX_DELETE] ${u} ${n.sandboxHandle}: ${$ instanceof Error?$.message:String($)}`)),{success:!0}}})});var PFu=w(()=>{flt();QFu()});import{z as tr}from"zod";var cF0="https://api.github.com",$lt;var YFu=w(()=>{ai();My();eS();Wv();$lt=li({name:"GITHUB_LIST_USER_ORGS",description:"List GitHub App installations (orgs/accounts) accessible to the authenticated user.",annotations:{title:"List GitHub User Orgs",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:tr.object({connectionId:tr.string().describe("ID of the mcp-github connection to use")}),outputSchema:tr.object({installations:tr.array(tr.object({installationId:tr.number(),login:tr.string(),avatarUrl:tr.string(),type:tr.string()})),appSlug:tr.string().optional()}),handler:async(i,t)=>{await t.access.check();let u=t.organization?.id;if(!u)throw Error("Organization context required");let l=await t.storage.connections.findById(i.connectionId,u);if(!l)throw Error("Connection not found");if(kv(l))throw Error("Repo-scoped connections cannot list installations \u2014 use an org-level mcp-github connection");let n=new C1(t.db,t.vault),f=await n.get(i.connectionId);if(!f)throw Error("No GitHub token found. Ensure the mcp-github connection is authenticated.");let c=f.accessToken;if(Idi(f)&&n.isExpired(f,oq)){let E=await Zdi(f,n);if(!E)throw Error(D$);c=E,f=await n.get(i.connectionId)??f}let $=[],d,_=1,g=100,h=async(E)=>fetch(`${cF0}/user/installations?per_page=${g}&page=${_}`,{headers:{Authorization:`Bearer ${E}`,Accept:"application/vnd.github+json","X-GitHub-Api-Version":"2022-11-28"}});while(!0){let E=await h(c);if(E.status===401){let r=await n.get(i.connectionId);if(!r||!Idi(r))throw Error(D$);let x=await Zdi(r,n);if(!x)throw Error(D$);if(c=x,E=await h(c),E.status===401)throw Error(D$)}if(!E.ok)throw Error(`GitHub /user/installations failed: ${E.status}`);let v=await E.json();for(let r of v.installations){if(!d)d=r.app_slug??r.app?.slug;$.push({installationId:r.id,login:r.account.login,avatarUrl:r.account.avatar_url,type:r.account.type})}if(v.installations.length<g)break;_++}return{installations:$,...d?{appSlug:d}:{}}}})});var AFu=w(()=>{YFu()});import MY from"zod";var dlt;var GFu=w(()=>{g0i();ai();dlt=li({name:"LINK_CURRENT_GET",description:"Return the calling user's currently registered desktop link, or `online: false` if no link is registered or the TTL has expired.",inputSchema:MY.object({}),outputSchema:MY.object({online:MY.boolean(),machineId:MY.string().optional(),hostname:MY.string().optional(),cliVersion:MY.string().optional(),capabilities:MY.array(uki).default([])}),handler:async(i,t)=>{Ji(t),await t.access.check();let u=t.linkClaimRegistry;if(!u)return{online:!1,capabilities:[]};let l=await u.get(t.auth.user.id);if(!l)return{online:!1,capabilities:[]};return{online:!0,machineId:l.machineId,hostname:l.hostname,cliVersion:l.cliVersion,capabilities:l.capabilities}}})});import _lt from"zod";var glt;var WFu=w(()=>{ai();glt=li({name:"LINK_DISCONNECT",description:"Disconnect the calling user's desktop link from the Studio side: tells the linked daemon to shut down (via a `shutdown` control frame) and removes the presence claim. The user re-links by running `bunx decocms link` on the desktop.",inputSchema:_lt.object({}),outputSchema:_lt.object({disconnected:_lt.boolean()}),handler:async(i,t)=>{Ji(t),await t.access.check();let u=t.auth.user.id,l=t.linkClaimRegistry;if(!(l?await l.get(u):null))return{disconnected:!1};return t.publishLinkControlFrame?.(u,{type:"shutdown"}),await l.delete(u),{disconnected:!0}}})});var kFu=w(()=>{GFu();WFu()});import{z as Ec}from"zod";function jFu(i){if(!i)return"";return typeof i==="string"?i:i.toISOString()}var _F0,gF0,hF0,EF0,vF0,hlt;var SFu=w(()=>{ai();_F0=["thread"],gF0=Ec.object({type:Ec.literal("thread"),id:Ec.string(),title:Ec.string(),created_at:Ec.string(),updated_at:Ec.string(),virtual_mcp_id:Ec.string().nullable(),run_config:Ec.record(Ec.string(),Ec.unknown()).nullable(),status:Ec.string().nullable()}),hF0=Ec.discriminatedUnion("type",[gF0]),EF0=Ec.object({query:Ec.string().min(1).describe("Free-text search query."),limit:Ec.number().int().min(1).max(50).optional().describe("Maximum results per resource type (default: 20)."),types:Ec.array(Ec.enum(_F0)).optional().describe("Restrict the search to specific resource types. Omit to search across all available types.")}),vF0=Ec.object({items:Ec.array(hF0),totalCount:Ec.number()});hlt=li({name:"GLOBAL_SEARCH",description:"Search across organization resources by free-text query. Returns a typed union of matches (currently: threads). New resource types may be added over time without changes to the call shape.",annotations:{title:"Global Search",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:EF0,outputSchema:vF0,handler:async(i,t)=>{await t.access.check(),hi(t);let u=i.limit??20,l=i.types?.length?new Set(i.types):null,n=!l||l.has("thread"),f=[],c=0;if(n){let{threads:$,total:d}=await t.storage.threads.list(void 0,{limit:u,offset:0,search:i.query,includeArchived:!1});c+=d;for(let _ of $)f.push({type:"thread",id:_.id,title:_.title??"",created_at:jFu(_.created_at),updated_at:jFu(_.updated_at),virtual_mcp_id:_.virtual_mcp_id??null,run_config:_.run_config??null,status:_.status??null})}return{items:f,totalCount:c}}})});var zFu=w(()=>{SFu()});var Adi={};Gi(Adi,{managementMCP:()=>fz,managementContextStore:()=>i7,listManagementTools:()=>DF0,ALL_TOOLS:()=>KFu});import{z as bFu}from"zod";async function DF0(i){let t=await fz(i),[u,l]=ae.createLinkedPair();await t.connect(l);let n=new N1({name:"tools-hydration",version:"1.0.0"},{jsonSchemaValidator:af});try{return await n.connect(u),(await n.listTools()).tools}finally{await n.close().catch(()=>{}),await t.close().catch(()=>{})}}var wF0,xF0,KFu,fz=async(i)=>{let t=null;if(i.organization){let c=await i.storage.organizationSettings.get(i.organization.id),$=await i.storage.virtualMcps.listEnabledPlugins(i.organization.id),d=new Set(c?.enabled_plugins??[]);for(let _ of $)d.add(_);t=d.size>0?[...d]:null}let u=qot(KFu,t),l=new r3({name:"mcp-cms-management",version:"1.0.0"},{capabilities:{tools:{},prompts:{},resources:{}},jsonSchemaValidator:af});for(let c of u){let{config:$,handler:d}=L2u(c);l.registerTool(c.name,$,d)}let n=O_i();for(let c of n){let $=c.arguments?.length?Object.fromEntries(c.arguments.map((d)=>{let _=d.required?bFu.string():bFu.string().optional();return[d.name,d.description?_.describe(d.description):_]})):void 0;l.registerPrompt(c.name,{title:c.title,description:c.description,...$?{argsSchema:$}:{}},(d)=>{return{messages:[{role:"user",content:{type:"text",text:typeof c.text==="function"?c.text(d??{}):c.text}}]}})}if(i.organization?.id){let c=await i.storage.brandContext.list(i.organization.id),$=new Set;for(let d of c){let _=d.name.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,""),g=_?`brand-${_}`:`brand-${d.id}`;if($.has(g))g=`${g}-${d.id.slice(0,8)}`;$.add(g);let h=[`# Brand: ${d.name}`,"",`**Domain:** ${d.domain}`,"","## Overview",d.overview];if(d.colors){let v=Object.entries(d.colors).filter(([,r])=>r);if(v.length>0){h.push("","## Colors");for(let[r,x]of v)h.push(`- **${r}:** ${x}`)}}if(d.fonts){let v=Object.entries(d.fonts).filter(([,r])=>r);if(v.length>0){h.push("","## Fonts");for(let[r,x]of v)h.push(`- ${x} (${r})`)}}if(d.logo)h.push("",`**Logo:** ${d.logo}`);if(d.favicon)h.push(`**Favicon:** ${d.favicon}`);if(d.ogImage)h.push(`**OG Image:** ${d.ogImage}`);if(d.images&&d.images.length>0){h.push("","## Images");for(let v of d.images){let r=Object.entries(v).map(([x,O])=>`${x}: ${O}`).join(", ");h.push(`- ${r}`)}}let E=h.join(`
107889
107889
  `);l.prompt(g,`Brand context for ${d.name}`,()=>({messages:[{role:"user",content:{type:"text",text:E}}]}))}}let f=H2u();for(let c of f)l.resource(c.name,c.uri,{description:c.description,mimeType:c.mimeType??"text/markdown"},async($)=>{return{contents:[{uri:typeof $==="string"?$:$.href,mimeType:c.mimeType??"text/markdown",text:c.text}]}});return l};var mS=w(()=>{le();yh();vL();V$();Jnu();Bvu();Avu();Rvu();tru();cru();Bru();Wru();mru();G3u();k3u();n2u();$2u();x2u();O2u();_pi();gpi();gpi();rwu();fyu();PFu();AFu();kFu();zFu();wF0=[Xoi,Noi,Joi,Uoi,Foi,Toi,Ioi,Zoi,Boi,Qoi,Poi,Yoi,Goi,Woi,koi,joi,Soi,zoi,boi,Koi,Hoi,Roi,Loi,kCi,Lmi,emi,Mmi,qmi,Vmi,loi,foi,$oi,_oi,hoi,Yvu,xoi,Doi,Ooi,yoi,ZCi,QCi,PCi,BCi,ami,mmi,omi,smi,pmi,ioi,toi,ksi,moi,ooi,soi,isi,tsi,usi,eoi,Coi,Moi,qoi,Voi,lsi,nsi,fsi,Bsi,Qsi,Psi,Ysi,Asi,Gsi,Wsi,Eoi,voi,roi,woi,jsi,bsi,Ksi,Hsi,Rsi,Lsi,esi,Csi,Msi,qsi,Vsi,asi,msi,ssi,psi,ipi,upi,lpi,npi,dpi,D2u,hpi,Epi,vpi,rpi,wpi,xpi,...nyu,nlt,clt,$lt,dlt,glt,hlt],xF0=Vot(),KFu=[...wF0,...xF0]});import{z as HFu}from"zod";function OF0(i){return[{permissions:{self:["*"]},getTools:async()=>{let{ALL_TOOLS:t}=await Promise.resolve().then(() => (mS(),Adi));return t.map((u)=>{return{name:u.name,inputSchema:HFu.toJSONSchema(u.inputSchema,{unrepresentable:"any"}),outputSchema:u.outputSchema?HFu.toJSONSchema(u.outputSchema,{unrepresentable:"any"}):void 0,description:u.description}})},data:FKi(Hc(),i)},{data:UKi()},{data:JKi(i)}]}async function RFu(i,t){try{let u=U0(),l=Zt(),n=new eO(l.encryptionKey),f=new ee(u.db,n),c=OF0(i);await Promise.all(c.map(async($)=>{let d=null;if($.permissions)d=(await an.api.createApiKey({body:{name:`${$.data.app_name??crypto.randomUUID()}-mcp`,userId:t,permissions:$.permissions,rateLimitEnabled:!1,metadata:{organization:{id:i},purpose:"default-org-connections"}}}))?.key;let _=await bx({id:"pending",title:$.data.title,connection_type:$.data.connection_type,connection_url:$.data.connection_url,connection_token:$.data.connection_token??d,connection_headers:$.data.connection_headers}).catch(()=>null),g=await $.getTools?.()??_?.tools??null,h=_?.scopes?.length?_.scopes:null,E=$.data.id?$.data.id.startsWith(`${i}_`)?$.data.id:`${i}_${$.data.id}`:void 0;await f.create({...$.data,id:E,tools:g,configuration_scopes:h,organization_id:i,created_by:t,connection_token:$.data.connection_token??d})}));try{await ICi({orgId:i,createdBy:t})}catch($){console.error("Failed to enqueue studio pack install:",$)}if(l.aiGatewayEnabled&&l.studioProvisionSecretKey&&He.provisionKey)try{let $=await Kx(t),d=await He.provisionKey($,i);await new Le(u.db,n).upsert({providerId:"deco",label:"Auto-provisioned",apiKey:d,organizationId:i,createdBy:t})}catch($){console.error("Failed to auto-provision Deco AI Gateway key:",$)}}catch(u){console.error("Error creating default MCP connections:",u)}}var LFu=w(()=>{kl();nCi();Ud();j$();Yci();cCi();hCi();Me();h0();h2();bci();qO()});async function eFu(i,t){let u=S$();if(!u)return t;let l=await U0().db.selectFrom("organization").select("slug").where("id","=",i).executeTakeFirst();if(!l?.slug)return t;return await nW({objectStorage:T_(u,i),baseUrl:Hc(),orgSlug:l.slug,prefix:"org-logos"})(t)??t}var CFu=w(()=>{j$();jw();Mui();Ud()});function yF0(i,t){let u=i.email.split("@")[1]?.toLowerCase()??null;return{distinctId:i.id,properties:{$set:{email:i.email,name:i.name,email_verified:i.emailVerified},$set_once:{first_seen_at:t.toISOString(),signup_email_domain:u}}}}function Elt(i){Nu.identify(yF0(i,new Date))}var MFu=w(()=>{Tf()});import{decodeJwt as XF0}from"jose";import{sql as ya}from"kysely";async function UF0(i){let{user:t,token:u}=i;if(!u?.idToken)return;let l;try{l=XF0(u.idToken)}catch{return}let{preferred_username:n,upn:f}=l,c=[n,f].filter((_)=>typeof _==="string"&&_.length>0&&_.toLowerCase()!==t.email.toLowerCase()).map((_)=>_.toLowerCase());if(c.length===0)return;let{db:$}=U0(),d=await $.selectFrom("user").selectAll().where("email","in",c).where("id","!=",t.id).executeTakeFirst();if(!d)return;try{await $.transaction().execute(async(_)=>{await ya`UPDATE "account" SET "userId" = ${d.id} WHERE "userId" = ${t.id}`.execute(_),await ya`UPDATE "session" SET "userId" = ${d.id} WHERE "userId" = ${t.id}`.execute(_),await ya`
107890
107890
  UPDATE "member" SET "userId" = ${d.id}
107891
107891
  WHERE "userId" = ${t.id}