decocms 4.400.5 → 4.400.6

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 (347) hide show
  1. package/dist/client/assets/{AlertCircle-DAwsTYRk.js → AlertCircle-CiIF9Yxb.js} +1 -1
  2. package/dist/client/assets/{AreaChart-CY-F46Be.js → AreaChart-CiScmeLa.js} +1 -1
  3. package/dist/client/assets/{ArrowLeft-tvLjkuWF.js → ArrowLeft-Cw8zoASu.js} +1 -1
  4. package/dist/client/assets/{ArrowRight-z0a_5OhC.js → ArrowRight-DXuJxv6z.js} +1 -1
  5. package/dist/client/assets/{ArrowUp-Lg4NvWzc.js → ArrowUp-i7W4PLl8.js} +1 -1
  6. package/dist/client/assets/{CartesianChart-BoMqHHQt.js → CartesianChart-CAtvwpDL.js} +1 -1
  7. package/dist/client/assets/{Check-BQZy9c_F.js → Check-Cxn5ODoZ.js} +1 -1
  8. package/dist/client/assets/{CheckCircle-Czw2y_F3.js → CheckCircle-Cb0ohXc_.js} +1 -1
  9. package/dist/client/assets/{ChevronUp-BYljQT_d.js → ChevronUp-B3Rmv2Rm.js} +1 -1
  10. package/dist/client/assets/{Copy01-6I1_Aion.js → Copy01-CDFMtB2-.js} +1 -1
  11. package/dist/client/assets/{CreditCard01-DargNaAR.js → CreditCard01-Bpp7DUE2.js} +1 -1
  12. package/dist/client/assets/{DotsVertical-CN_Dg-j8.js → DotsVertical-CsphgVVa.js} +1 -1
  13. package/dist/client/assets/{ErrorBarContext-BT3n9Mmx.js → ErrorBarContext-Cmgr12jK.js} +1 -1
  14. package/dist/client/assets/{Eye-B4QzGCZN.js → Eye-BaKrr1k0.js} +1 -1
  15. package/dist/client/assets/{Globe04-CXTO7_iP.js → Globe04-BjYimuB_.js} +1 -1
  16. package/dist/client/assets/{Image01-9AXWgviq.js → Image01-BokX_Ygh.js} +1 -1
  17. package/dist/client/assets/{Key01-DFgwFBUs.js → Key01--iK_92aj.js} +1 -1
  18. package/dist/client/assets/{LayoutLeft-SQ7j1egP.js → LayoutLeft-DbmxTpPW.js} +1 -1
  19. package/dist/client/assets/{Line-_W3oVo8E.js → Line-CkGSu-B6.js} +1 -1
  20. package/dist/client/assets/{Link01-V3TqRs3C.js → Link01-CwRVjiFm.js} +1 -1
  21. package/dist/client/assets/{LinkExternal01-CPO90J3S.js → LinkExternal01-C1LIoQUC.js} +1 -1
  22. package/dist/client/assets/{Monitor01-C9DSVDfs.js → Monitor01-B-jx6SlO.js} +1 -1
  23. package/dist/client/assets/{Palette-D0rqSgjT.js → Palette-BZ8zPcQQ.js} +1 -1
  24. package/dist/client/assets/{Plus-BU--LXol.js → Plus-BeOCeSsu.js} +1 -1
  25. package/dist/client/assets/{SearchMd-BpFEap-1.js → SearchMd-CmoIwdFD.js} +1 -1
  26. package/dist/client/assets/{Sector-uvc125JQ.js → Sector-L9R2CZ3j.js} +1 -1
  27. package/dist/client/assets/{Share07-B29GBkjP.js → Share07-BQpOEypi.js} +1 -1
  28. package/dist/client/assets/{Sun-t-nvniXl.js → Sun-BwQeSpzv.js} +1 -1
  29. package/dist/client/assets/{Tool01-B8crh1aV.js → Tool01-CFPgtTUB.js} +1 -1
  30. package/dist/client/assets/{Trash01-DdWmWubI.js → Trash01-yjy5Djos.js} +1 -1
  31. package/dist/client/assets/{Upload01-CsQlMBfP.js → Upload01-C3YaZ92x.js} +1 -1
  32. package/dist/client/assets/{User01-B4ccibs0.js → User01-CxY9-OxA.js} +1 -1
  33. package/dist/client/assets/{UserSquare-CAO2KcuZ.js → UserSquare-D1SexGLq.js} +1 -1
  34. package/dist/client/assets/{Users01-D4csSmiF.js → Users01-C234jzz1.js} +1 -1
  35. package/dist/client/assets/{X-lSFSs7wx.js → X-C49OUFcX.js} +1 -1
  36. package/dist/client/assets/{XClose-BEOYWQzz.js → XClose-CKQjrGZS.js} +1 -1
  37. package/dist/client/assets/{Zap-BZmnDtce.js → Zap-GTFewWZO.js} +1 -1
  38. package/dist/client/assets/{ZoomOut-DwQzEWYf.js → ZoomOut-BCbY44Eu.js} +1 -1
  39. package/dist/client/assets/{access-gate-CeyEk8D6.js → access-gate-BWJ5-fyg.js} +1 -1
  40. package/dist/client/assets/{add-connection-dialog-BwKHIeY0.js → add-connection-dialog-BRSOSKaa.js} +1 -1
  41. package/dist/client/assets/{agent-analytics-5H0k6n1D.js → agent-analytics-DvZELmro.js} +1 -1
  42. package/dist/client/assets/agent-app-CR4dhbC3.js +1 -0
  43. package/dist/client/assets/{agent-assets-YP1dibLm.js → agent-assets-CAIo2BGp.js} +1 -1
  44. package/dist/client/assets/{agent-automation-Bp39QN0z.js → agent-automation-4_v-jQ62.js} +1 -1
  45. package/dist/client/assets/{agent-automations-CcIjwuOa.js → agent-automations-DideyLR7.js} +1 -1
  46. package/dist/client/assets/{agent-connect-sources-gwlJwqxl.js → agent-connect-sources-C16mG4Vi.js} +1 -1
  47. package/dist/client/assets/agent-deck-B2S-lir7.js +1 -0
  48. package/dist/client/assets/{agent-e2e-BiBmSSMh.js → agent-e2e-CQ-lGjg-.js} +1 -1
  49. package/dist/client/assets/{agent-experiments-C0aMSCki.js → agent-experiments-CXowDnMX.js} +1 -1
  50. package/dist/client/assets/{agent-file-C8oUDbru.js → agent-file-DVtUKLrb.js} +1 -1
  51. package/dist/client/assets/{agent-git-Dm-Aa993.js → agent-git-CEsra0W5.js} +1 -1
  52. package/dist/client/assets/{agent-hosting-CrRHqit9.js → agent-hosting-B95vsATF.js} +1 -1
  53. package/dist/client/assets/{agent-icon-Uyip_c6M.js → agent-icon-B4H17A-3.js} +1 -1
  54. package/dist/client/assets/agent-library-file-c5FcaNLf.js +1 -0
  55. package/dist/client/assets/{agent-monitor-BfRZolsZ.js → agent-monitor-DKyHOvd6.js} +1 -1
  56. package/dist/client/assets/{agent-overview-B71w2k7g.js → agent-overview-Dq7efx0u.js} +1 -1
  57. package/dist/client/assets/agent-settings-tjDRwuVg.js +1 -0
  58. package/dist/client/assets/{agent-site-editor-CisoB_8z.js → agent-site-editor-DqHsR1Oa.js} +1 -1
  59. package/dist/client/assets/agent-site-editor-code-D1x0TO9d.js +2 -0
  60. package/dist/client/assets/{agent-site-editor-content-BcZDuxlX.js → agent-site-editor-content-C0C8gdKB.js} +3 -3
  61. package/dist/client/assets/{agent-site-editor-preview-B9JYzQCZ.js → agent-site-editor-preview-BPAT7NTN.js} +3 -3
  62. package/dist/client/assets/agent-view-DECRuUKv.js +1 -0
  63. package/dist/client/assets/{agent-view-guard-CW2E0Nya.js → agent-view-guard-AncI1H8B.js} +1 -1
  64. package/dist/client/assets/{agents-list-BOyqXgKJ.js → agents-list-DdpIsQof.js} +1 -1
  65. package/dist/client/assets/{ai-providers-aALsTmcr.js → ai-providers-C91I1RIi.js} +1 -1
  66. package/dist/client/assets/{alert-Cj3mDHfa.js → alert-Vv8Gd72t.js} +1 -1
  67. package/dist/client/assets/{alert-dialog-ScZSd_g9.js → alert-dialog-p_yxBHYu.js} +1 -1
  68. package/dist/client/assets/analytics-sections-CJlCPTTn.js +1 -0
  69. package/dist/client/assets/api-keys-CAMHVAF8.js +1 -0
  70. package/dist/client/assets/{api-keys-DrMp2tSJ.js → api-keys-Ct4yGdka.js} +1 -1
  71. package/dist/client/assets/app-editor-BWuGvl0o.js +1 -0
  72. package/dist/client/assets/{asset-utils-zuPagV4t.js → asset-utils-brdDGay3.js} +1 -1
  73. package/dist/client/assets/{auth-IJXSFSKo.js → auth-DN1jUXQS.js} +1 -1
  74. package/dist/client/assets/{auth-catchall-_ZlrnKe5.js → auth-catchall-B8jjuh3t.js} +1 -1
  75. package/dist/client/assets/{auth-entry-Bt2xP80T.js → auth-entry-BZ-zlX-A.js} +1 -1
  76. package/dist/client/assets/{auth-split-layout-RzXa3xC3.js → auth-split-layout-9lXDS5uC.js} +1 -1
  77. package/dist/client/assets/{authenticate-and-persist-oauth-2rXUqvh1.js → authenticate-and-persist-oauth-BS0KLtdr.js} +1 -1
  78. package/dist/client/assets/{automation-list-row-DXlvb1Ba.js → automation-list-row-Z-oEG96S.js} +1 -1
  79. package/dist/client/assets/{automation-runs-bP6fMSYg.js → automation-runs-BfoVhm3K.js} +1 -1
  80. package/dist/client/assets/{automations-Cc87rLF5.js → automations-BPxNxlY1.js} +1 -1
  81. package/dist/client/assets/{autosend-n3O0UdBS.js → autosend-C9lP7MMD.js} +1 -1
  82. package/dist/client/assets/{avatar-BdlFnSU8.js → avatar-CaSFUaWf.js} +1 -1
  83. package/dist/client/assets/{badge-Bhd7Yjxv.js → badge-DO3CQ_LV.js} +1 -1
  84. package/dist/client/assets/{block-document-B66z-LAv.js → block-document-BQbcWy3F.js} +1 -1
  85. package/dist/client/assets/{blocks-preview-workspace-context-CPHwvzb5.js → blocks-preview-workspace-context-Bsh7P3Oa.js} +1 -1
  86. package/dist/client/assets/{breadcrumb-CTYBDQ2Q.js → breadcrumb-D3KLnh1b.js} +1 -1
  87. package/dist/client/assets/{buckets-D8dvVOSB.js → buckets-DAqePqsj.js} +1 -1
  88. package/dist/client/assets/{build-improve-prompt-doc-B6eWxg8K.js → build-improve-prompt-doc-DKmCIRM5.js} +1 -1
  89. package/dist/client/assets/{calendar-BBDqyYcl.js → calendar-v3rFo_Cq.js} +1 -1
  90. package/dist/client/assets/{capability-load-error-DtKGgHck.js → capability-load-error-nzBIi4Tr.js} +1 -1
  91. package/dist/client/assets/{category-editor-BzKSt8vB.js → category-editor-CLkY8j6x.js} +1 -1
  92. package/dist/client/assets/{chart-E7ehfHUF.js → chart-CXdIvQqa.js} +1 -1
  93. package/dist/client/assets/{chat-context-SUJKu-XN.js → chat-context-CypzFnUJ.js} +1 -1
  94. package/dist/client/assets/{chat-draft-D9u5CYEW.js → chat-draft-bJa35Dyv.js} +1 -1
  95. package/dist/client/assets/{checkbox-CC9zkEff.js → checkbox-RuVP2KAD.js} +1 -1
  96. package/dist/client/assets/{choose-editor-B5Rx7Zk5.js → choose-editor-B6bnAbTO.js} +1 -1
  97. package/dist/client/assets/{claim-phase-copy-Chi823Vj.js → claim-phase-copy-IBG3Spfs.js} +1 -1
  98. package/dist/client/assets/{cli-auth-success-QqvzIrWg.js → cli-auth-success-Gnusnqeq.js} +1 -1
  99. package/dist/client/assets/{client-icons-CPgcSrwC.js → client-icons-DeH3wN29.js} +1 -1
  100. package/dist/client/assets/{collapsible-CMMGBTfa.js → collapsible-Bx8hZ5vv.js} +1 -1
  101. package/dist/client/assets/{collection-detail-CNH0TqEJ.js → collection-detail-Xqlt3OgU.js} +1 -1
  102. package/dist/client/assets/{collection-display-button-c-WnLfEk.js → collection-display-button-B4JQi_wC.js} +1 -1
  103. package/dist/client/assets/{collection-search-3XS3AdJ3.js → collection-search-CPwy4oTQ.js} +1 -1
  104. package/dist/client/assets/{collection-table-wrapper-DhxAGzgU.js → collection-table-wrapper-DzLC9Cad.js} +1 -1
  105. package/dist/client/assets/{collection-tabs-B6d-4IcJ.js → collection-tabs-VZH79ort.js} +1 -1
  106. package/dist/client/assets/{combobox-q-ECrVO-.js → combobox-bXWHxi5l.js} +1 -1
  107. package/dist/client/assets/{command-BNNuUVzL.js → command-C0IXiNme.js} +1 -1
  108. package/dist/client/assets/{companion-mcps-section-DQRFd5L_.js → companion-mcps-section-BiiIWMdJ.js} +1 -1
  109. package/dist/client/assets/{connect-B67H5sTV.js → connect-B9RtRyUW.js} +1 -1
  110. package/dist/client/assets/{connect-layout-DtbA5xEp.js → connect-layout-C5m144rF.js} +1 -1
  111. package/dist/client/assets/{connection-D_fwf_le.js → connection-C1Cmv_sz.js} +1 -1
  112. package/dist/client/assets/{connection-card-wq7ff65-.js → connection-card-lUin0zXZ.js} +1 -1
  113. package/dist/client/assets/{connection-detail-CGeE1NL9.js → connection-detail-Bgtg-egn.js} +1 -1
  114. package/dist/client/assets/{connection-form-helpers-D8LXn1d-.js → connection-form-helpers-DiXUvzY1.js} +1 -1
  115. package/dist/client/assets/{connections-JoHYlluM.js → connections-CIFiKTz-.js} +1 -1
  116. package/dist/client/assets/{context-B092rba-.js → context-lYPc9MR3.js} +1 -1
  117. package/dist/client/assets/{create-organization-dialog-CyGYpJhs.js → create-organization-dialog-CVGvbMrB.js} +1 -1
  118. package/dist/client/assets/{decofile-api-BQi9jV2r.js → decofile-api-D2rDGWIR.js} +1 -1
  119. package/dist/client/assets/{decopilot-D9YGMtj1.js → decopilot-DZa7cUdc.js} +1 -1
  120. package/dist/client/assets/{dialog-DP1MSxJH.js → dialog-fTIcTyHb.js} +1 -1
  121. package/dist/client/assets/{discover-BV0HsgaI.js → discover-BZC8PmWN.js} +1 -1
  122. package/dist/client/assets/{domain-settings-BaQvjI4O.js → domain-settings-BoCWiWyd.js} +1 -1
  123. package/dist/client/assets/{download-app-dialog-hSU8H3Vj.js → download-app-dialog-B8fu6N4W.js} +1 -1
  124. package/dist/client/assets/{drawer-DeP9v70y.js → drawer-Dj7i5SNu.js} +1 -1
  125. package/dist/client/assets/{editor-B7C6vwjS.js → editor-CStKuO5E.js} +1 -1
  126. package/dist/client/assets/{empty-state-Bd7rwiDP.js → empty-state-C8J78MMg.js} +1 -1
  127. package/dist/client/assets/{empty-state-CaK4RTlm.js → empty-state-DuOhKQcg.js} +1 -1
  128. package/dist/client/assets/{extract-connection-data-v71aWs18.js → extract-connection-data-BN6Gn7S7.js} +1 -1
  129. package/dist/client/assets/{feature-gate-LTW2kwcy.js → feature-gate-BYtexfTr.js} +1 -1
  130. package/dist/client/assets/{feature-paywall-1lut-OZA.js → feature-paywall-Do9-TIse.js} +1 -1
  131. package/dist/client/assets/{file-explorer-CaKgHoMf.js → file-explorer-sM87NUct.js} +1 -1
  132. package/dist/client/assets/{file-preview-DK07f0Bu.js → file-preview-Cctwbzua.js} +1 -1
  133. package/dist/client/assets/{file-share-button-rEL9QTqo.js → file-share-button-Dcpl3tTi.js} +1 -1
  134. package/dist/client/assets/{file-type-icon-BV5PHbD1.js → file-type-icon-C--_TBMw.js} +1 -1
  135. package/dist/client/assets/{folder-icon-1-1m6gFV.js → folder-icon-Be-ry1Lo.js} +1 -1
  136. package/dist/client/assets/{form-BT-p7abF.js → form-msoIoPH9.js} +1 -1
  137. package/dist/client/assets/{gateway-client-Bunqz-v_.js → gateway-client-B7EtyAUZ.js} +1 -1
  138. package/dist/client/assets/{general-fOjVxBHu.js → general-B5uAiOFe.js} +1 -1
  139. package/dist/client/assets/{github-icon-B7EzOW44.js → github-icon-Czf3JIe0.js} +1 -1
  140. package/dist/client/assets/{home-D2-wyRKJ.js → home-nqrW03_D.js} +1 -1
  141. package/dist/client/assets/{hooks-ZDl1T3YR.js → hooks-BunFzIMc.js} +1 -1
  142. package/dist/client/assets/{icon-button-CH4FIKTp.js → icon-button-TBoaqswf.js} +1 -1
  143. package/dist/client/assets/{index-Ck4x2-t2.js → index-B-RfjkQs.js} +5 -5
  144. package/dist/client/assets/{index-Cba7I4uA.js → index-B48I-F_s.js} +1 -1
  145. package/dist/client/assets/{index--xKIMIg3.js → index-B4lO5kiB.js} +1 -1
  146. package/dist/client/assets/{index-4aLH0qvl.js → index-BO3WDGm0.js} +1 -1
  147. package/dist/client/assets/{index-C6jf5hj5.js → index-Bv9cknRX.js} +1 -1
  148. package/dist/client/assets/{index-DGrB0yWK.js → index-C4bcGTWO.js} +1 -1
  149. package/dist/client/assets/{index-Om_Krpb0.js → index-CUoS9PHq.js} +1 -1
  150. package/dist/client/assets/{index-g9QoTWAS.js → index-CnM-XjMS.js} +1 -1
  151. package/dist/client/assets/{index-DK8MJmup.js → index-CnlnpiW9.js} +1 -1
  152. package/dist/client/assets/{index-xK_UxIbV.js → index-Cnm8iPpl.js} +1 -1
  153. package/dist/client/assets/{index-C_kk8c78.js → index-DNOKSPYL.js} +1 -1
  154. package/dist/client/assets/{index-Cbxez_uk.js → index-DU8D4REs.js} +1 -1
  155. package/dist/client/assets/{index-Bg7kKf4r.js → index-bU1o14-j.js} +1 -1
  156. package/dist/client/assets/{index-nUsHjtAT.js → index-haAT4fp-.js} +1 -1
  157. package/dist/client/assets/{index-redirect-Cl6Yu5tU.js → index-redirect-lHlkLUpP.js} +1 -1
  158. package/dist/client/assets/{infiniteQueryObserver-DJPW5pCw.js → infiniteQueryObserver-CFFZE0G7.js} +1 -1
  159. package/dist/client/assets/{infra-billing-CHwTXFTp.js → infra-billing-CI3pPi6s.js} +1 -1
  160. package/dist/client/assets/{input-CsRLFWsE.js → input-CkBBlArz.js} +1 -1
  161. package/dist/client/assets/{input-BBpmUhtR.js → input-DgwTyBrI.js} +1 -1
  162. package/dist/client/assets/{input-BpZKxjG2.js → input-bCtnK_dS.js} +1 -1
  163. package/dist/client/assets/{integration-icon-CXxe2Nmz.js → integration-icon-DuRUAYQY.js} +1 -1
  164. package/dist/client/assets/{label-BasQfmGn.js → label-COhaglCI.js} +1 -1
  165. package/dist/client/assets/{last-preview-page-tC_ec-8v.js → last-preview-page-C2BRWzsU.js} +1 -1
  166. package/dist/client/assets/{layout-BCBVVsx8.js → layout-ezpRdHMe.js} +1 -1
  167. package/dist/client/assets/{legacy-agents-deep-DJ3dRrzM.js → legacy-agents-deep-7Ua9_FGE.js} +1 -1
  168. package/dist/client/assets/{legacy-main-redirect-C7QpzNdk.js → legacy-main-redirect-CoKgMaf6.js} +1 -1
  169. package/dist/client/assets/{library-B502b1z4.js → library-nbbFy0YJ.js} +1 -1
  170. package/dist/client/assets/{login-BtJlygis.js → login-zL3v_Zks.js} +1 -1
  171. package/dist/client/assets/{markdown-D9JYtNvk.js → markdown-CL_7eJfo.js} +1 -1
  172. package/dist/client/assets/{mcp-app-renderer-CK8AdoIv.js → mcp-app-renderer-BF1xjUD_.js} +1 -1
  173. package/dist/client/assets/{mcp-oauth-CCvVH2OB.js → mcp-oauth-CYUMx6Lt.js} +1 -1
  174. package/dist/client/assets/{members-BoGXKcke.js → members-Ci31aIzf.js} +1 -1
  175. package/dist/client/assets/{message-templates-D0vFWbXr.js → message-templates-Dievwyon.js} +1 -1
  176. package/dist/client/assets/{mini-report-page-CCQFv7lr.js → mini-report-page-D2G_6nvn.js} +1 -1
  177. package/dist/client/assets/{mock-board-CLLyx2N9.js → mock-board-MGFiZQqD.js} +3 -3
  178. package/dist/client/assets/{monaco-editor-CLYybS8B.js → monaco-editor-B-WPLOla.js} +1 -1
  179. package/dist/client/assets/{monitoring-stats-row-avCjcK0F.js → monitoring-stats-row-IwXyXgpg.js} +1 -1
  180. package/dist/client/assets/{multi-select--1a2IkR7.js → multi-select-B5cPO8Zc.js} +1 -1
  181. package/dist/client/assets/{mustache-C9rsi357.js → mustache-D5b2aALH.js} +1 -1
  182. package/dist/client/assets/{oauth-callback-ivL7RrDf.js → oauth-callback-XaDe1ZVU.js} +1 -1
  183. package/dist/client/assets/{oauth-callback-ai-provider-DyQmwFrI.js → oauth-callback-ai-provider-CG6P6aWc.js} +1 -1
  184. package/dist/client/assets/{onboarding-Bu2705eX.js → onboarding-C0P9leUg.js} +1 -1
  185. package/dist/client/assets/{optimistic-project-sidebar-views-lIiVbcFU.js → optimistic-project-sidebar-views-BULTvoQH.js} +1 -1
  186. package/dist/client/assets/{org-file-open-context-BGwxOJ5f.js → org-file-open-context-C6mgZPAr.js} +1 -1
  187. package/dist/client/assets/{organization-choice-Cqq6hiux.js → organization-choice-5mEr1aKE.js} +1 -1
  188. package/dist/client/assets/{orgs-DjPk91H4.js → orgs-3MZWLo-q.js} +1 -1
  189. package/dist/client/assets/{page-seo-form-C1Rgy6PR.js → page-seo-form-BHc2C0F_.js} +1 -1
  190. package/dist/client/assets/{pair-DW_WRb6G.js → pair-CSXFDEIQ.js} +1 -1
  191. package/dist/client/assets/{plan-ladder-BXJ0swZ2.js → plan-ladder-B7xKH1KD.js} +1 -1
  192. package/dist/client/assets/{popover-K1ZrYG78.js → popover-DFY37Yvw.js} +1 -1
  193. package/dist/client/assets/{post-calendar-2v4vqP8p.js → post-calendar-Jvfo43V-.js} +1 -1
  194. package/dist/client/assets/{post-editor-B2FiOFhN.js → post-editor-D0HMXnr-.js} +1 -1
  195. package/dist/client/assets/{preview-content-CpPj1JH3.js → preview-content-DyylZdej.js} +1 -1
  196. package/dist/client/assets/{preview-dialog-Clu5ydVv.js → preview-dialog-GxP1iGgN.js} +1 -1
  197. package/dist/client/assets/{profile-r8hRIBVU.js → profile-Bl7SMbnv.js} +1 -1
  198. package/dist/client/assets/{project-app-view-1zY3x0YR.js → project-app-view-C-S_SBUQ.js} +1 -1
  199. package/dist/client/assets/{project-feed-DminiBzl.js → project-feed-C9k9tVu9.js} +1 -1
  200. package/dist/client/assets/{project-icon-CjBJRgr0.js → project-icon-CsZAOQy_.js} +1 -1
  201. package/dist/client/assets/project-reports-h9XKnGzZ.js +1 -0
  202. package/dist/client/assets/project-tasks-CvQsB5FR.js +1 -0
  203. package/dist/client/assets/{prompts-rF3K-sXx.js → prompts-CvgNBkYO.js} +1 -1
  204. package/dist/client/assets/record-editor-Dco1ladi.js +1 -0
  205. package/dist/client/assets/{redirect-editor-C8SiyMIE.js → redirect-editor-D2NLj98m.js} +1 -1
  206. package/dist/client/assets/{reports-yWFVxw0Z.js → reports-BCYtzeDa.js} +1 -1
  207. package/dist/client/assets/reports-KVVIwKGA.js +1 -0
  208. package/dist/client/assets/{reports-onboarding-N2pt6gNg.js → reports-onboarding-BG7_PC6g.js} +1 -1
  209. package/dist/client/assets/{reports-tab-CoNw5u9A.js → reports-tab-CZyY8SM6.js} +2 -2
  210. package/dist/client/assets/{repositories-CaSms5FF.js → repositories-C5RyL_z1.js} +1 -1
  211. package/dist/client/assets/{repository-import-picker-Kal2nH0n.js → repository-import-picker-ByioO6uG.js} +1 -1
  212. package/dist/client/assets/{repository-picker-DxgY__Tu.js → repository-picker-BPuZL7HO.js} +1 -1
  213. package/dist/client/assets/{require-capability-3QFnbaVg.js → require-capability-BlL45yDc.js} +1 -1
  214. package/dist/client/assets/{required-auth-layout-BWh5q3u2.js → required-auth-layout-Duev8t_N.js} +1 -1
  215. package/dist/client/assets/{reset-password-aeaUD9hZ.js → reset-password-JANPJ9Jd.js} +1 -1
  216. package/dist/client/assets/{resizable-C3GNt7qd.js → resizable-yTD1tEOl.js} +1 -1
  217. package/dist/client/assets/{review-settings-DTVyO-Pc.js → review-settings-vW0-yRPH.js} +1 -1
  218. package/dist/client/assets/{rich-text-link-control-CWGtfixK.js → rich-text-link-control-BUscMTY0.js} +1 -1
  219. package/dist/client/assets/{roles-CesqgDGr.js → roles-B-T-wGt2.js} +1 -1
  220. package/dist/client/assets/{route-utJJlEy1.js → route-BoE0K809.js} +1 -1
  221. package/dist/client/assets/{route-BXF3hfx7.js → route-Ciyyz2ig.js} +1 -1
  222. package/dist/client/assets/{route-CH1X1P-P.js → route-X5r9RmD7.js} +1 -1
  223. package/dist/client/assets/{route-page-header-BHR-ItxW.js → route-page-header-Ck32Z_z1.js} +1 -1
  224. package/dist/client/assets/{runnable-block-editor-D_EKjpsM.js → runnable-block-editor-DXtvF8jt.js} +1 -1
  225. package/dist/client/assets/{sandbox-lifecycle-context-DIc5m19C.js → sandbox-lifecycle-context-BZ0OGbvt.js} +1 -1
  226. package/dist/client/assets/{schema-C2l7sv-S.js → schema-kN4UiUD7.js} +1 -1
  227. package/dist/client/assets/{scroll-area-CTv9WE1l.js → scroll-area-DtmE_V3W.js} +1 -1
  228. package/dist/client/assets/{search-input-yrvqqqa5.js → search-input-5SNth6iW.js} +1 -1
  229. package/dist/client/assets/{search-toggle-g6PUq9ya.js → search-toggle-BQLp0m3w.js} +1 -1
  230. package/dist/client/assets/{secret-picker-BxxQ42cR.js → secret-picker-CNRCwGgJ.js} +1 -1
  231. package/dist/client/assets/{secrets-CTexxl38.js → secrets-BUndq66A.js} +1 -1
  232. package/dist/client/assets/{sections-editor-8OIVL9zx.js → sections-editor-BMGHgar4.js} +1 -1
  233. package/dist/client/assets/{select-BoR29t6W.js → select-lkzYgXdD.js} +1 -1
  234. package/dist/client/assets/{select-model-baGNpvTB.js → select-model-L0RmAR5m.js} +1 -1
  235. package/dist/client/assets/{seo-editor-BMB6shx2.js → seo-editor-C5sUOmWC.js} +1 -1
  236. package/dist/client/assets/{separator-Di6srp9Z.js → separator-DIB2NY6d.js} +1 -1
  237. package/dist/client/assets/{settings-tab-DSJnx2cf.js → settings-tab-BQA673_Z.js} +1 -1
  238. package/dist/client/assets/{sheet-C9bl1oJW.js → sheet-B5VBlNbo.js} +1 -1
  239. package/dist/client/assets/{shell-layout-PUnaTk6G.js → shell-layout-t1NP6lxk.js} +1 -1
  240. package/dist/client/assets/{sidebar-gH44_aFR.js → sidebar-Bsj1oRm2.js} +1 -1
  241. package/dist/client/assets/{skill-preview-CjSzB6zf.js → skill-preview-_2hXoPIK.js} +1 -1
  242. package/dist/client/assets/{skills-CEarjmfu.js → skills-D_mDF0TE.js} +1 -1
  243. package/dist/client/assets/{sso-CT9ELyZE.js → sso-kIq_TNP0.js} +1 -1
  244. package/dist/client/assets/{suggestion-BSo5OP_j.js → suggestion-Bm5WiIMl.js} +1 -1
  245. package/dist/client/assets/{switch-wAm3D1I6.js → switch-C_Vj5_E0.js} +1 -1
  246. package/dist/client/assets/{synced-repos-B5N_C_En.js → synced-repos-wPtrwk-M.js} +1 -1
  247. package/dist/client/assets/{table-3nkTB4Np.js → table-EewUoElk.js} +1 -1
  248. package/dist/client/assets/{tabs-Z84fQLpa.js → tabs-Dn00_KeP.js} +1 -1
  249. package/dist/client/assets/{task-board-CIQEQ9gq.js → task-board-B1qWBX1A.js} +1 -1
  250. package/dist/client/assets/{task-route-BYXl_z5M.js → task-route-D--4JOl_.js} +1 -1
  251. package/dist/client/assets/{task-status-B6zn5x63.js → task-status-Nj47Imo6.js} +1 -1
  252. package/dist/client/assets/taskboard-analytics-DlcZmFmP.js +1 -0
  253. package/dist/client/assets/{tasks-3RHZzkFK.js → tasks-BKvSOVwi.js} +1 -1
  254. package/dist/client/assets/tasks-DhBfoBLp.js +1 -0
  255. package/dist/client/assets/{textarea-DmhWadvL.js → textarea-BJstaU_4.js} +1 -1
  256. package/dist/client/assets/{thread-analytics-CWolaSZq.js → thread-analytics-CJvSEofm.js} +1 -1
  257. package/dist/client/assets/{thread-button-C353BNO6.js → thread-button-Dg0_8ATn.js} +1 -1
  258. package/dist/client/assets/{thread-intent-BuxfElu5.js → thread-intent-Dv_ln6w2.js} +1 -1
  259. package/dist/client/assets/{thread-route-Bx6eqAUQ.js → thread-route-BBwMAr4Q.js} +1 -1
  260. package/dist/client/assets/{thread-route-CmEEfnPs.js → thread-route-C2QO3TRR.js} +1 -1
  261. package/dist/client/assets/{thread-sheet-body-BpOJ-mpg.js → thread-sheet-body-a-hPHT_-.js} +1 -1
  262. package/dist/client/assets/{toggle-group-WpqscYaw.js → toggle-group-n81OZ_Uu.js} +1 -1
  263. package/dist/client/assets/{toolbar-icon-button-DAFKD_pK.js → toolbar-icon-button-G0ZB62BK.js} +1 -1
  264. package/dist/client/assets/{tooltip-D_t5agRT.js → tooltip-1YZ9_LEc.js} +1 -1
  265. package/dist/client/assets/{track-CWcmFBdJ.js → track-BdOLl-rI.js} +1 -1
  266. package/dist/client/assets/{types-EnXetskt.js → types-BcA15it5.js} +1 -1
  267. package/dist/client/assets/{usage-stats-Gv-3x4Ta.js → usage-stats-BXm3jzMp.js} +1 -1
  268. package/dist/client/assets/{use-ai-providers-BOtkBAHJ.js → use-ai-providers-OZaiJf_i.js} +1 -1
  269. package/dist/client/assets/{use-automations-C_H2RSDu.js → use-automations-D-L8pJyH.js} +1 -1
  270. package/dist/client/assets/{use-autosave-CtwCn4lm.js → use-autosave-WOg9IhGs.js} +1 -1
  271. package/dist/client/assets/{use-connect-companion-v6osDnhK.js → use-connect-companion-dh23z2e4.js} +1 -1
  272. package/dist/client/assets/{use-connection-CK-5Lpbl.js → use-connection-B5_J2wP6.js} +1 -1
  273. package/dist/client/assets/{use-copy-CWcw9y0f.js → use-copy-B6plqh15.js} +1 -1
  274. package/dist/client/assets/{use-create-virtual-mcp-0s6caXAs.js → use-create-virtual-mcp-BHGrzRmt.js} +1 -1
  275. package/dist/client/assets/{use-date-fns-locale-DeGGdClH.js → use-date-fns-locale-giBeaSOM.js} +1 -1
  276. package/dist/client/assets/{use-debounced-autosave-l-fa5dGN.js → use-debounced-autosave-B9G4Lz7n.js} +1 -1
  277. package/dist/client/assets/{use-debounced-value-BAmcCwZ4.js → use-debounced-value-CUPne1nm.js} +1 -1
  278. package/dist/client/assets/{use-deco-credits-BAtSd5iZ.js → use-deco-credits-BhBg4qYv.js} +1 -1
  279. package/dist/client/assets/{use-decopilot-events-BzhXXQi3.js → use-decopilot-events-CrYWYj1F.js} +1 -1
  280. package/dist/client/assets/{use-delete-connection-AWBlHZP0.js → use-delete-connection-XgJ1tVSe.js} +1 -1
  281. package/dist/client/assets/{use-deployment-admin-sAUdKDqS.js → use-deployment-admin-DhLAmeuE.js} +1 -1
  282. package/dist/client/assets/{use-entitlements-Dql2buFj.js → use-entitlements-Bk0dyRQ2.js} +1 -1
  283. package/dist/client/assets/{use-fast-preview-draft-url-BxezoKmd.js → use-fast-preview-draft-url-BfzrR4he.js} +1 -1
  284. package/dist/client/assets/{use-file-configs-Dr0d27aT.js → use-file-configs-Q9mf6jQo.js} +1 -1
  285. package/dist/client/assets/{use-in-settings-BA5Od6zt.js → use-in-settings-_C3gW9Az.js} +1 -1
  286. package/dist/client/assets/{use-infinite-scroll-CAp6PiC0.js → use-infinite-scroll-BAK1V_oQ.js} +1 -1
  287. package/dist/client/assets/{use-join-requests-CMqjWeBG.js → use-join-requests-DbabBnEV.js} +1 -1
  288. package/dist/client/assets/{use-main-panel-tabs-CtoMsbfs.js → use-main-panel-tabs-rnsNQmUO.js} +1 -1
  289. package/dist/client/assets/{use-mcp-auth-status-CH7YPNve.js → use-mcp-auth-status-DetA28-g.js} +1 -1
  290. package/dist/client/assets/{use-mcp-client-DDIocHT6.js → use-mcp-client-6HSoOGyN.js} +1 -1
  291. package/dist/client/assets/{use-mcp-prompts-D8MzpgAT.js → use-mcp-prompts-1aH_UXpe.js} +1 -1
  292. package/dist/client/assets/{use-mcp-tools-CFGrhbrB.js → use-mcp-tools-yAkOUoVS.js} +1 -1
  293. package/dist/client/assets/{use-members-BtxsC9V3.js → use-members-CNAxK8NG.js} +1 -1
  294. package/dist/client/assets/{use-mobile-CdzCnkMt.js → use-mobile-BA2OXMES.js} +1 -1
  295. package/dist/client/assets/{use-navigate-to-agent-CK2ojcHr.js → use-navigate-to-agent-B7J0geak.js} +1 -1
  296. package/dist/client/assets/{use-open-billing-url-ptdTbbBm.js → use-open-billing-url-CdE8qyDV.js} +1 -1
  297. package/dist/client/assets/{use-org-auth-client-B2Mz39Ds.js → use-org-auth-client-DJC4lcTZ.js} +1 -1
  298. package/dist/client/assets/{use-org-fs-B5SsMM_1.js → use-org-fs-DxNvtETC.js} +1 -1
  299. package/dist/client/assets/{use-org-repo-syncs-DhQYfFtK.js → use-org-repo-syncs-BMiVfW6D.js} +1 -1
  300. package/dist/client/assets/{use-org-sso-Bg9XoWeE.js → use-org-sso-D0y0H-Wd.js} +1 -1
  301. package/dist/client/assets/{use-organization-roles-Q61E1tJN.js → use-organization-roles-CTjyx7IB.js} +1 -1
  302. package/dist/client/assets/{use-organization-settings-DYk5FZJw.js → use-organization-settings-fx1CniIO.js} +1 -1
  303. package/dist/client/assets/{use-panel-navigate-wv77dcM5.js → use-panel-navigate-ZqAXzPy8.js} +1 -1
  304. package/dist/client/assets/{use-project-native-view-presence-gzbdZMHU.js → use-project-native-view-presence-DU2K0Eyd.js} +1 -1
  305. package/dist/client/assets/{use-project-scope-DHDkFc-g.js → use-project-scope-Hp7aDrht.js} +1 -1
  306. package/dist/client/assets/{use-releases-h152tw9n.js → use-releases-BXIf7cF0.js} +1 -1
  307. package/dist/client/assets/{use-reports-diagnostic-DldYivxc.js → use-reports-diagnostic-D7jrD_HD.js} +1 -1
  308. package/dist/client/assets/{use-route-default-main-BWkjTfSK.js → use-route-default-main-DGbZPJrO.js} +1 -1
  309. package/dist/client/assets/{use-secrets-DQHJ4cVA.js → use-secrets-C-Xp8b4K.js} +1 -1
  310. package/dist/client/assets/{use-section-preview-base-CdEeBhgs.js → use-section-preview-base-BIeB_qzV.js} +1 -1
  311. package/dist/client/assets/{use-session-runtime-D_Z0r9x6.js → use-session-runtime-BGl1FWUp.js} +1 -1
  312. package/dist/client/assets/{use-tags-DEpNJldS.js → use-tags-pwsJJDvy.js} +1 -1
  313. package/dist/client/assets/{use-task-board-analytics-Cw3-V-U_.js → use-task-board-analytics-Dh7V7MPv.js} +1 -1
  314. package/dist/client/assets/{use-task-metadata-B8IWdSS_.js → use-task-metadata-DKjAQSZf.js} +1 -1
  315. package/dist/client/assets/{use-thread-analytics-CW55-Xe0.js → use-thread-analytics-CusHOOmZ.js} +1 -1
  316. package/dist/client/assets/{use-thread-outputs-C4iYsVj1.js → use-thread-outputs-8akdlycY.js} +1 -1
  317. package/dist/client/assets/{use-virtual-mcp-CfvZlIda.js → use-virtual-mcp-CbHEuH0C.js} +1 -1
  318. package/dist/client/assets/useInfiniteQuery-CEwPAAtp.js +1 -0
  319. package/dist/client/assets/{useQueries-Cd_bJN_E.js → useQueries-B5DxQ3Sp.js} +1 -1
  320. package/dist/client/assets/useSuspenseInfiniteQuery-CC4BMd5I.js +1 -0
  321. package/dist/client/assets/{users-DHJxjXSq.js → users-p9MUZzW1.js} +1 -1
  322. package/dist/client/assets/{utils-DMlJ8ARz.js → utils-BkPwCtYS.js} +1 -1
  323. package/dist/client/assets/{variant-calendar-DghqPTU4.js → variant-calendar-CcJNDqFN.js} +1 -1
  324. package/dist/client/assets/{variant-matcher-override-BL815r4E.js → variant-matcher-override-CexHfhU3.js} +1 -1
  325. package/dist/client/assets/{view-mode-toggle-Czn_wQOw.js → view-mode-toggle-CJHrx4Q2.js} +1 -1
  326. package/dist/client/assets/{virtual-mcp-CcUa7C54.js → virtual-mcp-Dd5g9b73.js} +1 -1
  327. package/dist/client/index.html +1 -1
  328. package/dist/server/cli.js +6 -6
  329. package/dist/server/server.js +6 -6
  330. package/package.json +1 -1
  331. package/dist/client/assets/agent-app-Cw9tbDuz.js +0 -1
  332. package/dist/client/assets/agent-deck-DjA8jeH7.js +0 -1
  333. package/dist/client/assets/agent-library-file-DHksNut0.js +0 -1
  334. package/dist/client/assets/agent-settings-DLjV3KWn.js +0 -1
  335. package/dist/client/assets/agent-site-editor-code-HV34X_yY.js +0 -2
  336. package/dist/client/assets/agent-view-BTwtHRZF.js +0 -1
  337. package/dist/client/assets/analytics-sections-DtS7EZgf.js +0 -1
  338. package/dist/client/assets/api-keys-CuyD-Z5R.js +0 -1
  339. package/dist/client/assets/app-editor-CIFNTD8w.js +0 -1
  340. package/dist/client/assets/project-reports-JmbfgpKz.js +0 -1
  341. package/dist/client/assets/project-tasks-2GTKjWCp.js +0 -1
  342. package/dist/client/assets/record-editor-B-ETGxA0.js +0 -1
  343. package/dist/client/assets/reports-Dd7XY9fp.js +0 -1
  344. package/dist/client/assets/taskboard-analytics-BDhMfBmv.js +0 -1
  345. package/dist/client/assets/tasks-L4O6RNHu.js +0 -1
  346. package/dist/client/assets/useInfiniteQuery-DfdWdULq.js +0 -1
  347. package/dist/client/assets/useSuspenseInfiniteQuery-ByyP6gL-.js +0 -1
@@ -993,7 +993,7 @@ ${Q.text}`};Z[Z.length-1]=X;continue}Z.push(Q)}return Z}function UB({signature:$
993
993
 
994
994
  `)}function DD4($,Z){let Q=[],Y=[],X=new Set;for(let J of $){if(J.type==="text"&&J.text)Q.push(J.text);for(let G of J.annotations)if(G?.type==="url_citation"&&G.url&&!X.has(G.url))X.add(G.url),Y.push({url:G.url,title:G.title})}return{text:Q.join(`
995
995
 
996
- `),citations:Y,usage:Z}}function LD4($){let Z=bF($,"text");if(Z)return Z;let Q=$.summary;if(typeof Q==="string")return Q;if(Q&&typeof Q==="object")return bF(Q,"text")??"";return""}function wD4($){let Z=KA($,"steps")??KA($,"outputs")??[],Q=[];for(let Y of Z){if(!Y||typeof Y!=="object")continue;let X=Y,J=bF(X,"type")??"text";if(J==="thought"||J==="thought_summary"){let W=LD4(X);if(W)Q.push({type:"thought_summary",text:W,annotations:[]});continue}let G=KA(X,"content");if(G){if(J!=="model_output")continue;for(let W of G){if(!W||typeof W!=="object")continue;let K=W;if((bF(K,"type")??"text")!=="text")continue;Q.push({type:"text",text:bF(K,"text")??"",annotations:KA(K,"annotations")??[]})}continue}if(J==="text")Q.push({type:"text",text:bF(X,"text")??"",annotations:KA(X,"annotations")??[]})}return Q}function jD4($){let Z=$.usage;if(!Z)return{inputTokens:0,outputTokens:0};let Q=Gs(Z,"total_input_tokens")??Gs(Z,"input_tokens")??0,Y=Gs(Z,"total_output_tokens")??Gs(Z,"output_tokens")??Math.max(0,(Gs(Z,"total_tokens")??0)-Q);return{inputTokens:Q,outputTokens:Y}}function ED4($){let Z=$?.reason;if(Z instanceof Error)return Z;let Q=Error("Aborted");return Q.name="AbortError",Q}function bF($,Z){let Q=$[Z];return typeof Q==="string"?Q:null}function Gs($,Z){let Q=$[Z];return typeof Q==="number"?Q:null}function KA($,Z){let Q=$[Z];return Array.isArray(Q)?Q:null}var UD4="https://generativelanguage.googleapis.com/v1beta/interactions",ND4=5000,Ps0=30000;var As0=D(()=>{D8();zs0()});var QG$=D(()=>{As0()});var YG$=D(()=>{QG$()});function zD4($,Z){return FF("Google listModels",$,{headers:{"x-goog-api-key":Z},signal:AbortSignal.timeout(15000)})}function PD4($){let Z=$.name.replace("models/","");if(/^imagen-/.test(Z)||/-image/.test(Z)){let Q=["image"];if($.supportedGenerationMethods.includes("generateContent"))Q.push("text");return Q}return[]}var XG$;var JG$=D(()=>{Es0();YG$();bP();XG$={info:{id:"google",name:"Google Gemini",description:"Google's Gemini family of models",logo:"https://assets.decocache.com/decocms/29370b4b-c623-487b-a6c4-a1637a2c0401/Google__G__logo.svg"},supportedMethods:["api-key"],create($){let Z=Js({apiKey:$});return{info:this.info,aiSdk:Z,asyncResearch:{canHandle:(Q)=>cl(Q),start:async({modelId:Q,query:Y,abortSignal:X})=>{let{interactionId:J}=await nG0({apiKey:$,agent:Q,query:Y,abortSignal:X});return{jobId:J}},resume:({jobId:Q,abortSignal:Y,onProgress:X,pollIntervalMs:J})=>tG0({apiKey:$,interactionId:Q,abortSignal:Y,onProgress:X,pollIntervalMs:J})},async listModels(){let Q=[],Y;do{let X=new URL("https://generativelanguage.googleapis.com/v1beta/models");if(X.searchParams.set("pageSize","1000"),Y)X.searchParams.set("pageToken",Y);let J=await zD4(X,$);if(!J.ok)await FY("Google listModels",J);let G=await QJ0("Google listModels",J);Q.push(...G.models),Y=G.nextPageToken}while(Y);return Q.filter((X)=>X.lifecycleState!=="DEPRECATED").map((X)=>{let J=X.name.replace("models/","");return{m:X,id:J,capabilities:PD4(X)}}).filter(({m:X,id:J,capabilities:G})=>G.length>0||X.supportedGenerationMethods.includes("generateContent")||cl(J)).map(({m:X,id:J,capabilities:G})=>({modelId:J,providerId:"google",title:X.displayName,description:X.description,logo:null,capabilities:G,limits:{contextWindow:X.inputTokenLimit,maxOutputTokens:X.outputTokenLimit},costs:null,...cl(J)&&{asyncResearch:!0}}))}}}}});import{z as Uw}from"zod/v4";import{z as z1}from"zod/v4";import{z as K5}from"zod/v4";import{z as u8}from"zod/v4";import{z as xF}from"zod/v4";import{z as Rs0}from"zod/v4";import{z as HA}from"zod/v4";import{z as _G}from"zod/v4";import{z as qs0}from"zod/v4";import{z as MQ}from"zod/v4";import{z as DB}from"zod/v4";import{z as m7}from"zod/v4";import{z as d7}from"zod/v4";import{z as J$}from"zod/v4";import{z as gK}from"zod/v4";import{z as X6}from"zod/v4";import{z as w7}from"zod/v4";import{z as CG}from"zod/v4";import{z as k$}from"zod/v4";import{z as NJ}from"zod/v4";import{z as l4}from"zod/v4";import{z as qZ}from"zod/v4";import{z as D4}from"zod/v4";import{z as ml}from"zod/v4";import{z as y6}from"zod/v4";import{z as R}from"zod/v4";import{z as Vs0}from"zod/v4";import{z as r8}from"zod/v4";import{z as UA}from"zod/v4";import{z as v$}from"zod/v4";import{z as e3}from"zod/v4";import{z as D6}from"zod/v4";import{z as _s0}from"zod/v4";import{z as n6}from"zod/v4";import{z as mZ}from"zod/v4";import{z as Bj4}from"zod/v4";import{z as vG}from"zod/v4";function uG$($){var Z,Q,Y,X,J;let G=AD4($),W=TD4($),K=(W==null?void 0:W.minor)==null&&((Q=(Z=W==null?void 0:W.variant)==null?void 0:Z.startsWith("chat"))!=null?Q:!1),H=(X=(Y=W==null?void 0:W.variant)==null?void 0:Y.startsWith("nano"))!=null?X:!1,F=W!=null&&W.major>=6,U=G!=null&&G>=3||W!=null&&W.major>=5&&!K,N=$.startsWith("gpt-4")||W!=null&&W.major>=5&&!H&&!K||G!=null&&G>=3,B=G!=null||W!=null&&W.major>=5&&!K,O=!F&&W!=null&&(W.major>5||W.major===5&&((J=W.minor)!=null?J:0)>=1);return{supportsFlexProcessing:U,supportsPriorityProcessing:N,supportsConfigurationUpdate:F,supportsAsyncToolCalling:F,supportedReasoningEfforts:F?["low","medium","high","xhigh","max"]:void 0,isReasoningModel:B,systemMessageMode:B?"developer":"system",supportsNonReasoningParameters:O}}function AD4($){let Z=/^o(\d+)(?:-|$)/.exec($);return Z==null?void 0:Number(Z[1])}function TD4($){let Z=/^gpt-(\d+)(?:\.(\d+))?(?:-(.+))?$/.exec($);if(Z==null)return;return{major:Number(Z[1]),minor:Z[2]==null?void 0:Number(Z[2]),variant:Z[3]}}function Ks($){var Z,Q;let Y=MD4($);if(Y==null)return;let X=ID4(Y);return Gl({message:Y.message,type:(Z=Y.type)!=null?Z:void 0,code:(Q=Y.code)!=null?Q:void 0,statusCode:X,isRetryable:CD4(Y,X),data:$})}async function ss0({stream:$,getError:Z,isOutputChunk:Q,isAcceptedChunk:Y,acceptedGraceMs:X=50,url:J,requestBodyValues:G,responseHeaders:W}){let[K,H]=$.tee(),F=K.getReader(),U=!1;try{let N=!1;while(!0){let B;if(N){let w=await RD4(F.read(),X);if(w.timedOut)return H;B=w.value}else B=await F.read();if(B.done)return H;let O=B.value;if(!O.success)return H;let L=Z(O.value);if(L!=null)throw U=!0,GG$(F).catch(()=>{}),GG$(H.getReader()).catch(()=>{}),qD4({frame:L,url:J,requestBodyValues:G,responseHeaders:W});if(Q(O.value))return H;if(!N&&(Y==null?void 0:Y(O.value))===!0)N=!0}}finally{if(!U)F.cancel().catch(()=>{}),F.releaseLock()}}async function GG$($){try{while(!(await $.read()).done);}catch(Z){}finally{$.releaseLock()}}async function RD4($,Z){let Q,Y=$.then((X)=>({timedOut:!1,value:X}));try{let X=await Promise.race([Y,new Promise((J)=>{Q=setTimeout(()=>J({timedOut:!0}),Z)})]);if(X.timedOut)Y.catch(()=>{});return X}finally{clearTimeout(Q)}}function qD4({frame:$,url:Z,requestBodyValues:Q,responseHeaders:Y}){var X,J;let G=Ks($);return new W8({message:(X=G==null?void 0:G.message)!=null?X:"OpenAI stream failed before any output was generated",url:Z,requestBodyValues:Q,statusCode:(J=G==null?void 0:G.statusCode)!=null?J:500,responseHeaders:Y,responseBody:JSON.stringify($),data:$,isRetryable:G==null?void 0:G.isRetryable})}function MD4($){var Z;let Q=Ws($);if(Q==null)return;if(Q.type==="response.failed"){let X=Ws(Q.response),J=Ws(X==null?void 0:X.error);return typeof(J==null?void 0:J.message)==="string"?{message:J.message,code:WG$(J.code),type:"response.failed"}:void 0}let Y=(Z=Ws(Q.error))!=null?Z:Q;return typeof Y.message==="string"&&(Ws(Q.error)!=null||typeof Y.type==="string"||("code"in Y)||("param"in Y))?{message:Y.message,code:WG$(Y.code),type:typeof Y.type==="string"?Y.type:void 0}:void 0}function ID4($){let Z=kD4($.code);if(Z!=null)return Z;let Q=[$.code,$.type].filter((Y)=>typeof Y==="string"||typeof Y==="number").join(" ").toLowerCase();if(["insufficient_quota","rate_limit"].some((Y)=>Q.includes(Y)))return 429;if(Q.includes("authentication"))return 401;if(Q.includes("permission"))return 403;if(Q.includes("not_found"))return 404;if(["invalid","bad_request","context_length"].some((Y)=>Q.includes(Y)))return 400;if(Q.includes("overload"))return 503;if(Q.includes("timeout"))return 504;return 500}function Ws($){return typeof $==="object"&&$!=null?$:void 0}function WG$($){return typeof $==="string"||typeof $==="number"?$:void 0}function VD4($){return Number.isInteger($)&&$>=400&&$<=599}function kD4($){let Z=typeof $==="string"&&/^\d{3}$/.test($)?Number($):$;return typeof Z==="number"&&VD4(Z)?Z:void 0}function SD4($){return $===408||$===409||$===429||$>=500}function CD4($,Z){if($.code==="insufficient_quota"||$.type==="insufficient_quota")return!1;return SD4(Z)}function KG$($){var Z,Q,Y,X,J,G,W,K;if($==null)return jF();let H=(Z=$.prompt_tokens)!=null?Z:0,F=(Q=$.completion_tokens)!=null?Q:0,U=(X=(Y=$.prompt_tokens_details)==null?void 0:Y.cached_tokens)!=null?X:0,N=(G=(J=$.prompt_tokens_details)==null?void 0:J.cache_write_tokens)!=null?G:void 0,B=(K=(W=$.completion_tokens_details)==null?void 0:W.reasoning_tokens)!=null?K:0;return{inputTokens:{total:H,noCache:H-U-(N!=null?N:0),cacheRead:U,cacheWrite:N},outputTokens:{total:F,text:Math.max(0,F-B),reasoning:B},raw:$}}function _D4($){return JSON.stringify(typeof $==="object"&&$!==null&&!Array.isArray($)?$:{})}function OB($){var Z;return(Z=$==null?void 0:$.openai)==null?void 0:Z.promptCacheBreakpoint}function vD4({prompt:$,systemMessageMode:Z="system"}){var Q,Y;let X=[],J=[];for(let{role:G,content:W,providerOptions:K}of $)switch(G){case"system":{switch(Z){case"system":{let H=OB(K);X.push({role:"system",content:H==null?W:[{type:"text",text:W,prompt_cache_breakpoint:H}]});break}case"developer":{let H=OB(K);X.push({role:"developer",content:H==null?W:[{type:"text",text:W,prompt_cache_breakpoint:H}]});break}case"remove":{J.push({type:"other",message:"system messages are removed for this model"});break}default:throw Error(`Unsupported system message mode: ${Z}`)}break}case"user":{if(W.length===1&&W[0].type==="text"&&OB(W[0].providerOptions)==null){X.push({role:"user",content:W[0].text});break}X.push({role:"user",content:W.map((H,F)=>{var U,N,B;switch(H.type){case"text":{let O=OB(H.providerOptions);return{type:"text",text:H.text,...O!=null&&{prompt_cache_breakpoint:O}}}case"file":{let O=OB(H.providerOptions);switch(H.data.type){case"reference":return{type:"file",file:{file_id:AQ({reference:H.data.reference,provider:"openai"})},...O!=null&&{prompt_cache_breakpoint:O}};case"text":throw new t1({functionality:"text file parts"});case"url":case"data":{let L=PQ(H.mediaType);if(L==="image")return{type:"image_url",image_url:{url:H.data.type==="url"?H.data.url.toString():`data:${v9({part:H})};base64,${X4(H.data.data)}`,detail:(N=(U=H.providerOptions)==null?void 0:U.openai)==null?void 0:N.imageDetail},...O!=null&&{prompt_cache_breakpoint:O}};else if(L==="audio"){if(H.data.type==="url")throw new t1({functionality:"audio file parts with URLs"});let w=v9({part:H});switch(w){case"audio/wav":return{type:"input_audio",input_audio:{data:X4(H.data.data),format:"wav"},...O!=null&&{prompt_cache_breakpoint:O}};case"audio/mp3":case"audio/mpeg":return{type:"input_audio",input_audio:{data:X4(H.data.data),format:"mp3"},...O!=null&&{prompt_cache_breakpoint:O}};default:throw new t1({functionality:`audio content parts with media type ${w}`})}}{let w=v9({part:H});if(w!=="application/pdf")throw new t1({functionality:`file part media type ${w}`});if(H.data.type==="url")throw new t1({functionality:"PDF file parts with URLs"});return{type:"file",file:{filename:(B=H.filename)!=null?B:`part-${F}.pdf`,file_data:`data:application/pdf;base64,${X4(H.data.data)}`},...O!=null&&{prompt_cache_breakpoint:O}}}}}}}})});break}case"assistant":{let H="",F=[],U=!1,N=[];for(let B of W)switch(B.type){case"text":{let O=OB(B.providerOptions);H+=B.text,F.push({type:"text",text:B.text,...O!=null&&{prompt_cache_breakpoint:O}}),U||(U=O!=null);break}case"tool-call":{N.push({id:B.toolCallId,type:"function",function:{name:B.toolName,arguments:_D4(B.input)}});break}}X.push({role:"assistant",content:U?F:N.length>0?H||null:H,tool_calls:N.length>0?N:void 0});break}case"tool":{for(let H of W){if(H.type==="tool-approval-response")continue;let F=H.output,U=(Q=F.type==="content"?F.value.map((B)=>OB(B.providerOptions)).find((B)=>B!=null):OB(F.providerOptions))!=null?Q:OB(H.providerOptions),N;switch(F.type){case"text":case"error-text":N=F.value;break;case"execution-denied":N=(Y=F.reason)!=null?Y:"Tool call execution denied.";break;case"content":case"json":case"error-json":N=JSON.stringify(F.value);break}X.push({role:"tool",tool_call_id:H.toolCallId,content:U==null?N:[{type:"text",text:N,prompt_cache_breakpoint:U}]})}break}default:throw Error(`Unsupported role: ${G}`)}return{messages:X,warnings:J}}function Ts0({id:$,model:Z,created:Q}){return br({id:$,model:Z,created:Q||void 0})}function HG$($){switch($){case"stop":return"stop";case"length":return"length";case"content_filter":return"content-filter";case"function_call":case"tool_calls":return"tool-calls";default:return"other"}}function Hs($){let Z=!1;return{schema:Y($),warnings:Z?[{type:"compatibility",feature:"JSON Schema propertyNames",details:"OpenAI does not support JSON Schema propertyNames. It was removed before sending the schema, so OpenAI will not enforce property-name constraints."}]:[]};function Y(G){let W=G.propertyNames;if(W!=null){if(typeof W==="boolean"||W.type!=="string")throw new t1({functionality:"JSON Schema propertyNames that does not use a string schema"});Z=!0}let K={...G};if(delete K.propertyNames,K.properties!=null)K.properties=X(K.properties);if(K.patternProperties!=null)K.patternProperties=X(K.patternProperties);if(K.additionalProperties!=null)K.additionalProperties=J(K.additionalProperties);if(K.additionalItems!=null)K.additionalItems=J(K.additionalItems);if(K.items!=null)K.items=Array.isArray(K.items)?K.items.map(J):J(K.items);if(K.contains!=null)K.contains=J(K.contains);if(K.not!=null)K.not=J(K.not);if(K.allOf!=null)K.allOf=K.allOf.map(J);if(K.anyOf!=null)K.anyOf=K.anyOf.map(J);if(K.oneOf!=null)K.oneOf=K.oneOf.map(J);if(K.definitions!=null)K.definitions=X(K.definitions);if(K.$defs!=null)K.$defs=X(K.$defs);if(K.dependencies!=null)K.dependencies=Object.fromEntries(Object.entries(K.dependencies).map(([H,F])=>[H,Array.isArray(F)?F:J(F)]));for(let H of["if","then","else"]){let F=K[H];if(F!=null)K[H]=J(F)}return K}function X(G){return Object.fromEntries(Object.entries(G).map(([W,K])=>[W,J(K)]))}function J(G){return typeof G==="boolean"?G:Y(G)}}function yD4({tools:$,toolChoice:Z}){$=($==null?void 0:$.length)?$:void 0;let Q=[];if($==null)return{tools:void 0,toolChoice:void 0,toolWarnings:Q};let Y=[];for(let J of $)switch(J.type){case"function":{let G=Hs(J.inputSchema);Q.push(...G.warnings),Y.push({type:"function",function:{name:J.name,description:J.description,parameters:G.schema,...J.strict!=null?{strict:J.strict}:{}}});break}default:Q.push({type:"unsupported",feature:`tool type: ${J.type}`});break}if(Z==null)return{tools:Y,toolChoice:void 0,toolWarnings:Q};let X=Z.type;switch(X){case"auto":case"none":case"required":return{tools:Y,toolChoice:X,toolWarnings:Q};case"tool":return{tools:Y,toolChoice:{type:"function",function:{name:Z.toolName}},toolWarnings:Q};default:throw new t1({functionality:`tool choice type: ${X}`})}}function hD4($){if("error"in $)return!1;return $.choices.some((Z)=>{let Q=Z.delta;return(Q==null?void 0:Q.content)!=null&&Q.content.length>0||(Q==null?void 0:Q.tool_calls)!=null&&Q.tool_calls.length>0||(Q==null?void 0:Q.annotations)!=null&&Q.annotations.length>0})}function FG$($){var Z,Q,Y,X;if($==null)return jF();let J=(Z=$.prompt_tokens)!=null?Z:0,G=(Q=$.completion_tokens)!=null?Q:0;return{inputTokens:{total:(Y=$.prompt_tokens)!=null?Y:void 0,noCache:J,cacheRead:void 0,cacheWrite:void 0},outputTokens:{total:(X=$.completion_tokens)!=null?X:void 0,text:G,reasoning:void 0},raw:$}}function uD4({prompt:$,user:Z="user",assistant:Q="assistant"}){let Y="";if($[0].role==="system")Y+=`${$[0].content}
996
+ `),citations:Y,usage:Z}}function LD4($){let Z=bF($,"text");if(Z)return Z;let Q=$.summary;if(typeof Q==="string")return Q;if(Q&&typeof Q==="object")return bF(Q,"text")??"";return""}function wD4($){let Z=KA($,"steps")??KA($,"outputs")??[],Q=[];for(let Y of Z){if(!Y||typeof Y!=="object")continue;let X=Y,J=bF(X,"type")??"text";if(J==="thought"||J==="thought_summary"){let W=LD4(X);if(W)Q.push({type:"thought_summary",text:W,annotations:[]});continue}let G=KA(X,"content");if(G){if(J!=="model_output")continue;for(let W of G){if(!W||typeof W!=="object")continue;let K=W;if((bF(K,"type")??"text")!=="text")continue;Q.push({type:"text",text:bF(K,"text")??"",annotations:KA(K,"annotations")??[]})}continue}if(J==="text")Q.push({type:"text",text:bF(X,"text")??"",annotations:KA(X,"annotations")??[]})}return Q}function jD4($){let Z=$.usage;if(!Z)return{inputTokens:0,outputTokens:0};let Q=Gs(Z,"total_input_tokens")??Gs(Z,"input_tokens")??0,Y=Gs(Z,"total_output_tokens")??Gs(Z,"output_tokens")??Math.max(0,(Gs(Z,"total_tokens")??0)-Q);return{inputTokens:Q,outputTokens:Y}}function ED4($){let Z=$?.reason;if(Z instanceof Error)return Z;let Q=Error("Aborted");return Q.name="AbortError",Q}function bF($,Z){let Q=$[Z];return typeof Q==="string"?Q:null}function Gs($,Z){let Q=$[Z];return typeof Q==="number"?Q:null}function KA($,Z){let Q=$[Z];return Array.isArray(Q)?Q:null}var UD4="https://generativelanguage.googleapis.com/v1beta/interactions",ND4=5000,Ps0=30000;var As0=D(()=>{D8();zs0()});var QG$=D(()=>{As0()});var YG$=D(()=>{QG$()});function zD4($,Z){return FF("Google listModels",$,{headers:{"x-goog-api-key":Z},signal:AbortSignal.timeout(15000)})}function PD4($){let Z=$.name.replace("models/","");if(/^imagen-/.test(Z)||/-image/.test(Z)){let Q=["image"];if($.supportedGenerationMethods.includes("generateContent"))Q.push("text");return Q}return[]}var XG$;var JG$=D(()=>{Es0();YG$();bP();XG$={info:{id:"google",name:"Google Gemini",description:"Google's Gemini family of models",logo:"https://assets.decocache.com/decocms/29370b4b-c623-487b-a6c4-a1637a2c0401/Google__G__logo.svg"},supportedMethods:["api-key"],create($){let Z=Js({apiKey:$});return{info:this.info,aiSdk:Z,asyncResearch:{canHandle:(Q)=>cl(Q),start:async({modelId:Q,query:Y,abortSignal:X})=>{let{interactionId:J}=await nG0({apiKey:$,agent:Q,query:Y,abortSignal:X});return{jobId:J}},resume:({jobId:Q,abortSignal:Y,onProgress:X,pollIntervalMs:J})=>tG0({apiKey:$,interactionId:Q,abortSignal:Y,onProgress:X,pollIntervalMs:J})},async listModels(){let Q=[],Y;do{let X=new URL("https://generativelanguage.googleapis.com/v1beta/models");if(X.searchParams.set("pageSize","1000"),Y)X.searchParams.set("pageToken",Y);let J=await zD4(X,$);if(!J.ok)await FY("Google listModels",J);let G=await QJ0("Google listModels",J);Q.push(...G.models??[]),Y=G.nextPageToken}while(Y);return Q.filter((X)=>X.lifecycleState!=="DEPRECATED").map((X)=>{let J=X.name.replace("models/","");return{m:X,id:J,capabilities:PD4(X)}}).filter(({m:X,id:J,capabilities:G})=>G.length>0||X.supportedGenerationMethods.includes("generateContent")||cl(J)).map(({m:X,id:J,capabilities:G})=>({modelId:J,providerId:"google",title:X.displayName,description:X.description,logo:null,capabilities:G,limits:{contextWindow:X.inputTokenLimit,maxOutputTokens:X.outputTokenLimit},costs:null,...cl(J)&&{asyncResearch:!0}}))}}}}});import{z as Uw}from"zod/v4";import{z as z1}from"zod/v4";import{z as K5}from"zod/v4";import{z as u8}from"zod/v4";import{z as xF}from"zod/v4";import{z as Rs0}from"zod/v4";import{z as HA}from"zod/v4";import{z as _G}from"zod/v4";import{z as qs0}from"zod/v4";import{z as MQ}from"zod/v4";import{z as DB}from"zod/v4";import{z as m7}from"zod/v4";import{z as d7}from"zod/v4";import{z as J$}from"zod/v4";import{z as gK}from"zod/v4";import{z as X6}from"zod/v4";import{z as w7}from"zod/v4";import{z as CG}from"zod/v4";import{z as k$}from"zod/v4";import{z as NJ}from"zod/v4";import{z as l4}from"zod/v4";import{z as qZ}from"zod/v4";import{z as D4}from"zod/v4";import{z as ml}from"zod/v4";import{z as y6}from"zod/v4";import{z as R}from"zod/v4";import{z as Vs0}from"zod/v4";import{z as r8}from"zod/v4";import{z as UA}from"zod/v4";import{z as v$}from"zod/v4";import{z as e3}from"zod/v4";import{z as D6}from"zod/v4";import{z as _s0}from"zod/v4";import{z as n6}from"zod/v4";import{z as mZ}from"zod/v4";import{z as Bj4}from"zod/v4";import{z as vG}from"zod/v4";function uG$($){var Z,Q,Y,X,J;let G=AD4($),W=TD4($),K=(W==null?void 0:W.minor)==null&&((Q=(Z=W==null?void 0:W.variant)==null?void 0:Z.startsWith("chat"))!=null?Q:!1),H=(X=(Y=W==null?void 0:W.variant)==null?void 0:Y.startsWith("nano"))!=null?X:!1,F=W!=null&&W.major>=6,U=G!=null&&G>=3||W!=null&&W.major>=5&&!K,N=$.startsWith("gpt-4")||W!=null&&W.major>=5&&!H&&!K||G!=null&&G>=3,B=G!=null||W!=null&&W.major>=5&&!K,O=!F&&W!=null&&(W.major>5||W.major===5&&((J=W.minor)!=null?J:0)>=1);return{supportsFlexProcessing:U,supportsPriorityProcessing:N,supportsConfigurationUpdate:F,supportsAsyncToolCalling:F,supportedReasoningEfforts:F?["low","medium","high","xhigh","max"]:void 0,isReasoningModel:B,systemMessageMode:B?"developer":"system",supportsNonReasoningParameters:O}}function AD4($){let Z=/^o(\d+)(?:-|$)/.exec($);return Z==null?void 0:Number(Z[1])}function TD4($){let Z=/^gpt-(\d+)(?:\.(\d+))?(?:-(.+))?$/.exec($);if(Z==null)return;return{major:Number(Z[1]),minor:Z[2]==null?void 0:Number(Z[2]),variant:Z[3]}}function Ks($){var Z,Q;let Y=MD4($);if(Y==null)return;let X=ID4(Y);return Gl({message:Y.message,type:(Z=Y.type)!=null?Z:void 0,code:(Q=Y.code)!=null?Q:void 0,statusCode:X,isRetryable:CD4(Y,X),data:$})}async function ss0({stream:$,getError:Z,isOutputChunk:Q,isAcceptedChunk:Y,acceptedGraceMs:X=50,url:J,requestBodyValues:G,responseHeaders:W}){let[K,H]=$.tee(),F=K.getReader(),U=!1;try{let N=!1;while(!0){let B;if(N){let w=await RD4(F.read(),X);if(w.timedOut)return H;B=w.value}else B=await F.read();if(B.done)return H;let O=B.value;if(!O.success)return H;let L=Z(O.value);if(L!=null)throw U=!0,GG$(F).catch(()=>{}),GG$(H.getReader()).catch(()=>{}),qD4({frame:L,url:J,requestBodyValues:G,responseHeaders:W});if(Q(O.value))return H;if(!N&&(Y==null?void 0:Y(O.value))===!0)N=!0}}finally{if(!U)F.cancel().catch(()=>{}),F.releaseLock()}}async function GG$($){try{while(!(await $.read()).done);}catch(Z){}finally{$.releaseLock()}}async function RD4($,Z){let Q,Y=$.then((X)=>({timedOut:!1,value:X}));try{let X=await Promise.race([Y,new Promise((J)=>{Q=setTimeout(()=>J({timedOut:!0}),Z)})]);if(X.timedOut)Y.catch(()=>{});return X}finally{clearTimeout(Q)}}function qD4({frame:$,url:Z,requestBodyValues:Q,responseHeaders:Y}){var X,J;let G=Ks($);return new W8({message:(X=G==null?void 0:G.message)!=null?X:"OpenAI stream failed before any output was generated",url:Z,requestBodyValues:Q,statusCode:(J=G==null?void 0:G.statusCode)!=null?J:500,responseHeaders:Y,responseBody:JSON.stringify($),data:$,isRetryable:G==null?void 0:G.isRetryable})}function MD4($){var Z;let Q=Ws($);if(Q==null)return;if(Q.type==="response.failed"){let X=Ws(Q.response),J=Ws(X==null?void 0:X.error);return typeof(J==null?void 0:J.message)==="string"?{message:J.message,code:WG$(J.code),type:"response.failed"}:void 0}let Y=(Z=Ws(Q.error))!=null?Z:Q;return typeof Y.message==="string"&&(Ws(Q.error)!=null||typeof Y.type==="string"||("code"in Y)||("param"in Y))?{message:Y.message,code:WG$(Y.code),type:typeof Y.type==="string"?Y.type:void 0}:void 0}function ID4($){let Z=kD4($.code);if(Z!=null)return Z;let Q=[$.code,$.type].filter((Y)=>typeof Y==="string"||typeof Y==="number").join(" ").toLowerCase();if(["insufficient_quota","rate_limit"].some((Y)=>Q.includes(Y)))return 429;if(Q.includes("authentication"))return 401;if(Q.includes("permission"))return 403;if(Q.includes("not_found"))return 404;if(["invalid","bad_request","context_length"].some((Y)=>Q.includes(Y)))return 400;if(Q.includes("overload"))return 503;if(Q.includes("timeout"))return 504;return 500}function Ws($){return typeof $==="object"&&$!=null?$:void 0}function WG$($){return typeof $==="string"||typeof $==="number"?$:void 0}function VD4($){return Number.isInteger($)&&$>=400&&$<=599}function kD4($){let Z=typeof $==="string"&&/^\d{3}$/.test($)?Number($):$;return typeof Z==="number"&&VD4(Z)?Z:void 0}function SD4($){return $===408||$===409||$===429||$>=500}function CD4($,Z){if($.code==="insufficient_quota"||$.type==="insufficient_quota")return!1;return SD4(Z)}function KG$($){var Z,Q,Y,X,J,G,W,K;if($==null)return jF();let H=(Z=$.prompt_tokens)!=null?Z:0,F=(Q=$.completion_tokens)!=null?Q:0,U=(X=(Y=$.prompt_tokens_details)==null?void 0:Y.cached_tokens)!=null?X:0,N=(G=(J=$.prompt_tokens_details)==null?void 0:J.cache_write_tokens)!=null?G:void 0,B=(K=(W=$.completion_tokens_details)==null?void 0:W.reasoning_tokens)!=null?K:0;return{inputTokens:{total:H,noCache:H-U-(N!=null?N:0),cacheRead:U,cacheWrite:N},outputTokens:{total:F,text:Math.max(0,F-B),reasoning:B},raw:$}}function _D4($){return JSON.stringify(typeof $==="object"&&$!==null&&!Array.isArray($)?$:{})}function OB($){var Z;return(Z=$==null?void 0:$.openai)==null?void 0:Z.promptCacheBreakpoint}function vD4({prompt:$,systemMessageMode:Z="system"}){var Q,Y;let X=[],J=[];for(let{role:G,content:W,providerOptions:K}of $)switch(G){case"system":{switch(Z){case"system":{let H=OB(K);X.push({role:"system",content:H==null?W:[{type:"text",text:W,prompt_cache_breakpoint:H}]});break}case"developer":{let H=OB(K);X.push({role:"developer",content:H==null?W:[{type:"text",text:W,prompt_cache_breakpoint:H}]});break}case"remove":{J.push({type:"other",message:"system messages are removed for this model"});break}default:throw Error(`Unsupported system message mode: ${Z}`)}break}case"user":{if(W.length===1&&W[0].type==="text"&&OB(W[0].providerOptions)==null){X.push({role:"user",content:W[0].text});break}X.push({role:"user",content:W.map((H,F)=>{var U,N,B;switch(H.type){case"text":{let O=OB(H.providerOptions);return{type:"text",text:H.text,...O!=null&&{prompt_cache_breakpoint:O}}}case"file":{let O=OB(H.providerOptions);switch(H.data.type){case"reference":return{type:"file",file:{file_id:AQ({reference:H.data.reference,provider:"openai"})},...O!=null&&{prompt_cache_breakpoint:O}};case"text":throw new t1({functionality:"text file parts"});case"url":case"data":{let L=PQ(H.mediaType);if(L==="image")return{type:"image_url",image_url:{url:H.data.type==="url"?H.data.url.toString():`data:${v9({part:H})};base64,${X4(H.data.data)}`,detail:(N=(U=H.providerOptions)==null?void 0:U.openai)==null?void 0:N.imageDetail},...O!=null&&{prompt_cache_breakpoint:O}};else if(L==="audio"){if(H.data.type==="url")throw new t1({functionality:"audio file parts with URLs"});let w=v9({part:H});switch(w){case"audio/wav":return{type:"input_audio",input_audio:{data:X4(H.data.data),format:"wav"},...O!=null&&{prompt_cache_breakpoint:O}};case"audio/mp3":case"audio/mpeg":return{type:"input_audio",input_audio:{data:X4(H.data.data),format:"mp3"},...O!=null&&{prompt_cache_breakpoint:O}};default:throw new t1({functionality:`audio content parts with media type ${w}`})}}{let w=v9({part:H});if(w!=="application/pdf")throw new t1({functionality:`file part media type ${w}`});if(H.data.type==="url")throw new t1({functionality:"PDF file parts with URLs"});return{type:"file",file:{filename:(B=H.filename)!=null?B:`part-${F}.pdf`,file_data:`data:application/pdf;base64,${X4(H.data.data)}`},...O!=null&&{prompt_cache_breakpoint:O}}}}}}}})});break}case"assistant":{let H="",F=[],U=!1,N=[];for(let B of W)switch(B.type){case"text":{let O=OB(B.providerOptions);H+=B.text,F.push({type:"text",text:B.text,...O!=null&&{prompt_cache_breakpoint:O}}),U||(U=O!=null);break}case"tool-call":{N.push({id:B.toolCallId,type:"function",function:{name:B.toolName,arguments:_D4(B.input)}});break}}X.push({role:"assistant",content:U?F:N.length>0?H||null:H,tool_calls:N.length>0?N:void 0});break}case"tool":{for(let H of W){if(H.type==="tool-approval-response")continue;let F=H.output,U=(Q=F.type==="content"?F.value.map((B)=>OB(B.providerOptions)).find((B)=>B!=null):OB(F.providerOptions))!=null?Q:OB(H.providerOptions),N;switch(F.type){case"text":case"error-text":N=F.value;break;case"execution-denied":N=(Y=F.reason)!=null?Y:"Tool call execution denied.";break;case"content":case"json":case"error-json":N=JSON.stringify(F.value);break}X.push({role:"tool",tool_call_id:H.toolCallId,content:U==null?N:[{type:"text",text:N,prompt_cache_breakpoint:U}]})}break}default:throw Error(`Unsupported role: ${G}`)}return{messages:X,warnings:J}}function Ts0({id:$,model:Z,created:Q}){return br({id:$,model:Z,created:Q||void 0})}function HG$($){switch($){case"stop":return"stop";case"length":return"length";case"content_filter":return"content-filter";case"function_call":case"tool_calls":return"tool-calls";default:return"other"}}function Hs($){let Z=!1;return{schema:Y($),warnings:Z?[{type:"compatibility",feature:"JSON Schema propertyNames",details:"OpenAI does not support JSON Schema propertyNames. It was removed before sending the schema, so OpenAI will not enforce property-name constraints."}]:[]};function Y(G){let W=G.propertyNames;if(W!=null){if(typeof W==="boolean"||W.type!=="string")throw new t1({functionality:"JSON Schema propertyNames that does not use a string schema"});Z=!0}let K={...G};if(delete K.propertyNames,K.properties!=null)K.properties=X(K.properties);if(K.patternProperties!=null)K.patternProperties=X(K.patternProperties);if(K.additionalProperties!=null)K.additionalProperties=J(K.additionalProperties);if(K.additionalItems!=null)K.additionalItems=J(K.additionalItems);if(K.items!=null)K.items=Array.isArray(K.items)?K.items.map(J):J(K.items);if(K.contains!=null)K.contains=J(K.contains);if(K.not!=null)K.not=J(K.not);if(K.allOf!=null)K.allOf=K.allOf.map(J);if(K.anyOf!=null)K.anyOf=K.anyOf.map(J);if(K.oneOf!=null)K.oneOf=K.oneOf.map(J);if(K.definitions!=null)K.definitions=X(K.definitions);if(K.$defs!=null)K.$defs=X(K.$defs);if(K.dependencies!=null)K.dependencies=Object.fromEntries(Object.entries(K.dependencies).map(([H,F])=>[H,Array.isArray(F)?F:J(F)]));for(let H of["if","then","else"]){let F=K[H];if(F!=null)K[H]=J(F)}return K}function X(G){return Object.fromEntries(Object.entries(G).map(([W,K])=>[W,J(K)]))}function J(G){return typeof G==="boolean"?G:Y(G)}}function yD4({tools:$,toolChoice:Z}){$=($==null?void 0:$.length)?$:void 0;let Q=[];if($==null)return{tools:void 0,toolChoice:void 0,toolWarnings:Q};let Y=[];for(let J of $)switch(J.type){case"function":{let G=Hs(J.inputSchema);Q.push(...G.warnings),Y.push({type:"function",function:{name:J.name,description:J.description,parameters:G.schema,...J.strict!=null?{strict:J.strict}:{}}});break}default:Q.push({type:"unsupported",feature:`tool type: ${J.type}`});break}if(Z==null)return{tools:Y,toolChoice:void 0,toolWarnings:Q};let X=Z.type;switch(X){case"auto":case"none":case"required":return{tools:Y,toolChoice:X,toolWarnings:Q};case"tool":return{tools:Y,toolChoice:{type:"function",function:{name:Z.toolName}},toolWarnings:Q};default:throw new t1({functionality:`tool choice type: ${X}`})}}function hD4($){if("error"in $)return!1;return $.choices.some((Z)=>{let Q=Z.delta;return(Q==null?void 0:Q.content)!=null&&Q.content.length>0||(Q==null?void 0:Q.tool_calls)!=null&&Q.tool_calls.length>0||(Q==null?void 0:Q.annotations)!=null&&Q.annotations.length>0})}function FG$($){var Z,Q,Y,X;if($==null)return jF();let J=(Z=$.prompt_tokens)!=null?Z:0,G=(Q=$.completion_tokens)!=null?Q:0;return{inputTokens:{total:(Y=$.prompt_tokens)!=null?Y:void 0,noCache:J,cacheRead:void 0,cacheWrite:void 0},outputTokens:{total:(X=$.completion_tokens)!=null?X:void 0,text:G,reasoning:void 0},raw:$}}function uD4({prompt:$,user:Z="user",assistant:Q="assistant"}){let Y="";if($[0].role==="system")Y+=`${$[0].content}
997
997
 
998
998
  `,$=$.slice(1);for(let{role:X,content:J}of $)switch(X){case"system":throw new UF({message:"Unexpected system message in prompt: ${content}",prompt:$});case"user":{let G=J.map((W)=>{switch(W.type){case"text":return W.text}}).filter(Boolean).join("");Y+=`${Z}:
999
999
  ${G}
@@ -1246,7 +1246,7 @@ history, you MUST NOT call skill for it again \u2014 its instructions are alread
1246
1246
  loaded. Only call skill for a skill whose SKILL.md is NOT yet in the
1247
1247
  conversation.
1248
1248
  </skills-usage>`;var Wz$=()=>{};function Cf4($){let Z={};for(let Q of $.split(`
1249
- `)){let Y=Q.match(/^([A-Za-z][\w-]*):\s*(.*)$/);if(Y?.[1]&&Y[2]!==void 0)Z[Y[1].toLowerCase()]=Y[2].trim()}return Z}function Kz$($){for(let Z of $.split(/\n\s*\n/)){let Q=Z.trim();if(!Q||Q.startsWith("#"))continue;return Q.replace(/\n/g," ")}return null}function Hz$($){let Z=$.match(/^---\n([\s\S]*?)\n---\n?/);if(!Z||Z[1]===void 0)return{name:null,description:Kz$($),disableModelInvocation:!1,body:$};let Q=Cf4(Z[1]),Y=$.slice(Z[0].length);return{name:Q.name||null,description:Q.description||Kz$(Y),disableModelInvocation:Q["disable-model-invocation"]==="true",body:Y}}var Fz$=()=>{};class b41{options;kv=null;codec=ww();constructor($){this.options=$}async init(){let $=this.options.getJetStream();if(!$)return;this.kv=await new Nz$.Kvm($).create(_f4,{storage:Uz$.StorageType.Memory,ttl:vf4,maxValueSize:bf4})}async get($){if(!this.kv)return{catalog:null};try{let Z=await this.kv.get($);if(!Z)return{catalog:null};if(Z.operation==="DEL"||Z.operation==="PURGE"||!Z.value?.length)return{catalog:null,revision:Z.revision};let Q=this.codec.decode(Z.value);if(Q===null)return{catalog:null,revision:Z.revision};return Bz$.add(1,{outcome:"hit"}),{catalog:Q,revision:Z.revision}}catch{return{catalog:null}}}async set($,Z,Q){if(!this.kv)return;try{let Y=this.codec.encode(Z);if(Q===void 0)await this.kv.create($,Y);else await this.kv.update($,Y,Q)}catch{}}async invalidate($){if(!this.kv)return;try{await this.kv.put($,xf4)}catch{}}teardown(){this.kv=null}}function Oz$(){Bz$.add(1,{outcome:"miss"})}function f41($){x41=$}function Dz$(){return x41}async function Lz$($){await x41?.invalidate($)}var Uz$,Nz$,Bz$,_f4="DECOCMS_SKILL_CATALOGS",vf4=60000,bf4=1048576,xf4,x41=null;var CA0=D(()=>{C6();Uz$=C(JN(),1),Nz$=C(Es(),1),Bz$=z$.createCounter("skill_catalog_cache.fetches",{description:"Skill catalog cache fetch outcomes (hit, miss)",unit:"{fetches}"}),xf4=new TextEncoder().encode("null")});function uf4($){let Z=$.lastIndexOf("/");return Z===-1?$:$.slice(Z+1)}async function wz$($,Z,Q){try{let Y=(await $.listDir(Z,Q)).filter((J)=>J.kind==="dir");if(Y.length===0)return[];let X=await $.filesExist(Z,Y.map((J)=>`${J.path}/SKILL.md`));return Y.map((J)=>J.path).filter((J)=>X.has(`${J}/SKILL.md`)).toSorted()}catch(Y){return console.warn(`[skill-catalog] scan failed (${Z}:${Q||"/"})`,Y),[]}}async function jz$($,Z){let Q=Array(Z.length).fill(null);return await Zl(Z.map((Y,X)=>({dir:Y,index:X})),gf4,async({dir:Y,index:X})=>{try{let J=await $.read(Y.volume,`${Y.dirPath}/SKILL.md`),G=Hz$(new TextDecoder().decode(J));Q[X]={...Y,name:G.name??uf4(Y.dirPath),description:G.description,disableModelInvocation:G.disableModelInvocation}}catch{}}),Q.filter((Y)=>Y!==null)}async function lf4($,Z,Q,Y){let J=(await wz$($,Z,Q)).slice(0,Math.max(0,Y.remaining));return Y.remaining-=J.length,(await jz$($,J.map((W)=>({volume:Z,dirPath:W})))).map(({dirPath:W,name:K,description:H,disableModelInvocation:F})=>({dirPath:W,name:K,description:H,disableModelInvocation:F}))}async function cf4($){if(_A0&&_A0.expires>Date.now())return _A0.entries;let Z={remaining:yf4},Q=Vn($),Y=[];for(let{set:X}of I3()){let J=kD(X),G=await lf4(Q,J,"",Z);for(let W of G)Y.push({id:`${X}/${W.dirPath}`,name:W.name,description:W.description,disableModelInvocation:W.disableModelInvocation,source:`public:${X}`,sandboxPath:eF(J,W.dirPath),volume:J,path:W.dirPath})}if(Y.length>0)_A0={entries:Y,expires:Date.now()+hf4};return Y}function mf4($,Z){let Q=$X(),Y=Q?KG(Q,Z):new q3(Z,$.baseUrl);return new M3(Y,$.storage.orgFsEntries,Z)}async function df4($,Z){let Q=(await $.storage.orgRepoSyncs.listEnabledVolumes(Z).catch(()=>[])).toSorted(),Y=mf4($,Z),X=[{volume:G00,base:""},{volume:G00,base:"skills"},...Q.map((K)=>({volume:K,base:""}))],J=await Promise.all(X.map((K)=>wz$(Y,K.volume,K.base))),G=ff4,W=[];for(let[K,H]of J.entries()){let F=H.slice(0,G);G-=F.length;for(let U of F)W.push({volume:X[K].volume,dirPath:U})}return(await jz$(Y,W)).map((K)=>K.volume===G00?{id:`home/${K.dirPath}`,name:K.name,description:K.description,disableModelInvocation:K.disableModelInvocation,source:"home",sandboxPath:eF(G00,K.dirPath),volume:G00,path:K.dirPath}:{id:`repo/${K.volume}/${K.dirPath}`,name:K.name,description:K.description,disableModelInvocation:K.disableModelInvocation,source:`repo:${K.volume}`,sandboxPath:eF(K.volume,K.dirPath),volume:K.volume,path:K.dirPath})}async function vA0($,Z){let Q=Dz$(),Y=await Q?.get(Z)??{catalog:null};if(Y.catalog)return Y.catalog;Oz$();let[X,J]=await Promise.all([cf4($),df4($,Z)]),G=[...X,...J].sort((W,K)=>W.source.localeCompare(K.source)||W.id.localeCompare(K.id));return Q?.set(Z,G,Y.revision).catch(()=>{}),G}var ff4=200,yf4=200,gf4=16,hf4=300000,G00="home",_A0=null;var y41=D(()=>{Fz$();dg();ID();CN();mA();CA0();Mz()});async function Ez$($,Z){let Q=$.organization?.id;if(!Q)return null;try{let Y=await vA0($,Q),X=new Set((Z.metadata?.knowledge??[]).filter((W)=>W.kind==="skill").map((W)=>eF(W.volume,W.path))),J=Y.filter((W)=>!W.disableModelInvocation||X.has(W.sandboxPath));if(J.length===0)return null;let G=J.filter((W)=>X.has(W.sandboxPath)).map((W)=>W.id);return Gz$(J.map((W)=>({id:W.id,description:W.description,source:W.source})),G)}catch(Y){return console.warn("[skill-catalog] failed to render skills block",Y),null}}var zz$=D(()=>{Wz$();y41();mA()});import{SpanStatusCode as Pz$}from"@opentelemetry/api";function if4($,Z){if($.connection_type!=="VIRTUAL")return!1;if(!Z||DQ(Z))return!1;return $.id===Z}async function Az$($,Z,Q=!1){let Y=$.id,X=await Z.storage.virtualMcps.findById(Y);if(!X)throw Error(`Virtual MCP not found: ${Y}`);return oB(X,Z,Q)}function nf4($){let Z=$.metadata?.githubRepo?.url;if(!$.organization_id||!Z)return null;let Q=y4.SELF($.organization_id);if($.connections.some((Y)=>Y.connection_id===Q))return null;return{connection_id:Q,selected_tools:[...pf4],selected_resources:null,selected_prompts:null}}async function oB($,Z,Q=!1,Y){let X=$.connections.map((U)=>U.connection_id),G=(await Z.tracer.startActiveSpan("studio.virtual_mcp.load_connections",{attributes:{"virtual_mcp.id":$.id??"decopilot","virtual_mcp.connection_count":X.length}},async(U)=>{try{let N=await Promise.all(X.map((B)=>Z.storage.connections.findById(B)));return U.setStatus({code:Pz$.OK}),N}catch(N){throw U.setStatus({code:Pz$.ERROR,message:N.message}),U.recordException(N),N}finally{U.end()}})).filter((U)=>U!==null&&U.status==="active"&&!if4(U,$.id));if(Y?.additionalConnections?.length)G.unshift(...Y.additionalConnections);if($.organization_id){let U=new Set(G.map((B)=>B.id)),{items:N}=await Z.storage.connections.list($.organization_id,{slug:"mcp-github"});for(let B of N)if(B.status==="active"&&!U.has(B.id)&&Mw(B))G.push(B)}let W=Y?.includeSkillsCatalog?await Ez$(Z,$)??void 0:void 0,K=$,H=nf4($);if(H&&!G.some((U)=>U.id===H.connection_id)){let U=await Z.storage.connections.findById(H.connection_id,$.organization_id);if(U&&U.status==="active")G.push(U),K={...$,connections:[...$.connections,H]}}let F={connections:G,virtualMcp:K,superUser:Q,mcpListCache:GZ()??void 0,listTimeoutMs:Y?.listTimeoutMs,skillsBlock:W};return new SA0(F,Z)}function Tz$($,Z,Q=!1,Y){if($.connection_type==="VIRTUAL")throw Error(`Concrete MCP connection required, received Virtual MCP: ${$.id}`);let X=$.description?.trim(),J=[`You are an ephemeral specialist for the "${$.title}" MCP connection (ID: ${$.id}).`,X||void 0].filter((G)=>G!==void 0).join(`
1249
+ `)){let Y=Q.match(/^([A-Za-z][\w-]*):\s*(.*)$/);if(Y?.[1]&&Y[2]!==void 0)Z[Y[1].toLowerCase()]=Y[2].trim()}return Z}function Kz$($){for(let Z of $.split(/\n\s*\n/)){let Q=Z.trim();if(!Q||Q.startsWith("#"))continue;return Q.replace(/\n/g," ")}return null}function Hz$($){let Z=$.match(/^---\n([\s\S]*?)\n---\n?/);if(!Z||Z[1]===void 0)return{name:null,description:Kz$($),disableModelInvocation:!1,body:$};let Q=Cf4(Z[1]),Y=$.slice(Z[0].length);return{name:Q.name||null,description:Q.description||Kz$(Y),disableModelInvocation:Q["disable-model-invocation"]==="true",body:Y}}var Fz$=()=>{};class b41{options;kv=null;codec=ww();constructor($){this.options=$}async init(){let $=this.options.getJetStream();if(!$)return;this.kv=await new Nz$.Kvm($).create(_f4,{storage:Uz$.StorageType.Memory,ttl:vf4,maxValueSize:bf4})}async get($){if(!this.kv)return{catalog:null};try{let Z=await this.kv.get($);if(!Z)return{catalog:null};if(Z.operation==="DEL"||Z.operation==="PURGE"||!Z.value?.length)return{catalog:null,revision:Z.revision};let Q=this.codec.decode(Z.value);if(Q===null)return{catalog:null,revision:Z.revision};return Bz$.add(1,{outcome:"hit"}),{catalog:Q,revision:Z.revision}}catch{return{catalog:null}}}async set($,Z,Q){if(!this.kv)return;try{let Y=this.codec.encode(Z);if(Q===void 0)await this.kv.create($,Y);else await this.kv.update($,Y,Q)}catch{}}async invalidate($){if(!this.kv)return;try{await this.kv.put($,xf4)}catch{}}teardown(){this.kv=null}}function Oz$(){Bz$.add(1,{outcome:"miss"})}function f41($){x41=$}function Dz$(){return x41}async function Lz$($){await x41?.invalidate($)}var Uz$,Nz$,Bz$,_f4="DECOCMS_SKILL_CATALOGS",vf4=60000,bf4=1048576,xf4,x41=null;var CA0=D(()=>{C6();Uz$=C(JN(),1),Nz$=C(Es(),1),Bz$=z$.createCounter("skill_catalog_cache.fetches",{description:"Skill catalog cache fetch outcomes (hit, miss)",unit:"{fetches}"}),xf4=new TextEncoder().encode("null")});function uf4($){let Z=$.lastIndexOf("/");return Z===-1?$:$.slice(Z+1)}async function wz$($,Z,Q){try{let Y=(await $.listDir(Z,Q)).filter((J)=>J.kind==="dir");if(Y.length===0)return[];let X=await $.filesExist(Z,Y.map((J)=>`${J.path}/SKILL.md`));return Y.map((J)=>J.path).filter((J)=>X.has(`${J}/SKILL.md`)).toSorted()}catch(Y){return console.warn(`[skill-catalog] scan failed (${Z}:${Q||"/"})`,Y),[]}}async function jz$($,Z){let Q=Array(Z.length).fill(null);return await Zl(Z.map((Y,X)=>({dir:Y,index:X})),gf4,async({dir:Y,index:X})=>{try{let J=await $.read(Y.volume,`${Y.dirPath}/SKILL.md`),G=Hz$(new TextDecoder().decode(J));Q[X]={...Y,name:G.name??uf4(Y.dirPath),description:G.description,disableModelInvocation:G.disableModelInvocation}}catch{}}),Q.filter((Y)=>Y!==null)}async function lf4($,Z,Q,Y){let J=(await wz$($,Z,Q)).slice(0,Math.max(0,Y.remaining));return Y.remaining-=J.length,(await jz$($,J.map((W)=>({volume:Z,dirPath:W})))).map(({dirPath:W,name:K,description:H,disableModelInvocation:F})=>({dirPath:W,name:K,description:H,disableModelInvocation:F}))}async function cf4($){if(_A0&&_A0.expires>Date.now())return _A0.entries;let Z={remaining:yf4},Q=Vn($),Y=[];for(let{set:X}of I3()){let J=kD(X),G=await lf4(Q,J,"",Z);for(let W of G)Y.push({id:`${X}/${W.dirPath}`,name:W.name,description:W.description,disableModelInvocation:W.disableModelInvocation,source:`public:${X}`,sandboxPath:eF(J,W.dirPath),volume:J,path:W.dirPath})}if(Y.length>0)_A0={entries:Y,expires:Date.now()+hf4};return Y}function mf4($,Z){let Q=$X(),Y=Q?KG(Q,Z):new q3(Z,$.baseUrl);return new M3(Y,$.storage.orgFsEntries,Z)}async function df4($,Z){let Q=(await $.storage.orgRepoSyncs.listEnabledVolumes(Z).catch(()=>[])).toSorted(),Y=mf4($,Z),X=[{volume:G00,base:""},{volume:G00,base:"skills"},...Q.map((K)=>({volume:K,base:""}))],J=await Promise.all(X.map((K)=>wz$(Y,K.volume,K.base))),G=ff4,W=[];for(let[K,H]of J.entries()){let F=H.slice(0,G);G-=F.length;for(let U of F)W.push({volume:X[K].volume,dirPath:U})}return(await jz$(Y,W)).map((K)=>K.volume===G00?{id:`home/${K.dirPath}`,name:K.name,description:K.description,disableModelInvocation:K.disableModelInvocation,source:"home",sandboxPath:eF(G00,K.dirPath),volume:G00,path:K.dirPath}:{id:`repo/${K.volume}/${K.dirPath}`,name:K.name,description:K.description,disableModelInvocation:K.disableModelInvocation,source:`repo:${K.volume}`,sandboxPath:eF(K.volume,K.dirPath),volume:K.volume,path:K.dirPath})}async function vA0($,Z){let Q=Dz$(),Y=await Q?.get(Z)??{catalog:null};if(Y.catalog)return Y.catalog;Oz$();let[X,J]=await Promise.all([cf4($),df4($,Z)]),G=[...X,...J].sort((W,K)=>W.source.localeCompare(K.source)||W.id.localeCompare(K.id));return Q?.set(Z,G,Y.revision).catch(()=>{}),G}var ff4=200,yf4=200,gf4=16,hf4=300000,G00="home",_A0=null;var y41=D(()=>{Fz$();dg();ID();CN();mA();CA0();Mz()});async function Ez$($,Z){let Q=$.organization?.id;if(!Q)return null;try{let Y=await vA0($,Q),X=new Set((Z.metadata?.knowledge??[]).filter((W)=>W.kind==="skill").map((W)=>eF(W.volume,W.path))),J=Y.filter((W)=>!W.disableModelInvocation||X.has(W.sandboxPath));if(J.length===0)return null;let G=J.filter((W)=>X.has(W.sandboxPath)).map((W)=>W.id);return Gz$(J.map((W)=>({id:W.id,description:W.description,source:W.source})),G)}catch(Y){return console.warn("[skill-catalog] failed to render skills block",Y),null}}var zz$=D(()=>{Wz$();y41();mA()});import{SpanStatusCode as Pz$}from"@opentelemetry/api";function if4($,Z){if($.connection_type!=="VIRTUAL")return!1;if(!Z||DQ(Z))return!1;return $.id===Z}async function Az$($,Z,Q=!1){let Y=$.id,X=await Z.storage.virtualMcps.findById(Y);if(!X)throw Error(`Virtual MCP not found: ${Y}`);return oB(X,Z,Q)}function nf4($){let Z=$.metadata?.githubRepo?.url;if(!$.organization_id||!Z)return null;let Q=y4.SELF($.organization_id);if($.connections.some((Y)=>Y.connection_id===Q))return null;return{connection_id:Q,selected_tools:[...pf4],selected_resources:null,selected_prompts:null}}async function oB($,Z,Q=!1,Y){let X=$.connections.map((U)=>U.connection_id),G=(await Z.tracer.startActiveSpan("studio.virtual_mcp.load_connections",{attributes:{"virtual_mcp.id":$.id??"decopilot","virtual_mcp.connection_count":X.length}},async(U)=>{let N=await Promise.allSettled(X.map((O)=>Z.storage.connections.findById(O))),B=N.filter((O)=>O.status==="rejected");if(B.length>0){U.setStatus({code:Pz$.ERROR,message:`${B.length}/${N.length} connection lookups failed`});for(let O of B)U.recordException(O.reason),console.error(`[virtual-mcp] failed to load a connection for virtual MCP ${$.id??"decopilot"}:`,O.reason)}else U.setStatus({code:Pz$.OK});return U.end(),N.map((O)=>O.status==="fulfilled"?O.value:null)})).filter((U)=>U!==null&&U.status==="active"&&!if4(U,$.id));if(Y?.additionalConnections?.length)G.unshift(...Y.additionalConnections);if($.organization_id){let U=new Set(G.map((B)=>B.id)),{items:N}=await Z.storage.connections.list($.organization_id,{slug:"mcp-github"});for(let B of N)if(B.status==="active"&&!U.has(B.id)&&Mw(B))G.push(B)}let W=Y?.includeSkillsCatalog?await Ez$(Z,$)??void 0:void 0,K=$,H=nf4($);if(H&&!G.some((U)=>U.id===H.connection_id)){let U=await Z.storage.connections.findById(H.connection_id,$.organization_id);if(U&&U.status==="active")G.push(U),K={...$,connections:[...$.connections,H]}}let F={connections:G,virtualMcp:K,superUser:Q,mcpListCache:GZ()??void 0,listTimeoutMs:Y?.listTimeoutMs,skillsBlock:W};return new SA0(F,Z)}function Tz$($,Z,Q=!1,Y){if($.connection_type==="VIRTUAL")throw Error(`Concrete MCP connection required, received Virtual MCP: ${$.id}`);let X=$.description?.trim(),J=[`You are an ephemeral specialist for the "${$.title}" MCP connection (ID: ${$.id}).`,X||void 0].filter((G)=>G!==void 0).join(`
1250
1250
 
1251
1251
  `);return new SA0({connections:[$],superUser:Q,mcpListCache:GZ()??void 0,listTimeoutMs:Y?.listTimeoutMs,instructions:J},Z)}var pf4;var pc=D(()=>{e8();DJ();wJ();Xz$();zz$();pf4=["TASK_BOARD_ITEM_LIST","TASK_BOARD_ITEM_CREATE","TASK_BOARD_ITEM_UPDATE","TASK_BOARD_COMMENT_CREATE"]});async function bA0($,Z,Q,{superUser:Y=!1}={}){let X=await $.storage.virtualMcps.findById(Q,Z);if(X?.organization_id===Z){if(X.status!=="active")throw Error("Agent is not active");let W=await HJ0({virtualMcp:X,organizationId:Z,ctx:$}),K=await oB(W,$,Y,{includeSkillsCatalog:!0});return{mcpClient:K,targetKind:"virtual-mcp",targetRef:{id:W.id,instructions:K.getInstructions(),repo:W.metadata?.githubRepo??void 0}}}let J=await $.storage.connections.findById(Q,Z);if(!J||J.organization_id!==Z||J.connection_type==="VIRTUAL")throw Error("Agent or MCP connection not found");if(J.status!=="active")throw Error("MCP connection is not active");let G=Tz$(J,$,Y);return{mcpClient:G,targetKind:"connection",targetRef:{id:J.id,instructions:G.getInstructions(),repo:void 0}}}var g41=D(()=>{pc();Yl()});var u41=b((PGZ,Mz$)=>{var{defineProperty:h41,getOwnPropertyDescriptor:tf4,getOwnPropertyNames:of4}=Object,rf4=Object.prototype.hasOwnProperty,af4=($,Z)=>{for(var Q in Z)h41($,Q,{get:Z[Q],enumerable:!0})},sf4=($,Z,Q,Y)=>{if(Z&&typeof Z==="object"||typeof Z==="function"){for(let X of of4(Z))if(!rf4.call($,X)&&X!==Q)h41($,X,{get:()=>Z[X],enumerable:!(Y=tf4(Z,X))||Y.enumerable})}return $},ef4=($)=>sf4(h41({},"__esModule",{value:!0}),$),Rz$={};af4(Rz$,{SYMBOL_FOR_REQ_CONTEXT:()=>qz$,getContext:()=>$y4});Mz$.exports=ef4(Rz$);var qz$=Symbol.for("@vercel/request-context");function $y4(){return globalThis[qz$]?.get?.()??{}}});var W00=b((AGZ,kz$)=>{var{defineProperty:l41,getOwnPropertyDescriptor:Zy4,getOwnPropertyNames:Qy4}=Object,Yy4=Object.prototype.hasOwnProperty,Xy4=($,Z)=>{for(var Q in Z)l41($,Q,{get:Z[Q],enumerable:!0})},Jy4=($,Z,Q,Y)=>{if(Z&&typeof Z==="object"||typeof Z==="function"){for(let X of Qy4(Z))if(!Yy4.call($,X)&&X!==Q)l41($,X,{get:()=>Z[X],enumerable:!(Y=Zy4(Z,X))||Y.enumerable})}return $},Gy4=($)=>Jy4(l41({},"__esModule",{value:!0}),$),Iz$={};Xy4(Iz$,{VercelOidcTokenError:()=>Vz$});kz$.exports=Gy4(Iz$);class Vz$ extends Error{constructor($,Z){super($);this.name="VercelOidcTokenError",this.cause=Z}toString(){if(this.cause)return`${this.name}: ${this.message}: ${this.cause}`;return`${this.name}: ${this.message}`}}});var vz$=b((TGZ,_z$)=>{var{create:Wy4,defineProperty:xA0,getOwnPropertyDescriptor:Ky4,getOwnPropertyNames:Hy4,getPrototypeOf:Fy4}=Object,Uy4=Object.prototype.hasOwnProperty,Ny4=($,Z)=>{for(var Q in Z)xA0($,Q,{get:Z[Q],enumerable:!0})},Sz$=($,Z,Q,Y)=>{if(Z&&typeof Z==="object"||typeof Z==="function"){for(let X of Hy4(Z))if(!Uy4.call($,X)&&X!==Q)xA0($,X,{get:()=>Z[X],enumerable:!(Y=Ky4(Z,X))||Y.enumerable})}return $},m41=($,Z,Q)=>(Q=$!=null?Wy4(Fy4($)):{},Sz$(Z||!$||!$.__esModule?xA0(Q,"default",{value:$,enumerable:!0}):Q,$)),By4=($)=>Sz$(xA0({},"__esModule",{value:!0}),$),Cz$={};Ny4(Cz$,{findRootDir:()=>Ly4,getUserDataDir:()=>wy4});_z$.exports=By4(Cz$);var K00=m41(q0("path")),Oy4=m41(q0("fs")),c41=m41(q0("os")),Dy4=W00();function Ly4(){try{let $=process.cwd();while($!==K00.default.dirname($)){let Z=K00.default.join($,".vercel");if(Oy4.default.existsSync(Z))return $;$=K00.default.dirname($)}}catch($){throw new Dy4.VercelOidcTokenError("Token refresh only supported in node server environments")}return null}function wy4(){if(process.env.XDG_DATA_HOME)return process.env.XDG_DATA_HOME;switch(c41.default.platform()){case"darwin":return K00.default.join(c41.default.homedir(),"Library/Application Support");case"linux":return K00.default.join(c41.default.homedir(),".local/share");case"win32":if(process.env.LOCALAPPDATA)return process.env.LOCALAPPDATA;return null;default:return null}}});var uz$=b((RGZ,hz$)=>{var{create:jy4,defineProperty:fA0,getOwnPropertyDescriptor:Ey4,getOwnPropertyNames:zy4,getPrototypeOf:Py4}=Object,Ay4=Object.prototype.hasOwnProperty,Ty4=($,Z)=>{for(var Q in Z)fA0($,Q,{get:Z[Q],enumerable:!0})},bz$=($,Z,Q,Y)=>{if(Z&&typeof Z==="object"||typeof Z==="function"){for(let X of zy4(Z))if(!Ay4.call($,X)&&X!==Q)fA0($,X,{get:()=>Z[X],enumerable:!(Y=Ey4(Z,X))||Y.enumerable})}return $},xz$=($,Z,Q)=>(Q=$!=null?jy4(Py4($)):{},bz$(Z||!$||!$.__esModule?fA0(Q,"default",{value:$,enumerable:!0}):Q,$)),Ry4=($)=>bz$(fA0({},"__esModule",{value:!0}),$),fz$={};Ty4(fz$,{isValidAccessToken:()=>Vy4,readAuthConfig:()=>My4,writeAuthConfig:()=>Iy4});hz$.exports=Ry4(fz$);var H00=xz$(q0("fs")),yz$=xz$(q0("path")),qy4=F00();function gz$(){let $=(0,qy4.getVercelDataDir)();if(!$)throw Error(`Unable to find Vercel CLI data directory. Your platform: ${process.platform}. Supported: darwin, linux, win32.`);return yz$.join($,"auth.json")}function My4(){try{let $=gz$();if(!H00.existsSync($))return null;let Z=H00.readFileSync($,"utf8");if(!Z)return null;return JSON.parse(Z)}catch($){return null}}function Iy4($){let Z=gz$(),Q=yz$.dirname(Z);if(!H00.existsSync(Q))H00.mkdirSync(Q,{mode:504,recursive:!0});H00.writeFileSync(Z,JSON.stringify($,null,2),{mode:384})}function Vy4($,Z=0){if(!$.token)return!1;if(typeof $.expiresAt!=="number")return!0;let Q=Math.floor(Date.now()/1000),Y=Z/1000;return $.expiresAt>=Q+Y}});var dz$=b((qGZ,mz$)=>{var{defineProperty:p41,getOwnPropertyDescriptor:ky4,getOwnPropertyNames:Sy4}=Object,Cy4=Object.prototype.hasOwnProperty,_y4=($,Z)=>{for(var Q in Z)p41($,Q,{get:Z[Q],enumerable:!0})},vy4=($,Z,Q,Y)=>{if(Z&&typeof Z==="object"||typeof Z==="function"){for(let X of Sy4(Z))if(!Cy4.call($,X)&&X!==Q)p41($,X,{get:()=>Z[X],enumerable:!(Y=ky4(Z,X))||Y.enumerable})}return $},by4=($)=>vy4(p41({},"__esModule",{value:!0}),$),lz$={};_y4(lz$,{processTokenResponse:()=>hy4,refreshTokenRequest:()=>gy4});mz$.exports=by4(lz$);var d41=q0("os"),xy4="https://vercel.com",fy4="cl_HYyOPBNtFMfHhaUn9L4QPfTZz6TP47bp",cz$=`@vercel/oidc node-${process.version} ${(0,d41.platform)()} (${(0,d41.arch)()}) ${(0,d41.hostname)()}`,i41=null;async function yy4(){if(i41)return i41;let $=`${xy4}/.well-known/openid-configuration`,Z=await fetch($,{headers:{"user-agent":cz$}});if(!Z.ok)throw Error("Failed to discover OAuth endpoints");let Q=await Z.json();if(!Q||typeof Q.token_endpoint!=="string")throw Error("Invalid OAuth discovery response");let Y=Q.token_endpoint;return i41=Y,Y}async function gy4($){let Z=await yy4();return await fetch(Z,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded","user-agent":cz$},body:new URLSearchParams({client_id:fy4,grant_type:"refresh_token",...$})})}async function hy4($){let Z=await $.json();if(!$.ok){let Q=typeof Z==="object"&&Z&&"error"in Z?String(Z.error):"Token refresh failed";return[Error(Q)]}if(typeof Z!=="object"||Z===null)return[Error("Invalid token response")];if(typeof Z.access_token!=="string")return[Error("Missing access_token in response")];if(Z.token_type!=="Bearer")return[Error("Invalid token_type in response")];if(typeof Z.expires_in!=="number")return[Error("Missing expires_in in response")];return[null,Z]}});var t41=b((MGZ,tz$)=>{var{defineProperty:n41,getOwnPropertyDescriptor:uy4,getOwnPropertyNames:ly4}=Object,cy4=Object.prototype.hasOwnProperty,my4=($,Z)=>{for(var Q in Z)n41($,Q,{get:Z[Q],enumerable:!0})},dy4=($,Z,Q,Y)=>{if(Z&&typeof Z==="object"||typeof Z==="function"){for(let X of ly4(Z))if(!cy4.call($,X)&&X!==Q)n41($,X,{get:()=>Z[X],enumerable:!(Y=uy4(Z,X))||Y.enumerable})}return $},iy4=($)=>dy4(n41({},"__esModule",{value:!0}),$),iz$={};my4(iz$,{AccessTokenMissingError:()=>pz$,RefreshAccessTokenFailedError:()=>nz$});tz$.exports=iy4(iz$);class pz$ extends Error{constructor(){super("No authentication found. Please log in with the Vercel CLI (vercel login).");this.name="AccessTokenMissingError"}}class nz$ extends Error{constructor($){super("Failed to refresh authentication token.",{cause:$});this.name="RefreshAccessTokenFailedError"}}});var F00=b((IGZ,ez$)=>{var{create:py4,defineProperty:yA0,getOwnPropertyDescriptor:ny4,getOwnPropertyNames:ty4,getPrototypeOf:oy4}=Object,ry4=Object.prototype.hasOwnProperty,ay4=($,Z)=>{for(var Q in Z)yA0($,Q,{get:Z[Q],enumerable:!0})},rz$=($,Z,Q,Y)=>{if(Z&&typeof Z==="object"||typeof Z==="function"){for(let X of ty4(Z))if(!ry4.call($,X)&&X!==Q)yA0($,X,{get:()=>Z[X],enumerable:!(Y=ny4(Z,X))||Y.enumerable})}return $},az$=($,Z,Q)=>(Q=$!=null?py4(oy4($)):{},rz$(Z||!$||!$.__esModule?yA0(Q,"default",{value:$,enumerable:!0}):Q,$)),sy4=($)=>rz$(yA0({},"__esModule",{value:!0}),$),sz$={};ay4(sz$,{assertVercelOidcTokenResponse:()=>o41,findProjectInfo:()=>Qg4,getTokenPayload:()=>Jg4,getVercelDataDir:()=>ey4,getVercelOidcToken:()=>Zg4,getVercelToken:()=>$g4,isExpired:()=>Gg4,loadToken:()=>Xg4,saveToken:()=>Yg4});ez$.exports=sy4(sz$);var U00=az$(q0("path")),qx=az$(q0("fs")),oc=W00(),gA0=vz$(),nc=uz$(),oz$=dz$(),tc=t41();function ey4(){let Z=(0,gA0.getUserDataDir)();if(!Z)return null;return U00.join(Z,"com.vercel.cli")}async function $g4($){let Z=(0,nc.readAuthConfig)();if(!Z?.token)throw new tc.AccessTokenMissingError;if((0,nc.isValidAccessToken)(Z,$?.expirationBufferMs))return Z.token;if(!Z.refreshToken)throw(0,nc.writeAuthConfig)({}),new tc.RefreshAccessTokenFailedError("No refresh token available");try{let Q=await(0,oz$.refreshTokenRequest)({refresh_token:Z.refreshToken}),[Y,X]=await(0,oz$.processTokenResponse)(Q);if(Y||!X)throw(0,nc.writeAuthConfig)({}),new tc.RefreshAccessTokenFailedError(Y);let J={token:X.access_token,expiresAt:Math.floor(Date.now()/1000)+X.expires_in};if(X.refresh_token)J.refreshToken=X.refresh_token;return(0,nc.writeAuthConfig)(J),J.token}catch(Q){if((0,nc.writeAuthConfig)({}),Q instanceof tc.AccessTokenMissingError||Q instanceof tc.RefreshAccessTokenFailedError)throw Q;throw new tc.RefreshAccessTokenFailedError(Q)}}async function Zg4($,Z,Q){let Y=`https://api.vercel.com/v1/projects/${Z}/token?source=vercel-oidc-refresh${Q?`&teamId=${Q}`:""}`,X=await fetch(Y,{method:"POST",headers:{Authorization:`Bearer ${$}`}});if(!X.ok)throw new oc.VercelOidcTokenError(`Failed to refresh OIDC token: ${X.statusText}`);let J=await X.json();return o41(J),J}function o41($){if(!$||typeof $!=="object")throw TypeError("Vercel OIDC token is malformed. Expected an object. Please run `vc env pull` and try again");if(!("token"in $)||typeof $.token!=="string")throw TypeError("Vercel OIDC token is malformed. Expected a string-valued token property. Please run `vc env pull` and try again")}function Qg4(){let $=(0,gA0.findRootDir)();if(!$)throw new oc.VercelOidcTokenError("Unable to find project root directory. Have you linked your project with `vc link?`");let Z=U00.join($,".vercel","project.json");if(!qx.existsSync(Z))throw new oc.VercelOidcTokenError("project.json not found, have you linked your project with `vc link?`");let Q=JSON.parse(qx.readFileSync(Z,"utf8"));if(typeof Q.projectId!=="string"&&typeof Q.orgId!=="string")throw TypeError("Expected a string-valued projectId property. Try running `vc link` to re-link your project.");return{projectId:Q.projectId,teamId:Q.orgId}}function Yg4($,Z){let Q=(0,gA0.getUserDataDir)();if(!Q)throw new oc.VercelOidcTokenError("Unable to find user data directory. Please reach out to Vercel support.");let Y=U00.join(Q,"com.vercel.token",`${Z}.json`),X=JSON.stringify($);qx.mkdirSync(U00.dirname(Y),{mode:504,recursive:!0}),qx.writeFileSync(Y,X),qx.chmodSync(Y,432);return}function Xg4($){let Z=(0,gA0.getUserDataDir)();if(!Z)throw new oc.VercelOidcTokenError("Unable to find user data directory. Please reach out to Vercel support.");let Q=U00.join(Z,"com.vercel.token",`${$}.json`);if(!qx.existsSync(Q))return null;let Y=JSON.parse(qx.readFileSync(Q,"utf8"));return o41(Y),Y}function Jg4($){let Z=$.split(".");if(Z.length!==3)throw new oc.VercelOidcTokenError("Invalid token. Please run `vc env pull` and try again");let Q=Z[1].replace(/-/g,"+").replace(/_/g,"/"),Y=Q.padEnd(Q.length+(4-Q.length%4)%4,"=");return JSON.parse(Buffer.from(Y,"base64").toString("utf8"))}function Gg4($,Z=0){return $.exp*1000<Date.now()+Z}});var YP$=b((VGZ,QP$)=>{var{defineProperty:r41,getOwnPropertyDescriptor:Wg4,getOwnPropertyNames:Kg4}=Object,Hg4=Object.prototype.hasOwnProperty,Fg4=($,Z)=>{for(var Q in Z)r41($,Q,{get:Z[Q],enumerable:!0})},Ug4=($,Z,Q,Y)=>{if(Z&&typeof Z==="object"||typeof Z==="function"){for(let X of Kg4(Z))if(!Hg4.call($,X)&&X!==Q)r41($,X,{get:()=>Z[X],enumerable:!(Y=Wg4(Z,X))||Y.enumerable})}return $},Ng4=($)=>Ug4(r41({},"__esModule",{value:!0}),$),ZP$={};Fg4(ZP$,{refreshToken:()=>Bg4});QP$.exports=Ng4(ZP$);var $P$=W00(),Oj=F00();async function Bg4($){let Z=$?.project,Q=$?.team;if(!Z&&!Q){let X=(0,Oj.findProjectInfo)();Z=X.projectId,Q=X.teamId}else if(!Z||!Q){let X=(0,Oj.findProjectInfo)();Z=Z??X.projectId,Q=Q??X.teamId}if(!Z)throw new $P$.VercelOidcTokenError("Failed to refresh OIDC token: No project specified. Try re-linking your project with `vc link`");let Y=(0,Oj.loadToken)(Z);if(!Y||(0,Oj.isExpired)((0,Oj.getTokenPayload)(Y.token),$?.expirationBufferMs)){let X=await(0,Oj.getVercelToken)({expirationBufferMs:$?.expirationBufferMs});if(Y=await(0,Oj.getVercelOidcToken)(X,Z,Q),!Y)throw new $P$.VercelOidcTokenError("Failed to refresh OIDC token");(0,Oj.saveToken)(Y,Z)}process.env.VERCEL_OIDC_TOKEN=Y.token;return}});var GP$=b((kGZ,JP$)=>{var{defineProperty:s41,getOwnPropertyDescriptor:Og4,getOwnPropertyNames:Dg4}=Object,Lg4=Object.prototype.hasOwnProperty,wg4=($,Z)=>{for(var Q in Z)s41($,Q,{get:Z[Q],enumerable:!0})},jg4=($,Z,Q,Y)=>{if(Z&&typeof Z==="object"||typeof Z==="function"){for(let X of Dg4(Z))if(!Lg4.call($,X)&&X!==Q)s41($,X,{get:()=>Z[X],enumerable:!(Y=Og4(Z,X))||Y.enumerable})}return $},Eg4=($)=>jg4(s41({},"__esModule",{value:!0}),$),XP$={};wg4(XP$,{getVercelOidcToken:()=>Ag4,getVercelOidcTokenSync:()=>a41});JP$.exports=Eg4(XP$);var zg4=u41(),Pg4=W00();async function Ag4($){let Z="",Q;try{Z=a41()}catch(Y){Q=Y}try{let[{getTokenPayload:Y,isExpired:X},{refreshToken:J}]=await Promise.all([await Promise.resolve().then(() => C(F00())),await Promise.resolve().then(() => C(YP$()))]);if(!Z||X(Y(Z),$?.expirationBufferMs))await J($),Z=a41()}catch(Y){let X=Q instanceof Error?Q.message:"";if(Y instanceof Error)X=`${X}
1252
1252
  ${Y.message}`;if(X)throw new Pg4.VercelOidcTokenError(X);throw Y}return Z}function a41(){let $=(0,zg4.getContext)().headers?.["x-vercel-oidc-token"]??process.env.VERCEL_OIDC_TOKEN;if(!$)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 $}});var $61=b((SGZ,FP$)=>{var{defineProperty:e41,getOwnPropertyDescriptor:Tg4,getOwnPropertyNames:Rg4}=Object,qg4=Object.prototype.hasOwnProperty,Mg4=($,Z)=>{for(var Q in Z)e41($,Q,{get:Z[Q],enumerable:!0})},Ig4=($,Z,Q,Y)=>{if(Z&&typeof Z==="object"||typeof Z==="function"){for(let X of Rg4(Z))if(!qg4.call($,X)&&X!==Q)e41($,X,{get:()=>Z[X],enumerable:!(Y=Tg4(Z,X))||Y.enumerable})}return $},Vg4=($)=>Ig4(e41({},"__esModule",{value:!0}),$),HP$={};Mg4(HP$,{AccessTokenMissingError:()=>KP$.AccessTokenMissingError,RefreshAccessTokenFailedError:()=>KP$.RefreshAccessTokenFailedError,getContext:()=>kg4.getContext,getVercelOidcToken:()=>WP$.getVercelOidcToken,getVercelOidcTokenSync:()=>WP$.getVercelOidcTokenSync,getVercelToken:()=>Sg4.getVercelToken});FP$.exports=Vg4(HP$);var WP$=GP$(),kg4=u41(),KP$=t41(),Sg4=F00()});import{any as yg4,array as gg4,boolean as hg4,discriminatedUnion as ug4,enum as lg4,literal as cg4,number as mg4,object as dg4,record as ig4,string as pg4,union as ng4,unknown as tg4}from"zod/v4";function bg4($,Z){return QA$(Cg4,$,Z)}function xg4($,Z){return QA$(ZA$,$,Z)}function QA$($,Z,Q){let Y=[$,`${_g4}${Z}`];if(Q==null?void 0:Q.teamIdOrSlug)Y.push(`${vg4}${fg4(Q.teamIdOrSlug)}`);return Y}function fg4($){let Z=new TextEncoder().encode($),Q="";for(let Y of Z)Q+=String.fromCharCode(Y);return btoa(Q).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/u,"")}async function X61({response:$,statusCode:Z,defaultMessage:Q="Gateway request failed",cause:Y,authMethod:X,isRetryable:J}){var G;let W=await u4({value:$,schema:Oh4});if(!W.success){let N=typeof $==="object"&&$!==null&&"generationId"in $?$.generationId:void 0;return new Bh4({message:`Invalid error response format: ${Q}`,statusCode:Z,response:$,validationError:W.error,cause:Y,generationId:N,isRetryable:J})}let K=W.value,H=K.error.type,F=K.error.message,U=(G=K.generationId)!=null?G:void 0;switch(H){case"authentication_error":return N00.createContextualError({apiKeyProvided:X==="api-key",oidcTokenProvided:X==="oidc",statusCode:Z,cause:Y,generationId:U});case"invalid_request_error":return new sg4({message:F,statusCode:Z,cause:Y,generationId:U});case"rate_limit_exceeded":return new $h4({message:F,statusCode:Z,cause:Y,generationId:U});case"model_not_found":{let N=await u4({value:K.error.param,schema:Qh4});return new Yh4({message:F,statusCode:Z,modelId:N.success?N.value.modelId:void 0,cause:Y,generationId:U})}case"not_found":return new Jh4({message:F,statusCode:Z,cause:Y,generationId:U});case"internal_server_error":return new CP$({message:F,statusCode:Z,cause:Y,generationId:U});case"failed_dependency":return new Kh4({message:F,statusCode:Z,cause:Y,generationId:U});case"forbidden":{let N=await u4({value:K.error.param,schema:Fh4});return new Uh4({message:F,statusCode:Z,cause:Y,generationId:U,ruleId:N.success?N.value.ruleId:void 0})}default:return new CP$({message:F,statusCode:Z,cause:Y,generationId:U})}}function Dh4($){if($.data!==void 0)return $.data;if($.responseBody!=null)try{return JJ($.responseBody)}catch(Z){return $.responseBody}return{}}function iP$($){if(!($ instanceof Error))return!1;let Z=$.code;if(typeof Z==="string")return["UND_ERR_HEADERS_TIMEOUT","UND_ERR_BODY_TIMEOUT","UND_ERR_CONNECT_TIMEOUT"].includes(Z);return!1}async function I9($,Z){var Q;if(c9.isInstance($))return $;if(iP$($))return dP$.createTimeoutError({originalMessage:$ instanceof Error?$.message:"Unknown error",cause:$});if(W8.isInstance($)){if($.cause&&iP$($.cause))return dP$.createTimeoutError({originalMessage:$.message,cause:$});return await X61({response:Dh4($),statusCode:(Q=$.statusCode)!=null?Q:500,defaultMessage:"Gateway request failed",cause:$,authMethod:Z,isRetryable:$.isRetryable&&($.statusCode==null||$.statusCode<400)?!0:void 0})}return await X61({response:{},statusCode:500,defaultMessage:$ instanceof Error?`Gateway request failed: ${$.message}`:"Unknown Gateway error",cause:$,authMethod:Z})}async function nZ($){let Z=await u4({value:$[BA$],schema:wh4});return Z.success?Z.value:void 0}function Mh4($){for(let Z of $.prompt){if(!Array.isArray(Z.content))continue;for(let Q of Z.content)if(Q.type==="file"||Q.type==="reasoning-file")Q.data=nP$(Q.data);else if(Q.type==="tool-result"&&Q.output.type==="content"){for(let Y of Q.output.value)if(Y.type==="file")Y.data=nP$(Y.data)}}return $}function nP$($){if($.type==="data"){let Z=$.data;if(Z instanceof Uint8Array)return{...$,data:Buffer.from(Z).toString("base64")}}return $}function Ih4($){var Z;let Q=(Z=$[0])==null?void 0:Z.modelId;if(Q==null)throw new b8({argument:"requests",message:"The AI Gateway Batch API requires at least one request."});for(let Y of $)if(Y.modelId!==Q)throw new b8({argument:"requests",message:`The AI Gateway Batch API requires all requests in a batch to use the same model. Found "${Q}" and "${Y.modelId}".`});return Q}function Vh4($){for(let Z of $){let Q=Z.type;if(Q!=="text")throw new t1({functionality:`batch request type: ${Q}`,message:`The AI Gateway Batch API does not support batch requests with type "${Q}".`})}}function kh4($){let Z=$==null?void 0:$.gateway;if(Z==null||typeof Z!=="object"||Array.isArray(Z))return;let Q=Z.idempotencyKey;return typeof Q==="string"&&Q.length>0?Q:void 0}function Sh4($){let Z=$==null?void 0:$.gateway;if(Z==null||typeof Z!=="object"||Array.isArray(Z)||!("idempotencyKey"in Z))return $;let{idempotencyKey:Q,...Y}=Z,X={...$};if(Object.keys(Y).length===0)delete X.gateway;else X.gateway=Y;if(Object.keys(X).length===0)return;return X}function Q61($){if(!($ instanceof Error||$ instanceof DOMException))return!1;return $.name==="AbortError"||$.name==="TimeoutError"}function tP$($){var Z,Q,Y,X;let J=pL({total:(Z=$.requestCounts)==null?void 0:Z.total,pending:(Q=$.requestCounts)==null?void 0:Q.pending,completed:(Y=$.requestCounts)==null?void 0:Y.completed,failed:(X=$.requestCounts)==null?void 0:X.failed});return{status:$.status,...$.rawStatus!=null&&{rawStatus:$.rawStatus},...J!=null&&{requestCounts:J},...$.error!=null&&{error:{message:$.error.message,...$.error.type!=null&&{type:$.error.type},...$.error.code!=null&&{code:$.error.code},...$.error.statusCode!=null&&{statusCode:$.error.statusCode}}},...$.createdAt!=null&&{createdAt:$.createdAt},...$.expiresAt!=null&&{expiresAt:$.expiresAt},...$.providerMetadata!=null&&{providerMetadata:$.providerMetadata}}}async function*Ch4($){var Z;for await(let Q of $){let Y=Q;if(Y.status==="succeeded"){let X=(Z=Y.result)==null?void 0:Z.response;if(X!==void 0&&typeof X.timestamp==="string")X.timestamp=new Date(X.timestamp)}yield Y}}function oP$($){if($.type==="data"){let Z=$.data;if(Z instanceof Uint8Array)return{...$,data:Buffer.from(Z).toString("base64")}}return $}function rP$($){if($.type==="file"&&$.data instanceof Uint8Array)return{...$,data:YJ($.data)};return $}function Y61($){if($.type==="file"&&$.data instanceof Uint8Array)return{...$,data:YJ($.data)};return $}function wA$($,Z){let Q=new URL(`${$.replace(/^http/,"ws")}/transcription-model`);return Q.searchParams.set("ai-model-id",Z),Q.toString()}function Hu4($){let Z=fr($),Q=Z.authorization,Y=(Q==null?void 0:Q.startsWith("Bearer "))?Q.slice(7):void 0;return Y==null?[ZA$]:xg4(Y,{teamIdOrSlug:Z[OA$]})}function Fu4({webSocket:$,url:Z,protocols:Q,headers:Y,startFrame:X,audio:J,abortSignal:G,authMethod:W}){let K=!1,H=()=>{};return new ReadableStream({start:(F)=>{let U,N=!1,B,O=!1,L;H=(z)=>{if(U!=null)U.cancel().catch(()=>{});else J.cancel().catch(()=>{});L==null||L.close(z)};let w=()=>{if(O=!0,U!=null)U.cancel().catch(()=>{}),U=void 0;else J.cancel().catch(()=>{})},j=(z)=>{if(K)return;K=!0,H(),Ou4(F,z,W)},E=async(z)=>{let T=J.getReader();U=T;try{while(!0){let{done:P,value:A}=await T.read();if(P||K)break;let q=typeof A==="string"?_9(A):A;for(let x=0;x<q.length;x+=aP$){if(K)break;z.send(q.subarray(x,x+aP$)),await OF(z)}}}finally{if(T.releaseLock(),U===T)U=void 0}if(!K&&!O)z.send(JSON.stringify({type:p7$}))};L=DF({url:Z,protocols:Q,headers:Y,webSocket:$,abortSignal:G,onAbort:(z)=>{if(K)return;K=!0,H(),F.error(z)},onProcessingError:j,onOpen:(z)=>{z.send(JSON.stringify(X)),E(z).catch(j)},onMessageText:(z)=>{if(K)return;let T=n7$(z);if(T==null)return;if(T.type==="finish"){K=!0,F.enqueue(T),F.close(),H(1000);return}if(T.type==="error")N=!0,B=T.error,w();F.enqueue(T)},onSocketError:()=>{j(Error("Connection error on AI Gateway transcription stream"))},onClose:()=>{if(N){if(K)return;Lu4(B,W).then(j);return}j(Error("AI Gateway transcription stream closed before a finish part was received"))}})},cancel:()=>{if(K)return;K=!0,H()}})}async function Ou4($,Z,Q){$.error(await I9(Z,Q))}function Du4($){if($!=null&&typeof $==="object"&&"message"in $&&typeof $.message==="string")return $.message;return N8($)}async function Lu4($,Z){if(typeof $==="object"&&$!=null&&"message"in $&&typeof $.message==="string"&&"type"in $&&typeof $.type==="string"&&$.type in sP$)return X61({response:{error:{message:$.message,type:$.type}},statusCode:sP$[$.type],authMethod:Z});return Error(`AI Gateway transcription stream failed: ${Du4($)}`)}function ju4($,Z){let Q=new URL(`${$.replace(/^http/,"ws")}/realtime-model`);return Q.searchParams.set("ai-model-id",Z),Q.toString()}async function uu4(){var $;return($=EA$.getContext().headers)==null?void 0:$["x-vercel-id"]}function du4($={}){var Z,Q;let Y=null,X=null,J=(Z=$.metadataCacheRefreshMillis)!=null?Z:300000,G=0,W=(Q=tL($.baseURL))!=null?Q:"https://ai-gateway.vercel.sh/v4/ai",K=(V)=>r5({Authorization:`Bearer ${V.token}`,"ai-gateway-protocol-version":cu4,[BA$]:V.authMethod,...$.teamIdOrSlug!=null?{[OA$]:$.teamIdOrSlug}:{},...$.headers},`ai-sdk/gateway/${lu4}`),H=async()=>{try{return K(await $A$($))}catch(V){throw N00.createContextualError({apiKeyProvided:!1,oidcTokenProvided:!1,statusCode:401,cause:V})}},F=async()=>{try{return await $A$($)}catch(V){throw N00.createContextualError({apiKeyProvided:!1,oidcTokenProvided:!1,statusCode:401,cause:V})}},U=async(V)=>{iu4();let y=await F(),g=K(y),l=new URL("/v1/realtime/client-secrets",W).toString();try{let{value:n}=await o1({url:l,headers:g,body:{model:V.modelId,...V.routeKind!=null&&{routeKind:V.routeKind},...V.expiresAfterSeconds!=null&&{expiresIn:V.expiresAfterSeconds}},successfulResponseHandler:E1(mu4),failedResponseHandler:V4({errorSchema:I.any(),errorToMessage:(p)=>{var F0;return(F0=N8(p))!=null?F0:"unknown error"}}),fetch:$.fetch});return{token:n.token,...n.expiresAt!=null&&{expiresAt:n.expiresAt}}}catch(n){throw await I9(n,await nZ(g))}},N=()=>{let V=zF({settingValue:void 0,environmentVariableName:"VERCEL_DEPLOYMENT_ID"}),y=zF({settingValue:void 0,environmentVariableName:"VERCEL_ENV"}),g=zF({settingValue:void 0,environmentVariableName:"VERCEL_REGION"}),l=zF({settingValue:void 0,environmentVariableName:"VERCEL_PROJECT_ID"});return async()=>{let n=await uu4();return{...V&&{"ai-o11y-deployment-id":V},...y&&{"ai-o11y-environment":y},...g&&{"ai-o11y-region":g},...n&&{"ai-o11y-request-id":n},...l&&{"ai-o11y-project-id":l}}}},B=(V)=>{return new gh4(V,{provider:"gateway",baseURL:W,headers:H,fetch:$.fetch,o11yHeaders:N()})},O=()=>new qh4({provider:"gateway",baseURL:W,headers:H,fetch:$.fetch,o11yHeaders:N()}),L=async()=>{var V,y,g;let l=(g=(y=(V=$._internal)==null?void 0:V.currentDate)==null?void 0:y.call(V).getTime())!=null?g:Date.now();if(!Y||l-G>J)G=l,Y=new pP$({baseURL:W,headers:H,fetch:$.fetch}).getAvailableModels().then((n)=>{return X=n,n}).catch(async(n)=>{throw await I9(n,await nZ(await H()))});return X?Promise.resolve(X):Y},w=async()=>{return new pP$({baseURL:W,headers:H,fetch:$.fetch}).getCredits().catch(async(V)=>{throw await I9(V,await nZ(await H()))})},j=async(V)=>{return new Ph4({baseURL:W,headers:H,fetch:$.fetch}).getSpendReport(V).catch(async(y)=>{throw await I9(y,await nZ(await H()))})},E=async(V)=>{return new Th4({baseURL:W,headers:H,fetch:$.fetch}).getGenerationInfo(V).catch(async(y)=>{throw await I9(y,await nZ(await H()))})},z=function(V){if(new.target)throw Error("The Gateway Provider model function cannot be called with the new keyword.");return B(V)};z.specificationVersion="v4",z.getAvailableModels=L,z.getCredits=w,z.getSpendReport=j,z.getGenerationInfo=E,z.imageModel=(V)=>{return new ch4(V,{provider:"gateway",baseURL:W,headers:H,fetch:$.fetch,o11yHeaders:N()})},z.languageModel=B,z.experimental_batch=O;let T=(V)=>{return new hh4(V,{provider:"gateway",baseURL:W,headers:H,fetch:$.fetch,o11yHeaders:N()})};z.embeddingModel=T,z.textEmbeddingModel=T,z.videoModel=(V)=>{return new nh4(V,{provider:"gateway",baseURL:W,headers:H,fetch:$.fetch,o11yHeaders:N()})};let P=(V)=>{return new Zu4(V,{provider:"gateway",baseURL:W,headers:H,fetch:$.fetch,o11yHeaders:N()})};z.rerankingModel=P,z.reranking=P;let A=(V)=>{return new ah4(V,{provider:"gateway",baseURL:W,headers:H,fetch:$.fetch,o11yHeaders:N()})};z.evaluationModel=A,z.evaluation=A;let q=(V)=>{return new Xu4(V,{provider:"gateway",baseURL:W,headers:H,fetch:$.fetch,o11yHeaders:N()})};z.speechModel=q,z.speech=q;let x=(V)=>{return new Ku4(V,{provider:"gateway",baseURL:W,headers:H,fetch:$.fetch,o11yHeaders:N(),webSocket:$.webSocket})};z.transcriptionModel=x,z.transcription=x,z.experimental_transcription=Object.assign((V)=>x(V),{getToken:async(V)=>{let y=await U({modelId:V.model,routeKind:"transcription",...V.expiresAfterSeconds!=null&&{expiresAfterSeconds:V.expiresAfterSeconds}});return{token:y.token,url:wA$(W,V.model),...y.expiresAt!=null&&{expiresAt:y.expiresAt}}}});let _=(V)=>new wu4(V,{provider:"gateway.realtime",baseURL:W,teamIdOrSlug:$.teamIdOrSlug,createClientSecret:U});return z.experimental_realtime=Object.assign((V)=>_(V),{getToken:async(V)=>{let{model:y,...g}=V,n=await _(y).doCreateClientSecret(g);return{token:n.token,url:n.url,...n.expiresAt!=null&&{expiresAt:n.expiresAt}}}}),z.chat=z.languageModel,z.embedding=z.embeddingModel,z.image=z.imageModel,z.video=z.videoModel,z.tools=hu4,z}async function $A$($){let Z=zF({settingValue:$.apiKey,environmentVariableName:"AI_GATEWAY_API_KEY"});if(Z)return{token:Z,authMethod:"api-key"};return{token:await zA$.getVercelOidcToken(),authMethod:"oidc"}}function iu4(){if(typeof globalThis.window<"u")throw Error("AI Gateway client secrets must be minted server-side: minting needs your Gateway credential, which must never reach the browser. Call gateway.experimental_realtime.getToken() or gateway.experimental_transcription.getToken() from your server and pass the returned token to the client.")}var EA$,zA$,Cg4="ai-gateway-realtime.v1",ZA$="ai-gateway-transcription.v1",_g4="ai-gateway-auth.",vg4="ai-gateway-team.",I,og4="vercel.ai.gateway.error",Z61,UP$,NP$,c9,YA$="GatewayAuthenticationError",rg4,BP$,OP$,DP$,N00,XA$="GatewayInvalidRequestError",ag4,LP$,wP$,jP$,sg4,JA$="GatewayRateLimitError",eg4,EP$,zP$,PP$,$h4,GA$="GatewayModelNotFoundError",Zh4,AP$,Qh4,TP$,RP$,Yh4,WA$="GatewayNotFoundError",Xh4,qP$,MP$,IP$,Jh4,KA$="GatewayInternalServerError",Gh4,VP$,kP$,SP$,CP$,HA$="GatewayFailedDependencyError",Wh4,_P$,vP$,bP$,Kh4,FA$="GatewayForbiddenError",Hh4,xP$,Fh4,fP$,yP$,Uh4,UA$="GatewayResponseError",Nh4,gP$,hP$,uP$,Bh4,Oh4,NA$="GatewayTimeoutError",Lh4,lP$,cP$,mP$,dP$,BA$="ai-gateway-auth-method",OA$="x-vercel-ai-gateway-team",wh4,jh4,pP$=class{constructor($){this.config=$}async getAvailableModels(){try{let{value:$}=await S6({url:`${this.config.baseURL}/config`,validateUrl:!1,headers:this.config.headers?await d1(this.config.headers):void 0,successfulResponseHandler:E1(Eh4),failedResponseHandler:V4({errorSchema:I.any(),errorToMessage:(Z)=>{var Q;return(Q=N8(Z))!=null?Q:"unknown error"}}),fetch:this.config.fetch});return $}catch($){throw await I9($)}}async getCredits(){try{let $=new URL(this.config.baseURL),{value:Z}=await S6({url:`${$.origin}/v1/credits`,validateUrl:!1,headers:this.config.headers?await d1(this.config.headers):void 0,successfulResponseHandler:E1(zh4),failedResponseHandler:V4({errorSchema:I.any(),errorToMessage:(Q)=>{var Y;return(Y=N8(Q))!=null?Y:"unknown error"}}),fetch:this.config.fetch});return Z}catch($){throw await I9($)}}},Eh4,zh4,Ph4=class{constructor($){this.config=$}async getSpendReport($){try{let Z=new URL(this.config.baseURL),Q=new URLSearchParams;if(Q.set("start_date",$.startDate),Q.set("end_date",$.endDate),$.groupBy)Q.set("group_by",$.groupBy);if($.datePart)Q.set("date_part",$.datePart);if($.userId)Q.set("user_id",$.userId);if($.model)Q.set("model",$.model);if($.provider)Q.set("provider",$.provider);if($.credentialType)Q.set("credential_type",$.credentialType);if($.tags&&$.tags.length>0)Q.set("tags",$.tags.join(","));let{value:Y}=await S6({url:`${Z.origin}/v1/report?${Q.toString()}`,validateUrl:!1,headers:this.config.headers?await d1(this.config.headers):void 0,successfulResponseHandler:E1(Ah4),failedResponseHandler:V4({errorSchema:I.any(),errorToMessage:(X)=>{var J;return(J=N8(X))!=null?J:"unknown error"}}),fetch:this.config.fetch});return Y}catch(Z){throw await I9(Z)}}},Ah4,Th4=class{constructor($){this.config=$}async getGenerationInfo($){try{let Z=new URL(this.config.baseURL),{value:Q}=await S6({url:`${Z.origin}/v1/generation?id=${encodeURIComponent($.id)}`,validateUrl:!1,headers:this.config.headers?await d1(this.config.headers):void 0,successfulResponseHandler:E1(Rh4),failedResponseHandler:V4({errorSchema:I.any(),errorToMessage:(Y)=>{var X;return(X=N8(Y))!=null?X:"unknown error"}}),fetch:this.config.fetch});return Q}catch(Z){throw await I9(Z)}}},Rh4,qh4=class{constructor($){this.config=$,this.specificationVersion="v4",this.supportedUrls={"*/*":[/.*/]},this.provider=`${$.provider}.batch`}async doStartBatch({requests:$,providerOptions:Z,headers:Q,abortSignal:Y,webhookUrl:X}){var J;Vh4($);let G=Ih4($),W=this.config.headers?await d1(this.config.headers):void 0,K=kh4(Z),H=Sh4(Z);try{let{value:F}=await o1({url:this.getBatchUrl("start"),headers:T1(W,Q,{"ai-model-id":G},await d1(this.config.o11yHeaders),K!=null?{"idempotency-key":K}:void 0),body:{...X!=null&&{callbackUrl:X},requests:$.map((U)=>({id:U.id,type:U.type,modelId:U.modelId,options:Mh4(U.options)})),...H!=null&&{providerOptions:H}},successfulResponseHandler:E1(fh4),failedResponseHandler:V4({errorSchema:I.any(),errorToMessage:(U)=>{var N;return(N=N8(U))!=null?N:"unknown error"}}),...Y&&{abortSignal:Y},fetch:this.config.fetch});return{batchId:F.batchId,...tP$(F),warnings:(J=F.warnings)!=null?J:[]}}catch(F){if(Q61(F))throw F;throw await I9(F,await nZ(W!=null?W:{}))}}async doGetBatchStatus({batchId:$,headers:Z,abortSignal:Q}){let Y=this.config.headers?await d1(this.config.headers):void 0;try{let{value:X}=await o1({url:this.getBatchUrl("status"),headers:T1(Y,Z,await d1(this.config.o11yHeaders)),body:{batchId:$},successfulResponseHandler:E1(yh4),failedResponseHandler:V4({errorSchema:I.any(),errorToMessage:(J)=>{var G;return(G=N8(J))!=null?G:"unknown error"}}),...Q&&{abortSignal:Q},fetch:this.config.fetch});return tP$(X)}catch(X){if(Q61(X))throw X;throw await I9(X,await nZ(Y!=null?Y:{}))}}async doGetBatchResults({batchId:$,headers:Z,abortSignal:Q}){let Y=this.config.headers?await d1(this.config.headers):void 0;try{let{value:X}=await o1({url:this.getBatchUrl("results"),headers:T1(Y,Z,await d1(this.config.o11yHeaders)),body:{batchId:$},successfulResponseHandler:nL(_h4),failedResponseHandler:V4({errorSchema:I.any(),errorToMessage:(J)=>{var G;return(G=N8(J))!=null?G:"unknown error"}}),...Q&&{abortSignal:Q},fetch:this.config.fetch});return LF(Ch4(X))}catch(X){if(Q61(X))throw X;throw await I9(X,await nZ(Y!=null?Y:{}))}}getBatchUrl($){return`${this.config.baseURL}/batch/${$}`}},_h4,vh4,bh4,xh4,DA$,fh4,yh4,gh4,hh4,uh4,lh4,ch4,mh4,dh4,ih4,ph4,nh4=class{constructor($,Z){this.modelId=$,this.config=Z,this.specificationVersion="v4",this.maxVideosPerCall=Number.MAX_SAFE_INTEGER}get provider(){return this.config.provider}async doGenerate($){var Z,Q;let{headers:Y,abortSignal:X}=$,J=this.config.headers?await d1(this.config.headers):void 0;try{let{responseHeaders:G,value:W}=await o1({url:this.getUrl(),headers:T1(J,Y!=null?Y:{},this.getModelConfigHeaders(),await d1(this.config.o11yHeaders),{accept:"text/event-stream"}),body:this.buildRequestBody($),successfulResponseHandler:async({response:K,url:H,requestBodyValues:F})=>{if(K.body==null)throw new W8({message:"SSE response body is empty",url:H,requestBodyValues:F,statusCode:K.status});let N=vJ0({stream:K.body,schema:th4}).getReader(),{done:B,value:O}=await N.read();if(N.releaseLock(),B||!O)throw new W8({message:"SSE stream ended without a data event",url:H,requestBodyValues:F,statusCode:K.status});if(!O.success)throw new W8({message:"Failed to parse video SSE event",cause:O.error,url:H,requestBodyValues:F,statusCode:K.status});let L=O.value;if(L.type==="error")throw new W8({message:L.message,statusCode:L.statusCode,url:H,requestBodyValues:F,responseHeaders:Object.fromEntries([...K.headers]),responseBody:JSON.stringify(L),data:{error:{message:L.message,type:L.errorType,param:L.param}}});return{value:{videos:L.videos,warnings:L.warnings,providerMetadata:L.providerMetadata},responseHeaders:Object.fromEntries([...K.headers])}},failedResponseHandler:V4({errorSchema:I.any(),errorToMessage:(K)=>{var H;return(H=N8(K))!=null?H:"unknown error"}}),...X&&{abortSignal:X},fetch:this.config.fetch});return{videos:W.videos,warnings:(Z=W.warnings)!=null?Z:[],providerMetadata:(Q=W.providerMetadata)!=null?Q:void 0,response:{timestamp:new Date,modelId:this.modelId,headers:G}}}catch(G){throw await I9(G,await nZ(J!=null?J:{}))}}async handleWebhookOption({webhook:$}){let{url:Z,received:Q}=await $();return{webhookUrl:Z,received:Q}}async doStart($){var Z,Q;let{headers:Y,abortSignal:X,webhookUrl:J}=$,G=this.config.headers?await d1(this.config.headers):void 0;try{let{responseHeaders:W,value:K}=await o1({url:this.getStartUrl(),headers:T1(G,Y!=null?Y:{},this.getModelConfigHeaders(),await d1(this.config.o11yHeaders)),body:{...this.buildRequestBody($),...J&&{callbackUrl:J}},successfulResponseHandler:E1(oh4),failedResponseHandler:V4({errorSchema:I.any(),errorToMessage:(H)=>{var F;return(F=N8(H))!=null?F:"unknown error"}}),...X&&{abortSignal:X},fetch:this.config.fetch});return{operation:K.operation,warnings:(Z=K.warnings)!=null?Z:[],providerMetadata:(Q=K.providerMetadata)!=null?Q:void 0,response:{timestamp:new Date,modelId:this.modelId,headers:W}}}catch(W){throw await I9(W,await nZ(G!=null?G:{}))}}async doStatus({operation:$,abortSignal:Z,headers:Q}){var Y,X,J,G,W,K;let H=this.config.headers?await d1(this.config.headers):void 0;try{let{responseHeaders:F,value:U}=await o1({url:this.getStatusUrl(),headers:T1(H,Q!=null?Q:{},this.getModelConfigHeaders(),await d1(this.config.o11yHeaders)),body:{operation:$},successfulResponseHandler:E1(rh4),failedResponseHandler:V4({errorSchema:I.any(),errorToMessage:(B)=>{var O;return(O=N8(B))!=null?O:"unknown error"}}),...Z&&{abortSignal:Z},fetch:this.config.fetch}),N={timestamp:new Date,modelId:this.modelId,headers:F};if(U.status==="completed")return{status:"completed",videos:U.videos,warnings:(Y=U.warnings)!=null?Y:[],providerMetadata:(X=U.providerMetadata)!=null?X:void 0,response:N};if(U.status==="error")return{status:"error",error:U.error,providerMetadata:(J=U.providerMetadata)!=null?J:void 0,response:N};if(U.status==="cancelled")return{status:"error",error:"Video generation was cancelled.",providerMetadata:(G=U.providerMetadata)!=null?G:void 0,response:N};return{status:"pending",warnings:(W=U.warnings)!=null?W:[],providerMetadata:(K=U.providerMetadata)!=null?K:void 0,response:N}}catch(F){throw await I9(F,await nZ(H!=null?H:{}))}}buildRequestBody({prompt:$,n:Z,aspectRatio:Q,resolution:Y,duration:X,fps:J,seed:G,generateAudio:W,image:K,frameImages:H,inputReferences:F,providerOptions:U}){return{prompt:$,n:Z,...Q&&{aspectRatio:Q},...Y&&{resolution:Y},...X&&{duration:X},...J&&{fps:J},...G&&{seed:G},...W!==void 0&&{generateAudio:W},...U&&{providerOptions:U},...K&&{image:Y61(K)},...H&&{frameImages:H.map((N)=>({...N,image:Y61(N.image)}))},...F&&{inputReferences:F.map((N)=>Y61(N))}}}getUrl(){return`${this.config.baseURL}/video-model`}getStartUrl(){return`${this.config.baseURL}/video-model/start`}getStatusUrl(){return`${this.config.baseURL}/video-model/status`}getModelConfigHeaders(){return{"ai-video-model-specification-version":"4","ai-model-id":this.modelId}}},rc,LA$,hA0,th4,oh4,rh4,ah4=class{constructor($,Z){this.modelId=$,this.config=Z,this.specificationVersion="v4",this.supportedQuestionTypes=["choice","score","boolean"]}get provider(){return this.config.provider}async doEvaluate({state:$,questions:Z,headers:Q,abortSignal:Y,providerOptions:X}){var J;let G=this.config.headers?await d1(this.config.headers):void 0;try{let{responseHeaders:W,value:K,rawValue:H}=await o1({url:this.getUrl(),headers:T1(G,Q!=null?Q:{},this.getModelConfigHeaders(),await d1(this.config.o11yHeaders)),body:{state:$,questions:Z,...X?{providerOptions:X}:{}},successfulResponseHandler:E1($u4),failedResponseHandler:V4({errorSchema:I.any(),errorToMessage:(F)=>{var U;return(U=N8(F))!=null?U:"unknown error"}}),...Y&&{abortSignal:Y},fetch:this.config.fetch});return{answers:K.answers,...K.rounding?{rounding:K.rounding}:{},...K.usage?{usage:K.usage}:{},warnings:(J=K.warnings)!=null?J:[],providerMetadata:K.providerMetadata,response:{modelId:this.modelId,headers:W,body:H}}}catch(W){throw await I9(W,await nZ(G!=null?G:{}))}}getUrl(){return`${this.config.baseURL}/evaluation-model`}getModelConfigHeaders(){return{"ai-evaluation-model-specification-version":"4","ai-model-id":this.modelId}}},sh4,eh4,$u4,Zu4=class{constructor($,Z){this.modelId=$,this.config=Z,this.specificationVersion="v4"}get provider(){return this.config.provider}async doRerank({documents:$,query:Z,topN:Q,headers:Y,abortSignal:X,providerOptions:J}){var G;let W=this.config.headers?await d1(this.config.headers):void 0;try{let{responseHeaders:K,value:H,rawValue:F}=await o1({url:this.getUrl(),headers:T1(W,Y!=null?Y:{},this.getModelConfigHeaders(),await d1(this.config.o11yHeaders)),body:{documents:$,query:Z,...Q!=null?{topN:Q}:{},...J?{providerOptions:J}:{}},successfulResponseHandler:E1(Yu4),failedResponseHandler:V4({errorSchema:I.any(),errorToMessage:(U)=>{var N;return(N=N8(U))!=null?N:"unknown error"}}),...X&&{abortSignal:X},fetch:this.config.fetch});return{ranking:H.ranking,providerMetadata:H.providerMetadata,response:{headers:K,body:F},warnings:(G=H.warnings)!=null?G:[]}}catch(K){throw await I9(K,await nZ(W!=null?W:{}))}}getUrl(){return`${this.config.baseURL}/reranking-model`}getModelConfigHeaders(){return{"ai-reranking-model-specification-version":"4","ai-model-id":this.modelId}}},Qu4,Yu4,Xu4=class{constructor($,Z){this.modelId=$,this.config=Z,this.specificationVersion="v4"}get provider(){return this.config.provider}async doGenerate({text:$,voice:Z,outputFormat:Q,instructions:Y,speed:X,language:J,providerOptions:G,headers:W,abortSignal:K}){var H;let F=this.config.headers?await d1(this.config.headers):void 0;try{let{responseHeaders:U,value:N,rawValue:B}=await o1({url:this.getUrl(),headers:T1(F,W!=null?W:{},this.getModelConfigHeaders(),await d1(this.config.o11yHeaders)),body:{text:$,...Z&&{voice:Z},...Q&&{outputFormat:Q},...Y&&{instructions:Y},...X!=null&&{speed:X},...J&&{language:J},...G&&{providerOptions:G}},successfulResponseHandler:E1(Wu4),failedResponseHandler:V4({errorSchema:I.any(),errorToMessage:(O)=>{var L;return(L=N8(O))!=null?L:"unknown error"}}),...K&&{abortSignal:K},fetch:this.config.fetch});return{audio:N.audio,warnings:(H=N.warnings)!=null?H:[],providerMetadata:N.providerMetadata,response:{timestamp:new Date,modelId:this.modelId,headers:U,body:B}}}catch(U){throw await I9(U,await nZ(F!=null?F:{}))}}getUrl(){return`${this.config.baseURL}/speech-model`}getModelConfigHeaders(){return{"ai-speech-model-specification-version":"4","ai-model-id":this.modelId}}},Ju4,Gu4,Wu4,Ku4=class{constructor($,Z){this.modelId=$,this.config=Z,this.specificationVersion="v4"}get provider(){return this.config.provider}async doGenerate({audio:$,mediaType:Z,providerOptions:Q,headers:Y,abortSignal:X}){var J,G,W,K;let H=this.config.headers?await d1(this.config.headers):void 0;try{let{responseHeaders:F,value:U,rawValue:N}=await o1({url:this.getUrl(),headers:T1(H,Y!=null?Y:{},this.getModelConfigHeaders(),await d1(this.config.o11yHeaders)),body:{audio:$ instanceof Uint8Array?YJ($):$,mediaType:Z,...Q&&{providerOptions:Q}},successfulResponseHandler:E1(Bu4),failedResponseHandler:V4({errorSchema:I.any(),errorToMessage:(B)=>{var O;return(O=N8(B))!=null?O:"unknown error"}}),...X&&{abortSignal:X},fetch:this.config.fetch});return{text:U.text,segments:(J=U.segments)!=null?J:[],language:(G=U.language)!=null?G:void 0,durationInSeconds:(W=U.durationInSeconds)!=null?W:void 0,warnings:(K=U.warnings)!=null?K:[],providerMetadata:U.providerMetadata,response:{timestamp:new Date,modelId:this.modelId,headers:F,body:N}}}catch(F){throw await I9(F,await nZ(H!=null?H:{}))}}async doStream($){var Z,Q,Y,X,J;let G=(Y=(Q=(Z=this.config._internal)==null?void 0:Z.currentDate)==null?void 0:Q.call(Z))!=null?Y:new Date,W=T1(await d1((X=this.config.headers)!=null?X:{}),(J=$.headers)!=null?J:{},this.getModelConfigHeaders(),await d1(this.config.o11yHeaders)),K=await nZ(W),H={type:i7$,inputAudioFormat:$.inputAudioFormat,...$.providerOptions!=null&&{providerOptions:$.providerOptions},...$.includeRawChunks!=null&&{includeRawChunks:$.includeRawChunks}};return{stream:Fu4({webSocket:this.config.webSocket,url:wA$(this.config.baseURL,this.modelId),protocols:Hu4(W),headers:W,startFrame:H,audio:$.audio,abortSignal:$.abortSignal,authMethod:K}),request:{body:H},response:{timestamp:G,modelId:this.modelId}}}getUrl(){return`${this.config.baseURL}/transcription-model`}getModelConfigHeaders(){return{"ai-transcription-model-specification-version":"4","ai-model-id":this.modelId}}},aP$=65536,Uu4,Nu4,Bu4,sP$,wu4=class{constructor($,Z){this.specificationVersion="v4",this.modelId=$,this.provider=Z.provider,this.config=Z}async doCreateClientSecret($){let Z=await this.config.createClientSecret({modelId:this.modelId,...($==null?void 0:$.expiresAfterSeconds)!=null&&{expiresAfterSeconds:$.expiresAfterSeconds}});return{token:Z.token,url:ju4(this.config.baseURL,this.modelId),...Z.expiresAt!=null&&{expiresAt:Z.expiresAt}}}getWebSocketConfig($){return{url:$.url,protocols:bg4($.token,{teamIdOrSlug:this.config.teamIdOrSlug})}}parseServerEvent($){return $}serializeClientEvent($){return $}buildSessionConfig($){return $}},Eu4,zu4,Pu4,Au4=($={})=>Pu4($),Tu4,Ru4,qu4,Mu4=($={})=>qu4($),Iu4,Vu4,ku4,Su4=($={})=>ku4($),Cu4,_u4,vu4,eP$,jA$,bu4,xu4,fu4,yu4,gu4=($={})=>yu4($),hu4,lu4="4.0.87",cu4="0.0.1",mu4,J61;var uA0=D(()=>{z0();O1();z0();z0();z0();z0();z0();z0();z0();z0();O1();z0();z0();z0();z0();O1();z0();z0();z0();z0();O1();z0();z0();z0();z0();z0();EA$=C($61(),1),zA$=C($61(),1);I={any:yg4,array:gg4,boolean:hg4,discriminatedUnion:ug4,enum:lg4,literal:cg4,number:mg4,object:dg4,record:ig4,string:pg4,union:ng4,unknown:tg4},Z61=Symbol.for(og4),c9=class $ extends(NP$=Error,UP$=Z61,NP$){constructor({message:Z,statusCode:Q=500,cause:Y,generationId:X,isRetryable:J=Q!=null&&(Q===408||Q===409||Q===429||Q>=500)}){super(X?`${Z} [${X}]`:Z);this[UP$]=!0,this.statusCode=Q,this.cause=Y,this.generationId=X,this.isRetryable=J}static isInstance(Z){return $.hasMarker(Z)}static hasMarker(Z){return typeof Z==="object"&&Z!==null&&Z61 in Z&&Z[Z61]===!0}},rg4=`vercel.ai.gateway.error.${YA$}`,BP$=Symbol.for(rg4),N00=class $ extends(DP$=c9,OP$=BP$,DP$){constructor({message:Z="Authentication failed",statusCode:Q=401,cause:Y,generationId:X}={}){super({message:Z,statusCode:Q,cause:Y,generationId:X});this[OP$]=!0,this.name=YA$,this.type="authentication_error"}static isInstance(Z){return c9.hasMarker(Z)&&BP$ in Z}static createContextualError({apiKeyProvided:Z,oidcTokenProvided:Q,statusCode:Y=401,cause:X,generationId:J}){let G;if(Z)G=`AI Gateway authentication failed: Invalid API key or token.
@@ -1559,7 +1559,7 @@ ${X}`:X}case"media":return"";case"mediaSingle":case"mediaGroup":return Hm(NU(Q),
1559
1559
 
1560
1560
  [\u2026 truncated]`:$}function ip4($){if($<1024)return`${$} B`;if($<1048576)return`${Math.round($/1024)} KB`;return`${($/1048576).toFixed(1)} MB`}function m20($){let Z=[`# ${$.key}: ${$.summary}`,`Status: ${$.status}`,`Link: ${$.url}`,"","## Description",$.description?kI$($.description,mp4):"_(empty)_"];if($.links.length>0){Z.push("","## Web links");for(let Q of $.links)Z.push(`- [${Q.title}](${Q.url})`)}if($.attachments.length>0){Z.push("","## Attachments");for(let Q of $.attachments)Z.push(`- ${Q.filename} (${ip4(Q.size)}) \u2014 attachment id \`${Q.id}\``);Z.push("","Fetch one with `JIRA_ATTACHMENT_DOWNLOAD` and the attachment id; it returns a short-lived URL to `curl` into the sandbox.")}if($.comments.length>0){Z.push("","## Comments");let Q=dp4;for(let[Y,X]of $.comments.entries()){let J=kI$(X.body,Math.max(0,Q));Z.push(`**${X.author}** (${X.created}):`,J,""),Q-=J.length;let G=Y===$.comments.length-1;if(Q<=0&&!G){Z.push("[\u2026 older comments omitted]");break}}}return Z.join(`
1561
1561
  `).trim()}function SI$($){let Z=[`# ${$.length} Jira issues`,"This run works on every issue below. Each Jira tool takes `issueKey` to say which one it is about; `JIRA_ISSUE_GET` with a key returns that issue in "+"full \u2014 description, comments, attachments."];for(let Q of $)if(Z.push("",`## ${Q.key}: ${Q.summary}`,`Status: ${Q.status}`,`Link: ${Q.url}`),Q.links.length>0){Z.push("Web links:");for(let Y of Q.links)Z.push(`- [${Y.title}](${Y.url})`)}return Z.join(`
1562
- `).trim()}var mp4=12000,dp4=12000;var m51=D(()=>{qj()});function d51($){if($?.source!=="jira")return[];let Z=$.jira_issue_keys;if(Array.isArray(Z)){let Y=Z.filter((X)=>typeof X==="string");if(Y.length>0)return Y}let Q=$.jira_issue_key;return typeof Q==="string"&&Q!==""?[Q]:[]}function CI$($){if($?.source!=="jira")return[];let Z=$.jira_created_issue_keys;return Array.isArray(Z)?Z.filter((Q)=>typeof Q==="string"):[]}function i51($,Z){if($.length===0)throw Error("This run is not working on a Jira issue");let Q=Z?.trim().toUpperCase();if(!Q){let X=$[0];if($.length===1&&X!==void 0)return{key:X,inRun:!0};throw Error(`This run works on ${$.length} issues (${$.join(", ")}) \u2014 pass \`issueKey\` to say which one`)}let Y=$.find((X)=>X.toUpperCase()===Q);if(Y)return{key:Y,inRun:!0};if(!pp4.test(Q))throw Error(`"${Z}" is not a Jira issue key, e.g. EX-12`);return{key:Q,inRun:!1}}var pp4;var _I$=D(()=>{pp4=/^[A-Z][A-Z0-9_]*-\d+$/});import{z as S$}from"zod";async function n00($,Z,Q=$00().threadId){let Y=K0($),X=await $.storage.jiraIntegrations.getByOrg(Y.id);if(!X)throw Error("Jira is not connected for this org");let J=await $.storage.threads.get(Q),G=new _Q(X.siteUrl,X.email,X.apiToken),W=i51(d51(J?.metadata),Z);if(!W.inRun)await fI$(G,X,W.key);return{integration:X,client:G,issueKey:W.key}}async function fI$($,Z,Q){if(!Z.boardId)throw Error(`Jira has no board connected, so ${Q} cannot be checked \u2014 only this run's issues are reachable`);if(!await $.isOnBoard(Z.boardId,Q))throw Error(`${Q} is not on the connected Jira board`)}function ap4($){return $.slice(0,$.lastIndexOf("-"))}function bI$($,Z){return $.trim().toLowerCase()===Z.trim().toLowerCase()}async function sp4($,Z,Q,Y){for(let J of Y){let G=await $.getIssue(J);if(bI$(G.fields.summary,Q))return G.key}let{issues:X}=await $.searchIssues({jql:`project = "${Z}" AND reporter = currentUser() AND statusCategory != Done AND created >= ${op4} ORDER BY created DESC`});return X.find((J)=>bI$(J.fields.summary,Q))?.key??null}var xI$=50000,p00,hx,ux,p51,lx,np4=100,n51,tp4=5,op4="-14d",vI$="Relates",rp4,t51,cx;var o51=D(()=>{C0();E9();R51();qj();VI$();m51();_I$();nB();p00=S$.string().optional().describe("Which issue: any on the board, e.g. one this run's issue links to or one you created. Leave out for this run's issue, when it has one.");hx=d({name:"JIRA_ISSUE_GET",description:"Read a Jira issue \u2014 this run's, or another on the board: summary, "+"status, description, comments, and attachments with the ids JIRA_ATTACHMENT_DOWNLOAD takes.",inputSchema:S$.object({issueKey:p00}),outputSchema:S$.object({key:S$.string(),url:S$.string(),status:S$.string(),markdown:S$.string()}),handler:async($,Z)=>{await Z.access.check();let{integration:Q,client:Y,issueKey:X}=await n00(Z,$.issueKey),J=await Um(Y,Q.siteUrl,X);return{key:J.key,url:J.url,status:J.status,markdown:m20(J)}}}),ux=d({name:"JIRA_COMMENT_ADD",description:"Post a comment on a Jira issue on the board. Markdown is rendered as Jira rich text, tables included. Leave one when you finish: what you did, and any pull request link. To show evidence, write the image to `org/output/<name>.png` in your working pod and reference it as "+"`![what it shows](org/output/<name>.png)` \u2014 it is uploaded to the issue "+"and rendered inline. Any other URL stays a plain link.",inputSchema:S$.object({issueKey:p00,body:S$.string().min(1).max(xI$)}),outputSchema:S$.object({commentId:S$.string(),embeddedImages:S$.array(S$.string())}),handler:async($,Z)=>{await Z.access.check();let{client:Q,issueKey:Y}=await n00(Z,$.issueKey),X=await II$({client:Q,orgFs:Z.orgFs,issueIdOrKey:Y,threadId:pG.getStore()?.threadId??null,markdown:$.body}),{id:J}=await Q.addComment(Y,$.body,{media:X});return{commentId:J,embeddedImages:[...X.keys()]}}}),p51=d({name:"JIRA_REMOTE_LINK_ADD",description:"Put a link on a Jira issue on the board \u2014 its pull request, "+"its deploy preview. A link on the card is what a person clicks; the same URL inside a comment is not. Posting the same `key` again updates that link instead of adding a second.",inputSchema:S$.object({issueKey:p00,url:S$.string().min(1),title:S$.string().min(1).max(255),summary:S$.string().max(1000).optional(),key:S$.string().max(255).optional().describe("Stable id for this link, e.g. `pull-request` or `preview`.")}),outputSchema:S$.object({linkId:S$.number()}),handler:async($,Z)=>{await Z.access.check();let{client:Q,issueKey:Y}=await n00(Z,$.issueKey),X;try{X=new URL($.url)}catch{throw Error(`"${$.url}" is not an absolute URL`)}if(X.protocol!=="https:"&&X.protocol!=="http:")throw Error(`${X.protocol} is not a linkable scheme`);let{id:J}=await Q.addRemoteLink(Y,{url:X.toString(),title:$.title,...$.summary?{summary:$.summary}:{},...$.key?{globalId:`studio-${Y}-${$.key}`}:{}});return{linkId:J}}}),lx=d({name:"JIRA_ISSUE_TRANSITION",description:"Move a Jira issue on the board to another status, by the status name (case-insensitive). Only a status the issue's workflow can reach from where it is; the error names the reachable ones.",inputSchema:S$.object({issueKey:p00,toStatus:S$.string().min(1)}),outputSchema:S$.object({status:S$.string()}),handler:async($,Z)=>{await Z.access.check();let{client:Q,issueKey:Y}=await n00(Z,$.issueKey),X=await Q.listTransitions(Y),J=$.toStatus.trim().toLowerCase(),G=X.find((W)=>W.to.name.toLowerCase()===J||W.name.toLowerCase()===J);if(!G)throw Error(`The issue cannot move to "${$.toStatus}" from here \u2014 reachable: ${X.map((W)=>W.to.name).join(", ")||"none"}`);return await Q.transitionIssue(Y,G.id),{status:G.to.name}}}),n51=d({name:"JIRA_ISSUE_SEARCH",description:'Find issues on the board with JQL, e.g. `status = "Code Review"` or `text ~ "checkout" ORDER BY updated DESC`. The query is narrowed to the board, so name only the condition. Returns keys to read in full with JIRA_ISSUE_GET.',inputSchema:S$.object({jql:S$.string().max(2000),limit:S$.number().int().min(1).max(np4).default(20)}),outputSchema:S$.object({issues:S$.array(S$.object({key:S$.string(),url:S$.string(),summary:S$.string(),status:S$.string(),type:S$.string().nullable(),updated:S$.string()})),truncated:S$.boolean()}),handler:async($,Z)=>{await Z.access.check();let Q=K0(Z),Y=await Z.storage.jiraIntegrations.getByOrg(Q.id);if(!Y)throw Error("Jira is not connected for this org");if(!Y.boardId)throw Error("Jira has no board connected to search");let X=new _Q(Y.siteUrl,Y.email,Y.apiToken),J=await X.getBoardScopeJql(Y.boardId),G=await X.searchIssues({jql:h51(J,$.jql)});return{issues:G.issues.slice(0,$.limit).map((W)=>({key:W.key,url:Fm(Y.siteUrl,W.key),summary:W.fields.summary,status:W.fields.status.name,type:W.fields.issuetype?.name??null,updated:W.fields.updated})),truncated:G.issues.length>$.limit||G.nextPageToken!==null}}}),rp4=/^[A-Z][A-Z0-9_]*$/;t51=d({name:"JIRA_ISSUE_CREATE",description:"Create a Jira issue in the project this run works in \u2014 a release card, "+"a follow-up found along the way \u2014 then comment on it, link it and move "+"it with the other Jira tools by its key. If an open issue this integration created in the last two weeks already has this exact summary, that one is returned instead (`created: false`) and still linked, so calling again after a restart does not duplicate it. Write the full description now; there is no tool to edit it later.",inputSchema:S$.object({summary:S$.string().trim().min(1).max(255),issueType:S$.string().min(1).describe("The issue type's name as the Jira API names it (often English, e.g. Story or Task, even when the UI shows a translation). The error lists the project's types."),description:S$.string().max(xI$).optional().describe("Markdown, rendered as Jira rich text, tables included."),relatesTo:S$.array(S$.string().min(1)).max(100).default([]).describe("Issues on the board to link to the new one as `Relates`, e.g. the cards a release ships."),sprint:S$.enum(["active","none"]).default("none").describe("`active` puts it in the board's running sprint, which is what a sprint board shows; `none` leaves it in the backlog."),storyPoints:S$.number().min(0).max(1000).optional()}),outputSchema:S$.object({key:S$.string(),url:S$.string(),created:S$.boolean(),linked:S$.array(S$.string()),notLinked:S$.array(S$.object({key:S$.string(),reason:S$.string()}))}),handler:async($,Z)=>{await Z.access.check();let Q=K0(Z),{threadId:Y}=$00(),X=await Z.storage.jiraIntegrations.getByOrg(Q.id);if(!X)throw Error("Jira is not connected for this org");let J=await Z.storage.threads.get(Y),G=d51(J?.metadata);if(G.length===0)throw Error("This run is not working on a Jira issue");let W=[...new Set(G.map(ap4))],K=W[0];if(W.length!==1||!K||!rp4.test(K))throw Error(`This run works in ${W.join(", ")}; it can only create in a single project`);let H=new _Q(X.siteUrl,X.email,X.apiToken),F=[];for(let j of $.relatesTo){let E=i51(G,j);if(F.includes(E.key))continue;if(!E.inRun)await fI$(H,X,E.key);F.push(E.key)}let U=CI$(J?.metadata),N=await sp4(H,K,$.summary,U),B=N===null;if(N===null){if(U.length>=tp4)throw Error(`This run already created ${U.length} issues (${U.join(", ")}), the most one run may`);let j=await H.getCreateMeta(K,$.issueType),E={};if($.storyPoints!==void 0){if(!j.storyPointsFieldId)throw Error(`${j.issueTypeName} in ${K} has no story points field to set`);E[j.storyPointsFieldId]=$.storyPoints}if($.sprint==="active"){if(!X.boardId||!j.sprintFieldId)throw Error(`${j.issueTypeName} in ${K} cannot go in a sprint \u2014 pass sprint: "none"`);let z=await H.getActiveSprint(X.boardId);if(!z)throw Error('The board has no active sprint \u2014 pass sprint: "none"');E[j.sprintFieldId]=z.id}({key:N}=await H.createIssue({projectKey:K,issueTypeId:j.issueTypeId,summary:$.summary,description:$.description,fields:E})),await Z.storage.threads.recordJiraIssueCreated(Y,N)}let O=B?new Set:new Set(await H.listLinkedIssueKeys(N,vI$)),L=[],w=[];for(let j of F){if(O.has(j)){L.push(j);continue}try{await H.linkIssues(vI$,j,N),L.push(j)}catch(E){w.push({key:j,reason:E instanceof Error?E.message:String(E)})}}return{key:N,url:Fm(X.siteUrl,N),created:B,linked:L,notLinked:w}}});cx=d({name:"JIRA_ATTACHMENT_DOWNLOAD",description:"Get a short-lived URL for one attachment of a Jira issue on the board, to `curl -L -o <path>` into the sandbox. Attachment ids are listed by JIRA_ISSUE_GET. The URL needs no credential and expires.",inputSchema:S$.object({issueKey:p00,attachmentId:S$.string().min(1)}),outputSchema:S$.object({url:S$.string(),filename:S$.string(),expiresAt:S$.string(),command:S$.string()}),handler:async($,Z)=>{await Z.access.check();let{integration:Q,client:Y,issueKey:X}=await n00(Z,$.issueKey),J=(await Y.listAttachments(X)).find((F)=>F.id===$.attachmentId);if(!J)throw Error(`${X} has no attachment "${$.attachmentId}" \u2014 JIRA_ISSUE_GET lists the ids`);let G=Date.now()+lM$,W=mM$({organizationId:Q.organizationId,attachmentId:J.id,expiresAt:G}),K=`${x5()}/api/_jira/attachments/${W}`,H=J.filename.replace(/[^\w.-]+/g,"_");return{url:K,filename:J.filename,expiresAt:new Date(G).toISOString(),command:`curl -fsSL -o ${JSON.stringify(H)} ${JSON.stringify(K)}`}}})});function yI$($,Z){let Q=(Y)=>pG.run({threadId:Z},Y);return{JIRA_ISSUE_GET:c$({description:hx.description,inputSchema:r(hx.inputSchema),execute:(Y)=>Q(()=>hx.execute(Y,$))}),JIRA_COMMENT_ADD:c$({description:ux.description,inputSchema:r(ux.inputSchema),execute:(Y)=>Q(()=>ux.execute(Y,$))}),JIRA_ISSUE_TRANSITION:c$({description:lx.description,inputSchema:r(lx.inputSchema),execute:(Y)=>Q(()=>lx.execute(Y,$))}),JIRA_ATTACHMENT_DOWNLOAD:c$({description:cx.description,inputSchema:r(cx.inputSchema),execute:(Y)=>Q(()=>cx.execute(Y,$))})}}var gI$=D(()=>{v4();o51();nB()});function s51($){let Z=$.type;if(typeof Z!=="string")return!1;if(Z==="text"||Z==="reasoning")return $.state!=="streaming";if(Z==="step-start")return!1;if(Z.startsWith("tool-")||Z==="dynamic-tool")return $.state==="approval-requested"||Z==="tool-user_ask"&&$.state==="input-available"||$.state==="output-available"||$.state==="output-error"||$.state==="output-denied";return!0}function r51($){let Z=$.type??"";if(Z==="reasoning")return"reasoning";if(Z==="file")return"file";if(Z.startsWith("tool-")||Z==="dynamic-tool")return $.state==="output-available"||$.state==="output-error"||$.state==="output-denied"?"tool_result":"tool_call";return"text"}class e51{ctx;base;seqByPart=new Map;emitted=new Set;finished=new Set;partKeyByRowId=new Map;finishMessageIdByRowId=new Map;nextSeq=0;constructor($){this.ctx=$;this.base=$.baseTimeMs??Date.now()}hasEmittedContentFor($){let Z=`${$}#`;for(let Q of this.emitted)if(Q.startsWith(Z))return!0;return!1}seqFor($){let Z=this.seqByPart.get($);if(Z!==void 0)return Z;let Q=this.nextSeq++;return this.seqByPart.set($,Q),Q}row($,Z,Q,Y,X,J=null){return{id:`${this.ctx.runId}:${$}:${Q}`,seq:Q,org_id:this.ctx.orgId,thread_id:this.ctx.threadId,run_id:this.ctx.runId,message_id:$,role:Z,kind:Y,payload:X,payload_ref:null,metadata:J,created_at:new Date(this.base+Q).toISOString()}}emitMessageParts($){let Z=$.parts??[],Q=[];for(let Y=0;Y<Z.length;Y++){let X=Z[Y];if(!s51(X))continue;let J=`${$.id}#${Y}`;if(this.emitted.has(J))continue;let G=this.seqFor(J),W=this.row($.id,$.role,G,r51(X),a51(X));this.partKeyByRowId.set(W.id,J),Q.push(W)}return Q}emitRequestMessageParts($){let Z=$.parts??[],Q=[];for(let Y=0;Y<Z.length;Y++){let X=Z[Y],J=`${$.id}#${Y}`,G=this.seqFor(J),W=this.row($.id,$.role,G,r51(X),a51(X));this.partKeyByRowId.set(W.id,J),Q.push(W)}return Q}markFinished($,Z,Q=null){if(this.finished.has($))return[];let Y=this.seqFor(`${$}#finish`),X=this.row($,Z,Y,"finish",{},Q);return this.finishMessageIdByRowId.set(X.id,$),[X]}markRequestFinished($,Z,Q=null){let Y=this.seqFor(`${$}#finish`),X=this.row($,Z,Y,"finish",{},Q);return this.finishMessageIdByRowId.set(X.id,$),[X]}acknowledge($){for(let Z of $){let Q=this.partKeyByRowId.get(Z.id);if(Q!==void 0)this.emitted.add(Q);let Y=this.finishMessageIdByRowId.get(Z.id);if(Y!==void 0)this.finished.add(Y)}}emitUserMessage($){return[...this.emitMessageParts($),...this.markFinished($.id,$.role,$.metadata??null)]}emitRequestMessage($){return[...this.emitRequestMessageParts($),...this.markRequestFinished($.id,$.role,$.metadata??null)]}emitStepParts($){return this.emitMessageParts($)}emitFinal($){let Z=this.emitMessageParts($);if(Z.length===0&&!this.hasEmittedContentFor($.id))return Z;return[...Z,...this.markFinished($.id,$.role,$.metadata??null)]}emitFinalSnapshot($){let Z=$.parts??[],Q=[];for(let J=0;J<Z.length;J++){let G=Z[J];if(!s51(G))continue;let W=`${$.id}#${J}`,K=this.seqFor(W),H=this.row($.id,$.role,K,r51(G),a51(G));this.partKeyByRowId.set(H.id,W),Q.push(H)}if(Q.length===0&&!this.hasEmittedContentFor($.id))return Q;let Y=this.seqFor(`${$.id}#finish`),X=this.row($.id,$.role,Y,"finish",{},$.metadata??null);return this.finishMessageIdByRowId.set(X.id,$.id),[...Q,X]}emitError($,Z){let Q=`${$}#error`,Y=[];if(!this.emitted.has(Q)){let X=this.seqFor(Q),J=this.row($,"assistant",X,"error",{type:"text",text:`Error: ${hI$(Z)}`});this.partKeyByRowId.set(J.id,Q),Y.push(J)}return[...Y,...this.markFinished($,"assistant")]}}function hI$($){if($.length<=d20)return $;let Z=$.length-d20;return`${$.slice(0,d20)}\u2026 [truncated ${Z} characters]`}function a51($){let Z=$.errorText;if(typeof Z!=="string"||Z.length<=d20)return $;return{...$,errorText:hI$(Z)}}var d20=8000;class CY{ctx;builder;constructor($){this.ctx=$;this.builder=new e51($)}async appendBuiltRows($){await this.ctx.storage.appendParts($),this.builder.acknowledge($)}async emitUserMessage($){await this.appendBuiltRows(this.builder.emitUserMessage($))}async emitRequestMessage($){let Z=this.builder.emitRequestMessage($);await this.ctx.storage.replaceMessageParts(this.ctx.threadId,$.id,Z),this.builder.acknowledge(Z)}async emitStepParts($){await this.appendBuiltRows(this.builder.emitStepParts($))}async emitFinal($){await this.appendBuiltRows(this.builder.emitFinal($))}async replaceFinal($){let Z=this.builder.emitFinalSnapshot($);await this.ctx.storage.replaceMessageParts(this.ctx.threadId,$.id,Z),this.builder.acknowledge(Z)}async emitError($,Z){await this.appendBuiltRows(this.builder.emitError($,Z))}}var Mj=()=>{};async function Nm($,Z,Q,Y){let X=Z.organizationId;if(!await ZW($,X,"kanban"))throw new fF("Continuing a task agent needs the kanban feature, which this plan does not include.","kanban");await hK($,X,"continuing a task agent");let J=await R6($,"smart"),G=Q.virtual_mcp_id??xz(X),W={id:Y.messageId,role:"user",parts:[{type:"text",text:Y.prompt}],metadata:{created_at:new Date().toISOString()}};await new CY({storage:$.storage.threads.messageParts(),orgId:X,threadId:Q.id,runId:Q.id}).emitRequestMessage(W),await $O({threadId:Q.id,source:"background-tool",request:{messages:[W],models:{credentialId:J.credentialId,thinking:{id:J.modelId,title:J.modelMeta.title}},agent:{id:G,...Y.agent??{}},temperature:0.5,toolApprovalLevel:"auto",mode:"default",organizationId:X,userId:Z.assignedBy??Z.createdBy,harnessId:Q.harness_id==="claude-code"?"claude-code":"decopilot",...Q.branch?{branch:Q.branch}:{},taskId:Q.id,runMetadata:{...RA0(Z),...Y.runClass?{[mc]:Y.runClass}:{}}}},{workflowID:Y.workflowID})}var i20=D(()=>{Q00();Mj();yF();VY();ZO();dc();e8()});var p20,uI$="notification.created";var n20=D(()=>{p20=["created","commented","mentioned","status_changed","assignee_changed","review_requested","review_approved","review_changes_requested","merge_failed"]});class mI${listeners=new Map;totalCount=0;strategy=null;started=!1;async start($){if(this.started){if(!$)return;await this.stop()}this.strategy=$,await this.strategy.start((Z,Q)=>this.localEmit(Z,Q)),this.started=!0}async stop(){if(!this.started||!this.strategy)return;await this.strategy.stop(),this.started=!1}add($){if(this.totalCount>=cI$)return console.warn(`[SSEHub] Total connection limit reached (${cI$})`),null;let Z=this.listeners.get($.organizationId);if(!Z)Z=new Map,this.listeners.set($.organizationId,Z);if(Z.size>=lI$)return console.warn(`[SSEHub] Per-org connection limit reached for ${$.organizationId} (${lI$})`),null;return Z.set($.id,$),this.totalCount++,$.id}remove($,Z){let Q=this.listeners.get($);if(!Q)return;if(Q.delete(Z)){if(this.totalCount--,Q.size===0)this.listeners.delete($)}}emit($,Z){if(this.strategy)this.strategy.broadcast($,Z);else this.localEmit($,Z)}countForOrg($){return this.listeners.get($)?.size??0}get count(){return this.totalCount}localEmit($,Z){this.deliver($,$,Z),this.deliver(t20,$,Z)}deliver($,Z,Q){let Y=this.listeners.get($);if(!Y||Y.size===0)return;for(let X of Y.values()){if(X.typePatterns&&!ep4(Q.type,X.typePatterns))continue;try{X.push(Q,Z)}catch{this.remove($,X.id)}}}}function ep4($,Z){for(let Q of Z){if(Q===$)return!0;if(Q.endsWith(".*")){let Y=Q.slice(0,-1);if($.startsWith(Y))return!0}}return!1}var t20="*",lI$=50,cI$=500,e5;var t00=D(()=>{C6();e5=new mI$;z$.createObservableGauge("sse_hub.connections",{description:"Active SSE listeners held by this pod",unit:"{connections}"}).addCallback(($)=>$.observe(e5.count))});function $n4($){return $.replace(/[^a-zA-Z]/g,"").toUpperCase().slice(0,4)||"TASK"}function Bm($,Z){if(Z==null)return null;return`${$n4($)}-${String(Z).padStart(2,"0")}`}var o20=()=>{};function $91($){return $.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function Qn4($,Z){let Q=$.taskKeySeq===null?null:Bm($.orgSlug,$.taskKeySeq),Y=$91($.actorName??"The agent"),X=$91($.taskTitle),J=Q?`${$91(Q)} \xB7 ${X}`:X,G=Q?`<a href="${Z}/${encodeURIComponent($.orgSlug)}/t/${encodeURIComponent(Q)}" style="color:#141413;">${J}</a>`:J;return`<p style="margin:0 0 12px 0;font-size:14px;color:#141413;line-height:1.6;font-family:Inter,system-ui,sans-serif;">${Y} ${Zn4[$.type]} ${G}</p>`}function dI$($,Z){let Q=$.length===1?"1 update on your tasks":`${$.length} updates on your tasks`;return{subject:Q,html:jG({preheader:Q,heading:Q,body:$.map((Y)=>Qn4(Y,Z)).join(`
1562
+ `).trim()}var mp4=12000,dp4=12000;var m51=D(()=>{qj()});function d51($){if($?.source!=="jira")return[];let Z=$.jira_issue_keys;if(Array.isArray(Z)){let Y=Z.filter((X)=>typeof X==="string");if(Y.length>0)return Y}let Q=$.jira_issue_key;return typeof Q==="string"&&Q!==""?[Q]:[]}function CI$($){if($?.source!=="jira")return[];let Z=$.jira_created_issue_keys;return Array.isArray(Z)?Z.filter((Q)=>typeof Q==="string"):[]}function i51($,Z){if($.length===0)throw Error("This run is not working on a Jira issue");let Q=Z?.trim().toUpperCase();if(!Q){let X=$[0];if($.length===1&&X!==void 0)return{key:X,inRun:!0};throw Error(`This run works on ${$.length} issues (${$.join(", ")}) \u2014 pass \`issueKey\` to say which one`)}let Y=$.find((X)=>X.toUpperCase()===Q);if(Y)return{key:Y,inRun:!0};if(!pp4.test(Q))throw Error(`"${Z}" is not a Jira issue key, e.g. EX-12`);return{key:Q,inRun:!1}}var pp4;var _I$=D(()=>{pp4=/^[A-Z][A-Z0-9_]*-\d+$/});import{z as S$}from"zod";async function n00($,Z,Q=$00().threadId){let Y=K0($),X=await $.storage.jiraIntegrations.getByOrg(Y.id);if(!X)throw Error("Jira is not connected for this org");let J=await $.storage.threads.get(Q),G=new _Q(X.siteUrl,X.email,X.apiToken),W=i51(d51(J?.metadata),Z);if(!W.inRun)await fI$(G,X,W.key);return{integration:X,client:G,issueKey:W.key}}async function fI$($,Z,Q){if(!Z.boardId)throw Error(`Jira has no board connected, so ${Q} cannot be checked \u2014 only this run's issues are reachable`);if(!await $.isOnBoard(Z.boardId,Q))throw Error(`${Q} is not on the connected Jira board`)}function ap4($){return $.slice(0,$.lastIndexOf("-"))}function bI$($,Z){return $.trim().toLowerCase()===Z.trim().toLowerCase()}async function sp4($,Z,Q,Y){for(let J of Y){let G=await $.getIssue(J).catch(()=>null);if(G&&bI$(G.fields.summary,Q))return G.key}let{issues:X}=await $.searchIssues({jql:`project = "${Z}" AND reporter = currentUser() AND statusCategory != Done AND created >= ${op4} ORDER BY created DESC`});return X.find((J)=>bI$(J.fields.summary,Q))?.key??null}var xI$=50000,p00,hx,ux,p51,lx,np4=100,n51,tp4=5,op4="-14d",vI$="Relates",rp4,t51,cx;var o51=D(()=>{C0();E9();R51();qj();VI$();m51();_I$();nB();p00=S$.string().optional().describe("Which issue: any on the board, e.g. one this run's issue links to or one you created. Leave out for this run's issue, when it has one.");hx=d({name:"JIRA_ISSUE_GET",description:"Read a Jira issue \u2014 this run's, or another on the board: summary, "+"status, description, comments, and attachments with the ids JIRA_ATTACHMENT_DOWNLOAD takes.",inputSchema:S$.object({issueKey:p00}),outputSchema:S$.object({key:S$.string(),url:S$.string(),status:S$.string(),markdown:S$.string()}),handler:async($,Z)=>{await Z.access.check();let{integration:Q,client:Y,issueKey:X}=await n00(Z,$.issueKey),J=await Um(Y,Q.siteUrl,X);return{key:J.key,url:J.url,status:J.status,markdown:m20(J)}}}),ux=d({name:"JIRA_COMMENT_ADD",description:"Post a comment on a Jira issue on the board. Markdown is rendered as Jira rich text, tables included. Leave one when you finish: what you did, and any pull request link. To show evidence, write the image to `org/output/<name>.png` in your working pod and reference it as "+"`![what it shows](org/output/<name>.png)` \u2014 it is uploaded to the issue "+"and rendered inline. Any other URL stays a plain link.",inputSchema:S$.object({issueKey:p00,body:S$.string().min(1).max(xI$)}),outputSchema:S$.object({commentId:S$.string(),embeddedImages:S$.array(S$.string())}),handler:async($,Z)=>{await Z.access.check();let{client:Q,issueKey:Y}=await n00(Z,$.issueKey),X=await II$({client:Q,orgFs:Z.orgFs,issueIdOrKey:Y,threadId:pG.getStore()?.threadId??null,markdown:$.body}),{id:J}=await Q.addComment(Y,$.body,{media:X});return{commentId:J,embeddedImages:[...X.keys()]}}}),p51=d({name:"JIRA_REMOTE_LINK_ADD",description:"Put a link on a Jira issue on the board \u2014 its pull request, "+"its deploy preview. A link on the card is what a person clicks; the same URL inside a comment is not. Posting the same `key` again updates that link instead of adding a second.",inputSchema:S$.object({issueKey:p00,url:S$.string().min(1),title:S$.string().min(1).max(255),summary:S$.string().max(1000).optional(),key:S$.string().max(255).optional().describe("Stable id for this link, e.g. `pull-request` or `preview`.")}),outputSchema:S$.object({linkId:S$.number()}),handler:async($,Z)=>{await Z.access.check();let{client:Q,issueKey:Y}=await n00(Z,$.issueKey),X;try{X=new URL($.url)}catch{throw Error(`"${$.url}" is not an absolute URL`)}if(X.protocol!=="https:"&&X.protocol!=="http:")throw Error(`${X.protocol} is not a linkable scheme`);let{id:J}=await Q.addRemoteLink(Y,{url:X.toString(),title:$.title,...$.summary?{summary:$.summary}:{},...$.key?{globalId:`studio-${Y}-${$.key}`}:{}});return{linkId:J}}}),lx=d({name:"JIRA_ISSUE_TRANSITION",description:"Move a Jira issue on the board to another status, by the status name (case-insensitive). Only a status the issue's workflow can reach from where it is; the error names the reachable ones.",inputSchema:S$.object({issueKey:p00,toStatus:S$.string().min(1)}),outputSchema:S$.object({status:S$.string()}),handler:async($,Z)=>{await Z.access.check();let{client:Q,issueKey:Y}=await n00(Z,$.issueKey),X=await Q.listTransitions(Y),J=$.toStatus.trim().toLowerCase(),G=X.find((W)=>W.to.name.toLowerCase()===J||W.name.toLowerCase()===J);if(!G)throw Error(`The issue cannot move to "${$.toStatus}" from here \u2014 reachable: ${X.map((W)=>W.to.name).join(", ")||"none"}`);return await Q.transitionIssue(Y,G.id),{status:G.to.name}}}),n51=d({name:"JIRA_ISSUE_SEARCH",description:'Find issues on the board with JQL, e.g. `status = "Code Review"` or `text ~ "checkout" ORDER BY updated DESC`. The query is narrowed to the board, so name only the condition. Returns keys to read in full with JIRA_ISSUE_GET.',inputSchema:S$.object({jql:S$.string().max(2000),limit:S$.number().int().min(1).max(np4).default(20)}),outputSchema:S$.object({issues:S$.array(S$.object({key:S$.string(),url:S$.string(),summary:S$.string(),status:S$.string(),type:S$.string().nullable(),updated:S$.string()})),truncated:S$.boolean()}),handler:async($,Z)=>{await Z.access.check();let Q=K0(Z),Y=await Z.storage.jiraIntegrations.getByOrg(Q.id);if(!Y)throw Error("Jira is not connected for this org");if(!Y.boardId)throw Error("Jira has no board connected to search");let X=new _Q(Y.siteUrl,Y.email,Y.apiToken),J=await X.getBoardScopeJql(Y.boardId),G=await X.searchIssues({jql:h51(J,$.jql)});return{issues:G.issues.slice(0,$.limit).map((W)=>({key:W.key,url:Fm(Y.siteUrl,W.key),summary:W.fields.summary,status:W.fields.status.name,type:W.fields.issuetype?.name??null,updated:W.fields.updated})),truncated:G.issues.length>$.limit||G.nextPageToken!==null}}}),rp4=/^[A-Z][A-Z0-9_]*$/;t51=d({name:"JIRA_ISSUE_CREATE",description:"Create a Jira issue in the project this run works in \u2014 a release card, "+"a follow-up found along the way \u2014 then comment on it, link it and move "+"it with the other Jira tools by its key. If an open issue this integration created in the last two weeks already has this exact summary, that one is returned instead (`created: false`) and still linked, so calling again after a restart does not duplicate it. Write the full description now; there is no tool to edit it later.",inputSchema:S$.object({summary:S$.string().trim().min(1).max(255),issueType:S$.string().min(1).describe("The issue type's name as the Jira API names it (often English, e.g. Story or Task, even when the UI shows a translation). The error lists the project's types."),description:S$.string().max(xI$).optional().describe("Markdown, rendered as Jira rich text, tables included."),relatesTo:S$.array(S$.string().min(1)).max(100).default([]).describe("Issues on the board to link to the new one as `Relates`, e.g. the cards a release ships."),sprint:S$.enum(["active","none"]).default("none").describe("`active` puts it in the board's running sprint, which is what a sprint board shows; `none` leaves it in the backlog."),storyPoints:S$.number().min(0).max(1000).optional()}),outputSchema:S$.object({key:S$.string(),url:S$.string(),created:S$.boolean(),linked:S$.array(S$.string()),notLinked:S$.array(S$.object({key:S$.string(),reason:S$.string()}))}),handler:async($,Z)=>{await Z.access.check();let Q=K0(Z),{threadId:Y}=$00(),X=await Z.storage.jiraIntegrations.getByOrg(Q.id);if(!X)throw Error("Jira is not connected for this org");let J=await Z.storage.threads.get(Y),G=d51(J?.metadata);if(G.length===0)throw Error("This run is not working on a Jira issue");let W=[...new Set(G.map(ap4))],K=W[0];if(W.length!==1||!K||!rp4.test(K))throw Error(`This run works in ${W.join(", ")}; it can only create in a single project`);let H=new _Q(X.siteUrl,X.email,X.apiToken),F=[];for(let j of $.relatesTo){let E=i51(G,j);if(F.includes(E.key))continue;if(!E.inRun)await fI$(H,X,E.key);F.push(E.key)}let U=CI$(J?.metadata),N=await sp4(H,K,$.summary,U),B=N===null;if(N===null){if(U.length>=tp4)throw Error(`This run already created ${U.length} issues (${U.join(", ")}), the most one run may`);let j=await H.getCreateMeta(K,$.issueType),E={};if($.storyPoints!==void 0){if(!j.storyPointsFieldId)throw Error(`${j.issueTypeName} in ${K} has no story points field to set`);E[j.storyPointsFieldId]=$.storyPoints}if($.sprint==="active"){if(!X.boardId||!j.sprintFieldId)throw Error(`${j.issueTypeName} in ${K} cannot go in a sprint \u2014 pass sprint: "none"`);let z=await H.getActiveSprint(X.boardId);if(!z)throw Error('The board has no active sprint \u2014 pass sprint: "none"');E[j.sprintFieldId]=z.id}({key:N}=await H.createIssue({projectKey:K,issueTypeId:j.issueTypeId,summary:$.summary,description:$.description,fields:E})),await Z.storage.threads.recordJiraIssueCreated(Y,N)}let O=B?new Set:new Set(await H.listLinkedIssueKeys(N,vI$)),L=[],w=[];for(let j of F){if(O.has(j)){L.push(j);continue}try{await H.linkIssues(vI$,j,N),L.push(j)}catch(E){w.push({key:j,reason:E instanceof Error?E.message:String(E)})}}return{key:N,url:Fm(X.siteUrl,N),created:B,linked:L,notLinked:w}}});cx=d({name:"JIRA_ATTACHMENT_DOWNLOAD",description:"Get a short-lived URL for one attachment of a Jira issue on the board, to `curl -L -o <path>` into the sandbox. Attachment ids are listed by JIRA_ISSUE_GET. The URL needs no credential and expires.",inputSchema:S$.object({issueKey:p00,attachmentId:S$.string().min(1)}),outputSchema:S$.object({url:S$.string(),filename:S$.string(),expiresAt:S$.string(),command:S$.string()}),handler:async($,Z)=>{await Z.access.check();let{integration:Q,client:Y,issueKey:X}=await n00(Z,$.issueKey),J=(await Y.listAttachments(X)).find((F)=>F.id===$.attachmentId);if(!J)throw Error(`${X} has no attachment "${$.attachmentId}" \u2014 JIRA_ISSUE_GET lists the ids`);let G=Date.now()+lM$,W=mM$({organizationId:Q.organizationId,attachmentId:J.id,expiresAt:G}),K=`${x5()}/api/_jira/attachments/${W}`,H=J.filename.replace(/[^\w.-]+/g,"_");return{url:K,filename:J.filename,expiresAt:new Date(G).toISOString(),command:`curl -fsSL -o ${JSON.stringify(H)} ${JSON.stringify(K)}`}}})});function yI$($,Z){let Q=(Y)=>pG.run({threadId:Z},Y);return{JIRA_ISSUE_GET:c$({description:hx.description,inputSchema:r(hx.inputSchema),execute:(Y)=>Q(()=>hx.execute(Y,$))}),JIRA_COMMENT_ADD:c$({description:ux.description,inputSchema:r(ux.inputSchema),execute:(Y)=>Q(()=>ux.execute(Y,$))}),JIRA_ISSUE_TRANSITION:c$({description:lx.description,inputSchema:r(lx.inputSchema),execute:(Y)=>Q(()=>lx.execute(Y,$))}),JIRA_ATTACHMENT_DOWNLOAD:c$({description:cx.description,inputSchema:r(cx.inputSchema),execute:(Y)=>Q(()=>cx.execute(Y,$))})}}var gI$=D(()=>{v4();o51();nB()});function s51($){let Z=$.type;if(typeof Z!=="string")return!1;if(Z==="text"||Z==="reasoning")return $.state!=="streaming";if(Z==="step-start")return!1;if(Z.startsWith("tool-")||Z==="dynamic-tool")return $.state==="approval-requested"||Z==="tool-user_ask"&&$.state==="input-available"||$.state==="output-available"||$.state==="output-error"||$.state==="output-denied";return!0}function r51($){let Z=$.type??"";if(Z==="reasoning")return"reasoning";if(Z==="file")return"file";if(Z.startsWith("tool-")||Z==="dynamic-tool")return $.state==="output-available"||$.state==="output-error"||$.state==="output-denied"?"tool_result":"tool_call";return"text"}class e51{ctx;base;seqByPart=new Map;emitted=new Set;finished=new Set;partKeyByRowId=new Map;finishMessageIdByRowId=new Map;nextSeq=0;constructor($){this.ctx=$;this.base=$.baseTimeMs??Date.now()}hasEmittedContentFor($){let Z=`${$}#`;for(let Q of this.emitted)if(Q.startsWith(Z))return!0;return!1}seqFor($){let Z=this.seqByPart.get($);if(Z!==void 0)return Z;let Q=this.nextSeq++;return this.seqByPart.set($,Q),Q}row($,Z,Q,Y,X,J=null){return{id:`${this.ctx.runId}:${$}:${Q}`,seq:Q,org_id:this.ctx.orgId,thread_id:this.ctx.threadId,run_id:this.ctx.runId,message_id:$,role:Z,kind:Y,payload:X,payload_ref:null,metadata:J,created_at:new Date(this.base+Q).toISOString()}}emitMessageParts($){let Z=$.parts??[],Q=[];for(let Y=0;Y<Z.length;Y++){let X=Z[Y];if(!s51(X))continue;let J=`${$.id}#${Y}`;if(this.emitted.has(J))continue;let G=this.seqFor(J),W=this.row($.id,$.role,G,r51(X),a51(X));this.partKeyByRowId.set(W.id,J),Q.push(W)}return Q}emitRequestMessageParts($){let Z=$.parts??[],Q=[];for(let Y=0;Y<Z.length;Y++){let X=Z[Y],J=`${$.id}#${Y}`,G=this.seqFor(J),W=this.row($.id,$.role,G,r51(X),a51(X));this.partKeyByRowId.set(W.id,J),Q.push(W)}return Q}markFinished($,Z,Q=null){if(this.finished.has($))return[];let Y=this.seqFor(`${$}#finish`),X=this.row($,Z,Y,"finish",{},Q);return this.finishMessageIdByRowId.set(X.id,$),[X]}markRequestFinished($,Z,Q=null){let Y=this.seqFor(`${$}#finish`),X=this.row($,Z,Y,"finish",{},Q);return this.finishMessageIdByRowId.set(X.id,$),[X]}acknowledge($){for(let Z of $){let Q=this.partKeyByRowId.get(Z.id);if(Q!==void 0)this.emitted.add(Q);let Y=this.finishMessageIdByRowId.get(Z.id);if(Y!==void 0)this.finished.add(Y)}}emitUserMessage($){return[...this.emitMessageParts($),...this.markFinished($.id,$.role,$.metadata??null)]}emitRequestMessage($){return[...this.emitRequestMessageParts($),...this.markRequestFinished($.id,$.role,$.metadata??null)]}emitStepParts($){return this.emitMessageParts($)}emitFinal($){let Z=this.emitMessageParts($);if(Z.length===0&&!this.hasEmittedContentFor($.id))return Z;return[...Z,...this.markFinished($.id,$.role,$.metadata??null)]}emitFinalSnapshot($){let Z=$.parts??[],Q=[];for(let J=0;J<Z.length;J++){let G=Z[J];if(!s51(G))continue;let W=`${$.id}#${J}`,K=this.seqFor(W),H=this.row($.id,$.role,K,r51(G),a51(G));this.partKeyByRowId.set(H.id,W),Q.push(H)}if(Q.length===0&&!this.hasEmittedContentFor($.id))return Q;let Y=this.seqFor(`${$.id}#finish`),X=this.row($.id,$.role,Y,"finish",{},$.metadata??null);return this.finishMessageIdByRowId.set(X.id,$.id),[...Q,X]}emitError($,Z){let Q=`${$}#error`,Y=[];if(!this.emitted.has(Q)){let X=this.seqFor(Q),J=this.row($,"assistant",X,"error",{type:"text",text:`Error: ${hI$(Z)}`});this.partKeyByRowId.set(J.id,Q),Y.push(J)}return[...Y,...this.markFinished($,"assistant")]}}function hI$($){if($.length<=d20)return $;let Z=$.length-d20;return`${$.slice(0,d20)}\u2026 [truncated ${Z} characters]`}function a51($){let Z=$.errorText;if(typeof Z!=="string"||Z.length<=d20)return $;return{...$,errorText:hI$(Z)}}var d20=8000;class CY{ctx;builder;constructor($){this.ctx=$;this.builder=new e51($)}async appendBuiltRows($){await this.ctx.storage.appendParts($),this.builder.acknowledge($)}async emitUserMessage($){await this.appendBuiltRows(this.builder.emitUserMessage($))}async emitRequestMessage($){let Z=this.builder.emitRequestMessage($);await this.ctx.storage.replaceMessageParts(this.ctx.threadId,$.id,Z),this.builder.acknowledge(Z)}async emitStepParts($){await this.appendBuiltRows(this.builder.emitStepParts($))}async emitFinal($){await this.appendBuiltRows(this.builder.emitFinal($))}async replaceFinal($){let Z=this.builder.emitFinalSnapshot($);await this.ctx.storage.replaceMessageParts(this.ctx.threadId,$.id,Z),this.builder.acknowledge(Z)}async emitError($,Z){await this.appendBuiltRows(this.builder.emitError($,Z))}}var Mj=()=>{};async function Nm($,Z,Q,Y){let X=Z.organizationId;if(!await ZW($,X,"kanban"))throw new fF("Continuing a task agent needs the kanban feature, which this plan does not include.","kanban");await hK($,X,"continuing a task agent");let J=await R6($,"smart"),G=Q.virtual_mcp_id??xz(X),W={id:Y.messageId,role:"user",parts:[{type:"text",text:Y.prompt}],metadata:{created_at:new Date().toISOString()}};await new CY({storage:$.storage.threads.messageParts(),orgId:X,threadId:Q.id,runId:Q.id}).emitRequestMessage(W),await $O({threadId:Q.id,source:"background-tool",request:{messages:[W],models:{credentialId:J.credentialId,thinking:{id:J.modelId,title:J.modelMeta.title}},agent:{id:G,...Y.agent??{}},temperature:0.5,toolApprovalLevel:"auto",mode:"default",organizationId:X,userId:Z.assignedBy??Z.createdBy,harnessId:Q.harness_id==="claude-code"?"claude-code":"decopilot",...Q.branch?{branch:Q.branch}:{},taskId:Q.id,runMetadata:{...RA0(Z),...Y.runClass?{[mc]:Y.runClass}:{}}}},{workflowID:Y.workflowID})}var i20=D(()=>{Q00();Mj();yF();VY();ZO();dc();e8()});var p20,uI$="notification.created";var n20=D(()=>{p20=["created","commented","mentioned","status_changed","assignee_changed","review_requested","review_approved","review_changes_requested","merge_failed"]});class mI${listeners=new Map;totalCount=0;strategy=null;started=!1;async start($){if(this.started){if(!$)return;await this.stop()}this.strategy=$,await this.strategy.start((Z,Q)=>this.localEmit(Z,Q)),this.started=!0}async stop(){if(!this.started||!this.strategy)return;await this.strategy.stop(),this.started=!1}add($){if(this.totalCount>=cI$)return console.warn(`[SSEHub] Total connection limit reached (${cI$})`),null;let Z=this.listeners.get($.organizationId);if(!Z)Z=new Map,this.listeners.set($.organizationId,Z);if(Z.size>=lI$)return console.warn(`[SSEHub] Per-org connection limit reached for ${$.organizationId} (${lI$})`),null;return Z.set($.id,$),this.totalCount++,$.id}remove($,Z){let Q=this.listeners.get($);if(!Q)return;if(Q.delete(Z)){if(this.totalCount--,Q.size===0)this.listeners.delete($)}}emit($,Z){if(this.strategy)this.strategy.broadcast($,Z);else this.localEmit($,Z)}countForOrg($){return this.listeners.get($)?.size??0}get count(){return this.totalCount}localEmit($,Z){this.deliver($,$,Z),this.deliver(t20,$,Z)}deliver($,Z,Q){let Y=this.listeners.get($);if(!Y||Y.size===0)return;for(let X of Y.values()){if(X.typePatterns&&!ep4(Q.type,X.typePatterns))continue;try{X.push(Q,Z)}catch{this.remove($,X.id)}}}}function ep4($,Z){for(let Q of Z){if(Q===$)return!0;if(Q.endsWith(".*")){let Y=Q.slice(0,-1);if($.startsWith(Y))return!0}}return!1}var t20="*",lI$=50,cI$=500,e5;var t00=D(()=>{C6();e5=new mI$;z$.createObservableGauge("sse_hub.connections",{description:"Active SSE listeners held by this pod",unit:"{connections}"}).addCallback(($)=>$.observe(e5.count))});function $n4($){return $.replace(/[^a-zA-Z]/g,"").toUpperCase().slice(0,4)||"TASK"}function Bm($,Z){if(Z==null)return null;return`${$n4($)}-${String(Z).padStart(2,"0")}`}var o20=()=>{};function $91($){return $.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function Qn4($,Z){let Q=$.taskKeySeq===null?null:Bm($.orgSlug,$.taskKeySeq),Y=$91($.actorName??"The agent"),X=$91($.taskTitle),J=Q?`${$91(Q)} \xB7 ${X}`:X,G=Q?`<a href="${Z}/${encodeURIComponent($.orgSlug)}/t/${encodeURIComponent(Q)}" style="color:#141413;">${J}</a>`:J;return`<p style="margin:0 0 12px 0;font-size:14px;color:#141413;line-height:1.6;font-family:Inter,system-ui,sans-serif;">${Y} ${Zn4[$.type]} ${G}</p>`}function dI$($,Z){let Q=$.length===1?"1 update on your tasks":`${$.length} updates on your tasks`;return{subject:Q,html:jG({preheader:Q,heading:Q,body:$.map((Y)=>Qn4(Y,Z)).join(`
1563
1563
  `),footnote:"You received this because you follow these tasks. Open a task and use Unfollow to stop."})}}var Zn4;var iI$=D(()=>{o20();Zn4={created:"created",commented:"commented on",mentioned:"mentioned you on",status_changed:"moved",assignee_changed:"reassigned",review_requested:"requested review on",review_approved:"approved",review_changes_requested:"requested changes on",merge_failed:"couldn't merge"}});import{z as o00}from"zod";var Om;var r20=D(()=>{Om=o00.object({taskTitle:o00.string(),taskKeySeq:o00.number().int().nullable(),actorName:o00.string().nullable(),actorImage:o00.string().nullable()})});import{DBOS as BU,SchedulerMode as Yn4}from"@dbos-inc/dbos-sdk";function pI$($){Y91=$}function J91(){if(!Y91)throw Error("[notifications] runtime not initialized \u2014 setNotificationDigestRuntime() must run before the workflow fires");return Y91}function nI$(){return J91().db.selectFrom("notifications as n").innerJoin("organization as o","o.id","n.organization_id").innerJoin("user as u","u.id","n.user_id").innerJoin("member as m",($)=>$.onRef("m.userId","=","n.user_id").onRef("m.organizationId","=","n.organization_id")).select(["n.id as id","n.user_id as userId","n.type as type","n.data as data","o.slug as orgSlug","u.email as email"]).where("n.emailed_at","is",null).where("n.read_at","is",null).orderBy("n.created_at","asc").limit(Gn4)}function tI$($){return $.map((Z)=>{let Q=Om.parse(Z.data);return{id:Z.id,userId:Z.userId,email:Z.email,type:Z.type,orgSlug:Z.orgSlug,taskTitle:Q.taskTitle,taskKeySeq:Q.taskKeySeq,actorName:Q.actorName}})}async function Kn4($){return tI$(await nI$().where("n.user_id","=",$).execute())}async function Hn4($){return tI$(await nI$().where("n.created_at","<",$).execute())}async function Fn4($){if($.length===0)return new Set;let Z=await J91().db.updateTable("notifications").set({emailed_at:new Date}).where("id","in",$).where("emailed_at","is",null).returning("id").execute();return new Set(Z.map((Q)=>Q.id))}function Un4($){let Z=new Map;for(let Q of $){let Y=Z.get(Q.userId);if(Y)Y.push(Q);else Z.set(Q.userId,[Q])}return[...Z.values()]}function G91(){let $=RK().auth,Z=$.emailProviders??[],Q=$.inviteEmailProviderId?wG(Z,$.inviteEmailProviderId):Z[0];return Q?LG(Q):null}function Nn4($){if($.length>254)return!1;if($.length<3)return!1;if($.includes(" "))return!1;let Z=$.lastIndexOf("@");if(Z<=0||Z===$.length-1)return!1;if(!$.substring(Z+1).includes("."))return!1;return!0}async function Bn4($){let Z=G91();if(!Z)throw Error("no email provider configured");let Q=$[0].email;if(!Nn4(Q))throw Error(`invalid recipient email: ${Q.substring(0,50)}`);let{subject:Y,html:X}=dI$($,a9());if(Y.length>1000)throw Error(`digest subject too long: ${Y.length} chars (max 1000)`);if(X.length>1e6)throw Error(`digest html too long: ${X.length} bytes (max 1MB)`);await Z({to:Q,subject:Y,html:X})}async function On4($){await J91().db.deleteFrom("notifications").where("created_at","<",$).execute()}async function oI$($,Z){if($.length===0)return;let Q=await BU.runStep(()=>Fn4($.map((X)=>X.id)),{name:`claimForEmail:${Z}`}),Y=$.filter((X)=>Q.has(X.id));if(Y.length===0)return;await BU.runStep(()=>Bn4(Y),{name:`sendDigest:${Z}`,retriesAllowed:!0,maxAttempts:3})}async function Dn4($,Z){let Q=Z-Date.now();if(Q>0)await BU.sleep(Q);if(!G91())return;let Y=await BU.runStep(()=>Kn4($),{name:"loadPendingForUser"});try{await oI$(Y,$)}catch(X){console.warn(`[notifications] digest for ${$} failed:`,X instanceof Error?X.message:X)}}async function Ln4($,Z){let Q=new Date($.getTime()-Q91-Jn4),Y=G91()?await BU.runStep(()=>Hn4(Q),{name:"loadOrphanedNotifications"}):[];for(let X of Un4(Y)){let J=X[0].userId;try{await oI$(X,J)}catch(G){console.warn(`[notifications] sweep digest for ${J} failed:`,G instanceof Error?G.message:G)}}if($.getUTCMinutes()<2)await BU.runStep(()=>On4(new Date($.getTime()-Wn4)),{name:"pruneOldNotifications"})}function rI$($){if(!X91)return;let Z=Math.floor(Date.now()/Q91),Q=(Z+1)*Q91;BU.startWorkflow(X91,{workflowID:`notif-digest:${$}:${Z}`})($,Q).catch((Y)=>{console.debug("[notifications] digest enqueue skipped:",Y instanceof Error?Y.message:Y)})}function aI$(){if(Z91)return;X91=BU.registerWorkflow(Dn4,{name:"notificationUserDigestWorkflow"}),Z91=BU.registerWorkflow(Ln4,{name:"notificationDigestWorkflow"}),BU.registerScheduled(Z91,{name:"notificationDigestWorkflow",crontab:Xn4,mode:Yn4.ExactlyOncePerIntervalWhenActive})}var Xn4="*/2 * * * *",Q91=30000,Jn4=60000,Gn4=500,Wn4=2592000000,Y91=null,Z91=null,X91=null;var W91=D(()=>{Hr();E9();kP();iI$();r20()});async function wn4($,Z){return await $.selectFrom("task_board_items").select(["organization_id","title","key_seq"]).where("id","=",Z).executeTakeFirst()}async function jn4($,Z){if(!Z)return{name:null,image:null};let Q=await $.selectFrom("user").select(["name","image"]).where("id","=",Z).executeTakeFirst();return{name:Q?.name??null,image:Q?.image??null}}async function Dm($){let{db:Z,taskBoardItemId:Q,type:Y,actorId:X}=$;try{let J=[],G=await wn4(Z,Q);if(!G)return;let W=async(K)=>{let H=[...new Set($.alsoSubscribe?.filter((L)=>!!L))];if(H.length>0)await K.insertInto("notification_subscriptions").values(H.map((L)=>({id:s8("nsub"),user_id:L,task_board_item_id:Q}))).onConflict((L)=>L.columns(["user_id","task_board_item_id"]).doNothing()).execute();let F=$.recipients,N=(F?[...new Set(F.filter((L)=>!!L))]:(await K.selectFrom("notification_subscriptions").select("user_id").where("task_board_item_id","=",Q).where("subscribed","=",!0).execute()).map((L)=>L.user_id)).filter((L)=>L!==X);if(N.length===0)return;J=N;let B=await jn4(K,X),O=Om.parse({taskTitle:G.title,taskKeySeq:G.key_seq??null,actorName:B.name,actorImage:B.image});await K.insertInto("notifications").values(N.map((L)=>({id:s8("notif"),user_id:L,organization_id:G.organization_id,task_board_item_id:Q,type:Y,actor_id:X,data:JSON.stringify(O)}))).execute()};await(Z.isTransaction?W(Z):Z.transaction().execute(W));for(let K of J)rI$(K),e5.emit(G.organization_id,{id:crypto.randomUUID(),type:uI$,source:"notifications",subject:K,time:new Date().toISOString()})}catch(J){console.error("[notifications] fan-out failed",J)}}var a20=D(()=>{ZY();n20();t00();W91();r20()});import{sql as oG}from"kysely";function zn4($){return En4.has($)?$:null}function s20($){let Z=(Q)=>Q instanceof Date?Q.toISOString():Q;return{id:$.id,taskBoardItemId:$.task_board_item_id,parentId:$.parent_id,authorId:$.author_id,threadId:$.thread_id,body:$.body,resolved:$.resolved,createdAt:Z($.created_at),updatedAt:Z($.updated_at)}}function sI$($){if($&&typeof $==="object"&&!Array.isArray($)){let Z=$.text;if(typeof Z==="string"&&Z.trim())return Z.trim()}return null}function K91($,Z=!1){if($.status!=="in_progress")return!1;let Q=$.threads.filter((Y)=>Y.hasMessages);if(Q.length===0)return!1;if($.repo!=null&&!Z)return!1;if(!Q.every((Y)=>Y.status!==null&&r00.has(Y.status)))return!1;return Q.some((Y)=>Y.status==="completed")}function Tn4($){let Z=typeof $==="string"?(()=>{try{return JSON.parse($)}catch{return null}})():$;if(!Z||typeof Z!=="object")return!1;let Q=Z.githubRepo?.url;return typeof Q==="string"&&Q.length>0}function Rn4($){if($===null||$===void 0)return null;let Z=typeof $==="number"?$:Number($);return Number.isFinite(Z)?Z:null}function qn4($,Z){let Q=(J)=>J instanceof Date?J.getTime():new Date(J).getTime(),Y=Q($),X=Z===null?Number.NEGATIVE_INFINITY:Q(Z);return new Date(Math.max(Y,X)).toISOString()}class rG{db;constructor($){this.db=$}inTransaction($){return this.db.isTransaction?$(this.db):this.db.transaction().execute($)}async list($){let Q=(await this.db.selectFrom("task_board_items").selectAll().where("organization_id","=",$).where("dismissed_at","is",null).where("source","is",null).orderBy("sort_order","asc").execute()).map((Y)=>this.itemFromDbRow(Y));return await this.attachRefs(Q,$),Q}async searchByTitle($,Z,Q){return(await this.db.selectFrom("task_board_items").selectAll().where("organization_id","=",$).where("dismissed_at","is",null).where("source","is",null).where("title","ilike",`%${Wh(Z)}%`).orderBy("updated_at","desc").limit(Q).execute()).map((X)=>this.itemFromDbRow(X))}async getById($,Z){let Q=await this.db.selectFrom("task_board_items").selectAll().where("id","=",$).where("organization_id","=",Z).executeTakeFirst();if(!Q)return null;let Y=this.itemFromDbRow(Q);return await this.attachRefs([Y],Z),Y}async create($){let Z=s8("board"),Q=new Date().toISOString(),Y=$.status??"triage",X=(G)=>G.insertInto("task_board_items").values({id:Z,organization_id:$.organizationId,title:$.title,description:$.description??null,status:Y,priority:$.priority??"medium",type:$.type??X11,assignee_id:$.assigneeId??null,assigned_by:$.assignedBy??null,repo:$.repo??null,repository_id:$.repositoryId??null,due_date:$.dueDate??null,external_key:$.externalKey??null,external_url:$.externalUrl??null,source:$.source??null,sort_order:oG`(
1564
1564
  select coalesce(min(sort_order), 0) - 1
1565
1565
  from task_board_items
@@ -1572,7 +1572,7 @@ ${X}`:X}case"media":return"";case"mediaSingle":case"mediaGroup":return Hm(NU(Q),
1572
1572
  )`,created_by:$.by,created_at:Q,updated_by:$.by,updated_at:Q}).returningAll().executeTakeFirstOrThrow(),J=await this.inTransaction(async(G)=>{return await oG`select pg_advisory_xact_lock(hashtext(${`task-board-key-seq:${$.organizationId}`})::bigint)`.execute(G),X(G)});return this.itemFromDbRow(J)}async update($,Z,Q,Y){let X=await this.db.updateTable("task_board_items").set({...Q.title!==void 0?{title:Q.title}:{},...Q.description!==void 0?{description:Q.description}:{},...Q.status!==void 0?{status:Q.status}:{},...Q.priority!==void 0?{priority:Q.priority}:{},...Q.type!==void 0?{type:Q.type}:{},...Q.assigneeId!==void 0?{assignee_id:Q.assigneeId}:{},...Q.assignedBy!==void 0?{assigned_by:Q.assignedBy}:{},...Q.repo!==void 0?{repo:Q.repo}:{},...Q.repositoryId!==void 0?{repository_id:Q.repositoryId}:{},...Q.dueDate!==void 0?{due_date:Q.dueDate}:{},...Q.externalUrl!==void 0?{external_url:Q.externalUrl}:{},...Q.previewRoutes!==void 0?{preview_routes:JSON.stringify(Q.previewRoutes)}:{},...Q.sortOrder!==void 0?{sort_order:Q.sortOrder}:{},...Q.status!==void 0&&!eI$.has(Q.status)?{review_cycle_started_at:null}:{},updated_by:Y,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).returningAll().executeTakeFirstOrThrow(),J=this.itemFromDbRow(X);return await this.attachRefs([J],Z),J}async delete($,Z,Q){return this.inTransaction(async(Y)=>{let X=await Y.selectFrom("task_board_items").select(["created_by"]).where("id","=",$).where("organization_id","=",Z).executeTakeFirst();if(!X)return!1;if(PY({createdBy:X.created_by}))return await Y.updateTable("task_board_items").set({dismissed_at:new Date().toISOString(),updated_by:Q}).where("id","=",$).where("organization_id","=",Z).where("dismissed_at","is",null).execute(),!0;return await Y.deleteFrom("task_board_item_threads").where("task_board_item_id","=",$).where("organization_id","=",Z).execute(),await Y.deleteFrom("task_board_item_prs").where("task_board_item_id","=",$).where("organization_id","=",Z).execute(),await Y.deleteFrom("task_board_items").where("id","=",$).where("organization_id","=",Z).execute(),!0})}async dismissedFindingKeys($,Z){if(Z.length===0)return new Set;let Q=await this.db.selectFrom("task_board_items").select(["external_key"]).where("organization_id","=",$).where("external_key","in",Z).where("dismissed_at","is not",null).execute();return new Set(Q.flatMap((Y)=>Y.external_key??[]))}async listDismissedFindings($){return(await this.db.selectFrom("task_board_items").select(["external_key","updated_by","dismissed_at"]).where("organization_id","=",$).where("dismissed_at","is not",null).orderBy("dismissed_at","desc").execute()).flatMap((Q)=>Q.external_key&&Q.dismissed_at?[{externalKey:Q.external_key,dismissedBy:Q.updated_by,dismissedAt:Q.dismissed_at instanceof Date?Q.dismissed_at.toISOString():Q.dismissed_at}]:[])}async restoreDismissedFindings($,Z){if(Z&&Z.length===0)return 0;let Q=this.db.updateTable("task_board_items").set({dismissed_at:null}).where("organization_id","=",$).where("dismissed_at","is not",null);if(Z)Q=Q.where("external_key","in",Z);let Y=await Q.executeTakeFirst();return Number(Y.numUpdatedRows??0n)}async setItemTags($,Z,Q){await this.inTransaction(async(Y)=>{if(await Y.deleteFrom("task_board_item_tags").where("task_board_item_id","=",$).$if(Z.length>0,(X)=>X.where("id","not in",Z)).execute(),Z.length>0)await Y.insertInto("task_board_item_tags").values(Z.map((X)=>({task_board_item_id:$,id:X,created_by:Q,created_at:new Date().toISOString()}))).onConflict((X)=>X.doNothing()).execute()})}async addItemTags($,Z,Q){if(Z.length===0)return;await this.db.insertInto("task_board_item_tags").values(Z.map((Y)=>({task_board_item_id:$,id:Y,created_by:Q,created_at:new Date().toISOString()}))).onConflict((Y)=>Y.doNothing()).execute()}async linkThread($,Z,Q){await this.db.insertInto("task_board_item_threads").values({task_board_item_id:$,thread_id:Z,organization_id:Q}).onConflict((Y)=>Y.columns(["task_board_item_id","thread_id"]).doNothing()).execute()}async listItemsPendingReview($,Z,Q){let Y=this.db.selectFrom("task_board_items").select(["id","organization_id as organizationId","updated_at"]).where((J)=>J.or([J("review_cycle_started_at","is not",null),J("status","=",T$.review)])).where("dismissed_at","is",null);if(Q)Y=Y.where((J)=>J.or([J("last_swept_at","is",null),J("last_swept_at","<",Q)]));if(Z){let J=new Date(Z.updatedAt);Y=Y.where((G)=>G.or([G("updated_at",">",J),G.and([G("updated_at","=",J),G("id",">",Z.id)])]))}return(await Y.orderBy("updated_at","asc").orderBy("id","asc").limit($).execute()).map((J)=>({id:J.id,organizationId:J.organizationId,updatedAt:J.updated_at instanceof Date?J.updated_at.toISOString():String(J.updated_at)}))}async listItemsAwaitingArchive($,Z){return(await this.db.selectFrom("task_board_items as i").select(["i.id","i.organization_id as organizationId"]).where("i.status","=","done").where("i.dismissed_at","is",null).where("i.updated_at","<",$).where((Y)=>Y.exists(Y.selectFrom("task_board_item_prs as p").select("p.url").whereRef("p.task_board_item_id","=","i.id"))).orderBy("i.updated_at","asc").limit(Z).execute()).map((Y)=>({id:Y.id,organizationId:Y.organizationId}))}async listItemsAwaitingMergedTag($,Z){return(await this.db.selectFrom("task_board_items as i").select(["i.id","i.organization_id as organizationId"]).where("i.status","in",Mn4).where("i.dismissed_at","is",null).where((Y)=>Y.exists(Y.selectFrom("task_board_item_prs as p").select("p.url").whereRef("p.task_board_item_id","=","i.id"))).where((Y)=>Y.not(Y.exists(Y.selectFrom("task_board_item_tags as t").innerJoin("organization_tags as g","g.id","t.id").select("t.id").whereRef("t.task_board_item_id","=","i.id").where(oG`lower(g.name)`,"=",$)))).orderBy("i.updated_at","desc").limit(Z).execute()).map((Y)=>({id:Y.id,organizationId:Y.organizationId}))}async claimSweep($,Z,Q){let Y=await this.db.updateTable("task_board_items").set({last_swept_at:new Date}).where("id","=",$).where("organization_id","=",Z).where((X)=>X.or([X("last_swept_at","is",null),X("last_swept_at","<",Q)])).executeTakeFirst();return Number(Y.numUpdatedRows??0)>0}async failedRunInfo($,Z){let Q=await this.db.selectFrom("threads as t").leftJoinLateral((Y)=>Y.selectFrom("thread_message_parts as p").select("p.payload").whereRef("p.thread_id","=","t.id").where("p.kind","=","error").orderBy("p.created_at","desc").limit(1).as("err"),(Y)=>Y.onTrue()).select(["t.status","t.failure_kind as kind","err.payload as payload"]).where("t.id","=",$).where("t.organization_id","=",Z).executeTakeFirst();if(!Q||Q.status!=="failed")return null;return{kind:Q.kind??null,errorText:sI$(Q.payload)}}async scheduleRunRetry($,Z,Q,Y){return(await this.db.updateTable("task_board_items").set({retry_at:Y,retry_attempts:Q}).where("id","=",$).where("organization_id","=",Z).where("status","=",T$.progress).where("dismissed_at","is",null).returning("id").execute()).length>0}async returnToTodoAfterFailure($,Z,Q){if((await this.db.updateTable("task_board_items").set({status:T$.queue,retry_at:null,retry_attempts:0,updated_by:Q,updated_at:new Date}).where("id","=",$).where("organization_id","=",Z).where("status","=",T$.progress).where("dismissed_at","is",null).returning("id").execute()).length===0)return null;return await this.getById($,Z)}async failNeverStartedLinkedThreads($,Z,Q){let Y=await this.db.selectFrom("threads as t").innerJoin("task_board_item_threads as l","l.thread_id","t.id").select(["t.id as threadId","l.task_board_item_id as itemId","l.organization_id as organizationId"]).where("t.status","=","in_progress").where("t.run_started_at","is",null).where((W)=>W.and([W("t.updated_at","<",Z),W.or([W("t.last_progress_at","is",null),W("t.last_progress_at","<",Z)])])).limit($).execute();if(Y.length===0)return[];let X=Y.map((W)=>W.threadId),J=await this.db.updateTable("threads").set({status:"failed",failure_reason:Q,failure_kind:"abandoned",run_owner_pod:null,run_config:null,run_started_at:null,updated_at:new Date().toISOString()}).where("id","in",X).where("status","=","in_progress").returning("id").execute(),G=new Set(J.map((W)=>W.id));return Y.filter((W)=>G.has(W.threadId))}async relabelDeliveredFailure($,Z,Q){return(await this.db.updateTable("threads").set({failure_reason:Q,failure_kind:"ended_after_delivery",updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("status","=","failed").where((X)=>X.or([X("failure_kind","is",null),X("failure_kind","not in",["cancelled",...m00])])).returning("id").execute()).length>0}async supersedeFailedThreads($,Z){return(await this.db.updateTable("threads").set({failure_kind:"superseded",updated_at:new Date().toISOString()}).where("organization_id","=",Z).where("status","=","failed").where("failure_kind","is distinct from","cancelled").where((Y)=>Y("id","in",Y.selectFrom("task_board_item_threads").select("thread_id").where("task_board_item_id","=",$).where("organization_id","=",Z))).returning("id").execute()).length}async listItemsStuckAfterFailure($,Z){let Q=await this.db.selectFrom("task_board_items as i").innerJoin("task_board_item_threads as l","l.task_board_item_id","i.id").innerJoin("threads as t","t.id","l.thread_id").select(["i.id as id","i.organization_id as organizationId","t.id as threadId"]).where("i.status","=","in_progress").where("i.assignee_id","=",j8).where("i.dismissed_at","is",null).where("i.retry_at","is",null).where("t.status","=","failed").where((X)=>X.or([X("t.failure_kind","is",null),X("t.failure_kind","not in",[...m00])])).where("t.updated_at","<",Z).where((X)=>X.not(X.exists(X.selectFrom("task_board_item_threads as l2").innerJoin("threads as t2","t2.id","l2.thread_id").select("t2.id").whereRef("l2.task_board_item_id","=","i.id").where("t2.status","in",["in_progress","requires_action"])))).orderBy("t.updated_at","desc").limit($).execute(),Y=new Set;return Q.filter((X)=>!Y.has(X.id)&&Y.add(X.id))}async listItemsFinishedWithoutPr($,Z){let Q=(X)=>oG`(select t.${oG.ref(X)} from task_board_item_threads l
1573
1573
  join threads t on t.id = l.thread_id
1574
1574
  where l.task_board_item_id = i.id
1575
- order by t.updated_at desc limit 1)`;return(await this.db.selectFrom("task_board_items as i").select(["i.id as id","i.organization_id as organizationId",Q("updated_at").as("finishedAt")]).where("i.status","=",T$.progress).where("i.assignee_id","=",j8).where("i.review_cycle_started_at","is",null).where("i.dismissed_at","is",null).where("i.retry_at","is",null).where("i.source","is",null).where((X)=>X.or([X("i.last_swept_at","is",null),X("i.last_swept_at","<",Z)])).where((X)=>X.not(X.exists(X.selectFrom("task_board_item_prs as p").select("p.task_board_item_id").whereRef("p.task_board_item_id","=","i.id")))).where(Q("status"),"=","completed").where((X)=>X.not(X.exists(X.selectFrom("task_board_item_threads as l2").innerJoin("threads as t2","t2.id","l2.thread_id").select("t2.id").whereRef("l2.task_board_item_id","=","i.id").where("t2.status","in",["in_progress","requires_action"])))).orderBy("i.updated_at","asc").limit($).execute()).map((X)=>({id:X.id,organizationId:X.organizationId,finishedAt:new Date(X.finishedAt)}))}async listItemsDueForRetry($,Z){return await this.db.selectFrom("task_board_items").select(["id","organization_id as organizationId","retry_attempts as attempts"]).where("retry_at","is not",null).where("retry_at","<=",Z).where("status","=","in_progress").where("dismissed_at","is",null).orderBy("retry_at","asc").limit($).execute()}async claimDueRetry($,Z,Q){return(await this.db.updateTable("task_board_items").set({retry_at:null}).where("id","=",$).where("organization_id","=",Z).where("retry_at","is not",null).where("retry_at","<=",Q).returning("id").execute()).length>0}async clearRunRetry($,Z){await this.db.updateTable("task_board_items").set({retry_at:null,retry_attempts:0}).where("id","=",$).where("organization_id","=",Z).execute()}async clearSweepBudget($,Z){await this.db.updateTable("task_board_items").set({last_swept_at:null}).where("id","=",$).where("organization_id","=",Z).execute()}async linkedThreadIds($,Z){return(await this.db.selectFrom("task_board_item_threads").select("thread_id as threadId").where("task_board_item_id","=",$).where("organization_id","=",Z).execute()).map((Y)=>Y.threadId)}async boardManagedIds($,Z){if($.length===0)return[];let Q=await this.db.selectFrom("task_board_items").select("id").where("id","in",[...$]).where("organization_id","=",Z).where("source","is",null).execute(),Y=new Set(Q.map((X)=>X.id));return $.filter((X)=>Y.has(X))}async linkedTaskIds($,Z){return(await this.db.selectFrom("task_board_item_threads").select("task_board_item_id as taskId").where("thread_id","=",$).where("organization_id","=",Z).execute()).map((Y)=>Y.taskId)}async linkPr($){let{owner:Z,name:Q}=h5($.repo),Y=await this.db.selectFrom("repositories").select("id").where("organization_id","=",$.organizationId).where("host","=",$.repo.host).where(oG`lower(path)`,"=",$.repo.path.toLowerCase()).executeTakeFirst();await this.db.insertInto("task_board_item_prs").values({task_board_item_id:$.taskBoardItemId,organization_id:$.organizationId,url:$.url,pr_number:$.prNumber,repo_owner:Z,repo_name:Q,connection_id:$.connectionId??null,repository_id:Y?.id??null}).onConflict((X)=>X.columns(["task_board_item_id","url"]).doNothing()).execute()}async findPrLinks($){return await this.db.selectFrom("task_board_item_prs").select(["task_board_item_id as taskBoardItemId","organization_id as organizationId"]).where("repo_owner","=",$.repoOwner).where("repo_name","=",$.repoName).where("pr_number","=",$.number).execute()}async listPrs($,Z){return(await this.db.selectFrom("task_board_item_prs").select(["url","pr_number as prNumber","repo_owner as repoOwner","repo_name as repoName","connection_id as connectionId","repository_id as repositoryId","created_at as createdAt"]).where("task_board_item_id","=",$).where("organization_id","=",Z).orderBy("created_at","desc").execute()).map((Y)=>({url:Y.url,number:Y.prNumber,repoOwner:Y.repoOwner,repoName:Y.repoName,connectionId:Y.connectionId??null,repositoryId:Y.repositoryId??null,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():Y.createdAt}))}async advanceLinkedTasksToReviewOnThreadFinish($,Z){let Q=[];for(let Y of await this.linkedTaskIds($,Z)){let X=await this.getById(Y,Z);if(!X)continue;if(X.source)continue;let J=(await this.listPrs(Y,Z)).length>0;if(!K91(X,J))continue;if(X.reviewCycleStartedAt)continue;if(J){let W=await this.openReviewCycleIfInProgress(Y,Z);if(!W)continue;Q.push(W);continue}let G=await this.advanceToReviewIfInProgress(Y,Z,X.updatedBy);if(!G)continue;Q.push(G),await this.recordActivity({taskBoardItemId:Y,action:"status_changed",actorId:null,data:{from:X.status,to:"in_review"}}).catch((W)=>console.error("[task-board] in_review activity write failed",W))}return Q}async openReviewCycleIfInProgress($,Z){let Q=await this.db.updateTable("task_board_items").set({review_cycle_started_at:new Date,status:T$.progress}).where("id","=",$).where("organization_id","=",Z).where((X)=>X.or([X("status","=",T$.progress),X.and([X("status","=",T$.review),X("assignee_id","=",j8)])])).where("review_cycle_started_at","is",null).where("dismissed_at","is",null).returningAll().executeTakeFirst();if(!Q)return null;let Y=this.itemFromDbRow(Q);return await this.attachRefs([Y],Z),Y}async closeReviewCycle($,Z){await this.db.updateTable("task_board_items").set({review_cycle_started_at:null}).where("id","=",$).where("organization_id","=",Z).execute()}async advanceToReviewIfInProgress($,Z,Q){let Y=await this.db.updateTable("task_board_items").set({status:"in_review",updated_by:Q,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("status","=","in_progress").where("dismissed_at","is",null).returningAll().executeTakeFirst();if(!Y)return null;let X=this.itemFromDbRow(Y);return await this.attachRefs([X],Z),X}async reopenLinkedTasksOnThreadRun($,Z){let Q=[];for(let Y of await this.linkedTaskIds($,Z)){let X=await this.getById(Y,Z);if(!X||X.status!=="in_review")continue;await this.closeReviewCycle(Y,Z),Q.push(await this.update(Y,Z,{status:"in_progress"},X.updatedBy))}return Q}claimConflictResolution($,Z,Q){return this.claimInReviewSuperAgentSlot($,Z,Q)}async claimInReviewSuperAgentSlot($,Z,Q){let Y=await this.db.updateTable("task_board_items").set({status:T$.progress,review_cycle_started_at:null,updated_by:Q,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("status","=",T$.review).where("assignee_id","=",j8).returningAll().executeTakeFirst();if(!Y)return null;let X=this.itemFromDbRow(Y);return await this.attachRefs([X],Z),X}async claimUnassignedForSuperAgent($,Z,Q,Y,X){if(X===null)return null;let J=await this.db.updateTable("task_board_items").set({assignee_id:j8,assigned_by:Q,updated_by:Y,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("status","=",X).where("assignee_id","is",null).returningAll().executeTakeFirst();if(!J)return null;let G=this.itemFromDbRow(J);return await this.attachRefs([G],Z),G}async advanceToProgressOnPrOpen($,Z,Q,Y,X){let J=await this.db.updateTable("task_board_items").set({status:Y,assignee_id:oG`coalesce(assignee_id, ${j8})`,assigned_by:oG`case when assignee_id is null then ${X} else assigned_by end`,...eI$.has(Y)?{}:{review_cycle_started_at:null},updated_by:X,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("status","=",Q).returningAll().executeTakeFirst();if(!J)return null;let G=this.itemFromDbRow(J);return await this.attachRefs([G],Z),G}async unassignSuperAgent($,Z,Q){let Y=await this.db.updateTable("task_board_items").set({assignee_id:null,assigned_by:null,updated_by:Q,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("assignee_id","=",j8).returningAll().executeTakeFirst();if(!Y)return null;let X=this.itemFromDbRow(Y);return await this.attachRefs([X],Z),X}async attachRefs($,Z){if($.length===0)return;await this.inTransaction((Q)=>Promise.all([this.attachThreads(Q,$,Z),this.attachTags(Q,$),this.attachReviewVerdicts(Q,$)]))}async attachThreads($,Z,Q){let Y=Z.map((G)=>G.id),X=await $.selectFrom("task_board_item_threads as link").innerJoin("threads as t","t.id","link.thread_id").leftJoinLateral((G)=>G.selectFrom("thread_message_parts as p").select("p.payload as payload").whereRef("p.thread_id","=","link.thread_id").where("p.role","=","assistant").where("p.kind","=","text").orderBy("p.created_at","desc").limit(1).as("lastmsg"),(G)=>G.onTrue()).leftJoinLateral((G)=>G.selectFrom("thread_message_parts as up").select((W)=>[W.fn.sum(oG`coalesce((up.metadata->'usage'->'providerMetadata'->'openrouter'->'usage'->>'cost')::numeric, 0)`).as("usd"),oG`
1575
+ order by t.updated_at desc, t.id desc limit 1)`;return(await this.db.selectFrom("task_board_items as i").select(["i.id as id","i.organization_id as organizationId",Q("updated_at").as("finishedAt")]).where("i.status","=",T$.progress).where("i.assignee_id","=",j8).where("i.review_cycle_started_at","is",null).where("i.dismissed_at","is",null).where("i.retry_at","is",null).where("i.source","is",null).where((X)=>X.or([X("i.last_swept_at","is",null),X("i.last_swept_at","<",Z)])).where((X)=>X.not(X.exists(X.selectFrom("task_board_item_prs as p").select("p.task_board_item_id").whereRef("p.task_board_item_id","=","i.id")))).where(Q("status"),"=","completed").where((X)=>X.not(X.exists(X.selectFrom("task_board_item_threads as l2").innerJoin("threads as t2","t2.id","l2.thread_id").select("t2.id").whereRef("l2.task_board_item_id","=","i.id").where("t2.status","in",["in_progress","requires_action"])))).orderBy("i.updated_at","asc").limit($).execute()).map((X)=>({id:X.id,organizationId:X.organizationId,finishedAt:new Date(X.finishedAt)}))}async listItemsDueForRetry($,Z){return await this.db.selectFrom("task_board_items").select(["id","organization_id as organizationId","retry_attempts as attempts"]).where("retry_at","is not",null).where("retry_at","<=",Z).where("status","=","in_progress").where("dismissed_at","is",null).orderBy("retry_at","asc").limit($).execute()}async claimDueRetry($,Z,Q){return(await this.db.updateTable("task_board_items").set({retry_at:null}).where("id","=",$).where("organization_id","=",Z).where("retry_at","is not",null).where("retry_at","<=",Q).returning("id").execute()).length>0}async clearRunRetry($,Z){await this.db.updateTable("task_board_items").set({retry_at:null,retry_attempts:0}).where("id","=",$).where("organization_id","=",Z).execute()}async clearSweepBudget($,Z){await this.db.updateTable("task_board_items").set({last_swept_at:null}).where("id","=",$).where("organization_id","=",Z).execute()}async linkedThreadIds($,Z){return(await this.db.selectFrom("task_board_item_threads").select("thread_id as threadId").where("task_board_item_id","=",$).where("organization_id","=",Z).execute()).map((Y)=>Y.threadId)}async boardManagedIds($,Z){if($.length===0)return[];let Q=await this.db.selectFrom("task_board_items").select("id").where("id","in",[...$]).where("organization_id","=",Z).where("source","is",null).execute(),Y=new Set(Q.map((X)=>X.id));return $.filter((X)=>Y.has(X))}async linkedTaskIds($,Z){return(await this.db.selectFrom("task_board_item_threads").select("task_board_item_id as taskId").where("thread_id","=",$).where("organization_id","=",Z).execute()).map((Y)=>Y.taskId)}async linkPr($){let{owner:Z,name:Q}=h5($.repo),Y=await this.db.selectFrom("repositories").select("id").where("organization_id","=",$.organizationId).where("host","=",$.repo.host).where(oG`lower(path)`,"=",$.repo.path.toLowerCase()).executeTakeFirst();await this.db.insertInto("task_board_item_prs").values({task_board_item_id:$.taskBoardItemId,organization_id:$.organizationId,url:$.url,pr_number:$.prNumber,repo_owner:Z,repo_name:Q,connection_id:$.connectionId??null,repository_id:Y?.id??null}).onConflict((X)=>X.columns(["task_board_item_id","url"]).doNothing()).execute()}async findPrLinks($){return await this.db.selectFrom("task_board_item_prs").select(["task_board_item_id as taskBoardItemId","organization_id as organizationId"]).where("repo_owner","=",$.repoOwner).where("repo_name","=",$.repoName).where("pr_number","=",$.number).execute()}async listPrs($,Z){return(await this.db.selectFrom("task_board_item_prs").select(["url","pr_number as prNumber","repo_owner as repoOwner","repo_name as repoName","connection_id as connectionId","repository_id as repositoryId","created_at as createdAt"]).where("task_board_item_id","=",$).where("organization_id","=",Z).orderBy("created_at","desc").execute()).map((Y)=>({url:Y.url,number:Y.prNumber,repoOwner:Y.repoOwner,repoName:Y.repoName,connectionId:Y.connectionId??null,repositoryId:Y.repositoryId??null,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():Y.createdAt}))}async advanceLinkedTasksToReviewOnThreadFinish($,Z){let Q=[];for(let Y of await this.linkedTaskIds($,Z)){let X=await this.getById(Y,Z);if(!X)continue;if(X.source)continue;let J=(await this.listPrs(Y,Z)).length>0;if(!K91(X,J))continue;if(X.reviewCycleStartedAt)continue;if(J){let W=await this.openReviewCycleIfInProgress(Y,Z);if(!W)continue;Q.push(W);continue}let G=await this.advanceToReviewIfInProgress(Y,Z,X.updatedBy);if(!G)continue;Q.push(G),await this.recordActivity({taskBoardItemId:Y,action:"status_changed",actorId:null,data:{from:X.status,to:"in_review"}}).catch((W)=>console.error("[task-board] in_review activity write failed",W))}return Q}async openReviewCycleIfInProgress($,Z){let Q=await this.db.updateTable("task_board_items").set({review_cycle_started_at:new Date,status:T$.progress}).where("id","=",$).where("organization_id","=",Z).where((X)=>X.or([X("status","=",T$.progress),X.and([X("status","=",T$.review),X("assignee_id","=",j8)])])).where("review_cycle_started_at","is",null).where("dismissed_at","is",null).returningAll().executeTakeFirst();if(!Q)return null;let Y=this.itemFromDbRow(Q);return await this.attachRefs([Y],Z),Y}async closeReviewCycle($,Z){await this.db.updateTable("task_board_items").set({review_cycle_started_at:null}).where("id","=",$).where("organization_id","=",Z).execute()}async advanceToReviewIfInProgress($,Z,Q){let Y=await this.db.updateTable("task_board_items").set({status:"in_review",updated_by:Q,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("status","=","in_progress").where("dismissed_at","is",null).returningAll().executeTakeFirst();if(!Y)return null;let X=this.itemFromDbRow(Y);return await this.attachRefs([X],Z),X}async reopenLinkedTasksOnThreadRun($,Z){let Q=[];for(let Y of await this.linkedTaskIds($,Z)){let X=await this.getById(Y,Z);if(!X||X.status!=="in_review")continue;await this.closeReviewCycle(Y,Z),Q.push(await this.update(Y,Z,{status:"in_progress"},X.updatedBy))}return Q}claimConflictResolution($,Z,Q){return this.claimInReviewSuperAgentSlot($,Z,Q)}async claimInReviewSuperAgentSlot($,Z,Q){let Y=await this.db.updateTable("task_board_items").set({status:T$.progress,review_cycle_started_at:null,updated_by:Q,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("status","=",T$.review).where("assignee_id","=",j8).returningAll().executeTakeFirst();if(!Y)return null;let X=this.itemFromDbRow(Y);return await this.attachRefs([X],Z),X}async claimUnassignedForSuperAgent($,Z,Q,Y,X){if(X===null)return null;let J=await this.db.updateTable("task_board_items").set({assignee_id:j8,assigned_by:Q,updated_by:Y,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("status","=",X).where("assignee_id","is",null).returningAll().executeTakeFirst();if(!J)return null;let G=this.itemFromDbRow(J);return await this.attachRefs([G],Z),G}async advanceToProgressOnPrOpen($,Z,Q,Y,X){let J=await this.db.updateTable("task_board_items").set({status:Y,assignee_id:oG`coalesce(assignee_id, ${j8})`,assigned_by:oG`case when assignee_id is null then ${X} else assigned_by end`,...eI$.has(Y)?{}:{review_cycle_started_at:null},updated_by:X,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("status","=",Q).returningAll().executeTakeFirst();if(!J)return null;let G=this.itemFromDbRow(J);return await this.attachRefs([G],Z),G}async unassignSuperAgent($,Z,Q){let Y=await this.db.updateTable("task_board_items").set({assignee_id:null,assigned_by:null,updated_by:Q,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("assignee_id","=",j8).returningAll().executeTakeFirst();if(!Y)return null;let X=this.itemFromDbRow(Y);return await this.attachRefs([X],Z),X}async attachRefs($,Z){if($.length===0)return;await this.inTransaction((Q)=>Promise.all([this.attachThreads(Q,$,Z),this.attachTags(Q,$),this.attachReviewVerdicts(Q,$)]))}async attachThreads($,Z,Q){let Y=Z.map((G)=>G.id),X=await $.selectFrom("task_board_item_threads as link").innerJoin("threads as t","t.id","link.thread_id").leftJoinLateral((G)=>G.selectFrom("thread_message_parts as p").select("p.payload as payload").whereRef("p.thread_id","=","link.thread_id").where("p.role","=","assistant").where("p.kind","=","text").orderBy("p.created_at","desc").limit(1).as("lastmsg"),(G)=>G.onTrue()).leftJoinLateral((G)=>G.selectFrom("thread_message_parts as up").select((W)=>[W.fn.sum(oG`coalesce((up.metadata->'usage'->'providerMetadata'->'openrouter'->'usage'->>'cost')::numeric, 0)`).as("usd"),oG`
1576
1576
  case
1577
1577
  when count(distinct up.metadata->'models'->'thinking'->>'provider') = 1
1578
1578
  then max(up.metadata->'models'->'thinking'->>'provider')
@@ -3490,7 +3490,7 @@ ${X}`,$.data)}function XV0($){let Z=$;if(!Z||Z.isError!==!0||!Array.isArray(Z.co
3490
3490
  ${Z}`}:Y)}}var Ya$=D(()=>{s9()});async function LR6($,Z,Q){if(!$)return!1;let Y=await $.get("tools",Z).catch(()=>null);if(!Y)return!1;for(let X of Y)if(typeof X==="object"&&X!==null&&X.name===Q)return X.annotations?.readOnlyHint===!0;return!1}function xW1(){return{kind:"org"}}function zw($,Z,Q,Y){let X=new g7({name:`lazy-${$.id}`,version:"1.0.0"},{capabilities:{},jsonSchemaValidator:zZ}),J=$.metadata?.isDevConnection===!0,G=null,W=!1;function K(){if(W)return Promise.reject(Error(`MCP client for connection ${$.id} is closed`));if(!G){cY0($.id);let L=xG($,Z,Q).then((w)=>{mY0($.id);let j=w.onclose;return w.onclose=()=>{if(G===L)G=null;j?.()},w}).catch((w)=>{throw G=null,dY0($.id),w});G=L}return G}let H=(L,w)=>L!==void 0||w!==void 0,F=(L,w,j,E)=>{return async(z,T)=>{if($.connection_type==="VIRTUAL"||J||!Y||H(z,T)){let A=await K();return w(A,z,T)}let P=await Ew(L,$.id,async()=>{let A=await K(),q=await w(A);return j(q)},Y,(A)=>Z.pendingRevalidations.push(A),jw);return E(P??[])}};X.listTools=F("tools",(L,w,j)=>L.listTools(w,j),(L)=>L.tools,(L)=>({tools:L})),X.listResources=F("resources",(L,w,j)=>L.listResources(w,j),(L)=>L.resources,(L)=>({resources:L})),X.listPrompts=F("prompts",(L,w,j)=>L.listPrompts(w,j),(L)=>L.prompts,(L)=>({prompts:L}));let U=y30(),N=$.connection_type!=="VIRTUAL"&&!J,B=async(L,w,j)=>{let E=L?.name,z=U&&N&&typeof E==="string"&&await LR6(Y,$.id,E);if(U&&z&&!w)return await U.fetch({type:"tools/call",connectionId:$.id,scope:xW1(),params:{name:E,arguments:L?.arguments},fetchLive:async()=>{return(await K()).callTool(L,w,j)},shouldCache:(A)=>A?.isError!==!0,onRevalidation:(A)=>Z.pendingRevalidations.push(A)});let T=await K();if(U&&N&&!z)try{return await T.callTool(L,w,j)}finally{$c($.id)}return T.callTool(L,w,j)};X.callTool=async(L,w,j)=>{let E=L?.name,z=typeof E==="string"?E:null,T=L?.arguments,P=async()=>{return(await Y.get("tools",$.id).catch(()=>null))?.find((y)=>typeof y==="object"&&y!==null&&y.name===z)?.inputSchema},A=async(V)=>{let y=$a$(V,T);if(!y)return null;return await B({...L,arguments:y},w,j).catch(()=>null)},q;try{q=await B(L,w,j)}catch(V){if(!z||!Y||!(V instanceof M1)||V.code!==_1.InvalidParams)throw V;let y=await P(),g=await A(y);if(g&&!XV0(g))return g;throw Za$(V,z,y,T)}if(!z||!Y||!XV0(q))return q;let x=await P(),_=await A(x);if(_&&!XV0(_))return _;return Qa$(q,bW1(z,x,T))},X.getPrompt=async(L,w)=>{if(!U||!N)return(await K()).getPrompt(L,w);return await U.fetch({type:"prompts/get",connectionId:$.id,scope:xW1(),params:L,fetchLive:async()=>{return(await K()).getPrompt(L,w)},onRevalidation:(E)=>Z.pendingRevalidations.push(E)})},X.readResource=async(L,w)=>{if(!U||!N){if(process.env?.MCP_CACHE_DEBUG)console.log("[mcp-read-cache] BYPASS (VIRTUAL)",$.id,"resources/read");return(await K()).readResource(L,w)}return await U.fetch({type:"resources/read",connectionId:$.id,scope:xW1(),params:L,fetchLive:async()=>{return(await K()).readResource(L,w)},onRevalidation:(E)=>Z.pendingRevalidations.push(E)})},X.listResourceTemplates=async(L,w)=>{return(await K()).listResourceTemplates(L,w)};let O=X.close.bind(X);return X.close=async()=>{if(W=!0,G){let L=await G.catch(()=>null);if(L)await L.close().catch(()=>{})}await O()},X}var As=D(()=>{nN();sX();s9();Tn0();Ls();gs();DJ();fs();Ya$()});function wQ1($){return{client:{callTool:$.callTool.bind($),listTools:$.listTools.bind($)}}}async function wR6($,Z,{superUser:Q}){if(!Q&&!Z.organization?.id)throw Error("Organization context is required");let Y=typeof $==="string"?await Z.storage.connections.findById($,Z.organization?.id):$;if(!Y)throw Error("Connection not found");if(Z.organization&&Y.organization_id!==Z.organization.id)throw Error("Connection does not belong to the active organization");if(!Z.organization){let H=await Z.db.selectFrom("organization").select(["id","slug","name"]).where("id","=",Y.organization_id).executeTakeFirst();Z.organization=H?{id:H.id,slug:H.slug,name:H.name}:{id:Y.organization_id}}if(Y.status!=="active")throw Error(`Connection inactive: ${Y.status}`);let X=zw(Y,Z,Q,GZ()??void 0),J=jP(X,{name:"mcp-cms-proxy-client",version:"1.0.0"},{capabilities:{tools:{},resources:{},prompts:{}},toolCallTimeoutMs:Xh}),{client:G,server:W}=An0();await J.connect(W);let K=new g7({name:"mcp-cms-proxy-client",version:"1.0.0"},{jsonSchemaValidator:zZ});return await K.connect(G),K}async function Xa$($,Z){return wR6($,Z,{superUser:!1})}var jQ1=D(()=>{As();DJ();sX();nN()});function fW1($,Z){let Q=$["*"];if(Q?.includes("*"))return!0;for(let[Y,X]of Object.entries(Z)){let J=$[Y];if(J?.includes("*"))continue;let G=new Set([...J??[],...Q??[]]);for(let W of X)if(!G.has(W))return!1}return!0}import{sql as yW1}from"kysely";function JV0($){if($==null)return null;return typeof $==="string"?$:$.toISOString()}function GV0($){return`msg_async_stub_${$}`}async function gW1($,Z){await $.deleteFrom("thread_messages").where("id","=",GV0(Z)).execute(),await $.deleteFrom("thread_message_parts").where("message_id","=",GV0(Z)).execute()}function jR6($){if($==null)return null;if(typeof $!=="string")return $;try{return JSON.parse($)}catch{return null}}function hW1($){return{id:$.id,interactionId:$.interaction_id??null,toolCallId:$.tool_call_id,organizationId:$.organization_id,threadId:$.thread_id,messageId:$.message_id??null,provider:$.provider,modelId:$.model_id,query:$.query,status:$.status,attempts:$.attempts??0,lastPolledAt:JV0($.last_polled_at),lastError:$.last_error??null,inputTokens:$.input_tokens??null,outputTokens:$.output_tokens??null,citations:jR6($.citations),resultUri:$.result_uri??null,resultPreview:$.result_preview??null,resultContent:$.result_content??null,createdAt:JV0($.created_at)??"",updatedAt:JV0($.updated_at)??"",completedAt:JV0($.completed_at)}}class uW1{inner;organizationId;constructor($,Z){this.inner=$;this.organizationId=Z}requireOrg(){if(!this.organizationId)throw Error("OrgScopedAsyncResearchJobStorage: requires an authenticated organization");return this.organizationId}setOrganizationId($){this.organizationId=$}upsertPending($){return this.inner.upsertPending({organizationId:this.requireOrg(),...$})}findByToolCall($){return this.inner.findByToolCall(this.requireOrg(),$)}markPolling($,Z,Q){return this.inner.markPolling(this.requireOrg(),$,Z,Q)}recordPoll($,Z){return this.inner.recordPoll(this.requireOrg(),$,Z)}markCompleted($,Z){return this.inner.markCompleted(this.requireOrg(),$,Z)}markFailed($,Z){return this.inner.markFailed(this.requireOrg(),$,Z)}markCancelled($,Z){return this.inner.markCancelled(this.requireOrg(),$,Z)}}class X80{db;constructor($){this.db=$}async upsertPending($){let Z=new Date().toISOString(),Q=await this.db.insertInto("async_research_jobs").values({organization_id:$.organizationId,thread_id:$.threadId,tool_call_id:$.toolCallId,message_id:$.messageId??null,provider:$.provider,model_id:$.modelId,query:$.query,status:"pending",attempts:0,updated_at:Z}).onConflict((X)=>X.columns(["organization_id","tool_call_id"]).doNothing()).returningAll().executeTakeFirst();if(Q)return hW1(Q);let Y=await this.db.selectFrom("async_research_jobs").selectAll().where("organization_id","=",$.organizationId).where("tool_call_id","=",$.toolCallId).executeTakeFirstOrThrow();return hW1(Y)}async findByToolCall($,Z){let Q=await this.db.selectFrom("async_research_jobs").selectAll().where("organization_id","=",$).where("tool_call_id","=",Z).executeTakeFirst();return Q?hW1(Q):null}async markPolling($,Z,Q,Y){let X=new Date().toISOString();await this.db.transaction().execute(async(J)=>{if(await J.updateTable("async_research_jobs").set({status:"polling",interaction_id:Q,last_polled_at:X,updated_at:X}).where("organization_id","=",$).where("tool_call_id","=",Z).execute(),(await J.selectFrom("threads").select("message_storage_version").where("id","=",Y.threadId).where("organization_id","=",$).executeTakeFirst())?.message_storage_version!==2)return;let W=GV0(Z);await J.insertInto("thread_message_parts").values([{id:`${Y.threadId}:${W}:0`,seq:0,org_id:$,thread_id:Y.threadId,run_id:Y.threadId,message_id:W,role:"assistant",kind:"tool_call",payload:JSON.stringify({type:`tool-${Y.toolName}`,toolCallId:Z,state:"input-available",input:{query:Y.query}}),payload_ref:null,metadata:null,created_at:X},{id:`${Y.threadId}:${W}:finish`,seq:1,org_id:$,thread_id:Y.threadId,run_id:Y.threadId,message_id:W,role:"assistant",kind:"finish",payload:JSON.stringify({}),payload_ref:null,metadata:null,created_at:X}]).onConflict((K)=>K.column("id").doNothing()).execute()})}async recordPoll($,Z,Q){let Y=new Date().toISOString();await this.db.updateTable("async_research_jobs").set({attempts:yW1`attempts + 1`,last_polled_at:Y,...Q!==void 0?{last_error:Q}:{},updated_at:Y}).where("organization_id","=",$).where("tool_call_id","=",Z).execute()}async markCompleted($,Z,Q){let Y=new Date().toISOString();await this.db.transaction().execute(async(X)=>{await X.updateTable("async_research_jobs").set({status:"completed",input_tokens:Q.inputTokens,output_tokens:Q.outputTokens,citations:JSON.stringify(Q.citations),result_uri:Q.resultUri,result_preview:Q.resultPreview,result_content:Q.resultContent,completed_at:Y,updated_at:Y}).where("organization_id","=",$).where("tool_call_id","=",Z).execute(),await gW1(X,Z)})}async markFailed($,Z,Q){let Y=new Date().toISOString();await this.db.transaction().execute(async(X)=>{await X.updateTable("async_research_jobs").set({status:"failed",last_error:Q,completed_at:Y,updated_at:Y}).where("organization_id","=",$).where("tool_call_id","=",Z).execute(),await gW1(X,Z)})}async markCancelled($,Z,Q){let Y=new Date().toISOString();await this.db.transaction().execute(async(X)=>{await X.updateTable("async_research_jobs").set({status:"cancelled",last_error:Q??null,completed_at:Y,updated_at:Y}).where("organization_id","=",$).where("tool_call_id","=",Z).execute(),await gW1(X,Z)})}async sweepAbandoned($){let Z=new Date(Date.now()-$).toISOString(),Q=new Date().toISOString();return await this.db.transaction().execute(async(Y)=>{let X=await Y.updateTable("async_research_jobs").set({status:"abandoned",completed_at:Q,updated_at:Q,last_error:yW1`COALESCE(last_error, '') || ' [abandoned by sweeper]'`}).where("status","in",["pending","polling"]).where(yW1`COALESCE(last_polled_at, created_at) < ${Z}::timestamptz`).returning(["tool_call_id"]).execute();if(X.length===0)return 0;let J=X.map((G)=>GV0(G.tool_call_id));return await Y.deleteFrom("thread_messages").where("id","in",J).execute(),await Y.deleteFrom("thread_message_parts").where("message_id","in",J).execute(),X.length})}}var lW1=()=>{};class cW1{db;vault;constructor($,Z){this.db=$;this.vault=Z}async get($){let Z=await this.db.selectFrom("subsidized_gateway_keys").select("encrypted_key").where("organization_id","=",$).executeTakeFirst();if(!Z)return null;return await this.vault.decrypt(Z.encrypted_key)}async put($,Z){let Q=await this.vault.encrypt(Z);await this.db.insertInto("subsidized_gateway_keys").values({organization_id:$,encrypted_key:Q}).onConflict((Y)=>Y.column("organization_id").doUpdateSet({encrypted_key:Q})).execute()}}import{sql as ER6}from"kysely";function Ja$($){return $ instanceof Date?$.toISOString():String($)}class mW1{db;vault;constructor($,Z){this.db=$;this.vault=Z}rowToInfo($){return{id:$.id,organizationId:$.organization_id,name:$.name,description:$.description,bucket:$.bucket,region:$.region,endpoint:$.endpoint,forcePathStyle:$.force_path_style,prefix:$.prefix,publicUrlBase:$.public_url_base,credentialType:$.credential_type??"static",refreshUrl:$.refresh_url,siteSlug:$.site_slug,createdBy:$.created_by,createdAt:Ja$($.created_at),updatedBy:$.updated_by,updatedAt:Ja$($.updated_at)}}async create($){let Z=s8("fcfg"),Q=await this.vault.encrypt(JSON.stringify($.credentials)),Y=new Date,X=await this.db.insertInto("org_file_configs").values({id:Z,organization_id:$.organizationId,name:$.name,description:$.description??null,bucket:$.bucket,region:$.region,endpoint:$.endpoint??null,force_path_style:$.forcePathStyle??!1,prefix:$.prefix??null,public_url_base:$.publicUrlBase??null,credential_type:$.credentials.type,refresh_url:$.refreshUrl??null,site_slug:$.siteSlug??null,encrypted_credentials:Q,created_by:$.createdBy,created_at:Y,updated_by:$.createdBy,updated_at:Y}).returning(WV0).executeTakeFirstOrThrow();return this.rowToInfo(X)}async update($){if(!await this.db.selectFrom("org_file_configs").where("id","=",$.id).where("organization_id","=",$.organizationId).select(["id"]).executeTakeFirst())throw new id($.id);let Q={updated_by:$.updatedBy,updated_at:new Date};if($.name!==void 0)Q.name=$.name;if($.description!==void 0)Q.description=$.description;if($.bucket!==void 0)Q.bucket=$.bucket;if($.region!==void 0)Q.region=$.region;if($.endpoint!==void 0)Q.endpoint=$.endpoint;if($.forcePathStyle!==void 0)Q.force_path_style=$.forcePathStyle;if($.prefix!==void 0)Q.prefix=$.prefix;if($.publicUrlBase!==void 0)Q.public_url_base=$.publicUrlBase;if($.refreshUrl!==void 0)Q.refresh_url=$.refreshUrl;if($.siteSlug!==void 0)Q.site_slug=$.siteSlug;if($.credentials!==void 0)Q.credential_type=$.credentials.type,Q.encrypted_credentials=await this.vault.encrypt(JSON.stringify($.credentials));let Y=await this.db.updateTable("org_file_configs").set(Q).where("id","=",$.id).where("organization_id","=",$.organizationId).returning(WV0).executeTakeFirstOrThrow();return this.rowToInfo(Y)}async delete($,Z){if(!await this.db.selectFrom("org_file_configs").where("id","=",$).where("organization_id","=",Z).select(["id"]).executeTakeFirst())throw new id($);await this.db.deleteFrom("org_file_configs").where("id","=",$).where("organization_id","=",Z).execute()}async list($){return(await this.db.selectFrom("org_file_configs").where("organization_id","=",$).select(WV0).orderBy("created_at","desc").execute()).map((Q)=>this.rowToInfo(Q))}async findById($,Z){let Q=await this.db.selectFrom("org_file_configs").where("id","=",$).where("organization_id","=",Z).select(WV0).executeTakeFirst();if(!Q)throw new id($);return this.rowToInfo(Q)}async resolveById($,Z){let Q=await this.db.selectFrom("org_file_configs").where("id","=",$).where("organization_id","=",Z).selectAll().executeTakeFirst();if(!Q)throw new id($);return{info:this.rowToInfo(Q),credentials:await this.decodeCredentials(Q)}}async resolveByName($){let Z=await this.db.selectFrom("org_file_configs").where("organization_id","=",$.organizationId).where(ER6`lower(name) = lower(${$.name})`).selectAll().executeTakeFirst();if(!Z)throw new id($.name);return{info:this.rowToInfo(Z),credentials:await this.decodeCredentials(Z)}}async decodeCredentials($){if($.credential_type==="managed")return{type:"managed"};let Z=await this.vault.decrypt($.encrypted_credentials),Q=JSON.parse(Z);if(($.credential_type??"static")==="sts-session")return{type:"sts-session",apiKey:String(Q.apiKey)};return{type:"static",accessKeyId:String(Q.accessKeyId),secretAccessKey:String(Q.secretAccessKey)}}}var WV0,id;var Ga$=D(()=>{ZY();WV0=["id","organization_id","name","description","bucket","region","endpoint","force_path_style","prefix","public_url_base","credential_type","refresh_url","site_slug","created_by","created_at","updated_by","updated_at"];id=class id extends Error{constructor($){super(`File config ${$} not found`);this.name="OrgFileConfigNotFoundError"}}});function Wa$($){return $ instanceof Date?$.toISOString():String($)}function J80($){return{slug:$.slug,organizationId:$.organization_id,source:$.source,createdBy:$.created_by,createdAt:Wa$($.created_at),updatedBy:$.updated_by,updatedAt:Wa$($.updated_at)}}class pf{db;constructor($){this.db=$}async claimSite($){if(!dZ($.slug))throw Error(`Invalid site slug "${$.slug}" \u2014 must be 1-60 chars of lowercase letters, digits, or hyphens, starting with a letter or digit`);let Z=new Date,Q=await this.db.insertInto("org_sites").values({slug:$.slug,organization_id:$.organizationId,source:$.source??"deco-import",created_by:$.by,created_at:Z,updated_by:$.by,updated_at:Z}).onConflict((J)=>J.column("slug").doNothing()).returningAll().executeTakeFirst();if(Q)return J80(Q);let Y=await this.getBySlug($.slug);if(!Y)throw new G80($.slug,"unknown");if(Y.organizationId!==$.organizationId)throw new G80($.slug,Y.organizationId);let X=await this.db.updateTable("org_sites").set({source:$.source??Y.source,updated_by:$.by,updated_at:Z}).where("slug","=",$.slug).where("organization_id","=",$.organizationId).returningAll().executeTakeFirstOrThrow();return J80(X)}async reassignSite($){if(!dZ($.slug))throw Error(`Invalid site slug "${$.slug}" \u2014 must be 1-60 chars of lowercase letters, digits, or hyphens, starting with a letter or digit`);let Z=new Date,Q=await this.db.insertInto("org_sites").values({slug:$.slug,organization_id:$.organizationId,source:$.source??"manual",created_by:$.by,created_at:Z,updated_by:$.by,updated_at:Z}).onConflict((Y)=>Y.column("slug").doUpdateSet({organization_id:$.organizationId,source:$.source??"manual",updated_by:$.by,updated_at:Z})).returningAll().executeTakeFirstOrThrow();return J80(Q)}async releaseSite($,Z){let Q=await this.db.deleteFrom("org_sites").where("slug","=",$).where("organization_id","=",Z).executeTakeFirst();return Number(Q.numDeletedRows??0n)>0}async getBySlug($){let Z=await this.db.selectFrom("org_sites").selectAll().where("slug","=",$).executeTakeFirst();return Z?J80(Z):null}async listByOrg($){return(await this.db.selectFrom("org_sites").selectAll().where("organization_id","=",$).orderBy("slug","asc").execute()).map((Q)=>J80(Q))}async isOwnedBy($,Z){return!!await this.db.selectFrom("org_sites").select("slug").where("slug","=",$).where("organization_id","=",Z).executeTakeFirst()}}var G80;var dW1=D(()=>{WW();G80=class G80 extends Error{slug;ownerOrganizationId;constructor($,Z){super(`Site slug "${$}" is already owned by another organization`);this.slug=$;this.ownerOrganizationId=Z;this.name="OrgSiteConflictError"}}});function iW1($){return $?`${$.id}:${$.updatedAt}`:null}class pW1{db;constructor($){this.db=$}async create($,Z){return await this.db.deleteFrom("github_connect_flows").where("expires_at","<=",new Date).execute(),this.db.transaction().execute(async(Q)=>{await Q.selectFrom("organization").select("id").where("id","=",$.organizationId).forUpdate().executeTakeFirstOrThrow(),await Q.deleteFrom("github_connect_flows").where("organization_id","=",$.organizationId).where("user_id","=",$.userId).execute();let Y=crypto.randomUUID();return await Q.insertInto("github_connect_flows").values({id:Y,organization_id:$.organizationId,user_id:$.userId,encrypted_access_token:Z,expires_at:new Date(Date.now()+600000)}).execute(),Y})}async get($,Z){return this.db.selectFrom("github_connect_flows").selectAll().where("id","=",$).where("organization_id","=",Z.organizationId).where("user_id","=",Z.userId).where("expires_at",">",new Date).executeTakeFirst()}async refresh($,Z,Q){return(await this.db.updateTable("github_connect_flows").set({encrypted_access_token:Q}).where("id","=",$).where("organization_id","=",Z.organizationId).where("user_id","=",Z.userId).where("expires_at",">",new Date).executeTakeFirst()).numUpdatedRows>0n}async cancel($,Z){await this.db.deleteFrom("github_connect_flows").where("id","=",$).where("organization_id","=",Z.organizationId).where("user_id","=",Z.userId).execute()}async connect($,Z,Q,Y){return this.db.transaction().execute(async(X)=>{if(await X.selectFrom("organization").select("id").where("id","=",Z.organizationId).forUpdate().executeTakeFirstOrThrow(),!await X.deleteFrom("github_connect_flows").where("id","=",$).where("organization_id","=",Z.organizationId).where("user_id","=",Z.userId).where("expires_at",">",new Date).returning("id").executeTakeFirst())return null;let G=new vA(X),W=await G.findByExternalId({organizationId:Z.organizationId,host:Q.host,externalAccountId:Q.externalAccountId});if(iW1(W)!==Y)throw new KV0("GitHub repository access changed. Review the selection again.");return G.upsert({...Q,organizationId:Z.organizationId,createdBy:Z.userId})})}}var KV0;var nW1=D(()=>{JW0();KV0=class KV0 extends Error{}});class tW1{db;constructor($){this.db=$}async create($){await this.deleteExpired($.organizationId);let Z=crypto.randomUUID();return await this.db.insertInto("git_provider_oauth_states").values({id:Z,organization_id:$.organizationId,user_id:$.userId,provider:$.provider,host:$.host,return_to:$.returnTo,expires_at:new Date(Date.now()+600000)}).execute(),Z}async consume($){let Z=await this.db.deleteFrom("git_provider_oauth_states").where("id","=",$).returningAll().executeTakeFirst();if(!Z)return null;if((Z.expires_at instanceof Date?Z.expires_at:new Date(Z.expires_at))<new Date)return null;return{organizationId:Z.organization_id,userId:Z.user_id,provider:Z.provider,host:Z.host,returnTo:Z.return_to}}async deleteExpired($){await this.db.deleteFrom("git_provider_oauth_states").where("organization_id","=",$).where("expires_at","<",new Date).execute()}}function Ka$($){return $ instanceof Date?$.toISOString():String($)}class PO{db;vault;constructor($,Z){this.db=$;this.vault=Z}async toEntity($){return{id:$.id,organizationId:$.organization_id,siteUrl:$.site_url,email:$.email,apiToken:await this.vault.decrypt($.api_token),boardId:$.board_id,boardName:$.board_name,webhookSecret:$.webhook_secret,enabled:$.enabled,createdBy:$.created_by,createdAt:Ka$($.created_at),updatedAt:Ka$($.updated_at)}}async getByOrg($){let Z=await this.db.selectFrom("org_jira_integrations").selectAll().where("organization_id","=",$).executeTakeFirst();return Z?this.toEntity(Z):null}async upsert($){let Z=await this.vault.encrypt($.apiToken),Q=await this.db.insertInto("org_jira_integrations").values({organization_id:$.organizationId,site_url:$.siteUrl,email:$.email,api_token:Z,board_id:$.boardId,board_name:$.boardName,enabled:$.enabled,created_by:$.createdBy}).onConflict((Y)=>Y.column("organization_id").doUpdateSet({site_url:$.siteUrl,email:$.email,api_token:Z,board_id:$.boardId,board_name:$.boardName,enabled:$.enabled,updated_at:new Date})).returningAll().executeTakeFirstOrThrow();return this.toEntity(Q)}async getByWebhookSecret($){let Z=await this.db.selectFrom("org_jira_integrations").selectAll().where("webhook_secret","=",$).executeTakeFirst();return Z?this.toEntity(Z):null}async delete($){return(await this.db.deleteFrom("org_jira_integrations").where("organization_id","=",$).executeTakeFirst()).numDeletedRows>0n}async getById($){let Z=await this.db.selectFrom("org_jira_integrations").selectAll().where("id","=",$).executeTakeFirst();return Z?this.toEntity(Z):null}async listEnabledIds(){return(await this.db.selectFrom("org_jira_integrations").select("id").where("enabled","=",!0).orderBy("created_at","asc").execute()).map((Z)=>Z.id)}async getLinkByIssueId($,Z){let Q=await this.db.selectFrom("task_board_item_jira_links").select(["item_id","jira_issue_id","jira_issue_key"]).where("organization_id","=",$).where("jira_issue_id","=",Z).executeTakeFirst();return Q?Fa$(Q):null}async getLinkByItemId($,Z){let Q=await this.db.selectFrom("task_board_item_jira_links").select(["item_id","jira_issue_id","jira_issue_key"]).where("item_id","=",$).where("organization_id","=",Z).executeTakeFirst();return Q?Fa$(Q):null}async createLink($){await this.db.insertInto("task_board_item_jira_links").values({item_id:$.itemId,organization_id:$.organizationId,jira_issue_id:$.jiraIssueId,jira_issue_key:$.jiraIssueKey}).onConflict((Z)=>Z.doNothing()).execute()}async claimTrigger($,Z,Q){return((await this.db.insertInto("jira_trigger_claims").values({organization_id:$,jira_issue_id:Z,changelog_id:Q}).onConflict((X)=>X.doNothing()).executeTakeFirst()).numInsertedOrUpdatedRows??0n)>0n}async listAutomations($){return(await this.db.selectFrom("org_jira_column_automations").select(["jira_status","prompt","continue_pr"]).where("organization_id","=",$).orderBy("jira_status","asc").execute()).map(Ha$)}async getAutomation($,Z){let Q=await this.db.selectFrom("org_jira_column_automations").select(["jira_status","prompt","continue_pr"]).where("organization_id","=",$).where("jira_status","=",Z).executeTakeFirst();return Q?Ha$(Q):null}async upsertAutomation($,Z,Q,Y=!1){return await this.db.insertInto("org_jira_column_automations").values({organization_id:$,jira_status:Z,prompt:Q,continue_pr:Y}).onConflict((X)=>X.columns(["organization_id","jira_status"]).doUpdateSet({prompt:Q,continue_pr:Y,updated_at:new Date})).execute(),{jiraStatus:Z,prompt:Q,continuePr:Y}}async removeAutomation($,Z){return((await this.db.deleteFrom("org_jira_column_automations").where("organization_id","=",$).where("jira_status","=",Z).executeTakeFirst()).numDeletedRows??0n)>0n}}function Ha$($){return{jiraStatus:$.jira_status,prompt:$.prompt,continuePr:$.continue_pr}}function Fa$($){return{itemId:$.item_id,jiraIssueId:$.jira_issue_id,jiraIssueKey:$.jira_issue_key}}class oW1{db;constructor($){this.db=$}async listByOrg($){return(await this.db.selectFrom("task_board_column_automations").select(["column_key","prompt"]).where("organization_id","=",$).orderBy("column_key","asc").execute()).map((Q)=>({columnKey:Q.column_key,prompt:Q.prompt}))}async get($,Z){let Q=await this.db.selectFrom("task_board_column_automations").select(["column_key","prompt"]).where("organization_id","=",$).where("column_key","=",Z).executeTakeFirst();if(!Q)return null;let Y=Q;return{columnKey:Y.column_key,prompt:Y.prompt}}async upsert($,Z,Q){return await this.db.insertInto("task_board_column_automations").values({id:`tbca_${$}_${Z}`,organization_id:$,column_key:Z,prompt:Q}).onConflict((Y)=>Y.columns(["organization_id","column_key"]).doUpdateSet({prompt:Q,updated_at:new Date})).execute(),{columnKey:Z,prompt:Q}}async remove($,Z){return((await this.db.deleteFrom("task_board_column_automations").where("organization_id","=",$).where("column_key","=",Z).executeTakeFirst()).numDeletedRows??0n)>0n}}class rW1{db;constructor($){this.db=$}async listByOrg($){return(await this.db.selectFrom("task_board_prompts").select(["column_key","prompt"]).where("organization_id","=",$).orderBy("column_key","asc").execute()).map((Q)=>({columnKey:Q.column_key,prompt:Q.prompt})).sort((Q,Y)=>Q.columnKey===null?-1:Y.columnKey===null?1:0)}async promptFor($,Z){let Y=(await this.listByOrg($)).filter((X)=>X.columnKey===null||X.columnKey===Z).map((X)=>X.prompt.trim()).filter(Boolean);return Y.length>0?Y.join(`
3491
3491
 
3492
3492
  `):void 0}async upsert($,Z,Q){return await this.db.insertInto("task_board_prompts").values({id:Ua$($,Z),organization_id:$,column_key:Z,prompt:Q}).onConflict((Y)=>Y.column("id").doUpdateSet({prompt:Q,updated_at:new Date})).execute(),{columnKey:Z,prompt:Q}}async remove($,Z){return((await this.db.deleteFrom("task_board_prompts").where("id","=",Ua$($,Z)).where("organization_id","=",$).executeTakeFirst()).numDeletedRows??0n)>0n}}var Ua$=($,Z)=>`tbp_${$}_${Z??""}`;function aW1($){let Z=new Set;for(let Q of $.matchAll(zR6))if(Z.add(Q[2]),Z.size>=50)break;return[...Z]}var zR6;var Na$=D(()=>{zR6=/\[@([^\]]+)\]\(mention:([^)\s]+)\)/g});async function Ba$($){let{db:Z,organizationId:Q,actorId:Y}=$;try{let X=new Set(aW1($.previousBody??"")),G=aW1($.body).filter((H)=>!X.has(H)).filter((H)=>H!==Y);if(G.length===0)return;let K=(await Z.selectFrom("member").select("userId").where("organizationId","=",Q).where("userId","in",G).execute()).map((H)=>H.userId);if(K.length===0)return;await Dm({db:Z,taskBoardItemId:$.taskBoardItemId,type:"mentioned",actorId:Y,alsoSubscribe:K,recipients:K})}catch(X){console.error("[notifications] mention fan-out failed",X)}}var Oa$=D(()=>{Na$();a20()});import{sql as PR6}from"kysely";class sW1{db;constructor($){this.db=$}async listUnread($,Z,Q={}){let Y=Math.min(Q.limit??AR6,TR6),X=Q.cursor?await this.anchorExists(Q.cursor):!1,J=this.db.selectFrom("notifications").select(["id","task_board_item_id","type","data","created_at"]).where("user_id","=",$).where("organization_id","=",Z).where("read_at","is",null).orderBy("created_at","desc").orderBy("id","desc").limit(Y+1);if(X)J=J.where(PR6`(created_at, id) <
3493
- (SELECT created_at, id FROM notifications WHERE id = ${Q.cursor})`);let G=await J.execute(),W=G.slice(0,Y),K=await this.db.selectFrom("notifications").select((F)=>F.fn.countAll().as("count")).where("user_id","=",$).where("organization_id","=",Z).where("read_at","is",null).executeTakeFirst(),H=W[W.length-1];return{nextCursor:G.length>Y&&H?H.id:null,notifications:W.map((F)=>({id:F.id,taskBoardItemId:F.task_board_item_id,type:F.type,data:Om.parse(F.data),createdAt:RR6(F.created_at)})),unreadCount:Number(K?.count??0)}}async anchorExists($){return!!await this.db.selectFrom("notifications").select("id").where("id","=",$).executeTakeFirst()}async markRead($,Z,Q){if(Q&&Q.length===0)return 0;let Y=this.db.updateTable("notifications").set({read_at:new Date}).where("user_id","=",$).where("organization_id","=",Z).where("read_at","is",null);if(Q)Y=Y.where("id","in",Q);let X=await Y.executeTakeFirst();return Number(X.numUpdatedRows??0n)}async setSubscribed($,Z,Q){await this.db.insertInto("notification_subscriptions").values({id:s8("nsub"),user_id:$,task_board_item_id:Z,subscribed:Q}).onConflict((Y)=>Y.columns(["user_id","task_board_item_id"]).doUpdateSet({subscribed:Q,updated_at:new Date})).execute()}async notify($){await Dm({...$,db:this.db})}async notifyMentions($){await Ba$({...$,db:this.db})}async listSubscribers($){return(await this.db.selectFrom("notification_subscriptions").select("user_id").where("task_board_item_id","=",$).where("subscribed","=",!0).execute()).map((Q)=>Q.user_id)}}var AR6=20,TR6=50,RR6=($)=>$ instanceof Date?$.toISOString():$;var Da$=D(()=>{ZY();r20();a20();Oa$()});class eW1{db;constructor($){this.db=$}async create($,Z,Q){await this.deleteExpired(Z);let Y=crypto.randomUUID(),X=new Date(Date.now()+600000);return await this.db.insertInto("oauth_pkce_states").values({id:Y,organization_id:Z,user_id:Q,code_verifier:$,expires_at:X,created_at:new Date}).execute(),Y}async deleteExpired($){await this.db.deleteFrom("oauth_pkce_states").where("organization_id","=",$).where("expires_at","<",new Date).execute()}async consume($,Z,Q){let Y=await this.db.deleteFrom("oauth_pkce_states").where("id","=",$).where("organization_id","=",Z).where("user_id","=",Q).returningAll().executeTakeFirst();if(!Y)throw Error("Invalid or expired OAuth state token");if((Y.expires_at instanceof Date?Y.expires_at:new Date(Y.expires_at))<new Date)throw Error("OAuth state token has expired");return Y.code_verifier}}class $K1{db;vault;constructor($,Z){this.db=$;this.vault=Z}async upsert($){let Z=await this.vault.encrypt($.accessToken),Q=$.expiresAt??null,Y=new Date;return await this.db.insertInto("claude_subscriptions").values({user_id:$.userId,encrypted_access_token:Z,expires_at:Q,created_at:Y}).onConflict((X)=>X.column("user_id").doUpdateSet({encrypted_access_token:Z,expires_at:Q,created_at:Y})).execute(),{linkedAt:Y.toISOString(),expiresAt:Q?.toISOString()??null}}async find($){let Z=await this.db.selectFrom("claude_subscriptions").select(["created_at","expires_at"]).where("user_id","=",$).executeTakeFirst();if(!Z)return null;return{linkedAt:new Date(Z.created_at).toISOString(),expiresAt:Z.expires_at?new Date(Z.expires_at).toISOString():null}}async findLiveToken($){let Z=await this.db.selectFrom("claude_subscriptions").select(["encrypted_access_token","expires_at"]).where("user_id","=",$).executeTakeFirst();if(!Z)return null;if(Z.expires_at&&new Date(Z.expires_at).getTime()<=Date.now())return null;return this.vault.decrypt(Z.encrypted_access_token)}async delete($){await this.db.deleteFrom("claude_subscriptions").where("user_id","=",$).execute()}}function qR6($){return $.includes("/")?$.split("/").slice(1).join("/"):$}function MR6($){let Z=$.supported_parameters?.includes("tools")??!1,Q=$.supported_parameters?.includes("reasoning")??!1;return{providerId:"openrouter",modelId:qR6($.id),title:$.name,description:$.description||null,logo:null,capabilities:[...new Set([...$.architecture.input_modalities.map((Y)=>Y==="image"?"vision":Y),...$.architecture.output_modalities,...Z?["tools"]:[],...Q?["reasoning"]:[]])],limits:{contextWindow:$.context_length,maxOutputTokens:$.top_provider.max_completion_tokens||null},costs:{input:Number($.pricing.prompt),output:Number($.pricing.completion)}}}function wa$($){let Z=new Map;for(let Q of $){let Y={description:Q.description,capabilities:Q.capabilities,limits:Q.limits,costs:Q.costs};Z.set(Q.modelId,Y);let X=Q.modelId.replace(/\./g,"-");if(X!==Q.modelId)Z.set(X,Y)}return Z}async function IR6($){if($){let Z=await $.get(La$,"openrouter");if(Z)return wa$(Z)}try{let Z=await FF("OpenRouter enrichment index","https://openrouter.ai/api/v1/models",{signal:AbortSignal.timeout(1e4)});if(!Z.ok)await FY("OpenRouter enrichment index",Z);let{data:Q}=await Z.json(),Y=Q.map(MR6);if($)await $.set(La$,"openrouter",Y);return wa$(Y)}catch{return new Map}}function VR6($){let Z=$.replace(/\./g,"-"),Q=$.replace(/-\d{8}$/,""),Y=Q.replace(/\./g,"-");return[...new Set([$,Z,Q,Y])]}function kR6($){return $.providerId==="anthropic"||$.modelId.startsWith("anthropic/")}function Ea$($,Z){if(kR6(Z)&&$.includes("vision")&&!$.includes("file"))return[...$,"file"];return $}function SR6($,Z){return $.map((Q)=>{let X=VR6(Q.modelId).map((W)=>Z.get(W)).find(Boolean),J=Q.capabilities.length?Q.capabilities:X?.capabilities??[],G=Ea$(J,Q);if(!X)return G===J?Q:{...Q,capabilities:G};return{...Q,description:Q.description??X.description??null,capabilities:G,limits:Q.limits??X.limits??null,costs:Q.costs??X.costs??null}})}class ZK1{storage;cache;constructor($,Z){this.storage=$;this.cache=Z}async activate($,Z){let{keyInfo:Q,apiKey:Y}=await this.storage.resolve($,Z),X=q9()[Q.providerId];if(!X)throw Error(`Unknown provider: ${Q.providerId}`);return X.create(Y)}async listDecisionModels($,Z){let Q=await this.activate($,Z);if(!Q.decisions?.listModels)throw Error("Provider does not support decision model discovery");let Y=`${Q.info.id}:decisions`,X=await this.cache?.get(Z,Y);if(X)return X;let J=new Set,G=(await Q.decisions.listModels()).filter((W)=>{if(W.deprecated||!W.capabilities.includes("decisions")||J.has(W.modelId))return!1;return J.add(W.modelId),!0}).map((W)=>({...W,providerId:Q.info.id}));return await this.cache?.set(Z,Y,G),G}async listModels($,Z){let{keyInfo:Q,apiKey:Y}=await this.storage.resolve($,Z),X=Q.providerId,J=q9()[X];if(!J)throw Error(`Unknown provider: ${X}`);if(this.cache){let U=await this.cache.get(Z,X);if(U)return ja$(U,J,Y)}let W=await J.create(Y).listModels(),K=new Set,H=W.filter((U)=>{if(U.deprecated)return!1;if(K.has(U.modelId))return!1;return K.add(U.modelId),!0});if(X!=="openrouter"&&X!=="deco"){let U=await IR6(this.cache);H=SR6(H,U)}else H=H.map((U)=>({...U,capabilities:Ea$(U.capabilities,U)}));let F=H.map((U)=>({...U,providerId:X}));if(this.cache)await this.cache.set(Z,X,F);return ja$(F,J,Y)}}function ja$($,Z,Q){let X=Z.create(Q).asyncResearch;if(!X)return $;return $.map((J)=>X.canHandle(J.modelId)?{...J,asyncResearch:!0}:J)}var La$="_global";var za$=D(()=>{$W();bP()});import{SpanStatusCode as Pa$}from"@opentelemetry/api";function _R6($){if(!$)return;try{let Z=JSON.parse($);if(typeof Z!=="object"||Z===null||Array.isArray(Z))return;let Q={};for(let[Y,X]of Object.entries(Z)){if(Object.keys(Q).length>=CR6)break;if(typeof X==="string"&&Y.length<=Aa$&&X.length<=Aa$)Q[Y]=X}return Object.keys(Q).length>0?Q:void 0}catch{return}}function vR6($,Z){return Z?.connectionId??$?.headers.get("x-caller-id")??void 0}function bR6($){try{let Z=new URL($.url).pathname.split("/").filter(Boolean);if(Z[0]==="api"&&Z[1])return decodeURIComponent(Z[1])}catch{}return}function XK1($){let{auth:Z,headers:Q,role:Y,permissions:X,userId:J,apiKeyId:G,organizationId:W}=$,K=!!G,H=Z.api.hasPermission;return{isApiKeyPrincipal:K,hasPermission:async(F,U)=>{if(K)return fW1(X??{},F);let N=!!U?.organizationId&&!!W&&U.organizationId!==W,B=U?U.role:Y;if(jZ(B))return!0;if(X&&!N)return fW1(X,F);let O=ao$(U?.role,F,so$());if(O!=="fallback")return O==="grant";if(!H)return console.error("[Auth] hasPermission API not available"),!1;let L=U?.organizationId?{organizationId:U.organizationId}:{};try{if((await H({headers:Q,body:{permission:F,...L}}))?.success===!0)return!0;let j=Oo1(F);return(await H({headers:Q,body:{permission:j,...L}}))?.success===!0}catch(w){let j=w?.statusCode;if(j!==401&&j!==403)console.error("[Auth] Permission check failed:",w instanceof Error?w.message:String(w));return!1}},organization:{create:async(F)=>{return Z.api.createOrganization({body:F})},update:async(F)=>{return Z.api.updateOrganization({headers:Q,body:F})},delete:async(F)=>{await Z.api.deleteOrganization({headers:Q,body:{organizationId:F}})},get:async(F)=>{return Z.api.getFullOrganization({headers:Q,query:F?{organizationId:F}:void 0})},list:async()=>{return(await Z.api.listOrganizations({headers:Q})).filter((U)=>!P9(U))},addMember:async(F)=>{return Z.api.addMember({body:F})},removeMember:async(F)=>{return Z.api.removeMember({headers:Q,body:F})},listMembers:async(F)=>{return Z.api.listMembers({headers:Q,query:F?{organizationId:F.organizationId,limit:F.limit,offset:F.offset,filterField:F.filterField,filterValue:F.filterValue}:void 0})},updateMemberRole:async(F)=>{return Z.api.updateMemberRole({headers:Q,body:F})}},apiKey:{create:async(F)=>{return Z.api.createApiKey({body:{...F,userId:J}})},list:async()=>{return Z.api.listApiKeys({headers:Q})},update:async(F)=>{return Z.api.updateApiKey({body:{...F,userId:J}})},delete:async(F)=>{await Z.api.deleteApiKey({headers:Q,body:{keyId:F}})}}}}async function RA($,Z,Q){if(Fu.includes(Q))return;let Y=await $.selectFrom("organizationRole").select(["permission"]).where("organizationId","=",Z).where("role","=",Q).executeTakeFirst();if(!Y?.permission)return;try{return JSON.parse(Y.permission)}catch{console.error(`[Auth] Failed to parse permissions for role: ${Q}`);return}}function fR6($,Z,Q){$.delete(Z),$.set(Z,{archived:Q,at:Date.now()})}function yR6($,Z,Q){if($.size<=Z)return;let Y=Date.now();for(let[X,J]of $)if(Y-J.at>=Q)$.delete(X);if($.size>Z){let X=$.size-Z,J=0;for(let G of $.keys()){if(J>=X)break;$.delete(G),J++}}}async function Ra$($,Z,Q,Y){let X=QK1.get(Q);if(X&&Date.now()-X.at<Ta$)return X.archived;let J=await Z.measure(Y,()=>$.selectFrom("organization").select(["metadata"]).where("id","=",Q).executeTakeFirst()),G=P9(J);return fR6(QK1,Q,G),yR6(QK1,xR6,Ta$),G}async function YK1($,Z,Q,Y,X){let J=X?.get(Q,Y);if(J)return J;let W=(await Z.measure("auth_query_membership",()=>$.selectFrom("member").select(["member.role"]).where("member.userId","=",Q).where("member.organizationId","=",Y).executeTakeFirst()))?.role;if(W)X?.set(Q,Y,W);return W}function gR6($,Z){if(!$)return!0;return Z===$}async function hR6($,Z,Q,Y,X){let J=gQ0($.headers,"token");if(!J)return;let G=await Q.measure("auth_verify_onbehalf_studio_jwt",()=>Vc0(J));if(!G?.sub)return;let W=G.metadata?.organizationId;if(!gR6(Y,W))return;let K=Y?await YK1(Z,Q,G.sub,Y,X):G.user?.role??void 0;return{id:G.sub,email:G.user?.email,name:G.user?.name,role:K}}async function uR6($,Z,Q,Y=Ma$,X){let J=$.headers.get("Authorization");try{let G=new Headers($.headers);G.set("X-MCP-Session-Auth","true");let W=await Y.measure("auth_get_mcp_session",()=>Z.api.getMcpSession({headers:G}));if(W){let K=W.userId,H=$.headers.get("x-org-id"),F=$.headers.get("x-org-slug"),U=bR6($),N=await Y.measure("auth_query_membership",()=>{let w=Q.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["member.role","member.organizationId","organization.id as orgId","organization.slug as orgSlug","organization.name as orgName","organization.metadata as orgMetadata"]).where("member.userId","=",K);if(U)return w.where("organization.slug","=",U).executeTakeFirst();if(H)return w.where("organization.id","=",H).executeTakeFirst();if(F)return w.where("organization.slug","=",F).executeTakeFirst();return w.orderBy("member.createdAt","asc").limit(2).execute().then((j)=>j.length===1?j[0]:void 0)});if(P9({metadata:N?.orgMetadata}))throw Error(xQ0);let B=N?.role,O=N?{id:N.orgId,slug:N.orgSlug,name:N.orgName}:void 0;if(N&&B)X?.set(K,N.organizationId,B);let L;if(N&&B)L=await Y.measure("auth_fetch_role_permissions",()=>RA(Q,N.organizationId,B));return{user:{id:K,role:B},role:B,permissions:L,organization:O}}}catch(G){console.error("[Auth] OAuth session check failed:",G)}if(J?.startsWith("Bearer ")){let G=J.replace("Bearer ","").trim();try{let W=await Y.measure("auth_verify_studio_token",()=>Vc0(G));if(W){let K,H=W.metadata?.organizationId;if(W.sub&&H)K=await YK1(Q,Y,W.sub,H,X);let F,U=W.metadata?.organizationId;if(U){let N=W.metadata?.organizationName,B=W.metadata?.organizationSlug;if(N||B){if(await Ra$(Q,Y,U,"auth_query_org_archived_for_studio_token"))return{user:void 0};F={id:U,name:N,slug:B}}else{let O=await Y.measure("auth_query_org_for_studio_token",()=>Q.selectFrom("organization").select(["id","slug","name","metadata"]).where("id","=",U).executeTakeFirst());if(P9(O))return{user:void 0};F=O?{id:O.id,slug:O.slug,name:O.name}:{id:U}}}return{user:{id:W.sub,connectionId:W.metadata?.connectionId,role:K},role:K,permissions:W.permissions,tokenOrganizationId:H,organization:F}}}catch{}try{let W=await Y.measure("auth_verify_api_key",()=>Z.api.verifyApiKey({body:{key:G}}));if(W?.valid&&W.key){let K=W.key.metadata?.organization;if(K?.id&&await Ra$(Q,Y,K.id,"auth_query_org_for_api_key"))return{user:void 0};let H=W.key.permissions,F,U=W.key.userId;if(U&&K?.id)F=await YK1(Q,Y,U,K.id,X);let N=await hR6($,Q,Y,K?.id,X);return{apiKeyId:W.key.id,user:N??{id:W.key.userId,role:F},role:N?N.role:F,permissions:H,apiKey:{id:W.key.id,name:W.key.name??"",userId:W.key.userId,metadata:W.key.metadata},tokenOrganizationId:K?.id,organization:K?{id:K.id,slug:K.slug,name:K.name}:void 0}}}catch(W){let K=W;if(K.body?.code==="INVALID_API_KEY"||K.message?.includes("Invalid API key"))console.warn("[Auth] invalid API key (Bearer)",{path:new URL($.url).pathname,method:$.method,ua:$.headers.get("user-agent")??void 0,ip:$.headers.get("x-forwarded-for")??$.headers.get("x-real-ip")??void 0,tokenPrefix:G.slice(0,8)});else console.error("[Auth] API key check failed:",K)}}try{let G=new Headers($.headers);G.delete("Authorization");let W=await Y.measure("auth_get_session",()=>Z.api.getSession({headers:G}));if(W){let K,H,F=$.headers.get("x-org-id"),U=$.headers.get("x-org-slug");if(!F&&!U&&$.method.toUpperCase()==="GET")try{let N=new URL($.url).searchParams;F=N.get("x-org-id"),U=N.get("x-org-slug")}catch{}if(F||U){let N=await Y.measure("auth_query_membership_from_header",()=>{let B=Q.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["member.role","organization.id as orgId","organization.slug as orgSlug","organization.name as orgName","organization.metadata as orgMetadata"]).where("member.userId","=",W.user.id);if(F)B=B.where("organization.id","=",F);else if(U)B=B.where("organization.slug","=",U);return B.executeTakeFirst()});if(P9({metadata:N?.orgMetadata}))throw Error(xQ0);if(N)K={id:N.orgId,slug:N.orgSlug,name:N.orgName},H=N.role}else if(W.session.activeOrganizationId){let N=await Y.measure("auth_get_full_organization",()=>Z.api.getFullOrganization({headers:G}).catch(()=>null));if(N&&!P9(N))K={id:N.id,slug:N.slug,name:N.name},H=N.members?.find((O)=>O.userId===W.user.id)?.role;else if(!N)K={id:W.session.activeOrganizationId,slug:"",name:""}}return{user:{id:W.user.id,email:W.user.email,emailVerified:!!W.user.emailVerified,name:W.user.name,image:W.user.image??void 0,role:H},role:H,organization:K}}}catch(G){let W=G;if(W.message===xQ0)throw G;console.error("[Auth] Session check failed:",JSON.stringify({message:W.message,body:W.body,stack:W.stack},null,2))}return{user:void 0}}async function Ia$($){let Z=new FG($.encryption.key),Q=E0(),Y=Q.clickhouseUrl,X=!!Y,J=!X&&!!Q.monitoringS3Bucket,G=X?"clickhouse":"duckdb",{resolve:W}=await import("path"),K=W(uW()),H=W(sU()),F=(P)=>`read_ndjson('${K}/${P}/**/*.ndjson', auto_detect=true)`,U=(P)=>`read_ndjson('${H}/${P}/**/*.ndjson', auto_detect=true)`,N,B,O,L,w=!1;if($.monitoringEngines)N=$.monitoringEngines.monitoringEngine,B=$.monitoringEngines.metricEngine,O=F,L=U;else if(X){let P=Q.clickhouseMaxMemoryUsage?{maxMemoryUsage:String(Q.clickhouseMaxMemoryUsage)}:void 0;N=new Ho(Y,P),B=new Ho(Y,P),O=(A)=>"studio_monitoring_logs",L=(A)=>"studio_monitoring_logs"}else if(J){let P=Q.monitoringS3AccessKeyId??Q.s3AccessKeyId,A=Q.monitoringS3SecretAccessKey??Q.s3SecretAccessKey,q=Q.duckdbExtensionDirectory;if(!P||!A||!q)throw Error("MONITORING_S3_BUCKET is set but the GCS monitoring path is misconfigured: MONITORING_S3_ACCESS_KEY_ID/S3_ACCESS_KEY_ID, MONITORING_S3_SECRET_ACCESS_KEY/S3_SECRET_ACCESS_KEY, and DUCKDB_EXTENSION_DIRECTORY are all required.");let x={endpoint:Q.monitoringS3Endpoint??Q.s3Endpoint??"storage.googleapis.com",region:Q.monitoringS3Region??Q.s3Region,accessKeyId:P,secretAccessKey:A,extensionDirectory:q},_=new Ko(x,{memoryLimit:Q.duckdbMemoryLimit,threads:Q.duckdbThreads});N=_,B=_;let V=Q.monitoringS3Bucket,y=Q.monitoringS3Prefix??"",g=(l,n)=>Qo1({bucket:V,prefix:y,range:n});O=g,L=g,w=!0}else{let{engine:P}=await Hi0({basePath:uW()}),{engine:A}=await Hi0({basePath:sU()});N=P,B=A,O=F,L=U}let j=new Kh($.db),E=new X80($.db),z=new Bo($.db),T={connections:new rn($.db,Z),connectionCredentialVault:new Rm0($.db),organizationSettings:new WP($.db),userModelPreferences:new Ui0($.db),monitoring:new Cm0(N,O,B,L,G,w),virtualMcps:new Hh($.db),users:new Ti0($.db),tags:new Oo($.db),experiments:new Pi0($.db),organizationBilling:new DG($.db),aiProviderKeys:new Ir($.db,Z,$.providerKeyCache),subsidizedGatewayKeys:new cW1($.db,Z),secrets:new P41($.db,Z),orgFileConfigs:new mW1($.db,Z),orgSites:new pf($.db),orgRepoSyncs:new dA($.db),gitProviderAccounts:new vA($.db),gitProviderAccountCredentials:new Ye($.db,Z),gitProviderOAuthStates:new tW1($.db),githubConnectFlows:new pW1($.db),repositories:new Xe($.db),jiraIntegrations:new PO($.db,Z),taskBoard:new rG($.db),columnAutomations:new oW1($.db),taskBoardPrompts:new rW1($.db),taskBoardAnalytics:new f71($.db),threadAnalytics:new u71($.db),notifications:new sW1($.db),orgFsEntries:new Sn($.db),oauthPkceStates:new eW1($.db),claudeSubscriptions:new $K1($.db,Z),automations:VQ0($.db),triggerCallbackTokens:new Uo($.db),orgSsoConfig:new ji0($.db,Z),orgSsoSessions:new Ei0($.db),brandContext:new No($.db),organizationDomains:new OG($.db),organizationJoinRequests:new Ku($.db),kv:z,interests:new wi0(z)};return async(P,A)=>{let q=A?.timings??Ma$,x=YV0(),_=P?await $.observability.tracer.startActiveSpan("studio.auth",async(Y0)=>{try{let o=await uR6(P,$.auth,$.db,q,$.memberRoleCache);return Y0.setStatus({code:Pa$.OK}),o}catch(o){throw Y0.setStatus({code:Pa$.ERROR,message:o.message}),Y0.recordException(o),o}finally{Y0.end()}}):{user:void 0},V=vR6(P,_.user),y=XK1({auth:$.auth,headers:P?.headers??new Headers,role:_.role,permissions:_.permissions,userId:_.user?.id,apiKeyId:_.apiKeyId,organizationId:_.organization?.id}),g={user:_.user,tokenOrganizationId:_.tokenOrganizationId,permissions:_.permissions,permissionsOrganizationId:_.permissions?_.organization?.id:void 0};if(_.apiKey)g.apiKey=_.apiKey;let l=_.organization,n=P?E0().baseUrl??`${new URL(P.url).origin}`:a9(),p=new HP(g.user?.id,void 0,y,_.role,"self",void 0,l?.id),F0={...T,virtualMcps:Ed1(T.virtualMcps),threads:new zm0(j,l?.id),asyncResearchJobs:new uW1(E,l?.id)},V0=new ZK1(F0.aiProviderKeys,$.modelListCache),G0=$X(),H0=!l?null:G0?KG(G0,l.id):new q3(l.id,n),X0=l&&H0?new M3(H0,F0.orgFsEntries,l.id):null;KW1(F0,{objectStorage:H0,baseUrl:n,orgSlug:l?.slug});let Z0={timings:q,auth:g,connectionId:V,organization:l,storage:F0,vault:Z,authInstance:$.auth,boundAuth:y,access:p,db:$.db,tracer:$.observability.tracer,meter:$.observability.meter,baseUrl:n,objectStorage:H0,orgFs:X0,metadata:{requestId:crypto.randomUUID(),timestamp:new Date,wellKnownForwardableHeaders:Object.fromEntries(lR6.map((Y0)=>[Y0,P?.headers.get(Y0)??null]).filter(([,Y0])=>Y0!==null)),userAgent:(P?gQ0(P.headers,"client"):null)||P?.headers.get("User-Agent")||void 0,ipAddress:(P?.headers.get("CF-Connecting-IP")||P?.headers.get("X-Forwarded-For"))??void 0,properties:_R6(P?gQ0(P.headers,"properties"):null)},aiProviders:V0,createMCPProxy:async(Y0)=>{return await Xa$(Y0,Z0)},invalidateMemberRole:$.memberRoleCache?(Y0,o)=>$.memberRoleCache.invalidate(Y0,o):void 0,getOrCreateClient:x,pendingRevalidations:[],firecrawlApiKey:E0().firecrawlApiKey};return Z0}}function Vj($,Z){$.storage.threads.setOrganizationId(Z.id),$.storage.asyncResearchJobs.setOrganizationId(Z.id);let Q=$X();$.objectStorage=Q?KG(Q,Z.id):new q3(Z.id,$.baseUrl),$.orgFs=new M3($.objectStorage,$.storage.orgFsEntries,Z.id),KW1($.storage,{objectStorage:$.objectStorage,baseUrl:$.baseUrl,orgSlug:Z.slug??void 0})}var CR6=50,Aa$=500,Ta$=60000,xR6=1e4,QK1,qa$,vQ,Ma$,lR6;var iF=D(()=>{GK();Vz();F$();E9();Pm0();C70();qm0();qd1();Yo1();O3();Fi0();Ni0();Bi0();Di0();zi0();Uo1();Do();BK();Ii0();jQ1();GY();BW1();on();lW1();_W1();Eo0();ae();Ga$();dW1();JW0();Fc();nW1();y71();l71();QO();Da$();Pc0();CN();za$();ID();dg();HW1();QK1=new Map;vQ={set:($)=>{qa$=$},create:async($,Z)=>{return await qa$($,Z)}},Ma$={measure:async($,Z)=>{return await Z()}},lR6=["x-hub-signature-256"]});import{DBOS as HV0,SchedulerMode as cR6}from"@dbos-inc/dbos-sdk";function Va$($){GK1=$}function ka$(){if(!GK1)throw Error("[org-fs] org-repo-sync runtime not initialized \u2014 setOrgRepoSyncRuntime() must run before the workflow fires");return GK1}async function dR6($,Z){let Q=await $.selectFrom("organization").select(["id","slug","name"]).where("id","=",Z).executeTakeFirst();if(!Q)return null;let Y=await vQ.create();return Y.organization={id:Q.id,slug:Q.slug,name:Q.name},Vj(Y,{id:Q.id,slug:Q.slug}),Y}async function iR6($){try{let{db:Z}=ka$(),Q=await dR6(Z,$.organizationId);if(!Q)return{id:$.id,volume:$.volume,error:"organization no longer exists"};let Y=await yW0(Q,$);return"error"in Y?{id:Y.id,volume:Y.volume,error:Y.error}:{id:Y.id,volume:Y.volume}}catch(Z){return{id:$.id,volume:$.volume,error:Z instanceof Error?Z.message:String(Z)}}}async function pR6($,Z){let Q=await HV0.runStep(()=>new dA(ka$().db).listEnabled(),{name:"loadOrgRepoSyncConfigs"});for(let Y of Q){let X=await HV0.runStep(()=>iR6(Y),{name:`syncOrgRepo:${Y.id}`});if(X.error)console.warn(`[org-fs] org repo sync ${X.id} (${X.volume}) failed: ${X.error}`)}}function Sa$(){if(JK1)return;JK1=HV0.registerWorkflow(pR6,{name:"orgRepoSyncWorkflow"}),HV0.registerScheduled(JK1,{name:"orgRepoSyncWorkflow",crontab:mR6,mode:cR6.ExactlyOncePerIntervalWhenActive})}var mR6="7-59/10 * * * *",GK1=null,JK1=null;var Ca$=D(()=>{iF();gW0()});import{DBOS as FV0,SchedulerMode as nR6}from"@dbos-inc/dbos-sdk";function _a$($){KK1=$}function va$(){if(!KK1)throw Error("[task-board-archive] runtime not initialized \u2014 setTaskBoardArchiveSweepRuntime() must run before the workflow fires");return KK1}async function aR6($,Z){try{let Q=await PW(va$().db,$);if(!Q)return{organizationId:$,archived:0};let{archived:Y}=await YV$(Q,$,Z);return{organizationId:$,archived:Y}}catch(Q){return{organizationId:$,archived:0,error:Q instanceof Error?Q.message:String(Q)}}}async function sR6($,Z){let Q=new Date($.getTime()-oR6),Y=await FV0.runStep(()=>new rG(va$().db).listItemsAwaitingArchive(Q,rR6),{name:"loadArchiveCandidates"});if(Y.length===0)return;let X=await Promise.all(ZT0(Y).map(({organizationId:G,itemIds:W})=>FV0.runStep(()=>aR6(G,W),{name:`archiveMergedForOrg:${G}`})));for(let G of X)if(G.error)console.warn(`[task-board-archive] org ${G.organizationId} failed: ${G.error}`);let J=X.reduce((G,W)=>G+W.archived,0);if(J>0)console.log(`[task-board-archive] archived ${J} of ${Y.length} candidates`)}function ba$(){if(WK1)return;WK1=FV0.registerWorkflow(sR6,{name:"taskBoardArchiveSweepWorkflow"}),FV0.registerScheduled(WK1,{name:"taskBoardArchiveSweepWorkflow",crontab:tR6,mode:nR6.ExactlyOncePerIntervalWhenActive})}var tR6="23 * * * *",oR6=432000000,rR6=200,KK1=null,WK1=null;var xa$=D(()=>{QO();jm();dx()});import{createHmac as eR6,timingSafeEqual as $q6}from"crypto";function ya$($,Z,Q,Y=Date.now()){if(!Z||!Q)return!1;let X,J=[];for(let H of Z.split(",")){let F=H.indexOf("=");if(F<=0)continue;let U=H.slice(0,F).trim(),N=H.slice(F+1).trim();if(U==="t")X=N;else if(U==="v1")J.push(N)}if(!X||J.length===0)return!1;let G=Number(X);if(!Number.isFinite(G)||Math.abs(Y/1000-G)>Zq6)return!1;let W=eR6("sha256",Q).update(`${X}.${$}`).digest("hex"),K=Buffer.from(W,"hex");return J.some((H)=>{let F=Buffer.from(H,"hex");return K.length===F.length&&$q6(K,F)})}function ga$($){let Z;try{Z=JSON.parse($)}catch{return null}let Q=M7(Z),Y=M7(M7(Q?.data)?.object);if(!Q||typeof Q.type!=="string"||!Y)return null;return{id:xW(Q.id),type:Q.type,created:typeof Q.created==="number"?Q.created:void 0,livemode:typeof Q.livemode==="boolean"?Q.livemode:void 0,data:{object:Y}}}function NV0($){switch($){case"active":case"trialing":return"active";case"past_due":return"past_due";default:return"canceled"}}function xW($){return typeof $==="string"?$:void 0}function M7($){return typeof $==="object"&&$!==null?$:void 0}function BV0($){return typeof $==="number"?new Date($*1000):null}function UV0($){return xW($)??xW(M7($)?.id)}function Qq6($){return UV0($.subscription)??xW(M7(M7($.parent)?.subscription_details)?.subscription)}function Yq6($){let Z=M7($.lines)?.data;if(Array.isArray(Z)){let Q=null;for(let Y of Z){let X=M7(M7(Y)?.period)?.end;if(typeof X==="number"&&(Q===null||X>Q))Q=X}if(Q!==null)return new Date(Q*1000)}return BV0($.period_end)}function Xq6($,Z){let Q=M7($.items)?.data;if(!Array.isArray(Q))return;for(let Y of Q){let X=M7(Y)?.amount;if(typeof X==="number"&&X<=0)continue;let J=UV0(M7(Y)?.price);if(J&&Z[J])return Z[J]}return}function UK1($,Z,Q){if($==="past_due")return;if($!=="active")return"free";return}function Jq6($){let Z=BV0($.current_period_end);if(Z)return Z;let Q=M7($.items)?.data;if(!Array.isArray(Q))return null;let Y=0;for(let X of Q){let J=M7(X)?.current_period_end;if(typeof J==="number"&&J>Y)Y=J}return Y>0?new Date(Y*1000):null}function HK1($,Z){let Q=BV0($.created);return!!Q&&!!Z.lastStripeEventAt&&Q<Z.lastStripeEventAt}function FK1($,Z){let Q=BV0($.created);if(!Q)return;return Z.lastStripeEventAt&&Z.lastStripeEventAt>Q?void 0:Q}async function Gq6($,Z){let Q=Z.data.object;switch(Z.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":{let Y=xW(M7(Q.metadata)?.orgId);if(!Y)return{handled:!1,reason:"no orgId"};if(xW(M7(Q.metadata)?.kind)==="topup"){if(Q.mode!=="payment")return{handled:!1,reason:"topup with wrong mode"};if(xW(Q.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let H=xW(Q.id);if(!H)return console.error("stripe webhook: topup session without id",{eventId:Z.id,organizationId:Y}),{handled:!1,reason:"topup session without id"};let F=Number(M7(Q.metadata)?.creditCents);if(!Number.isInteger(F)||F<=0)return console.error("stripe webhook: paid topup with bad metadata \u2014 credit NOT applied",{eventId:Z.id,organizationId:Y,creditCents:M7(Q.metadata)?.creditCents}),{handled:!1,reason:"bad topup metadata"};return{handled:!0,organizationId:Y,topUp:{creditCents:F,referenceId:`stripe-topup:${H}`}}}if(Q.mode!=="subscription")return{handled:!1,reason:"not a subscription checkout"};if(xW(Q.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let X=await $.ensureBilling(Y);if(!X)return console.error("stripe webhook: PAID checkout for an org that does not exist",{organizationId:Y,eventId:Z.id}),{handled:!1,reason:"unknown org"};let J=UV0(Q.subscription);if(!J)return console.error("stripe webhook: subscription checkout without a sub id",{organizationId:Y,eventId:Z.id}),{handled:!1,reason:"subscription checkout without sub id"};if(HK1(Z,X))return{handled:!1,reason:"stale event"};if(X.stripeSubscriptionId&&X.stripeSubscriptionId!==J)return console.error("stripe webhook: refused checkout rebind",{organizationId:Y,eventId:Z.id}),{handled:!1,reason:"org already bound to another subscription",orphanSubscriptionId:J};let G=UV0(Q.customer);if(!await $.bindSubscription(Y,{stripeSubscriptionId:J,...G?{stripeCustomerId:G}:{},status:"active",lastStripeEventAt:FK1(Z,X)}))return console.error("stripe webhook: lost the bind race",{organizationId:Y,subscriptionId:J,eventId:Z.id}),{handled:!1,reason:"org already bound to another subscription",orphanSubscriptionId:J};let K=xW(M7(Q.metadata)?.planId);return{handled:!0,organizationId:Y,...K?{planChange:{planId:K,note:`stripe checkout ${xW(Q.id)??""}`.trim()}}:{}}}case"customer.subscription.updated":case"customer.subscription.deleted":{let Y=xW(Q.id);if(!Y)return{handled:!1,reason:"no sub id"};let X=await $.getBillingByStripeSubscriptionId(Y);if(!X)return{handled:!1,reason:"unknown subscription"};let J=Z.type==="customer.subscription.deleted";if(!J&&HK1(Z,X))return{handled:!1,reason:"stale event"};let G=J?"canceled":NV0(Q.status);await $.updateStripeState(X.organizationId,{status:G,currentPeriodEnd:Jq6(Q),...J&&{stripeSubscriptionId:null},lastStripeEventAt:FK1(Z,X)});let W=UK1(G,Q,E0().stripePlanPriceIds);return{handled:!0,organizationId:X.organizationId,...W?{planChange:{planId:W,note:`stripe ${Z.type} (${G})`}}:{}}}case"invoice.paid":{let Y=Qq6(Q);if(!Y)return{handled:!1,reason:"no sub id"};let X=await $.getBillingByStripeSubscriptionId(Y);if(!X)return{handled:!1,reason:"unknown subscription"};if(HK1(Z,X))return{handled:!1,reason:"stale event"};await $.updateStripeState(X.organizationId,{status:"active",currentPeriodEnd:Yq6(Q),lastStripeEventAt:FK1(Z,X)});let J=Xq6({items:Q.lines},E0().stripePlanPriceIds);return{handled:!0,organizationId:X.organizationId,...J?{planChange:{planId:J,note:"stripe invoice.paid"}}:{}}}default:return{handled:!1,reason:`unhandled event ${Z.type}`}}}function Wq6($,Z){if(!Z.handled||$.livemode===!1)return null;let Q=$.data.object;if(Z.topUp)return{name:"credits_topup_succeeded",organizationId:Z.organizationId,properties:{credit_cents:Z.topUp.creditCents}};switch($.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":return{name:"subscription_started",organizationId:Z.organizationId,properties:{}};case"customer.subscription.deleted":return{name:"subscription_canceled",organizationId:Z.organizationId,properties:{}};case"customer.subscription.updated":return{name:"subscription_updated",organizationId:Z.organizationId,properties:{status:NV0(Q.status),...typeof Q.cancel_at_period_end==="boolean"?{cancel_at_period_end:Q.cancel_at_period_end}:{}}};case"invoice.paid":if(Q.billing_reason==="subscription_create")return null;return{name:"subscription_renewed",organizationId:Z.organizationId,properties:{}};default:return null}}function fa$($,Z){let Q=Wq6($,Z);if(!Q)return;QJ({event:Q.name,organizationId:Q.organizationId,...$.id?{uuid:B4$(`stripe:${$.id}:${Q.name}`)}:{},...$.created?{timestamp:new Date($.created*1000)}:{},properties:Q.properties})}async function ha$($){let Z=new DG(S8().db),Q=await Gq6(Z,$);if(!(Q.handled&&Q.topUp))fa$($,Q);if(Q.handled&&Q.topUp)await Mb$({organizationId:Q.organizationId,amountCents:Q.topUp.creditCents,referenceId:Q.topUp.referenceId}),fa$($,Q);if(Q.handled&&Q.planChange){try{await hR0({organizationId:Q.organizationId,planId:Q.planChange.planId,note:Q.planChange.note})}catch(Y){if(!(Y instanceof tm))throw Y;return console.error("stripe webhook: gateway REFUSED the plan change \u2014 the org has been "+"charged (or cancelled) and its entitlement did NOT move. Place it by hand through the gateway admin API.",{organizationId:Q.organizationId,planId:Q.planChange.planId,eventId:$.id,status:Y.status,error:Y.message}),Q}rm(Q.organizationId)}if(!Q.handled&&Q.orphanSubscriptionId){let Y=Q.orphanSubscriptionId;try{await oH$(Y)}catch(J){if(!(J instanceof VZ&&(J.status===400||J.status===404)))throw J}let{refundedCents:X}=await rH$(Y);console.error("stripe webhook: reversed orphan subscription",{subscriptionId:Y,refundedCents:X,eventId:$.id})}return Q}var Zq6=300;var NK1=D(()=>{m10();c3();U6();Do();IB();uR0();F$()});import{DBOS as OV0,SchedulerMode as Kq6}from"@dbos-inc/dbos-sdk";function ua$($){OK1=$}function la$(){if(!OK1)throw Error("[subscription-sweep] runtime not initialized \u2014 setSubscriptionSweepRuntime() must run before the workflow fires");return OK1}async function Nq6($){let{organizationId:Z,stripeSubscriptionId:Q}=$;if(!Q)return{organizationId:Z,action:"ok"};let Y=new DG(la$().db);try{let X,J,G=!1;try{let K=await Cw(Q);X=NV0(K.status),J=Bq6(K)}catch(K){if(!(K instanceof VZ)||K.status!==404)throw K;X="canceled",J=$.currentPeriodEnd,G=!0}let W=UK1(X,{},E0().stripePlanPriceIds);if(await Y.updateStripeState(Z,{status:X,currentPeriodEnd:J,...G&&{stripeSubscriptionId:null}}),!W)return{organizationId:Z,action:"ok"};return await hR0({organizationId:Z,planId:W,note:`studio subscription sweep (${X})`}),rm(Z),console.warn("[subscription-sweep] revoked a paid tier whose webhook never arrived",{organizationId:Z,subscriptionId:Q,status:X}),{organizationId:Z,action:G?"gone":"revoked"}}catch(X){if(X instanceof tm)console.error("[subscription-sweep] gateway REFUSED the revocation \u2014 the org still holds a tier it no longer pays for",{organizationId:Z,subscriptionId:Q,status:X.status});return{organizationId:Z,action:"failed",error:X instanceof Error?X.message:String(X)}}}function Bq6($){if(typeof $.current_period_end==="number")return new Date($.current_period_end*1000);let Z=0;for(let Q of $.items?.data??[])if(typeof Q.current_period_end==="number")Z=Math.max(Z,Q.current_period_end);return Z>0?new Date(Z*1000):null}async function Oq6($,Z){let Q=E0();if(!Q.plansEnabled||!Q.stripeSecretKey)return;let Y=new Date($.getTime()-Fq6),X=await OV0.runStep(()=>new DG(la$().db).listSubscriptionsPastPeriodEnd(Y,Uq6),{name:"loadLapsedSubscriptions"});if(X.length===0)return;let J=await Promise.all(X.map((W)=>OV0.runStep(()=>Nq6(W),{name:`sweepSubscription:${W.organizationId}`})));for(let W of J)if(W.action==="failed")console.warn(`[subscription-sweep] org ${W.organizationId} failed: ${W.error}`);let G=J.filter((W)=>W.action==="revoked"||W.action==="gone").length;if(G>0)console.warn(`[subscription-sweep] revoked ${G} of ${X.length} lapsed subscriptions`)}function ca$(){if(BK1)return;BK1=OV0.registerWorkflow(Oq6,{name:"subscriptionSweepWorkflow"}),OV0.registerScheduled(BK1,{name:"subscriptionSweepWorkflow",crontab:Hq6,mode:Kq6.ExactlyOncePerIntervalWhenActive})}var Hq6="41 * * * *",Fq6=172800000,Uq6=100,OK1=null,BK1=null;var ma$=D(()=>{m10();Do();IB();uR0();NK1();F$()});async function Dq6($,Z){let Q=await $.storage.tags.listOrgTags(Z),Y=Q.find((J)=>J.name.toLowerCase()===DV0);if(Y)return Y.id;return(await $.storage.tags.createTag(Z,DV0,QW0(Q.length))).id}async function Lq6($,Z,Q,Y,X){let J=await $.storage.taskBoard.getById(Q,Z);if(!J||!WV$(J.status))return!1;let G=await $.storage.taskBoard.listPrs(Q,Z),W=await Promise.all(G.map(async(H)=>({...H,...await X($,Z,H)})));if(!ix(W))return!1;await $.storage.taskBoard.addItemTags(Q,[await Y()],"system");let K=await $.storage.taskBoard.getById(Q,Z);if(!K)return!1;return await o6($,{taskBoardItemId:Q,action:"tags_changed",actorId:null,data:{from:J.tags,to:K.tags,reason:"merged_pr_auto_tag"}}),E8(Z,K),!0}async function da$($,Z,Q,Y=QT0){let X=null,J=()=>X??=Dq6($,Z),G=0;for(let W of Q)try{if(await Lq6($,Z,W,J,Y))G+=1}catch(K){console.error(`[task-board-merged-tag] ${W} failed`,K)}return{tagged:G}}var DV0="merged";var ia$=D(()=>{C4();_Y();jm();WH();z7();V9()});import{DBOS as LV0,SchedulerMode as wq6}from"@dbos-inc/dbos-sdk";function pa$($){LK1=$}function na$(){if(!LK1)throw Error("[task-board-merged-tag] runtime not initialized \u2014 setTaskBoardMergedTagSweepRuntime() must run before the workflow fires");return LK1}async function zq6($,Z){try{let Q=await PW(na$().db,$);if(!Q)return{organizationId:$,tagged:0};let{tagged:Y}=await da$(Q,$,Z);return{organizationId:$,tagged:Y}}catch(Q){return{organizationId:$,tagged:0,error:Q instanceof Error?Q.message:String(Q)}}}async function Pq6(){let $=await LV0.runStep(()=>new rG(na$().db).listItemsAwaitingMergedTag(DV0,Eq6),{name:"loadMergedTagCandidates"});if($.length===0)return;let Z=await Promise.all(ZT0($).map(({organizationId:Y,itemIds:X})=>LV0.runStep(()=>zq6(Y,X),{name:`tagMergedForOrg:${Y}`})));for(let Y of Z)if(Y.error)console.warn(`[task-board-merged-tag] org ${Y.organizationId} failed: ${Y.error}`);let Q=Z.reduce((Y,X)=>Y+X.tagged,0);if(Q>0)console.log(`[task-board-merged-tag] tagged ${Q} of ${$.length} candidates`)}function ta$(){if(DK1)return;DK1=LV0.registerWorkflow(Pq6,{name:"taskBoardMergedTagSweepWorkflow"}),LV0.registerScheduled(DK1,{name:"taskBoardMergedTagSweepWorkflow",crontab:jq6,mode:wq6.ExactlyOncePerIntervalWhenActive})}var jq6="41 * * * *",Eq6=200,LK1=null,DK1=null;var oa$=D(()=>{QO();jm();dx();ia$()});function ra$($){if(!$)return!1;try{return new URL($).host==="api.decocms.com"}catch{return!1}}var sa$,Aq6,aa$=($)=>{let Z=0,Q=$.length;while(Z<Q){let Y=$.charCodeAt(Z);if(Y!==32&&Y!==9)break;Z++}while(Q>Z){let Y=$.charCodeAt(Q-1);if(Y!==32&&Y!==9)break;Q--}return Z===0&&Q===$.length?$:$.slice(Z,Q)},wK1=($,Z)=>{if(Z&&$.indexOf(Z)===-1)return{};let Q=$.split(";"),Y={};for(let X of Q){let J=X.indexOf("=");if(J===-1)continue;let G=aa$(X.substring(0,J));if(Z&&Z!==G||!sa$.test(G))continue;let W=aa$(X.substring(J+1));if(W.startsWith('"')&&W.endsWith('"'))W=W.slice(1,-1);if(Aq6.test(W)){if(Y[G]=W.indexOf("%")!==-1?hu(W,Qr):W,Z)break}}return Y},Tq6=($,Z,Q={})=>{if(!sa$.test($))throw Error("Invalid cookie name");let Y=`${$}=${Z}`;if($.startsWith("__Secure-")&&!Q.secure)throw Error("__Secure- Cookie must have Secure attributes");if($.startsWith("__Host-")){if(!Q.secure)throw Error("__Host- Cookie must have Secure attributes");if(Q.path!=="/")throw Error('__Host- Cookie must have Path attributes with "/"');if(Q.domain)throw Error("__Host- Cookie must not have Domain attributes")}for(let X of["domain","path"])if(Q[X]&&/[;\r\n]/.test(Q[X]))throw Error(`${X} must not contain ";", "\\r", or "\\n"`);if(Q&&typeof Q.maxAge==="number"&&Q.maxAge>=0){if(Q.maxAge>34560000)throw Error("Cookies Max-Age SHOULD NOT be greater than 400 days (34560000 seconds) in duration.");Y+=`; Max-Age=${Q.maxAge|0}`}if(Q.domain&&Q.prefix!=="host")Y+=`; Domain=${Q.domain}`;if(Q.path)Y+=`; Path=${Q.path}`;if(Q.expires){if(Q.expires.getTime()-Date.now()>34560000000)throw Error("Cookies Expires SHOULD NOT be greater than 400 days (34560000 seconds) in the future.");Y+=`; Expires=${Q.expires.toUTCString()}`}if(Q.httpOnly)Y+="; HttpOnly";if(Q.secure)Y+="; Secure";if(Q.sameSite)Y+=`; SameSite=${Q.sameSite.charAt(0).toUpperCase()+Q.sameSite.slice(1)}`;if(Q.priority)Y+=`; Priority=${Q.priority.charAt(0).toUpperCase()+Q.priority.slice(1)}`;if(Q.partitioned){if(!Q.secure)throw Error("Partitioned Cookie must have Secure attributes");Y+="; Partitioned"}return Y},wV0=($,Z,Q)=>{return Z=encodeURIComponent(Z),Tq6($,Z,Q)};var ea$=D(()=>{VL();sa$=/^[\w!#$%&'*.^`|~+-]+$/,Aq6=/^[ !#-:<-[\]-~]*$/});var pd=($,Z,Q)=>{let Y=$.req.raw.headers.get("Cookie");if(typeof Z==="string"){if(!Y)return;let J=Z;if(Q==="secure")J="__Secure-"+Z;else if(Q==="host")J="__Host-"+Z;return wK1(Y,J)[J]}if(!Y)return{};return wK1(Y)},Rq6=($,Z,Q)=>{let Y;if(Q?.prefix==="secure")Y=wV0("__Secure-"+$,Z,{path:"/",...Q,secure:!0});else if(Q?.prefix==="host")Y=wV0("__Host-"+$,Z,{...Q,path:"/",secure:!0,domain:void 0});else Y=wV0($,Z,{path:"/",...Q});return Y},W80=($,Z,Q,Y)=>{let X=Rq6(Z,Q,Y);$.header("Set-Cookie",X,{append:!0})};var jV0=D(()=>{ea$()});var $s$=($)=>{let Q={...{origin:"*",allowMethods:["GET","HEAD","PUT","POST","DELETE","PATCH"],allowHeaders:[],exposeHeaders:[]},...$},Y=((J)=>{if(typeof J==="string")if(J==="*"){if(Q.credentials)return(G)=>G||null;return()=>J}else return(G)=>J===G?G:null;else if(typeof J==="function")return J;else return(G)=>J.includes(G)?G:null})(Q.origin),X=((J)=>{if(typeof J==="function")return J;else if(Array.isArray(J))return()=>J;else return()=>[]})(Q.allowMethods);return async function(G,W){function K(F,U){G.res.headers.set(F,U)}let H=await Y(G.req.header("origin")||"",G);if(H)K("Access-Control-Allow-Origin",H);if(Q.credentials)K("Access-Control-Allow-Credentials","true");if(Q.exposeHeaders?.length)K("Access-Control-Expose-Headers",Q.exposeHeaders.join(","));if(G.req.method==="OPTIONS"){if(Q.origin!=="*"||Q.credentials)K("Vary","Origin");if(Q.maxAge!=null)K("Access-Control-Max-Age",Q.maxAge.toString());let F=await X(G.req.header("origin")||"",G);if(F.length)K("Access-Control-Allow-Methods",F.join(","));let U=Q.allowHeaders;if(!U?.length){let N=G.req.header("Access-Control-Request-Headers");if(N)U=N.split(/\s*,\s*/)}if(U?.length)K("Access-Control-Allow-Headers",U.join(",")),G.res.headers.append("Vary","Access-Control-Request-Headers");return G.res.headers.delete("Content-Length"),G.res.headers.delete("Content-Type"),new Response(null,{headers:G.res.headers,status:204,statusText:"No Content"})}if(await W(),Q.origin!=="*"||Q.credentials)G.header("Vary","Origin",{append:!0})}};var Zs$=()=>{};function jK1($,Z){return`${$}:${Z}`}function Qs$($){let Z=$?.ttlMs??120000,Q=$?.maxSize??1e4,Y=new Map;function X(){if(Y.size<=Q)return;let J=Date.now();for(let[G,W]of Y)if(W.expiresAt<=J)Y.delete(G);if(Y.size>Q){let G=Y.size-Q,W=0;for(let K of Y.keys()){if(W>=G)break;Y.delete(K),W++}}}return{get(J,G){let W=jK1(J,G),K=Y.get(W);if(!K)return;if(K.expiresAt<=Date.now()){Y.delete(W);return}return K.role},set(J,G,W){let K=jK1(J,G);Y.set(K,{role:W,expiresAt:Date.now()+Z}),X()},invalidate(J,G){Y.delete(jK1(J,G))}}}class EK1{options;subscriptions=[];localEmit=null;originId=crypto.randomUUID();encoder=new TextEncoder;seenMessageIds=new Set;constructor($){this.options=$}async start($){if($)this.localEmit=$;if(this.subscriptions.length>0)return;if(!this.localEmit)return;let Z=this.options.getConnection();if(!Z)return;let Q=new TextDecoder;this.subscriptions=Ys$.map((Y)=>Z.subscribe(Y));for(let Y of this.subscriptions)(async()=>{for await(let X of Y)try{let J=JSON.parse(Q.decode(X.data));if(typeof J?.originId!=="string"||typeof J?.organizationId!=="string"||typeof J?.event?.id!=="string"||typeof J?.event?.type!=="string")continue;if(J.originId===this.originId)continue;if(typeof J.messageId==="string"&&this.hasSeen(J.messageId))continue;this.localEmit?.(J.organizationId,J.event)}catch{}})().catch((X)=>{console.error("[NatsSSEBroadcast] Subscription error:",X)})}broadcast($,Z){this.localEmit?.($,Z);let Q={originId:this.originId,messageId:crypto.randomUUID(),organizationId:$,event:Z};try{let Y=this.options.getConnection();if(!Y)return;let X=this.encoder.encode(JSON.stringify(Q));for(let J of Ys$)Y.publish(J,X)}catch(Y){console.warn("[NatsSSEBroadcast] Publish failed (non-critical):",Y)}}async stop(){for(let $ of this.subscriptions)$.unsubscribe();this.subscriptions=[],this.seenMessageIds.clear(),this.localEmit=null}hasSeen($){if(this.seenMessageIds.has($))return!0;if(this.seenMessageIds.add($),this.seenMessageIds.size>1000){let Z=this.seenMessageIds.values().next().value;if(Z)this.seenMessageIds.delete(Z)}return!1}}var Ys$;var Xs$=D(()=>{Ys$=["studio.sse.broadcast","mesh.sse.broadcast"]});async function qq6($,Z,Q=5){try{await g8(Z,{maxAttempts:Q,minTimeout:1000,maxTimeout:1e4,jitter:0})}catch(Y){console.error(`${$} Deferred start failed:`,Y instanceof i5?Y.cause:Y)}}function Js$($){let Z=new EK1({getConnection:()=>$.getConnection()});e5.start(Z).catch((Q)=>{console.error("[SSEHub] Failed to start broadcast strategy:",Q)}),$.onReady(()=>{qq6("[NatsSSEBroadcast]",()=>Z.start())})}var zK1=D(()=>{D8();Xs$();t00();t00()});var Gs$=()=>{};var PK1=()=>{};var Ws$=()=>{};var Mq6,RaZ;var Ks$=D(()=>{Gs$();PK1();VL();Ws$();Mq6={br:".br",zstd:".zst",gzip:".gz"},RaZ=Object.keys(Mq6)});var Hs$=D(()=>{Ks$()});var Fs$=()=>{};var Us$=D(()=>{Fs$()});var Ns$=()=>{};var Bs$=D(()=>{Yt0()});var AK1=D(()=>{kL();Bs$()});var TK1="x-hono-disable-ssg",maZ;var RK1=D(()=>{AK1();maZ=(()=>{try{return new Response("SSG is disabled",{status:404,headers:{[TK1]:"true"}})}catch{return null}})()});var Os$=D(()=>{BX0()});var qK1=D(()=>{Os$()});var Ds$=D(()=>{Us$();Ns$();PK1();RK1();qK1();AK1()});var Ls$=D(()=>{RK1();qK1();Ds$()});var qsZ;var ws$=D(()=>{Ls$();({write:qsZ}=Bun)});var kq6=class{#$;constructor($){this.#$=$,this.raw=$.raw,this.url=$.url?new URL($.url):null,this.protocol=$.protocol??null}send($,Z){this.#$.send($,Z??{})}raw;binaryType="arraybuffer";get readyState(){return this.#$.readyState}url;protocol;close($,Z){this.#$.close($,Z)}},js$=($)=>{return(...Z)=>{if(typeof Z[0]==="function"){let[Q,Y]=Z;return async function(J,G){let W=await Q(J),K=await $(J,W,Y);if(K)return K;await G()}}else{let[Q,Y,X]=Z;return(async()=>{let J=await $(Q,Y,X);if(!J)throw Error("Failed to upgrade WebSocket");return J})()}}};var Es$=()=>{};var K80=($)=>("server"in $.env)?$.env.server:$.env;var EV0=()=>{};var Sq6;var zs$=D(()=>{Es$();EV0();Sq6=js$(($,Z)=>{let Q=K80($);if(!Q)throw TypeError("env has to include the 2nd argument of fetch.");if(Q.upgrade($.req.raw,{data:{events:Z,url:new URL($.req.url),protocol:$.req.url}}))return new Response(null);return})});var H80=($)=>{let Z=K80($);if(!Z)throw TypeError("env has to include the 2nd argument of fetch.");if(typeof Z.requestIP!=="function")throw TypeError("server.requestIP is not a function.");let Q=Z.requestIP($.req.raw);if(!Q)return{remote:{}};return{remote:{address:Q.address,addressType:Q.family==="IPv6"||Q.family==="IPv4"?Q.family:void 0,port:Q.port}}};var Ps$=D(()=>{EV0()});var MK1=D(()=>{Hs$();ws$();zs$();Ps$();EV0()});var As$;var Ts$=D(()=>{As$={google:{name:"Google",icon:"https://assets.decocache.com/webdraw/eb7480aa-a68b-4ce4-98ff-36aa121762a7/google.svg"},github:{name:"GitHub",icon:"https://assets.decocache.com/decocms/e02ce92e-6684-41a6-acfc-432977eb4878/github.png"},microsoft:{name:"Microsoft",icon:"https://assets.decocache.com/mcp/aa6f6e1a-6526-4bca-99cc-82e2ec38b0e4/microsoft.png"}}});function Rs$(){let $=Object.keys(R4.socialProviders??{}),Z=$.length>0,Q=$.map((X)=>({name:X,icon:As$[X].icon})),Y=E0().localMode;return{emailAndPassword:{enabled:R4.emailAndPassword?.enabled??!1},magicLink:{enabled:R4.magicLinkConfig?.enabled??!1},emailOtp:{enabled:R4.emailOtpConfig?.enabled??!1},resetPassword:{enabled:$V0},socialProviders:{enabled:Z,providers:Q},sso:R4.ssoConfig?{enabled:!0,providerId:R4.ssoConfig.providerId}:{enabled:!1},stdioEnabled:Y,localMode:GO()}}async function Cq6($,Z,Q){try{if(!R4.inviteEmailProviderId||!R4.emailProviders||R4.emailProviders.length===0)return;let Y=wG(R4.emailProviders,R4.inviteEmailProviderId);if(!Y)return;let X=await $.selectFrom("member").innerJoin("user","user.id","member.userId").select(["user.email as email","member.role as role"]).where("member.organizationId","=",Z.id).execute(),J=Lo,G=X.filter((H)=>(H.role??"").split(",").map((F)=>F.trim()).some((F)=>J.includes(F)));if(G.length===0)return;let W=LG(Y),K=`${a9()}/${Z.slug}/settings/members`;await Promise.allSettled(G.map((H)=>W({to:H.email,subject:`New request to join ${Z.name}`,html:jG({preheader:`${Q} requested to join ${Z.name}.`,heading:"New join request",subheading:`<strong>${Q}</strong> requested to join <strong>${Z.name}</strong> on deco Studio.`,body:SP("Review request",K),footnote:"You can approve or deny this request from your members settings."})})))}catch(Y){console.error("[Auth] Failed to notify admins of join request:",Y)}}var AO,qs$;var IK1=D(()=>{G8();MK1();U6();F$();gG();c3();jW1();v01();aI0();kP();GY();E9();Di0();Ts$();rx();Hu();AO=new Q1;AO.post("/local-session",async($)=>{if(!GO())return $.json({success:!1,error:"Local mode is not active"},403);let Z;try{Z=H80($).remote.address}catch{}if(!(Z==="127.0.0.1"||Z==="::1"||Z==="::ffff:127.0.0.1"))return $.json({success:!1,error:"Forbidden"},403);try{let{waitForSeed:Y}=await Promise.resolve().then(() => (rx(),qT0));await Y();let{auth:X}=await Promise.resolve().then(() => (gG(),wr$)),J=await t91();if(!J)return $.json({success:!1,error:"Local admin user not found"},500);let G=await RT0();return await X.api.signInEmail({body:{email:J.email,password:G},asResponse:!0})}catch(Y){return console.error("Failed to create local session:",Y),$.json({success:!1,error:Y instanceof Error?Y.message:"Failed to create local session"},500)}});AO.get("/my-capabilities/:slug",async($)=>{let Z=$.req.param("slug"),Q=await C8.api.getSession({headers:$.req.raw.headers});if(!Q?.user)return $.json({error:"Authentication required"},401);let Y=S8().db,X=await Y.selectFrom("organization").select(["id"]).where("slug","=",Z).executeTakeFirst();if(!X)return $.json({role:null,capabilities:{}});let G=(await Y.selectFrom("member").select(["role"]).where("userId","=",Q.user.id).where("organizationId","=",X.id).executeTakeFirst())?.role??null;if(!G)return $.json({role:null,capabilities:{}});if(jZ(G))return $.json({role:G,capabilities:Bo1()});if(G==="user")return $.json({role:G,capabilities:qi0({self:[...vQ0]})});let W=await Y.selectFrom("organizationRole").select(["permission"]).where("role","=",G).where("organizationId","=",X.id).executeTakeFirst(),K={},H=W?.permission;if(typeof H==="string")try{let F=JSON.parse(H);if(F&&typeof F==="object"&&!Array.isArray(F))K=F}catch{K={}}return $.json({role:G,capabilities:qi0(K)})});AO.get("/domain-lookup",async($)=>{let Z=await C8.api.getSession({headers:$.req.raw.headers});if(!Z?.user)return $.json({success:!1,error:"Authentication required"},401);if(!Z.user.emailVerified)return $.json({found:!1,organizations:[]});let Q=Z.user.email?.split("@")[1]?.toLowerCase();if(!Q||tK.has(Q))return $.json({found:!1,organizations:[]});try{let X=(await new OG(S8().db).getAllByDomain(Q)).filter(rI0);if(X.length===0)return $.json({found:!1,organizations:[]});let J=await S8().db.selectFrom("organization").select(["id","name","slug","logo","metadata"]).where("id","in",X.map((K)=>K.organizationId)).execute(),G=new Map(J.map((K)=>[K.id,K])),W=X.map((K)=>{let H=G.get(K.organizationId);if(!H)return null;if(P9(H))return null;return{id:H.id,name:H.name,slug:H.slug,logo:H.logo,joinMode:K.joinMode}}).filter((K)=>K!==null);return $.json({found:W.length>0,organizations:W})}catch(Y){return console.error("[Auth] Domain lookup failed:",Y),$.json({success:!1,error:"Domain lookup failed"},500)}});AO.post("/domain-join",async($)=>{let Z=await C8.api.getSession({headers:$.req.raw.headers});if(!Z?.user)return $.json({success:!1,error:"Authentication required"},401);if(!Z.user.emailVerified)return $.json({success:!1,error:"Email must be verified to join"},403);let Q=Z.user.email?.split("@")[1]?.toLowerCase();if(!Q||tK.has(Q))return $.json({success:!1,error:"Generic email domains cannot auto-join"},403);let Y=await $.req.json().catch(()=>({})),X=typeof Y.organizationSlug==="string"&&Y.organizationSlug.trim()?Y.organizationSlug.trim():null;try{let J=S8().db,K=(await new OG(J).getAllByDomain(Q)).filter((B)=>B.verificationStatus==="verified"&&B.joinMode==="auto");if(K.length===0)return $.json({success:!1,error:"Auto-join is not available for this domain"},403);let H=await J.selectFrom("organization").select(["id","slug","metadata"]).where("id","in",K.map((B)=>B.organizationId)).execute(),F=new Map(H.filter((B)=>!P9(B)).map((B)=>[B.id,{id:B.id,slug:B.slug}])),U=K.flatMap((B)=>{let O=F.get(B.organizationId);return O?[O]:[]});if(U.length===0)return $.json({success:!1,error:"Auto-join is not available for this domain"},403);let N;if(X){let B=U.find((O)=>O.slug===X);if(!B)return $.json({success:!1,error:"This organization is not available for auto-join with your email domain."},403);N=B}else if(U.length===1)N=U[0];else return $.json({success:!1,error:"Multiple organizations match this domain. Please pick one.",requiresSelection:!0},409);try{await C8.api.addMember({body:{userId:Z.user.id,role:"user",organizationId:N.id}})}catch(B){if(!Sw(B))return console.error("[Auth] Domain join addMember failed:",B),$.json({success:!1,error:"Failed to join organization"},500)}return f1.capture({distinctId:Z.user.id,event:"organization_domain_joined",groups:{organization:N.id},properties:{organization_id:N.id,organization_slug:N.slug,email_domain:Q}}),$.json({success:!0,slug:N.slug})}catch(J){return f1.captureException(J,Z.user.id),console.error("[Auth] Domain join failed:",J),$.json({success:!1,error:"Failed to join organization"},500)}});AO.post("/domain-setup",async($)=>{let Z=await C8.api.getSession({headers:$.req.raw.headers});if(!Z?.user)return $.json({success:!1,error:"Authentication required"},401);if(!Z.user.emailVerified)return $.json({success:!1,error:"Email must be verified"},403);let Q=Z.user.email?.split("@")[1]?.toLowerCase();if(!Q||tK.has(Q))return $.json({success:!1,error:"Corporate email required"},403);let Y=await $.req.json().catch(()=>({})),X=typeof Y.name==="string"&&Y.name.trim().length>0?Y.name.trim():null,J=typeof Y.logo==="string"&&Y.logo.length>0?Y.logo:null,G=Y.claimDomain!==!1;try{let W=S8().db,K=new OG(W),H=await K.getAllByDomain(Q);if(H.length>0){let z=await W.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["organization.slug"]).where("member.userId","=",Z.user.id).where("member.organizationId","in",H.map((T)=>T.organizationId)).executeTakeFirst();if(z)return $.json({success:!0,slug:z.slug,alreadyExists:!0})}let F=Q.split(".")[0]??Q,U=X??F.charAt(0).toUpperCase()+F.slice(1),N=(X??F).toLowerCase().trim().replace(/[^a-z0-9\s_-]+/g,"").replace(/[\s_-]+/g,"-").replace(/^-+|-+$/g,"")||F.toLowerCase().replace(/[^a-z0-9-]/g,""),B=null;for(let T=0;T<3;T++){let P=T===0?"":`-${Math.random().toString(36).slice(2,6)}`,A=T===0?U:`${U}${P}`,q=`${N}${P}`;try{B=await C8.api.createOrganization({body:{name:A,slug:q,userId:Z.user.id}});break}catch(x){if(!(x instanceof Error&&("body"in x)&&x.body?.code==="ORGANIZATION_ALREADY_EXISTS")||T===2)throw x}}if(!B?.id)throw Error("Failed to create organization");let O=B.id;if(G)await K.add(O,Q,{joinMode:"auto",verificationStatus:"verified",verificationMethod:"email"});let L=!1,w=null,j=null;try{let z=E0().firecrawlApiKey;if(z){let T=await a30(Q,z,U);if(T){let P=new No(S8().db),A=await P.create(O,T);if(await P.setDefault(A.id,O),L=!0,T.name&&T.name!==U)w=T.name;j=T.favicon??T.logo??null}}}catch(z){console.error("[Auth] Brand extraction failed (non-fatal):",z)}let E={};if(!X&&w)E.name=w;if(J)E.logo=J;else if(j)E.logo=j;if(Object.keys(E).length>0)try{await C8.api.updateOrganization({headers:$.req.raw.headers,body:{organizationId:O,data:E}})}catch(z){console.error("[Auth] Org update failed (non-fatal):",z)}return f1.identify({distinctId:Z.user.id,properties:{email:Z.user.email,$set:{email:Z.user.email},$set_once:{first_organization_created_at:new Date().toISOString()}}}),f1.groupIdentify({groupType:"organization",groupKey:O,properties:{name:B.slug??N,slug:B.slug??N,email_domain:Q,brand_extracted:L,created_at:new Date().toISOString()}}),f1.capture({distinctId:Z.user.id,event:"organization_created",groups:{organization:O},properties:{organization_id:O,organization_slug:B.slug??N,email_domain:Q,brand_extracted:L}}),$.json({success:!0,slug:B.slug??N,brandExtracted:L})}catch(W){return f1.captureException(W,Z.user?.id),console.error("[Auth] Domain setup failed:",W),$.json({success:!1,error:"Failed to set up organization"},500)}});AO.get("/org-access-status/:slug",async($)=>{let Z=$.req.param("slug"),Q=await C8.api.getSession({headers:$.req.raw.headers});if(!Q?.user)return $.json({success:!1,error:"Authentication required"},401);let Y=S8().db,X=await Y.selectFrom("organization").select(["id","name","slug","logo"]).where("slug","=",Z).executeTakeFirst();if(!X)return $.json({status:"not-found"});let J={id:X.id,name:X.name,slug:X.slug,logo:X.logo};if(await Y.selectFrom("member").select(["id"]).where("userId","=",Q.user.id).where("organizationId","=",X.id).executeTakeFirst())return $.json({status:"member",organization:J});try{let W=await C8.api.listUserInvitations({headers:$.req.raw.headers}),K=Date.now(),H=W.find((F)=>F.organizationId===X.id&&F.status==="pending"&&new Date(F.expiresAt).getTime()>K);if(H)return $.json({status:"pending-invite",invitation:{id:H.id},organization:J})}catch(W){console.error("[Auth] listUserInvitations failed:",W)}if(Q.user.emailVerified){let W=Q.user.email?.split("@")[1]?.toLowerCase();if(W&&!tK.has(W)){let K=await new OG(Y).getByOrgAndDomain(X.id,W);if(K?.verificationStatus==="verified"){if(K.joinMode==="auto")return $.json({status:"auto-domain-join",organization:{...J,domain:W}});if(K.joinMode==="request"){let H=await new Ku(Y).getPending(X.id,Q.user.id);return $.json({status:H?"request-pending":"can-request",organization:{...J,domain:W}})}}}}return $.json({status:"no-access",organization:J})});AO.post("/domain-request-join",async($)=>{let Z=await C8.api.getSession({headers:$.req.raw.headers});if(!Z?.user)return $.json({success:!1,error:"Authentication required"},401);if(!Z.user.emailVerified)return $.json({success:!1,error:"Email must be verified to request access"},403);let Q=Z.user.email?.split("@")[1]?.toLowerCase();if(!Q||tK.has(Q))return $.json({success:!1,error:"Generic email domains cannot request access"},403);let Y=await $.req.json().catch(()=>({})),X=typeof Y.organizationSlug==="string"&&Y.organizationSlug.trim()?Y.organizationSlug.trim():null;if(!X)return $.json({success:!1,error:"organizationSlug is required"},400);try{let J=S8().db,G=await J.selectFrom("organization").select(["id","slug","name"]).where("slug","=",X).executeTakeFirst();if(!G)return $.json({success:!1,error:"Organization not found"},404);let W=await new OG(J).getByOrgAndDomain(G.id,Q);if(!W||W.verificationStatus!=="verified"||W.joinMode!=="request")return $.json({success:!1,error:"This organization is not accepting requests for your domain."},403);if(await J.selectFrom("member").select(["id"]).where("userId","=",Z.user.id).where("organizationId","=",G.id).executeTakeFirst())return $.json({success:!0,slug:G.slug,alreadyMember:!0});return await new Ku(J).create(G.id,Z.user.id),await Cq6(J,G,Z.user.email),f1.capture({distinctId:Z.user.id,event:"organization_join_requested",groups:{organization:G.id},properties:{organization_id:G.id,organization_slug:G.slug,email_domain:Q}}),$.json({success:!0,status:"pending"})}catch(J){return f1.captureException(J,Z.user.id),console.error("[Auth] Domain request-join failed:",J),$.json({success:!1,error:"Failed to request access"},500)}});AO.post("/ensure-organization",async($)=>{let Z=null;try{if(Z=await C8.api.getSession({headers:$.req.raw.headers}),!Z?.user)return $.json({success:!1,error:"Authentication required"},401);let Q=await sI0({db:S8().db,authApi:C8.api,user:{id:Z.user.id,email:Z.user.email,name:Z.user.name??null,emailVerified:!!Z.user.emailVerified},allowCreate:!0,createdVia:"commerce_onboarding_recovery"});if(Q.status==="ambiguous")return $.json({success:!1,status:Q.status,domain:Q.domain,organizations:Q.organizations});if(Q.status==="skipped")return $.json({success:!1,status:Q.status,reason:Q.reason,domain:Q.domain,error:"Organization creation is not available."},409);if(Q.status==="already_has_organization")return $.json({success:!0,status:Q.status,organization:Q.organization,domain:Q.domain});return $.json({success:!0,status:Q.status,organization:Q.organization,domain:Q.domain})}catch(Q){let Y=Z?.user?.id;if(Y)f1.captureException(Q,Y);return console.error("[Auth] ensure organization failed:",Q),$.json({success:!1,error:"Failed to ensure organization"},500)}});qs$=AO});import{createHmac as _q6}from"crypto";function Ms$($){return/^Bearer\s+(.+)$/i.exec($.get("authorization")??"")?.[1]?.trim()||null}function Is$($){if(!$||typeof $!=="object"||!("userId"in $)||typeof $.userId!=="string")return null;return $.userId}function vq6($){if(!$||typeof $!=="object"||!("user"in $))return null;let{user:Z}=$;if(!Z||typeof Z!=="object"||!("id"in Z)||typeof Z.id!=="string")return null;return Z.id}function bq6($){if(!$||typeof $!=="object"||!("valid"in $)||$.valid!==!0||!("key"in $))return null;return Is$($.key)}async function Vs$($){let Z=new Headers({authorization:`Bearer ${$}`,"X-MCP-Session-Auth":"true"}),Q=await C8.api.getMcpSession({headers:Z}).catch(()=>null),Y=Is$(Q);if(Y)return Y;let X=await C8.api.verifyApiKey({body:{key:$}}).catch(()=>null);return bq6(X)}function xq6($,Z){let Q=_q6("sha256",Z).update($).digest("base64");return encodeURIComponent(`${$}.${Q}`)}var VK1,ks$;var Ss$=D(()=>{G8();gG();VK1=new Q1;VK1.get("/me",async($)=>{let Z=Ms$($.req.raw.headers),Q;if(Z)Q=await Vs$(Z);else{let Y=await C8.api.getSession({headers:$.req.raw.headers}).catch(()=>null);Q=vq6(Y)}if(!Q)return $.json({error:"unauthorized"},401);return $.json({userId:Q})});VK1.post("/session-from-oauth",async($)=>{let Z=Ms$($.req.raw.headers);if(!Z)return $.json({error:"unauthorized"},401);let Q=await Vs$(Z);if(!Q)return $.json({error:"unauthorized"},401);try{let Y=await C8.$context,X=await Y.internalAdapter.createSession(Q,!1),J=xq6(X.token,Y.secret);return $.json({sessionToken:J})}catch(Y){return console.error("[desktop-auth] failed to mint a session from an OAuth bearer:",Y instanceof Error?Y.message:String(Y)),$.json({error:"failed to mint a session"},500)}});ks$=VK1});var nd=($)=>{let Z=$.req.header("sec-fetch-dest");if(Z!==void 0)return Z==="document";let Q=$.req.header("accept")??"";return Q.includes("text/html")&&!/text\/html\s*;\s*q\s*=\s*0/.test(Q)};function fq6($){let Z=$.req.path;return $.req.method==="GET"&&/\/fs\/[^/]+\/read$/.test(Z)||$.req.method==="POST"&&/\/fs\/[^/]+\/unlock$/.test(Z)}function kK1($){let Z=$.auth?.apiKey?.metadata;if(!Z||typeof Z!=="object"||Array.isArray(Z)||!("organization"in Z))return{present:!1};let Q=Z.organization;if(!Q||typeof Q!=="object"||Array.isArray(Q))return{present:!0};let Y=Q.id;return{present:!0,id:typeof Y==="string"?Y:void 0}}function gq6($){let Z=$.split("/").filter(Boolean);if(Z[0]!=="api")return!1;let Q=Z.slice(2);return yq6.some((Y)=>Y.length===Q.length&&Y.every((X,J)=>X==="*"||X===Q[J]))}var yq6,td=async($,Z)=>{let Q=$.req.param("org");if(!Q)return $.json({error:"org slug missing in path"},400);let Y=$.get("studioContext");if(!Y?.db)return $.json({error:"studioContext not initialized"},500);let X=Y.db,J=gq6($.req.path),G=await X.selectFrom("organization").select(["id","slug","name","metadata"]).where((F)=>J?F.or([F("slug","=",Q),F("id","=",Q)]):F("slug","=",Q)).executeTakeFirst();if(!G){if(nd($))return $.redirect(`/${encodeURIComponent(Q)}`,302);return $.json({error:`organization "${Q}" not found`},404)}let W=kK1(Y);if(Y.auth?.apiKey?.id&&W.present&&W.id!==G.id)return $.json({error:"forbidden: API key is scoped to another organization"},403);if(Y.auth?.tokenOrganizationId&&Y.auth.tokenOrganizationId!==G.id)return $.json({error:"forbidden: token is scoped to another organization"},403);if(P9(G)){if(nd($))return $.redirect(`/${encodeURIComponent(Q)}`,302);return $.json({error:`organization "${Q}" not found`},404)}let K=Y.auth?.user?.id,H;if(K){let F=await X.selectFrom("member").select(["role"]).where("userId","=",K).where("organizationId","=",G.id).executeTakeFirst();if(F)H=F.role;else if(await H91(X,K))YO({action:"org_scope_admit",actorUserId:K,targetOrgId:G.id,method:$.req.method,route:$.req.path}),H="owner";else if(!fq6($)){if(nd($))return $.redirect(`/${encodeURIComponent(G.slug)}`,302);return $.json({error:"forbidden: not a member of organization"},403)}}return Y.organization={id:G.id,slug:G.slug,name:G.name,role:H},Y.access.setOrganizationId(G.id),Y.access.setRole(H),Vj(Y,G),await Z()};var zV0=D(()=>{iF();Lm();yq6=[["vault","connections","*","access-token"],["vault","connections","*","configuration"],["internal","task-board","import"],["internal","commerce-diagnostic","share-invite"],["internal","organization-notices"],["internal","repositories","resolve"],["internal","repositories","*","tree"],["internal","repositories","*","file"],["internal","repositories","*","search"],["internal","repositories","*","change-requests"],["internal","repositories","*","commits"]]});function hq6($){if(DQ($.id)!==null)return!0;if(ym1($.id))return!0;let Z=$.metadata?.liveAgentId;return typeof Z==="string"&&Z.length>0}function uq6($,Z){let Q=new Map,Y=(X)=>{let J=Q.get(X);if(J)return J;let G=(async()=>{if(!(await $.storage.orgSsoConfig.getByOrgId(X))?.enforced)return!0;return await $.storage.orgSsoSessions.isValid(Z,X)})();return Q.set(X,G),G};return async(X)=>{let J=await Promise.all(X.map((G)=>Y(G.orgId)));return X.filter((G,W)=>J[W]===!0)}}function lq6($){let Z=$.auth?.apiKey?.id?kK1($):{present:!1,id:void 0};if(Z.present&&!Z.id)return PV0;let Q=$.auth?.tokenOrganizationId;if(Z.id&&Q&&Z.id!==Q)return PV0;let Y=Z.id??Q??null;if(Y===null&&$.auth?.apiKey?.id)return PV0;return Y}var Cs$="/api/_me",PV0,cq6=256,mq6=20,dq6=50,iq6=10,pq6=5,_s$=()=>{let $=new Q1;return $.get("/projects/search",async(Z)=>{let Q=Z.get("studioContext");Z.header("Cache-Control","private, no-store");let Y=p0(Q);if(!Y)return Z.json({error:"Unauthorized"},401);let X=lq6(Q);if(X===PV0)return Z.json({error:"forbidden: credential is scoped to another organization"},403);let J=(Z.req.query("q")??"").trim();if(!J)return Z.json({items:[]});if(J.length>cq6)return Z.json({error:"query too long"},400);let G=Number.parseInt(Z.req.query("limit")??"",10),W=Number.isFinite(G)&&G>0?Math.min(G,dq6):mq6,K=uq6(Q,Y),H=W+iq6,F=[];for(let U=0;U<pq6&&F.length<W;U++){let N=await Q.storage.virtualMcps.searchAcrossMemberships({userId:Y,term:J,limit:H,offset:U*H,organizationId:X}),B=N.filter((O)=>!hq6(O)).filter((O)=>!P9({metadata:O.organization_metadata})).map((O)=>({id:O.id,title:O.title,icon:O.icon,orgId:O.organization_id,orgName:O.organization_name,orgSlug:O.organization_slug}));if(F.push(...await K(B)),N.length<H)break}return Z.json({items:F.slice(0,W)})}),$};var vs$=D(()=>{G8();e8();zV0();PV0=Symbol("deny")});var bs$="Payload Too Large",xs$,I5=($)=>{let Z=$.onError||(()=>{let Y=new Response(bs$,{status:413});throw new A$(413,{res:Y})}),Q=$.maxSize;return async function(X,J){if(!X.req.raw.body)return J();let G=X.req.raw.headers.has("transfer-encoding"),W=X.req.raw.headers.has("content-length");if(W&&!G)return parseInt(X.req.raw.headers.get("content-length")||"0",10)>Q?Z(X):J();let K=0,H=X.req.raw.body.getReader(),U={body:new ReadableStream({async start(N){try{for(;;){let{done:B,value:O}=await H.read();if(B)break;if(K+=O.length,K>Q){N.error(new xs$(bs$));break}N.enqueue(O)}}finally{N.close()}}}),duplex:"half"};if(X.req.raw=new Request(X.req.raw,U),await J(),X.error instanceof xs$)X.res=await Z(X)}};var fW=D(()=>{TK();xs$=class extends Error{constructor($){super($);this.name="BodyLimitError"}}});import{createHash as nq6}from"crypto";function F80($,Z,Q=0){return Z.every((Y,X)=>$[Q+X]===Y)}function ys$($){if(F80($,[137,80,78,71,13,10,26,10]))return{mime:"image/png",ext:"png"};if(F80($,[255,216,255]))return{mime:"image/jpeg",ext:"jpg"};if(F80($,[71,73,70,56])&&($[4]===55||$[4]===57)&&$[5]===97)return{mime:"image/gif",ext:"gif"};if(F80($,[82,73,70,70])&&F80($,[87,69,66,80],8))return{mime:"image/webp",ext:"webp"};return null}function CK1($){return lH($)}function rq6($,Z){let Q=nq6("sha256").update($).digest("hex");return`${AV0}/${Q}.${Z}`}function RV0($,Z,Q){let Y=new URLSearchParams({path:Q}).toString();return`${$.replace(/\/$/,"")}${TV0}/fs/${encodeURIComponent(Z)}/read?${Y}`}function od($){let Z=$X(),Q=Z?KG(Z,SK1):new q3(SK1,$.baseUrl);return new M3(Q,$.storage.orgFsEntries,SK1,tq6)}async function U80($,Z){return(await $.listDir(Z,AV0).catch(()=>[])).filter((Y)=>Y.kind==="file").sort((Y,X)=>X.updatedAt.localeCompare(Y.updatedAt))}async function gs$($,Z){return(await U80($,Z)).map((Y)=>({path:Y.path,current:Y.readPublic,updatedAt:Y.updatedAt}))}async function aq6($,Z){if((await $.stat(Z,AV0))?.readPublic)await $.setReadPublic(Z,AV0,!1,{actor:Z})}async function _K1($,Z,Q){let Y=await U80($,Z);if(!Y.some((X)=>X.path===Q))throw new ZX(`No such avatar: ${Q}`);await aq6($,Z),await $.setReadPublic(Z,Q,!0,{actor:Z}),await Promise.all(Y.filter((X)=>X.path!==Q&&X.readPublic).map((X)=>$.setReadPublic(Z,X.path,!1,{actor:Z})))}async function sq6($,Z,Q){try{let X=(await U80($,Z)).filter((J)=>J.path!==Q).slice(oq6-1);await Promise.all(X.map((J)=>$.delete(Z,J.path,{actor:Z})))}catch(Y){console.warn("[user-fs] failed to evict old avatars",Y)}}async function hs$($,Z){let{userId:Q,bytes:Y,contentType:X,ext:J}=Z,G=rq6(Y,J);return await $.write(Q,G,Y,{actor:Q,contentType:X}),await _K1($,Q,G),await sq6($,Q,G),G}async function us$($,Z,Q){if(!(await U80($,Z)).some((X)=>X.path===Q))throw new ZX(`No such avatar: ${Q}`);await $.delete(Z,Q,{actor:Z})}async function ls$($,Z){try{let Q=await U80($,Z);await Promise.all(Q.map((Y)=>$.delete(Z,Y.path,{actor:Z})))}catch(Q){console.warn("[user-fs] failed to clear avatars",Q)}}var SK1="org_user_fs",TV0="/api/_users",AV0="avatars",tq6,fs$=2097152,oq6=5;var vK1=D(()=>{dg();ID();CN();Rz();tq6={maxFileBytes:5242880,volumeQuotaBytes:67108864}});function N80($,Z,Q,Y){let X=v7(Q),J={"Content-Type":X,"X-Content-Type-Options":"nosniff","Cache-Control":Y?"public, max-age=0, must-revalidate":"private, max-age=0"};if(X.startsWith("text/html"))J["Content-Security-Policy"]="sandbox allow-scripts allow-modals allow-same-origin allow-downloads";return $.body(Buffer.from(Z),200,J)}var bK1=D(()=>{YK()});function qV0($,Z){if(Z instanceof ZX)return $.json({error:Z.message},404);if(Z instanceof HG)return $.json({error:Z.message},400);if(Z instanceof qz)return $.json({error:Z.message},413);return console.error("[user-fs] request failed",Z),$.json({error:"Internal error"},500)}function MV0($){let Q=$.get("studioContext").auth?.user?.id;if(!Q)return{ok:!1,res:$.json({error:"Unauthorized"},401)};if(!CK1(Q))return{ok:!1,res:$.json({error:"Unsupported user id"},400)};return{ok:!0,userId:Q}}var cs$=()=>{let $=new Q1;return $.get("/fs/:userId/read",async(Z)=>{let Q=Z.req.param("userId"),Y=Z.req.query("path")??"";if(!CK1(Q))return Z.json({error:"Invalid user id"},400);let X=Z.get("studioContext"),J=od(X),W=(await J.resolveReadAccess(Q,Y).catch(()=>({access:"private"}))).access==="public";if(!W&&X.auth?.user?.id!==Q)return Z.json({error:"Not found"},404);try{return N80(Z,await J.read(Q,Y),Y,W)}catch(K){return qV0(Z,K)}}),$.post("/avatar",I5({maxSize:fs$,onError:(Z)=>Z.json({error:"Avatar exceeds the size limit"},413)}),async(Z)=>{let Q=MV0(Z);if(!Q.ok)return Q.res;let{userId:Y}=Q,X=Z.get("studioContext"),J=new Uint8Array(await Z.req.arrayBuffer());if(J.byteLength===0)return Z.json({error:"Empty request body"},400);let G=ys$(J);if(!G)return Z.json({error:"Avatar must be a PNG, JPEG, GIF or WebP image"},415);try{let W=await hs$(od(X),{userId:Y,bytes:J,contentType:G.mime,ext:G.ext});return Z.json({url:RV0(X.baseUrl,Y,W)})}catch(W){return qV0(Z,W)}}),$.get("/avatars",async(Z)=>{let Q=MV0(Z);if(!Q.ok)return Q.res;let Y=Z.get("studioContext"),X=await gs$(od(Y),Q.userId);return Z.json({avatars:X.map((J)=>({...J,url:RV0(Y.baseUrl,Q.userId,J.path)}))})}),$.post("/avatar/select",async(Z)=>{let Q=MV0(Z);if(!Q.ok)return Q.res;let Y=Z.get("studioContext"),X=await Z.req.json().catch(()=>null);if(typeof X?.path!=="string"||!X.path)return Z.json({error:"Body must be { path: string }"},400);try{return await _K1(od(Y),Q.userId,X.path),Z.json({url:RV0(Y.baseUrl,Q.userId,X.path)})}catch(J){return qV0(Z,J)}}),$.delete("/avatar",async(Z)=>{let Q=MV0(Z);if(!Q.ok)return Q.res;let Y=Z.get("studioContext"),X=od(Y),J=Z.req.query("path");if(!J)return await ls$(X,Q.userId),Z.json({ok:!0});try{return await us$(X,Q.userId,J),Z.json({ok:!0})}catch(G){return qV0(Z,G)}}),$};var ms$=D(()=>{G8();fW();CN();vK1();bK1()});import{z as rd}from"zod";var eq6,$M6,ZM6=200,QM6=2000,YM6=60,XM6=2000,JM6,IV0;var xK1=D(()=>{eq6=["warn","block"],$M6=rd.enum(eq6),JM6=rd.string().max(XM6).refine(($)=>{try{let Z=new URL($);return Z.protocol==="https:"||Z.protocol==="http:"}catch{return!1}},{message:"ctaUrl must be an absolute http(s) URL"}),IV0=rd.object({severity:$M6,title:rd.string().trim().min(1).max(ZM6),message:rd.string().trim().min(1).max(QM6),ctaLabel:rd.string().trim().max(YM6).nullable().optional(),ctaUrl:JM6.nullable().optional()}).refine(($)=>!$.ctaLabel===!$.ctaUrl,{message:"ctaLabel and ctaUrl must be set together",path:["ctaUrl"]})});import{z as fK1}from"zod";function yK1($){let Z=$??{},Q=new Set([...Object.keys(SA.shape),...Object.keys(Z)]),Y={};for(let X of Q)Y[X]=VQ(Z,X);return{flags:Z,effective:Y}}var GM6,ds$;var is$=D(()=>{MZ();GM6=fK1.string().min(1).max(64).regex(/^[a-z][a-z0-9]*(?:_[a-z0-9]+)*$/),ds$=fK1.record(GM6,fK1.boolean())});function ps$($,Z,Q){let Y=Q;for(;;){if(Y=$.indexOf(Z,Y),Y===-1)return-1;let X=$[Y+Z.length];if(X===void 0||X===`
3493
+ (SELECT created_at, id FROM notifications WHERE id = ${Q.cursor})`);let G=await J.execute(),W=G.slice(0,Y),K=await this.db.selectFrom("notifications").select((F)=>F.fn.countAll().as("count")).where("user_id","=",$).where("organization_id","=",Z).where("read_at","is",null).executeTakeFirst(),H=W[W.length-1];return{nextCursor:G.length>Y&&H?H.id:null,notifications:W.map((F)=>({id:F.id,taskBoardItemId:F.task_board_item_id,type:F.type,data:Om.parse(F.data),createdAt:RR6(F.created_at)})),unreadCount:Number(K?.count??0)}}async anchorExists($){return!!await this.db.selectFrom("notifications").select("id").where("id","=",$).executeTakeFirst()}async markRead($,Z,Q){if(Q&&Q.length===0)return 0;let Y=this.db.updateTable("notifications").set({read_at:new Date}).where("user_id","=",$).where("organization_id","=",Z).where("read_at","is",null);if(Q)Y=Y.where("id","in",Q);let X=await Y.executeTakeFirst();return Number(X.numUpdatedRows??0n)}async setSubscribed($,Z,Q){await this.db.insertInto("notification_subscriptions").values({id:s8("nsub"),user_id:$,task_board_item_id:Z,subscribed:Q}).onConflict((Y)=>Y.columns(["user_id","task_board_item_id"]).doUpdateSet({subscribed:Q,updated_at:new Date})).execute()}async notify($){await Dm({...$,db:this.db})}async notifyMentions($){await Ba$({...$,db:this.db})}async listSubscribers($){return(await this.db.selectFrom("notification_subscriptions").select("user_id").where("task_board_item_id","=",$).where("subscribed","=",!0).execute()).map((Q)=>Q.user_id)}}var AR6=20,TR6=50,RR6=($)=>$ instanceof Date?$.toISOString():$;var Da$=D(()=>{ZY();r20();a20();Oa$()});class eW1{db;constructor($){this.db=$}async create($,Z,Q){await this.deleteExpired(Z);let Y=crypto.randomUUID(),X=new Date(Date.now()+600000);return await this.db.insertInto("oauth_pkce_states").values({id:Y,organization_id:Z,user_id:Q,code_verifier:$,expires_at:X,created_at:new Date}).execute(),Y}async deleteExpired($){await this.db.deleteFrom("oauth_pkce_states").where("organization_id","=",$).where("expires_at","<",new Date).execute()}async consume($,Z,Q){let Y=await this.db.deleteFrom("oauth_pkce_states").where("id","=",$).where("organization_id","=",Z).where("user_id","=",Q).returningAll().executeTakeFirst();if(!Y)throw Error("Invalid or expired OAuth state token");if((Y.expires_at instanceof Date?Y.expires_at:new Date(Y.expires_at))<new Date)throw Error("OAuth state token has expired");return Y.code_verifier}}class $K1{db;vault;constructor($,Z){this.db=$;this.vault=Z}async upsert($){let Z=await this.vault.encrypt($.accessToken),Q=$.expiresAt??null,Y=new Date;return await this.db.insertInto("claude_subscriptions").values({user_id:$.userId,encrypted_access_token:Z,expires_at:Q,created_at:Y}).onConflict((X)=>X.column("user_id").doUpdateSet({encrypted_access_token:Z,expires_at:Q,created_at:Y})).execute(),{linkedAt:Y.toISOString(),expiresAt:Q?.toISOString()??null}}async find($){let Z=await this.db.selectFrom("claude_subscriptions").select(["created_at","expires_at"]).where("user_id","=",$).executeTakeFirst();if(!Z)return null;return{linkedAt:new Date(Z.created_at).toISOString(),expiresAt:Z.expires_at?new Date(Z.expires_at).toISOString():null}}async findLiveToken($){let Z=await this.db.selectFrom("claude_subscriptions").select(["encrypted_access_token","expires_at"]).where("user_id","=",$).executeTakeFirst();if(!Z)return null;if(Z.expires_at&&new Date(Z.expires_at).getTime()<=Date.now())return null;return this.vault.decrypt(Z.encrypted_access_token)}async delete($){await this.db.deleteFrom("claude_subscriptions").where("user_id","=",$).execute()}}function qR6($){return $.includes("/")?$.split("/").slice(1).join("/"):$}function MR6($){let Z=$.supported_parameters?.includes("tools")??!1,Q=$.supported_parameters?.includes("reasoning")??!1;return{providerId:"openrouter",modelId:qR6($.id),title:$.name,description:$.description||null,logo:null,capabilities:[...new Set([...$.architecture.input_modalities.map((Y)=>Y==="image"?"vision":Y),...$.architecture.output_modalities,...Z?["tools"]:[],...Q?["reasoning"]:[]])],limits:{contextWindow:$.context_length,maxOutputTokens:$.top_provider.max_completion_tokens||null},costs:{input:Number($.pricing.prompt)||0,output:Number($.pricing.completion)||0}}}function wa$($){let Z=new Map;for(let Q of $){let Y={description:Q.description,capabilities:Q.capabilities,limits:Q.limits,costs:Q.costs};Z.set(Q.modelId,Y);let X=Q.modelId.replace(/\./g,"-");if(X!==Q.modelId)Z.set(X,Y)}return Z}async function IR6($){if($){let Z=await $.get(La$,"openrouter");if(Z)return wa$(Z)}try{let Z=await FF("OpenRouter enrichment index","https://openrouter.ai/api/v1/models",{signal:AbortSignal.timeout(1e4)});if(!Z.ok)await FY("OpenRouter enrichment index",Z);let{data:Q}=await Z.json(),Y=Q.map(MR6);if($)await $.set(La$,"openrouter",Y);return wa$(Y)}catch{return new Map}}function VR6($){let Z=$.replace(/\./g,"-"),Q=$.replace(/-\d{8}$/,""),Y=Q.replace(/\./g,"-");return[...new Set([$,Z,Q,Y])]}function kR6($){return $.providerId==="anthropic"||$.modelId.startsWith("anthropic/")}function Ea$($,Z){if(kR6(Z)&&$.includes("vision")&&!$.includes("file"))return[...$,"file"];return $}function SR6($,Z){return $.map((Q)=>{let X=VR6(Q.modelId).map((W)=>Z.get(W)).find(Boolean),J=Q.capabilities.length?Q.capabilities:X?.capabilities??[],G=Ea$(J,Q);if(!X)return G===J?Q:{...Q,capabilities:G};return{...Q,description:Q.description??X.description??null,capabilities:G,limits:Q.limits??X.limits??null,costs:Q.costs??X.costs??null}})}class ZK1{storage;cache;constructor($,Z){this.storage=$;this.cache=Z}async activate($,Z){let{keyInfo:Q,apiKey:Y}=await this.storage.resolve($,Z),X=q9()[Q.providerId];if(!X)throw Error(`Unknown provider: ${Q.providerId}`);return X.create(Y)}async listDecisionModels($,Z){let Q=await this.activate($,Z);if(!Q.decisions?.listModels)throw Error("Provider does not support decision model discovery");let Y=`${Q.info.id}:decisions`,X=await this.cache?.get(Z,Y);if(X)return X;let J=new Set,G=(await Q.decisions.listModels()).filter((W)=>{if(W.deprecated||!W.capabilities.includes("decisions")||J.has(W.modelId))return!1;return J.add(W.modelId),!0}).map((W)=>({...W,providerId:Q.info.id}));return await this.cache?.set(Z,Y,G),G}async listModels($,Z){let{keyInfo:Q,apiKey:Y}=await this.storage.resolve($,Z),X=Q.providerId,J=q9()[X];if(!J)throw Error(`Unknown provider: ${X}`);if(this.cache){let U=await this.cache.get(Z,X);if(U)return ja$(U,J,Y)}let W=await J.create(Y).listModels(),K=new Set,H=W.filter((U)=>{if(U.deprecated)return!1;if(K.has(U.modelId))return!1;return K.add(U.modelId),!0});if(X!=="openrouter"&&X!=="deco"){let U=await IR6(this.cache);H=SR6(H,U)}else H=H.map((U)=>({...U,capabilities:Ea$(U.capabilities,U)}));let F=H.map((U)=>({...U,providerId:X}));if(this.cache)await this.cache.set(Z,X,F);return ja$(F,J,Y)}}function ja$($,Z,Q){let X=Z.create(Q).asyncResearch;if(!X)return $;return $.map((J)=>X.canHandle(J.modelId)?{...J,asyncResearch:!0}:J)}var La$="_global";var za$=D(()=>{$W();bP()});import{SpanStatusCode as Pa$}from"@opentelemetry/api";function _R6($){if(!$)return;try{let Z=JSON.parse($);if(typeof Z!=="object"||Z===null||Array.isArray(Z))return;let Q={};for(let[Y,X]of Object.entries(Z)){if(Object.keys(Q).length>=CR6)break;if(typeof X==="string"&&Y.length<=Aa$&&X.length<=Aa$)Q[Y]=X}return Object.keys(Q).length>0?Q:void 0}catch{return}}function vR6($,Z){return Z?.connectionId??$?.headers.get("x-caller-id")??void 0}function bR6($){try{let Z=new URL($.url).pathname.split("/").filter(Boolean);if(Z[0]==="api"&&Z[1])return decodeURIComponent(Z[1])}catch{}return}function XK1($){let{auth:Z,headers:Q,role:Y,permissions:X,userId:J,apiKeyId:G,organizationId:W}=$,K=!!G,H=Z.api.hasPermission;return{isApiKeyPrincipal:K,hasPermission:async(F,U)=>{if(K)return fW1(X??{},F);let N=!!U?.organizationId&&!!W&&U.organizationId!==W,B=U?U.role:Y;if(jZ(B))return!0;if(X&&!N)return fW1(X,F);let O=ao$(U?.role,F,so$());if(O!=="fallback")return O==="grant";if(!H)return console.error("[Auth] hasPermission API not available"),!1;let L=U?.organizationId?{organizationId:U.organizationId}:{};try{if((await H({headers:Q,body:{permission:F,...L}}))?.success===!0)return!0;let j=Oo1(F);return(await H({headers:Q,body:{permission:j,...L}}))?.success===!0}catch(w){let j=w?.statusCode;if(j!==401&&j!==403)console.error("[Auth] Permission check failed:",w instanceof Error?w.message:String(w));return!1}},organization:{create:async(F)=>{return Z.api.createOrganization({body:F})},update:async(F)=>{return Z.api.updateOrganization({headers:Q,body:F})},delete:async(F)=>{await Z.api.deleteOrganization({headers:Q,body:{organizationId:F}})},get:async(F)=>{return Z.api.getFullOrganization({headers:Q,query:F?{organizationId:F}:void 0})},list:async()=>{return(await Z.api.listOrganizations({headers:Q})).filter((U)=>!P9(U))},addMember:async(F)=>{return Z.api.addMember({body:F})},removeMember:async(F)=>{return Z.api.removeMember({headers:Q,body:F})},listMembers:async(F)=>{return Z.api.listMembers({headers:Q,query:F?{organizationId:F.organizationId,limit:F.limit,offset:F.offset,filterField:F.filterField,filterValue:F.filterValue}:void 0})},updateMemberRole:async(F)=>{return Z.api.updateMemberRole({headers:Q,body:F})}},apiKey:{create:async(F)=>{return Z.api.createApiKey({body:{...F,userId:J}})},list:async()=>{return Z.api.listApiKeys({headers:Q})},update:async(F)=>{return Z.api.updateApiKey({body:{...F,userId:J}})},delete:async(F)=>{await Z.api.deleteApiKey({headers:Q,body:{keyId:F}})}}}}async function RA($,Z,Q){if(Fu.includes(Q))return;let Y=await $.selectFrom("organizationRole").select(["permission"]).where("organizationId","=",Z).where("role","=",Q).executeTakeFirst();if(!Y?.permission)return;try{return JSON.parse(Y.permission)}catch{console.error(`[Auth] Failed to parse permissions for role: ${Q}`);return}}function fR6($,Z,Q){$.delete(Z),$.set(Z,{archived:Q,at:Date.now()})}function yR6($,Z,Q){if($.size<=Z)return;let Y=Date.now();for(let[X,J]of $)if(Y-J.at>=Q)$.delete(X);if($.size>Z){let X=$.size-Z,J=0;for(let G of $.keys()){if(J>=X)break;$.delete(G),J++}}}async function Ra$($,Z,Q,Y){let X=QK1.get(Q);if(X&&Date.now()-X.at<Ta$)return X.archived;let J=await Z.measure(Y,()=>$.selectFrom("organization").select(["metadata"]).where("id","=",Q).executeTakeFirst()),G=P9(J);return fR6(QK1,Q,G),yR6(QK1,xR6,Ta$),G}async function YK1($,Z,Q,Y,X){let J=X?.get(Q,Y);if(J)return J;let W=(await Z.measure("auth_query_membership",()=>$.selectFrom("member").select(["member.role"]).where("member.userId","=",Q).where("member.organizationId","=",Y).executeTakeFirst()))?.role;if(W)X?.set(Q,Y,W);return W}function gR6($,Z){if(!$)return!0;return Z===$}async function hR6($,Z,Q,Y,X){let J=gQ0($.headers,"token");if(!J)return;let G=await Q.measure("auth_verify_onbehalf_studio_jwt",()=>Vc0(J));if(!G?.sub)return;let W=G.metadata?.organizationId;if(!gR6(Y,W))return;let K=Y?await YK1(Z,Q,G.sub,Y,X):G.user?.role??void 0;return{id:G.sub,email:G.user?.email,name:G.user?.name,role:K}}async function uR6($,Z,Q,Y=Ma$,X){let J=$.headers.get("Authorization");try{let G=new Headers($.headers);G.set("X-MCP-Session-Auth","true");let W=await Y.measure("auth_get_mcp_session",()=>Z.api.getMcpSession({headers:G}));if(W){let K=W.userId,H=$.headers.get("x-org-id"),F=$.headers.get("x-org-slug"),U=bR6($),N=await Y.measure("auth_query_membership",()=>{let w=Q.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["member.role","member.organizationId","organization.id as orgId","organization.slug as orgSlug","organization.name as orgName","organization.metadata as orgMetadata"]).where("member.userId","=",K);if(U)return w.where("organization.slug","=",U).executeTakeFirst();if(H)return w.where("organization.id","=",H).executeTakeFirst();if(F)return w.where("organization.slug","=",F).executeTakeFirst();return w.orderBy("member.createdAt","asc").limit(2).execute().then((j)=>j.length===1?j[0]:void 0)});if(P9({metadata:N?.orgMetadata}))throw Error(xQ0);let B=N?.role,O=N?{id:N.orgId,slug:N.orgSlug,name:N.orgName}:void 0;if(N&&B)X?.set(K,N.organizationId,B);let L;if(N&&B)L=await Y.measure("auth_fetch_role_permissions",()=>RA(Q,N.organizationId,B));return{user:{id:K,role:B},role:B,permissions:L,organization:O}}}catch(G){console.error("[Auth] OAuth session check failed:",G)}if(J?.startsWith("Bearer ")){let G=J.replace("Bearer ","").trim();try{let W=await Y.measure("auth_verify_studio_token",()=>Vc0(G));if(W){let K,H=W.metadata?.organizationId;if(W.sub&&H)K=await YK1(Q,Y,W.sub,H,X);let F,U=W.metadata?.organizationId;if(U){let N=W.metadata?.organizationName,B=W.metadata?.organizationSlug;if(N||B){if(await Ra$(Q,Y,U,"auth_query_org_archived_for_studio_token"))return{user:void 0};F={id:U,name:N,slug:B}}else{let O=await Y.measure("auth_query_org_for_studio_token",()=>Q.selectFrom("organization").select(["id","slug","name","metadata"]).where("id","=",U).executeTakeFirst());if(P9(O))return{user:void 0};F=O?{id:O.id,slug:O.slug,name:O.name}:{id:U}}}return{user:{id:W.sub,connectionId:W.metadata?.connectionId,role:K},role:K,permissions:W.permissions,tokenOrganizationId:H,organization:F}}}catch{}try{let W=await Y.measure("auth_verify_api_key",()=>Z.api.verifyApiKey({body:{key:G}}));if(W?.valid&&W.key){let K=W.key.metadata?.organization;if(K?.id&&await Ra$(Q,Y,K.id,"auth_query_org_for_api_key"))return{user:void 0};let H=W.key.permissions,F,U=W.key.userId;if(U&&K?.id)F=await YK1(Q,Y,U,K.id,X);let N=await hR6($,Q,Y,K?.id,X);return{apiKeyId:W.key.id,user:N??{id:W.key.userId,role:F},role:N?N.role:F,permissions:H,apiKey:{id:W.key.id,name:W.key.name??"",userId:W.key.userId,metadata:W.key.metadata},tokenOrganizationId:K?.id,organization:K?{id:K.id,slug:K.slug,name:K.name}:void 0}}}catch(W){let K=W;if(K.body?.code==="INVALID_API_KEY"||K.message?.includes("Invalid API key"))console.warn("[Auth] invalid API key (Bearer)",{path:new URL($.url).pathname,method:$.method,ua:$.headers.get("user-agent")??void 0,ip:$.headers.get("x-forwarded-for")??$.headers.get("x-real-ip")??void 0,tokenPrefix:G.slice(0,8)});else console.error("[Auth] API key check failed:",K)}}try{let G=new Headers($.headers);G.delete("Authorization");let W=await Y.measure("auth_get_session",()=>Z.api.getSession({headers:G}));if(W){let K,H,F=$.headers.get("x-org-id"),U=$.headers.get("x-org-slug");if(!F&&!U&&$.method.toUpperCase()==="GET")try{let N=new URL($.url).searchParams;F=N.get("x-org-id"),U=N.get("x-org-slug")}catch{}if(F||U){let N=await Y.measure("auth_query_membership_from_header",()=>{let B=Q.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["member.role","organization.id as orgId","organization.slug as orgSlug","organization.name as orgName","organization.metadata as orgMetadata"]).where("member.userId","=",W.user.id);if(F)B=B.where("organization.id","=",F);else if(U)B=B.where("organization.slug","=",U);return B.executeTakeFirst()});if(P9({metadata:N?.orgMetadata}))throw Error(xQ0);if(N)K={id:N.orgId,slug:N.orgSlug,name:N.orgName},H=N.role}else if(W.session.activeOrganizationId){let N=await Y.measure("auth_get_full_organization",()=>Z.api.getFullOrganization({headers:G}).catch(()=>null));if(N&&!P9(N))K={id:N.id,slug:N.slug,name:N.name},H=N.members?.find((O)=>O.userId===W.user.id)?.role;else if(!N)K={id:W.session.activeOrganizationId,slug:"",name:""}}return{user:{id:W.user.id,email:W.user.email,emailVerified:!!W.user.emailVerified,name:W.user.name,image:W.user.image??void 0,role:H},role:H,organization:K}}}catch(G){let W=G;if(W.message===xQ0)throw G;console.error("[Auth] Session check failed:",JSON.stringify({message:W.message,body:W.body,stack:W.stack},null,2))}return{user:void 0}}async function Ia$($){let Z=new FG($.encryption.key),Q=E0(),Y=Q.clickhouseUrl,X=!!Y,J=!X&&!!Q.monitoringS3Bucket,G=X?"clickhouse":"duckdb",{resolve:W}=await import("path"),K=W(uW()),H=W(sU()),F=(P)=>`read_ndjson('${K}/${P}/**/*.ndjson', auto_detect=true)`,U=(P)=>`read_ndjson('${H}/${P}/**/*.ndjson', auto_detect=true)`,N,B,O,L,w=!1;if($.monitoringEngines)N=$.monitoringEngines.monitoringEngine,B=$.monitoringEngines.metricEngine,O=F,L=U;else if(X){let P=Q.clickhouseMaxMemoryUsage?{maxMemoryUsage:String(Q.clickhouseMaxMemoryUsage)}:void 0;N=new Ho(Y,P),B=new Ho(Y,P),O=(A)=>"studio_monitoring_logs",L=(A)=>"studio_monitoring_logs"}else if(J){let P=Q.monitoringS3AccessKeyId??Q.s3AccessKeyId,A=Q.monitoringS3SecretAccessKey??Q.s3SecretAccessKey,q=Q.duckdbExtensionDirectory;if(!P||!A||!q)throw Error("MONITORING_S3_BUCKET is set but the GCS monitoring path is misconfigured: MONITORING_S3_ACCESS_KEY_ID/S3_ACCESS_KEY_ID, MONITORING_S3_SECRET_ACCESS_KEY/S3_SECRET_ACCESS_KEY, and DUCKDB_EXTENSION_DIRECTORY are all required.");let x={endpoint:Q.monitoringS3Endpoint??Q.s3Endpoint??"storage.googleapis.com",region:Q.monitoringS3Region??Q.s3Region,accessKeyId:P,secretAccessKey:A,extensionDirectory:q},_=new Ko(x,{memoryLimit:Q.duckdbMemoryLimit,threads:Q.duckdbThreads});N=_,B=_;let V=Q.monitoringS3Bucket,y=Q.monitoringS3Prefix??"",g=(l,n)=>Qo1({bucket:V,prefix:y,range:n});O=g,L=g,w=!0}else{let{engine:P}=await Hi0({basePath:uW()}),{engine:A}=await Hi0({basePath:sU()});N=P,B=A,O=F,L=U}let j=new Kh($.db),E=new X80($.db),z=new Bo($.db),T={connections:new rn($.db,Z),connectionCredentialVault:new Rm0($.db),organizationSettings:new WP($.db),userModelPreferences:new Ui0($.db),monitoring:new Cm0(N,O,B,L,G,w),virtualMcps:new Hh($.db),users:new Ti0($.db),tags:new Oo($.db),experiments:new Pi0($.db),organizationBilling:new DG($.db),aiProviderKeys:new Ir($.db,Z,$.providerKeyCache),subsidizedGatewayKeys:new cW1($.db,Z),secrets:new P41($.db,Z),orgFileConfigs:new mW1($.db,Z),orgSites:new pf($.db),orgRepoSyncs:new dA($.db),gitProviderAccounts:new vA($.db),gitProviderAccountCredentials:new Ye($.db,Z),gitProviderOAuthStates:new tW1($.db),githubConnectFlows:new pW1($.db),repositories:new Xe($.db),jiraIntegrations:new PO($.db,Z),taskBoard:new rG($.db),columnAutomations:new oW1($.db),taskBoardPrompts:new rW1($.db),taskBoardAnalytics:new f71($.db),threadAnalytics:new u71($.db),notifications:new sW1($.db),orgFsEntries:new Sn($.db),oauthPkceStates:new eW1($.db),claudeSubscriptions:new $K1($.db,Z),automations:VQ0($.db),triggerCallbackTokens:new Uo($.db),orgSsoConfig:new ji0($.db,Z),orgSsoSessions:new Ei0($.db),brandContext:new No($.db),organizationDomains:new OG($.db),organizationJoinRequests:new Ku($.db),kv:z,interests:new wi0(z)};return async(P,A)=>{let q=A?.timings??Ma$,x=YV0(),_=P?await $.observability.tracer.startActiveSpan("studio.auth",async(Y0)=>{try{let o=await uR6(P,$.auth,$.db,q,$.memberRoleCache);return Y0.setStatus({code:Pa$.OK}),o}catch(o){throw Y0.setStatus({code:Pa$.ERROR,message:o.message}),Y0.recordException(o),o}finally{Y0.end()}}):{user:void 0},V=vR6(P,_.user),y=XK1({auth:$.auth,headers:P?.headers??new Headers,role:_.role,permissions:_.permissions,userId:_.user?.id,apiKeyId:_.apiKeyId,organizationId:_.organization?.id}),g={user:_.user,tokenOrganizationId:_.tokenOrganizationId,permissions:_.permissions,permissionsOrganizationId:_.permissions?_.organization?.id:void 0};if(_.apiKey)g.apiKey=_.apiKey;let l=_.organization,n=P?E0().baseUrl??`${new URL(P.url).origin}`:a9(),p=new HP(g.user?.id,void 0,y,_.role,"self",void 0,l?.id),F0={...T,virtualMcps:Ed1(T.virtualMcps),threads:new zm0(j,l?.id),asyncResearchJobs:new uW1(E,l?.id)},V0=new ZK1(F0.aiProviderKeys,$.modelListCache),G0=$X(),H0=!l?null:G0?KG(G0,l.id):new q3(l.id,n),X0=l&&H0?new M3(H0,F0.orgFsEntries,l.id):null;KW1(F0,{objectStorage:H0,baseUrl:n,orgSlug:l?.slug});let Z0={timings:q,auth:g,connectionId:V,organization:l,storage:F0,vault:Z,authInstance:$.auth,boundAuth:y,access:p,db:$.db,tracer:$.observability.tracer,meter:$.observability.meter,baseUrl:n,objectStorage:H0,orgFs:X0,metadata:{requestId:crypto.randomUUID(),timestamp:new Date,wellKnownForwardableHeaders:Object.fromEntries(lR6.map((Y0)=>[Y0,P?.headers.get(Y0)??null]).filter(([,Y0])=>Y0!==null)),userAgent:(P?gQ0(P.headers,"client"):null)||P?.headers.get("User-Agent")||void 0,ipAddress:(P?.headers.get("CF-Connecting-IP")||P?.headers.get("X-Forwarded-For"))??void 0,properties:_R6(P?gQ0(P.headers,"properties"):null)},aiProviders:V0,createMCPProxy:async(Y0)=>{return await Xa$(Y0,Z0)},invalidateMemberRole:$.memberRoleCache?(Y0,o)=>$.memberRoleCache.invalidate(Y0,o):void 0,getOrCreateClient:x,pendingRevalidations:[],firecrawlApiKey:E0().firecrawlApiKey};return Z0}}function Vj($,Z){$.storage.threads.setOrganizationId(Z.id),$.storage.asyncResearchJobs.setOrganizationId(Z.id);let Q=$X();$.objectStorage=Q?KG(Q,Z.id):new q3(Z.id,$.baseUrl),$.orgFs=new M3($.objectStorage,$.storage.orgFsEntries,Z.id),KW1($.storage,{objectStorage:$.objectStorage,baseUrl:$.baseUrl,orgSlug:Z.slug??void 0})}var CR6=50,Aa$=500,Ta$=60000,xR6=1e4,QK1,qa$,vQ,Ma$,lR6;var iF=D(()=>{GK();Vz();F$();E9();Pm0();C70();qm0();qd1();Yo1();O3();Fi0();Ni0();Bi0();Di0();zi0();Uo1();Do();BK();Ii0();jQ1();GY();BW1();on();lW1();_W1();Eo0();ae();Ga$();dW1();JW0();Fc();nW1();y71();l71();QO();Da$();Pc0();CN();za$();ID();dg();HW1();QK1=new Map;vQ={set:($)=>{qa$=$},create:async($,Z)=>{return await qa$($,Z)}},Ma$={measure:async($,Z)=>{return await Z()}},lR6=["x-hub-signature-256"]});import{DBOS as HV0,SchedulerMode as cR6}from"@dbos-inc/dbos-sdk";function Va$($){GK1=$}function ka$(){if(!GK1)throw Error("[org-fs] org-repo-sync runtime not initialized \u2014 setOrgRepoSyncRuntime() must run before the workflow fires");return GK1}async function dR6($,Z){let Q=await $.selectFrom("organization").select(["id","slug","name"]).where("id","=",Z).executeTakeFirst();if(!Q)return null;let Y=await vQ.create();return Y.organization={id:Q.id,slug:Q.slug,name:Q.name},Vj(Y,{id:Q.id,slug:Q.slug}),Y}async function iR6($){try{let{db:Z}=ka$(),Q=await dR6(Z,$.organizationId);if(!Q)return{id:$.id,volume:$.volume,error:"organization no longer exists"};let Y=await yW0(Q,$);return"error"in Y?{id:Y.id,volume:Y.volume,error:Y.error}:{id:Y.id,volume:Y.volume}}catch(Z){return{id:$.id,volume:$.volume,error:Z instanceof Error?Z.message:String(Z)}}}async function pR6($,Z){let Q=await HV0.runStep(()=>new dA(ka$().db).listEnabled(),{name:"loadOrgRepoSyncConfigs"});for(let Y of Q){let X=await HV0.runStep(()=>iR6(Y),{name:`syncOrgRepo:${Y.id}`});if(X.error)console.warn(`[org-fs] org repo sync ${X.id} (${X.volume}) failed: ${X.error}`)}}function Sa$(){if(JK1)return;JK1=HV0.registerWorkflow(pR6,{name:"orgRepoSyncWorkflow"}),HV0.registerScheduled(JK1,{name:"orgRepoSyncWorkflow",crontab:mR6,mode:cR6.ExactlyOncePerIntervalWhenActive})}var mR6="7-59/10 * * * *",GK1=null,JK1=null;var Ca$=D(()=>{iF();gW0()});import{DBOS as FV0,SchedulerMode as nR6}from"@dbos-inc/dbos-sdk";function _a$($){KK1=$}function va$(){if(!KK1)throw Error("[task-board-archive] runtime not initialized \u2014 setTaskBoardArchiveSweepRuntime() must run before the workflow fires");return KK1}async function aR6($,Z){try{let Q=await PW(va$().db,$);if(!Q)return{organizationId:$,archived:0};let{archived:Y}=await YV$(Q,$,Z);return{organizationId:$,archived:Y}}catch(Q){return{organizationId:$,archived:0,error:Q instanceof Error?Q.message:String(Q)}}}async function sR6($,Z){let Q=new Date($.getTime()-oR6),Y=await FV0.runStep(()=>new rG(va$().db).listItemsAwaitingArchive(Q,rR6),{name:"loadArchiveCandidates"});if(Y.length===0)return;let X=await Promise.all(ZT0(Y).map(({organizationId:G,itemIds:W})=>FV0.runStep(()=>aR6(G,W),{name:`archiveMergedForOrg:${G}`})));for(let G of X)if(G.error)console.warn(`[task-board-archive] org ${G.organizationId} failed: ${G.error}`);let J=X.reduce((G,W)=>G+W.archived,0);if(J>0)console.log(`[task-board-archive] archived ${J} of ${Y.length} candidates`)}function ba$(){if(WK1)return;WK1=FV0.registerWorkflow(sR6,{name:"taskBoardArchiveSweepWorkflow"}),FV0.registerScheduled(WK1,{name:"taskBoardArchiveSweepWorkflow",crontab:tR6,mode:nR6.ExactlyOncePerIntervalWhenActive})}var tR6="23 * * * *",oR6=432000000,rR6=200,KK1=null,WK1=null;var xa$=D(()=>{QO();jm();dx()});import{createHmac as eR6,timingSafeEqual as $q6}from"crypto";function ya$($,Z,Q,Y=Date.now()){if(!Z||!Q)return!1;let X,J=[];for(let H of Z.split(",")){let F=H.indexOf("=");if(F<=0)continue;let U=H.slice(0,F).trim(),N=H.slice(F+1).trim();if(U==="t")X=N;else if(U==="v1")J.push(N)}if(!X||J.length===0)return!1;let G=Number(X);if(!Number.isFinite(G)||Math.abs(Y/1000-G)>Zq6)return!1;let W=eR6("sha256",Q).update(`${X}.${$}`).digest("hex"),K=Buffer.from(W,"hex");return J.some((H)=>{let F=Buffer.from(H,"hex");return K.length===F.length&&$q6(K,F)})}function ga$($){let Z;try{Z=JSON.parse($)}catch{return null}let Q=M7(Z),Y=M7(M7(Q?.data)?.object);if(!Q||typeof Q.type!=="string"||!Y)return null;return{id:xW(Q.id),type:Q.type,created:typeof Q.created==="number"?Q.created:void 0,livemode:typeof Q.livemode==="boolean"?Q.livemode:void 0,data:{object:Y}}}function NV0($){switch($){case"active":case"trialing":return"active";case"past_due":return"past_due";default:return"canceled"}}function xW($){return typeof $==="string"?$:void 0}function M7($){return typeof $==="object"&&$!==null?$:void 0}function BV0($){return typeof $==="number"?new Date($*1000):null}function UV0($){return xW($)??xW(M7($)?.id)}function Qq6($){return UV0($.subscription)??xW(M7(M7($.parent)?.subscription_details)?.subscription)}function Yq6($){let Z=M7($.lines)?.data;if(Array.isArray(Z)){let Q=null;for(let Y of Z){let X=M7(M7(Y)?.period)?.end;if(typeof X==="number"&&(Q===null||X>Q))Q=X}if(Q!==null)return new Date(Q*1000)}return BV0($.period_end)}function Xq6($,Z){let Q=M7($.items)?.data;if(!Array.isArray(Q))return;for(let Y of Q){let X=M7(Y)?.amount;if(typeof X==="number"&&X<=0)continue;let J=UV0(M7(Y)?.price);if(J&&Z[J])return Z[J]}return}function UK1($,Z,Q){if($==="past_due")return;if($!=="active")return"free";return}function Jq6($){let Z=BV0($.current_period_end);if(Z)return Z;let Q=M7($.items)?.data;if(!Array.isArray(Q))return null;let Y=0;for(let X of Q){let J=M7(X)?.current_period_end;if(typeof J==="number"&&J>Y)Y=J}return Y>0?new Date(Y*1000):null}function HK1($,Z){let Q=BV0($.created);return!!Q&&!!Z.lastStripeEventAt&&Q<Z.lastStripeEventAt}function FK1($,Z){let Q=BV0($.created);if(!Q)return;return Z.lastStripeEventAt&&Z.lastStripeEventAt>Q?void 0:Q}async function Gq6($,Z){let Q=Z.data.object;switch(Z.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":{let Y=xW(M7(Q.metadata)?.orgId);if(!Y)return{handled:!1,reason:"no orgId"};if(xW(M7(Q.metadata)?.kind)==="topup"){if(Q.mode!=="payment")return{handled:!1,reason:"topup with wrong mode"};if(xW(Q.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let H=xW(Q.id);if(!H)return console.error("stripe webhook: topup session without id",{eventId:Z.id,organizationId:Y}),{handled:!1,reason:"topup session without id"};let F=Number(M7(Q.metadata)?.creditCents);if(!Number.isInteger(F)||F<=0)return console.error("stripe webhook: paid topup with bad metadata \u2014 credit NOT applied",{eventId:Z.id,organizationId:Y,creditCents:M7(Q.metadata)?.creditCents}),{handled:!1,reason:"bad topup metadata"};return{handled:!0,organizationId:Y,topUp:{creditCents:F,referenceId:`stripe-topup:${H}`}}}if(Q.mode!=="subscription")return{handled:!1,reason:"not a subscription checkout"};if(xW(Q.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let X=await $.ensureBilling(Y);if(!X)return console.error("stripe webhook: PAID checkout for an org that does not exist",{organizationId:Y,eventId:Z.id}),{handled:!1,reason:"unknown org"};let J=UV0(Q.subscription);if(!J)return console.error("stripe webhook: subscription checkout without a sub id",{organizationId:Y,eventId:Z.id}),{handled:!1,reason:"subscription checkout without sub id"};if(HK1(Z,X))return{handled:!1,reason:"stale event"};if(X.stripeSubscriptionId&&X.stripeSubscriptionId!==J)return console.error("stripe webhook: refused checkout rebind",{organizationId:Y,eventId:Z.id}),{handled:!1,reason:"org already bound to another subscription",orphanSubscriptionId:J};let G=UV0(Q.customer);if(!await $.bindSubscription(Y,{stripeSubscriptionId:J,...G?{stripeCustomerId:G}:{},status:"active",lastStripeEventAt:FK1(Z,X)}))return console.error("stripe webhook: lost the bind race",{organizationId:Y,subscriptionId:J,eventId:Z.id}),{handled:!1,reason:"org already bound to another subscription",orphanSubscriptionId:J};let K=xW(M7(Q.metadata)?.planId);return{handled:!0,organizationId:Y,...K?{planChange:{planId:K,note:`stripe checkout ${xW(Q.id)??""}`.trim()}}:{}}}case"customer.subscription.updated":case"customer.subscription.deleted":{let Y=xW(Q.id);if(!Y)return{handled:!1,reason:"no sub id"};let X=await $.getBillingByStripeSubscriptionId(Y);if(!X)return{handled:!1,reason:"unknown subscription"};let J=Z.type==="customer.subscription.deleted";if(!J&&HK1(Z,X))return{handled:!1,reason:"stale event"};let G=J?"canceled":NV0(Q.status);await $.updateStripeState(X.organizationId,{status:G,currentPeriodEnd:Jq6(Q),...J&&{stripeSubscriptionId:null},lastStripeEventAt:FK1(Z,X)});let W=UK1(G,Q,E0().stripePlanPriceIds);return{handled:!0,organizationId:X.organizationId,...W?{planChange:{planId:W,note:`stripe ${Z.type} (${G})`}}:{}}}case"invoice.paid":{let Y=Qq6(Q);if(!Y)return{handled:!1,reason:"no sub id"};let X=await $.getBillingByStripeSubscriptionId(Y);if(!X)return{handled:!1,reason:"unknown subscription"};if(HK1(Z,X))return{handled:!1,reason:"stale event"};await $.updateStripeState(X.organizationId,{status:"active",currentPeriodEnd:Yq6(Q),lastStripeEventAt:FK1(Z,X)});let J=Xq6({items:Q.lines},E0().stripePlanPriceIds);return{handled:!0,organizationId:X.organizationId,...J?{planChange:{planId:J,note:"stripe invoice.paid"}}:{}}}default:return{handled:!1,reason:`unhandled event ${Z.type}`}}}function Wq6($,Z){if(!Z.handled||$.livemode===!1)return null;let Q=$.data.object;if(Z.topUp)return{name:"credits_topup_succeeded",organizationId:Z.organizationId,properties:{credit_cents:Z.topUp.creditCents}};switch($.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":return{name:"subscription_started",organizationId:Z.organizationId,properties:{}};case"customer.subscription.deleted":return{name:"subscription_canceled",organizationId:Z.organizationId,properties:{}};case"customer.subscription.updated":return{name:"subscription_updated",organizationId:Z.organizationId,properties:{status:NV0(Q.status),...typeof Q.cancel_at_period_end==="boolean"?{cancel_at_period_end:Q.cancel_at_period_end}:{}}};case"invoice.paid":if(Q.billing_reason==="subscription_create")return null;return{name:"subscription_renewed",organizationId:Z.organizationId,properties:{}};default:return null}}function fa$($,Z){let Q=Wq6($,Z);if(!Q)return;QJ({event:Q.name,organizationId:Q.organizationId,...$.id?{uuid:B4$(`stripe:${$.id}:${Q.name}`)}:{},...$.created?{timestamp:new Date($.created*1000)}:{},properties:Q.properties})}async function ha$($){let Z=new DG(S8().db),Q=await Gq6(Z,$);if(!(Q.handled&&Q.topUp))fa$($,Q);if(Q.handled&&Q.topUp)await Mb$({organizationId:Q.organizationId,amountCents:Q.topUp.creditCents,referenceId:Q.topUp.referenceId}),fa$($,Q);if(Q.handled&&Q.planChange){try{await hR0({organizationId:Q.organizationId,planId:Q.planChange.planId,note:Q.planChange.note})}catch(Y){if(!(Y instanceof tm))throw Y;return console.error("stripe webhook: gateway REFUSED the plan change \u2014 the org has been "+"charged (or cancelled) and its entitlement did NOT move. Place it by hand through the gateway admin API.",{organizationId:Q.organizationId,planId:Q.planChange.planId,eventId:$.id,status:Y.status,error:Y.message}),Q}rm(Q.organizationId)}if(!Q.handled&&Q.orphanSubscriptionId){let Y=Q.orphanSubscriptionId;try{await oH$(Y)}catch(J){if(!(J instanceof VZ&&(J.status===400||J.status===404)))throw J}let{refundedCents:X}=await rH$(Y);console.error("stripe webhook: reversed orphan subscription",{subscriptionId:Y,refundedCents:X,eventId:$.id})}return Q}var Zq6=300;var NK1=D(()=>{m10();c3();U6();Do();IB();uR0();F$()});import{DBOS as OV0,SchedulerMode as Kq6}from"@dbos-inc/dbos-sdk";function ua$($){OK1=$}function la$(){if(!OK1)throw Error("[subscription-sweep] runtime not initialized \u2014 setSubscriptionSweepRuntime() must run before the workflow fires");return OK1}async function Nq6($){let{organizationId:Z,stripeSubscriptionId:Q}=$;if(!Q)return{organizationId:Z,action:"ok"};let Y=new DG(la$().db);try{let X,J,G=!1;try{let K=await Cw(Q);X=NV0(K.status),J=Bq6(K)}catch(K){if(!(K instanceof VZ)||K.status!==404)throw K;X="canceled",J=$.currentPeriodEnd,G=!0}let W=UK1(X,{},E0().stripePlanPriceIds);if(await Y.updateStripeState(Z,{status:X,currentPeriodEnd:J,...G&&{stripeSubscriptionId:null}}),!W)return{organizationId:Z,action:"ok"};return await hR0({organizationId:Z,planId:W,note:`studio subscription sweep (${X})`}),rm(Z),console.warn("[subscription-sweep] revoked a paid tier whose webhook never arrived",{organizationId:Z,subscriptionId:Q,status:X}),{organizationId:Z,action:G?"gone":"revoked"}}catch(X){if(X instanceof tm)console.error("[subscription-sweep] gateway REFUSED the revocation \u2014 the org still holds a tier it no longer pays for",{organizationId:Z,subscriptionId:Q,status:X.status});return{organizationId:Z,action:"failed",error:X instanceof Error?X.message:String(X)}}}function Bq6($){if(typeof $.current_period_end==="number")return new Date($.current_period_end*1000);let Z=0;for(let Q of $.items?.data??[])if(typeof Q.current_period_end==="number")Z=Math.max(Z,Q.current_period_end);return Z>0?new Date(Z*1000):null}async function Oq6($,Z){let Q=E0();if(!Q.plansEnabled||!Q.stripeSecretKey)return;let Y=new Date($.getTime()-Fq6),X=await OV0.runStep(()=>new DG(la$().db).listSubscriptionsPastPeriodEnd(Y,Uq6),{name:"loadLapsedSubscriptions"});if(X.length===0)return;let J=await Promise.all(X.map((W)=>OV0.runStep(()=>Nq6(W),{name:`sweepSubscription:${W.organizationId}`})));for(let W of J)if(W.action==="failed")console.warn(`[subscription-sweep] org ${W.organizationId} failed: ${W.error}`);let G=J.filter((W)=>W.action==="revoked"||W.action==="gone").length;if(G>0)console.warn(`[subscription-sweep] revoked ${G} of ${X.length} lapsed subscriptions`)}function ca$(){if(BK1)return;BK1=OV0.registerWorkflow(Oq6,{name:"subscriptionSweepWorkflow"}),OV0.registerScheduled(BK1,{name:"subscriptionSweepWorkflow",crontab:Hq6,mode:Kq6.ExactlyOncePerIntervalWhenActive})}var Hq6="41 * * * *",Fq6=172800000,Uq6=100,OK1=null,BK1=null;var ma$=D(()=>{m10();Do();IB();uR0();NK1();F$()});async function Dq6($,Z){let Q=await $.storage.tags.listOrgTags(Z),Y=Q.find((J)=>J.name.toLowerCase()===DV0);if(Y)return Y.id;return(await $.storage.tags.createTag(Z,DV0,QW0(Q.length))).id}async function Lq6($,Z,Q,Y,X){let J=await $.storage.taskBoard.getById(Q,Z);if(!J||!WV$(J.status))return!1;let G=await $.storage.taskBoard.listPrs(Q,Z),W=await Promise.all(G.map(async(H)=>({...H,...await X($,Z,H)})));if(!ix(W))return!1;await $.storage.taskBoard.addItemTags(Q,[await Y()],"system");let K=await $.storage.taskBoard.getById(Q,Z);if(!K)return!1;return await o6($,{taskBoardItemId:Q,action:"tags_changed",actorId:null,data:{from:J.tags,to:K.tags,reason:"merged_pr_auto_tag"}}),E8(Z,K),!0}async function da$($,Z,Q,Y=QT0){let X=null,J=()=>X??=Dq6($,Z),G=0;for(let W of Q)try{if(await Lq6($,Z,W,J,Y))G+=1}catch(K){console.error(`[task-board-merged-tag] ${W} failed`,K)}return{tagged:G}}var DV0="merged";var ia$=D(()=>{C4();_Y();jm();WH();z7();V9()});import{DBOS as LV0,SchedulerMode as wq6}from"@dbos-inc/dbos-sdk";function pa$($){LK1=$}function na$(){if(!LK1)throw Error("[task-board-merged-tag] runtime not initialized \u2014 setTaskBoardMergedTagSweepRuntime() must run before the workflow fires");return LK1}async function zq6($,Z){try{let Q=await PW(na$().db,$);if(!Q)return{organizationId:$,tagged:0};let{tagged:Y}=await da$(Q,$,Z);return{organizationId:$,tagged:Y}}catch(Q){return{organizationId:$,tagged:0,error:Q instanceof Error?Q.message:String(Q)}}}async function Pq6(){let $=await LV0.runStep(()=>new rG(na$().db).listItemsAwaitingMergedTag(DV0,Eq6),{name:"loadMergedTagCandidates"});if($.length===0)return;let Z=await Promise.all(ZT0($).map(({organizationId:Y,itemIds:X})=>LV0.runStep(()=>zq6(Y,X),{name:`tagMergedForOrg:${Y}`})));for(let Y of Z)if(Y.error)console.warn(`[task-board-merged-tag] org ${Y.organizationId} failed: ${Y.error}`);let Q=Z.reduce((Y,X)=>Y+X.tagged,0);if(Q>0)console.log(`[task-board-merged-tag] tagged ${Q} of ${$.length} candidates`)}function ta$(){if(DK1)return;DK1=LV0.registerWorkflow(Pq6,{name:"taskBoardMergedTagSweepWorkflow"}),LV0.registerScheduled(DK1,{name:"taskBoardMergedTagSweepWorkflow",crontab:jq6,mode:wq6.ExactlyOncePerIntervalWhenActive})}var jq6="41 * * * *",Eq6=200,LK1=null,DK1=null;var oa$=D(()=>{QO();jm();dx();ia$()});function ra$($){if(!$)return!1;try{return new URL($).host==="api.decocms.com"}catch{return!1}}var sa$,Aq6,aa$=($)=>{let Z=0,Q=$.length;while(Z<Q){let Y=$.charCodeAt(Z);if(Y!==32&&Y!==9)break;Z++}while(Q>Z){let Y=$.charCodeAt(Q-1);if(Y!==32&&Y!==9)break;Q--}return Z===0&&Q===$.length?$:$.slice(Z,Q)},wK1=($,Z)=>{if(Z&&$.indexOf(Z)===-1)return{};let Q=$.split(";"),Y={};for(let X of Q){let J=X.indexOf("=");if(J===-1)continue;let G=aa$(X.substring(0,J));if(Z&&Z!==G||!sa$.test(G))continue;let W=aa$(X.substring(J+1));if(W.startsWith('"')&&W.endsWith('"'))W=W.slice(1,-1);if(Aq6.test(W)){if(Y[G]=W.indexOf("%")!==-1?hu(W,Qr):W,Z)break}}return Y},Tq6=($,Z,Q={})=>{if(!sa$.test($))throw Error("Invalid cookie name");let Y=`${$}=${Z}`;if($.startsWith("__Secure-")&&!Q.secure)throw Error("__Secure- Cookie must have Secure attributes");if($.startsWith("__Host-")){if(!Q.secure)throw Error("__Host- Cookie must have Secure attributes");if(Q.path!=="/")throw Error('__Host- Cookie must have Path attributes with "/"');if(Q.domain)throw Error("__Host- Cookie must not have Domain attributes")}for(let X of["domain","path"])if(Q[X]&&/[;\r\n]/.test(Q[X]))throw Error(`${X} must not contain ";", "\\r", or "\\n"`);if(Q&&typeof Q.maxAge==="number"&&Q.maxAge>=0){if(Q.maxAge>34560000)throw Error("Cookies Max-Age SHOULD NOT be greater than 400 days (34560000 seconds) in duration.");Y+=`; Max-Age=${Q.maxAge|0}`}if(Q.domain&&Q.prefix!=="host")Y+=`; Domain=${Q.domain}`;if(Q.path)Y+=`; Path=${Q.path}`;if(Q.expires){if(Q.expires.getTime()-Date.now()>34560000000)throw Error("Cookies Expires SHOULD NOT be greater than 400 days (34560000 seconds) in the future.");Y+=`; Expires=${Q.expires.toUTCString()}`}if(Q.httpOnly)Y+="; HttpOnly";if(Q.secure)Y+="; Secure";if(Q.sameSite)Y+=`; SameSite=${Q.sameSite.charAt(0).toUpperCase()+Q.sameSite.slice(1)}`;if(Q.priority)Y+=`; Priority=${Q.priority.charAt(0).toUpperCase()+Q.priority.slice(1)}`;if(Q.partitioned){if(!Q.secure)throw Error("Partitioned Cookie must have Secure attributes");Y+="; Partitioned"}return Y},wV0=($,Z,Q)=>{return Z=encodeURIComponent(Z),Tq6($,Z,Q)};var ea$=D(()=>{VL();sa$=/^[\w!#$%&'*.^`|~+-]+$/,Aq6=/^[ !#-:<-[\]-~]*$/});var pd=($,Z,Q)=>{let Y=$.req.raw.headers.get("Cookie");if(typeof Z==="string"){if(!Y)return;let J=Z;if(Q==="secure")J="__Secure-"+Z;else if(Q==="host")J="__Host-"+Z;return wK1(Y,J)[J]}if(!Y)return{};return wK1(Y)},Rq6=($,Z,Q)=>{let Y;if(Q?.prefix==="secure")Y=wV0("__Secure-"+$,Z,{path:"/",...Q,secure:!0});else if(Q?.prefix==="host")Y=wV0("__Host-"+$,Z,{...Q,path:"/",secure:!0,domain:void 0});else Y=wV0($,Z,{path:"/",...Q});return Y},W80=($,Z,Q,Y)=>{let X=Rq6(Z,Q,Y);$.header("Set-Cookie",X,{append:!0})};var jV0=D(()=>{ea$()});var $s$=($)=>{let Q={...{origin:"*",allowMethods:["GET","HEAD","PUT","POST","DELETE","PATCH"],allowHeaders:[],exposeHeaders:[]},...$},Y=((J)=>{if(typeof J==="string")if(J==="*"){if(Q.credentials)return(G)=>G||null;return()=>J}else return(G)=>J===G?G:null;else if(typeof J==="function")return J;else return(G)=>J.includes(G)?G:null})(Q.origin),X=((J)=>{if(typeof J==="function")return J;else if(Array.isArray(J))return()=>J;else return()=>[]})(Q.allowMethods);return async function(G,W){function K(F,U){G.res.headers.set(F,U)}let H=await Y(G.req.header("origin")||"",G);if(H)K("Access-Control-Allow-Origin",H);if(Q.credentials)K("Access-Control-Allow-Credentials","true");if(Q.exposeHeaders?.length)K("Access-Control-Expose-Headers",Q.exposeHeaders.join(","));if(G.req.method==="OPTIONS"){if(Q.origin!=="*"||Q.credentials)K("Vary","Origin");if(Q.maxAge!=null)K("Access-Control-Max-Age",Q.maxAge.toString());let F=await X(G.req.header("origin")||"",G);if(F.length)K("Access-Control-Allow-Methods",F.join(","));let U=Q.allowHeaders;if(!U?.length){let N=G.req.header("Access-Control-Request-Headers");if(N)U=N.split(/\s*,\s*/)}if(U?.length)K("Access-Control-Allow-Headers",U.join(",")),G.res.headers.append("Vary","Access-Control-Request-Headers");return G.res.headers.delete("Content-Length"),G.res.headers.delete("Content-Type"),new Response(null,{headers:G.res.headers,status:204,statusText:"No Content"})}if(await W(),Q.origin!=="*"||Q.credentials)G.header("Vary","Origin",{append:!0})}};var Zs$=()=>{};function jK1($,Z){return`${$}:${Z}`}function Qs$($){let Z=$?.ttlMs??120000,Q=$?.maxSize??1e4,Y=new Map;function X(){if(Y.size<=Q)return;let J=Date.now();for(let[G,W]of Y)if(W.expiresAt<=J)Y.delete(G);if(Y.size>Q){let G=Y.size-Q,W=0;for(let K of Y.keys()){if(W>=G)break;Y.delete(K),W++}}}return{get(J,G){let W=jK1(J,G),K=Y.get(W);if(!K)return;if(K.expiresAt<=Date.now()){Y.delete(W);return}return K.role},set(J,G,W){let K=jK1(J,G);Y.set(K,{role:W,expiresAt:Date.now()+Z}),X()},invalidate(J,G){Y.delete(jK1(J,G))}}}class EK1{options;subscriptions=[];localEmit=null;originId=crypto.randomUUID();encoder=new TextEncoder;seenMessageIds=new Set;constructor($){this.options=$}async start($){if($)this.localEmit=$;if(this.subscriptions.length>0)return;if(!this.localEmit)return;let Z=this.options.getConnection();if(!Z)return;let Q=new TextDecoder;this.subscriptions=Ys$.map((Y)=>Z.subscribe(Y));for(let Y of this.subscriptions)(async()=>{for await(let X of Y)try{let J=JSON.parse(Q.decode(X.data));if(typeof J?.originId!=="string"||typeof J?.organizationId!=="string"||typeof J?.event?.id!=="string"||typeof J?.event?.type!=="string")continue;if(J.originId===this.originId)continue;if(typeof J.messageId==="string"&&this.hasSeen(J.messageId))continue;this.localEmit?.(J.organizationId,J.event)}catch{}})().catch((X)=>{console.error("[NatsSSEBroadcast] Subscription error:",X)})}broadcast($,Z){this.localEmit?.($,Z);let Q={originId:this.originId,messageId:crypto.randomUUID(),organizationId:$,event:Z};try{let Y=this.options.getConnection();if(!Y)return;let X=this.encoder.encode(JSON.stringify(Q));for(let J of Ys$)Y.publish(J,X)}catch(Y){console.warn("[NatsSSEBroadcast] Publish failed (non-critical):",Y)}}async stop(){for(let $ of this.subscriptions)$.unsubscribe();this.subscriptions=[],this.seenMessageIds.clear(),this.localEmit=null}hasSeen($){if(this.seenMessageIds.has($))return!0;if(this.seenMessageIds.add($),this.seenMessageIds.size>1000){let Z=this.seenMessageIds.values().next().value;if(Z)this.seenMessageIds.delete(Z)}return!1}}var Ys$;var Xs$=D(()=>{Ys$=["studio.sse.broadcast","mesh.sse.broadcast"]});async function qq6($,Z,Q=5){try{await g8(Z,{maxAttempts:Q,minTimeout:1000,maxTimeout:1e4,jitter:0})}catch(Y){console.error(`${$} Deferred start failed:`,Y instanceof i5?Y.cause:Y)}}function Js$($){let Z=new EK1({getConnection:()=>$.getConnection()});e5.start(Z).catch((Q)=>{console.error("[SSEHub] Failed to start broadcast strategy:",Q)}),$.onReady(()=>{qq6("[NatsSSEBroadcast]",()=>Z.start())})}var zK1=D(()=>{D8();Xs$();t00();t00()});var Gs$=()=>{};var PK1=()=>{};var Ws$=()=>{};var Mq6,RaZ;var Ks$=D(()=>{Gs$();PK1();VL();Ws$();Mq6={br:".br",zstd:".zst",gzip:".gz"},RaZ=Object.keys(Mq6)});var Hs$=D(()=>{Ks$()});var Fs$=()=>{};var Us$=D(()=>{Fs$()});var Ns$=()=>{};var Bs$=D(()=>{Yt0()});var AK1=D(()=>{kL();Bs$()});var TK1="x-hono-disable-ssg",maZ;var RK1=D(()=>{AK1();maZ=(()=>{try{return new Response("SSG is disabled",{status:404,headers:{[TK1]:"true"}})}catch{return null}})()});var Os$=D(()=>{BX0()});var qK1=D(()=>{Os$()});var Ds$=D(()=>{Us$();Ns$();PK1();RK1();qK1();AK1()});var Ls$=D(()=>{RK1();qK1();Ds$()});var qsZ;var ws$=D(()=>{Ls$();({write:qsZ}=Bun)});var kq6=class{#$;constructor($){this.#$=$,this.raw=$.raw,this.url=$.url?new URL($.url):null,this.protocol=$.protocol??null}send($,Z){this.#$.send($,Z??{})}raw;binaryType="arraybuffer";get readyState(){return this.#$.readyState}url;protocol;close($,Z){this.#$.close($,Z)}},js$=($)=>{return(...Z)=>{if(typeof Z[0]==="function"){let[Q,Y]=Z;return async function(J,G){let W=await Q(J),K=await $(J,W,Y);if(K)return K;await G()}}else{let[Q,Y,X]=Z;return(async()=>{let J=await $(Q,Y,X);if(!J)throw Error("Failed to upgrade WebSocket");return J})()}}};var Es$=()=>{};var K80=($)=>("server"in $.env)?$.env.server:$.env;var EV0=()=>{};var Sq6;var zs$=D(()=>{Es$();EV0();Sq6=js$(($,Z)=>{let Q=K80($);if(!Q)throw TypeError("env has to include the 2nd argument of fetch.");if(Q.upgrade($.req.raw,{data:{events:Z,url:new URL($.req.url),protocol:$.req.url}}))return new Response(null);return})});var H80=($)=>{let Z=K80($);if(!Z)throw TypeError("env has to include the 2nd argument of fetch.");if(typeof Z.requestIP!=="function")throw TypeError("server.requestIP is not a function.");let Q=Z.requestIP($.req.raw);if(!Q)return{remote:{}};return{remote:{address:Q.address,addressType:Q.family==="IPv6"||Q.family==="IPv4"?Q.family:void 0,port:Q.port}}};var Ps$=D(()=>{EV0()});var MK1=D(()=>{Hs$();ws$();zs$();Ps$();EV0()});var As$;var Ts$=D(()=>{As$={google:{name:"Google",icon:"https://assets.decocache.com/webdraw/eb7480aa-a68b-4ce4-98ff-36aa121762a7/google.svg"},github:{name:"GitHub",icon:"https://assets.decocache.com/decocms/e02ce92e-6684-41a6-acfc-432977eb4878/github.png"},microsoft:{name:"Microsoft",icon:"https://assets.decocache.com/mcp/aa6f6e1a-6526-4bca-99cc-82e2ec38b0e4/microsoft.png"}}});function Rs$(){let $=Object.keys(R4.socialProviders??{}),Z=$.length>0,Q=$.map((X)=>({name:X,icon:As$[X].icon})),Y=E0().localMode;return{emailAndPassword:{enabled:R4.emailAndPassword?.enabled??!1},magicLink:{enabled:R4.magicLinkConfig?.enabled??!1},emailOtp:{enabled:R4.emailOtpConfig?.enabled??!1},resetPassword:{enabled:$V0},socialProviders:{enabled:Z,providers:Q},sso:R4.ssoConfig?{enabled:!0,providerId:R4.ssoConfig.providerId}:{enabled:!1},stdioEnabled:Y,localMode:GO()}}async function Cq6($,Z,Q){try{if(!R4.inviteEmailProviderId||!R4.emailProviders||R4.emailProviders.length===0)return;let Y=wG(R4.emailProviders,R4.inviteEmailProviderId);if(!Y)return;let X=await $.selectFrom("member").innerJoin("user","user.id","member.userId").select(["user.email as email","member.role as role"]).where("member.organizationId","=",Z.id).execute(),J=Lo,G=X.filter((H)=>(H.role??"").split(",").map((F)=>F.trim()).some((F)=>J.includes(F)));if(G.length===0)return;let W=LG(Y),K=`${a9()}/${Z.slug}/settings/members`;await Promise.allSettled(G.map((H)=>W({to:H.email,subject:`New request to join ${Z.name}`,html:jG({preheader:`${Q} requested to join ${Z.name}.`,heading:"New join request",subheading:`<strong>${Q}</strong> requested to join <strong>${Z.name}</strong> on deco Studio.`,body:SP("Review request",K),footnote:"You can approve or deny this request from your members settings."})})))}catch(Y){console.error("[Auth] Failed to notify admins of join request:",Y)}}var AO,qs$;var IK1=D(()=>{G8();MK1();U6();F$();gG();c3();jW1();v01();aI0();kP();GY();E9();Di0();Ts$();rx();Hu();AO=new Q1;AO.post("/local-session",async($)=>{if(!GO())return $.json({success:!1,error:"Local mode is not active"},403);let Z;try{Z=H80($).remote.address}catch{}if(!(Z==="127.0.0.1"||Z==="::1"||Z==="::ffff:127.0.0.1"))return $.json({success:!1,error:"Forbidden"},403);try{let{waitForSeed:Y}=await Promise.resolve().then(() => (rx(),qT0));await Y();let{auth:X}=await Promise.resolve().then(() => (gG(),wr$)),J=await t91();if(!J)return $.json({success:!1,error:"Local admin user not found"},500);let G=await RT0();return await X.api.signInEmail({body:{email:J.email,password:G},asResponse:!0})}catch(Y){return console.error("Failed to create local session:",Y),$.json({success:!1,error:Y instanceof Error?Y.message:"Failed to create local session"},500)}});AO.get("/my-capabilities/:slug",async($)=>{let Z=$.req.param("slug"),Q=await C8.api.getSession({headers:$.req.raw.headers});if(!Q?.user)return $.json({error:"Authentication required"},401);let Y=S8().db,X=await Y.selectFrom("organization").select(["id"]).where("slug","=",Z).executeTakeFirst();if(!X)return $.json({role:null,capabilities:{}});let G=(await Y.selectFrom("member").select(["role"]).where("userId","=",Q.user.id).where("organizationId","=",X.id).executeTakeFirst())?.role??null;if(!G)return $.json({role:null,capabilities:{}});if(jZ(G))return $.json({role:G,capabilities:Bo1()});if(G==="user")return $.json({role:G,capabilities:qi0({self:[...vQ0]})});let W=await Y.selectFrom("organizationRole").select(["permission"]).where("role","=",G).where("organizationId","=",X.id).executeTakeFirst(),K={},H=W?.permission;if(typeof H==="string")try{let F=JSON.parse(H);if(F&&typeof F==="object"&&!Array.isArray(F))K=F}catch{K={}}return $.json({role:G,capabilities:qi0(K)})});AO.get("/domain-lookup",async($)=>{let Z=await C8.api.getSession({headers:$.req.raw.headers});if(!Z?.user)return $.json({success:!1,error:"Authentication required"},401);if(!Z.user.emailVerified)return $.json({found:!1,organizations:[]});let Q=Z.user.email?.split("@")[1]?.toLowerCase();if(!Q||tK.has(Q))return $.json({found:!1,organizations:[]});try{let X=(await new OG(S8().db).getAllByDomain(Q)).filter(rI0);if(X.length===0)return $.json({found:!1,organizations:[]});let J=await S8().db.selectFrom("organization").select(["id","name","slug","logo","metadata"]).where("id","in",X.map((K)=>K.organizationId)).execute(),G=new Map(J.map((K)=>[K.id,K])),W=X.map((K)=>{let H=G.get(K.organizationId);if(!H)return null;if(P9(H))return null;return{id:H.id,name:H.name,slug:H.slug,logo:H.logo,joinMode:K.joinMode}}).filter((K)=>K!==null);return $.json({found:W.length>0,organizations:W})}catch(Y){return console.error("[Auth] Domain lookup failed:",Y),$.json({success:!1,error:"Domain lookup failed"},500)}});AO.post("/domain-join",async($)=>{let Z=await C8.api.getSession({headers:$.req.raw.headers});if(!Z?.user)return $.json({success:!1,error:"Authentication required"},401);if(!Z.user.emailVerified)return $.json({success:!1,error:"Email must be verified to join"},403);let Q=Z.user.email?.split("@")[1]?.toLowerCase();if(!Q||tK.has(Q))return $.json({success:!1,error:"Generic email domains cannot auto-join"},403);let Y=await $.req.json().catch(()=>({})),X=typeof Y.organizationSlug==="string"&&Y.organizationSlug.trim()?Y.organizationSlug.trim():null;try{let J=S8().db,K=(await new OG(J).getAllByDomain(Q)).filter((B)=>B.verificationStatus==="verified"&&B.joinMode==="auto");if(K.length===0)return $.json({success:!1,error:"Auto-join is not available for this domain"},403);let H=await J.selectFrom("organization").select(["id","slug","metadata"]).where("id","in",K.map((B)=>B.organizationId)).execute(),F=new Map(H.filter((B)=>!P9(B)).map((B)=>[B.id,{id:B.id,slug:B.slug}])),U=K.flatMap((B)=>{let O=F.get(B.organizationId);return O?[O]:[]});if(U.length===0)return $.json({success:!1,error:"Auto-join is not available for this domain"},403);let N;if(X){let B=U.find((O)=>O.slug===X);if(!B)return $.json({success:!1,error:"This organization is not available for auto-join with your email domain."},403);N=B}else if(U.length===1)N=U[0];else return $.json({success:!1,error:"Multiple organizations match this domain. Please pick one.",requiresSelection:!0},409);try{await C8.api.addMember({body:{userId:Z.user.id,role:"user",organizationId:N.id}})}catch(B){if(!Sw(B))return console.error("[Auth] Domain join addMember failed:",B),$.json({success:!1,error:"Failed to join organization"},500)}return f1.capture({distinctId:Z.user.id,event:"organization_domain_joined",groups:{organization:N.id},properties:{organization_id:N.id,organization_slug:N.slug,email_domain:Q}}),$.json({success:!0,slug:N.slug})}catch(J){return f1.captureException(J,Z.user.id),console.error("[Auth] Domain join failed:",J),$.json({success:!1,error:"Failed to join organization"},500)}});AO.post("/domain-setup",async($)=>{let Z=await C8.api.getSession({headers:$.req.raw.headers});if(!Z?.user)return $.json({success:!1,error:"Authentication required"},401);if(!Z.user.emailVerified)return $.json({success:!1,error:"Email must be verified"},403);let Q=Z.user.email?.split("@")[1]?.toLowerCase();if(!Q||tK.has(Q))return $.json({success:!1,error:"Corporate email required"},403);let Y=await $.req.json().catch(()=>({})),X=typeof Y.name==="string"&&Y.name.trim().length>0?Y.name.trim():null,J=typeof Y.logo==="string"&&Y.logo.length>0?Y.logo:null,G=Y.claimDomain!==!1;try{let W=S8().db,K=new OG(W),H=await K.getAllByDomain(Q);if(H.length>0){let z=await W.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["organization.slug"]).where("member.userId","=",Z.user.id).where("member.organizationId","in",H.map((T)=>T.organizationId)).executeTakeFirst();if(z)return $.json({success:!0,slug:z.slug,alreadyExists:!0})}let F=Q.split(".")[0]??Q,U=X??F.charAt(0).toUpperCase()+F.slice(1),N=(X??F).toLowerCase().trim().replace(/[^a-z0-9\s_-]+/g,"").replace(/[\s_-]+/g,"-").replace(/^-+|-+$/g,"")||F.toLowerCase().replace(/[^a-z0-9-]/g,""),B=null;for(let T=0;T<3;T++){let P=T===0?"":`-${Math.random().toString(36).slice(2,6)}`,A=T===0?U:`${U}${P}`,q=`${N}${P}`;try{B=await C8.api.createOrganization({body:{name:A,slug:q,userId:Z.user.id}});break}catch(x){if(!(x instanceof Error&&("body"in x)&&x.body?.code==="ORGANIZATION_ALREADY_EXISTS")||T===2)throw x}}if(!B?.id)throw Error("Failed to create organization");let O=B.id;if(G)await K.add(O,Q,{joinMode:"auto",verificationStatus:"verified",verificationMethod:"email"});let L=!1,w=null,j=null;try{let z=E0().firecrawlApiKey;if(z){let T=await a30(Q,z,U);if(T){let P=new No(S8().db),A=await P.create(O,T);if(await P.setDefault(A.id,O),L=!0,T.name&&T.name!==U)w=T.name;j=T.favicon??T.logo??null}}}catch(z){console.error("[Auth] Brand extraction failed (non-fatal):",z)}let E={};if(!X&&w)E.name=w;if(J)E.logo=J;else if(j)E.logo=j;if(Object.keys(E).length>0)try{await C8.api.updateOrganization({headers:$.req.raw.headers,body:{organizationId:O,data:E}})}catch(z){console.error("[Auth] Org update failed (non-fatal):",z)}return f1.identify({distinctId:Z.user.id,properties:{email:Z.user.email,$set:{email:Z.user.email},$set_once:{first_organization_created_at:new Date().toISOString()}}}),f1.groupIdentify({groupType:"organization",groupKey:O,properties:{name:B.slug??N,slug:B.slug??N,email_domain:Q,brand_extracted:L,created_at:new Date().toISOString()}}),f1.capture({distinctId:Z.user.id,event:"organization_created",groups:{organization:O},properties:{organization_id:O,organization_slug:B.slug??N,email_domain:Q,brand_extracted:L}}),$.json({success:!0,slug:B.slug??N,brandExtracted:L})}catch(W){return f1.captureException(W,Z.user?.id),console.error("[Auth] Domain setup failed:",W),$.json({success:!1,error:"Failed to set up organization"},500)}});AO.get("/org-access-status/:slug",async($)=>{let Z=$.req.param("slug"),Q=await C8.api.getSession({headers:$.req.raw.headers});if(!Q?.user)return $.json({success:!1,error:"Authentication required"},401);let Y=S8().db,X=await Y.selectFrom("organization").select(["id","name","slug","logo"]).where("slug","=",Z).executeTakeFirst();if(!X)return $.json({status:"not-found"});let J={id:X.id,name:X.name,slug:X.slug,logo:X.logo};if(await Y.selectFrom("member").select(["id"]).where("userId","=",Q.user.id).where("organizationId","=",X.id).executeTakeFirst())return $.json({status:"member",organization:J});try{let W=await C8.api.listUserInvitations({headers:$.req.raw.headers}),K=Date.now(),H=W.find((F)=>F.organizationId===X.id&&F.status==="pending"&&new Date(F.expiresAt).getTime()>K);if(H)return $.json({status:"pending-invite",invitation:{id:H.id},organization:J})}catch(W){console.error("[Auth] listUserInvitations failed:",W)}if(Q.user.emailVerified){let W=Q.user.email?.split("@")[1]?.toLowerCase();if(W&&!tK.has(W)){let K=await new OG(Y).getByOrgAndDomain(X.id,W);if(K?.verificationStatus==="verified"){if(K.joinMode==="auto")return $.json({status:"auto-domain-join",organization:{...J,domain:W}});if(K.joinMode==="request"){let H=await new Ku(Y).getPending(X.id,Q.user.id);return $.json({status:H?"request-pending":"can-request",organization:{...J,domain:W}})}}}}return $.json({status:"no-access",organization:J})});AO.post("/domain-request-join",async($)=>{let Z=await C8.api.getSession({headers:$.req.raw.headers});if(!Z?.user)return $.json({success:!1,error:"Authentication required"},401);if(!Z.user.emailVerified)return $.json({success:!1,error:"Email must be verified to request access"},403);let Q=Z.user.email?.split("@")[1]?.toLowerCase();if(!Q||tK.has(Q))return $.json({success:!1,error:"Generic email domains cannot request access"},403);let Y=await $.req.json().catch(()=>({})),X=typeof Y.organizationSlug==="string"&&Y.organizationSlug.trim()?Y.organizationSlug.trim():null;if(!X)return $.json({success:!1,error:"organizationSlug is required"},400);try{let J=S8().db,G=await J.selectFrom("organization").select(["id","slug","name"]).where("slug","=",X).executeTakeFirst();if(!G)return $.json({success:!1,error:"Organization not found"},404);let W=await new OG(J).getByOrgAndDomain(G.id,Q);if(!W||W.verificationStatus!=="verified"||W.joinMode!=="request")return $.json({success:!1,error:"This organization is not accepting requests for your domain."},403);if(await J.selectFrom("member").select(["id"]).where("userId","=",Z.user.id).where("organizationId","=",G.id).executeTakeFirst())return $.json({success:!0,slug:G.slug,alreadyMember:!0});return await new Ku(J).create(G.id,Z.user.id),await Cq6(J,G,Z.user.email),f1.capture({distinctId:Z.user.id,event:"organization_join_requested",groups:{organization:G.id},properties:{organization_id:G.id,organization_slug:G.slug,email_domain:Q}}),$.json({success:!0,status:"pending"})}catch(J){return f1.captureException(J,Z.user.id),console.error("[Auth] Domain request-join failed:",J),$.json({success:!1,error:"Failed to request access"},500)}});AO.post("/ensure-organization",async($)=>{let Z=null;try{if(Z=await C8.api.getSession({headers:$.req.raw.headers}),!Z?.user)return $.json({success:!1,error:"Authentication required"},401);let Q=await sI0({db:S8().db,authApi:C8.api,user:{id:Z.user.id,email:Z.user.email,name:Z.user.name??null,emailVerified:!!Z.user.emailVerified},allowCreate:!0,createdVia:"commerce_onboarding_recovery"});if(Q.status==="ambiguous")return $.json({success:!1,status:Q.status,domain:Q.domain,organizations:Q.organizations});if(Q.status==="skipped")return $.json({success:!1,status:Q.status,reason:Q.reason,domain:Q.domain,error:"Organization creation is not available."},409);if(Q.status==="already_has_organization")return $.json({success:!0,status:Q.status,organization:Q.organization,domain:Q.domain});return $.json({success:!0,status:Q.status,organization:Q.organization,domain:Q.domain})}catch(Q){let Y=Z?.user?.id;if(Y)f1.captureException(Q,Y);return console.error("[Auth] ensure organization failed:",Q),$.json({success:!1,error:"Failed to ensure organization"},500)}});qs$=AO});import{createHmac as _q6}from"crypto";function Ms$($){return/^Bearer\s+(.+)$/i.exec($.get("authorization")??"")?.[1]?.trim()||null}function Is$($){if(!$||typeof $!=="object"||!("userId"in $)||typeof $.userId!=="string")return null;return $.userId}function vq6($){if(!$||typeof $!=="object"||!("user"in $))return null;let{user:Z}=$;if(!Z||typeof Z!=="object"||!("id"in Z)||typeof Z.id!=="string")return null;return Z.id}function bq6($){if(!$||typeof $!=="object"||!("valid"in $)||$.valid!==!0||!("key"in $))return null;return Is$($.key)}async function Vs$($){let Z=new Headers({authorization:`Bearer ${$}`,"X-MCP-Session-Auth":"true"}),Q=await C8.api.getMcpSession({headers:Z}).catch(()=>null),Y=Is$(Q);if(Y)return Y;let X=await C8.api.verifyApiKey({body:{key:$}}).catch(()=>null);return bq6(X)}function xq6($,Z){let Q=_q6("sha256",Z).update($).digest("base64");return encodeURIComponent(`${$}.${Q}`)}var VK1,ks$;var Ss$=D(()=>{G8();gG();VK1=new Q1;VK1.get("/me",async($)=>{let Z=Ms$($.req.raw.headers),Q;if(Z)Q=await Vs$(Z);else{let Y=await C8.api.getSession({headers:$.req.raw.headers}).catch(()=>null);Q=vq6(Y)}if(!Q)return $.json({error:"unauthorized"},401);return $.json({userId:Q})});VK1.post("/session-from-oauth",async($)=>{let Z=Ms$($.req.raw.headers);if(!Z)return $.json({error:"unauthorized"},401);let Q=await Vs$(Z);if(!Q)return $.json({error:"unauthorized"},401);try{let Y=await C8.$context,X=await Y.internalAdapter.createSession(Q,!1),J=xq6(X.token,Y.secret);return $.json({sessionToken:J})}catch(Y){return console.error("[desktop-auth] failed to mint a session from an OAuth bearer:",Y instanceof Error?Y.message:String(Y)),$.json({error:"failed to mint a session"},500)}});ks$=VK1});var nd=($)=>{let Z=$.req.header("sec-fetch-dest");if(Z!==void 0)return Z==="document";let Q=$.req.header("accept")??"";return Q.includes("text/html")&&!/text\/html\s*;\s*q\s*=\s*0/.test(Q)};function fq6($){let Z=$.req.path;return $.req.method==="GET"&&/\/fs\/[^/]+\/read$/.test(Z)||$.req.method==="POST"&&/\/fs\/[^/]+\/unlock$/.test(Z)}function kK1($){let Z=$.auth?.apiKey?.metadata;if(!Z||typeof Z!=="object"||Array.isArray(Z)||!("organization"in Z))return{present:!1};let Q=Z.organization;if(!Q||typeof Q!=="object"||Array.isArray(Q))return{present:!0};let Y=Q.id;return{present:!0,id:typeof Y==="string"?Y:void 0}}function gq6($){let Z=$.split("/").filter(Boolean);if(Z[0]!=="api")return!1;let Q=Z.slice(2);return yq6.some((Y)=>Y.length===Q.length&&Y.every((X,J)=>X==="*"||X===Q[J]))}var yq6,td=async($,Z)=>{let Q=$.req.param("org");if(!Q)return $.json({error:"org slug missing in path"},400);let Y=$.get("studioContext");if(!Y?.db)return $.json({error:"studioContext not initialized"},500);let X=Y.db,J=gq6($.req.path),G=await X.selectFrom("organization").select(["id","slug","name","metadata"]).where((F)=>J?F.or([F("slug","=",Q),F("id","=",Q)]):F("slug","=",Q)).executeTakeFirst();if(!G){if(nd($))return $.redirect(`/${encodeURIComponent(Q)}`,302);return $.json({error:`organization "${Q}" not found`},404)}let W=kK1(Y);if(Y.auth?.apiKey?.id&&W.present&&W.id!==G.id)return $.json({error:"forbidden: API key is scoped to another organization"},403);if(Y.auth?.tokenOrganizationId&&Y.auth.tokenOrganizationId!==G.id)return $.json({error:"forbidden: token is scoped to another organization"},403);if(P9(G)){if(nd($))return $.redirect(`/${encodeURIComponent(Q)}`,302);return $.json({error:`organization "${Q}" not found`},404)}let K=Y.auth?.user?.id,H;if(K){let F=await X.selectFrom("member").select(["role"]).where("userId","=",K).where("organizationId","=",G.id).executeTakeFirst();if(F)H=F.role;else if(await H91(X,K))YO({action:"org_scope_admit",actorUserId:K,targetOrgId:G.id,method:$.req.method,route:$.req.path}),H="owner";else if(!fq6($)){if(nd($))return $.redirect(`/${encodeURIComponent(G.slug)}`,302);return $.json({error:"forbidden: not a member of organization"},403)}}return Y.organization={id:G.id,slug:G.slug,name:G.name,role:H},Y.access.setOrganizationId(G.id),Y.access.setRole(H),Vj(Y,G),await Z()};var zV0=D(()=>{iF();Lm();yq6=[["vault","connections","*","access-token"],["vault","connections","*","configuration"],["internal","task-board","import"],["internal","commerce-diagnostic","share-invite"],["internal","organization-notices"],["internal","repositories","resolve"],["internal","repositories","*","tree"],["internal","repositories","*","file"],["internal","repositories","*","search"],["internal","repositories","*","change-requests"],["internal","repositories","*","commits"]]});function hq6($){if(DQ($.id)!==null)return!0;if(ym1($.id))return!0;let Z=$.metadata?.liveAgentId;return typeof Z==="string"&&Z.length>0}function uq6($,Z){let Q=new Map,Y=(X)=>{let J=Q.get(X);if(J)return J;let G=(async()=>{if(!(await $.storage.orgSsoConfig.getByOrgId(X))?.enforced)return!0;return await $.storage.orgSsoSessions.isValid(Z,X)})();return Q.set(X,G),G};return async(X)=>{let J=await Promise.all(X.map((G)=>Y(G.orgId)));return X.filter((G,W)=>J[W]===!0)}}function lq6($){let Z=$.auth?.apiKey?.id?kK1($):{present:!1,id:void 0};if(Z.present&&!Z.id)return PV0;let Q=$.auth?.tokenOrganizationId;if(Z.id&&Q&&Z.id!==Q)return PV0;let Y=Z.id??Q??null;if(Y===null&&$.auth?.apiKey?.id)return PV0;return Y}var Cs$="/api/_me",PV0,cq6=256,mq6=20,dq6=50,iq6=10,pq6=5,_s$=()=>{let $=new Q1;return $.get("/projects/search",async(Z)=>{let Q=Z.get("studioContext");Z.header("Cache-Control","private, no-store");let Y=p0(Q);if(!Y)return Z.json({error:"Unauthorized"},401);let X=lq6(Q);if(X===PV0)return Z.json({error:"forbidden: credential is scoped to another organization"},403);let J=(Z.req.query("q")??"").trim();if(!J)return Z.json({items:[]});if(J.length>cq6)return Z.json({error:"query too long"},400);let G=Number.parseInt(Z.req.query("limit")??"",10),W=Number.isFinite(G)&&G>0?Math.min(G,dq6):mq6,K=uq6(Q,Y),H=W+iq6,F=[];for(let U=0;U<pq6&&F.length<W;U++){let N=await Q.storage.virtualMcps.searchAcrossMemberships({userId:Y,term:J,limit:H,offset:U*H,organizationId:X}),B=N.filter((O)=>!hq6(O)).filter((O)=>!P9({metadata:O.organization_metadata})).map((O)=>({id:O.id,title:O.title,icon:O.icon,orgId:O.organization_id,orgName:O.organization_name,orgSlug:O.organization_slug}));if(F.push(...await K(B)),N.length<H)break}return Z.json({items:F.slice(0,W)})}),$};var vs$=D(()=>{G8();e8();zV0();PV0=Symbol("deny")});var bs$="Payload Too Large",xs$,I5=($)=>{let Z=$.onError||(()=>{let Y=new Response(bs$,{status:413});throw new A$(413,{res:Y})}),Q=$.maxSize;return async function(X,J){if(!X.req.raw.body)return J();let G=X.req.raw.headers.has("transfer-encoding"),W=X.req.raw.headers.has("content-length");if(W&&!G)return parseInt(X.req.raw.headers.get("content-length")||"0",10)>Q?Z(X):J();let K=0,H=X.req.raw.body.getReader(),U={body:new ReadableStream({async start(N){try{for(;;){let{done:B,value:O}=await H.read();if(B)break;if(K+=O.length,K>Q){N.error(new xs$(bs$));break}N.enqueue(O)}}finally{N.close()}}}),duplex:"half"};if(X.req.raw=new Request(X.req.raw,U),await J(),X.error instanceof xs$)X.res=await Z(X)}};var fW=D(()=>{TK();xs$=class extends Error{constructor($){super($);this.name="BodyLimitError"}}});import{createHash as nq6}from"crypto";function F80($,Z,Q=0){return Z.every((Y,X)=>$[Q+X]===Y)}function ys$($){if(F80($,[137,80,78,71,13,10,26,10]))return{mime:"image/png",ext:"png"};if(F80($,[255,216,255]))return{mime:"image/jpeg",ext:"jpg"};if(F80($,[71,73,70,56])&&($[4]===55||$[4]===57)&&$[5]===97)return{mime:"image/gif",ext:"gif"};if(F80($,[82,73,70,70])&&F80($,[87,69,66,80],8))return{mime:"image/webp",ext:"webp"};return null}function CK1($){return lH($)}function rq6($,Z){let Q=nq6("sha256").update($).digest("hex");return`${AV0}/${Q}.${Z}`}function RV0($,Z,Q){let Y=new URLSearchParams({path:Q}).toString();return`${$.replace(/\/$/,"")}${TV0}/fs/${encodeURIComponent(Z)}/read?${Y}`}function od($){let Z=$X(),Q=Z?KG(Z,SK1):new q3(SK1,$.baseUrl);return new M3(Q,$.storage.orgFsEntries,SK1,tq6)}async function U80($,Z){return(await $.listDir(Z,AV0).catch(()=>[])).filter((Y)=>Y.kind==="file").sort((Y,X)=>X.updatedAt.localeCompare(Y.updatedAt))}async function gs$($,Z){return(await U80($,Z)).map((Y)=>({path:Y.path,current:Y.readPublic,updatedAt:Y.updatedAt}))}async function aq6($,Z){if((await $.stat(Z,AV0))?.readPublic)await $.setReadPublic(Z,AV0,!1,{actor:Z})}async function _K1($,Z,Q){let Y=await U80($,Z);if(!Y.some((X)=>X.path===Q))throw new ZX(`No such avatar: ${Q}`);await aq6($,Z),await $.setReadPublic(Z,Q,!0,{actor:Z}),await Promise.all(Y.filter((X)=>X.path!==Q&&X.readPublic).map((X)=>$.setReadPublic(Z,X.path,!1,{actor:Z})))}async function sq6($,Z,Q){try{let X=(await U80($,Z)).filter((J)=>J.path!==Q).slice(oq6-1);await Promise.all(X.map((J)=>$.delete(Z,J.path,{actor:Z})))}catch(Y){console.warn("[user-fs] failed to evict old avatars",Y)}}async function hs$($,Z){let{userId:Q,bytes:Y,contentType:X,ext:J}=Z,G=rq6(Y,J);return await $.write(Q,G,Y,{actor:Q,contentType:X}),await _K1($,Q,G),await sq6($,Q,G),G}async function us$($,Z,Q){if(!(await U80($,Z)).some((X)=>X.path===Q))throw new ZX(`No such avatar: ${Q}`);await $.delete(Z,Q,{actor:Z})}async function ls$($,Z){try{let Q=await U80($,Z);await Promise.all(Q.map((Y)=>$.delete(Z,Y.path,{actor:Z})))}catch(Q){console.warn("[user-fs] failed to clear avatars",Q)}}var SK1="org_user_fs",TV0="/api/_users",AV0="avatars",tq6,fs$=2097152,oq6=5;var vK1=D(()=>{dg();ID();CN();Rz();tq6={maxFileBytes:5242880,volumeQuotaBytes:67108864}});function N80($,Z,Q,Y){let X=v7(Q),J={"Content-Type":X,"X-Content-Type-Options":"nosniff","Cache-Control":Y?"public, max-age=0, must-revalidate":"private, max-age=0"};if(X.startsWith("text/html"))J["Content-Security-Policy"]="sandbox allow-scripts allow-modals allow-same-origin allow-downloads";return $.body(Buffer.from(Z),200,J)}var bK1=D(()=>{YK()});function qV0($,Z){if(Z instanceof ZX)return $.json({error:Z.message},404);if(Z instanceof HG)return $.json({error:Z.message},400);if(Z instanceof qz)return $.json({error:Z.message},413);return console.error("[user-fs] request failed",Z),$.json({error:"Internal error"},500)}function MV0($){let Q=$.get("studioContext").auth?.user?.id;if(!Q)return{ok:!1,res:$.json({error:"Unauthorized"},401)};if(!CK1(Q))return{ok:!1,res:$.json({error:"Unsupported user id"},400)};return{ok:!0,userId:Q}}var cs$=()=>{let $=new Q1;return $.get("/fs/:userId/read",async(Z)=>{let Q=Z.req.param("userId"),Y=Z.req.query("path")??"";if(!CK1(Q))return Z.json({error:"Invalid user id"},400);let X=Z.get("studioContext"),J=od(X),W=(await J.resolveReadAccess(Q,Y).catch(()=>({access:"private"}))).access==="public";if(!W&&X.auth?.user?.id!==Q)return Z.json({error:"Not found"},404);try{return N80(Z,await J.read(Q,Y),Y,W)}catch(K){return qV0(Z,K)}}),$.post("/avatar",I5({maxSize:fs$,onError:(Z)=>Z.json({error:"Avatar exceeds the size limit"},413)}),async(Z)=>{let Q=MV0(Z);if(!Q.ok)return Q.res;let{userId:Y}=Q,X=Z.get("studioContext"),J=new Uint8Array(await Z.req.arrayBuffer());if(J.byteLength===0)return Z.json({error:"Empty request body"},400);let G=ys$(J);if(!G)return Z.json({error:"Avatar must be a PNG, JPEG, GIF or WebP image"},415);try{let W=await hs$(od(X),{userId:Y,bytes:J,contentType:G.mime,ext:G.ext});return Z.json({url:RV0(X.baseUrl,Y,W)})}catch(W){return qV0(Z,W)}}),$.get("/avatars",async(Z)=>{let Q=MV0(Z);if(!Q.ok)return Q.res;let Y=Z.get("studioContext"),X=await gs$(od(Y),Q.userId);return Z.json({avatars:X.map((J)=>({...J,url:RV0(Y.baseUrl,Q.userId,J.path)}))})}),$.post("/avatar/select",async(Z)=>{let Q=MV0(Z);if(!Q.ok)return Q.res;let Y=Z.get("studioContext"),X=await Z.req.json().catch(()=>null);if(typeof X?.path!=="string"||!X.path)return Z.json({error:"Body must be { path: string }"},400);try{return await _K1(od(Y),Q.userId,X.path),Z.json({url:RV0(Y.baseUrl,Q.userId,X.path)})}catch(J){return qV0(Z,J)}}),$.delete("/avatar",async(Z)=>{let Q=MV0(Z);if(!Q.ok)return Q.res;let Y=Z.get("studioContext"),X=od(Y),J=Z.req.query("path");if(!J)return await ls$(X,Q.userId),Z.json({ok:!0});try{return await us$(X,Q.userId,J),Z.json({ok:!0})}catch(G){return qV0(Z,G)}}),$};var ms$=D(()=>{G8();fW();CN();vK1();bK1()});import{z as rd}from"zod";var eq6,$M6,ZM6=200,QM6=2000,YM6=60,XM6=2000,JM6,IV0;var xK1=D(()=>{eq6=["warn","block"],$M6=rd.enum(eq6),JM6=rd.string().max(XM6).refine(($)=>{try{let Z=new URL($);return Z.protocol==="https:"||Z.protocol==="http:"}catch{return!1}},{message:"ctaUrl must be an absolute http(s) URL"}),IV0=rd.object({severity:$M6,title:rd.string().trim().min(1).max(ZM6),message:rd.string().trim().min(1).max(QM6),ctaLabel:rd.string().trim().max(YM6).nullable().optional(),ctaUrl:JM6.nullable().optional()}).refine(($)=>!$.ctaLabel===!$.ctaUrl,{message:"ctaLabel and ctaUrl must be set together",path:["ctaUrl"]})});import{z as fK1}from"zod";function yK1($){let Z=$??{},Q=new Set([...Object.keys(SA.shape),...Object.keys(Z)]),Y={};for(let X of Q)Y[X]=VQ(Z,X);return{flags:Z,effective:Y}}var GM6,ds$;var is$=D(()=>{MZ();GM6=fK1.string().min(1).max(64).regex(/^[a-z][a-z0-9]*(?:_[a-z0-9]+)*$/),ds$=fK1.record(GM6,fK1.boolean())});function ps$($,Z,Q){let Y=Q;for(;;){if(Y=$.indexOf(Z,Y),Y===-1)return-1;let X=$[Y+Z.length];if(X===void 0||X===`
3494
3494
  `||X==="\r")return Y;Y+=Z.length}}function ns$($,Z){let Q=ps$($,WM6(Z),0);if(Q===-1)return null;let Y=$.indexOf(`
3495
3495
  `,Q);if(Y===-1)return null;let X=ps$($,KM6(Z),Y);if(X===-1)return null;let J=$.lastIndexOf(`
3496
3496
  `,X);return{from:Y+1,to:J+1}}function ts$($,Z){let Q=ns$($,Z);return Q?$.slice(Q.from,Q.to):null}function os$($,Z,Q){let Y=ns$($,Z);if(!Y)throw Error(`prompt region "${Z}" not found in source`);let X=Q.endsWith(`
@@ -3703,7 +3703,7 @@ Respond with ONLY a JSON object of this shape, and nothing else:
3703
3703
  ${J.join(`
3704
3704
  `)}`:X}function zh6($){let Z=new Set;for(let Q of $)for(let Y of Q.split(`
3705
3705
  `)){let X=Y.trim();if(/^Co-authored-by:\s/i.test(X))Z.add(X)}return[...Z]}var z48=200,Fh6=12,Nh6,Oh6=300,gk0=3;var sF1=D(()=>{iZ();D8();yk0();Nh6={aheadBy:0,behindBy:0,files:[]}});function Ah6($){if(!$||$.includes(".."))return!1;return Ph6.test($)}function A48($){return Th6.includes($)}function eF1($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!Ah6(Z))return null;let{__resolveType:Q,...Y}=$;return{resolveType:Z,payload:Y}}function $U1($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var Ph6,Th6;var T48=D(()=>{Ph6=/^[\w./@-]+$/;Th6=["vtex/loaders/intelligentSearch/productList.ts","vtex/loaders/categories/tree.ts"]});function s80($,Z){let Q=$?.githubRepo;if(!Q?.owner||!Q?.name)return null;if(!Q.connectionId)return Q;if(!Z.includes(Q.connectionId))return null;return Q}async function q48($,Z,Q,Y){let X=$.organization?.id;if(!X)throw new DE(j7);let J=await sw($.storage,X,Y);if(J&&await yB($.storage,J)){let F=await aF($,J,{forceRefresh:!0}).catch((U)=>{throw new DE(U instanceof Error?U.message:j7)});await R48($,Z,Q,F);return}let G=Y.connectionId??J?.legacyConnectionId;if(!G)throw new DE("Push requires a connected git account. Connect the repository's provider for this project and restart the sandbox.");await Pc({ctx:$,connectionId:G,organizationId:X,forceRefresh:!0,onLegacyMintError:(F)=>{let U=F instanceof Error?F.message:j7;throw new DE(U)}});let{cloneUrl:W,gitUserName:K,gitUserEmail:H}=await sF(G,Y.owner,Y.name,$.db,$.vault).catch((F)=>{let{code:U,message:N}=tU$(F instanceof Error?F.message:String(F));throw U?new DE(N):F});await R48($,Z,Q,{cloneUrl:W,gitUserName:K,gitUserEmail:H})}async function R48($,Z,Q,Y){let{cloneUrl:X,gitUserName:J,gitUserEmail:G}=Y,W=wi($),K=await Z.proxyDaemonRequest(Q,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{repository:{cloneUrl:X},identity:{userName:J,userEmail:G}},...W?{operator:W}:{}})});if(!K.ok){let H=await Pj(K,Rh6).catch(()=>K.statusText);throw Error(`Failed to refresh sandbox git credentials (${K.status}): ${H}`)}}var Rh6=10485760,DE;var ZU1=D(()=>{GW();Vk0();C00();bW0();Re();iZ();DE=class DE extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function Mh6($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!qh6.test(Z))throw Error(`Invalid branch name: ${$}`)}function Hy($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(Ih6)])}async function kh6($,Z){let Q=$.var.studioContext,Y=GU(Z.branch),X=$.req.query("thread")??Y,J=X&&X===Y?Z.branchThread:X?await Q.storage.threads.get(X).catch(()=>null):null,G=J?.virtual_mcp_id===Z.virtualMcpId?J:null,W=Cx(G?.metadata?.runtime);if(W)return W;let K=A20(Z.virtualMcpMetadata),H=K==="cms"?await _F1(Q,{claimName:Z.claimName}):"alive",F=K==="cms"&&H!=="alive"?"cms":"sandbox",U=!!G&&(H==="gone"||H==="alive"&&K==="cms");if(U&&G)_00(Q,G.id,F);if(K==="cms")console.log("sandbox proxy: no runtime stamp",{route:$.req.path,method:$.req.method,reason:G?"unstamped":"threadless",liveness:H,resolved:F,stamped:U});return F}async function Sh6($){let Z=$.get("vmClaim");if(Z.runner)return Z.runner;try{return await IX($.var.studioContext)}catch{return null}}function Fy($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}async function Ai($){let{virtualMcpMetadata:Z,connectionIds:Q}=$.get("vmClaim"),Y=$.var.studioContext,X=s80(Z,Q);if(!X)throw new y0({provider:"github",status:404,message:"Project has no GitHub repository"});let J=K0(Y);return jc(Y,J.id,X)}function YU1($,Z){let Q=Z instanceof Error?Z.message:String(Z),Y=DF$(Z);if(Y!==void 0)return $.json({error:Q},429,{...$9,...Y===null?{}:{"Retry-After":String(Math.ceil(Y/1000))}});if(Z instanceof t6)return $.json({error:Q},409,$9);let X=UW(Z);if(X!==null){let J=X===404?404:X===409||X===422?409:502;return $.json({error:Q},J,$9)}return $.json({error:Q},502,$9)}async function QU1($,Z,Q){let Y;try{Y=await fetch(Z,Q)}catch{return $.json({error:"Preview unreachable"},502)}let X;try{X=await Y.text()}catch{return $.json({error:"Preview unreachable"},502)}return new Response(X,{status:Y.status,headers:{"content-type":Y.headers.get("content-type")??"application/json"}})}async function k48($){try{let Z=await Ai($),Q=await hk0(Z,$.get("vmClaim").branch);return $.json(Q,200,$9)}catch(Z){return YU1($,Z)}}function e80($,Z){let Y=(ck0.get($)??Promise.resolve()).catch(()=>{}).then(Z),X=Y.catch(()=>{});return ck0.set($,X),X.finally(()=>{if(ck0.get($)===X)ck0.delete($)}),Y}async function $Q($,Z,Q){if(!Q?.runner&&$.get("vmClaim").runtime==="cms")return $.json({error:"sandbox not found: this session is sandbox-less"},404,$9);let Y=Q?.runner??Fy($);if(Y instanceof Response)return Y;let{claimName:X,userId:J,projectRef:G}=$.get("vmClaim"),W=Q?.method??"POST",K=null,H=new Headers;if(Q?.jsonBody!==void 0)K=Q.jsonBody,H.set("content-type","application/json");else if(Q?.forwardJsonBody)K=await $.req.text(),H.set("content-type","application/json");let F=Q?.signal,U={method:W,headers:H,body:K,...F?{signal:F}:{}},N=async()=>{let B=await Y.proxyDaemonRequest(X,Z,U);if(Q?.map404to410&&B.status===404){try{await B.body?.cancel()}catch{}if(await Y.adoptLiveClaim({userId:J,projectRef:G},X))B=await Y.proxyDaemonRequest(X,Z,U);if(B.status===404){try{await B.body?.cancel()}catch{}return new Response(JSON.stringify({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."}),{status:410,headers:{"content-type":"application/json",...$9}})}}let O=await B.text(),L=Q?.redactRepoDir?Ch6(O):O,w=B.headers.get("content-type")??"application/json";return new Response(L,{status:B.status,headers:{"content-type":w,...$9}})};try{if(F){let B=N();return B.catch(()=>{}),await Promise.race([B,new Promise((L,w)=>{if(F.aborted)return w(F.reason);F.addEventListener("abort",()=>w(F.reason),{once:!0})})])}return await N()}catch(B){let O=B instanceof Error?B.message:String(B);return $.json({error:`Daemon unreachable: ${O}`},502)}}function Ch6($){try{let Z=JSON.parse($);if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&"repoDir"in Z)return JSON.stringify({...Z,repoDir:null})}catch{}return $}async function mk0($,Z,Q,Y="GET",X){let J=await $.proxyDaemonRequest(Z,Q,{method:Y,headers:new Headers,body:null});if(J.status===404&&X){try{await J.body?.cancel()}catch{}if(await $.adoptLiveClaim(X,Z))J=await $.proxyDaemonRequest(Z,Q,{method:Y,headers:new Headers,body:null})}if(J.status===404){try{await J.body?.cancel()}catch{}throw Error("SANDBOX_GONE")}let G=await J.text();if(!J.ok){let W=`Daemon error (${J.status})`;try{W=JSON.parse(G).error??W}catch{}throw Error(W)}return JSON.parse(G)}function _h6($){return S48.includes($)}var qh6,M48=524288,I48=65536,Ih6=1e4,V48=2000,Vh6,ck0,$9,S48,C48=()=>{let $=new Q1;$.use("/:virtualMcpId/:branch/*",Vh6),$.post("/:virtualMcpId/:branch/write",(Q)=>$Q(Q,"/_sandbox/write",{forwardJsonBody:!0,signal:Hy(Q)})),$.post("/:virtualMcpId/:branch/unlink",(Q)=>$Q(Q,"/_sandbox/unlink",{forwardJsonBody:!0,signal:Hy(Q)})),$.post("/:virtualMcpId/:branch/mkdir",(Q)=>$Q(Q,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:Hy(Q)})),$.post("/:virtualMcpId/:branch/rename",(Q)=>$Q(Q,"/_sandbox/rename",{forwardJsonBody:!0,signal:Hy(Q)})),$.post("/:virtualMcpId/:branch/read",(Q)=>$Q(Q,"/_sandbox/read",{forwardJsonBody:!0,signal:Hy(Q)})),$.post("/:virtualMcpId/:branch/glob",(Q)=>$Q(Q,"/_sandbox/glob",{forwardJsonBody:!0,signal:Hy(Q)})),$.post("/:virtualMcpId/:branch/grep",(Q)=>$Q(Q,"/_sandbox/grep",{forwardJsonBody:!0,signal:Hy(Q)})),$.post("/:virtualMcpId/:branch/exec/:script",async(Q)=>{let Y=Q.req.param("script");if(!Y)return Q.json({error:"missing script name"},400);return $Q(Q,`/_sandbox/exec/${encodeURIComponent(Y)}`)}),$.post("/:virtualMcpId/:branch/exec/:script/kill",async(Q)=>{let Y=Q.req.param("script");if(!Y)return Q.json({error:"missing script name"},400);return $Q(Q,`/_sandbox/exec/${encodeURIComponent(Y)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(Q)=>$Q(Q,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDir:!0})),$.put("/:virtualMcpId/:branch/config",(Q)=>$Q(Q,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(Q)=>{let Y=Q.req.param("step");if(!Y||!_h6(Y))return Q.json({error:`step must be one of: ${S48.join(", ")}`},400);let X=Q.get("vmClaim"),J=await _F1(Q.var.studioContext,{claimName:X.claimName})==="gone"?null:await Sh6(Q);if(!J)return Q.json({error:"sandbox not found: nothing is running at this ref"},404,$9);if(Y==="start"){let G=K0(Q.var.studioContext),W=Zm(X.virtualMcpMetadata);try{await j20({ctx:Q.var.studioContext,runner:J,handle:X.claimName,orgId:G.id,userId:X.callerUserId,entries:W})}catch(K){let H=K instanceof Error?K.message:String(K);return Q.json({error:`Failed to push env to daemon: ${H}`},502)}}return $Q(Q,`/_sandbox/setup/${Y}`,{signal:Q.req.raw.signal,map404to410:!0,runner:J})}),$.get("/:virtualMcpId/:branch/events",(Q)=>{let Y=Q.get("vmClaim");if(!Y.runner)return CO(Q,async(X)=>{await X.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this studio instance."})})});return C88(Q,{ctx:Q.var.studioContext,claimName:Y.claimName,runner:Y.runner,virtualMcpId:Y.virtualMcpId,branch:Y.branch,userId:Y.userId,projectRef:Y.projectRef,virtualMcpMetadata:Y.virtualMcpMetadata})}),$.get("/:virtualMcpId/:branch/git/status",(Q)=>{if(Q.get("vmClaim").runtime==="cms")return k48(Q);return Z(Q)});let Z=(Q)=>$Q(Q,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([Q.req.raw.signal,AbortSignal.timeout(V48)])});return $.post("/:virtualMcpId/:branch/git/status",(Q)=>{if(Q.get("vmClaim").runtime==="cms")return k48(Q);return $Q(Q,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([Q.req.raw.signal,AbortSignal.timeout(V48)])})}),$.post("/:virtualMcpId/:branch/git/diff",async(Q)=>{let Y=Q.get("vmClaim");if(Y.runtime==="cms")try{let X=await Q.req.json().catch(()=>({})),J=await Ai(Q),G=await uk0(J,Y.branch,X.base);return Q.json(G,200,$9)}catch(X){return YU1(Q,X)}return $Q(Q,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})}),$.post("/:virtualMcpId/:branch/git/publish",async(Q)=>{if(Q.get("vmClaim").runtime==="cms")return Q.json({ok:!0},200,$9);let Y=Fy(Q);if(Y instanceof Response)return Y;let{claimName:X,virtualMcpMetadata:J,connectionIds:G}=Q.get("vmClaim"),W=Q.var.studioContext;return e80(X,async()=>{try{await vF1(W,Y,X);let K=s80(J,G);if(K)await q48(W,Y,X,K)}catch(K){if(K instanceof DE)return Q.json({error:K.message},403,$9);let H=K instanceof Error?K.message:String(K);return Q.json({error:H},502,$9)}return $Q(Q,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",async(Q)=>{let Y=Q.get("vmClaim");if(Y.runtime==="cms")return e80(Y.claimName,async()=>{let X=await Q.req.json().catch(()=>({})),J=Array.isArray(X.filepaths)?X.filepaths.filter((G)=>typeof G==="string"):[];if(J.length===0)return Q.json({error:"filepaths is required"},400,$9);try{let G=await Ai(Q);return await P48(G,Y.branch,J),Q.json({ok:!0},200,$9)}catch(G){let W=UW(G)===409||G instanceof t6?409:502,K=G instanceof Error?G.message:String(G);return Q.json({error:K},W,$9)}});return e80(Y.claimName,()=>$Q(Q,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(Q)=>{let Y=Q.get("vmClaim");if(Y.runtime==="cms")return e80(Y.claimName,async()=>{try{let W=await Q.req.json().catch(()=>({})),K=await Ai(Q),H=W.base??await K.getDefaultBranch();return await lk0(K,Y.branch,H),Q.json({ok:!0},200,$9)}catch(W){return YU1(Q,W)}});let X=Fy(Q);if(X instanceof Response)return X;let{claimName:J}=Q.get("vmClaim"),G=Q.var.studioContext;return e80(J,async()=>{try{await vF1(G,X,J)}catch(W){let K=W instanceof Error?W.message:String(W);return Q.json({error:K},502,$9)}return $Q(Q,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",I5({maxSize:M48,onError:(Q)=>Q.json({error:"Payload too large"},413,$9)}),async(Q)=>{let Y=Q.get("vmClaim"),X=null;if(Y.runtime!=="cms"){let H=Fy(Q);if(H instanceof Response)return H;X=H}let{claimName:J,userId:G,projectRef:W}=Y,K=Q.var.studioContext;try{let H=await Q.req.json().catch(()=>({})),F=H.status,U=H.diff,N=U!=null&&typeof U.diffs==="object"&&U.diffs!==null,[B,O]=fF1(F)&&N?[F,U]:X?await Promise.all([mk0(X,J,"/_sandbox/git/status","GET",{userId:G,projectRef:W}),mk0(X,J,"/_sandbox/git/diff","GET",{userId:G,projectRef:W})]):await(async()=>{let w=await Ai(Q);return Promise.all([hk0(w,Y.branch),uk0(w,Y.branch)])})();await hK(K,K0(K).id,"suggesting a commit message");let L=await f88(K,B,O);return Q.json(L,200,$9)}catch(H){let F=H instanceof Error?H.message:String(H);if(F==="SANDBOX_GONE")return Q.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,$9);return Q.json({error:F},502,$9)}}),$.post("/:virtualMcpId/:branch/git/judge-review",I5({maxSize:M48,onError:(Q)=>Q.json({error:"Payload too large"},413,$9)}),async(Q)=>{let Y=Q.get("vmClaim"),X=null;if(Y.runtime!=="cms"){let H=Fy(Q);if(H instanceof Response)return H;X=H}let{claimName:J,userId:G,projectRef:W}=Y,K=Q.var.studioContext;try{let H=await Q.req.json().catch(()=>({})),F=H.status,U=H.diff,N=U!=null&&typeof U.diffs==="object"&&U.diffs!==null,[B,O]=fF1(F)&&N?[F,U]:X?await Promise.all([mk0(X,J,"/_sandbox/git/status","GET",{userId:G,projectRef:W}),mk0(X,J,"/_sandbox/git/diff","GET",{userId:G,projectRef:W})]):await(async()=>{let w=await Ai(Q);return Promise.all([hk0(w,Y.branch),uk0(w,Y.branch)])})();await hK(K,K0(K).id,"judging whether a change needs review");let L=await g88(K,B,O,typeof H.language==="string"?H.language:void 0);return Q.json(L,200,$9)}catch(H){let F=H instanceof Error?H.message:String(H);if(F==="SANDBOX_GONE")return Q.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,$9);return Q.json({error:F},502,$9)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(Q)=>{let Y=Fy(Q);if(Y instanceof Response)return Y;let{claimName:X}=Q.get("vmClaim"),J=Q.req.query("path");if(!J||!J.startsWith("/")||J.startsWith("//")||J.includes("..")||J.includes("\\"))return Q.json({error:"Path not allowed"},403);let G;try{G=await Y.getPreviewUrl(X)}catch{return Q.json({error:"Preview not available"},502)}if(!G)return Q.json({error:"Preview not available"},502);let W=G.replace(/\/+$/,"");return QU1(Q,`${W}${J}`)}),$.post("/:virtualMcpId/:branch/preview-invoke",I5({maxSize:I48,onError:(Q)=>Q.json({error:"Payload too large"},413)}),async(Q)=>{let Y=Fy(Q);if(Y instanceof Response)return Y;let{claimName:X}=Q.get("vmClaim"),J;try{J=await Y.getPreviewUrl(X)}catch{return Q.json({error:"Preview not available"},502)}if(!J)return Q.json({error:"Preview not available"},502);let G;try{G=await Q.req.json()}catch{return Q.json({error:"Invalid JSON body"},400)}if(!G||typeof G!=="object"||Array.isArray(G))return Q.json({error:"Invalid JSON body"},400);let W=eF1(G);if(!W)return Q.json({error:"Invalid or missing __resolveType"},400);let K=$U1(J,W.resolveType);return QU1(Q,K,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(W.payload),signal:AbortSignal.timeout(30000)})}),$.post("/:virtualMcpId/:branch/catalog-invoke",I5({maxSize:I48,onError:(Q)=>Q.json({error:"Payload too large"},413)}),async(Q)=>{let{runner:Y,claimName:X,virtualMcpMetadata:J}=Q.get("vmClaim"),G;try{G=Y?await Y.getPreviewUrl(X):Qm(J)}catch{return Q.json({error:"Preview not available"},502)}if(!G)return Q.json({error:"Preview not available"},502);let W;try{W=await Q.req.json()}catch{return Q.json({error:"Invalid JSON body"},400)}if(!W||typeof W!=="object"||Array.isArray(W))return Q.json({error:"Invalid JSON body"},400);let K=eF1(W);if(!K)return Q.json({error:"Invalid or missing __resolveType"},400);if(!A48(K.resolveType))return Q.json({error:"resolveType not allowed"},403);let H=$U1(G,K.resolveType);return QU1(Q,H,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(K.payload),signal:AbortSignal.timeout(30000)})}),$};var _48=D(()=>{G8();fW();Li();CF1();V00();V88();jW();Ym();k88();QH();yF();S88();_88();s61();S00();hF1();h88();iZ();w5();sF1();T48();P20();ZU1();qh6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;Vh6=Ik0(async($,Z)=>{let Q=$.var.studioContext;try{s(Q)}catch{return $.json({error:"Unauthorized"},401)}let Y=p0(Q);if(!Y)return $.json({error:"Unauthorized"},401);let X;try{X=K0(Q)}catch{return $.json({error:"Organization scope required"},403)}let J=$.req.param("virtualMcpId"),G=$.req.param("branch");if(!J||!G)return $.json({error:"virtualMcpId and branch are required"},400);try{Mh6(G)}catch(L){let w=L instanceof Error?L.message:String(L);return $.json({error:w},400)}let W=await Q.storage.virtualMcps.findById(J);if(!W||W.organization_id!==X.id)return $.json({error:"Virtual MCP not found"},404);let K=oe({orgId:X.id,virtualMcpId:J,branch:G}),H=await R41(Q,G),F=q41(H,Y),U=I88({userId:F,projectRef:K}),N=W.metadata??null,B=await kh6($,{claimName:U,branch:G,virtualMcpId:J,sandboxUserId:F,virtualMcpMetadata:N,branchThread:H});if(B==="cms")return $.set("vmClaim",{claimName:U,callerUserId:Y,runner:null,virtualMcpId:J,branch:G,userId:F,projectRef:K,virtualMcpMetadata:N,connectionIds:W.connections?.map((L)=>L.connection_id)??[],runtime:B}),Z();let O;try{O=await IX(Q)}catch{O=null}if(!O)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:U,callerUserId:Y,runner:O,virtualMcpId:J,branch:G,userId:F,projectRef:K,virtualMcpMetadata:N,connectionIds:W.connections?.map((L)=>L.connection_id)??[],runtime:B}),Z()});ck0=new Map;$9={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};S48=["clone","install","start"]});function v48($,Z,Q){let Y=XU1.get($);if(!Y)Y={pending:null,running:!1},XU1.set($,Y);if(!Y.pending)Y.pending={set:new Map,del:new Set,deps:Z,resolvers:[],rejecters:[]};let X=Y.pending;X.deps=Z;for(let[G,W]of Object.entries(Q.set??{}))X.set.set(G,W),X.del.delete(G);for(let G of Q.delete??[])X.del.add(G),X.set.delete(G);let J=new Promise((G,W)=>{X.resolvers.push(G),X.rejecters.push(W)});if(!Y.running)bh6($,Y);return J}async function bh6($,Z){Z.running=!0;try{while(Z.pending){let Q=Z.pending;Z.pending=null;try{let Y=await xh6(Q);for(let X of Q.resolvers)X(Y)}catch(Y){for(let X of Q.rejecters)X(Y)}}}finally{if(Z.running=!1,!Z.pending)XU1.delete($)}}async function xh6($){let{client:Z,branch:Q,packagePath:Y}=$.deps,X=new Map;for(let J=0;;J++){let G=await Pi(Z,Q),W=await Z.listDecofileEntries(G,Y),K=oF1(W,Y),H=[],F=new Map(K.map((N)=>[N.path,{stem:N.stem,sha:N.sha}]));for(let[N,B]of $.set){let O=rF1(K,N),L=`${JSON.stringify(B,null,2)}
3706
- `;await L48(Z.repo,L);let w=O[0]??`${fk0(Y)}/${cF1(N)}.json`;H.push({path:w,content:L});let j=w.slice(w.lastIndexOf("/")+1,-5);F.set(w,{stem:j,content:L});for(let E of O.slice(1))H.push({path:E,deleted:!0}),F.delete(E)}for(let N of $.del)for(let B of rF1(K,N))H.push({path:B,deleted:!0}),F.delete(B);if(H.length===0)return G;let U=Y?`${Y}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((N)=>N.type==="blob"&&N.path===U)){let N=await w48(Z,F.values(),X),{decofile:B,skipped:O}=n80(N);if(O.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:cK(Z.repo),branch:Q,packagePath:Y,blocks:O.map((L)=>L.key)});H.push({path:U,content:B})}try{let{sha:N}=await Z.commitFiles({branch:Q,message:fh6($),expectedHead:G,changes:H});return N}catch(N){if(!(N instanceof t6)||J>=vh6-1)throw N;await i$(QQ(2000,200,J,2,0.5))}}}function fh6($){let Z=(X)=>{let J=X.slice(0,3).join(", ");return X.length>3?`${J} (+${X.length-3} more)`:J},Q=[];if($.set.size>0)Q.push(`update ${Z([...$.set.keys()])}`);if($.del.size>0)Q.push(`delete ${Z([...$.del])}`);let Y=`chore(decofile): ${Q.join("; ")}`;return n81(Y,$.deps.coAuthor)}var vh6=3,XU1;var b48=D(()=>{GA0();Sk0();T6();D8();iZ();yk0();XU1=new Map});import{createHmac as x48,randomBytes as yh6,timingSafeEqual as gh6}from"crypto";function f48(){if(dk0)return dk0;let $;try{let Z=E0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return dk0=$?Buffer.from($):yh6(32),dk0}function JU1($){let Z=$.nowMs??Date.now(),Q={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+hh6)/1000)},Y=Buffer.from(JSON.stringify(Q)).toString("base64url"),X=x48("sha256",f48()).update(Y).digest("base64url");return`${Y}.${X}`}function y48($,Z){let Q=$.indexOf(".");if(Q<0)return!1;let Y=$.slice(0,Q),X=Buffer.from($.slice(Q+1)),J=Buffer.from(x48("sha256",f48()).update(Y).digest("base64url"));if(X.length!==J.length||!gh6(X,J))return!1;let G;try{G=JSON.parse(Buffer.from(Y,"base64url").toString())}catch{return!1}let W=Math.floor((Z.nowMs??Date.now())/1000);return G.o===Z.organizationId&&G.m===Z.virtualMcpId&&G.b===Z.branch&&typeof G.e==="number"&&G.e>=W}var hh6=21600000,dk0=null;var g48=D(()=>{F$()});function ik0($){return $&&typeof $==="object"&&!Array.isArray($)?$:null}function uh6($){for(let[Z,Q]of Object.entries($)){if(!Z.startsWith("collections/blog/posts/"))continue;let Y=ik0(Q)?.__resolveType;if(typeof Y==="string"&&Y)return Y}return"blog/loaders/Blogpost.ts"}function h48($){let Z;try{Z=ik0(JSON.parse($))}catch{return $}if(!Z)return $;let Q=uh6(Z),Y={...Z},X=0;for(let[J,G]of Object.entries(Z)){if(!J.startsWith("blog-manager/posts/"))continue;let W=ik0(G),K=W&&ik0(W.post);if(!K)continue;if(K.status==="archived")continue;if(typeof K.slug!=="string"||!K.slug)continue;let F=`collections/blog/posts/${J.slice(19)}`;if(Object.hasOwn(Y,F))continue;Y[F]={name:F,__resolveType:Q,["post"]:{...K,status:"published"}},X++}return X>0?JSON.stringify(Y):$}import{z as Ti}from"zod";function ch6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&lh6.test($)}function d48($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function $40($){let Z=$.get("decofileScope");return jc($.var.studioContext,Z.organizationId,Z.githubRepo)}function Z40($,Z){let Q=Z instanceof Error?Z.message:String(Z);if(Z instanceof t6)return $.json({error:Q},409);let Y=UW(Z);if(Y!==null){let X=Y===404?404:Y===409||Y===422?409:502;return $.json({error:Q},X)}return $.json({error:Q},500)}function i48(){let $=new Q1;return $.use("/:virtualMcpId/:branch",m48),$.use("/:virtualMcpId/:branch/*",m48),$.get("/:virtualMcpId/:branch",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await $40(Z),X=await j48(Y,Q.branch,Q.packagePath,{createBranchIfMissing:!!Q.userId}),J={ETag:`"${X.sha}"`,"Cache-Control":"no-store","Access-Control-Allow-Origin":"*"};if(Z.req.header("if-none-match")===`"${X.sha}"`)return Z.body(null,304,J);if(!Q.userId)return Z.body(h48(X.decofile),200,{...J,"content-type":"application/json"});let G=JU1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.body(`{"version":${JSON.stringify(X.sha)},"token":${JSON.stringify(G)},"apiHost":${JSON.stringify(d48(Z))},"decofile":${X.decofile}}`,200,{...J,"content-type":"application/json"})}catch(Y){return Z40(Z,Y)}}),$.get("/:virtualMcpId/:branch/meta",async(Z)=>{let Q=Z.get("decofileScope"),Y=Q.packagePath?`${Q.packagePath}/.deco/meta.gen.json`:".deco/meta.gen.json";try{let X=await $40(Z),J=await X.readFileAtRef(Q.branch,Y);if(J===null){let G=await X.getDefaultBranch();if(G!==Q.branch)J=await X.readFileAtRef(G,Y)}if(J===null)return Z.json({error:"meta.gen.json not committed"},404);return Z.body(J,200,{"content-type":"application/json","Cache-Control":"no-store","Access-Control-Allow-Origin":"*"})}catch(X){return Z40(Z,X)}}),$.patch("/:virtualMcpId/:branch",dh6,async(Z)=>{let Q=Z.get("decofileScope"),Y=Z.var.studioContext,X=ih6.safeParse(await Z.req.json().catch(()=>null));if(!X.success)return Z.json({error:"Invalid body",details:X.error.issues},400);let J=X.data;for(let G of[...Object.keys(J.set??{}),...J.delete??[]])try{kk0(G)}catch(W){let K=W instanceof Error?W.message:String(W);return Z.json({error:K},400)}for(let[G,W]of Object.entries(J.set??{})){if(typeof W!=="object"||W===null||Array.isArray(W))return Z.json({error:`Block "${G}" must be a JSON object`},400);if(lF1(G))return Z.json({error:`Block key "${G}" collides with a framework resolver module and cannot be written`},400)}try{let G=await $40(Z),W=await v48(`${Q.organizationId}/${Q.virtualMcpId}/${Q.branch}`,{client:G,branch:Q.branch,packagePath:Q.packagePath,coAuthor:wi(Y)},J),K=JU1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.json({version:W,token:K,apiHost:d48(Z)})}catch(G){return Z40(Z,G)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await $40(Z),X=await Y.getDefaultBranch();if(X===Q.branch)return Z.json({error:"Branch is already the default branch"},400);let J=`chore(decofile): publish ${Q.branch}`;try{let G;try{G=await Y.mergeBranches(X,Q.branch,J)}catch(W){if(UW(W)!==409)throw W;await lk0(Y,Q.branch,X),G=await Y.mergeBranches(X,Q.branch,J)}return G?Z.json({result:"merged",sha:G}):Z.json({result:"up-to-date"})}catch(G){if(UW(G)===409)return Z.json({error:"merge-conflict"},409);if(UW(G)===405){let K=await Y.findOpenChangeRequest(X,Q.branch)??await Y.createChangeRequest({base:X,head:Q.branch,title:`Publish ${Q.branch}`});return Z.json({result:"pull-request",number:K.number,url:K.url})}throw G}}catch(Y){return Z40(Z,Y)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await $40(Z),X=await Y.getDefaultBranch();if(X===Q.branch)return Z.json({baseBranch:X,aheadBy:0,behindBy:0,lastCommitAt:null});try{let[{aheadBy:J,behindBy:G},W]=await Promise.all([Y.compare(X,Q.branch),Y.getBranch(Q.branch)]);return Z.json({baseBranch:X,aheadBy:J,behindBy:G,lastCommitAt:W?.committedAt??null})}catch(J){if(UW(J)===404)return Z.json({baseBranch:X,aheadBy:0,behindBy:0,lastCommitAt:null});throw J}}catch(Y){return Z40(Z,Y)}}),$}var lh6,u48=500,l48=1048576,c48=1024,mh6=8388608,dh6,ih6,m48;var p48=D(()=>{P20();Sk0();G8();fW();CF1();Vk0();ZU1();iZ();b48();g48();sF1();yk0();yF();lh6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;dh6=I5({maxSize:mh6,onError:($)=>$.json({error:"Payload too large"},413)}),ih6=Ti.object({set:Ti.record(Ti.string(),Ti.unknown()).optional(),delete:Ti.array(Ti.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}).refine(($)=>Object.keys($.set??{}).length+($.delete?.length??0)<=u48,{message:`Patch cannot touch more than ${u48} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=l48),{message:`Each block must be at most ${l48} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=c48),{message:`Each block key must be at most ${c48} characters`}),m48=Ik0(async($,Z)=>{let Q=$.var.studioContext,Y=Q.organization;if(!Y)return $.json({error:"Organization scope required"},500);let X=$.req.param("virtualMcpId"),J=$.req.param("branch");if(!X||!J)return $.json({error:"virtualMcpId and branch are required"},400);if(!ch6(J))return $.json({error:`Invalid branch name: ${J}`},400);let G=Q.auth?.user?.id??null;if(!G){let B=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!B||!y48(B,{organizationId:Y.id,virtualMcpId:X,branch:J}))return $.json({error:"Unauthorized"},401)}if(!await ZW(Q,Y.id,"cms"))return $.json({error:"This organization's plan does not include the CMS",code:"feature_not_in_plan"},403);let W=await Q.storage.virtualMcps.findById(X);if(!W||W.organization_id!==Y.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!Qm(K))return $.json({error:"Project has no preview server configured"},404);let F=W.connections?.map((B)=>B.connection_id)??[],U=s80(K,F);if(!U)return $.json({error:"Project has no GitHub repository"},404);let N=K?.runtime;return $.set("decofileScope",{organizationId:Y.id,virtualMcpId:X,branch:J,packagePath:N?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:U,userId:G}),Z()})});var n48=($)=>{let Z=new Q1;if(Z.use("*",td),Z.use("*",Te$),Z.route("/",fV0()),Z.route("/",J08()),Z.route("/",ie$()),Z.route("/",O88()),Z.route("/",G88()),Z.route("/",N88()),Z.route("/",K88()),Z.route("/",Rk0()),Z.route("/tools",P88()),Z.route("/",j88()),Z.route("/",g$8({kvStorage:$.kvStorage})),Z.route("/",f$8()),Z.route("/fs",a$8({getConnection:$.getNatsConnection})),Z.route("/sandbox",C48()),Z.route("/decofile",i48()),Z.route("/",Y88()),Z.route("/",e$8()),Z.route("/deco-sites",gV0()),Z.route("/hosting",be$()),Z.route("/monitor",le$()),Z.route("/sso",CV0()),Z.route("/",qk0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",ke$()),$.mountDevAssets)Z.route("/dev-assets",cV0({orgFromPath:!0}));return Z.use("/mcp/:connectionId?",$.mcpAuth),Z.use("/mcp/:connectionId/ui-resource",$.mcpAuth),Z.use("/mcp/gateway/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/virtual-mcp/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/self",$.mcpAuth),Z.use("/mcp/task-run/:threadId",$.mcpAuth),Z.route("/",br$()),Z.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",$.betterAuthProtectedResourceHandler),Z.get("/mcp/.well-known/oauth-protected-resource",$.betterAuthProtectedResourceHandler),Z.route("/mcp/task-run",Z88()),Z.route("/mcp",kR0()),Z.route("/mcp/self",zk0()),Z.route("/mcp",_R0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var t48=D(()=>{G8();Re$();zV0();Se$();sK1();xe$();ce$();mV0();af();nK1();YH1();y$8();h$8();s$8();$88();h10();lK1();vR0();AF1();Q88();X88();W88();H88();qF1();D88();E88();MF1();A88();IF1();SR0();_48();p48()});function ph6($){return $.filter((Z)=>Z.vendors?.alias).map((Z)=>({name:Z.name,title:Z.title,description:Z.description,logo:Z.logo,category:Z.category,vendor:{alias:Z.vendors.alias,url:Z.vendors.url}}))}var nh6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},o48=()=>{let $=new Q1;return $.use("*",nh6),$.get("/",async(Z)=>{let Q=E0(),Y=Q.decoSupabaseUrl,X=Q.decoSupabaseServiceKey;if(!Y||!X)return Z.json({apps:[]});try{let J=await lJ(Y,X,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:ph6(J)})}catch(J){return console.error("[deco-apps] GET error:",J),Z.json({error:"Failed to fetch apps"},502)}}),$};var r48=D(()=>{G8();F$();qI0()});import{z as v1}from"zod";function dU($,Z="invalid_request_error",Q=null,Y=null){return{error:{message:$,type:Z,param:Q,code:Y}}}function Yu6($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let Q=$.substring(0,Z),Y=$.substring(Z+1);if(!Q||!Y)return null;return{credentialId:Q,modelId:Y}}function Xu6($,Z,Q){try{return JSON.parse($)}catch{throw new e48(`Invalid JSON in tool call arguments for function '${Q}' (tool_call_id: ${Z}): ${$}`)}}function Ju6($){let Z={};for(let Q of $)if(Q.role==="assistant"&&Q.tool_calls)for(let Y of Q.tool_calls)Z[Y.id]=Y.function.name;return $.map((Q)=>{switch(Q.role){case"system":return{role:"system",content:Q.content};case"user":if(typeof Q.content==="string")return{role:"user",content:Q.content};return{role:"user",content:Q.content.map((X)=>{if(X.type==="text")return{type:"text",text:X.text};return{type:"image",image:X.image_url.url}})};case"assistant":if(Q.tool_calls&&Q.tool_calls.length>0)return{role:"assistant",content:Q.tool_calls.map((X)=>({type:"tool-call",toolCallId:X.id,toolName:X.function.name,input:Xu6(X.function.arguments,X.id,X.function.name)}))};return{role:"assistant",content:Q.content??""};case"tool":let Y=Z[Q.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:Q.tool_call_id,toolName:Y,output:{type:"text",value:Q.content}}]}}})}function Gu6($){let Z=$.map((Q)=>{let Y=Q.function.parameters?PF(Q.function.parameters):PF({type:"object",properties:{}});return[Q.function.name,c$({description:Q.function.description,inputSchema:Y})]});return Object.fromEntries(Z)}function Wu6($){if(!$)return;return{openai:{response_format:$}}}function Ku6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function a48($,Z,Q,Y,X,J){let G={model:$,instructions:Z.filter((W)=>W.role==="system"),messages:Z.filter((W)=>W.role!=="system"),tools:Q,temperature:Y.temperature,maxOutputTokens: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:J};return X?{...G,providerOptions:X}:G}function s48($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var th6=256,oh6,rh6,ah6,sh6,eh6,$u6,Zu6,Qu6,e48,$68,Z68;var Q68=D(()=>{v4();G8();Li();NH();oh6=v1.object({type:v1.literal("function"),function:v1.object({name:v1.string(),description:v1.string().optional(),parameters:v1.record(v1.string(),v1.unknown()).optional()})}),rh6=v1.object({id:v1.string(),type:v1.literal("function"),function:v1.object({name:v1.string(),arguments:v1.string()})}),ah6=v1.discriminatedUnion("role",[v1.object({role:v1.literal("system"),content:v1.string(),name:v1.string().optional()}),v1.object({role:v1.literal("user"),content:v1.union([v1.string(),v1.array(v1.union([v1.object({type:v1.literal("text"),text:v1.string()}),v1.object({type:v1.literal("image_url"),image_url:v1.object({url:v1.string(),detail:v1.string().optional()})})]))]),name:v1.string().optional()}),v1.object({role:v1.literal("assistant"),content:v1.string().nullable().optional(),name:v1.string().optional(),tool_calls:v1.array(rh6).optional()}),v1.object({role:v1.literal("tool"),content:v1.string(),tool_call_id:v1.string()})]),sh6=v1.object({type:v1.literal("text")}),eh6=v1.object({type:v1.literal("json_object")}),$u6=v1.object({type:v1.literal("json_schema"),json_schema:v1.object({name:v1.string(),description:v1.string().optional(),schema:v1.record(v1.string(),v1.unknown()),strict:v1.boolean().optional()})}),Zu6=v1.union([sh6,eh6,$u6]),Qu6=v1.object({model:v1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:v1.array(ah6),stream:v1.boolean().optional().default(!1),temperature:v1.number().min(0).max(2).optional(),max_tokens:v1.number().positive().optional(),top_p:v1.number().min(0).max(1).optional(),frequency_penalty:v1.number().min(-2).max(2).optional(),presence_penalty:v1.number().min(-2).max(2).optional(),stop:v1.union([v1.string(),v1.array(v1.string())]).optional(),tools:v1.array(oh6).optional(),tool_choice:v1.union([v1.literal("auto"),v1.literal("none"),v1.literal("required"),v1.object({type:v1.literal("function"),function:v1.object({name:v1.string()})})]).optional(),response_format:Zu6.optional(),user:v1.string().optional()});e48=class e48 extends Error{constructor($){super($);this.name="MessageConversionError"}};$68=new Q1;$68.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),Q=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(dU("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(dU("Organization context is required. Ensure your API key has organization metadata.","invalid_request_error","organization"),400);if((Z.organization.slug??Z.organization.id)!==Q)return $.json(dU("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Y=await $.req.json(),X=Qu6.safeParse(Y);if(!X.success){let w=X.error.issues[0]??{message:"Invalid request",path:[]};return $.json(dU(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let J=X.data,G=Yu6(J.model);if(!G)return $.json(dU("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}=G,{modelId:K}=G;if(!W){let j=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((E)=>Sz(E.providerId));if(!j)return $.json(dU("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=j.id}let H;try{H=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(dU(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),U=Ju6(J.messages),N=J.tools?Gu6(J.tools):void 0,B=Wu6(J.response_format),O=Ku6(),L=Math.floor(Date.now()/1000);if(J.stream)return CO($,async(w)=>{let j=a48(F,U,N,J,B,$.req.raw.signal);try{let E=$m(j),z=!1,T=0,P="",A=async()=>{if(P.length===0)return;let q=P;P="",await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{content:q},finish_reason:null}]})})};for await(let q of E.stream){if(!z&&(q.type==="text-delta"||q.type==="tool-call"))await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(q.type==="text-delta"){if(P+=q.text,P.length>=th6)await A()}else if(q.type==="tool-call"){await A();let x=T++;await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{tool_calls:[{index:x,id:q.toolCallId,type:"function",function:{name:q.toolName,arguments:JSON.stringify(q.input)}}]},finish_reason:null}]})})}else if(q.type==="finish")await A(),await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{},finish_reason:s48(q.finishReason)}],usage:q.totalUsage?{prompt_tokens:q.totalUsage.inputTokens??0,completion_tokens:q.totalUsage.outputTokens??0,total_tokens:q.totalUsage.totalTokens??0}:void 0})})}await A(),await w.writeSSE({data:"[DONE]"})}catch(E){let z=E;console.error("[openai-compat:stream] Error:",z.message),await w.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let w=a48(F,U,N,J,B,$.req.raw.signal),j=await HU(w),E={role:"assistant",content:j.text||null};if(j.toolCalls&&j.toolCalls.length>0)E.tool_calls=j.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),E.content=null;return $.json({id:O,object:"chat.completion",created:L,model:J.model,choices:[{index:0,message:E,finish_reason:s48(j.finishReason)}],usage:{prompt_tokens:j.usage?.inputTokens??0,completion_tokens:j.usage?.outputTokens??0,total_tokens:j.usage?.totalTokens??0}})}}catch(Y){let X=Y;if(X.name==="AbortError")return $.json(dU("Request aborted","invalid_request_error"),400);if(X.name==="MessageConversionError")return $.json(dU(X.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",X.message,X.stack),$.json(dU(X.message,"server_error"),500)}});Z68=$68});function Hu6($){if(typeof $!=="object"||$===null)return!1;let Q=$.githubRepo?.url;return typeof Q==="string"&&Q.length>0}function Y68(){let $=new Q1;return $.use("*",async(Z,Q)=>{await Q(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let Q=Z.get("studioContext"),Y=p0(Q);if(!Y)return Z.json({error:"Authentication required"},401);let J=(Z.req.query("site")??"").trim().toLowerCase();if(!dZ(J))return Z.json({error:"Invalid site slug"},400);let G=await Q.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["organization.id as id","organization.slug as slug","organization.name as name","organization.metadata as metadata"]).where("member.userId","=",Y).execute(),W=[];for(let H of G){if(!H.slug||P9(H))continue;let F=await Q.storage.virtualMcps.list(H.id);for(let U of F){if(us(U)!==J)continue;if(!Hu6(U.metadata))continue;W.push({orgSlug:H.slug,orgName:H.name??H.slug,project:{id:U.id,title:U.title,icon:U.icon??null}})}}let K={matches:W};return Z.json(K)}),$}var X68=D(()=>{G8();WW()});var G68;var J68=D(()=>{G68={name:"decocms",version:"4.400.5",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^4.0.58","@ai-sdk/google":"^4.0.76","@ai-sdk/openai":"^4.0.71","@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":"^3.1.0","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^4.0.17","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^7.0.107","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function Nu6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??Uu6}}var W68,Uu6="https://ph.studio.decocms.com",K68;var H68=D(()=>{G8();Hr();rx();E9();F$();IK1();J68();W68=new Q1;W68.get("/",($)=>{let Z={version:G68.version,theme:J$$(),...RK().logo&&{logo:RK().logo},...GO()&&{internalUrl:yc1()},...E0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!E0().firecrawlApiKey,hostingEnabled:!!E0().controlplaneRestUrl&&!!E0().controlplaneServiceToken,hostingControlPlaneGa:E0().hostingControlPlaneGa,monitorEnabled:!!E0().clickhouseAnalyticsUrl&&!!E0().clickhouseAnalyticsPassword,monitorGa:E0().monitorGa,plansEnabled:E0().plansEnabled,auth:Rs$(),posthog:Nu6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:mO()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});K68=W68});function Uy($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function GU1($){return(Uy($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((Q)=>Q.charAt(0).toUpperCase()+Q.slice(1)).join(" ")}function F68($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Uy($))}&sz=${Z}`}function Bu6($,Z){let Q=$.trim();if(Q.length<=Z)return Q;let Y=Q.slice(0,Z-1),X=Y.lastIndexOf(" ");return`${(X>Z*0.6?Y.slice(0,X):Y).trimEnd()}\u2026`}function U68($){let{brand:Z,domain:Q,score:Y}=$,X=typeof Y==="number"?`${Z} commerce report \u2014 ${Math.round(Y)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,J=Bu6(`How does ${Q} really perform? See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,200);return{title:X,description:J}}import{z as L$}from"zod";var Ou6,N68;var B68=D(()=>{Ou6=L$.object({check_id:L$.string(),title:L$.string(),description:L$.string().optional(),impact:L$.string().optional(),why:L$.string().optional(),category:L$.string(),severity:L$.string(),value_band:L$.string().optional(),value_driver:L$.string().optional(),controllability:L$.string().optional(),pages:L$.array(L$.string()),tasks:L$.array(L$.string()),evidence:L$.string(),sample_scope:L$.string().optional(),sources:L$.array(L$.string())}),N68=L$.object({domain:L$.string(),brand:L$.string(),favicon:L$.string().optional(),scanned_at:L$.string().nullable(),lang:L$.string(),score:L$.number().nullable(),band:L$.string().nullable(),totals:L$.object({measured:L$.number(),registry_total:L$.number(),passed:L$.number(),failed:L$.number(),blocked:L$.number()}),buckets:L$.array(L$.object({id:L$.enum(["critical","important","worth"]),label:L$.string(),items:L$.array(Ou6)})),passing:L$.object({count:L$.number(),items:L$.array(L$.object({check_id:L$.string(),title:L$.string()}))}),not_measured:L$.object({count:L$.number(),groups:L$.array(L$.object({reason:L$.string(),label:L$.string(),count:L$.number(),checks:L$.array(L$.string())}))}),categories:L$.array(L$.object({key:L$.string(),label:L$.string(),score:L$.number().nullable(),band:L$.string().nullable(),pass:L$.number(),fail:L$.number()})),screenshots:L$.array(L$.object({url:L$.string(),page_type:L$.string().optional(),viewport:L$.enum(["desktop","mobile"]),image_url:L$.string()}))})});function O68($,Z,Q){let Y=Q?`?${new URLSearchParams({lang:Q}).toString()}`:"";return`${uK({})}/api/v2/public/diagnostics/${encodeURIComponent($)}/onepager${Z}${Y}`}async function pk0($,Z={}){let Q=await fetch(O68($,"",Z.lang),{headers:{Accept:"application/json"},signal:Z.signal});if(Q.status===404)return null;if(!Q.ok)throw Error(`onepager read HTTP ${Q.status}`);return N68.parse(await Q.json())}async function D68($,Z={}){let Q=await fetch(O68($,".md"),{headers:{Accept:"text/markdown"},signal:Z.signal});if(Q.status===404)return null;if(!Q.ok)throw Error(`onepager markdown HTTP ${Q.status}`);return Q.text()}var WU1=D(()=>{B68();Ow()});import{join as L68}from"path";async function Lu6($){try{let Z=await pk0($,{signal:AbortSignal.timeout(Du6)});if(!Z?.scanned_at)return null;return{brand:Z.brand.trim()||GU1($),...Z.score!==null?{score:Z.score}:{}}}catch{return null}}function iJ($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function wu6($,Z){let Q=Uy($),Y=Z?.brand?.trim()||GU1(Q),X=F68(Q,128),G=`${(E0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(Q)}`,{title:W,description:K}=U68({brand:Y,domain:Q,score:Z?.score}),H=`${G}/og.png`,F=`${Y} commerce report by decocms`;return[`<title>${iJ(W)}</title>`,`<meta name="description" content="${iJ(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="${iJ(W)}" />`,`<meta property="og:description" content="${iJ(K)}" />`,`<meta property="og:url" content="${iJ(G)}" />`,`<meta property="og:image" content="${iJ(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${iJ(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${iJ(W)}" />`,`<meta name="twitter:description" content="${iJ(K)}" />`,`<meta name="twitter:image" content="${iJ(H)}" />`,`<meta name="twitter:image:alt" content="${iJ(F)}" />`,`<link rel="canonical" href="${iJ(G)}" />`,`<link rel="alternate" type="text/markdown" href="${iJ(G)}.md" />`,`<link rel="icon" href="${iJ(X)}" sizes="any" />`].join(`
3706
+ `;await L48(Z.repo,L);let w=O[0]??`${fk0(Y)}/${cF1(N)}.json`;H.push({path:w,content:L});let j=w.slice(w.lastIndexOf("/")+1,-5);F.set(w,{stem:j,content:L});for(let E of O.slice(1))H.push({path:E,deleted:!0}),F.delete(E)}for(let N of $.del)for(let B of rF1(K,N))H.push({path:B,deleted:!0}),F.delete(B);if(H.length===0)return G;let U=Y?`${Y}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((N)=>N.type==="blob"&&N.path===U)){let N=await w48(Z,F.values(),X),{decofile:B,skipped:O}=n80(N);if(O.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:cK(Z.repo),branch:Q,packagePath:Y,blocks:O.map((L)=>L.key)});H.push({path:U,content:B})}try{let{sha:N}=await Z.commitFiles({branch:Q,message:fh6($),expectedHead:G,changes:H});return N}catch(N){if(!(N instanceof t6)||J>=vh6-1)throw N;await i$(QQ(2000,200,J,2,0.5))}}}function fh6($){let Z=(X)=>{let J=X.slice(0,3).join(", ");return X.length>3?`${J} (+${X.length-3} more)`:J},Q=[];if($.set.size>0)Q.push(`update ${Z([...$.set.keys()])}`);if($.del.size>0)Q.push(`delete ${Z([...$.del])}`);let Y=`chore(decofile): ${Q.join("; ")}`;return n81(Y,$.deps.coAuthor)}var vh6=3,XU1;var b48=D(()=>{GA0();Sk0();T6();D8();iZ();yk0();XU1=new Map});import{createHmac as x48,randomBytes as yh6,timingSafeEqual as gh6}from"crypto";function f48(){if(dk0)return dk0;let $;try{let Z=E0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return dk0=$?Buffer.from($):yh6(32),dk0}function JU1($){let Z=$.nowMs??Date.now(),Q={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+hh6)/1000)},Y=Buffer.from(JSON.stringify(Q)).toString("base64url"),X=x48("sha256",f48()).update(Y).digest("base64url");return`${Y}.${X}`}function y48($,Z){let Q=$.indexOf(".");if(Q<0)return!1;let Y=$.slice(0,Q),X=Buffer.from($.slice(Q+1)),J=Buffer.from(x48("sha256",f48()).update(Y).digest("base64url"));if(X.length!==J.length||!gh6(X,J))return!1;let G;try{G=JSON.parse(Buffer.from(Y,"base64url").toString())}catch{return!1}let W=Math.floor((Z.nowMs??Date.now())/1000);return G.o===Z.organizationId&&G.m===Z.virtualMcpId&&G.b===Z.branch&&typeof G.e==="number"&&G.e>=W}var hh6=21600000,dk0=null;var g48=D(()=>{F$()});function ik0($){return $&&typeof $==="object"&&!Array.isArray($)?$:null}function uh6($){for(let[Z,Q]of Object.entries($)){if(!Z.startsWith("collections/blog/posts/"))continue;let Y=ik0(Q)?.__resolveType;if(typeof Y==="string"&&Y)return Y}return"blog/loaders/Blogpost.ts"}function h48($){let Z;try{Z=ik0(JSON.parse($))}catch{return $}if(!Z)return $;let Q=uh6(Z),Y={...Z},X=0;for(let[J,G]of Object.entries(Z)){if(!J.startsWith("blog-manager/posts/"))continue;let W=ik0(G),K=W&&ik0(W.post);if(!K)continue;if(K.status==="archived")continue;if(typeof K.slug!=="string"||!K.slug)continue;let F=`collections/blog/posts/${J.slice(19)}`;if(Object.hasOwn(Y,F))continue;Y[F]={name:F,__resolveType:Q,["post"]:{...K,status:"published"}},X++}return X>0?JSON.stringify(Y):$}import{z as Ti}from"zod";function ch6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&lh6.test($)}function d48($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function $40($){let Z=$.get("decofileScope");return jc($.var.studioContext,Z.organizationId,Z.githubRepo)}function Z40($,Z){let Q=Z instanceof Error?Z.message:String(Z);if(Z instanceof t6)return $.json({error:Q},409);let Y=UW(Z);if(Y!==null){let X=Y===404?404:Y===409||Y===422?409:502;return $.json({error:Q},X)}return $.json({error:Q},500)}function i48(){let $=new Q1;return $.use("/:virtualMcpId/:branch",m48),$.use("/:virtualMcpId/:branch/*",m48),$.get("/:virtualMcpId/:branch",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await $40(Z),X=await j48(Y,Q.branch,Q.packagePath,{createBranchIfMissing:!!Q.userId}),J={ETag:`"${X.sha}"`,"Cache-Control":"no-store","Access-Control-Allow-Origin":"*"};if(Z.req.header("if-none-match")===`"${X.sha}"`)return Z.body(null,304,J);if(!Q.userId)return Z.body(h48(X.decofile),200,{...J,"content-type":"application/json"});let G=JU1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.body(`{"version":${JSON.stringify(X.sha)},"token":${JSON.stringify(G)},"apiHost":${JSON.stringify(d48(Z))},"decofile":${X.decofile}}`,200,{...J,"content-type":"application/json"})}catch(Y){return Z40(Z,Y)}}),$.get("/:virtualMcpId/:branch/meta",async(Z)=>{let Q=Z.get("decofileScope"),Y=Q.packagePath?`${Q.packagePath}/.deco/meta.gen.json`:".deco/meta.gen.json";try{let X=await $40(Z),J=await X.readFileAtRef(Q.branch,Y);if(J===null){let G=await X.getDefaultBranch();if(G!==Q.branch)J=await X.readFileAtRef(G,Y)}if(J===null)return Z.json({error:"meta.gen.json not committed"},404);return Z.body(J,200,{"content-type":"application/json","Cache-Control":"no-store","Access-Control-Allow-Origin":"*"})}catch(X){return Z40(Z,X)}}),$.patch("/:virtualMcpId/:branch",dh6,async(Z)=>{let Q=Z.get("decofileScope"),Y=Z.var.studioContext,X=ih6.safeParse(await Z.req.json().catch(()=>null));if(!X.success)return Z.json({error:"Invalid body",details:X.error.issues},400);let J=X.data;for(let G of[...Object.keys(J.set??{}),...J.delete??[]])try{kk0(G)}catch(W){let K=W instanceof Error?W.message:String(W);return Z.json({error:K},400)}for(let[G,W]of Object.entries(J.set??{})){if(typeof W!=="object"||W===null||Array.isArray(W))return Z.json({error:`Block "${G}" must be a JSON object`},400);if(lF1(G))return Z.json({error:`Block key "${G}" collides with a framework resolver module and cannot be written`},400)}try{let G=await $40(Z),W=await v48(`${Q.organizationId}/${Q.virtualMcpId}/${Q.branch}`,{client:G,branch:Q.branch,packagePath:Q.packagePath,coAuthor:wi(Y)},J),K=JU1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.json({version:W,token:K,apiHost:d48(Z)})}catch(G){return Z40(Z,G)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await $40(Z),X=await Y.getDefaultBranch();if(X===Q.branch)return Z.json({error:"Branch is already the default branch"},400);let J=`chore(decofile): publish ${Q.branch}`;try{let G;try{G=await Y.mergeBranches(X,Q.branch,J)}catch(W){if(UW(W)!==409)throw W;await lk0(Y,Q.branch,X),G=await Y.mergeBranches(X,Q.branch,J)}return G?Z.json({result:"merged",sha:G}):Z.json({result:"up-to-date"})}catch(G){if(UW(G)===409)return Z.json({error:"merge-conflict"},409);if(UW(G)===405){let K=await Y.findOpenChangeRequest(X,Q.branch)??await Y.createChangeRequest({base:X,head:Q.branch,title:`Publish ${Q.branch}`});return Z.json({result:"pull-request",number:K.number,url:K.url})}throw G}}catch(Y){return Z40(Z,Y)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await $40(Z),X=await Y.getDefaultBranch();if(X===Q.branch)return Z.json({baseBranch:X,aheadBy:0,behindBy:0,lastCommitAt:null});try{let[{aheadBy:J,behindBy:G},W]=await Promise.all([Y.compare(X,Q.branch),Y.getBranch(Q.branch)]);return Z.json({baseBranch:X,aheadBy:J,behindBy:G,lastCommitAt:W?.committedAt??null})}catch(J){if(UW(J)===404)return Z.json({baseBranch:X,aheadBy:0,behindBy:0,lastCommitAt:null});throw J}}catch(Y){return Z40(Z,Y)}}),$}var lh6,u48=500,l48=1048576,c48=1024,mh6=8388608,dh6,ih6,m48;var p48=D(()=>{P20();Sk0();G8();fW();CF1();Vk0();ZU1();iZ();b48();g48();sF1();yk0();yF();lh6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;dh6=I5({maxSize:mh6,onError:($)=>$.json({error:"Payload too large"},413)}),ih6=Ti.object({set:Ti.record(Ti.string(),Ti.unknown()).optional(),delete:Ti.array(Ti.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}).refine(($)=>Object.keys($.set??{}).length+($.delete?.length??0)<=u48,{message:`Patch cannot touch more than ${u48} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=l48),{message:`Each block must be at most ${l48} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=c48),{message:`Each block key must be at most ${c48} characters`}),m48=Ik0(async($,Z)=>{let Q=$.var.studioContext,Y=Q.organization;if(!Y)return $.json({error:"Organization scope required"},500);let X=$.req.param("virtualMcpId"),J=$.req.param("branch");if(!X||!J)return $.json({error:"virtualMcpId and branch are required"},400);if(!ch6(J))return $.json({error:`Invalid branch name: ${J}`},400);let G=Q.auth?.user?.id??null;if(!G){let B=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!B||!y48(B,{organizationId:Y.id,virtualMcpId:X,branch:J}))return $.json({error:"Unauthorized"},401)}if(!await ZW(Q,Y.id,"cms"))return $.json({error:"This organization's plan does not include the CMS",code:"feature_not_in_plan"},403);let W=await Q.storage.virtualMcps.findById(X);if(!W||W.organization_id!==Y.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!Qm(K))return $.json({error:"Project has no preview server configured"},404);let F=W.connections?.map((B)=>B.connection_id)??[],U=s80(K,F);if(!U)return $.json({error:"Project has no GitHub repository"},404);let N=K?.runtime;return $.set("decofileScope",{organizationId:Y.id,virtualMcpId:X,branch:J,packagePath:N?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:U,userId:G}),Z()})});var n48=($)=>{let Z=new Q1;if(Z.use("*",td),Z.use("*",Te$),Z.route("/",fV0()),Z.route("/",J08()),Z.route("/",ie$()),Z.route("/",O88()),Z.route("/",G88()),Z.route("/",N88()),Z.route("/",K88()),Z.route("/",Rk0()),Z.route("/tools",P88()),Z.route("/",j88()),Z.route("/",g$8({kvStorage:$.kvStorage})),Z.route("/",f$8()),Z.route("/fs",a$8({getConnection:$.getNatsConnection})),Z.route("/sandbox",C48()),Z.route("/decofile",i48()),Z.route("/",Y88()),Z.route("/",e$8()),Z.route("/deco-sites",gV0()),Z.route("/hosting",be$()),Z.route("/monitor",le$()),Z.route("/sso",CV0()),Z.route("/",qk0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",ke$()),$.mountDevAssets)Z.route("/dev-assets",cV0({orgFromPath:!0}));return Z.use("/mcp/:connectionId?",$.mcpAuth),Z.use("/mcp/:connectionId/ui-resource",$.mcpAuth),Z.use("/mcp/gateway/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/virtual-mcp/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/self",$.mcpAuth),Z.use("/mcp/task-run/:threadId",$.mcpAuth),Z.route("/",br$()),Z.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",$.betterAuthProtectedResourceHandler),Z.get("/mcp/.well-known/oauth-protected-resource",$.betterAuthProtectedResourceHandler),Z.route("/mcp/task-run",Z88()),Z.route("/mcp",kR0()),Z.route("/mcp/self",zk0()),Z.route("/mcp",_R0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var t48=D(()=>{G8();Re$();zV0();Se$();sK1();xe$();ce$();mV0();af();nK1();YH1();y$8();h$8();s$8();$88();h10();lK1();vR0();AF1();Q88();X88();W88();H88();qF1();D88();E88();MF1();A88();IF1();SR0();_48();p48()});function ph6($){return $.filter((Z)=>Z.vendors?.alias).map((Z)=>({name:Z.name,title:Z.title,description:Z.description,logo:Z.logo,category:Z.category,vendor:{alias:Z.vendors.alias,url:Z.vendors.url}}))}var nh6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},o48=()=>{let $=new Q1;return $.use("*",nh6),$.get("/",async(Z)=>{let Q=E0(),Y=Q.decoSupabaseUrl,X=Q.decoSupabaseServiceKey;if(!Y||!X)return Z.json({apps:[]});try{let J=await lJ(Y,X,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:ph6(J)})}catch(J){return console.error("[deco-apps] GET error:",J),Z.json({error:"Failed to fetch apps"},502)}}),$};var r48=D(()=>{G8();F$();qI0()});import{z as v1}from"zod";function dU($,Z="invalid_request_error",Q=null,Y=null){return{error:{message:$,type:Z,param:Q,code:Y}}}function Yu6($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let Q=$.substring(0,Z),Y=$.substring(Z+1);if(!Q||!Y)return null;return{credentialId:Q,modelId:Y}}function Xu6($,Z,Q){try{return JSON.parse($)}catch{throw new e48(`Invalid JSON in tool call arguments for function '${Q}' (tool_call_id: ${Z}): ${$}`)}}function Ju6($){let Z={};for(let Q of $)if(Q.role==="assistant"&&Q.tool_calls)for(let Y of Q.tool_calls)Z[Y.id]=Y.function.name;return $.map((Q)=>{switch(Q.role){case"system":return{role:"system",content:Q.content};case"user":if(typeof Q.content==="string")return{role:"user",content:Q.content};return{role:"user",content:Q.content.map((X)=>{if(X.type==="text")return{type:"text",text:X.text};return{type:"image",image:X.image_url.url}})};case"assistant":if(Q.tool_calls&&Q.tool_calls.length>0)return{role:"assistant",content:Q.tool_calls.map((X)=>({type:"tool-call",toolCallId:X.id,toolName:X.function.name,input:Xu6(X.function.arguments,X.id,X.function.name)}))};return{role:"assistant",content:Q.content??""};case"tool":let Y=Z[Q.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:Q.tool_call_id,toolName:Y,output:{type:"text",value:Q.content}}]}}})}function Gu6($){let Z=$.map((Q)=>{let Y=Q.function.parameters?PF(Q.function.parameters):PF({type:"object",properties:{}});return[Q.function.name,c$({description:Q.function.description,inputSchema:Y})]});return Object.fromEntries(Z)}function Wu6($){if(!$)return;return{openai:{response_format:$}}}function Ku6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function a48($,Z,Q,Y,X,J){let G={model:$,instructions:Z.filter((W)=>W.role==="system"),messages:Z.filter((W)=>W.role!=="system"),tools:Q,temperature:Y.temperature,maxOutputTokens: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:J};return X?{...G,providerOptions:X}:G}function s48($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var th6=256,oh6,rh6,ah6,sh6,eh6,$u6,Zu6,Qu6,e48,$68,Z68;var Q68=D(()=>{v4();G8();Li();NH();oh6=v1.object({type:v1.literal("function"),function:v1.object({name:v1.string(),description:v1.string().optional(),parameters:v1.record(v1.string(),v1.unknown()).optional()})}),rh6=v1.object({id:v1.string(),type:v1.literal("function"),function:v1.object({name:v1.string(),arguments:v1.string()})}),ah6=v1.discriminatedUnion("role",[v1.object({role:v1.literal("system"),content:v1.string(),name:v1.string().optional()}),v1.object({role:v1.literal("user"),content:v1.union([v1.string(),v1.array(v1.union([v1.object({type:v1.literal("text"),text:v1.string()}),v1.object({type:v1.literal("image_url"),image_url:v1.object({url:v1.string(),detail:v1.string().optional()})})]))]),name:v1.string().optional()}),v1.object({role:v1.literal("assistant"),content:v1.string().nullable().optional(),name:v1.string().optional(),tool_calls:v1.array(rh6).optional()}),v1.object({role:v1.literal("tool"),content:v1.string(),tool_call_id:v1.string()})]),sh6=v1.object({type:v1.literal("text")}),eh6=v1.object({type:v1.literal("json_object")}),$u6=v1.object({type:v1.literal("json_schema"),json_schema:v1.object({name:v1.string(),description:v1.string().optional(),schema:v1.record(v1.string(),v1.unknown()),strict:v1.boolean().optional()})}),Zu6=v1.union([sh6,eh6,$u6]),Qu6=v1.object({model:v1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:v1.array(ah6),stream:v1.boolean().optional().default(!1),temperature:v1.number().min(0).max(2).optional(),max_tokens:v1.number().positive().optional(),top_p:v1.number().min(0).max(1).optional(),frequency_penalty:v1.number().min(-2).max(2).optional(),presence_penalty:v1.number().min(-2).max(2).optional(),stop:v1.union([v1.string(),v1.array(v1.string())]).optional(),tools:v1.array(oh6).optional(),tool_choice:v1.union([v1.literal("auto"),v1.literal("none"),v1.literal("required"),v1.object({type:v1.literal("function"),function:v1.object({name:v1.string()})})]).optional(),response_format:Zu6.optional(),user:v1.string().optional()});e48=class e48 extends Error{constructor($){super($);this.name="MessageConversionError"}};$68=new Q1;$68.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),Q=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(dU("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(dU("Organization context is required. Ensure your API key has organization metadata.","invalid_request_error","organization"),400);if((Z.organization.slug??Z.organization.id)!==Q)return $.json(dU("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Y=await $.req.json(),X=Qu6.safeParse(Y);if(!X.success){let w=X.error.issues[0]??{message:"Invalid request",path:[]};return $.json(dU(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let J=X.data,G=Yu6(J.model);if(!G)return $.json(dU("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}=G,{modelId:K}=G;if(!W){let j=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((E)=>Sz(E.providerId));if(!j)return $.json(dU("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=j.id}let H;try{H=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(dU(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),U=Ju6(J.messages),N=J.tools?Gu6(J.tools):void 0,B=Wu6(J.response_format),O=Ku6(),L=Math.floor(Date.now()/1000);if(J.stream)return CO($,async(w)=>{let j=a48(F,U,N,J,B,$.req.raw.signal);try{let E=$m(j),z=!1,T=0,P="",A=async()=>{if(P.length===0)return;let q=P;P="",await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{content:q},finish_reason:null}]})})};for await(let q of E.stream){if(!z&&(q.type==="text-delta"||q.type==="tool-call"))await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(q.type==="text-delta"){if(P+=q.text,P.length>=th6)await A()}else if(q.type==="tool-call"){await A();let x=T++;await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{tool_calls:[{index:x,id:q.toolCallId,type:"function",function:{name:q.toolName,arguments:JSON.stringify(q.input)}}]},finish_reason:null}]})})}else if(q.type==="finish")await A(),await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{},finish_reason:s48(q.finishReason)}],usage:q.totalUsage?{prompt_tokens:q.totalUsage.inputTokens??0,completion_tokens:q.totalUsage.outputTokens??0,total_tokens:q.totalUsage.totalTokens??0}:void 0})})}await A(),await w.writeSSE({data:"[DONE]"})}catch(E){let z=E;console.error("[openai-compat:stream] Error:",z.message),await w.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let w=a48(F,U,N,J,B,$.req.raw.signal),j=await HU(w),E={role:"assistant",content:j.text||null};if(j.toolCalls&&j.toolCalls.length>0)E.tool_calls=j.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),E.content=null;return $.json({id:O,object:"chat.completion",created:L,model:J.model,choices:[{index:0,message:E,finish_reason:s48(j.finishReason)}],usage:{prompt_tokens:j.usage?.inputTokens??0,completion_tokens:j.usage?.outputTokens??0,total_tokens:j.usage?.totalTokens??0}})}}catch(Y){let X=Y;if(X.name==="AbortError")return $.json(dU("Request aborted","invalid_request_error"),400);if(X.name==="MessageConversionError")return $.json(dU(X.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",X.message,X.stack),$.json(dU(X.message,"server_error"),500)}});Z68=$68});function Hu6($){if(typeof $!=="object"||$===null)return!1;let Q=$.githubRepo?.url;return typeof Q==="string"&&Q.length>0}function Y68(){let $=new Q1;return $.use("*",async(Z,Q)=>{await Q(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let Q=Z.get("studioContext"),Y=p0(Q);if(!Y)return Z.json({error:"Authentication required"},401);let J=(Z.req.query("site")??"").trim().toLowerCase();if(!dZ(J))return Z.json({error:"Invalid site slug"},400);let G=await Q.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["organization.id as id","organization.slug as slug","organization.name as name","organization.metadata as metadata"]).where("member.userId","=",Y).execute(),W=[];for(let H of G){if(!H.slug||P9(H))continue;let F=await Q.storage.virtualMcps.list(H.id);for(let U of F){if(us(U)!==J)continue;if(!Hu6(U.metadata))continue;W.push({orgSlug:H.slug,orgName:H.name??H.slug,project:{id:U.id,title:U.title,icon:U.icon??null}})}}let K={matches:W};return Z.json(K)}),$}var X68=D(()=>{G8();WW()});var G68;var J68=D(()=>{G68={name:"decocms",version:"4.400.6",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^4.0.58","@ai-sdk/google":"^4.0.76","@ai-sdk/openai":"^4.0.71","@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":"^3.1.0","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^4.0.17","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^7.0.107","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function Nu6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??Uu6}}var W68,Uu6="https://ph.studio.decocms.com",K68;var H68=D(()=>{G8();Hr();rx();E9();F$();IK1();J68();W68=new Q1;W68.get("/",($)=>{let Z={version:G68.version,theme:J$$(),...RK().logo&&{logo:RK().logo},...GO()&&{internalUrl:yc1()},...E0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!E0().firecrawlApiKey,hostingEnabled:!!E0().controlplaneRestUrl&&!!E0().controlplaneServiceToken,hostingControlPlaneGa:E0().hostingControlPlaneGa,monitorEnabled:!!E0().clickhouseAnalyticsUrl&&!!E0().clickhouseAnalyticsPassword,monitorGa:E0().monitorGa,plansEnabled:E0().plansEnabled,auth:Rs$(),posthog:Nu6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:mO()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});K68=W68});function Uy($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function GU1($){return(Uy($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((Q)=>Q.charAt(0).toUpperCase()+Q.slice(1)).join(" ")}function F68($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Uy($))}&sz=${Z}`}function Bu6($,Z){let Q=$.trim();if(Q.length<=Z)return Q;let Y=Q.slice(0,Z-1),X=Y.lastIndexOf(" ");return`${(X>Z*0.6?Y.slice(0,X):Y).trimEnd()}\u2026`}function U68($){let{brand:Z,domain:Q,score:Y}=$,X=typeof Y==="number"?`${Z} commerce report \u2014 ${Math.round(Y)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,J=Bu6(`How does ${Q} really perform? See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,200);return{title:X,description:J}}import{z as L$}from"zod";var Ou6,N68;var B68=D(()=>{Ou6=L$.object({check_id:L$.string(),title:L$.string(),description:L$.string().optional(),impact:L$.string().optional(),why:L$.string().optional(),category:L$.string(),severity:L$.string(),value_band:L$.string().optional(),value_driver:L$.string().optional(),controllability:L$.string().optional(),pages:L$.array(L$.string()),tasks:L$.array(L$.string()),evidence:L$.string(),sample_scope:L$.string().optional(),sources:L$.array(L$.string())}),N68=L$.object({domain:L$.string(),brand:L$.string(),favicon:L$.string().optional(),scanned_at:L$.string().nullable(),lang:L$.string(),score:L$.number().nullable(),band:L$.string().nullable(),totals:L$.object({measured:L$.number(),registry_total:L$.number(),passed:L$.number(),failed:L$.number(),blocked:L$.number()}),buckets:L$.array(L$.object({id:L$.enum(["critical","important","worth"]),label:L$.string(),items:L$.array(Ou6)})),passing:L$.object({count:L$.number(),items:L$.array(L$.object({check_id:L$.string(),title:L$.string()}))}),not_measured:L$.object({count:L$.number(),groups:L$.array(L$.object({reason:L$.string(),label:L$.string(),count:L$.number(),checks:L$.array(L$.string())}))}),categories:L$.array(L$.object({key:L$.string(),label:L$.string(),score:L$.number().nullable(),band:L$.string().nullable(),pass:L$.number(),fail:L$.number()})),screenshots:L$.array(L$.object({url:L$.string(),page_type:L$.string().optional(),viewport:L$.enum(["desktop","mobile"]),image_url:L$.string()}))})});function O68($,Z,Q){let Y=Q?`?${new URLSearchParams({lang:Q}).toString()}`:"";return`${uK({})}/api/v2/public/diagnostics/${encodeURIComponent($)}/onepager${Z}${Y}`}async function pk0($,Z={}){let Q=await fetch(O68($,"",Z.lang),{headers:{Accept:"application/json"},signal:Z.signal});if(Q.status===404)return null;if(!Q.ok)throw Error(`onepager read HTTP ${Q.status}`);return N68.parse(await Q.json())}async function D68($,Z={}){let Q=await fetch(O68($,".md"),{headers:{Accept:"text/markdown"},signal:Z.signal});if(Q.status===404)return null;if(!Q.ok)throw Error(`onepager markdown HTTP ${Q.status}`);return Q.text()}var WU1=D(()=>{B68();Ow()});import{join as L68}from"path";async function Lu6($){try{let Z=await pk0($,{signal:AbortSignal.timeout(Du6)});if(!Z?.scanned_at)return null;return{brand:Z.brand.trim()||GU1($),...Z.score!==null?{score:Z.score}:{}}}catch{return null}}function iJ($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function wu6($,Z){let Q=Uy($),Y=Z?.brand?.trim()||GU1(Q),X=F68(Q,128),G=`${(E0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(Q)}`,{title:W,description:K}=U68({brand:Y,domain:Q,score:Z?.score}),H=`${G}/og.png`,F=`${Y} commerce report by decocms`;return[`<title>${iJ(W)}</title>`,`<meta name="description" content="${iJ(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="${iJ(W)}" />`,`<meta property="og:description" content="${iJ(K)}" />`,`<meta property="og:url" content="${iJ(G)}" />`,`<meta property="og:image" content="${iJ(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${iJ(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${iJ(W)}" />`,`<meta name="twitter:description" content="${iJ(K)}" />`,`<meta name="twitter:image" content="${iJ(H)}" />`,`<meta name="twitter:image:alt" content="${iJ(F)}" />`,`<link rel="canonical" href="${iJ(G)}" />`,`<link rel="alternate" type="text/markdown" href="${iJ(G)}.md" />`,`<link rel="icon" href="${iJ(X)}" sizes="any" />`].join(`
3707
3707
  `)}function ju6($,Z){return $.replace(/<title>[\s\S]*?<\/title>\s*/i,"").replace(/<meta\s+name="(?:description|twitter:[^"]*)"[^>]*>\s*/gi,"").replace(/<meta\s+property="og:[^"]*"[^>]*>\s*/gi,"").replace(/<link\s+rel="icon"[^>]*>\s*/gi,"").replace("</head>",` ${Z}
3708
3708
  </head>`)}function w68($){let Z=new Q1;return Z.get("/:domain/og.png",async(Q)=>{let Y=Uy(Q.req.param("domain")),X=async()=>{let J=$?Bun.file(L68($,"report-og-fallback.png")):null;if(!J||!await J.exists())return Q.notFound();return Q.body(new Uint8Array(await J.arrayBuffer()),200,{"Content-Type":"image/png","Cache-Control":"public, max-age=0, s-maxage=3600"})};try{let J=await fetch(`${uK({})}/api/v2/public/diagnostics/${encodeURIComponent(Y)}/og.png`,{signal:AbortSignal.timeout(Eu6)}),G=J.headers.get("content-type")??"";if(!J.ok||!G.startsWith("image/")||!J.body)return X();return Q.body(J.body,200,{"Content-Type":G,"Cache-Control":"public, max-age=0, s-maxage=604800"})}catch{return X()}}),Z.get("/:file{.+\\.md}",async(Q)=>{let Y=Uy(Q.req.param("file").replace(/\.md$/,""));try{let X=await D68(Y,{signal:AbortSignal.timeout(zu6)});if(X===null)return Q.text("Report not found",404);return Q.body(X,200,{"Content-Type":"text/markdown; charset=utf-8","Cache-Control":"public, max-age=600, stale-while-revalidate=3600","Access-Control-Allow-Origin":"*"})}catch{return Q.text("Report unavailable",502)}}),Z.get("/:domain",async(Q)=>{let Y=Q.req.param("domain"),X=$?L68($,"index.html"):null,J=X?Bun.file(X):null;if(!J||!await J.exists())return Q.notFound();let G=await J.text();try{let W=await Lu6(Uy(Y)),K=wu6(Y,W);return Q.html(ju6(G,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return Q.html(G)}}),Z}var Du6=2500,Eu6=1e4,zu6=1e4;var j68=D(()=>{G8();Ow();WU1();F$()});function nk0($,Z){return fetch(`${uK({})}${$}`,Z)}async function Pu6($,Z){let Q=await pk0($,{lang:Z});if(!Q)return{status:"not_found",report:null};return Q.scanned_at?{status:"ready",report:Q}:{status:"empty",report:null}}function Tu6($){let Z=typeof $==="object"&&$!==null?$:{},Q=typeof Z.domain==="string"?Z.domain.trim():"",Y=typeof Z.distinctId==="string"&&Z.distinctId.trim()&&Z.distinctId.length<=200?Z.distinctId.trim():void 0;return{domain:Q,distinctId:Y}}var Au6,vO,E68=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},z68;var P68=D(()=>{G8();gG();Ow();WU1();Au6=new Set(["complete","errored","terminated","unknown"]);vO=new Q1;vO.use("*",async($,Z)=>{let Q=await C8.api.getSession({headers:$.req.raw.headers});$.set("reportUser",Q?.user?.id?{email:Q.user.email}:void 0),await Z(),$.header("Cache-Control","private, no-store"),$.header("Vary","Cookie");return});vO.use("/link-token/*",E68);vO.use("/suggest",E68);vO.get("/site/:domain",async($)=>{let Z=$.req.param("domain").trim();if(!Z)return $.json({error:"domain is required"},400);let Q=$.req.query("lang")?.trim()||void 0;try{return $.json(await Pu6(Z,Q))}catch{return $.json({error:"report read failed"},502)}});vO.post("/run",async($)=>{let Z=$.get("reportUser"),Q;try{Q=await $.req.json()}catch{return $.json({error:"invalid JSON"},400)}let{domain:Y,distinctId:X}=Tu6(Q);if(!Y)return $.json({error:"domain is required"},400);let J=Z?.email;try{let G=await nk0("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${OA({})}`},body:JSON.stringify({url:Y,...J?{email:J}:{},distinct_id:X})});if(!G.ok)return $.json({error:`run HTTP ${G.status}`},502);let W=await G.json(),K=W.blocked?{state:"blocked"}:W.status==="fresh"?{state:"fresh"}:W.mode==="sync"?{state:"sync"}:{state:"running",id:W.id??null};return $.json(K)}catch{return $.json({error:"run failed"},502)}});vO.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let Q=await nk0(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${OA({})}`}});if(!Q.ok)return $.json({error:`status HTTP ${Q.status}`},502);let X=(await Q.json()).status??"unknown",J={done:Au6.has(X),status:X};return $.json(J)}catch{return $.json({error:"status failed"},502)}});vO.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let Q=await nk0(`/api/v2/public/link-tokens/${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(Q.status===404)return $.json(null);if(!Q.ok)return $.json({error:`link token HTTP ${Q.status}`},502);return $.json(await Q.json())}catch{return $.json({error:"link token resolve failed"},502)}});vO.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let Q=await nk0(`/api/v2/public/suggest?q=${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(!Q.ok)return $.json({suggestions:[]});let Y=await Q.json();return $.json({suggestions:Array.isArray(Y.suggestions)?Y.suggestions:[]})}catch{return $.json({suggestions:[]})}});z68=vO});var Ru6=1048576,KU1;var A68=D(()=>{G8();fW();F$();NK1();KU1=new Q1;KU1.post("/webhook",I5({maxSize:Ru6,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=E0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let Q=await $.req.text();if(!ya$(Q,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let X=ga$(Q);if(!X)return $.json({error:"invalid payload"},400);let J=await ha$(X);return console.log("stripe webhook",{eventId:X.id,type:X.type,livemode:X.livemode,...J}),$.json({received:!0})})});import{timingSafeEqual as qu6}from"crypto";function Vu6($,Z,Q){if(!Z?.startsWith("sha256="))return!1;let Y=new Bun.CryptoHasher("sha256",Q).update($).digest("hex"),X=Z.slice(7);if(X.length!==Y.length)return!1;return qu6(Buffer.from(X),Buffer.from(Y))}function ku6($,Z){let Q=Z,Y=Q?.repository?.name,X=Q?.repository?.owner?.login;if(typeof Y!=="string"||typeof X!=="string")return[];let J=[];if($==="check_suite"){if(Q.action!=="completed")return[];let G=Q.check_suite?.pull_requests;for(let W of Array.isArray(G)?G:[]){let K=W?.number;if(typeof K==="number")J.push(K)}}else if($==="issue_comment"&&Q.issue?.pull_request){let G=Q.issue.number;if(typeof G==="number")J.push(G)}return[...new Set(J)].map((G)=>({repoOwner:X,repoName:Y,number:G}))}function T68($){let Z=new Q1;return Z.post("/webhook",I5({maxSize:Mu6,onError:(Q)=>Q.json({error:"payload too large"},413)}),async(Q)=>{let Y=process.env.GITHUB_WEBHOOK_SECRET;if(!Y)return Q.json({error:"github webhook not configured"},503);let X=await Q.req.text();if(!Vu6(X,Q.req.header("x-hub-signature-256"),Y))return Q.json({error:"invalid signature"},400);let J=Q.req.header("x-github-event");if(J!=="push"&&!Iu6.has(J??""))return Q.json({ok:!0,ignored:"event"});let G;try{G=JSON.parse(X)}catch{return Q.json({error:"invalid payload"},400)}if(J==="push"){let H=G.ref,F=G.repository?.full_name;if(!H||!F)return Q.json({ok:!0,ignored:"shape"});let N=(await E41())?.markTenantPoolsDirty(F,H)??[];return Q.json({ok:!0,pools:N})}let W=ku6(J??"",G);if(W.length===0)return Q.json({ok:!0,ignored:"no-pr"});let K=await Su6($,W);return Q.json({ok:!0,refreshed:K})}),Z}async function Su6($,Z){let Q=0;for(let Y of Z){let X=$.taskBoard(),J;try{J=await X.findPrLinks(Y)}catch(G){console.error("[github-webhook] pr link lookup failed:",G);continue}for(let G of J)try{let W=await X.getById(G.taskBoardItemId,G.organizationId),K=W?await $.contextFactory()(G.organizationId,W.assignedBy??W.createdBy):null;if(!K)continue;if(await kV$(K,G.organizationId,G.taskBoardItemId)!==null)Q++}catch(W){console.error(`[github-webhook] pr card refresh failed for ${G.taskBoardItemId}:`,W)}}return Q}var Mu6=5242880,Iu6;var R68=D(()=>{G8();fW();QH();z7();Iu6=new Set(["check_suite","issue_comment"])});function q68($){let Z=new PO($.db,new FG($.encryptionKey)),Q=new Q1;return Q.get("/attachments/:token",async(Y)=>{let X=dM$(Y.req.param("token"));if(!X)return Y.json({error:"Invalid or expired link"},404);let J=await Z.getByOrg(X.organizationId);if(!J)return Y.json({error:"Jira is not connected"},404);let W=await new _Q(J.siteUrl,J.email,J.apiToken).downloadAttachment(X.attachmentId);if(!W.ok||!W.body)return Y.json({error:"Jira refused the download"},502);let K=new Headers;for(let H of["content-type","content-length","content-disposition"]){let F=W.headers.get(H);if(F)K.set(H,F)}return K.set("cache-control","no-store"),new Response(W.body,{status:200,headers:K})}),Q}var M68=D(()=>{G8();Vz();R51();qj()});function I68($){let Z=new PO($.db,new FG($.encryptionKey));async function Q(X,J){let G=Nn$(J);if(!G)return;let W=await Z.getByWebhookSecret(X);if(!W?.enabled)return;let K=await PW($.db,W.organizationId);if(!K)return;if(await VI0(K,W,G)==="started")console.log(`[jira-webhook] started a run for ${G.issueKey} entering "${G.toStatus}"`)}let Y=new Q1;return Y.post("/webhook/:secret",I5({maxSize:Cu6}),async(X)=>{let J=X.req.param("secret");if(!await Z.getByWebhookSecret(J))return X.json({error:"Unknown webhook"},404);let W;try{W=await X.req.json()}catch{return X.json({error:"Body must be JSON"},400)}return Q(J,W).catch((K)=>{console.error("[jira-webhook] trigger failed",K)}),X.body(null,202)}),Y}var Cu6=1048576;var V68=D(()=>{G8();fW();Vz();kI0();dx()});import{DBOS as tk0,SchedulerMode as _u6}from"@dbos-inc/dbos-sdk";function S68($){FU1=$}function C68(){if(!FU1)throw Error("[jira-trigger] runtime not initialized \u2014 setJiraTriggerSweepRuntime() must run before the workflow fires");return FU1}function _68(){let $=C68();return new PO($.db,new FG($.encryptionKey))}async function xu6($,Z){try{let Q=await _68().getById($);if(!Q?.enabled||!Q.boardId)return{integrationId:$,started:0};let Y=await PW(C68().db,Q.organizationId);if(!Y)return{integrationId:$,started:0};if((await Y.storage.jiraIntegrations.listAutomations(Q.organizationId)).length===0)return{integrationId:$,started:0};let J=new _Q(Q.siteUrl,Q.email,Q.apiToken),W=`(${await J.getBoardScopeJql(Q.boardId)}) AND status CHANGED AFTER "-${k68}m"`,K=0,H;for(let F=0;F<bu6;F++){let U=await J.searchIssues({jql:W,nextPageToken:H,expandChangelog:!0});for(let N of U.issues){let B=Bn$(N,N.changelog?.histories??[],Z);for(let O of B)if(await VI0(Y,Q,O)==="started")K++}if(H=U.nextPageToken??void 0,!H)break}return{integrationId:$,started:K}}catch(Q){return{integrationId:$,started:0,error:Q instanceof Error?Q.message:String(Q)}}}async function fu6($,Z){let Q=new Date($.getTime()-k68*60000),Y=await tk0.runStep(()=>_68().listEnabledIds(),{name:"loadJiraIntegrations"});if(Y.length===0)return;let X=await Promise.all(Y.map((J)=>tk0.runStep(()=>xu6(J,Q),{name:`sweepJira:${J}`})));for(let J of X)if(J.error)console.warn(`[jira-trigger] integration ${J.integrationId} failed: ${J.error}`);else if(J.started>0)console.log(`[jira-trigger] integration ${J.integrationId} started ${J.started} run(s) the webhook missed`)}function v68(){if(HU1)return;HU1=tk0.registerWorkflow(fu6,{name:"jiraTriggerSweepWorkflow"}),tk0.registerScheduled(HU1,{name:"jiraTriggerSweepWorkflow",crontab:vu6,mode:_u6.ExactlyOncePerIntervalWhenActive})}var vu6="7-59/10 * * * *",k68=35,bu6=5,FU1=null,HU1=null;var b68=D(()=>{Vz();dx();qj();kI0()});function x68($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var f68,yu6,gu6,y68;var g68=D(()=>{G8();TK();Rm();sl();f68=new Q1,yu6=["range","if-none-match","if-modified-since"],gu6=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];f68.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),Q=Z.organization?.id;if(!Z.auth?.user?.id){if(nd($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new A$(401,{message:"Authentication required"})}if(!Q)throw new A$(401,{message:"Organization context required"});let Y=$.req.path.replace(/^.*\/files\//,"");if(!Y)throw new A$(400,{message:"Missing file key"});let X=await j10(Y,Z);if(!X)throw new A$(503,{message:"Object storage not configured"});if(X.startsWith("data:")&&XW()){let K=X.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new A$(500,{message:"Invalid data URL from storage"});let[,H,F]=K,U=Buffer.from(F,"base64"),N=new Headers({"Content-Type":H,"Cache-Control":"private, max-age=86400"});return x68(N,H),new Response(U,{status:200,headers:N})}let J=new Headers;for(let K of yu6){let H=$.req.header(K);if(H)J.set(K,H)}let G=await fetch(X,{headers:J});if(G.status===403||G.status===404)throw new A$(404,{message:"File not found"});if(!G.ok&&G.status!==304&&G.status!==416)throw console.error(`[files] upstream storage error ${G.status} for key:`,Y),new A$(502,{message:"Upstream storage error"});let W=new Headers;for(let K of gu6){let H=G.headers.get(K);if(H)W.set(K,H)}return W.set("Cache-Control","private, max-age=86400"),x68(W,W.get("content-type")??""),new Response(G.body,{status:G.status,headers:W})});y68=f68});var Q40=b((Ny)=>{var hu6=Ny&&Ny.__createBinding||(Object.create?function($,Z,Q,Y){if(Y===void 0)Y=Q;var X=Object.getOwnPropertyDescriptor(Z,Q);if(!X||("get"in X?!Z.__esModule:X.writable||X.configurable))X={enumerable:!0,get:function(){return Z[Q]}};Object.defineProperty($,Y,X)}:function($,Z,Q,Y){if(Y===void 0)Y=Q;$[Y]=Z[Q]}),uu6=Ny&&Ny.__exportStar||function($,Z){for(var Q in $)if(Q!=="default"&&!Object.prototype.hasOwnProperty.call(Z,Q))hu6(Z,$,Q)};Object.defineProperty(Ny,"__esModule",{value:!0});uu6($G(),Ny)});var l68=b((h68)=>{Object.defineProperty(h68,"__esModule",{value:!0});h68.version=void 0;h68.version="3.4.0"});var d68=b((iU)=>{var lu6=iU&&iU.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(iU,"__esModule",{value:!0});iU.NodeTransport=iU.VERSION=void 0;iU.nodeResolveHost=nu6;var m5=Q40(),cu6=q0("net"),UU1=q0("tls"),mu6=q0("path"),c68=q0("fs"),du6=lu6(q0("dns")),iu6=l68();iU.VERSION=iu6.version;var pu6="nats.js";class m68{socket;version;lang;yields=[];signal=(0,m5.deferred)();closedNotification=(0,m5.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=pu6,this.version=iU.VERSION}async connect($,Z){this.tlsName=$.tlsName,this.options=Z;let{tls:Q}=this.options,{handshakeFirst:Y}=Q||{};try{if(Y===!0)this.socket=await this.tlsFirst($);else this.socket=await this.dial($);if(this.done)this.socket?.destroy();let X=await this.peekInfo();(0,m5.checkOptions)(X,Z);let{tls_required:J,tls_available:G}=X,W=G===!0&&Z.tls!==null;if(!Y&&(J||W))this.socket=await this.startTLS();if(this.done)this.socket?.destroy();if(J&&this.socket.encrypted!==!0)throw m5.errors.InvalidArgumentError.format("tls","is not available on this server");return this.connected=!0,this.setupHandlers(),this.signal.resolve(),Promise.resolve()}catch(X){let J=X;if(!J)J=new m5.errors.ConnectionError("error connecting - node provided an undefined error");let{code:G}=J,W=G==="ECONNREFUSED"?new m5.errors.ConnectionError("connection refused",{cause:J}):J;throw this.socket?.destroy(),W}}dial($){let Z=(0,m5.deferred)(),Q,Y=(0,cu6.createConnection)($.port,$.hostname,()=>{Z.resolve(Y),Y.removeAllListeners()});return Y.on("error",(X)=>{Q=X}),Y.on("close",()=>{Y.removeAllListeners(),Z.reject(Q)}),Y.setNoDelay(!0),Z}get isClosed(){return this.done}close($){return this._closed($,!1)}peekInfo(){let $=(0,m5.deferred)(),Z;return this.socket.on("data",(Q)=>{this.yields.push(Q);let Y=m5.DataBuffer.concat(...this.yields),X=(0,m5.extractProtocolMessage)(Y);if(X!=="")try{let J=m5.INFO.exec(X);if(!J)throw Error("unexpected response from server");let G=JSON.parse(J[1]);$.resolve(G)}catch(J){$.reject(J)}finally{this.socket.removeAllListeners()}}),this.socket.on("error",(Q)=>{Z=Q}),this.socket.on("close",()=>{this.socket.removeAllListeners(),$.reject(Z)}),$}loadFile($){if(!$)return Promise.resolve();let Z=(0,m5.deferred)();try{if($=(0,mu6.resolve)($),!(0,c68.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,c68.readFile)($,(Q,Y)=>{if(Q)return Z.reject(Q);Z.resolve(Y)})}catch(Q){Z.reject(Q)}return Z}async loadClientCerts(){let $={},{certFile:Z,cert:Q,caFile:Y,ca:X,keyFile:J,key:G}=this.options.tls;try{if(Z){let W=await this.loadFile(Z);if(W)$.cert=W}else if(Q)$.cert=Q;if(J){let W=await this.loadFile(J);if(W)$.key=W}else if(G)$.key=G;if(Y){let W=await this.loadFile(Y);if(W)$.ca=[W]}else if(X)$.ca=X;return Promise.resolve($)}catch(W){return Promise.reject(W)}}async tlsFirst($){let Z,Q={servername:this.tlsName,rejectUnauthorized:!0};if(this.socket)Q.socket=this.socket;if(typeof this.options.tls==="object")try{let X=await this.loadClientCerts()||{};Q=(0,m5.extend)(Q,this.options.tls,X)}catch(X){return Promise.reject(new m5.errors.ConnectionError(X.message,{cause:X}))}let Y=(0,m5.deferred)();try{let X=(0,UU1.connect)($.port,$.hostname,Q,()=>{X.removeAllListeners(),Y.resolve(X)});X.on("error",(J)=>{Z=J}),X.on("secureConnect",()=>{if(Q.rejectUnauthorized===!1)return;if(!X.authorized)throw X.authorizationError}),X.on("close",()=>{Y.reject(Z),X.removeAllListeners()}),X.setNoDelay(!0)}catch(X){Y.reject(new m5.errors.ConnectionError(X.message,{cause:X}))}return Y}async startTLS(){let $,Z={socket:this.socket,servername:this.tlsName,rejectUnauthorized:!0};if(typeof this.options.tls==="object")try{let Y=await this.loadClientCerts()||{};Z=(0,m5.extend)(Z,this.options.tls,Y)}catch(Y){return Promise.reject(new m5.errors.ConnectionError(Y.message,{cause:Y}))}let Q=(0,m5.deferred)();try{let Y=(0,UU1.connect)(Z,()=>{Y.removeAllListeners(),Q.resolve(Y)});Y.on("error",(X)=>{$=X}),Y.on("secureConnect",()=>{if(Z.rejectUnauthorized===!1)return;if(!Y.authorized)throw Y.authorizationError}),Y.on("close",()=>{Q.reject($),Y.removeAllListeners()})}catch(Y){Q.reject(new m5.errors.ConnectionError(Y.message,{cause:Y}))}return Q}setupHandlers(){let $;this.socket.on("data",(Z)=>{return this.yields.push(Z),this.signal.resolve()}),this.socket.on("error",(Z)=>{$=Z}),this.socket.on("end",()=>{if(this.socket?.destroyed)return;this.socket?.write(new Uint8Array(0),()=>{this.socket?.end()})}),this.socket.on("close",()=>{this._closed($,!1)})}[Symbol.asyncIterator](){return this.iterate()}async*iterate(){while(!0){if(this.yields.length===0)await this.signal;let $=this.yields;this.yields=[];for(let Z=0;Z<$.length;Z++){if(this.options.debug)console.info(`> ${(0,m5.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,m5.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 UU1.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,m5.render)($)}`);let Z=(0,m5.deferred)();try{this.socket.write($,(Q)=>{if(Q){if(this.options.debug)console.error(`!!! ${(0,m5.render)($)}: ${Q}`);return Z.reject(Q)}return Z.resolve()})}catch(Q){if(this.options.debug)console.error(`!!! ${(0,m5.render)($)}: ${Q}`);Z.reject(Q)}return Z}send($){this._send($).catch((Q)=>{})}async _closed($,Z=!0){if(!this.connected)return;if(this.done){this.socket?.destroy();return}if(this.closeError=$,!$&&this.socket&&Z)try{await this._send(new TextEncoder().encode(""))}catch(Q){if(this.options.debug)console.log("transport close terminated with an error",Q)}try{if(this.socket)this.socket.removeAllListeners(),this.socket?.destroy(),this.socket=void 0}catch(Q){console.log(Q)}this.done=!0,this.closedNotification.resolve(this.closeError)}closed(){return this.closedNotification}}iU.NodeTransport=m68;function nu6($){let Z=(0,m5.deferred)();return du6.default.lookup($,{all:!0},(Q,Y)=>{if(Q){Z.reject(Q);return}let X=[];for(let J of Y)X.push(J.address);if(X.length===0)X.push($);Z.resolve(X)}),Z}});var o68=b((t68)=>{Object.defineProperty(t68,"__esModule",{value:!0});t68.connect=tu6;var i68=d68(),p68=Q40(),n68=Q40();function tu6($={}){if((0,n68.hasWsProtocol)($))return Promise.reject(n68.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,p68.setTransportFactory)({factory:()=>{return new i68.NodeTransport},dnsResolveFn:i68.nodeResolveHost}),p68.NatsConnectionImpl.connect($)}});var r68=b((bO)=>{var ru6=bO&&bO.__createBinding||(Object.create?function($,Z,Q,Y){if(Y===void 0)Y=Q;var X=Object.getOwnPropertyDescriptor(Z,Q);if(!X||("get"in X?!Z.__esModule:X.writable||X.configurable))X={enumerable:!0,get:function(){return Z[Q]}};Object.defineProperty($,Y,X)}:function($,Z,Q,Y){if(Y===void 0)Y=Q;$[Y]=Z[Q]}),au6=bO&&bO.__exportStar||function($,Z){for(var Q in $)if(Q!=="default"&&!Object.prototype.hasOwnProperty.call(Z,Q))ru6(Z,$,Q)};Object.defineProperty(bO,"__esModule",{value:!0});bO.connect=void 0;var su6=o68();Object.defineProperty(bO,"connect",{enumerable:!0,get:function(){return su6.connect}});au6(Q40(),bO)});function $58($){let Z=$?.connectFn??Ql6,Q=null,Y=null,X=!1,J=!1,G=!1,W=[];function K(){return Q!==null&&!Q.isClosed()&&!Q.isDraining()&&!G}function H(){console.log(`[NatsProvider] fireReady: ${W.length} callbacks`);for(let N of W)try{N()}catch{}}function F(N){(async()=>{for await(let B of N.status())if(B.type==="disconnect")console.log("[NatsProvider] Disconnected"),G=!0;else if(B.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),G=!1,Y=null,H()})().catch(()=>{})}async function U(N,B){let O=0;while(!J)try{Q=await Z({servers:N,timeout:Zl6,reconnect:!0,maxReconnectAttempts:-1,...B?{authenticator:B}:{}}),console.log(`[NatsProvider] Connected to ${Q.getServer()} after ${O} attempt(s)`),Y=null,G=!1,F(Q),H();return}catch{O++;let L=QQ($l6,eu6,O-1,2,0.5);await i$(L)}}return{init(N,B){if(X)return;X=!0,J=!1;let O=B?.creds?a68.credsAuthenticator(new TextEncoder().encode(B.creds)):void 0;U(N,O).catch(()=>{})},isConnected(){return K()},getConnection(){return K()?Q:null},getJetStream(){if(!K())return null;if(!Y)Y=e68.jetstream(Q);return Y},onReady(N){if(W.push(N),K())try{N()}catch{}},async drain(){if(J=!0,X=!1,Y=null,G=!1,Q){let N=Q;Q=null,await N.drain().catch(()=>{})}}}}function Ql6($){return s68.connect($)}var a68,s68,e68,eu6=100,$l6=3000,Zl6=3000;var Z58=D(()=>{D8();a68=C(ei(),1),s68=C(r68(),1),e68=C(JN(),1)});function ok0($){let Z=$?.ttlMs??60000,Q=$?.maxSize??1e4,Y=$?.updateRecencyOnGet??!1,X=new Map;function J(){if(X.size<=Q)return;let G=Date.now();for(let[W,K]of X)if(K.expiresAt<=G)X.delete(W);while(X.size>Q){let W=X.keys().next().value;if(W===void 0)break;X.delete(W)}}return{get(G){let W=X.get(G);if(!W)return;if(W.expiresAt<=Date.now()){X.delete(G);return}if(Y)X.delete(G),X.set(G,W);return W.value},set(G,W){X.delete(G),X.set(G,{value:W,expiresAt:Date.now()+Z}),J()},delete(G){X.delete(G)},clear(){X.clear()},size(){return X.size}}}function rk0($,Z){return`${$}.${Z}`}class NU1{cache;constructor($){this.cache=ok0({ttlMs:$?.ttlMs??Yl6,maxSize:$?.maxSize??Xl6})}async get($,Z){return this.cache.get(rk0($,Z))??null}async set($,Z,Q){this.cache.set(rk0($,Z),Q)}async invalidate($,Z){this.cache.delete(rk0($,Z)),this.cache.delete(rk0($,`${Z}:decisions`))}teardown(){this.cache.clear()}}var Yl6=600000,Xl6=5000;var Q58=()=>{};function ak0($,Z){return`${$}:${Z}`}function BU1($){let Z=ok0({ttlMs:$?.ttlMs??Jl6,maxSize:$?.maxSize??Gl6}),Q=$?.getConnection,Y=crypto.randomUUID(),X=new TextEncoder,J=new TextDecoder,G=null;function W(K,H){let F=Q?.();if(!F)return;try{F.publish(Y58,X.encode(JSON.stringify({organizationId:K,keyId:H,originId:Y})))}catch(U){console.warn("[ProviderKeyCache] Publish failed (non-critical):",U)}}return{get(K,H){return Z.get(ak0(K,H))},set(K,H,F){Z.set(ak0(K,H),F)},invalidate(K,H){Z.delete(ak0(K,H)),W(K,H)},start(){if(G)return;let K=Q?.();if(!K)return;G=K.subscribe(Y58),(async()=>{for await(let H of G)try{let F=JSON.parse(J.decode(H.data));if(F.originId===Y)continue;Z.delete(ak0(F.organizationId,F.keyId))}catch{}})().catch(console.error)},teardown(){G?.unsubscribe(),G=null,Z.clear()}}}var Y58="studio.ai-provider-keys.invalidate",Jl6=30000,Gl6=5000;var X58=()=>{};class OU1{options;subscription=null;onCancel=null;encoder=new TextEncoder;originId=crypto.randomUUID();constructor($){this.options=$}async start($){if($)this.onCancel=$;if(this.subscription)return;if(!this.onCancel)return;let Z=this.options.getConnection();if(!Z)return;let Q=new TextDecoder,Y=Z.subscribe("studio.decopilot.cancel");this.subscription=Y,(async()=>{for await(let X of Y)try{let J=JSON.parse(Q.decode(X.data));if(J.originId===this.originId)continue;this.onCancel?.(J.taskId)}catch{}})().catch(console.error)}broadcast($){if(/[.*>\s]/.test($)){console.warn("[NatsCancelBroadcast] Invalid threadId, skipping broadcast");return}this.onCancel?.($);try{let Z=this.options.getConnection();if(!Z)return;let Q=this.encoder.encode(JSON.stringify({taskId:$,originId:this.originId}));Z.publish("studio.decopilot.cancel",Q)}catch(Z){console.warn("[NatsCancelBroadcast] Publish failed (non-critical):",Z)}}async stop(){this.subscription?.unsubscribe(),this.subscription=null,this.onCancel=null}}var J58=($)=>{let Z;return()=>Z??=$()},DU1,LU1;var G58=D(()=>{C6();DU1=J58(()=>z$.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),LU1=J58(()=>z$.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function Bl6($=H58){return{name:jU,subjects:[`${VZ1}.>`],storage:MH.StorageType.File,max_age:Hl6,max_bytes:Ul6,max_msgs_per_subject:Nl6,discard:MH.DiscardPolicy.Old,retention:MH.RetentionPolicy.Limits,duplicate_window:Fl6,num_replicas:$}}class F58{chunks=0;encodeMs=0;maxMs=0;bytes=0;windowStart=performance.now();constructor(){setInterval(()=>this.flush(),1e4).unref?.()}record($,Z){if(this.chunks++,this.encodeMs+=$,$>this.maxMs)this.maxMs=$;this.bytes+=Z}flush(){let $=performance.now(),Z=$-this.windowStart;if(this.chunks>0&&Z>0)console.warn(JSON.stringify({msg:"stream-encode-trace",windowMs:Math.round(Z),chunks:this.chunks,encodeMs:Math.round(this.encodeMs),pctOfLoop:+(this.encodeMs/Z*100).toFixed(1),maxChunkMs:+this.maxMs.toFixed(2),mbEncoded:+(this.bytes/1048576).toFixed(2)}));this.chunks=0,this.encodeMs=0,this.maxMs=0,this.bytes=0,this.windowStart=$}}function W58($){let Z=K58.headers();for(let[Q,Y]of Object.entries($))Z.set(Q,Y);return Z}function wl6($,Z){let Q=0;return{publish(Y,X,J,G){Y.publish(X,J,G?{headers:G}:void 0).catch((W)=>{if(Q++,Kl6().add(1,{"org.id":Z??"unknown"}),Q===1||Q%100===0)console.warn(`[Decopilot] JetStream publish failed for thread ${$} (${Q} total):`,W)})},get errorCount(){return Q}}}function jl6($,Z){return $.info?.cluster?Z:1}function El6($){if(!($ instanceof Error))return!1;if(/non-clustered/i.test($.message))return!0;return/replicas?\b/i.test($.message)&&/not supported|can ?not|exceed|insufficient|greater than/i.test($.message)}class wU1{options;js=null;jsm=null;constructor($){this.options=$}async init(){let $=this.options.getConnection();if(!$){console.log("[Decopilot] StreamBuffer.init skipped: NATS not connected yet");return}let Z=async(Y,X)=>{let J=Bl6(X);try{await Y.streams.info(jU),await Y.streams.update(jU,J)}catch(G){if(G instanceof Error&&G.message.includes("stream not found"))await Y.streams.add(J),await Y.streams.update(jU,J);else if(G instanceof Error&&/can ?not change.*storage|storage type/i.test(G.message))await Y.streams.delete(jU),await Y.streams.add(J);else throw G}},Q=await g8(async()=>{let Y=this.options.getJetStreamManager?await this.options.getJetStreamManager():await MH.jetstreamManager($),X=jl6($,H58);try{await Z(Y,X)}catch(J){if(X<=1||!El6(J))throw J;console.warn(`[Decopilot] StreamBuffer: NATS rejected num_replicas=${X} (${J.message}); falling back to an unreplicated stream`),await Z(Y,1)}return Y},{maxAttempts:5,minTimeout:250,maxTimeout:4000,jitter:0.5,isRetriable:vm});this.js=this.options.getJetStream(),this.jsm=Q,console.log(`[Decopilot] StreamBuffer.init ${this.js?"ready":"degraded (js=null)"}`)}pump($,Z,Q,Y){let X=this.js;if(!X)return console.warn(`[Decopilot] pump: JetStream client unavailable for thread ${Z}; chunks NOT published to NATS`),Promise.resolve();let J=wl6(Z,Y),G=!1,W=()=>{if(G)return;G=!0;let H=BC$(Z);X.publish(H.subject,H.data).catch(()=>{})};Q.addEventListener("abort",W,{once:!0});let K=(H)=>{let F=performance.now(),U=SZ1(H,{runId:Z}),N=performance.now()-F;DU1().record(N),LU1().add(1,{"org.id":Y??"unknown"}),Ll6?.record(N,U.reduce((B,O)=>B+O.data.length,0));for(let B of U)J.publish(X,B.subject,B.data,B.headers?W58(B.headers):void 0)};return(async()=>{let H=$.getReader(),F=0,U=0,N;try{while(!0){let{done:B,value:O}=await H.read();if(B)break;if(K(O),U++,++F>=64)F=0,await new Promise((L)=>setImmediate(L))}}catch(B){N=B,console.warn(`[Decopilot] stream pump error for thread ${Z}:`,B?.message??B)}finally{if(H.releaseLock(),W(),Dl6)console.warn(JSON.stringify({msg:"decopilot-stream-diag",event:"pump-done",taskId:Z,publishedChunks:U,publishErrors:J.errorCount}))}if(N!==void 0)throw N})()}async publishSerialized($,Z){try{return await g8(()=>$.publish(Z.subject,Z.data,{...Z.headers?{headers:W58(Z.headers)}:{},...Z.msgId?{msgID:Z.msgId}:{}}),{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:vm}),!0}catch(Q){return console.error(`[Decopilot] publish failed after retries subject=${Z.subject}`,Q),!1}}async publishRawChunk($,Z,Q){let Y=this.js;if(!Y)return!1;let X=performance.now(),J=SZ1(Z,{runId:$,dedup:Q});DU1().record(performance.now()-X),LU1().add(1);for(let G of J)if(!await this.publishSerialized(Y,G))return!1;return!0}async publishDone($,Z,Q){let Y=this.js;if(!Y)return!1;let X=NC$({runId:$,fenceToken:Z,finalSeq:Q});return await this.publishSerialized(Y,X)}async createTailStream($,Z,Q){let Y=this.js;if(!Y)return console.warn(`[Decopilot] createTailStream: JetStream client unavailable for thread ${$}; no live tail`),null;let X=Q?.deliverPolicy==="new"?MH.DeliverPolicy.New:MH.DeliverPolicy.All,J=Q?.closeOnDone??!1,G=vj($),W;try{W=await g8(async()=>{return(await Y.consumers.get(jU,{filter_subjects:G,deliver_policy:X})).consume()},{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:vm})}catch(L){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",L?.message??L),null}let F=sT0({messages:async function*(){try{for await(let L of W)yield{subject:L.subject,data:L.data,headers:L.headers}}finally{W.stop()}}(),onCancel:()=>W.stop()}).pipeThrough(tT0()).pipeThrough(oT0()).getReader(),U=!1,N=()=>{if(U)return;U=!0;try{F.releaseLock()}catch{}},B=!1,O=()=>{if(B)return;B=!0,W.stop(),F.cancel().catch(()=>{}),N()};return Z?.addEventListener("abort",O,{once:!0}),new ReadableStream({async pull(L){for(;;){let{done:w,value:j}=await F.read();if(w){O(),L.close();return}let E=j;if(E.kind==="done"){if(J){O(),L.close();return}continue}L.enqueue(E.chunk);return}},cancel(){O()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge(jU,{filter:vj($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var MH,K58,Wl6=($)=>{let Z;return()=>Z??=$()},Kl6,Hl6=86400000000000,Fl6=120000000000,Ul6=4294967296,H58,Nl6=500000,Ol6,Dl6,Ll6;var U58=D(()=>{D8();CZ1();eT0();rT0();C6();G58();MH=C(JN(),1),K58=C(ei(),1),Kl6=Wl6(()=>z$.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"})),H58=Math.max(1,Number(process.env.DECOPILOT_STREAM_REPLICAS??3)||3);Ol6=process.env.STREAM_ENCODE_TRACE==="1",Dl6=process.env.DECOPILOT_STREAM_TRACE==="1";Ll6=Ol6?new F58:null});function sk0($,Z,Q,Y){if(!Y)return!1;return $.emit(Z,nH(Q,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,harnessId:Y.harness_id??void 0,createdAt:Y.created_at,updatedAt:Y.updated_at})),!0}var N58=D(()=>{e8()});class jU1{storage;options;timer=null;constructor($,Z={}){this.storage=$;this.options=Z}start(){if(this.timer)return;let $=this.options.intervalMs??300000;this.timer=setInterval(()=>{this.runOnce()},$)}async runOnce(){let $=this.options.staleAfterMs??3600000;try{let Z=await this.storage.sweepAbandoned($);if(Z>0)console.log(`[async-research-sweeper] marked ${Z} stale jobs as abandoned`);return Z}catch(Z){return console.error("[async-research-sweeper] sweep failed",Z),0}}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}function zl6($,Z){let Q=$.startsWith("thread:")?YH($):$;return[...new Set([Z,Q].filter((Y)=>!!Y))]}async function EU1($,Z){let Q=Z.organizationId;try{let Y=await $.storage.taskBoard.linkedThreadIds(Z.id,Q);for(let X of Y){let J=await WU($,X);if(!J?.owner||!J?.name)continue;let G=await $.storage.threads.get(X),W=await gc($,{threadId:X,runBranch:G?.branch}),K=zl6(W,await jA0($,X)),H=await ze($,Q,n11(J)).catch(()=>null);if(!H){console.warn(`[task-board] no credential for ${J.owner}/${J.name} \u2014 `+`cannot look up ${Z.id}'s change request by branch`);continue}for(let F of K){let U=await H.readForBranch(F).catch(()=>null);if(!U)continue;return await $.storage.taskBoard.linkPr({taskBoardItemId:Z.id,organizationId:Q,url:U.url,prNumber:U.number,repo:H.repo}),await $.storage.taskBoard.openReviewCycleIfInProgress(Z.id,Q),await aG(Q).catch(()=>{}),console.log(`[task-board] ${Z.id}: linked ${U.url} found on branch ${F}`),!0}}}catch(Y){console.error("[task-board] PR lookup by branch failed",Y)}return!1}var B58=D(()=>{iZ();jW();z7()});async function O58($,Z,Q){let Y=Z.organizationId;if(!VX(Z))return!1;if(!ix(Q))return!1;if(await $.storage.taskBoard.hasHumanRejectedDone(Z.id,Y))return!1;let X=await $.storage.organizationSettings.get(Y),J=tF(X?.flags),G=await $.storage.taskBoard.update(Z.id,Y,{status:J},Z.updatedBy);return await o6($,{taskBoardItemId:Z.id,action:"status_changed",actorId:null,data:{from:Z.status,to:J,reason:"pr_merged"}}),E8(Y,G),console.log(`[task-board-review-sweeper] ${Z.id}: linked PR already merged \u2014 moved to ${J}`),!0}var D58=D(()=>{C4();_Y();jm();WH();V9()});function Il6($){return $ instanceof zX}function L58($,Z){return Z-$>=ql6}class zU1{taskBoard;contextFactory;billing;options;timer=null;running=!1;cursor=null;constructor($,Z,Q,Y={}){this.taskBoard=$;this.contextFactory=Z;this.billing=Q;this.options=Y}start(){if(this.timer)return;let $=this.options.intervalMs??Pl6;this.timer=setInterval(()=>{this.runOnce()},$),this.timer.unref()}async runOnce(){if(this.running)return 0;this.running=!0;let $=0;try{let Z=this.options.batchSize??Tl6,Q=this.options.itemIntervalMs??Al6,Y=new Date(Date.now()-Q),X=await this.taskBoard.listItemsPendingReview(Z,this.cursor,Y),J=X.at(-1);this.cursor=X.length===Z&&J?{updatedAt:J.updatedAt,id:J.id}:null;for(let{id:G,organizationId:W}of X)try{if(await this.reconcileItem(G,W,Y))$++}catch(K){console.error(`[task-board-review-sweeper] ${G} failed`,K)}await this.reapNeverStartedThreads(Z),$+=await this.dispatchDueRetries(Z),await this.reactToUnhandledFailures(Z),$+=await this.settleFinishedRunsWithoutPr(Z,Y)}catch(Z){console.error("[task-board-review-sweeper] sweep failed",Z)}finally{this.running=!1}return $}async reapNeverStartedThreads($){try{let Z=await this.taskBoard.failNeverStartedLinkedThreads($,new Date(Date.now()-j51),y91);for(let Q of Z)console.warn(`[task-board-review-sweeper] failed never-started thread ${Q.threadId} on ${Q.itemId}`)}catch(Z){console.error("[task-board-review-sweeper] reaping failed",Z)}}async reactToUnhandledFailures($){let Z=await this.taskBoard.listItemsStuckAfterFailure($,new Date(Date.now()-Ml6));for(let{id:Q,organizationId:Y,threadId:X}of Z)try{console.warn(`[task-board-review-sweeper] reacting to an unhandled failure on ${Q}`),await b91(this.taskBoard,X,Y),await x91(this.taskBoard,this.billing,X,Y)}catch(J){console.error(`[task-board-review-sweeper] unhandled-failure reaction for ${Q} failed`,J)}}async settleFinishedRunsWithoutPr($,Z){let Q=0,Y=await this.taskBoard.listItemsFinishedWithoutPr($,Z);for(let{id:X,organizationId:J,finishedAt:G}of Y)try{if(!await this.taskBoard.claimSweep(X,J,Z))continue;let W=await this.taskBoard.getById(X,J);if(!W||W.status!==T$.progress||VX(W)||W.assigneeId!==j8)continue;let K=await this.contextFactory(J,W.assignedBy??W.createdBy);if(!K)continue;if(await EU1(K,W)){if(await this.taskBoard.clearSweepBudget(X,J),await this.reconcileItem(X,J,Z))Q++;continue}if(!L58(G.getTime(),Date.now()))continue;let H="the run finished without opening a pull request \u2014 there is "+"nothing for a reviewer to review",F=await this.taskBoard.advanceToReviewIfInProgress(X,J,W.updatedBy);if(!F)continue;await this.taskBoard.recordActivity({taskBoardItemId:X,action:"status_changed",actorId:null,data:{from:T$.progress,to:T$.review,reason:H}}).catch(()=>{}),E8(J,F),await KH(K,F,H)}catch(W){console.error(`[task-board-review-sweeper] settling finished run on ${X} failed`,W)}return Q}async dispatchDueRetries($){let Z=0,Q=await this.taskBoard.listItemsDueForRetry($,new Date);for(let{id:Y,organizationId:X,attempts:J}of Q)try{if(!await this.taskBoard.claimDueRetry(Y,X,new Date))continue;let G=await this.taskBoard.getById(Y,X);if(!G||G.status!==T$.progress||G.assigneeId!==j8)continue;let W=await this.contextFactory(X,G.assignedBy??G.createdBy);if(!W)continue;await HH(W,G,{runClass:"retry"}),Z++,console.warn(`[task-board-review-sweeper] re-dispatched ${Y} after a failure (attempt ${J})`)}catch(G){if(console.error(`[task-board-review-sweeper] retry dispatch for ${Y} failed`,G),Il6(G)){await this.returnToTodo(Y,X,G instanceof Error?G.message:String(G));continue}await this.taskBoard.scheduleRunRetry(Y,X,J,new Date(Date.now()+Rl6)).catch((W)=>console.error(`[task-board-review-sweeper] re-arming ${Y} failed`,W))}return Z}async returnToTodo($,Z,Q){try{let Y=await this.taskBoard.getById($,Z);if(!Y||Y.status!==T$.progress)return;let X=await this.taskBoard.returnToTodoAfterFailure($,Z,Y.updatedBy);if(!X)return;await this.taskBoard.recordActivity({taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:"in_progress",to:"todo",reason:Q}}).catch(()=>{}),E8(Z,X)}catch(Y){console.error(`[task-board-review-sweeper] returning ${$} to todo failed`,Y)}}async handOffReviewWithoutPr($,Z){let Q=await this.taskBoard.listActivity(Z.id,Z.organizationId);if(!L58(kB(Q,Z.reviewCycleStartedAt),Date.now()))return;await KH($,Z,"no pull request is linked to this task \u2014 there is nothing for a "+"reviewer to review")}async reconcileItem($,Z,Q){if(!await this.taskBoard.claimSweep($,Z,Q))return!1;let Y=await this.taskBoard.getById($,Z);if(!Y)return!1;if(!VX(Y))return!1;let X=Y.assigneeId===j8,J=await this.taskBoard.listPrs($,Z),G=await this.contextFactory(Z,Y.assignedBy??Y.createdBy);if(!G)return!1;if(J.length===0){if(await EU1(G,Y))J=await this.taskBoard.listPrs($,Z);if(J.length===0){if(X)await this.handOffReviewWithoutPr(G,Y);return!1}}let W=await Promise.all(J.map(async(K)=>({...K,...await Pm(Z,K)})));if(W.every((K)=>K.state===null))console.warn(`[task-board-review-sweeper] ${$}: no live PR state from GitHub (${W.length} PR(s)) \u2014 proceeding on unknown`);if(await O58(G,Y,W))return!0;if(await w_$(G,Y))return!0;if(await this.resolveConflictFromSweep(G,Y,W))return!0;if(!X)return!1;if(!S91(W))return!1;return await Em(G,Y,{previewMatchesHead:C91(W)}),!0}async resolveConflictFromSweep($,Z,Q){let Y=Q.find((X)=>X.state!=="closed"&&X.conflict===!0);if(!Y)return!1;return await kj($,Z.organizationId,Z,{pr:{number:Y.number,url:Y.url},conflict:!0}).catch((X)=>{return console.error("[task-board-review-sweeper] conflict resolve failed",X),!1})}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}var Pl6=60000,Al6=300000,Tl6=50,Rl6=60000,ql6=900000,Ml6=120000;var w58=D(()=>{C4();FT0();B58();LU();k10();WH();D58();V9();FW();g91();z7();Z10();zm()});import{readdir as Vl6,rm as ek0}from"fs/promises";import{join as $S0}from"path";async function ZS0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-kl6),Z.setUTCHours(0,0,0,0);let Q=0;try{let Y=await By($);for(let X of Y)if(/^\d{4}$/.test(X))Q+=await j58($,X,Z);else if(!X.startsWith(".")){let J=$S0($,X),G=await By(J);for(let K of G){if(!/^\d{4}$/.test(K))continue;Q+=await j58(J,K,Z)}if((await By(J)).length===0)await ek0(J,{recursive:!0,force:!0})}}catch(Y){console.warn("monitoring retention cleanup failed:",Y)}return Q}async function j58($,Z,Q){let Y=0,X=$S0($,Z),J=await By(X);for(let W of J){if(!/^\d{2}$/.test(W))continue;let K=$S0(X,W),H=await By(K);for(let U of H){if(!/^\d{2}$/.test(U))continue;let N=new Date(`${Z}-${W}-${U}T00:00:00Z`);if(isNaN(N.getTime()))continue;if(N<Q){let B=$S0(K,U);await ek0(B,{recursive:!0,force:!0}),Y++}}if((await By(K)).length===0)await ek0(K,{recursive:!0,force:!0})}if((await By(X)).length===0)await ek0(X,{recursive:!0,force:!0});return Y}async function By($){try{return(await Vl6($)).filter((Q)=>!Q.startsWith("."))}catch{return[]}}var kl6=30;var PU1=()=>{};import{DBOS as AU1,SchedulerMode as Sl6}from"@dbos-inc/dbos-sdk";async function _l6(){let $=[uW(),Ay(),sU()],Z=0;for(let Q of $)try{Z+=await ZS0(Q)}catch(Y){console.error("[monitoring-retention] cleanup failed:",Y)}return console.log(`[monitoring-retention] deleted ${Z} day-dir(s) across ${$.length} signal dir(s)`),{deleted:Z,dirs:$.length}}async function vl6($,Z){await AU1.runStep(()=>_l6(),{name:"monitoringRetention"})}function z58(){if(E58)return;E58=!0;let $=AU1.registerWorkflow(vl6,{name:"monitoringRetentionWorkflow"});AU1.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:Cl6,mode:Sl6.ExactlyOncePerIntervalWhenActive})}var Cl6="23 4 * * *",E58=!1;var P58=D(()=>{O3();PU1()});function A58($){return async(Z,Q)=>{let Y=await $.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["member.role","organization.id as orgId","organization.slug as orgSlug","organization.name as orgName"]).where("member.userId","=",Q).where("member.organizationId","=",Z).executeTakeFirst();if(!Y)return console.warn(`[automationContextFactory] User ${Q} not found in org ${Z} \u2014 returning null`),null;let X=await vQ.create();X.auth.user={id:Q,role:Y.role},X.organization={id:Y.orgId,slug:Y.orgSlug,name:Y.orgName};let J=await RA($.db,Z,Y.role);return X.boundAuth=XK1({auth:X.authInstance,headers:new Headers,role:Y.role,permissions:J,userId:Q}),X.access=new HP(Q,void 0,X.boundAuth,Y.role,"self"),Vj(X,{id:Y.orgId,slug:Y.orgSlug}),X}}var T58=D(()=>{BK();iF()});function bl6(){return[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}]}function xl6(){return{services:bl6(),migrationsStatus:"pending",serverUrl:null,logs:[]}}function yl6(){for(let $ of fl6)$()}function R58($){let Z=[...TU1.logs,$];TU1={...TU1,logs:Z.length>500?Z.slice(-500):Z},yl6()}function RU1(){return gl6}var TU1,fl6,gl6=!1;var qU1=D(()=>{TU1=xl6(),fl6=new Set});import{EventEmitter as hl6}from"events";var MU1;var q58=D(()=>{qU1();MU1=new hl6;MU1.on("request",($)=>{R58($)})});function M58(){return async($,Z)=>{let Q=Date.now(),Y=$.req.method,X=$.req.path;if(X==="/api/auth/get-session"||X.includes("favicon")){await Z();return}let J="",G=!1;if(X.startsWith("/mcp")&&Y==="POST"){G=!0;try{if($.req.header("Content-Type")?.includes("application/json")){let N=await $.req.raw.clone().json();if(N.method==="tools/call"&&N.params?.name){let B=Ri(N.params.name),O=N.params.arguments||{},L=Object.keys(O).map((j)=>Ri(j)),w=L.length>0?L.slice(0,3).join(",")+(L.length>3?"\u2026":""):"";J=`${Z9.tool}${B}${Z9.dim}(${w})${Z9.reset}`}else if(N.method)J=`${Z9.dim}${Ri(N.method)}${Z9.reset}`}}catch{}}let W=Ri(X);if(X.startsWith("/mcp/conn_")){let F=X.split("/")[2]??"";W=`/mcp/${Z9.mcp}${Ri(F.slice(0,12))}\u2026${Z9.reset}`}else if(X==="/mcp")W=`${Z9.mcp}/mcp${Z9.reset}`;else if(X==="/mcp/registry")W=`${Z9.mcp}/mcp/registry${Z9.reset}`;let K=ll6(Y),H=G?"\u25C0":"\u2190";if(!RU1())console.log(`${Z9.dim}${H}${Z9.reset} ${K}${Y}${Z9.reset} ${W}${J?` ${J}`:""}`);try{await Z()}finally{let F=Date.now()-Q,U=$.res.status,N=ul6(U),B=F<1000?`${F}ms`:`${(F/1000).toFixed(1)}s`,O=G?"\u25B6":"\u2192";if(!RU1())console.log(`${Z9.dim}${O}${Z9.reset} ${K}${Y}${Z9.reset} ${W}${J?` ${J}`:""} ${N}${U}${Z9.reset} ${Z9.duration}${B}${Z9.reset}`);MU1.emit("request",{method:Y,path:Ri(X),status:U,duration:F,timestamp:new Date})}}}var Z9,ul6=($)=>{if($>=500)return Z9.serverError;if($>=400)return Z9.clientError;if($>=300)return Z9.redirect;return Z9.ok},ll6=($)=>{return Z9[$]||Z9.reset},Ri=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var I58=D(()=>{qU1();q58();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 C58}from"crypto";import{mkdir as cl6,readdir as ml6,rm as V58,stat as _58}from"fs/promises";import{join as VU1,relative as dl6}from"path";import{z as a$}from"zod";function b58($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return VU1(il6,Z)}function x58($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function IU1($,Z){let Q=b58($),Y=x58(Z);return VU1(Q,Y)}function pl6($,Z,Q,Y){let X=E0().encryptionKey||"dev-secret",J=`${$}:${Z}:${Q}:${Y}`;return C58("sha256",X).update(J).digest("hex")}function S58($,Z,Q,Y,X){let J=Math.floor(Date.now()/1000)+Y,G=pl6(Z,Q,J,X),W=new URL(`/api/dev-assets/${Z}/${x58(Q)}`,$);return W.searchParams.set("expires",J.toString()),W.searchParams.set("signature",G),W.searchParams.set("method",X),W.toString()}function f58($,Z,Q){let Y=`${$}:${Z.getTime()}:${Q}`;return`"${C58("md5","etag").update(Y).digest("hex")}"`}async function y58($,Z,Q,Y,X){try{let J=await ml6($,{withFileTypes:!0});for(let G of J){let W=VU1($,G.name),H=dl6(Z,W).replace(/\\/g,"/");if(Q&&!H.startsWith(Q))continue;if(G.isDirectory())if(Y){let F=H+"/";if(!Q||F.startsWith(Q)){if(!(Q?H.slice(Q.length):H).includes("/"))X.commonPrefixes.add(F)}}else await y58(W,Z,Q,Y,X);else if(G.isFile()){if(Y&&Q){let F=H.slice(Q.length);if(F.includes(Y)){let U=F.indexOf(Y),N=Q+F.slice(0,U+1);X.commonPrefixes.add(N);continue}}try{let F=await _58(W);X.objects.push({key:H,size:F.size,lastModified:F.mtime.toISOString(),etag:f58(W,F.mtime,F.size)})}catch{}}}}catch{}}function g58($,Z){let Y=K0($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:a$.object({prefix:a$.string().optional(),maxKeys:a$.number().optional().default(1000),continuationToken:a$.string().optional(),delimiter:a$.string().optional()}),outputSchema:a$.object({objects:a$.array(a$.object({key:a$.string(),size:a$.number(),lastModified:a$.string(),etag:a$.string()})),nextContinuationToken:a$.string().optional(),isTruncated:a$.boolean(),commonPrefixes:a$.array(a$.string()).optional()}),handler:async(X)=>{let J=X,G=J.prefix||"",W=J.maxKeys??1000,K=J.delimiter,H=J.continuationToken,F=b58(Y);await cl6(F,{recursive:!0});let U={objects:[],commonPrefixes:new Set};await y58(F,F,G,K,U),U.objects.sort((w,j)=>w.key.localeCompare(j.key));let N=0;if(H){if(N=U.objects.findIndex((w)=>w.key>H),N===-1)N=U.objects.length}let B=U.objects.slice(N,N+W),O=N+W<U.objects.length,L=O?B[B.length-1]?.key:void 0;return{objects:B,isTruncated:O,nextContinuationToken:L,commonPrefixes:Array.from(U.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:a$.object({key:a$.string()}),outputSchema:a$.object({contentType:a$.string().optional(),contentLength:a$.number(),lastModified:a$.string(),etag:a$.string(),metadata:a$.record(a$.string(),a$.string()).optional()}),handler:async(X)=>{let J=X,G=IU1(Y,J.key),W=await _58(G);return{contentType:ZH1(J.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:f58(G,W.mtime,W.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:a$.object({key:a$.string(),expiresIn:a$.number().optional()}),outputSchema:a$.object({url:a$.string(),expiresIn:a$.number()}),handler:async(X)=>{let J=X,G=lf(J.expiresIn,k58);return{url:S58(Z,Y,J.key,G,"GET"),expiresIn:G}}},{name:"PUT_PRESIGNED_URL",description:"Generate a presigned URL for uploading a file to local storage",inputSchema:a$.object({key:a$.string(),expiresIn:a$.number().optional(),contentType:a$.string().optional()}),outputSchema:a$.object({url:a$.string(),expiresIn:a$.number()}),handler:async(X)=>{let J=X,G=lf(J.expiresIn,k58);return{url:S58(Z,Y,J.key,G,"PUT"),expiresIn:G}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:a$.object({key:a$.string()}),outputSchema:a$.object({success:a$.boolean(),key:a$.string()}),handler:async(X)=>{let J=X,G=IU1(Y,J.key);try{return await V58(G),{success:!0,key:J.key}}catch{return{success:!1,key:J.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:a$.object({keys:a$.array(a$.string()).max(1000)}),outputSchema:a$.object({deleted:a$.array(a$.string()),errors:a$.array(a$.object({key:a$.string(),message:a$.string()}))}),handler:async(X)=>{let J=X,G=[],W=[];return await Promise.all(J.keys.map(async(K)=>{let H=IU1(Y,K);try{await V58(H),G.push(K)}catch(F){W.push({key:K,message:F instanceof Error?F.message:"Unknown error"})}})),{deleted:G,errors:W}}}]}async function kU1($,Z,Q){let Y=g58(Z,Q),X=new TL({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:zZ});for(let G of Y){let W="shape"in G.inputSchema?G.inputSchema.shape:a$.object({}).shape,K=G.outputSchema&&"shape"in G.outputSchema?G.outputSchema.shape:a$.object({}).shape;X.registerTool(G.name,{description:G.description??"",inputSchema:W,outputSchema:K,annotations:G.annotations,_meta:G._meta},async(H)=>{try{let F=await G.handler(H);return{content:[{type:"text",text:JSON.stringify(F)}],structuredContent:F}}catch(F){return{content:[{type:"text",text:`Error: ${F.message}`}],isError:!0}}})}let J=new Q3({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await X.connect(J),MW(X,J,$,"mcp:dev-assets")}async function h58($,Z,Q,Y){let J=g58(Q,Y).find((G)=>G.name===$);if(!J)return{content:[{type:"text",text:`Tool not found: ${$}`}],isError:!0};try{let G=await J.handler(Z);return{content:[{type:"text",text:JSON.stringify(G)}]}}catch(G){return{content:[{type:"text",text:G instanceof Error?G.message:String(G)}],isError:!0}}}var il6="./data/assets",k58=3600,v58,u58;var l58=D(()=>{F$();um();G8();hY0();hm();sX();WE();mV0();v58=new Q1;v58.all("/",async($)=>{let Z=$.get("studioContext"),Q=new URL($.req.url),Y=`${Q.protocol}//${Q.host}`;return kU1($.req.raw,Z,Y)});u58=v58});var c58={};M6(c58,{mountDevRoutes:()=>nl6});function nl6($,Z){$.all("/mcp/:connectionId{.*_dev-assets$}",Z,async(Y)=>{let X=Y.get("studioContext"),J=new URL(Y.req.url),G=`${J.protocol}//${J.host}`;return kU1(Y.req.raw,X,G)}),$.all("/mcp/:connectionId{.*_dev-assets$}/call-tool/:toolName",Z,async(Y)=>{let X=Y.get("studioContext"),J=new URL(Y.req.url),G=`${J.protocol}//${J.host}`,W=Y.req.param("toolName");if(!W)return Y.json({error:"Missing tool name"},400);let K=await Y.req.json(),H=await h58(W,K,X,G);if(H.isError)return Y.json(H.content,500);return Y.json(H.content)}),$.use("/mcp/dev-assets",Z),$.route("/mcp/dev-assets",u58);let Q=new Q1;Q.use("*",RH({mountPath:"/api/dev-assets"})),Q.route("/",cV0({orgFromPath:!1})),$.route("/api/dev-assets",Q)}var m58=D(()=>{G8();tK1();mV0();l58()});var e58={};M6(e58,{watchHandler:()=>s58,resolveCorsOrigin:()=>r58,isSsoExemptPath:()=>t58,isAllowedOAuthRedirectUri:()=>a58,createApp:()=>Yc6});import{readFileSync as tl6}from"fs";import{PrometheusSerializer as ol6}from"@opentelemetry/exporter-prometheus";import{DBOS as xO}from"@dbos-inc/dbos-sdk";import{oAuthDiscoveryMetadata as sl6,oAuthProtectedResourceMetadata as el6}from"better-auth/plugins";async function rl6($){let Z=$.connect(),Q;try{Q=await Promise.race([Z,i58(d58)])}catch{return Z.then((Y)=>Y.release(!0)).catch(()=>{}),!1}try{return await Promise.race([Q.query("SELECT 1"),i58(d58)]),Q.release(),!0}catch{return Q.release(!0),!1}}function i58($){return new Promise((Z,Q)=>setTimeout(()=>Q(Error("pg health-check timeout")),$))}function t58($){return $.startsWith("/api/org-sso/")||/^\/api\/[^/]+\/sso\//.test($)||$.startsWith("/api/auth/")||$.startsWith("/api/tools/management")||$.startsWith("/oauth-proxy/")||/^\/api\/[^/]+\/oauth-proxy\//.test($)||$.startsWith(`${VV0}/`)||$.startsWith(`${TV0}/`)}function o58($){return $==="local.studio.decocms.com"}function r58($,{baseUrl:Z,requestOrigin:Q}){let Y;try{Y=new URL($).hostname}catch{return null}if(Y==="localhost"||Y==="127.0.0.1")return $;if(o58(Y))return $;let X=Z??Q;try{if(new URL(X).origin===$)return $}catch{}return null}function a58($,Z){return $.origin===new URL(Z).origin||$.hostname==="localhost"||o58($.hostname)}async function Yc6($={}){let Z=$.database??S8(),Q=!1;e5.stop().catch((Q0)=>{console.error("[SSEHub] Error stopping previous broadcast (HMR cleanup):",Q0)});let Y,X,J,G,W=new NU1,K,H,F,U=null;if($.disableNats)K=BU1(),Y={get:async()=>null,set:async()=>{},invalidate:async()=>{},teardown:()=>{}},X=null,J=null,G=new g10,H={start:async()=>{},broadcast:()=>{},stop:async()=>{}},F={init:async()=>{},pump:(Q0)=>{return(async()=>{let w0=Q0.getReader();try{while(!0){let{done:e}=await w0.read();if(e)break}}catch{}finally{w0.releaseLock()}})()},publishRawChunk:async()=>!1,publishDone:async()=>!1,createTailStream:async()=>null,purge:()=>{},teardown:()=>{}};else{U=$58();let Q0=E0().natsCredsPath,w0;if(Q0)try{w0=tl6(Q0,"utf8")}catch(f0){console.error(`[app] failed to read NATS_CREDS at ${Q0}; connecting anonymously`,f0)}U.init(E0().natsUrls,w0?{creds:w0}:void 0);let e=he0()?new Ae0({getJetStream:()=>U.getJetStream()}):null;e?.init().catch(()=>{}),Y=e;let i=new b41({getJetStream:()=>U.getJetStream()});i.init().catch(()=>{}),X=i;let m0=new nx(R91,{getJetStream:()=>U.getJetStream()}),I0=new nx(Q10,{getJetStream:()=>U.getJetStream()});m0.init().catch(()=>{}),I0.init().catch(()=>{}),J={reads:m0,cards:I0};let t0=new NQ1({getJetStream:()=>U.getJetStream()});t0.init().catch(()=>{}),G=t0,K=BU1({getConnection:()=>U.getConnection()}),H=new OU1({getConnection:()=>U.getConnection()}),F=new wU1({getConnection:()=>U.getConnection(),getJetStream:()=>U.getJetStream()}),Js$(U),U.onReady(()=>{e?.init().catch((f0)=>{console.error("[McpListCache] Deferred init failed:",f0)}),i.init().catch((f0)=>{console.error("[SkillCatalogCache] Deferred init failed:",f0)}),m0.init().catch((f0)=>{console.error("[PrReadCache] Deferred init failed:",f0)}),I0.init().catch((f0)=>{console.error("[PrCardCache] Deferred init failed:",f0)}),t0.init().catch((f0)=>{console.error("[ConnectionCircuitStore] Deferred init failed:",f0)}),K.start(),bK$(()=>U.getConnection()),F.init().catch((f0)=>{console.warn("[Decopilot] StreamBuffer init failed (late-join disabled):",f0)})})}if(LE)await LE();Te0(Y),f41(X),q91(J),BQ1(G);let B={storage:new Kh(Z.db),sseHub:e5,onThreadFinished:async(Q0,w0)=>Tm(new rG(Z.db),Q0,w0,new DG(Z.db))},O=new yZ1(B),L=new X80(Z.db),w=new jU1(L);w.start(),D_$(H),H.start((Q0)=>{yT0(Q0),O.execute({type:"CANCEL",taskId:Q0}).catch((w0)=>{console.error("[Decopilot] CancelBroadcast execute failed:",w0)})}).catch((Q0)=>{console.error("[Decopilot] CancelBroadcast start failed:",Q0)}),U?.onReady(()=>{H.start().catch((Q0)=>{console.error("[CancelBroadcast] Deferred start failed:",Q0)})});let j=()=>U?.getConnection()??null;dK1(j),U?.onReady(()=>dK1(j)),iQ1(j),U?.onReady(()=>iQ1(j)),F.init().catch((Q0)=>{console.warn("[Decopilot] StreamBuffer init failed, attach/late-join disabled:",Q0)}),LE=async()=>{await O.stopAll(),O.dispose(),w.dispose(),H.stop().catch(()=>{}),Le$(),F.teardown(),Y?.teardown(),X?.teardown(),J?.reads.teardown(),J?.cards.teardown(),W.teardown(),K.teardown(),xK$(),G.teardown(),Te0(null),f41(null),q91(null),BQ1(null)};let E=new Q1;if(E.use("*",HQ1({enabled:(Q0)=>pd(Q0,"debug")==="1"})),E.use("*",TS0),E.use("/*",$s$({origin:(Q0,w0)=>r58(Q0,{baseUrl:E0().baseUrl,requestOrigin:new URL(w0.req.url).origin}),credentials:!0,allowMethods:["GET","POST","PUT","DELETE","OPTIONS"],allowHeaders:["Content-Type","Authorization","mcp-protocol-version"],exposeHeaders:["WWW-Authenticate"]})),E.use("*",async(Q0,w0)=>{if(await w0(),Q0.req.path.includes("/files/"))return;if(Q0.req.path.includes("/fs/")&&Q0.req.path.endsWith("/read"))return;Q0.header("X-Frame-Options","DENY"),Q0.header("Content-Security-Policy","frame-ancestors 'none'")}),!E0().noTui)E.use("*",M58());E.use("*",async(Q0,w0)=>{if(await w0(),bi(Q0.req.path))return;if(Q0.res.status>=500){let i=await Q0.res.clone().text();console.error(`[5xx Response] ${Q0.req.method} ${Q0.req.path} - ${Q0.res.status}:`,i)}}),E.get(mY.HEALTH,(Q0)=>{if(Q)return Q0.json({status:"shutting_down"},503);return Q0.json({status:"ok"})}),E.get(mY.HEALTH_LIVE,(Q0)=>{return Q0.json({status:"ok"})}),E.get(mY.HEALTH_READY,async(Q0)=>{if(Q)return Q0.json({status:"shutting_down"},503);let w0={};if(w0.postgres={status:await rl6(Z.pool)?"up":"down"},U)w0.nats=U.isConnected()?{status:"up"}:{status:"down"};else w0.nats={status:"down"};let e=w0.postgres.status==="up",i=e?200:503;return Q0.json({status:e?"ready":"not_ready",services:w0},i)}),E.get(mY.METRICS,async(Q0)=>{try{let w0=await IS0.collect(),e=al6.serialize(w0.resourceMetrics);return Q0.text(e,200,{"Content-Type":"text/plain; version=0.0.4; charset=utf-8"})}catch(w0){return console.error("Failed to collect metrics:",w0),Q0.text("# Error collecting metrics",500)}});let z=1800000;E.get(`${mY.DBOS_QUEUE_DEPTH_PREFIX}:queueName`,async(Q0)=>{let w0=Q0.req.param("queueName");if(!$c6.has(w0))return Q0.json({error:`Unknown queue: ${w0}`},404);let[e,i]=await Promise.all([xO.listQueuedWorkflows({queueName:w0,status:"ENQUEUED",loadInput:!1,loadOutput:!1}),xO.listQueuedWorkflows({queueName:w0,status:"PENDING",loadInput:!1,loadOutput:!1,dequeuedAfter:new Date(Date.now()-z).toISOString()})]);return Q0.json({queue_length:e.length,in_flight:i.length})}),E.route("/api/config",K68),E.route("/api/_reports",z68),E.route("/api/_stripe",KU1),E.route("/api/_github",T68({taskBoard:()=>n,contextFactory:()=>g})),E.route("/api/_git",$i);let T={db:Z.db,encryptionKey:E0().encryptionKey};E.route("/api/_jira",I68(T)),E.route("/api/_jira",q68(T)),E.route("/report",w68($.clientDir)),E.route("/api/auth/custom",qs$),E.route("/api/auth/desktop",ks$),E.all("/api/auth/admin/*",Qe$),E.all("/api/auth/*",async(Q0)=>{return await C8.handler(Q0.req.raw)});let P=vr$();P.use("/.well-known/oauth-protected-resource/mcp/:connectionId",w80),P.use("/mcp/:connectionId/.well-known/oauth-protected-resource",w80),E.route("/",P),E.get("/.well-known/oauth-protected-resource/api/:org/mcp/:connectionId",$80),E.route("/",gr$()),E.use("/oauth-proxy/:connectionId/*",w80),E.all("/oauth-proxy/:connectionId/*",p58);let A=async(Q0)=>{let e=await Zc6()(Q0.req.raw),i=await e.json();return Response.json(i,e)};E.use("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",w80),E.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",A);let q=async(Q0)=>{let e=await Qc6()(Q0.req.raw),i=await e.json();return Response.json(i,e)};E.get("/.well-known/oauth-authorization-server/*/:gateway?/:connectionId?",q);let x=Qs$({ttlMs:120000}),_=await Ia$({db:Z.db,auth:C8,encryption:{key:E0().encryptionKey},observability:{tracer:dO,meter:z$},modelListCache:W,providerKeyCache:K,memberRoleCache:x});vQ.set(_),Mc1({db:Z.db,baseUrl:x5()}),Va$({db:Z.db}),_a$({db:Z.db}),ua$({db:Z.db}),S68({db:Z.db,encryptionKey:E0().encryptionKey}),pI$({db:Z.db}),pa$({db:Z.db}),DV$({db:Z.db});let V=VQ0(Z.db),y=new Uo(Z.db),g=A58({db:Z.db});JQ1({storage:V,studioContextFactory:g}),nZ1({systemDatabaseUrl:mt0(E0().databaseUrl,E0().databasePgSsl),studioContextFactory:g,deps:{runRegistry:O,cancelBroadcast:H,streamBuffer:F,sseHub:e5}}),uZ1({dispatchRunFn:JC$,studioContextFactory:g,deps:{runRegistry:O,cancelBroadcast:H,streamBuffer:F,sseHub:e5}});let l=new Kh(Z.db),n=new rG(Z.db),p=new DG(Z.db),F0=new zU1(n,g,p);if(E0().taskBoardReviewSweeperEnabled){F0.start();let Q0=LE;LE=async()=>{await Q0?.(),F0.dispose()}}MC$({getJetStream:()=>U?.getJetStream()??null,getJetStreamManager:async()=>{let Q0=U?.getConnection();return Q0?await n58.jetstreamManager(Q0):null},messageParts:l.messageParts(),resolveRun:async(Q0)=>{let w0=await Z.db.selectFrom("threads").select(["organization_id","created_by","message_storage_version","status","run_fence_token","title"]).where("id","=",Q0).executeTakeFirst();return w0?{orgId:w0.organization_id,createdBy:w0.created_by,version:w0.message_storage_version??1,status:w0.status,runFenceToken:w0.run_fence_token,title:w0.title??null}:null},completeRunIfNotCompleted:async(Q0,w0)=>{let e=await l.completeRunIfNotCompleted(Q0,w0);if(sk0(e5,w0,Q0,e),e)await Tm(n,Q0,w0,p);return e},markRunRequiresAction:async(Q0,w0)=>{let e=await l.requiresActionIfInProgress(Q0,w0);return sk0(e5,w0,Q0,e),e},markRunFailed:async(Q0,w0,e,i)=>{let m0=await l.markRunFailed(Q0,w0,e,i);if(sk0(e5,w0,Q0,m0),m0)await Tm(n,Q0,w0,p);return m0},clearSynthesizedError:async(Q0,w0)=>{await l.messageParts().replaceMessageParts(Q0,_j(Q0,w0),[])},persistTitle:(Q0,w0,e)=>l.update(Q0,w0,{title:e}),onTitleUpdated:async({runId:Q0,orgId:w0,title:e})=>{let i=await l.get(Q0,w0).catch(()=>null);e5.emit(w0,nH(Q0,i?.status??"in_progress",{title:e,virtualMcpId:i?.virtual_mcp_id??void 0,createdBy:i?.created_by,triggerId:i?.trigger_id,branch:i?.branch??null,harnessId:i?.harness_id??void 0,createdAt:i?.created_at,updatedAt:i?.updated_at}))},bumpProgress:async({runId:Q0,orgId:w0})=>{await l.bumpProgress(Q0,w0)},recordCompleted:async({runId:Q0,orgId:w0,distinctId:e,usage:i})=>{f1.capture({distinctId:e,event:"chat_message_completed",groups:{organization:w0},properties:{organization_id:w0,thread_id:Q0,transport:"projector",input_tokens:i.inputTokens,output_tokens:i.outputTokens,total_tokens:i.totalTokens}})},recordFailed:async({runId:Q0,orgId:w0,distinctId:e,reason:i,kind:m0})=>{f1.capture({distinctId:e,event:"chat_message_failed",groups:{organization:w0},properties:{organization_id:w0,thread_id:Q0,transport:"projector",error_category:m0,error_message:i}})},purgeRun:async(Q0)=>{F.purge(Q0)}}),CS$({studioContextFactory:g,systemDatabaseUrl:mt0(E0().databaseUrl,E0().databasePgSsl),streamBuffer:F}),z58(),Ic1(),Sa$(),ba$(),ca$(),v68(),aI$(),ta$(),LV$();let V0=async(Q0,w0,e)=>{let i=await V.findById(Q0,w0);if(!i)throw Error("Automation not found");return KQ1({automationId:i.id,organizationId:i.organization_id,triggerId:null})},G0=new sd(V,({automation:Q0,trigger:w0,contextMessages:e,idempotencyKey:i})=>y10({automationId:Q0.id,organizationId:Q0.organization_id,triggerId:w0.id,contextMessages:e},{idempotencyKey:i})),H0=[uW(),Ay(),sU()];for(let Q0 of H0)ZS0(Q0).then(()=>{}).catch((w0)=>console.error("[monitoring] Retention cleanup failed:",w0));let X0=()=>C8.api.deleteAllExpiredApiKeys().catch((Q0)=>console.error("[auth] Expired API key cleanup failed:",Q0));X0(),setInterval(X0,86400000).unref(),E.use("*",async(Q0,w0)=>{if(PS0(Q0.req.path))return w0();let e={measure:async(m0,I0)=>{qW(Q0,m0);try{return await I0()}finally{Y3(Q0,m0)}}},i=await vQ.create(Q0.req.raw,{timings:e});i.automationRunner=V0,Q0.set("studioContext",i);try{await w0()}finally{let m0=i.pendingRevalidations;if(m0.length>0)Promise.race([Promise.allSettled(m0),i$(30000)]).catch((t0)=>console.error("[studio] revalidation cleanup error:",t0))}}),E.use("/api/:org/decopilot/*",td),E.use("/api/:org/v1/*",td),E.use("/api/:org/files/*",td),E.use("*",async(Q0,w0)=>{if(t58(Q0.req.path))return w0();let e=Q0.get("studioContext");if(!e?.organization?.id||!e?.auth?.user?.id)return w0();if(!(await e.storage.orgSsoConfig.getByOrgId(e.organization.id))?.enforced)return w0();if(!await e.storage.orgSsoSessions.isValid(e.auth.user.id,e.organization.id))return Q0.json({error:"SSO authentication required for this organization"},403);return w0()});let Z0=new Q1;Z0.use("*",RH({mountPath:"/api/org-sso"})),Z0.route("/",CV0()),E.route("/api/org-sso",Z0),E.get("/api/tools/management",(Q0)=>{return Q0.json({tools:Ri0,grouped:KP()})}),E.use("/mcp/*",async(Q0,w0)=>{qW(Q0,"mcp");try{return await w0()}finally{Y3(Q0,"mcp")}});let Y0=async(Q0,w0)=>{let e=Q0.var.studioContext;if(!e.auth.user?.id&&!e.auth.apiKey?.id){let i=new URL(Q0.req.url),m0=Q0.req.header("x-forwarded-proto")?.split(",")[0]?.trim(),I0=m0?`${m0}://${i.host}`:i.origin;return Q0.res=new Response(null,{status:401,headers:{"WWW-Authenticate":`Bearer realm="mcp",resource_metadata="${I0}${i.pathname}/.well-known/oauth-protected-resource"`}})}return await w0()};if(E.use("/mcp/:connectionId?",Y0),E.use("/mcp/gateway/:virtualMcpId?",Y0),E.use("/mcp/virtual-mcp/:virtualMcpId?",Y0),E.use("/mcp/self",Y0),XW()){let{mountDevRoutes:Q0}=(m58(),HS0(c58));Q0(E,Y0)}let o=new Q1;o.use("*",RH({mountPath:"/mcp"})),o.route("/",kR0()),E.route("/mcp",o);let J0=new Q1;J0.use("*",RH({mountPath:"/mcp/self"})),J0.route("/",zk0()),E.route("/mcp/self",J0);let c0=new Q1;c0.use("*",RH({mountPath:"/mcp"})),c0.route("/",_R0()),E.route("/mcp",c0),E.use("/api/:org/models/*",async(Q0,w0)=>{qW(Q0,"llm_models");try{return await w0()}finally{Y3(Q0,"llm_models")}});let k0=je$({cancelBroadcast:H,streamBuffer:F,runRegistry:O});E.route("/api",k0),E.route("/api",y68);let j1=new Q1;j1.use("*",RH({mountPath:"/api"})),j1.route("/",Rk0()),E.route("/api",j1),E.route("/api",Z68);let d0=new Q1;d0.use("*",RH({mountPath:"/api"})),d0.route("/",qk0({tokenStorage:y,automationEventDispatcher:G0})),E.route("/api",d0);let L0=new Bo(Z.db),j0=new Q1;j0.use("*",RH({mountPath:"/api"})),j0.route("/",fV0()),E.route("/api",j0),E.route("/api/deco-sites",_e$()),E.route("/api/deco-apps",o48());let s0=new Q1;s0.use("*",RH({mountPath:"/api/deco-sites"})),s0.route("/",gV0()),E.route("/api/deco-sites",s0),E.route(VV0,Ye$()),E.route(F88,B88()),E.route("/api/_editor-resolve",Y68()),E.route(Cs$,_s$()),E.route(TV0,cs$());let P1=n48({kvStorage:L0,runRegistry:O,streamBuffer:F,sseHub:e5,cancelBroadcast:H,tokenStorage:y,automationEventDispatcher:G0,mountDevAssets:XW(),mcpAuth:Y0,oauthProxyHandler:p58,watchHandler:s58,betterAuthProtectedResourceHandler:A,getNatsConnection:()=>U?.getConnection()??null});return E.route("/api/:org",P1),E.notFound((Q0)=>{return Q0.json({error:"Not Found",path:Q0.req.path},404)}),E.onError(Pe$),Object.assign(E,{markShuttingDown:()=>{Q=!0},shutdown:async()=>{if(console.log("[shutdown] Stopping workers..."),await Promise.allSettled([e5.stop(),LE?Promise.resolve(LE()).finally(()=>{LE=null}):Promise.resolve()]),U)await U.drain().catch((Q0)=>console.error("[shutdown] NATS drain error:",Q0));console.log("[shutdown] Flushing telemetry..."),await fX().catch((Q0)=>console.error("[shutdown] Telemetry flush error:",Q0)),console.log("[shutdown] Closing database..."),await P4$(Z).catch((Q0)=>console.error("[shutdown] Database close error:",Q0)),console.log("[shutdown] Cleanup complete.")},initDbos:async()=>{await xO.registerQueue(B3,{partitionQueue:!0,concurrency:QQ1,minPollingIntervalMs:YQ1}),await xO.registerQueue(N3,{partitionQueue:!0,concurrency:iZ1,priorityEnabled:!0}),await xO.registerQueue(rU,{workerConcurrency:E0().decopilotMaxConcurrentHostedRuns,priorityEnabled:!0}),await xO.registerQueue(aU,{workerConcurrency:E0().sandboxMaxConcurrentHostedRuns,priorityEnabled:!0}),await xO.registerQueue(cO,{partitionQueue:!0,concurrency:SS$}),await xO.registerQueue(PE,OV$),await oK1(V),await Promise.allSettled(["automations-gate","automations-global","jira-push"].map((Q0)=>xO.deleteQueue(Q0))),await XQ1(Z.pool),c9$().catch((Q0)=>{console.error("[studio-pack-backfill] failed:",Q0)}),Vc1().catch((Q0)=>{console.error("[org-fs] public-sets boot sync kick failed:",Q0)})}})}var n58,d58=5000,LE=null,p58=async($)=>{let Z=$.req.param("connectionId");if(!Z)return $.json({error:"Missing connectionId"},400);let Q=$.req.path.split("/").filter(Boolean),Y=Q[Q.length-1],X=$.get("studioContext");if(!X)X=await vQ.create($.req.raw),$.set("studioContext",X);let J=$.req.param("org")?X.organization?.id:void 0,G=await X.storage.connections.findById(Z,J);if(!G?.connection_url)return $.json({error:"Connection not found"},404);if(Y==="register"&&G.oauth_config?.clientId){let y=await $.req.json().catch(()=>({}));return $.json({...typeof y==="object"&&y!==null?y:{},client_id:G.oauth_config.clientId,...G.oauth_config.clientSecret?{client_secret:G.oauth_config.clientSecret}:{},client_secret_expires_at:0})}let W=await cd(G.connection_url),K,H=new URL(G.connection_url),U=(typeof G.metadata?.oauthResource==="string"&&G.metadata.oauthResource.length>0?G.metadata.oauthResource:void 0)??G.connection_url;if(W.ok)K=(await W.json()).authorization_servers?.[0];if(!K)K=H.origin;let N=await Z80(K);if(!N.ok)return $.json({error:"Failed to get auth server metadata"},502);let B=await N.json(),O;if(Y==="authorize")O=B.authorization_endpoint;else if(Y==="token")O=B.token_endpoint;else if(Y==="register")O=B.registration_endpoint;if(!O)return $.json({error:`Unknown OAuth endpoint: ${Y}`},404);let L=yr$(O);if(L)return L;let w=new URL(O),j=new URL($.req.url);if(w.search=j.search,Y==="authorize"){let y=w.searchParams.get("redirect_uri");if(y){let g=E0().baseUrl??j.origin;try{if(!a58(new URL(y),g))return $.json({error:"invalid_request",error_description:"redirect_uri is not allowed"},400)}catch{return $.json({error:"invalid_request",error_description:"redirect_uri is malformed"},400)}w.searchParams.set("redirect_uri",y)}if(w.searchParams.has("resource"))w.searchParams.set("resource",U);if(ra$(G.connection_url))w.searchParams.set("auto_personal","true"),w.searchParams.set("force_new","true");return $.redirect(w.toString(),302)}let E={Accept:$.req.header("Accept")||"application/json"},z=$.req.header("Content-Type");if(z)E["Content-Type"]=z;let T=$.req.header("Authorization");if(T)E.Authorization=T;let P,A=null,q=null;if($.req.method!=="GET"&&$.req.method!=="HEAD")if(Y==="token"&&z?.includes("application/x-www-form-urlencoded")){if(T?.toLowerCase().startsWith("basic "))try{let p=atob(T.slice(6).trim()),F0=p.indexOf(":");if(F0!==-1){let V0=decodeURIComponent(p.slice(0,F0)),G0=decodeURIComponent(p.slice(F0+1));A=V0||null,q=G0||null}}catch{}let y=await $.req.formData();if(y.has("resource"))y.set("resource",U);let g=y.get("client_id"),l=y.get("client_secret");if(typeof g==="string"&&g)A=g;if(typeof l==="string"&&l)q=l;let n=new URLSearchParams;for(let[p,F0]of y.entries())n.append(p,F0.toString());P=n.toString()}else if(Y==="register"&&z?.toLowerCase().includes("application/json")){let y=await X.db.selectFrom("organization").select(["id","slug","name"]).where("id","=",G.organization_id).executeTakeFirst(),g=await $.req.text(),l={};try{l=g?JSON.parse(g):{}}catch{P=g}let n=typeof l==="object"&&l!==null&&!Array.isArray(l);if(P===void 0&&!n)P=g;if(P===void 0){let p=l,F0=p.metadata&&typeof p.metadata==="object"?p.metadata:{};p.metadata={...F0,organization_id:G.organization_id,...y?.slug?{organization_slug:y.slug}:{},...y?.name?{organization_name:y.name}:{}},P=JSON.stringify(p),E["Content-Type"]="application/json"}}else P=$.req.raw.body??void 0;let x=await fetch(w.toString(),{method:$.req.method,headers:E,body:P,duplex:"half",redirect:"manual"}),_=new Headers,V=["connection","keep-alive","transfer-encoding","content-encoding","content-length"];for(let[y,g]of x.headers.entries())if(!V.includes(y.toLowerCase()))_.set(y,g);if(Y==="token"&&x.ok){let y=await x.text();try{let g=JSON.parse(y);if(typeof g.access_token==="string"&&g.access_token){let l=typeof g.expires_in==="number"?new Date(Date.now()+g.expires_in*1000):null,n=null;try{n=await md(G.connection_url)??O}catch{n=O}let p={connectionId:Z,accessToken:g.access_token,refreshToken:typeof g.refresh_token==="string"?g.refresh_token:null,scope:typeof g.scope==="string"?g.scope:null,expiresAt:l,clientId:A,clientSecret:q,tokenEndpoint:n};await new F9(X.db,X.vault).upsert(p)}}catch(g){console.error("[oauth-proxy] failed to persist downstream token:",g)}return new Response(y,{status:x.status,statusText:x.statusText,headers:_})}return new Response(x.body,{status:x.status,statusText:x.statusText,headers:_})},s58=async($)=>{let Z=$.var.studioContext,Q=Z.auth.user?.id??Z.auth.apiKey?.userId;if(!Q)return $.json({error:"Unauthorized"},401);let Y=Z.organization?.id;if(!Y)return $.json({error:"organization id missing"},400);let X=$.req.query("types"),J=X?X.split(",").map((H)=>H.trim()).filter(Boolean):null,G=$.req.query("scope")==="all";if(G&&(!OU(Y)||!await DU(Z)))return $.json({error:"forbidden"},403);let W=G?t20:Y;if(G)YO({action:"watch_all_orgs",actorUserId:Q,actorOrgId:Y,targetOrgId:"all"});let K=crypto.randomUUID();return CO($,async(H)=>{if(await H.writeSSE({event:"connected",data:JSON.stringify({listenerId:K,organizationId:Y,typePatterns:J,connectedAt:new Date().toISOString()})}),!e5.add({id:K,organizationId:W,typePatterns:J?.length?J:null,push:(N,B)=>{H.writeSSE({id:N.id,event:N.type,data:JSON.stringify(G?{...N,organizationId:B}:N)}).catch(()=>{e5.remove(W,K)})}})){await H.writeSSE({event:"error",data:JSON.stringify({error:"Too many connections",message:"SSE connection limit reached. Try again later."})});return}let U=setInterval(()=>{H.writeSSE({event:"keepalive",data:""}).catch(()=>{clearInterval(U),e5.remove(W,K)})},30000);await new Promise((N)=>{H.onAbort(()=>{clearInterval(U),e5.remove(W,K),N()})})})},al6,$c6,Zc6=()=>el6(C8),Qc6=()=>sl6(C8);var $98=D(()=>{D8();F$();kc1();Ca$();xa$();ma$();m10();W91();oa$();Z10();E9();sl();e8();G8();jV0();Zs$();FQ1();gG();iF();zK1();c3();C6();U6();IK1();Ss$();vs$();ms$();vK1();Xe$();lK1();Ee$();nK1();iK();QV0();tK1();Ae$();zV0();t48();sK1();r48();SR0();h10();Q68();vR0();IF1();X68();qF1();H68();j68();P68();A68();R68();M68();V68();b68();YH1();g68();MF1();AF1();j40();Z58();DJ();CA0();I91();fs();gs();DQ1();Q58();X58();iK1();U58();gZ1();N58();on();Do();QO();V9();lW1();w58();P58();NJ0();PU1();O3();rK1();ZO();xZ1();NJ0();nT0();Ni0();Bi0();T58();Hu();I58();Li();zK1();Lm();Cm();gT0();n58=C(JN(),1);al6=new ol6,$c6=new Set([B3,N3,rU,aU,cO,PE])});var X98={};M6(X98,{resolveClientDir:()=>Fc6,resolveAssetPathWithTraversalCheck:()=>Y98,isPathWithinDirectory:()=>Q98,createAssetHandler:()=>Uc6});import{resolve as Y40,dirname as Xc6,join as Jc6,extname as Gc6,basename as Wc6,sep as Z98}from"path";function Kc6($,Z){if($===Z||Wc6($)==="index.html")return{"Cache-Control":"no-cache"};if($.includes(`${Z98}assets${Z98}`))return{"Cache-Control":"public, max-age=31536000, immutable"};return{}}function Q98($,Z){let Q=Y40(Z),Y=Y40($);return Y===Q||Y.startsWith(Q+"/")}function Y98({requestPath:$,clientDir:Z}){let Q=$.startsWith("/")?$.slice(1):$,Y=Y40(Z,Q);if(!Q98(Y,Z))return null;return Y}function Fc6($,Z="../client"){let Q=new URL($),Y=Xc6(Q.pathname);return Y40(Y,Z)}function Uc6($={}){let{env:Z="production",clientDir:Q=Hc6,isServerPath:Y=()=>!1}=$;if(Z==="development")return async function(J){return null};return async function(J){if(J.method!=="GET")return null;let G=new URL(J.url),W;try{W=decodeURIComponent(G.pathname)}catch{return null}if(Y(W))return null;let K=Y98({requestPath:W,clientDir:Q});if(!K)return null;let H=Jc6(K,"index.html"),F=Y40(Q,"index.html"),U=J.headers.get("accept"),B=U?.includes("text/html")||U?.includes("*/*")&&["",".html"].includes(Gc6(K))?[H,F]:[];for(let O of[K,...B])try{let L=Bun.file(O);if(await L.exists())return new Response(L,{headers:Kc6(O,F)})}catch{}if(W.includes("/assets/"))return new Response("Not Found",{status:404,headers:{"Cache-Control":"no-store"}});return null}}var Hc6="./dist/client";var J98=()=>{};var G98={};M6(G98,{tryUpgradePreviewWs:()=>jc6,tryHandlePreviewHttp:()=>wc6,previewWebSocketHandler:()=>Ec6,parsePreviewBaseDomain:()=>Lc6,isPreviewWsData:()=>QS0,extractHandleFromHost:()=>SU1});function Oc6($){if($.method!=="GET")return!1;return($.headers.get("accept")??"").includes("text/html")}function Dc6(){return new Response(Bc6,{status:503,headers:{"content-type":"text/html; charset=utf-8","cache-control":"no-store","retry-after":"1","access-control-allow-origin":"*"}})}function Lc6($){if(!$||$.trim()==="")return null;let Z=$.includes("{handle}")?$.replace("{handle}","__handle__"):$,Q;try{Q=new URL(Z)}catch{return null}let Y=Q.hostname;if($.includes("{handle}")){let X=Y.indexOf(".");if(X<=0||X===Y.length-1)return null;return Y.slice(X+1)}return Y}function SU1($,Z){if(!$||!Z)return null;let Q=$.indexOf(":"),Y=(Q>=0?$.slice(0,Q):$).toLowerCase(),J=`.${Z.toLowerCase().replace(/^\.+|\.+$/g,"")}`;if(!Y.endsWith(J))return null;let G=Y.slice(0,Y.length-J.length);if(!G||G.includes("."))return null;return G}async function wc6($,Z){let Q=SU1($.headers.get("host"),Z.baseDomain);if(!Q)return null;let Y=await Z.getRunner();if(!Y)return J40(503,"preview proxy not configured");let X=await Y.proxyPreviewRequest(Q,$);if(X.headers.get(Ax)&&Oc6($))return Dc6();return X.headers.delete(Ax),X}function J40($,Z){return new Response(JSON.stringify({error:Z}),{status:$,headers:{"content-type":"application/json","access-control-allow-origin":"*"}})}function QS0($){return typeof $==="object"&&$!==null&&$.kind==="preview"}async function jc6($,Z,Q){if(($.headers.get("upgrade")??"").toLowerCase()!=="websocket")return null;let Y=SU1($.headers.get("host"),Q.baseDomain);if(!Y)return null;let X=await Q.getRunner();if(!X)return J40(503,"preview proxy not configured");let J=await X.resolvePreviewUpstreamUrl(Y);if(!J)return J40(404,"sandbox not found");let G=new URL($.url);if(G.pathname.startsWith("/_sandbox"))return J40(404,"not found");let W=`${J.replace(/^http/,"ws")}${G.pathname}${G.search}`,K=$.headers.get("sec-websocket-protocol"),H=K?K.split(",").map((N)=>N.trim()).filter(Boolean):[],F={kind:"preview",upstreamUrl:W,upstreamProtocols:H,pending:[],upstream:null,closed:!1};if(!Z.upgrade($,{data:F}))return J40(426,"upgrade failed");return}function X40($,Z,Q,Y){if(Z.closed)return;Z.closed=!0;try{$.close(Q,Y)}catch{}try{Z.upstream?.close()}catch{}}var Nc6=256,Bc6='<!DOCTYPE html><html><head><meta charset="utf-8"><title>Connecting\u2026</title><style>body{font-family:system-ui,sans-serif;display:flex;align-items:center;justify-content:center;min-height:100vh;margin:0;background:#fafafa;color:#555}div{text-align:center;max-width:420px;padding:24px}h3{margin:0 0 8px}p{margin:0;font-size:14px;color:#999;line-height:1.5}</style></head><body><div><h3>Connecting to sandbox\u2026</h3><p>Waiting for the sandbox to come online. This page refreshes automatically.</p></div><script>setTimeout(function(){window.location.reload()},1500)</script></body></html>',Ec6;var W98=D(()=>{O41();Ec6={open($){let Z=$.data;if(!QS0(Z))return;let Q;try{Q=Z.upstreamProtocols.length>0?new WebSocket(Z.upstreamUrl,Z.upstreamProtocols):new WebSocket(Z.upstreamUrl)}catch(Y){console.warn(`[preview-ws] failed to dial upstream ${Z.upstreamUrl}: ${Y instanceof Error?Y.message:String(Y)}`),X40($,Z,1011,"upstream connect failed");return}Q.binaryType="arraybuffer",Z.upstream=Q,Q.addEventListener("open",()=>{while(Z.pending.length>0){let Y=Z.pending.shift();if(Y!==void 0)Q.send(Y)}}),Q.addEventListener("message",(Y)=>{if(Z.closed)return;$.send(Y.data)}),Q.addEventListener("close",(Y)=>{X40($,Z,Y.code||1000,Y.reason||"")}),Q.addEventListener("error",()=>{X40($,Z,1011,"upstream error")})},message($,Z){let Q=$.data;if(!QS0(Q))return;let Y=Q.upstream;if(Y&&Y.readyState===WebSocket.OPEN){Y.send(Z);return}if(Q.pending.length>=Nc6){X40($,Q,1011,"preview ws backlog overflow");return}Q.pending.push(Z)},close($){let Z=$.data;if(!QS0(Z))return;X40($,Z,1000,"")}}});var U98={};M6(U98,{printBanner:()=>Pc6,bannerLines:()=>F98,BANNER_LINES:()=>K98,BANNER_GRADIENT:()=>H98});function zc6($){let Z=Number.parseInt($.slice(1),16);return[Z>>16&255,Z>>8&255,Z&255]}function F98($){let Z=K98.map((Q,Y)=>{let[X,J,G]=zc6(H98[Y]);return`\x1B[38;2;${X};${J};${G}m${Q}\x1B[39m`});if($!==void 0)Z.push(`\x1B[2m v${$}\x1B[22m`);return Z}function Pc6($){console.log("");for(let Z of F98($))console.log(Z);console.log("")}var K98,H98;var N98=D(()=>{K98=[" \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588 ","\u2591\u2591\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588 \u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588\u2588\u2588 "," \u2591\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2588 \u2591 \u2588\u2588\u2588 \u2591\u2591\u2591 \u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2591\u2591\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591 \u2588\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588 "," \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2591\u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2591 ","\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591 "],H98=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"]});D8();var mU1="13";function dU1($){return{name:"decocms",systemDatabaseUrl:$.systemDatabaseUrl,systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:$.poolSize,runAdminServer:!1,executorID:$.executorID,applicationVersion:mU1,...$.listenQueues!==void 0?{listenQueues:$.listenQueues}:{}}}D8();import S98 from"pg";var iU1=8314027461559302n,C98=600000,_98=500;async function pU1($,Z){let{databaseUrl:Q,lockTimeoutMs:Y=C98}=$,X=$.log??((K)=>console.log(K)),J=new S98.Client({connectionString:Q});await J.connect();let G=Date.now(),W=!1;try{while(!W){if(W=(await J.query("SELECT pg_try_advisory_lock($1) AS locked",[iU1.toString()])).rows[0]?.locked===!0,W)break;if(Date.now()-G>=Y)throw Error(`Timed out after ${Y}ms waiting for the DBOS migration lock. Another process is still migrating the dbos schema; this pod will restart and retry.`);await i$(_98)}let K=Date.now()-G;if(K>1000)X(`[dbos] waited ${K}ms for the migration lock; another process migrated first`);return await Z()}finally{if(W)try{await J.query("SELECT pg_advisory_unlock($1)",[iU1.toString()])}catch{}await J.end().catch(()=>{})}}F$();BS0();C6();function SZ8(){let $=(process.env.BUN_OPTIONS??"").split(/\s+/).filter(Boolean);return[...process.argv.slice(1),...$]}function SS0($,Z){for(let Q=0;Q<$.length;Q++){let Y=$[Q];if(Y===void 0)continue;if(Y===Z)return $[Q+1];if(Y.startsWith(`${Z}=`))return Y.slice(Z.length+1)}return}function kN1(){let $=SZ8();if($.includes("--cpu-prof")){console.log(JSON.stringify({msg:"cpu-profiling-active",dir:SS0($,"--cpu-prof-dir")??process.cwd(),name:SS0($,"--cpu-prof-name"),markdown:$.includes("--cpu-prof-md"),intervalUs:Number(SS0($,"--cpu-prof-interval")??1000),note:"profile is written on process exit"}));return}if(process.env.CPU_PROFILE)console.warn(JSON.stringify({msg:"cpu-profiling-requested-but-inactive",hint:'CPU profiling is a Bun launch flag. Set BUN_OPTIONS="--cpu-prof --cpu-prof-md --cpu-prof-dir=/tmp" before starting the process.'}))}vS0();var P40;function gN1(){if(process.env.HEAP_WATCH!=="1")return()=>{};let $=Number(process.env.HEAP_WATCH_INTERVAL_MS??60000),Z=async()=>{let Q=RE();if(!Q)return;let Y={};try{let{heapStats:X}=await import("bun:jsc"),J=X(),G=Object.entries(J.objectTypeCounts).sort((W,K)=>K[1]-W[1]).slice(0,20);Y={objectCount:J.objectCount,heapSize:J.heapSize,top:Object.fromEntries(G)}}catch{}console.log(JSON.stringify({msg:"heap-watch",ts:new Date().toISOString(),uptimeS:Math.round(process.uptime()),rss:Q.rss,heapUsed:Q.heapUsed,heapTotal:Q.heapTotal,external:Q.external,arrayBuffers:Q.arrayBuffers,...Y}))};return Z().catch(()=>{}),P40=setInterval(()=>void Z().catch(()=>{}),$),P40.unref?.(),process.on("SIGUSR2",()=>{try{let Q=Bun.generateHeapSnapshot("v8"),Y=typeof Q==="string"?Q:JSON.stringify(Q),X=`/tmp/heap-${process.pid}-${Date.now()}.heapsnapshot`;Bun.write(X,Y),console.log(JSON.stringify({msg:"heap-snapshot-written",path:X}))}catch(Q){console.error("[heap-watch] snapshot failed:",Q)}}),()=>{if(P40)clearInterval(P40)}}import*as vZ8 from"bun:jsc";var{startSamplingProfiler:bZ8,samplingProfilerStackTraces:xZ8}=vZ8;function hN1(){if(process.env.STALL_WATCHDOG!=="1")return()=>{};let $=Number(process.env.STALL_WATCHDOG_MS??100),Z=Number(process.env.STALL_WATCHDOG_TICK_MS??50);try{bZ8()}catch(J){return console.error("[stall-watchdog] failed to start sampling profiler:",J),()=>{}}let Q,Y=performance.now()+Z,X=()=>{let J=performance.now(),G=J-Y;Y=J+Z;let W=[];try{W=xZ8()?.traces??[]}catch{}if(G>$&&W.length>0){let K=new Map;for(let F of W){let U=F.frames.find((O)=>O.sourceURL&&!/Unknown Executable/.test(O.category??""))??F.frames[0];if(!U)continue;let N=(U.sourceURL??"?").replace(/^.*\/node_modules\//,"node_modules/"),B=`${U.name??"?"} @ ${N}:${U.line??"?"}`;K.set(B,(K.get(B)??0)+1)}let H=[...K.entries()].sort((F,U)=>U[1]-F[1]).slice(0,8).map(([F,U])=>({frame:F,count:U}));console.warn(JSON.stringify({msg:"stall-stack",ts:new Date().toISOString(),lagMs:Math.round(G),samplesInWindow:W.length,top:H}))}Q=setTimeout(X,Z),Q.unref?.()};return Q=setTimeout(X,Z),Q.unref?.(),()=>{if(Q)clearTimeout(Q)}}function uN1(){kN1();let $=[gN1(),yN1(),hN1()];return()=>{for(let Z of $)Z()}}import{existsSync as kc6}from"fs";var pJ=E0();MN1();var{DBOS:G40,DBOSClient:Ac6}=await import("@dbos-inc/dbos-sdk");function fU1($,Z){if(!Z)return $;let Q=new URL($);if(!Q.searchParams.has("sslmode"))Q.searchParams.set("sslmode","verify-full");return Q.toString()}var Tc6=[B3,N3,rU,aU,cO,PE],Rc6=pJ.dispatchRole==="worker"?Tc6:pJ.dispatchRole==="api"?[]:void 0;G40.setConfig(dU1({systemDatabaseUrl:fU1(pJ.databaseUrl,pJ.databasePgSsl),poolSize:pJ.dbosPoolSize,executorID:pJ.podName,listenQueues:Rc6}));var{createApp:qc6}=await Promise.resolve().then(() => ($98(),e58)),{isServerPath:Mc6}=await Promise.resolve().then(() => (j40(),HN1)),{createAssetHandler:Ic6,resolveClientDir:w98}=await Promise.resolve().then(() => (J98(),X98)),Vc6=pJ.port,B98=w98(import.meta.url,"../client"),j98=kc6(B98)?B98:w98(import.meta.url,"../dist/client"),Sc6=Ic6({clientDir:j98,isServerPath:Mc6}),Cc6={"X-Frame-Options":"DENY","Content-Security-Policy":"frame-ancestors 'none'"};function _c6($){let Z=new Headers($.headers);for(let[Q,Y]of Object.entries(Cc6))Z.set(Q,Y);return new Response($.body,{status:$.status,statusText:$.statusText,headers:Z})}var{parsePreviewBaseDomain:vc6,tryHandlePreviewHttp:bc6,tryUpgradePreviewWs:xc6,previewWebSocketHandler:CU1,isPreviewWsData:_U1}=await Promise.resolve().then(() => (W98(),G98)),{getOrInitSharedRunner:E98}=await Promise.resolve().then(() => (QH(),qE$)),z98=vc6(process.env.STUDIO_SANDBOX_PREVIEW_URL_PATTERN),O98={baseDomain:z98??"",getRunner:E98};if(process.env.STUDIO_SANDBOX_TENANT_POOLS?.trim())E98().catch(($)=>{console.warn("[lifecycle] eager sandbox provider init for tenant pools failed:",$ instanceof Error?$.message:String($))});var YS0=await qc6({clientDir:j98}),vU1=process.env.DBOS_CONDUCTOR_KEY?.trim(),D98=process.env.DBOS_CONDUCTOR_URL?.trim();await pU1({databaseUrl:fU1(pJ.databaseUrl,pJ.databasePgSsl)},()=>G40.launch({...vU1?{conductorKey:vU1}:{},...vU1&&D98?{conductorURL:D98}:{}}));console.log(`[dbos] application version: ${G40.applicationVersion}`);var bU1=5,xU1=0;await g8(async()=>{xU1++;try{return await YS0.initDbos()}catch($){let Z=xU1>=bU1?"giving up":"retrying";throw console.warn(`[dbos] initDbos attempt ${xU1}/${bU1} failed, ${Z}`,$),$}},{maxAttempts:bU1,minTimeout:1000,maxTimeout:1e4,jitter:0.5});if(!pJ.isCli){let{bannerLines:$}=await Promise.resolve().then(() => (N98(),U98));console.log("");for(let Z of $())console.log(Z)}var fc6=Bun.serve({idleTimeout:0,port:Vc6,hostname:"0.0.0.0",fetch:async($,Z)=>{if(z98){let Y=await xc6($,Z,O98);if(Y===void 0)return;if(Y)return Y;let X=await bc6($,O98);if(X)return X}let Q=await Sc6($);if(Q)return _c6(Q);return YS0.fetch($,{server:Z})},websocket:{open($){if(_U1($.data))CU1.open($)},message($,Z){if(_U1($.data))CU1.message($,Z)},close($){if(_U1($.data))CU1.close($)}},development:!1}),yc6=uN1();if(pJ.localMode)Promise.resolve().then(() => (rx(),qT0)).then(async({seedLocalMode:$,markSeedComplete:Z,healLocalJwks:Q})=>{try{let Y=await Q();if(Y>0)console.log(`[local-mode] cleared ${Y} undecryptable JWKS key(s); Better Auth will generate a fresh one`);let X=await $()}catch(Y){console.error("Failed to seed local mode:",Y)}finally{Z()}}).catch(async($)=>{console.error("Failed to load local-mode module:",$);try{let{markSeedComplete:Z}=await Promise.resolve().then(() => (rx(),qT0));Z()}catch{}});var L98=!1;async function gc6($){let Z;try{Z=await Ac6.create({systemDatabaseUrl:fU1(pJ.databaseUrl,pJ.databasePgSsl),systemDatabaseSchemaName:"dbos"});let Q=await Z.listWorkflows({status:"PENDING",queueName:N3,executorId:$,loadInput:!1,loadOutput:!1});if(Q.length===0){console.log(`[shutdown] no in-flight thread-gate gates to hand off (executor ${$})`);return}let Y=Q.map((X)=>X.workflowID);await Z.resumeWorkflows(Y,{queueName:N3}),console.log(`[shutdown] re-enqueued ${Y.length} in-flight thread-gate gate(s) for re-adoption by a live executor (from ${$}):`,Y)}catch(Q){console.error("[shutdown] thread-gate handoff failed:",Q)}finally{await Z?.destroy().catch(()=>{})}}async function XS0($){if(L98)return;L98=!0,console.log(`
3709
3709
  [shutdown] Received ${$}, shutting down gracefully...`);let Z=Number(process.env.SHUTDOWN_GRACE_SECONDS??60)*1000,Q=Math.max(Z-5000,1e4),Y=setTimeout(()=>{console.error(`[shutdown] Timed out after ${Q}ms, forcing exit.`),process.exit(1)},Q);Y.unref?.();let X=0;try{yc6(),YS0.markShuttingDown();let J=tU1(pJ.dispatchRole,Q,process.env.SHUTDOWN_DRAIN_MS);await i$(J),await fc6.stop(!0);let G=G40.executorID;await G40.shutdown(),await gc6(G),await YS0.shutdown()}catch(J){console.error("[shutdown] Error during shutdown:",J),X=1}clearTimeout(Y),process.exit(X)}process.on("SIGTERM",()=>XS0("SIGTERM"));process.on("SIGINT",()=>XS0("SIGINT"));process.on("SIGHUP",()=>XS0("SIGHUP"));process.on("unhandledRejection",($)=>{console.error("[process] Unhandled rejection:",$)});process.on("uncaughtException",($)=>{console.error("[process] Uncaught exception:",$),XS0("uncaughtException")});