decocms 4.158.8 → 4.159.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (221) hide show
  1. package/dist/client/assets/{AlertCircle-CcLTLkng.js → AlertCircle-pqmzRzJD.js} +1 -1
  2. package/dist/client/assets/{AreaChart-DN1HqqOc.js → AreaChart-JtTd_Y37.js} +1 -1
  3. package/dist/client/assets/{ArrowUp-BusqDpOX.js → ArrowUp-Cja1iGmu.js} +1 -1
  4. package/dist/client/assets/{ArrowUpRight-C7V7ulJo.js → ArrowUpRight-BLRBShLj.js} +1 -1
  5. package/dist/client/assets/{Check-U3b2DkTc.js → Check-BudCPgEo.js} +1 -1
  6. package/dist/client/assets/{CheckCircle-B2xteS2C.js → CheckCircle-KQ7QLQnq.js} +1 -1
  7. package/dist/client/assets/{ChevronDown-DOwhP31q.js → ChevronDown-CnqZfGUJ.js} +1 -1
  8. package/dist/client/assets/{ChevronRight-Dyg5U1pu.js → ChevronRight-jWXQxAxT.js} +1 -1
  9. package/dist/client/assets/{ChevronUp-_cXYt63P.js → ChevronUp-D-1ZRQa8.js} +1 -1
  10. package/dist/client/assets/{Copy01-BOnAtrb2.js → Copy01-DKpWfuyL.js} +1 -1
  11. package/dist/client/assets/{CpuChip01-m5nf2JoX.js → CpuChip01-BFj5zMEs.js} +1 -1
  12. package/dist/client/assets/{DotsVertical-CKaXt4cW.js → DotsVertical-CmfEzLbI.js} +1 -1
  13. package/dist/client/assets/{Eye-bWQ9UaCm.js → Eye-CCDvKyN1.js} +1 -1
  14. package/dist/client/assets/{FilterLines-D8jNh3a1.js → FilterLines-B2KnloFF.js} +1 -1
  15. package/dist/client/assets/{HardDrive-k5W51oiW.js → HardDrive-FMBz7R-3.js} +1 -1
  16. package/dist/client/assets/{Key01-CrScrj2r.js → Key01-Cg7xRrj6.js} +1 -1
  17. package/dist/client/assets/{LayoutLeft-CRPaWpwk.js → LayoutLeft-CrAeQE2_.js} +1 -1
  18. package/dist/client/assets/{LinkExternal01-D3eG8VhZ.js → LinkExternal01-CoNiop35.js} +1 -1
  19. package/dist/client/assets/{LogOut01-DJkEd9fi.js → LogOut01-D0rW1sIh.js} +1 -1
  20. package/dist/client/assets/{Monitor01-rPAJG_yg.js → Monitor01-D7zGH_lY.js} +1 -1
  21. package/dist/client/assets/{Palette-gt906-sM.js → Palette-BFAwTvSE.js} +1 -1
  22. package/dist/client/assets/{Play-DBtQafyH.js → Play-DyWf32_s.js} +1 -1
  23. package/dist/client/assets/{Plus-ChZdPiym.js → Plus-B4O8CQB-.js} +1 -1
  24. package/dist/client/assets/{SearchLg-BYU4RHgA.js → SearchLg-BLHmttXq.js} +1 -1
  25. package/dist/client/assets/{SearchMd-UM_a16QZ.js → SearchMd-D6K1gQz5.js} +1 -1
  26. package/dist/client/assets/{Settings02-DY-EcorK.js → Settings02-dNA_w0fs.js} +1 -1
  27. package/dist/client/assets/{Shield01-DpUwOECW.js → Shield01-BmMAtVqp.js} +1 -1
  28. package/dist/client/assets/{Star01-DnbEPX-J.js → Star01-DQCPnd5h.js} +1 -1
  29. package/dist/client/assets/{Stars01-Zscl6Kwf.js → Stars01-CxZkjPqU.js} +1 -1
  30. package/dist/client/assets/{Stars02-8dTTs6Ad.js → Stars02-m6J1J5js.js} +1 -1
  31. package/dist/client/assets/{Sun-C-r0AnUa.js → Sun-Cxxd7Gbn.js} +1 -1
  32. package/dist/client/assets/{SwitchHorizontal01-BYvmePpB.js → SwitchHorizontal01-CSA5YTCy.js} +1 -1
  33. package/dist/client/assets/{Tool01-Db-Gn0no.js → Tool01-Dwk2jnxr.js} +1 -1
  34. package/dist/client/assets/{Tool02-mYnQBUr3.js → Tool02-BJ8Pm3bB.js} +1 -1
  35. package/dist/client/assets/{Trash01-oZDez7Zj.js → Trash01-KHaub8Lz.js} +1 -1
  36. package/dist/client/assets/{TrendUp01-DeHcIVuJ.js → TrendUp01-D8U-rE4_.js} +1 -1
  37. package/dist/client/assets/{Upload01-BQ2q7MB5.js → Upload01-L_4YihBW.js} +1 -1
  38. package/dist/client/assets/{User01-D64L6g6R.js → User01-7ALtRHh9.js} +1 -1
  39. package/dist/client/assets/{Users01-GTL5_eEz.js → Users01-CPEyBSqa.js} +1 -1
  40. package/dist/client/assets/{Users03-wQHJp2Ll.js → Users03-3PvR443H.js} +1 -1
  41. package/dist/client/assets/{X-DzrdgzZX.js → X-eA4ffq6C.js} +1 -1
  42. package/dist/client/assets/{XCircle-CvSgXPq9.js → XCircle-CclOCWSw.js} +1 -1
  43. package/dist/client/assets/{XClose-DEl7AplN.js → XClose-B8QTyuNc.js} +1 -1
  44. package/dist/client/assets/{Zap-DnjKQP4m.js → Zap-CC0qAKRq.js} +1 -1
  45. package/dist/client/assets/{ZapSquare-B3pGHHSV.js → ZapSquare-Bsi66MG_.js} +1 -1
  46. package/dist/client/assets/{access-gate-CnlSPs0z.js → access-gate-zVACMryx.js} +1 -1
  47. package/dist/client/assets/{add-section-modal-D0qMMTGl.js → add-section-modal-MZkelOIV.js} +1 -1
  48. package/dist/client/assets/{agent-icon-kNyCP01G.js → agent-icon-D_nZ6mrh.js} +1 -1
  49. package/dist/client/assets/{agents-list-PlQd6u2c.js → agents-list-DC_ArgNv.js} +1 -1
  50. package/dist/client/assets/ai-providers-_RbWIbA7.js +1 -0
  51. package/dist/client/assets/{alert-CUR1XYgi.js → alert-B1ukPYDJ.js} +1 -1
  52. package/dist/client/assets/{alert-dialog-C2AlVw0C.js → alert-dialog-BDUQxyT2.js} +1 -1
  53. package/dist/client/assets/{app-editor-Cv0YaJ9H.js → app-editor-DOXt5yIe.js} +1 -1
  54. package/dist/client/assets/{auth-BuuCShZ3.js → auth-DL0CrVYc.js} +1 -1
  55. package/dist/client/assets/{auth-catchall-BPu_9aQc.js → auth-catchall-Db1KQu9H.js} +1 -1
  56. package/dist/client/assets/{auth-entry-Dos_AM_-.js → auth-entry-C5-EXCXM.js} +1 -1
  57. package/dist/client/assets/{auth-split-layout-CqOwdPoQ.js → auth-split-layout-BdoARcyp.js} +1 -1
  58. package/dist/client/assets/{authenticate-and-persist-oauth-CiObpIlc.js → authenticate-and-persist-oauth-DAZm6keb.js} +1 -1
  59. package/dist/client/assets/{automation-list-row-CHh7Gwdm.js → automation-list-row-CkO0J79X.js} +1 -1
  60. package/dist/client/assets/{automation-runs-D7xV_UI5.js → automation-runs-GivPtHD0.js} +1 -1
  61. package/dist/client/assets/{automations-CYYj5Yse.js → automations-CQX75saK.js} +1 -1
  62. package/dist/client/assets/{avatar-B03gc0nF.js → avatar-Ba2Gqhb3.js} +1 -1
  63. package/dist/client/assets/{badge-BEDLZc_R.js → badge-CitgQ88i.js} +1 -1
  64. package/dist/client/assets/{block-document-uVYrdUaW.js → block-document-BWVRIMlQ.js} +1 -1
  65. package/dist/client/assets/{brand-context-tfE6Gj2_.js → brand-context-ted3_6sh.js} +1 -1
  66. package/dist/client/assets/{buckets-Di-X2zl0.js → buckets-DRTPk5gC.js} +1 -1
  67. package/dist/client/assets/{bulk-category-panel-C1XBcgR9.js → bulk-category-panel-B8XQFxPG.js} +1 -1
  68. package/dist/client/assets/{calendar-5SJUEb1a.js → calendar-y7Z3l0t-.js} +1 -1
  69. package/dist/client/assets/{capability-load-error-Cyki-mOC.js → capability-load-error-DXAIRfYN.js} +1 -1
  70. package/dist/client/assets/{card-CbMSgRJp.js → card-BV9Yg8JF.js} +1 -1
  71. package/dist/client/assets/{category-editor-BQ42Wyb3.js → category-editor-DAcVqubm.js} +1 -1
  72. package/dist/client/assets/{chat-context-Tk4Ojgby.js → chat-context-3uDM1nqn.js} +1 -1
  73. package/dist/client/assets/{checkbox-2eV7GjSr.js → checkbox-CuLLPt_L.js} +1 -1
  74. package/dist/client/assets/{cli-auth-success-BKZmH1MX.js → cli-auth-success-B7WpBJA8.js} +1 -1
  75. package/dist/client/assets/{collection-detail-BuMtj2XH.js → collection-detail-CsbTTad9.js} +1 -1
  76. package/dist/client/assets/{collection-display-button-H5GQBiPz.js → collection-display-button-D7rF0f70.js} +1 -1
  77. package/dist/client/assets/{collection-search-CP0L_Sg4.js → collection-search-B6rZN0yo.js} +1 -1
  78. package/dist/client/assets/{collection-table-wrapper-CasNB7Na.js → collection-table-wrapper-D66QZDTl.js} +1 -1
  79. package/dist/client/assets/{collection-tabs-C4XfVm2G.js → collection-tabs-BH_gsD9t.js} +1 -1
  80. package/dist/client/assets/{command-CgCsgJj-.js → command-B9pzXnjQ.js} +1 -1
  81. package/dist/client/assets/{commerce-onboarding-BTxtuM-F.js → commerce-onboarding-DC6TyQ4x.js} +1 -1
  82. package/dist/client/assets/{companions-core-CQfY7AED.js → companions-core-BmIxvwXH.js} +1 -1
  83. package/dist/client/assets/{connect-q9recsqE.js → connect-Bmeehzw1.js} +1 -1
  84. package/dist/client/assets/{connection-card-C6MerF-S.js → connection-card-BEEfZ_Gw.js} +1 -1
  85. package/dist/client/assets/{connection-detail-CMTJ0a8J.js → connection-detail-BwFd2zcI.js} +1 -1
  86. package/dist/client/assets/{connection-form-helpers-Bk11zT3H.js → connection-form-helpers-Bcft3DyG.js} +1 -1
  87. package/dist/client/assets/{connection-CdHiw_2m.js → connection-i8LJvlWi.js} +1 -1
  88. package/dist/client/assets/{connections-Cff2pYTq.js → connections-B6eGU31-.js} +1 -1
  89. package/dist/client/assets/{decopilot-sse-pool-C3wASpgj.js → decopilot-sse-pool-DK3tcwFk.js} +1 -1
  90. package/dist/client/assets/{dialog-CevrI9-5.js → dialog-R92c_Pnz.js} +1 -1
  91. package/dist/client/assets/{domain-settings-CWex-IYG.js → domain-settings-BVUEhaOu.js} +1 -1
  92. package/dist/client/assets/{drawer-B6T_nRGe.js → drawer-DCxC2dRW.js} +1 -1
  93. package/dist/client/assets/{dropdown-menu-DXKSQdvX.js → dropdown-menu-BnENS1C8.js} +1 -1
  94. package/dist/client/assets/{empty-state-Dj6A_VjW.js → empty-state-BFZ_pyiJ.js} +1 -1
  95. package/dist/client/assets/{extract-connection-data-Dc9pZlxk.js → extract-connection-data-CY98vwTG.js} +1 -1
  96. package/dist/client/assets/{file-explorer-DKDVlhab.js → file-explorer-DjjA4vHT.js} +1 -1
  97. package/dist/client/assets/{form-B1W_PZT_.js → form-BPQDX1iu.js} +1 -1
  98. package/dist/client/assets/{general-NxI97IX-.js → general-Bkp17u0t.js} +1 -1
  99. package/dist/client/assets/{github-repo-picker-Cxc3hKp2.js → github-repo-picker-BIiHdSbe.js} +1 -1
  100. package/dist/client/assets/{hooks-BHFA89Bx.js → hooks-VDpgeOEk.js} +1 -1
  101. package/dist/client/assets/{index-C9c-GovZ.js → index-50qLy1V3.js} +1 -1
  102. package/dist/client/assets/{index-B1OnpZud.js → index-B2R1pAtc.js} +1 -1
  103. package/dist/client/assets/{index-CES2ak8a.js → index-B36QpfJp.js} +1 -1
  104. package/dist/client/assets/{index-CQzsAi-_.js → index-BGlIfpLW.js} +1 -1
  105. package/dist/client/assets/{index-DkgH5b4j.js → index-BuJWnVLg.js} +1 -1
  106. package/dist/client/assets/{index-C6DOLYpJ.js → index-CIppZMLU.js} +7 -7
  107. package/dist/client/assets/{index-Dy7OM_qi.js → index-CP7hbBBu.js} +1 -1
  108. package/dist/client/assets/{index-Da252sR6.js → index-CRrndHjz.js} +1 -1
  109. package/dist/client/assets/{index-Cbpqu3Us.js → index-Dveh4K2v.js} +3 -3
  110. package/dist/client/assets/{index-tb8OhXaK.js → index-FH1iXwG9.js} +1 -1
  111. package/dist/client/assets/{index-Dn9QelPv.js → index-OFuIeWBU.js} +3 -3
  112. package/dist/client/assets/{index-redirect-D3AW6cKz.js → index-redirect-DQWBeHSL.js} +1 -1
  113. package/dist/client/assets/{input-CW7fKzMn.js → input-D6HGf9aQ.js} +1 -1
  114. package/dist/client/assets/{integration-icon-B7aUsgNS.js → integration-icon-B0Qh3kkh.js} +1 -1
  115. package/dist/client/assets/{invite-member-dialog-55AEsy2L.js → invite-member-dialog-D-YWVA4s.js} +1 -1
  116. package/dist/client/assets/{label-B10OcqOW.js → label-C0nGPhyn.js} +1 -1
  117. package/dist/client/assets/{layout-CgCeMiUs.js → layout-C1Ps1TGD.js} +1 -1
  118. package/dist/client/assets/{login-BYeP-KW9.js → login-DSmWl_JN.js} +1 -1
  119. package/dist/client/assets/{mcp-oauth-D0B2B6eD.js → mcp-oauth-DK9h3luZ.js} +1 -1
  120. package/dist/client/assets/{members-DUYo0nqv.js → members-Ch1qVL01.js} +1 -1
  121. package/dist/client/assets/{monaco-editor-DgC_9sYS.js → monaco-editor-DAztJ7NY.js} +1 -1
  122. package/dist/client/assets/{monitoring-stats-row--MFEdL-Y.js → monitoring-stats-row-CF_Qrlc9.js} +1 -1
  123. package/dist/client/assets/{multi-select-Db-xtRxP.js → multi-select-BNdTGIHQ.js} +1 -1
  124. package/dist/client/assets/{oauth-callback-Dm77JrqL.js → oauth-callback-Bm7Oez7j.js} +1 -1
  125. package/dist/client/assets/{oauth-callback-ai-provider-BFMGBC8j.js → oauth-callback-ai-provider-Cof8_07v.js} +1 -1
  126. package/dist/client/assets/{onboarding-D05Z9iss.js → onboarding-CuqZY2si.js} +1 -1
  127. package/dist/client/assets/{org-layout-ecRyWTIZ.js → org-layout-lpk1bxwd.js} +1 -1
  128. package/dist/client/assets/{organization-choice-CvHi9Iq7.js → organization-choice-B84tKWUC.js} +1 -1
  129. package/dist/client/assets/{orgs-J6vDKfiY.js → orgs-Bu_yrVSe.js} +1 -1
  130. package/dist/client/assets/{page-seo-form-CHQzAM2E.js → page-seo-form-DI9p61Ed.js} +1 -1
  131. package/dist/client/assets/{popover-B-tkL6Mz.js → popover-B1k48k3v.js} +1 -1
  132. package/dist/client/assets/{post-editor-Dys80ILm.js → post-editor-B-K4gHyX.js} +1 -1
  133. package/dist/client/assets/{primitives-DMKIJSJL.js → primitives-DqkBHMSa.js} +1 -1
  134. package/dist/client/assets/{profile-BzYF9CIO.js → profile-DHzj8ZYV.js} +1 -1
  135. package/dist/client/assets/project-app-view-CRlrtWWM.js +1 -0
  136. package/dist/client/assets/record-editor-C0Uo0m59.js +1 -0
  137. package/dist/client/assets/{redirect-editor-DlTZrW2z.js → redirect-editor-C10zF6iN.js} +1 -1
  138. package/dist/client/assets/registry-Cc1RcM5h.js +2 -0
  139. package/dist/client/assets/{registry-layout-BFjo3bsf.js → registry-layout-Dc9kK58q.js} +1 -1
  140. package/dist/client/assets/{reports-CmGfT9qE.js → reports-CNLhmgWb.js} +1 -1
  141. package/dist/client/assets/{require-capability-oLOTz9uZ.js → require-capability-Bv5KoiXy.js} +1 -1
  142. package/dist/client/assets/{required-auth-layout-6lOCKjYF.js → required-auth-layout-Y5UM7oI2.js} +1 -1
  143. package/dist/client/assets/{reset-password-B1QHcNwV.js → reset-password-D8k7zjEk.js} +1 -1
  144. package/dist/client/assets/{roles-DhelWc0A.js → roles-CcYTQ_XH.js} +1 -1
  145. package/dist/client/assets/{search-input-BHApSsEW.js → search-input-B2V-KxMH.js} +1 -1
  146. package/dist/client/assets/{secrets-6YDtwWHE.js → secrets-DbxklaOO.js} +1 -1
  147. package/dist/client/assets/{sections-editor-H7RztYqo.js → sections-editor-DJpGZpcw.js} +1 -1
  148. package/dist/client/assets/{select-_BZQFUiF.js → select-BfHA3hXI.js} +1 -1
  149. package/dist/client/assets/{select-model-L7VCGHDz.js → select-model-aDWO0QR9.js} +1 -1
  150. package/dist/client/assets/{self-tool-result-oE7sL6XG.js → self-tool-result-cgo1DEgv.js} +1 -1
  151. package/dist/client/assets/{seo-editor-COa1JO5L.js → seo-editor-CjUP28r9.js} +1 -1
  152. package/dist/client/assets/{settings-layout-CeZpYMWl.js → settings-layout-BaJiz02p.js} +1 -1
  153. package/dist/client/assets/{settings-section-4vsWqKSf.js → settings-section-DGgss-oN.js} +1 -1
  154. package/dist/client/assets/{shell-controls-BsQCTxPO.js → shell-controls-d1HkoX_B.js} +1 -1
  155. package/dist/client/assets/{shell-layout-mgHTnCWh.js → shell-layout-WBJ3MoEz.js} +1 -1
  156. package/dist/client/assets/{sidebar-BXOBFxAr.js → sidebar-zX-Xh26M.js} +1 -1
  157. package/dist/client/assets/{skeleton-B3e0zgBK.js → skeleton-Cd62pFKu.js} +1 -1
  158. package/dist/client/assets/{spinner-wIVB5JbV.js → spinner-BULrncM1.js} +1 -1
  159. package/dist/client/assets/{sso-BHbkLEwa.js → sso-DW208l4y.js} +1 -1
  160. package/dist/client/assets/{store-BItYUBD3.js → store-D_pRoj59.js} +1 -1
  161. package/dist/client/assets/store-registry-BxUwPaiS.js +2 -0
  162. package/dist/client/assets/{studio-tools-Bc7qsum8.js → studio-tools-Ck8WNEjD.js} +1 -1
  163. package/dist/client/assets/{switch-DKViU8n5.js → switch-DP-6KK-R.js} +1 -1
  164. package/dist/client/assets/{tab-id-C0DTsTEV.js → tab-id-D3E_XoXg.js} +1 -1
  165. package/dist/client/assets/{table-DqhV4B6P.js → table-_nYBvo6-.js} +1 -1
  166. package/dist/client/assets/{tabs-By9baP-a.js → tabs-CRFEXKs1.js} +1 -1
  167. package/dist/client/assets/{textarea-CDmQTaDs.js → textarea-DlYNEV-I.js} +1 -1
  168. package/dist/client/assets/{toggle-group-BgK4T7Sn.js → toggle-group-CaL1nc-I.js} +1 -1
  169. package/dist/client/assets/{toolbar-C2pgDq8K.js → toolbar-BhA4kTI5.js} +1 -1
  170. package/dist/client/assets/{tooltip-7_qs63N8.js → tooltip-B4QWZZgT.js} +1 -1
  171. package/dist/client/assets/{use-ai-providers-CDnfd5BM.js → use-ai-providers-XMOk0ZOu.js} +1 -1
  172. package/dist/client/assets/{use-automations-FSfVUwxK.js → use-automations-BJf24dYG.js} +1 -1
  173. package/dist/client/assets/{use-autosave-DQkpvw_k.js → use-autosave-BDESqJYa.js} +1 -1
  174. package/dist/client/assets/{use-capability-DWqbqyvG.js → use-capability-R9xRMDt0.js} +1 -1
  175. package/dist/client/assets/{use-clock-tick-zi1cIo4N.js → use-clock-tick-Cs7ZABrR.js} +1 -1
  176. package/dist/client/assets/{use-connection-DMc5yh5S.js → use-connection-E0imXfMX.js} +1 -1
  177. package/dist/client/assets/{use-copy-BDSiecZE.js → use-copy-CRWKGHJN.js} +1 -1
  178. package/dist/client/assets/{use-create-virtual-mcp-C_hqfwgX.js → use-create-virtual-mcp-CYlf05IQ.js} +1 -1
  179. package/dist/client/assets/{use-debounced-autosave-ZU5TZrb9.js → use-debounced-autosave-BmuBhQoj.js} +1 -1
  180. package/dist/client/assets/{use-debounced-value-CPn-3TRr.js → use-debounced-value-UVOlZ3gD.js} +1 -1
  181. package/dist/client/assets/{use-deco-credits-4-Enu1S7.js → use-deco-credits-zQFZusEY.js} +1 -1
  182. package/dist/client/assets/{use-decopilot-events-DUSynSW-.js → use-decopilot-events-C4NHCngI.js} +1 -1
  183. package/dist/client/assets/{use-delete-connection-BLueJow8.js → use-delete-connection-Dj2CMZ0P.js} +1 -1
  184. package/dist/client/assets/{use-deployment-admin-CFP0u9u4.js → use-deployment-admin-tqeojbd1.js} +1 -1
  185. package/dist/client/assets/{use-file-configs-DNh3yTwi.js → use-file-configs-Sk-WKXU_.js} +1 -1
  186. package/dist/client/assets/{use-infinite-scroll-CPW-89cy.js → use-infinite-scroll-CgKbiP8I.js} +1 -1
  187. package/dist/client/assets/{use-join-requests-XiXz1TXa.js → use-join-requests-BvxtgSqf.js} +1 -1
  188. package/dist/client/assets/{use-mcp-auth-status-Byp-TS5n.js → use-mcp-auth-status-TirzCz71.js} +1 -1
  189. package/dist/client/assets/{use-mcp-client-BJb7Q8yj.js → use-mcp-client-p6iuzcQc.js} +1 -1
  190. package/dist/client/assets/{use-mcp-tools-BheE5NkI.js → use-mcp-tools-Bpb4DQXQ.js} +1 -1
  191. package/dist/client/assets/{use-members-Cyjps_7h.js → use-members-lcuXZKPB.js} +1 -1
  192. package/dist/client/assets/{use-mobile-B4thjTn8.js → use-mobile-Pya12KNo.js} +1 -1
  193. package/dist/client/assets/{use-navigate-to-agent-DB-S9Spj.js → use-navigate-to-agent-BNPczzIg.js} +1 -1
  194. package/dist/client/assets/{use-org-auth-client-5mKusUqT.js → use-org-auth-client-Criqs8X8.js} +1 -1
  195. package/dist/client/assets/{use-org-sso-C5HBrw3K.js → use-org-sso-C2IyqiaN.js} +1 -1
  196. package/dist/client/assets/{use-organization-roles-Dp37t_3O.js → use-organization-roles-DQY8BVQS.js} +1 -1
  197. package/dist/client/assets/{use-organization-settings-CKLx1CMn.js → use-organization-settings-CdIDoB_L.js} +1 -1
  198. package/dist/client/assets/{use-registry-connections-C7euYD6o.js → use-registry-connections-B3eNVmA7.js} +1 -1
  199. package/dist/client/assets/{use-secrets--dmMFYQT.js → use-secrets-wm75C4q2.js} +1 -1
  200. package/dist/client/assets/{use-status-sounds-Wwlae5bG.js → use-status-sounds-CfzCFlDY.js} +1 -1
  201. package/dist/client/assets/{use-tags-D0raU1tH.js → use-tags-BQQBSo4w.js} +1 -1
  202. package/dist/client/assets/{use-view-mode-CcHiSbcs.js → use-view-mode-CHCnjxSc.js} +1 -1
  203. package/dist/client/assets/{use-virtual-mcp-BFGD1fF1.js → use-virtual-mcp-ByPyGM47.js} +1 -1
  204. package/dist/client/assets/useInfiniteQuery-Dh0Gvn-P.js +1 -0
  205. package/dist/client/assets/{useQueries-CoF92ndr.js → useQueries-BcZGQUCR.js} +1 -1
  206. package/dist/client/assets/{useRouterState-DNcLPXHW.js → useRouterState-DO5A39hB.js} +1 -1
  207. package/dist/client/assets/useSuspenseInfiniteQuery-DCCY-k1D.js +1 -0
  208. package/dist/client/assets/{users-D08nekTc.js → users-gkbB2JHc.js} +1 -1
  209. package/dist/client/assets/{variant-calendar-Cajb9sxy.js → variant-calendar-B7h9hmv9.js} +1 -1
  210. package/dist/client/assets/{view-mode-toggle-DwjW75hm.js → view-mode-toggle-CyA_1Jtp.js} +1 -1
  211. package/dist/client/index.html +1 -1
  212. package/dist/server/cli.js +3 -3
  213. package/dist/server/server.js +3 -3
  214. package/package.json +1 -1
  215. package/dist/client/assets/ai-providers-D8IOcK2P.js +0 -1
  216. package/dist/client/assets/project-app-view-CWukl740.js +0 -1
  217. package/dist/client/assets/record-editor-B_1TFgnF.js +0 -1
  218. package/dist/client/assets/registry-CLsaVKIH.js +0 -2
  219. package/dist/client/assets/store-registry-BNw5_S5E.js +0 -2
  220. package/dist/client/assets/useInfiniteQuery-MefwINr7.js +0 -1
  221. package/dist/client/assets/useSuspenseInfiniteQuery-CdjKnFUD.js +0 -1
@@ -1147,7 +1147,7 @@ conversation.
1147
1147
 
1148
1148
  `);return new XZ0({connections:[Z],superUser:G,mcpListCache:p9()??void 0,listTimeoutMs:Y?.listTimeoutMs,instructions:$},X)}var f_=B(()=>{R6();AQ();NF();l08();o08()});var z08={};$4(z08,{clientFromConnection:()=>o9});async function o9(Z,X,G=!1){if(Z.connection_type==="VIRTUAL")return a08(Z,X,G);return v08(Z,X,G)}var Pm=B(()=>{x08();f_()});async function tl0(Z,X,G){let Y=new AbortController,Q,$=new Promise((W,K)=>{Q=setTimeout(()=>{Y.abort(),K(new e08(Z.id,G))},G)}),J=(async()=>{let W=await o9(Z,X,!0);try{return(await W.listTools(void 0,{timeout:G,signal:Y.signal})).tools}finally{await W.close().catch(()=>{})}})();J.catch(()=>{});try{return await Promise.race([J,$])}finally{if(Q)clearTimeout(Q)}}var e08;var Z18=B(()=>{Pm();e08=class e08 extends Error{constructor(Z,X){super(`listTools timed out after ${X}ms for connection ${Z}`);this.name="ListToolsTimeoutError"}}});function $Z0(Z){return(X)=>{if(X instanceof S1&&X.code===y1.MethodNotFound)return Z;throw X}}var X18=B(()=>{n9()});function JZ0(Z,X,G){let Y=Qw(Z,X,G,p9()??void 0),Q=fD(Y,{name:"studio-mcp-server",version:"1.0.0"},{capabilities:A04,toolCallTimeoutMs:Gv});Q.server.setRequestHandler(sU,async()=>{return await Y.listResources().catch($Z0({resources:[]}))}),Q.server.setRequestHandler(eU,async()=>{return await Y.listResourceTemplates().catch($Z0({resourceTemplates:[]}))}),Q.server.setRequestHandler(ZH,async()=>{return await Y.listPrompts().catch($Z0({prompts:[]}))});let $=Q.close.bind(Q);return Q.close=async()=>{await $(),await Y.close().catch(()=>{})},Q}var A04;var G18=B(()=>{CG();n9();Am();AQ();X18();A04={tools:{},resources:{},prompts:{}}});var HF=B(()=>{Pm();Z18();G18()});function Kn(Z,X,G){if(X.some((Y)=>Y!=="*"&&Y.startsWith("SELF::"))&&Z.SELF===void 0)Z.SELF={value:`${G}_self`}}function Nn(Z,X){let G=new Map;for(let Y of X){if(Y==="*")continue;let[Q,$]=e60(Y);if(!P04.has($))continue;let J=Zd(Q,Z);if(typeof J!=="object"||J===null||!("value"in J))continue;let W=J.value;if(typeof W!=="string")continue;G.set(`${W}:${$}`,{targetConnectionId:W,scope:$})}return[...G.values()]}async function Fn(Z,X,G,Y){for(let $ of X){if($==="*")continue;let[J]=e60($),W=Zd(J,Z);if(W===void 0||W===null)throw Error(`Scope references key "${J}" but it's not present in state`)}let Q=Wl1(Z,X);for(let $ of Q){if($.endsWith("_self"))continue;let J=await Y.storage.connections.findById($);if(!J||J.organization_id!==G)throw Error(`Referenced connection not found: ${$}`);try{await Y.access.check($)}catch(W){throw Error(`Access denied to referenced connection: ${$}. ${W.message}`)}}}var P04;var ol0=B(()=>{Zy0();G40();P04=new Set([Z40,X40])});import{z as Y18}from"zod";var T04,R04,rl0;var Q18=B(()=>{q5();e0();b8();AQ();HF();ol0();pl();BW();T04=Y18.object({data:X10.describe("Data for the new connection (id is auto-generated if not provided)")}),R04=Y18.object({item:bX.describe("The created connection entity")}),rl0=s({name:"COLLECTION_CONNECTIONS_CREATE",description:"Create a new MCP connection. Auto-fetches and caches the server's tool list.",annotations:{title:"Create Connection",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:T04,outputSchema:R04,handler:async(Z,X)=>{D0(X);let G=B0(X);await X.access.check();let Y=V1(X);if(!Y)throw Error("User ID required to create connection");let Q={...Z.data,organization_id:G.id,created_by:Y};if(Q.id){if((await X.storage.connections.findById(Q.id))?.organization_id===G.id)throw Error("Connection already exists in organization")}if(Q.connection_type==="VIRTUAL"){let U=_b(Q.connection_url);if(!U)throw Error("VIRTUAL connection requires connection_url in format: virtual://$virtual_mcp_id");let H=await X.storage.virtualMcps.findById(U);if(!H)throw Error(`Virtual MCP not found: ${U}`);if(H.organization_id!==G.id)throw Error("Virtual MCP does not belong to the current organization");Q.connection_url=yb(U)}if(Q.connection_type==="STDIO"&&!$1().localMode)throw Error("STDIO connections are only available in local mode (--local-mode).");let $=await IH({id:`pending-${Date.now()}`,title:Q.title,connection_type:Q.connection_type,connection_url:Q.connection_url,connection_token:Q.connection_token,connection_headers:Q.connection_headers}).catch(()=>null),J=$?.tools?.length?$.tools:null,W=$?.scopes?.length?$.scopes:Q.configuration_scopes??null,K=Q.configuration_state??null;if(K&&W?.length)Kn(K,W,G.id),await Fn(K,W,G.id,X);let N=await X.storage.connections.createNew({...Q,tools:null,configuration_state:K,configuration_scopes:W}),F=K&&W?.length?Nn(K,W):[];if(F.length>0){let U;try{await X.storage.connectionCredentialVault.replaceGrantsForSubject({organizationId:G.id,subjectConnectionId:N.id,createdBy:Y,grants:F});let{plaintextToken:H,record:w}=await X.storage.connectionCredentialVault.createOrRotateWorkloadToken({organizationId:G.id,subjectConnectionId:N.id});U=w.id,await(await o9(N,X,!1)).callTool({name:"ON_MCP_CONFIGURATION",arguments:{state:K,scopes:W,firstRun:!0,vault:{baseUrl:X.baseUrl,org:G.slug??G.id,subjectConnectionId:N.id,token:H}}})}catch(H){if(U)await X.storage.connectionCredentialVault.revokeWorkloadToken({organizationId:G.id,subjectConnectionId:N.id,tokenId:U});throw await X.storage.connections.delete(N.id),H}}if(J)p9()?.set("tools",N.id,J).catch(()=>{});return i1.capture({distinctId:Y,event:"connection_created",groups:{organization:G.id},properties:{connection_id:N.id,connection_type:N.connection_type,app_name:N.app_name??null,organization_id:G.id,tools_count:J?.length??0}}),{item:N}}})});import{z as h3}from"zod/v4";import{z as $18}from"zod/v4";import{z as WZ0}from"zod/v4";import{z as pW}from"zod/v4";import{z as k04}from"zod/v4";import{z as iL}from"zod/v4";import{z as tW}from"zod/v4";import{z as V7}from"zod/v4";import{z as J18}from"zod/v4";import{z as FZ0}from"zod/v4";import{z as a04}from"zod/v4";import{z as W18}from"zod/v4";import{z as KZ0}from"zod/v4";import{z as J14}from"zod/v4";function Un(Z,X){if(Z===X)return!0;if(Z==null||X==null)return Z===X;if(typeof Z!==typeof X)return!1;if(Array.isArray(Z)&&Array.isArray(X)){if(Z.length!==X.length)return!1;return Z.every((G,Y)=>Un(G,X[Y]))}if(typeof Z==="object"&&typeof X==="object"){let G=Object.keys(Z),Y=Object.keys(X);if(G.length!==Y.length)return!1;return G.every((Q)=>Y.includes(Q)&&Un(Z[Q],X[Q]))}return!1}function t04(){return(Z)=>{if(!Array.isArray(Z))return!0;let X=[];return Z.every((G)=>{if(X.some((Q)=>Un(G,Q)))return!1;return X.push(G),!0})}}function NZ0(Z,X){return Z.safeParse(X).success}function WX(Z){if(typeof Z==="boolean")return Z?h3.any():h3.never();let X={};for(let Q of F14)Q.apply(X,Z);let G=[];if(X.string!==!1)G.push(X.string||h3.string());if(X.number!==!1)G.push(X.number||h3.number());if(X.boolean!==!1)G.push(X.boolean||h3.boolean());if(X.null!==!1)G.push(X.null||h3.null());if(X.array!==!1)G.push(X.array||h3.array(h3.any()));if(X.tuple!==!1&&X.tuple!==void 0)G.push(X.tuple);if(X.object!==!1)if(X.object)G.push(X.object);else{let Q=h3.custom(($)=>{return typeof $==="object"&&$!==null&&!Array.isArray($)},"Must be an object, not an array");G.push(Q)}if(X.file!==!1&&X.file!==void 0)G.push(X.file);let Y;if(G.length===0)Y=h3.never();else if(G.length===1)Y=G[0];else if(!Object.keys(Z).some(($)=>$!=="$schema"&&$!=="title"&&$!=="description"))Y=h3.any();else Y=h3.union(G);for(let Q of U14)Y=Q.apply(Y,Z);return Y}var I04=class{apply(Z,X){if(!X.type)return;let G=Array.isArray(X.type)?X.type:[X.type],Y=new Set(G);if(!Y.has("string"))Z.string=!1;if(!Y.has("number")&&!Y.has("integer"))Z.number=!1;if(!Y.has("boolean"))Z.boolean=!1;if(!Y.has("null"))Z.null=!1;if(!Y.has("array"))Z.array=!1;if(!Y.has("object"))Z.object=!1;if(Y.has("integer")&&Z.number!==!1){let Q=Z.number||$18.number();if(Q instanceof $18.ZodNumber)Z.number=Q.int()}}},q04=class{apply(Z,X){if(X.const===void 0)return;let G=X.const;if(Z.string=!1,Z.number=!1,Z.boolean=!1,Z.null=!1,Z.array=!1,Z.object=!1,typeof G==="string")Z.string=WZ0.literal(G);else if(typeof G==="number")Z.number=WZ0.literal(G);else if(typeof G==="boolean")Z.boolean=WZ0.literal(G);else if(G===null)Z.null=WZ0.null();else if(Array.isArray(G))Z.array=void 0;else if(typeof G==="object")Z.object=void 0}},M04=class{apply(Z,X){if(!X.enum)return;if(X.enum.length===0){if(!X.type)Z.string=!1,Z.number=!1,Z.boolean=!1,Z.null=!1,Z.array=!1,Z.object=!1;return}let G={string:X.enum.filter((Y)=>typeof Y==="string"),number:X.enum.filter((Y)=>typeof Y==="number"),boolean:X.enum.filter((Y)=>typeof Y==="boolean"),null:X.enum.filter((Y)=>Y===null),array:X.enum.filter((Y)=>Array.isArray(Y)),object:X.enum.filter((Y)=>typeof Y==="object"&&Y!==null&&!Array.isArray(Y))};Z.string=this.createTypeSchema(G.string,"string"),Z.number=this.createTypeSchema(G.number,"number"),Z.boolean=this.createTypeSchema(G.boolean,"boolean"),Z.null=G.null.length>0?pW.null():!1,Z.array=G.array.length>0?void 0:!1,Z.object=G.object.length>0?void 0:!1}createTypeSchema(Z,X){if(Z.length===0)return!1;if(Z.length===1)return pW.literal(Z[0]);if(X==="string")return pW.enum(Z);if(X==="number"){let[G,Y,...Q]=Z;return pW.union([pW.literal(G),pW.literal(Y),...Q.map(($)=>pW.literal($))])}if(X==="boolean")return pW.union([pW.literal(!0),pW.literal(!1)]);return!1}},S04=class{apply(Z,X){let G=X;if(G.type==="string"&&G.format==="binary"&&G.contentEncoding==="binary"){let Y=k04.file();if(G.minLength!==void 0)Y=Y.min(G.minLength);if(G.maxLength!==void 0)Y=Y.max(G.maxLength);if(G.contentMediaType!==void 0)Y=Y.mime(G.contentMediaType);Z.file=Y,Z.string=!1}}},V04=class{apply(Z,X){let G=X;if(X.type===void 0&&(G.minLength!==void 0||G.maxLength!==void 0||G.pattern!==void 0)){if(Z.string===void 0)Z.string=iL.string()}}},C04=class{apply(Z,X){let G=X;if(G.minLength===void 0)return;if(Z.string!==!1){let Y=Z.string||iL.string();if(Y instanceof iL.ZodString)Z.string=Y.refine((Q)=>{return Array.from(Q).length>=G.minLength},{message:`String must be at least ${G.minLength} characters long`})}}},f04=class{apply(Z,X){let G=X;if(G.maxLength===void 0)return;if(Z.string!==!1){let Y=Z.string||iL.string();if(Y instanceof iL.ZodString)Z.string=Y.refine((Q)=>{return Array.from(Q).length<=G.maxLength},{message:`String must be at most ${G.maxLength} characters long`})}}},b04=class{apply(Z,X){let G=X;if(!G.pattern)return;if(Z.string!==!1){let Y=Z.string||iL.string();if(Y instanceof iL.ZodString){let Q=new RegExp(G.pattern);Z.string=Y.regex(Q)}}}},v04=class{apply(Z,X){let G=X;if(G.minimum===void 0)return;if(Z.number!==!1){let Y=Z.number||tW.number();if(Y instanceof tW.ZodNumber)Z.number=Y.min(G.minimum)}}},x04=class{apply(Z,X){let G=X;if(G.maximum===void 0)return;if(Z.number!==!1){let Y=Z.number||tW.number();if(Y instanceof tW.ZodNumber)Z.number=Y.max(G.maximum)}}},_04=class{apply(Z,X){let G=X;if(G.exclusiveMinimum===void 0)return;if(Z.number!==!1){let Y=Z.number||tW.number();if(Y instanceof tW.ZodNumber)if(typeof G.exclusiveMinimum==="number")Z.number=Y.gt(G.exclusiveMinimum);else Z.number=!1}}},y04=class{apply(Z,X){let G=X;if(G.exclusiveMaximum===void 0)return;if(Z.number!==!1){let Y=Z.number||tW.number();if(Y instanceof tW.ZodNumber)if(typeof G.exclusiveMaximum==="number")Z.number=Y.lt(G.exclusiveMaximum);else Z.number=!1}}},g04=class{apply(Z,X){let G=X;if(G.multipleOf===void 0)return;if(Z.number!==!1){let Y=Z.number||tW.number();if(Y instanceof tW.ZodNumber)Z.number=Y.refine((Q)=>{if(G.multipleOf===0)return!1;let $=Q/G.multipleOf,J=Math.round($),W=Math.min(Math.abs(Q)*Number.EPSILON*10,Math.abs(G.multipleOf)*Number.EPSILON*10);return Math.abs($-J)<=W/Math.abs(G.multipleOf)},{message:`Must be a multiple of ${G.multipleOf}`})}}},h04=class{apply(Z,X){let G=X;if(X.type===void 0&&(G.minItems!==void 0||G.maxItems!==void 0||G.items!==void 0||G.prefixItems!==void 0)){if(Z.array===void 0)Z.array=V7.array(V7.any())}}},u04=class{apply(Z,X){let G=X;if(G.minItems===void 0)return;if(Z.array!==!1)Z.array=(Z.array||V7.array(V7.any())).min(G.minItems)}},c04=class{apply(Z,X){let G=X;if(G.maxItems===void 0)return;if(Z.array!==!1)Z.array=(Z.array||V7.array(V7.any())).max(G.maxItems)}},l04=class{apply(Z,X){let G=X;if(Z.array===!1)return;if(Array.isArray(G.items))Z.array=Z.array||V7.array(V7.any());else if(G.items&&typeof G.items!=="boolean"&&!G.prefixItems){let Y=WX(G.items),Q=V7.array(Y);if(Z.array&&Z.array instanceof V7.ZodArray){let $=Z.array._def;if($.checks)$.checks.forEach((J)=>{if(J._zod&&J._zod.def){let W=J._zod.def;if(W.check==="min_length"&&W.minimum!==void 0)Q=Q.min(W.minimum);else if(W.check==="max_length"&&W.maximum!==void 0)Q=Q.max(W.maximum)}})}Z.array=Q}else if(typeof G.items==="boolean"&&G.items===!1)if(!G.prefixItems)Z.array=V7.array(V7.any()).max(0);else Z.array=Z.array||V7.array(V7.any());else if(typeof G.items==="boolean"&&G.items===!0)Z.array=Z.array||V7.array(V7.any());else if(G.prefixItems)Z.array=Z.array||V7.array(V7.any())}},d04=class{apply(Z,X){if(X.type!=="array")return;let G=X;if(!Array.isArray(G.items))return;if(Z.array===!1)return;let Y=G.items.map(($)=>WX($)),Q;if(Y.length===0)Q=J18.tuple([]);else Q=J18.tuple(Y);if(G.minItems!==void 0&&G.minItems>Y.length)Q=!1;if(G.maxItems!==void 0&&G.maxItems<Y.length)Q=!1;Z.tuple=Q,Z.array=!1}},m04=class{apply(Z,X){let G=X;if(Z.object===!1)return;if(G.properties||G.required||G.additionalProperties!==void 0)Z.object=Z.object||FZ0.object({}).passthrough()}},i04=class{apply(Z,X){let G=X;if(X.type===void 0&&(G.maxProperties!==void 0||G.minProperties!==void 0)){if(Z.object===void 0)Z.object=FZ0.object({}).passthrough()}}},n04=class{apply(Z,X){let G=X;if(G.maxProperties===void 0)return;if(Z.object!==!1){let Y=Z.object||FZ0.object({}).passthrough();Z.object=Y.refine((Q)=>Object.keys(Q).length<=G.maxProperties,{message:`Object must have at most ${G.maxProperties} properties`})}}},p04=class{apply(Z,X){let G=X;if(G.minProperties===void 0)return;if(Z.object!==!1){let Y=Z.object||FZ0.object({}).passthrough();Z.object=Y.refine((Q)=>Object.keys(Q).length>=G.minProperties,{message:`Object must have at least ${G.minProperties} properties`})}}},o04=class{apply(Z,X){if(!X.not)return Z;let G=WX(X.not);return Z.refine((Y)=>!NZ0(G,Y),{message:"Value must not match the 'not' schema"})}},r04=class{apply(Z,X){if(X.uniqueItems!==!0)return Z;return Z.refine(t04(),{message:"Array items must be unique"})}},s04=class{apply(Z,X){if(!X.allOf||X.allOf.length===0)return Z;return X.allOf.map((Y)=>WX(Y)).reduce((Y,Q)=>a04.intersection(Y,Q),Z)}},e04=class{apply(Z,X){if(!X.anyOf||X.anyOf.length===0)return Z;let G=X.anyOf.length===1?WX(X.anyOf[0]):W18.union([WX(X.anyOf[0]),WX(X.anyOf[1]),...X.anyOf.slice(2).map((Y)=>WX(Y))]);return W18.intersection(Z,G)}},Z14=class{apply(Z,X){if(!X.oneOf||X.oneOf.length===0)return Z;let G=X.oneOf.map((Y)=>WX(Y));return Z.refine((Y)=>{let Q=0;for(let $ of G)if($.safeParse(Y).success){if(Q++,Q>1)return!1}return Q===1},{message:"Value must match exactly one of the oneOf schemas"})}},X14=class{apply(Z,X){let G=X;if(G.prefixItems&&Array.isArray(G.prefixItems)){let Q=G.prefixItems.map(($)=>WX($));return Z.refine(($)=>{if(!Array.isArray($))return!0;for(let J=0;J<Math.min($.length,Q.length);J++)if(!NZ0(Q[J],$[J]))return!1;if($.length>Q.length){if(typeof G.items==="boolean"&&G.items===!1)return!1;else if(G.items&&typeof G.items==="object"&&!Array.isArray(G.items)){let J=WX(G.items);for(let W=Q.length;W<$.length;W++)if(!NZ0(J,$[W]))return!1}}return!0},{message:"Array does not match prefixItems schema"})}return Z}},G14=class{apply(Z,X){let G=X;if(!G.properties&&!G.required&&G.additionalProperties!==!1)return Z;if(Z instanceof KZ0.ZodObject||Z instanceof KZ0.ZodRecord){let Y={};if(G.properties){for(let[Q,$]of Object.entries(G.properties))if($!==void 0)Y[Q]=WX($)}if(G.required&&Array.isArray(G.required)){let Q=new Set(G.required);for(let $ of Object.keys(Y))if(!Q.has($))Y[$]=Y[$].optional()}else for(let Q of Object.keys(Y))Y[Q]=Y[Q].optional();if(G.additionalProperties===!1)return KZ0.object(Y);else return KZ0.object(Y).passthrough()}return Z.refine((Y)=>{if(typeof Y!=="object"||Y===null||Array.isArray(Y))return!0;if(G.properties){for(let[Q,$]of Object.entries(G.properties))if($!==void 0){if(Object.getOwnPropertyDescriptor(Y,Q)!==void 0){if(!WX($).safeParse(Y[Q]).success)return!1}}}if(G.required&&Array.isArray(G.required)){for(let Q of G.required)if(Object.getOwnPropertyDescriptor(Y,Q)===void 0)return!1}if(G.additionalProperties===!1&&G.properties){let Q=new Set(Object.keys(G.properties));for(let $ in Y)if(!Q.has($))return!1}return!0},{message:"Object constraints validation failed"})}},Y14=class{apply(Z,X){if(!X.enum||X.enum.length===0)return Z;let G=X.enum.filter((Y)=>Array.isArray(Y)||typeof Y==="object"&&Y!==null);if(G.length===0)return Z;return Z.refine((Y)=>{if(typeof Y!=="object"||Y===null)return!0;return G.some((Q)=>Un(Y,Q))},{message:"Value must match one of the enum values"})}},Q14=class{apply(Z,X){if(X.const===void 0)return Z;let G=X.const;if(typeof G!=="object"||G===null)return Z;return Z.refine((Y)=>Un(Y,G),{message:"Value must equal the const value"})}},$14=class{apply(Z,X){if(X.description)Z=Z.describe(X.description);return Z}},W14=class{apply(Z,X){var G;let Y=X;if(!((G=Y.required)==null?void 0:G.includes("__proto__"))||X.type!==void 0)return Z;return J14.any().refine((Q)=>this.validateRequired(Q,Y.required),{message:"Missing required properties"})}validateRequired(Z,X){if(typeof Z!=="object"||Z===null||Array.isArray(Z))return!0;return X.every((G)=>Object.prototype.hasOwnProperty.call(Z,G))}},K14=class{apply(Z,X){var G;let Y=X;if(Y.contains===void 0)return Z;let Q=WX(Y.contains),$=(G=Y.minContains)!=null?G:1,J=Y.maxContains;return Z.refine((W)=>{if(!Array.isArray(W))return!0;let K=0;for(let N of W)if(NZ0(Q,N))K++;if(K<$)return!1;if(J!==void 0&&K>J)return!1;return!0},{message:"Array must contain required items matching the schema"})}},N14=class{apply(Z,X){let{default:G}=X;if(G===void 0)return Z;if(!Z.safeParse(G).success)return Z;return Z.default(G)}},F14,U14;var K18=B(()=>{F14=[new q04,new M04,new I04,new S04,new V04,new h04,new i04,new C04,new f04,new b04,new v04,new x04,new _04,new y04,new g04,new d04,new u04,new c04,new l04,new n04,new p04,new m04],U14=[new W14,new Y14,new Q14,new s04,new e04,new Z14,new X14,new G14,new K14,new o04,new r04,new N14,new $14]});class al0{constructor(Z){this._url=Z}start(){if(this._socket)throw Error("WebSocketClientTransport already started! If using Client class, note that connect() calls start() automatically.");return new Promise((Z,X)=>{this._socket=new WebSocket(this._url,H14),this._socket.onerror=(G)=>{let Y="error"in G?G.error:Error(`WebSocket error: ${JSON.stringify(G)}`);X(Y),this.onerror?.(Y)},this._socket.onopen=()=>{Z()},this._socket.onclose=()=>{this.onclose?.()},this._socket.onmessage=(G)=>{let Y;try{Y=BQ.parse(JSON.parse(G.data))}catch(Q){this.onerror?.(Q);return}this.onmessage?.(Y)}})}async close(){this._socket?.close()}send(Z){return new Promise((X,G)=>{if(!this._socket){G(Error("Not connected"));return}this._socket?.send(JSON.stringify(Z)),X()})}}var H14="mcp";var N18=B(()=>{n9()});function w14(Z){let X=Z;if(!X||typeof X!=="object"||!("method"in X))return null;switch(X.method){case"initialize":{let G=X?.params?.protocolVersion;if(!G)return null;return{type:"emit",message:{result:{protocolVersion:G,capabilities:{tools:{}},serverInfo:{name:"deco-chat-server",version:"1.0.0"}},jsonrpc:X.jsonrpc??"2.0",id:X.id}}}case"notifications/roots/list_changed":case"notifications/initialized":case"notifications/cancelled":case"notifications/progress":return{type:"suppress"};default:return null}}var UZ0;var sl0=B(()=>{vv();UZ0=class UZ0 extends AW{constructor(Z,X){super(Z,X)}send(Z,X){let G=w14(Z);if(G?.type==="emit")return this.onmessage?.(G.message),Promise.resolve();if(G?.type==="suppress")return Promise.resolve();return super.send(Z,X)}}});var F18,U18=async(Z,X,G)=>{let Y=O14(Z.connection,X,G);if(!Y)throw Error("Unknown MCP connection type");let Q=new F18({name:Z?.name??"MCP Client",version:"1.0.0"});return await Q.connect(Y),{client:Q}},O14=(Z,X,G)=>{if(Z.type==="Websocket")return new al0(new URL(Z.url));if(Z.type!=="SSE"&&Z.type!=="HTTP")return null;let Q={...Z.token?{authorization:`Bearer ${Z.token}`}:{},...G??{},..."headers"in Z?Z.headers||{}:{}};if(Z.type==="SSE"){let $={requestInit:{headers:Q,signal:X}};if(Z.token)$.eventSourceInit={fetch:(J,W)=>{return fetch(J,{...W,headers:{...Q,Accept:"text/event-stream"},signal:X})}};return new iN(new URL(Z.url),$)}return new UZ0(new URL(Z.url),{requestInit:{headers:Q,signal:X,credentials:"include"}})};var H18=B(()=>{jW();dl();N18();n9();CG();sl0();F18=class F18 extends VZ{constructor(Z,X){super(Z,{jsonSchemaValidator:L9,...X})}async listTools(Z,X){return await this.request({method:"tools/list",params:Z},Mc,X)}}});function B18(Z){let X=(G)=>{if("connection"in Z)return U18({connection:Z.connection},void 0,G);return Z.client};return new Proxy({},{get(G,Y){if(Y==="toJSON")return null;if(typeof Y!=="string")throw Error("Name must be a string");if(Y==="listTools")return W;async function Q(K,N=Y){let F=Z?.debugId?.(),U=F?{"x-trace-debug-id":F}:void 0,{client:H}=await X(U),{structuredContent:w,isError:O,content:D}=await H.callTool({name:String(N),arguments:K});if(O){let E=D?.[0]?.text,z=typeof E==="string"?w18(E):null,j=z?.code&&typeof Z?.getErrorByStatusCode==="function"?Z.getErrorByStatusCode(z.code,z.message,z.traceId):null;if(j)throw j;throw Error(`Tool ${String(N)} returned an error: ${JSON.stringify(w??D)}`)}if(w!==void 0)return w;let L=D?.[0]?.text;return typeof L==="string"?w18(L):void 0}async function $(){let{client:K}=await X(),{tools:N}=await K.listTools();return N}async function J(){if(!("connection"in Z))return $();let K=Z.connection,N=JSON.stringify(K);try{if(!HZ0.has(N))HZ0.set(N,$());return await HZ0.get(N)}catch(F){console.error("Failed to list tools",F),HZ0.delete(N);return}}async function W(){return(await J()??[]).map((N)=>O18(N,Q))}return Q.asTool=async()=>{let N=(await J()??[]).find((F)=>F.name===Y);if(!N)throw Error(`Tool ${Y} not found`);return O18(N,Q)},Q}})}var w18=(Z)=>{try{return JSON.parse(Z)}catch{return Z}},HZ0,O18=(Z,X)=>{return{...Z,id:Z.name,inputSchema:Z.inputSchema?WX(Z.inputSchema):void 0,outputSchema:Z.outputSchema?WX(Z.outputSchema):void 0,execute:(G)=>{return X(G.context,Z.name)}}};var D18=B(()=>{K18();H18();HZ0=new Map});function kw(Z){return B18(Z)}var b_;var el0=B(()=>{D18();b_=new Proxy({},{get(Z,X){if(X==="toJSON")return null;if(X==="forConnection")return(G)=>kw({connection:G});if(X==="forClient")return(G)=>kw({client:G});return globalThis[X]}})});function wZ0(Z){return{isImplementedBy:(X)=>{for(let G of Z){let Y=typeof G.name==="string"?new RegExp(`^${G.name}$`):G.name,Q=X.find(($)=>Y.test($.name));if(!Q&&G.opt)continue;if(!Q)return!1}return!0}}}var oW=(Z)=>{return{...wZ0(Z),forClient:(X)=>{return kw({client:X})},forConnection:(X)=>{return kw({connection:X})}}};var nL=B(()=>{el0()});import{z as C9}from"zod";var L18,OZ0,E18,BZ0,z18,B14;var j18=B(()=>{nL();L18=C9.object({specversion:C9.literal("1.0").describe("CloudEvents specification version"),id:C9.string().describe("Unique identifier for this event (UUID recommended)"),source:C9.string().describe("Connection ID of the event publisher"),type:C9.string().describe("Event type (e.g., 'order.created', 'user.signup')"),time:C9.string().datetime().optional().describe("Timestamp of when the event occurred (ISO 8601)"),subject:C9.string().optional().describe("Subject/resource identifier (e.g., order ID, user ID)"),datacontenttype:C9.string().optional().default("application/json").describe("Content type of the data attribute"),dataschema:C9.string().url().optional().describe("URI to the schema for the data attribute"),data:C9.unknown().optional().describe("Event payload (any JSON value)")}),OZ0=C9.object({events:C9.array(L18).min(1).describe("Batch of CloudEvents to process")}),E18=C9.object({success:C9.boolean().optional().describe("Whether this event was processed successfully"),error:C9.string().optional().describe("Error message for this event"),retryAfter:C9.number().int().positive().optional().describe("Re-deliver this event after this many ms")}),BZ0=C9.object({success:C9.boolean().optional().describe("Batch success - applies to events not in results"),error:C9.string().optional().describe("Batch error message - applies to events not in results"),processedCount:C9.number().int().min(0).optional().describe("Number of events successfully processed"),retryAfter:C9.number().int().positive().optional().describe("Batch retryAfter - applies to events not in results"),results:C9.record(C9.string(),E18).optional().describe("Per-event results keyed by event ID")}),z18=[{name:"ON_EVENTS",inputSchema:OZ0,outputSchema:BZ0}],B14=oW(z18)});import{z as f9}from"zod";var A18,P18,T18,R18,I18,q18,DZ0,Zd0;var Xd0=B(()=>{nL();A18=f9.object({type:f9.literal("string"),enum:f9.array(f9.string()).optional(),description:f9.string().optional()}),P18=f9.object({type:f9.string(),description:f9.string(),paramsSchema:f9.record(f9.string(),A18)}),T18=f9.object({}),R18=f9.object({triggers:f9.array(P18)}),I18=f9.object({type:f9.string(),params:f9.record(f9.string(),f9.string()),enabled:f9.boolean(),callbackUrl:f9.url().optional(),callbackToken:f9.string().min(1).optional()}),q18=f9.object({success:f9.boolean()}),DZ0=[{name:"TRIGGER_LIST",inputSchema:T18,outputSchema:R18},{name:"TRIGGER_CONFIGURE",inputSchema:I18,outputSchema:q18}],Zd0=oW(DZ0)});import{z as A5}from"zod";var M18,k18,S18,Hn,LZ0,EZ0,zZ0,jZ0,D14;var Gd0=B(()=>{nL();M18=A5.object({primary:A5.string().optional().describe("Primary brand color (hex)"),secondary:A5.string().optional().describe("Secondary brand color (hex)"),accent:A5.string().optional().describe("Accent / highlight color (hex)"),background:A5.string().optional().describe("Background color (hex)"),foreground:A5.string().optional().describe("Foreground / text color (hex)")}),k18=A5.object({heading:A5.string().optional().describe("Font family for headings"),body:A5.string().optional().describe("Font family for body text"),code:A5.string().optional().describe("Font family for code / monospace")}),S18=A5.object({logo:A5.string().optional().describe("Logo URL"),favicon:A5.string().optional().describe("Favicon URL"),ogImage:A5.string().optional().describe("Open Graph image URL")}),Hn=A5.object({id:A5.string(),name:A5.string().describe("Brand / company name"),domain:A5.string().optional().describe("Company domain (e.g. example.com)"),colors:M18.optional().describe("Semantic color palette"),fonts:k18.optional().describe("Font families by role"),assets:S18.optional().describe("Visual identity assets"),overview:A5.string().optional().describe("Company overview / description"),tagline:A5.string().optional().describe("Brand tagline"),tone:A5.string().optional().describe("Tone of voice description"),metadata:A5.record(A5.string(),A5.unknown()).optional().describe("Extra design tokens and metadata")}),LZ0=A5.object({id:A5.string().optional().describe("Brand ID. Omit to get the default brand.")}),EZ0=A5.object({}),zZ0=A5.object({items:A5.array(Hn)}),jZ0=[{name:"BRAND_GET",inputSchema:LZ0,outputSchema:Hn},{name:"BRAND_LIST",inputSchema:EZ0,outputSchema:zZ0,opt:!0}],D14=oW(jZ0)});var Yd0=B(()=>{nL();j18();Xd0();bc();Gd0()});import{z as j6}from"zod";function wF(Z){return j6.object({items:j6.array(Z).describe("Array of collection items"),totalCount:j6.number().int().min(0).optional().describe("Total number of matching items (if available)"),hasMore:j6.boolean().optional().describe("Whether there are more items available")})}function On(Z){return j6.object({item:Z.nullable().describe("The retrieved item, or null if not found")})}function z14(Z){return j6.object({data:Z.partial().describe("Data for the new entity (id may be auto-generated)")})}function j14(Z){return j6.object({item:Z.describe("The created entity with generated id")})}function A14(Z){return j6.object({id:j6.string().describe("ID of the entity to update"),data:Z.partial().describe("Partial entity data to update")})}function P14(Z){return j6.object({item:Z.describe("The updated entity")})}function Dn(Z){return j6.object({item:Z.describe("The deleted entity")})}function PZ0(Z,X,G){let Y=Z.toUpperCase(),Q=G?.readOnly??!1,$=[{name:`COLLECTION_${Y}_LIST`,inputSchema:wJ,outputSchema:wF(X)},{name:`COLLECTION_${Y}_GET`,inputSchema:wn,outputSchema:On(X)}];if(!Q)$.push({name:`COLLECTION_${Y}_CREATE`,inputSchema:z14(X),outputSchema:j14(X),opt:!0},{name:`COLLECTION_${Y}_UPDATE`,inputSchema:A14(X),outputSchema:P14(X),opt:!0},{name:`COLLECTION_${Y}_DELETE`,inputSchema:Bn,outputSchema:Dn(X),opt:!0});return $}var AZ0,L14,V18,E14,wJ,wn,Bn;var u3=B(()=>{AZ0=j6.object({id:j6.string().describe("Unique identifier for the entity"),title:j6.string().describe("Human-readable title for the entity"),description:j6.string().nullish().describe("Description of the entity"),created_at:j6.string().datetime(),updated_at:j6.string().datetime(),created_by:j6.string().optional(),updated_by:j6.string().optional()}),L14=j6.object({field:j6.array(j6.string()),operator:j6.enum(["eq","gt","gte","lt","lte","in","like","contains"]),value:j6.unknown()}),V18=j6.lazy(()=>j6.union([L14,j6.object({operator:j6.enum(["and","or","not"]),conditions:j6.array(V18)})])),E14=j6.object({field:j6.array(j6.string()),direction:j6.enum(["asc","desc"]),nulls:j6.enum(["first","last"]).optional()}),wJ=j6.object({where:V18.optional().describe("Filter expression"),orderBy:j6.array(E14).optional().describe("Sort expressions"),limit:j6.number().int().min(1).max(1000).optional().describe("Maximum number of items to return"),offset:j6.number().int().min(0).optional().describe("Number of items to skip")});wn=j6.object({id:j6.string().describe("ID of the entity to retrieve")});Bn=j6.object({id:j6.string().describe("ID of the entity to delete")})});import{z as v_}from"zod";var T14,R14,C18;var f18=B(()=>{u3();T14=AZ0.extend({avatar:v_.string().describe("URL or data URI to the assistant's avatar image"),system_prompt:v_.string().describe("System prompt that defines the assistant's behavior"),virtual_mcp_id:v_.string().describe("Virtual MCP ID to use for this assistant"),model:v_.object({id:v_.string().describe("Model ID"),connectionId:v_.string().describe("Connection ID that provides the model")}).describe("Selected model reference for this assistant")}),R14=PZ0("assistant",T14),C18=[...R14]});import{z as I0}from"zod";var Ln,OF,v18,I14,q14,x18,M14,k14,S14,V14,C14,f14,_18,b14,v14,x14,_14,y14,g14,h14,u14,c14,l14,UK9,d14,HK9,b18,m14,i14,TZ0,wK9;var y18=B(()=>{nL();u3();Ln=I0.lazy(()=>I0.union([I0.null(),I0.string(),I0.number(),I0.boolean(),I0.record(I0.string(),Ln),I0.array(Ln)])),OF=I0.record(I0.string(),I0.record(I0.string(),Ln)).optional().describe("Additional provider-specific options. Outer record keyed by provider name, inner by option key"),v18=I0.object({type:I0.literal("text"),text:I0.string().describe("The text content"),providerOptions:OF}),I14=I0.object({type:I0.literal("text"),text:I0.string().describe("The text content"),providerMetadata:I0.any().optional().describe("Additional provider-specific metadata")}),q14=I0.string().describe("File data as URL string"),x18=I0.object({type:I0.literal("file"),filename:I0.string().optional().describe("Optional filename of the file"),data:q14,mediaType:I0.string().describe("IANA media type of the file (e.g., image/png, audio/mp3)"),providerOptions:OF}),M14=I0.object({type:I0.literal("file"),mediaType:I0.string().describe("IANA media type of the file (e.g., image/png, audio/mp3)"),data:I0.string().describe("Generated file data as base64 encoded string")}),k14=I0.object({type:I0.literal("reasoning"),text:I0.string().describe("The reasoning text"),providerOptions:OF}),S14=I0.object({type:I0.literal("reasoning"),text:I0.string().describe("The reasoning text"),providerMetadata:I0.any().optional().describe("Additional provider-specific metadata")}),V14=I0.object({type:I0.literal("tool-call"),toolCallId:I0.string().describe("ID of the tool call, used to match with tool result"),toolName:I0.string().describe("Name of the tool being called"),input:I0.string().describe("Arguments of the tool call (JSON-serializable object matching tool input schema)"),providerExecuted:I0.boolean().optional().describe("Whether the tool call will be executed by the provider"),providerOptions:OF}),C14=I0.object({type:I0.literal("tool-call"),toolCallId:I0.string().describe("ID of the tool call"),toolName:I0.string().describe("Name of the tool being called"),input:I0.string().describe("Stringified JSON object with the tool call arguments"),providerExecuted:I0.boolean().optional().describe("Whether the tool call will be executed by the provider"),providerMetadata:I0.any().optional().describe("Additional provider-specific metadata")}),f14=I0.union([I0.object({type:I0.literal("text"),value:I0.string()}),I0.object({type:I0.literal("json"),value:Ln}),I0.object({type:I0.literal("error-text"),value:I0.string()}),I0.object({type:I0.literal("error-json"),value:Ln}),I0.object({type:I0.literal("content"),value:I0.array(I0.union([I0.object({type:I0.literal("text"),text:I0.string().describe("Text content")}),I0.object({type:I0.literal("media"),data:I0.string().describe("Base-64 encoded media data"),mediaType:I0.string().describe("IANA media type")})]))}),I0.object({type:I0.literal("execution-denied"),reason:I0.string().optional()}),I0.string().describe("Raw or JSON-serialized output (e.g. from AI SDK mapToolResultOutput)")]),_18=I0.object({type:I0.literal("tool-result"),toolCallId:I0.string().describe("ID of the tool call that this result is associated with"),toolName:I0.string().describe("Name of the tool that generated this result"),output:f14.describe("Result of the tool call"),result:I0.unknown().describe("Unknown result of the tool call"),providerOptions:OF}),b14=I0.object({type:I0.literal("tool-result"),toolCallId:I0.string().describe("ID of the tool call that this result is associated with"),toolName:I0.string().describe("Name of the tool that generated this result"),result:I0.any().describe("Result of the tool call (JSON-serializable)"),isError:I0.boolean().optional().describe("Whether the result is an error or error message"),providerExecuted:I0.boolean().optional().describe("Whether the tool result was generated by the provider"),providerMetadata:I0.any().optional().describe("Additional provider-specific metadata")}),v14=I0.union([I0.object({type:I0.literal("source"),sourceType:I0.literal("url"),id:I0.string().describe("The ID of the source"),url:I0.string().describe("The URL of the source"),title:I0.string().optional().describe("The title of the source"),providerMetadata:I0.any().optional().describe("Additional provider-specific metadata")}),I0.object({type:I0.literal("source"),sourceType:I0.literal("document"),id:I0.string().describe("The ID of the source"),mediaType:I0.string().describe("IANA media type of the document (e.g., application/pdf)"),title:I0.string().describe("The title of the document"),filename:I0.string().optional().describe("Optional filename of the document"),providerMetadata:I0.any().optional().describe("Additional provider-specific metadata")})]),x14=I0.object({role:I0.literal("system"),content:I0.string().describe("System message content"),providerOptions:OF}),_14=I0.object({role:I0.literal("user"),content:I0.array(I0.union([v18,x18])).describe("User message content parts (text or file)"),providerOptions:OF}),y14=I0.object({role:I0.literal("assistant"),content:I0.array(I0.union([v18,x18,k14,V14,_18])).describe("Assistant message content parts (text, file, reasoning, tool-call, or tool-result)"),providerOptions:OF}),g14=I0.object({role:I0.literal("tool"),content:I0.array(_18).describe("Tool message content (tool results)"),providerOptions:OF}),h14=I0.union([x14,_14,y14,g14]),u14=I0.array(h14).describe("A list of messages forming the prompt"),c14=I0.object({prompt:u14.describe("A language model prompt is a standardized prompt type (array of messages with roles: system, user, assistant, tool)"),maxOutputTokens:I0.number().optional().describe("Maximum number of tokens to generate"),temperature:I0.number().optional().describe("Temperature setting. The range depends on the provider and model"),topP:I0.number().optional().describe("Nucleus sampling parameter"),topK:I0.number().optional().describe("Only sample from the top K options for each subsequent token. Used to remove long tail low probability responses"),presencePenalty:I0.number().optional().describe("Presence penalty setting. It affects the likelihood of the model to repeat information that is already in the prompt"),frequencyPenalty:I0.number().optional().describe("Frequency penalty setting. It affects the likelihood of the model to repeatedly use the same words or phrases"),seed:I0.number().optional().describe("The seed (integer) to use for random sampling. If set and supported by the model, calls will generate deterministic results"),stopSequences:I0.array(I0.string()).optional().describe("Stop sequences. If set, the model will stop generating text when one of the stop sequences is generated"),responseFormat:I0.union([I0.object({type:I0.literal("text")}),I0.object({type:I0.literal("json"),schema:I0.any().optional().describe("JSON schema that the generated output should conform to"),name:I0.string().optional().describe("Name of output that should be generated"),description:I0.string().optional().describe("Description of the output that should be generated")})]).optional().describe("Response format. The output can either be text or JSON. Default is text"),tools:I0.array(I0.any()).optional().describe("The tools that are available for the model"),toolChoice:I0.any().optional().describe("Specifies how the tool should be selected. Defaults to 'auto'"),includeRawChunks:I0.boolean().optional().describe("Include raw chunks in the stream. Only applicable for streaming calls"),abortSignal:I0.any().optional().describe("Abort signal for cancelling the operation"),providerOptions:I0.any().optional().describe("Additional provider-specific options")}),l14=I0.object({content:I0.array(I0.union([I14,M14,S14,C14,b14,v14])).describe("Ordered content that the model has generated (text, tool-calls, reasoning, files, sources)"),finishReason:I0.enum(["stop","length","content-filter","tool-calls","error","other","unknown"]).describe("Reason why generation stopped"),usage:I0.looseObject({inputTokens:I0.number().optional(),outputTokens:I0.number().optional(),totalTokens:I0.number().optional(),reasoningTokens:I0.number().optional()}).describe("Usage information for the language model call"),providerMetadata:I0.any().optional().describe("Additional provider-specific metadata"),request:I0.object({body:I0.any().optional().describe("Request HTTP body sent to the provider API")}).optional().describe("Optional request information for telemetry and debugging"),response:I0.object({id:I0.string().optional().describe("ID for the generated response"),timestamp:I0.iso.datetime().optional().describe("Timestamp for the start of the generated response"),modelId:I0.string().optional().describe("The ID of the response model that was used"),headers:I0.record(I0.string(),I0.string()).optional().describe("Response headers"),body:I0.any().optional().describe("Response HTTP body")}).optional().describe("Optional response information for telemetry and debugging"),warnings:I0.array(I0.any()).describe("Warnings for the call, e.g. unsupported settings")}),UK9=I0.object({stream:I0.any().describe("ReadableStream of LanguageModelV2StreamPart"),request:I0.object({body:I0.any().optional().describe("Request HTTP body sent to the provider API")}).optional().describe("Optional request information for telemetry and debugging"),response:I0.object({headers:I0.record(I0.string(),I0.string()).optional().describe("Response headers")}).optional().describe("Optional response data")}),d14=I0.object({supportedUrls:I0.record(I0.string(),I0.array(I0.string())).describe("Supported URL patterns by media type for the provider")}),HK9=I0.object({modelId:I0.string().describe("The ID of the model"),logo:I0.string().nullable(),description:I0.string().nullable(),capabilities:I0.array(I0.string()),limits:I0.object({contextWindow:I0.number(),maxOutputTokens:I0.number()}).nullable(),costs:I0.object({input:I0.number(),output:I0.number()}).nullable(),provider:I0.enum(["openai","anthropic","google","x-ai","deepseek","openai-compatible","openrouter"]).nullable()}),b18=I0.object({modelId:I0.string().describe("The ID of the model"),callOptions:c14}),m14=AZ0.extend({logo:I0.string().nullable(),description:I0.string().nullable(),capabilities:I0.array(I0.string()),limits:I0.object({contextWindow:I0.number(),maxOutputTokens:I0.number()}).nullable(),costs:I0.object({input:I0.number(),output:I0.number()}).nullable(),provider:I0.enum(["openai","anthropic","google","xai","deepseek","openai-compatible","openrouter"]).nullable()}),i14=PZ0("llm",m14,{readOnly:!0}),TZ0=[{name:"LLM_METADATA",inputSchema:I0.object({modelId:I0.string().describe("The ID of the model")}),outputSchema:d14},{name:"LLM_DO_STREAM",inputSchema:b18},{name:"LLM_DO_GENERATE",inputSchema:b18,outputSchema:l14},...i14],wK9=oW(TZ0)});import{z as pL}from"zod";var n14,g18;var h18=B(()=>{n14=pL.object({scopes:pL.array(pL.string()).describe("List of scopes available"),stateSchema:pL.record(pL.string(),pL.unknown()).describe("JSON Schema (draft-07) defining the state structure")}),g18=[{name:"MCP_CONFIGURATION",inputSchema:pL.object({}),outputSchema:n14}]});import{z as b9}from"zod";var p14,t14,u18;var c18=B(()=>{p14=b9.object({}).strict(),t14=b9.object({billing:b9.object({mode:b9.enum(["prepaid","postpaid"]),limitPeriod:b9.enum(["daily","weekly","monthly"]).nullable()}),limit:b9.object({total:b9.number().nullable(),remaining:b9.number().nullable(),reset:b9.string().nullable()}),usage:b9.object({total:b9.number(),daily:b9.number(),weekly:b9.number(),monthly:b9.number()}),alert:b9.object({enabled:b9.boolean(),threshold_usd:b9.number(),email:b9.string().nullable()}),connectionId:b9.string()}),u18=[{name:"GATEWAY_USAGE",inputSchema:p14,outputSchema:t14},{name:"GATEWAY_SET_LIMIT",inputSchema:b9.object({}),outputSchema:b9.object({}),opt:!0},{name:"GATEWAY_SET_ALERT",inputSchema:b9.object({}),outputSchema:b9.object({}),opt:!0}]});function l18(Z,X){return Z||X===0}function d18(Z,X,G,Y,Q){let $=X?Q+1:Q,J=X?Z.slice(0,G):Z,W=Y+G<$;return{items:J,totalCount:$,hasMore:W}}function o14(Z,X){if(X.length===0)return;let[G,...Y]=X,Q=G==="slug"?wH(Z):Z[G];for(let $ of Y){if(Q===null||typeof Q!=="object")return;Q=Q[$]}return Q}function r14(Z){let G=Z.replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/%/g,".*").replace(/_/g,".");return new RegExp(`^${G}$`,"i")}function a14(Z,X,G){if(Z===void 0)return!0;switch(X){case"eq":return G===null?Z===null:Z===G;case"gt":return Z>G;case"gte":return Z>=G;case"lt":return Z<G;case"lte":return Z<=G;case"in":return Array.isArray(G)&&G.includes(Z);case"like":return typeof Z==="string"&&r14(String(G)).test(Z);case"contains":return String(Z).toLowerCase().includes(String(G).toLowerCase());default:return!0}}function En(Z,X){if(!X)return!0;if("conditions"in X){let{operator:Y,conditions:Q}=X;if(Q.length===0)return!0;switch(Y){case"and":return Q.every(($)=>En(Z,$));case"or":return Q.some(($)=>En(Z,$));case"not":return!Q.every(($)=>En(Z,$));default:return!0}}let G=o14(Z,X.field);return a14(G,X.operator,X.value)}var m18=B(()=>{L80()});async function i18(Z,X,G){if(Z.length===0)return;let Y=0;async function Q(){while(Y<Z.length){let $=Y++;await G(Z[$])}}await Promise.all(Array.from({length:Math.min(X,Z.length)},()=>Q()))}import{z as Sw}from"zod";var s14=8,e14,Z84,X84,G84,Qd0;var n18=B(()=>{Yd0();f18();u3();y18();h18();bc();c18();R6();e0();rZ();AQ();HF();lb();BW();L80();m18();e14=[{name:/^(COLLECTION_REGISTRY_APP_LIST|REGISTRY_ITEM_LIST)$/,inputSchema:Sw.object({})}],Z84={LLM:TZ0,LLMS:TZ0,ASSISTANTS:C18,MCP:g18,OBJECT_STORAGE:ND,AI_GATEWAY_BILLING:u18,TRIGGER:DZ0,REGISTRY:e14,BRAND:jZ0},X84=wJ.extend({binding:Sw.union([Sw.array(Sw.object({}).passthrough()),Sw.object({}).passthrough(),Sw.string()]).optional(),include_virtual:Sw.boolean().optional().describe("Whether to include VIRTUAL connections in the results. Defaults to false."),slug:Sw.string().optional().describe("Filter by connection slug. Matches against app_name, or a slug derived from connection_url or title.")}),G84=wF(bX),Qd0=s({name:"COLLECTION_CONNECTIONS_LIST",description:"List all connections in the organization with filtering, sorting, and pagination",annotations:{title:"List Connections",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:X84,outputSchema:G84,handler:async(Z,X)=>{await X.access.check();let G=B0(X),Y=Z.binding?typeof Z.binding==="string"?(()=>{let U=Z84[Z.binding.toUpperCase()];if(!U)throw Error(`Unknown binding: ${Z.binding}`);return U})():Z.binding:void 0,Q=Y?wZ0(Y):void 0,$=!!Q,J=Z.limit??100,W=Z.offset??0,{items:K,totalCount:N}=await X.storage.connections.list(G.id,{includeVirtual:Z.include_virtual??!1,slug:Z.slug,where:Z.where,orderBy:Z.orderBy,limit:$?void 0:J,offset:$?void 0:W});if(Q){let U=p9(),H=p4.SELF(G.id);await i18(K,s14,async(w)=>{if(w.tools!==null)return;let O=w.id===H?async()=>{let{listManagementTools:L}=await Promise.resolve().then(() => (tL(),RZ0));return L(X)}:()=>tl0(w,X,E80),D=await VH("tools",w.id,O,U,(L)=>X.pendingRevalidations.push(L),SH);if(D!==null)w.tools=D})}let F=!1;if(v$()&&l18($,W)){let U=kZ(),H=p4.DEV_ASSETS(G.id);if(!K.some((w)=>w.id===H)){let w=cb(G.id,U),O=!Z.slug||wH(w)===Z.slug,D=En(w,Z.where);if(O&&D)K.unshift(w),F=!0}}if($){let U=(await Promise.all(K.map(async(D)=>{if(!D.tools||D.tools.length===0)return null;return Q.isImplementedBy(D.tools.map((E)=>({name:E.name,inputSchema:E.inputSchema,outputSchema:E.outputSchema})))?D:null}))).filter((D)=>D!==null),H=U.length,w=U.slice(W,W+J),O=W+J<H;return{items:w,totalCount:H,hasMore:O}}return d18(K,F,J,W,N)}})});var Y84,$d0;var p18=B(()=>{u3();R6();e0();rZ();AQ();HF();lb();BW();Y84=On(bX),$d0=s({name:"COLLECTION_CONNECTIONS_GET",description:"Get a connection's configuration, tools list, and status by ID.",annotations:{title:"Get Connection",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},_meta:{ui:{visibility:["app"]}},inputSchema:wn,outputSchema:Y84,handler:async(Z,X)=>{let G=B0(X);if(await X.access.check(),v$()&&E10(Z.id,G.id))return{item:cb(G.id,kZ())};let Y=await X.storage.connections.findById(Z.id);if(!Y||Y.organization_id!==G.id)return{item:null};if(Y.tools===null){let Q=p4.SELF(G.id),$=Y.id===Q?async()=>{let{listManagementTools:W}=await Promise.resolve().then(() => (tL(),RZ0));return W(X)}:async()=>{let W=await o9(Y,X,!0);try{return(await W.listTools()).tools}finally{await W.close().catch(()=>{})}},J=await VH("tools",Y.id,$,p9(),(W)=>X.pendingRevalidations.push(W),SH);if(J!==null)Y.tools=J}return{item:Y}}})});import{z as Jd0}from"zod";function J84(Z,X){return Z.length===X.length&&Z.every((G,Y)=>G===X[Y])}var Q84,$84,Wd0;var t18=B(()=>{HF();HJ();e0();b8();AQ();jm();ol0();pl();BW();Q84=Jd0.object({id:Jd0.string().describe("ID of the connection to update"),data:G10.describe("Partial connection data to update")}),$84=Jd0.object({item:bX.describe("The updated connection entity")});Wd0=s({name:"COLLECTION_CONNECTIONS_UPDATE",description:"Update a connection's configuration. Re-fetches tools from the server on URL change.",annotations:{title:"Update Connection",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:Q84,outputSchema:$84,handler:async(Z,X)=>{D0(X);let G=B0(X);await X.access.check();let Y=V1(X);if(!Y)throw Error("User ID required to update connection");let{id:Q,data:$}=Z,J=$.configuration_state!==void 0||$.configuration_scopes!==void 0,W=await X.storage.connections.findById(Q);if(!W||W.organization_id!==G.id)throw Error("Connection not found in organization");let K=$.connection_type??W.connection_type,N=$.connection_url??W.connection_url;if(K==="VIRTUAL"){let v=_b(N);if(!v)throw Error("VIRTUAL connection requires connection_url in format: virtual://$virtual_mcp_id");let x=await X.storage.virtualMcps.findById(v);if(!x)throw Error(`Virtual MCP not found: ${v}`);if(x.organization_id!==G.id)throw Error("Virtual MCP does not belong to the current organization");N=yb(v)}let F=$.configuration_state??W.configuration_state??{},U=$.configuration_scopes??W.configuration_scopes??[];if(J){if($.configuration_state!==void 0)F=$.configuration_state??{};else if(F===null||F===void 0)F={};if($.configuration_scopes!==void 0)U=$.configuration_scopes??[];if(U.length>0){let v=F;Kn(v,U,G.id),await Fn(v,U,G.id,X)}}if(K==="STDIO"&&!$1().localMode)throw Error("STDIO connections are only available in local mode (--local-mode).");let H=$.connection_token??W.connection_token;if(!H)try{let x=await new V9(X.db,X.vault).get(Q);if(x?.accessToken)H=x.accessToken}catch{}let w=await IH({id:W.id,title:$.title??W.title,connection_type:K,connection_url:N,connection_token:H,connection_headers:$.connection_headers??W.connection_headers}).catch(()=>null),O=w?.tools?.length?w.tools:null,D=!1;if($.configuration_scopes===void 0&&w?.scopes?.length)D=!J84(U,w.scopes),U=w.scopes;if(Kn(F,U,G.id),D&&U.length>0)await Fn(F,U,G.id,X);let L=J||D,E=L?Nn(F,U):[],z=L?Nn(W.configuration_state??{},W.configuration_scopes??[]):[],j=W.configuration_state,A=j==null||Object.keys(j).length===0,P,q,S=async()=>{try{await X.storage.connectionCredentialVault.replaceGrantsForSubject({organizationId:G.id,subjectConnectionId:Q,createdBy:Y,grants:z})}catch(v){console.error("Failed to restore credential grants after credential vault mutation failed",v)}},M={...$,connection_url:N,tools:null,configuration_state:F,configuration_scopes:U,updated_by:Y},C={...W,...M};if(L)try{if(await X.storage.connectionCredentialVault.replaceGrantsForSubject({organizationId:G.id,subjectConnectionId:Q,createdBy:Y,grants:E}),E.length>0){if(!await X.storage.connectionCredentialVault.findActiveWorkloadToken({organizationId:G.id,subjectConnectionId:Q})){let{plaintextToken:x,record:e}=await X.storage.connectionCredentialVault.createOrRotateWorkloadToken({organizationId:G.id,subjectConnectionId:Q});q=e.id,P={baseUrl:X.baseUrl,org:G.slug??G.id,subjectConnectionId:Q,token:x}}}}catch(v){if(q)await X.storage.connectionCredentialVault.revokeWorkloadToken({organizationId:G.id,subjectConnectionId:Q,tokenId:q});throw await S(),v}if(L&&F&&U)try{await(await o9(C,X,!1)).callTool({name:"ON_MCP_CONFIGURATION",arguments:{state:F,scopes:U,firstRun:A,...P?{vault:P}:{}}})}catch(v){if(console.error("Failed to invoke ON_MCP_CONFIGURATION callback",v),q)throw await X.storage.connectionCredentialVault.revokeWorkloadToken({organizationId:G.id,subjectConnectionId:Q,tokenId:q}),await S(),v}let m;try{m=await X.storage.connections.update(Q,M)}catch(v){if(L){if(q)await X.storage.connectionCredentialVault.revokeWorkloadToken({organizationId:G.id,subjectConnectionId:Q,tokenId:q});await S()}throw v}if(O)p9()?.set("tools",Q,O).catch(()=>{});return dx(Q),{item:m}}})});import{z as W84}from"zod";var K84,Kd0;var o18=B(()=>{u3();q5();e0();AQ();jm();BW();K84=Bn.extend({force:W84.boolean().optional().describe("If true, removes this connection from all agents that reference it before deleting")}),Kd0=s({name:"COLLECTION_CONNECTIONS_DELETE",description:"Permanently delete a connection. Set force=true to auto-remove from referencing Virtual MCPs.",annotations:{title:"Delete Connection",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:K84,outputSchema:Dn(bX),handler:async(Z,X)=>{D0(X);let G=B0(X);await X.access.check();let Y=await X.storage.connections.findById(Z.id);if(!Y)throw Error(`Connection not found: ${Z.id}`);if(Y.organization_id!==G.id)throw Error("Connection not found in organization");if(Y.metadata?.isFixed===!0)throw Error("This connection is a fixed system connection and cannot be deleted");let $=await X.storage.virtualMcps.listByConnectionId(G.id,Z.id);if($.length>0)if(Z.force)await X.storage.virtualMcps.removeConnectionReferences(Z.id);else throw Error(JSON.stringify({code:"CONNECTION_IN_USE",agentNames:$.map((K)=>K.title)}));await X.storage.connections.delete(Z.id);let J=await X.storage.organizationSettings.get(G.id);if(J?.registry_config){let{registries:K,blockedMcps:N}=J.registry_config;if(Z.id in K){let{[Z.id]:F,...U}=K;await X.storage.organizationSettings.upsert(G.id,{registry_config:{registries:U,blockedMcps:N}})}}p9()?.invalidate(Z.id).catch(()=>{}),dx(Z.id);let W=V1(X);if(W)i1.capture({distinctId:W,event:"connection_deleted",groups:{organization:G.id},properties:{connection_id:Y.id,connection_type:Y.connection_type,app_name:Y.app_name??null,organization_id:G.id,forced:Z.force??!1}});return{item:Y}}})});import{z as x_}from"zod";var Nd0;var r18=B(()=>{e0();Nd0=s({name:"CONNECTION_TEST",description:"Test connection health and latency",annotations:{title:"Test Connection",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:x_.object({id:x_.string()}),outputSchema:x_.object({id:x_.string(),healthy:x_.boolean(),latencyMs:x_.number()}),handler:async(Z,X)=>{let G=B0(X);await X.access.check();let Y=await X.storage.connections.findById(Z.id);if(!Y||Y.organization_id!==G.id)throw Error("Connection not found");let Q=await X.storage.connections.testConnection(Z.id);return{id:Z.id,...Q}}})});var a18=B(()=>{Q18();n18();p18();t18();o18();r18()});import{sql as u4}from"kysely";import{z as rW}from"zod";function s18(Z){if(Z===null||Z===void 0)return"NULL";if(typeof Z==="number")return String(Z);if(typeof Z==="boolean")return Z?"TRUE":"FALSE";if(typeof Z==="string")return`'${Z.replace(/'/g,"''")}'`;if(Z instanceof Date)return`'${Z.toISOString()}'`;return`'${JSON.stringify(Z).replace(/'/g,"''")}'`}function U84(Z,X){let G=Z;for(let Q=X.length;Q>=1;Q--){let $=`$${Q}`;if(G.includes($))G=G.replaceAll($,s18(X[Q-1]))}let Y=[];for(let Q=0;Q<G.length;Q++)if(G[Q]==="?")Y.push(Q);for(let Q=Math.min(Y.length,X.length)-1;Q>=0;Q--){let $=Y[Q],J=s18(X[Q]);G=G.slice(0,$)+J+G.slice($+1)}return G}function e18(Z){return Z.replace(/-/g,"_")}function w84(Z){return`app_${e18(Z)}`}function O84(Z){return`app_role_${e18(Z)}`}function B84(Z){if(Z instanceof Error){let X=Z.message.toLowerCase(),G=Z.code;return G==="3F000"||G==="42704"||G==="22023"||X.includes("schema")&&X.includes("does not exist")||X.includes("role")&&X.includes("does not exist")}return!1}async function D84(Z,X,G){if(await u4`CREATE SCHEMA IF NOT EXISTS ${u4.id(X)}`.execute(Z),!(await u4`
1149
1149
  SELECT EXISTS (SELECT 1 FROM pg_roles WHERE rolname = ${G}) as exists
1150
- `.execute(Z)).rows[0]?.exists)await u4`CREATE ROLE ${u4.id(G)} NOLOGIN`.execute(Z);await u4`GRANT ${u4.id(G)} TO CURRENT_USER`.execute(Z),await u4`GRANT USAGE, CREATE ON SCHEMA ${u4.id(X)} TO ${u4.id(G)}`.execute(Z),await u4`GRANT ALL ON ALL TABLES IN SCHEMA ${u4.id(X)} TO ${u4.id(G)}`.execute(Z),await u4`GRANT ALL ON ALL SEQUENCES IN SCHEMA ${u4.id(X)} TO ${u4.id(G)}`.execute(Z),await u4`ALTER DEFAULT PRIVILEGES IN SCHEMA ${u4.id(X)} GRANT ALL ON TABLES TO ${u4.id(G)}`.execute(Z),await u4`ALTER DEFAULT PRIVILEGES IN SCHEMA ${u4.id(X)} GRANT ALL ON SEQUENCES TO ${u4.id(G)}`.execute(Z),await u4`REVOKE ALL ON SCHEMA public FROM ${u4.id(G)}`.execute(Z)}async function L84(Z,X,G,Y){try{return await Z.transaction().execute(async(Q)=>{return await u4`SET LOCAL ROLE ${u4.id(G)}`.execute(Q),await u4`SET LOCAL search_path TO ${u4.id(X)}`.execute(Q),await u4.raw(Y).execute(Q)})}catch(Q){if(B84(Q))return await D84(Z,X,G),await Z.transaction().execute(async($)=>{return await u4`SET LOCAL ROLE ${u4.id(G)}`.execute($),await u4`SET LOCAL search_path TO ${u4.id(X)}`.execute($),await u4.raw(Y).execute($)});throw Q}}var F84,H84,Z88;var X88=B(()=>{e0();F84=rW.object({results:rW.array(rW.unknown()).optional(),success:rW.boolean().optional()});H84=rW.object({sql:rW.string().describe("The SQL query to run"),params:rW.array(rW.any()).describe("The parameters to pass to the SQL query").optional()});Z88=s({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:H84,outputSchema:rW.object({result:rW.array(F84)}),handler:async(Z,X)=>{D0(X),await X.access.check();let G=U84(Z.sql,Z.params||[]);if(!X.connectionId)throw Error("Connection context required for database access");console.warn("DATABASES_RUN_SQL invoked",{"tool.deprecation_probe":"DATABASES_RUN_SQL","connection.id":X.connectionId,"organization.id":X.organization?.id??null,"user.id":X.auth.user?.id??null});let Y=w84(X.connectionId),Q=O84(X.connectionId);return{result:[{results:(await L84(X.db,Y,Q,G)).rows,success:!0}]}}})});function IZ0(Z){let X=Z.access.getRole();if(!q3(X))throw new fW("Only organization owners and admins can change org-wide pin status")}var Fd0=B(()=>{M3();UL()});async function qZ0(Z,X,G){let Y=[...new Set(G)],Q=await Promise.all(Y.map((J)=>Z.storage.connections.findById(J,X))),$=Y.filter((J,W)=>!Q[W]);if($.length>0)throw Error(`Connection not found: ${$.join(", ")}`)}import{z as Q88}from"zod";function z84(){let Z=G88[Math.floor(Math.random()*G88.length)];return`icon://${Y88[Math.floor(Math.random()*Y88.length)]}?color=${Z}`}var G88,Y88,j84,A84,Ud0;var $88=B(()=>{e0();MH();Fd0();Wn();G88=["red","orange","amber","yellow","lime","green","emerald","cyan","sky","blue","indigo","violet","purple","fuchsia","pink","rose"],Y88=["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"];j84=Q88.object({data:$10.describe("Data for the new virtual MCP")}),A84=Q88.object({item:vX.describe("The created virtual MCP entity")}),Ud0=s({name:"COLLECTION_VIRTUAL_MCP_CREATE",description:"Create a Virtual MCP (agent) that aggregates tools from multiple connections into one endpoint. Pass `prompts` to seed the agent with kickstart prompts (conversation starters shown as icebreakers). Author them from the agent's role/instructions and the descriptions of the tools it will have, so the starters are coherent and immediately useful.",annotations:{title:"Create Virtual MCP",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:j84,outputSchema:A84,handler:async(Z,X)=>{D0(X);let G=B0(X);await X.access.check();let Y=V1(X);if(!Y)throw Error("User ID required to create virtual MCP");if(Z.data.pinned===!0)IZ0(X);let{prompts:Q,...$}=Z.data;if($.connections.length>0)await qZ0(X,G.id,$.connections.map((K)=>K.connection_id));let J={...$,icon:$.icon??z84()},W=await X.storage.virtualMcps.create(G.id,Y,J);if(Q?.length&&X.orgFs&&W.id)await s90(X.orgFs,W.id,Y,Q);return{item:W}}})});function P84(Z){let X=[],G=0;while(G<Z.length){let Y=Z[G];if(Y==="%")X.push(".*");else if(Y==="_")X.push(".");else if(/[.*+?^${}()|[\]\\]/.test(Y))X.push("\\"+Y);else X.push(Y);G++}return X.join("")}function Vw(Z){return typeof Z==="string"||typeof Z==="number"}function Hd0(Z,X){let G=X.split("."),Y=Z;for(let Q of G){if(Y==null||typeof Y!=="object")return;Y=Y[Q]}return Y}function T84(Z,X){return Z.connections.some((G)=>G.connection_id===X)}function MZ0(Z,X){if("conditions"in X){let{operator:W,conditions:K}=X;switch(W){case"and":return K.every((N)=>MZ0(Z,N));case"or":return K.some((N)=>MZ0(Z,N));case"not":return!K.every((N)=>MZ0(Z,N));default:return!0}}let{field:G,operator:Y,value:Q}=X,$=G.join(".");if($==="connection_id"){if(Y!=="eq"||typeof Q!=="string")return!1;return T84(Z,Q)}let J=Hd0(Z,$);switch(Y){case"eq":return J===Q;case"gt":return Vw(J)&&Vw(Q)&&J>Q;case"gte":return Vw(J)&&Vw(Q)&&J>=Q;case"lt":return Vw(J)&&Vw(Q)&&J<Q;case"lte":return Vw(J)&&Vw(Q)&&J<=Q;case"in":return Array.isArray(Q)&&Q.includes(J);case"like":if(typeof J!=="string"||typeof Q!=="string")return!1;if(Q.length>100)return!1;let W=P84(Q);return new RegExp(`^${W}$`,"i").test(J);case"contains":if(typeof J!=="string"||typeof Q!=="string")return!1;return J.toLowerCase().includes(Q.toLowerCase());default:return!0}}function R84(Z,X){return[...Z].sort((G,Y)=>{for(let Q of X){let $=Q.field.join("."),J=Hd0(G,$),W=Hd0(Y,$),K=0;if(J==null&&W==null)continue;if(J==null)K=Q.nulls==="first"?-1:1;else if(W==null)K=Q.nulls==="first"?1:-1;else if(typeof J==="string"&&typeof W==="string")K=J.localeCompare(W);else if(typeof J==="number"&&typeof W==="number")K=J-W;else K=String(J).localeCompare(String(W));if(K!==0)return Q.direction==="desc"?-K:K}return 0})}var I84,q84,wd0;var J88=B(()=>{u3();e0();MH();I84=wJ,q84=wF(vX),wd0=s({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:I84,outputSchema:q84,handler:async(Z,X)=>{await X.access.check();let G=B0(X),Y=Z.where&&!("conditions"in Z.where)&&Z.where.field.join(".")==="connection_id"&&Z.where.operator==="eq"&&typeof Z.where.value==="string"?Z.where.value:void 0,Q=Z.where&&!("conditions"in Z.where)&&Z.where.field.join(".")==="pinned"&&Z.where.operator==="eq"&&typeof Z.where.value==="boolean"?Z.where.value:void 0,J=Y?await X.storage.virtualMcps.listByConnectionId(G.id,Y):await X.storage.virtualMcps.list(G.id,Q!==void 0?{pinnedOnly:Q}:void 0);if(Z.where)J=J.filter((H)=>MZ0(H,Z.where));if(Z.orderBy&&Z.orderBy.length>0)J=R84(J,Z.orderBy);let W=J.length,K=Z.offset??0,N=Z.limit??100,F=J.slice(K,K+N),U=K+N<W;return{items:F,totalCount:W,hasMore:U}}})});import{z as Od0}from"zod";var M84,k84,Bd0;var W88=B(()=>{e0();MH();M84=Od0.object({id:Od0.string().describe("ID of the virtual MCP to retrieve")}),k84=Od0.object({item:vX.nullable().describe("The retrieved virtual MCP, or null if not found")}),Bd0=s({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:M84,outputSchema:k84,handler:async(Z,X)=>{D0(X);let G=B0(X);await X.access.check();let Y=await X.storage.virtualMcps.findById(Z.id);if(Y&&Y.organization_id!==G.id)return{item:null};if(!Y)return{item:null};return{item:Y}}})});import{z as Dd0}from"zod";var S84,V84,Ld0;var K88=B(()=>{e0();Wn();MH();Fd0();S84=Dd0.object({id:Dd0.string().describe("ID of the virtual MCP to update"),data:J10.describe("Partial virtual MCP data to update")}),V84=Dd0.object({item:vX.describe("The updated virtual MCP entity")}),Ld0=s({name:"COLLECTION_VIRTUAL_MCP_UPDATE",description:"Update a Virtual MCP's name, slug, connection list, or kickstart prompts. Pass `prompts` to replace the agent's conversation starters (full set; empty array clears them).",annotations:{title:"Update Virtual MCP",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:S84,outputSchema:V84,handler:async(Z,X)=>{D0(X);let G=B0(X);await X.access.check();let Y=V1(X);if(!Y)throw Error("User ID required to update virtual MCP");let Q=await X.storage.virtualMcps.findById(Z.id);if(!Q)throw Error(`Virtual MCP not found: ${Z.id}`);if(Q.organization_id!==G.id)throw Error(`Virtual MCP not found: ${Z.id}`);let{prompts:$,...J}=Z.data;if(J.metadata&&Q.metadata)J.metadata={...Q.metadata,...J.metadata};if(J.pinned!==void 0&&J.pinned!==Q.pinned)IZ0(X);if(J.connections?.length)await qZ0(X,G.id,J.connections.map((K)=>K.connection_id));let W=await X.storage.virtualMcps.update(Z.id,Y,J);if($!==void 0&&X.orgFs)await s90(X.orgFs,Z.id,Y,$);return{item:W}}})});function N88(Z){return D3(Z)!==null||F10(Z)!==null}var F88=B(()=>{R6()});import{z as Ed0}from"zod";var C84,f84,zd0;var U88=B(()=>{NF();HJ();e0();Wn();MH();F88();C84=Ed0.object({id:Ed0.string().describe("ID of the virtual MCP to delete")}),f84=Ed0.object({item:vX.describe("The deleted virtual MCP entity")}),zd0=s({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:C84,outputSchema:f84,handler:async(Z,X)=>{D0(X);let G=B0(X);if(await X.access.check(),N88(Z.id))throw Error(`Virtual MCP not found: ${Z.id}`);let Y=await X.storage.virtualMcps.findById(Z.id);if(!Y)throw Error(`Virtual MCP not found: ${Z.id}`);if(Y.organization_id!==G.id)throw Error(`Virtual MCP not found: ${Z.id}`);await X.storage.virtualMcps.delete(Z.id);try{if((await X.storage.organizationSettings.get(G.id))?.main_agent_id===Z.id)await X.storage.organizationSettings.upsert(G.id,{main_agent_id:null})}catch($){console.error("[VIRTUAL_MCP_DELETE] failed to clear main agent pointer",{id:Z.id,error:$.message})}if(X.orgFs)await il0(X.orgFs,Z.id,V1(X)??"system");let Q=Y.metadata?.githubRepo?.connectionId;if(Q)try{let $=await X.storage.connections.findById(Q,G.id);if($&&_G($)){let W=await new V9(X.db,X.vault).get(Q);if(W?.accessToken)try{await fetch("https://api.github.com/installation/token",{method:"DELETE",headers:{Authorization:`Bearer ${W.accessToken}`,Accept:"application/vnd.github+json","X-GitHub-Api-Version":"2022-11-28"},signal:AbortSignal.timeout(5000)})}catch{}await X.storage.connections.delete(Q)}}catch($){console.error("[VIRTUAL_MCP_DELETE] failed to tear down repo-scoped connection",{childConnectionId:Q,error:$.message})}return{item:Y}}})});import{z as SY}from"zod";var b84,jd0;var H88=B(()=>{e0();b84=SY.object({id:SY.string(),virtualMcpId:SY.string(),pluginId:SY.string(),connectionId:SY.string().nullable(),settings:SY.record(SY.string(),SY.unknown()).nullable(),createdAt:SY.string(),updatedAt:SY.string()}),jd0=s({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:SY.object({virtualMcpId:SY.string().describe("Virtual MCP ID"),pluginId:SY.string().describe("Plugin ID")}),outputSchema:SY.object({config:b84.nullable()}),handler:async(Z,X)=>{D0(X);let G=B0(X);await X.access.check();let{virtualMcpId:Y,pluginId:Q}=Z,$=await X.storage.connections.findById(Y);if(!$||$.organization_id!==G.id)return{config:null};if($.connection_type!=="VIRTUAL")return{config:null};let J=await X.storage.virtualMcpPluginConfigs.get(Y,Q);if(!J)return{config:null};return{config:{id:J.id,virtualMcpId:J.virtualMcpId,pluginId:J.pluginId,connectionId:J.connectionId,settings:J.settings,createdAt:J.createdAt instanceof Date?J.createdAt.toISOString():J.createdAt,updatedAt:J.updatedAt instanceof Date?J.updatedAt.toISOString():J.updatedAt}}}})});import{z as C7}from"zod";var v84,Ad0;var w88=B(()=>{e0();lb();rZ();v84=C7.object({id:C7.string(),virtualMcpId:C7.string(),pluginId:C7.string(),connectionId:C7.string().nullable(),settings:C7.record(C7.string(),C7.unknown()).nullable(),createdAt:C7.string(),updatedAt:C7.string()}),Ad0=s({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:C7.object({virtualMcpId:C7.string().describe("Virtual MCP ID"),pluginId:C7.string().describe("Plugin ID"),connectionId:C7.string().nullable().optional().describe("MCP connection to bind"),settings:C7.record(C7.string(),C7.unknown()).nullable().optional().describe("Plugin-specific settings")}),outputSchema:C7.object({config:v84}),handler:async(Z,X)=>{D0(X);let G=B0(X);await X.access.check();let{virtualMcpId:Y,pluginId:Q,connectionId:$,settings:J}=Z,W=V1(X),K=await X.storage.connections.findById(Y);if(!K)throw Error(`Connection not found: ${Y}`);if(K.organization_id!==G.id)throw Error(`Connection not found: ${Y}`);if(K.connection_type!=="VIRTUAL")throw Error(`Connection not found: ${Y}`);let N=$?await X.storage.connections.findById($):null;if($&&N&&N.organization_id!==G.id)throw Error(`Connection not found: ${$}`);if($&&K.organization_id&&!N&&v$()&&E10($,K.organization_id)){if(!W)throw Error("User ID required to create dev-assets connection");let U=cb(K.organization_id,kZ());await X.storage.connections.create({...U,organization_id:K.organization_id,created_by:W})}else if($&&!N)throw Error(`Connection not found: ${$}`);let F=await X.storage.virtualMcpPluginConfigs.upsert(Y,Q,{connectionId:$,settings:J});return{config:{id:F.id,virtualMcpId:F.virtualMcpId,pluginId:F.pluginId,connectionId:F.connectionId,settings:F.settings,createdAt:F.createdAt instanceof Date?F.createdAt.toISOString():F.createdAt,updatedAt:F.updatedAt instanceof Date?F.updatedAt.toISOString():F.updatedAt}}}})});import{z as yG}from"zod";var x84,Pd0;var O88=B(()=>{e0();MH();x84=yG.object({connectionId:yG.string(),toolName:yG.string(),label:yG.string(),icon:yG.string().nullable().optional()}),Pd0=s({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:yG.object({virtualMcpId:yG.string().describe("Virtual MCP ID"),pinnedViews:yG.array(x84).describe("Pinned views to set for the virtual MCP sidebar"),layout:yG.object({defaultMainView:yG.object({type:yG.string(),id:yG.string().optional(),toolName:yG.string().optional()}).nullable().optional(),chatDefaultOpen:yG.boolean().nullable().optional()}).optional()}),outputSchema:yG.object({item:vX.nullable()}),handler:async(Z,X)=>{D0(X);let G=B0(X);await X.access.check();let{virtualMcpId:Y,pinnedViews:Q,layout:$}=Z,J=V1(X),W=await X.storage.virtualMcps.findById(Y);if(!W)throw Error(`Virtual MCP not found: ${Y}`);if(W.organization_id!==G.id)throw Error(`Virtual MCP not found: ${Y}`);let K=W.metadata?.ui??{},N={...K,pinnedViews:Q.length>0?Q:null,layout:$??K.layout??null};return{item:await X.storage.virtualMcps.update(Y,J??"system",{metadata:{...W.metadata,ui:N}})}}})});import{z as BF}from"zod";var _84,y84,Td0;var B88=B(()=>{e0();_84=BF.object({ids:BF.array(BF.string()).describe("Virtual MCP ids to look up")}),y84=BF.object({items:BF.array(BF.object({id:BF.string(),last_used_at:BF.string().optional(),last_used_by:BF.string().optional()}))}),Td0=s({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:_84,outputSchema:y84,handler:async(Z,X)=>{D0(X),B0(X),await X.access.check();let G=await X.storage.threads.findLastUsedByVirtualMcpIds(Z.ids);return{items:Z.ids.map((Y)=>({id:Y,last_used_at:G.get(Y)?.last_used_at,last_used_by:G.get(Y)?.last_used_by}))}}})});var D88=B(()=>{$88();J88();W88();K88();U88();H88();w88();O88();B88()});import{z as N9}from"zod";var Rd0;var L88=B(()=>{w9();e0();Rd0=s({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:N9.object({id:N9.string().describe("Log ID to fetch")}),outputSchema:N9.object({log:N9.object({id:N9.string().optional(),organizationId:N9.string(),connectionId:N9.string(),toolName:N9.string(),input:N9.record(N9.string(),N9.unknown()),output:N9.record(N9.string(),N9.unknown()),isError:N9.boolean(),errorMessage:N9.string().nullish(),durationMs:N9.number(),timestamp:N9.string(),userId:N9.string().nullish(),requestId:N9.string(),userAgent:N9.string().nullish(),virtualMcpId:N9.string().nullish(),properties:N9.record(N9.string(),N9.string()).nullish()}).nullable().describe("The monitoring log, or null if not found")}),handler:async(Z,X)=>{await X.access.check(),await G3();let G=B0(X),Y=await X.storage.monitoring.getById(G.id,Z.id);if(!Y)return{log:null};return{log:{...Y,timestamp:Y.timestamp instanceof Date?Y.timestamp.toISOString():Y.timestamp}}}})});import{z as B6}from"zod";var h84,Id0;var E88=B(()=>{w9();e0();h84=B6.object({id:B6.string().optional().describe("Unique log identifier"),organizationId:B6.string().describe("Organization ID"),connectionId:B6.string().describe("Connection ID"),toolName:B6.string().describe("Name of the tool that was called"),isError:B6.boolean().describe("Whether the call resulted in an error"),errorMessage:B6.string().nullish().describe("Error message if applicable"),durationMs:B6.number().describe("Call duration in milliseconds"),timestamp:B6.string().describe("ISO 8601 timestamp of the call"),userId:B6.string().nullish().describe("User who triggered the call"),requestId:B6.string().describe("Unique request identifier"),userAgent:B6.string().nullish().describe("Client identifier (x-studio-client header)"),virtualMcpId:B6.string().nullish().describe("Virtual MCP (Agent) ID if routed through an agent"),properties:B6.record(B6.string(),B6.string()).nullish().describe("Custom key-value metadata attached to the log")}),Id0=s({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:B6.object({connectionId:B6.string().optional().describe("Filter by connection ID"),excludeConnectionIds:B6.array(B6.string()).optional().describe("Exclude logs from these connection IDs (e.g. system connections)"),virtualMcpId:B6.string().optional().describe("Filter by Virtual MCP (Agent) ID"),toolName:B6.string().optional().describe("Filter by tool name"),isError:B6.boolean().optional().describe("Filter by error status"),startDate:B6.string().datetime().optional().describe("Filter by start date (ISO 8601 datetime string)"),endDate:B6.string().datetime().optional().describe("Filter by end date (ISO 8601 datetime string)"),limit:B6.number().default(20).describe("Maximum number of results"),offset:B6.number().default(0).describe("Offset for pagination"),properties:B6.record(B6.string(),B6.string()).optional().describe("Filter by exact property key=value matches"),propertyKeys:B6.array(B6.string()).optional().describe("Filter by logs that have these property keys"),propertyPatterns:B6.record(B6.string(),B6.string()).optional().describe("Filter by property value patterns (SQL LIKE, use % as wildcard)"),propertyInValues:B6.record(B6.string(),B6.string()).optional().describe("Filter by exact match within comma-separated values (e.g., user_tags in 'Engineering')")}),outputSchema:B6.object({logs:B6.array(h84).describe("Array of monitoring logs"),total:B6.number().describe("Total number of logs matching filters"),offset:B6.number().describe("Current offset for pagination"),limit:B6.number().describe("Current limit for pagination")}),handler:async(Z,X)=>{await G3();let G=B0(X),Q=Z.properties||Z.propertyKeys||Z.propertyPatterns||Z.propertyInValues?{properties:Z.properties,propertyKeys:Z.propertyKeys,propertyPatterns:Z.propertyPatterns,propertyInValues:Z.propertyInValues}:void 0,$={organizationId:G.id,connectionId:Z.connectionId,excludeConnectionIds:Z.excludeConnectionIds,virtualMcpId:Z.virtualMcpId,toolName:Z.toolName,isError:Z.isError,startDate:Z.startDate?new Date(Z.startDate):void 0,endDate:Z.endDate?new Date(Z.endDate):void 0,limit:Z.limit,offset:Z.offset,propertyFilters:Q},J=await X.storage.monitoring.query($);return{logs:J.logs.map(({input:W,output:K,...N})=>({...N,timestamp:N.timestamp instanceof Date?N.timestamp.toISOString():N.timestamp})),total:J.total,offset:Z.offset,limit:Z.limit}}})});import{z as F8}from"zod";var qd0;var z88=B(()=>{w9();e0();qd0=s({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:F8.object({startDate:F8.string().datetime().optional().describe("Filter by start date (ISO 8601 datetime string)"),endDate:F8.string().datetime().optional().describe("Filter by end date (ISO 8601 datetime string)"),interval:F8.string().regex(/^\d+[mhd]$/).optional().describe("Bucket interval for timeseries data (e.g. 1m, 5m, 2h, 1d). When provided, returns timeseries array."),connectionIds:F8.array(F8.string()).max(100).optional().describe("Filter by specific connection IDs (max 100)"),excludeConnectionIds:F8.array(F8.string()).max(100).optional().describe("Exclude specific connection IDs (max 100)"),toolNames:F8.array(F8.string()).max(100).optional().describe("Filter by specific tool names (max 100)"),status:F8.enum(["success","error"]).optional().describe("Filter metrics by execution status"),topN:F8.number().int().min(1).max(20).optional().describe("When provided with interval, also return top tools and their timeseries"),userIds:F8.array(F8.string()).max(100).optional().describe("Filter LLM usage by user IDs (only applied when llmUsage is true)"),llmUsage:F8.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:F8.object({totalCalls:F8.number().describe("Total number of tool calls"),errorRate:F8.number().optional().describe("Error rate as a decimal (0 to 1)"),avgDurationMs:F8.number().describe("Average call duration in milliseconds"),errorRatePercent:F8.string().optional().describe("Error rate as a percentage string"),totalErrors:F8.number().optional().describe("Total number of errors"),p50DurationMs:F8.number().optional().describe("50th percentile duration in milliseconds"),p95DurationMs:F8.number().optional().describe("95th percentile duration in milliseconds"),connectionBreakdown:F8.array(F8.object({connectionId:F8.string(),calls:F8.number(),errors:F8.number(),errorRate:F8.number(),avgDurationMs:F8.number()})).optional().describe("Per-connection metric breakdown"),totalInputTokens:F8.number().optional().describe("Total input tokens (LLM usage mode)"),totalOutputTokens:F8.number().optional().describe("Total output tokens (LLM usage mode)"),totalTokens:F8.number().optional().describe("Total tokens (LLM usage mode)"),totalCostUsd:F8.number().optional().describe("Total USD cost (LLM usage mode; only non-zero for providers that report cost)"),topTools:F8.array(F8.object({toolName:F8.string(),connectionId:F8.string().nullable(),calls:F8.number(),inputTokens:F8.number().optional(),outputTokens:F8.number().optional(),costUsd:F8.number().optional()})).optional().describe("Top tools ranked by calls"),topToolsTimeseries:F8.array(F8.object({timestamp:F8.string(),toolName:F8.string(),calls:F8.number(),errors:F8.number(),avg:F8.number(),p95:F8.number()})).optional().describe("Per-tool metric timeseries for the top tools"),timeseries:F8.array(F8.object({timestamp:F8.string(),calls:F8.number(),errors:F8.number(),errorRate:F8.number(),avg:F8.number(),p50:F8.number(),p95:F8.number(),inputTokens:F8.number().optional(),outputTokens:F8.number().optional(),totalTokens:F8.number().optional(),costUsd:F8.number().optional()})).optional().describe("Timeseries data points bucketed by interval")}),handler:async(Z,X)=>{let G=B0(X);if(await X.access.check(),await G3(),Z.interval&&Z.llmUsage)return X.storage.monitoring.queryLlmUsageStats({organizationId:G.id,interval:Z.interval,connectionId:Z.connectionIds?.[0]??"decopilot",startDate:Z.startDate?new Date(Z.startDate):void 0,endDate:Z.endDate?new Date(Z.endDate):void 0,userIds:Z.userIds,topN:Z.topN});if(Z.interval){let Q=await X.storage.monitoring.queryMetricTimeseries({organizationId:G.id,interval:Z.interval,startDate:Z.startDate?new Date(Z.startDate):void 0,endDate:Z.endDate?new Date(Z.endDate):void 0,filters:{connectionIds:Z.connectionIds,excludeConnectionIds:Z.excludeConnectionIds,toolNames:Z.toolNames,status:Z.status}});if(!Z.topN)return Q;let $=await X.storage.monitoring.queryMetricTopToolsTimeseries({organizationId:G.id,interval:Z.interval,startDate:Z.startDate?new Date(Z.startDate):void 0,endDate:Z.endDate?new Date(Z.endDate):void 0,topN:Z.topN,filters:{connectionIds:Z.connectionIds,excludeConnectionIds:Z.excludeConnectionIds,toolNames:Z.toolNames,status:Z.status}});return{...Q,topTools:$.topTools,topToolsTimeseries:$.timeseries}}let Y=await X.storage.monitoring.getStats({organizationId:G.id,startDate:Z.startDate?new Date(Z.startDate):void 0,endDate:Z.endDate?new Date(Z.endDate):void 0});return{...Y,errorRatePercent:(Y.errorRate*100).toFixed(2)}}})});import{z as gG}from"zod";var Md0;var j88=B(()=>{w9();e0();Md0=s({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:gG.object({threadIds:gG.array(gG.string()).min(1).max(500).describe("Thread IDs to aggregate usage for (max 500)"),connectionId:gG.string().optional().describe("LLM connection ID (defaults to 'decopilot')"),startDate:gG.string().datetime().optional().describe("Filter by start date (ISO 8601 datetime string)"),endDate:gG.string().datetime().optional().describe("Filter by end date (ISO 8601 datetime string)")}),outputSchema:gG.object({items:gG.array(gG.object({threadId:gG.string(),calls:gG.number(),inputTokens:gG.number(),outputTokens:gG.number(),totalTokens:gG.number(),costUsd:gG.number()}))}),handler:async(Z,X)=>{let G=B0(X);return await X.access.check(),await G3(),{items:await X.storage.monitoring.queryThreadUsage({organizationId:G.id,connectionId:Z.connectionId??"decopilot",threadIds:Z.threadIds,startDate:Z.startDate?new Date(Z.startDate):void 0,endDate:Z.endDate?new Date(Z.endDate):void 0})}}})});var A88=B(()=>{L88();E88();z88();j88()});function kZ0(Z){return typeof Z==="string"&&c84.has(Z.trim().toLowerCase())}var c84;var kd0=B(()=>{c84=new Set([".well-known","_admin","api","auth","cli","commerce-onboarding","dbos-queue-depth","health","hosted-run-pending","login","mcp","metrics","oauth","oauth-proxy","onboarding","org","report","reset-password"])});import{z as xQ}from"zod";var Sd0;var P88=B(()=>{e0();kd0();Sd0=s({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:xQ.object({slug:xQ.string().min(1).max(50).regex(/^[a-z0-9-]+$/,"Slug must be lowercase alphanumeric with hyphens").refine((Z)=>!kZ0(Z),"Slug is reserved by Studio"),name:xQ.string().min(1).max(255),description:xQ.string().optional()}),outputSchema:xQ.object({id:xQ.string(),name:xQ.string(),slug:xQ.string(),logo:xQ.string().nullable().optional(),metadata:xQ.any().optional(),createdAt:xQ.string().datetime().describe("ISO 8601 timestamp"),members:xQ.array(xQ.any()).optional()}),handler:async(Z,X)=>{D0(X),await X.access.check();let G=V1(X);if(!G)throw Error("User ID required to create organization");let Y=await X.boundAuth.organization.create({name:Z.name,slug:Z.slug,metadata:Z.description?{description:Z.description}:void 0,userId:G});if(!Y)throw Error("Failed to create organization");return{...Y,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():Y.createdAt}}})});import{z as OJ}from"zod";var Vd0;var T88=B(()=>{e0();Vd0=s({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:OJ.object({userId:OJ.string().optional()}),outputSchema:OJ.object({organizations:OJ.array(OJ.object({id:OJ.string(),name:OJ.string(),slug:OJ.string(),logo:OJ.string().nullable().optional(),metadata:OJ.any().optional(),createdAt:OJ.string().datetime().describe("ISO 8601 timestamp")}))}),handler:async(Z,X)=>{D0(X),await X.access.check();let G=V1(X),Y=Z.userId||G;if(!Y)throw Error("User ID required to list organizations");return{organizations:(await X.boundAuth.organization.list(Y)).map(($)=>({...$,createdAt:$.createdAt instanceof Date?$.createdAt.toISOString():$.createdAt}))}}})});import{z as c3}from"zod";var Cd0;var R88=B(()=>{e0();Cd0=s({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:c3.object({}),outputSchema:c3.object({id:c3.string(),name:c3.string(),slug:c3.string(),logo:c3.string().nullable().optional(),metadata:c3.any().optional(),createdAt:c3.string().datetime().describe("ISO 8601 timestamp"),members:c3.array(c3.any()).optional(),invitations:c3.array(c3.any()).optional()}),handler:async(Z,X)=>{D0(X),await X.access.check();let G=X.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");let Y=await X.boundAuth.organization.get(G);if(!Y)throw Error("No active organization found");let Q=new Date,$=Y.invitations?.filter((J)=>new Date(J.expiresAt)>Q);return{...Y,invitations:$,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():Y.createdAt}}})});import{z as BJ}from"zod";var fd0;var I88=B(()=>{e0();fd0=s({name:"ORGANIZATION_UPDATE",description:"Update an organization's name or description.",annotations:{title:"Update Organization",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:BJ.object({id:BJ.string(),name:BJ.string().min(1).max(255).optional(),description:BJ.string().optional()}),outputSchema:BJ.object({id:BJ.string(),name:BJ.string(),slug:BJ.string(),logo:BJ.string().nullable().optional(),metadata:BJ.any().optional(),createdAt:BJ.string().datetime().describe("ISO 8601 timestamp")}),handler:async(Z,X)=>{D0(X),await X.access.check();let G={};if(Z.name)G.name=Z.name;if(Z.description)G.metadata={description:Z.description};let Y=await X.boundAuth.organization.update({organizationId:Z.id,data:G});if(!Y)throw Error("Failed to update organization");return{...Y,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():Y.createdAt}}})});import{z as zn}from"zod";var bd0;var q88=B(()=>{e0();bd0=s({name:"ORGANIZATION_DELETE",description:"Archive an organization (soft delete).",annotations:{title:"Delete Organization",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:zn.object({id:zn.string()}),outputSchema:zn.object({success:zn.boolean(),id:zn.string()}),handler:async(Z,X)=>{return D0(X),await X.access.check(),await X.boundAuth.organization.update({organizationId:Z.id,data:{metadata:{archived:!0,archivedAt:new Date().toISOString()}}}),{success:!0,id:Z.id}}})});import{z as j8}from"zod";var jn,An,DF,M88,aW,Pn,Tn,Rn,In,Cw;var _Q=B(()=>{jn=j8.object({title:j8.string(),url:j8.string(),icon:j8.string()}),An=j8.object({registries:j8.record(j8.string(),j8.object({enabled:j8.boolean()})).describe("Per-registry enabled/disabled state. Key is connection ID. Absent registries are treated as enabled."),blockedMcps:j8.array(j8.string()).describe("List of MCP app_name or app_id values to hide from the store.")}),DF=j8.object({keyId:j8.string(),modelId:j8.string(),title:j8.string().optional()}).nullable(),M88=j8.enum(["fast","smart","thinking","image","web_search","deep_research"]),aW=j8.enum(["fast","smart","thinking"]),Pn=j8.object({tiers:j8.object({fast:DF,smart:DF,thinking:DF,image:DF,web_search:DF,deep_research:DF})}),Tn=j8.object({tiers:j8.object({fast:DF.optional(),smart:DF.optional(),thinking:DF.optional()})}),Rn=j8.object({ids:j8.array(j8.string()).describe("Ordered list of custom virtual MCP agent ids to show on the home view.")}),In=j8.object({demo_mode:j8.boolean().optional().describe("Curated demo org: the commerce connect modal proceeds without a configured required data source."),reports_only:j8.boolean().optional().describe("Curated commerce (reports) look: hides agent navigation, the home Customize button, and the Settings/Automations tabs. Defaulted on for orgs created by commerce onboarding."),qa_agent_enabled:j8.boolean().optional().describe("Run the QA Agent on a task's pull request once it's In Review \u2014 it verifies the task actually solved the problem (exercises the feature, not just the diff)."),code_reviewer_enabled:j8.boolean().optional().describe("Run the Code Reviewer on a task's pull request once it's In Review \u2014 it reviews the code using the repo's stack-appropriate review skills."),auto_merge:j8.boolean().optional().describe("When every enabled reviewer (QA Agent / Code Reviewer) approves a task's pull request, merge it automatically instead of leaving the merge to a human."),sandbox_go_daemon:j8.boolean().optional().describe("Provision this org's new sandboxes on the Go sandbox daemon instead of the TypeScript one. Affects the NEXT sandbox only \u2014 live sandboxes drain on the binary they booted with. Ignored unless the deployment sets STUDIO_SANDBOX_GO_TEMPLATE_NAME (the global kill switch); SANDBOX_START's `daemonImpl` overrides it per sandbox in either direction.")}),Cw=j8.object({id:j8.string().describe("Brand context ID"),name:j8.string().describe("Company name"),domain:j8.string().describe("Company domain (e.g. example.com)"),overview:j8.string().describe("Company overview / description"),logo:j8.string().nullable().optional().describe("Logo URL"),favicon:j8.string().nullable().optional().describe("Favicon URL"),ogImage:j8.string().nullable().optional().describe("OG image URL"),fonts:j8.object({heading:j8.string().optional().describe("Font family for headings"),body:j8.string().optional().describe("Font family for body text"),code:j8.string().optional().describe("Font family for code / monospace")}).nullable().optional().describe("Font families by semantic role"),colors:j8.object({primary:j8.string().optional().describe("Primary brand color (hex)"),secondary:j8.string().optional().describe("Secondary brand color (hex)"),accent:j8.string().optional().describe("Accent / highlight color (hex)"),background:j8.string().optional().describe("Background color (hex)"),foreground:j8.string().optional().describe("Foreground / text color (hex)")}).nullable().optional().describe("Semantic color palette"),images:j8.array(j8.record(j8.string(),j8.unknown())).nullable().optional().describe("Brand images"),metadata:j8.record(j8.string(),j8.unknown()).nullable().optional().describe("Extra design tokens (typography, components, spacing, layout, tone, etc.)"),archivedAt:j8.string().nullable().optional().describe("Archive timestamp (null to unarchive)"),isDefault:j8.boolean().optional().describe("Whether this is the default brand for the organization")})});import{z as LF}from"zod";var vd0;var k88=B(()=>{e0();_Q();vd0=s({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:LF.object({}),outputSchema:LF.object({organizationId:LF.string(),sidebar_items:LF.array(jn).nullable().optional(),enabled_plugins:LF.array(LF.string()).nullable().optional(),registry_config:An.nullable().optional(),simple_mode:Pn.nullable().optional(),default_home_agents:Rn.nullable().optional(),flags:In.nullable().optional(),main_agent_id:LF.string().nullable().optional(),createdAt:LF.string().datetime().optional().describe("ISO 8601 timestamp"),updatedAt:LF.string().datetime().optional().describe("ISO 8601 timestamp")}),handler:async(Z,X)=>{D0(X),await X.access.check();let G=X.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");let Y=await X.storage.organizationSettings.get(G);if(!Y)return{organizationId:G};return{...Y,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():Y.createdAt,updatedAt:Y.updatedAt instanceof Date?Y.updatedAt.toISOString():Y.updatedAt}}})});import{z as VY}from"zod";var xd0;var S88=B(()=>{e0();_Q();xd0=s({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:VY.object({organizationId:VY.string(),sidebar_items:VY.array(jn).optional(),enabled_plugins:VY.array(VY.string()).optional(),registry_config:An.optional(),simple_mode:Pn.optional(),default_home_agents:Rn.optional(),flags:In.strict().optional().describe("Org boolean toggles. Shallow-merged into the stored flags: keys you pass win (explicit false persists), omitted keys keep their value."),main_agent_id:VY.string().nullable().optional().describe("Virtual MCP id the org lands on instead of the Super Agent. Pass null to clear.")}),outputSchema:VY.object({organizationId:VY.string(),sidebar_items:VY.array(jn).nullable().optional(),enabled_plugins:VY.array(VY.string()).nullable().optional(),registry_config:An.nullable().optional(),simple_mode:Pn.nullable().optional(),default_home_agents:Rn.nullable().optional(),flags:In.nullable().optional(),main_agent_id:VY.string().nullable().optional(),createdAt:VY.string().datetime().describe("ISO 8601 timestamp"),updatedAt:VY.string().datetime().describe("ISO 8601 timestamp")}),handler:async(Z,X)=>{if(D0(X),await X.access.check(),B0(X).id!==Z.organizationId)throw Error("Cannot update settings for a different organization");let Y=await X.storage.organizationSettings.upsert(Z.organizationId,{sidebar_items:Z.sidebar_items,enabled_plugins:Z.enabled_plugins,registry_config:Z.registry_config,simple_mode:Z.simple_mode,default_home_agents:Z.default_home_agents,flags:Z.flags,main_agent_id:Z.main_agent_id});return{...Y,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():Y.createdAt,updatedAt:Y.updatedAt instanceof Date?Y.updatedAt.toISOString():Y.updatedAt}}})});import{z as DJ}from"zod";var V88,_d0,yd0;var C88=B(()=>{e0();_Q();V88=Cw.extend({organizationId:DJ.string(),archivedAt:DJ.string().nullable().optional().describe("ISO 8601 timestamp"),createdAt:DJ.string().describe("ISO 8601 timestamp"),updatedAt:DJ.string().describe("ISO 8601 timestamp")}),_d0=s({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:DJ.object({includeArchived:DJ.boolean().optional().describe("Include archived brands in the list")}),outputSchema:DJ.object({items:DJ.array(V88)}),handler:async(Z,X)=>{D0(X),await X.access.check();let G=X.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");return{items:(await X.storage.brandContext.list(G,{includeArchived:Z.includeArchived})).map((Q)=>({...Q,archivedAt:Q.archivedAt instanceof Date?Q.archivedAt.toISOString():Q.archivedAt,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt,updatedAt:Q.updatedAt instanceof Date?Q.updatedAt.toISOString():Q.updatedAt}))}}}),yd0=s({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:DJ.object({id:DJ.string().describe("Brand context ID")}),outputSchema:V88.extend({organizationId:DJ.string()}),handler:async(Z,X)=>{D0(X),await X.access.check();let G=X.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");let Y=await X.storage.brandContext.get(Z.id,G);if(!Y)throw Error("Brand context not found");return{...Y,archivedAt:Y.archivedAt instanceof Date?Y.archivedAt.toISOString():Y.archivedAt,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():Y.createdAt,updatedAt:Y.updatedAt instanceof Date?Y.updatedAt.toISOString():Y.updatedAt}}})});import{z as oL}from"zod";var f88,gd0,hd0,ud0;var b88=B(()=>{e0();_Q();f88=Cw.extend({organizationId:oL.string(),createdAt:oL.string().describe("ISO 8601 timestamp"),updatedAt:oL.string().describe("ISO 8601 timestamp")}),gd0=s({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:Cw.omit({id:!0}),outputSchema:f88,handler:async(Z,X)=>{D0(X),await X.access.check();let G=X.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");let Y=await X.storage.brandContext.create(G,{name:Z.name,domain:Z.domain,overview:Z.overview,logo:Z.logo??null,favicon:Z.favicon??null,ogImage:Z.ogImage??null,fonts:Z.fonts??null,colors:Z.colors??null,images:Z.images??null,metadata:Z.metadata??null});return{...Y,archivedAt:Y.archivedAt instanceof Date?Y.archivedAt.toISOString():Y.archivedAt,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():Y.createdAt,updatedAt:Y.updatedAt instanceof Date?Y.updatedAt.toISOString():Y.updatedAt}}}),hd0=s({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:Cw.partial().required({id:!0}),outputSchema:f88,handler:async(Z,X)=>{D0(X),await X.access.check();let G=X.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");if(!await X.storage.brandContext.get(Z.id,G))throw Error("Brand context not found");let{id:Q,...$}=Z;if($.isDefault===!0)await X.storage.brandContext.setDefault(Q,G);let J=await X.storage.brandContext.update(Q,G,{name:$.name,domain:$.domain,overview:$.overview,logo:$.logo!==void 0?$.logo??null:void 0,favicon:$.favicon!==void 0?$.favicon??null:void 0,ogImage:$.ogImage!==void 0?$.ogImage??null:void 0,fonts:$.fonts!==void 0?$.fonts??null:void 0,colors:$.colors!==void 0?$.colors??null:void 0,images:$.images!==void 0?$.images??null:void 0,metadata:$.metadata!==void 0?$.metadata??null:void 0,archivedAt:$.archivedAt!==void 0?$.archivedAt??null:void 0,isDefault:$.isDefault===!1?!1:void 0});return{...J,archivedAt:J.archivedAt instanceof Date?J.archivedAt.toISOString():J.archivedAt,createdAt:J.createdAt instanceof Date?J.createdAt.toISOString():J.createdAt,updatedAt:J.updatedAt instanceof Date?J.updatedAt.toISOString():J.updatedAt}}}),ud0=s({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:oL.object({id:oL.string().describe("Brand context ID")}),outputSchema:oL.object({success:oL.boolean()}),handler:async(Z,X)=>{D0(X),await X.access.check();let G=X.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");if(!await X.storage.brandContext.get(Z.id,G))throw Error("Brand context not found");return await X.storage.brandContext.update(Z.id,G,{archivedAt:new Date().toISOString(),isDefault:!1}),{success:!0}}})});async function SZ0(Z,X,G){let Y=Z.trim();if(!Y.startsWith("http"))Y=`https://${Y}`;let Q=await fetch("https://api.firecrawl.dev/v1/scrape",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${X}`},body:JSON.stringify({url:Y,formats:["branding"]})});if(!Q.ok){let H=await Q.text().catch(()=>"");throw Error(`Firecrawl API error: ${Q.status} ${H.slice(0,200)}`)}let $=await Q.json();if(!$.success||!$.data?.branding)return null;let J=$.data.branding,W=$.data.metadata??{},K=m84(J,W);return{name:W.title?.split(/[|\u2013\u2014]|\s+-\s+/).map((H)=>H.trim()).filter(Boolean)?.slice().sort((H,w)=>H.length-w.length)[0]??W.ogSiteName??G??Z,domain:Z,overview:W.description??"",logo:K.logo,favicon:K.favicon,ogImage:K.ogImage,fonts:K.fonts,colors:K.colors,images:null,metadata:Object.keys(K.metadata).length>0?K.metadata:null}}function m84(Z,X){let G=Z.images??{},Y=Z.colors??{},Q={};for(let[F,U]of Object.entries(Y))if(typeof U==="string"&&U&&l84.has(F))Q[F]=U;let $={},W=(Z.typography??{}).fontFamilies??{};for(let[F,U]of Object.entries(W))if(typeof U==="string"&&U){let H=d84[F.toLowerCase()];if(H&&!$[H])$[H]=U}let K=Z.fonts;if(Array.isArray(K))for(let F of K){let U=F.family;if(typeof U==="string"&&U&&!$.body)$.body=U}let N={};for(let F of["typography","components","spacing","layout","animations","icons","tone","personality","colorScheme"])if(Z[F]!==void 0)N[F]=Z[F];return{logo:G.logo??null,favicon:G.favicon??null,ogImage:G.ogImage??X.ogImage??null,fonts:Object.keys($).length>0?$:null,colors:Object.keys(Q).length>0?Q:null,metadata:N}}var l84,d84;var cd0=B(()=>{l84=new Set(["primary","secondary","accent","background","foreground"]),d84={heading:"heading",headings:"heading",head:"heading",title:"heading",body:"body",primary:"body",text:"body",code:"code",monospace:"code",mono:"code"}});import{z as VZ0}from"zod";var i84,ld0;var v88=B(()=>{e0();cd0();_Q();i84=Cw.pick({id:!0,name:!0,domain:!0,overview:!0,logo:!0,favicon:!0,ogImage:!0,fonts:!0,colors:!0}).extend({success:VZ0.boolean()}),ld0=s({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:VZ0.object({domain:VZ0.string().describe("Website domain to extract brand from"),brandId:VZ0.string().optional().describe("Existing brand context ID to update (creates new if omitted)")}),outputSchema:i84,modelSummary:(Z)=>Z.success?`Brand saved (id=${Z.id}, name=${Z.name}, domain=${Z.domain}). The UI rendered the logo, colors, fonts, and overview.`:"Brand extraction failed.",handler:async(Z,X)=>{D0(X),await X.access.check();let G=X.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");let Y=X.firecrawlApiKey;if(!Y)throw Error("FIRECRAWL_API_KEY is not configured. Set the environment variable to enable brand extraction.");let Q=await SZ0(Z.domain,Y,Z.domain);if(!Q)throw Error("Firecrawl did not return branding data for this URL");let $={name:Q.name,domain:Q.domain,overview:Q.overview,logo:Q.logo,favicon:Q.favicon,ogImage:Q.ogImage,fonts:Q.fonts,colors:Q.colors,images:Q.images,metadata:Q.metadata},J=Z.brandId?await(async()=>{if(!await X.storage.brandContext.get(Z.brandId,G))throw Error("Brand context not found");return X.storage.brandContext.update(Z.brandId,G,$)})():await X.storage.brandContext.create(G,$);return{id:J.id,name:J.name,domain:J.domain,overview:J.overview,logo:J.logo,favicon:J.favicon,ogImage:J.ogImage,fonts:J.fonts,colors:J.colors,success:!0}}})});function x88(Z){let X=Z.metadata??{};return{id:Z.id,name:Z.name,domain:Z.domain||void 0,colors:Z.colors??void 0,fonts:Z.fonts??void 0,assets:Z.logo||Z.favicon||Z.ogImage?{logo:Z.logo??void 0,favicon:Z.favicon??void 0,ogImage:Z.ogImage??void 0}:void 0,overview:Z.overview||void 0,tagline:typeof X.tagline==="string"?X.tagline:void 0,tone:typeof X.tone==="string"?X.tone:void 0,metadata:(()=>{let G=Object.fromEntries(Object.entries(X).filter(([Y])=>Y!=="tagline"&&Y!=="tone"));return Object.keys(G).length>0?G:void 0})()}}var dd0,md0;var _88=B(()=>{Gd0();e0();dd0=s({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:LZ0,outputSchema:Hn,handler:async(Z,X)=>{D0(X),await X.access.check();let G=X.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");let Y=Z.id?await X.storage.brandContext.get(Z.id,G):await X.storage.brandContext.getDefault(G);if(!Y)throw Error(Z.id?"Brand not found":"No default brand configured");return x88(Y)}}),md0=s({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:EZ0,outputSchema:zZ0,handler:async(Z,X)=>{D0(X),await X.access.check();let G=X.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");return{items:(await X.storage.brandContext.list(G)).map(x88)}}})});import{resolveTxt as n84}from"dns/promises";function id0(Z){return`${p84}.${Z.toLowerCase()}`}function y88(){return`deco-verify-${crypto.randomUUID().replace(/-/g,"")}`}async function g88(Z,X,G=n84){if(!X)return!1;try{return(await G(id0(Z))).some((Q)=>Q.join("").trim()===X)}catch{return!1}}var p84="_deco-verify";var h88=()=>{};import{z as A9}from"zod";function fw(Z){let X=Z.verificationStatus==="pending"&&Boolean(Z.verificationToken);return{id:Z.id,domain:Z.domain,joinMode:Z.joinMode,verificationStatus:Z.verificationStatus,verificationMethod:Z.verificationMethod,verifiedAt:Z.verifiedAt?new Date(Z.verifiedAt).toISOString():null,recordName:X?id0(Z.domain):null,recordValue:X?Z.verificationToken:null}}function o84(Z){let X=Z.toLowerCase().trim();if(!t84.test(X))throw Error(`Invalid domain format: "${X}". Must be a valid domain like "acme.com"`);if(LJ.has(X))throw Error(`Cannot claim generic email domain "${X}". Only corporate domains are allowed.`);return X}var t84,nd0,CZ0,pd0,td0,od0,rd0,ad0;var u88=B(()=>{vQ();h88();e0();t84=/^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)+$/,nd0=A9.enum(["off","auto","request"]),CZ0=A9.object({id:A9.string(),domain:A9.string(),joinMode:nd0,verificationStatus:A9.enum(["pending","verified"]),verificationMethod:A9.enum(["email","dns"]).nullable(),verifiedAt:A9.string().nullable(),recordName:A9.string().nullable(),recordValue:A9.string().nullable()});pd0=s({name:"ORGANIZATION_DOMAIN_LIST",description:"List the email domains claimed by an organization.",annotations:{title:"List Organization Domains",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:A9.object({}),outputSchema:A9.object({domains:A9.array(CZ0)}),handler:async(Z,X)=>{D0(X),await X.access.check();let G=B0(X);return{domains:(await X.storage.organizationDomains.listByOrganizationId(G.id)).map(fw)}}}),td0=s({name:"ORGANIZATION_DOMAIN_ADD",description:"Claim an email domain for an organization. If the caller's verified email matches the domain it is trusted immediately; otherwise it requires DNS verification.",annotations:{title:"Add Organization Domain",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:A9.object({domain:A9.string().min(1).max(255).describe("Domain to claim, e.g. acme.com"),joinMode:nd0.optional().describe("Initial join mode (only applied when the domain is trusted immediately via email match).")}),outputSchema:CZ0,handler:async(Z,X)=>{D0(X),await X.access.check();let G=B0(X),Y=o84(Z.domain),$=X.auth.user?.email?.split("@")[1]?.toLowerCase(),J=Boolean(X.auth.user?.emailVerified)&&$===Y,W=await X.storage.organizationDomains.getByOrgAndDomain(G.id,Y);if(W){if(W.verificationStatus!=="verified"&&J){let N=await X.storage.organizationDomains.markVerified(W.id,"email");return fw(N)}return fw(W)}let K=J?await X.storage.organizationDomains.add(G.id,Y,{joinMode:Z.joinMode??"off",verificationStatus:"verified",verificationMethod:"email"}):await X.storage.organizationDomains.add(G.id,Y,{joinMode:"off",verificationStatus:"pending",verificationToken:y88()});return fw(K)}}),od0=s({name:"ORGANIZATION_DOMAIN_UPDATE",description:"Set the join mode for a claimed domain. Discoverable modes (auto/request) require the domain to be verified.",annotations:{title:"Update Organization Domain",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:A9.object({id:A9.string(),joinMode:nd0}),outputSchema:CZ0,handler:async(Z,X)=>{D0(X),await X.access.check();let G=B0(X),Y=await X.storage.organizationDomains.getById(Z.id);if(!Y||Y.organizationId!==G.id)throw Error("Domain not found");if(Z.joinMode!=="off"&&Y.verificationStatus!=="verified")throw Error("Verify the domain before enabling auto-join or requests.");let Q=await X.storage.organizationDomains.updateJoinMode(Z.id,Z.joinMode);return fw(Q)}}),rd0=s({name:"ORGANIZATION_DOMAIN_VERIFY",description:"Check the DNS TXT record for a pending domain and mark it verified if present.",annotations:{title:"Verify Organization Domain",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:A9.object({id:A9.string()}),outputSchema:A9.object({verified:A9.boolean(),domain:CZ0}),handler:async(Z,X)=>{D0(X),await X.access.check();let G=B0(X),Y=await X.storage.organizationDomains.getById(Z.id);if(!Y||Y.organizationId!==G.id)throw Error("Domain not found");if(Y.verificationStatus==="verified")return{verified:!0,domain:fw(Y)};if(!Y.verificationToken)throw Error("Domain has no pending DNS verification.");if(!await g88(Y.domain,Y.verificationToken))return{verified:!1,domain:fw(Y)};let $=await X.storage.organizationDomains.markVerified(Z.id,"dns");return{verified:!0,domain:fw($)}}}),ad0=s({name:"ORGANIZATION_DOMAIN_REMOVE",description:"Remove a claimed domain from an organization.",annotations:{title:"Remove Organization Domain",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:A9.object({id:A9.string()}),outputSchema:A9.object({success:A9.boolean()}),handler:async(Z,X)=>{D0(X),await X.access.check();let G=B0(X),Y=await X.storage.organizationDomains.getById(Z.id);if(!Y||Y.organizationId!==G.id)throw Error("Domain not found");return await X.storage.organizationDomains.removeById(Z.id),{success:!0}}})});function bw(Z){return(Z instanceof Error?Z.message.toLowerCase():"").includes("already a member")}import{z as DZ}from"zod";var r84,sd0,ed0,Zm0;var c88=B(()=>{e0();q5();r84=DZ.object({id:DZ.string(),userId:DZ.string(),status:DZ.enum(["pending","approved","denied"]),createdAt:DZ.string(),user:DZ.object({id:DZ.string(),name:DZ.string(),email:DZ.string(),image:DZ.string().nullable()}).nullable()}),sd0=s({name:"ORGANIZATION_JOIN_REQUEST_LIST",description:"List pending requests to join the organization.",annotations:{title:"List Join Requests",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:DZ.object({}),outputSchema:DZ.object({requests:DZ.array(r84)}),handler:async(Z,X)=>{D0(X),await X.access.check();let G=B0(X);return{requests:(await X.storage.organizationJoinRequests.listPendingWithUser(G.id)).map((Q)=>({id:Q.id,userId:Q.userId,status:Q.status,createdAt:new Date(Q.createdAt).toISOString(),user:Q.user}))}}}),ed0=s({name:"ORGANIZATION_JOIN_REQUEST_APPROVE",description:"Approve a pending join request, adding the user as a member.",annotations:{title:"Approve Join Request",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:DZ.object({requestId:DZ.string()}),outputSchema:DZ.object({success:DZ.boolean()}),handler:async(Z,X)=>{D0(X),await X.access.check();let G=B0(X),Y=await X.storage.organizationJoinRequests.getById(Z.requestId);if(!Y||Y.organizationId!==G.id)throw Error("Join request not found");if(Y.status!=="pending")throw Error("Join request has already been decided");let Q=V1(X);if(!await X.storage.organizationJoinRequests.decide(Y.id,"approved",Q??Y.userId))return{success:!0};try{await X.boundAuth.organization.addMember({organizationId:G.id,userId:Y.userId,role:["user"]})}catch(J){if(!bw(J))throw J}if(Q)i1.capture({distinctId:Q,event:"organization_join_request_approved",groups:{organization:G.id},properties:{organization_id:G.id,user_id:Y.userId}});return{success:!0}}}),Zm0=s({name:"ORGANIZATION_JOIN_REQUEST_DENY",description:"Deny a pending join request.",annotations:{title:"Deny Join Request",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:DZ.object({requestId:DZ.string()}),outputSchema:DZ.object({success:DZ.boolean()}),handler:async(Z,X)=>{D0(X),await X.access.check();let G=B0(X),Y=await X.storage.organizationJoinRequests.getById(Z.requestId);if(!Y||Y.organizationId!==G.id)throw Error("Join request not found");if(Y.status!=="pending")throw Error("Join request has already been decided");let Q=V1(X);if(await X.storage.organizationJoinRequests.decide(Y.id,"denied",Q??Y.userId)&&Q)i1.capture({distinctId:Q,event:"organization_join_request_denied",groups:{organization:G.id},properties:{organization_id:G.id,user_id:Y.userId}});return{success:!0}}})});import{z as CY}from"zod";var Xm0;var l88=B(()=>{q5();e0();M3();Xm0=s({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:CY.object({organizationId:CY.string().optional(),userId:CY.string(),role:CY.array(CY.string())}),outputSchema:CY.object({id:CY.string(),organizationId:CY.string(),userId:CY.string(),role:CY.union([CY.string(),CY.array(CY.string())]),createdAt:CY.string().datetime().describe("ISO 8601 timestamp")}),handler:async(Z,X)=>{D0(X),await X.access.check();let G=Z.organizationId||X.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");if(G!==X.organization?.id)throw Error("Organization ID does not match authenticated organization");let Y=await X.db.selectFrom("member").select(["role"]).where("userId","=",V1(X)??"").where("organizationId","=",G).executeTakeFirst();if(!w50(Y?.role,Z.role))throw Error(`Insufficient privileges to assign role "${Z.role.join(",")}"`);let Q=await X.boundAuth.organization.addMember({organizationId:G,userId:Z.userId,role:Z.role});if(!Q)throw Error("Failed to add member");let $=V1(X);if($)i1.capture({distinctId:$,event:"organization_member_added",groups:{organization:G},properties:{organization_id:G,added_user_id:Z.userId,role:Z.role}});return{...Q,role:Q.role,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt}}})});import{z as __}from"zod";var Gm0;var d88=B(()=>{q5();e0();Gm0=s({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:__.object({organizationId:__.string().optional(),memberIdOrEmail:__.string()}),outputSchema:__.object({success:__.boolean(),memberIdOrEmail:__.string()}),handler:async(Z,X)=>{D0(X),await X.access.check();let G=Z.organizationId||X.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");if(G!==X.organization?.id)throw Error("Organization ID does not match authenticated organization");let Y=await X.boundAuth.organization.removeMember({organizationId:G,memberIdOrEmail:Z.memberIdOrEmail});X.invalidateMemberRole?.(Y.member.userId,G);let Q=V1(X);if(Q)i1.capture({distinctId:Q,event:"organization_member_removed",groups:{organization:G},properties:{organization_id:G,member_id_or_email:Z.memberIdOrEmail}});return{success:!0,memberIdOrEmail:Z.memberIdOrEmail}}})});import{z as ZG}from"zod";var Ym0;var m88=B(()=>{e0();Ym0=s({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:ZG.object({limit:ZG.number().optional(),offset:ZG.number().optional()}),outputSchema:ZG.object({members:ZG.array(ZG.object({id:ZG.string(),organizationId:ZG.string(),userId:ZG.string(),role:ZG.string(),createdAt:ZG.string().datetime().describe("ISO 8601 timestamp"),user:ZG.object({id:ZG.string(),name:ZG.string(),email:ZG.string(),image:ZG.string().optional()}).optional()}))}),handler:async(Z,X)=>{D0(X),await X.access.check();let G=X.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");let Y=await X.boundAuth.organization.listMembers({organizationId:G,limit:Z.limit,offset:Z.offset});return{members:(Array.isArray(Y)?Y:[]).map(($)=>({...$,createdAt:$.createdAt instanceof Date?$.createdAt.toISOString():$.createdAt}))}}})});import{z as f7}from"zod";var Qm0;var i88=B(()=>{q5();e0();M3();Qm0=s({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:f7.object({organizationId:f7.string().optional(),memberId:f7.string(),role:f7.array(f7.string())}),outputSchema:f7.object({id:f7.string(),organizationId:f7.string(),userId:f7.string(),role:f7.union([f7.string(),f7.array(f7.string())]),createdAt:f7.string().datetime().describe("ISO 8601 timestamp"),user:f7.object({email:f7.string(),name:f7.string(),image:f7.string().optional()})}),handler:async(Z,X)=>{D0(X),await X.access.check();let G=Z.organizationId||X.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");let Y=await X.db.selectFrom("member").select(["role"]).where("userId","=",V1(X)??"").where("organizationId","=",G).executeTakeFirst();if(!w50(Y?.role,Z.role))throw Error(`Insufficient privileges to assign role "${Z.role.join(",")}"`);let Q=await X.boundAuth.organization.updateMemberRole({organizationId:G,memberId:Z.memberId,role:Z.role});if(!Q)throw Error("Failed to update member role");X.invalidateMemberRole?.(Q.userId,G);let $=V1(X);if($)i1.capture({distinctId:$,event:"organization_member_role_updated",groups:{organization:G},properties:{organization_id:G,member_id:Z.memberId,target_user_id:Q.userId,new_role:Array.isArray(Z.role)?Z.role.join(","):Z.role}});return{...Q,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt}}})});async function n88(){if(qn&&Date.now()-qn.fetchedAt<600000)return qn.rate;try{let X=await(await fetch("https://economia.awesomeapi.com.br/json/last/USD-BRL",{signal:AbortSignal.timeout(5000)})).json(),G=parseFloat(X.USDBRL?.bid??"");if(Number.isNaN(G)||G<=0)throw Error("Invalid rate");return qn={rate:G,fetchedAt:Date.now()},G}catch{return qn?.rate??5.5}}function p88(Z,X,G){if(X==="brl")return Math.round(Z/G);return Z}var qn=null;function $m0(Z,X="",G=new URLSearchParams){for(let[Y,Q]of Object.entries(Z)){if(Q===void 0||Q===null)continue;let $=X?`${X}[${Y}]`:Y;if(Array.isArray(Q))Q.forEach((J,W)=>{if(typeof J==="object"&&J!==null)$m0(J,`${$}[${W}]`,G);else G.append(`${$}[${W}]`,String(J))});else if(typeof Q==="object")$m0(Q,$,G);else G.append($,String(Q))}return G}async function vw(Z,X){let G=$1().stripeSecretKey;if(!G)throw new fY(503,"billing is not configured");let Y=X?.params?$m0(X.params).toString():void 0,Q=await fetch(`${a84}${Z}`,{method:X?.method??(Y?"POST":"GET"),headers:{Authorization:`Bearer ${G}`,...Y&&{"Content-Type":"application/x-www-form-urlencoded"}},body:Y,signal:AbortSignal.timeout(s84)}),$=await Q.json().catch(()=>({}));if(!Q.ok){let J=$.error?.message??`HTTP ${Q.status}`;throw new fY(Q.status,J)}return $}async function t88(Z){let X=$1().stripeSeatPriceId;if(!X)throw new fY(503,"billing is not configured");let G=await vw("/checkout/sessions",{params:{mode:"subscription",line_items:[{price:X,quantity:Z.quantity}],success_url:Z.successUrl,cancel_url:Z.cancelUrl,metadata:{orgId:Z.organizationId},subscription_data:{metadata:{orgId:Z.organizationId}}}});if(!G.url)throw new fY(500,"checkout session lacks url");return{url:G.url}}async function Jm0(Z){let G=(await vw(`/subscriptions/${encodeURIComponent(Z)}`)).items?.data??[],Y=$1().stripeSeatPriceId,Q=Y?G.find(($)=>$.price?.id===Y):G.length===1?G[0]:void 0;if(!Q)throw new fY(500,"subscription has no seat item");return{itemId:Q.id,quantity:Q.quantity??0}}async function o88(Z){let{itemId:X}=await Jm0(Z.subscriptionId),G=await vw("/invoices/create_preview",{params:{subscription:Z.subscriptionId,subscription_details:{items:[{id:X,quantity:Z.quantity}],proration_behavior:"always_invoice"}}});return{amountDueCents:G.amount_due??0,currency:G.currency??"usd"}}function e84(Z,X){return Math.round(Z*(1+X/100))}async function r88(Z){let X=e84(Z.amountCents,Z.feePercent),G=p88(Z.amountCents,Z.currency,await n88()),Y=Z.currency==="brl"?`Studio AI credits (R$ ${(Z.amountCents/100).toFixed(2)})`:`Studio AI credits ($${(Z.amountCents/100).toFixed(2)})`,Q=await vw("/checkout/sessions",{params:{mode:"payment",...Z.customerId&&{customer:Z.customerId},line_items:[{quantity:1,price_data:{currency:Z.currency,unit_amount:X,product_data:{name:Y}}}],success_url:Z.successUrl,cancel_url:Z.cancelUrl,metadata:{kind:"topup",orgId:Z.organizationId,creditCents:G}}});if(!Q.url)throw new fY(500,"checkout session lacks url");return{url:Q.url}}async function a88(Z){let X=await vw("/billing_portal/sessions",{params:{customer:Z.customerId,return_url:Z.returnUrl}});if(!X.url)throw new fY(500,"portal session lacks url");return{url:X.url}}async function s88(Z){let{itemId:X}=await Jm0(Z.subscriptionId);await vw(`/subscriptions/${encodeURIComponent(Z.subscriptionId)}`,{params:{items:[{id:X,quantity:Z.quantity}],proration_behavior:"always_invoice",payment_behavior:"pending_if_incomplete"}})}async function e88(Z){await vw(`/subscriptions/${encodeURIComponent(Z)}`,{method:"DELETE"})}async function Z68(Z){if(Z.targetQuantity<1)return!1;let{itemId:X,quantity:G}=await Jm0(Z.subscriptionId);if(G===Z.targetQuantity)return!1;return await vw(`/subscriptions/${encodeURIComponent(Z.subscriptionId)}`,{params:{items:[{id:X,quantity:Z.targetQuantity}],proration_behavior:"always_invoice",payment_behavior:"pending_if_incomplete"}}),!0}var a84="https://api.stripe.com/v1",fY,s84=15000;var y_=B(()=>{b8();fY=class fY extends Error{status;constructor(Z,X){super(`Stripe API ${Z}: ${X}`);this.status=Z;this.name="StripeApiError"}}});import{z as LZ}from"zod";var Z64,Wm0,Km0;var X68=B(()=>{y_();ub();e0();kb();Z64=LZ.object({legacy:LZ.boolean(),billingMode:LZ.string(),status:LZ.string(),includedReportUrl:LZ.string().nullable()}),Wm0=s({name:"ORGANIZATION_SEATS_GET",description:"Get the organization's billing identity and which members hold paid seats.",annotations:{title:"Get Organization Seats",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:LZ.object({}),outputSchema:LZ.object({billing:Z64.nullable(),paidSeatUserIds:LZ.array(LZ.string())}),handler:async(Z,X)=>{D0(X),await X.access.check();let G=X.organization?.id;if(!G)throw Error("Organization context required");let[Y,Q]=await Promise.all([X.storage.organizationBilling.getBilling(G),X.storage.organizationBilling.listPaidSeatUserIds(G)]);return{billing:Y?{legacy:Y.legacy,billingMode:Y.billingMode,status:Y.status,includedReportUrl:Y.includedReportUrl}:null,paidSeatUserIds:Q}}}),Km0=s({name:"ORGANIZATION_SEATS_SET",description:"Set members' seats (paid/free). Invoiced organizations apply directly; self-serve organizations with an active subscription also charge the prorated difference on the saved card (preview it with ORGANIZATION_SEATS_PREVIEW first).",annotations:{title:"Set Organization Seats",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:LZ.object({seats:LZ.array(LZ.object({userId:LZ.string().min(1),seat:LZ.enum(["paid","free"])})).min(1).max(200)}),outputSchema:LZ.object({applied:LZ.array(LZ.object({userId:LZ.string(),seat:LZ.enum(["paid","free"])})),paidSeatCount:LZ.number(),benefitsSyncQueued:LZ.boolean()}),handler:async(Z,X)=>{D0(X),await X.access.check();let G=X.organization?.id;if(!G)throw Error("Organization context required");let Y=V1(X);if(!Y)throw Error("User ID required");let Q=await X.storage.organizationBilling.getBilling(G);if(!Q||Q.legacy)throw Error("This organization is on the legacy plan \u2014 seats do not apply.");let $=hb(Q)?Q.stripeSubscriptionId:null,J;try{J=await X.storage.organizationBilling.setSeats(G,Z.seats,Y,{markBenefitsPending:KD()})}catch(K){if(K instanceof y00)throw Error(K.message);throw K}if($)try{await s88({subscriptionId:$,quantity:J.paidSeatCount})}catch(K){let N=K instanceof fY?K.message:"Stripe update failed";throw Error(`Seats saved, but updating the subscription failed: ${N}. Apply again to retry the charge.`)}let W=!1;if(J.benefitsReferenceId)try{await SN(G,J.benefitsReferenceId,"apply"),W=!0}catch(K){console.error("Failed to enqueue benefit sync (sweep covers):",K)}return{applied:J.applied,paidSeatCount:J.paidSeatCount,benefitsSyncQueued:W}}})});import{z as EF}from"zod";var Nm0,Fm0;var G68=B(()=>{y_();rZ();e0();Nm0=s({name:"ORGANIZATION_BILLING_CHECKOUT_START",description:"Start the organization's seat subscription: creates a Stripe Checkout session for the current paid-seat count and returns its URL.",annotations:{title:"Start Billing Checkout",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!0},inputSchema:EF.object({}),outputSchema:EF.object({url:EF.string(),quantity:EF.number()}),handler:async(Z,X)=>{D0(X),await X.access.check();let G=X.organization?.id,Y=X.organization?.slug;if(!G||!Y)throw Error("Organization context required");let[Q,$]=await Promise.all([X.storage.organizationBilling.getBilling(G),X.storage.organizationBilling.listPaidSeatUserIds(G)]);if(!Q||Q.legacy)throw Error("This organization is on the legacy plan \u2014 no subscription needed.");if(Q.billingMode!=="self_serve")throw Error("Contract-billed organizations do not use checkout.");if(Q.status==="active")throw Error("This organization already has an active subscription \u2014 seat changes apply directly.");if(Q.stripeSubscriptionId)throw Error("This organization still has a subscription on file \u2014 settle or cancel it before starting a new checkout.");let J=$.length;if(J<1)throw Error("Mark at least one member as a paid seat before subscribing.");let W=`${s7()}/${encodeURIComponent(Y)}/members`,{url:K}=await t88({organizationId:G,quantity:J,successUrl:`${W}?checkout=success`,cancelUrl:`${W}?checkout=canceled`});return{url:K,quantity:J}}}),Fm0=s({name:"ORGANIZATION_SEATS_PREVIEW",description:"Preview what the organization pays now for changing its paid-seat count (Stripe prorated invoice preview). Read-only \u2014 nothing is charged.",annotations:{title:"Preview Seat Change",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:EF.object({quantity:EF.number().int().min(1).max(1000)}),outputSchema:EF.object({amountDueCents:EF.number(),currency:EF.string()}),handler:async(Z,X)=>{D0(X),await X.access.check();let G=X.organization?.id;if(!G)throw Error("Organization context required");let Y=await X.storage.organizationBilling.getBilling(G);if(!hb(Y))throw Error("Seat previews need an active self-serve subscription.");return await o88({subscriptionId:Y.stripeSubscriptionId,quantity:Z.quantity})}})});import{z as xw}from"zod";var Um0,Hm0;var Y68=B(()=>{y_();ub();rZ();e0();gD();Um0=s({name:"ORGANIZATION_BILLING_PORTAL",description:"Open the organization's Stripe billing portal (manage card, invoices, cancellation). Returns the portal URL.",annotations:{title:"Open Billing Portal",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!0},inputSchema:xw.object({}),outputSchema:xw.object({url:xw.string()}),handler:async(Z,X)=>{D0(X),await X.access.check();let G=B0(X);if(!G.slug)throw Error("Organization context required");let Y=await X.storage.organizationBilling.getBilling(G.id);if(!Y?.stripeCustomerId)throw Error("This organization has no billing account yet \u2014 subscribe first.");if(Y.legacy||Y.billingMode!=="self_serve")throw Error("This organization's billing is managed by deco \u2014 contact support.");try{return await a88({customerId:Y.stripeCustomerId,returnUrl:`${s7()}/${encodeURIComponent(G.slug)}/members`})}catch(Q){if(Q instanceof fY)throw Error(Q.message);throw Q}}}),Hm0=s({name:"ORGANIZATION_INCLUDED_REPORT_SET",description:"Choose which site's weekly report re-run the organization's subscription includes (null clears it).",annotations:{title:"Set Included Report Site",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:xw.object({url:xw.string().trim().min(1).max(255).nullable()}),outputSchema:xw.object({includedReportUrl:xw.string().nullable(),benefitsSyncQueued:xw.boolean()}),handler:async(Z,X)=>{D0(X),await X.access.check();let G=B0(X),Y=await X.storage.organizationBilling.getBilling(G.id);if(!Y||Y.legacy)throw Error("This organization is on the legacy plan \u2014 included reports do not apply.");let Q=Z.url===null?null:p60(Z.url);if(Z.url!==null&&!Q)throw Error(`"${Z.url}" is not a valid site URL.`);let{updated:$,benefitsReferenceId:J}=await X.storage.organizationBilling.setIncludedReportUrl(G.id,Q,{markBenefitsPending:KD()});if(!$)throw Error("Organization billing row missing.");let W=!1;if(J)try{await SN(G.id,J,"apply"),W=!0}catch(K){console.error("Failed to enqueue benefit sync (sweep covers):",K)}return{includedReportUrl:Q,benefitsSyncQueued:W}}})});import{z as Mn}from"zod";function X64(Z){return`[CREDITS] Paid report runs need at least $${(Q68/100).toFixed(2)} of AI credit balance \u2014 current balance is $${(Z/100).toFixed(2)}. Top up and try again.`}var Q68=500,wm0;var $68=B(()=>{Tf0();e0();nW();qH();gD();wm0=s({name:"ORGANIZATION_REPORT_RUN_PAID",description:"Trigger a paid report run for one of the organization's sites, billed against its AI credits (requires at least $5 of balance; the run's real cost plus markup is debited at completion).",annotations:{title:"Run Paid Report",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!0},inputSchema:Mn.object({url:Mn.string().trim().min(1).max(255).optional()}),outputSchema:Mn.object({url:Mn.string(),started:Mn.boolean()}),handler:async(Z,X)=>{D0(X),await X.access.check();let G=B0(X),Y=V1(X);if(!Y)throw Error("User ID required");if(!fc())throw Error("Reports are not available on this deployment.");let Q;if(Z.url)Q=p60(Z.url);else Q=(await X.storage.organizationBilling.getBilling(G.id))?.includedReportUrl??null;if(!Q)throw Error(Z.url?`"${Z.url}" is not a valid site URL.`:"No site chosen \u2014 pass a url or set the included report site first.");let $=K7().deco;if(!$?.getCreditsBalance)throw Error("AI credit balance is not available on this deployment.");let J=await PW(Y,X.auth.user?.email),{balanceCents:W}=await $.getCreditsBalance(J,G.id);if(!(W>=Q68))throw Error(X64(W??0));return await uk1({host:Q,organizationId:G.id}),{url:Q,started:!0}}})});var J68=B(()=>{P88();T88();R88();I88();q88();k88();S88();C88();b88();v88();_88();u88();c88();l88();d88();m88();i88();X68();G68();Y68();$68()});function W68(Z,X){return Z?.startsWith(`${kn[X]}:`)??!1}function Om0(Z){let X=0;for(let G of Z){if(G.action!=="status_changed")continue;if(G.data?.to!=="in_review")continue;X=Math.max(X,new Date(G.occurredAt).getTime())}return X}function Y64(Z,X){let G=Om0(Z),Y=new Map;for(let Q of Z){if(Q.action!=="review_approved"&&Q.action!=="review_changes_requested")continue;if(new Date(Q.occurredAt).getTime()<G)continue;let $=Q.data??{};if($.reviewer!=="qa"&&$.reviewer!=="code_review")continue;if(Q.action==="review_approved"){if(X?.verifiedOnly&&$.verified!==!0)continue;Y.set($.reviewer,"approved")}else Y.set($.reviewer,"changes_requested")}return Y}function fZ0(Z,X,G){if(X.length===0)return!1;let Y=Y64(Z,G);return X.every((Q)=>Y.get(Q)==="approved")}var KX="super-agent",g_,kn,h_,K68="task-board.item.updated",N68="task-board.item.deleted";var zF=B(()=>{g_=["qa","code_review"],kn={qa:"QA Agent",code_review:"Code Reviewer"},h_={qa:"qa_agent_enabled",code_review:"code_reviewer_enabled"}});import{z as H8}from"zod";var jF,rL,Q64,$64,F68,u_,J64,W64,U68;var sW=B(()=>{zF();jF=H8.enum(["triage","todo","in_progress","in_review","done"]),rL=H8.enum(["none","low","medium","high","urgent"]),Q64=H8.object({threadId:H8.string(),virtualMcpId:H8.string().nullable(),status:H8.enum(["in_progress","requires_action","failed","completed","expired"]).nullable(),title:H8.string().nullable(),lastMessage:H8.string().nullable(),hasPreview:H8.boolean(),hasMessages:H8.boolean(),createdAt:H8.string()}),$64=H8.object({id:H8.string(),name:H8.string(),color:H8.string().nullable().describe('Hex color, e.g. "#3b82f6"'),createdBy:H8.string(),createdAt:H8.string().datetime()}),F68=H8.object({url:H8.string(),number:H8.number(),repoOwner:H8.string(),repoName:H8.string(),createdAt:H8.string(),title:H8.string().nullable(),body:H8.string().nullable(),state:H8.enum(["open","closed"]).nullable(),draft:H8.boolean().nullable(),merged:H8.boolean().nullable(),checksStatus:H8.enum(["pending","passing","failing"]).nullable(),checks:H8.array(H8.object({name:H8.string(),status:H8.string(),conclusion:H8.string().nullable(),detailsUrl:H8.string().nullable(),summary:H8.string().nullable()})),previewUrl:H8.string().nullable()}),u_=H8.object({id:H8.string(),organizationId:H8.string(),title:H8.string(),description:H8.string().nullable(),status:jF,priority:rL,assigneeId:H8.string().nullable(),assignedBy:H8.string().nullable(),dueDate:H8.string().datetime().nullable(),sortOrder:H8.number(),threads:H8.array(Q64),tags:H8.array($64),createdBy:H8.string(),createdAt:H8.string().datetime(),updatedBy:H8.string(),updatedAt:H8.string().datetime()}),J64=["created","status_changed","assignee_changed","priority_changed","due_date_changed","title_changed","description_changed","tags_changed","review_requested","review_approved","review_changes_requested"],W64=H8.enum(J64),U68=H8.object({id:H8.string(),taskBoardItemId:H8.string(),action:W64,actorId:H8.string().nullable(),data:H8.record(H8.string(),H8.unknown()),occurredAt:H8.string().datetime()})});async function bZ0(Z,X,G){if(G===KX)return;let{members:Y}=await Z.boundAuth.organization.listMembers({organizationId:X,filterField:"userId",filterValue:G});if(!Y.some((Q)=>Q.userId===G))throw Error("assigneeId is not a member of the organization")}var Bm0=B(()=>{sW()});async function Dm0(Z,X,G){let Y;try{return await Promise.race([Z.aiProviders.listModels(X,G),new Promise(($,J)=>{Y=setTimeout(()=>J(Error("listModels timeout")),K64)})])}finally{if(Y)clearTimeout(Y)}}function N64(Z,X){switch(Z){case"fast":return X.chat.fast;case"smart":return X.chat.smart;case"thinking":return X.chat.thinking;case"image":return X.image;case"web_search":return X.webSearch;case"deep_research":return X.deepResearch}}function Lm0(Z,X,G){let Y=Z.find((Q)=>Q.modelId===X);return{title:Y?.title??G??X,providerId:Y?.providerId,capabilities:Y?.capabilities,limits:Y?.limits??null}}async function hG(Z,X,G){let Y=Z.organization?.id;if(!Y)throw Error("resolveTier called without an organization");let $=(await Z.storage.organizationSettings.get(Y))?.simple_mode?.tiers?.[X]??null,J=Z.auth?.user?.id,W=aW.safeParse(X),K=G?.applyUserPrefs&&W.success&&J?(await Z.storage.userModelPreferences.get(J,Y))?.tiers?.[W.data]??null:null,N=await Z.storage.aiProviderKeys.list({organizationId:Y});for(let O of[K,$])if(O&&N.some((D)=>D.id===O.keyId)){let D=await Dm0(Z,O.keyId,Y).catch(()=>[]);return{credentialId:O.keyId,modelId:O.modelId,modelMeta:Lm0(D,O.modelId,O.title)}}if(N.length===0)throw new c_(X);let F={};await Promise.all(N.map(async(O)=>{F[O.id]=await Dm0(Z,O.id,Y).catch(()=>[])}));let U=N.map((O)=>({id:O.id,providerId:O.providerId,label:O.label,presetId:O.presetId,createdBy:O.createdBy,createdAt:O.createdAt})),H=kk1(U,F),w=N64(X,H);if(!w)throw new c_(X);return{credentialId:w.keyId,modelId:w.modelId,modelMeta:Lm0(F[w.keyId]??[],w.modelId,w.title)}}async function H68(Z,X,G){let Y=Z.organization?.id;if(!Y)throw Error("resolveSpecificModel called without an organization");let Q=await Dm0(Z,X,Y).catch(()=>[]);return{credentialId:X,modelId:G,modelMeta:Lm0(Q,G)}}async function l3(Z,X){try{return await hG(Z,X)}catch(G){if(G instanceof c_)return null;return console.warn(`[resolveTier] tier "${X}" resolution failed:`,G),null}}var c_,K64=5000;var _w=B(()=>{_Q();R6();c_=class c_ extends Error{tier;constructor(Z){super(`No model available for tier "${Z}". Connect a provider or configure the tier in organization settings.`);this.tier=Z;this.name="TierUnavailableError"}}});function vZ0(Z){return Z.sandboxProviderKind==="agent-sandbox"&&Z.harnessId==="decopilot"}function w68(Z){return Z.harnessId==="decopilot"&&(Z.sandboxProviderKind==null||Z.sandboxProviderKind==="agent-sandbox")}function U64(Z){return{type:"data-run-status",id:"run-status",data:{stage:Z}}}function O68(Z){if(!Z||typeof Z!=="object")return!1;return Z.type==="data-run-status"}async function EJ(Z,X,G){if(!Z)return;try{await Z.publishRawChunk(X,U64(G))}catch{}}var F64,Sn,BO9;var l_=B(()=>{F64=["waiting-runner","starting-run","waiting-capacity","gathering-context","preparing-tools","starting-assistant","analyzing-scope"],Sn=["gathering-context","preparing-tools","starting-assistant","analyzing-scope"],BO9=new Set(F64)});function xZ0(){return crypto.randomUUID()}var zm0=f((EO9,L68)=>{var{defineProperty:Em0,getOwnPropertyDescriptor:H64,getOwnPropertyNames:w64}=Object,O64=Object.prototype.hasOwnProperty,B64=(Z,X)=>{for(var G in X)Em0(Z,G,{get:X[G],enumerable:!0})},D64=(Z,X,G,Y)=>{if(X&&typeof X==="object"||typeof X==="function"){for(let Q of w64(X))if(!O64.call(Z,Q)&&Q!==G)Em0(Z,Q,{get:()=>X[Q],enumerable:!(Y=H64(X,Q))||Y.enumerable})}return Z},L64=(Z)=>D64(Em0({},"__esModule",{value:!0}),Z),B68={};B64(B68,{SYMBOL_FOR_REQ_CONTEXT:()=>D68,getContext:()=>E64});L68.exports=L64(B68);var D68=Symbol.for("@vercel/request-context");function E64(){return globalThis[D68]?.get?.()??{}}});var Vn=f((zO9,j68)=>{var{defineProperty:jm0,getOwnPropertyDescriptor:z64,getOwnPropertyNames:j64}=Object,A64=Object.prototype.hasOwnProperty,P64=(Z,X)=>{for(var G in X)jm0(Z,G,{get:X[G],enumerable:!0})},T64=(Z,X,G,Y)=>{if(X&&typeof X==="object"||typeof X==="function"){for(let Q of j64(X))if(!A64.call(Z,Q)&&Q!==G)jm0(Z,Q,{get:()=>X[Q],enumerable:!(Y=z64(X,Q))||Y.enumerable})}return Z},R64=(Z)=>T64(jm0({},"__esModule",{value:!0}),Z),E68={};P64(E68,{VercelOidcTokenError:()=>z68});j68.exports=R64(E68);class z68 extends Error{constructor(Z,X){super(Z);this.name="VercelOidcTokenError",this.cause=X}toString(){if(this.cause)return`${this.name}: ${this.message}: ${this.cause}`;return`${this.name}: ${this.message}`}}});var R68=f((jO9,T68)=>{var{create:I64,defineProperty:_Z0,getOwnPropertyDescriptor:q64,getOwnPropertyNames:M64,getPrototypeOf:k64}=Object,S64=Object.prototype.hasOwnProperty,V64=(Z,X)=>{for(var G in X)_Z0(Z,G,{get:X[G],enumerable:!0})},A68=(Z,X,G,Y)=>{if(X&&typeof X==="object"||typeof X==="function"){for(let Q of M64(X))if(!S64.call(Z,Q)&&Q!==G)_Z0(Z,Q,{get:()=>X[Q],enumerable:!(Y=q64(X,Q))||Y.enumerable})}return Z},Pm0=(Z,X,G)=>(G=Z!=null?I64(k64(Z)):{},A68(X||!Z||!Z.__esModule?_Z0(G,"default",{value:Z,enumerable:!0}):G,Z)),C64=(Z)=>A68(_Z0({},"__esModule",{value:!0}),Z),P68={};V64(P68,{findRootDir:()=>v64,getUserDataDir:()=>x64});T68.exports=C64(P68);var Cn=Pm0(c0("path")),f64=Pm0(c0("fs")),Am0=Pm0(c0("os")),b64=Vn();function v64(){try{let Z=process.cwd();while(Z!==Cn.default.dirname(Z)){let X=Cn.default.join(Z,".vercel");if(f64.default.existsSync(X))return Z;Z=Cn.default.dirname(Z)}}catch(Z){throw new b64.VercelOidcTokenError("Token refresh only supported in node server environments")}return null}function x64(){if(process.env.XDG_DATA_HOME)return process.env.XDG_DATA_HOME;switch(Am0.default.platform()){case"darwin":return Cn.default.join(Am0.default.homedir(),"Library/Application Support");case"linux":return Cn.default.join(Am0.default.homedir(),".local/share");case"win32":if(process.env.LOCALAPPDATA)return process.env.LOCALAPPDATA;return null;default:return null}}});var C68=f((AO9,V68)=>{var{create:_64,defineProperty:yZ0,getOwnPropertyDescriptor:y64,getOwnPropertyNames:g64,getPrototypeOf:h64}=Object,u64=Object.prototype.hasOwnProperty,c64=(Z,X)=>{for(var G in X)yZ0(Z,G,{get:X[G],enumerable:!0})},I68=(Z,X,G,Y)=>{if(X&&typeof X==="object"||typeof X==="function"){for(let Q of g64(X))if(!u64.call(Z,Q)&&Q!==G)yZ0(Z,Q,{get:()=>X[Q],enumerable:!(Y=y64(X,Q))||Y.enumerable})}return Z},q68=(Z,X,G)=>(G=Z!=null?_64(h64(Z)):{},I68(X||!Z||!Z.__esModule?yZ0(G,"default",{value:Z,enumerable:!0}):G,Z)),l64=(Z)=>I68(yZ0({},"__esModule",{value:!0}),Z),M68={};c64(M68,{isValidAccessToken:()=>n64,readAuthConfig:()=>m64,writeAuthConfig:()=>i64});V68.exports=l64(M68);var fn=q68(c0("fs")),k68=q68(c0("path")),d64=bn();function S68(){let Z=(0,d64.getVercelDataDir)();if(!Z)throw Error(`Unable to find Vercel CLI data directory. Your platform: ${process.platform}. Supported: darwin, linux, win32.`);return k68.join(Z,"auth.json")}function m64(){try{let Z=S68();if(!fn.existsSync(Z))return null;let X=fn.readFileSync(Z,"utf8");if(!X)return null;return JSON.parse(X)}catch(Z){return null}}function i64(Z){let X=S68(),G=k68.dirname(X);if(!fn.existsSync(G))fn.mkdirSync(G,{mode:504,recursive:!0});fn.writeFileSync(X,JSON.stringify(Z,null,2),{mode:384})}function n64(Z,X=0){if(!Z.token)return!1;if(typeof Z.expiresAt!=="number")return!0;let G=Math.floor(Date.now()/1000),Y=X/1000;return Z.expiresAt>=G+Y}});var x68=f((PO9,v68)=>{var{defineProperty:Im0,getOwnPropertyDescriptor:p64,getOwnPropertyNames:t64}=Object,o64=Object.prototype.hasOwnProperty,r64=(Z,X)=>{for(var G in X)Im0(Z,G,{get:X[G],enumerable:!0})},a64=(Z,X,G,Y)=>{if(X&&typeof X==="object"||typeof X==="function"){for(let Q of t64(X))if(!o64.call(Z,Q)&&Q!==G)Im0(Z,Q,{get:()=>X[Q],enumerable:!(Y=p64(X,Q))||Y.enumerable})}return Z},s64=(Z)=>a64(Im0({},"__esModule",{value:!0}),Z),f68={};r64(f68,{processTokenResponse:()=>Y44,refreshTokenRequest:()=>G44});v68.exports=s64(f68);var Tm0=c0("os"),e64="https://vercel.com",Z44="cl_HYyOPBNtFMfHhaUn9L4QPfTZz6TP47bp",b68=`@vercel/oidc node-${process.version} ${(0,Tm0.platform)()} (${(0,Tm0.arch)()}) ${(0,Tm0.hostname)()}`,Rm0=null;async function X44(){if(Rm0)return Rm0;let Z=`${e64}/.well-known/openid-configuration`,X=await fetch(Z,{headers:{"user-agent":b68}});if(!X.ok)throw Error("Failed to discover OAuth endpoints");let G=await X.json();if(!G||typeof G.token_endpoint!=="string")throw Error("Invalid OAuth discovery response");let Y=G.token_endpoint;return Rm0=Y,Y}async function G44(Z){let X=await X44();return await fetch(X,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded","user-agent":b68},body:new URLSearchParams({client_id:Z44,grant_type:"refresh_token",...Z})})}async function Y44(Z){let X=await Z.json();if(!Z.ok){let G=typeof X==="object"&&X&&"error"in X?String(X.error):"Token refresh failed";return[Error(G)]}if(typeof X!=="object"||X===null)return[Error("Invalid token response")];if(typeof X.access_token!=="string")return[Error("Missing access_token in response")];if(X.token_type!=="Bearer")return[Error("Invalid token_type in response")];if(typeof X.expires_in!=="number")return[Error("Missing expires_in in response")];return[null,X]}});var Mm0=f((TO9,h68)=>{var{defineProperty:qm0,getOwnPropertyDescriptor:Q44,getOwnPropertyNames:$44}=Object,J44=Object.prototype.hasOwnProperty,W44=(Z,X)=>{for(var G in X)qm0(Z,G,{get:X[G],enumerable:!0})},K44=(Z,X,G,Y)=>{if(X&&typeof X==="object"||typeof X==="function"){for(let Q of $44(X))if(!J44.call(Z,Q)&&Q!==G)qm0(Z,Q,{get:()=>X[Q],enumerable:!(Y=Q44(X,Q))||Y.enumerable})}return Z},N44=(Z)=>K44(qm0({},"__esModule",{value:!0}),Z),_68={};W44(_68,{AccessTokenMissingError:()=>y68,RefreshAccessTokenFailedError:()=>g68});h68.exports=N44(_68);class y68 extends Error{constructor(){super("No authentication found. Please log in with the Vercel CLI (vercel login).");this.name="AccessTokenMissingError"}}class g68 extends Error{constructor(Z){super("Failed to refresh authentication token.",{cause:Z});this.name="RefreshAccessTokenFailedError"}}});var bn=f((RO9,m68)=>{var{create:F44,defineProperty:gZ0,getOwnPropertyDescriptor:U44,getOwnPropertyNames:H44,getPrototypeOf:w44}=Object,O44=Object.prototype.hasOwnProperty,B44=(Z,X)=>{for(var G in X)gZ0(Z,G,{get:X[G],enumerable:!0})},c68=(Z,X,G,Y)=>{if(X&&typeof X==="object"||typeof X==="function"){for(let Q of H44(X))if(!O44.call(Z,Q)&&Q!==G)gZ0(Z,Q,{get:()=>X[Q],enumerable:!(Y=U44(X,Q))||Y.enumerable})}return Z},l68=(Z,X,G)=>(G=Z!=null?F44(w44(Z)):{},c68(X||!Z||!Z.__esModule?gZ0(G,"default",{value:Z,enumerable:!0}):G,Z)),D44=(Z)=>c68(gZ0({},"__esModule",{value:!0}),Z),d68={};B44(d68,{assertVercelOidcTokenResponse:()=>km0,findProjectInfo:()=>j44,getTokenPayload:()=>T44,getVercelDataDir:()=>L44,getVercelOidcToken:()=>z44,getVercelToken:()=>E44,isExpired:()=>R44,loadToken:()=>P44,saveToken:()=>A44});m68.exports=D44(d68);var vn=l68(c0("path")),aL=l68(c0("fs")),i_=Vn(),hZ0=R68(),d_=C68(),u68=x68(),m_=Mm0();function L44(){let X=(0,hZ0.getUserDataDir)();if(!X)return null;return vn.join(X,"com.vercel.cli")}async function E44(Z){let X=(0,d_.readAuthConfig)();if(!X?.token)throw new m_.AccessTokenMissingError;if((0,d_.isValidAccessToken)(X,Z?.expirationBufferMs))return X.token;if(!X.refreshToken)throw(0,d_.writeAuthConfig)({}),new m_.RefreshAccessTokenFailedError("No refresh token available");try{let G=await(0,u68.refreshTokenRequest)({refresh_token:X.refreshToken}),[Y,Q]=await(0,u68.processTokenResponse)(G);if(Y||!Q)throw(0,d_.writeAuthConfig)({}),new m_.RefreshAccessTokenFailedError(Y);let $={token:Q.access_token,expiresAt:Math.floor(Date.now()/1000)+Q.expires_in};if(Q.refresh_token)$.refreshToken=Q.refresh_token;return(0,d_.writeAuthConfig)($),$.token}catch(G){if((0,d_.writeAuthConfig)({}),G instanceof m_.AccessTokenMissingError||G instanceof m_.RefreshAccessTokenFailedError)throw G;throw new m_.RefreshAccessTokenFailedError(G)}}async function z44(Z,X,G){let Y=`https://api.vercel.com/v1/projects/${X}/token?source=vercel-oidc-refresh${G?`&teamId=${G}`:""}`,Q=await fetch(Y,{method:"POST",headers:{Authorization:`Bearer ${Z}`}});if(!Q.ok)throw new i_.VercelOidcTokenError(`Failed to refresh OIDC token: ${Q.statusText}`);let $=await Q.json();return km0($),$}function km0(Z){if(!Z||typeof Z!=="object")throw TypeError("Vercel OIDC token is malformed. Expected an object. Please run `vc env pull` and try again");if(!("token"in Z)||typeof Z.token!=="string")throw TypeError("Vercel OIDC token is malformed. Expected a string-valued token property. Please run `vc env pull` and try again")}function j44(){let Z=(0,hZ0.findRootDir)();if(!Z)throw new i_.VercelOidcTokenError("Unable to find project root directory. Have you linked your project with `vc link?`");let X=vn.join(Z,".vercel","project.json");if(!aL.existsSync(X))throw new i_.VercelOidcTokenError("project.json not found, have you linked your project with `vc link?`");let G=JSON.parse(aL.readFileSync(X,"utf8"));if(typeof G.projectId!=="string"&&typeof G.orgId!=="string")throw TypeError("Expected a string-valued projectId property. Try running `vc link` to re-link your project.");return{projectId:G.projectId,teamId:G.orgId}}function A44(Z,X){let G=(0,hZ0.getUserDataDir)();if(!G)throw new i_.VercelOidcTokenError("Unable to find user data directory. Please reach out to Vercel support.");let Y=vn.join(G,"com.vercel.token",`${X}.json`),Q=JSON.stringify(Z);aL.mkdirSync(vn.dirname(Y),{mode:504,recursive:!0}),aL.writeFileSync(Y,Q),aL.chmodSync(Y,432);return}function P44(Z){let X=(0,hZ0.getUserDataDir)();if(!X)throw new i_.VercelOidcTokenError("Unable to find user data directory. Please reach out to Vercel support.");let G=vn.join(X,"com.vercel.token",`${Z}.json`);if(!aL.existsSync(G))return null;let Y=JSON.parse(aL.readFileSync(G,"utf8"));return km0(Y),Y}function T44(Z){let X=Z.split(".");if(X.length!==3)throw new i_.VercelOidcTokenError("Invalid token. Please run `vc env pull` and try again");let G=X[1].replace(/-/g,"+").replace(/_/g,"/"),Y=G.padEnd(G.length+(4-G.length%4)%4,"=");return JSON.parse(Buffer.from(Y,"base64").toString("utf8"))}function R44(Z,X=0){return Z.exp*1000<Date.now()+X}});var t68=f((IO9,p68)=>{var{defineProperty:Sm0,getOwnPropertyDescriptor:I44,getOwnPropertyNames:q44}=Object,M44=Object.prototype.hasOwnProperty,k44=(Z,X)=>{for(var G in X)Sm0(Z,G,{get:X[G],enumerable:!0})},S44=(Z,X,G,Y)=>{if(X&&typeof X==="object"||typeof X==="function"){for(let Q of q44(X))if(!M44.call(Z,Q)&&Q!==G)Sm0(Z,Q,{get:()=>X[Q],enumerable:!(Y=I44(X,Q))||Y.enumerable})}return Z},V44=(Z)=>S44(Sm0({},"__esModule",{value:!0}),Z),n68={};k44(n68,{refreshToken:()=>C44});p68.exports=V44(n68);var i68=Vn(),yw=bn();async function C44(Z){let X=Z?.project,G=Z?.team;if(!X&&!G){let Q=(0,yw.findProjectInfo)();X=Q.projectId,G=Q.teamId}else if(!X||!G){let Q=(0,yw.findProjectInfo)();X=X??Q.projectId,G=G??Q.teamId}if(!X)throw new i68.VercelOidcTokenError("Failed to refresh OIDC token: No project specified. Try re-linking your project with `vc link`");let Y=(0,yw.loadToken)(X);if(!Y||(0,yw.isExpired)((0,yw.getTokenPayload)(Y.token),Z?.expirationBufferMs)){let Q=await(0,yw.getVercelToken)({expirationBufferMs:Z?.expirationBufferMs});if(Y=await(0,yw.getVercelOidcToken)(Q,X,G),!Y)throw new i68.VercelOidcTokenError("Failed to refresh OIDC token");(0,yw.saveToken)(Y,X)}process.env.VERCEL_OIDC_TOKEN=Y.token;return}});var a68=f((qO9,r68)=>{var{defineProperty:Cm0,getOwnPropertyDescriptor:f44,getOwnPropertyNames:b44}=Object,v44=Object.prototype.hasOwnProperty,x44=(Z,X)=>{for(var G in X)Cm0(Z,G,{get:X[G],enumerable:!0})},_44=(Z,X,G,Y)=>{if(X&&typeof X==="object"||typeof X==="function"){for(let Q of b44(X))if(!v44.call(Z,Q)&&Q!==G)Cm0(Z,Q,{get:()=>X[Q],enumerable:!(Y=f44(X,Q))||Y.enumerable})}return Z},y44=(Z)=>_44(Cm0({},"__esModule",{value:!0}),Z),o68={};x44(o68,{getVercelOidcToken:()=>u44,getVercelOidcTokenSync:()=>Vm0});r68.exports=y44(o68);var g44=zm0(),h44=Vn();async function u44(Z){let X="",G;try{X=Vm0()}catch(Y){G=Y}try{let[{getTokenPayload:Y,isExpired:Q},{refreshToken:$}]=await Promise.all([await Promise.resolve().then(() => k(bn())),await Promise.resolve().then(() => k(t68()))]);if(!X||Q(Y(X),Z?.expirationBufferMs))await $(Z),X=Vm0()}catch(Y){let Q=G instanceof Error?G.message:"";if(Y instanceof Error)Q=`${Q}
1150
+ `.execute(Z)).rows[0]?.exists)await u4`CREATE ROLE ${u4.id(G)} NOLOGIN`.execute(Z);await u4`GRANT ${u4.id(G)} TO CURRENT_USER`.execute(Z),await u4`GRANT USAGE, CREATE ON SCHEMA ${u4.id(X)} TO ${u4.id(G)}`.execute(Z),await u4`GRANT ALL ON ALL TABLES IN SCHEMA ${u4.id(X)} TO ${u4.id(G)}`.execute(Z),await u4`GRANT ALL ON ALL SEQUENCES IN SCHEMA ${u4.id(X)} TO ${u4.id(G)}`.execute(Z),await u4`ALTER DEFAULT PRIVILEGES IN SCHEMA ${u4.id(X)} GRANT ALL ON TABLES TO ${u4.id(G)}`.execute(Z),await u4`ALTER DEFAULT PRIVILEGES IN SCHEMA ${u4.id(X)} GRANT ALL ON SEQUENCES TO ${u4.id(G)}`.execute(Z),await u4`REVOKE ALL ON SCHEMA public FROM ${u4.id(G)}`.execute(Z)}async function L84(Z,X,G,Y){try{return await Z.transaction().execute(async(Q)=>{return await u4`SET LOCAL ROLE ${u4.id(G)}`.execute(Q),await u4`SET LOCAL search_path TO ${u4.id(X)}`.execute(Q),await u4.raw(Y).execute(Q)})}catch(Q){if(B84(Q))return await D84(Z,X,G),await Z.transaction().execute(async($)=>{return await u4`SET LOCAL ROLE ${u4.id(G)}`.execute($),await u4`SET LOCAL search_path TO ${u4.id(X)}`.execute($),await u4.raw(Y).execute($)});throw Q}}var F84,H84,Z88;var X88=B(()=>{e0();F84=rW.object({results:rW.array(rW.unknown()).optional(),success:rW.boolean().optional()});H84=rW.object({sql:rW.string().describe("The SQL query to run"),params:rW.array(rW.any()).describe("The parameters to pass to the SQL query").optional()});Z88=s({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:H84,outputSchema:rW.object({result:rW.array(F84)}),handler:async(Z,X)=>{D0(X),await X.access.check();let G=U84(Z.sql,Z.params||[]);if(!X.connectionId)throw Error("Connection context required for database access");console.warn("DATABASES_RUN_SQL invoked",{"tool.deprecation_probe":"DATABASES_RUN_SQL","connection.id":X.connectionId,"organization.id":X.organization?.id??null,"user.id":X.auth.user?.id??null});let Y=w84(X.connectionId),Q=O84(X.connectionId);return{result:[{results:(await L84(X.db,Y,Q,G)).rows,success:!0}]}}})});function IZ0(Z){let X=Z.access.getRole();if(!q3(X))throw new fW("Only organization owners and admins can change org-wide pin status")}var Fd0=B(()=>{M3();UL()});async function qZ0(Z,X,G){let Y=[...new Set(G)],Q=await Promise.all(Y.map((J)=>Z.storage.connections.findById(J,X))),$=Y.filter((J,W)=>!Q[W]);if($.length>0)throw Error(`Connection not found: ${$.join(", ")}`)}import{z as Q88}from"zod";function z84(){let Z=G88[Math.floor(Math.random()*G88.length)];return`icon://${Y88[Math.floor(Math.random()*Y88.length)]}?color=${Z}`}var G88,Y88,j84,A84,Ud0;var $88=B(()=>{e0();MH();Fd0();Wn();G88=["red","orange","amber","yellow","lime","green","emerald","cyan","sky","blue","indigo","violet","purple","fuchsia","pink","rose"],Y88=["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"];j84=Q88.object({data:$10.describe("Data for the new virtual MCP")}),A84=Q88.object({item:vX.describe("The created virtual MCP entity")}),Ud0=s({name:"COLLECTION_VIRTUAL_MCP_CREATE",description:"Create a Virtual MCP (agent) that aggregates tools from multiple connections into one endpoint. Pass `prompts` to seed the agent with kickstart prompts (conversation starters shown as icebreakers). Author them from the agent's role/instructions and the descriptions of the tools it will have, so the starters are coherent and immediately useful.",annotations:{title:"Create Virtual MCP",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:j84,outputSchema:A84,handler:async(Z,X)=>{D0(X);let G=B0(X);await X.access.check();let Y=V1(X);if(!Y)throw Error("User ID required to create virtual MCP");if(Z.data.pinned===!0)IZ0(X);let{prompts:Q,...$}=Z.data;if($.connections.length>0)await qZ0(X,G.id,$.connections.map((K)=>K.connection_id));let J={...$,icon:$.icon??z84()},W=await X.storage.virtualMcps.create(G.id,Y,J);if(Q?.length&&X.orgFs&&W.id)await s90(X.orgFs,W.id,Y,Q);return{item:W}}})});function P84(Z){let X=[],G=0;while(G<Z.length){let Y=Z[G];if(Y==="%")X.push(".*");else if(Y==="_")X.push(".");else if(/[.*+?^${}()|[\]\\]/.test(Y))X.push("\\"+Y);else X.push(Y);G++}return X.join("")}function Vw(Z){return typeof Z==="string"||typeof Z==="number"}function Hd0(Z,X){let G=X.split("."),Y=Z;for(let Q of G){if(Y==null||typeof Y!=="object")return;Y=Y[Q]}return Y}function T84(Z,X){return Z.connections.some((G)=>G.connection_id===X)}function MZ0(Z,X){if("conditions"in X){let{operator:W,conditions:K}=X;switch(W){case"and":return K.every((N)=>MZ0(Z,N));case"or":return K.some((N)=>MZ0(Z,N));case"not":return!K.every((N)=>MZ0(Z,N));default:return!0}}let{field:G,operator:Y,value:Q}=X,$=G.join(".");if($==="connection_id"){if(Y!=="eq"||typeof Q!=="string")return!1;return T84(Z,Q)}let J=Hd0(Z,$);switch(Y){case"eq":return J===Q;case"gt":return Vw(J)&&Vw(Q)&&J>Q;case"gte":return Vw(J)&&Vw(Q)&&J>=Q;case"lt":return Vw(J)&&Vw(Q)&&J<Q;case"lte":return Vw(J)&&Vw(Q)&&J<=Q;case"in":return Array.isArray(Q)&&Q.includes(J);case"like":if(typeof J!=="string"||typeof Q!=="string")return!1;if(Q.length>100)return!1;let W=P84(Q);return new RegExp(`^${W}$`,"i").test(J);case"contains":if(typeof J!=="string"||typeof Q!=="string")return!1;return J.toLowerCase().includes(Q.toLowerCase());default:return!0}}function R84(Z,X){return[...Z].sort((G,Y)=>{for(let Q of X){let $=Q.field.join("."),J=Hd0(G,$),W=Hd0(Y,$),K=0;if(J==null&&W==null)continue;if(J==null)K=Q.nulls==="first"?-1:1;else if(W==null)K=Q.nulls==="first"?1:-1;else if(typeof J==="string"&&typeof W==="string")K=J.localeCompare(W);else if(typeof J==="number"&&typeof W==="number")K=J-W;else K=String(J).localeCompare(String(W));if(K!==0)return Q.direction==="desc"?-K:K}return 0})}var I84,q84,wd0;var J88=B(()=>{u3();e0();MH();I84=wJ,q84=wF(vX),wd0=s({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:I84,outputSchema:q84,handler:async(Z,X)=>{await X.access.check();let G=B0(X),Y=Z.where&&!("conditions"in Z.where)&&Z.where.field.join(".")==="connection_id"&&Z.where.operator==="eq"&&typeof Z.where.value==="string"?Z.where.value:void 0,Q=Z.where&&!("conditions"in Z.where)&&Z.where.field.join(".")==="pinned"&&Z.where.operator==="eq"&&typeof Z.where.value==="boolean"?Z.where.value:void 0,J=Y?await X.storage.virtualMcps.listByConnectionId(G.id,Y):await X.storage.virtualMcps.list(G.id,Q!==void 0?{pinnedOnly:Q}:void 0);if(Z.where)J=J.filter((H)=>MZ0(H,Z.where));if(Z.orderBy&&Z.orderBy.length>0)J=R84(J,Z.orderBy);let W=J.length,K=Z.offset??0,N=Z.limit??100,F=J.slice(K,K+N),U=K+N<W;return{items:F,totalCount:W,hasMore:U}}})});import{z as Od0}from"zod";var M84,k84,Bd0;var W88=B(()=>{e0();MH();M84=Od0.object({id:Od0.string().describe("ID of the virtual MCP to retrieve")}),k84=Od0.object({item:vX.nullable().describe("The retrieved virtual MCP, or null if not found")}),Bd0=s({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:M84,outputSchema:k84,handler:async(Z,X)=>{D0(X);let G=B0(X);await X.access.check();let Y=await X.storage.virtualMcps.findById(Z.id);if(Y&&Y.organization_id!==G.id)return{item:null};if(!Y)return{item:null};return{item:Y}}})});import{z as Dd0}from"zod";var S84,V84,Ld0;var K88=B(()=>{e0();Wn();MH();Fd0();S84=Dd0.object({id:Dd0.string().describe("ID of the virtual MCP to update"),data:J10.describe("Partial virtual MCP data to update")}),V84=Dd0.object({item:vX.describe("The updated virtual MCP entity")}),Ld0=s({name:"COLLECTION_VIRTUAL_MCP_UPDATE",description:"Update a Virtual MCP's name, slug, connection list, or kickstart prompts. Pass `prompts` to replace the agent's conversation starters (full set; empty array clears them).",annotations:{title:"Update Virtual MCP",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:S84,outputSchema:V84,handler:async(Z,X)=>{D0(X);let G=B0(X);await X.access.check();let Y=V1(X);if(!Y)throw Error("User ID required to update virtual MCP");let Q=await X.storage.virtualMcps.findById(Z.id);if(!Q)throw Error(`Virtual MCP not found: ${Z.id}`);if(Q.organization_id!==G.id)throw Error(`Virtual MCP not found: ${Z.id}`);let{prompts:$,...J}=Z.data;if(J.metadata&&Q.metadata)J.metadata={...Q.metadata,...J.metadata};if(J.pinned!==void 0&&J.pinned!==Q.pinned)IZ0(X);if(J.connections?.length)await qZ0(X,G.id,J.connections.map((K)=>K.connection_id));let W=await X.storage.virtualMcps.update(Z.id,Y,J);if($!==void 0&&X.orgFs)await s90(X.orgFs,Z.id,Y,$);return{item:W}}})});function N88(Z){return D3(Z)!==null||F10(Z)!==null}var F88=B(()=>{R6()});import{z as Ed0}from"zod";var C84,f84,zd0;var U88=B(()=>{NF();HJ();e0();Wn();MH();F88();C84=Ed0.object({id:Ed0.string().describe("ID of the virtual MCP to delete")}),f84=Ed0.object({item:vX.describe("The deleted virtual MCP entity")}),zd0=s({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:C84,outputSchema:f84,handler:async(Z,X)=>{D0(X);let G=B0(X);if(await X.access.check(),N88(Z.id))throw Error(`Virtual MCP not found: ${Z.id}`);let Y=await X.storage.virtualMcps.findById(Z.id);if(!Y)throw Error(`Virtual MCP not found: ${Z.id}`);if(Y.organization_id!==G.id)throw Error(`Virtual MCP not found: ${Z.id}`);await X.storage.virtualMcps.delete(Z.id);try{if((await X.storage.organizationSettings.get(G.id))?.main_agent_id===Z.id)await X.storage.organizationSettings.upsert(G.id,{main_agent_id:null})}catch($){console.error("[VIRTUAL_MCP_DELETE] failed to clear main agent pointer",{id:Z.id,error:$.message})}if(X.orgFs)await il0(X.orgFs,Z.id,V1(X)??"system");let Q=Y.metadata?.githubRepo?.connectionId;if(Q)try{let $=await X.storage.connections.findById(Q,G.id);if($&&_G($)){let W=await new V9(X.db,X.vault).get(Q);if(W?.accessToken)try{await fetch("https://api.github.com/installation/token",{method:"DELETE",headers:{Authorization:`Bearer ${W.accessToken}`,Accept:"application/vnd.github+json","X-GitHub-Api-Version":"2022-11-28"},signal:AbortSignal.timeout(5000)})}catch{}await X.storage.connections.delete(Q)}}catch($){console.error("[VIRTUAL_MCP_DELETE] failed to tear down repo-scoped connection",{childConnectionId:Q,error:$.message})}return{item:Y}}})});import{z as SY}from"zod";var b84,jd0;var H88=B(()=>{e0();b84=SY.object({id:SY.string(),virtualMcpId:SY.string(),pluginId:SY.string(),connectionId:SY.string().nullable(),settings:SY.record(SY.string(),SY.unknown()).nullable(),createdAt:SY.string(),updatedAt:SY.string()}),jd0=s({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:SY.object({virtualMcpId:SY.string().describe("Virtual MCP ID"),pluginId:SY.string().describe("Plugin ID")}),outputSchema:SY.object({config:b84.nullable()}),handler:async(Z,X)=>{D0(X);let G=B0(X);await X.access.check();let{virtualMcpId:Y,pluginId:Q}=Z,$=await X.storage.connections.findById(Y);if(!$||$.organization_id!==G.id)return{config:null};if($.connection_type!=="VIRTUAL")return{config:null};let J=await X.storage.virtualMcpPluginConfigs.get(Y,Q);if(!J)return{config:null};return{config:{id:J.id,virtualMcpId:J.virtualMcpId,pluginId:J.pluginId,connectionId:J.connectionId,settings:J.settings,createdAt:J.createdAt instanceof Date?J.createdAt.toISOString():J.createdAt,updatedAt:J.updatedAt instanceof Date?J.updatedAt.toISOString():J.updatedAt}}}})});import{z as C7}from"zod";var v84,Ad0;var w88=B(()=>{e0();lb();rZ();v84=C7.object({id:C7.string(),virtualMcpId:C7.string(),pluginId:C7.string(),connectionId:C7.string().nullable(),settings:C7.record(C7.string(),C7.unknown()).nullable(),createdAt:C7.string(),updatedAt:C7.string()}),Ad0=s({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:C7.object({virtualMcpId:C7.string().describe("Virtual MCP ID"),pluginId:C7.string().describe("Plugin ID"),connectionId:C7.string().nullable().optional().describe("MCP connection to bind"),settings:C7.record(C7.string(),C7.unknown()).nullable().optional().describe("Plugin-specific settings")}),outputSchema:C7.object({config:v84}),handler:async(Z,X)=>{D0(X);let G=B0(X);await X.access.check();let{virtualMcpId:Y,pluginId:Q,connectionId:$,settings:J}=Z,W=V1(X),K=await X.storage.connections.findById(Y);if(!K)throw Error(`Connection not found: ${Y}`);if(K.organization_id!==G.id)throw Error(`Connection not found: ${Y}`);if(K.connection_type!=="VIRTUAL")throw Error(`Connection not found: ${Y}`);let N=$?await X.storage.connections.findById($):null;if($&&N&&N.organization_id!==G.id)throw Error(`Connection not found: ${$}`);if($&&K.organization_id&&!N&&v$()&&E10($,K.organization_id)){if(!W)throw Error("User ID required to create dev-assets connection");let U=cb(K.organization_id,kZ());await X.storage.connections.create({...U,organization_id:K.organization_id,created_by:W})}else if($&&!N)throw Error(`Connection not found: ${$}`);let F=await X.storage.virtualMcpPluginConfigs.upsert(Y,Q,{connectionId:$,settings:J});return{config:{id:F.id,virtualMcpId:F.virtualMcpId,pluginId:F.pluginId,connectionId:F.connectionId,settings:F.settings,createdAt:F.createdAt instanceof Date?F.createdAt.toISOString():F.createdAt,updatedAt:F.updatedAt instanceof Date?F.updatedAt.toISOString():F.updatedAt}}}})});import{z as yG}from"zod";var x84,Pd0;var O88=B(()=>{e0();MH();x84=yG.object({connectionId:yG.string(),toolName:yG.string(),label:yG.string(),icon:yG.string().nullable().optional()}),Pd0=s({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:yG.object({virtualMcpId:yG.string().describe("Virtual MCP ID"),pinnedViews:yG.array(x84).describe("Pinned views to set for the virtual MCP sidebar"),layout:yG.object({defaultMainView:yG.object({type:yG.string(),id:yG.string().optional(),toolName:yG.string().optional()}).nullable().optional(),chatDefaultOpen:yG.boolean().nullable().optional()}).optional()}),outputSchema:yG.object({item:vX.nullable()}),handler:async(Z,X)=>{D0(X);let G=B0(X);await X.access.check();let{virtualMcpId:Y,pinnedViews:Q,layout:$}=Z,J=V1(X),W=await X.storage.virtualMcps.findById(Y);if(!W)throw Error(`Virtual MCP not found: ${Y}`);if(W.organization_id!==G.id)throw Error(`Virtual MCP not found: ${Y}`);let K=W.metadata?.ui??{},N={...K,pinnedViews:Q.length>0?Q:null,layout:$??K.layout??null};return{item:await X.storage.virtualMcps.update(Y,J??"system",{metadata:{...W.metadata,ui:N}})}}})});import{z as BF}from"zod";var _84,y84,Td0;var B88=B(()=>{e0();_84=BF.object({ids:BF.array(BF.string()).describe("Virtual MCP ids to look up")}),y84=BF.object({items:BF.array(BF.object({id:BF.string(),last_used_at:BF.string().optional(),last_used_by:BF.string().optional()}))}),Td0=s({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:_84,outputSchema:y84,handler:async(Z,X)=>{D0(X),B0(X),await X.access.check();let G=await X.storage.threads.findLastUsedByVirtualMcpIds(Z.ids);return{items:Z.ids.map((Y)=>({id:Y,last_used_at:G.get(Y)?.last_used_at,last_used_by:G.get(Y)?.last_used_by}))}}})});var D88=B(()=>{$88();J88();W88();K88();U88();H88();w88();O88();B88()});import{z as N9}from"zod";var Rd0;var L88=B(()=>{w9();e0();Rd0=s({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:N9.object({id:N9.string().describe("Log ID to fetch")}),outputSchema:N9.object({log:N9.object({id:N9.string().optional(),organizationId:N9.string(),connectionId:N9.string(),toolName:N9.string(),input:N9.record(N9.string(),N9.unknown()),output:N9.record(N9.string(),N9.unknown()),isError:N9.boolean(),errorMessage:N9.string().nullish(),durationMs:N9.number(),timestamp:N9.string(),userId:N9.string().nullish(),requestId:N9.string(),userAgent:N9.string().nullish(),virtualMcpId:N9.string().nullish(),properties:N9.record(N9.string(),N9.string()).nullish()}).nullable().describe("The monitoring log, or null if not found")}),handler:async(Z,X)=>{await X.access.check(),await G3();let G=B0(X),Y=await X.storage.monitoring.getById(G.id,Z.id);if(!Y)return{log:null};return{log:{...Y,timestamp:Y.timestamp instanceof Date?Y.timestamp.toISOString():Y.timestamp}}}})});import{z as B6}from"zod";var h84,Id0;var E88=B(()=>{w9();e0();h84=B6.object({id:B6.string().optional().describe("Unique log identifier"),organizationId:B6.string().describe("Organization ID"),connectionId:B6.string().describe("Connection ID"),toolName:B6.string().describe("Name of the tool that was called"),isError:B6.boolean().describe("Whether the call resulted in an error"),errorMessage:B6.string().nullish().describe("Error message if applicable"),durationMs:B6.number().describe("Call duration in milliseconds"),timestamp:B6.string().describe("ISO 8601 timestamp of the call"),userId:B6.string().nullish().describe("User who triggered the call"),requestId:B6.string().describe("Unique request identifier"),userAgent:B6.string().nullish().describe("Client identifier (x-studio-client header)"),virtualMcpId:B6.string().nullish().describe("Virtual MCP (Agent) ID if routed through an agent"),properties:B6.record(B6.string(),B6.string()).nullish().describe("Custom key-value metadata attached to the log")}),Id0=s({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:B6.object({connectionId:B6.string().optional().describe("Filter by connection ID"),excludeConnectionIds:B6.array(B6.string()).optional().describe("Exclude logs from these connection IDs (e.g. system connections)"),virtualMcpId:B6.string().optional().describe("Filter by Virtual MCP (Agent) ID"),toolName:B6.string().optional().describe("Filter by tool name"),isError:B6.boolean().optional().describe("Filter by error status"),startDate:B6.string().datetime().optional().describe("Filter by start date (ISO 8601 datetime string)"),endDate:B6.string().datetime().optional().describe("Filter by end date (ISO 8601 datetime string)"),limit:B6.number().default(20).describe("Maximum number of results"),offset:B6.number().default(0).describe("Offset for pagination"),properties:B6.record(B6.string(),B6.string()).optional().describe("Filter by exact property key=value matches"),propertyKeys:B6.array(B6.string()).optional().describe("Filter by logs that have these property keys"),propertyPatterns:B6.record(B6.string(),B6.string()).optional().describe("Filter by property value patterns (SQL LIKE, use % as wildcard)"),propertyInValues:B6.record(B6.string(),B6.string()).optional().describe("Filter by exact match within comma-separated values (e.g., user_tags in 'Engineering')")}),outputSchema:B6.object({logs:B6.array(h84).describe("Array of monitoring logs"),total:B6.number().describe("Total number of logs matching filters"),offset:B6.number().describe("Current offset for pagination"),limit:B6.number().describe("Current limit for pagination")}),handler:async(Z,X)=>{await G3();let G=B0(X),Q=Z.properties||Z.propertyKeys||Z.propertyPatterns||Z.propertyInValues?{properties:Z.properties,propertyKeys:Z.propertyKeys,propertyPatterns:Z.propertyPatterns,propertyInValues:Z.propertyInValues}:void 0,$={organizationId:G.id,connectionId:Z.connectionId,excludeConnectionIds:Z.excludeConnectionIds,virtualMcpId:Z.virtualMcpId,toolName:Z.toolName,isError:Z.isError,startDate:Z.startDate?new Date(Z.startDate):void 0,endDate:Z.endDate?new Date(Z.endDate):void 0,limit:Z.limit,offset:Z.offset,propertyFilters:Q},J=await X.storage.monitoring.query($);return{logs:J.logs.map(({input:W,output:K,...N})=>({...N,timestamp:N.timestamp instanceof Date?N.timestamp.toISOString():N.timestamp})),total:J.total,offset:Z.offset,limit:Z.limit}}})});import{z as F8}from"zod";var qd0;var z88=B(()=>{w9();e0();qd0=s({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:F8.object({startDate:F8.string().datetime().optional().describe("Filter by start date (ISO 8601 datetime string)"),endDate:F8.string().datetime().optional().describe("Filter by end date (ISO 8601 datetime string)"),interval:F8.string().regex(/^\d+[mhd]$/).optional().describe("Bucket interval for timeseries data (e.g. 1m, 5m, 2h, 1d). When provided, returns timeseries array."),connectionIds:F8.array(F8.string()).max(100).optional().describe("Filter by specific connection IDs (max 100)"),excludeConnectionIds:F8.array(F8.string()).max(100).optional().describe("Exclude specific connection IDs (max 100)"),toolNames:F8.array(F8.string()).max(100).optional().describe("Filter by specific tool names (max 100)"),status:F8.enum(["success","error"]).optional().describe("Filter metrics by execution status"),topN:F8.number().int().min(1).max(20).optional().describe("When provided with interval, also return top tools and their timeseries"),userIds:F8.array(F8.string()).max(100).optional().describe("Filter LLM usage by user IDs (only applied when llmUsage is true)"),llmUsage:F8.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:F8.object({totalCalls:F8.number().describe("Total number of tool calls"),errorRate:F8.number().optional().describe("Error rate as a decimal (0 to 1)"),avgDurationMs:F8.number().describe("Average call duration in milliseconds"),errorRatePercent:F8.string().optional().describe("Error rate as a percentage string"),totalErrors:F8.number().optional().describe("Total number of errors"),p50DurationMs:F8.number().optional().describe("50th percentile duration in milliseconds"),p95DurationMs:F8.number().optional().describe("95th percentile duration in milliseconds"),connectionBreakdown:F8.array(F8.object({connectionId:F8.string(),calls:F8.number(),errors:F8.number(),errorRate:F8.number(),avgDurationMs:F8.number()})).optional().describe("Per-connection metric breakdown"),totalInputTokens:F8.number().optional().describe("Total input tokens (LLM usage mode)"),totalOutputTokens:F8.number().optional().describe("Total output tokens (LLM usage mode)"),totalTokens:F8.number().optional().describe("Total tokens (LLM usage mode)"),totalCostUsd:F8.number().optional().describe("Total USD cost (LLM usage mode; only non-zero for providers that report cost)"),topTools:F8.array(F8.object({toolName:F8.string(),connectionId:F8.string().nullable(),calls:F8.number(),inputTokens:F8.number().optional(),outputTokens:F8.number().optional(),costUsd:F8.number().optional()})).optional().describe("Top tools ranked by calls"),topToolsTimeseries:F8.array(F8.object({timestamp:F8.string(),toolName:F8.string(),calls:F8.number(),errors:F8.number(),avg:F8.number(),p95:F8.number()})).optional().describe("Per-tool metric timeseries for the top tools"),timeseries:F8.array(F8.object({timestamp:F8.string(),calls:F8.number(),errors:F8.number(),errorRate:F8.number(),avg:F8.number(),p50:F8.number(),p95:F8.number(),inputTokens:F8.number().optional(),outputTokens:F8.number().optional(),totalTokens:F8.number().optional(),costUsd:F8.number().optional()})).optional().describe("Timeseries data points bucketed by interval")}),handler:async(Z,X)=>{let G=B0(X);if(await X.access.check(),await G3(),Z.interval&&Z.llmUsage)return X.storage.monitoring.queryLlmUsageStats({organizationId:G.id,interval:Z.interval,connectionId:Z.connectionIds?.[0]??"decopilot",startDate:Z.startDate?new Date(Z.startDate):void 0,endDate:Z.endDate?new Date(Z.endDate):void 0,userIds:Z.userIds,topN:Z.topN});if(Z.interval){let Q=await X.storage.monitoring.queryMetricTimeseries({organizationId:G.id,interval:Z.interval,startDate:Z.startDate?new Date(Z.startDate):void 0,endDate:Z.endDate?new Date(Z.endDate):void 0,filters:{connectionIds:Z.connectionIds,excludeConnectionIds:Z.excludeConnectionIds,toolNames:Z.toolNames,status:Z.status}});if(!Z.topN)return Q;let $=await X.storage.monitoring.queryMetricTopToolsTimeseries({organizationId:G.id,interval:Z.interval,startDate:Z.startDate?new Date(Z.startDate):void 0,endDate:Z.endDate?new Date(Z.endDate):void 0,topN:Z.topN,filters:{connectionIds:Z.connectionIds,excludeConnectionIds:Z.excludeConnectionIds,toolNames:Z.toolNames,status:Z.status}});return{...Q,topTools:$.topTools,topToolsTimeseries:$.timeseries}}let Y=await X.storage.monitoring.getStats({organizationId:G.id,startDate:Z.startDate?new Date(Z.startDate):void 0,endDate:Z.endDate?new Date(Z.endDate):void 0});return{...Y,errorRatePercent:(Y.errorRate*100).toFixed(2)}}})});import{z as gG}from"zod";var Md0;var j88=B(()=>{w9();e0();Md0=s({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:gG.object({threadIds:gG.array(gG.string()).min(1).max(500).describe("Thread IDs to aggregate usage for (max 500)"),connectionId:gG.string().optional().describe("LLM connection ID (defaults to 'decopilot')"),startDate:gG.string().datetime().optional().describe("Filter by start date (ISO 8601 datetime string)"),endDate:gG.string().datetime().optional().describe("Filter by end date (ISO 8601 datetime string)")}),outputSchema:gG.object({items:gG.array(gG.object({threadId:gG.string(),calls:gG.number(),inputTokens:gG.number(),outputTokens:gG.number(),totalTokens:gG.number(),costUsd:gG.number()}))}),handler:async(Z,X)=>{let G=B0(X);return await X.access.check(),await G3(),{items:await X.storage.monitoring.queryThreadUsage({organizationId:G.id,connectionId:Z.connectionId??"decopilot",threadIds:Z.threadIds,startDate:Z.startDate?new Date(Z.startDate):void 0,endDate:Z.endDate?new Date(Z.endDate):void 0})}}})});var A88=B(()=>{L88();E88();z88();j88()});function kZ0(Z){return typeof Z==="string"&&c84.has(Z.trim().toLowerCase())}var c84;var kd0=B(()=>{c84=new Set([".well-known","_admin","api","auth","cli","commerce-onboarding","dbos-queue-depth","health","hosted-run-pending","login","mcp","metrics","oauth","oauth-proxy","onboarding","org","report","reset-password"])});import{z as xQ}from"zod";var Sd0;var P88=B(()=>{e0();kd0();Sd0=s({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:xQ.object({slug:xQ.string().min(1).max(50).regex(/^[a-z0-9-]+$/,"Slug must be lowercase alphanumeric with hyphens").refine((Z)=>!kZ0(Z),"Slug is reserved by Studio"),name:xQ.string().min(1).max(255),description:xQ.string().optional()}),outputSchema:xQ.object({id:xQ.string(),name:xQ.string(),slug:xQ.string(),logo:xQ.string().nullable().optional(),metadata:xQ.any().optional(),createdAt:xQ.string().datetime().describe("ISO 8601 timestamp"),members:xQ.array(xQ.any()).optional()}),handler:async(Z,X)=>{D0(X),await X.access.check();let G=V1(X);if(!G)throw Error("User ID required to create organization");let Y=await X.boundAuth.organization.create({name:Z.name,slug:Z.slug,metadata:Z.description?{description:Z.description}:void 0,userId:G});if(!Y)throw Error("Failed to create organization");return{...Y,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():Y.createdAt}}})});import{z as OJ}from"zod";var Vd0;var T88=B(()=>{e0();Vd0=s({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:OJ.object({userId:OJ.string().optional()}),outputSchema:OJ.object({organizations:OJ.array(OJ.object({id:OJ.string(),name:OJ.string(),slug:OJ.string(),logo:OJ.string().nullable().optional(),metadata:OJ.any().optional(),createdAt:OJ.string().datetime().describe("ISO 8601 timestamp")}))}),handler:async(Z,X)=>{D0(X),await X.access.check();let G=V1(X),Y=Z.userId||G;if(!Y)throw Error("User ID required to list organizations");return{organizations:(await X.boundAuth.organization.list(Y)).map(($)=>({...$,createdAt:$.createdAt instanceof Date?$.createdAt.toISOString():$.createdAt}))}}})});import{z as c3}from"zod";var Cd0;var R88=B(()=>{e0();Cd0=s({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:c3.object({}),outputSchema:c3.object({id:c3.string(),name:c3.string(),slug:c3.string(),logo:c3.string().nullable().optional(),metadata:c3.any().optional(),createdAt:c3.string().datetime().describe("ISO 8601 timestamp"),members:c3.array(c3.any()).optional(),invitations:c3.array(c3.any()).optional()}),handler:async(Z,X)=>{D0(X),await X.access.check();let G=X.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");let Y=await X.boundAuth.organization.get(G);if(!Y)throw Error("No active organization found");let Q=new Date,$=Y.invitations?.filter((J)=>new Date(J.expiresAt)>Q);return{...Y,invitations:$,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():Y.createdAt}}})});import{z as BJ}from"zod";var fd0;var I88=B(()=>{e0();fd0=s({name:"ORGANIZATION_UPDATE",description:"Update an organization's name or description.",annotations:{title:"Update Organization",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:BJ.object({id:BJ.string(),name:BJ.string().min(1).max(255).optional(),description:BJ.string().optional()}),outputSchema:BJ.object({id:BJ.string(),name:BJ.string(),slug:BJ.string(),logo:BJ.string().nullable().optional(),metadata:BJ.any().optional(),createdAt:BJ.string().datetime().describe("ISO 8601 timestamp")}),handler:async(Z,X)=>{D0(X),await X.access.check();let G={};if(Z.name)G.name=Z.name;if(Z.description)G.metadata={description:Z.description};let Y=await X.boundAuth.organization.update({organizationId:Z.id,data:G});if(!Y)throw Error("Failed to update organization");return{...Y,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():Y.createdAt}}})});import{z as zn}from"zod";var bd0;var q88=B(()=>{e0();bd0=s({name:"ORGANIZATION_DELETE",description:"Archive an organization (soft delete).",annotations:{title:"Delete Organization",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:zn.object({id:zn.string()}),outputSchema:zn.object({success:zn.boolean(),id:zn.string()}),handler:async(Z,X)=>{return D0(X),await X.access.check(),await X.boundAuth.organization.update({organizationId:Z.id,data:{metadata:{archived:!0,archivedAt:new Date().toISOString()}}}),{success:!0,id:Z.id}}})});import{z as j8}from"zod";var jn,An,DF,M88,aW,Pn,Tn,Rn,In,Cw;var _Q=B(()=>{jn=j8.object({title:j8.string(),url:j8.string(),icon:j8.string()}),An=j8.object({registries:j8.record(j8.string(),j8.object({enabled:j8.boolean()})).describe("Per-registry enabled/disabled state. Key is connection ID. Absent registries are treated as enabled."),blockedMcps:j8.array(j8.string()).describe("List of MCP app_name or app_id values to hide from the store.")}),DF=j8.object({keyId:j8.string(),modelId:j8.string(),title:j8.string().optional()}).nullable(),M88=j8.enum(["fast","smart","thinking","image","web_search","deep_research"]),aW=j8.enum(["fast","smart","thinking"]),Pn=j8.object({tiers:j8.object({fast:DF,smart:DF,thinking:DF,image:DF,web_search:DF,deep_research:DF})}),Tn=j8.object({tiers:j8.object({fast:DF.optional(),smart:DF.optional(),thinking:DF.optional()})}),Rn=j8.object({ids:j8.array(j8.string()).describe("Ordered list of custom virtual MCP agent ids to show on the home view.")}),In=j8.object({demo_mode:j8.boolean().optional().describe("Curated demo org: the commerce connect modal proceeds without a configured required data source."),reports_only:j8.boolean().optional().describe("Curated commerce (reports) look: hides agent navigation, the home Customize button, and the Settings/Automations tabs. Defaulted on for orgs created by commerce onboarding."),qa_agent_enabled:j8.boolean().optional().describe("Run the QA Agent on a task's pull request once it's In Review \u2014 it verifies the task actually solved the problem (exercises the feature, not just the diff)."),code_reviewer_enabled:j8.boolean().optional().describe("Run the Code Reviewer on a task's pull request once it's In Review \u2014 it reviews the code using the repo's stack-appropriate review skills."),auto_merge:j8.boolean().optional().describe("When every enabled reviewer (QA Agent / Code Reviewer) approves a task's pull request, merge it automatically instead of leaving the merge to a human."),sandbox_go_daemon:j8.boolean().optional().describe("Which sandbox daemon this org's new sandboxes run. Go is the default, so this is an OPT-OUT: set it to `false` to keep the org on the TypeScript daemon; unset (or `true`) means Go. Affects the NEXT sandbox only \u2014 live sandboxes drain on the binary they booted with. Ignored unless the deployment sets STUDIO_SANDBOX_GO_TEMPLATE_NAME (the global kill switch); SANDBOX_START's `daemonImpl` overrides it per sandbox in either direction.")}),Cw=j8.object({id:j8.string().describe("Brand context ID"),name:j8.string().describe("Company name"),domain:j8.string().describe("Company domain (e.g. example.com)"),overview:j8.string().describe("Company overview / description"),logo:j8.string().nullable().optional().describe("Logo URL"),favicon:j8.string().nullable().optional().describe("Favicon URL"),ogImage:j8.string().nullable().optional().describe("OG image URL"),fonts:j8.object({heading:j8.string().optional().describe("Font family for headings"),body:j8.string().optional().describe("Font family for body text"),code:j8.string().optional().describe("Font family for code / monospace")}).nullable().optional().describe("Font families by semantic role"),colors:j8.object({primary:j8.string().optional().describe("Primary brand color (hex)"),secondary:j8.string().optional().describe("Secondary brand color (hex)"),accent:j8.string().optional().describe("Accent / highlight color (hex)"),background:j8.string().optional().describe("Background color (hex)"),foreground:j8.string().optional().describe("Foreground / text color (hex)")}).nullable().optional().describe("Semantic color palette"),images:j8.array(j8.record(j8.string(),j8.unknown())).nullable().optional().describe("Brand images"),metadata:j8.record(j8.string(),j8.unknown()).nullable().optional().describe("Extra design tokens (typography, components, spacing, layout, tone, etc.)"),archivedAt:j8.string().nullable().optional().describe("Archive timestamp (null to unarchive)"),isDefault:j8.boolean().optional().describe("Whether this is the default brand for the organization")})});import{z as LF}from"zod";var vd0;var k88=B(()=>{e0();_Q();vd0=s({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:LF.object({}),outputSchema:LF.object({organizationId:LF.string(),sidebar_items:LF.array(jn).nullable().optional(),enabled_plugins:LF.array(LF.string()).nullable().optional(),registry_config:An.nullable().optional(),simple_mode:Pn.nullable().optional(),default_home_agents:Rn.nullable().optional(),flags:In.nullable().optional(),main_agent_id:LF.string().nullable().optional(),createdAt:LF.string().datetime().optional().describe("ISO 8601 timestamp"),updatedAt:LF.string().datetime().optional().describe("ISO 8601 timestamp")}),handler:async(Z,X)=>{D0(X),await X.access.check();let G=X.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");let Y=await X.storage.organizationSettings.get(G);if(!Y)return{organizationId:G};return{...Y,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():Y.createdAt,updatedAt:Y.updatedAt instanceof Date?Y.updatedAt.toISOString():Y.updatedAt}}})});import{z as VY}from"zod";var xd0;var S88=B(()=>{e0();_Q();xd0=s({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:VY.object({organizationId:VY.string(),sidebar_items:VY.array(jn).optional(),enabled_plugins:VY.array(VY.string()).optional(),registry_config:An.optional(),simple_mode:Pn.optional(),default_home_agents:Rn.optional(),flags:In.strict().optional().describe("Org boolean toggles. Shallow-merged into the stored flags: keys you pass win (explicit false persists), omitted keys keep their value."),main_agent_id:VY.string().nullable().optional().describe("Virtual MCP id the org lands on instead of the Super Agent. Pass null to clear.")}),outputSchema:VY.object({organizationId:VY.string(),sidebar_items:VY.array(jn).nullable().optional(),enabled_plugins:VY.array(VY.string()).nullable().optional(),registry_config:An.nullable().optional(),simple_mode:Pn.nullable().optional(),default_home_agents:Rn.nullable().optional(),flags:In.nullable().optional(),main_agent_id:VY.string().nullable().optional(),createdAt:VY.string().datetime().describe("ISO 8601 timestamp"),updatedAt:VY.string().datetime().describe("ISO 8601 timestamp")}),handler:async(Z,X)=>{if(D0(X),await X.access.check(),B0(X).id!==Z.organizationId)throw Error("Cannot update settings for a different organization");let Y=await X.storage.organizationSettings.upsert(Z.organizationId,{sidebar_items:Z.sidebar_items,enabled_plugins:Z.enabled_plugins,registry_config:Z.registry_config,simple_mode:Z.simple_mode,default_home_agents:Z.default_home_agents,flags:Z.flags,main_agent_id:Z.main_agent_id});return{...Y,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():Y.createdAt,updatedAt:Y.updatedAt instanceof Date?Y.updatedAt.toISOString():Y.updatedAt}}})});import{z as DJ}from"zod";var V88,_d0,yd0;var C88=B(()=>{e0();_Q();V88=Cw.extend({organizationId:DJ.string(),archivedAt:DJ.string().nullable().optional().describe("ISO 8601 timestamp"),createdAt:DJ.string().describe("ISO 8601 timestamp"),updatedAt:DJ.string().describe("ISO 8601 timestamp")}),_d0=s({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:DJ.object({includeArchived:DJ.boolean().optional().describe("Include archived brands in the list")}),outputSchema:DJ.object({items:DJ.array(V88)}),handler:async(Z,X)=>{D0(X),await X.access.check();let G=X.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");return{items:(await X.storage.brandContext.list(G,{includeArchived:Z.includeArchived})).map((Q)=>({...Q,archivedAt:Q.archivedAt instanceof Date?Q.archivedAt.toISOString():Q.archivedAt,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt,updatedAt:Q.updatedAt instanceof Date?Q.updatedAt.toISOString():Q.updatedAt}))}}}),yd0=s({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:DJ.object({id:DJ.string().describe("Brand context ID")}),outputSchema:V88.extend({organizationId:DJ.string()}),handler:async(Z,X)=>{D0(X),await X.access.check();let G=X.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");let Y=await X.storage.brandContext.get(Z.id,G);if(!Y)throw Error("Brand context not found");return{...Y,archivedAt:Y.archivedAt instanceof Date?Y.archivedAt.toISOString():Y.archivedAt,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():Y.createdAt,updatedAt:Y.updatedAt instanceof Date?Y.updatedAt.toISOString():Y.updatedAt}}})});import{z as oL}from"zod";var f88,gd0,hd0,ud0;var b88=B(()=>{e0();_Q();f88=Cw.extend({organizationId:oL.string(),createdAt:oL.string().describe("ISO 8601 timestamp"),updatedAt:oL.string().describe("ISO 8601 timestamp")}),gd0=s({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:Cw.omit({id:!0}),outputSchema:f88,handler:async(Z,X)=>{D0(X),await X.access.check();let G=X.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");let Y=await X.storage.brandContext.create(G,{name:Z.name,domain:Z.domain,overview:Z.overview,logo:Z.logo??null,favicon:Z.favicon??null,ogImage:Z.ogImage??null,fonts:Z.fonts??null,colors:Z.colors??null,images:Z.images??null,metadata:Z.metadata??null});return{...Y,archivedAt:Y.archivedAt instanceof Date?Y.archivedAt.toISOString():Y.archivedAt,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():Y.createdAt,updatedAt:Y.updatedAt instanceof Date?Y.updatedAt.toISOString():Y.updatedAt}}}),hd0=s({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:Cw.partial().required({id:!0}),outputSchema:f88,handler:async(Z,X)=>{D0(X),await X.access.check();let G=X.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");if(!await X.storage.brandContext.get(Z.id,G))throw Error("Brand context not found");let{id:Q,...$}=Z;if($.isDefault===!0)await X.storage.brandContext.setDefault(Q,G);let J=await X.storage.brandContext.update(Q,G,{name:$.name,domain:$.domain,overview:$.overview,logo:$.logo!==void 0?$.logo??null:void 0,favicon:$.favicon!==void 0?$.favicon??null:void 0,ogImage:$.ogImage!==void 0?$.ogImage??null:void 0,fonts:$.fonts!==void 0?$.fonts??null:void 0,colors:$.colors!==void 0?$.colors??null:void 0,images:$.images!==void 0?$.images??null:void 0,metadata:$.metadata!==void 0?$.metadata??null:void 0,archivedAt:$.archivedAt!==void 0?$.archivedAt??null:void 0,isDefault:$.isDefault===!1?!1:void 0});return{...J,archivedAt:J.archivedAt instanceof Date?J.archivedAt.toISOString():J.archivedAt,createdAt:J.createdAt instanceof Date?J.createdAt.toISOString():J.createdAt,updatedAt:J.updatedAt instanceof Date?J.updatedAt.toISOString():J.updatedAt}}}),ud0=s({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:oL.object({id:oL.string().describe("Brand context ID")}),outputSchema:oL.object({success:oL.boolean()}),handler:async(Z,X)=>{D0(X),await X.access.check();let G=X.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");if(!await X.storage.brandContext.get(Z.id,G))throw Error("Brand context not found");return await X.storage.brandContext.update(Z.id,G,{archivedAt:new Date().toISOString(),isDefault:!1}),{success:!0}}})});async function SZ0(Z,X,G){let Y=Z.trim();if(!Y.startsWith("http"))Y=`https://${Y}`;let Q=await fetch("https://api.firecrawl.dev/v1/scrape",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${X}`},body:JSON.stringify({url:Y,formats:["branding"]})});if(!Q.ok){let H=await Q.text().catch(()=>"");throw Error(`Firecrawl API error: ${Q.status} ${H.slice(0,200)}`)}let $=await Q.json();if(!$.success||!$.data?.branding)return null;let J=$.data.branding,W=$.data.metadata??{},K=m84(J,W);return{name:W.title?.split(/[|\u2013\u2014]|\s+-\s+/).map((H)=>H.trim()).filter(Boolean)?.slice().sort((H,w)=>H.length-w.length)[0]??W.ogSiteName??G??Z,domain:Z,overview:W.description??"",logo:K.logo,favicon:K.favicon,ogImage:K.ogImage,fonts:K.fonts,colors:K.colors,images:null,metadata:Object.keys(K.metadata).length>0?K.metadata:null}}function m84(Z,X){let G=Z.images??{},Y=Z.colors??{},Q={};for(let[F,U]of Object.entries(Y))if(typeof U==="string"&&U&&l84.has(F))Q[F]=U;let $={},W=(Z.typography??{}).fontFamilies??{};for(let[F,U]of Object.entries(W))if(typeof U==="string"&&U){let H=d84[F.toLowerCase()];if(H&&!$[H])$[H]=U}let K=Z.fonts;if(Array.isArray(K))for(let F of K){let U=F.family;if(typeof U==="string"&&U&&!$.body)$.body=U}let N={};for(let F of["typography","components","spacing","layout","animations","icons","tone","personality","colorScheme"])if(Z[F]!==void 0)N[F]=Z[F];return{logo:G.logo??null,favicon:G.favicon??null,ogImage:G.ogImage??X.ogImage??null,fonts:Object.keys($).length>0?$:null,colors:Object.keys(Q).length>0?Q:null,metadata:N}}var l84,d84;var cd0=B(()=>{l84=new Set(["primary","secondary","accent","background","foreground"]),d84={heading:"heading",headings:"heading",head:"heading",title:"heading",body:"body",primary:"body",text:"body",code:"code",monospace:"code",mono:"code"}});import{z as VZ0}from"zod";var i84,ld0;var v88=B(()=>{e0();cd0();_Q();i84=Cw.pick({id:!0,name:!0,domain:!0,overview:!0,logo:!0,favicon:!0,ogImage:!0,fonts:!0,colors:!0}).extend({success:VZ0.boolean()}),ld0=s({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:VZ0.object({domain:VZ0.string().describe("Website domain to extract brand from"),brandId:VZ0.string().optional().describe("Existing brand context ID to update (creates new if omitted)")}),outputSchema:i84,modelSummary:(Z)=>Z.success?`Brand saved (id=${Z.id}, name=${Z.name}, domain=${Z.domain}). The UI rendered the logo, colors, fonts, and overview.`:"Brand extraction failed.",handler:async(Z,X)=>{D0(X),await X.access.check();let G=X.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");let Y=X.firecrawlApiKey;if(!Y)throw Error("FIRECRAWL_API_KEY is not configured. Set the environment variable to enable brand extraction.");let Q=await SZ0(Z.domain,Y,Z.domain);if(!Q)throw Error("Firecrawl did not return branding data for this URL");let $={name:Q.name,domain:Q.domain,overview:Q.overview,logo:Q.logo,favicon:Q.favicon,ogImage:Q.ogImage,fonts:Q.fonts,colors:Q.colors,images:Q.images,metadata:Q.metadata},J=Z.brandId?await(async()=>{if(!await X.storage.brandContext.get(Z.brandId,G))throw Error("Brand context not found");return X.storage.brandContext.update(Z.brandId,G,$)})():await X.storage.brandContext.create(G,$);return{id:J.id,name:J.name,domain:J.domain,overview:J.overview,logo:J.logo,favicon:J.favicon,ogImage:J.ogImage,fonts:J.fonts,colors:J.colors,success:!0}}})});function x88(Z){let X=Z.metadata??{};return{id:Z.id,name:Z.name,domain:Z.domain||void 0,colors:Z.colors??void 0,fonts:Z.fonts??void 0,assets:Z.logo||Z.favicon||Z.ogImage?{logo:Z.logo??void 0,favicon:Z.favicon??void 0,ogImage:Z.ogImage??void 0}:void 0,overview:Z.overview||void 0,tagline:typeof X.tagline==="string"?X.tagline:void 0,tone:typeof X.tone==="string"?X.tone:void 0,metadata:(()=>{let G=Object.fromEntries(Object.entries(X).filter(([Y])=>Y!=="tagline"&&Y!=="tone"));return Object.keys(G).length>0?G:void 0})()}}var dd0,md0;var _88=B(()=>{Gd0();e0();dd0=s({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:LZ0,outputSchema:Hn,handler:async(Z,X)=>{D0(X),await X.access.check();let G=X.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");let Y=Z.id?await X.storage.brandContext.get(Z.id,G):await X.storage.brandContext.getDefault(G);if(!Y)throw Error(Z.id?"Brand not found":"No default brand configured");return x88(Y)}}),md0=s({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:EZ0,outputSchema:zZ0,handler:async(Z,X)=>{D0(X),await X.access.check();let G=X.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");return{items:(await X.storage.brandContext.list(G)).map(x88)}}})});import{resolveTxt as n84}from"dns/promises";function id0(Z){return`${p84}.${Z.toLowerCase()}`}function y88(){return`deco-verify-${crypto.randomUUID().replace(/-/g,"")}`}async function g88(Z,X,G=n84){if(!X)return!1;try{return(await G(id0(Z))).some((Q)=>Q.join("").trim()===X)}catch{return!1}}var p84="_deco-verify";var h88=()=>{};import{z as A9}from"zod";function fw(Z){let X=Z.verificationStatus==="pending"&&Boolean(Z.verificationToken);return{id:Z.id,domain:Z.domain,joinMode:Z.joinMode,verificationStatus:Z.verificationStatus,verificationMethod:Z.verificationMethod,verifiedAt:Z.verifiedAt?new Date(Z.verifiedAt).toISOString():null,recordName:X?id0(Z.domain):null,recordValue:X?Z.verificationToken:null}}function o84(Z){let X=Z.toLowerCase().trim();if(!t84.test(X))throw Error(`Invalid domain format: "${X}". Must be a valid domain like "acme.com"`);if(LJ.has(X))throw Error(`Cannot claim generic email domain "${X}". Only corporate domains are allowed.`);return X}var t84,nd0,CZ0,pd0,td0,od0,rd0,ad0;var u88=B(()=>{vQ();h88();e0();t84=/^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)+$/,nd0=A9.enum(["off","auto","request"]),CZ0=A9.object({id:A9.string(),domain:A9.string(),joinMode:nd0,verificationStatus:A9.enum(["pending","verified"]),verificationMethod:A9.enum(["email","dns"]).nullable(),verifiedAt:A9.string().nullable(),recordName:A9.string().nullable(),recordValue:A9.string().nullable()});pd0=s({name:"ORGANIZATION_DOMAIN_LIST",description:"List the email domains claimed by an organization.",annotations:{title:"List Organization Domains",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:A9.object({}),outputSchema:A9.object({domains:A9.array(CZ0)}),handler:async(Z,X)=>{D0(X),await X.access.check();let G=B0(X);return{domains:(await X.storage.organizationDomains.listByOrganizationId(G.id)).map(fw)}}}),td0=s({name:"ORGANIZATION_DOMAIN_ADD",description:"Claim an email domain for an organization. If the caller's verified email matches the domain it is trusted immediately; otherwise it requires DNS verification.",annotations:{title:"Add Organization Domain",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:A9.object({domain:A9.string().min(1).max(255).describe("Domain to claim, e.g. acme.com"),joinMode:nd0.optional().describe("Initial join mode (only applied when the domain is trusted immediately via email match).")}),outputSchema:CZ0,handler:async(Z,X)=>{D0(X),await X.access.check();let G=B0(X),Y=o84(Z.domain),$=X.auth.user?.email?.split("@")[1]?.toLowerCase(),J=Boolean(X.auth.user?.emailVerified)&&$===Y,W=await X.storage.organizationDomains.getByOrgAndDomain(G.id,Y);if(W){if(W.verificationStatus!=="verified"&&J){let N=await X.storage.organizationDomains.markVerified(W.id,"email");return fw(N)}return fw(W)}let K=J?await X.storage.organizationDomains.add(G.id,Y,{joinMode:Z.joinMode??"off",verificationStatus:"verified",verificationMethod:"email"}):await X.storage.organizationDomains.add(G.id,Y,{joinMode:"off",verificationStatus:"pending",verificationToken:y88()});return fw(K)}}),od0=s({name:"ORGANIZATION_DOMAIN_UPDATE",description:"Set the join mode for a claimed domain. Discoverable modes (auto/request) require the domain to be verified.",annotations:{title:"Update Organization Domain",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:A9.object({id:A9.string(),joinMode:nd0}),outputSchema:CZ0,handler:async(Z,X)=>{D0(X),await X.access.check();let G=B0(X),Y=await X.storage.organizationDomains.getById(Z.id);if(!Y||Y.organizationId!==G.id)throw Error("Domain not found");if(Z.joinMode!=="off"&&Y.verificationStatus!=="verified")throw Error("Verify the domain before enabling auto-join or requests.");let Q=await X.storage.organizationDomains.updateJoinMode(Z.id,Z.joinMode);return fw(Q)}}),rd0=s({name:"ORGANIZATION_DOMAIN_VERIFY",description:"Check the DNS TXT record for a pending domain and mark it verified if present.",annotations:{title:"Verify Organization Domain",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:A9.object({id:A9.string()}),outputSchema:A9.object({verified:A9.boolean(),domain:CZ0}),handler:async(Z,X)=>{D0(X),await X.access.check();let G=B0(X),Y=await X.storage.organizationDomains.getById(Z.id);if(!Y||Y.organizationId!==G.id)throw Error("Domain not found");if(Y.verificationStatus==="verified")return{verified:!0,domain:fw(Y)};if(!Y.verificationToken)throw Error("Domain has no pending DNS verification.");if(!await g88(Y.domain,Y.verificationToken))return{verified:!1,domain:fw(Y)};let $=await X.storage.organizationDomains.markVerified(Z.id,"dns");return{verified:!0,domain:fw($)}}}),ad0=s({name:"ORGANIZATION_DOMAIN_REMOVE",description:"Remove a claimed domain from an organization.",annotations:{title:"Remove Organization Domain",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:A9.object({id:A9.string()}),outputSchema:A9.object({success:A9.boolean()}),handler:async(Z,X)=>{D0(X),await X.access.check();let G=B0(X),Y=await X.storage.organizationDomains.getById(Z.id);if(!Y||Y.organizationId!==G.id)throw Error("Domain not found");return await X.storage.organizationDomains.removeById(Z.id),{success:!0}}})});function bw(Z){return(Z instanceof Error?Z.message.toLowerCase():"").includes("already a member")}import{z as DZ}from"zod";var r84,sd0,ed0,Zm0;var c88=B(()=>{e0();q5();r84=DZ.object({id:DZ.string(),userId:DZ.string(),status:DZ.enum(["pending","approved","denied"]),createdAt:DZ.string(),user:DZ.object({id:DZ.string(),name:DZ.string(),email:DZ.string(),image:DZ.string().nullable()}).nullable()}),sd0=s({name:"ORGANIZATION_JOIN_REQUEST_LIST",description:"List pending requests to join the organization.",annotations:{title:"List Join Requests",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:DZ.object({}),outputSchema:DZ.object({requests:DZ.array(r84)}),handler:async(Z,X)=>{D0(X),await X.access.check();let G=B0(X);return{requests:(await X.storage.organizationJoinRequests.listPendingWithUser(G.id)).map((Q)=>({id:Q.id,userId:Q.userId,status:Q.status,createdAt:new Date(Q.createdAt).toISOString(),user:Q.user}))}}}),ed0=s({name:"ORGANIZATION_JOIN_REQUEST_APPROVE",description:"Approve a pending join request, adding the user as a member.",annotations:{title:"Approve Join Request",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:DZ.object({requestId:DZ.string()}),outputSchema:DZ.object({success:DZ.boolean()}),handler:async(Z,X)=>{D0(X),await X.access.check();let G=B0(X),Y=await X.storage.organizationJoinRequests.getById(Z.requestId);if(!Y||Y.organizationId!==G.id)throw Error("Join request not found");if(Y.status!=="pending")throw Error("Join request has already been decided");let Q=V1(X);if(!await X.storage.organizationJoinRequests.decide(Y.id,"approved",Q??Y.userId))return{success:!0};try{await X.boundAuth.organization.addMember({organizationId:G.id,userId:Y.userId,role:["user"]})}catch(J){if(!bw(J))throw J}if(Q)i1.capture({distinctId:Q,event:"organization_join_request_approved",groups:{organization:G.id},properties:{organization_id:G.id,user_id:Y.userId}});return{success:!0}}}),Zm0=s({name:"ORGANIZATION_JOIN_REQUEST_DENY",description:"Deny a pending join request.",annotations:{title:"Deny Join Request",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:DZ.object({requestId:DZ.string()}),outputSchema:DZ.object({success:DZ.boolean()}),handler:async(Z,X)=>{D0(X),await X.access.check();let G=B0(X),Y=await X.storage.organizationJoinRequests.getById(Z.requestId);if(!Y||Y.organizationId!==G.id)throw Error("Join request not found");if(Y.status!=="pending")throw Error("Join request has already been decided");let Q=V1(X);if(await X.storage.organizationJoinRequests.decide(Y.id,"denied",Q??Y.userId)&&Q)i1.capture({distinctId:Q,event:"organization_join_request_denied",groups:{organization:G.id},properties:{organization_id:G.id,user_id:Y.userId}});return{success:!0}}})});import{z as CY}from"zod";var Xm0;var l88=B(()=>{q5();e0();M3();Xm0=s({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:CY.object({organizationId:CY.string().optional(),userId:CY.string(),role:CY.array(CY.string())}),outputSchema:CY.object({id:CY.string(),organizationId:CY.string(),userId:CY.string(),role:CY.union([CY.string(),CY.array(CY.string())]),createdAt:CY.string().datetime().describe("ISO 8601 timestamp")}),handler:async(Z,X)=>{D0(X),await X.access.check();let G=Z.organizationId||X.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");if(G!==X.organization?.id)throw Error("Organization ID does not match authenticated organization");let Y=await X.db.selectFrom("member").select(["role"]).where("userId","=",V1(X)??"").where("organizationId","=",G).executeTakeFirst();if(!w50(Y?.role,Z.role))throw Error(`Insufficient privileges to assign role "${Z.role.join(",")}"`);let Q=await X.boundAuth.organization.addMember({organizationId:G,userId:Z.userId,role:Z.role});if(!Q)throw Error("Failed to add member");let $=V1(X);if($)i1.capture({distinctId:$,event:"organization_member_added",groups:{organization:G},properties:{organization_id:G,added_user_id:Z.userId,role:Z.role}});return{...Q,role:Q.role,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt}}})});import{z as __}from"zod";var Gm0;var d88=B(()=>{q5();e0();Gm0=s({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:__.object({organizationId:__.string().optional(),memberIdOrEmail:__.string()}),outputSchema:__.object({success:__.boolean(),memberIdOrEmail:__.string()}),handler:async(Z,X)=>{D0(X),await X.access.check();let G=Z.organizationId||X.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");if(G!==X.organization?.id)throw Error("Organization ID does not match authenticated organization");let Y=await X.boundAuth.organization.removeMember({organizationId:G,memberIdOrEmail:Z.memberIdOrEmail});X.invalidateMemberRole?.(Y.member.userId,G);let Q=V1(X);if(Q)i1.capture({distinctId:Q,event:"organization_member_removed",groups:{organization:G},properties:{organization_id:G,member_id_or_email:Z.memberIdOrEmail}});return{success:!0,memberIdOrEmail:Z.memberIdOrEmail}}})});import{z as ZG}from"zod";var Ym0;var m88=B(()=>{e0();Ym0=s({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:ZG.object({limit:ZG.number().optional(),offset:ZG.number().optional()}),outputSchema:ZG.object({members:ZG.array(ZG.object({id:ZG.string(),organizationId:ZG.string(),userId:ZG.string(),role:ZG.string(),createdAt:ZG.string().datetime().describe("ISO 8601 timestamp"),user:ZG.object({id:ZG.string(),name:ZG.string(),email:ZG.string(),image:ZG.string().optional()}).optional()}))}),handler:async(Z,X)=>{D0(X),await X.access.check();let G=X.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");let Y=await X.boundAuth.organization.listMembers({organizationId:G,limit:Z.limit,offset:Z.offset});return{members:(Array.isArray(Y)?Y:[]).map(($)=>({...$,createdAt:$.createdAt instanceof Date?$.createdAt.toISOString():$.createdAt}))}}})});import{z as f7}from"zod";var Qm0;var i88=B(()=>{q5();e0();M3();Qm0=s({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:f7.object({organizationId:f7.string().optional(),memberId:f7.string(),role:f7.array(f7.string())}),outputSchema:f7.object({id:f7.string(),organizationId:f7.string(),userId:f7.string(),role:f7.union([f7.string(),f7.array(f7.string())]),createdAt:f7.string().datetime().describe("ISO 8601 timestamp"),user:f7.object({email:f7.string(),name:f7.string(),image:f7.string().optional()})}),handler:async(Z,X)=>{D0(X),await X.access.check();let G=Z.organizationId||X.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");let Y=await X.db.selectFrom("member").select(["role"]).where("userId","=",V1(X)??"").where("organizationId","=",G).executeTakeFirst();if(!w50(Y?.role,Z.role))throw Error(`Insufficient privileges to assign role "${Z.role.join(",")}"`);let Q=await X.boundAuth.organization.updateMemberRole({organizationId:G,memberId:Z.memberId,role:Z.role});if(!Q)throw Error("Failed to update member role");X.invalidateMemberRole?.(Q.userId,G);let $=V1(X);if($)i1.capture({distinctId:$,event:"organization_member_role_updated",groups:{organization:G},properties:{organization_id:G,member_id:Z.memberId,target_user_id:Q.userId,new_role:Array.isArray(Z.role)?Z.role.join(","):Z.role}});return{...Q,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt}}})});async function n88(){if(qn&&Date.now()-qn.fetchedAt<600000)return qn.rate;try{let X=await(await fetch("https://economia.awesomeapi.com.br/json/last/USD-BRL",{signal:AbortSignal.timeout(5000)})).json(),G=parseFloat(X.USDBRL?.bid??"");if(Number.isNaN(G)||G<=0)throw Error("Invalid rate");return qn={rate:G,fetchedAt:Date.now()},G}catch{return qn?.rate??5.5}}function p88(Z,X,G){if(X==="brl")return Math.round(Z/G);return Z}var qn=null;function $m0(Z,X="",G=new URLSearchParams){for(let[Y,Q]of Object.entries(Z)){if(Q===void 0||Q===null)continue;let $=X?`${X}[${Y}]`:Y;if(Array.isArray(Q))Q.forEach((J,W)=>{if(typeof J==="object"&&J!==null)$m0(J,`${$}[${W}]`,G);else G.append(`${$}[${W}]`,String(J))});else if(typeof Q==="object")$m0(Q,$,G);else G.append($,String(Q))}return G}async function vw(Z,X){let G=$1().stripeSecretKey;if(!G)throw new fY(503,"billing is not configured");let Y=X?.params?$m0(X.params).toString():void 0,Q=await fetch(`${a84}${Z}`,{method:X?.method??(Y?"POST":"GET"),headers:{Authorization:`Bearer ${G}`,...Y&&{"Content-Type":"application/x-www-form-urlencoded"}},body:Y,signal:AbortSignal.timeout(s84)}),$=await Q.json().catch(()=>({}));if(!Q.ok){let J=$.error?.message??`HTTP ${Q.status}`;throw new fY(Q.status,J)}return $}async function t88(Z){let X=$1().stripeSeatPriceId;if(!X)throw new fY(503,"billing is not configured");let G=await vw("/checkout/sessions",{params:{mode:"subscription",line_items:[{price:X,quantity:Z.quantity}],success_url:Z.successUrl,cancel_url:Z.cancelUrl,metadata:{orgId:Z.organizationId},subscription_data:{metadata:{orgId:Z.organizationId}}}});if(!G.url)throw new fY(500,"checkout session lacks url");return{url:G.url}}async function Jm0(Z){let G=(await vw(`/subscriptions/${encodeURIComponent(Z)}`)).items?.data??[],Y=$1().stripeSeatPriceId,Q=Y?G.find(($)=>$.price?.id===Y):G.length===1?G[0]:void 0;if(!Q)throw new fY(500,"subscription has no seat item");return{itemId:Q.id,quantity:Q.quantity??0}}async function o88(Z){let{itemId:X}=await Jm0(Z.subscriptionId),G=await vw("/invoices/create_preview",{params:{subscription:Z.subscriptionId,subscription_details:{items:[{id:X,quantity:Z.quantity}],proration_behavior:"always_invoice"}}});return{amountDueCents:G.amount_due??0,currency:G.currency??"usd"}}function e84(Z,X){return Math.round(Z*(1+X/100))}async function r88(Z){let X=e84(Z.amountCents,Z.feePercent),G=p88(Z.amountCents,Z.currency,await n88()),Y=Z.currency==="brl"?`Studio AI credits (R$ ${(Z.amountCents/100).toFixed(2)})`:`Studio AI credits ($${(Z.amountCents/100).toFixed(2)})`,Q=await vw("/checkout/sessions",{params:{mode:"payment",...Z.customerId&&{customer:Z.customerId},line_items:[{quantity:1,price_data:{currency:Z.currency,unit_amount:X,product_data:{name:Y}}}],success_url:Z.successUrl,cancel_url:Z.cancelUrl,metadata:{kind:"topup",orgId:Z.organizationId,creditCents:G}}});if(!Q.url)throw new fY(500,"checkout session lacks url");return{url:Q.url}}async function a88(Z){let X=await vw("/billing_portal/sessions",{params:{customer:Z.customerId,return_url:Z.returnUrl}});if(!X.url)throw new fY(500,"portal session lacks url");return{url:X.url}}async function s88(Z){let{itemId:X}=await Jm0(Z.subscriptionId);await vw(`/subscriptions/${encodeURIComponent(Z.subscriptionId)}`,{params:{items:[{id:X,quantity:Z.quantity}],proration_behavior:"always_invoice",payment_behavior:"pending_if_incomplete"}})}async function e88(Z){await vw(`/subscriptions/${encodeURIComponent(Z)}`,{method:"DELETE"})}async function Z68(Z){if(Z.targetQuantity<1)return!1;let{itemId:X,quantity:G}=await Jm0(Z.subscriptionId);if(G===Z.targetQuantity)return!1;return await vw(`/subscriptions/${encodeURIComponent(Z.subscriptionId)}`,{params:{items:[{id:X,quantity:Z.targetQuantity}],proration_behavior:"always_invoice",payment_behavior:"pending_if_incomplete"}}),!0}var a84="https://api.stripe.com/v1",fY,s84=15000;var y_=B(()=>{b8();fY=class fY extends Error{status;constructor(Z,X){super(`Stripe API ${Z}: ${X}`);this.status=Z;this.name="StripeApiError"}}});import{z as LZ}from"zod";var Z64,Wm0,Km0;var X68=B(()=>{y_();ub();e0();kb();Z64=LZ.object({legacy:LZ.boolean(),billingMode:LZ.string(),status:LZ.string(),includedReportUrl:LZ.string().nullable()}),Wm0=s({name:"ORGANIZATION_SEATS_GET",description:"Get the organization's billing identity and which members hold paid seats.",annotations:{title:"Get Organization Seats",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:LZ.object({}),outputSchema:LZ.object({billing:Z64.nullable(),paidSeatUserIds:LZ.array(LZ.string())}),handler:async(Z,X)=>{D0(X),await X.access.check();let G=X.organization?.id;if(!G)throw Error("Organization context required");let[Y,Q]=await Promise.all([X.storage.organizationBilling.getBilling(G),X.storage.organizationBilling.listPaidSeatUserIds(G)]);return{billing:Y?{legacy:Y.legacy,billingMode:Y.billingMode,status:Y.status,includedReportUrl:Y.includedReportUrl}:null,paidSeatUserIds:Q}}}),Km0=s({name:"ORGANIZATION_SEATS_SET",description:"Set members' seats (paid/free). Invoiced organizations apply directly; self-serve organizations with an active subscription also charge the prorated difference on the saved card (preview it with ORGANIZATION_SEATS_PREVIEW first).",annotations:{title:"Set Organization Seats",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:LZ.object({seats:LZ.array(LZ.object({userId:LZ.string().min(1),seat:LZ.enum(["paid","free"])})).min(1).max(200)}),outputSchema:LZ.object({applied:LZ.array(LZ.object({userId:LZ.string(),seat:LZ.enum(["paid","free"])})),paidSeatCount:LZ.number(),benefitsSyncQueued:LZ.boolean()}),handler:async(Z,X)=>{D0(X),await X.access.check();let G=X.organization?.id;if(!G)throw Error("Organization context required");let Y=V1(X);if(!Y)throw Error("User ID required");let Q=await X.storage.organizationBilling.getBilling(G);if(!Q||Q.legacy)throw Error("This organization is on the legacy plan \u2014 seats do not apply.");let $=hb(Q)?Q.stripeSubscriptionId:null,J;try{J=await X.storage.organizationBilling.setSeats(G,Z.seats,Y,{markBenefitsPending:KD()})}catch(K){if(K instanceof y00)throw Error(K.message);throw K}if($)try{await s88({subscriptionId:$,quantity:J.paidSeatCount})}catch(K){let N=K instanceof fY?K.message:"Stripe update failed";throw Error(`Seats saved, but updating the subscription failed: ${N}. Apply again to retry the charge.`)}let W=!1;if(J.benefitsReferenceId)try{await SN(G,J.benefitsReferenceId,"apply"),W=!0}catch(K){console.error("Failed to enqueue benefit sync (sweep covers):",K)}return{applied:J.applied,paidSeatCount:J.paidSeatCount,benefitsSyncQueued:W}}})});import{z as EF}from"zod";var Nm0,Fm0;var G68=B(()=>{y_();rZ();e0();Nm0=s({name:"ORGANIZATION_BILLING_CHECKOUT_START",description:"Start the organization's seat subscription: creates a Stripe Checkout session for the current paid-seat count and returns its URL.",annotations:{title:"Start Billing Checkout",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!0},inputSchema:EF.object({}),outputSchema:EF.object({url:EF.string(),quantity:EF.number()}),handler:async(Z,X)=>{D0(X),await X.access.check();let G=X.organization?.id,Y=X.organization?.slug;if(!G||!Y)throw Error("Organization context required");let[Q,$]=await Promise.all([X.storage.organizationBilling.getBilling(G),X.storage.organizationBilling.listPaidSeatUserIds(G)]);if(!Q||Q.legacy)throw Error("This organization is on the legacy plan \u2014 no subscription needed.");if(Q.billingMode!=="self_serve")throw Error("Contract-billed organizations do not use checkout.");if(Q.status==="active")throw Error("This organization already has an active subscription \u2014 seat changes apply directly.");if(Q.stripeSubscriptionId)throw Error("This organization still has a subscription on file \u2014 settle or cancel it before starting a new checkout.");let J=$.length;if(J<1)throw Error("Mark at least one member as a paid seat before subscribing.");let W=`${s7()}/${encodeURIComponent(Y)}/members`,{url:K}=await t88({organizationId:G,quantity:J,successUrl:`${W}?checkout=success`,cancelUrl:`${W}?checkout=canceled`});return{url:K,quantity:J}}}),Fm0=s({name:"ORGANIZATION_SEATS_PREVIEW",description:"Preview what the organization pays now for changing its paid-seat count (Stripe prorated invoice preview). Read-only \u2014 nothing is charged.",annotations:{title:"Preview Seat Change",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:EF.object({quantity:EF.number().int().min(1).max(1000)}),outputSchema:EF.object({amountDueCents:EF.number(),currency:EF.string()}),handler:async(Z,X)=>{D0(X),await X.access.check();let G=X.organization?.id;if(!G)throw Error("Organization context required");let Y=await X.storage.organizationBilling.getBilling(G);if(!hb(Y))throw Error("Seat previews need an active self-serve subscription.");return await o88({subscriptionId:Y.stripeSubscriptionId,quantity:Z.quantity})}})});import{z as xw}from"zod";var Um0,Hm0;var Y68=B(()=>{y_();ub();rZ();e0();gD();Um0=s({name:"ORGANIZATION_BILLING_PORTAL",description:"Open the organization's Stripe billing portal (manage card, invoices, cancellation). Returns the portal URL.",annotations:{title:"Open Billing Portal",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!0},inputSchema:xw.object({}),outputSchema:xw.object({url:xw.string()}),handler:async(Z,X)=>{D0(X),await X.access.check();let G=B0(X);if(!G.slug)throw Error("Organization context required");let Y=await X.storage.organizationBilling.getBilling(G.id);if(!Y?.stripeCustomerId)throw Error("This organization has no billing account yet \u2014 subscribe first.");if(Y.legacy||Y.billingMode!=="self_serve")throw Error("This organization's billing is managed by deco \u2014 contact support.");try{return await a88({customerId:Y.stripeCustomerId,returnUrl:`${s7()}/${encodeURIComponent(G.slug)}/members`})}catch(Q){if(Q instanceof fY)throw Error(Q.message);throw Q}}}),Hm0=s({name:"ORGANIZATION_INCLUDED_REPORT_SET",description:"Choose which site's weekly report re-run the organization's subscription includes (null clears it).",annotations:{title:"Set Included Report Site",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:xw.object({url:xw.string().trim().min(1).max(255).nullable()}),outputSchema:xw.object({includedReportUrl:xw.string().nullable(),benefitsSyncQueued:xw.boolean()}),handler:async(Z,X)=>{D0(X),await X.access.check();let G=B0(X),Y=await X.storage.organizationBilling.getBilling(G.id);if(!Y||Y.legacy)throw Error("This organization is on the legacy plan \u2014 included reports do not apply.");let Q=Z.url===null?null:p60(Z.url);if(Z.url!==null&&!Q)throw Error(`"${Z.url}" is not a valid site URL.`);let{updated:$,benefitsReferenceId:J}=await X.storage.organizationBilling.setIncludedReportUrl(G.id,Q,{markBenefitsPending:KD()});if(!$)throw Error("Organization billing row missing.");let W=!1;if(J)try{await SN(G.id,J,"apply"),W=!0}catch(K){console.error("Failed to enqueue benefit sync (sweep covers):",K)}return{includedReportUrl:Q,benefitsSyncQueued:W}}})});import{z as Mn}from"zod";function X64(Z){return`[CREDITS] Paid report runs need at least $${(Q68/100).toFixed(2)} of AI credit balance \u2014 current balance is $${(Z/100).toFixed(2)}. Top up and try again.`}var Q68=500,wm0;var $68=B(()=>{Tf0();e0();nW();qH();gD();wm0=s({name:"ORGANIZATION_REPORT_RUN_PAID",description:"Trigger a paid report run for one of the organization's sites, billed against its AI credits (requires at least $5 of balance; the run's real cost plus markup is debited at completion).",annotations:{title:"Run Paid Report",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!0},inputSchema:Mn.object({url:Mn.string().trim().min(1).max(255).optional()}),outputSchema:Mn.object({url:Mn.string(),started:Mn.boolean()}),handler:async(Z,X)=>{D0(X),await X.access.check();let G=B0(X),Y=V1(X);if(!Y)throw Error("User ID required");if(!fc())throw Error("Reports are not available on this deployment.");let Q;if(Z.url)Q=p60(Z.url);else Q=(await X.storage.organizationBilling.getBilling(G.id))?.includedReportUrl??null;if(!Q)throw Error(Z.url?`"${Z.url}" is not a valid site URL.`:"No site chosen \u2014 pass a url or set the included report site first.");let $=K7().deco;if(!$?.getCreditsBalance)throw Error("AI credit balance is not available on this deployment.");let J=await PW(Y,X.auth.user?.email),{balanceCents:W}=await $.getCreditsBalance(J,G.id);if(!(W>=Q68))throw Error(X64(W??0));return await uk1({host:Q,organizationId:G.id}),{url:Q,started:!0}}})});var J68=B(()=>{P88();T88();R88();I88();q88();k88();S88();C88();b88();v88();_88();u88();c88();l88();d88();m88();i88();X68();G68();Y68();$68()});function W68(Z,X){return Z?.startsWith(`${kn[X]}:`)??!1}function Om0(Z){let X=0;for(let G of Z){if(G.action!=="status_changed")continue;if(G.data?.to!=="in_review")continue;X=Math.max(X,new Date(G.occurredAt).getTime())}return X}function Y64(Z,X){let G=Om0(Z),Y=new Map;for(let Q of Z){if(Q.action!=="review_approved"&&Q.action!=="review_changes_requested")continue;if(new Date(Q.occurredAt).getTime()<G)continue;let $=Q.data??{};if($.reviewer!=="qa"&&$.reviewer!=="code_review")continue;if(Q.action==="review_approved"){if(X?.verifiedOnly&&$.verified!==!0)continue;Y.set($.reviewer,"approved")}else Y.set($.reviewer,"changes_requested")}return Y}function fZ0(Z,X,G){if(X.length===0)return!1;let Y=Y64(Z,G);return X.every((Q)=>Y.get(Q)==="approved")}var KX="super-agent",g_,kn,h_,K68="task-board.item.updated",N68="task-board.item.deleted";var zF=B(()=>{g_=["qa","code_review"],kn={qa:"QA Agent",code_review:"Code Reviewer"},h_={qa:"qa_agent_enabled",code_review:"code_reviewer_enabled"}});import{z as H8}from"zod";var jF,rL,Q64,$64,F68,u_,J64,W64,U68;var sW=B(()=>{zF();jF=H8.enum(["triage","todo","in_progress","in_review","done"]),rL=H8.enum(["none","low","medium","high","urgent"]),Q64=H8.object({threadId:H8.string(),virtualMcpId:H8.string().nullable(),status:H8.enum(["in_progress","requires_action","failed","completed","expired"]).nullable(),title:H8.string().nullable(),lastMessage:H8.string().nullable(),hasPreview:H8.boolean(),hasMessages:H8.boolean(),createdAt:H8.string()}),$64=H8.object({id:H8.string(),name:H8.string(),color:H8.string().nullable().describe('Hex color, e.g. "#3b82f6"'),createdBy:H8.string(),createdAt:H8.string().datetime()}),F68=H8.object({url:H8.string(),number:H8.number(),repoOwner:H8.string(),repoName:H8.string(),createdAt:H8.string(),title:H8.string().nullable(),body:H8.string().nullable(),state:H8.enum(["open","closed"]).nullable(),draft:H8.boolean().nullable(),merged:H8.boolean().nullable(),checksStatus:H8.enum(["pending","passing","failing"]).nullable(),checks:H8.array(H8.object({name:H8.string(),status:H8.string(),conclusion:H8.string().nullable(),detailsUrl:H8.string().nullable(),summary:H8.string().nullable()})),previewUrl:H8.string().nullable()}),u_=H8.object({id:H8.string(),organizationId:H8.string(),title:H8.string(),description:H8.string().nullable(),status:jF,priority:rL,assigneeId:H8.string().nullable(),assignedBy:H8.string().nullable(),dueDate:H8.string().datetime().nullable(),sortOrder:H8.number(),threads:H8.array(Q64),tags:H8.array($64),createdBy:H8.string(),createdAt:H8.string().datetime(),updatedBy:H8.string(),updatedAt:H8.string().datetime()}),J64=["created","status_changed","assignee_changed","priority_changed","due_date_changed","title_changed","description_changed","tags_changed","review_requested","review_approved","review_changes_requested"],W64=H8.enum(J64),U68=H8.object({id:H8.string(),taskBoardItemId:H8.string(),action:W64,actorId:H8.string().nullable(),data:H8.record(H8.string(),H8.unknown()),occurredAt:H8.string().datetime()})});async function bZ0(Z,X,G){if(G===KX)return;let{members:Y}=await Z.boundAuth.organization.listMembers({organizationId:X,filterField:"userId",filterValue:G});if(!Y.some((Q)=>Q.userId===G))throw Error("assigneeId is not a member of the organization")}var Bm0=B(()=>{sW()});async function Dm0(Z,X,G){let Y;try{return await Promise.race([Z.aiProviders.listModels(X,G),new Promise(($,J)=>{Y=setTimeout(()=>J(Error("listModels timeout")),K64)})])}finally{if(Y)clearTimeout(Y)}}function N64(Z,X){switch(Z){case"fast":return X.chat.fast;case"smart":return X.chat.smart;case"thinking":return X.chat.thinking;case"image":return X.image;case"web_search":return X.webSearch;case"deep_research":return X.deepResearch}}function Lm0(Z,X,G){let Y=Z.find((Q)=>Q.modelId===X);return{title:Y?.title??G??X,providerId:Y?.providerId,capabilities:Y?.capabilities,limits:Y?.limits??null}}async function hG(Z,X,G){let Y=Z.organization?.id;if(!Y)throw Error("resolveTier called without an organization");let $=(await Z.storage.organizationSettings.get(Y))?.simple_mode?.tiers?.[X]??null,J=Z.auth?.user?.id,W=aW.safeParse(X),K=G?.applyUserPrefs&&W.success&&J?(await Z.storage.userModelPreferences.get(J,Y))?.tiers?.[W.data]??null:null,N=await Z.storage.aiProviderKeys.list({organizationId:Y});for(let O of[K,$])if(O&&N.some((D)=>D.id===O.keyId)){let D=await Dm0(Z,O.keyId,Y).catch(()=>[]);return{credentialId:O.keyId,modelId:O.modelId,modelMeta:Lm0(D,O.modelId,O.title)}}if(N.length===0)throw new c_(X);let F={};await Promise.all(N.map(async(O)=>{F[O.id]=await Dm0(Z,O.id,Y).catch(()=>[])}));let U=N.map((O)=>({id:O.id,providerId:O.providerId,label:O.label,presetId:O.presetId,createdBy:O.createdBy,createdAt:O.createdAt})),H=kk1(U,F),w=N64(X,H);if(!w)throw new c_(X);return{credentialId:w.keyId,modelId:w.modelId,modelMeta:Lm0(F[w.keyId]??[],w.modelId,w.title)}}async function H68(Z,X,G){let Y=Z.organization?.id;if(!Y)throw Error("resolveSpecificModel called without an organization");let Q=await Dm0(Z,X,Y).catch(()=>[]);return{credentialId:X,modelId:G,modelMeta:Lm0(Q,G)}}async function l3(Z,X){try{return await hG(Z,X)}catch(G){if(G instanceof c_)return null;return console.warn(`[resolveTier] tier "${X}" resolution failed:`,G),null}}var c_,K64=5000;var _w=B(()=>{_Q();R6();c_=class c_ extends Error{tier;constructor(Z){super(`No model available for tier "${Z}". Connect a provider or configure the tier in organization settings.`);this.tier=Z;this.name="TierUnavailableError"}}});function vZ0(Z){return Z.sandboxProviderKind==="agent-sandbox"&&Z.harnessId==="decopilot"}function w68(Z){return Z.harnessId==="decopilot"&&(Z.sandboxProviderKind==null||Z.sandboxProviderKind==="agent-sandbox")}function U64(Z){return{type:"data-run-status",id:"run-status",data:{stage:Z}}}function O68(Z){if(!Z||typeof Z!=="object")return!1;return Z.type==="data-run-status"}async function EJ(Z,X,G){if(!Z)return;try{await Z.publishRawChunk(X,U64(G))}catch{}}var F64,Sn,BO9;var l_=B(()=>{F64=["waiting-runner","starting-run","waiting-capacity","gathering-context","preparing-tools","starting-assistant","analyzing-scope"],Sn=["gathering-context","preparing-tools","starting-assistant","analyzing-scope"],BO9=new Set(F64)});function xZ0(){return crypto.randomUUID()}var zm0=f((EO9,L68)=>{var{defineProperty:Em0,getOwnPropertyDescriptor:H64,getOwnPropertyNames:w64}=Object,O64=Object.prototype.hasOwnProperty,B64=(Z,X)=>{for(var G in X)Em0(Z,G,{get:X[G],enumerable:!0})},D64=(Z,X,G,Y)=>{if(X&&typeof X==="object"||typeof X==="function"){for(let Q of w64(X))if(!O64.call(Z,Q)&&Q!==G)Em0(Z,Q,{get:()=>X[Q],enumerable:!(Y=H64(X,Q))||Y.enumerable})}return Z},L64=(Z)=>D64(Em0({},"__esModule",{value:!0}),Z),B68={};B64(B68,{SYMBOL_FOR_REQ_CONTEXT:()=>D68,getContext:()=>E64});L68.exports=L64(B68);var D68=Symbol.for("@vercel/request-context");function E64(){return globalThis[D68]?.get?.()??{}}});var Vn=f((zO9,j68)=>{var{defineProperty:jm0,getOwnPropertyDescriptor:z64,getOwnPropertyNames:j64}=Object,A64=Object.prototype.hasOwnProperty,P64=(Z,X)=>{for(var G in X)jm0(Z,G,{get:X[G],enumerable:!0})},T64=(Z,X,G,Y)=>{if(X&&typeof X==="object"||typeof X==="function"){for(let Q of j64(X))if(!A64.call(Z,Q)&&Q!==G)jm0(Z,Q,{get:()=>X[Q],enumerable:!(Y=z64(X,Q))||Y.enumerable})}return Z},R64=(Z)=>T64(jm0({},"__esModule",{value:!0}),Z),E68={};P64(E68,{VercelOidcTokenError:()=>z68});j68.exports=R64(E68);class z68 extends Error{constructor(Z,X){super(Z);this.name="VercelOidcTokenError",this.cause=X}toString(){if(this.cause)return`${this.name}: ${this.message}: ${this.cause}`;return`${this.name}: ${this.message}`}}});var R68=f((jO9,T68)=>{var{create:I64,defineProperty:_Z0,getOwnPropertyDescriptor:q64,getOwnPropertyNames:M64,getPrototypeOf:k64}=Object,S64=Object.prototype.hasOwnProperty,V64=(Z,X)=>{for(var G in X)_Z0(Z,G,{get:X[G],enumerable:!0})},A68=(Z,X,G,Y)=>{if(X&&typeof X==="object"||typeof X==="function"){for(let Q of M64(X))if(!S64.call(Z,Q)&&Q!==G)_Z0(Z,Q,{get:()=>X[Q],enumerable:!(Y=q64(X,Q))||Y.enumerable})}return Z},Pm0=(Z,X,G)=>(G=Z!=null?I64(k64(Z)):{},A68(X||!Z||!Z.__esModule?_Z0(G,"default",{value:Z,enumerable:!0}):G,Z)),C64=(Z)=>A68(_Z0({},"__esModule",{value:!0}),Z),P68={};V64(P68,{findRootDir:()=>v64,getUserDataDir:()=>x64});T68.exports=C64(P68);var Cn=Pm0(c0("path")),f64=Pm0(c0("fs")),Am0=Pm0(c0("os")),b64=Vn();function v64(){try{let Z=process.cwd();while(Z!==Cn.default.dirname(Z)){let X=Cn.default.join(Z,".vercel");if(f64.default.existsSync(X))return Z;Z=Cn.default.dirname(Z)}}catch(Z){throw new b64.VercelOidcTokenError("Token refresh only supported in node server environments")}return null}function x64(){if(process.env.XDG_DATA_HOME)return process.env.XDG_DATA_HOME;switch(Am0.default.platform()){case"darwin":return Cn.default.join(Am0.default.homedir(),"Library/Application Support");case"linux":return Cn.default.join(Am0.default.homedir(),".local/share");case"win32":if(process.env.LOCALAPPDATA)return process.env.LOCALAPPDATA;return null;default:return null}}});var C68=f((AO9,V68)=>{var{create:_64,defineProperty:yZ0,getOwnPropertyDescriptor:y64,getOwnPropertyNames:g64,getPrototypeOf:h64}=Object,u64=Object.prototype.hasOwnProperty,c64=(Z,X)=>{for(var G in X)yZ0(Z,G,{get:X[G],enumerable:!0})},I68=(Z,X,G,Y)=>{if(X&&typeof X==="object"||typeof X==="function"){for(let Q of g64(X))if(!u64.call(Z,Q)&&Q!==G)yZ0(Z,Q,{get:()=>X[Q],enumerable:!(Y=y64(X,Q))||Y.enumerable})}return Z},q68=(Z,X,G)=>(G=Z!=null?_64(h64(Z)):{},I68(X||!Z||!Z.__esModule?yZ0(G,"default",{value:Z,enumerable:!0}):G,Z)),l64=(Z)=>I68(yZ0({},"__esModule",{value:!0}),Z),M68={};c64(M68,{isValidAccessToken:()=>n64,readAuthConfig:()=>m64,writeAuthConfig:()=>i64});V68.exports=l64(M68);var fn=q68(c0("fs")),k68=q68(c0("path")),d64=bn();function S68(){let Z=(0,d64.getVercelDataDir)();if(!Z)throw Error(`Unable to find Vercel CLI data directory. Your platform: ${process.platform}. Supported: darwin, linux, win32.`);return k68.join(Z,"auth.json")}function m64(){try{let Z=S68();if(!fn.existsSync(Z))return null;let X=fn.readFileSync(Z,"utf8");if(!X)return null;return JSON.parse(X)}catch(Z){return null}}function i64(Z){let X=S68(),G=k68.dirname(X);if(!fn.existsSync(G))fn.mkdirSync(G,{mode:504,recursive:!0});fn.writeFileSync(X,JSON.stringify(Z,null,2),{mode:384})}function n64(Z,X=0){if(!Z.token)return!1;if(typeof Z.expiresAt!=="number")return!0;let G=Math.floor(Date.now()/1000),Y=X/1000;return Z.expiresAt>=G+Y}});var x68=f((PO9,v68)=>{var{defineProperty:Im0,getOwnPropertyDescriptor:p64,getOwnPropertyNames:t64}=Object,o64=Object.prototype.hasOwnProperty,r64=(Z,X)=>{for(var G in X)Im0(Z,G,{get:X[G],enumerable:!0})},a64=(Z,X,G,Y)=>{if(X&&typeof X==="object"||typeof X==="function"){for(let Q of t64(X))if(!o64.call(Z,Q)&&Q!==G)Im0(Z,Q,{get:()=>X[Q],enumerable:!(Y=p64(X,Q))||Y.enumerable})}return Z},s64=(Z)=>a64(Im0({},"__esModule",{value:!0}),Z),f68={};r64(f68,{processTokenResponse:()=>Y44,refreshTokenRequest:()=>G44});v68.exports=s64(f68);var Tm0=c0("os"),e64="https://vercel.com",Z44="cl_HYyOPBNtFMfHhaUn9L4QPfTZz6TP47bp",b68=`@vercel/oidc node-${process.version} ${(0,Tm0.platform)()} (${(0,Tm0.arch)()}) ${(0,Tm0.hostname)()}`,Rm0=null;async function X44(){if(Rm0)return Rm0;let Z=`${e64}/.well-known/openid-configuration`,X=await fetch(Z,{headers:{"user-agent":b68}});if(!X.ok)throw Error("Failed to discover OAuth endpoints");let G=await X.json();if(!G||typeof G.token_endpoint!=="string")throw Error("Invalid OAuth discovery response");let Y=G.token_endpoint;return Rm0=Y,Y}async function G44(Z){let X=await X44();return await fetch(X,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded","user-agent":b68},body:new URLSearchParams({client_id:Z44,grant_type:"refresh_token",...Z})})}async function Y44(Z){let X=await Z.json();if(!Z.ok){let G=typeof X==="object"&&X&&"error"in X?String(X.error):"Token refresh failed";return[Error(G)]}if(typeof X!=="object"||X===null)return[Error("Invalid token response")];if(typeof X.access_token!=="string")return[Error("Missing access_token in response")];if(X.token_type!=="Bearer")return[Error("Invalid token_type in response")];if(typeof X.expires_in!=="number")return[Error("Missing expires_in in response")];return[null,X]}});var Mm0=f((TO9,h68)=>{var{defineProperty:qm0,getOwnPropertyDescriptor:Q44,getOwnPropertyNames:$44}=Object,J44=Object.prototype.hasOwnProperty,W44=(Z,X)=>{for(var G in X)qm0(Z,G,{get:X[G],enumerable:!0})},K44=(Z,X,G,Y)=>{if(X&&typeof X==="object"||typeof X==="function"){for(let Q of $44(X))if(!J44.call(Z,Q)&&Q!==G)qm0(Z,Q,{get:()=>X[Q],enumerable:!(Y=Q44(X,Q))||Y.enumerable})}return Z},N44=(Z)=>K44(qm0({},"__esModule",{value:!0}),Z),_68={};W44(_68,{AccessTokenMissingError:()=>y68,RefreshAccessTokenFailedError:()=>g68});h68.exports=N44(_68);class y68 extends Error{constructor(){super("No authentication found. Please log in with the Vercel CLI (vercel login).");this.name="AccessTokenMissingError"}}class g68 extends Error{constructor(Z){super("Failed to refresh authentication token.",{cause:Z});this.name="RefreshAccessTokenFailedError"}}});var bn=f((RO9,m68)=>{var{create:F44,defineProperty:gZ0,getOwnPropertyDescriptor:U44,getOwnPropertyNames:H44,getPrototypeOf:w44}=Object,O44=Object.prototype.hasOwnProperty,B44=(Z,X)=>{for(var G in X)gZ0(Z,G,{get:X[G],enumerable:!0})},c68=(Z,X,G,Y)=>{if(X&&typeof X==="object"||typeof X==="function"){for(let Q of H44(X))if(!O44.call(Z,Q)&&Q!==G)gZ0(Z,Q,{get:()=>X[Q],enumerable:!(Y=U44(X,Q))||Y.enumerable})}return Z},l68=(Z,X,G)=>(G=Z!=null?F44(w44(Z)):{},c68(X||!Z||!Z.__esModule?gZ0(G,"default",{value:Z,enumerable:!0}):G,Z)),D44=(Z)=>c68(gZ0({},"__esModule",{value:!0}),Z),d68={};B44(d68,{assertVercelOidcTokenResponse:()=>km0,findProjectInfo:()=>j44,getTokenPayload:()=>T44,getVercelDataDir:()=>L44,getVercelOidcToken:()=>z44,getVercelToken:()=>E44,isExpired:()=>R44,loadToken:()=>P44,saveToken:()=>A44});m68.exports=D44(d68);var vn=l68(c0("path")),aL=l68(c0("fs")),i_=Vn(),hZ0=R68(),d_=C68(),u68=x68(),m_=Mm0();function L44(){let X=(0,hZ0.getUserDataDir)();if(!X)return null;return vn.join(X,"com.vercel.cli")}async function E44(Z){let X=(0,d_.readAuthConfig)();if(!X?.token)throw new m_.AccessTokenMissingError;if((0,d_.isValidAccessToken)(X,Z?.expirationBufferMs))return X.token;if(!X.refreshToken)throw(0,d_.writeAuthConfig)({}),new m_.RefreshAccessTokenFailedError("No refresh token available");try{let G=await(0,u68.refreshTokenRequest)({refresh_token:X.refreshToken}),[Y,Q]=await(0,u68.processTokenResponse)(G);if(Y||!Q)throw(0,d_.writeAuthConfig)({}),new m_.RefreshAccessTokenFailedError(Y);let $={token:Q.access_token,expiresAt:Math.floor(Date.now()/1000)+Q.expires_in};if(Q.refresh_token)$.refreshToken=Q.refresh_token;return(0,d_.writeAuthConfig)($),$.token}catch(G){if((0,d_.writeAuthConfig)({}),G instanceof m_.AccessTokenMissingError||G instanceof m_.RefreshAccessTokenFailedError)throw G;throw new m_.RefreshAccessTokenFailedError(G)}}async function z44(Z,X,G){let Y=`https://api.vercel.com/v1/projects/${X}/token?source=vercel-oidc-refresh${G?`&teamId=${G}`:""}`,Q=await fetch(Y,{method:"POST",headers:{Authorization:`Bearer ${Z}`}});if(!Q.ok)throw new i_.VercelOidcTokenError(`Failed to refresh OIDC token: ${Q.statusText}`);let $=await Q.json();return km0($),$}function km0(Z){if(!Z||typeof Z!=="object")throw TypeError("Vercel OIDC token is malformed. Expected an object. Please run `vc env pull` and try again");if(!("token"in Z)||typeof Z.token!=="string")throw TypeError("Vercel OIDC token is malformed. Expected a string-valued token property. Please run `vc env pull` and try again")}function j44(){let Z=(0,hZ0.findRootDir)();if(!Z)throw new i_.VercelOidcTokenError("Unable to find project root directory. Have you linked your project with `vc link?`");let X=vn.join(Z,".vercel","project.json");if(!aL.existsSync(X))throw new i_.VercelOidcTokenError("project.json not found, have you linked your project with `vc link?`");let G=JSON.parse(aL.readFileSync(X,"utf8"));if(typeof G.projectId!=="string"&&typeof G.orgId!=="string")throw TypeError("Expected a string-valued projectId property. Try running `vc link` to re-link your project.");return{projectId:G.projectId,teamId:G.orgId}}function A44(Z,X){let G=(0,hZ0.getUserDataDir)();if(!G)throw new i_.VercelOidcTokenError("Unable to find user data directory. Please reach out to Vercel support.");let Y=vn.join(G,"com.vercel.token",`${X}.json`),Q=JSON.stringify(Z);aL.mkdirSync(vn.dirname(Y),{mode:504,recursive:!0}),aL.writeFileSync(Y,Q),aL.chmodSync(Y,432);return}function P44(Z){let X=(0,hZ0.getUserDataDir)();if(!X)throw new i_.VercelOidcTokenError("Unable to find user data directory. Please reach out to Vercel support.");let G=vn.join(X,"com.vercel.token",`${Z}.json`);if(!aL.existsSync(G))return null;let Y=JSON.parse(aL.readFileSync(G,"utf8"));return km0(Y),Y}function T44(Z){let X=Z.split(".");if(X.length!==3)throw new i_.VercelOidcTokenError("Invalid token. Please run `vc env pull` and try again");let G=X[1].replace(/-/g,"+").replace(/_/g,"/"),Y=G.padEnd(G.length+(4-G.length%4)%4,"=");return JSON.parse(Buffer.from(Y,"base64").toString("utf8"))}function R44(Z,X=0){return Z.exp*1000<Date.now()+X}});var t68=f((IO9,p68)=>{var{defineProperty:Sm0,getOwnPropertyDescriptor:I44,getOwnPropertyNames:q44}=Object,M44=Object.prototype.hasOwnProperty,k44=(Z,X)=>{for(var G in X)Sm0(Z,G,{get:X[G],enumerable:!0})},S44=(Z,X,G,Y)=>{if(X&&typeof X==="object"||typeof X==="function"){for(let Q of q44(X))if(!M44.call(Z,Q)&&Q!==G)Sm0(Z,Q,{get:()=>X[Q],enumerable:!(Y=I44(X,Q))||Y.enumerable})}return Z},V44=(Z)=>S44(Sm0({},"__esModule",{value:!0}),Z),n68={};k44(n68,{refreshToken:()=>C44});p68.exports=V44(n68);var i68=Vn(),yw=bn();async function C44(Z){let X=Z?.project,G=Z?.team;if(!X&&!G){let Q=(0,yw.findProjectInfo)();X=Q.projectId,G=Q.teamId}else if(!X||!G){let Q=(0,yw.findProjectInfo)();X=X??Q.projectId,G=G??Q.teamId}if(!X)throw new i68.VercelOidcTokenError("Failed to refresh OIDC token: No project specified. Try re-linking your project with `vc link`");let Y=(0,yw.loadToken)(X);if(!Y||(0,yw.isExpired)((0,yw.getTokenPayload)(Y.token),Z?.expirationBufferMs)){let Q=await(0,yw.getVercelToken)({expirationBufferMs:Z?.expirationBufferMs});if(Y=await(0,yw.getVercelOidcToken)(Q,X,G),!Y)throw new i68.VercelOidcTokenError("Failed to refresh OIDC token");(0,yw.saveToken)(Y,X)}process.env.VERCEL_OIDC_TOKEN=Y.token;return}});var a68=f((qO9,r68)=>{var{defineProperty:Cm0,getOwnPropertyDescriptor:f44,getOwnPropertyNames:b44}=Object,v44=Object.prototype.hasOwnProperty,x44=(Z,X)=>{for(var G in X)Cm0(Z,G,{get:X[G],enumerable:!0})},_44=(Z,X,G,Y)=>{if(X&&typeof X==="object"||typeof X==="function"){for(let Q of b44(X))if(!v44.call(Z,Q)&&Q!==G)Cm0(Z,Q,{get:()=>X[Q],enumerable:!(Y=f44(X,Q))||Y.enumerable})}return Z},y44=(Z)=>_44(Cm0({},"__esModule",{value:!0}),Z),o68={};x44(o68,{getVercelOidcToken:()=>u44,getVercelOidcTokenSync:()=>Vm0});r68.exports=y44(o68);var g44=zm0(),h44=Vn();async function u44(Z){let X="",G;try{X=Vm0()}catch(Y){G=Y}try{let[{getTokenPayload:Y,isExpired:Q},{refreshToken:$}]=await Promise.all([await Promise.resolve().then(() => k(bn())),await Promise.resolve().then(() => k(t68()))]);if(!X||Q(Y(X),Z?.expirationBufferMs))await $(Z),X=Vm0()}catch(Y){let Q=G instanceof Error?G.message:"";if(Y instanceof Error)Q=`${Q}
1151
1151
  ${Y.message}`;if(Q)throw new h44.VercelOidcTokenError(Q);throw Y}return X}function Vm0(){let Z=(0,g44.getContext)().headers?.["x-vercel-oidc-token"]??process.env.VERCEL_OIDC_TOKEN;if(!Z)throw Error("The 'x-vercel-oidc-token' header is missing from the request. Do you have the OIDC option enabled in the Vercel project settings?");return Z}});var bm0=f((MO9,X48)=>{var{defineProperty:fm0,getOwnPropertyDescriptor:c44,getOwnPropertyNames:l44}=Object,d44=Object.prototype.hasOwnProperty,m44=(Z,X)=>{for(var G in X)fm0(Z,G,{get:X[G],enumerable:!0})},i44=(Z,X,G,Y)=>{if(X&&typeof X==="object"||typeof X==="function"){for(let Q of l44(X))if(!d44.call(Z,Q)&&Q!==G)fm0(Z,Q,{get:()=>X[Q],enumerable:!(Y=c44(X,Q))||Y.enumerable})}return Z},n44=(Z)=>i44(fm0({},"__esModule",{value:!0}),Z),Z48={};m44(Z48,{AccessTokenMissingError:()=>e68.AccessTokenMissingError,RefreshAccessTokenFailedError:()=>e68.RefreshAccessTokenFailedError,getContext:()=>p44.getContext,getVercelOidcToken:()=>s68.getVercelOidcToken,getVercelOidcTokenSync:()=>s68.getVercelOidcTokenSync,getVercelToken:()=>t44.getVercelToken});X48.exports=n44(Z48);var s68=a68(),p44=zm0(),e68=Mm0(),t44=bn()});import{z as AF}from"zod/v4";import{z as w48}from"zod/v4";import{z as xm0}from"zod/v4";import{z as zZ}from"zod/v4";import{z as N7}from"zod/v4";import{z as EZ}from"zod/v4";import{z as uZ0}from"zod/v4";import{z as F9}from"zod/v4";import{z as c5}from"zod/v4";import{z as t6}from"zod/v4";import{z as P9}from"zod/v4";import{z as G5}from"zod";import{z as s4}from"zod";async function V48({response:Z,statusCode:X,defaultMessage:G="Gateway request failed",cause:Y,authMethod:Q}){var $;let J=await r9({value:Z,schema:U54});if(!J.success){let U=typeof Z==="object"&&Z!==null&&"generationId"in Z?Z.generationId:void 0;return new F54({message:`Invalid error response format: ${G}`,statusCode:X,response:Z,validationError:J.error,cause:Y,generationId:U})}let W=J.value,K=W.error.type,N=W.error.message,F=($=W.generationId)!=null?$:void 0;switch(K){case"authentication_error":return cZ0.createContextualError({apiKeyProvided:Q==="api-key",oidcTokenProvided:Q==="oidc",statusCode:X,cause:Y,generationId:F});case"invalid_request_error":return new s44({message:N,statusCode:X,cause:Y,generationId:F});case"rate_limit_exceeded":return new Z54({message:N,statusCode:X,cause:Y,generationId:F});case"model_not_found":{let U=await r9({value:W.error.param,schema:G54});return new Y54({message:N,statusCode:X,modelId:U.success?U.value.modelId:void 0,cause:Y,generationId:F})}case"internal_server_error":return new j48({message:N,statusCode:X,cause:Y,generationId:F});case"failed_dependency":return new J54({message:N,statusCode:X,cause:Y,generationId:F});case"forbidden":return new K54({message:N,statusCode:X,cause:Y,generationId:F});default:return new j48({message:N,statusCode:X,cause:Y,generationId:F})}}function H54(Z){if(Z.data!==void 0)return Z.data;if(Z.responseBody!=null)try{return JSON.parse(Z.responseBody)}catch(X){return Z.responseBody}return{}}function x48(Z){if(!(Z instanceof Error))return!1;let X=Z.code;if(typeof X==="string")return["UND_ERR_HEADERS_TIMEOUT","UND_ERR_BODY_TIMEOUT","UND_ERR_CONNECT_TIMEOUT"].includes(X);return!1}async function bY(Z,X){var G;if(jZ.isInstance(Z))return Z;if(x48(Z))return v48.createTimeoutError({originalMessage:Z instanceof Error?Z.message:"Unknown error",cause:Z});if(K6.isInstance(Z)){if(Z.cause&&x48(Z.cause))return v48.createTimeoutError({originalMessage:Z.message,cause:Z});return await V48({response:H54(Z),statusCode:(G=Z.statusCode)!=null?G:500,defaultMessage:"Gateway request failed",cause:Z,authMethod:X})}return await V48({response:{},statusCode:500,defaultMessage:Z instanceof Error?`Gateway request failed: ${Z.message}`:"Unknown Gateway error",cause:Z,authMethod:X})}async function eW(Z){let X=await r9({value:Z[p48],schema:O54});return X.success?X.value:void 0}function y48(Z){if(Z.type==="file"&&Z.data instanceof Uint8Array)return{...Z,data:AY(Z.data)};return Z}function f54(Z){if(Z.type==="file"&&Z.data instanceof Uint8Array)return{...Z,data:AY(Z.data)};return Z}async function o54(){var Z;return(Z=t48.getContext().headers)==null?void 0:Z["x-vercel-id"]}function _m0(Z={}){var X,G;let Y=null,Q=null,$=(X=Z.metadataCacheRefreshMillis)!=null?X:300000,J=0,W=(G=Fw(Z.baseURL))!=null?G:"https://ai-gateway.vercel.sh/v3/ai",K=async()=>{try{let z=await s54(Z);return a4({Authorization:`Bearer ${z.token}`,"ai-gateway-protocol-version":a54,[p48]:z.authMethod,...Z.headers},`ai-sdk/gateway/${r54}`)}catch(z){throw cZ0.createContextualError({apiKeyProvided:!1,oidcTokenProvided:!1,statusCode:401,cause:z})}},N=()=>{let z=vW({settingValue:void 0,environmentVariableName:"VERCEL_DEPLOYMENT_ID"}),j=vW({settingValue:void 0,environmentVariableName:"VERCEL_ENV"}),A=vW({settingValue:void 0,environmentVariableName:"VERCEL_REGION"}),P=vW({settingValue:void 0,environmentVariableName:"VERCEL_PROJECT_ID"});return async()=>{let q=await o54();return{...z&&{"ai-o11y-deployment-id":z},...j&&{"ai-o11y-environment":j},...A&&{"ai-o11y-region":A},...q&&{"ai-o11y-request-id":q},...P&&{"ai-o11y-project-id":P}}}},F=(z)=>{return new P54(z,{provider:"gateway",baseURL:W,headers:K,fetch:Z.fetch,o11yHeaders:N()})},U=async()=>{var z,j,A;let P=(A=(j=(z=Z._internal)==null?void 0:z.currentDate)==null?void 0:j.call(z).getTime())!=null?A:Date.now();if(!Y||P-J>$)J=P,Y=new _48({baseURL:W,headers:K,fetch:Z.fetch}).getAvailableModels().then((q)=>{return Q=q,q}).catch(async(q)=>{throw await bY(q,await eW(await K()))});return Q?Promise.resolve(Q):Y},H=async()=>{return new _48({baseURL:W,headers:K,fetch:Z.fetch}).getCredits().catch(async(z)=>{throw await bY(z,await eW(await K()))})},w=async(z)=>{return new E54({baseURL:W,headers:K,fetch:Z.fetch}).getSpendReport(z).catch(async(j)=>{throw await bY(j,await eW(await K()))})},O=async(z)=>{return new j54({baseURL:W,headers:K,fetch:Z.fetch}).getGenerationInfo(z).catch(async(j)=>{throw await bY(j,await eW(await K()))})},D=function(z){if(new.target)throw Error("The Gateway Provider model function cannot be called with the new keyword.");return F(z)};D.specificationVersion="v3",D.getAvailableModels=U,D.getCredits=H,D.getSpendReport=w,D.getGenerationInfo=O,D.imageModel=(z)=>{return new q54(z,{provider:"gateway",baseURL:W,headers:K,fetch:Z.fetch,o11yHeaders:N()})},D.languageModel=F;let L=(z)=>{return new T54(z,{provider:"gateway",baseURL:W,headers:K,fetch:Z.fetch,o11yHeaders:N()})};D.embeddingModel=L,D.textEmbeddingModel=L,D.videoModel=(z)=>{return new C54(z,{provider:"gateway",baseURL:W,headers:K,fetch:Z.fetch,o11yHeaders:N()})};let E=(z)=>{return new y54(z,{provider:"gateway",baseURL:W,headers:K,fetch:Z.fetch,o11yHeaders:N()})};return D.rerankingModel=E,D.reranking=E,D.chat=D.languageModel,D.embedding=D.embeddingModel,D.image=D.imageModel,D.video=D.videoModel,D.tools=t54,D}async function s54(Z){let X=vW({settingValue:Z.apiKey,environmentVariableName:"AI_GATEWAY_API_KEY"});if(X)return{token:X,authMethod:"api-key"};return{token:await o48.getVercelOidcToken(),authMethod:"oidc"}}var t48,o48,o44="vercel.ai.gateway.error",vm0,G48,Y48,jZ,g48="GatewayAuthenticationError",r44,Q48,$48,J48,cZ0,h48="GatewayInvalidRequestError",a44,W48,K48,N48,s44,u48="GatewayRateLimitError",e44,F48,U48,H48,Z54,c48="GatewayModelNotFoundError",X54,O48,G54,B48,D48,Y54,l48="GatewayInternalServerError",Q54,L48,E48,z48,j48,d48="GatewayFailedDependencyError",$54,A48,P48,T48,J54,m48="GatewayForbiddenError",W54,R48,I48,q48,K54,i48="GatewayResponseError",N54,M48,k48,S48,F54,U54,n48="GatewayTimeoutError",w54,C48,f48,b48,v48,p48="ai-gateway-auth-method",O54,B54,_48=class{constructor(Z){this.config=Z}async getAvailableModels(){try{let{value:Z}=await qQ({url:`${this.config.baseURL}/config`,headers:await g8(this.config.headers()),successfulResponseHandler:Y6(D54),failedResponseHandler:j9({errorSchema:zZ.any(),errorToMessage:(X)=>X}),fetch:this.config.fetch});return Z}catch(Z){throw await bY(Z)}}async getCredits(){try{let Z=new URL(this.config.baseURL),{value:X}=await qQ({url:`${Z.origin}/v1/credits`,headers:await g8(this.config.headers()),successfulResponseHandler:Y6(L54),failedResponseHandler:j9({errorSchema:zZ.any(),errorToMessage:(G)=>G}),fetch:this.config.fetch});return X}catch(Z){throw await bY(Z)}}},D54,L54,E54=class{constructor(Z){this.config=Z}async getSpendReport(Z){try{let X=new URL(this.config.baseURL),G=new URLSearchParams;if(G.set("start_date",Z.startDate),G.set("end_date",Z.endDate),Z.groupBy)G.set("group_by",Z.groupBy);if(Z.datePart)G.set("date_part",Z.datePart);if(Z.userId)G.set("user_id",Z.userId);if(Z.model)G.set("model",Z.model);if(Z.provider)G.set("provider",Z.provider);if(Z.credentialType)G.set("credential_type",Z.credentialType);if(Z.tags&&Z.tags.length>0)G.set("tags",Z.tags.join(","));let{value:Y}=await qQ({url:`${X.origin}/v1/report?${G.toString()}`,headers:await g8(this.config.headers()),successfulResponseHandler:Y6(z54),failedResponseHandler:j9({errorSchema:N7.any(),errorToMessage:(Q)=>Q}),fetch:this.config.fetch});return Y}catch(X){throw await bY(X)}}},z54,j54=class{constructor(Z){this.config=Z}async getGenerationInfo(Z){try{let X=new URL(this.config.baseURL),{value:G}=await qQ({url:`${X.origin}/v1/generation?id=${encodeURIComponent(Z.id)}`,headers:await g8(this.config.headers()),successfulResponseHandler:Y6(A54),failedResponseHandler:j9({errorSchema:EZ.any(),errorToMessage:(Y)=>Y}),fetch:this.config.fetch});return G}catch(X){throw await bY(X)}}},A54,P54=class{constructor(Z,X){this.modelId=Z,this.config=X,this.specificationVersion="v3",this.supportedUrls={"*/*":[/.*/]}}get provider(){return this.config.provider}async getArgs(Z){let{abortSignal:X,...G}=Z;return{args:this.maybeEncodeFileParts(G),warnings:[]}}async doGenerate(Z){let{args:X,warnings:G}=await this.getArgs(Z),{abortSignal:Y}=Z,Q=await g8(this.config.headers());try{let{responseHeaders:$,value:J,rawValue:W}=await O6({url:this.getUrl(),headers:r8(Q,Z.headers,this.getModelConfigHeaders(this.modelId,!1),await g8(this.config.o11yHeaders)),body:X,successfulResponseHandler:Y6(uZ0.any()),failedResponseHandler:j9({errorSchema:uZ0.any(),errorToMessage:(K)=>K}),...Y&&{abortSignal:Y},fetch:this.config.fetch});return{...J,request:{body:X},response:{headers:$,body:W},warnings:G}}catch($){throw await bY($,await eW(Q))}}async doStream(Z){let{args:X,warnings:G}=await this.getArgs(Z),{abortSignal:Y}=Z,Q=await g8(this.config.headers());try{let{value:$,responseHeaders:J}=await O6({url:this.getUrl(),headers:r8(Q,Z.headers,this.getModelConfigHeaders(this.modelId,!0),await g8(this.config.o11yHeaders)),body:X,successfulResponseHandler:mX(uZ0.any()),failedResponseHandler:j9({errorSchema:uZ0.any(),errorToMessage:(W)=>W}),...Y&&{abortSignal:Y},fetch:this.config.fetch});return{stream:$.pipeThrough(new TransformStream({start(W){if(G.length>0)W.enqueue({type:"stream-start",warnings:G})},transform(W,K){if(W.success){let N=W.value;if(N.type==="raw"&&!Z.includeRawChunks)return;if(N.type==="response-metadata"&&N.timestamp&&typeof N.timestamp==="string")N.timestamp=new Date(N.timestamp);K.enqueue(N)}else K.error(W.error)}})),request:{body:X},response:{headers:J}}}catch($){throw await bY($,await eW(Q))}}isFilePart(Z){return Z&&typeof Z==="object"&&"type"in Z&&Z.type==="file"}maybeEncodeFileParts(Z){for(let X of Z.prompt)for(let G of X.content)if(this.isFilePart(G)){let Y=G;if(Y.data instanceof Uint8Array){let Q=Uint8Array.from(Y.data),$=Buffer.from(Q).toString("base64");Y.data=new URL(`data:${Y.mediaType||"application/octet-stream"};base64,${$}`)}}return Z}getUrl(){return`${this.config.baseURL}/language-model`}getModelConfigHeaders(Z,X){return{"ai-language-model-specification-version":"3","ai-language-model-id":Z,"ai-language-model-streaming":String(X)}}},T54=class{constructor(Z,X){this.modelId=Z,this.config=X,this.specificationVersion="v3",this.maxEmbeddingsPerCall=2048,this.supportsParallelCalls=!0}get provider(){return this.config.provider}async doEmbed({values:Z,headers:X,abortSignal:G,providerOptions:Y}){var Q,$;let J=await g8(this.config.headers());try{let{responseHeaders:W,value:K,rawValue:N}=await O6({url:this.getUrl(),headers:r8(J,X!=null?X:{},this.getModelConfigHeaders(),await g8(this.config.o11yHeaders)),body:{values:Z,...Y?{providerOptions:Y}:{}},successfulResponseHandler:Y6(I54),failedResponseHandler:j9({errorSchema:F9.any(),errorToMessage:(F)=>F}),...G&&{abortSignal:G},fetch:this.config.fetch});return{embeddings:K.embeddings,usage:(Q=K.usage)!=null?Q:void 0,providerMetadata:K.providerMetadata,response:{headers:W,body:N},warnings:($=K.warnings)!=null?$:[]}}catch(W){throw await bY(W,await eW(J))}}getUrl(){return`${this.config.baseURL}/embedding-model`}getModelConfigHeaders(){return{"ai-embedding-model-specification-version":"3","ai-model-id":this.modelId}}},R54,I54,q54=class{constructor(Z,X){this.modelId=Z,this.config=X,this.specificationVersion="v3",this.maxImagesPerCall=Number.MAX_SAFE_INTEGER}get provider(){return this.config.provider}async doGenerate({prompt:Z,n:X,size:G,aspectRatio:Y,seed:Q,files:$,mask:J,providerOptions:W,headers:K,abortSignal:N}){var F,U,H,w;let O=await g8(this.config.headers());try{let{responseHeaders:D,value:L,rawValue:E}=await O6({url:this.getUrl(),headers:r8(O,K!=null?K:{},this.getModelConfigHeaders(),await g8(this.config.o11yHeaders)),body:{prompt:Z,n:X,...G&&{size:G},...Y&&{aspectRatio:Y},...Q&&{seed:Q},...W&&{providerOptions:W},...$&&{files:$.map((z)=>y48(z))},...J&&{mask:y48(J)}},successfulResponseHandler:Y6(V54),failedResponseHandler:j9({errorSchema:c5.any(),errorToMessage:(z)=>z}),...N&&{abortSignal:N},fetch:this.config.fetch});return{images:L.images,warnings:(F=L.warnings)!=null?F:[],providerMetadata:L.providerMetadata,response:{timestamp:new Date,modelId:this.modelId,headers:D},...L.usage!=null&&{usage:{inputTokens:(U=L.usage.inputTokens)!=null?U:void 0,outputTokens:(H=L.usage.outputTokens)!=null?H:void 0,totalTokens:(w=L.usage.totalTokens)!=null?w:void 0}}}}catch(D){throw await bY(D,await eW(O))}}getUrl(){return`${this.config.baseURL}/image-model`}getModelConfigHeaders(){return{"ai-image-model-specification-version":"3","ai-model-id":this.modelId}}},M54,k54,S54,V54,C54=class{constructor(Z,X){this.modelId=Z,this.config=X,this.specificationVersion="v3",this.maxVideosPerCall=Number.MAX_SAFE_INTEGER}get provider(){return this.config.provider}async doGenerate({prompt:Z,n:X,aspectRatio:G,resolution:Y,duration:Q,fps:$,seed:J,image:W,providerOptions:K,headers:N,abortSignal:F}){var U;let H=await g8(this.config.headers());try{let{responseHeaders:w,value:O}=await O6({url:this.getUrl(),headers:r8(H,N!=null?N:{},this.getModelConfigHeaders(),await g8(this.config.o11yHeaders),{accept:"text/event-stream"}),body:{prompt:Z,n:X,...G&&{aspectRatio:G},...Y&&{resolution:Y},...Q&&{duration:Q},...$&&{fps:$},...J&&{seed:J},...K&&{providerOptions:K},...W&&{image:f54(W)}},successfulResponseHandler:async({response:D,url:L,requestBodyValues:E})=>{if(D.body==null)throw new K6({message:"SSE response body is empty",url:L,requestBodyValues:E,statusCode:D.status});let j=XF({stream:D.body,schema:_54}).getReader(),{done:A,value:P}=await j.read();if(j.releaseLock(),A||!P)throw new K6({message:"SSE stream ended without a data event",url:L,requestBodyValues:E,statusCode:D.status});if(!P.success)throw new K6({message:"Failed to parse video SSE event",cause:P.error,url:L,requestBodyValues:E,statusCode:D.status});let q=P.value;if(q.type==="error")throw new K6({message:q.message,statusCode:q.statusCode,url:L,requestBodyValues:E,responseHeaders:Object.fromEntries([...D.headers]),responseBody:JSON.stringify(q),data:{error:{message:q.message,type:q.errorType,param:q.param}}});return{value:{videos:q.videos,warnings:q.warnings,providerMetadata:q.providerMetadata},responseHeaders:Object.fromEntries([...D.headers])}},failedResponseHandler:j9({errorSchema:t6.any(),errorToMessage:(D)=>D}),...F&&{abortSignal:F},fetch:this.config.fetch});return{videos:O.videos,warnings:(U=O.warnings)!=null?U:[],providerMetadata:O.providerMetadata,response:{timestamp:new Date,modelId:this.modelId,headers:w}}}catch(w){throw await bY(w,await eW(H))}}getUrl(){return`${this.config.baseURL}/video-model`}getModelConfigHeaders(){return{"ai-video-model-specification-version":"3","ai-model-id":this.modelId}}},b54,v54,x54,_54,y54=class{constructor(Z,X){this.modelId=Z,this.config=X,this.specificationVersion="v3"}get provider(){return this.config.provider}async doRerank({documents:Z,query:X,topN:G,headers:Y,abortSignal:Q,providerOptions:$}){var J;let W=await g8(this.config.headers());try{let{responseHeaders:K,value:N,rawValue:F}=await O6({url:this.getUrl(),headers:r8(W,Y!=null?Y:{},this.getModelConfigHeaders(),await g8(this.config.o11yHeaders)),body:{documents:Z,query:X,...G!=null?{topN:G}:{},...$?{providerOptions:$}:{}},successfulResponseHandler:Y6(h54),failedResponseHandler:j9({errorSchema:P9.any(),errorToMessage:(U)=>U}),...Q&&{abortSignal:Q},fetch:this.config.fetch});return{ranking:N.ranking,providerMetadata:N.providerMetadata,response:{headers:K,body:F},warnings:(J=N.warnings)!=null?J:[]}}catch(K){throw await bY(K,await eW(W))}}getUrl(){return`${this.config.baseURL}/reranking-model`}getModelConfigHeaders(){return{"ai-reranking-model-specification-version":"3","ai-model-id":this.modelId}}},g54,h54,u54,c54,l54,d54=(Z={})=>l54(Z),m54,i54,n54,p54=(Z={})=>n54(Z),t54,r54="3.0.133",a54="0.0.1",lZ0;var xn=B(()=>{X1();n1();X1();X1();X1();X1();X1();X1();X1();X1();X1();n1();X1();X1();X1();X1();t48=k(bm0(),1),o48=k(bm0(),1),vm0=Symbol.for(o44),jZ=class Z extends(Y48=Error,G48=vm0,Y48){constructor({message:X,statusCode:G=500,cause:Y,generationId:Q,isRetryable:$=G!=null&&(G===408||G===409||G===429||G>=500)}){super(Q?`${X} [${Q}]`:X);this[G48]=!0,this.statusCode=G,this.cause=Y,this.generationId=Q,this.isRetryable=$}static isInstance(X){return Z.hasMarker(X)}static hasMarker(X){return typeof X==="object"&&X!==null&&vm0 in X&&X[vm0]===!0}},r44=`vercel.ai.gateway.error.${g48}`,Q48=Symbol.for(r44),cZ0=class Z extends(J48=jZ,$48=Q48,J48){constructor({message:X="Authentication failed",statusCode:G=401,cause:Y,generationId:Q}={}){super({message:X,statusCode:G,cause:Y,generationId:Q});this[$48]=!0,this.name=g48,this.type="authentication_error"}static isInstance(X){return jZ.hasMarker(X)&&Q48 in X}static createContextualError({apiKeyProvided:X,oidcTokenProvided:G,message:Y="Authentication failed",statusCode:Q=401,cause:$,generationId:J}){let W;if(X)W=`AI Gateway authentication failed: Invalid API key.
1152
1152
 
1153
1153
  Create a new API key: https://vercel.com/d?to=%2F%5Bteam%5D%2F%7E%2Fai%2Fapi-keys
@@ -1267,7 +1267,7 @@ ${mG4}`:""}
1267
1267
  `);let Y=X.pax;if(Y)for(let Q in Y)G+=Mt0(" "+Q+"="+Y[Q]+`
1268
1268
  `);return d4.from(G)};GF4.decodePax=function(X){let G={};while(X.length){let Y=0;while(Y<X.length&&X[Y]!==32)Y++;let Q=parseInt(d4.toString(X.subarray(0,Y)),10);if(!Q)return G;let $=d4.toString(X.subarray(Y+1,Q-1)),J=$.indexOf("=");if(J===-1)return G;G[$.slice(0,J)]=$.slice(J+1),X=X.subarray(Q)}return G};GF4.encode=function(X){let G=d4.alloc(512),Y=X.name,Q="";if(X.typeflag===5&&Y[Y.length-1]!=="/")Y+="/";if(d4.byteLength(Y)!==Y.length)return null;while(d4.byteLength(Y)>100){let $=Y.indexOf("/");if($===-1)return null;Q+=Q?"/"+Y.slice(0,$):Y.slice(0,$),Y=Y.slice($+1)}if(d4.byteLength(Y)>100||d4.byteLength(Q)>155)return null;if(X.linkname&&d4.byteLength(X.linkname)>100)return null;if(d4.write(G,Y),d4.write(G,NO(X.mode&4095,6),100),d4.write(G,NO(X.uid,6),108),d4.write(G,NO(X.gid,6),116),ZF4(X.size,G,124),d4.write(G,NO(X.mtime.getTime()/1000|0,11),136),G[156]=48+sN4(X.type),X.linkname)d4.write(G,X.linkname,157);if(d4.copy(jJ8,G,257),d4.copy(iN4,G,263),X.uname)d4.write(G,X.uname,265);if(X.gname)d4.write(G,X.gname,297);if(d4.write(G,NO(X.devmajor||0,6),329),d4.write(G,NO(X.devminor||0,6),337),Q)d4.write(G,Q,345);return d4.write(G,NO(PJ8(G),6),148),G};GF4.decode=function(X,G,Y){let Q=X[156]===0?0:X[156]-48,$=Ly(X,0,100,G),J=KO(X,100,8),W=KO(X,108,8),K=KO(X,116,8),N=KO(X,124,12),F=KO(X,136,12),U=aN4(Q),H=X[157]===0?null:Ly(X,157,100,G),w=Ly(X,265,32),O=Ly(X,297,32),D=KO(X,329,8),L=KO(X,337,8),E=PJ8(X);if(E===256)return null;if(E!==KO(X,148,8))throw Error("Invalid tar header. Maybe the tar is corrupted or it needs to be gunzipped?");if(tN4(X)){if(X[345])$=Ly(X,345,155,G)+"/"+$}else if(oN4(X));else if(!Y)throw Error("Invalid tar header: unknown format.");if(Q===0&&$&&$[$.length-1]==="/")Q=5;return{name:$,mode:J,uid:W,gid:K,size:N,mtime:new Date(1000*F),type:U,linkname:H,uname:w,gname:O,devmajor:D,devminor:L,pax:null}};function tN4(Z){return d4.equals(jJ8,Z.subarray(257,263))}function oN4(Z){return d4.equals(nN4,Z.subarray(257,263))&&d4.equals(pN4,Z.subarray(263,265))}function rN4(Z,X,G){if(typeof Z!=="number")return G;if(Z=~~Z,Z>=X)return X;if(Z>=0)return Z;if(Z+=X,Z>=0)return Z;return 0}function aN4(Z){switch(Z){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 sN4(Z){switch(Z){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 AJ8(Z,X,G,Y){for(;G<Y;G++)if(Z[G]===X)return G;return Y}function PJ8(Z){let X=256;for(let G=0;G<148;G++)X+=Z[G];for(let G=156;G<512;G++)X+=Z[G];return X}function NO(Z,X){if(Z=Z.toString(8),Z.length>X)return"7777777777777777777".slice(0,X)+" ";return"0000000000000000000".slice(0,X-Z.length)+Z+" "}function eN4(Z,X,G){X[G]=128;for(let Y=11;Y>0;Y--)X[G+Y]=Z&255,Z=Math.floor(Z/256)}function ZF4(Z,X,G){if(Z.toString(8).length>11)eN4(Z,X,G);else d4.write(X,NO(Z,11),G)}function XF4(Z){let X;if(Z[0]===128)X=!0;else if(Z[0]===255)X=!1;else return null;let G=[],Y;for(Y=Z.length-1;Y>0;Y--){let J=Z[Y];if(X)G.push(J);else G.push(255-J)}let Q=0,$=G.length;for(Y=0;Y<$;Y++)Q+=G[Y]*Math.pow(256,Y);return X?Q:-1*Q}function KO(Z,X,G){if(Z=Z.subarray(X,X+G),X=0,Z[X]&128)return XF4(Z);else{while(X<Z.length&&Z[X]===32)X++;let Y=rN4(AJ8(Z,32,X,Z.length),Z.length,Z.length);while(X<Y&&Z[X]===0)X++;if(Y===X)return 0;return parseInt(d4.toString(Z.subarray(X,Y)),8)}}function Ly(Z,X,G,Y){return d4.toString(Z.subarray(X,AJ8(Z,0,X,X+G)),Y)}function Mt0(Z){let X=d4.byteLength(Z),G=Math.floor(Math.log(X)/Math.log(10))+1;if(X+G>=Math.pow(10,G))G++;return X+G+Z}});var VJ8=f((zVZ,SJ8)=>{var{Writable:KF4,Readable:NF4,getStreamError:TJ8}=qt0(),FF4=jt0(),RJ8=Dy(),Ey=kt0(),UF4=RJ8.alloc(0);class IJ8{constructor(){this.buffered=0,this.shifted=0,this.queue=new FF4,this._offset=0}push(Z){this.buffered+=Z.byteLength,this.queue.push(Z)}shiftFirst(Z){return this._buffered===0?null:this._next(Z)}shift(Z){if(Z>this.buffered)return null;if(Z===0)return UF4;let X=this._next(Z);if(Z===X.byteLength)return X;let G=[X];while((Z-=X.byteLength)>0)X=this._next(Z),G.push(X);return RJ8.concat(G)}_next(Z){let X=this.queue.peek(),G=X.byteLength-this._offset;if(Z>=G){let Y=this._offset?X.subarray(this._offset,X.byteLength):X;return this.queue.shift(),this._offset=0,this.buffered-=G,this.shifted+=G,Y}return this.buffered-=Z,this.shifted+=Z,X.subarray(this._offset,this._offset+=Z)}}class qJ8 extends NF4{constructor(Z,X,G){super();this.header=X,this.offset=G,this._parent=Z}_read(Z){if(this.header.size===0)this.push(null);if(this._parent._stream===this)this._parent._update();Z(null)}_predestroy(){this._parent.destroy(TJ8(this))}_detach(){if(this._parent._stream===this)this._parent._stream=null,this._parent._missing=kJ8(this.header.size),this._parent._update()}_destroy(Z){this._detach(),Z(null)}}class MJ8 extends KF4{constructor(Z){super(Z);if(!Z)Z={};this._buffer=new IJ8,this._offset=0,this._header=null,this._stream=null,this._missing=0,this._longHeader=!1,this._callback=St0,this._locked=!1,this._finished=!1,this._pax=null,this._paxGlobal=null,this._gnuLongPath=null,this._gnuLongLinkPath=null,this._filenameEncoding=Z.filenameEncoding||"utf-8",this._allowUnknownFormat=!!Z.allowUnknownFormat,this._unlockBound=this._unlock.bind(this)}_unlock(Z){if(this._locked=!1,Z){this.destroy(Z),this._continueWrite(Z);return}this._update()}_consumeHeader(){if(this._locked)return!1;this._offset=this._buffer.shifted;try{this._header=Ey.decode(this._buffer.shift(512),this._filenameEncoding,this._allowUnknownFormat)}catch(Z){return this._continueWrite(Z),!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(Z){switch(this._header.type){case"gnu-long-path":this._gnuLongPath=Ey.decodeLongPath(Z,this._filenameEncoding);break;case"gnu-long-link-path":this._gnuLongLinkPath=Ey.decodeLongPath(Z,this._filenameEncoding);break;case"pax-global-header":this._paxGlobal=Ey.decodePax(Z);break;case"pax-header":this._pax=this._paxGlobal===null?Ey.decodePax(Z):Object.assign({},this._paxGlobal,Ey.decodePax(Z));break}}_consumeLongHeader(){this._longHeader=!1,this._missing=kJ8(this._header.size);let Z=this._buffer.shift(this._header.size);try{this._decodeLongHeader(Z)}catch(X){return this._continueWrite(X),!1}return!0}_consumeStream(){let Z=this._buffer.shiftFirst(this._missing);if(Z===null)return!1;this._missing-=Z.byteLength;let X=this._stream.push(Z);if(this._missing===0){if(this._stream.push(null),X)this._stream._detach();return X&&this._locked===!1}return X}_createStream(){return new qJ8(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 Z=this._buffer.shiftFirst(this._missing);if(Z!==null)this._missing-=Z.byteLength;continue}if(this._buffer.buffered<512)break;if(this._stream!==null||this._consumeHeader()===!1)return}this._continueWrite(null)}_continueWrite(Z){let X=this._callback;this._callback=St0,X(Z)}_write(Z,X){this._callback=X,this._buffer.push(Z),this._update()}_final(Z){this._finished=this._missing===0&&this._buffer.buffered===0,Z(this._finished?null:Error("Unexpected end of data"))}_predestroy(){this._continueWrite(null)}_destroy(Z){if(this._stream)this._stream.destroy(TJ8(this));Z(null)}[Symbol.asyncIterator](){let Z=null,X=null,G=null,Y=null,Q=null,$=this;return this.on("entry",K),this.on("error",(U)=>{Z=U}),this.on("close",N),{[Symbol.asyncIterator](){return this},next(){return new Promise(W)},return(){return F(null)},throw(U){return F(U)}};function J(U){if(!Q)return;let H=Q;Q=null,H(U)}function W(U,H){if(Z)return H(Z);if(Y){U({value:Y,done:!1}),Y=null;return}if(X=U,G=H,J(null),$._finished&&X)X({value:void 0,done:!0}),X=G=null}function K(U,H,w){if(Q=w,H.on("error",St0),X)X({value:H,done:!1}),X=G=null;else Y=H}function N(){if(J(Z),!X)return;if(Z)G(Z);else X({value:void 0,done:!0});X=G=null}function F(U){return $.destroy(U),J(U),new Promise((H,w)=>{if($.destroyed)return H({value:void 0,done:!0});$.once("close",function(){if(U)w(U);else H({value:void 0,done:!0})})})}}}SJ8.exports=function(X){return new MJ8(X)};function St0(){}function kJ8(Z){return Z&=511,Z&&512-Z}});var fJ8=f((jVZ,Vt0)=>{var CJ8={S_IFMT:61440,S_IFDIR:16384,S_IFCHR:8192,S_IFBLK:24576,S_IFIFO:4096,S_IFLNK:40960};try{Vt0.exports=c0("fs").constants||CJ8}catch{Vt0.exports=CJ8}});var hJ8=f((AVZ,gJ8)=>{var{Readable:HF4,Writable:wF4,getStreamError:bJ8}=qt0(),iV=Dy(),zy=fJ8(),UO0=kt0(),vJ8=iV.alloc(1024);class xJ8 extends wF4{constructor(Z,X,G){super({mapWritable:BF4,eagerOpen:!0});if(this.written=0,this.header=X,this._callback=G,this._linkname=null,this._isLinkname=X.type==="symlink"&&!X.linkname,this._isVoid=X.type!=="file"&&X.type!=="contiguous-file",this._finished=!1,this._pack=Z,this._openCallback=null,this._pack._stream===null)this._pack._stream=this;else this._pack._pending.push(this)}_open(Z){if(this._openCallback=Z,this._pack._stream===this)this._continueOpen()}_continuePack(Z){if(this._callback===null)return;let X=this._callback;this._callback=null,X(Z)}_continueOpen(){if(this._pack._stream===null)this._pack._stream=this;let Z=this._openCallback;if(this._openCallback=null,Z===null)return;if(this._pack.destroying)return Z(Error("pack stream destroyed"));if(this._pack._finalized)return Z(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);Z(null)}_write(Z,X){if(this._isLinkname)return this._linkname=this._linkname?iV.concat([this._linkname,Z]):Z,X(null);if(this._isVoid){if(Z.byteLength>0)return X(Error("No body allowed for this entry"));return X()}if(this.written+=Z.byteLength,this._pack.push(Z))return X();this._pack._drain=X}_finish(){if(this._finished)return;if(this._finished=!0,this._isLinkname)this.header.linkname=this._linkname?iV.toString(this._linkname,"utf-8"):"",this._pack._encode(this.header);yJ8(this._pack,this.header.size),this._pack._done(this)}_final(Z){if(this.written!==this.header.size)return Z(Error("Size mismatch"));this._finish(),Z(null)}_getError(){return bJ8(this)||Error("tar entry destroyed")}_predestroy(){this._pack.destroy(this._getError())}_destroy(Z){this._pack._done(this),this._continuePack(this._finished?null:this._getError()),Z()}}class _J8 extends HF4{constructor(Z){super(Z);this._drain=Ct0,this._finalized=!1,this._finalizing=!1,this._pending=[],this._stream=null}entry(Z,X,G){if(this._finalized||this.destroying)throw Error("already finalized or destroyed");if(typeof X==="function")G=X,X=null;if(!G)G=Ct0;if(!Z.size||Z.type==="symlink")Z.size=0;if(!Z.type)Z.type=OF4(Z.mode);if(!Z.mode)Z.mode=Z.type==="directory"?493:420;if(!Z.uid)Z.uid=0;if(!Z.gid)Z.gid=0;if(!Z.mtime)Z.mtime=new Date;if(typeof X==="string")X=iV.from(X);let Y=new xJ8(this,Z,G);if(iV.isBuffer(X))return Z.size=X.byteLength,Y.write(X),Y.end(),Y;if(Y._isVoid)return Y;return Y}finalize(){if(this._stream||this._pending.length>0){this._finalizing=!0;return}if(this._finalized)return;this._finalized=!0,this.push(vJ8),this.push(null)}_done(Z){if(Z!==this._stream)return;if(this._stream=null,this._finalizing)this.finalize();if(this._pending.length)this._pending.shift()._continueOpen()}_encode(Z){if(!Z.pax){let X=UO0.encode(Z);if(X){this.push(X);return}}this._encodePax(Z)}_encodePax(Z){let X=UO0.encodePax({name:Z.name,linkname:Z.linkname,pax:Z.pax}),G={name:"PaxHeader",mode:Z.mode,uid:Z.uid,gid:Z.gid,size:X.byteLength,mtime:Z.mtime,type:"pax-header",linkname:Z.linkname&&"PaxHeader",uname:Z.uname,gname:Z.gname,devmajor:Z.devmajor,devminor:Z.devminor};this.push(UO0.encode(G)),this.push(X),yJ8(this,X.byteLength),G.size=Z.size,G.type=Z.type,this.push(UO0.encode(G))}_doDrain(){let Z=this._drain;this._drain=Ct0,Z()}_predestroy(){let Z=bJ8(this);if(this._stream)this._stream.destroy(Z);while(this._pending.length){let X=this._pending.shift();X.destroy(Z),X._continueOpen()}this._doDrain()}_read(Z){this._doDrain(),Z()}}gJ8.exports=function(X){return new _J8(X)};function OF4(Z){switch(Z&zy.S_IFMT){case zy.S_IFBLK:return"block-device";case zy.S_IFCHR:return"character-device";case zy.S_IFDIR:return"directory";case zy.S_IFIFO:return"fifo";case zy.S_IFLNK:return"symlink"}return"file"}function Ct0(){}function yJ8(Z,X){if(X&=511,X)Z.push(vJ8.subarray(0,512-X))}function BF4(Z){return iV.isBuffer(Z)?Z:iV.from(Z)}});var uJ8=f((DF4)=>{DF4.extract=VJ8();DF4.pack=hJ8()});var dJ8=f((TVZ,lJ8)=>{lJ8.exports=cJ8;function cJ8(Z,X){if(Z&&X)return cJ8(Z)(X);if(typeof Z!=="function")throw TypeError("need wrapper function");return Object.keys(Z).forEach(function(Y){G[Y]=Z[Y]}),G;function G(){var Y=Array(arguments.length);for(var Q=0;Q<Y.length;Q++)Y[Q]=arguments[Q];var $=Z.apply(this,Y),J=Y[Y.length-1];if(typeof $==="function"&&$!==J)Object.keys(J).forEach(function(W){$[W]=J[W]});return $}}});var bt0=f((RVZ,ft0)=>{var mJ8=dJ8();ft0.exports=mJ8(HO0);ft0.exports.strict=mJ8(iJ8);HO0.proto=HO0(function(){Object.defineProperty(Function.prototype,"once",{value:function(){return HO0(this)},configurable:!0}),Object.defineProperty(Function.prototype,"onceStrict",{value:function(){return iJ8(this)},configurable:!0})});function HO0(Z){var X=function(){if(X.called)return X.value;return X.called=!0,X.value=Z.apply(this,arguments)};return X.called=!1,X}function iJ8(Z){var X=function(){if(X.called)throw Error(X.onceError);return X.called=!0,X.value=Z.apply(this,arguments)},G=Z.name||"Function wrapped with `once`";return X.onceError=G+" shouldn't be called more than once",X.called=!1,X}});var tJ8=f((IVZ,pJ8)=>{var zF4=bt0(),jF4=function(){},AF4=global.Bare?queueMicrotask:process.nextTick.bind(process),PF4=function(Z){return Z.setHeader&&typeof Z.abort==="function"},TF4=function(Z){return Z.stdio&&Array.isArray(Z.stdio)&&Z.stdio.length===3},nJ8=function(Z,X,G){if(typeof X==="function")return nJ8(Z,null,X);if(!X)X={};G=zF4(G||jF4);var{_writableState:Y,_readableState:Q}=Z,$=X.readable||X.readable!==!1&&Z.readable,J=X.writable||X.writable!==!1&&Z.writable,W=!1,K=function(){if(!Z.writable)N()},N=function(){if(J=!1,!$)G.call(Z)},F=function(){if($=!1,!J)G.call(Z)},U=function(L){G.call(Z,L?Error("exited with error code: "+L):null)},H=function(L){G.call(Z,L)},w=function(){AF4(O)},O=function(){if(W)return;if($&&!(Q&&(Q.ended&&!Q.destroyed)))return G.call(Z,Error("premature close"));if(J&&!(Y&&(Y.ended&&!Y.destroyed)))return G.call(Z,Error("premature close"))},D=function(){Z.req.on("finish",N)};if(PF4(Z))if(Z.on("complete",N),Z.on("abort",w),Z.req)D();else Z.on("request",D);else if(J&&!Y)Z.on("end",K),Z.on("close",K);if(TF4(Z))Z.on("exit",U);if(Z.on("end",F),Z.on("finish",N),X.error!==!1)Z.on("error",H);return Z.on("close",w),function(){if(W=!0,Z.removeListener("complete",N),Z.removeListener("abort",w),Z.removeListener("request",D),Z.req)Z.req.removeListener("finish",N);Z.removeListener("end",K),Z.removeListener("close",K),Z.removeListener("finish",N),Z.removeListener("exit",U),Z.removeListener("end",F),Z.removeListener("error",H),Z.removeListener("close",w)}};pJ8.exports=nJ8});var aJ8=f((qVZ,rJ8)=>{var RF4=bt0(),IF4=tJ8(),wO0;try{wO0=c0("fs")}catch(Z){}var Ep=function(){},qF4=typeof process>"u"?!1:/^v?\.0/.test(process.version),OO0=function(Z){return typeof Z==="function"},MF4=function(Z){if(!qF4)return!1;if(!wO0)return!1;return(Z instanceof(wO0.ReadStream||Ep)||Z instanceof(wO0.WriteStream||Ep))&&OO0(Z.close)},kF4=function(Z){return Z.setHeader&&OO0(Z.abort)},SF4=function(Z,X,G,Y){Y=RF4(Y);var Q=!1;Z.on("close",function(){Q=!0}),IF4(Z,{readable:X,writable:G},function(J){if(J)return Y(J);Q=!0,Y()});var $=!1;return function(J){if(Q)return;if($)return;if($=!0,MF4(Z))return Z.close(Ep);if(kF4(Z))return Z.abort();if(OO0(Z.destroy))return Z.destroy();Y(J||Error("stream was destroyed"))}},oJ8=function(Z){Z()},VF4=function(Z,X){return Z.pipe(X)},CF4=function(){var Z=Array.prototype.slice.call(arguments),X=OO0(Z[Z.length-1]||Ep)&&Z.pop()||Ep;if(Array.isArray(Z[0]))Z=Z[0];if(Z.length<2)throw Error("pump requires two streams per minimum");var G,Y=Z.map(function(Q,$){var J=$<Z.length-1,W=$>0;return SF4(Q,J,W,function(K){if(!G)G=K;if(K)Y.forEach(oJ8);if(J)return;Y.forEach(oJ8),X(G)})});return Z.reduce(VF4)};rJ8.exports=CF4});var JW8=f((xF4)=>{var sJ8=uJ8(),eJ8=aJ8(),ZW8=c0("fs"),GZ=c0("path"),zp=(global.Bare?global.Bare.platform:process.platform)==="win32";xF4.pack=function(X,G){if(!X)X=".";if(!G)G={};let Y=G.fs||ZW8,Q=G.ignore||G.filter||jp,$=G.mapStream||QW8,J=vF4(Y,G.dereference?Y.stat:Y.lstat,X,Q,G.entries,G.sort),W=G.strict!==!1,K=typeof G.umask==="number"?~G.umask:~XW8(),N=G.pack||sJ8.pack(),F=G.finish||jp,U=G.map||jp,H=typeof G.dmode==="number"?G.dmode:0,w=typeof G.fmode==="number"?G.fmode:0;if(G.strip)U=$W8(U,G.strip);if(G.readable)H|=parseInt(555,8),w|=parseInt(444,8);if(G.writable)H|=parseInt(333,8),w|=parseInt(222,8);L();function O(E,z){Y.readlink(GZ.join(X,E),function(j,A){if(j)return N.destroy(j);z.linkname=vt0(A),N.entry(z,L)})}function D(E,z,j){if(N.destroyed)return;if(E)return N.destroy(E);if(!z){if(G.finalize!==!1)N.finalize();return F(N)}if(j.isSocket())return L();let A={name:vt0(z),mode:(j.mode|(j.isDirectory()?H:w))&K,mtime:j.mtime,size:j.size,type:"file",uid:j.uid,gid:j.gid};if(j.isDirectory())return A.size=0,A.type="directory",A=U(A)||A,N.entry(A,L);if(j.isSymbolicLink())return A.size=0,A.type="symlink",A=U(A)||A,O(z,A);if(A=U(A)||A,!j.isFile()){if(W)return N.destroy(Error("unsupported type for "+z));return L()}let P=N.entry(A,L),q=$(Y.createReadStream(GZ.join(X,z),{start:0,end:A.size>0?A.size-1:A.size}),A);q.on("error",function(S){P.destroy(S)}),eJ8(q,P)}function L(E){if(E)return N.destroy(E);J(D)}return N};function fF4(Z){return Z.length?Z[Z.length-1]:null}function bF4(){return!global.Bare&&process.getuid?process.getuid():-1}function XW8(){return!global.Bare&&process.umask?process.umask():0}xF4.extract=function(X,G){if(!X)X=".";if(!G)G={};X=GZ.resolve(X);let Y=G.fs||ZW8,Q=G.ignore||G.filter||jp,$=G.mapStream||QW8,J=G.chown!==!1&&!zp&&bF4()===0,W=G.extract||sJ8.extract(),K=[],N=new Date,F=typeof G.umask==="number"?~G.umask:~XW8(),U=G.strict!==!1,H=G.validateSymlinks!==!1,w=G.map||jp,O=typeof G.dmode==="number"?G.dmode:0,D=typeof G.fmode==="number"?G.fmode:0;if(G.strip)w=$W8(w,G.strip);if(G.readable)O|=parseInt(555,8),D|=parseInt(444,8);if(G.writable)O|=parseInt(333,8),D|=parseInt(222,8);if(W.on("entry",L),G.finish)W.on("finish",G.finish);return W;function L(P,q,S){P=w(P)||P,P.name=vt0(P.name);let M=GZ.join(X,GZ.join("/",P.name));if(Q(M,P))return q.resume(),S();let C=GZ.join(M,".")===GZ.join(X,".")?X:GZ.dirname(M);YW8(Y,C,GZ.join(X,"."),function(w0,L0){if(w0)return S(w0);if(!L0)return S(Error(C+" is not a valid path"));if(P.type==="directory")return K.push([M,P.mtime]),A(M,{fs:Y,own:J,uid:P.uid,gid:P.gid,mode:P.mode},m);A(C,{fs:Y,own:J,uid:P.uid,gid:P.gid,mode:493},function(W0){if(W0)return S(W0);switch(P.type){case"file":return o();case"link":return x();case"symlink":return v()}if(U)return S(Error("unsupported type for "+M+" ("+P.type+")"));q.resume(),S()})});function m(w0){if(w0)return S(w0);z(M,P,function(L0){if(L0)return S(L0);if(zp)return S();j(M,P,S)})}function v(){if(zp)return S();Y.unlink(M,function(){let w0=GZ.resolve(GZ.dirname(M),P.linkname);if(!e(w0)&&H)return S(Error(M+" is not a valid symlink"));GW8(Y,w0,GZ.join(X,"."),function(L0,W0){if(L0)return S(L0);if(!W0&&H)return S(Error(M+" is not a valid symlink"));Y.symlink(P.linkname,M,m)})})}function x(){if(zp)return S();Y.unlink(M,function(){let w0=GZ.join(X,GZ.join("/",P.linkname));Y.realpath(w0,function(L0,W0){if(L0||!e(W0))return S(Error(M+" is not a valid hardlink"));Y.link(W0,M,function($0){if($0&&$0.code==="EPERM"&&G.hardlinkAsFilesFallback)return q=Y.createReadStream(W0),o();m($0)})})})}function e(w0){return w0===X||w0.startsWith(X+GZ.sep)}function o(){let w0=Y.createWriteStream(M),L0=$(q,P);w0.on("error",function(W0){L0.destroy(W0)}),eJ8(L0,w0,function(W0){if(W0)return S(W0);w0.on("close",m)})}}function E(P,q){let S;while((S=fF4(K))&&P.slice(0,S[0].length)!==S[0])K.pop();if(!S)return q();Y.utimes(S[0],N,S[1],q)}function z(P,q,S){if(G.utimes===!1)return S();if(q.type==="directory")return Y.utimes(P,N,q.mtime,S);if(q.type==="symlink")return E(P,S);Y.utimes(P,N,q.mtime,function(M){if(M)return S(M);E(P,S)})}function j(P,q,S){let M=q.type==="symlink",C=M?Y.lchmod:Y.chmod,m=M?Y.lchown:Y.chown;if(!C)return S();let v=(q.mode|(q.type==="directory"?O:D))&F;if(m&&J)m.call(Y,P,q.uid,q.gid,x);else x(null);function x(e){if(e)return S(e);if(!C)return S();C.call(Y,P,v,S)}}function A(P,q,S){Y.stat(P,function(M){if(!M)return S(null);if(M.code!=="ENOENT")return S(M);Y.mkdir(P,{mode:q.mode,recursive:!0},function(C,m){if(C)return S(C);j(P,q,S)})})}};function GW8(Z,X,G,Y){if(X===G)return Y(null,!0);if(!X.startsWith(G+GZ.sep))return Y(null,!1);Z.lstat(X,function(Q,$){if(Q&&Q.code!=="ENOENT"&&Q.code!=="EPERM")return Y(Q);if(Q||!$.isSymbolicLink())return GW8(Z,GZ.join(X,".."),G,Y);Y(null,!1)})}function YW8(Z,X,G,Y){if(X===G)return Y(null,!0);Z.lstat(X,function(Q,$){if(Q&&Q.code!=="ENOENT"&&Q.code!=="EPERM")return Y(Q);if(Q||$.isDirectory())return YW8(Z,GZ.join(X,".."),G,Y);Y(null,!1)})}function jp(){}function QW8(Z){return Z}function vt0(Z){return zp?Z.replace(/\\/g,"/").replace(/[:?<>|]/g,"_"):Z}function vF4(Z,X,G,Y,Q,$){if(!Q)Q=["."];let J=Q.slice(0);return function(K){if(!J.length)return K(null);let N=J.shift(),F=GZ.join(G,N);X.call(Z,F,function(U,H){if(U)return K(Q.indexOf(N)===-1&&U.code==="ENOENT"?null:U);if(!H.isDirectory())return K(null,N,H);Z.readdir(F,function(w,O){if(w)return K(w);if($)O.sort();for(let D=0;D<O.length;D++)if(!Y(GZ.join(G,N,O[D])))J.push(GZ.join(N,O[D]));K(null,N,H)})})}}function $W8(Z,X){return function(G){G.name=G.name.split("/").slice(X).join("/");let Y=G.linkname;if(Y&&(G.type==="link"||GZ.isAbsolute(Y)))G.linkname=Y.split("/").slice(X).join("/");return Z(G)}}});var gF4,hF4;var WW8=B(()=>{Et0();gF4=k(t$8(),1),hF4=k(JW8(),1)});var BO0=()=>{};var KW8=B(()=>{Sw0()});var NW8=B(()=>{GO0();XO0();BO0()});var FW8=()=>{};var UW8=()=>{};var xt0=B(()=>{S$8();Dt0();GO0();v$8();Ot0();Et0();x$8();_$8();y$8();g$8();Bt0();h$8();WW8();BO0();KW8();NW8();FW8();UW8();BO0()});var AZ,gZ,nV,Ap;var Pp=B(()=>{AZ={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"};gZ=class gZ extends Error{cause;constructor(Z,X){super(Z);if(this.name="SandboxError",this.cause=X,X instanceof Error&&X.stack)this.stack=`${this.stack}
1269
1269
  Caused by: ${X.stack}`}};nV=class nV extends gZ{constructor(Z,X){super(Z,X);this.name="SandboxTimeoutError"}};Ap=class Ap extends gZ{constructor(Z,X){super(Z,X);this.name="SandboxAlreadyExistsError"}}});async function uF4(Z){let X=Z.getCurrentCluster();if(!X)throw new gZ("No active cluster in kubeconfig");let G={};await Z.applyToHTTPSOptions(G);let Y={},Q=G.headers??{};for(let[$,J]of Object.entries(Q))if(Array.isArray(J))Y[$]=J.join(", ");else if(J!==void 0)Y[$]=String(J);if(typeof G.auth==="string"&&!Y.Authorization)Y.Authorization=`Basic ${Buffer.from(G.auth).toString("base64")}`;return{server:X.server.replace(/\/+$/,""),headers:Y,tls:{cert:_t0(G.cert),key:_t0(G.key),ca:_t0(G.ca),rejectUnauthorized:X.skipTLSVerify?!1:void 0}}}function _t0(Z){if(Z==null)return;if(typeof Z==="string")return Z;if(Buffer.isBuffer(Z))return Z.toString("utf8");return String(Z)}async function pV(Z,X){let G=await uF4(Z),Y={...G.headers,...X.headers};if(X.method==="PATCH")Y["content-type"]=X.patchType==="apply"?"application/apply-patch+yaml":X.patchType==="strategic-merge"?"application/strategic-merge-patch+json":"application/merge-patch+json";else if(X.body!==void 0&&!("content-type"in Y))Y["content-type"]="application/json";let Q={method:X.method,headers:Y,body:X.body===void 0?void 0:JSON.stringify(X.body),signal:X.signal,tls:G.tls,...X.stream?{timeout:!1}:{}};return fetch(`${G.server}${X.path}`,Q)}async function yt0(Z){try{return await Z.json()}catch{return null}}async function gt0(Z,X){if(Z.ok)return;let G=await yt0(Z),Y=G?.message??`${X} failed: ${Z.status} ${Z.statusText}`;throw new HW8(Z.status,G,Y)}async function Tp(Z,X,G,Y,Q="none"){try{let $=await pV(Z,X);if($.status===404)return null;if(await gt0($,G),Q==="json")return await $.json();return null}catch($){throw new gZ(Y,$)}}async function Rp(Z,X,G){let Y=`${wW8}/${encodeURIComponent(X)}/${AZ.CLAIM_PLURAL}`,Q;try{Q=await pV(Z,{method:"POST",path:Y,body:G})}catch(N){let F=N instanceof Error?N.message:String(N);throw console.warn(`[agent-sandbox/client] createSandboxClaim ${G.metadata.name} transport error: ${F}`),new gZ(`Failed to create SandboxClaim: ${G.metadata.name} (transport error: ${F})`,N)}if(Q.ok)return;let $=await yt0(Q),J=$?.reason?` ${$.reason}`:"",W=$?.message??Q.statusText,K=`Failed to create SandboxClaim: ${G.metadata.name} (${Q.status}${J}: ${W})`;if(console.warn(`[agent-sandbox/client] createSandboxClaim ${G.metadata.name} rejected: status=${Q.status} reason=${$?.reason??"<none>"} message=${W}`),Q.status===409)throw new Ap(K);throw new gZ(K)}async function DO0(Z,X,G,Y=60000){let Q=Date.now()+Y,$=500,J;while(!0){let W=await vF(Z,X,G).catch(()=>{return});if(!W)return;if(J=W,Date.now()>=Q){let K=J.metadata?.finalizers??[],N=J.metadata?.deletionTimestamp??"<unknown>";throw new nV(`SandboxClaim ${G} still terminating after ${Y}ms (deletionTimestamp=${N}, finalizers=[${K.join(", ")}])`)}await d6(500)}}function ht0(Z,X){return`${wW8}/${encodeURIComponent(Z)}/${AZ.CLAIM_PLURAL}/${encodeURIComponent(X)}`}async function OW8(Z,X,G,Y){await Tp(Z,{method:"PATCH",path:ht0(X,G),patchType:"merge",body:{spec:{lifecycle:{shutdownPolicy:"Delete",shutdownTime:Y}}}},"patchSandboxClaimShutdown",`Failed to patch SandboxClaim shutdownTime: ${G}`)}async function FO(Z,X,G){await Tp(Z,{method:"DELETE",path:ht0(X,G)},"deleteSandboxClaim",`Failed to delete SandboxClaim: ${G}`)}async function vF(Z,X,G){return await Tp(Z,{method:"GET",path:ht0(X,G)},"getSandboxClaim",`Failed to get SandboxClaim: ${G}`,"json")??void 0}async function BW8(Z,X,G,Y=60){let Q=Date.now()+Y*1000,$=200;while(Date.now()<Q){let W=(await vF(Z,X,G).catch(()=>{return}))?.status?.sandbox?.name;if(W)return W;await d6(200)}throw new nV(`SandboxClaim ${G} did not record an adopted Sandbox (status.sandbox.name) within ${Y}s`)}function ut0(Z,X){return`${cF4}/${encodeURIComponent(Z)}/${EW8}/${encodeURIComponent(X)}`}async function LO0(Z,X,G){let Y=new URLSearchParams({fieldManager:jW8,force:"true"}),Q=`${ut0(X,G.metadata.name)}?${Y}`;try{let $=await pV(Z,{method:"PATCH",path:Q,patchType:"apply",body:G});await gt0($,"applyHttpRoute")}catch($){throw new gZ(`Failed to apply HTTPRoute: ${G.metadata.name}`,$)}}async function EO0(Z,X,G){await Tp(Z,{method:"DELETE",path:ut0(X,G)},"deleteHttpRoute",`Failed to delete HTTPRoute: ${G}`)}async function zW8(Z,X,G){return await Tp(Z,{method:"GET",path:ut0(X,G)},"getHttpRoute",`Failed to get HTTPRoute: ${G}`,"json")??void 0}async function AW8(Z,X,G,Y){let Q={apiVersion:"v1",kind:"Service",metadata:{name:G},spec:{ports:[{name:Y.name,port:Y.port,targetPort:Y.targetPort,protocol:Y.protocol??"TCP"}]}},$=new URLSearchParams({fieldManager:jW8,force:"true"}),J=`/api/v1/namespaces/${encodeURIComponent(X)}/services/${encodeURIComponent(G)}?${$}`;try{let W=await pV(Z,{method:"PATCH",path:J,patchType:"apply",body:Q});await gt0(W,"ensureServicePort")}catch(W){throw new gZ(`Failed to apply Service ports: ${G}`,W)}}function zO0(Z,X,G,Y=180){let Q=`/apis/${AZ.SANDBOX_API_GROUP}/${AZ.SANDBOX_API_VERSION}/namespaces/${encodeURIComponent(X)}/${AZ.SANDBOX_PLURAL}?watch=true&fieldSelector=${encodeURIComponent(`metadata.name=${G}`)}`,{resolve:$,reject:J,promise:W}=Promise.withResolvers(),K=new AbortController,N=!1,F=setTimeout(()=>{if(N)return;N=!0,K.abort(),J(new nV(`Sandbox did not become ready within ${Y} seconds`))},Y*1000),U=(H)=>{if(N)return;N=!0,clearTimeout(F),K.abort(),H()};return(async()=>{let H;try{H=await pV(Z,{method:"GET",path:Q,signal:K.signal,headers:{accept:"application/json"},stream:!0})}catch(w){U(()=>J(new gZ("Failed to start watch for sandbox readiness",w)));return}if(!H.ok||!H.body){let w=await yt0(H).catch(()=>null);U(()=>J(new gZ(`Watch handshake failed (${H.status}): ${w?.message??H.statusText}`)));return}try{for await(let w of ct0(H.body)){if(N)return;if(w.type==="ERROR"){let z=w.object;U(()=>J(new gZ(`Watch stream error while waiting for sandbox: ${z.message??"unknown"}`)));return}if(w.type!=="ADDED"&&w.type!=="MODIFIED")continue;let O=w.object;if(!O.status?.conditions?.find((z)=>z.type==="Ready"&&z.status==="True"))continue;let L=O.metadata?.name;if(!L){U(()=>J(new gZ("Sandbox metadata or name is missing")));return}let E=O.metadata?.annotations?.[AZ.POD_NAME_ANNOTATION]??L;U(()=>$({sandboxName:L,podName:E}));return}U(()=>J(new gZ("Watch stream closed before sandbox became ready")))}catch(w){if(N)return;if(w instanceof Error&&(w.name==="AbortError"||K.signal.aborted))return;U(()=>J(new gZ("Watch stream error while waiting for sandbox",w)))}})(),W}async function*ct0(Z){let X=Z.getReader(),G=new TextDecoder,Y="";try{while(!0){let{value:$,done:J}=await X.read();if(J)break;Y+=G.decode($,{stream:!0});let W;while((W=Y.indexOf(`
1270
- `))>=0){let K=Y.slice(0,W).trim();if(Y=Y.slice(W+1),!K)continue;yield JSON.parse(K)}}let Q=Y.trim();if(Q)yield JSON.parse(Q)}finally{X.releaseLock()}}var HW8,wW8,DW8="gateway.networking.k8s.io",LW8="v1",EW8="httproutes",cF4,Ip,jW8="mesh-sandbox-runner";var jO0=B(()=>{c9();Pp();HW8=class HW8 extends Error{status;body;constructor(Z,X,G){super(G);this.status=Z;this.body=X;this.name="KubeHttpError"}};wW8=`/apis/${AZ.CLAIM_API_GROUP}/${AZ.CLAIM_API_VERSION}/namespaces`;cF4=`/apis/${DW8}/${LW8}/namespaces`;Ip={API_GROUP:DW8,API_VERSION:LW8,PLURAL:EW8}});var AO0=B(()=>{c9();g70()});async function TO0(Z){try{let X=await fetch(`${Z}/health`,{signal:AbortSignal.timeout(lF4)});if(!X.ok)return null;let G=await X.json();if(typeof G==="object"&&G!==null&&typeof G.bootId==="string"&&typeof G.ready==="boolean"&&G.setup&&typeof G.setup.running==="boolean"&&typeof G.setup.done==="boolean")return G;return null}catch{return null}}async function IW8(Z){for(let X=0;X<PW8;X++){if(await TO0(Z)!==null)return;let G=(Math.random()*2-1)*dF4;await d6(TW8+G)}throw Error(`sandbox daemon at ${Z} did not respond on /health within ${PW8*TW8/1000}s`)}async function jy(Z,X,G,Y,Q){return mF4(Z,X,"POST",G,Y,Q)}async function mF4(Z,X,G,Y,Q,$){let J={...Y};if(Q&&Q.rotateToken!==void 0)J.auth=Q;let W=await fetch(`${Z}/_sandbox/config`,{method:G,headers:{"Content-Type":"application/json",Authorization:`Bearer ${X}`},body:JSON.stringify(J),signal:AbortSignal.timeout($?.timeoutMs??RW8)}),K=await W.text();if(!W.ok)throw new PO0(W.status,K);return JSON.parse(K)}async function qW8(Z,X,G){let Y=await fetch(`${Z}/_sandbox/orgfs-config`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${X}`},body:G,signal:AbortSignal.timeout(RW8)}),Q=await Y.text();if(!Y.ok)throw Error(`sandbox daemon /_sandbox/orgfs-config returned ${Y.status}: ${Q}`);return JSON.parse(Q)}async function qp(Z,X,G,Y){let Q=new Headers(Y.headers);for(let W of iF4)Q.delete(W);Q.set("authorization",`Bearer ${X}`);let $=Y.method!=="GET"&&Y.method!=="HEAD",J=`${Z}${G.startsWith("/")?G:`/${G}`}`;return fetch(J,{method:Y.method,headers:Q,body:$?Y.body:void 0,redirect:"manual",signal:Y.signal,duplex:$?"half":void 0})}var PO0,lF4=500,RW8=30000,PW8=25,TW8=200,dF4=50,iF4;var MW8=B(()=>{AO0();PO0=class PO0 extends Error{status;constructor(Z,X){super(`sandbox daemon /_sandbox/config returned ${Z}: ${X}`);this.status=Z;this.name="ConfigRequestError"}};iF4=["cookie","host","connection","keep-alive","proxy-authenticate","proxy-authorization","te","trailer","transfer-encoding","accept-encoding","content-length"]});async function*VW8(Z){let X=Z.now??(()=>Date.now()),G=X(),Y=Z.schedulingTimeoutMs??tF4,Q={pod:{},sandbox:{},events:{hasPulling:!1,hasPulled:!1},startedAt:G},$=[],J=null,W=!1,K=(z)=>{if(W)return;if(J){let j=J;J=null,j(z)}else $.push(z)},N=()=>{if($.length>0)return Promise.resolve($.shift());if(W)return Promise.resolve(null);return new Promise((z)=>{J=z})},F=()=>{if(W)return;if(W=!0,J){let z=J;J=null,z(null)}},U=new AbortController,H=()=>{U.abort(),F()};if(Z.signal)if(Z.signal.aborted)U.abort(),F();else Z.signal.addEventListener("abort",H,{once:!0});let w=Math.max(0,Y-(X()-G)),O=setTimeout(()=>K("tick"),w+100),D,L=new Promise((z)=>{D=z}),E=Promise.allSettled([oF4(Z.kc,Z.namespace,Z.claimName,U.signal,Q,K,X,D),aF4(Z.kc,Z.namespace,Z.claimName,U.signal,Q,K),sF4(Z.kc,Z.namespace,Z.claimName,L,U.signal,Q,K,X)]);try{let z=null,j=-1,A=kW8(Q,Y,X);if(z=dt0(A),!lt0(A))j=SW8(A);if(yield A,lt0(A))return;while(!W){if(await N()===null)break;let q=kW8(Q,Y,X);if(lt0(q)){let C=dt0(q);if(C!==z)z=C,yield q;return}let S=SW8(q);if(S<j)continue;let M=dt0(q);if(M!==z)z=M,j=S,yield q}}finally{if(clearTimeout(O),U.abort(),Z.signal)Z.signal.removeEventListener("abort",H);F(),await E.catch(()=>{})}}function kW8(Z,X,G){let{pod:Y,sandbox:Q,events:$,startedAt:J}=Z;if(Q.ready)return{kind:"ready"};let W=Y.containerWaitingReason;if(W==="ImagePullBackOff"||W==="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(W==="CrashLoopBackOff")return{kind:"failed",reason:"crash-loop-backoff",message:"Sandbox crashed during startup and is now in CrashLoopBackOff. Check pod logs."};if(!Y.scheduled&&$.lastFailedSchedulingAt!==void 0&&G()-J>X)return{kind:"failed",reason:"scheduling-timeout",message:$.failedSchedulingMessage??`Pod could not be scheduled within ${Math.round(X/1000)}s.`};if(Y.containerRunning&&!Y.containerReady)return{kind:"warming-daemon",since:J};if($.hasPulling&&!$.hasPulled)return{kind:"pulling-image",since:J};if(W==="ContainerCreating"||W==="PodInitializing"||Y.scheduled&&!Y.containerRunning)return{kind:"starting-container",since:J};if(Y.scheduledFalseReason==="Unschedulable"||$.lastFailedSchedulingAt!==void 0&&!Y.scheduled)return{kind:"waiting-for-capacity",since:J,message:$.failedSchedulingMessage??Y.scheduledFalseMessage,nodeClaim:$.nominatedNodeClaim};return{kind:"claiming",since:J}}function lt0(Z){return Z.kind==="ready"||Z.kind==="failed"}function SW8(Z){switch(Z.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 dt0(Z){switch(Z.kind){case"claiming":case"pulling-image":case"starting-container":case"warming-daemon":return Z.kind;case"waiting-for-capacity":return`waiting-for-capacity:${Z.message??""}:${Z.nodeClaim??""}`;case"ready":return"ready";case"failed":return`failed:${Z.reason}:${Z.message}`}}async function oF4(Z,X,G,Y,Q,$,J,W){let K=`/api/v1/namespaces/${encodeURIComponent(X)}/pods?watch=true&labelSelector=${encodeURIComponent(`${nF4}=${G}`)}`;return RO0({kc:Z,path:K,signal:Y,label:`pod/${G}`,onEvent:(N)=>{if(N.type!=="ADDED"&&N.type!=="MODIFIED")return;let F=N.object;if(F.metadata?.name)W(F.metadata.name);rF4(F,Q,J),$("pod")}})}function rF4(Z,X,G){let Q=(Z.status?.conditions??[]).find((J)=>J.type==="PodScheduled");if(Q?.status==="True")X.pod.scheduled=!0,X.pod.scheduledFalseReason=void 0,X.pod.scheduledFalseMessage=void 0;else if(Q?.status==="False")X.pod.scheduled=!1,X.pod.scheduledFalseReason=Q.reason,X.pod.scheduledFalseMessage=Q.message;let $=(Z.status?.containerStatuses??[]).find((J)=>J.name===pF4);if($)X.pod.containerWaitingReason=$.state?.waiting?.reason,X.pod.containerRunning=!!$.state?.running,X.pod.containerReady=$.ready===!0}async function aF4(Z,X,G,Y,Q,$){let J=`/apis/${AZ.CLAIM_API_GROUP}/${AZ.CLAIM_API_VERSION}/namespaces/${encodeURIComponent(X)}/${AZ.CLAIM_PLURAL}?watch=true&fieldSelector=${encodeURIComponent(`metadata.name=${G}`)}`;return RO0({kc:Z,path:J,signal:Y,label:`sandboxclaim/${G}`,onEvent:(W)=>{if(W.type!=="ADDED"&&W.type!=="MODIFIED")return;let N=W.object.status?.conditions?.find((F)=>F.type==="Ready");if(!N)return;if(N.status==="True")Q.sandbox.ready=!0,Q.sandbox.notReadyReason=void 0,Q.sandbox.notReadyMessage=void 0;else Q.sandbox.ready=!1,Q.sandbox.notReadyReason=N.reason,Q.sandbox.notReadyMessage=N.message;$("sandbox")}})}async function sF4(Z,X,G,Y,Q,$,J,W){let K=await Promise.race([Y,new Promise((F)=>{if(Q.aborted){F(G);return}Q.addEventListener("abort",()=>F(G),{once:!0})})]);if(Q.aborted)return;let N=`/api/v1/namespaces/${encodeURIComponent(X)}/events?watch=true&fieldSelector=${encodeURIComponent(`involvedObject.name=${K},involvedObject.kind=Pod`)}`;return RO0({kc:Z,path:N,signal:Q,label:`events/${G}`,onEvent:(F)=>{if(F.type!=="ADDED"&&F.type!=="MODIFIED")return;let U=F.object,H=U.reason;if(!H)return;switch(H){case"Pulling":$.events.hasPulling=!0;break;case"Pulled":$.events.hasPulling=!0,$.events.hasPulled=!0;break;case"FailedScheduling":$.events.lastFailedSchedulingAt=W(),$.events.failedSchedulingMessage=U.message;break;case"Nominated":{let w=U.message?.match(/nodeclaim\/([\w-]+)/);if(w)$.events.nominatedNodeClaim=w[1];break}default:return}J("event")}})}async function CW8(Z){let{kc:X,namespace:G,labelSelector:Y,signal:Q,onDelete:$}=Z,J=`/apis/${AZ.CLAIM_API_GROUP}/${AZ.CLAIM_API_VERSION}/namespaces/${encodeURIComponent(G)}/${AZ.CLAIM_PLURAL}?watch=true&labelSelector=${encodeURIComponent(Y)}`;return RO0({kc:X,path:J,signal:Q,label:"sandboxclaim-reaper",onEvent:(W)=>{if(W.type!=="DELETED")return;let K=W.object.metadata?.name;if(K)$(K)}})}async function RO0(Z){let{kc:X,path:G,signal:Y,label:Q,onEvent:$}=Z,J=0;while(!Y.aborted){try{let K=await pV(X,{method:"GET",path:G,signal:Y,headers:{accept:"application/json"},stream:!0});if(!K.ok||!K.body){try{await K.body?.cancel()}catch{}if(K.status===401||K.status===403){console.warn(`[lifecycle-watcher] ${Q} stopped: watch denied (${K.status} ${K.statusText}). `+"The kubeconfig in use cannot watch SandboxClaims \u2014 if you are running locally, "+"this provider should not be active (check STUDIO_SANDBOX_PROVIDER / your sandbox preference).");return}throw Error(`watch handshake failed: ${K.status} ${K.statusText}`)}J=0;for await(let N of ct0(K.body)){if(Y.aborted)return;try{$(N)}catch(F){console.warn(`[lifecycle-watcher] ${Q} onEvent threw: ${F instanceof Error?F.message:String(F)}`)}}}catch(K){if(Y.aborted)return;let N=K instanceof Error?K.message:String(K);console.warn(`[lifecycle-watcher] ${Q} watch ended: ${N}`)}if(Y.aborted)return;let W=eY(5000,250,J,2,0);J+=1,await d6(W,{signal:Y}).catch(()=>{})}}var nF4="studio.decocms.com/sandbox-handle",pF4="sandbox",tF4=300000;var fW8=B(()=>{c9();Pp();jO0()});async function bW8(Z,X,G){let Y=new Map;for(let Q of Z){let $=X(Q);if(!$)continue;let J=Y.get($);if(J)J.push(Q);else Y.set($,[Q])}await Promise.allSettled([...Y.values()].map(async(Q)=>{for(let $ of Q)await G($).catch(()=>{})}))}import{createHash as eF4,randomBytes as ZU4,randomUUID as XU4}from"crypto";import*as gW8 from"net";import{PassThrough as GU4}from"stream";function YU4(Z){if(Z instanceof Error)return Z.message;if(Z&&typeof Z==="object"){let X=Z;if(X.error instanceof Error)return X.error.message;if(typeof X.message==="string"&&X.message)return X.message}return String(Z)}class ot0{kind=dY;records=new Map;inflight=new x70;stateStore;previewUrlPattern;kubeConfig;portForward;namespace;sandboxTemplateName;goSandboxTemplateName;envName;tokenGenerator;idleTtlMs;metrics;previewGateway;sentinelToken;mintCloneUrl;closed=!1;claimWatchAbort=new AbortController;constructor(Z={}){this.stateStore=Z.stateStore??null,this.previewUrlPattern=Z.previewUrlPattern??null,this.kubeConfig=Z.kubeConfig??BU4(),this.portForward=new zt0(this.kubeConfig),this.namespace=Z.namespace??QU4,this.sandboxTemplateName=Z.sandboxTemplateName??$U4;let X=Z.goSandboxTemplateName?.trim()??"";this.goSandboxTemplateName=X.length>0?X:null,this.envName=AU4(Z.envName),this.tokenGenerator=Z.tokenGenerator??(()=>ZU4(WU4).toString("hex")),this.idleTtlMs=Z.idleTtlMs??NU4,this.metrics=Z.meter?OU4(Z.meter):null,this.previewGateway=Z.previewGateway&&Z.previewUrlPattern?{...Z.previewGateway}:null;let G=Z.sentinelToken?.trim()??"";this.sentinelToken=G.length>0?G:null,this.mintCloneUrl=Z.mintCloneUrl,this.startClaimReaper(),this.startCredentialRefresher()}startClaimReaper(){let Z=["app.kubernetes.io/managed-by=studio","app.kubernetes.io/name=studio-sandbox",...this.envName?[`${iG.env}=${this.envName}`]:[]].join(",");CW8({kc:this.kubeConfig,namespace:this.namespace,labelSelector:Z,signal:this.claimWatchAbort.signal,onDelete:(X)=>this.invalidateRecord(X)})}async ensure(Z,X={}){let G=ow(Z,X.branch??X.repo?.branch??null);return this.inflight.run(G,()=>_70(this.stateStore,Z,dY,(Y)=>this.ensureLocked(Z,G,X,Y)))}async delete(Z){let X=await this.getRecord(Z);if(this.records.delete(Z),X)this.closeForwarder(X.daemonForward),this.metrics?.active.add(-1,pt0(X.tenant,X.daemonImpl));if(await this.deleteHttpRouteIfManaged(Z).catch((G)=>{console.warn(`[${PZ}] HTTPRoute delete failed for ${Z}: ${G instanceof Error?G.message:String(G)}`)}),await FO(this.kubeConfig,this.namespace,Z),this.stateStore)if(X)await this.stateStore.delete(X.id,dY);else await this.stateStore.deleteByHandle(dY,Z)}async alive(Z){return await vF(this.kubeConfig,this.namespace,Z)!==void 0}watchClaimLifecycle(Z,X){return VW8({kc:this.kubeConfig,namespace:this.namespace,claimName:Z,signal:X})}async getPreviewUrl(Z){let X=await this.getRecord(Z);if(!X)return null;return this.composePreviewUrl(X)}async proxyDaemonRequest(Z,X,G){let Y=await this.getRecord(Z);if(!Y&&this.previewUrlPattern&&this.stateStore){let K=await this.stateStore.getByHandle(dY,Z),N=K?.state,F=N?.token;if(K&&F){let H=`http://${N?.adoptedSandboxName??Z}.${this.namespace}.svc.cluster.local:${UO}`;try{let w=await qp(H,F,X,G);if(w.status!==404)return w;try{await w.body?.cancel()}catch{}}catch{}}}if(!Y)Y=await this.resurrectByHandle(Z);if(!Y)return new Response(JSON.stringify({error:"sandbox not found"}),{status:404,headers:{"content-type":"application/json"}});let Q=Y,$=performance.now(),J=0,W=!(G.body instanceof ReadableStream);try{let K=await qp(Y.daemonUrl,Y.token,X,G);if(K.status===401&&W){this.invalidateRecord(Z);let N=await this.getRecord(Z).catch(()=>null)??await this.resurrectByHandle(Z).catch(()=>null);if(N)Q=N,K=await qp(N.daemonUrl,N.token,X,G)}return J=K.status,K}catch(K){if(!W)throw K;this.invalidateRecord(Z);let N=await this.resurrectByHandle(Z)??await this.getRecord(Z).catch(()=>null);if(!N)throw K;Q=N;let F=await qp(N.daemonUrl,N.token,X,G);return J=F.status,F}finally{this.recordProxyDuration("daemon",J,Q,performance.now()-$)}}async adoptLiveClaim(Z,X){if(this.records.has(X))return!0;let G=await vF(this.kubeConfig,this.namespace,X).catch(()=>{return});if(!G||G.metadata?.deletionTimestamp)return!1;return await this.inflight.run(X,async()=>{let Q=this.records.get(X);if(Q)return this.toSandbox(Q);let $=await this.adopt(Z,X,G);if(!$)throw Error(`cannot adopt live claim ${X}`);return _70(this.stateStore,Z,dY,(J)=>this.finish($,J,!0,!0,"adopt"))}).catch(()=>null)!=null}async resolvePreviewUpstreamUrl(Z){if(this.previewUrlPattern)return`http://${await this.resolveServiceNameForHandle(Z)}.${this.namespace}.svc.cluster.local:${UO}`;let X=await this.getRecord(Z);if(X)return X.daemonUrl;let G=await this.resurrectByHandle(Z);return G?G.daemonUrl:null}async resolveServiceNameForHandle(Z){let X=this.records.get(Z);if(X)return X.adoptedSandboxName;if(this.stateStore){let Y=(await this.stateStore.getByHandle(dY,Z).catch(()=>null))?.state?.adoptedSandboxName;if(Y)return Y}return Z}async proxyPreviewRequest(Z,X){let G=performance.now(),Y=this.records.get(Z)??null,Q=0;try{let $=await this.resolvePreviewUpstreamUrl(Z);if(!$){Q=404;let O=it0(404,{error:"sandbox not found"});return O.headers.set(oV,"1"),O}let J=new URL(X.url);if((J.pathname==="/_sandbox"||J.pathname.startsWith("/_sandbox/")||J.pathname==="/_decopilot_vm"||J.pathname.startsWith("/_decopilot_vm/"))&&X.method!=="GET")return Q=404,it0(404,{error:"not found"});let K=(O)=>`${O}${J.pathname}${J.search}`,N=new Headers(X.headers);for(let O of HU4)N.delete(O);let F=X.method!=="GET"&&X.method!=="HEAD",U={method:X.method,headers:N,body:F?X.body:void 0,redirect:"manual",signal:X.signal,duplex:F?"half":void 0},H;try{H=await fetch(K($),U)}catch(O){let D=`${$}${J.pathname}`;if(console.warn(`[${PZ}] preview fetch to ${D} failed: ${O instanceof Error?O.message:String(O)}`),X.method==="GET"||X.method==="HEAD"){if(this.invalidateRecord(Z),await this.resurrectByHandle(Z).catch(()=>null)){let z=await this.resolvePreviewUpstreamUrl(Z);if(z)try{H=await fetch(K(z),U);let j=new Headers;for(let[A,P]of H.headers.entries())if(!vW8.includes(A.toLowerCase()))j.set(A,P);return Q=H.status,new Response(H.body,{status:H.status,statusText:H.statusText,headers:j})}catch(j){console.warn(`[${PZ}] preview fetch retry to ${D} failed: ${j instanceof Error?j.message:String(j)}`)}}}else this.invalidateRecord(Z);Q=502;let L=it0(502,{error:"sandbox daemon unreachable"});return L.headers.set(oV,"1"),L}let w=new Headers;for(let[O,D]of H.headers.entries())if(!vW8.includes(O.toLowerCase()))w.set(O,D);return Q=H.status,new Response(H.body,{status:H.status,statusText:H.statusText,headers:w})}finally{this.recordProxyDuration("preview",Q,Y,performance.now()-G,Z)}}async ensureLocked(Z,X,G,Y){if(G.image)console.warn(`[${PZ}] opts.image ignored (template ${this.sandboxTemplateName} pins image): got ${G.image}`);if(Y){let J=await Y.get(Z,dY);if(J){let W=await this.rehydrate(Z,X,J);if(W)return await this.refreshDaemonGitCredential(W,G),this.finish(W,Y,!1,!0,"resume");await Y.delete(Z,dY)}}let Q=await vF(this.kubeConfig,this.namespace,X).catch(()=>{return});if(Q)if(Q.metadata?.deletionTimestamp)await DO0(this.kubeConfig,this.namespace,X).catch((J)=>{console.warn(`[${PZ}] wait for terminating claim ${X} failed: ${J instanceof Error?J.message:String(J)}`)});else{let J=await this.adopt(Z,X,Q).catch((W)=>{return console.warn(`[${PZ}] adopt ${X} failed, recreating: ${W instanceof Error?W.message:String(W)}`),null});if(J)return await this.refreshDaemonGitCredential(J,G),this.finish(J,Y,!0,!0,"adopt");await FO(this.kubeConfig,this.namespace,X).catch(()=>{}),await DO0(this.kubeConfig,this.namespace,X).catch((W)=>{console.warn(`[${PZ}] wait for deleted claim ${X} failed: ${W instanceof Error?W.message:String(W)}`)})}let $=await this.provision(Z,X,G);return this.finish($,Y,!0,!1,"fresh")}async finish(Z,X,G,Y,Q){let $=this.records.get(Z.handle),J=$!==void 0;if($&&$.daemonForward!==Z.daemonForward)this.closeForwarder($.daemonForward);if(this.records.set(Z.handle,Z),G)await this.persist(X,Z);if(Y)await OW8(this.kubeConfig,this.namespace,Z.handle,this.computeShutdownTime()).catch((W)=>console.warn(`[${PZ}] TTL refresh failed for ${Z.handle}: ${W instanceof Error?W.message:String(W)}`));if(this.metrics){let W=pt0(Z.tenant,Z.daemonImpl);if(this.metrics.ensureOutcome.add(1,{...W,outcome:Q}),!J)this.metrics.active.add(1,W)}return this.toSandbox(Z)}buildEnvMap(Z,X){let G={},Y=[];for(let[Q,$]of Object.entries(Z.env??{}))if(KU4.has(Q))Y.push(Q);else G[Q]=$;if(Y.length>0)console.warn(`[${PZ}] opts.env keys overlap reserved bootstrap names and were dropped: ${Y.join(",")}`);return{...G,DAEMON_TOKEN:X.token,DAEMON_BOOT_ID:X.daemonBootId,APP_ROOT:X.workdir,PROXY_PORT:String(UO)}}buildClaim(Z,X,G){let Y=this.sentinelToken!==null,Q=Y?[]:Object.entries(this.buildEnvMap(X,G)).sort(([N],[F])=>N<F?-1:N>F?1:0).map(([N,F])=>({name:N,value:F})),$=RU4(X),J=Object.keys($).length>0,{impl:W,templateName:K}=_W8(X.daemonImpl,this.sandboxTemplateName,this.goSandboxTemplateName);if(X.daemonImpl==="go"&&W!=="go")console.warn(`[${PZ}] daemonImpl=go requested for ${Z} but no Go SandboxTemplate is configured (STUDIO_SANDBOX_GO_TEMPLATE_NAME); landing on ts`);return{apiVersion:`${AZ.CLAIM_API_GROUP}/${AZ.CLAIM_API_VERSION}`,kind:"SandboxClaim",metadata:{name:Z,namespace:this.namespace,labels:{"app.kubernetes.io/name":"studio-sandbox","app.kubernetes.io/managed-by":"studio",[iG.daemonImpl]:W,...this.envName?{[iG.env]:this.envName}:{},...nt0(X.tenant)},...J?{annotations:$}:{}},spec:{sandboxTemplateRef:{name:K},additionalPodMetadata:{labels:nt0(X.tenant,{[iG.role]:"claimed",[iG.sandboxHandle]:Z,[iG.daemonImpl]:W,...this.envName?{[iG.env]:this.envName}:{}}),...J?{annotations:$}:{}},env:Q,warmpool:Y?"default":"none",lifecycle:{shutdownPolicy:"Delete",shutdownTime:this.computeShutdownTime()}}}}async provision(Z,X,G){let Y=this.tokenGenerator(),Q=XU4(),$=mt0,{impl:J}=_W8(G.daemonImpl,this.sandboxTemplateName,this.goSandboxTemplateName),W=this.buildClaim(X,G,{token:Y,daemonBootId:Q,workdir:$});try{await Rp(this.kubeConfig,this.namespace,W)}catch(w){if(w instanceof Ap)await DO0(this.kubeConfig,this.namespace,X),await Rp(this.kubeConfig,this.namespace,W);else throw w}let K;try{K=await BW8(this.kubeConfig,this.namespace,X),await zO0(this.kubeConfig,this.namespace,K)}catch(w){throw await FO(this.kubeConfig,this.namespace,X).catch(()=>{}),w}try{await this.ensureServicePortForAdoptedSandbox(K),await this.ensureHttpRouteForHandle(X,K,G.tenant??null)}catch(w){throw await FO(this.kubeConfig,this.namespace,X).catch(()=>{}),w}let N=await this.openForwarder(K,UO,X),F=`http://127.0.0.1:${N.localPort}`,U=this.workloadConfigPayload(G),H=Q;try{if(await IW8(F),this.sentinelToken!==null){let w=await TO0(F);if(w)H=w.bootId;await jy(F,this.sentinelToken,U??{},{rotateToken:Y})}else if(U)await jy(F,Y,U);await this.relayOrgFsConfig(F,Y,G.orgFsConfigJson)}catch(w){throw this.closeForwarder(N),await this.deleteHttpRouteIfManaged(X).catch(()=>{}),await FO(this.kubeConfig,this.namespace,X).catch(()=>{}),w}return{id:Z,handle:X,adoptedSandboxName:K,token:Y,workdir:$,daemonUrl:F,daemonForward:N,workload:G.workload??null,daemonBootId:H,tenant:G.tenant??null,daemonImpl:J,ensureOpts:MU4({...G,daemonImpl:J})}}workloadConfigPayload(Z){return Mn0({runtime:Z?.workload?.runtime??"node",packageManager:Z?.workload?.packageManager?{name:Z.workload.packageManager,...Z.workload.packageManagerPath?{path:Z.workload.packageManagerPath}:{}}:null,repo:Z?.repo??null,port:Z?.workload?.devPort??JU4,tenant:Z?.tenant??void 0})}async relayOrgFsConfig(Z,X,G){if(!G)return;await qW8(Z,X,G).catch((Y)=>console.warn("[org-fs] sidecar config relay failed",Y))}async refreshDaemonGitCredential(Z,X){let G=kn0(X);if(!G)return;try{await jy(Z.daemonUrl,Z.token,G)}catch(Y){console.warn(`[${PZ}] git credential refresh failed for ${Z.handle}: ${Y instanceof Error?Y.message:String(Y)}`)}}async withFreshCloneUrl(Z,X){if(!this.mintCloneUrl)return Z;try{let G=await this.mintCloneUrl(Z,X!==void 0?{bufferMs:X}:void 0);return G?{...Z,cloneUrl:G}:Z}catch(G){return console.warn(`[${PZ}] clone credential re-mint failed: ${G instanceof Error?G.message:String(G)}`),Z}}startCredentialRefresher(){if(!this.mintCloneUrl)return;let{signal:Z}=this.claimWatchAbort;(async()=>{while(!Z.aborted){if(await d6(FU4,{signal:Z}).catch(()=>{}),Z.aborted)break;try{await this.refreshAllGitCredentials()}catch(X){console.warn(`[${PZ}] periodic credential refresh failed: ${X instanceof Error?X.message:String(X)}`)}}})()}async refreshAllGitCredentials(){await bW8(this.records.values(),(Z)=>Z.ensureOpts?.repo?.connectionId,async(Z)=>{if(this.claimWatchAbort.signal.aborted)return;let X=Z.ensureOpts?.repo;if(!X)return;let G=await this.withFreshCloneUrl(X,UU4);await this.refreshDaemonGitCredential(Z,{...Z.ensureOpts,repo:G}),Z.ensureOpts={...Z.ensureOpts,repo:G}})}async rebootstrapDaemon(Z,X,G){if(this.sentinelToken===null)return!1;let Y=this.workloadConfigPayload(G)??{};try{return await jy(Z,this.sentinelToken,Y,{rotateToken:X}),await this.relayOrgFsConfig(Z,X,G?.orgFsConfigJson),!0}catch(Q){if(Q instanceof PO0&&Q.status===401)try{return await jy(Z,X,Y,{rotateToken:X}),await this.relayOrgFsConfig(Z,X,G?.orgFsConfigJson),!0}catch($){return console.warn(`[${PZ}] re-bootstrap retry with claim token failed: ${$ instanceof Error?$.message:String($)}`),!1}return console.warn(`[${PZ}] re-bootstrap failed: ${Q instanceof Error?Q.message:String(Q)}`),!1}}async ensureServicePortForAdoptedSandbox(Z){if(!this.previewGateway||!this.previewUrlPattern)return;await AW8(this.kubeConfig,this.namespace,Z,{name:"daemon",port:UO,targetPort:UO})}async ensureHttpRouteForHandle(Z,X,G){if(!this.previewGateway||!this.previewUrlPattern)return;let Y=kU4(this.previewUrlPattern,Z);if(!Y)throw new gZ(`Unable to derive preview hostname for ${Z} from pattern: ${this.previewUrlPattern}`);let Q={apiVersion:`${Ip.API_GROUP}/${Ip.API_VERSION}`,kind:"HTTPRoute",metadata:{name:Z,namespace:this.namespace,labels:nt0(G??void 0,{[iG.role]:"claimed",[iG.sandboxHandle]:Z,"app.kubernetes.io/name":"studio-sandbox","app.kubernetes.io/managed-by":"studio",...this.envName?{[iG.env]:this.envName}:{}})},spec:{parentRefs:[{kind:"Gateway",group:"gateway.networking.k8s.io",name:this.previewGateway.name,namespace:this.previewGateway.namespace}],hostnames:[Y],rules:[{backendRefs:[{group:"",kind:"Service",name:X,port:UO}]}]}};await LO0(this.kubeConfig,this.namespace,Q)}async deleteHttpRouteIfManaged(Z){if(!this.previewGateway)return;await EO0(this.kubeConfig,this.namespace,Z)}async rehydrate(Z,X,G){let Y=G.state;if(!Y.adoptedSandboxName&&!Y.podName||!Y.token)return null;let Q=await vF(this.kubeConfig,this.namespace,X).catch(()=>{return});if(!Q||!xW8(Q))return null;let $=Q.status?.sandbox?.name??Y.adoptedSandboxName??Y.podName??X,J=await this.openAndProbeDaemon($,X);if(!J)return null;if(Y.daemonBootId&&Y.daemonBootId!==J.bootId){if(this.sentinelToken!==null){let W=Y.ensureOpts?.repo?{...Y.ensureOpts,repo:await this.withFreshCloneUrl(Y.ensureOpts.repo)}:Y.ensureOpts??null;if(!await this.rebootstrapDaemon(J.daemonUrl,Y.token,W))return this.closeForwarder(J.daemonForward),null}else console.warn(`[${PZ}] daemon restart detected (handle=${X}): stored bootId=${Y.daemonBootId} live bootId=${J.bootId}`);await this.stateStore?.put(Z,dY,{handle:X,state:{...Y,daemonBootId:J.bootId}}).catch((W)=>console.warn(`[${PZ}] bootId persist failed for ${X}: ${W instanceof Error?W.message:String(W)}`))}return{id:Z,handle:X,adoptedSandboxName:$,token:Y.token,workdir:Y.workdir??mt0,daemonUrl:J.daemonUrl,daemonForward:J.daemonForward,workload:Y.workload??null,daemonBootId:J.bootId,tenant:Y.tenant??null,ensureOpts:Y.ensureOpts??null,daemonImpl:Y.ensureOpts?.daemonImpl??null}}async adopt(Z,X,G){if(!xW8(G))return null;let Y=G.status?.sandbox?.name??X;if(this.sentinelToken!==null)return null;let Q=DU4(G);if(!Q)return null;let $=await this.openAndProbeDaemon(Y,X);if(!$)return null;let J=IU4(G);if(this.previewGateway)await this.ensureServicePortForAdoptedSandbox(Y).catch((W)=>{console.warn(`[${PZ}] Service port backfill failed for ${X}: ${W instanceof Error?W.message:String(W)}`)}),await this.ensureHttpRouteForHandle(X,Y,J).catch((W)=>{console.warn(`[${PZ}] HTTPRoute backfill failed for ${X}: ${W instanceof Error?W.message:String(W)}`)});return{id:Z,handle:X,adoptedSandboxName:Y,token:Q,workdir:mt0,daemonUrl:$.daemonUrl,daemonForward:$.daemonForward,workload:null,daemonBootId:$.bootId,tenant:J,ensureOpts:null,daemonImpl:qU4(G)}}async openAndProbeDaemon(Z,X){let G=await this.openForwarder(Z,UO,X).catch(()=>null);if(!G)return null;let Y=`http://127.0.0.1:${G.localPort}`,Q=await TO0(Y);if(!Q)return this.closeForwarder(G),null;return{daemonForward:G,daemonUrl:Y,bootId:Q.bootId}}async getRecord(Z){let X=this.records.get(Z);if(X)return X;if(!this.stateStore)return null;let G=await this.stateStore.getByHandle(dY,Z);if(!G)return null;let Y=await this.rehydrate(G.id,Z,G);if(Y)this.records.set(Z,Y);return Y}async resurrectByHandle(Z){if(!this.stateStore)return null;let X=await this.stateStore.getByHandle(dY,Z);if(!X)return null;let G=X.state.ensureOpts;if(!G)return null;let Y=G.repo?{...G,repo:await this.withFreshCloneUrl(G.repo)}:G;return await this.ensure(X.id,Y),this.records.get(Z)??null}invalidateRecord(Z){let X=this.records.get(Z);if(!X)return;this.records.delete(Z),this.closeForwarder(X.daemonForward)}recordProxyDuration(Z,X,G,Y,Q){if(!this.metrics)return;this.metrics.proxyDurationMs.record(Y,{...pt0(G?.tenant??null,G?.daemonImpl??null),source:Z,sandbox_handle:G?.handle??Q??"",status_code:X||0})}composePreviewUrl(Z){if(this.previewUrlPattern)return y70(this.previewUrlPattern,Z.handle);return`http://127.0.0.1:${Z.daemonForward.localPort}/`}toSandbox(Z){return{handle:Z.handle,workdir:Z.workdir,previewUrl:this.composePreviewUrl(Z)}}async persist(Z,X){if(!Z)return;let G={adoptedSandboxName:X.adoptedSandboxName,token:X.token,workdir:X.workdir,workload:X.workload,daemonBootId:X.daemonBootId,tenant:X.tenant,...X.ensureOpts?{ensureOpts:X.ensureOpts}:{}};await Z.put(X.id,dY,{handle:X.handle,state:G})}computeShutdownTime(){return new Date(Date.now()+this.idleTtlMs).toISOString()}openForwarder(Z,X,G=Z){let Y=LU4(G,X);return new Promise((Q,$)=>{let J=(W,K)=>{let N=gW8.createServer((F)=>this.handleForwardedConnection(F,Z,X,G));N.once("error",(F)=>{if(F.code==="EADDRINUSE"&&K<wU4){try{N.close()}catch{}let U=tt0+(W-tt0+1)%hW8;J(U,K+1);return}$(F)}),N.listen(W,"127.0.0.1",()=>{let F=N.address();if(!F||typeof F==="string"){N.close(),$(Error("port-forward listener failed to bind"));return}Q({server:N,localPort:F.port})})};J(Y,0)})}handleForwardedConnection(Z,X,G,Y){let Q=new GU4,$=null,J=!1,W=()=>{if(J)return;if(J=!0,Q.destroy(),$)try{$.close()}catch{}if(!Z.destroyed)Z.destroy()};Z.pipe(Q),Z.on("error",W),Z.on("close",W),this.portForward.portForward(this.namespace,X,[G],Z,null,Q).then((K)=>{let N=typeof K==="function"?K():K;if(!N){W();return}if($=N,$.on("close",W),$.on("error",()=>{this.invalidateRecord(Y),W()}),J)try{$.close()}catch{}}).catch((K)=>{console.warn(`[${PZ}] port-forward to ${X}:${G} failed: ${YU4(K)}`),this.invalidateRecord(Y),W()})}closeForwarder(Z){Z.server.close((X)=>{if(X)console.warn(`[${PZ}] port-forward close on :${Z.localPort} errored: ${X instanceof Error?X.message:String(X)}`)})}close(){if(this.closed)return;this.closed=!0,this.claimWatchAbort.abort();for(let Z of this.records.values())this.closeForwarder(Z.daemonForward);this.records.clear()}}function OU4(Z){return{active:Z.createUpDownCounter("studio.sandbox.active",{description:"Active sandbox count, by runner kind, owning org, and daemon impl. Cross-checks the cAdvisor-derived count from the cluster \u2014 divergence between the two indicates orphaned claims (studio deleted but K8s didn't reap) or unattributed pods.",unit:"{sandbox}"}),ensureOutcome:Z.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 studio didn't know about. Cold-start ratio is the primary input for warm-pool sizing.",unit:"{call}"}),proxyDurationMs:Z.createHistogram("studio.sandbox.proxy.duration_ms",{description:"Wall-clock latency of studio-mediated requests to the sandbox daemon: tool exec proxies (source=daemon) and preview iframe traffic (source=preview).",unit:"ms"})}}function BU4(){let Z=new By;return Z.loadFromDefault(),Z}function xW8(Z){return Boolean(Z.status?.conditions?.some((X)=>X.type==="Ready"&&X.status==="True"))}function DU4(Z){let X=Z.spec?.env;if(!X)return null;for(let G of X)if(G.name==="DAEMON_TOKEN"&&G.value)return G.value;return null}function LU4(Z,X){let G=eF4("sha256").update(`${Z}:${X}`).digest();return tt0+G.readUInt32BE(0)%hW8}function it0(Z,X){return new Response(JSON.stringify(X),{status:Z,headers:{"content-type":"application/json","access-control-allow-origin":"*"}})}function _W8(Z,X,G){if(Z==="go"&&G)return{impl:"go",templateName:G};return{impl:"ts",templateName:X}}function yW8(Z){let X=Z.slice(0,zU4);return EU4.test(X)?X:""}function AU4(Z){if(Z===void 0)return null;let X=Z.trim();if(X==="")return null;if(!jU4.test(X))throw Error(`AgentSandboxProvider: envName=${JSON.stringify(X)} is not a valid DNS-label-safe environment name (lowercase alphanumeric or '-', starts with a letter, ends alphanumeric, \u226432 chars). Studio sets this from STUDIO_ENV; check the studio chart's configMap.`);return X}function nt0(Z,X={}){let G={...X};if(Z){let Y=yW8(Z.orgId),Q=yW8(Z.userId);if(Y)G[iG.orgId]=Y;if(Q)G[iG.userId]=Q}return G}function tV(Z){let X="";for(let G of Z){let Y=G.codePointAt(0)??0;X+=Y<32||Y===127?" ":G}return X.slice(0,PU4)}function TU4(Z){try{let X=new URL(Z);return X.username="",X.password="",X.toString()}catch{return""}}function RU4(Z){let X={},G=Z.tenant;if(G?.orgSlug)X[MJ.orgSlug]=tV(G.orgSlug);if(G?.orgName)X[MJ.orgName]=tV(G.orgName);if(G?.userEmail)X[MJ.userEmail]=tV(G.userEmail);if(G?.userName)X[MJ.userName]=tV(G.userName);let Y=Z.repo;if(Y){if(Y.displayName)X[MJ.gitRepo]=tV(Y.displayName);let Q=TU4(Y.cloneUrl);if(Q)X[MJ.gitRepoUrl]=tV(Q);let $=Z.branch??Y.branch;if($)X[MJ.gitBranch]=tV($)}return X}function IU4(Z){let X=Z.metadata?.labels;if(!X)return null;let G=X[iG.orgId],Y=X[iG.userId];if(!G||!Y)return null;let Q=Z.metadata?.annotations??{};return{orgId:G,userId:Y,orgSlug:Q[MJ.orgSlug],orgName:Q[MJ.orgName],userEmail:Q[MJ.userEmail],userName:Q[MJ.userName]}}function qU4(Z){let X=Z.metadata?.labels?.[iG.daemonImpl];return X==="go"||X==="ts"?X:null}function pt0(Z,X){return{org_id:Z?.orgId??"",user_id:Z?.userId??"",runner_kind:dY,daemon_impl:X??""}}function MU4(Z){let X={};if(Z.repo)X.repo=Z.repo;if(Z.workload)X.workload=Z.workload;if(Z.env&&Object.keys(Z.env).length>0)X.env=Z.env;if(Z.tenant)X.tenant=Z.tenant;if(Z.orgFsConfigJson)X.orgFsConfigJson=Z.orgFsConfigJson;if(Z.daemonImpl)X.daemonImpl=Z.daemonImpl;return Object.keys(X).length>0?X:null}function kU4(Z,X){try{return new URL(y70(Z,X)).hostname||null}catch{return null}}var dY="agent-sandbox",PZ="AgentSandboxProvider",oV="x-sandbox-preview-not-ready",QU4="agent-sandbox-system",$U4="studio-sandbox",UO=9000,JU4=3000,mt0="/app",WU4=32,KU4,NU4=900000,FU4=900000,UU4=1800000,HU4,vW8,tt0=40000,hW8=1e4,wU4=256,iG,MJ,EU4,zU4=63,jU4,PU4=253;var uW8=B(()=>{c9();xt0();MW8();h70();jO0();Pp();fW8();KU4=new Set(["DAEMON_TOKEN","DAEMON_BOOT_ID","APP_ROOT","PROXY_PORT"]),HU4=["cookie","host","connection","keep-alive","proxy-authenticate","proxy-authorization","te","trailer","transfer-encoding","accept-encoding","content-length","upgrade"],vW8=["connection","keep-alive","transfer-encoding","content-encoding","content-length"];iG={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",daemonImpl:"studio.decocms.com/daemon-impl"};MJ={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"},EU4=/^([A-Za-z0-9]([-A-Za-z0-9_.]*[A-Za-z0-9])?)?$/;jU4=/^[a-z]([a-z0-9-]{0,30}[a-z0-9])?$/});var cW8={};$4(cW8,{waitForSandboxReady:()=>zO0,getSandboxClaim:()=>vF,getHttpRoute:()=>zW8,deleteSandboxClaim:()=>FO,deleteHttpRoute:()=>EO0,createSandboxClaim:()=>Rp,applyHttpRoute:()=>LO0,SandboxTimeoutError:()=>nV,SandboxError:()=>gZ,PREVIEW_NOT_READY_HEADER:()=>oV,KubeConfig:()=>By,K8S_CONSTANTS:()=>AZ,HTTPROUTE_CONSTANTS:()=>Ip,AgentSandboxProvider:()=>ot0});var rt0=B(()=>{xt0();Pp();jO0();uW8()});class IO0{kind=HO;userSub;dispatch;stateStore;records=new Map;constructor(Z){if(!Z.userSub)throw Error("DesktopSandboxProvider requires userSub");if(!Z.dispatch)throw Error("DesktopSandboxProvider requires dispatch");this.userSub=Z.userSub,this.dispatch=Z.dispatch,this.stateStore=Z.stateStore??null}async ensure(Z,X={}){let G=X.branch??X.repo?.branch,Y=ow(Z,G),Q=this.records.get(Y);if(Q){if(await this.probeHealth(Y))return this.toSandbox(Q);if(this.records.delete(Y),this.stateStore)await this.stateStore.deleteByHandle(HO,Y).catch(()=>{})}else if(this.stateStore){let H=(await this.stateStore.getByHandle(HO,Y))?.state,w=H?.sandboxApiUrl;if(w){if(await this.probeHealth(Y)){let O={handle:Y,sandboxApiUrl:w,previewUrl:H?.previewUrl??w};return this.records.set(Y,O),this.toSandbox(O)}await this.stateStore.deleteByHandle(HO,Y).catch(()=>{})}}let $=qF({userName:X.tenant?.userName,userEmail:X.tenant?.userEmail}),J=JSON.stringify({handle:Y,repo:X.repo,branch:G,...X.workload?{workload:X.workload}:{},...$?{operator:$}:{},...X.offloadAllowedHosts?{offloadAllowedHosts:X.offloadAllowedHosts}:{},...X.offloadAllowSameHostDev!==void 0?{offloadAllowSameHostDev:X.offloadAllowSameHostDev}:{},...X.orgFsConfigJson?{orgFsConfigJson:X.orgFsConfigJson}:{}}),W=await this.dispatchJson("POST","/api/sandboxes",J),K=JSON.parse(W);if(typeof K.sandboxApiUrl!=="string")throw Error("desktop ensure: daemon did not return a sandboxApiUrl string");let N=typeof K.previewUrl==="string"?K.previewUrl:K.sandboxApiUrl,F={handle:Y,sandboxApiUrl:K.sandboxApiUrl,previewUrl:N};if(this.records.set(Y,F),this.stateStore)await this.stateStore.put(Z,HO,{handle:Y,state:{handle:Y,sandboxApiUrl:K.sandboxApiUrl,previewUrl:N}});return this.toSandbox(F)}async proxyDaemonRequest(Z,X,G){let Y=X.startsWith("/")?X:`/${X}`,Q=Y.startsWith("/_sandbox/")?Y.slice(9):Y,$=`/_sandbox/${encodeURIComponent(Z)}${Q}`,J=new Headers(G.headers);for(let E of["host","cookie","connection","keep-alive","transfer-encoding","upgrade","authorization"])J.delete(E);let W={};J.forEach((E,z)=>{W[z]=E});let K;if(G.body!=null)K=await VU4(G.body);let F=this.dispatch(this.userSub,{method:G.method,path:$,headers:W,body:K},{signal:G.signal})[Symbol.asyncIterator](),U=SU4(),H=200,w={"content-type":"application/octet-stream"},O=[];try{while(!0){let E=await F.next();if(E.done)break;let z=E.value;if(z.headers){H=z.headers.status,w=z.headers.headers;break}if(z.data!=null){let j=U.push(z.data);if(j.length)O.push(j)}}}catch(E){let z=E instanceof Error?E.message:"dispatch error";return new Response(JSON.stringify({error:z}),{status:502,headers:{"content-type":"application/json"}})}let D=!1,L=new ReadableStream({async start(E){for(let z of O)E.enqueue(z)},async pull(E){try{while(!0){let z=await F.next();if(D)return;if(z.done){let A=U.flush();if(A.length)E.enqueue(A);E.close();return}let j=z.value;if(j.data!=null){let A=U.push(j.data);if(A.length){E.enqueue(A);return}}}}catch(z){if(!D)E.error(z)}},cancel(){D=!0,F.return?.()}});return new Response(L,{status:H,headers:w})}async alive(Z){return this.probeHealth(Z)}async probeHealth(Z){let X=new AbortController,G=setTimeout(()=>X.abort(),3000);try{return await this.dispatchJson("GET",`/api/sandboxes/${encodeURIComponent(Z)}`,void 0,X.signal),!0}catch{return!1}finally{clearTimeout(G)}}async forgetHandle(Z){if(this.records.delete(Z),this.stateStore)await this.stateStore.deleteByHandle(HO,Z).catch(()=>{})}async delete(Z){if(this.records.delete(Z),this.stateStore)await this.stateStore.deleteByHandle(HO,Z).catch(()=>{});try{await this.dispatchJson("DELETE",`/api/sandboxes/${encodeURIComponent(Z)}`)}catch(X){if(!(X instanceof Error?X.message:String(X)).includes("404"))throw X}}async getPreviewUrl(Z){return(await this.resolveRecord(Z))?.previewUrl??null}async localWorkdir(Z){return null}async*watchClaimLifecycle(Z,X){yield{kind:"ready"}}toSandbox(Z){return{handle:Z.handle,workdir:Z.sandboxApiUrl,previewUrl:Z.previewUrl}}async resolveRecord(Z){let X=this.records.get(Z);if(X)return X;if(!this.stateStore)return null;let Y=(await this.stateStore.getByHandle(HO,Z))?.state,Q=Y?.sandboxApiUrl;if(!Q)return null;let $={handle:Z,sandboxApiUrl:Q,previewUrl:Y?.previewUrl??Q};return this.records.set(Z,$),$}async dispatchJson(Z,X,G,Y){let Q={accept:"application/json"};if(G!==void 0)Q["content-type"]="application/json";let $=this.dispatch(this.userSub,{method:Z,path:X,headers:Q,body:G},{signal:Y}),J=null,W="";for await(let N of $)if(N.headers)J=N.headers.status;else if(N.data!=null)W+=N.data;let K=Buffer.from(W,"base64").toString("utf8");if(J!=null&&(J<200||J>=300))throw Error(`daemon returned ${J}: ${K}`);return K}}function lW8(Z){return new IO0(Z)}function SU4(){let Z="";return{push(X){if(X.length===0)return at0;Z+=X;let G=Z.length-Z.length%4;if(G===0)return at0;let Y=Z.slice(0,G);return Z=Z.slice(G),new Uint8Array(Buffer.from(Y,"base64"))},flush(){if(Z.length===0)return at0;let X=Z;return Z="",new Uint8Array(Buffer.from(X,"base64"))}}}async function VU4(Z){if(typeof Z==="string")return Z;if(Z instanceof ArrayBuffer)return Buffer.from(Z).toString("utf8");if(ArrayBuffer.isView(Z))return Buffer.from(Z.buffer,Z.byteOffset,Z.byteLength).toString("utf8");if(Z instanceof URLSearchParams)return Z.toString();return await new Response(Z).text()}var HO="user-desktop",at0;var dW8=B(()=>{h70();g70();at0=new Uint8Array(0)});var mW8={};$4(mW8,{createDesktopProvider:()=>lW8,DesktopSandboxProvider:()=>IO0});var iW8=B(()=>{dW8()});var aW8={};$4(aW8,{subscribeLifecycle:()=>Zo0,getSandboxProviderByKind:()=>et0,getOrInitSharedRunner:()=>hU4,buildDesktopProvider:()=>qO0,__resetSharedLifecyclesForTesting:()=>mU4});function oW8(Z,X){let G=nW8[Z];if(G)return Promise.resolve(G);let Y=st0[Z];if(Y)return Y;let Q=X().then(($)=>{return nW8[Z]=$,$}).finally(()=>{delete st0[Z]});return st0[Z]=Q,Q}function bU4(){let Z=process.env.STUDIO_SANDBOX_PREVIEW_URL_PATTERN;return Z&&Z.trim()!==""?Z:void 0}function vU4(){let Z=process.env.STUDIO_SANDBOX_TEMPLATE_NAME;return Z&&Z.trim()!==""?Z:void 0}function xU4(){let Z=process.env.STUDIO_SANDBOX_GO_TEMPLATE_NAME;return Z&&Z.trim()!==""?Z:void 0}function _U4(){let Z=process.env.STUDIO_ENV;return Z&&Z.trim()!==""?Z:void 0}function yU4(){let Z=process.env.STUDIO_SANDBOX_SENTINEL_TOKEN;return Z&&Z.trim()!==""?Z:void 0}function gU4(){let Z=process.env.STUDIO_SANDBOX_PREVIEW_GATEWAY_NAME?.trim(),X=process.env.STUDIO_SANDBOX_PREVIEW_GATEWAY_NAMESPACE?.trim();if(!Z&&!X)return;if(!Z||!X)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:Z,namespace:X}}async function rW8(Z,X){let G=new Yy(X),Y=bU4();switch(Z){case"agent-sandbox":{let{AgentSandboxProvider:Q}=await Promise.resolve().then(() => (rt0(),cW8)),$=new xN($1().encryptionKey);return new Q({stateStore:G,previewUrlPattern:Y,sandboxTemplateName:vU4(),goSandboxTemplateName:xU4(),envName:_U4(),previewGateway:gU4(),sentinelToken:yU4(),meter:D6,mintCloneUrl:async(J,W)=>{if(!J.connectionId)return null;let K=cX8(J.cloneUrl);if(!K)return null;let{cloneUrl:N}=await ew(J.connectionId,K.owner,K.name,X,$,{bufferMs:W?.bufferMs});return N}})}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(Z)}`)}}async function qO0(Z,X){let{DesktopSandboxProvider:G}=await Promise.resolve().then(() => (iW8(),mW8)),{getProxyDispatch:Y}=await Promise.resolve().then(() => (Go0(),Xo0)),Q=new Yy(Z.db);if(!X)throw Error("buildDesktopProvider: userSub must be a non-empty string");let $=Y();return new G({userSub:X,dispatch:$,stateStore:Q})}function et0(Z,X){return oW8(X,()=>rW8(X,Z.db))}async function hU4(){let Z;try{Z=TJ()}catch(G){return console.warn("[lifecycle] cannot resolve sandbox runner:",G instanceof Error?G.message:String(G)),null}return await oW8(Z,()=>rW8(Z,T6().db))}function Zo0(Z,X,G){let Y=wO.get(X);if(Y){if(Y.terminated){if(Y.lastPhase)try{G(Y.lastPhase)}catch{}return{unsubscribe:lU4}}if(Y.listeners.add(G),Y.lastPhase)try{G(Y.lastPhase)}catch{}return pW8(X,Y,G)}let Q=new AbortController,$={lastPhase:null,terminated:!1,listeners:new Set([G]),abort:Q};return wO.set(X,$),dU4(Z,X,$),pW8(X,$,G)}function lU4(){}function pW8(Z,X,G){return{unsubscribe(){if(wO.get(Z)!==X)return;if(X.listeners.delete(G),X.listeners.size===0)wO.delete(Z),X.abort.abort()}}}async function dU4(Z,X,G){let Y=null;try{for await(let Q of Z.watchClaimLifecycle(X,G.abort.signal)){if(G.abort.signal.aborted)break;G.lastPhase=Q;let $=Q.kind==="ready"||Q.kind==="failed";if($)G.terminated=!0;let J=Array.from(G.listeners);for(let W of J)try{W(Q)}catch{}if($)break}}catch(Q){Y=Q}finally{if(!G.terminated&&!G.abort.signal.aborted&&G.listeners.size>0){let Q={kind:"failed",reason:"unknown",message:Y instanceof Error?Y.message:"Lifecycle watcher ended unexpectedly"};G.lastPhase=Q,G.terminated=!0;for(let $ of Array.from(G.listeners))try{$(Q)}catch{}}if(wO.get(X)===G)wO.delete(X)}}function mU4(){for(let Z of wO.values())Z.abort.abort();wO.clear()}var CU4,fU4,tW8,nW8,st0,uU4,cU4,wO;var MO0=B(()=>{p3();WY();w9();ln0();Gp();Wl();b8();CU4=Symbol.for("decocms.sandbox.lifecycle.runners"),fU4=Symbol.for("decocms.sandbox.lifecycle.inflight"),tW8=globalThis,nW8=tW8[CU4]??={},st0=tW8[fU4]??={};uU4=Symbol.for("decocms.sandbox.lifecycle.shared-lifecycles"),cU4=globalThis,wO=cU4[uU4]??=new Map});async function kJ(Z,X){let{userId:G,branch:Y,virtualMcpMetadata:Q,explicitKind:$}=X;if($)return{provider:await Mp(Z,G,$),kind:$};if(Z.sandboxPreference==="agent-sandbox")return{provider:await Mp(Z,G,"agent-sandbox"),kind:"agent-sandbox"};if(Z.sandboxPreference==="user-desktop")return{provider:await qO0(Z,G),kind:"user-desktop"};if(Z.sandboxPreference==="cluster-default"){let F=TJ();return{provider:await Mp(Z,G,F),kind:F}}let[J,...W]=iU4(Q,G,Y);if(J){let F=W.length===0?J:nU4(J,W);return{provider:await Mp(Z,G,F),kind:F}}let K=sW8();return{provider:await Mp(Z,G,K),kind:K}}function iU4(Z,X,G){let Y=v9(Z)[X]?.[G];if(!Y)return[];let Q=f$(Y);return Object.keys(Q)}function nU4(Z,X){let G=sW8();if(G===Z||X.includes(G))return G;return Z}function sW8(){return TJ()}async function Mp(Z,X,G){if(G!=="user-desktop")return et0(Z,G);return qO0(Z,X)}var Ay=B(()=>{R6();p3();uQ();MO0()});var kp;var Yo0=B(()=>{kp={npm:{install:"npm install",run:(Z)=>`npm run ${Z}`,runtime:"node"},pnpm:{install:"pnpm install",run:(Z)=>`pnpm run ${Z}`,runtime:"node"},yarn:{install:"yarn install",run:(Z)=>`yarn run ${Z}`,runtime:"node"},bun:{install:"bun install",run:(Z)=>`bun run ${Z}`,runtime:"bun"},deno:{install:"deno install",run:(Z)=>`deno task ${Z}`,runtime:"deno"}}});function kO0(Z,X){return X?`thread:${Z}/${X}`:`thread:${Z}`}function SO0(Z){return`sandbox/thread-${Z.replace(/^thread:/,"").replace(/\//g,"-")}`}function OO(Z){if(!Z||!Z.startsWith("thread:"))return null;return Z.slice(7).split("/")[0]||null}async function xF(Z,X,G){let Y=OO(X);if(!Y)return G;return(await Z.storage.threads.get(Y).catch(()=>null))?.created_by??G}async function Py(Z,X){if(!X)return null;let G=await Z.storage.threads.get(X).catch(()=>null);if(!G)return null;return G.metadata??{}}async function eW8(Z,X){let Y=(await Py(Z,X))?.headRef;return typeof Y==="string"&&Y.length>0?Y:null}async function ZK8(Z,X,G){let Y=await Py(Z,X);if(!Y)return;if(Y.headRef===G)return;await Z.storage.threads.update(X,{metadata:{...Y,headRef:G}}).catch((Q)=>console.warn("[thread-repo] setThreadHeadRef failed",Q))}async function Sp(Z,X){return(await Py(Z,X))?.githubRepo??null}async function XK8(Z,X,G,Y,Q,$){let J=await Py(Z,X);if(!J)return;let W=Xp(v9(J),G,Y,Q,$);await Z.storage.threads.update(X,{metadata:{...J,sandboxMap:W}}).catch((K)=>console.warn("[thread-repo] setThreadSandboxMapEntry failed",K))}async function GK8(Z,X){return v9(await Py(Z,X))}async function YK8(Z,X,G,Y,Q){let $=await Py(Z,X);if(!$)return;let J=cn0(v9($),G,Y,Q);if(!J)return;await Z.storage.threads.update(X,{metadata:{...$,sandboxMap:J}}).catch((W)=>console.warn("[thread-repo] removeThreadSandboxMapEntry failed",W))}var BO=B(()=>{uQ()});function VO0(Z){if(!Z)return null;let X=Z.runtime;if(!X||typeof X!=="object")return null;let G=X.env;if(!Array.isArray(G))return null;let Y=[];for(let Q of G){if(!Q||typeof Q!=="object")continue;let $=Q;if(typeof $.key!=="string"||!Y10.test($.key))continue;if($.kind==="literal"&&typeof $.value==="string"){Y.push({key:$.key,kind:"literal",value:$.value});continue}if($.kind==="secret"&&typeof $.secretId==="string"&&$.secretId.length>0)Y.push({key:$.key,kind:"secret",secretId:$.secretId})}return Y.length===0?null:Y}function QK8(Z){if(!Z)return null;let X=Z.runtime;if(!X||typeof X!=="object")return null;let G=X.submoduleCredentials;if(!Array.isArray(G))return null;let Y=[];for(let Q of G){if(!Q||typeof Q!=="object")continue;let $=Q;if(typeof $.host==="string"&&$.host.length>0&&typeof $.secretId==="string"&&$.secretId.length>0)Y.push({host:$.host,secretId:$.secretId})}return Y.length===0?null:Y}async function $K8(Z,X){D0(X);let G=B0(X);await X.access.check();let Y=V1(X);if(!Y)throw Error("User ID required");let Q=await X.storage.virtualMcps.findById(Z.virtualMcpId);if(!Q||Q.organization_id!==G.id)throw Error("Virtual MCP not found");let $=Q.metadata??{},J=v9($),W=await xF(X,Z.branch,Y),K=aw(J,W,Z.branch,Z.sandboxProviderKind);return{virtualMcp:Q,metadata:$,userId:Y,sandboxUserId:W,entry:K,organization:G}}function CO0(Z){let X=Z.runtime??null,Y=X?.selected??null,Q=X?.port??null,$=X?.path??null;if(!Y||!(Y in kp))return{packageManager:null,runtime:null,port:Q,packageManagerPath:$,runtimeBinPath:null};let J=kp[Y].runtime;return{packageManager:Y,runtime:J,port:Q,packageManagerPath:$,runtimeBinPath:J==="deno"?"/opt/deno/bin":J==="bun"?"/opt/bun/bin":null}}var Ty=B(()=>{R6();Yo0();uQ();BO()});async function DO(Z,X){let G=Z.body?.getReader();if(!G)return Z.text();let Y=new TextDecoder,Q="",$=0;for(;;){let{done:J,value:W}=await G.read();if(J)break;if($+=W.byteLength,$>X)throw await G.cancel().catch(()=>{}),new JK8(`Upstream response exceeded ${X} bytes`);Q+=Y.decode(W,{stream:!0})}return Q+=Y.decode(),Q}var JK8;var Vp=B(()=>{JK8=class JK8 extends Error{}});async function fO0({ctx:Z,runner:X,handle:G,orgId:Y,userId:Q,entries:$}){if(!$||$.length===0)return;let J={};for(let K of $){if(K.kind==="literal"){J[K.key]=K.value;continue}try{let{value:N}=await Z.storage.secrets.resolveById(K.secretId,Y,Q);J[K.key]=N}catch(N){if(N instanceof S3||N instanceof Jw){console.warn(`[SANDBOX_START] skipping env ${K.key}: ${N.message}. Re-link or recreate the secret to restore.`);continue}throw N}}if(Object.keys(J).length===0)return;let W=await X.proxyDaemonRequest(G,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({env:J})});if(!W.ok){let K=await DO(W,pU4).catch(()=>W.statusText);console.warn(`[SANDBOX_START] daemon rejected env patch (${W.status}): ${K}`)}}var pU4=10485760;var Qo0=B(()=>{Im();Vp()});async function WK8({ctx:Z,orgId:X,userId:G,entries:Y}){if(!Y||Y.length===0)return[];let Q=[];for(let $ of Y)try{let{value:J}=await Z.storage.secrets.resolveById($.secretId,X,G);Q.push({host:$.host,token:J})}catch(J){if(J instanceof S3||J instanceof Jw){console.warn(`[SANDBOX_START] skipping submodule credential for ${$.host}: ${J.message}. Re-link or recreate the secret to restore.`);continue}throw J}return Q}var KK8=B(()=>{Im()});async function UK8(Z,X,G,Y,Q){let $=await qw({connectionId:Z,tokenStorage:new V9(Y,Q)});if(!$.accessToken)return null;return wK8(X,G,$.accessToken)}function HK8(Z,X){return wK8(Z,X,null)}async function wK8(Z,X,G){let Y=new Map,Q=new Set(NK8.map((K)=>K.path));for(let K of Object.values(FK8))for(let N of K??[])Q.add(N);await Promise.all(Array.from(Q).map(async(K)=>{Y.set(K,await oU4(Z,X,K,G))}));let $=NK8.find(({path:K})=>Y.get(K)!==null);if(!$)return null;let J=FK8[$.pm]??[],W=null;for(let K of J)if(W=rU4(Y.get(K)??null),W)break;return{packageManager:$.pm,devPort:W}}async function oU4(Z,X,G,Y){let Q=`https://api.github.com/repos/${Z}/${X}/contents/${encodeURIComponent(G)}`;try{let $={Accept:"application/vnd.github+json","User-Agent":"studio-runtime-detect"};if(Y)$.Authorization=`token ${Y}`;let J=await fetch(Q,{headers:$,signal:AbortSignal.timeout(5000)});if(!J.ok)return null;let W=await J.json();if(!W.content||W.encoding!=="base64")return null;return Buffer.from(W.content,"base64").toString("utf8")}catch{return null}}function rU4(Z){if(!Z)return null;try{let X=JSON.parse(Z),G=X.tasks??X.scripts??{};return(G.dev??G.start??"").match(tU4)?.[1]??null}catch{return null}}var NK8,FK8,tU4;var OK8=B(()=>{Mw();HJ();NK8=[{path:"deno.json",pm:"deno"},{path:"deno.jsonc",pm:"deno"},{path:"bun.lock",pm:"bun"},{path:"bunfig.toml",pm:"bun"},{path:"pnpm-lock.yaml",pm:"pnpm"},{path:"yarn.lock",pm:"yarn"},{path:"package-lock.json",pm:"npm"},{path:"package.json",pm:"bun"}],FK8={deno:["deno.json","deno.jsonc"],bun:["package.json"],pnpm:["package.json"],yarn:["package.json"],npm:["package.json"]},tU4=/(?:--port|PORT=|:)(\d{4,5})/});function BK8(Z){if(Z.explicit)return Z.explicit;return Z.flags?.sandbox_go_daemon?"go":"ts"}function DK8(Z){let{current:X,detached:G,base:Y}=Z.status??{};if(typeof X!=="string"||X.length===0)return null;if(G===!0)return null;if(X===Z.requestedRef)return null;if(aU4.has(X))return null;if(typeof Y==="string"&&Y.length>0&&X===Y)return null;return X}function LK8(Z){if(!Z.branch.startsWith("thread:"))return Z.branch;if(Z.sticky&&Z.recordedHeadRef)return Z.recordedHeadRef;return Z.derivedRef}var aU4;var $o0=B(()=>{aU4=new Set(["main","master","trunk","develop","HEAD"])});async function bO0(Z,X){if(!Z)return{hosts:[],allowSameHostDev:!1};let G;try{G=await Z.presignedGetUrl("link-dispatch/_allowlist_probe",60,{requireFetchable:!0})}catch{return{hosts:[],allowSameHostDev:!1}}let Y;try{Y=new URL(G)}catch{return{hosts:[],allowSameHostDev:!1}}if(Y.protocol!=="https:"&&Y.protocol!=="http:")return{hosts:[],allowSameHostDev:!1};let Q=Y.hostname,$=sU4.has(Q);return{hosts:[Q],allowSameHostDev:$&&!X.isProduction}}var sU4;var Jo0=B(()=>{sU4=new Set(["127.0.0.1","localhost","::1","[::1]","0.0.0.0"])});import{z as BK}from"zod";async function vO0(Z,X){D0(X);let G=B0(X),Y=V1(X);if(!Y)throw Error("User ID required");let Q=await X.storage.virtualMcps.findById(Z.virtualMcpId);if(!Q||Q.organization_id!==G.id)throw Error("Virtual MCP not found");let $=Q.metadata??{},J=await xF(X,Z.branch,Y),W=aw(v9($),J,Z.branch,Z.sandboxProviderKind),K=Z.sandboxProviderKind,{provider:N}=await kJ(X,{userId:J,branch:Z.branch,virtualMcpMetadata:$,explicitKind:K});if(W){if(K!=="user-desktop")return W;if(await N.alive(W.sandboxHandle).catch(()=>!1))return W;await sw(X.storage.virtualMcps,Z.virtualMcpId,Y,J,Z.branch,K).catch((O)=>{console.warn("[ensureSandbox] failed to reap stale user-desktop entry",O)})}let U=await Sp(X,OO(Z.branch)??X.metadata?.threadId)??$.githubRepo??null,{entry:H}=await EK8({ctx:X,userId:Y,sandboxUserId:J,orgId:G.id,virtualMcpId:Z.virtualMcpId,branch:Z.branch,metadata:$,githubRepo:U,existing:null,providerKind:K,runner:N});return H}async function EK8(Z){let{ctx:X,userId:G,sandboxUserId:Y,orgId:Q,virtualMcpId:$,branch:J,metadata:W,githubRepo:K,existing:N,runner:F}=Z,{runtime:U,packageManager:H,port:w,packageManagerPath:O}=CO0(W),D;if(K){if(K.connectionId)await Qy({ctx:X,connectionId:K.connectionId,organizationId:Q,forceRefresh:!0,onLegacyMintError:(f0)=>{console.error("[provisionSandbox] repo-scoped legacy token mint failed",{connectionId:K.connectionId,error:f0.message})}});let{cloneUrl:L0,gitUserName:W0,gitUserEmail:$0}=K.connectionId?await ew(K.connectionId,K.owner,K.name,X.db,X.vault):ZX0(K.owner,K.name);if(!H){let f0=K.connectionId?await UK8(K.connectionId,K.owner,K.name,X.db,X.vault):await HK8(K.owner,K.name);if(f0)H=f0.packageManager,U=kp[f0.packageManager].runtime,w=f0.devPort??w,await ZH4(X,$,G,f0.packageManager,f0.devPort)}let a=$1().sandboxStickyHeadRefEnabled,E0=LK8({branch:J,derivedRef:SO0(J),recordedHeadRef:a?await eW8(X,OO(J)):null,sticky:a}),J0=await WK8({ctx:X,orgId:Q,userId:G,entries:QK8(W)});D={cloneUrl:L0,...K.connectionId?{connectionId:K.connectionId}:{},userName:W0,userEmail:$0,branch:E0,displayName:`${K.owner}/${K.name}`,...J0.length>0?{submoduleCredentials:J0}:{}}}let L=U&&H?{runtime:U,packageManager:H,...w!==null?{devPort:Number(w)}:{},...O?{packageManagerPath:O}:{}}:void 0,E=BE({orgId:Q,virtualMcpId:$,branch:J}),z=F.kind==="user-desktop"?await bO0(X.objectStorage,{isProduction:$1().nodeEnv==="production"}):null,j=(F.kind==="user-desktop"||F.kind==="agent-sandbox")&&!$1().orgFsMountsDisabled,A;if(j){let L0=X.organization?.slug??(await X.db.selectFrom("organization").select(["slug"]).where("id","=",Q).executeTakeFirst())?.slug;if(L0)A=await ZZ0(X,{orgSlug:L0,orgId:Q,baseUrl:s7()})}let P=F.kind==="agent-sandbox"?BK8({explicit:Z.daemonImpl,flags:Z.daemonImpl?null:(await X.storage.organizationSettings.get(Q))?.flags??null}):void 0,q=await F.ensure({userId:Y,projectRef:E},{branch:J,repo:D,workload:L,tenant:{orgId:Q,userId:Y,...X.organization?.slug?{orgSlug:X.organization.slug}:{},...X.organization?.name?{orgName:X.organization.name}:{},...X.auth.user?.email?{userEmail:X.auth.user.email}:{},...X.auth.user?.name?{userName:X.auth.user.name}:{}},...z?{offloadAllowedHosts:z.hosts,offloadAllowSameHostDev:z.allowSameHostDev}:{},...A?{orgFsConfigJson:A}:{},...P?{daemonImpl:P}:{}}),S=W.runtime?.env??null;await fO0({ctx:X,runner:F,handle:q.handle,orgId:Q,userId:G,entries:S});let C=!!N&&N.sandboxHandle===q.handle&&N?.createdAt?N.createdAt:Date.now(),m=W.runtime?.selected??null,v=W.runtime?.port??null,x=W.runtime?.path??null,e={sandboxHandle:q.handle,previewUrl:q.previewUrl,sandboxApiUrl:q.previewUrl,sandboxProviderKind:F.kind,createdAt:C,startedWith:{packageManager:m,port:v,path:x}};await CX8(X.storage.virtualMcps,$,G,Y,J,Z.providerKind,e);let o=OO(J);if(o)await XK8(X,o,Y,J,Z.providerKind,e);let w0=!N||N.sandboxHandle!==q.handle;return{entry:e,isNewVm:w0}}async function ZH4(Z,X,G,Y,Q){let $=await Z.storage.virtualMcps.findById(X);if(!$)return;let J=$.metadata??{};await Z.storage.virtualMcps.update(X,G,{metadata:{...J,runtime:{selected:Y,port:Q}}})}var eU4,Wo0;var xO0=B(()=>{p3();e0();Ty();Qo0();KK8();uQ();Gp();OK8();Yo0();Ay();BO();$o0();Jo0();b8();rZ();C_();uQ();eU4=BK.enum(["agent-sandbox","user-desktop","cluster"]),Wo0=s({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:BK.object({virtualMcpId:BK.string().describe("Virtual MCP ID"),branch:BK.string().min(1).optional().describe("Git branch to check out. Pass the thread's branch whenever the caller has one: when omitted the handler mints a fresh `<user-slug>-<timestamp>` name, which becomes a SEPARATE sandbox from the one the thread's own branch resolves to. The resolved branch is returned in the response so callers can persist it."),sandboxProviderKind:eU4.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."),daemonImpl:In0.optional().describe("Target this one sandbox at a specific sandbox daemon implementation, overriding the org's `sandbox_go_daemon` flag in either direction. Only honored on `agent-sandbox`, and only when the deployment configures a Go SandboxTemplate; otherwise the sandbox lands on `ts`. Applies to a sandbox being created \u2014 an existing sandbox keeps the binary it booted with.")}),outputSchema:BK.object({previewUrl:BK.string().nullable(),sandboxHandle:BK.string(),branch:BK.string(),isNewVm:BK.boolean(),sandboxProviderKind:BK.enum(["agent-sandbox","user-desktop"])}),handler:async(Z,X)=>{D0(X);let G=B0(X);await X.access.check();let Y=Z.branch??f70(C70(X.auth.user)),Q=V1(X);if(!Q)throw Error("User ID required");let $=await xF(X,Y,Q),J=await X.storage.virtualMcps.findById(Z.virtualMcpId);if(!J||J.organization_id!==G.id)throw Error("Virtual MCP not found");let W=J.metadata??{},K=Z.sandboxProviderKind?IF(Z.sandboxProviderKind):void 0,{provider:N,kind:F}=await kJ(X,{userId:$,branch:Y,virtualMcpMetadata:W,explicitKind:K}),U=aw(v9(W),$,Y,F),w=await Sp(X,OO(Y)??X.metadata?.threadId)??W.githubRepo??null,{entry:O,isNewVm:D}=await EK8({ctx:X,userId:Q,sandboxUserId:$,orgId:G.id,virtualMcpId:Z.virtualMcpId,branch:Y,metadata:W,githubRepo:w,existing:U,providerKind:F,runner:N,daemonImpl:Z.daemonImpl});return{...O,branch:Y,isNewVm:D,sandboxProviderKind:F}}})});async function XH4(Z,X,G,Y){try{let Q=Z.organization;if(!Q)return;let $=await s70(Z,Y.virtualMcpId,Q,"tool-scripting",Y.providerKind),J=await X.proxyDaemonRequest(G,"/_sandbox/tools/sync",{method:"POST",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify($)});if(!J.ok)console.warn("[cluster-sandbox-fs] tools/sync failed",J.status,await J.text().catch(()=>""))}catch(Q){console.warn("[cluster-sandbox-fs] tools/sync failed",Q)}}async function Ry(Z,X){let{provider:G,kind:Y}=await kJ(Z,{userId:X.userId,branch:X.branch,virtualMcpMetadata:null}),Q=null,$=()=>{if(!Q){if(Q=vO0({virtualMcpId:X.virtualMcpId,branch:X.branch,sandboxProviderKind:Y},Z).then((K)=>K.sandboxHandle),Q.catch(()=>{Q=null}),X.syncTools)Q.then((K)=>XH4(Z,G,K,{virtualMcpId:X.virtualMcpId,providerKind:Y})).catch(()=>{})}return Q},J=X.branch==="ephemeral"||Y==="user-desktop";return Sn0(G,{ensureHandle:$,invalidateHandle:async(K)=>{let N=Q;if(Q=null,!J&&!K?.force)return;try{await sw(Z.storage.virtualMcps,X.virtualMcpId,X.userId,X.userId,X.branch,Y)}catch(F){console.warn("[cluster-sandbox-fs] failed to reap vmMap entry",F)}if(N&&typeof G.forgetHandle==="function")try{let F=await N;await G.forgetHandle(F)}catch(F){console.warn("[cluster-sandbox-fs] forgetHandle failed",F)}},canAutoRestart:J})}async function zK8(Z,X){try{let G=await Ry(Z,X),{stdout:Y}=await G.onBash("test -d .deco && echo __DECO_SITE__");return Y.includes("__DECO_SITE__")}catch(G){return console.warn("[cluster-sandbox-fs] .deco probe failed; assuming deco site",G),!0}}var _O0=B(()=>{p3();un0();Ay();xO0();uQ()});function Iy(Z){let X=Z.toISOString();return`<current-context>
1270
+ `))>=0){let K=Y.slice(0,W).trim();if(Y=Y.slice(W+1),!K)continue;yield JSON.parse(K)}}let Q=Y.trim();if(Q)yield JSON.parse(Q)}finally{X.releaseLock()}}var HW8,wW8,DW8="gateway.networking.k8s.io",LW8="v1",EW8="httproutes",cF4,Ip,jW8="mesh-sandbox-runner";var jO0=B(()=>{c9();Pp();HW8=class HW8 extends Error{status;body;constructor(Z,X,G){super(G);this.status=Z;this.body=X;this.name="KubeHttpError"}};wW8=`/apis/${AZ.CLAIM_API_GROUP}/${AZ.CLAIM_API_VERSION}/namespaces`;cF4=`/apis/${DW8}/${LW8}/namespaces`;Ip={API_GROUP:DW8,API_VERSION:LW8,PLURAL:EW8}});var AO0=B(()=>{c9();g70()});async function TO0(Z){try{let X=await fetch(`${Z}/health`,{signal:AbortSignal.timeout(lF4)});if(!X.ok)return null;let G=await X.json();if(typeof G==="object"&&G!==null&&typeof G.bootId==="string"&&typeof G.ready==="boolean"&&G.setup&&typeof G.setup.running==="boolean"&&typeof G.setup.done==="boolean")return G;return null}catch{return null}}async function IW8(Z){for(let X=0;X<PW8;X++){if(await TO0(Z)!==null)return;let G=(Math.random()*2-1)*dF4;await d6(TW8+G)}throw Error(`sandbox daemon at ${Z} did not respond on /health within ${PW8*TW8/1000}s`)}async function jy(Z,X,G,Y,Q){return mF4(Z,X,"POST",G,Y,Q)}async function mF4(Z,X,G,Y,Q,$){let J={...Y};if(Q&&Q.rotateToken!==void 0)J.auth=Q;let W=await fetch(`${Z}/_sandbox/config`,{method:G,headers:{"Content-Type":"application/json",Authorization:`Bearer ${X}`},body:JSON.stringify(J),signal:AbortSignal.timeout($?.timeoutMs??RW8)}),K=await W.text();if(!W.ok)throw new PO0(W.status,K);return JSON.parse(K)}async function qW8(Z,X,G){let Y=await fetch(`${Z}/_sandbox/orgfs-config`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${X}`},body:G,signal:AbortSignal.timeout(RW8)}),Q=await Y.text();if(!Y.ok)throw Error(`sandbox daemon /_sandbox/orgfs-config returned ${Y.status}: ${Q}`);return JSON.parse(Q)}async function qp(Z,X,G,Y){let Q=new Headers(Y.headers);for(let W of iF4)Q.delete(W);Q.set("authorization",`Bearer ${X}`);let $=Y.method!=="GET"&&Y.method!=="HEAD",J=`${Z}${G.startsWith("/")?G:`/${G}`}`;return fetch(J,{method:Y.method,headers:Q,body:$?Y.body:void 0,redirect:"manual",signal:Y.signal,duplex:$?"half":void 0})}var PO0,lF4=500,RW8=30000,PW8=25,TW8=200,dF4=50,iF4;var MW8=B(()=>{AO0();PO0=class PO0 extends Error{status;constructor(Z,X){super(`sandbox daemon /_sandbox/config returned ${Z}: ${X}`);this.status=Z;this.name="ConfigRequestError"}};iF4=["cookie","host","connection","keep-alive","proxy-authenticate","proxy-authorization","te","trailer","transfer-encoding","accept-encoding","content-length"]});async function*VW8(Z){let X=Z.now??(()=>Date.now()),G=X(),Y=Z.schedulingTimeoutMs??tF4,Q={pod:{},sandbox:{},events:{hasPulling:!1,hasPulled:!1},startedAt:G},$=[],J=null,W=!1,K=(z)=>{if(W)return;if(J){let j=J;J=null,j(z)}else $.push(z)},N=()=>{if($.length>0)return Promise.resolve($.shift());if(W)return Promise.resolve(null);return new Promise((z)=>{J=z})},F=()=>{if(W)return;if(W=!0,J){let z=J;J=null,z(null)}},U=new AbortController,H=()=>{U.abort(),F()};if(Z.signal)if(Z.signal.aborted)U.abort(),F();else Z.signal.addEventListener("abort",H,{once:!0});let w=Math.max(0,Y-(X()-G)),O=setTimeout(()=>K("tick"),w+100),D,L=new Promise((z)=>{D=z}),E=Promise.allSettled([oF4(Z.kc,Z.namespace,Z.claimName,U.signal,Q,K,X,D),aF4(Z.kc,Z.namespace,Z.claimName,U.signal,Q,K),sF4(Z.kc,Z.namespace,Z.claimName,L,U.signal,Q,K,X)]);try{let z=null,j=-1,A=kW8(Q,Y,X);if(z=dt0(A),!lt0(A))j=SW8(A);if(yield A,lt0(A))return;while(!W){if(await N()===null)break;let q=kW8(Q,Y,X);if(lt0(q)){let C=dt0(q);if(C!==z)z=C,yield q;return}let S=SW8(q);if(S<j)continue;let M=dt0(q);if(M!==z)z=M,j=S,yield q}}finally{if(clearTimeout(O),U.abort(),Z.signal)Z.signal.removeEventListener("abort",H);F(),await E.catch(()=>{})}}function kW8(Z,X,G){let{pod:Y,sandbox:Q,events:$,startedAt:J}=Z;if(Q.ready)return{kind:"ready"};let W=Y.containerWaitingReason;if(W==="ImagePullBackOff"||W==="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(W==="CrashLoopBackOff")return{kind:"failed",reason:"crash-loop-backoff",message:"Sandbox crashed during startup and is now in CrashLoopBackOff. Check pod logs."};if(!Y.scheduled&&$.lastFailedSchedulingAt!==void 0&&G()-J>X)return{kind:"failed",reason:"scheduling-timeout",message:$.failedSchedulingMessage??`Pod could not be scheduled within ${Math.round(X/1000)}s.`};if(Y.containerRunning&&!Y.containerReady)return{kind:"warming-daemon",since:J};if($.hasPulling&&!$.hasPulled)return{kind:"pulling-image",since:J};if(W==="ContainerCreating"||W==="PodInitializing"||Y.scheduled&&!Y.containerRunning)return{kind:"starting-container",since:J};if(Y.scheduledFalseReason==="Unschedulable"||$.lastFailedSchedulingAt!==void 0&&!Y.scheduled)return{kind:"waiting-for-capacity",since:J,message:$.failedSchedulingMessage??Y.scheduledFalseMessage,nodeClaim:$.nominatedNodeClaim};return{kind:"claiming",since:J}}function lt0(Z){return Z.kind==="ready"||Z.kind==="failed"}function SW8(Z){switch(Z.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 dt0(Z){switch(Z.kind){case"claiming":case"pulling-image":case"starting-container":case"warming-daemon":return Z.kind;case"waiting-for-capacity":return`waiting-for-capacity:${Z.message??""}:${Z.nodeClaim??""}`;case"ready":return"ready";case"failed":return`failed:${Z.reason}:${Z.message}`}}async function oF4(Z,X,G,Y,Q,$,J,W){let K=`/api/v1/namespaces/${encodeURIComponent(X)}/pods?watch=true&labelSelector=${encodeURIComponent(`${nF4}=${G}`)}`;return RO0({kc:Z,path:K,signal:Y,label:`pod/${G}`,onEvent:(N)=>{if(N.type!=="ADDED"&&N.type!=="MODIFIED")return;let F=N.object;if(F.metadata?.name)W(F.metadata.name);rF4(F,Q,J),$("pod")}})}function rF4(Z,X,G){let Q=(Z.status?.conditions??[]).find((J)=>J.type==="PodScheduled");if(Q?.status==="True")X.pod.scheduled=!0,X.pod.scheduledFalseReason=void 0,X.pod.scheduledFalseMessage=void 0;else if(Q?.status==="False")X.pod.scheduled=!1,X.pod.scheduledFalseReason=Q.reason,X.pod.scheduledFalseMessage=Q.message;let $=(Z.status?.containerStatuses??[]).find((J)=>J.name===pF4);if($)X.pod.containerWaitingReason=$.state?.waiting?.reason,X.pod.containerRunning=!!$.state?.running,X.pod.containerReady=$.ready===!0}async function aF4(Z,X,G,Y,Q,$){let J=`/apis/${AZ.CLAIM_API_GROUP}/${AZ.CLAIM_API_VERSION}/namespaces/${encodeURIComponent(X)}/${AZ.CLAIM_PLURAL}?watch=true&fieldSelector=${encodeURIComponent(`metadata.name=${G}`)}`;return RO0({kc:Z,path:J,signal:Y,label:`sandboxclaim/${G}`,onEvent:(W)=>{if(W.type!=="ADDED"&&W.type!=="MODIFIED")return;let N=W.object.status?.conditions?.find((F)=>F.type==="Ready");if(!N)return;if(N.status==="True")Q.sandbox.ready=!0,Q.sandbox.notReadyReason=void 0,Q.sandbox.notReadyMessage=void 0;else Q.sandbox.ready=!1,Q.sandbox.notReadyReason=N.reason,Q.sandbox.notReadyMessage=N.message;$("sandbox")}})}async function sF4(Z,X,G,Y,Q,$,J,W){let K=await Promise.race([Y,new Promise((F)=>{if(Q.aborted){F(G);return}Q.addEventListener("abort",()=>F(G),{once:!0})})]);if(Q.aborted)return;let N=`/api/v1/namespaces/${encodeURIComponent(X)}/events?watch=true&fieldSelector=${encodeURIComponent(`involvedObject.name=${K},involvedObject.kind=Pod`)}`;return RO0({kc:Z,path:N,signal:Q,label:`events/${G}`,onEvent:(F)=>{if(F.type!=="ADDED"&&F.type!=="MODIFIED")return;let U=F.object,H=U.reason;if(!H)return;switch(H){case"Pulling":$.events.hasPulling=!0;break;case"Pulled":$.events.hasPulling=!0,$.events.hasPulled=!0;break;case"FailedScheduling":$.events.lastFailedSchedulingAt=W(),$.events.failedSchedulingMessage=U.message;break;case"Nominated":{let w=U.message?.match(/nodeclaim\/([\w-]+)/);if(w)$.events.nominatedNodeClaim=w[1];break}default:return}J("event")}})}async function CW8(Z){let{kc:X,namespace:G,labelSelector:Y,signal:Q,onDelete:$}=Z,J=`/apis/${AZ.CLAIM_API_GROUP}/${AZ.CLAIM_API_VERSION}/namespaces/${encodeURIComponent(G)}/${AZ.CLAIM_PLURAL}?watch=true&labelSelector=${encodeURIComponent(Y)}`;return RO0({kc:X,path:J,signal:Q,label:"sandboxclaim-reaper",onEvent:(W)=>{if(W.type!=="DELETED")return;let K=W.object.metadata?.name;if(K)$(K)}})}async function RO0(Z){let{kc:X,path:G,signal:Y,label:Q,onEvent:$}=Z,J=0;while(!Y.aborted){try{let K=await pV(X,{method:"GET",path:G,signal:Y,headers:{accept:"application/json"},stream:!0});if(!K.ok||!K.body){try{await K.body?.cancel()}catch{}if(K.status===401||K.status===403){console.warn(`[lifecycle-watcher] ${Q} stopped: watch denied (${K.status} ${K.statusText}). `+"The kubeconfig in use cannot watch SandboxClaims \u2014 if you are running locally, "+"this provider should not be active (check STUDIO_SANDBOX_PROVIDER / your sandbox preference).");return}throw Error(`watch handshake failed: ${K.status} ${K.statusText}`)}J=0;for await(let N of ct0(K.body)){if(Y.aborted)return;try{$(N)}catch(F){console.warn(`[lifecycle-watcher] ${Q} onEvent threw: ${F instanceof Error?F.message:String(F)}`)}}}catch(K){if(Y.aborted)return;let N=K instanceof Error?K.message:String(K);console.warn(`[lifecycle-watcher] ${Q} watch ended: ${N}`)}if(Y.aborted)return;let W=eY(5000,250,J,2,0);J+=1,await d6(W,{signal:Y}).catch(()=>{})}}var nF4="studio.decocms.com/sandbox-handle",pF4="sandbox",tF4=300000;var fW8=B(()=>{c9();Pp();jO0()});async function bW8(Z,X,G){let Y=new Map;for(let Q of Z){let $=X(Q);if(!$)continue;let J=Y.get($);if(J)J.push(Q);else Y.set($,[Q])}await Promise.allSettled([...Y.values()].map(async(Q)=>{for(let $ of Q)await G($).catch(()=>{})}))}import{createHash as eF4,randomBytes as ZU4,randomUUID as XU4}from"crypto";import*as gW8 from"net";import{PassThrough as GU4}from"stream";function YU4(Z){if(Z instanceof Error)return Z.message;if(Z&&typeof Z==="object"){let X=Z;if(X.error instanceof Error)return X.error.message;if(typeof X.message==="string"&&X.message)return X.message}return String(Z)}class ot0{kind=dY;records=new Map;inflight=new x70;stateStore;previewUrlPattern;kubeConfig;portForward;namespace;sandboxTemplateName;goSandboxTemplateName;envName;tokenGenerator;idleTtlMs;metrics;previewGateway;sentinelToken;mintCloneUrl;closed=!1;claimWatchAbort=new AbortController;constructor(Z={}){this.stateStore=Z.stateStore??null,this.previewUrlPattern=Z.previewUrlPattern??null,this.kubeConfig=Z.kubeConfig??BU4(),this.portForward=new zt0(this.kubeConfig),this.namespace=Z.namespace??QU4,this.sandboxTemplateName=Z.sandboxTemplateName??$U4;let X=Z.goSandboxTemplateName?.trim()??"";this.goSandboxTemplateName=X.length>0?X:null,this.envName=AU4(Z.envName),this.tokenGenerator=Z.tokenGenerator??(()=>ZU4(WU4).toString("hex")),this.idleTtlMs=Z.idleTtlMs??NU4,this.metrics=Z.meter?OU4(Z.meter):null,this.previewGateway=Z.previewGateway&&Z.previewUrlPattern?{...Z.previewGateway}:null;let G=Z.sentinelToken?.trim()??"";this.sentinelToken=G.length>0?G:null,this.mintCloneUrl=Z.mintCloneUrl,this.startClaimReaper(),this.startCredentialRefresher()}startClaimReaper(){let Z=["app.kubernetes.io/managed-by=studio","app.kubernetes.io/name=studio-sandbox",...this.envName?[`${iG.env}=${this.envName}`]:[]].join(",");CW8({kc:this.kubeConfig,namespace:this.namespace,labelSelector:Z,signal:this.claimWatchAbort.signal,onDelete:(X)=>this.invalidateRecord(X)})}async ensure(Z,X={}){let G=ow(Z,X.branch??X.repo?.branch??null);return this.inflight.run(G,()=>_70(this.stateStore,Z,dY,(Y)=>this.ensureLocked(Z,G,X,Y)))}async delete(Z){let X=await this.getRecord(Z);if(this.records.delete(Z),X)this.closeForwarder(X.daemonForward),this.metrics?.active.add(-1,pt0(X.tenant,X.daemonImpl));if(await this.deleteHttpRouteIfManaged(Z).catch((G)=>{console.warn(`[${PZ}] HTTPRoute delete failed for ${Z}: ${G instanceof Error?G.message:String(G)}`)}),await FO(this.kubeConfig,this.namespace,Z),this.stateStore)if(X)await this.stateStore.delete(X.id,dY);else await this.stateStore.deleteByHandle(dY,Z)}async alive(Z){return await vF(this.kubeConfig,this.namespace,Z)!==void 0}watchClaimLifecycle(Z,X){return VW8({kc:this.kubeConfig,namespace:this.namespace,claimName:Z,signal:X})}async getPreviewUrl(Z){let X=await this.getRecord(Z);if(!X)return null;return this.composePreviewUrl(X)}async proxyDaemonRequest(Z,X,G){let Y=await this.getRecord(Z);if(!Y&&this.previewUrlPattern&&this.stateStore){let K=await this.stateStore.getByHandle(dY,Z),N=K?.state,F=N?.token;if(K&&F){let H=`http://${N?.adoptedSandboxName??Z}.${this.namespace}.svc.cluster.local:${UO}`;try{let w=await qp(H,F,X,G);if(w.status!==404)return w;try{await w.body?.cancel()}catch{}}catch{}}}if(!Y)Y=await this.resurrectByHandle(Z);if(!Y)return new Response(JSON.stringify({error:"sandbox not found"}),{status:404,headers:{"content-type":"application/json"}});let Q=Y,$=performance.now(),J=0,W=!(G.body instanceof ReadableStream);try{let K=await qp(Y.daemonUrl,Y.token,X,G);if(K.status===401&&W){this.invalidateRecord(Z);let N=await this.getRecord(Z).catch(()=>null)??await this.resurrectByHandle(Z).catch(()=>null);if(N)Q=N,K=await qp(N.daemonUrl,N.token,X,G)}return J=K.status,K}catch(K){if(!W)throw K;this.invalidateRecord(Z);let N=await this.resurrectByHandle(Z)??await this.getRecord(Z).catch(()=>null);if(!N)throw K;Q=N;let F=await qp(N.daemonUrl,N.token,X,G);return J=F.status,F}finally{this.recordProxyDuration("daemon",J,Q,performance.now()-$)}}async adoptLiveClaim(Z,X){if(this.records.has(X))return!0;let G=await vF(this.kubeConfig,this.namespace,X).catch(()=>{return});if(!G||G.metadata?.deletionTimestamp)return!1;return await this.inflight.run(X,async()=>{let Q=this.records.get(X);if(Q)return this.toSandbox(Q);let $=await this.adopt(Z,X,G);if(!$)throw Error(`cannot adopt live claim ${X}`);return _70(this.stateStore,Z,dY,(J)=>this.finish($,J,!0,!0,"adopt"))}).catch(()=>null)!=null}async resolvePreviewUpstreamUrl(Z){if(this.previewUrlPattern)return`http://${await this.resolveServiceNameForHandle(Z)}.${this.namespace}.svc.cluster.local:${UO}`;let X=await this.getRecord(Z);if(X)return X.daemonUrl;let G=await this.resurrectByHandle(Z);return G?G.daemonUrl:null}async resolveServiceNameForHandle(Z){let X=this.records.get(Z);if(X)return X.adoptedSandboxName;if(this.stateStore){let Y=(await this.stateStore.getByHandle(dY,Z).catch(()=>null))?.state?.adoptedSandboxName;if(Y)return Y}return Z}async proxyPreviewRequest(Z,X){let G=performance.now(),Y=this.records.get(Z)??null,Q=0;try{let $=await this.resolvePreviewUpstreamUrl(Z);if(!$){Q=404;let O=it0(404,{error:"sandbox not found"});return O.headers.set(oV,"1"),O}let J=new URL(X.url);if((J.pathname==="/_sandbox"||J.pathname.startsWith("/_sandbox/")||J.pathname==="/_decopilot_vm"||J.pathname.startsWith("/_decopilot_vm/"))&&X.method!=="GET")return Q=404,it0(404,{error:"not found"});let K=(O)=>`${O}${J.pathname}${J.search}`,N=new Headers(X.headers);for(let O of HU4)N.delete(O);let F=X.method!=="GET"&&X.method!=="HEAD",U={method:X.method,headers:N,body:F?X.body:void 0,redirect:"manual",signal:X.signal,duplex:F?"half":void 0},H;try{H=await fetch(K($),U)}catch(O){let D=`${$}${J.pathname}`;if(console.warn(`[${PZ}] preview fetch to ${D} failed: ${O instanceof Error?O.message:String(O)}`),X.method==="GET"||X.method==="HEAD"){if(this.invalidateRecord(Z),await this.resurrectByHandle(Z).catch(()=>null)){let z=await this.resolvePreviewUpstreamUrl(Z);if(z)try{H=await fetch(K(z),U);let j=new Headers;for(let[A,P]of H.headers.entries())if(!vW8.includes(A.toLowerCase()))j.set(A,P);return Q=H.status,new Response(H.body,{status:H.status,statusText:H.statusText,headers:j})}catch(j){console.warn(`[${PZ}] preview fetch retry to ${D} failed: ${j instanceof Error?j.message:String(j)}`)}}}else this.invalidateRecord(Z);Q=502;let L=it0(502,{error:"sandbox daemon unreachable"});return L.headers.set(oV,"1"),L}let w=new Headers;for(let[O,D]of H.headers.entries())if(!vW8.includes(O.toLowerCase()))w.set(O,D);return Q=H.status,new Response(H.body,{status:H.status,statusText:H.statusText,headers:w})}finally{this.recordProxyDuration("preview",Q,Y,performance.now()-G,Z)}}async ensureLocked(Z,X,G,Y){if(G.image)console.warn(`[${PZ}] opts.image ignored (template ${this.sandboxTemplateName} pins image): got ${G.image}`);if(Y){let J=await Y.get(Z,dY);if(J){let W=await this.rehydrate(Z,X,J);if(W)return await this.refreshDaemonGitCredential(W,G),this.finish(W,Y,!1,!0,"resume");await Y.delete(Z,dY)}}let Q=await vF(this.kubeConfig,this.namespace,X).catch(()=>{return});if(Q)if(Q.metadata?.deletionTimestamp)await DO0(this.kubeConfig,this.namespace,X).catch((J)=>{console.warn(`[${PZ}] wait for terminating claim ${X} failed: ${J instanceof Error?J.message:String(J)}`)});else{let J=await this.adopt(Z,X,Q).catch((W)=>{return console.warn(`[${PZ}] adopt ${X} failed, recreating: ${W instanceof Error?W.message:String(W)}`),null});if(J)return await this.refreshDaemonGitCredential(J,G),this.finish(J,Y,!0,!0,"adopt");await FO(this.kubeConfig,this.namespace,X).catch(()=>{}),await DO0(this.kubeConfig,this.namespace,X).catch((W)=>{console.warn(`[${PZ}] wait for deleted claim ${X} failed: ${W instanceof Error?W.message:String(W)}`)})}let $=await this.provision(Z,X,G);return this.finish($,Y,!0,!1,"fresh")}async finish(Z,X,G,Y,Q){let $=this.records.get(Z.handle),J=$!==void 0;if($&&$.daemonForward!==Z.daemonForward)this.closeForwarder($.daemonForward);if(this.records.set(Z.handle,Z),G)await this.persist(X,Z);if(Y)await OW8(this.kubeConfig,this.namespace,Z.handle,this.computeShutdownTime()).catch((W)=>console.warn(`[${PZ}] TTL refresh failed for ${Z.handle}: ${W instanceof Error?W.message:String(W)}`));if(this.metrics){let W=pt0(Z.tenant,Z.daemonImpl);if(this.metrics.ensureOutcome.add(1,{...W,outcome:Q}),!J)this.metrics.active.add(1,W)}return this.toSandbox(Z)}buildEnvMap(Z,X){let G={},Y=[];for(let[Q,$]of Object.entries(Z.env??{}))if(KU4.has(Q))Y.push(Q);else G[Q]=$;if(Y.length>0)console.warn(`[${PZ}] opts.env keys overlap reserved bootstrap names and were dropped: ${Y.join(",")}`);return{...G,DAEMON_TOKEN:X.token,DAEMON_BOOT_ID:X.daemonBootId,APP_ROOT:X.workdir,PROXY_PORT:String(UO)}}buildClaim(Z,X,G){let Y=this.sentinelToken!==null,Q=Y?[]:Object.entries(this.buildEnvMap(X,G)).sort(([N],[F])=>N<F?-1:N>F?1:0).map(([N,F])=>({name:N,value:F})),$=RU4(X),J=Object.keys($).length>0,{impl:W,templateName:K}=_W8(X.daemonImpl,this.sandboxTemplateName,this.goSandboxTemplateName);if(X.daemonImpl==="go"&&W!=="go")console.warn(`[${PZ}] daemonImpl=go requested for ${Z} but no Go SandboxTemplate is configured (STUDIO_SANDBOX_GO_TEMPLATE_NAME); landing on ts`);return{apiVersion:`${AZ.CLAIM_API_GROUP}/${AZ.CLAIM_API_VERSION}`,kind:"SandboxClaim",metadata:{name:Z,namespace:this.namespace,labels:{"app.kubernetes.io/name":"studio-sandbox","app.kubernetes.io/managed-by":"studio",[iG.daemonImpl]:W,...this.envName?{[iG.env]:this.envName}:{},...nt0(X.tenant)},...J?{annotations:$}:{}},spec:{sandboxTemplateRef:{name:K},additionalPodMetadata:{labels:nt0(X.tenant,{[iG.role]:"claimed",[iG.sandboxHandle]:Z,[iG.daemonImpl]:W,...this.envName?{[iG.env]:this.envName}:{}}),...J?{annotations:$}:{}},env:Q,warmpool:Y?"default":"none",lifecycle:{shutdownPolicy:"Delete",shutdownTime:this.computeShutdownTime()}}}}async provision(Z,X,G){let Y=this.tokenGenerator(),Q=XU4(),$=mt0,{impl:J}=_W8(G.daemonImpl,this.sandboxTemplateName,this.goSandboxTemplateName),W=this.buildClaim(X,G,{token:Y,daemonBootId:Q,workdir:$});try{await Rp(this.kubeConfig,this.namespace,W)}catch(w){if(w instanceof Ap)await DO0(this.kubeConfig,this.namespace,X),await Rp(this.kubeConfig,this.namespace,W);else throw w}let K;try{K=await BW8(this.kubeConfig,this.namespace,X),await zO0(this.kubeConfig,this.namespace,K)}catch(w){throw await FO(this.kubeConfig,this.namespace,X).catch(()=>{}),w}try{await this.ensureServicePortForAdoptedSandbox(K),await this.ensureHttpRouteForHandle(X,K,G.tenant??null)}catch(w){throw await FO(this.kubeConfig,this.namespace,X).catch(()=>{}),w}let N=await this.openForwarder(K,UO,X),F=`http://127.0.0.1:${N.localPort}`,U=this.workloadConfigPayload(G),H=Q;try{if(await IW8(F),this.sentinelToken!==null){let w=await TO0(F);if(w)H=w.bootId;await jy(F,this.sentinelToken,U??{},{rotateToken:Y})}else if(U)await jy(F,Y,U);await this.relayOrgFsConfig(F,Y,G.orgFsConfigJson)}catch(w){throw this.closeForwarder(N),await this.deleteHttpRouteIfManaged(X).catch(()=>{}),await FO(this.kubeConfig,this.namespace,X).catch(()=>{}),w}return{id:Z,handle:X,adoptedSandboxName:K,token:Y,workdir:$,daemonUrl:F,daemonForward:N,workload:G.workload??null,daemonBootId:H,tenant:G.tenant??null,daemonImpl:J,ensureOpts:MU4({...G,daemonImpl:J})}}workloadConfigPayload(Z){return Mn0({runtime:Z?.workload?.runtime??"node",packageManager:Z?.workload?.packageManager?{name:Z.workload.packageManager,...Z.workload.packageManagerPath?{path:Z.workload.packageManagerPath}:{}}:null,repo:Z?.repo??null,port:Z?.workload?.devPort??JU4,tenant:Z?.tenant??void 0})}async relayOrgFsConfig(Z,X,G){if(!G)return;await qW8(Z,X,G).catch((Y)=>console.warn("[org-fs] sidecar config relay failed",Y))}async refreshDaemonGitCredential(Z,X){let G=kn0(X);if(!G)return;try{await jy(Z.daemonUrl,Z.token,G)}catch(Y){console.warn(`[${PZ}] git credential refresh failed for ${Z.handle}: ${Y instanceof Error?Y.message:String(Y)}`)}}async withFreshCloneUrl(Z,X){if(!this.mintCloneUrl)return Z;try{let G=await this.mintCloneUrl(Z,X!==void 0?{bufferMs:X}:void 0);return G?{...Z,cloneUrl:G}:Z}catch(G){return console.warn(`[${PZ}] clone credential re-mint failed: ${G instanceof Error?G.message:String(G)}`),Z}}startCredentialRefresher(){if(!this.mintCloneUrl)return;let{signal:Z}=this.claimWatchAbort;(async()=>{while(!Z.aborted){if(await d6(FU4,{signal:Z}).catch(()=>{}),Z.aborted)break;try{await this.refreshAllGitCredentials()}catch(X){console.warn(`[${PZ}] periodic credential refresh failed: ${X instanceof Error?X.message:String(X)}`)}}})()}async refreshAllGitCredentials(){await bW8(this.records.values(),(Z)=>Z.ensureOpts?.repo?.connectionId,async(Z)=>{if(this.claimWatchAbort.signal.aborted)return;let X=Z.ensureOpts?.repo;if(!X)return;let G=await this.withFreshCloneUrl(X,UU4);await this.refreshDaemonGitCredential(Z,{...Z.ensureOpts,repo:G}),Z.ensureOpts={...Z.ensureOpts,repo:G}})}async rebootstrapDaemon(Z,X,G){if(this.sentinelToken===null)return!1;let Y=this.workloadConfigPayload(G)??{};try{return await jy(Z,this.sentinelToken,Y,{rotateToken:X}),await this.relayOrgFsConfig(Z,X,G?.orgFsConfigJson),!0}catch(Q){if(Q instanceof PO0&&Q.status===401)try{return await jy(Z,X,Y,{rotateToken:X}),await this.relayOrgFsConfig(Z,X,G?.orgFsConfigJson),!0}catch($){return console.warn(`[${PZ}] re-bootstrap retry with claim token failed: ${$ instanceof Error?$.message:String($)}`),!1}return console.warn(`[${PZ}] re-bootstrap failed: ${Q instanceof Error?Q.message:String(Q)}`),!1}}async ensureServicePortForAdoptedSandbox(Z){if(!this.previewGateway||!this.previewUrlPattern)return;await AW8(this.kubeConfig,this.namespace,Z,{name:"daemon",port:UO,targetPort:UO})}async ensureHttpRouteForHandle(Z,X,G){if(!this.previewGateway||!this.previewUrlPattern)return;let Y=kU4(this.previewUrlPattern,Z);if(!Y)throw new gZ(`Unable to derive preview hostname for ${Z} from pattern: ${this.previewUrlPattern}`);let Q={apiVersion:`${Ip.API_GROUP}/${Ip.API_VERSION}`,kind:"HTTPRoute",metadata:{name:Z,namespace:this.namespace,labels:nt0(G??void 0,{[iG.role]:"claimed",[iG.sandboxHandle]:Z,"app.kubernetes.io/name":"studio-sandbox","app.kubernetes.io/managed-by":"studio",...this.envName?{[iG.env]:this.envName}:{}})},spec:{parentRefs:[{kind:"Gateway",group:"gateway.networking.k8s.io",name:this.previewGateway.name,namespace:this.previewGateway.namespace}],hostnames:[Y],rules:[{backendRefs:[{group:"",kind:"Service",name:X,port:UO}]}]}};await LO0(this.kubeConfig,this.namespace,Q)}async deleteHttpRouteIfManaged(Z){if(!this.previewGateway)return;await EO0(this.kubeConfig,this.namespace,Z)}async rehydrate(Z,X,G){let Y=G.state;if(!Y.adoptedSandboxName&&!Y.podName||!Y.token)return null;let Q=await vF(this.kubeConfig,this.namespace,X).catch(()=>{return});if(!Q||!xW8(Q))return null;let $=Q.status?.sandbox?.name??Y.adoptedSandboxName??Y.podName??X,J=await this.openAndProbeDaemon($,X);if(!J)return null;if(Y.daemonBootId&&Y.daemonBootId!==J.bootId){if(this.sentinelToken!==null){let W=Y.ensureOpts?.repo?{...Y.ensureOpts,repo:await this.withFreshCloneUrl(Y.ensureOpts.repo)}:Y.ensureOpts??null;if(!await this.rebootstrapDaemon(J.daemonUrl,Y.token,W))return this.closeForwarder(J.daemonForward),null}else console.warn(`[${PZ}] daemon restart detected (handle=${X}): stored bootId=${Y.daemonBootId} live bootId=${J.bootId}`);await this.stateStore?.put(Z,dY,{handle:X,state:{...Y,daemonBootId:J.bootId}}).catch((W)=>console.warn(`[${PZ}] bootId persist failed for ${X}: ${W instanceof Error?W.message:String(W)}`))}return{id:Z,handle:X,adoptedSandboxName:$,token:Y.token,workdir:Y.workdir??mt0,daemonUrl:J.daemonUrl,daemonForward:J.daemonForward,workload:Y.workload??null,daemonBootId:J.bootId,tenant:Y.tenant??null,ensureOpts:Y.ensureOpts??null,daemonImpl:Y.ensureOpts?.daemonImpl??null}}async adopt(Z,X,G){if(!xW8(G))return null;let Y=G.status?.sandbox?.name??X;if(this.sentinelToken!==null)return null;let Q=DU4(G);if(!Q)return null;let $=await this.openAndProbeDaemon(Y,X);if(!$)return null;let J=IU4(G);if(this.previewGateway)await this.ensureServicePortForAdoptedSandbox(Y).catch((W)=>{console.warn(`[${PZ}] Service port backfill failed for ${X}: ${W instanceof Error?W.message:String(W)}`)}),await this.ensureHttpRouteForHandle(X,Y,J).catch((W)=>{console.warn(`[${PZ}] HTTPRoute backfill failed for ${X}: ${W instanceof Error?W.message:String(W)}`)});return{id:Z,handle:X,adoptedSandboxName:Y,token:Q,workdir:mt0,daemonUrl:$.daemonUrl,daemonForward:$.daemonForward,workload:null,daemonBootId:$.bootId,tenant:J,ensureOpts:null,daemonImpl:qU4(G)}}async openAndProbeDaemon(Z,X){let G=await this.openForwarder(Z,UO,X).catch(()=>null);if(!G)return null;let Y=`http://127.0.0.1:${G.localPort}`,Q=await TO0(Y);if(!Q)return this.closeForwarder(G),null;return{daemonForward:G,daemonUrl:Y,bootId:Q.bootId}}async getRecord(Z){let X=this.records.get(Z);if(X)return X;if(!this.stateStore)return null;let G=await this.stateStore.getByHandle(dY,Z);if(!G)return null;let Y=await this.rehydrate(G.id,Z,G);if(Y)this.records.set(Z,Y);return Y}async resurrectByHandle(Z){if(!this.stateStore)return null;let X=await this.stateStore.getByHandle(dY,Z);if(!X)return null;let G=X.state.ensureOpts;if(!G)return null;let Y=G.repo?{...G,repo:await this.withFreshCloneUrl(G.repo)}:G;return await this.ensure(X.id,Y),this.records.get(Z)??null}invalidateRecord(Z){let X=this.records.get(Z);if(!X)return;this.records.delete(Z),this.closeForwarder(X.daemonForward)}recordProxyDuration(Z,X,G,Y,Q){if(!this.metrics)return;this.metrics.proxyDurationMs.record(Y,{...pt0(G?.tenant??null,G?.daemonImpl??null),source:Z,sandbox_handle:G?.handle??Q??"",status_code:X||0})}composePreviewUrl(Z){if(this.previewUrlPattern)return y70(this.previewUrlPattern,Z.handle);return`http://127.0.0.1:${Z.daemonForward.localPort}/`}toSandbox(Z){return{handle:Z.handle,workdir:Z.workdir,previewUrl:this.composePreviewUrl(Z)}}async persist(Z,X){if(!Z)return;let G={adoptedSandboxName:X.adoptedSandboxName,token:X.token,workdir:X.workdir,workload:X.workload,daemonBootId:X.daemonBootId,tenant:X.tenant,...X.ensureOpts?{ensureOpts:X.ensureOpts}:{}};await Z.put(X.id,dY,{handle:X.handle,state:G})}computeShutdownTime(){return new Date(Date.now()+this.idleTtlMs).toISOString()}openForwarder(Z,X,G=Z){let Y=LU4(G,X);return new Promise((Q,$)=>{let J=(W,K)=>{let N=gW8.createServer((F)=>this.handleForwardedConnection(F,Z,X,G));N.once("error",(F)=>{if(F.code==="EADDRINUSE"&&K<wU4){try{N.close()}catch{}let U=tt0+(W-tt0+1)%hW8;J(U,K+1);return}$(F)}),N.listen(W,"127.0.0.1",()=>{let F=N.address();if(!F||typeof F==="string"){N.close(),$(Error("port-forward listener failed to bind"));return}Q({server:N,localPort:F.port})})};J(Y,0)})}handleForwardedConnection(Z,X,G,Y){let Q=new GU4,$=null,J=!1,W=()=>{if(J)return;if(J=!0,Q.destroy(),$)try{$.close()}catch{}if(!Z.destroyed)Z.destroy()};Z.pipe(Q),Z.on("error",W),Z.on("close",W),this.portForward.portForward(this.namespace,X,[G],Z,null,Q).then((K)=>{let N=typeof K==="function"?K():K;if(!N){W();return}if($=N,$.on("close",W),$.on("error",()=>{this.invalidateRecord(Y),W()}),J)try{$.close()}catch{}}).catch((K)=>{console.warn(`[${PZ}] port-forward to ${X}:${G} failed: ${YU4(K)}`),this.invalidateRecord(Y),W()})}closeForwarder(Z){Z.server.close((X)=>{if(X)console.warn(`[${PZ}] port-forward close on :${Z.localPort} errored: ${X instanceof Error?X.message:String(X)}`)})}close(){if(this.closed)return;this.closed=!0,this.claimWatchAbort.abort();for(let Z of this.records.values())this.closeForwarder(Z.daemonForward);this.records.clear()}}function OU4(Z){return{active:Z.createUpDownCounter("studio.sandbox.active",{description:"Active sandbox count, by runner kind, owning org, and daemon impl. Cross-checks the cAdvisor-derived count from the cluster \u2014 divergence between the two indicates orphaned claims (studio deleted but K8s didn't reap) or unattributed pods.",unit:"{sandbox}"}),ensureOutcome:Z.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 studio didn't know about. Cold-start ratio is the primary input for warm-pool sizing.",unit:"{call}"}),proxyDurationMs:Z.createHistogram("studio.sandbox.proxy.duration_ms",{description:"Wall-clock latency of studio-mediated requests to the sandbox daemon: tool exec proxies (source=daemon) and preview iframe traffic (source=preview).",unit:"ms"})}}function BU4(){let Z=new By;return Z.loadFromDefault(),Z}function xW8(Z){return Boolean(Z.status?.conditions?.some((X)=>X.type==="Ready"&&X.status==="True"))}function DU4(Z){let X=Z.spec?.env;if(!X)return null;for(let G of X)if(G.name==="DAEMON_TOKEN"&&G.value)return G.value;return null}function LU4(Z,X){let G=eF4("sha256").update(`${Z}:${X}`).digest();return tt0+G.readUInt32BE(0)%hW8}function it0(Z,X){return new Response(JSON.stringify(X),{status:Z,headers:{"content-type":"application/json","access-control-allow-origin":"*"}})}function _W8(Z,X,G){if(Z==="go"&&G)return{impl:"go",templateName:G};return{impl:"ts",templateName:X}}function yW8(Z){let X=Z.slice(0,zU4);return EU4.test(X)?X:""}function AU4(Z){if(Z===void 0)return null;let X=Z.trim();if(X==="")return null;if(!jU4.test(X))throw Error(`AgentSandboxProvider: envName=${JSON.stringify(X)} is not a valid DNS-label-safe environment name (lowercase alphanumeric or '-', starts with a letter, ends alphanumeric, \u226432 chars). Studio sets this from STUDIO_ENV; check the studio chart's configMap.`);return X}function nt0(Z,X={}){let G={...X};if(Z){let Y=yW8(Z.orgId),Q=yW8(Z.userId);if(Y)G[iG.orgId]=Y;if(Q)G[iG.userId]=Q}return G}function tV(Z){let X="";for(let G of Z){let Y=G.codePointAt(0)??0;X+=Y<32||Y===127?" ":G}return X.slice(0,PU4)}function TU4(Z){try{let X=new URL(Z);return X.username="",X.password="",X.toString()}catch{return""}}function RU4(Z){let X={},G=Z.tenant;if(G?.orgSlug)X[MJ.orgSlug]=tV(G.orgSlug);if(G?.orgName)X[MJ.orgName]=tV(G.orgName);if(G?.userEmail)X[MJ.userEmail]=tV(G.userEmail);if(G?.userName)X[MJ.userName]=tV(G.userName);let Y=Z.repo;if(Y){if(Y.displayName)X[MJ.gitRepo]=tV(Y.displayName);let Q=TU4(Y.cloneUrl);if(Q)X[MJ.gitRepoUrl]=tV(Q);let $=Z.branch??Y.branch;if($)X[MJ.gitBranch]=tV($)}return X}function IU4(Z){let X=Z.metadata?.labels;if(!X)return null;let G=X[iG.orgId],Y=X[iG.userId];if(!G||!Y)return null;let Q=Z.metadata?.annotations??{};return{orgId:G,userId:Y,orgSlug:Q[MJ.orgSlug],orgName:Q[MJ.orgName],userEmail:Q[MJ.userEmail],userName:Q[MJ.userName]}}function qU4(Z){let X=Z.metadata?.labels?.[iG.daemonImpl];return X==="go"||X==="ts"?X:null}function pt0(Z,X){return{org_id:Z?.orgId??"",user_id:Z?.userId??"",runner_kind:dY,daemon_impl:X??""}}function MU4(Z){let X={};if(Z.repo)X.repo=Z.repo;if(Z.workload)X.workload=Z.workload;if(Z.env&&Object.keys(Z.env).length>0)X.env=Z.env;if(Z.tenant)X.tenant=Z.tenant;if(Z.orgFsConfigJson)X.orgFsConfigJson=Z.orgFsConfigJson;if(Z.daemonImpl)X.daemonImpl=Z.daemonImpl;return Object.keys(X).length>0?X:null}function kU4(Z,X){try{return new URL(y70(Z,X)).hostname||null}catch{return null}}var dY="agent-sandbox",PZ="AgentSandboxProvider",oV="x-sandbox-preview-not-ready",QU4="agent-sandbox-system",$U4="studio-sandbox",UO=9000,JU4=3000,mt0="/app",WU4=32,KU4,NU4=900000,FU4=900000,UU4=1800000,HU4,vW8,tt0=40000,hW8=1e4,wU4=256,iG,MJ,EU4,zU4=63,jU4,PU4=253;var uW8=B(()=>{c9();xt0();MW8();h70();jO0();Pp();fW8();KU4=new Set(["DAEMON_TOKEN","DAEMON_BOOT_ID","APP_ROOT","PROXY_PORT"]),HU4=["cookie","host","connection","keep-alive","proxy-authenticate","proxy-authorization","te","trailer","transfer-encoding","accept-encoding","content-length","upgrade"],vW8=["connection","keep-alive","transfer-encoding","content-encoding","content-length"];iG={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",daemonImpl:"studio.decocms.com/daemon-impl"};MJ={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"},EU4=/^([A-Za-z0-9]([-A-Za-z0-9_.]*[A-Za-z0-9])?)?$/;jU4=/^[a-z]([a-z0-9-]{0,30}[a-z0-9])?$/});var cW8={};$4(cW8,{waitForSandboxReady:()=>zO0,getSandboxClaim:()=>vF,getHttpRoute:()=>zW8,deleteSandboxClaim:()=>FO,deleteHttpRoute:()=>EO0,createSandboxClaim:()=>Rp,applyHttpRoute:()=>LO0,SandboxTimeoutError:()=>nV,SandboxError:()=>gZ,PREVIEW_NOT_READY_HEADER:()=>oV,KubeConfig:()=>By,K8S_CONSTANTS:()=>AZ,HTTPROUTE_CONSTANTS:()=>Ip,AgentSandboxProvider:()=>ot0});var rt0=B(()=>{xt0();Pp();jO0();uW8()});class IO0{kind=HO;userSub;dispatch;stateStore;records=new Map;constructor(Z){if(!Z.userSub)throw Error("DesktopSandboxProvider requires userSub");if(!Z.dispatch)throw Error("DesktopSandboxProvider requires dispatch");this.userSub=Z.userSub,this.dispatch=Z.dispatch,this.stateStore=Z.stateStore??null}async ensure(Z,X={}){let G=X.branch??X.repo?.branch,Y=ow(Z,G),Q=this.records.get(Y);if(Q){if(await this.probeHealth(Y))return this.toSandbox(Q);if(this.records.delete(Y),this.stateStore)await this.stateStore.deleteByHandle(HO,Y).catch(()=>{})}else if(this.stateStore){let H=(await this.stateStore.getByHandle(HO,Y))?.state,w=H?.sandboxApiUrl;if(w){if(await this.probeHealth(Y)){let O={handle:Y,sandboxApiUrl:w,previewUrl:H?.previewUrl??w};return this.records.set(Y,O),this.toSandbox(O)}await this.stateStore.deleteByHandle(HO,Y).catch(()=>{})}}let $=qF({userName:X.tenant?.userName,userEmail:X.tenant?.userEmail}),J=JSON.stringify({handle:Y,repo:X.repo,branch:G,...X.workload?{workload:X.workload}:{},...$?{operator:$}:{},...X.offloadAllowedHosts?{offloadAllowedHosts:X.offloadAllowedHosts}:{},...X.offloadAllowSameHostDev!==void 0?{offloadAllowSameHostDev:X.offloadAllowSameHostDev}:{},...X.orgFsConfigJson?{orgFsConfigJson:X.orgFsConfigJson}:{}}),W=await this.dispatchJson("POST","/api/sandboxes",J),K=JSON.parse(W);if(typeof K.sandboxApiUrl!=="string")throw Error("desktop ensure: daemon did not return a sandboxApiUrl string");let N=typeof K.previewUrl==="string"?K.previewUrl:K.sandboxApiUrl,F={handle:Y,sandboxApiUrl:K.sandboxApiUrl,previewUrl:N};if(this.records.set(Y,F),this.stateStore)await this.stateStore.put(Z,HO,{handle:Y,state:{handle:Y,sandboxApiUrl:K.sandboxApiUrl,previewUrl:N}});return this.toSandbox(F)}async proxyDaemonRequest(Z,X,G){let Y=X.startsWith("/")?X:`/${X}`,Q=Y.startsWith("/_sandbox/")?Y.slice(9):Y,$=`/_sandbox/${encodeURIComponent(Z)}${Q}`,J=new Headers(G.headers);for(let E of["host","cookie","connection","keep-alive","transfer-encoding","upgrade","authorization"])J.delete(E);let W={};J.forEach((E,z)=>{W[z]=E});let K;if(G.body!=null)K=await VU4(G.body);let F=this.dispatch(this.userSub,{method:G.method,path:$,headers:W,body:K},{signal:G.signal})[Symbol.asyncIterator](),U=SU4(),H=200,w={"content-type":"application/octet-stream"},O=[];try{while(!0){let E=await F.next();if(E.done)break;let z=E.value;if(z.headers){H=z.headers.status,w=z.headers.headers;break}if(z.data!=null){let j=U.push(z.data);if(j.length)O.push(j)}}}catch(E){let z=E instanceof Error?E.message:"dispatch error";return new Response(JSON.stringify({error:z}),{status:502,headers:{"content-type":"application/json"}})}let D=!1,L=new ReadableStream({async start(E){for(let z of O)E.enqueue(z)},async pull(E){try{while(!0){let z=await F.next();if(D)return;if(z.done){let A=U.flush();if(A.length)E.enqueue(A);E.close();return}let j=z.value;if(j.data!=null){let A=U.push(j.data);if(A.length){E.enqueue(A);return}}}}catch(z){if(!D)E.error(z)}},cancel(){D=!0,F.return?.()}});return new Response(L,{status:H,headers:w})}async alive(Z){return this.probeHealth(Z)}async probeHealth(Z){let X=new AbortController,G=setTimeout(()=>X.abort(),3000);try{return await this.dispatchJson("GET",`/api/sandboxes/${encodeURIComponent(Z)}`,void 0,X.signal),!0}catch{return!1}finally{clearTimeout(G)}}async forgetHandle(Z){if(this.records.delete(Z),this.stateStore)await this.stateStore.deleteByHandle(HO,Z).catch(()=>{})}async delete(Z){if(this.records.delete(Z),this.stateStore)await this.stateStore.deleteByHandle(HO,Z).catch(()=>{});try{await this.dispatchJson("DELETE",`/api/sandboxes/${encodeURIComponent(Z)}`)}catch(X){if(!(X instanceof Error?X.message:String(X)).includes("404"))throw X}}async getPreviewUrl(Z){return(await this.resolveRecord(Z))?.previewUrl??null}async localWorkdir(Z){return null}async*watchClaimLifecycle(Z,X){yield{kind:"ready"}}toSandbox(Z){return{handle:Z.handle,workdir:Z.sandboxApiUrl,previewUrl:Z.previewUrl}}async resolveRecord(Z){let X=this.records.get(Z);if(X)return X;if(!this.stateStore)return null;let Y=(await this.stateStore.getByHandle(HO,Z))?.state,Q=Y?.sandboxApiUrl;if(!Q)return null;let $={handle:Z,sandboxApiUrl:Q,previewUrl:Y?.previewUrl??Q};return this.records.set(Z,$),$}async dispatchJson(Z,X,G,Y){let Q={accept:"application/json"};if(G!==void 0)Q["content-type"]="application/json";let $=this.dispatch(this.userSub,{method:Z,path:X,headers:Q,body:G},{signal:Y}),J=null,W="";for await(let N of $)if(N.headers)J=N.headers.status;else if(N.data!=null)W+=N.data;let K=Buffer.from(W,"base64").toString("utf8");if(J!=null&&(J<200||J>=300))throw Error(`daemon returned ${J}: ${K}`);return K}}function lW8(Z){return new IO0(Z)}function SU4(){let Z="";return{push(X){if(X.length===0)return at0;Z+=X;let G=Z.length-Z.length%4;if(G===0)return at0;let Y=Z.slice(0,G);return Z=Z.slice(G),new Uint8Array(Buffer.from(Y,"base64"))},flush(){if(Z.length===0)return at0;let X=Z;return Z="",new Uint8Array(Buffer.from(X,"base64"))}}}async function VU4(Z){if(typeof Z==="string")return Z;if(Z instanceof ArrayBuffer)return Buffer.from(Z).toString("utf8");if(ArrayBuffer.isView(Z))return Buffer.from(Z.buffer,Z.byteOffset,Z.byteLength).toString("utf8");if(Z instanceof URLSearchParams)return Z.toString();return await new Response(Z).text()}var HO="user-desktop",at0;var dW8=B(()=>{h70();g70();at0=new Uint8Array(0)});var mW8={};$4(mW8,{createDesktopProvider:()=>lW8,DesktopSandboxProvider:()=>IO0});var iW8=B(()=>{dW8()});var aW8={};$4(aW8,{subscribeLifecycle:()=>Zo0,getSandboxProviderByKind:()=>et0,getOrInitSharedRunner:()=>hU4,buildDesktopProvider:()=>qO0,__resetSharedLifecyclesForTesting:()=>mU4});function oW8(Z,X){let G=nW8[Z];if(G)return Promise.resolve(G);let Y=st0[Z];if(Y)return Y;let Q=X().then(($)=>{return nW8[Z]=$,$}).finally(()=>{delete st0[Z]});return st0[Z]=Q,Q}function bU4(){let Z=process.env.STUDIO_SANDBOX_PREVIEW_URL_PATTERN;return Z&&Z.trim()!==""?Z:void 0}function vU4(){let Z=process.env.STUDIO_SANDBOX_TEMPLATE_NAME;return Z&&Z.trim()!==""?Z:void 0}function xU4(){let Z=process.env.STUDIO_SANDBOX_GO_TEMPLATE_NAME;return Z&&Z.trim()!==""?Z:void 0}function _U4(){let Z=process.env.STUDIO_ENV;return Z&&Z.trim()!==""?Z:void 0}function yU4(){let Z=process.env.STUDIO_SANDBOX_SENTINEL_TOKEN;return Z&&Z.trim()!==""?Z:void 0}function gU4(){let Z=process.env.STUDIO_SANDBOX_PREVIEW_GATEWAY_NAME?.trim(),X=process.env.STUDIO_SANDBOX_PREVIEW_GATEWAY_NAMESPACE?.trim();if(!Z&&!X)return;if(!Z||!X)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:Z,namespace:X}}async function rW8(Z,X){let G=new Yy(X),Y=bU4();switch(Z){case"agent-sandbox":{let{AgentSandboxProvider:Q}=await Promise.resolve().then(() => (rt0(),cW8)),$=new xN($1().encryptionKey);return new Q({stateStore:G,previewUrlPattern:Y,sandboxTemplateName:vU4(),goSandboxTemplateName:xU4(),envName:_U4(),previewGateway:gU4(),sentinelToken:yU4(),meter:D6,mintCloneUrl:async(J,W)=>{if(!J.connectionId)return null;let K=cX8(J.cloneUrl);if(!K)return null;let{cloneUrl:N}=await ew(J.connectionId,K.owner,K.name,X,$,{bufferMs:W?.bufferMs});return N}})}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(Z)}`)}}async function qO0(Z,X){let{DesktopSandboxProvider:G}=await Promise.resolve().then(() => (iW8(),mW8)),{getProxyDispatch:Y}=await Promise.resolve().then(() => (Go0(),Xo0)),Q=new Yy(Z.db);if(!X)throw Error("buildDesktopProvider: userSub must be a non-empty string");let $=Y();return new G({userSub:X,dispatch:$,stateStore:Q})}function et0(Z,X){return oW8(X,()=>rW8(X,Z.db))}async function hU4(){let Z;try{Z=TJ()}catch(G){return console.warn("[lifecycle] cannot resolve sandbox runner:",G instanceof Error?G.message:String(G)),null}return await oW8(Z,()=>rW8(Z,T6().db))}function Zo0(Z,X,G){let Y=wO.get(X);if(Y){if(Y.terminated){if(Y.lastPhase)try{G(Y.lastPhase)}catch{}return{unsubscribe:lU4}}if(Y.listeners.add(G),Y.lastPhase)try{G(Y.lastPhase)}catch{}return pW8(X,Y,G)}let Q=new AbortController,$={lastPhase:null,terminated:!1,listeners:new Set([G]),abort:Q};return wO.set(X,$),dU4(Z,X,$),pW8(X,$,G)}function lU4(){}function pW8(Z,X,G){return{unsubscribe(){if(wO.get(Z)!==X)return;if(X.listeners.delete(G),X.listeners.size===0)wO.delete(Z),X.abort.abort()}}}async function dU4(Z,X,G){let Y=null;try{for await(let Q of Z.watchClaimLifecycle(X,G.abort.signal)){if(G.abort.signal.aborted)break;G.lastPhase=Q;let $=Q.kind==="ready"||Q.kind==="failed";if($)G.terminated=!0;let J=Array.from(G.listeners);for(let W of J)try{W(Q)}catch{}if($)break}}catch(Q){Y=Q}finally{if(!G.terminated&&!G.abort.signal.aborted&&G.listeners.size>0){let Q={kind:"failed",reason:"unknown",message:Y instanceof Error?Y.message:"Lifecycle watcher ended unexpectedly"};G.lastPhase=Q,G.terminated=!0;for(let $ of Array.from(G.listeners))try{$(Q)}catch{}}if(wO.get(X)===G)wO.delete(X)}}function mU4(){for(let Z of wO.values())Z.abort.abort();wO.clear()}var CU4,fU4,tW8,nW8,st0,uU4,cU4,wO;var MO0=B(()=>{p3();WY();w9();ln0();Gp();Wl();b8();CU4=Symbol.for("decocms.sandbox.lifecycle.runners"),fU4=Symbol.for("decocms.sandbox.lifecycle.inflight"),tW8=globalThis,nW8=tW8[CU4]??={},st0=tW8[fU4]??={};uU4=Symbol.for("decocms.sandbox.lifecycle.shared-lifecycles"),cU4=globalThis,wO=cU4[uU4]??=new Map});async function kJ(Z,X){let{userId:G,branch:Y,virtualMcpMetadata:Q,explicitKind:$}=X;if($)return{provider:await Mp(Z,G,$),kind:$};if(Z.sandboxPreference==="agent-sandbox")return{provider:await Mp(Z,G,"agent-sandbox"),kind:"agent-sandbox"};if(Z.sandboxPreference==="user-desktop")return{provider:await qO0(Z,G),kind:"user-desktop"};if(Z.sandboxPreference==="cluster-default"){let F=TJ();return{provider:await Mp(Z,G,F),kind:F}}let[J,...W]=iU4(Q,G,Y);if(J){let F=W.length===0?J:nU4(J,W);return{provider:await Mp(Z,G,F),kind:F}}let K=sW8();return{provider:await Mp(Z,G,K),kind:K}}function iU4(Z,X,G){let Y=v9(Z)[X]?.[G];if(!Y)return[];let Q=f$(Y);return Object.keys(Q)}function nU4(Z,X){let G=sW8();if(G===Z||X.includes(G))return G;return Z}function sW8(){return TJ()}async function Mp(Z,X,G){if(G!=="user-desktop")return et0(Z,G);return qO0(Z,X)}var Ay=B(()=>{R6();p3();uQ();MO0()});var kp;var Yo0=B(()=>{kp={npm:{install:"npm install",run:(Z)=>`npm run ${Z}`,runtime:"node"},pnpm:{install:"pnpm install",run:(Z)=>`pnpm run ${Z}`,runtime:"node"},yarn:{install:"yarn install",run:(Z)=>`yarn run ${Z}`,runtime:"node"},bun:{install:"bun install",run:(Z)=>`bun run ${Z}`,runtime:"bun"},deno:{install:"deno install",run:(Z)=>`deno task ${Z}`,runtime:"deno"}}});function kO0(Z,X){return X?`thread:${Z}/${X}`:`thread:${Z}`}function SO0(Z){return`sandbox/thread-${Z.replace(/^thread:/,"").replace(/\//g,"-")}`}function OO(Z){if(!Z||!Z.startsWith("thread:"))return null;return Z.slice(7).split("/")[0]||null}async function xF(Z,X,G){let Y=OO(X);if(!Y)return G;return(await Z.storage.threads.get(Y).catch(()=>null))?.created_by??G}async function Py(Z,X){if(!X)return null;let G=await Z.storage.threads.get(X).catch(()=>null);if(!G)return null;return G.metadata??{}}async function eW8(Z,X){let Y=(await Py(Z,X))?.headRef;return typeof Y==="string"&&Y.length>0?Y:null}async function ZK8(Z,X,G){let Y=await Py(Z,X);if(!Y)return;if(Y.headRef===G)return;await Z.storage.threads.update(X,{metadata:{...Y,headRef:G}}).catch((Q)=>console.warn("[thread-repo] setThreadHeadRef failed",Q))}async function Sp(Z,X){return(await Py(Z,X))?.githubRepo??null}async function XK8(Z,X,G,Y,Q,$){let J=await Py(Z,X);if(!J)return;let W=Xp(v9(J),G,Y,Q,$);await Z.storage.threads.update(X,{metadata:{...J,sandboxMap:W}}).catch((K)=>console.warn("[thread-repo] setThreadSandboxMapEntry failed",K))}async function GK8(Z,X){return v9(await Py(Z,X))}async function YK8(Z,X,G,Y,Q){let $=await Py(Z,X);if(!$)return;let J=cn0(v9($),G,Y,Q);if(!J)return;await Z.storage.threads.update(X,{metadata:{...$,sandboxMap:J}}).catch((W)=>console.warn("[thread-repo] removeThreadSandboxMapEntry failed",W))}var BO=B(()=>{uQ()});function VO0(Z){if(!Z)return null;let X=Z.runtime;if(!X||typeof X!=="object")return null;let G=X.env;if(!Array.isArray(G))return null;let Y=[];for(let Q of G){if(!Q||typeof Q!=="object")continue;let $=Q;if(typeof $.key!=="string"||!Y10.test($.key))continue;if($.kind==="literal"&&typeof $.value==="string"){Y.push({key:$.key,kind:"literal",value:$.value});continue}if($.kind==="secret"&&typeof $.secretId==="string"&&$.secretId.length>0)Y.push({key:$.key,kind:"secret",secretId:$.secretId})}return Y.length===0?null:Y}function QK8(Z){if(!Z)return null;let X=Z.runtime;if(!X||typeof X!=="object")return null;let G=X.submoduleCredentials;if(!Array.isArray(G))return null;let Y=[];for(let Q of G){if(!Q||typeof Q!=="object")continue;let $=Q;if(typeof $.host==="string"&&$.host.length>0&&typeof $.secretId==="string"&&$.secretId.length>0)Y.push({host:$.host,secretId:$.secretId})}return Y.length===0?null:Y}async function $K8(Z,X){D0(X);let G=B0(X);await X.access.check();let Y=V1(X);if(!Y)throw Error("User ID required");let Q=await X.storage.virtualMcps.findById(Z.virtualMcpId);if(!Q||Q.organization_id!==G.id)throw Error("Virtual MCP not found");let $=Q.metadata??{},J=v9($),W=await xF(X,Z.branch,Y),K=aw(J,W,Z.branch,Z.sandboxProviderKind);return{virtualMcp:Q,metadata:$,userId:Y,sandboxUserId:W,entry:K,organization:G}}function CO0(Z){let X=Z.runtime??null,Y=X?.selected??null,Q=X?.port??null,$=X?.path??null;if(!Y||!(Y in kp))return{packageManager:null,runtime:null,port:Q,packageManagerPath:$,runtimeBinPath:null};let J=kp[Y].runtime;return{packageManager:Y,runtime:J,port:Q,packageManagerPath:$,runtimeBinPath:J==="deno"?"/opt/deno/bin":J==="bun"?"/opt/bun/bin":null}}var Ty=B(()=>{R6();Yo0();uQ();BO()});async function DO(Z,X){let G=Z.body?.getReader();if(!G)return Z.text();let Y=new TextDecoder,Q="",$=0;for(;;){let{done:J,value:W}=await G.read();if(J)break;if($+=W.byteLength,$>X)throw await G.cancel().catch(()=>{}),new JK8(`Upstream response exceeded ${X} bytes`);Q+=Y.decode(W,{stream:!0})}return Q+=Y.decode(),Q}var JK8;var Vp=B(()=>{JK8=class JK8 extends Error{}});async function fO0({ctx:Z,runner:X,handle:G,orgId:Y,userId:Q,entries:$}){if(!$||$.length===0)return;let J={};for(let K of $){if(K.kind==="literal"){J[K.key]=K.value;continue}try{let{value:N}=await Z.storage.secrets.resolveById(K.secretId,Y,Q);J[K.key]=N}catch(N){if(N instanceof S3||N instanceof Jw){console.warn(`[SANDBOX_START] skipping env ${K.key}: ${N.message}. Re-link or recreate the secret to restore.`);continue}throw N}}if(Object.keys(J).length===0)return;let W=await X.proxyDaemonRequest(G,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({env:J})});if(!W.ok){let K=await DO(W,pU4).catch(()=>W.statusText);console.warn(`[SANDBOX_START] daemon rejected env patch (${W.status}): ${K}`)}}var pU4=10485760;var Qo0=B(()=>{Im();Vp()});async function WK8({ctx:Z,orgId:X,userId:G,entries:Y}){if(!Y||Y.length===0)return[];let Q=[];for(let $ of Y)try{let{value:J}=await Z.storage.secrets.resolveById($.secretId,X,G);Q.push({host:$.host,token:J})}catch(J){if(J instanceof S3||J instanceof Jw){console.warn(`[SANDBOX_START] skipping submodule credential for ${$.host}: ${J.message}. Re-link or recreate the secret to restore.`);continue}throw J}return Q}var KK8=B(()=>{Im()});async function UK8(Z,X,G,Y,Q){let $=await qw({connectionId:Z,tokenStorage:new V9(Y,Q)});if(!$.accessToken)return null;return wK8(X,G,$.accessToken)}function HK8(Z,X){return wK8(Z,X,null)}async function wK8(Z,X,G){let Y=new Map,Q=new Set(NK8.map((K)=>K.path));for(let K of Object.values(FK8))for(let N of K??[])Q.add(N);await Promise.all(Array.from(Q).map(async(K)=>{Y.set(K,await oU4(Z,X,K,G))}));let $=NK8.find(({path:K})=>Y.get(K)!==null);if(!$)return null;let J=FK8[$.pm]??[],W=null;for(let K of J)if(W=rU4(Y.get(K)??null),W)break;return{packageManager:$.pm,devPort:W}}async function oU4(Z,X,G,Y){let Q=`https://api.github.com/repos/${Z}/${X}/contents/${encodeURIComponent(G)}`;try{let $={Accept:"application/vnd.github+json","User-Agent":"studio-runtime-detect"};if(Y)$.Authorization=`token ${Y}`;let J=await fetch(Q,{headers:$,signal:AbortSignal.timeout(5000)});if(!J.ok)return null;let W=await J.json();if(!W.content||W.encoding!=="base64")return null;return Buffer.from(W.content,"base64").toString("utf8")}catch{return null}}function rU4(Z){if(!Z)return null;try{let X=JSON.parse(Z),G=X.tasks??X.scripts??{};return(G.dev??G.start??"").match(tU4)?.[1]??null}catch{return null}}var NK8,FK8,tU4;var OK8=B(()=>{Mw();HJ();NK8=[{path:"deno.json",pm:"deno"},{path:"deno.jsonc",pm:"deno"},{path:"bun.lock",pm:"bun"},{path:"bunfig.toml",pm:"bun"},{path:"pnpm-lock.yaml",pm:"pnpm"},{path:"yarn.lock",pm:"yarn"},{path:"package-lock.json",pm:"npm"},{path:"package.json",pm:"bun"}],FK8={deno:["deno.json","deno.jsonc"],bun:["package.json"],pnpm:["package.json"],yarn:["package.json"],npm:["package.json"]},tU4=/(?:--port|PORT=|:)(\d{4,5})/});function BK8(Z){if(Z.explicit)return Z.explicit;return Z.flags?.sandbox_go_daemon===!1?"ts":"go"}function DK8(Z){let{current:X,detached:G,base:Y}=Z.status??{};if(typeof X!=="string"||X.length===0)return null;if(G===!0)return null;if(X===Z.requestedRef)return null;if(aU4.has(X))return null;if(typeof Y==="string"&&Y.length>0&&X===Y)return null;return X}function LK8(Z){if(!Z.branch.startsWith("thread:"))return Z.branch;if(Z.sticky&&Z.recordedHeadRef)return Z.recordedHeadRef;return Z.derivedRef}var aU4;var $o0=B(()=>{aU4=new Set(["main","master","trunk","develop","HEAD"])});async function bO0(Z,X){if(!Z)return{hosts:[],allowSameHostDev:!1};let G;try{G=await Z.presignedGetUrl("link-dispatch/_allowlist_probe",60,{requireFetchable:!0})}catch{return{hosts:[],allowSameHostDev:!1}}let Y;try{Y=new URL(G)}catch{return{hosts:[],allowSameHostDev:!1}}if(Y.protocol!=="https:"&&Y.protocol!=="http:")return{hosts:[],allowSameHostDev:!1};let Q=Y.hostname,$=sU4.has(Q);return{hosts:[Q],allowSameHostDev:$&&!X.isProduction}}var sU4;var Jo0=B(()=>{sU4=new Set(["127.0.0.1","localhost","::1","[::1]","0.0.0.0"])});import{z as BK}from"zod";async function vO0(Z,X){D0(X);let G=B0(X),Y=V1(X);if(!Y)throw Error("User ID required");let Q=await X.storage.virtualMcps.findById(Z.virtualMcpId);if(!Q||Q.organization_id!==G.id)throw Error("Virtual MCP not found");let $=Q.metadata??{},J=await xF(X,Z.branch,Y),W=aw(v9($),J,Z.branch,Z.sandboxProviderKind),K=Z.sandboxProviderKind,{provider:N}=await kJ(X,{userId:J,branch:Z.branch,virtualMcpMetadata:$,explicitKind:K});if(W){if(K!=="user-desktop")return W;if(await N.alive(W.sandboxHandle).catch(()=>!1))return W;await sw(X.storage.virtualMcps,Z.virtualMcpId,Y,J,Z.branch,K).catch((O)=>{console.warn("[ensureSandbox] failed to reap stale user-desktop entry",O)})}let U=await Sp(X,OO(Z.branch)??X.metadata?.threadId)??$.githubRepo??null,{entry:H}=await EK8({ctx:X,userId:Y,sandboxUserId:J,orgId:G.id,virtualMcpId:Z.virtualMcpId,branch:Z.branch,metadata:$,githubRepo:U,existing:null,providerKind:K,runner:N});return H}async function EK8(Z){let{ctx:X,userId:G,sandboxUserId:Y,orgId:Q,virtualMcpId:$,branch:J,metadata:W,githubRepo:K,existing:N,runner:F}=Z,{runtime:U,packageManager:H,port:w,packageManagerPath:O}=CO0(W),D;if(K){if(K.connectionId)await Qy({ctx:X,connectionId:K.connectionId,organizationId:Q,forceRefresh:!0,onLegacyMintError:(f0)=>{console.error("[provisionSandbox] repo-scoped legacy token mint failed",{connectionId:K.connectionId,error:f0.message})}});let{cloneUrl:L0,gitUserName:W0,gitUserEmail:$0}=K.connectionId?await ew(K.connectionId,K.owner,K.name,X.db,X.vault):ZX0(K.owner,K.name);if(!H){let f0=K.connectionId?await UK8(K.connectionId,K.owner,K.name,X.db,X.vault):await HK8(K.owner,K.name);if(f0)H=f0.packageManager,U=kp[f0.packageManager].runtime,w=f0.devPort??w,await ZH4(X,$,G,f0.packageManager,f0.devPort)}let a=$1().sandboxStickyHeadRefEnabled,E0=LK8({branch:J,derivedRef:SO0(J),recordedHeadRef:a?await eW8(X,OO(J)):null,sticky:a}),J0=await WK8({ctx:X,orgId:Q,userId:G,entries:QK8(W)});D={cloneUrl:L0,...K.connectionId?{connectionId:K.connectionId}:{},userName:W0,userEmail:$0,branch:E0,displayName:`${K.owner}/${K.name}`,...J0.length>0?{submoduleCredentials:J0}:{}}}let L=U&&H?{runtime:U,packageManager:H,...w!==null?{devPort:Number(w)}:{},...O?{packageManagerPath:O}:{}}:void 0,E=BE({orgId:Q,virtualMcpId:$,branch:J}),z=F.kind==="user-desktop"?await bO0(X.objectStorage,{isProduction:$1().nodeEnv==="production"}):null,j=(F.kind==="user-desktop"||F.kind==="agent-sandbox")&&!$1().orgFsMountsDisabled,A;if(j){let L0=X.organization?.slug??(await X.db.selectFrom("organization").select(["slug"]).where("id","=",Q).executeTakeFirst())?.slug;if(L0)A=await ZZ0(X,{orgSlug:L0,orgId:Q,baseUrl:s7()})}let P=F.kind==="agent-sandbox"?BK8({explicit:Z.daemonImpl,flags:Z.daemonImpl?null:(await X.storage.organizationSettings.get(Q))?.flags??null}):void 0,q=await F.ensure({userId:Y,projectRef:E},{branch:J,repo:D,workload:L,tenant:{orgId:Q,userId:Y,...X.organization?.slug?{orgSlug:X.organization.slug}:{},...X.organization?.name?{orgName:X.organization.name}:{},...X.auth.user?.email?{userEmail:X.auth.user.email}:{},...X.auth.user?.name?{userName:X.auth.user.name}:{}},...z?{offloadAllowedHosts:z.hosts,offloadAllowSameHostDev:z.allowSameHostDev}:{},...A?{orgFsConfigJson:A}:{},...P?{daemonImpl:P}:{}}),S=W.runtime?.env??null;await fO0({ctx:X,runner:F,handle:q.handle,orgId:Q,userId:G,entries:S});let C=!!N&&N.sandboxHandle===q.handle&&N?.createdAt?N.createdAt:Date.now(),m=W.runtime?.selected??null,v=W.runtime?.port??null,x=W.runtime?.path??null,e={sandboxHandle:q.handle,previewUrl:q.previewUrl,sandboxApiUrl:q.previewUrl,sandboxProviderKind:F.kind,createdAt:C,startedWith:{packageManager:m,port:v,path:x}};await CX8(X.storage.virtualMcps,$,G,Y,J,Z.providerKind,e);let o=OO(J);if(o)await XK8(X,o,Y,J,Z.providerKind,e);let w0=!N||N.sandboxHandle!==q.handle;return{entry:e,isNewVm:w0}}async function ZH4(Z,X,G,Y,Q){let $=await Z.storage.virtualMcps.findById(X);if(!$)return;let J=$.metadata??{};await Z.storage.virtualMcps.update(X,G,{metadata:{...J,runtime:{selected:Y,port:Q}}})}var eU4,Wo0;var xO0=B(()=>{p3();e0();Ty();Qo0();KK8();uQ();Gp();OK8();Yo0();Ay();BO();$o0();Jo0();b8();rZ();C_();uQ();eU4=BK.enum(["agent-sandbox","user-desktop","cluster"]),Wo0=s({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:BK.object({virtualMcpId:BK.string().describe("Virtual MCP ID"),branch:BK.string().min(1).optional().describe("Git branch to check out. Pass the thread's branch whenever the caller has one: when omitted the handler mints a fresh `<user-slug>-<timestamp>` name, which becomes a SEPARATE sandbox from the one the thread's own branch resolves to. The resolved branch is returned in the response so callers can persist it."),sandboxProviderKind:eU4.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."),daemonImpl:In0.optional().describe("Target this one sandbox at a specific sandbox daemon implementation, overriding both the `go` default and the org's `sandbox_go_daemon` opt-out. Only honored on `agent-sandbox`, and only when the deployment configures a Go SandboxTemplate; otherwise the sandbox lands on `ts`. Applies to a sandbox being created \u2014 an existing sandbox keeps the binary it booted with.")}),outputSchema:BK.object({previewUrl:BK.string().nullable(),sandboxHandle:BK.string(),branch:BK.string(),isNewVm:BK.boolean(),sandboxProviderKind:BK.enum(["agent-sandbox","user-desktop"])}),handler:async(Z,X)=>{D0(X);let G=B0(X);await X.access.check();let Y=Z.branch??f70(C70(X.auth.user)),Q=V1(X);if(!Q)throw Error("User ID required");let $=await xF(X,Y,Q),J=await X.storage.virtualMcps.findById(Z.virtualMcpId);if(!J||J.organization_id!==G.id)throw Error("Virtual MCP not found");let W=J.metadata??{},K=Z.sandboxProviderKind?IF(Z.sandboxProviderKind):void 0,{provider:N,kind:F}=await kJ(X,{userId:$,branch:Y,virtualMcpMetadata:W,explicitKind:K}),U=aw(v9(W),$,Y,F),w=await Sp(X,OO(Y)??X.metadata?.threadId)??W.githubRepo??null,{entry:O,isNewVm:D}=await EK8({ctx:X,userId:Q,sandboxUserId:$,orgId:G.id,virtualMcpId:Z.virtualMcpId,branch:Y,metadata:W,githubRepo:w,existing:U,providerKind:F,runner:N,daemonImpl:Z.daemonImpl});return{...O,branch:Y,isNewVm:D,sandboxProviderKind:F}}})});async function XH4(Z,X,G,Y){try{let Q=Z.organization;if(!Q)return;let $=await s70(Z,Y.virtualMcpId,Q,"tool-scripting",Y.providerKind),J=await X.proxyDaemonRequest(G,"/_sandbox/tools/sync",{method:"POST",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify($)});if(!J.ok)console.warn("[cluster-sandbox-fs] tools/sync failed",J.status,await J.text().catch(()=>""))}catch(Q){console.warn("[cluster-sandbox-fs] tools/sync failed",Q)}}async function Ry(Z,X){let{provider:G,kind:Y}=await kJ(Z,{userId:X.userId,branch:X.branch,virtualMcpMetadata:null}),Q=null,$=()=>{if(!Q){if(Q=vO0({virtualMcpId:X.virtualMcpId,branch:X.branch,sandboxProviderKind:Y},Z).then((K)=>K.sandboxHandle),Q.catch(()=>{Q=null}),X.syncTools)Q.then((K)=>XH4(Z,G,K,{virtualMcpId:X.virtualMcpId,providerKind:Y})).catch(()=>{})}return Q},J=X.branch==="ephemeral"||Y==="user-desktop";return Sn0(G,{ensureHandle:$,invalidateHandle:async(K)=>{let N=Q;if(Q=null,!J&&!K?.force)return;try{await sw(Z.storage.virtualMcps,X.virtualMcpId,X.userId,X.userId,X.branch,Y)}catch(F){console.warn("[cluster-sandbox-fs] failed to reap vmMap entry",F)}if(N&&typeof G.forgetHandle==="function")try{let F=await N;await G.forgetHandle(F)}catch(F){console.warn("[cluster-sandbox-fs] forgetHandle failed",F)}},canAutoRestart:J})}async function zK8(Z,X){try{let G=await Ry(Z,X),{stdout:Y}=await G.onBash("test -d .deco && echo __DECO_SITE__");return Y.includes("__DECO_SITE__")}catch(G){return console.warn("[cluster-sandbox-fs] .deco probe failed; assuming deco site",G),!0}}var _O0=B(()=>{p3();un0();Ay();xO0();uQ()});function Iy(Z){let X=Z.toISOString();return`<current-context>
1271
1271
  Current date: ${X.slice(0,10)}
1272
1272
  Current time: ${X.slice(11,16)} UTC
1273
1273
  </current-context>`}var jK8,AK8;var Ko0=B(()=>{jK8={type:"ephemeral",ttl:"5m"},AK8={openrouter:{cache_control:{type:"ephemeral",ttl:"5m"}}}});function PK8(Z,X){let G=[],Y=Z.length-1,Q=Z.length-2;for(let $=0;$<Z.length;$++){let J=$===Q||$===Y;G.push({role:"system",content:Z[$],...J?{providerOptions:GH4}:{}})}return G.push({role:"system",content:Iy(X)}),G}var GH4;var TK8=B(()=>{Ko0();GH4={anthropic:{cacheControl:jK8}}});function RK8(Z){if(Z.length===0)return null;return`
@@ -2771,7 +2771,7 @@ NKEYs are sensitive and should be treated as secrets.
2771
2771
  -----BEGIN USER NKEY SEED-----
2772
2772
  ${G}
2773
2773
  ------END USER NKEY SEED------
2774
- `;return new TextEncoder().encode(Y)}var l41,oC,j75,Sv8,c41="ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",P75,d8,l8,Y4,kv8=24,rC,iJ;var _v8=B(()=>{(function(Z){Z.Operator="operator",Z.Account="account",Z.User="user",Z.Activation="activation",Z.AuthorizationResponse="authorization_response"})(l41||(l41={}));(function(Z){var X=function(h,i){this.hi=h|0,this.lo=i|0},G=function(h){var i,u=new Float64Array(16);if(h)for(i=0;i<h.length;i++)u[i]=h[i];return u},Y=function(){throw Error("no PRNG")},Q=new Uint8Array(16),$=new Uint8Array(32);$[0]=9;var J=G(),W=G([1]),K=G([56129,1]),N=G([30883,4953,19914,30187,55467,16705,2637,112,59544,30585,16505,36039,65139,11119,27886,20995]),F=G([61785,9906,39828,60374,45398,33411,5274,224,53552,61171,33010,6542,64743,22239,55772,9222]),U=G([54554,36645,11616,51542,42930,38181,51040,26924,56412,64982,57905,49316,21502,52590,14035,8553]),H=G([26200,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214]),w=G([41136,18958,6951,50414,58488,44335,6150,12099,55207,15867,153,11085,57099,20417,9344,11139]);function O(h,i){return h<<i|h>>>32-i}function D(h,i){var u=h[i+3]&255;return u=u<<8|h[i+2]&255,u=u<<8|h[i+1]&255,u<<8|h[i+0]&255}function L(h,i){var u=h[i]<<24|h[i+1]<<16|h[i+2]<<8|h[i+3],r=h[i+4]<<24|h[i+5]<<16|h[i+6]<<8|h[i+7];return new X(u,r)}function E(h,i,u){var r;for(r=0;r<4;r++)h[i+r]=u&255,u>>>=8}function z(h,i,u){h[i]=u.hi>>24&255,h[i+1]=u.hi>>16&255,h[i+2]=u.hi>>8&255,h[i+3]=u.hi&255,h[i+4]=u.lo>>24&255,h[i+5]=u.lo>>16&255,h[i+6]=u.lo>>8&255,h[i+7]=u.lo&255}function j(h,i,u,r,Q0){var N0,v0=0;for(N0=0;N0<Q0;N0++)v0|=h[i+N0]^u[r+N0];return(1&v0-1>>>8)-1}function A(h,i,u,r){return j(h,i,u,r,16)}function P(h,i,u,r){return j(h,i,u,r,32)}function q(h,i,u,r,Q0){var N0=new Uint32Array(16),v0=new Uint32Array(16),m0=new Uint32Array(16),R0=new Uint32Array(4),V0,T0,y0;for(V0=0;V0<4;V0++)v0[5*V0]=D(r,4*V0),v0[1+V0]=D(u,4*V0),v0[6+V0]=D(i,4*V0),v0[11+V0]=D(u,16+4*V0);for(V0=0;V0<16;V0++)m0[V0]=v0[V0];for(V0=0;V0<20;V0++){for(T0=0;T0<4;T0++){for(y0=0;y0<4;y0++)R0[y0]=v0[(5*T0+4*y0)%16];R0[1]^=O(R0[0]+R0[3]|0,7),R0[2]^=O(R0[1]+R0[0]|0,9),R0[3]^=O(R0[2]+R0[1]|0,13),R0[0]^=O(R0[3]+R0[2]|0,18);for(y0=0;y0<4;y0++)N0[4*T0+(T0+y0)%4]=R0[y0]}for(y0=0;y0<16;y0++)v0[y0]=N0[y0]}if(Q0){for(V0=0;V0<16;V0++)v0[V0]=v0[V0]+m0[V0]|0;for(V0=0;V0<4;V0++)v0[5*V0]=v0[5*V0]-D(r,4*V0)|0,v0[6+V0]=v0[6+V0]-D(i,4*V0)|0;for(V0=0;V0<4;V0++)E(h,4*V0,v0[5*V0]),E(h,16+4*V0,v0[6+V0])}else for(V0=0;V0<16;V0++)E(h,4*V0,v0[V0]+m0[V0]|0)}function S(h,i,u,r){return q(h,i,u,r,!1),0}function M(h,i,u,r){return q(h,i,u,r,!0),0}var C=new Uint8Array([101,120,112,97,110,100,32,51,50,45,98,121,116,101,32,107]);function m(h,i,u,r,Q0,N0,v0){var m0=new Uint8Array(16),R0=new Uint8Array(64),V0,T0;if(!Q0)return 0;for(T0=0;T0<16;T0++)m0[T0]=0;for(T0=0;T0<8;T0++)m0[T0]=N0[T0];while(Q0>=64){S(R0,m0,v0,C);for(T0=0;T0<64;T0++)h[i+T0]=(u?u[r+T0]:0)^R0[T0];V0=1;for(T0=8;T0<16;T0++)V0=V0+(m0[T0]&255)|0,m0[T0]=V0&255,V0>>>=8;if(Q0-=64,i+=64,u)r+=64}if(Q0>0){S(R0,m0,v0,C);for(T0=0;T0<Q0;T0++)h[i+T0]=(u?u[r+T0]:0)^R0[T0]}return 0}function v(h,i,u,r,Q0){return m(h,i,null,0,u,r,Q0)}function x(h,i,u,r,Q0){var N0=new Uint8Array(32);return M(N0,r,Q0,C),v(h,i,u,r.subarray(16),N0)}function e(h,i,u,r,Q0,N0,v0){var m0=new Uint8Array(32);return M(m0,N0,v0,C),m(h,i,u,r,Q0,N0.subarray(16),m0)}function o(h,i){var u,r=0;for(u=0;u<17;u++)r=r+(h[u]+i[u]|0)|0,h[u]=r&255,r>>>=8}var w0=new Uint32Array([5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,252]);function L0(h,i,u,r,Q0,N0){var v0,m0,R0,V0,T0=new Uint32Array(17),y0=new Uint32Array(17),r0=new Uint32Array(17),G1=new Uint32Array(17),F1=new Uint32Array(17);for(R0=0;R0<17;R0++)y0[R0]=r0[R0]=0;for(R0=0;R0<16;R0++)y0[R0]=N0[R0];y0[3]&=15,y0[4]&=252,y0[7]&=15,y0[8]&=252,y0[11]&=15,y0[12]&=252,y0[15]&=15;while(Q0>0){for(R0=0;R0<17;R0++)G1[R0]=0;for(R0=0;R0<16&&R0<Q0;++R0)G1[R0]=u[r+R0];G1[R0]=1,r+=R0,Q0-=R0,o(r0,G1);for(m0=0;m0<17;m0++){T0[m0]=0;for(R0=0;R0<17;R0++)T0[m0]=T0[m0]+r0[R0]*(R0<=m0?y0[m0-R0]:320*y0[m0+17-R0]|0)|0|0}for(m0=0;m0<17;m0++)r0[m0]=T0[m0];V0=0;for(R0=0;R0<16;R0++)V0=V0+r0[R0]|0,r0[R0]=V0&255,V0>>>=8;V0=V0+r0[16]|0,r0[16]=V0&3,V0=5*(V0>>>2)|0;for(R0=0;R0<16;R0++)V0=V0+r0[R0]|0,r0[R0]=V0&255,V0>>>=8;V0=V0+r0[16]|0,r0[16]=V0}for(R0=0;R0<17;R0++)F1[R0]=r0[R0];o(r0,w0),v0=-(r0[16]>>>7)|0;for(R0=0;R0<17;R0++)r0[R0]^=v0&(F1[R0]^r0[R0]);for(R0=0;R0<16;R0++)G1[R0]=N0[R0+16];G1[16]=0,o(r0,G1);for(R0=0;R0<16;R0++)h[i+R0]=r0[R0];return 0}function W0(h,i,u,r,Q0,N0){var v0=new Uint8Array(16);return L0(v0,0,u,r,Q0,N0),A(h,i,v0,0)}function $0(h,i,u,r,Q0){var N0;if(u<32)return-1;e(h,0,i,0,u,r,Q0),L0(h,16,h,32,u-32,h);for(N0=0;N0<16;N0++)h[N0]=0;return 0}function a(h,i,u,r,Q0){var N0,v0=new Uint8Array(32);if(u<32)return-1;if(x(v0,0,32,r,Q0),W0(i,16,i,32,u-32,v0)!==0)return-1;e(h,0,i,0,u,r,Q0);for(N0=0;N0<32;N0++)h[N0]=0;return 0}function E0(h,i){var u;for(u=0;u<16;u++)h[u]=i[u]|0}function J0(h){var i,u;for(u=0;u<16;u++)h[u]+=65536,i=Math.floor(h[u]/65536),h[(u+1)*(u<15?1:0)]+=i-1+37*(i-1)*(u===15?1:0),h[u]-=i*65536}function f0(h,i,u){var r,Q0=~(u-1);for(var N0=0;N0<16;N0++)r=Q0&(h[N0]^i[N0]),h[N0]^=r,i[N0]^=r}function i0(h,i){var u,r,Q0,N0=G(),v0=G();for(u=0;u<16;u++)v0[u]=i[u];J0(v0),J0(v0),J0(v0);for(r=0;r<2;r++){N0[0]=v0[0]-65517;for(u=1;u<15;u++)N0[u]=v0[u]-65535-(N0[u-1]>>16&1),N0[u-1]&=65535;N0[15]=v0[15]-32767-(N0[14]>>16&1),Q0=N0[15]>>16&1,N0[14]&=65535,f0(v0,N0,1-Q0)}for(u=0;u<16;u++)h[2*u]=v0[u]&255,h[2*u+1]=v0[u]>>8}function l0(h,i){var u=new Uint8Array(32),r=new Uint8Array(32);return i0(u,h),i0(r,i),P(u,0,r,0)}function s0(h){var i=new Uint8Array(32);return i0(i,h),i[0]&1}function F0(h,i){var u;for(u=0;u<16;u++)h[u]=i[2*u]+(i[2*u+1]<<8);h[15]&=32767}function S0(h,i,u){var r;for(r=0;r<16;r++)h[r]=i[r]+u[r]|0}function P0(h,i,u){var r;for(r=0;r<16;r++)h[r]=i[r]-u[r]|0}function K0(h,i,u){var r,Q0,N0=new Float64Array(31);for(r=0;r<31;r++)N0[r]=0;for(r=0;r<16;r++)for(Q0=0;Q0<16;Q0++)N0[r+Q0]+=i[r]*u[Q0];for(r=0;r<15;r++)N0[r]+=38*N0[r+16];for(r=0;r<16;r++)h[r]=N0[r];J0(h),J0(h)}function G0(h,i){K0(h,i,i)}function Y0(h,i){var u=G(),r;for(r=0;r<16;r++)u[r]=i[r];for(r=253;r>=0;r--)if(G0(u,u),r!==2&&r!==4)K0(u,u,i);for(r=0;r<16;r++)h[r]=u[r]}function C0(h,i){var u=G(),r;for(r=0;r<16;r++)u[r]=i[r];for(r=250;r>=0;r--)if(G0(u,u),r!==1)K0(u,u,i);for(r=0;r<16;r++)h[r]=u[r]}function n(h,i,u){var r=new Uint8Array(32),Q0=new Float64Array(80),N0,v0,m0=G(),R0=G(),V0=G(),T0=G(),y0=G(),r0=G();for(v0=0;v0<31;v0++)r[v0]=i[v0];r[31]=i[31]&127|64,r[0]&=248,F0(Q0,u);for(v0=0;v0<16;v0++)R0[v0]=Q0[v0],T0[v0]=m0[v0]=V0[v0]=0;m0[0]=T0[0]=1;for(v0=254;v0>=0;--v0)N0=r[v0>>>3]>>>(v0&7)&1,f0(m0,R0,N0),f0(V0,T0,N0),S0(y0,m0,V0),P0(m0,m0,V0),S0(V0,R0,T0),P0(R0,R0,T0),G0(T0,y0),G0(r0,m0),K0(m0,V0,m0),K0(V0,R0,y0),S0(y0,m0,V0),P0(m0,m0,V0),G0(R0,m0),P0(V0,T0,r0),K0(m0,V0,K),S0(m0,m0,T0),K0(V0,V0,m0),K0(m0,T0,r0),K0(T0,R0,Q0),G0(R0,y0),f0(m0,R0,N0),f0(V0,T0,N0);for(v0=0;v0<16;v0++)Q0[v0+16]=m0[v0],Q0[v0+32]=V0[v0],Q0[v0+48]=R0[v0],Q0[v0+64]=T0[v0];var G1=Q0.subarray(32),F1=Q0.subarray(16);return Y0(G1,G1),K0(F1,F1,G1),i0(h,F1),0}function X0(h,i){return n(h,i,$)}function t0(h,i){return Y(i,32),X0(h,i)}function q0(h,i,u){var r=new Uint8Array(32);return n(r,u,i),M(h,Q,r,C)}var M0=$0,g=a;function H0(h,i,u,r,Q0,N0){var v0=new Uint8Array(32);return q0(v0,Q0,N0),M0(h,i,u,r,v0)}function x0(h,i,u,r,Q0,N0){var v0=new Uint8Array(32);return q0(v0,Q0,N0),g(h,i,u,r,v0)}function Z1(){var h=0,i=0,u=0,r=0,Q0=65535,N0,v0,m0;for(m0=0;m0<arguments.length;m0++)N0=arguments[m0].lo,v0=arguments[m0].hi,h+=N0&Q0,i+=N0>>>16,u+=v0&Q0,r+=v0>>>16;return i+=h>>>16,u+=i>>>16,r+=u>>>16,new X(u&Q0|r<<16,h&Q0|i<<16)}function u0(h,i){return new X(h.hi>>>i,h.lo>>>i|h.hi<<32-i)}function T1(){var h=0,i=0,u;for(u=0;u<arguments.length;u++)h^=arguments[u].lo,i^=arguments[u].hi;return new X(i,h)}function e1(h,i){var u,r,Q0=32-i;if(i<32)u=h.hi>>>i|h.lo<<Q0,r=h.lo>>>i|h.hi<<Q0;else if(i<64)u=h.lo>>>i|h.hi<<Q0,r=h.hi>>>i|h.lo<<Q0;return new X(u,r)}function j4(h,i,u){var r=h.hi&i.hi^~h.hi&u.hi,Q0=h.lo&i.lo^~h.lo&u.lo;return new X(r,Q0)}function $5(h,i,u){var r=h.hi&i.hi^h.hi&u.hi^i.hi&u.hi,Q0=h.lo&i.lo^h.lo&u.lo^i.lo&u.lo;return new X(r,Q0)}function u9(h){return T1(e1(h,28),e1(h,34),e1(h,39))}function Z0(h){return T1(e1(h,14),e1(h,18),e1(h,41))}function N1(h){return T1(e1(h,1),e1(h,8),u0(h,7))}function s8(h){return T1(e1(h,19),e1(h,61),u0(h,6))}var e8=[new X(1116352408,3609767458),new X(1899447441,602891725),new X(3049323471,3964484399),new X(3921009573,2173295548),new X(961987163,4081628472),new X(1508970993,3053834265),new X(2453635748,2937671579),new X(2870763221,3664609560),new X(3624381080,2734883394),new X(310598401,1164996542),new X(607225278,1323610764),new X(1426881987,3590304994),new X(1925078388,4068182383),new X(2162078206,991336113),new X(2614888103,633803317),new X(3248222580,3479774868),new X(3835390401,2666613458),new X(4022224774,944711139),new X(264347078,2341262773),new X(604807628,2007800933),new X(770255983,1495990901),new X(1249150122,1856431235),new X(1555081692,3175218132),new X(1996064986,2198950837),new X(2554220882,3999719339),new X(2821834349,766784016),new X(2952996808,2566594879),new X(3210313671,3203337956),new X(3336571891,1034457026),new X(3584528711,2466948901),new X(113926993,3758326383),new X(338241895,168717936),new X(666307205,1188179964),new X(773529912,1546045734),new X(1294757372,1522805485),new X(1396182291,2643833823),new X(1695183700,2343527390),new X(1986661051,1014477480),new X(2177026350,1206759142),new X(2456956037,344077627),new X(2730485921,1290863460),new X(2820302411,3158454273),new X(3259730800,3505952657),new X(3345764771,106217008),new X(3516065817,3606008344),new X(3600352804,1432725776),new X(4094571909,1467031594),new X(275423344,851169720),new X(430227734,3100823752),new X(506948616,1363258195),new X(659060556,3750685593),new X(883997877,3785050280),new X(958139571,3318307427),new X(1322822218,3812723403),new X(1537002063,2003034995),new X(1747873779,3602036899),new X(1955562222,1575990012),new X(2024104815,1125592928),new X(2227730452,2716904306),new X(2361852424,442776044),new X(2428436474,593698344),new X(2756734187,3733110249),new X(3204031479,2999351573),new X(3329325298,3815920427),new X(3391569614,3928383900),new X(3515267271,566280711),new X(3940187606,3454069534),new X(4118630271,4000239992),new X(116418474,1914138554),new X(174292421,2731055270),new X(289380356,3203993006),new X(460393269,320620315),new X(685471733,587496836),new X(852142971,1086792851),new X(1017036298,365543100),new X(1126000580,2618297676),new X(1288033470,3409855158),new X(1501505948,4234509866),new X(1607167915,987167468),new X(1816402316,1246189591)];function TZ(h,i,u){var r=[],Q0=[],N0=[],v0=[],m0,R0,V0;for(R0=0;R0<8;R0++)r[R0]=N0[R0]=L(h,8*R0);var T0=0;while(u>=128){for(R0=0;R0<16;R0++)v0[R0]=L(i,8*R0+T0);for(R0=0;R0<80;R0++){for(V0=0;V0<8;V0++)Q0[V0]=N0[V0];m0=Z1(N0[7],Z0(N0[4]),j4(N0[4],N0[5],N0[6]),e8[R0],v0[R0%16]),Q0[7]=Z1(m0,u9(N0[0]),$5(N0[0],N0[1],N0[2])),Q0[3]=Z1(Q0[3],m0);for(V0=0;V0<8;V0++)N0[(V0+1)%8]=Q0[V0];if(R0%16===15)for(V0=0;V0<16;V0++)v0[V0]=Z1(v0[V0],v0[(V0+9)%16],N1(v0[(V0+1)%16]),s8(v0[(V0+14)%16]))}for(R0=0;R0<8;R0++)N0[R0]=Z1(N0[R0],r[R0]),r[R0]=N0[R0];T0+=128,u-=128}for(R0=0;R0<8;R0++)z(h,8*R0,r[R0]);return u}var aG=new Uint8Array([106,9,230,103,243,188,201,8,187,103,174,133,132,202,167,59,60,110,243,114,254,148,248,43,165,79,245,58,95,29,54,241,81,14,82,127,173,230,130,209,155,5,104,140,43,62,108,31,31,131,217,171,251,65,189,107,91,224,205,25,19,126,33,121]);function k6(h,i,u){var r=new Uint8Array(64),Q0=new Uint8Array(256),N0,v0=u;for(N0=0;N0<64;N0++)r[N0]=aG[N0];TZ(r,i,u),u%=128;for(N0=0;N0<256;N0++)Q0[N0]=0;for(N0=0;N0<u;N0++)Q0[N0]=i[v0-u+N0];Q0[u]=128,u=256-128*(u<112?1:0),Q0[u-9]=0,z(Q0,u-8,new X(v0/536870912|0,v0<<3)),TZ(r,Q0,u);for(N0=0;N0<64;N0++)h[N0]=r[N0];return 0}function f4(h,i){var u=G(),r=G(),Q0=G(),N0=G(),v0=G(),m0=G(),R0=G(),V0=G(),T0=G();P0(u,h[1],h[0]),P0(T0,i[1],i[0]),K0(u,u,T0),S0(r,h[0],h[1]),S0(T0,i[0],i[1]),K0(r,r,T0),K0(Q0,h[3],i[3]),K0(Q0,Q0,F),K0(N0,h[2],i[2]),S0(N0,N0,N0),P0(v0,r,u),P0(m0,N0,Q0),S0(R0,N0,Q0),S0(V0,r,u),K0(h[0],v0,m0),K0(h[1],V0,R0),K0(h[2],R0,m0),K0(h[3],v0,V0)}function X9(h,i,u){var r;for(r=0;r<4;r++)f0(h[r],i[r],u)}function R9(h,i){var u=G(),r=G(),Q0=G();Y0(Q0,i[2]),K0(u,i[0],Q0),K0(r,i[1],Q0),i0(h,r),h[31]^=s0(u)<<7}function JZ(h,i,u){var r,Q0;E0(h[0],J),E0(h[1],W),E0(h[2],W),E0(h[3],J);for(Q0=255;Q0>=0;--Q0)r=u[Q0/8|0]>>(Q0&7)&1,X9(h,i,r),f4(i,h),f4(h,h),X9(h,i,r)}function RZ(h,i){var u=[G(),G(),G(),G()];E0(u[0],U),E0(u[1],H),E0(u[2],W),K0(u[3],U,H),JZ(h,u,i)}function _1(h,i,u){var r=new Uint8Array(64),Q0=[G(),G(),G(),G()],N0;if(!u)Y(i,32);k6(r,i,32),r[0]&=248,r[31]&=127,r[31]|=64,RZ(Q0,r),R9(h,Q0);for(N0=0;N0<32;N0++)i[N0+32]=h[N0];return 0}var S6=new Float64Array([237,211,245,92,26,99,18,88,214,156,247,162,222,249,222,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16]);function V6(h,i){var u,r,Q0,N0;for(r=63;r>=32;--r){u=0;for(Q0=r-32,N0=r-12;Q0<N0;++Q0)i[Q0]+=u-16*i[r]*S6[Q0-(r-32)],u=Math.floor((i[Q0]+128)/256),i[Q0]-=u*256;i[Q0]+=u,i[r]=0}u=0;for(Q0=0;Q0<32;Q0++)i[Q0]+=u-(i[31]>>4)*S6[Q0],u=i[Q0]>>8,i[Q0]&=255;for(Q0=0;Q0<32;Q0++)i[Q0]-=u*S6[Q0];for(r=0;r<32;r++)i[r+1]+=i[r]>>8,h[r]=i[r]&255}function Q4(h){var i=new Float64Array(64),u;for(u=0;u<64;u++)i[u]=h[u];for(u=0;u<64;u++)h[u]=0;V6(h,i)}function _8(h,i,u,r){var Q0=new Uint8Array(64),N0=new Uint8Array(64),v0=new Uint8Array(64),m0,R0,V0=new Float64Array(64),T0=[G(),G(),G(),G()];k6(Q0,r,32),Q0[0]&=248,Q0[31]&=127,Q0[31]|=64;var y0=u+64;for(m0=0;m0<u;m0++)h[64+m0]=i[m0];for(m0=0;m0<32;m0++)h[32+m0]=Q0[32+m0];k6(v0,h.subarray(32),u+32),Q4(v0),RZ(T0,v0),R9(h,T0);for(m0=32;m0<64;m0++)h[m0]=r[m0];k6(N0,h,u+64),Q4(N0);for(m0=0;m0<64;m0++)V0[m0]=0;for(m0=0;m0<32;m0++)V0[m0]=v0[m0];for(m0=0;m0<32;m0++)for(R0=0;R0<32;R0++)V0[m0+R0]+=N0[m0]*Q0[R0];return V6(h.subarray(32),V0),y0}function H6(h,i){var u=G(),r=G(),Q0=G(),N0=G(),v0=G(),m0=G(),R0=G();if(E0(h[2],W),F0(h[1],i),G0(Q0,h[1]),K0(N0,Q0,N),P0(Q0,Q0,h[2]),S0(N0,h[2],N0),G0(v0,N0),G0(m0,v0),K0(R0,m0,v0),K0(u,R0,Q0),K0(u,u,N0),C0(u,u),K0(u,u,Q0),K0(u,u,N0),K0(u,u,N0),K0(h[0],u,N0),G0(r,h[0]),K0(r,r,N0),l0(r,Q0))K0(h[0],h[0],w);if(G0(r,h[0]),K0(r,r,N0),l0(r,Q0))return-1;if(s0(h[0])===i[31]>>7)P0(h[0],J,h[0]);return K0(h[3],h[0],h[1]),0}function RX(h,i,u,r){var Q0,N0=new Uint8Array(32),v0=new Uint8Array(64),m0=[G(),G(),G(),G()],R0=[G(),G(),G(),G()];if(u<64)return-1;if(H6(R0,r))return-1;for(Q0=0;Q0<u;Q0++)h[Q0]=i[Q0];for(Q0=0;Q0<32;Q0++)h[Q0+32]=r[Q0];if(k6(v0,h,u),Q4(v0),JZ(m0,R0,v0),RZ(R0,i.subarray(32)),f4(m0,R0),R9(N0,m0),u-=64,P(i,0,N0,0)){for(Q0=0;Q0<u;Q0++)h[Q0]=0;return-1}for(Q0=0;Q0<u;Q0++)h[Q0]=i[Q0+64];return u}var C8=32,i4=24,e4=32,r6=16,G9=32,V=32,l=32,c=32,R=32,t=i4,_0=e4,d0=r6,K1=64,H1=32,g1=64,v1=32,J6=64;Z.lowlevel={crypto_core_hsalsa20:M,crypto_stream_xor:e,crypto_stream:x,crypto_stream_salsa20_xor:m,crypto_stream_salsa20:v,crypto_onetimeauth:L0,crypto_onetimeauth_verify:W0,crypto_verify_16:A,crypto_verify_32:P,crypto_secretbox:$0,crypto_secretbox_open:a,crypto_scalarmult:n,crypto_scalarmult_base:X0,crypto_box_beforenm:q0,crypto_box_afternm:M0,crypto_box:H0,crypto_box_open:x0,crypto_box_keypair:t0,crypto_hash:k6,crypto_sign:_8,crypto_sign_keypair:_1,crypto_sign_open:RX,crypto_secretbox_KEYBYTES:C8,crypto_secretbox_NONCEBYTES:i4,crypto_secretbox_ZEROBYTES:e4,crypto_secretbox_BOXZEROBYTES:r6,crypto_scalarmult_BYTES:G9,crypto_scalarmult_SCALARBYTES:V,crypto_box_PUBLICKEYBYTES:l,crypto_box_SECRETKEYBYTES:c,crypto_box_BEFORENMBYTES:R,crypto_box_NONCEBYTES:t,crypto_box_ZEROBYTES:_0,crypto_box_BOXZEROBYTES:d0,crypto_sign_BYTES:K1,crypto_sign_PUBLICKEYBYTES:H1,crypto_sign_SECRETKEYBYTES:g1,crypto_sign_SEEDBYTES:v1,crypto_hash_BYTES:J6,gf:G,D:N,L:S6,pack25519:i0,unpack25519:F0,M:K0,A:S0,S:G0,Z:P0,pow2523:C0,add:f4,set25519:E0,modL:V6,scalarmult:JZ,scalarbase:RZ};function c1(h,i){if(h.length!==C8)throw Error("bad key size");if(i.length!==i4)throw Error("bad nonce size")}function A8(h,i){if(h.length!==l)throw Error("bad public key size");if(i.length!==c)throw Error("bad secret key size")}function Q8(){for(var h=0;h<arguments.length;h++)if(!(arguments[h]instanceof Uint8Array))throw TypeError("unexpected type, use Uint8Array")}function h8(h){for(var i=0;i<h.length;i++)h[i]=0}Z.randomBytes=function(h){var i=new Uint8Array(h);return Y(i,h),i},Z.secretbox=function(h,i,u){Q8(h,i,u),c1(u,i);var r=new Uint8Array(e4+h.length),Q0=new Uint8Array(r.length);for(var N0=0;N0<h.length;N0++)r[N0+e4]=h[N0];return $0(Q0,r,r.length,i,u),Q0.subarray(r6)},Z.secretbox.open=function(h,i,u){Q8(h,i,u),c1(u,i);var r=new Uint8Array(r6+h.length),Q0=new Uint8Array(r.length);for(var N0=0;N0<h.length;N0++)r[N0+r6]=h[N0];if(r.length<32)return null;if(a(Q0,r,r.length,i,u)!==0)return null;return Q0.subarray(e4)},Z.secretbox.keyLength=C8,Z.secretbox.nonceLength=i4,Z.secretbox.overheadLength=r6,Z.scalarMult=function(h,i){if(Q8(h,i),h.length!==V)throw Error("bad n size");if(i.length!==G9)throw Error("bad p size");var u=new Uint8Array(G9);return n(u,h,i),u},Z.scalarMult.base=function(h){if(Q8(h),h.length!==V)throw Error("bad n size");var i=new Uint8Array(G9);return X0(i,h),i},Z.scalarMult.scalarLength=V,Z.scalarMult.groupElementLength=G9,Z.box=function(h,i,u,r){var Q0=Z.box.before(u,r);return Z.secretbox(h,i,Q0)},Z.box.before=function(h,i){Q8(h,i),A8(h,i);var u=new Uint8Array(R);return q0(u,h,i),u},Z.box.after=Z.secretbox,Z.box.open=function(h,i,u,r){var Q0=Z.box.before(u,r);return Z.secretbox.open(h,i,Q0)},Z.box.open.after=Z.secretbox.open,Z.box.keyPair=function(){var h=new Uint8Array(l),i=new Uint8Array(c);return t0(h,i),{publicKey:h,secretKey:i}},Z.box.keyPair.fromSecretKey=function(h){if(Q8(h),h.length!==c)throw Error("bad secret key size");var i=new Uint8Array(l);return X0(i,h),{publicKey:i,secretKey:new Uint8Array(h)}},Z.box.publicKeyLength=l,Z.box.secretKeyLength=c,Z.box.sharedKeyLength=R,Z.box.nonceLength=t,Z.box.overheadLength=Z.secretbox.overheadLength,Z.sign=function(h,i){if(Q8(h,i),i.length!==g1)throw Error("bad secret key size");var u=new Uint8Array(K1+h.length);return _8(u,h,h.length,i),u},Z.sign.open=function(h,i){if(Q8(h,i),i.length!==H1)throw Error("bad public key size");var u=new Uint8Array(h.length),r=RX(u,h,h.length,i);if(r<0)return null;var Q0=new Uint8Array(r);for(var N0=0;N0<Q0.length;N0++)Q0[N0]=u[N0];return Q0},Z.sign.detached=function(h,i){var u=Z.sign(h,i),r=new Uint8Array(K1);for(var Q0=0;Q0<r.length;Q0++)r[Q0]=u[Q0];return r},Z.sign.detached.verify=function(h,i,u){if(Q8(h,i,u),i.length!==K1)throw Error("bad signature size");if(u.length!==H1)throw Error("bad public key size");var r=new Uint8Array(K1+h.length),Q0=new Uint8Array(K1+h.length),N0;for(N0=0;N0<K1;N0++)r[N0]=i[N0];for(N0=0;N0<h.length;N0++)r[N0+K1]=h[N0];return RX(Q0,r,r.length,u)>=0},Z.sign.keyPair=function(){var h=new Uint8Array(H1),i=new Uint8Array(g1);return _1(h,i),{publicKey:h,secretKey:i}},Z.sign.keyPair.fromSecretKey=function(h){if(Q8(h),h.length!==g1)throw Error("bad secret key size");var i=new Uint8Array(H1);for(var u=0;u<i.length;u++)i[u]=h[32+u];return{publicKey:i,secretKey:new Uint8Array(h)}},Z.sign.keyPair.fromSeed=function(h){if(Q8(h),h.length!==v1)throw Error("bad seed size");var i=new Uint8Array(H1),u=new Uint8Array(g1);for(var r=0;r<32;r++)u[r]=h[r];return _1(i,u,!0),{publicKey:i,secretKey:u}},Z.sign.publicKeyLength=H1,Z.sign.secretKeyLength=g1,Z.sign.seedLength=v1,Z.sign.signatureLength=K1,Z.hash=function(h){Q8(h);var i=new Uint8Array(J6);return k6(i,h,h.length),i},Z.hash.hashLength=J6,Z.verify=function(h,i){if(Q8(h,i),h.length===0||i.length===0)return!1;if(h.length!==i.length)return!1;return j(h,0,i,0,h.length)===0?!0:!1},Z.setPRNG=function(h){Y=h},function(){var h=typeof globalThis<"u"?globalThis.crypto||globalThis.msCrypto:null;if(h&&h.getRandomValues){var i=65536;Z.setPRNG(function(u,r){var Q0,N0=new Uint8Array(r);for(Q0=0;Q0<r;Q0+=i)h.getRandomValues(N0.subarray(Q0,Q0+Math.min(r-Q0,i)));for(Q0=0;Q0<r;Q0++)u[Q0]=N0[Q0];h8(N0)})}else if(h=c0("crypto"),h&&h.randomBytes)Z.setPRNG(function(u,r){var Q0,N0=h.randomBytes(r);for(Q0=0;Q0<r;Q0++)u[Q0]=N0[Q0];h8(N0)})}()})(typeof Kh<"u"&&d$7?d$7:globalThis.nacl=globalThis.nacl||{});oC=typeof Kh<"u"&&d$7?d$7:globalThis.nacl,j75={fromSeed:oC.sign.keyPair.fromSeed,sign:oC.sign.detached,verify:oC.sign.detached.verify,randomBytes:oC.randomBytes,scalarBaseMultiply:oC.scalarMult.base,seal:oC.box,open:oC.box.open};P75=new Uint16Array([0,4129,8258,12387,16516,20645,24774,28903,33032,37161,41290,45419,49548,53677,57806,61935,4657,528,12915,8786,21173,17044,29431,25302,37689,33560,45947,41818,54205,50076,62463,58334,9314,13379,1056,5121,25830,29895,17572,21637,42346,46411,34088,38153,58862,62927,50604,54669,13907,9842,5649,1584,30423,26358,22165,18100,46939,42874,38681,34616,63455,59390,55197,51132,18628,22757,26758,30887,2112,6241,10242,14371,51660,55789,59790,63919,35144,39273,43274,47403,23285,19156,31415,27286,6769,2640,14899,10770,56317,52188,64447,60318,39801,35672,47931,43802,27814,31879,19684,23749,11298,15363,3168,7233,60846,64911,52716,56781,44330,48395,36200,40265,32407,28342,24277,20212,15891,11826,7761,3696,65439,61374,57309,53244,48923,44858,40793,36728,37256,33193,45514,41451,53516,49453,61774,57711,4224,161,12482,8419,20484,16421,28742,24679,33721,37784,41979,46042,49981,54044,58239,62302,689,4752,8947,13010,16949,21012,25207,29270,46570,42443,38312,34185,62830,58703,54572,50445,13538,9411,5280,1153,29798,25671,21540,17413,42971,47098,34713,38840,59231,63358,50973,55100,9939,14066,1681,5808,26199,30326,17941,22068,55628,51565,63758,59695,39368,35305,47498,43435,22596,18533,30726,26663,6336,2273,14466,10403,52093,56156,60223,64286,35833,39896,43963,48026,19061,23124,27191,31254,2801,6864,10931,14994,64814,60687,56684,52557,48554,44427,40424,36297,31782,27655,23652,19525,15522,11395,7392,3265,61215,65342,53085,57212,44955,49082,36825,40952,28183,32310,20053,24180,11923,16050,3793,7920]);d8=class d8 extends Error{name;code;chainedError;constructor(Z,X){super(Z);this.name="NKeysError",this.code=Z,this.chainedError=X}};(function(Z){Z.InvalidPrefixByte="nkeys: invalid prefix byte",Z.InvalidKey="nkeys: invalid key",Z.InvalidPublicKey="nkeys: invalid public key",Z.InvalidSeedLen="nkeys: invalid seed length",Z.InvalidSeed="nkeys: invalid seed",Z.InvalidCurveSeed="nkeys: invalid curve seed",Z.InvalidCurveKey="nkeys: not a valid curve key",Z.InvalidCurveOperation="nkeys: curve key is not valid for sign/verify",Z.InvalidNKeyOperation="keys: only curve key can seal/open",Z.InvalidEncoding="nkeys: invalid encoded key",Z.InvalidRecipient="nkeys: not a valid recipient public curve key",Z.InvalidEncrypted="nkeys: encrypted input is not valid",Z.CannotSign="nkeys: cannot sign, no private key available",Z.PublicKeyOnly="nkeys: no seed or private key available",Z.InvalidChecksum="nkeys: invalid checksum",Z.SerializationError="nkeys: serialization error",Z.ApiError="nkeys: api error",Z.ClearedPair="nkeys: pair is cleared"})(l8||(l8={}));(function(Z){Z[Z.Unknown=-1]="Unknown",Z[Z.Seed=144]="Seed",Z[Z.Private=120]="Private",Z[Z.Operator=112]="Operator",Z[Z.Server=104]="Server",Z[Z.Cluster=16]="Cluster",Z[Z.Account=0]="Account",Z[Z.User=160]="User",Z[Z.Curve=184]="Curve"})(Y4||(Y4={}));rC=[120,107,118,49];A75(j75);(function(Z){Z.v1="ed25519",Z.v2="ed25519-nkey"})(iJ||(iJ={}))});function p41(Z){try{Z?.clear?.()}catch{}}async function yv8({accountJwt:Z,accountSigningKey:X,expiresAt:G,permissions:Y,userId:Q,allowedConnectionTypes:$=["WEBSOCKET"]}){let J=vv8(Z),W=i41(J.sub),K=n41(new TextEncoder().encode(X)),N=Vv8();try{let F=await bv8(Q,N,W,{pub:{allow:Y.publish.allow},sub:{allow:Y.subscribe.allow},allowed_connection_types:$},{algorithm:iJ.v2,exp:Math.floor(G.getTime()/1000),signer:K});return new TextDecoder().decode(xv8(F,N))}finally{p41(N),p41(K),p41(W)}}var gv8=B(()=>{_v8()});function b75(Z){return/^wss?:\/\//i.test(Z.trim())?["WEBSOCKET"]:["STANDARD","WEBSOCKET"]}function hv8(){let Z=new C1;return Z.post("/links/session",async(X)=>{let Y=X.get("studioContext").auth?.user?.id;if(!Y)return X.json({error:"Unauthorized"},401);let Q=$1();if(!Q.natsTunnelPublicEnabled)return X.json(t41(),503);if(!Q.natsPublicUrl)return X.json(t41(),503);if(!Q.natsAccountJwt||!Q.natsAccountSigningKey){if(!Q.localMode)return X.json(t41(),503)}let $=mJ(Y),J;if(Q.natsAccountJwt&&Q.natsAccountSigningKey){let W=new Date(Date.now()+Q.natsTunnelSessionTtlSeconds*1000);J=await yv8({accountJwt:Q.natsAccountJwt,accountSigningKey:Q.natsAccountSigningKey,expiresAt:W,permissions:Iv8($),userId:Y,allowedConnectionTypes:b75(Q.natsPublicUrl)})}return X.json(qv8({publicUrl:Q.natsPublicUrl,userId:Y,ttlSeconds:Q.natsTunnelSessionTtlSeconds,credentials:J}))}),Z}var t41=()=>({error:"link session unavailable"});var uv8=B(()=>{s6();b8();Mv8();gv8()});function x75(Z){return Z.filter((X)=>X.vendors?.alias).map((X)=>({name:X.name,title:X.title,description:X.description,logo:X.logo,category:X.category,vendor:{alias:X.vendors.alias,url:X.vendors.url}}))}async function _75(Z,X){let G=await fetch(`${Z}/rest/v1/apps?select=name,title,description,logo,category,vendors(alias,url)`,{headers:{apikey:X,Authorization:`Bearer ${X}`,Accept:"application/json"},signal:AbortSignal.timeout(v75)});if(!G.ok){let Y=await G.text().catch(()=>G.statusText);throw console.error(`[deco-apps] Supabase error (${G.status}): ${Y.slice(0,200)}`),Error(`External service error (${G.status})`)}return await G.json()}var v75=1e4,y75=async(Z,X)=>{if(!Z.get("studioContext").auth.user?.id)return Z.json({error:"Unauthorized"},401);return X()},cv8=()=>{let Z=new C1;return Z.use("*",y75),Z.get("/",async(X)=>{let G=$1(),Y=G.decoSupabaseUrl,Q=G.decoSupabaseServiceKey;if(!Y||!Q)return X.json({apps:[]});try{let $=await _75(Y,Q);return X.json({apps:x75($)})}catch($){return console.error("[deco-apps] GET error:",$),X.json({error:"Failed to fetch apps"},502)}}),Z};var lv8=B(()=>{s6();b8()});import{z as h1}from"zod";function gK(Z,X="invalid_request_error",G=null,Y=null){return{error:{message:Z,type:X,param:G,code:Y}}}function p75(Z){if(!Z)return null;let X=Z.indexOf(":");if(X===-1)return{credentialId:null,modelId:Z};let G=Z.substring(0,X),Y=Z.substring(X+1);if(!G||!Y)return null;return{credentialId:G,modelId:Y}}function t75(Z,X,G){try{return JSON.parse(Z)}catch{throw new iv8(`Invalid JSON in tool call arguments for function '${G}' (tool_call_id: ${X}): ${Z}`)}}function o75(Z){let X={};for(let G of Z)if(G.role==="assistant"&&G.tool_calls)for(let Y of G.tool_calls)X[Y.id]=Y.function.name;return Z.map((G)=>{switch(G.role){case"system":return{role:"system",content:G.content};case"user":if(typeof G.content==="string")return{role:"user",content:G.content};return{role:"user",content:G.content.map((Q)=>{if(Q.type==="text")return{type:"text",text:Q.text};return{type:"image",image:Q.image_url.url}})};case"assistant":if(G.tool_calls&&G.tool_calls.length>0)return{role:"assistant",content:G.tool_calls.map((Q)=>({type:"tool-call",toolCallId:Q.id,toolName:Q.function.name,input:t75(Q.function.arguments,Q.id,Q.function.name)}))};return{role:"assistant",content:G.content??""};case"tool":let Y=X[G.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:G.tool_call_id,toolName:Y,output:{type:"text",value:G.content}}]}}})}function r75(Z){let X=Z.map((G)=>{let Y=G.function.parameters?MQ(G.function.parameters):MQ({type:"object",properties:{}});return[G.function.name,y8({description:G.function.description,inputSchema:Y})]});return Object.fromEntries(X)}function a75(Z){if(!Z)return;return{openai:{response_format:Z}}}function s75(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function dv8(Z,X,G,Y,Q,$){let J={model:Z,messages:X,tools:G,temperature:Y.temperature,maxTokens:Y.max_tokens,topP:Y.top_p,frequencyPenalty:Y.frequency_penalty,presencePenalty:Y.presence_penalty,stopSequences:Y.stop?Array.isArray(Y.stop)?Y.stop:[Y.stop]:void 0,abortSignal:$};return Q?{...J,providerOptions:Q}:J}function mv8(Z){if(Z==="tool-calls")return"tool_calls";if(Z==="length")return"length";return"stop"}var g75=256,h75,u75,c75,l75,d75,m75,i75,n75,iv8,nv8,pv8;var tv8=B(()=>{F4();s6();Jh();h75=h1.object({type:h1.literal("function"),function:h1.object({name:h1.string(),description:h1.string().optional(),parameters:h1.record(h1.string(),h1.unknown()).optional()})}),u75=h1.object({id:h1.string(),type:h1.literal("function"),function:h1.object({name:h1.string(),arguments:h1.string()})}),c75=h1.discriminatedUnion("role",[h1.object({role:h1.literal("system"),content:h1.string(),name:h1.string().optional()}),h1.object({role:h1.literal("user"),content:h1.union([h1.string(),h1.array(h1.union([h1.object({type:h1.literal("text"),text:h1.string()}),h1.object({type:h1.literal("image_url"),image_url:h1.object({url:h1.string(),detail:h1.string().optional()})})]))]),name:h1.string().optional()}),h1.object({role:h1.literal("assistant"),content:h1.string().nullable().optional(),name:h1.string().optional(),tool_calls:h1.array(u75).optional()}),h1.object({role:h1.literal("tool"),content:h1.string(),tool_call_id:h1.string()})]),l75=h1.object({type:h1.literal("text")}),d75=h1.object({type:h1.literal("json_object")}),m75=h1.object({type:h1.literal("json_schema"),json_schema:h1.object({name:h1.string(),description:h1.string().optional(),schema:h1.record(h1.string(),h1.unknown()),strict:h1.boolean().optional()})}),i75=h1.union([l75,d75,m75]),n75=h1.object({model:h1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:h1.array(c75),stream:h1.boolean().optional().default(!1),temperature:h1.number().min(0).max(2).optional(),max_tokens:h1.number().positive().optional(),top_p:h1.number().min(0).max(1).optional(),frequency_penalty:h1.number().min(-2).max(2).optional(),presence_penalty:h1.number().min(-2).max(2).optional(),stop:h1.union([h1.string(),h1.array(h1.string())]).optional(),tools:h1.array(h75).optional(),tool_choice:h1.union([h1.literal("auto"),h1.literal("none"),h1.literal("required"),h1.object({type:h1.literal("function"),function:h1.object({name:h1.string()})})]).optional(),response_format:i75.optional(),user:h1.string().optional()});iv8=class iv8 extends Error{constructor(Z){super(Z);this.name="MessageConversionError"}};nv8=new C1;nv8.post("/:org/v1/chat/completions",async(Z)=>{let X=Z.get("studioContext"),G=Z.req.param("org");try{if(!X.auth.apiKey?.id)return Z.json(gK("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!X.organization)return Z.json(gK("Organization context is required. Ensure your API key has organization metadata.","invalid_request_error","organization"),400);if((X.organization.slug??X.organization.id)!==G)return Z.json(gK("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Y=await Z.req.json(),Q=n75.safeParse(Y);if(!Q.success){let L=Q.error.issues[0]??{message:"Invalid request",path:[]};return Z.json(gK(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let $=Q.data,J=p75($.model);if(!J)return Z.json(gK("Invalid model format. Expected 'model_id' or 'credential_id:model_id' (e.g., 'claude-sonnet-4-6' or 'key_abc123:claude-sonnet-4-6')","invalid_request_error","model"),400);let{credentialId:W}=J,{modelId:K}=J;if(!W){let L=await X.storage.aiProviderKeys.list({organizationId:X.organization.id});if(L.length===0)return Z.json(gK("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);W=L[0].id}let N;try{N=await X.aiProviders.activate(W,X.organization.id)}catch{return Z.json(gK(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=N.aiSdk.languageModel(K),U=o75($.messages),H=$.tools?r75($.tools):void 0,w=a75($.response_format),O=s75(),D=Math.floor(Date.now()/1000);if($.stream)return QU(Z,async(L)=>{let E=dv8(F,U,H,$,w,Z.req.raw.signal);try{let z=m3(E),j=!1,A=0,P="",q=async()=>{if(P.length===0)return;let S=P;P="",await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:$.model,choices:[{index:0,delta:{content:S},finish_reason:null}]})})};for await(let S of z.fullStream){if(!j&&(S.type==="text-delta"||S.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:$.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),j=!0;if(S.type==="text-delta"){if(P+=S.text,P.length>=g75)await q()}else if(S.type==="tool-call"){await q();let M=A++;await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:$.model,choices:[{index:0,delta:{tool_calls:[{index:M,id:S.toolCallId,type:"function",function:{name:S.toolName,arguments:JSON.stringify(S.input)}}]},finish_reason:null}]})})}else if(S.type==="finish")await q(),await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:$.model,choices:[{index:0,delta:{},finish_reason:mv8(S.finishReason)}],usage:S.totalUsage?{prompt_tokens:S.totalUsage.inputTokens??0,completion_tokens:S.totalUsage.outputTokens??0,total_tokens:S.totalUsage.totalTokens??0}:void 0})})}await q(),await L.writeSSE({data:"[DONE]"})}catch(z){let j=z;console.error("[openai-compat:stream] Error:",j.message),await L.writeSSE({data:JSON.stringify({error:{message:j.message,type:"server_error"}})})}});else{let L=dv8(F,U,H,$,w,Z.req.raw.signal),E=await cw(L),z={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)z.tool_calls=E.toolCalls.map((j)=>({id:j.toolCallId,type:"function",function:{name:j.toolName,arguments:JSON.stringify("input"in j?j.input:{})}})),z.content=null;return Z.json({id:O,object:"chat.completion",created:D,model:$.model,choices:[{index:0,message:z,finish_reason:mv8(E.finishReason)}],usage:{prompt_tokens:E.usage?.inputTokens??0,completion_tokens:E.usage?.outputTokens??0,total_tokens:E.usage?.totalTokens??0}})}}catch(Y){let Q=Y;if(Q.name==="AbortError")return Z.json(gK("Request aborted","invalid_request_error"),400);if(Q.name==="MessageConversionError")return Z.json(gK(Q.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Q.message,Q.stack),Z.json(gK(Q.message,"server_error"),500)}});pv8=nv8});var rv8;var ov8=B(()=>{rv8={name:"decocms",version:"4.158.8",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts","smoke:link":"bun run scripts/smoke-link.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@anthropic-ai/claude-agent-sdk":"^0.3.181","@duckdb/node-api":"^1.5.0-r.1","@openai/codex":"0.144.3","@openai/codex-darwin-arm64":"npm:@openai/codex@0.144.3-darwin-arm64","@openai/codex-darwin-x64":"npm:@openai/codex@0.144.3-darwin-x64","@openai/codex-linux-arm64":"npm:@openai/codex@0.144.3-linux-arm64","@openai/codex-linux-x64":"npm:@openai/codex@0.144.3-linux-x64","@openai/codex-win32-arm64":"npm:@openai/codex@0.144.3-win32-arm64","@openai/codex-win32-x64":"npm:@openai/codex@0.144.3-win32-x64"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","@resvg/resvg-js":"^2.6.2","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","node-pty":"^1.0.0","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6",satori:"^0.28.2"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/harness":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@decocms/tunnel":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",vite:"^7.2.1",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function XX5(){let Z=process.env.POSTHOG_KEY;if(!Z)return null;return{key:Z,host:process.env.POSTHOG_HOST??ZX5}}var av8,ZX5="https://ph.studio.decocms.com",sv8;var ev8=B(()=>{s6();if0();zO();rZ();b8();i11();ov8();av8=new C1;av8.get("/",(Z)=>{let X={version:rv8.version,theme:uS1(),...wD().logo&&{logo:wD().logo},...o3()&&{internalUrl:L10()},...$1().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!$1().firecrawlApiKey,auth:BM8(),posthog:XX5(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!o3()&&$1().sandboxProviderKind==="agent-sandbox"}};return Z.header("Cache-Control","no-store"),Z.json({success:!0,config:X})});sv8=av8});function Nh(Z){let X=(Z??"").trim().toLowerCase();return X=X.replace(/^https?:\/\//,""),X=X.replace(/^www\./,""),X=X.split(/[/?#]/)[0]??"",X.replace(/\/+$/,"")}function o41(Z){return(Nh(Z).split(".")[0]||Z).replace(/[-_]/g," ").split(" ").filter(Boolean).map((G)=>G.charAt(0).toUpperCase()+G.slice(1)).join(" ")}function r41(Z,X=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Nh(Z))}&sz=${X}`}function Zx8(Z,X){let G=Z.trim();if(G.length<=X)return G;let Y=G.slice(0,X-1),Q=Y.lastIndexOf(" ");return`${(Q>X*0.6?Y.slice(0,Q):Y).trimEnd()}\u2026`}function Xx8(Z){let{brand:X,domain:G,score:Y,verdict:Q}=Z,$=typeof Y==="number"?`${X} commerce report \u2014 ${Math.round(Y)}/100 \xB7 decocms`:`${X} commerce report \xB7 decocms`,J=`See the full ${X} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,W=Q?.trim()?Zx8(`${Q.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):Zx8(`How does ${G} really perform? ${J}`,200);return{title:$,description:W}}import{z as J1}from"zod";var sC,GX5,YX5,QX5,$X5,Gx8;var Yx8=B(()=>{sC=J1.enum(["good","bad","neutral"]),GX5=J1.preprocess((Z)=>{if(Array.isArray(Z))return{kind:"text",value:Z.find((G)=>G!==null&&typeof G!=="object")??""};return Z!==null&&typeof Z==="object"?Z:{kind:"text",value:Z}},J1.object({kind:J1.enum(["text","number","sparkline","badge","score"]).catch("text"),value:J1.coerce.string().optional(),tone:sC.optional(),muted:J1.boolean().optional(),delta:J1.coerce.string().optional(),deltaDir:J1.enum(["up","down","neutral"]).optional(),points:J1.array(J1.coerce.number()).optional(),label:J1.coerce.string().optional()}).transform((Z)=>{if(Z.kind==="badge"&&Z.label==null)Z.label=Z.value??"";if(Z.kind==="score"){let X=Number(Z.value);if(Number.isNaN(X))return{...Z,kind:"text"}}return Z})),YX5=J1.preprocess((Z)=>{let X=Z;if(X&&typeof X==="object"&&!Array.isArray(X)&&Array.isArray(X.cells))X=X.cells;if(Array.isArray(X)&&X.length===1&&Array.isArray(X[0]))X=X[0];if(Array.isArray(X))return X;if(X&&typeof X==="object")return Object.values(X);return X},J1.array(GX5)),QX5={key:J1.coerce.string(),title:J1.coerce.string(),eyebrow:J1.coerce.string().optional(),headline:J1.coerce.string(),annotation:J1.coerce.string().optional(),methodology:J1.coerce.string().optional(),sources:J1.array(J1.object({name:J1.coerce.string(),logoUrl:J1.coerce.string()})).optional()},$X5=J1.discriminatedUnion("template",[J1.object({template:J1.literal("cover"),score:J1.object({value:J1.coerce.number(),max:J1.coerce.number().optional(),grade:J1.coerce.string().optional(),label:J1.coerce.string().optional()}).optional(),brandImage:J1.coerce.string().optional(),screenshot:J1.coerce.string().optional(),mobileScreenshot:J1.coerce.string().optional()}),J1.object({template:J1.literal("cta"),ctaUrl:J1.coerce.string().optional(),ctaLabel:J1.coerce.string().optional(),bullets:J1.array(J1.coerce.string()).optional()}),J1.object({template:J1.literal("series"),points:J1.array(J1.coerce.number()).min(2),xLabels:J1.array(J1.coerce.string()).min(1),unit:J1.coerce.string().optional(),callout:J1.object({index:J1.coerce.number(),value:J1.coerce.string(),tone:sC.optional()})}),J1.object({template:J1.literal("threshold"),value:J1.coerce.string().default(""),metricLabel:J1.coerce.string().optional(),ratio:J1.coerce.number(),thresholdRatio:J1.coerce.number().optional(),thresholdLabel:J1.coerce.string().default(""),tone:sC.optional()}),J1.object({template:J1.literal("stats"),stats:J1.array(J1.object({value:J1.coerce.string(),label:J1.coerce.string(),tone:sC.optional()})).min(1)}),J1.object({template:J1.literal("bars"),items:J1.array(J1.object({value:J1.coerce.string(),label:J1.coerce.string(),ratio:J1.coerce.number(),tone:sC.optional()})).min(1)}),J1.object({template:J1.literal("gauges"),gauges:J1.array(J1.object({label:J1.coerce.string(),value:J1.coerce.string(),status:J1.enum(["good","warn","bad"]).catch("warn"),caption:J1.coerce.string().optional(),ratio:J1.coerce.number().optional()})).min(1)}),J1.object({template:J1.literal("checklist"),checks:J1.array(J1.object({label:J1.coerce.string(),status:J1.enum(["pass","fail","warn"]).catch("fail"),value:J1.coerce.string().optional()})).min(1)}),J1.object({template:J1.literal("table"),columns:J1.array(J1.object({label:J1.coerce.string(),align:J1.enum(["left","right"]).optional()})).min(1),rows:J1.array(YX5).min(1),highlightRow:J1.coerce.number().optional()}),J1.object({template:J1.literal("products"),products:J1.array(J1.object({name:J1.coerce.string(),price:J1.coerce.string().optional(),image:J1.coerce.string().optional(),url:J1.coerce.string().optional()})).min(1)}),J1.object({template:J1.literal("list"),entries:J1.array(J1.object({label:J1.coerce.string(),severity:J1.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:J1.coerce.number().optional()}),J1.object({template:J1.literal("keywords"),volumeLabel:J1.coerce.string().optional(),keywords:J1.array(J1.object({term:J1.coerce.string(),volume:J1.coerce.string(),position:J1.coerce.number().catch(0)})).min(1)}),J1.object({template:J1.literal("competitor"),metricLabel:J1.coerce.string().optional(),competitors:J1.array(J1.object({name:J1.coerce.string(),value:J1.coerce.string(),tone:sC.optional(),isYou:J1.boolean().optional()})).min(1)}),J1.object({template:J1.literal("scorecard"),rivalLabel:J1.coerce.string().optional(),dimensions:J1.array(J1.object({label:J1.coerce.string(),you:J1.coerce.string(),rival:J1.coerce.string().optional(),rivalName:J1.coerce.string().optional(),tone:sC.optional()})).min(1)})]),Gx8=J1.object({...QX5,template:$X5})});function Yj0(Z){let X=[],G=[...Z.sections].sort((Y,Q)=>Y.position-Q.position).map((Y)=>{let Q=Gx8.safeParse(Y.props);if(Q.success)return Q.data;let $=Q.error.issues[0];return X.push({section_type:Y.section_type,position:Y.position,reason:$?`${$.path.join(".")||"(root)"}: ${$.message}`:"contract violation"}),null}).filter((Y)=>Y!==null);return{deck:{meta:{...Z.meta,scores:Z.summary?.scores},slides:G},drops:X}}var a41=B(()=>{Yx8()});function s41(Z){return Buffer.from(Z,"base64")}var Qx8;var $x8=B(()=>{Qx8=[{name:"Inter",data:s41("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"),weight:400,style:"normal"},{name:"Inter",data:s41("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"),weight:600,style:"normal"},{name:"Inter",data:s41("d09GRgABAAAAAHpYAA8AAAABCZQAAQABAAAAAAAAAAAAAAAAAAAAAAAAAABHREVGAAABWAAAAI8AAADQKTIpVUdQT1MAAAHoAAAZbQAAV/As979mR1NVQgAAG1gAABGDAAAq6hQX4jNPUy8yAAAs3AAAAFcAAABgdG/yzlNUQVQAAC00AAAASgAAAFpX00BdY21hcAAALYAAAAHqAAACtqzmgtBnYXNwAAAvbAAAAAgAAAAIAAAAEGdseWYAAC90AAA7PAAAYjwfmOWOaGVhZAAAarAAAAA0AAAANjJlWqFoaGVhAABq5AAAACAAAAAkFiATgmhtdHgAAGsEAAADGQAACAzZOdlCbG9jYQAAbiAAAAPMAAAECPMUC41tYXhwAABx7AAAABsAAAAgAh4A9m5hbWUAAHIIAAABJAAAAlA0FF+HcG9zdAAAcywAAAcpAAAQUksrMPx42iXGAQbCAACF4fevCswCIFFQRylQZ1tBmTrBNCTADMCqAZAgnaAMgyg9erzPLxQo0n+Zu+/HQisd7FFXe9PdPvS2H30FAYFt07EhoY3o2SEjO2Zip8zsnIWNWdo1G5uQ2C07m5LaPZnNyW1BYUsqtXjyEtTU7oZGLaFA0sAPhbqUnDhzoaYRguoHfCMjtwB42oSVA5hcWRCF6+rNfKO1bds2Y9u2emcVrb09MdaKbdu2bduY7KkTO/9Xf5+uurc6mtdiRCRJckpj8W++nTWvPF3m49pV5f4KtctVkfurlopVl+vFC34dOSIOLxY+9p53T86McFalXO3q8ix9b7VStavIrdWqVKuCLYIT4ZQNEW/IMcuxDejfdnNSLClrNEXySxpOXYp+EspEbeRRuKKkSHBt5Ga5Vi5HNrZedAPsomQxZkRYD8+J7tBPM+PMeDPBTDTb+YlGEnG/ZGgD3y4pJik0DT+Hb8PnCnJdlJIeaobKoSwoDgqG3CBreJu8Gp5HJuHJ8HC4N9webgxXg0tDUvAhyWeSfX4H3if5TX6NX4Za4GehpvhxqBF+kO8DRvhuvoP/F/6dtEQ6BfYbh7L+R6SvfUPUJz6Gqg4q+tKkqM/vc+LdKYSr/fuoN/3L4Fm8Pu4f9Hf7W/31/kr4bpDmE731ie6Q2wO26StqA2qVW+LmuRluEhgDhrkBoJfr4tqRv10v8Ktr7jLc9+5LVx985GpH2V1VV96VJIXxDh04r9MCfH3Xve7ejZ52L7qn3dN4HeMedffrZ5A7kTTf7K51l7sUF6HEHkDtAlvsOrvCLrJzyDS7Dkywo1BDbD/bAwyxnWwb+6dtbZvan1F/gm/t57au/dx/YtNtTVvZf23Loorbgja3zWrftq/a5+2T9mF7r73d3mhv94n2ajF2s79BTGjsXhRjMsIMuD79G53Bfn36N3pV1A+eR+8Oq+A5attUz9vm9Fd0DzoWboTfie5Q++Jw1SgZrhLWq7UP36DmNDcyrNmVwxRGB+a0Au+WZ66PDTA3NNA+8g1qnZo3E+5Sh4rovIYzMPvjkWFu+JIeiA7MHOPOD7gtxm31OK2vHdcGGeaeqxNaqMMMer2am6/Rk8g30HfClyXE1XrSpuMkjJMw93SPLkUuz08sxyn/1PANav6uLgvXwjH0YXYOaMc1QQfGLZj97NyTDR0YG9R3qDntiN8zzN/JloQG8KaEYnScbqHmdCc6sGZ/t2a4hZrTw7y7hXe3HstxuoWaZzrRf6ADM7dAhpnjmsMoze4q7FG3gK/GNs1xNaep7Kehj8xOP3RgzeYmZJg75yPDPPMzp7fqZnM77mpuQcfVPH8IGdaM/cVofhantel6/NPVxVQdp1uoOS2udpejA7MTV4cXtQMXU7N/ABnm3YPYqTmuxtTKlagMEWksPSQuvWSydJOpMlcmyHxZIjNlmRxAOiyZsstYY2WP8SbIXpNiUmS/STOXyAGTYRrJIdPCtJRM0xqI+dX8ZozpCJzpbLrgziAQmSEgwWwxW02iRCLyLOpx1IOou1G3oq4XY+7k/5l6tFWbEfQc+mq1RCe/dczuk987rqaL4LKSIpvsrnOyBawDK87JiWcfmXAORpEhpB/pcYJOF6UN6k/SmjQFP1+AaeTbE3wO6p5BOql5DiqDsqT4WeDpTLKSt88JntzkyWM8THiDlD0n91o+6cnV5FKSdBZeMZkn2Gf22X6nY3YotrXZZNaYZWaB1f8VC0T0W8D+Bk9T25gMgd8WgXOrXSnm8vTXavMX8xvM16jdrswKmtWuDftXqW1xtSzKLIDOtezUo9Mz86JTg7kcHaNb0W/Rbeit9M4jh/XZxbyF7kT/Q3dTh1FqdxWdSvfjtBQ9X21uZj7EaRI7t7BTl/6Jbkwf+J/5eoCRIwzDOP6fvdq2bVthbYa9OKkbXZzUthXVtm3btu023Kfpl+zkMJPbL3eL3xqjV5kBAuQnQB6gAAXJTVEakZcm9KU2A5hGV2YxmzHMZT7jWMQOJpreX2F6/5Dp/dOm9y+a3n9jevzd/87lAw6QDcepCjg4ziUCoe6jAFmABEqZm0OCM8QZ6gzDcc4H3xOgAAlF/hTJQz4gkH88WaBQowI9qE09POk0vvQNl34DaBXJ6AyAbuFD07GgJCJGW7FXFTu1CYNWYkGjiSmtAVA7NSUZddMpktFidXTfX09RHYYu4dJBLQYdBG0AUH0lBn/rutoBaLBGJ/vnQdAiLcXQSAwl6jmAOugNBiWIOrUGWdWzOrhLpoTmaTqApmt68K9X7rUSzBb7gJL03rfGzatGQ/AJaaiT++5uZteZ1pjto4OEQb8xtCWcTlW1UMy0zXu/NTrcnHnRTd3VaAC98TwC97tQ5DWOdOlx8L39FLCfSvpNhOggEedbkbvxh16TIdodT1HRbS123//w3l480ikttq9mXSIZ3bOuDwv6kF4GtQ9PWq0dkewv/SYuqU8Y51FuzjU6eTS12H32jLlGY0EFiYbmRIBN9nWGFLSMeNQIQ5WDT/Ck6ZGcVRqFlwKkNcJ3ypd1K9jWQL9prIMgQjHRYlx6BpriVfVyI6iXhNQgLFqNoS+go3jQZ4/rt2L+3WytABmiZ0SQvhBPAlTk6T8m7AFIkiwI4/j3r+7pqZ61be8Za9u2NVjbNgdr23Zoz3fhONu2Gb59l5Ghixf5kOX6dZesyN/zISKlBGmKKaYOdVSMetRTcRrQQCVoTGOVpBltVYrO9FEl+tFPdRjAANVlKMNUjxGMVAPGMFaNmECemjCdWXqcOSxUc5awSm1Zy2Z1YRtF6s1e9moQ+zmswRzlqEZwnOMaySlOaRRnOKPRXOKyxnCVqxrHHe5oPPd4ShN4k3c0iS/4WjmKNNCPpLH+tVJP960UJyJSWRIkVJUkST1IBhmqRYqUyhMT29Q0aTUhiyzV9yOEZjRTRHNaCFrSUkla0UrQmtaWb0MbQVvaWr4znVWGLnRRZbrRTSXpQQ+re9HL6t70VoqhDNUDDGOYEoxghOoykpGCMYxRkrGMFUxggvUnMlHFmMQkpZnMFGWRTbZlcsixTC55ipnOTGUyiznKYC5zBfOYp4rMZ755LGCB9Rey0PpLWKKIpSwTLGe5kqxghWAlKy2/yiQwibXWX8d6wQY2KMlGNgo2scnym9kizGm72e9gh5Lkk6+aFFCgFIUUqjRFpljCFauY4n7V4AAH9BAHOag6HOKQGnHYdMtxhCOqxjGOqbYbV+AkJ1XOpZtymtNq4NKlXLq6SzfkXd4XfMCHiqz0deP6blzHjUu6cSU3TrhxYzeu4MZVXLeB61agGMVUyX/Xsf+uY/9dx+6NS0dujOtGrlvRdWvQla4q7cZl6E5365u09XvSU6Xdu4x7F6cPfRT7PyP2f0bsv4BG//sFZLp95OqRq5dw9SxXL+bqJVw9y9XTrp4y9VlKMsfsk65ezdWru3o1V6/u6rh35NK4Ma4buSsuWspFIxet7aLFXbS8i5Zy0YSL1nLRpi6a4aL1XLSy/1+buGVVV2zo/9fKrljWFWu6Yl3/v5bjHd4RfM3XQuhhJSWV1eePFepF3dV1a89qt5d862/WSi1WtoZbwdYHCTKJSTOMEfh3Rbayl0Nc4Rq3fRsJroT3uCFxO3yjJIfCQG6EV7gXzvFUOCc4pFaKbPyejd8TnFApYTLdlCQz/EWx8C0dw3e8El5QxIhwlEXhtuA5SQmmh5eYYTEzvGSKCckybzDDYqbFtvAP2y2Kwj+KiCRiSaizH2l1jnOQ3WxkurU9ad3iVxpTl7jZ+WbnsZZIv+uyTupks/Mtfn18u/X2a6dWC1XXZ0T40VOMDnSiNyOYyCTsF0M2OcxlMVsxWfJNs5AiE7lue51kYljLpLCIbGtzwiLBofCVIk7Ynp7xPe0QnmKrTSlDFM6QCPXIsDYV8sm0NrbIsihm0TvcYEQYz0Rrsy222Xq3WxRYv8javeGMkqTDNEZYTAxtbK42wkY3lNJntoYONtfgIBbZtFU23mpTsOxa39NLtqf5ZFubE/KVYER4yrJPWeYpxTZaa6PuTLbMFM92Jz+8SaFt/Y5tOWX7+zPFLDrYmgfbmhbZHFvv2++CXMvk+fbOCPLtuPF+hq3xINkWi2wtW/xMPPUf9+YAJEsShOH/bNs2w3G2bc97Z9vusyZ46kPg7Omz6mw+nG3bvvkW3ZHRFTv9tntrlt+ia1A5FV3MP3M0VZdSvfx/S1+t6S13YkpNvMiVmlRaorbo2lpfaynP/EqZTeU4ow/K7nrFSi5O0qySxLsSczK6hc75psQZ3f8/4/IWGpMzveqLnudIvi6vLEmszKFqCbFdPXiZ1yfkq5Pwo9UrAXXiijrKfJVOnbu18NZvVg5u5FErXyQZpisyJlOxRVJOUeF3q2+kdRnf/fnz81yqW3TpsIxiY5wmI+Zj3za1VAPm4Hyr+aFL72Z/X/H21W4ONZXbNG7NKWkyvjNVY2p1sRw/8zMO8yc0mfmWM5AqyUt1Xw0e0RxZb3+nHPwqH/n1ArlUbYW3+qrcUVOfoa4QTlYXmyuUBRmjGSQSLcln6TPZfLxHU0m5Z5ykBbJHM6VXIokadS2phbJxMEZlWE3d8LikyXg3i3Aswnf5eA2JzbTJilQE7pCoEdmKLt4t7ZdaL7Agt3MjoyRWJLF4y8yczBus0soSka0aJ0ksgpPBgn7khvXt3T8WtY3R1HmUjVmBA9hfImJ/zSxxsYSzCIczrezRbP1/sKskMS3ry2C0DBxHN38nLoiZ7E+teBSzP/tPOOaAy2nNphMQqxB+tPolFHFOZk9vHTa4llckiXF+q8IhzvcPq2BWif2exfVPXJWP5cHPVvqyeH8LJ2i1Wq9dEWfeDIiUBGv9/l3mD1l8osT+sVuBtcr7D4lsvONy8dg9NAPO9m7X4243aLSyVjjCP1E3PS3ySiuljjrnqw/41riGWL3CM9lJzBt9JDQkYr4snvNc1NKawT0kJLKVi1fTfkqvodi+vL/aBM9ZcVp58Enp2RgAz1gPiqMlNmd9jmsZ097D1HL/jq/L+qzC1lLz93z0nCitxTXsYvXVfKbXfeEanKwcrkMH7RM+M6vf4DG/V3i89TjglbBxwCuFe3P16HcD14Y4uOWG4Uh4y856U0m8IYvu2flvGqUsJWl8Fk9an4hbPGsGEUnvOQK2l8zHfzJ4lFckXBW/1axVvQef2Rz8VwZxqZ7aPzut+9aqtuByHmQMB0ucn6/FLRIRv8lnxqx1y0mMYRWJRYjy1vzPpy7xeL5+3iKP9ZuKoyrrKGfwEw1qEud4EewLJKIeK9H89myDBqtIzMkqeWsyeMm7B1bfEFfmTtHbS3zhZ3+Uy19sfuC14EdV5YzME5T2U54HJZ1s79ncnmkoo1OZN7RV6Vhpw/+MYqhpkMENbP4l18uDk3AaMIqULEmT+Z6Mr2T1jLOyv9rNGlba3+L5A9D3xBKLFGYIrt/+8cDTvJVa5gOchCs/OkkkpuXovLXqY52IZ6g3v9J01EmkzuuRqgRtyfqj5uWcV6KZKIAwXbk94EJnEvsH+NyWVcsqXoShEs1XFE5gjCU8W5L3WT0sIzzgmwWL8bs93zvzaETS3rnQH/CqBgQiDT6LyMAV+Y+8pBFIa7WOeFBaYCXWb/7u+Sr2DiJc5o31Mxw94XxdVtIIgmckfufQ3Hc/vuZHGfyiXuDQ4R1fsMzf9fuuUDKn2g71gZyNxKmHIHFNJdXyQf98EApjVI4Z/WvwnjJxB8/2DB1YFIVReJ/YGtu2rX5sT7/GrsbTjlHGtqqkS+rYtlnFOvcGaz/81e1e9z2W4cAIMMYEw6qlHBlTCejChDVTGPengmyd5iQbNGfZrLkYzyquxrOKr5zTlsgFbanxrLLMeFZZYTyrrDKeVdYYzypbjWeVncazyn7jWeWY2qu/esp/7bykaReMT5WLxqfqWb3aTRz4igO+ONs/c4UA5uPEAtYirGOD7o1sQdjKNuaznR3Wye3WvYe9CPu0deznjFVlV3DiKtcQa+ScuMEthNvcxV+/rvt484BHuPOYpyzhGa9YwWveEMBb3uPFBz6xkM98x5Uf/EL4TRAOBGvrCSEMB8KJRIgiGl9iiGUlcSTgS6K2kiRS8CWVNBaTTgZCJlk4kk0uDuSRr7tAc6CQYt0llOFJuSZUUIUL1dTiZlXnSepp0d1KOx500MNyeuljKf0M4sEQIyxiVBPGNAerQI9aBbrFKtBdVoEesP7zkPWfu63x3WUV6CmrQI/JWlnLGlkv6/W5UTayZs41H8DPql+fKbLt6sCKGACj8J+7bskg1911Zt3dnnCoCXfvA2sDLQBphHCA1XgD39sJLWic6tdShAZUv5YuNE4XGtGFztKFdulCe3ShXbrQHl1oly60RxdaNBfNRZXNZXPZn1fNVZXpQrfoQs/RhS5TBlvq0DhlsKURjdOItmhE6zSiDRrRFo1onUa0QiNaogzOUgZbGtFpGtEZGtFpGtEZGtGAMthSisYpgy29aEAZbKlGA8pgSzsapwy2FKQBZbClI+3QkcbpSBfoSIt0pCEdacc8Mc/VpCadox1dpwhdo+u1dL3BHxtaUky3+bU+oAk5DSHkLELSiiuhfiVV1pAqfoZoyeMkhZAUNoY1pwXFtahlZbyQ6+rXDT+HcFI/4uT8KSfDOKnhpIKT5BEnBe/E97J64LU0vZYXMnrttRi0FNGSQ0sMLSNoaaBlBC0Nr+Wtf7/TByVwEvNOPskgJIeQUYRYhJw9IqQPIbsI6UPIGELKCCkhZAwh57BhsLGNjVlsrGCjio0lbKyiYg8VS7TRK7TRXdroLm10FxvuiA2HjSw23BEbDhtZbCxjYwMb89hYwMY8NhawMY+NBWxM0Ux3aaa7NNNdbOxjo4qNDjYcNrLYcNjIYmMGGxE2JrExg40IGz1stOmnW/TTLYQ4hKwhZB0hawhZPyLEISSLEHdEiDsixCEkixB3IOSWHELmEJJFyBZCphCyiJA5hEwjpEpvvYmQHfPFfJOjmQ7MD/NLjnIaLeo/aFKNfhdyD1ByLFEAhm93D2Lbtm3bduYxTmYna8e2bXMV27Zt2076/afO24mTc8/X6a4utaqi2tnqfxfXsfw4qn0d9lXGA1usb1ONS8YRY587dhCR38RClW8y4a+27Y0yhk3tEZxToX9QcU4/oC/WZ+rt9TZaOtElifquRc1tsdWsFl/NZwmluFSUxOobTMd3FyoZZBCRX8bJeCmgvqNCfEVRUkRWyzopp76RSmISVTW7Zpdq6t2orp5mDc1X85Wa6unU0gZqA6W21GcU4X/sIymSITlSICVSITXSIC3SIT0yICMyIRuyIwdyIg/yoiAKoQiKohiKowRKohRKowzKohzKowIqogmaojlaoCVGYCRGYS7mYT4W0KOFWIKlWIYwhCMCK8izEquwGmuwFuuwHhuwEZuwGVuwFdtwGEdwDMdxAmfwHrr4mMvFF/FENyPFgAVW2GBHDMRELMRGHMRFPMSHLm1NhzjA+GpOFSc84DIHS3d4wgveMBjxRM7hPGJw3VVlIZZgKZYhDOGIgB79f7YlLnlFFmIR6YuxhP2lWIblqpxIOCJgivB2iMSiVENZiCVYimUIQzgiEIkoWFS91OMuG+O3ZQ364c6v7kNnccAi/cwJMsisLkNMP1lqrhJNCzHXs3WxNeSROVMemzM5cnB00Zwo78zl6iiZBJMjBKHmei2HOV0rhuIoidJogTZwwR8BCEIv9EZf9McAnMJpnDGni0Yfs7L14Ym5RxYtlhpZetqLuSOHPZM9iZ2wvbPdse0j5Tdh22DbwDbUloSSPw3rM+sOYp07lhLD3dFRhUNFE2st9dMBC6jIZc2ggp8LqEL/NiwvVDxyx4tvwmWcMmYanY02KrLpe/RN1gzaGUZfFfZiWrj6s0UitUYxE2GVwnzhNvW7i7h8x80YN9pKL0aMmUQ1Ne9Xl2VETTXX15I1RF3ZTNSTHbKTUekMc3pDucIM3kLN3e3lPeFkZUd58WB1R0VxqZGtu5q5PNX45qPGN181H/lpA3hi/mruCFQ/lyeUJ+bHm+GPAAQiCF+8MWqdRRh9T8Q2MZIgM7IgKyqhMqqgKqqhOmqgJmqhNuqgLuqhPhqgIRqhMZqhrTlUHPiD/T/xF/7GP/gX7dAeHdARndAZXdAV3XjfnfBAJPcsCrfYv407eIKneIbneIGXeIXX0N09SB49AlFnJ3HCAy50hye84A0fcvvCz6wm/ghAIIIQjBCEoofZU3qiF+JSa5g44QEfc474wo+v1h8BCEQQghGCUBhfPhfqaEtZB25x7jbu4Ame4hme4wVe4hVeg1KmjzjQjTqc8IAfx/4IQCCCEIwQhCKb+750o/dOeMBF293hCS94w4874o8ABCIIwQhBKG7R2m3cwV3cw308wEM8wVM8w3O8wEu8wmvGr5GM3aMwGmNoL73obA1YYIUNdsRATMRCbMRBXMRDfBSG+6q4M054oAfpPdFLrVqayEof1hahvSlaB3Q282td0NXMr74NRl/2O2k+ahWQg6Mv1wRpHO0SnVp8qMVHvWETxQFNe/T/bNSI3D6iMQI05HwkqVHQ1Qy2DDpzSENqu05uRntK9JSYso8+sQJK60xKF3SFi/760LdAcw51ThR7dC7Olv7urEHKHFKGqiOdfJznGcVmrgmTnZwjRWMtyDdthGnkokxPdb0xvsv9bY5UKscQTKSdHdiJC9ydi7iEy7iCq7iG67iBm7hHXt4IeYO3eEcL5dGE1rpy75yqNQctDZX4P2qJFsJoIX90TT8tbagzXcDdErvWgjwuriGEPAM+vdQGcY2DMUKtVwth78sU23f5B/MrZ9z32UfdZ2ZNde9VO/RAvSVsw/4Dt6Z+/QAAAHjabJYFcFzHFkRPz5slvZW+IjNqzczMJMuMIcN+YzjSWuUSBBSRIczMn5mZmTHMzMzM48nzQlWqa+69272a7n0wJQSUsZ7bMDW1q49ifN3OxhwVDEVLFh2VcRoff0wSEIYAS4w4CSx4JZFXPE9y9866Rpp3765vIHdcbk89J52wd+duVtbt2V1HTa6pfi/zG1xjZqOrTAbEaF9H+Rr3NQDKSVJGmgoqqaI7PelNX/ozkAwg722iZRnMEIYzgjGjvjbqksEPDb5hcOvg7GAG/aT6guq26m3V46uT1eMHPufWv9z6hlv73drm1nS30tXjBzzi1m8G/WTAdQMuSK8M7wh/FV6T+shU6Dyl2YQAkcRQxxSlVa4KfU6VOkJV6qbu6qF+6q9qZTRAAzVIgzVMwzVEQzVCI9VTvdRbfdRXozRaYzRW4zReEzRRkzRFUzVN0zVDMzVLszVHkzVX8zQfQ5mMQlCNVrh5ldZTqU3aRE9llaWXTtGp9Fa99tBXTTrIAJf2fCbov/ofkyjNbBTIKqa4EkoqpTKFcn+veuW0RzVaquVaoVotcz6rtU7rtUZrtUlZNalZLTpNp+sMnalWneVc2tSuDnWqS/u0Xwd0UOd7V4OUdtkpcl/LUO3zu7od/c4blNXntU3blfvMnR7VY3pcT+hJPaWn9Yye1XN6Xi/oRQwJXnJANVqJtElbSape9aTVpLMod9nOo6du00P0Ig4sTfwicUOiK3FSYm1iaiIefy3+QPwv8W/FL4ifFt8VXxmfGK+KfRR7JnZL7Gex8bEq+5F9wT5g/2V/Zr9gz7HN9ji73s62g20yeCN4KPhb8IPgmqAtOCFYHUw0b5n7zJ/MN8wFJmc2mtkmY6xL/C/9SNeoVds0VQOV5BXu4098g0sIMKmrUlchfoGxV/gJRhIQ2NZUW6oN8QWnuLlI2ZU6LnUc4iDyHc+LRkQOY1emVudZY6eyDbEJN6WmF/H9qUUsRKmBBTaVTCURo5HveFb0RXRHydciToiXMBgFCkHl6kGKgETsDwXQhezfIL9PPPalw+A4ZL9RpMViBz8Fy5G9oEixsbpDYDyye4v4IHZU7Ch6Irslzwppjc8xswCf4xclOfoehs9xXXEOd789fI624hz2iUPwOY4rzmH/Y//jc6wuybEOl8P+oACf477iHPayw/A5flOSo/lT+BxfKMmRPQSf42BJjhpb43PkSnKsIkBUIVNIbYhrlTaAstpOQjnlCNWmg6R1vs6nhx7Vi/QkINAbesNsRGZ0fs476h7dY6YjU4HxU0H5nX5n+iO9gVyPeIy+ZizSAwT6mp8LygV6DulP0VTgG3Ub0reQbsuz0m+QriDQNoffFPFfQWrFqNZNBfYipBPwPeJA2khMGyOcUaLMxGqmx44SPkOgjMPyErYMozJNLuZ4C2lgnhH/QDyB4QmlgYAYt0X4GXJVvOd5y688bkKuisc8G/AVh3OQq+I/njNcQiNyVfzCM2IXog3xtejzVYgcFOXYj8gSMNxhIXiuAbEcQxVjAYP0X90aaUchx4pKr1i6+AHwIx5iAo+4zFk+cGjBEPcnMP4ETvgTOPQncNqfwD38CdwTQxJDJ/C+QwcfqgedWqAlXKejdTQ36wpdwRf0G/2eL+olvcxXCUjopAKicw6fMK61isAWn9fzxDRdHixGzI1Yq4wc/C8aHnGB0krTG1HlGSEt87UW58xLBZQ6c0ceJc78JkKJM1/zKHHmModS5xW+LvfOjUXIIW7KO2/J4yjE/rzz4ghzEXV557EewxHH5J17O1QhFuedazAEGL0KetPhFYOR++Q4vkAronvJubIU/8R5XrQVKVu9sjxSjitStnhlfKSsLFI2E+BZcwViYl4xqleOABCTMfSne5G2VKsRKW3SZm3R1ui/iNPVhZDqsYBIIrWR1FylOYa11DCbkf5ZTBPX8xi1+9ocMc955jnPCKsH8tP9fgp4iLv4F1V8hy9xDRexnzNo4AS2+f1rmc90xjNchrf0BIE6HHxXi+8tbvLd4QXPt0e92fcWtUe9WS9i1eG/EU15riXPRd/z+3rOTxHnEHEOzcQYScbf/bSe8b/0Xoya9WyU49nI/z68PwlmMpGRDKY/Pan0V+opf03u9tfoSX9V7tKd0e95MMr9UN5RJNXkpjZ16Dbdrkf1WOHO0Oa7v/J6FKOsr5uKvtEVdavbvBIHLOuZTIYKAsAwl6mAgGERs56VETM0YnpTiRjvWbePsgipLVIz9M2fc5JRD/D6Jl+bCnmOGE6y4qaKTEWm/B/lDeUN4R/oKcIvhFeFF4Rd4WlhLjwu3BKuD2vDueHkcGQ4MOweloV8QhA8AAFixAAA7Fyc2m/btm3btm3btm3btm3btnb9nT/xW37Bj/ke3+QrfJ5P8VE+wLt5G2/kNbycF/FcnsGTeRyP5H842xd7ZQ/smp2xQ7bD1tkSm2UTbJj1sU7WwupZFStlBSybpbFEFsP+s18s6Ad9pnf0kp7QfbpFV+kCnaZjdJD20HbaRGtpBS2meTSTptB4GkX/UpVv8kYeyQ05J0dkl2yQZTJHJskI6SddpJU0kGpSRgpJDkknSSSWRJDfBPkTv+B7fIVP8QHexmt4Ec/gcTyEe3EHbsZ1uBKX4HychVNxAo7G/7DzT/SOntAtukDHaA9tohU0j6bQKBpA3agNNaIaVI6KUC7KQMkoDkWiP4jxC77CB3gNz+Ah3IHrcAnOwgk4DPtgJ2yB9bAKlsICmA3TYCKMgf/hLxjgAzyDO3AJTsA+2AKrYAFMgzEwCHpAO2gCtaACFIM8kAlSQSKIBZHgL3AI4VN4FR6FW+FSOBUOhV1hU1gVFoVZYVIYFQaFXqFTaPVDTFlMSUxRwHa9F5MTsG1vxKTFpMQkxSTCxMfEAWCxDkwAhkIYiNY/pYpx+HaRtuEQ7k0g5Jy4rxPrym23vnqloHCwsTCtYlE42FiYdmJRONhYmLZjUTjYWJi2YlE42FiYNmNRONhYmPF8f73/vTzQsZEkSRADQTmRBrz+Yvy07ZVzwTgTaqrqVNSzY8eOHTt2bNmyZcuWLXvssccee+yxYcOGDRs27O+umqo6FfVn931TU1Wnop4dO3bs2LFjy5YtW7Zs2WOPPfbYY48NGzZs2LBhf5/VVNWpqD/b77OaqjoV9ezYsWPHjh1btmzZsmXLHnvssccee2zYsGHDhg37+6ymqk5F/dnz+aupqlNRz44dO3bs2LFly5YtW7bssccee+yxx4YNGzZs2LC/z2qq6tQ/63N8js/xOT7H5/gcn+NzfI7P8Tk+x+f4HJ/jc3yOz/k+q6mqU3nFhg0bNmzYsO9zfI7P8Tk+x+dP/qemqk7lFfs+fzVVdSqvnvX5q6mqU3n1rM9fTVWdyis2bNiwYcPmWZ+/muqrZ33+6n+eywHadhgKomfm27Zt27ad9Nu2bdu2bdu2bdt6zspNtafdtY+StFiFBZiGMRiEHmiHJqiLyiiJ/MiK1EiI6AgrfvJN3sgjuSHn5IjsMnXePJkm42SY9JNu0k6amdq7Kq4L4ZmhxnX7B2XoxpWhhmepLZWhgmepLRVuuPeAL2lfclY7q53VzipnlbPKWnPnu6RdstZkm5zVzipnlbPKWnOtXdK+5Kx2VjurnVXOKmcVlGQKVTNU+VBFQ+UO/l9PHipuqMihyD/8xBe8xys8xQPcxjVcxBkcxyHsxQ5sRsWqLM2CzM60TMyYDI8A/MANXMAJHMAObEBKycR//MJXfMBrPMND3MF1XMJZnMBh7MNObEGP1VmWhZmT6ZmUsRmRgl/4gGe4g0s4gX3YYu6lAeiBDmiBBqiN8pKffvzGN3zEGzzHI9zFDVzGOZzEEezHLmzFBqzJ8izK3MzI5IzLyCT+4BNe4B6u4BQOYBvWYBFmYJyp4jugGRSqojQKIzcyIzUSIzYiI7T4SR/phlemir8tRC/Jz0HswXZswrqszJLMz6xMzYSMzrDwwze8wSPcwDkcwS5swDLMwSSMQD90QSs0QE2UR1HkRkYkR1xEBuWPfJIXck+uyCk5JLtkk6ySRTJLJskoGWS2/tJs/ZYQvfDK1DCDDRtaNrD0LLWlCuZtM72XobZUwXxt//AHB/E4xzYAAyAMBMWWNgLGyKwZJyms7668aNGgRkaKtg4tGtTISNHUoUWDGhkp6jq0aFAjI0WuQ4sGNTJSpDq0aFAjI/16s3oiI32NWgOQLEkUzKzpmW/btm3btm3btm3btr0827a+jb6Mid6+jtmIi4qNqs6Xme9V1Y6qOzhqx/bOqJ0zahsctWV7Z9QuOPrXWWc+wuzZazdGcTLonOhk1ykmdOUDrerQ2R+ni5MNBBntZiA5aGUFFM8CA3Id9wMuDkDfC8RnRW/jUqkyebjvIB6TelpPMTN4mLvt0U/uxvLipfPwJiMOLsc0JhcrjYfVFgGsddof4qTycErC75z8homRwsNIDgvN1XYrnuy/cXMPPhS322xFk3iiH8AgJfoqlkireYAX3PdozWEks7GDPMTDPMKjPMbjPMGTPMtzvMDzPMNTPO1xnQxCc0YC7eA6x48mL2pBbLmn5xP+wycwAJIiFa9zJ+dyIJuzLLMyLu7hC4ThJLZjKaZiKLqjJeqiIgqCrgbEk6PRH6BeOIT7QCEIjtwxS4iiGnvjftDF0JWXgwDoZuk6FC8O6GEKCcHVWnnZwmLjxwNDKITGqokPhlQJj12nXQ2pVCR2LdkyeO3X8wtkTdaCjdq40TML5BiOE0dc50mBvEjG9dzAjdzEzdzCrdzG7dzBPdzL/dzH3dzJXTCw5Av5xpdjQjkmdnkVRAou54r/8V9tEMAeu0GvY8rbyDuhvBPLO6nrhDq5c0L9NwyHaiZlQsVx1omfQcCJx4dBbrGMrTsjJiCmrgDLjaGMMH9MhkBVlPC/8P/m/8b/kT/KP9k/0N/en9pvWfesb6zLwTPS7FZSK+Bb75trP63Q0T77TGo+MjfNeXPU7DYDTXt9J0nIZ/yFH/Fk8DtBS1ZnUTzCD7iOs5iMgdBJPZ7BMApPYRiGOCiJwjF3CHAfhhF4DMNIW2n4EA/FfgDDcNzVPaZ7UhIW/ta1FdTGx5/i/ib0D7F+l0558YuiP8vbm/dH5fpBjO9Vw1fifSmvb+X1jcvrc+GfiS8EH2v8kZhC8IGQ951q33FG0SHnHqUaIqWKUA03leWWKgmT5o5qiJnxdbGvCb0qxhWxVQEuKXrRVdN5IedcyGkhp4QEdK8vK9IjJRLjiOo5rEr2y3Wf6jko7gHlJCwcda3CbjF2uZAd0m8POeMtct2sPJuk2Sj2Wrmsl2adk2e1GISFlc5KLnVlWiTt4pCZ5irHbLHniTdLORaoghnSzHHt7zQxp4b0Gi/9ZCknyXei2BOkHyffsU6Foz3/oyPFHSF0uFjDXHmHKDpY3gnREx3REg1RE5VRFsWd3RmorAPE7aVqekrRQ67d5NpVrv3hY4SN9bP7SBvta/d3bbyP+jD0Vh+hSju71rKjxh1c/yfthLR15tXKGTXXKBEGu+5iVkV516o1U71N5VBP9dZQpTVVdR3pa6veJqo3DI3Vh6OR6r6LhsH6G6iPQH2obte6VpN7VblUkWNl1yuhoqIVXPMpJ6SsCyktpJSQuKhoXxdFfuREZt3xLK5oMc2kqOZQRP75NZNCUhVU9gKqLeiKvIrnca1tLqlzShEPtT17mxLZ5JtVmbJIl1GKDHJKJ11aZcocXK1M6vUqQWrnVZLS2aFkruyJ5ZUkllkmVNYE4scT06eslmoKSOVX7vjOf04JGCTSk5WpkEbPTuZDSZRBeVRCddRCS7RBe3RCFwzCUIzCGEzBdCzEEizHKqzBNuzEHuzFSZzBBVzGDdzG23gPH+JTfIGf8Cv+wj944vo8HgnL5h/DcUMEHLQz2qMy8sIPIHWwEZbiahoZ+BjGSJB3eRfkQz4UaulzmzhqNx9O2M3ici6HgQFAxY/iBJe/AcUzKZAAeNotxbENQFAUQNHreS8UKhPYwRwaotVKTGEIleYbRMQCv9Fb5UM4zUGtlRUDK9UD87d4NnHPWMybjtADA7+6qRoWCFeyhxzSUyaIHIB2dgAF2Q34yxCWAHjaBcGxAUFBFACwvDvQANQmUAIdo2gAAMBshvuJEGoyejIG0vly/8WU93rziBDbx/IQc0lFR18gxUwDIYhR+iNLUixAUACXqAfDAAB42nWMA4BbQRRFz52f2nY7SW3btm3btm3btm3bdpvatu3uPvMABnCA0DjoW3aZaUAOsuAHF5CYtHRiAZ+UVMXNBrPLnDMXHDkuJ4AT3RobwAayoW1EG9V6bCyb3KazOewCt8c91D3cE/Ljp0+fALAkIR1TWPSFUsys/0HBcRz/vyihbHgb+RslmU37H0XAMQD41Brg44eP9z/ehm/13CsHr+y+sutKLriS50raK7mupLqS5kpJb0lvA28hb8HLtc0TBGQDKnGTj6BJmgIAmvC7BtAYfBUdVBZVVzE+aLMyq5pyKKf6qY3qqYzqq4QaqrFaqrVaKZvyYQhOSMIQDg/RiUVckpOC1KQjI9koQSlKU46KVKYhTWhJazorl0ort/qqj7bSjcEMYySjmcJUZjCb5axgNevZxHYOc5RjnOQsF7jJHR7ymNfKo5LKq446pKx8FCrOJ5XSSG3TQA1Rc/XWAO3UYHXQaI3RFi5rhJpot0ZpqFpoozZok7LjB7/4w4WDf4IQivBEICKRSEBCEhFPD8lELnKThxxkVztyUoWqVKM6bXjHGXrTnR70pyf9GMBwxjKO8YxhPgtYyFzes5nd7GEvO9mh9uzCyxWucpGnDOUJxTlkUFXt1R7t1z490QtV+dLX/gyjoqVOAAAAAQAB//8AD3jarbwHQFRH9zd8Z+7dXYqKdNRYlqV3WGDpvUgTCyAgUi0giDQFA4q99xqNLdhLTLPFqCnG2Ess0SSaXsQkRkmzsMN3ZvbuZTUk/+d5vlddd+c3c+fUmTlzZnY5EzSQFPKPFFEcz3XnzDlrTsk5c75cABfKJXIcUporkbUyQKUJUFqreXOluUIVoEbwrrJWB6itVQHOtNbakZZoE2tzqKeYWCOi/CPtYPw6MUJRN2+S927dQlFR773XwaGo96LgH5Q6uPemkfemRUVNQ1HT3kNRy5aR96pIodFXj7ioqOboKDQNWkMbRJ/ipkVNg7ZfbZkWtSUqqhANKIz6KgoKUYXwj+Mw8M/JzsiucgrOguPUSImUvJJHzk7wV66QKxS+SIuWYRPyaq321wnY19Pdo2//fr3dXN1lV594oVyyAyfNWbijvH5y+c55czo6dP0plmIn6JvjFOghNwXVSfhsCT/PPTLA10r4WeTQJX4Gfdcl/htSGeBtEq5FszlOwkdK+DkU3NneaKWEP+aadTgJofqQ8Db0yePkLuj+gT5BdTr9Kd4H/Zlxlkx/1kpz6cUjcxXyxTNlJto03Kydjg+1OxDvFbgkhdyQXdWS1Y/JIi0qJptwOL6m9WRUoDfGbXcdt/yLqE7C10r4GcEJqPPcXI4T2oG6JdeXcwb65ko/GxtrK7lcYd0P03eVo9IvMMDfyUmlDFD7BdKPKtVcnL7t8/EJk9MyVo+s+3Y3OYaM5jSFV6WRBw+jS0Nry/+SXS3ZV5U9c5iFGZ+zuXLS0fKnpZmRRZqPvYeHDRlDtTqXhFC6wE9PUUvjHydziMvv+Fm2SvYD5wjasnfAAf4WDmq/fthW6cWr7OVyaysbG7VfBNYoe/C8xUfk9MFDKOTD5s/3VJiT8ybBmZVRda8VFe+vjRo/PNgUBXQr2faN1QGU1fYbGn4gcd6pqREFsaq6O5teuV2lii0MLz2xJovSJHmMZhDHISojlVAD/vtv1DF17UCqKRVe3Ozj4uKT12dD88b/k53qEZVC/tiaKSSvvm9Mn5buybn/xp27Sj5QGDI4bwhojGmGWdBC9Od25j9gQVkZWNAE5hNOqQQDChbWVlhAorVAGLxS+zs2/wrF7t9P3iExF5adLC55f+kl2dW3yFt3W8mbbyHFmE927rihtwztD+hYi5YppZZhnlIJdEyZl0heOpf/XpuKp2mn4UPUI196TOZroRfWmnFrqxuV3A5U1wV+Bo3pEv+N226AL5Xwhx3EAB8p4ee4o5240S09jjH3Tlc4+kuPkxAqlYS3oeGPk7vg5w803IDubAk/z01GdaJ2RoB2jA21M5e/rh2Ji7SbqWYKH2s/5EQP3wTe5tS1h/ekLhaoCdQoA5TUjHyfj8mpN46AW039dHd5T3KuZ/CQ0oja14uLXm+oWO/mjMkxXLGDfGH1Nhr+E3B/KGnO4QmBmWH9a2+TD+/UDUqKH3H36Ifkx7XUtow2k0olah/mUAkfKeHnUKpeKlmtZHPp71zki+cjP3JJWw+S7cC5T7xwo3a23ntqmT6dRH3eYvpkPSmWSvhDrllPAR0BCjy8Q8/oCLlM1wXZ1Y6Ojlc5Dq9iz7jqniFbKbcdrwO+htpSxB+R7Qz/ifZFpRPxsx3JepvhTAP8DGfK2i8G/IAB/ltHEsNPAd6kmC3h5zv6MbwD8BiqJRE/11HA+i8Eup8a9PNHRzvDG0kIOkV1IeJtHU/YSIrr+FlwApnNmQcEUDtTmweA/FYC1twlfyDfspycUuRFHln99vXwvPLKygrB5umv3/wm2mQJe5rZhAdfCdQgJYJ/CmoZQaHwGBeHxqOJ2ms4nKwl2cADKSP7u5kmLB6G9mkb29/Csz4jWaJVljDO/UV/OKkfFZSGhLehA9IcEAq0ZYw2Hf1sdbr61F0/5kNZbxpRzwp9b/QpCW9DYfre5PehNy/Wm6WNja2NLZPGkjqZfyAdBXIFTLUQUHhhiCesbGFNAhmvt5k5W1mZm1taOZvdR5+Qi7wMI2RqauvtZvYX6Xhq5uZtZ2KCsIwH98zweSk7a8jgzOz1PngfOOoJ3xW7s5wc3dxzdiz00sbgE17zd+Q4OfXtn7l3pVobA/wyvpgcITo58Fa9HJRfCW/Dq/RyyFaAHH2ZHIjJAcuHExgUik40EgLIhnKegW46JDtbWmAsN0JBZC/J8B7s3kcp8HIFsNojZN4wVy8n5/x9Yfg8sLovbXl2QGx4cMkrau0wTrTXCuaZ4TrPRCaoTsLXSvgZ9FeX+FkUKNkXOJbwNnQXJMFsHrgAc5MZ199gdhIXFF5cT/QrIW99ipw6fBiFnvoIhRw+TD76qO7VwsJX62r3Fxbul1bdA2T3b21kzwFkVn1n8yt3qmvubNl8uwZ4YLTY6I4RZ4SXUJ2Ez5bw88iSRiqAvy+7IO8JWnbh1JQ7UKvCma7TOiZB6RpbBSiaLX5IZNPWRsbYhsaIcrxREApXlYW65zG+Wak02GMEcK99jI2zaoB5HwVKrnsV3hTavzKtcjGeP3p15JC9TJpczM8fsypy8D6dTJfx9xoqUKX5ZSrdBDMz7QsaSYa1kgxnUSSq6wI/g7ku8d9QhAE+UsLPoYxO3GilhD/m1neJdyBrA/yWhLc/g1+TcNJ1e4xRRpf9/KXHSQj1GwlvQw8fJ3ch1x/oIdhSYLYEXLSl5n+zpqWlkv8fLCpbiGwu/w9mlY1GGnKWo6MERDkM492CjnilfpR0hkRIihXVvPI6ef/1N1DUJ8IybaoYwtttnv7OmNFvT91+CKV/+z1KPySGTcL50hs7tt0o5XRRnfA10OjG2RhG5SqluTmN61hYNxfH77k/pfnhPvLb7fzJoaEv5n8uuzr925Wrvm4mvfCd6Jo11ZF01mB9MStkiLMDxCxstM9io92Kc31+tEN0a6l0lvNKOiEbDnq1n+bZcT8iJOMm+bax8QGSjXfo5aMf/7Vqz2engL0VKeTBOl9stdA9tLJzIjAVI1gbtgPqrZe1J906IiVS6cQNMJS3wdgIhZP95Ntfb+c3hIVNplI3fEY+uxEkCNp3sJX2Z95UPTo5dWygOAPaMNmHi7LPkGZAoCnhbWgRm8szO+4Jd0EnfkwjTs7KfljPgDOd0mFVUgN/tspOldja9uPBNgLe/Rb5a5WAXOWDZgwdOjkuvGbotuOfLNe2bP9zASafGs2vSasMjqmMmJvf8mLsPEJsKm9tShnt550VrI73s3T1OtUy91xV9dmZucUeg/w0SZ5mSuuBZcvy556tBH4ZX0yOXFGO+aiO4iSE8ivhbaiZyZEC/Hdju3LOMoC5pXmK8D4JJpeEG1rtU3fhBvWMFNBCN6aFkeLT83QrWsdPskx42lqnBRaZsLiUBSlU1l+OkJ/WId+0hSPzF6Yhv/XkJ+v5v2/lT7cPHT43LW3ucH5/e/DW3+cDDdYX47xAnAttUV0X+Bl0q0v8N2RjgC+V8IdclQE+W8LPcz8Z4CMl/Bzy6MSNVkr4Y67GAL8l4Y/+AX/yD3g794sBfl3Cn+rpkhCqUwlvQ2cfJ3ch7x/oLI2MpbxKD5hjkNJSDI4gNkI4VPsnGnYfEin9+vdxc/0BDSEYogffeVvLGyaXt8zDl594cc9kTMaLmnlimKGQcBaj6ygavQAUXRhFw3js2QJS8vrsDo/eJ1Uo7VVrlbnAC4KFk+0hFH7Q1smSh2JPR6tX0SAygWz7aICNQiGXWalOAZ+qvI/LbKG/so/z8B1WsrGysmEliHmeNK9yd3dxWTFXK2cyUJ6Ydqp03oMHo7ou8DO8uQG+VMIfot16malsEt7GYyYzjSQOgsz9ae4FKW075dQoERVUlBREVWNb0gsVb/UK7SU3Uih6hXntQLmkH+5B1lx2VVuZdu9mau3v9gl+gm89Saz2NzMz6+Ffk/hE69uuRUGR2S5WdrZWLjmR5AyVi9FlfE4UvXmiZPVdwE9PsIH5s2Y3xznaW2h0u3O/Hj16dO/r+Dsapf0a+/AtxCchfoCj04D4eHSlPV97RW/7XUw/9eLouonqJHyphD/kJhjgIyX8HHKXcMN+ziIbyYeATwlvQ+cfJ3fR/g90xqCf2RJ+nrvH5AVrCF+BvL1A/wGIRfwquYrufRH1LwBgYa3FeUGx1tZubqNHkV7CeO1rofF2dt7epaXok8N85qB0OzuMtUfajw4d8sILGCG6F2H9Mj6aRflXozqKkxBKT8Lb0HQW+cbB/OooVHDOXDCd8+hMD3meCBygX/wUjhGwEtD9B2Rae2ANnQsDevCwPaFrADoybndRfP3aYUX1Gpf0oJCswO7kl75zTk/J3TM3nXxn0ie3GSeWh3UPjInqpcnw8ki1SVk9YeTUVBcjE3NHB5lPjEoV4uBZPG+ge+7y0Vqzl/3Tva4FFYZONunZzYQ3cgj1cg/tB9wzLuUq4H6GKFUQx/0Nl6PfJnWifST04RWGkhAqKUVFDSjBcn/v42z933um9nTtpChrlfBz3CIDTl6V8N+5Wwa4udT7eVigeIrKn4LWo7g0LrtT72r1s1oXhyRTv7XSxla3FGlkPbDKXjc+e2BLcTlmixRSAkw7UMjRmZrXSoYufrP4pKuhXWozB/l27x65tbjyxNLBWp7vN2BiWkBWhDmysZ11ZX7lwegBvcx7udfN+2lfSqmmIDlxXBiSo8+wRe+KQWmVL9jYpKypLJiX6ZLnHau3nL0y3NRUrUlYfH1ZxvDQmOh+oe7Wo1/KiAjqM6CPrWtQP/SXS4JnfBxYFXUP9IxOGhjuzfQCGmB6XCSOu6scp8flKgk/g6fCO+amdfwivA3jxYZz0unLWcUWdzXVkw3dp8mdn9un4bYRU9Ote5BPkYexddrUgqZLjQ2X7gwq12jGpadVBAVXWEaM8HwLJuYrHvlRkPp/9yjpmP0w66Xi4jVZw1aPGb02A/iZRkIoXeBnqeg1dXTcAJ7/PD/m/xE/xuT6v/Gj3auo+2eGaB5tCHjUWKFClylmuVrmILay53K1sh48rtv9x+zZf+wu2TUjoydpNXYKTHQfPF6jGT/YfWCQkxGy7ZkxY7fNcsTv24/45f6FC7L8PeJ9e2etH12yPruPeqCnOmfhKH9Kk+RTms9niv+NumGmGP2myxT3nlrU+H/xkxEWp0sU59NE8aZuIQP/nb3eFvI4liqm3sN0w7xnhThP5DPvGQLes1CylqQ1WPQg7BYntuetZTftckPTpaaCqYMsTZAH+dTMKn0qSq0I0lSkpZcHasotZyN09F16TpTvgX2eeL3lOSLiYcba0WNWD8taU1z8Uhblh4RQusDPatF70qj3MD7rQZ8vcM4SP10Nc4PxjCfvfTR7VtvWyhPLhujG7aCArPCeqGefOWfJNPSZ3KJPWdqg8S9Y2yxC+I1XkbCCjcjMsJgYGJHqvIWp+K0gr6hEGH56TdWzOXKtbo6824mqGMpWPfD6rvAzKL1L/DduSScua5Xwc9w2HU5CqNwS3oaiHyd30c8fKNqgf3OJy/MldARYcRzfR27H2UHBmg47OAEUNyi2CqYua2t8/x65cepUwbbSxIl9Ai3V/eKChfzv2+fyk7/Pqt+Ubmv0jcwkOjSV2oIkCEvYeAqA/uhIdmR7nwDqFSp7g72POoDuAeT8855SvejKjF4I9wgtHlg709YqtXHE1EuNUy435U9Lt+qOnBf+vi6tPCioHNxGo6kgCYlN6QP7hzqVTbjkmREwqe3t42RaZIHHsad7154ZhfenLh1Vsmpo5qrC4qWDQAOMO6aZV0TNF3KcHpe1Svg57gC8gzdynNDEPJ1DbEIK1DDmrWlmkbGM9sEM5OQWl7MEUgPkWnlBZIkGz9VOhonwYEFI6ujjM7XBeGXpJE0pJ85/TcyDt4kWy6YW69hE6SiWSvhDsorFGdVA9x25A+C7mMXaHohcoX1CPsfr8qfTkIeQ/7SFg35aOA7PZ364S+znJY7iRwGvlptL+PkOS4Z/RXuSqyT8bEckxSkFnCzhsPqx1jMA3W3Q+jdd647fAdfIWiX8XEcG6yUTer9k0MsfDylaTULQCUkmJyoTy2r/xnx3Iq0V8lmthHOo4xLJZzJ34zhL5jcqVQB1q2bkOeqdGeEuqeGgg7Jpm5N/jo4CKrS9qLk3n9Wc8DLLhzDNqcWEN1WhOapEI+Chw2QzOZMlu9r+BdpPemvnodOFZB3lmz3LYsEDYl6aQ3WiTaFPCW9DIcCxaCWDMwlwFP2ZBK3j50CdE3eYPVOOZuLBer0zGgyXaNSAVt5hNA6LWnmgpyG/KEzg3Jg8YngjxTmGfmr4aRqy6War8puXMjk51N7OOejlzLGvjCTXx6YEDfMkXxSlBWT6CvmfRnhGR6SGV8f4xMfm7n5R2wO/XZDnmx2qHYzfH1rkMzJWm0e1wjhgNn5HjDCWcaKnU84kvA1P13MsNAoV0oiy7XpE9RHck+mQKiDXpSEl5P84LvL5EcX6Y559QjenNXaiKoqK43ws1xV+ltup55ZyJeEwLqWVZS1wK2aypZWu64ikbtefs2f/uUsXJQyuCAysGDy4PDCwXIoJlhPt/n1Eu/znnJeLYNHNXl9S9HIOpc/osHF7Urd+/NmJmkvoeZgOeECvAk+LWNbT7/mcZ6BhzlPi0RlB0RlBE8YqMNpobTW+rKaPdSzlt9HCorpsYl/bGB3blmSOSbeApaje2DhwS3mgTVK3Ho150x3cpjMZBnbrNi1vtqPHDEmSYXEkw8TY8xTabazwAJkGdfKuEnmnmt7IdYVDTNEl/pthe1mrhJ/j3pTWPrCMhLeh9MfJXfTzB0qHd4FpDXBRa4H/k95oqvi/090smiX+7xXIm7EkMU+lUawH//PgQrkEyQOlMd7lVobtZCTnFH3TIPSR3LQxwts7fHKXIdDMvU1Rvj5hjTov3kKdGDcaREWSRw909Fc7Jj0fGyU4BPg5JD3j5ei0GC7po32QisWPlpDqNgjzVbrg3/K5sTUNOfeQovzpLPK/ZxDrk3w5d8wgzGehP572/O6D0mW+cVn0ve26eBbwhXp+kNKcRSpM01Kkgp7jR1hIrptACJvXGdaaIWftPYOIluTjTAhiDeLaY+3TDCNa3WzI9xXGszs7VA+6qMvcSZqo7bv1X55vG2hllWofVwlL3MnScTIZ+V1hFFqWoJ0lriR9mUxXxRXjLTY+6kgI7VnC2zra2Pw7CMaHD8jqLu6zHKnrgGjP5qVljAMQ1NZWd2KAw+ZemWWJbG0q87JKEpPeb9ky6eqSWR80WJE/zYuGJo+KTj/bsmna1zZpK0t9Bg2K9vMIMnNRbp5S8XJG0pwR3sFJEf5uIT1dlKsbKrfnAXeMC8b1DdESwA/FSQjlTsLbUD/pxPg3yKe7Uz0xJhlbCmv6JsUCdB8l3S4C9s3nTv1u3bL7S2vHrNzTcHPRyVWjJs2smpgemO5RWVTUICRNf7tkxFuzarf362lyacP0I0V/jsvKGf9zwHD/YZUT8p5+Q2Pjjgf4nKyUs9XFxiwvoLGVUy8NoHEyLFp478feGvOInu5+JZ673ly/ngZj32svBaiNha/Num1bh1O/RyaEzedWJIT2BtJ9qpOOm8Kiv48pFYWjhD8kp5EJ9Y6ONqEJYh4bZitd/lxKnyvpKMeobn8B8qjIjyrWIE/yHe+eMqIHrJD4tHY8rJBlyXju05bWishUoM56Y2vMbd0agzgJNZfQ800gKhsp7UDZno5PKWsvMqC21k8ycpY3ATd11xSFReQHIndnT4+pKxJdLGz6u+RlFbjYWdCRqS1PG+unHpOGV7d/4eb8U7JLWIC9m0rl1kulPd/Jg4ryIK4Vu7iu8DOotEv8N25nJy5rlfBz3DFpdQc9SngbKga9/72fP1AuvCO61guvCvld5MzRO2QUijxm39vYxMSkl/1RFEpKhHztsfET3D083CeMx3EsDtf1wLT6g06roxhKQmi/DJX2azp68v1Az+k5eoYfn00iozJyCIUW9eprZW5h3b/PGGQ1qld/a0tzyz69i1AkOUAuN1k4mAvwx8LBAkQnJRNm5Iwqzp5ZjTaSkuoZOSUl2TNq0ManLei16I1DLeHP0E1RhO36GTfMT1rF3O5drhNXSfhZtLRL/AwezInSUqkkvA2HMWndQDcvgrR99LlyUUaWKe+88OmGSsl+FDfax9nE1NTUya8MRZCdIPeJJl9nU1MTEyefJhyBB7w+PMPOztYuc/jr2tvaj65mZdrCn8ysq5QDRolJcl/n8deZdUmW8IaOvqXG1obm6J81Mpv9G+Idw/KD5UYkj9rbRmFkbNzH4UOwt6P9uE1VYaWk7hvjnj0igsKEIu2xykpHJyenSmr+frmzBpoDbUaF0X6go/0LJ6EqiooenclJuKxVws9xu7mu2p/lVul1S2VguHSHpIv2f6AEg37MJW7Ol1JNNIB++oImTFnWPICly62V1g0YFjJ+uvYR7nMI7zdqO60tMWqjvbD2rPdHIve+HMNJCO2H4VIumMM0Ryu8w86eerFdm63++BmyDIjm9tiKOgP5f/Hmn83Nf775BbkAn3NrNZraXNlV8guqvzh9xsVJ5AJ/hQxGwYWhYSVhuvzTXbCrA+fEcgw0ZGOhg8ILdyYXqB/JaHSnoZZ1NFy/6aWTt3f4eU1eMvPBjk33Z9VenJ1QmfFCT6+s4HhyyeZyQbl9y7q+LyAjcmrwhNCACVlDKzWaSllTppvvNHLwo4Pk9+UIzX24efUvC5wjHcYWRgZtWFgW7tniNtzcYs6Tc4OX5A9fnj10yaEVGRwPJ64a4a78Zc5HjOACaBzmrGQHROZsyaVeB/eyAYDzYDafspNgOgisId/A+AaUNweELck2uGLx+Nm6I+JoV588OB1uHtXYMHNMIzsgjlMnJ7Kz4enlyzwcw+LCg539G5z7a4JjNH3PHjTy1NDz4l495WiBLTssDvI0PnzYyCsYjox9HYzJInPxvFjjpTiI3paZ2dKT5V7mZsgPZci629BDZZvu1Apg3bFgXTdqBWWAmL/UC8OSmBj4BhGkBKa1oRAB00sgfdlYMr0+NixDn8FUdYc/DlL2Mjyu3qmfBv7022saKqYuk0JM9+6RW/QWE5jdZVhbzMu66xOYlrI9aCNeZ2rnThObHnYc4voBp3ViFgdieKS2VtK/LFdJ/6oRyn7wAIWRN74kN5EruUmukfdRJHn/KTkAeZyjOEHr+caEN8hV5AVv+Bq7fwl9npLd5Tzp2PELdHaml+idngmf5La2QMXWhlpSSTNgSpq9zR+WI3TbsNLIuOmHVc0XZ1uRH3uMykwucMdyNI9MVfDJIQKPvu3bG9lu20LS0+5/0LLp28aiA40eecXBFclvfPB+WkFvjPq8EBS0dhPwEQJ3Y0wgMtLQkaCkl1uUCmlDoAtVHMAKKo0aXE0Db+BRDiy154XZdkAhpCUSB4zRujRyUWHstm5MdNmQPrXpZ6uPk9vDnK2vhs7A+HjoGmuXYcjheN2ZoTV9M8ZFj1nnZqzgL290cHa0b+llM36MvY/Vw5jYg3uHFLWoHJwcNxYP23s4PvY3G19V2XjbXpx4K0zxT7fC/raXfvMY+XPJEmRy7BgyXbKY/HE8rzk2tjlvxLSYmGlWB1Fm20O4pHqY7HnYRvYe1DZ8t3XbDw2Tv9+29bsGap2RQPAX3b0F9s0Hmbkj/oVcNiF7URJNwgin2pDdj7RlJdhxPXDVn82BEVhiQtkZZsJqBP7ShHvGjfQNK42NLw0it2f/vH7TzzOjd677Gk+6jX6NKR8bFlvoH1SatPzmxOqPpg9rObvoC9OnlEIJ3NOk92P8WRRneBdECldFmgplBBZJivfmBbyy5elyjNR8bE1CclVUbNPwBQuSKiMDi6KjK2IQ+Qwvblu77ofml5sqVqeuIB1WEz6aHjTMS50XHpEf8K06Jywky9c7I6T5w8qqE3VTdtmZ9shfMXLqR9XUHqOBn+7sxrcZvd2BIB3G0r8acxWyHo0noOajR8nn8m6kGhk/5G+1e/5J/kLGf+KZ2vndmI5Brg00h9WFXOBYjpbg/Dzb0TBRYN+57teFAnLjo8dFptTGxE5Mi220J/cT+Tnaeicjl42Fo/dOTVj42Kr6o+aQHN/YhvT0xrgATx++RzuZG5gwcOaB8jV3Z+v8SLgB+rTn1DrK1JGeu0+jlhRpkKXRnbHifdXXdxZnbPpi/spvFvYg1y3rs4vnxpnYV68YMutyw6JHO5Pr4mLqkjX5ic4xE61SdyO7i8eQy5WK2pON6SPqbqyMzvdt/GzR2nuz2xInp6Y0JLolF2qSJidxutsyQp7O69RsOTVHb+AKrZdgrl0hXDBp7+CeenEczyS4xXzOm4tkY4HtvDQB0g7M0AWeHxqWz5Xx+p2ErMxcPqJ+1Zx7a1b/NHdNXc7y4auIdmdaTVRMbXJybUxkXWpUSXBQSXR0SVDQKKvKEw0jN5aZGfc68mLtwdLSg7UvHullbFa2cWTDicpvNCVRMaNDQ0bHRhUH4Q3+eaFhuX5+uWGhef5M9/dA9/ck3bOVjFrdMLtPl3k6qGluPwI/w2rTym8XmCEvi0k5xXPjQefLh876uH7Rk+3VV3cWZ278YqqmIMElti4laWJcbK1N3UeNg/Mn3lwZla9uAo3/NBen7SZ3Lx4nN6+Mx3+4JxUGDWxISpycAkag/pwHWr0MWv3PcnVrjpFp07XHjpHmZu3x3EmhoZNyc+tDQ+thbsl6qJ9bHpI9B7XV3+599bvq6u9e3fttNbXyG2DlLeJt9gDd3EKv672B5rHpBSWiwL/4S3R+eer4F0RH06H9PuBLjgQLDsoFwOcZVpa103I01N+D/uRIfoeWa6D+dVZWWNHyCCh/zNobaWl5MbTfxOqNY2g5B+qvsnqTp7r296D9PSibsvbBZCI6zn3NKVBRx8qnZoCM7fgFfYDioUX5u5y+LLhzTlBm2eiOd/EPFOd2Av4950wR7qiuht8i9nkTnnDW9clqrrNndpJW/K7cE/qOI7TvIihPZuX4flR7fcV6dyjYQ8DGbmGqzOmyFMAO7a1h4y5GP+y6Mz2Mx++W7m2M8XIZ2X9AnotXTOPe0hczVL6+2dm+vqqMF0lr34xXZu+vUnvIUU+5h1/Va7NahvX7dnTFZ5oyVxc7GzsXtzLNp+VjOUS54Xmg7kpnPFiSxeiLXbOmSYMAllCzsqUnmXLKRw9cREn5ZGf7UFKlexpjvTxrhUl5sY17SOs3Y8s/1ZS5MRquZZrPKkZ/229Yy6zXqvz8EGlDo6v2z34loy9o4RNJKwlKvVaSWTmR2WxnRyLUL2Ray6f1UJ4MZao1Wu6rq8dy1JcT63melfux8ie6eta//vlkWob+oYxi0C/8j/gO2CmbO8hxFMFV/I98oYjMhGde4iyFlcIqeGZiGyeWV7DyJLZL38r9IMzj34Ny/Ze0vJobKqwRMqDc8AUtb0DXhGWY+uVkVp7PxQvbhCIov6ir56yEZcIKKDfSMvQfDPSaodzE+qtHtcJbfDCUp7D6x3iR4MP8fEGOrv1uYaXMDTie2NHGrRGRFQyZ1HGeIVtRkzBPGA5IfceX3FrG5V3g8idAGjq+YMgGPE5YxpcBMpkhlNPPgdNHgLyob8PtFZbJXAFppAij9RFQ7w5IE/S8hPKL5cDvRUCmQJuVgLzMfQ8S/gIcL/yO02VvZcNl33EeXDCXLOZwmMMxf3smvrCk/q9mbm/JMju8Qn/8D+15CKFZTksfO8eu/6ohMSo8XS6DI8ZDk+v35ftmh+c87dHN8WmYv6npl+TD3EElZXtMwyMDC6OGDurV6+7g/n59B8Z6xDj4uiObqmO1ufNCNBq5YuDWwvK9JQWbi+JfLPWMIl/07ptXteDT9J5mpGN0eL8BuM7IMyc0KMPToZsZnhlgpQ61Vw+0j3DzLQrAdM7d3fELpvdDeRZD8EqetwfBQC4q1iUbFGuzcFBJyaD0khJ0i3/SLifW+Smp+fmpKfnsabIcdxMmiU9DusPw6bdtINvYIj5NltOnhRX0SeiBPZ0OtxB6wbynpDE4Ygto16FUDxjShj2jOZ6ZEbF5vkPVPlkannyFZ342Y9ntKQ1jg1McZg8aNWpQenExOmfXvGK4o8eYJP9UN7eh4cuO5xcemDptT7h9fN5AO6KSxMAwlhsEd6Fa5IOaUzIdsKSU1kV2DcyScQAIAPh3z6zwuBG+w/x8MzU8GoBn3Zq59A7wEZIMfIDgwAteBXxkOQEf6rRn+FDF5ifaoTsSHwi02Yo/gDmlJ+jS38JCo5RjiB8sLCAowrthUUW2A0s13mOGktbmmbhgBxqDkhteJq+RA2tmkr/I1WPX0EnoJRZ6GSH2EmhhEeCPMazxFnQRVcQOG+2lGTsQ2aTWxcyaSlpPIG9kNH0NSkVDXm4gh8i67d+Q8I/pLH8IetkEvSh0+X0VhJaH0N3Tp0mrIu67J7O+o23GQJt0sQ1kUlWwlo45fRq1ktbvZE3fPTpG2yyC+XrEf7ta8CMqD89K9HUrtrcvdvNNnHW4cka2k786P1/t75Q9479YLYBD3v+/Wy3GzMh2DPDLz/cLcMyeUXloVqKfT4NsSnHirEP/6WpBoyySoTgpO80lcTlUbgcWyrC9Eg1mmEOBFuRyg+sUcEah1ieH/enOTpBT49sIum1gD8w/f4Dh9ANZ92T6lN/R2LufopzfpnmVbKyKrhtkYtRn46T5742uPDW9eHFf00seXpHJAzJ2te96gzw8MrLgHWR5cOiaJtd03w0nlg2rCNBUDEotD1KXkYypbajg61uoCHELpt8lp49MudUyQpUSnDJy6terV37dnKAZox3pEzRk54wVv+4bWXKMPNy7n/x2ON/OwfyKnVdf/HLMjILCSYFxDekZs2i2ejesYB+wFS6OrXCxUB7ByvGsfAjKm1g5gZXHQDmdlRNZeRGskLr2A/X1vD8rJ9EyvLwVJ+UtWIFgZuY+5zDLsveGuawPjR+VcNSnsoTtMnupeSW81AoVeyGoxG+Gk1vh34Zfcr7gc9HpAnxCrvDfRaeLPgCFk+HIxYfcQhPJQjTxG6T6ln2C17fkzjdkIR6OVEBxbsdd2RrhAefGhTxzHtkTvMxZA+lIw1NJW+rktgqDsz3Jlrxp84Tk8NkL5ittfXz6OK1YsDIoekLzlAlxISuXvOTYxwchH9sBS5fMjkqdMGXS+7W170+q/6Cm5gMrn/4+M5fM9QupQSY10UErlqxwfcHbu5/7miVrAiNrZs+uCfJZuGSueoDPsYlnGqecrqs7PaXxzEQOcS90DOA5uR272YCUiOfIANKOvpLbPTaSP4L6+2QANlG8qb/5gE3Id4o3/6w0XgEy3yB30ddsxVCwnKCStriBupHf2WuTNll+T5uG3+KepSMDOqidDEAC+uor+aPHRmx2gKjGD99hdKyVAbyfNhffefCAQ1D+ReA6awSuneusMTKoMeIe6Wu2IwvekV9B1yJk/+z6jL7PXpGVtSI7Z3lW1nJkof+UAyhHfQ1iKT++ENNYimOxFIerBI4hOZ2IkQ7JFZHtaDfvKLgCMgKQtZQDfgx2ZbrhLMHfth+5kA1IhXbV83VKfns28jgiVkLtOX4M+onVslW4tT9S9hNrgRLU8pvpTh0Vs/xsMTrAUXw74B0ML2R4IfpEwn9leBHDi9ApMc87kX+f+5pF/deemrGal56a6WpQO/cNILSmJ3A0kV+JjnfyOzEAWTbyK3Gk9n3oidbyPzMKpYxCKfZmFOqhn6fiXuUqUEAswuBRPN1tyQzX8KykUaOS4GVZkpRUQl/wNLRVjEDxdB/DcXTXgvex3stl2ax31pfgjmk9w8EqP1CcO4d5mQI7M/yOroY/qeMH27B9DuOH1VjonsG2mOcrsa4XN+A0h1vGuwpRnIzjHBF1V3SPTEDLUSSZhBYsQ7fQLeJCXFieAFr21rXUsJYpaAE0ikDLyQSpIdCAHgUttHNC1YzfanSDyZEC+K8Mr2F4DcWh3x0Qsb8irNKtqMgcWSPzHfxTbQo+iG7+hT4iX5IfepAfyde07UVoe0bXFkFT2lw40y7Dh7TJ/FN0k4Sh/qhXD9QbKUkIjbZOQfS/B6J/Xv9dIASvU/z37X347/Gpp0+Jsr2d9nsYdgVHhAxqL0eaXjXXfY8dB5FmNJ2gGWTqUDT/AZpP6h+Qemh/HHYNb+Kr0kh9s90U0xtSiNsL+4ePhCLWE0LOCIGubBESupN9ZN9RlMH+Qxlvk1fRsHg0jLz6NhSHHSN7UeYx8ioB0/PccdhzvCmsYBFmHx0F5NTpRby88zOljJ4MHD16YMLo0QmJY8YkJkL4daGtTTsQjUqKHzUqPmkU74QYnJg4hurkbdjBHIAdjCmLX/WyWqsCqG7eRs0ETSUzCJnOP8Wr7yGug7vX0aHd9vAh1dM6VCvc4IPZKRRLG4s5W2e1DV3YxdsathuFtGWF8U2D3UOcAmJQq5C+LD+pOcU7wNE/DqPV848VBCU6Og8dDh/Co10dBo0Aze2AXdErMjcM+ySOY7uii4CcYcgkETmFmoQ9wnBA6uncA8hh7iuw27eANACyFJDjsE96ky8DZLLYZi/3OVjkESAvishx2Ce9KXMFpFFE3oZ90gFZd0CaAFkCyDosB0kvAjIFkJUg+03UVyjke1D/R8xH+BJtHT8f9UXoATEDELy8F3+ZoxbklHRmv9zu++OPgMfzXvwW2WvMB5EaqXgVH4/UfyD1j+91f4/3wtO1zeggSYGWW/Ai/qbu++3IUuHs6Kix5dW8xpYuoZbotuX9IoRIR9F9y/cs7hd0dBTct8CL0Aubd02ZsmczeoF8t3nPlCm7NpPvdD79vbBP+IX25Wgpo33JoC9HW5kMspw4zIJ8MZGeFkxCSoufzNGASeQ9FDWRfGn+PSr56PzGjefPoBKy6TT9dIps4gSuCOUKP8t+gP4GcN5ckC629dd9MQTCO7q8G6zuGmcVzcvCUmRFIwCkv+mAdzRc25Kbu+Vaw2Td++T6k7V1H9RPOllXd/JOxogFSOGXoe5tpxpLjuT08/Tsm4tyR2y59uDalhHi27q6D+5/UKd7ZPvBg9jOdVCNi4PVZdTTzd3NgWp/V0erfJesFSIiNfttIf3xmkpij92IUOtiUn2oGqgPVTHNXkZgFpGy9Gs/jC0mHKsZtXt8t+vdxkQFFwbDv6iCbtdMx20fVXNsAlqzmdy7Xl9/Hdls3oxs6Cdyb3PleyuHDl35XqX4ju/WHq3KXl0QPDCoICSYvuWvzZrwjrbmucdYV79ID4rvHOaG8keF99ktUCuQiTeHDQWst/DGK+k2BLTNNzTN3Dh3zqZZjVq/FnS2hT+KAsh5bEdeRqO1d5E/uYD2VFaSLDoL1PJWfIjsNs07/j1ycH42AYpulbQUFrYUF79SWPhKsXu8q2uCm1sC/M9bFbYUsbqSopbCc8g13o3WxtNaoBGEF/ODZPc5FefXSUP8XhFNtjuL3yoC9lViyjsATtwYUVScNTetYH1OeoF7cnxCVo9bthWbihPmVkR9adR/ukPIcN8eMckvxA9Jx4uDqoblVagVRt1f6C34BQW6KAeWaZTx5cnacxNDk7e6xHtkG/cwFYz9vb18gacY4GkP8NSl3M+HqOjPOR+OG/fhnDkny8tPzoke7uGeHR2d7eGRjReP/2D6jJMVFSdnTP9g/JGo6oEDq6KjqpIGVkcBjUR8F/kpQsQMAcyvhvv4wbcqvBPifXwSEvBd3q79Ll8R5+0VH+ftE8shLh0wmdyIWZgaWLxbZQ2fGVfI6eZF4161GbWLb6LY0NA04Thx5+1mRqaumqN9gr6OTRrE0V44TogTvz0JT0obLpiyhhzI2vpNbe03W5FWuKuNevHG3DnXGp94cWz/dk3wgrPBCG6weAdeI96ygo+O4im1hnUlXbJnWrKV9cO6fJDunbehSQ32nWEA5dAAR0w9Wm2pNcsdnjbcKcadPB44LjiiciDKG/Hte29fHfDEMjU9ZYhroheSJ47RRFYmoLh0VeVJM7sYf16wDfK93yvaTyb0Cfcg14atK/NKHBIV7hLsZlbRd0R9TMIoyDOtGLXj3Te2eCanxIa5h7uZl/fJrY6KHxMqCMrCCUHlW7LxBVMLjZcyPNB8jKm5xtshOsCC6mkC34SD5UdYNEH1pAjQ4OBWk5tX5EfaP8STp55qoq2K+CY+Sf4B9wKLT/QpLWuVaNAemJ2z1aBRboG9B4eGJ31xavO+U5Zhk8cOQSv5pu2I6+flaucd4O05ZemialXSkHxNkNFh6LeQr+FLoV9PUdtqUdvi+Zo4RlR/vzeGvhy9vxzdR0MjotKHxJWXh6bEh4alo69Kdowp25xTmd1QO/oNviZmUpq9m4+zi3q2n7OTu6syrSY6ekJiTLbCqFtBSnJ1JIdIFcfxkbpoV4nUUBa4y+2c7KrOH+I6/sJ/8DSGtX02inUWmWPDdOP2Awe3bTvw1vboyMjo6KhI488uXLh95/yFz3ZNm9o8c9bUqfRCOfOo23yYoabR7fPGR3byYaDpVYsOT6Gt6IHIfqDYW/d9yMDnNC2eaA5HDgEe0Z6eQR/snLF0m3JcZQiKWIKs/Aa6+Ph7e9TNmj/WKWfm2AiTbTRmBRk+gR49QIJ/0XEEflbFaOHQ5SPwZSHOwycyJjw72zta7e4Zjz5AWYuG5cwYODyhKP+osbo43rKvn4tr0IogVydPpwEJZSHRlVGxuabG3QoGVcwHDaaCPA9AanZWqQlAanpWCYEWnFXy1qkotqO4+H2F6WtVm7Gn9ubWqqqtKIpcYKeUZR1/4lvwpL2Yf5X4ZtMmPaNUqA02euuHL0w/jaNc/BMSQ2xDrPZ7oydkq62iR35oyvjwwUtNIsdFO7jGBQcnWvbUoJe2X1D6xTQMypiRLFr5Nmion+5uJRvmhqulOAMZ2p0NarRBM7k0Km9zUdbsIcYXTIPtE1KNezUkxo8LfX2FJjFeYx9kj4VEY+XwlmlLTpbEVcfZ9582ISwxpi51xo6XU4I0Kapge3UGlTUYtLRY5xtq8TpPFUoi03AGOYhXGL+yU1vO8YzPL4HP/sCnhmnlX04fn3FRS0N3XV64NsszxT0oJX1eVsaCwWmBrine2WsLNFFxav+4aI1HWKinV0iocWRZtE9mqLFJ97KIyNEhoaMjIsq6mxiFZvpGl0UuD/X2CQvz8Q5FozTuboEB7m5BTI+/gx6TIDbyNPQ1cGKDlJcmUJwh/ehnPU/TM0GF502DHLyj7I16vxgfXx6atjA/sHF8XN7GAkeNPeITgwMT47rF18Xbq0LHJ4cnxU1MyZibjlC/rG2zlp0ahd5wCLX3H5yq0dAYsoZrwAfwO2wHwn4XUW1N3Q7FXLnScuVKw43116+vvwHtKlAC3o/u6fcweL/2BLq3bRvIUs8dw6/j6md3TfU4WHsaB6Mrr7xCfm5p4WgPHW+io/wbbJWj0qlp9k7nORUu8Z4HImPsgnwPpKSjNcNPH42dR76ZGDNvd/XEv+iznvBso+5ZWzqnYmc1043CU62xi4k64BXnkpY2qG733KiJqN+82KMfZU/8q4H9OsNDtAEJf9tZW4QOHhwaMniwWXpIaHp6aEg6nWHJh2gNd0CfmShMeLASkAekJ/2OKV6M/5B9jhVoPf1FLUAG4zXotuwqIC+LSCJeg/ezNhtEJAWe+oQhG0UkFdo8YE9tEpEyvAjfYshmioi0brOntohIMDy1mLV5xaDNl6xNi4QsgKe+BGSriNTwPfAB2RBAtolIBX8b7xeaAdkuIvX8UPy6TAHIDn0bnIiOyhMA2SkinoA0MmQXRahWcRHawNdRraKutIqLJLVSvaJRaA2fYahXQJhe6Uwv/wDWFGedFuF9HR7N9vsbBIhqxBYzu2yxiV+pyxRAobfsc6jZKLVo17UQ3OFdxh3t+EExBk6LzWE+8OUiuVgxlpOmAv0kII58cMv/q16G1Ah1jFuenLq8FP5PWV4W6+sdH6NWC6PKlqekrhhbvkwC/fyefsjWSt40d032oNzVufAP3nIO52oGBY4s8B+kyW13MKjKWZNzeEQgVOUHDAocsZEusTQbI/xMv6+m/6Ya9wqUY1j5LC0jE+ER/1DeB8oPWX2s8Dtfzup/Y+WdMszny82hfJ6Vt8jc8beyViifY+USYQ+eJ38Vyr+z8s8kH4/lPKD8J2gRSfTFbNdu+rUP4WfdL/0giRseCpBJRhMuIZuFYjXS05Jmj2+1x2WtJ05wSOLKVrdDZAus7j4N23TJ5XiJd2qo2q6/Em/jq/N8kkPUve378y24Tob7u/YPdG9eAG9+3lMXUp5nkBB0vqOS3Tvn2E3ccx2H5S2yIhqPyRCyVcjF30qgP5agtNf/4JitLb9Z644/2X4vYHm8qYlCEdTgyze0z/NtCDJSePpqxjq2JuEb+Ma21sA6fyMFwiZmv5qZIqx0ds90usvp6BgflRX+Z3RubG/tpCNf9rjqOTrXt/4LnQNWdbISzkhHB0HviG/RuuBb20mceet9W3QsFd/CN7eS2F9JnPgEcFbCdRc5o+EAu7QnPtYhr3m0PS1dkfN4KdE92nE3Lf0ugWcRB9q7JWrPWSP+zJyc/eqEn/6325ydNUjgt7c6jtX4elKJ/Nrn8Q1+DUFyubFJwrLAe9vxJ0nb7jplujvZY2QKAplgpDDyrwts3aZ1F6kYP2C6+3cqij6GVB5XyZd1Umndjm/8A5WtWg9GBTS3R9ScM4K+kQaZX9uBjt+3Mb9HYnfgm6nb0LFf0fGtWlexPcjO9AZcQXuNM/xHhcXbSft2ISY97ekxPq8DxEvdSu6mp93t6HwS5OniSUWvHeTxUkVOetqj7fKaDiBp+CSz1V140ocL+JsXPasJ9IyaDN1rgnYE3r7tSKd7CWM6lXRkG96uHbHtSKcSn67vdL0jdngb3rbtiOR6ehXCc9o8bd62w5J2JZ88LHLdPfD/LdeKff/G9aOM/99cY+6cZCVLnZ1sFZR5aidHhS3YjFrr6S2yXTdKBDdqr0cT0tJlj9LTwG5kq26wUNulpaWnp+n6BE38S58m+dvJoxX6PhVV4D23/nBNSzeO6LpPql1YAetk99mOEiGFs8GvJKrM/fX6VCjOsQnqbuBEtTHVQ88HPU0RUjq5Zzne5XvhG1r37a2ByxNMTBVGdIjW8EtAwwqqwzFOrTorfgd0rlI6xlhja/DbjHDqqreoRiOv07ppPSgdqm9kCnRA4UpnN6CD32aTG9CJN6F2rPfjl7TX+NVTWzE67KSGs4IZ+V0sR1e5fF0Z5qcTUL4mls1hhnsfytf1Zain5Ru0jDh4/hZ7/hN9GexIn7+pK8Pze1j7W/oytKflT/VlaE/Ln4n9x0N5MZQ/50bqymBDWr6tK0vt7+j5gXpa/oLL5zDNvsgOsfwJ/Y079tMCXf2yME2b46+0v7/3Xhe/L4zCyUk88wKe+fzPDJNZF6jOFnKcEMnuoWoE3bcPzmgfcVha89mu2zAWUxp85kdEZGdHwIso2Ifhw4VHWWFhmZlh4Zn6dw5xM4QH6Lzc4W9RnVNcYWFcXFGR8CA3Kio3JzoqFxpI0YURFJSwWYVl3RkNJE+R8gekJE+WCL8rkAu5pdjDYSmygPOJrrJoBhuuSalTkpOnpKY2JSc3pfolJKh9ExKEPQkTExPrEhLqEhMnJixI8POLj/fzSwAeRkF8cRt46A69qjSBbJsOvcoVaOKbaXKF6ZYtGYUO5v2En+eZmq7zSMhw5pAU1VjSvYp+d69RW4u/O/Kz7mdHHGtl+l8UUSr73PHI1v1eCIchkjHH3ypGsd0Oi2U0ENPSeOZMU9sR2eUTJ+bTM16O48E2X/APoSW1TZ9/tg6Nif9uocjGtiPCF2CdLMMXepF2LvXd///qm/L3977Ru9rjf+8bR2/Z8l9wzast/95z2OGHTf/MNTdYZs5rFIWGJ1WO/9A/1ShGz/dP9VvJXJZ2Lb5Tq+wUWvl84Jrx3HUciUDP/xhLkgNNDw8LrbqAcn5/l/6+PlMXogmMb/BfuTGep2j7T/x3SFNCQtOQIY0JCY1D/GNi/OElN46eEB8/ISqK/h89K8rXN4q+QAtLgeuJigLgWsV5/xPf/D9o6B9lMRKVJWntb3KNGRwUnJ4eHDRY/y5psP+/adAS7PWPVEO1x5+ngwPBoxA3h/8J3ZAHcyYw4lhaw5beI5rjn+m3ysGX/+nDxJUzvAZHrhpzCtruw35oriyH43WZPzT3c1lO+6e8c9cjD3yQ+sm1ww+ndI68/w8onh+BeNpjYGRgYGBhcHrUKXkqnt/mKwMzBwMIPCprnwCl5/7c/DdYZBXHc6BaZgYmkCgAdeIN2njaY2BkYGA/8E+IgUG05Ofmrz9FVnEwoAImZgClWAbHeNqt0gPQHEsUhuF3GjtbUeHatm37/ow9sW0b17Zt27YR20Yh5ubb3ZnYSVU9dc6ZaXf7K4Mb3bvgV3DWzkqfvoEv4JaceUTr/aJa3Phd8D63pAKihF/JLQlzBZJ5S96VeXF9l/wkGdX1pZd7i2v9d9yScEM3CDtvkDpoK04m2lPpY4n8GdySlbpA+VXKE5dRdb3qFOSM45bdsvFdFG3Jz+acnDHKt6eU9gn3EtfujPDGDXxZ+ifcR1RMqM5xP+6YPYN9fQUqJtwq+udlnjan0EH6m1Myz8vnMjmuB8pi5VXjNl1U/53lXqR/ItvWPpqP0jEson9Cc2xpNhV3VjiLihvtv6K9mv6xzq4XxQl/NbeYheybl/lv4/l8Kh+36k+OSKT+2pL2d3LOf8q35yG6J3wtBro/qJh9g7m7upfD/aFEvicX+yZEthN1fRna+pNp5FvQxK1UfTaRe4UCf57anS2nUkfekwFST66SjlJb7pKa2dwcz0XSbCMX2SN5RRrIYXEcGcetfvenBlfn8WjsBXlInpTb4viodJMVO9nuCa0FwdenovmQ17JcT0qkgXW8JtfIx9LUfsud0jR9FNH2/vmz2D91ILfYQzjUrGCh+ZgR2dx+zZ0OSIv9g5c2r03v2Mf87lpKJV5yV8m+dDclcjZdXAO97zfpJq+ltQbFvK/z33RvNaXA30hNKfBteVn+kp/kE/lK3ojjZ/LYTrYZZf8BO4PrXA+e9Y3UrpAGYSmv+iOoZN+ik/2YC+08rg5+5wb7vs7wd7mTyLxOO/s2DezP1A/eWdveXsS15jRKzQq1O4gCexaF9lBa2CP1/ScussdwrT1Sjqejzq21PYFuwSxay2nmGG6R+ntjjLA8pakfKQ3rUJA+ks/NfF6T59yqoIzWe43zvGIH8ayZRyMzl/nAa/KcPCuvmGIGBjNAcCheDQDh8/xe5nN+369zPobPB5T5PGC/zgFxLvxeAX5PYnh5bDf6pvZlX/cMdwBAUAYYKNdII2ks8+VZtzQo41aJovZV6uAV1EbxHnnF1GSoOZ03Udt1BdbeaAAAAHjaDMEDAOggFADAlhZWr33btm3btm3btm3btm3bts07hFCL/yegOWgF2oIOoDPoBnqCPqA/nvLSe7m94t5gb7x3EsfBKXAFXAd3xv3xaDwdL8br8W58HF/G9/Frgkk+UopUI+1JbzKcTCULyVqykxwlF8ld8pJ8pYQmoMVoJVqPtqU96VB6kd6lL1k8loplY4VYOTaETWBz2CeOeMCj8UQ8Hc/Fi/FKvB5vxbvxQfyhH9nP6Rf1R/rb/cP+eRFbJBeZRTFRSfQQQ8QEMUesEFvEAXFG3BBPxAfxRyoZRWaVBWVZOV0uluvlbnlcMRWqzCq/Kq2qq8aqveqthqvNar86rePpVDqrLqDL6Oq6sW6ve+thgQwiB/GD2kHzYElwz2Qy+UwvM8wcN5fMPfPKfLPUOhvLJrVl7Gy73G62t+1z+xkQGIgOiSE95IJiUAnqQhvoARNgNuyEo3AR7sNr+O6YK+IquDpuiBvvZrvlbrN77j65v2GFsE7YIvzXFDxAMQ4DAAA9W1sxJGuTZkXSNe3Ztm3btm3btm3btm3bfLz/O/n6+Ub5pvk++uv4Z/iX+B8KiQS/oAh1hZZCV2GjcEN4InwQgWiIacUmYgexjzhCnCIuENeIZ8Ub4hPJlbJLhaXyUm1pgjRbOifdlJ5KH+W4cko5JEflHHIRuYLcR74UyB+YEtgXTBSsHhwbXBS8HCKh/KHeoROhO+Gc4eHh3eHL4dvhx+HX4c/h3yAxSA0CAAELZAB5QSlQCdQCM8FVcBc8BW/BVxgXJoU+GIIatGF6mB3mh8VheVgd1ofNYXvYHQ6AI+EkOBsugWvhNrgfnoAX/o0UjDSI9I8cVpIrXCmr1Fc6KhuUN2o7tZvaTx2mjlOnqfPU5eoDlAeVQbVQBzQAjUWz0HJ0BJ1F19B99AJ9w0lxEEexh3Pgorgcrotb4k54BJ6Bl+CNeB8+ju/gD1ocLYWmadm0Ulojrb02UTug3SOpSZBgwkh6koMUJKVIZVKHtCU9yTiyhdyJZozOiR6OftXz6x31cfpG/YxR1KhhDDGOGleMX6bPzGZ2NSeZx60Ulmq1tjZYR6yL1lOamBKalRamZWhVWo82px1oTzqIjqZT6Fy6jK6nO+hBeoo+pO9ZAiYxgw1lY9lUNpctZWvZVraXHWVX2GP2wQZ29L9V7BH2Qnu//SlGY3ljtWLdY5ectE51Z6Cz1XnpfHR+8oQ8JZd4hOvc4Rl5Tl6Ql+QV+WA+/u+t/Ax/5PrdmFvCreuOdne4z7yAV8hr523xHnrf0yZNq/wB6rssmnjaY2BkYGBiZmhh4GEoYGAH8RAAxAcAGJwBFwB42myQA24FQBRFT20zKMLatoLaiNNv238L5Uq6iC6i6+nNZOrm6TwMgUZeKKOkvAZ4Lmm1XEJtSbXlUqpLsFzGMG+Wy2nn1XIF89xbrlQ9b7lR9W0Ml5RQz7zlua89SxbpptfyEtV0Wt7UfK3lLRGcEyOCgyh7pBXDBHAxxSxx5SfGq2I6/VyIi3i4wSPy4VdXJomTYpkJSUzsIYpXFCVtd1SFlPy4qkl87JmeRzzGNjFNubk2eYqAWdnPrKYnJVOs4FM1rdl5I7Ms4FLHKfnaqR+704+V51xwJFv590wbv/V2zAsKIvtC+pk2e82LLlXxKH4/9VQ+RlCZy0xvkVH0m5emlA/+/iP7Gr/mnIzzvmRwHOiDVAPpYiArE266JgAlMlHeeNpswQOMGAAAwMB2tm3btm3btm3btm3zbRuxscyxppi7IwcA/AkkiP/IkROQWszgCY+JJZqZ5jCnuczNMfOYl9rmow6z+E1d81OPeGYTQ5wFLGghC1vEotSngcUsTkNLWJJGJFmKZBJItLRlLGs5GtPE8lagqRWtRDMrW4XmzLGq1axOC+bylOOkk0KqNaxpLWtbx7rWs74NbMgzWtqIVrS2sU1oY1Ob0dbmtCOLDDKZZwtb2srWtrGt7WxvB9rb0U50sLNd7Go3OtqdTnzhoz3saS9724fO9rUfvZjPQhbZnwUOcCBLWMw1BzmY3g7hO31Yyh/6OpR+rGQ5y1jhMIc7wpH0Z4CjHM1AxziWQWSz1nGsZhVrHO8EJzrJyQxmiFOcylCnOd0ZDHOmsxjOOmc7x7mMYBObuc4G1rPRec53gQt5zkgXMYrRLnYJY1zqMvYz1uWuYBzbXekqtrKFba52jWsZ7zrXM8ENbnSTm5noFibxga9udZvb3eFOJrvL3XzjM3nZxRl2u4eSlKI0ZShLOcpTgYpUcq/73O8BD3rIwx7xqMc87glPesrTnvGs5zzvBS96ycte8arXvO4Nb3rL297xrve87wMf+sjHPvGpz3zuC1/6yte+8a3vfE9+cnGTGtygIIXoQjemMI2afvCjAQYaZLAh5CGQEkzlE10pxgtestdQwww3gje8pQC5ecVrIokw0iiKUpyHVDaaKoQTRDD3eUBVqlONIvzgJ+84yXRjjDXOeBNMNMlkU7hFD7pT2FQOcJBD7OQyV0wznX3sMcNMswj4RxBcGyAQAEAAu3TsxXwwHu7u7vqJuoamlraOrp6+gaGRsYmpmbmFpZW1ja2dvYOjk7OLq5u7Ry655pZSKimnmkaaaaWbnqeXt4+CILgwQBgGAADWZri7uzv8/xFHTJI0JDGLuSAiUVJWUVVT19DU0tbR1dM3MDQyNjE1M7ewtLIOfxtbO3sHRydnF1c3dw9PL28fXz9FmdW15SoOBDeCsyf+hg8m8+i0OefdN2w0Y50B5CVM+vqLWgUWvk9VHdxd6paYWZqrLD4UIjfrnFvL7U7icreygLby72xztYsPdcWU33KBG3OH35O9dIG+wnUIXAE3qt5XyLMtYGv7wJ3xbcXThJnf6uU3IRDlHAtoGz9o6hwfiNO4tvETwtQ8hNs3f9YOb9sr4AbxFlHGs4A2VGyAu/HPZRqXR02C5xq/6ebK+F0zfRu4Mf5Ux/yztwUPGADXKj0IgTj+zgX68G+AO+PvxyJ+Zsbf1HT4d8JZwUpeqngYAtU27GZ8/1K+cn/lAn1gaPyniY8gfrUEOmasq981NtPvigfcmkxf5joCroFbrAf59hLY2oHB1bB4705EwPUEuDgcshNOFuAmLIHOF2kiKiPV9HU5X2HdjpHrtyWCOzBFr+8W+NVYfLR9zyh0c22U+vYdICpEgVHTwaihtW7OqzfaeUDoDLbAr4Yv7V6NF7XvF61NGAG3mIVjvOlb9oABMDLe9S07X+zqQpjvrBCL6sEQOZNQvUhrUB0LJm3zQdQFIX+meMlfZbxkzyyXhPHHYyUTck4FBgeRZXFDhidWcJEoVypk8lSRQ1zKzEnJMt6GJqe4YHnKHiqZR0aBypN9M2rWhshoQzNpPbEKwTnMNnx9LoqeN1pluK5RXksiTy/pVm8E3x18vcTh8e10pMnMwBAwU1aWDY4eCxZXrKDZ/V/HqYyd0rqUjoznRMZZnVb8lL7Jigl/5gkNTKa1KdO4PHD1XOQP4rKpycsnmUad0HaOdq09VT1hUcUupErDuuokwDGDDpjXnZhubJqitkgnC45BeYoPkozoJawsWbi/pfnFiq4uR3/90dxn/RXOL/ZnxgrH2AhxlidxeQTPznxfpylT+V+eCp6xcSLqfcqIj84XeNhNeaKPeHSe77Ab7ug8p2lvrGNtprP+QOcX05z2RmnwRV5nhZETDOTbLetTOZCvV5IRvV+iQ3rgSS4ySpOE0iRBmqRD+dDB+DPy5GOnPHruitKDV4k5R0E6KjEclSiNgqi2YmlqKyZ7jE8F/Yq+H0RJeXdAIqRcEiiXlJQTI+XESLkkUE6UlBMl5cRIOTFSDkrKiWrKpakpJxvKiUM5VaXvbGPvh/RBloy+0Y7lDmmn0jNIRLVnqXgx8Rgk2pZlAyPgehgXhXiRIsgTfOXNpPGDyB9XMmLDHY4okeTB5c+lpaVOKSXZp3pWpDrsRXWEJ5i0eZpzZZKzPg1VULzks06aegvQR8ZtX6SeEOKOd3L1oE/G3YVwct701Os/isiYdefQYwEZ1/qJ9PCKjC9+aNaBiW+xrBAYAG3ganoU4ineC321NmUttxv3rv2r3V2DRXq4b53qTz+8Xaq6J0hVKW0I3ildHCrZWCMoWdSHOwpcZN+Qs9eLZNrrNR3bCpb0b9RIafab+AeMTwTqAAAA"),weight:700,style:"normal"}]});import JX5 from"satori";import{Resvg as WX5}from"@resvg/resvg-js";async function NX5(Z){try{let X=await fetch(Z,{signal:AbortSignal.timeout(1500)});if(!X.ok)return null;let G=X.headers.get("content-type")||"image/png";if(!G.startsWith("image/"))return null;let Y=Buffer.from(await X.arrayBuffer()).toString("base64");return`data:${G};base64,${Y}`}catch{return null}}async function Kx8(Z){let X=Z.faviconUrl?await NX5(Z.faviconUrl):null,G=X?TX("div",{width:84,height:84,flexShrink:0,borderRadius:20,backgroundColor:Wx8,display:"flex",alignItems:"center",justifyContent:"center"},TX("img",{},null,{src:X,width:56,height:56})):TX("div",{width:84,height:84,flexShrink:0,borderRadius:20,backgroundColor:Qj0,color:Z51,fontSize:44,fontWeight:700,display:"flex",alignItems:"center",justifyContent:"center"},(Z.initial||Z.domain.charAt(0)||"?").toUpperCase()),Y=TX("div",{width:e41,height:Jx8,display:"flex",flexDirection:"column",justifyContent:"space-between",padding:"72px 80px",backgroundColor:Z51,color:Wx8,fontFamily:"Inter"},[TX("div",{display:"flex",alignItems:"center",gap:22},[G,TX("div",{display:"flex",flexDirection:"column"},[TX("div",{fontSize:24,color:Qj0,fontWeight:600,marginBottom:4},"Commerce report"),TX("div",{fontSize:46,fontWeight:600,letterSpacing:"-0.02em"},Z.domain)])]),TX("div",{display:"flex",alignItems:"flex-end",gap:28},[TX("div",{fontSize:220,fontWeight:700,color:Qj0,lineHeight:0.82,letterSpacing:"-0.05em"},String(Math.round(Z.score))),TX("div",{fontSize:60,fontWeight:400,color:"rgba(244,251,230,0.55)",paddingBottom:30},"/100"),TX("div",{fontSize:30,fontWeight:400,color:"rgba(244,251,230,0.82)",paddingBottom:40},"Commerce health score")]),TX("div",{display:"flex",alignItems:"center",gap:14},[TX("div",{width:44,height:44,borderRadius:11,backgroundColor:Qj0,display:"flex",alignItems:"center",justifyContent:"center"},TX("svg",{},TX("path",{},null,{d:KX5,fill:Z51}),{width:30,height:30,viewBox:"0 0 200 200"})),TX("div",{fontSize:26,fontWeight:700},"decocms")])]),Q=await JX5(Y,{width:e41,height:Jx8,fonts:Qx8}),$=new WX5(Q,{fitTo:{mode:"width",value:e41}}).render().asPng();return Uint8Array.from($)}var e41=1200,Jx8=630,Z51="#07401a",Qj0="#d0ec1a",Wx8="#f4fbe6",KX5="M79.8641 145.438C97.4676 145.438 107.196 137.562 118.777 113.01C125.263 99.5758 130.358 86.1415 136.381 73.1705L143.793 75.4867C145.646 75.95 147.035 75.0235 146.109 73.1705L136.844 55.1037C136.381 53.714 134.528 53.714 133.601 54.1772L111.365 62.5157C109.512 62.979 109.512 64.832 111.365 65.2952L117.851 67.6115C112.292 79.656 105.806 98.186 100.247 109.767C94.2249 122.738 91.4454 131.54 80.7906 131.54C70.1359 131.54 68.7461 123.665 73.3786 112.084C78.4744 98.6493 86.8129 94.9433 96.0779 97.7228C98.8574 94.0168 100.71 88.4578 101.637 83.362C98.8574 82.4355 95.6146 82.4355 92.8351 82.4355C77.5479 82.4355 62.2606 90.3108 55.7751 106.988C48.8263 128.761 56.2383 145.438 79.8641 145.438Z",TX=(Z,X,G,Y={})=>({type:Z,props:{...Y,style:X,children:G}});var Nx8=B(()=>{$x8()});import{join as Fx8}from"path";async function Ux8(Z){try{let X=await fetch(`${b$({})}/api/v2/public/diagnostics/${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(FX5)});if(!X.ok)return null;let G=await X.json(),{deck:Y}=Yj0(G);if(!Y.slides.length)return null;let Q=Y.slides.find((W)=>W.template.template==="cover"),$=Q?.template,J=$&&$.template==="cover"?$:void 0;return{brand:Y.meta.brand?.trim()||o41(Z),score:Y.meta.scores?.cover??J?.score?.value,verdict:Q?.annotation?.trim()||Q?.headline?.trim()||void 0}}catch{return null}}function Z3(Z){return Z.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function UX5(Z,X){let G=Nh(Z),Y=X?.brand?.trim()||o41(G),Q=r41(G,128),J=`${($1().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(G)}`,{title:W,description:K}=Xx8({brand:Y,domain:G,score:X?.score,verdict:X?.verdict}),N=`${J}/og.png`,F=`${Y} commerce report by decocms`;return[`<title>${Z3(W)}</title>`,`<meta name="description" content="${Z3(K)}" />`,'<meta name="robots" content="noindex, follow" />','<meta property="og:type" content="website" />','<meta property="og:site_name" content="decocms" />',`<meta property="og:title" content="${Z3(W)}" />`,`<meta property="og:description" content="${Z3(K)}" />`,`<meta property="og:url" content="${Z3(J)}" />`,`<meta property="og:image" content="${Z3(N)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${Z3(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${Z3(W)}" />`,`<meta name="twitter:description" content="${Z3(K)}" />`,`<meta name="twitter:image" content="${Z3(N)}" />`,`<meta name="twitter:image:alt" content="${Z3(F)}" />`,`<link rel="canonical" href="${Z3(J)}" />`,`<link rel="icon" href="${Z3(Q)}" sizes="any" />`].join(`
2774
+ `;return new TextEncoder().encode(Y)}var l41,oC,j75,Sv8,c41="ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",P75,d8,l8,Y4,kv8=24,rC,iJ;var _v8=B(()=>{(function(Z){Z.Operator="operator",Z.Account="account",Z.User="user",Z.Activation="activation",Z.AuthorizationResponse="authorization_response"})(l41||(l41={}));(function(Z){var X=function(h,i){this.hi=h|0,this.lo=i|0},G=function(h){var i,u=new Float64Array(16);if(h)for(i=0;i<h.length;i++)u[i]=h[i];return u},Y=function(){throw Error("no PRNG")},Q=new Uint8Array(16),$=new Uint8Array(32);$[0]=9;var J=G(),W=G([1]),K=G([56129,1]),N=G([30883,4953,19914,30187,55467,16705,2637,112,59544,30585,16505,36039,65139,11119,27886,20995]),F=G([61785,9906,39828,60374,45398,33411,5274,224,53552,61171,33010,6542,64743,22239,55772,9222]),U=G([54554,36645,11616,51542,42930,38181,51040,26924,56412,64982,57905,49316,21502,52590,14035,8553]),H=G([26200,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214]),w=G([41136,18958,6951,50414,58488,44335,6150,12099,55207,15867,153,11085,57099,20417,9344,11139]);function O(h,i){return h<<i|h>>>32-i}function D(h,i){var u=h[i+3]&255;return u=u<<8|h[i+2]&255,u=u<<8|h[i+1]&255,u<<8|h[i+0]&255}function L(h,i){var u=h[i]<<24|h[i+1]<<16|h[i+2]<<8|h[i+3],r=h[i+4]<<24|h[i+5]<<16|h[i+6]<<8|h[i+7];return new X(u,r)}function E(h,i,u){var r;for(r=0;r<4;r++)h[i+r]=u&255,u>>>=8}function z(h,i,u){h[i]=u.hi>>24&255,h[i+1]=u.hi>>16&255,h[i+2]=u.hi>>8&255,h[i+3]=u.hi&255,h[i+4]=u.lo>>24&255,h[i+5]=u.lo>>16&255,h[i+6]=u.lo>>8&255,h[i+7]=u.lo&255}function j(h,i,u,r,Q0){var N0,v0=0;for(N0=0;N0<Q0;N0++)v0|=h[i+N0]^u[r+N0];return(1&v0-1>>>8)-1}function A(h,i,u,r){return j(h,i,u,r,16)}function P(h,i,u,r){return j(h,i,u,r,32)}function q(h,i,u,r,Q0){var N0=new Uint32Array(16),v0=new Uint32Array(16),m0=new Uint32Array(16),R0=new Uint32Array(4),V0,T0,y0;for(V0=0;V0<4;V0++)v0[5*V0]=D(r,4*V0),v0[1+V0]=D(u,4*V0),v0[6+V0]=D(i,4*V0),v0[11+V0]=D(u,16+4*V0);for(V0=0;V0<16;V0++)m0[V0]=v0[V0];for(V0=0;V0<20;V0++){for(T0=0;T0<4;T0++){for(y0=0;y0<4;y0++)R0[y0]=v0[(5*T0+4*y0)%16];R0[1]^=O(R0[0]+R0[3]|0,7),R0[2]^=O(R0[1]+R0[0]|0,9),R0[3]^=O(R0[2]+R0[1]|0,13),R0[0]^=O(R0[3]+R0[2]|0,18);for(y0=0;y0<4;y0++)N0[4*T0+(T0+y0)%4]=R0[y0]}for(y0=0;y0<16;y0++)v0[y0]=N0[y0]}if(Q0){for(V0=0;V0<16;V0++)v0[V0]=v0[V0]+m0[V0]|0;for(V0=0;V0<4;V0++)v0[5*V0]=v0[5*V0]-D(r,4*V0)|0,v0[6+V0]=v0[6+V0]-D(i,4*V0)|0;for(V0=0;V0<4;V0++)E(h,4*V0,v0[5*V0]),E(h,16+4*V0,v0[6+V0])}else for(V0=0;V0<16;V0++)E(h,4*V0,v0[V0]+m0[V0]|0)}function S(h,i,u,r){return q(h,i,u,r,!1),0}function M(h,i,u,r){return q(h,i,u,r,!0),0}var C=new Uint8Array([101,120,112,97,110,100,32,51,50,45,98,121,116,101,32,107]);function m(h,i,u,r,Q0,N0,v0){var m0=new Uint8Array(16),R0=new Uint8Array(64),V0,T0;if(!Q0)return 0;for(T0=0;T0<16;T0++)m0[T0]=0;for(T0=0;T0<8;T0++)m0[T0]=N0[T0];while(Q0>=64){S(R0,m0,v0,C);for(T0=0;T0<64;T0++)h[i+T0]=(u?u[r+T0]:0)^R0[T0];V0=1;for(T0=8;T0<16;T0++)V0=V0+(m0[T0]&255)|0,m0[T0]=V0&255,V0>>>=8;if(Q0-=64,i+=64,u)r+=64}if(Q0>0){S(R0,m0,v0,C);for(T0=0;T0<Q0;T0++)h[i+T0]=(u?u[r+T0]:0)^R0[T0]}return 0}function v(h,i,u,r,Q0){return m(h,i,null,0,u,r,Q0)}function x(h,i,u,r,Q0){var N0=new Uint8Array(32);return M(N0,r,Q0,C),v(h,i,u,r.subarray(16),N0)}function e(h,i,u,r,Q0,N0,v0){var m0=new Uint8Array(32);return M(m0,N0,v0,C),m(h,i,u,r,Q0,N0.subarray(16),m0)}function o(h,i){var u,r=0;for(u=0;u<17;u++)r=r+(h[u]+i[u]|0)|0,h[u]=r&255,r>>>=8}var w0=new Uint32Array([5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,252]);function L0(h,i,u,r,Q0,N0){var v0,m0,R0,V0,T0=new Uint32Array(17),y0=new Uint32Array(17),r0=new Uint32Array(17),G1=new Uint32Array(17),F1=new Uint32Array(17);for(R0=0;R0<17;R0++)y0[R0]=r0[R0]=0;for(R0=0;R0<16;R0++)y0[R0]=N0[R0];y0[3]&=15,y0[4]&=252,y0[7]&=15,y0[8]&=252,y0[11]&=15,y0[12]&=252,y0[15]&=15;while(Q0>0){for(R0=0;R0<17;R0++)G1[R0]=0;for(R0=0;R0<16&&R0<Q0;++R0)G1[R0]=u[r+R0];G1[R0]=1,r+=R0,Q0-=R0,o(r0,G1);for(m0=0;m0<17;m0++){T0[m0]=0;for(R0=0;R0<17;R0++)T0[m0]=T0[m0]+r0[R0]*(R0<=m0?y0[m0-R0]:320*y0[m0+17-R0]|0)|0|0}for(m0=0;m0<17;m0++)r0[m0]=T0[m0];V0=0;for(R0=0;R0<16;R0++)V0=V0+r0[R0]|0,r0[R0]=V0&255,V0>>>=8;V0=V0+r0[16]|0,r0[16]=V0&3,V0=5*(V0>>>2)|0;for(R0=0;R0<16;R0++)V0=V0+r0[R0]|0,r0[R0]=V0&255,V0>>>=8;V0=V0+r0[16]|0,r0[16]=V0}for(R0=0;R0<17;R0++)F1[R0]=r0[R0];o(r0,w0),v0=-(r0[16]>>>7)|0;for(R0=0;R0<17;R0++)r0[R0]^=v0&(F1[R0]^r0[R0]);for(R0=0;R0<16;R0++)G1[R0]=N0[R0+16];G1[16]=0,o(r0,G1);for(R0=0;R0<16;R0++)h[i+R0]=r0[R0];return 0}function W0(h,i,u,r,Q0,N0){var v0=new Uint8Array(16);return L0(v0,0,u,r,Q0,N0),A(h,i,v0,0)}function $0(h,i,u,r,Q0){var N0;if(u<32)return-1;e(h,0,i,0,u,r,Q0),L0(h,16,h,32,u-32,h);for(N0=0;N0<16;N0++)h[N0]=0;return 0}function a(h,i,u,r,Q0){var N0,v0=new Uint8Array(32);if(u<32)return-1;if(x(v0,0,32,r,Q0),W0(i,16,i,32,u-32,v0)!==0)return-1;e(h,0,i,0,u,r,Q0);for(N0=0;N0<32;N0++)h[N0]=0;return 0}function E0(h,i){var u;for(u=0;u<16;u++)h[u]=i[u]|0}function J0(h){var i,u;for(u=0;u<16;u++)h[u]+=65536,i=Math.floor(h[u]/65536),h[(u+1)*(u<15?1:0)]+=i-1+37*(i-1)*(u===15?1:0),h[u]-=i*65536}function f0(h,i,u){var r,Q0=~(u-1);for(var N0=0;N0<16;N0++)r=Q0&(h[N0]^i[N0]),h[N0]^=r,i[N0]^=r}function i0(h,i){var u,r,Q0,N0=G(),v0=G();for(u=0;u<16;u++)v0[u]=i[u];J0(v0),J0(v0),J0(v0);for(r=0;r<2;r++){N0[0]=v0[0]-65517;for(u=1;u<15;u++)N0[u]=v0[u]-65535-(N0[u-1]>>16&1),N0[u-1]&=65535;N0[15]=v0[15]-32767-(N0[14]>>16&1),Q0=N0[15]>>16&1,N0[14]&=65535,f0(v0,N0,1-Q0)}for(u=0;u<16;u++)h[2*u]=v0[u]&255,h[2*u+1]=v0[u]>>8}function l0(h,i){var u=new Uint8Array(32),r=new Uint8Array(32);return i0(u,h),i0(r,i),P(u,0,r,0)}function s0(h){var i=new Uint8Array(32);return i0(i,h),i[0]&1}function F0(h,i){var u;for(u=0;u<16;u++)h[u]=i[2*u]+(i[2*u+1]<<8);h[15]&=32767}function S0(h,i,u){var r;for(r=0;r<16;r++)h[r]=i[r]+u[r]|0}function P0(h,i,u){var r;for(r=0;r<16;r++)h[r]=i[r]-u[r]|0}function K0(h,i,u){var r,Q0,N0=new Float64Array(31);for(r=0;r<31;r++)N0[r]=0;for(r=0;r<16;r++)for(Q0=0;Q0<16;Q0++)N0[r+Q0]+=i[r]*u[Q0];for(r=0;r<15;r++)N0[r]+=38*N0[r+16];for(r=0;r<16;r++)h[r]=N0[r];J0(h),J0(h)}function G0(h,i){K0(h,i,i)}function Y0(h,i){var u=G(),r;for(r=0;r<16;r++)u[r]=i[r];for(r=253;r>=0;r--)if(G0(u,u),r!==2&&r!==4)K0(u,u,i);for(r=0;r<16;r++)h[r]=u[r]}function C0(h,i){var u=G(),r;for(r=0;r<16;r++)u[r]=i[r];for(r=250;r>=0;r--)if(G0(u,u),r!==1)K0(u,u,i);for(r=0;r<16;r++)h[r]=u[r]}function n(h,i,u){var r=new Uint8Array(32),Q0=new Float64Array(80),N0,v0,m0=G(),R0=G(),V0=G(),T0=G(),y0=G(),r0=G();for(v0=0;v0<31;v0++)r[v0]=i[v0];r[31]=i[31]&127|64,r[0]&=248,F0(Q0,u);for(v0=0;v0<16;v0++)R0[v0]=Q0[v0],T0[v0]=m0[v0]=V0[v0]=0;m0[0]=T0[0]=1;for(v0=254;v0>=0;--v0)N0=r[v0>>>3]>>>(v0&7)&1,f0(m0,R0,N0),f0(V0,T0,N0),S0(y0,m0,V0),P0(m0,m0,V0),S0(V0,R0,T0),P0(R0,R0,T0),G0(T0,y0),G0(r0,m0),K0(m0,V0,m0),K0(V0,R0,y0),S0(y0,m0,V0),P0(m0,m0,V0),G0(R0,m0),P0(V0,T0,r0),K0(m0,V0,K),S0(m0,m0,T0),K0(V0,V0,m0),K0(m0,T0,r0),K0(T0,R0,Q0),G0(R0,y0),f0(m0,R0,N0),f0(V0,T0,N0);for(v0=0;v0<16;v0++)Q0[v0+16]=m0[v0],Q0[v0+32]=V0[v0],Q0[v0+48]=R0[v0],Q0[v0+64]=T0[v0];var G1=Q0.subarray(32),F1=Q0.subarray(16);return Y0(G1,G1),K0(F1,F1,G1),i0(h,F1),0}function X0(h,i){return n(h,i,$)}function t0(h,i){return Y(i,32),X0(h,i)}function q0(h,i,u){var r=new Uint8Array(32);return n(r,u,i),M(h,Q,r,C)}var M0=$0,g=a;function H0(h,i,u,r,Q0,N0){var v0=new Uint8Array(32);return q0(v0,Q0,N0),M0(h,i,u,r,v0)}function x0(h,i,u,r,Q0,N0){var v0=new Uint8Array(32);return q0(v0,Q0,N0),g(h,i,u,r,v0)}function Z1(){var h=0,i=0,u=0,r=0,Q0=65535,N0,v0,m0;for(m0=0;m0<arguments.length;m0++)N0=arguments[m0].lo,v0=arguments[m0].hi,h+=N0&Q0,i+=N0>>>16,u+=v0&Q0,r+=v0>>>16;return i+=h>>>16,u+=i>>>16,r+=u>>>16,new X(u&Q0|r<<16,h&Q0|i<<16)}function u0(h,i){return new X(h.hi>>>i,h.lo>>>i|h.hi<<32-i)}function T1(){var h=0,i=0,u;for(u=0;u<arguments.length;u++)h^=arguments[u].lo,i^=arguments[u].hi;return new X(i,h)}function e1(h,i){var u,r,Q0=32-i;if(i<32)u=h.hi>>>i|h.lo<<Q0,r=h.lo>>>i|h.hi<<Q0;else if(i<64)u=h.lo>>>i|h.hi<<Q0,r=h.hi>>>i|h.lo<<Q0;return new X(u,r)}function j4(h,i,u){var r=h.hi&i.hi^~h.hi&u.hi,Q0=h.lo&i.lo^~h.lo&u.lo;return new X(r,Q0)}function $5(h,i,u){var r=h.hi&i.hi^h.hi&u.hi^i.hi&u.hi,Q0=h.lo&i.lo^h.lo&u.lo^i.lo&u.lo;return new X(r,Q0)}function u9(h){return T1(e1(h,28),e1(h,34),e1(h,39))}function Z0(h){return T1(e1(h,14),e1(h,18),e1(h,41))}function N1(h){return T1(e1(h,1),e1(h,8),u0(h,7))}function s8(h){return T1(e1(h,19),e1(h,61),u0(h,6))}var e8=[new X(1116352408,3609767458),new X(1899447441,602891725),new X(3049323471,3964484399),new X(3921009573,2173295548),new X(961987163,4081628472),new X(1508970993,3053834265),new X(2453635748,2937671579),new X(2870763221,3664609560),new X(3624381080,2734883394),new X(310598401,1164996542),new X(607225278,1323610764),new X(1426881987,3590304994),new X(1925078388,4068182383),new X(2162078206,991336113),new X(2614888103,633803317),new X(3248222580,3479774868),new X(3835390401,2666613458),new X(4022224774,944711139),new X(264347078,2341262773),new X(604807628,2007800933),new X(770255983,1495990901),new X(1249150122,1856431235),new X(1555081692,3175218132),new X(1996064986,2198950837),new X(2554220882,3999719339),new X(2821834349,766784016),new X(2952996808,2566594879),new X(3210313671,3203337956),new X(3336571891,1034457026),new X(3584528711,2466948901),new X(113926993,3758326383),new X(338241895,168717936),new X(666307205,1188179964),new X(773529912,1546045734),new X(1294757372,1522805485),new X(1396182291,2643833823),new X(1695183700,2343527390),new X(1986661051,1014477480),new X(2177026350,1206759142),new X(2456956037,344077627),new X(2730485921,1290863460),new X(2820302411,3158454273),new X(3259730800,3505952657),new X(3345764771,106217008),new X(3516065817,3606008344),new X(3600352804,1432725776),new X(4094571909,1467031594),new X(275423344,851169720),new X(430227734,3100823752),new X(506948616,1363258195),new X(659060556,3750685593),new X(883997877,3785050280),new X(958139571,3318307427),new X(1322822218,3812723403),new X(1537002063,2003034995),new X(1747873779,3602036899),new X(1955562222,1575990012),new X(2024104815,1125592928),new X(2227730452,2716904306),new X(2361852424,442776044),new X(2428436474,593698344),new X(2756734187,3733110249),new X(3204031479,2999351573),new X(3329325298,3815920427),new X(3391569614,3928383900),new X(3515267271,566280711),new X(3940187606,3454069534),new X(4118630271,4000239992),new X(116418474,1914138554),new X(174292421,2731055270),new X(289380356,3203993006),new X(460393269,320620315),new X(685471733,587496836),new X(852142971,1086792851),new X(1017036298,365543100),new X(1126000580,2618297676),new X(1288033470,3409855158),new X(1501505948,4234509866),new X(1607167915,987167468),new X(1816402316,1246189591)];function TZ(h,i,u){var r=[],Q0=[],N0=[],v0=[],m0,R0,V0;for(R0=0;R0<8;R0++)r[R0]=N0[R0]=L(h,8*R0);var T0=0;while(u>=128){for(R0=0;R0<16;R0++)v0[R0]=L(i,8*R0+T0);for(R0=0;R0<80;R0++){for(V0=0;V0<8;V0++)Q0[V0]=N0[V0];m0=Z1(N0[7],Z0(N0[4]),j4(N0[4],N0[5],N0[6]),e8[R0],v0[R0%16]),Q0[7]=Z1(m0,u9(N0[0]),$5(N0[0],N0[1],N0[2])),Q0[3]=Z1(Q0[3],m0);for(V0=0;V0<8;V0++)N0[(V0+1)%8]=Q0[V0];if(R0%16===15)for(V0=0;V0<16;V0++)v0[V0]=Z1(v0[V0],v0[(V0+9)%16],N1(v0[(V0+1)%16]),s8(v0[(V0+14)%16]))}for(R0=0;R0<8;R0++)N0[R0]=Z1(N0[R0],r[R0]),r[R0]=N0[R0];T0+=128,u-=128}for(R0=0;R0<8;R0++)z(h,8*R0,r[R0]);return u}var aG=new Uint8Array([106,9,230,103,243,188,201,8,187,103,174,133,132,202,167,59,60,110,243,114,254,148,248,43,165,79,245,58,95,29,54,241,81,14,82,127,173,230,130,209,155,5,104,140,43,62,108,31,31,131,217,171,251,65,189,107,91,224,205,25,19,126,33,121]);function k6(h,i,u){var r=new Uint8Array(64),Q0=new Uint8Array(256),N0,v0=u;for(N0=0;N0<64;N0++)r[N0]=aG[N0];TZ(r,i,u),u%=128;for(N0=0;N0<256;N0++)Q0[N0]=0;for(N0=0;N0<u;N0++)Q0[N0]=i[v0-u+N0];Q0[u]=128,u=256-128*(u<112?1:0),Q0[u-9]=0,z(Q0,u-8,new X(v0/536870912|0,v0<<3)),TZ(r,Q0,u);for(N0=0;N0<64;N0++)h[N0]=r[N0];return 0}function f4(h,i){var u=G(),r=G(),Q0=G(),N0=G(),v0=G(),m0=G(),R0=G(),V0=G(),T0=G();P0(u,h[1],h[0]),P0(T0,i[1],i[0]),K0(u,u,T0),S0(r,h[0],h[1]),S0(T0,i[0],i[1]),K0(r,r,T0),K0(Q0,h[3],i[3]),K0(Q0,Q0,F),K0(N0,h[2],i[2]),S0(N0,N0,N0),P0(v0,r,u),P0(m0,N0,Q0),S0(R0,N0,Q0),S0(V0,r,u),K0(h[0],v0,m0),K0(h[1],V0,R0),K0(h[2],R0,m0),K0(h[3],v0,V0)}function X9(h,i,u){var r;for(r=0;r<4;r++)f0(h[r],i[r],u)}function R9(h,i){var u=G(),r=G(),Q0=G();Y0(Q0,i[2]),K0(u,i[0],Q0),K0(r,i[1],Q0),i0(h,r),h[31]^=s0(u)<<7}function JZ(h,i,u){var r,Q0;E0(h[0],J),E0(h[1],W),E0(h[2],W),E0(h[3],J);for(Q0=255;Q0>=0;--Q0)r=u[Q0/8|0]>>(Q0&7)&1,X9(h,i,r),f4(i,h),f4(h,h),X9(h,i,r)}function RZ(h,i){var u=[G(),G(),G(),G()];E0(u[0],U),E0(u[1],H),E0(u[2],W),K0(u[3],U,H),JZ(h,u,i)}function _1(h,i,u){var r=new Uint8Array(64),Q0=[G(),G(),G(),G()],N0;if(!u)Y(i,32);k6(r,i,32),r[0]&=248,r[31]&=127,r[31]|=64,RZ(Q0,r),R9(h,Q0);for(N0=0;N0<32;N0++)i[N0+32]=h[N0];return 0}var S6=new Float64Array([237,211,245,92,26,99,18,88,214,156,247,162,222,249,222,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16]);function V6(h,i){var u,r,Q0,N0;for(r=63;r>=32;--r){u=0;for(Q0=r-32,N0=r-12;Q0<N0;++Q0)i[Q0]+=u-16*i[r]*S6[Q0-(r-32)],u=Math.floor((i[Q0]+128)/256),i[Q0]-=u*256;i[Q0]+=u,i[r]=0}u=0;for(Q0=0;Q0<32;Q0++)i[Q0]+=u-(i[31]>>4)*S6[Q0],u=i[Q0]>>8,i[Q0]&=255;for(Q0=0;Q0<32;Q0++)i[Q0]-=u*S6[Q0];for(r=0;r<32;r++)i[r+1]+=i[r]>>8,h[r]=i[r]&255}function Q4(h){var i=new Float64Array(64),u;for(u=0;u<64;u++)i[u]=h[u];for(u=0;u<64;u++)h[u]=0;V6(h,i)}function _8(h,i,u,r){var Q0=new Uint8Array(64),N0=new Uint8Array(64),v0=new Uint8Array(64),m0,R0,V0=new Float64Array(64),T0=[G(),G(),G(),G()];k6(Q0,r,32),Q0[0]&=248,Q0[31]&=127,Q0[31]|=64;var y0=u+64;for(m0=0;m0<u;m0++)h[64+m0]=i[m0];for(m0=0;m0<32;m0++)h[32+m0]=Q0[32+m0];k6(v0,h.subarray(32),u+32),Q4(v0),RZ(T0,v0),R9(h,T0);for(m0=32;m0<64;m0++)h[m0]=r[m0];k6(N0,h,u+64),Q4(N0);for(m0=0;m0<64;m0++)V0[m0]=0;for(m0=0;m0<32;m0++)V0[m0]=v0[m0];for(m0=0;m0<32;m0++)for(R0=0;R0<32;R0++)V0[m0+R0]+=N0[m0]*Q0[R0];return V6(h.subarray(32),V0),y0}function H6(h,i){var u=G(),r=G(),Q0=G(),N0=G(),v0=G(),m0=G(),R0=G();if(E0(h[2],W),F0(h[1],i),G0(Q0,h[1]),K0(N0,Q0,N),P0(Q0,Q0,h[2]),S0(N0,h[2],N0),G0(v0,N0),G0(m0,v0),K0(R0,m0,v0),K0(u,R0,Q0),K0(u,u,N0),C0(u,u),K0(u,u,Q0),K0(u,u,N0),K0(u,u,N0),K0(h[0],u,N0),G0(r,h[0]),K0(r,r,N0),l0(r,Q0))K0(h[0],h[0],w);if(G0(r,h[0]),K0(r,r,N0),l0(r,Q0))return-1;if(s0(h[0])===i[31]>>7)P0(h[0],J,h[0]);return K0(h[3],h[0],h[1]),0}function RX(h,i,u,r){var Q0,N0=new Uint8Array(32),v0=new Uint8Array(64),m0=[G(),G(),G(),G()],R0=[G(),G(),G(),G()];if(u<64)return-1;if(H6(R0,r))return-1;for(Q0=0;Q0<u;Q0++)h[Q0]=i[Q0];for(Q0=0;Q0<32;Q0++)h[Q0+32]=r[Q0];if(k6(v0,h,u),Q4(v0),JZ(m0,R0,v0),RZ(R0,i.subarray(32)),f4(m0,R0),R9(N0,m0),u-=64,P(i,0,N0,0)){for(Q0=0;Q0<u;Q0++)h[Q0]=0;return-1}for(Q0=0;Q0<u;Q0++)h[Q0]=i[Q0+64];return u}var C8=32,i4=24,e4=32,r6=16,G9=32,V=32,l=32,c=32,R=32,t=i4,_0=e4,d0=r6,K1=64,H1=32,g1=64,v1=32,J6=64;Z.lowlevel={crypto_core_hsalsa20:M,crypto_stream_xor:e,crypto_stream:x,crypto_stream_salsa20_xor:m,crypto_stream_salsa20:v,crypto_onetimeauth:L0,crypto_onetimeauth_verify:W0,crypto_verify_16:A,crypto_verify_32:P,crypto_secretbox:$0,crypto_secretbox_open:a,crypto_scalarmult:n,crypto_scalarmult_base:X0,crypto_box_beforenm:q0,crypto_box_afternm:M0,crypto_box:H0,crypto_box_open:x0,crypto_box_keypair:t0,crypto_hash:k6,crypto_sign:_8,crypto_sign_keypair:_1,crypto_sign_open:RX,crypto_secretbox_KEYBYTES:C8,crypto_secretbox_NONCEBYTES:i4,crypto_secretbox_ZEROBYTES:e4,crypto_secretbox_BOXZEROBYTES:r6,crypto_scalarmult_BYTES:G9,crypto_scalarmult_SCALARBYTES:V,crypto_box_PUBLICKEYBYTES:l,crypto_box_SECRETKEYBYTES:c,crypto_box_BEFORENMBYTES:R,crypto_box_NONCEBYTES:t,crypto_box_ZEROBYTES:_0,crypto_box_BOXZEROBYTES:d0,crypto_sign_BYTES:K1,crypto_sign_PUBLICKEYBYTES:H1,crypto_sign_SECRETKEYBYTES:g1,crypto_sign_SEEDBYTES:v1,crypto_hash_BYTES:J6,gf:G,D:N,L:S6,pack25519:i0,unpack25519:F0,M:K0,A:S0,S:G0,Z:P0,pow2523:C0,add:f4,set25519:E0,modL:V6,scalarmult:JZ,scalarbase:RZ};function c1(h,i){if(h.length!==C8)throw Error("bad key size");if(i.length!==i4)throw Error("bad nonce size")}function A8(h,i){if(h.length!==l)throw Error("bad public key size");if(i.length!==c)throw Error("bad secret key size")}function Q8(){for(var h=0;h<arguments.length;h++)if(!(arguments[h]instanceof Uint8Array))throw TypeError("unexpected type, use Uint8Array")}function h8(h){for(var i=0;i<h.length;i++)h[i]=0}Z.randomBytes=function(h){var i=new Uint8Array(h);return Y(i,h),i},Z.secretbox=function(h,i,u){Q8(h,i,u),c1(u,i);var r=new Uint8Array(e4+h.length),Q0=new Uint8Array(r.length);for(var N0=0;N0<h.length;N0++)r[N0+e4]=h[N0];return $0(Q0,r,r.length,i,u),Q0.subarray(r6)},Z.secretbox.open=function(h,i,u){Q8(h,i,u),c1(u,i);var r=new Uint8Array(r6+h.length),Q0=new Uint8Array(r.length);for(var N0=0;N0<h.length;N0++)r[N0+r6]=h[N0];if(r.length<32)return null;if(a(Q0,r,r.length,i,u)!==0)return null;return Q0.subarray(e4)},Z.secretbox.keyLength=C8,Z.secretbox.nonceLength=i4,Z.secretbox.overheadLength=r6,Z.scalarMult=function(h,i){if(Q8(h,i),h.length!==V)throw Error("bad n size");if(i.length!==G9)throw Error("bad p size");var u=new Uint8Array(G9);return n(u,h,i),u},Z.scalarMult.base=function(h){if(Q8(h),h.length!==V)throw Error("bad n size");var i=new Uint8Array(G9);return X0(i,h),i},Z.scalarMult.scalarLength=V,Z.scalarMult.groupElementLength=G9,Z.box=function(h,i,u,r){var Q0=Z.box.before(u,r);return Z.secretbox(h,i,Q0)},Z.box.before=function(h,i){Q8(h,i),A8(h,i);var u=new Uint8Array(R);return q0(u,h,i),u},Z.box.after=Z.secretbox,Z.box.open=function(h,i,u,r){var Q0=Z.box.before(u,r);return Z.secretbox.open(h,i,Q0)},Z.box.open.after=Z.secretbox.open,Z.box.keyPair=function(){var h=new Uint8Array(l),i=new Uint8Array(c);return t0(h,i),{publicKey:h,secretKey:i}},Z.box.keyPair.fromSecretKey=function(h){if(Q8(h),h.length!==c)throw Error("bad secret key size");var i=new Uint8Array(l);return X0(i,h),{publicKey:i,secretKey:new Uint8Array(h)}},Z.box.publicKeyLength=l,Z.box.secretKeyLength=c,Z.box.sharedKeyLength=R,Z.box.nonceLength=t,Z.box.overheadLength=Z.secretbox.overheadLength,Z.sign=function(h,i){if(Q8(h,i),i.length!==g1)throw Error("bad secret key size");var u=new Uint8Array(K1+h.length);return _8(u,h,h.length,i),u},Z.sign.open=function(h,i){if(Q8(h,i),i.length!==H1)throw Error("bad public key size");var u=new Uint8Array(h.length),r=RX(u,h,h.length,i);if(r<0)return null;var Q0=new Uint8Array(r);for(var N0=0;N0<Q0.length;N0++)Q0[N0]=u[N0];return Q0},Z.sign.detached=function(h,i){var u=Z.sign(h,i),r=new Uint8Array(K1);for(var Q0=0;Q0<r.length;Q0++)r[Q0]=u[Q0];return r},Z.sign.detached.verify=function(h,i,u){if(Q8(h,i,u),i.length!==K1)throw Error("bad signature size");if(u.length!==H1)throw Error("bad public key size");var r=new Uint8Array(K1+h.length),Q0=new Uint8Array(K1+h.length),N0;for(N0=0;N0<K1;N0++)r[N0]=i[N0];for(N0=0;N0<h.length;N0++)r[N0+K1]=h[N0];return RX(Q0,r,r.length,u)>=0},Z.sign.keyPair=function(){var h=new Uint8Array(H1),i=new Uint8Array(g1);return _1(h,i),{publicKey:h,secretKey:i}},Z.sign.keyPair.fromSecretKey=function(h){if(Q8(h),h.length!==g1)throw Error("bad secret key size");var i=new Uint8Array(H1);for(var u=0;u<i.length;u++)i[u]=h[32+u];return{publicKey:i,secretKey:new Uint8Array(h)}},Z.sign.keyPair.fromSeed=function(h){if(Q8(h),h.length!==v1)throw Error("bad seed size");var i=new Uint8Array(H1),u=new Uint8Array(g1);for(var r=0;r<32;r++)u[r]=h[r];return _1(i,u,!0),{publicKey:i,secretKey:u}},Z.sign.publicKeyLength=H1,Z.sign.secretKeyLength=g1,Z.sign.seedLength=v1,Z.sign.signatureLength=K1,Z.hash=function(h){Q8(h);var i=new Uint8Array(J6);return k6(i,h,h.length),i},Z.hash.hashLength=J6,Z.verify=function(h,i){if(Q8(h,i),h.length===0||i.length===0)return!1;if(h.length!==i.length)return!1;return j(h,0,i,0,h.length)===0?!0:!1},Z.setPRNG=function(h){Y=h},function(){var h=typeof globalThis<"u"?globalThis.crypto||globalThis.msCrypto:null;if(h&&h.getRandomValues){var i=65536;Z.setPRNG(function(u,r){var Q0,N0=new Uint8Array(r);for(Q0=0;Q0<r;Q0+=i)h.getRandomValues(N0.subarray(Q0,Q0+Math.min(r-Q0,i)));for(Q0=0;Q0<r;Q0++)u[Q0]=N0[Q0];h8(N0)})}else if(h=c0("crypto"),h&&h.randomBytes)Z.setPRNG(function(u,r){var Q0,N0=h.randomBytes(r);for(Q0=0;Q0<r;Q0++)u[Q0]=N0[Q0];h8(N0)})}()})(typeof Kh<"u"&&d$7?d$7:globalThis.nacl=globalThis.nacl||{});oC=typeof Kh<"u"&&d$7?d$7:globalThis.nacl,j75={fromSeed:oC.sign.keyPair.fromSeed,sign:oC.sign.detached,verify:oC.sign.detached.verify,randomBytes:oC.randomBytes,scalarBaseMultiply:oC.scalarMult.base,seal:oC.box,open:oC.box.open};P75=new Uint16Array([0,4129,8258,12387,16516,20645,24774,28903,33032,37161,41290,45419,49548,53677,57806,61935,4657,528,12915,8786,21173,17044,29431,25302,37689,33560,45947,41818,54205,50076,62463,58334,9314,13379,1056,5121,25830,29895,17572,21637,42346,46411,34088,38153,58862,62927,50604,54669,13907,9842,5649,1584,30423,26358,22165,18100,46939,42874,38681,34616,63455,59390,55197,51132,18628,22757,26758,30887,2112,6241,10242,14371,51660,55789,59790,63919,35144,39273,43274,47403,23285,19156,31415,27286,6769,2640,14899,10770,56317,52188,64447,60318,39801,35672,47931,43802,27814,31879,19684,23749,11298,15363,3168,7233,60846,64911,52716,56781,44330,48395,36200,40265,32407,28342,24277,20212,15891,11826,7761,3696,65439,61374,57309,53244,48923,44858,40793,36728,37256,33193,45514,41451,53516,49453,61774,57711,4224,161,12482,8419,20484,16421,28742,24679,33721,37784,41979,46042,49981,54044,58239,62302,689,4752,8947,13010,16949,21012,25207,29270,46570,42443,38312,34185,62830,58703,54572,50445,13538,9411,5280,1153,29798,25671,21540,17413,42971,47098,34713,38840,59231,63358,50973,55100,9939,14066,1681,5808,26199,30326,17941,22068,55628,51565,63758,59695,39368,35305,47498,43435,22596,18533,30726,26663,6336,2273,14466,10403,52093,56156,60223,64286,35833,39896,43963,48026,19061,23124,27191,31254,2801,6864,10931,14994,64814,60687,56684,52557,48554,44427,40424,36297,31782,27655,23652,19525,15522,11395,7392,3265,61215,65342,53085,57212,44955,49082,36825,40952,28183,32310,20053,24180,11923,16050,3793,7920]);d8=class d8 extends Error{name;code;chainedError;constructor(Z,X){super(Z);this.name="NKeysError",this.code=Z,this.chainedError=X}};(function(Z){Z.InvalidPrefixByte="nkeys: invalid prefix byte",Z.InvalidKey="nkeys: invalid key",Z.InvalidPublicKey="nkeys: invalid public key",Z.InvalidSeedLen="nkeys: invalid seed length",Z.InvalidSeed="nkeys: invalid seed",Z.InvalidCurveSeed="nkeys: invalid curve seed",Z.InvalidCurveKey="nkeys: not a valid curve key",Z.InvalidCurveOperation="nkeys: curve key is not valid for sign/verify",Z.InvalidNKeyOperation="keys: only curve key can seal/open",Z.InvalidEncoding="nkeys: invalid encoded key",Z.InvalidRecipient="nkeys: not a valid recipient public curve key",Z.InvalidEncrypted="nkeys: encrypted input is not valid",Z.CannotSign="nkeys: cannot sign, no private key available",Z.PublicKeyOnly="nkeys: no seed or private key available",Z.InvalidChecksum="nkeys: invalid checksum",Z.SerializationError="nkeys: serialization error",Z.ApiError="nkeys: api error",Z.ClearedPair="nkeys: pair is cleared"})(l8||(l8={}));(function(Z){Z[Z.Unknown=-1]="Unknown",Z[Z.Seed=144]="Seed",Z[Z.Private=120]="Private",Z[Z.Operator=112]="Operator",Z[Z.Server=104]="Server",Z[Z.Cluster=16]="Cluster",Z[Z.Account=0]="Account",Z[Z.User=160]="User",Z[Z.Curve=184]="Curve"})(Y4||(Y4={}));rC=[120,107,118,49];A75(j75);(function(Z){Z.v1="ed25519",Z.v2="ed25519-nkey"})(iJ||(iJ={}))});function p41(Z){try{Z?.clear?.()}catch{}}async function yv8({accountJwt:Z,accountSigningKey:X,expiresAt:G,permissions:Y,userId:Q,allowedConnectionTypes:$=["WEBSOCKET"]}){let J=vv8(Z),W=i41(J.sub),K=n41(new TextEncoder().encode(X)),N=Vv8();try{let F=await bv8(Q,N,W,{pub:{allow:Y.publish.allow},sub:{allow:Y.subscribe.allow},allowed_connection_types:$},{algorithm:iJ.v2,exp:Math.floor(G.getTime()/1000),signer:K});return new TextDecoder().decode(xv8(F,N))}finally{p41(N),p41(K),p41(W)}}var gv8=B(()=>{_v8()});function b75(Z){return/^wss?:\/\//i.test(Z.trim())?["WEBSOCKET"]:["STANDARD","WEBSOCKET"]}function hv8(){let Z=new C1;return Z.post("/links/session",async(X)=>{let Y=X.get("studioContext").auth?.user?.id;if(!Y)return X.json({error:"Unauthorized"},401);let Q=$1();if(!Q.natsTunnelPublicEnabled)return X.json(t41(),503);if(!Q.natsPublicUrl)return X.json(t41(),503);if(!Q.natsAccountJwt||!Q.natsAccountSigningKey){if(!Q.localMode)return X.json(t41(),503)}let $=mJ(Y),J;if(Q.natsAccountJwt&&Q.natsAccountSigningKey){let W=new Date(Date.now()+Q.natsTunnelSessionTtlSeconds*1000);J=await yv8({accountJwt:Q.natsAccountJwt,accountSigningKey:Q.natsAccountSigningKey,expiresAt:W,permissions:Iv8($),userId:Y,allowedConnectionTypes:b75(Q.natsPublicUrl)})}return X.json(qv8({publicUrl:Q.natsPublicUrl,userId:Y,ttlSeconds:Q.natsTunnelSessionTtlSeconds,credentials:J}))}),Z}var t41=()=>({error:"link session unavailable"});var uv8=B(()=>{s6();b8();Mv8();gv8()});function x75(Z){return Z.filter((X)=>X.vendors?.alias).map((X)=>({name:X.name,title:X.title,description:X.description,logo:X.logo,category:X.category,vendor:{alias:X.vendors.alias,url:X.vendors.url}}))}async function _75(Z,X){let G=await fetch(`${Z}/rest/v1/apps?select=name,title,description,logo,category,vendors(alias,url)`,{headers:{apikey:X,Authorization:`Bearer ${X}`,Accept:"application/json"},signal:AbortSignal.timeout(v75)});if(!G.ok){let Y=await G.text().catch(()=>G.statusText);throw console.error(`[deco-apps] Supabase error (${G.status}): ${Y.slice(0,200)}`),Error(`External service error (${G.status})`)}return await G.json()}var v75=1e4,y75=async(Z,X)=>{if(!Z.get("studioContext").auth.user?.id)return Z.json({error:"Unauthorized"},401);return X()},cv8=()=>{let Z=new C1;return Z.use("*",y75),Z.get("/",async(X)=>{let G=$1(),Y=G.decoSupabaseUrl,Q=G.decoSupabaseServiceKey;if(!Y||!Q)return X.json({apps:[]});try{let $=await _75(Y,Q);return X.json({apps:x75($)})}catch($){return console.error("[deco-apps] GET error:",$),X.json({error:"Failed to fetch apps"},502)}}),Z};var lv8=B(()=>{s6();b8()});import{z as h1}from"zod";function gK(Z,X="invalid_request_error",G=null,Y=null){return{error:{message:Z,type:X,param:G,code:Y}}}function p75(Z){if(!Z)return null;let X=Z.indexOf(":");if(X===-1)return{credentialId:null,modelId:Z};let G=Z.substring(0,X),Y=Z.substring(X+1);if(!G||!Y)return null;return{credentialId:G,modelId:Y}}function t75(Z,X,G){try{return JSON.parse(Z)}catch{throw new iv8(`Invalid JSON in tool call arguments for function '${G}' (tool_call_id: ${X}): ${Z}`)}}function o75(Z){let X={};for(let G of Z)if(G.role==="assistant"&&G.tool_calls)for(let Y of G.tool_calls)X[Y.id]=Y.function.name;return Z.map((G)=>{switch(G.role){case"system":return{role:"system",content:G.content};case"user":if(typeof G.content==="string")return{role:"user",content:G.content};return{role:"user",content:G.content.map((Q)=>{if(Q.type==="text")return{type:"text",text:Q.text};return{type:"image",image:Q.image_url.url}})};case"assistant":if(G.tool_calls&&G.tool_calls.length>0)return{role:"assistant",content:G.tool_calls.map((Q)=>({type:"tool-call",toolCallId:Q.id,toolName:Q.function.name,input:t75(Q.function.arguments,Q.id,Q.function.name)}))};return{role:"assistant",content:G.content??""};case"tool":let Y=X[G.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:G.tool_call_id,toolName:Y,output:{type:"text",value:G.content}}]}}})}function r75(Z){let X=Z.map((G)=>{let Y=G.function.parameters?MQ(G.function.parameters):MQ({type:"object",properties:{}});return[G.function.name,y8({description:G.function.description,inputSchema:Y})]});return Object.fromEntries(X)}function a75(Z){if(!Z)return;return{openai:{response_format:Z}}}function s75(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function dv8(Z,X,G,Y,Q,$){let J={model:Z,messages:X,tools:G,temperature:Y.temperature,maxTokens:Y.max_tokens,topP:Y.top_p,frequencyPenalty:Y.frequency_penalty,presencePenalty:Y.presence_penalty,stopSequences:Y.stop?Array.isArray(Y.stop)?Y.stop:[Y.stop]:void 0,abortSignal:$};return Q?{...J,providerOptions:Q}:J}function mv8(Z){if(Z==="tool-calls")return"tool_calls";if(Z==="length")return"length";return"stop"}var g75=256,h75,u75,c75,l75,d75,m75,i75,n75,iv8,nv8,pv8;var tv8=B(()=>{F4();s6();Jh();h75=h1.object({type:h1.literal("function"),function:h1.object({name:h1.string(),description:h1.string().optional(),parameters:h1.record(h1.string(),h1.unknown()).optional()})}),u75=h1.object({id:h1.string(),type:h1.literal("function"),function:h1.object({name:h1.string(),arguments:h1.string()})}),c75=h1.discriminatedUnion("role",[h1.object({role:h1.literal("system"),content:h1.string(),name:h1.string().optional()}),h1.object({role:h1.literal("user"),content:h1.union([h1.string(),h1.array(h1.union([h1.object({type:h1.literal("text"),text:h1.string()}),h1.object({type:h1.literal("image_url"),image_url:h1.object({url:h1.string(),detail:h1.string().optional()})})]))]),name:h1.string().optional()}),h1.object({role:h1.literal("assistant"),content:h1.string().nullable().optional(),name:h1.string().optional(),tool_calls:h1.array(u75).optional()}),h1.object({role:h1.literal("tool"),content:h1.string(),tool_call_id:h1.string()})]),l75=h1.object({type:h1.literal("text")}),d75=h1.object({type:h1.literal("json_object")}),m75=h1.object({type:h1.literal("json_schema"),json_schema:h1.object({name:h1.string(),description:h1.string().optional(),schema:h1.record(h1.string(),h1.unknown()),strict:h1.boolean().optional()})}),i75=h1.union([l75,d75,m75]),n75=h1.object({model:h1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:h1.array(c75),stream:h1.boolean().optional().default(!1),temperature:h1.number().min(0).max(2).optional(),max_tokens:h1.number().positive().optional(),top_p:h1.number().min(0).max(1).optional(),frequency_penalty:h1.number().min(-2).max(2).optional(),presence_penalty:h1.number().min(-2).max(2).optional(),stop:h1.union([h1.string(),h1.array(h1.string())]).optional(),tools:h1.array(h75).optional(),tool_choice:h1.union([h1.literal("auto"),h1.literal("none"),h1.literal("required"),h1.object({type:h1.literal("function"),function:h1.object({name:h1.string()})})]).optional(),response_format:i75.optional(),user:h1.string().optional()});iv8=class iv8 extends Error{constructor(Z){super(Z);this.name="MessageConversionError"}};nv8=new C1;nv8.post("/:org/v1/chat/completions",async(Z)=>{let X=Z.get("studioContext"),G=Z.req.param("org");try{if(!X.auth.apiKey?.id)return Z.json(gK("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!X.organization)return Z.json(gK("Organization context is required. Ensure your API key has organization metadata.","invalid_request_error","organization"),400);if((X.organization.slug??X.organization.id)!==G)return Z.json(gK("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Y=await Z.req.json(),Q=n75.safeParse(Y);if(!Q.success){let L=Q.error.issues[0]??{message:"Invalid request",path:[]};return Z.json(gK(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let $=Q.data,J=p75($.model);if(!J)return Z.json(gK("Invalid model format. Expected 'model_id' or 'credential_id:model_id' (e.g., 'claude-sonnet-4-6' or 'key_abc123:claude-sonnet-4-6')","invalid_request_error","model"),400);let{credentialId:W}=J,{modelId:K}=J;if(!W){let L=await X.storage.aiProviderKeys.list({organizationId:X.organization.id});if(L.length===0)return Z.json(gK("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);W=L[0].id}let N;try{N=await X.aiProviders.activate(W,X.organization.id)}catch{return Z.json(gK(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=N.aiSdk.languageModel(K),U=o75($.messages),H=$.tools?r75($.tools):void 0,w=a75($.response_format),O=s75(),D=Math.floor(Date.now()/1000);if($.stream)return QU(Z,async(L)=>{let E=dv8(F,U,H,$,w,Z.req.raw.signal);try{let z=m3(E),j=!1,A=0,P="",q=async()=>{if(P.length===0)return;let S=P;P="",await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:$.model,choices:[{index:0,delta:{content:S},finish_reason:null}]})})};for await(let S of z.fullStream){if(!j&&(S.type==="text-delta"||S.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:$.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),j=!0;if(S.type==="text-delta"){if(P+=S.text,P.length>=g75)await q()}else if(S.type==="tool-call"){await q();let M=A++;await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:$.model,choices:[{index:0,delta:{tool_calls:[{index:M,id:S.toolCallId,type:"function",function:{name:S.toolName,arguments:JSON.stringify(S.input)}}]},finish_reason:null}]})})}else if(S.type==="finish")await q(),await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:$.model,choices:[{index:0,delta:{},finish_reason:mv8(S.finishReason)}],usage:S.totalUsage?{prompt_tokens:S.totalUsage.inputTokens??0,completion_tokens:S.totalUsage.outputTokens??0,total_tokens:S.totalUsage.totalTokens??0}:void 0})})}await q(),await L.writeSSE({data:"[DONE]"})}catch(z){let j=z;console.error("[openai-compat:stream] Error:",j.message),await L.writeSSE({data:JSON.stringify({error:{message:j.message,type:"server_error"}})})}});else{let L=dv8(F,U,H,$,w,Z.req.raw.signal),E=await cw(L),z={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)z.tool_calls=E.toolCalls.map((j)=>({id:j.toolCallId,type:"function",function:{name:j.toolName,arguments:JSON.stringify("input"in j?j.input:{})}})),z.content=null;return Z.json({id:O,object:"chat.completion",created:D,model:$.model,choices:[{index:0,message:z,finish_reason:mv8(E.finishReason)}],usage:{prompt_tokens:E.usage?.inputTokens??0,completion_tokens:E.usage?.outputTokens??0,total_tokens:E.usage?.totalTokens??0}})}}catch(Y){let Q=Y;if(Q.name==="AbortError")return Z.json(gK("Request aborted","invalid_request_error"),400);if(Q.name==="MessageConversionError")return Z.json(gK(Q.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Q.message,Q.stack),Z.json(gK(Q.message,"server_error"),500)}});pv8=nv8});var rv8;var ov8=B(()=>{rv8={name:"decocms",version:"4.159.0",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts","smoke:link":"bun run scripts/smoke-link.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@anthropic-ai/claude-agent-sdk":"^0.3.181","@duckdb/node-api":"^1.5.0-r.1","@openai/codex":"0.144.3","@openai/codex-darwin-arm64":"npm:@openai/codex@0.144.3-darwin-arm64","@openai/codex-darwin-x64":"npm:@openai/codex@0.144.3-darwin-x64","@openai/codex-linux-arm64":"npm:@openai/codex@0.144.3-linux-arm64","@openai/codex-linux-x64":"npm:@openai/codex@0.144.3-linux-x64","@openai/codex-win32-arm64":"npm:@openai/codex@0.144.3-win32-arm64","@openai/codex-win32-x64":"npm:@openai/codex@0.144.3-win32-x64"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","@resvg/resvg-js":"^2.6.2","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","node-pty":"^1.0.0","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6",satori:"^0.28.2"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/harness":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@decocms/tunnel":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",vite:"^7.2.1",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function XX5(){let Z=process.env.POSTHOG_KEY;if(!Z)return null;return{key:Z,host:process.env.POSTHOG_HOST??ZX5}}var av8,ZX5="https://ph.studio.decocms.com",sv8;var ev8=B(()=>{s6();if0();zO();rZ();b8();i11();ov8();av8=new C1;av8.get("/",(Z)=>{let X={version:rv8.version,theme:uS1(),...wD().logo&&{logo:wD().logo},...o3()&&{internalUrl:L10()},...$1().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!$1().firecrawlApiKey,auth:BM8(),posthog:XX5(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!o3()&&$1().sandboxProviderKind==="agent-sandbox"}};return Z.header("Cache-Control","no-store"),Z.json({success:!0,config:X})});sv8=av8});function Nh(Z){let X=(Z??"").trim().toLowerCase();return X=X.replace(/^https?:\/\//,""),X=X.replace(/^www\./,""),X=X.split(/[/?#]/)[0]??"",X.replace(/\/+$/,"")}function o41(Z){return(Nh(Z).split(".")[0]||Z).replace(/[-_]/g," ").split(" ").filter(Boolean).map((G)=>G.charAt(0).toUpperCase()+G.slice(1)).join(" ")}function r41(Z,X=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Nh(Z))}&sz=${X}`}function Zx8(Z,X){let G=Z.trim();if(G.length<=X)return G;let Y=G.slice(0,X-1),Q=Y.lastIndexOf(" ");return`${(Q>X*0.6?Y.slice(0,Q):Y).trimEnd()}\u2026`}function Xx8(Z){let{brand:X,domain:G,score:Y,verdict:Q}=Z,$=typeof Y==="number"?`${X} commerce report \u2014 ${Math.round(Y)}/100 \xB7 decocms`:`${X} commerce report \xB7 decocms`,J=`See the full ${X} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,W=Q?.trim()?Zx8(`${Q.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):Zx8(`How does ${G} really perform? ${J}`,200);return{title:$,description:W}}import{z as J1}from"zod";var sC,GX5,YX5,QX5,$X5,Gx8;var Yx8=B(()=>{sC=J1.enum(["good","bad","neutral"]),GX5=J1.preprocess((Z)=>{if(Array.isArray(Z))return{kind:"text",value:Z.find((G)=>G!==null&&typeof G!=="object")??""};return Z!==null&&typeof Z==="object"?Z:{kind:"text",value:Z}},J1.object({kind:J1.enum(["text","number","sparkline","badge","score"]).catch("text"),value:J1.coerce.string().optional(),tone:sC.optional(),muted:J1.boolean().optional(),delta:J1.coerce.string().optional(),deltaDir:J1.enum(["up","down","neutral"]).optional(),points:J1.array(J1.coerce.number()).optional(),label:J1.coerce.string().optional()}).transform((Z)=>{if(Z.kind==="badge"&&Z.label==null)Z.label=Z.value??"";if(Z.kind==="score"){let X=Number(Z.value);if(Number.isNaN(X))return{...Z,kind:"text"}}return Z})),YX5=J1.preprocess((Z)=>{let X=Z;if(X&&typeof X==="object"&&!Array.isArray(X)&&Array.isArray(X.cells))X=X.cells;if(Array.isArray(X)&&X.length===1&&Array.isArray(X[0]))X=X[0];if(Array.isArray(X))return X;if(X&&typeof X==="object")return Object.values(X);return X},J1.array(GX5)),QX5={key:J1.coerce.string(),title:J1.coerce.string(),eyebrow:J1.coerce.string().optional(),headline:J1.coerce.string(),annotation:J1.coerce.string().optional(),methodology:J1.coerce.string().optional(),sources:J1.array(J1.object({name:J1.coerce.string(),logoUrl:J1.coerce.string()})).optional()},$X5=J1.discriminatedUnion("template",[J1.object({template:J1.literal("cover"),score:J1.object({value:J1.coerce.number(),max:J1.coerce.number().optional(),grade:J1.coerce.string().optional(),label:J1.coerce.string().optional()}).optional(),brandImage:J1.coerce.string().optional(),screenshot:J1.coerce.string().optional(),mobileScreenshot:J1.coerce.string().optional()}),J1.object({template:J1.literal("cta"),ctaUrl:J1.coerce.string().optional(),ctaLabel:J1.coerce.string().optional(),bullets:J1.array(J1.coerce.string()).optional()}),J1.object({template:J1.literal("series"),points:J1.array(J1.coerce.number()).min(2),xLabels:J1.array(J1.coerce.string()).min(1),unit:J1.coerce.string().optional(),callout:J1.object({index:J1.coerce.number(),value:J1.coerce.string(),tone:sC.optional()})}),J1.object({template:J1.literal("threshold"),value:J1.coerce.string().default(""),metricLabel:J1.coerce.string().optional(),ratio:J1.coerce.number(),thresholdRatio:J1.coerce.number().optional(),thresholdLabel:J1.coerce.string().default(""),tone:sC.optional()}),J1.object({template:J1.literal("stats"),stats:J1.array(J1.object({value:J1.coerce.string(),label:J1.coerce.string(),tone:sC.optional()})).min(1)}),J1.object({template:J1.literal("bars"),items:J1.array(J1.object({value:J1.coerce.string(),label:J1.coerce.string(),ratio:J1.coerce.number(),tone:sC.optional()})).min(1)}),J1.object({template:J1.literal("gauges"),gauges:J1.array(J1.object({label:J1.coerce.string(),value:J1.coerce.string(),status:J1.enum(["good","warn","bad"]).catch("warn"),caption:J1.coerce.string().optional(),ratio:J1.coerce.number().optional()})).min(1)}),J1.object({template:J1.literal("checklist"),checks:J1.array(J1.object({label:J1.coerce.string(),status:J1.enum(["pass","fail","warn"]).catch("fail"),value:J1.coerce.string().optional()})).min(1)}),J1.object({template:J1.literal("table"),columns:J1.array(J1.object({label:J1.coerce.string(),align:J1.enum(["left","right"]).optional()})).min(1),rows:J1.array(YX5).min(1),highlightRow:J1.coerce.number().optional()}),J1.object({template:J1.literal("products"),products:J1.array(J1.object({name:J1.coerce.string(),price:J1.coerce.string().optional(),image:J1.coerce.string().optional(),url:J1.coerce.string().optional()})).min(1)}),J1.object({template:J1.literal("list"),entries:J1.array(J1.object({label:J1.coerce.string(),severity:J1.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:J1.coerce.number().optional()}),J1.object({template:J1.literal("keywords"),volumeLabel:J1.coerce.string().optional(),keywords:J1.array(J1.object({term:J1.coerce.string(),volume:J1.coerce.string(),position:J1.coerce.number().catch(0)})).min(1)}),J1.object({template:J1.literal("competitor"),metricLabel:J1.coerce.string().optional(),competitors:J1.array(J1.object({name:J1.coerce.string(),value:J1.coerce.string(),tone:sC.optional(),isYou:J1.boolean().optional()})).min(1)}),J1.object({template:J1.literal("scorecard"),rivalLabel:J1.coerce.string().optional(),dimensions:J1.array(J1.object({label:J1.coerce.string(),you:J1.coerce.string(),rival:J1.coerce.string().optional(),rivalName:J1.coerce.string().optional(),tone:sC.optional()})).min(1)})]),Gx8=J1.object({...QX5,template:$X5})});function Yj0(Z){let X=[],G=[...Z.sections].sort((Y,Q)=>Y.position-Q.position).map((Y)=>{let Q=Gx8.safeParse(Y.props);if(Q.success)return Q.data;let $=Q.error.issues[0];return X.push({section_type:Y.section_type,position:Y.position,reason:$?`${$.path.join(".")||"(root)"}: ${$.message}`:"contract violation"}),null}).filter((Y)=>Y!==null);return{deck:{meta:{...Z.meta,scores:Z.summary?.scores},slides:G},drops:X}}var a41=B(()=>{Yx8()});function s41(Z){return Buffer.from(Z,"base64")}var Qx8;var $x8=B(()=>{Qx8=[{name:"Inter",data:s41("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"),weight:400,style:"normal"},{name:"Inter",data:s41("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"),weight:600,style:"normal"},{name:"Inter",data:s41("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"),weight:700,style:"normal"}]});import JX5 from"satori";import{Resvg as WX5}from"@resvg/resvg-js";async function NX5(Z){try{let X=await fetch(Z,{signal:AbortSignal.timeout(1500)});if(!X.ok)return null;let G=X.headers.get("content-type")||"image/png";if(!G.startsWith("image/"))return null;let Y=Buffer.from(await X.arrayBuffer()).toString("base64");return`data:${G};base64,${Y}`}catch{return null}}async function Kx8(Z){let X=Z.faviconUrl?await NX5(Z.faviconUrl):null,G=X?TX("div",{width:84,height:84,flexShrink:0,borderRadius:20,backgroundColor:Wx8,display:"flex",alignItems:"center",justifyContent:"center"},TX("img",{},null,{src:X,width:56,height:56})):TX("div",{width:84,height:84,flexShrink:0,borderRadius:20,backgroundColor:Qj0,color:Z51,fontSize:44,fontWeight:700,display:"flex",alignItems:"center",justifyContent:"center"},(Z.initial||Z.domain.charAt(0)||"?").toUpperCase()),Y=TX("div",{width:e41,height:Jx8,display:"flex",flexDirection:"column",justifyContent:"space-between",padding:"72px 80px",backgroundColor:Z51,color:Wx8,fontFamily:"Inter"},[TX("div",{display:"flex",alignItems:"center",gap:22},[G,TX("div",{display:"flex",flexDirection:"column"},[TX("div",{fontSize:24,color:Qj0,fontWeight:600,marginBottom:4},"Commerce report"),TX("div",{fontSize:46,fontWeight:600,letterSpacing:"-0.02em"},Z.domain)])]),TX("div",{display:"flex",alignItems:"flex-end",gap:28},[TX("div",{fontSize:220,fontWeight:700,color:Qj0,lineHeight:0.82,letterSpacing:"-0.05em"},String(Math.round(Z.score))),TX("div",{fontSize:60,fontWeight:400,color:"rgba(244,251,230,0.55)",paddingBottom:30},"/100"),TX("div",{fontSize:30,fontWeight:400,color:"rgba(244,251,230,0.82)",paddingBottom:40},"Commerce health score")]),TX("div",{display:"flex",alignItems:"center",gap:14},[TX("div",{width:44,height:44,borderRadius:11,backgroundColor:Qj0,display:"flex",alignItems:"center",justifyContent:"center"},TX("svg",{},TX("path",{},null,{d:KX5,fill:Z51}),{width:30,height:30,viewBox:"0 0 200 200"})),TX("div",{fontSize:26,fontWeight:700},"decocms")])]),Q=await JX5(Y,{width:e41,height:Jx8,fonts:Qx8}),$=new WX5(Q,{fitTo:{mode:"width",value:e41}}).render().asPng();return Uint8Array.from($)}var e41=1200,Jx8=630,Z51="#07401a",Qj0="#d0ec1a",Wx8="#f4fbe6",KX5="M79.8641 145.438C97.4676 145.438 107.196 137.562 118.777 113.01C125.263 99.5758 130.358 86.1415 136.381 73.1705L143.793 75.4867C145.646 75.95 147.035 75.0235 146.109 73.1705L136.844 55.1037C136.381 53.714 134.528 53.714 133.601 54.1772L111.365 62.5157C109.512 62.979 109.512 64.832 111.365 65.2952L117.851 67.6115C112.292 79.656 105.806 98.186 100.247 109.767C94.2249 122.738 91.4454 131.54 80.7906 131.54C70.1359 131.54 68.7461 123.665 73.3786 112.084C78.4744 98.6493 86.8129 94.9433 96.0779 97.7228C98.8574 94.0168 100.71 88.4578 101.637 83.362C98.8574 82.4355 95.6146 82.4355 92.8351 82.4355C77.5479 82.4355 62.2606 90.3108 55.7751 106.988C48.8263 128.761 56.2383 145.438 79.8641 145.438Z",TX=(Z,X,G,Y={})=>({type:Z,props:{...Y,style:X,children:G}});var Nx8=B(()=>{$x8()});import{join as Fx8}from"path";async function Ux8(Z){try{let X=await fetch(`${b$({})}/api/v2/public/diagnostics/${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(FX5)});if(!X.ok)return null;let G=await X.json(),{deck:Y}=Yj0(G);if(!Y.slides.length)return null;let Q=Y.slides.find((W)=>W.template.template==="cover"),$=Q?.template,J=$&&$.template==="cover"?$:void 0;return{brand:Y.meta.brand?.trim()||o41(Z),score:Y.meta.scores?.cover??J?.score?.value,verdict:Q?.annotation?.trim()||Q?.headline?.trim()||void 0}}catch{return null}}function Z3(Z){return Z.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function UX5(Z,X){let G=Nh(Z),Y=X?.brand?.trim()||o41(G),Q=r41(G,128),J=`${($1().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(G)}`,{title:W,description:K}=Xx8({brand:Y,domain:G,score:X?.score,verdict:X?.verdict}),N=`${J}/og.png`,F=`${Y} commerce report by decocms`;return[`<title>${Z3(W)}</title>`,`<meta name="description" content="${Z3(K)}" />`,'<meta name="robots" content="noindex, follow" />','<meta property="og:type" content="website" />','<meta property="og:site_name" content="decocms" />',`<meta property="og:title" content="${Z3(W)}" />`,`<meta property="og:description" content="${Z3(K)}" />`,`<meta property="og:url" content="${Z3(J)}" />`,`<meta property="og:image" content="${Z3(N)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${Z3(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${Z3(W)}" />`,`<meta name="twitter:description" content="${Z3(K)}" />`,`<meta name="twitter:image" content="${Z3(N)}" />`,`<meta name="twitter:image:alt" content="${Z3(F)}" />`,`<link rel="canonical" href="${Z3(J)}" />`,`<link rel="icon" href="${Z3(Q)}" sizes="any" />`].join(`
2775
2775
  `)}function HX5(Z,X){return Z.replace(/<title>[\s\S]*?<\/title>\s*/i,"").replace(/<meta\s+name="(?:description|twitter:[^"]*)"[^>]*>\s*/gi,"").replace(/<meta\s+property="og:[^"]*"[^>]*>\s*/gi,"").replace(/<link\s+rel="icon"[^>]*>\s*/gi,"").replace("</head>",` ${X}
2776
2776
  </head>`)}async function OX5(Z,X){let G=`${Z}|${Math.round(X)}`,Y=io.get(G);if(Y)return Y;let Q=await Kx8({domain:Z,initial:Z.charAt(0),score:X,faviconUrl:r41(Z,128)});if(io.size>=wX5){let $=io.keys().next().value;if($!==void 0)io.delete($)}return io.set(G,Q),Q}function Hx8(Z){let X=new C1;return X.get("/:domain/og.png",async(G)=>{let Y=Nh(G.req.param("domain")),Q=async()=>{let $=Z?Bun.file(Fx8(Z,"report-og-fallback.png")):null;if(!$||!await $.exists())return G.notFound();return G.body(new Uint8Array(await $.arrayBuffer()),200,{"Content-Type":"image/png","Cache-Control":"public, max-age=0, s-maxage=3600"})};try{let $=await Ux8(Y);if(!$||typeof $.score!=="number")return Q();let J=await OX5(Y,$.score);return G.body(J,200,{"Content-Type":"image/png","Cache-Control":"public, max-age=0, s-maxage=86400"})}catch{return Q()}}),X.get("/:domain",async(G)=>{let Y=G.req.param("domain"),Q=Z?Fx8(Z,"index.html"):null,$=Q?Bun.file(Q):null;if(!$||!await $.exists())return G.notFound();let J=await $.text();try{let W=await Ux8(Nh(Y)),K=UX5(Y,W);return G.html(HX5(J,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return G.html(J)}}),X}var FX5=2500,io,wX5=256;var wx8=B(()=>{s6();a41();Nx8();YH();b8();io=new Map});function no(Z,X){return fetch(`${b$({})}${Z}`,X)}async function BX5(Z,X,G){let Y=new URLSearchParams;if(X)Y.set("pw",X);if(G)Y.set("lang",G);let Q=Y.toString()?`?${Y.toString()}`:"",$=await no(`/api/v2/public/diagnostics/${encodeURIComponent(Z)}${Q}`,{headers:{Accept:"application/json"}});if($.status===404)return{status:"not_found",deck:null,scanned_at:null,drops:[]};if(!$.ok)throw Error(`report read HTTP ${$.status}`);let J=await $.json(),{deck:W,drops:K}=Yj0(J);return{status:W.slides.length?"ready":"empty",deck:W,scanned_at:J.scanned_at,drops:K}}var DX5,eC,Ox8;var Bx8=B(()=>{s6();vQ();YH();a41();DX5=new Set(["complete","errored","terminated","unknown"]),eC=new C1;eC.use("*",async(Z,X)=>{let G=await Q6.api.getSession({headers:Z.req.raw.headers});if(!G?.user?.id)return Z.json({error:"Authentication required"},401,{"Cache-Control":"private, no-store",Vary:"Cookie"});Z.set("reportUser",{email:G.user.email}),await X(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie");return});eC.get("/site/:domain",async(Z)=>{let X=Z.req.param("domain").trim();if(!X)return Z.json({error:"domain is required"},400);let G=Z.req.query("key")?.trim()||void 0,Y=Z.req.query("lang")?.trim()||void 0;try{let Q=await BX5(X,G,Y);return Z.header("Cache-Control","private, no-store"),Z.json(Q)}catch{return Z.json({error:"report read failed"},502)}});eC.post("/run",async(Z)=>{let X;try{X=await Z.req.json()}catch{return Z.json({error:"invalid JSON"},400)}let G=typeof X.domain==="string"?X.domain.trim():"";if(!G)return Z.json({error:"domain is required"},400);let Y=Z.get("reportUser").email,Q=typeof X.distinctId==="string"&&X.distinctId.trim()&&X.distinctId.length<=200?X.distinctId.trim():void 0;try{let $=await no("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${WD({})}`},body:JSON.stringify({url:G,email:Y,distinct_id:Q})});if(!$.ok)return Z.json({error:`run HTTP ${$.status}`},502);let J=await $.json(),W=J.blocked?{state:"blocked"}:J.status==="fresh"?{state:"fresh"}:J.mode==="sync"?{state:"sync"}:{state:"running",id:J.id??null};return Z.json(W)}catch{return Z.json({error:"run failed"},502)}});eC.get("/status",async(Z)=>{let X=Z.req.query("id");if(!X)return Z.json({error:"id is required"},400);try{let G=await no(`/api/v2/diagnostics/status?id=${encodeURIComponent(X)}`,{headers:{Authorization:`Bearer ${WD({})}`}});if(!G.ok)return Z.json({error:`status HTTP ${G.status}`},502);let Q=(await G.json()).status??"unknown",$={done:DX5.has(Q),status:Q};return Z.json($)}catch{return Z.json({error:"status failed"},502)}});eC.get("/link-token/:id",async(Z)=>{let X=Z.req.param("id");try{let G=await no(`/api/v2/public/link-tokens/${encodeURIComponent(X)}`,{headers:{Accept:"application/json"}});if(G.status===404)return Z.json(null);if(!G.ok)return Z.json({error:`link token HTTP ${G.status}`},502);return Z.json(await G.json())}catch{return Z.json({error:"link token resolve failed"},502)}});eC.get("/suggest",async(Z)=>{let X=(Z.req.query("q")??"").trim().slice(0,64);if(X.length<2)return Z.json({suggestions:[]});try{let G=await no(`/api/v2/public/suggest?q=${encodeURIComponent(X)}`,{headers:{Accept:"application/json"}});if(!G.ok)return Z.json({suggestions:[]});let Y=await G.json();return Z.json({suggestions:Array.isArray(Y.suggestions)?Y.suggestions:[]})}catch{return Z.json({suggestions:[]})}});Ox8=eC});import{createHmac as LX5,timingSafeEqual as EX5}from"crypto";function Dx8(Z,X,G,Y=Date.now()){if(!X||!G)return!1;let Q,$=[];for(let N of X.split(",")){let F=N.indexOf("=");if(F<=0)continue;let U=N.slice(0,F).trim(),H=N.slice(F+1).trim();if(U==="t")Q=H;else if(U==="v1")$.push(H)}if(!Q||$.length===0)return!1;let J=Number(Q);if(!Number.isFinite(J)||Math.abs(Y/1000-J)>zX5)return!1;let W=LX5("sha256",G).update(`${Q}.${Z}`).digest("hex"),K=Buffer.from(W,"hex");return $.some((N)=>{let F=Buffer.from(N,"hex");return K.length===F.length&&EX5(K,F)})}function Lx8(Z){let X;try{X=JSON.parse(Z)}catch{return null}let G=W$(X),Y=W$(W$(G?.data)?.object);if(!G||typeof G.type!=="string"||!Y)return null;return{id:J$(G.id),type:G.type,created:typeof G.created==="number"?G.created:void 0,livemode:typeof G.livemode==="boolean"?G.livemode:void 0,data:{object:Y}}}function jX5(Z){switch(Z){case"active":case"trialing":return"active";case"past_due":return"past_due";default:return"canceled"}}function J$(Z){return typeof Z==="string"?Z:void 0}function W$(Z){return typeof Z==="object"&&Z!==null?Z:void 0}function $j0(Z){return typeof Z==="number"?new Date(Z*1000):null}function Y51(Z){return J$(Z)??J$(W$(Z)?.id)}function AX5(Z){return Y51(Z.subscription)??J$(W$(W$(Z.parent)?.subscription_details)?.subscription)}function PX5(Z){let X=$j0(Z.current_period_end);if(X)return X;let G=W$(Z.items)?.data;if(!Array.isArray(G))return null;let Y=0;for(let Q of G){let $=W$(Q)?.current_period_end;if(typeof $==="number"&&$>Y)Y=$}return Y>0?new Date(Y*1000):null}function X51(Z,X){let G=$j0(Z.created);return!!G&&!!X.lastStripeEventAt&&G<X.lastStripeEventAt}function G51(Z,X){let G=$j0(Z.created);if(!G)return;return X.lastStripeEventAt&&X.lastStripeEventAt>G?void 0:G}async function TX5(Z,X){let G=X.data.object;switch(X.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":{let Y=J$(W$(G.metadata)?.orgId);if(!Y)return{handled:!1,reason:"no orgId"};if(J$(W$(G.metadata)?.kind)==="topup"){if(G.mode!=="payment")return{handled:!1,reason:"topup with wrong mode"};if(J$(G.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let W=J$(G.id);if(!W)return console.error("stripe webhook: topup session without id",{eventId:X.id,organizationId:Y}),{handled:!1,reason:"topup session without id"};let K=Number(W$(G.metadata)?.creditCents);if(!Number.isInteger(K)||K<=0)return console.error("stripe webhook: paid topup with bad metadata \u2014 credit NOT applied",{eventId:X.id,organizationId:Y,creditCents:W$(G.metadata)?.creditCents}),{handled:!1,reason:"bad topup metadata"};return{handled:!0,organizationId:Y,topUp:{creditCents:K,referenceId:`stripe-topup:${W}`}}}if(G.mode!=="subscription")return{handled:!1,reason:"not a subscription checkout"};if(J$(G.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let Q=await Z.getBilling(Y);if(!Q)return{handled:!1,reason:"unknown org"};if(Q.legacy||Q.billingMode!=="self_serve")return console.error("stripe webhook: refused checkout bind",{organizationId:Y,eventId:X.id,legacy:Q.legacy,billingMode:Q.billingMode}),{handled:!1,reason:"org is not self-serve"};let $=Y51(G.subscription);if(Q.stripeSubscriptionId&&$&&Q.stripeSubscriptionId!==$)return console.error("stripe webhook: refused checkout rebind",{organizationId:Y,eventId:X.id}),{handled:!1,reason:"org already bound to another subscription",orphanSubscriptionId:$};if(X51(X,Q))return{handled:!1,reason:"stale event"};let J=`stripe-checkout:${J$(G.id)??crypto.randomUUID()}`;return await Z.updateStripeState(Y,{stripeCustomerId:Y51(G.customer),stripeSubscriptionId:$,status:"active",benefitsReferenceId:J,lastStripeEventAt:G51(X,Q)}),{handled:!0,organizationId:Y,benefitsReferenceId:J}}case"customer.subscription.updated":case"customer.subscription.deleted":{let Y=J$(G.id);if(!Y)return{handled:!1,reason:"no sub id"};let Q=await Z.getBillingByStripeSubscriptionId(Y);if(!Q)return{handled:!1,reason:"unknown subscription"};let $=X.type==="customer.subscription.deleted";if(!$&&X51(X,Q))return{handled:!1,reason:"stale event"};let J=$?"canceled":jX5(G.status),W=PX5(G),K=`stripe-sub:${Y}:${J}:${W?.getTime()??0}`;return await Z.updateStripeState(Q.organizationId,{status:J,currentPeriodEnd:W,...$&&{stripeSubscriptionId:null},benefitsReferenceId:K,lastStripeEventAt:G51(X,Q)}),{handled:!0,organizationId:Q.organizationId,benefitsReferenceId:K}}case"invoice.paid":{let Y=AX5(G);if(!Y)return{handled:!1,reason:"no sub id"};let Q=await Z.getBillingByStripeSubscriptionId(Y);if(!Q)return{handled:!1,reason:"unknown subscription"};if(X51(X,Q))return{handled:!1,reason:"stale event"};let $=`stripe-invoice:${J$(G.id)??crypto.randomUUID()}`;return await Z.updateStripeState(Q.organizationId,{status:"active",currentPeriodEnd:$j0(G.period_end),benefitsReferenceId:$,lastStripeEventAt:G51(X,Q)}),{handled:!0,organizationId:Q.organizationId,benefitsReferenceId:$}}default:return{handled:!1,reason:`unhandled event ${X.type}`}}}async function IX5(Z,X){let[G,Y]=await Promise.all([Z.getBilling(X),Z.listPaidSeatUserIds(X)]);if(!hb(G))return;if(await Z68({subscriptionId:G.stripeSubscriptionId,targetQuantity:Y.length}))console.error("stripe webhook: reconciled diverged seat quantity",{organizationId:X,targetQuantity:Y.length})}async function Ex8(Z){let X=new TN(T6().db),G=await TX5(X,Z);if(G.handled&&G.topUp)await SM1({organizationId:G.organizationId,amountCents:G.topUp.creditCents,referenceId:G.topUp.referenceId});if(G.handled&&G.benefitsReferenceId)try{await SN(G.organizationId,G.benefitsReferenceId,"apply")}catch(Y){console.error("Failed to enqueue benefit sync (sweep covers):",Y)}if(G.handled&&RX5.has(Z.type))try{await IX5(X,G.organizationId)}catch(Y){console.error("Failed to reconcile seat quantity (next cycle):",Y)}if(!G.handled&&G.orphanSubscriptionId)try{await e88(G.orphanSubscriptionId),console.error("stripe webhook: canceled orphan subscription",{subscriptionId:G.orphanSubscriptionId,eventId:Z.id})}catch(Y){if(!(Y instanceof fY&&(Y.status===400||Y.status===404)))throw Y}return G}var zX5=300,RX5;var zx8=B(()=>{WY();kb();y_();g00();ub();RX5=new Set(["checkout.session.completed","checkout.session.async_payment_succeeded","invoice.paid"])});var qX5=1048576,Q51;var jx8=B(()=>{s6();gC();b8();zx8();Q51=new C1;Q51.post("/webhook",AX({maxSize:qX5,onError:(Z)=>Z.json({error:"payload too large"},413)}),async(Z)=>{let X=$1().stripeWebhookSecret;if(!X)return Z.json({error:"stripe billing not configured"},503);let G=await Z.req.text();if(!Dx8(G,Z.req.header("stripe-signature"),X))return Z.json({error:"invalid signature"},400);let Q=Lx8(G);if(!Q)return Z.json({error:"invalid payload"},400);let $=await Ex8(Q);return console.log("stripe webhook",{eventId:Q.id,type:Q.type,livemode:Q.livemode,...$}),Z.json({received:!0})})});function Ax8(Z,X){if(X.startsWith("text/html")||X.startsWith("image/svg"))Z.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var Px8,MX5,kX5,Tx8;var Rx8=B(()=>{s6();x$();Sy();lb();Px8=new C1,MX5=["range","if-none-match","if-modified-since"],kX5=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];Px8.get("/:org/files/*",async(Z)=>{let X=Z.get("studioContext"),G=X.organization?.id;if(!X.auth?.user?.id){if(dg(Z))return Z.redirect(`/login?next=${encodeURIComponent(Z.req.path)}`,302);throw new P8(401,{message:"Authentication required"})}if(!G)throw new P8(401,{message:"Organization context required"});let Y=Z.req.path.replace(/^.*\/files\//,"");if(!Y)throw new P8(400,{message:"Missing file key"});let Q=await xp(Y,X);if(!Q)throw new P8(503,{message:"Object storage not configured"});if(Q.startsWith("data:")&&v$()){let K=Q.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new P8(500,{message:"Invalid data URL from storage"});let[,N,F]=K,U=Buffer.from(F,"base64"),H=new Headers({"Content-Type":N,"Cache-Control":"private, max-age=86400"});return Ax8(H,N),new Response(U,{status:200,headers:H})}let $=new Headers;for(let K of MX5){let N=Z.req.header(K);if(N)$.set(K,N)}let J=await fetch(Q,{headers:$});if(J.status===403||J.status===404)throw new P8(404,{message:"File not found"});if(!J.ok&&J.status!==304&&J.status!==416)throw console.error(`[files] upstream storage error ${J.status} for key:`,Y),new P8(502,{message:"Upstream storage error"});let W=new Headers;for(let K of kX5){let N=J.headers.get(K);if(N)W.set(K,N)}return W.set("Cache-Control","private, max-age=86400"),Ax8(W,W.get("content-type")??""),new Response(J.body,{status:J.status,headers:W})});Tx8=Px8});var po=f((Zf)=>{var SX5=Zf&&Zf.__createBinding||(Object.create?function(Z,X,G,Y){if(Y===void 0)Y=G;var Q=Object.getOwnPropertyDescriptor(X,G);if(!Q||("get"in Q?!X.__esModule:Q.writable||Q.configurable))Q={enumerable:!0,get:function(){return X[G]}};Object.defineProperty(Z,Y,Q)}:function(Z,X,G,Y){if(Y===void 0)Y=G;Z[Y]=X[G]}),VX5=Zf&&Zf.__exportStar||function(Z,X){for(var G in Z)if(G!=="default"&&!Object.prototype.hasOwnProperty.call(X,G))SX5(X,Z,G)};Object.defineProperty(Zf,"__esModule",{value:!0});VX5($Q(),Zf)});var Mx8=f((Ix8)=>{Object.defineProperty(Ix8,"__esModule",{value:!0});Ix8.version=void 0;Ix8.version="3.4.0"});var Vx8=f((hK)=>{var CX5=hK&&hK.__importDefault||function(Z){return Z&&Z.__esModule?Z:{default:Z}};Object.defineProperty(hK,"__esModule",{value:!0});hK.NodeTransport=hK.VERSION=void 0;hK.nodeResolveHost=yX5;var n5=po(),fX5=c0("net"),$51=c0("tls"),bX5=c0("path"),kx8=c0("fs"),vX5=CX5(c0("dns")),xX5=Mx8();hK.VERSION=xX5.version;var _X5="nats.js";class Sx8{socket;version;lang;yields=[];signal=(0,n5.deferred)();closedNotification=(0,n5.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=_X5,this.version=hK.VERSION}async connect(Z,X){this.tlsName=Z.tlsName,this.options=X;let{tls:G}=this.options,{handshakeFirst:Y}=G||{};try{if(Y===!0)this.socket=await this.tlsFirst(Z);else this.socket=await this.dial(Z);if(this.done)this.socket?.destroy();let Q=await this.peekInfo();(0,n5.checkOptions)(Q,X);let{tls_required:$,tls_available:J}=Q,W=J===!0&&X.tls!==null;if(!Y&&($||W))this.socket=await this.startTLS();if(this.done)this.socket?.destroy();if($&&this.socket.encrypted!==!0)throw n5.errors.InvalidArgumentError.format("tls","is not available on this server");return this.connected=!0,this.setupHandlers(),this.signal.resolve(),Promise.resolve()}catch(Q){let $=Q;if(!$)$=new n5.errors.ConnectionError("error connecting - node provided an undefined error");let{code:J}=$,W=J==="ECONNREFUSED"?new n5.errors.ConnectionError("connection refused",{cause:$}):$;throw this.socket?.destroy(),W}}dial(Z){let X=(0,n5.deferred)(),G,Y=(0,fX5.createConnection)(Z.port,Z.hostname,()=>{X.resolve(Y),Y.removeAllListeners()});return Y.on("error",(Q)=>{G=Q}),Y.on("close",()=>{Y.removeAllListeners(),X.reject(G)}),Y.setNoDelay(!0),X}get isClosed(){return this.done}close(Z){return this._closed(Z,!1)}peekInfo(){let Z=(0,n5.deferred)(),X;return this.socket.on("data",(G)=>{this.yields.push(G);let Y=n5.DataBuffer.concat(...this.yields),Q=(0,n5.extractProtocolMessage)(Y);if(Q!=="")try{let $=n5.INFO.exec(Q);if(!$)throw Error("unexpected response from server");let J=JSON.parse($[1]);Z.resolve(J)}catch($){Z.reject($)}finally{this.socket.removeAllListeners()}}),this.socket.on("error",(G)=>{X=G}),this.socket.on("close",()=>{this.socket.removeAllListeners(),Z.reject(X)}),Z}loadFile(Z){if(!Z)return Promise.resolve();let X=(0,n5.deferred)();try{if(Z=(0,bX5.resolve)(Z),!(0,kx8.existsSync)(Z))X.reject(Error(`${Z} doesn't exist`));(0,kx8.readFile)(Z,(G,Y)=>{if(G)return X.reject(G);X.resolve(Y)})}catch(G){X.reject(G)}return X}async loadClientCerts(){let Z={},{certFile:X,cert:G,caFile:Y,ca:Q,keyFile:$,key:J}=this.options.tls;try{if(X){let W=await this.loadFile(X);if(W)Z.cert=W}else if(G)Z.cert=G;if($){let W=await this.loadFile($);if(W)Z.key=W}else if(J)Z.key=J;if(Y){let W=await this.loadFile(Y);if(W)Z.ca=[W]}else if(Q)Z.ca=Q;return Promise.resolve(Z)}catch(W){return Promise.reject(W)}}async tlsFirst(Z){let X,G={servername:this.tlsName,rejectUnauthorized:!0};if(this.socket)G.socket=this.socket;if(typeof this.options.tls==="object")try{let Q=await this.loadClientCerts()||{};G=(0,n5.extend)(G,this.options.tls,Q)}catch(Q){return Promise.reject(new n5.errors.ConnectionError(Q.message,{cause:Q}))}let Y=(0,n5.deferred)();try{let Q=(0,$51.connect)(Z.port,Z.hostname,G,()=>{Q.removeAllListeners(),Y.resolve(Q)});Q.on("error",($)=>{X=$}),Q.on("secureConnect",()=>{if(G.rejectUnauthorized===!1)return;if(!Q.authorized)throw Q.authorizationError}),Q.on("close",()=>{Y.reject(X),Q.removeAllListeners()}),Q.setNoDelay(!0)}catch(Q){Y.reject(new n5.errors.ConnectionError(Q.message,{cause:Q}))}return Y}async startTLS(){let Z,X={socket:this.socket,servername:this.tlsName,rejectUnauthorized:!0};if(typeof this.options.tls==="object")try{let Y=await this.loadClientCerts()||{};X=(0,n5.extend)(X,this.options.tls,Y)}catch(Y){return Promise.reject(new n5.errors.ConnectionError(Y.message,{cause:Y}))}let G=(0,n5.deferred)();try{let Y=(0,$51.connect)(X,()=>{Y.removeAllListeners(),G.resolve(Y)});Y.on("error",(Q)=>{Z=Q}),Y.on("secureConnect",()=>{if(X.rejectUnauthorized===!1)return;if(!Y.authorized)throw Y.authorizationError}),Y.on("close",()=>{G.reject(Z),Y.removeAllListeners()})}catch(Y){G.reject(new n5.errors.ConnectionError(Y.message,{cause:Y}))}return G}setupHandlers(){let Z;this.socket.on("data",(X)=>{return this.yields.push(X),this.signal.resolve()}),this.socket.on("error",(X)=>{Z=X}),this.socket.on("end",()=>{if(this.socket?.destroyed)return;this.socket?.write(new Uint8Array(0),()=>{this.socket?.end()})}),this.socket.on("close",()=>{this._closed(Z,!1)})}[Symbol.asyncIterator](){return this.iterate()}async*iterate(){while(!0){if(this.yields.length===0)await this.signal;let Z=this.yields;this.yields=[];for(let X=0;X<Z.length;X++){if(this.options.debug)console.info(`> ${(0,n5.render)(Z[X])}`);yield Z[X]}if(this.done)break;else if(this.yields.length===0)Z.length=0,this.yields=Z,this.signal=(0,n5.deferred)()}}discard(){if(this.done=!0,this.socket)try{this.socket.removeAllListeners(),this.socket.destroy()}catch{}}disconnect(){this._closed(void 0,!0).then().catch()}isEncrypted(){return this.socket instanceof $51.TLSSocket}_send(Z){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,n5.render)(Z)}`);let X=(0,n5.deferred)();try{this.socket.write(Z,(G)=>{if(G){if(this.options.debug)console.error(`!!! ${(0,n5.render)(Z)}: ${G}`);return X.reject(G)}return X.resolve()})}catch(G){if(this.options.debug)console.error(`!!! ${(0,n5.render)(Z)}: ${G}`);X.reject(G)}return X}send(Z){this._send(Z).catch((G)=>{})}async _closed(Z,X=!0){if(!this.connected)return;if(this.done){this.socket?.destroy();return}if(this.closeError=Z,!Z&&this.socket&&X)try{await this._send(new TextEncoder().encode(""))}catch(G){if(this.options.debug)console.log("transport close terminated with an error",G)}try{if(this.socket)this.socket.removeAllListeners(),this.socket?.destroy(),this.socket=void 0}catch(G){console.log(G)}this.done=!0,this.closedNotification.resolve(this.closeError)}closed(){return this.closedNotification}}hK.NodeTransport=Sx8;function yX5(Z){let X=(0,n5.deferred)();return vX5.default.lookup(Z,{all:!0},(G,Y)=>{if(G){X.reject(G);return}let Q=[];for(let $ of Y)Q.push($.address);if(Q.length===0)Q.push(Z);X.resolve(Q)}),X}});var xx8=f((vx8)=>{Object.defineProperty(vx8,"__esModule",{value:!0});vx8.connect=gX5;var Cx8=Vx8(),fx8=po(),bx8=po();function gX5(Z={}){if((0,bx8.hasWsProtocol)(Z))return Promise.reject(bx8.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,fx8.setTransportFactory)({factory:()=>{return new Cx8.NodeTransport},dnsResolveFn:Cx8.nodeResolveHost}),fx8.NatsConnectionImpl.connect(Z)}});var _x8=f((JU)=>{var uX5=JU&&JU.__createBinding||(Object.create?function(Z,X,G,Y){if(Y===void 0)Y=G;var Q=Object.getOwnPropertyDescriptor(X,G);if(!Q||("get"in Q?!X.__esModule:Q.writable||Q.configurable))Q={enumerable:!0,get:function(){return X[G]}};Object.defineProperty(Z,Y,Q)}:function(Z,X,G,Y){if(Y===void 0)Y=G;Z[Y]=X[G]}),cX5=JU&&JU.__exportStar||function(Z,X){for(var G in Z)if(G!=="default"&&!Object.prototype.hasOwnProperty.call(X,G))uX5(X,Z,G)};Object.defineProperty(JU,"__esModule",{value:!0});JU.connect=void 0;var lX5=xx8();Object.defineProperty(JU,"connect",{enumerable:!0,get:function(){return lX5.connect}});cX5(po(),JU)});function ux8(Z){let X=Z?.connectFn??nX5,G=null,Y=null,Q=!1,$=!1,J=!1,W=[];function K(){return G!==null&&!G.isClosed()&&!G.isDraining()&&!J}function N(){console.log(`[NatsProvider] fireReady: ${W.length} callbacks`);for(let H of W)try{H()}catch{}}function F(H){(async()=>{for await(let w of H.status())if(w.type==="disconnect")console.log("[NatsProvider] Disconnected"),J=!0;else if(w.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),J=!1,Y=null,N()})().catch(()=>{})}async function U(H,w){let O=0;while(!$)try{G=await X({servers:H,timeout:iX5,reconnect:!0,maxReconnectAttempts:-1,...w?{authenticator:w}:{}}),console.log(`[NatsProvider] Connected to ${G.getServer()} after ${O} attempt(s)`),Y=null,J=!1,F(G),N();return}catch{O++;let D=eY(mX5,dX5,O-1,2,0.5);await d6(D)}}return{init(H,w){if(Q)return;Q=!0,$=!1;let O=w?.creds?yx8.credsAuthenticator(new TextEncoder().encode(w.creds)):void 0;U(H,O).catch(()=>{})},isConnected(){return K()},getConnection(){return K()?G:null},getJetStream(){if(!K())return null;if(!Y)Y=hx8.jetstream(G);return Y},onReady(H){if(W.push(H),K())try{H()}catch{}},async drain(){if($=!0,Q=!1,Y=null,J=!1,G){let H=G;G=null,await H.drain().catch(()=>{})}}}}function nX5(Z){return gx8.connect(Z)}var yx8,gx8,hx8,dX5=100,mX5=3000,iX5=3000;var cx8=B(()=>{c9();yx8=k(_h(),1),gx8=k(_x8(),1),hx8=k(OB(),1)});function J51(Z,X){return`${Z}.${X}`}class W51{cache;constructor(Z){this.cache=Sg({ttlMs:Z?.ttlMs??pX5,maxSize:Z?.maxSize??tX5})}async get(Z,X){return this.cache.get(J51(Z,X))??null}async set(Z,X,G){this.cache.set(J51(Z,X),G)}async invalidate(Z,X){this.cache.delete(J51(Z,X))}teardown(){this.cache.clear()}}var pX5=600000,tX5=5000;var lx8=()=>{};function Jj0(Z,X){return`${Z}:${X}`}function K51(Z){let X=Sg({ttlMs:Z?.ttlMs??oX5,maxSize:Z?.maxSize??rX5}),G=Z?.getConnection,Y=crypto.randomUUID(),Q=new TextEncoder,$=new TextDecoder,J=null;function W(K,N){let F=G?.();if(!F)return;try{F.publish(dx8,Q.encode(JSON.stringify({organizationId:K,keyId:N,originId:Y})))}catch(U){console.warn("[ProviderKeyCache] Publish failed (non-critical):",U)}}return{get(K,N){return X.get(Jj0(K,N))},set(K,N,F){X.set(Jj0(K,N),F)},invalidate(K,N){X.delete(Jj0(K,N)),W(K,N)},start(){if(J)return;let K=G?.();if(!K)return;J=K.subscribe(dx8),(async()=>{for await(let N of J)try{let F=JSON.parse($.decode(N.data));if(F.originId===Y)continue;X.delete(Jj0(F.organizationId,F.keyId))}catch{}})().catch(console.error)},teardown(){J?.unsubscribe(),J=null,X.clear()}}}var dx8="studio.ai-provider-keys.invalidate",oX5=30000,rX5=5000;var mx8=()=>{};class N51{options;subscriptions=[];onCancel=null;encoder=new TextEncoder;originId=crypto.randomUUID();seenMessageIds=new Set;constructor(Z){this.options=Z}async start(Z){if(Z)this.onCancel=Z;if(this.subscriptions.length>0)return;if(!this.onCancel)return;let X=this.options.getConnection();if(!X)return;let G=new TextDecoder;this.subscriptions=ix8.map((Y)=>X.subscribe(Y));for(let Y of this.subscriptions)(async()=>{for await(let Q of Y)try{let $=JSON.parse(G.decode(Q.data));if($.originId===this.originId)continue;if($.messageId&&this.hasSeen($.messageId))continue;this.onCancel?.($.taskId)}catch{}})().catch(console.error)}broadcast(Z){if(/[.*>\s]/.test(Z)){console.warn("[NatsCancelBroadcast] Invalid threadId, skipping broadcast");return}this.onCancel?.(Z);try{let X=this.options.getConnection();if(!X)return;let G=this.encoder.encode(JSON.stringify({taskId:Z,originId:this.originId,messageId:crypto.randomUUID()}));for(let Y of ix8)X.publish(Y,G)}catch(X){console.warn("[NatsCancelBroadcast] Publish failed (non-critical):",X)}}publishControlFrame(Z,X){}async stop(){for(let Z of this.subscriptions)Z.unsubscribe();this.subscriptions=[],this.seenMessageIds.clear(),this.onCancel=null}hasSeen(Z){if(this.seenMessageIds.has(Z))return!0;if(this.seenMessageIds.add(Z),this.seenMessageIds.size>1000){let X=this.seenMessageIds.values().next().value;if(X)this.seenMessageIds.delete(X)}return!1}}var ix8;var nx8=B(()=>{ix8=["studio.decopilot.cancel","mesh.decopilot.cancel"]});var px8=(Z)=>{let X;return()=>X??=Z()},F51,U51;var tx8=B(()=>{w9();F51=px8(()=>D6.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),U51=px8(()=>D6.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function YG5(){return{name:TF,subjects:[`${Ei0}.>`],storage:nJ.StorageType.File,max_age:eX5,max_bytes:XG5,max_msgs_per_subject:GG5,discard:nJ.DiscardPolicy.Old,retention:nJ.RetentionPolicy.Limits,duplicate_window:ZG5,num_replicas:1}}class ax8{chunks=0;encodeMs=0;maxMs=0;bytes=0;windowStart=performance.now();constructor(){setInterval(()=>this.flush(),1e4).unref?.()}record(Z,X){if(this.chunks++,this.encodeMs+=Z,Z>this.maxMs)this.maxMs=Z;this.bytes+=X}flush(){let Z=performance.now(),X=Z-this.windowStart;if(this.chunks>0&&X>0)console.warn(JSON.stringify({msg:"stream-encode-trace",windowMs:Math.round(X),chunks:this.chunks,encodeMs:Math.round(this.encodeMs),pctOfLoop:+(this.encodeMs/X*100).toFixed(1),maxChunkMs:+this.maxMs.toFixed(2),mbEncoded:+(this.bytes/1048576).toFixed(2)}));this.chunks=0,this.encodeMs=0,this.maxMs=0,this.bytes=0,this.windowStart=Z}}function ox8(Z){let X=rx8.headers();for(let[G,Y]of Object.entries(Z))X.set(G,Y);return X}function WG5(Z,X){let G=0;return{publish(Y,Q,$,J){Y.publish(Q,$,J?{headers:J}:void 0).catch((W)=>{if(G++,sX5().add(1,{"org.id":X??"unknown"}),G===1||G%100===0)console.warn(`[Decopilot] JetStream publish failed for thread ${Z} (${G} total):`,W)})},get errorCount(){return G}}}function KG5(Z){if(!(Z instanceof Error))return!1;if(Z.name==="TimeoutError")return!0;return/timeout|no responders|503/i.test(Z.message)}class H51{options;js=null;jsm=null;constructor(Z){this.options=Z}async init(){let Z=this.options.getConnection();if(!Z){console.log("[Decopilot] StreamBuffer.init skipped: NATS not connected yet");return}let X=YG5(),G=await ZQ(async()=>{let Y=this.options.getJetStreamManager?await this.options.getJetStreamManager():await nJ.jetstreamManager(Z);try{await Y.streams.info(TF),await Y.streams.update(TF,X)}catch(Q){if(Q instanceof Error&&Q.message.includes("stream not found"))await Y.streams.add(X);else if(Q instanceof Error&&/can ?not change.*storage|storage type/i.test(Q.message))await Y.streams.delete(TF),await Y.streams.add(X);else throw Q}return Y},{maxAttempts:5,minTimeout:250,maxTimeout:4000,jitter:0.5,isRetriable:KG5});this.js=this.options.getJetStream(),this.jsm=G,console.log(`[Decopilot] StreamBuffer.init ${this.js?"ready":"degraded (js=null)"}`)}pump(Z,X,G,Y){let Q=this.js;if(!Q)return console.warn(`[Decopilot] pump: JetStream client unavailable for thread ${X}; chunks NOT published to NATS`),Promise.resolve();let $=WG5(X,Y),J=!1,W=()=>{if(J)return;J=!0;let N=cZ8(X);Q.publish(N.subject,N.data).catch(()=>{})};G.addEventListener("abort",W,{once:!0});let K=(N)=>{let F=performance.now(),U=ji0(N,{runId:X}),H=performance.now()-F;if(F51().record(H),U51().add(1,{"org.id":Y??"unknown"}),JG5?.record(H,U.reduce((w,O)=>w+O.data.length,0)),U.length===0){console.warn(`[Decopilot] dropping oversized stream chunk for thread ${X}`);return}for(let w of U)$.publish(Q,w.subject,w.data,w.headers?ox8(w.headers):void 0)};return(async()=>{let N=Z.getReader(),F=0,U=0,H;try{while(!0){let{done:w,value:O}=await N.read();if(w)break;if(K(O),U++,++F>=64)F=0,await new Promise((D)=>setImmediate(D))}}catch(w){H=w,console.warn(`[Decopilot] stream pump error for thread ${X}:`,w?.message??w)}finally{if(N.releaseLock(),W(),$G5)console.warn(JSON.stringify({msg:"decopilot-stream-diag",event:"pump-done",taskId:X,publishedChunks:U,publishErrors:$.errorCount}))}if(H!==void 0)throw H})()}async publishRawChunk(Z,X,G){let Y=this.js;if(!Y)return!1;let Q=performance.now(),$=ji0(X,{runId:Z,dedup:G});if(F51().record(performance.now()-Q),U51().add(1),$.length===0)return console.warn(`[Decopilot] dropping oversized raw chunk for thread ${Z} (> MAX_CHUNKED_BYTES)`),!0;for(let J of $)await Y.publish(J.subject,J.data,{...J.headers?{headers:ox8(J.headers)}:{},...J.msgId?{msgID:J.msgId}:{}});return!0}async publishDone(Z,X,G){let Y=this.js;if(!Y)return!1;let Q=uZ8({runId:Z,fenceToken:X,finalSeq:G});return await Y.publish(Q.subject,Q.data,{msgID:Q.msgId}),!0}async createTailStream(Z,X,G){let Y=this.js;if(!Y)return console.warn(`[Decopilot] createTailStream: JetStream client unavailable for thread ${Z}; no live tail`),null;let Q=G?.deliverPolicy==="new"?nJ.DeliverPolicy.New:nJ.DeliverPolicy.All,$=G?.closeOnDone??!1,J=dw(Z),W;try{W=await(await Y.consumers.get(TF,{filter_subjects:J,deliver_policy:Q})).consume()}catch(D){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",D?.message??D),null}let F=F70({messages:async function*(){try{for await(let D of W)yield{subject:D.subject,data:D.data,headers:D.headers}}finally{W.stop()}}(),onCancel:()=>W.stop()}).pipeThrough(W70()).pipeThrough(K70()).getReader(),U=!1,H=()=>{if(U)return;U=!0;try{F.releaseLock()}catch{}},w=!1,O=()=>{if(w)return;w=!0,W.stop(),F.cancel().catch(()=>{}),H()};return X?.addEventListener("abort",O,{once:!0}),new ReadableStream({async pull(D){for(;;){let{done:L,value:E}=await F.read();if(L){O(),D.close();return}let z=E;if(z.kind==="done"){if($){O(),D.close();return}continue}D.enqueue(z.chunk);return}},cancel(){O()}})}purge(Z){if(!this.jsm)return;this.jsm.streams.purge(TF,{filter:dw(Z)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var nJ,rx8,aX5=(Z)=>{let X;return()=>X??=Z()},sX5,eX5=86400000000000,ZG5=120000000000,XG5=4294967296,GG5=500000,QG5,$G5,JG5;var sx8=B(()=>{c9();Pi0();U70();Ai0();w9();tx8();nJ=k(OB(),1),rx8=k(_h(),1),sX5=aX5(()=>D6.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"}));QG5=process.env.STREAM_ENCODE_TRACE==="1",$G5=process.env.DECOPILOT_STREAM_TRACE==="1";JG5=QG5?new ax8:null});import{z as $6}from"zod";var ex8,Z_8,uK,w51,X_8,G_8,Y_8,Q_8,NG5,$_8,J_8,W_8,K_8,N_8,FG5,F_8,IW7,UG5,HG5=(Z)=>{return Z.issues.map((X)=>{return`${X.path.length>0?X.path.join("."):"frame"}: ${X.message}`}).join("; ")},U_8=(Z)=>{return new TextEncoder().encode(JSON.stringify(Z))},H_8=(Z)=>{let X;try{X=JSON.parse(new TextDecoder().decode(Z))}catch($){throw TypeError("malformed JSON in tunnel frame",{cause:$})}if(X===null||typeof X!=="object"||Array.isArray(X))throw TypeError("frame must be an object");if(!("type"in X))throw TypeError("frame type missing");let G=X.type,Y=typeof G==="string"?UG5[G]:void 0;if(!Y)throw TypeError(`unknown frame type: ${String(G)}`);let Q=Y.safeParse(X);if(!Q.success)throw TypeError(`invalid tunnel frame: ${HG5(Q.error)}`);return Q.data};var w_8=B(()=>{ex8=$6.string().regex(/^[A-Za-z0-9_-]*$/u),Z_8=$6.array($6.tuple([$6.string(),$6.string()])),uK=$6.string().regex(/^[A-Za-z0-9_-]+$/u),w51=$6.string().min(1),X_8=$6.object({type:$6.literal("request.start"),protocol:$6.literal("tunnel.v1"),requestId:uK,method:$6.string().min(1),url:$6.string().min(1),headers:Z_8,replySubject:w51,bodySubject:w51.optional(),abortSubject:w51,deadlineUnixMs:$6.number().int().nonnegative().optional()}),G_8=$6.object({type:$6.literal("request.chunk"),requestId:uK,seq:$6.number().int().nonnegative(),data:ex8}),Y_8=$6.object({type:$6.literal("request.end"),requestId:uK,seq:$6.number().int().nonnegative()}),Q_8=$6.object({type:$6.literal("request.error"),requestId:uK,code:$6.string().min(1),message:$6.string()}),NG5=$6.union([G_8,Y_8,Q_8]),$_8=$6.object({type:$6.literal("response.ack"),requestId:uK}),J_8=$6.object({type:$6.literal("response.start"),requestId:uK,status:$6.number().int().min(100).max(599),statusText:$6.string().optional(),headers:Z_8}),W_8=$6.object({type:$6.literal("response.chunk"),requestId:uK,seq:$6.number().int().nonnegative(),data:ex8}),K_8=$6.object({type:$6.literal("response.end"),requestId:uK,seq:$6.number().int().nonnegative()}),N_8=$6.object({type:$6.literal("response.error"),requestId:uK,code:$6.string().min(1),message:$6.string()}),FG5=$6.union([$_8,J_8,W_8,K_8,N_8]),F_8=$6.object({type:$6.literal("abort"),requestId:uK,reason:$6.string().optional()}),IW7=$6.union([X_8,NG5,FG5,F_8]),UG5={"request.start":X_8,"request.chunk":G_8,"request.end":Y_8,"request.error":Q_8,"response.ack":$_8,"response.start":J_8,"response.chunk":W_8,"response.end":K_8,"response.error":N_8,abort:F_8}});var wG5=(Z)=>{return Z.replaceAll("+","-").replaceAll("/","_").replaceAll("=","")},OG5=(Z)=>{let X=Z.replaceAll("-","+").replaceAll("_","/"),G=(4-X.length%4)%4;return X+"=".repeat(G)},BG5=(Z)=>{let X=[];for(let G=0;G<Z.length;G+=32768)X.push(String.fromCharCode(...Z.subarray(G,G+32768)));return X.join("")},DG5=(Z)=>{let X=new Uint8Array(Z.length);for(let G=0;G<Z.length;G+=32768){let Y=Z.slice(G,G+32768);X.set(Uint8Array.from(Y,(Q)=>Q.charCodeAt(0)),G)}return X},O_8=(Z)=>{return wG5(btoa(BG5(Z)))},B_8=(Z)=>{return DG5(atob(OG5(Z)))},LG5;var D_8=B(()=>{LG5=class LG5{#Z=[];#X;#G=!1;#$=new Set;push(Z){if(this.#G)return;let X=this.#Q();if(X){X.resolve({value:Z,done:!1});return}this.#Z.push(Z)}close(){if(this.#G)return;this.#G=!0,this.#Y()}fail(Z){if(this.#G)return;this.#X=Z,this.#G=!0,this.#J(Z)}[Symbol.asyncIterator](){let Z=!1,X=new Set;return{next:()=>{if(Z)return Promise.resolve({value:void 0,done:!0});if(this.#Z.length>0)return Promise.resolve({value:this.#Z.shift(),done:!1});if(this.#X)return Promise.reject(this.#X);if(this.#G)return Promise.resolve({value:void 0,done:!0});return new Promise((G,Y)=>{let Q;Q={resolve:($)=>{X.delete(Q),G($)},reject:($)=>{X.delete(Q),Y($)}},X.add(Q),this.#$.add(Q)})},return:()=>{Z=!0;for(let G of X)this.#$.delete(G),G.resolve({value:void 0,done:!0});return X.clear(),Promise.resolve({value:void 0,done:!0})}}}#Q(){for(let Z of this.#$)return this.#$.delete(Z),Z;return}#Y(){for(let Z of this.#$)Z.resolve({value:void 0,done:!0});this.#$.clear()}#J(Z){for(let X of this.#$)X.reject(Z);this.#$.clear()}}});function*MG5(Z,X){for(let G=0;G<Z.length;G+=X)yield Z.subarray(G,G+X)}class xG5{maxSize;ttlMs;now;#Z=new Map;constructor(Z,X,G=Date.now){this.maxSize=Z;this.ttlMs=X;this.now=G}get(Z){let X=this.#Z.get(Z);if(!X)return;if(X.expiresAt<=this.now()){this.#Z.delete(Z);return}return X.value}has(Z){return this.get(Z)!==void 0}set(Z,X){let G=this.now();this.prune(G),this.#Z.delete(Z),this.#Z.set(Z,{value:X,expiresAt:G+this.ttlMs});while(this.#Z.size>this.maxSize){let Y=this.#Z.keys().next().value;if(Y===void 0)return;this.#Z.delete(Y)}}take(Z){let X=this.get(Z);return this.#Z.delete(Z),X}clear(){this.#Z.clear()}prune(Z){for(let[X,G]of this.#Z)if(G.expiresAt<=Z)this.#Z.delete(X)}}var EG5=30000,zG5=1000,jG5=65536,K$,AG5=(Z)=>{return"connection"in Z},PG5=(Z)=>{let X=AG5(Z)?Z:{connection:Z};return{connection:X.connection,timeoutMs:X.timeoutMs??0,firstFrameTimeoutMs:X.firstFrameTimeoutMs??EG5,idleTimeoutMs:X.idleTimeoutMs??0,republishIntervalMs:X.republishIntervalMs??zG5,maxChunkBytes:X.maxChunkBytes??jG5,diagnostics:X.diagnostics}},L_8=(Z)=>{return Array.from(Z.entries())},TG5=(Z)=>{return Z!==void 0&&!(Z instanceof Headers)&&typeof Z!=="function"&&typeof Z[Symbol.iterator]==="function"},RG5=(Z,X,G)=>{if(TG5(X?.headers))return Array.from(X?.headers,([Y,Q])=>[String(Y),String(Q)]);if(Z instanceof Request)return L_8(G.headers);return L_8(G.headers)},E_8=(Z)=>{let X=new Headers;for(let[G,Y]of Z)X.append(G,Y);return X},IG5=()=>{return crypto.randomUUID().replaceAll("-","")},qG5=(Z)=>{try{Z?.unsubscribe()}catch{}},kG5=(Z)=>{if(!Number.isSafeInteger(Z)||Z<1)throw TypeError("maxChunkBytes must be a positive safe integer")},SG5=(Z,X)=>{return Z==="HEAD"||X===204||X===205||X===304},aO=(Z,X,G)=>{Z.publish(X,U_8(G))},VG5=(Z)=>{return Z.type.startsWith("response.")},O51=(Z)=>{let X=Z.reason;if(X instanceof Error)return X.message;if(typeof X==="string")return X;return"aborted"},CG5=(Z)=>{if(Z==="idle")return new K$("tunnel_idle_timeout","no response frame within idleTimeoutMs");return new K$("tunnel_no_first_frame","no response frame arrived before firstFrameTimeoutMs")},z_8=async(Z,X,G,Y,Q="first_frame")=>{while(!0){let $,J;try{let W=await Promise.race([Z.next(),new Promise((N,F)=>{if(Y.aborted){F(Y.reason);return}let U=()=>F(Y.reason);J=()=>{Y.removeEventListener("abort",U)},Y.addEventListener("abort",U,{once:!0})}),...G>0?[new Promise((N,F)=>{$=setTimeout(()=>{F(CG5(Q))},G)})]:[]]);if(W.done)return{value:void 0,done:!0};let K=H_8(W.value.data);if(!VG5(K)||K.requestId!==X)continue;return{value:K,done:!1}}finally{if(J?.(),$)clearTimeout($)}}},fG5=async(Z)=>{let X=!1;while(!0){let G=await z_8(Z.iterator,Z.requestId,X?0:Z.firstFrameTimeoutMs,Z.signal);if(G.done)throw new K$("tunnel_response_closed","response subscription closed before response.start");if(!X)X=!0,Z.onFirstResponseFrame();if(G.value.type==="response.ack")continue;if(G.value.type==="response.start")return G.value;if(G.value.type==="response.error")throw new K$(G.value.code,G.value.message);throw new K$("tunnel_unexpected_response_frame",`expected response.start, got ${G.value.type}`)}},bG5=async(Z)=>{let X=Z.body.getReader(),G=0,Y=!1,Q=()=>{Y=!0,X.cancel(Z.signal.reason).catch(()=>{})};try{if(Z.signal.aborted){Q();return}Z.signal.addEventListener("abort",Q,{once:!0});while(!0){let{done:$,value:J}=await X.read();if(Y)return;if($){aO(Z.connection,Z.subject,{type:"request.end",requestId:Z.requestId,seq:G});return}for(let W of MG5(J,Z.maxChunkBytes)){if(Y)return;aO(Z.connection,Z.subject,{type:"request.chunk",requestId:Z.requestId,seq:G,data:O_8(W)}),G++}}}catch($){if(Y)return;aO(Z.connection,Z.subject,{type:"request.error",requestId:Z.requestId,code:"tunnel_request_body_error",message:$ instanceof Error?$.message:String($)})}finally{Z.signal.removeEventListener("abort",Q),X.releaseLock()}},vG5=(Z)=>{return new ReadableStream({async pull(X){while(!0)try{let G=await z_8(Z.iterator,Z.requestId,Z.idleTimeoutMs,Z.signal,"idle");if(G.done){X.error(new K$("tunnel_response_closed","response subscription closed before response.end")),Z.cleanup();return}let Y=G.value;if(Y.type==="response.ack"||Y.type==="response.start")continue;if(Y.type==="response.chunk"){X.enqueue(B_8(Y.data));return}if(Y.type==="response.end"){X.close(),Z.cleanup();return}X.error(new K$(Y.code,Y.message)),Z.cleanup();return}catch(G){X.error(G),Z.cleanup();return}},cancel(){aO(Z.connection,Z.abortSubject,{type:"abort",requestId:Z.requestId,reason:"response_body_cancelled"}),Z.cleanup()}},{highWaterMark:0})},sO=(Z)=>{let X=PG5(Z);return kG5(X.maxChunkBytes),async(G,Y)=>{let Q=Tv8(G),$=new Request(G,Y),J=IG5(),W=Rv8(Q.hostname,J),K=new AbortController,N=new AbortController,F=!1,U,H,w,O,D=!1,L=(A=new K$("tunnel_closed","tunnel request closed"))=>{if(F)return;if(F=!0,qG5(U),$.body&&!D)$.body.cancel(A).catch(()=>{});if(N.abort(A),K.abort(A),w)clearInterval(w);if(O)clearTimeout(O);$.signal.removeEventListener("abort",E)},E=()=>{let A=new K$("tunnel_aborted",O51($.signal));aO(X.connection,W.abort,{type:"abort",requestId:J,reason:O51($.signal)}),K.abort(A),L(A)};if($.signal.aborted)throw new K$("tunnel_aborted",O51($.signal));if(U=X.connection.subscribe(W.reply),H=U[Symbol.asyncIterator](),$.signal.addEventListener("abort",E,{once:!0}),X.timeoutMs>0)O=setTimeout(()=>{let A=new K$("tunnel_timeout",`tunnel request timed out after ${X.timeoutMs}ms`);aO(X.connection,W.abort,{type:"abort",requestId:J,reason:"tunnel_timeout"}),K.abort(A),L(A)},X.timeoutMs);let z={type:"request.start",protocol:"tunnel.v1",requestId:J,method:$.method,url:Q.pathWithSearch,headers:RG5(G,Y,$),replySubject:W.reply,abortSubject:W.abort,...$.body?{bodySubject:W.body}:{},...X.timeoutMs>0?{deadlineUnixMs:Date.now()+X.timeoutMs}:{}};aO(X.connection,W.request,z),w=X.republishIntervalMs>0?setInterval(()=>{if(!D)aO(X.connection,W.request,z)},X.republishIntervalMs):void 0;let j=()=>{if(D)return;D=!0,($.body?bG5({connection:X.connection,subject:W.body,requestId:J,body:$.body,maxChunkBytes:X.maxChunkBytes,signal:N.signal}):void 0)?.catch((P)=>{X.diagnostics?.({event:"request_body_error",requestId:J,subject:W.body,error:P instanceof Error?P.message:String(P)})})};try{let A=await fG5({iterator:H,requestId:J,firstFrameTimeoutMs:X.firstFrameTimeoutMs,signal:K.signal,onFirstResponseFrame:()=>{if(w)clearInterval(w);j()}});if(SG5($.method,A.status))return L(),new Response(null,{status:A.status,statusText:A.statusText,headers:E_8(A.headers)});return new Response(vG5({connection:X.connection,abortSubject:W.abort,iterator:H,requestId:J,idleTimeoutMs:X.idleTimeoutMs,signal:K.signal,cleanup:L}),{status:A.status,statusText:A.statusText,headers:E_8(A.headers)})}catch(A){throw L(A instanceof Error?A:Error(String(A))),A}}};var j_8=B(()=>{w_8();D_8();ez0();K$=class K$ extends Error{code;constructor(Z,X,G){super(`${Z}: ${X}`,G);this.code=Z;this.name="TunnelTransportError"}}});var Wj0=B(()=>{j_8()});function A_8(Z){let X=Z.createFetch??_G5,G=Z.timeoutMs??2000;return async(Y)=>{try{let Q=Z.getConnection();if(!Q)return B51;let $=mJ(Y),W=await X(Q,G)(`tunnel://${$}/api/links/status`,{method:"GET"});if(!W.ok)return B51;let K=await W.json();return{online:!0,hostname:K.hostname,capabilities:K.capabilities??[],cliVersion:K.cliVersion}}catch{return B51}}}var B51,_G5=(Z,X)=>sO({connection:Z,firstFrameTimeoutMs:X});var P_8=B(()=>{Wj0();lo();B51={online:!1,capabilities:[]}});async function*yG5(Z){if(!Z.body){yield{headers:{status:Z.status,headers:Object.fromEntries(Z.headers.entries())}};return}let X=Z.body.getReader(),G=!1;try{yield{headers:{status:Z.status,headers:Object.fromEntries(Z.headers.entries())}};while(!0){let{done:Y,value:Q}=await X.read();if(Y){G=!0;return}yield{data:Buffer.from(Q).toString("base64")}}}finally{try{if(!G)await X.cancel()}catch{}finally{X.releaseLock()}}}function T_8(Z){let X=Z.createFetch??((G)=>sO({connection:G,idleTimeoutMs:gG5}));return async function*(Y,Q,$){let J=Z.getConnection();if(!J)throw Error("link_unavailable: NATS unavailable");let W=mJ(Y),K=X(J),N={method:Q.method,headers:Q.headers,signal:$?.signal};if(Q.body!=null)N.body=Q.body;let F=await K(`tunnel://${W}${Q.path}`,N);yield*yG5(F)}}var gG5=45000;var R_8=B(()=>{Wj0();lo()});import{z as pJ}from"zod";function I_8(Z){return JSON.stringify(Z)}var ZK7;var q_8=B(()=>{ZK7=pJ.discriminatedUnion("type",[pJ.object({type:pJ.literal("cancel"),runId:pJ.string()}),pJ.object({type:pJ.literal("cancel_req"),reqId:pJ.string()}),pJ.object({type:pJ.literal("keep_alive")}),pJ.object({type:pJ.literal("shutdown")})])});function M_8(Z){let X=Z.createFetch??((G)=>sO({connection:G,idleTimeoutMs:hG5}));return{async publish(G,Y,Q){let $=Z.getConnection();if(!$)throw Error("link_unavailable: NATS unavailable");let J=mJ(G),K=await X($)(`tunnel://${J}/api/links/work`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(Y),signal:Q?.signal});if(!K.ok){let N=await K.text().catch(()=>"");throw Error(`tunnel work publish failed (${K.status})${N?`: ${N}`:""}`)}await K.body?.cancel().catch(()=>{})}}}function k_8(Z){let X=Z.createFetch??sO;return{async publishControlFrame(G,Y,Q){let $=Z.getConnection();if(!$)throw Error("link_unavailable: NATS unavailable");let J=mJ(G),K=await X($)(`tunnel://${J}/api/links/control`,{method:"POST",headers:{"content-type":"application/json"},body:I_8(Y),signal:Q?.signal});if(!K.ok){let N=await K.text().catch(()=>"");throw Error(`tunnel control publish failed (${K.status})${N?`: ${N}`:""}`)}await K.body?.cancel().catch(()=>{})}}}var hG5=45000;var S_8=B(()=>{Wj0();q_8();lo()});function Kj0(Z,X,G,Y){if(!Y)return!1;return Z.emit(X,UW(G,Y.status,{title:Y.title??void 0,virtualMcpId:Y.virtual_mcp_id??void 0,createdBy:Y.created_by??void 0,triggerId:Y.trigger_id??null,branch:Y.branch??null,createdAt:Y.created_at,updatedAt:Y.updated_at})),!0}var V_8=B(()=>{R6()});class D51{storage;options;timer=null;constructor(Z,X={}){this.storage=Z;this.options=X}start(){if(this.timer)return;let Z=this.options.intervalMs??300000;this.timer=setInterval(()=>{this.runOnce()},Z)}async runOnce(){let Z=this.options.staleAfterMs??3600000;try{let X=await this.storage.sweepAbandoned(Z);if(X>0)console.log(`[async-research-sweeper] marked ${X} stale jobs as abandoned`);return X}catch(X){return console.error("[async-research-sweeper] sweep failed",X),0}}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}import{readdir as uG5,rm as Nj0}from"fs/promises";import{join as Fj0}from"path";async function Uj0(Z){let X=new Date;X.setUTCDate(X.getUTCDate()-cG5),X.setUTCHours(0,0,0,0);let G=0;try{let Y=await Xf(Z);for(let Q of Y)if(/^\d{4}$/.test(Q))G+=await C_8(Z,Q,X);else if(!Q.startsWith(".")){let $=Fj0(Z,Q),J=await Xf($);for(let K of J){if(!/^\d{4}$/.test(K))continue;G+=await C_8($,K,X)}if((await Xf($)).length===0)await Nj0($,{recursive:!0,force:!0})}}catch(Y){console.warn("monitoring retention cleanup failed:",Y)}return G}async function C_8(Z,X,G){let Y=0,Q=Fj0(Z,X),$=await Xf(Q);for(let W of $){if(!/^\d{2}$/.test(W))continue;let K=Fj0(Q,W),N=await Xf(K);for(let U of N){if(!/^\d{2}$/.test(U))continue;let H=new Date(`${X}-${W}-${U}T00:00:00Z`);if(isNaN(H.getTime()))continue;if(H<G){let w=Fj0(K,U);await Nj0(w,{recursive:!0,force:!0}),Y++}}if((await Xf(K)).length===0)await Nj0(K,{recursive:!0,force:!0})}if((await Xf(Q)).length===0)await Nj0(Q,{recursive:!0,force:!0});return Y}async function Xf(Z){try{return(await uG5(Z)).filter((G)=>!G.startsWith("."))}catch{return[]}}var cG5=30;var L51=()=>{};import{DBOS as E51,SchedulerMode as lG5}from"@dbos-inc/dbos-sdk";async function mG5(){let Z=[F$(),Gf(),dK()],X=0;for(let G of Z)try{X+=await Uj0(G)}catch(Y){console.error("[monitoring-retention] cleanup failed:",Y)}return console.log(`[monitoring-retention] deleted ${X} day-dir(s) across ${Z.length} signal dir(s)`),{deleted:X,dirs:Z.length}}async function iG5(Z,X){await E51.runStep(()=>mG5(),{name:"monitoringRetention"})}function b_8(){if(f_8)return;f_8=!0;let Z=E51.registerWorkflow(iG5,{name:"monitoringRetentionWorkflow"});E51.registerScheduled(Z,{name:"monitoringRetentionWorkflow",crontab:dG5,mode:lG5.ExactlyOncePerIntervalWhenActive})}var dG5="23 4 * * *",f_8=!1;var v_8=B(()=>{XQ();L51()});function x_8(Z){return async(X,G)=>{let Y=await Z.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["member.role","organization.id as orgId","organization.slug as orgSlug","organization.name as orgName"]).where("member.userId","=",G).where("member.organizationId","=",X).executeTakeFirst();if(!Y)return console.warn(`[automationContextFactory] User ${G} not found in org ${X} \u2014 returning null`),null;let Q=await Iw.create();Q.auth.user={id:G,role:Y.role},Q.organization={id:Y.orgId,slug:Y.orgSlug,name:Y.orgName};let $=await Sl0(Z.db,X,Y.role);return Q.boundAuth=kl0({auth:Q.authInstance,headers:new Headers,role:Y.role,permissions:$,userId:G}),Q.access=new FL(G,void 0,Q.boundAuth,Y.role,"self"),l90(Q,{id:Y.orgId,slug:Y.orgSlug}),Q}}var __8=B(()=>{UL();ei()});function nG5(){return{services:[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}],migrationsStatus:"pending",serverUrl:null,logs:[]}}function tG5(){for(let Z of pG5)Z()}function y_8(Z){let X=[...z51.logs,Z];z51={...z51,logs:X.length>500?X.slice(-500):X},tG5()}function j51(){return oG5}var z51,pG5,oG5=!1;var A51=B(()=>{z51=nG5(),pG5=new Set});import{EventEmitter as rG5}from"events";var P51;var g_8=B(()=>{A51();P51=new rG5;P51.on("request",(Z)=>{y_8(Z)})});function h_8(){return async(Z,X)=>{let G=Date.now(),Y=Z.req.method,Q=Z.req.path;if(Q==="/api/auth/get-session"||Q.includes("favicon")){await X();return}let $="",J=!1;if(Q.startsWith("/mcp")&&Y==="POST"){J=!0;try{if(Z.req.header("Content-Type")?.includes("application/json")){let H=await Z.req.raw.clone().json();if(H.method==="tools/call"&&H.params?.name){let w=Fh(H.params.name),O=H.params.arguments||{},D=Object.keys(O).map((E)=>Fh(E)),L=D.length>0?D.slice(0,3).join(",")+(D.length>3?"\u2026":""):"";$=`${Z9.tool}${w}${Z9.dim}(${L})${Z9.reset}`}else if(H.method)$=`${Z9.dim}${Fh(H.method)}${Z9.reset}`}}catch{}}let W=Fh(Q);if(Q.startsWith("/mcp/conn_")){let F=Q.split("/")[2]??"";W=`/mcp/${Z9.mcp}${Fh(F.slice(0,12))}\u2026${Z9.reset}`}else if(Q==="/mcp")W=`${Z9.mcp}/mcp${Z9.reset}`;else if(Q==="/mcp/registry")W=`${Z9.mcp}/mcp/registry${Z9.reset}`;let K=sG5(Y),N=J?"\u25C0":"\u2190";if(!j51())console.log(`${Z9.dim}${N}${Z9.reset} ${K}${Y}${Z9.reset} ${W}${$?` ${$}`:""}`);try{await X()}finally{let F=Date.now()-G,U=Z.res.status,H=aG5(U),w=F<1000?`${F}ms`:`${(F/1000).toFixed(1)}s`,O=J?"\u25B6":"\u2192";if(!j51())console.log(`${Z9.dim}${O}${Z9.reset} ${K}${Y}${Z9.reset} ${W}${$?` ${$}`:""} ${H}${U}${Z9.reset} ${Z9.duration}${w}${Z9.reset}`);P51.emit("request",{method:Y,path:Fh(Q),status:U,duration:F,timestamp:new Date})}}}var Z9,aG5=(Z)=>{if(Z>=500)return Z9.serverError;if(Z>=400)return Z9.clientError;if(Z>=300)return Z9.redirect;return Z9.ok},sG5=(Z)=>{return Z9[Z]||Z9.reset},Fh=(Z)=>{return Z.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var u_8=B(()=>{A51();g_8();Z9={reset:"\x1B[0m",dim:"\x1B[2m",bold:"\x1B[1m",GET:"\x1B[36m",POST:"\x1B[33m",PUT:"\x1B[35m",DELETE:"\x1B[31m",ok:"\x1B[32m",redirect:"\x1B[36m",clientError:"\x1B[33m",serverError:"\x1B[31m",mcp:"\x1B[35m",tool:"\x1B[96m",duration:"\x1B[90m"}});import{createHmac as m_8}from"crypto";import{mkdir as eG5,readdir as ZY5,rm as c_8,stat as i_8}from"fs/promises";import{join as R51,relative as XY5}from"path";import{z as I8}from"zod";function p_8(Z){let X=Z.replace(/[^a-zA-Z0-9_-]/g,"_");return R51(GY5,X)}function t_8(Z){return Z.replace(/^\/+/,"").replace(/\.\./g,"")}function T51(Z,X){let G=p_8(Z),Y=t_8(X);return R51(G,Y)}function YY5(Z,X,G,Y){let Q=$1().encryptionKey||"dev-secret",$=`${Z}:${X}:${G}:${Y}`;return m_8("sha256",Q).update($).digest("hex")}function d_8(Z,X,G,Y,Q){let $=Math.floor(Date.now()/1000)+Y,J=YY5(X,G,$,Q),W=new URL(`/api/dev-assets/${X}/${t_8(G)}`,Z);return W.searchParams.set("expires",$.toString()),W.searchParams.set("signature",J),W.searchParams.set("method",Q),W.toString()}function o_8(Z,X,G){let Y=`${Z}:${X.getTime()}:${G}`;return`"${m_8("md5","etag").update(Y).digest("hex")}"`}async function r_8(Z,X,G,Y,Q){try{let $=await ZY5(Z,{withFileTypes:!0});for(let J of $){let W=R51(Z,J.name),N=XY5(X,W).replace(/\\/g,"/");if(G&&!N.startsWith(G))continue;if(J.isDirectory())if(Y){let F=N+"/";if(!G||F.startsWith(G)){if(!(G?N.slice(G.length):N).includes("/"))Q.commonPrefixes.add(F)}}else await r_8(W,X,G,Y,Q);else if(J.isFile()){if(Y&&G){let F=N.slice(G.length);if(F.includes(Y)){let U=F.indexOf(Y),H=G+F.slice(0,U+1);Q.commonPrefixes.add(H);continue}}try{let F=await i_8(W);Q.objects.push({key:N,size:F.size,lastModified:F.mtime.toISOString(),etag:o_8(W,F.mtime,F.size)})}catch{}}}}catch{}}function a_8(Z,X){let Y=B0(Z).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:I8.object({prefix:I8.string().optional(),maxKeys:I8.number().optional().default(1000),continuationToken:I8.string().optional(),delimiter:I8.string().optional()}),outputSchema:I8.object({objects:I8.array(I8.object({key:I8.string(),size:I8.number(),lastModified:I8.string(),etag:I8.string()})),nextContinuationToken:I8.string().optional(),isTruncated:I8.boolean(),commonPrefixes:I8.array(I8.string()).optional()}),handler:async(Q)=>{let $=Q,J=$.prefix||"",W=$.maxKeys??1000,K=$.delimiter,N=$.continuationToken,F=p_8(Y);await eG5(F,{recursive:!0});let U={objects:[],commonPrefixes:new Set};await r_8(F,F,J,K,U),U.objects.sort((L,E)=>L.key.localeCompare(E.key));let H=0;if(N){if(H=U.objects.findIndex((L)=>L.key>N),H===-1)H=U.objects.length}let w=U.objects.slice(H,H+W),O=H+W<U.objects.length,D=O?w[w.length-1]?.key:void 0;return{objects:w,isTruncated:O,nextContinuationToken:D,commonPrefixes:Array.from(U.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:I8.object({key:I8.string()}),outputSchema:I8.object({contentType:I8.string().optional(),contentLength:I8.number(),lastModified:I8.string(),etag:I8.string(),metadata:I8.record(I8.string(),I8.string()).optional()}),handler:async(Q)=>{let $=Q,J=T51(Y,$.key),W=await i_8(J);return{contentType:Q61($.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:o_8(J,W.mtime,W.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:I8.object({key:I8.string(),expiresIn:I8.number().optional()}),outputSchema:I8.object({url:I8.string(),expiresIn:I8.number()}),handler:async(Q)=>{let $=Q,J=$.expiresIn??l_8;return{url:d_8(X,Y,$.key,J,"GET"),expiresIn:J}}},{name:"PUT_PRESIGNED_URL",description:"Generate a presigned URL for uploading a file to local storage",inputSchema:I8.object({key:I8.string(),expiresIn:I8.number().optional(),contentType:I8.string().optional()}),outputSchema:I8.object({url:I8.string(),expiresIn:I8.number()}),handler:async(Q)=>{let $=Q,J=$.expiresIn??l_8;return{url:d_8(X,Y,$.key,J,"PUT"),expiresIn:J}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:I8.object({key:I8.string()}),outputSchema:I8.object({success:I8.boolean(),key:I8.string()}),handler:async(Q)=>{let $=Q,J=T51(Y,$.key);try{return await c_8(J),{success:!0,key:$.key}}catch{return{success:!1,key:$.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:I8.object({keys:I8.array(I8.string()).max(1000)}),outputSchema:I8.object({deleted:I8.array(I8.string()),errors:I8.array(I8.object({key:I8.string(),message:I8.string()}))}),handler:async(Q)=>{let $=Q,J=[],W=[];return await Promise.all($.keys.map(async(K)=>{let N=T51(Y,K);try{await c_8(N),J.push(K)}catch(F){W.push({key:K,message:F instanceof Error?F.message:"Unknown error"})}})),{deleted:J,errors:W}}}]}async function I51(Z,X,G){let Y=a_8(X,G),Q=new lN({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:L9});for(let J of Y){let W="shape"in J.inputSchema?J.inputSchema.shape:I8.object({}).shape,K=J.outputSchema&&"shape"in J.outputSchema?J.outputSchema.shape:I8.object({}).shape;Q.registerTool(J.name,{description:J.description??"",inputSchema:W,outputSchema:K,annotations:J.annotations,_meta:J._meta},async(N)=>{try{let F=await J.handler(N);return{content:[{type:"text",text:JSON.stringify(F)}],structuredContent:F}}catch(F){return{content:[{type:"text",text:`Error: ${F.message}`}],isError:!0}}})}let $=new pQ({enableJsonResponse:Z.headers.get("Accept")?.includes("application/json")??!1});return await Q.connect($),DK(Q,$,Z,"mcp:dev-assets")}async function s_8(Z,X,G,Y){let $=a_8(G,Y).find((J)=>J.name===Z);if(!$)return{content:[{type:"text",text:`Tool not found: ${Z}`}],isError:!0};try{let J=await $.handler(X);return{content:[{type:"text",text:JSON.stringify(J)}]}}catch(J){return{content:[{type:"text",text:J instanceof Error?J.message:String(J)}],isError:!0}}}var GY5="./data/assets",l_8=3600,n_8,e_8;var Zy8=B(()=>{b8();hp();s6();gl();by();CG();Lz0();n_8=new C1;n_8.all("/",async(Z)=>{let X=Z.get("studioContext"),G=new URL(Z.req.url),Y=`${G.protocol}//${G.host}`;return I51(Z.req.raw,X,Y)});e_8=n_8});var Xy8={};$4(Xy8,{mountDevRoutes:()=>QY5});function QY5(Z,X){Z.all("/mcp/:connectionId{.*_dev-assets$}",X,async(Y)=>{let Q=Y.get("studioContext"),$=new URL(Y.req.url),J=`${$.protocol}//${$.host}`;return I51(Y.req.raw,Q,J)}),Z.all("/mcp/:connectionId{.*_dev-assets$}/call-tool/:toolName",X,async(Y)=>{let Q=Y.get("studioContext"),$=new URL(Y.req.url),J=`${$.protocol}//${$.host}`,W=Y.req.param("toolName");if(!W)return Y.json({error:"Missing tool name"},400);let K=await Y.req.json(),N=await s_8(W,K,Q,J);if(N.isError)return Y.json(N.content,500);return Y.json(N.content)}),Z.use("/mcp/dev-assets",X),Z.route("/mcp/dev-assets",e_8);let G=new C1;G.use("*",lJ({mountPath:"/api/dev-assets"})),G.route("/",Dz0({orgFromPath:!1})),Z.route("/api/dev-assets",G)}var Gy8=B(()=>{s6();r81();Lz0();Zy8()});import{sql as $Y5}from"kysely";import{randomUUID as Yy8}from"crypto";import{z as JY5}from"zod";async function KY5(Z){let X=new Date().toISOString(),G=Yy8(),Y=p4.SELF(Z.organizationId),Q="registry.publish_request.created",$={requestId:Z.request.id,requestedId:Z.request.requested_id,title:Z.request.title,status:Z.request.status,createdAt:Z.request.created_at,requester:{name:Z.request.requester_name,email:Z.request.requester_email}};await Z.db.insertInto("events").values({id:G,organization_id:Z.organizationId,type:"registry.publish_request.created",source:Y,specversion:"1.0",subject:Z.request.id,time:X,datacontenttype:"application/json",dataschema:null,data:JSON.stringify($),cron:null,status:"pending",attempts:0,last_error:null,next_retry_at:null,created_at:X,updated_at:X}).execute();let J=await Z.db.selectFrom("event_subscriptions").select(["id"]).where("organization_id","=",Z.organizationId).where("enabled","=",1).where("event_type","=","registry.publish_request.created").where((W)=>W.or([W("publisher","is",null),W("publisher","=",Y)])).execute();if(J.length>0)await Z.db.insertInto("event_deliveries").values(J.map((W)=>({id:Yy8(),event_id:G,subscription_id:W.id,status:"pending",attempts:0,last_error:null,delivered_at:null,next_retry_at:null,created_at:X}))).execute();try{await $Y5`SELECT
2777
2777
  pg_notify('studio_events', ${G}),