decocms 4.439.0 → 4.440.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 (353) hide show
  1. package/dist/client/assets/{AlertCircle-DNh15odk.js → AlertCircle-XXAWlcgx.js} +1 -1
  2. package/dist/client/assets/{AreaChart-DHC4iQTL.js → AreaChart-KwdkpcdH.js} +1 -1
  3. package/dist/client/assets/{ArrowLeft-Cqg3j8St.js → ArrowLeft-DI9NttEp.js} +1 -1
  4. package/dist/client/assets/{ArrowUp-6P5DjR1t.js → ArrowUp-By9-vc-8.js} +1 -1
  5. package/dist/client/assets/{CartesianChart-dVe_ZNcS.js → CartesianChart-a3R5Otrm.js} +1 -1
  6. package/dist/client/assets/{Check-D-yzmwYn.js → Check-BdObHRMl.js} +1 -1
  7. package/dist/client/assets/{CheckCircle-rjwyzOFk.js → CheckCircle-DkWvJpfN.js} +1 -1
  8. package/dist/client/assets/{ChevronUp-D60SP3XH.js → ChevronUp--br7_cGI.js} +1 -1
  9. package/dist/client/assets/{Copy01-CB0oESJQ.js → Copy01-DFagqi8s.js} +1 -1
  10. package/dist/client/assets/{CreditCard01-D5kRRYiA.js → CreditCard01-cZe4LFh2.js} +1 -1
  11. package/dist/client/assets/{DotsVertical-JQQSHvl4.js → DotsVertical-C3ILFYD8.js} +1 -1
  12. package/dist/client/assets/{ErrorBarContext-Bj2oJlhL.js → ErrorBarContext-DD5_v_f8.js} +1 -1
  13. package/dist/client/assets/{Image01-D5rleQuB.js → Image01-C9BtItDq.js} +1 -1
  14. package/dist/client/assets/{Key01-k7QWuZZQ.js → Key01-ByeXvLue.js} +1 -1
  15. package/dist/client/assets/{Line-d6qphZcQ.js → Line-BXlFmjqw.js} +1 -1
  16. package/dist/client/assets/{Link01-Cw5nVzWM.js → Link01-Ca-PT5RE.js} +1 -1
  17. package/dist/client/assets/{LinkBroken01-gwFdcT6K.js → LinkBroken01-CbbXXlF9.js} +1 -1
  18. package/dist/client/assets/{LinkExternal01-DY6YFto3.js → LinkExternal01-DgOdwpZM.js} +1 -1
  19. package/dist/client/assets/{Monitor01-CwcZK9j8.js → Monitor01-vZxChPKG.js} +1 -1
  20. package/dist/client/assets/{Palette-DjIClyYF.js → Palette-DDgu7YQn.js} +1 -1
  21. package/dist/client/assets/{Plus-B2OSMT7h.js → Plus-Dc1-p3zJ.js} +1 -1
  22. package/dist/client/assets/{SearchMd-zLAR-XV2.js → SearchMd-Djuw3ygg.js} +1 -1
  23. package/dist/client/assets/{Sector-BpeBpHJh.js → Sector-TqT6X53T.js} +1 -1
  24. package/dist/client/assets/{ShoppingBag01-DodmZnt4.js → ShoppingBag01-CJPq-mn3.js} +1 -1
  25. package/dist/client/assets/{Sun-BlPxF05z.js → Sun-3gw5TBRM.js} +1 -1
  26. package/dist/client/assets/{Tool01-BOjbFJCz.js → Tool01-Dd7igGPM.js} +1 -1
  27. package/dist/client/assets/{Trash01-XL5_ynxe.js → Trash01-5a67oVPj.js} +1 -1
  28. package/dist/client/assets/{Upload01-BgnfyY39.js → Upload01-B3VzWbAA.js} +1 -1
  29. package/dist/client/assets/{User01-BmSpscpo.js → User01-DRLDcqZB.js} +1 -1
  30. package/dist/client/assets/{UserSquare-DQSzlDyj.js → UserSquare-EoQ6nRn7.js} +1 -1
  31. package/dist/client/assets/{Users01-Cu0IOT-O.js → Users01-MkVzddym.js} +1 -1
  32. package/dist/client/assets/{X-BRJDCcj9.js → X-OQ3vfwBp.js} +1 -1
  33. package/dist/client/assets/{XAxis--Ss4V9TD.js → XAxis-D1CIlAov.js} +1 -1
  34. package/dist/client/assets/{XClose-cblogra0.js → XClose-CLkNA1fZ.js} +1 -1
  35. package/dist/client/assets/{ZoomOut-CHBfhru9.js → ZoomOut-RxJ7nETy.js} +1 -1
  36. package/dist/client/assets/{access-gate-zVG3uMCf.js → access-gate-Dm0Y8BrA.js} +1 -1
  37. package/dist/client/assets/{add-connection-dialog-BdGkf6fb.js → add-connection-dialog-CohlF0gi.js} +1 -1
  38. package/dist/client/assets/{agent-analytics-sie_dmFE.js → agent-analytics-CwEFxGCv.js} +1 -1
  39. package/dist/client/assets/agent-app-DmybRMFO.js +1 -0
  40. package/dist/client/assets/{agent-assets-CUmR3DlZ.js → agent-assets-C0uPqf_o.js} +1 -1
  41. package/dist/client/assets/{agent-automation-CDGnu6LJ.js → agent-automation-CI-90_Nr.js} +1 -1
  42. package/dist/client/assets/{agent-automations-DXUFG3pc.js → agent-automations-DirERrY_.js} +1 -1
  43. package/dist/client/assets/{agent-connect-sources-Dl3mNUrO.js → agent-connect-sources-8klTBWge.js} +1 -1
  44. package/dist/client/assets/agent-deck-RbNL3hWr.js +1 -0
  45. package/dist/client/assets/{agent-e2e-DLSjrNEX.js → agent-e2e-65dyEHOi.js} +1 -1
  46. package/dist/client/assets/{agent-experiments-A4uiLJgr.js → agent-experiments-BkZ7OhO1.js} +1 -1
  47. package/dist/client/assets/{agent-file-rvFuO31C.js → agent-file-Cibn8hOj.js} +1 -1
  48. package/dist/client/assets/{agent-git-DdunhDgp.js → agent-git-DE4S26JT.js} +1 -1
  49. package/dist/client/assets/{agent-hosting-DEIJsmW5.js → agent-hosting-DgICvzZz.js} +1 -1
  50. package/dist/client/assets/{agent-icon-MUEfToW1.js → agent-icon-DMUppBcz.js} +1 -1
  51. package/dist/client/assets/agent-library-B8lG5UG4.js +1 -0
  52. package/dist/client/assets/agent-library-file-BuJKMH9G.js +1 -0
  53. package/dist/client/assets/{agent-monitor--cuY5pYG.js → agent-monitor-DIoua9I6.js} +1 -1
  54. package/dist/client/assets/{agent-overview-lNYRzsXP.js → agent-overview-DYI1rW5v.js} +1 -1
  55. package/dist/client/assets/agent-settings-w3GUGNeB.js +1 -0
  56. package/dist/client/assets/{agent-site-editor-DjqU86NG.js → agent-site-editor-DGkqvDIU.js} +1 -1
  57. package/dist/client/assets/agent-site-editor-code-BQ6Om0-k.js +2 -0
  58. package/dist/client/assets/{agent-site-editor-content-DlK0hqc9.js → agent-site-editor-content-BUVUdrTT.js} +3 -3
  59. package/dist/client/assets/{agent-site-editor-preview-ByIKtrAz.js → agent-site-editor-preview-CNLEo6DL.js} +3 -3
  60. package/dist/client/assets/agent-view-CML0NpVU.js +1 -0
  61. package/dist/client/assets/{agent-view-guard-ChLJmBP5.js → agent-view-guard-DI25VnLM.js} +1 -1
  62. package/dist/client/assets/{agents-list-DoazNNiL.js → agents-list-ECR9La-G.js} +1 -1
  63. package/dist/client/assets/{ai-providers-BLWhSwwC.js → ai-providers-CJ1m1BGV.js} +1 -1
  64. package/dist/client/assets/{alert-BFHHNxnn.js → alert-abom0PnI.js} +1 -1
  65. package/dist/client/assets/{alert-dialog-DMpR0cgA.js → alert-dialog-BlGQ5aR_.js} +1 -1
  66. package/dist/client/assets/{analytics-sections-Dt3CooMv.js → analytics-sections-DlIRabZK.js} +1 -1
  67. package/dist/client/assets/{api-keys-CuS1VRyL.js → api-keys-BCiRhzoE.js} +1 -1
  68. package/dist/client/assets/api-keys-m0XumOHa.js +1 -0
  69. package/dist/client/assets/{app-editor-D3v5ZTbF.js → app-editor-FvngsWxE.js} +1 -1
  70. package/dist/client/assets/{asset-utils-B3iwsCJa.js → asset-utils-BN1s8bsE.js} +1 -1
  71. package/dist/client/assets/{auth-catchall-CfvE5cij.js → auth-catchall-C5dIeWj7.js} +1 -1
  72. package/dist/client/assets/{auth-entry-DF4Nif3w.js → auth-entry-DDaeQ5qC.js} +1 -1
  73. package/dist/client/assets/{auth-split-layout-DFGtdXSo.js → auth-split-layout-BeDfpXyu.js} +1 -1
  74. package/dist/client/assets/{auth-CtKUYryj.js → auth-zVBOuttQ.js} +1 -1
  75. package/dist/client/assets/{authenticate-and-persist-oauth-B2kuZKVb.js → authenticate-and-persist-oauth-DTnPLNmp.js} +1 -1
  76. package/dist/client/assets/{automation-list-row-BEcMpn8E.js → automation-list-row-zeocUcRy.js} +1 -1
  77. package/dist/client/assets/{automation-runs-C3b4l0S5.js → automation-runs-HaKdOgSB.js} +1 -1
  78. package/dist/client/assets/{automations-CYonb4k7.js → automations-CRCGFkLf.js} +1 -1
  79. package/dist/client/assets/{autosend-Cm6PSWmI.js → autosend-BMuGk3J_.js} +1 -1
  80. package/dist/client/assets/{avatar-ay32d7Rq.js → avatar-Qof2vVxs.js} +1 -1
  81. package/dist/client/assets/{badge-BI-lLKoq.js → badge-DlBGBPxK.js} +1 -1
  82. package/dist/client/assets/{block-document-BMgThWIX.js → block-document-B5zdti7F.js} +1 -1
  83. package/dist/client/assets/{blocks-preview-workspace-context-CGvBOobb.js → blocks-preview-workspace-context-D3LL6lji.js} +1 -1
  84. package/dist/client/assets/{buckets-CE-CN8Z3.js → buckets-IXwR7i0v.js} +1 -1
  85. package/dist/client/assets/{build-improve-prompt-doc-CIPlVAj1.js → build-improve-prompt-doc-DaYmg433.js} +1 -1
  86. package/dist/client/assets/{calendar-BrlmwFhH.js → calendar-D8H2edgl.js} +1 -1
  87. package/dist/client/assets/{capability-load-error-Ikh4so4d.js → capability-load-error-MHa6jDJE.js} +1 -1
  88. package/dist/client/assets/{category-editor-B1oCGWUg.js → category-editor-B3IqImuK.js} +1 -1
  89. package/dist/client/assets/{chart-CmddLGXm.js → chart-BUg0iLD-.js} +1 -1
  90. package/dist/client/assets/{chat-context-BME83pNr.js → chat-context-BT_fCIwJ.js} +1 -1
  91. package/dist/client/assets/{chat-draft-Cr8A9k3f.js → chat-draft-BOf2ssWg.js} +1 -1
  92. package/dist/client/assets/{checkbox-C_fcJ23Z.js → checkbox-9g6HUE3a.js} +1 -1
  93. package/dist/client/assets/{choose-editor-Ct_hojdT.js → choose-editor-DR-Q9Tls.js} +1 -1
  94. package/dist/client/assets/{claim-phase-copy-cMVgzjzE.js → claim-phase-copy-Cxwhb3Ei.js} +1 -1
  95. package/dist/client/assets/{cli-auth-success-CgVkfoY6.js → cli-auth-success-DIcIngZb.js} +1 -1
  96. package/dist/client/assets/{client-icons-_mUBMG5g.js → client-icons-C-8n2EwW.js} +1 -1
  97. package/dist/client/assets/{collapsible-BKpQ7Moy.js → collapsible-BOm0wEHE.js} +1 -1
  98. package/dist/client/assets/{collection-detail-faeL9TRY.js → collection-detail-Bk1USTX-.js} +1 -1
  99. package/dist/client/assets/{collection-display-button-B2gCuF1B.js → collection-display-button-jqsA8Fhq.js} +1 -1
  100. package/dist/client/assets/{collection-search-DF-hol44.js → collection-search-306OP2vT.js} +1 -1
  101. package/dist/client/assets/{collection-table-wrapper-D7rTVAg6.js → collection-table-wrapper-BhV7xJ_P.js} +1 -1
  102. package/dist/client/assets/{collection-tabs-BpMesivQ.js → collection-tabs-B0KzfANL.js} +1 -1
  103. package/dist/client/assets/{combobox-BqvA6tS8.js → combobox-ZiooVuFh.js} +1 -1
  104. package/dist/client/assets/{command-CIkNvcpT.js → command-DdkhWyIl.js} +1 -1
  105. package/dist/client/assets/{companion-mcps-section-CcDk1MlC.js → companion-mcps-section-UHFj7Oex.js} +1 -1
  106. package/dist/client/assets/{config-D3bkYN9z.js → config-BtdszJOe.js} +1 -1
  107. package/dist/client/assets/{connect-BuEYQp0G.js → connect-CefYFLnb.js} +1 -1
  108. package/dist/client/assets/{connect-layout-BKIx1TCS.js → connect-layout-6S5UXZM1.js} +1 -1
  109. package/dist/client/assets/{connection-DfFT6zSi.js → connection-Bam5fQyG.js} +1 -1
  110. package/dist/client/assets/{connection-card-Cjr4qV1f.js → connection-card-zwY0dB-Z.js} +1 -1
  111. package/dist/client/assets/{connection-detail-5M2l4dlO.js → connection-detail-Cl8J0WoF.js} +1 -1
  112. package/dist/client/assets/{connection-form-helpers-D0VuujW_.js → connection-form-helpers-BOQir9cM.js} +1 -1
  113. package/dist/client/assets/{connections-B_rZEPH1.js → connections-BUxB-KAl.js} +1 -1
  114. package/dist/client/assets/{context-PjhNUFtI.js → context-9Q6zyGsg.js} +1 -1
  115. package/dist/client/assets/{context-menu-8QjmDiKV.js → context-menu-DkHY6iSU.js} +1 -1
  116. package/dist/client/assets/{create-organization-dialog-D8Zq2NdW.js → create-organization-dialog-rOUQf0Oy.js} +1 -1
  117. package/dist/client/assets/{daily-pulse-CD2M2tf5.js → daily-pulse-BrRUUREQ.js} +1 -1
  118. package/dist/client/assets/{decopilot-BC1XQuwZ.js → decopilot-BJE0q6o0.js} +1 -1
  119. package/dist/client/assets/{device-hint-Be0ZjmvP.js → device-hint-C3jeUFCs.js} +1 -1
  120. package/dist/client/assets/{dialog-mikl7FPK.js → dialog-CshkwPdi.js} +1 -1
  121. package/dist/client/assets/{discover-dfa3FdGx.js → discover-Dr7cCDLx.js} +1 -1
  122. package/dist/client/assets/{domain-settings-YY0yjjj3.js → domain-settings-BqKmwW-G.js} +1 -1
  123. package/dist/client/assets/{download-app-dialog-B78Xzwoc.js → download-app-dialog-CNKP1j9Z.js} +1 -1
  124. package/dist/client/assets/{drawer-D3v6_JsP.js → drawer-CHF6n3YP.js} +1 -1
  125. package/dist/client/assets/{editor-D8tpvF9d.js → editor-Cbpxq8Y7.js} +1 -1
  126. package/dist/client/assets/{empty-state-C3HLisyP.js → empty-state-DCZJyNOr.js} +1 -1
  127. package/dist/client/assets/{empty-state-CkZIUtqW.js → empty-state-s5KfHMUL.js} +1 -1
  128. package/dist/client/assets/{extract-connection-data-D8uzEbgz.js → extract-connection-data-CcjZtPjH.js} +1 -1
  129. package/dist/client/assets/{feature-gate-CSSfV67D.js → feature-gate-DBAyKLUo.js} +1 -1
  130. package/dist/client/assets/{feature-paywall-QqKok_5s.js → feature-paywall-DjjdhYl3.js} +1 -1
  131. package/dist/client/assets/{file-explorer-C5kOKfct.js → file-explorer-Cnv88ItB.js} +1 -1
  132. package/dist/client/assets/{file-preview-BA4pWn9n.js → file-preview-AD02XtIo.js} +1 -1
  133. package/dist/client/assets/{file-share-button-BcBUJOwa.js → file-share-button-BvfvBfb3.js} +1 -1
  134. package/dist/client/assets/{file-type-icon-BiPcxDCh.js → file-type-icon-Ql8bNsbu.js} +1 -1
  135. package/dist/client/assets/flat-project-BbIN24kZ.js +1 -0
  136. package/dist/client/assets/{folder-icon-A-avv35D.js → folder-icon-yW_It0yE.js} +1 -1
  137. package/dist/client/assets/{form-DFhKgLoW.js → form-DC-OZkLI.js} +1 -1
  138. package/dist/client/assets/{gateway-client-CO0DTYhc.js → gateway-client-BGYFNhpz.js} +1 -1
  139. package/dist/client/assets/{general-B7JXtMaJ.js → general-EkTQtKKI.js} +1 -1
  140. package/dist/client/assets/{home-D3X_QmDS.js → home--qtejwp1.js} +1 -1
  141. package/dist/client/assets/{icon-button-DpSb8Egz.js → icon-button-DznMa322.js} +1 -1
  142. package/dist/client/assets/{index-DJtgWs5g.js → index-Be8XqOdc.js} +3 -3
  143. package/dist/client/assets/{index-BhtKEZBr.js → index-Bj_mB4Z1.js} +1 -1
  144. package/dist/client/assets/{index-Iyfhqo9X.js → index-CYF4A_PA.js} +1 -1
  145. package/dist/client/assets/{index-BANaWTQj.js → index-Ce5zRo1E.js} +1 -1
  146. package/dist/client/assets/{index-CdhxN82e.js → index-CmUTFx8q.js} +1 -1
  147. package/dist/client/assets/{index-B7fuDbL1.js → index-CpDmId9B.js} +1 -1
  148. package/dist/client/assets/{index-CUFTVjlL.js → index-D-UOMZZ_.js} +1 -1
  149. package/dist/client/assets/{index-7tCYd4Vg.js → index-D57k3t6w.js} +1 -1
  150. package/dist/client/assets/{index-BG-txml-.js → index-DEHZTLnD.js} +1 -1
  151. package/dist/client/assets/{index-CHuCYD81.js → index-DMbzNFov.js} +1 -1
  152. package/dist/client/assets/{index-DC0oSvPN.css → index-DjN2oOmz.css} +1 -1
  153. package/dist/client/assets/{index-z_0ITlK_.js → index-DjWuJPor.js} +1 -1
  154. package/dist/client/assets/{index-BkXdjZbb.js → index-DmFJLtCr.js} +1 -1
  155. package/dist/client/assets/{index-DiCP27dD.js → index-Du2WlkP0.js} +4 -4
  156. package/dist/client/assets/{index-NbacZBE-.js → index-igcUp6px.js} +1 -1
  157. package/dist/client/assets/{index-CFlrgMgL.js → index-qPYY6GgG.js} +1 -1
  158. package/dist/client/assets/{index-redirect-Ko3of0UI.js → index-redirect-CHyGD5U8.js} +1 -1
  159. package/dist/client/assets/{infiniteQueryObserver-CyHZuz-2.js → infiniteQueryObserver-CykMAwkD.js} +1 -1
  160. package/dist/client/assets/{infra-billing-C0BFdzuF.js → infra-billing-UsSMRdsv.js} +1 -1
  161. package/dist/client/assets/{input-BVeDaXAt.js → input-BrdR9egr.js} +1 -1
  162. package/dist/client/assets/{input-Djcpt5QF.js → input-D-vTzgs2.js} +3 -3
  163. package/dist/client/assets/{input-DiHRd4r7.js → input-DXtLlTqd.js} +1 -1
  164. package/dist/client/assets/{integration-icon-Bao5FeG3.js → integration-icon-CViStXoz.js} +1 -1
  165. package/dist/client/assets/{label-D7xsLlpE.js → label-58Qw-JZE.js} +1 -1
  166. package/dist/client/assets/{layout-BAB69r-K.js → layout-Dy2f9QXX.js} +1 -1
  167. package/dist/client/assets/{legacy-agents-deep-DMZRbqKj.js → legacy-agents-deep-BmwavNSc.js} +1 -1
  168. package/dist/client/assets/{legacy-main-redirect-As359wx5.js → legacy-main-redirect-DrJ-p-Kd.js} +1 -1
  169. package/dist/client/assets/library-BeLpQASQ.js +1 -0
  170. package/dist/client/assets/{library-tab-CHLyyHog.js → library-tab-BB_wHV8x.js} +1 -1
  171. package/dist/client/assets/{login-BxNWinsk.js → login-CUQf3CCF.js} +1 -1
  172. package/dist/client/assets/{markdown-bwKekgUZ.js → markdown-DLKu3YBc.js} +1 -1
  173. package/dist/client/assets/{mcp-app-renderer-CQvBXjgY.js → mcp-app-renderer-4bIAEgtP.js} +1 -1
  174. package/dist/client/assets/{mcp-oauth-BXj3mNzg.js → mcp-oauth-Cnjp3DGr.js} +1 -1
  175. package/dist/client/assets/{members-FveXAeAV.js → members-DSkxtFMH.js} +1 -1
  176. package/dist/client/assets/{message-templates-Z-5W2V4k.js → message-templates-B8x-h3FT.js} +1 -1
  177. package/dist/client/assets/{mini-report-page-D-ZojmkU.js → mini-report-page-hiIphID1.js} +1 -1
  178. package/dist/client/assets/{mock-board-BhSA6gG2.js → mock-board-BNVDzwoJ.js} +1 -1
  179. package/dist/client/assets/{monaco-editor-D6jAaYUJ.js → monaco-editor-B6rEE-o8.js} +1 -1
  180. package/dist/client/assets/{monitoring-stats-row-CJLoSY1V.js → monitoring-stats-row-BZIDgSPg.js} +1 -1
  181. package/dist/client/assets/{multi-select-BgfFNUKh.js → multi-select-CAetsNJk.js} +1 -1
  182. package/dist/client/assets/{mustache-fjqzOR6W.js → mustache-C_Baug6A.js} +1 -1
  183. package/dist/client/assets/{new-project-dialog-BB20uiKn.js → new-project-dialog-Su3Gi1wb.js} +1 -1
  184. package/dist/client/assets/{oauth-callback-BfvXWMRw.js → oauth-callback-DFgAmcry.js} +1 -1
  185. package/dist/client/assets/{oauth-callback-ai-provider-hQ4hVv77.js → oauth-callback-ai-provider-B6MpHaz9.js} +1 -1
  186. package/dist/client/assets/{onboarding-PSkWarZ7.js → onboarding-YT3O5Ww5.js} +1 -1
  187. package/dist/client/assets/{openai-conversation-DBU1KXlW.js → openai-conversation-IgCPp4x2.js} +1 -1
  188. package/dist/client/assets/{optimistic-project-sidebar-views-CnvB9J-O.js → optimistic-project-sidebar-views-Dtk6hOjd.js} +1 -1
  189. package/dist/client/assets/{org-file-open-context-D7lCLqWP.js → org-file-open-context-BnLB4jSd.js} +1 -1
  190. package/dist/client/assets/{organization-choice-CfoAZ3dj.js → organization-choice-B4gAqtuw.js} +1 -1
  191. package/dist/client/assets/{orgs-BA013DQ3.js → orgs-DRmr2z_c.js} +1 -1
  192. package/dist/client/assets/{page-seo-form-7gMmDQJA.js → page-seo-form-DcDcC29Z.js} +1 -1
  193. package/dist/client/assets/{pair-Cevm6d0j.js → pair-BOkfANVb.js} +1 -1
  194. package/dist/client/assets/{plan-ladder-aCvCcobI.js → plan-ladder-DKUy9zvx.js} +1 -1
  195. package/dist/client/assets/{popover-DCTrph_D.js → popover-Co_XiyUD.js} +1 -1
  196. package/dist/client/assets/{post-calendar-BpuA9JAu.js → post-calendar-DiLnFXng.js} +1 -1
  197. package/dist/client/assets/{post-editor-BKI84UXc.js → post-editor-lWAU23BO.js} +1 -1
  198. package/dist/client/assets/{preview-content-Hk3IWI9Q.js → preview-content-CicDgAha.js} +1 -1
  199. package/dist/client/assets/{preview-dialog-v-YYOVPl.js → preview-dialog-BV7MNp9u.js} +1 -1
  200. package/dist/client/assets/{profile-CtTYj67N.js → profile-C_cvXn18.js} +1 -1
  201. package/dist/client/assets/{project-app-view-mzT7jr0l.js → project-app-view-BgWpED_j.js} +1 -1
  202. package/dist/client/assets/{project-feed-D3XL-cR1.js → project-feed-wW0-SKIU.js} +1 -1
  203. package/dist/client/assets/{project-icon-Big-MTDO.js → project-icon-Dv5tiaQd.js} +1 -1
  204. package/dist/client/assets/project-reports-C4BJLBQR.js +1 -0
  205. package/dist/client/assets/project-tasks-CNbMF13P.js +1 -0
  206. package/dist/client/assets/{projects-CepdMOvE.js → projects-Co9ht4r6.js} +1 -1
  207. package/dist/client/assets/{projects-empty-state-vZgPOEGN.js → projects-empty-state-BHPOYJE0.js} +1 -1
  208. package/dist/client/assets/{prompts-UVhYmQ30.js → prompts-CVWS3bwz.js} +1 -1
  209. package/dist/client/assets/record-editor-CpdffT8c.js +1 -0
  210. package/dist/client/assets/{redirect-editor-DjVDiz1X.js → redirect-editor-B6A9VxnV.js} +1 -1
  211. package/dist/client/assets/{reports-rTgAGD0e.js → reports-BKkJRR46.js} +1 -1
  212. package/dist/client/assets/reports-BPHAKeLt.js +1 -0
  213. package/dist/client/assets/{reports-onboarding-jCEj8RJs.js → reports-onboarding-BYe6k6j4.js} +1 -1
  214. package/dist/client/assets/{reports-tab-0RvL3I5A.js → reports-tab-O2SVn8O7.js} +2 -2
  215. package/dist/client/assets/{repositories-C-ZPaM0R.js → repositories-CAb_k7u1.js} +1 -1
  216. package/dist/client/assets/{repository-binding-7uLkPgTO.js → repository-binding-1HKJG2dU.js} +1 -1
  217. package/dist/client/assets/{repository-import-picker-CJLnodOL.js → repository-import-picker-BMdxix12.js} +1 -1
  218. package/dist/client/assets/{repository-picker-BEisb5wQ.js → repository-picker-Bnum34GQ.js} +1 -1
  219. package/dist/client/assets/{require-capability-jbhah2Og.js → require-capability-CXxUD-ot.js} +1 -1
  220. package/dist/client/assets/{required-auth-layout-BYkqQs2_.js → required-auth-layout-eWdAXpWY.js} +1 -1
  221. package/dist/client/assets/{reset-password-B6tcqXNX.js → reset-password-_vRZ9PJ3.js} +1 -1
  222. package/dist/client/assets/{resizable-BsCV6tK2.js → resizable-DjwgNCy-.js} +1 -1
  223. package/dist/client/assets/{resolve-tab-icon-DFeiFaOh.js → resolve-tab-icon-Bak8BAHs.js} +1 -1
  224. package/dist/client/assets/{review-settings-BiNvlyCs.js → review-settings-DrthTknh.js} +1 -1
  225. package/dist/client/assets/{rich-text-link-control-BZeYaPP7.js → rich-text-link-control-x-muwvTw.js} +1 -1
  226. package/dist/client/assets/{roles-DOsWyyAw.js → roles-BDQAmSdr.js} +1 -1
  227. package/dist/client/assets/route-A5Z0zH-S.js +1 -0
  228. package/dist/client/assets/route-BiWPnB6n.js +1 -0
  229. package/dist/client/assets/{route-jVSRh2Ao.js → route-DpX8cahE.js} +1 -1
  230. package/dist/client/assets/{runnable-block-editor-CnJtlMKM.js → runnable-block-editor-DSAD7aE-.js} +1 -1
  231. package/dist/client/assets/{sandbox-lifecycle-context-BAJMUPhe.js → sandbox-lifecycle-context--jotIhMM.js} +1 -1
  232. package/dist/client/assets/{schema-uULRlMFx.js → schema-DOdBNr_5.js} +1 -1
  233. package/dist/client/assets/{scroll-area-DVyEm7OM.js → scroll-area-lO44Io7n.js} +1 -1
  234. package/dist/client/assets/{search-input-BD1KUApf.js → search-input-fvGBtM5d.js} +1 -1
  235. package/dist/client/assets/{search-toggle-M1mnWjNp.js → search-toggle-BSZDhrIY.js} +1 -1
  236. package/dist/client/assets/{secret-picker-BhFpEdB6.js → secret-picker-DOB7eKqI.js} +1 -1
  237. package/dist/client/assets/{secrets-DPafm7lX.js → secrets-DpyoMent.js} +1 -1
  238. package/dist/client/assets/{sections-editor-D6SV8WNT.js → sections-editor-CMuJbJDO.js} +1 -1
  239. package/dist/client/assets/{select-XfsDki64.js → select-D1BEDRG_.js} +1 -1
  240. package/dist/client/assets/{select-model-DwXOaJtS.js → select-model-Bub7WoQJ.js} +1 -1
  241. package/dist/client/assets/{seo-editor-FqSozPeP.js → seo-editor-B53rrMzz.js} +1 -1
  242. package/dist/client/assets/{separator-kOZLr21y.js → separator-BkTX5fcO.js} +1 -1
  243. package/dist/client/assets/{settings-tab-Bre5HiIa.js → settings-tab-DvpoIy1J.js} +1 -1
  244. package/dist/client/assets/{sheet-B-78DEn-.js → sheet-B4JDck22.js} +1 -1
  245. package/dist/client/assets/{shell-layout-BqGUI9qq.js → shell-layout-5_bP0b9R.js} +1 -1
  246. package/dist/client/assets/{skills-B6koxdnK.js → skills-nq0zSapq.js} +1 -1
  247. package/dist/client/assets/{sso-eRUC1kMb.js → sso-DyEuvpFw.js} +1 -1
  248. package/dist/client/assets/{suggestion-gvkpO2tS.js → suggestion-CEb70Zl1.js} +1 -1
  249. package/dist/client/assets/{switch-q3W9ZKax.js → switch-C4-fOrxd.js} +1 -1
  250. package/dist/client/assets/{synced-repos-DmLSe-Io.js → synced-repos-T4pMflc0.js} +1 -1
  251. package/dist/client/assets/{tab-icon-glyph-dHUEuXe7.js → tab-icon-glyph-ClsFil2N.js} +1 -1
  252. package/dist/client/assets/{table-DP3ml4By.js → table-Dt9K5CoM.js} +1 -1
  253. package/dist/client/assets/{tabs-QsV8VgLb.js → tabs-CmlgRJbo.js} +1 -1
  254. package/dist/client/assets/{task-board-Bsy8g6jg.js → task-board-D6xVkaAN.js} +1 -1
  255. package/dist/client/assets/{task-route-DvSaC1w6.js → task-route-DELc3WQr.js} +1 -1
  256. package/dist/client/assets/{task-status-DaLuiSZl.js → task-status-S7aOsKan.js} +1 -1
  257. package/dist/client/assets/{taskboard-analytics-CPih1fTU.js → taskboard-analytics-BzDyQ1Z-.js} +1 -1
  258. package/dist/client/assets/{tasks-BylQtsAP.js → tasks-BDF2zDVL.js} +1 -1
  259. package/dist/client/assets/tasks-D8uwJLml.js +1 -0
  260. package/dist/client/assets/{textarea-BTYU6whs.js → textarea-0prb_Emi.js} +1 -1
  261. package/dist/client/assets/{thread-analytics-BcMW4cpe.js → thread-analytics-Co_tbfAx.js} +1 -1
  262. package/dist/client/assets/{thread-button-DUMd6Gl5.js → thread-button-K3nnM2Jj.js} +1 -1
  263. package/dist/client/assets/{thread-intent-BUoHTmSs.js → thread-intent-CzXA7HyL.js} +1 -1
  264. package/dist/client/assets/{thread-route-DTtV9-z7.js → thread-route-B_-rBMiW.js} +1 -1
  265. package/dist/client/assets/{thread-route-Dhlv68Qd.js → thread-route-Cby7AcAM.js} +1 -1
  266. package/dist/client/assets/{thread-sheet-body-Bl4vCX_3.js → thread-sheet-body-FH7CMgMX.js} +1 -1
  267. package/dist/client/assets/{toggle-group-D4u16ScM.js → toggle-group-DcI3Rbbl.js} +1 -1
  268. package/dist/client/assets/{toolbar-icon-button-D6XJE-fW.js → toolbar-icon-button-BRDGqYqz.js} +1 -1
  269. package/dist/client/assets/{tooltip-Tr2HPvjQ.js → tooltip-CBM_j-A9.js} +1 -1
  270. package/dist/client/assets/{track-DL1FzN4e.js → track-C8VihVBg.js} +1 -1
  271. package/dist/client/assets/{types-DCGsxM-a.js → types-BXmxY_2k.js} +1 -1
  272. package/dist/client/assets/{usage-stats-CWr5CEzC.js → usage-stats-CGc489dq.js} +1 -1
  273. package/dist/client/assets/{use-ai-providers-B_f1rQjj.js → use-ai-providers-4MxbSPqM.js} +1 -1
  274. package/dist/client/assets/{use-automations-Cq1O-3i0.js → use-automations-DEGyd9it.js} +1 -1
  275. package/dist/client/assets/{use-autosave-CHEjRH5z.js → use-autosave-BxBqL1Yt.js} +1 -1
  276. package/dist/client/assets/{use-chat-layout-state-CT7zBoif.js → use-chat-layout-state-BiDmge4s.js} +1 -1
  277. package/dist/client/assets/{use-connect-companion-CfMsP3Rn.js → use-connect-companion-OCXk3aJz.js} +1 -1
  278. package/dist/client/assets/{use-connection-DLt6R4bi.js → use-connection-BPxGVk9k.js} +1 -1
  279. package/dist/client/assets/{use-copy-CLYTIONg.js → use-copy-C4UTClGi.js} +1 -1
  280. package/dist/client/assets/{use-create-virtual-mcp-m11_0WJM.js → use-create-virtual-mcp-Dlv5X9b4.js} +1 -1
  281. package/dist/client/assets/{use-date-fns-locale-1j3nOfJv.js → use-date-fns-locale-Zd02y8z7.js} +1 -1
  282. package/dist/client/assets/{use-debounced-autosave-Yt6HWq-D.js → use-debounced-autosave-DSvIjd9B.js} +1 -1
  283. package/dist/client/assets/{use-debounced-value-C3sc6opm.js → use-debounced-value-Hi5DwWll.js} +1 -1
  284. package/dist/client/assets/{use-deco-credits-BMaRSUa6.js → use-deco-credits-CGSwGByQ.js} +1 -1
  285. package/dist/client/assets/{use-decopilot-events-CrIzSMHr.js → use-decopilot-events-DtADALaV.js} +1 -1
  286. package/dist/client/assets/{use-delete-connection-BGvztQK_.js → use-delete-connection-DPp7GEJY.js} +1 -1
  287. package/dist/client/assets/{use-deployment-admin-CZoIvK7e.js → use-deployment-admin-CfpfquDc.js} +1 -1
  288. package/dist/client/assets/{use-fast-preview-draft-url-D0VACG9d.js → use-fast-preview-draft-url-CLCZ4aVE.js} +1 -1
  289. package/dist/client/assets/{use-file-configs-qerNjBlD.js → use-file-configs-D8tlssbt.js} +1 -1
  290. package/dist/client/assets/{use-infinite-scroll-dYJQUb5x.js → use-infinite-scroll-C_Nczdx_.js} +1 -1
  291. package/dist/client/assets/{use-join-requests-BIlkPzgz.js → use-join-requests-D8MKTYaJ.js} +1 -1
  292. package/dist/client/assets/{use-main-panel-tabs-CY7VBXj1.js → use-main-panel-tabs-BdN2kvAd.js} +1 -1
  293. package/dist/client/assets/{use-mcp-auth-status-jUIuYcXR.js → use-mcp-auth-status-BhzPxq2U.js} +1 -1
  294. package/dist/client/assets/{use-mcp-client-B2MWBaco.js → use-mcp-client-BGwc0_aG.js} +1 -1
  295. package/dist/client/assets/{use-mcp-prompts-B3G5Db0n.js → use-mcp-prompts-DAbiwecO.js} +1 -1
  296. package/dist/client/assets/{use-mcp-tools-BGTSgzQD.js → use-mcp-tools-Bryi_4Hu.js} +1 -1
  297. package/dist/client/assets/{use-members-Co6URFc9.js → use-members-D1ReT2Rd.js} +1 -1
  298. package/dist/client/assets/{use-mobile-pQqIDSFe.js → use-mobile-DW2X9sww.js} +1 -1
  299. package/dist/client/assets/{use-navigate-to-agent-DsFIew61.js → use-navigate-to-agent-KxGV60Dd.js} +1 -1
  300. package/dist/client/assets/use-new-blocks-editor-B8T1CzFC.js +1 -0
  301. package/dist/client/assets/{use-open-billing-url-9TGzfMS0.js → use-open-billing-url-C-a_tMdF.js} +1 -1
  302. package/dist/client/assets/{use-org-auth-client-BsYVB1hJ.js → use-org-auth-client-CP32u1RF.js} +1 -1
  303. package/dist/client/assets/{use-org-fs-CVraJ6yz.js → use-org-fs-DdUjMTXp.js} +1 -1
  304. package/dist/client/assets/{use-org-repo-syncs-CjTrRQU6.js → use-org-repo-syncs-UqfziudL.js} +1 -1
  305. package/dist/client/assets/{use-org-sso-DEPHrl0A.js → use-org-sso-sCMMN9gF.js} +1 -1
  306. package/dist/client/assets/{use-organization-roles-DIN278U2.js → use-organization-roles-DSRTwXVY.js} +1 -1
  307. package/dist/client/assets/{use-organization-settings-Bj01eknb.js → use-organization-settings-CFjSMs5I.js} +1 -1
  308. package/dist/client/assets/{use-panel-navigate-DSCpdSlE.js → use-panel-navigate-CJDpCpnr.js} +1 -1
  309. package/dist/client/assets/{use-project-scope-CtBx9mRG.js → use-project-scope-DEPThRAR.js} +1 -1
  310. package/dist/client/assets/{use-releases-CniZP6q6.js → use-releases-BV_LgkCY.js} +1 -1
  311. package/dist/client/assets/{use-reports-diagnostic-B2JxQzqt.js → use-reports-diagnostic-CJOy6zdH.js} +1 -1
  312. package/dist/client/assets/{use-secrets-C9609GG4.js → use-secrets-D5Eh5WEG.js} +1 -1
  313. package/dist/client/assets/{use-section-preview-base-t3MPJMlb.js → use-section-preview-base-BZUgxJo5.js} +1 -1
  314. package/dist/client/assets/{use-session-runtime-_LaLKVsW.js → use-session-runtime-B4jHGSPb.js} +1 -1
  315. package/dist/client/assets/{use-tags-DyCG8Pgp.js → use-tags-Ce2CBj-h.js} +1 -1
  316. package/dist/client/assets/{use-task-board-analytics-x1OhPjoJ.js → use-task-board-analytics-gxAXUY4n.js} +1 -1
  317. package/dist/client/assets/{use-task-board-events-BWmV0h-s.js → use-task-board-events-ChPcPJPj.js} +1 -1
  318. package/dist/client/assets/{use-task-metadata-Ci4ti26B.js → use-task-metadata-Z9tkfxGE.js} +1 -1
  319. package/dist/client/assets/{use-thread-analytics-Du-VhVh5.js → use-thread-analytics-CAtM9WJh.js} +1 -1
  320. package/dist/client/assets/{use-thread-outputs-DmyvMQPi.js → use-thread-outputs-ry0pTMEU.js} +1 -1
  321. package/dist/client/assets/useInfiniteQuery-DBJEu0oi.js +1 -0
  322. package/dist/client/assets/{useQueries-B-98FYC1.js → useQueries-C1ewKEuW.js} +1 -1
  323. package/dist/client/assets/useSuspenseInfiniteQuery-BSRD8Fs9.js +1 -0
  324. package/dist/client/assets/{users-isQ6tVka.js → users-BAInrhZu.js} +1 -1
  325. package/dist/client/assets/{utils-DqphBcT3.js → utils-Cr60QAw9.js} +1 -1
  326. package/dist/client/assets/{variant-calendar-DcvcdAAr.js → variant-calendar-yPYIHLCQ.js} +1 -1
  327. package/dist/client/assets/{variant-matcher-override-DkXKwTi8.js → variant-matcher-override-BOJuXXVB.js} +1 -1
  328. package/dist/client/assets/{view-mode-toggle-DkhaajMC.js → view-mode-toggle-Cl1lfkcd.js} +1 -1
  329. package/dist/client/assets/{virtual-mcp-BC5Jfihj.js → virtual-mcp-1qZjCZ09.js} +1 -1
  330. package/dist/client/index.html +2 -2
  331. package/dist/server/cli.js +1 -1
  332. package/dist/server/server.js +1 -1
  333. package/package.json +1 -1
  334. package/dist/client/assets/agent-app-6JHlx-Wc.js +0 -1
  335. package/dist/client/assets/agent-deck-B05_iIMl.js +0 -1
  336. package/dist/client/assets/agent-library-DWODQYB3.js +0 -1
  337. package/dist/client/assets/agent-library-file-B_xfN-mr.js +0 -1
  338. package/dist/client/assets/agent-settings-C84DY1Qi.js +0 -1
  339. package/dist/client/assets/agent-site-editor-code-Cn2_bvrE.js +0 -2
  340. package/dist/client/assets/agent-view-hGrHic_u.js +0 -1
  341. package/dist/client/assets/api-keys-zZAM-5ss.js +0 -1
  342. package/dist/client/assets/flat-project-joz7A3io.js +0 -1
  343. package/dist/client/assets/library-DEKjW-rT.js +0 -1
  344. package/dist/client/assets/project-reports-Daw_hYhG.js +0 -1
  345. package/dist/client/assets/project-tasks-CtprO76f.js +0 -1
  346. package/dist/client/assets/record-editor-CvGzqZ3N.js +0 -1
  347. package/dist/client/assets/reports-BqUgoTuQ.js +0 -1
  348. package/dist/client/assets/route-0XzjohZn.js +0 -1
  349. package/dist/client/assets/route-DERwtrnp.js +0 -1
  350. package/dist/client/assets/tasks-D8DST2AK.js +0 -1
  351. package/dist/client/assets/use-new-blocks-editor-vSm_pB4S.js +0 -1
  352. package/dist/client/assets/useInfiniteQuery-VJ_kzi-a.js +0 -1
  353. package/dist/client/assets/useSuspenseInfiniteQuery-Bw_5F2ui.js +0 -1
