decocms 4.408.0 → 4.409.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (356) hide show
  1. package/dist/client/assets/{AlertCircle-B4TBXI97.js → AlertCircle-CUfQnpkL.js} +1 -1
  2. package/dist/client/assets/{AreaChart-BT_BBtMg.js → AreaChart-7MEIU0BG.js} +1 -1
  3. package/dist/client/assets/{ArrowLeft-Du5HwAty.js → ArrowLeft-Bq3Is2w2.js} +1 -1
  4. package/dist/client/assets/{ArrowRight-Bk-h8Spa.js → ArrowRight-C6beJSjX.js} +1 -1
  5. package/dist/client/assets/{ArrowUp-DfYHJg8n.js → ArrowUp-A1GhF0iD.js} +1 -1
  6. package/dist/client/assets/{CartesianChart-B5akGwBy.js → CartesianChart-CdUZwP8q.js} +1 -1
  7. package/dist/client/assets/{Check-e9hufNdV.js → Check-xLQDWZBr.js} +1 -1
  8. package/dist/client/assets/{CheckCircle-Du0Z4Mo4.js → CheckCircle-LQiWK3ly.js} +1 -1
  9. package/dist/client/assets/{ChevronUp-Dijj6L1D.js → ChevronUp-BcuhULcu.js} +1 -1
  10. package/dist/client/assets/{Copy01-Rd2DUITb.js → Copy01-BgPUQX69.js} +1 -1
  11. package/dist/client/assets/{CreditCard01-CuV3PHbW.js → CreditCard01-BDFFS3TM.js} +1 -1
  12. package/dist/client/assets/{DotsVertical-CUOWG-18.js → DotsVertical-Crrqe0Sf.js} +1 -1
  13. package/dist/client/assets/{ErrorBarContext-BCo_1Dyd.js → ErrorBarContext-DVQvj4uR.js} +1 -1
  14. package/dist/client/assets/{Eye-CATcYqq7.js → Eye-DacK_90s.js} +1 -1
  15. package/dist/client/assets/{Globe04-dvDQwL6D.js → Globe04-WlooJMD7.js} +1 -1
  16. package/dist/client/assets/{Image01-CK0bgOXc.js → Image01-DKGtjhhW.js} +1 -1
  17. package/dist/client/assets/{Key01-B2Ks3SjW.js → Key01-D0VXcPV1.js} +1 -1
  18. package/dist/client/assets/{LayoutLeft-o4EwT_f4.js → LayoutLeft-C1LKOuH_.js} +1 -1
  19. package/dist/client/assets/{Line-51pigb_T.js → Line-Cza1FZ1Z.js} +1 -1
  20. package/dist/client/assets/{Link01-t9xcN1_J.js → Link01-Cyt--vTk.js} +1 -1
  21. package/dist/client/assets/{LinkExternal01-E0yllQfW.js → LinkExternal01-BoAIhl8A.js} +1 -1
  22. package/dist/client/assets/{Monitor01-2SrwE2A4.js → Monitor01-C_2Yverr.js} +1 -1
  23. package/dist/client/assets/{Palette-DdJDZNuI.js → Palette-DgXRGI-b.js} +1 -1
  24. package/dist/client/assets/{Plus-BfQMVZRL.js → Plus-BkrhlTLe.js} +1 -1
  25. package/dist/client/assets/{SearchMd-BPxAMeCu.js → SearchMd-CHh1gHMI.js} +1 -1
  26. package/dist/client/assets/{Sector-DomxOOd2.js → Sector-CNEbMEJs.js} +1 -1
  27. package/dist/client/assets/{Share07-CAPMGK5H.js → Share07-mNsUoEV_.js} +1 -1
  28. package/dist/client/assets/{ShoppingBag01-Dj-9rxCI.js → ShoppingBag01-BY7I83X2.js} +1 -1
  29. package/dist/client/assets/{Sun-Dc2rioTm.js → Sun-BAOeeRbd.js} +1 -1
  30. package/dist/client/assets/{Tool01-DAfFPt6l.js → Tool01-CgjdK2MW.js} +1 -1
  31. package/dist/client/assets/{Trash01-BpbNxWxU.js → Trash01-C7Kui6BE.js} +1 -1
  32. package/dist/client/assets/{Upload01-Cu5y084h.js → Upload01-CWSvTA3M.js} +1 -1
  33. package/dist/client/assets/{User01-DZIaW3qt.js → User01-BOZZP-PT.js} +1 -1
  34. package/dist/client/assets/{UserSquare-CMMvch3p.js → UserSquare-CB-Meask.js} +1 -1
  35. package/dist/client/assets/{Users01-B6wD4vfR.js → Users01-Db3s7VUn.js} +1 -1
  36. package/dist/client/assets/{X-7V7RNG20.js → X-BqFXONHn.js} +1 -1
  37. package/dist/client/assets/{XClose-CgE_NvFQ.js → XClose-BrqNA97h.js} +1 -1
  38. package/dist/client/assets/{Zap-BnKV6W7m.js → Zap-CACrXYYE.js} +1 -1
  39. package/dist/client/assets/{ZoomOut-9vKhCWKn.js → ZoomOut-BHitADvX.js} +1 -1
  40. package/dist/client/assets/{access-gate-C2DM5elO.js → access-gate-CRPjc1gg.js} +1 -1
  41. package/dist/client/assets/{add-connection-dialog-CfJFvo0n.js → add-connection-dialog-Dty-YDeE.js} +1 -1
  42. package/dist/client/assets/{agent-analytics-D3NPULfo.js → agent-analytics-DFB-zeHy.js} +1 -1
  43. package/dist/client/assets/agent-app-CuJVJvRD.js +1 -0
  44. package/dist/client/assets/{agent-assets-Csm6M0Fe.js → agent-assets-Dv7NB519.js} +1 -1
  45. package/dist/client/assets/{agent-automation-LvpxhSzD.js → agent-automation-DTOJTMdg.js} +1 -1
  46. package/dist/client/assets/{agent-automations-CCXip6X6.js → agent-automations-xB1XOmCd.js} +1 -1
  47. package/dist/client/assets/{agent-connect-sources-Cx2sX-zQ.js → agent-connect-sources-B0lEtAAR.js} +1 -1
  48. package/dist/client/assets/agent-deck-DKq_t8op.js +1 -0
  49. package/dist/client/assets/{agent-e2e-Dd6W8dQn.js → agent-e2e-Dqs6Gtqo.js} +1 -1
  50. package/dist/client/assets/{agent-experiments-CcAMb-uk.js → agent-experiments-BIT-Gl0x.js} +1 -1
  51. package/dist/client/assets/{agent-file-1tvyjICj.js → agent-file-DHVX-7CP.js} +1 -1
  52. package/dist/client/assets/{agent-git-DAcJMVD4.js → agent-git-yNtxyEmU.js} +1 -1
  53. package/dist/client/assets/{agent-hosting-TSmf3TUW.js → agent-hosting-Cvyl-2cZ.js} +1 -1
  54. package/dist/client/assets/{agent-icon-CP5XN9a-.js → agent-icon-CI9eQ7xC.js} +1 -1
  55. package/dist/client/assets/agent-library-file-htu-DEqQ.js +1 -0
  56. package/dist/client/assets/{agent-monitor-DFJdCDDa.js → agent-monitor-BOCqlZ_a.js} +1 -1
  57. package/dist/client/assets/agent-overview-y3-JUJ8e.js +1 -0
  58. package/dist/client/assets/agent-settings-B5_AuG__.js +1 -0
  59. package/dist/client/assets/{agent-site-editor-DVPUbL6E.js → agent-site-editor-CjWZsw7M.js} +1 -1
  60. package/dist/client/assets/agent-site-editor-code-DRVKGz4k.js +2 -0
  61. package/dist/client/assets/{agent-site-editor-content-D16Neg7_.js → agent-site-editor-content-DwKYVVDu.js} +3 -3
  62. package/dist/client/assets/{agent-site-editor-preview-DsyVdlnU.js → agent-site-editor-preview-Dv21vTA3.js} +3 -3
  63. package/dist/client/assets/agent-view-CbUcdOC8.js +1 -0
  64. package/dist/client/assets/{agent-view-guard-B21vN7fV.js → agent-view-guard-BmqMX-cG.js} +1 -1
  65. package/dist/client/assets/{agents-list-CXO3qqSU.js → agents-list-DUIJv7HT.js} +1 -1
  66. package/dist/client/assets/{ai-providers-CS-7rqRe.js → ai-providers-CqGz_qPE.js} +1 -1
  67. package/dist/client/assets/{alert-DA8xSuNw.js → alert-B-eOHTnf.js} +1 -1
  68. package/dist/client/assets/{alert-dialog-DOZYkVkM.js → alert-dialog-yn_TNVL_.js} +1 -1
  69. package/dist/client/assets/{analytics-sections-D-vmE_mj.js → analytics-sections-D8A_SNX_.js} +1 -1
  70. package/dist/client/assets/{api-keys-Dw0ULTM2.js → api-keys-BtUNzEqr.js} +1 -1
  71. package/dist/client/assets/api-keys-CbiF5AB_.js +1 -0
  72. package/dist/client/assets/app-editor-BtTioX0z.js +1 -0
  73. package/dist/client/assets/{asset-utils-KW2eRq0C.js → asset-utils-CfzwjAU_.js} +1 -1
  74. package/dist/client/assets/{auth-WDJFc9Hm.js → auth-CejvjNNS.js} +1 -1
  75. package/dist/client/assets/{auth-catchall-DFKT24Uv.js → auth-catchall-Dh5jrKY4.js} +1 -1
  76. package/dist/client/assets/{auth-entry-D_MUtVLc.js → auth-entry-DSRNCXJZ.js} +1 -1
  77. package/dist/client/assets/{auth-split-layout-C2beZWug.js → auth-split-layout-D6OEz7uX.js} +1 -1
  78. package/dist/client/assets/{authenticate-and-persist-oauth-BdWTTo89.js → authenticate-and-persist-oauth-BWJIYJrq.js} +1 -1
  79. package/dist/client/assets/{automation-list-row-DF4C0izx.js → automation-list-row-D9cPoioR.js} +1 -1
  80. package/dist/client/assets/{automation-runs-a1jd9j7n.js → automation-runs-CubT-Yu9.js} +1 -1
  81. package/dist/client/assets/{automations-Cn4R0PwJ.js → automations-B_ybs3dv.js} +1 -1
  82. package/dist/client/assets/{autosend-BUpRVcwj.js → autosend-C0EKCCh-.js} +1 -1
  83. package/dist/client/assets/{avatar-JIBRtdC_.js → avatar-cVVoBC-4.js} +1 -1
  84. package/dist/client/assets/{badge-6y8k_9-5.js → badge-BseQxRHa.js} +1 -1
  85. package/dist/client/assets/{block-document-CIJVCQ3G.js → block-document-_OPc0Hut.js} +1 -1
  86. package/dist/client/assets/{blocks-preview-workspace-context-D1BaC02Q.js → blocks-preview-workspace-context-CtRW5LZY.js} +1 -1
  87. package/dist/client/assets/{buckets-C9rH2WAo.js → buckets-zsVmYRJr.js} +1 -1
  88. package/dist/client/assets/{build-improve-prompt-doc-uYATas8q.js → build-improve-prompt-doc-JSLgMkGb.js} +1 -1
  89. package/dist/client/assets/{calendar-C9s_iZ3-.js → calendar-BEiMZO0O.js} +1 -1
  90. package/dist/client/assets/{capability-load-error-BPW-viM7.js → capability-load-error-C-jStnn5.js} +1 -1
  91. package/dist/client/assets/{cards-j_YM4uLm.js → cards-BjQmRWiH.js} +1 -1
  92. package/dist/client/assets/{category-editor-CJshYeZK.js → category-editor-BtE6qR6k.js} +1 -1
  93. package/dist/client/assets/{chart-BXtamRvp.js → chart-B_nJvNcj.js} +1 -1
  94. package/dist/client/assets/{chat-context-B6r2nJ6g.js → chat-context-DRR1USgw.js} +1 -1
  95. package/dist/client/assets/{chat-draft-CerneUSv.js → chat-draft-CoC7naNH.js} +1 -1
  96. package/dist/client/assets/{checkbox-CjlcA4Zf.js → checkbox-DnfD_ijV.js} +1 -1
  97. package/dist/client/assets/{choose-editor-CCjCgFix.js → choose-editor-CV-le1nZ.js} +1 -1
  98. package/dist/client/assets/{claim-phase-copy-Dvvzpbgr.js → claim-phase-copy-Dr4Mzj6c.js} +1 -1
  99. package/dist/client/assets/{cli-auth-success-Cp9ve11h.js → cli-auth-success-fWOQxybD.js} +1 -1
  100. package/dist/client/assets/{client-icons-CZY4712U.js → client-icons-DhPCYmdv.js} +1 -1
  101. package/dist/client/assets/{collapsible-D8RyGf9b.js → collapsible-CwFidR6D.js} +1 -1
  102. package/dist/client/assets/{collection-detail-ivXkBsms.js → collection-detail-B7jIsWUv.js} +1 -1
  103. package/dist/client/assets/{collection-display-button-COB8om2q.js → collection-display-button-D1fzsKIi.js} +1 -1
  104. package/dist/client/assets/{collection-search-Bm4yfKio.js → collection-search-21jPub41.js} +1 -1
  105. package/dist/client/assets/{collection-table-wrapper-DR3ABum3.js → collection-table-wrapper-BaPwX68f.js} +1 -1
  106. package/dist/client/assets/{collection-tabs-CyEDGPVJ.js → collection-tabs-D8JuoGr4.js} +1 -1
  107. package/dist/client/assets/{combobox--akRwZt5.js → combobox-Dk8jQElk.js} +1 -1
  108. package/dist/client/assets/{command-BXe_2Y8J.js → command-6H68jmKH.js} +1 -1
  109. package/dist/client/assets/{companion-mcps-section-bE4HzUrd.js → companion-mcps-section-CBLn4mGY.js} +1 -1
  110. package/dist/client/assets/config-DpbyQo_3.js +1 -0
  111. package/dist/client/assets/{connect-CA2SeR7c.js → connect-DkS9sdly.js} +1 -1
  112. package/dist/client/assets/{connect-layout-D-VHpq78.js → connect-layout-CDnD1K6j.js} +1 -1
  113. package/dist/client/assets/{connection-C1K_L2Xe.js → connection-C83Fa34C.js} +1 -1
  114. package/dist/client/assets/{connection-card-C0UBOriU.js → connection-card-BlyIILyc.js} +1 -1
  115. package/dist/client/assets/{connection-detail-B54gylCL.js → connection-detail-D44x4v7X.js} +1 -1
  116. package/dist/client/assets/{connection-form-helpers-DmenEJQq.js → connection-form-helpers-BiLRaMfL.js} +1 -1
  117. package/dist/client/assets/{connections-qW3uwEes.js → connections-Beu4_6wK.js} +1 -1
  118. package/dist/client/assets/{context-D8xt-q96.js → context-BD-C3u_2.js} +1 -1
  119. package/dist/client/assets/{create-organization-dialog-CfY_Fp3w.js → create-organization-dialog-CuX_f077.js} +1 -1
  120. package/dist/client/assets/{decopilot-C7BBIc4w.js → decopilot-8QQ-iDRK.js} +1 -1
  121. package/dist/client/assets/{dialog-B9AmIVi-.js → dialog-NChNDvdJ.js} +1 -1
  122. package/dist/client/assets/{discover-C2vIznYH.js → discover-3To81zVf.js} +1 -1
  123. package/dist/client/assets/{domain-settings-CadsJlyS.js → domain-settings-CdFtAvl_.js} +1 -1
  124. package/dist/client/assets/{download-app-dialog-BngIghKX.js → download-app-dialog-BFAzFsB1.js} +1 -1
  125. package/dist/client/assets/{drawer-Cmzocoxj.js → drawer-GHZKTfaK.js} +1 -1
  126. package/dist/client/assets/{editor-B64zb0TF.js → editor-BUd_hBZr.js} +1 -1
  127. package/dist/client/assets/{empty-state-CnuzaP1O.js → empty-state-BrikbTNA.js} +1 -1
  128. package/dist/client/assets/{empty-state-Df0p9Roq.js → empty-state-CTc-nAQq.js} +1 -1
  129. package/dist/client/assets/{extract-connection-data-ZkeqSXbM.js → extract-connection-data-Ci8K9pvL.js} +1 -1
  130. package/dist/client/assets/{feature-gate-D1_CJv3S.js → feature-gate-DZ4UUG9X.js} +1 -1
  131. package/dist/client/assets/{feature-paywall-BK6Diems.js → feature-paywall-CBnbb3Ou.js} +1 -1
  132. package/dist/client/assets/{file-explorer-B5hK7sWB.js → file-explorer-Cc6q961a.js} +1 -1
  133. package/dist/client/assets/{file-preview-BAf9QLKP.js → file-preview-DUJBzJN2.js} +1 -1
  134. package/dist/client/assets/{file-share-button-z0zbJCjq.js → file-share-button-BFAtWVxn.js} +1 -1
  135. package/dist/client/assets/{file-type-icon-ddHjZWG7.js → file-type-icon-Bg1S3Ei1.js} +1 -1
  136. package/dist/client/assets/{folder-icon-CGbzITGc.js → folder-icon-CxR8-RVw.js} +1 -1
  137. package/dist/client/assets/{form-CIkzBIkD.js → form--u4B4NJi.js} +1 -1
  138. package/dist/client/assets/{gateway-client-BfoDyNyS.js → gateway-client-DiYJsqR4.js} +1 -1
  139. package/dist/client/assets/{general-0uJSAIg1.js → general-DM9JHjeO.js} +1 -1
  140. package/dist/client/assets/{github-icon-ZHfVS9cH.js → github-icon-BBEFkBwG.js} +1 -1
  141. package/dist/client/assets/home-CuQ1IW3C.js +1 -0
  142. package/dist/client/assets/{hooks-DETt4AT1.js → hooks-CV-vS_-T.js} +1 -1
  143. package/dist/client/assets/{icon-button-B2SkFvD9.js → icon-button-Bec8iaad.js} +1 -1
  144. package/dist/client/assets/{index-nrrh0CII.js → index-7DoPdPOJ.js} +1 -1
  145. package/dist/client/assets/{index-DIXFYX3T.js → index-B4QZ541M.js} +1 -1
  146. package/dist/client/assets/{index-B7X5CqyW.js → index-BXRZsJcB.js} +1 -1
  147. package/dist/client/assets/{index-DRbZIwZq.js → index-CI8Fg5FQ.js} +1 -1
  148. package/dist/client/assets/{index-xb9O7QC9.js → index-CxzLOs9-.js} +1 -1
  149. package/dist/client/assets/{index-BAMGe25h.js → index-D-Zp4RZT.js} +1 -1
  150. package/dist/client/assets/{index-DNZ8aOGc.js → index-DJondoS3.js} +1 -1
  151. package/dist/client/assets/{index-SYS1m8f-.js → index-DQycjyPM.js} +1 -1
  152. package/dist/client/assets/{index-DeHNRxdT.js → index-FYw4S-x6.js} +1 -1
  153. package/dist/client/assets/{index-CKwDISQd.js → index-RlDlO-Xq.js} +1 -1
  154. package/dist/client/assets/{index-izHBwn3I.js → index-ZEOg9N-0.js} +2 -2
  155. package/dist/client/assets/{index-CIQBtrDT.js → index-agB-Lst-.js} +1 -1
  156. package/dist/client/assets/{index-5-VvRKCO.js → index-hafYo6b5.js} +1 -1
  157. package/dist/client/assets/{index-redirect-9bNSLe_3.js → index-redirect-DxBLLJF-.js} +1 -1
  158. package/dist/client/assets/{index-BEGmWtb3.js → index-suG31S3Q.js} +1 -1
  159. package/dist/client/assets/{infiniteQueryObserver-DiUuMuMD.js → infiniteQueryObserver-DncsgS0p.js} +1 -1
  160. package/dist/client/assets/{infra-billing-MS1pmTh3.js → infra-billing-Boedj7dX.js} +1 -1
  161. package/dist/client/assets/{input-C9yULiWh.js → input-BXP2TM7O.js} +1 -1
  162. package/dist/client/assets/{input-BLSONHqE.js → input-CQzeigTe.js} +1 -1
  163. package/dist/client/assets/{input-tXV80IJ3.js → input-DEFAYQBg.js} +1 -1
  164. package/dist/client/assets/{integration-icon-Vvc8ojiC.js → integration-icon-DIbSFWpy.js} +1 -1
  165. package/dist/client/assets/{label-BIuQy2__.js → label-B-Bgczac.js} +1 -1
  166. package/dist/client/assets/{last-preview-page-PW6mp0AD.js → last-preview-page-3Jq4DNX4.js} +1 -1
  167. package/dist/client/assets/{layout-CGB_h5K-.js → layout-E9djM56z.js} +1 -1
  168. package/dist/client/assets/{legacy-agents-deep-CUAA26fQ.js → legacy-agents-deep-CiZ-aKCg.js} +1 -1
  169. package/dist/client/assets/{legacy-main-redirect-BMP2JlQ8.js → legacy-main-redirect-BxtIJnm3.js} +1 -1
  170. package/dist/client/assets/{library-SSPs2Mk7.js → library-C6Kc6Mch.js} +1 -1
  171. package/dist/client/assets/{login-CFVOuIMS.js → login-Dv_GcKSK.js} +1 -1
  172. package/dist/client/assets/{markdown-BNo5hmT4.js → markdown-BG_0k_lo.js} +1 -1
  173. package/dist/client/assets/{mcp-app-renderer-DC6jfKUS.js → mcp-app-renderer-CBi83l0h.js} +1 -1
  174. package/dist/client/assets/{mcp-oauth-B-JicvF4.js → mcp-oauth-BwsUk27t.js} +1 -1
  175. package/dist/client/assets/{members-BPE4uAmB.js → members-C9FaAtX8.js} +1 -1
  176. package/dist/client/assets/{message-templates-Dbunnp9s.js → message-templates-BGMdrehq.js} +1 -1
  177. package/dist/client/assets/{mini-report-page-BV-nrHu-.js → mini-report-page-ZBdIaxzG.js} +1 -1
  178. package/dist/client/assets/{mock-board-BG3v7vPA.js → mock-board-C2sr15lk.js} +4 -4
  179. package/dist/client/assets/{monaco-editor-BhwzWl9K.js → monaco-editor-KtI0fRSt.js} +1 -1
  180. package/dist/client/assets/{monitoring-stats-row-SjTsJ9Vo.js → monitoring-stats-row-xO2QtbyE.js} +1 -1
  181. package/dist/client/assets/{multi-select-DsBbPc3L.js → multi-select-C_DYbezu.js} +1 -1
  182. package/dist/client/assets/{mustache-Dhzc6QWC.js → mustache-CFWS6dkG.js} +1 -1
  183. package/dist/client/assets/{oauth-callback-C9qvlwPd.js → oauth-callback-DAIEkOi-.js} +1 -1
  184. package/dist/client/assets/{oauth-callback-ai-provider-BLsrFMT9.js → oauth-callback-ai-provider-DBnAKXgj.js} +1 -1
  185. package/dist/client/assets/{onboarding-DdgObshe.js → onboarding-B_zFw-j_.js} +1 -1
  186. package/dist/client/assets/{optimistic-project-sidebar-views-BCSGdK6N.js → optimistic-project-sidebar-views-BrJY9Oin.js} +1 -1
  187. package/dist/client/assets/{org-file-open-context-LEXGiXCZ.js → org-file-open-context-BgftWZUq.js} +1 -1
  188. package/dist/client/assets/{organization-choice-DWiDrQVs.js → organization-choice-HYpkZ417.js} +1 -1
  189. package/dist/client/assets/{orgs-CYRhbeGN.js → orgs-D0gMyddZ.js} +1 -1
  190. package/dist/client/assets/{page-seo-form-Cp5_stqo.js → page-seo-form-xBIbLBok.js} +1 -1
  191. package/dist/client/assets/{pair-BJZlwx5z.js → pair-Bt1K-1z8.js} +1 -1
  192. package/dist/client/assets/{plan-ladder-BCVwOSVp.js → plan-ladder-CLwPUekm.js} +1 -1
  193. package/dist/client/assets/{popover-BiGAM8js.js → popover-BVbs0oEO.js} +1 -1
  194. package/dist/client/assets/{post-calendar-DKkZ8xsV.js → post-calendar-9OodvYSU.js} +1 -1
  195. package/dist/client/assets/{post-editor-C-1jCs1B.js → post-editor-Dry2LjOh.js} +1 -1
  196. package/dist/client/assets/{preview-content-CJyGfLqn.js → preview-content-fu_-YQD3.js} +1 -1
  197. package/dist/client/assets/{preview-dialog-D4GsgUKO.js → preview-dialog-v_bCl4Me.js} +1 -1
  198. package/dist/client/assets/{profile-FdAYJLKb.js → profile-Dh7P_rb_.js} +1 -1
  199. package/dist/client/assets/project-app-view-Chy9fLno.js +1 -0
  200. package/dist/client/assets/project-feed-CKanWpxx.js +1 -0
  201. package/dist/client/assets/{project-icon-BfMBNeXz.js → project-icon-BikKPEkD.js} +1 -1
  202. package/dist/client/assets/project-reports-CxKpKsty.js +1 -0
  203. package/dist/client/assets/project-tasks-BFNaEkal.js +1 -0
  204. package/dist/client/assets/{prompts-DDRxwhhq.js → prompts-DgqKLUGg.js} +1 -1
  205. package/dist/client/assets/record-editor-3waSBefg.js +1 -0
  206. package/dist/client/assets/{redirect-editor-Cbk1QsyX.js → redirect-editor-BDSBpBoU.js} +1 -1
  207. package/dist/client/assets/{reports-C7YnJw_5.js → reports-CQKiZQLp.js} +1 -1
  208. package/dist/client/assets/reports-CvVhaDdL.js +1 -0
  209. package/dist/client/assets/{reports-onboarding-DhCB4bD9.js → reports-onboarding-C18-sQgL.js} +1 -1
  210. package/dist/client/assets/reports-tab-BCh3KLP-.js +2 -0
  211. package/dist/client/assets/{repositories-BDnwrsmL.js → repositories-1ToajNyq.js} +1 -1
  212. package/dist/client/assets/{repository-import-picker-DHUG6o-B.js → repository-import-picker-BcNMv-1r.js} +1 -1
  213. package/dist/client/assets/{repository-picker-TE4ZcEAF.js → repository-picker-DiAVlzML.js} +1 -1
  214. package/dist/client/assets/{require-capability-Hi6Rc10j.js → require-capability-Deu3PBBW.js} +1 -1
  215. package/dist/client/assets/{required-auth-layout-qs1Hm0B9.js → required-auth-layout-CmM6wfTC.js} +1 -1
  216. package/dist/client/assets/{reset-password-BHO5OYEQ.js → reset-password-8vGloT63.js} +1 -1
  217. package/dist/client/assets/{resizable-DvI1E7pk.js → resizable-fOHQB200.js} +1 -1
  218. package/dist/client/assets/{resolve-tab-icon-nUEsT-q-.js → resolve-tab-icon-BKaGTIX0.js} +1 -1
  219. package/dist/client/assets/{review-settings-QvrNgLQu.js → review-settings-0OYw8Btd.js} +1 -1
  220. package/dist/client/assets/{rich-text-link-control-DxPxXWmB.js → rich-text-link-control-CnbUM4hy.js} +1 -1
  221. package/dist/client/assets/{roles-Cgr78ewd.js → roles-CaL_nMj5.js} +1 -1
  222. package/dist/client/assets/route-670HLBVr.js +1 -0
  223. package/dist/client/assets/{route-CawzfcpW.js → route-C89Ibi-U.js} +1 -1
  224. package/dist/client/assets/{route-BZFTlR2C.js → route-EoxX91hs.js} +1 -1
  225. package/dist/client/assets/{route-page-header-KSRwTD4y.js → route-page-header-BR3uDdbX.js} +1 -1
  226. package/dist/client/assets/{runnable-block-editor-CJpnHgrX.js → runnable-block-editor-CSSnSMUj.js} +1 -1
  227. package/dist/client/assets/{sandbox-lifecycle-context-D0nuKJ_b.js → sandbox-lifecycle-context-ifXPi2sB.js} +1 -1
  228. package/dist/client/assets/{schema-DNqDLF82.js → schema-BNHw_yaj.js} +1 -1
  229. package/dist/client/assets/{scroll-area-DQZQeCpt.js → scroll-area-2nNYrI6o.js} +1 -1
  230. package/dist/client/assets/{search-input-BQOyz7rC.js → search-input-sOf2CkNn.js} +1 -1
  231. package/dist/client/assets/{search-toggle-B9bFME_G.js → search-toggle-DHKf4hkp.js} +1 -1
  232. package/dist/client/assets/{secret-picker-BprAET2c.js → secret-picker-HArtpcdA.js} +1 -1
  233. package/dist/client/assets/{secrets-BrFL2imQ.js → secrets-CRtvxAI3.js} +1 -1
  234. package/dist/client/assets/{sections-editor-6HKWBNOE.js → sections-editor-Dak8He_5.js} +1 -1
  235. package/dist/client/assets/{select-BsUP6XU-.js → select-CDb4Y6we.js} +1 -1
  236. package/dist/client/assets/{select-model-DX5_kOlo.js → select-model-B8r9iW1l.js} +1 -1
  237. package/dist/client/assets/{seo-editor-DCzXUICs.js → seo-editor-DiL1MO_w.js} +1 -1
  238. package/dist/client/assets/{separator-gB9bmgZ5.js → separator-DjbMPvYl.js} +1 -1
  239. package/dist/client/assets/{settings-tab-C6cS3QDh.js → settings-tab-DDCnNeKZ.js} +1 -1
  240. package/dist/client/assets/{sheet-DTIr0quY.js → sheet-nIqDnTOC.js} +1 -1
  241. package/dist/client/assets/{shell-layout-BadbomY4.js → shell-layout-DlrnawtV.js} +1 -1
  242. package/dist/client/assets/{skill-preview-CrxujJbZ.js → skill-preview-B_VPDhQK.js} +1 -1
  243. package/dist/client/assets/{skills-BjCVlq9E.js → skills-jvTx0zbk.js} +1 -1
  244. package/dist/client/assets/{sso-H7fs23iU.js → sso-DX4CQ1bL.js} +1 -1
  245. package/dist/client/assets/{suggestion-Cub6xPAJ.js → suggestion-CUhja5YZ.js} +1 -1
  246. package/dist/client/assets/{switch-BjEW4lQy.js → switch-t7qZMAr1.js} +1 -1
  247. package/dist/client/assets/{synced-repos-BOQveWA9.js → synced-repos-CF48wSuR.js} +1 -1
  248. package/dist/client/assets/{tab-icon-glyph-BvrqhHgJ.js → tab-icon-glyph-C4GTJtUN.js} +1 -1
  249. package/dist/client/assets/{table-DeAQZdMp.js → table-DnftvMZI.js} +1 -1
  250. package/dist/client/assets/{tabs-UXACuQIA.js → tabs-qvuPfb43.js} +1 -1
  251. package/dist/client/assets/{task-board-CFetJZKk.js → task-board-ljGrWoxL.js} +1 -1
  252. package/dist/client/assets/task-route-BKM4Xpui.js +1 -0
  253. package/dist/client/assets/{task-status-VgarGQNj.js → task-status-CYNPrsoS.js} +1 -1
  254. package/dist/client/assets/{taskboard-analytics-057esZ8F.js → taskboard-analytics-B9Ae2NF1.js} +1 -1
  255. package/dist/client/assets/{tasks-DM161h6Q.js → tasks-CmxeKcJP.js} +1 -1
  256. package/dist/client/assets/tasks-DMT30e-2.js +1 -0
  257. package/dist/client/assets/{textarea-tfNNqm-_.js → textarea-HUGiNdEF.js} +1 -1
  258. package/dist/client/assets/{thread-analytics-D6lYkGRr.js → thread-analytics-BzknO2eq.js} +1 -1
  259. package/dist/client/assets/{thread-button-CqHz48Ii.js → thread-button-Mi88W5yq.js} +1 -1
  260. package/dist/client/assets/{thread-intent-EOvgTchU.js → thread-intent-BMPb4FHC.js} +1 -1
  261. package/dist/client/assets/{thread-route-DwXk0pzt.js → thread-route-B6-rKNY7.js} +1 -1
  262. package/dist/client/assets/{thread-route-Dg7kv_hv.js → thread-route-aQWXmJRa.js} +1 -1
  263. package/dist/client/assets/{thread-sheet-body-BN1cpBVG.js → thread-sheet-body-CFGA4vvp.js} +1 -1
  264. package/dist/client/assets/{toggle-group-DfCcVTyX.js → toggle-group-DA_h_HXU.js} +1 -1
  265. package/dist/client/assets/{toolbar-icon-button-DOCtjUrJ.js → toolbar-icon-button-GuPkNilC.js} +1 -1
  266. package/dist/client/assets/{tooltip-DqtfkXwI.js → tooltip-ueF_9wUB.js} +1 -1
  267. package/dist/client/assets/{track-CWXt8cRU.js → track-DIiSmWcv.js} +1 -1
  268. package/dist/client/assets/{types-QqaS24ZV.js → types-GBiF4_pn.js} +1 -1
  269. package/dist/client/assets/{usage-stats-GlPgZezF.js → usage-stats-BANOA0VL.js} +1 -1
  270. package/dist/client/assets/{use-ai-providers-BGPaB7ua.js → use-ai-providers-Cg5TqweN.js} +1 -1
  271. package/dist/client/assets/{use-automations-DoGtKsiF.js → use-automations-BN0IdwlA.js} +1 -1
  272. package/dist/client/assets/{use-autosave-D1L_iXh-.js → use-autosave-C0MZ8y8F.js} +1 -1
  273. package/dist/client/assets/{use-connect-companion-C9bH45vI.js → use-connect-companion-2ihANcMB.js} +1 -1
  274. package/dist/client/assets/{use-connection-BsLte2he.js → use-connection-muA7J2aI.js} +1 -1
  275. package/dist/client/assets/{use-copy-CaOPCxF5.js → use-copy-GNH1dr5B.js} +1 -1
  276. package/dist/client/assets/{use-create-virtual-mcp-BE_pJ71b.js → use-create-virtual-mcp-Bo61Qh3A.js} +1 -1
  277. package/dist/client/assets/{use-date-fns-locale-Cjw89uE-.js → use-date-fns-locale-rxCEXTtu.js} +1 -1
  278. package/dist/client/assets/{use-debounced-autosave-CmBQ3Dtm.js → use-debounced-autosave-BO8ZH4BT.js} +1 -1
  279. package/dist/client/assets/{use-debounced-value-D1fDrXmw.js → use-debounced-value-g5eSlwEs.js} +1 -1
  280. package/dist/client/assets/{use-deco-credits-BnljnX-n.js → use-deco-credits-dyjA7gE8.js} +1 -1
  281. package/dist/client/assets/{use-decopilot-events-oRqi_MUt.js → use-decopilot-events-BYxgy68b.js} +1 -1
  282. package/dist/client/assets/{use-delete-connection-CfXTYsut.js → use-delete-connection-79tyIhdw.js} +1 -1
  283. package/dist/client/assets/{use-deployment-admin-BYSK4yu-.js → use-deployment-admin-JdzK20UW.js} +1 -1
  284. package/dist/client/assets/{use-entitlements-g5-cEVzp.js → use-entitlements-DN9BNGt3.js} +1 -1
  285. package/dist/client/assets/{use-fast-preview-draft-url-ByATm-6k.js → use-fast-preview-draft-url-BNJcb2zU.js} +1 -1
  286. package/dist/client/assets/{use-file-configs-D0LRhOPo.js → use-file-configs-3KTQkP1K.js} +1 -1
  287. package/dist/client/assets/{use-in-settings-BA5wQFQ2.js → use-in-settings-BjJOlii7.js} +1 -1
  288. package/dist/client/assets/{use-infinite-scroll-EFF__ehg.js → use-infinite-scroll-Cdq_oa9X.js} +1 -1
  289. package/dist/client/assets/{use-join-requests-Df_QAPcD.js → use-join-requests-B6VYxbNE.js} +1 -1
  290. package/dist/client/assets/{use-main-panel-tabs-4SKVKtlD.js → use-main-panel-tabs-D5j4jWEV.js} +1 -1
  291. package/dist/client/assets/{use-mcp-auth-status-r6Fv7Ux6.js → use-mcp-auth-status-DaVamsW3.js} +1 -1
  292. package/dist/client/assets/{use-mcp-client-CNVDhuvd.js → use-mcp-client-C0x5KHr3.js} +1 -1
  293. package/dist/client/assets/{use-mcp-prompts-Bd28eC02.js → use-mcp-prompts-CuYrjiYF.js} +1 -1
  294. package/dist/client/assets/{use-mcp-tools-D1dyg5U7.js → use-mcp-tools-DXxLnh-y.js} +1 -1
  295. package/dist/client/assets/{use-members-CcYULDVF.js → use-members-Biibcmbp.js} +1 -1
  296. package/dist/client/assets/{use-mobile-Dn4_VWcj.js → use-mobile-C6JHx0PF.js} +1 -1
  297. package/dist/client/assets/{use-navigate-to-agent-soNoKU2z.js → use-navigate-to-agent-BRW2ORVP.js} +1 -1
  298. package/dist/client/assets/use-new-blocks-editor-Bm3T4qU1.js +1 -0
  299. package/dist/client/assets/{use-open-billing-url-DLsqsUAn.js → use-open-billing-url-Bz9WlBWU.js} +1 -1
  300. package/dist/client/assets/{use-org-auth-client-BbRXHP84.js → use-org-auth-client-BLaG1Z0T.js} +1 -1
  301. package/dist/client/assets/{use-org-fs-B9N-OGu5.js → use-org-fs-BXZd9PS4.js} +1 -1
  302. package/dist/client/assets/{use-org-sso-DcCWDiTW.js → use-org-sso-YRDHHzMK.js} +1 -1
  303. package/dist/client/assets/{use-organization-roles-CIWlEEfM.js → use-organization-roles-BKmpWJD6.js} +1 -1
  304. package/dist/client/assets/{use-organization-settings-BWZsG9HZ.js → use-organization-settings-DcPw7cxc.js} +1 -1
  305. package/dist/client/assets/use-panel-navigate-CKFDS8vd.js +1 -0
  306. package/dist/client/assets/{use-project-native-view-presence-Bn9lK-SY.js → use-project-native-view-presence-C3ZKCkjq.js} +1 -1
  307. package/dist/client/assets/{use-project-scope-DIRKMaLK.js → use-project-scope-B8BBVQgr.js} +1 -1
  308. package/dist/client/assets/{use-releases-DBFdzdKG.js → use-releases-zfLww2wa.js} +1 -1
  309. package/dist/client/assets/{use-reports-diagnostic-M-tFAPHb.js → use-reports-diagnostic-PwQWFRqX.js} +1 -1
  310. package/dist/client/assets/{use-route-default-main-BeQVGvWs.js → use-route-default-main-DUSVFY9d.js} +1 -1
  311. package/dist/client/assets/{use-secrets-BtIO9CRs.js → use-secrets-CiUcs1Ha.js} +1 -1
  312. package/dist/client/assets/{use-section-preview-base-CgQax-JH.js → use-section-preview-base-BySe2jf2.js} +1 -1
  313. package/dist/client/assets/{use-session-runtime-CHP3YGA3.js → use-session-runtime-5yIMEZl3.js} +1 -1
  314. package/dist/client/assets/{use-tags-Dx91jKms.js → use-tags-ChaHfmB_.js} +1 -1
  315. package/dist/client/assets/{use-task-board-analytics-DO-u1jni.js → use-task-board-analytics-DsHNEkjR.js} +1 -1
  316. package/dist/client/assets/{use-task-metadata-BxMvdi8M.js → use-task-metadata-48Q23RPw.js} +1 -1
  317. package/dist/client/assets/{use-thread-analytics-Duxs7POX.js → use-thread-analytics-C25QIJ_I.js} +1 -1
  318. package/dist/client/assets/{use-thread-outputs-BmNXBkF5.js → use-thread-outputs-BuHSwVqe.js} +1 -1
  319. package/dist/client/assets/{use-virtual-mcp-D8Whl5cH.js → use-virtual-mcp-BAw88Bsg.js} +1 -1
  320. package/dist/client/assets/useInfiniteQuery-WjZflcNE.js +1 -0
  321. package/dist/client/assets/{useQueries-e2PQJS28.js → useQueries-CK6ScIjP.js} +1 -1
  322. package/dist/client/assets/useSuspenseInfiniteQuery-BNZa-5e9.js +1 -0
  323. package/dist/client/assets/{users-OvID5j24.js → users-DyeOrBSW.js} +1 -1
  324. package/dist/client/assets/{utils-Dn4NkWqd.js → utils-BcSQuHiJ.js} +1 -1
  325. package/dist/client/assets/{variant-calendar-D7VOB7kp.js → variant-calendar-OsMeouUu.js} +1 -1
  326. package/dist/client/assets/{variant-matcher-override-CVQeLuOR.js → variant-matcher-override-BBGaLET5.js} +1 -1
  327. package/dist/client/assets/{view-mode-toggle-5kJtAe-y.js → view-mode-toggle-CCaoJjCH.js} +1 -1
  328. package/dist/client/assets/{virtual-mcp-DWa9T_f2.js → virtual-mcp-DDbXBg25.js} +1 -1
  329. package/dist/client/index.html +1 -1
  330. package/dist/server/cli.js +1 -1
  331. package/dist/server/server.js +1 -1
  332. package/package.json +1 -1
  333. package/dist/client/assets/agent-app-CbeamK3b.js +0 -1
  334. package/dist/client/assets/agent-deck-DtYstLjo.js +0 -1
  335. package/dist/client/assets/agent-library-file-DQKMT-An.js +0 -1
  336. package/dist/client/assets/agent-overview-DsLUNfy5.js +0 -1
  337. package/dist/client/assets/agent-settings-DjUOw7yi.js +0 -1
  338. package/dist/client/assets/agent-site-editor-code-Btc2xHC2.js +0 -2
  339. package/dist/client/assets/agent-view-2NBoqN30.js +0 -1
  340. package/dist/client/assets/api-keys-B_m68tgF.js +0 -1
  341. package/dist/client/assets/app-editor-BUq8LbjS.js +0 -1
  342. package/dist/client/assets/home-fbC7tn9p.js +0 -1
  343. package/dist/client/assets/project-app-view-B9SXqzvV.js +0 -1
  344. package/dist/client/assets/project-feed-D09MAcoq.js +0 -1
  345. package/dist/client/assets/project-reports-DwtBmH51.js +0 -1
  346. package/dist/client/assets/project-tasks-CN6hEoJ8.js +0 -1
  347. package/dist/client/assets/record-editor-VDQOze8g.js +0 -1
  348. package/dist/client/assets/reports-tab-Do-8_DzV.js +0 -2
  349. package/dist/client/assets/reports-wlU1uxEN.js +0 -1
  350. package/dist/client/assets/route-CTkokDka.js +0 -1
  351. package/dist/client/assets/task-route-uQ4EUqTW.js +0 -1
  352. package/dist/client/assets/tasks-B88XVIi1.js +0 -1
  353. package/dist/client/assets/use-new-blocks-editor-_DNbqg93.js +0 -1
  354. package/dist/client/assets/use-panel-navigate-BpzTFK7R.js +0 -1
  355. package/dist/client/assets/useInfiniteQuery-ByafV4ZI.js +0 -1
  356. package/dist/client/assets/useSuspenseInfiniteQuery-CflcpPwQ.js +0 -1
