decocms 4.538.1 → 4.539.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 (397) hide show
  1. package/dist/client/assets/{ActiveShapeUtils-CFnSXQrP.js → ActiveShapeUtils-BDUmkFYS.js} +1 -1
  2. package/dist/client/assets/{AlertCircle-Ds_2WhXL.js → AlertCircle-BNC3Ncf7.js} +1 -1
  3. package/dist/client/assets/{AreaChart-nWCoaPwi.js → AreaChart-C4QOUn70.js} +1 -1
  4. package/dist/client/assets/{ArrowLeft-GaJGcGPr.js → ArrowLeft-DSfQsYgJ.js} +1 -1
  5. package/dist/client/assets/{ArrowUp-Ve1cK4qn.js → ArrowUp-CSc_Tdqb.js} +1 -1
  6. package/dist/client/assets/{BarChart-Dcp2-buy.js → BarChart-Cb9KgXbt.js} +1 -1
  7. package/dist/client/assets/{Building02-Cf4X-d51.js → Building02-Cn2tQJnv.js} +1 -1
  8. package/dist/client/assets/{CartesianChart-DBuztnGc.js → CartesianChart-gkklXbpG.js} +1 -1
  9. package/dist/client/assets/{CategoricalChart-BmgZ7uPj.js → CategoricalChart-CC0BCPZV.js} +1 -1
  10. package/dist/client/assets/{CheckCircle-D7olxQBc.js → CheckCircle-CeehyyfU.js} +1 -1
  11. package/dist/client/assets/{ChevronSelectorVertical-ByzlNFqX.js → ChevronSelectorVertical-D1XQchTX.js} +1 -1
  12. package/dist/client/assets/{ChevronUp-zgLSJo7N.js → ChevronUp-Cvi5Ri1X.js} +1 -1
  13. package/dist/client/assets/{Copy01-BzoMFIdk.js → Copy01-CH_2hZDS.js} +1 -1
  14. package/dist/client/assets/{CreditCard01-DqirQppZ.js → CreditCard01-Cn3zS3gY.js} +1 -1
  15. package/dist/client/assets/{DotsVertical-DkVpKTIv.js → DotsVertical-DniMDeeL.js} +1 -1
  16. package/dist/client/assets/{ErrorBarContext-vyTaVMu4.js → ErrorBarContext-CSeq7Tol.js} +1 -1
  17. package/dist/client/assets/{Globe04-CkFRv0Y2.js → Globe04-BIRXqM09.js} +1 -1
  18. package/dist/client/assets/{Image01-DqO4SvqB.js → Image01-DNMg6qgq.js} +1 -1
  19. package/dist/client/assets/{Key01-DWe6k94t.js → Key01-CYO-VVE0.js} +1 -1
  20. package/dist/client/assets/{Link01-3o9Elk03.js → Link01-CF8fcW9w.js} +1 -1
  21. package/dist/client/assets/{LinkBroken01-DRUa5XT1.js → LinkBroken01-D8qYefsX.js} +1 -1
  22. package/dist/client/assets/{Minus-kzkj_29B.js → Minus-DwtnPw8f.js} +1 -1
  23. package/dist/client/assets/{Monitor01-is8ZyUQC.js → Monitor01-DnG7mfvQ.js} +1 -1
  24. package/dist/client/assets/{Play-CjXmtBKS.js → Play-H8L3UHLo.js} +1 -1
  25. package/dist/client/assets/{Plus-DCMQMI-9.js → Plus-DpKYZahY.js} +1 -1
  26. package/dist/client/assets/{ReferenceLine-BJ-vDTSh.js → ReferenceLine-BKlSv2sh.js} +1 -1
  27. package/dist/client/assets/{SearchMd-BPcibh2b.js → SearchMd-DEGTr-sj.js} +1 -1
  28. package/dist/client/assets/{Sector-BBrsL2eG.js → Sector-D9d9OYkn.js} +1 -1
  29. package/dist/client/assets/{ShoppingBag01-Bqi9yZ2c.js → ShoppingBag01-BeE3fDG1.js} +1 -1
  30. package/dist/client/assets/{Sun-ChTfaRFO.js → Sun-D6e346Yx.js} +1 -1
  31. package/dist/client/assets/{SwitchHorizontal01-vlFzntYK.js → SwitchHorizontal01-D1SbwE-4.js} +1 -1
  32. package/dist/client/assets/{Tool01-D_DzUkH6.js → Tool01-DlRbIajK.js} +1 -1
  33. package/dist/client/assets/{Trash01-D5WxxfhG.js → Trash01-BFvvA8Ru.js} +1 -1
  34. package/dist/client/assets/{Upload01-CCpxUc0U.js → Upload01-Crxkqzoh.js} +1 -1
  35. package/dist/client/assets/{UserSquare-BpdCC6Kq.js → UserSquare-BQlfSW-S.js} +1 -1
  36. package/dist/client/assets/{Users01-BewLilnR.js → Users01-B0uoLuQA.js} +1 -1
  37. package/dist/client/assets/{XClose-CBoBcHI9.js → XClose-Ci0TVCjl.js} +1 -1
  38. package/dist/client/assets/{ZoomOut-UKDGw6yq.js → ZoomOut-CITVxJZc.js} +1 -1
  39. package/dist/client/assets/{access-gate-B5lnrNp3.js → access-gate-CVrkmPuj.js} +1 -1
  40. package/dist/client/assets/{add-connection-dialog-C5Y_DQIe.js → add-connection-dialog-DdXjtVjs.js} +1 -1
  41. package/dist/client/assets/agent-analytics-4Xm59-oe.css +1 -0
  42. package/dist/client/assets/agent-analytics-CtCo1arG.js +2 -0
  43. package/dist/client/assets/agent-app-dXxXMOGx.js +1 -0
  44. package/dist/client/assets/{agent-assets-CjCohDd1.js → agent-assets-CFi3owlp.js} +1 -1
  45. package/dist/client/assets/{agent-automation-Cw1vupSq.js → agent-automation-b7cgl9fw.js} +1 -1
  46. package/dist/client/assets/{agent-automations-DADyH9LU.js → agent-automations-D_KYHQey.js} +1 -1
  47. package/dist/client/assets/{agent-calendar-BpnS1B-Q.js → agent-calendar--TWiL3YK.js} +1 -1
  48. package/dist/client/assets/{agent-connect-sources-BUtEOOEi.js → agent-connect-sources-CSJ0SzB5.js} +1 -1
  49. package/dist/client/assets/agent-deck-DTEk4G8l.js +1 -0
  50. package/dist/client/assets/{agent-e2e-BhriQdAN.js → agent-e2e-WOQonZwq.js} +1 -1
  51. package/dist/client/assets/agent-experiments-4LpWzwgP.js +1 -0
  52. package/dist/client/assets/{agent-file-GsiMJmdT.js → agent-file-CyTKgW2J.js} +1 -1
  53. package/dist/client/assets/{agent-hosting-3IKxPqmX.js → agent-hosting-DjMajm0I.js} +1 -1
  54. package/dist/client/assets/{agent-icon-CXyyqpMa.js → agent-icon-re0J_Z0y.js} +1 -1
  55. package/dist/client/assets/agent-library-BJQPoD5h.js +1 -0
  56. package/dist/client/assets/agent-library-file-CgFDONrs.js +1 -0
  57. package/dist/client/assets/agent-monitor-BOCl24ft.js +1 -0
  58. package/dist/client/assets/{agent-overview-B5PvLXFR.js → agent-overview-Cz2rsDTy.js} +1 -1
  59. package/dist/client/assets/{agent-releases-bMsZ5yQZ.js → agent-releases-DFaBrWje.js} +1 -1
  60. package/dist/client/assets/agent-settings-834uHuns.js +1 -0
  61. package/dist/client/assets/{agent-site-editor-DN3KRvIk.js → agent-site-editor-CkqQf5fs.js} +1 -1
  62. package/dist/client/assets/agent-site-editor-code-C2ZmfiF6.js +2 -0
  63. package/dist/client/assets/agent-site-editor-content-Cem_LSs2.js +1 -0
  64. package/dist/client/assets/agent-site-editor-preview-DGAJoBZS.js +1 -0
  65. package/dist/client/assets/agent-view-CmuvsavZ.js +1 -0
  66. package/dist/client/assets/{agent-view-guard-z90QrYwh.js → agent-view-guard-kIKOX6BM.js} +1 -1
  67. package/dist/client/assets/{agents-list-DSXkyPRk.js → agents-list-CiRE_PNy.js} +1 -1
  68. package/dist/client/assets/{ai-providers-BbOFlSCp.js → ai-providers-kgKCYsvQ.js} +1 -1
  69. package/dist/client/assets/{alert-DtgstSU8.js → alert-Ba8eZibh.js} +1 -1
  70. package/dist/client/assets/{analytics-sections-u74BlDgr.js → analytics-sections-DXc_9zfI.js} +1 -1
  71. package/dist/client/assets/{api-keys-CH40x9b5.js → api-keys-BNbHxtc9.js} +1 -1
  72. package/dist/client/assets/api-keys-DGW6-DKW.js +1 -0
  73. package/dist/client/assets/{app-editor-lpYZsEpK.js → app-editor-DIVOBNbo.js} +1 -1
  74. package/dist/client/assets/{asset-utils-D4yG02dq.js → asset-utils-DhsyUmt2.js} +1 -1
  75. package/dist/client/assets/{auth-BdHhBAFh.js → auth-DOa4-SAf.js} +1 -1
  76. package/dist/client/assets/{auth-catchall-GYBtR3ic.js → auth-catchall-C8C6N51O.js} +1 -1
  77. package/dist/client/assets/{auth-entry-CfOxikcY.js → auth-entry-CJUxeCxG.js} +1 -1
  78. package/dist/client/assets/{auth-split-layout-D4alojNr.js → auth-split-layout-C4-tVKN-.js} +1 -1
  79. package/dist/client/assets/{authenticate-and-persist-oauth-C5KpSVFq.js → authenticate-and-persist-oauth-pxVygBEO.js} +1 -1
  80. package/dist/client/assets/{automation-list-row-CFMhUt1F.js → automation-list-row-BkyX1U-_.js} +1 -1
  81. package/dist/client/assets/{automation-runs-r4ByP7K9.js → automation-runs-452u_rmZ.js} +1 -1
  82. package/dist/client/assets/{automations-CJg1PL_7.js → automations-Beyt1l49.js} +1 -1
  83. package/dist/client/assets/{autosend-BgdlbO_i.js → autosend-DqPNCAG8.js} +1 -1
  84. package/dist/client/assets/{badge-CCN5Ad5E.js → badge-DvLvPjJh.js} +1 -1
  85. package/dist/client/assets/{block-document-BQbDLhhm.js → block-document-CbryNSmS.js} +1 -1
  86. package/dist/client/assets/{blocks-preview-workspace-context-BoGPIYEL.js → blocks-preview-workspace-context-DnDkKCvy.js} +1 -1
  87. package/dist/client/assets/{blocks-tab-states-XuAlkDNG.js → blocks-tab-states-YzekLxOz.js} +1 -1
  88. package/dist/client/assets/{blog-schema-BHUk1mcN.js → blog-schema-xrUnclmp.js} +1 -1
  89. package/dist/client/assets/{buckets-B4G1WogN.js → buckets-BH9RpUz2.js} +1 -1
  90. package/dist/client/assets/{build-improve-prompt-doc-BSYSdSKQ.js → build-improve-prompt-doc-B9uyS2oH.js} +1 -1
  91. package/dist/client/assets/{calendar-DFYFqMKq.js → calendar-B9yUPo0f.js} +1 -1
  92. package/dist/client/assets/{capability-load-error-WlqEME5j.js → capability-load-error-BV4SLtbZ.js} +1 -1
  93. package/dist/client/assets/{category-editor-DH1seDHj.js → category-editor-C3SB1_fo.js} +1 -1
  94. package/dist/client/assets/{cdn-tab-DtA8sFST.js → cdn-tab-C988vDGh.js} +1 -1
  95. package/dist/client/assets/{chart-DBJ0nBTj.js → chart-DT_frMFC.js} +1 -1
  96. package/dist/client/assets/{chat-context-B0QfMtK7.js → chat-context-CY54pZM0.js} +1 -1
  97. package/dist/client/assets/{chat-draft-C2BZw8j7.js → chat-draft-CA_OHfW2.js} +1 -1
  98. package/dist/client/assets/{checkbox-CzFYIYeS.js → checkbox-rRz405E3.js} +1 -1
  99. package/dist/client/assets/{choose-editor-DJ0ZEPVl.js → choose-editor-BESrWSM3.js} +1 -1
  100. package/dist/client/assets/{cli-auth-success-BXfPKx1V.js → cli-auth-success-BGs6LEE6.js} +1 -1
  101. package/dist/client/assets/{client-icons-azojl93a.js → client-icons-CwEc9FbM.js} +1 -1
  102. package/dist/client/assets/{cms-settings-editor-CVlNsR9g.js → cms-settings-editor-BJVmKaza.js} +1 -1
  103. package/dist/client/assets/{collapsible-D7SyoWI6.js → collapsible-CCcQjW3W.js} +1 -1
  104. package/dist/client/assets/{collection-detail-2IiivUXw.js → collection-detail-CxSAobuA.js} +1 -1
  105. package/dist/client/assets/{collection-display-button-BdfHxfK8.js → collection-display-button-BHMhhllV.js} +1 -1
  106. package/dist/client/assets/{collection-search-ZYYfADQw.js → collection-search-D2Tz81E9.js} +1 -1
  107. package/dist/client/assets/{collection-table-wrapper-nUoCOMI0.js → collection-table-wrapper-D3RlCQrV.js} +1 -1
  108. package/dist/client/assets/{collection-tabs-DUT-_32y.js → collection-tabs-Bok9wStk.js} +1 -1
  109. package/dist/client/assets/{column-rules-zsCVfrEU.js → column-rules-DZIwG_I6.js} +1 -1
  110. package/dist/client/assets/{combobox-BcG9kY9H.js → combobox-BP_pyrFc.js} +1 -1
  111. package/dist/client/assets/{command-DMjv9UCp.js → command-BzGEMEWU.js} +1 -1
  112. package/dist/client/assets/{companion-mcps-section-BbQDgg34.js → companion-mcps-section-DlcDMLTP.js} +1 -1
  113. package/dist/client/assets/{config-BRQKyTF3.js → config-CAPCGzxo.js} +1 -1
  114. package/dist/client/assets/{connect-PJXKtBkj.js → connect-Bw2OlWW5.js} +1 -1
  115. package/dist/client/assets/{connect-layout-CdIOrnnB.js → connect-layout-jtfqin0H.js} +1 -1
  116. package/dist/client/assets/{connect-source-dialog-wB_CpMH5.js → connect-source-dialog-DDyQ-C_T.js} +1 -1
  117. package/dist/client/assets/{connection-Co5j8iMf.js → connection-Scxq7jNT.js} +1 -1
  118. package/dist/client/assets/{connection-card-C0W4Y5E8.js → connection-card-3MM4lst1.js} +1 -1
  119. package/dist/client/assets/{connection-detail-CndRUN2P.js → connection-detail-BlBaRQrN.js} +1 -1
  120. package/dist/client/assets/{connection-form-helpers-Dz9M5mpv.js → connection-form-helpers-B7-ufErn.js} +1 -1
  121. package/dist/client/assets/{connections-CyFz6dcc.js → connections-poEou0Yo.js} +1 -1
  122. package/dist/client/assets/{content-tab-YfBULH2U.js → content-tab-DN9GdN3G.js} +3 -3
  123. package/dist/client/assets/{context-CyZYwDX8.js → context-DZj9KGti.js} +1 -1
  124. package/dist/client/assets/{context-menu-BR-HLcTM.js → context-menu-BIBIcW5A.js} +1 -1
  125. package/dist/client/assets/{context-shell-v5YxJs4X.js → context-shell-CHWwZnIs.js} +3 -3
  126. package/dist/client/assets/{core.esm-CJau0VZ_.js → core.esm-DBjf08pl.js} +1 -1
  127. package/dist/client/assets/{create-organization-dialog-D3uDt-mS.js → create-organization-dialog-DpGPLPAf.js} +1 -1
  128. package/dist/client/assets/{daily-pulse-CEYtilUl.js → daily-pulse-B2Ki-uF7.js} +1 -1
  129. package/dist/client/assets/{discover-Dt5UzKit.js → discover-Cu3GCp7S.js} +1 -1
  130. package/dist/client/assets/{domain-settings-Vd91cRuZ.js → domain-settings-6v5t4Siq.js} +1 -1
  131. package/dist/client/assets/{drawer-DVDEynMl.js → drawer-BnzahE0M.js} +1 -1
  132. package/dist/client/assets/{editor-BPHWgsFO.js → editor-Cxo0boMA.js} +1 -1
  133. package/dist/client/assets/{editor-classes-DO0eVExg.js → editor-classes-C0STg0vW.js} +1 -1
  134. package/dist/client/assets/{empty-state-C98_cQun.js → empty-state-C96iJc6R.js} +1 -1
  135. package/dist/client/assets/{empty-state-6fA1LS5m.js → empty-state-Dv2-C-QD.js} +1 -1
  136. package/dist/client/assets/{experiments-tab-CVhWHQz6.js → experiments-tab-1WD9vOOs.js} +1 -1
  137. package/dist/client/assets/{experiments-tab-choice-9WDva_co.js → experiments-tab-choice-CuHVTLn6.js} +1 -1
  138. package/dist/client/assets/{extract-connection-data-CQ-9c4M4.js → extract-connection-data-dqMfPsQ2.js} +1 -1
  139. package/dist/client/assets/{feature-gate-BM2nPq_K.js → feature-gate-CtZDrVRo.js} +1 -1
  140. package/dist/client/assets/{feature-paywall-BkRDvqlZ.js → feature-paywall-B0grxtjm.js} +1 -1
  141. package/dist/client/assets/{file-explorer-CGmxhajs.js → file-explorer-Dw60Fx9r.js} +1 -1
  142. package/dist/client/assets/{file-preview-CW106Au3.js → file-preview-Be1EgiV5.js} +1 -1
  143. package/dist/client/assets/{file-share-button-B6mdTr9l.js → file-share-button-C0sebF8X.js} +1 -1
  144. package/dist/client/assets/{file-type-icon-BQOlt6bc.js → file-type-icon-DVstbiT5.js} +1 -1
  145. package/dist/client/assets/{folder-icon-CEeLVxaA.js → folder-icon-DEZq7Xx_.js} +1 -1
  146. package/dist/client/assets/{form-D31DoepE.js → form-B1NaG_RH.js} +1 -1
  147. package/dist/client/assets/{general-CJiud_H3.js → general-EJHsRLqA.js} +1 -1
  148. package/dist/client/assets/{held-block-view-CB3xOhYs.js → held-block-view-RefgVZ-g.js} +3 -3
  149. package/dist/client/assets/{home-CNcl_kvy.js → home-pPlGaUJp.js} +1 -1
  150. package/dist/client/assets/{hosted-publish-feedback-BSdcqLMQ.js → hosted-publish-feedback-Bi_0k5W1.js} +1 -1
  151. package/dist/client/assets/{icon-button-CbqEy6tn.js → icon-button-BVxTa5XQ.js} +1 -1
  152. package/dist/client/assets/{index-CeKKvvrE.js → index--IjqY4i3.js} +1 -1
  153. package/dist/client/assets/{index-DZBneeX2.js → index-BNPvVdXx.js} +1 -1
  154. package/dist/client/assets/{index-Cnj5xCCg.js → index-BW4aKEOI.js} +1 -1
  155. package/dist/client/assets/{index-DGMpoxyU.js → index-BWB-agB0.js} +1 -1
  156. package/dist/client/assets/{index-GuHT1Dqd.js → index-Bbz2iojb.js} +1 -1
  157. package/dist/client/assets/{index-Cm3twnkq.js → index-C-Gs52g8.js} +1 -1
  158. package/dist/client/assets/{index-zj4emT8y.js → index-C-H6QYvr.js} +1 -1
  159. package/dist/client/assets/{index-D_3ll4pl.js → index-C7hZxEcX.js} +1 -1
  160. package/dist/client/assets/{index-BU5FmmeM.js → index-CGdwvbtd.js} +1 -1
  161. package/dist/client/assets/{index-XNAHJkYn.js → index-CjZiJzPb.js} +1 -1
  162. package/dist/client/assets/{index-BdgyAwPA.js → index-DOhrAFZP.js} +1 -1
  163. package/dist/client/assets/{index-CD3fj83c.js → index-DWeEV7We.js} +5 -5
  164. package/dist/client/assets/{index-D4YmJ5bn.js → index-VD1AeowC.js} +1 -1
  165. package/dist/client/assets/{index-7IShUKYk.js → index-kEylUewg.js} +1 -1
  166. package/dist/client/assets/{index-redirect-D2Jxd7RA.js → index-redirect-BYGGv1vV.js} +1 -1
  167. package/dist/client/assets/{index-CQr86l05.js → index-yWhzAmER.js} +1 -1
  168. package/dist/client/assets/{infiniteQueryObserver-DIZnkeqn.js → infiniteQueryObserver-DUsg51OD.js} +1 -1
  169. package/dist/client/assets/{infra-billing-CHM9W63C.js → infra-billing-CeTeSxwQ.js} +1 -1
  170. package/dist/client/assets/{input-C8LAqcW8.js → input-BuBZNGTJ.js} +3 -3
  171. package/dist/client/assets/{input-B5oK-tm6.js → input-HYlwfQuM.js} +1 -1
  172. package/dist/client/assets/{integration-icon-DrUX7MlE.js → integration-icon-B_WXNT4I.js} +1 -1
  173. package/dist/client/assets/{jira-icon-BZpTWRDk.js → jira-icon-TfABIvMG.js} +1 -1
  174. package/dist/client/assets/{label-BjHcnejP.js → label-BpaBIQwW.js} +1 -1
  175. package/dist/client/assets/{layout-D-7ngqTv.js → layout-DVejPSCJ.js} +1 -1
  176. package/dist/client/assets/{legacy-agents-deep-DlwSBmEx.js → legacy-agents-deep-DMSUEHW3.js} +1 -1
  177. package/dist/client/assets/{legacy-main-redirect-CjBqfgkP.js → legacy-main-redirect-DToXdSXi.js} +1 -1
  178. package/dist/client/assets/library-CRCUGyiv.js +1 -0
  179. package/dist/client/assets/{login-DoscEwvo.js → login-DFwXdqYS.js} +1 -1
  180. package/dist/client/assets/{markdown-DCOlrq5H.js → markdown-CLfaxlib.js} +1 -1
  181. package/dist/client/assets/{mcp-app-renderer-CpTKqKhy.js → mcp-app-renderer-Mid-kDeN.js} +1 -1
  182. package/dist/client/assets/{mcp-oauth-CFWliElr.js → mcp-oauth-D3kIeoXi.js} +1 -1
  183. package/dist/client/assets/{mcp-oauth-rYjfwNTN.js → mcp-oauth-tsfDvMhI.js} +1 -1
  184. package/dist/client/assets/{members-CtNRNIZz.js → members-tMFcG10m.js} +1 -1
  185. package/dist/client/assets/{memory-BzISrBF9.js → memory-Dlgg8feS.js} +1 -1
  186. package/dist/client/assets/{mini-report-page-COcteM5H.js → mini-report-page-Cxtng8-Y.js} +1 -1
  187. package/dist/client/assets/{mock-board-C1z7Js6O.js → mock-board-nyNgfZOP.js} +3 -3
  188. package/dist/client/assets/{monaco-editor-8NbaeYxI.js → monaco-editor-D0Ff7KJE.js} +1 -1
  189. package/dist/client/assets/monitoring-YkcFZl0J.js +1 -0
  190. package/dist/client/assets/{monitoring-stats-row-DJwGXbaX.js → monitoring-stats-row-BmQjBNjp.js} +1 -1
  191. package/dist/client/assets/{multi-select-MrdYsdQJ.js → multi-select-Bsu8o7vs.js} +1 -1
  192. package/dist/client/assets/{mustache-Cse4SZP_.js → mustache-C1gHfFYM.js} +1 -1
  193. package/dist/client/assets/{named-rule-uses-DbKcBg9W.js → named-rule-uses-C-MKNC5A.js} +1 -1
  194. package/dist/client/assets/{new-project-dialog-t1kb5xiA.js → new-project-dialog-Bk4cWPiU.js} +1 -1
  195. package/dist/client/assets/{oauth-callback-bSFZUAjG.js → oauth-callback-9g7hhlh1.js} +1 -1
  196. package/dist/client/assets/{oauth-callback-ai-provider-DsuZukYv.js → oauth-callback-ai-provider-C1NlXp6j.js} +1 -1
  197. package/dist/client/assets/{onboarding-8qc2gNkO.js → onboarding-DfxPwtYb.js} +1 -1
  198. package/dist/client/assets/{openai-conversation-CaEjm2EP.js → openai-conversation-D-ks7m9j.js} +1 -1
  199. package/dist/client/assets/{optimistic-project-sidebar-views-B6Zgt9ra.js → optimistic-project-sidebar-views-BFvrk0r7.js} +1 -1
  200. package/dist/client/assets/{order-monitor-day-kqoS-Y_Q.js → order-monitor-day-_hyWMdhd.js} +1 -1
  201. package/dist/client/assets/{organization-choice-DZZeL1XT.js → organization-choice-CkHks73b.js} +1 -1
  202. package/dist/client/assets/{orgs-kt9vh-dy.js → orgs-BqnCxnvJ.js} +1 -1
  203. package/dist/client/assets/{page-seo-form-Dp0KuKjw.js → page-seo-form-4A_5Qf7h.js} +1 -1
  204. package/dist/client/assets/{pair-o3WkMbxi.js → pair-3YmpdA2f.js} +1 -1
  205. package/dist/client/assets/{parse-sections-B9Tf8cb0.js → parse-sections-Dq3IUZQm.js} +1 -1
  206. package/dist/client/assets/{plan-9q_Cw6ji.js → plan-CVctrk1b.js} +1 -1
  207. package/dist/client/assets/{plan-ladder-6A8SWD1S.js → plan-ladder-DeJKloSP.js} +1 -1
  208. package/dist/client/assets/{popover-DNa0geGd.js → popover-B86mZmdW.js} +1 -1
  209. package/dist/client/assets/{post-calendar-N4MlB9EJ.js → post-calendar-Z6OYaoq0.js} +1 -1
  210. package/dist/client/assets/{post-editor-BPhcrZnu.js → post-editor-DlOfH1WF.js} +1 -1
  211. package/dist/client/assets/{preview-content-BGa1aq6N.js → preview-content-DJCWiflb.js} +1 -1
  212. package/dist/client/assets/{preview-dialog-BcLlrF7L.js → preview-dialog-DWLZfYka.js} +1 -1
  213. package/dist/client/assets/{preview-panel-BipRwFTG.js → preview-panel-BA9lXblT.js} +1 -1
  214. package/dist/client/assets/{preview-tab-D_XmjQ94.js → preview-tab-CvZcK37I.js} +3 -3
  215. package/dist/client/assets/{product-picker-dialog-CuQoqK9j.js → product-picker-dialog-wRTub32t.js} +1 -1
  216. package/dist/client/assets/{profile-FuN22bNA.js → profile-BVc4bfUi.js} +1 -1
  217. package/dist/client/assets/{project-app-view-MMtV5o0V.js → project-app-view-UTYwVRe_.js} +1 -1
  218. package/dist/client/assets/{project-apps-GTR8G8Ys.js → project-apps-4C1tnuZE.js} +1 -1
  219. package/dist/client/assets/{project-feed-CkPrHQsk.js → project-feed-YQyJeiFG.js} +1 -1
  220. package/dist/client/assets/{project-icon-fmbPzLuQ.js → project-icon-B5VDWXmE.js} +1 -1
  221. package/dist/client/assets/project-reports-BcprlgEh.js +1 -0
  222. package/dist/client/assets/project-tasks-kLxgS8EN.js +1 -0
  223. package/dist/client/assets/{projects-Do4dpHSf.js → projects-Ko4cNfpr.js} +1 -1
  224. package/dist/client/assets/{projects-empty-state-DOLbuC5C.js → projects-empty-state-vsReUsxx.js} +1 -1
  225. package/dist/client/assets/{prompts-Cbd5IniR.js → prompts-BNsX6Qdy.js} +1 -1
  226. package/dist/client/assets/record-editor-BTorZsZL.js +1 -0
  227. package/dist/client/assets/{redirect-editor-Be9-Qvv_.js → redirect-editor-D-uh3waw.js} +1 -1
  228. package/dist/client/assets/{releases-api-CJKOs4iF.js → releases-api-DRlYbUj_.js} +1 -1
  229. package/dist/client/assets/{reports-Cwi7mYJf.js → reports-BvHIGn30.js} +1 -1
  230. package/dist/client/assets/reports-C9ICVKrL.js +1 -0
  231. package/dist/client/assets/{reports-onboarding-DBwy9sOO.js → reports-onboarding-DSdWrt0l.js} +1 -1
  232. package/dist/client/assets/{reports-tab-C6GCZ_1e.js → reports-tab-LYLovzQm.js} +2 -2
  233. package/dist/client/assets/{repositories-CLK21UHp.js → repositories-DdhFw_WB.js} +1 -1
  234. package/dist/client/assets/repositories-DqnlgZTo.js +1 -0
  235. package/dist/client/assets/{repository-binding-BpxbVNK2.js → repository-binding-CCilIqI-.js} +1 -1
  236. package/dist/client/assets/{repository-import-picker-BIa2KeQJ.js → repository-import-picker-DaSOYRH5.js} +1 -1
  237. package/dist/client/assets/{repository-picker-D1FdmUjm.js → repository-picker-zJbNOFiG.js} +1 -1
  238. package/dist/client/assets/{require-capability-DiaarhnE.js → require-capability-ZNzJcBBI.js} +1 -1
  239. package/dist/client/assets/{required-auth-layout-CLzneFN8.js → required-auth-layout-CjomhEXK.js} +1 -1
  240. package/dist/client/assets/{reset-password-CFxj9jWH.js → reset-password-Bej90QXy.js} +1 -1
  241. package/dist/client/assets/{resizable-BRQDRNKu.js → resizable-CzyrVCQ0.js} +1 -1
  242. package/dist/client/assets/{resolve-tab-icon-bhxvukg7.js → resolve-tab-icon-C5DYJj36.js} +1 -1
  243. package/dist/client/assets/{review-settings-BY-BbFx8.js → review-settings-DhbO_Nof.js} +1 -1
  244. package/dist/client/assets/{roles-8aR2wtse.js → roles-D1Ff0aoZ.js} +1 -1
  245. package/dist/client/assets/{route-BKABB7N0.js → route-91kWOP5r.js} +1 -1
  246. package/dist/client/assets/{route-D0phypJY.js → route-BLs3oZRn.js} +1 -1
  247. package/dist/client/assets/route-C4AtYx-4.js +1 -0
  248. package/dist/client/assets/{sandbox-lifecycle-context-CP46WhuD.js → sandbox-lifecycle-context-DcAhoFBl.js} +1 -1
  249. package/dist/client/assets/{schema-DlfScG-X.js → schema-B1XL4aIc.js} +1 -1
  250. package/dist/client/assets/{schema-CZyOweh2.js → schema-Donkz7O8.js} +1 -1
  251. package/dist/client/assets/{scroll-area-DfDFaLoK.js → scroll-area-DGyJpc45.js} +1 -1
  252. package/dist/client/assets/{search-input-Ce0LKLJH.js → search-input-DB9f37BJ.js} +1 -1
  253. package/dist/client/assets/{search-toggle-mwrYnTpd.js → search-toggle-B3uFeOsB.js} +1 -1
  254. package/dist/client/assets/{secret-picker-0ebHTmVr.js → secret-picker-Dm26UvnM.js} +1 -1
  255. package/dist/client/assets/{secrets-i5YFgzbS.js → secrets-BirhWzEh.js} +1 -1
  256. package/dist/client/assets/{section-array-field-oWK_IMJM.js → section-array-field-BsLSUsNS.js} +1 -1
  257. package/dist/client/assets/{sections-BhWKKbK8.js → sections-D_fgxjnp.js} +1 -1
  258. package/dist/client/assets/{sections-editor-B6j8jHtF.js → sections-editor-j8qTZVhR.js} +1 -1
  259. package/dist/client/assets/{select-CEUzoC6o.js → select-DQAyqt3X.js} +1 -1
  260. package/dist/client/assets/{select-model-rItZIAGH.js → select-model-DdHXzdEf.js} +1 -1
  261. package/dist/client/assets/{seo-editor-BNYNobIZ.js → seo-editor-D53zGMYw.js} +1 -1
  262. package/dist/client/assets/{separator-DnXEcPkq.js → separator-Dwknem2m.js} +1 -1
  263. package/dist/client/assets/settings-tab-BAmgurWw.js +1 -0
  264. package/dist/client/assets/{sheet-BdF546xt.js → sheet-BxBmImQt.js} +1 -1
  265. package/dist/client/assets/{shell-layout-BHS6wDGg.js → shell-layout-CBd6hqhZ.js} +1 -1
  266. package/dist/client/assets/{site-draft-actions-D9KLDMNb.js → site-draft-actions-C1KJ-oYl.js} +1 -1
  267. package/dist/client/assets/{site-draft-view-Dwp6ox-i.js → site-draft-view-C1iBek70.js} +2 -2
  268. package/dist/client/assets/site-editor-DDNTh5e0.js +1 -0
  269. package/dist/client/assets/{site-editor-toast-qpDJ9c8x.js → site-editor-toast-CF-bKHvR.js} +1 -1
  270. package/dist/client/assets/{skills-DkTHa0rC.js → skills-CSYW9o6R.js} +1 -1
  271. package/dist/client/assets/{slider-C2GpxduI.js → slider-CazrR_tm.js} +1 -1
  272. package/dist/client/assets/{sortable.esm-DSLK_VXl.js → sortable.esm-Prve7Uvb.js} +1 -1
  273. package/dist/client/assets/{sso-9_HDrEa6.js → sso-D1Q9IjHQ.js} +1 -1
  274. package/dist/client/assets/{suggestion-DWnq0fLw.js → suggestion-DPLcS--k.js} +1 -1
  275. package/dist/client/assets/{switch-JNrraILQ.js → switch-IRCYJjZ1.js} +1 -1
  276. package/dist/client/assets/{symbol-DN0zRhCk.js → symbol-Be_a3wI8.js} +1 -1
  277. package/dist/client/assets/{synced-repos-BqaODaqZ.js → synced-repos-DLdy267V.js} +1 -1
  278. package/dist/client/assets/{tab-icon-glyph-CAGljGST.js → tab-icon-glyph-CgueYBhs.js} +1 -1
  279. package/dist/client/assets/{table-CQyj6E6L.js → table-CTgmLE5F.js} +1 -1
  280. package/dist/client/assets/{tabs-Dsn3YxbL.js → tabs-DMHYY7LP.js} +1 -1
  281. package/dist/client/assets/{task-assignee-avatar-_ItHEfyB.js → task-assignee-avatar-HjmFD6tX.js} +1 -1
  282. package/dist/client/assets/{task-board-Bl8e1XTd.js → task-board-TRGqshFr.js} +1 -1
  283. package/dist/client/assets/{task-route-TqMS3_Xw.js → task-route-AKUsZtL1.js} +1 -1
  284. package/dist/client/assets/{task-status-RY841uT0.js → task-status-ENoKZvX3.js} +1 -1
  285. package/dist/client/assets/{taskboard-analytics-CVrP0ozY.js → taskboard-analytics-B2upXJM1.js} +1 -1
  286. package/dist/client/assets/tasks-CIMIXW7Z.js +1 -0
  287. package/dist/client/assets/{tasks-DKrnOMsF.js → tasks-VV29tI8m.js} +1 -1
  288. package/dist/client/assets/{textarea-DHsxWS9H.js → textarea-WKkkWTp0.js} +1 -1
  289. package/dist/client/assets/{thread-analytics-BlBn_Ue7.js → thread-analytics-CArqDxET.js} +1 -1
  290. package/dist/client/assets/{thread-intent-CIa2mqqt.js → thread-intent-CZKTHJpR.js} +1 -1
  291. package/dist/client/assets/{thread-route-OlD3VCew.js → thread-route-DIf2ZGZx.js} +1 -1
  292. package/dist/client/assets/{thread-route-CUBgdoZ0.js → thread-route-cByVtEjw.js} +1 -1
  293. package/dist/client/assets/{thread-sheet-body-DcCGHErs.js → thread-sheet-body-RTusZHU0.js} +1 -1
  294. package/dist/client/assets/{time-range-picker-DG1uQaMF.js → time-range-picker-DuJBA8PM.js} +1 -1
  295. package/dist/client/assets/{toggle-group-BFn7oikO.js → toggle-group-CJuulzzH.js} +1 -1
  296. package/dist/client/assets/{tool-namespace-DtJ2HF8a.js → tool-namespace-Oer3Ba2E.js} +1 -1
  297. package/dist/client/assets/{toolbar-icon-button-DZ8JPQ_p.js → toolbar-icon-button-Df5B45y-.js} +1 -1
  298. package/dist/client/assets/{tooltip-BFOA909d.js → tooltip-Bvq8EBUJ.js} +1 -1
  299. package/dist/client/assets/{tooltipContext-2V1j45YY.js → tooltipContext-CNRJnKg_.js} +1 -1
  300. package/dist/client/assets/{track-XCtPNBYr.js → track-B3uJL1bu.js} +1 -1
  301. package/dist/client/assets/{types-BxxJTVxe.js → types-e4ubeaeZ.js} +1 -1
  302. package/dist/client/assets/{url-slug-nNAf_zW7.js → url-slug-BQHTBNww.js} +1 -1
  303. package/dist/client/assets/{usage-stats-bTZK9s6S.js → usage-stats-BU-m1tI0.js} +1 -1
  304. package/dist/client/assets/{use-ai-providers-CehDWGIM.js → use-ai-providers-D4eYzGSU.js} +1 -1
  305. package/dist/client/assets/{use-apply-named-rule-DlF_o_O9.js → use-apply-named-rule-c5BXg7Ti.js} +1 -1
  306. package/dist/client/assets/{use-automations-CcifryrO.js → use-automations-C2GetY8h.js} +1 -1
  307. package/dist/client/assets/{use-autosave-Brq7MoHE.js → use-autosave-SLyVvpdL.js} +1 -1
  308. package/dist/client/assets/{use-chat-layout-state-DX2dVnP3.js → use-chat-layout-state-CguMNiu5.js} +1 -1
  309. package/dist/client/assets/{use-clock-tick-9j5u-Rtx.js → use-clock-tick-B-VqHoGD.js} +1 -1
  310. package/dist/client/assets/{use-cms-publish-actions-CpgSJalU.js → use-cms-publish-actions-Bg6kiHNU.js} +1 -1
  311. package/dist/client/assets/{use-connect-companion-DZRxznzL.js → use-connect-companion-BmmG-Bx3.js} +1 -1
  312. package/dist/client/assets/{use-connection-BUd2E1e4.js → use-connection-BkFIpsi3.js} +1 -1
  313. package/dist/client/assets/{use-copy-AGiqroYo.js → use-copy-3yMS-Tp7.js} +1 -1
  314. package/dist/client/assets/{use-create-virtual-mcp-DUfDYvY_.js → use-create-virtual-mcp-Cv1gVZ0F.js} +1 -1
  315. package/dist/client/assets/{use-date-fns-locale-t1pyfasq.js → use-date-fns-locale-D81MphA_.js} +1 -1
  316. package/dist/client/assets/{use-debounced-autosave-uS4v6WVr.js → use-debounced-autosave-COS8yAsp.js} +1 -1
  317. package/dist/client/assets/{use-debounced-value-Bvr3c0Bg.js → use-debounced-value-TwO3j2Wf.js} +1 -1
  318. package/dist/client/assets/{use-deco-credits-D3Ul2AHT.js → use-deco-credits-CCrKLCBg.js} +1 -1
  319. package/dist/client/assets/{use-decopilot-events-CQwRTT8g.js → use-decopilot-events-C12NB9sw.js} +1 -1
  320. package/dist/client/assets/{use-delete-connection-MUWA0C1G.js → use-delete-connection-BXMXUYef.js} +1 -1
  321. package/dist/client/assets/{use-deployment-admin-DtrC7GR5.js → use-deployment-admin-CR-rfRjc.js} +1 -1
  322. package/dist/client/assets/{use-fast-preview-draft-url-B40YryGZ.js → use-fast-preview-draft-url-B2EgAMWM.js} +1 -1
  323. package/dist/client/assets/{use-file-configs-C87nAUnF.js → use-file-configs-B1Wu7CoB.js} +1 -1
  324. package/dist/client/assets/{use-inbox-feed-BrxFGNGq.js → use-inbox-feed-BsHLwaAX.js} +1 -1
  325. package/dist/client/assets/{use-infinite-scroll-BBt1tR4g.js → use-infinite-scroll-DH8-QEHI.js} +1 -1
  326. package/dist/client/assets/{use-join-requests-KZQ6WXPe.js → use-join-requests-MWtOJ_J6.js} +1 -1
  327. package/dist/client/assets/{use-main-panel-tabs-DFZxwocn.js → use-main-panel-tabs-DpFmnuPe.js} +1 -1
  328. package/dist/client/assets/{use-mcp-auth-status-fGawges9.js → use-mcp-auth-status-VaC7ikzW.js} +1 -1
  329. package/dist/client/assets/{use-mcp-client-BHU-qsif.js → use-mcp-client-B_ly4LOn.js} +1 -1
  330. package/dist/client/assets/{use-mcp-prompts-DVKPAtxK.js → use-mcp-prompts-BA7EjH33.js} +1 -1
  331. package/dist/client/assets/{use-mcp-tools-DTZgJEdW.js → use-mcp-tools-vSUjcW9-.js} +1 -1
  332. package/dist/client/assets/{use-mobile-C7tjJGs8.js → use-mobile-edOvKjBr.js} +1 -1
  333. package/dist/client/assets/{use-move-blocks-Co0993wA.js → use-move-blocks-DP52MqZ-.js} +1 -1
  334. package/dist/client/assets/{use-navigate-to-agent-BZyzGjVW.js → use-navigate-to-agent-CqJEEwa9.js} +1 -1
  335. package/dist/client/assets/{use-org-fs-DiFStjLf.js → use-org-fs-DxMirFhu.js} +1 -1
  336. package/dist/client/assets/{use-org-repo-syncs-D8YSA9t2.js → use-org-repo-syncs-adnfiUqx.js} +1 -1
  337. package/dist/client/assets/{use-org-sso-C9Iucy6w.js → use-org-sso-BYdMcBEF.js} +1 -1
  338. package/dist/client/assets/{use-organization-roles-Dz-b1a1s.js → use-organization-roles-Ed8BZb2p.js} +1 -1
  339. package/dist/client/assets/{use-organization-settings-CHidLnF6.js → use-organization-settings-W94bfajr.js} +1 -1
  340. package/dist/client/assets/{use-panel-navigate-CrCScmoE.js → use-panel-navigate-CJ83kP0Q.js} +1 -1
  341. package/dist/client/assets/{use-project-native-view-presence-DSs2LzKr.js → use-project-native-view-presence-DxSaFkS1.js} +1 -1
  342. package/dist/client/assets/{use-project-scope-ejA4MhTG.js → use-project-scope-CS7CU-oc.js} +1 -1
  343. package/dist/client/assets/{use-recent-apps-BQamzqjd.js → use-recent-apps-C5dLOTl5.js} +1 -1
  344. package/dist/client/assets/{use-releases-BgQagTY2.js → use-releases-DpCeT3sG.js} +1 -1
  345. package/dist/client/assets/{use-reports-diagnostic-DiC-K8YA.js → use-reports-diagnostic-CKzn6mmm.js} +1 -1
  346. package/dist/client/assets/{use-sandbox-events-BbmfXv6n.js → use-sandbox-events-C4-5jnCC.js} +1 -1
  347. package/dist/client/assets/{use-secrets-0iGSdnGP.js → use-secrets-CenfMz_I.js} +1 -1
  348. package/dist/client/assets/{use-section-preview-base-QNrdx3XX.js → use-section-preview-base-84_TvqYu.js} +1 -1
  349. package/dist/client/assets/{use-session-runtime-DYJ3pOXd.js → use-session-runtime-IDYaEeQh.js} +1 -1
  350. package/dist/client/assets/{use-sidebar-collapsed-DBJ9kFpJ.js → use-sidebar-collapsed-3UQA8uHW.js} +1 -1
  351. package/dist/client/assets/{use-tags-XdRP6hv7.js → use-tags-DJGekCw_.js} +1 -1
  352. package/dist/client/assets/{use-task-board-analytics-C8Y_Nmnp.js → use-task-board-analytics-DoKvu94u.js} +1 -1
  353. package/dist/client/assets/{use-task-board-events-C3c7HDax.js → use-task-board-events-DYXd2eOB.js} +1 -1
  354. package/dist/client/assets/{use-task-board-item-prs-DlYgoZJv.js → use-task-board-item-prs-BBI0oIlO.js} +1 -1
  355. package/dist/client/assets/{use-task-metadata-PWx0qQrW.js → use-task-metadata-74BypSA5.js} +1 -1
  356. package/dist/client/assets/{use-thread-analytics-DfrxxjCR.js → use-thread-analytics-C1sJu5ME.js} +1 -1
  357. package/dist/client/assets/{use-thread-outputs-CAL5fh-E.js → use-thread-outputs-DILH6Ebs.js} +1 -1
  358. package/dist/client/assets/useInfiniteQuery-hQnCuVJq.js +1 -0
  359. package/dist/client/assets/{useQueries-D1NR6XSj.js → useQueries-BoBZpiF2.js} +1 -1
  360. package/dist/client/assets/useSuspenseInfiniteQuery-h_sOQ54p.js +1 -0
  361. package/dist/client/assets/{users-CHbLiMHe.js → users-DXXNZ9Sv.js} +1 -1
  362. package/dist/client/assets/{utils-BzZnpE20.js → utils-CdL70Bws.js} +1 -1
  363. package/dist/client/assets/{variant-calendar-nksjvE17.js → variant-calendar-mPiRpLgW.js} +1 -1
  364. package/dist/client/assets/{variant-matcher-override-CIWGPj0Z.js → variant-matcher-override-CKYKPlBl.js} +1 -1
  365. package/dist/client/assets/{view-header-D6fHMTsm.js → view-header-CcqspHvW.js} +1 -1
  366. package/dist/client/assets/{virtual-mcp-AzZIPPoU.js → virtual-mcp-8l_Iyd1v.js} +1 -1
  367. package/dist/client/assets/{watch-sse-pool-CF4IoX_h.js → watch-sse-pool-n9peNJG6.js} +1 -1
  368. package/dist/client/index.html +1 -1
  369. package/dist/server/server.js +1 -1
  370. package/package.json +1 -1
  371. package/dist/client/assets/agent-analytics-BIY4JtC5.css +0 -1
  372. package/dist/client/assets/agent-analytics-CrWuxji2.js +0 -2
  373. package/dist/client/assets/agent-app-B8g7HXCG.js +0 -1
  374. package/dist/client/assets/agent-deck-BjW3Z3s-.js +0 -1
  375. package/dist/client/assets/agent-experiments-Dr_m9GDA.js +0 -1
  376. package/dist/client/assets/agent-library-4NnJCrl7.js +0 -1
  377. package/dist/client/assets/agent-library-file-wOie6wjv.js +0 -1
  378. package/dist/client/assets/agent-monitor-D93cGiV4.js +0 -1
  379. package/dist/client/assets/agent-settings-0mcQwgqo.js +0 -1
  380. package/dist/client/assets/agent-site-editor-code-BQblA5PP.js +0 -2
  381. package/dist/client/assets/agent-site-editor-content-CzD7r_8-.js +0 -1
  382. package/dist/client/assets/agent-site-editor-preview-C0fyF2la.js +0 -1
  383. package/dist/client/assets/agent-view-BqQguXfW.js +0 -1
  384. package/dist/client/assets/api-keys-C3Yfrg07.js +0 -1
  385. package/dist/client/assets/library-DGmRBsYh.js +0 -1
  386. package/dist/client/assets/monitoring-CP2OHem9.js +0 -1
  387. package/dist/client/assets/project-reports-Dg-vdrJe.js +0 -1
  388. package/dist/client/assets/project-tasks-C1Fo6Q_q.js +0 -1
  389. package/dist/client/assets/record-editor-CzhxcAkT.js +0 -1
  390. package/dist/client/assets/reports-BC3mXfe2.js +0 -1
  391. package/dist/client/assets/repositories-C-vvRVWc.js +0 -1
  392. package/dist/client/assets/route-CBcyPgFB.js +0 -1
  393. package/dist/client/assets/settings-tab-4qrzXqQr.js +0 -1
  394. package/dist/client/assets/site-editor-C_RF5xzW.js +0 -1
  395. package/dist/client/assets/tasks-BQyDO5YT.js +0 -1
  396. package/dist/client/assets/useInfiniteQuery-BPkTbU3d.js +0 -1
  397. package/dist/client/assets/useSuspenseInfiniteQuery-BpGKYE1U.js +0 -1
