decocms 4.500.1 → 4.500.2

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 (367) hide show
  1. package/dist/client/assets/{ActiveShapeUtils-0lZFPRc5.js → ActiveShapeUtils-CeZzOoVf.js} +1 -1
  2. package/dist/client/assets/{AlertCircle-BxvPb2ao.js → AlertCircle-D4iOZ3Bs.js} +1 -1
  3. package/dist/client/assets/{AreaChart-DKj07iCf.js → AreaChart-CUWmFHwI.js} +1 -1
  4. package/dist/client/assets/{ArrowLeft-Bf9KgkxW.js → ArrowLeft-iygYSRbQ.js} +1 -1
  5. package/dist/client/assets/{ArrowUp-gYvBgsvU.js → ArrowUp-KCSPs-fi.js} +1 -1
  6. package/dist/client/assets/{BarChart-rD6omHOr.js → BarChart-gbo6r8aY.js} +1 -1
  7. package/dist/client/assets/{Building02-DRjaqBiC.js → Building02-EbX1A23K.js} +1 -1
  8. package/dist/client/assets/{CategoricalChart-1PnDkjx0.js → CategoricalChart-DbqLrstZ.js} +1 -1
  9. package/dist/client/assets/{CheckCircle-BkmLMZuX.js → CheckCircle-CoJfU94i.js} +1 -1
  10. package/dist/client/assets/{ChevronSelectorVertical-z-lNsxRS.js → ChevronSelectorVertical-DqpRXMOM.js} +1 -1
  11. package/dist/client/assets/{ChevronUp-D3SVSsDX.js → ChevronUp-BSm7AtSf.js} +1 -1
  12. package/dist/client/assets/{Copy01-BQJ05ZRk.js → Copy01-DlA26aBh.js} +1 -1
  13. package/dist/client/assets/{CreditCard01-CWewoMfz.js → CreditCard01-CXGPcE51.js} +1 -1
  14. package/dist/client/assets/{DotsVertical-GUU5bDEx.js → DotsVertical-CTugBooH.js} +1 -1
  15. package/dist/client/assets/{ErrorBarContext-BDcf6gHj.js → ErrorBarContext-CJdWK23B.js} +1 -1
  16. package/dist/client/assets/{Globe04-D1j2EnT6.js → Globe04-DDiW2Onm.js} +1 -1
  17. package/dist/client/assets/{Image01-Di7GijaS.js → Image01-BjUHwjIr.js} +1 -1
  18. package/dist/client/assets/{Key01-DxZh4RS9.js → Key01-DMnhMxC3.js} +1 -1
  19. package/dist/client/assets/{Link01-ChC1RPem.js → Link01-DKypA3Uf.js} +1 -1
  20. package/dist/client/assets/{LinkBroken01-wNBs-Zx0.js → LinkBroken01-Cjxu7rCw.js} +1 -1
  21. package/dist/client/assets/{Monitor01-cMYo2KVy.js → Monitor01-CTL-UG2p.js} +1 -1
  22. package/dist/client/assets/{Play-B0un_kIg.js → Play-NZWCLDah.js} +1 -1
  23. package/dist/client/assets/{Plus-BdYjAB2U.js → Plus-DLTeBarI.js} +1 -1
  24. package/dist/client/assets/{SearchMd-COTu5fMc.js → SearchMd-BsNWsFDv.js} +1 -1
  25. package/dist/client/assets/{Sector-B_NVpmVd.js → Sector-BRgBibA6.js} +1 -1
  26. package/dist/client/assets/{ShoppingBag01-DO4re_7a.js → ShoppingBag01-CWlRU3Ye.js} +1 -1
  27. package/dist/client/assets/{Sun-Pe0tJTeM.js → Sun-DhZMu2lN.js} +1 -1
  28. package/dist/client/assets/{SwitchHorizontal01-BaclOje4.js → SwitchHorizontal01-DZEm8csq.js} +1 -1
  29. package/dist/client/assets/{Tool01-BZb-DMpJ.js → Tool01-o_nJ7Y1x.js} +1 -1
  30. package/dist/client/assets/{Trash01-c56q-lrS.js → Trash01-JZaZB0vu.js} +1 -1
  31. package/dist/client/assets/{Upload01-Cp8lvoBS.js → Upload01-CpEePL13.js} +1 -1
  32. package/dist/client/assets/{User01-BdQVEBpk.js → User01-BGOQS9vx.js} +1 -1
  33. package/dist/client/assets/{UserSquare-BwyhtJD3.js → UserSquare-BFlEW2x5.js} +1 -1
  34. package/dist/client/assets/{Users01-CGD8XkzR.js → Users01-C9dOtgmV.js} +1 -1
  35. package/dist/client/assets/{XAxis-CZmv7pwr.js → XAxis-4jP2_ps6.js} +1 -1
  36. package/dist/client/assets/{XClose-DkK6PiiA.js → XClose-DO008B8R.js} +1 -1
  37. package/dist/client/assets/{ZoomOut-CLyO4H5k.js → ZoomOut-DA1sRe95.js} +1 -1
  38. package/dist/client/assets/{access-gate-BiwwMoCd.js → access-gate-DsVMqwjM.js} +1 -1
  39. package/dist/client/assets/{add-connection-dialog-BwEgsoXe.js → add-connection-dialog-BTQ6Snbx.js} +1 -1
  40. package/dist/client/assets/{agent-analytics-DgdkRKsE.js → agent-analytics-CpGEVH02.js} +1 -1
  41. package/dist/client/assets/agent-app-fS8AS09U.js +1 -0
  42. package/dist/client/assets/{agent-assets-BEEc2iCy.js → agent-assets-D1AunKzQ.js} +1 -1
  43. package/dist/client/assets/{agent-automation-UEWnzLQw.js → agent-automation-Ds-y1bNp.js} +1 -1
  44. package/dist/client/assets/{agent-automations-DYwqwLW1.js → agent-automations-Bhv6Y5Fg.js} +1 -1
  45. package/dist/client/assets/{agent-connect-sources-D8dr4EjE.js → agent-connect-sources-BWYssaAs.js} +1 -1
  46. package/dist/client/assets/agent-deck-BSKZhX9C.js +1 -0
  47. package/dist/client/assets/{agent-e2e-D7JZW-K5.js → agent-e2e-mBRBGP-4.js} +1 -1
  48. package/dist/client/assets/{agent-experiments-C5NBwdQH.js → agent-experiments-aivx3wKk.js} +1 -1
  49. package/dist/client/assets/{agent-file-Bl3BYoGY.js → agent-file-p8VPN5Ls.js} +1 -1
  50. package/dist/client/assets/{agent-hosting-Bcb13dX4.js → agent-hosting-BLydMzz1.js} +1 -1
  51. package/dist/client/assets/{agent-icon-If8hSRmw.js → agent-icon-DDBSTxwl.js} +1 -1
  52. package/dist/client/assets/agent-library-BORVKAKi.js +1 -0
  53. package/dist/client/assets/agent-library-file-CQVtmhou.js +1 -0
  54. package/dist/client/assets/{agent-monitor-DvIz2Ok0.js → agent-monitor-DwF-OeKx.js} +1 -1
  55. package/dist/client/assets/{agent-overview-C7_VfE93.js → agent-overview-PzlD3Gdw.js} +1 -1
  56. package/dist/client/assets/agent-settings-CP8WaMNS.js +1 -0
  57. package/dist/client/assets/{agent-site-editor-CN48-wRM.js → agent-site-editor-BpVIjbEo.js} +1 -1
  58. package/dist/client/assets/agent-site-editor-code-DBqdRzpW.js +2 -0
  59. package/dist/client/assets/{agent-site-editor-content-Ckedmp3x.js → agent-site-editor-content-UkRK2sPZ.js} +3 -3
  60. package/dist/client/assets/{agent-site-editor-preview-C-Q3v0ql.js → agent-site-editor-preview-CMWo8Jpl.js} +3 -3
  61. package/dist/client/assets/agent-view-BHgh3Lxp.js +1 -0
  62. package/dist/client/assets/{agent-view-guard-D5yzT3LN.js → agent-view-guard-CNj-ECwU.js} +1 -1
  63. package/dist/client/assets/{agents-list-BU_W6GYK.js → agents-list-DIvEheHR.js} +1 -1
  64. package/dist/client/assets/{ai-providers-fpiCYdpV.js → ai-providers-Bv4VnLS0.js} +1 -1
  65. package/dist/client/assets/{alert-BIg9W0aP.js → alert-DYBIxnQj.js} +1 -1
  66. package/dist/client/assets/{alert-dialog-DnRanV2g.js → alert-dialog-DpmCpPBI.js} +1 -1
  67. package/dist/client/assets/{analytics-sections-C00N7Swi.js → analytics-sections-Dv6tHtpt.js} +1 -1
  68. package/dist/client/assets/{api-keys-CdKCqSq9.js → api-keys-BpociG2u.js} +1 -1
  69. package/dist/client/assets/api-keys-DLMcrFXL.js +1 -0
  70. package/dist/client/assets/app-editor-CJc6hCJ6.js +1 -0
  71. package/dist/client/assets/{asset-utils-Cy2Arrv8.js → asset-utils-BUihGB_o.js} +1 -1
  72. package/dist/client/assets/{auth-CFhHut-U.js → auth-D1PkW9Uj.js} +1 -1
  73. package/dist/client/assets/{auth-catchall-crHvtL33.js → auth-catchall-xah8Rp3j.js} +1 -1
  74. package/dist/client/assets/{auth-entry-DOxd-oDa.js → auth-entry-VLEYf8tT.js} +1 -1
  75. package/dist/client/assets/{auth-split-layout-BdrayXcm.js → auth-split-layout-HBBBJTJB.js} +1 -1
  76. package/dist/client/assets/{authenticate-and-persist-oauth-CXGLXx3K.js → authenticate-and-persist-oauth-BfNR0joU.js} +1 -1
  77. package/dist/client/assets/{automation-list-row-B3j3Aqo0.js → automation-list-row-IGsRC78W.js} +1 -1
  78. package/dist/client/assets/{automation-runs-C1mxodr9.js → automation-runs-C60W3bGo.js} +1 -1
  79. package/dist/client/assets/{automations-CuezewX9.js → automations-CaS6shwH.js} +1 -1
  80. package/dist/client/assets/{autosend-fqRoYj3y.js → autosend-D3KZZhDs.js} +1 -1
  81. package/dist/client/assets/{avatar-BuYUCU8g.js → avatar-Brh_8d7a.js} +1 -1
  82. package/dist/client/assets/{badge-GwFEODr4.js → badge-Dp13ql_I.js} +1 -1
  83. package/dist/client/assets/{block-document-BrrhHB-1.js → block-document-Cxj1MUpK.js} +1 -1
  84. package/dist/client/assets/{blocks-preview-workspace-context-B0-hAhDE.js → blocks-preview-workspace-context-D7M7BwP7.js} +1 -1
  85. package/dist/client/assets/{blog-schema-nc8wHUFN.js → blog-schema-G4wBIdc6.js} +1 -1
  86. package/dist/client/assets/{board-analytics-CJy5BZil.js → board-analytics-DO-wkHdX.js} +1 -1
  87. package/dist/client/assets/{buckets-Chl9QvRo.js → buckets-C5bRLlmM.js} +1 -1
  88. package/dist/client/assets/{build-improve-prompt-doc-bdRLsgg1.js → build-improve-prompt-doc-DHL2uEEa.js} +1 -1
  89. package/dist/client/assets/{calendar-CKfIuZta.js → calendar-DEB-AUfC.js} +1 -1
  90. package/dist/client/assets/{capability-load-error-CYzyh0CO.js → capability-load-error-CR2FG7xy.js} +1 -1
  91. package/dist/client/assets/{category-editor-B1y8lXf9.js → category-editor-DfXKd-cd.js} +1 -1
  92. package/dist/client/assets/{chart-CJFl1MMf.js → chart-CXoR26LQ.js} +1 -1
  93. package/dist/client/assets/{chat-context-Nnpd61_s.js → chat-context-BR-PmAJg.js} +1 -1
  94. package/dist/client/assets/{chat-draft-L3duX_N0.js → chat-draft-CWFQi3-d.js} +1 -1
  95. package/dist/client/assets/{checkbox-BWTda68M.js → checkbox-CGTvhz0x.js} +1 -1
  96. package/dist/client/assets/{choose-editor-DYnb1tkA.js → choose-editor-DBCIeCbR.js} +1 -1
  97. package/dist/client/assets/{claim-phase-copy-D3VDMBEf.js → claim-phase-copy-C0pvoElR.js} +1 -1
  98. package/dist/client/assets/{cli-auth-success-BoeMcWLR.js → cli-auth-success-Nd2PZ9ox.js} +1 -1
  99. package/dist/client/assets/{client-icons-CJKx4xiT.js → client-icons-BI4heyKD.js} +1 -1
  100. package/dist/client/assets/{collapsible-lK_B-eQd.js → collapsible-Cq1aFrCg.js} +1 -1
  101. package/dist/client/assets/{collection-detail-Vn8gJTW3.js → collection-detail-ClkMaErn.js} +1 -1
  102. package/dist/client/assets/{collection-display-button-D2MgCcuo.js → collection-display-button-BjwUZtSd.js} +1 -1
  103. package/dist/client/assets/{collection-search-y9E4m6mw.js → collection-search-Cp82h57b.js} +1 -1
  104. package/dist/client/assets/{collection-table-wrapper-C3XHd41R.js → collection-table-wrapper-BmpUFI8T.js} +1 -1
  105. package/dist/client/assets/{collection-tabs-4g4B9cjE.js → collection-tabs-C6HP7d51.js} +1 -1
  106. package/dist/client/assets/{column-rules-9DKyUJpF.js → column-rules-CJ4d_g8W.js} +1 -1
  107. package/dist/client/assets/{combobox-jkqCfq0Y.js → combobox-CF6B9Wmt.js} +1 -1
  108. package/dist/client/assets/{command-CS7Iytaa.js → command-BfXTTBD9.js} +1 -1
  109. package/dist/client/assets/{companion-mcps-section-CDZ8AQp6.js → companion-mcps-section-BLJLcZpb.js} +1 -1
  110. package/dist/client/assets/{config-BsqcAsk2.js → config-BZYNAwT6.js} +1 -1
  111. package/dist/client/assets/{connect-DPAUHTC6.js → connect-FZH1ks7l.js} +1 -1
  112. package/dist/client/assets/{connect-layout-BcuosOAR.js → connect-layout-BbzklNPm.js} +1 -1
  113. package/dist/client/assets/{connection-BkSfvJVU.js → connection-BTT1rt_2.js} +1 -1
  114. package/dist/client/assets/{connection-card-C_MH7Wpz.js → connection-card-CsIFgDe8.js} +1 -1
  115. package/dist/client/assets/{connection-detail-BaqloXKG.js → connection-detail-BSkgGFWF.js} +1 -1
  116. package/dist/client/assets/{connection-form-helpers-DQVYQ8po.js → connection-form-helpers-Bg3g47y2.js} +1 -1
  117. package/dist/client/assets/{connections-D7TDDOL8.js → connections-BcHX4l-p.js} +1 -1
  118. package/dist/client/assets/{context-DotpkFxJ.js → context-D9dob61q.js} +1 -1
  119. package/dist/client/assets/{context-menu-wgsE3MAX.js → context-menu-DPNtSYt0.js} +1 -1
  120. package/dist/client/assets/{core.esm-z-XuEZtM.js → core.esm-C90YQIGJ.js} +1 -1
  121. package/dist/client/assets/{create-organization-dialog-C0ldUMIm.js → create-organization-dialog-BoHINOyM.js} +1 -1
  122. package/dist/client/assets/{daily-pulse-OvS9j1DR.js → daily-pulse-tLPif3nO.js} +1 -1
  123. package/dist/client/assets/{device-hint-CwQqo1e8.js → device-hint-ClxhQWtk.js} +1 -1
  124. package/dist/client/assets/{discover-w0SumBzq.js → discover-BGUAZcdZ.js} +1 -1
  125. package/dist/client/assets/{domain-settings-BrjA42lz.js → domain-settings-C1KL1CIp.js} +1 -1
  126. package/dist/client/assets/{drawer-zHclspIB.js → drawer-20Gv7XN0.js} +1 -1
  127. package/dist/client/assets/{editor-DTtfEyTo.js → editor-CklcmkgZ.js} +1 -1
  128. package/dist/client/assets/{empty-state-Tupt8Yp0.js → empty-state-BWSdqiOv.js} +1 -1
  129. package/dist/client/assets/{empty-state-IlGYVTi4.js → empty-state-CsVqjGqu.js} +1 -1
  130. package/dist/client/assets/{extract-connection-data-IvYRZ7XN.js → extract-connection-data-C8Idk1Oj.js} +1 -1
  131. package/dist/client/assets/{feature-gate-BWBuladg.js → feature-gate-Brul-7Vc.js} +1 -1
  132. package/dist/client/assets/{feature-paywall-CWEKFuzv.js → feature-paywall-B1-Kq6zS.js} +1 -1
  133. package/dist/client/assets/{file-explorer-DDezPRHM.js → file-explorer-0AwiXzsI.js} +1 -1
  134. package/dist/client/assets/{file-preview-CtE-K6lW.js → file-preview-BTrgY74n.js} +1 -1
  135. package/dist/client/assets/{file-share-button-0-Y1imyL.js → file-share-button-kQh5APqr.js} +1 -1
  136. package/dist/client/assets/{file-type-icon-BR9FUHTR.js → file-type-icon-Dbuavq5L.js} +1 -1
  137. package/dist/client/assets/flat-project-YGEAxpJq.js +1 -0
  138. package/dist/client/assets/{folder-icon-Codo-krq.js → folder-icon-D1xnfwm_.js} +1 -1
  139. package/dist/client/assets/{form-WKBhslpB.js → form-BZ1i_2GJ.js} +1 -1
  140. package/dist/client/assets/{general-BmVwgSpQ.js → general-C8gjvVqx.js} +1 -1
  141. package/dist/client/assets/{home-C8HlFESK.js → home-BnDlnEHu.js} +1 -1
  142. package/dist/client/assets/{icon-button-CQ2v9QBu.js → icon-button-BDbIWVW3.js} +1 -1
  143. package/dist/client/assets/{index-C2j6GKW9.js → index-4XFLhK7S.js} +2 -2
  144. package/dist/client/assets/{index-CaRHAAtN.js → index-Bs_Ow9qj.js} +1 -1
  145. package/dist/client/assets/{index-Du6GVafn.js → index-C0n7mPS1.js} +1 -1
  146. package/dist/client/assets/{index-B0icUXIz.js → index-C8VO6rJ2.js} +3 -3
  147. package/dist/client/assets/{index-DtWzP34K.js → index-CN8TQhg6.js} +1 -1
  148. package/dist/client/assets/{index-bNAUdK_u.js → index-COd_qFje.js} +1 -1
  149. package/dist/client/assets/{index-PT6caLTc.js → index-CWl9v4eu.js} +1 -1
  150. package/dist/client/assets/{index-DBECXDDY.js → index-D94af8m5.js} +1 -1
  151. package/dist/client/assets/{index-ByZer9OV.js → index-DVVx4F0i.js} +1 -1
  152. package/dist/client/assets/{index-GDECV0d_.js → index-DlsOrQnt.js} +1 -1
  153. package/dist/client/assets/{index-tFXuptGT.js → index-DrIzKTur.js} +1 -1
  154. package/dist/client/assets/{index-DBa0gwyi.js → index-DujNp8wX.js} +1 -1
  155. package/dist/client/assets/{index-D7CijXBU.js → index-pEr2eE8n.js} +1 -1
  156. package/dist/client/assets/{index-redirect-C5xUvpJP.js → index-redirect-BQGkKPeS.js} +1 -1
  157. package/dist/client/assets/{infiniteQueryObserver-C6N8XSEQ.js → infiniteQueryObserver-DLzEnjM8.js} +1 -1
  158. package/dist/client/assets/{infra-billing-D4jz_iHz.js → infra-billing-Df_WNbOe.js} +1 -1
  159. package/dist/client/assets/{input-BdGTWCdG.js → input-BzdgO_dK.js} +3 -3
  160. package/dist/client/assets/{input-cQlwYX14.js → input-DQtH0um6.js} +1 -1
  161. package/dist/client/assets/{integration-icon-BEDt5ixx.js → integration-icon-BqsHjS-b.js} +1 -1
  162. package/dist/client/assets/{jira-icon-CKOwWChZ.js → jira-icon-CG6W0SJT.js} +1 -1
  163. package/dist/client/assets/{label-4-MnDGKW.js → label-ByKoWpTn.js} +1 -1
  164. package/dist/client/assets/{layout-DKnCDpGu.js → layout-Ih9F7QDG.js} +1 -1
  165. package/dist/client/assets/{legacy-agents-deep-DLGtr7jt.js → legacy-agents-deep-D4aZSj1S.js} +1 -1
  166. package/dist/client/assets/{legacy-main-redirect-Qlpuj-nH.js → legacy-main-redirect-CawnT8bs.js} +1 -1
  167. package/dist/client/assets/library-BIKWwK0_.js +1 -0
  168. package/dist/client/assets/{library-tab-CkVkDVba.js → library-tab-CWnL_FfR.js} +1 -1
  169. package/dist/client/assets/{login-CQ3a5yC5.js → login-BV5vcG2Q.js} +1 -1
  170. package/dist/client/assets/{markdown-Cnsn7OZ-.js → markdown-BW2GJSHC.js} +1 -1
  171. package/dist/client/assets/{mcp-app-renderer-CiP1G5M8.js → mcp-app-renderer-fDcax7T2.js} +1 -1
  172. package/dist/client/assets/{mcp-oauth-Dr4hlCrA.js → mcp-oauth-BjHElKzR.js} +1 -1
  173. package/dist/client/assets/{mcp-oauth-BTUPlYVf.js → mcp-oauth-CVI2AkSu.js} +1 -1
  174. package/dist/client/assets/{members-COpX9ByA.js → members-f-Grp_Zc.js} +1 -1
  175. package/dist/client/assets/{memory-BNe0QYUK.js → memory-CYDtZWEC.js} +1 -1
  176. package/dist/client/assets/{mini-report-page-DR1HcGbn.js → mini-report-page-BvYGpq5f.js} +1 -1
  177. package/dist/client/assets/{mock-board-DxAY2kop.js → mock-board-hNRrDjvq.js} +1 -1
  178. package/dist/client/assets/{monaco-editor-BEzZFZkL.js → monaco-editor-DkahnDKS.js} +1 -1
  179. package/dist/client/assets/{monitoring-stats-row-Bz9gliRr.js → monitoring-stats-row-Cx7S4sFz.js} +1 -1
  180. package/dist/client/assets/{multi-select-BrALXGoH.js → multi-select-BsYgOBGm.js} +1 -1
  181. package/dist/client/assets/{mustache-DW9HpHJ_.js → mustache-D7UTScQH.js} +1 -1
  182. package/dist/client/assets/{new-project-dialog-DYby_l6E.js → new-project-dialog-DdG-RgMO.js} +1 -1
  183. package/dist/client/assets/{oauth-callback-Cwr39tOx.js → oauth-callback-GzdTg9VJ.js} +1 -1
  184. package/dist/client/assets/{oauth-callback-ai-provider-CAcEy37s.js → oauth-callback-ai-provider-BANi9OcB.js} +1 -1
  185. package/dist/client/assets/{onboarding-CVS4iTKP.js → onboarding-w2z3NDRW.js} +1 -1
  186. package/dist/client/assets/{openai-conversation-CaqCggLj.js → openai-conversation-C7TUEjal.js} +1 -1
  187. package/dist/client/assets/{optimistic-project-sidebar-views-BMdWVdaT.js → optimistic-project-sidebar-views-7fDRNM1p.js} +1 -1
  188. package/dist/client/assets/{organization-choice-CAlyIO1z.js → organization-choice-DRyD5yII.js} +1 -1
  189. package/dist/client/assets/{orgs-DxKiUnBb.js → orgs-EvyltNU-.js} +1 -1
  190. package/dist/client/assets/{page-seo-form-CPT8Z29L.js → page-seo-form-0-tAzxyW.js} +1 -1
  191. package/dist/client/assets/{pair-DVoctykA.js → pair-Cm6oR2ES.js} +1 -1
  192. package/dist/client/assets/{plan-ladder-BN-BvP0u.js → plan-ladder-D4-VvMwX.js} +1 -1
  193. package/dist/client/assets/{popover-gs_i-X_H.js → popover-DGVyEQ9q.js} +1 -1
  194. package/dist/client/assets/{post-calendar-F4sonI91.js → post-calendar-CGDOG4Ay.js} +1 -1
  195. package/dist/client/assets/{post-editor-hlGNe5ye.js → post-editor-BFSJ6I4d.js} +1 -1
  196. package/dist/client/assets/{preview-content-C5kFNgwQ.js → preview-content-KcSZme5m.js} +1 -1
  197. package/dist/client/assets/{preview-dialog-Qbq8z8Qs.js → preview-dialog-DHH8biYM.js} +1 -1
  198. package/dist/client/assets/{preview-panel-_aZ2oLHQ.js → preview-panel-CMlsnFlv.js} +1 -1
  199. package/dist/client/assets/{product-picker-dialog-DlNUPfQ_.js → product-picker-dialog-Bz7bVPFI.js} +1 -1
  200. package/dist/client/assets/{profile-BRCYDOAe.js → profile-be5NkG2U.js} +1 -1
  201. package/dist/client/assets/{project-app-view-Ck5FRtUs.js → project-app-view-BV4H0rEJ.js} +1 -1
  202. package/dist/client/assets/{project-feed-QapOYIZm.js → project-feed-Dly67hgE.js} +1 -1
  203. package/dist/client/assets/{project-icon-CgKRb1hz.js → project-icon-CMe6LZd9.js} +1 -1
  204. package/dist/client/assets/project-reports-BqyykKm5.js +1 -0
  205. package/dist/client/assets/project-tasks-DHxi49Je.js +1 -0
  206. package/dist/client/assets/{projects-nbQYC9f9.js → projects-CDscJwj7.js} +1 -1
  207. package/dist/client/assets/{projects-empty-state-C8avo7T4.js → projects-empty-state-VFtNQKgJ.js} +1 -1
  208. package/dist/client/assets/{prompts-DKX8SExm.js → prompts-CG--DGsd.js} +1 -1
  209. package/dist/client/assets/record-editor-CQTy2--L.js +1 -0
  210. package/dist/client/assets/redirect-editor-Diq4Tlsx.js +1 -0
  211. package/dist/client/assets/reports-Bew0urwY.js +1 -0
  212. package/dist/client/assets/{reports-BbWvr6H5.js → reports-CODPKkJO.js} +1 -1
  213. package/dist/client/assets/{reports-onboarding-tih0kZo9.js → reports-onboarding-D0Irch0-.js} +1 -1
  214. package/dist/client/assets/{reports-tab-yBLzRcur.js → reports-tab-NvqzpdHL.js} +2 -2
  215. package/dist/client/assets/{repositories-KCRi18iu.js → repositories-xZsmQvzi.js} +1 -1
  216. package/dist/client/assets/{repository-binding-Bz8gaDWp.js → repository-binding-C_InVumU.js} +1 -1
  217. package/dist/client/assets/{repository-import-picker-OXXLG8_F.js → repository-import-picker-Bixi7zBc.js} +1 -1
  218. package/dist/client/assets/{repository-picker-CUJZTLEq.js → repository-picker-BHgNNGrn.js} +1 -1
  219. package/dist/client/assets/{require-capability-B2UH2rc6.js → require-capability-D49j17CD.js} +1 -1
  220. package/dist/client/assets/{required-auth-layout-Btbks3py.js → required-auth-layout-CxaLcttO.js} +1 -1
  221. package/dist/client/assets/{reset-password-CUN3lKnX.js → reset-password-Bg3-bOJi.js} +1 -1
  222. package/dist/client/assets/{resizable-Db2VNPZt.js → resizable-sj2QiDEc.js} +1 -1
  223. package/dist/client/assets/{resolve-tab-icon-BtnjGWT-.js → resolve-tab-icon-Benn2iaL.js} +1 -1
  224. package/dist/client/assets/{review-settings-Ct7OUs4h.js → review-settings-DjIYcWCV.js} +1 -1
  225. package/dist/client/assets/{rich-text-link-control-COOeDn-U.js → rich-text-link-control-C2ryIXD3.js} +1 -1
  226. package/dist/client/assets/{roles-u-T2VmM2.js → roles-8gcvGZJw.js} +1 -1
  227. package/dist/client/assets/{route-CTn-1Nr7.js → route-C0mgkpSg.js} +1 -1
  228. package/dist/client/assets/route-DQYAyMBI.js +1 -0
  229. package/dist/client/assets/{route-Bc9IilYL.js → route-DyDxvrHS.js} +1 -1
  230. package/dist/client/assets/{runnable-block-editor-C2U07j1a.js → runnable-block-editor-dTVVXX5v.js} +1 -1
  231. package/dist/client/assets/{sandbox-lifecycle-context-Dhj-bJE2.js → sandbox-lifecycle-context-DzcFvw1G.js} +1 -1
  232. package/dist/client/assets/{schema-DDRR7qV7.js → schema-DyLXU88M.js} +1 -1
  233. package/dist/client/assets/{scroll-area-PFGh7bgI.js → scroll-area-DYybJ63r.js} +1 -1
  234. package/dist/client/assets/{search-input-vG9YkvpS.js → search-input-DJwYl_zW.js} +1 -1
  235. package/dist/client/assets/{search-toggle-BfYvpGc1.js → search-toggle-DOVOYril.js} +1 -1
  236. package/dist/client/assets/{secret-picker-C5tfGGz3.js → secret-picker-C40fL6uP.js} +1 -1
  237. package/dist/client/assets/{secrets-4lhKX4tY.js → secrets-Kq6gwxOB.js} +1 -1
  238. package/dist/client/assets/{sections-editor-CoHecr0y.js → sections-editor-5-gvD3vu.js} +1 -1
  239. package/dist/client/assets/{select-DbQGrGQ8.js → select-CEirlFRV.js} +1 -1
  240. package/dist/client/assets/{select-model-DNM2aBIM.js → select-model-5mFHKpuo.js} +1 -1
  241. package/dist/client/assets/{seo-editor-l91X5kZv.js → seo-editor-DHTxrlCs.js} +1 -1
  242. package/dist/client/assets/{separator-DFhoNpuy.js → separator-E-ZvgvRL.js} +1 -1
  243. package/dist/client/assets/{settings-tab-tVRweOC9.js → settings-tab-C9ihpTae.js} +1 -1
  244. package/dist/client/assets/{sheet-DOAMDmx1.js → sheet-Bs1jJD9o.js} +1 -1
  245. package/dist/client/assets/{shell-layout-fIZDbVTW.js → shell-layout-DZBrJWAA.js} +1 -1
  246. package/dist/client/assets/{skills-BxKYMJ49.js → skills-7xwa1ol9.js} +1 -1
  247. package/dist/client/assets/{slider-BSnjHAZ-.js → slider-ki239RUG.js} +1 -1
  248. package/dist/client/assets/{sortable.esm-Bs4X-lz9.js → sortable.esm-Dvqn6rnz.js} +1 -1
  249. package/dist/client/assets/{sso-B3Ei1QLd.js → sso-n5eUQ_Xy.js} +1 -1
  250. package/dist/client/assets/{suggestion-GJMxb511.js → suggestion-DHADwupQ.js} +1 -1
  251. package/dist/client/assets/{switch-DjuAzQl7.js → switch-BD8_vvWq.js} +1 -1
  252. package/dist/client/assets/{symbol-BW5SQq5r.js → symbol-Dx-KpnN7.js} +1 -1
  253. package/dist/client/assets/{synced-repos-pXak6fc3.js → synced-repos-B-5rRFwb.js} +1 -1
  254. package/dist/client/assets/{tab-icon-glyph-RcqrgDwB.js → tab-icon-glyph-B9KZAh18.js} +1 -1
  255. package/dist/client/assets/{table-BXl79O5k.js → table-B1C2ctbL.js} +1 -1
  256. package/dist/client/assets/{tabs-BOZVTPjF.js → tabs-tkvg_YSq.js} +1 -1
  257. package/dist/client/assets/{task-board-C57y0iD-.js → task-board-DcolQ15W.js} +1 -1
  258. package/dist/client/assets/{task-route-Cjd8CAnK.js → task-route-Dp4TtKUe.js} +1 -1
  259. package/dist/client/assets/{task-status-CAJCzZIn.js → task-status-CF9KSEEA.js} +1 -1
  260. package/dist/client/assets/taskboard-analytics-C_zsZRzy.js +1 -0
  261. package/dist/client/assets/{tasks-D9zTcMtd.js → tasks-B6gqzeMQ.js} +1 -1
  262. package/dist/client/assets/tasks-O62NX5lN.js +1 -0
  263. package/dist/client/assets/{textarea-CPiGh4Bi.js → textarea-BpBHfDQd.js} +1 -1
  264. package/dist/client/assets/{thread-analytics-B_7_b3yj.js → thread-analytics-DfV1z1-8.js} +1 -1
  265. package/dist/client/assets/{thread-button-Qtn3TibT.js → thread-button-BNBHV_Wu.js} +1 -1
  266. package/dist/client/assets/{thread-intent-4Oc5TOnJ.js → thread-intent-DqexYQAC.js} +1 -1
  267. package/dist/client/assets/{thread-route-D6XzI9r7.js → thread-route-B-yx1tFW.js} +1 -1
  268. package/dist/client/assets/{thread-route-iNikIgfP.js → thread-route-BXR-ufCz.js} +1 -1
  269. package/dist/client/assets/{thread-sheet-body-Di9tG30P.js → thread-sheet-body-Bgp-QwJy.js} +1 -1
  270. package/dist/client/assets/{time-range-picker-CDHHOsBr.js → time-range-picker-DILwkH82.js} +1 -1
  271. package/dist/client/assets/{toggle-group-DAqrdZL7.js → toggle-group-SSpwI-zE.js} +1 -1
  272. package/dist/client/assets/{tool-namespace-BjEWyMab.js → tool-namespace-CsdkV2uo.js} +1 -1
  273. package/dist/client/assets/{toolbar-icon-button-BfQeMxca.js → toolbar-icon-button-CIXm0pyl.js} +1 -1
  274. package/dist/client/assets/{tooltip-suYIqFBg.js → tooltip-CUk78XFR.js} +1 -1
  275. package/dist/client/assets/{tooltipContext-CMLuW3HN.js → tooltipContext-BY8Qgc3U.js} +1 -1
  276. package/dist/client/assets/{track-EcNm8jZX.js → track-DDd4x4-Y.js} +1 -1
  277. package/dist/client/assets/{types-D15JKPMl.js → types-DPbXDbOS.js} +1 -1
  278. package/dist/client/assets/{url-slug-BRCwD3Fe.js → url-slug-CFKzH8Z4.js} +1 -1
  279. package/dist/client/assets/{usage-stats-DsRsPtyV.js → usage-stats-wClM7TZ-.js} +1 -1
  280. package/dist/client/assets/{use-ai-providers-C3Kx53JX.js → use-ai-providers-CAEoYJwC.js} +1 -1
  281. package/dist/client/assets/{use-automations-Crtp2oCM.js → use-automations-DXjaaH0T.js} +1 -1
  282. package/dist/client/assets/{use-autosave-C0fdGzgj.js → use-autosave-BOlmY_xu.js} +1 -1
  283. package/dist/client/assets/{use-chat-layout-state-B26tNhCJ.js → use-chat-layout-state-BYcPLpFV.js} +1 -1
  284. package/dist/client/assets/{use-chat-navigation-Bmt_svKF.js → use-chat-navigation-CKcbdotk.js} +1 -1
  285. package/dist/client/assets/{use-clock-tick-C_wm8Myy.js → use-clock-tick-CwQv-OCe.js} +1 -1
  286. package/dist/client/assets/{use-connect-companion-F5oUhtvG.js → use-connect-companion-PBAraKBj.js} +1 -1
  287. package/dist/client/assets/{use-connection-Dzl69g_7.js → use-connection-DldRXuvq.js} +1 -1
  288. package/dist/client/assets/{use-copy-Cs1Dtpg9.js → use-copy-BC3Fmh27.js} +1 -1
  289. package/dist/client/assets/{use-create-virtual-mcp-Dt66Blst.js → use-create-virtual-mcp-D8P6CVcB.js} +1 -1
  290. package/dist/client/assets/{use-date-fns-locale-CsYh8bS5.js → use-date-fns-locale-DquxgLdE.js} +1 -1
  291. package/dist/client/assets/{use-debounced-autosave-DErH3S0W.js → use-debounced-autosave-mYSK51JG.js} +1 -1
  292. package/dist/client/assets/{use-debounced-value-ukFTa1_g.js → use-debounced-value-CNkuXNOW.js} +1 -1
  293. package/dist/client/assets/{use-deco-credits-CiEYY96V.js → use-deco-credits-DKtKOwIN.js} +1 -1
  294. package/dist/client/assets/{use-decopilot-events-CbkNqFn8.js → use-decopilot-events-DH5jig6y.js} +1 -1
  295. package/dist/client/assets/{use-delete-connection-D8Z-KWmD.js → use-delete-connection-Dzg9cQZm.js} +1 -1
  296. package/dist/client/assets/{use-deployment-admin-D_WFI7oj.js → use-deployment-admin-CyBWrUgL.js} +1 -1
  297. package/dist/client/assets/{use-ensure-project-folder-AaBo8kSZ.js → use-ensure-project-folder-CdHM_a-9.js} +1 -1
  298. package/dist/client/assets/{use-fast-preview-draft-url-Cm7cfRW8.js → use-fast-preview-draft-url-Cuacxxyo.js} +1 -1
  299. package/dist/client/assets/{use-file-configs-B5izc2Rd.js → use-file-configs-DsMQGho1.js} +1 -1
  300. package/dist/client/assets/{use-infinite-scroll-C28hKaW1.js → use-infinite-scroll-C0Ths8NM.js} +1 -1
  301. package/dist/client/assets/{use-join-requests-Duz41fBj.js → use-join-requests-CoVXbvos.js} +1 -1
  302. package/dist/client/assets/{use-main-panel-tabs-DtdvkapJ.js → use-main-panel-tabs-DlD2zr1g.js} +1 -1
  303. package/dist/client/assets/{use-mcp-auth-status-CPXPh7cI.js → use-mcp-auth-status-B2t4xmcR.js} +1 -1
  304. package/dist/client/assets/{use-mcp-client-eXA2w8ZE.js → use-mcp-client-C5uLw7Lc.js} +1 -1
  305. package/dist/client/assets/{use-mcp-prompts-DmU6o9Xc.js → use-mcp-prompts-Dxu80Ack.js} +1 -1
  306. package/dist/client/assets/{use-mcp-tools-B4tf0I9F.js → use-mcp-tools-Cm9CvYn6.js} +1 -1
  307. package/dist/client/assets/{use-members-4sfHvlaj.js → use-members-C9_S9nP9.js} +1 -1
  308. package/dist/client/assets/{use-mobile-HT4128sM.js → use-mobile-Buz9Esa_.js} +1 -1
  309. package/dist/client/assets/{use-navigate-to-agent-B7zN39On.js → use-navigate-to-agent-C41zpB_Z.js} +1 -1
  310. package/dist/client/assets/use-new-blocks-editor-DuP8uKZj.js +1 -0
  311. package/dist/client/assets/{use-open-billing-url-2qxFombc.js → use-open-billing-url-C1VukQDg.js} +1 -1
  312. package/dist/client/assets/{use-org-auth-client-BMEgAdHb.js → use-org-auth-client-DjRiIxwH.js} +1 -1
  313. package/dist/client/assets/{use-org-fs-B3DmwHAZ.js → use-org-fs-DqhUUlbQ.js} +1 -1
  314. package/dist/client/assets/{use-org-repo-syncs-D3ekcvfg.js → use-org-repo-syncs-cx9r2nZl.js} +1 -1
  315. package/dist/client/assets/{use-org-sso-DS8GzAQg.js → use-org-sso-DVCQNBfN.js} +1 -1
  316. package/dist/client/assets/{use-organization-roles-6zOVe4o-.js → use-organization-roles-Bp0RCVOK.js} +1 -1
  317. package/dist/client/assets/{use-organization-settings-Bz6BeBAj.js → use-organization-settings-B0rQmLIX.js} +1 -1
  318. package/dist/client/assets/{use-panel-navigate-EBCZsVQ_.js → use-panel-navigate-DOyxnt44.js} +1 -1
  319. package/dist/client/assets/{use-project-scope-Bb0vPnr8.js → use-project-scope-DJTJDi3A.js} +1 -1
  320. package/dist/client/assets/{use-releases-ClwElQgx.js → use-releases-BXUiPgUU.js} +1 -1
  321. package/dist/client/assets/{use-reports-diagnostic-BK1w_pLQ.js → use-reports-diagnostic-frCP_UW9.js} +1 -1
  322. package/dist/client/assets/{use-sandbox-events-Chsot9e6.js → use-sandbox-events-Clj9v6On.js} +1 -1
  323. package/dist/client/assets/{use-secrets-kYdI8lvW.js → use-secrets-CIfBnw6x.js} +1 -1
  324. package/dist/client/assets/{use-section-preview-base-D4dQm6ck.js → use-section-preview-base-BYZSxM0z.js} +1 -1
  325. package/dist/client/assets/{use-tags-vapSsi06.js → use-tags-Blq5AODj.js} +1 -1
  326. package/dist/client/assets/{use-task-board-analytics-YT4Volqy.js → use-task-board-analytics-D09WT40p.js} +1 -1
  327. package/dist/client/assets/{use-task-board-events-bAA1XgLM.js → use-task-board-events-Bx8_k4aV.js} +1 -1
  328. package/dist/client/assets/{use-task-board-item-prs-B0FT2W07.js → use-task-board-item-prs-Bsgf-2Zm.js} +1 -1
  329. package/dist/client/assets/{use-task-board-items-C9LMZrBO.js → use-task-board-items-CIYsbBEM.js} +1 -1
  330. package/dist/client/assets/{use-task-metadata-DgjDbAXI.js → use-task-metadata-DDV_r81k.js} +1 -1
  331. package/dist/client/assets/{use-thread-analytics-B9q4Ebge.js → use-thread-analytics-BuosijZj.js} +1 -1
  332. package/dist/client/assets/{use-thread-outputs-BZE9K3Hp.js → use-thread-outputs-D13C6fsy.js} +1 -1
  333. package/dist/client/assets/useInfiniteQuery-B3MUNCKJ.js +1 -0
  334. package/dist/client/assets/{useQueries-BhA2JM5X.js → useQueries-DZMzH0ea.js} +1 -1
  335. package/dist/client/assets/useSuspenseInfiniteQuery-DPTWpcSJ.js +1 -0
  336. package/dist/client/assets/{users-DDE8Tbam.js → users-CE3WLjUJ.js} +1 -1
  337. package/dist/client/assets/{utils-QsQ2yEbh.js → utils-qUv9_Hyk.js} +1 -1
  338. package/dist/client/assets/{variant-calendar-77oeK5vi.js → variant-calendar-B604PCFx.js} +1 -1
  339. package/dist/client/assets/{variant-matcher-override-ChXktSn7.js → variant-matcher-override-CgF3ujB9.js} +1 -1
  340. package/dist/client/assets/{view-mode-toggle-BrFGbylt.js → view-mode-toggle-BaZ1kmhW.js} +1 -1
  341. package/dist/client/assets/{virtual-mcp-DYpYm5Qi.js → virtual-mcp-CWsV4-pi.js} +1 -1
  342. package/dist/client/assets/{watch-sse-pool-YrM1VSdM.js → watch-sse-pool-BjTl5yOD.js} +1 -1
  343. package/dist/client/index.html +1 -1
  344. package/dist/server/server.js +1 -1
  345. package/package.json +1 -1
  346. package/dist/client/assets/agent-app-BXjPfkyc.js +0 -1
  347. package/dist/client/assets/agent-deck-CtmtBmBx.js +0 -1
  348. package/dist/client/assets/agent-library-Dh7CWaTR.js +0 -1
  349. package/dist/client/assets/agent-library-file-G7_pw9sf.js +0 -1
  350. package/dist/client/assets/agent-settings-C_Xfu2fI.js +0 -1
  351. package/dist/client/assets/agent-site-editor-code-C2cYJ1gd.js +0 -2
  352. package/dist/client/assets/agent-view-DXlTANvs.js +0 -1
  353. package/dist/client/assets/api-keys-BpjBduhZ.js +0 -1
  354. package/dist/client/assets/app-editor-DUK0IXGU.js +0 -1
  355. package/dist/client/assets/flat-project-CJztueGN.js +0 -1
  356. package/dist/client/assets/library-CEzuKcTE.js +0 -1
  357. package/dist/client/assets/project-reports-CyBWkEE2.js +0 -1
  358. package/dist/client/assets/project-tasks-CMRv6uE5.js +0 -1
  359. package/dist/client/assets/record-editor-DwX0B9ip.js +0 -1
  360. package/dist/client/assets/redirect-editor-CCi0diD6.js +0 -1
  361. package/dist/client/assets/reports-BFZBOAI-.js +0 -1
  362. package/dist/client/assets/route-4yKkCbUJ.js +0 -1
  363. package/dist/client/assets/taskboard-analytics-Bw1zkfYC.js +0 -1
  364. package/dist/client/assets/tasks-DC4SpO7e.js +0 -1
  365. package/dist/client/assets/use-new-blocks-editor-BXHg7Zkj.js +0 -1
  366. package/dist/client/assets/useInfiniteQuery-DNPgGGZO.js +0 -1
  367. package/dist/client/assets/useSuspenseInfiniteQuery-CD5WtYqv.js +0 -1
