decocms 4.532.2 → 4.532.3

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 (395) hide show
  1. package/dist/client/assets/{ActiveShapeUtils-DenZ78VA.js → ActiveShapeUtils-BqDyGFZ7.js} +1 -1
  2. package/dist/client/assets/{AlertCircle-BWrNX7mN.js → AlertCircle-Cl7lPwXU.js} +1 -1
  3. package/dist/client/assets/{AreaChart-DNs2YwPE.js → AreaChart-CgNLciWa.js} +1 -1
  4. package/dist/client/assets/{ArrowLeft-DHx5ko4s.js → ArrowLeft-DHpl6k89.js} +1 -1
  5. package/dist/client/assets/{ArrowUp-CyzDPNV4.js → ArrowUp-CCRch_5n.js} +1 -1
  6. package/dist/client/assets/{BarChart-CXwRHR1B.js → BarChart-CgwMaEcR.js} +1 -1
  7. package/dist/client/assets/{Building02-DhL5SQYW.js → Building02-CvAuH__b.js} +1 -1
  8. package/dist/client/assets/{CartesianChart-bUujzX18.js → CartesianChart-jWKNX8JU.js} +1 -1
  9. package/dist/client/assets/{CategoricalChart-hUgIZ_pD.js → CategoricalChart-llxjaCK5.js} +1 -1
  10. package/dist/client/assets/{CheckCircle-BJwUqTIe.js → CheckCircle-hp3ioCW_.js} +1 -1
  11. package/dist/client/assets/{ChevronSelectorVertical-BsFKOzFl.js → ChevronSelectorVertical-DTyNJuny.js} +1 -1
  12. package/dist/client/assets/{ChevronUp-BsFnjeNK.js → ChevronUp-CCD43oX-.js} +1 -1
  13. package/dist/client/assets/{Copy01-BMtss9AJ.js → Copy01-BMaHAxTm.js} +1 -1
  14. package/dist/client/assets/{CreditCard01-DpJ5HaJ6.js → CreditCard01-C0q6WjY1.js} +1 -1
  15. package/dist/client/assets/{DotsVertical-7Rm5ttPh.js → DotsVertical-DJmcbJ4K.js} +1 -1
  16. package/dist/client/assets/{ErrorBarContext-B8n7TKqU.js → ErrorBarContext-Dy68CBdM.js} +1 -1
  17. package/dist/client/assets/{Globe04-BJeMTkc9.js → Globe04-BSAiLhce.js} +1 -1
  18. package/dist/client/assets/{Image01-B1C03E_N.js → Image01-CKWtV0l9.js} +1 -1
  19. package/dist/client/assets/{Key01-AhMvx8Bf.js → Key01-D2_-kM68.js} +1 -1
  20. package/dist/client/assets/{Link01-p8humFYG.js → Link01-HbY8A4ox.js} +1 -1
  21. package/dist/client/assets/{LinkBroken01-C5q0tEvS.js → LinkBroken01-BgMERPB2.js} +1 -1
  22. package/dist/client/assets/{Minus-BMakGco3.js → Minus-C-AJk_C6.js} +1 -1
  23. package/dist/client/assets/{Monitor01-CLwaIfNu.js → Monitor01-B100isce.js} +1 -1
  24. package/dist/client/assets/{Play-BoOYKEkH.js → Play-B-0E4pTK.js} +1 -1
  25. package/dist/client/assets/{Plus-D7X276kv.js → Plus-imVVIoVd.js} +1 -1
  26. package/dist/client/assets/{ReferenceLine-UiDLzqoj.js → ReferenceLine-CqdTT5eh.js} +1 -1
  27. package/dist/client/assets/{SearchMd-BzDAUJSU.js → SearchMd-DyPaHuer.js} +1 -1
  28. package/dist/client/assets/{Sector-DZu8Iagq.js → Sector-DkakaTuw.js} +1 -1
  29. package/dist/client/assets/{ShoppingBag01-UnxomIP0.js → ShoppingBag01-C2pyKO9h.js} +1 -1
  30. package/dist/client/assets/{Sun-B5QvK7X9.js → Sun-sC1lwILE.js} +1 -1
  31. package/dist/client/assets/{SwitchHorizontal01-Dr_PPdbH.js → SwitchHorizontal01-C7CobzPb.js} +1 -1
  32. package/dist/client/assets/{Tool01-OTauJJp3.js → Tool01-DSL_ntjS.js} +1 -1
  33. package/dist/client/assets/{Trash01-DzCXEeuM.js → Trash01-2YmzJ--g.js} +1 -1
  34. package/dist/client/assets/{Upload01-2E_Vrojt.js → Upload01-DICy44Oo.js} +1 -1
  35. package/dist/client/assets/{UserSquare-CmbcjiWL.js → UserSquare-i-ypi26L.js} +1 -1
  36. package/dist/client/assets/{Users01-BFgiCQPh.js → Users01-CzRZKRqu.js} +1 -1
  37. package/dist/client/assets/{XClose-BF4dTiHJ.js → XClose-DxOoWNFF.js} +1 -1
  38. package/dist/client/assets/{ZoomOut-BIPVG3Mi.js → ZoomOut-vrNny0H4.js} +1 -1
  39. package/dist/client/assets/{access-gate-BrHHSKUI.js → access-gate-DVRnUxMX.js} +1 -1
  40. package/dist/client/assets/{add-connection-dialog-84lGCknH.js → add-connection-dialog-D0tg1TJV.js} +1 -1
  41. package/dist/client/assets/agent-analytics-0wCceQxB.js +2 -0
  42. package/dist/client/assets/agent-app-CMMDwOAo.js +1 -0
  43. package/dist/client/assets/{agent-assets-DkTI28JC.js → agent-assets-Bs4kuiam.js} +1 -1
  44. package/dist/client/assets/{agent-automation-F0B4MP-_.js → agent-automation-DiigIe1Q.js} +1 -1
  45. package/dist/client/assets/{agent-automations-cb9A7zzk.js → agent-automations-CxLdxRGT.js} +1 -1
  46. package/dist/client/assets/{agent-calendar-B3d7D0Bd.js → agent-calendar-DxWQxrPV.js} +1 -1
  47. package/dist/client/assets/{agent-connect-sources-D2B4_Vnn.js → agent-connect-sources-BAO9oQzK.js} +1 -1
  48. package/dist/client/assets/agent-deck-BlDseEN7.js +1 -0
  49. package/dist/client/assets/{agent-e2e-COljZ8mH.js → agent-e2e-DhYxMwgk.js} +1 -1
  50. package/dist/client/assets/agent-experiments-D81JgE0g.js +1 -0
  51. package/dist/client/assets/{agent-file-BWUqgQfU.js → agent-file-DeUOMaWf.js} +1 -1
  52. package/dist/client/assets/{agent-hosting-DQRni5C3.js → agent-hosting-CDCU8rbd.js} +1 -1
  53. package/dist/client/assets/{agent-icon-DMLbHyqZ.js → agent-icon-B8D9Gfvd.js} +1 -1
  54. package/dist/client/assets/agent-library-BB6GSi0n.js +1 -0
  55. package/dist/client/assets/agent-library-file-BfQc6Xv5.js +1 -0
  56. package/dist/client/assets/agent-monitor-IXQDM2HW.js +1 -0
  57. package/dist/client/assets/{agent-overview-DQfGfiWL.js → agent-overview-DSg0Kd7z.js} +1 -1
  58. package/dist/client/assets/{agent-releases-DmNYUENl.js → agent-releases-CVk6STnu.js} +1 -1
  59. package/dist/client/assets/agent-settings-Bp7tIKg6.js +1 -0
  60. package/dist/client/assets/agent-site-editor-code-qC85DoYU.js +2 -0
  61. package/dist/client/assets/agent-site-editor-content-DR_mJ3c0.js +1 -0
  62. package/dist/client/assets/agent-site-editor-preview-ByuhwZMp.js +1 -0
  63. package/dist/client/assets/{agent-site-editor-LiXNvVzd.js → agent-site-editor-yQYOFQWa.js} +1 -1
  64. package/dist/client/assets/agent-view-BOMKiSl6.js +1 -0
  65. package/dist/client/assets/{agent-view-guard-CIzLYG9Z.js → agent-view-guard-_cEjlf1v.js} +1 -1
  66. package/dist/client/assets/{agents-list-JqKBXhBb.js → agents-list-BLSC1Di9.js} +1 -1
  67. package/dist/client/assets/{ai-providers-BMdVqDyj.js → ai-providers-BGW2DNP-.js} +1 -1
  68. package/dist/client/assets/{alert-BAjsKun9.js → alert-BnCVVuNl.js} +1 -1
  69. package/dist/client/assets/{analytics-sections-2r9JgnkF.js → analytics-sections-wyJg4kpg.js} +1 -1
  70. package/dist/client/assets/api-keys-D-xxl29k.js +1 -0
  71. package/dist/client/assets/{api-keys-D_a2AabQ.js → api-keys-U9RNdUek.js} +1 -1
  72. package/dist/client/assets/{app-editor-hGtjMe2U.js → app-editor-Cx6h5tGz.js} +1 -1
  73. package/dist/client/assets/{asset-utils-BljmC-O4.js → asset-utils-CowFLRlk.js} +1 -1
  74. package/dist/client/assets/{auth-BawzvLgB.js → auth-C31upNbt.js} +1 -1
  75. package/dist/client/assets/{auth-catchall-L4otHxQ4.js → auth-catchall-Czzs7hqL.js} +1 -1
  76. package/dist/client/assets/{auth-entry-DHl3Qa2p.js → auth-entry-wLbrz5aE.js} +1 -1
  77. package/dist/client/assets/{auth-split-layout-Bpnft0WY.js → auth-split-layout-D-PBFcAB.js} +1 -1
  78. package/dist/client/assets/{authenticate-and-persist-oauth-CL5vwYY0.js → authenticate-and-persist-oauth-crIDWJ6N.js} +1 -1
  79. package/dist/client/assets/{automation-list-row-B1qIGbz-.js → automation-list-row-DM_birCq.js} +1 -1
  80. package/dist/client/assets/{automation-runs-Dgzto0gK.js → automation-runs-BcgaNiX0.js} +1 -1
  81. package/dist/client/assets/{automations-C5lyWSek.js → automations-CT3Dvct6.js} +1 -1
  82. package/dist/client/assets/{autosend-BSe8DnJN.js → autosend-Dt99VIFN.js} +1 -1
  83. package/dist/client/assets/{badge-Dk9QaMHv.js → badge-DNaCaxWj.js} +1 -1
  84. package/dist/client/assets/{block-document-DlaqZi3o.js → block-document-ZSs8a5bY.js} +1 -1
  85. package/dist/client/assets/{blocks-preview-workspace-context-BzMwrhCE.js → blocks-preview-workspace-context-Bd8C8dyy.js} +1 -1
  86. package/dist/client/assets/{blocks-tab-states-B7iQVWp6.js → blocks-tab-states-DGoshb0H.js} +1 -1
  87. package/dist/client/assets/{blog-schema-BHmzvrMx.js → blog-schema-CH04Llum.js} +1 -1
  88. package/dist/client/assets/{buckets-CVEqMqkM.js → buckets-DSxOf2AY.js} +1 -1
  89. package/dist/client/assets/{build-improve-prompt-doc-B6DMhmUe.js → build-improve-prompt-doc-B_bSopgf.js} +1 -1
  90. package/dist/client/assets/{calendar-nGMQX5H2.js → calendar-BO9Nr1M_.js} +1 -1
  91. package/dist/client/assets/{capability-load-error-BX1SCP0_.js → capability-load-error-vQljenRs.js} +1 -1
  92. package/dist/client/assets/{category-editor-B4n2VHEp.js → category-editor-nUerpPfd.js} +1 -1
  93. package/dist/client/assets/{cdn-tab-BPWLqXqs.js → cdn-tab-DT_Z_ffb.js} +1 -1
  94. package/dist/client/assets/{chart-BOjeMD0e.js → chart-ByN0MGja.js} +1 -1
  95. package/dist/client/assets/{chat-context-D2EaExW5.js → chat-context-8d724Biw.js} +1 -1
  96. package/dist/client/assets/{chat-draft-C-EHUjTp.js → chat-draft-C5BwFiIm.js} +1 -1
  97. package/dist/client/assets/{checkbox--Oh7M1o0.js → checkbox-B6B4GfAg.js} +1 -1
  98. package/dist/client/assets/{choose-editor-CHcjiEH4.js → choose-editor-cwBA4AN0.js} +1 -1
  99. package/dist/client/assets/{cli-auth-success-BfeyrT2F.js → cli-auth-success-C8pJ2BT2.js} +1 -1
  100. package/dist/client/assets/{client-icons-DQkGfKDh.js → client-icons-wsm5E6op.js} +1 -1
  101. package/dist/client/assets/{cms-settings-editor-DwJYbiAD.js → cms-settings-editor-DMrPsNZl.js} +1 -1
  102. package/dist/client/assets/{collapsible-DTK_WJix.js → collapsible-3SKHGphM.js} +1 -1
  103. package/dist/client/assets/{collection-detail-C0KsWIh2.js → collection-detail-BWnA80Zh.js} +1 -1
  104. package/dist/client/assets/{collection-display-button-K6Znqj-g.js → collection-display-button-DfdF6cOY.js} +1 -1
  105. package/dist/client/assets/{collection-search-Qr0hkbHz.js → collection-search-C4cRWusY.js} +1 -1
  106. package/dist/client/assets/{collection-table-wrapper-D6zxNCnG.js → collection-table-wrapper-CNOtj_SI.js} +1 -1
  107. package/dist/client/assets/{collection-tabs-Ma8F53u0.js → collection-tabs-a38TB_62.js} +1 -1
  108. package/dist/client/assets/{column-rules-IVYKsmdv.js → column-rules-DXrawuAz.js} +1 -1
  109. package/dist/client/assets/{combobox-BDOw2yEp.js → combobox-GlEL6Xnn.js} +1 -1
  110. package/dist/client/assets/{command-MDi6OAC1.js → command-CE1yLWfJ.js} +1 -1
  111. package/dist/client/assets/{companion-mcps-section-CVi8OvfW.js → companion-mcps-section-DH2KAGSr.js} +1 -1
  112. package/dist/client/assets/{config-Dym8HnZx.js → config-BaIfGsO-.js} +1 -1
  113. package/dist/client/assets/{connect-fTG8J5lb.js → connect-TrA7xY0i.js} +1 -1
  114. package/dist/client/assets/{connect-layout-CZZqsNI2.js → connect-layout-YDmvQh5t.js} +1 -1
  115. package/dist/client/assets/{connect-source-dialog-CncrwAT8.js → connect-source-dialog-CJFwb-Pv.js} +1 -1
  116. package/dist/client/assets/{connection-O8PnXJZi.js → connection-1AeUs-hI.js} +1 -1
  117. package/dist/client/assets/{connection-card-RdKzW886.js → connection-card-C6tJSG9A.js} +1 -1
  118. package/dist/client/assets/{connection-detail-DnfNkGSf.js → connection-detail-BAdrWZOi.js} +1 -1
  119. package/dist/client/assets/{connection-form-helpers-DVNTeSdC.js → connection-form-helpers-BH-331g7.js} +1 -1
  120. package/dist/client/assets/{connections-ByI0uD_U.js → connections-C8tDel1L.js} +1 -1
  121. package/dist/client/assets/{content-tab-2K6f0sFB.js → content-tab-DatSho4V.js} +3 -3
  122. package/dist/client/assets/{context-Dgv8u1kZ.js → context-DC17p4VB.js} +1 -1
  123. package/dist/client/assets/{context-menu-_6aSLrNv.js → context-menu-CM8EuOIb.js} +1 -1
  124. package/dist/client/assets/{context-shell-Dkh3MlNJ.js → context-shell-6bG12s6J.js} +3 -3
  125. package/dist/client/assets/{core.esm-Co0itmj7.js → core.esm-BS-fbyHU.js} +1 -1
  126. package/dist/client/assets/{create-organization-dialog-QEydhapH.js → create-organization-dialog-CHqaag5i.js} +1 -1
  127. package/dist/client/assets/{daily-pulse-D_SGGhIw.js → daily-pulse-DVMn88HS.js} +1 -1
  128. package/dist/client/assets/{discover-DmiBR0qW.js → discover-DwwIyML5.js} +1 -1
  129. package/dist/client/assets/{domain-settings-Cf2W5c-a.js → domain-settings-DX175kFz.js} +1 -1
  130. package/dist/client/assets/{drawer-DgxlyKrC.js → drawer-GqwKUn7Z.js} +1 -1
  131. package/dist/client/assets/{editor-BlDtkpHT.js → editor-66i9SBVx.js} +1 -1
  132. package/dist/client/assets/{editor-classes-DHW6XsZP.js → editor-classes-3Rme3mQZ.js} +1 -1
  133. package/dist/client/assets/{empty-state-DQH-DiCp.js → empty-state-BOEouiZH.js} +1 -1
  134. package/dist/client/assets/{empty-state-CnCcC-8N.js → empty-state-Dk7OA6FI.js} +1 -1
  135. package/dist/client/assets/{experiments-tab-DN2DbmCx.js → experiments-tab-D6juVLvh.js} +1 -1
  136. package/dist/client/assets/{experiments-tab-choice-B2cKHyhG.js → experiments-tab-choice-CPEmnQsJ.js} +1 -1
  137. package/dist/client/assets/{extract-connection-data-BRZSg9CO.js → extract-connection-data-CeTNnU_i.js} +1 -1
  138. package/dist/client/assets/{feature-gate-x6qhrhaG.js → feature-gate-CvRJmjvu.js} +1 -1
  139. package/dist/client/assets/{feature-paywall-CypZbR93.js → feature-paywall-DCw_cj-g.js} +1 -1
  140. package/dist/client/assets/{file-explorer-DG9-Rlc5.js → file-explorer-BvmclAYx.js} +1 -1
  141. package/dist/client/assets/{file-preview-C4Z-YwH_.js → file-preview-C07bLEQA.js} +1 -1
  142. package/dist/client/assets/{file-share-button-DKZ7oEEn.js → file-share-button-B8TNwLwz.js} +1 -1
  143. package/dist/client/assets/{file-type-icon-BrZE8mnq.js → file-type-icon-D7rbXSkW.js} +1 -1
  144. package/dist/client/assets/{folder-icon-C8Dw6D6B.js → folder-icon-DxXjwnjy.js} +1 -1
  145. package/dist/client/assets/{form-DAT0TK1w.js → form-Bymz6d0n.js} +1 -1
  146. package/dist/client/assets/{general-PUVNuDbw.js → general-g7tJdqdD.js} +1 -1
  147. package/dist/client/assets/{held-block-view-rTOQRrzA.js → held-block-view-DEPvO0cs.js} +3 -3
  148. package/dist/client/assets/{home-B7Ic73m_.js → home-BnTwEiNz.js} +1 -1
  149. package/dist/client/assets/{hosted-publish-feedback-BYd2t20V.js → hosted-publish-feedback-CHh3DpeQ.js} +1 -1
  150. package/dist/client/assets/{icon-button-DIxoXQKV.js → icon-button-DNB1B8hy.js} +1 -1
  151. package/dist/client/assets/{index-Cuqx2rXt.js → index-6EA_iA9h.js} +1 -1
  152. package/dist/client/assets/{index-DbfDgKss.js → index-BA4mOY4Z.js} +1 -1
  153. package/dist/client/assets/{index-BZRrEhsu.js → index-BWCxl69P.js} +1 -1
  154. package/dist/client/assets/{index-qt5sLImf.js → index-BdUExej6.js} +1 -1
  155. package/dist/client/assets/{index-TAei2O9I.js → index-BeHjP7VX.js} +1 -1
  156. package/dist/client/assets/{index-CquZHSaS.js → index-BjA5bh1K.js} +1 -1
  157. package/dist/client/assets/{index-7SN0ucfq.js → index-BsHW3BGu.js} +1 -1
  158. package/dist/client/assets/{index-BYpbKN34.js → index-CKRg2y80.js} +1 -1
  159. package/dist/client/assets/{index-DZn-HYwc.js → index-D1ugmRMj.js} +1 -1
  160. package/dist/client/assets/{index-Ca4Q75r_.js → index-D3ScAucs.js} +1 -1
  161. package/dist/client/assets/{index-BIIhX81I.js → index-D5Vi_4vo.js} +1 -1
  162. package/dist/client/assets/{index-z9eosAhj.js → index-DPRssy9N.js} +1 -1
  163. package/dist/client/assets/{index-CQj5kSP7.js → index-DWtN3gop.js} +1 -1
  164. package/dist/client/assets/{index-Cxx5SZO5.js → index-Df31jXxo.js} +5 -5
  165. package/dist/client/assets/{index-CjPh5dsm.js → index-IfhHuBaK.js} +1 -1
  166. package/dist/client/assets/{index-redirect-C2mEcSuz.js → index-redirect-D2WCbXzv.js} +1 -1
  167. package/dist/client/assets/{infiniteQueryObserver-B9PBW4Q3.js → infiniteQueryObserver-QWUcOo9q.js} +1 -1
  168. package/dist/client/assets/{infra-billing-Cdw4wy6i.js → infra-billing-DI8WnEsT.js} +1 -1
  169. package/dist/client/assets/{input-dt9X0pvp.js → input-B9AC97ib.js} +3 -3
  170. package/dist/client/assets/{input-BFXymFUo.js → input-pZWuEflz.js} +1 -1
  171. package/dist/client/assets/{integration-icon-DGyeG5wp.js → integration-icon-CX1D_V3Z.js} +1 -1
  172. package/dist/client/assets/{jira-icon-aE2LRXUv.js → jira-icon-CrJbOaem.js} +1 -1
  173. package/dist/client/assets/{label-Ctu3ACGH.js → label-C1DxVrJb.js} +1 -1
  174. package/dist/client/assets/{layout-BBi67rPP.js → layout-Co5PS1zK.js} +1 -1
  175. package/dist/client/assets/{legacy-agents-deep-DXm2VUys.js → legacy-agents-deep-DwRBJb4S.js} +1 -1
  176. package/dist/client/assets/{legacy-main-redirect-xLzp4sos.js → legacy-main-redirect-DFKFdz8r.js} +1 -1
  177. package/dist/client/assets/library-DCyznvHe.js +1 -0
  178. package/dist/client/assets/{login-C4ik3KAa.js → login-BdZ_2mZB.js} +1 -1
  179. package/dist/client/assets/{markdown-CWAWXi60.js → markdown-BaA5eol3.js} +1 -1
  180. package/dist/client/assets/{mcp-app-renderer-C2UU8TPW.js → mcp-app-renderer-DkXlKGsA.js} +1 -1
  181. package/dist/client/assets/{mcp-oauth-BgczWCl7.js → mcp-oauth-DMxGzETt.js} +1 -1
  182. package/dist/client/assets/{mcp-oauth-DPnnrdpS.js → mcp-oauth-DVXIbfq7.js} +1 -1
  183. package/dist/client/assets/{members-DYgO8xeR.js → members-f3hqsDJ0.js} +1 -1
  184. package/dist/client/assets/{memory-8RSHKutI.js → memory-BC5tlA-x.js} +1 -1
  185. package/dist/client/assets/{mini-report-page-Cok-AWQD.js → mini-report-page-ThLgGtsw.js} +1 -1
  186. package/dist/client/assets/{mock-board-Nc8P3HCB.js → mock-board-oVS8k8JY.js} +3 -3
  187. package/dist/client/assets/{monaco-editor-D4Zh5ulV.js → monaco-editor-BMj9ndKI.js} +1 -1
  188. package/dist/client/assets/{monitoring-00U9_JaZ.js → monitoring-BBn_6bn2.js} +1 -1
  189. package/dist/client/assets/{monitoring-stats-row-Bo4buMTd.js → monitoring-stats-row-Us3D_pYk.js} +1 -1
  190. package/dist/client/assets/{multi-select-Dgh7zCRl.js → multi-select-YCf5rhfR.js} +1 -1
  191. package/dist/client/assets/{mustache-BUKtJZnS.js → mustache-d_OV0Sqo.js} +1 -1
  192. package/dist/client/assets/{named-rule-uses-CILvps79.js → named-rule-uses-D9geTw6w.js} +1 -1
  193. package/dist/client/assets/{new-project-dialog-C8Z9rxsK.js → new-project-dialog-C3TUUDBv.js} +1 -1
  194. package/dist/client/assets/{oauth-callback-CE7Uxghr.js → oauth-callback-Dv9r9wZ_.js} +1 -1
  195. package/dist/client/assets/{oauth-callback-ai-provider-CFmbF-CP.js → oauth-callback-ai-provider-CjWL1XO5.js} +1 -1
  196. package/dist/client/assets/{onboarding-mOv2Iyev.js → onboarding-BejB9V13.js} +1 -1
  197. package/dist/client/assets/{openai-conversation-DziaKIXJ.js → openai-conversation-GecH_2pX.js} +1 -1
  198. package/dist/client/assets/{optimistic-project-sidebar-views-BA4lpO5g.js → optimistic-project-sidebar-views-CAA-EMWH.js} +1 -1
  199. package/dist/client/assets/{order-monitor-day-BBlstwBq.js → order-monitor-day-CAFy7-L0.js} +1 -1
  200. package/dist/client/assets/{organization-choice--RODmYz9.js → organization-choice-LduKCDrf.js} +1 -1
  201. package/dist/client/assets/{orgs-cjaXJmLi.js → orgs-BCUVSU3w.js} +1 -1
  202. package/dist/client/assets/{page-seo-form-EchOknJY.js → page-seo-form-DUU1C-6q.js} +1 -1
  203. package/dist/client/assets/{pair-D81VUoh8.js → pair-B-_qdC4y.js} +1 -1
  204. package/dist/client/assets/{parse-sections-DqiKgsi7.js → parse-sections-B6OFIoIV.js} +1 -1
  205. package/dist/client/assets/{plan-D1zAf_A4.js → plan-CjldBZPb.js} +1 -1
  206. package/dist/client/assets/{plan-ladder-BM0vfuMg.js → plan-ladder-DrHQyVHN.js} +1 -1
  207. package/dist/client/assets/{popover-Cf5bE8mq.js → popover-B_I8LDF7.js} +1 -1
  208. package/dist/client/assets/{post-calendar-YSAaYkEq.js → post-calendar-BXSPdtSv.js} +1 -1
  209. package/dist/client/assets/{post-editor-BhE1Cpdl.js → post-editor-5M5eW2rD.js} +1 -1
  210. package/dist/client/assets/{preview-content-CD6AbYC3.js → preview-content-BSEpMJ_f.js} +1 -1
  211. package/dist/client/assets/{preview-dialog-CDAUzIIz.js → preview-dialog-CyuTO-Nj.js} +1 -1
  212. package/dist/client/assets/{preview-panel-CSWXyf1I.js → preview-panel-zBGzI7ac.js} +1 -1
  213. package/dist/client/assets/{preview-tab-C8fq_RoO.js → preview-tab-CBpLR0vZ.js} +3 -3
  214. package/dist/client/assets/{product-picker-dialog-CxqpXPuE.js → product-picker-dialog-C1HdN3HS.js} +1 -1
  215. package/dist/client/assets/{profile-CqAQF01N.js → profile-Bn1uXmaj.js} +1 -1
  216. package/dist/client/assets/{project-app-view-D3SaQmET.js → project-app-view-BkE8gxNZ.js} +1 -1
  217. package/dist/client/assets/{project-apps-CcjoYUnG.js → project-apps-6jAsRK71.js} +1 -1
  218. package/dist/client/assets/{project-feed-BwJVQ7vC.js → project-feed-DU7KOynB.js} +1 -1
  219. package/dist/client/assets/{project-icon-iIrZc685.js → project-icon-D9wVAFzd.js} +1 -1
  220. package/dist/client/assets/project-reports-CoToFlrf.js +1 -0
  221. package/dist/client/assets/project-tasks-DoZw7fPU.js +1 -0
  222. package/dist/client/assets/{projects-B1CcZpiT.js → projects-C-Yb71Zw.js} +1 -1
  223. package/dist/client/assets/{projects-empty-state-Bv5rWYhh.js → projects-empty-state-7CRc8HoV.js} +1 -1
  224. package/dist/client/assets/{prompts-Cf1xjNSu.js → prompts-CWNnIGH8.js} +1 -1
  225. package/dist/client/assets/record-editor-L60U2ftu.js +1 -0
  226. package/dist/client/assets/{redirect-editor-DIiWED7H.js → redirect-editor-j7oyCbUQ.js} +1 -1
  227. package/dist/client/assets/{releases-api-DGvWHx7z.js → releases-api-BPQ4-CE2.js} +1 -1
  228. package/dist/client/assets/reports-C3nCqIRq.js +1 -0
  229. package/dist/client/assets/{reports-DzSrMl4z.js → reports-D1bLhy55.js} +1 -1
  230. package/dist/client/assets/{reports-onboarding-BME_pd6z.js → reports-onboarding-Br02-2BX.js} +1 -1
  231. package/dist/client/assets/{reports-tab-BXCeTXce.js → reports-tab-NXH4YBX6.js} +2 -2
  232. package/dist/client/assets/repositories-CMQDzY2K.js +1 -0
  233. package/dist/client/assets/{repositories-Cfi5wijd.js → repositories-CbppdbMb.js} +1 -1
  234. package/dist/client/assets/{repository-binding-CkScpIsb.js → repository-binding-ChFtIyYh.js} +1 -1
  235. package/dist/client/assets/{repository-import-picker-BS8H9PxV.js → repository-import-picker-Dqcyo_Vj.js} +1 -1
  236. package/dist/client/assets/{repository-picker-l4M27wFx.js → repository-picker-DWYzqSxW.js} +1 -1
  237. package/dist/client/assets/{require-capability-DLhsbUyc.js → require-capability-BeSsgEhw.js} +1 -1
  238. package/dist/client/assets/{required-auth-layout-CulRsSVA.js → required-auth-layout-KHMRM84i.js} +1 -1
  239. package/dist/client/assets/{reset-password-CfDFawIV.js → reset-password-r8BWIBki.js} +1 -1
  240. package/dist/client/assets/{resizable-BFC1GeuR.js → resizable-C_RuwlQZ.js} +1 -1
  241. package/dist/client/assets/{resolve-tab-icon-BsW126zu.js → resolve-tab-icon-L08uJp19.js} +1 -1
  242. package/dist/client/assets/{review-settings-BayMZpjl.js → review-settings-DojAE0jY.js} +1 -1
  243. package/dist/client/assets/{roles-DjGn6KVP.js → roles-D6_fwqh1.js} +1 -1
  244. package/dist/client/assets/{route-iXyqQPnW.js → route-C4tVpiaX.js} +1 -1
  245. package/dist/client/assets/route-DgmGSsat.js +1 -0
  246. package/dist/client/assets/{route-EfequOdl.js → route-Lxa6t3DR.js} +1 -1
  247. package/dist/client/assets/{sandbox-lifecycle-context-Dz_wNlv5.js → sandbox-lifecycle-context-DVjTP20B.js} +1 -1
  248. package/dist/client/assets/{schema-B6wL-gff.js → schema-CBMv4uZ-.js} +1 -1
  249. package/dist/client/assets/{schema-WheR11j2.js → schema-Dc9nPV4z.js} +1 -1
  250. package/dist/client/assets/{scroll-area-rwjRqyfO.js → scroll-area-DaWGdqx1.js} +1 -1
  251. package/dist/client/assets/{search-input-CzCH_VIY.js → search-input-DvYu4A0A.js} +1 -1
  252. package/dist/client/assets/{search-toggle-BLa7geCi.js → search-toggle-BUhavGY8.js} +1 -1
  253. package/dist/client/assets/{secret-picker-3QlkMO3w.js → secret-picker-B2imvRnF.js} +1 -1
  254. package/dist/client/assets/{secrets-BhKAJ53J.js → secrets-CpSoee_i.js} +1 -1
  255. package/dist/client/assets/{section-array-field-D9y7NMQM.js → section-array-field-BJZ1wiNE.js} +1 -1
  256. package/dist/client/assets/{sections-DvRVP9Dz.js → sections-O1s6Ya_g.js} +1 -1
  257. package/dist/client/assets/{sections-editor-Cy509EcE.js → sections-editor-Bi9TOkvW.js} +1 -1
  258. package/dist/client/assets/{select-UpCSfNOV.js → select-BfhHhadQ.js} +1 -1
  259. package/dist/client/assets/{select-model-xVaNPfcs.js → select-model-CQqkBPt_.js} +1 -1
  260. package/dist/client/assets/{seo-editor-BO3Jt0hb.js → seo-editor-BM7MOIs2.js} +1 -1
  261. package/dist/client/assets/{separator-BPjv6lnz.js → separator-BL9f54K4.js} +1 -1
  262. package/dist/client/assets/settings-tab-DGrxw_Br.js +1 -0
  263. package/dist/client/assets/{sheet-COugYrjn.js → sheet-CGAbOd40.js} +1 -1
  264. package/dist/client/assets/{shell-layout-e38uIahb.js → shell-layout-x8Rpz59I.js} +1 -1
  265. package/dist/client/assets/{site-draft-actions-BXCMIWnV.js → site-draft-actions-BxVMQk52.js} +1 -1
  266. package/dist/client/assets/{site-draft-view-BfiVi6ch.js → site-draft-view-eAeyHemD.js} +2 -2
  267. package/dist/client/assets/site-editor-Y3f6GiRg.js +1 -0
  268. package/dist/client/assets/{site-editor-toast-BafJU0kP.js → site-editor-toast-CNioLEYY.js} +1 -1
  269. package/dist/client/assets/{skills-Dw8G18Wk.js → skills-ADJZIWwa.js} +1 -1
  270. package/dist/client/assets/{slider-CW5CKPMF.js → slider-BGAbx3P6.js} +1 -1
  271. package/dist/client/assets/{sortable.esm-BfvWiQ7R.js → sortable.esm-D2v1hurq.js} +1 -1
  272. package/dist/client/assets/{sso-C-6FjTmB.js → sso-DiSbySZe.js} +1 -1
  273. package/dist/client/assets/{suggestion-DmUPHSiw.js → suggestion-Dv6GPkzt.js} +1 -1
  274. package/dist/client/assets/{switch-C5GqEaZ9.js → switch-BrgZ4lcs.js} +1 -1
  275. package/dist/client/assets/{symbol-B_TAz0Ej.js → symbol-B0k2Fmal.js} +1 -1
  276. package/dist/client/assets/{synced-repos-BvOzTrqp.js → synced-repos-iwxe29k_.js} +1 -1
  277. package/dist/client/assets/{tab-icon-glyph-CjnfHMM2.js → tab-icon-glyph-7Mf2iIYQ.js} +1 -1
  278. package/dist/client/assets/{table-B203jObX.js → table-CWpkoJyg.js} +1 -1
  279. package/dist/client/assets/{tabs-DFO0cUd4.js → tabs-_e3w7wMl.js} +1 -1
  280. package/dist/client/assets/{task-assignee-avatar-Dcgi6zr9.js → task-assignee-avatar-DWd0heQ0.js} +1 -1
  281. package/dist/client/assets/{task-board-D0I9TrF7.js → task-board-Bwc-6POa.js} +1 -1
  282. package/dist/client/assets/{task-route-F6hd-KVw.js → task-route-DeETVOfh.js} +1 -1
  283. package/dist/client/assets/{task-status-OQPi7i4V.js → task-status-BmXUld3j.js} +1 -1
  284. package/dist/client/assets/{taskboard-analytics-eo8rY3BR.js → taskboard-analytics-DvtLAbX2.js} +1 -1
  285. package/dist/client/assets/{tasks-Bkp6Ztlp.js → tasks-B0mbYQ9j.js} +1 -1
  286. package/dist/client/assets/tasks-DA_sNmDG.js +1 -0
  287. package/dist/client/assets/{textarea-xiPVXzgn.js → textarea-6PmeS9wv.js} +1 -1
  288. package/dist/client/assets/{thread-analytics-D1pWKSrS.js → thread-analytics-Bw5C_zB1.js} +1 -1
  289. package/dist/client/assets/{thread-intent-DJ7MUI-X.js → thread-intent-Bdfd2QLx.js} +1 -1
  290. package/dist/client/assets/{thread-route-DwUdsrkJ.js → thread-route-C2KtVc9o.js} +1 -1
  291. package/dist/client/assets/{thread-route-p_tHH1KN.js → thread-route-C3dw8Zzp.js} +1 -1
  292. package/dist/client/assets/{thread-sheet-body-B5yV21k9.js → thread-sheet-body-D_8bAkjs.js} +1 -1
  293. package/dist/client/assets/{time-range-picker-B9K0oYAh.js → time-range-picker-DvWeQLVi.js} +1 -1
  294. package/dist/client/assets/{toggle-group-epTzYWN_.js → toggle-group-Dd6F_mst.js} +1 -1
  295. package/dist/client/assets/{tool-namespace-BnR-5HvH.js → tool-namespace-BRBiFCQ_.js} +1 -1
  296. package/dist/client/assets/{toolbar-icon-button-BtdQ071s.js → toolbar-icon-button-DYeJGszf.js} +1 -1
  297. package/dist/client/assets/{tooltip-BFWyx7Tu.js → tooltip-C_Y_Rf94.js} +1 -1
  298. package/dist/client/assets/{tooltipContext-HIsDwgpv.js → tooltipContext-Br4BrEeg.js} +1 -1
  299. package/dist/client/assets/{track-D-nJPAhp.js → track-DbPHq5xf.js} +1 -1
  300. package/dist/client/assets/{types-Bg6xzMsU.js → types-BhYop-72.js} +1 -1
  301. package/dist/client/assets/{url-slug-CtldY3Fc.js → url-slug-rdmPuytX.js} +1 -1
  302. package/dist/client/assets/{usage-stats-BmyhY2hQ.js → usage-stats-Cn2qCRA8.js} +1 -1
  303. package/dist/client/assets/{use-ai-providers-D9fgOV9l.js → use-ai-providers-Cx5UT-vT.js} +1 -1
  304. package/dist/client/assets/{use-apply-named-rule-IXYmBDIE.js → use-apply-named-rule-COSs23AZ.js} +1 -1
  305. package/dist/client/assets/{use-automations-C69NPUwP.js → use-automations-CnZ_1JAW.js} +1 -1
  306. package/dist/client/assets/{use-autosave-CTJSaQ0_.js → use-autosave-C6eNyinK.js} +1 -1
  307. package/dist/client/assets/{use-chat-layout-state-CJZYxlgv.js → use-chat-layout-state-Bj-Wwagx.js} +1 -1
  308. package/dist/client/assets/{use-clock-tick-DREB10jn.js → use-clock-tick-Coa6KXLi.js} +1 -1
  309. package/dist/client/assets/{use-cms-publish-actions-DMKczmsK.js → use-cms-publish-actions-PKBwvQ19.js} +1 -1
  310. package/dist/client/assets/{use-connect-companion-BjwYn44-.js → use-connect-companion-DkoM-J86.js} +1 -1
  311. package/dist/client/assets/{use-connection-K2ZmGfOt.js → use-connection-Dc63mME4.js} +1 -1
  312. package/dist/client/assets/{use-copy-BaUwV4kr.js → use-copy-D4hLaNAN.js} +1 -1
  313. package/dist/client/assets/{use-create-virtual-mcp-BwVPiDjw.js → use-create-virtual-mcp-EGfMshVo.js} +1 -1
  314. package/dist/client/assets/{use-date-fns-locale-DENjQBhy.js → use-date-fns-locale-BbAH1_Ri.js} +1 -1
  315. package/dist/client/assets/{use-debounced-autosave-dbZuRAQA.js → use-debounced-autosave-CWkGAvNc.js} +1 -1
  316. package/dist/client/assets/{use-debounced-value-FWET2Ehv.js → use-debounced-value-C347aQV_.js} +1 -1
  317. package/dist/client/assets/{use-deco-credits-1VNQ8RMw.js → use-deco-credits-DND4JPOw.js} +1 -1
  318. package/dist/client/assets/{use-decopilot-events-CUD4NK1e.js → use-decopilot-events-BRJljIy6.js} +1 -1
  319. package/dist/client/assets/{use-delete-connection-CgFangVs.js → use-delete-connection-eplMquo9.js} +1 -1
  320. package/dist/client/assets/{use-deployment-admin-zH7DDGue.js → use-deployment-admin-DU13nGdE.js} +1 -1
  321. package/dist/client/assets/{use-fast-preview-draft-url-DoiFL4L5.js → use-fast-preview-draft-url-BjJTEZ7g.js} +1 -1
  322. package/dist/client/assets/{use-file-configs-DUC_lmME.js → use-file-configs-N7Tlds3U.js} +1 -1
  323. package/dist/client/assets/{use-inbox-feed-CqYC-MvT.js → use-inbox-feed-BIicUPsc.js} +1 -1
  324. package/dist/client/assets/{use-infinite-scroll-Ch7Ei01m.js → use-infinite-scroll-Bw1U14jt.js} +1 -1
  325. package/dist/client/assets/{use-join-requests-DErzm4wT.js → use-join-requests-DPqVtpJ2.js} +1 -1
  326. package/dist/client/assets/{use-main-panel-tabs-BSyzNm2k.js → use-main-panel-tabs-Bwt-KKWc.js} +1 -1
  327. package/dist/client/assets/{use-mcp-auth-status-k4owDbnR.js → use-mcp-auth-status-D4ClK6a8.js} +1 -1
  328. package/dist/client/assets/{use-mcp-client-DogzcDtd.js → use-mcp-client-Dfp_zv7i.js} +1 -1
  329. package/dist/client/assets/{use-mcp-prompts-BWPx5MeN.js → use-mcp-prompts-B7r5mSAi.js} +1 -1
  330. package/dist/client/assets/{use-mcp-tools-DdYwCCdP.js → use-mcp-tools-C20OcDyu.js} +1 -1
  331. package/dist/client/assets/{use-mobile-DcPhAAsp.js → use-mobile-jttq61S0.js} +1 -1
  332. package/dist/client/assets/{use-move-blocks-DWaZEG7l.js → use-move-blocks-Ce6eWoe9.js} +1 -1
  333. package/dist/client/assets/{use-navigate-to-agent-IXTtvMGy.js → use-navigate-to-agent-WZ3sN4Lv.js} +1 -1
  334. package/dist/client/assets/{use-open-billing-url-NkAi-AAT.js → use-open-billing-url-B0KVr1q2.js} +1 -1
  335. package/dist/client/assets/{use-org-fs-DjqN5PQk.js → use-org-fs-CpxLC6mJ.js} +1 -1
  336. package/dist/client/assets/{use-org-repo-syncs-Cb1LW2ou.js → use-org-repo-syncs-CuCpDjP7.js} +1 -1
  337. package/dist/client/assets/{use-org-sso-C5KRT8Da.js → use-org-sso-Cq36gzuS.js} +1 -1
  338. package/dist/client/assets/{use-organization-roles-D7Za_lux.js → use-organization-roles-D5xtpVOM.js} +1 -1
  339. package/dist/client/assets/{use-organization-settings-DR7d93_z.js → use-organization-settings-Dt8SOUZs.js} +1 -1
  340. package/dist/client/assets/{use-panel-navigate-BCKq-TfH.js → use-panel-navigate-BTZCdBFp.js} +1 -1
  341. package/dist/client/assets/{use-project-native-view-presence-CJUNczNu.js → use-project-native-view-presence-czhv_owV.js} +1 -1
  342. package/dist/client/assets/{use-project-scope-B0et_e8n.js → use-project-scope--fGDju-q.js} +1 -1
  343. package/dist/client/assets/{use-recent-apps-4hKksVnL.js → use-recent-apps-CYfrDyiU.js} +1 -1
  344. package/dist/client/assets/{use-releases-Brxi4pIf.js → use-releases-BH8e0b1y.js} +1 -1
  345. package/dist/client/assets/{use-reports-diagnostic-BrQisY2f.js → use-reports-diagnostic-BTPs0_JC.js} +1 -1
  346. package/dist/client/assets/{use-sandbox-events-BY2iUkYN.js → use-sandbox-events-DBlkaRHT.js} +1 -1
  347. package/dist/client/assets/{use-secrets-BadtzYAw.js → use-secrets-BWLFd6sE.js} +1 -1
  348. package/dist/client/assets/{use-section-preview-base-dBughhn0.js → use-section-preview-base-2hoLVPT_.js} +1 -1
  349. package/dist/client/assets/{use-session-runtime-B4KIbkK7.js → use-session-runtime-BgpZYJe5.js} +1 -1
  350. package/dist/client/assets/{use-sidebar-collapsed-cT1Flise.js → use-sidebar-collapsed-jUE24mDX.js} +1 -1
  351. package/dist/client/assets/{use-tags-TSeOGije.js → use-tags-BeBBBS9o.js} +1 -1
  352. package/dist/client/assets/{use-task-board-analytics-DDlJfCk9.js → use-task-board-analytics-B9aU0hXj.js} +1 -1
  353. package/dist/client/assets/{use-task-board-events-DgTjbss7.js → use-task-board-events-B63hjUIR.js} +1 -1
  354. package/dist/client/assets/{use-task-board-item-prs-JnKytEtF.js → use-task-board-item-prs-BEs657vt.js} +1 -1
  355. package/dist/client/assets/{use-task-metadata-CqY7HgDo.js → use-task-metadata-Dze4qB0D.js} +1 -1
  356. package/dist/client/assets/{use-thread-analytics-BPVVv0U5.js → use-thread-analytics-BgxNb0K_.js} +1 -1
  357. package/dist/client/assets/{use-thread-outputs-CjJgHscq.js → use-thread-outputs-9pOmHwSy.js} +1 -1
  358. package/dist/client/assets/useInfiniteQuery-DbCJne-X.js +1 -0
  359. package/dist/client/assets/{useQueries-BxI-y7oE.js → useQueries-DpzZ9d-4.js} +1 -1
  360. package/dist/client/assets/useSuspenseInfiniteQuery-D8hE82mX.js +1 -0
  361. package/dist/client/assets/{users-DgL9fzoZ.js → users-_VPzVwGC.js} +1 -1
  362. package/dist/client/assets/{utils-CEKLHG87.js → utils-Bv6P_eDj.js} +1 -1
  363. package/dist/client/assets/{variant-calendar-rECJW6F2.js → variant-calendar-vlVpSUNv.js} +1 -1
  364. package/dist/client/assets/{variant-matcher-override-B10eyFaR.js → variant-matcher-override-Cyowv-Np.js} +1 -1
  365. package/dist/client/assets/{view-header-CnoXEZ6r.js → view-header-CpfRppDY.js} +1 -1
  366. package/dist/client/assets/{virtual-mcp-skvwiaad.js → virtual-mcp-psEuyUkr.js} +1 -1
  367. package/dist/client/assets/{watch-sse-pool-BD6-sAKH.js → watch-sse-pool-BjVibsQB.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-CaqNBpQA.js +0 -2
  372. package/dist/client/assets/agent-app-DjBhUw5o.js +0 -1
  373. package/dist/client/assets/agent-deck-5QYiPo7g.js +0 -1
  374. package/dist/client/assets/agent-experiments-DbScA798.js +0 -1
  375. package/dist/client/assets/agent-library-Dn9V9HRF.js +0 -1
  376. package/dist/client/assets/agent-library-file-DwvWIojZ.js +0 -1
  377. package/dist/client/assets/agent-monitor-BfOHieYM.js +0 -1
  378. package/dist/client/assets/agent-settings-BBVQpT76.js +0 -1
  379. package/dist/client/assets/agent-site-editor-code-DaRLEV5p.js +0 -2
  380. package/dist/client/assets/agent-site-editor-content--qfnrcml.js +0 -1
  381. package/dist/client/assets/agent-site-editor-preview-BUTGq7zp.js +0 -1
  382. package/dist/client/assets/agent-view-CsFo6WNW.js +0 -1
  383. package/dist/client/assets/api-keys-DOllUAfq.js +0 -1
  384. package/dist/client/assets/library-DXmyt1Gx.js +0 -1
  385. package/dist/client/assets/project-reports-BMuAb39w.js +0 -1
  386. package/dist/client/assets/project-tasks-DoKHGxuy.js +0 -1
  387. package/dist/client/assets/record-editor-AV1QHLlq.js +0 -1
  388. package/dist/client/assets/reports-BNzwh8kk.js +0 -1
  389. package/dist/client/assets/repositories-yB6zWwua.js +0 -1
  390. package/dist/client/assets/route-BR5FTjOO.js +0 -1
  391. package/dist/client/assets/settings-tab-BFy7GozF.js +0 -1
  392. package/dist/client/assets/site-editor-BSPzYjtA.js +0 -1
  393. package/dist/client/assets/tasks-ofNfVL13.js +0 -1
  394. package/dist/client/assets/useInfiniteQuery-DocXgAgp.js +0 -1
  395. package/dist/client/assets/useSuspenseInfiniteQuery-DfsNYX5W.js +0 -1
@@ -4556,7 +4556,7 @@ ${X}`:`${Y}
4556
4556
 
4557
4557
  ${X}
4558
4558
  ${J.slice(Y.length).trimStart()}`}function bP8($){return $?.match(NU5)?.[1]?.toLowerCase()??null}async function OU5($,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 vP8($,Z){try{return await UY0($.client,$.packagePath,Z)}catch(Q){if(Q instanceof m2)return null;throw Q}}async function xP8($,Z,Q){let Y=WO($.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([vP8($,Z),vP8($,Q)]);return G!==W}async function fP8($,Z){if(!XD0(Z))throw new Pl;if(!await Sq1($.store,$.site,Z))throw new Pl}async function yP8($,Z){await fP8($,Z);let Q=await C5($.client,$.mainBranch);return xP8($,Q,Z)}async function gP8($,Z,Q={},Y={}){await fP8($,Z);let X=await $.client.readCommit(Z);if(!X)throw new Pl;let J=await C5($.client,$.mainBranch),G=await OU5($,J,Z);if(G.changes.length===0)return{result:"up-to-date"};let W=await xP8($,J,Z);if(W)console.info("hosted reapply: schema differs",{site:$.site,target:Z,head:J});let K=await _q1($,J,G,LU5(X,Z,Q.coAuthor));return{result:"merged",sha:K,release:await Dh0($,K,Y),schemaChanged:W}}var Pl,UU5="Reapplied-From",NU5;var yq1=L(()=>{kp();W5();sK();HB();BY0();Bh0();_P8();Pl=class Pl extends Error{constructor(){super("This commit has no release");this.name="NotPublishedError"}};NU5=/^Reapplied-From:\s*([0-9a-f]{40})\s*$/im});async function hP8($,Z,Q){let[Y,X,J]=await Promise.all([NY0($.store,$.site),z2$($.store,$.site),Z.listCommits({ref:$.mainBranch,since:wU5,cursor:Q,limit:jU5})]),G=new Map(J.items.map((H)=>[H.sha,H.date])),W=J.items.map((H)=>bP8(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 uP8($){let Z=await C5($.client,$.mainBranch),Q=await vq1($,Z);return bq1($,{revision:Z,schemaHash:Q,publishedAt:new Date().toISOString()})}var jU5=50,wU5="1970-01-01T00:00:00Z";var lP8=L(()=>{W5();HB();BY0();yq1()});function mP8($){return`site-tokens:${$}`}function PU5($){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 cP8($){return crypto.subtle.importKey("pkcs8",Buffer.from($,"base64"),{name:"Ed25519"},!1,["sign"])}async function EU5($,Z){let Q=(J)=>gq1(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}.${gq1(X)}`}function dP8($){let Z=async(Q,Y)=>PU5(await $.kv.get(Q,mP8(Y)));return{list:Z,async issue(Q,Y){let X=await Z(Q,Y),J={kid:gq1(crypto.getRandomValues(new Uint8Array(16))),iat:Math.floor(Date.now()/1000)},G=await EU5(await $.signingKey(),{site:Y,...J});return await $.kv.set(Q,mP8(Y),{tokens:[...X,J]}),{token:G,record:J}}}}var gq1=($)=>Buffer.from($ instanceof Uint8Array?$:new Uint8Array($)).toString("base64url");function AU5(){let $=nq();return $?{store:$,purge:Fh0()}:null}async function Eh0($){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 Uh0({site:Q.site,metadata:Q.metadata,domains:$.var.siteDomains})}}function iP8($){let Z=B0().siteTokenSigningKey;if(!Z)return null;return dP8({kv:$.var.studioContext.storage.kv,signingKey:()=>cP8(Z)})}function es($,Z){let Q=Z instanceof Error?Z.message:String(Z);if(Z instanceof m2)return $.json({error:Q},409);if(Z instanceof Lh0)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 pP8($={}){let Z=new $1,Q=$.repoClientFor??h3,Y=$.insightsFor??qP$,X=$.delivery??AU5;return Z.use("*",async(J,G)=>{J.set("repoClientFor",Q),J.set("delivery",X),J.set("siteDomains",$.siteDomains),await G()}),Z.use("/:virtualMcpId/*",zU5),Z.get("/:virtualMcpId/releases",async(J)=>{try{let G=await Eh0(J);if(!G)return J.json(Ph0,503);let W=J.get("hostedProject"),K=await Y(J.var.studioContext,W.organizationId,W.repository);return J.json(await hP8(G,K,J.req.query("cursor")??null),200,{"Cache-Control":"no-store"})}catch(G){return es(J,G)}}),Z.post("/:virtualMcpId/releases/retry",async(J)=>{try{let G=await Eh0(J);if(!G)return J.json(Ph0,503);let W=await J.req.json().catch(()=>({})),K=await uP8(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 xq1(G,KD0({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 es(J,G)}}),Z.get("/:virtualMcpId/releases/:sha/reapply",async(J)=>{try{let G=await Eh0(J);if(!G)return J.json(Ph0,503);return J.json({schemaChanged:await yP8(G,J.req.param("sha"))})}catch(G){if(G instanceof Pl)return J.json({error:G.message},404);return es(J,G)}}),Z.post("/:virtualMcpId/releases/:sha/reapply",async(J)=>{try{let G=await Eh0(J);if(!G)return J.json(Ph0,503);let W=await gP8(G,J.req.param("sha"),{coAuthor:OO(J.var.studioContext)});return J.json(W)}catch(G){if(G instanceof Pl)return J.json({error:G.message},404);if(G instanceof wl)return J.json({error:"main-moved"},409);return es(J,G)}}),Z.get("/:virtualMcpId/site-tokens",async(J)=>{let G=J.get("hostedProject"),W=iP8(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=iP8(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 tq(K,G.packagePath,await K.getDefaultBranch());if(await pi(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 es(J,K)}}),Z}var zU5,Ph0;var nP8=L(()=>{dF();H8();tg0();kJ();iF();W5();HB();Tq1();HD0();BY0();Cq1();Bh0();lP8();yq1();Z60();oq();ii();u1();MR();zU5=us(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 VQ(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(!vQ(await ZQ(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 UD0({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 es($,H)}let K=await FD0(Q.storage.orgSites,X,Y.id);if(!K)return $.json(di,409);return $.set("hostedProject",{organizationId:Y.id,virtualMcpId:X,site:K,packagePath:FB(G),repository:W,metadata:G}),Z()}),Ph0={error:"hosted delivery not configured"}});var tP8=($)=>{let Z=new $1;if(Z.use("*",Fs),Z.use("*",XB8),Z.route("/",QB8($.voiceSessions)),Z.route("/",$g0()),Z.route("/",cB8()),Z.route("/",ZD8()),Z.route("/",gB8()),Z.route("/",Jj8()),Z.route("/",Wj8()),Z.route("/",aO8()),Z.route("/",Yj8()),Z.route("/",eO8()),Z.route("/",ig0()),Z.route("/tools",Dj8()),Z.route("/",Uj8()),Z.route("/",SO8({kvStorage:$.kvStorage})),Z.route("/",kO8()),Z.route("/fs",mO8({getConnection:$.getNatsConnection})),Z.route("/sandbox",bw8()),Z.route("/decofile",VP8()),Z.route("/hosted",pP8()),Z.route("/",tO8()),Z.route("/",dO8()),Z.route("/deco-sites",Qg0()),Z.route("/hosting",LB8()),Z.route("/monitor",VB8()),Z.route("/order-monitor",bB8()),Z.route("/sso",ty0()),Z.route("/",pg0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",FB8()),$.mountDevAssets)Z.route("/dev-assets",Hg0({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 fT1)Z.use(`${Q}/:threadId`,$.mcpAuth);Z.route("/",tG8()),Z.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",$.betterAuthProtectedResourceHandler),Z.get("/mcp/.well-known/oauth-protected-resource",$.betterAuthProtectedResourceHandler);for(let Q of fT1)Z.route(Q,pO8());return Z.route("/mcp",Nx0()),Z.route("/mcp/self",lg0()),Z.route("/mcp",Lx0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var oP8=L(()=>{H8();YB8();JB8();yy0();UB8();HA1();OB8();IB8();xB8();Fg0();b2();XA1();dB8();LA1();CO8();_O8();cO8();iO8();LZ0();o21();Ox0();xT1();nO8();oO8();rO8();$j8();hT1();Gj8();Kj8();Nj8();uT1();Lj8();lT1();Bx0();xw8();IP8();nP8()});import{z as El}from"zod";class hq1{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 rP8.Kvm(zh0.jetstream($)).create("STUDIO_VOICE_SESSIONS",{storage:zh0.StorageType.Memory,ttl:eP8.nanos(fO),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"?aP8.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=sP8.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,sP8.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"?aP8.parse(G.json()):null;if(G&&W?.state==="ready"&&W.agentId===Q)await X.delete(J,{previousSeq:G.revision}).catch(()=>{});throw Y}}}var zh0,rP8,eP8,sP8,aP8;var $E8=L(()=>{U3();fB();g$();zh0=_(sH(),1),rP8=_(zq(),1),eP8=_(NA(),1),sP8=new TextEncoder,aP8=El.discriminatedUnion("state",[El.object({state:El.literal("ready"),agentId:El.string()}),El.object({state:El.literal("creating"),expiresAt:El.number()})])});import{z as $a}from"zod";function TU5($){return{model:$.model,instructions:`${Pi$}
4559
- Start in ${$.language==="pt"?"Brazilian Portuguese":"English"}, and follow the user's language.`,delegation:{type:"client"},audio:{output:{voice:$.voice}},store:!1}}class uq1{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:TU5({...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:$a.object({session:$a.object({id:$a.string().min(1)}),transport:$a.object({type:$a.literal("webrtc"),sdp:$a.string().min(1).max(1e5)})}).parse(await Z.json()).transport.sdp}}}var ZE8=L(()=>{fB()});var QE8;var YE8=L(()=>{QE8=[{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 lq1($){return{conversation_config:{agent:{first_message:"",language:"en",prompt:{prompt:ji$,llm:$.conversationModel,thinking_budget:0,max_tokens:512,tools:QE8.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:fO/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 XE8=L(()=>{fB();YE8()});import{z as eJ}from"zod";import{createHash as qU5,createHmac as RU5}from"crypto";class Ah0{config;conversationKey;configurationKey;constructor($){this.config=$;this.configurationKey=qU5("sha256").update(JSON.stringify(lq1($))).digest("hex"),this.conversationKey=RU5("sha256",$.apiKey).update(this.configurationKey).digest("hex")}forConversationModel($){return $===this.config.conversationModel?this:new Ah0({...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}=eJ.object({agents:eJ.array(eJ.object({agent_id:eJ.string(),name:eJ.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 eJ.object({platform_settings:eJ.object({auth:eJ.object({enable_auth:eJ.literal(!0)})})}).parse(await J.json()),Y.agent_id}let X=await this.request("/convai/agents/create",{name:$,...lq1(this.config)},AbortSignal.timeout(15000));return eJ.object({agent_id:eJ.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 eJ.object({token:eJ.string().min(1)}).parse(await Z.json()).token}async createTranscriptionToken(){let $=await this.request("/single-use-token/realtime_scribe",{},AbortSignal.timeout(15000));return eJ.object({token:eJ.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 JE8=L(()=>{XE8()});import{createHmac as MU5,timingSafeEqual as VU5}from"crypto";import{z as Za}from"zod";function WE8($,Z){if(!Z)throw Error("Voice requires a shared authentication secret");return MU5("sha256",Z).update(`studio-voice-session:v1:${$}`).digest("base64url")}function KE8($,Z){let Q=Buffer.from(JSON.stringify(GE8.parse($))).toString("base64url");return`${Q}.${WE8(Q,Z)}`}function HE8($,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(WE8(X,Z)),W=Buffer.from(J);if(W.length!==G.length||!VU5(W,G))return null;try{let K=GE8.safeParse(JSON.parse(Buffer.from(X,"base64url").toString()));if(!K.success||K.data.expiresAt<=Q||K.data.expiresAt>Q+fO)return null;return K.data}catch{return null}}var GE8;var FE8=L(()=>{fB();GE8=Za.object({sessionId:Za.string().uuid(),organizationId:Za.string().min(1).max(256),userId:Za.string().min(1).max(256),threadId:Za.string().min(1).max(256),expiresAt:Za.number().int().positive()})});import{z as mq1}from"zod";function UE8($,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 cq1.parse({provider:Q,model:Z?.voice_model??(Q==="openai"?$.openaiLiveModel:$.elevenlabsConversationModel)})}var cq1;var NE8=L(()=>{cq1=mq1.object({provider:mq1.enum(["elevenlabs","openai"]),model:mq1.string().trim().min(1).max(128)})});import{createHash as IU5}from"crypto";import{z as Qa}from"zod";function Ya($){return`user.${IU5("sha256").update(JSON.stringify([$.organizationId,$.userId])).digest("hex")}`}class iq1{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 BE8.Kvm(qh0.jetstream($)).create("STUDIO_VOICE_SESSIONS",{storage:qh0.StorageType.Memory,ttl:DE8.nanos(fO),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=UE8(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()+fO},W=KE8(G,this.deps.secret),K=await this.kv(),H=Ya(G),F=await K.get(H),U=F?.operation==="PUT"?Th0.parse(F.json()):null,N=dq1.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:Ya($)});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=HE8(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=Ya(Q),J=await Y.get(X),G=J?.operation==="PUT"?Th0.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,dq1.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=Ya(X);for(let W=0;;W++){let K=await J.get(G),H=K?.operation==="PUT"?Th0.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,dq1.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(Ya($));if(Q?.operation==="PUT"&&Th0.parse(Q.json()).sessionId===$.sessionId)await Z.delete(Ya($),{previousSeq:Q.revision})}async revoke($,Z){await this.release(this.authorize($,Z))}}var qh0,BE8,DE8,Th0,dq1;var LE8=L(()=>{U3();fB();FE8();NE8();qh0=_(sH(),1),BE8=_(zq(),1),DE8=_(NA(),1),Th0=Qa.object({sessionId:Qa.string().uuid(),expiresAt:Qa.number(),connected:Qa.boolean().optional(),conversation:cq1.optional(),characters:Qa.number().int().nonnegative(),requests:Qa.number().int().nonnegative()}),dq1=new TextEncoder});import{z as c1}from"zod";function ED($,Z="invalid_request_error",Q=null,Y=null){return{error:{message:$,type:Z,param:Q,code:Y}}}function gU5($){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 hU5($,Z,Q){try{return JSON.parse($)}catch{throw new wE8(`Invalid JSON in tool call arguments for function '${Q}' (tool_call_id: ${Z}): ${$}`)}}function uU5($){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:hU5(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 lU5($){let Z=$.map((Q)=>{let Y=Q.function.parameters?_N(Q.function.parameters):_N({type:"object",properties:{}});return[Q.function.name,r$({description:Q.function.description,inputSchema:Y})]});return Object.fromEntries(Z)}function mU5($){if(!$)return;return{openai:{response_format:$}}}function cU5(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function OE8($,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 jE8($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var kU5=256,CU5,SU5,_U5,vU5,bU5,xU5,fU5,yU5,wE8,PE8,EE8;var zE8=L(()=>{u4();H8();hs();PU();CU5=c1.object({type:c1.literal("function"),function:c1.object({name:c1.string(),description:c1.string().optional(),parameters:c1.record(c1.string(),c1.unknown()).optional()})}),SU5=c1.object({id:c1.string(),type:c1.literal("function"),function:c1.object({name:c1.string(),arguments:c1.string()})}),_U5=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(SU5).optional()}),c1.object({role:c1.literal("tool"),content:c1.string(),tool_call_id:c1.string()})]),vU5=c1.object({type:c1.literal("text")}),bU5=c1.object({type:c1.literal("json_object")}),xU5=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()})}),fU5=c1.union([vU5,bU5,xU5]),yU5=c1.object({model:c1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:c1.array(_U5),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(CU5).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:fU5.optional(),user:c1.string().optional()});wE8=class wE8 extends Error{constructor($){super($);this.name="MessageConversionError"}};PE8=new $1;PE8.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),Q=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(ED("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(ED("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(ED("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Y=await $.req.json(),X=yU5.safeParse(Y);if(!X.success){let j=X.error.issues[0]??{message:"Invalid request",path:[]};return $.json(ED(`Invalid request: ${j.message}`,"invalid_request_error",j.path.length>0?j.path.join("."):null),400)}let J=X.data,G=gU5(J.model);if(!G)return $.json(ED("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((P)=>LT(P.providerId));if(!w)return $.json(ED("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(ED(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),U=uU5(J.messages),N=J.tools?lU5(J.tools):void 0,B=mU5(J.response_format),D=cU5(),O=Math.floor(Date.now()/1000);if(J.stream)return vj($,async(j)=>{let w=OE8(F,U,N,J,B,$.req.raw.signal);try{let P=vn(w),E=!1,A=0,z="",T=async()=>{if(z.length===0)return;let R=z;z="",await j.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:O,model:J.model,choices:[{index:0,delta:{content:R},finish_reason:null}]})})};for await(let R of P.stream){if(!E&&(R.type==="text-delta"||R.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}]})}),E=!0;if(R.type==="text-delta"){if(z+=R.text,z.length>=kU5)await T()}else if(R.type==="tool-call"){await T();let f=A++;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:R.toolCallId,type:"function",function:{name:R.toolName,arguments:JSON.stringify(R.input)}}]},finish_reason:null}]})})}else if(R.type==="finish")await T(),await j.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:O,model:J.model,choices:[{index:0,delta:{},finish_reason:jE8(R.finishReason)}],usage:R.totalUsage?{prompt_tokens:R.totalUsage.inputTokens??0,completion_tokens:R.totalUsage.outputTokens??0,total_tokens:R.totalUsage.totalTokens??0}:void 0})})}await T(),await j.writeSSE({data:"[DONE]"})}catch(P){let E=P;console.error("[openai-compat:stream] Error:",E.message),await j.writeSSE({data:JSON.stringify({error:{message:E.message,type:"server_error"}})})}});else{let j=OE8(F,U,N,J,B,$.req.raw.signal),w=await hO(j),P={role:"assistant",content:w.text||null};if(w.toolCalls&&w.toolCalls.length>0)P.tool_calls=w.toolCalls.map((E)=>({id:E.toolCallId,type:"function",function:{name:E.toolName,arguments:JSON.stringify("input"in E?E.input:{})}})),P.content=null;return $.json({id:D,object:"chat.completion",created:O,model:J.model,choices:[{index:0,message:P,finish_reason:jE8(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(ED("Request aborted","invalid_request_error"),400);if(X.name==="MessageConversionError")return $.json(ED(X.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",X.message,X.stack),$.json(ED(X.message,"server_error"),500)}});EE8=PE8});function dU5($){if(typeof $!=="object"||$===null)return!1;let Q=$.repository?.url;return typeof Q==="string"&&Q.length>0}function AE8(){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=C0(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(yT(U)!==J)continue;if(!dU5(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 TE8=L(()=>{H8();FX()});var Rh0;var pq1=L(()=>{Rh0={name:"decocms",version:"4.532.2",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run dev:server","dev:server":"NODE_ENV=development bun --env-file=.env --watch run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^4.0.58","@ai-sdk/google":"^4.0.76","@ai-sdk/openai":"^4.0.71","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^3.1.0","@opentelemetry/core":"^2.6.0",kysely:"^0.28.12","posthog-node":"^5.0.0"},devDependencies:{"@ai-sdk/provider":"^4.0.17","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/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 nU5(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??pU5}}var qE8,pU5="https://ph.studio.decocms.com",RE8;var ME8=L(()=>{H8();Me();sh();B9();u1();Jj();v21();pq1();qE8=new $1;qE8.get("/",($)=>{let Z={version:Rh0.version,theme:b4$(),...UF().logo&&{logo:UF().logo},...sO()&&{internalUrl:b8$()},...B0().enableDecoImport&&{enableDecoImport:!0},hostingEnabled:!!B0().controlplaneRestUrl&&!!B0().controlplaneServiceToken,hostingControlPlaneGa:B0().hostingControlPlaneGa,monitorEnabled:!!B0().clickhouseAnalyticsUrl&&!!B0().clickhouseAnalyticsPassword,monitorGa:B0().monitorGa,orderMonitorEnabled:!!B0().orderMonitorIngestUrl&&gW(),plansEnabled:B0().plansEnabled,auth:iU8(),posthog:nU5(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:yU()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});RE8=qE8});import{z as M$}from"zod";var tU5,VE8;var IE8=L(()=>{tU5=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())}),VE8=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(tU5)})),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 kE8($,Z,Q){let Y=Q?`?${new URLSearchParams({lang:Q}).toString()}`:"";return`${hK({})}/api/v2/public/diagnostics/${encodeURIComponent($)}/onepager${Z}${Y}`}async function Mh0($,Z={}){let Q=await fetch(kE8($,"",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 VE8.parse(await Q.json())}async function CE8($,Z={}){let Q=await fetch(kE8($,".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 nq1=L(()=>{IE8();pL()});import{join as SE8}from"path";async function sU5($){try{let Z=await Mh0($,{signal:AbortSignal.timeout(oU5)});if(!Z?.scanned_at)return null;return{brand:Z.brand.trim()||$P1($),...Z.score!==null?{score:Z.score}:{}}}catch{return null}}function LG($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function aU5($,Z){let Q=Iu($),Y=Z?.brand?.trim()||$P1(Q),X=dJ8(Q,128),G=`${(B0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(Q)}`,{title:W,description:K}=iJ8({brand:Y,domain:Q,score:Z?.score}),H=`${G}/og.png`,F=`${Y} Deco Score by decocms`;return[`<title>${LG(W)}</title>`,`<meta name="description" content="${LG(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="${LG(W)}" />`,`<meta property="og:description" content="${LG(K)}" />`,`<meta property="og:url" content="${LG(G)}" />`,`<meta property="og:image" content="${LG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${LG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${LG(W)}" />`,`<meta name="twitter:description" content="${LG(K)}" />`,`<meta name="twitter:image" content="${LG(H)}" />`,`<meta name="twitter:image:alt" content="${LG(F)}" />`,`<link rel="canonical" href="${LG(G)}" />`,`<link rel="alternate" type="text/markdown" href="${LG(G)}.md" />`,`<link rel="icon" href="${LG(X)}" sizes="any" />`].join(`
4559
+ Start in ${$.language==="pt"?"Brazilian Portuguese":"English"}, and follow the user's language.`,delegation:{type:"client"},audio:{output:{voice:$.voice}},store:!1}}class uq1{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:TU5({...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:$a.object({session:$a.object({id:$a.string().min(1)}),transport:$a.object({type:$a.literal("webrtc"),sdp:$a.string().min(1).max(1e5)})}).parse(await Z.json()).transport.sdp}}}var ZE8=L(()=>{fB()});var QE8;var YE8=L(()=>{QE8=[{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 lq1($){return{conversation_config:{agent:{first_message:"",language:"en",prompt:{prompt:ji$,llm:$.conversationModel,thinking_budget:0,max_tokens:512,tools:QE8.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:fO/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 XE8=L(()=>{fB();YE8()});import{z as eJ}from"zod";import{createHash as qU5,createHmac as RU5}from"crypto";class Ah0{config;conversationKey;configurationKey;constructor($){this.config=$;this.configurationKey=qU5("sha256").update(JSON.stringify(lq1($))).digest("hex"),this.conversationKey=RU5("sha256",$.apiKey).update(this.configurationKey).digest("hex")}forConversationModel($){return $===this.config.conversationModel?this:new Ah0({...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}=eJ.object({agents:eJ.array(eJ.object({agent_id:eJ.string(),name:eJ.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 eJ.object({platform_settings:eJ.object({auth:eJ.object({enable_auth:eJ.literal(!0)})})}).parse(await J.json()),Y.agent_id}let X=await this.request("/convai/agents/create",{name:$,...lq1(this.config)},AbortSignal.timeout(15000));return eJ.object({agent_id:eJ.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 eJ.object({token:eJ.string().min(1)}).parse(await Z.json()).token}async createTranscriptionToken(){let $=await this.request("/single-use-token/realtime_scribe",{},AbortSignal.timeout(15000));return eJ.object({token:eJ.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 JE8=L(()=>{XE8()});import{createHmac as MU5,timingSafeEqual as VU5}from"crypto";import{z as Za}from"zod";function WE8($,Z){if(!Z)throw Error("Voice requires a shared authentication secret");return MU5("sha256",Z).update(`studio-voice-session:v1:${$}`).digest("base64url")}function KE8($,Z){let Q=Buffer.from(JSON.stringify(GE8.parse($))).toString("base64url");return`${Q}.${WE8(Q,Z)}`}function HE8($,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(WE8(X,Z)),W=Buffer.from(J);if(W.length!==G.length||!VU5(W,G))return null;try{let K=GE8.safeParse(JSON.parse(Buffer.from(X,"base64url").toString()));if(!K.success||K.data.expiresAt<=Q||K.data.expiresAt>Q+fO)return null;return K.data}catch{return null}}var GE8;var FE8=L(()=>{fB();GE8=Za.object({sessionId:Za.string().uuid(),organizationId:Za.string().min(1).max(256),userId:Za.string().min(1).max(256),threadId:Za.string().min(1).max(256),expiresAt:Za.number().int().positive()})});import{z as mq1}from"zod";function UE8($,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 cq1.parse({provider:Q,model:Z?.voice_model??(Q==="openai"?$.openaiLiveModel:$.elevenlabsConversationModel)})}var cq1;var NE8=L(()=>{cq1=mq1.object({provider:mq1.enum(["elevenlabs","openai"]),model:mq1.string().trim().min(1).max(128)})});import{createHash as IU5}from"crypto";import{z as Qa}from"zod";function Ya($){return`user.${IU5("sha256").update(JSON.stringify([$.organizationId,$.userId])).digest("hex")}`}class iq1{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 BE8.Kvm(qh0.jetstream($)).create("STUDIO_VOICE_SESSIONS",{storage:qh0.StorageType.Memory,ttl:DE8.nanos(fO),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=UE8(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()+fO},W=KE8(G,this.deps.secret),K=await this.kv(),H=Ya(G),F=await K.get(H),U=F?.operation==="PUT"?Th0.parse(F.json()):null,N=dq1.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:Ya($)});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=HE8(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=Ya(Q),J=await Y.get(X),G=J?.operation==="PUT"?Th0.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,dq1.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=Ya(X);for(let W=0;;W++){let K=await J.get(G),H=K?.operation==="PUT"?Th0.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,dq1.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(Ya($));if(Q?.operation==="PUT"&&Th0.parse(Q.json()).sessionId===$.sessionId)await Z.delete(Ya($),{previousSeq:Q.revision})}async revoke($,Z){await this.release(this.authorize($,Z))}}var qh0,BE8,DE8,Th0,dq1;var LE8=L(()=>{U3();fB();FE8();NE8();qh0=_(sH(),1),BE8=_(zq(),1),DE8=_(NA(),1),Th0=Qa.object({sessionId:Qa.string().uuid(),expiresAt:Qa.number(),connected:Qa.boolean().optional(),conversation:cq1.optional(),characters:Qa.number().int().nonnegative(),requests:Qa.number().int().nonnegative()}),dq1=new TextEncoder});import{z as c1}from"zod";function ED($,Z="invalid_request_error",Q=null,Y=null){return{error:{message:$,type:Z,param:Q,code:Y}}}function gU5($){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 hU5($,Z,Q){try{return JSON.parse($)}catch{throw new wE8(`Invalid JSON in tool call arguments for function '${Q}' (tool_call_id: ${Z}): ${$}`)}}function uU5($){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:hU5(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 lU5($){let Z=$.map((Q)=>{let Y=Q.function.parameters?_N(Q.function.parameters):_N({type:"object",properties:{}});return[Q.function.name,r$({description:Q.function.description,inputSchema:Y})]});return Object.fromEntries(Z)}function mU5($){if(!$)return;return{openai:{response_format:$}}}function cU5(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function OE8($,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 jE8($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var kU5=256,CU5,SU5,_U5,vU5,bU5,xU5,fU5,yU5,wE8,PE8,EE8;var zE8=L(()=>{u4();H8();hs();PU();CU5=c1.object({type:c1.literal("function"),function:c1.object({name:c1.string(),description:c1.string().optional(),parameters:c1.record(c1.string(),c1.unknown()).optional()})}),SU5=c1.object({id:c1.string(),type:c1.literal("function"),function:c1.object({name:c1.string(),arguments:c1.string()})}),_U5=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(SU5).optional()}),c1.object({role:c1.literal("tool"),content:c1.string(),tool_call_id:c1.string()})]),vU5=c1.object({type:c1.literal("text")}),bU5=c1.object({type:c1.literal("json_object")}),xU5=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()})}),fU5=c1.union([vU5,bU5,xU5]),yU5=c1.object({model:c1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:c1.array(_U5),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(CU5).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:fU5.optional(),user:c1.string().optional()});wE8=class wE8 extends Error{constructor($){super($);this.name="MessageConversionError"}};PE8=new $1;PE8.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),Q=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(ED("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(ED("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(ED("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Y=await $.req.json(),X=yU5.safeParse(Y);if(!X.success){let j=X.error.issues[0]??{message:"Invalid request",path:[]};return $.json(ED(`Invalid request: ${j.message}`,"invalid_request_error",j.path.length>0?j.path.join("."):null),400)}let J=X.data,G=gU5(J.model);if(!G)return $.json(ED("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((P)=>LT(P.providerId));if(!w)return $.json(ED("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(ED(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),U=uU5(J.messages),N=J.tools?lU5(J.tools):void 0,B=mU5(J.response_format),D=cU5(),O=Math.floor(Date.now()/1000);if(J.stream)return vj($,async(j)=>{let w=OE8(F,U,N,J,B,$.req.raw.signal);try{let P=vn(w),E=!1,A=0,z="",T=async()=>{if(z.length===0)return;let R=z;z="",await j.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:O,model:J.model,choices:[{index:0,delta:{content:R},finish_reason:null}]})})};for await(let R of P.stream){if(!E&&(R.type==="text-delta"||R.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}]})}),E=!0;if(R.type==="text-delta"){if(z+=R.text,z.length>=kU5)await T()}else if(R.type==="tool-call"){await T();let f=A++;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:R.toolCallId,type:"function",function:{name:R.toolName,arguments:JSON.stringify(R.input)}}]},finish_reason:null}]})})}else if(R.type==="finish")await T(),await j.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:O,model:J.model,choices:[{index:0,delta:{},finish_reason:jE8(R.finishReason)}],usage:R.totalUsage?{prompt_tokens:R.totalUsage.inputTokens??0,completion_tokens:R.totalUsage.outputTokens??0,total_tokens:R.totalUsage.totalTokens??0}:void 0})})}await T(),await j.writeSSE({data:"[DONE]"})}catch(P){let E=P;console.error("[openai-compat:stream] Error:",E.message),await j.writeSSE({data:JSON.stringify({error:{message:E.message,type:"server_error"}})})}});else{let j=OE8(F,U,N,J,B,$.req.raw.signal),w=await hO(j),P={role:"assistant",content:w.text||null};if(w.toolCalls&&w.toolCalls.length>0)P.tool_calls=w.toolCalls.map((E)=>({id:E.toolCallId,type:"function",function:{name:E.toolName,arguments:JSON.stringify("input"in E?E.input:{})}})),P.content=null;return $.json({id:D,object:"chat.completion",created:O,model:J.model,choices:[{index:0,message:P,finish_reason:jE8(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(ED("Request aborted","invalid_request_error"),400);if(X.name==="MessageConversionError")return $.json(ED(X.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",X.message,X.stack),$.json(ED(X.message,"server_error"),500)}});EE8=PE8});function dU5($){if(typeof $!=="object"||$===null)return!1;let Q=$.repository?.url;return typeof Q==="string"&&Q.length>0}function AE8(){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=C0(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(yT(U)!==J)continue;if(!dU5(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 TE8=L(()=>{H8();FX()});var Rh0;var pq1=L(()=>{Rh0={name:"decocms",version:"4.532.3",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 nU5(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??pU5}}var qE8,pU5="https://ph.studio.decocms.com",RE8;var ME8=L(()=>{H8();Me();sh();B9();u1();Jj();v21();pq1();qE8=new $1;qE8.get("/",($)=>{let Z={version:Rh0.version,theme:b4$(),...UF().logo&&{logo:UF().logo},...sO()&&{internalUrl:b8$()},...B0().enableDecoImport&&{enableDecoImport:!0},hostingEnabled:!!B0().controlplaneRestUrl&&!!B0().controlplaneServiceToken,hostingControlPlaneGa:B0().hostingControlPlaneGa,monitorEnabled:!!B0().clickhouseAnalyticsUrl&&!!B0().clickhouseAnalyticsPassword,monitorGa:B0().monitorGa,orderMonitorEnabled:!!B0().orderMonitorIngestUrl&&gW(),plansEnabled:B0().plansEnabled,auth:iU8(),posthog:nU5(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:yU()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});RE8=qE8});import{z as M$}from"zod";var tU5,VE8;var IE8=L(()=>{tU5=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())}),VE8=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(tU5)})),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 kE8($,Z,Q){let Y=Q?`?${new URLSearchParams({lang:Q}).toString()}`:"";return`${hK({})}/api/v2/public/diagnostics/${encodeURIComponent($)}/onepager${Z}${Y}`}async function Mh0($,Z={}){let Q=await fetch(kE8($,"",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 VE8.parse(await Q.json())}async function CE8($,Z={}){let Q=await fetch(kE8($,".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 nq1=L(()=>{IE8();pL()});import{join as SE8}from"path";async function sU5($){try{let Z=await Mh0($,{signal:AbortSignal.timeout(oU5)});if(!Z?.scanned_at)return null;return{brand:Z.brand.trim()||$P1($),...Z.score!==null?{score:Z.score}:{}}}catch{return null}}function LG($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function aU5($,Z){let Q=Iu($),Y=Z?.brand?.trim()||$P1(Q),X=dJ8(Q,128),G=`${(B0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(Q)}`,{title:W,description:K}=iJ8({brand:Y,domain:Q,score:Z?.score}),H=`${G}/og.png`,F=`${Y} Deco Score by decocms`;return[`<title>${LG(W)}</title>`,`<meta name="description" content="${LG(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="${LG(W)}" />`,`<meta property="og:description" content="${LG(K)}" />`,`<meta property="og:url" content="${LG(G)}" />`,`<meta property="og:image" content="${LG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${LG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${LG(W)}" />`,`<meta name="twitter:description" content="${LG(K)}" />`,`<meta name="twitter:image" content="${LG(H)}" />`,`<meta name="twitter:image:alt" content="${LG(F)}" />`,`<link rel="canonical" href="${LG(G)}" />`,`<link rel="alternate" type="text/markdown" href="${LG(G)}.md" />`,`<link rel="icon" href="${LG(X)}" sizes="any" />`].join(`
4560
4560
  `)}function rU5($,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}
4561
4561
  </head>`)}function _E8($){let Z=new $1;return Z.get("/:domain/og.png",async(Q)=>{let Y=Iu(Q.req.param("domain")),X=async()=>{let J=$?Bun.file(SE8($,"report-og-fallback.png")):null;if(!J||!await J.exists())return Q.notFound();return Q.body(new Uint8Array(await J.arrayBuffer()),200,{"Content-Type":"image/png","Cache-Control":"public, max-age=0, s-maxage=3600"})};try{let J=await fetch(`${hK({})}/api/v2/public/diagnostics/${encodeURIComponent(Y)}/og.png`,{signal:AbortSignal.timeout(eU5)}),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=Iu(Q.req.param("file").replace(/\.md$/,""));try{let X=await CE8(Y,{lang:Q.req.query("lang")?.trim()||void 0,signal:AbortSignal.timeout($N5)});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=$?SE8($,"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 sU5(Iu(Y)),K=aU5(Y,W);return Q.html(rU5(G,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return Q.html(G)}}),Z}var oU5=2500,eU5=1e4,$N5=1e4;var vE8=L(()=>{H8();pL();nq1();u1()});function Vh0($,Z){return fetch(`${hK({})}${$}`,Z)}async function ZN5($,Z){let Q=await Mh0($,{lang:Z});if(!Q)return{status:"not_found",report:null};return Q.scanned_at?{status:"ready",report:Q}:{status:"empty",report:null}}function XN5($){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 QN5,YN5=8192,fj,bE8=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},xE8;var fE8=L(()=>{H8();UG();JH();pL();nq1();QN5=new Set(["complete","errored","terminated","unknown"]);fj=new $1;fj.use("*",async($,Z)=>{let Q=await N4.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});fj.use("/link-token/*",bE8);fj.use("/suggest",bE8);fj.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 ZN5(Z,Q))}catch{return $.json({error:"report read failed"},502)}});fj.post("/run",b6({maxSize:YN5,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}=XN5(Q);if(!Y)return $.json({error:"domain is required"},400);let J=Z?.email;try{let G=await Vh0("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${nP({})}`},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)}});fj.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let Q=await Vh0(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${nP({})}`}});if(!Q.ok)return $.json({error:`status HTTP ${Q.status}`},502);let X=(await Q.json()).status??"unknown",J={done:QN5.has(X),status:X};return $.json(J)}catch{return $.json({error:"status failed"},502)}});fj.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let Q=await Vh0(`/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)}});fj.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let Q=await Vh0(`/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:[]})}});xE8=fj});var JN5=1048576,tq1;var yE8=L(()=>{H8();UG();u1();w21();tq1=new $1;tq1.post("/webhook",b6({maxSize:JN5,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(!XU8(Q,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let X=JU8(Q);if(!X)return $.json({error:"invalid payload"},400);let J=await GU8(X);return console.log("stripe webhook",{eventId:X.id,type:X.type,livemode:X.livemode,...J}),$.json({received:!0})})});import{timingSafeEqual as GN5}from"crypto";function HN5($,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 GN5(Buffer.from(X),Buffer.from(Y))}function FN5($,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 gE8($){let Z=new $1;return Z.post("/webhook",b6({maxSize:WN5,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(!HN5(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"&&!KN5.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 e60().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=FN5(J??"",G);if(W.length===0)return Q.json({ok:!0,ignored:"no-pr"});let K=await UN5($,W);return Q.json({ok:!0,refreshed:K})}),Z}async function UN5($,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 Nv0(K,G.organizationId,G.taskBoardItemId)!==null)Q++}catch(W){console.error(`[github-webhook] pr card refresh failed for ${G.taskBoardItemId}:`,W)}}return Q}var WN5=5242880,KN5;var hE8=L(()=>{H8();UG();yX();I7();KN5=new Set(["check_suite","issue_comment"])});import{DBOS as sq1,SchedulerMode as NN5}from"@dbos-inc/dbos-sdk";async function DN5(){try{return await LN5()}catch($){return console.warn(`[sandbox-credential-push] push failed: ${$ instanceof Error?$.message:String($)}`),null}}async function LN5(){if(!r60())return null;let[{RemoteSandboxProvider:$},{SandboxProviderRouter:Z}]=await Promise.all([Promise.resolve().then(() => (rK1(),aK1)),Promise.resolve().then(() => (sK1(),oK1))]),Q=await e60(),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=im$({sandboxes:J,pools:G,records:await pm$(X,J,G),legacyPools:vC0(process.env.STUDIO_SANDBOX_TENANT_POOLS),now:W}),{batches:H,failed:F}=await nm$(K,$j0(X,new BJ(B0().encryptionKey)),{now:W,orgFsLifetimeMs:fC0}),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 ON5($,Z){let Q=await sq1.runStep(DN5,{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 uE8(){if(oq1)return;if(!B0().agentSandboxEnabled||!r60())return;oq1=sq1.registerWorkflow(ON5,{name:"sandboxCredentialPushWorkflow"}),sq1.registerScheduled(oq1,{name:"sandboxCredentialPushWorkflow",crontab:BN5,mode:NN5.ExactlyOncePerIntervalWhenActive})}var BN5="1,11,21,31,41,51 * * * *",oq1=null;var lE8=L(()=>{xG();vw();y31();yC0();bC0();yX();u1()});function mE8($){let Z=new Ej($.db,new BJ($.encryptionKey)),Q=new $1;return Q.get("/attachments/:token",async(Y)=>{let X=vr$(Y.req.param("token"));if(!X)return Y.json({error:"Invalid or expired link"},404);let J=await Z.getByOrg(X.organizationId);if(!J)return Y.json({error:"Jira is not connected"},404);let W=await new XQ(J.siteUrl,J.email,J.apiToken).downloadAttachment(X.attachmentId);if(!W.ok||!W.body)return Y.json({error:"Jira refused the download"},502);let K=new Headers;for(let H of["content-type","content-length","content-disposition"]){let F=W.headers.get(H);if(F)K.set(H,F)}return K.set("cache-control","no-store"),new Response(W.body,{status:200,headers:K})}),Q}var cE8=L(()=>{H8();vw();IU1();lO()});function Ih0(){try{return B0().jiraSettleSeconds*1000}catch{return dz}}function dE8($,Z){let Q=Z.windowMs??dz,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=jN5($,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 jN5($,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 aq1=L(()=>{rO();u1()});function iE8($){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 rq1($,Z,Q){if(!Z.enabled)return"disabled";let Y=Z.organizationId,X=new XQ(Z.siteUrl,Z.email,Z.apiToken),J=dE8(await X.listStatusChanges(Q.issueId),{changeId:Q.changelogId,now:Q.now,windowMs:Ih0()});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:cz(N)})),H=q48(K)&&Z.boardId?T48(await X.getBoardColumnStatusIds(Z.boardId),W.id,G.toId):null,F=A48(K,W.name,H);if(!F)return"no_rule";if(!await $.storage.jiraIntegrations.claimTrigger(Y,Q.issueId,G.id))return"duplicate";return await OH({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 eq1=L(()=>{OU();lO();Pt();aq1()});import{DBOS as i2,SchedulerMode as wN5}from"@dbos-inc/dbos-sdk";function pE8($){ZR1=$}function YR1(){if(!ZR1)throw Error("[jira-trigger] runtime not initialized \u2014 setJiraTriggerSweepRuntime() must run before the workflow fires");return ZR1}function XR1(){let $=YR1();return new Ej($.db,new BJ($.encryptionKey))}async function TN5($){try{let Z=await XR1().getById($);if(!Z?.enabled||!Z.boardId)return{integrationId:$,fired:0};let Q=await uY(YR1().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 XQ(Z.siteUrl,Z.email,Z.apiToken),G=`(${await X.getBoardScopeJql(Z.boardId)}) AND status CHANGED AFTER "-${EN5}m"`,W=0,K;for(let H=0;H<zN5;H++){let F=await X.searchIssues({jql:G,nextPageToken:K});for(let U of F.issues)if(await rq1(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 qN5($,Z){let Q=await i2.runStep(()=>XR1().listEnabledIds(),{name:"loadJiraIntegrations"});if(Q.length===0)return;let Y=await Promise.all(Q.map((X)=>i2.runStep(()=>TN5(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 RN5($,Z){try{let Q=await XR1().getById($);if(!Q?.enabled)return"disabled";let Y=await uY(YR1().db,Q.organizationId);if(!Y)return"disabled";let X=await rq1(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 MN5($,Z){await i2.sleep(Ih0()+AN5),await i2.runStep(()=>RN5($,Z),{name:"settleJiraMove"})}async function nE8($,Z){if(!QR1)throw Error("[jira-trigger] settle workflow is not registered");await i2.startWorkflow(QR1,{workflowID:`jira-settle:${$}:${Z.changelogId}`})($,Z)}function tE8(){if($R1)return;QR1=i2.registerWorkflow(MN5,{name:"jiraSettleWorkflow"}),$R1=i2.registerWorkflow(qN5,{name:"jiraTriggerSweepWorkflow"}),i2.registerScheduled($R1,{name:"jiraTriggerSweepWorkflow",crontab:PN5,mode:wN5.ExactlyOncePerIntervalWhenActive})}var PN5="*/5 * * * *",EN5=20,zN5=5,AN5=5000,ZR1=null,QR1=null,$R1=null;var JR1=L(()=>{vw();pO();lO();aq1();eq1()});function oE8($){let Z=new Ej($.db,new BJ($.encryptionKey)),Q=vz($.db);async function Y(J,G){let W=iE8(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 nE8(K.id,W)}let X=new $1;return X.post("/webhook/:secret",b6({maxSize:VN5}),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 VN5=1048576;var sE8=L(()=>{H8();UG();vw();JR1();eq1();e50()});function aE8($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var rE8,IN5,kN5,eE8;var $z8=L(()=>{H8();U3();Gt();Ci();rE8=new $1,IN5=["range","if-none-match","if-modified-since"],kN5=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];rE8.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),Q=Z.organization?.id;if(!Z.auth?.user?.id){if(Hs($))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 y90(Y,Z);if(!X)throw new R1(503,{message:"Object storage not configured"});if(X.startsWith("data:")&&nK()){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 aE8(N,H),new Response(U,{status:200,headers:N})}let J=new Headers;for(let K of IN5){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 kN5){let H=G.headers.get(K);if(H)W.set(K,H)}return W.set("Cache-Control","private, max-age=86400"),aE8(W,W.get("content-type")??""),new Response(G.body,{status:G.status,headers:W})});eE8=rE8});var OY0=y((zl)=>{var CN5=zl&&zl.__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]}),SN5=zl&&zl.__exportStar||function($,Z){for(var Q in $)if(Q!=="default"&&!Object.prototype.hasOwnProperty.call(Z,Q))CN5(Z,$,Q)};Object.defineProperty(zl,"__esModule",{value:!0});SN5(TG(),zl)});var Yz8=y((Zz8)=>{Object.defineProperty(Zz8,"__esModule",{value:!0});Zz8.version=void 0;Zz8.version="3.4.0"});var Gz8=y((zD)=>{var _N5=zD&&zD.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(zD,"__esModule",{value:!0});zD.NodeTransport=zD.VERSION=void 0;zD.nodeResolveHost=gN5;var H9=OY0(),vN5=V0("net"),GR1=V0("tls"),bN5=V0("path"),Xz8=V0("fs"),xN5=_N5(V0("dns")),fN5=Yz8();zD.VERSION=fN5.version;var yN5="nats.js";class Jz8{socket;version;lang;yields=[];signal=(0,H9.deferred)();closedNotification=(0,H9.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=yN5,this.version=zD.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,vN5.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,bN5.resolve)($),!(0,Xz8.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,Xz8.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,GR1.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,GR1.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 GR1.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}}zD.NodeTransport=Jz8;function gN5($){let Z=(0,H9.deferred)();return xN5.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 Uz8=y((Fz8)=>{Object.defineProperty(Fz8,"__esModule",{value:!0});Fz8.connect=hN5;var Wz8=Gz8(),Kz8=OY0(),Hz8=OY0();function hN5($={}){if((0,Hz8.hasWsProtocol)($))return Promise.reject(Hz8.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,Kz8.setTransportFactory)({factory:()=>{return new Wz8.NodeTransport},dnsResolveFn:Wz8.nodeResolveHost}),Kz8.NatsConnectionImpl.connect($)}});var Nz8=y((yj)=>{var lN5=yj&&yj.__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]}),mN5=yj&&yj.__exportStar||function($,Z){for(var Q in $)if(Q!=="default"&&!Object.prototype.hasOwnProperty.call(Z,Q))lN5(Z,$,Q)};Object.defineProperty(yj,"__esModule",{value:!0});yj.connect=void 0;var cN5=Uz8();Object.defineProperty(yj,"connect",{enumerable:!0,get:function(){return cN5.connect}});mN5(OY0(),yj)});function Lz8($){let Z=$?.connectFn??nN5,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:pN5,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(iN5,dN5,D-1,2,0.5);await G$(O)}}return{init(N,B){if(X)return;X=!0,J=!1;let D=B?.creds?kh0.credsAuthenticator(new TextEncoder().encode(B.creds)):B?.user?kh0.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=Dz8.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 nN5($){return Bz8.connect($)}var kh0,Bz8,Dz8,dN5=100,iN5=3000,pN5=3000;var Oz8=L(()=>{g$();kh0=_(NA(),1),Bz8=_(Nz8(),1),Dz8=_(sH(),1)});function Ch0($,Z){return`${$}.${Z}`}class WR1{cache;constructor($){this.cache=KB({ttlMs:$?.ttlMs??tN5,maxSize:$?.maxSize??oN5})}async get($,Z){return this.cache.get(Ch0($,Z))??null}async set($,Z,Q){this.cache.set(Ch0($,Z),Q)}async invalidate($,Z){this.cache.delete(Ch0($,Z)),this.cache.delete(Ch0($,`${Z}:decisions`))}teardown(){this.cache.clear()}}var tN5=600000,oN5=5000;var jz8=()=>{};function Sh0($,Z){return`${$}:${Z}`}function KR1($){let Z=KB({ttlMs:$?.ttlMs??sN5,maxSize:$?.maxSize??aN5}),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(wz8,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(Sh0(K,H))},set(K,H,F){Z.set(Sh0(K,H),F)},invalidate(K,H){Z.delete(Sh0(K,H)),W(K,H)},start(){if(G)return;let K=Q?.();if(!K)return;G=K.subscribe(wz8),(async()=>{for await(let H of G)try{let F=JSON.parse(J.decode(H.data));if(F.originId===Y)continue;Z.delete(Sh0(F.organizationId,F.keyId))}catch{}})().catch(console.error)},teardown(){G?.unsubscribe(),G=null,Z.clear()}}}var wz8="studio.ai-provider-keys.invalidate",sN5=30000,aN5=5000;var Pz8=()=>{};class HR1{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 Ez8=($)=>{let Z;return()=>Z??=$()},FR1,UR1;var zz8=L(()=>{g6();FR1=Ez8(()=>W$.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),UR1=Ez8(()=>W$.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function XB5($=qz8){return{name:oB,subjects:[`${zD1}.>`],storage:bU.StorageType.File,max_age:$B5,max_bytes:QB5,max_msgs_per_subject:YB5,discard:bU.DiscardPolicy.Old,retention:bU.RetentionPolicy.Limits,duplicate_window:ZB5,num_replicas:$}}class Rz8{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 Az8($){let Z=Tz8.headers();for(let[Q,Y]of Object.entries($))Z.set(Q,Y);return Z}function KB5($,Z){let Q=0;return{publish(Y,X,J,G){Y.publish(X,J,G?{headers:G}:void 0).catch((W)=>{if(Q++,eN5().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 HB5($,Z){return $.info?.cluster?Z:1}function FB5($){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 NR1{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=XB5(X);try{await Y.streams.info(oB),await Y.streams.update(oB,J)}catch(G){if(G instanceof Error&&G.message.includes("stream not found"))await Y.streams.add(J),await Y.streams.update(oB,J);else if(G instanceof Error&&/can ?not change.*storage|storage type/i.test(G.message))await Y.streams.delete(oB),await Y.streams.add(J);else throw G}},Q=await Z8(async()=>{let Y=this.options.getJetStreamManager?await this.options.getJetStreamManager():await bU.jetstreamManager($),X=HB5($,qz8);try{await Z(Y,X)}catch(J){if(X<=1||!FB5(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:wt});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=KB5(Z,Y),G=!1,W=()=>{if(G)return;G=!0;let H=a88(Z);X.publish(H.subject,H.data).catch(()=>{})};Q.addEventListener("abort",W,{once:!0});let K=(H)=>{let F=performance.now(),U=TD1(H,{runId:Z}),N=performance.now()-F;FR1().record(N),UR1().add(1,{"org.id":Y??"unknown"}),WB5?.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?Az8(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(),GB5)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 Z8(()=>$.publish(Z.subject,Z.data,{...Z.headers?{headers:Az8(Z.headers)}:{},...Z.msgId?{msgID:Z.msgId}:{}}),{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:wt}),!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=TD1(Z,{runId:$,dedup:Q});FR1().record(performance.now()-X),UR1().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=s88({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"?bU.DeliverPolicy.New:bU.DeliverPolicy.All,J=Q?.closeOnDone??!1,G=mz($),W;try{W=await Z8(async()=>{return(await Y.consumers.get(oB,{filter_subjects:G,deliver_policy:X})).consume()},{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:wt})}catch(O){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",O?.message??O),null}let F=Kb0({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(Xb0()).pipeThrough(Jb0()).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 P=w;if(P.kind==="done"){if(J){D(),O.close();return}continue}O.enqueue(P.chunk);return}},cancel(){D()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge(oB,{filter:mz($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var bU,Tz8,rN5=($)=>{let Z;return()=>Z??=$()},eN5,$B5=86400000000000,ZB5=120000000000,QB5=4294967296,qz8,YB5=500000,JB5,GB5,WB5;var Mz8=L(()=>{g$();qD1();Hb0();Gb0();g6();zz8();bU=_(sH(),1),Tz8=_(NA(),1),eN5=rN5(()=>W$.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"})),qz8=Math.max(1,Number(process.env.DECOPILOT_STREAM_REPLICAS??3)||3);JB5=process.env.STREAM_ENCODE_TRACE==="1",GB5=process.env.DECOPILOT_STREAM_TRACE==="1";WB5=JB5?new Rz8:null});function _h0($,Z,Q,Y){if(!Y)return!1;return $.emit(Z,XN(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 Vz8=L(()=>{R8()});class BR1{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 UB5($,Z,Q={}){let Y=$.startsWith("thread:")?KU($,Q):$;return[...new Set([Z,Y].filter((X)=>!!X))]}async function DR1($,Z){let Q=Z.organizationId;try{let Y=await $.storage.taskBoard.linkedThreadIds(Z.id,Q);for(let X of Y){let J=await bB($,X);if(!J?.owner||!J?.name)continue;let G=await $.storage.threads.get(X),W=await xB($,{threadId:X,runBranch:G?.branch}),K=await q80($,Q,JB0(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=UB5(W,await GS0($,X),{flat:jh(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 nJ(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 Iz8=L(()=>{W5();uQ();I7()});async function kz8($,Z,Q){let Y=Z.organizationId;if(!pJ(Z))return!1;if(!nh(Q))return!1;if(!await Ic($,Y,X00))return!1;if(await $.storage.taskBoard.hasHumanRejectedDone(Z.id,Y))return!1;let X=Z1.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"}}),t$(Y,J),console.log(`[task-board-review-sweeper] ${Z.id}: linked PR already merged \u2014 moved to ${X}`),!0}var Cz8=L(()=>{L3();M8();lX();rn();DU();F5()});function wB5($){return $ instanceof _X}function Sz8($,Z){return Z-$>=OB5}class LR1{taskBoard;contextFactory;billing;options;timer=null;running=!1;cursor=null;constructor($,Z,Q,Y={}){this.taskBoard=$;this.contextFactory=Z;this.billing=Q;this.options=Y}start(){if(this.timer)return;let $=this.options.intervalMs??NB5;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??DB5,Q=this.options.itemIntervalMs??BB5,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()-zU1),{neverStarted:aN1,stalled:lB1});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()-jB5));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 oN1(this.taskBoard,X,Y),await sN1(this.taskBoard,this.billing,X,Y)}catch(J){console.error(`[task-board-review-sweeper] unhandled-failure reaction for ${Q} failed`,J)}}async settleFinishedRunsWithoutPr($,Z){let Q=0,Y=await this.taskBoard.listItemsFinishedWithoutPr($,Z);for(let{id:X,organizationId:J,finishedAt:G}of Y)try{if(!await this.taskBoard.claimSweep(X,J,Z))continue;let W=await this.taskBoard.getById(X,J);if(!W||W.status!==Z1.progress||pJ(W)||W.assigneeId!==u$)continue;let K=await this.contextFactory(J,W.assignedBy??W.createdBy);if(!K)continue;if(await DR1(K,W)){if(await this.taskBoard.clearSweepBudget(X,J),await this.reconcileItem(X,J,Z))Q++;continue}if(!Sz8(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,Z1.review,W.updatedBy);if(!F)continue;await this.taskBoard.recordActivity({taskBoardItemId:X,action:"status_changed",actorId:null,data:{from:Z1.progress,to:Z1.review,reason:H}}).catch(()=>{}),t$(J,F),await LU(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!==Z1.progress||G.assigneeId!==u$)continue;let W=await this.contextFactory(X,G.assignedBy??G.createdBy);if(!W)continue;await nO(W,G,{runClass:"retry"}),Z++,console.warn(`[task-board-review-sweeper] re-dispatched ${Y} after a failure (attempt ${J})`)}catch(G){if(console.error(`[task-board-review-sweeper] retry dispatch for ${Y} failed`,G),wB5(G)){await this.returnToBacklog(Y,X,G instanceof Error?G.message:String(G));continue}await this.taskBoard.scheduleRunRetry(Y,X,J,new Date(Date.now()+LB5)).catch((W)=>console.error(`[task-board-review-sweeper] re-arming ${Y} failed`,W))}return Z}async returnToBacklog($,Z,Q){try{let Y=await this.taskBoard.getById($,Z);if(!Y||Y.status!==Z1.progress)return;let X=await this.taskBoard.returnToBacklogAfterFailure($,Z,Y.updatedBy);if(!X)return;await this.taskBoard.recordActivity({taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:Z1.progress,to:Z1.intake,reason:Q,retriesSpent:Y.retryAttempts}}).catch(()=>{}),t$(Z,X)}catch(Y){console.error(`[task-board-review-sweeper] returning ${$} to backlog failed`,Y)}}async handOffReviewWithoutPr($,Z){let Q=await this.taskBoard.listActivity(Z.id,Z.organizationId);if(!Sz8(DL(Q,Z.reviewCycleStartedAt),Date.now()))return;await LU($,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(!pJ(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 DR1(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 Zt(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 kz8(G,Y,W))return!0;if(!X)return!1;if(await s08(G,Y))return!0;if(!iN1(W))return!1;return await $t(G,Y,{previewMatchesHead:pN1(W)}),!0}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}var NB5=60000,BB5=300000,DB5=50,LB5=60000,OB5=900000,jB5=120000;var _z8=L(()=>{M8();Yv0();Iz8();pB();Jt();DU();Cz8();F5();LW();rN1();mB1();I7();K90()});async function vz8($,Z,Q=dz){return await xz8($,Z,Q,{})}async function bz8($,Z,Q,Y=dz){return await xz8($,Q,Y,{activityId:Z})}async function xz8($,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-PB5),settledBefore:new Date(Z-Q),limit:EB5,...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 zB5($.taskBoard,K,Q);for(let U of H){if(!M48(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 zB5($,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?V48(X,Q):Z.from}var PB5=1800000,EB5=200;var fz8=L(()=>{rO()});import{DBOS as p2,DBOSClient as AB5,SchedulerMode as TB5}from"@dbos-inc/dbos-sdk";function yz8($){gj=$}async function MB5($){if(!gj)return 0;try{return await bz8(gj,$,Date.now(),gj.settleMs)}catch(Z){return console.error(`[automations] settling board move ${$} failed`,Z),0}}async function VB5(){if(!gj)return 0;try{return await vz8(gj,Date.now(),gj.settleMs)}catch($){return console.error("[automations] board transition sweep failed",$),0}}async function IB5($){await p2.sleep((gj?.settleMs??dz)+RB5),await p2.runStep(()=>MB5($),{name:"settleBoardMove"})}async function kB5($,Z){let Q=await p2.runStep(()=>VB5(),{name:"sweepBoardMoves"});if(Q>0)console.log(`[automations] board transition sweep fired ${Q} trigger(s) the settle wait missed`)}async function hz8($){let Z=gj;if(!Z||!jR1)return;if(!await Z.automations.hasActiveBoardColumnTrigger($.taskBoardItemId,$.to))return;let Q=`board-settle:${$.activityId}`;if(!p2.isWithinWorkflow()){await p2.startWorkflow(jR1,{workflowID:Q,queueName:e2})($.activityId);return}let Y=await AB5.create({systemDatabaseUrl:Z.systemDatabaseUrl,systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:1});try{await Y.enqueue({workflowName:gz8,queueName:e2,workflowID:Q},$.activityId)}finally{await Y.destroy()}}function uz8(){if(OR1)return;jR1=p2.registerWorkflow(IB5,{name:gz8}),OR1=p2.registerWorkflow(kB5,{name:"boardTransitionSweepWorkflow"}),p2.registerScheduled(OR1,{name:"boardTransitionSweepWorkflow",crontab:qB5,mode:TB5.ExactlyOncePerIntervalWhenActive})}var qB5="*/5 * * * *",RB5=2000,gj=null,gz8="boardTransitionSettleWorkflow",jR1=null,OR1=null;var lz8=L(()=>{rO();fz8()});import{readdir as CB5,rm as vh0}from"fs/promises";import{join as bh0}from"path";async function xh0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-SB5),Z.setUTCHours(0,0,0,0);let Q=0;try{let Y=await Al($);for(let X of Y)if(/^\d{4}$/.test(X))Q+=await mz8($,X,Z);else if(!X.startsWith(".")){let J=bh0($,X),G=await Al(J);for(let K of G){if(!/^\d{4}$/.test(K))continue;Q+=await mz8(J,K,Z)}if((await Al(J)).length===0)await vh0(J,{recursive:!0,force:!0})}}catch(Y){console.warn("monitoring retention cleanup failed:",Y)}return Q}async function mz8($,Z,Q){let Y=0,X=bh0($,Z),J=await Al(X);for(let W of J){if(!/^\d{2}$/.test(W))continue;let K=bh0(X,W),H=await Al(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=bh0(K,U);await vh0(B,{recursive:!0,force:!0}),Y++}}if((await Al(K)).length===0)await vh0(K,{recursive:!0,force:!0})}if((await Al(X)).length===0)await vh0(X,{recursive:!0,force:!0});return Y}async function Al($){try{return(await CB5($)).filter((Q)=>!Q.startsWith("."))}catch{return[]}}var SB5=30;var wR1=()=>{};import{DBOS as PR1,SchedulerMode as _B5}from"@dbos-inc/dbos-sdk";async function bB5(){let $=[mH(),Sl(),kD()],Z=0;for(let Q of $)try{Z+=await xh0(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 xB5($,Z){await PR1.runStep(()=>bB5(),{name:"monitoringRetention"})}function dz8(){if(cz8)return;cz8=!0;let $=PR1.registerWorkflow(xB5,{name:"monitoringRetentionWorkflow"});PR1.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:vB5,mode:_B5.ExactlyOncePerIntervalWhenActive})}var vB5="23 4 * * *",cz8=!1;var iz8=L(()=>{ZK();wR1()});function pz8($){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 lY.create();X.auth.user={id:Q,role:Y.role},X.organization={id:Y.orgId,slug:Y.orgSlug,name:Y.orgName};let J=await qE($.db,Z,Y.role);return X.boundAuth=ez1({auth:X.authInstance,headers:new Headers,role:Y.role,permissions:J,userId:Q}),X.access=new dT(Q,void 0,X.boundAuth,Y.role,"self"),hz(X,{id:Y.orgId,slug:Y.orgSlug}),X}}var nz8=L(()=>{EQ();lF()});function tz8(){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=jY0(N.params.name),D=N.params.arguments||{},O=Object.keys(D).map((w)=>jY0(w)),j=O.length>0?O.slice(0,3).join(",")+(O.length>3?"\u2026":""):"";J=`${P9.tool}${B}${P9.dim}(${j})${P9.reset}`}else if(N.method)J=`${P9.dim}${jY0(N.method)}${P9.reset}`}}catch{}}let W=jY0(X);if(X.startsWith("/mcp/conn_")){let F=X.split("/")[2]??"";W=`/mcp/${P9.mcp}${jY0(F.slice(0,12))}\u2026${P9.reset}`}else if(X==="/mcp")W=`${P9.mcp}/mcp${P9.reset}`;else if(X==="/mcp/registry")W=`${P9.mcp}/mcp/registry${P9.reset}`;let K=yB5(Y),H=G?"\u25C0":"\u2190";console.log(`${P9.dim}${H}${P9.reset} ${K}${Y}${P9.reset} ${W}${J?` ${J}`:""}`);try{await Z()}finally{let F=Date.now()-Q,U=$.res.status,N=fB5(U),B=F<1000?`${F}ms`:`${(F/1000).toFixed(1)}s`,D=G?"\u25B6":"\u2192";console.log(`${P9.dim}${D}${P9.reset} ${K}${Y}${P9.reset} ${W}${J?` ${J}`:""} ${N}${U}${P9.reset} ${P9.duration}${B}${P9.reset}`)}}}var P9,fB5=($)=>{if($>=500)return P9.serverError;if($>=400)return P9.clientError;if($>=300)return P9.redirect;return P9.ok},yB5=($)=>{return P9[$]||P9.reset},jY0=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var oz8=L(()=>{P9={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 ez8}from"crypto";import{mkdir as gB5,readdir as hB5,rm as sz8,stat as $28}from"fs/promises";import{join as zR1,relative as uB5}from"path";import{z as G8}from"zod";function Q28($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return zR1(lB5,Z)}function Y28($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function ER1($,Z){let Q=Q28($),Y=Y28(Z);return zR1(Q,Y)}function mB5($,Z,Q,Y){let X=B0().encryptionKey||"dev-secret",J=`${$}:${Z}:${Q}:${Y}`;return ez8("sha256",X).update(J).digest("hex")}function rz8($,Z,Q,Y,X){let J=Math.floor(Date.now()/1000)+Y,G=mB5(Z,Q,J,X),W=new URL(`/api/dev-assets/${Z}/${Y28(Q)}`,$);return W.searchParams.set("expires",J.toString()),W.searchParams.set("signature",G),W.searchParams.set("method",X),W.toString()}function X28($,Z,Q){let Y=`${$}:${Z.getTime()}:${Q}`;return`"${ez8("md5","etag").update(Y).digest("hex")}"`}async function J28($,Z,Q,Y,X){try{let J=await hB5($,{withFileTypes:!0});for(let G of J){let W=zR1($,G.name),H=uB5(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 J28(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 $28(W);X.objects.push({key:H,size:F.size,lastModified:F.mtime.toISOString(),etag:X28(W,F.mtime,F.size)})}catch{}}}}catch{}}function G28($,Z){let Y=$0($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:G8.object({prefix:G8.string().optional(),maxKeys:G8.number().optional().default(1000),continuationToken:G8.string().optional(),delimiter:G8.string().optional()}),outputSchema:G8.object({objects:G8.array(G8.object({key:G8.string(),size:G8.number(),lastModified:G8.string(),etag:G8.string()})),nextContinuationToken:G8.string().optional(),isTruncated:G8.boolean(),commonPrefixes:G8.array(G8.string()).optional()}),handler:async(X)=>{let J=X,G=J.prefix||"",W=J.maxKeys??1000,K=J.delimiter,H=J.continuationToken,F=Q28(Y);await gB5(F,{recursive:!0});let U={objects:[],commonPrefixes:new Set};await J28(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:G8.object({key:G8.string()}),outputSchema:G8.object({contentType:G8.string().optional(),contentLength:G8.number(),lastModified:G8.string(),etag:G8.string(),metadata:G8.record(G8.string(),G8.string()).optional()}),handler:async(X)=>{let J=X,G=ER1(Y,J.key),W=await $28(G);return{contentType:BA1(J.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:X28(G,W.mtime,W.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:G8.object({key:G8.string(),expiresIn:G8.number().optional()}),outputSchema:G8.object({url:G8.string(),expiresIn:G8.number()}),handler:async(X)=>{let J=X,G=Wj(J.expiresIn,az8);return{url:rz8(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:G8.object({key:G8.string(),expiresIn:G8.number().optional(),contentType:G8.string().optional()}),outputSchema:G8.object({url:G8.string(),expiresIn:G8.number()}),handler:async(X)=>{let J=X,G=Wj(J.expiresIn,az8);return{url:rz8(Z,Y,J.key,G,"PUT"),expiresIn:G}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:G8.object({key:G8.string()}),outputSchema:G8.object({success:G8.boolean(),key:G8.string()}),handler:async(X)=>{let J=X,G=ER1(Y,J.key);try{return await sz8(G),{success:!0,key:J.key}}catch{return{success:!1,key:J.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:G8.object({keys:G8.array(G8.string()).max(1000)}),outputSchema:G8.object({deleted:G8.array(G8.string()),errors:G8.array(G8.object({key:G8.string(),message:G8.string()}))}),handler:async(X)=>{let J=X,G=[],W=[];return await Promise.all(J.keys.map(async(K)=>{let H=ER1(Y,K);try{await sz8(H),G.push(K)}catch(F){W.push({key:K,message:F instanceof Error?F.message:"Unknown error"})}})),{deleted:G,errors:W}}}]}async function AR1($,Z,Q){let Y=G28(Z,Q),X=new BP({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:G8.object({}).shape,K=G.outputSchema&&"shape"in G.outputSchema?G.outputSchema.shape:G8.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 vW({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await X.connect(J),MH(X,J,$,"mcp:dev-assets")}async function W28($,Z,Q,Y){let J=G28(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 lB5="./data/assets",az8=3600,Z28,K28;var H28=L(()=>{u1();yt();H8();uH0();ft();AJ();Kj();Fg0();Z28=new $1;Z28.all("/",async($)=>{let Z=$.get("studioContext"),Q=new URL($.req.url),Y=`${Q.protocol}//${Q.host}`;return AR1($.req.raw,Z,Y)});K28=Z28});var F28={};E6(F28,{mountDevRoutes:()=>cB5});function cB5($,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 AR1(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 W28(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",K28);let Q=new $1;Q.use("*",CU({mountPath:"/api/dev-assets"})),Q.route("/",Hg0({orgFromPath:!1})),$.route("/api/dev-assets",Q)}var U28=L(()=>{H8();JA1();Fg0();H28()});var z28={};E6(z28,{watchHandler:()=>E28,resolveVoiceSigningSecret:()=>j28,resolveCorsOrigin:()=>w28,isSsoExemptPath:()=>O28,isAllowedOAuthRedirectUri:()=>P28,createApp:()=>$D5});import{readFileSync as dB5}from"fs";import{randomBytes as iB5}from"crypto";import{PrometheusSerializer as pB5}from"@opentelemetry/exporter-prometheus";import{DBOS as AD}from"@dbos-inc/dbos-sdk";import{oAuthDiscoveryMetadata as oB5,oAuthProtectedResourceMetadata as sB5}from"better-auth/plugins";async function nB5($){let Z=$.connect(),Q;try{Q=await Promise.race([Z,B28(N28)])}catch{return Z.then((Y)=>Y.release(!0)).catch(()=>{}),!1}try{return await Promise.race([Q.query("SELECT 1"),B28(N28)]),Q.release(),!0}catch{return Q.release(!0),!1}}function B28($){return new Promise((Z,Q)=>setTimeout(()=>Q(Error("pg health-check timeout")),$))}function O28($){return $.startsWith("/api/org-sso/")||/^\/api\/[^/]+\/sso\//.test($)||$.startsWith("/api/auth/")||$.startsWith("/api/tools/management")||$.startsWith("/oauth-proxy/")||/^\/api\/[^/]+\/oauth-proxy\//.test($)||$.startsWith(`${iy0}/`)||$.startsWith(`${hy0}/`)}function j28($){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)"),iB5(32).toString("base64")}function w28($,{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 P28($,Z){return $.origin===new URL(Z).origin||$.hostname==="localhost"}async function $D5($={}){let Z=$.database??E8(),Q=!1;_6.stop().catch((F0)=>{console.error("[SSEHub] Error stopping previous broadcast (HMR cleanup):",F0)});let Y,X,J,G,W=new WR1,K,H,F,U=null;if($.disableNats)K=KR1(),Y={get:async()=>null,set:async()=>{},invalidate:async()=>{},teardown:()=>{}},X=null,J=null,G=new DZ0,H={start:async()=>{},broadcast:()=>{},stop:async()=>{}},F={init:async()=>{},pump:(F0)=>{return(async()=>{let G0=F0.getReader();try{while(!0){let{done:E0}=await G0.read();if(E0)break}}catch{}finally{G0.releaseLock()}})()},publishRawChunk:async()=>!1,publishDone:async()=>!1,createTailStream:async()=>null,purge:()=>{},teardown:()=>{}};else{U=Lz8();let F0=B0().natsCredsPath,G0;if(F0)try{G0=dB5(F0,"utf8")}catch(B8){console.error(`[app] failed to read NATS_CREDS at ${F0}; connecting anonymously`,B8)}U.init(B0().natsUrls,{creds:G0,user:B0().natsUser,password:B0().natsPassword});let E0=R91()?new U91({getJetStream:()=>U.getJetStream(),selfListVersion:Rh0.version}):null;E0?.init().catch(()=>{}),Y=E0;let z0=new MZ1({getJetStream:()=>U.getJetStream()});z0.init().catch(()=>{}),X=z0;let j1=new th(hN1,{getJetStream:()=>U.getJetStream()}),b$=new th(H90,{getJetStream:()=>U.getJetStream()});j1.init().catch(()=>{}),b$.init().catch(()=>{}),J={reads:j1,cards:b$};let e$=new tO1({getJetStream:()=>U.getJetStream()});e$.init().catch(()=>{}),G=e$,K=KR1({getConnection:()=>U.getConnection()}),H=new HR1({getConnection:()=>U.getConnection()}),F=new NR1({getConnection:()=>U.getConnection(),getJetStream:()=>U.getJetStream()}),MU8(U),U.onReady(()=>{E0?.init().catch((B8)=>{console.error("[McpListCache] Deferred init failed:",B8)}),z0.init().catch((B8)=>{console.error("[SkillCatalogCache] Deferred init failed:",B8)}),j1.init().catch((B8)=>{console.error("[PrReadCache] Deferred init failed:",B8)}),b$.init().catch((B8)=>{console.error("[PrCardCache] Deferred init failed:",B8)}),e$.init().catch((B8)=>{console.error("[ConnectionCircuitStore] Deferred init failed:",B8)}),K.start(),rj$(()=>U.getConnection()),F.init().catch((B8)=>{console.warn("[Decopilot] StreamBuffer init failed (late-join disabled):",B8)})})}if(n2)await n2();N91(Y),IZ1(X),W71(()=>U?.getConnection()??null),uN1(J),oO1(G);let B={storage:new on(Z.db),sseHub:_6,onThreadFinished:async(F0,G0)=>Yt(new RW(Z.db),F0,G0,new pW(Z.db))},D=new iB1(B),O=new JQ0(Z.db),j=new BR1(O);j.start(),b48(H),H.start((F0)=>{tv0(F0),D.execute({type:"CANCEL",taskId:F0}).catch((G0)=>{console.error("[Decopilot] CancelBroadcast execute failed:",G0)})}).catch((F0)=>{console.error("[Decopilot] CancelBroadcast start failed:",F0)}),U?.onReady(()=>{H.start().catch((F0)=>{console.error("[CancelBroadcast] Deferred start failed:",F0)})});let w=()=>U?.getConnection()??null;e21(w),U?.onReady(()=>e21(w)),Cj1(w),U?.onReady(()=>Cj1(w)),F.init().catch((F0)=>{console.warn("[Decopilot] StreamBuffer init failed, attach/late-join disabled:",F0)}),n2=async()=>{await D.stopAll(),D.dispose(),j.dispose(),H.stop().catch(()=>{}),pN8(),F.teardown(),Y?.teardown(),X?.teardown(),J?.reads.teardown(),J?.cards.teardown(),W.teardown(),K.teardown(),ej$(),G.teardown(),N91(null),IZ1(null),W71(null),uN1(null),oO1(null)};let P=new $1;if(P.use("*",iO1({enabled:(F0)=>Ks(F0,"debug")==="1"})),P.use("*",Yu0),P.use("/*",zU8({origin:(F0,G0)=>w28(F0,{baseUrl:B0().baseUrl,requestOrigin:new URL(G0.req.url).origin}),credentials:!0,allowMethods:["GET","POST","PUT","DELETE","OPTIONS"],allowHeaders:["Content-Type","Authorization","mcp-protocol-version"],exposeHeaders:["WWW-Authenticate"]})),P.use("*",async(F0,G0)=>{if(await G0(),F0.req.path.includes("/files/"))return;if(F0.req.path.includes("/fs/")&&F0.req.path.endsWith("/read"))return;F0.header("X-Frame-Options","DENY"),F0.header("Content-Security-Policy","frame-ancestors 'none'")}),B0().nodeEnv==="development")P.use("*",tz8());P.use("*",async(F0,G0)=>{if(await G0(),Ba(F0.req.path))return;if(F0.res.status>=500){let z0=await F0.res.clone().text();console.error(`[5xx Response] ${F0.req.method} ${F0.req.path} - ${F0.res.status}:`,z0)}}),P.get(ZJ.HEALTH,(F0)=>{if(Q)return F0.json({status:"shutting_down"},503);return F0.json({status:"ok"})}),P.get(ZJ.HEALTH_LIVE,(F0)=>{return F0.json({status:"ok"})}),P.get(ZJ.HEALTH_READY,async(F0)=>{if(Q)return F0.json({status:"shutting_down"},503);let G0={};if(G0.postgres={status:await nB5(Z.pool)?"up":"down"},U)G0.nats=U.isConnected()?{status:"up"}:{status:"down"};else G0.nats={status:"down"};let E0=G0.postgres.status==="up",z0=E0?200:503;return F0.json({status:E0?"ready":"not_ready",services:G0},z0)}),P.get(ZJ.METRICS,async(F0)=>{try{let G0=await Wu0.collect(),E0=tB5.serialize(G0.resourceMetrics);return F0.text(E0,200,{"Content-Type":"text/plain; version=0.0.4; charset=utf-8"})}catch(G0){return console.error("Failed to collect metrics:",G0),F0.text("# Error collecting metrics",500)}});let E=1800000;P.get(`${ZJ.DBOS_QUEUE_DEPTH_PREFIX}:queueName`,async(F0)=>{let G0=F0.req.param("queueName");if(!aB5.has(G0))return F0.json({error:`Unknown queue: ${G0}`},404);let[E0,z0]=await Promise.all([AD.listQueuedWorkflows({queueName:G0,status:"ENQUEUED",loadInput:!1,loadOutput:!1}),AD.listQueuedWorkflows({queueName:G0,status:"PENDING",loadInput:!1,loadOutput:!1,dequeuedAfter:new Date(Date.now()-E).toISOString()})]);return F0.json({queue_length:E0.length,in_flight:z0.length})}),P.route("/api/config",RE8),P.route("/api/_reports",xE8),P.route("/api/_stripe",tq1),P.route("/api/_github",gE8({taskBoard:()=>l,contextFactory:()=>b})),P.route("/api/_git",As);let A={db:Z.db,encryptionKey:B0().encryptionKey};P.route("/api/_jira",oE8(A)),P.route("/api/_jira",mE8(A)),P.route("/report",_E8($.clientDir)),P.route("/api/auth/custom",pU8),P.all("/api/auth/admin/*",vN8),P.all("/api/auth/*",async(F0)=>{return await N4.handler(F0.req.raw)});let z=nG8();z.use("/.well-known/oauth-protected-resource/mcp/:connectionId",OQ0),z.use("/mcp/:connectionId/.well-known/oauth-protected-resource",OQ0),P.route("/",z),P.get("/.well-known/oauth-protected-resource/api/:org/mcp/:connectionId",iZ0),P.route("/",rG8()),P.use("/oauth-proxy/:connectionId/*",OQ0),P.all("/oauth-proxy/:connectionId/*",D28);let T=async(F0)=>{let E0=await rB5()(F0.req.raw),z0=await E0.json();return Response.json(z0,E0)};P.use("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",OQ0),P.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",T);let R=async(F0)=>{let E0=await eB5()(F0.req.raw),z0=await E0.json();return Response.json(z0,E0)};P.get("/.well-known/oauth-authorization-server/*/:gateway?/:connectionId?",R);let f=TU8({ttlMs:120000}),S=await _F8({db:Z.db,auth:N4,encryption:{key:B0().encryptionKey},observability:{tracer:pj,meter:W$},modelListCache:W,providerKeyCache:K,memberRoleCache:f});lY.set(S),z8$({db:Z.db,baseUrl:z5()}),vF8({db:Z.db}),yF8({db:Z.db}),lF8({db:Z.db}),eF8({db:Z.db}),WU8({db:Z.db}),pE8({db:Z.db,encryptionKey:B0().encryptionKey}),ge$({db:Z.db}),BU8({db:Z.db}),A08({db:Z.db});let V=vz(Z.db),v=new ZQ0(Z.db),b=pz8({db:Z.db});$L1({storage:V,studioContextFactory:b,orgContextFactory:(F0)=>uY(Z.db,F0),systemDatabaseUrl:he(B0().databaseUrl,B0().databasePgSsl)}),fD1({systemDatabaseUrl:he(B0().databaseUrl,B0().databasePgSsl),studioContextFactory:b,deps:{runRegistry:D,cancelBroadcast:H,streamBuffer:F,sseHub:_6}}),CD1({dispatchRunFn:c88,studioContextFactory:b,deps:{runRegistry:D,cancelBroadcast:H,streamBuffer:F,sseHub:_6}});let h=new on(Z.db),l=new RW(Z.db),d=new pW(Z.db),W0=new LR1(l,b,d);if(B0().taskBoardReviewSweeperEnabled){W0.start();let F0=n2;n2=async()=>{await F0?.(),W0.dispose()}}yz8({automations:V,taskBoard:l,fire:OH,systemDatabaseUrl:he(B0().databaseUrl,B0().databasePgSsl),settleMs:B0().boardTransitionSettleSeconds*1000}),ee$(hz8),F48({getJetStream:()=>U?.getJetStream()??null,getJetStreamManager:async()=>{let F0=U?.getConnection();return F0?await L28.jetstreamManager(F0):null},messageParts:h.messageParts(),resolveRun:async(F0)=>{let G0=await Z.db.selectFrom("threads").select(["organization_id","created_by","message_storage_version","status","run_fence_token","title"]).where("id","=",F0).executeTakeFirst();return G0?{orgId:G0.organization_id,createdBy:G0.created_by,version:G0.message_storage_version??1,status:G0.status,runFenceToken:G0.run_fence_token,title:G0.title??null}:null},completeRunIfNotCompleted:async(F0,G0)=>{let E0=await h.completeRunIfNotCompleted(F0,G0);if(_h0(_6,G0,F0,E0),E0)await Yt(l,F0,G0,d);return E0},markRunRequiresAction:async(F0,G0)=>{let E0=await h.requiresActionIfInProgress(F0,G0);return _h0(_6,G0,F0,E0),E0},markRunFailed:async(F0,G0,E0,z0)=>{let j1=await h.markRunFailed(F0,G0,E0,z0);if(_h0(_6,G0,F0,j1),j1)await Yt(l,F0,G0,d);return j1},clearSynthesizedError:async(F0,G0)=>{await h.messageParts().replaceMessageParts(F0,lz(F0,G0),[])},persistTitle:(F0,G0,E0)=>h.update(F0,G0,{title:E0}),onTitleUpdated:async({runId:F0,orgId:G0,title:E0})=>{let z0=await h.get(F0,G0).catch(()=>null);_6.emit(G0,XN(F0,z0?.status??"in_progress",{title:E0,virtualMcpId:z0?.virtual_mcp_id??void 0,createdBy:z0?.created_by,triggerId:z0?.trigger_id,branch:z0?.branch??null,harnessId:z0?.harness_id??void 0,createdAt:z0?.created_at,updatedAt:z0?.updated_at}))},bumpProgress:async({runId:F0,orgId:G0})=>{await h.bumpProgress(F0,G0)},recordCompleted:async({runId:F0,orgId:G0,distinctId:E0,usage:z0})=>{m1.capture({distinctId:E0,event:"chat_message_completed",groups:{organization:G0},properties:{organization_id:G0,thread_id:F0,transport:"projector",input_tokens:z0.inputTokens,output_tokens:z0.outputTokens,total_tokens:z0.totalTokens}})},recordFailed:async({runId:F0,orgId:G0,distinctId:E0,reason:z0,kind:j1})=>{m1.capture({distinctId:E0,event:"chat_message_failed",groups:{organization:G0},properties:{organization_id:G0,thread_id:F0,transport:"projector",error_category:j1,error_message:z0}})},purgeRun:async(F0)=>{F.purge(F0)}}),N88({studioContextFactory:b,systemDatabaseUrl:he(B0().databaseUrl,B0().databasePgSsl),streamBuffer:F}),dz8(),A8$(),xF8(),hF8(),cF8(),ZU8(),HU8(),tE8(),uz8(),ce$(),LU8(),T08(),uE8();let k0=async(F0,G0,E0)=>{let z0=await V.findById(F0,G0);if(!z0)throw Error("Automation not found");return JL1({automationId:z0.id,organizationId:z0.organization_id,triggerId:null})},X0=new Ls(V,({automation:F0,trigger:G0,contextMessages:E0,idempotencyKey:z0})=>OH({automationId:F0.id,organizationId:F0.organization_id,triggerId:G0.id,contextMessages:E0},{idempotencyKey:z0})),U0=[mH(),Sl(),kD()];for(let F0 of U0)xh0(F0).then(()=>{}).catch((G0)=>console.error("[monitoring] Retention cleanup failed:",G0));let o=()=>N4.api.deleteAllExpiredApiKeys().catch((F0)=>console.error("[auth] Expired API key cleanup failed:",F0));o(),setInterval(o,86400000).unref(),P.use("*",async(F0,G0)=>{if(Zu0(F0.req.path))return G0();let E0={measure:async(j1,b$)=>{RH(F0,j1);try{return await b$()}finally{bW(F0,j1)}}},z0=await lY.create(F0.req.raw,{timings:E0});z0.automationRunner=k0,F0.set("studioContext",z0);try{await G0()}finally{let j1=z0.pendingRevalidations;if(j1.length>0)Promise.race([Promise.allSettled(j1),G$(30000)]).catch((e$)=>console.error("[studio] revalidation cleanup error:",e$))}}),P.use("/api/:org/decopilot/*",Fs),P.use("/api/:org/v1/*",Fs),P.use("/api/:org/files/*",Fs),P.use("*",async(F0,G0)=>{if(O28(F0.req.path))return G0();let E0=F0.get("studioContext");if(!E0?.organization?.id||!E0?.auth?.user?.id)return G0();if(!(await E0.storage.orgSsoConfig.getByOrgId(E0.organization.id))?.enforced)return G0();if(!await E0.storage.orgSsoSessions.isValid(E0.auth.user.id,E0.organization.id))return F0.json({error:"SSO authentication required for this organization"},403);return G0()});let t=new $1;t.use("*",CU({mountPath:"/api/org-sso"})),t.route("/",ty0()),P.route("/api/org-sso",t),P.get("/api/tools/management",(F0)=>{return F0.json({tools:Re,grouped:WT()})}),P.use("/mcp/*",async(F0,G0)=>{RH(F0,"mcp");try{return await G0()}finally{bW(F0,"mcp")}});let a=async(F0,G0)=>{let E0=F0.var.studioContext;if(!E0.auth.user?.id&&!E0.auth.apiKey?.id){let z0=new URL(F0.req.url),j1=F0.req.header("x-forwarded-proto")?.split(",")[0]?.trim(),b$=j1?`${j1}://${z0.host}`:z0.origin;return F0.res=new Response(null,{status:401,headers:{"WWW-Authenticate":`Bearer realm="mcp",resource_metadata="${b$}${z0.pathname}/.well-known/oauth-protected-resource"`}})}return await G0()};if(P.use("/mcp/:connectionId?",a),P.use("/mcp/gateway/:virtualMcpId?",a),P.use("/mcp/virtual-mcp/:virtualMcpId?",a),P.use("/mcp/self",a),nK()){let{mountDevRoutes:F0}=(U28(),ch0(F28));F0(P,a)}let Z0=new $1;Z0.use("*",CU({mountPath:"/mcp"})),Z0.route("/",Nx0()),P.route("/mcp",Z0);let J0=new $1;J0.use("*",CU({mountPath:"/mcp/self"})),J0.route("/",lg0()),P.route("/mcp/self",J0);let h0=new $1;h0.use("*",CU({mountPath:"/mcp"})),h0.route("/",Lx0()),P.route("/mcp",h0),P.use("/api/:org/models/*",async(F0,G0)=>{RH(F0,"llm_models");try{return await G0()}finally{bW(F0,"llm_models")}});let S0=rN8({cancelBroadcast:H,streamBuffer:F,runRegistry:D});P.route("/api",S0),P.route("/api",eE8);let X1=new $1;X1.use("*",CU({mountPath:"/api"})),X1.route("/",ig0()),P.route("/api",X1),P.route("/api",EE8);let m0=new $1;m0.use("*",CU({mountPath:"/api"})),m0.route("/",pg0({tokenStorage:v,automationEventDispatcher:X0})),P.route("/api",m0);let j0=new QQ0(Z.db),P0=new $1;P0.use("*",CU({mountPath:"/api"})),P0.route("/",$g0()),P.route("/api",P0),P.route("/api/deco-sites",BB8());let n0=new $1;n0.use("*",CU({mountPath:"/api/deco-sites"})),n0.route("/",Qg0()),P.route("/api/deco-sites",n0),P.route(iy0,bN8()),P.route(Zj8,Xj8()),P.route("/api/_editor-resolve",AE8()),P.route(rU8,eU8()),P.route(hy0,DN8());let D1=B0(),Q1=D1.elevenlabsApiKey?new Ah0({apiKey:D1.elevenlabsApiKey,model:D1.elevenlabsVoiceModel,conversationModel:D1.elevenlabsConversationModel,voiceId:D1.elevenlabsVoiceId}):null,_0={openai:D1.openaiLiveApiKey?new uq1({apiKey:D1.openaiLiveApiKey,voice:D1.openaiLiveVoice}):null,elevenlabs:Q1?new hq1(Q1,()=>U?.getConnection()??null):null},d0=new iq1({adapter:Q1,conversationAdapters:_0,defaults:D1,secret:j28(D1),getConnection:()=>U?.getConnection()??null}),i0=tP8({voiceSessions:d0,kvStorage:j0,runRegistry:D,streamBuffer:F,sseHub:_6,cancelBroadcast:H,tokenStorage:v,automationEventDispatcher:X0,mountDevAssets:nK(),mcpAuth:a,oauthProxyHandler:D28,watchHandler:E28,betterAuthProtectedResourceHandler:T,getNatsConnection:()=>U?.getConnection()??null});return P.route("/api/:org",i0),P.notFound((F0)=>{return F0.json({error:"Not Found",path:F0.req.path},404)}),P.onError($B8),Object.assign(P,{markShuttingDown:()=>{Q=!0},shutdown:async()=>{if(console.log("[shutdown] Stopping workers..."),await Promise.allSettled([_6.stop(),n2?Promise.resolve(n2()).finally(()=>{n2=null}):Promise.resolve()]),U)await U.drain().catch((F0)=>console.error("[shutdown] NATS drain error:",F0));console.log("[shutdown] Flushing telemetry..."),await Z3().catch((F0)=>console.error("[shutdown] Telemetry flush error:",F0)),console.log("[shutdown] Closing database..."),await s5$(Z).catch((F0)=>console.error("[shutdown] Database close error:",F0)),console.log("[shutdown] Cleanup complete.")},initDbos:async()=>{await AD.registerQueue(PG,{partitionQueue:!0,concurrency:aD1,minPollingIntervalMs:rD1}),await AD.registerQueue(eW,{partitionQueue:!0,concurrency:bD1,priorityEnabled:!0}),await AD.registerQueue(VD,{workerConcurrency:B0().decopilotMaxConcurrentHostedRuns,priorityEnabled:!0}),await AD.registerQueue(ID,{workerConcurrency:B0().sandboxMaxConcurrentHostedRuns,priorityEnabled:!0}),await AD.registerQueue(ij,{partitionQueue:!0,concurrency:U88}),await AD.registerQueue(r2,z08),await AD.registerQueue(e2),await GA1(V),await Promise.allSettled(["automations-gate","automations-global","jira-push"].map((F0)=>AD.deleteQueue(F0))),await eD1(Z.pool),bK$().catch((F0)=>{console.error("[studio-pack-backfill] failed:",F0)}),Vc(Z.db).catch((F0)=>{console.error("[automations] built-in seed failed:",F0)}),T8$().catch((F0)=>{console.error("[org-fs] public-sets boot sync kick failed:",F0)})}})}var L28,N28=5000,n2=null,D28=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 lY.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 Do(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=XE1(await W.json());if(!K)K=H.origin;let N=await pZ0(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=aG8(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(!P28(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(jU8(G.connection_url))j.searchParams.set("auto_personal","true"),j.searchParams.set("force_new","true");return $.redirect(j.toString(),302)}let P={Accept:$.req.header("Accept")||"application/json"},E=$.req.header("Content-Type");if(E)P["Content-Type"]=E;let A=$.req.header("Authorization");if(A)P.Authorization=A;let z,T=null,R=null;if($.req.method!=="GET"&&$.req.method!=="HEAD")if(Y==="token"&&E?.includes("application/x-www-form-urlencoded")){if(A?.toLowerCase().startsWith("basic "))try{let d=atob(A.slice(6).trim()),W0=d.indexOf(":");if(W0!==-1){let k0=decodeURIComponent(d.slice(0,W0)),X0=decodeURIComponent(d.slice(W0+1));T=k0||null,R=X0||null}}catch{}let v=await $.req.formData();if(v.has("resource"))v.set("resource",U);let b=v.get("client_id"),h=v.get("client_secret");if(typeof b==="string"&&b)T=b;if(typeof h==="string"&&h)R=h;let l=new URLSearchParams;for(let[d,W0]of v.entries())l.append(d,W0.toString());z=l.toString()}else if(Y==="register"&&E?.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(),h={};try{h=b?JSON.parse(b):{}}catch{z=b}let l=typeof h==="object"&&h!==null&&!Array.isArray(h);if(z===void 0&&!l)z=b;if(z===void 0){let d=h,W0=d.metadata&&typeof d.metadata==="object"?d.metadata:{};d.metadata={...W0,organization_id:G.organization_id,...v?.slug?{organization_slug:v.slug}:{},...v?.name?{organization_name:v.name}:{}},z=JSON.stringify(d),P["Content-Type"]="application/json"}}else z=$.req.raw.body??void 0;let f=await fetch(j.toString(),{method:$.req.method,headers:P,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 h=typeof b.expires_in==="number"?new Date(Date.now()+b.expires_in*1000):null,l=null;try{l=await W2(G.connection_url)??D}catch{l=D}let d={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:h,clientId:T,clientSecret:R,tokenEndpoint:l};await new Y9(X.db,X.vault).upsert(d)}}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})},E28=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&&(!dB(Y)||!await iB(Z)))return $.json({error:"forbidden"},403);let W=G?l_0:Y;if(G)iO({action:"watch_all_orgs",actorUserId:Q,actorOrgId:Y,targetOrgId:"all"});let K=crypto.randomUUID();return vj($,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()})})})},tB5,aB5,rB5=()=>sB5(N4),eB5=()=>oB5(N4);var A28=L(()=>{g$();u1();q8$();fF8();uF8();dF8();QU8();FU8();AZ0();DN1();OU8();K90();B9();Ci();R8();H8();xy0();AU8();pO1();JH();lF();M21();xG();g6();e4();v21();$N8();LN8();u21();xN8();o21();YA1();XA1();iK();nZ0();JA1();ZB8();yy0();oP8();$E8();ZE8();JE8();LE8();HA1();Bx0();LZ0();zE8();Ox0();lT1();TE8();hT1();ME8();vE8();fE8();yE8();hE8();lE8();cE8();sE8();JR1();LA1();$z8();uT1();xT1();_Y0();Oz8();pq1();CJ();BB0();m80();mN1();t$0();s$0();aO1();jz8();Pz8();$A1();Mz8();gv0();Vz8();X90();XQ0();cB();F5();fz1();_z8();lz8();L3();pO();iz8();LF0();wR1();ZK();WA1();cO();ID1();LF0();d90();e50();zz1();nz8();yw();oz8();hs();M21();sn();Lt();ov0();L28=_(sH(),1);tB5=new pB5,aB5=new Set([PG,eW,VD,ID,ij,r2])});var M28={};E6(M28,{resolveClientDir:()=>WD5,resolveAssetPathWithTraversalCheck:()=>R28,isPathWithinDirectory:()=>q28,createAssetHandler:()=>KD5});import{resolve as wY0,dirname as ZD5,join as QD5,extname as YD5,basename as XD5,sep as T28}from"path";function JD5($,Z){if($===Z||XD5($)==="index.html")return{"Cache-Control":"no-cache"};if($.includes(`${T28}assets${T28}`))return{"Cache-Control":"public, max-age=31536000, immutable"};return{}}function q28($,Z){let Q=wY0(Z),Y=wY0($);return Y===Q||Y.startsWith(Q+"/")}function R28({requestPath:$,clientDir:Z}){let Q=$.startsWith("/")?$.slice(1):$,Y=wY0(Z,Q);if(!q28(Y,Z))return null;return Y}function WD5($,Z="../client"){let Q=new URL($),Y=ZD5(Q.pathname);return wY0(Y,Z)}function KD5($={}){let{env:Z="production",clientDir:Q=GD5,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=R28({requestPath:W,clientDir:Q});if(!K)return null;let H=QD5(K,"index.html"),F=wY0(Q,"index.html"),U=J.headers.get("accept"),B=U?.includes("text/html")||U?.includes("*/*")&&["",".html"].includes(YD5(K))?[H,F]:[];for(let D of[K,...B])try{let O=Bun.file(D);if(await O.exists())return new Response(O,{headers:JD5(D,F)})}catch{}if(W.includes("/assets/"))return new Response("Not Found",{status:404,headers:{"Cache-Control":"no-store"}});return null}}var GD5="./dist/client";var V28=()=>{};var I28={};E6(I28,{tryUpgradePreviewWs:()=>wD5,tryHandlePreviewHttp:()=>DD5,previewWebSocketHandler:()=>PD5,parsePreviewBaseDomain:()=>BD5,isPreviewWsData:()=>fh0,extractHandleFromHost:()=>TR1});function UD5($){if($.method!=="GET")return!1;return($.headers.get("accept")??"").includes("text/html")}function ND5(){return new Response(FD5,{status:503,headers:{"content-type":"text/html; charset=utf-8","cache-control":"no-store","retry-after":"1","access-control-allow-origin":"*"}})}function BD5($){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 TR1($,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 DD5($,Z){let Q=TR1($.headers.get("host"),Z.baseDomain);if(!Q)return null;let{handle:Y,slug:X}=c31(Q),J=await Z.getRunner();if(!J)return EY0(503,"preview proxy not configured");let G=await J.proxyPreviewRequest(Y,X?jD5($,X):$);if(G.headers.get(Qn)&&UD5($))return ND5();return G.headers.delete(Qn),G}function OD5($){return{protocols:$.upstreamProtocols,headers:{[m31]:$.appSlug}}}function jD5($,Z){let Q=new Headers($.headers);return Q.set(m31,Z),new Request($,{headers:Q})}function EY0($,Z){return new Response(JSON.stringify({error:Z}),{status:$,headers:{"content-type":"application/json","access-control-allow-origin":"*"}})}function fh0($){return typeof $==="object"&&$!==null&&$.kind==="preview"}async function wD5($,Z,Q){if(($.headers.get("upgrade")??"").toLowerCase()!=="websocket")return null;let Y=TR1($.headers.get("host"),Q.baseDomain);if(!Y)return null;let{handle:X,slug:J}=c31(Y),G=await Q.getRunner();if(!G)return EY0(503,"preview proxy not configured");let W=await G.resolvePreviewUpstreamUrl(X);if(!W)return EY0(404,"sandbox not found");let K=new URL($.url);if(K.pathname.startsWith("/_sandbox"))return EY0(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 EY0(426,"upgrade failed");return}function PY0($,Z,Q,Y){if(Z.closed)return;Z.closed=!0;try{$.close(Q,Y)}catch{}try{Z.upstream?.close()}catch{}}var HD5=256,FD5='<!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>',LD5,PD5;var k28=L(()=>{i60();LD5=WebSocket;PD5={open($){let Z=$.data;if(!fh0(Z))return;let Q;try{Q=Z.appSlug?new LD5(Z.upstreamUrl,OD5(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)}`),PY0($,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)=>{PY0($,Z,Y.code||1000,Y.reason||"")}),Q.addEventListener("error",()=>{PY0($,Z,1011,"upstream error")})},message($,Z){let Q=$.data;if(!fh0(Q))return;let Y=Q.upstream;if(Y&&Y.readyState===WebSocket.OPEN){Y.send(Z);return}if(Q.pending.length>=HD5){PY0($,Q,1011,"preview ws backlog overflow");return}Q.pending.push(Z)},close($){let Z=$.data;if(!fh0(Z))return;PY0($,Z,1000,"")}}});g$();var fR1="14";function yR1($){return{name:"decocms",systemDatabaseUrl:$.systemDatabaseUrl,systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:$.poolSize,runAdminServer:!1,executorID:$.executorID,applicationVersion:fR1,...$.listenQueues!==void 0?{listenQueues:$.listenQueues}:{}}}g$();import n28 from"pg";var gR1=8314027461559302n,t28=600000,o28=500;async function hR1($,Z){let{databaseUrl:Q,lockTimeoutMs:Y=t28}=$,X=$.log??((K)=>console.log(K)),J=new n28.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",[gR1.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$(o28)}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)",[gR1.toString()])}catch{}await J.end().catch(()=>{})}}u1();nh0();g6();function nA8(){let $=(process.env.BUN_OPTIONS??"").split(/\s+/).filter(Boolean);return[...process.argv.slice(1),...$]}function Fu0($,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 zM1(){let $=nA8();if($.includes("--cpu-prof")){console.log(JSON.stringify({msg:"cpu-profiling-active",dir:Fu0($,"--cpu-prof-dir")??process.cwd(),name:Fu0($,"--cpu-prof-name"),markdown:$.includes("--cpu-prof-md"),intervalUs:Number(Fu0($,"--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.'}))}Bu0();var xY0;function CM1(){if(process.env.HEAP_WATCH!=="1")return()=>{};let $=Number(process.env.HEAP_WATCH_INTERVAL_MS??60000),Z=async()=>{let Q=QA();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(()=>{}),xY0=setInterval(()=>void Z().catch(()=>{}),$),xY0.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(xY0)clearInterval(xY0)}}import*as sA8 from"bun:jsc";var{startSamplingProfiler:aA8,samplingProfilerStackTraces:rA8}=sA8;function SM1(){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{aA8()}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=rA8()?.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 _M1(){zM1();let $=[CM1(),kM1(),SM1()];return()=>{for(let Z of $)Z()}}import{existsSync as VD5}from"fs";var aW=B0();wM1();var{DBOS:zY0,DBOSClient:ED5}=await import("@dbos-inc/dbos-sdk");function kR1($,Z){if(!Z)return $;let Q=new URL($);if(!Q.searchParams.has("sslmode"))Q.searchParams.set("sslmode","verify-full");return Q.toString()}var zD5=[PG,eW,VD,ID,ij,r2,e2],AD5=aW.dispatchRole==="worker"?zD5:aW.dispatchRole==="api"?[]:void 0;zY0.setConfig(yR1({systemDatabaseUrl:kR1(aW.databaseUrl,aW.databasePgSsl),poolSize:aW.dbosPoolSize,executorID:aW.podName,listenQueues:AD5}));var{createApp:TD5}=await Promise.resolve().then(() => (A28(),z28)),{isServerPath:qD5}=await Promise.resolve().then(() => (_Y0(),ZM1)),{createAssetHandler:RD5,resolveClientDir:b28}=await Promise.resolve().then(() => (V28(),M28)),MD5=aW.port,C28=b28(import.meta.url,"../client"),x28=VD5(C28)?C28:b28(import.meta.url,"../dist/client"),ID5=RD5({clientDir:x28,isServerPath:qD5}),kD5={"X-Frame-Options":"DENY","Content-Security-Policy":"frame-ancestors 'none'"};function CD5($){let Z=new Headers($.headers);for(let[Q,Y]of Object.entries(kD5))Z.set(Q,Y);return new Response($.body,{status:$.status,statusText:$.statusText,headers:Z})}var{parsePreviewBaseDomain:SD5,tryHandlePreviewHttp:_D5,tryUpgradePreviewWs:vD5,previewWebSocketHandler:qR1,isPreviewWsData:RR1}=await Promise.resolve().then(() => (k28(),I28)),{getOrInitSharedRunner:f28}=await Promise.resolve().then(() => (yX(),Kd$)),y28=SD5(process.env.STUDIO_SANDBOX_PREVIEW_URL_PATTERN),S28={baseDomain:y28??"",getRunner:f28};if(process.env.STUDIO_SANDBOX_TENANT_POOLS?.trim())f28().catch(($)=>{console.warn("[lifecycle] eager sandbox provider init for tenant pools failed:",$ instanceof Error?$.message:String($))});var yh0=await TD5({clientDir:x28}),MR1=process.env.DBOS_CONDUCTOR_KEY?.trim(),_28=process.env.DBOS_CONDUCTOR_URL?.trim();await hR1({databaseUrl:kR1(aW.databaseUrl,aW.databasePgSsl)},()=>zY0.launch({...MR1?{conductorKey:MR1}:{},...MR1&&_28?{conductorURL:_28}:{}}));console.log(`[dbos] application version: ${zY0.applicationVersion}`);var VR1=5,IR1=0;await Z8(async()=>{IR1++;try{return await yh0.initDbos()}catch($){let Z=IR1>=VR1?"giving up":"retrying";throw console.warn(`[dbos] initDbos attempt ${IR1}/${VR1} failed, ${Z}`,$),$}},{maxAttempts:VR1,minTimeout:1000,maxTimeout:1e4,jitter:0.5});var bD5=Bun.serve({idleTimeout:0,port:MD5,hostname:"0.0.0.0",fetch:async($,Z)=>{if(y28){let Y=await vD5($,Z,S28);if(Y===void 0)return;if(Y)return Y;let X=await _D5($,S28);if(X)return X}let Q=await ID5($);if(Q)return CD5(Q);return yh0.fetch($,{server:Z})},websocket:{open($){if(RR1($.data))qR1.open($)},message($,Z){if(RR1($.data))qR1.message($,Z)},close($){if(RR1($.data))qR1.close($)}},development:!1}),xD5=_M1();if(aW.localMode)Promise.resolve().then(() => (sh(),Sv0)).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(() => (sh(),Sv0));Z()}catch{}});var v28=!1;async function fD5($){let Z;try{Z=await ED5.create({systemDatabaseUrl:kR1(aW.databaseUrl,aW.databasePgSsl),systemDatabaseSchemaName:"dbos"});let Q=await Z.listWorkflows({status:"PENDING",queueName:eW,executorId:$,loadInput:!1,loadOutput:!1});if(Q.length===0){console.log(`[shutdown] no in-flight thread-gate gates to hand off (executor ${$})`);return}let Y=Q.map((X)=>X.workflowID);await Z.resumeWorkflows(Y,{queueName:eW}),console.log(`[shutdown] re-enqueued ${Y.length} in-flight thread-gate gate(s) for re-adoption by a live executor (from ${$}):`,Y)}catch(Q){console.error("[shutdown] thread-gate handoff failed:",Q)}finally{await Z?.destroy().catch(()=>{})}}async function gh0($){if(v28)return;v28=!0,console.log(`
4562
4562
  [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{xD5(),yh0.markShuttingDown();let J=uR1(aW.dispatchRole,Q,process.env.SHUTDOWN_DRAIN_MS);await G$(J),await bD5.stop(!0);let G=zY0.executorID;await zY0.shutdown(),await fD5(G),await yh0.shutdown()}catch(J){console.error("[shutdown] Error during shutdown:",J),X=1}clearTimeout(Y),process.exit(X)}process.on("SIGTERM",()=>gh0("SIGTERM"));process.on("SIGINT",()=>gh0("SIGINT"));process.on("SIGHUP",()=>gh0("SIGHUP"));process.on("unhandledRejection",($)=>{console.error("[process] Unhandled rejection:",$)});process.on("uncaughtException",($)=>{console.error("[process] Uncaught exception:",$),gh0("uncaughtException")});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "decocms",
3
- "version": "4.532.2",
3
+ "version": "4.532.3",
4
4
  "description": "Deco CMS — Self-hostable MCP Gateway for managing AI connections and tools",
5
5
  "author": "Deco team",
6
6
  "repository": {