@@ -4568,7 +4568,7 @@ ${X}`:`${Y}
4568
4568
 
4569
4569
  ${X}
4570
4570
  ${J.slice(Y.length).trimStart()}`}function qE8($){return $?.match(rF5)?.[1]?.toLowerCase()??null}async function QU5($,Z,Q){let[Y,X]=await Promise.all([$.client.listDecofileEntries(Z,$.packagePath),$.client.listDecofileEntries(Q,$.packagePath)]),J=new Map(KW(Y,$.packagePath).map((H)=>[H.path,H.sha])),G=KW(X,$.packagePath),W=new Set(G.map((H)=>H.path)),K=[];for(let H of G){if(J.get(H.path)===H.sha)continue;K.push({path:H.path,copyFromRef:Q})}for(let H of J.keys())if(!W.has(H))K.push({path:H,deleted:!0});return{changes:K,tree:Y,next:G.map((H)=>({stem:H.stem,sha:H.sha}))}}async function TE8($,Z){try{return await XY0($.client,$.packagePath,Z)}catch(Q){if(Q instanceof l2)return null;throw Q}}async function RE8($,Z,Q){let Y=JO($.packagePath),[X,J]=await Promise.all([$.client.getEntriesAtPaths(Z,[Y]),$.client.getEntriesAtPaths(Q,[Y])]);if(X.get(Y)?.sha===J.get(Y)?.sha)return!1;let[G,W]=await Promise.all([TE8($,Z),TE8($,Q)]);return G!==W}async function ME8($,Z){if(!eB0(Z))throw new Dl;if(!await Iq1($.store,$.site,Z))throw new Dl}async function VE8($,Z){await ME8($,Z);let Q=await C5($.client,$.mainBranch);return RE8($,Q,Z)}async function IE8($,Z,Q={},Y={}){await ME8($,Z);let X=await $.client.readCommit(Z);if(!X)throw new Dl;let J=await C5($.client,$.mainBranch),G=await QU5($,J,Z);if(G.changes.length===0)return{result:"up-to-date"};let W=await RE8($,J,Z);if(W)console.info("hosted reapply: schema differs",{site:$.site,target:Z,head:J});let K=await kq1($,J,G,ZU5(X,Z,Q.coAuthor));return{result:"merged",sha:K,release:await Uh0($,K,Y),schemaChanged:W}}var Dl,aF5="Reapplied-From",rF5;var bq1=L(()=>{Tp();W5();pK();KB();GY0();Fh0();AE8();Dl=class Dl extends Error{constructor(){super("This commit has no release");this.name="NotPublishedError"}};rF5=/^Reapplied-From:\s*([0-9a-f]{40})\s*$/im});async function kE8($,Z,Q){let[Y,X,J]=await Promise.all([JY0($.store,$.site),O2$($.store,$.site),Z.listCommits({ref:$.mainBranch,since:XU5,cursor:Q,limit:YU5})]),G=new Map(J.items.map((H)=>[H.sha,H.date])),W=J.items.map((H)=>qE8(H.body));await Promise.all([...new Set(W)].filter((H)=>H!==null&&!G.has(H)).map(async(H)=>{let F=await $.client.readCommit(H).catch(()=>null);if(F)G.set(H,F.date)}));let K=J.items.map((H,F)=>{let U=W[F];return{sha:H.sha,date:H.date,message:H.message,author:H.author.name??H.author.login,hasRelease:X.has(H.sha),reapplyOf:U?{sha:U,date:G.get(U)??null}:null}});return{current:Y,commits:K,nextCursor:J.nextCursor}}async function CE8($){let Z=await C5($.client,$.mainBranch),Q=await Cq1($,Z);return Sq1($,{revision:Z,schemaHash:Q,publishedAt:new Date().toISOString()})}var YU5=50,XU5="1970-01-01T00:00:00Z";var SE8=L(()=>{W5();KB();GY0();bq1()});function _E8($){return`site-tokens:${$}`}function JU5($){let Z=$?.tokens;if(!Array.isArray(Z))return[];return Z.filter((Q)=>typeof Q==="object"&&Q!==null&&typeof Q.kid==="string"&&typeof Q.iat==="number")}function vE8($){return crypto.subtle.importKey("pkcs8",Buffer.from($,"base64"),{name:"Ed25519"},!1,["sign"])}async function GU5($,Z){let Q=(J)=>xq1(new TextEncoder().encode(JSON.stringify(J))),Y=`${Q({alg:"EdDSA",typ:"JWT"})}.${Q({site:Z.site,kid:Z.kid,iat:Z.iat})}`,X=await crypto.subtle.sign({name:"Ed25519"},$,new TextEncoder().encode(Y));return`${Y}.${xq1(X)}`}function bE8($){let Z=async(Q,Y)=>JU5(await $.kv.get(Q,_E8(Y)));return{list:Z,async issue(Q,Y){let X=await Z(Q,Y),J={kid:xq1(crypto.getRandomValues(new Uint8Array(16))),iat:Math.floor(Date.now()/1000)},G=await GU5(await $.signingKey(),{site:Y,...J});return await $.kv.set(Q,_E8(Y),{tokens:[...X,J]}),{token:G,record:J}}}}var xq1=($)=>Buffer.from($ instanceof Uint8Array?$:new Uint8Array($)).toString("base64url");function KU5(){let $=iq();return $?{store:$,purge:Wh0()}:null}async function jh0($){let Z=$.var.delivery();if(!Z)return null;let Q=$.get("hostedProject"),Y=await $.var.repoClientFor($.var.studioContext,Q.organizationId,Q.repository);return{client:Y,packagePath:Q.packagePath,mainBranch:await Y.getDefaultBranch(),store:Z.store,purge:Z.purge,site:Q.site,previewHosts:await Kh0({site:Q.site,metadata:Q.metadata,domains:$.var.siteDomains})}}function xE8($){let Z=B0().siteTokenSigningKey;if(!Z)return null;return bE8({kv:$.var.studioContext.storage.kv,signingKey:()=>vE8(Z)})}function ps($,Z){let Q=Z instanceof Error?Z.message:String(Z);if(Z instanceof l2)return $.json({error:Q},409);if(Z instanceof Nh0)return console.error("hosted: latest.json update failed",{error:Q}),$.json({error:"latest-update-failed"},502);let Y=y3(Z);if(Y!==null)return $.json({error:Q},Y===404?404:502);return console.error("hosted: request failed",{error:Q}),$.json({error:Q},500)}function fE8($={}){let Z=new $1,Q=$.repoClientFor??h3,Y=$.insightsFor??PE$,X=$.delivery??KU5;return Z.use("*",async(J,G)=>{J.set("repoClientFor",Q),J.set("delivery",X),J.set("siteDomains",$.siteDomains),await G()}),Z.use("/:virtualMcpId/*",WU5),Z.get("/:virtualMcpId/releases",async(J)=>{try{let G=await jh0(J);if(!G)return J.json(Oh0,503);let W=J.get("hostedProject"),K=await Y(J.var.studioContext,W.organizationId,W.repository);return J.json(await kE8(G,K,J.req.query("cursor")??null),200,{"Cache-Control":"no-store"})}catch(G){return ps(J,G)}}),Z.post("/:virtualMcpId/releases/retry",async(J)=>{try{let G=await jh0(J);if(!G)return J.json(Oh0,503);let W=await J.req.json().catch(()=>({})),K=await CE8(G),H=J.var.studioContext.auth?.user?.id;if(typeof W.branch==="string"&&W.branch&&typeof W.draftEtag==="string"&&W.draftEtag&&H){let F=J.get("hostedProject");await _q1(G,YD0({kv:J.var.studioContext.storage.kv,store:G.store}),{organizationId:F.organizationId,virtualMcpId:F.virtualMcpId,branch:W.branch,site:F.site,editor:H},W.draftEtag)}return J.json({current:K})}catch(G){return ps(J,G)}}),Z.get("/:virtualMcpId/releases/:sha/reapply",async(J)=>{try{let G=await jh0(J);if(!G)return J.json(Oh0,503);return J.json({schemaChanged:await VE8(G,J.req.param("sha"))})}catch(G){if(G instanceof Dl)return J.json({error:G.message},404);return ps(J,G)}}),Z.post("/:virtualMcpId/releases/:sha/reapply",async(J)=>{try{let G=await jh0(J);if(!G)return J.json(Oh0,503);let W=await IE8(G,J.req.param("sha"),{coAuthor:DO(J.var.studioContext)});return J.json(W)}catch(G){if(G instanceof Dl)return J.json({error:G.message},404);if(G instanceof Bl)return J.json({error:"main-moved"},409);return ps(J,G)}}),Z.get("/:virtualMcpId/site-tokens",async(J)=>{let G=J.get("hostedProject"),W=xE8(J);if(!W)return J.json({error:"site tokens not configured"},503);return J.json({site:G.site,tokens:await W.list(G.organizationId,G.site)})}),Z.post("/:virtualMcpId/site-tokens",async(J)=>{let G=J.get("hostedProject"),W=xE8(J);if(!W)return J.json({error:"site tokens not configured"},503);try{let K=await J.var.repoClientFor(J.var.studioContext,G.organizationId,G.repository),H=await pq(K,G.packagePath,await K.getDefaultBranch());if(await ui(J.var.studioContext.storage.virtualMcps,{id:G.virtualMcpId,organizationId:G.organizationId,metadata:G.metadata},H,J.var.studioContext.auth?.user?.id??"system"),!H)return J.json({error:"not a Blocks v8 site"},409);return J.json(await W.issue(G.organizationId,G.site))}catch(K){return ps(J,K)}}),Z}var WU5,Oh0;var yE8=L(()=>{uF();H8();ig0();_3();lF();W5();KB();Pq1();XD0();GY0();Vq1();Fh0();SE8();bq1();s40();nq();hi();l1();dP();WU5=vs(async($,Z)=>{let Q=$.var.studioContext,Y=Q.organization;if(!Y)return $.json({error:"Organization scope required"},500);if(!Q.auth?.user?.id)return $.json({error:"Unauthorized"},401);if(!await qQ(Q,Y.id,"cms"))return $.json({error:"This organization's plan does not include the CMS",code:"feature_not_in_plan"},403);let X=$.req.param("virtualMcpId")??"",J=await Q.storage.virtualMcps.findById(X);if(!J||J.organization_id!==Y.id)return $.json({error:"Virtual MCP not found"},404);if(!CQ(await e7(Q),X))return $.json({error:"Virtual MCP not found"},404);let G=J.metadata??null,W=BW(G,J.connections?.map((H)=>H.connection_id)??[]);if(!W)return $.json({error:"Project has no repository"},404);try{let H=await $.var.repoClientFor(Q,Y.id,W);if(!await GD0({projects:Q.storage.virtualMcps,project:{id:X,organizationId:Y.id,metadata:G},by:Q.auth.user.id,client:H,mainBranch:await H.getDefaultBranch()}))return $.json({error:"Not found"},404)}catch(H){return ps($,H)}let K=await JD0(Q.storage.orgSites,X,Y.id);if(!K)return $.json(gi,409);return $.set("hostedProject",{organizationId:Y.id,virtualMcpId:X,site:K,packagePath:HB(G),repository:W,metadata:G}),Z()}),Oh0={error:"hosted delivery not configured"}});var gE8=($)=>{let Z=new $1;if(Z.use("*",Qs),Z.use("*",cN8),Z.route("/",lN8($.voiceSessions)),Z.route("/",ty0()),Z.route("/",vB8()),Z.route("/",iB8()),Z.route("/",IB8()),Z.route("/",oO8()),Z.route("/",aO8()),Z.route("/",lO8()),Z.route("/",nO8()),Z.route("/",cO8()),Z.route("/",mg0()),Z.route("/tools",Xj8()),Z.route("/",Zj8()),Z.route("/",zO8({kvStorage:$.kvStorage})),Z.route("/",EO8()),Z.route("/fs",_O8({getConnection:$.getNatsConnection})),Z.route("/sandbox",qw8()),Z.route("/decofile",jE8()),Z.route("/hosted",fE8()),Z.route("/",gO8()),Z.route("/",bO8()),Z.route("/deco-sites",sy0()),Z.route("/hosting",$B8()),Z.route("/monitor",jB8()),Z.route("/order-monitor",qB8()),Z.route("/sso",my0()),Z.route("/",cg0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",oN8()),$.mountDevAssets)Z.route("/dev-assets",Gg0({orgFromPath:!0}));Z.use("/mcp/:connectionId?",$.mcpAuth),Z.use("/mcp/:connectionId/ui-resource",$.mcpAuth),Z.use("/mcp/gateway/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/virtual-mcp/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/self",$.mcpAuth);for(let Q of vT1)Z.use(`${Q}/:threadId`,$.mcpAuth);Z.route("/",vG8()),Z.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",$.betterAuthProtectedResourceHandler),Z.get("/mcp/.well-known/oauth-protected-resource",$.betterAuthProtectedResourceHandler);for(let Q of vT1)Z.route(Q,fO8());return Z.route("/mcp",Gx0()),Z.route("/mcp/self",gg0()),Z.route("/mcp",Hx0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var hE8=L(()=>{H8();mN8();dN8();Sy0();sN8();GA1();ZB8();wB8();RB8();Wg0();v2();ZA1();bB8();NA1();PO8();AO8();vO8();xO8();HZ0();p21();Fx0();_T1();yO8();hO8();mO8();dO8();fT1();sO8();rO8();Qj8();yT1();Jj8();gT1();Wx0();Rw8();wE8();yE8()});import{z as Ll}from"zod";class fq1{adapter;getConnection;kvPromise;constructor($,Z){this.adapter=$;this.getConnection=Z}kv(){let $=this.getConnection();if(!$||$.isClosed())throw new R1(503,{message:"Voice transport is unavailable"});return this.kvPromise??=new mE8.Kvm(wh0.jetstream($)).create("STUDIO_VOICE_SESSIONS",{storage:wh0.StorageType.Memory,ttl:cE8.nanos(vO),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"?lE8.parse(X.json()):null;if(J?.state==="ready")return J.agentId;if(J?.state==="creating"&&J.expiresAt>Date.now()){await G$(200);continue}let G=uE8.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 G$(200);continue}try{let K=await $.ensureConversationAgent();return await Z.update(Q,uE8.encode(JSON.stringify({state:"ready",agentId:K})),W),K}catch(K){throw await Z.delete(Q,{previousSeq:W}).catch(()=>{}),K}}throw new R1(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"?lE8.parse(G.json()):null;if(G&&W?.state==="ready"&&W.agentId===Q)await X.delete(J,{previousSeq:G.revision}).catch(()=>{});throw Y}}}var wh0,mE8,cE8,uE8,lE8;var dE8=L(()=>{F3();bB();g$();wh0=_(nH(),1),mE8=_(Pq(),1),cE8=_(UA(),1),uE8=new TextEncoder,lE8=Ll.discriminatedUnion("state",[Ll.object({state:Ll.literal("ready"),agentId:Ll.string()}),Ll.object({state:Ll.literal("creating"),expiresAt:Ll.number()})])});import{z as ns}from"zod";function HU5($){return{model:$.model,instructions:`${Gi$}