@@ -3703,7 +3703,7 @@ Respond with ONLY a JSON object of this shape, and nothing else:
3703
3703
  ${J.join(`
3704
3704
  `)}`:X}function Yu6($){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 t48=200,nh6=12,oh6,ah6=300,pk0=3;var NU1=D(()=>{iZ();N8();ik0();oh6={aheadBy:0,behindBy:0,files:[]}});function Ju6($){if(!$||$.includes(".."))return!1;return Xu6.test($)}function r48($){return Gu6.includes($)}function BU1($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!Ju6(Z))return null;let{__resolveType:Q,...Y}=$;return{resolveType:Z,payload:Y}}function OU1($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var Xu6,Gu6;var a48=D(()=>{Xu6=/^[\w./@-]+$/;Gu6=["vtex/loaders/intelligentSearch/productList.ts","vtex/loaders/categories/tree.ts"]});function H40($,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 e48($,Z,Q,Y){let X=$.organization?.id;if(!X)throw new zE(E7);let J=await Qj($.storage,X,Y);if(J&&await gB($.storage,J)){let F=await eF($,J,{forceRefresh:!0}).catch((U)=>{throw new zE(U instanceof Error?U.message:E7)});await s48($,Z,Q,F);return}let G=Y.connectionId??J?.legacyConnectionId;if(!G)throw new zE("Push requires a connected git account. Connect the repository's provider for this project and restart the sandbox.");await Tc({ctx:$,connectionId:G,organizationId:X,forceRefresh:!0,onLegacyMintError:(F)=>{let U=F instanceof Error?F.message:E7;throw new zE(U)}});let{cloneUrl:W,gitUserName:K,gitUserEmail:H}=await $U(G,Y.owner,Y.name,$.db,$.vault).catch((F)=>{let{code:U,message:N}=HN$(F instanceof Error?F.message:String(F));throw U?new zE(N):F});await s48($,Z,Q,{cloneUrl:W,gitUserName:K,gitUserEmail:H})}async function s48($,Z,Q,Y){let{cloneUrl:X,gitUserName:J,gitUserEmail:G}=Y,W=Ei($),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 qj(K,Wu6).catch(()=>K.statusText);throw Error(`Failed to refresh sandbox git credentials (${K.status}): ${H}`)}}var Wu6=10485760,zE;var DU1=D(()=>{WW();fk0();g00();dW0();Ce();iZ();zE=class zE extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function Hu6($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!Ku6.test(Z))throw Error(`Invalid branch name: ${$}`)}function Ny($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(Fu6)])}async function Nu6($,Z){let Q=$.var.studioContext,Y=KU(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=gx(G?.metadata?.runtime);if(W)return W;let K=_20(Z.virtualMcpMetadata),H=K==="cms"?await pF1(Q,{claimName:Z.claimName}):"alive",F=K==="cms"&&H!=="alive"?"cms":"sandbox",U=!!G&&(H==="gone"||H==="alive"&&K==="cms");if(U&&G)h00(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 Bu6($){let Z=$.get("vmClaim");if(Z.runner)return Z.runner;try{return await IX($.var.studioContext)}catch{return null}}function By($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}async function Ri($){let{virtualMcpMetadata:Z,connectionIds:Q}=$.get("vmClaim"),Y=$.var.studioContext,X=H40(Z,Q);if(!X)throw new x0({provider:"github",status:404,message:"Project has no GitHub repository"});let J=G0(Y);return zc(Y,J.id,X)}function wU1($,Z){let Q=Z instanceof Error?Z.message:String(Z),Y=SF$(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 LU1($,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 Y68($){try{let Z=await Ri($),Q=await nk0(Z,$.get("vmClaim").branch);return $.json(Q,200,$9)}catch(Z){return wU1($,Z)}}function F40($,Z){let Y=(rk0.get($)??Promise.resolve()).catch(()=>{}).then(Z),X=Y.catch(()=>{});return rk0.set($,X),X.finally(()=>{if(rk0.get($)===X)rk0.delete($)}),Y}async function QQ($,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??By($);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?Ou6(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 Ou6($){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 ak0($,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 Du6($){return X68.includes($)}var Ku6,$68=524288,Z68=65536,Fu6=1e4,Q68=2000,Uu6,rk0,$9,X68,J68=()=>{let $=new Q1;$.use("/:virtualMcpId/:branch/*",Uu6),$.post("/:virtualMcpId/:branch/write",(Q)=>QQ(Q,"/_sandbox/write",{forwardJsonBody:!0,signal:Ny(Q)})),$.post("/:virtualMcpId/:branch/unlink",(Q)=>QQ(Q,"/_sandbox/unlink",{forwardJsonBody:!0,signal:Ny(Q)})),$.post("/:virtualMcpId/:branch/mkdir",(Q)=>QQ(Q,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:Ny(Q)})),$.post("/:virtualMcpId/:branch/rename",(Q)=>QQ(Q,"/_sandbox/rename",{forwardJsonBody:!0,signal:Ny(Q)})),$.post("/:virtualMcpId/:branch/read",(Q)=>QQ(Q,"/_sandbox/read",{forwardJsonBody:!0,signal:Ny(Q)})),$.post("/:virtualMcpId/:branch/glob",(Q)=>QQ(Q,"/_sandbox/glob",{forwardJsonBody:!0,signal:Ny(Q)})),$.post("/:virtualMcpId/:branch/grep",(Q)=>QQ(Q,"/_sandbox/grep",{forwardJsonBody:!0,signal:Ny(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 QQ(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 QQ(Q,`/_sandbox/exec/${encodeURIComponent(Y)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(Q)=>QQ(Q,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDir:!0})),$.put("/:virtualMcpId/:branch/config",(Q)=>QQ(Q,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(Q)=>{let Y=Q.req.param("step");if(!Y||!Du6(Y))return Q.json({error:`step must be one of: ${X68.join(", ")}`},400);let X=Q.get("vmClaim"),J=await pF1(Q.var.studioContext,{claimName:X.claimName})==="gone"?null:await Bu6(Q);if(!J)return Q.json({error:"sandbox not found: nothing is running at this ref"},404,$9);if(Y==="start"){let G=G0(Q.var.studioContext),W=Ym(X.virtualMcpMetadata);try{await V20({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 QQ(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 xO(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 Q48(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 Y68(Q);return Z(Q)});let Z=(Q)=>QQ(Q,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([Q.req.raw.signal,AbortSignal.timeout(Q68)])});return $.post("/:virtualMcpId/:branch/git/status",(Q)=>{if(Q.get("vmClaim").runtime==="cms")return Y68(Q);return QQ(Q,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([Q.req.raw.signal,AbortSignal.timeout(Q68)])})}),$.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 Ri(Q),G=await tk0(J,Y.branch,X.base);return Q.json(G,200,$9)}catch(X){return wU1(Q,X)}return QQ(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=By(Q);if(Y instanceof Response)return Y;let{claimName:X,virtualMcpMetadata:J,connectionIds:G}=Q.get("vmClaim"),W=Q.var.studioContext;return F40(X,async()=>{try{await nF1(W,Y,X);let K=H40(J,G);if(K)await e48(W,Y,X,K)}catch(K){if(K instanceof zE)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 QQ(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 F40(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 Ri(Q);return await o48(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 F40(Y.claimName,()=>QQ(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 F40(Y.claimName,async()=>{try{let W=await Q.req.json().catch(()=>({})),K=await Ri(Q),H=W.base??await K.getDefaultBranch();return await ok0(K,Y.branch,H),Q.json({ok:!0},200,$9)}catch(W){return wU1(Q,W)}});let X=By(Q);if(X instanceof Response)return X;let{claimName:J}=Q.get("vmClaim"),G=Q.var.studioContext;return F40(J,async()=>{try{await nF1(G,X,J)}catch(W){let K=W instanceof Error?W.message:String(W);return Q.json({error:K},502,$9)}return QQ(Q,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",V5({maxSize:$68,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=By(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]=rF1(F)&&N?[F,U]:X?await Promise.all([ak0(X,J,"/_sandbox/git/status","GET",{userId:G,projectRef:W}),ak0(X,J,"/_sandbox/git/diff","GET",{userId:G,projectRef:W})]):await(async()=>{let w=await Ri(Q);return Promise.all([nk0(w,Y.branch),tk0(w,Y.branch)])})();await hK(K,G0(K).id,"suggesting a commit message");let L=await W48(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",V5({maxSize:$68,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=By(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]=rF1(F)&&N?[F,U]:X?await Promise.all([ak0(X,J,"/_sandbox/git/status","GET",{userId:G,projectRef:W}),ak0(X,J,"/_sandbox/git/diff","GET",{userId:G,projectRef:W})]):await(async()=>{let w=await Ri(Q);return Promise.all([nk0(w,Y.branch),tk0(w,Y.branch)])})();await hK(K,G0(K).id,"judging whether a change needs review");let L=await H48(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=By(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 LU1(Q,`${W}${J}`)}),$.post("/:virtualMcpId/:branch/preview-invoke",V5({maxSize:Z68,onError:(Q)=>Q.json({error:"Payload too large"},413)}),async(Q)=>{let Y=By(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=BU1(G);if(!W)return Q.json({error:"Invalid or missing __resolveType"},400);let K=OU1(J,W.resolveType);return LU1(Q,K,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(W.payload),signal:AbortSignal.timeout(30000)})}),$.post("/:virtualMcpId/:branch/catalog-invoke",V5({maxSize:Z68,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):Xm(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=BU1(W);if(!K)return Q.json({error:"Invalid or missing __resolveType"},400);if(!r48(K.resolveType))return Q.json({error:"resolveType not allowed"},403);let H=OU1(G,K.resolveType);return LU1(Q,H,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(K.payload),signal:AbortSignal.timeout(30000)})}),$};var G68=D(()=>{G8();fW();ji();iF1();x00();e88();jW();Jm();$48();QH();gF();Z48();Y48();G51();y00();eF1();F48();iZ();w5();NU1();a48();C20();DU1();Ku6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;Uu6=xk0(async($,Z)=>{let Q=$.var.studioContext;try{o(Q)}catch{return $.json({error:"Unauthorized"},401)}let Y=d0(Q);if(!Y)return $.json({error:"Unauthorized"},401);let X;try{X=G0(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{Hu6(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=Q00({orgId:X.id,virtualMcpId:J,branch:G}),H=await _41(Q,G),F=v41(H,Y),U=s88({userId:F,projectRef:K}),N=W.metadata??null,B=await Nu6($,{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()});rk0=new Map;$9={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};X68=["clone","install","start"]});function W68($,Z,Q){let Y=jU1.get($);if(!Y)Y={pending:null,running:!1},jU1.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)wu6($,Y);return J}async function wu6($,Z){Z.running=!0;try{while(Z.pending){let Q=Z.pending;Z.pending=null;try{let Y=await ju6(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)jU1.delete($)}}async function ju6($){let{client:Z,branch:Q,packagePath:Y}=$.deps,X=new Map;for(let J=0;;J++){let G=await Ti(Z,Q),W=await Z.listDecofileEntries(G,Y),K=HU1(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=FU1(K,N),L=`${JSON.stringify(B,null,2)}
3706
- `;await d48(Z.repo,L);let w=O[0]??`${dk0(Y)}/${QU1(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 FU1(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 i48(Z,F.values(),X),{decofile:B,skipped:O}=Q40(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:Eu6($),expectedHead:G,changes:H});return N}catch(N){if(!(N instanceof t6)||J>=Lu6-1)throw N;await i$(XQ(2000,200,J,2,0.5))}}}function Eu6($){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 Z41(Y,$.deps.coAuthor)}var Lu6=3,jU1;var K68=D(()=>{LA0();gk0();T6();N8();iZ();ik0();jU1=new Map});import{createHmac as H68,randomBytes as zu6,timingSafeEqual as Pu6}from"crypto";function F68(){if(sk0)return sk0;let $;try{let Z=z0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return sk0=$?Buffer.from($):zu6(32),sk0}function EU1($){let Z=$.nowMs??Date.now(),Q={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+Au6)/1000)},Y=Buffer.from(JSON.stringify(Q)).toString("base64url"),X=H68("sha256",F68()).update(Y).digest("base64url");return`${Y}.${X}`}function U68($,Z){let Q=$.indexOf(".");if(Q<0)return!1;let Y=$.slice(0,Q),X=Buffer.from($.slice(Q+1)),J=Buffer.from(H68("sha256",F68()).update(Y).digest("base64url"));if(X.length!==J.length||!Pu6(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 Au6=21600000,sk0=null;var N68=D(()=>{U$()});function ek0($){return $&&typeof $==="object"&&!Array.isArray($)?$:null}function Tu6($){for(let[Z,Q]of Object.entries($)){if(!Z.startsWith("collections/blog/posts/"))continue;let Y=ek0(Q)?.__resolveType;if(typeof Y==="string"&&Y)return Y}return"blog/loaders/Blogpost.ts"}function B68($){let Z;try{Z=ek0(JSON.parse($))}catch{return $}if(!Z)return $;let Q=Tu6(Z),Y={...Z},X=0;for(let[J,G]of Object.entries(Z)){if(!J.startsWith("blog-manager/posts/"))continue;let W=ek0(G),K=W&&ek0(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 qi}from"zod";function qu6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&Ru6.test($)}function j68($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function U40($){let Z=$.get("decofileScope");return zc($.var.studioContext,Z.organizationId,Z.githubRepo)}function N40($,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 E68(){let $=new Q1;return $.use("/:virtualMcpId/:branch",w68),$.use("/:virtualMcpId/:branch/*",w68),$.get("/:virtualMcpId/:branch",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await U40(Z),X=await p48(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(B68(X.decofile),200,{...J,"content-type":"application/json"});let G=EU1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.body(`{"version":${JSON.stringify(X.sha)},"token":${JSON.stringify(G)},"apiHost":${JSON.stringify(j68(Z))},"decofile":${X.decofile}}`,200,{...J,"content-type":"application/json"})}catch(Y){return N40(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 U40(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 N40(Z,X)}}),$.patch("/:virtualMcpId/:branch",Iu6,async(Z)=>{let Q=Z.get("decofileScope"),Y=Z.var.studioContext,X=Vu6.safeParse(await Z.req.json().catch(()=>null));if(!X.success)return Z.json({error:"Invalid body",details:X.error.issues},400);let J;try{J=Y40(X.data)}catch(G){if(G instanceof X40)return Z.json({error:G.message},400);throw G}for(let G of[...Object.keys(J.set??{}),...J.delete??[]])try{yk0(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(ZU1(G))return Z.json({error:`Block key "${G}" collides with a framework resolver module and cannot be written`},400)}try{let G=await U40(Z),W=await W68(`${Q.organizationId}/${Q.virtualMcpId}/${Q.branch}`,{client:G,branch:Q.branch,packagePath:Q.packagePath,coAuthor:Ei(Y)},J),K=EU1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.json({version:W,token:K,apiHost:j68(Z)})}catch(G){return N40(Z,G)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await U40(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 ok0(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 N40(Z,Y)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await U40(Z),X=await Y.getDefaultBranch();if(X===Q.branch)return Z.json({baseBranch:X,aheadBy:0,behindBy:0});try{let{aheadBy:J,behindBy:G}=await Y.compare(X,Q.branch);return Z.json({baseBranch:X,aheadBy:J,behindBy:G})}catch(J){if(UW(J)===404)return Z.json({baseBranch:X,aheadBy:0,behindBy:0});throw J}}catch(Y){return N40(Z,Y)}}),$}var Ru6,O68=500,D68=1048576,L68=1024,Mu6=8388608,Iu6,Vu6,w68;var z68=D(()=>{C20();gk0();G8();fW();iF1();fk0();DU1();iZ();K68();N68();NU1();ik0();gF();Ru6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;Iu6=V5({maxSize:Mu6,onError:($)=>$.json({error:"Payload too large"},413)}),Vu6=qi.object({set:qi.record(qi.string(),qi.unknown()).optional(),delete:qi.array(qi.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)<=O68,{message:`Patch cannot touch more than ${O68} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=D68),{message:`Each block must be at most ${D68} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=L68),{message:`Each block key must be at most ${L68} characters`}),w68=xk0(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(!qu6(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||!U68(B,{organizationId:Y.id,virtualMcpId:X,branch:J}))return $.json({error:"Unauthorized"},401)}if(!await QW(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(!Xm(K))return $.json({error:"Project has no preview server configured"},404);let F=W.connections?.map((B)=>B.connection_id)??[],U=H40(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 P68=($)=>{let Z=new Q1;if(Z.use("*",rd),Z.use("*",te$),Z.route("/",dV0()),Z.route("/",S08()),Z.route("/",L08()),Z.route("/",h88()),Z.route("/",C88()),Z.route("/",y88()),Z.route("/",v88()),Z.route("/",_k0()),Z.route("/tools",p88()),Z.route("/",m88()),Z.route("/",H88({kvStorage:$.kvStorage})),Z.route("/",W88()),Z.route("/fs",A88({getConnection:$.getNatsConnection})),Z.route("/sandbox",J68()),Z.route("/decofile",E68()),Z.route("/",V88()),Z.route("/",R88()),Z.route("/deco-sites",pV0()),Z.route("/hosting",J08()),Z.route("/monitor",N08()),Z.route("/sso",hV0()),Z.route("/",vk0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",$08()),$.mountDevAssets)Z.route("/dev-assets",rV0({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("/",$a$()),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",M88()),Z.route("/mcp",yR0()),Z.route("/mcp/self",Vk0()),Z.route("/mcp",uR0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var A68=D(()=>{G8();oe$();IV0();Z08();NH1();G08();B08();aV0();$y();WH1();wH1();K88();F88();T88();q88();n10();ZH1();lR0();fF1();I88();k88();_88();b88();hF1();u88();d88();uF1();n88();lF1();gR0();G68();z68()});function ku6($){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 Su6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},T68=()=>{let $=new Q1;return $.use("*",Su6),$.get("/",async(Z)=>{let Q=z0(),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:ku6(J)})}catch(J){return console.error("[deco-apps] GET error:",J),Z.json({error:"Failed to fetch apps"},502)}}),$};var R68=D(()=>{G8();U$();vI0()});import{z as b1}from"zod";function pU($,Z="invalid_request_error",Q=null,Y=null){return{error:{message:$,type:Z,param:Q,code:Y}}}function uu6($){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 lu6($,Z,Q){try{return JSON.parse($)}catch{throw new I68(`Invalid JSON in tool call arguments for function '${Q}' (tool_call_id: ${Z}): ${$}`)}}function cu6($){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:lu6(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 mu6($){let Z=$.map((Q)=>{let Y=Q.function.parameters?AF(Q.function.parameters):AF({type:"object",properties:{}});return[Q.function.name,c$({description:Q.function.description,inputSchema:Y})]});return Object.fromEntries(Z)}function du6($){if(!$)return;return{openai:{response_format:$}}}function iu6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function q68($,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 M68($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var Cu6=256,_u6,vu6,bu6,xu6,fu6,yu6,gu6,hu6,I68,V68,k68;var S68=D(()=>{v4();G8();ji();NH();_u6=b1.object({type:b1.literal("function"),function:b1.object({name:b1.string(),description:b1.string().optional(),parameters:b1.record(b1.string(),b1.unknown()).optional()})}),vu6=b1.object({id:b1.string(),type:b1.literal("function"),function:b1.object({name:b1.string(),arguments:b1.string()})}),bu6=b1.discriminatedUnion("role",[b1.object({role:b1.literal("system"),content:b1.string(),name:b1.string().optional()}),b1.object({role:b1.literal("user"),content:b1.union([b1.string(),b1.array(b1.union([b1.object({type:b1.literal("text"),text:b1.string()}),b1.object({type:b1.literal("image_url"),image_url:b1.object({url:b1.string(),detail:b1.string().optional()})})]))]),name:b1.string().optional()}),b1.object({role:b1.literal("assistant"),content:b1.string().nullable().optional(),name:b1.string().optional(),tool_calls:b1.array(vu6).optional()}),b1.object({role:b1.literal("tool"),content:b1.string(),tool_call_id:b1.string()})]),xu6=b1.object({type:b1.literal("text")}),fu6=b1.object({type:b1.literal("json_object")}),yu6=b1.object({type:b1.literal("json_schema"),json_schema:b1.object({name:b1.string(),description:b1.string().optional(),schema:b1.record(b1.string(),b1.unknown()),strict:b1.boolean().optional()})}),gu6=b1.union([xu6,fu6,yu6]),hu6=b1.object({model:b1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:b1.array(bu6),stream:b1.boolean().optional().default(!1),temperature:b1.number().min(0).max(2).optional(),max_tokens:b1.number().positive().optional(),top_p:b1.number().min(0).max(1).optional(),frequency_penalty:b1.number().min(-2).max(2).optional(),presence_penalty:b1.number().min(-2).max(2).optional(),stop:b1.union([b1.string(),b1.array(b1.string())]).optional(),tools:b1.array(_u6).optional(),tool_choice:b1.union([b1.literal("auto"),b1.literal("none"),b1.literal("required"),b1.object({type:b1.literal("function"),function:b1.object({name:b1.string()})})]).optional(),response_format:gu6.optional(),user:b1.string().optional()});I68=class I68 extends Error{constructor($){super($);this.name="MessageConversionError"}};V68=new Q1;V68.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),Q=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(pU("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(pU("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(pU("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Y=await $.req.json(),X=hu6.safeParse(Y);if(!X.success){let w=X.error.issues[0]??{message:"Invalid request",path:[]};return $.json(pU(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let J=X.data,G=uu6(J.model);if(!G)return $.json(pU("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)=>xz(E.providerId));if(!j)return $.json(pU("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(pU(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),U=cu6(J.messages),N=J.tools?mu6(J.tools):void 0,B=du6(J.response_format),O=iu6(),L=Math.floor(Date.now()/1000);if(J.stream)return xO($,async(w)=>{let j=q68(F,U,N,J,B,$.req.raw.signal);try{let E=Qm(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>=Cu6)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:M68(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=q68(F,U,N,J,B,$.req.raw.signal),j=await UU(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:M68(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(pU("Request aborted","invalid_request_error"),400);if(X.name==="MessageConversionError")return $.json(pU(X.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",X.message,X.stack),$.json(pU(X.message,"server_error"),500)}});k68=V68});function pu6($){if(typeof $!=="object"||$===null)return!1;let Q=$.githubRepo?.url;return typeof Q==="string"&&Q.length>0}function C68(){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=d0(Q);if(!Y)return Z.json({error:"Authentication required"},401);let J=(Z.req.query("site")??"").trim().toLowerCase();if(!KZ(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(_A(U)!==J)continue;if(!pu6(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 _68=D(()=>{G8();fG()});var b68;var v68=D(()=>{b68={name:"decocms",version:"4.408.0",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^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 ou6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??tu6}}var x68,tu6="https://ph.studio.decocms.com",f68;var y68=D(()=>{G8();Nr();Yf();E9();U$();lK1();v68();x68=new Q1;x68.get("/",($)=>{let Z={version:b68.version,theme:E$$(),...RK().logo&&{logo:RK().logo},...WO()&&{internalUrl:ac1()},...z0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!z0().firecrawlApiKey,hostingEnabled:!!z0().controlplaneRestUrl&&!!z0().controlplaneServiceToken,hostingControlPlaneGa:z0().hostingControlPlaneGa,monitorEnabled:!!z0().clickhouseAnalyticsUrl&&!!z0().clickhouseAnalyticsPassword,monitorGa:z0().monitorGa,plansEnabled:z0().plansEnabled,auth:ds$(),posthog:ou6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:nO()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});f68=x68});function Oy($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function zU1($){return(Oy($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((Q)=>Q.charAt(0).toUpperCase()+Q.slice(1)).join(" ")}function g68($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Oy($))}&sz=${Z}`}function ru6($,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 h68($){let{brand:Z,domain:Q,score:Y}=$,X=typeof Y==="number"?`${Z} Deco Score \u2014 ${Math.round(Y)}/100 \xB7 decocms`:`${Z} Deco Score \xB7 decocms`,J=ru6(`How does ${Q} really perform? See the full ${Z} Deco Score \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,200);return{title:X,description:J}}import{z as L$}from"zod";var au6,u68;var l68=D(()=>{au6=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())}),u68=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(au6)})),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 c68($,Z,Q){let Y=Q?`?${new URLSearchParams({lang:Q}).toString()}`:"";return`${uK({})}/api/v2/public/diagnostics/${encodeURIComponent($)}/onepager${Z}${Y}`}async function $S0($,Z={}){let Q=await fetch(c68($,"",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 u68.parse(await Q.json())}async function m68($,Z={}){let Q=await fetch(c68($,".md",Z.lang),{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 PU1=D(()=>{l68();jw()});import{join as d68}from"path";async function eu6($){try{let Z=await $S0($,{signal:AbortSignal.timeout(su6)});if(!Z?.scanned_at)return null;return{brand:Z.brand.trim()||zU1($),...Z.score!==null?{score:Z.score}:{}}}catch{return null}}function iJ($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function $l6($,Z){let Q=Oy($),Y=Z?.brand?.trim()||zU1(Q),X=g68(Q,128),G=`${(z0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(Q)}`,{title:W,description:K}=h68({brand:Y,domain:Q,score:Z?.score}),H=`${G}/og.png`,F=`${Y} Deco Score 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 d48(Z.repo,L);let w=O[0]??`${dk0(Y)}/${QU1(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 FU1(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 i48(Z,F.values(),X),{decofile:B,skipped:O}=Q40(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:Eu6($),expectedHead:G,changes:H});return N}catch(N){if(!(N instanceof t6)||J>=Lu6-1)throw N;await i$(XQ(2000,200,J,2,0.5))}}}function Eu6($){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 Z41(Y,$.deps.coAuthor)}var Lu6=3,jU1;var K68=D(()=>{LA0();gk0();T6();N8();iZ();ik0();jU1=new Map});import{createHmac as H68,randomBytes as zu6,timingSafeEqual as Pu6}from"crypto";function F68(){if(sk0)return sk0;let $;try{let Z=z0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return sk0=$?Buffer.from($):zu6(32),sk0}function EU1($){let Z=$.nowMs??Date.now(),Q={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+Au6)/1000)},Y=Buffer.from(JSON.stringify(Q)).toString("base64url"),X=H68("sha256",F68()).update(Y).digest("base64url");return`${Y}.${X}`}function U68($,Z){let Q=$.indexOf(".");if(Q<0)return!1;let Y=$.slice(0,Q),X=Buffer.from($.slice(Q+1)),J=Buffer.from(H68("sha256",F68()).update(Y).digest("base64url"));if(X.length!==J.length||!Pu6(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 Au6=21600000,sk0=null;var N68=D(()=>{U$()});function ek0($){return $&&typeof $==="object"&&!Array.isArray($)?$:null}function Tu6($){for(let[Z,Q]of Object.entries($)){if(!Z.startsWith("collections/blog/posts/"))continue;let Y=ek0(Q)?.__resolveType;if(typeof Y==="string"&&Y)return Y}return"blog/loaders/Blogpost.ts"}function B68($){let Z;try{Z=ek0(JSON.parse($))}catch{return $}if(!Z)return $;let Q=Tu6(Z),Y={...Z},X=0;for(let[J,G]of Object.entries(Z)){if(!J.startsWith("blog-manager/posts/"))continue;let W=ek0(G),K=W&&ek0(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 qi}from"zod";function qu6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&Ru6.test($)}function j68($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function U40($){let Z=$.get("decofileScope");return zc($.var.studioContext,Z.organizationId,Z.githubRepo)}function N40($,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 E68(){let $=new Q1;return $.use("/:virtualMcpId/:branch",w68),$.use("/:virtualMcpId/:branch/*",w68),$.get("/:virtualMcpId/:branch",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await U40(Z),X=await p48(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(B68(X.decofile),200,{...J,"content-type":"application/json"});let G=EU1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.body(`{"version":${JSON.stringify(X.sha)},"token":${JSON.stringify(G)},"apiHost":${JSON.stringify(j68(Z))},"decofile":${X.decofile}}`,200,{...J,"content-type":"application/json"})}catch(Y){return N40(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 U40(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 N40(Z,X)}}),$.patch("/:virtualMcpId/:branch",Iu6,async(Z)=>{let Q=Z.get("decofileScope"),Y=Z.var.studioContext,X=Vu6.safeParse(await Z.req.json().catch(()=>null));if(!X.success)return Z.json({error:"Invalid body",details:X.error.issues},400);let J;try{J=Y40(X.data)}catch(G){if(G instanceof X40)return Z.json({error:G.message},400);throw G}for(let G of[...Object.keys(J.set??{}),...J.delete??[]])try{yk0(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(ZU1(G))return Z.json({error:`Block key "${G}" collides with a framework resolver module and cannot be written`},400)}try{let G=await U40(Z),W=await W68(`${Q.organizationId}/${Q.virtualMcpId}/${Q.branch}`,{client:G,branch:Q.branch,packagePath:Q.packagePath,coAuthor:Ei(Y)},J),K=EU1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.json({version:W,token:K,apiHost:j68(Z)})}catch(G){return N40(Z,G)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await U40(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 ok0(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 N40(Z,Y)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await U40(Z),X=await Y.getDefaultBranch();if(X===Q.branch)return Z.json({baseBranch:X,aheadBy:0,behindBy:0});try{let{aheadBy:J,behindBy:G}=await Y.compare(X,Q.branch);return Z.json({baseBranch:X,aheadBy:J,behindBy:G})}catch(J){if(UW(J)===404)return Z.json({baseBranch:X,aheadBy:0,behindBy:0});throw J}}catch(Y){return N40(Z,Y)}}),$}var Ru6,O68=500,D68=1048576,L68=1024,Mu6=8388608,Iu6,Vu6,w68;var z68=D(()=>{C20();gk0();G8();fW();iF1();fk0();DU1();iZ();K68();N68();NU1();ik0();gF();Ru6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;Iu6=V5({maxSize:Mu6,onError:($)=>$.json({error:"Payload too large"},413)}),Vu6=qi.object({set:qi.record(qi.string(),qi.unknown()).optional(),delete:qi.array(qi.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)<=O68,{message:`Patch cannot touch more than ${O68} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=D68),{message:`Each block must be at most ${D68} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=L68),{message:`Each block key must be at most ${L68} characters`}),w68=xk0(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(!qu6(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||!U68(B,{organizationId:Y.id,virtualMcpId:X,branch:J}))return $.json({error:"Unauthorized"},401)}if(!await QW(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(!Xm(K))return $.json({error:"Project has no preview server configured"},404);let F=W.connections?.map((B)=>B.connection_id)??[],U=H40(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 P68=($)=>{let Z=new Q1;if(Z.use("*",rd),Z.use("*",te$),Z.route("/",dV0()),Z.route("/",S08()),Z.route("/",L08()),Z.route("/",h88()),Z.route("/",C88()),Z.route("/",y88()),Z.route("/",v88()),Z.route("/",_k0()),Z.route("/tools",p88()),Z.route("/",m88()),Z.route("/",H88({kvStorage:$.kvStorage})),Z.route("/",W88()),Z.route("/fs",A88({getConnection:$.getNatsConnection})),Z.route("/sandbox",J68()),Z.route("/decofile",E68()),Z.route("/",V88()),Z.route("/",R88()),Z.route("/deco-sites",pV0()),Z.route("/hosting",J08()),Z.route("/monitor",N08()),Z.route("/sso",hV0()),Z.route("/",vk0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",$08()),$.mountDevAssets)Z.route("/dev-assets",rV0({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("/",$a$()),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",M88()),Z.route("/mcp",yR0()),Z.route("/mcp/self",Vk0()),Z.route("/mcp",uR0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var A68=D(()=>{G8();oe$();IV0();Z08();NH1();G08();B08();aV0();$y();WH1();wH1();K88();F88();T88();q88();n10();ZH1();lR0();fF1();I88();k88();_88();b88();hF1();u88();d88();uF1();n88();lF1();gR0();G68();z68()});function ku6($){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 Su6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},T68=()=>{let $=new Q1;return $.use("*",Su6),$.get("/",async(Z)=>{let Q=z0(),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:ku6(J)})}catch(J){return console.error("[deco-apps] GET error:",J),Z.json({error:"Failed to fetch apps"},502)}}),$};var R68=D(()=>{G8();U$();vI0()});import{z as b1}from"zod";function pU($,Z="invalid_request_error",Q=null,Y=null){return{error:{message:$,type:Z,param:Q,code:Y}}}function uu6($){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 lu6($,Z,Q){try{return JSON.parse($)}catch{throw new I68(`Invalid JSON in tool call arguments for function '${Q}' (tool_call_id: ${Z}): ${$}`)}}function cu6($){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:lu6(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 mu6($){let Z=$.map((Q)=>{let Y=Q.function.parameters?AF(Q.function.parameters):AF({type:"object",properties:{}});return[Q.function.name,c$({description:Q.function.description,inputSchema:Y})]});return Object.fromEntries(Z)}function du6($){if(!$)return;return{openai:{response_format:$}}}function iu6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function q68($,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 M68($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var Cu6=256,_u6,vu6,bu6,xu6,fu6,yu6,gu6,hu6,I68,V68,k68;var S68=D(()=>{v4();G8();ji();NH();_u6=b1.object({type:b1.literal("function"),function:b1.object({name:b1.string(),description:b1.string().optional(),parameters:b1.record(b1.string(),b1.unknown()).optional()})}),vu6=b1.object({id:b1.string(),type:b1.literal("function"),function:b1.object({name:b1.string(),arguments:b1.string()})}),bu6=b1.discriminatedUnion("role",[b1.object({role:b1.literal("system"),content:b1.string(),name:b1.string().optional()}),b1.object({role:b1.literal("user"),content:b1.union([b1.string(),b1.array(b1.union([b1.object({type:b1.literal("text"),text:b1.string()}),b1.object({type:b1.literal("image_url"),image_url:b1.object({url:b1.string(),detail:b1.string().optional()})})]))]),name:b1.string().optional()}),b1.object({role:b1.literal("assistant"),content:b1.string().nullable().optional(),name:b1.string().optional(),tool_calls:b1.array(vu6).optional()}),b1.object({role:b1.literal("tool"),content:b1.string(),tool_call_id:b1.string()})]),xu6=b1.object({type:b1.literal("text")}),fu6=b1.object({type:b1.literal("json_object")}),yu6=b1.object({type:b1.literal("json_schema"),json_schema:b1.object({name:b1.string(),description:b1.string().optional(),schema:b1.record(b1.string(),b1.unknown()),strict:b1.boolean().optional()})}),gu6=b1.union([xu6,fu6,yu6]),hu6=b1.object({model:b1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:b1.array(bu6),stream:b1.boolean().optional().default(!1),temperature:b1.number().min(0).max(2).optional(),max_tokens:b1.number().positive().optional(),top_p:b1.number().min(0).max(1).optional(),frequency_penalty:b1.number().min(-2).max(2).optional(),presence_penalty:b1.number().min(-2).max(2).optional(),stop:b1.union([b1.string(),b1.array(b1.string())]).optional(),tools:b1.array(_u6).optional(),tool_choice:b1.union([b1.literal("auto"),b1.literal("none"),b1.literal("required"),b1.object({type:b1.literal("function"),function:b1.object({name:b1.string()})})]).optional(),response_format:gu6.optional(),user:b1.string().optional()});I68=class I68 extends Error{constructor($){super($);this.name="MessageConversionError"}};V68=new Q1;V68.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),Q=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(pU("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(pU("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(pU("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Y=await $.req.json(),X=hu6.safeParse(Y);if(!X.success){let w=X.error.issues[0]??{message:"Invalid request",path:[]};return $.json(pU(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let J=X.data,G=uu6(J.model);if(!G)return $.json(pU("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)=>xz(E.providerId));if(!j)return $.json(pU("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(pU(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),U=cu6(J.messages),N=J.tools?mu6(J.tools):void 0,B=du6(J.response_format),O=iu6(),L=Math.floor(Date.now()/1000);if(J.stream)return xO($,async(w)=>{let j=q68(F,U,N,J,B,$.req.raw.signal);try{let E=Qm(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>=Cu6)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:M68(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=q68(F,U,N,J,B,$.req.raw.signal),j=await UU(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:M68(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(pU("Request aborted","invalid_request_error"),400);if(X.name==="MessageConversionError")return $.json(pU(X.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",X.message,X.stack),$.json(pU(X.message,"server_error"),500)}});k68=V68});function pu6($){if(typeof $!=="object"||$===null)return!1;let Q=$.githubRepo?.url;return typeof Q==="string"&&Q.length>0}function C68(){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=d0(Q);if(!Y)return Z.json({error:"Authentication required"},401);let J=(Z.req.query("site")??"").trim().toLowerCase();if(!KZ(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(_A(U)!==J)continue;if(!pu6(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 _68=D(()=>{G8();fG()});var b68;var v68=D(()=>{b68={name:"decocms",version:"4.409.0",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^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 ou6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??tu6}}var x68,tu6="https://ph.studio.decocms.com",f68;var y68=D(()=>{G8();Nr();Yf();E9();U$();lK1();v68();x68=new Q1;x68.get("/",($)=>{let Z={version:b68.version,theme:E$$(),...RK().logo&&{logo:RK().logo},...WO()&&{internalUrl:ac1()},...z0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!z0().firecrawlApiKey,hostingEnabled:!!z0().controlplaneRestUrl&&!!z0().controlplaneServiceToken,hostingControlPlaneGa:z0().hostingControlPlaneGa,monitorEnabled:!!z0().clickhouseAnalyticsUrl&&!!z0().clickhouseAnalyticsPassword,monitorGa:z0().monitorGa,plansEnabled:z0().plansEnabled,auth:ds$(),posthog:ou6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:nO()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});f68=x68});function Oy($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function zU1($){return(Oy($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((Q)=>Q.charAt(0).toUpperCase()+Q.slice(1)).join(" ")}function g68($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Oy($))}&sz=${Z}`}function ru6($,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 h68($){let{brand:Z,domain:Q,score:Y}=$,X=typeof Y==="number"?`${Z} Deco Score \u2014 ${Math.round(Y)}/100 \xB7 decocms`:`${Z} Deco Score \xB7 decocms`,J=ru6(`How does ${Q} really perform? See the full ${Z} Deco Score \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,200);return{title:X,description:J}}import{z as L$}from"zod";var au6,u68;var l68=D(()=>{au6=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())}),u68=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(au6)})),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 c68($,Z,Q){let Y=Q?`?${new URLSearchParams({lang:Q}).toString()}`:"";return`${uK({})}/api/v2/public/diagnostics/${encodeURIComponent($)}/onepager${Z}${Y}`}async function $S0($,Z={}){let Q=await fetch(c68($,"",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 u68.parse(await Q.json())}async function m68($,Z={}){let Q=await fetch(c68($,".md",Z.lang),{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 PU1=D(()=>{l68();jw()});import{join as d68}from"path";async function eu6($){try{let Z=await $S0($,{signal:AbortSignal.timeout(su6)});if(!Z?.scanned_at)return null;return{brand:Z.brand.trim()||zU1($),...Z.score!==null?{score:Z.score}:{}}}catch{return null}}function iJ($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function $l6($,Z){let Q=Oy($),Y=Z?.brand?.trim()||zU1(Q),X=g68(Q,128),G=`${(z0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(Q)}`,{title:W,description:K}=h68({brand:Y,domain:Q,score:Z?.score}),H=`${G}/og.png`,F=`${Y} Deco Score 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 Zl6($,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 i68($){let Z=new Q1;return Z.get("/:domain/og.png",async(Q)=>{let Y=Oy(Q.req.param("domain")),X=async()=>{let J=$?Bun.file(d68($,"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(Ql6)}),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=Oy(Q.req.param("file").replace(/\.md$/,""));try{let X=await m68(Y,{lang:Q.req.query("lang")?.trim()||void 0,signal:AbortSignal.timeout(Yl6)});if(X===null)return Q.text("Deco Score 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("Deco Score unavailable",502)}}),Z.get("/:domain",async(Q)=>{let Y=Q.req.param("domain"),X=$?d68($,"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 eu6(Oy(Y)),K=$l6(Y,W);return Q.html(Zl6(G,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return Q.html(G)}}),Z}var su6=2500,Ql6=1e4,Yl6=1e4;var p68=D(()=>{G8();jw();PU1();U$()});function ZS0($,Z){return fetch(`${uK({})}${$}`,Z)}async function Xl6($,Z){let Q=await $S0($,{lang:Z});if(!Q)return{status:"not_found",report:null};return Q.scanned_at?{status:"ready",report:Q}:{status:"empty",report:null}}function Gl6($){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 Jl6,yO,n68=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},t68;var o68=D(()=>{G8();hG();jw();PU1();Jl6=new Set(["complete","errored","terminated","unknown"]);yO=new Q1;yO.use("*",async($,Z)=>{let Q=await _8.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});yO.use("/link-token/*",n68);yO.use("/suggest",n68);yO.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 Xl6(Z,Q))}catch{return $.json({error:"report read failed"},502)}});yO.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}=Gl6(Q);if(!Y)return $.json({error:"domain is required"},400);let J=Z?.email;try{let G=await ZS0("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${EA({})}`},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)}});yO.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let Q=await ZS0(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${EA({})}`}});if(!Q.ok)return $.json({error:`status HTTP ${Q.status}`},502);let X=(await Q.json()).status??"unknown",J={done:Jl6.has(X),status:X};return $.json(J)}catch{return $.json({error:"status failed"},502)}});yO.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let Q=await ZS0(`/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)}});yO.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let Q=await ZS0(`/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:[]})}});t68=yO});var Wl6=1048576,AU1;var r68=D(()=>{G8();fW();U$();MK1();AU1=new Q1;AU1.post("/webhook",V5({maxSize:Wl6,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=z0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let Q=await $.req.text();if(!Ys$(Q,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let X=Xs$(Q);if(!X)return $.json({error:"invalid payload"},400);let J=await Js$(X);return console.log("stripe webhook",{eventId:X.id,type:X.type,livemode:X.livemode,...J}),$.json({received:!0})})});import{timingSafeEqual as Kl6}from"crypto";function Ul6($,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 Kl6(Buffer.from(X),Buffer.from(Y))}function Nl6($,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 a68($){let Z=new Q1;return Z.post("/webhook",V5({maxSize:Hl6,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(!Ul6(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"&&!Fl6.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 I41())?.markTenantPoolsDirty(F,H)??[];return Q.json({ok:!0,pools:N})}let W=Nl6(J??"",G);if(W.length===0)return Q.json({ok:!0,ignored:"no-pr"});let K=await Bl6($,W);return Q.json({ok:!0,refreshed:K})}),Z}async function Bl6($,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 dV$(K,G.organizationId,G.taskBoardItemId)!==null)Q++}catch(W){console.error(`[github-webhook] pr card refresh failed for ${G.taskBoardItemId}:`,W)}}return Q}var Hl6=5242880,Fl6;var s68=D(()=>{G8();fW();QH();P7();Fl6=new Set(["check_suite","issue_comment"])});function e68($){let Z=new qO($.db,new FG($.encryptionKey)),Q=new Q1;return Q.get("/attachments/:token",async(Y)=>{let X=JI$(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 $58=D(()=>{G8();vz();_51();kj()});function Z58($){let Z=new qO($.db,new FG($.encryptionKey));async function Q(X,J){let G=In$(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 fI0(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",V5({maxSize:Ol6}),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 Ol6=1048576;var Q58=D(()=>{G8();fW();vz();yI0();ax()});import{DBOS as QS0,SchedulerMode as Dl6}from"@dbos-inc/dbos-sdk";function X58($){RU1=$}function J58(){if(!RU1)throw Error("[jira-trigger] runtime not initialized \u2014 setJiraTriggerSweepRuntime() must run before the workflow fires");return RU1}function G58(){let $=J58();return new qO($.db,new FG($.encryptionKey))}async function jl6($,Z){try{let Q=await G58().getById($);if(!Q?.enabled||!Q.boardId)return{integrationId:$,started:0};let Y=await PW(J58().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 "-${Y58}m"`,K=0,H;for(let F=0;F<wl6;F++){let U=await J.searchIssues({jql:W,nextPageToken:H,expandChangelog:!0});for(let N of U.issues){let B=Vn$(N,N.changelog?.histories??[],Z);for(let O of B)if(await fI0(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 El6($,Z){let Q=new Date($.getTime()-Y58*60000),Y=await QS0.runStep(()=>G58().listEnabledIds(),{name:"loadJiraIntegrations"});if(Y.length===0)return;let X=await Promise.all(Y.map((J)=>QS0.runStep(()=>jl6(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 W58(){if(TU1)return;TU1=QS0.registerWorkflow(El6,{name:"jiraTriggerSweepWorkflow"}),QS0.registerScheduled(TU1,{name:"jiraTriggerSweepWorkflow",crontab:Ll6,mode:Dl6.ExactlyOncePerIntervalWhenActive})}var Ll6="7-59/10 * * * *",Y58=35,wl6=5,RU1=null,TU1=null;var K58=D(()=>{vz();ax();kj();yI0()});function H58($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var F58,zl6,Pl6,U58;var N58=D(()=>{G8();TK();Mm();$c();F58=new Q1,zl6=["range","if-none-match","if-modified-since"],Pl6=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];F58.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),Q=Z.organization?.id;if(!Z.auth?.user?.id){if(od($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new T$(401,{message:"Authentication required"})}if(!Q)throw new T$(401,{message:"Organization context required"});let Y=$.req.path.replace(/^.*\/files\//,"");if(!Y)throw new T$(400,{message:"Missing file key"});let X=await M10(Y,Z);if(!X)throw new T$(503,{message:"Object storage not configured"});if(X.startsWith("data:")&&JW()){let K=X.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new T$(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 H58(N,H),new Response(U,{status:200,headers:N})}let J=new Headers;for(let K of zl6){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 T$(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 T$(502,{message:"Upstream storage error"});let W=new Headers;for(let K of Pl6){let H=G.headers.get(K);if(H)W.set(K,H)}return W.set("Cache-Control","private, max-age=86400"),H58(W,W.get("content-type")??""),new Response(G.body,{status:G.status,headers:W})});U58=F58});var B40=b((Dy)=>{var Al6=Dy&&Dy.__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]}),Tl6=Dy&&Dy.__exportStar||function($,Z){for(var Q in $)if(Q!=="default"&&!Object.prototype.hasOwnProperty.call(Z,Q))Al6(Z,$,Q)};Object.defineProperty(Dy,"__esModule",{value:!0});Tl6($G(),Dy)});var D58=b((B58)=>{Object.defineProperty(B58,"__esModule",{value:!0});B58.version=void 0;B58.version="3.4.0"});var j58=b((nU)=>{var Rl6=nU&&nU.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(nU,"__esModule",{value:!0});nU.NodeTransport=nU.VERSION=void 0;nU.nodeResolveHost=Sl6;var m5=B40(),ql6=M0("net"),qU1=M0("tls"),Ml6=M0("path"),L58=M0("fs"),Il6=Rl6(M0("dns")),Vl6=D58();nU.VERSION=Vl6.version;var kl6="nats.js";class w58{socket;version;lang;yields=[];signal=(0,m5.deferred)();closedNotification=(0,m5.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=kl6,this.version=nU.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,ql6.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,Ml6.resolve)($),!(0,L58.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,L58.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,qU1.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,qU1.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 qU1.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}}nU.NodeTransport=w58;function Sl6($){let Z=(0,m5.deferred)();return Il6.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 T58=b((A58)=>{Object.defineProperty(A58,"__esModule",{value:!0});A58.connect=Cl6;var E58=j58(),z58=B40(),P58=B40();function Cl6($={}){if((0,P58.hasWsProtocol)($))return Promise.reject(P58.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,z58.setTransportFactory)({factory:()=>{return new E58.NodeTransport},dnsResolveFn:E58.nodeResolveHost}),z58.NatsConnectionImpl.connect($)}});var R58=b((gO)=>{var vl6=gO&&gO.__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]}),bl6=gO&&gO.__exportStar||function($,Z){for(var Q in $)if(Q!=="default"&&!Object.prototype.hasOwnProperty.call(Z,Q))vl6(Z,$,Q)};Object.defineProperty(gO,"__esModule",{value:!0});gO.connect=void 0;var xl6=T58();Object.defineProperty(gO,"connect",{enumerable:!0,get:function(){return xl6.connect}});bl6(B40(),gO)});function V58($){let Z=$?.connectFn??hl6,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:gl6,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=XQ(yl6,fl6,O-1,2,0.5);await i$(L)}}return{init(N,B){if(X)return;X=!0,J=!1;let O=B?.creds?q58.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=I58.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 hl6($){return M58.connect($)}var q58,M58,I58,fl6=100,yl6=3000,gl6=3000;var k58=D(()=>{N8();q58=C(Zp(),1),M58=C(R58(),1),I58=C(WN(),1)});function YS0($){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 XS0($,Z){return`${$}.${Z}`}class MU1{cache;constructor($){this.cache=YS0({ttlMs:$?.ttlMs??ul6,maxSize:$?.maxSize??ll6})}async get($,Z){return this.cache.get(XS0($,Z))??null}async set($,Z,Q){this.cache.set(XS0($,Z),Q)}async invalidate($,Z){this.cache.delete(XS0($,Z)),this.cache.delete(XS0($,`${Z}:decisions`))}teardown(){this.cache.clear()}}var ul6=600000,ll6=5000;var S58=()=>{};function JS0($,Z){return`${$}:${Z}`}function IU1($){let Z=YS0({ttlMs:$?.ttlMs??cl6,maxSize:$?.maxSize??ml6}),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(C58,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(JS0(K,H))},set(K,H,F){Z.set(JS0(K,H),F)},invalidate(K,H){Z.delete(JS0(K,H)),W(K,H)},start(){if(G)return;let K=Q?.();if(!K)return;G=K.subscribe(C58),(async()=>{for await(let H of G)try{let F=JSON.parse(J.decode(H.data));if(F.originId===Y)continue;Z.delete(JS0(F.organizationId,F.keyId))}catch{}})().catch(console.error)},teardown(){G?.unsubscribe(),G=null,Z.clear()}}}var C58="studio.ai-provider-keys.invalidate",cl6=30000,ml6=5000;var _58=()=>{};class VU1{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 v58=($)=>{let Z;return()=>Z??=$()},kU1,SU1;var b58=D(()=>{C6();kU1=v58(()=>z$.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),SU1=v58(()=>z$.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function rl6($=y58){return{name:zU,subjects:[`${uZ1}.>`],storage:MH.StorageType.File,max_age:pl6,max_bytes:tl6,max_msgs_per_subject:ol6,discard:MH.DiscardPolicy.Old,retention:MH.RetentionPolicy.Limits,duplicate_window:nl6,num_replicas:$}}class g58{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 x58($){let Z=f58.headers();for(let[Q,Y]of Object.entries($))Z.set(Q,Y);return Z}function $c6($,Z){let Q=0;return{publish(Y,X,J,G){Y.publish(X,J,G?{headers:G}:void 0).catch((W)=>{if(Q++,il6().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 Zc6($,Z){return $.info?.cluster?Z:1}function Qc6($){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 CU1{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=rl6(X);try{await Y.streams.info(zU),await Y.streams.update(zU,J)}catch(G){if(G instanceof Error&&G.message.includes("stream not found"))await Y.streams.add(J),await Y.streams.update(zU,J);else if(G instanceof Error&&/can ?not change.*storage|storage type/i.test(G.message))await Y.streams.delete(zU),await Y.streams.add(J);else throw G}},Q=await M8(async()=>{let Y=this.options.getJetStreamManager?await this.options.getJetStreamManager():await MH.jetstreamManager($),X=Zc6($,y58);try{await Z(Y,X)}catch(J){if(X<=1||!Qc6(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:xm});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=$c6(Z,Y),G=!1,W=()=>{if(G)return;G=!0;let H=VC$(Z);X.publish(H.subject,H.data).catch(()=>{})};Q.addEventListener("abort",W,{once:!0});let K=(H)=>{let F=performance.now(),U=cZ1(H,{runId:Z}),N=performance.now()-F;kU1().record(N),SU1().add(1,{"org.id":Y??"unknown"}),el6?.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?x58(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(),sl6)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 M8(()=>$.publish(Z.subject,Z.data,{...Z.headers?{headers:x58(Z.headers)}:{},...Z.msgId?{msgID:Z.msgId}:{}}),{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:xm}),!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=cZ1(Z,{runId:$,dedup:Q});kU1().record(performance.now()-X),SU1().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=IC$({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=yj($),W;try{W=await M8(async()=>{return(await Y.consumers.get(zU,{filter_subjects:G,deliver_policy:X})).consume()},{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:xm})}catch(L){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",L?.message??L),null}let F=GR0({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(QR0()).pipeThrough(YR0()).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(zU,{filter:yj($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var MH,f58,dl6=($)=>{let Z;return()=>Z??=$()},il6,pl6=86400000000000,nl6=120000000000,tl6=4294967296,y58,ol6=500000,al6,sl6,el6;var h58=D(()=>{N8();mZ1();WR0();XR0();C6();b58();MH=C(WN(),1),f58=C(Zp(),1),il6=dl6(()=>z$.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"})),y58=Math.max(1,Number(process.env.DECOPILOT_STREAM_REPLICAS??3)||3);al6=process.env.STREAM_ENCODE_TRACE==="1",sl6=process.env.DECOPILOT_STREAM_TRACE==="1";el6=al6?new g58:null});function GS0($,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 u58=D(()=>{e8()});class _U1{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 Yc6($,Z){let Q=$.startsWith("thread:")?YH($):$;return[...new Set([Z,Q].filter((Y)=>!!Y))]}async function vU1($,Z){let Q=Z.organizationId;try{let Y=await $.storage.taskBoard.linkedThreadIds(Z.id,Q);for(let X of Y){let J=await HU($,X);if(!J?.owner||!J?.name)continue;let G=await $.storage.threads.get(X),W=await uc($,{threadId:X,runBranch:G?.branch}),K=Yc6(W,await VA0($,X)),H=await Ie($,Q,Z$1(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 sG(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 l58=D(()=>{iZ();jW();P7()});async function c58($,Z,Q){let Y=Z.organizationId;if(!VX(Z))return!1;if(!sx(Q))return!1;if(await $.storage.taskBoard.hasHumanRejectedDone(Z.id,Y))return!1;let X=await $.storage.organizationSettings.get(Y),J=oF(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 m58=D(()=>{C4();_Y();zm();WH();V9()});function Fc6($){return $ instanceof zX}function d58($,Z){return Z-$>=Kc6}class bU1{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??Xc6;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??Gc6,Q=this.options.itemIntervalMs??Jc6,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()-M51),o91);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()-Hc6));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 p91(this.taskBoard,X,Y),await n91(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!==R$.progress||VX(W)||W.assigneeId!==j8)continue;let K=await this.contextFactory(J,W.assignedBy??W.createdBy);if(!K)continue;if(await vU1(K,W)){if(await this.taskBoard.clearSweepBudget(X,J),await this.reconcileItem(X,J,Z))Q++;continue}if(!d58(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:R$.progress,to:R$.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!==R$.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),Fc6(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()+Wc6)).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!==R$.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(!d58(CB(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 vU1(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 Tm(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 c58(G,Y,W))return!0;if(await __$(G,Y))return!0;if(await this.resolveConflictFromSweep(G,Y,W))return!0;if(!X)return!1;if(!c91(W))return!1;return await Pm(G,Y,{previewMatchesHead:m91(W)}),!0}async resolveConflictFromSweep($,Z,Q){let Y=Q.find((X)=>X.state!=="closed"&&X.conflict===!0);if(!Y)return!1;return await vj($,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 Xc6=60000,Jc6=300000,Gc6=50,Wc6=60000,Kc6=900000,Hc6=120000;var i58=D(()=>{C4();jT0();l58();jU();y10();WH();m58();V9();FW();r91();P7();H10();Am()});import{readdir as Uc6,rm as WS0}from"fs/promises";import{join as KS0}from"path";async function HS0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-Nc6),Z.setUTCHours(0,0,0,0);let Q=0;try{let Y=await Ly($);for(let X of Y)if(/^\d{4}$/.test(X))Q+=await p58($,X,Z);else if(!X.startsWith(".")){let J=KS0($,X),G=await Ly(J);for(let K of G){if(!/^\d{4}$/.test(K))continue;Q+=await p58(J,K,Z)}if((await Ly(J)).length===0)await WS0(J,{recursive:!0,force:!0})}}catch(Y){console.warn("monitoring retention cleanup failed:",Y)}return Q}async function p58($,Z,Q){let Y=0,X=KS0($,Z),J=await Ly(X);for(let W of J){if(!/^\d{2}$/.test(W))continue;let K=KS0(X,W),H=await Ly(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=KS0(K,U);await WS0(B,{recursive:!0,force:!0}),Y++}}if((await Ly(K)).length===0)await WS0(K,{recursive:!0,force:!0})}if((await Ly(X)).length===0)await WS0(X,{recursive:!0,force:!0});return Y}async function Ly($){try{return(await Uc6($)).filter((Q)=>!Q.startsWith("."))}catch{return[]}}var Nc6=30;var xU1=()=>{};import{DBOS as fU1,SchedulerMode as Bc6}from"@dbos-inc/dbos-sdk";async function Dc6(){let $=[uW(),qy(),$N()],Z=0;for(let Q of $)try{Z+=await HS0(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 Lc6($,Z){await fU1.runStep(()=>Dc6(),{name:"monitoringRetention"})}function t58(){if(n58)return;n58=!0;let $=fU1.registerWorkflow(Lc6,{name:"monitoringRetentionWorkflow"});fU1.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:Oc6,mode:Bc6.ExactlyOncePerIntervalWhenActive})}var Oc6="23 4 * * *",n58=!1;var o58=D(()=>{D3();xU1()});function r58($){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 kA($.db,Z,Y.role);return X.boundAuth=jK1({auth:X.authInstance,headers:new Headers,role:Y.role,permissions:J,userId:Q}),X.access=new OP(Q,void 0,X.boundAuth,Y.role,"self"),_j(X,{id:Y.orgId,slug:Y.orgSlug}),X}}var a58=D(()=>{BK();pF()});function wc6(){return[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}]}function jc6(){return{services:wc6(),migrationsStatus:"pending",serverUrl:null,logs:[]}}function zc6(){for(let $ of Ec6)$()}function s58($){let Z=[...yU1.logs,$];yU1={...yU1,logs:Z.length>500?Z.slice(-500):Z},zc6()}function gU1(){return Pc6}var yU1,Ec6,Pc6=!1;var hU1=D(()=>{yU1=jc6(),Ec6=new Set});import{EventEmitter as Ac6}from"events";var uU1;var e58=D(()=>{hU1();uU1=new Ac6;uU1.on("request",($)=>{s58($)})});function $98(){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=Mi(N.params.name),O=N.params.arguments||{},L=Object.keys(O).map((j)=>Mi(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}${Mi(N.method)}${Z9.reset}`}}catch{}}let W=Mi(X);if(X.startsWith("/mcp/conn_")){let F=X.split("/")[2]??"";W=`/mcp/${Z9.mcp}${Mi(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=Rc6(Y),H=G?"\u25C0":"\u2190";if(!gU1())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=Tc6(U),B=F<1000?`${F}ms`:`${(F/1000).toFixed(1)}s`,O=G?"\u25B6":"\u2192";if(!gU1())console.log(`${Z9.dim}${O}${Z9.reset} ${K}${Y}${Z9.reset} ${W}${J?` ${J}`:""} ${N}${U}${Z9.reset} ${Z9.duration}${B}${Z9.reset}`);uU1.emit("request",{method:Y,path:Mi(X),status:U,duration:F,timestamp:new Date})}}}var Z9,Tc6=($)=>{if($>=500)return Z9.serverError;if($>=400)return Z9.clientError;if($>=300)return Z9.redirect;return Z9.ok},Rc6=($)=>{return Z9[$]||Z9.reset},Mi=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var Z98=D(()=>{hU1();e58();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 J98}from"crypto";import{mkdir as qc6,readdir as Mc6,rm as Q98,stat as G98}from"fs/promises";import{join as cU1,relative as Ic6}from"path";import{z as a$}from"zod";function K98($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return cU1(Vc6,Z)}function H98($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function lU1($,Z){let Q=K98($),Y=H98(Z);return cU1(Q,Y)}function kc6($,Z,Q,Y){let X=z0().encryptionKey||"dev-secret",J=`${$}:${Z}:${Q}:${Y}`;return J98("sha256",X).update(J).digest("hex")}function X98($,Z,Q,Y,X){let J=Math.floor(Date.now()/1000)+Y,G=kc6(Z,Q,J,X),W=new URL(`/api/dev-assets/${Z}/${H98(Q)}`,$);return W.searchParams.set("expires",J.toString()),W.searchParams.set("signature",G),W.searchParams.set("method",X),W.toString()}function F98($,Z,Q){let Y=`${$}:${Z.getTime()}:${Q}`;return`"${J98("md5","etag").update(Y).digest("hex")}"`}async function U98($,Z,Q,Y,X){try{let J=await Mc6($,{withFileTypes:!0});for(let G of J){let W=cU1($,G.name),H=Ic6(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 U98(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 G98(W);X.objects.push({key:H,size:F.size,lastModified:F.mtime.toISOString(),etag:F98(W,F.mtime,F.size)})}catch{}}}}catch{}}function N98($,Z){let Y=G0($).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=K98(Y);await qc6(F,{recursive:!0});let U={objects:[],commonPrefixes:new Set};await U98(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=lU1(Y,J.key),W=await G98(G);return{contentType:DH1(J.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:F98(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=zO(J.expiresIn,Y98);return{url:X98(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=zO(J.expiresIn,Y98);return{url:X98(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=lU1(Y,J.key);try{return await Q98(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=lU1(Y,K);try{await Q98(H),G.push(K)}catch(F){W.push({key:K,message:F instanceof Error?F.message:"Unknown error"})}})),{deleted:G,errors:W}}}]}async function mU1($,Z,Q){let Y=N98(Z,Q),X=new IL({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:TZ});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 Y3({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await X.connect(J),MW(X,J,$,"mcp:dev-assets")}async function B98($,Z,Q,Y){let J=N98(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 Vc6="./data/assets",Y98=3600,W98,O98;var D98=D(()=>{U$();cm();G8();aY0();lm();sX();PO();aV0();W98=new Q1;W98.all("/",async($)=>{let Z=$.get("studioContext"),Q=new URL($.req.url),Y=`${Q.protocol}//${Q.host}`;return mU1($.req.raw,Z,Y)});O98=W98});var L98={};M6(L98,{mountDevRoutes:()=>Sc6});function Sc6($,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 mU1(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 B98(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",O98);let Q=new Q1;Q.use("*",RH({mountPath:"/api/dev-assets"})),Q.route("/",rV0({orgFromPath:!1})),$.route("/api/dev-assets",Q)}var w98=D(()=>{G8();KH1();aV0();D98()});var I98={};M6(I98,{watchHandler:()=>M98,resolveCorsOrigin:()=>R98,isSsoExemptPath:()=>A98,isAllowedOAuthRedirectUri:()=>q98,createApp:()=>uc6});import{readFileSync as Cc6}from"fs";import{PrometheusSerializer as _c6}from"@opentelemetry/exporter-prometheus";import{DBOS as hO}from"@dbos-inc/dbos-sdk";import{oAuthDiscoveryMetadata as xc6,oAuthProtectedResourceMetadata as fc6}from"better-auth/plugins";async function vc6($){let Z=$.connect(),Q;try{Q=await Promise.race([Z,E98(j98)])}catch{return Z.then((Y)=>Y.release(!0)).catch(()=>{}),!1}try{return await Promise.race([Q.query("SELECT 1"),E98(j98)]),Q.release(),!0}catch{return Q.release(!0),!1}}function E98($){return new Promise((Z,Q)=>setTimeout(()=>Q(Error("pg health-check timeout")),$))}function A98($){return $.startsWith("/api/org-sso/")||/^\/api\/[^/]+\/sso\//.test($)||$.startsWith("/api/auth/")||$.startsWith("/api/tools/management")||$.startsWith("/oauth-proxy/")||/^\/api\/[^/]+\/oauth-proxy\//.test($)||$.startsWith(`${fV0}/`)||$.startsWith(`${SV0}/`)}function T98($){return $==="local.studio.decocms.com"}function R98($,{baseUrl:Z,requestOrigin:Q}){let Y;try{Y=new URL($).hostname}catch{return null}if(Y==="localhost"||Y==="127.0.0.1")return $;if(T98(Y))return $;let X=Z??Q;try{if(new URL(X).origin===$)return $}catch{}return null}function q98($,Z){return $.origin===new URL(Z).origin||$.hostname==="localhost"||T98($.hostname)}async function uc6($={}){let Z=$.database??P8(),Q=!1;e5.stop().catch((Q0)=>{console.error("[SSEHub] Error stopping previous broadcast (HMR cleanup):",Q0)});let Y,X,J,G,W=new MU1,K,H,F,U=null;if($.disableNats)K=IU1(),Y={get:async()=>null,set:async()=>{},invalidate:async()=>{},teardown:()=>{}},X=null,J=null,G=new p10,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=V58();let Q0=z0().natsCredsPath,w0;if(Q0)try{w0=Cc6(Q0,"utf8")}catch(y0){console.error(`[app] failed to read NATS_CREDS at ${Q0}; connecting anonymously`,y0)}U.init(z0().natsUrls,w0?{creds:w0}:void 0);let e=pe0()?new ke0({getJetStream:()=>U.getJetStream()}):null;e?.init().catch(()=>{}),Y=e;let i=new c41({getJetStream:()=>U.getJetStream()});i.init().catch(()=>{}),X=i;let m0=new $f(f91,{getJetStream:()=>U.getJetStream()}),V0=new $f(F10,{getJetStream:()=>U.getJetStream()});m0.init().catch(()=>{}),V0.init().catch(()=>{}),J={reads:m0,cards:V0};let t0=new RQ1({getJetStream:()=>U.getJetStream()});t0.init().catch(()=>{}),G=t0,K=IU1({getConnection:()=>U.getConnection()}),H=new VU1({getConnection:()=>U.getConnection()}),F=new CU1({getConnection:()=>U.getConnection(),getJetStream:()=>U.getJetStream()}),qs$(U),U.onReady(()=>{e?.init().catch((y0)=>{console.error("[McpListCache] Deferred init failed:",y0)}),i.init().catch((y0)=>{console.error("[SkillCatalogCache] Deferred init failed:",y0)}),m0.init().catch((y0)=>{console.error("[PrReadCache] Deferred init failed:",y0)}),V0.init().catch((y0)=>{console.error("[PrCardCache] Deferred init failed:",y0)}),t0.init().catch((y0)=>{console.error("[ConnectionCircuitStore] Deferred init failed:",y0)}),K.start(),tK$(()=>U.getConnection()),F.init().catch((y0)=>{console.warn("[Decopilot] StreamBuffer init failed (late-join disabled):",y0)})})}if(PE)await PE();Se0(Y),d41(X),y91(J),qQ1(G);let B={storage:new Uh(Z.db),sseHub:e5,onThreadFinished:async(Q0,w0)=>qm(new aG(Z.db),Q0,w0,new DG(Z.db))},O=new oZ1(B),L=new B80(Z.db),w=new _U1(L);w.start(),S_$(H),H.start((Q0)=>{iT0(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;XH1(j),U?.onReady(()=>XH1(j)),YY1(j),U?.onReady(()=>YY1(j)),F.init().catch((Q0)=>{console.warn("[Decopilot] StreamBuffer init failed, attach/late-join disabled:",Q0)}),PE=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(),oK$(),G.teardown(),Se0(null),d41(null),y91(null),qQ1(null)};let E=new Q1;if(E.use("*",PQ1({enabled:(Q0)=>td(Q0,"debug")==="1"})),E.use("*",CS0),E.use("/*",zs$({origin:(Q0,w0)=>R98(Q0,{baseUrl:z0().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'")}),!z0().noTui)E.use("*",$98());E.use("*",async(Q0,w0)=>{if(await w0(),fi(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 vc6(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 xS0.collect(),e=bc6.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(!yc6.has(w0))return Q0.json({error:`Unknown queue: ${w0}`},404);let[e,i]=await Promise.all([hO.listQueuedWorkflows({queueName:w0,status:"ENQUEUED",loadInput:!1,loadOutput:!1}),hO.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",f68),E.route("/api/_reports",t68),E.route("/api/_stripe",AU1),E.route("/api/_github",a68({taskBoard:()=>n,contextFactory:()=>g})),E.route("/api/_git",Qi);let T={db:Z.db,encryptionKey:z0().encryptionKey};E.route("/api/_jira",Z58(T)),E.route("/api/_jira",e68(T)),E.route("/report",i68($.clientDir)),E.route("/api/auth/custom",is$),E.route("/api/auth/desktop",os$),E.all("/api/auth/admin/*",Ie$),E.all("/api/auth/*",async(Q0)=>{return await _8.handler(Q0.req.raw)});let P=er$();P.use("/.well-known/oauth-protected-resource/mcp/:connectionId",M80),P.use("/mcp/:connectionId/.well-known/oauth-protected-resource",M80),E.route("/",P),E.get("/.well-known/oauth-protected-resource/api/:org/mcp/:connectionId",H80),E.route("/",Xa$()),E.use("/oauth-proxy/:connectionId/*",M80),E.all("/oauth-proxy/:connectionId/*",z98);let A=async(Q0)=>{let e=await gc6()(Q0.req.raw),i=await e.json();return Response.json(i,e)};E.use("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",M80),E.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",A);let q=async(Q0)=>{let e=await hc6()(Q0.req.raw),i=await e.json();return Response.json(i,e)};E.get("/.well-known/oauth-authorization-server/*/:gateway?/:connectionId?",q);let x=As$({ttlMs:120000}),_=await na$({db:Z.db,auth:_8,encryption:{key:z0().encryptionKey},observability:{tracer:tO,meter:z$},modelListCache:W,providerKeyCache:K,memberRoleCache:x});vQ.set(_),uc1({db:Z.db,baseUrl:f5()}),ta$({db:Z.db}),sa$({db:Z.db}),Gs$({db:Z.db}),X58({db:Z.db,encryptionKey:z0().encryptionKey}),WV$({db:Z.db}),Ns$({db:Z.db}),SV$({db:Z.db});let V=uQ0(Z.db),y=new Oo(Z.db),g=r58({db:Z.db});wQ1({storage:V,studioContextFactory:g}),J71({systemDatabaseUrl:rt0(z0().databaseUrl,z0().databasePgSsl),studioContextFactory:g,deps:{runRegistry:O,cancelBroadcast:H,streamBuffer:F,sseHub:e5}}),sZ1({dispatchRunFn:zC$,studioContextFactory:g,deps:{runRegistry:O,cancelBroadcast:H,streamBuffer:F,sseHub:e5}});let l=new Uh(Z.db),n=new aG(Z.db),p=new DG(Z.db),W0=new bU1(n,g,p);if(z0().taskBoardReviewSweeperEnabled){W0.start();let Q0=PE;PE=async()=>{await Q0?.(),W0.dispose()}}lC$({getJetStream:()=>U?.getJetStream()??null,getJetStreamManager:async()=>{let Q0=U?.getConnection();return Q0?await P98.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(GS0(e5,w0,Q0,e),e)await qm(n,Q0,w0,p);return e},markRunRequiresAction:async(Q0,w0)=>{let e=await l.requiresActionIfInProgress(Q0,w0);return GS0(e5,w0,Q0,e),e},markRunFailed:async(Q0,w0,e,i)=>{let m0=await l.markRunFailed(Q0,w0,e,i);if(GS0(e5,w0,Q0,m0),m0)await qm(n,Q0,w0,p);return m0},clearSynthesizedError:async(Q0,w0)=>{await l.messageParts().replaceMessageParts(Q0,fj(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})=>{v1.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})=>{v1.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)}}),pS$({studioContextFactory:g,systemDatabaseUrl:rt0(z0().databaseUrl,z0().databasePgSsl),streamBuffer:F}),t58(),lc1(),ra$(),$s$(),Ks$(),W58(),NV$(),Os$(),CV$();let U0=async(Q0,w0,e)=>{let i=await V.findById(Q0,w0);if(!i)throw Error("Automation not found");return zQ1({automationId:i.id,organizationId:i.organization_id,triggerId:null})},H0=new $i(V,({automation:Q0,trigger:w0,contextMessages:e,idempotencyKey:i})=>i10({automationId:Q0.id,organizationId:Q0.organization_id,triggerId:w0.id,contextMessages:e},{idempotencyKey:i})),j0=[uW(),qy(),$N()];for(let Q0 of j0)HS0(Q0).then(()=>{}).catch((w0)=>console.error("[monitoring] Retention cleanup failed:",w0));let J0=()=>_8.api.deleteAllExpiredApiKeys().catch((Q0)=>console.error("[auth] Expired API key cleanup failed:",Q0));J0(),setInterval(J0,86400000).unref(),E.use("*",async(Q0,w0)=>{if(kS0(Q0.req.path))return w0();let e={measure:async(m0,V0)=>{qW(Q0,m0);try{return await V0()}finally{X3(Q0,m0)}}},i=await vQ.create(Q0.req.raw,{timings:e});i.automationRunner=U0,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/*",rd),E.use("/api/:org/v1/*",rd),E.use("/api/:org/files/*",rd),E.use("*",async(Q0,w0)=>{if(A98(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("/",hV0()),E.route("/api/org-sso",Z0),E.get("/api/tools/management",(Q0)=>{return Q0.json({tools:Ci0,grouped:BP()})}),E.use("/mcp/*",async(Q0,w0)=>{qW(Q0,"mcp");try{return await w0()}finally{X3(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(),V0=m0?`${m0}://${i.host}`:i.origin;return Q0.res=new Response(null,{status:401,headers:{"WWW-Authenticate":`Bearer realm="mcp",resource_metadata="${V0}${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),JW()){let{mountDevRoutes:Q0}=(w98(),wS0(L98));Q0(E,Y0)}let s=new Q1;s.use("*",RH({mountPath:"/mcp"})),s.route("/",yR0()),E.route("/mcp",s);let X0=new Q1;X0.use("*",RH({mountPath:"/mcp/self"})),X0.route("/",Vk0()),E.route("/mcp/self",X0);let u0=new Q1;u0.use("*",RH({mountPath:"/mcp"})),u0.route("/",uR0()),E.route("/mcp",u0),E.use("/api/:org/models/*",async(Q0,w0)=>{qW(Q0,"llm_models");try{return await w0()}finally{X3(Q0,"llm_models")}});let _0=me$({cancelBroadcast:H,streamBuffer:F,runRegistry:O});E.route("/api",_0),E.route("/api",U58);let j1=new Q1;j1.use("*",RH({mountPath:"/api"})),j1.route("/",_k0()),E.route("/api",j1),E.route("/api",k68);let i0=new Q1;i0.use("*",RH({mountPath:"/api"})),i0.route("/",vk0({tokenStorage:y,automationEventDispatcher:H0})),E.route("/api",i0);let L0=new Lo(Z.db),E0=new Q1;E0.use("*",RH({mountPath:"/api"})),E0.route("/",dV0()),E.route("/api",E0),E.route("/api/deco-sites",Y08()),E.route("/api/deco-apps",T68());let s0=new Q1;s0.use("*",RH({mountPath:"/api/deco-sites"})),s0.route("/",pV0()),E.route("/api/deco-sites",s0),E.route(fV0,Ve$()),E.route(x88,g88()),E.route("/api/_editor-resolve",C68()),E.route(as$,ss$()),E.route(SV0,Ke$());let P1=P68({kvStorage:L0,runRegistry:O,streamBuffer:F,sseHub:e5,cancelBroadcast:H,tokenStorage:y,automationEventDispatcher:H0,mountDevAssets:JW(),mcpAuth:Y0,oauthProxyHandler:z98,watchHandler:M98,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(),PE?Promise.resolve(PE()).finally(()=>{PE=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 x4$(Z).catch((Q0)=>console.error("[shutdown] Database close error:",Q0)),console.log("[shutdown] Cleanup complete.")},initDbos:async()=>{await hO.registerQueue(O3,{partitionQueue:!0,concurrency:OQ1,minPollingIntervalMs:DQ1}),await hO.registerQueue(B3,{partitionQueue:!0,concurrency:Y71,priorityEnabled:!0}),await hO.registerQueue(sU,{workerConcurrency:z0().decopilotMaxConcurrentHostedRuns,priorityEnabled:!0}),await hO.registerQueue(eU,{workerConcurrency:z0().sandboxMaxConcurrentHostedRuns,priorityEnabled:!0}),await hO.registerQueue(pO,{partitionQueue:!0,concurrency:iS$}),await hO.registerQueue(ME,kV$),await HH1(V),await Promise.allSettled(["automations-gate","automations-global","jira-push"].map((Q0)=>hO.deleteQueue(Q0))),await LQ1(Z.pool),QZ$().catch((Q0)=>{console.error("[studio-pack-backfill] failed:",Q0)}),cc1().catch((Q0)=>{console.error("[org-fs] public-sets boot sync kick failed:",Q0)})}})}var P98,j98=5000,PE=null,z98=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 dd(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 F80(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=Ya$(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=z0().baseUrl??j.origin;try{if(!q98(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(Ls$(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()),W0=p.indexOf(":");if(W0!==-1){let U0=decodeURIComponent(p.slice(0,W0)),H0=decodeURIComponent(p.slice(W0+1));A=U0||null,q=H0||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,W0]of y.entries())n.append(p,W0.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,W0=p.metadata&&typeof p.metadata==="object"?p.metadata:{};p.metadata={...W0,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 id(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:_})},M98=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&&(!LU(Y)||!await wU(Z)))return $.json({error:"forbidden"},403);let W=G?QT0:Y;if(G)XO({action:"watch_all_orgs",actorUserId:Q,actorOrgId:Y,targetOrgId:"all"});let K=crypto.randomUUID();return xO($,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()})})})},bc6,yc6,gc6=()=>fc6(_8),hc6=()=>xc6(_8);var V98=D(()=>{N8();U$();mc1();aa$();Zs$();Hs$();a10();E91();Ds$();H10();E9();$c();e8();G8();qV0();Ps$();AQ1();hG();pF();bK1();m3();C6();U6();lK1();rs$();es$();He$();nK1();ke$();ZH1();de$();WH1();iK();HV0();KH1();ne$();IV0();A68();NH1();R68();gR0();n10();S68();lR0();lF1();_68();hF1();y68();p68();o68();r68();s68();$58();Q58();K58();wH1();N58();uF1();fF1();k40();k58();DJ();lA0();h91();us();cs();IQ1();S58();_58();JH1();h58();rZ1();u58();an();jo();YO();V9();ZK1();i58();o58();RJ0();xU1();D3();FH1();QO();nZ1();RJ0();ZR0();Ei0();zi0();a58();Uu();Z98();ji();bK1();jm();vm();pT0();P98=C(WN(),1);bc6=new _c6,yc6=new Set([O3,B3,sU,eU,pO,ME])});var _98={};M6(_98,{resolveClientDir:()=>nc6,resolveAssetPathWithTraversalCheck:()=>C98,isPathWithinDirectory:()=>S98,createAssetHandler:()=>tc6});import{resolve as O40,dirname as lc6,join as cc6,extname as mc6,basename as dc6,sep as k98}from"path";function ic6($,Z){if($===Z||dc6($)==="index.html")return{"Cache-Control":"no-cache"};if($.includes(`${k98}assets${k98}`))return{"Cache-Control":"public, max-age=31536000, immutable"};return{}}function S98($,Z){let Q=O40(Z),Y=O40($);return Y===Q||Y.startsWith(Q+"/")}function C98({requestPath:$,clientDir:Z}){let Q=$.startsWith("/")?$.slice(1):$,Y=O40(Z,Q);if(!S98(Y,Z))return null;return Y}function nc6($,Z="../client"){let Q=new URL($),Y=lc6(Q.pathname);return O40(Y,Z)}function tc6($={}){let{env:Z="production",clientDir:Q=pc6,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=C98({requestPath:W,clientDir:Q});if(!K)return null;let H=cc6(K,"index.html"),F=O40(Q,"index.html"),U=J.headers.get("accept"),B=U?.includes("text/html")||U?.includes("*/*")&&["",".html"].includes(mc6(K))?[H,F]:[];for(let O of[K,...B])try{let L=Bun.file(O);if(await L.exists())return new Response(L,{headers:ic6(O,F)})}catch{}if(W.includes("/assets/"))return new Response("Not Found",{status:404,headers:{"Cache-Control":"no-store"}});return null}}var pc6="./dist/client";var v98=()=>{};var b98={};M6(b98,{tryUpgradePreviewWs:()=>Zm6,tryHandlePreviewHttp:()=>$m6,previewWebSocketHandler:()=>Qm6,parsePreviewBaseDomain:()=>ec6,isPreviewWsData:()=>FS0,extractHandleFromHost:()=>dU1});function ac6($){if($.method!=="GET")return!1;return($.headers.get("accept")??"").includes("text/html")}function sc6(){return new Response(rc6,{status:503,headers:{"content-type":"text/html; charset=utf-8","cache-control":"no-store","retry-after":"1","access-control-allow-origin":"*"}})}function ec6($){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 dU1($,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 $m6($,Z){let Q=dU1($.headers.get("host"),Z.baseDomain);if(!Q)return null;let Y=await Z.getRunner();if(!Y)return L40(503,"preview proxy not configured");let X=await Y.proxyPreviewRequest(Q,$);if(X.headers.get(kx)&&ac6($))return sc6();return X.headers.delete(kx),X}function L40($,Z){return new Response(JSON.stringify({error:Z}),{status:$,headers:{"content-type":"application/json","access-control-allow-origin":"*"}})}function FS0($){return typeof $==="object"&&$!==null&&$.kind==="preview"}async function Zm6($,Z,Q){if(($.headers.get("upgrade")??"").toLowerCase()!=="websocket")return null;let Y=dU1($.headers.get("host"),Q.baseDomain);if(!Y)return null;let X=await Q.getRunner();if(!X)return L40(503,"preview proxy not configured");let J=await X.resolvePreviewUpstreamUrl(Y);if(!J)return L40(404,"sandbox not found");let G=new URL($.url);if(G.pathname.startsWith("/_sandbox"))return L40(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 L40(426,"upgrade failed");return}function D40($,Z,Q,Y){if(Z.closed)return;Z.closed=!0;try{$.close(Q,Y)}catch{}try{Z.upstream?.close()}catch{}}var oc6=256,rc6='<!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>',Qm6;var x98=D(()=>{A41();Qm6={open($){let Z=$.data;if(!FS0(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)}`),D40($,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)=>{D40($,Z,Y.code||1000,Y.reason||"")}),Q.addEventListener("error",()=>{D40($,Z,1011,"upstream error")})},message($,Z){let Q=$.data;if(!FS0(Q))return;let Y=Q.upstream;if(Y&&Y.readyState===WebSocket.OPEN){Y.send(Z);return}if(Q.pending.length>=oc6){D40($,Q,1011,"preview ws backlog overflow");return}Q.pending.push(Z)},close($){let Z=$.data;if(!FS0(Z))return;D40($,Z,1000,"")}}});var h98={};M6(h98,{printBanner:()=>Xm6,bannerLines:()=>g98,BANNER_LINES:()=>f98,BANNER_GRADIENT:()=>y98});function Ym6($){let Z=Number.parseInt($.slice(1),16);return[Z>>16&255,Z>>8&255,Z&255]}function g98($){let Z=f98.map((Q,Y)=>{let[X,J,G]=Ym6(y98[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 Xm6($){console.log("");for(let Z of g98($))console.log(Z);console.log("")}var f98,y98;var u98=D(()=>{f98=[" \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 "],y98=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"]});N8();var YN1="13";function XN1($){return{name:"decocms",systemDatabaseUrl:$.systemDatabaseUrl,systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:$.poolSize,runAdminServer:!1,executorID:$.executorID,applicationVersion:YN1,...$.listenQueues!==void 0?{listenQueues:$.listenQueues}:{}}}N8();import XZ8 from"pg";var JN1=8314027461559302n,JZ8=600000,GZ8=500;async function GN1($,Z){let{databaseUrl:Q,lockTimeoutMs:Y=JZ8}=$,X=$.log??((K)=>console.log(K)),J=new XZ8.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",[JN1.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$(GZ8)}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)",[JN1.toString()])}catch{}await J.end().catch(()=>{})}}U$();PS0();C6();function X78(){let $=(process.env.BUN_OPTIONS??"").split(/\s+/).filter(Boolean);return[...process.argv.slice(1),...$]}function gS0($,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 mN1(){let $=X78();if($.includes("--cpu-prof")){console.log(JSON.stringify({msg:"cpu-profiling-active",dir:gS0($,"--cpu-prof-dir")??process.cwd(),name:gS0($,"--cpu-prof-name"),markdown:$.includes("--cpu-prof-md"),intervalUs:Number(gS0($,"--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.'}))}lS0();var _40;function sN1(){if(process.env.HEAP_WATCH!=="1")return()=>{};let $=Number(process.env.HEAP_WATCH_INTERVAL_MS??60000),Z=async()=>{let Q=kE();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(()=>{}),_40=setInterval(()=>void Z().catch(()=>{}),$),_40.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(_40)clearInterval(_40)}}import*as W78 from"bun:jsc";var{startSamplingProfiler:K78,samplingProfilerStackTraces:H78}=W78;function eN1(){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{K78()}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=H78()?.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 $B1(){mN1();let $=[sN1(),aN1(),eN1()];return()=>{for(let Z of $)Z()}}import{existsSync as Nm6}from"fs";var pJ=z0();uN1();var{DBOS:w40,DBOSClient:Jm6}=await import("@dbos-inc/dbos-sdk");function rU1($,Z){if(!Z)return $;let Q=new URL($);if(!Q.searchParams.has("sslmode"))Q.searchParams.set("sslmode","verify-full");return Q.toString()}var Gm6=[O3,B3,sU,eU,pO,ME],Wm6=pJ.dispatchRole==="worker"?Gm6:pJ.dispatchRole==="api"?[]:void 0;w40.setConfig(XN1({systemDatabaseUrl:rU1(pJ.databaseUrl,pJ.databasePgSsl),poolSize:pJ.dbosPoolSize,executorID:pJ.podName,listenQueues:Wm6}));var{createApp:Km6}=await Promise.resolve().then(() => (V98(),I98)),{isServerPath:Hm6}=await Promise.resolve().then(() => (k40(),TN1)),{createAssetHandler:Fm6,resolveClientDir:i98}=await Promise.resolve().then(() => (v98(),_98)),Um6=pJ.port,l98=i98(import.meta.url,"../client"),p98=Nm6(l98)?l98:i98(import.meta.url,"../dist/client"),Bm6=Fm6({clientDir:p98,isServerPath:Hm6}),Om6={"X-Frame-Options":"DENY","Content-Security-Policy":"frame-ancestors 'none'"};function Dm6($){let Z=new Headers($.headers);for(let[Q,Y]of Object.entries(Om6))Z.set(Q,Y);return new Response($.body,{status:$.status,statusText:$.statusText,headers:Z})}var{parsePreviewBaseDomain:Lm6,tryHandlePreviewHttp:wm6,tryUpgradePreviewWs:jm6,previewWebSocketHandler:iU1,isPreviewWsData:pU1}=await Promise.resolve().then(() => (x98(),b98)),{getOrInitSharedRunner:n98}=await Promise.resolve().then(() => (QH(),uE$)),t98=Lm6(process.env.STUDIO_SANDBOX_PREVIEW_URL_PATTERN),c98={baseDomain:t98??"",getRunner:n98};if(process.env.STUDIO_SANDBOX_TENANT_POOLS?.trim())n98().catch(($)=>{console.warn("[lifecycle] eager sandbox provider init for tenant pools failed:",$ instanceof Error?$.message:String($))});var US0=await Km6({clientDir:p98}),nU1=process.env.DBOS_CONDUCTOR_KEY?.trim(),m98=process.env.DBOS_CONDUCTOR_URL?.trim();await GN1({databaseUrl:rU1(pJ.databaseUrl,pJ.databasePgSsl)},()=>w40.launch({...nU1?{conductorKey:nU1}:{},...nU1&&m98?{conductorURL:m98}:{}}));console.log(`[dbos] application version: ${w40.applicationVersion}`);var tU1=5,oU1=0;await M8(async()=>{oU1++;try{return await US0.initDbos()}catch($){let Z=oU1>=tU1?"giving up":"retrying";throw console.warn(`[dbos] initDbos attempt ${oU1}/${tU1} failed, ${Z}`,$),$}},{maxAttempts:tU1,minTimeout:1000,maxTimeout:1e4,jitter:0.5});if(!pJ.isCli){let{bannerLines:$}=await Promise.resolve().then(() => (u98(),h98));console.log("");for(let Z of $())console.log(Z)}var Em6=Bun.serve({idleTimeout:0,port:Um6,hostname:"0.0.0.0",fetch:async($,Z)=>{if(t98){let Y=await jm6($,Z,c98);if(Y===void 0)return;if(Y)return Y;let X=await wm6($,c98);if(X)return X}let Q=await Bm6($);if(Q)return Dm6(Q);return US0.fetch($,{server:Z})},websocket:{open($){if(pU1($.data))iU1.open($)},message($,Z){if(pU1($.data))iU1.message($,Z)},close($){if(pU1($.data))iU1.close($)}},development:!1}),zm6=$B1();if(pJ.localMode)Promise.resolve().then(() => (Yf(),vT0)).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(() => (Yf(),vT0));Z()}catch{}});var d98=!1;async function Pm6($){let Z;try{Z=await Jm6.create({systemDatabaseUrl:rU1(pJ.databaseUrl,pJ.databasePgSsl),systemDatabaseSchemaName:"dbos"});let Q=await Z.listWorkflows({status:"PENDING",queueName:B3,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:B3}),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 NS0($){if(d98)return;d98=!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{zm6(),US0.markShuttingDown();let J=KN1(pJ.dispatchRole,Q,process.env.SHUTDOWN_DRAIN_MS);await i$(J),await Em6.stop(!0);let G=w40.executorID;await w40.shutdown(),await Pm6(G),await US0.shutdown()}catch(J){console.error("[shutdown] Error during shutdown:",J),X=1}clearTimeout(Y),process.exit(X)}process.on("SIGTERM",()=>NS0("SIGTERM"));process.on("SIGINT",()=>NS0("SIGINT"));process.on("SIGHUP",()=>NS0("SIGHUP"));process.on("unhandledRejection",($)=>{console.error("[process] Unhandled rejection:",$)});process.on("uncaughtException",($)=>{console.error("[process] Uncaught exception:",$),NS0("uncaughtException")});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "decocms",
3
- "version": "4.408.0",
3
+ "version": "4.409.0",
4
4
  "description": "Deco CMS — Self-hostable MCP Gateway for managing AI connections and tools",
5
5
  "author": "Deco team",
6
6
  "repository": {
@@ -1 +0,0 @@
1
- import{c,j as s,M as u}from"./index-izHBwn3I.js";import{ChatLayout as f}from"./index-5-VvRKCO.js";import{a as x}from"./thread-route-Dg7kv_hv.js";import{u as g}from"./use-task-metadata-BxMvdi8M.js";import{AppViewContent as h}from"./project-app-view-B9SXqzvV.js";import"./use-mobile-Dn4_VWcj.js";import"./thread-button-CqHz48Ii.js";import"./use-in-settings-BA5wQFQ2.js";import"./sheet-DTIr0quY.js";import"./X-7V7RNG20.js";import"./tooltip-DqtfkXwI.js";import"./index-xb9O7QC9.js";import"./use-panel-navigate-BpzTFK7R.js";import"./use-project-scope-DIRKMaLK.js";import"./use-virtual-mcp-D8Whl5cH.js";import"./use-mcp-client-CNVDhuvd.js";import"./auth-WDJFc9Hm.js";import"./github-repo-B15wwZ1g.js";import"./use-route-default-main-BeQVGvWs.js";import"./hooks-DETt4AT1.js";import"./backoff-8mStPHYB.js";import"./task-board-CFetJZKk.js";import"./schema-DNqDLF82.js";import"./agent-icon-CP5XN9a-.js";import"./AlertCircle-B4TBXI97.js";import"./Tool01-DAfFPt6l.js";import"./ArrowUp-DfYHJg8n.js";import"./ArrowLeft-Du5HwAty.js";import"./ArrowRight-Bk-h8Spa.js";import"./ShoppingBag01-Dj-9rxCI.js";import"./ZoomOut-9vKhCWKn.js";import"./Globe04-dvDQwL6D.js";import"./CheckCircle-Du0Z4Mo4.js";import"./Check-e9hufNdV.js";import"./ChevronUp-Dijj6L1D.js";import"./UserSquare-CMMvch3p.js";import"./Copy01-Rd2DUITb.js";import"./CreditCard01-CuV3PHbW.js";import"./DotsVertical-CUOWG-18.js";import"./Eye-CATcYqq7.js";import"./Share07-CAPMGK5H.js";import"./XClose-CgE_NvFQ.js";import"./Image01-CK0bgOXc.js";import"./Key01-B2Ks3SjW.js";import"./LayoutLeft-o4EwT_f4.js";import"./Link01-t9xcN1_J.js";import"./LinkExternal01-E0yllQfW.js";import"./Monitor01-2SrwE2A4.js";import"./Sun-Dc2rioTm.js";import"./Palette-DdJDZNuI.js";import"./Plus-BfQMVZRL.js";import"./SearchMd-BPxAMeCu.js";import"./Trash01-BpbNxWxU.js";import"./Upload01-Cu5y084h.js";import"./User01-DZIaW3qt.js";import"./Users01-B6wD4vfR.js";import"./Zap-BnKV6W7m.js";import"./toolbar-icon-button-DOCtjUrJ.js";import"./shell-layout-BadbomY4.js";import"./avatar-JIBRtdC_.js";import"./download-app-dialog-BngIghKX.js";import"./dialog-B9AmIVi-.js";import"./command-BXe_2Y8J.js";import"./index-BAMGe25h.js";import"./integration-icon-Vvc8ojiC.js";import"./project-icon-BfMBNeXz.js";import"./use-is-desktop-app-BNujXJc_.js";import"./required-auth-layout-qs1Hm0B9.js";import"./autosend-BUpRVcwj.js";import"./use-org-sso-DcCWDiTW.js";import"./resizable-DvI1E7pk.js";import"./route-page-header-KSRwTD4y.js";import"./gateway-client-BfoDyNyS.js";import"./tool-namespace-DmnQIdtF.js";import"./use-mcp-tools-D1dyg5U7.js";import"./sandbox-lifecycle-context-D0nuKJ_b.js";import"./use-session-runtime-CHP3YGA3.js";import"./thread-intent-EOvgTchU.js";import"./slugify-CEUa2lfQ.js";import"./chat-context-B6r2nJ6g.js";import"./use-entitlements-g5-cEVzp.js";import"./use-ai-providers-BGPaB7ua.js";import"./location-oTTXFrSF.js";import"./use-decopilot-events-oRqi_MUt.js";import"./use-organization-settings-BWZsG9HZ.js";import"./sandbox-url-D3mC8qhT.js";import"./sandbox-start-errors-BK_aDCyt.js";import"./content-blocks-o63cs2vh.js";import"./mcp-app-renderer-DC6jfKUS.js";import"./types-QqaS24ZV.js";import"./site-url-en5df9c-.js";import"./use-connect-companion-C9bH45vI.js";import"./companions-core-BnuxEm_5.js";import"./metadata-D72DunRR.js";import"./github-repo-scope-C8GSbvaz.js";import"./form-CIkzBIkD.js";import"./label-BIuQy2__.js";import"./input-BLSONHqE.js";import"./use-debounced-value-D1fDrXmw.js";import"./provision-repo-scoped-github-connection-B6zdkC6p.js";import"./useQueries-e2PQJS28.js";import"./authenticate-and-persist-oauth-BdWTTo89.js";import"./mcp-oauth-B-JicvF4.js";import"./track-CWXt8cRU.js";import"./extract-connection-data-ZkeqSXbM.js";import"./connection-C1K_L2Xe.js";const $=u("/shell/$org/org-shell/agent-shell/projects/$agentId/apps/$connectionId/$toolName");function j(){const t=c.c(9),{connectionId:o,toolName:r}=$.useParams(),l=x(),i=g(l);let p;t[0]!==o||t[1]!==i?.expanded_tools||t[2]!==r?(p=i?.expanded_tools?.find(a=>a.appId===o&&a.toolName===r),t[0]=o,t[1]=i?.expanded_tools,t[2]=r,t[3]=p):p=t[3];const d=p,e=`${o}:${r}`,n=d?.args;let m;return t[4]!==o||t[5]!==e||t[6]!==n||t[7]!==r?(m=s.jsx(h,{connectionId:o,toolName:r,args:n},e),t[4]=o,t[5]=e,t[6]=n,t[7]=r,t[8]=m):m=t[8],m}function jo(){const t=c.c(1);let o;return t[0]===Symbol.for("react.memo_cache_sentinel")?(o=s.jsx(f.Content,{children:s.jsx(j,{})}),t[0]=o):o=t[0],o}export{jo as default};
@@ -1 +0,0 @@
1
- import{c,j as e,aO as b,u as g}from"./index-izHBwn3I.js";import{ChatLayout as j}from"./index-5-VvRKCO.js";import{F as v,H as S}from"./file-share-button-z0zbJCjq.js";import{u as k,b as y,e as _}from"./use-org-fs-B9N-OGu5.js";import{S as w}from"./settings-tab-C6cS3QDh.js";import{b as M}from"./thread-route-Dg7kv_hv.js";import"./use-mobile-Dn4_VWcj.js";import"./thread-button-CqHz48Ii.js";import"./use-in-settings-BA5wQFQ2.js";import"./sheet-DTIr0quY.js";import"./X-7V7RNG20.js";import"./tooltip-DqtfkXwI.js";import"./index-xb9O7QC9.js";import"./use-panel-navigate-BpzTFK7R.js";import"./use-project-scope-DIRKMaLK.js";import"./use-virtual-mcp-D8Whl5cH.js";import"./use-mcp-client-CNVDhuvd.js";import"./auth-WDJFc9Hm.js";import"./github-repo-B15wwZ1g.js";import"./use-route-default-main-BeQVGvWs.js";import"./hooks-DETt4AT1.js";import"./backoff-8mStPHYB.js";import"./task-board-CFetJZKk.js";import"./schema-DNqDLF82.js";import"./agent-icon-CP5XN9a-.js";import"./AlertCircle-B4TBXI97.js";import"./Tool01-DAfFPt6l.js";import"./ArrowUp-DfYHJg8n.js";import"./ArrowLeft-Du5HwAty.js";import"./ArrowRight-Bk-h8Spa.js";import"./ShoppingBag01-Dj-9rxCI.js";import"./ZoomOut-9vKhCWKn.js";import"./Globe04-dvDQwL6D.js";import"./CheckCircle-Du0Z4Mo4.js";import"./Check-e9hufNdV.js";import"./ChevronUp-Dijj6L1D.js";import"./UserSquare-CMMvch3p.js";import"./Copy01-Rd2DUITb.js";import"./CreditCard01-CuV3PHbW.js";import"./DotsVertical-CUOWG-18.js";import"./Eye-CATcYqq7.js";import"./Share07-CAPMGK5H.js";import"./XClose-CgE_NvFQ.js";import"./Image01-CK0bgOXc.js";import"./Key01-B2Ks3SjW.js";import"./LayoutLeft-o4EwT_f4.js";import"./Link01-t9xcN1_J.js";import"./LinkExternal01-E0yllQfW.js";import"./Monitor01-2SrwE2A4.js";import"./Sun-Dc2rioTm.js";import"./Palette-DdJDZNuI.js";import"./Plus-BfQMVZRL.js";import"./SearchMd-BPxAMeCu.js";import"./Trash01-BpbNxWxU.js";import"./Upload01-Cu5y084h.js";import"./User01-DZIaW3qt.js";import"./Users01-B6wD4vfR.js";import"./Zap-BnKV6W7m.js";import"./toolbar-icon-button-DOCtjUrJ.js";import"./shell-layout-BadbomY4.js";import"./avatar-JIBRtdC_.js";import"./download-app-dialog-BngIghKX.js";import"./dialog-B9AmIVi-.js";import"./command-BXe_2Y8J.js";import"./index-BAMGe25h.js";import"./integration-icon-Vvc8ojiC.js";import"./project-icon-BfMBNeXz.js";import"./use-is-desktop-app-BNujXJc_.js";import"./required-auth-layout-qs1Hm0B9.js";import"./autosend-BUpRVcwj.js";import"./use-org-sso-DcCWDiTW.js";import"./resizable-DvI1E7pk.js";import"./route-page-header-KSRwTD4y.js";import"./input-BLSONHqE.js";import"./popover-BiGAM8js.js";import"./extract-connection-data-ZkeqSXbM.js";import"./metadata-D72DunRR.js";import"./connection-C1K_L2Xe.js";import"./chat-context-B6r2nJ6g.js";import"./thread-intent-EOvgTchU.js";import"./slugify-CEUa2lfQ.js";import"./use-entitlements-g5-cEVzp.js";import"./use-ai-providers-BGPaB7ua.js";import"./location-oTTXFrSF.js";import"./use-decopilot-events-oRqi_MUt.js";import"./use-organization-settings-BWZsG9HZ.js";import"./build-improve-prompt-doc-uYATas8q.js";import"./empty-state-Df0p9Roq.js";import"./use-date-fns-locale-Cjw89uE-.js";import"./differenceInSeconds-C3x8sHUj.js";import"./use-connection-BsLte2he.js";import"./mcp-oauth-B-JicvF4.js";import"./alert-dialog-DOZYkVkM.js";import"./textarea-tfNNqm-_.js";import"./use-debounced-autosave-CmBQ3Dtm.js";import"./add-connection-dialog-CfJFvo0n.js";import"./collection-search-Bm4yfKio.js";import"./connection-card-C0UBOriU.js";import"./useInfiniteQuery-ByafV4ZI.js";import"./infiniteQueryObserver-DiUuMuMD.js";import"./connection-slug-CITJ0kGN.js";import"./drawer-Cmzocoxj.js";import"./form-CIkzBIkD.js";import"./label-BIuQy2__.js";import"./select-BsUP6XU-.js";import"./connection-form-helpers-DmenEJQq.js";import"./authenticate-and-persist-oauth-BdWTTo89.js";import"./collection-tabs-CyEDGPVJ.js";import"./badge-6y8k_9-5.js";import"./use-infinite-scroll-EFF__ehg.js";import"./useSuspenseInfiniteQuery-CflcpPwQ.js";import"./file-type-icon-ddHjZWG7.js";import"./checkbox-CjlcA4Zf.js";import"./search-input-BQOyz7rC.js";import"./use-mcp-auth-status-r6Fv7Ux6.js";import"./types-QqaS24ZV.js";import"./use-mcp-tools-D1dyg5U7.js";import"./use-mcp-prompts-Bd28eC02.js";import"./utils-CVEq3hMx.js";import"./switch-BjEW4lQy.js";import"./scroll-area-DQZQeCpt.js";import"./use-project-native-view-presence-Bn9lK-SY.js";import"./match-site-slug-config-D3fUJ6vX.js";import"./use-file-configs-D0LRhOPo.js";import"./site-slug-DebpOoQq.js";import"./optimistic-project-sidebar-views-BCSGdK6N.js";import"./virtual-mcp-DWa9T_f2.js";import"./repository-import-picker-DHUG6o-B.js";import"./use-navigate-to-agent-soNoKU2z.js";import"./repository-picker-TE4ZcEAF.js";import"./github-icon-ZHfVS9cH.js";import"./use-debounced-value-D1fDrXmw.js";import"./sandbox-url-D3mC8qhT.js";import"./secret-picker-BprAET2c.js";import"./use-secrets-BtIO9CRs.js";import"./omit-sandbox-map-jj4lCB2U.js";import"./serial-task-queue-CGOeQgpr.js";const x="home";function P(i){const t=c.c(5),{label:r}=i;let p;t[0]===Symbol.for("react.memo_cache_sentinel")?(p=e.jsx(b,{className:"aspect-video w-2/3 max-w-xl"}),t[0]=p):p=t[0];let o;t[1]!==r?(o=r&&e.jsx("p",{className:"text-xs text-muted-foreground",children:r}),t[1]=r,t[2]=o):o=t[2];let m;return t[3]!==o?(m=e.jsxs("div",{className:"flex h-full w-full flex-col items-center justify-center gap-3 bg-background",children:[p,o]}),t[3]=o,t[4]=m):m=t[4],m}function D(i){const t=c.c(15),{path:r}=i;let p;t[0]===Symbol.for("react.memo_cache_sentinel")?(p={refetchIntervalWhenAbsent:2e3},t[0]=p):p=t[0];const o=k(x,r,p),m=y(x)(r);if(o.isPending||!o.data){const h=!o.isPending&&!o.data?"Waiting for the deck to sync…":void 0;let l;return t[1]!==h?(l=e.jsx(P,{label:h}),t[1]=h,t[2]=l):l=t[2],l}let s;t[3]!==o.data?(s=_(o.data),t[3]=o.data,t[4]=s):s=t[4];const f=o.data.shareMode??"private",u=o.data.effectivePublic??!1,d=window.location.origin+m;let a;t[5]!==r||t[6]!==f||t[7]!==u||t[8]!==d?(a=e.jsx(v,{volume:x,path:r,shareMode:f,effectivePublic:u,url:d}),t[5]=r,t[6]=f,t[7]=u,t[8]=d,t[9]=a):a=t[9];let n;return t[10]!==r||t[11]!==m||t[12]!==s||t[13]!==a?(n=e.jsx(S,{readUrl:m,marker:s,title:r,savePath:r,trailing:a}),t[10]=r,t[11]=m,t[12]=s,t[13]=a,t[14]=n):n=t[14],n}function O(){const i=c.c(4);let t;i[0]===Symbol.for("react.memo_cache_sentinel")?(t={strict:!1},i[0]=t):t=i[0];const r=g(t),p=M(),o="path"in r&&typeof r.path=="string"?r.path:void 0;let m;return i[1]!==o||i[2]!==p?(m=o?e.jsx(D,{path:o},o):e.jsx(w,{virtualMcpId:p}),i[1]=o,i[2]=p,i[3]=m):m=i[3],m}function er(){const i=c.c(1);let t;return i[0]===Symbol.for("react.memo_cache_sentinel")?(t=e.jsx(j.Content,{children:e.jsx(O,{})}),i[0]=t):t=i[0],t}export{er as default};
@@ -1 +0,0 @@
1
- import{c as n,j as s,u as a}from"./index-izHBwn3I.js";import{ChatLayout as l}from"./index-5-VvRKCO.js";import{L as c}from"./preview-content-CJyGfLqn.js";import{a as f}from"./use-panel-navigate-BpzTFK7R.js";import{S as u}from"./settings-tab-C6cS3QDh.js";import{b as h}from"./thread-route-Dg7kv_hv.js";import"./use-mobile-Dn4_VWcj.js";import"./thread-button-CqHz48Ii.js";import"./use-in-settings-BA5wQFQ2.js";import"./sheet-DTIr0quY.js";import"./X-7V7RNG20.js";import"./tooltip-DqtfkXwI.js";import"./index-xb9O7QC9.js";import"./use-route-default-main-BeQVGvWs.js";import"./hooks-DETt4AT1.js";import"./use-mcp-client-CNVDhuvd.js";import"./auth-WDJFc9Hm.js";import"./backoff-8mStPHYB.js";import"./task-board-CFetJZKk.js";import"./schema-DNqDLF82.js";import"./agent-icon-CP5XN9a-.js";import"./AlertCircle-B4TBXI97.js";import"./Tool01-DAfFPt6l.js";import"./ArrowUp-DfYHJg8n.js";import"./ArrowLeft-Du5HwAty.js";import"./ArrowRight-Bk-h8Spa.js";import"./ShoppingBag01-Dj-9rxCI.js";import"./ZoomOut-9vKhCWKn.js";import"./Globe04-dvDQwL6D.js";import"./CheckCircle-Du0Z4Mo4.js";import"./Check-e9hufNdV.js";import"./ChevronUp-Dijj6L1D.js";import"./UserSquare-CMMvch3p.js";import"./Copy01-Rd2DUITb.js";import"./CreditCard01-CuV3PHbW.js";import"./DotsVertical-CUOWG-18.js";import"./Eye-CATcYqq7.js";import"./Share07-CAPMGK5H.js";import"./XClose-CgE_NvFQ.js";import"./Image01-CK0bgOXc.js";import"./Key01-B2Ks3SjW.js";import"./LayoutLeft-o4EwT_f4.js";import"./Link01-t9xcN1_J.js";import"./LinkExternal01-E0yllQfW.js";import"./Monitor01-2SrwE2A4.js";import"./Sun-Dc2rioTm.js";import"./Palette-DdJDZNuI.js";import"./Plus-BfQMVZRL.js";import"./SearchMd-BPxAMeCu.js";import"./Trash01-BpbNxWxU.js";import"./Upload01-Cu5y084h.js";import"./User01-DZIaW3qt.js";import"./Users01-B6wD4vfR.js";import"./Zap-BnKV6W7m.js";import"./toolbar-icon-button-DOCtjUrJ.js";import"./shell-layout-BadbomY4.js";import"./avatar-JIBRtdC_.js";import"./download-app-dialog-BngIghKX.js";import"./dialog-B9AmIVi-.js";import"./use-project-scope-DIRKMaLK.js";import"./use-virtual-mcp-D8Whl5cH.js";import"./github-repo-B15wwZ1g.js";import"./command-BXe_2Y8J.js";import"./index-BAMGe25h.js";import"./integration-icon-Vvc8ojiC.js";import"./project-icon-BfMBNeXz.js";import"./use-is-desktop-app-BNujXJc_.js";import"./required-auth-layout-qs1Hm0B9.js";import"./autosend-BUpRVcwj.js";import"./use-org-sso-DcCWDiTW.js";import"./resizable-DvI1E7pk.js";import"./route-page-header-KSRwTD4y.js";import"./file-preview-BAf9QLKP.js";import"./use-org-fs-B9N-OGu5.js";import"./utils-Dn4NkWqd.js";import"./editor-B64zb0TF.js";import"./file-type-icon-ddHjZWG7.js";import"./markdown-BNo5hmT4.js";import"./org-file-open-context-LEXGiXCZ.js";import"./file-share-button-z0zbJCjq.js";import"./input-BLSONHqE.js";import"./popover-BiGAM8js.js";import"./location-oTTXFrSF.js";import"./extract-connection-data-ZkeqSXbM.js";import"./metadata-D72DunRR.js";import"./connection-C1K_L2Xe.js";import"./chat-context-B6r2nJ6g.js";import"./thread-intent-EOvgTchU.js";import"./slugify-CEUa2lfQ.js";import"./use-entitlements-g5-cEVzp.js";import"./use-ai-providers-BGPaB7ua.js";import"./use-decopilot-events-oRqi_MUt.js";import"./use-organization-settings-BWZsG9HZ.js";import"./build-improve-prompt-doc-uYATas8q.js";import"./empty-state-Df0p9Roq.js";import"./use-date-fns-locale-Cjw89uE-.js";import"./differenceInSeconds-C3x8sHUj.js";import"./use-connection-BsLte2he.js";import"./mcp-oauth-B-JicvF4.js";import"./alert-dialog-DOZYkVkM.js";import"./textarea-tfNNqm-_.js";import"./use-debounced-autosave-CmBQ3Dtm.js";import"./add-connection-dialog-CfJFvo0n.js";import"./collection-search-Bm4yfKio.js";import"./connection-card-C0UBOriU.js";import"./useInfiniteQuery-ByafV4ZI.js";import"./infiniteQueryObserver-DiUuMuMD.js";import"./connection-slug-CITJ0kGN.js";import"./drawer-Cmzocoxj.js";import"./form-CIkzBIkD.js";import"./label-BIuQy2__.js";import"./select-BsUP6XU-.js";import"./connection-form-helpers-DmenEJQq.js";import"./authenticate-and-persist-oauth-BdWTTo89.js";import"./collection-tabs-CyEDGPVJ.js";import"./badge-6y8k_9-5.js";import"./use-infinite-scroll-EFF__ehg.js";import"./useSuspenseInfiniteQuery-CflcpPwQ.js";import"./checkbox-CjlcA4Zf.js";import"./search-input-BQOyz7rC.js";import"./use-mcp-auth-status-r6Fv7Ux6.js";import"./types-QqaS24ZV.js";import"./use-mcp-tools-D1dyg5U7.js";import"./use-mcp-prompts-Bd28eC02.js";import"./utils-CVEq3hMx.js";import"./switch-BjEW4lQy.js";import"./scroll-area-DQZQeCpt.js";import"./use-project-native-view-presence-Bn9lK-SY.js";import"./match-site-slug-config-D3fUJ6vX.js";import"./use-file-configs-D0LRhOPo.js";import"./site-slug-DebpOoQq.js";import"./optimistic-project-sidebar-views-BCSGdK6N.js";import"./virtual-mcp-DWa9T_f2.js";import"./repository-import-picker-DHUG6o-B.js";import"./use-navigate-to-agent-soNoKU2z.js";import"./repository-picker-TE4ZcEAF.js";import"./github-icon-ZHfVS9cH.js";import"./use-debounced-value-D1fDrXmw.js";import"./sandbox-url-D3mC8qhT.js";import"./secret-picker-BprAET2c.js";import"./use-secrets-BtIO9CRs.js";import"./omit-sandbox-map-jj4lCB2U.js";import"./serial-task-queue-CGOeQgpr.js";function b(r){const t=n.c(4),{previewPath:m,onClose:p,showSeeInLibrary:o}=r,i=o===void 0?!1:o;let e;return t[0]!==p||t[1]!==m||t[2]!==i?(e=s.jsx("div",{className:"flex h-full w-full flex-col bg-background",children:s.jsx(c,{previewPath:m,onClose:p,showSeeInLibrary:i,variant:"panel"})}),t[0]=p,t[1]=m,t[2]=i,t[3]=e):e=t[3],e}function x(r){const t=n.c(5),{path:m}=r,{closePanel:p}=f();let o;t[0]!==p?(o=()=>p(),t[0]=p,t[1]=o):o=t[1];const i=o;let e;return t[2]!==i||t[3]!==m?(e=s.jsx(b,{previewPath:m,onClose:i,showSeeInLibrary:!0}),t[2]=i,t[3]=m,t[4]=e):e=t[4],e}function y(){const r=n.c(4);let t;r[0]===Symbol.for("react.memo_cache_sentinel")?(t={strict:!1},r[0]=t):t=r[0];const m=a(t),p=h(),o="path"in m&&typeof m.path=="string"?m.path:void 0;let i;return r[1]!==o||r[2]!==p?(i=o?s.jsx(x,{path:o},o):s.jsx(u,{virtualMcpId:p}),r[1]=o,r[2]=p,r[3]=i):i=r[3],i}function Zr(){const r=n.c(1);let t;return r[0]===Symbol.for("react.memo_cache_sentinel")?(t=s.jsx(l.Content,{children:s.jsx(y,{})}),r[0]=t):t=r[0],t}export{Zr as default};
@@ -1 +0,0 @@
1
- import{c as R,j as s,E as ye,X as Se,d as we,q as ge,b as je,l as I,r as D,G as ve,t as Ce,B as Te,F as _e,H as ke,I as Pe,h as Ie}from"./index-izHBwn3I.js";import{ChatLayout as Re}from"./index-5-VvRKCO.js";import{i as ze}from"./ArrowRight-Bk-h8Spa.js";import{u as Oe,d as Ee,r as $e}from"./use-reports-diagnostic-M-tFAPHb.js";import{M as De}from"./mini-report-page-BV-nrHu-.js";import{i as Be}from"./Check-e9hufNdV.js";import{t as Fe}from"./ChevronUp-Dijj6L1D.js";import{C as Ae}from"./task-board-CFetJZKk.js";import{P as Ke}from"./project-icon-BfMBNeXz.js";import{u as Me,l as be,P as Le,e as me,T as Ye,f as pe}from"./task-route-uQ4EUqTW.js";import{u as Ne}from"./use-project-scope-DIRKMaLK.js";import{u as Ge,P as He}from"./project-feed-D09MAcoq.js";import"./use-mobile-Dn4_VWcj.js";import"./thread-button-CqHz48Ii.js";import"./use-in-settings-BA5wQFQ2.js";import"./sheet-DTIr0quY.js";import"./X-7V7RNG20.js";import"./tooltip-DqtfkXwI.js";import"./index-xb9O7QC9.js";import"./thread-route-Dg7kv_hv.js";import"./use-panel-navigate-BpzTFK7R.js";import"./use-route-default-main-BeQVGvWs.js";import"./hooks-DETt4AT1.js";import"./use-mcp-client-CNVDhuvd.js";import"./auth-WDJFc9Hm.js";import"./backoff-8mStPHYB.js";import"./agent-icon-CP5XN9a-.js";import"./AlertCircle-B4TBXI97.js";import"./Tool01-DAfFPt6l.js";import"./ArrowUp-DfYHJg8n.js";import"./ArrowLeft-Du5HwAty.js";import"./ShoppingBag01-Dj-9rxCI.js";import"./ZoomOut-9vKhCWKn.js";import"./Globe04-dvDQwL6D.js";import"./CheckCircle-Du0Z4Mo4.js";import"./UserSquare-CMMvch3p.js";import"./Copy01-Rd2DUITb.js";import"./CreditCard01-CuV3PHbW.js";import"./DotsVertical-CUOWG-18.js";import"./Eye-CATcYqq7.js";import"./Share07-CAPMGK5H.js";import"./XClose-CgE_NvFQ.js";import"./Image01-CK0bgOXc.js";import"./Key01-B2Ks3SjW.js";import"./LayoutLeft-o4EwT_f4.js";import"./Link01-t9xcN1_J.js";import"./LinkExternal01-E0yllQfW.js";import"./Monitor01-2SrwE2A4.js";import"./Sun-Dc2rioTm.js";import"./Palette-DdJDZNuI.js";import"./Plus-BfQMVZRL.js";import"./SearchMd-BPxAMeCu.js";import"./Trash01-BpbNxWxU.js";import"./Upload01-Cu5y084h.js";import"./User01-DZIaW3qt.js";import"./Users01-B6wD4vfR.js";import"./Zap-BnKV6W7m.js";import"./toolbar-icon-button-DOCtjUrJ.js";import"./shell-layout-BadbomY4.js";import"./avatar-JIBRtdC_.js";import"./download-app-dialog-BngIghKX.js";import"./dialog-B9AmIVi-.js";import"./command-BXe_2Y8J.js";import"./index-BAMGe25h.js";import"./integration-icon-Vvc8ojiC.js";import"./use-is-desktop-app-BNujXJc_.js";import"./required-auth-layout-qs1Hm0B9.js";import"./autosend-BUpRVcwj.js";import"./use-org-sso-DcCWDiTW.js";import"./resizable-DvI1E7pk.js";import"./route-page-header-KSRwTD4y.js";import"./use-virtual-mcp-D8Whl5cH.js";import"./companions-core-BnuxEm_5.js";import"./metadata-D72DunRR.js";import"./github-repo-scope-C8GSbvaz.js";import"./schema-DNqDLF82.js";import"./use-decopilot-events-oRqi_MUt.js";import"./github-repo-B15wwZ1g.js";import"./github-icon-ZHfVS9cH.js";import"./use-navigate-to-agent-soNoKU2z.js";import"./thread-intent-EOvgTchU.js";import"./slugify-CEUa2lfQ.js";import"./get-initials-D-f_fDFw.js";import"./use-members-CcYULDVF.js";import"./use-org-auth-client-BbRXHP84.js";import"./format-time-BtXRrtv4.js";import"./differenceInSeconds-C3x8sHUj.js";function qe(e){const t=R.c(48),{status:i,host:n,onOpen:c}=e,d=je(),r=i==="generating";let m,o,p,l,f,k,v,x,g,j;if(t[0]!==r||t[1]!==n||t[2]!==c||t[3]!==d){const T=n??d("reports.banner.storeDefault");v="button",x=c,t[14]===Symbol.for("react.memo_cache_sentinel")?(g=I("group relative block w-full cursor-pointer overflow-hidden rounded-3xl border border-border bg-card card-shadow text-left","transition-colors duration-300 hover:bg-accent/30","animate-in fade-in slide-in-from-bottom-2 duration-500"),t[14]=g):g=t[14];const _=r?"bg-warning/15":"bg-success/15";let b;t[15]!==_?(b=I("absolute -bottom-24 -left-10 size-64 rounded-full blur-3xl transition-colors duration-700",_),t[15]=_,t[16]=b):b=t[16],t[17]!==b?(j=s.jsx("div",{"aria-hidden":!0,className:b}),t[17]=b,t[18]=j):j=t[18];let u;t[19]===Symbol.for("react.memo_cache_sentinel")?(u=I("absolute -bottom-14 left-6 hidden h-48 w-36 -rotate-6 sm:block","transition-transform duration-500 ease-out group-hover:-translate-y-2 group-hover:-rotate-3"),t[19]=u):u=t[19],t[20]!==r?(o=s.jsx(De,{generating:r,className:u}),t[20]=r,t[21]=o):o=t[21],k="relative flex min-h-28 items-center gap-4 px-5 py-5 sm:h-36 sm:gap-6 sm:pr-6 sm:pl-52",l="flex min-w-0 flex-1 flex-col gap-1";let h;t[22]!==r||t[23]!==d?(h=d(r?"reports.banner.generatingTitle":"reports.banner.readyTitle"),t[22]=r,t[23]=d,t[24]=h):h=t[24],t[25]!==h?(f=s.jsx("span",{className:"text-base font-medium leading-6 text-foreground sm:text-lg",children:h}),t[25]=h,t[26]=f):f=t[26],m="truncate text-sm text-muted-foreground",p=r?d("reports.banner.generatingSubtitle",{store:T}):d("reports.banner.readySubtitle",{store:T}),t[0]=r,t[1]=n,t[2]=c,t[3]=d,t[4]=m,t[5]=o,t[6]=p,t[7]=l,t[8]=f,t[9]=k,t[10]=v,t[11]=x,t[12]=g,t[13]=j}else m=t[4],o=t[5],p=t[6],l=t[7],f=t[8],k=t[9],v=t[10],x=t[11],g=t[12],j=t[13];let y;t[27]!==m||t[28]!==p?(y=s.jsx("span",{className:m,children:p}),t[27]=m,t[28]=p,t[29]=y):y=t[29];let S;t[30]!==y||t[31]!==l||t[32]!==f?(S=s.jsxs("div",{className:l,children:[f,y]}),t[30]=y,t[31]=l,t[32]=f,t[33]=S):S=t[33];let P;t[34]===Symbol.for("react.memo_cache_sentinel")?(P=I("flex size-11 shrink-0 items-center justify-center rounded-full border border-border bg-background","transition-transform duration-300 group-hover:translate-x-1"),t[34]=P):P=t[34];let z;t[35]!==r?(z=s.jsx("div",{className:P,children:r?s.jsxs("span",{className:"relative flex size-2.5",children:[s.jsx("span",{className:"absolute inline-flex h-full w-full animate-ping rounded-full bg-warning opacity-60"}),s.jsx("span",{className:"relative inline-flex size-2.5 rounded-full bg-warning"})]}):s.jsx(ze,{size:18,className:"text-foreground","aria-hidden":!0})}),t[35]=r,t[36]=z):z=t[36];let w;t[37]!==S||t[38]!==z||t[39]!==k?(w=s.jsxs("div",{className:k,children:[S,z]}),t[37]=S,t[38]=z,t[39]=k,t[40]=w):w=t[40];let C;return t[41]!==o||t[42]!==w||t[43]!==v||t[44]!==x||t[45]!==g||t[46]!==j?(C=s.jsxs("button",{type:v,onClick:x,className:g,children:[j,o,w]}),t[41]=o,t[42]=w,t[43]=v,t[44]=x,t[45]=g,t[46]=j,t[47]=C):C=t[47],C}function Ue(){const e=R.c(13),{org:t}=Se(),i=we(),{diagnostic:n,isSuccess:c,host:d,connectionId:r}=Oe();let m;e[0]!==n||e[1]!==c?(m=c?Ee(n):"none",e[0]=n,e[1]=c,e[2]=m):m=e[2];const o=m;if(o==="none")return null;let p;e[3]!==r||e[4]!==d||e[5]!==i||e[6]!==t||e[7]!==o?(p=()=>{ge("home_report_banner_clicked",{organization_id:t.id,status:o,domain:d??void 0}),i($e(t,r))},e[3]=r,e[4]=d,e[5]=i,e[6]=t,e[7]=o,e[8]=p):p=e[8];const l=p;let f;return e[9]!==d||e[10]!==l||e[11]!==o?(f=s.jsx(qe,{status:o,host:d,onOpen:l}),e[9]=d,e[10]=l,e[11]=o,e[12]=f):f=e[12],f}function Xe(){const e=R.c(1);let t;return e[0]===Symbol.for("react.memo_cache_sentinel")?(t=s.jsx(ye,{fallback:null,children:s.jsx(Ue,{})}),e[0]=t):t=e[0],t}function xe(e){const t=R.c(12),{icon:i,label:n,isSet:c,children:d}=e,r=c?"bg-accent/60 text-foreground":"text-muted-foreground hover:bg-accent/40 hover:text-foreground";let m;t[0]!==r?(m=I("inline-flex h-7 cursor-pointer items-center gap-1.5 rounded-lg border border-border px-2.5 text-xs transition-colors",r),t[0]=r,t[1]=m):m=t[1];let o;t[2]===Symbol.for("react.memo_cache_sentinel")?(o=s.jsx(Fe,{size:12,className:"text-muted-foreground"}),t[2]=o):o=t[2];let p;t[3]!==i||t[4]!==n||t[5]!==m?(p=s.jsx(_e,{asChild:!0,children:s.jsxs("button",{type:"button",className:m,children:[i,n,o]})}),t[3]=i,t[4]=n,t[5]=m,t[6]=p):p=t[6];let l;t[7]!==d?(l=s.jsx(ke,{align:"start",className:"w-48",children:d}),t[7]=d,t[8]=l):l=t[8];let f;return t[9]!==p||t[10]!==l?(f=s.jsxs(Pe,{children:[p,l]}),t[9]=p,t[10]=l,t[11]=f):f=t[11],f}function he(e){const t=R.c(14),{icon:i,iconClassName:n,label:c,selected:d,onSelect:r}=e;let m;t[0]!==n?(m=I("shrink-0",n),t[0]=n,t[1]=m):m=t[1];let o;t[2]!==i||t[3]!==m?(o=s.jsx(i,{size:14,className:m}),t[2]=i,t[3]=m,t[4]=o):o=t[4];let p;t[5]!==c?(p=s.jsx("span",{className:"min-w-0 flex-1 truncate",children:c}),t[5]=c,t[6]=p):p=t[6];let l;t[7]!==d?(l=d&&s.jsx(Be,{size:14}),t[7]=d,t[8]=l):l=t[8];let f;return t[9]!==r||t[10]!==o||t[11]!==p||t[12]!==l?(f=s.jsxs(ve,{onSelect:r,className:"gap-2",children:[o,p,l]}),t[9]=r,t[10]=o,t[11]=p,t[12]=l,t[13]=f):f=t[13],f}function Je(){const e=R.c(113),t=je(),[i,n]=D.useState(""),[c,d]=D.useState(""),[r,m]=D.useState(null),[o,p]=D.useState(null),[l,f]=D.useState(null),k=D.useRef(null),{repo:v,project:x}=Ne(),g=Me();let j;e[0]!==i?(j=i.trim(),e[0]=i,e[1]=j):j=e[1];const y=j,S=y.length>0&&!g.create.isPending;let P;e[2]===Symbol.for("react.memo_cache_sentinel")?(P=()=>{n(""),d(""),m(null),p(null),f(null)},e[2]=P):P=e[2];const z=P;let w;e[3]!==g||e[4]!==S||e[5]!==c||e[6]!==o||e[7]!==v||e[8]!==r||e[9]!==t||e[10]!==y||e[11]!==l?(w=()=>{S&&(ge("task_created",{source:"project_home_composer",withDescription:!!c.trim()}),g.create.mutate({title:y,description:c.trim()||void 0,status:r??void 0,priority:o??void 0,type:l??void 0,repo:v??void 0},{onSuccess:()=>{z(),k.current?.focus()},onError:a=>{Ce.error(a instanceof Error?a.message:t("home.newTask.createFailed"))}}))},e[3]=g,e[4]=S,e[5]=c,e[6]=o,e[7]=v,e[8]=r,e[9]=t,e[10]=y,e[11]=l,e[12]=w):w=e[12];const C=w;let T,_,b,u,h,O,B,F,A,K,E,M,$,N;if(e[13]!==c||e[14]!==o||e[15]!==x||e[16]!==r||e[17]!==C||e[18]!==t||e[19]!==i||e[20]!==l){const a=r?be(r,t):null,te=a?.visual.icon;u=o?me[o]:null,T=u?.icon,N=l?pe[l]:null,b=N?.icon,e[35]!==C?(E=ie=>{ie.preventDefault(),C()},e[35]=C,e[36]=E):E=e[36],M="card-shadow flex flex-col rounded-xl bg-card px-4 pt-4 pb-3",e[37]!==x||e[38]!==t?($=x&&s.jsxs("p",{className:"mb-4 flex items-center gap-1.5 text-xs text-muted-foreground",children:[s.jsxs("span",{className:"inline-flex items-center gap-1.5 rounded-full border border-border px-2 py-0.5 text-foreground",children:[s.jsx(Ke,{icon:x.icon,name:x.title}),x.title]}),s.jsx("span",{"aria-hidden":"true",children:"›"}),t("home.newTask.heading")]}),e[37]=x,e[38]=t,e[39]=$):$=e[39];let ae;e[40]===Symbol.for("react.memo_cache_sentinel")?(ae=ie=>n(ie.target.value),e[40]=ae):ae=e[40];let se;e[41]!==t?(se=t("home.newTask.placeholder"),e[41]=t,e[42]=se):se=e[42];let oe;e[43]!==t?(oe=t("home.newTask.placeholder"),e[43]=t,e[44]=oe):oe=e[44],e[45]!==se||e[46]!==oe||e[47]!==i?(h=s.jsx("input",{ref:k,value:i,onChange:ae,placeholder:se,"aria-label":oe,className:"w-full bg-transparent text-lg leading-snug font-semibold text-foreground outline-none placeholder:text-muted-foreground/70"}),e[45]=se,e[46]=oe,e[47]=i,e[48]=h):h=e[48];let ce;e[49]===Symbol.for("react.memo_cache_sentinel")?(ce=ie=>d(ie.target.value),e[49]=ce):ce=e[49];let re;e[50]!==t?(re=t("home.newTask.descriptionPlaceholder"),e[50]=t,e[51]=re):re=e[51];let le;e[52]!==t?(le=t("home.newTask.descriptionPlaceholder"),e[52]=t,e[53]=le):le=e[53],e[54]!==c||e[55]!==re||e[56]!==le?(O=s.jsx("textarea",{value:c,onChange:ce,placeholder:re,"aria-label":le,rows:2,className:"mt-1.5 w-full resize-none bg-transparent text-sm leading-relaxed text-foreground outline-none placeholder:text-muted-foreground"}),e[54]=c,e[55]=re,e[56]=le,e[57]=O):O=e[57],K="-mx-4 mt-4 flex flex-wrap items-center gap-1.5 border-t border-border px-4 pt-3",_=xe,B=!!a,F=a?.label??t("home.newTask.status"),A=te?s.jsx(te,{size:14,className:I("shrink-0",a?.visual.iconClassName)}):null,e[13]=c,e[14]=o,e[15]=x,e[16]=r,e[17]=C,e[18]=t,e[19]=i,e[20]=l,e[21]=T,e[22]=_,e[23]=b,e[24]=u,e[25]=h,e[26]=O,e[27]=B,e[28]=F,e[29]=A,e[30]=K,e[31]=E,e[32]=M,e[33]=$,e[34]=N}else T=e[21],_=e[22],b=e[23],u=e[24],h=e[25],O=e[26],B=e[27],F=e[28],A=e[29],K=e[30],E=e[31],M=e[32],$=e[33],N=e[34];let L;e[58]!==r||e[59]!==t?(L=Ae.map(a=>{const te=be(a,t);return s.jsx(he,{icon:te.visual.icon,iconClassName:te.visual.iconClassName,label:te.label,selected:r===a,onSelect:()=>m(r===a?null:a)},a)}),e[58]=r,e[59]=t,e[60]=L):L=e[60];let Y;e[61]!==_||e[62]!==L||e[63]!==B||e[64]!==F||e[65]!==A?(Y=s.jsx(_,{isSet:B,label:F,icon:A,children:L}),e[61]=_,e[62]=L,e[63]=B,e[64]=F,e[65]=A,e[66]=Y):Y=e[66];const de=!!u;let G;e[67]!==u||e[68]!==t?(G=t(u?u.labelKey:"home.newTask.priority"),e[67]=u,e[68]=t,e[69]=G):G=e[69];let H;e[70]!==T||e[71]!==u?.iconClassName?(H=T?s.jsx(T,{size:14,className:I("shrink-0",u?.iconClassName)}):null,e[70]=T,e[71]=u?.iconClassName,e[72]=H):H=e[72];let q;e[73]!==o||e[74]!==t?(q=Le.map(a=>s.jsx(he,{icon:me[a].icon,iconClassName:me[a].iconClassName,label:t(me[a].labelKey),selected:o===a,onSelect:()=>p(o===a?null:a)},a)),e[73]=o,e[74]=t,e[75]=q):q=e[75];let U;e[76]!==de||e[77]!==G||e[78]!==H||e[79]!==q?(U=s.jsx(xe,{isSet:de,label:G,icon:H,children:q}),e[76]=de,e[77]=G,e[78]=H,e[79]=q,e[80]=U):U=e[80];const fe=!!N;let X;e[81]!==t||e[82]!==N?(X=t(N?N.labelKey:"home.newTask.type"),e[81]=t,e[82]=N,e[83]=X):X=e[83];let J;e[84]!==b||e[85]!==N?.iconClassName?(J=b?s.jsx(b,{size:14,className:I("shrink-0",N?.iconClassName)}):null,e[84]=b,e[85]=N?.iconClassName,e[86]=J):J=e[86];let Q;e[87]!==t||e[88]!==l?(Q=Ye.map(a=>s.jsx(he,{icon:pe[a].icon,iconClassName:pe[a].iconClassName,label:t(pe[a].labelKey),selected:l===a,onSelect:()=>f(l===a?null:a)},a)),e[87]=t,e[88]=l,e[89]=Q):Q=e[89];let V;e[90]!==fe||e[91]!==X||e[92]!==J||e[93]!==Q?(V=s.jsx(xe,{isSet:fe,label:X,icon:J,children:Q}),e[90]=fe,e[91]=X,e[92]=J,e[93]=Q,e[94]=V):V=e[94];const ue=!S;let W;e[95]!==t?(W=t("home.newTask.submit"),e[95]=t,e[96]=W):W=e[96];let Z;e[97]!==ue||e[98]!==W?(Z=s.jsx(Te,{type:"submit",size:"sm",disabled:ue,className:"ml-auto h-7",children:W}),e[97]=ue,e[98]=W,e[99]=Z):Z=e[99];let ee;e[100]!==Y||e[101]!==U||e[102]!==V||e[103]!==Z||e[104]!==K?(ee=s.jsxs("div",{className:K,children:[Y,U,V,Z]}),e[100]=Y,e[101]=U,e[102]=V,e[103]=Z,e[104]=K,e[105]=ee):ee=e[105];let ne;return e[106]!==h||e[107]!==O||e[108]!==ee||e[109]!==E||e[110]!==M||e[111]!==$?(ne=s.jsxs("form",{onSubmit:E,className:M,children:[$,h,O,ee]}),e[106]=h,e[107]=O,e[108]=ee,e[109]=E,e[110]=M,e[111]=$,e[112]=ne):ne=e[112],ne}function Qe(){const e=R.c(5),{project:t}=Ne(),i=Ge();if(!t)return null;let n;e[0]!==t?(n=[t],e[0]=t,e[1]=n):n=e[1];let c;return e[2]!==n||e[3]!==i?(c=s.jsx(He,{projects:n,tasks:i,showFilter:!1}),e[2]=n,e[3]=i,e[4]=c):c=e[4],c}function Ve(){const e=R.c(3);let t,i;e[0]===Symbol.for("react.memo_cache_sentinel")?(t=s.jsx(Xe,{}),i=s.jsx(Je,{}),e[0]=t,e[1]=i):(t=e[0],i=e[1]);let n;return e[2]===Symbol.for("react.memo_cache_sentinel")?(n=s.jsx("div",{className:"h-full overflow-y-auto",children:s.jsxs("div",{className:"mx-auto flex max-w-[720px] flex-col gap-8 px-6 py-8",children:[t,i,s.jsx(D.Suspense,{fallback:s.jsx("div",{className:"flex min-h-48 items-center justify-center",children:s.jsx(Ie,{className:"size-5 text-muted-foreground"})}),children:s.jsx(Qe,{})})]})}),e[2]=n):n=e[2],n}function Rs(){const e=R.c(1);let t;return e[0]===Symbol.for("react.memo_cache_sentinel")?(t=s.jsx(Re.Content,{children:s.jsx(Ve,{})}),e[0]=t):t=e[0],t}export{Rs as default};