@@ -3772,7 +3772,7 @@ ${J.join(`
3772
3772
  `)}`:X}function Wo6($){let Z=new Set;for(let Q of $)for(let Y of Q.split(`
3773
3773
  `)){let X=Y.trim();if(/^Co-authored-by:\s/i.test(X))Z.add(X)}return[...Z]}var _Y8=200,st6=12,et6,Zo6=300,tC0=3;var hD1=D(()=>{Y7();a$();nC0();et6={aheadBy:0,behindBy:0,files:[]}});function Ho6($){if(!$||$.includes(".."))return!1;return Ko6.test($)}function bY8($){return Fo6.includes($)}function uD1($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!Ho6(Z))return null;let{__resolveType:Q,...Y}=$;return{resolveType:Z,payload:Y}}function lD1($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var Ko6,Fo6;var xY8=D(()=>{Ko6=/^[\w./@-]+$/;Fo6=["vtex/loaders/intelligentSearch/productList.ts","vtex/loaders/categories/tree.ts"]});function c60($,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 yY8($,Z,Q,Y){let X=$.organization?.id;if(!X)throw new Yz(v7);let J=await xj($.storage,X,Y);if(J&&await DD($.storage,J)){let F=await RU($,J,{forceRefresh:!0}).catch((U)=>{throw new Yz(U instanceof Error?U.message:v7)});await fY8($,Z,Q,F);return}let G=Y.connectionId??J?.legacyConnectionId;if(!G)throw new Yz("Push requires a connected git account. Connect the repository's provider for this project and restart the sandbox.");await jm({ctx:$,connectionId:G,organizationId:X,forceRefresh:!0,onLegacyMintError:(F)=>{let U=F instanceof Error?F.message:v7;throw new Yz(U)}});let{cloneUrl:W,gitUserName:K,gitUserEmail:H}=await qU(G,Y.owner,Y.name,$.db,$.vault).catch((F)=>{let{code:U,message:N}=jL$(F instanceof Error?F.message:String(F));throw U?new Yz(N):F});await fY8($,Z,Q,{cloneUrl:W,gitUserName:K,gitUserEmail:H})}async function fY8($,Z,Q,Y){let{cloneUrl:X,gitUserName:J,gitUserEmail:G}=Y,W=Cp($),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 GE(K,Uo6).catch(()=>K.statusText);throw Error(`Failed to refresh sandbox git credentials (${K.status}): ${H}`)}}var Uo6=10485760,Yz;var cD1=D(()=>{IW();gC0();w$0();MH0();p00();Y7();Yz=class Yz extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function Bo6($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!No6.test(Z))throw Error(`Invalid branch name: ${$}`)}function ty($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(Do6)])}async function Lo6($,Z){let Q=$.var.studioContext,Y=bU(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=Af(G?.metadata?.runtime);if(W)return W;let K=VR0(Z.virtualMcpMetadata),H=K==="cms"?await ED1(Q,{claimName:Z.claimName}):"alive",F=K==="cms"&&H!=="alive"?"cms":"sandbox",U=!!G&&(H==="gone"||H==="alive"&&K==="cms");if(U&&G)j$0(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 wo6($){let Z=$.get("vmClaim");if(Z.runner)return Z.runner;try{return await hX($.var.studioContext)}catch{return null}}function oy($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}async function fp($){let{virtualMcpMetadata:Z,connectionIds:Q}=$.get("vmClaim"),Y=$.var.studioContext,X=c60(Z,Q);if(!X)throw new f0({provider:"github",status:404,message:"Project has no repository"});let J=J0(Y);return Om(Y,J.id,X)}function dD1($,Z){let Q=Z instanceof Error?Z.message:String(Z),Y=vD$(Z);if(Y!==void 0)return $.json({error:Q},429,{...G9,...Y===null?{}:{"Retry-After":String(Math.ceil(Y/1000))}});if(Z instanceof s6)return $.json({error:Q},409,G9);let X=CW(Z);if(X!==null){let J=X===404?404:X===409||X===422?409:502;return $.json({error:Q},J,G9)}return $.json({error:Q},502,G9)}async function mD1($,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 lY8($){try{let Z=await fp($),Q=await oC0(Z,$.get("vmClaim").branch);return $.json(Q,200,G9)}catch(Z){return dD1($,Z)}}function m60($,Z){let Y=(aC0.get($)??Promise.resolve()).catch(()=>{}).then(Z),X=Y.catch(()=>{});return aC0.set($,X),X.finally(()=>{if(aC0.get($)===X)aC0.delete($)}),Y}async function NQ($,Z,Q){if(!Q?.runner&&$.get("vmClaim").runtime==="cms")return $.json({error:"sandbox not found: this session is sandbox-less"},404,G9);let Y=Q?.runner??oy($);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",...G9}})}}let O=await B.text(),L=Q?.redactRepoDir?jo6(O):O,w=B.headers.get("content-type")??"application/json";return new Response(L,{status:B.status,headers:{"content-type":w,...G9}})};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 jo6($){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 eC0($,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 Eo6($){return cY8.includes($)}var No6,gY8=524288,hY8=65536,Do6=1e4,uY8=2000,Oo6,aC0,G9,cY8,mY8=()=>{let $=new Z1;$.use("/:virtualMcpId/:branch/*",Oo6),$.post("/:virtualMcpId/:branch/write",(Q)=>NQ(Q,"/_sandbox/write",{forwardJsonBody:!0,signal:ty(Q)})),$.post("/:virtualMcpId/:branch/unlink",(Q)=>NQ(Q,"/_sandbox/unlink",{forwardJsonBody:!0,signal:ty(Q)})),$.post("/:virtualMcpId/:branch/mkdir",(Q)=>NQ(Q,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:ty(Q)})),$.post("/:virtualMcpId/:branch/rename",(Q)=>NQ(Q,"/_sandbox/rename",{forwardJsonBody:!0,signal:ty(Q)})),$.post("/:virtualMcpId/:branch/read",(Q)=>NQ(Q,"/_sandbox/read",{forwardJsonBody:!0,signal:ty(Q)})),$.post("/:virtualMcpId/:branch/glob",(Q)=>NQ(Q,"/_sandbox/glob",{forwardJsonBody:!0,signal:ty(Q)})),$.post("/:virtualMcpId/:branch/grep",(Q)=>NQ(Q,"/_sandbox/grep",{forwardJsonBody:!0,signal:ty(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 NQ(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 NQ(Q,`/_sandbox/exec/${encodeURIComponent(Y)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(Q)=>NQ(Q,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDir:!0})),$.put("/:virtualMcpId/:branch/config",(Q)=>NQ(Q,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(Q)=>{let Y=Q.req.param("step");if(!Y||!Eo6(Y))return Q.json({error:`step must be one of: ${cY8.join(", ")}`},400);let X=Q.get("vmClaim"),J=await ED1(Q.var.studioContext,{claimName:X.claimName})==="gone"?null:await wo6(Q);if(!J)return Q.json({error:"sandbox not found: nothing is running at this ref"},404,G9);if(Y==="start"){let G=J0(Q.var.studioContext),W=Nd(X.virtualMcpMetadata);try{await RR0({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 NQ(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 DO(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 uQ8(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 lY8(Q);return Z(Q)});let Z=(Q)=>NQ(Q,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([Q.req.raw.signal,AbortSignal.timeout(uY8)])});return $.post("/:virtualMcpId/:branch/git/status",(Q)=>{if(Q.get("vmClaim").runtime==="cms")return lY8(Q);return NQ(Q,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([Q.req.raw.signal,AbortSignal.timeout(uY8)])})}),$.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 fp(Q),G=await rC0(J,Y.branch,X.base);return Q.json(G,200,G9)}catch(X){return dD1(Q,X)}return NQ(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,G9);let Y=oy(Q);if(Y instanceof Response)return Y;let{claimName:X,virtualMcpMetadata:J,connectionIds:G}=Q.get("vmClaim"),W=Q.var.studioContext;return m60(X,async()=>{try{await zD1(W,Y,X);let K=c60(J,G);if(K)await yY8(W,Y,X,K)}catch(K){if(K instanceof Yz)return Q.json({error:K.message},403,G9);let H=K instanceof Error?K.message:String(K);return Q.json({error:H},502,G9)}return NQ(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 m60(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,G9);try{let G=await fp(Q);return await vY8(G,Y.branch,J),Q.json({ok:!0},200,G9)}catch(G){let W=CW(G)===409||G instanceof s6?409:502,K=G instanceof Error?G.message:String(G);return Q.json({error:K},W,G9)}});return m60(Y.claimName,()=>NQ(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 m60(Y.claimName,async()=>{try{let W=await Q.req.json().catch(()=>({})),K=await fp(Q),H=W.base??await K.getDefaultBranch();return await sC0(K,Y.branch,H),Q.json({ok:!0},200,G9)}catch(W){return dD1(Q,W)}});let X=oy(Q);if(X instanceof Response)return X;let{claimName:J}=Q.get("vmClaim"),G=Q.var.studioContext;return m60(J,async()=>{try{await zD1(G,X,J)}catch(W){let K=W instanceof Error?W.message:String(W);return Q.json({error:K},502,G9)}return NQ(Q,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",x5({maxSize:gY8,onError:(Q)=>Q.json({error:"Payload too large"},413,G9)}),async(Q)=>{let Y=Q.get("vmClaim"),X=null;if(Y.runtime!=="cms"){let H=oy(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]=TD1(F)&&N?[F,U]:X?await Promise.all([eC0(X,J,"/_sandbox/git/status","GET",{userId:G,projectRef:W}),eC0(X,J,"/_sandbox/git/diff","GET",{userId:G,projectRef:W})]):await(async()=>{let w=await fp(Q);return Promise.all([oC0(w,Y.branch),rC0(w,Y.branch)])})();await rG(K,J0(K).id,"suggesting a commit message");let L=await iQ8(K,B,O);return Q.json(L,200,G9)}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,G9);return Q.json({error:F},502,G9)}}),$.post("/:virtualMcpId/:branch/git/judge-review",x5({maxSize:gY8,onError:(Q)=>Q.json({error:"Payload too large"},413,G9)}),async(Q)=>{let Y=Q.get("vmClaim"),X=null;if(Y.runtime!=="cms"){let H=oy(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]=TD1(F)&&N?[F,U]:X?await Promise.all([eC0(X,J,"/_sandbox/git/status","GET",{userId:G,projectRef:W}),eC0(X,J,"/_sandbox/git/diff","GET",{userId:G,projectRef:W})]):await(async()=>{let w=await fp(Q);return Promise.all([oC0(w,Y.branch),rC0(w,Y.branch)])})();await rG(K,J0(K).id,"judging whether a change needs review");let L=await nQ8(K,B,O,typeof H.language==="string"?H.language:void 0);return Q.json(L,200,G9)}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,G9);return Q.json({error:F},502,G9)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(Q)=>{let Y=oy(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 mD1(Q,`${W}${J}`)}),$.post("/:virtualMcpId/:branch/preview-invoke",x5({maxSize:hY8,onError:(Q)=>Q.json({error:"Payload too large"},413)}),async(Q)=>{let Y=oy(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=uD1(G);if(!W)return Q.json({error:"Invalid or missing __resolveType"},400);let K=lD1(J,W.resolveType);return mD1(Q,K,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(W.payload),signal:AbortSignal.timeout(30000)})}),$.post("/:virtualMcpId/:branch/catalog-invoke",x5({maxSize:hY8,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):Bd(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=uD1(W);if(!K)return Q.json({error:"Invalid or missing __resolveType"},400);if(!bY8(K.resolveType))return Q.json({error:"resolveType not allowed"},403);let H=lD1(G,K.resolveType);return mD1(Q,H,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(K.payload),signal:AbortSignal.timeout(30000)})}),$};var dY8=D(()=>{J8();QK();Sp();jD1();Ud();yQ8();hW();Dd();gQ8();yW();WH();hQ8();lQ8();P71();L$0();MD1();tQ8();Y7();T5();hD1();xY8();IR0();cD1();No6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;Oo6=yC0(async($,Z)=>{let Q=$.var.studioContext;try{n(Q)}catch{return $.json({error:"Unauthorized"},401)}let Y=d0(Q);if(!Y)return $.json({error:"Unauthorized"},401);let X;try{X=J0(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{Bo6(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=P10({orgId:X.id,virtualMcpId:J,branch:G}),H=await m91(Q,G),F=d91(H,Y),U=fQ8({userId:F,projectRef:K}),N=W.metadata??null,B=await Lo6($,{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 hX(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()});aC0=new Map;G9={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};cY8=["clone","install","start"]});function iY8($,Z,Q){let Y=iD1.get($);if(!Y)Y={pending:null,running:!1},iD1.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)Po6($,Y);return J}async function Po6($,Z){Z.running=!0;try{while(Z.pending){let Q=Z.pending;Z.pending=null;try{let Y=await Ao6(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)iD1.delete($)}}async function Ao6($){let{client:Z,branch:Q,packagePath:Y}=$.deps,X=new Map;for(let J=0;;J++){let G=await xp(Z,Q),W=await Z.listDecofileEntries(G,Y),K=fD1(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=yD1(K,N),L=`${JSON.stringify(B,null,2)}
3774
3774
  `;await VY8(Z.repo,L);let w=O[0]??`${pC0(Y)}/${kD1(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 yD1(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 kY8(Z,F.values(),X),{decofile:B,skipped:O}=x60(N);if(O.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:KH(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:To6($),expectedHead:G,changes:H});return N}catch(N){if(!(N instanceof s6)||J>=zo6-1)throw N;await O$(D7(2000,200,J,2,0.5))}}}function To6($){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 A51(Y,$.deps.coAuthor)}var zo6=3,iD1;var pY8=D(()=>{nA0();uC0();i4();a$();Y7();nC0();iD1=new Map});import{createHmac as nY8,randomBytes as Ro6,timingSafeEqual as qo6}from"crypto";function tY8(){if($_0)return $_0;let $;try{let Z=E0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return $_0=$?Buffer.from($):Ro6(32),$_0}function pD1($){let Z=$.nowMs??Date.now(),Q={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+Mo6)/1000)},Y=Buffer.from(JSON.stringify(Q)).toString("base64url"),X=nY8("sha256",tY8()).update(Y).digest("base64url");return`${Y}.${X}`}function oY8($,Z){let Q=$.indexOf(".");if(Q<0)return!1;let Y=$.slice(0,Q),X=Buffer.from($.slice(Q+1)),J=Buffer.from(nY8("sha256",tY8()).update(Y).digest("base64url"));if(X.length!==J.length||!qo6(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 Mo6=21600000,$_0=null;var rY8=D(()=>{X$()});function Z_0($){return $&&typeof $==="object"&&!Array.isArray($)?$:null}function Io6($){for(let[Z,Q]of Object.entries($)){if(!Z.startsWith("collections/blog/posts/"))continue;let Y=Z_0(Q)?.__resolveType;if(typeof Y==="string"&&Y)return Y}return"blog/loaders/Blogpost.ts"}function sY8($){let Z;try{Z=Z_0(JSON.parse($))}catch{return $}if(!Z)return $;let Q=Io6(Z),Y={...Z},X=0;for(let[J,G]of Object.entries(Z)){if(!J.startsWith("blog-manager/posts/"))continue;let W=Z_0(G),K=W&&Z_0(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 yp}from"zod";function ko6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&Vo6.test($)}function QX8($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function d60($){let Z=$.get("decofileScope");return Om($.var.studioContext,Z.organizationId,Z.repository)}function i60($,Z){let Q=Z instanceof Error?Z.message:String(Z);if(Z instanceof s6)return $.json({error:Q},409);let Y=CW(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 YX8(){let $=new Z1;return $.use("/:virtualMcpId/:branch",ZX8),$.use("/:virtualMcpId/:branch/*",ZX8),$.get("/:virtualMcpId/:branch",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await d60(Z),X=await SY8(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(sY8(X.decofile),200,{...J,"content-type":"application/json"});let G=pD1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.body(`{"version":${JSON.stringify(X.sha)},"token":${JSON.stringify(G)},"apiHost":${JSON.stringify(QX8(Z))},"decofile":${X.decofile}}`,200,{...J,"content-type":"application/json"})}catch(Y){return i60(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 d60(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 i60(Z,X)}}),$.patch("/:virtualMcpId/:branch",Co6,async(Z)=>{let Q=Z.get("decofileScope"),Y=Z.var.studioContext,X=_o6.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=f60(X.data)}catch(G){if(G instanceof y60)return Z.json({error:G.message},400);throw G}for(let G of[...Object.keys(J.set??{}),...J.delete??[]])try{hC0(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(VD1(G))return Z.json({error:`Block key "${G}" collides with a framework resolver module and cannot be written`},400)}try{let G=await d60(Z),W=await iY8(`${Q.organizationId}/${Q.virtualMcpId}/${Q.branch}`,{client:G,branch:Q.branch,packagePath:Q.packagePath,coAuthor:Cp(Y)},J),K=pD1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.json({version:W,token:K,apiHost:QX8(Z)})}catch(G){return i60(Z,G)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await d60(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(CW(W)!==409)throw W;await sC0(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(CW(G)===409)return Z.json({error:"merge-conflict"},409);if(CW(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 i60(Z,Y)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await d60(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(CW(J)===404)return Z.json({baseBranch:X,aheadBy:0,behindBy:0});throw J}}catch(Y){return i60(Z,Y)}}),$}var Vo6,aY8=500,eY8=1048576,$X8=1024,So6=8388608,Co6,_o6,ZX8;var XX8=D(()=>{IR0();uC0();J8();QK();jD1();gC0();cD1();Y7();pY8();rY8();hD1();nC0();WH();Vo6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;Co6=x5({maxSize:So6,onError:($)=>$.json({error:"Payload too large"},413)}),_o6=yp.object({set:yp.record(yp.string(),yp.unknown()).optional(),delete:yp.array(yp.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)<=aY8,{message:`Patch cannot touch more than ${aY8} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=eY8),{message:`Each block must be at most ${eY8} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=$X8),{message:`Each block key must be at most ${$X8} characters`}),ZX8=yC0(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(!ko6(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||!oY8(B,{organizationId:Y.id,virtualMcpId:X,branch:J}))return $.json({error:"Unauthorized"},401)}if(!await VJ(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(!Bd(K))return $.json({error:"Project has no preview server configured"},404);let F=W.connections?.map((B)=>B.connection_id)??[],U=c60(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 JX8=($)=>{let Z=new Z1;if(Z.use("*",Kp),Z.use("*",S58),Z.route("/",V58($.voiceSessions)),Z.route("/",pS0()),Z.route("/",N98()),Z.route("/",a58()),Z.route("/",PQ8()),Z.route("/",TQ8()),Z.route("/",BQ8()),Z.route("/",EQ8()),Z.route("/",OQ8()),Z.route("/",bC0()),Z.route("/tools",SQ8()),Z.route("/",IQ8()),Z.route("/",i78({kvStorage:$.kvStorage})),Z.route("/",m78()),Z.route("/fs",XQ8({getConnection:$.getNatsConnection})),Z.route("/sandbox",mY8()),Z.route("/decofile",YX8()),Z.route("/",FQ8()),Z.route("/",GQ8()),Z.route("/deco-sites",tS0()),Z.route("/hosting",l58()),Z.route("/monitor",t58()),Z.route("/sso",lS0()),Z.route("/",xC0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",f58()),$.mountDevAssets)Z.route("/dev-assets",aS0({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("/",I88()),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",KQ8()),Z.route("/mcp",gM0()),Z.route("/mcp/self",SC0()),Z.route("/mcp",lM0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var GX8=D(()=>{J8();k58();C58();SS0();y58();hN1();c58();o58();eS0();sE();bN1();dN1();d78();p78();JQ8();WQ8();q80();MN1();cM0();HD1();HQ8();UQ8();DQ8();LQ8();ND1();AQ8();RQ8();VQ8();BD1();CQ8();DD1();hM0();dY8();XX8()});import{z as ry}from"zod";class nD1{adapter;getConnection;kvPromise;constructor($,Z){this.adapter=$;this.getConnection=Z}kv(){let $=this.getConnection();if(!$||$.isClosed())throw new q1(503,{message:"Voice transport is unavailable"});return this.kvPromise??=new HX8.Kvm(Q_0.jetstream($)).create("STUDIO_VOICE_SESSIONS",{storage:Q_0.StorageType.Memory,ttl:FX8.nanos(VD),max_bytes:10485760}).catch((Z)=>{throw this.kvPromise=void 0,Z}),this.kvPromise}async conversationAgent($){let Z=await this.kv(),Q=`agent.${$.conversationKey}`,Y=Date.now()+45000;while(Date.now()<Y){let X=await Z.get(Q),J=X?.operation==="PUT"?KX8.parse(X.json()):null;if(J?.state==="ready")return J.agentId;if(J?.state==="creating"&&J.expiresAt>Date.now()){await O$(200);continue}let G=WX8.encode(JSON.stringify({state:"creating",expiresAt:Date.now()+40000})),W;try{W=X&&J?await Z.update(Q,G,X.revision):await Z.create(Q,G)}catch{await O$(200);continue}try{let K=await $.ensureConversationAgent();return await Z.update(Q,WX8.encode(JSON.stringify({state:"ready",agentId:K})),W),K}catch(K){throw await Z.delete(Q,{previousSeq:W}).catch(()=>{}),K}}throw new q1(503,{message:"Voice conversation is starting; try again"})}async createSession($){let Z=this.adapter.forConversationModel($.model),Q=await this.conversationAgent(Z);try{return{provider:"elevenlabs",conversationToken:await Z.createConversationToken(Q)}}catch(Y){let X=await this.kv(),J=`agent.${Z.conversationKey}`,G=await X.get(J),W=G?.operation==="PUT"?KX8.parse(G.json()):null;if(G&&W?.state==="ready"&&W.agentId===Q)await X.delete(J,{previousSeq:G.revision}).catch(()=>{});throw Y}}}var Q_0,HX8,FX8,WX8,KX8;var UX8=D(()=>{LJ();fU();a$();Q_0=C(LK(),1),HX8=C(YA(),1),FX8=C(Tz(),1),WX8=new TextEncoder,KX8=ry.discriminatedUnion("state",[ry.object({state:ry.literal("ready"),agentId:ry.string()}),ry.object({state:ry.literal("creating"),expiresAt:ry.number()})])});import{z as gp}from"zod";function vo6($){return{model:$.model,instructions:`${Fq$}
3775
- Start in ${$.language==="pt"?"Brazilian Portuguese":"English"}, and follow the user's language.`,delegation:{type:"client"},audio:{output:{voice:$.voice}},store:!1}}class tD1{config;constructor($){this.config=$}async createSession(){return{provider:"openai",transport:"webrtc"}}async negotiate($){let Z=await fetch("https://api.openai.com/v1/live/sessions",{method:"POST",headers:{Authorization:`Bearer ${this.config.apiKey}`,"Content-Type":"application/json","OpenAI-Safety-Identifier":$.safetyIdentifier},body:JSON.stringify({session:vo6({...this.config,language:$.language,model:$.model}),transport:{type:"webrtc",sdp:$.sdp}}),signal:AbortSignal.timeout(15000)});if(!Z.ok)throw await Z.body?.cancel(),Error(`OpenAI Live request failed (${Z.status})`);return{sdp:gp.object({session:gp.object({id:gp.string().min(1)}),transport:gp.object({type:gp.literal("webrtc"),sdp:gp.string().min(1).max(1e5)})}).parse(await Z.json()).transport.sdp}}}var NX8=D(()=>{fU()});var BX8;var DX8=D(()=>{BX8=[{name:"delegate_to_agent",description:"Submit a complete request to the selected Studio agent. Returns after acceptance while work continues in the background. Results arrive later.",parameters:{type:"object",properties:{request:{type:"string",description:"The complete user request, with relevant conversational details. Preserve intent and constraints."}},required:["request"]}},{name:"get_agent_status",description:"Read the current chat's work status and known results. This does not track independent organization tasks; delegate fresh task-status queries to the Studio agent. Use when asked, never poll.",parameters:{type:"object",properties:{}}},{name:"stop_agent_work",description:"Request cancellation in the current chat ONLY when the user explicitly asks. Speaking over the companion is not cancellation. To stop independent tasks, delegate that request to the Studio agent.",parameters:{type:"object",properties:{}}}]});function oD1($){return{conversation_config:{agent:{first_message:"",language:"en",prompt:{prompt:Kq$,llm:$.conversationModel,thinking_budget:0,max_tokens:512,tools:BX8.map((Z)=>({...Z,type:"client",expects_response:!0,response_timeout_secs:Z.name==="delegate_to_agent"?20:5,...Z.name==="delegate_to_agent"?{execution_mode:"async",interruption_mode:"allow",pre_tool_speech:"off"}:{}}))}},asr:{provider:"scribe_realtime",quality:"high"},turn:{turn_eagerness:"normal",turn_timeout:-1,silence_end_call_timeout:-1},tts:{voice_id:$.voiceId,model_id:$.model},conversation:{max_duration_seconds:VD/1000,client_events:["audio","interruption","user_transcript","agent_response","client_tool_call","vad_score"]}},platform_settings:{auth:{enable_auth:!0},privacy:{record_voice:!1,retention_days:1,delete_audio:!0,delete_transcript_and_pii:!0},overrides:{conversation_config_override:{agent:{language:!0}}}}}}var OX8=D(()=>{fU();DX8()});import{z as tX}from"zod";import{createHash as bo6,createHmac as xo6}from"crypto";class Y_0{config;conversationKey;configurationKey;constructor($){this.config=$;this.configurationKey=bo6("sha256").update(JSON.stringify(oD1($))).digest("hex"),this.conversationKey=xo6("sha256",$.apiKey).update(this.configurationKey).digest("hex")}forConversationModel($){return $===this.config.conversationModel?this:new Y_0({...this.config,conversationModel:$})}async request($,Z,Q){let Y=await fetch(`https://api.elevenlabs.io/v1${$}`,{method:Z===void 0?"GET":"POST",headers:{"xi-api-key":this.config.apiKey,"Content-Type":"application/json"},body:JSON.stringify(Z),signal:Q});if(!Y.ok)throw await Y.body?.cancel(),Error(`ElevenLabs request failed (${Y.status})`);return Y}async ensureConversationAgent(){let $=`Studio voice ${this.configurationKey.slice(0,24)}`,Z=await this.request(`/convai/agents?search=${encodeURIComponent($)}&page_size=100`,void 0,AbortSignal.timeout(15000)),{agents:Q}=tX.object({agents:tX.array(tX.object({agent_id:tX.string(),name:tX.string()}))}).parse(await Z.json()),Y=Q.find((J)=>J.name===$);if(Y){let J=await this.request(`/convai/agents/${encodeURIComponent(Y.agent_id)}`,void 0,AbortSignal.timeout(15000));return tX.object({platform_settings:tX.object({auth:tX.object({enable_auth:tX.literal(!0)})})}).parse(await J.json()),Y.agent_id}let X=await this.request("/convai/agents/create",{name:$,...oD1(this.config)},AbortSignal.timeout(15000));return tX.object({agent_id:tX.string().min(1)}).parse(await X.json()).agent_id}async createConversationToken($){let Z=await this.request(`/convai/conversation/token?agent_id=${encodeURIComponent($)}`,void 0,AbortSignal.timeout(15000));return tX.object({token:tX.string().min(1)}).parse(await Z.json()).token}async createTranscriptionToken(){let $=await this.request("/single-use-token/realtime_scribe",{},AbortSignal.timeout(15000));return tX.object({token:tX.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 LX8=D(()=>{OX8()});import{createHmac as fo6,timingSafeEqual as yo6}from"crypto";import{z as hp}from"zod";function jX8($,Z){if(!Z)throw Error("Voice requires a shared authentication secret");return fo6("sha256",Z).update(`studio-voice-session:v1:${$}`).digest("base64url")}function EX8($,Z){let Q=Buffer.from(JSON.stringify(wX8.parse($))).toString("base64url");return`${Q}.${jX8(Q,Z)}`}function zX8($,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(jX8(X,Z)),W=Buffer.from(J);if(W.length!==G.length||!yo6(W,G))return null;try{let K=wX8.safeParse(JSON.parse(Buffer.from(X,"base64url").toString()));if(!K.success||K.data.expiresAt<=Q||K.data.expiresAt>Q+VD)return null;return K.data}catch{return null}}var wX8;var PX8=D(()=>{fU();wX8=hp.object({sessionId:hp.string().uuid(),organizationId:hp.string().min(1).max(256),userId:hp.string().min(1).max(256),threadId:hp.string().min(1).max(256),expiresAt:hp.number().int().positive()})});import{z as rD1}from"zod";function AX8($,Z){if(Z?.voice_model!=null&&Z.voice_provider==null)throw Error("A voice model override requires a provider");let Q=Z?.voice_provider??$.voiceConversationProvider;return sD1.parse({provider:Q,model:Z?.voice_model??(Q==="openai"?$.openaiLiveModel:$.elevenlabsConversationModel)})}var sD1;var TX8=D(()=>{sD1=rD1.object({provider:rD1.enum(["elevenlabs","openai"]),model:rD1.string().trim().min(1).max(128)})});import{createHash as go6}from"crypto";import{z as up}from"zod";function lp($){return`user.${go6("sha256").update(JSON.stringify([$.organizationId,$.userId])).digest("hex")}`}class eD1{deps;kvPromise;constructor($){this.deps=$}kv(){let $=this.deps.getConnection();if(!$||$.isClosed())throw new q1(503,{message:"Voice transport is unavailable"});return this.kvPromise??=new RX8.Kvm(J_0.jetstream($)).create("STUDIO_VOICE_SESSIONS",{storage:J_0.StorageType.Memory,ttl:qX8.nanos(VD),max_bytes:10485760}).catch((Z)=>{throw this.kvPromise=void 0,Z}),this.kvPromise}adapter(){if(!this.deps.adapter)throw new q1(503,{message:"Voice is not configured on this deployment"});return this.deps.adapter}async create($,Z=!1,Q="en",Y){let X;if(Z)try{X=AX8(this.deps.defaults,Y)}catch{throw new q1(503,{message:"Voice configuration is invalid"})}let J=X?this.deps.conversationAdapters[X.provider]:this.adapter();if(!J)throw new q1(503,{message:"Voice is not configured on this deployment"});let G={...$,sessionId:crypto.randomUUID(),expiresAt:Date.now()+VD},W=EX8(G,this.deps.secret),K=await this.kv(),H=lp(G),F=await K.get(H),U=F?.operation==="PUT"?X_0.parse(F.json()):null,N=aD1.encode(JSON.stringify({sessionId:G.sessionId,expiresAt:G.expiresAt,conversation:X,characters:0,requests:0}));try{if(F&&U&&U.expiresAt<=Date.now())await K.update(H,N,F.revision);else await K.create(H,N)}catch{throw new q1(409,{message:"Close your other voice session before starting a new one"})}try{if(X&&"createSession"in J){let O=await J.createSession({language:Q,model:X.model,safetyIdentifier:lp($)});return{token:W,...O,expiresAt:G.expiresAt}}let B=await this.adapter().createTranscriptionToken();return{token:W,transcriptionToken:B,expiresAt:G.expiresAt}}catch(B){throw await this.release(G),B}}authorize($,Z){let Q=zX8(Z,this.deps.secret);if(!Q||Q.organizationId!==$.organizationId||Q.userId!==$.userId||Q.threadId!==$.threadId)throw new q1(403,{message:"Invalid voice session"});return Q}async connect($,Z){let Q=this.authorize($,Z.token),Y=await this.kv(),X=lp(Q),J=await Y.get(X),G=J?.operation==="PUT"?X_0.parse(J.json()):null;if(!J||!G||G.sessionId!==Q.sessionId||G.expiresAt<=Date.now())throw new q1(403,{message:"Voice session expired"});let W=G.conversation?this.deps.conversationAdapters[G.conversation.provider]:null;if(!W?.negotiate||!G.conversation)throw new q1(409,{message:"Voice session does not support SDP negotiation"});if(G.connected)throw new q1(409,{message:"Voice session already connected"});try{await Y.update(X,aD1.encode(JSON.stringify({...G,connected:!0})),J.revision)}catch{throw new q1(409,{message:"Voice session is busy"})}return W.negotiate({sdp:Z.sdp,language:Z.language,model:G.conversation.model,safetyIdentifier:X})}async speak($,Z,Q,Y){let X=this.authorize($,Z),J=await this.kv(),G=lp(X);for(let W=0;;W++){let K=await J.get(G),H=K?.operation==="PUT"?X_0.parse(K.json()):null;if(!K||!H||H.sessionId!==X.sessionId||H.expiresAt<=Date.now())throw new q1(403,{message:"Voice session expired"});if(H.characters+Q.length>24000||H.requests>=120)throw new q1(429,{message:"Voice session speech limit reached"});try{await J.update(G,aD1.encode(JSON.stringify({...H,characters:H.characters+Q.length,requests:H.requests+1})),K.revision);break}catch{if(W>=2)throw new q1(409,{message:"Voice session is busy"})}}return this.adapter().synthesize(Q,Y)}async release($){let Z=await this.kv(),Q=await Z.get(lp($));if(Q?.operation==="PUT"&&X_0.parse(Q.json()).sessionId===$.sessionId)await Z.delete(lp($),{previousSeq:Q.revision})}async revoke($,Z){await this.release(this.authorize($,Z))}}var J_0,RX8,qX8,X_0,aD1;var MX8=D(()=>{LJ();fU();PX8();TX8();J_0=C(LK(),1),RX8=C(YA(),1),qX8=C(Tz(),1),X_0=up.object({sessionId:up.string().uuid(),expiresAt:up.number(),connected:up.boolean().optional(),conversation:sD1.optional(),characters:up.number().int().nonnegative(),requests:up.number().int().nonnegative()}),aD1=new TextEncoder});function ho6($){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 uo6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},IX8=()=>{let $=new Z1;return $.use("*",uo6),$.get("/",async(Z)=>{let Q=E0(),Y=Q.decoSupabaseUrl,X=Q.decoSupabaseServiceKey;if(!Y||!X)return Z.json({apps:[]});try{let J=await YG(Y,X,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:ho6(J)})}catch(J){return console.error("[deco-apps] GET error:",J),Z.json({error:"Failed to fetch apps"},502)}}),$};var VX8=D(()=>{J8();X$();bk0()});import{z as y1}from"zod";function zN($,Z="invalid_request_error",Q=null,Y=null){return{error:{message:$,type:Z,param:Q,code:Y}}}function ro6($){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 so6($,Z,Q){try{return JSON.parse($)}catch{throw new CX8(`Invalid JSON in tool call arguments for function '${Q}' (tool_call_id: ${Z}): ${$}`)}}function ao6($){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:so6(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 eo6($){let Z=$.map((Q)=>{let Y=Q.function.parameters?nF(Q.function.parameters):nF({type:"object",properties:{}});return[Q.function.name,n$({description:Q.function.description,inputSchema:Y})]});return Object.fromEntries(Z)}function $r6($){if(!$)return;return{openai:{response_format:$}}}function Zr6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function kX8($,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 SX8($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var lo6=256,co6,mo6,do6,io6,po6,no6,to6,oo6,CX8,_X8,vX8;var bX8=D(()=>{y4();J8();Sp();vH();co6=y1.object({type:y1.literal("function"),function:y1.object({name:y1.string(),description:y1.string().optional(),parameters:y1.record(y1.string(),y1.unknown()).optional()})}),mo6=y1.object({id:y1.string(),type:y1.literal("function"),function:y1.object({name:y1.string(),arguments:y1.string()})}),do6=y1.discriminatedUnion("role",[y1.object({role:y1.literal("system"),content:y1.string(),name:y1.string().optional()}),y1.object({role:y1.literal("user"),content:y1.union([y1.string(),y1.array(y1.union([y1.object({type:y1.literal("text"),text:y1.string()}),y1.object({type:y1.literal("image_url"),image_url:y1.object({url:y1.string(),detail:y1.string().optional()})})]))]),name:y1.string().optional()}),y1.object({role:y1.literal("assistant"),content:y1.string().nullable().optional(),name:y1.string().optional(),tool_calls:y1.array(mo6).optional()}),y1.object({role:y1.literal("tool"),content:y1.string(),tool_call_id:y1.string()})]),io6=y1.object({type:y1.literal("text")}),po6=y1.object({type:y1.literal("json_object")}),no6=y1.object({type:y1.literal("json_schema"),json_schema:y1.object({name:y1.string(),description:y1.string().optional(),schema:y1.record(y1.string(),y1.unknown()),strict:y1.boolean().optional()})}),to6=y1.union([io6,po6,no6]),oo6=y1.object({model:y1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:y1.array(do6),stream:y1.boolean().optional().default(!1),temperature:y1.number().min(0).max(2).optional(),max_tokens:y1.number().positive().optional(),top_p:y1.number().min(0).max(1).optional(),frequency_penalty:y1.number().min(-2).max(2).optional(),presence_penalty:y1.number().min(-2).max(2).optional(),stop:y1.union([y1.string(),y1.array(y1.string())]).optional(),tools:y1.array(co6).optional(),tool_choice:y1.union([y1.literal("auto"),y1.literal("none"),y1.literal("required"),y1.object({type:y1.literal("function"),function:y1.object({name:y1.string()})})]).optional(),response_format:to6.optional(),user:y1.string().optional()});CX8=class CX8 extends Error{constructor($){super($);this.name="MessageConversionError"}};_X8=new Z1;_X8.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=oo6.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=ro6(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)=>jP(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=ao6(J.messages),N=J.tools?eo6(J.tools):void 0,B=$r6(J.response_format),O=Zr6(),L=Math.floor(Date.now()/1000);if(J.stream)return DO($,async(w)=>{let j=kX8(F,U,N,J,B,$.req.raw.signal);try{let E=Fd(j),z=!1,T=0,A="",P=async()=>{if(A.length===0)return;let q=A;A="",await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{content:q},finish_reason:null}]})})};for await(let q of E.stream){if(!z&&(q.type==="text-delta"||q.type==="tool-call"))await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(q.type==="text-delta"){if(A+=q.text,A.length>=lo6)await P()}else if(q.type==="tool-call"){await P();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 P(),await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{},finish_reason:SX8(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 P(),await w.writeSSE({data:"[DONE]"})}catch(E){let z=E;console.error("[openai-compat:stream] Error:",z.message),await w.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let w=kX8(F,U,N,J,B,$.req.raw.signal),j=await gU(w),E={role:"assistant",content:j.text||null};if(j.toolCalls&&j.toolCalls.length>0)E.tool_calls=j.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),E.content=null;return $.json({id:O,object:"chat.completion",created:L,model:J.model,choices:[{index:0,message:E,finish_reason:SX8(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)}});vX8=_X8});function Qr6($){if(typeof $!=="object"||$===null)return!1;let Q=$.repository?.url;return typeof Q==="string"&&Q.length>0}function xX8(){let $=new Z1;return $.use("*",async(Z,Q)=>{await Q(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let Q=Z.get("studioContext"),Y=d0(Q);if(!Y)return Z.json({error:"Authentication required"},401);let J=(Z.req.query("site")??"").trim().toLowerCase();if(!wZ(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||k9(H))continue;let F=await Q.storage.virtualMcps.list(H.id);for(let U of F){if(OA(U)!==J)continue;if(!Qr6(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 fX8=D(()=>{J8();eG()});var gX8;var yX8=D(()=>{gX8={name:"decocms",version:"4.439.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 Jr6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??Xr6}}var hX8,Xr6="https://ph.studio.decocms.com",uX8;var lX8=D(()=>{J8();ks();uf();I9();X$();UN1();yX8();hX8=new Z1;hX8.get("/",($)=>{let Z={version:gX8.version,theme:O5$(),...pK().logo&&{logo:pK().logo},...hD()&&{internalUrl:yp1()},...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:E68(),posthog:Jr6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:MO()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});uX8=hX8});function sy($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function $O1($){return(sy($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((Q)=>Q.charAt(0).toUpperCase()+Q.slice(1)).join(" ")}function cX8($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(sy($))}&sz=${Z}`}function Gr6($,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 mX8($){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=Gr6(`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 z$}from"zod";var Wr6,dX8;var iX8=D(()=>{Wr6=z$.object({check_id:z$.string(),title:z$.string(),description:z$.string().optional(),impact:z$.string().optional(),why:z$.string().optional(),category:z$.string(),severity:z$.string(),value_band:z$.string().optional(),value_driver:z$.string().optional(),controllability:z$.string().optional(),pages:z$.array(z$.string()),tasks:z$.array(z$.string()),evidence:z$.string(),sample_scope:z$.string().optional(),sources:z$.array(z$.string())}),dX8=z$.object({domain:z$.string(),brand:z$.string(),favicon:z$.string().optional(),scanned_at:z$.string().nullable(),lang:z$.string(),score:z$.number().nullable(),band:z$.string().nullable(),totals:z$.object({measured:z$.number(),registry_total:z$.number(),passed:z$.number(),failed:z$.number(),blocked:z$.number()}),buckets:z$.array(z$.object({id:z$.enum(["critical","important","worth"]),label:z$.string(),items:z$.array(Wr6)})),passing:z$.object({count:z$.number(),items:z$.array(z$.object({check_id:z$.string(),title:z$.string()}))}),not_measured:z$.object({count:z$.number(),groups:z$.array(z$.object({reason:z$.string(),label:z$.string(),count:z$.number(),checks:z$.array(z$.string())}))}),categories:z$.array(z$.object({key:z$.string(),label:z$.string(),score:z$.number().nullable(),band:z$.string().nullable(),pass:z$.number(),fail:z$.number()})),screenshots:z$.array(z$.object({url:z$.string(),page_type:z$.string().optional(),viewport:z$.enum(["desktop","mobile"]),image_url:z$.string()}))})});function pX8($,Z,Q){let Y=Q?`?${new URLSearchParams({lang:Q}).toString()}`:"";return`${AW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}/onepager${Z}${Y}`}async function G_0($,Z={}){let Q=await fetch(pX8($,"",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 dX8.parse(await Q.json())}async function nX8($,Z={}){let Q=await fetch(pX8($,".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 ZO1=D(()=>{iX8();tB()});import{join as tX8}from"path";async function Hr6($){try{let Z=await G_0($,{signal:AbortSignal.timeout(Kr6)});if(!Z?.scanned_at)return null;return{brand:Z.brand.trim()||$O1($),...Z.score!==null?{score:Z.score}:{}}}catch{return null}}function WG($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function Fr6($,Z){let Q=sy($),Y=Z?.brand?.trim()||$O1(Q),X=cX8(Q,128),G=`${(E0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(Q)}`,{title:W,description:K}=mX8({brand:Y,domain:Q,score:Z?.score}),H=`${G}/og.png`,F=`${Y} Deco Score by decocms`;return[`<title>${WG(W)}</title>`,`<meta name="description" content="${WG(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="${WG(W)}" />`,`<meta property="og:description" content="${WG(K)}" />`,`<meta property="og:url" content="${WG(G)}" />`,`<meta property="og:image" content="${WG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${WG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${WG(W)}" />`,`<meta name="twitter:description" content="${WG(K)}" />`,`<meta name="twitter:image" content="${WG(H)}" />`,`<meta name="twitter:image:alt" content="${WG(F)}" />`,`<link rel="canonical" href="${WG(G)}" />`,`<link rel="alternate" type="text/markdown" href="${WG(G)}.md" />`,`<link rel="icon" href="${WG(X)}" sizes="any" />`].join(`
3775
+ Start in ${$.language==="pt"?"Brazilian Portuguese":"English"}, and follow the user's language.`,delegation:{type:"client"},audio:{output:{voice:$.voice}},store:!1}}class tD1{config;constructor($){this.config=$}async createSession(){return{provider:"openai",transport:"webrtc"}}async negotiate($){let Z=await fetch("https://api.openai.com/v1/live/sessions",{method:"POST",headers:{Authorization:`Bearer ${this.config.apiKey}`,"Content-Type":"application/json","OpenAI-Safety-Identifier":$.safetyIdentifier},body:JSON.stringify({session:vo6({...this.config,language:$.language,model:$.model}),transport:{type:"webrtc",sdp:$.sdp}}),signal:AbortSignal.timeout(15000)});if(!Z.ok)throw await Z.body?.cancel(),Error(`OpenAI Live request failed (${Z.status})`);return{sdp:gp.object({session:gp.object({id:gp.string().min(1)}),transport:gp.object({type:gp.literal("webrtc"),sdp:gp.string().min(1).max(1e5)})}).parse(await Z.json()).transport.sdp}}}var NX8=D(()=>{fU()});var BX8;var DX8=D(()=>{BX8=[{name:"delegate_to_agent",description:"Submit a complete request to the selected Studio agent. Returns after acceptance while work continues in the background. Results arrive later.",parameters:{type:"object",properties:{request:{type:"string",description:"The complete user request, with relevant conversational details. Preserve intent and constraints."}},required:["request"]}},{name:"get_agent_status",description:"Read the current chat's work status and known results. This does not track independent organization tasks; delegate fresh task-status queries to the Studio agent. Use when asked, never poll.",parameters:{type:"object",properties:{}}},{name:"stop_agent_work",description:"Request cancellation in the current chat ONLY when the user explicitly asks. Speaking over the companion is not cancellation. To stop independent tasks, delegate that request to the Studio agent.",parameters:{type:"object",properties:{}}}]});function oD1($){return{conversation_config:{agent:{first_message:"",language:"en",prompt:{prompt:Kq$,llm:$.conversationModel,thinking_budget:0,max_tokens:512,tools:BX8.map((Z)=>({...Z,type:"client",expects_response:!0,response_timeout_secs:Z.name==="delegate_to_agent"?20:5,...Z.name==="delegate_to_agent"?{execution_mode:"async",interruption_mode:"allow",pre_tool_speech:"off"}:{}}))}},asr:{provider:"scribe_realtime",quality:"high"},turn:{turn_eagerness:"normal",turn_timeout:-1,silence_end_call_timeout:-1},tts:{voice_id:$.voiceId,model_id:$.model},conversation:{max_duration_seconds:VD/1000,client_events:["audio","interruption","user_transcript","agent_response","client_tool_call","vad_score"]}},platform_settings:{auth:{enable_auth:!0},privacy:{record_voice:!1,retention_days:1,delete_audio:!0,delete_transcript_and_pii:!0},overrides:{conversation_config_override:{agent:{language:!0}}}}}}var OX8=D(()=>{fU();DX8()});import{z as tX}from"zod";import{createHash as bo6,createHmac as xo6}from"crypto";class Y_0{config;conversationKey;configurationKey;constructor($){this.config=$;this.configurationKey=bo6("sha256").update(JSON.stringify(oD1($))).digest("hex"),this.conversationKey=xo6("sha256",$.apiKey).update(this.configurationKey).digest("hex")}forConversationModel($){return $===this.config.conversationModel?this:new Y_0({...this.config,conversationModel:$})}async request($,Z,Q){let Y=await fetch(`https://api.elevenlabs.io/v1${$}`,{method:Z===void 0?"GET":"POST",headers:{"xi-api-key":this.config.apiKey,"Content-Type":"application/json"},body:JSON.stringify(Z),signal:Q});if(!Y.ok)throw await Y.body?.cancel(),Error(`ElevenLabs request failed (${Y.status})`);return Y}async ensureConversationAgent(){let $=`Studio voice ${this.configurationKey.slice(0,24)}`,Z=await this.request(`/convai/agents?search=${encodeURIComponent($)}&page_size=100`,void 0,AbortSignal.timeout(15000)),{agents:Q}=tX.object({agents:tX.array(tX.object({agent_id:tX.string(),name:tX.string()}))}).parse(await Z.json()),Y=Q.find((J)=>J.name===$);if(Y){let J=await this.request(`/convai/agents/${encodeURIComponent(Y.agent_id)}`,void 0,AbortSignal.timeout(15000));return tX.object({platform_settings:tX.object({auth:tX.object({enable_auth:tX.literal(!0)})})}).parse(await J.json()),Y.agent_id}let X=await this.request("/convai/agents/create",{name:$,...oD1(this.config)},AbortSignal.timeout(15000));return tX.object({agent_id:tX.string().min(1)}).parse(await X.json()).agent_id}async createConversationToken($){let Z=await this.request(`/convai/conversation/token?agent_id=${encodeURIComponent($)}`,void 0,AbortSignal.timeout(15000));return tX.object({token:tX.string().min(1)}).parse(await Z.json()).token}async createTranscriptionToken(){let $=await this.request("/single-use-token/realtime_scribe",{},AbortSignal.timeout(15000));return tX.object({token:tX.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 LX8=D(()=>{OX8()});import{createHmac as fo6,timingSafeEqual as yo6}from"crypto";import{z as hp}from"zod";function jX8($,Z){if(!Z)throw Error("Voice requires a shared authentication secret");return fo6("sha256",Z).update(`studio-voice-session:v1:${$}`).digest("base64url")}function EX8($,Z){let Q=Buffer.from(JSON.stringify(wX8.parse($))).toString("base64url");return`${Q}.${jX8(Q,Z)}`}function zX8($,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(jX8(X,Z)),W=Buffer.from(J);if(W.length!==G.length||!yo6(W,G))return null;try{let K=wX8.safeParse(JSON.parse(Buffer.from(X,"base64url").toString()));if(!K.success||K.data.expiresAt<=Q||K.data.expiresAt>Q+VD)return null;return K.data}catch{return null}}var wX8;var PX8=D(()=>{fU();wX8=hp.object({sessionId:hp.string().uuid(),organizationId:hp.string().min(1).max(256),userId:hp.string().min(1).max(256),threadId:hp.string().min(1).max(256),expiresAt:hp.number().int().positive()})});import{z as rD1}from"zod";function AX8($,Z){if(Z?.voice_model!=null&&Z.voice_provider==null)throw Error("A voice model override requires a provider");let Q=Z?.voice_provider??$.voiceConversationProvider;return sD1.parse({provider:Q,model:Z?.voice_model??(Q==="openai"?$.openaiLiveModel:$.elevenlabsConversationModel)})}var sD1;var TX8=D(()=>{sD1=rD1.object({provider:rD1.enum(["elevenlabs","openai"]),model:rD1.string().trim().min(1).max(128)})});import{createHash as go6}from"crypto";import{z as up}from"zod";function lp($){return`user.${go6("sha256").update(JSON.stringify([$.organizationId,$.userId])).digest("hex")}`}class eD1{deps;kvPromise;constructor($){this.deps=$}kv(){let $=this.deps.getConnection();if(!$||$.isClosed())throw new q1(503,{message:"Voice transport is unavailable"});return this.kvPromise??=new RX8.Kvm(J_0.jetstream($)).create("STUDIO_VOICE_SESSIONS",{storage:J_0.StorageType.Memory,ttl:qX8.nanos(VD),max_bytes:10485760}).catch((Z)=>{throw this.kvPromise=void 0,Z}),this.kvPromise}adapter(){if(!this.deps.adapter)throw new q1(503,{message:"Voice is not configured on this deployment"});return this.deps.adapter}async create($,Z=!1,Q="en",Y){let X;if(Z)try{X=AX8(this.deps.defaults,Y)}catch{throw new q1(503,{message:"Voice configuration is invalid"})}let J=X?this.deps.conversationAdapters[X.provider]:this.adapter();if(!J)throw new q1(503,{message:"Voice is not configured on this deployment"});let G={...$,sessionId:crypto.randomUUID(),expiresAt:Date.now()+VD},W=EX8(G,this.deps.secret),K=await this.kv(),H=lp(G),F=await K.get(H),U=F?.operation==="PUT"?X_0.parse(F.json()):null,N=aD1.encode(JSON.stringify({sessionId:G.sessionId,expiresAt:G.expiresAt,conversation:X,characters:0,requests:0}));try{if(F&&U&&U.expiresAt<=Date.now())await K.update(H,N,F.revision);else await K.create(H,N)}catch{throw new q1(409,{message:"Close your other voice session before starting a new one"})}try{if(X&&"createSession"in J){let O=await J.createSession({language:Q,model:X.model,safetyIdentifier:lp($)});return{token:W,...O,expiresAt:G.expiresAt}}let B=await this.adapter().createTranscriptionToken();return{token:W,transcriptionToken:B,expiresAt:G.expiresAt}}catch(B){throw await this.release(G),B}}authorize($,Z){let Q=zX8(Z,this.deps.secret);if(!Q||Q.organizationId!==$.organizationId||Q.userId!==$.userId||Q.threadId!==$.threadId)throw new q1(403,{message:"Invalid voice session"});return Q}async connect($,Z){let Q=this.authorize($,Z.token),Y=await this.kv(),X=lp(Q),J=await Y.get(X),G=J?.operation==="PUT"?X_0.parse(J.json()):null;if(!J||!G||G.sessionId!==Q.sessionId||G.expiresAt<=Date.now())throw new q1(403,{message:"Voice session expired"});let W=G.conversation?this.deps.conversationAdapters[G.conversation.provider]:null;if(!W?.negotiate||!G.conversation)throw new q1(409,{message:"Voice session does not support SDP negotiation"});if(G.connected)throw new q1(409,{message:"Voice session already connected"});try{await Y.update(X,aD1.encode(JSON.stringify({...G,connected:!0})),J.revision)}catch{throw new q1(409,{message:"Voice session is busy"})}return W.negotiate({sdp:Z.sdp,language:Z.language,model:G.conversation.model,safetyIdentifier:X})}async speak($,Z,Q,Y){let X=this.authorize($,Z),J=await this.kv(),G=lp(X);for(let W=0;;W++){let K=await J.get(G),H=K?.operation==="PUT"?X_0.parse(K.json()):null;if(!K||!H||H.sessionId!==X.sessionId||H.expiresAt<=Date.now())throw new q1(403,{message:"Voice session expired"});if(H.characters+Q.length>24000||H.requests>=120)throw new q1(429,{message:"Voice session speech limit reached"});try{await J.update(G,aD1.encode(JSON.stringify({...H,characters:H.characters+Q.length,requests:H.requests+1})),K.revision);break}catch{if(W>=2)throw new q1(409,{message:"Voice session is busy"})}}return this.adapter().synthesize(Q,Y)}async release($){let Z=await this.kv(),Q=await Z.get(lp($));if(Q?.operation==="PUT"&&X_0.parse(Q.json()).sessionId===$.sessionId)await Z.delete(lp($),{previousSeq:Q.revision})}async revoke($,Z){await this.release(this.authorize($,Z))}}var J_0,RX8,qX8,X_0,aD1;var MX8=D(()=>{LJ();fU();PX8();TX8();J_0=C(LK(),1),RX8=C(YA(),1),qX8=C(Tz(),1),X_0=up.object({sessionId:up.string().uuid(),expiresAt:up.number(),connected:up.boolean().optional(),conversation:sD1.optional(),characters:up.number().int().nonnegative(),requests:up.number().int().nonnegative()}),aD1=new TextEncoder});function ho6($){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 uo6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},IX8=()=>{let $=new Z1;return $.use("*",uo6),$.get("/",async(Z)=>{let Q=E0(),Y=Q.decoSupabaseUrl,X=Q.decoSupabaseServiceKey;if(!Y||!X)return Z.json({apps:[]});try{let J=await YG(Y,X,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:ho6(J)})}catch(J){return console.error("[deco-apps] GET error:",J),Z.json({error:"Failed to fetch apps"},502)}}),$};var VX8=D(()=>{J8();X$();bk0()});import{z as y1}from"zod";function zN($,Z="invalid_request_error",Q=null,Y=null){return{error:{message:$,type:Z,param:Q,code:Y}}}function ro6($){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 so6($,Z,Q){try{return JSON.parse($)}catch{throw new CX8(`Invalid JSON in tool call arguments for function '${Q}' (tool_call_id: ${Z}): ${$}`)}}function ao6($){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:so6(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 eo6($){let Z=$.map((Q)=>{let Y=Q.function.parameters?nF(Q.function.parameters):nF({type:"object",properties:{}});return[Q.function.name,n$({description:Q.function.description,inputSchema:Y})]});return Object.fromEntries(Z)}function $r6($){if(!$)return;return{openai:{response_format:$}}}function Zr6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function kX8($,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 SX8($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var lo6=256,co6,mo6,do6,io6,po6,no6,to6,oo6,CX8,_X8,vX8;var bX8=D(()=>{y4();J8();Sp();vH();co6=y1.object({type:y1.literal("function"),function:y1.object({name:y1.string(),description:y1.string().optional(),parameters:y1.record(y1.string(),y1.unknown()).optional()})}),mo6=y1.object({id:y1.string(),type:y1.literal("function"),function:y1.object({name:y1.string(),arguments:y1.string()})}),do6=y1.discriminatedUnion("role",[y1.object({role:y1.literal("system"),content:y1.string(),name:y1.string().optional()}),y1.object({role:y1.literal("user"),content:y1.union([y1.string(),y1.array(y1.union([y1.object({type:y1.literal("text"),text:y1.string()}),y1.object({type:y1.literal("image_url"),image_url:y1.object({url:y1.string(),detail:y1.string().optional()})})]))]),name:y1.string().optional()}),y1.object({role:y1.literal("assistant"),content:y1.string().nullable().optional(),name:y1.string().optional(),tool_calls:y1.array(mo6).optional()}),y1.object({role:y1.literal("tool"),content:y1.string(),tool_call_id:y1.string()})]),io6=y1.object({type:y1.literal("text")}),po6=y1.object({type:y1.literal("json_object")}),no6=y1.object({type:y1.literal("json_schema"),json_schema:y1.object({name:y1.string(),description:y1.string().optional(),schema:y1.record(y1.string(),y1.unknown()),strict:y1.boolean().optional()})}),to6=y1.union([io6,po6,no6]),oo6=y1.object({model:y1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:y1.array(do6),stream:y1.boolean().optional().default(!1),temperature:y1.number().min(0).max(2).optional(),max_tokens:y1.number().positive().optional(),top_p:y1.number().min(0).max(1).optional(),frequency_penalty:y1.number().min(-2).max(2).optional(),presence_penalty:y1.number().min(-2).max(2).optional(),stop:y1.union([y1.string(),y1.array(y1.string())]).optional(),tools:y1.array(co6).optional(),tool_choice:y1.union([y1.literal("auto"),y1.literal("none"),y1.literal("required"),y1.object({type:y1.literal("function"),function:y1.object({name:y1.string()})})]).optional(),response_format:to6.optional(),user:y1.string().optional()});CX8=class CX8 extends Error{constructor($){super($);this.name="MessageConversionError"}};_X8=new Z1;_X8.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=oo6.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=ro6(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)=>jP(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=ao6(J.messages),N=J.tools?eo6(J.tools):void 0,B=$r6(J.response_format),O=Zr6(),L=Math.floor(Date.now()/1000);if(J.stream)return DO($,async(w)=>{let j=kX8(F,U,N,J,B,$.req.raw.signal);try{let E=Fd(j),z=!1,T=0,A="",P=async()=>{if(A.length===0)return;let q=A;A="",await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{content:q},finish_reason:null}]})})};for await(let q of E.stream){if(!z&&(q.type==="text-delta"||q.type==="tool-call"))await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(q.type==="text-delta"){if(A+=q.text,A.length>=lo6)await P()}else if(q.type==="tool-call"){await P();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 P(),await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{},finish_reason:SX8(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 P(),await w.writeSSE({data:"[DONE]"})}catch(E){let z=E;console.error("[openai-compat:stream] Error:",z.message),await w.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let w=kX8(F,U,N,J,B,$.req.raw.signal),j=await gU(w),E={role:"assistant",content:j.text||null};if(j.toolCalls&&j.toolCalls.length>0)E.tool_calls=j.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),E.content=null;return $.json({id:O,object:"chat.completion",created:L,model:J.model,choices:[{index:0,message:E,finish_reason:SX8(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)}});vX8=_X8});function Qr6($){if(typeof $!=="object"||$===null)return!1;let Q=$.repository?.url;return typeof Q==="string"&&Q.length>0}function xX8(){let $=new Z1;return $.use("*",async(Z,Q)=>{await Q(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let Q=Z.get("studioContext"),Y=d0(Q);if(!Y)return Z.json({error:"Authentication required"},401);let J=(Z.req.query("site")??"").trim().toLowerCase();if(!wZ(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||k9(H))continue;let F=await Q.storage.virtualMcps.list(H.id);for(let U of F){if(OA(U)!==J)continue;if(!Qr6(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 fX8=D(()=>{J8();eG()});var gX8;var yX8=D(()=>{gX8={name:"decocms",version:"4.440.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 Jr6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??Xr6}}var hX8,Xr6="https://ph.studio.decocms.com",uX8;var lX8=D(()=>{J8();ks();uf();I9();X$();UN1();yX8();hX8=new Z1;hX8.get("/",($)=>{let Z={version:gX8.version,theme:O5$(),...pK().logo&&{logo:pK().logo},...hD()&&{internalUrl:yp1()},...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:E68(),posthog:Jr6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:MO()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});uX8=hX8});function sy($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function $O1($){return(sy($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((Q)=>Q.charAt(0).toUpperCase()+Q.slice(1)).join(" ")}function cX8($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(sy($))}&sz=${Z}`}function Gr6($,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 mX8($){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=Gr6(`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 z$}from"zod";var Wr6,dX8;var iX8=D(()=>{Wr6=z$.object({check_id:z$.string(),title:z$.string(),description:z$.string().optional(),impact:z$.string().optional(),why:z$.string().optional(),category:z$.string(),severity:z$.string(),value_band:z$.string().optional(),value_driver:z$.string().optional(),controllability:z$.string().optional(),pages:z$.array(z$.string()),tasks:z$.array(z$.string()),evidence:z$.string(),sample_scope:z$.string().optional(),sources:z$.array(z$.string())}),dX8=z$.object({domain:z$.string(),brand:z$.string(),favicon:z$.string().optional(),scanned_at:z$.string().nullable(),lang:z$.string(),score:z$.number().nullable(),band:z$.string().nullable(),totals:z$.object({measured:z$.number(),registry_total:z$.number(),passed:z$.number(),failed:z$.number(),blocked:z$.number()}),buckets:z$.array(z$.object({id:z$.enum(["critical","important","worth"]),label:z$.string(),items:z$.array(Wr6)})),passing:z$.object({count:z$.number(),items:z$.array(z$.object({check_id:z$.string(),title:z$.string()}))}),not_measured:z$.object({count:z$.number(),groups:z$.array(z$.object({reason:z$.string(),label:z$.string(),count:z$.number(),checks:z$.array(z$.string())}))}),categories:z$.array(z$.object({key:z$.string(),label:z$.string(),score:z$.number().nullable(),band:z$.string().nullable(),pass:z$.number(),fail:z$.number()})),screenshots:z$.array(z$.object({url:z$.string(),page_type:z$.string().optional(),viewport:z$.enum(["desktop","mobile"]),image_url:z$.string()}))})});function pX8($,Z,Q){let Y=Q?`?${new URLSearchParams({lang:Q}).toString()}`:"";return`${AW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}/onepager${Z}${Y}`}async function G_0($,Z={}){let Q=await fetch(pX8($,"",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 dX8.parse(await Q.json())}async function nX8($,Z={}){let Q=await fetch(pX8($,".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 ZO1=D(()=>{iX8();tB()});import{join as tX8}from"path";async function Hr6($){try{let Z=await G_0($,{signal:AbortSignal.timeout(Kr6)});if(!Z?.scanned_at)return null;return{brand:Z.brand.trim()||$O1($),...Z.score!==null?{score:Z.score}:{}}}catch{return null}}function WG($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function Fr6($,Z){let Q=sy($),Y=Z?.brand?.trim()||$O1(Q),X=cX8(Q,128),G=`${(E0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(Q)}`,{title:W,description:K}=mX8({brand:Y,domain:Q,score:Z?.score}),H=`${G}/og.png`,F=`${Y} Deco Score by decocms`;return[`<title>${WG(W)}</title>`,`<meta name="description" content="${WG(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="${WG(W)}" />`,`<meta property="og:description" content="${WG(K)}" />`,`<meta property="og:url" content="${WG(G)}" />`,`<meta property="og:image" content="${WG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${WG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${WG(W)}" />`,`<meta name="twitter:description" content="${WG(K)}" />`,`<meta name="twitter:image" content="${WG(H)}" />`,`<meta name="twitter:image:alt" content="${WG(F)}" />`,`<link rel="canonical" href="${WG(G)}" />`,`<link rel="alternate" type="text/markdown" href="${WG(G)}.md" />`,`<link rel="icon" href="${WG(X)}" sizes="any" />`].join(`
3776
3776
  `)}function Ur6($,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}
3777
3777
  </head>`)}function oX8($){let Z=new Z1;return Z.get("/:domain/og.png",async(Q)=>{let Y=sy(Q.req.param("domain")),X=async()=>{let J=$?Bun.file(tX8($,"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(`${AW({})}/api/v2/public/diagnostics/${encodeURIComponent(Y)}/og.png`,{signal:AbortSignal.timeout(Nr6)}),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=sy(Q.req.param("file").replace(/\.md$/,""));try{let X=await nX8(Y,{lang:Q.req.query("lang")?.trim()||void 0,signal:AbortSignal.timeout(Br6)});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=$?tX8($,"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 Hr6(sy(Y)),K=Fr6(Y,W);return Q.html(Ur6(G,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return Q.html(G)}}),Z}var Kr6=2500,Nr6=1e4,Br6=1e4;var rX8=D(()=>{J8();tB();ZO1();X$()});function W_0($,Z){return fetch(`${AW({})}${$}`,Z)}async function Dr6($,Z){let Q=await G_0($,{lang:Z});if(!Q)return{status:"not_found",report:null};return Q.scanned_at?{status:"ready",report:Q}:{status:"empty",report:null}}function Lr6($){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 Or6,LO,sX8=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},aX8;var eX8=D(()=>{J8();Q3();tB();ZO1();Or6=new Set(["complete","errored","terminated","unknown"]);LO=new Z1;LO.use("*",async($,Z)=>{let Q=await x8.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});LO.use("/link-token/*",sX8);LO.use("/suggest",sX8);LO.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 Dr6(Z,Q))}catch{return $.json({error:"report read failed"},502)}});LO.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}=Lr6(Q);if(!Y)return $.json({error:"domain is required"},400);let J=Z?.email;try{let G=await W_0("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${sw({})}`},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)}});LO.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let Q=await W_0(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${sw({})}`}});if(!Q.ok)return $.json({error:`status HTTP ${Q.status}`},502);let X=(await Q.json()).status??"unknown",J={done:Or6.has(X),status:X};return $.json(J)}catch{return $.json({error:"status failed"},502)}});LO.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let Q=await W_0(`/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)}});LO.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let Q=await W_0(`/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:[]})}});aX8=LO});var wr6=1048576,QO1;var $J8=D(()=>{J8();QK();X$();rU1();QO1=new Z1;QO1.post("/webhook",x5({maxSize:wr6,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(!_48(Q,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let X=v48(Q);if(!X)return $.json({error:"invalid payload"},400);let J=await b48(X);return console.log("stripe webhook",{eventId:X.id,type:X.type,livemode:X.livemode,...J}),$.json({received:!0})})});import{timingSafeEqual as jr6}from"crypto";function Pr6($,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 jr6(Buffer.from(X),Buffer.from(Y))}function Ar6($,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 ZJ8($){let Z=new Z1;return Z.post("/webhook",x5({maxSize:Er6,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(!Pr6(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"&&!zr6.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 x10().then((U)=>U?.markTenantPoolsDirty(`https://github.com/${F}`,H)).catch((U)=>console.warn(`[github-webhook] tenant pool refresh for ${F}@${H} failed: ${U instanceof Error?U.message:String(U)}`)),Q.json({ok:!0})}let W=Ar6(J??"",G);if(W.length===0)return Q.json({ok:!0,ignored:"no-pr"});let K=await Tr6($,W);return Q.json({ok:!0,refreshed:K})}),Z}async function Tr6($,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 Xx$(K,G.organizationId,G.taskBoardItemId)!==null)Q++}catch(W){console.error(`[github-webhook] pr card refresh failed for ${G.taskBoardItemId}:`,W)}}return Q}var Er6=5242880,zr6;var QJ8=D(()=>{J8();QK();yW();x7();zr6=new Set(["check_suite","issue_comment"])});import{DBOS as XO1,SchedulerMode as Rr6}from"@dbos-inc/dbos-sdk";async function Mr6(){try{return await Ir6()}catch($){return console.warn(`[sandbox-credential-push] push failed: ${$ instanceof Error?$.message:String($)}`),null}}async function Ir6(){if(!b10())return null;let[{RemoteSandboxProvider:$},{SandboxProviderRouter:Z}]=await Promise.all([Promise.resolve().then(() => (v91(),_91)),Promise.resolve().then(() => (C91(),S91))]),Q=await x10(),Y=Q instanceof Z?Q.providers.kubernetes:Q;if(!(Y instanceof $))return null;let{db:X}=D8(),{sandboxes:J,pools:G}=await Y.list(),W=Date.now(),K=jT$({sandboxes:J,pools:G,records:await ET$(X,J,G),legacyPools:GT0(process.env.STUDIO_SANDBOX_TENANT_POOLS),now:W}),{batches:H,failed:F}=await zT$(K,IH0(X,new NX(E0().encryptionKey)),{now:W,orgFsLifetimeMs:HT0}),U=0,N=0,B=0;for(let O of H)try{let L=await Y.pushCredentials(O);U+=L.stored,N+=L.kept}catch(L){B++,console.warn(`[sandbox-credential-push] a push batch failed: ${L instanceof Error?L.message:String(L)}`)}return{sandboxes:J.length,pushed:U,kept:N,refused:K.refused,failed:F+B}}async function Vr6($,Z){let Q=await XO1.runStep(Mr6,{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 YJ8(){if(YO1)return;if(!E0().agentSandboxEnabled||!b10())return;YO1=XO1.registerWorkflow(Vr6,{name:"sandboxCredentialPushWorkflow"}),XO1.registerScheduled(YO1,{name:"sandboxCredentialPushWorkflow",crontab:qr6,mode:Rr6.ExactlyOncePerIntervalWhenActive})}var qr6="1-59/10 * * * *",YO1=null;var XJ8=D(()=>{CG();DL();P41();FT0();WT0();yW();X$()});function JJ8($){let Z=new YO($.db,new NX($.encryptionKey)),Q=new Z1;return Q.get("/attachments/:token",async(Y)=>{let X=Dv$(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 cQ(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 GJ8=D(()=>{J8();DL();n71();UE();n40()});import{DBOS as Xz,SchedulerMode as kr6}from"@dbos-inc/dbos-sdk";function WJ8($){GO1=$}function KO1(){if(!GO1)throw Error("[jira-trigger] runtime not initialized \u2014 setJiraTriggerSweepRuntime() must run before the workflow fires");return GO1}function HO1(){let $=KO1();return new YO($.db,new NX($.encryptionKey))}async function br6($){try{let Z=await HO1().getById($);if(!Z?.enabled||!Z.boardId)return{integrationId:$,started:0};let Q=await VH(KO1().db,Z.organizationId);if(!Q)return{integrationId:$,started:0};if((await Q.storage.jiraIntegrations.listAutomations(Z.organizationId)).length===0)return{integrationId:$,started:0};let X=new cQ(Z.siteUrl,Z.email,Z.apiToken),G=`(${await X.getBoardScopeJql(Z.boardId)}) AND status CHANGED AFTER "-${Cr6}m"`,W=0,K;for(let H=0;H<_r6;H++){let F=await X.searchIssues({jql:G,nextPageToken:K});for(let U of F.issues)if(await JF1(Q,Z,{issueId:U.id,now:Date.now()})==="started")W++;if(K=F.nextPageToken??void 0,!K)break}return{integrationId:$,started:W}}catch(Z){return{integrationId:$,started:0,error:Z instanceof Error?Z.message:String(Z)}}}async function xr6($,Z){let Q=await Xz.runStep(()=>HO1().listEnabledIds(),{name:"loadJiraIntegrations"});if(Q.length===0)return;let Y=await Promise.all(Q.map((X)=>Xz.runStep(()=>br6(X),{name:`sweepJira:${X}`})));for(let X of Y)if(X.error)console.warn(`[jira-trigger] integration ${X.integrationId} failed: ${X.error}`);else if(X.started>0)console.log(`[jira-trigger] integration ${X.integrationId} started ${X.started} run(s) the webhook missed`)}async function fr6($,Z){try{let Q=await HO1().getById($);if(!Q?.enabled)return"disabled";let Y=await VH(KO1().db,Q.organizationId);if(!Y)return"disabled";let X=await JF1(Y,Q,{issueId:Z.issueId,changelogId:Z.changelogId});if(X==="started")console.log(`[jira-trigger] started a run for ${Z.issueKey} after it settled`);else if(X==="returned")console.log(`[jira-trigger] ${Z.issueKey} went back where it was before settling in "${Z.toStatus}"; no run`);return X}catch(Q){return console.error(`[jira-trigger] settling ${Z.issueKey} failed`,Q instanceof Error?Q.message:Q),"error"}}async function yr6($,Z){await Xz.sleep(yk0()+vr6),await Xz.runStep(()=>fr6($,Z),{name:"settleJiraMove"})}async function KJ8($,Z){if(!WO1)throw Error("[jira-trigger] settle workflow is not registered");await Xz.startWorkflow(WO1,{workflowID:`jira-settle:${$}:${Z.changelogId}`})($,Z)}function HJ8(){if(JO1)return;WO1=Xz.registerWorkflow(yr6,{name:"jiraSettleWorkflow"}),JO1=Xz.registerWorkflow(xr6,{name:"jiraTriggerSweepWorkflow"}),Xz.registerScheduled(JO1,{name:"jiraTriggerSweepWorkflow",crontab:Sr6,mode:kr6.ExactlyOncePerIntervalWhenActive})}var Sr6="7-59/10 * * * *",Cr6=35,_r6=5,vr6=5000,GO1=null,WO1=null,JO1=null;var FO1=D(()=>{DL();n40();kd();UE();YF1();gk0()});function FJ8($){let Z=new YO($.db,new NX($.encryptionKey));async function Q(X,J){let G=Q08(J);if(!G)return;let W=await Z.getByWebhookSecret(X);if(!W?.enabled)return;if((await Z.listAutomations(W.organizationId)).length===0)return;await KJ8(W.id,G)}let Y=new Z1;return Y.post("/webhook/:secret",x5({maxSize:gr6}),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 gr6=1048576;var UJ8=D(()=>{J8();QK();DL();FO1();gk0();n40()});function NJ8($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var BJ8,hr6,ur6,DJ8;var OJ8=D(()=>{J8();LJ();yd();oc();BJ8=new Z1,hr6=["range","if-none-match","if-modified-since"],ur6=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];BJ8.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),Q=Z.organization?.id;if(!Z.auth?.user?.id){if(Wp($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new q1(401,{message:"Authentication required"})}if(!Q)throw new q1(401,{message:"Organization context required"});let Y=$.req.path.replace(/^.*\/files\//,"");if(!Y)throw new q1(400,{message:"Missing file key"});let X=await X80(Y,Z);if(!X)throw new q1(503,{message:"Object storage not configured"});if(X.startsWith("data:")&&qW()){let K=X.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new q1(500,{message:"Invalid data URL from storage"});let[,H,F]=K,U=Buffer.from(F,"base64"),N=new Headers({"Content-Type":H,"Cache-Control":"private, max-age=86400"});return NJ8(N,H),new Response(U,{status:200,headers:N})}let J=new Headers;for(let K of hr6){let H=$.req.header(K);if(H)J.set(K,H)}let G=await fetch(X,{headers:J});if(G.status===403||G.status===404)throw new q1(404,{message:"File not found"});if(!G.ok&&G.status!==304&&G.status!==416)throw console.error(`[files] upstream storage error ${G.status} for key:`,Y),new q1(502,{message:"Upstream storage error"});let W=new Headers;for(let K of ur6){let H=G.headers.get(K);if(H)W.set(K,H)}return W.set("Cache-Control","private, max-age=86400"),NJ8(W,W.get("content-type")??""),new Response(G.body,{status:G.status,headers:W})});DJ8=BJ8});var p60=b((ay)=>{var lr6=ay&&ay.__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]}),cr6=ay&&ay.__exportStar||function($,Z){for(var Q in $)if(Q!=="default"&&!Object.prototype.hasOwnProperty.call(Z,Q))lr6(Z,$,Q)};Object.defineProperty(ay,"__esModule",{value:!0});cr6(LG(),ay)});var jJ8=b((LJ8)=>{Object.defineProperty(LJ8,"__esModule",{value:!0});LJ8.version=void 0;LJ8.version="3.4.0"});var PJ8=b((PN)=>{var mr6=PN&&PN.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(PN,"__esModule",{value:!0});PN.NodeTransport=PN.VERSION=void 0;PN.nodeResolveHost=or6;var s5=p60(),dr6=M0("net"),UO1=M0("tls"),ir6=M0("path"),EJ8=M0("fs"),pr6=mr6(M0("dns")),nr6=jJ8();PN.VERSION=nr6.version;var tr6="nats.js";class zJ8{socket;version;lang;yields=[];signal=(0,s5.deferred)();closedNotification=(0,s5.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=tr6,this.version=PN.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,s5.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 s5.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 s5.errors.ConnectionError("error connecting - node provided an undefined error");let{code:G}=J,W=G==="ECONNREFUSED"?new s5.errors.ConnectionError("connection refused",{cause:J}):J;throw this.socket?.destroy(),W}}dial($){let Z=(0,s5.deferred)(),Q,Y=(0,dr6.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,s5.deferred)(),Z;return this.socket.on("data",(Q)=>{this.yields.push(Q);let Y=s5.DataBuffer.concat(...this.yields),X=(0,s5.extractProtocolMessage)(Y);if(X!=="")try{let J=s5.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,s5.deferred)();try{if($=(0,ir6.resolve)($),!(0,EJ8.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,EJ8.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,s5.extend)(Q,this.options.tls,X)}catch(X){return Promise.reject(new s5.errors.ConnectionError(X.message,{cause:X}))}let Y=(0,s5.deferred)();try{let X=(0,UO1.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 s5.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,s5.extend)(Z,this.options.tls,Y)}catch(Y){return Promise.reject(new s5.errors.ConnectionError(Y.message,{cause:Y}))}let Q=(0,s5.deferred)();try{let Y=(0,UO1.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 s5.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,s5.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,s5.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 UO1.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,s5.render)($)}`);let Z=(0,s5.deferred)();try{this.socket.write($,(Q)=>{if(Q){if(this.options.debug)console.error(`!!! ${(0,s5.render)($)}: ${Q}`);return Z.reject(Q)}return Z.resolve()})}catch(Q){if(this.options.debug)console.error(`!!! ${(0,s5.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}}PN.NodeTransport=zJ8;function or6($){let Z=(0,s5.deferred)();return pr6.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 MJ8=b((qJ8)=>{Object.defineProperty(qJ8,"__esModule",{value:!0});qJ8.connect=rr6;var AJ8=PJ8(),TJ8=p60(),RJ8=p60();function rr6($={}){if((0,RJ8.hasWsProtocol)($))return Promise.reject(RJ8.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,TJ8.setTransportFactory)({factory:()=>{return new AJ8.NodeTransport},dnsResolveFn:AJ8.nodeResolveHost}),TJ8.NatsConnectionImpl.connect($)}});var IJ8=b((wO)=>{var ar6=wO&&wO.__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]}),er6=wO&&wO.__exportStar||function($,Z){for(var Q in $)if(Q!=="default"&&!Object.prototype.hasOwnProperty.call(Z,Q))ar6(Z,$,Q)};Object.defineProperty(wO,"__esModule",{value:!0});wO.connect=void 0;var $s6=MJ8();Object.defineProperty(wO,"connect",{enumerable:!0,get:function(){return $s6.connect}});er6(p60(),wO)});function CJ8($){let Z=$?.connectFn??Xs6,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:Ys6,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=D7(Qs6,Zs6,O-1,2,0.5);await O$(L)}}return{init(N,B){if(X)return;X=!0,J=!1;let O=B?.creds?VJ8.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=SJ8.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 Xs6($){return kJ8.connect($)}var VJ8,kJ8,SJ8,Zs6=100,Qs6=3000,Ys6=3000;var _J8=D(()=>{a$();VJ8=C(Tz(),1),kJ8=C(IJ8(),1),SJ8=C(LK(),1)});function K_0($){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 H_0($,Z){return`${$}.${Z}`}class NO1{cache;constructor($){this.cache=K_0({ttlMs:$?.ttlMs??Js6,maxSize:$?.maxSize??Gs6})}async get($,Z){return this.cache.get(H_0($,Z))??null}async set($,Z,Q){this.cache.set(H_0($,Z),Q)}async invalidate($,Z){this.cache.delete(H_0($,Z)),this.cache.delete(H_0($,`${Z}:decisions`))}teardown(){this.cache.clear()}}var Js6=600000,Gs6=5000;var vJ8=()=>{};function F_0($,Z){return`${$}:${Z}`}function BO1($){let Z=K_0({ttlMs:$?.ttlMs??Ws6,maxSize:$?.maxSize??Ks6}),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(bJ8,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(F_0(K,H))},set(K,H,F){Z.set(F_0(K,H),F)},invalidate(K,H){Z.delete(F_0(K,H)),W(K,H)},start(){if(G)return;let K=Q?.();if(!K)return;G=K.subscribe(bJ8),(async()=>{for await(let H of G)try{let F=JSON.parse(J.decode(H.data));if(F.originId===Y)continue;Z.delete(F_0(F.organizationId,F.keyId))}catch{}})().catch(console.error)},teardown(){G?.unsubscribe(),G=null,Z.clear()}}}var bJ8="studio.ai-provider-keys.invalidate",Ws6=30000,Ks6=5000;var xJ8=()=>{};class DO1{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 fJ8=($)=>{let Z;return()=>Z??=$()},OO1,LO1;var yJ8=D(()=>{k6();OO1=fJ8(()=>e1.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),LO1=fJ8(()=>e1.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function Os6($=uJ8){return{name:tU,subjects:[`${ZX1}.>`],storage:nH.StorageType.File,max_age:Us6,max_bytes:Bs6,max_msgs_per_subject:Ds6,discard:nH.DiscardPolicy.Old,retention:nH.RetentionPolicy.Limits,duplicate_window:Ns6,num_replicas:$}}class lJ8{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 gJ8($){let Z=hJ8.headers();for(let[Q,Y]of Object.entries($))Z.set(Q,Y);return Z}function Es6($,Z){let Q=0;return{publish(Y,X,J,G){Y.publish(X,J,G?{headers:G}:void 0).catch((W)=>{if(Q++,Fs6().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 zs6($,Z){return $.info?.cluster?Z:1}function Ps6($){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 wO1{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=Os6(X);try{await Y.streams.info(tU),await Y.streams.update(tU,J)}catch(G){if(G instanceof Error&&G.message.includes("stream not found"))await Y.streams.add(J),await Y.streams.update(tU,J);else if(G instanceof Error&&/can ?not change.*storage|storage type/i.test(G.message))await Y.streams.delete(tU),await Y.streams.add(J);else throw G}},Q=await E8(async()=>{let Y=this.options.getJetStreamManager?await this.options.getJetStreamManager():await nH.jetstreamManager($),X=zs6($,uJ8);try{await Z(Y,X)}catch(J){if(X<=1||!Ps6(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:pd});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=Es6(Z,Y),G=!1,W=()=>{if(G)return;G=!0;let H=cy$(Z);X.publish(H.subject,H.data).catch(()=>{})};Q.addEventListener("abort",W,{once:!0});let K=(H)=>{let F=performance.now(),U=YX1(H,{runId:Z}),N=performance.now()-F;OO1().record(N),LO1().add(1,{"org.id":Y??"unknown"}),js6?.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?gJ8(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(),ws6)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 E8(()=>$.publish(Z.subject,Z.data,{...Z.headers?{headers:gJ8(Z.headers)}:{},...Z.msgId?{msgID:Z.msgId}:{}}),{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:pd}),!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=YX1(Z,{runId:$,dedup:Q});OO1().record(performance.now()-X),LO1().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=ly$({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"?nH.DeliverPolicy.New:nH.DeliverPolicy.All,J=Q?.closeOnDone??!1,G=EE($),W;try{W=await E8(async()=>{return(await Y.consumers.get(tU,{filter_subjects:G,deliver_policy:X})).consume()},{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:pd})}catch(L){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",L?.message??L),null}let F=JM0({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(ZM0()).pipeThrough(QM0()).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(tU,{filter:EE($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var nH,hJ8,Hs6=($)=>{let Z;return()=>Z??=$()},Fs6,Us6=86400000000000,Ns6=120000000000,Bs6=4294967296,uJ8,Ds6=500000,Ls6,ws6,js6;var cJ8=D(()=>{a$();XX1();GM0();YM0();k6();yJ8();nH=C(LK(),1),hJ8=C(Tz(),1),Fs6=Hs6(()=>e1.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"})),uJ8=Math.max(1,Number(process.env.DECOPILOT_STREAM_REPLICAS??3)||3);Ls6=process.env.STREAM_ENCODE_TRACE==="1",ws6=process.env.DECOPILOT_STREAM_TRACE==="1";js6=Ls6?new lJ8:null});function U_0($,Z,Q,Y){if(!Y)return!1;return $.emit(Z,DF(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 mJ8=D(()=>{c8()});class jO1{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 As6($,Z,Q={}){let Y=$.startsWith("thread:")?RH($,Q):$;return[...new Set([Z,Y].filter((X)=>!!X))]}async function EO1($,Z){let Q=Z.organizationId;try{let Y=await $.storage.taskBoard.linkedThreadIds(Z.id,Q);for(let X of Y){let J=await xU($,X);if(!J?.owner||!J?.name)continue;let G=await $.storage.threads.get(X),W=await tm($,{threadId:X,runBranch:G?.branch}),K=await c00($,Q,w41(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=As6(W,await RT0($,X),{flat:Bf(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 L3(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 dJ8=D(()=>{Y7();hW();x7()});async function iJ8($,Z,Q){let Y=Z.organizationId;if(!lX(Z))return!1;if(!xf(Q))return!1;if(await $.storage.taskBoard.hasHumanRejectedDone(Z.id,Y))return!1;let X=await $.storage.organizationSettings.get(Y),J=zU(X?.flags),G=await $.storage.taskBoard.update(Z.id,Y,{status:J},Z.updatedBy);return await $5($,{taskBoardItemId:Z.id,action:"status_changed",actorId:null,data:{from:Z.status,to:J,reason:"pr_merged"}}),L8(Y,G),console.log(`[task-board-review-sweeper] ${Z.id}: linked PR already merged \u2014 moved to ${J}`),!0}var pJ8=D(()=>{x4();mY();Cd();kH();P9()});function ks6($){return $ instanceof SX}function nJ8($,Z){return Z-$>=Is6}class zO1{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??Ts6;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??qs6,Q=this.options.itemIntervalMs??Rs6,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()-l71),FY1);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()-Vs6));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 WY1(this.taskBoard,X,Y),await KY1(this.taskBoard,this.billing,X,Y)}catch(J){console.error(`[task-board-review-sweeper] unhandled-failure reaction for ${Q} failed`,J)}}async settleFinishedRunsWithoutPr($,Z){let Q=0,Y=await this.taskBoard.listItemsFinishedWithoutPr($,Z);for(let{id:X,organizationId:J,finishedAt:G}of Y)try{if(!await this.taskBoard.claimSweep(X,J,Z))continue;let W=await this.taskBoard.getById(X,J);if(!W||W.status!==R$.progress||lX(W)||W.assigneeId!==R8)continue;let K=await this.contextFactory(J,W.assignedBy??W.createdBy);if(!K)continue;if(await EO1(K,W)){if(await this.taskBoard.clearSweepBudget(X,J),await this.reconcileItem(X,J,Z))Q++;continue}if(!nJ8(G.getTime(),Date.now()))continue;let H="the run finished without opening a pull request \u2014 there is "+"nothing for a reviewer to review",F=await this.taskBoard.advanceToReviewIfInProgress(X,J,W.updatedBy);if(!F)continue;await this.taskBoard.recordActivity({taskBoardItemId:X,action:"status_changed",actorId:null,data:{from:R$.progress,to:R$.review,reason:H}}).catch(()=>{}),L8(J,F),await SH(K,F,H)}catch(W){console.error(`[task-board-review-sweeper] settling finished run on ${X} failed`,W)}return Q}async dispatchDueRetries($){let Z=0,Q=await this.taskBoard.listItemsDueForRetry($,new Date);for(let{id:Y,organizationId:X,attempts:J}of Q)try{if(!await this.taskBoard.claimDueRetry(Y,X,new Date))continue;let G=await this.taskBoard.getById(Y,X);if(!G||G.status!==R$.progress||G.assigneeId!==R8)continue;let W=await this.contextFactory(X,G.assignedBy??G.createdBy);if(!W)continue;await CH(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),ks6(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()+Ms6)).catch((W)=>console.error(`[task-board-review-sweeper] re-arming ${Y} failed`,W))}return Z}async returnToTodo($,Z,Q){try{let Y=await this.taskBoard.getById($,Z);if(!Y||Y.status!==R$.progress)return;let X=await this.taskBoard.returnToTodoAfterFailure($,Z,Y.updatedBy);if(!X)return;await this.taskBoard.recordActivity({taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:"in_progress",to:"todo",reason:Q}}).catch(()=>{}),L8(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(!nJ8(WD(Q,Z.reviewCycleStartedAt),Date.now()))return;await SH($,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(!lX(Y))return!1;let X=Y.assigneeId===R8,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 EO1(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 bd(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 iJ8(G,Y,W))return!0;if(await ig$(G,Y))return!0;if(await this.resolveConflictFromSweep(G,Y,W))return!0;if(!X)return!1;if(!YY1(W))return!1;return await _d(G,Y,{previewMatchesHead:XY1(W)}),!0}async resolveConflictFromSweep($,Z,Q){let Y=Q.find((X)=>X.state!=="closed"&&X.conflict===!0);if(!Y)return!1;return await OE($,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 Ts6=60000,Rs6=300000,qs6=50,Ms6=60000,Is6=900000,Vs6=120000;var tJ8=D(()=>{x4();wq0();dJ8();pU();O80();kH();pJ8();P9();SW();UY1();x7();l$0();vd()});import{readdir as Ss6,rm as N_0}from"fs/promises";import{join as B_0}from"path";async function D_0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-Cs6),Z.setUTCHours(0,0,0,0);let Q=0;try{let Y=await ey($);for(let X of Y)if(/^\d{4}$/.test(X))Q+=await oJ8($,X,Z);else if(!X.startsWith(".")){let J=B_0($,X),G=await ey(J);for(let K of G){if(!/^\d{4}$/.test(K))continue;Q+=await oJ8(J,K,Z)}if((await ey(J)).length===0)await N_0(J,{recursive:!0,force:!0})}}catch(Y){console.warn("monitoring retention cleanup failed:",Y)}return Q}async function oJ8($,Z,Q){let Y=0,X=B_0($,Z),J=await ey(X);for(let W of J){if(!/^\d{2}$/.test(W))continue;let K=B_0(X,W),H=await ey(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=B_0(K,U);await N_0(B,{recursive:!0,force:!0}),Y++}}if((await ey(K)).length===0)await N_0(K,{recursive:!0,force:!0})}if((await ey(X)).length===0)await N_0(X,{recursive:!0,force:!0});return Y}async function ey($){try{return(await Ss6($)).filter((Q)=>!Q.startsWith("."))}catch{return[]}}var Cs6=30;var PO1=()=>{};import{DBOS as AO1,SchedulerMode as _s6}from"@dbos-inc/dbos-sdk";async function bs6(){let $=[KK(),Kg(),VN()],Z=0;for(let Q of $)try{Z+=await D_0(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 xs6($,Z){await AO1.runStep(()=>bs6(),{name:"monitoringRetention"})}function sJ8(){if(rJ8)return;rJ8=!0;let $=AO1.registerWorkflow(xs6,{name:"monitoringRetentionWorkflow"});AO1.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:vs6,mode:_s6.ExactlyOncePerIntervalWhenActive})}var vs6="23 4 * * *",rJ8=!1;var aJ8=D(()=>{b3();PO1()});function eJ8($){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 mQ.create();X.auth.user={id:Q,role:Y.role},X.organization={id:Y.orgId,slug:Y.orgSlug,name:Y.orgName};let J=await NA($.db,Z,Y.role);return X.boundAuth=cU1({auth:X.authInstance,headers:new Headers,role:Y.role,permissions:J,userId:Q}),X.access=new aP(Q,void 0,X.boundAuth,Y.role,"self"),DE(X,{id:Y.orgId,slug:Y.orgSlug}),X}}var $G8=D(()=>{XW();wU()});function fs6(){return[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}]}function ys6(){return{services:fs6(),migrationsStatus:"pending",serverUrl:null,logs:[]}}function hs6(){for(let $ of gs6)$()}function ZG8($){let Z=[...TO1.logs,$];TO1={...TO1,logs:Z.length>500?Z.slice(-500):Z},hs6()}function RO1(){return us6}var TO1,gs6,us6=!1;var qO1=D(()=>{TO1=ys6(),gs6=new Set});import{EventEmitter as ls6}from"events";var MO1;var QG8=D(()=>{qO1();MO1=new ls6;MO1.on("request",($)=>{ZG8($)})});function YG8(){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=cp(N.params.name),O=N.params.arguments||{},L=Object.keys(O).map((j)=>cp(j)),w=L.length>0?L.slice(0,3).join(",")+(L.length>3?"\u2026":""):"";J=`${W9.tool}${B}${W9.dim}(${w})${W9.reset}`}else if(N.method)J=`${W9.dim}${cp(N.method)}${W9.reset}`}}catch{}}let W=cp(X);if(X.startsWith("/mcp/conn_")){let F=X.split("/")[2]??"";W=`/mcp/${W9.mcp}${cp(F.slice(0,12))}\u2026${W9.reset}`}else if(X==="/mcp")W=`${W9.mcp}/mcp${W9.reset}`;else if(X==="/mcp/registry")W=`${W9.mcp}/mcp/registry${W9.reset}`;let K=ms6(Y),H=G?"\u25C0":"\u2190";if(!RO1())console.log(`${W9.dim}${H}${W9.reset} ${K}${Y}${W9.reset} ${W}${J?` ${J}`:""}`);try{await Z()}finally{let F=Date.now()-Q,U=$.res.status,N=cs6(U),B=F<1000?`${F}ms`:`${(F/1000).toFixed(1)}s`,O=G?"\u25B6":"\u2192";if(!RO1())console.log(`${W9.dim}${O}${W9.reset} ${K}${Y}${W9.reset} ${W}${J?` ${J}`:""} ${N}${U}${W9.reset} ${W9.duration}${B}${W9.reset}`);MO1.emit("request",{method:Y,path:cp(X),status:U,duration:F,timestamp:new Date})}}}var W9,cs6=($)=>{if($>=500)return W9.serverError;if($>=400)return W9.clientError;if($>=300)return W9.redirect;return W9.ok},ms6=($)=>{return W9[$]||W9.reset},cp=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var XG8=D(()=>{qO1();QG8();W9={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 KG8}from"crypto";import{mkdir as ds6,readdir as is6,rm as JG8,stat as HG8}from"fs/promises";import{join as VO1,relative as ps6}from"path";import{z as Q8}from"zod";function UG8($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return VO1(ns6,Z)}function NG8($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function IO1($,Z){let Q=UG8($),Y=NG8(Z);return VO1(Q,Y)}function ts6($,Z,Q,Y){let X=E0().encryptionKey||"dev-secret",J=`${$}:${Z}:${Q}:${Y}`;return KG8("sha256",X).update(J).digest("hex")}function WG8($,Z,Q,Y,X){let J=Math.floor(Date.now()/1000)+Y,G=ts6(Z,Q,J,X),W=new URL(`/api/dev-assets/${Z}/${NG8(Q)}`,$);return W.searchParams.set("expires",J.toString()),W.searchParams.set("signature",G),W.searchParams.set("method",X),W.toString()}function BG8($,Z,Q){let Y=`${$}:${Z.getTime()}:${Q}`;return`"${KG8("md5","etag").update(Y).digest("hex")}"`}async function DG8($,Z,Q,Y,X){try{let J=await is6($,{withFileTypes:!0});for(let G of J){let W=VO1($,G.name),H=ps6(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 DG8(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 HG8(W);X.objects.push({key:H,size:F.size,lastModified:F.mtime.toISOString(),etag:BG8(W,F.mtime,F.size)})}catch{}}}}catch{}}function OG8($,Z){let Y=J0($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:Q8.object({prefix:Q8.string().optional(),maxKeys:Q8.number().optional().default(1000),continuationToken:Q8.string().optional(),delimiter:Q8.string().optional()}),outputSchema:Q8.object({objects:Q8.array(Q8.object({key:Q8.string(),size:Q8.number(),lastModified:Q8.string(),etag:Q8.string()})),nextContinuationToken:Q8.string().optional(),isTruncated:Q8.boolean(),commonPrefixes:Q8.array(Q8.string()).optional()}),handler:async(X)=>{let J=X,G=J.prefix||"",W=J.maxKeys??1000,K=J.delimiter,H=J.continuationToken,F=UG8(Y);await ds6(F,{recursive:!0});let U={objects:[],commonPrefixes:new Set};await DG8(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:Q8.object({key:Q8.string()}),outputSchema:Q8.object({contentType:Q8.string().optional(),contentLength:Q8.number(),lastModified:Q8.string(),etag:Q8.string(),metadata:Q8.record(Q8.string(),Q8.string()).optional()}),handler:async(X)=>{let J=X,G=IO1(Y,J.key),W=await HG8(G);return{contentType:cN1(J.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:BG8(G,W.mtime,W.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:Q8.object({key:Q8.string(),expiresIn:Q8.number().optional()}),outputSchema:Q8.object({url:Q8.string(),expiresIn:Q8.number()}),handler:async(X)=>{let J=X,G=aD(J.expiresIn,GG8);return{url:WG8(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:Q8.object({key:Q8.string(),expiresIn:Q8.number().optional(),contentType:Q8.string().optional()}),outputSchema:Q8.object({url:Q8.string(),expiresIn:Q8.number()}),handler:async(X)=>{let J=X,G=aD(J.expiresIn,GG8);return{url:WG8(Z,Y,J.key,G,"PUT"),expiresIn:G}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:Q8.object({key:Q8.string()}),outputSchema:Q8.object({success:Q8.boolean(),key:Q8.string()}),handler:async(X)=>{let J=X,G=IO1(Y,J.key);try{return await JG8(G),{success:!0,key:J.key}}catch{return{success:!1,key:J.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:Q8.object({keys:Q8.array(Q8.string()).max(1000)}),outputSchema:Q8.object({deleted:Q8.array(Q8.string()),errors:Q8.array(Q8.object({key:Q8.string(),message:Q8.string()}))}),handler:async(X)=>{let J=X,G=[],W=[];return await Promise.all(J.keys.map(async(K)=>{let H=IO1(Y,K);try{await JG8(H),G.push(K)}catch(F){W.push({key:K,message:F instanceof Error?F.message:"Unknown error"})}})),{deleted:G,errors:W}}}]}async function kO1($,Z,Q){let Y=OG8(Z,Q),X=new Kw({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:Q8.object({}).shape,K=G.outputSchema&&"shape"in G.outputSchema?G.outputSchema.shape:Q8.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 P3({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await X.connect(J),nW(X,J,$,"mcp:dev-assets")}async function LG8($,Z,Q,Y){let J=OG8(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 ns6="./data/assets",GG8=3600,FG8,wG8;var jG8=D(()=>{X$();ed();J8();_J0();ad();BJ();eD();eS0();FG8=new Z1;FG8.all("/",async($)=>{let Z=$.get("studioContext"),Q=new URL($.req.url),Y=`${Q.protocol}//${Q.host}`;return kO1($.req.raw,Z,Y)});wG8=FG8});var EG8={};$6(EG8,{mountDevRoutes:()=>os6});function os6($,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 kO1(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 LG8(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",wG8);let Q=new Z1;Q.use("*",iH({mountPath:"/api/dev-assets"})),Q.route("/",aS0({orgFromPath:!1})),$.route("/api/dev-assets",Q)}var zG8=D(()=>{J8();xN1();eS0();jG8()});var SG8={};$6(SG8,{watchHandler:()=>kG8,resolveCorsOrigin:()=>IG8,isSsoExemptPath:()=>qG8,isAllowedOAuthRedirectUri:()=>VG8,createApp:()=>Ja6});import{readFileSync as rs6}from"fs";import{PrometheusSerializer as ss6}from"@opentelemetry/exporter-prometheus";import{DBOS as jO}from"@dbos-inc/dbos-sdk";import{oAuthDiscoveryMetadata as $a6,oAuthProtectedResourceMetadata as Za6}from"better-auth/plugins";async function as6($){let Z=$.connect(),Q;try{Q=await Promise.race([Z,AG8(PG8)])}catch{return Z.then((Y)=>Y.release(!0)).catch(()=>{}),!1}try{return await Promise.race([Q.query("SELECT 1"),AG8(PG8)]),Q.release(),!0}catch{return Q.release(!0),!1}}function AG8($){return new Promise((Z,Q)=>setTimeout(()=>Q(Error("pg health-check timeout")),$))}function qG8($){return $.startsWith("/api/org-sso/")||/^\/api\/[^/]+\/sso\//.test($)||$.startsWith("/api/auth/")||$.startsWith("/api/tools/management")||$.startsWith("/oauth-proxy/")||/^\/api\/[^/]+\/oauth-proxy\//.test($)||$.startsWith(`${gS0}/`)||$.startsWith(`${_S0}/`)}function MG8($){return $==="local.studio.decocms.com"}function IG8($,{baseUrl:Z,requestOrigin:Q}){let Y;try{Y=new URL($).hostname}catch{return null}if(Y==="localhost"||Y==="127.0.0.1")return $;if(MG8(Y))return $;let X=Z??Q;try{if(new URL(X).origin===$)return $}catch{}return null}function VG8($,Z){return $.origin===new URL(Z).origin||$.hostname==="localhost"||MG8($.hostname)}async function Ja6($={}){let Z=$.database??D8(),Q=!1;_5.stop().catch((K0)=>{console.error("[SSEHub] Error stopping previous broadcast (HMR cleanup):",K0)});let Y,X,J,G,W=new NO1,K,H,F,U=null;if($.disableNats)K=BO1(),Y={get:async()=>null,set:async()=>{},invalidate:async()=>{},teardown:()=>{}},X=null,J=null,G=new R80,H={start:async()=>{},broadcast:()=>{},stop:async()=>{}},F={init:async()=>{},pump:(K0)=>{return(async()=>{let H0=K0.getReader();try{while(!0){let{done:R0}=await H0.read();if(R0)break}}catch{}finally{H0.releaseLock()}})()},publishRawChunk:async()=>!1,publishDone:async()=>!1,createTailStream:async()=>null,purge:()=>{},teardown:()=>{}};else{U=CJ8();let K0=E0().natsCredsPath,H0;if(K0)try{H0=rs6(K0,"utf8")}catch(w8){console.error(`[app] failed to read NATS_CREDS at ${K0}; connecting anonymously`,w8)}U.init(E0().natsUrls,H0?{creds:H0}:void 0);let R0=W$1()?new d11({getJetStream:()=>U.getJetStream()}):null;R0?.init().catch(()=>{}),Y=R0;let A0=new YZ1({getJetStream:()=>U.getJetStream()});A0.init().catch(()=>{}),X=A0;let D1=new yf(sQ1,{getJetStream:()=>U.getJetStream()}),x$=new yf(c$0,{getJetStream:()=>U.getJetStream()});D1.init().catch(()=>{}),x$.init().catch(()=>{}),J={reads:D1,cards:x$};let i$=new uJ1({getJetStream:()=>U.getJetStream()});i$.init().catch(()=>{}),G=i$,K=BO1({getConnection:()=>U.getConnection()}),H=new DO1({getConnection:()=>U.getConnection()}),F=new wO1({getConnection:()=>U.getConnection(),getJetStream:()=>U.getJetStream()}),$68(U),U.onReady(()=>{R0?.init().catch((w8)=>{console.error("[McpListCache] Deferred init failed:",w8)}),A0.init().catch((w8)=>{console.error("[SkillCatalogCache] Deferred init failed:",w8)}),D1.init().catch((w8)=>{console.error("[PrReadCache] Deferred init failed:",w8)}),x$.init().catch((w8)=>{console.error("[PrCardCache] Deferred init failed:",w8)}),i$.init().catch((w8)=>{console.error("[ConnectionCircuitStore] Deferred init failed:",w8)}),K.start(),tN$(()=>U.getConnection()),F.init().catch((w8)=>{console.warn("[Decopilot] StreamBuffer init failed (late-join disabled):",w8)})})}if(Jz)await Jz();i11(Y),JZ1(X),aQ1(J),lJ1(G);let B={storage:new oh(Z.db),sseHub:_5,onThreadFinished:async(K0,H0)=>fd(new O3(Z.db),K0,H0,new SG(Z.db))},O=new FX1(B),L=new d40(Z.db),w=new jO1(L);w.start(),mg$(H),H.start((K0)=>{dq0(K0),O.execute({type:"CANCEL",taskId:K0}).catch((H0)=>{console.error("[Decopilot] CancelBroadcast execute failed:",H0)})}).catch((K0)=>{console.error("[Decopilot] CancelBroadcast start failed:",K0)}),U?.onReady(()=>{H.start().catch((K0)=>{console.error("[CancelBroadcast] Deferred start failed:",K0)})});let j=()=>U?.getConnection()??null;SN1(j),U?.onReady(()=>SN1(j)),AG1(j),U?.onReady(()=>AG1(j)),F.init().catch((K0)=>{console.warn("[Decopilot] StreamBuffer init failed, attach/late-join disabled:",K0)}),Jz=async()=>{await O.stopAll(),O.dispose(),w.dispose(),H.stop().catch(()=>{}),A58(),F.teardown(),Y?.teardown(),X?.teardown(),J?.reads.teardown(),J?.cards.teardown(),W.teardown(),K.teardown(),oN$(),G.teardown(),i11(null),JZ1(null),aQ1(null),lJ1(null)};let E=new Z1;if(E.use("*",yJ1({enabled:(K0)=>Gp(K0,"debug")==="1"})),E.use("*",f_0),E.use("/*",o48({origin:(K0,H0)=>IG8(K0,{baseUrl:E0().baseUrl,requestOrigin:new URL(H0.req.url).origin}),credentials:!0,allowMethods:["GET","POST","PUT","DELETE","OPTIONS"],allowHeaders:["Content-Type","Authorization","mcp-protocol-version"],exposeHeaders:["WWW-Authenticate"]})),E.use("*",async(K0,H0)=>{if(await H0(),K0.req.path.includes("/files/"))return;if(K0.req.path.includes("/fs/")&&K0.req.path.endsWith("/read"))return;K0.header("X-Frame-Options","DENY"),K0.header("Content-Security-Policy","frame-ancestors 'none'")}),!E0().noTui)E.use("*",YG8());E.use("*",async(K0,H0)=>{if(await H0(),ap(K0.req.path))return;if(K0.res.status>=500){let A0=await K0.res.clone().text();console.error(`[5xx Response] ${K0.req.method} ${K0.req.path} - ${K0.res.status}:`,A0)}}),E.get(eY.HEALTH,(K0)=>{if(Q)return K0.json({status:"shutting_down"},503);return K0.json({status:"ok"})}),E.get(eY.HEALTH_LIVE,(K0)=>{return K0.json({status:"ok"})}),E.get(eY.HEALTH_READY,async(K0)=>{if(Q)return K0.json({status:"shutting_down"},503);let H0={};if(H0.postgres={status:await as6(Z.pool)?"up":"down"},U)H0.nats=U.isConnected()?{status:"up"}:{status:"down"};else H0.nats={status:"down"};let R0=H0.postgres.status==="up",A0=R0?200:503;return K0.json({status:R0?"ready":"not_ready",services:H0},A0)}),E.get(eY.METRICS,async(K0)=>{try{let H0=await u_0.collect(),R0=es6.serialize(H0.resourceMetrics);return K0.text(R0,200,{"Content-Type":"text/plain; version=0.0.4; charset=utf-8"})}catch(H0){return console.error("Failed to collect metrics:",H0),K0.text("# Error collecting metrics",500)}});let z=1800000;E.get(`${eY.DBOS_QUEUE_DEPTH_PREFIX}:queueName`,async(K0)=>{let H0=K0.req.param("queueName");if(!Qa6.has(H0))return K0.json({error:`Unknown queue: ${H0}`},404);let[R0,A0]=await Promise.all([jO.listQueuedWorkflows({queueName:H0,status:"ENQUEUED",loadInput:!1,loadOutput:!1}),jO.listQueuedWorkflows({queueName:H0,status:"PENDING",loadInput:!1,loadOutput:!1,dequeuedAfter:new Date(Date.now()-z).toISOString()})]);return K0.json({queue_length:R0.length,in_flight:A0.length})}),E.route("/api/config",uX8),E.route("/api/_reports",aX8),E.route("/api/_stripe",QO1),E.route("/api/_github",ZJ8({taskBoard:()=>i,contextFactory:()=>g})),E.route("/api/_git",Dp);let T={db:Z.db,encryptionKey:E0().encryptionKey};E.route("/api/_jira",FJ8(T)),E.route("/api/_jira",JJ8(T)),E.route("/report",oX8($.clientDir)),E.route("/api/auth/custom",z68),E.route("/api/auth/desktop",R68),E.all("/api/auth/admin/*",H58),E.all("/api/auth/*",async(K0)=>{return await x8.handler(K0.req.raw)});let A=M88();A.use("/.well-known/oauth-protected-resource/mcp/:connectionId",X60),A.use("/mcp/:connectionId/.well-known/oauth-protected-resource",X60),E.route("/",A),E.get("/.well-known/oauth-protected-resource/api/:org/mcp/:connectionId",c40),E.route("/",C88()),E.use("/oauth-proxy/:connectionId/*",X60),E.all("/oauth-proxy/:connectionId/*",TG8);let P=async(K0)=>{let R0=await Ya6()(K0.req.raw),A0=await R0.json();return Response.json(A0,R0)};E.use("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",X60),E.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",P);let q=async(K0)=>{let R0=await Xa6()(K0.req.raw),A0=await R0.json();return Response.json(A0,R0)};E.get("/.well-known/oauth-authorization-server/*/:gateway?/:connectionId?",q);let x=s48({ttlMs:120000}),_=await A48({db:Z.db,auth:x8,encryption:{key:E0().encryptionKey},observability:{tracer:IO,meter:e1},modelListCache:W,providerKeyCache:K,memberRoleCache:x});mQ.set(_),Mp1({db:Z.db,baseUrl:m5()}),T48({db:Z.db}),I48({db:Z.db}),x48({db:Z.db}),WJ8({db:Z.db,encryptionKey:E0().encryptionKey}),Lb$({db:Z.db}),l48({db:Z.db}),db$({db:Z.db});let V=zX0(Z.db),y=new _r(Z.db),g=eJ8({db:Z.db});vJ1({storage:V,studioContextFactory:g}),zX1({systemDatabaseUrl:Ks0(E0().databaseUrl,E0().databasePgSsl),studioContextFactory:g,deps:{runRegistry:O,cancelBroadcast:H,streamBuffer:F,sseHub:_5}}),BX1({dispatchRunFn:by$,studioContextFactory:g,deps:{runRegistry:O,cancelBroadcast:H,streamBuffer:F,sseHub:_5}});let l=new oh(Z.db),i=new O3(Z.db),p=new SG(Z.db),U0=new zO1(i,g,p);if(E0().taskBoardReviewSweeperEnabled){U0.start();let K0=Jz;Jz=async()=>{await K0?.(),U0.dispose()}}Zg$({getJetStream:()=>U?.getJetStream()??null,getJetStreamManager:async()=>{let K0=U?.getConnection();return K0?await RG8.jetstreamManager(K0):null},messageParts:l.messageParts(),resolveRun:async(K0)=>{let H0=await Z.db.selectFrom("threads").select(["organization_id","created_by","message_storage_version","status","run_fence_token","title"]).where("id","=",K0).executeTakeFirst();return H0?{orgId:H0.organization_id,createdBy:H0.created_by,version:H0.message_storage_version??1,status:H0.status,runFenceToken:H0.run_fence_token,title:H0.title??null}:null},completeRunIfNotCompleted:async(K0,H0)=>{let R0=await l.completeRunIfNotCompleted(K0,H0);if(U_0(_5,H0,K0,R0),R0)await fd(i,K0,H0,p);return R0},markRunRequiresAction:async(K0,H0)=>{let R0=await l.requiresActionIfInProgress(K0,H0);return U_0(_5,H0,K0,R0),R0},markRunFailed:async(K0,H0,R0,A0)=>{let D1=await l.markRunFailed(K0,H0,R0,A0);if(U_0(_5,H0,K0,D1),D1)await fd(i,K0,H0,p);return D1},clearSynthesizedError:async(K0,H0)=>{await l.messageParts().replaceMessageParts(K0,jE(K0,H0),[])},persistTitle:(K0,H0,R0)=>l.update(K0,H0,{title:R0}),onTitleUpdated:async({runId:K0,orgId:H0,title:R0})=>{let A0=await l.get(K0,H0).catch(()=>null);_5.emit(H0,DF(K0,A0?.status??"in_progress",{title:R0,virtualMcpId:A0?.virtual_mcp_id??void 0,createdBy:A0?.created_by,triggerId:A0?.trigger_id,branch:A0?.branch??null,harnessId:A0?.harness_id??void 0,createdAt:A0?.created_at,updatedAt:A0?.updated_at}))},bumpProgress:async({runId:K0,orgId:H0})=>{await l.bumpProgress(K0,H0)},recordCompleted:async({runId:K0,orgId:H0,distinctId:R0,usage:A0})=>{f1.capture({distinctId:R0,event:"chat_message_completed",groups:{organization:H0},properties:{organization_id:H0,thread_id:K0,transport:"projector",input_tokens:A0.inputTokens,output_tokens:A0.outputTokens,total_tokens:A0.totalTokens}})},recordFailed:async({runId:K0,orgId:H0,distinctId:R0,reason:A0,kind:D1})=>{f1.capture({distinctId:R0,event:"chat_message_failed",groups:{organization:H0},properties:{organization_id:H0,thread_id:K0,transport:"projector",error_category:D1,error_message:A0}})},purgeRun:async(K0)=>{F.purge(K0)}}),Gy$({studioContextFactory:g,systemDatabaseUrl:Ks0(E0().databaseUrl,E0().databasePgSsl),streamBuffer:F}),sJ8(),Ip1(),q48(),k48(),y48(),HJ8(),Pb$(),m48(),ib$(),YJ8();let v0=async(K0,H0,R0)=>{let A0=await V.findById(K0,H0);if(!A0)throw Error("Automation not found");return fJ1({automationId:A0.id,organizationId:A0.organization_id,triggerId:null})},G0=new Np(V,({automation:K0,trigger:H0,contextMessages:R0,idempotencyKey:A0})=>T80({automationId:K0.id,organizationId:K0.organization_id,triggerId:H0.id,contextMessages:R0},{idempotencyKey:A0})),N0=[KK(),Kg(),VN()];for(let K0 of N0)D_0(K0).then(()=>{}).catch((H0)=>console.error("[monitoring] Retention cleanup failed:",H0));let o=()=>x8.api.deleteAllExpiredApiKeys().catch((K0)=>console.error("[auth] Expired API key cleanup failed:",K0));o(),setInterval(o,86400000).unref(),E.use("*",async(K0,H0)=>{if(b_0(K0.req.path))return H0();let R0={measure:async(D1,x$)=>{pW(K0,D1);try{return await x$()}finally{A3(K0,D1)}}},A0=await mQ.create(K0.req.raw,{timings:R0});A0.automationRunner=v0,K0.set("studioContext",A0);try{await H0()}finally{let D1=A0.pendingRevalidations;if(D1.length>0)Promise.race([Promise.allSettled(D1),O$(30000)]).catch((i$)=>console.error("[studio] revalidation cleanup error:",i$))}}),E.use("/api/:org/decopilot/*",Kp),E.use("/api/:org/v1/*",Kp),E.use("/api/:org/files/*",Kp),E.use("*",async(K0,H0)=>{if(qG8(K0.req.path))return H0();let R0=K0.get("studioContext");if(!R0?.organization?.id||!R0?.auth?.user?.id)return H0();if(!(await R0.storage.orgSsoConfig.getByOrgId(R0.organization.id))?.enforced)return H0();if(!await R0.storage.orgSsoSessions.isValid(R0.auth.user.id,R0.organization.id))return K0.json({error:"SSO authentication required for this organization"},403);return H0()});let $0=new Z1;$0.use("*",iH({mountPath:"/api/org-sso"})),$0.route("/",lS0()),E.route("/api/org-sso",$0),E.get("/api/tools/management",(K0)=>{return K0.json({tools:mn0,grouped:sP()})}),E.use("/mcp/*",async(K0,H0)=>{pW(K0,"mcp");try{return await H0()}finally{A3(K0,"mcp")}});let Z0=async(K0,H0)=>{let R0=K0.var.studioContext;if(!R0.auth.user?.id&&!R0.auth.apiKey?.id){let A0=new URL(K0.req.url),D1=K0.req.header("x-forwarded-proto")?.split(",")[0]?.trim(),x$=D1?`${D1}://${A0.host}`:A0.origin;return K0.res=new Response(null,{status:401,headers:{"WWW-Authenticate":`Bearer realm="mcp",resource_metadata="${x$}${A0.pathname}/.well-known/oauth-protected-resource"`}})}return await H0()};if(E.use("/mcp/:connectionId?",Z0),E.use("/mcp/gateway/:virtualMcpId?",Z0),E.use("/mcp/virtual-mcp/:virtualMcpId?",Z0),E.use("/mcp/self",Z0),qW()){let{mountDevRoutes:K0}=(zG8(),A_0(EG8));K0(E,Z0)}let r=new Z1;r.use("*",iH({mountPath:"/mcp"})),r.route("/",gM0()),E.route("/mcp",r);let Y0=new Z1;Y0.use("*",iH({mountPath:"/mcp/self"})),Y0.route("/",SC0()),E.route("/mcp/self",Y0);let i0=new Z1;i0.use("*",iH({mountPath:"/mcp"})),i0.route("/",lM0()),E.route("/mcp",i0),E.use("/api/:org/models/*",async(K0,H0)=>{pW(K0,"llm_models");try{return await H0()}finally{A3(K0,"llm_models")}});let C0=R58({cancelBroadcast:H,streamBuffer:F,runRegistry:O});E.route("/api",C0),E.route("/api",DJ8);let W1=new Z1;W1.use("*",iH({mountPath:"/api"})),W1.route("/",bC0()),E.route("/api",W1),E.route("/api",vX8);let u0=new Z1;u0.use("*",iH({mountPath:"/api"})),u0.route("/",xC0({tokenStorage:y,automationEventDispatcher:G0})),E.route("/api",u0);let L0=new br(Z.db),j0=new Z1;j0.use("*",iH({mountPath:"/api"})),j0.route("/",pS0()),E.route("/api",j0),E.route("/api/deco-sites",h58()),E.route("/api/deco-apps",IX8());let l0=new Z1;l0.use("*",iH({mountPath:"/api/deco-sites"})),l0.route("/",tS0()),E.route("/api/deco-sites",l0),E.route(gS0,F58()),E.route(wQ8,zQ8()),E.route("/api/_editor-resolve",xX8()),E.route(V68,k68()),E.route(_S0,d68());let O1=E0(),Q1=O1.elevenlabsApiKey?new Y_0({apiKey:O1.elevenlabsApiKey,model:O1.elevenlabsVoiceModel,conversationModel:O1.elevenlabsConversationModel,voiceId:O1.elevenlabsVoiceId}):null,_0={openai:O1.openaiLiveApiKey?new tD1({apiKey:O1.openaiLiveApiKey,voice:O1.openaiLiveVoice}):null,elevenlabs:Q1?new nD1(Q1,()=>U?.getConnection()??null):null},m0=new eD1({adapter:Q1,conversationAdapters:_0,defaults:O1,secret:O1.studioJwtSecret??O1.betterAuthSecret,getConnection:()=>U?.getConnection()??null}),p0=JX8({voiceSessions:m0,kvStorage:L0,runRegistry:O,streamBuffer:F,sseHub:_5,cancelBroadcast:H,tokenStorage:y,automationEventDispatcher:G0,mountDevAssets:qW(),mcpAuth:Z0,oauthProxyHandler:TG8,watchHandler:kG8,betterAuthProtectedResourceHandler:P,getNatsConnection:()=>U?.getConnection()??null});return E.route("/api/:org",p0),E.notFound((K0)=>{return K0.json({error:"Not Found",path:K0.req.path},404)}),E.onError(M58),Object.assign(E,{markShuttingDown:()=>{Q=!0},shutdown:async()=>{if(console.log("[shutdown] Stopping workers..."),await Promise.allSettled([_5.stop(),Jz?Promise.resolve(Jz()).finally(()=>{Jz=null}):Promise.resolve()]),U)await U.drain().catch((K0)=>console.error("[shutdown] NATS drain error:",K0));console.log("[shutdown] Flushing telemetry..."),await rX().catch((K0)=>console.error("[shutdown] Telemetry flush error:",K0)),console.log("[shutdown] Closing database..."),await CZ$(Z).catch((K0)=>console.error("[shutdown] Database close error:",K0)),console.log("[shutdown] Cleanup complete.")},initDbos:async()=>{await jO.registerQueue(v3,{partitionQueue:!0,concurrency:SJ1,minPollingIntervalMs:CJ1}),await jO.registerQueue(_3,{partitionQueue:!0,concurrency:jX1,priorityEnabled:!0}),await jO.registerQueue(MN,{workerConcurrency:E0().decopilotMaxConcurrentHostedRuns,priorityEnabled:!0}),await jO.registerQueue(IN,{workerConcurrency:E0().sandboxMaxConcurrentHostedRuns,priorityEnabled:!0}),await jO.registerQueue(qO,{partitionQueue:!0,concurrency:Jy$}),await jO.registerQueue(Fz,mb$),await fN1(V),await Promise.allSettled(["automations-gate","automations-global","jira-push"].map((K0)=>jO.deleteQueue(K0))),await _J1(Z.pool),$X$().catch((K0)=>{console.error("[studio-pack-backfill] failed:",K0)}),Vp1().catch((K0)=>{console.error("[org-fs] public-sets boot sync kick failed:",K0)})}})}var RG8,PG8=5000,Jz=null,TG8=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 mQ.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 Qp(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 m40(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=S88(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(!VG8(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(i48(G.connection_url))w.searchParams.set("auto_personal","true"),w.searchParams.set("force_new","true");return $.redirect(w.toString(),302)}let E={Accept:$.req.header("Accept")||"application/json"},z=$.req.header("Content-Type");if(z)E["Content-Type"]=z;let T=$.req.header("Authorization");if(T)E.Authorization=T;let A,P=null,q=null;if($.req.method!=="GET"&&$.req.method!=="HEAD")if(Y==="token"&&z?.includes("application/x-www-form-urlencoded")){if(T?.toLowerCase().startsWith("basic "))try{let p=atob(T.slice(6).trim()),U0=p.indexOf(":");if(U0!==-1){let v0=decodeURIComponent(p.slice(0,U0)),G0=decodeURIComponent(p.slice(U0+1));P=v0||null,q=G0||null}}catch{}let y=await $.req.formData();if(y.has("resource"))y.set("resource",U);let g=y.get("client_id"),l=y.get("client_secret");if(typeof g==="string"&&g)P=g;if(typeof l==="string"&&l)q=l;let i=new URLSearchParams;for(let[p,U0]of y.entries())i.append(p,U0.toString());A=i.toString()}else if(Y==="register"&&z?.toLowerCase().includes("application/json")){let y=await X.db.selectFrom("organization").select(["id","slug","name"]).where("id","=",G.organization_id).executeTakeFirst(),g=await $.req.text(),l={};try{l=g?JSON.parse(g):{}}catch{A=g}let i=typeof l==="object"&&l!==null&&!Array.isArray(l);if(A===void 0&&!i)A=g;if(A===void 0){let p=l,U0=p.metadata&&typeof p.metadata==="object"?p.metadata:{};p.metadata={...U0,organization_id:G.organization_id,...y?.slug?{organization_slug:y.slug}:{},...y?.name?{organization_name:y.name}:{}},A=JSON.stringify(p),E["Content-Type"]="application/json"}}else A=$.req.raw.body??void 0;let x=await fetch(w.toString(),{method:$.req.method,headers:E,body:A,duplex:"half",redirect:"manual"}),_=new Headers,V=["connection","keep-alive","transfer-encoding","content-encoding","content-length"];for(let[y,g]of x.headers.entries())if(!V.includes(y.toLowerCase()))_.set(y,g);if(Y==="token"&&x.ok){let y=await x.text();try{let g=JSON.parse(y);if(typeof g.access_token==="string"&&g.access_token){let l=typeof g.expires_in==="number"?new Date(Date.now()+g.expires_in*1000):null,i=null;try{i=await Yp(G.connection_url)??O}catch{i=O}let p={connectionId:Z,accessToken:g.access_token,refreshToken:typeof g.refresh_token==="string"?g.refresh_token:null,scope:typeof g.scope==="string"?g.scope:null,expiresAt:l,clientId:P,clientSecret:q,tokenEndpoint:i};await new w9(X.db,X.vault).upsert(p)}}catch(g){console.error("[oauth-proxy] failed to persist downstream token:",g)}return new Response(y,{status:x.status,statusText:x.statusText,headers:_})}return new Response(x.body,{status:x.status,statusText:x.statusText,headers:_})},kG8=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&&(!dU(Y)||!await iU(Z)))return $.json({error:"forbidden"},403);let W=G?$q0:Y;if(G)fD({action:"watch_all_orgs",actorUserId:Q,actorOrgId:Y,targetOrgId:"all"});let K=crypto.randomUUID();return DO($,async(H)=>{if(await H.writeSSE({event:"connected",data:JSON.stringify({listenerId:K,organizationId:Y,typePatterns:J,connectedAt:new Date().toISOString()})}),!_5.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(()=>{_5.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),_5.remove(W,K)})},30000);await new Promise((N)=>{H.onAbort(()=>{clearInterval(U),_5.remove(W,K),N()})})})},es6,Qa6,Ya6=()=>Za6(x8),Xa6=()=>$a6(x8);var CG8=D(()=>{a$();X$();kp1();M48();S48();g48();k80();bQ1();d48();l$0();I9();oc();c8();J8();VS0();r48();gJ1();Q3();wU();XN1();CG();k6();G6();UN1();q68();S68();i68();wN1();U58();MN1();vN1();bN1();UH();FS0();xN1();I58();SS0();GX8();UX8();NX8();LX8();MX8();hN1();VX8();hM0();q80();bX8();cM0();DD1();fX8();ND1();lX8();rX8();eX8();$J8();QJ8();XJ8();GJ8();UJ8();FO1();dN1();OJ8();BD1();HD1();K50();_J8();CJ();gT0();$Y1();Z00();Y00();mJ1();vJ8();xJ8();CN1();cJ8();UX1();mJ8();Do();yr();xD();P9();qU1();tJ8();aJ8();X30();PO1();b3();yN1();bD();KX1();X30();$M0();kn0();Sn0();$G8();au();XG8();Sp();XN1();Vd();dd();iq0();RG8=C(LK(),1);es6=new ss6,Qa6=new Set([v3,_3,MN,IN,qO,Fz])});var xG8={};$6(xG8,{resolveClientDir:()=>Na6,resolveAssetPathWithTraversalCheck:()=>bG8,isPathWithinDirectory:()=>vG8,createAssetHandler:()=>Ba6});import{resolve as n60,dirname as Ga6,join as Wa6,extname as Ka6,basename as Ha6,sep as _G8}from"path";function Fa6($,Z){if($===Z||Ha6($)==="index.html")return{"Cache-Control":"no-cache"};if($.includes(`${_G8}assets${_G8}`))return{"Cache-Control":"public, max-age=31536000, immutable"};return{}}function vG8($,Z){let Q=n60(Z),Y=n60($);return Y===Q||Y.startsWith(Q+"/")}function bG8({requestPath:$,clientDir:Z}){let Q=$.startsWith("/")?$.slice(1):$,Y=n60(Z,Q);if(!vG8(Y,Z))return null;return Y}function Na6($,Z="../client"){let Q=new URL($),Y=Ga6(Q.pathname);return n60(Y,Z)}function Ba6($={}){let{env:Z="production",clientDir:Q=Ua6,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=bG8({requestPath:W,clientDir:Q});if(!K)return null;let H=Wa6(K,"index.html"),F=n60(Q,"index.html"),U=J.headers.get("accept"),B=U?.includes("text/html")||U?.includes("*/*")&&["",".html"].includes(Ka6(K))?[H,F]:[];for(let O of[K,...B])try{let L=Bun.file(O);if(await L.exists())return new Response(L,{headers:Fa6(O,F)})}catch{}if(W.includes("/assets/"))return new Response("Not Found",{status:404,headers:{"Cache-Control":"no-store"}});return null}}var Ua6="./dist/client";var fG8=()=>{};var yG8={};$6(yG8,{tryUpgradePreviewWs:()=>za6,tryHandlePreviewHttp:()=>Ea6,previewWebSocketHandler:()=>Pa6,parsePreviewBaseDomain:()=>ja6,isPreviewWsData:()=>O_0,extractHandleFromHost:()=>SO1});function La6($){if($.method!=="GET")return!1;return($.headers.get("accept")??"").includes("text/html")}function wa6(){return new Response(Oa6,{status:503,headers:{"content-type":"text/html; charset=utf-8","cache-control":"no-store","retry-after":"1","access-control-allow-origin":"*"}})}function ja6($){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 SO1($,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 Ea6($,Z){let Q=SO1($.headers.get("host"),Z.baseDomain);if(!Q)return null;let Y=await Z.getRunner();if(!Y)return o60(503,"preview proxy not configured");let X=await Y.proxyPreviewRequest(Q,$);if(X.headers.get(um)&&La6($))return wa6();return X.headers.delete(um),X}function o60($,Z){return new Response(JSON.stringify({error:Z}),{status:$,headers:{"content-type":"application/json","access-control-allow-origin":"*"}})}function O_0($){return typeof $==="object"&&$!==null&&$.kind==="preview"}async function za6($,Z,Q){if(($.headers.get("upgrade")??"").toLowerCase()!=="websocket")return null;let Y=SO1($.headers.get("host"),Q.baseDomain);if(!Y)return null;let X=await Q.getRunner();if(!X)return o60(503,"preview proxy not configured");let J=await X.resolvePreviewUpstreamUrl(Y);if(!J)return o60(404,"sandbox not found");let G=new URL($.url);if(G.pathname.startsWith("/_sandbox"))return o60(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 o60(426,"upgrade failed");return}function t60($,Z,Q,Y){if(Z.closed)return;Z.closed=!0;try{$.close(Q,Y)}catch{}try{Z.upstream?.close()}catch{}}var Da6=256,Oa6='<!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>',Pa6;var gG8=D(()=>{M10();Pa6={open($){let Z=$.data;if(!O_0(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)}`),t60($,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)=>{t60($,Z,Y.code||1000,Y.reason||"")}),Q.addEventListener("error",()=>{t60($,Z,1011,"upstream error")})},message($,Z){let Q=$.data;if(!O_0(Q))return;let Y=Q.upstream;if(Y&&Y.readyState===WebSocket.OPEN){Y.send(Z);return}if(Q.pending.length>=Da6){t60($,Q,1011,"preview ws backlog overflow");return}Q.pending.push(Z)},close($){let Z=$.data;if(!O_0(Z))return;t60($,Z,1000,"")}}});var cG8={};$6(cG8,{printBanner:()=>Ta6,bannerLines:()=>lG8,BANNER_LINES:()=>hG8,BANNER_GRADIENT:()=>uG8});function Aa6($){let Z=Number.parseInt($.slice(1),16);return[Z>>16&255,Z>>8&255,Z&255]}function lG8($){let Z=hG8.map((Q,Y)=>{let[X,J,G]=Aa6(uG8[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 Ta6($){console.log("");for(let Z of lG8($))console.log(Z);console.log("")}var hG8,uG8;var mG8=D(()=>{hG8=[" \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 "],uG8=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"]});a$();var mO1="13";function dO1($){return{name:"decocms",systemDatabaseUrl:$.systemDatabaseUrl,systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:$.poolSize,runAdminServer:!1,executorID:$.executorID,applicationVersion:mO1,...$.listenQueues!==void 0?{listenQueues:$.listenQueues}:{}}}a$();import W38 from"pg";var iO1=8314027461559302n,K38=600000,H38=500;async function pO1($,Z){let{databaseUrl:Q,lockTimeoutMs:Y=K38}=$,X=$.log??((K)=>console.log(K)),J=new W38.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",[iO1.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 O$(H38)}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)",[iO1.toString()])}catch{}await J.end().catch(()=>{})}}X$();M_0();k6();function WW8(){let $=(process.env.BUN_OPTIONS??"").split(/\s+/).filter(Boolean);return[...process.argv.slice(1),...$]}function m_0($,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 kL1(){let $=WW8();if($.includes("--cpu-prof")){console.log(JSON.stringify({msg:"cpu-profiling-active",dir:m_0($,"--cpu-prof-dir")??process.cwd(),name:m_0($,"--cpu-prof-name"),markdown:$.includes("--cpu-prof-md"),intervalUs:Number(m_0($,"--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.'}))}p_0();var U50;function gL1(){if(process.env.HEAP_WATCH!=="1")return()=>{};let $=Number(process.env.HEAP_WATCH_INTERVAL_MS??60000),Z=async()=>{let Q=Bz();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(()=>{}),U50=setInterval(()=>void Z().catch(()=>{}),$),U50.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(U50)clearInterval(U50)}}import*as FW8 from"bun:jsc";var{startSamplingProfiler:UW8,samplingProfilerStackTraces:NW8}=FW8;function hL1(){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{UW8()}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=NW8()?.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 uL1(){kL1();let $=[gL1(),yL1(),hL1()];return()=>{for(let Z of $)Z()}}import{existsSync as Ca6}from"fs";var KG=E0();ML1();var{DBOS:r60,DBOSClient:Ra6}=await import("@dbos-inc/dbos-sdk");function fO1($,Z){if(!Z)return $;let Q=new URL($);if(!Q.searchParams.has("sslmode"))Q.searchParams.set("sslmode","verify-full");return Q.toString()}var qa6=[v3,_3,MN,IN,qO,Fz],Ma6=KG.dispatchRole==="worker"?qa6:KG.dispatchRole==="api"?[]:void 0;r60.setConfig(dO1({systemDatabaseUrl:fO1(KG.databaseUrl,KG.databasePgSsl),poolSize:KG.dbosPoolSize,executorID:KG.podName,listenQueues:Ma6}));var{createApp:Ia6}=await Promise.resolve().then(() => (CG8(),SG8)),{isServerPath:Va6}=await Promise.resolve().then(() => (K50(),HL1)),{createAssetHandler:ka6,resolveClientDir:tG8}=await Promise.resolve().then(() => (fG8(),xG8)),Sa6=KG.port,dG8=tG8(import.meta.url,"../client"),oG8=Ca6(dG8)?dG8:tG8(import.meta.url,"../dist/client"),_a6=ka6({clientDir:oG8,isServerPath:Va6}),va6={"X-Frame-Options":"DENY","Content-Security-Policy":"frame-ancestors 'none'"};function ba6($){let Z=new Headers($.headers);for(let[Q,Y]of Object.entries(va6))Z.set(Q,Y);return new Response($.body,{status:$.status,statusText:$.statusText,headers:Z})}var{parsePreviewBaseDomain:xa6,tryHandlePreviewHttp:fa6,tryUpgradePreviewWs:ya6,previewWebSocketHandler:CO1,isPreviewWsData:_O1}=await Promise.resolve().then(() => (gG8(),yG8)),{getOrInitSharedRunner:rG8}=await Promise.resolve().then(() => (yW(),vR$)),sG8=xa6(process.env.STUDIO_SANDBOX_PREVIEW_URL_PATTERN),iG8={baseDomain:sG8??"",getRunner:rG8};if(process.env.STUDIO_SANDBOX_TENANT_POOLS?.trim())rG8().catch(($)=>{console.warn("[lifecycle] eager sandbox provider init for tenant pools failed:",$ instanceof Error?$.message:String($))});var L_0=await Ia6({clientDir:oG8}),vO1=process.env.DBOS_CONDUCTOR_KEY?.trim(),pG8=process.env.DBOS_CONDUCTOR_URL?.trim();await pO1({databaseUrl:fO1(KG.databaseUrl,KG.databasePgSsl)},()=>r60.launch({...vO1?{conductorKey:vO1}:{},...vO1&&pG8?{conductorURL:pG8}:{}}));console.log(`[dbos] application version: ${r60.applicationVersion}`);var bO1=5,xO1=0;await E8(async()=>{xO1++;try{return await L_0.initDbos()}catch($){let Z=xO1>=bO1?"giving up":"retrying";throw console.warn(`[dbos] initDbos attempt ${xO1}/${bO1} failed, ${Z}`,$),$}},{maxAttempts:bO1,minTimeout:1000,maxTimeout:1e4,jitter:0.5});if(!KG.isCli){let{bannerLines:$}=await Promise.resolve().then(() => (mG8(),cG8));console.log("");for(let Z of $())console.log(Z)}var ga6=Bun.serve({idleTimeout:0,port:Sa6,hostname:"0.0.0.0",fetch:async($,Z)=>{if(sG8){let Y=await ya6($,Z,iG8);if(Y===void 0)return;if(Y)return Y;let X=await fa6($,iG8);if(X)return X}let Q=await _a6($);if(Q)return ba6(Q);return L_0.fetch($,{server:Z})},websocket:{open($){if(_O1($.data))CO1.open($)},message($,Z){if(_O1($.data))CO1.message($,Z)},close($){if(_O1($.data))CO1.close($)}},development:!1}),ha6=uL1();if(KG.localMode)Promise.resolve().then(() => (uf(),_q0)).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(() => (uf(),_q0));Z()}catch{}});var nG8=!1;async function ua6($){let Z;try{Z=await Ra6.create({systemDatabaseUrl:fO1(KG.databaseUrl,KG.databasePgSsl),systemDatabaseSchemaName:"dbos"});let Q=await Z.listWorkflows({status:"PENDING",queueName:_3,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:_3}),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 w_0($){if(nG8)return;nG8=!0,console.log(`
3778
3778
  [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{ha6(),L_0.markShuttingDown();let J=tO1(KG.dispatchRole,Q,process.env.SHUTDOWN_DRAIN_MS);await O$(J),await ga6.stop(!0);let G=r60.executorID;await r60.shutdown(),await ua6(G),await L_0.shutdown()}catch(J){console.error("[shutdown] Error during shutdown:",J),X=1}clearTimeout(Y),process.exit(X)}process.on("SIGTERM",()=>w_0("SIGTERM"));process.on("SIGINT",()=>w_0("SIGINT"));process.on("SIGHUP",()=>w_0("SIGHUP"));process.on("unhandledRejection",($)=>{console.error("[process] Unhandled rejection:",$)});process.on("uncaughtException",($)=>{console.error("[process] Uncaught exception:",$),w_0("uncaughtException")});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "decocms",
3
- "version": "4.439.0",
3
+ "version": "4.440.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-DiCP27dD.js";import{C as f}from"./index-BG-txml-.js";import{a as x}from"./thread-route-DTtV9-z7.js";import{u as g}from"./use-task-metadata-Ci4ti26B.js";import{AppViewContent as h}from"./project-app-view-mzT7jr0l.js";import"./use-mobile-pQqIDSFe.js";import"./thread-button-DUMd6Gl5.js";import"./agent-icon-MUEfToW1.js";import"./AlertCircle-DNh15odk.js";import"./Tool01-BOjbFJCz.js";import"./ArrowUp-6P5DjR1t.js";import"./ArrowLeft-Cqg3j8St.js";import"./LinkBroken01-gwFdcT6K.js";import"./ShoppingBag01-DodmZnt4.js";import"./ZoomOut-CHBfhru9.js";import"./Palette-DjIClyYF.js";import"./CheckCircle-rjwyzOFk.js";import"./Check-D-yzmwYn.js";import"./ChevronUp-D60SP3XH.js";import"./UserSquare-DQSzlDyj.js";import"./Copy01-CB0oESJQ.js";import"./CreditCard01-D5kRRYiA.js";import"./DotsVertical-JQQSHvl4.js";import"./Image01-D5rleQuB.js";import"./XClose-cblogra0.js";import"./Key01-k7QWuZZQ.js";import"./Link01-Cw5nVzWM.js";import"./LinkExternal01-DY6YFto3.js";import"./Monitor01-CwcZK9j8.js";import"./Sun-BlPxF05z.js";import"./Plus-B2OSMT7h.js";import"./SearchMd-zLAR-XV2.js";import"./Trash01-XL5_ynxe.js";import"./Upload01-BgnfyY39.js";import"./User01-BmSpscpo.js";import"./Users01-Cu0IOT-O.js";import"./X-BRJDCcj9.js";import"./use-chat-layout-state-CT7zBoif.js";import"./use-file-configs-qerNjBlD.js";import"./use-organization-settings-Bj01eknb.js";import"./schema-uULRlMFx.js";import"./task-board-Bsy8g6jg.js";import"./site-slug-DebpOoQq.js";import"./use-panel-navigate-DSCpdSlE.js";import"./use-project-scope-CtBx9mRG.js";import"./repository-binding-7uLkPgTO.js";import"./use-mcp-client-B2MWBaco.js";import"./auth-CtKUYryj.js";import"./thread-intent-BUoHTmSs.js";import"./backoff-8mStPHYB.js";import"./slugify-CEUa2lfQ.js";import"./sheet-B-78DEn-.js";import"./tooltip-Tr2HPvjQ.js";import"./index-CHuCYD81.js";import"./toolbar-icon-button-D6XJE-fW.js";import"./shell-layout-BqGUI9qq.js";import"./avatar-ay32d7Rq.js";import"./download-app-dialog-B78Xzwoc.js";import"./dialog-mikl7FPK.js";import"./command-CIkNvcpT.js";import"./index-CFlrgMgL.js";import"./integration-icon-Bao5FeG3.js";import"./project-icon-Big-MTDO.js";import"./new-project-dialog-BB20uiKn.js";import"./input-BVeDaXAt.js";import"./label-D7xsLlpE.js";import"./repository-import-picker-CJLnodOL.js";import"./use-navigate-to-agent-DsFIew61.js";import"./repository-picker-BEisb5wQ.js";import"./useInfiniteQuery-VJ_kzi-a.js";import"./infiniteQueryObserver-CyHZuz-2.js";import"./collection-search-DF-hol44.js";import"./use-debounced-value-C3sc6opm.js";import"./use-is-desktop-app-BNujXJc_.js";import"./required-auth-layout-BYkqQs2_.js";import"./autosend-Cm6PSWmI.js";import"./use-org-sso-DEPHrl0A.js";import"./resizable-BsCV6tK2.js";import"./icon-button-DpSb8Egz.js";import"./gateway-client-CO0DTYhc.js";import"./tool-namespace-DmnQIdtF.js";import"./use-mcp-tools-BGTSgzQD.js";import"./sandbox-lifecycle-context-BAJMUPhe.js";import"./use-session-runtime-_LaLKVsW.js";import"./chat-context-BME83pNr.js";import"./use-decopilot-events-CrIzSMHr.js";import"./use-ai-providers-B_f1rQjj.js";import"./location-DPIrGNp7.js";import"./sandbox-url-D3mC8qhT.js";import"./sandbox-start-errors-BK_aDCyt.js";import"./content-blocks-o63cs2vh.js";import"./mcp-app-renderer-CQvBXjgY.js";import"./types-DCGsxM-a.js";import"./task-route-DvSaC1w6.js";import"./site-url-en5df9c-.js";import"./use-connect-companion-CfMsP3Rn.js";import"./companions-core-DzyeM-yJ.js";import"./metadata-D72DunRR.js";import"./github-repo-scope-ByTYKy_L.js";import"./form-DFhKgLoW.js";import"./provision-repo-scoped-github-connection-lckxpDHD.js";import"./useQueries-B-98FYC1.js";import"./authenticate-and-persist-oauth-B2kuZKVb.js";import"./mcp-oauth-BXj3mNzg.js";import"./track-DL1FzN4e.js";import"./extract-connection-data-D8uzEbgz.js";import"./connection-DfFT6zSi.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 Ao(){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{Ao as default};
@@ -1 +0,0 @@
1
- import{c,j as p,aS as b,u as g}from"./index-DiCP27dD.js";import{C as j}from"./index-BG-txml-.js";import{F as v,H as S}from"./file-share-button-BcBUJOwa.js";import{u as k,b as y,e as _}from"./use-org-fs-CVraJ6yz.js";import{S as w}from"./settings-tab-Bre5HiIa.js";import{b as M}from"./thread-route-DTtV9-z7.js";import"./use-mobile-pQqIDSFe.js";import"./thread-button-DUMd6Gl5.js";import"./agent-icon-MUEfToW1.js";import"./AlertCircle-DNh15odk.js";import"./Tool01-BOjbFJCz.js";import"./ArrowUp-6P5DjR1t.js";import"./ArrowLeft-Cqg3j8St.js";import"./LinkBroken01-gwFdcT6K.js";import"./ShoppingBag01-DodmZnt4.js";import"./ZoomOut-CHBfhru9.js";import"./Palette-DjIClyYF.js";import"./CheckCircle-rjwyzOFk.js";import"./Check-D-yzmwYn.js";import"./ChevronUp-D60SP3XH.js";import"./UserSquare-DQSzlDyj.js";import"./Copy01-CB0oESJQ.js";import"./CreditCard01-D5kRRYiA.js";import"./DotsVertical-JQQSHvl4.js";import"./Image01-D5rleQuB.js";import"./XClose-cblogra0.js";import"./Key01-k7QWuZZQ.js";import"./Link01-Cw5nVzWM.js";import"./LinkExternal01-DY6YFto3.js";import"./Monitor01-CwcZK9j8.js";import"./Sun-BlPxF05z.js";import"./Plus-B2OSMT7h.js";import"./SearchMd-zLAR-XV2.js";import"./Trash01-XL5_ynxe.js";import"./Upload01-BgnfyY39.js";import"./User01-BmSpscpo.js";import"./Users01-Cu0IOT-O.js";import"./X-BRJDCcj9.js";import"./use-chat-layout-state-CT7zBoif.js";import"./use-file-configs-qerNjBlD.js";import"./use-organization-settings-Bj01eknb.js";import"./schema-uULRlMFx.js";import"./task-board-Bsy8g6jg.js";import"./site-slug-DebpOoQq.js";import"./use-panel-navigate-DSCpdSlE.js";import"./use-project-scope-CtBx9mRG.js";import"./repository-binding-7uLkPgTO.js";import"./use-mcp-client-B2MWBaco.js";import"./auth-CtKUYryj.js";import"./thread-intent-BUoHTmSs.js";import"./backoff-8mStPHYB.js";import"./slugify-CEUa2lfQ.js";import"./sheet-B-78DEn-.js";import"./tooltip-Tr2HPvjQ.js";import"./index-CHuCYD81.js";import"./toolbar-icon-button-D6XJE-fW.js";import"./shell-layout-BqGUI9qq.js";import"./avatar-ay32d7Rq.js";import"./download-app-dialog-B78Xzwoc.js";import"./dialog-mikl7FPK.js";import"./command-CIkNvcpT.js";import"./index-CFlrgMgL.js";import"./integration-icon-Bao5FeG3.js";import"./project-icon-Big-MTDO.js";import"./new-project-dialog-BB20uiKn.js";import"./input-BVeDaXAt.js";import"./label-D7xsLlpE.js";import"./repository-import-picker-CJLnodOL.js";import"./use-navigate-to-agent-DsFIew61.js";import"./repository-picker-BEisb5wQ.js";import"./useInfiniteQuery-VJ_kzi-a.js";import"./infiniteQueryObserver-CyHZuz-2.js";import"./collection-search-DF-hol44.js";import"./use-debounced-value-C3sc6opm.js";import"./use-is-desktop-app-BNujXJc_.js";import"./required-auth-layout-BYkqQs2_.js";import"./autosend-Cm6PSWmI.js";import"./use-org-sso-DEPHrl0A.js";import"./resizable-BsCV6tK2.js";import"./icon-button-DpSb8Egz.js";import"./popover-DCTrph_D.js";import"./extract-connection-data-D8uzEbgz.js";import"./metadata-D72DunRR.js";import"./connection-DfFT6zSi.js";import"./chat-context-BME83pNr.js";import"./use-decopilot-events-CrIzSMHr.js";import"./use-ai-providers-B_f1rQjj.js";import"./location-DPIrGNp7.js";import"./build-improve-prompt-doc-CIPlVAj1.js";import"./empty-state-C3HLisyP.js";import"./use-date-fns-locale-1j3nOfJv.js";import"./differenceInSeconds-C3x8sHUj.js";import"./use-connection-DLt6R4bi.js";import"./mcp-oauth-BXj3mNzg.js";import"./alert-dialog-DMpR0cgA.js";import"./textarea-BTYU6whs.js";import"./use-debounced-autosave-Yt6HWq-D.js";import"./add-connection-dialog-BdGkf6fb.js";import"./connection-card-Cjr4qV1f.js";import"./connection-slug-CITJ0kGN.js";import"./drawer-D3v6_JsP.js";import"./form-DFhKgLoW.js";import"./select-XfsDki64.js";import"./connection-form-helpers-D0VuujW_.js";import"./authenticate-and-persist-oauth-B2kuZKVb.js";import"./collection-tabs-BpMesivQ.js";import"./badge-BI-lLKoq.js";import"./use-infinite-scroll-dYJQUb5x.js";import"./useSuspenseInfiniteQuery-Bw_5F2ui.js";import"./file-type-icon-BiPcxDCh.js";import"./checkbox-C_fcJ23Z.js";import"./search-input-BD1KUApf.js";import"./use-mcp-auth-status-jUIuYcXR.js";import"./types-DCGsxM-a.js";import"./use-mcp-tools-BGTSgzQD.js";import"./use-mcp-prompts-B3G5Db0n.js";import"./utils-CVEq3hMx.js";import"./switch-q3W9ZKax.js";import"./scroll-area-DVyEm7OM.js";import"./optimistic-project-sidebar-views-CnvB9J-O.js";import"./virtual-mcp-BC5Jfihj.js";import"./sandbox-url-D3mC8qhT.js";import"./secret-picker-BhFpEdB6.js";import"./use-secrets-C9609GG4.js";import"./omit-sandbox-map-jj4lCB2U.js";import"./serial-task-queue-CGOeQgpr.js";const x="home";function P(i){const t=c.c(5),{label:r}=i;let 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(P,{label:h}),t[1]=h,t[2]=l):l=t[2],l}let s;t[3]!==o.data?(s=_(o.data),t[3]=o.data,t[4]=s):s=t[4];const f=o.data.shareMode??"private",u=o.data.effectivePublic??!1,d=window.location.origin+m;let a;t[5]!==r||t[6]!==f||t[7]!==u||t[8]!==d?(a=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=M(),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(w,{virtualMcpId:e}),i[1]=o,i[2]=e,i[3]=m):m=i[3],m}function Ko(){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{Ko as default};
@@ -1 +0,0 @@
1
- import{c as s,j as e}from"./index-DiCP27dD.js";import{C as a}from"./index-BG-txml-.js";import{p as n,L as c}from"./library-tab-CHLyyHog.js";import{u as l}from"./use-project-scope-CtBx9mRG.js";import"./use-mobile-pQqIDSFe.js";import"./thread-button-DUMd6Gl5.js";import"./agent-icon-MUEfToW1.js";import"./AlertCircle-DNh15odk.js";import"./Tool01-BOjbFJCz.js";import"./ArrowUp-6P5DjR1t.js";import"./ArrowLeft-Cqg3j8St.js";import"./LinkBroken01-gwFdcT6K.js";import"./ShoppingBag01-DodmZnt4.js";import"./ZoomOut-CHBfhru9.js";import"./Palette-DjIClyYF.js";import"./CheckCircle-rjwyzOFk.js";import"./Check-D-yzmwYn.js";import"./ChevronUp-D60SP3XH.js";import"./UserSquare-DQSzlDyj.js";import"./Copy01-CB0oESJQ.js";import"./CreditCard01-D5kRRYiA.js";import"./DotsVertical-JQQSHvl4.js";import"./Image01-D5rleQuB.js";import"./XClose-cblogra0.js";import"./Key01-k7QWuZZQ.js";import"./Link01-Cw5nVzWM.js";import"./LinkExternal01-DY6YFto3.js";import"./Monitor01-CwcZK9j8.js";import"./Sun-BlPxF05z.js";import"./Plus-B2OSMT7h.js";import"./SearchMd-zLAR-XV2.js";import"./Trash01-XL5_ynxe.js";import"./Upload01-BgnfyY39.js";import"./User01-BmSpscpo.js";import"./Users01-Cu0IOT-O.js";import"./X-BRJDCcj9.js";import"./use-chat-layout-state-CT7zBoif.js";import"./use-file-configs-qerNjBlD.js";import"./use-organization-settings-Bj01eknb.js";import"./schema-uULRlMFx.js";import"./task-board-Bsy8g6jg.js";import"./site-slug-DebpOoQq.js";import"./thread-route-DTtV9-z7.js";import"./use-panel-navigate-DSCpdSlE.js";import"./thread-intent-BUoHTmSs.js";import"./use-mcp-client-B2MWBaco.js";import"./auth-CtKUYryj.js";import"./backoff-8mStPHYB.js";import"./slugify-CEUa2lfQ.js";import"./sheet-B-78DEn-.js";import"./tooltip-Tr2HPvjQ.js";import"./index-CHuCYD81.js";import"./toolbar-icon-button-D6XJE-fW.js";import"./shell-layout-BqGUI9qq.js";import"./avatar-ay32d7Rq.js";import"./download-app-dialog-B78Xzwoc.js";import"./dialog-mikl7FPK.js";import"./command-CIkNvcpT.js";import"./index-CFlrgMgL.js";import"./integration-icon-Bao5FeG3.js";import"./project-icon-Big-MTDO.js";import"./new-project-dialog-BB20uiKn.js";import"./input-BVeDaXAt.js";import"./label-D7xsLlpE.js";import"./repository-import-picker-CJLnodOL.js";import"./use-navigate-to-agent-DsFIew61.js";import"./repository-binding-7uLkPgTO.js";import"./repository-picker-BEisb5wQ.js";import"./useInfiniteQuery-VJ_kzi-a.js";import"./infiniteQueryObserver-CyHZuz-2.js";import"./collection-search-DF-hol44.js";import"./use-debounced-value-C3sc6opm.js";import"./use-is-desktop-app-BNujXJc_.js";import"./required-auth-layout-BYkqQs2_.js";import"./autosend-Cm6PSWmI.js";import"./use-org-sso-DEPHrl0A.js";import"./resizable-BsCV6tK2.js";import"./icon-button-DpSb8Egz.js";import"./search-toggle-M1mnWjNp.js";import"./alert-dialog-DMpR0cgA.js";import"./location-DPIrGNp7.js";import"./use-org-fs-CVraJ6yz.js";import"./use-org-repo-syncs-CjTrRQU6.js";import"./textarea-BTYU6whs.js";import"./markdown-bwKekgUZ.js";import"./org-file-open-context-D7lCLqWP.js";import"./file-share-button-BcBUJOwa.js";import"./popover-DCTrph_D.js";import"./preview-dialog-v-YYOVPl.js";import"./preview-content-Hk3IWI9Q.js";import"./file-preview-BA4pWn9n.js";import"./utils-DqphBcT3.js";import"./editor-D8tpvF9d.js";import"./file-type-icon-BiPcxDCh.js";import"./folder-icon-A-avv35D.js";import"./skill-md-ChfVs4uF.js";import"./format-time-CjIPQhCN.js";import"./differenceInSeconds-C3x8sHUj.js";import"./table-DP3ml4By.js";function io(){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{io as default};
@@ -1 +0,0 @@
1
- import{c as a,j as s,u as n}from"./index-DiCP27dD.js";import{C as l}from"./index-BG-txml-.js";import{L as c}from"./preview-content-Hk3IWI9Q.js";import{a as f}from"./use-panel-navigate-DSCpdSlE.js";import{S as u}from"./settings-tab-Bre5HiIa.js";import{b as h}from"./thread-route-DTtV9-z7.js";import"./use-mobile-pQqIDSFe.js";import"./thread-button-DUMd6Gl5.js";import"./agent-icon-MUEfToW1.js";import"./AlertCircle-DNh15odk.js";import"./Tool01-BOjbFJCz.js";import"./ArrowUp-6P5DjR1t.js";import"./ArrowLeft-Cqg3j8St.js";import"./LinkBroken01-gwFdcT6K.js";import"./ShoppingBag01-DodmZnt4.js";import"./ZoomOut-CHBfhru9.js";import"./Palette-DjIClyYF.js";import"./CheckCircle-rjwyzOFk.js";import"./Check-D-yzmwYn.js";import"./ChevronUp-D60SP3XH.js";import"./UserSquare-DQSzlDyj.js";import"./Copy01-CB0oESJQ.js";import"./CreditCard01-D5kRRYiA.js";import"./DotsVertical-JQQSHvl4.js";import"./Image01-D5rleQuB.js";import"./XClose-cblogra0.js";import"./Key01-k7QWuZZQ.js";import"./Link01-Cw5nVzWM.js";import"./LinkExternal01-DY6YFto3.js";import"./Monitor01-CwcZK9j8.js";import"./Sun-BlPxF05z.js";import"./Plus-B2OSMT7h.js";import"./SearchMd-zLAR-XV2.js";import"./Trash01-XL5_ynxe.js";import"./Upload01-BgnfyY39.js";import"./User01-BmSpscpo.js";import"./Users01-Cu0IOT-O.js";import"./X-BRJDCcj9.js";import"./use-chat-layout-state-CT7zBoif.js";import"./use-file-configs-qerNjBlD.js";import"./use-organization-settings-Bj01eknb.js";import"./schema-uULRlMFx.js";import"./task-board-Bsy8g6jg.js";import"./site-slug-DebpOoQq.js";import"./thread-intent-BUoHTmSs.js";import"./use-mcp-client-B2MWBaco.js";import"./auth-CtKUYryj.js";import"./backoff-8mStPHYB.js";import"./slugify-CEUa2lfQ.js";import"./use-project-scope-CtBx9mRG.js";import"./repository-binding-7uLkPgTO.js";import"./sheet-B-78DEn-.js";import"./tooltip-Tr2HPvjQ.js";import"./index-CHuCYD81.js";import"./toolbar-icon-button-D6XJE-fW.js";import"./shell-layout-BqGUI9qq.js";import"./avatar-ay32d7Rq.js";import"./download-app-dialog-B78Xzwoc.js";import"./dialog-mikl7FPK.js";import"./command-CIkNvcpT.js";import"./index-CFlrgMgL.js";import"./integration-icon-Bao5FeG3.js";import"./project-icon-Big-MTDO.js";import"./new-project-dialog-BB20uiKn.js";import"./input-BVeDaXAt.js";import"./label-D7xsLlpE.js";import"./repository-import-picker-CJLnodOL.js";import"./use-navigate-to-agent-DsFIew61.js";import"./repository-picker-BEisb5wQ.js";import"./useInfiniteQuery-VJ_kzi-a.js";import"./infiniteQueryObserver-CyHZuz-2.js";import"./collection-search-DF-hol44.js";import"./use-debounced-value-C3sc6opm.js";import"./use-is-desktop-app-BNujXJc_.js";import"./required-auth-layout-BYkqQs2_.js";import"./autosend-Cm6PSWmI.js";import"./use-org-sso-DEPHrl0A.js";import"./resizable-BsCV6tK2.js";import"./icon-button-DpSb8Egz.js";import"./file-preview-BA4pWn9n.js";import"./use-org-fs-CVraJ6yz.js";import"./utils-DqphBcT3.js";import"./editor-D8tpvF9d.js";import"./file-type-icon-BiPcxDCh.js";import"./markdown-bwKekgUZ.js";import"./location-DPIrGNp7.js";import"./org-file-open-context-D7lCLqWP.js";import"./file-share-button-BcBUJOwa.js";import"./popover-DCTrph_D.js";import"./extract-connection-data-D8uzEbgz.js";import"./metadata-D72DunRR.js";import"./connection-DfFT6zSi.js";import"./chat-context-BME83pNr.js";import"./use-decopilot-events-CrIzSMHr.js";import"./use-ai-providers-B_f1rQjj.js";import"./build-improve-prompt-doc-CIPlVAj1.js";import"./empty-state-C3HLisyP.js";import"./use-date-fns-locale-1j3nOfJv.js";import"./differenceInSeconds-C3x8sHUj.js";import"./use-connection-DLt6R4bi.js";import"./mcp-oauth-BXj3mNzg.js";import"./alert-dialog-DMpR0cgA.js";import"./textarea-BTYU6whs.js";import"./use-debounced-autosave-Yt6HWq-D.js";import"./add-connection-dialog-BdGkf6fb.js";import"./connection-card-Cjr4qV1f.js";import"./connection-slug-CITJ0kGN.js";import"./drawer-D3v6_JsP.js";import"./form-DFhKgLoW.js";import"./select-XfsDki64.js";import"./connection-form-helpers-D0VuujW_.js";import"./authenticate-and-persist-oauth-B2kuZKVb.js";import"./collection-tabs-BpMesivQ.js";import"./badge-BI-lLKoq.js";import"./use-infinite-scroll-dYJQUb5x.js";import"./useSuspenseInfiniteQuery-Bw_5F2ui.js";import"./checkbox-C_fcJ23Z.js";import"./search-input-BD1KUApf.js";import"./use-mcp-auth-status-jUIuYcXR.js";import"./types-DCGsxM-a.js";import"./use-mcp-tools-BGTSgzQD.js";import"./use-mcp-prompts-B3G5Db0n.js";import"./utils-CVEq3hMx.js";import"./switch-q3W9ZKax.js";import"./scroll-area-DVyEm7OM.js";import"./optimistic-project-sidebar-views-CnvB9J-O.js";import"./virtual-mcp-BC5Jfihj.js";import"./sandbox-url-D3mC8qhT.js";import"./secret-picker-BhFpEdB6.js";import"./use-secrets-C9609GG4.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 Dr(){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{Dr as default};