4571
- Start in ${$.language==="pt"?"Brazilian Portuguese":"English"}, and follow the user's language.`,delegation:{type:"client"},audio:{output:{voice:$.voice}},store:!1}}class yq1{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:HU5({...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:ns.object({session:ns.object({id:ns.string().min(1)}),transport:ns.object({type:ns.literal("webrtc"),sdp:ns.string().min(1).max(1e5)})}).parse(await Z.json()).transport.sdp}}}var iE8=L(()=>{bB()});var pE8;var nE8=L(()=>{pE8=[{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 gq1($){return{conversation_config:{agent:{first_message:"",language:"en",prompt:{prompt:Xi$,llm:$.conversationModel,thinking_budget:0,max_tokens:512,tools:pE8.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:vO/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 tE8=L(()=>{bB();nE8()});import{z as rJ}from"zod";import{createHash as FU5,createHmac as UU5}from"crypto";class Eh0{config;conversationKey;configurationKey;constructor($){this.config=$;this.configurationKey=FU5("sha256").update(JSON.stringify(gq1($))).digest("hex"),this.conversationKey=UU5("sha256",$.apiKey).update(this.configurationKey).digest("hex")}forConversationModel($){return $===this.config.conversationModel?this:new Eh0({...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}=rJ.object({agents:rJ.array(rJ.object({agent_id:rJ.string(),name:rJ.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 rJ.object({platform_settings:rJ.object({auth:rJ.object({enable_auth:rJ.literal(!0)})})}).parse(await J.json()),Y.agent_id}let X=await this.request("/convai/agents/create",{name:$,...gq1(this.config)},AbortSignal.timeout(15000));return rJ.object({agent_id:rJ.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 rJ.object({token:rJ.string().min(1)}).parse(await Z.json()).token}async createTranscriptionToken(){let $=await this.request("/single-use-token/realtime_scribe",{},AbortSignal.timeout(15000));return rJ.object({token:rJ.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 oE8=L(()=>{tE8()});import{createHmac as NU5,timingSafeEqual as BU5}from"crypto";import{z as ts}from"zod";function aE8($,Z){if(!Z)throw Error("Voice requires a shared authentication secret");return NU5("sha256",Z).update(`studio-voice-session:v1:${$}`).digest("base64url")}function rE8($,Z){let Q=Buffer.from(JSON.stringify(sE8.parse($))).toString("base64url");return`${Q}.${aE8(Q,Z)}`}function eE8($,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(aE8(X,Z)),W=Buffer.from(J);if(W.length!==G.length||!BU5(W,G))return null;try{let K=sE8.safeParse(JSON.parse(Buffer.from(X,"base64url").toString()));if(!K.success||K.data.expiresAt<=Q||K.data.expiresAt>Q+vO)return null;return K.data}catch{return null}}var sE8;var $P8=L(()=>{bB();sE8=ts.object({sessionId:ts.string().uuid(),organizationId:ts.string().min(1).max(256),userId:ts.string().min(1).max(256),threadId:ts.string().min(1).max(256),expiresAt:ts.number().int().positive()})});import{z as hq1}from"zod";function ZP8($,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 uq1.parse({provider:Q,model:Z?.voice_model??(Q==="openai"?$.openaiLiveModel:$.elevenlabsConversationModel)})}var uq1;var QP8=L(()=>{uq1=hq1.object({provider:hq1.enum(["elevenlabs","openai"]),model:hq1.string().trim().min(1).max(128)})});import{createHash as DU5}from"crypto";import{z as os}from"zod";function ss($){return`user.${DU5("sha256").update(JSON.stringify([$.organizationId,$.userId])).digest("hex")}`}class mq1{deps;kvPromise;constructor($){this.deps=$}kv(){let $=this.deps.getConnection();if(!$||$.isClosed())throw new R1(503,{message:"Voice transport is unavailable"});return this.kvPromise??=new YP8.Kvm(zh0.jetstream($)).create("STUDIO_VOICE_SESSIONS",{storage:zh0.StorageType.Memory,ttl:XP8.nanos(vO),max_bytes:10485760}).catch((Z)=>{throw this.kvPromise=void 0,Z}),this.kvPromise}adapter(){if(!this.deps.adapter)throw new R1(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=ZP8(this.deps.defaults,Y)}catch{throw new R1(503,{message:"Voice configuration is invalid"})}let J=X?this.deps.conversationAdapters[X.provider]:this.adapter();if(!J)throw new R1(503,{message:"Voice is not configured on this deployment"});let G={...$,sessionId:crypto.randomUUID(),expiresAt:Date.now()+vO},W=rE8(G,this.deps.secret),K=await this.kv(),H=ss(G),F=await K.get(H),U=F?.operation==="PUT"?Ph0.parse(F.json()):null,N=lq1.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 R1(409,{message:"Close your other voice session before starting a new one"})}try{if(X&&"createSession"in J){let D=await J.createSession({language:Q,model:X.model,safetyIdentifier:ss($)});return{token:W,...D,expiresAt:G.expiresAt}}let B=await this.adapter().createTranscriptionToken();return{token:W,transcriptionToken:B,expiresAt:G.expiresAt}}catch(B){throw await this.release(G),B}}authorize($,Z){let Q=eE8(Z,this.deps.secret);if(!Q||Q.organizationId!==$.organizationId||Q.userId!==$.userId||Q.threadId!==$.threadId)throw new R1(403,{message:"Invalid voice session"});return Q}async connect($,Z){let Q=this.authorize($,Z.token),Y=await this.kv(),X=ss(Q),J=await Y.get(X),G=J?.operation==="PUT"?Ph0.parse(J.json()):null;if(!J||!G||G.sessionId!==Q.sessionId||G.expiresAt<=Date.now())throw new R1(403,{message:"Voice session expired"});let W=G.conversation?this.deps.conversationAdapters[G.conversation.provider]:null;if(!W?.negotiate||!G.conversation)throw new R1(409,{message:"Voice session does not support SDP negotiation"});if(G.connected)throw new R1(409,{message:"Voice session already connected"});try{await Y.update(X,lq1.encode(JSON.stringify({...G,connected:!0})),J.revision)}catch{throw new R1(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=ss(X);for(let W=0;;W++){let K=await J.get(G),H=K?.operation==="PUT"?Ph0.parse(K.json()):null;if(!K||!H||H.sessionId!==X.sessionId||H.expiresAt<=Date.now())throw new R1(403,{message:"Voice session expired"});if(H.characters+Q.length>24000||H.requests>=120)throw new R1(429,{message:"Voice session speech limit reached"});try{await J.update(G,lq1.encode(JSON.stringify({...H,characters:H.characters+Q.length,requests:H.requests+1})),K.revision);break}catch{if(W>=2)throw new R1(409,{message:"Voice session is busy"})}}return this.adapter().synthesize(Q,Y)}async release($){let Z=await this.kv(),Q=await Z.get(ss($));if(Q?.operation==="PUT"&&Ph0.parse(Q.json()).sessionId===$.sessionId)await Z.delete(ss($),{previousSeq:Q.revision})}async revoke($,Z){await this.release(this.authorize($,Z))}}var zh0,YP8,XP8,Ph0,lq1;var JP8=L(()=>{F3();bB();$P8();QP8();zh0=_(nH(),1),YP8=_(Pq(),1),XP8=_(UA(),1),Ph0=os.object({sessionId:os.string().uuid(),expiresAt:os.number(),connected:os.boolean().optional(),conversation:uq1.optional(),characters:os.number().int().nonnegative(),requests:os.number().int().nonnegative()}),lq1=new TextEncoder});import{z as c1}from"zod";function wD($,Z="invalid_request_error",Q=null,Y=null){return{error:{message:$,type:Z,param:Q,code:Y}}}function qU5($){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 RU5($,Z,Q){try{return JSON.parse($)}catch{throw new KP8(`Invalid JSON in tool call arguments for function '${Q}' (tool_call_id: ${Z}): ${$}`)}}function MU5($){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:RU5(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 VU5($){let Z=$.map((Q)=>{let Y=Q.function.parameters?CN(Q.function.parameters):CN({type:"object",properties:{}});return[Q.function.name,a$({description:Q.function.description,inputSchema:Y})]});return Object.fromEntries(Z)}function IU5($){if(!$)return;return{openai:{response_format:$}}}function kU5(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function GP8($,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 WP8($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var LU5=256,OU5,jU5,wU5,EU5,PU5,zU5,AU5,TU5,KP8,HP8,FP8;var UP8=L(()=>{u4();H8();_s();LU();OU5=c1.object({type:c1.literal("function"),function:c1.object({name:c1.string(),description:c1.string().optional(),parameters:c1.record(c1.string(),c1.unknown()).optional()})}),jU5=c1.object({id:c1.string(),type:c1.literal("function"),function:c1.object({name:c1.string(),arguments:c1.string()})}),wU5=c1.discriminatedUnion("role",[c1.object({role:c1.literal("system"),content:c1.string(),name:c1.string().optional()}),c1.object({role:c1.literal("user"),content:c1.union([c1.string(),c1.array(c1.union([c1.object({type:c1.literal("text"),text:c1.string()}),c1.object({type:c1.literal("image_url"),image_url:c1.object({url:c1.string(),detail:c1.string().optional()})})]))]),name:c1.string().optional()}),c1.object({role:c1.literal("assistant"),content:c1.string().nullable().optional(),name:c1.string().optional(),tool_calls:c1.array(jU5).optional()}),c1.object({role:c1.literal("tool"),content:c1.string(),tool_call_id:c1.string()})]),EU5=c1.object({type:c1.literal("text")}),PU5=c1.object({type:c1.literal("json_object")}),zU5=c1.object({type:c1.literal("json_schema"),json_schema:c1.object({name:c1.string(),description:c1.string().optional(),schema:c1.record(c1.string(),c1.unknown()),strict:c1.boolean().optional()})}),AU5=c1.union([EU5,PU5,zU5]),TU5=c1.object({model:c1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:c1.array(wU5),stream:c1.boolean().optional().default(!1),temperature:c1.number().min(0).max(2).optional(),max_tokens:c1.number().positive().optional(),top_p:c1.number().min(0).max(1).optional(),frequency_penalty:c1.number().min(-2).max(2).optional(),presence_penalty:c1.number().min(-2).max(2).optional(),stop:c1.union([c1.string(),c1.array(c1.string())]).optional(),tools:c1.array(OU5).optional(),tool_choice:c1.union([c1.literal("auto"),c1.literal("none"),c1.literal("required"),c1.object({type:c1.literal("function"),function:c1.object({name:c1.string()})})]).optional(),response_format:AU5.optional(),user:c1.string().optional()});KP8=class KP8 extends Error{constructor($){super($);this.name="MessageConversionError"}};HP8=new $1;HP8.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),Q=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(wD("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(wD("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(wD("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Y=await $.req.json(),X=TU5.safeParse(Y);if(!X.success){let j=X.error.issues[0]??{message:"Invalid request",path:[]};return $.json(wD(`Invalid request: ${j.message}`,"invalid_request_error",j.path.length>0?j.path.join("."):null),400)}let J=X.data,G=qU5(J.model);if(!G)return $.json(wD("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 w=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((E)=>DT(E.providerId));if(!w)return $.json(wD("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=w.id}let H;try{H=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(wD(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),U=MU5(J.messages),N=J.tools?VU5(J.tools):void 0,B=IU5(J.response_format),D=kU5(),O=Math.floor(Date.now()/1000);if(J.stream)return Sj($,async(j)=>{let w=GP8(F,U,N,J,B,$.req.raw.signal);try{let E=Rn(w),P=!1,T=0,z="",A=async()=>{if(z.length===0)return;let M=z;z="",await j.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:O,model:J.model,choices:[{index:0,delta:{content:M},finish_reason:null}]})})};for await(let M of E.stream){if(!P&&(M.type==="text-delta"||M.type==="tool-call"))await j.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:O,model:J.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),P=!0;if(M.type==="text-delta"){if(z+=M.text,z.length>=LU5)await A()}else if(M.type==="tool-call"){await A();let f=T++;await j.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:O,model:J.model,choices:[{index:0,delta:{tool_calls:[{index:f,id:M.toolCallId,type:"function",function:{name:M.toolName,arguments:JSON.stringify(M.input)}}]},finish_reason:null}]})})}else if(M.type==="finish")await A(),await j.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:O,model:J.model,choices:[{index:0,delta:{},finish_reason:WP8(M.finishReason)}],usage:M.totalUsage?{prompt_tokens:M.totalUsage.inputTokens??0,completion_tokens:M.totalUsage.outputTokens??0,total_tokens:M.totalUsage.totalTokens??0}:void 0})})}await A(),await j.writeSSE({data:"[DONE]"})}catch(E){let P=E;console.error("[openai-compat:stream] Error:",P.message),await j.writeSSE({data:JSON.stringify({error:{message:P.message,type:"server_error"}})})}});else{let j=GP8(F,U,N,J,B,$.req.raw.signal),w=await fO(j),E={role:"assistant",content:w.text||null};if(w.toolCalls&&w.toolCalls.length>0)E.tool_calls=w.toolCalls.map((P)=>({id:P.toolCallId,type:"function",function:{name:P.toolName,arguments:JSON.stringify("input"in P?P.input:{})}})),E.content=null;return $.json({id:D,object:"chat.completion",created:O,model:J.model,choices:[{index:0,message:E,finish_reason:WP8(w.finishReason)}],usage:{prompt_tokens:w.usage?.inputTokens??0,completion_tokens:w.usage?.outputTokens??0,total_tokens:w.usage?.totalTokens??0}})}}catch(Y){let X=Y;if(X.name==="AbortError")return $.json(wD("Request aborted","invalid_request_error"),400);if(X.name==="MessageConversionError")return $.json(wD(X.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",X.message,X.stack),$.json(wD(X.message,"server_error"),500)}});FP8=HP8});function CU5($){if(typeof $!=="object"||$===null)return!1;let Q=$.repository?.url;return typeof Q==="string"&&Q.length>0}function NP8(){let $=new $1;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=k0(Q);if(!Y)return Z.json({error:"Authentication required"},401);let J=(Z.req.query("site")??"").trim().toLowerCase();if(!l5(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||_9(H))continue;let F=await Q.storage.virtualMcps.list(H.id);for(let U of F){if(fT(U)!==J)continue;if(!CU5(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 BP8=L(()=>{H8();HX()});var Ah0;var cq1=L(()=>{Ah0={name:"decocms",version:"4.538.1",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run dev:server","dev:server":"NODE_ENV=development bun --env-file=.env --watch run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^4.0.58","@ai-sdk/google":"^4.0.76","@ai-sdk/openai":"^4.0.71","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^3.1.0","@opentelemetry/core":"^2.6.0",kysely:"^0.28.12","posthog-node":"^5.0.0"},devDependencies:{"@ai-sdk/provider":"^4.0.17","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/blocks":"8.8.0","@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 vU5(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??_U5}}var DP8,_U5="https://ph.studio.decocms.com",LP8;var OP8=L(()=>{H8();Ee();ph();B9();l1();wU();C21();cq1();DP8=new $1;DP8.get("/",($)=>{let Z={version:Ah0.version,theme:S4$(),...WF().logo&&{logo:WF().logo},...tO()&&{internalUrl:S8$()},...B0().enableDecoImport&&{enableDecoImport:!0},hostingEnabled:!!B0().controlplaneRestUrl&&!!B0().controlplaneServiceToken,hostingControlPlaneGa:B0().hostingControlPlaneGa,monitorEnabled:!!B0().clickhouseAnalyticsUrl&&!!B0().clickhouseAnalyticsPassword,monitorGa:B0().monitorGa,orderMonitorEnabled:!!B0().orderMonitorIngestUrl&&oJ(),plansEnabled:B0().plansEnabled,auth:CU8(),posthog:vU5(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:bU()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});LP8=DP8});import{z as M$}from"zod";var bU5,jP8;var wP8=L(()=>{bU5=M$.object({check_id:M$.string(),title:M$.string(),description:M$.string().optional(),impact:M$.string().optional(),why:M$.string().optional(),category:M$.string(),severity:M$.string(),value_band:M$.string().optional(),value_driver:M$.string().optional(),controllability:M$.string().optional(),pages:M$.array(M$.string()),tasks:M$.array(M$.string()),evidence:M$.string(),sample_scope:M$.string().optional(),sources:M$.array(M$.string())}),jP8=M$.object({domain:M$.string(),brand:M$.string(),favicon:M$.string().optional(),scanned_at:M$.string().nullable(),lang:M$.string(),score:M$.number().nullable(),band:M$.string().nullable(),totals:M$.object({measured:M$.number(),registry_total:M$.number(),passed:M$.number(),failed:M$.number(),blocked:M$.number()}),buckets:M$.array(M$.object({id:M$.enum(["critical","important","worth"]),label:M$.string(),items:M$.array(bU5)})),passing:M$.object({count:M$.number(),items:M$.array(M$.object({check_id:M$.string(),title:M$.string()}))}),not_measured:M$.object({count:M$.number(),groups:M$.array(M$.object({reason:M$.string(),label:M$.string(),count:M$.number(),checks:M$.array(M$.string())}))}),categories:M$.array(M$.object({key:M$.string(),label:M$.string(),score:M$.number().nullable(),band:M$.string().nullable(),pass:M$.number(),fail:M$.number()})),screenshots:M$.array(M$.object({url:M$.string(),page_type:M$.string().optional(),viewport:M$.enum(["desktop","mobile"]),image_url:M$.string()}))})});function EP8($,Z,Q){let Y=Q?`?${new URLSearchParams({lang:Q}).toString()}`:"";return`${xK({})}/api/v2/public/diagnostics/${encodeURIComponent($)}/onepager${Z}${Y}`}async function Th0($,Z={}){let Q=await fetch(EP8($,"",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 jP8.parse(await Q.json())}async function PP8($,Z={}){let Q=await fetch(EP8($,".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 dq1=L(()=>{wP8();dL()});import{join as zP8}from"path";async function fU5($){try{let Z=await Th0($,{signal:AbortSignal.timeout(xU5)});if(!Z?.scanned_at)return null;return{brand:Z.brand.trim()||rw1($),...Z.score!==null?{score:Z.score}:{}}}catch{return null}}function DG($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function yU5($,Z){let Q=Tu($),Y=Z?.brand?.trim()||rw1(Q),X=kJ8(Q,128),G=`${(B0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(Q)}`,{title:W,description:K}=CJ8({brand:Y,domain:Q,score:Z?.score}),H=`${G}/og.png`,F=`${Y} Deco Score by decocms`;return[`<title>${DG(W)}</title>`,`<meta name="description" content="${DG(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="${DG(W)}" />`,`<meta property="og:description" content="${DG(K)}" />`,`<meta property="og:url" content="${DG(G)}" />`,`<meta property="og:image" content="${DG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${DG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${DG(W)}" />`,`<meta name="twitter:description" content="${DG(K)}" />`,`<meta name="twitter:image" content="${DG(H)}" />`,`<meta name="twitter:image:alt" content="${DG(F)}" />`,`<link rel="canonical" href="${DG(G)}" />`,`<link rel="alternate" type="text/markdown" href="${DG(G)}.md" />`,`<link rel="icon" href="${DG(X)}" sizes="any" />`].join(`
4571
+ Start in ${$.language==="pt"?"Brazilian Portuguese":"English"}, and follow the user's language.`,delegation:{type:"client"},audio:{output:{voice:$.voice}},store:!1}}class yq1{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:HU5({...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:ns.object({session:ns.object({id:ns.string().min(1)}),transport:ns.object({type:ns.literal("webrtc"),sdp:ns.string().min(1).max(1e5)})}).parse(await Z.json()).transport.sdp}}}var iE8=L(()=>{bB()});var pE8;var nE8=L(()=>{pE8=[{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 gq1($){return{conversation_config:{agent:{first_message:"",language:"en",prompt:{prompt:Xi$,llm:$.conversationModel,thinking_budget:0,max_tokens:512,tools:pE8.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:vO/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 tE8=L(()=>{bB();nE8()});import{z as rJ}from"zod";import{createHash as FU5,createHmac as UU5}from"crypto";class Eh0{config;conversationKey;configurationKey;constructor($){this.config=$;this.configurationKey=FU5("sha256").update(JSON.stringify(gq1($))).digest("hex"),this.conversationKey=UU5("sha256",$.apiKey).update(this.configurationKey).digest("hex")}forConversationModel($){return $===this.config.conversationModel?this:new Eh0({...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}=rJ.object({agents:rJ.array(rJ.object({agent_id:rJ.string(),name:rJ.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 rJ.object({platform_settings:rJ.object({auth:rJ.object({enable_auth:rJ.literal(!0)})})}).parse(await J.json()),Y.agent_id}let X=await this.request("/convai/agents/create",{name:$,...gq1(this.config)},AbortSignal.timeout(15000));return rJ.object({agent_id:rJ.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 rJ.object({token:rJ.string().min(1)}).parse(await Z.json()).token}async createTranscriptionToken(){let $=await this.request("/single-use-token/realtime_scribe",{},AbortSignal.timeout(15000));return rJ.object({token:rJ.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 oE8=L(()=>{tE8()});import{createHmac as NU5,timingSafeEqual as BU5}from"crypto";import{z as ts}from"zod";function aE8($,Z){if(!Z)throw Error("Voice requires a shared authentication secret");return NU5("sha256",Z).update(`studio-voice-session:v1:${$}`).digest("base64url")}function rE8($,Z){let Q=Buffer.from(JSON.stringify(sE8.parse($))).toString("base64url");return`${Q}.${aE8(Q,Z)}`}function eE8($,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(aE8(X,Z)),W=Buffer.from(J);if(W.length!==G.length||!BU5(W,G))return null;try{let K=sE8.safeParse(JSON.parse(Buffer.from(X,"base64url").toString()));if(!K.success||K.data.expiresAt<=Q||K.data.expiresAt>Q+vO)return null;return K.data}catch{return null}}var sE8;var $P8=L(()=>{bB();sE8=ts.object({sessionId:ts.string().uuid(),organizationId:ts.string().min(1).max(256),userId:ts.string().min(1).max(256),threadId:ts.string().min(1).max(256),expiresAt:ts.number().int().positive()})});import{z as hq1}from"zod";function ZP8($,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 uq1.parse({provider:Q,model:Z?.voice_model??(Q==="openai"?$.openaiLiveModel:$.elevenlabsConversationModel)})}var uq1;var QP8=L(()=>{uq1=hq1.object({provider:hq1.enum(["elevenlabs","openai"]),model:hq1.string().trim().min(1).max(128)})});import{createHash as DU5}from"crypto";import{z as os}from"zod";function ss($){return`user.${DU5("sha256").update(JSON.stringify([$.organizationId,$.userId])).digest("hex")}`}class mq1{deps;kvPromise;constructor($){this.deps=$}kv(){let $=this.deps.getConnection();if(!$||$.isClosed())throw new R1(503,{message:"Voice transport is unavailable"});return this.kvPromise??=new YP8.Kvm(zh0.jetstream($)).create("STUDIO_VOICE_SESSIONS",{storage:zh0.StorageType.Memory,ttl:XP8.nanos(vO),max_bytes:10485760}).catch((Z)=>{throw this.kvPromise=void 0,Z}),this.kvPromise}adapter(){if(!this.deps.adapter)throw new R1(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=ZP8(this.deps.defaults,Y)}catch{throw new R1(503,{message:"Voice configuration is invalid"})}let J=X?this.deps.conversationAdapters[X.provider]:this.adapter();if(!J)throw new R1(503,{message:"Voice is not configured on this deployment"});let G={...$,sessionId:crypto.randomUUID(),expiresAt:Date.now()+vO},W=rE8(G,this.deps.secret),K=await this.kv(),H=ss(G),F=await K.get(H),U=F?.operation==="PUT"?Ph0.parse(F.json()):null,N=lq1.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 R1(409,{message:"Close your other voice session before starting a new one"})}try{if(X&&"createSession"in J){let D=await J.createSession({language:Q,model:X.model,safetyIdentifier:ss($)});return{token:W,...D,expiresAt:G.expiresAt}}let B=await this.adapter().createTranscriptionToken();return{token:W,transcriptionToken:B,expiresAt:G.expiresAt}}catch(B){throw await this.release(G),B}}authorize($,Z){let Q=eE8(Z,this.deps.secret);if(!Q||Q.organizationId!==$.organizationId||Q.userId!==$.userId||Q.threadId!==$.threadId)throw new R1(403,{message:"Invalid voice session"});return Q}async connect($,Z){let Q=this.authorize($,Z.token),Y=await this.kv(),X=ss(Q),J=await Y.get(X),G=J?.operation==="PUT"?Ph0.parse(J.json()):null;if(!J||!G||G.sessionId!==Q.sessionId||G.expiresAt<=Date.now())throw new R1(403,{message:"Voice session expired"});let W=G.conversation?this.deps.conversationAdapters[G.conversation.provider]:null;if(!W?.negotiate||!G.conversation)throw new R1(409,{message:"Voice session does not support SDP negotiation"});if(G.connected)throw new R1(409,{message:"Voice session already connected"});try{await Y.update(X,lq1.encode(JSON.stringify({...G,connected:!0})),J.revision)}catch{throw new R1(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=ss(X);for(let W=0;;W++){let K=await J.get(G),H=K?.operation==="PUT"?Ph0.parse(K.json()):null;if(!K||!H||H.sessionId!==X.sessionId||H.expiresAt<=Date.now())throw new R1(403,{message:"Voice session expired"});if(H.characters+Q.length>24000||H.requests>=120)throw new R1(429,{message:"Voice session speech limit reached"});try{await J.update(G,lq1.encode(JSON.stringify({...H,characters:H.characters+Q.length,requests:H.requests+1})),K.revision);break}catch{if(W>=2)throw new R1(409,{message:"Voice session is busy"})}}return this.adapter().synthesize(Q,Y)}async release($){let Z=await this.kv(),Q=await Z.get(ss($));if(Q?.operation==="PUT"&&Ph0.parse(Q.json()).sessionId===$.sessionId)await Z.delete(ss($),{previousSeq:Q.revision})}async revoke($,Z){await this.release(this.authorize($,Z))}}var zh0,YP8,XP8,Ph0,lq1;var JP8=L(()=>{F3();bB();$P8();QP8();zh0=_(nH(),1),YP8=_(Pq(),1),XP8=_(UA(),1),Ph0=os.object({sessionId:os.string().uuid(),expiresAt:os.number(),connected:os.boolean().optional(),conversation:uq1.optional(),characters:os.number().int().nonnegative(),requests:os.number().int().nonnegative()}),lq1=new TextEncoder});import{z as c1}from"zod";function wD($,Z="invalid_request_error",Q=null,Y=null){return{error:{message:$,type:Z,param:Q,code:Y}}}function qU5($){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 RU5($,Z,Q){try{return JSON.parse($)}catch{throw new KP8(`Invalid JSON in tool call arguments for function '${Q}' (tool_call_id: ${Z}): ${$}`)}}function MU5($){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:RU5(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 VU5($){let Z=$.map((Q)=>{let Y=Q.function.parameters?CN(Q.function.parameters):CN({type:"object",properties:{}});return[Q.function.name,a$({description:Q.function.description,inputSchema:Y})]});return Object.fromEntries(Z)}function IU5($){if(!$)return;return{openai:{response_format:$}}}function kU5(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function GP8($,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 WP8($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var LU5=256,OU5,jU5,wU5,EU5,PU5,zU5,AU5,TU5,KP8,HP8,FP8;var UP8=L(()=>{u4();H8();_s();LU();OU5=c1.object({type:c1.literal("function"),function:c1.object({name:c1.string(),description:c1.string().optional(),parameters:c1.record(c1.string(),c1.unknown()).optional()})}),jU5=c1.object({id:c1.string(),type:c1.literal("function"),function:c1.object({name:c1.string(),arguments:c1.string()})}),wU5=c1.discriminatedUnion("role",[c1.object({role:c1.literal("system"),content:c1.string(),name:c1.string().optional()}),c1.object({role:c1.literal("user"),content:c1.union([c1.string(),c1.array(c1.union([c1.object({type:c1.literal("text"),text:c1.string()}),c1.object({type:c1.literal("image_url"),image_url:c1.object({url:c1.string(),detail:c1.string().optional()})})]))]),name:c1.string().optional()}),c1.object({role:c1.literal("assistant"),content:c1.string().nullable().optional(),name:c1.string().optional(),tool_calls:c1.array(jU5).optional()}),c1.object({role:c1.literal("tool"),content:c1.string(),tool_call_id:c1.string()})]),EU5=c1.object({type:c1.literal("text")}),PU5=c1.object({type:c1.literal("json_object")}),zU5=c1.object({type:c1.literal("json_schema"),json_schema:c1.object({name:c1.string(),description:c1.string().optional(),schema:c1.record(c1.string(),c1.unknown()),strict:c1.boolean().optional()})}),AU5=c1.union([EU5,PU5,zU5]),TU5=c1.object({model:c1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:c1.array(wU5),stream:c1.boolean().optional().default(!1),temperature:c1.number().min(0).max(2).optional(),max_tokens:c1.number().positive().optional(),top_p:c1.number().min(0).max(1).optional(),frequency_penalty:c1.number().min(-2).max(2).optional(),presence_penalty:c1.number().min(-2).max(2).optional(),stop:c1.union([c1.string(),c1.array(c1.string())]).optional(),tools:c1.array(OU5).optional(),tool_choice:c1.union([c1.literal("auto"),c1.literal("none"),c1.literal("required"),c1.object({type:c1.literal("function"),function:c1.object({name:c1.string()})})]).optional(),response_format:AU5.optional(),user:c1.string().optional()});KP8=class KP8 extends Error{constructor($){super($);this.name="MessageConversionError"}};HP8=new $1;HP8.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),Q=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(wD("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(wD("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(wD("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Y=await $.req.json(),X=TU5.safeParse(Y);if(!X.success){let j=X.error.issues[0]??{message:"Invalid request",path:[]};return $.json(wD(`Invalid request: ${j.message}`,"invalid_request_error",j.path.length>0?j.path.join("."):null),400)}let J=X.data,G=qU5(J.model);if(!G)return $.json(wD("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 w=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((E)=>DT(E.providerId));if(!w)return $.json(wD("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=w.id}let H;try{H=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(wD(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),U=MU5(J.messages),N=J.tools?VU5(J.tools):void 0,B=IU5(J.response_format),D=kU5(),O=Math.floor(Date.now()/1000);if(J.stream)return Sj($,async(j)=>{let w=GP8(F,U,N,J,B,$.req.raw.signal);try{let E=Rn(w),P=!1,T=0,z="",A=async()=>{if(z.length===0)return;let M=z;z="",await j.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:O,model:J.model,choices:[{index:0,delta:{content:M},finish_reason:null}]})})};for await(let M of E.stream){if(!P&&(M.type==="text-delta"||M.type==="tool-call"))await j.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:O,model:J.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),P=!0;if(M.type==="text-delta"){if(z+=M.text,z.length>=LU5)await A()}else if(M.type==="tool-call"){await A();let f=T++;await j.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:O,model:J.model,choices:[{index:0,delta:{tool_calls:[{index:f,id:M.toolCallId,type:"function",function:{name:M.toolName,arguments:JSON.stringify(M.input)}}]},finish_reason:null}]})})}else if(M.type==="finish")await A(),await j.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:O,model:J.model,choices:[{index:0,delta:{},finish_reason:WP8(M.finishReason)}],usage:M.totalUsage?{prompt_tokens:M.totalUsage.inputTokens??0,completion_tokens:M.totalUsage.outputTokens??0,total_tokens:M.totalUsage.totalTokens??0}:void 0})})}await A(),await j.writeSSE({data:"[DONE]"})}catch(E){let P=E;console.error("[openai-compat:stream] Error:",P.message),await j.writeSSE({data:JSON.stringify({error:{message:P.message,type:"server_error"}})})}});else{let j=GP8(F,U,N,J,B,$.req.raw.signal),w=await fO(j),E={role:"assistant",content:w.text||null};if(w.toolCalls&&w.toolCalls.length>0)E.tool_calls=w.toolCalls.map((P)=>({id:P.toolCallId,type:"function",function:{name:P.toolName,arguments:JSON.stringify("input"in P?P.input:{})}})),E.content=null;return $.json({id:D,object:"chat.completion",created:O,model:J.model,choices:[{index:0,message:E,finish_reason:WP8(w.finishReason)}],usage:{prompt_tokens:w.usage?.inputTokens??0,completion_tokens:w.usage?.outputTokens??0,total_tokens:w.usage?.totalTokens??0}})}}catch(Y){let X=Y;if(X.name==="AbortError")return $.json(wD("Request aborted","invalid_request_error"),400);if(X.name==="MessageConversionError")return $.json(wD(X.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",X.message,X.stack),$.json(wD(X.message,"server_error"),500)}});FP8=HP8});function CU5($){if(typeof $!=="object"||$===null)return!1;let Q=$.repository?.url;return typeof Q==="string"&&Q.length>0}function NP8(){let $=new $1;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=k0(Q);if(!Y)return Z.json({error:"Authentication required"},401);let J=(Z.req.query("site")??"").trim().toLowerCase();if(!l5(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||_9(H))continue;let F=await Q.storage.virtualMcps.list(H.id);for(let U of F){if(fT(U)!==J)continue;if(!CU5(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 BP8=L(()=>{H8();HX()});var Ah0;var cq1=L(()=>{Ah0={name:"decocms",version:"4.539.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 dev:server","dev:server":"NODE_ENV=development bun --env-file=.env --watch run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^4.0.58","@ai-sdk/google":"^4.0.76","@ai-sdk/openai":"^4.0.71","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^3.1.0","@opentelemetry/core":"^2.6.0",kysely:"^0.28.12","posthog-node":"^5.0.0"},devDependencies:{"@ai-sdk/provider":"^4.0.17","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/blocks":"8.8.0","@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 vU5(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??_U5}}var DP8,_U5="https://ph.studio.decocms.com",LP8;var OP8=L(()=>{H8();Ee();ph();B9();l1();wU();C21();cq1();DP8=new $1;DP8.get("/",($)=>{let Z={version:Ah0.version,theme:S4$(),...WF().logo&&{logo:WF().logo},...tO()&&{internalUrl:S8$()},...B0().enableDecoImport&&{enableDecoImport:!0},hostingEnabled:!!B0().controlplaneRestUrl&&!!B0().controlplaneServiceToken,hostingControlPlaneGa:B0().hostingControlPlaneGa,monitorEnabled:!!B0().clickhouseAnalyticsUrl&&!!B0().clickhouseAnalyticsPassword,monitorGa:B0().monitorGa,orderMonitorEnabled:!!B0().orderMonitorIngestUrl&&oJ(),plansEnabled:B0().plansEnabled,auth:CU8(),posthog:vU5(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:bU()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});LP8=DP8});import{z as M$}from"zod";var bU5,jP8;var wP8=L(()=>{bU5=M$.object({check_id:M$.string(),title:M$.string(),description:M$.string().optional(),impact:M$.string().optional(),why:M$.string().optional(),category:M$.string(),severity:M$.string(),value_band:M$.string().optional(),value_driver:M$.string().optional(),controllability:M$.string().optional(),pages:M$.array(M$.string()),tasks:M$.array(M$.string()),evidence:M$.string(),sample_scope:M$.string().optional(),sources:M$.array(M$.string())}),jP8=M$.object({domain:M$.string(),brand:M$.string(),favicon:M$.string().optional(),scanned_at:M$.string().nullable(),lang:M$.string(),score:M$.number().nullable(),band:M$.string().nullable(),totals:M$.object({measured:M$.number(),registry_total:M$.number(),passed:M$.number(),failed:M$.number(),blocked:M$.number()}),buckets:M$.array(M$.object({id:M$.enum(["critical","important","worth"]),label:M$.string(),items:M$.array(bU5)})),passing:M$.object({count:M$.number(),items:M$.array(M$.object({check_id:M$.string(),title:M$.string()}))}),not_measured:M$.object({count:M$.number(),groups:M$.array(M$.object({reason:M$.string(),label:M$.string(),count:M$.number(),checks:M$.array(M$.string())}))}),categories:M$.array(M$.object({key:M$.string(),label:M$.string(),score:M$.number().nullable(),band:M$.string().nullable(),pass:M$.number(),fail:M$.number()})),screenshots:M$.array(M$.object({url:M$.string(),page_type:M$.string().optional(),viewport:M$.enum(["desktop","mobile"]),image_url:M$.string()}))})});function EP8($,Z,Q){let Y=Q?`?${new URLSearchParams({lang:Q}).toString()}`:"";return`${xK({})}/api/v2/public/diagnostics/${encodeURIComponent($)}/onepager${Z}${Y}`}async function Th0($,Z={}){let Q=await fetch(EP8($,"",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 jP8.parse(await Q.json())}async function PP8($,Z={}){let Q=await fetch(EP8($,".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 dq1=L(()=>{wP8();dL()});import{join as zP8}from"path";async function fU5($){try{let Z=await Th0($,{signal:AbortSignal.timeout(xU5)});if(!Z?.scanned_at)return null;return{brand:Z.brand.trim()||rw1($),...Z.score!==null?{score:Z.score}:{}}}catch{return null}}function DG($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function yU5($,Z){let Q=Tu($),Y=Z?.brand?.trim()||rw1(Q),X=kJ8(Q,128),G=`${(B0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(Q)}`,{title:W,description:K}=CJ8({brand:Y,domain:Q,score:Z?.score}),H=`${G}/og.png`,F=`${Y} Deco Score by decocms`;return[`<title>${DG(W)}</title>`,`<meta name="description" content="${DG(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="${DG(W)}" />`,`<meta property="og:description" content="${DG(K)}" />`,`<meta property="og:url" content="${DG(G)}" />`,`<meta property="og:image" content="${DG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${DG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${DG(W)}" />`,`<meta name="twitter:description" content="${DG(K)}" />`,`<meta name="twitter:image" content="${DG(H)}" />`,`<meta name="twitter:image:alt" content="${DG(F)}" />`,`<link rel="canonical" href="${DG(G)}" />`,`<link rel="alternate" type="text/markdown" href="${DG(G)}.md" />`,`<link rel="icon" href="${DG(X)}" sizes="any" />`].join(`
4572
4572
  `)}function gU5($,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}
4573
4573
  </head>`)}function AP8($){let Z=new $1;return Z.get("/:domain/og.png",async(Q)=>{let Y=Tu(Q.req.param("domain")),X=async()=>{let J=$?Bun.file(zP8($,"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(`${xK({})}/api/v2/public/diagnostics/${encodeURIComponent(Y)}/og.png`,{signal:AbortSignal.timeout(hU5)}),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=Tu(Q.req.param("file").replace(/\.md$/,""));try{let X=await PP8(Y,{lang:Q.req.query("lang")?.trim()||void 0,signal:AbortSignal.timeout(uU5)});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=$?zP8($,"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 fU5(Tu(Y)),K=yU5(Y,W);return Q.html(gU5(G,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return Q.html(G)}}),Z}var xU5=2500,hU5=1e4,uU5=1e4;var TP8=L(()=>{H8();dL();dq1();l1()});function qh0($,Z){return fetch(`${xK({})}${$}`,Z)}async function lU5($,Z){let Q=await Th0($,{lang:Z});if(!Q)return{status:"not_found",report:null};return Q.scanned_at?{status:"ready",report:Q}:{status:"empty",report:null}}function dU5($){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 mU5,cU5=8192,bj,qP8=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},RP8;var MP8=L(()=>{H8();FG();ZH();dL();dq1();mU5=new Set(["complete","errored","terminated","unknown"]);bj=new $1;bj.use("*",async($,Z)=>{let Q=await U4.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});bj.use("/link-token/*",qP8);bj.use("/suggest",qP8);bj.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 lU5(Z,Q))}catch{return $.json({error:"report read failed"},502)}});bj.post("/run",b6({maxSize:cU5,onError:($)=>$.json({error:"request body too large"},413)}),async($)=>{let Z=$.get("reportUser"),Q;try{Q=await $.req.json()}catch{return $.json({error:"invalid JSON"},400)}let{domain:Y,distinctId:X}=dU5(Q);if(!Y)return $.json({error:"domain is required"},400);let J=Z?.email;try{let G=await qh0("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${dE({})}`},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)}});bj.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let Q=await qh0(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${dE({})}`}});if(!Q.ok)return $.json({error:`status HTTP ${Q.status}`},502);let X=(await Q.json()).status??"unknown",J={done:mU5.has(X),status:X};return $.json(J)}catch{return $.json({error:"status failed"},502)}});bj.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let Q=await qh0(`/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)}});bj.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let Q=await qh0(`/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:[]})}});RP8=bj});var iU5=1048576,iq1;var VP8=L(()=>{H8();FG();l1();L21();iq1=new $1;iq1.post("/webhook",b6({maxSize:iU5,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=B0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let Q=await $.req.text();if(!cF8(Q,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let X=dF8(Q);if(!X)return $.json({error:"invalid payload"},400);let J=await iF8(X);return console.log("stripe webhook",{eventId:X.id,type:X.type,livemode:X.livemode,...J}),$.json({received:!0})})});import{timingSafeEqual as pU5}from"crypto";function oU5($,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 pU5(Buffer.from(X),Buffer.from(Y))}function sU5($,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 IP8($){let Z=new $1;return Z.post("/webhook",b6({maxSize:nU5,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(!oU5(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"&&!tU5.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 n60().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=sU5(J??"",G);if(W.length===0)return Q.json({ok:!0,ignored:"no-pr"});let K=await aU5($,W);return Q.json({ok:!0,refreshed:K})}),Z}async function aU5($,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 K.storage.demoBoard.frozenItemIds(G.organizationId)).has(G.taskBoardItemId))continue;if(await Gv0(K,G.organizationId,G.taskBoardItemId)!==null)Q++}catch(W){console.error(`[github-webhook] pr card refresh failed for ${G.taskBoardItemId}:`,W)}}return Q}var nU5=5242880,tU5;var kP8=L(()=>{H8();FG();xX();I7();tU5=new Set(["check_suite","issue_comment"])});import{DBOS as nq1,SchedulerMode as rU5}from"@dbos-inc/dbos-sdk";async function $N5(){try{return await ZN5()}catch($){return console.warn(`[sandbox-credential-push] push failed: ${$ instanceof Error?$.message:String($)}`),null}}async function ZN5(){if(!p60())return null;let[{RemoteSandboxProvider:$},{SandboxProviderRouter:Z}]=await Promise.all([Promise.resolve().then(() => (nK1(),pK1)),Promise.resolve().then(() => (iK1(),dK1))]),Q=await n60(),Y=Q instanceof Z?Q.providers.kubernetes:Q;if(!(Y instanceof $))return null;let{db:X}=E8(),{sandboxes:J,pools:G}=await Y.list(),W=Date.now(),K=ym$({sandboxes:J,pools:G,records:await gm$(X,J,G),legacyPools:IC0(process.env.STUDIO_SANDBOX_TENANT_POOLS),now:W}),{batches:H,failed:F}=await hm$(K,oO0(X,new NJ(B0().encryptionKey)),{now:W,orgFsLifetimeMs:SC0}),U=0,N=0,B=0;for(let D of H)try{let O=await Y.pushCredentials(D);U+=O.stored,N+=O.kept}catch(O){B++,console.warn(`[sandbox-credential-push] a push batch failed: ${O instanceof Error?O.message:String(O)}`)}return{sandboxes:J.length,pushed:U,kept:N,refused:K.refused,failed:F+B}}async function QN5($,Z){let Q=await nq1.runStep($N5,{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 CP8(){if(pq1)return;if(!B0().agentSandboxEnabled||!p60())return;pq1=nq1.registerWorkflow(QN5,{name:"sandboxCredentialPushWorkflow"}),nq1.registerScheduled(pq1,{name:"sandboxCredentialPushWorkflow",crontab:eU5,mode:rU5.ExactlyOncePerIntervalWhenActive})}var eU5="1,11,21,31,41,51 * * * *",pq1=null;var SP8=L(()=>{bG();Sw();_31();_C0();kC0();xX();l1()});function _P8($){let Z=new wj($.db,new NJ($.encryptionKey)),Q=new $1;return Q.get("/attachments/:token",async(Y)=>{let X=Pr$(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 QQ(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 vP8=L(()=>{H8();Sw();TU1();gO()});function Rh0(){try{return B0().jiraSettleSeconds*1000}catch{return mz}}function bP8($,Z){let Q=Z.windowMs??mz,Y=$.at(-1);if(!Y)return null;if(Z.changeId!==void 0&&Y.id!==Z.changeId)return{kind:"superseded"};if(Z.now!==void 0&&Z.now-Y.at<Q)return{kind:"moving"};let X=YN5($,Q);if((X.id&&Y.toId?X.id===Y.toId:!1)||!X.id&&X.name===Y.to)return{kind:"returned",change:Y};return{kind:"moved",change:Y,from:X}}function YN5($,Z){for(let Y=$.length-2;Y>=0;Y--){let X=$[Y],J=$[Y+1];if(X&&J&&J.at-X.at>=Z)return{id:X.toId,name:X.to}}let Q=$[0];return{id:Q?.fromId??null,name:Q?.from??null}}var tq1=L(()=>{sO();l1()});function xP8($){if(typeof $!=="object"||$===null)return null;let Z=$;if(Z.webhookEvent!=="jira:issue_updated")return null;let Q=Z.issue?.id,Y=Z.issue?.key,X=Z.changelog?.id;if(typeof Q!=="string"&&typeof Q!=="number"||typeof Y!=="string"||typeof X!=="string"&&typeof X!=="number")return null;let J=Z.changelog?.items?.find((G)=>G.field==="status");if(!J||typeof J.toString!=="string")return null;return{issueId:String(Q),issueKey:Y,toStatus:J.toString,changelogId:String(X)}}async function oq1($,Z,Q){if(!Z.enabled)return"disabled";let Y=Z.organizationId,X=new QQ(Z.siteUrl,Z.email,Z.apiToken),J=bP8(await X.listStatusChanges(Q.issueId),{changeId:Q.changelogId,now:Q.now,windowMs:Rh0()});if(!J)return"no_rule";if(J.kind!=="moved")return J.kind;let{change:G,from:W}=J,K=(await $.storage.automations.listJiraTransitionTriggers(Y,{jiraStatus:G.to,activeOnly:!0})).map((N)=>({...N,from:lz(N)})),H=H48(K)&&Z.boardId?K48(await X.getBoardColumnStatusIds(Z.boardId),W.id,G.toId):null,F=W48(K,W.name,H);if(!F)return"no_rule";if(!await $.storage.jiraIntegrations.claimTrigger(Y,Q.issueId,G.id))return"duplicate";return await BH({automationId:F.automation_id,organizationId:Y,triggerId:F.id,target:{kind:"jira",issues:[Q.issueId],move:{toStatus:G.to,fromStatus:W.name,movedBy:G.by,movedAt:new Date(G.at).toISOString()},eventKey:G.id}},{idempotencyKey:`jira:${F.id}:${G.id}`}),"fired"}var sq1=L(()=>{NU();gO();Ut();tq1()});import{DBOS as d2,SchedulerMode as XN5}from"@dbos-inc/dbos-sdk";function fP8($){rq1=$}function $R1(){if(!rq1)throw Error("[jira-trigger] runtime not initialized \u2014 setJiraTriggerSweepRuntime() must run before the workflow fires");return rq1}function ZR1(){let $=$R1();return new wj($.db,new NJ($.encryptionKey))}async function HN5($){try{let Z=await ZR1().getById($);if(!Z?.enabled||!Z.boardId)return{integrationId:$,fired:0};let Q=await gY($R1().db,Z.organizationId);if(!Q)return{integrationId:$,fired:0};if((await Q.storage.automations.listJiraTransitionTriggers(Z.organizationId,{activeOnly:!0})).length===0)return{integrationId:$,fired:0};let X=new QQ(Z.siteUrl,Z.email,Z.apiToken),G=`(${await X.getBoardScopeJql(Z.boardId)}) AND status CHANGED AFTER "-${GN5}m"`,W=0,K;for(let H=0;H<WN5;H++){let F=await X.searchIssues({jql:G,nextPageToken:K});for(let U of F.issues)if(await oq1(Q,Z,{issueId:U.id,now:Date.now()})==="fired")W++;if(K=F.nextPageToken??void 0,!K)break}return{integrationId:$,fired:W}}catch(Z){return{integrationId:$,fired:0,error:Z instanceof Error?Z.message:String(Z)}}}async function FN5($,Z){let Q=await d2.runStep(()=>ZR1().listEnabledIds(),{name:"loadJiraIntegrations"});if(Q.length===0)return;let Y=await Promise.all(Q.map((X)=>d2.runStep(()=>HN5(X),{name:`sweepJira:${X}`})));for(let X of Y)if(X.error)console.warn(`[jira-trigger] integration ${X.integrationId} failed: ${X.error}`);else if(X.fired>0)console.log(`[jira-trigger] integration ${X.integrationId} fired ${X.fired} automation(s) the webhook missed`)}async function UN5($,Z){try{let Q=await ZR1().getById($);if(!Q?.enabled)return"disabled";let Y=await gY($R1().db,Q.organizationId);if(!Y)return"disabled";let X=await oq1(Y,Q,{issueId:Z.issueId,changelogId:Z.changelogId});if(X==="fired")console.log(`[jira-trigger] fired an automation for ${Z.issueKey} after it settled`);else if(X==="returned")console.log(`[jira-trigger] ${Z.issueKey} went back where it was before settling in "${Z.toStatus}"; no fire`);return X}catch(Q){return console.error(`[jira-trigger] settling ${Z.issueKey} failed`,Q instanceof Error?Q.message:Q),"error"}}async function NN5($,Z){await d2.sleep(Rh0()+KN5),await d2.runStep(()=>UN5($,Z),{name:"settleJiraMove"})}async function yP8($,Z){if(!eq1)throw Error("[jira-trigger] settle workflow is not registered");await d2.startWorkflow(eq1,{workflowID:`jira-settle:${$}:${Z.changelogId}`})($,Z)}function gP8(){if(aq1)return;eq1=d2.registerWorkflow(NN5,{name:"jiraSettleWorkflow"}),aq1=d2.registerWorkflow(FN5,{name:"jiraTriggerSweepWorkflow"}),d2.registerScheduled(aq1,{name:"jiraTriggerSweepWorkflow",crontab:JN5,mode:XN5.ExactlyOncePerIntervalWhenActive})}var JN5="*/5 * * * *",GN5=20,WN5=5,KN5=5000,rq1=null,eq1=null,aq1=null;var QR1=L(()=>{Sw();dO();gO();tq1();sq1()});function hP8($){let Z=new wj($.db,new NJ($.encryptionKey)),Q=Sz($.db);async function Y(J,G){let W=xP8(G);if(!W)return;let K=await Z.getByWebhookSecret(J);if(!K?.enabled)return;if((await Q.listJiraTransitionTriggers(K.organizationId,{activeOnly:!0})).length===0)return;await yP8(K.id,W)}let X=new $1;return X.post("/webhook/:secret",b6({maxSize:BN5}),async(J)=>{let G=J.req.param("secret");if(!await Z.getByWebhookSecret(G))return J.json({error:"Unknown webhook"},404);let K;try{K=await J.req.json()}catch{return J.json({error:"Body must be JSON"},400)}return Y(G,K).catch((H)=>{console.error("[jira-webhook] trigger failed",H)}),J.body(null,202)}),X}var BN5=1048576;var uP8=L(()=>{H8();FG();Sw();QR1();sq1();p50()});function lP8($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var mP8,DN5,LN5,cP8;var dP8=L(()=>{H8();F3();rn();qi();mP8=new $1,DN5=["range","if-none-match","if-modified-since"],LN5=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];mP8.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),Q=Z.organization?.id;if(!Z.auth?.user?.id){if(Zs($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new R1(401,{message:"Authentication required"})}if(!Q)throw new R1(401,{message:"Organization context required"});let Y=$.req.path.replace(/^.*\/files\//,"");if(!Y)throw new R1(400,{message:"Missing file key"});let X=await S90(Y,Z);if(!X)throw new R1(503,{message:"Object storage not configured"});if(X.startsWith("data:")&&cK()){let K=X.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new R1(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 lP8(N,H),new Response(U,{status:200,headers:N})}let J=new Headers;for(let K of DN5){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 R1(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 R1(502,{message:"Upstream storage error"});let W=new Headers;for(let K of LN5){let H=G.headers.get(K);if(H)W.set(K,H)}return W.set("Cache-Control","private, max-age=86400"),lP8(W,W.get("content-type")??""),new Response(G.body,{status:G.status,headers:W})});cP8=mP8});var HY0=y((Ol)=>{var ON5=Ol&&Ol.__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]}),jN5=Ol&&Ol.__exportStar||function($,Z){for(var Q in $)if(Q!=="default"&&!Object.prototype.hasOwnProperty.call(Z,Q))ON5(Z,$,Q)};Object.defineProperty(Ol,"__esModule",{value:!0});jN5(AG(),Ol)});var nP8=y((iP8)=>{Object.defineProperty(iP8,"__esModule",{value:!0});iP8.version=void 0;iP8.version="3.4.0"});var sP8=y((ED)=>{var wN5=ED&&ED.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(ED,"__esModule",{value:!0});ED.NodeTransport=ED.VERSION=void 0;ED.nodeResolveHost=qN5;var H9=HY0(),EN5=M0("net"),YR1=M0("tls"),PN5=M0("path"),tP8=M0("fs"),zN5=wN5(M0("dns")),AN5=nP8();ED.VERSION=AN5.version;var TN5="nats.js";class oP8{socket;version;lang;yields=[];signal=(0,H9.deferred)();closedNotification=(0,H9.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=TN5,this.version=ED.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,H9.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 H9.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 H9.errors.ConnectionError("error connecting - node provided an undefined error");let{code:G}=J,W=G==="ECONNREFUSED"?new H9.errors.ConnectionError("connection refused",{cause:J}):J;throw this.socket?.destroy(),W}}dial($){let Z=(0,H9.deferred)(),Q,Y=(0,EN5.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,H9.deferred)(),Z;return this.socket.on("data",(Q)=>{this.yields.push(Q);let Y=H9.DataBuffer.concat(...this.yields),X=(0,H9.extractProtocolMessage)(Y);if(X!=="")try{let J=H9.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,H9.deferred)();try{if($=(0,PN5.resolve)($),!(0,tP8.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,tP8.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,H9.extend)(Q,this.options.tls,X)}catch(X){return Promise.reject(new H9.errors.ConnectionError(X.message,{cause:X}))}let Y=(0,H9.deferred)();try{let X=(0,YR1.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 H9.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,H9.extend)(Z,this.options.tls,Y)}catch(Y){return Promise.reject(new H9.errors.ConnectionError(Y.message,{cause:Y}))}let Q=(0,H9.deferred)();try{let Y=(0,YR1.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 H9.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,H9.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,H9.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 YR1.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,H9.render)($)}`);let Z=(0,H9.deferred)();try{this.socket.write($,(Q)=>{if(Q){if(this.options.debug)console.error(`!!! ${(0,H9.render)($)}: ${Q}`);return Z.reject(Q)}return Z.resolve()})}catch(Q){if(this.options.debug)console.error(`!!! ${(0,H9.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}}ED.NodeTransport=oP8;function qN5($){let Z=(0,H9.deferred)();return zN5.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 Zz8=y(($z8)=>{Object.defineProperty($z8,"__esModule",{value:!0});$z8.connect=RN5;var aP8=sP8(),rP8=HY0(),eP8=HY0();function RN5($={}){if((0,eP8.hasWsProtocol)($))return Promise.reject(eP8.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,rP8.setTransportFactory)({factory:()=>{return new aP8.NodeTransport},dnsResolveFn:aP8.nodeResolveHost}),rP8.NatsConnectionImpl.connect($)}});var Qz8=y((xj)=>{var VN5=xj&&xj.__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]}),IN5=xj&&xj.__exportStar||function($,Z){for(var Q in $)if(Q!=="default"&&!Object.prototype.hasOwnProperty.call(Z,Q))VN5(Z,$,Q)};Object.defineProperty(xj,"__esModule",{value:!0});xj.connect=void 0;var kN5=Zz8();Object.defineProperty(xj,"connect",{enumerable:!0,get:function(){return kN5.connect}});IN5(HY0(),xj)});function Jz8($){let Z=$?.connectFn??vN5,Q=null,Y=null,X=!1,J=!1,G=!1,W=[];function K(){return Q!==null&&!Q.isClosed()&&!Q.isDraining()&&!G}function H(){console.log(`[NatsProvider] fireReady: ${W.length} callbacks`);for(let N of W)try{N()}catch{}}function F(N){(async()=>{for await(let B of N.status())if(B.type==="disconnect")console.log("[NatsProvider] Disconnected"),G=!0;else if(B.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),G=!1,Y=null,H()})().catch(()=>{})}async function U(N,B){let D=0;while(!J)try{Q=await Z({servers:N,timeout:_N5,reconnect:!0,maxReconnectAttempts:-1,...B?{authenticator:B}:{}}),console.log(`[NatsProvider] Connected to ${Q.getServer()} after ${D} attempt(s)`),Y=null,G=!1,F(Q),H();return}catch{D++;let O=b7(SN5,CN5,D-1,2,0.5);await G$(O)}}return{init(N,B){if(X)return;X=!0,J=!1;let D=B?.creds?Mh0.credsAuthenticator(new TextEncoder().encode(B.creds)):B?.user?Mh0.usernamePasswordAuthenticator(B.user,B.password):void 0;U(N,D).catch(()=>{})},isConnected(){return K()},getConnection(){return K()?Q:null},getJetStream(){if(!K())return null;if(!Y)Y=Xz8.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 vN5($){return Yz8.connect($)}var Mh0,Yz8,Xz8,CN5=100,SN5=3000,_N5=3000;var Gz8=L(()=>{g$();Mh0=_(UA(),1),Yz8=_(Qz8(),1),Xz8=_(nH(),1)});function Vh0($,Z){return`${$}.${Z}`}class XR1{cache;constructor($){this.cache=WB({ttlMs:$?.ttlMs??bN5,maxSize:$?.maxSize??xN5})}async get($,Z){return this.cache.get(Vh0($,Z))??null}async set($,Z,Q){this.cache.set(Vh0($,Z),Q)}async invalidate($,Z){this.cache.delete(Vh0($,Z)),this.cache.delete(Vh0($,`${Z}:decisions`))}teardown(){this.cache.clear()}}var bN5=600000,xN5=5000;var Wz8=()=>{};function Ih0($,Z){return`${$}:${Z}`}function JR1($){let Z=WB({ttlMs:$?.ttlMs??fN5,maxSize:$?.maxSize??yN5}),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(Kz8,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(Ih0(K,H))},set(K,H,F){Z.set(Ih0(K,H),F)},invalidate(K,H){Z.delete(Ih0(K,H)),W(K,H)},start(){if(G)return;let K=Q?.();if(!K)return;G=K.subscribe(Kz8),(async()=>{for await(let H of G)try{let F=JSON.parse(J.decode(H.data));if(F.originId===Y)continue;Z.delete(Ih0(F.organizationId,F.keyId))}catch{}})().catch(console.error)},teardown(){G?.unsubscribe(),G=null,Z.clear()}}}var Kz8="studio.ai-provider-keys.invalidate",fN5=30000,yN5=5000;var Hz8=()=>{};class GR1{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 Fz8=($)=>{let Z;return()=>Z??=$()},WR1,KR1;var Uz8=L(()=>{y6();WR1=Fz8(()=>W$.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),KR1=Fz8(()=>W$.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function dN5($=Dz8){return{name:nB,subjects:[`${LD1}.>`],storage:SU.StorageType.File,max_age:uN5,max_bytes:mN5,max_msgs_per_subject:cN5,discard:SU.DiscardPolicy.Old,retention:SU.RetentionPolicy.Limits,duplicate_window:lN5,num_replicas:$}}class Lz8{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 Nz8($){let Z=Bz8.headers();for(let[Q,Y]of Object.entries($))Z.set(Q,Y);return Z}function tN5($,Z){let Q=0;return{publish(Y,X,J,G){Y.publish(X,J,G?{headers:G}:void 0).catch((W)=>{if(Q++,hN5().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 oN5($,Z){return $.info?.cluster?Z:1}function sN5($){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 HR1{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=dN5(X);try{await Y.streams.info(nB),await Y.streams.update(nB,J)}catch(G){if(G instanceof Error&&G.message.includes("stream not found"))await Y.streams.add(J),await Y.streams.update(nB,J);else if(G instanceof Error&&/can ?not change.*storage|storage type/i.test(G.message))await Y.streams.delete(nB),await Y.streams.add(J);else throw G}},Q=await $8(async()=>{let Y=this.options.getJetStreamManager?await this.options.getJetStreamManager():await SU.jetstreamManager($),X=oN5($,Dz8);try{await Z(Y,X)}catch(J){if(X<=1||!sN5(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:Ft});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=tN5(Z,Y),G=!1,W=()=>{if(G)return;G=!0;let H=f88(Z);X.publish(H.subject,H.data).catch(()=>{})};Q.addEventListener("abort",W,{once:!0});let K=(H)=>{let F=performance.now(),U=jD1(H,{runId:Z}),N=performance.now()-F;WR1().record(N),KR1().add(1,{"org.id":Y??"unknown"}),nN5?.record(N,U.reduce((B,D)=>B+D.data.length,0));for(let B of U)J.publish(X,B.subject,B.data,B.headers?Nz8(B.headers):void 0)};return(async()=>{let H=$.getReader(),F=0,U=0,N;try{while(!0){let{done:B,value:D}=await H.read();if(B)break;if(K(D),U++,++F>=64)F=0,await new Promise((O)=>setImmediate(O))}}catch(B){N=B,console.warn(`[Decopilot] stream pump error for thread ${Z}:`,B?.message??B)}finally{if(H.releaseLock(),W(),pN5)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 $8(()=>$.publish(Z.subject,Z.data,{...Z.headers?{headers:Nz8(Z.headers)}:{},...Z.msgId?{msgID:Z.msgId}:{}}),{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:Ft}),!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=jD1(Z,{runId:$,dedup:Q});WR1().record(performance.now()-X),KR1().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=x88({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"?SU.DeliverPolicy.New:SU.DeliverPolicy.All,J=Q?.closeOnDone??!1,G=uz($),W;try{W=await $8(async()=>{return(await Y.consumers.get(nB,{filter_subjects:G,deliver_policy:X})).consume()},{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:Ft})}catch(O){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",O?.message??O),null}let F=Qb0({messages:async function*(){try{for await(let O of W)yield{subject:O.subject,data:O.data,headers:O.headers}}finally{W.stop()}}(),onCancel:()=>W.stop()}).pipeThrough(rv0()).pipeThrough(ev0()).getReader(),U=!1,N=()=>{if(U)return;U=!0;try{F.releaseLock()}catch{}},B=!1,D=()=>{if(B)return;B=!0,W.stop(),F.cancel().catch(()=>{}),N()};return Z?.addEventListener("abort",D,{once:!0}),new ReadableStream({async pull(O){for(;;){let{done:j,value:w}=await F.read();if(j){D(),O.close();return}let E=w;if(E.kind==="done"){if(J){D(),O.close();return}continue}O.enqueue(E.chunk);return}},cancel(){D()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge(nB,{filter:uz($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var SU,Bz8,gN5=($)=>{let Z;return()=>Z??=$()},hN5,uN5=86400000000000,lN5=120000000000,mN5=4294967296,Dz8,cN5=500000,iN5,pN5,nN5;var Oz8=L(()=>{g$();wD1();Yb0();$b0();y6();Uz8();SU=_(nH(),1),Bz8=_(UA(),1),hN5=gN5(()=>W$.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"})),Dz8=Math.max(1,Number(process.env.DECOPILOT_STREAM_REPLICAS??3)||3);iN5=process.env.STREAM_ENCODE_TRACE==="1",pN5=process.env.DECOPILOT_STREAM_TRACE==="1";nN5=iN5?new Lz8:null});function kh0($,Z,Q,Y){if(!Y)return!1;return $.emit(Z,QN(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 jz8=L(()=>{q8()});class FR1{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 aN5($,Z,Q={}){let Y=$.startsWith("thread:")?XU($,Q):$;return[...new Set([Z,Y].filter((X)=>!!X))]}async function UR1($,Z){let Q=Z.organizationId;try{let Y=await $.storage.taskBoard.linkedThreadIds(Z.id,Q);for(let X of Y){let J=await JU($,X);if(!J?.owner||!J?.name)continue;let G=await $.storage.threads.get(X),W=await vB($,{threadId:X,runBranch:G?.branch}),K=await w80($,Q,eN0(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=aN5(W,await ZS0($,X),{flat:Dh(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 iJ(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 wz8=L(()=>{W5();yQ();I7()});async function Ez8($,Z,Q){let Y=Z.organizationId;if(!dJ(Z))return!1;if(!ch(Q))return!1;if(!await Tc($,Y,ae))return!1;if(await $.storage.taskBoard.hasHumanRejectedDone(Z.id,Y))return!1;let X=Q1.shipped,J=await $.storage.taskBoard.update(Z.id,Y,{status:X},Z.updatedBy);return await J9($,{taskBoardItemId:Z.id,action:"status_changed",actorId:null,data:{from:Z.status,to:X,reason:"pr_merged"}}),r$(Y,J),console.log(`[task-board-review-sweeper] ${Z.id}: linked PR already merged \u2014 moved to ${X}`),!0}var Pz8=L(()=>{D3();I8();hX();cn();UU();F5()});function zz8($,Z){return Z-$>=QB5}class NR1{taskBoard;contextFactory;options;timer=null;running=!1;cursor=null;constructor($,Z,Q={}){this.taskBoard=$;this.contextFactory=Z;this.options=Q}start(){if(this.timer)return;let $=this.options.intervalMs??rN5;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??$B5,Q=this.options.itemIntervalMs??eN5,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.reapAbandonedThreads(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 reapAbandonedThreads($){try{let Z=await this.taskBoard.failAbandonedLinkedThreads($,new Date(Date.now()-OU1),{neverStarted:iN1,stalled:xB1});for(let Q of Z)console.warn(`[task-board-review-sweeper] failed abandoned 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()-YB5));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 dN1(this.taskBoard,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!==Q1.progress||dJ(W)||W.assigneeId!==u$)continue;let K=await this.contextFactory(J,W.assignedBy??W.createdBy);if(!K)continue;if(await UR1(K,W)){if(await this.taskBoard.clearSweepBudget(X,J),await this.reconcileItem(X,J,Z))Q++;continue}if(!zz8(G.getTime(),Date.now()))continue;let H="the run finished without opening a pull request \u2014 there is "+"nothing for a reviewer to review",F=await this.taskBoard.advanceFromProgress(X,J,Q1.review,W.updatedBy);if(!F)continue;await this.taskBoard.recordActivity({taskBoardItemId:X,action:"status_changed",actorId:null,data:{from:Q1.progress,to:Q1.review,reason:H}}).catch(()=>{}),r$(J,F),await cB(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!==Q1.progress||G.assigneeId!==u$)continue;let W=await this.contextFactory(X,G.assignedBy??G.createdBy);if(!W)continue;await iO(W,G,{runClass:"retry"}),Z++,console.warn(`[task-board-review-sweeper] re-dispatched ${Y} after a failure (attempt ${J})`)}catch(G){console.error(`[task-board-review-sweeper] retry dispatch for ${Y} failed`,G),await this.taskBoard.scheduleRunRetry(Y,X,J,new Date(Date.now()+ZB5)).catch((W)=>console.error(`[task-board-review-sweeper] re-arming ${Y} failed`,W))}return Z}async handOffReviewWithoutPr($,Z){let Q=await this.taskBoard.listActivity(Z.id,Z.organizationId);if(!zz8(BL(Q,Z.reviewCycleStartedAt),Date.now()))return;await cB($,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(!dJ(Y))return!1;let X=Y.assigneeId===u$,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 UR1(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 nn(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 Ez8(G,Y,W))return!0;if(!X)return!1;if(await x08(G,Y))return!0;if(!uN1(W))return!1;return await pn(G,Y,{previewMatchesHead:lN1(W)}),!0}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}var rN5=60000,eN5=300000,$B5=50,ZB5=60000,QB5=900000,YB5=120000;var Az8=L(()=>{I8();a_0();wz8();dB();an();UU();Pz8();F5();pN1();fB1();I7();Q90()});async function Tz8($,Z,Q=mz){return await Rz8($,Z,Q,{})}async function qz8($,Z,Q,Y=mz){return await Rz8($,Q,Y,{activityId:Z})}async function Rz8($,Z,Q,Y){let X=await $.automations.findActiveBoardColumnTriggers();if(X.length===0)return 0;let J=new Map;for(let K of X){let H=K.automation.organization_id;J.set(H,[...J.get(H)??[],K])}let G=await $.taskBoard.listSettledTransitions({organizationIds:[...J.keys()],since:new Date(Z-XB5),settledBefore:new Date(Z-Q),limit:JB5,...Y}),W=0;for(let K of G)try{let H=(J.get(K.organizationId)??[]).filter((U)=>U.column_key===K.to&&Date.parse(U.created_at)<Date.parse(K.occurredAt));if(H.length===0)continue;let F=await GB5($.taskBoard,K,Q);for(let U of H){if(!U48(U,{from:F,to:K.to}))continue;if(!await $.automations.claimTriggerFire(U.id,K.activityId))continue;await $.fire({automationId:U.automation_id,organizationId:K.organizationId,triggerId:U.id,target:{kind:"card",itemId:K.itemId,columnKey:K.to,eventKey:K.activityId,movedBy:K.actorId}},{idempotencyKey:`board:${U.id}:${K.activityId}`}),W++}}catch(H){console.error(`[automations] board transition ${K.activityId} failed`,H)}return W}async function GB5($,Z,Q){let X=(await $.listActivity(Z.itemId,Z.organizationId)).flatMap((J)=>{let G=J.data;if(J.action!=="status_changed"||typeof G?.to!=="string")return[];let W=typeof G.from==="string"?G.from:null;return W===G.to?[]:[{from:W,to:G.to,occurredAt:J.occurredAt}]});return X.length>0?N48(X,Q):Z.from}var XB5=1800000,JB5=200;var Mz8=L(()=>{sO()});import{DBOS as i2,DBOSClient as WB5,SchedulerMode as KB5}from"@dbos-inc/dbos-sdk";function Vz8($){fj=$}async function UB5($){if(!fj)return 0;try{return await qz8(fj,$,Date.now(),fj.settleMs)}catch(Z){return console.error(`[automations] settling board move ${$} failed`,Z),0}}async function NB5(){if(!fj)return 0;try{return await Tz8(fj,Date.now(),fj.settleMs)}catch($){return console.error("[automations] board transition sweep failed",$),0}}async function BB5($){await i2.sleep((fj?.settleMs??mz)+FB5),await i2.runStep(()=>UB5($),{name:"settleBoardMove"})}async function DB5($,Z){let Q=await i2.runStep(()=>NB5(),{name:"sweepBoardMoves"});if(Q>0)console.log(`[automations] board transition sweep fired ${Q} trigger(s) the settle wait missed`)}async function kz8($){let Z=fj;if(!Z||!DR1)return;if(!await Z.automations.hasActiveBoardColumnTrigger($.taskBoardItemId,$.to))return;let Q=`board-settle:${$.activityId}`;if(!i2.isWithinWorkflow()){await i2.startWorkflow(DR1,{workflowID:Q,queueName:r2})($.activityId);return}let Y=await WB5.create({systemDatabaseUrl:Z.systemDatabaseUrl,systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:1});try{await Y.enqueue({workflowName:Iz8,queueName:r2,workflowID:Q},$.activityId)}finally{await Y.destroy()}}function Cz8(){if(BR1)return;DR1=i2.registerWorkflow(BB5,{name:Iz8}),BR1=i2.registerWorkflow(DB5,{name:"boardTransitionSweepWorkflow"}),i2.registerScheduled(BR1,{name:"boardTransitionSweepWorkflow",crontab:HB5,mode:KB5.ExactlyOncePerIntervalWhenActive})}var HB5="*/5 * * * *",FB5=2000,fj=null,Iz8="boardTransitionSettleWorkflow",DR1=null,BR1=null;var Sz8=L(()=>{sO();Mz8()});import{readdir as LB5,rm as Ch0}from"fs/promises";import{join as Sh0}from"path";async function _h0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-OB5),Z.setUTCHours(0,0,0,0);let Q=0;try{let Y=await jl($);for(let X of Y)if(/^\d{4}$/.test(X))Q+=await _z8($,X,Z);else if(!X.startsWith(".")){let J=Sh0($,X),G=await jl(J);for(let K of G){if(!/^\d{4}$/.test(K))continue;Q+=await _z8(J,K,Z)}if((await jl(J)).length===0)await Ch0(J,{recursive:!0,force:!0})}}catch(Y){console.warn("monitoring retention cleanup failed:",Y)}return Q}async function _z8($,Z,Q){let Y=0,X=Sh0($,Z),J=await jl(X);for(let W of J){if(!/^\d{2}$/.test(W))continue;let K=Sh0(X,W),H=await jl(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=Sh0(K,U);await Ch0(B,{recursive:!0,force:!0}),Y++}}if((await jl(K)).length===0)await Ch0(K,{recursive:!0,force:!0})}if((await jl(X)).length===0)await Ch0(X,{recursive:!0,force:!0});return Y}async function jl($){try{return(await LB5($)).filter((Q)=>!Q.startsWith("."))}catch{return[]}}var OB5=30;var LR1=()=>{};import{DBOS as OR1,SchedulerMode as jB5}from"@dbos-inc/dbos-sdk";async function EB5(){let $=[hH(),Ml(),ID()],Z=0;for(let Q of $)try{Z+=await _h0(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 PB5($,Z){await OR1.runStep(()=>EB5(),{name:"monitoringRetention"})}function bz8(){if(vz8)return;vz8=!0;let $=OR1.registerWorkflow(PB5,{name:"monitoringRetentionWorkflow"});OR1.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:wB5,mode:jB5.ExactlyOncePerIntervalWhenActive})}var wB5="23 4 * * *",vz8=!1;var xz8=L(()=>{aW();LR1()});function fz8($){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 hY.create();X.auth.user={id:Q,role:Y.role},X.organization={id:Y.orgId,slug:Y.orgSlug,name:Y.orgName};let J=await zP($.db,Z,Y.role);return X.boundAuth=sz1({auth:X.authInstance,headers:new Headers,role:Y.role,permissions:J,userId:Q}),X.access=new cT(Q,void 0,X.boundAuth,Y.role,"self"),yz(X,{id:Y.orgId,slug:Y.orgSlug}),X}}var yz8=L(()=>{jQ();yF()});function gz8(){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=FY0(N.params.name),D=N.params.arguments||{},O=Object.keys(D).map((w)=>FY0(w)),j=O.length>0?O.slice(0,3).join(",")+(O.length>3?"\u2026":""):"";J=`${E9.tool}${B}${E9.dim}(${j})${E9.reset}`}else if(N.method)J=`${E9.dim}${FY0(N.method)}${E9.reset}`}}catch{}}let W=FY0(X);if(X.startsWith("/mcp/conn_")){let F=X.split("/")[2]??"";W=`/mcp/${E9.mcp}${FY0(F.slice(0,12))}\u2026${E9.reset}`}else if(X==="/mcp")W=`${E9.mcp}/mcp${E9.reset}`;else if(X==="/mcp/registry")W=`${E9.mcp}/mcp/registry${E9.reset}`;let K=AB5(Y),H=G?"\u25C0":"\u2190";console.log(`${E9.dim}${H}${E9.reset} ${K}${Y}${E9.reset} ${W}${J?` ${J}`:""}`);try{await Z()}finally{let F=Date.now()-Q,U=$.res.status,N=zB5(U),B=F<1000?`${F}ms`:`${(F/1000).toFixed(1)}s`,D=G?"\u25B6":"\u2192";console.log(`${E9.dim}${D}${E9.reset} ${K}${Y}${E9.reset} ${W}${J?` ${J}`:""} ${N}${U}${E9.reset} ${E9.duration}${B}${E9.reset}`)}}}var E9,zB5=($)=>{if($>=500)return E9.serverError;if($>=400)return E9.clientError;if($>=300)return E9.redirect;return E9.ok},AB5=($)=>{return E9[$]||E9.reset},FY0=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var hz8=L(()=>{E9={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 cz8}from"crypto";import{mkdir as TB5,readdir as qB5,rm as uz8,stat as dz8}from"fs/promises";import{join as wR1,relative as RB5}from"path";import{z as W8}from"zod";function pz8($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return wR1(MB5,Z)}function nz8($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function jR1($,Z){let Q=pz8($),Y=nz8(Z);return wR1(Q,Y)}function VB5($,Z,Q,Y){let X=B0().encryptionKey||"dev-secret",J=`${$}:${Z}:${Q}:${Y}`;return cz8("sha256",X).update(J).digest("hex")}function mz8($,Z,Q,Y,X){let J=Math.floor(Date.now()/1000)+Y,G=VB5(Z,Q,J,X),W=new URL(`/api/dev-assets/${Z}/${nz8(Q)}`,$);return W.searchParams.set("expires",J.toString()),W.searchParams.set("signature",G),W.searchParams.set("method",X),W.toString()}function tz8($,Z,Q){let Y=`${$}:${Z.getTime()}:${Q}`;return`"${cz8("md5","etag").update(Y).digest("hex")}"`}async function oz8($,Z,Q,Y,X){try{let J=await qB5($,{withFileTypes:!0});for(let G of J){let W=wR1($,G.name),H=RB5(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 oz8(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 dz8(W);X.objects.push({key:H,size:F.size,lastModified:F.mtime.toISOString(),etag:tz8(W,F.mtime,F.size)})}catch{}}}}catch{}}function sz8($,Z){let Y=Z0($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:W8.object({prefix:W8.string().optional(),maxKeys:W8.number().optional().default(1000),continuationToken:W8.string().optional(),delimiter:W8.string().optional()}),outputSchema:W8.object({objects:W8.array(W8.object({key:W8.string(),size:W8.number(),lastModified:W8.string(),etag:W8.string()})),nextContinuationToken:W8.string().optional(),isTruncated:W8.boolean(),commonPrefixes:W8.array(W8.string()).optional()}),handler:async(X)=>{let J=X,G=J.prefix||"",W=J.maxKeys??1000,K=J.delimiter,H=J.continuationToken,F=pz8(Y);await TB5(F,{recursive:!0});let U={objects:[],commonPrefixes:new Set};await oz8(F,F,G,K,U),U.objects.sort((j,w)=>j.key.localeCompare(w.key));let N=0;if(H){if(N=U.objects.findIndex((j)=>j.key>H),N===-1)N=U.objects.length}let B=U.objects.slice(N,N+W),D=N+W<U.objects.length,O=D?B[B.length-1]?.key:void 0;return{objects:B,isTruncated:D,nextContinuationToken:O,commonPrefixes:Array.from(U.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:W8.object({key:W8.string()}),outputSchema:W8.object({contentType:W8.string().optional(),contentLength:W8.number(),lastModified:W8.string(),etag:W8.string(),metadata:W8.record(W8.string(),W8.string()).optional()}),handler:async(X)=>{let J=X,G=jR1(Y,J.key),W=await dz8(G);return{contentType:FA1(J.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:tz8(G,W.mtime,W.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:W8.object({key:W8.string(),expiresIn:W8.number().optional()}),outputSchema:W8.object({url:W8.string(),expiresIn:W8.number()}),handler:async(X)=>{let J=X,G=Jj(J.expiresIn,lz8);return{url:mz8(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:W8.object({key:W8.string(),expiresIn:W8.number().optional(),contentType:W8.string().optional()}),outputSchema:W8.object({url:W8.string(),expiresIn:W8.number()}),handler:async(X)=>{let J=X,G=Jj(J.expiresIn,lz8);return{url:mz8(Z,Y,J.key,G,"PUT"),expiresIn:G}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:W8.object({key:W8.string()}),outputSchema:W8.object({success:W8.boolean(),key:W8.string()}),handler:async(X)=>{let J=X,G=jR1(Y,J.key);try{return await uz8(G),{success:!0,key:J.key}}catch{return{success:!1,key:J.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:W8.object({keys:W8.array(W8.string()).max(1000)}),outputSchema:W8.object({deleted:W8.array(W8.string()),errors:W8.array(W8.object({key:W8.string(),message:W8.string()}))}),handler:async(X)=>{let J=X,G=[],W=[];return await Promise.all(J.keys.map(async(K)=>{let H=jR1(Y,K);try{await uz8(H),G.push(K)}catch(F){W.push({key:K,message:F instanceof Error?F.message:"Unknown error"})}})),{deleted:G,errors:W}}}]}async function ER1($,Z,Q){let Y=sz8(Z,Q),X=new FE({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:SZ});for(let G of Y){let W="shape"in G.inputSchema?G.inputSchema.shape:W8.object({}).shape,K=G.outputSchema&&"shape"in G.outputSchema?G.outputSchema.shape:W8.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 SW({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await X.connect(J),TH(X,J,$,"mcp:dev-assets")}async function az8($,Z,Q,Y){let J=sz8(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 MB5="./data/assets",lz8=3600,iz8,rz8;var ez8=L(()=>{l1();kt();H8();vH0();It();zJ();Gj();Wg0();iz8=new $1;iz8.all("/",async($)=>{let Z=$.get("studioContext"),Q=new URL($.req.url),Y=`${Q.protocol}//${Q.host}`;return ER1($.req.raw,Z,Y)});rz8=iz8});var $28={};P6($28,{mountDevRoutes:()=>IB5});function IB5($,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 ER1(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 az8(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",rz8);let Q=new $1;Q.use("*",VU({mountPath:"/api/dev-assets"})),Q.route("/",Gg0({orgFromPath:!1})),$.route("/api/dev-assets",Q)}var Z28=L(()=>{H8();QA1();Wg0();ez8()});var U28={};P6(U28,{watchHandler:()=>F28,resolveVoiceSigningSecret:()=>W28,resolveCorsOrigin:()=>K28,isSsoExemptPath:()=>G28,isAllowedOAuthRedirectUri:()=>H28,createApp:()=>hB5});import{readFileSync as kB5}from"fs";import{randomBytes as CB5}from"crypto";import{PrometheusSerializer as SB5}from"@opentelemetry/exporter-prometheus";import{DBOS as PD}from"@dbos-inc/dbos-sdk";import{oAuthDiscoveryMetadata as bB5,oAuthProtectedResourceMetadata as xB5}from"better-auth/plugins";async function _B5($){let Z=$.connect(),Q;try{Q=await Promise.race([Z,Y28(Q28)])}catch{return Z.then((Y)=>Y.release(!0)).catch(()=>{}),!1}try{return await Promise.race([Q.query("SELECT 1"),Y28(Q28)]),Q.release(),!0}catch{return Q.release(!0),!1}}function Y28($){return new Promise((Z,Q)=>setTimeout(()=>Q(Error("pg health-check timeout")),$))}function G28($){return $.startsWith("/api/org-sso/")||/^\/api\/[^/]+\/sso\//.test($)||$.startsWith("/api/auth/")||$.startsWith("/api/tools/management")||$.startsWith("/oauth-proxy/")||/^\/api\/[^/]+\/oauth-proxy\//.test($)||$.startsWith(`${hy0}/`)||$.startsWith(`${vy0}/`)}function W28($){let Z=$.studioJwtSecret||$.betterAuthSecret;if(Z)return Z;return console.warn("STUDIO_JWT_SECRET/BETTER_AUTH_SECRET not set - generating a random secret for voice sessions (not persistent across restarts)"),CB5(32).toString("base64")}function K28($,{baseUrl:Z,requestOrigin:Q}){let Y;try{Y=new URL($).hostname}catch{return null}if(Y==="localhost"||Y==="127.0.0.1")return $;let X=Z??Q;try{if(new URL(X).origin===$)return $}catch{}return null}function H28($,Z){return $.origin===new URL(Z).origin||$.hostname==="localhost"}async function hB5($={}){let Z=$.database??E8(),Q=!1;_6.stop().catch((h)=>{console.error("[SSEHub] Error stopping previous broadcast (HMR cleanup):",h)});let Y,X,J,G,W=new XR1,K,H,F,U=null;if($.disableNats)K=JR1(),Y={get:async()=>null,set:async()=>{},invalidate:async()=>{},teardown:()=>{}},X=null,J=null,G=new KZ0,H={start:async()=>{},broadcast:()=>{},stop:async()=>{}},F={init:async()=>{},pump:(h)=>{return(async()=>{let U0=h.getReader();try{while(!0){let{done:N0}=await U0.read();if(N0)break}}catch{}finally{U0.releaseLock()}})()},publishRawChunk:async()=>!1,publishDone:async()=>!1,createTailStream:async()=>null,purge:()=>{},teardown:()=>{}};else{U=Jz8();let h=B0().natsCredsPath,U0;if(h)try{U0=kB5(h,"utf8")}catch(k$){console.error(`[app] failed to read NATS_CREDS at ${h}; connecting anonymously`,k$)}U.init(B0().natsUrls,{creds:U0,user:B0().natsUser,password:B0().natsPassword});let N0=A91()?new K91({getJetStream:()=>U.getJetStream(),selfListVersion:Ah0.version}):null;N0?.init().catch(()=>{}),Y=N0;let q0=new TZ1({getJetStream:()=>U.getJetStream()});q0.init().catch(()=>{}),X=q0;let y0=new dh(bN1,{getJetStream:()=>U.getJetStream()}),T1=new dh(Y90,{getJetStream:()=>U.getJetStream()});y0.init().catch(()=>{}),T1.init().catch(()=>{}),J={reads:y0,cards:T1};let Q8=new mO1({getJetStream:()=>U.getJetStream()});Q8.init().catch(()=>{}),G=Q8,K=JR1({getConnection:()=>U.getConnection()}),H=new GR1({getConnection:()=>U.getConnection()}),F=new HR1({getConnection:()=>U.getConnection(),getJetStream:()=>U.getJetStream()}),UU8(U),U.onReady(()=>{N0?.init().catch((k$)=>{console.error("[McpListCache] Deferred init failed:",k$)}),q0.init().catch((k$)=>{console.error("[SkillCatalogCache] Deferred init failed:",k$)}),y0.init().catch((k$)=>{console.error("[PrReadCache] Deferred init failed:",k$)}),T1.init().catch((k$)=>{console.error("[PrCardCache] Deferred init failed:",k$)}),Q8.init().catch((k$)=>{console.error("[ConnectionCircuitStore] Deferred init failed:",k$)}),K.start(),tj$(()=>U.getConnection()),F.init().catch((k$)=>{console.warn("[Decopilot] StreamBuffer init failed (late-join disabled):",k$)})})}if(p2)await p2();H91(Y),RZ1(X),X71(()=>U?.getConnection()??null),xN1(J),cO1(G);let B={storage:new un(Z.db),sseHub:_6,onThreadFinished:async(h,U0)=>on(new UH(Z.db),h,U0)},D=new hB1(B),O=new r70(Z.db),j=new FR1(O);j.start(),E48(H),H.start((h)=>{mv0(h),D.execute({type:"CANCEL",taskId:h}).catch((U0)=>{console.error("[Decopilot] CancelBroadcast execute failed:",U0)})}).catch((h)=>{console.error("[Decopilot] CancelBroadcast start failed:",h)}),U?.onReady(()=>{H.start().catch((h)=>{console.error("[CancelBroadcast] Deferred start failed:",h)})});let w=()=>U?.getConnection()??null;s21(w),U?.onReady(()=>s21(w)),qj1(w),U?.onReady(()=>qj1(w)),F.init().catch((h)=>{console.warn("[Decopilot] StreamBuffer init failed, attach/late-join disabled:",h)}),p2=async()=>{await D.stopAll(),D.dispose(),j.dispose(),H.stop().catch(()=>{}),SN8(),F.teardown(),Y?.teardown(),X?.teardown(),J?.reads.teardown(),J?.cards.teardown(),W.teardown(),K.teardown(),oj$(),G.teardown(),H91(null),RZ1(null),X71(null),xN1(null),cO1(null)};let E=new $1;if(E.use("*",hO1({enabled:(h)=>$s(h,"debug")==="1"})),E.use("*",$u0),E.use("/*",GU8({origin:(h,U0)=>K28(h,{baseUrl:B0().baseUrl,requestOrigin:new URL(U0.req.url).origin}),credentials:!0,allowMethods:["GET","POST","PUT","DELETE","OPTIONS"],allowHeaders:["Content-Type","Authorization","mcp-protocol-version"],exposeHeaders:["WWW-Authenticate"]})),E.use("*",async(h,U0)=>{if(await U0(),h.req.path.includes("/files/"))return;if(h.req.path.includes("/fs/")&&h.req.path.endsWith("/read"))return;h.header("X-Frame-Options","DENY"),h.header("Content-Security-Policy","frame-ancestors 'none'")}),B0().nodeEnv==="development")E.use("*",gz8());E.use("*",async(h,U0)=>{if(await U0(),Ga(h.req.path))return;if(h.res.status>=500){let q0=await h.res.clone().text();console.error(`[5xx Response] ${h.req.method} ${h.req.path} - ${h.res.status}:`,q0)}}),E.get($J.HEALTH,(h)=>{if(Q)return h.json({status:"shutting_down"},503);return h.json({status:"ok"})}),E.get($J.HEALTH_LIVE,(h)=>{return h.json({status:"ok"})}),E.get($J.HEALTH_READY,async(h)=>{if(Q)return h.json({status:"shutting_down"},503);let U0={};if(U0.postgres={status:await _B5(Z.pool)?"up":"down"},U)U0.nats=U.isConnected()?{status:"up"}:{status:"down"};else U0.nats={status:"down"};let N0=U0.postgres.status==="up",q0=N0?200:503;return h.json({status:N0?"ready":"not_ready",services:U0},q0)}),E.get($J.METRICS,async(h)=>{try{let U0=await Xu0.collect(),N0=vB5.serialize(U0.resourceMetrics);return h.text(N0,200,{"Content-Type":"text/plain; version=0.0.4; charset=utf-8"})}catch(U0){return console.error("Failed to collect metrics:",U0),h.text("# Error collecting metrics",500)}});let P=1800000;E.get(`${$J.DBOS_QUEUE_DEPTH_PREFIX}:queueName`,async(h)=>{let U0=h.req.param("queueName");if(!fB5.has(U0))return h.json({error:`Unknown queue: ${U0}`},404);let[N0,q0]=await Promise.all([PD.listQueuedWorkflows({queueName:U0,status:"ENQUEUED",loadInput:!1,loadOutput:!1}),PD.listQueuedWorkflows({queueName:U0,status:"PENDING",loadInput:!1,loadOutput:!1,dequeuedAfter:new Date(Date.now()-P).toISOString()})]);return h.json({queue_length:N0.length,in_flight:q0.length})}),E.route("/api/config",LP8),E.route("/api/_reports",RP8),E.route("/api/_stripe",iq1),E.route("/api/_github",IP8({taskBoard:()=>m,contextFactory:()=>b})),E.route("/api/_git",Ls);let T={db:Z.db,encryptionKey:B0().encryptionKey};E.route("/api/_jira",hP8(T)),E.route("/api/_jira",_P8(T)),E.route("/report",AP8($.clientDir)),E.route("/api/auth/custom",SU8),E.all("/api/auth/admin/*",wN8),E.all("/api/auth/*",async(h)=>{return await U4.handler(h.req.raw)});let z=_G8();z.use("/.well-known/oauth-protected-resource/mcp/:connectionId",HQ0),z.use("/mcp/:connectionId/.well-known/oauth-protected-resource",HQ0),E.route("/",z),E.get("/.well-known/oauth-protected-resource/api/:org/mcp/:connectionId",hZ0),E.route("/",yG8()),E.use("/oauth-proxy/:connectionId/*",HQ0),E.all("/oauth-proxy/:connectionId/*",X28);let A=async(h)=>{let N0=await yB5()(h.req.raw),q0=await N0.json();return Response.json(q0,N0)};E.use("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",HQ0),E.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",A);let M=async(h)=>{let N0=await gB5()(h.req.raw),q0=await N0.json();return Response.json(q0,N0)};E.get("/.well-known/oauth-authorization-server/*/:gateway?/:connectionId?",M);let f=KU8({ttlMs:120000}),S=await jF8({db:Z.db,auth:U4,encryption:{key:B0().encryptionKey},observability:{tracer:dj,meter:W$},modelListCache:W,providerKeyCache:K,memberRoleCache:f});hY.set(S),w8$({db:Z.db,baseUrl:z5()}),wF8({db:Z.db}),AF8({db:Z.db}),MF8({db:Z.db}),gF8({db:Z.db}),pF8({db:Z.db}),fP8({db:Z.db,encryptionKey:B0().encryptionKey}),Re$({db:Z.db}),rF8({db:Z.db}),K08({db:Z.db});let V=Sz(Z.db),v=new o70(Z.db),b=fz8({db:Z.db});tD1({storage:V,studioContextFactory:b,orgContextFactory:(h)=>gY(Z.db,h),systemDatabaseUrl:_e(B0().databaseUrl,B0().databasePgSsl)}),CD1({systemDatabaseUrl:_e(B0().databaseUrl,B0().databasePgSsl),studioContextFactory:b,deps:{runRegistry:D,cancelBroadcast:H,streamBuffer:F,sseHub:_6}}),qD1({dispatchRunFn:I88,studioContextFactory:b,deps:{runRegistry:D,cancelBroadcast:H,streamBuffer:F,sseHub:_6}});let u=new un(Z.db),m=new UH(Z.db),i=new NR1(m,b);if(B0().taskBoardReviewSweeperEnabled){i.start();let h=p2;p2=async()=>{await h?.(),i.dispose()}}Vz8({automations:V,taskBoard:m,fire:BH,systemDatabaseUrl:_e(B0().databaseUrl,B0().databasePgSsl),settleMs:B0().boardTransitionSettleSeconds*1000}),ue$(kz8),o88({getJetStream:()=>U?.getJetStream()??null,getJetStreamManager:async()=>{let h=U?.getConnection();return h?await J28.jetstreamManager(h):null},messageParts:u.messageParts(),resolveRun:async(h)=>{let U0=await Z.db.selectFrom("threads").select(["organization_id","created_by","message_storage_version","status","run_fence_token","title"]).where("id","=",h).executeTakeFirst();return U0?{orgId:U0.organization_id,createdBy:U0.created_by,version:U0.message_storage_version??1,status:U0.status,runFenceToken:U0.run_fence_token,title:U0.title??null}:null},completeRunIfNotCompleted:async(h,U0)=>{let N0=await u.completeRunIfNotCompleted(h,U0);if(kh0(_6,U0,h,N0),N0)await on(m,h,U0);return N0},markRunRequiresAction:async(h,U0)=>{let N0=await u.requiresActionIfInProgress(h,U0);return kh0(_6,U0,h,N0),N0},markRunFailed:async(h,U0,N0,q0)=>{let y0=await u.markRunFailed(h,U0,N0,q0);if(kh0(_6,U0,h,y0),y0)await on(m,h,U0);return y0},clearSynthesizedError:async(h,U0)=>{await u.messageParts().replaceMessageParts(h,hz(h,U0),[])},persistTitle:(h,U0,N0)=>u.update(h,U0,{title:N0}),onTitleUpdated:async({runId:h,orgId:U0,title:N0})=>{let q0=await u.get(h,U0).catch(()=>null);_6.emit(U0,QN(h,q0?.status??"in_progress",{title:N0,virtualMcpId:q0?.virtual_mcp_id??void 0,createdBy:q0?.created_by,triggerId:q0?.trigger_id,branch:q0?.branch??null,harnessId:q0?.harness_id??void 0,createdAt:q0?.created_at,updatedAt:q0?.updated_at}))},bumpProgress:async({runId:h,orgId:U0})=>{await u.bumpProgress(h,U0)},recordCompleted:async({runId:h,orgId:U0,distinctId:N0,usage:q0})=>{m1.capture({distinctId:N0,event:"chat_message_completed",groups:{organization:U0},properties:{organization_id:U0,thread_id:h,transport:"projector",input_tokens:q0.inputTokens,output_tokens:q0.outputTokens,total_tokens:q0.totalTokens}})},recordFailed:async({runId:h,orgId:U0,distinctId:N0,reason:q0,kind:y0})=>{m1.capture({distinctId:N0,event:"chat_message_failed",groups:{organization:U0},properties:{organization_id:U0,thread_id:h,transport:"projector",error_category:y0,error_message:q0}})},purgeRun:async(h)=>{F.purge(h)}}),a$8({studioContextFactory:b,systemDatabaseUrl:_e(B0().databaseUrl,B0().databasePgSsl),streamBuffer:F}),bz8(),E8$(),PF8(),qF8(),IF8(),uF8(),tF8(),gP8(),Cz8(),Ce$(),$U8(),H08(),CP8();let G0=async(h,U0,N0)=>{let q0=await V.findById(h,U0);if(!q0)throw Error("Automation not found");return eD1({automationId:q0.id,organizationId:q0.organization_id,triggerId:null})},I0=new Ws(V,({automation:h,trigger:U0,contextMessages:N0,idempotencyKey:q0})=>BH({automationId:h.id,organizationId:h.organization_id,triggerId:U0.id,contextMessages:N0},{idempotencyKey:q0})),X0=[hH(),Ml(),ID()];for(let h of X0)_h0(h).then(()=>{}).catch((U0)=>console.error("[monitoring] Retention cleanup failed:",U0));let H0=()=>U4.api.deleteAllExpiredApiKeys().catch((h)=>console.error("[auth] Expired API key cleanup failed:",h));H0(),setInterval(H0,86400000).unref(),E.use("*",async(h,U0)=>{if(rh0(h.req.path))return U0();let N0={measure:async(y0,T1)=>{AH(h,y0);try{return await T1()}finally{_W(h,y0)}}},q0=await hY.create(h.req.raw,{timings:N0});q0.automationRunner=G0,h.set("studioContext",q0);try{await U0()}finally{let y0=q0.pendingRevalidations;if(y0.length>0)Promise.race([Promise.allSettled(y0),G$(30000)]).catch((Q8)=>console.error("[studio] revalidation cleanup error:",Q8))}}),E.use("/api/:org/decopilot/*",Qs),E.use("/api/:org/v1/*",Qs),E.use("/api/:org/files/*",Qs),E.use("*",async(h,U0)=>{if(G28(h.req.path))return U0();let N0=h.get("studioContext");if(!N0?.organization?.id||!N0?.auth?.user?.id)return U0();if(!(await N0.storage.orgSsoConfig.getByOrgId(N0.organization.id))?.enforced)return U0();if(!await N0.storage.orgSsoSessions.isValid(N0.auth.user.id,N0.organization.id))return h.json({error:"SSO authentication required for this organization"},403);return U0()});let s=new $1;s.use("*",VU({mountPath:"/api/org-sso"})),s.route("/",my0()),E.route("/api/org-sso",s),E.get("/api/tools/management",(h)=>{return h.json({tools:we,grouped:GT()})}),E.use("/mcp/*",async(h,U0)=>{AH(h,"mcp");try{return await U0()}finally{_W(h,"mcp")}});let o=async(h,U0)=>{let N0=h.var.studioContext;if(!N0.auth.user?.id&&!N0.auth.apiKey?.id){let q0=new URL(h.req.url),y0=h.req.header("x-forwarded-proto")?.split(",")[0]?.trim(),T1=y0?`${y0}://${q0.host}`:q0.origin;return h.res=new Response(null,{status:401,headers:{"WWW-Authenticate":`Bearer realm="mcp",resource_metadata="${T1}${q0.pathname}/.well-known/oauth-protected-resource"`}})}return await U0()};if(E.use("/mcp/:connectionId?",o),E.use("/mcp/gateway/:virtualMcpId?",o),E.use("/mcp/virtual-mcp/:virtualMcpId?",o),E.use("/mcp/self",o),cK()){let{mountDevRoutes:h}=(Z28(),uh0($28));h(E,o)}let r=new $1;r.use("*",VU({mountPath:"/mcp"})),r.route("/",Gx0()),E.route("/mcp",r);let Q0=new $1;Q0.use("*",VU({mountPath:"/mcp/self"})),Q0.route("/",gg0()),E.route("/mcp/self",Q0);let J0=new $1;J0.use("*",VU({mountPath:"/mcp"})),J0.route("/",Hx0()),E.route("/mcp",J0),E.use("/api/:org/models/*",async(h,U0)=>{AH(h,"llm_models");try{return await U0()}finally{_W(h,"llm_models")}});let u0=yN8({cancelBroadcast:H,streamBuffer:F,runRegistry:D});E.route("/api",u0),E.route("/api",cP8);let C0=new $1;C0.use("*",VU({mountPath:"/api"})),C0.route("/",mg0()),E.route("/api",C0),E.route("/api",FP8);let Y1=new $1;Y1.use("*",VU({mountPath:"/api"})),Y1.route("/",cg0({tokenStorage:v,automationEventDispatcher:I0})),E.route("/api",Y1);let i0=new s70(Z.db),j0=new $1;j0.use("*",VU({mountPath:"/api"})),j0.route("/",ty0()),E.route("/api",j0),E.route("/api/deco-sites",rN8());let E0=new $1;E0.use("*",VU({mountPath:"/api/deco-sites"})),E0.route("/",sy0()),E.route("/api/deco-sites",E0),E.route(hy0,EN8()),E.route(iO8,tO8()),E.route("/api/_editor-resolve",NP8()),E.route(yU8,gU8()),E.route(vy0,eU8());let m0=B0(),B1=m0.elevenlabsApiKey?new Eh0({apiKey:m0.elevenlabsApiKey,model:m0.elevenlabsVoiceModel,conversationModel:m0.elevenlabsConversationModel,voiceId:m0.elevenlabsVoiceId}):null,H1={openai:m0.openaiLiveApiKey?new yq1({apiKey:m0.openaiLiveApiKey,voice:m0.openaiLiveVoice}):null,elevenlabs:B1?new fq1(B1,()=>U?.getConnection()??null):null},_0=new mq1({adapter:B1,conversationAdapters:H1,defaults:m0,secret:W28(m0),getConnection:()=>U?.getConnection()??null}),c0=gE8({voiceSessions:_0,kvStorage:i0,runRegistry:D,streamBuffer:F,sseHub:_6,cancelBroadcast:H,tokenStorage:v,automationEventDispatcher:I0,mountDevAssets:cK(),mcpAuth:o,oauthProxyHandler:X28,watchHandler:F28,betterAuthProtectedResourceHandler:A,getNatsConnection:()=>U?.getConnection()??null});return E.route("/api/:org",c0),E.notFound((h)=>{return h.json({error:"Not Found",path:h.req.path},404)}),E.onError(hN8),Object.assign(E,{markShuttingDown:()=>{Q=!0},shutdown:async()=>{if(console.log("[shutdown] Stopping workers..."),await Promise.allSettled([_6.stop(),p2?Promise.resolve(p2()).finally(()=>{p2=null}):Promise.resolve()]),U)await U.drain().catch((h)=>console.error("[shutdown] NATS drain error:",h));console.log("[shutdown] Flushing telemetry..."),await $3().catch((h)=>console.error("[shutdown] Telemetry flush error:",h)),console.log("[shutdown] Closing database..."),await n5$(Z).catch((h)=>console.error("[shutdown] Database close error:",h)),console.log("[shutdown] Cleanup complete.")},initDbos:async()=>{await PD.registerQueue(wG,{partitionQueue:!0,concurrency:iD1,minPollingIntervalMs:pD1}),await PD.registerQueue(sW,{partitionQueue:!0,concurrency:ID1,priorityEnabled:!0}),await PD.registerQueue(RD,{workerConcurrency:B0().decopilotMaxConcurrentHostedRuns,priorityEnabled:!0}),await PD.registerQueue(MD,{workerConcurrency:B0().sandboxMaxConcurrentHostedRuns,priorityEnabled:!0}),await PD.registerQueue(cj,{partitionQueue:!0,concurrency:s$8}),await PD.registerQueue(a2,W08),await PD.registerQueue(r2),await YA1(V),await Promise.allSettled(["automations-gate","automations-global","jira-push"].map((h)=>PD.deleteQueue(h))),await nD1(Z.pool),SK$().catch((h)=>{console.error("[studio-pack-backfill] failed:",h)}),Ac(Z.db).catch((h)=>{console.error("[automations] built-in seed failed:",h)}),P8$().catch((h)=>{console.error("[org-fs] public-sets boot sync kick failed:",h)})}})}var J28,Q28=5000,p2=null,X28=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 hY.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 v=await $.req.json().catch(()=>({}));return $.json({...typeof v==="object"&&v!==null?v:{},client_id:G.oauth_config.clientId,...G.oauth_config.clientSecret?{client_secret:G.oauth_config.clientSecret}:{},client_secret_expires_at:0})}let W=await Go(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=QP1(await W.json());if(!K)K=H.origin;let N=await uZ0(K);if(!N.ok)return $.json({error:"Failed to get auth server metadata"},502);let B=await N.json(),D;if(Y==="authorize")D=B.authorization_endpoint;else if(Y==="token")D=B.token_endpoint;else if(Y==="register")D=B.registration_endpoint;if(!D)return $.json({error:`Unknown OAuth endpoint: ${Y}`},404);let O=fG8(D);if(O)return O;let j=new URL(D),w=new URL($.req.url);if(j.search=w.search,Y==="authorize"){let v=j.searchParams.get("redirect_uri");if(v){let b=B0().baseUrl??w.origin;try{if(!H28(new URL(v),b))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)}j.searchParams.set("redirect_uri",v)}if(j.searchParams.has("resource"))j.searchParams.set("resource",U);if(QU8(G.connection_url))j.searchParams.set("auto_personal","true"),j.searchParams.set("force_new","true");return $.redirect(j.toString(),302)}let E={Accept:$.req.header("Accept")||"application/json"},P=$.req.header("Content-Type");if(P)E["Content-Type"]=P;let T=$.req.header("Authorization");if(T)E.Authorization=T;let z,A=null,M=null;if($.req.method!=="GET"&&$.req.method!=="HEAD")if(Y==="token"&&P?.includes("application/x-www-form-urlencoded")){if(T?.toLowerCase().startsWith("basic "))try{let i=atob(T.slice(6).trim()),G0=i.indexOf(":");if(G0!==-1){let I0=decodeURIComponent(i.slice(0,G0)),X0=decodeURIComponent(i.slice(G0+1));A=I0||null,M=X0||null}}catch{}let v=await $.req.formData();if(v.has("resource"))v.set("resource",U);let b=v.get("client_id"),u=v.get("client_secret");if(typeof b==="string"&&b)A=b;if(typeof u==="string"&&u)M=u;let m=new URLSearchParams;for(let[i,G0]of v.entries())m.append(i,G0.toString());z=m.toString()}else if(Y==="register"&&P?.toLowerCase().includes("application/json")){let v=await X.db.selectFrom("organization").select(["id","slug","name"]).where("id","=",G.organization_id).executeTakeFirst(),b=await $.req.text(),u={};try{u=b?JSON.parse(b):{}}catch{z=b}let m=typeof u==="object"&&u!==null&&!Array.isArray(u);if(z===void 0&&!m)z=b;if(z===void 0){let i=u,G0=i.metadata&&typeof i.metadata==="object"?i.metadata:{};i.metadata={...G0,organization_id:G.organization_id,...v?.slug?{organization_slug:v.slug}:{},...v?.name?{organization_name:v.name}:{}},z=JSON.stringify(i),E["Content-Type"]="application/json"}}else z=$.req.raw.body??void 0;let f=await fetch(j.toString(),{method:$.req.method,headers:E,body:z,duplex:"half",redirect:"manual"}),S=new Headers,V=["connection","keep-alive","transfer-encoding","content-encoding","content-length"];for(let[v,b]of f.headers.entries())if(!V.includes(v.toLowerCase()))S.set(v,b);if(Y==="token"&&f.ok){let v=await f.text();try{let b=JSON.parse(v);if(typeof b.access_token==="string"&&b.access_token){let u=typeof b.expires_in==="number"?new Date(Date.now()+b.expires_in*1000):null,m=null;try{m=await J2(G.connection_url)??D}catch{m=D}let i={connectionId:Z,accessToken:b.access_token,refreshToken:typeof b.refresh_token==="string"?b.refresh_token:null,scope:typeof b.scope==="string"?b.scope:null,expiresAt:u,clientId:A,clientSecret:M,tokenEndpoint:m};await new Y9(X.db,X.vault).upsert(i)}}catch(b){console.error("[oauth-proxy] failed to persist downstream token:",b)}return new Response(v,{status:f.status,statusText:f.statusText,headers:S})}return new Response(f.body,{status:f.status,statusText:f.statusText,headers:S})},F28=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&&(!lB(Y)||!await mB(Z)))return $.json({error:"forbidden"},403);let W=G?x_0:Y;if(G)cO({action:"watch_all_orgs",actorUserId:Q,actorOrgId:Y,targetOrgId:"all"});let K=crypto.randomUUID();return Sj($,async(H)=>{if(await H.writeSSE({event:"connected",data:JSON.stringify({listenerId:K,organizationId:Y,typePatterns:J,connectedAt:new Date().toISOString()})}),!_6.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(()=>{_6.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),_6.remove(W,K)})},30000);await new Promise((N)=>{H.onAbort(()=>{clearInterval(U),_6.remove(W,K),N()})})})},vB5,fB5,yB5=()=>xB5(U4),gB5=()=>bB5(U4);var N28=L(()=>{g$();l1();z8$();zF8();RF8();kF8();lF8();oF8();OZ0();HN1();ZU8();Q90();B9();qi();q8();H8();ky0();WU8();uO1();ZH();yF();T21();bG();y6();W6();C21();hU8();$N8();y21();PN8();p21();$A1();ZA1();lK();lZ0();QA1();uN8();Sy0();hE8();dE8();iE8();oE8();JP8();GA1();Wx0();HZ0();UP8();Fx0();gT1();BP8();fT1();OP8();TP8();MP8();VP8();kP8();SP8();vP8();uP8();QR1();NA1();dP8();yT1();_T1();RY0();Gz8();cq1();IJ();WB0();f80();yN1();m$0();d$0();iO1();Wz8();Hz8();a21();Oz8();_v0();jz8();r50();mO();F5();bz1();Az8();Sz8();D3();dO();xz8();KF0();LR1();aW();XA1();uO();AD1();KF0();g90();p50();Ez1();yz8();xw();hz8();_s();T21();ln();Wt();cv0();J28=_(nH(),1);vB5=new SB5,fB5=new Set([wG,sW,RD,MD,cj,a2])});var O28={};P6(O28,{resolveClientDir:()=>pB5,resolveAssetPathWithTraversalCheck:()=>L28,isPathWithinDirectory:()=>D28,createAssetHandler:()=>nB5});import{resolve as UY0,dirname as uB5,join as lB5,extname as mB5,basename as cB5,sep as B28}from"path";function dB5($,Z){if($===Z||cB5($)==="index.html")return{"Cache-Control":"no-cache"};if($.includes(`${B28}assets${B28}`))return{"Cache-Control":"public, max-age=31536000, immutable"};return{}}function D28($,Z){let Q=UY0(Z),Y=UY0($);return Y===Q||Y.startsWith(Q+"/")}function L28({requestPath:$,clientDir:Z}){let Q=$.startsWith("/")?$.slice(1):$,Y=UY0(Z,Q);if(!D28(Y,Z))return null;return Y}function pB5($,Z="../client"){let Q=new URL($),Y=uB5(Q.pathname);return UY0(Y,Z)}function nB5($={}){let{env:Z="production",clientDir:Q=iB5,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=L28({requestPath:W,clientDir:Q});if(!K)return null;let H=lB5(K,"index.html"),F=UY0(Q,"index.html"),U=J.headers.get("accept"),B=U?.includes("text/html")||U?.includes("*/*")&&["",".html"].includes(mB5(K))?[H,F]:[];for(let D of[K,...B])try{let O=Bun.file(D);if(await O.exists())return new Response(O,{headers:dB5(D,F)})}catch{}if(W.includes("/assets/"))return new Response("Not Found",{status:404,headers:{"Cache-Control":"no-store"}});return null}}var iB5="./dist/client";var j28=()=>{};var w28={};P6(w28,{tryUpgradePreviewWs:()=>YD5,tryHandlePreviewHttp:()=>eB5,previewWebSocketHandler:()=>XD5,parsePreviewBaseDomain:()=>rB5,isPreviewWsData:()=>vh0,extractHandleFromHost:()=>PR1});function sB5($){if($.method!=="GET")return!1;return($.headers.get("accept")??"").includes("text/html")}function aB5(){return new Response(oB5,{status:503,headers:{"content-type":"text/html; charset=utf-8","cache-control":"no-store","retry-after":"1","access-control-allow-origin":"*"}})}function rB5($){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 PR1($,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 eB5($,Z){let Q=PR1($.headers.get("host"),Z.baseDomain);if(!Q)return null;let{handle:Y,slug:X}=g31(Q),J=await Z.getRunner();if(!J)return BY0(503,"preview proxy not configured");let G=await J.proxyPreviewRequest(Y,X?QD5($,X):$);if(G.headers.get(tp)&&sB5($))return aB5();return G.headers.delete(tp),G}function ZD5($){return{protocols:$.upstreamProtocols,headers:{[y31]:$.appSlug}}}function QD5($,Z){let Q=new Headers($.headers);return Q.set(y31,Z),new Request($,{headers:Q})}function BY0($,Z){return new Response(JSON.stringify({error:Z}),{status:$,headers:{"content-type":"application/json","access-control-allow-origin":"*"}})}function vh0($){return typeof $==="object"&&$!==null&&$.kind==="preview"}async function YD5($,Z,Q){if(($.headers.get("upgrade")??"").toLowerCase()!=="websocket")return null;let Y=PR1($.headers.get("host"),Q.baseDomain);if(!Y)return null;let{handle:X,slug:J}=g31(Y),G=await Q.getRunner();if(!G)return BY0(503,"preview proxy not configured");let W=await G.resolvePreviewUpstreamUrl(X);if(!W)return BY0(404,"sandbox not found");let K=new URL($.url);if(K.pathname.startsWith("/_sandbox"))return BY0(404,"not found");let H=`${W.replace(/^http/,"ws")}${K.pathname}${K.search}`,F=$.headers.get("sec-websocket-protocol"),U=F?F.split(",").map((D)=>D.trim()).filter(Boolean):[],N={kind:"preview",upstreamUrl:H,upstreamProtocols:U,...J?{appSlug:J}:{},pending:[],upstream:null,closed:!1};if(!Z.upgrade($,{data:N}))return BY0(426,"upgrade failed");return}function NY0($,Z,Q,Y){if(Z.closed)return;Z.closed=!0;try{$.close(Q,Y)}catch{}try{Z.upstream?.close()}catch{}}var tB5=256,oB5='<!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>',$D5,XD5;var E28=L(()=>{h60();$D5=WebSocket;XD5={open($){let Z=$.data;if(!vh0(Z))return;let Q;try{Q=Z.appSlug?new $D5(Z.upstreamUrl,ZD5(Z)):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)}`),NY0($,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)=>{NY0($,Z,Y.code||1000,Y.reason||"")}),Q.addEventListener("error",()=>{NY0($,Z,1011,"upstream error")})},message($,Z){let Q=$.data;if(!vh0(Q))return;let Y=Q.upstream;if(Y&&Y.readyState===WebSocket.OPEN){Y.send(Z);return}if(Q.pending.length>=tB5){NY0($,Q,1011,"preview ws backlog overflow");return}Q.pending.push(Z)},close($){let Z=$.data;if(!vh0(Z))return;NY0($,Z,1000,"")}}});g$();var vR1="14";function bR1($){return{name:"decocms",systemDatabaseUrl:$.systemDatabaseUrl,systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:$.poolSize,runAdminServer:!1,executorID:$.executorID,applicationVersion:vR1,...$.listenQueues!==void 0?{listenQueues:$.listenQueues}:{}}}g$();import y28 from"pg";var xR1=8314027461559302n,g28=600000,h28=500;async function fR1($,Z){let{databaseUrl:Q,lockTimeoutMs:Y=g28}=$,X=$.log??((K)=>console.log(K)),J=new y28.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",[xR1.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 G$(h28)}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)",[xR1.toString()])}catch{}await J.end().catch(()=>{})}}l1();dh0();y6();function yA8(){let $=(process.env.BUN_OPTIONS??"").split(/\s+/).filter(Boolean);return[...process.argv.slice(1),...$]}function Wu0($,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 wM1(){let $=yA8();if($.includes("--cpu-prof")){console.log(JSON.stringify({msg:"cpu-profiling-active",dir:Wu0($,"--cpu-prof-dir")??process.cwd(),name:Wu0($,"--cpu-prof-name"),markdown:$.includes("--cpu-prof-md"),intervalUs:Number(Wu0($,"--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.'}))}Fu0();var IY0;function VM1(){if(process.env.HEAP_WATCH!=="1")return()=>{};let $=Number(process.env.HEAP_WATCH_INTERVAL_MS??60000),Z=async()=>{let Q=ZA();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(()=>{}),IY0=setInterval(()=>void Z().catch(()=>{}),$),IY0.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(IY0)clearInterval(IY0)}}import*as uA8 from"bun:jsc";var{startSamplingProfiler:lA8,samplingProfilerStackTraces:mA8}=uA8;function IM1(){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{lA8()}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=mA8()?.traces??[]}catch{}if(G>$&&W.length>0){let K=new Map;for(let F of W){let U=F.frames.find((D)=>D.sourceURL&&!/Unknown Executable/.test(D.category??""))??F.frames[0];if(!U)continue;let N=(U.sourceURL??"?").replace(/^.*\/node_modules\//,"node_modules/"),B=`${U.name??"?"} @ ${N}:${U.line??"?"}`;K.set(B,(K.get(B)??0)+1)}let H=[...K.entries()].sort((F,U)=>U[1]-F[1]).slice(0,8).map(([F,U])=>({frame:F,count:U}));console.warn(JSON.stringify({msg:"stall-stack",ts:new Date().toISOString(),lagMs:Math.round(G),samplesInWindow:W.length,top:H}))}Q=setTimeout(X,Z),Q.unref?.()};return Q=setTimeout(X,Z),Q.unref?.(),()=>{if(Q)clearTimeout(Q)}}function kM1(){wM1();let $=[VM1(),MM1(),IM1()];return()=>{for(let Z of $)Z()}}import{existsSync as ND5}from"fs";var tW=B0();LM1();var{DBOS:DY0,DBOSClient:JD5}=await import("@dbos-inc/dbos-sdk");function MR1($,Z){if(!Z)return $;let Q=new URL($);if(!Q.searchParams.has("sslmode"))Q.searchParams.set("sslmode","verify-full");return Q.toString()}var GD5=[wG,sW,RD,MD,cj,a2,r2],WD5=tW.dispatchRole==="worker"?GD5:tW.dispatchRole==="api"?[]:void 0;DY0.setConfig(bR1({systemDatabaseUrl:MR1(tW.databaseUrl,tW.databasePgSsl),poolSize:tW.dbosPoolSize,executorID:tW.podName,listenQueues:WD5}));var{createApp:KD5}=await Promise.resolve().then(() => (N28(),U28)),{isServerPath:HD5}=await Promise.resolve().then(() => (RY0(),rR1)),{createAssetHandler:FD5,resolveClientDir:q28}=await Promise.resolve().then(() => (j28(),O28)),UD5=tW.port,P28=q28(import.meta.url,"../client"),R28=ND5(P28)?P28:q28(import.meta.url,"../dist/client"),BD5=FD5({clientDir:R28,isServerPath:HD5}),DD5={"X-Frame-Options":"DENY","Content-Security-Policy":"frame-ancestors 'none'"};function LD5($){let Z=new Headers($.headers);for(let[Q,Y]of Object.entries(DD5))Z.set(Q,Y);return new Response($.body,{status:$.status,statusText:$.statusText,headers:Z})}var{parsePreviewBaseDomain:OD5,tryHandlePreviewHttp:jD5,tryUpgradePreviewWs:wD5,previewWebSocketHandler:zR1,isPreviewWsData:AR1}=await Promise.resolve().then(() => (E28(),w28)),{getOrInitSharedRunner:M28}=await Promise.resolve().then(() => (xX(),$d$)),V28=OD5(process.env.STUDIO_SANDBOX_PREVIEW_URL_PATTERN),z28={baseDomain:V28??"",getRunner:M28};if(process.env.STUDIO_SANDBOX_TENANT_POOLS?.trim())M28().catch(($)=>{console.warn("[lifecycle] eager sandbox provider init for tenant pools failed:",$ instanceof Error?$.message:String($))});var bh0=await KD5({clientDir:R28}),TR1=process.env.DBOS_CONDUCTOR_KEY?.trim(),A28=process.env.DBOS_CONDUCTOR_URL?.trim();await fR1({databaseUrl:MR1(tW.databaseUrl,tW.databasePgSsl)},()=>DY0.launch({...TR1?{conductorKey:TR1}:{},...TR1&&A28?{conductorURL:A28}:{}}));console.log(`[dbos] application version: ${DY0.applicationVersion}`);var qR1=5,RR1=0;await $8(async()=>{RR1++;try{return await bh0.initDbos()}catch($){let Z=RR1>=qR1?"giving up":"retrying";throw console.warn(`[dbos] initDbos attempt ${RR1}/${qR1} failed, ${Z}`,$),$}},{maxAttempts:qR1,minTimeout:1000,maxTimeout:1e4,jitter:0.5});var ED5=Bun.serve({idleTimeout:0,port:UD5,hostname:"0.0.0.0",fetch:async($,Z)=>{if(V28){let Y=await wD5($,Z,z28);if(Y===void 0)return;if(Y)return Y;let X=await jD5($,z28);if(X)return X}let Q=await BD5($);if(Q)return LD5(Q);return bh0.fetch($,{server:Z})},websocket:{open($){if(AR1($.data))zR1.open($)},message($,Z){if(AR1($.data))zR1.message($,Z)},close($){if(AR1($.data))zR1.close($)}},development:!1}),PD5=kM1();if(tW.localMode)Promise.resolve().then(() => (ph(),Rv0)).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(() => (ph(),Rv0));Z()}catch{}});var T28=!1;async function zD5($){let Z;try{Z=await JD5.create({systemDatabaseUrl:MR1(tW.databaseUrl,tW.databasePgSsl),systemDatabaseSchemaName:"dbos"});let Q=await Z.listWorkflows({status:"PENDING",queueName:sW,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:sW}),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 xh0($){if(T28)return;T28=!0,console.log(`
4574
4574
  [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{PD5(),bh0.markShuttingDown();let J=yR1(tW.dispatchRole,Q,process.env.SHUTDOWN_DRAIN_MS);await G$(J),await ED5.stop(!0);let G=DY0.executorID;await DY0.shutdown(),await zD5(G),await bh0.shutdown()}catch(J){console.error("[shutdown] Error during shutdown:",J),X=1}clearTimeout(Y),process.exit(X)}process.on("SIGTERM",()=>xh0("SIGTERM"));process.on("SIGINT",()=>xh0("SIGINT"));process.on("SIGHUP",()=>xh0("SIGHUP"));process.on("unhandledRejection",($)=>{console.error("[process] Unhandled rejection:",$)});process.on("uncaughtException",($)=>{console.error("[process] Uncaught exception:",$),xh0("uncaughtException")});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "decocms",
3
- "version": "4.538.1",
3
+ "version": "4.539.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
- .globe-wrap{--globe-visit: var(--chart-2);--globe-cart: var(--chart-4);--globe-goal: var(--chart-1);--globe-ocean: oklch(.955 .006 80);--globe-land: oklch(.9 .008 80);--globe-line: oklch(.87 .005 80);--globe-edge: oklch(.72 .05 80);--globe-dark: 0;position:relative;width:100%;height:min(52vh,36rem);min-height:20rem;border-radius:var(--radius);overflow:hidden;background:var(--globe-ocean);border:1px solid var(--border)}.dark .globe-wrap{--globe-ocean: oklch(.145 .006 60);--globe-land: oklch(.245 .006 60);--globe-line: oklch(.3 .005 60);--globe-edge: oklch(.52 .09 150);--globe-dark: 1}.globe-wrap .globe-canvas{position:absolute;inset:0}.globe-wrap .globe-tip{position:absolute;z-index:5;pointer-events:none;display:flex;flex-direction:column;gap:.125rem;padding:.4rem .55rem;border-radius:var(--radius);border:1px solid var(--border);background:var(--popover);color:var(--foreground);font-size:.75rem;line-height:1.35;box-shadow:0 4px 12px #0000001f;white-space:nowrap}.globe-wrap .globe-tip strong{font-weight:600}.globe-wrap .globe-tip-sub{color:var(--muted-foreground);font-size:.6875rem}.globe-wrap .globe-tip-line{display:flex;align-items:center;gap:.375rem;font-variant-numeric:tabular-nums}.globe-wrap .globe-tip-line i{width:.5rem;height:.5rem;border-radius:50%;flex:none}