@@ -4329,7 +4329,7 @@ ${J.join(`
4329
4329
  `)}`:X}function K95($){let Z=new Set;for(let Q of $)for(let Y of Q.split(`
4330
4330
  `)){let X=Y.trim();if(/^Co-authored-by:\s/i.test(X))Z.add(X)}return[...Z]}var OF8=200,s55=12,r55,e55,$95=6,Q95=300,Tx0=3;var HP1=L(()=>{O7();wZ0();r$();Ax0();r55={aheadBy:0,behindBy:0,files:[]};e55=/(?:^|\/)\.deco\/blocks\/[^/]+\.json$/i});function F95($){if(!$||$.includes(".."))return!1;return H95.test($)}function EF8($){return U95.includes($)}function FP1($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!F95(Z))return null;let{__resolveType:Q,...Y}=$;return{resolveType:Z,payload:Y}}function UP1($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var H95,U95;var PF8=L(()=>{H95=/^[\w./@-]+$/;U95=["vtex/loaders/intelligentSearch/productList.ts","vtex/loaders/categories/tree.ts"]});function AZ0($,Z){let Q=$?.repository;if(!Q?.owner||!Q?.name)return null;if(!Q.connectionId)return Q;if(!Z.includes(Q.connectionId))return null;return Q}async function AF8($,Z,Q,Y){let X=$.organization?.id;if(!X)throw new Mz(t7);let J=await MN($.storage,X,Y);if(J&&await LL($.storage,J)){let F=await qN($,J,{forceRefresh:!0}).catch((U)=>{throw new Mz(U instanceof Error?U.message:t7)});await zF8($,Z,Q,F);return}let G=Y.connectionId??J?.legacyConnectionId;if(!G)throw new Mz("Push requires a connected git account. Connect the repository's provider for this project and restart the sandbox.");await Ki({ctx:$,connectionId:G,organizationId:X,forceRefresh:!0,onLegacyMintError:(F)=>{let U=F instanceof Error?F.message:t7;throw new Mz(U)}});let{cloneUrl:W,gitUserName:K,gitUserEmail:H}=await IN(G,Y.owner,Y.name,$.db,$.vault).catch((F)=>{let{code:U,message:N}=J2$(F instanceof Error?F.message:String(F));throw U?new Mz(N):F});await zF8($,Z,Q,{cloneUrl:W,gitUserName:K,gitUserEmail:H})}async function zF8($,Z,Q,Y){let{cloneUrl:X,gitUserName:J,gitUserEmail:G}=Y,W=bt($),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 BP(K,N95).catch(()=>K.statusText);throw Error(`Failed to refresh sandbox git credentials (${K.status}): ${H}`)}}var N95=10485760,Mz;var NP1=L(()=>{v3();Nx0();$40();HN0();X80();O7();Mz=class Mz extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function D95($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!B95.test(Z))throw Error(`Invalid branch name: ${$}`)}function yh($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(O95)])}async function j95($,Z){let Q=$.var.studioContext,Y=LY(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=iy(G?.metadata?.runtime);if(W)return W;let K=LM0(Z.virtualMcpMetadata),H=K==="cms"?await lE1(Q,{claimName:Z.claimName}):"alive",F=K==="cms"&&H!=="alive"?"cms":"sandbox",U=!!G&&(H==="gone"||H==="alive"&&K==="cms");if(U&&G)Z40(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 E95($){let Z=$.get("vmClaim");if(Z.runner)return Z.runner;try{return await WZ($.var.studioContext)}catch{return null}}function ut($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}async function RZ0($){let{virtualMcpMetadata:Z,connectionIds:Q}=$.get("vmClaim"),Y=$.var.studioContext,X=AZ0(Z,Q);if(!X)throw new y0({provider:"github",status:404,message:"Project has no repository"});let J=Q0(Y);return Ji(Y,J.id,X)}function DP1($,Z){let Q=Z instanceof Error?Z.message:String(Z),Y=EP$(Z);if(Y!==void 0)return $.json({error:Q},429,{...uZ,...Y===null?{}:{"Retry-After":String(Math.ceil(Y/1000))}});if(Z instanceof Z5)return $.json({error:Q},409,uZ);let X=wK(Z);if(X!==null){let J=X===404?404:X===409||X===422?409:502;return $.json({error:Q},J,uZ)}return $.json({error:Q},502,uZ)}async function BP1($,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 qF8($){try{let Z=await RZ0($),Q=await WP1(Z,$.get("vmClaim").branch);return $.json(Q,200,uZ)}catch(Z){return DP1($,Z)}}function TZ0($,Z){let Y=(qx0.get($)??Promise.resolve()).catch(()=>{}).then(Z),X=Y.catch(()=>{});return qx0.set($,X),X.finally(()=>{if(qx0.get($)===X)qx0.delete($)}),Y}async function yQ($,Z,Q){if(!Q?.runner&&$.get("vmClaim").runtime==="cms")return $.json({error:"sandbox not found: this session is sandbox-less"},404,uZ);let Y=Q?.runner??ut($);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",...uZ}})}}let D=await B.text(),O=Q?.redactRepoDir?P95(D):D,w=B.headers.get("content-type")??"application/json";return new Response(O,{status:B.status,headers:{"content-type":w,...uZ}})};try{if(F){let B=N();return B.catch(()=>{}),await Promise.race([B,new Promise((O,w)=>{if(F.aborted)return w(F.reason);F.addEventListener("abort",()=>w(F.reason),{once:!0})})])}return await N()}catch(B){let D=B instanceof Error?B.message:String(B);return $.json({error:`Daemon unreachable: ${D}`},502)}}function P95($){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 MF8($,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 z95($){return VF8.includes($)}var B95,L95=524288,TF8=65536,O95=1e4,RF8=2000,w95,qx0,uZ,VF8,IF8=()=>{let $=new Q1;$.use("/:virtualMcpId/:branch/*",w95),$.post("/:virtualMcpId/:branch/write",(Q)=>yQ(Q,"/_sandbox/write",{forwardJsonBody:!0,signal:yh(Q)})),$.post("/:virtualMcpId/:branch/unlink",(Q)=>yQ(Q,"/_sandbox/unlink",{forwardJsonBody:!0,signal:yh(Q)})),$.post("/:virtualMcpId/:branch/mkdir",(Q)=>yQ(Q,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:yh(Q)})),$.post("/:virtualMcpId/:branch/rename",(Q)=>yQ(Q,"/_sandbox/rename",{forwardJsonBody:!0,signal:yh(Q)})),$.post("/:virtualMcpId/:branch/read",(Q)=>yQ(Q,"/_sandbox/read",{forwardJsonBody:!0,signal:yh(Q)})),$.post("/:virtualMcpId/:branch/glob",(Q)=>yQ(Q,"/_sandbox/glob",{forwardJsonBody:!0,signal:yh(Q)})),$.post("/:virtualMcpId/:branch/grep",(Q)=>yQ(Q,"/_sandbox/grep",{forwardJsonBody:!0,signal:yh(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 yQ(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 yQ(Q,`/_sandbox/exec/${encodeURIComponent(Y)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(Q)=>yQ(Q,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDir:!0})),$.put("/:virtualMcpId/:branch/config",(Q)=>yQ(Q,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(Q)=>{let Y=Q.req.param("step");if(!Y||!z95(Y))return Q.json({error:`step must be one of: ${VF8.join(", ")}`},400);let X=Q.get("vmClaim"),J=await lE1(Q.var.studioContext,{claimName:X.claimName})==="gone"?null:await E95(Q);if(!J)return Q.json({error:"sandbox not found: nothing is running at this ref"},404,uZ);if(Y==="start"){let G=Q0(Q.var.studioContext),W=mi(X.virtualMcpMetadata);try{await UM0({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 yQ(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 TO(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 RH8(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 qF8(Q);return Z(Q)});let Z=(Q)=>yQ(Q,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([Q.req.raw.signal,AbortSignal.timeout(RF8)])});return $.post("/:virtualMcpId/:branch/git/status",(Q)=>{if(Q.get("vmClaim").runtime==="cms")return qF8(Q);return yQ(Q,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([Q.req.raw.signal,AbortSignal.timeout(RF8)])})}),$.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 RZ0(Q),G=await KP1(J,Y.branch,X.base);return Q.json(G,200,uZ)}catch(X){return DP1(Q,X)}return yQ(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,uZ);let Y=ut(Q);if(Y instanceof Response)return Y;let{claimName:X,virtualMcpMetadata:J,connectionIds:G}=Q.get("vmClaim"),W=Q.var.studioContext;return TZ0(X,async()=>{try{await cE1(W,Y,X);let K=AZ0(J,G);if(K)await AF8(W,Y,X,K)}catch(K){if(K instanceof Mz)return Q.json({error:K.message},403,uZ);let H=K instanceof Error?K.message:String(K);return Q.json({error:H},502,uZ)}return yQ(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 TZ0(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,uZ);try{let G=await RZ0(Q);return await jF8(G,Y.branch,J),Q.json({ok:!0},200,uZ)}catch(G){let W=wK(G)===409||G instanceof Z5?409:502,K=G instanceof Error?G.message:String(G);return Q.json({error:K},W,uZ)}});return TZ0(Y.claimName,()=>yQ(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 TZ0(Y.claimName,async()=>{try{let W=await Q.req.json().catch(()=>({})),K=await RZ0(Q),H=W.base??await K.getDefaultBranch();return await Rx0(K,Y.branch,H),Q.json({ok:!0},200,uZ)}catch(W){return DP1(Q,W)}});let X=ut(Q);if(X instanceof Response)return X;let{claimName:J}=Q.get("vmClaim"),G=Q.var.studioContext;return TZ0(J,async()=>{try{await cE1(G,X,J)}catch(W){let K=W instanceof Error?W.message:String(W);return Q.json({error:K},502,uZ)}return yQ(Q,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/judge-review",h5({maxSize:L95,onError:(Q)=>Q.json({error:"Payload too large"},413,uZ)}),async(Q)=>{let Y=Q.get("vmClaim"),X=null;if(Y.runtime!=="cms"){let H=ut(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,D]=VH8(F)&&N?[F,U]:X?await Promise.all([MF8(X,J,"/_sandbox/git/status","GET",{userId:G,projectRef:W}),MF8(X,J,"/_sandbox/git/diff","GET",{userId:G,projectRef:W})]):await(async()=>{let w=await RZ0(Q);return Promise.all([WP1(w,Y.branch),KP1(w,Y.branch)])})();await KK(K,Q0(K).id,"judging whether a change needs review");let O=await SH8(K,B,D,typeof H.language==="string"?H.language:void 0);return Q.json(O,200,uZ)}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,uZ);return Q.json({error:F},502,uZ)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(Q)=>{let Y=ut(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 BP1(Q,`${W}${J}`)}),$.post("/:virtualMcpId/:branch/preview-invoke",h5({maxSize:TF8,onError:(Q)=>Q.json({error:"Payload too large"},413)}),async(Q)=>{let Y=ut(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=FP1(G);if(!W)return Q.json({error:"Invalid or missing __resolveType"},400);let K=UP1(J,W.resolveType);return BP1(Q,K,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(W.payload),signal:AbortSignal.timeout(30000)})}),$.post("/:virtualMcpId/:branch/catalog-invoke",h5({maxSize:TF8,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):di(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=FP1(W);if(!K)return Q.json({error:"Invalid or missing __resolveType"},400);if(!EF8(K.resolveType))return Q.json({error:"resolveType not allowed"},403);let H=UP1(G,K.resolveType);return BP1(Q,H,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(K.payload),signal:AbortSignal.timeout(30000)})}),$};var kF8=L(()=>{W8();eK();vt();uE1();ci();zH8();IQ();ii();AH8();OX();JF();TH8();qH8();tY1();e80();CH8();O7();k5();HP1();PF8();Q40();NP1();B95=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;w95=Ux0(async($,Z)=>{let Q=$.var.studioContext;try{p(Q)}catch{return $.json({error:"Unauthorized"},401)}let Y=C0(Q);if(!Y)return $.json({error:"Unauthorized"},401);let X;try{X=Q0(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{D95(G)}catch(O){let w=O instanceof Error?O.message:String(O);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=v80({orgId:X.id,virtualMcpId:J,branch:G}),H=await QX1(Q,G),F=YX1(H,Y),U=PH8({userId:F,projectRef:K}),N=W.metadata??null,B=await j95($,{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((O)=>O.connection_id)??[],runtime:B}),Z();let D;try{D=await WZ(Q)}catch{D=null}if(!D)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:U,callerUserId:Y,runner:D,virtualMcpId:J,branch:G,userId:F,projectRef:K,virtualMcpMetadata:N,connectionIds:W.connections?.map((O)=>O.connection_id)??[],runtime:B}),Z()});qx0=new Map;uZ={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};VF8=["clone","install","start"]});function SF8($,Z,Q){let Y=LP1.get($);if(!Y)Y={pending:null,running:!1},LP1.set($,Y);if(!Y.pending)Y.pending={patches:[],deps:Z};let X=Y.pending;X.deps=Z;let J=new Promise((G,W)=>{X.patches.push({patch:Q,resolve:G,reject:W})});if(!Y.running)T95($,Y);return J}async function T95($,Z){Z.running=!0;try{while(Z.pending){let Q=Z.pending;Z.pending=null;try{let{sha:Y,accepted:X,conflicts:J}=await M95(Q);for(let G of X)G.resolve(Y);for(let{queued:G,blocks:W}of J)G.reject(new Mx0(W))}catch(Y){for(let X of Q.patches)X.reject(Y)}}}finally{if(Z.running=!1,!Z.pending)LP1.delete($)}}async function R95($,Z,Q,Y){let X=new Map,J=[];for(let W of Q){let K=zx0(Z,W)[0],H=K?Z.find((F)=>F.path===K):void 0;if(!H)X.set(W,null);else J.push({key:W,stem:H.stem,sha:H.sha})}let G=await JP1($,J,Y);for(let[W,{content:K}]of G.entries()){let H=J[W].key;try{X.set(H,await Dx0(JSON.parse(K)))}catch{X.set(H,CF8)}}return X}async function q95($,Z){let Q=new Map(Z),Y=[],X=[];for(let J of $){let{patch:G}=J,W=Object.entries(G.expect??{}).filter(([K,H])=>{let F=Q.get(K);return F!==CF8&&F!==H}).map(([K])=>K);if(W.length>0){X.push({queued:J,blocks:W});continue}Y.push(J);for(let[K,H]of Object.entries(G.set??{}))if(Q.has(K))Q.set(K,await Dx0(H));for(let K of G.delete??[])if(Q.has(K))Q.set(K,null)}return{accepted:Y,conflicts:X}}async function M95($){let{client:Z,branch:Q,packagePath:Y}=$.deps,X=new Map;for(let J=0;;J++){let G=await ht(Z,Q),W=await Z.listDecofileEntries(G,Y),K=XP1(W,Y),H=new Set($.patches.flatMap(({patch:j})=>Object.keys(j.expect??{}))),{accepted:F,conflicts:U}=await q95($.patches,H.size>0?await R95(Z,K,H,X):new Map),N=new Map,B=new Set;for(let{patch:j}of F){for(let[E,P]of Object.entries(j.set??{}))N.set(E,P),B.delete(E);for(let E of j.delete??[])B.add(E),N.delete(E)}let D=[],O=new Map(K.map((j)=>[j.path,{stem:j.stem,sha:j.sha}]));for(let[j,E]of N){let P=zx0(K,j),T=`${JSON.stringify(E,null,2)}
4331
4331
  `;await BF8(Z.repo,T);let z=P[0]??`${Px0(Y)}/${nE1(j)}.json`;D.push({path:z,content:T});let A=z.slice(z.lastIndexOf("/")+1,-5);O.set(z,{stem:A,content:T});for(let q of P.slice(1))D.push({path:q,deleted:!0}),O.delete(q)}for(let j of B)for(let E of zx0(K,j))D.push({path:E,deleted:!0}),O.delete(E);if(D.length===0)return{sha:G,accepted:F,conflicts:U};let w=Y?`${Y}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((j)=>j.type==="blob"&&j.path===w)){let j=await JP1(Z,O.values(),X),{decofile:E,skipped:P}=DZ0(j);if(P.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:GF(Z.repo),branch:Q,packagePath:Y,blocks:P.map((T)=>T.key)});D.push({path:w,content:E})}try{let{sha:j}=await Z.commitFiles({branch:Q,message:V95(N,B,$.deps.coAuthor),expectedHead:G,changes:D});return{sha:j,accepted:F,conflicts:U}}catch(j){if(!(j instanceof Z5)||J>=A95-1)throw j;await F$(V7(2000,200,J,2,0.5))}}}function V95($,Z,Q){let Y=(G)=>{let W=G.slice(0,3).join(", ");return G.length>3?`${W} (+${G.length-3} more)`:W},X=[];if($.size>0)X.push(`update ${Y([...$.keys()])}`);if(Z.size>0)X.push(`delete ${Y([...Z])}`);let J=`chore(decofile): ${X.join("; ")}`;return jQ1(J,Q)}var A95=3,Mx0,LP1,CF8;var _F8=L(()=>{Sq0();wZ0();t4();r$();O7();Ax0();Mx0=class Mx0 extends Error{blocks;constructor($){super(`Blocks changed since they were loaded: ${$.join(", ")}`);this.blocks=$;this.name="BlockConflictError"}};LP1=new Map;CF8=Symbol("unreadable")});import{createHmac as vF8,randomBytes as I95,timingSafeEqual as k95}from"crypto";function bF8(){if(Vx0)return Vx0;let $;try{let Z=L0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return Vx0=$?Buffer.from($):I95(32),Vx0}function OP1($){let Z=$.nowMs??Date.now(),Q={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+S95)/1000)},Y=Buffer.from(JSON.stringify(Q)).toString("base64url"),X=vF8("sha256",bF8()).update(Y).digest("base64url");return`${Y}.${X}`}function xF8($,Z){let Q=$.indexOf(".");if(Q<0)return!1;let Y=$.slice(0,Q),X=Buffer.from($.slice(Q+1)),J=Buffer.from(vF8("sha256",bF8()).update(Y).digest("base64url"));if(X.length!==J.length||!k95(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 S95=21600000,Vx0=null;var fF8=L(()=>{r1()});function Ix0($){return $&&typeof $==="object"&&!Array.isArray($)?$:null}function C95($){for(let[Z,Q]of Object.entries($)){if(!Z.startsWith("collections/blog/posts/"))continue;let Y=Ix0(Q)?.__resolveType;if(typeof Y==="string"&&Y)return Y}return"blog/loaders/Blogpost.ts"}function yF8($){let Z;try{Z=Ix0(JSON.parse($))}catch{return $}if(!Z)return $;let Q=C95(Z),Y={...Z},X=0;for(let[J,G]of Object.entries(Z)){if(!J.startsWith("blog-manager/posts/"))continue;let W=Ix0(G),K=W&&Ix0(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 qO}from"zod";function v95($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&_95.test($)}function cF8($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function qZ0($){let Z=$.get("decofileScope");return Ji($.var.studioContext,Z.organizationId,Z.repository)}function MZ0($,Z){let Q=Z instanceof Error?Z.message:String(Z);if(Z instanceof Mx0)return $.json({error:Q,code:"block-conflict",blocks:Z.blocks},409);if(Z instanceof Z5)return $.json({error:Q},409);let Y=wK(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 mF8(){let $=new Q1;return $.use("/:virtualMcpId/:branch",lF8),$.use("/:virtualMcpId/:branch/*",lF8),$.get("/:virtualMcpId/:branch",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await qZ0(Z),X=await DF8(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(yF8(X.decofile),200,{...J,"content-type":"application/json"});let G=OP1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.body(`{"version":${JSON.stringify(X.sha)},"token":${JSON.stringify(G)},"apiHost":${JSON.stringify(cF8(Z))},"decofile":${X.decofile}}`,200,{...J,"content-type":"application/json"})}catch(Y){return MZ0(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 qZ0(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 MZ0(Z,X)}}),$.patch("/:virtualMcpId/:branch",x95,async(Z)=>{let Q=Z.get("decofileScope"),Y=Z.var.studioContext,X=f95.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=xh(X.data)}catch(G){if(G instanceof LZ0)return Z.json({error:G.message},400);throw G}for(let G of[...Object.keys(J.set??{}),...J.delete??[]])try{Bx0(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(pE1(G))return Z.json({error:`Block key "${G}" collides with a framework resolver module and cannot be written`},400)}try{let G=await qZ0(Z),W=await SF8(`${Q.organizationId}/${Q.virtualMcpId}/${Q.branch}`,{client:G,branch:Q.branch,packagePath:Q.packagePath,coAuthor:bt(Y)},J),K=OP1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.json({version:W,token:K,apiHost:cF8(Z)})}catch(G){return MZ0(Z,G)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await qZ0(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(wK(W)!==409)throw W;await Rx0(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(wK(G)===409)return Z.json({error:"merge-conflict"},409);if(wK(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 MZ0(Z,Y)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await qZ0(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(wK(J)===404)return Z.json({baseBranch:X,aheadBy:0,behindBy:0});throw J}}catch(Y){return MZ0(Z,Y)}}),$}var _95,gF8=500,hF8=1048576,uF8=1024,b95=8388608,x95,f95,lF8;var dF8=L(()=>{Q40();wZ0();W8();eK();uE1();Nx0();NP1();O7();_F8();fF8();HP1();Ax0();JF();_95=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;x95=h5({maxSize:b95,onError:($)=>$.json({error:"Payload too large"},413)}),f95=qO.object({set:qO.record(qO.string(),qO.unknown()).optional(),delete:qO.array(qO.string()).optional(),expect:qO.record(qO.string(),qO.string().regex(/^[0-9a-f]{64}$/).nullable()).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)<=gF8,{message:`Patch cannot touch more than ${gF8} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=hF8),{message:`Each block must be at most ${hF8} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=uF8),{message:`Each block key must be at most ${uF8} characters`}).refine(($)=>Object.keys($.expect??{}).every((Z)=>(Z in($.set??{}))||($.delete??[]).includes(Z)),{message:"Each expected block must be one the patch sets or deletes"}).refine(($)=>Object.keys($.set??{}).every((Z)=>!($.delete??[]).includes(Z)),{message:"A block cannot be both set and deleted in the same patch"}),lF8=Ux0(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(!v95(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||!xF8(B,{organizationId:Y.id,virtualMcpId:X,branch:J}))return $.json({error:"Unauthorized"},401)}if(!await LG(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(!di(K))return $.json({error:"Project has no preview server configured"},404);let F=W.connections?.map((B)=>B.connection_id)??[],U=AZ0(K,F);if(!U)return $.json({error:"Project has no repository"},404);let N=K?.runtime;return $.set("decofileScope",{organizationId:Y.id,virtualMcpId:X,branch:J,packagePath:N?.path?.replace(/^\/+|\/+$/g,"")||null,repository:U,userId:G}),Z()})});var iF8=($)=>{let Z=new Q1;if(Z.use("*",Ft),Z.use("*",OG8),Z.route("/",DG8($.voiceSessions)),Z.route("/",Pb0()),Z.route("/",mG8()),Z.route("/",Z38()),Z.route("/",gG8()),Z.route("/",JH8()),Z.route("/",WH8()),Z.route("/",rK8()),Z.route("/",YH8()),Z.route("/",eK8()),Z.route("/",Kx0()),Z.route("/tools",DH8()),Z.route("/",UH8()),Z.route("/",CK8({kvStorage:$.kvStorage})),Z.route("/",kK8()),Z.route("/fs",cK8({getConnection:$.getNatsConnection})),Z.route("/sandbox",IF8()),Z.route("/decofile",mF8()),Z.route("/",tK8()),Z.route("/",dK8()),Z.route("/deco-sites",Ab0()),Z.route("/hosting",VG8()),Z.route("/monitor",bG8()),Z.route("/sso",Db0()),Z.route("/",Hx0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",AG8()),$.mountDevAssets)Z.route("/dev-assets",Mb0({orgFromPath:!0}));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);for(let Q of CE1)Z.use(`${Q}/:threadId`,$.mcpAuth);Z.route("/",UY8()),Z.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",$.betterAuthProtectedResourceHandler),Z.get("/mcp/.well-known/oauth-protected-resource",$.betterAuthProtectedResourceHandler);for(let Q of CE1)Z.route(Q,pK8());return Z.route("/mcp",sk0()),Z.route("/mcp/self",Xx0()),Z.route("/mcp",ek0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var pF8=L(()=>{W8();LG8();wG8();Yb0();TG8();Jj1();IG8();xG8();Vb0();Pz();$j1();dG8();Fj1();SK8();_K8();mK8();iK8();$50();iw1();$S0();SE1();nK8();oK8();aK8();$H8();bE1();GH8();KH8();NH8();xE1();LH8();fE1();rk0();kF8();dF8()});import{z as gh}from"zod";class wP1{adapter;getConnection;kvPromise;constructor($,Z){this.adapter=$;this.getConnection=Z}kv(){let $=this.getConnection();if(!$||$.isClosed())throw new q1(503,{message:"Voice transport is unavailable"});return this.kvPromise??=new oF8.Kvm(kx0.jetstream($)).create("STUDIO_VOICE_SESSIONS",{storage:kx0.StorageType.Memory,ttl:sF8.nanos(kL),max_bytes:10485760}).catch((Z)=>{throw this.kvPromise=void 0,Z}),this.kvPromise}async conversationAgent($){let Z=await this.kv(),Q=`agent.${$.conversationKey}`,Y=Date.now()+45000;while(Date.now()<Y){let X=await Z.get(Q),J=X?.operation==="PUT"?tF8.parse(X.json()):null;if(J?.state==="ready")return J.agentId;if(J?.state==="creating"&&J.expiresAt>Date.now()){await F$(200);continue}let G=nF8.encode(JSON.stringify({state:"creating",expiresAt:Date.now()+40000})),W;try{W=X&&J?await Z.update(Q,G,X.revision):await Z.create(Q,G)}catch{await F$(200);continue}try{let K=await $.ensureConversationAgent();return await Z.update(Q,nF8.encode(JSON.stringify({state:"ready",agentId:K})),W),K}catch(K){throw await Z.delete(Q,{previousSeq:W}).catch(()=>{}),K}}throw new q1(503,{message:"Voice conversation is starting; try again"})}async createSession($){let Z=this.adapter.forConversationModel($.model),Q=await this.conversationAgent(Z);try{return{provider:"elevenlabs",conversationToken:await Z.createConversationToken(Q)}}catch(Y){let X=await this.kv(),J=`agent.${Z.conversationKey}`,G=await X.get(J),W=G?.operation==="PUT"?tF8.parse(G.json()):null;if(G&&W?.state==="ready"&&W.agentId===Q)await X.delete(J,{previousSeq:G.revision}).catch(()=>{});throw Y}}}var kx0,oF8,sF8,nF8,tF8;var rF8=L(()=>{$G();uN();r$();kx0=_(NH(),1),oF8=_(vT(),1),sF8=_(tz(),1),nF8=new TextEncoder,tF8=gh.discriminatedUnion("state",[gh.object({state:gh.literal("ready"),agentId:gh.string()}),gh.object({state:gh.literal("creating"),expiresAt:gh.number()})])});import{z as lt}from"zod";function y95($){return{model:$.model,instructions:`${SC$}
4332
- Start in ${$.language==="pt"?"Brazilian Portuguese":"English"}, and follow the user's language.`,delegation:{type:"client"},audio:{output:{voice:$.voice}},store:!1}}class jP1{config;constructor($){this.config=$}async createSession(){return{provider:"openai",transport:"webrtc"}}async negotiate($){let Z=await fetch("https://api.openai.com/v1/live/sessions",{method:"POST",headers:{Authorization:`Bearer ${this.config.apiKey}`,"Content-Type":"application/json","OpenAI-Safety-Identifier":$.safetyIdentifier},body:JSON.stringify({session:y95({...this.config,language:$.language,model:$.model}),transport:{type:"webrtc",sdp:$.sdp}}),signal:AbortSignal.timeout(15000)});if(!Z.ok)throw await Z.body?.cancel(),Error(`OpenAI Live request failed (${Z.status})`);return{sdp:lt.object({session:lt.object({id:lt.string().min(1)}),transport:lt.object({type:lt.literal("webrtc"),sdp:lt.string().min(1).max(1e5)})}).parse(await Z.json()).transport.sdp}}}var aF8=L(()=>{uN()});var eF8;var $U8=L(()=>{eF8=[{name:"delegate_to_agent",description:"Submit a complete request to the selected Studio agent. Returns after acceptance while work continues in the background. Results arrive later.",parameters:{type:"object",properties:{request:{type:"string",description:"The complete user request, with relevant conversational details. Preserve intent and constraints."}},required:["request"]}},{name:"get_agent_status",description:"Read the current chat's work status and known results. This does not track independent organization tasks; delegate fresh task-status queries to the Studio agent. Use when asked, never poll.",parameters:{type:"object",properties:{}}},{name:"stop_agent_work",description:"Request cancellation in the current chat ONLY when the user explicitly asks. Speaking over the companion is not cancellation. To stop independent tasks, delegate that request to the Studio agent.",parameters:{type:"object",properties:{}}}]});function EP1($){return{conversation_config:{agent:{first_message:"",language:"en",prompt:{prompt:IC$,llm:$.conversationModel,thinking_budget:0,max_tokens:512,tools:eF8.map((Z)=>({...Z,type:"client",expects_response:!0,response_timeout_secs:Z.name==="delegate_to_agent"?20:5,...Z.name==="delegate_to_agent"?{execution_mode:"async",interruption_mode:"allow",pre_tool_speech:"off"}:{}}))}},asr:{provider:"scribe_realtime",quality:"high"},turn:{turn_eagerness:"normal",turn_timeout:-1,silence_end_call_timeout:-1},tts:{voice_id:$.voiceId,model_id:$.model},conversation:{max_duration_seconds:kL/1000,client_events:["audio","interruption","user_transcript","agent_response","client_tool_call","vad_score"]}},platform_settings:{auth:{enable_auth:!0},privacy:{record_voice:!1,retention_days:1,delete_audio:!0,delete_transcript_and_pii:!0},overrides:{conversation_config_override:{agent:{language:!0}}}}}}var ZU8=L(()=>{uN();$U8()});import{z as vJ}from"zod";import{createHash as g95,createHmac as h95}from"crypto";class Sx0{config;conversationKey;configurationKey;constructor($){this.config=$;this.configurationKey=g95("sha256").update(JSON.stringify(EP1($))).digest("hex"),this.conversationKey=h95("sha256",$.apiKey).update(this.configurationKey).digest("hex")}forConversationModel($){return $===this.config.conversationModel?this:new Sx0({...this.config,conversationModel:$})}async request($,Z,Q){let Y=await fetch(`https://api.elevenlabs.io/v1${$}`,{method:Z===void 0?"GET":"POST",headers:{"xi-api-key":this.config.apiKey,"Content-Type":"application/json"},body:JSON.stringify(Z),signal:Q});if(!Y.ok)throw await Y.body?.cancel(),Error(`ElevenLabs request failed (${Y.status})`);return Y}async ensureConversationAgent(){let $=`Studio voice ${this.configurationKey.slice(0,24)}`,Z=await this.request(`/convai/agents?search=${encodeURIComponent($)}&page_size=100`,void 0,AbortSignal.timeout(15000)),{agents:Q}=vJ.object({agents:vJ.array(vJ.object({agent_id:vJ.string(),name:vJ.string()}))}).parse(await Z.json()),Y=Q.find((J)=>J.name===$);if(Y){let J=await this.request(`/convai/agents/${encodeURIComponent(Y.agent_id)}`,void 0,AbortSignal.timeout(15000));return vJ.object({platform_settings:vJ.object({auth:vJ.object({enable_auth:vJ.literal(!0)})})}).parse(await J.json()),Y.agent_id}let X=await this.request("/convai/agents/create",{name:$,...EP1(this.config)},AbortSignal.timeout(15000));return vJ.object({agent_id:vJ.string().min(1)}).parse(await X.json()).agent_id}async createConversationToken($){let Z=await this.request(`/convai/conversation/token?agent_id=${encodeURIComponent($)}`,void 0,AbortSignal.timeout(15000));return vJ.object({token:vJ.string().min(1)}).parse(await Z.json()).token}async createTranscriptionToken(){let $=await this.request("/single-use-token/realtime_scribe",{},AbortSignal.timeout(15000));return vJ.object({token:vJ.string().min(1)}).parse(await $.json()).token}synthesize($,Z){return this.request(`/text-to-speech/${encodeURIComponent(this.config.voiceId)}/stream?output_format=mp3_44100_128`,{text:$,model_id:this.config.model},AbortSignal.any([Z,AbortSignal.timeout(60000)]))}}var QU8=L(()=>{ZU8()});import{createHmac as u95,timingSafeEqual as l95}from"crypto";import{z as ct}from"zod";function XU8($,Z){if(!Z)throw Error("Voice requires a shared authentication secret");return u95("sha256",Z).update(`studio-voice-session:v1:${$}`).digest("base64url")}function JU8($,Z){let Q=Buffer.from(JSON.stringify(YU8.parse($))).toString("base64url");return`${Q}.${XU8(Q,Z)}`}function GU8($,Z,Q=Date.now()){if(!Z||$.length>4096)return null;let Y=$.split(".");if(Y.length!==2)return null;let[X,J]=Y;if(!X||!J)return null;let G=Buffer.from(XU8(X,Z)),W=Buffer.from(J);if(W.length!==G.length||!l95(W,G))return null;try{let K=YU8.safeParse(JSON.parse(Buffer.from(X,"base64url").toString()));if(!K.success||K.data.expiresAt<=Q||K.data.expiresAt>Q+kL)return null;return K.data}catch{return null}}var YU8;var WU8=L(()=>{uN();YU8=ct.object({sessionId:ct.string().uuid(),organizationId:ct.string().min(1).max(256),userId:ct.string().min(1).max(256),threadId:ct.string().min(1).max(256),expiresAt:ct.number().int().positive()})});import{z as PP1}from"zod";function KU8($,Z){if(Z?.voice_model!=null&&Z.voice_provider==null)throw Error("A voice model override requires a provider");let Q=Z?.voice_provider??$.voiceConversationProvider;return zP1.parse({provider:Q,model:Z?.voice_model??(Q==="openai"?$.openaiLiveModel:$.elevenlabsConversationModel)})}var zP1;var HU8=L(()=>{zP1=PP1.object({provider:PP1.enum(["elevenlabs","openai"]),model:PP1.string().trim().min(1).max(128)})});import{createHash as c95}from"crypto";import{z as mt}from"zod";function dt($){return`user.${c95("sha256").update(JSON.stringify([$.organizationId,$.userId])).digest("hex")}`}class TP1{deps;kvPromise;constructor($){this.deps=$}kv(){let $=this.deps.getConnection();if(!$||$.isClosed())throw new q1(503,{message:"Voice transport is unavailable"});return this.kvPromise??=new FU8.Kvm(_x0.jetstream($)).create("STUDIO_VOICE_SESSIONS",{storage:_x0.StorageType.Memory,ttl:UU8.nanos(kL),max_bytes:10485760}).catch((Z)=>{throw this.kvPromise=void 0,Z}),this.kvPromise}adapter(){if(!this.deps.adapter)throw new q1(503,{message:"Voice is not configured on this deployment"});return this.deps.adapter}async create($,Z=!1,Q="en",Y){let X;if(Z)try{X=KU8(this.deps.defaults,Y)}catch{throw new q1(503,{message:"Voice configuration is invalid"})}let J=X?this.deps.conversationAdapters[X.provider]:this.adapter();if(!J)throw new q1(503,{message:"Voice is not configured on this deployment"});let G={...$,sessionId:crypto.randomUUID(),expiresAt:Date.now()+kL},W=JU8(G,this.deps.secret),K=await this.kv(),H=dt(G),F=await K.get(H),U=F?.operation==="PUT"?Cx0.parse(F.json()):null,N=AP1.encode(JSON.stringify({sessionId:G.sessionId,expiresAt:G.expiresAt,conversation:X,characters:0,requests:0}));try{if(F&&U&&U.expiresAt<=Date.now())await K.update(H,N,F.revision);else await K.create(H,N)}catch{throw new q1(409,{message:"Close your other voice session before starting a new one"})}try{if(X&&"createSession"in J){let D=await J.createSession({language:Q,model:X.model,safetyIdentifier:dt($)});return{token:W,...D,expiresAt:G.expiresAt}}let B=await this.adapter().createTranscriptionToken();return{token:W,transcriptionToken:B,expiresAt:G.expiresAt}}catch(B){throw await this.release(G),B}}authorize($,Z){let Q=GU8(Z,this.deps.secret);if(!Q||Q.organizationId!==$.organizationId||Q.userId!==$.userId||Q.threadId!==$.threadId)throw new q1(403,{message:"Invalid voice session"});return Q}async connect($,Z){let Q=this.authorize($,Z.token),Y=await this.kv(),X=dt(Q),J=await Y.get(X),G=J?.operation==="PUT"?Cx0.parse(J.json()):null;if(!J||!G||G.sessionId!==Q.sessionId||G.expiresAt<=Date.now())throw new q1(403,{message:"Voice session expired"});let W=G.conversation?this.deps.conversationAdapters[G.conversation.provider]:null;if(!W?.negotiate||!G.conversation)throw new q1(409,{message:"Voice session does not support SDP negotiation"});if(G.connected)throw new q1(409,{message:"Voice session already connected"});try{await Y.update(X,AP1.encode(JSON.stringify({...G,connected:!0})),J.revision)}catch{throw new q1(409,{message:"Voice session is busy"})}return W.negotiate({sdp:Z.sdp,language:Z.language,model:G.conversation.model,safetyIdentifier:X})}async speak($,Z,Q,Y){let X=this.authorize($,Z),J=await this.kv(),G=dt(X);for(let W=0;;W++){let K=await J.get(G),H=K?.operation==="PUT"?Cx0.parse(K.json()):null;if(!K||!H||H.sessionId!==X.sessionId||H.expiresAt<=Date.now())throw new q1(403,{message:"Voice session expired"});if(H.characters+Q.length>24000||H.requests>=120)throw new q1(429,{message:"Voice session speech limit reached"});try{await J.update(G,AP1.encode(JSON.stringify({...H,characters:H.characters+Q.length,requests:H.requests+1})),K.revision);break}catch{if(W>=2)throw new q1(409,{message:"Voice session is busy"})}}return this.adapter().synthesize(Q,Y)}async release($){let Z=await this.kv(),Q=await Z.get(dt($));if(Q?.operation==="PUT"&&Cx0.parse(Q.json()).sessionId===$.sessionId)await Z.delete(dt($),{previousSeq:Q.revision})}async revoke($,Z){await this.release(this.authorize($,Z))}}var _x0,FU8,UU8,Cx0,AP1;var NU8=L(()=>{$G();uN();WU8();HU8();_x0=_(NH(),1),FU8=_(vT(),1),UU8=_(tz(),1),Cx0=mt.object({sessionId:mt.string().uuid(),expiresAt:mt.number(),connected:mt.boolean().optional(),conversation:zP1.optional(),characters:mt.number().int().nonnegative(),requests:mt.number().int().nonnegative()}),AP1=new TextEncoder});function m95($){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 d95=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},BU8=()=>{let $=new Q1;return $.use("*",d95),$.get("/",async(Z)=>{let Q=L0(),Y=Q.decoSupabaseUrl,X=Q.decoSupabaseServiceKey;if(!Y||!X)return Z.json({apps:[]});try{let J=await hG(Y,X,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:m95(J)})}catch(J){return console.error("[deco-apps] GET error:",J),Z.json({error:"Failed to fetch apps"},502)}}),$};var DU8=L(()=>{W8();r1();m_0()});import{z as c1}from"zod";function zB($,Z="invalid_request_error",Q=null,Y=null){return{error:{message:$,type:Z,param:Q,code:Y}}}function $Z5($){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 ZZ5($,Z,Q){try{return JSON.parse($)}catch{throw new wU8(`Invalid JSON in tool call arguments for function '${Q}' (tool_call_id: ${Z}): ${$}`)}}function QZ5($){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:ZZ5(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 YZ5($){let Z=$.map((Q)=>{let Y=Q.function.parameters?tU(Q.function.parameters):tU({type:"object",properties:{}});return[Q.function.name,t$({description:Q.function.description,inputSchema:Y})]});return Object.fromEntries(Z)}function XZ5($){if(!$)return;return{openai:{response_format:$}}}function JZ5(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function LU8($,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 OU8($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var i95=256,p95,n95,t95,o95,s95,r95,a95,e95,wU8,jU8,EU8;var PU8=L(()=>{u4();W8();vt();kF();p95=c1.object({type:c1.literal("function"),function:c1.object({name:c1.string(),description:c1.string().optional(),parameters:c1.record(c1.string(),c1.unknown()).optional()})}),n95=c1.object({id:c1.string(),type:c1.literal("function"),function:c1.object({name:c1.string(),arguments:c1.string()})}),t95=c1.discriminatedUnion("role",[c1.object({role:c1.literal("system"),content:c1.string(),name:c1.string().optional()}),c1.object({role:c1.literal("user"),content:c1.union([c1.string(),c1.array(c1.union([c1.object({type:c1.literal("text"),text:c1.string()}),c1.object({type:c1.literal("image_url"),image_url:c1.object({url:c1.string(),detail:c1.string().optional()})})]))]),name:c1.string().optional()}),c1.object({role:c1.literal("assistant"),content:c1.string().nullable().optional(),name:c1.string().optional(),tool_calls:c1.array(n95).optional()}),c1.object({role:c1.literal("tool"),content:c1.string(),tool_call_id:c1.string()})]),o95=c1.object({type:c1.literal("text")}),s95=c1.object({type:c1.literal("json_object")}),r95=c1.object({type:c1.literal("json_schema"),json_schema:c1.object({name:c1.string(),description:c1.string().optional(),schema:c1.record(c1.string(),c1.unknown()),strict:c1.boolean().optional()})}),a95=c1.union([o95,s95,r95]),e95=c1.object({model:c1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:c1.array(t95),stream:c1.boolean().optional().default(!1),temperature:c1.number().min(0).max(2).optional(),max_tokens:c1.number().positive().optional(),top_p:c1.number().min(0).max(1).optional(),frequency_penalty:c1.number().min(-2).max(2).optional(),presence_penalty:c1.number().min(-2).max(2).optional(),stop:c1.union([c1.string(),c1.array(c1.string())]).optional(),tools:c1.array(p95).optional(),tool_choice:c1.union([c1.literal("auto"),c1.literal("none"),c1.literal("required"),c1.object({type:c1.literal("function"),function:c1.object({name:c1.string()})})]).optional(),response_format:a95.optional(),user:c1.string().optional()});wU8=class wU8 extends Error{constructor($){super($);this.name="MessageConversionError"}};jU8=new Q1;jU8.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),Q=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(zB("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(zB("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(zB("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Y=await $.req.json(),X=e95.safeParse(Y);if(!X.success){let w=X.error.issues[0]??{message:"Invalid request",path:[]};return $.json(zB(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let J=X.data,G=$Z5(J.model);if(!G)return $.json(zB("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)=>c2(E.providerId));if(!j)return $.json(zB("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(zB(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),U=QZ5(J.messages),N=J.tools?YZ5(J.tools):void 0,B=XZ5(J.response_format),D=JZ5(),O=Math.floor(Date.now()/1000);if(J.stream)return TO($,async(w)=>{let j=LU8(F,U,N,J,B,$.req.raw.signal);try{let E=Kp(j),P=!1,T=0,z="",A=async()=>{if(z.length===0)return;let q=z;z="",await w.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:O,model:J.model,choices:[{index:0,delta:{content:q},finish_reason:null}]})})};for await(let q of E.stream){if(!P&&(q.type==="text-delta"||q.type==="tool-call"))await w.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:O,model:J.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),P=!0;if(q.type==="text-delta"){if(z+=q.text,z.length>=i95)await A()}else if(q.type==="tool-call"){await A();let x=T++;await w.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:O,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:D,object:"chat.completion.chunk",created:O,model:J.model,choices:[{index:0,delta:{},finish_reason:OU8(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 P=E;console.error("[openai-compat:stream] Error:",P.message),await w.writeSSE({data:JSON.stringify({error:{message:P.message,type:"server_error"}})})}});else{let w=LU8(F,U,N,J,B,$.req.raw.signal),j=await vL(w),E={role:"assistant",content:j.text||null};if(j.toolCalls&&j.toolCalls.length>0)E.tool_calls=j.toolCalls.map((P)=>({id:P.toolCallId,type:"function",function:{name:P.toolName,arguments:JSON.stringify("input"in P?P.input:{})}})),E.content=null;return $.json({id:D,object:"chat.completion",created:O,model:J.model,choices:[{index:0,message:E,finish_reason:OU8(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(zB("Request aborted","invalid_request_error"),400);if(X.name==="MessageConversionError")return $.json(zB(X.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",X.message,X.stack),$.json(zB(X.message,"server_error"),500)}});EU8=jU8});function GZ5($){if(typeof $!=="object"||$===null)return!1;let Q=$.repository?.url;return typeof Q==="string"&&Q.length>0}function zU8(){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=C0(Q);if(!Y)return Z.json({error:"Authentication required"},401);let J=(Z.req.query("site")??"").trim().toLowerCase();if(!G9(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||y9(H))continue;let F=await Q.storage.virtualMcps.list(H.id);for(let U of F){if(n2(U)!==J)continue;if(!GZ5(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 AU8=L(()=>{W8();tX()});var vx0;var RP1=L(()=>{vx0={name:"decocms",version:"4.500.1",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 dev:server","dev:server":"NODE_ENV=development bun --env-file=.env --watch 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","@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",kysely:"^0.28.12","posthog-node":"^5.0.0"},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 HZ5(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??KZ5}}var TU8,KZ5="https://ph.studio.decocms.com",RU8;var qU8=L(()=>{W8();be();Ag();j9();r1();Cw1();RP1();TU8=new Q1;TU8.get("/",($)=>{let Z={version:vx0.version,theme:iY$(),...mH().logo&&{logo:mH().logo},...mL()&&{internalUrl:Na1()},...L0().enableDecoImport&&{enableDecoImport:!0},hostingEnabled:!!L0().controlplaneRestUrl&&!!L0().controlplaneServiceToken,hostingControlPlaneGa:L0().hostingControlPlaneGa,monitorEnabled:!!L0().clickhouseAnalyticsUrl&&!!L0().clickhouseAnalyticsPassword,monitorGa:L0().monitorGa,plansEnabled:L0().plansEnabled,auth:GJ8(),posthog:HZ5(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:tF()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});RU8=TU8});import{z as q$}from"zod";var FZ5,MU8;var VU8=L(()=>{FZ5=q$.object({check_id:q$.string(),title:q$.string(),description:q$.string().optional(),impact:q$.string().optional(),why:q$.string().optional(),category:q$.string(),severity:q$.string(),value_band:q$.string().optional(),value_driver:q$.string().optional(),controllability:q$.string().optional(),pages:q$.array(q$.string()),tasks:q$.array(q$.string()),evidence:q$.string(),sample_scope:q$.string().optional(),sources:q$.array(q$.string())}),MU8=q$.object({domain:q$.string(),brand:q$.string(),favicon:q$.string().optional(),scanned_at:q$.string().nullable(),lang:q$.string(),score:q$.number().nullable(),band:q$.string().nullable(),totals:q$.object({measured:q$.number(),registry_total:q$.number(),passed:q$.number(),failed:q$.number(),blocked:q$.number()}),buckets:q$.array(q$.object({id:q$.enum(["critical","important","worth"]),label:q$.string(),items:q$.array(FZ5)})),passing:q$.object({count:q$.number(),items:q$.array(q$.object({check_id:q$.string(),title:q$.string()}))}),not_measured:q$.object({count:q$.number(),groups:q$.array(q$.object({reason:q$.string(),label:q$.string(),count:q$.number(),checks:q$.array(q$.string())}))}),categories:q$.array(q$.object({key:q$.string(),label:q$.string(),score:q$.number().nullable(),band:q$.string().nullable(),pass:q$.number(),fail:q$.number()})),screenshots:q$.array(q$.object({url:q$.string(),page_type:q$.string().optional(),viewport:q$.enum(["desktop","mobile"]),image_url:q$.string()}))})});function IU8($,Z,Q){let Y=Q?`?${new URLSearchParams({lang:Q}).toString()}`:"";return`${HK({})}/api/v2/public/diagnostics/${encodeURIComponent($)}/onepager${Z}${Y}`}async function bx0($,Z={}){let Q=await fetch(IU8($,"",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 MU8.parse(await Q.json())}async function kU8($,Z={}){let Q=await fetch(IU8($,".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 qP1=L(()=>{VU8();eD()});import{join as SU8}from"path";async function NZ5($){try{let Z=await bx0($,{signal:AbortSignal.timeout(UZ5)});if(!Z?.scanned_at)return null;return{brand:Z.brand.trim()||ML1($),...Z.score!==null?{score:Z.score}:{}}}catch{return null}}function mG($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function BZ5($,Z){let Q=Eh($),Y=Z?.brand?.trim()||ML1(Q),X=J78(Q,128),G=`${(L0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(Q)}`,{title:W,description:K}=G78({brand:Y,domain:Q,score:Z?.score}),H=`${G}/og.png`,F=`${Y} Deco Score by decocms`;return[`<title>${mG(W)}</title>`,`<meta name="description" content="${mG(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="${mG(W)}" />`,`<meta property="og:description" content="${mG(K)}" />`,`<meta property="og:url" content="${mG(G)}" />`,`<meta property="og:image" content="${mG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${mG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${mG(W)}" />`,`<meta name="twitter:description" content="${mG(K)}" />`,`<meta name="twitter:image" content="${mG(H)}" />`,`<meta name="twitter:image:alt" content="${mG(F)}" />`,`<link rel="canonical" href="${mG(G)}" />`,`<link rel="alternate" type="text/markdown" href="${mG(G)}.md" />`,`<link rel="icon" href="${mG(X)}" sizes="any" />`].join(`
4332
+ Start in ${$.language==="pt"?"Brazilian Portuguese":"English"}, and follow the user's language.`,delegation:{type:"client"},audio:{output:{voice:$.voice}},store:!1}}class jP1{config;constructor($){this.config=$}async createSession(){return{provider:"openai",transport:"webrtc"}}async negotiate($){let Z=await fetch("https://api.openai.com/v1/live/sessions",{method:"POST",headers:{Authorization:`Bearer ${this.config.apiKey}`,"Content-Type":"application/json","OpenAI-Safety-Identifier":$.safetyIdentifier},body:JSON.stringify({session:y95({...this.config,language:$.language,model:$.model}),transport:{type:"webrtc",sdp:$.sdp}}),signal:AbortSignal.timeout(15000)});if(!Z.ok)throw await Z.body?.cancel(),Error(`OpenAI Live request failed (${Z.status})`);return{sdp:lt.object({session:lt.object({id:lt.string().min(1)}),transport:lt.object({type:lt.literal("webrtc"),sdp:lt.string().min(1).max(1e5)})}).parse(await Z.json()).transport.sdp}}}var aF8=L(()=>{uN()});var eF8;var $U8=L(()=>{eF8=[{name:"delegate_to_agent",description:"Submit a complete request to the selected Studio agent. Returns after acceptance while work continues in the background. Results arrive later.",parameters:{type:"object",properties:{request:{type:"string",description:"The complete user request, with relevant conversational details. Preserve intent and constraints."}},required:["request"]}},{name:"get_agent_status",description:"Read the current chat's work status and known results. This does not track independent organization tasks; delegate fresh task-status queries to the Studio agent. Use when asked, never poll.",parameters:{type:"object",properties:{}}},{name:"stop_agent_work",description:"Request cancellation in the current chat ONLY when the user explicitly asks. Speaking over the companion is not cancellation. To stop independent tasks, delegate that request to the Studio agent.",parameters:{type:"object",properties:{}}}]});function EP1($){return{conversation_config:{agent:{first_message:"",language:"en",prompt:{prompt:IC$,llm:$.conversationModel,thinking_budget:0,max_tokens:512,tools:eF8.map((Z)=>({...Z,type:"client",expects_response:!0,response_timeout_secs:Z.name==="delegate_to_agent"?20:5,...Z.name==="delegate_to_agent"?{execution_mode:"async",interruption_mode:"allow",pre_tool_speech:"off"}:{}}))}},asr:{provider:"scribe_realtime",quality:"high"},turn:{turn_eagerness:"normal",turn_timeout:-1,silence_end_call_timeout:-1},tts:{voice_id:$.voiceId,model_id:$.model},conversation:{max_duration_seconds:kL/1000,client_events:["audio","interruption","user_transcript","agent_response","client_tool_call","vad_score"]}},platform_settings:{auth:{enable_auth:!0},privacy:{record_voice:!1,retention_days:1,delete_audio:!0,delete_transcript_and_pii:!0},overrides:{conversation_config_override:{agent:{language:!0}}}}}}var ZU8=L(()=>{uN();$U8()});import{z as vJ}from"zod";import{createHash as g95,createHmac as h95}from"crypto";class Sx0{config;conversationKey;configurationKey;constructor($){this.config=$;this.configurationKey=g95("sha256").update(JSON.stringify(EP1($))).digest("hex"),this.conversationKey=h95("sha256",$.apiKey).update(this.configurationKey).digest("hex")}forConversationModel($){return $===this.config.conversationModel?this:new Sx0({...this.config,conversationModel:$})}async request($,Z,Q){let Y=await fetch(`https://api.elevenlabs.io/v1${$}`,{method:Z===void 0?"GET":"POST",headers:{"xi-api-key":this.config.apiKey,"Content-Type":"application/json"},body:JSON.stringify(Z),signal:Q});if(!Y.ok)throw await Y.body?.cancel(),Error(`ElevenLabs request failed (${Y.status})`);return Y}async ensureConversationAgent(){let $=`Studio voice ${this.configurationKey.slice(0,24)}`,Z=await this.request(`/convai/agents?search=${encodeURIComponent($)}&page_size=100`,void 0,AbortSignal.timeout(15000)),{agents:Q}=vJ.object({agents:vJ.array(vJ.object({agent_id:vJ.string(),name:vJ.string()}))}).parse(await Z.json()),Y=Q.find((J)=>J.name===$);if(Y){let J=await this.request(`/convai/agents/${encodeURIComponent(Y.agent_id)}`,void 0,AbortSignal.timeout(15000));return vJ.object({platform_settings:vJ.object({auth:vJ.object({enable_auth:vJ.literal(!0)})})}).parse(await J.json()),Y.agent_id}let X=await this.request("/convai/agents/create",{name:$,...EP1(this.config)},AbortSignal.timeout(15000));return vJ.object({agent_id:vJ.string().min(1)}).parse(await X.json()).agent_id}async createConversationToken($){let Z=await this.request(`/convai/conversation/token?agent_id=${encodeURIComponent($)}`,void 0,AbortSignal.timeout(15000));return vJ.object({token:vJ.string().min(1)}).parse(await Z.json()).token}async createTranscriptionToken(){let $=await this.request("/single-use-token/realtime_scribe",{},AbortSignal.timeout(15000));return vJ.object({token:vJ.string().min(1)}).parse(await $.json()).token}synthesize($,Z){return this.request(`/text-to-speech/${encodeURIComponent(this.config.voiceId)}/stream?output_format=mp3_44100_128`,{text:$,model_id:this.config.model},AbortSignal.any([Z,AbortSignal.timeout(60000)]))}}var QU8=L(()=>{ZU8()});import{createHmac as u95,timingSafeEqual as l95}from"crypto";import{z as ct}from"zod";function XU8($,Z){if(!Z)throw Error("Voice requires a shared authentication secret");return u95("sha256",Z).update(`studio-voice-session:v1:${$}`).digest("base64url")}function JU8($,Z){let Q=Buffer.from(JSON.stringify(YU8.parse($))).toString("base64url");return`${Q}.${XU8(Q,Z)}`}function GU8($,Z,Q=Date.now()){if(!Z||$.length>4096)return null;let Y=$.split(".");if(Y.length!==2)return null;let[X,J]=Y;if(!X||!J)return null;let G=Buffer.from(XU8(X,Z)),W=Buffer.from(J);if(W.length!==G.length||!l95(W,G))return null;try{let K=YU8.safeParse(JSON.parse(Buffer.from(X,"base64url").toString()));if(!K.success||K.data.expiresAt<=Q||K.data.expiresAt>Q+kL)return null;return K.data}catch{return null}}var YU8;var WU8=L(()=>{uN();YU8=ct.object({sessionId:ct.string().uuid(),organizationId:ct.string().min(1).max(256),userId:ct.string().min(1).max(256),threadId:ct.string().min(1).max(256),expiresAt:ct.number().int().positive()})});import{z as PP1}from"zod";function KU8($,Z){if(Z?.voice_model!=null&&Z.voice_provider==null)throw Error("A voice model override requires a provider");let Q=Z?.voice_provider??$.voiceConversationProvider;return zP1.parse({provider:Q,model:Z?.voice_model??(Q==="openai"?$.openaiLiveModel:$.elevenlabsConversationModel)})}var zP1;var HU8=L(()=>{zP1=PP1.object({provider:PP1.enum(["elevenlabs","openai"]),model:PP1.string().trim().min(1).max(128)})});import{createHash as c95}from"crypto";import{z as mt}from"zod";function dt($){return`user.${c95("sha256").update(JSON.stringify([$.organizationId,$.userId])).digest("hex")}`}class TP1{deps;kvPromise;constructor($){this.deps=$}kv(){let $=this.deps.getConnection();if(!$||$.isClosed())throw new q1(503,{message:"Voice transport is unavailable"});return this.kvPromise??=new FU8.Kvm(_x0.jetstream($)).create("STUDIO_VOICE_SESSIONS",{storage:_x0.StorageType.Memory,ttl:UU8.nanos(kL),max_bytes:10485760}).catch((Z)=>{throw this.kvPromise=void 0,Z}),this.kvPromise}adapter(){if(!this.deps.adapter)throw new q1(503,{message:"Voice is not configured on this deployment"});return this.deps.adapter}async create($,Z=!1,Q="en",Y){let X;if(Z)try{X=KU8(this.deps.defaults,Y)}catch{throw new q1(503,{message:"Voice configuration is invalid"})}let J=X?this.deps.conversationAdapters[X.provider]:this.adapter();if(!J)throw new q1(503,{message:"Voice is not configured on this deployment"});let G={...$,sessionId:crypto.randomUUID(),expiresAt:Date.now()+kL},W=JU8(G,this.deps.secret),K=await this.kv(),H=dt(G),F=await K.get(H),U=F?.operation==="PUT"?Cx0.parse(F.json()):null,N=AP1.encode(JSON.stringify({sessionId:G.sessionId,expiresAt:G.expiresAt,conversation:X,characters:0,requests:0}));try{if(F&&U&&U.expiresAt<=Date.now())await K.update(H,N,F.revision);else await K.create(H,N)}catch{throw new q1(409,{message:"Close your other voice session before starting a new one"})}try{if(X&&"createSession"in J){let D=await J.createSession({language:Q,model:X.model,safetyIdentifier:dt($)});return{token:W,...D,expiresAt:G.expiresAt}}let B=await this.adapter().createTranscriptionToken();return{token:W,transcriptionToken:B,expiresAt:G.expiresAt}}catch(B){throw await this.release(G),B}}authorize($,Z){let Q=GU8(Z,this.deps.secret);if(!Q||Q.organizationId!==$.organizationId||Q.userId!==$.userId||Q.threadId!==$.threadId)throw new q1(403,{message:"Invalid voice session"});return Q}async connect($,Z){let Q=this.authorize($,Z.token),Y=await this.kv(),X=dt(Q),J=await Y.get(X),G=J?.operation==="PUT"?Cx0.parse(J.json()):null;if(!J||!G||G.sessionId!==Q.sessionId||G.expiresAt<=Date.now())throw new q1(403,{message:"Voice session expired"});let W=G.conversation?this.deps.conversationAdapters[G.conversation.provider]:null;if(!W?.negotiate||!G.conversation)throw new q1(409,{message:"Voice session does not support SDP negotiation"});if(G.connected)throw new q1(409,{message:"Voice session already connected"});try{await Y.update(X,AP1.encode(JSON.stringify({...G,connected:!0})),J.revision)}catch{throw new q1(409,{message:"Voice session is busy"})}return W.negotiate({sdp:Z.sdp,language:Z.language,model:G.conversation.model,safetyIdentifier:X})}async speak($,Z,Q,Y){let X=this.authorize($,Z),J=await this.kv(),G=dt(X);for(let W=0;;W++){let K=await J.get(G),H=K?.operation==="PUT"?Cx0.parse(K.json()):null;if(!K||!H||H.sessionId!==X.sessionId||H.expiresAt<=Date.now())throw new q1(403,{message:"Voice session expired"});if(H.characters+Q.length>24000||H.requests>=120)throw new q1(429,{message:"Voice session speech limit reached"});try{await J.update(G,AP1.encode(JSON.stringify({...H,characters:H.characters+Q.length,requests:H.requests+1})),K.revision);break}catch{if(W>=2)throw new q1(409,{message:"Voice session is busy"})}}return this.adapter().synthesize(Q,Y)}async release($){let Z=await this.kv(),Q=await Z.get(dt($));if(Q?.operation==="PUT"&&Cx0.parse(Q.json()).sessionId===$.sessionId)await Z.delete(dt($),{previousSeq:Q.revision})}async revoke($,Z){await this.release(this.authorize($,Z))}}var _x0,FU8,UU8,Cx0,AP1;var NU8=L(()=>{$G();uN();WU8();HU8();_x0=_(NH(),1),FU8=_(vT(),1),UU8=_(tz(),1),Cx0=mt.object({sessionId:mt.string().uuid(),expiresAt:mt.number(),connected:mt.boolean().optional(),conversation:zP1.optional(),characters:mt.number().int().nonnegative(),requests:mt.number().int().nonnegative()}),AP1=new TextEncoder});function m95($){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 d95=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},BU8=()=>{let $=new Q1;return $.use("*",d95),$.get("/",async(Z)=>{let Q=L0(),Y=Q.decoSupabaseUrl,X=Q.decoSupabaseServiceKey;if(!Y||!X)return Z.json({apps:[]});try{let J=await hG(Y,X,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:m95(J)})}catch(J){return console.error("[deco-apps] GET error:",J),Z.json({error:"Failed to fetch apps"},502)}}),$};var DU8=L(()=>{W8();r1();m_0()});import{z as c1}from"zod";function zB($,Z="invalid_request_error",Q=null,Y=null){return{error:{message:$,type:Z,param:Q,code:Y}}}function $Z5($){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 ZZ5($,Z,Q){try{return JSON.parse($)}catch{throw new wU8(`Invalid JSON in tool call arguments for function '${Q}' (tool_call_id: ${Z}): ${$}`)}}function QZ5($){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:ZZ5(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 YZ5($){let Z=$.map((Q)=>{let Y=Q.function.parameters?tU(Q.function.parameters):tU({type:"object",properties:{}});return[Q.function.name,t$({description:Q.function.description,inputSchema:Y})]});return Object.fromEntries(Z)}function XZ5($){if(!$)return;return{openai:{response_format:$}}}function JZ5(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function LU8($,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 OU8($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var i95=256,p95,n95,t95,o95,s95,r95,a95,e95,wU8,jU8,EU8;var PU8=L(()=>{u4();W8();vt();kF();p95=c1.object({type:c1.literal("function"),function:c1.object({name:c1.string(),description:c1.string().optional(),parameters:c1.record(c1.string(),c1.unknown()).optional()})}),n95=c1.object({id:c1.string(),type:c1.literal("function"),function:c1.object({name:c1.string(),arguments:c1.string()})}),t95=c1.discriminatedUnion("role",[c1.object({role:c1.literal("system"),content:c1.string(),name:c1.string().optional()}),c1.object({role:c1.literal("user"),content:c1.union([c1.string(),c1.array(c1.union([c1.object({type:c1.literal("text"),text:c1.string()}),c1.object({type:c1.literal("image_url"),image_url:c1.object({url:c1.string(),detail:c1.string().optional()})})]))]),name:c1.string().optional()}),c1.object({role:c1.literal("assistant"),content:c1.string().nullable().optional(),name:c1.string().optional(),tool_calls:c1.array(n95).optional()}),c1.object({role:c1.literal("tool"),content:c1.string(),tool_call_id:c1.string()})]),o95=c1.object({type:c1.literal("text")}),s95=c1.object({type:c1.literal("json_object")}),r95=c1.object({type:c1.literal("json_schema"),json_schema:c1.object({name:c1.string(),description:c1.string().optional(),schema:c1.record(c1.string(),c1.unknown()),strict:c1.boolean().optional()})}),a95=c1.union([o95,s95,r95]),e95=c1.object({model:c1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:c1.array(t95),stream:c1.boolean().optional().default(!1),temperature:c1.number().min(0).max(2).optional(),max_tokens:c1.number().positive().optional(),top_p:c1.number().min(0).max(1).optional(),frequency_penalty:c1.number().min(-2).max(2).optional(),presence_penalty:c1.number().min(-2).max(2).optional(),stop:c1.union([c1.string(),c1.array(c1.string())]).optional(),tools:c1.array(p95).optional(),tool_choice:c1.union([c1.literal("auto"),c1.literal("none"),c1.literal("required"),c1.object({type:c1.literal("function"),function:c1.object({name:c1.string()})})]).optional(),response_format:a95.optional(),user:c1.string().optional()});wU8=class wU8 extends Error{constructor($){super($);this.name="MessageConversionError"}};jU8=new Q1;jU8.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),Q=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(zB("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(zB("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(zB("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Y=await $.req.json(),X=e95.safeParse(Y);if(!X.success){let w=X.error.issues[0]??{message:"Invalid request",path:[]};return $.json(zB(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let J=X.data,G=$Z5(J.model);if(!G)return $.json(zB("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)=>c2(E.providerId));if(!j)return $.json(zB("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(zB(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),U=QZ5(J.messages),N=J.tools?YZ5(J.tools):void 0,B=XZ5(J.response_format),D=JZ5(),O=Math.floor(Date.now()/1000);if(J.stream)return TO($,async(w)=>{let j=LU8(F,U,N,J,B,$.req.raw.signal);try{let E=Kp(j),P=!1,T=0,z="",A=async()=>{if(z.length===0)return;let q=z;z="",await w.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:O,model:J.model,choices:[{index:0,delta:{content:q},finish_reason:null}]})})};for await(let q of E.stream){if(!P&&(q.type==="text-delta"||q.type==="tool-call"))await w.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:O,model:J.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),P=!0;if(q.type==="text-delta"){if(z+=q.text,z.length>=i95)await A()}else if(q.type==="tool-call"){await A();let x=T++;await w.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:O,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:D,object:"chat.completion.chunk",created:O,model:J.model,choices:[{index:0,delta:{},finish_reason:OU8(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 P=E;console.error("[openai-compat:stream] Error:",P.message),await w.writeSSE({data:JSON.stringify({error:{message:P.message,type:"server_error"}})})}});else{let w=LU8(F,U,N,J,B,$.req.raw.signal),j=await vL(w),E={role:"assistant",content:j.text||null};if(j.toolCalls&&j.toolCalls.length>0)E.tool_calls=j.toolCalls.map((P)=>({id:P.toolCallId,type:"function",function:{name:P.toolName,arguments:JSON.stringify("input"in P?P.input:{})}})),E.content=null;return $.json({id:D,object:"chat.completion",created:O,model:J.model,choices:[{index:0,message:E,finish_reason:OU8(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(zB("Request aborted","invalid_request_error"),400);if(X.name==="MessageConversionError")return $.json(zB(X.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",X.message,X.stack),$.json(zB(X.message,"server_error"),500)}});EU8=jU8});function GZ5($){if(typeof $!=="object"||$===null)return!1;let Q=$.repository?.url;return typeof Q==="string"&&Q.length>0}function zU8(){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=C0(Q);if(!Y)return Z.json({error:"Authentication required"},401);let J=(Z.req.query("site")??"").trim().toLowerCase();if(!G9(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||y9(H))continue;let F=await Q.storage.virtualMcps.list(H.id);for(let U of F){if(n2(U)!==J)continue;if(!GZ5(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 AU8=L(()=>{W8();tX()});var vx0;var RP1=L(()=>{vx0={name:"decocms",version:"4.500.2",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 dev:server","dev:server":"NODE_ENV=development bun --env-file=.env --watch 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","@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",kysely:"^0.28.12","posthog-node":"^5.0.0"},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 HZ5(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??KZ5}}var TU8,KZ5="https://ph.studio.decocms.com",RU8;var qU8=L(()=>{W8();be();Ag();j9();r1();Cw1();RP1();TU8=new Q1;TU8.get("/",($)=>{let Z={version:vx0.version,theme:iY$(),...mH().logo&&{logo:mH().logo},...mL()&&{internalUrl:Na1()},...L0().enableDecoImport&&{enableDecoImport:!0},hostingEnabled:!!L0().controlplaneRestUrl&&!!L0().controlplaneServiceToken,hostingControlPlaneGa:L0().hostingControlPlaneGa,monitorEnabled:!!L0().clickhouseAnalyticsUrl&&!!L0().clickhouseAnalyticsPassword,monitorGa:L0().monitorGa,plansEnabled:L0().plansEnabled,auth:GJ8(),posthog:HZ5(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:tF()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});RU8=TU8});import{z as q$}from"zod";var FZ5,MU8;var VU8=L(()=>{FZ5=q$.object({check_id:q$.string(),title:q$.string(),description:q$.string().optional(),impact:q$.string().optional(),why:q$.string().optional(),category:q$.string(),severity:q$.string(),value_band:q$.string().optional(),value_driver:q$.string().optional(),controllability:q$.string().optional(),pages:q$.array(q$.string()),tasks:q$.array(q$.string()),evidence:q$.string(),sample_scope:q$.string().optional(),sources:q$.array(q$.string())}),MU8=q$.object({domain:q$.string(),brand:q$.string(),favicon:q$.string().optional(),scanned_at:q$.string().nullable(),lang:q$.string(),score:q$.number().nullable(),band:q$.string().nullable(),totals:q$.object({measured:q$.number(),registry_total:q$.number(),passed:q$.number(),failed:q$.number(),blocked:q$.number()}),buckets:q$.array(q$.object({id:q$.enum(["critical","important","worth"]),label:q$.string(),items:q$.array(FZ5)})),passing:q$.object({count:q$.number(),items:q$.array(q$.object({check_id:q$.string(),title:q$.string()}))}),not_measured:q$.object({count:q$.number(),groups:q$.array(q$.object({reason:q$.string(),label:q$.string(),count:q$.number(),checks:q$.array(q$.string())}))}),categories:q$.array(q$.object({key:q$.string(),label:q$.string(),score:q$.number().nullable(),band:q$.string().nullable(),pass:q$.number(),fail:q$.number()})),screenshots:q$.array(q$.object({url:q$.string(),page_type:q$.string().optional(),viewport:q$.enum(["desktop","mobile"]),image_url:q$.string()}))})});function IU8($,Z,Q){let Y=Q?`?${new URLSearchParams({lang:Q}).toString()}`:"";return`${HK({})}/api/v2/public/diagnostics/${encodeURIComponent($)}/onepager${Z}${Y}`}async function bx0($,Z={}){let Q=await fetch(IU8($,"",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 MU8.parse(await Q.json())}async function kU8($,Z={}){let Q=await fetch(IU8($,".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 qP1=L(()=>{VU8();eD()});import{join as SU8}from"path";async function NZ5($){try{let Z=await bx0($,{signal:AbortSignal.timeout(UZ5)});if(!Z?.scanned_at)return null;return{brand:Z.brand.trim()||ML1($),...Z.score!==null?{score:Z.score}:{}}}catch{return null}}function mG($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function BZ5($,Z){let Q=Eh($),Y=Z?.brand?.trim()||ML1(Q),X=J78(Q,128),G=`${(L0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(Q)}`,{title:W,description:K}=G78({brand:Y,domain:Q,score:Z?.score}),H=`${G}/og.png`,F=`${Y} Deco Score by decocms`;return[`<title>${mG(W)}</title>`,`<meta name="description" content="${mG(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="${mG(W)}" />`,`<meta property="og:description" content="${mG(K)}" />`,`<meta property="og:url" content="${mG(G)}" />`,`<meta property="og:image" content="${mG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${mG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${mG(W)}" />`,`<meta name="twitter:description" content="${mG(K)}" />`,`<meta name="twitter:image" content="${mG(H)}" />`,`<meta name="twitter:image:alt" content="${mG(F)}" />`,`<link rel="canonical" href="${mG(G)}" />`,`<link rel="alternate" type="text/markdown" href="${mG(G)}.md" />`,`<link rel="icon" href="${mG(X)}" sizes="any" />`].join(`
4333
4333
  `)}function DZ5($,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}
4334
4334
  </head>`)}function CU8($){let Z=new Q1;return Z.get("/:domain/og.png",async(Q)=>{let Y=Eh(Q.req.param("domain")),X=async()=>{let J=$?Bun.file(SU8($,"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(`${HK({})}/api/v2/public/diagnostics/${encodeURIComponent(Y)}/og.png`,{signal:AbortSignal.timeout(LZ5)}),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=Eh(Q.req.param("file").replace(/\.md$/,""));try{let X=await kU8(Y,{lang:Q.req.query("lang")?.trim()||void 0,signal:AbortSignal.timeout(OZ5)});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=$?SU8($,"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 NZ5(Eh(Y)),K=BZ5(Y,W);return Q.html(DZ5(G,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return Q.html(G)}}),Z}var UZ5=2500,LZ5=1e4,OZ5=1e4;var _U8=L(()=>{W8();eD();qP1();r1()});function xx0($,Z){return fetch(`${HK({})}${$}`,Z)}async function wZ5($,Z){let Q=await bx0($,{lang:Z});if(!Q)return{status:"not_found",report:null};return Q.scanned_at?{status:"ready",report:Q}:{status:"empty",report:null}}function EZ5($){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 jZ5,MO,vU8=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},bU8;var xU8=L(()=>{W8();OK();eD();qP1();jZ5=new Set(["complete","errored","terminated","unknown"]);MO=new Q1;MO.use("*",async($,Z)=>{let Q=await B4.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});MO.use("/link-token/*",vU8);MO.use("/suggest",vU8);MO.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 wZ5(Z,Q))}catch{return $.json({error:"report read failed"},502)}});MO.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}=EZ5(Q);if(!Y)return $.json({error:"domain is required"},400);let J=Z?.email;try{let G=await xx0("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${jE({})}`},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)}});MO.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let Q=await xx0(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${jE({})}`}});if(!Q.ok)return $.json({error:`status HTTP ${Q.status}`},502);let X=(await Q.json()).status??"unknown",J={done:jZ5.has(X),status:X};return $.json(J)}catch{return $.json({error:"status failed"},502)}});MO.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let Q=await xx0(`/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)}});MO.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let Q=await xx0(`/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:[]})}});bU8=MO});var PZ5=1048576,MP1;var fU8=L(()=>{W8();eK();r1();Ow1();MP1=new Q1;MP1.post("/webhook",h5({maxSize:PZ5,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=L0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let Q=await $.req.text();if(!EX8(Q,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let X=PX8(Q);if(!X)return $.json({error:"invalid payload"},400);let J=await zX8(X);return console.log("stripe webhook",{eventId:X.id,type:X.type,livemode:X.livemode,...J}),$.json({received:!0})})});import{timingSafeEqual as zZ5}from"crypto";function RZ5($,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 zZ5(Buffer.from(X),Buffer.from(Y))}function qZ5($,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 yU8($){let Z=new Q1;return Z.post("/webhook",h5({maxSize:AZ5,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(!RZ5(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"&&!TZ5.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"});return p80().then((U)=>U?.markTenantPoolsDirty(`https://github.com/${F}`,H)).catch((U)=>console.warn(`[github-webhook] tenant pool refresh for ${F}@${H} failed: ${U instanceof Error?U.message:String(U)}`)),Q.json({ok:!0})}let W=qZ5(J??"",G);if(W.length===0)return Q.json({ok:!0,ignored:"no-pr"});let K=await MZ5($,W);return Q.json({ok:!0,refreshed:K})}),Z}async function MZ5($,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 su$(K,G.organizationId,G.taskBoardItemId)!==null)Q++}catch(W){console.error(`[github-webhook] pr card refresh failed for ${G.taskBoardItemId}:`,W)}}return Q}var AZ5=5242880,TZ5;var gU8=L(()=>{W8();eK();OX();kQ();TZ5=new Set(["check_suite","issue_comment"])});import{DBOS as IP1,SchedulerMode as VZ5}from"@dbos-inc/dbos-sdk";async function kZ5(){try{return await SZ5()}catch($){return console.warn(`[sandbox-credential-push] push failed: ${$ instanceof Error?$.message:String($)}`),null}}async function SZ5(){if(!i80())return null;let[{RemoteSandboxProvider:$},{SandboxProviderRouter:Z}]=await Promise.all([Promise.resolve().then(() => (vY1(),_Y1)),Promise.resolve().then(() => (CY1(),SY1))]),Q=await p80(),Y=Q instanceof Z?Q.providers.kubernetes:Q;if(!(Y instanceof $))return null;let{db:X}=z8(),{sandboxes:J,pools:G}=await Y.list(),W=Date.now(),K=Gk$({sandboxes:J,pools:G,records:await Wk$(X,J,G),legacyPools:cq0(process.env.STUDIO_SANDBOX_TENANT_POOLS),now:W}),{batches:H,failed:F}=await Kk$(K,FN0(X,new nX(L0().encryptionKey)),{now:W,orgFsLifetimeMs:iq0}),U=0,N=0,B=0;for(let D of H)try{let O=await Y.pushCredentials(D);U+=O.stored,N+=O.kept}catch(O){B++,console.warn(`[sandbox-credential-push] a push batch failed: ${O instanceof Error?O.message:String(O)}`)}return{sandboxes:J.length,pushed:U,kept:N,refused:K.refused,failed:F+B}}async function CZ5($,Z){let Q=await IP1.runStep(kZ5,{name:"pushSandboxCredentials"});if(Q&&(Q.refused>0||Q.failed>0))console.warn(`[sandbox-credential-push] ${Q.sandboxes} sandboxes: pushed ${Q.pushed}, kept ${Q.kept}, refused ${Q.refused}, failed ${Q.failed}`)}function hU8(){if(VP1)return;if(!L0().agentSandboxEnabled||!i80())return;VP1=IP1.registerWorkflow(CZ5,{name:"sandboxCredentialPushWorkflow"}),IP1.registerScheduled(VP1,{name:"sandboxCredentialPushWorkflow",crontab:IZ5,mode:VZ5.ExactlyOncePerIntervalWhenActive})}var IZ5="1-59/10 * * * *",VP1=null;var uU8=L(()=>{D3();Rw();wZ1();pq0();mq0();OX();r1()});function lU8($){let Z=new NO($.db,new nX($.encryptionKey)),Q=new Q1;return Q.get("/attachments/:token",async(Y)=>{let X=Qh$(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 r7(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 cU8=L(()=>{W8();Rw();GG1();bL()});function fx0(){try{return L0().jiraSettleSeconds*1000}catch{return fP}}function mU8($,Z){let Q=Z.windowMs??fP,Y=$.at(-1);if(!Y)return null;if(Z.changeId!==void 0&&Y.id!==Z.changeId)return{kind:"superseded"};if(Z.now!==void 0&&Z.now-Y.at<Q)return{kind:"moving"};let X=_Z5($,Q);if((X.id&&Y.toId?X.id===Y.toId:!1)||!X.id&&X.name===Y.to)return{kind:"returned",change:Y};return{kind:"moved",change:Y,from:X}}function _Z5($,Z){for(let Y=$.length-2;Y>=0;Y--){let X=$[Y],J=$[Y+1];if(X&&J&&J.at-X.at>=Z)return{id:X.toId,name:X.to}}let Q=$[0];return{id:Q?.fromId??null,name:Q?.from??null}}var kP1=L(()=>{iL();r1()});function dU8($){if(typeof $!=="object"||$===null)return null;let Z=$;if(Z.webhookEvent!=="jira:issue_updated")return null;let Q=Z.issue?.id,Y=Z.issue?.key,X=Z.changelog?.id;if(typeof Q!=="string"&&typeof Q!=="number"||typeof Y!=="string"||typeof X!=="string"&&typeof X!=="number")return null;let J=Z.changelog?.items?.find((G)=>G.field==="status");if(!J||typeof J.toString!=="string")return null;return{issueId:String(Q),issueKey:Y,toStatus:J.toString,changelogId:String(X)}}async function SP1($,Z,Q){if(!Z.enabled)return"disabled";let Y=Z.organizationId,X=new r7(Z.siteUrl,Z.email,Z.apiToken),J=mU8(await X.listStatusChanges(Q.issueId),{changeId:Q.changelogId,now:Q.now,windowMs:fx0()});if(!J)return"no_rule";if(J.kind!=="moved")return J.kind;let{change:G,from:W}=J,K=(await $.storage.automations.listJiraTransitionTriggers(Y,{jiraStatus:G.to,activeOnly:!0})).map((N)=>({...N,from:xP(N)})),H=md$(K)&&Z.boardId?cd$(await X.getBoardColumnStatusIds(Z.boardId),W.id,G.toId):null,F=ld$(K,W.name,H);if(!F)return"no_rule";if(!await $.storage.jiraIntegrations.claimTrigger(Y,Q.issueId,G.id))return"duplicate";return await SK({automationId:F.automation_id,organizationId:Y,triggerId:F.id,target:{kind:"jira",issues:[Q.issueId],move:{toStatus:G.to,fromStatus:W.name,movedBy:G.by,movedAt:new Date(G.at).toISOString()},eventKey:G.id}},{idempotencyKey:`jira:${F.id}:${G.id}`}),"fired"}var CP1=L(()=>{VF();bL();ip();kP1()});import{DBOS as Vz,SchedulerMode as vZ5}from"@dbos-inc/dbos-sdk";function iU8($){vP1=$}function xP1(){if(!vP1)throw Error("[jira-trigger] runtime not initialized \u2014 setJiraTriggerSweepRuntime() must run before the workflow fires");return vP1}function fP1(){let $=xP1();return new NO($.db,new nX($.encryptionKey))}async function gZ5($){try{let Z=await fP1().getById($);if(!Z?.enabled||!Z.boardId)return{integrationId:$,fired:0};let Q=await o3(xP1().db,Z.organizationId);if(!Q)return{integrationId:$,fired:0};if((await Q.storage.automations.listJiraTransitionTriggers(Z.organizationId,{activeOnly:!0})).length===0)return{integrationId:$,fired:0};let X=new r7(Z.siteUrl,Z.email,Z.apiToken),G=`(${await X.getBoardScopeJql(Z.boardId)}) AND status CHANGED AFTER "-${xZ5}m"`,W=0,K;for(let H=0;H<fZ5;H++){let F=await X.searchIssues({jql:G,nextPageToken:K});for(let U of F.issues)if(await SP1(Q,Z,{issueId:U.id,now:Date.now()})==="fired")W++;if(K=F.nextPageToken??void 0,!K)break}return{integrationId:$,fired:W}}catch(Z){return{integrationId:$,fired:0,error:Z instanceof Error?Z.message:String(Z)}}}async function hZ5($,Z){let Q=await Vz.runStep(()=>fP1().listEnabledIds(),{name:"loadJiraIntegrations"});if(Q.length===0)return;let Y=await Promise.all(Q.map((X)=>Vz.runStep(()=>gZ5(X),{name:`sweepJira:${X}`})));for(let X of Y)if(X.error)console.warn(`[jira-trigger] integration ${X.integrationId} failed: ${X.error}`);else if(X.fired>0)console.log(`[jira-trigger] integration ${X.integrationId} fired ${X.fired} automation(s) the webhook missed`)}async function uZ5($,Z){try{let Q=await fP1().getById($);if(!Q?.enabled)return"disabled";let Y=await o3(xP1().db,Q.organizationId);if(!Y)return"disabled";let X=await SP1(Y,Q,{issueId:Z.issueId,changelogId:Z.changelogId});if(X==="fired")console.log(`[jira-trigger] fired an automation for ${Z.issueKey} after it settled`);else if(X==="returned")console.log(`[jira-trigger] ${Z.issueKey} went back where it was before settling in "${Z.toStatus}"; no fire`);return X}catch(Q){return console.error(`[jira-trigger] settling ${Z.issueKey} failed`,Q instanceof Error?Q.message:Q),"error"}}async function lZ5($,Z){await Vz.sleep(fx0()+yZ5),await Vz.runStep(()=>uZ5($,Z),{name:"settleJiraMove"})}async function pU8($,Z){if(!bP1)throw Error("[jira-trigger] settle workflow is not registered");await Vz.startWorkflow(bP1,{workflowID:`jira-settle:${$}:${Z.changelogId}`})($,Z)}function nU8(){if(_P1)return;bP1=Vz.registerWorkflow(lZ5,{name:"jiraSettleWorkflow"}),_P1=Vz.registerWorkflow(hZ5,{name:"jiraTriggerSweepWorkflow"}),Vz.registerScheduled(_P1,{name:"jiraTriggerSweepWorkflow",crontab:bZ5,mode:vZ5.ExactlyOncePerIntervalWhenActive})}var bZ5="*/5 * * * *",xZ5=20,fZ5=5,yZ5=5000,vP1=null,bP1=null,_P1=null;var yP1=L(()=>{Rw();jg();bL();kP1();CP1()});function tU8($){let Z=new NO($.db,new nX($.encryptionKey)),Q=Nj($.db);async function Y(J,G){let W=dU8(G);if(!W)return;let K=await Z.getByWebhookSecret(J);if(!K?.enabled)return;if((await Q.listJiraTransitionTriggers(K.organizationId,{activeOnly:!0})).length===0)return;await pU8(K.id,W)}let X=new Q1;return X.post("/webhook/:secret",h5({maxSize:cZ5}),async(J)=>{let G=J.req.param("secret");if(!await Z.getByWebhookSecret(G))return J.json({error:"Unknown webhook"},404);let K;try{K=await J.req.json()}catch{return J.json({error:"Body must be JSON"},400)}return Y(G,K).catch((H)=>{console.error("[jira-webhook] trigger failed",H)}),J.body(null,202)}),X}var cZ5=1048576;var oU8=L(()=>{W8();eK();Rw();yP1();CP1();fa()});function sU8($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var rU8,mZ5,dZ5,aU8;var eU8=L(()=>{W8();$G();_p();yd();rU8=new Q1,mZ5=["range","if-none-match","if-modified-since"],dZ5=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];rU8.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),Q=Z.organization?.id;if(!Z.auth?.user?.id){if(Ht($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new q1(401,{message:"Authentication required"})}if(!Q)throw new q1(401,{message:"Organization context required"});let Y=$.req.path.replace(/^.*\/files\//,"");if(!Y)throw new q1(400,{message:"Missing file key"});let X=await I60(Y,Z);if(!X)throw new q1(503,{message:"Object storage not configured"});if(X.startsWith("data:")&&NK()){let K=X.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new q1(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 sU8(N,H),new Response(U,{status:200,headers:N})}let J=new Headers;for(let K of mZ5){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 q1(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 q1(502,{message:"Upstream storage error"});let W=new Headers;for(let K of dZ5){let H=G.headers.get(K);if(H)W.set(K,H)}return W.set("Cache-Control","private, max-age=86400"),sU8(W,W.get("content-type")??""),new Response(G.body,{status:G.status,headers:W})});aU8=rU8});var VZ0=b((hh)=>{var iZ5=hh&&hh.__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]}),pZ5=hh&&hh.__exportStar||function($,Z){for(var Q in $)if(Q!=="default"&&!Object.prototype.hasOwnProperty.call(Z,Q))iZ5(Z,$,Q)};Object.defineProperty(hh,"__esModule",{value:!0});pZ5(rG(),hh)});var QN8=b(($N8)=>{Object.defineProperty($N8,"__esModule",{value:!0});$N8.version=void 0;$N8.version="3.4.0"});var JN8=b((AB)=>{var nZ5=AB&&AB.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(AB,"__esModule",{value:!0});AB.NodeTransport=AB.VERSION=void 0;AB.nodeResolveHost=eZ5;var Q9=VZ0(),tZ5=V0("net"),gP1=V0("tls"),oZ5=V0("path"),YN8=V0("fs"),sZ5=nZ5(V0("dns")),rZ5=QN8();AB.VERSION=rZ5.version;var aZ5="nats.js";class XN8{socket;version;lang;yields=[];signal=(0,Q9.deferred)();closedNotification=(0,Q9.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=aZ5,this.version=AB.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,Q9.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 Q9.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 Q9.errors.ConnectionError("error connecting - node provided an undefined error");let{code:G}=J,W=G==="ECONNREFUSED"?new Q9.errors.ConnectionError("connection refused",{cause:J}):J;throw this.socket?.destroy(),W}}dial($){let Z=(0,Q9.deferred)(),Q,Y=(0,tZ5.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,Q9.deferred)(),Z;return this.socket.on("data",(Q)=>{this.yields.push(Q);let Y=Q9.DataBuffer.concat(...this.yields),X=(0,Q9.extractProtocolMessage)(Y);if(X!=="")try{let J=Q9.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,Q9.deferred)();try{if($=(0,oZ5.resolve)($),!(0,YN8.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,YN8.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,Q9.extend)(Q,this.options.tls,X)}catch(X){return Promise.reject(new Q9.errors.ConnectionError(X.message,{cause:X}))}let Y=(0,Q9.deferred)();try{let X=(0,gP1.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 Q9.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,Q9.extend)(Z,this.options.tls,Y)}catch(Y){return Promise.reject(new Q9.errors.ConnectionError(Y.message,{cause:Y}))}let Q=(0,Q9.deferred)();try{let Y=(0,gP1.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 Q9.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,Q9.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,Q9.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 gP1.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,Q9.render)($)}`);let Z=(0,Q9.deferred)();try{this.socket.write($,(Q)=>{if(Q){if(this.options.debug)console.error(`!!! ${(0,Q9.render)($)}: ${Q}`);return Z.reject(Q)}return Z.resolve()})}catch(Q){if(this.options.debug)console.error(`!!! ${(0,Q9.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}}AB.NodeTransport=XN8;function eZ5($){let Z=(0,Q9.deferred)();return sZ5.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 FN8=b((HN8)=>{Object.defineProperty(HN8,"__esModule",{value:!0});HN8.connect=$75;var GN8=JN8(),WN8=VZ0(),KN8=VZ0();function $75($={}){if((0,KN8.hasWsProtocol)($))return Promise.reject(KN8.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,WN8.setTransportFactory)({factory:()=>{return new GN8.NodeTransport},dnsResolveFn:GN8.nodeResolveHost}),WN8.NatsConnectionImpl.connect($)}});var UN8=b((VO)=>{var Q75=VO&&VO.__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]}),Y75=VO&&VO.__exportStar||function($,Z){for(var Q in $)if(Q!=="default"&&!Object.prototype.hasOwnProperty.call(Z,Q))Q75(Z,$,Q)};Object.defineProperty(VO,"__esModule",{value:!0});VO.connect=void 0;var X75=FN8();Object.defineProperty(VO,"connect",{enumerable:!0,get:function(){return X75.connect}});Y75(VZ0(),VO)});function DN8($){let Z=$?.connectFn??K75,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 D=0;while(!J)try{Q=await Z({servers:N,timeout:W75,reconnect:!0,maxReconnectAttempts:-1,...B?{authenticator:B}:{}}),console.log(`[NatsProvider] Connected to ${Q.getServer()} after ${D} attempt(s)`),Y=null,G=!1,F(Q),H();return}catch{D++;let O=V7(G75,J75,D-1,2,0.5);await F$(O)}}return{init(N,B){if(X)return;X=!0,J=!1;let D=B?.creds?yx0.credsAuthenticator(new TextEncoder().encode(B.creds)):B?.user?yx0.usernamePasswordAuthenticator(B.user,B.password):void 0;U(N,D).catch(()=>{})},isConnected(){return K()},getConnection(){return K()?Q:null},getJetStream(){if(!K())return null;if(!Y)Y=BN8.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 K75($){return NN8.connect($)}var yx0,NN8,BN8,J75=100,G75=3000,W75=3000;var LN8=L(()=>{r$();yx0=_(tz(),1),NN8=_(UN8(),1),BN8=_(NH(),1)});function gx0($){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 hx0($,Z){return`${$}.${Z}`}class hP1{cache;constructor($){this.cache=gx0({ttlMs:$?.ttlMs??H75,maxSize:$?.maxSize??F75})}async get($,Z){return this.cache.get(hx0($,Z))??null}async set($,Z,Q){this.cache.set(hx0($,Z),Q)}async invalidate($,Z){this.cache.delete(hx0($,Z)),this.cache.delete(hx0($,`${Z}:decisions`))}teardown(){this.cache.clear()}}var H75=600000,F75=5000;var ON8=()=>{};function ux0($,Z){return`${$}:${Z}`}function uP1($){let Z=gx0({ttlMs:$?.ttlMs??U75,maxSize:$?.maxSize??N75}),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(wN8,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(ux0(K,H))},set(K,H,F){Z.set(ux0(K,H),F)},invalidate(K,H){Z.delete(ux0(K,H)),W(K,H)},start(){if(G)return;let K=Q?.();if(!K)return;G=K.subscribe(wN8),(async()=>{for await(let H of G)try{let F=JSON.parse(J.decode(H.data));if(F.originId===Y)continue;Z.delete(ux0(F.organizationId,F.keyId))}catch{}})().catch(console.error)},teardown(){G?.unsubscribe(),G=null,Z.clear()}}}var wN8="studio.ai-provider-keys.invalidate",U75=30000,N75=5000;var jN8=()=>{};class lP1{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 EN8=($)=>{let Z;return()=>Z??=$()},cP1,mP1;var PN8=L(()=>{v6();cP1=EN8(()=>J$.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),mP1=EN8(()=>J$.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function E75($=TN8){return{name:sN,subjects:[`${oW1}.>`],storage:iF.StorageType.File,max_age:L75,max_bytes:w75,max_msgs_per_subject:j75,discard:iF.DiscardPolicy.Old,retention:iF.RetentionPolicy.Limits,duplicate_window:O75,num_replicas:$}}class RN8{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 zN8($){let Z=AN8.headers();for(let[Q,Y]of Object.entries($))Z.set(Q,Y);return Z}function T75($,Z){let Q=0;return{publish(Y,X,J,G){Y.publish(X,J,G?{headers:G}:void 0).catch((W)=>{if(Q++,D75().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 R75($,Z){return $.info?.cluster?Z:1}function q75($){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 dP1{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=E75(X);try{await Y.streams.info(sN),await Y.streams.update(sN,J)}catch(G){if(G instanceof Error&&G.message.includes("stream not found"))await Y.streams.add(J),await Y.streams.update(sN,J);else if(G instanceof Error&&/can ?not change.*storage|storage type/i.test(G.message))await Y.streams.delete(sN),await Y.streams.add(J);else throw G}},Q=await D8(async()=>{let Y=this.options.getJetStreamManager?await this.options.getJetStreamManager():await iF.jetstreamManager($),X=R75($,TN8);try{await Z(Y,X)}catch(J){if(X<=1||!q75(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:dp});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=T75(Z,Y),G=!1,W=()=>{if(G)return;G=!0;let H=Od$(Z);X.publish(H.subject,H.data).catch(()=>{})};Q.addEventListener("abort",W,{once:!0});let K=(H)=>{let F=performance.now(),U=rW1(H,{runId:Z}),N=performance.now()-F;cP1().record(N),mP1().add(1,{"org.id":Y??"unknown"}),A75?.record(N,U.reduce((B,D)=>B+D.data.length,0));for(let B of U)J.publish(X,B.subject,B.data,B.headers?zN8(B.headers):void 0)};return(async()=>{let H=$.getReader(),F=0,U=0,N;try{while(!0){let{done:B,value:D}=await H.read();if(B)break;if(K(D),U++,++F>=64)F=0,await new Promise((O)=>setImmediate(O))}}catch(B){N=B,console.warn(`[Decopilot] stream pump error for thread ${Z}:`,B?.message??B)}finally{if(H.releaseLock(),W(),z75)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 D8(()=>$.publish(Z.subject,Z.data,{...Z.headers?{headers:zN8(Z.headers)}:{},...Z.msgId?{msgID:Z.msgId}:{}}),{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:dp}),!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=rW1(Z,{runId:$,dedup:Q});cP1().record(performance.now()-X),mP1().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=Ld$({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"?iF.DeliverPolicy.New:iF.DeliverPolicy.All,J=Q?.closeOnDone??!1,G=bP($),W;try{W=await D8(async()=>{return(await Y.consumers.get(sN,{filter_subjects:G,deliver_policy:X})).consume()},{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:dp})}catch(O){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",O?.message??O),null}let F=Dk0({messages:async function*(){try{for await(let O of W)yield{subject:O.subject,data:O.data,headers:O.headers}}finally{W.stop()}}(),onCancel:()=>W.stop()}).pipeThrough(Fk0()).pipeThrough(Uk0()).getReader(),U=!1,N=()=>{if(U)return;U=!0;try{F.releaseLock()}catch{}},B=!1,D=()=>{if(B)return;B=!0,W.stop(),F.cancel().catch(()=>{}),N()};return Z?.addEventListener("abort",D,{once:!0}),new ReadableStream({async pull(O){for(;;){let{done:w,value:j}=await F.read();if(w){D(),O.close();return}let E=j;if(E.kind==="done"){if(J){D(),O.close();return}continue}O.enqueue(E.chunk);return}},cancel(){D()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge(sN,{filter:bP($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var iF,AN8,B75=($)=>{let Z;return()=>Z??=$()},D75,L75=86400000000000,O75=120000000000,w75=4294967296,TN8,j75=500000,P75,z75,A75;var qN8=L(()=>{r$();aW1();Lk0();Nk0();v6();PN8();iF=_(NH(),1),AN8=_(tz(),1),D75=B75(()=>J$.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"})),TN8=Math.max(1,Number(process.env.DECOPILOT_STREAM_REPLICAS??3)||3);P75=process.env.STREAM_ENCODE_TRACE==="1",z75=process.env.DECOPILOT_STREAM_TRACE==="1";A75=P75?new RN8:null});function lx0($,Z,Q,Y){if(!Y)return!1;return $.emit(Z,BU(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 MN8=L(()=>{R8()});class iP1{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 M75($,Z,Q={}){let Y=$.startsWith("thread:")?jF($,Q):$;return[...new Set([Z,Y].filter((X)=>!!X))]}async function pP1($,Z){let Q=Z.organizationId;try{let Y=await $.storage.taskBoard.linkedThreadIds(Z.id,Q);for(let X of Y){let J=await gN($,X);if(!J?.owner||!J?.name)continue;let G=await $.storage.threads.get(X),W=await hN($,{threadId:X,runBranch:G?.branch}),K=await $80($,Q,NZ1(J)).catch(()=>null);if(!K){console.warn(`[task-board] no credential for ${J.owner}/${J.name} \u2014 `+`cannot look up ${Z.id}'s change request by branch`);continue}let H=M75(W,await OM0($,X),{flat:ny(K.repo.provider)});for(let F of H){let U=await K.readForBranch(F).catch(()=>null);if(!U)continue;return await $.storage.taskBoard.linkPr({taskBoardItemId:Z.id,organizationId:Q,url:U.url,prNumber:U.number,repo:K.repo}),await $.storage.taskBoard.openReviewCycleIfInProgress(Z.id,Q),await s3(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 VN8=L(()=>{O7();IQ();kQ()});async function IN8($,Z,Q){let Y=Z.organizationId;if(!VJ(Z))return!1;if(!Eg(Q))return!1;if(!await Sm($,Y,Z00))return!1;if(await $.storage.taskBoard.hasHumanRejectedDone(Z.id,Y))return!1;let X=F1.shipped,J=await $.storage.taskBoard.update(Z.id,Y,{status:X},Z.updatedBy);return await r5($,{taskBoardItemId:Z.id,action:"status_changed",actorId:null,data:{from:Z.status,to:X,reason:"pr_merged"}}),w8(Y,J),console.log(`[task-board-review-sweeper] ${Z.id}: linked PR already merged \u2014 moved to ${X}`),!0}var kN8=L(()=>{XG();m8();zX();Rp();qF();a5()});function v75($){return $ instanceof KX}function SN8($,Z){return Z-$>=C75}class nP1{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??V75;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??k75,Q=this.options.itemIntervalMs??I75,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()-eJ1),q31);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()-_75));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 T31(this.taskBoard,X,Y),await R31(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!==F1.progress||VJ(W)||W.assigneeId!==F8)continue;let K=await this.contextFactory(J,W.assignedBy??W.createdBy);if(!K)continue;if(await pP1(K,W)){if(await this.taskBoard.clearSweepBudget(X,J),await this.reconcileItem(X,J,Z))Q++;continue}if(!SN8(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.advanceFromProgress(X,J,F1.review,W.updatedBy);if(!F)continue;await this.taskBoard.recordActivity({taskBoardItemId:X,action:"status_changed",actorId:null,data:{from:F1.progress,to:F1.review,reason:H}}).catch(()=>{}),w8(J,F),await MF(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!==F1.progress||G.assigneeId!==F8)continue;let W=await this.contextFactory(X,G.assignedBy??G.createdBy);if(!W)continue;await hL(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),v75(G)){await this.returnToBacklog(Y,X,G instanceof Error?G.message:String(G));continue}await this.taskBoard.scheduleRunRetry(Y,X,J,new Date(Date.now()+S75)).catch((W)=>console.error(`[task-board-review-sweeper] re-arming ${Y} failed`,W))}return Z}async returnToBacklog($,Z,Q){try{let Y=await this.taskBoard.getById($,Z);if(!Y||Y.status!==F1.progress)return;let X=await this.taskBoard.returnToBacklogAfterFailure($,Z,Y.updatedBy);if(!X)return;await this.taskBoard.recordActivity({taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:F1.progress,to:F1.intake,reason:Q,retriesSpent:Y.retryAttempts}}).catch(()=>{}),w8(Z,X)}catch(Y){console.error(`[task-board-review-sweeper] returning ${$} to backlog failed`,Y)}}async handOffReviewWithoutPr($,Z){let Q=await this.taskBoard.listActivity(Z.id,Z.organizationId);if(!SN8(_D(Q,Z.reviewCycleStartedAt),Date.now()))return;await MF($,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(!VJ(Y))return!1;let X=Y.assigneeId===F8,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 pP1(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 Vp(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 IN8(G,Y,W))return!0;if(!X)return!1;if(await Nl$(G,Y))return!0;if(!E31(W))return!1;return await Mp(G,Y,{previewMatchesHead:P31(W)}),!0}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}var V75=60000,I75=300000,k75=50,S75=60000,C75=900000,_75=120000;var CN8=L(()=>{m8();HI0();VN8();uL();Cp();qF();kN8();a5();x3();M31();kQ();e40()});async function _N8($,Z,Q=fP){return await bN8($,Z,Q,{})}async function vN8($,Z,Q,Y=fP){return await bN8($,Q,Y,{activityId:Z})}async function bN8($,Z,Q,Y){let X=await $.automations.findActiveBoardColumnTriggers();if(X.length===0)return 0;let J=new Map;for(let K of X){let H=K.automation.organization_id;J.set(H,[...J.get(H)??[],K])}let G=await $.taskBoard.listSettledTransitions({organizationIds:[...J.keys()],since:new Date(Z-b75),settledBefore:new Date(Z-Q),limit:x75,...Y}),W=0;for(let K of G)try{let H=(J.get(K.organizationId)??[]).filter((U)=>U.column_key===K.to&&Date.parse(U.created_at)<Date.parse(K.occurredAt));if(H.length===0)continue;let F=await f75($.taskBoard,K,Q);for(let U of H){if(!id$(U,{from:F,to:K.to}))continue;if(!await $.automations.claimTriggerFire(U.id,K.activityId))continue;await $.fire({automationId:U.automation_id,organizationId:K.organizationId,triggerId:U.id,target:{kind:"card",itemId:K.itemId,columnKey:K.to,eventKey:K.activityId,movedBy:K.actorId}},{idempotencyKey:`board:${U.id}:${K.activityId}`}),W++}}catch(H){console.error(`[automations] board transition ${K.activityId} failed`,H)}return W}async function f75($,Z,Q){let X=(await $.listActivity(Z.itemId,Z.organizationId)).flatMap((J)=>{let G=J.data;if(J.action!=="status_changed"||typeof G?.to!=="string")return[];let W=typeof G.from==="string"?G.from:null;return W===G.to?[]:[{from:W,to:G.to,occurredAt:J.occurredAt}]});return X.length>0?pd$(X,Q):Z.from}var b75=1800000,x75=200;var xN8=L(()=>{iL()});import{DBOS as Iz,DBOSClient as y75,SchedulerMode as g75}from"@dbos-inc/dbos-sdk";function fN8($){IO=$}async function l75($){if(!IO)return 0;try{return await vN8(IO,$,Date.now(),IO.settleMs)}catch(Z){return console.error(`[automations] settling board move ${$} failed`,Z),0}}async function c75(){if(!IO)return 0;try{return await _N8(IO,Date.now(),IO.settleMs)}catch($){return console.error("[automations] board transition sweep failed",$),0}}async function m75($){await Iz.sleep((IO?.settleMs??fP)+u75),await Iz.runStep(()=>l75($),{name:"settleBoardMove"})}async function d75($,Z){let Q=await Iz.runStep(()=>c75(),{name:"sweepBoardMoves"});if(Q>0)console.log(`[automations] board transition sweep fired ${Q} trigger(s) the settle wait missed`)}async function gN8($){let Z=IO;if(!Z||!oP1)return;if(!await Z.automations.hasActiveBoardColumnTrigger($.taskBoardItemId,$.to))return;let Q=`board-settle:${$.activityId}`;if(!Iz.isWithinWorkflow()){await Iz.startWorkflow(oP1,{workflowID:Q,queueName:xz})($.activityId);return}let Y=await y75.create({systemDatabaseUrl:Z.systemDatabaseUrl,systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:1});try{await Y.enqueue({workflowName:yN8,queueName:xz,workflowID:Q},$.activityId)}finally{await Y.destroy()}}function hN8(){if(tP1)return;oP1=Iz.registerWorkflow(m75,{name:yN8}),tP1=Iz.registerWorkflow(d75,{name:"boardTransitionSweepWorkflow"}),Iz.registerScheduled(tP1,{name:"boardTransitionSweepWorkflow",crontab:h75,mode:g75.ExactlyOncePerIntervalWhenActive})}var h75="*/5 * * * *",u75=2000,IO=null,yN8="boardTransitionSettleWorkflow",oP1=null,tP1=null;var uN8=L(()=>{iL();xN8()});import{readdir as i75,rm as cx0}from"fs/promises";import{join as mx0}from"path";async function dx0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-p75),Z.setUTCHours(0,0,0,0);let Q=0;try{let Y=await uh($);for(let X of Y)if(/^\d{4}$/.test(X))Q+=await lN8($,X,Z);else if(!X.startsWith(".")){let J=mx0($,X),G=await uh(J);for(let K of G){if(!/^\d{4}$/.test(K))continue;Q+=await lN8(J,K,Z)}if((await uh(J)).length===0)await cx0(J,{recursive:!0,force:!0})}}catch(Y){console.warn("monitoring retention cleanup failed:",Y)}return Q}async function lN8($,Z,Q){let Y=0,X=mx0($,Z),J=await uh(X);for(let W of J){if(!/^\d{2}$/.test(W))continue;let K=mx0(X,W),H=await uh(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=mx0(K,U);await cx0(B,{recursive:!0,force:!0}),Y++}}if((await uh(K)).length===0)await cx0(K,{recursive:!0,force:!0})}if((await uh(X)).length===0)await cx0(X,{recursive:!0,force:!0});return Y}async function uh($){try{return(await i75($)).filter((Q)=>!Q.startsWith("."))}catch{return[]}}var p75=30;var sP1=()=>{};import{DBOS as rP1,SchedulerMode as n75}from"@dbos-inc/dbos-sdk";async function o75(){let $=[XH(),oh(),SB()],Z=0;for(let Q of $)try{Z+=await dx0(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 s75($,Z){await rP1.runStep(()=>o75(),{name:"monitoringRetention"})}function mN8(){if(cN8)return;cN8=!0;let $=rP1.registerWorkflow(s75,{name:"monitoringRetentionWorkflow"});rP1.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:t75,mode:n75.ExactlyOncePerIntervalWhenActive})}var t75="23 4 * * *",cN8=!1;var dN8=L(()=>{zW();sP1()});function iN8($){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 OY.create();X.auth.user={id:Q,role:Y.role},X.organization={id:Y.orgId,slug:Y.orgSlug,name:Y.orgName};let J=await VE($.db,Z,Y.role);return X.boundAuth=Kw1({auth:X.authInstance,headers:new Headers,role:Y.role,permissions:J,userId:Q}),X.access=new RA(Q,void 0,X.boundAuth,Y.role,"self"),SP(X,{id:Y.orgId,slug:Y.orgSlug}),X}}var pN8=L(()=>{sX();PN()});function nN8(){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=IZ0(N.params.name),D=N.params.arguments||{},O=Object.keys(D).map((j)=>IZ0(j)),w=O.length>0?O.slice(0,3).join(",")+(O.length>3?"\u2026":""):"";J=`${B9.tool}${B}${B9.dim}(${w})${B9.reset}`}else if(N.method)J=`${B9.dim}${IZ0(N.method)}${B9.reset}`}}catch{}}let W=IZ0(X);if(X.startsWith("/mcp/conn_")){let F=X.split("/")[2]??"";W=`/mcp/${B9.mcp}${IZ0(F.slice(0,12))}\u2026${B9.reset}`}else if(X==="/mcp")W=`${B9.mcp}/mcp${B9.reset}`;else if(X==="/mcp/registry")W=`${B9.mcp}/mcp/registry${B9.reset}`;let K=a75(Y),H=G?"\u25C0":"\u2190";console.log(`${B9.dim}${H}${B9.reset} ${K}${Y}${B9.reset} ${W}${J?` ${J}`:""}`);try{await Z()}finally{let F=Date.now()-Q,U=$.res.status,N=r75(U),B=F<1000?`${F}ms`:`${(F/1000).toFixed(1)}s`,D=G?"\u25B6":"\u2192";console.log(`${B9.dim}${D}${B9.reset} ${K}${Y}${B9.reset} ${W}${J?` ${J}`:""} ${N}${U}${B9.reset} ${B9.duration}${B}${B9.reset}`)}}}var B9,r75=($)=>{if($>=500)return B9.serverError;if($>=400)return B9.clientError;if($>=300)return B9.redirect;return B9.ok},a75=($)=>{return B9[$]||B9.reset},IZ0=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var tN8=L(()=>{B9={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 aN8}from"crypto";import{mkdir as e75,readdir as $Q5,rm as oN8,stat as eN8}from"fs/promises";import{join as eP1,relative as ZQ5}from"path";import{z as Y8}from"zod";function ZB8($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return eP1(QQ5,Z)}function QB8($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function aP1($,Z){let Q=ZB8($),Y=QB8(Z);return eP1(Q,Y)}function YQ5($,Z,Q,Y){let X=L0().encryptionKey||"dev-secret",J=`${$}:${Z}:${Q}:${Y}`;return aN8("sha256",X).update(J).digest("hex")}function rN8($,Z,Q,Y,X){let J=Math.floor(Date.now()/1000)+Y,G=YQ5(Z,Q,J,X),W=new URL(`/api/dev-assets/${Z}/${QB8(Q)}`,$);return W.searchParams.set("expires",J.toString()),W.searchParams.set("signature",G),W.searchParams.set("method",X),W.toString()}function YB8($,Z,Q){let Y=`${$}:${Z.getTime()}:${Q}`;return`"${aN8("md5","etag").update(Y).digest("hex")}"`}async function XB8($,Z,Q,Y,X){try{let J=await $Q5($,{withFileTypes:!0});for(let G of J){let W=eP1($,G.name),H=ZQ5(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 XB8(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 eN8(W);X.objects.push({key:H,size:F.size,lastModified:F.mtime.toISOString(),etag:YB8(W,F.mtime,F.size)})}catch{}}}}catch{}}function JB8($,Z){let Y=Q0($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:Y8.object({prefix:Y8.string().optional(),maxKeys:Y8.number().optional().default(1000),continuationToken:Y8.string().optional(),delimiter:Y8.string().optional()}),outputSchema:Y8.object({objects:Y8.array(Y8.object({key:Y8.string(),size:Y8.number(),lastModified:Y8.string(),etag:Y8.string()})),nextContinuationToken:Y8.string().optional(),isTruncated:Y8.boolean(),commonPrefixes:Y8.array(Y8.string()).optional()}),handler:async(X)=>{let J=X,G=J.prefix||"",W=J.maxKeys??1000,K=J.delimiter,H=J.continuationToken,F=ZB8(Y);await e75(F,{recursive:!0});let U={objects:[],commonPrefixes:new Set};await XB8(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),D=N+W<U.objects.length,O=D?B[B.length-1]?.key:void 0;return{objects:B,isTruncated:D,nextContinuationToken:O,commonPrefixes:Array.from(U.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:Y8.object({key:Y8.string()}),outputSchema:Y8.object({contentType:Y8.string().optional(),contentLength:Y8.number(),lastModified:Y8.string(),etag:Y8.string(),metadata:Y8.record(Y8.string(),Y8.string()).optional()}),handler:async(X)=>{let J=X,G=aP1(Y,J.key),W=await eN8(G);return{contentType:Kj1(J.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:YB8(G,W.mtime,W.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:Y8.object({key:Y8.string(),expiresIn:Y8.number().optional()}),outputSchema:Y8.object({url:Y8.string(),expiresIn:Y8.number()}),handler:async(X)=>{let J=X,G=JO(J.expiresIn,sN8);return{url:rN8(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:Y8.object({key:Y8.string(),expiresIn:Y8.number().optional(),contentType:Y8.string().optional()}),outputSchema:Y8.object({url:Y8.string(),expiresIn:Y8.number()}),handler:async(X)=>{let J=X,G=JO(J.expiresIn,sN8);return{url:rN8(Z,Y,J.key,G,"PUT"),expiresIn:G}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:Y8.object({key:Y8.string()}),outputSchema:Y8.object({success:Y8.boolean(),key:Y8.string()}),handler:async(X)=>{let J=X,G=aP1(Y,J.key);try{return await oN8(G),{success:!0,key:J.key}}catch{return{success:!1,key:J.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:Y8.object({keys:Y8.array(Y8.string()).max(1000)}),outputSchema:Y8.object({deleted:Y8.array(Y8.string()),errors:Y8.array(Y8.object({key:Y8.string(),message:Y8.string()}))}),handler:async(X)=>{let J=X,G=[],W=[];return await Promise.all(J.keys.map(async(K)=>{let H=aP1(Y,K);try{await oN8(H),G.push(K)}catch(F){W.push({key:K,message:F instanceof Error?F.message:"Unknown error"})}})),{deleted:G,errors:W}}}]}async function $z1($,Z,Q){let Y=JB8(Z,Q),X=new qj({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:o9});for(let G of Y){let W="shape"in G.inputSchema?G.inputSchema.shape:Y8.object({}).shape,K=G.outputSchema&&"shape"in G.outputSchema?G.outputSchema.shape:Y8.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 QW({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await X.connect(J),hK(X,J,$,"mcp:dev-assets")}async function GB8($,Z,Q,Y){let J=JB8(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 QQ5="./data/assets",sN8=3600,$B8,WB8;var KB8=L(()=>{r1();Zn();W8();OW0();$n();ZJ();GO();Vb0();$B8=new Q1;$B8.all("/",async($)=>{let Z=$.get("studioContext"),Q=new URL($.req.url),Y=`${Q.protocol}//${Q.host}`;return $z1($.req.raw,Z,Y)});WB8=$B8});var HB8={};O6(HB8,{mountDevRoutes:()=>XQ5});function XQ5($,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 $z1(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 GB8(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",WB8);let Q=new Q1;Q.use("*",mF({mountPath:"/api/dev-assets"})),Q.route("/",Mb0({orgFromPath:!1})),$.route("/api/dev-assets",Q)}var FB8=L(()=>{W8();Zj1();Vb0();KB8()});var PB8={};O6(PB8,{watchHandler:()=>EB8,resolveVoiceSigningSecret:()=>OB8,resolveCorsOrigin:()=>wB8,isSsoExemptPath:()=>LB8,isAllowedOAuthRedirectUri:()=>jB8,createApp:()=>LQ5});import{readFileSync as JQ5}from"fs";import{randomBytes as GQ5}from"crypto";import{PrometheusSerializer as WQ5}from"@opentelemetry/exporter-prometheus";import{DBOS as TB}from"@dbos-inc/dbos-sdk";import{oAuthDiscoveryMetadata as FQ5,oAuthProtectedResourceMetadata as UQ5}from"better-auth/plugins";async function KQ5($){let Z=$.connect(),Q;try{Q=await Promise.race([Z,NB8(UB8)])}catch{return Z.then((Y)=>Y.release(!0)).catch(()=>{}),!1}try{return await Promise.race([Q.query("SELECT 1"),NB8(UB8)]),Q.release(),!0}catch{return Q.release(!0),!1}}function NB8($){return new Promise((Z,Q)=>setTimeout(()=>Q(Error("pg health-check timeout")),$))}function LB8($){return $.startsWith("/api/org-sso/")||/^\/api\/[^/]+\/sso\//.test($)||$.startsWith("/api/auth/")||$.startsWith("/api/tools/management")||$.startsWith("/oauth-proxy/")||/^\/api\/[^/]+\/oauth-proxy\//.test($)||$.startsWith(`${Ub0}/`)||$.startsWith(`${Jb0}/`)}function OB8($){let Z=$.studioJwtSecret||$.betterAuthSecret;if(Z)return Z;return console.warn("STUDIO_JWT_SECRET/BETTER_AUTH_SECRET not set - generating a random secret for voice sessions (not persistent across restarts)"),GQ5(32).toString("base64")}function wB8($,{baseUrl:Z,requestOrigin:Q}){let Y;try{Y=new URL($).hostname}catch{return null}if(Y==="localhost"||Y==="127.0.0.1")return $;let X=Z??Q;try{if(new URL(X).origin===$)return $}catch{}return null}function jB8($,Z){return $.origin===new URL(Z).origin||$.hostname==="localhost"}async function LQ5($={}){let Z=$.database??z8(),Q=!1;g6.stop().catch((H0)=>{console.error("[SSEHub] Error stopping previous broadcast (HMR cleanup):",H0)});let Y,X,J,G,W=new hP1,K,H,F,U=null;if($.disableNats)K=uP1(),Y={get:async()=>null,set:async()=>{},invalidate:async()=>{},teardown:()=>{}},X=null,J=null,G=new e60,H={start:async()=>{},broadcast:()=>{},stop:async()=>{}},F={init:async()=>{},pump:(H0)=>{return(async()=>{let J0=H0.getReader();try{while(!0){let{done:P0}=await J0.read();if(P0)break}}catch{}finally{J0.releaseLock()}})()},publishRawChunk:async()=>!1,publishDone:async()=>!1,createTailStream:async()=>null,purge:()=>{},teardown:()=>{}};else{U=DN8();let H0=L0().natsCredsPath,J0;if(H0)try{J0=JQ5(H0,"utf8")}catch(U8){console.error(`[app] failed to read NATS_CREDS at ${H0}; connecting anonymously`,U8)}U.init(L0().natsUrls,{creds:J0,user:L0().natsUser,password:L0().natsPassword});let P0=s61()?new b61({getJetStream:()=>U.getJetStream(),selfListVersion:vx0.version}):null;P0?.init().catch(()=>{}),Y=P0;let z0=new P51({getJetStream:()=>U.getJetStream()});z0.init().catch(()=>{}),X=z0;let w1=new Pg(B31,{getJetStream:()=>U.getJetStream()}),b$=new Pg($60,{getJetStream:()=>U.getJetStream()});w1.init().catch(()=>{}),b$.init().catch(()=>{}),J={reads:w1,cards:b$};let o$=new xH1({getJetStream:()=>U.getJetStream()});o$.init().catch(()=>{}),G=o$,K=uP1({getConnection:()=>U.getConnection()}),H=new lP1({getConnection:()=>U.getConnection()}),F=new dP1({getConnection:()=>U.getConnection(),getJetStream:()=>U.getJetStream()}),lX8(U),U.onReady(()=>{P0?.init().catch((U8)=>{console.error("[McpListCache] Deferred init failed:",U8)}),z0.init().catch((U8)=>{console.error("[SkillCatalogCache] Deferred init failed:",U8)}),w1.init().catch((U8)=>{console.error("[PrReadCache] Deferred init failed:",U8)}),b$.init().catch((U8)=>{console.error("[PrCardCache] Deferred init failed:",U8)}),o$.init().catch((U8)=>{console.error("[ConnectionCircuitStore] Deferred init failed:",U8)}),K.start(),_j$(()=>U.getConnection()),F.init().catch((U8)=>{console.warn("[Decopilot] StreamBuffer init failed (late-join disabled):",U8)})})}if(kz)await kz();x61(Y),A51(X),R51(()=>U?.getConnection()??null),D31(J),fH1(G);let B={storage:new gl(Z.db),sseHub:g6,onThreadFinished:async(H0,J0)=>kp(new t3(Z.db),H0,J0,new B3(Z.db))},D=new wW1(B),O=new V90(Z.db),w=new iP1(O);w.start(),ed$(H),H.start((H0)=>{eI0(H0),D.execute({type:"CANCEL",taskId:H0}).catch((J0)=>{console.error("[Decopilot] CancelBroadcast execute failed:",J0)})}).catch((H0)=>{console.error("[Decopilot] CancelBroadcast start failed:",H0)}),U?.onReady(()=>{H.start().catch((H0)=>{console.error("[CancelBroadcast] Deferred start failed:",H0)})});let j=()=>U?.getConnection()??null;ow1(j),U?.onReady(()=>ow1(j)),OF1(j),U?.onReady(()=>OF1(j)),F.init().catch((H0)=>{console.warn("[Decopilot] StreamBuffer init failed, attach/late-join disabled:",H0)}),kz=async()=>{await D.stopAll(),D.dispose(),w.dispose(),H.stop().catch(()=>{}),XG8(),F.teardown(),Y?.teardown(),X?.teardown(),J?.reads.teardown(),J?.cards.teardown(),W.teardown(),K.teardown(),vj$(),G.teardown(),x61(null),A51(null),R51(null),D31(null),fH1(null)};let E=new Q1;if(E.use("*",_H1({enabled:(H0)=>Kt(H0,"debug")==="1"})),E.use("*",Nf0),E.use("/*",fX8({origin:(H0,J0)=>wB8(H0,{baseUrl:L0().baseUrl,requestOrigin:new URL(J0.req.url).origin}),credentials:!0,allowMethods:["GET","POST","PUT","DELETE","OPTIONS"],allowHeaders:["Content-Type","Authorization","mcp-protocol-version"],exposeHeaders:["WWW-Authenticate"]})),E.use("*",async(H0,J0)=>{if(await J0(),H0.req.path.includes("/files/"))return;if(H0.req.path.includes("/fs/")&&H0.req.path.endsWith("/read"))return;H0.header("X-Frame-Options","DENY"),H0.header("Content-Security-Policy","frame-ancestors 'none'")}),L0().nodeEnv==="development")E.use("*",nN8());E.use("*",async(H0,J0)=>{if(await J0(),$o(H0.req.path))return;if(H0.res.status>=500){let z0=await H0.res.clone().text();console.error(`[5xx Response] ${H0.req.method} ${H0.req.path} - ${H0.res.status}:`,z0)}}),E.get(bX.HEALTH,(H0)=>{if(Q)return H0.json({status:"shutting_down"},503);return H0.json({status:"ok"})}),E.get(bX.HEALTH_LIVE,(H0)=>{return H0.json({status:"ok"})}),E.get(bX.HEALTH_READY,async(H0)=>{if(Q)return H0.json({status:"shutting_down"},503);let J0={};if(J0.postgres={status:await KQ5(Z.pool)?"up":"down"},U)J0.nats=U.isConnected()?{status:"up"}:{status:"down"};else J0.nats={status:"down"};let P0=J0.postgres.status==="up",z0=P0?200:503;return H0.json({status:P0?"ready":"not_ready",services:J0},z0)}),E.get(bX.METRICS,async(H0)=>{try{let J0=await Of0.collect(),P0=HQ5.serialize(J0.resourceMetrics);return H0.text(P0,200,{"Content-Type":"text/plain; version=0.0.4; charset=utf-8"})}catch(J0){return console.error("Failed to collect metrics:",J0),H0.text("# Error collecting metrics",500)}});let P=1800000;E.get(`${bX.DBOS_QUEUE_DEPTH_PREFIX}:queueName`,async(H0)=>{let J0=H0.req.param("queueName");if(!NQ5.has(J0))return H0.json({error:`Unknown queue: ${J0}`},404);let[P0,z0]=await Promise.all([TB.listQueuedWorkflows({queueName:J0,status:"ENQUEUED",loadInput:!1,loadOutput:!1}),TB.listQueuedWorkflows({queueName:J0,status:"PENDING",loadInput:!1,loadOutput:!1,dequeuedAfter:new Date(Date.now()-P).toISOString()})]);return H0.json({queue_length:P0.length,in_flight:z0.length})}),E.route("/api/config",RU8),E.route("/api/_reports",bU8),E.route("/api/_stripe",MP1),E.route("/api/_github",yU8({taskBoard:()=>i,contextFactory:()=>y})),E.route("/api/_git",Ot);let T={db:Z.db,encryptionKey:L0().encryptionKey};E.route("/api/_jira",tU8(T)),E.route("/api/_jira",lU8(T)),E.route("/report",CU8($.clientDir)),E.route("/api/auth/custom",WJ8),E.all("/api/auth/admin/*",iJ8),E.all("/api/auth/*",async(H0)=>{return await B4.handler(H0.req.raw)});let z=FY8();z.use("/.well-known/oauth-protected-resource/mcp/:connectionId",g90),z.use("/mcp/:connectionId/.well-known/oauth-protected-resource",g90),E.route("/",z),E.get("/.well-known/oauth-protected-resource/api/:org/mcp/:connectionId",R90),E.route("/",LY8()),E.use("/oauth-proxy/:connectionId/*",g90),E.all("/oauth-proxy/:connectionId/*",BB8);let A=async(H0)=>{let P0=await BQ5()(H0.req.raw),z0=await P0.json();return Response.json(z0,P0)};E.use("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",g90),E.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",A);let q=async(H0)=>{let P0=await DQ5()(H0.req.raw),z0=await P0.json();return Response.json(z0,P0)};E.get("/.well-known/oauth-authorization-server/*/:gateway?/:connectionId?",q);let x=gX8({ttlMs:120000}),C=await HX8({db:Z.db,auth:B4,encryption:{key:L0().encryptionKey},observability:{tracer:fO,meter:J$},modelListCache:W,providerKeyCache:K,memberRoleCache:x});OY.set(C),er1({db:Z.db,baseUrl:N5()}),FX8({db:Z.db}),DX8({db:Z.db}),AX8({db:Z.db}),iU8({db:Z.db,encryptionKey:L0().encryptionKey}),Ju$({db:Z.db}),IX8({db:Z.db}),fu$({db:Z.db});let I=Nj(Z.db),g=new ya(Z.db),y=iN8({db:Z.db});VK1({storage:I,studioContextFactory:y,orgContextFactory:(H0)=>o3(Z.db,H0),systemDatabaseUrl:ne(L0().databaseUrl,L0().databasePgSsl)}),FK1({systemDatabaseUrl:ne(L0().databaseUrl,L0().databasePgSsl),studioContextFactory:y,deps:{runRegistry:D,cancelBroadcast:H,streamBuffer:F,sseHub:g6}}),XK1({dispatchRunFn:Kd$,studioContextFactory:y,deps:{runRegistry:D,cancelBroadcast:H,streamBuffer:F,sseHub:g6}});let h=new gl(Z.db),i=new t3(Z.db),n=new B3(Z.db),U0=new nP1(i,y,n);if(L0().taskBoardReviewSweeperEnabled){U0.start();let H0=kz;kz=async()=>{await H0?.(),U0.dispose()}}fN8({automations:I,taskBoard:i,fire:SK,systemDatabaseUrl:ne(L0().databaseUrl,L0().databasePgSsl),settleMs:L0().boardTransitionSettleSeconds*1000}),Du$(gN8),kd$({getJetStream:()=>U?.getJetStream()??null,getJetStreamManager:async()=>{let H0=U?.getConnection();return H0?await DB8.jetstreamManager(H0):null},messageParts:h.messageParts(),resolveRun:async(H0)=>{let J0=await Z.db.selectFrom("threads").select(["organization_id","created_by","message_storage_version","status","run_fence_token","title"]).where("id","=",H0).executeTakeFirst();return J0?{orgId:J0.organization_id,createdBy:J0.created_by,version:J0.message_storage_version??1,status:J0.status,runFenceToken:J0.run_fence_token,title:J0.title??null}:null},completeRunIfNotCompleted:async(H0,J0)=>{let P0=await h.completeRunIfNotCompleted(H0,J0);if(lx0(g6,J0,H0,P0),P0)await kp(i,H0,J0,n);return P0},markRunRequiresAction:async(H0,J0)=>{let P0=await h.requiresActionIfInProgress(H0,J0);return lx0(g6,J0,H0,P0),P0},markRunFailed:async(H0,J0,P0,z0)=>{let w1=await h.markRunFailed(H0,J0,P0,z0);if(lx0(g6,J0,H0,w1),w1)await kp(i,H0,J0,n);return w1},clearSynthesizedError:async(H0,J0)=>{await h.messageParts().replaceMessageParts(H0,vP(H0,J0),[])},persistTitle:(H0,J0,P0)=>h.update(H0,J0,{title:P0}),onTitleUpdated:async({runId:H0,orgId:J0,title:P0})=>{let z0=await h.get(H0,J0).catch(()=>null);g6.emit(J0,BU(H0,z0?.status??"in_progress",{title:P0,virtualMcpId:z0?.virtual_mcp_id??void 0,createdBy:z0?.created_by,triggerId:z0?.trigger_id,branch:z0?.branch??null,harnessId:z0?.harness_id??void 0,createdAt:z0?.created_at,updatedAt:z0?.updated_at}))},bumpProgress:async({runId:H0,orgId:J0})=>{await h.bumpProgress(H0,J0)},recordCompleted:async({runId:H0,orgId:J0,distinctId:P0,usage:z0})=>{l1.capture({distinctId:P0,event:"chat_message_completed",groups:{organization:J0},properties:{organization_id:J0,thread_id:H0,transport:"projector",input_tokens:z0.inputTokens,output_tokens:z0.outputTokens,total_tokens:z0.totalTokens}})},recordFailed:async({runId:H0,orgId:J0,distinctId:P0,reason:z0,kind:w1})=>{l1.capture({distinctId:P0,event:"chat_message_failed",groups:{organization:J0},properties:{organization_id:J0,thread_id:H0,transport:"projector",error_category:w1,error_message:z0}})},purgeRun:async(H0)=>{F.purge(H0)}}),Cm$({studioContextFactory:y,systemDatabaseUrl:ne(L0().databaseUrl,L0().databasePgSsl),streamBuffer:F}),mN8(),$a1(),NX8(),OX8(),RX8(),nU8(),hN8(),Fu$(),SX8(),yu$(),hU8();let b0=async(H0,J0,P0)=>{let z0=await I.findById(H0,J0);if(!z0)throw Error("Automation not found");return _K1({automationId:z0.id,organizationId:z0.organization_id,triggerId:null})},G0=new Dt(I,({automation:H0,trigger:J0,contextMessages:P0,idempotencyKey:z0})=>SK({automationId:H0.id,organizationId:H0.organization_id,triggerId:J0.id,contextMessages:P0},{idempotencyKey:z0})),N0=[XH(),oh(),SB()];for(let H0 of N0)dx0(H0).then(()=>{}).catch((J0)=>console.error("[monitoring] Retention cleanup failed:",J0));let o=()=>B4.api.deleteAllExpiredApiKeys().catch((H0)=>console.error("[auth] Expired API key cleanup failed:",H0));o(),setInterval(o,86400000).unref(),E.use("*",async(H0,J0)=>{if(Ff0(H0.req.path))return J0();let P0={measure:async(w1,b$)=>{gK(H0,w1);try{return await b$()}finally{YW(H0,w1)}}},z0=await OY.create(H0.req.raw,{timings:P0});z0.automationRunner=b0,H0.set("studioContext",z0);try{await J0()}finally{let w1=z0.pendingRevalidations;if(w1.length>0)Promise.race([Promise.allSettled(w1),F$(30000)]).catch((o$)=>console.error("[studio] revalidation cleanup error:",o$))}}),E.use("/api/:org/decopilot/*",Ft),E.use("/api/:org/v1/*",Ft),E.use("/api/:org/files/*",Ft),E.use("*",async(H0,J0)=>{if(LB8(H0.req.path))return J0();let P0=H0.get("studioContext");if(!P0?.organization?.id||!P0?.auth?.user?.id)return J0();if(!(await P0.storage.orgSsoConfig.getByOrgId(P0.organization.id))?.enforced)return J0();if(!await P0.storage.orgSsoSessions.isValid(P0.auth.user.id,P0.organization.id))return H0.json({error:"SSO authentication required for this organization"},403);return J0()});let e=new Q1;e.use("*",mF({mountPath:"/api/org-sso"})),e.route("/",Db0()),E.route("/api/org-sso",e),E.get("/api/tools/management",(H0)=>{return H0.json({tools:ca,grouped:AA()})}),E.use("/mcp/*",async(H0,J0)=>{gK(H0,"mcp");try{return await J0()}finally{YW(H0,"mcp")}});let Y0=async(H0,J0)=>{let P0=H0.var.studioContext;if(!P0.auth.user?.id&&!P0.auth.apiKey?.id){let z0=new URL(H0.req.url),w1=H0.req.header("x-forwarded-proto")?.split(",")[0]?.trim(),b$=w1?`${w1}://${z0.host}`:z0.origin;return H0.res=new Response(null,{status:401,headers:{"WWW-Authenticate":`Bearer realm="mcp",resource_metadata="${b$}${z0.pathname}/.well-known/oauth-protected-resource"`}})}return await J0()};if(E.use("/mcp/:connectionId?",Y0),E.use("/mcp/gateway/:virtualMcpId?",Y0),E.use("/mcp/virtual-mcp/:virtualMcpId?",Y0),E.use("/mcp/self",Y0),NK()){let{mountDevRoutes:H0}=(FB8(),ax0(HB8));H0(E,Y0)}let $0=new Q1;$0.use("*",mF({mountPath:"/mcp"})),$0.route("/",sk0()),E.route("/mcp",$0);let X0=new Q1;X0.use("*",mF({mountPath:"/mcp/self"})),X0.route("/",Xx0()),E.route("/mcp/self",X0);let h0=new Q1;h0.use("*",mF({mountPath:"/mcp"})),h0.route("/",ek0()),E.route("/mcp",h0),E.use("/api/:org/models/*",async(H0,J0)=>{gK(H0,"llm_models");try{return await J0()}finally{YW(H0,"llm_models")}});let k0=FG8({cancelBroadcast:H,streamBuffer:F,runRegistry:D});E.route("/api",k0),E.route("/api",aU8);let K1=new Q1;K1.use("*",mF({mountPath:"/api"})),K1.route("/",Kx0()),E.route("/api",K1),E.route("/api",EU8);let c0=new Q1;c0.use("*",mF({mountPath:"/api"})),c0.route("/",Hx0({tokenStorage:g,automationEventDispatcher:G0})),E.route("/api",c0);let w0=new ga(Z.db),E0=new Q1;E0.use("*",mF({mountPath:"/api"})),E0.route("/",Pb0()),E.route("/api",E0),E.route("/api/deco-sites",qG8()),E.route("/api/deco-apps",BU8());let n0=new Q1;n0.use("*",mF({mountPath:"/api/deco-sites"})),n0.route("/",Ab0()),E.route("/api/deco-sites",n0),E.route(Ub0,pJ8()),E.route(ZH8,XH8()),E.route("/api/_editor-resolve",zU8()),E.route(FJ8,UJ8()),E.route(Jb0,MJ8());let O1=L0(),o0=O1.elevenlabsApiKey?new Sx0({apiKey:O1.elevenlabsApiKey,model:O1.elevenlabsVoiceModel,conversationModel:O1.elevenlabsConversationModel,voiceId:O1.elevenlabsVoiceId}):null,v0={openai:O1.openaiLiveApiKey?new jP1({apiKey:O1.openaiLiveApiKey,voice:O1.openaiLiveVoice}):null,elevenlabs:o0?new wP1(o0,()=>U?.getConnection()??null):null},d0=new TP1({adapter:o0,conversationAdapters:v0,defaults:O1,secret:OB8(O1),getConnection:()=>U?.getConnection()??null}),i0=iF8({voiceSessions:d0,kvStorage:w0,runRegistry:D,streamBuffer:F,sseHub:g6,cancelBroadcast:H,tokenStorage:g,automationEventDispatcher:G0,mountDevAssets:NK(),mcpAuth:Y0,oauthProxyHandler:BB8,watchHandler:EB8,betterAuthProtectedResourceHandler:A,getNatsConnection:()=>U?.getConnection()??null});return E.route("/api/:org",i0),E.notFound((H0)=>{return H0.json({error:"Not Found",path:H0.req.path},404)}),E.onError(NG8),Object.assign(E,{markShuttingDown:()=>{Q=!0},shutdown:async()=>{if(console.log("[shutdown] Stopping workers..."),await Promise.allSettled([g6.stop(),kz?Promise.resolve(kz()).finally(()=>{kz=null}):Promise.resolve()]),U)await U.drain().catch((H0)=>console.error("[shutdown] NATS drain error:",H0));console.log("[shutdown] Flushing telemetry..."),await xJ().catch((H0)=>console.error("[shutdown] Telemetry flush error:",H0)),console.log("[shutdown] Closing database..."),await WG$(Z).catch((H0)=>console.error("[shutdown] Database close error:",H0)),console.log("[shutdown] Cleanup complete.")},initDbos:async()=>{await TB.registerQueue(nG,{partitionQueue:!0,concurrency:RK1,minPollingIntervalMs:qK1}),await TB.registerQueue(EW,{partitionQueue:!0,concurrency:KK1,priorityEnabled:!0}),await TB.registerQueue(IB,{workerConcurrency:L0().decopilotMaxConcurrentHostedRuns,priorityEnabled:!0}),await TB.registerQueue(kB,{workerConcurrency:L0().sandboxMaxConcurrentHostedRuns,priorityEnabled:!0}),await TB.registerQueue(xO,{partitionQueue:!0,concurrency:Sm$}),await TB.registerQueue(bz,xu$),await TB.registerQueue(xz),await Qj1(I),await Promise.allSettled(["automations-gate","automations-global","jira-push"].map((H0)=>TB.deleteQueue(H0))),await MK1(Z.pool),lK$().catch((H0)=>{console.error("[studio-pack-backfill] failed:",H0)}),km(Z.db).catch((H0)=>{console.error("[automations] built-in seed failed:",H0)}),Za1().catch((H0)=>{console.error("[org-fs] public-sets boot sync kick failed:",H0)})}})}var DB8,UB8=5000,kz=null,BB8=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 OY.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 g=await $.req.json().catch(()=>({}));return $.json({...typeof g==="object"&&g!==null?g:{},client_id:G.oauth_config.clientId,...G.oauth_config.clientSecret?{client_secret:G.oauth_config.clientSecret}:{},client_secret_expires_at:0})}let W=await Jt(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=CO1(await W.json());if(!K)K=H.origin;let N=await q90(K);if(!N.ok)return $.json({error:"Failed to get auth server metadata"},502);let B=await N.json(),D;if(Y==="authorize")D=B.authorization_endpoint;else if(Y==="token")D=B.token_endpoint;else if(Y==="register")D=B.registration_endpoint;if(!D)return $.json({error:`Unknown OAuth endpoint: ${Y}`},404);let O=DY8(D);if(O)return O;let w=new URL(D),j=new URL($.req.url);if(w.search=j.search,Y==="authorize"){let g=w.searchParams.get("redirect_uri");if(g){let y=L0().baseUrl??j.origin;try{if(!jB8(new URL(g),y))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",g)}if(w.searchParams.has("resource"))w.searchParams.set("resource",U);if(_X8(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"},P=$.req.header("Content-Type");if(P)E["Content-Type"]=P;let T=$.req.header("Authorization");if(T)E.Authorization=T;let z,A=null,q=null;if($.req.method!=="GET"&&$.req.method!=="HEAD")if(Y==="token"&&P?.includes("application/x-www-form-urlencoded")){if(T?.toLowerCase().startsWith("basic "))try{let n=atob(T.slice(6).trim()),U0=n.indexOf(":");if(U0!==-1){let b0=decodeURIComponent(n.slice(0,U0)),G0=decodeURIComponent(n.slice(U0+1));A=b0||null,q=G0||null}}catch{}let g=await $.req.formData();if(g.has("resource"))g.set("resource",U);let y=g.get("client_id"),h=g.get("client_secret");if(typeof y==="string"&&y)A=y;if(typeof h==="string"&&h)q=h;let i=new URLSearchParams;for(let[n,U0]of g.entries())i.append(n,U0.toString());z=i.toString()}else if(Y==="register"&&P?.toLowerCase().includes("application/json")){let g=await X.db.selectFrom("organization").select(["id","slug","name"]).where("id","=",G.organization_id).executeTakeFirst(),y=await $.req.text(),h={};try{h=y?JSON.parse(y):{}}catch{z=y}let i=typeof h==="object"&&h!==null&&!Array.isArray(h);if(z===void 0&&!i)z=y;if(z===void 0){let n=h,U0=n.metadata&&typeof n.metadata==="object"?n.metadata:{};n.metadata={...U0,organization_id:G.organization_id,...g?.slug?{organization_slug:g.slug}:{},...g?.name?{organization_name:g.name}:{}},z=JSON.stringify(n),E["Content-Type"]="application/json"}}else z=$.req.raw.body??void 0;let x=await fetch(w.toString(),{method:$.req.method,headers:E,body:z,duplex:"half",redirect:"manual"}),C=new Headers,I=["connection","keep-alive","transfer-encoding","content-encoding","content-length"];for(let[g,y]of x.headers.entries())if(!I.includes(g.toLowerCase()))C.set(g,y);if(Y==="token"&&x.ok){let g=await x.text();try{let y=JSON.parse(g);if(typeof y.access_token==="string"&&y.access_token){let h=typeof y.expires_in==="number"?new Date(Date.now()+y.expires_in*1000):null,i=null;try{i=await Oz(G.connection_url)??D}catch{i=D}let n={connectionId:Z,accessToken:y.access_token,refreshToken:typeof y.refresh_token==="string"?y.refresh_token:null,scope:typeof y.scope==="string"?y.scope:null,expiresAt:h,clientId:A,clientSecret:q,tokenEndpoint:i};await new s5(X.db,X.vault).upsert(n)}}catch(y){console.error("[oauth-proxy] failed to persist downstream token:",y)}return new Response(g,{status:x.status,statusText:x.statusText,headers:C})}return new Response(x.body,{status:x.status,statusText:x.statusText,headers:C})},EB8=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&&(!pN(Y)||!await nN(Z)))return $.json({error:"forbidden"},403);let W=G?oV0:Y;if(G)gL({action:"watch_all_orgs",actorUserId:Q,actorOrgId:Y,targetOrgId:"all"});let K=crypto.randomUUID();return TO($,async(H)=>{if(await H.writeSSE({event:"connected",data:JSON.stringify({listenerId:K,organizationId:Y,typePatterns:J,connectedAt:new Date().toISOString()})}),!g6.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(()=>{g6.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),g6.remove(W,K)})},30000);await new Promise((N)=>{H.onAbort(()=>{clearInterval(U),g6.remove(W,K),N()})})})},HQ5,NQ5,BQ5=()=>UQ5(B4),DQ5=()=>FQ5(B4);var zB8=L(()=>{r$();r1();Qa1();BX8();wX8();qX8();G50();nG1();CX8();e40();j9();yd();R8();W8();Zb0();yX8();vH1();OK();PN();Rw1();D3();v6();Q6();Cw1();NJ8();VJ8();fw1();nJ8();iw1();ew1();$j1();BK();M90();Zj1();BG8();Yb0();pF8();rF8();aF8();QU8();NU8();Jj1();DU8();rk0();$50();PU8();$S0();fE1();AU8();bE1();qU8();_U8();xU8();fU8();gU8();uU8();cU8();oU8();yP1();Fj1();eU8();xE1();SE1();mZ0();LN8();RP1();BJ();AU0();z$0();O31();L$0();w$0();gH1();ON8();jN8();sw1();qN8();cI0();MN8();jr();la();yL();a5();pO1();CN8();uN8();XG();jg();dN8();mK0();sP1();zW();Yj1();fL();QK1();mK0();Hk0();fa();jr0();pN8();Bj();tN8();vt();Rw1();Ap();lp();$k0();DB8=_(NH(),1);HQ5=new WQ5,NQ5=new Set([nG,EW,IB,kB,xO,bz])});var qB8={};O6(qB8,{resolveClientDir:()=>AQ5,resolveAssetPathWithTraversalCheck:()=>RB8,isPathWithinDirectory:()=>TB8,createAssetHandler:()=>TQ5});import{resolve as kZ0,dirname as OQ5,join as wQ5,extname as jQ5,basename as EQ5,sep as AB8}from"path";function PQ5($,Z){if($===Z||EQ5($)==="index.html")return{"Cache-Control":"no-cache"};if($.includes(`${AB8}assets${AB8}`))return{"Cache-Control":"public, max-age=31536000, immutable"};return{}}function TB8($,Z){let Q=kZ0(Z),Y=kZ0($);return Y===Q||Y.startsWith(Q+"/")}function RB8({requestPath:$,clientDir:Z}){let Q=$.startsWith("/")?$.slice(1):$,Y=kZ0(Z,Q);if(!TB8(Y,Z))return null;return Y}function AQ5($,Z="../client"){let Q=new URL($),Y=OQ5(Q.pathname);return kZ0(Y,Z)}function TQ5($={}){let{env:Z="production",clientDir:Q=zQ5,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=RB8({requestPath:W,clientDir:Q});if(!K)return null;let H=wQ5(K,"index.html"),F=kZ0(Q,"index.html"),U=J.headers.get("accept"),B=U?.includes("text/html")||U?.includes("*/*")&&["",".html"].includes(jQ5(K))?[H,F]:[];for(let D of[K,...B])try{let O=Bun.file(D);if(await O.exists())return new Response(O,{headers:PQ5(D,F)})}catch{}if(W.includes("/assets/"))return new Response("Not Found",{status:404,headers:{"Cache-Control":"no-store"}});return null}}var zQ5="./dist/client";var MB8=()=>{};var VB8={};O6(VB8,{tryUpgradePreviewWs:()=>SQ5,tryHandlePreviewHttp:()=>kQ5,previewWebSocketHandler:()=>CQ5,parsePreviewBaseDomain:()=>IQ5,isPreviewWsData:()=>ix0,extractHandleFromHost:()=>Zz1});function MQ5($){if($.method!=="GET")return!1;return($.headers.get("accept")??"").includes("text/html")}function VQ5(){return new Response(qQ5,{status:503,headers:{"content-type":"text/html; charset=utf-8","cache-control":"no-store","retry-after":"1","access-control-allow-origin":"*"}})}function IQ5($){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 Zz1($,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 kQ5($,Z){let Q=Zz1($.headers.get("host"),Z.baseDomain);if(!Q)return null;let Y=await Z.getRunner();if(!Y)return CZ0(503,"preview proxy not configured");let X=await Y.proxyPreviewRequest(Q,$);if(X.headers.get(Si)&&MQ5($))return VQ5();return X.headers.delete(Si),X}function CZ0($,Z){return new Response(JSON.stringify({error:Z}),{status:$,headers:{"content-type":"application/json","access-control-allow-origin":"*"}})}function ix0($){return typeof $==="object"&&$!==null&&$.kind==="preview"}async function SQ5($,Z,Q){if(($.headers.get("upgrade")??"").toLowerCase()!=="websocket")return null;let Y=Zz1($.headers.get("host"),Q.baseDomain);if(!Y)return null;let X=await Q.getRunner();if(!X)return CZ0(503,"preview proxy not configured");let J=await X.resolvePreviewUpstreamUrl(Y);if(!J)return CZ0(404,"sandbox not found");let G=new URL($.url);if(G.pathname.startsWith("/_sandbox"))return CZ0(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 CZ0(426,"upgrade failed");return}function SZ0($,Z,Q,Y){if(Z.closed)return;Z.closed=!0;try{$.close(Q,Y)}catch{}try{Z.upstream?.close()}catch{}}var RQ5=256,qQ5='<!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>',CQ5;var IB8=L(()=>{g80();CQ5={open($){let Z=$.data;if(!ix0(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)}`),SZ0($,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)=>{SZ0($,Z,Y.code||1000,Y.reason||"")}),Q.addEventListener("error",()=>{SZ0($,Z,1011,"upstream error")})},message($,Z){let Q=$.data;if(!ix0(Q))return;let Y=Q.upstream;if(Y&&Y.readyState===WebSocket.OPEN){Y.send(Z);return}if(Q.pending.length>=RQ5){SZ0($,Q,1011,"preview ws backlog overflow");return}Q.pending.push(Z)},close($){let Z=$.data;if(!ix0(Z))return;SZ0($,Z,1000,"")}}});r$();var Dz1="13";function Lz1($){return{name:"decocms",systemDatabaseUrl:$.systemDatabaseUrl,systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:$.poolSize,runAdminServer:!1,executorID:$.executorID,applicationVersion:Dz1,...$.listenQueues!==void 0?{listenQueues:$.listenQueues}:{}}}r$();import pB8 from"pg";var Oz1=8314027461559302n,nB8=600000,tB8=500;async function wz1($,Z){let{databaseUrl:Q,lockTimeoutMs:Y=nB8}=$,X=$.log??((K)=>console.log(K)),J=new pB8.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",[Oz1.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 F$(tB8)}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)",[Oz1.toString()])}catch{}await J.end().catch(()=>{})}}r1();Qf0();v6();function pD8(){let $=(process.env.BUN_OPTIONS??"").split(/\s+/).filter(Boolean);return[...process.argv.slice(1),...$]}function Ef0($,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 ez1(){let $=pD8();if($.includes("--cpu-prof")){console.log(JSON.stringify({msg:"cpu-profiling-active",dir:Ef0($,"--cpu-prof-dir")??process.cwd(),name:Ef0($,"--cpu-prof-name"),markdown:$.includes("--cpu-prof-md"),intervalUs:Number(Ef0($,"--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.'}))}Af0();var pZ0;function K21(){if(process.env.HEAP_WATCH!=="1")return()=>{};let $=Number(process.env.HEAP_WATCH_INTERVAL_MS??60000),Z=async()=>{let Q=gz();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(()=>{}),pZ0=setInterval(()=>void Z().catch(()=>{}),$),pZ0.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(pZ0)clearInterval(pZ0)}}import*as oD8 from"bun:jsc";var{startSamplingProfiler:sD8,samplingProfilerStackTraces:rD8}=oD8;function H21(){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{sD8()}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=rD8()?.traces??[]}catch{}if(G>$&&W.length>0){let K=new Map;for(let F of W){let U=F.frames.find((D)=>D.sourceURL&&!/Unknown Executable/.test(D.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 F21(){ez1();let $=[K21(),W21(),H21()];return()=>{for(let Z of $)Z()}}import{existsSync as hQ5}from"fs";var wW=L0();sz1();var{DBOS:_Z0,DBOSClient:_Q5}=await import("@dbos-inc/dbos-sdk");function Wz1($,Z){if(!Z)return $;let Q=new URL($);if(!Q.searchParams.has("sslmode"))Q.searchParams.set("sslmode","verify-full");return Q.toString()}var vQ5=[nG,EW,IB,kB,xO,bz,xz],bQ5=wW.dispatchRole==="worker"?vQ5:wW.dispatchRole==="api"?[]:void 0;_Z0.setConfig(Lz1({systemDatabaseUrl:Wz1(wW.databaseUrl,wW.databasePgSsl),poolSize:wW.dbosPoolSize,executorID:wW.podName,listenQueues:bQ5}));var{createApp:xQ5}=await Promise.resolve().then(() => (zB8(),PB8)),{isServerPath:fQ5}=await Promise.resolve().then(() => (mZ0(),vz1)),{createAssetHandler:yQ5,resolveClientDir:vB8}=await Promise.resolve().then(() => (MB8(),qB8)),gQ5=wW.port,kB8=vB8(import.meta.url,"../client"),bB8=hQ5(kB8)?kB8:vB8(import.meta.url,"../dist/client"),uQ5=yQ5({clientDir:bB8,isServerPath:fQ5}),lQ5={"X-Frame-Options":"DENY","Content-Security-Policy":"frame-ancestors 'none'"};function cQ5($){let Z=new Headers($.headers);for(let[Q,Y]of Object.entries(lQ5))Z.set(Q,Y);return new Response($.body,{status:$.status,statusText:$.statusText,headers:Z})}var{parsePreviewBaseDomain:mQ5,tryHandlePreviewHttp:dQ5,tryUpgradePreviewWs:iQ5,previewWebSocketHandler:Qz1,isPreviewWsData:Yz1}=await Promise.resolve().then(() => (IB8(),VB8)),{getOrInitSharedRunner:xB8}=await Promise.resolve().then(() => (OX(),AS$)),fB8=mQ5(process.env.STUDIO_SANDBOX_PREVIEW_URL_PATTERN),SB8={baseDomain:fB8??"",getRunner:xB8};if(process.env.STUDIO_SANDBOX_TENANT_POOLS?.trim())xB8().catch(($)=>{console.warn("[lifecycle] eager sandbox provider init for tenant pools failed:",$ instanceof Error?$.message:String($))});var px0=await xQ5({clientDir:bB8}),Xz1=process.env.DBOS_CONDUCTOR_KEY?.trim(),CB8=process.env.DBOS_CONDUCTOR_URL?.trim();await wz1({databaseUrl:Wz1(wW.databaseUrl,wW.databasePgSsl)},()=>_Z0.launch({...Xz1?{conductorKey:Xz1}:{},...Xz1&&CB8?{conductorURL:CB8}:{}}));console.log(`[dbos] application version: ${_Z0.applicationVersion}`);var Jz1=5,Gz1=0;await D8(async()=>{Gz1++;try{return await px0.initDbos()}catch($){let Z=Gz1>=Jz1?"giving up":"retrying";throw console.warn(`[dbos] initDbos attempt ${Gz1}/${Jz1} failed, ${Z}`,$),$}},{maxAttempts:Jz1,minTimeout:1000,maxTimeout:1e4,jitter:0.5});var pQ5=Bun.serve({idleTimeout:0,port:gQ5,hostname:"0.0.0.0",fetch:async($,Z)=>{if(fB8){let Y=await iQ5($,Z,SB8);if(Y===void 0)return;if(Y)return Y;let X=await dQ5($,SB8);if(X)return X}let Q=await uQ5($);if(Q)return cQ5(Q);return px0.fetch($,{server:Z})},websocket:{open($){if(Yz1($.data))Qz1.open($)},message($,Z){if(Yz1($.data))Qz1.message($,Z)},close($){if(Yz1($.data))Qz1.close($)}},development:!1}),nQ5=F21();if(wW.localMode)Promise.resolve().then(() => (Ag(),xI0)).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(() => (Ag(),xI0));Z()}catch{}});var _B8=!1;async function tQ5($){let Z;try{Z=await _Q5.create({systemDatabaseUrl:Wz1(wW.databaseUrl,wW.databasePgSsl),systemDatabaseSchemaName:"dbos"});let Q=await Z.listWorkflows({status:"PENDING",queueName:EW,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:EW}),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 nx0($){if(_B8)return;_B8=!0,console.log(`
4335
4335
  [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{nQ5(),px0.markShuttingDown();let J=jz1(wW.dispatchRole,Q,process.env.SHUTDOWN_DRAIN_MS);await F$(J),await pQ5.stop(!0);let G=_Z0.executorID;await _Z0.shutdown(),await tQ5(G),await px0.shutdown()}catch(J){console.error("[shutdown] Error during shutdown:",J),X=1}clearTimeout(Y),process.exit(X)}process.on("SIGTERM",()=>nx0("SIGTERM"));process.on("SIGINT",()=>nx0("SIGINT"));process.on("SIGHUP",()=>nx0("SIGHUP"));process.on("unhandledRejection",($)=>{console.error("[process] Unhandled rejection:",$)});process.on("uncaughtException",($)=>{console.error("[process] Uncaught exception:",$),nx0("uncaughtException")});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "decocms",
3
- "version": "4.500.1",
3
+ "version": "4.500.2",
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,_ as u}from"./index-C2j6GKW9.js";import{C as f}from"./index-CaRHAAtN.js";import{a as x}from"./thread-route-D6XzI9r7.js";import{u as g}from"./use-task-metadata-DgjDbAXI.js";import{AppViewContent as h}from"./project-app-view-Ck5FRtUs.js";import"./use-mobile-HT4128sM.js";import"./thread-button-Qtn3TibT.js";import"./agent-icon-If8hSRmw.js";import"./AlertCircle-BxvPb2ao.js";import"./Tool01-BZb-DMpJ.js";import"./ArrowUp-gYvBgsvU.js";import"./ArrowLeft-Bf9KgkxW.js";import"./LinkBroken01-wNBs-Zx0.js";import"./ShoppingBag01-DO4re_7a.js";import"./ZoomOut-CLyO4H5k.js";import"./Building02-DRjaqBiC.js";import"./CheckCircle-BkmLMZuX.js";import"./ChevronUp-D3SVSsDX.js";import"./ChevronSelectorVertical-z-lNsxRS.js";import"./UserSquare-BwyhtJD3.js";import"./Copy01-BQJ05ZRk.js";import"./CreditCard01-CWewoMfz.js";import"./DotsVertical-GUU5bDEx.js";import"./Image01-Di7GijaS.js";import"./Globe04-D1j2EnT6.js";import"./SwitchHorizontal01-BaclOje4.js";import"./Key01-DxZh4RS9.js";import"./Link01-ChC1RPem.js";import"./Monitor01-cMYo2KVy.js";import"./Sun-Pe0tJTeM.js";import"./Play-B0un_kIg.js";import"./Plus-BdYjAB2U.js";import"./SearchMd-COTu5fMc.js";import"./Trash01-c56q-lrS.js";import"./Upload01-Cp8lvoBS.js";import"./User01-BdQVEBpk.js";import"./Users01-CGD8XkzR.js";import"./XClose-DkK6PiiA.js";import"./use-chat-layout-state-B26tNhCJ.js";import"./use-file-configs-B5izc2Rd.js";import"./use-organization-settings-Bz6BeBAj.js";import"./schema-DDRR7qV7.js";import"./task-board-C57y0iD-.js";import"./site-slug-DebpOoQq.js";import"./repository-binding-Bz8gaDWp.js";import"./use-mcp-client-eXA2w8ZE.js";import"./auth-CFhHut-U.js";import"./use-panel-navigate-EBCZsVQ_.js";import"./use-project-scope-Bb0vPnr8.js";import"./thread-intent-4Oc5TOnJ.js";import"./delay-CnY5UFtP.js";import"./backoff-CrEUbyZT.js";import"./watch-sse-pool-YrM1VSdM.js";import"./slugify-CEUa2lfQ.js";import"./sheet-DOAMDmx1.js";import"./tooltip-suYIqFBg.js";import"./index-DBa0gwyi.js";import"./toolbar-icon-button-BfQeMxca.js";import"./shell-layout-fIZDbVTW.js";import"./avatar-BuYUCU8g.js";import"./use-clock-tick-C_wm8Myy.js";import"./command-CS7Iytaa.js";import"./index-ByZer9OV.js";import"./integration-icon-BEDt5ixx.js";import"./project-icon-CgKRb1hz.js";import"./new-project-dialog-DYby_l6E.js";import"./label-4-MnDGKW.js";import"./repository-import-picker-OXXLG8_F.js";import"./use-navigate-to-agent-B7zN39On.js";import"./repository-picker-CUJZTLEq.js";import"./useInfiniteQuery-DNPgGGZO.js";import"./infiniteQueryObserver-C6N8XSEQ.js";import"./collection-search-y9E4m6mw.js";import"./use-debounced-value-ukFTa1_g.js";import"./required-auth-layout-Btbks3py.js";import"./autosend-fqRoYj3y.js";import"./use-org-sso-DS8GzAQg.js";import"./resizable-Db2VNPZt.js";import"./icon-button-CQ2v9QBu.js";import"./tool-namespace-BjEWyMab.js";import"./use-mcp-tools-B4tf0I9F.js";import"./content-blocks-o63cs2vh.js";import"./mcp-app-renderer-CiP1G5M8.js";import"./types-D15JKPMl.js";import"./chat-context-Nnpd61_s.js";import"./use-decopilot-events-CbkNqFn8.js";import"./use-ai-providers-C3Kx53JX.js";import"./use-chat-navigation-Bmt_svKF.js";import"./location-BjlyegC2.js";import"./task-route-Cjd8CAnK.js";import"./core.esm-z-XuEZtM.js";import"./site-url-en5df9c-.js";import"./use-connect-companion-F5oUhtvG.js";import"./companions-core-DzyeM-yJ.js";import"./metadata-D72DunRR.js";import"./github-repo-scope-ByTYKy_L.js";import"./form-WKBhslpB.js";import"./provision-repo-scoped-github-connection-lckxpDHD.js";import"./useQueries-BhA2JM5X.js";import"./authenticate-and-persist-oauth-CXGLXx3K.js";import"./mcp-oauth-Dr4hlCrA.js";import"./mcp-oauth-BTUPlYVf.js";import"./track-EcNm8jZX.js";import"./extract-connection-data-IvYRZ7XN.js";import"./connection-BkSfvJVU.js";import"./url-slug-BRCwD3Fe.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,b2 as b,u as g}from"./index-C2j6GKW9.js";import{C as j}from"./index-CaRHAAtN.js";import{F as v,H as S}from"./file-share-button-0-Y1imyL.js";import{u as k,b as y,e as _}from"./use-org-fs-B3DmwHAZ.js";import{S as w}from"./settings-tab-tVRweOC9.js";import{b as M}from"./thread-route-D6XzI9r7.js";import"./use-mobile-HT4128sM.js";import"./thread-button-Qtn3TibT.js";import"./agent-icon-If8hSRmw.js";import"./AlertCircle-BxvPb2ao.js";import"./Tool01-BZb-DMpJ.js";import"./ArrowUp-gYvBgsvU.js";import"./ArrowLeft-Bf9KgkxW.js";import"./LinkBroken01-wNBs-Zx0.js";import"./ShoppingBag01-DO4re_7a.js";import"./ZoomOut-CLyO4H5k.js";import"./Building02-DRjaqBiC.js";import"./CheckCircle-BkmLMZuX.js";import"./ChevronUp-D3SVSsDX.js";import"./ChevronSelectorVertical-z-lNsxRS.js";import"./UserSquare-BwyhtJD3.js";import"./Copy01-BQJ05ZRk.js";import"./CreditCard01-CWewoMfz.js";import"./DotsVertical-GUU5bDEx.js";import"./Image01-Di7GijaS.js";import"./Globe04-D1j2EnT6.js";import"./SwitchHorizontal01-BaclOje4.js";import"./Key01-DxZh4RS9.js";import"./Link01-ChC1RPem.js";import"./Monitor01-cMYo2KVy.js";import"./Sun-Pe0tJTeM.js";import"./Play-B0un_kIg.js";import"./Plus-BdYjAB2U.js";import"./SearchMd-COTu5fMc.js";import"./Trash01-c56q-lrS.js";import"./Upload01-Cp8lvoBS.js";import"./User01-BdQVEBpk.js";import"./Users01-CGD8XkzR.js";import"./XClose-DkK6PiiA.js";import"./use-chat-layout-state-B26tNhCJ.js";import"./use-file-configs-B5izc2Rd.js";import"./use-organization-settings-Bz6BeBAj.js";import"./schema-DDRR7qV7.js";import"./task-board-C57y0iD-.js";import"./site-slug-DebpOoQq.js";import"./repository-binding-Bz8gaDWp.js";import"./use-mcp-client-eXA2w8ZE.js";import"./auth-CFhHut-U.js";import"./use-panel-navigate-EBCZsVQ_.js";import"./use-project-scope-Bb0vPnr8.js";import"./thread-intent-4Oc5TOnJ.js";import"./delay-CnY5UFtP.js";import"./backoff-CrEUbyZT.js";import"./watch-sse-pool-YrM1VSdM.js";import"./slugify-CEUa2lfQ.js";import"./sheet-DOAMDmx1.js";import"./tooltip-suYIqFBg.js";import"./index-DBa0gwyi.js";import"./toolbar-icon-button-BfQeMxca.js";import"./shell-layout-fIZDbVTW.js";import"./avatar-BuYUCU8g.js";import"./use-clock-tick-C_wm8Myy.js";import"./command-CS7Iytaa.js";import"./index-ByZer9OV.js";import"./integration-icon-BEDt5ixx.js";import"./project-icon-CgKRb1hz.js";import"./new-project-dialog-DYby_l6E.js";import"./label-4-MnDGKW.js";import"./repository-import-picker-OXXLG8_F.js";import"./use-navigate-to-agent-B7zN39On.js";import"./repository-picker-CUJZTLEq.js";import"./useInfiniteQuery-DNPgGGZO.js";import"./infiniteQueryObserver-C6N8XSEQ.js";import"./collection-search-y9E4m6mw.js";import"./use-debounced-value-ukFTa1_g.js";import"./required-auth-layout-Btbks3py.js";import"./autosend-fqRoYj3y.js";import"./use-org-sso-DS8GzAQg.js";import"./resizable-Db2VNPZt.js";import"./icon-button-CQ2v9QBu.js";import"./popover-gs_i-X_H.js";import"./extract-connection-data-IvYRZ7XN.js";import"./metadata-D72DunRR.js";import"./connection-BkSfvJVU.js";import"./url-slug-BRCwD3Fe.js";import"./chat-context-Nnpd61_s.js";import"./use-decopilot-events-CbkNqFn8.js";import"./use-ai-providers-C3Kx53JX.js";import"./use-chat-navigation-Bmt_svKF.js";import"./location-BjlyegC2.js";import"./build-improve-prompt-doc-bdRLsgg1.js";import"./empty-state-IlGYVTi4.js";import"./use-date-fns-locale-CsYh8bS5.js";import"./differenceInSeconds-C3x8sHUj.js";import"./mcp-oauth-Dr4hlCrA.js";import"./mcp-oauth-BTUPlYVf.js";import"./alert-dialog-DnRanV2g.js";import"./textarea-CPiGh4Bi.js";import"./use-connection-Dzl69g_7.js";import"./use-debounced-autosave-DErH3S0W.js";import"./add-connection-dialog-BwEgsoXe.js";import"./connection-card-C_MH7Wpz.js";import"./connection-slug-CITJ0kGN.js";import"./drawer-zHclspIB.js";import"./form-WKBhslpB.js";import"./select-DbQGrGQ8.js";import"./index-BdQq_4o_.js";import"./connection-form-helpers-DQVYQ8po.js";import"./authenticate-and-persist-oauth-CXGLXx3K.js";import"./collection-tabs-4g4B9cjE.js";import"./badge-GwFEODr4.js";import"./use-infinite-scroll-C28hKaW1.js";import"./useSuspenseInfiniteQuery-CD5WtYqv.js";import"./file-type-icon-BR9FUHTR.js";import"./checkbox-BWTda68M.js";import"./search-input-vG9YkvpS.js";import"./use-mcp-auth-status-CPXPh7cI.js";import"./types-D15JKPMl.js";import"./use-mcp-tools-B4tf0I9F.js";import"./use-mcp-prompts-DmU6o9Xc.js";import"./utils-CVEq3hMx.js";import"./switch-DjuAzQl7.js";import"./scroll-area-PFGh7bgI.js";import"./optimistic-project-sidebar-views-BMdWVdaT.js";import"./virtual-mcp-DYpYm5Qi.js";import"./sandbox-url-D3mC8qhT.js";import"./secret-picker-C5tfGGz3.js";import"./use-secrets-kYdI8lvW.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 C(){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 Zo(){const i=c.c(1);let t;return i[0]===Symbol.for("react.memo_cache_sentinel")?(t=e.jsx(j.Content,{children:e.jsx(C,{})}),i[0]=t):t=i[0],t}export{Zo as default};
@@ -1 +0,0 @@
1
- import{c as s,j as e}from"./index-C2j6GKW9.js";import{C as a}from"./index-CaRHAAtN.js";import{L as n}from"./library-tab-CkVkDVba.js";import{u as c}from"./use-ensure-project-folder-AaBo8kSZ.js";import{u}from"./use-project-scope-Bb0vPnr8.js";import{p as l}from"./location-BjlyegC2.js";import"./use-mobile-HT4128sM.js";import"./thread-button-Qtn3TibT.js";import"./agent-icon-If8hSRmw.js";import"./AlertCircle-BxvPb2ao.js";import"./Tool01-BZb-DMpJ.js";import"./ArrowUp-gYvBgsvU.js";import"./ArrowLeft-Bf9KgkxW.js";import"./LinkBroken01-wNBs-Zx0.js";import"./ShoppingBag01-DO4re_7a.js";import"./ZoomOut-CLyO4H5k.js";import"./Building02-DRjaqBiC.js";import"./CheckCircle-BkmLMZuX.js";import"./ChevronUp-D3SVSsDX.js";import"./ChevronSelectorVertical-z-lNsxRS.js";import"./UserSquare-BwyhtJD3.js";import"./Copy01-BQJ05ZRk.js";import"./CreditCard01-CWewoMfz.js";import"./DotsVertical-GUU5bDEx.js";import"./Image01-Di7GijaS.js";import"./Globe04-D1j2EnT6.js";import"./SwitchHorizontal01-BaclOje4.js";import"./Key01-DxZh4RS9.js";import"./Link01-ChC1RPem.js";import"./Monitor01-cMYo2KVy.js";import"./Sun-Pe0tJTeM.js";import"./Play-B0un_kIg.js";import"./Plus-BdYjAB2U.js";import"./SearchMd-COTu5fMc.js";import"./Trash01-c56q-lrS.js";import"./Upload01-Cp8lvoBS.js";import"./User01-BdQVEBpk.js";import"./Users01-CGD8XkzR.js";import"./XClose-DkK6PiiA.js";import"./use-chat-layout-state-B26tNhCJ.js";import"./use-file-configs-B5izc2Rd.js";import"./use-organization-settings-Bz6BeBAj.js";import"./schema-DDRR7qV7.js";import"./task-board-C57y0iD-.js";import"./site-slug-DebpOoQq.js";import"./repository-binding-Bz8gaDWp.js";import"./use-mcp-client-eXA2w8ZE.js";import"./auth-CFhHut-U.js";import"./thread-route-D6XzI9r7.js";import"./use-panel-navigate-EBCZsVQ_.js";import"./thread-intent-4Oc5TOnJ.js";import"./delay-CnY5UFtP.js";import"./backoff-CrEUbyZT.js";import"./watch-sse-pool-YrM1VSdM.js";import"./slugify-CEUa2lfQ.js";import"./sheet-DOAMDmx1.js";import"./tooltip-suYIqFBg.js";import"./index-DBa0gwyi.js";import"./toolbar-icon-button-BfQeMxca.js";import"./shell-layout-fIZDbVTW.js";import"./avatar-BuYUCU8g.js";import"./use-clock-tick-C_wm8Myy.js";import"./command-CS7Iytaa.js";import"./index-ByZer9OV.js";import"./integration-icon-BEDt5ixx.js";import"./project-icon-CgKRb1hz.js";import"./new-project-dialog-DYby_l6E.js";import"./label-4-MnDGKW.js";import"./repository-import-picker-OXXLG8_F.js";import"./use-navigate-to-agent-B7zN39On.js";import"./repository-picker-CUJZTLEq.js";import"./useInfiniteQuery-DNPgGGZO.js";import"./infiniteQueryObserver-C6N8XSEQ.js";import"./collection-search-y9E4m6mw.js";import"./use-debounced-value-ukFTa1_g.js";import"./required-auth-layout-Btbks3py.js";import"./autosend-fqRoYj3y.js";import"./use-org-sso-DS8GzAQg.js";import"./resizable-Db2VNPZt.js";import"./icon-button-CQ2v9QBu.js";import"./search-toggle-BfYvpGc1.js";import"./alert-dialog-DnRanV2g.js";import"./use-chat-navigation-Bmt_svKF.js";import"./use-org-fs-B3DmwHAZ.js";import"./use-org-repo-syncs-D3ekcvfg.js";import"./textarea-CPiGh4Bi.js";import"./markdown-Cnsn7OZ-.js";import"./use-copy-Cs1Dtpg9.js";import"./file-share-button-0-Y1imyL.js";import"./popover-gs_i-X_H.js";import"./preview-dialog-Qbq8z8Qs.js";import"./preview-content-C5kFNgwQ.js";import"./file-preview-CtE-K6lW.js";import"./utils-QsQ2yEbh.js";import"./editor-DTtfEyTo.js";import"./file-type-icon-BR9FUHTR.js";import"./folder-icon-Codo-krq.js";import"./empty-state-Tupt8Yp0.js";import"./view-mode-toggle-BrFGbylt.js";import"./format-time-CjIPQhCN.js";import"./differenceInSeconds-C3x8sHUj.js";import"./table-BXl79O5k.js";import"./use-members-4sfHvlaj.js";import"./use-org-auth-client-BMEgAdHb.js";function no(){const t=s.c(6),{project:o}=u();c(o);const m=o?.id??"pending";let r;t[0]!==o?(r=o?l(o):void 0,t[0]=o,t[1]=r):r=t[1];const p=o?.title??void 0;let i;return t[2]!==m||t[3]!==r||t[4]!==p?(i=e.jsx(a.Content,{children:e.jsx(n,{root:r,rootLabel:p},m)}),t[2]=m,t[3]=r,t[4]=p,t[5]=i):i=t[5],i}export{no as default};
@@ -1 +0,0 @@
1
- import{c as a,j as e,u as n}from"./index-C2j6GKW9.js";import{C as c}from"./index-CaRHAAtN.js";import{L as l}from"./preview-panel-_aZ2oLHQ.js";import{a as u}from"./use-panel-navigate-EBCZsVQ_.js";import{S as f}from"./settings-tab-tVRweOC9.js";import{b as h}from"./thread-route-D6XzI9r7.js";import"./use-mobile-HT4128sM.js";import"./thread-button-Qtn3TibT.js";import"./agent-icon-If8hSRmw.js";import"./AlertCircle-BxvPb2ao.js";import"./Tool01-BZb-DMpJ.js";import"./ArrowUp-gYvBgsvU.js";import"./ArrowLeft-Bf9KgkxW.js";import"./LinkBroken01-wNBs-Zx0.js";import"./ShoppingBag01-DO4re_7a.js";import"./ZoomOut-CLyO4H5k.js";import"./Building02-DRjaqBiC.js";import"./CheckCircle-BkmLMZuX.js";import"./ChevronUp-D3SVSsDX.js";import"./ChevronSelectorVertical-z-lNsxRS.js";import"./UserSquare-BwyhtJD3.js";import"./Copy01-BQJ05ZRk.js";import"./CreditCard01-CWewoMfz.js";import"./DotsVertical-GUU5bDEx.js";import"./Image01-Di7GijaS.js";import"./Globe04-D1j2EnT6.js";import"./SwitchHorizontal01-BaclOje4.js";import"./Key01-DxZh4RS9.js";import"./Link01-ChC1RPem.js";import"./Monitor01-cMYo2KVy.js";import"./Sun-Pe0tJTeM.js";import"./Play-B0un_kIg.js";import"./Plus-BdYjAB2U.js";import"./SearchMd-COTu5fMc.js";import"./Trash01-c56q-lrS.js";import"./Upload01-Cp8lvoBS.js";import"./User01-BdQVEBpk.js";import"./Users01-CGD8XkzR.js";import"./XClose-DkK6PiiA.js";import"./use-chat-layout-state-B26tNhCJ.js";import"./use-file-configs-B5izc2Rd.js";import"./use-organization-settings-Bz6BeBAj.js";import"./schema-DDRR7qV7.js";import"./task-board-C57y0iD-.js";import"./site-slug-DebpOoQq.js";import"./repository-binding-Bz8gaDWp.js";import"./use-mcp-client-eXA2w8ZE.js";import"./auth-CFhHut-U.js";import"./thread-intent-4Oc5TOnJ.js";import"./delay-CnY5UFtP.js";import"./backoff-CrEUbyZT.js";import"./watch-sse-pool-YrM1VSdM.js";import"./slugify-CEUa2lfQ.js";import"./sheet-DOAMDmx1.js";import"./tooltip-suYIqFBg.js";import"./index-DBa0gwyi.js";import"./toolbar-icon-button-BfQeMxca.js";import"./shell-layout-fIZDbVTW.js";import"./avatar-BuYUCU8g.js";import"./use-project-scope-Bb0vPnr8.js";import"./use-clock-tick-C_wm8Myy.js";import"./command-CS7Iytaa.js";import"./index-ByZer9OV.js";import"./integration-icon-BEDt5ixx.js";import"./project-icon-CgKRb1hz.js";import"./new-project-dialog-DYby_l6E.js";import"./label-4-MnDGKW.js";import"./repository-import-picker-OXXLG8_F.js";import"./use-navigate-to-agent-B7zN39On.js";import"./repository-picker-CUJZTLEq.js";import"./useInfiniteQuery-DNPgGGZO.js";import"./infiniteQueryObserver-C6N8XSEQ.js";import"./collection-search-y9E4m6mw.js";import"./use-debounced-value-ukFTa1_g.js";import"./required-auth-layout-Btbks3py.js";import"./autosend-fqRoYj3y.js";import"./use-org-sso-DS8GzAQg.js";import"./resizable-Db2VNPZt.js";import"./icon-button-CQ2v9QBu.js";import"./preview-content-C5kFNgwQ.js";import"./file-share-button-0-Y1imyL.js";import"./use-org-fs-B3DmwHAZ.js";import"./popover-gs_i-X_H.js";import"./file-preview-CtE-K6lW.js";import"./utils-QsQ2yEbh.js";import"./editor-DTtfEyTo.js";import"./file-type-icon-BR9FUHTR.js";import"./markdown-Cnsn7OZ-.js";import"./use-copy-Cs1Dtpg9.js";import"./location-BjlyegC2.js";import"./extract-connection-data-IvYRZ7XN.js";import"./metadata-D72DunRR.js";import"./connection-BkSfvJVU.js";import"./url-slug-BRCwD3Fe.js";import"./chat-context-Nnpd61_s.js";import"./use-decopilot-events-CbkNqFn8.js";import"./use-ai-providers-C3Kx53JX.js";import"./use-chat-navigation-Bmt_svKF.js";import"./build-improve-prompt-doc-bdRLsgg1.js";import"./empty-state-IlGYVTi4.js";import"./use-date-fns-locale-CsYh8bS5.js";import"./differenceInSeconds-C3x8sHUj.js";import"./mcp-oauth-Dr4hlCrA.js";import"./mcp-oauth-BTUPlYVf.js";import"./alert-dialog-DnRanV2g.js";import"./textarea-CPiGh4Bi.js";import"./use-connection-Dzl69g_7.js";import"./use-debounced-autosave-DErH3S0W.js";import"./add-connection-dialog-BwEgsoXe.js";import"./connection-card-C_MH7Wpz.js";import"./connection-slug-CITJ0kGN.js";import"./drawer-zHclspIB.js";import"./form-WKBhslpB.js";import"./select-DbQGrGQ8.js";import"./index-BdQq_4o_.js";import"./connection-form-helpers-DQVYQ8po.js";import"./authenticate-and-persist-oauth-CXGLXx3K.js";import"./collection-tabs-4g4B9cjE.js";import"./badge-GwFEODr4.js";import"./use-infinite-scroll-C28hKaW1.js";import"./useSuspenseInfiniteQuery-CD5WtYqv.js";import"./checkbox-BWTda68M.js";import"./search-input-vG9YkvpS.js";import"./use-mcp-auth-status-CPXPh7cI.js";import"./types-D15JKPMl.js";import"./use-mcp-tools-B4tf0I9F.js";import"./use-mcp-prompts-DmU6o9Xc.js";import"./utils-CVEq3hMx.js";import"./switch-DjuAzQl7.js";import"./scroll-area-PFGh7bgI.js";import"./optimistic-project-sidebar-views-BMdWVdaT.js";import"./virtual-mcp-DYpYm5Qi.js";import"./sandbox-url-D3mC8qhT.js";import"./secret-picker-C5tfGGz3.js";import"./use-secrets-kYdI8lvW.js";import"./omit-sandbox-map-jj4lCB2U.js";import"./serial-task-queue-CGOeQgpr.js";function b(r){const t=a.c(5),{path:m}=r,{closePanel:p}=u();let o;t[0]!==p?(o=()=>p(),t[0]=p,t[1]=o):o=t[1];const i=o;let s;return t[2]!==i||t[3]!==m?(s=e.jsx(l,{previewPath:m,onClose:i,showSeeInLibrary:!0}),t[2]=i,t[3]=m,t[4]=s):s=t[4],s}function x(){const r=a.c(4);let t;r[0]===Symbol.for("react.memo_cache_sentinel")?(t={strict:!1},r[0]=t):t=r[0];const m=n(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?e.jsx(b,{path:o},o):e.jsx(f,{virtualMcpId:p}),r[1]=o,r[2]=p,r[3]=i):i=r[3],i}function Kr(){const r=a.c(1);let t;return r[0]===Symbol.for("react.memo_cache_sentinel")?(t=e.jsx(c.Content,{children:e.jsx(x,{})}),r[0]=t):t=r[0],t}export{Kr as default};