decocms 4.415.5 → 4.416.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (349) hide show
  1. package/dist/client/assets/{AlertCircle-CIFSd5U6.js → AlertCircle-DfDXIJNE.js} +1 -1
  2. package/dist/client/assets/{AreaChart-n2dZBP5X.js → AreaChart-BgPWQpcd.js} +1 -1
  3. package/dist/client/assets/{ArrowLeft-Cs3E2BgS.js → ArrowLeft-C87oT9bb.js} +1 -1
  4. package/dist/client/assets/{ArrowRight-DdzTB6qI.js → ArrowRight-BvzSOKV-.js} +1 -1
  5. package/dist/client/assets/{ArrowUp-D2UY3OMh.js → ArrowUp-DoSUZJyR.js} +1 -1
  6. package/dist/client/assets/{CartesianChart-V3ArQ0Ow.js → CartesianChart-4yYGzpv9.js} +1 -1
  7. package/dist/client/assets/{Check-CaNT0o8-.js → Check-DqFQZPPx.js} +1 -1
  8. package/dist/client/assets/{CheckCircle-BcLFM9-7.js → CheckCircle-Ba4CdAec.js} +1 -1
  9. package/dist/client/assets/{ChevronUp-BU7d4Get.js → ChevronUp-Bb2P7d_u.js} +1 -1
  10. package/dist/client/assets/{Copy01-BUTI0qm9.js → Copy01-DC6fDbu_.js} +1 -1
  11. package/dist/client/assets/{CreditCard01-JGaESeVs.js → CreditCard01-BpDi-pAH.js} +1 -1
  12. package/dist/client/assets/{DotsVertical-CIYGxTTU.js → DotsVertical-BRXrkvoI.js} +1 -1
  13. package/dist/client/assets/{ErrorBarContext--AuQGMxS.js → ErrorBarContext-BcJHHTY6.js} +1 -1
  14. package/dist/client/assets/{Image01-BZEauj2T.js → Image01-xK9B02j4.js} +1 -1
  15. package/dist/client/assets/{Key01-RaCvEF1t.js → Key01-BMD7PlDv.js} +1 -1
  16. package/dist/client/assets/{Line-Be2Fy-pZ.js → Line-DLAB1WK7.js} +1 -1
  17. package/dist/client/assets/{Link01-B4kFCKUO.js → Link01-B2dijWQ8.js} +1 -1
  18. package/dist/client/assets/{LinkExternal01-Cn0PsKoO.js → LinkExternal01-BIv73xWj.js} +1 -1
  19. package/dist/client/assets/{Monitor01-DDhoI_iK.js → Monitor01-CteeJ3AP.js} +1 -1
  20. package/dist/client/assets/{Palette-BUkGC_ZN.js → Palette-DazKvliy.js} +1 -1
  21. package/dist/client/assets/{Plus-0VzOcDpy.js → Plus-BqIrW_0X.js} +1 -1
  22. package/dist/client/assets/{SearchMd-DvVcOTQO.js → SearchMd-8HqZztRS.js} +1 -1
  23. package/dist/client/assets/{Sector-9tybsTj9.js → Sector-BS2UILzu.js} +1 -1
  24. package/dist/client/assets/{ShoppingBag01-DkKlB-7l.js → ShoppingBag01-cKLKSB1U.js} +1 -1
  25. package/dist/client/assets/{Sun-X5oRKWho.js → Sun-oIa5DjYK.js} +1 -1
  26. package/dist/client/assets/{Tool01-BThW1knZ.js → Tool01-D7425-Nl.js} +1 -1
  27. package/dist/client/assets/{Trash01-CWZehatA.js → Trash01-DdCS3-gK.js} +1 -1
  28. package/dist/client/assets/{Upload01-DBJMMF89.js → Upload01-XcpqyWFI.js} +1 -1
  29. package/dist/client/assets/{User01-CkC9PpwU.js → User01-BlrmBkPD.js} +1 -1
  30. package/dist/client/assets/{UserSquare-D_CN0irU.js → UserSquare-DZ0Nd8OP.js} +1 -1
  31. package/dist/client/assets/{Users01-Bly3LhS2.js → Users01-DVV-UvXc.js} +1 -1
  32. package/dist/client/assets/{X-B2uln9s5.js → X-CKdU-8DQ.js} +1 -1
  33. package/dist/client/assets/{XAxis-M6tZ2obd.js → XAxis-CF--zBoa.js} +1 -1
  34. package/dist/client/assets/{XClose-BXY1fsWn.js → XClose-CxtI9WrH.js} +1 -1
  35. package/dist/client/assets/{ZoomOut-T_sjF8JP.js → ZoomOut-D_Hg-gVD.js} +1 -1
  36. package/dist/client/assets/{access-gate-CA8I0iHR.js → access-gate-CBKQRokW.js} +1 -1
  37. package/dist/client/assets/{add-connection-dialog-kGctlCUa.js → add-connection-dialog-C88ffByf.js} +1 -1
  38. package/dist/client/assets/{agent-analytics-BexuCA7I.js → agent-analytics-BZ3qM0OH.js} +1 -1
  39. package/dist/client/assets/agent-app-BSIG0lMp.js +1 -0
  40. package/dist/client/assets/{agent-assets-5R68kfP3.js → agent-assets-CDrklFV8.js} +1 -1
  41. package/dist/client/assets/{agent-automation-vuVO0lMZ.js → agent-automation-BLNMheej.js} +1 -1
  42. package/dist/client/assets/{agent-automations-BdmtLK0F.js → agent-automations-CjPZ8aIp.js} +1 -1
  43. package/dist/client/assets/{agent-connect-sources-nPGJrjJB.js → agent-connect-sources-DBfntuQn.js} +1 -1
  44. package/dist/client/assets/agent-deck-B5iDEBXs.js +1 -0
  45. package/dist/client/assets/{agent-e2e-EFIGYD5n.js → agent-e2e-DvA-l7UB.js} +1 -1
  46. package/dist/client/assets/{agent-experiments-DskaK8J-.js → agent-experiments-BJRDpbYu.js} +1 -1
  47. package/dist/client/assets/{agent-file-Cu8RBins.js → agent-file-PrKTH4j9.js} +1 -1
  48. package/dist/client/assets/{agent-git-Qk00_Ilv.js → agent-git-CAsxQN8K.js} +1 -1
  49. package/dist/client/assets/{agent-hosting-DpQzkSmA.js → agent-hosting-CaAnOeGS.js} +1 -1
  50. package/dist/client/assets/{agent-icon-B0fEYlzS.js → agent-icon-DhGOYwOJ.js} +1 -1
  51. package/dist/client/assets/agent-library-BZuDJ5TV.js +1 -0
  52. package/dist/client/assets/agent-library-file-Drv3jL4M.js +1 -0
  53. package/dist/client/assets/{agent-monitor-7fRsRp5r.js → agent-monitor-7LA2dwqF.js} +1 -1
  54. package/dist/client/assets/{agent-overview-CI4IBzdY.js → agent-overview-D-KFacd3.js} +1 -1
  55. package/dist/client/assets/agent-settings-Cq6PH7Ql.js +1 -0
  56. package/dist/client/assets/{agent-site-editor-D5zeaP6i.js → agent-site-editor-BdCI1B_m.js} +1 -1
  57. package/dist/client/assets/agent-site-editor-code-qf1pT1P7.js +2 -0
  58. package/dist/client/assets/agent-site-editor-content-9hGmYNEN.js +9 -0
  59. package/dist/client/assets/{agent-site-editor-preview-zrEPcj_q.js → agent-site-editor-preview-BToOOUvp.js} +3 -3
  60. package/dist/client/assets/agent-view-Cn1lUzEC.js +1 -0
  61. package/dist/client/assets/{agent-view-guard-CydgwF8V.js → agent-view-guard-CvjtSohu.js} +1 -1
  62. package/dist/client/assets/{agents-list-Dst0vLYD.js → agents-list-CP1671aR.js} +1 -1
  63. package/dist/client/assets/{ai-providers-Dyx-ekUR.js → ai-providers-BusslKCp.js} +1 -1
  64. package/dist/client/assets/{alert-Cs3h8VEi.js → alert-CcxXpsX8.js} +1 -1
  65. package/dist/client/assets/{alert-dialog-DJp_Ityl.js → alert-dialog-X05Zwuy_.js} +1 -1
  66. package/dist/client/assets/{analytics-sections-DCH9uTvB.js → analytics-sections-qFf2dapG.js} +1 -1
  67. package/dist/client/assets/{api-keys-1sQjJhuB.js → api-keys-Ce54qwJS.js} +1 -1
  68. package/dist/client/assets/api-keys-KnTvM-Py.js +1 -0
  69. package/dist/client/assets/app-editor-N1OzjTC2.js +1 -0
  70. package/dist/client/assets/{asset-utils-CH-E2ZK-.js → asset-utils-DJs9TtwZ.js} +1 -1
  71. package/dist/client/assets/{auth-catchall-DMXzCu4C.js → auth-catchall-CmaBKl6K.js} +1 -1
  72. package/dist/client/assets/{auth-entry-DUD28kAE.js → auth-entry-Bzgwq0y0.js} +1 -1
  73. package/dist/client/assets/{auth-D32cXta1.js → auth-m8mReS2L.js} +1 -1
  74. package/dist/client/assets/{auth-split-layout-D4hDB6K9.js → auth-split-layout-BpExoJIR.js} +1 -1
  75. package/dist/client/assets/{authenticate-and-persist-oauth-nxqo5RHp.js → authenticate-and-persist-oauth-wGA98pig.js} +1 -1
  76. package/dist/client/assets/{automation-list-row-DKge22DJ.js → automation-list-row-Wco8dMO4.js} +1 -1
  77. package/dist/client/assets/{automation-runs-BjPF6LD5.js → automation-runs-BpS71T7i.js} +1 -1
  78. package/dist/client/assets/{automations-CahUqw7W.js → automations-BsDzDEDQ.js} +1 -1
  79. package/dist/client/assets/{autosend-B0cwcoZQ.js → autosend-iwlMt5WS.js} +1 -1
  80. package/dist/client/assets/{avatar-DSv7rQey.js → avatar-Db0qWynR.js} +1 -1
  81. package/dist/client/assets/{badge-BVm53kyq.js → badge-CwNfoPqd.js} +1 -1
  82. package/dist/client/assets/{block-document-D8cOPhhp.js → block-document-BsYzFY_5.js} +1 -1
  83. package/dist/client/assets/{blocks-preview-workspace-context-BKbOMRuN.js → blocks-preview-workspace-context-CzD2a_CS.js} +1 -1
  84. package/dist/client/assets/{buckets-qN50y_8N.js → buckets-mLTBf0yg.js} +1 -1
  85. package/dist/client/assets/{build-improve-prompt-doc-CC90CrN1.js → build-improve-prompt-doc-BleKeotR.js} +1 -1
  86. package/dist/client/assets/{calendar-DJtSYtKm.js → calendar-CYbwrbs9.js} +1 -1
  87. package/dist/client/assets/{capability-load-error-BE5lkHsD.js → capability-load-error-BIIrsQeQ.js} +1 -1
  88. package/dist/client/assets/{category-editor-CiXlFZY7.js → category-editor-8zQ-HfuA.js} +1 -1
  89. package/dist/client/assets/{chart-DqY7SXIi.js → chart-BvjL3KyI.js} +1 -1
  90. package/dist/client/assets/{chat-context-DFdcIErL.js → chat-context-DoRZ7BAu.js} +1 -1
  91. package/dist/client/assets/{chat-draft-BtGF7bzA.js → chat-draft-BLRL9DBE.js} +1 -1
  92. package/dist/client/assets/{checkbox-CKTKlc0c.js → checkbox-BGCPrYtm.js} +1 -1
  93. package/dist/client/assets/{choose-editor-Err48-Lf.js → choose-editor-BD7EWoJz.js} +1 -1
  94. package/dist/client/assets/{claim-phase-copy-iLfMCvUg.js → claim-phase-copy-046P20LZ.js} +1 -1
  95. package/dist/client/assets/{cli-auth-success-BkmZGWTI.js → cli-auth-success-CQvw05dK.js} +1 -1
  96. package/dist/client/assets/{client-icons-DAh8_gqZ.js → client-icons-QNXftK_O.js} +1 -1
  97. package/dist/client/assets/{collapsible-CKtvk2qR.js → collapsible-CqoKX7P-.js} +1 -1
  98. package/dist/client/assets/{collection-detail-Duw5_YbG.js → collection-detail-CSN80RXJ.js} +1 -1
  99. package/dist/client/assets/{collection-display-button-CoPEzt2N.js → collection-display-button-ByRHGyzj.js} +1 -1
  100. package/dist/client/assets/{collection-search-BRvScCfK.js → collection-search-CixzR0jt.js} +1 -1
  101. package/dist/client/assets/{collection-table-wrapper-BbFo2vuN.js → collection-table-wrapper-H2EDnKYX.js} +1 -1
  102. package/dist/client/assets/{collection-tabs-DYXVQ5CX.js → collection-tabs-B11e7FNa.js} +1 -1
  103. package/dist/client/assets/{combobox-BSDZKZEG.js → combobox-DrwCdQjr.js} +1 -1
  104. package/dist/client/assets/{command-3VOIGXTI.js → command-CSIn6NUp.js} +1 -1
  105. package/dist/client/assets/{companion-mcps-section-DjksUrm1.js → companion-mcps-section-BqkvzNKQ.js} +1 -1
  106. package/dist/client/assets/{config-CB5vGL2_.js → config-BmLFV5aQ.js} +1 -1
  107. package/dist/client/assets/{connect-CJcFVZSc.js → connect-R-5nGEA2.js} +1 -1
  108. package/dist/client/assets/{connect-layout-Df1OVOPH.js → connect-layout-CEh7TZ-C.js} +1 -1
  109. package/dist/client/assets/{connection-CghRZvH1.js → connection-D0UuWFHs.js} +1 -1
  110. package/dist/client/assets/{connection-card-CM7cJdHp.js → connection-card-BOuBiY78.js} +1 -1
  111. package/dist/client/assets/{connection-detail-DZj5ll2f.js → connection-detail-D6s3BLpV.js} +1 -1
  112. package/dist/client/assets/{connection-form-helpers-BXAo8rkG.js → connection-form-helpers-BQEshPrR.js} +1 -1
  113. package/dist/client/assets/{connections-DOaUllXK.js → connections-DBkFviUZ.js} +1 -1
  114. package/dist/client/assets/{context-DD8l5XSD.js → context-B23tpn4N.js} +1 -1
  115. package/dist/client/assets/{create-organization-dialog-C_zeaDpV.js → create-organization-dialog-Dv77iPJE.js} +1 -1
  116. package/dist/client/assets/{decopilot-fXzeGhfJ.js → decopilot-BjZoATFb.js} +1 -1
  117. package/dist/client/assets/{dialog-CYKucQEn.js → dialog-Bfzt3XFb.js} +1 -1
  118. package/dist/client/assets/{discover-BeDY4eoX.js → discover-Boud-N8t.js} +1 -1
  119. package/dist/client/assets/{domain-settings-COnOYeBB.js → domain-settings-BQYncwaL.js} +1 -1
  120. package/dist/client/assets/{download-app-dialog-ilxwkPe1.js → download-app-dialog-C0CupO71.js} +1 -1
  121. package/dist/client/assets/{drawer-DG-A7uu9.js → drawer-DfZZQ_oe.js} +1 -1
  122. package/dist/client/assets/{editor-D6m-Mg9w.js → editor-tF9dhcqH.js} +1 -1
  123. package/dist/client/assets/{empty-state-CLHHI2Dq.js → empty-state-CacxJhpY.js} +1 -1
  124. package/dist/client/assets/{empty-state-C-cMIo1T.js → empty-state-DaLF2wGU.js} +1 -1
  125. package/dist/client/assets/{extract-connection-data-B-G_DpF-.js → extract-connection-data-8fIhWbzr.js} +1 -1
  126. package/dist/client/assets/{feature-gate-CysfdGto.js → feature-gate-CzVvaxxU.js} +1 -1
  127. package/dist/client/assets/{feature-paywall-D7E_OmlQ.js → feature-paywall-ya27qr6b.js} +1 -1
  128. package/dist/client/assets/{file-explorer-CCx_G_Xm.js → file-explorer-B0RGxSvy.js} +1 -1
  129. package/dist/client/assets/{file-preview-C7iqsPcD.js → file-preview-NbuLOt_e.js} +1 -1
  130. package/dist/client/assets/{file-share-button-weodJ1fg.js → file-share-button-CP337tSH.js} +1 -1
  131. package/dist/client/assets/{file-type-icon-GNT0wjq6.js → file-type-icon-BMC3KDgr.js} +1 -1
  132. package/dist/client/assets/flat-project-rX2Ud3Bi.js +1 -0
  133. package/dist/client/assets/{folder-icon-DNT5ZPCH.js → folder-icon-BaKcEgRX.js} +1 -1
  134. package/dist/client/assets/{form-BuKMCQ_-.js → form-CkTAMm4r.js} +1 -1
  135. package/dist/client/assets/{gateway-client-BtY2d8II.js → gateway-client-ijp7Gb6b.js} +1 -1
  136. package/dist/client/assets/{general-Dd-PiJly.js → general-BUYCeNME.js} +1 -1
  137. package/dist/client/assets/{home-CA465RbP.js → home-CGc97xpM.js} +1 -1
  138. package/dist/client/assets/{index-ySi4Pwot.js → index-1sDXMyGt.js} +1 -1
  139. package/dist/client/assets/{index-Cv3qPBot.js → index-8ZWdPrBz.js} +1 -1
  140. package/dist/client/assets/{index-BJCqpqJd.js → index-B1ecdoBV.js} +4 -4
  141. package/dist/client/assets/{index-DIZnX8_b.js → index-B9AVQN3m.js} +3 -3
  142. package/dist/client/assets/{index-BMdQXKlL.js → index-BNneJRjx.js} +1 -1
  143. package/dist/client/assets/{index-X0RgFz8Y.js → index-BoeQa8cU.js} +1 -1
  144. package/dist/client/assets/{index-BUGmQlES.js → index-CJlDVGbh.js} +1 -1
  145. package/dist/client/assets/{index-_bGtHSkW.js → index-ClFKj8wA.js} +1 -1
  146. package/dist/client/assets/{index-B20d8ck9.js → index-D6QRQMcy.js} +1 -1
  147. package/dist/client/assets/{index-QiV1VAG0.js → index-DSGLmxgh.js} +1 -1
  148. package/dist/client/assets/{index-D0r-H4rb.js → index-DzJj-kjc.js} +1 -1
  149. package/dist/client/assets/{index-CGwg_b5-.js → index-Ira5-xDw.js} +1 -1
  150. package/dist/client/assets/{index-8DK0gqav.js → index-YNspms23.js} +1 -1
  151. package/dist/client/assets/{index-Bz8Yokmw.js → index-fD50Gjr3.js} +1 -1
  152. package/dist/client/assets/{index-DzdUtt7w.js → index-jDFkthyG.js} +1 -1
  153. package/dist/client/assets/{index-redirect-COkcwXCv.js → index-redirect-ClMQ9gN8.js} +1 -1
  154. package/dist/client/assets/{infiniteQueryObserver-DWdmBz6y.js → infiniteQueryObserver-CqNCMQCa.js} +1 -1
  155. package/dist/client/assets/{infra-billing-ItyhV52m.js → infra-billing-dLP8_3x2.js} +1 -1
  156. package/dist/client/assets/{input-BjKsQzeZ.js → input-BJrFcGbv.js} +1 -1
  157. package/dist/client/assets/{input-CE59clBd.js → input-BpFQj0xb.js} +1 -1
  158. package/dist/client/assets/{input-CR5CoVD3.js → input-D0VilFZ-.js} +1 -1
  159. package/dist/client/assets/{integration-icon-BjqLrrwW.js → integration-icon-9I_Y8JdP.js} +1 -1
  160. package/dist/client/assets/{label-6ZrdaA5F.js → label-CkdQ4VOv.js} +1 -1
  161. package/dist/client/assets/{last-preview-page-D1GT2WOl.js → last-preview-page-D3llj-lh.js} +1 -1
  162. package/dist/client/assets/{layout-kv8jD_6_.js → layout-BYGFcUYK.js} +1 -1
  163. package/dist/client/assets/{legacy-agents-deep-C3JURVIJ.js → legacy-agents-deep-4Mhzy7SS.js} +1 -1
  164. package/dist/client/assets/{legacy-main-redirect-BBWHiN88.js → legacy-main-redirect-CZPEfoTt.js} +1 -1
  165. package/dist/client/assets/library-D5Cr_7h7.js +1 -0
  166. package/dist/client/assets/{library-tab-CPVjxTSo.js → library-tab-HEOq-m3Q.js} +1 -1
  167. package/dist/client/assets/{login-DDQDV_ae.js → login-BosE8s-B.js} +1 -1
  168. package/dist/client/assets/{markdown-JTzUPlKH.js → markdown-CftC6vBX.js} +1 -1
  169. package/dist/client/assets/{mcp-app-renderer-k0tZLm07.js → mcp-app-renderer-BsoltKMl.js} +1 -1
  170. package/dist/client/assets/{mcp-oauth-C3J5q_hp.js → mcp-oauth-JGr51f8R.js} +1 -1
  171. package/dist/client/assets/{members-CZCpvZYc.js → members-CiwijtIH.js} +1 -1
  172. package/dist/client/assets/{message-templates-lHg6ZlFI.js → message-templates-CGBFpN50.js} +1 -1
  173. package/dist/client/assets/{mini-report-page-C9UKk1Vu.js → mini-report-page-BbwuB9OQ.js} +1 -1
  174. package/dist/client/assets/{mock-board-CezSoFB6.js → mock-board-Ct-IRmQ8.js} +1 -1
  175. package/dist/client/assets/{monaco-editor-CKKWy-x3.js → monaco-editor-CZuZsUk1.js} +1 -1
  176. package/dist/client/assets/{monitoring-stats-row-Chh148qF.js → monitoring-stats-row-DW3qKgv_.js} +1 -1
  177. package/dist/client/assets/{multi-select-BF6_Adhk.js → multi-select-Cp-GgZ1E.js} +1 -1
  178. package/dist/client/assets/{mustache-Cu104CQF.js → mustache-B-m_gA_o.js} +1 -1
  179. package/dist/client/assets/{new-project-dialog-BmmmSjjo.js → new-project-dialog-g9Y_dNWu.js} +1 -1
  180. package/dist/client/assets/{oauth-callback-ywzLtSuG.js → oauth-callback-CC5YfRIN.js} +1 -1
  181. package/dist/client/assets/{oauth-callback-ai-provider-CeS8kqA6.js → oauth-callback-ai-provider-Dt6mXT69.js} +1 -1
  182. package/dist/client/assets/{onboarding-ZV52ZojZ.js → onboarding-DKHhNkbt.js} +1 -1
  183. package/dist/client/assets/{optimistic-project-sidebar-views-Db3TOzmO.js → optimistic-project-sidebar-views-DA6HZKJi.js} +1 -1
  184. package/dist/client/assets/{org-file-open-context-kXusxtya.js → org-file-open-context-CL9FcsI_.js} +1 -1
  185. package/dist/client/assets/{organization-choice-B0xp612m.js → organization-choice-Dys68zjZ.js} +1 -1
  186. package/dist/client/assets/{orgs-BQyi9DSo.js → orgs-Sm3Hr7lj.js} +1 -1
  187. package/dist/client/assets/{page-seo-form-J76EvRZe.js → page-seo-form-DHljGQyS.js} +1 -1
  188. package/dist/client/assets/{pair-BolEqp4H.js → pair-DjkgCWAD.js} +1 -1
  189. package/dist/client/assets/{plan-ladder-DxETvjP6.js → plan-ladder--Uu4s2BW.js} +1 -1
  190. package/dist/client/assets/{popover-CxnAOud0.js → popover-CxFaGB4F.js} +1 -1
  191. package/dist/client/assets/{post-calendar-BsKIBdi3.js → post-calendar-RKmGCOUk.js} +1 -1
  192. package/dist/client/assets/{post-editor-CKJ8pkhP.js → post-editor-CqYYZYg0.js} +1 -1
  193. package/dist/client/assets/{preview-content-JHqQ9fqd.js → preview-content-BO7XmFOQ.js} +1 -1
  194. package/dist/client/assets/{preview-dialog-BXXWFhIT.js → preview-dialog-D-wprKOW.js} +1 -1
  195. package/dist/client/assets/{profile-GZ4cJ3Nb.js → profile-AsGBkwE6.js} +1 -1
  196. package/dist/client/assets/{project-app-view-CQb-TK1P.js → project-app-view-BL3IGwas.js} +1 -1
  197. package/dist/client/assets/{project-feed-DWzyADfx.js → project-feed-BWmf9ooj.js} +1 -1
  198. package/dist/client/assets/{project-icon-BWs8G7QE.js → project-icon-CxFHwpbF.js} +1 -1
  199. package/dist/client/assets/project-reports-B8t-kfej.js +1 -0
  200. package/dist/client/assets/project-tasks-gsvk6DOo.js +1 -0
  201. package/dist/client/assets/{projects-BnImtVuG.js → projects-O68uionh.js} +1 -1
  202. package/dist/client/assets/{projects-empty-state-Yja7EiQA.js → projects-empty-state-7Jw-pAvX.js} +1 -1
  203. package/dist/client/assets/{prompts-B_jhy1Zt.js → prompts-urgaTwTz.js} +1 -1
  204. package/dist/client/assets/record-editor-C6DZBzM2.js +1 -0
  205. package/dist/client/assets/{redirect-editor-BTQazxtK.js → redirect-editor-BJFWxl93.js} +1 -1
  206. package/dist/client/assets/{reports-CFcJ9_dw.js → reports-DJA4tRSh.js} +1 -1
  207. package/dist/client/assets/reports-W7-nMA4D.js +1 -0
  208. package/dist/client/assets/{reports-onboarding-DsFX6Q2Y.js → reports-onboarding-DFJXC-i6.js} +1 -1
  209. package/dist/client/assets/{reports-tab-BMRQLhrU.js → reports-tab-B5Te13Jt.js} +2 -2
  210. package/dist/client/assets/{repositories-Cxp5gec8.js → repositories-R4ohG_kn.js} +1 -1
  211. package/dist/client/assets/{repository-binding--R5a6meD.js → repository-binding-CeSWNpy8.js} +1 -1
  212. package/dist/client/assets/{repository-import-picker-zA2aRMgM.js → repository-import-picker-B6_NRdmw.js} +1 -1
  213. package/dist/client/assets/{repository-picker-Ch8MjhWT.js → repository-picker-DKvaVTpI.js} +1 -1
  214. package/dist/client/assets/{require-capability-z1ZYrtyD.js → require-capability-DIlxcTh8.js} +1 -1
  215. package/dist/client/assets/{required-auth-layout-DrK2Ahbq.js → required-auth-layout-BVB0FPYg.js} +1 -1
  216. package/dist/client/assets/{reset-password-o9kRT8P-.js → reset-password-uinnVD5G.js} +1 -1
  217. package/dist/client/assets/{resizable-DRo3WucN.js → resizable-C3PaUdAU.js} +1 -1
  218. package/dist/client/assets/{resolve-tab-icon-BC_jCwlY.js → resolve-tab-icon-DoXPYs-F.js} +1 -1
  219. package/dist/client/assets/{review-settings-BHVALtQt.js → review-settings-6EmpeY2r.js} +1 -1
  220. package/dist/client/assets/{rich-text-link-control-CKZNrR9n.js → rich-text-link-control-DuusIwIP.js} +1 -1
  221. package/dist/client/assets/{roles-CGFPftX7.js → roles-3aypm01n.js} +1 -1
  222. package/dist/client/assets/{route-BuDFfTf7.js → route-BClB1ylL.js} +1 -1
  223. package/dist/client/assets/{route-CwFuHhC1.js → route-CIUheoOm.js} +1 -1
  224. package/dist/client/assets/route-Cw-jXcmZ.js +1 -0
  225. package/dist/client/assets/{runnable-block-editor-q8wiTpdB.js → runnable-block-editor-wf9OT1OF.js} +1 -1
  226. package/dist/client/assets/{sandbox-lifecycle-context-CwxdQlSb.js → sandbox-lifecycle-context-DYkvwRIw.js} +1 -1
  227. package/dist/client/assets/{schema-BPGmAw0J.js → schema-CZrOl-FE.js} +1 -1
  228. package/dist/client/assets/{scroll-area-dZYwQnHa.js → scroll-area-DyNg4QHf.js} +1 -1
  229. package/dist/client/assets/{search-input-BBMyMvHh.js → search-input-vnNPjeam.js} +1 -1
  230. package/dist/client/assets/{search-toggle-DcNdKksf.js → search-toggle-Nma8s-TO.js} +1 -1
  231. package/dist/client/assets/{secret-picker-D2smZAsf.js → secret-picker-9EX-c8bq.js} +1 -1
  232. package/dist/client/assets/{secrets-DEuR_SKQ.js → secrets-C_vgTTbx.js} +1 -1
  233. package/dist/client/assets/{sections-editor-CXuKyDSq.js → sections-editor-Dpaa8uQX.js} +1 -1
  234. package/dist/client/assets/{select-CV06ESGC.js → select-C7muatVe.js} +1 -1
  235. package/dist/client/assets/{select-model-9Q75oIJD.js → select-model-Cm8IQ6Z8.js} +1 -1
  236. package/dist/client/assets/{seo-editor-DgkdnJ38.js → seo-editor-BNA3U53Q.js} +1 -1
  237. package/dist/client/assets/{separator-DD8SvIJt.js → separator-bFtBYWxL.js} +1 -1
  238. package/dist/client/assets/{settings-tab-DrI9h0MP.js → settings-tab-D1XFgS-p.js} +1 -1
  239. package/dist/client/assets/{sheet-COySNUi4.js → sheet-CerqbYH1.js} +1 -1
  240. package/dist/client/assets/{shell-layout-BR24Afar.js → shell-layout-Bh1xptzW.js} +1 -1
  241. package/dist/client/assets/{skills-DBhh4jev.js → skills-BB8NL3H4.js} +1 -1
  242. package/dist/client/assets/{sso-_tSIdymt.js → sso-DIOzkPZP.js} +1 -1
  243. package/dist/client/assets/{suggestion-CqfoTsij.js → suggestion-Da2uUNtW.js} +1 -1
  244. package/dist/client/assets/{switch-DcKRnaVG.js → switch-D4DY2cCi.js} +1 -1
  245. package/dist/client/assets/{synced-repos-VW_LJoE6.js → synced-repos-BI4dxVMZ.js} +1 -1
  246. package/dist/client/assets/{tab-icon-glyph-Bpgp9cBx.js → tab-icon-glyph-BZHhjAvn.js} +1 -1
  247. package/dist/client/assets/{table-ChI81Khw.js → table-l5iFQmjA.js} +1 -1
  248. package/dist/client/assets/{tabs-Bhcrjsbm.js → tabs-DuMDr7wX.js} +1 -1
  249. package/dist/client/assets/{task-board-CJjc4xI-.js → task-board-Ds3jn_Rj.js} +1 -1
  250. package/dist/client/assets/{task-route-DhT_vkgX.js → task-route-wtudGNjl.js} +1 -1
  251. package/dist/client/assets/{task-status-DB9VzvnI.js → task-status-zMtSVk1A.js} +1 -1
  252. package/dist/client/assets/{taskboard-analytics-D2i3U7yF.js → taskboard-analytics-3QEju3Nu.js} +1 -1
  253. package/dist/client/assets/tasks-COD8bdBx.js +1 -0
  254. package/dist/client/assets/{tasks-JNpK11cV.js → tasks-CZq4DNZA.js} +1 -1
  255. package/dist/client/assets/{textarea-BXhBwPZM.js → textarea-BUiBtIzz.js} +1 -1
  256. package/dist/client/assets/{thread-analytics-Cih69yRb.js → thread-analytics-DywTxr4n.js} +1 -1
  257. package/dist/client/assets/{thread-button-AF1WSMlL.js → thread-button-BaGcBLz3.js} +1 -1
  258. package/dist/client/assets/{thread-intent-BUShkesP.js → thread-intent-C0B-yOTw.js} +1 -1
  259. package/dist/client/assets/{thread-route-CqYgZaDv.js → thread-route-CJ4Df-1U.js} +1 -1
  260. package/dist/client/assets/{thread-route-DQM8B2sI.js → thread-route-DoMoEEqu.js} +1 -1
  261. package/dist/client/assets/{thread-sheet-body-DwAizuR8.js → thread-sheet-body-D6y0AO0r.js} +1 -1
  262. package/dist/client/assets/{toggle-group-DVGTd7pP.js → toggle-group-DdQcjmE-.js} +1 -1
  263. package/dist/client/assets/{toolbar-icon-button-Bzitet5K.js → toolbar-icon-button-CciIwtv-.js} +1 -1
  264. package/dist/client/assets/{tooltip-DymYYuRo.js → tooltip-CB69gNXE.js} +1 -1
  265. package/dist/client/assets/{track-BsEyW3He.js → track-DTg8Ut7B.js} +1 -1
  266. package/dist/client/assets/{types-cb53ubAI.js → types-B8JDj0k3.js} +1 -1
  267. package/dist/client/assets/{usage-stats-zkwjwtUJ.js → usage-stats-NXuJva4o.js} +1 -1
  268. package/dist/client/assets/{use-ai-providers-BkzLFMQR.js → use-ai-providers-C3thT5mt.js} +1 -1
  269. package/dist/client/assets/{use-automations-D1SUlKHV.js → use-automations-nC_Vf1DD.js} +1 -1
  270. package/dist/client/assets/{use-autosave-CB-vej23.js → use-autosave-HO2g_eV5.js} +1 -1
  271. package/dist/client/assets/{use-chat-layout-state-CRef6D4d.js → use-chat-layout-state-CoK3p3Ai.js} +1 -1
  272. package/dist/client/assets/{use-connect-companion-BBvbZk76.js → use-connect-companion-BNbSOC54.js} +1 -1
  273. package/dist/client/assets/{use-connection-rm3wb9zf.js → use-connection-DRJVWKJ0.js} +1 -1
  274. package/dist/client/assets/{use-copy-Bb6V_Y-2.js → use-copy-BL-Wwqj9.js} +1 -1
  275. package/dist/client/assets/{use-create-virtual-mcp-EiOYXG3-.js → use-create-virtual-mcp-g5ldGDFA.js} +1 -1
  276. package/dist/client/assets/{use-date-fns-locale-C9CWZMOZ.js → use-date-fns-locale-DGuPXCmz.js} +1 -1
  277. package/dist/client/assets/{use-debounced-autosave-D0o2B4Xo.js → use-debounced-autosave-CB2BWQZ1.js} +1 -1
  278. package/dist/client/assets/{use-debounced-value-BAjT0z0V.js → use-debounced-value-BGOdmuhZ.js} +1 -1
  279. package/dist/client/assets/{use-deco-credits-CayxoltY.js → use-deco-credits-CV67ctih.js} +1 -1
  280. package/dist/client/assets/{use-decopilot-events-BXaRjj_f.js → use-decopilot-events-Bwg4BydI.js} +1 -1
  281. package/dist/client/assets/{use-delete-connection-CynD9NKl.js → use-delete-connection-BeJheEhx.js} +1 -1
  282. package/dist/client/assets/{use-deployment-admin-BMoGThMy.js → use-deployment-admin-CuGa0X9s.js} +1 -1
  283. package/dist/client/assets/{use-fast-preview-draft-url-Cv_bGV8Q.js → use-fast-preview-draft-url-9UzGHrXA.js} +1 -1
  284. package/dist/client/assets/{use-file-configs-CQr5ImoR.js → use-file-configs-BmqB1U-6.js} +1 -1
  285. package/dist/client/assets/{use-infinite-scroll-CnOZ3QQs.js → use-infinite-scroll-41_uIz8z.js} +1 -1
  286. package/dist/client/assets/{use-join-requests-CIOXMLDr.js → use-join-requests-Bj-5sElN.js} +1 -1
  287. package/dist/client/assets/{use-main-panel-tabs-Bu2rGt1b.js → use-main-panel-tabs-B5UoVoxi.js} +1 -1
  288. package/dist/client/assets/{use-mcp-auth-status-DkUE1YUf.js → use-mcp-auth-status-Bv-fY1vq.js} +1 -1
  289. package/dist/client/assets/{use-mcp-client-dYAEJ2Jd.js → use-mcp-client-C_sP5ikN.js} +1 -1
  290. package/dist/client/assets/{use-mcp-prompts-CytnXWFX.js → use-mcp-prompts-B1Aryewt.js} +1 -1
  291. package/dist/client/assets/{use-mcp-tools-DKcS99WV.js → use-mcp-tools-CAStoeVw.js} +1 -1
  292. package/dist/client/assets/{use-members-BGeBcZAI.js → use-members-DG5SoAaZ.js} +1 -1
  293. package/dist/client/assets/{use-mobile-Cr6YJGI_.js → use-mobile-6tSIkKgm.js} +1 -1
  294. package/dist/client/assets/{use-navigate-to-agent-DoVNCwHy.js → use-navigate-to-agent-DUYKJ-S9.js} +1 -1
  295. package/dist/client/assets/use-new-blocks-editor-BGKjcJ5z.js +1 -0
  296. package/dist/client/assets/{use-open-billing-url-D5IYp8zD.js → use-open-billing-url-kW94uR5y.js} +1 -1
  297. package/dist/client/assets/{use-org-auth-client-Cj2S4VtF.js → use-org-auth-client-CB1bjrIZ.js} +1 -1
  298. package/dist/client/assets/{use-org-fs-DBAxCQBE.js → use-org-fs-BH9hNWD8.js} +1 -1
  299. package/dist/client/assets/{use-org-repo-syncs-DASdWM3g.js → use-org-repo-syncs-DSNKVb_P.js} +1 -1
  300. package/dist/client/assets/{use-org-sso-C6AFvIzX.js → use-org-sso-D5im1k6Y.js} +1 -1
  301. package/dist/client/assets/{use-organization-roles-CdTybrJA.js → use-organization-roles-CHejCNlo.js} +1 -1
  302. package/dist/client/assets/{use-organization-settings-B7IVGPSk.js → use-organization-settings-VU0nTPbh.js} +1 -1
  303. package/dist/client/assets/{use-panel-navigate-BDo5oxs2.js → use-panel-navigate-BAbwDs2l.js} +1 -1
  304. package/dist/client/assets/{use-project-native-view-presence-DM97JCfv.js → use-project-native-view-presence-DtedQC76.js} +1 -1
  305. package/dist/client/assets/{use-project-scope-ELhrNYxO.js → use-project-scope-DFBPORIA.js} +1 -1
  306. package/dist/client/assets/{use-releases-C6by0aYf.js → use-releases-Di9aX7i3.js} +1 -1
  307. package/dist/client/assets/{use-reports-diagnostic-D6LAqZld.js → use-reports-diagnostic-CtqNb1p1.js} +1 -1
  308. package/dist/client/assets/{use-secrets-CETMiKli.js → use-secrets-D96ncnwY.js} +1 -1
  309. package/dist/client/assets/{use-section-preview-base-iMXSXAXB.js → use-section-preview-base-DjRR_ydG.js} +1 -1
  310. package/dist/client/assets/{use-session-runtime-7EKtYywq.js → use-session-runtime-CPHvHCyF.js} +1 -1
  311. package/dist/client/assets/{use-tags-CGk04KKn.js → use-tags-eVIMwsQd.js} +1 -1
  312. package/dist/client/assets/{use-task-board-analytics-CcDxmijQ.js → use-task-board-analytics-mPZJUInR.js} +1 -1
  313. package/dist/client/assets/{use-task-metadata-CHjvR9nL.js → use-task-metadata-CbiHq9dx.js} +1 -1
  314. package/dist/client/assets/{use-thread-analytics-DgyRTsuJ.js → use-thread-analytics-1O_7I9D6.js} +1 -1
  315. package/dist/client/assets/{use-thread-outputs-BEwXZ8Vh.js → use-thread-outputs-B6cf4xQP.js} +1 -1
  316. package/dist/client/assets/useInfiniteQuery-UsllDYUJ.js +1 -0
  317. package/dist/client/assets/{useQueries-IXTpZeMS.js → useQueries-C5s4Wcf5.js} +1 -1
  318. package/dist/client/assets/useSuspenseInfiniteQuery-BXtEF4xl.js +1 -0
  319. package/dist/client/assets/{users-CRc2HLrw.js → users-bFRk1XEO.js} +1 -1
  320. package/dist/client/assets/{utils-BHJpTmNN.js → utils-DNkwaZwv.js} +1 -1
  321. package/dist/client/assets/{variant-calendar-BVIyYUNc.js → variant-calendar-DaXKr_lP.js} +1 -1
  322. package/dist/client/assets/{variant-matcher-override-D3ZX5GGx.js → variant-matcher-override-BCPD5zJH.js} +1 -1
  323. package/dist/client/assets/{view-mode-toggle-xsYxeBhI.js → view-mode-toggle-gjxHIVDm.js} +1 -1
  324. package/dist/client/assets/{virtual-mcp-Bq8CmmOy.js → virtual-mcp-Dj-bEwm-.js} +1 -1
  325. package/dist/client/index.html +1 -1
  326. package/dist/server/cli.js +1 -1
  327. package/dist/server/server.js +1 -1
  328. package/package.json +1 -1
  329. package/dist/client/assets/agent-app-D7JXTBCq.js +0 -1
  330. package/dist/client/assets/agent-deck-D3yxTAhn.js +0 -1
  331. package/dist/client/assets/agent-library-BXp8X7Kb.js +0 -1
  332. package/dist/client/assets/agent-library-file-DBTLr6wD.js +0 -1
  333. package/dist/client/assets/agent-settings-B02qGu9T.js +0 -1
  334. package/dist/client/assets/agent-site-editor-code-C1rCwcip.js +0 -2
  335. package/dist/client/assets/agent-site-editor-content-D-WwcHO0.js +0 -9
  336. package/dist/client/assets/agent-view-DNB9Q5mk.js +0 -1
  337. package/dist/client/assets/api-keys-Cid803mQ.js +0 -1
  338. package/dist/client/assets/app-editor-B04OoaGI.js +0 -1
  339. package/dist/client/assets/flat-project-DTc0SWpt.js +0 -1
  340. package/dist/client/assets/library-BYCJESrt.js +0 -1
  341. package/dist/client/assets/project-reports-DWdFvTXe.js +0 -1
  342. package/dist/client/assets/project-tasks-Cvmm21fI.js +0 -1
  343. package/dist/client/assets/record-editor-CN4HNCDe.js +0 -1
  344. package/dist/client/assets/reports-ftm5Lh7G.js +0 -1
  345. package/dist/client/assets/route-Crert7MH.js +0 -1
  346. package/dist/client/assets/tasks-C9nYVcwD.js +0 -1
  347. package/dist/client/assets/use-new-blocks-editor-CTbC874V.js +0 -1
  348. package/dist/client/assets/useInfiniteQuery-CrHqvHwZ.js +0 -1
  349. package/dist/client/assets/useSuspenseInfiniteQuery-Di3mCiFx.js +0 -1
@@ -3692,7 +3692,7 @@ Respond with ONLY a JSON object of this shape, and nothing else:
3692
3692
  ${J.join(`
3693
3693
  `)}`:X}function yc6($){let Z=new Set;for(let Q of $)for(let Y of Q.split(`
3694
3694
  `)){let X=Y.trim();if(/^Co-authored-by:\s/i.test(X))Z.add(X)}return[...Z]}var s58=200,Ic6=12,kc6,Cc6=300,vS0=3;var PN1=D(()=>{oZ();K8();_S0();kc6={aheadBy:0,behindBy:0,files:[]}});function hc6($){if(!$||$.includes(".."))return!1;return gc6.test($)}function e58($){return uc6.includes($)}function zN1($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!hc6(Z))return null;let{__resolveType:Q,...Y}=$;return{resolveType:Z,payload:Y}}function AN1($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var gc6,uc6;var $98=D(()=>{gc6=/^[\w./@-]+$/;uc6=["vtex/loaders/intelligentSearch/productList.ts","vtex/loaders/categories/tree.ts"]});function f40($,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 Q98($,Z,Q,Y){let X=$.organization?.id;if(!X)throw new vE(A7);let J=await Bj($.storage,X,Y);if(J&&await nB($.storage,J)){let F=await WU($,J,{forceRefresh:!0}).catch((U)=>{throw new vE(U instanceof Error?U.message:A7)});await Z98($,Z,Q,F);return}let G=Y.connectionId??J?.legacyConnectionId;if(!G)throw new vE("Push requires a connected git account. Connect the repository's provider for this project and restart the sandbox.");await uc({ctx:$,connectionId:G,organizationId:X,forceRefresh:!0,onLegacyMintError:(F)=>{let U=F instanceof Error?F.message:A7;throw new vE(U)}});let{cloneUrl:W,gitUserName:K,gitUserEmail:H}=await HU(G,Y.owner,Y.name,$.db,$.vault).catch((F)=>{let{code:U,message:N}=vB$(F instanceof Error?F.message:String(F));throw U?new vE(N):F});await Z98($,Z,Q,{cloneUrl:W,gitUserName:K,gitUserEmail:H})}async function Z98($,Z,Q,Y){let{cloneUrl:X,gitUserName:J,gitUserEmail:G}=Y,W=li($),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 yj(K,lc6).catch(()=>K.statusText);throw Error(`Failed to refresh sandbox git credentials (${K.status}): ${H}`)}}var lc6=10485760,vE;var TN1=D(()=>{NW();TS0();N10();TK0();se();oZ();vE=class vE extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function mc6($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!cc6.test(Z))throw Error(`Invalid branch name: ${$}`)}function Ay($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(dc6)])}async function pc6($,Z){let Q=$.var.studioContext,Y=wU(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=ox(G?.metadata?.runtime);if(W)return W;let K=ET0(Z.virtualMcpMetadata),H=K==="cms"?await $N1(Q,{claimName:Z.claimName}):"alive",F=K==="cms"&&H!=="alive"?"cms":"sandbox",U=!!G&&(H==="gone"||H==="alive"&&K==="cms");if(U&&G)B10(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 nc6($){let Z=$.get("vmClaim");if(Z.runner)return Z.runner;try{return await kX($.var.studioContext)}catch{return null}}function Ty($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}async function pi($){let{virtualMcpMetadata:Z,connectionIds:Q}=$.get("vmClaim"),Y=$.var.studioContext,X=f40(Z,Q);if(!X)throw new x0({provider:"github",status:404,message:"Project has no repository"});let J=G0(Y);return yc(Y,J.id,X)}function qN1($,Z){let Q=Z instanceof Error?Z.message:String(Z),Y=tU$(Z);if(Y!==void 0)return $.json({error:Q},429,{...Z9,...Y===null?{}:{"Retry-After":String(Math.ceil(Y/1000))}});if(Z instanceof o6)return $.json({error:Q},409,Z9);let X=LW(Z);if(X!==null){let J=X===404?404:X===409||X===422?409:502;return $.json({error:Q},J,Z9)}return $.json({error:Q},502,Z9)}async function RN1($,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 G98($){try{let Z=await pi($),Q=await bS0(Z,$.get("vmClaim").branch);return $.json(Q,200,Z9)}catch(Z){return qN1($,Z)}}function y40($,Z){let Y=(yS0.get($)??Promise.resolve()).catch(()=>{}).then(Z),X=Y.catch(()=>{});return yS0.set($,X),X.finally(()=>{if(yS0.get($)===X)yS0.delete($)}),Y}async function JQ($,Z,Q){if(!Q?.runner&&$.get("vmClaim").runtime==="cms")return $.json({error:"sandbox not found: this session is sandbox-less"},404,Z9);let Y=Q?.runner??Ty($);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",...Z9}})}}let O=await B.text(),L=Q?.redactRepoDir?tc6(O):O,w=B.headers.get("content-type")??"application/json";return new Response(L,{status:B.status,headers:{"content-type":w,...Z9}})};try{if(F){let B=N();return B.catch(()=>{}),await Promise.race([B,new Promise((L,w)=>{if(F.aborted)return w(F.reason);F.addEventListener("abort",()=>w(F.reason),{once:!0})})])}return await N()}catch(B){let O=B instanceof Error?B.message:String(B);return $.json({error:`Daemon unreachable: ${O}`},502)}}function tc6($){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 gS0($,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 oc6($){return W98.includes($)}var cc6,Y98=524288,X98=65536,dc6=1e4,J98=2000,ic6,yS0,Z9,W98,K98=()=>{let $=new e0;$.use("/:virtualMcpId/:branch/*",ic6),$.post("/:virtualMcpId/:branch/write",(Q)=>JQ(Q,"/_sandbox/write",{forwardJsonBody:!0,signal:Ay(Q)})),$.post("/:virtualMcpId/:branch/unlink",(Q)=>JQ(Q,"/_sandbox/unlink",{forwardJsonBody:!0,signal:Ay(Q)})),$.post("/:virtualMcpId/:branch/mkdir",(Q)=>JQ(Q,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:Ay(Q)})),$.post("/:virtualMcpId/:branch/rename",(Q)=>JQ(Q,"/_sandbox/rename",{forwardJsonBody:!0,signal:Ay(Q)})),$.post("/:virtualMcpId/:branch/read",(Q)=>JQ(Q,"/_sandbox/read",{forwardJsonBody:!0,signal:Ay(Q)})),$.post("/:virtualMcpId/:branch/glob",(Q)=>JQ(Q,"/_sandbox/glob",{forwardJsonBody:!0,signal:Ay(Q)})),$.post("/:virtualMcpId/:branch/grep",(Q)=>JQ(Q,"/_sandbox/grep",{forwardJsonBody:!0,signal:Ay(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 JQ(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 JQ(Q,`/_sandbox/exec/${encodeURIComponent(Y)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(Q)=>JQ(Q,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDir:!0})),$.put("/:virtualMcpId/:branch/config",(Q)=>JQ(Q,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(Q)=>{let Y=Q.req.param("step");if(!Y||!oc6(Y))return Q.json({error:`step must be one of: ${W98.join(", ")}`},400);let X=Q.get("vmClaim"),J=await $N1(Q.var.studioContext,{claimName:X.claimName})==="gone"?null:await nc6(Q);if(!J)return Q.json({error:"sandbox not found: nothing is running at this ref"},404,Z9);if(Y==="start"){let G=G0(Q.var.studioContext),W=qm(X.virtualMcpMetadata);try{await OT0({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 JQ(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 nD(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 J58(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 G98(Q);return Z(Q)});let Z=(Q)=>JQ(Q,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([Q.req.raw.signal,AbortSignal.timeout(J98)])});return $.post("/:virtualMcpId/:branch/git/status",(Q)=>{if(Q.get("vmClaim").runtime==="cms")return G98(Q);return JQ(Q,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([Q.req.raw.signal,AbortSignal.timeout(J98)])})}),$.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 pi(Q),G=await xS0(J,Y.branch,X.base);return Q.json(G,200,Z9)}catch(X){return qN1(Q,X)}return JQ(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,Z9);let Y=Ty(Q);if(Y instanceof Response)return Y;let{claimName:X,virtualMcpMetadata:J,connectionIds:G}=Q.get("vmClaim"),W=Q.var.studioContext;return y40(X,async()=>{try{await ZN1(W,Y,X);let K=f40(J,G);if(K)await Q98(W,Y,X,K)}catch(K){if(K instanceof vE)return Q.json({error:K.message},403,Z9);let H=K instanceof Error?K.message:String(K);return Q.json({error:H},502,Z9)}return JQ(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 y40(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,Z9);try{let G=await pi(Q);return await a58(G,Y.branch,J),Q.json({ok:!0},200,Z9)}catch(G){let W=LW(G)===409||G instanceof o6?409:502,K=G instanceof Error?G.message:String(G);return Q.json({error:K},W,Z9)}});return y40(Y.claimName,()=>JQ(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 y40(Y.claimName,async()=>{try{let W=await Q.req.json().catch(()=>({})),K=await pi(Q),H=W.base??await K.getDefaultBranch();return await fS0(K,Y.branch,H),Q.json({ok:!0},200,Z9)}catch(W){return qN1(Q,W)}});let X=Ty(Q);if(X instanceof Response)return X;let{claimName:J}=Q.get("vmClaim"),G=Q.var.studioContext;return y40(J,async()=>{try{await ZN1(G,X,J)}catch(W){let K=W instanceof Error?W.message:String(W);return Q.json({error:K},502,Z9)}return JQ(Q,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",k5({maxSize:Y98,onError:(Q)=>Q.json({error:"Payload too large"},413,Z9)}),async(Q)=>{let Y=Q.get("vmClaim"),X=null;if(Y.runtime!=="cms"){let H=Ty(Q);if(H instanceof Response)return H;X=H}let{claimName:J,userId:G,projectRef:W}=Y,K=Q.var.studioContext;try{let H=await Q.req.json().catch(()=>({})),F=H.status,U=H.diff,N=U!=null&&typeof U.diffs==="object"&&U.diffs!==null,[B,O]=XN1(F)&&N?[F,U]:X?await Promise.all([gS0(X,J,"/_sandbox/git/status","GET",{userId:G,projectRef:W}),gS0(X,J,"/_sandbox/git/diff","GET",{userId:G,projectRef:W})]):await(async()=>{let w=await pi(Q);return Promise.all([bS0(w,Y.branch),xS0(w,Y.branch)])})();await hG(K,G0(K).id,"suggesting a commit message");let L=await F58(K,B,O);return Q.json(L,200,Z9)}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,Z9);return Q.json({error:F},502,Z9)}}),$.post("/:virtualMcpId/:branch/git/judge-review",k5({maxSize:Y98,onError:(Q)=>Q.json({error:"Payload too large"},413,Z9)}),async(Q)=>{let Y=Q.get("vmClaim"),X=null;if(Y.runtime!=="cms"){let H=Ty(Q);if(H instanceof Response)return H;X=H}let{claimName:J,userId:G,projectRef:W}=Y,K=Q.var.studioContext;try{let H=await Q.req.json().catch(()=>({})),F=H.status,U=H.diff,N=U!=null&&typeof U.diffs==="object"&&U.diffs!==null,[B,O]=XN1(F)&&N?[F,U]:X?await Promise.all([gS0(X,J,"/_sandbox/git/status","GET",{userId:G,projectRef:W}),gS0(X,J,"/_sandbox/git/diff","GET",{userId:G,projectRef:W})]):await(async()=>{let w=await pi(Q);return Promise.all([bS0(w,Y.branch),xS0(w,Y.branch)])})();await hG(K,G0(K).id,"judging whether a change needs review");let L=await N58(K,B,O,typeof H.language==="string"?H.language:void 0);return Q.json(L,200,Z9)}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,Z9);return Q.json({error:F},502,Z9)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(Q)=>{let Y=Ty(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 RN1(Q,`${W}${J}`)}),$.post("/:virtualMcpId/:branch/preview-invoke",k5({maxSize:X98,onError:(Q)=>Q.json({error:"Payload too large"},413)}),async(Q)=>{let Y=Ty(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=zN1(G);if(!W)return Q.json({error:"Invalid or missing __resolveType"},400);let K=AN1(J,W.resolveType);return RN1(Q,K,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(W.payload),signal:AbortSignal.timeout(30000)})}),$.post("/:virtualMcpId/:branch/catalog-invoke",k5({maxSize:X98,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):Mm(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=zN1(W);if(!K)return Q.json({error:"Invalid or missing __resolveType"},400);if(!e58(K.resolveType))return Q.json({error:"resolveType not allowed"},403);let H=AN1(G,K.resolveType);return RN1(Q,H,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(K.payload),signal:AbortSignal.timeout(30000)})}),$};var H98=D(()=>{Q8();cW();ui();eU1();H10();Q58();RW();Im();Y58();AW();pK();X58();G58();U91();U10();WN1();B58();oZ();j5();PN1();$98();jT0();TN1();cc6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;ic6=AS0(async($,Z)=>{let Q=$.var.studioContext;try{r(Q)}catch{return $.json({error:"Unauthorized"},401)}let Y=i0(Q);if(!Y)return $.json({error:"Unauthorized"},401);let X;try{X=G0(Q)}catch{return $.json({error:"Organization scope required"},403)}let J=$.req.param("virtualMcpId"),G=$.req.param("branch");if(!J||!G)return $.json({error:"virtualMcpId and branch are required"},400);try{mc6(G)}catch(L){let w=L instanceof Error?L.message:String(L);return $.json({error:w},400)}let W=await Q.storage.virtualMcps.findById(J);if(!W||W.organization_id!==X.id)return $.json({error:"Virtual MCP not found"},404);let K=Q00({orgId:X.id,virtualMcpId:J,branch:G}),H=await x61(Q,G),F=f61(H,Y),U=Z58({userId:F,projectRef:K}),N=W.metadata??null,B=await pc6($,{claimName:U,branch:G,virtualMcpId:J,sandboxUserId:F,virtualMcpMetadata:N,branchThread:H});if(B==="cms")return $.set("vmClaim",{claimName:U,callerUserId:Y,runner:null,virtualMcpId:J,branch:G,userId:F,projectRef:K,virtualMcpMetadata:N,connectionIds:W.connections?.map((L)=>L.connection_id)??[],runtime:B}),Z();let O;try{O=await kX(Q)}catch{O=null}if(!O)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:U,callerUserId:Y,runner:O,virtualMcpId:J,branch:G,userId:F,projectRef:K,virtualMcpMetadata:N,connectionIds:W.connections?.map((L)=>L.connection_id)??[],runtime:B}),Z()});yS0=new Map;Z9={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};W98=["clone","install","start"]});function F98($,Z,Q){let Y=MN1.get($);if(!Y)Y={pending:null,running:!1},MN1.set($,Y);if(!Y.pending)Y.pending={set:new Map,del:new Set,deps:Z,resolvers:[],rejecters:[]};let X=Y.pending;X.deps=Z;for(let[G,W]of Object.entries(Q.set??{}))X.set.set(G,W),X.del.delete(G);for(let G of Q.delete??[])X.del.add(G),X.set.delete(G);let J=new Promise((G,W)=>{X.resolvers.push(G),X.rejecters.push(W)});if(!Y.running)sc6($,Y);return J}async function sc6($,Z){Z.running=!0;try{while(Z.pending){let Q=Z.pending;Z.pending=null;try{let Y=await ac6(Q);for(let X of Q.resolvers)X(Y)}catch(Y){for(let X of Q.rejecters)X(Y)}}}finally{if(Z.running=!1,!Z.pending)MN1.delete($)}}async function ac6($){let{client:Z,branch:Q,packagePath:Y}=$.deps,X=new Map;for(let J=0;;J++){let G=await ii(Z,Q),W=await Z.listDecofileEntries(G,Y),K=wN1(W,Y),H=[],F=new Map(K.map((N)=>[N.path,{stem:N.stem,sha:N.sha}]));for(let[N,B]of $.set){let O=jN1(K,N),L=`${JSON.stringify(B,null,2)}
3695
- `;await n58(Z.repo,L);let w=O[0]??`${CS0(Y)}/${FN1(N)}.json`;H.push({path:w,content:L});let j=w.slice(w.lastIndexOf("/")+1,-5);F.set(w,{stem:j,content:L});for(let E of O.slice(1))H.push({path:E,deleted:!0}),F.delete(E)}for(let N of $.del)for(let B of jN1(K,N))H.push({path:B,deleted:!0}),F.delete(B);if(H.length===0)return G;let U=Y?`${Y}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((N)=>N.type==="blob"&&N.path===U)){let N=await t58(Z,F.values(),X),{decofile:B,skipped:O}=k40(N);if(O.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:nK(Z.repo),branch:Q,packagePath:Y,blocks:O.map((L)=>L.key)});H.push({path:U,content:B})}try{let{sha:N}=await Z.commitFiles({branch:Q,message:ec6($),expectedHead:G,changes:H});return N}catch(N){if(!(N instanceof o6)||J>=rc6-1)throw N;await h$(X7(2000,200,J,2,0.5))}}}function ec6($){let Z=(X)=>{let J=X.slice(0,3).join(", ");return X.length>3?`${J} (+${X.length-3} more)`:J},Q=[];if($.set.size>0)Q.push(`update ${Z([...$.set.keys()])}`);if($.del.size>0)Q.push(`delete ${Z([...$.del])}`);let Y=`chore(decofile): ${Q.join("; ")}`;return H81(Y,$.deps.coAuthor)}var rc6=3,MN1;var U98=D(()=>{IK0();qS0();W6();K8();oZ();_S0();MN1=new Map});import{createHmac as N98,randomBytes as $m6,timingSafeEqual as Zm6}from"crypto";function B98(){if(hS0)return hS0;let $;try{let Z=E0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return hS0=$?Buffer.from($):$m6(32),hS0}function IN1($){let Z=$.nowMs??Date.now(),Q={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+Qm6)/1000)},Y=Buffer.from(JSON.stringify(Q)).toString("base64url"),X=N98("sha256",B98()).update(Y).digest("base64url");return`${Y}.${X}`}function D98($,Z){let Q=$.indexOf(".");if(Q<0)return!1;let Y=$.slice(0,Q),X=Buffer.from($.slice(Q+1)),J=Buffer.from(N98("sha256",B98()).update(Y).digest("base64url"));if(X.length!==J.length||!Zm6(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 Qm6=21600000,hS0=null;var O98=D(()=>{W$()});function uS0($){return $&&typeof $==="object"&&!Array.isArray($)?$:null}function Ym6($){for(let[Z,Q]of Object.entries($)){if(!Z.startsWith("collections/blog/posts/"))continue;let Y=uS0(Q)?.__resolveType;if(typeof Y==="string"&&Y)return Y}return"blog/loaders/Blogpost.ts"}function L98($){let Z;try{Z=uS0(JSON.parse($))}catch{return $}if(!Z)return $;let Q=Ym6(Z),Y={...Z},X=0;for(let[J,G]of Object.entries(Z)){if(!J.startsWith("blog-manager/posts/"))continue;let W=uS0(G),K=W&&uS0(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 ni}from"zod";function Jm6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&Xm6.test($)}function z98($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function g40($){let Z=$.get("decofileScope");return yc($.var.studioContext,Z.organizationId,Z.repository)}function h40($,Z){let Q=Z instanceof Error?Z.message:String(Z);if(Z instanceof o6)return $.json({error:Q},409);let Y=LW(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 A98(){let $=new e0;return $.use("/:virtualMcpId/:branch",P98),$.use("/:virtualMcpId/:branch/*",P98),$.get("/:virtualMcpId/:branch",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await g40(Z),X=await o58(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(L98(X.decofile),200,{...J,"content-type":"application/json"});let G=IN1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.body(`{"version":${JSON.stringify(X.sha)},"token":${JSON.stringify(G)},"apiHost":${JSON.stringify(z98(Z))},"decofile":${X.decofile}}`,200,{...J,"content-type":"application/json"})}catch(Y){return h40(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 g40(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 h40(Z,X)}}),$.patch("/:virtualMcpId/:branch",Wm6,async(Z)=>{let Q=Z.get("decofileScope"),Y=Z.var.studioContext,X=Km6.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=S40(X.data)}catch(G){if(G instanceof C40)return Z.json({error:G.message},400);throw G}for(let G of[...Object.keys(J.set??{}),...J.delete??[]])try{RS0(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(HN1(G))return Z.json({error:`Block key "${G}" collides with a framework resolver module and cannot be written`},400)}try{let G=await g40(Z),W=await F98(`${Q.organizationId}/${Q.virtualMcpId}/${Q.branch}`,{client:G,branch:Q.branch,packagePath:Q.packagePath,coAuthor:li(Y)},J),K=IN1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.json({version:W,token:K,apiHost:z98(Z)})}catch(G){return h40(Z,G)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await g40(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(LW(W)!==409)throw W;await fS0(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(LW(G)===409)return Z.json({error:"merge-conflict"},409);if(LW(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 h40(Z,Y)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await g40(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(LW(J)===404)return Z.json({baseBranch:X,aheadBy:0,behindBy:0});throw J}}catch(Y){return h40(Z,Y)}}),$}var Xm6,w98=500,j98=1048576,E98=1024,Gm6=8388608,Wm6,Km6,P98;var T98=D(()=>{jT0();qS0();Q8();cW();eU1();TS0();TN1();oZ();U98();O98();PN1();_S0();pK();Xm6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;Wm6=k5({maxSize:Gm6,onError:($)=>$.json({error:"Payload too large"},413)}),Km6=ni.object({set:ni.record(ni.string(),ni.unknown()).optional(),delete:ni.array(ni.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}).refine(($)=>Object.keys($.set??{}).length+($.delete?.length??0)<=w98,{message:`Patch cannot touch more than ${w98} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=j98),{message:`Each block must be at most ${j98} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=E98),{message:`Each block key must be at most ${E98} characters`}),P98=AS0(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(!Jm6(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||!D98(B,{organizationId:Y.id,virtualMcpId:X,branch:J}))return $.json({error:"Unauthorized"},401)}if(!await OJ(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(!Mm(K))return $.json({error:"Project has no preview server configured"},404);let F=W.connections?.map((B)=>B.connection_id)??[],U=f40(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 R98=($)=>{let Z=new e0;if(Z.use("*",ji),Z.use("*",o18),Z.route("/",n18($.voiceSessions)),Z.route("/",Ck0()),Z.route("/",C$8()),Z.route("/",w$8()),Z.route("/",u68()),Z.route("/",c68()),Z.route("/",_68()),Z.route("/",g68()),Z.route("/",b68()),Z.route("/",ES0()),Z.route("/tools",o68()),Z.route("/",p68()),Z.route("/",F68({kvStorage:$.kvStorage})),Z.route("/",K68()),Z.route("/fs",T68({getConnection:$.getNatsConnection})),Z.route("/sandbox",K98()),Z.route("/decofile",A98()),Z.route("/",k68()),Z.route("/",q68()),Z.route("/deco-sites",vk0()),Z.route("/hosting",G$8()),Z.route("/monitor",B$8()),Z.route("/sso",Mk0()),Z.route("/",PS0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",Z$8()),$.mountDevAssets)Z.route("/dev-assets",yk0({orgFromPath:!0}));return Z.use("/mcp/:connectionId?",$.mcpAuth),Z.use("/mcp/:connectionId/ui-resource",$.mcpAuth),Z.use("/mcp/gateway/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/virtual-mcp/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/self",$.mcpAuth),Z.use("/mcp/task-run/:threadId",$.mcpAuth),Z.route("/",$e$()),Z.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",$.betterAuthProtectedResourceHandler),Z.get("/mcp/.well-known/oauth-protected-resource",$.betterAuthProtectedResourceHandler),Z.route("/mcp/task-run",I68()),Z.route("/mcp",Rq0()),Z.route("/mcp/self",OS0()),Z.route("/mcp",Iq0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var q98=D(()=>{Q8();t18();r18();Dk0();Q$8();PF1();W$8();D$8();gk0();IE();OF1();qF1();H68();U68();R68();M68();z$0();WF1();Vq0();dU1();V68();S68();v68();x68();nU1();l68();m68();n68();tU1();r68();oU1();qq0();H98();T98()});import{z as M98}from"zod";class VN1{config;constructor($){this.config=$}async request($,Z,Q){let Y=await fetch(`https://api.elevenlabs.io/v1${$}`,{method:"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 createTranscriptionToken(){let $=await this.request("/single-use-token/realtime_scribe",{},AbortSignal.timeout(15000));return M98.object({token:M98.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 I98=()=>{};import{createHmac as Hm6,timingSafeEqual as Fm6}from"crypto";import{z as ti}from"zod";function k98($,Z){if(!Z)throw Error("Voice requires a shared authentication secret");return Hm6("sha256",Z).update(`studio-voice-session:v1:${$}`).digest("base64url")}function S98($,Z){let Q=Buffer.from(JSON.stringify(V98.parse($))).toString("base64url");return`${Q}.${k98(Q,Z)}`}function C98($,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(k98(X,Z)),W=Buffer.from(J);if(W.length!==G.length||!Fm6(W,G))return null;try{let K=V98.safeParse(JSON.parse(Buffer.from(X,"base64url").toString()));if(!K.success||K.data.expiresAt<=Q||K.data.expiresAt>Q+g00)return null;return K.data}catch{return null}}var V98;var _98=D(()=>{Om();V98=ti.object({sessionId:ti.string().uuid(),organizationId:ti.string().min(1).max(256),userId:ti.string().min(1).max(256),threadId:ti.string().min(1).max(256),expiresAt:ti.number().int().positive()})});import{createHash as Um6}from"crypto";import{z as u40}from"zod";function lS0($){return`user.${Um6("sha256").update(JSON.stringify([$.organizationId,$.userId])).digest("hex")}`}class SN1{deps;kvPromise;constructor($){this.deps=$}kv(){let $=this.deps.getConnection();if(!$||$.isClosed())throw new g1(503,{message:"Voice transport is unavailable"});return this.kvPromise??=new b98.Kvm(cS0.jetstream($)).create("STUDIO_VOICE_SESSIONS",{storage:cS0.StorageType.Memory,ttl:x98.nanos(g00),max_bytes:10485760}).catch((Z)=>{throw this.kvPromise=void 0,Z}),this.kvPromise}adapter(){if(!this.deps.adapter)throw new g1(503,{message:"Voice is not configured on this deployment"});return this.deps.adapter}async create($){let Z=this.adapter(),Q={...$,sessionId:crypto.randomUUID(),expiresAt:Date.now()+g00},Y=S98(Q,this.deps.secret),X=await this.kv(),J=lS0(Q),G=await X.get(J),W=G?.operation==="PUT"?kN1.parse(G.json()):null,K=v98.encode(JSON.stringify({sessionId:Q.sessionId,expiresAt:Q.expiresAt,characters:0,requests:0}));try{if(G&&W&&W.expiresAt<=Date.now())await X.update(J,K,G.revision);else await X.create(J,K)}catch{throw new g1(409,{message:"Close your other voice session before starting a new one"})}try{let H=await Z.createTranscriptionToken();return{token:Y,transcriptionToken:H,expiresAt:Q.expiresAt}}catch(H){throw await this.release(Q),H}}authorize($,Z){let Q=C98(Z,this.deps.secret);if(!Q||Q.organizationId!==$.organizationId||Q.userId!==$.userId||Q.threadId!==$.threadId)throw new g1(403,{message:"Invalid voice session"});return Q}async speak($,Z,Q,Y){let X=this.authorize($,Z),J=await this.kv(),G=lS0(X);for(let W=0;;W++){let K=await J.get(G),H=K?.operation==="PUT"?kN1.parse(K.json()):null;if(!K||!H||H.sessionId!==X.sessionId||H.expiresAt<=Date.now())throw new g1(403,{message:"Voice session expired"});if(H.characters+Q.length>24000||H.requests>=120)throw new g1(429,{message:"Voice session speech limit reached"});try{await J.update(G,v98.encode(JSON.stringify({...H,characters:H.characters+Q.length,requests:H.requests+1})),K.revision);break}catch{if(W>=2)throw new g1(409,{message:"Voice session is busy"})}}return this.adapter().synthesize(Q,Y)}async release($){let Z=await this.kv(),Q=await Z.get(lS0($));if(Q?.operation==="PUT"&&kN1.parse(Q.json()).sessionId===$.sessionId)await Z.delete(lS0($),{previousSeq:Q.revision})}async revoke($,Z){await this.release(this.authorize($,Z))}}var cS0,b98,x98,kN1,v98;var f98=D(()=>{EG();Om();_98();cS0=C(gH(),1),b98=C(Fc(),1),x98=C(ay(),1),kN1=u40.object({sessionId:u40.string().uuid(),expiresAt:u40.number(),characters:u40.number().int().nonnegative(),requests:u40.number().int().nonnegative()}),v98=new TextEncoder});function Nm6($){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 Bm6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},y98=()=>{let $=new e0;return $.use("*",Bm6),$.get("/",async(Z)=>{let Q=E0(),Y=Q.decoSupabaseUrl,X=Q.decoSupabaseServiceKey;if(!Y||!X)return Z.json({apps:[]});try{let J=await iJ(Y,X,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:Nm6(J)})}catch(J){return console.error("[deco-apps] GET error:",J),Z.json({error:"Failed to fetch apps"},502)}}),$};var g98=D(()=>{Q8();W$();PV0()});import{z as x1}from"zod";function ZN($,Z="invalid_request_error",Q=null,Y=null){return{error:{message:$,type:Z,param:Q,code:Y}}}function Tm6($){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 Rm6($,Z,Q){try{return JSON.parse($)}catch{throw new l98(`Invalid JSON in tool call arguments for function '${Q}' (tool_call_id: ${Z}): ${$}`)}}function qm6($){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:Rm6(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 Mm6($){let Z=$.map((Q)=>{let Y=Q.function.parameters?CF(Q.function.parameters):CF({type:"object",properties:{}});return[Q.function.name,i$({description:Q.function.description,inputSchema:Y})]});return Object.fromEntries(Z)}function Im6($){if(!$)return;return{openai:{response_format:$}}}function Vm6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function h98($,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 u98($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var Dm6=256,Om6,Lm6,wm6,jm6,Em6,Pm6,zm6,Am6,l98,c98,m98;var d98=D(()=>{x4();Q8();ui();wH();Om6=x1.object({type:x1.literal("function"),function:x1.object({name:x1.string(),description:x1.string().optional(),parameters:x1.record(x1.string(),x1.unknown()).optional()})}),Lm6=x1.object({id:x1.string(),type:x1.literal("function"),function:x1.object({name:x1.string(),arguments:x1.string()})}),wm6=x1.discriminatedUnion("role",[x1.object({role:x1.literal("system"),content:x1.string(),name:x1.string().optional()}),x1.object({role:x1.literal("user"),content:x1.union([x1.string(),x1.array(x1.union([x1.object({type:x1.literal("text"),text:x1.string()}),x1.object({type:x1.literal("image_url"),image_url:x1.object({url:x1.string(),detail:x1.string().optional()})})]))]),name:x1.string().optional()}),x1.object({role:x1.literal("assistant"),content:x1.string().nullable().optional(),name:x1.string().optional(),tool_calls:x1.array(Lm6).optional()}),x1.object({role:x1.literal("tool"),content:x1.string(),tool_call_id:x1.string()})]),jm6=x1.object({type:x1.literal("text")}),Em6=x1.object({type:x1.literal("json_object")}),Pm6=x1.object({type:x1.literal("json_schema"),json_schema:x1.object({name:x1.string(),description:x1.string().optional(),schema:x1.record(x1.string(),x1.unknown()),strict:x1.boolean().optional()})}),zm6=x1.union([jm6,Em6,Pm6]),Am6=x1.object({model:x1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:x1.array(wm6),stream:x1.boolean().optional().default(!1),temperature:x1.number().min(0).max(2).optional(),max_tokens:x1.number().positive().optional(),top_p:x1.number().min(0).max(1).optional(),frequency_penalty:x1.number().min(-2).max(2).optional(),presence_penalty:x1.number().min(-2).max(2).optional(),stop:x1.union([x1.string(),x1.array(x1.string())]).optional(),tools:x1.array(Om6).optional(),tool_choice:x1.union([x1.literal("auto"),x1.literal("none"),x1.literal("required"),x1.object({type:x1.literal("function"),function:x1.object({name:x1.string()})})]).optional(),response_format:zm6.optional(),user:x1.string().optional()});l98=class l98 extends Error{constructor($){super($);this.name="MessageConversionError"}};c98=new e0;c98.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),Q=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(ZN("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(ZN("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(ZN("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Y=await $.req.json(),X=Am6.safeParse(Y);if(!X.success){let w=X.error.issues[0]??{message:"Invalid request",path:[]};return $.json(ZN(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let J=X.data,G=Tm6(J.model);if(!G)return $.json(ZN("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)=>nP(E.providerId));if(!j)return $.json(ZN("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(ZN(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),U=qm6(J.messages),N=J.tools?Mm6(J.tools):void 0,B=Im6(J.response_format),O=Vm6(),L=Math.floor(Date.now()/1000);if(J.stream)return nD($,async(w)=>{let j=h98(F,U,N,J,B,$.req.raw.signal);try{let E=Rm(j),P=!1,T=0,z="",A=async()=>{if(z.length===0)return;let q=z;z="",await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{content:q},finish_reason:null}]})})};for await(let q of E.stream){if(!P&&(q.type==="text-delta"||q.type==="tool-call"))await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),P=!0;if(q.type==="text-delta"){if(z+=q.text,z.length>=Dm6)await A()}else if(q.type==="tool-call"){await A();let x=T++;await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{tool_calls:[{index:x,id:q.toolCallId,type:"function",function:{name:q.toolName,arguments:JSON.stringify(q.input)}}]},finish_reason:null}]})})}else if(q.type==="finish")await A(),await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{},finish_reason:u98(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=h98(F,U,N,J,B,$.req.raw.signal),j=await PU(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:O,object:"chat.completion",created:L,model:J.model,choices:[{index:0,message:E,finish_reason:u98(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(ZN("Request aborted","invalid_request_error"),400);if(X.name==="MessageConversionError")return $.json(ZN(X.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",X.message,X.stack),$.json(ZN(X.message,"server_error"),500)}});m98=c98});function km6($){if(typeof $!=="object"||$===null)return!1;let Q=$.repository?.url;return typeof Q==="string"&&Q.length>0}function i98(){let $=new e0;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=i0(Q);if(!Y)return Z.json({error:"Authentication required"},401);let J=(Z.req.query("site")??"").trim().toLowerCase();if(!BZ(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||T9(H))continue;let F=await Q.storage.virtualMcps.list(H.id);for(let U of F){if(d2(U)!==J)continue;if(!km6(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 p98=D(()=>{Q8();mG()});var t98;var n98=D(()=>{t98={name:"decocms",version:"4.415.5",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^4.0.58","@ai-sdk/google":"^4.0.76","@ai-sdk/openai":"^4.0.71","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^3.1.0","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^4.0.17","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^7.0.107","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function _m6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??Cm6}}var o98,Cm6="https://ph.studio.decocms.com",r98;var s98=D(()=>{Q8();xr();Df();z9();W$();nH1();n98();o98=new e0;o98.get("/",($)=>{let Z={version:t98.version,theme:v8$(),...CK().logo&&{logo:CK().logo},...jD()&&{internalUrl:Fd1()},...E0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!E0().firecrawlApiKey,hostingEnabled:!!E0().controlplaneRestUrl&&!!E0().controlplaneServiceToken,hostingControlPlaneGa:E0().hostingControlPlaneGa,monitorEnabled:!!E0().clickhouseAnalyticsUrl&&!!E0().clickhouseAnalyticsPassword,monitorGa:E0().monitorGa,plansEnabled:E0().plansEnabled,auth:d08(),posthog:_m6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:JO()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});r98=o98});function Ry($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function CN1($){return(Ry($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((Q)=>Q.charAt(0).toUpperCase()+Q.slice(1)).join(" ")}function a98($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Ry($))}&sz=${Z}`}function vm6($,Z){let Q=$.trim();if(Q.length<=Z)return Q;let Y=Q.slice(0,Z-1),X=Y.lastIndexOf(" ");return`${(X>Z*0.6?Y.slice(0,X):Y).trimEnd()}\u2026`}function e98($){let{brand:Z,domain:Q,score:Y}=$,X=typeof Y==="number"?`${Z} Deco Score \u2014 ${Math.round(Y)}/100 \xB7 decocms`:`${Z} Deco Score \xB7 decocms`,J=vm6(`How does ${Q} really perform? See the full ${Z} Deco Score \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,200);return{title:X,description:J}}import{z as w$}from"zod";var bm6,$Z8;var ZZ8=D(()=>{bm6=w$.object({check_id:w$.string(),title:w$.string(),description:w$.string().optional(),impact:w$.string().optional(),why:w$.string().optional(),category:w$.string(),severity:w$.string(),value_band:w$.string().optional(),value_driver:w$.string().optional(),controllability:w$.string().optional(),pages:w$.array(w$.string()),tasks:w$.array(w$.string()),evidence:w$.string(),sample_scope:w$.string().optional(),sources:w$.array(w$.string())}),$Z8=w$.object({domain:w$.string(),brand:w$.string(),favicon:w$.string().optional(),scanned_at:w$.string().nullable(),lang:w$.string(),score:w$.number().nullable(),band:w$.string().nullable(),totals:w$.object({measured:w$.number(),registry_total:w$.number(),passed:w$.number(),failed:w$.number(),blocked:w$.number()}),buckets:w$.array(w$.object({id:w$.enum(["critical","important","worth"]),label:w$.string(),items:w$.array(bm6)})),passing:w$.object({count:w$.number(),items:w$.array(w$.object({check_id:w$.string(),title:w$.string()}))}),not_measured:w$.object({count:w$.number(),groups:w$.array(w$.object({reason:w$.string(),label:w$.string(),count:w$.number(),checks:w$.array(w$.string())}))}),categories:w$.array(w$.object({key:w$.string(),label:w$.string(),score:w$.number().nullable(),band:w$.string().nullable(),pass:w$.number(),fail:w$.number()})),screenshots:w$.array(w$.object({url:w$.string(),page_type:w$.string().optional(),viewport:w$.enum(["desktop","mobile"]),image_url:w$.string()}))})});function QZ8($,Z,Q){let Y=Q?`?${new URLSearchParams({lang:Q}).toString()}`:"";return`${WW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}/onepager${Z}${Y}`}async function mS0($,Z={}){let Q=await fetch(QZ8($,"",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 $Z8.parse(await Q.json())}async function YZ8($,Z={}){let Q=await fetch(QZ8($,".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 _N1=D(()=>{ZZ8();IB()});import{join as XZ8}from"path";async function fm6($){try{let Z=await mS0($,{signal:AbortSignal.timeout(xm6)});if(!Z?.scanned_at)return null;return{brand:Z.brand.trim()||CN1($),...Z.score!==null?{score:Z.score}:{}}}catch{return null}}function oJ($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function ym6($,Z){let Q=Ry($),Y=Z?.brand?.trim()||CN1(Q),X=a98(Q,128),G=`${(E0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(Q)}`,{title:W,description:K}=e98({brand:Y,domain:Q,score:Z?.score}),H=`${G}/og.png`,F=`${Y} Deco Score by decocms`;return[`<title>${oJ(W)}</title>`,`<meta name="description" content="${oJ(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="${oJ(W)}" />`,`<meta property="og:description" content="${oJ(K)}" />`,`<meta property="og:url" content="${oJ(G)}" />`,`<meta property="og:image" content="${oJ(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${oJ(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${oJ(W)}" />`,`<meta name="twitter:description" content="${oJ(K)}" />`,`<meta name="twitter:image" content="${oJ(H)}" />`,`<meta name="twitter:image:alt" content="${oJ(F)}" />`,`<link rel="canonical" href="${oJ(G)}" />`,`<link rel="alternate" type="text/markdown" href="${oJ(G)}.md" />`,`<link rel="icon" href="${oJ(X)}" sizes="any" />`].join(`
3695
+ `;await n58(Z.repo,L);let w=O[0]??`${CS0(Y)}/${FN1(N)}.json`;H.push({path:w,content:L});let j=w.slice(w.lastIndexOf("/")+1,-5);F.set(w,{stem:j,content:L});for(let E of O.slice(1))H.push({path:E,deleted:!0}),F.delete(E)}for(let N of $.del)for(let B of jN1(K,N))H.push({path:B,deleted:!0}),F.delete(B);if(H.length===0)return G;let U=Y?`${Y}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((N)=>N.type==="blob"&&N.path===U)){let N=await t58(Z,F.values(),X),{decofile:B,skipped:O}=k40(N);if(O.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:nK(Z.repo),branch:Q,packagePath:Y,blocks:O.map((L)=>L.key)});H.push({path:U,content:B})}try{let{sha:N}=await Z.commitFiles({branch:Q,message:ec6($),expectedHead:G,changes:H});return N}catch(N){if(!(N instanceof o6)||J>=rc6-1)throw N;await h$(X7(2000,200,J,2,0.5))}}}function ec6($){let Z=(X)=>{let J=X.slice(0,3).join(", ");return X.length>3?`${J} (+${X.length-3} more)`:J},Q=[];if($.set.size>0)Q.push(`update ${Z([...$.set.keys()])}`);if($.del.size>0)Q.push(`delete ${Z([...$.del])}`);let Y=`chore(decofile): ${Q.join("; ")}`;return H81(Y,$.deps.coAuthor)}var rc6=3,MN1;var U98=D(()=>{IK0();qS0();W6();K8();oZ();_S0();MN1=new Map});import{createHmac as N98,randomBytes as $m6,timingSafeEqual as Zm6}from"crypto";function B98(){if(hS0)return hS0;let $;try{let Z=E0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return hS0=$?Buffer.from($):$m6(32),hS0}function IN1($){let Z=$.nowMs??Date.now(),Q={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+Qm6)/1000)},Y=Buffer.from(JSON.stringify(Q)).toString("base64url"),X=N98("sha256",B98()).update(Y).digest("base64url");return`${Y}.${X}`}function D98($,Z){let Q=$.indexOf(".");if(Q<0)return!1;let Y=$.slice(0,Q),X=Buffer.from($.slice(Q+1)),J=Buffer.from(N98("sha256",B98()).update(Y).digest("base64url"));if(X.length!==J.length||!Zm6(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 Qm6=21600000,hS0=null;var O98=D(()=>{W$()});function uS0($){return $&&typeof $==="object"&&!Array.isArray($)?$:null}function Ym6($){for(let[Z,Q]of Object.entries($)){if(!Z.startsWith("collections/blog/posts/"))continue;let Y=uS0(Q)?.__resolveType;if(typeof Y==="string"&&Y)return Y}return"blog/loaders/Blogpost.ts"}function L98($){let Z;try{Z=uS0(JSON.parse($))}catch{return $}if(!Z)return $;let Q=Ym6(Z),Y={...Z},X=0;for(let[J,G]of Object.entries(Z)){if(!J.startsWith("blog-manager/posts/"))continue;let W=uS0(G),K=W&&uS0(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 ni}from"zod";function Jm6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&Xm6.test($)}function z98($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function g40($){let Z=$.get("decofileScope");return yc($.var.studioContext,Z.organizationId,Z.repository)}function h40($,Z){let Q=Z instanceof Error?Z.message:String(Z);if(Z instanceof o6)return $.json({error:Q},409);let Y=LW(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 A98(){let $=new e0;return $.use("/:virtualMcpId/:branch",P98),$.use("/:virtualMcpId/:branch/*",P98),$.get("/:virtualMcpId/:branch",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await g40(Z),X=await o58(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(L98(X.decofile),200,{...J,"content-type":"application/json"});let G=IN1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.body(`{"version":${JSON.stringify(X.sha)},"token":${JSON.stringify(G)},"apiHost":${JSON.stringify(z98(Z))},"decofile":${X.decofile}}`,200,{...J,"content-type":"application/json"})}catch(Y){return h40(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 g40(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 h40(Z,X)}}),$.patch("/:virtualMcpId/:branch",Wm6,async(Z)=>{let Q=Z.get("decofileScope"),Y=Z.var.studioContext,X=Km6.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=S40(X.data)}catch(G){if(G instanceof C40)return Z.json({error:G.message},400);throw G}for(let G of[...Object.keys(J.set??{}),...J.delete??[]])try{RS0(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(HN1(G))return Z.json({error:`Block key "${G}" collides with a framework resolver module and cannot be written`},400)}try{let G=await g40(Z),W=await F98(`${Q.organizationId}/${Q.virtualMcpId}/${Q.branch}`,{client:G,branch:Q.branch,packagePath:Q.packagePath,coAuthor:li(Y)},J),K=IN1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.json({version:W,token:K,apiHost:z98(Z)})}catch(G){return h40(Z,G)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await g40(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(LW(W)!==409)throw W;await fS0(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(LW(G)===409)return Z.json({error:"merge-conflict"},409);if(LW(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 h40(Z,Y)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await g40(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(LW(J)===404)return Z.json({baseBranch:X,aheadBy:0,behindBy:0});throw J}}catch(Y){return h40(Z,Y)}}),$}var Xm6,w98=500,j98=1048576,E98=1024,Gm6=8388608,Wm6,Km6,P98;var T98=D(()=>{jT0();qS0();Q8();cW();eU1();TS0();TN1();oZ();U98();O98();PN1();_S0();pK();Xm6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;Wm6=k5({maxSize:Gm6,onError:($)=>$.json({error:"Payload too large"},413)}),Km6=ni.object({set:ni.record(ni.string(),ni.unknown()).optional(),delete:ni.array(ni.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}).refine(($)=>Object.keys($.set??{}).length+($.delete?.length??0)<=w98,{message:`Patch cannot touch more than ${w98} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=j98),{message:`Each block must be at most ${j98} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=E98),{message:`Each block key must be at most ${E98} characters`}),P98=AS0(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(!Jm6(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||!D98(B,{organizationId:Y.id,virtualMcpId:X,branch:J}))return $.json({error:"Unauthorized"},401)}if(!await OJ(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(!Mm(K))return $.json({error:"Project has no preview server configured"},404);let F=W.connections?.map((B)=>B.connection_id)??[],U=f40(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 R98=($)=>{let Z=new e0;if(Z.use("*",ji),Z.use("*",o18),Z.route("/",n18($.voiceSessions)),Z.route("/",Ck0()),Z.route("/",C$8()),Z.route("/",w$8()),Z.route("/",u68()),Z.route("/",c68()),Z.route("/",_68()),Z.route("/",g68()),Z.route("/",b68()),Z.route("/",ES0()),Z.route("/tools",o68()),Z.route("/",p68()),Z.route("/",F68({kvStorage:$.kvStorage})),Z.route("/",K68()),Z.route("/fs",T68({getConnection:$.getNatsConnection})),Z.route("/sandbox",K98()),Z.route("/decofile",A98()),Z.route("/",k68()),Z.route("/",q68()),Z.route("/deco-sites",vk0()),Z.route("/hosting",G$8()),Z.route("/monitor",B$8()),Z.route("/sso",Mk0()),Z.route("/",PS0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",Z$8()),$.mountDevAssets)Z.route("/dev-assets",yk0({orgFromPath:!0}));return Z.use("/mcp/:connectionId?",$.mcpAuth),Z.use("/mcp/:connectionId/ui-resource",$.mcpAuth),Z.use("/mcp/gateway/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/virtual-mcp/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/self",$.mcpAuth),Z.use("/mcp/task-run/:threadId",$.mcpAuth),Z.route("/",$e$()),Z.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",$.betterAuthProtectedResourceHandler),Z.get("/mcp/.well-known/oauth-protected-resource",$.betterAuthProtectedResourceHandler),Z.route("/mcp/task-run",I68()),Z.route("/mcp",Rq0()),Z.route("/mcp/self",OS0()),Z.route("/mcp",Iq0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var q98=D(()=>{Q8();t18();r18();Dk0();Q$8();PF1();W$8();D$8();gk0();IE();OF1();qF1();H68();U68();R68();M68();z$0();WF1();Vq0();dU1();V68();S68();v68();x68();nU1();l68();m68();n68();tU1();r68();oU1();qq0();H98();T98()});import{z as M98}from"zod";class VN1{config;constructor($){this.config=$}async request($,Z,Q){let Y=await fetch(`https://api.elevenlabs.io/v1${$}`,{method:"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 createTranscriptionToken(){let $=await this.request("/single-use-token/realtime_scribe",{},AbortSignal.timeout(15000));return M98.object({token:M98.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 I98=()=>{};import{createHmac as Hm6,timingSafeEqual as Fm6}from"crypto";import{z as ti}from"zod";function k98($,Z){if(!Z)throw Error("Voice requires a shared authentication secret");return Hm6("sha256",Z).update(`studio-voice-session:v1:${$}`).digest("base64url")}function S98($,Z){let Q=Buffer.from(JSON.stringify(V98.parse($))).toString("base64url");return`${Q}.${k98(Q,Z)}`}function C98($,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(k98(X,Z)),W=Buffer.from(J);if(W.length!==G.length||!Fm6(W,G))return null;try{let K=V98.safeParse(JSON.parse(Buffer.from(X,"base64url").toString()));if(!K.success||K.data.expiresAt<=Q||K.data.expiresAt>Q+g00)return null;return K.data}catch{return null}}var V98;var _98=D(()=>{Om();V98=ti.object({sessionId:ti.string().uuid(),organizationId:ti.string().min(1).max(256),userId:ti.string().min(1).max(256),threadId:ti.string().min(1).max(256),expiresAt:ti.number().int().positive()})});import{createHash as Um6}from"crypto";import{z as u40}from"zod";function lS0($){return`user.${Um6("sha256").update(JSON.stringify([$.organizationId,$.userId])).digest("hex")}`}class SN1{deps;kvPromise;constructor($){this.deps=$}kv(){let $=this.deps.getConnection();if(!$||$.isClosed())throw new g1(503,{message:"Voice transport is unavailable"});return this.kvPromise??=new b98.Kvm(cS0.jetstream($)).create("STUDIO_VOICE_SESSIONS",{storage:cS0.StorageType.Memory,ttl:x98.nanos(g00),max_bytes:10485760}).catch((Z)=>{throw this.kvPromise=void 0,Z}),this.kvPromise}adapter(){if(!this.deps.adapter)throw new g1(503,{message:"Voice is not configured on this deployment"});return this.deps.adapter}async create($){let Z=this.adapter(),Q={...$,sessionId:crypto.randomUUID(),expiresAt:Date.now()+g00},Y=S98(Q,this.deps.secret),X=await this.kv(),J=lS0(Q),G=await X.get(J),W=G?.operation==="PUT"?kN1.parse(G.json()):null,K=v98.encode(JSON.stringify({sessionId:Q.sessionId,expiresAt:Q.expiresAt,characters:0,requests:0}));try{if(G&&W&&W.expiresAt<=Date.now())await X.update(J,K,G.revision);else await X.create(J,K)}catch{throw new g1(409,{message:"Close your other voice session before starting a new one"})}try{let H=await Z.createTranscriptionToken();return{token:Y,transcriptionToken:H,expiresAt:Q.expiresAt}}catch(H){throw await this.release(Q),H}}authorize($,Z){let Q=C98(Z,this.deps.secret);if(!Q||Q.organizationId!==$.organizationId||Q.userId!==$.userId||Q.threadId!==$.threadId)throw new g1(403,{message:"Invalid voice session"});return Q}async speak($,Z,Q,Y){let X=this.authorize($,Z),J=await this.kv(),G=lS0(X);for(let W=0;;W++){let K=await J.get(G),H=K?.operation==="PUT"?kN1.parse(K.json()):null;if(!K||!H||H.sessionId!==X.sessionId||H.expiresAt<=Date.now())throw new g1(403,{message:"Voice session expired"});if(H.characters+Q.length>24000||H.requests>=120)throw new g1(429,{message:"Voice session speech limit reached"});try{await J.update(G,v98.encode(JSON.stringify({...H,characters:H.characters+Q.length,requests:H.requests+1})),K.revision);break}catch{if(W>=2)throw new g1(409,{message:"Voice session is busy"})}}return this.adapter().synthesize(Q,Y)}async release($){let Z=await this.kv(),Q=await Z.get(lS0($));if(Q?.operation==="PUT"&&kN1.parse(Q.json()).sessionId===$.sessionId)await Z.delete(lS0($),{previousSeq:Q.revision})}async revoke($,Z){await this.release(this.authorize($,Z))}}var cS0,b98,x98,kN1,v98;var f98=D(()=>{EG();Om();_98();cS0=C(gH(),1),b98=C(Fc(),1),x98=C(ay(),1),kN1=u40.object({sessionId:u40.string().uuid(),expiresAt:u40.number(),characters:u40.number().int().nonnegative(),requests:u40.number().int().nonnegative()}),v98=new TextEncoder});function Nm6($){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 Bm6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},y98=()=>{let $=new e0;return $.use("*",Bm6),$.get("/",async(Z)=>{let Q=E0(),Y=Q.decoSupabaseUrl,X=Q.decoSupabaseServiceKey;if(!Y||!X)return Z.json({apps:[]});try{let J=await iJ(Y,X,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:Nm6(J)})}catch(J){return console.error("[deco-apps] GET error:",J),Z.json({error:"Failed to fetch apps"},502)}}),$};var g98=D(()=>{Q8();W$();PV0()});import{z as x1}from"zod";function ZN($,Z="invalid_request_error",Q=null,Y=null){return{error:{message:$,type:Z,param:Q,code:Y}}}function Tm6($){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 Rm6($,Z,Q){try{return JSON.parse($)}catch{throw new l98(`Invalid JSON in tool call arguments for function '${Q}' (tool_call_id: ${Z}): ${$}`)}}function qm6($){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:Rm6(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 Mm6($){let Z=$.map((Q)=>{let Y=Q.function.parameters?CF(Q.function.parameters):CF({type:"object",properties:{}});return[Q.function.name,i$({description:Q.function.description,inputSchema:Y})]});return Object.fromEntries(Z)}function Im6($){if(!$)return;return{openai:{response_format:$}}}function Vm6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function h98($,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 u98($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var Dm6=256,Om6,Lm6,wm6,jm6,Em6,Pm6,zm6,Am6,l98,c98,m98;var d98=D(()=>{x4();Q8();ui();wH();Om6=x1.object({type:x1.literal("function"),function:x1.object({name:x1.string(),description:x1.string().optional(),parameters:x1.record(x1.string(),x1.unknown()).optional()})}),Lm6=x1.object({id:x1.string(),type:x1.literal("function"),function:x1.object({name:x1.string(),arguments:x1.string()})}),wm6=x1.discriminatedUnion("role",[x1.object({role:x1.literal("system"),content:x1.string(),name:x1.string().optional()}),x1.object({role:x1.literal("user"),content:x1.union([x1.string(),x1.array(x1.union([x1.object({type:x1.literal("text"),text:x1.string()}),x1.object({type:x1.literal("image_url"),image_url:x1.object({url:x1.string(),detail:x1.string().optional()})})]))]),name:x1.string().optional()}),x1.object({role:x1.literal("assistant"),content:x1.string().nullable().optional(),name:x1.string().optional(),tool_calls:x1.array(Lm6).optional()}),x1.object({role:x1.literal("tool"),content:x1.string(),tool_call_id:x1.string()})]),jm6=x1.object({type:x1.literal("text")}),Em6=x1.object({type:x1.literal("json_object")}),Pm6=x1.object({type:x1.literal("json_schema"),json_schema:x1.object({name:x1.string(),description:x1.string().optional(),schema:x1.record(x1.string(),x1.unknown()),strict:x1.boolean().optional()})}),zm6=x1.union([jm6,Em6,Pm6]),Am6=x1.object({model:x1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:x1.array(wm6),stream:x1.boolean().optional().default(!1),temperature:x1.number().min(0).max(2).optional(),max_tokens:x1.number().positive().optional(),top_p:x1.number().min(0).max(1).optional(),frequency_penalty:x1.number().min(-2).max(2).optional(),presence_penalty:x1.number().min(-2).max(2).optional(),stop:x1.union([x1.string(),x1.array(x1.string())]).optional(),tools:x1.array(Om6).optional(),tool_choice:x1.union([x1.literal("auto"),x1.literal("none"),x1.literal("required"),x1.object({type:x1.literal("function"),function:x1.object({name:x1.string()})})]).optional(),response_format:zm6.optional(),user:x1.string().optional()});l98=class l98 extends Error{constructor($){super($);this.name="MessageConversionError"}};c98=new e0;c98.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),Q=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(ZN("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(ZN("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(ZN("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Y=await $.req.json(),X=Am6.safeParse(Y);if(!X.success){let w=X.error.issues[0]??{message:"Invalid request",path:[]};return $.json(ZN(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let J=X.data,G=Tm6(J.model);if(!G)return $.json(ZN("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)=>nP(E.providerId));if(!j)return $.json(ZN("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(ZN(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),U=qm6(J.messages),N=J.tools?Mm6(J.tools):void 0,B=Im6(J.response_format),O=Vm6(),L=Math.floor(Date.now()/1000);if(J.stream)return nD($,async(w)=>{let j=h98(F,U,N,J,B,$.req.raw.signal);try{let E=Rm(j),P=!1,T=0,z="",A=async()=>{if(z.length===0)return;let q=z;z="",await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{content:q},finish_reason:null}]})})};for await(let q of E.stream){if(!P&&(q.type==="text-delta"||q.type==="tool-call"))await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),P=!0;if(q.type==="text-delta"){if(z+=q.text,z.length>=Dm6)await A()}else if(q.type==="tool-call"){await A();let x=T++;await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{tool_calls:[{index:x,id:q.toolCallId,type:"function",function:{name:q.toolName,arguments:JSON.stringify(q.input)}}]},finish_reason:null}]})})}else if(q.type==="finish")await A(),await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{},finish_reason:u98(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=h98(F,U,N,J,B,$.req.raw.signal),j=await PU(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:O,object:"chat.completion",created:L,model:J.model,choices:[{index:0,message:E,finish_reason:u98(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(ZN("Request aborted","invalid_request_error"),400);if(X.name==="MessageConversionError")return $.json(ZN(X.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",X.message,X.stack),$.json(ZN(X.message,"server_error"),500)}});m98=c98});function km6($){if(typeof $!=="object"||$===null)return!1;let Q=$.repository?.url;return typeof Q==="string"&&Q.length>0}function i98(){let $=new e0;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=i0(Q);if(!Y)return Z.json({error:"Authentication required"},401);let J=(Z.req.query("site")??"").trim().toLowerCase();if(!BZ(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||T9(H))continue;let F=await Q.storage.virtualMcps.list(H.id);for(let U of F){if(d2(U)!==J)continue;if(!km6(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 p98=D(()=>{Q8();mG()});var t98;var n98=D(()=>{t98={name:"decocms",version:"4.416.0",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^4.0.58","@ai-sdk/google":"^4.0.76","@ai-sdk/openai":"^4.0.71","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^3.1.0","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^4.0.17","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^7.0.107","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function _m6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??Cm6}}var o98,Cm6="https://ph.studio.decocms.com",r98;var s98=D(()=>{Q8();xr();Df();z9();W$();nH1();n98();o98=new e0;o98.get("/",($)=>{let Z={version:t98.version,theme:v8$(),...CK().logo&&{logo:CK().logo},...jD()&&{internalUrl:Fd1()},...E0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!E0().firecrawlApiKey,hostingEnabled:!!E0().controlplaneRestUrl&&!!E0().controlplaneServiceToken,hostingControlPlaneGa:E0().hostingControlPlaneGa,monitorEnabled:!!E0().clickhouseAnalyticsUrl&&!!E0().clickhouseAnalyticsPassword,monitorGa:E0().monitorGa,plansEnabled:E0().plansEnabled,auth:d08(),posthog:_m6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:JO()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});r98=o98});function Ry($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function CN1($){return(Ry($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((Q)=>Q.charAt(0).toUpperCase()+Q.slice(1)).join(" ")}function a98($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Ry($))}&sz=${Z}`}function vm6($,Z){let Q=$.trim();if(Q.length<=Z)return Q;let Y=Q.slice(0,Z-1),X=Y.lastIndexOf(" ");return`${(X>Z*0.6?Y.slice(0,X):Y).trimEnd()}\u2026`}function e98($){let{brand:Z,domain:Q,score:Y}=$,X=typeof Y==="number"?`${Z} Deco Score \u2014 ${Math.round(Y)}/100 \xB7 decocms`:`${Z} Deco Score \xB7 decocms`,J=vm6(`How does ${Q} really perform? See the full ${Z} Deco Score \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,200);return{title:X,description:J}}import{z as w$}from"zod";var bm6,$Z8;var ZZ8=D(()=>{bm6=w$.object({check_id:w$.string(),title:w$.string(),description:w$.string().optional(),impact:w$.string().optional(),why:w$.string().optional(),category:w$.string(),severity:w$.string(),value_band:w$.string().optional(),value_driver:w$.string().optional(),controllability:w$.string().optional(),pages:w$.array(w$.string()),tasks:w$.array(w$.string()),evidence:w$.string(),sample_scope:w$.string().optional(),sources:w$.array(w$.string())}),$Z8=w$.object({domain:w$.string(),brand:w$.string(),favicon:w$.string().optional(),scanned_at:w$.string().nullable(),lang:w$.string(),score:w$.number().nullable(),band:w$.string().nullable(),totals:w$.object({measured:w$.number(),registry_total:w$.number(),passed:w$.number(),failed:w$.number(),blocked:w$.number()}),buckets:w$.array(w$.object({id:w$.enum(["critical","important","worth"]),label:w$.string(),items:w$.array(bm6)})),passing:w$.object({count:w$.number(),items:w$.array(w$.object({check_id:w$.string(),title:w$.string()}))}),not_measured:w$.object({count:w$.number(),groups:w$.array(w$.object({reason:w$.string(),label:w$.string(),count:w$.number(),checks:w$.array(w$.string())}))}),categories:w$.array(w$.object({key:w$.string(),label:w$.string(),score:w$.number().nullable(),band:w$.string().nullable(),pass:w$.number(),fail:w$.number()})),screenshots:w$.array(w$.object({url:w$.string(),page_type:w$.string().optional(),viewport:w$.enum(["desktop","mobile"]),image_url:w$.string()}))})});function QZ8($,Z,Q){let Y=Q?`?${new URLSearchParams({lang:Q}).toString()}`:"";return`${WW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}/onepager${Z}${Y}`}async function mS0($,Z={}){let Q=await fetch(QZ8($,"",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 $Z8.parse(await Q.json())}async function YZ8($,Z={}){let Q=await fetch(QZ8($,".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 _N1=D(()=>{ZZ8();IB()});import{join as XZ8}from"path";async function fm6($){try{let Z=await mS0($,{signal:AbortSignal.timeout(xm6)});if(!Z?.scanned_at)return null;return{brand:Z.brand.trim()||CN1($),...Z.score!==null?{score:Z.score}:{}}}catch{return null}}function oJ($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function ym6($,Z){let Q=Ry($),Y=Z?.brand?.trim()||CN1(Q),X=a98(Q,128),G=`${(E0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(Q)}`,{title:W,description:K}=e98({brand:Y,domain:Q,score:Z?.score}),H=`${G}/og.png`,F=`${Y} Deco Score by decocms`;return[`<title>${oJ(W)}</title>`,`<meta name="description" content="${oJ(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="${oJ(W)}" />`,`<meta property="og:description" content="${oJ(K)}" />`,`<meta property="og:url" content="${oJ(G)}" />`,`<meta property="og:image" content="${oJ(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${oJ(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${oJ(W)}" />`,`<meta name="twitter:description" content="${oJ(K)}" />`,`<meta name="twitter:image" content="${oJ(H)}" />`,`<meta name="twitter:image:alt" content="${oJ(F)}" />`,`<link rel="canonical" href="${oJ(G)}" />`,`<link rel="alternate" type="text/markdown" href="${oJ(G)}.md" />`,`<link rel="icon" href="${oJ(X)}" sizes="any" />`].join(`
3696
3696
  `)}function gm6($,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}
3697
3697
  </head>`)}function JZ8($){let Z=new e0;return Z.get("/:domain/og.png",async(Q)=>{let Y=Ry(Q.req.param("domain")),X=async()=>{let J=$?Bun.file(XZ8($,"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(`${WW({})}/api/v2/public/diagnostics/${encodeURIComponent(Y)}/og.png`,{signal:AbortSignal.timeout(hm6)}),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=Ry(Q.req.param("file").replace(/\.md$/,""));try{let X=await YZ8(Y,{lang:Q.req.query("lang")?.trim()||void 0,signal:AbortSignal.timeout(um6)});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=$?XZ8($,"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 fm6(Ry(Y)),K=ym6(Y,W);return Q.html(gm6(G,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return Q.html(G)}}),Z}var xm6=2500,hm6=1e4,um6=1e4;var GZ8=D(()=>{Q8();IB();_N1();W$()});function dS0($,Z){return fetch(`${WW({})}${$}`,Z)}async function lm6($,Z){let Q=await mS0($,{lang:Z});if(!Q)return{status:"not_found",report:null};return Q.scanned_at?{status:"ready",report:Q}:{status:"empty",report:null}}function mm6($){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 cm6,oD,WZ8=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},KZ8;var HZ8=D(()=>{Q8();pG();IB();_N1();cm6=new Set(["complete","errored","terminated","unknown"]);oD=new e0;oD.use("*",async($,Z)=>{let Q=await v8.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});oD.use("/link-token/*",WZ8);oD.use("/suggest",WZ8);oD.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 lm6(Z,Q))}catch{return $.json({error:"report read failed"},502)}});oD.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}=mm6(Q);if(!Y)return $.json({error:"domain is required"},400);let J=Z?.email;try{let G=await dS0("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${kw({})}`},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)}});oD.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let Q=await dS0(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${kw({})}`}});if(!Q.ok)return $.json({error:`status HTTP ${Q.status}`},502);let X=(await Q.json()).status??"unknown",J={done:cm6.has(X),status:X};return $.json(J)}catch{return $.json({error:"status failed"},502)}});oD.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let Q=await dS0(`/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)}});oD.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let Q=await dS0(`/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:[]})}});KZ8=oD});var dm6=1048576,vN1;var FZ8=D(()=>{Q8();cW();W$();_H1();vN1=new e0;vN1.post("/webhook",k5({maxSize:dm6,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=E0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let Q=await $.req.text();if(!Y08(Q,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let X=X08(Q);if(!X)return $.json({error:"invalid payload"},400);let J=await J08(X);return console.log("stripe webhook",{eventId:X.id,type:X.type,livemode:X.livemode,...J}),$.json({received:!0})})});import{timingSafeEqual as im6}from"crypto";function tm6($,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 im6(Buffer.from(X),Buffer.from(Y))}function om6($,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 UZ8($){let Z=new e0;return Z.post("/webhook",k5({maxSize:pm6,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(!tm6(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"&&!nm6.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 V00().then((U)=>U?.markTenantPoolsDirty(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=om6(J??"",G);if(W.length===0)return Q.json({ok:!0,ignored:"no-pr"});let K=await rm6($,W);return Q.json({ok:!0,refreshed:K})}),Z}async function rm6($,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 dS$(K,G.organizationId,G.taskBoardItemId)!==null)Q++}catch(W){console.error(`[github-webhook] pr card refresh failed for ${G.taskBoardItemId}:`,W)}}return Q}var pm6=5242880,nm6;var NZ8=D(()=>{Q8();cW();AW();R7();nm6=new Set(["check_suite","issue_comment"])});import{DBOS as xN1,SchedulerMode as sm6}from"@dbos-inc/dbos-sdk";async function em6(){try{return await $d6()}catch($){return console.warn(`[sandbox-credential-push] push failed: ${$ instanceof Error?$.message:String($)}`),null}}async function $d6(){if(!I00())return null;let $=await V00(),{RemoteSandboxProvider:Z}=await Promise.resolve().then(() => (j81(),w81));if(!($ instanceof Z))return null;let{db:Q}=O8(),Y=KA0(process.env.STUDIO_SANDBOX_TENANT_POOLS),X=await $.listSandboxes(),J=Date.now(),G=eB$({sandboxes:X,pools:Y,records:await $D$(Q,X,Y),now:J}),{batches:W,failed:K}=await ZD$(G,RK0(Q,new XX(E0().encryptionKey)),{now:J,orgFsLifetimeMs:qK0}),H=0,F=0;for(let U of W){let N=await $.pushCredentials(U);H+=N.stored,F+=N.kept}return{sandboxes:X.length,pushed:H,kept:F,refused:G.refused,failed:K}}async function Zd6($,Z){let Q=await xN1.runStep(em6,{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 BZ8(){if(bN1)return;if(!E0().agentSandboxEnabled||!I00())return;bN1=xN1.registerWorkflow(Zd6,{name:"sandboxCredentialPushWorkflow"}),xN1.registerScheduled(bN1,{name:"sandboxCredentialPushWorkflow",crontab:am6,mode:sm6.ExactlyOncePerIntervalWhenActive})}var am6="1-59/10 * * * *",bN1=null;var DZ8=D(()=>{NA0();PG();pO();Z81();MK0();AW();W$()});function OZ8($){let Z=new fD($.db,new XX($.encryptionKey)),Q=new e0;return Q.get("/attachments/:token",async(Y)=>{let X=Jk$(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 xQ(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 LZ8=D(()=>{Q8();pO();y91();lj()});function wZ8($){let Z=new fD($.db,new XX($.encryptionKey));async function Q(X,J){let G=Io$(J);if(!G)return;let W=await Z.getByWebhookSecret(X);if(!W?.enabled)return;let K=await IW($.db,W.organizationId);if(!K)return;if(await TV0(K,W,G)==="started")console.log(`[jira-webhook] started a run for ${G.issueKey} entering "${G.toStatus}"`)}let Y=new e0;return Y.post("/webhook/:secret",k5({maxSize:Qd6}),async(X)=>{let J=X.req.param("secret");if(!await Z.getByWebhookSecret(J))return X.json({error:"Unknown webhook"},404);let W;try{W=await X.req.json()}catch{return X.json({error:"Body must be JSON"},400)}return Q(J,W).catch((K)=>{console.error("[jira-webhook] trigger failed",K)}),X.body(null,202)}),Y}var Qd6=1048576;var jZ8=D(()=>{Q8();cW();pO();RV0();Kf()});import{DBOS as iS0,SchedulerMode as Yd6}from"@dbos-inc/dbos-sdk";function PZ8($){yN1=$}function zZ8(){if(!yN1)throw Error("[jira-trigger] runtime not initialized \u2014 setJiraTriggerSweepRuntime() must run before the workflow fires");return yN1}function AZ8(){let $=zZ8();return new fD($.db,new XX($.encryptionKey))}async function Gd6($,Z){try{let Q=await AZ8().getById($);if(!Q?.enabled||!Q.boardId)return{integrationId:$,started:0};let Y=await IW(zZ8().db,Q.organizationId);if(!Y)return{integrationId:$,started:0};if((await Y.storage.jiraIntegrations.listAutomations(Q.organizationId)).length===0)return{integrationId:$,started:0};let J=new xQ(Q.siteUrl,Q.email,Q.apiToken),W=`(${await J.getBoardScopeJql(Q.boardId)}) AND status CHANGED AFTER "-${EZ8}m"`,K=0,H;for(let F=0;F<Jd6;F++){let U=await J.searchIssues({jql:W,nextPageToken:H,expandChangelog:!0});for(let N of U.issues){let B=Vo$(N,N.changelog?.histories??[],Z);for(let O of B)if(await TV0(Y,Q,O)==="started")K++}if(H=U.nextPageToken??void 0,!H)break}return{integrationId:$,started:K}}catch(Q){return{integrationId:$,started:0,error:Q instanceof Error?Q.message:String(Q)}}}async function Wd6($,Z){let Q=new Date($.getTime()-EZ8*60000),Y=await iS0.runStep(()=>AZ8().listEnabledIds(),{name:"loadJiraIntegrations"});if(Y.length===0)return;let X=await Promise.all(Y.map((J)=>iS0.runStep(()=>Gd6(J,Q),{name:`sweepJira:${J}`})));for(let J of X)if(J.error)console.warn(`[jira-trigger] integration ${J.integrationId} failed: ${J.error}`);else if(J.started>0)console.log(`[jira-trigger] integration ${J.integrationId} started ${J.started} run(s) the webhook missed`)}function TZ8(){if(fN1)return;fN1=iS0.registerWorkflow(Wd6,{name:"jiraTriggerSweepWorkflow"}),iS0.registerScheduled(fN1,{name:"jiraTriggerSweepWorkflow",crontab:Xd6,mode:Yd6.ExactlyOncePerIntervalWhenActive})}var Xd6="7-59/10 * * * *",EZ8=35,Jd6=5,yN1=null,fN1=null;var RZ8=D(()=>{pO();Kf();lj();RV0()});function qZ8($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var MZ8,Kd6,Hd6,IZ8;var VZ8=D(()=>{Q8();EG();tm();wc();MZ8=new e0,Kd6=["range","if-none-match","if-modified-since"],Hd6=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];MZ8.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),Q=Z.organization?.id;if(!Z.auth?.user?.id){if(wi($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new g1(401,{message:"Authentication required"})}if(!Q)throw new g1(401,{message:"Organization context required"});let Y=$.req.path.replace(/^.*\/files\//,"");if(!Y)throw new g1(400,{message:"Missing file key"});let X=await $$0(Y,Z);if(!X)throw new g1(503,{message:"Object storage not configured"});if(X.startsWith("data:")&&FW()){let K=X.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new g1(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 qZ8(N,H),new Response(U,{status:200,headers:N})}let J=new Headers;for(let K of Kd6){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 g1(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 g1(502,{message:"Upstream storage error"});let W=new Headers;for(let K of Hd6){let H=G.headers.get(K);if(H)W.set(K,H)}return W.set("Cache-Control","private, max-age=86400"),qZ8(W,W.get("content-type")??""),new Response(G.body,{status:G.status,headers:W})});IZ8=MZ8});var l40=b((qy)=>{var Fd6=qy&&qy.__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]}),Ud6=qy&&qy.__exportStar||function($,Z){for(var Q in $)if(Q!=="default"&&!Object.prototype.hasOwnProperty.call(Z,Q))Fd6(Z,$,Q)};Object.defineProperty(qy,"__esModule",{value:!0});Ud6(XG(),qy)});var CZ8=b((kZ8)=>{Object.defineProperty(kZ8,"__esModule",{value:!0});kZ8.version=void 0;kZ8.version="3.4.0"});var bZ8=b((QN)=>{var Nd6=QN&&QN.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(QN,"__esModule",{value:!0});QN.NodeTransport=QN.VERSION=void 0;QN.nodeResolveHost=jd6;var d5=l40(),Bd6=q0("net"),gN1=q0("tls"),Dd6=q0("path"),_Z8=q0("fs"),Od6=Nd6(q0("dns")),Ld6=CZ8();QN.VERSION=Ld6.version;var wd6="nats.js";class vZ8{socket;version;lang;yields=[];signal=(0,d5.deferred)();closedNotification=(0,d5.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=wd6,this.version=QN.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,d5.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 d5.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 d5.errors.ConnectionError("error connecting - node provided an undefined error");let{code:G}=J,W=G==="ECONNREFUSED"?new d5.errors.ConnectionError("connection refused",{cause:J}):J;throw this.socket?.destroy(),W}}dial($){let Z=(0,d5.deferred)(),Q,Y=(0,Bd6.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,d5.deferred)(),Z;return this.socket.on("data",(Q)=>{this.yields.push(Q);let Y=d5.DataBuffer.concat(...this.yields),X=(0,d5.extractProtocolMessage)(Y);if(X!=="")try{let J=d5.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,d5.deferred)();try{if($=(0,Dd6.resolve)($),!(0,_Z8.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,_Z8.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,d5.extend)(Q,this.options.tls,X)}catch(X){return Promise.reject(new d5.errors.ConnectionError(X.message,{cause:X}))}let Y=(0,d5.deferred)();try{let X=(0,gN1.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 d5.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,d5.extend)(Z,this.options.tls,Y)}catch(Y){return Promise.reject(new d5.errors.ConnectionError(Y.message,{cause:Y}))}let Q=(0,d5.deferred)();try{let Y=(0,gN1.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 d5.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,d5.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,d5.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 gN1.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,d5.render)($)}`);let Z=(0,d5.deferred)();try{this.socket.write($,(Q)=>{if(Q){if(this.options.debug)console.error(`!!! ${(0,d5.render)($)}: ${Q}`);return Z.reject(Q)}return Z.resolve()})}catch(Q){if(this.options.debug)console.error(`!!! ${(0,d5.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}}QN.NodeTransport=vZ8;function jd6($){let Z=(0,d5.deferred)();return Od6.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 hZ8=b((gZ8)=>{Object.defineProperty(gZ8,"__esModule",{value:!0});gZ8.connect=Ed6;var xZ8=bZ8(),fZ8=l40(),yZ8=l40();function Ed6($={}){if((0,yZ8.hasWsProtocol)($))return Promise.reject(yZ8.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,fZ8.setTransportFactory)({factory:()=>{return new xZ8.NodeTransport},dnsResolveFn:xZ8.nodeResolveHost}),fZ8.NatsConnectionImpl.connect($)}});var uZ8=b((rD)=>{var zd6=rD&&rD.__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]}),Ad6=rD&&rD.__exportStar||function($,Z){for(var Q in $)if(Q!=="default"&&!Object.prototype.hasOwnProperty.call(Z,Q))zd6(Z,$,Q)};Object.defineProperty(rD,"__esModule",{value:!0});rD.connect=void 0;var Td6=hZ8();Object.defineProperty(rD,"connect",{enumerable:!0,get:function(){return Td6.connect}});Ad6(l40(),rD)});function dZ8($){let Z=$?.connectFn??Id6,Q=null,Y=null,X=!1,J=!1,G=!1,W=[];function K(){return Q!==null&&!Q.isClosed()&&!Q.isDraining()&&!G}function H(){console.log(`[NatsProvider] fireReady: ${W.length} callbacks`);for(let N of W)try{N()}catch{}}function F(N){(async()=>{for await(let B of N.status())if(B.type==="disconnect")console.log("[NatsProvider] Disconnected"),G=!0;else if(B.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),G=!1,Y=null,H()})().catch(()=>{})}async function U(N,B){let O=0;while(!J)try{Q=await Z({servers:N,timeout:Md6,reconnect:!0,maxReconnectAttempts:-1,...B?{authenticator:B}:{}}),console.log(`[NatsProvider] Connected to ${Q.getServer()} after ${O} attempt(s)`),Y=null,G=!1,F(Q),H();return}catch{O++;let L=X7(qd6,Rd6,O-1,2,0.5);await h$(L)}}return{init(N,B){if(X)return;X=!0,J=!1;let O=B?.creds?lZ8.credsAuthenticator(new TextEncoder().encode(B.creds)):void 0;U(N,O).catch(()=>{})},isConnected(){return K()},getConnection(){return K()?Q:null},getJetStream(){if(!K())return null;if(!Y)Y=mZ8.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 Id6($){return cZ8.connect($)}var lZ8,cZ8,mZ8,Rd6=100,qd6=3000,Md6=3000;var iZ8=D(()=>{K8();lZ8=C(ay(),1),cZ8=C(uZ8(),1),mZ8=C(gH(),1)});function pS0($){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 nS0($,Z){return`${$}.${Z}`}class hN1{cache;constructor($){this.cache=pS0({ttlMs:$?.ttlMs??Vd6,maxSize:$?.maxSize??kd6})}async get($,Z){return this.cache.get(nS0($,Z))??null}async set($,Z,Q){this.cache.set(nS0($,Z),Q)}async invalidate($,Z){this.cache.delete(nS0($,Z)),this.cache.delete(nS0($,`${Z}:decisions`))}teardown(){this.cache.clear()}}var Vd6=600000,kd6=5000;var pZ8=()=>{};function tS0($,Z){return`${$}:${Z}`}function uN1($){let Z=pS0({ttlMs:$?.ttlMs??Sd6,maxSize:$?.maxSize??Cd6}),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(nZ8,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(tS0(K,H))},set(K,H,F){Z.set(tS0(K,H),F)},invalidate(K,H){Z.delete(tS0(K,H)),W(K,H)},start(){if(G)return;let K=Q?.();if(!K)return;G=K.subscribe(nZ8),(async()=>{for await(let H of G)try{let F=JSON.parse(J.decode(H.data));if(F.originId===Y)continue;Z.delete(tS0(F.organizationId,F.keyId))}catch{}})().catch(console.error)},teardown(){G?.unsubscribe(),G=null,Z.clear()}}}var nZ8="studio.ai-provider-keys.invalidate",Sd6=30000,Cd6=5000;var tZ8=()=>{};class lN1{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 oZ8=($)=>{let Z;return()=>Z??=$()},cN1,mN1;var rZ8=D(()=>{_6();cN1=oZ8(()=>A$.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),mN1=oZ8(()=>A$.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function gd6($=eZ8){return{name:kU,subjects:[`${i71}.>`],storage:CH.StorageType.File,max_age:bd6,max_bytes:fd6,max_msgs_per_subject:yd6,discard:CH.DiscardPolicy.Old,retention:CH.RetentionPolicy.Limits,duplicate_window:xd6,num_replicas:$}}class $78{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 sZ8($){let Z=aZ8.headers();for(let[Q,Y]of Object.entries($))Z.set(Q,Y);return Z}function cd6($,Z){let Q=0;return{publish(Y,X,J,G){Y.publish(X,J,G?{headers:G}:void 0).catch((W)=>{if(Q++,vd6().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 md6($,Z){return $.info?.cluster?Z:1}function dd6($){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 dN1{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=gd6(X);try{await Y.streams.info(kU),await Y.streams.update(kU,J)}catch(G){if(G instanceof Error&&G.message.includes("stream not found"))await Y.streams.add(J),await Y.streams.update(kU,J);else if(G instanceof Error&&/can ?not change.*storage|storage type/i.test(G.message))await Y.streams.delete(kU),await Y.streams.add(J);else throw G}},Q=await I8(async()=>{let Y=this.options.getJetStreamManager?await this.options.getJetStreamManager():await CH.jetstreamManager($),X=md6($,eZ8);try{await Z(Y,X)}catch(J){if(X<=1||!dd6(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:Yd});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=cd6(Z,Y),G=!1,W=()=>{if(G)return;G=!0;let H=Vv$(Z);X.publish(H.subject,H.data).catch(()=>{})};Q.addEventListener("abort",W,{once:!0});let K=(H)=>{let F=performance.now(),U=n71(H,{runId:Z}),N=performance.now()-F;cN1().record(N),mN1().add(1,{"org.id":Y??"unknown"}),ld6?.record(N,U.reduce((B,O)=>B+O.data.length,0));for(let B of U)J.publish(X,B.subject,B.data,B.headers?sZ8(B.headers):void 0)};return(async()=>{let H=$.getReader(),F=0,U=0,N;try{while(!0){let{done:B,value:O}=await H.read();if(B)break;if(K(O),U++,++F>=64)F=0,await new Promise((L)=>setImmediate(L))}}catch(B){N=B,console.warn(`[Decopilot] stream pump error for thread ${Z}:`,B?.message??B)}finally{if(H.releaseLock(),W(),ud6)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 I8(()=>$.publish(Z.subject,Z.data,{...Z.headers?{headers:sZ8(Z.headers)}:{},...Z.msgId?{msgID:Z.msgId}:{}}),{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:Yd}),!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=n71(Z,{runId:$,dedup:Q});cN1().record(performance.now()-X),mN1().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=Iv$({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"?CH.DeliverPolicy.New:CH.DeliverPolicy.All,J=Q?.closeOnDone??!1,G=oj($),W;try{W=await I8(async()=>{return(await Y.consumers.get(kU,{filter_subjects:G,deliver_policy:X})).consume()},{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:Yd})}catch(L){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",L?.message??L),null}let F=nR0({messages:async function*(){try{for await(let L of W)yield{subject:L.subject,data:L.data,headers:L.headers}}finally{W.stop()}}(),onCancel:()=>W.stop()}).pipeThrough(mR0()).pipeThrough(dR0()).getReader(),U=!1,N=()=>{if(U)return;U=!0;try{F.releaseLock()}catch{}},B=!1,O=()=>{if(B)return;B=!0,W.stop(),F.cancel().catch(()=>{}),N()};return Z?.addEventListener("abort",O,{once:!0}),new ReadableStream({async pull(L){for(;;){let{done:w,value:j}=await F.read();if(w){O(),L.close();return}let E=j;if(E.kind==="done"){if(J){O(),L.close();return}continue}L.enqueue(E.chunk);return}},cancel(){O()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge(kU,{filter:oj($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var CH,aZ8,_d6=($)=>{let Z;return()=>Z??=$()},vd6,bd6=86400000000000,xd6=120000000000,fd6=4294967296,eZ8,yd6=500000,hd6,ud6,ld6;var Z78=D(()=>{K8();t71();tR0();iR0();_6();rZ8();CH=C(gH(),1),aZ8=C(ay(),1),vd6=_d6(()=>A$.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"})),eZ8=Math.max(1,Number(process.env.DECOPILOT_STREAM_REPLICAS??3)||3);hd6=process.env.STREAM_ENCODE_TRACE==="1",ud6=process.env.DECOPILOT_STREAM_TRACE==="1";ld6=hd6?new $78:null});function oS0($,Z,Q,Y){if(!Y)return!1;return $.emit(Z,$F(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 Q78=D(()=>{d8()});class iN1{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 id6($,Z,Q={}){let Y=$.startsWith("thread:")?KH($,Q):$;return[...new Set([Z,Y].filter((X)=>!!X))]}async function pN1($,Z){let Q=Z.organizationId;try{let Y=await $.storage.taskBoard.linkedThreadIds(Z.id,Q);for(let X of Y){let J=await jU($,X);if(!J?.owner||!J?.name)continue;let G=await $.storage.threads.get(X),W=await Wm($,{threadId:X,runBranch:G?.branch}),K=await ne($,Q,s$1(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=id6(W,await OA0($,X),{flat:hx(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 X3(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 Y78=D(()=>{oZ();RW();R7()});async function X78($,Z,Q){let Y=Z.organizationId;if(!SX(Z))return!1;if(!Hf(Q))return!1;if(await $.storage.taskBoard.hasHumanRejectedDone(Z.id,Y))return!1;let X=await $.storage.organizationSettings.get(Y),J=YU(X?.flags),G=await $.storage.taskBoard.update(Z.id,Y,{status:J},Z.updatedBy);return await r6($,{taskBoardItemId:Z.id,action:"status_changed",actorId:null,data:{from:Z.status,to:J,reason:"pr_merged"}}),B8(Y,G),console.log(`[task-board-review-sweeper] ${Z.id}: linked PR already merged \u2014 moved to ${J}`),!0}var J78=D(()=>{v4();bY();cm();NH();O9()});function ad6($){return $ instanceof AX}function G78($,Z){return Z-$>=rd6}class nN1{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??pd6;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??td6,Q=this.options.itemIntervalMs??nd6,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()-C91),$71);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()-sd6));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 sZ1(this.taskBoard,X,Y),await aZ1(this.taskBoard,this.billing,X,Y)}catch(J){console.error(`[task-board-review-sweeper] unhandled-failure reaction for ${Q} failed`,J)}}async settleFinishedRunsWithoutPr($,Z){let Q=0,Y=await this.taskBoard.listItemsFinishedWithoutPr($,Z);for(let{id:X,organizationId:J,finishedAt:G}of Y)try{if(!await this.taskBoard.claimSweep(X,J,Z))continue;let W=await this.taskBoard.getById(X,J);if(!W||W.status!==T$.progress||SX(W)||W.assigneeId!==z8)continue;let K=await this.contextFactory(J,W.assignedBy??W.createdBy);if(!K)continue;if(await pN1(K,W)){if(await this.taskBoard.clearSweepBudget(X,J),await this.reconcileItem(X,J,Z))Q++;continue}if(!G78(G.getTime(),Date.now()))continue;let H="the run finished without opening a pull request \u2014 there is "+"nothing for a reviewer to review",F=await this.taskBoard.advanceToReviewIfInProgress(X,J,W.updatedBy);if(!F)continue;await this.taskBoard.recordActivity({taskBoardItemId:X,action:"status_changed",actorId:null,data:{from:T$.progress,to:T$.review,reason:H}}).catch(()=>{}),B8(J,F),await BH(K,F,H)}catch(W){console.error(`[task-board-review-sweeper] settling finished run on ${X} failed`,W)}return Q}async dispatchDueRetries($){let Z=0,Q=await this.taskBoard.listItemsDueForRetry($,new Date);for(let{id:Y,organizationId:X,attempts:J}of Q)try{if(!await this.taskBoard.claimDueRetry(Y,X,new Date))continue;let G=await this.taskBoard.getById(Y,X);if(!G||G.status!==T$.progress||G.assigneeId!==z8)continue;let W=await this.contextFactory(X,G.assignedBy??G.createdBy);if(!W)continue;await DH(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),ad6(G)){await this.returnToTodo(Y,X,G instanceof Error?G.message:String(G));continue}await this.taskBoard.scheduleRunRetry(Y,X,J,new Date(Date.now()+od6)).catch((W)=>console.error(`[task-board-review-sweeper] re-arming ${Y} failed`,W))}return Z}async returnToTodo($,Z,Q){try{let Y=await this.taskBoard.getById($,Z);if(!Y||Y.status!==T$.progress)return;let X=await this.taskBoard.returnToTodoAfterFailure($,Z,Y.updatedBy);if(!X)return;await this.taskBoard.recordActivity({taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:"in_progress",to:"todo",reason:Q}}).catch(()=>{}),B8(Z,X)}catch(Y){console.error(`[task-board-review-sweeper] returning ${$} to todo failed`,Y)}}async handOffReviewWithoutPr($,Z){let Q=await this.taskBoard.listActivity(Z.id,Z.organizationId);if(!G78(uB(Q,Z.reviewCycleStartedAt),Date.now()))return;await BH($,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(!SX(Y))return!1;let X=Y.assigneeId===z8,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 pN1(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 im(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 X78(G,Y,W))return!0;if(await _b$(G,Y))return!0;if(await this.resolveConflictFromSweep(G,Y,W))return!0;if(!X)return!1;if(!nZ1(W))return!1;return await mm(G,Y,{previewMatchesHead:tZ1(W)}),!0}async resolveConflictFromSweep($,Z,Q){let Y=Q.find((X)=>X.state!=="closed"&&X.conflict===!0);if(!Y)return!1;return await ij($,Z.organizationId,Z,{pr:{number:Y.number,url:Y.url},conflict:!0}).catch((X)=>{return console.error("[task-board-review-sweeper] conflict resolve failed",X),!1})}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}var pd6=60000,nd6=300000,td6=50,od6=60000,rd6=900000,sd6=120000;var W78=D(()=>{v4();JR0();Y78();IU();U$0();NH();J78();O9();OW();Z71();R7();y10();dm()});import{readdir as ed6,rm as rS0}from"fs/promises";import{join as sS0}from"path";async function aS0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-$i6),Z.setUTCHours(0,0,0,0);let Q=0;try{let Y=await My($);for(let X of Y)if(/^\d{4}$/.test(X))Q+=await K78($,X,Z);else if(!X.startsWith(".")){let J=sS0($,X),G=await My(J);for(let K of G){if(!/^\d{4}$/.test(K))continue;Q+=await K78(J,K,Z)}if((await My(J)).length===0)await rS0(J,{recursive:!0,force:!0})}}catch(Y){console.warn("monitoring retention cleanup failed:",Y)}return Q}async function K78($,Z,Q){let Y=0,X=sS0($,Z),J=await My(X);for(let W of J){if(!/^\d{2}$/.test(W))continue;let K=sS0(X,W),H=await My(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=sS0(K,U);await rS0(B,{recursive:!0,force:!0}),Y++}}if((await My(K)).length===0)await rS0(K,{recursive:!0,force:!0})}if((await My(X)).length===0)await rS0(X,{recursive:!0,force:!0});return Y}async function My($){try{return(await ed6($)).filter((Q)=>!Q.startsWith("."))}catch{return[]}}var $i6=30;var tN1=()=>{};import{DBOS as oN1,SchedulerMode as Zi6}from"@dbos-inc/dbos-sdk";async function Yi6(){let $=[nW(),xy(),HN()],Z=0;for(let Q of $)try{Z+=await aS0(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 Xi6($,Z){await oN1.runStep(()=>Yi6(),{name:"monitoringRetention"})}function F78(){if(H78)return;H78=!0;let $=oN1.registerWorkflow(Xi6,{name:"monitoringRetentionWorkflow"});oN1.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:Qi6,mode:Zi6.ExactlyOncePerIntervalWhenActive})}var Qi6="23 4 * * *",H78=!1;var U78=D(()=>{z3();tN1()});function N78($){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 fQ.create();X.auth.user={id:Q,role:Y.role},X.organization={id:Y.orgId,slug:Y.orgSlug,name:Y.orgName};let J=await l2($.db,Z,Y.role);return X.boundAuth=RH1({auth:X.authInstance,headers:new Headers,role:Y.role,permissions:J,userId:Q}),X.access=new Mz(Q,void 0,X.boundAuth,Y.role,"self"),dj(X,{id:Y.orgId,slug:Y.orgSlug}),X}}var B78=D(()=>{zK();$U()});function Ji6(){return[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}]}function Gi6(){return{services:Ji6(),migrationsStatus:"pending",serverUrl:null,logs:[]}}function Ki6(){for(let $ of Wi6)$()}function D78($){let Z=[...rN1.logs,$];rN1={...rN1,logs:Z.length>500?Z.slice(-500):Z},Ki6()}function sN1(){return Hi6}var rN1,Wi6,Hi6=!1;var aN1=D(()=>{rN1=Gi6(),Wi6=new Set});import{EventEmitter as Fi6}from"events";var eN1;var O78=D(()=>{aN1();eN1=new Fi6;eN1.on("request",($)=>{D78($)})});function L78(){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=oi(N.params.name),O=N.params.arguments||{},L=Object.keys(O).map((j)=>oi(j)),w=L.length>0?L.slice(0,3).join(",")+(L.length>3?"\u2026":""):"";J=`${Q9.tool}${B}${Q9.dim}(${w})${Q9.reset}`}else if(N.method)J=`${Q9.dim}${oi(N.method)}${Q9.reset}`}}catch{}}let W=oi(X);if(X.startsWith("/mcp/conn_")){let F=X.split("/")[2]??"";W=`/mcp/${Q9.mcp}${oi(F.slice(0,12))}\u2026${Q9.reset}`}else if(X==="/mcp")W=`${Q9.mcp}/mcp${Q9.reset}`;else if(X==="/mcp/registry")W=`${Q9.mcp}/mcp/registry${Q9.reset}`;let K=Ni6(Y),H=G?"\u25C0":"\u2190";if(!sN1())console.log(`${Q9.dim}${H}${Q9.reset} ${K}${Y}${Q9.reset} ${W}${J?` ${J}`:""}`);try{await Z()}finally{let F=Date.now()-Q,U=$.res.status,N=Ui6(U),B=F<1000?`${F}ms`:`${(F/1000).toFixed(1)}s`,O=G?"\u25B6":"\u2192";if(!sN1())console.log(`${Q9.dim}${O}${Q9.reset} ${K}${Y}${Q9.reset} ${W}${J?` ${J}`:""} ${N}${U}${Q9.reset} ${Q9.duration}${B}${Q9.reset}`);eN1.emit("request",{method:Y,path:oi(X),status:U,duration:F,timestamp:new Date})}}}var Q9,Ui6=($)=>{if($>=500)return Q9.serverError;if($>=400)return Q9.clientError;if($>=300)return Q9.redirect;return Q9.ok},Ni6=($)=>{return Q9[$]||Q9.reset},oi=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var w78=D(()=>{aN1();O78();Q9={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 z78}from"crypto";import{mkdir as Bi6,readdir as Di6,rm as j78,stat as A78}from"fs/promises";import{join as ZB1,relative as Oi6}from"path";import{z as e$}from"zod";function R78($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return ZB1(Li6,Z)}function q78($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function $B1($,Z){let Q=R78($),Y=q78(Z);return ZB1(Q,Y)}function wi6($,Z,Q,Y){let X=E0().encryptionKey||"dev-secret",J=`${$}:${Z}:${Q}:${Y}`;return z78("sha256",X).update(J).digest("hex")}function P78($,Z,Q,Y,X){let J=Math.floor(Date.now()/1000)+Y,G=wi6(Z,Q,J,X),W=new URL(`/api/dev-assets/${Z}/${q78(Q)}`,$);return W.searchParams.set("expires",J.toString()),W.searchParams.set("signature",G),W.searchParams.set("method",X),W.toString()}function M78($,Z,Q){let Y=`${$}:${Z.getTime()}:${Q}`;return`"${z78("md5","etag").update(Y).digest("hex")}"`}async function I78($,Z,Q,Y,X){try{let J=await Di6($,{withFileTypes:!0});for(let G of J){let W=ZB1($,G.name),H=Oi6(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 I78(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 A78(W);X.objects.push({key:H,size:F.size,lastModified:F.mtime.toISOString(),etag:M78(W,F.mtime,F.size)})}catch{}}}}catch{}}function V78($,Z){let Y=G0($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:e$.object({prefix:e$.string().optional(),maxKeys:e$.number().optional().default(1000),continuationToken:e$.string().optional(),delimiter:e$.string().optional()}),outputSchema:e$.object({objects:e$.array(e$.object({key:e$.string(),size:e$.number(),lastModified:e$.string(),etag:e$.string()})),nextContinuationToken:e$.string().optional(),isTruncated:e$.boolean(),commonPrefixes:e$.array(e$.string()).optional()}),handler:async(X)=>{let J=X,G=J.prefix||"",W=J.maxKeys??1000,K=J.delimiter,H=J.continuationToken,F=R78(Y);await Bi6(F,{recursive:!0});let U={objects:[],commonPrefixes:new Set};await I78(F,F,G,K,U),U.objects.sort((w,j)=>w.key.localeCompare(j.key));let N=0;if(H){if(N=U.objects.findIndex((w)=>w.key>H),N===-1)N=U.objects.length}let B=U.objects.slice(N,N+W),O=N+W<U.objects.length,L=O?B[B.length-1]?.key:void 0;return{objects:B,isTruncated:O,nextContinuationToken:L,commonPrefixes:Array.from(U.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:e$.object({key:e$.string()}),outputSchema:e$.object({contentType:e$.string().optional(),contentLength:e$.number(),lastModified:e$.string(),etag:e$.string(),metadata:e$.record(e$.string(),e$.string()).optional()}),handler:async(X)=>{let J=X,G=$B1(Y,J.key),W=await A78(G);return{contentType:TF1(J.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:M78(G,W.mtime,W.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:e$.object({key:e$.string(),expiresIn:e$.number().optional()}),outputSchema:e$.object({url:e$.string(),expiresIn:e$.number()}),handler:async(X)=>{let J=X,G=CD(J.expiresIn,E78);return{url:P78(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:e$.object({key:e$.string(),expiresIn:e$.number().optional(),contentType:e$.string().optional()}),outputSchema:e$.object({url:e$.string(),expiresIn:e$.number()}),handler:async(X)=>{let J=X,G=CD(J.expiresIn,E78);return{url:P78(Z,Y,J.key,G,"PUT"),expiresIn:G}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:e$.object({key:e$.string()}),outputSchema:e$.object({success:e$.boolean(),key:e$.string()}),handler:async(X)=>{let J=X,G=$B1(Y,J.key);try{return await j78(G),{success:!0,key:J.key}}catch{return{success:!1,key:J.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:e$.object({keys:e$.array(e$.string()).max(1000)}),outputSchema:e$.object({deleted:e$.array(e$.string()),errors:e$.array(e$.object({key:e$.string(),message:e$.string()}))}),handler:async(X)=>{let J=X,G=[],W=[];return await Promise.all(J.keys.map(async(K)=>{let H=$B1(Y,K);try{await j78(H),G.push(K)}catch(F){W.push({key:K,message:F instanceof Error?F.message:"Unknown error"})}})),{deleted:G,errors:W}}}]}async function QB1($,Z,Q){let Y=V78(Z,Q),X=new uL({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:VZ});for(let G of Y){let W="shape"in G.inputSchema?G.inputSchema.shape:e$.object({}).shape,K=G.outputSchema&&"shape"in G.outputSchema?G.outputSchema.shape:e$.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 H3({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await X.connect(J),_W(X,J,$,"mcp:dev-assets")}async function k78($,Z,Q,Y){let J=V78(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 Li6="./data/assets",E78=3600,T78,S78;var C78=D(()=>{W$();Fd();Q8();MX0();Hd();ZJ();_D();gk0();T78=new e0;T78.all("/",async($)=>{let Z=$.get("studioContext"),Q=new URL($.req.url),Y=`${Q.protocol}//${Q.host}`;return QB1($.req.raw,Z,Y)});S78=T78});var _78={};T6(_78,{mountDevRoutes:()=>ji6});function ji6($,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 QB1(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 k78(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",S78);let Q=new e0;Q.use("*",kH({mountPath:"/api/dev-assets"})),Q.route("/",yk0({orgFromPath:!1})),$.route("/api/dev-assets",Q)}var v78=D(()=>{Q8();LF1();gk0();C78()});var m78={};T6(m78,{watchHandler:()=>c78,resolveCorsOrigin:()=>u78,isSsoExemptPath:()=>g78,isAllowedOAuthRedirectUri:()=>l78,createApp:()=>Vi6});import{readFileSync as Ei6}from"fs";import{PrometheusSerializer as Pi6}from"@opentelemetry/exporter-prometheus";import{DBOS as sD}from"@dbos-inc/dbos-sdk";import{oAuthDiscoveryMetadata as Ti6,oAuthProtectedResourceMetadata as Ri6}from"better-auth/plugins";async function zi6($){let Z=$.connect(),Q;try{Q=await Promise.race([Z,x78(b78)])}catch{return Z.then((Y)=>Y.release(!0)).catch(()=>{}),!1}try{return await Promise.race([Q.query("SELECT 1"),x78(b78)]),Q.release(),!0}catch{return Q.release(!0),!1}}function x78($){return new Promise((Z,Q)=>setTimeout(()=>Q(Error("pg health-check timeout")),$))}function g78($){return $.startsWith("/api/org-sso/")||/^\/api\/[^/]+\/sso\//.test($)||$.startsWith("/api/auth/")||$.startsWith("/api/tools/management")||$.startsWith("/oauth-proxy/")||/^\/api\/[^/]+\/oauth-proxy\//.test($)||$.startsWith(`${Tk0}/`)||$.startsWith(`${wk0}/`)}function h78($){return $==="local.studio.decocms.com"}function u78($,{baseUrl:Z,requestOrigin:Q}){let Y;try{Y=new URL($).hostname}catch{return null}if(Y==="localhost"||Y==="127.0.0.1")return $;if(h78(Y))return $;let X=Z??Q;try{if(new URL(X).origin===$)return $}catch{}return null}function l78($,Z){return $.origin===new URL(Z).origin||$.hostname==="localhost"||h78($.hostname)}async function Vi6($={}){let Z=$.database??O8(),Q=!1;$9.stop().catch((h)=>{console.error("[SSEHub] Error stopping previous broadcast (HMR cleanup):",h)});let Y,X,J,G,W=new hN1,K,H,F,U=null;if($.disableNats)K=uN1(),Y={get:async()=>null,set:async()=>{},invalidate:async()=>{},teardown:()=>{}},X=null,J=null,G=new P$0,H={start:async()=>{},broadcast:()=>{},stop:async()=>{}},F={init:async()=>{},pump:(h)=>{return(async()=>{let c=h.getReader();try{while(!0){let{done:M0}=await c.read();if(M0)break}}catch{}finally{c.releaseLock()}})()},publishRawChunk:async()=>!1,publishDone:async()=>!1,createTailStream:async()=>null,purge:()=>{},teardown:()=>{}};else{U=dZ8();let h=E0().natsCredsPath,c;if(h)try{c=Ei6(h,"utf8")}catch(P$){console.error(`[app] failed to read NATS_CREDS at ${h}; connecting anonymously`,P$)}U.init(E0().natsUrls,c?{creds:c}:void 0);let M0=l01()?new R01({getJetStream:()=>U.getJetStream()}):null;M0?.init().catch(()=>{}),Y=M0;let D0=new n61({getJetStream:()=>U.getJetStream()});D0.init().catch(()=>{}),X=D0;let h0=new Uf(lZ1,{getJetStream:()=>U.getJetStream()}),g0=new Uf(g10,{getJetStream:()=>U.getJetStream()});h0.init().catch(()=>{}),g0.init().catch(()=>{}),J={reads:h0,cards:g0};let T1=new kY1({getJetStream:()=>U.getJetStream()});T1.init().catch(()=>{}),G=T1,K=uN1({getConnection:()=>U.getConnection()}),H=new lN1({getConnection:()=>U.getConnection()}),F=new dN1({getConnection:()=>U.getConnection(),getJetStream:()=>U.getJetStream()}),q08(U),U.onReady(()=>{M0?.init().catch((P$)=>{console.error("[McpListCache] Deferred init failed:",P$)}),D0.init().catch((P$)=>{console.error("[SkillCatalogCache] Deferred init failed:",P$)}),h0.init().catch((P$)=>{console.error("[PrReadCache] Deferred init failed:",P$)}),g0.init().catch((P$)=>{console.error("[PrCardCache] Deferred init failed:",P$)}),T1.init().catch((P$)=>{console.error("[ConnectionCircuitStore] Deferred init failed:",P$)}),K.start(),UF$(()=>U.getConnection()),F.init().catch((P$)=>{console.warn("[Decopilot] StreamBuffer init failed (late-join disabled):",P$)})})}if(bE)await bE();q01(Y),o61(X),cZ1(J),SY1(G);let B={storage:new Ah(Z.db),sseHub:$9,onThreadFinished:async(h,c)=>nm(new Y3(Z.db),h,c,new jG(Z.db))},O=new $Q1(B),L=new l80(Z.db),w=new iN1(L);w.start(),Sb$(H),H.start((h)=>{_R0(h),O.execute({type:"CANCEL",taskId:h}).catch((c)=>{console.error("[Decopilot] CancelBroadcast execute failed:",c)})}).catch((h)=>{console.error("[Decopilot] CancelBroadcast start failed:",h)}),U?.onReady(()=>{H.start().catch((h)=>{console.error("[CancelBroadcast] Deferred start failed:",h)})});let j=()=>U?.getConnection()??null;UF1(j),U?.onReady(()=>UF1(j)),KX1(j),U?.onReady(()=>KX1(j)),F.init().catch((h)=>{console.warn("[Decopilot] StreamBuffer init failed, attach/late-join disabled:",h)}),bE=async()=>{await O.stopAll(),O.dispose(),w.dispose(),H.stop().catch(()=>{}),u18(),F.teardown(),Y?.teardown(),X?.teardown(),J?.reads.teardown(),J?.cards.teardown(),W.teardown(),K.teardown(),NF$(),G.teardown(),q01(null),o61(null),cZ1(null),SY1(null)};let E=new e0;if(E.use("*",MY1({enabled:(h)=>Li(h,"debug")==="1"})),E.use("*",PC0),E.use("/*",P08({origin:(h,c)=>u78(h,{baseUrl:E0().baseUrl,requestOrigin:new URL(c.req.url).origin}),credentials:!0,allowMethods:["GET","POST","PUT","DELETE","OPTIONS"],allowHeaders:["Content-Type","Authorization","mcp-protocol-version"],exposeHeaders:["WWW-Authenticate"]})),E.use("*",async(h,c)=>{if(await c(),h.req.path.includes("/files/"))return;if(h.req.path.includes("/fs/")&&h.req.path.endsWith("/read"))return;h.header("X-Frame-Options","DENY"),h.header("Content-Security-Policy","frame-ancestors 'none'")}),!E0().noTui)E.use("*",L78());E.use("*",async(h,c)=>{if(await c(),Jp(h.req.path))return;if(h.res.status>=500){let D0=await h.res.clone().text();console.error(`[5xx Response] ${h.req.method} ${h.req.path} - ${h.res.status}:`,D0)}}),E.get(iY.HEALTH,(h)=>{if(Q)return h.json({status:"shutting_down"},503);return h.json({status:"ok"})}),E.get(iY.HEALTH_LIVE,(h)=>{return h.json({status:"ok"})}),E.get(iY.HEALTH_READY,async(h)=>{if(Q)return h.json({status:"shutting_down"},503);let c={};if(c.postgres={status:await zi6(Z.pool)?"up":"down"},U)c.nats=U.isConnected()?{status:"up"}:{status:"down"};else c.nats={status:"down"};let M0=c.postgres.status==="up",D0=M0?200:503;return h.json({status:M0?"ready":"not_ready",services:c},D0)}),E.get(iY.METRICS,async(h)=>{try{let c=await RC0.collect(),M0=Ai6.serialize(c.resourceMetrics);return h.text(M0,200,{"Content-Type":"text/plain; version=0.0.4; charset=utf-8"})}catch(c){return console.error("Failed to collect metrics:",c),h.text("# Error collecting metrics",500)}});let P=1800000;E.get(`${iY.DBOS_QUEUE_DEPTH_PREFIX}:queueName`,async(h)=>{let c=h.req.param("queueName");if(!qi6.has(c))return h.json({error:`Unknown queue: ${c}`},404);let[M0,D0]=await Promise.all([sD.listQueuedWorkflows({queueName:c,status:"ENQUEUED",loadInput:!1,loadOutput:!1}),sD.listQueuedWorkflows({queueName:c,status:"PENDING",loadInput:!1,loadOutput:!1,dequeuedAfter:new Date(Date.now()-P).toISOString()})]);return h.json({queue_length:M0.length,in_flight:D0.length})}),E.route("/api/config",r98),E.route("/api/_reports",KZ8),E.route("/api/_stripe",vN1),E.route("/api/_github",UZ8({taskBoard:()=>t,contextFactory:()=>g})),E.route("/api/_git",Ri);let T={db:Z.db,encryptionKey:E0().encryptionKey};E.route("/api/_jira",wZ8(T)),E.route("/api/_jira",OZ8(T)),E.route("/report",JZ8($.clientDir)),E.route("/api/auth/custom",i08),E.route("/api/auth/desktop",o08),E.all("/api/auth/admin/*",I18),E.all("/api/auth/*",async(h)=>{return await v8.handler(h.req.raw)});let z=ea$();z.use("/.well-known/oauth-protected-resource/mcp/:connectionId",e80),z.use("/mcp/:connectionId/.well-known/oauth-protected-resource",e80),E.route("/",z),E.get("/.well-known/oauth-protected-resource/api/:org/mcp/:connectionId",y80),E.route("/",Xe$()),E.use("/oauth-proxy/:connectionId/*",e80),E.all("/oauth-proxy/:connectionId/*",f78);let A=async(h)=>{let M0=await Mi6()(h.req.raw),D0=await M0.json();return Response.json(D0,M0)};E.use("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",e80),E.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",A);let q=async(h)=>{let M0=await Ii6()(h.req.raw),D0=await M0.json();return Response.json(D0,M0)};E.get("/.well-known/oauth-authorization-server/*/:gateway?/:connectionId?",q);let x=A08({ttlMs:120000}),_=await ne$({db:Z.db,auth:v8,encryption:{key:E0().encryptionKey},observability:{tracer:GO,meter:A$},modelListCache:W,providerKeyCache:K,memberRoleCache:x});fQ.set(_),em1({db:Z.db,baseUrl:y5()}),te$({db:Z.db}),ae$({db:Z.db}),G08({db:Z.db}),PZ8({db:Z.db,encryptionKey:E0().encryptionKey}),WS$({db:Z.db}),N08({db:Z.db}),SS$({db:Z.db});let V=OY0(Z.db),y=new go(Z.db),g=N78({db:Z.db});AY1({storage:V,studioContextFactory:g}),FQ1({systemDatabaseUrl:do0(E0().databaseUrl,E0().databasePgSsl),studioContextFactory:g,deps:{runRegistry:O,cancelBroadcast:H,streamBuffer:F,sseHub:$9}}),YQ1({dispatchRunFn:Pv$,studioContextFactory:g,deps:{runRegistry:O,cancelBroadcast:H,streamBuffer:F,sseHub:$9}});let m=new Ah(Z.db),t=new Y3(Z.db),n=new jG(Z.db),K0=new nN1(t,g,n);if(E0().taskBoardReviewSweeperEnabled){K0.start();let h=bE;bE=async()=>{await h?.(),K0.dispose()}}lv$({getJetStream:()=>U?.getJetStream()??null,getJetStreamManager:async()=>{let h=U?.getConnection();return h?await y78.jetstreamManager(h):null},messageParts:m.messageParts(),resolveRun:async(h)=>{let c=await Z.db.selectFrom("threads").select(["organization_id","created_by","message_storage_version","status","run_fence_token","title"]).where("id","=",h).executeTakeFirst();return c?{orgId:c.organization_id,createdBy:c.created_by,version:c.message_storage_version??1,status:c.status,runFenceToken:c.run_fence_token,title:c.title??null}:null},completeRunIfNotCompleted:async(h,c)=>{let M0=await m.completeRunIfNotCompleted(h,c);if(oS0($9,c,h,M0),M0)await nm(t,h,c,n);return M0},markRunRequiresAction:async(h,c)=>{let M0=await m.requiresActionIfInProgress(h,c);return oS0($9,c,h,M0),M0},markRunFailed:async(h,c,M0,D0)=>{let h0=await m.markRunFailed(h,c,M0,D0);if(oS0($9,c,h,h0),h0)await nm(t,h,c,n);return h0},clearSynthesizedError:async(h,c)=>{await m.messageParts().replaceMessageParts(h,tj(h,c),[])},persistTitle:(h,c,M0)=>m.update(h,c,{title:M0}),onTitleUpdated:async({runId:h,orgId:c,title:M0})=>{let D0=await m.get(h,c).catch(()=>null);$9.emit(c,$F(h,D0?.status??"in_progress",{title:M0,virtualMcpId:D0?.virtual_mcp_id??void 0,createdBy:D0?.created_by,triggerId:D0?.trigger_id,branch:D0?.branch??null,harnessId:D0?.harness_id??void 0,createdAt:D0?.created_at,updatedAt:D0?.updated_at}))},bumpProgress:async({runId:h,orgId:c})=>{await m.bumpProgress(h,c)},recordCompleted:async({runId:h,orgId:c,distinctId:M0,usage:D0})=>{b1.capture({distinctId:M0,event:"chat_message_completed",groups:{organization:c},properties:{organization_id:c,thread_id:h,transport:"projector",input_tokens:D0.inputTokens,output_tokens:D0.outputTokens,total_tokens:D0.totalTokens}})},recordFailed:async({runId:h,orgId:c,distinctId:M0,reason:D0,kind:h0})=>{b1.capture({distinctId:M0,event:"chat_message_failed",groups:{organization:c},properties:{organization_id:c,thread_id:h,transport:"projector",error_category:h0,error_message:D0}})},purgeRun:async(h)=>{F.purge(h)}}),p_$({studioContextFactory:g,systemDatabaseUrl:do0(E0().databaseUrl,E0().databasePgSsl),streamBuffer:F}),F78(),$d1(),re$(),$08(),K08(),TZ8(),NS$(),D08(),CS$(),BZ8();let U0=async(h,c,M0)=>{let D0=await V.findById(h,c);if(!D0)throw Error("Automation not found");return qY1({automationId:D0.id,organizationId:D0.organization_id,triggerId:null})},Y0=new Ai(V,({automation:h,trigger:c,contextMessages:M0,idempotencyKey:D0})=>E$0({automationId:h.id,organizationId:h.organization_id,triggerId:c.id,contextMessages:M0},{idempotencyKey:D0})),L0=[nW(),xy(),HN()];for(let h of L0)aS0(h).then(()=>{}).catch((c)=>console.error("[monitoring] Retention cleanup failed:",c));let J0=()=>v8.api.deleteAllExpiredApiKeys().catch((h)=>console.error("[auth] Expired API key cleanup failed:",h));J0(),setInterval(J0,86400000).unref(),E.use("*",async(h,c)=>{if(jC0(h.req.path))return c();let M0={measure:async(h0,g0)=>{CW(h,h0);try{return await g0()}finally{F3(h,h0)}}},D0=await fQ.create(h.req.raw,{timings:M0});D0.automationRunner=U0,h.set("studioContext",D0);try{await c()}finally{let h0=D0.pendingRevalidations;if(h0.length>0)Promise.race([Promise.allSettled(h0),h$(30000)]).catch((T1)=>console.error("[studio] revalidation cleanup error:",T1))}}),E.use("/api/:org/decopilot/*",ji),E.use("/api/:org/v1/*",ji),E.use("/api/:org/files/*",ji),E.use("*",async(h,c)=>{if(g78(h.req.path))return c();let M0=h.get("studioContext");if(!M0?.organization?.id||!M0?.auth?.user?.id)return c();if(!(await M0.storage.orgSsoConfig.getByOrgId(M0.organization.id))?.enforced)return c();if(!await M0.storage.orgSsoSessions.isValid(M0.auth.user.id,M0.organization.id))return h.json({error:"SSO authentication required for this organization"},403);return c()});let Z0=new e0;Z0.use("*",kH({mountPath:"/api/org-sso"})),Z0.route("/",Mk0()),E.route("/api/org-sso",Z0),E.get("/api/tools/management",(h)=>{return h.json({tools:qp0,grouped:qz()})}),E.use("/mcp/*",async(h,c)=>{CW(h,"mcp");try{return await c()}finally{F3(h,"mcp")}});let Q0=async(h,c)=>{let M0=h.var.studioContext;if(!M0.auth.user?.id&&!M0.auth.apiKey?.id){let D0=new URL(h.req.url),h0=h.req.header("x-forwarded-proto")?.split(",")[0]?.trim(),g0=h0?`${h0}://${D0.host}`:D0.origin;return h.res=new Response(null,{status:401,headers:{"WWW-Authenticate":`Bearer realm="mcp",resource_metadata="${g0}${D0.pathname}/.well-known/oauth-protected-resource"`}})}return await c()};if(E.use("/mcp/:connectionId?",Q0),E.use("/mcp/gateway/:virtualMcpId?",Q0),E.use("/mcp/virtual-mcp/:virtualMcpId?",Q0),E.use("/mcp/self",Q0),FW()){let{mountDevRoutes:h}=(v78(),GC0(_78));h(E,Q0)}let s=new e0;s.use("*",kH({mountPath:"/mcp"})),s.route("/",Rq0()),E.route("/mcp",s);let X0=new e0;X0.use("*",kH({mountPath:"/mcp/self"})),X0.route("/",OS0()),E.route("/mcp/self",X0);let l0=new e0;l0.use("*",kH({mountPath:"/mcp"})),l0.route("/",Iq0()),E.route("/mcp",l0),E.use("/api/:org/models/*",async(h,c)=>{CW(h,"llm_models");try{return await c()}finally{F3(h,"llm_models")}});let v0=c18({cancelBroadcast:H,streamBuffer:F,runRegistry:O});E.route("/api",v0),E.route("/api",IZ8);let P1=new e0;P1.use("*",kH({mountPath:"/api"})),P1.route("/",ES0()),E.route("/api",P1),E.route("/api",m98);let d0=new e0;d0.use("*",kH({mountPath:"/api"})),d0.route("/",PS0({tokenStorage:y,automationEventDispatcher:Y0})),E.route("/api",d0);let j0=new uo(Z.db),w0=new e0;w0.use("*",kH({mountPath:"/api"})),w0.route("/",Ck0()),E.route("/api",w0),E.route("/api/deco-sites",X$8()),E.route("/api/deco-apps",y98());let s0=new e0;s0.use("*",kH({mountPath:"/api/deco-sites"})),s0.route("/",vk0()),E.route("/api/deco-sites",s0),E.route(Tk0,V18()),E.route(f68,h68()),E.route("/api/_editor-resolve",i98()),E.route(s08,a08()),E.route(wk0,K18());let E1=E0(),K1=new SN1({adapter:E1.elevenlabsApiKey?new VN1({apiKey:E1.elevenlabsApiKey,model:E1.elevenlabsVoiceModel,voiceId:E1.elevenlabsVoiceId}):null,secret:E1.studioJwtSecret??E1.betterAuthSecret,getConnection:()=>U?.getConnection()??null}),C0=R98({voiceSessions:K1,kvStorage:j0,runRegistry:O,streamBuffer:F,sseHub:$9,cancelBroadcast:H,tokenStorage:y,automationEventDispatcher:Y0,mountDevAssets:FW(),mcpAuth:Q0,oauthProxyHandler:f78,watchHandler:c78,betterAuthProtectedResourceHandler:A,getNatsConnection:()=>U?.getConnection()??null});return E.route("/api/:org",C0),E.notFound((h)=>{return h.json({error:"Not Found",path:h.req.path},404)}),E.onError(d18),Object.assign(E,{markShuttingDown:()=>{Q=!0},shutdown:async()=>{if(console.log("[shutdown] Stopping workers..."),await Promise.allSettled([$9.stop(),bE?Promise.resolve(bE()).finally(()=>{bE=null}):Promise.resolve()]),U)await U.drain().catch((h)=>console.error("[shutdown] NATS drain error:",h));console.log("[shutdown] Flushing telemetry..."),await gX().catch((h)=>console.error("[shutdown] Telemetry flush error:",h)),console.log("[shutdown] Closing database..."),await o6$(Z).catch((h)=>console.error("[shutdown] Database close error:",h)),console.log("[shutdown] Cleanup complete.")},initDbos:async()=>{await sD.registerQueue(P3,{partitionQueue:!0,concurrency:EY1,minPollingIntervalMs:PY1}),await sD.registerQueue(E3,{partitionQueue:!0,concurrency:KQ1,priorityEnabled:!0}),await sD.registerQueue(WN,{workerConcurrency:E0().decopilotMaxConcurrentHostedRuns,priorityEnabled:!0}),await sD.registerQueue(KN,{workerConcurrency:E0().sandboxMaxConcurrentHostedRuns,priorityEnabled:!0}),await sD.registerQueue(XO,{partitionQueue:!0,concurrency:i_$}),await sD.registerQueue(hE,kS$),await wF1(V),await Promise.allSettled(["automations-gate","automations-global","jira-push"].map((h)=>sD.deleteQueue(h))),await zY1(Z.pool),L7$().catch((h)=>{console.error("[studio-pack-backfill] failed:",h)}),Zd1().catch((h)=>{console.error("[org-fs] public-sets boot sync kick failed:",h)})}})}var y78,b78=5000,bE=null,f78=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 fQ.create($.req.raw),$.set("studioContext",X);let J=$.req.param("org")?X.organization?.id:void 0,G=await X.storage.connections.findById(Z,J);if(!G?.connection_url)return $.json({error:"Connection not found"},404);if(Y==="register"&&G.oauth_config?.clientId){let y=await $.req.json().catch(()=>({}));return $.json({...typeof y==="object"&&y!==null?y:{},client_id:G.oauth_config.clientId,...G.oauth_config.clientSecret?{client_secret:G.oauth_config.clientSecret}:{},client_secret_expires_at:0})}let W=await Ni(G.connection_url),K,H=new URL(G.connection_url),U=(typeof G.metadata?.oauthResource==="string"&&G.metadata.oauthResource.length>0?G.metadata.oauthResource:void 0)??G.connection_url;if(W.ok)K=(await W.json()).authorization_servers?.[0];if(!K)K=H.origin;let N=await g80(K);if(!N.ok)return $.json({error:"Failed to get auth server metadata"},502);let B=await N.json(),O;if(Y==="authorize")O=B.authorization_endpoint;else if(Y==="token")O=B.token_endpoint;else if(Y==="register")O=B.registration_endpoint;if(!O)return $.json({error:`Unknown OAuth endpoint: ${Y}`},404);let L=Ye$(O);if(L)return L;let w=new URL(O),j=new URL($.req.url);if(w.search=j.search,Y==="authorize"){let y=w.searchParams.get("redirect_uri");if(y){let g=E0().baseUrl??j.origin;try{if(!l78(new URL(y),g))return $.json({error:"invalid_request",error_description:"redirect_uri is not allowed"},400)}catch{return $.json({error:"invalid_request",error_description:"redirect_uri is malformed"},400)}w.searchParams.set("redirect_uri",y)}if(w.searchParams.has("resource"))w.searchParams.set("resource",U);if(L08(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()),K0=n.indexOf(":");if(K0!==-1){let U0=decodeURIComponent(n.slice(0,K0)),Y0=decodeURIComponent(n.slice(K0+1));A=U0||null,q=Y0||null}}catch{}let y=await $.req.formData();if(y.has("resource"))y.set("resource",U);let g=y.get("client_id"),m=y.get("client_secret");if(typeof g==="string"&&g)A=g;if(typeof m==="string"&&m)q=m;let t=new URLSearchParams;for(let[n,K0]of y.entries())t.append(n,K0.toString());z=t.toString()}else if(Y==="register"&&P?.toLowerCase().includes("application/json")){let y=await X.db.selectFrom("organization").select(["id","slug","name"]).where("id","=",G.organization_id).executeTakeFirst(),g=await $.req.text(),m={};try{m=g?JSON.parse(g):{}}catch{z=g}let t=typeof m==="object"&&m!==null&&!Array.isArray(m);if(z===void 0&&!t)z=g;if(z===void 0){let n=m,K0=n.metadata&&typeof n.metadata==="object"?n.metadata:{};n.metadata={...K0,organization_id:G.organization_id,...y?.slug?{organization_slug:y.slug}:{},...y?.name?{organization_name:y.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"}),_=new Headers,V=["connection","keep-alive","transfer-encoding","content-encoding","content-length"];for(let[y,g]of x.headers.entries())if(!V.includes(y.toLowerCase()))_.set(y,g);if(Y==="token"&&x.ok){let y=await x.text();try{let g=JSON.parse(y);if(typeof g.access_token==="string"&&g.access_token){let m=typeof g.expires_in==="number"?new Date(Date.now()+g.expires_in*1000):null,t=null;try{t=await Bi(G.connection_url)??O}catch{t=O}let n={connectionId:Z,accessToken:g.access_token,refreshToken:typeof g.refresh_token==="string"?g.refresh_token:null,scope:typeof g.scope==="string"?g.scope:null,expiresAt:m,clientId:A,clientSecret:q,tokenEndpoint:t};await new U9(X.db,X.vault).upsert(n)}}catch(g){console.error("[oauth-proxy] failed to persist downstream token:",g)}return new Response(y,{status:x.status,statusText:x.statusText,headers:_})}return new Response(x.body,{status:x.status,statusText:x.statusText,headers:_})},c78=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&&(!qU(Y)||!await MU(Z)))return $.json({error:"forbidden"},403);let W=G?mT0:Y;if(G)OD({action:"watch_all_orgs",actorUserId:Q,actorOrgId:Y,targetOrgId:"all"});let K=crypto.randomUUID();return nD($,async(H)=>{if(await H.writeSSE({event:"connected",data:JSON.stringify({listenerId:K,organizationId:Y,typePatterns:J,connectedAt:new Date().toISOString()})}),!$9.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(()=>{$9.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),$9.remove(W,K)})},30000);await new Promise((N)=>{H.onAbort(()=>{clearInterval(U),$9.remove(W,K),N()})})})},Ai6,qi6,Mi6=()=>Ri6(v8),Ii6=()=>Ti6(v8);var d78=D(()=>{K8();W$();Qd1();se$();Z08();H08();q$0();RZ1();O08();y10();z9();wc();d8();Q8();Nk0();z08();IY1();pG();$U();uH1();PG();_6();Y6();nH1();r08();e08();H18();eH1();k18();WF1();DF1();OF1();rK();rV0();LF1();i18();Dk0();q98();I98();f98();PF1();g98();qq0();z$0();d98();Vq0();oU1();p98();nU1();s98();GZ8();HZ8();FZ8();NZ8();DZ8();LZ8();jZ8();RZ8();qF1();VZ8();tU1();dU1();Y60();iZ8();jJ();kA0();dZ1();Ge();Ke();_Y1();pZ8();tZ8();NF1();Z78();ZQ1();Q78();zt();co();DD();O9();WH1();W78();U78();eJ0();tN1();z3();jF1();BD();a71();eJ0();cR0();Bp0();Dp0();B78();Au();w78();ui();uH1();um();Zd();vR0();y78=C(gH(),1);Ai6=new Pi6,qi6=new Set([P3,E3,WN,KN,XO,hE])});var t78={};T6(t78,{resolveClientDir:()=>xi6,resolveAssetPathWithTraversalCheck:()=>n78,isPathWithinDirectory:()=>p78,createAssetHandler:()=>fi6});import{resolve as c40,dirname as ki6,join as Si6,extname as Ci6,basename as _i6,sep as i78}from"path";function vi6($,Z){if($===Z||_i6($)==="index.html")return{"Cache-Control":"no-cache"};if($.includes(`${i78}assets${i78}`))return{"Cache-Control":"public, max-age=31536000, immutable"};return{}}function p78($,Z){let Q=c40(Z),Y=c40($);return Y===Q||Y.startsWith(Q+"/")}function n78({requestPath:$,clientDir:Z}){let Q=$.startsWith("/")?$.slice(1):$,Y=c40(Z,Q);if(!p78(Y,Z))return null;return Y}function xi6($,Z="../client"){let Q=new URL($),Y=ki6(Q.pathname);return c40(Y,Z)}function fi6($={}){let{env:Z="production",clientDir:Q=bi6,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=n78({requestPath:W,clientDir:Q});if(!K)return null;let H=Si6(K,"index.html"),F=c40(Q,"index.html"),U=J.headers.get("accept"),B=U?.includes("text/html")||U?.includes("*/*")&&["",".html"].includes(Ci6(K))?[H,F]:[];for(let O of[K,...B])try{let L=Bun.file(O);if(await L.exists())return new Response(L,{headers:vi6(O,F)})}catch{}if(W.includes("/assets/"))return new Response("Not Found",{status:404,headers:{"Cache-Control":"no-store"}});return null}}var bi6="./dist/client";var o78=()=>{};var r78={};T6(r78,{tryUpgradePreviewWs:()=>mi6,tryHandlePreviewHttp:()=>ci6,previewWebSocketHandler:()=>di6,parsePreviewBaseDomain:()=>li6,isPreviewWsData:()=>eS0,extractHandleFromHost:()=>YB1});function hi6($){if($.method!=="GET")return!1;return($.headers.get("accept")??"").includes("text/html")}function ui6(){return new Response(gi6,{status:503,headers:{"content-type":"text/html; charset=utf-8","cache-control":"no-store","retry-after":"1","access-control-allow-origin":"*"}})}function li6($){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 YB1($,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 ci6($,Z){let Q=YB1($.headers.get("host"),Z.baseDomain);if(!Q)return null;let Y=await Z.getRunner();if(!Y)return d40(503,"preview proxy not configured");let X=await Y.proxyPreviewRequest(Q,$);if(X.headers.get(mc)&&hi6($))return ui6();return X.headers.delete(mc),X}function d40($,Z){return new Response(JSON.stringify({error:Z}),{status:$,headers:{"content-type":"application/json","access-control-allow-origin":"*"}})}function eS0($){return typeof $==="object"&&$!==null&&$.kind==="preview"}async function mi6($,Z,Q){if(($.headers.get("upgrade")??"").toLowerCase()!=="websocket")return null;let Y=YB1($.headers.get("host"),Q.baseDomain);if(!Y)return null;let X=await Q.getRunner();if(!X)return d40(503,"preview proxy not configured");let J=await X.resolvePreviewUpstreamUrl(Y);if(!J)return d40(404,"sandbox not found");let G=new URL($.url);if(G.pathname.startsWith("/_sandbox"))return d40(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 d40(426,"upgrade failed");return}function m40($,Z,Q,Y){if(Z.closed)return;Z.closed=!0;try{$.close(Q,Y)}catch{}try{Z.upstream?.close()}catch{}}var yi6=256,gi6='<!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>',di6;var s78=D(()=>{NA0();di6={open($){let Z=$.data;if(!eS0(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)}`),m40($,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)=>{m40($,Z,Y.code||1000,Y.reason||"")}),Q.addEventListener("error",()=>{m40($,Z,1011,"upstream error")})},message($,Z){let Q=$.data;if(!eS0(Q))return;let Y=Q.upstream;if(Y&&Y.readyState===WebSocket.OPEN){Y.send(Z);return}if(Q.pending.length>=yi6){m40($,Q,1011,"preview ws backlog overflow");return}Q.pending.push(Z)},close($){let Z=$.data;if(!eS0(Z))return;m40($,Z,1000,"")}}});var ZQ8={};T6(ZQ8,{printBanner:()=>pi6,bannerLines:()=>$Q8,BANNER_LINES:()=>a78,BANNER_GRADIENT:()=>e78});function ii6($){let Z=Number.parseInt($.slice(1),16);return[Z>>16&255,Z>>8&255,Z&255]}function $Q8($){let Z=a78.map((Q,Y)=>{let[X,J,G]=ii6(e78[Y]);return`\x1B[38;2;${X};${J};${G}m${Q}\x1B[39m`});if($!==void 0)Z.push(`\x1B[2m v${$}\x1B[22m`);return Z}function pi6($){console.log("");for(let Z of $Q8($))console.log(Z);console.log("")}var a78,e78;var QQ8=D(()=>{a78=[" \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588 ","\u2591\u2591\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588 \u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588\u2588\u2588 "," \u2591\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2588 \u2591 \u2588\u2588\u2588 \u2591\u2591\u2591 \u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2591\u2591\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591 \u2588\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588 "," \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2591\u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2591 ","\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591 "],e78=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"]});K8();var LB1="13";function wB1($){return{name:"decocms",systemDatabaseUrl:$.systemDatabaseUrl,systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:$.poolSize,runAdminServer:!1,executorID:$.executorID,applicationVersion:LB1,...$.listenQueues!==void 0?{listenQueues:$.listenQueues}:{}}}K8();import PQ8 from"pg";var jB1=8314027461559302n,zQ8=600000,AQ8=500;async function EB1($,Z){let{databaseUrl:Q,lockTimeoutMs:Y=zQ8}=$,X=$.log??((K)=>console.log(K)),J=new PQ8.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",[jB1.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 h$(AQ8)}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)",[jB1.toString()])}catch{}await J.end().catch(()=>{})}}W$();FC0();_6();function PY8(){let $=(process.env.BUN_OPTIONS??"").split(/\s+/).filter(Boolean);return[...process.argv.slice(1),...$]}function IC0($,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 QD1(){let $=PY8();if($.includes("--cpu-prof")){console.log(JSON.stringify({msg:"cpu-profiling-active",dir:IC0($,"--cpu-prof-dir")??process.cwd(),name:IC0($,"--cpu-prof-name"),markdown:$.includes("--cpu-prof-md"),intervalUs:Number(IC0($,"--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.'}))}SC0();var G60;function UD1(){if(process.env.HEAP_WATCH!=="1")return()=>{};let $=Number(process.env.HEAP_WATCH_INTERVAL_MS??60000),Z=async()=>{let Q=cE();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(()=>{}),G60=setInterval(()=>void Z().catch(()=>{}),$),G60.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(G60)clearInterval(G60)}}import*as TY8 from"bun:jsc";var{startSamplingProfiler:RY8,samplingProfilerStackTraces:qY8}=TY8;function ND1(){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{RY8()}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=qY8()?.traces??[]}catch{}if(G>$&&W.length>0){let K=new Map;for(let F of W){let U=F.frames.find((O)=>O.sourceURL&&!/Unknown Executable/.test(O.category??""))??F.frames[0];if(!U)continue;let N=(U.sourceURL??"?").replace(/^.*\/node_modules\//,"node_modules/"),B=`${U.name??"?"} @ ${N}:${U.line??"?"}`;K.set(B,(K.get(B)??0)+1)}let H=[...K.entries()].sort((F,U)=>U[1]-F[1]).slice(0,8).map(([F,U])=>({frame:F,count:U}));console.warn(JSON.stringify({msg:"stall-stack",ts:new Date().toISOString(),lagMs:Math.round(G),samplesInWindow:W.length,top:H}))}Q=setTimeout(X,Z),Q.unref?.()};return Q=setTimeout(X,Z),Q.unref?.(),()=>{if(Q)clearTimeout(Q)}}function BD1(){QD1();let $=[UD1(),FD1(),ND1()];return()=>{for(let Z of $)Z()}}import{existsSync as $p6}from"fs";var rJ=E0();eB1();var{DBOS:i40,DBOSClient:ni6}=await import("@dbos-inc/dbos-sdk");function HB1($,Z){if(!Z)return $;let Q=new URL($);if(!Q.searchParams.has("sslmode"))Q.searchParams.set("sslmode","verify-full");return Q.toString()}var ti6=[P3,E3,WN,KN,XO,hE],oi6=rJ.dispatchRole==="worker"?ti6:rJ.dispatchRole==="api"?[]:void 0;i40.setConfig(wB1({systemDatabaseUrl:HB1(rJ.databaseUrl,rJ.databasePgSsl),poolSize:rJ.dbosPoolSize,executorID:rJ.podName,listenQueues:oi6}));var{createApp:ri6}=await Promise.resolve().then(() => (d78(),m78)),{isServerPath:si6}=await Promise.resolve().then(() => (Y60(),fB1)),{createAssetHandler:ai6,resolveClientDir:WQ8}=await Promise.resolve().then(() => (o78(),t78)),ei6=rJ.port,YQ8=WQ8(import.meta.url,"../client"),KQ8=$p6(YQ8)?YQ8:WQ8(import.meta.url,"../dist/client"),Zp6=ai6({clientDir:KQ8,isServerPath:si6}),Qp6={"X-Frame-Options":"DENY","Content-Security-Policy":"frame-ancestors 'none'"};function Yp6($){let Z=new Headers($.headers);for(let[Q,Y]of Object.entries(Qp6))Z.set(Q,Y);return new Response($.body,{status:$.status,statusText:$.statusText,headers:Z})}var{parsePreviewBaseDomain:Xp6,tryHandlePreviewHttp:Jp6,tryUpgradePreviewWs:Gp6,previewWebSocketHandler:XB1,isPreviewWsData:JB1}=await Promise.resolve().then(() => (s78(),r78)),{getOrInitSharedRunner:HQ8}=await Promise.resolve().then(() => (AW(),yz$)),FQ8=Xp6(process.env.STUDIO_SANDBOX_PREVIEW_URL_PATTERN),XQ8={baseDomain:FQ8??"",getRunner:HQ8};if(process.env.STUDIO_SANDBOX_TENANT_POOLS?.trim())HQ8().catch(($)=>{console.warn("[lifecycle] eager sandbox provider init for tenant pools failed:",$ instanceof Error?$.message:String($))});var $C0=await ri6({clientDir:KQ8}),GB1=process.env.DBOS_CONDUCTOR_KEY?.trim(),JQ8=process.env.DBOS_CONDUCTOR_URL?.trim();await EB1({databaseUrl:HB1(rJ.databaseUrl,rJ.databasePgSsl)},()=>i40.launch({...GB1?{conductorKey:GB1}:{},...GB1&&JQ8?{conductorURL:JQ8}:{}}));console.log(`[dbos] application version: ${i40.applicationVersion}`);var WB1=5,KB1=0;await I8(async()=>{KB1++;try{return await $C0.initDbos()}catch($){let Z=KB1>=WB1?"giving up":"retrying";throw console.warn(`[dbos] initDbos attempt ${KB1}/${WB1} failed, ${Z}`,$),$}},{maxAttempts:WB1,minTimeout:1000,maxTimeout:1e4,jitter:0.5});if(!rJ.isCli){let{bannerLines:$}=await Promise.resolve().then(() => (QQ8(),ZQ8));console.log("");for(let Z of $())console.log(Z)}var Wp6=Bun.serve({idleTimeout:0,port:ei6,hostname:"0.0.0.0",fetch:async($,Z)=>{if(FQ8){let Y=await Gp6($,Z,XQ8);if(Y===void 0)return;if(Y)return Y;let X=await Jp6($,XQ8);if(X)return X}let Q=await Zp6($);if(Q)return Yp6(Q);return $C0.fetch($,{server:Z})},websocket:{open($){if(JB1($.data))XB1.open($)},message($,Z){if(JB1($.data))XB1.message($,Z)},close($){if(JB1($.data))XB1.close($)}},development:!1}),Kp6=BD1();if(rJ.localMode)Promise.resolve().then(() => (Df(),PR0)).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(() => (Df(),PR0));Z()}catch{}});var GQ8=!1;async function Hp6($){let Z;try{Z=await ni6.create({systemDatabaseUrl:HB1(rJ.databaseUrl,rJ.databasePgSsl),systemDatabaseSchemaName:"dbos"});let Q=await Z.listWorkflows({status:"PENDING",queueName:E3,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:E3}),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 ZC0($){if(GQ8)return;GQ8=!0,console.log(`
3698
3698
  [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{Kp6(),$C0.markShuttingDown();let J=zB1(rJ.dispatchRole,Q,process.env.SHUTDOWN_DRAIN_MS);await h$(J),await Wp6.stop(!0);let G=i40.executorID;await i40.shutdown(),await Hp6(G),await $C0.shutdown()}catch(J){console.error("[shutdown] Error during shutdown:",J),X=1}clearTimeout(Y),process.exit(X)}process.on("SIGTERM",()=>ZC0("SIGTERM"));process.on("SIGINT",()=>ZC0("SIGINT"));process.on("SIGHUP",()=>ZC0("SIGHUP"));process.on("unhandledRejection",($)=>{console.error("[process] Unhandled rejection:",$)});process.on("uncaughtException",($)=>{console.error("[process] Uncaught exception:",$),ZC0("uncaughtException")});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "decocms",
3
- "version": "4.415.5",
3
+ "version": "4.416.0",
4
4
  "description": "Deco CMS — Self-hostable MCP Gateway for managing AI connections and tools",
5
5
  "author": "Deco team",
6
6
  "repository": {
@@ -1 +0,0 @@
1
- import{c,j as s,M as u}from"./index-BJCqpqJd.js";import{C as f}from"./index-_bGtHSkW.js";import{a as x}from"./thread-route-DQM8B2sI.js";import{u as g}from"./use-task-metadata-CHjvR9nL.js";import{AppViewContent as h}from"./project-app-view-CQb-TK1P.js";import"./use-mobile-Cr6YJGI_.js";import"./thread-button-AF1WSMlL.js";import"./agent-icon-B0fEYlzS.js";import"./AlertCircle-CIFSd5U6.js";import"./Tool01-BThW1knZ.js";import"./ArrowUp-D2UY3OMh.js";import"./ArrowLeft-Cs3E2BgS.js";import"./ArrowRight-DdzTB6qI.js";import"./ShoppingBag01-DkKlB-7l.js";import"./ZoomOut-T_sjF8JP.js";import"./Palette-BUkGC_ZN.js";import"./CheckCircle-BcLFM9-7.js";import"./Check-CaNT0o8-.js";import"./ChevronUp-BU7d4Get.js";import"./UserSquare-D_CN0irU.js";import"./Copy01-BUTI0qm9.js";import"./CreditCard01-JGaESeVs.js";import"./DotsVertical-CIYGxTTU.js";import"./Image01-BZEauj2T.js";import"./XClose-BXY1fsWn.js";import"./Key01-RaCvEF1t.js";import"./Link01-B4kFCKUO.js";import"./LinkExternal01-Cn0PsKoO.js";import"./Monitor01-DDhoI_iK.js";import"./Sun-X5oRKWho.js";import"./Plus-0VzOcDpy.js";import"./SearchMd-DvVcOTQO.js";import"./Trash01-CWZehatA.js";import"./Upload01-DBJMMF89.js";import"./User01-CkC9PpwU.js";import"./Users01-Bly3LhS2.js";import"./X-B2uln9s5.js";import"./use-chat-layout-state-CRef6D4d.js";import"./use-panel-navigate-BDo5oxs2.js";import"./use-project-scope-ELhrNYxO.js";import"./repository-binding--R5a6meD.js";import"./use-mcp-client-dYAEJ2Jd.js";import"./auth-D32cXta1.js";import"./thread-intent-BUShkesP.js";import"./backoff-8mStPHYB.js";import"./task-board-CJjc4xI-.js";import"./schema-BPGmAw0J.js";import"./slugify-CEUa2lfQ.js";import"./sheet-COySNUi4.js";import"./tooltip-DymYYuRo.js";import"./index-Cv3qPBot.js";import"./toolbar-icon-button-Bzitet5K.js";import"./shell-layout-BR24Afar.js";import"./avatar-DSv7rQey.js";import"./download-app-dialog-ilxwkPe1.js";import"./dialog-CYKucQEn.js";import"./command-3VOIGXTI.js";import"./index-CGwg_b5-.js";import"./integration-icon-BjqLrrwW.js";import"./project-icon-BWs8G7QE.js";import"./new-project-dialog-BmmmSjjo.js";import"./input-CE59clBd.js";import"./label-6ZrdaA5F.js";import"./repository-import-picker-zA2aRMgM.js";import"./use-navigate-to-agent-DoVNCwHy.js";import"./repository-picker-Ch8MjhWT.js";import"./useInfiniteQuery-CrHqvHwZ.js";import"./infiniteQueryObserver-DWdmBz6y.js";import"./collection-search-BRvScCfK.js";import"./use-debounced-value-BAjT0z0V.js";import"./use-organization-settings-B7IVGPSk.js";import"./use-is-desktop-app-BNujXJc_.js";import"./required-auth-layout-DrK2Ahbq.js";import"./autosend-B0cwcoZQ.js";import"./use-org-sso-C6AFvIzX.js";import"./resizable-DRo3WucN.js";import"./gateway-client-BtY2d8II.js";import"./tool-namespace-DmnQIdtF.js";import"./use-mcp-tools-DKcS99WV.js";import"./sandbox-lifecycle-context-CwxdQlSb.js";import"./use-session-runtime-7EKtYywq.js";import"./chat-context-DFdcIErL.js";import"./use-decopilot-events-BXaRjj_f.js";import"./use-ai-providers-BkzLFMQR.js";import"./location-DBePU4bz.js";import"./sandbox-url-D3mC8qhT.js";import"./sandbox-start-errors-BK_aDCyt.js";import"./content-blocks-o63cs2vh.js";import"./mcp-app-renderer-k0tZLm07.js";import"./types-cb53ubAI.js";import"./task-route-DhT_vkgX.js";import"./site-url-en5df9c-.js";import"./use-connect-companion-BBvbZk76.js";import"./companions-core-BnuxEm_5.js";import"./metadata-D72DunRR.js";import"./github-repo-scope-C8GSbvaz.js";import"./form-BuKMCQ_-.js";import"./provision-repo-scoped-github-connection-B6zdkC6p.js";import"./useQueries-IXTpZeMS.js";import"./authenticate-and-persist-oauth-nxqo5RHp.js";import"./mcp-oauth-C3J5q_hp.js";import"./track-BsEyW3He.js";import"./extract-connection-data-B-G_DpF-.js";import"./connection-CghRZvH1.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 ho(){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{ho as default};
@@ -1 +0,0 @@
1
- import{c,j as p,aP as b,u as g}from"./index-BJCqpqJd.js";import{C as j}from"./index-_bGtHSkW.js";import{F as v,H as S}from"./file-share-button-weodJ1fg.js";import{u as k,b as y,e as _}from"./use-org-fs-DBAxCQBE.js";import{S as P}from"./settings-tab-DrI9h0MP.js";import{b as w}from"./thread-route-DQM8B2sI.js";import"./use-mobile-Cr6YJGI_.js";import"./thread-button-AF1WSMlL.js";import"./agent-icon-B0fEYlzS.js";import"./AlertCircle-CIFSd5U6.js";import"./Tool01-BThW1knZ.js";import"./ArrowUp-D2UY3OMh.js";import"./ArrowLeft-Cs3E2BgS.js";import"./ArrowRight-DdzTB6qI.js";import"./ShoppingBag01-DkKlB-7l.js";import"./ZoomOut-T_sjF8JP.js";import"./Palette-BUkGC_ZN.js";import"./CheckCircle-BcLFM9-7.js";import"./Check-CaNT0o8-.js";import"./ChevronUp-BU7d4Get.js";import"./UserSquare-D_CN0irU.js";import"./Copy01-BUTI0qm9.js";import"./CreditCard01-JGaESeVs.js";import"./DotsVertical-CIYGxTTU.js";import"./Image01-BZEauj2T.js";import"./XClose-BXY1fsWn.js";import"./Key01-RaCvEF1t.js";import"./Link01-B4kFCKUO.js";import"./LinkExternal01-Cn0PsKoO.js";import"./Monitor01-DDhoI_iK.js";import"./Sun-X5oRKWho.js";import"./Plus-0VzOcDpy.js";import"./SearchMd-DvVcOTQO.js";import"./Trash01-CWZehatA.js";import"./Upload01-DBJMMF89.js";import"./User01-CkC9PpwU.js";import"./Users01-Bly3LhS2.js";import"./X-B2uln9s5.js";import"./use-chat-layout-state-CRef6D4d.js";import"./use-panel-navigate-BDo5oxs2.js";import"./use-project-scope-ELhrNYxO.js";import"./repository-binding--R5a6meD.js";import"./use-mcp-client-dYAEJ2Jd.js";import"./auth-D32cXta1.js";import"./thread-intent-BUShkesP.js";import"./backoff-8mStPHYB.js";import"./task-board-CJjc4xI-.js";import"./schema-BPGmAw0J.js";import"./slugify-CEUa2lfQ.js";import"./sheet-COySNUi4.js";import"./tooltip-DymYYuRo.js";import"./index-Cv3qPBot.js";import"./toolbar-icon-button-Bzitet5K.js";import"./shell-layout-BR24Afar.js";import"./avatar-DSv7rQey.js";import"./download-app-dialog-ilxwkPe1.js";import"./dialog-CYKucQEn.js";import"./command-3VOIGXTI.js";import"./index-CGwg_b5-.js";import"./integration-icon-BjqLrrwW.js";import"./project-icon-BWs8G7QE.js";import"./new-project-dialog-BmmmSjjo.js";import"./input-CE59clBd.js";import"./label-6ZrdaA5F.js";import"./repository-import-picker-zA2aRMgM.js";import"./use-navigate-to-agent-DoVNCwHy.js";import"./repository-picker-Ch8MjhWT.js";import"./useInfiniteQuery-CrHqvHwZ.js";import"./infiniteQueryObserver-DWdmBz6y.js";import"./collection-search-BRvScCfK.js";import"./use-debounced-value-BAjT0z0V.js";import"./use-organization-settings-B7IVGPSk.js";import"./use-is-desktop-app-BNujXJc_.js";import"./required-auth-layout-DrK2Ahbq.js";import"./autosend-B0cwcoZQ.js";import"./use-org-sso-C6AFvIzX.js";import"./resizable-DRo3WucN.js";import"./popover-CxnAOud0.js";import"./extract-connection-data-B-G_DpF-.js";import"./metadata-D72DunRR.js";import"./connection-CghRZvH1.js";import"./chat-context-DFdcIErL.js";import"./use-decopilot-events-BXaRjj_f.js";import"./use-ai-providers-BkzLFMQR.js";import"./location-DBePU4bz.js";import"./build-improve-prompt-doc-CC90CrN1.js";import"./empty-state-C-cMIo1T.js";import"./use-date-fns-locale-C9CWZMOZ.js";import"./differenceInSeconds-C3x8sHUj.js";import"./use-connection-rm3wb9zf.js";import"./mcp-oauth-C3J5q_hp.js";import"./alert-dialog-DJp_Ityl.js";import"./textarea-BXhBwPZM.js";import"./use-debounced-autosave-D0o2B4Xo.js";import"./add-connection-dialog-kGctlCUa.js";import"./connection-card-CM7cJdHp.js";import"./connection-slug-CITJ0kGN.js";import"./drawer-DG-A7uu9.js";import"./form-BuKMCQ_-.js";import"./select-CV06ESGC.js";import"./connection-form-helpers-BXAo8rkG.js";import"./authenticate-and-persist-oauth-nxqo5RHp.js";import"./collection-tabs-DYXVQ5CX.js";import"./badge-BVm53kyq.js";import"./use-infinite-scroll-CnOZ3QQs.js";import"./useSuspenseInfiniteQuery-Di3mCiFx.js";import"./file-type-icon-GNT0wjq6.js";import"./checkbox-CKTKlc0c.js";import"./search-input-BBMyMvHh.js";import"./use-mcp-auth-status-DkUE1YUf.js";import"./types-cb53ubAI.js";import"./use-mcp-tools-DKcS99WV.js";import"./use-mcp-prompts-CytnXWFX.js";import"./utils-CVEq3hMx.js";import"./switch-DcKRnaVG.js";import"./scroll-area-dZYwQnHa.js";import"./use-project-native-view-presence-DM97JCfv.js";import"./match-site-slug-config-D3fUJ6vX.js";import"./use-file-configs-CQr5ImoR.js";import"./site-slug-DebpOoQq.js";import"./optimistic-project-sidebar-views-Db3TOzmO.js";import"./virtual-mcp-Bq8CmmOy.js";import"./sandbox-url-D3mC8qhT.js";import"./secret-picker-D2smZAsf.js";import"./use-secrets-CETMiKli.js";import"./omit-sandbox-map-jj4lCB2U.js";import"./serial-task-queue-CGOeQgpr.js";const x="home";function M(i){const t=c.c(5),{label:r}=i;let e;t[0]===Symbol.for("react.memo_cache_sentinel")?(e=p.jsx(b,{className:"aspect-video w-2/3 max-w-xl"}),t[0]=e):e=t[0];let o;t[1]!==r?(o=r&&p.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=p.jsxs("div",{className:"flex h-full w-full flex-col items-center justify-center gap-3 bg-background",children:[e,o]}),t[3]=o,t[4]=m):m=t[4],m}function D(i){const t=c.c(15),{path:r}=i;let e;t[0]===Symbol.for("react.memo_cache_sentinel")?(e={refetchIntervalWhenAbsent:2e3},t[0]=e):e=t[0];const o=k(x,r,e),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=p.jsx(M,{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=p.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=p.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),e=w(),o="path"in r&&typeof r.path=="string"?r.path:void 0;let m;return i[1]!==o||i[2]!==e?(m=o?p.jsx(D,{path:o},o):p.jsx(P,{virtualMcpId:e}),i[1]=o,i[2]=e,i[3]=m):m=i[3],m}function Qo(){const i=c.c(1);let t;return i[0]===Symbol.for("react.memo_cache_sentinel")?(t=p.jsx(j.Content,{children:p.jsx(C,{})}),i[0]=t):t=i[0],t}export{Qo as default};
@@ -1 +0,0 @@
1
- import{c as s,j as e}from"./index-BJCqpqJd.js";import{C as a}from"./index-_bGtHSkW.js";import{p as n,L as c}from"./library-tab-CPVjxTSo.js";import{u as l}from"./use-project-scope-ELhrNYxO.js";import"./use-mobile-Cr6YJGI_.js";import"./thread-button-AF1WSMlL.js";import"./agent-icon-B0fEYlzS.js";import"./AlertCircle-CIFSd5U6.js";import"./Tool01-BThW1knZ.js";import"./ArrowUp-D2UY3OMh.js";import"./ArrowLeft-Cs3E2BgS.js";import"./ArrowRight-DdzTB6qI.js";import"./ShoppingBag01-DkKlB-7l.js";import"./ZoomOut-T_sjF8JP.js";import"./Palette-BUkGC_ZN.js";import"./CheckCircle-BcLFM9-7.js";import"./Check-CaNT0o8-.js";import"./ChevronUp-BU7d4Get.js";import"./UserSquare-D_CN0irU.js";import"./Copy01-BUTI0qm9.js";import"./CreditCard01-JGaESeVs.js";import"./DotsVertical-CIYGxTTU.js";import"./Image01-BZEauj2T.js";import"./XClose-BXY1fsWn.js";import"./Key01-RaCvEF1t.js";import"./Link01-B4kFCKUO.js";import"./LinkExternal01-Cn0PsKoO.js";import"./Monitor01-DDhoI_iK.js";import"./Sun-X5oRKWho.js";import"./Plus-0VzOcDpy.js";import"./SearchMd-DvVcOTQO.js";import"./Trash01-CWZehatA.js";import"./Upload01-DBJMMF89.js";import"./User01-CkC9PpwU.js";import"./Users01-Bly3LhS2.js";import"./X-B2uln9s5.js";import"./use-chat-layout-state-CRef6D4d.js";import"./thread-route-DQM8B2sI.js";import"./use-panel-navigate-BDo5oxs2.js";import"./thread-intent-BUShkesP.js";import"./use-mcp-client-dYAEJ2Jd.js";import"./auth-D32cXta1.js";import"./backoff-8mStPHYB.js";import"./task-board-CJjc4xI-.js";import"./schema-BPGmAw0J.js";import"./slugify-CEUa2lfQ.js";import"./sheet-COySNUi4.js";import"./tooltip-DymYYuRo.js";import"./index-Cv3qPBot.js";import"./toolbar-icon-button-Bzitet5K.js";import"./shell-layout-BR24Afar.js";import"./avatar-DSv7rQey.js";import"./download-app-dialog-ilxwkPe1.js";import"./dialog-CYKucQEn.js";import"./command-3VOIGXTI.js";import"./index-CGwg_b5-.js";import"./integration-icon-BjqLrrwW.js";import"./project-icon-BWs8G7QE.js";import"./new-project-dialog-BmmmSjjo.js";import"./input-CE59clBd.js";import"./label-6ZrdaA5F.js";import"./repository-import-picker-zA2aRMgM.js";import"./use-navigate-to-agent-DoVNCwHy.js";import"./repository-binding--R5a6meD.js";import"./repository-picker-Ch8MjhWT.js";import"./useInfiniteQuery-CrHqvHwZ.js";import"./infiniteQueryObserver-DWdmBz6y.js";import"./collection-search-BRvScCfK.js";import"./use-debounced-value-BAjT0z0V.js";import"./use-organization-settings-B7IVGPSk.js";import"./use-is-desktop-app-BNujXJc_.js";import"./required-auth-layout-DrK2Ahbq.js";import"./autosend-B0cwcoZQ.js";import"./use-org-sso-C6AFvIzX.js";import"./resizable-DRo3WucN.js";import"./search-toggle-DcNdKksf.js";import"./alert-dialog-DJp_Ityl.js";import"./location-DBePU4bz.js";import"./use-org-fs-DBAxCQBE.js";import"./use-org-repo-syncs-DASdWM3g.js";import"./textarea-BXhBwPZM.js";import"./markdown-JTzUPlKH.js";import"./org-file-open-context-kXusxtya.js";import"./file-share-button-weodJ1fg.js";import"./popover-CxnAOud0.js";import"./preview-dialog-BXXWFhIT.js";import"./preview-content-JHqQ9fqd.js";import"./file-preview-C7iqsPcD.js";import"./utils-BHJpTmNN.js";import"./editor-D6m-Mg9w.js";import"./file-type-icon-GNT0wjq6.js";import"./folder-icon-DNT5ZPCH.js";import"./skill-md-ChfVs4uF.js";import"./format-time-CjIPQhCN.js";import"./differenceInSeconds-C3x8sHUj.js";import"./table-ChI81Khw.js";function to(){const t=s.c(6),{project:o}=l(),p=o?.id??"pending";let r;t[0]!==o?(r=o?n(o):void 0,t[0]=o,t[1]=r):r=t[1];const m=o?.title??void 0;let i;return t[2]!==p||t[3]!==r||t[4]!==m?(i=e.jsx(a.Content,{children:e.jsx(c,{root:r,rootLabel:m},p)}),t[2]=p,t[3]=r,t[4]=m,t[5]=i):i=t[5],i}export{to as default};
@@ -1 +0,0 @@
1
- import{c as a,j as s,u as n}from"./index-BJCqpqJd.js";import{C as l}from"./index-_bGtHSkW.js";import{L as c}from"./preview-content-JHqQ9fqd.js";import{a as f}from"./use-panel-navigate-BDo5oxs2.js";import{S as u}from"./settings-tab-DrI9h0MP.js";import{b as h}from"./thread-route-DQM8B2sI.js";import"./use-mobile-Cr6YJGI_.js";import"./thread-button-AF1WSMlL.js";import"./agent-icon-B0fEYlzS.js";import"./AlertCircle-CIFSd5U6.js";import"./Tool01-BThW1knZ.js";import"./ArrowUp-D2UY3OMh.js";import"./ArrowLeft-Cs3E2BgS.js";import"./ArrowRight-DdzTB6qI.js";import"./ShoppingBag01-DkKlB-7l.js";import"./ZoomOut-T_sjF8JP.js";import"./Palette-BUkGC_ZN.js";import"./CheckCircle-BcLFM9-7.js";import"./Check-CaNT0o8-.js";import"./ChevronUp-BU7d4Get.js";import"./UserSquare-D_CN0irU.js";import"./Copy01-BUTI0qm9.js";import"./CreditCard01-JGaESeVs.js";import"./DotsVertical-CIYGxTTU.js";import"./Image01-BZEauj2T.js";import"./XClose-BXY1fsWn.js";import"./Key01-RaCvEF1t.js";import"./Link01-B4kFCKUO.js";import"./LinkExternal01-Cn0PsKoO.js";import"./Monitor01-DDhoI_iK.js";import"./Sun-X5oRKWho.js";import"./Plus-0VzOcDpy.js";import"./SearchMd-DvVcOTQO.js";import"./Trash01-CWZehatA.js";import"./Upload01-DBJMMF89.js";import"./User01-CkC9PpwU.js";import"./Users01-Bly3LhS2.js";import"./X-B2uln9s5.js";import"./use-chat-layout-state-CRef6D4d.js";import"./thread-intent-BUShkesP.js";import"./use-mcp-client-dYAEJ2Jd.js";import"./auth-D32cXta1.js";import"./backoff-8mStPHYB.js";import"./task-board-CJjc4xI-.js";import"./schema-BPGmAw0J.js";import"./slugify-CEUa2lfQ.js";import"./use-project-scope-ELhrNYxO.js";import"./repository-binding--R5a6meD.js";import"./sheet-COySNUi4.js";import"./tooltip-DymYYuRo.js";import"./index-Cv3qPBot.js";import"./toolbar-icon-button-Bzitet5K.js";import"./shell-layout-BR24Afar.js";import"./avatar-DSv7rQey.js";import"./download-app-dialog-ilxwkPe1.js";import"./dialog-CYKucQEn.js";import"./command-3VOIGXTI.js";import"./index-CGwg_b5-.js";import"./integration-icon-BjqLrrwW.js";import"./project-icon-BWs8G7QE.js";import"./new-project-dialog-BmmmSjjo.js";import"./input-CE59clBd.js";import"./label-6ZrdaA5F.js";import"./repository-import-picker-zA2aRMgM.js";import"./use-navigate-to-agent-DoVNCwHy.js";import"./repository-picker-Ch8MjhWT.js";import"./useInfiniteQuery-CrHqvHwZ.js";import"./infiniteQueryObserver-DWdmBz6y.js";import"./collection-search-BRvScCfK.js";import"./use-debounced-value-BAjT0z0V.js";import"./use-organization-settings-B7IVGPSk.js";import"./use-is-desktop-app-BNujXJc_.js";import"./required-auth-layout-DrK2Ahbq.js";import"./autosend-B0cwcoZQ.js";import"./use-org-sso-C6AFvIzX.js";import"./resizable-DRo3WucN.js";import"./file-preview-C7iqsPcD.js";import"./use-org-fs-DBAxCQBE.js";import"./utils-BHJpTmNN.js";import"./editor-D6m-Mg9w.js";import"./file-type-icon-GNT0wjq6.js";import"./markdown-JTzUPlKH.js";import"./org-file-open-context-kXusxtya.js";import"./file-share-button-weodJ1fg.js";import"./popover-CxnAOud0.js";import"./location-DBePU4bz.js";import"./extract-connection-data-B-G_DpF-.js";import"./metadata-D72DunRR.js";import"./connection-CghRZvH1.js";import"./chat-context-DFdcIErL.js";import"./use-decopilot-events-BXaRjj_f.js";import"./use-ai-providers-BkzLFMQR.js";import"./build-improve-prompt-doc-CC90CrN1.js";import"./empty-state-C-cMIo1T.js";import"./use-date-fns-locale-C9CWZMOZ.js";import"./differenceInSeconds-C3x8sHUj.js";import"./use-connection-rm3wb9zf.js";import"./mcp-oauth-C3J5q_hp.js";import"./alert-dialog-DJp_Ityl.js";import"./textarea-BXhBwPZM.js";import"./use-debounced-autosave-D0o2B4Xo.js";import"./add-connection-dialog-kGctlCUa.js";import"./connection-card-CM7cJdHp.js";import"./connection-slug-CITJ0kGN.js";import"./drawer-DG-A7uu9.js";import"./form-BuKMCQ_-.js";import"./select-CV06ESGC.js";import"./connection-form-helpers-BXAo8rkG.js";import"./authenticate-and-persist-oauth-nxqo5RHp.js";import"./collection-tabs-DYXVQ5CX.js";import"./badge-BVm53kyq.js";import"./use-infinite-scroll-CnOZ3QQs.js";import"./useSuspenseInfiniteQuery-Di3mCiFx.js";import"./checkbox-CKTKlc0c.js";import"./search-input-BBMyMvHh.js";import"./use-mcp-auth-status-DkUE1YUf.js";import"./types-cb53ubAI.js";import"./use-mcp-tools-DKcS99WV.js";import"./use-mcp-prompts-CytnXWFX.js";import"./utils-CVEq3hMx.js";import"./switch-DcKRnaVG.js";import"./scroll-area-dZYwQnHa.js";import"./use-project-native-view-presence-DM97JCfv.js";import"./match-site-slug-config-D3fUJ6vX.js";import"./use-file-configs-CQr5ImoR.js";import"./site-slug-DebpOoQq.js";import"./optimistic-project-sidebar-views-Db3TOzmO.js";import"./virtual-mcp-Bq8CmmOy.js";import"./sandbox-url-D3mC8qhT.js";import"./secret-picker-D2smZAsf.js";import"./use-secrets-CETMiKli.js";import"./omit-sandbox-map-jj4lCB2U.js";import"./serial-task-queue-CGOeQgpr.js";function b(r){const t=a.c(4),{previewPath:m,onClose:p,showSeeInLibrary:o}=r,i=o===void 0?!1:o;let e;return t[0]!==p||t[1]!==m||t[2]!==i?(e=s.jsx("div",{className:"flex h-full w-full flex-col bg-background",children:s.jsx(c,{previewPath:m,onClose:p,showSeeInLibrary:i,variant:"panel"})}),t[0]=p,t[1]=m,t[2]=i,t[3]=e):e=t[3],e}function x(r){const t=a.c(5),{path:m}=r,{closePanel:p}=f();let o;t[0]!==p?(o=()=>p(),t[0]=p,t[1]=o):o=t[1];const i=o;let e;return t[2]!==i||t[3]!==m?(e=s.jsx(b,{previewPath:m,onClose:i,showSeeInLibrary:!0}),t[2]=i,t[3]=m,t[4]=e):e=t[4],e}function y(){const r=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?s.jsx(x,{path:o},o):s.jsx(u,{virtualMcpId:p}),r[1]=o,r[2]=p,r[3]=i):i=r[3],i}function Gr(){const r=a.c(1);let t;return r[0]===Symbol.for("react.memo_cache_sentinel")?(t=s.jsx(l.Content,{children:s.jsx(y,{})}),r[0]=t):t=r[0],t}export{Gr as default};
@@ -1 +0,0 @@
1
- import{c as m,j as i}from"./index-BJCqpqJd.js";import{C as p}from"./index-_bGtHSkW.js";import{S as e}from"./settings-tab-DrI9h0MP.js";import{b as n}from"./thread-route-DQM8B2sI.js";import"./use-mobile-Cr6YJGI_.js";import"./thread-button-AF1WSMlL.js";import"./agent-icon-B0fEYlzS.js";import"./AlertCircle-CIFSd5U6.js";import"./Tool01-BThW1knZ.js";import"./ArrowUp-D2UY3OMh.js";import"./ArrowLeft-Cs3E2BgS.js";import"./ArrowRight-DdzTB6qI.js";import"./ShoppingBag01-DkKlB-7l.js";import"./ZoomOut-T_sjF8JP.js";import"./Palette-BUkGC_ZN.js";import"./CheckCircle-BcLFM9-7.js";import"./Check-CaNT0o8-.js";import"./ChevronUp-BU7d4Get.js";import"./UserSquare-D_CN0irU.js";import"./Copy01-BUTI0qm9.js";import"./CreditCard01-JGaESeVs.js";import"./DotsVertical-CIYGxTTU.js";import"./Image01-BZEauj2T.js";import"./XClose-BXY1fsWn.js";import"./Key01-RaCvEF1t.js";import"./Link01-B4kFCKUO.js";import"./LinkExternal01-Cn0PsKoO.js";import"./Monitor01-DDhoI_iK.js";import"./Sun-X5oRKWho.js";import"./Plus-0VzOcDpy.js";import"./SearchMd-DvVcOTQO.js";import"./Trash01-CWZehatA.js";import"./Upload01-DBJMMF89.js";import"./User01-CkC9PpwU.js";import"./Users01-Bly3LhS2.js";import"./X-B2uln9s5.js";import"./use-chat-layout-state-CRef6D4d.js";import"./use-panel-navigate-BDo5oxs2.js";import"./use-project-scope-ELhrNYxO.js";import"./repository-binding--R5a6meD.js";import"./use-mcp-client-dYAEJ2Jd.js";import"./auth-D32cXta1.js";import"./thread-intent-BUShkesP.js";import"./backoff-8mStPHYB.js";import"./task-board-CJjc4xI-.js";import"./schema-BPGmAw0J.js";import"./slugify-CEUa2lfQ.js";import"./sheet-COySNUi4.js";import"./tooltip-DymYYuRo.js";import"./index-Cv3qPBot.js";import"./toolbar-icon-button-Bzitet5K.js";import"./shell-layout-BR24Afar.js";import"./avatar-DSv7rQey.js";import"./download-app-dialog-ilxwkPe1.js";import"./dialog-CYKucQEn.js";import"./command-3VOIGXTI.js";import"./index-CGwg_b5-.js";import"./integration-icon-BjqLrrwW.js";import"./project-icon-BWs8G7QE.js";import"./new-project-dialog-BmmmSjjo.js";import"./input-CE59clBd.js";import"./label-6ZrdaA5F.js";import"./repository-import-picker-zA2aRMgM.js";import"./use-navigate-to-agent-DoVNCwHy.js";import"./repository-picker-Ch8MjhWT.js";import"./useInfiniteQuery-CrHqvHwZ.js";import"./infiniteQueryObserver-DWdmBz6y.js";import"./collection-search-BRvScCfK.js";import"./use-debounced-value-BAjT0z0V.js";import"./use-organization-settings-B7IVGPSk.js";import"./use-is-desktop-app-BNujXJc_.js";import"./required-auth-layout-DrK2Ahbq.js";import"./autosend-B0cwcoZQ.js";import"./use-org-sso-C6AFvIzX.js";import"./resizable-DRo3WucN.js";import"./extract-connection-data-B-G_DpF-.js";import"./metadata-D72DunRR.js";import"./connection-CghRZvH1.js";import"./chat-context-DFdcIErL.js";import"./use-decopilot-events-BXaRjj_f.js";import"./use-ai-providers-BkzLFMQR.js";import"./location-DBePU4bz.js";import"./build-improve-prompt-doc-CC90CrN1.js";import"./empty-state-C-cMIo1T.js";import"./use-date-fns-locale-C9CWZMOZ.js";import"./differenceInSeconds-C3x8sHUj.js";import"./use-connection-rm3wb9zf.js";import"./mcp-oauth-C3J5q_hp.js";import"./alert-dialog-DJp_Ityl.js";import"./textarea-BXhBwPZM.js";import"./use-debounced-autosave-D0o2B4Xo.js";import"./add-connection-dialog-kGctlCUa.js";import"./connection-card-CM7cJdHp.js";import"./connection-slug-CITJ0kGN.js";import"./drawer-DG-A7uu9.js";import"./form-BuKMCQ_-.js";import"./select-CV06ESGC.js";import"./connection-form-helpers-BXAo8rkG.js";import"./authenticate-and-persist-oauth-nxqo5RHp.js";import"./collection-tabs-DYXVQ5CX.js";import"./badge-BVm53kyq.js";import"./use-infinite-scroll-CnOZ3QQs.js";import"./useSuspenseInfiniteQuery-Di3mCiFx.js";import"./file-type-icon-GNT0wjq6.js";import"./use-org-fs-DBAxCQBE.js";import"./checkbox-CKTKlc0c.js";import"./search-input-BBMyMvHh.js";import"./use-mcp-auth-status-DkUE1YUf.js";import"./types-cb53ubAI.js";import"./use-mcp-tools-DKcS99WV.js";import"./use-mcp-prompts-CytnXWFX.js";import"./utils-CVEq3hMx.js";import"./switch-DcKRnaVG.js";import"./popover-CxnAOud0.js";import"./scroll-area-dZYwQnHa.js";import"./use-project-native-view-presence-DM97JCfv.js";import"./match-site-slug-config-D3fUJ6vX.js";import"./use-file-configs-CQr5ImoR.js";import"./site-slug-DebpOoQq.js";import"./optimistic-project-sidebar-views-Db3TOzmO.js";import"./virtual-mcp-Bq8CmmOy.js";import"./sandbox-url-D3mC8qhT.js";import"./secret-picker-D2smZAsf.js";import"./use-secrets-CETMiKli.js";import"./omit-sandbox-map-jj4lCB2U.js";import"./serial-task-queue-CGOeQgpr.js";function s(){const t=m.c(2),o=n();let r;return t[0]!==o?(r=i.jsx(e,{virtualMcpId:o}),t[0]=o,t[1]=r):r=t[1],r}function _o(){const t=m.c(1);let o;return t[0]===Symbol.for("react.memo_cache_sentinel")?(o=i.jsx(p.Content,{children:i.jsx(s,{})}),t[0]=o):o=t[0],o}export{_o as default};