decocms 4.177.1 → 4.177.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (220) hide show
  1. package/dist/client/assets/{AlertCircle-2-mxfrk9.js → AlertCircle-CujrPwsm.js} +1 -1
  2. package/dist/client/assets/{AreaChart-CChVOUx8.js → AreaChart-C4YZ0_gL.js} +1 -1
  3. package/dist/client/assets/{ArrowUp-DyT7XZqG.js → ArrowUp-FnZCEJcp.js} +1 -1
  4. package/dist/client/assets/{ArrowUpRight-CPOOO4oW.js → ArrowUpRight-lowWG_1J.js} +1 -1
  5. package/dist/client/assets/{Check-Be-5GGRs.js → Check-DW10Q148.js} +1 -1
  6. package/dist/client/assets/{CheckCircle-DzGlrSK2.js → CheckCircle-CBMEXt7L.js} +1 -1
  7. package/dist/client/assets/{ChevronDown-DdxMzC59.js → ChevronDown-DwAvDKTl.js} +1 -1
  8. package/dist/client/assets/{ChevronRight-DJwM5k09.js → ChevronRight-C99dote8.js} +1 -1
  9. package/dist/client/assets/{ChevronUp-DiAqu8Yi.js → ChevronUp-dfA-SOdk.js} +1 -1
  10. package/dist/client/assets/{Copy01-B6_TvfNX.js → Copy01-Bl940Z4D.js} +1 -1
  11. package/dist/client/assets/{CpuChip01-82yYPYT-.js → CpuChip01-Bhz7W_CJ.js} +1 -1
  12. package/dist/client/assets/{DotsVertical-BHvMVqac.js → DotsVertical-CDBkc6O0.js} +1 -1
  13. package/dist/client/assets/{Eye-3cJGdK2e.js → Eye-DMdNnBvv.js} +1 -1
  14. package/dist/client/assets/{FilterLines-Dsffjh6h.js → FilterLines-YmmO5qI8.js} +1 -1
  15. package/dist/client/assets/{HardDrive-B9OsWbwr.js → HardDrive-HviCuJpo.js} +1 -1
  16. package/dist/client/assets/{Key01-Df2BRxE-.js → Key01-DSUIGNWV.js} +1 -1
  17. package/dist/client/assets/{LayoutLeft-1UT5iG3d.js → LayoutLeft-BR9yVote.js} +1 -1
  18. package/dist/client/assets/{LinkExternal01-5BvhBbAT.js → LinkExternal01-CqPsuF15.js} +1 -1
  19. package/dist/client/assets/{LogOut01-BKkPGm2P.js → LogOut01-D3C7qX0q.js} +1 -1
  20. package/dist/client/assets/{Monitor01-DHcySRr0.js → Monitor01-D2efweSf.js} +1 -1
  21. package/dist/client/assets/{Palette-uU-43vio.js → Palette-ChIl58Yp.js} +1 -1
  22. package/dist/client/assets/{Play-D3ny8hKS.js → Play-ChZsTLeU.js} +1 -1
  23. package/dist/client/assets/{Plus-DMtkW9dt.js → Plus-CCnPd46p.js} +1 -1
  24. package/dist/client/assets/{SearchLg-DM31eGyS.js → SearchLg-DddoQMLM.js} +1 -1
  25. package/dist/client/assets/{SearchMd-D4qusMiJ.js → SearchMd-BwelsClN.js} +1 -1
  26. package/dist/client/assets/{Settings02-7vGrIrBN.js → Settings02-BChcxi54.js} +1 -1
  27. package/dist/client/assets/{Shield01-BcO35Tj0.js → Shield01-DZW5Me3r.js} +1 -1
  28. package/dist/client/assets/{Star01-DwCsggBK.js → Star01-BgvVTS-Z.js} +1 -1
  29. package/dist/client/assets/{Stars01-tnb0apDe.js → Stars01-BY24v2c2.js} +1 -1
  30. package/dist/client/assets/{Stars02-7HP6N02B.js → Stars02-B4uUiiNp.js} +1 -1
  31. package/dist/client/assets/{Sun-B9IYF_rw.js → Sun-DHBNEW-T.js} +1 -1
  32. package/dist/client/assets/{SwitchHorizontal01-CGiPnyuY.js → SwitchHorizontal01-DuMmTKcr.js} +1 -1
  33. package/dist/client/assets/{Tool01-R3K_Thtw.js → Tool01-B-2jpyWm.js} +1 -1
  34. package/dist/client/assets/{Tool02-DFJAwjIN.js → Tool02-Cwn7DNuf.js} +1 -1
  35. package/dist/client/assets/{Trash01-D1KG_3tD.js → Trash01-du7dJ8xM.js} +1 -1
  36. package/dist/client/assets/{TrendUp01-7TEuXkqk.js → TrendUp01-BBNr9I0n.js} +1 -1
  37. package/dist/client/assets/{Upload01-D9SqYEtC.js → Upload01-Bqvc-5mY.js} +1 -1
  38. package/dist/client/assets/{User01-OX0_Z8wV.js → User01-DC9ZgZwF.js} +1 -1
  39. package/dist/client/assets/{Users01-DUMizSVY.js → Users01-6KiAb6vQ.js} +1 -1
  40. package/dist/client/assets/{Users03-lZ1LleYF.js → Users03-B183ejmS.js} +1 -1
  41. package/dist/client/assets/{X-CCi-VQZa.js → X-BoVJVvaY.js} +1 -1
  42. package/dist/client/assets/{XCircle-B0MfX4-G.js → XCircle-GALqPCo7.js} +1 -1
  43. package/dist/client/assets/{XClose-DKqvkrIA.js → XClose-BlYRHguW.js} +1 -1
  44. package/dist/client/assets/{Zap-CqFv29Bj.js → Zap-RUps3lz8.js} +1 -1
  45. package/dist/client/assets/{ZapSquare-rt2_eN-x.js → ZapSquare-CyvjvqAw.js} +1 -1
  46. package/dist/client/assets/{access-gate-DK2WT23M.js → access-gate-DbgH0ewd.js} +1 -1
  47. package/dist/client/assets/{add-section-modal-CiE32p1F.js → add-section-modal-CZa7qWCu.js} +1 -1
  48. package/dist/client/assets/{agent-icon-B973VM7Z.js → agent-icon-BMPeJ6Tx.js} +1 -1
  49. package/dist/client/assets/{agents-list-CufEIuCm.js → agents-list-AcVHPoUd.js} +1 -1
  50. package/dist/client/assets/{ai-providers-k5zu4eqF.js → ai-providers-DBv8sZkN.js} +1 -1
  51. package/dist/client/assets/{alert-BLf9YI2F.js → alert-B1785G2V.js} +1 -1
  52. package/dist/client/assets/{alert-dialog-DVkWGoFg.js → alert-dialog-D-tTwfMD.js} +1 -1
  53. package/dist/client/assets/{app-editor-DCq5-a25.js → app-editor-DaQzCq59.js} +1 -1
  54. package/dist/client/assets/{auth-Bkca6AT7.js → auth-BhtO9so7.js} +1 -1
  55. package/dist/client/assets/{auth-catchall-Dq6_ojsa.js → auth-catchall-BdRdM3sF.js} +1 -1
  56. package/dist/client/assets/{auth-entry-C7vqV_nj.js → auth-entry-DofrUAja.js} +1 -1
  57. package/dist/client/assets/{auth-split-layout-C7q02dly.js → auth-split-layout-CnLziHxl.js} +1 -1
  58. package/dist/client/assets/{authenticate-and-persist-oauth-BxoxqCLU.js → authenticate-and-persist-oauth-C2B1tJCP.js} +1 -1
  59. package/dist/client/assets/{automation-list-row-B5nf-Khk.js → automation-list-row-bRQihJQD.js} +1 -1
  60. package/dist/client/assets/{automation-runs-j_hLwqX9.js → automation-runs-CdGVJ8Sz.js} +1 -1
  61. package/dist/client/assets/{automations-BIUyz6BG.js → automations-bCY1z19t.js} +1 -1
  62. package/dist/client/assets/{avatar-BnU49HmK.js → avatar-CObcTP4f.js} +1 -1
  63. package/dist/client/assets/{badge-CDGc7KqH.js → badge-DdDa_GtZ.js} +1 -1
  64. package/dist/client/assets/{block-document-CVZGNHqv.js → block-document-CSaRdwWC.js} +1 -1
  65. package/dist/client/assets/{brand-context-nrK28_bL.js → brand-context-BpPk1nMw.js} +1 -1
  66. package/dist/client/assets/{buckets-BkLNLMph.js → buckets-B3DheidT.js} +1 -1
  67. package/dist/client/assets/{bulk-category-panel-CKw0kRYF.js → bulk-category-panel-Dzc0EShH.js} +1 -1
  68. package/dist/client/assets/{calendar-CmW85elm.js → calendar-CovrFJTt.js} +1 -1
  69. package/dist/client/assets/{capability-load-error-BEjVgkS3.js → capability-load-error-DjZIo_C_.js} +1 -1
  70. package/dist/client/assets/{card-BQzdZBkG.js → card-DAaI9RTM.js} +1 -1
  71. package/dist/client/assets/{category-editor-DjKy2DN_.js → category-editor-ChAcbCsE.js} +1 -1
  72. package/dist/client/assets/{chat-context-gg75OlIn.js → chat-context-ERPXBA0s.js} +1 -1
  73. package/dist/client/assets/{checkbox-B040Lq8L.js → checkbox-DAUIgwuw.js} +1 -1
  74. package/dist/client/assets/{cli-auth-success-l_KLTWnW.js → cli-auth-success-hDWXtD4S.js} +1 -1
  75. package/dist/client/assets/{collection-detail-DwGC9WJH.js → collection-detail-BOUnDCvA.js} +1 -1
  76. package/dist/client/assets/{collection-display-button-Bfkoy0fk.js → collection-display-button-BENWxcm4.js} +1 -1
  77. package/dist/client/assets/{collection-search-fjCBsqB7.js → collection-search-BlNDygrc.js} +1 -1
  78. package/dist/client/assets/{collection-table-wrapper-DOLdfzl9.js → collection-table-wrapper-DPox8fo6.js} +1 -1
  79. package/dist/client/assets/{collection-tabs-ekbc4tUg.js → collection-tabs-BSSb4AZC.js} +1 -1
  80. package/dist/client/assets/{command-CRNXe9en.js → command-BEpWU-1L.js} +1 -1
  81. package/dist/client/assets/{commerce-onboarding-DM46iyU7.js → commerce-onboarding-C9Q9VjxB.js} +1 -1
  82. package/dist/client/assets/{companions-core-DGONnZ5h.js → companions-core-0oq_tfkI.js} +1 -1
  83. package/dist/client/assets/{connect-BKTGO1az.js → connect-iZ4LTygU.js} +1 -1
  84. package/dist/client/assets/{connection-DViY8K-f.js → connection-CkQo38cz.js} +1 -1
  85. package/dist/client/assets/{connection-card-DDzniH8k.js → connection-card-b35csTCR.js} +1 -1
  86. package/dist/client/assets/{connection-detail-DK1UpsnS.js → connection-detail-adCmFdi7.js} +1 -1
  87. package/dist/client/assets/{connection-form-helpers-DfAOxx9H.js → connection-form-helpers-BkXVPTbv.js} +1 -1
  88. package/dist/client/assets/{connections-WLJtD4O2.js → connections-CaFvLnYI.js} +1 -1
  89. package/dist/client/assets/{decopilot-sse-pool-D6OCyxRv.js → decopilot-sse-pool-BbIjYqiX.js} +1 -1
  90. package/dist/client/assets/{dialog-BkFNCqxC.js → dialog-CQcBtvt8.js} +1 -1
  91. package/dist/client/assets/{domain-settings-BUjqxaaC.js → domain-settings-CZ6dtis6.js} +1 -1
  92. package/dist/client/assets/{drawer-CTa-9li9.js → drawer-F6H0xJ0z.js} +1 -1
  93. package/dist/client/assets/{dropdown-menu-D8kA38kN.js → dropdown-menu-PUstJqfa.js} +1 -1
  94. package/dist/client/assets/{empty-state-CNaIPLCP.js → empty-state-ydg5A2lP.js} +1 -1
  95. package/dist/client/assets/{extract-connection-data-CODveZYI.js → extract-connection-data-D5zkdWp6.js} +1 -1
  96. package/dist/client/assets/{file-explorer-QXFsz3Lx.js → file-explorer-QWgUHJm2.js} +1 -1
  97. package/dist/client/assets/{form-CV8T3-1y.js → form-CYg1X62e.js} +1 -1
  98. package/dist/client/assets/{general-DC18oSpb.js → general-BC6Pn8f3.js} +1 -1
  99. package/dist/client/assets/{github-repo-picker-DnJfTnjE.js → github-repo-picker-CbfDOIS8.js} +1 -1
  100. package/dist/client/assets/{hooks-BGhyFnHc.js → hooks-ICnM50KY.js} +1 -1
  101. package/dist/client/assets/{index-C_JXYoTu.js → index-B_YrTjFp.js} +3 -3
  102. package/dist/client/assets/{index-C2hEQwHA.js → index-C0T1hmdF.js} +3 -3
  103. package/dist/client/assets/{index-CLj357TJ.js → index-C64gDBqP.js} +1 -1
  104. package/dist/client/assets/{index-D9R7ENz9.js → index-CTXrzWE3.js} +1 -1
  105. package/dist/client/assets/{index-KiepMOd5.js → index-CogONXY3.js} +1 -1
  106. package/dist/client/assets/{index-2Wm27vot.js → index-DGtLsih-.js} +5 -5
  107. package/dist/client/assets/{index-CmORqTfw.js → index-DTKxs-S7.js} +1 -1
  108. package/dist/client/assets/{index-BHODagqu.js → index-Dh0rlGnt.js} +1 -1
  109. package/dist/client/assets/{index-Bnih_jI8.js → index-DyU5pY4M.js} +1 -1
  110. package/dist/client/assets/{index-CffTKEM4.js → index-phz-230y.js} +1 -1
  111. package/dist/client/assets/{index-redirect-BFCdVsIR.js → index-redirect-BWDkY4rF.js} +1 -1
  112. package/dist/client/assets/{index-CnIdntdB.js → index-zU_jaCez.js} +1 -1
  113. package/dist/client/assets/{input-C-fnbqCO.js → input-BwUUit92.js} +1 -1
  114. package/dist/client/assets/{integration-icon-BNEpN8aI.js → integration-icon-BFo-PHxO.js} +1 -1
  115. package/dist/client/assets/{invite-member-dialog-BosLzFXT.js → invite-member-dialog-D656VjLM.js} +1 -1
  116. package/dist/client/assets/{label-C-72R2Q-.js → label-B3a5p1s9.js} +1 -1
  117. package/dist/client/assets/{layout-DpxTSJfG.js → layout-Cn56VQ6G.js} +1 -1
  118. package/dist/client/assets/{login--KAGBLLo.js → login-cPNYiFuS.js} +1 -1
  119. package/dist/client/assets/{mcp-oauth-fo8kiS7W.js → mcp-oauth-BDfRuNJK.js} +1 -1
  120. package/dist/client/assets/{members-BAv5AyeN.js → members-YaHo9Z1K.js} +1 -1
  121. package/dist/client/assets/{monaco-editor-CgTxlXJg.js → monaco-editor-MvIeuW9Z.js} +1 -1
  122. package/dist/client/assets/{monitoring-stats-row-DOHkUO1M.js → monitoring-stats-row-f0fcio-Q.js} +1 -1
  123. package/dist/client/assets/{multi-select-CuCrQ3s2.js → multi-select-Dw5tEWO8.js} +1 -1
  124. package/dist/client/assets/{oauth-callback-sc38TlKp.js → oauth-callback-BdcyypBc.js} +1 -1
  125. package/dist/client/assets/{oauth-callback-ai-provider-BihD6SNV.js → oauth-callback-ai-provider-CA2jZj0U.js} +1 -1
  126. package/dist/client/assets/{onboarding-DOTmf_gU.js → onboarding-BgTGJw-k.js} +1 -1
  127. package/dist/client/assets/{org-layout-CvafgmK5.js → org-layout-BXg9tLfW.js} +1 -1
  128. package/dist/client/assets/{organization-choice-DuT0OJf3.js → organization-choice-D0NSHL9c.js} +1 -1
  129. package/dist/client/assets/{orgs-47suEXQs.js → orgs-CXB95D12.js} +1 -1
  130. package/dist/client/assets/{page-seo-form-m3QKhh8z.js → page-seo-form-BUb8iQTM.js} +1 -1
  131. package/dist/client/assets/{popover-Cwxn_DCv.js → popover-CyEka9gd.js} +1 -1
  132. package/dist/client/assets/{post-editor-BxdsEBBa.js → post-editor-YnbE47kj.js} +1 -1
  133. package/dist/client/assets/{primitives-DlTxAIok.js → primitives-tbS7oGeZ.js} +1 -1
  134. package/dist/client/assets/{profile-BNjTQJAH.js → profile-R9UezYAm.js} +1 -1
  135. package/dist/client/assets/project-app-view-DImGW7uo.js +1 -0
  136. package/dist/client/assets/record-editor-46LrU8Hi.js +1 -0
  137. package/dist/client/assets/{redirect-editor-BdiDwKDt.js → redirect-editor-CTgoJBkC.js} +1 -1
  138. package/dist/client/assets/registry-EmOl-ab7.js +2 -0
  139. package/dist/client/assets/{registry-layout-DHGHMlNa.js → registry-layout-CqGxou07.js} +1 -1
  140. package/dist/client/assets/{reports-Qopna_Xs.js → reports-CupQmvvk.js} +1 -1
  141. package/dist/client/assets/{require-capability-ByG0Extp.js → require-capability-CqMS9LF0.js} +1 -1
  142. package/dist/client/assets/{required-auth-layout-p5sjxAvg.js → required-auth-layout-B5ZP-bdh.js} +1 -1
  143. package/dist/client/assets/{reset-password-rRtlbf0u.js → reset-password-CWePAZox.js} +1 -1
  144. package/dist/client/assets/{roles-Pn010-bu.js → roles-BfSn_ery.js} +1 -1
  145. package/dist/client/assets/{search-input-DEUIKB6l.js → search-input-Bmeuo26r.js} +1 -1
  146. package/dist/client/assets/{secrets-BQqovdvw.js → secrets-DI65zBJS.js} +1 -1
  147. package/dist/client/assets/{sections-editor-Ddcc_TXp.js → sections-editor-fnI_N0SI.js} +1 -1
  148. package/dist/client/assets/{select-C-MMr0I_.js → select-CLrLhta0.js} +1 -1
  149. package/dist/client/assets/{select-model-Dl-Lm1PR.js → select-model-CUCry6UP.js} +1 -1
  150. package/dist/client/assets/{self-tool-result-Ddbtg1Nf.js → self-tool-result-QW6bBNH2.js} +1 -1
  151. package/dist/client/assets/{seo-editor-Db3q0z0D.js → seo-editor-ByQabh_u.js} +1 -1
  152. package/dist/client/assets/{settings-layout-DHuQqB1t.js → settings-layout-CzRK7jt8.js} +1 -1
  153. package/dist/client/assets/{settings-section-2g-GqRT7.js → settings-section-BgDhwHL-.js} +1 -1
  154. package/dist/client/assets/{shell-controls-DBuvOWF9.js → shell-controls-D_hP6i1L.js} +1 -1
  155. package/dist/client/assets/{shell-layout-CRLbZ7Lc.js → shell-layout-CrMHbF0K.js} +1 -1
  156. package/dist/client/assets/{sidebar--Jli8_vV.js → sidebar-YjDzShe_.js} +1 -1
  157. package/dist/client/assets/{skeleton-BBLZ-nGG.js → skeleton-d8EyA0Kx.js} +1 -1
  158. package/dist/client/assets/{spinner-CJPAjIJo.js → spinner-D7-lIYk0.js} +1 -1
  159. package/dist/client/assets/{sso-CX11L0X4.js → sso-Dw5vonNc.js} +1 -1
  160. package/dist/client/assets/{store-BaRzz_Ai.js → store-BOJou9V1.js} +1 -1
  161. package/dist/client/assets/store-registry-DKi5hfWO.js +2 -0
  162. package/dist/client/assets/{studio-tools-28EhT0BO.js → studio-tools-DCEUmDPI.js} +1 -1
  163. package/dist/client/assets/{switch-Ct3V8oBb.js → switch-BMm8PSFu.js} +1 -1
  164. package/dist/client/assets/{tab-id-CZS91f0S.js → tab-id-4cSyEvZh.js} +1 -1
  165. package/dist/client/assets/{table-C4_pqLBf.js → table-BXZe_mum.js} +1 -1
  166. package/dist/client/assets/{tabs-DSJwK5c4.js → tabs-CGoN27LY.js} +1 -1
  167. package/dist/client/assets/{textarea-DXhnnQdn.js → textarea-7b843g0T.js} +1 -1
  168. package/dist/client/assets/{toggle-group-rZRtXF7Z.js → toggle-group-fXQ6QX6R.js} +1 -1
  169. package/dist/client/assets/{toolbar-DH0DjOiV.js → toolbar-sfGeLlSJ.js} +1 -1
  170. package/dist/client/assets/{tooltip-CpHHAk2J.js → tooltip-iml8LvPc.js} +1 -1
  171. package/dist/client/assets/{use-ai-providers-DwTn40nT.js → use-ai-providers-BmtjtxZy.js} +1 -1
  172. package/dist/client/assets/{use-automations-CCdzDAqr.js → use-automations-DMMc9cWI.js} +1 -1
  173. package/dist/client/assets/{use-autosave-AEY_LBRM.js → use-autosave-CqpmBsnY.js} +1 -1
  174. package/dist/client/assets/{use-capability-BmMqfYBZ.js → use-capability-DHy-BnJq.js} +1 -1
  175. package/dist/client/assets/{use-clock-tick-D6sKdl8i.js → use-clock-tick-CdU40SLs.js} +1 -1
  176. package/dist/client/assets/{use-connection-PQdoseET.js → use-connection-C0g1qMbt.js} +1 -1
  177. package/dist/client/assets/{use-copy-B2d8HXEr.js → use-copy-CxIukilP.js} +1 -1
  178. package/dist/client/assets/{use-create-virtual-mcp-DcmJyE3F.js → use-create-virtual-mcp-C1JrOV3A.js} +1 -1
  179. package/dist/client/assets/{use-debounced-autosave-BIsaq734.js → use-debounced-autosave-CkuMDiRK.js} +1 -1
  180. package/dist/client/assets/{use-debounced-value-DkvcGcXD.js → use-debounced-value-HAYQ7BUk.js} +1 -1
  181. package/dist/client/assets/{use-deco-credits-CQTfkP6t.js → use-deco-credits-BBX_NvNP.js} +1 -1
  182. package/dist/client/assets/{use-decopilot-events-Bu4li_Kw.js → use-decopilot-events-BODwr9Av.js} +1 -1
  183. package/dist/client/assets/{use-delete-connection-CM7OzN2z.js → use-delete-connection-BQIj2_1n.js} +1 -1
  184. package/dist/client/assets/{use-deployment-admin-CINzFnZ8.js → use-deployment-admin-Ct-3W00G.js} +1 -1
  185. package/dist/client/assets/{use-file-configs-DxidAf4I.js → use-file-configs-BqfM02Y8.js} +1 -1
  186. package/dist/client/assets/{use-infinite-scroll-Ck40sRdW.js → use-infinite-scroll-ByMdAZfX.js} +1 -1
  187. package/dist/client/assets/{use-join-requests-Dtu9BDNR.js → use-join-requests-DRtVtv8g.js} +1 -1
  188. package/dist/client/assets/{use-mcp-auth-status-CkblF-6k.js → use-mcp-auth-status-C__j-cX6.js} +1 -1
  189. package/dist/client/assets/{use-mcp-client-Dn7AJCox.js → use-mcp-client-Os3WISQ7.js} +1 -1
  190. package/dist/client/assets/{use-mcp-tools-Chaqjyi4.js → use-mcp-tools-Cqtii-BH.js} +1 -1
  191. package/dist/client/assets/{use-members-Uuwx-sEr.js → use-members-CwYCNjN8.js} +1 -1
  192. package/dist/client/assets/{use-mobile-D62IT3sR.js → use-mobile-f2A-YGHZ.js} +1 -1
  193. package/dist/client/assets/{use-navigate-to-agent-B-Osy1cg.js → use-navigate-to-agent-BYU4pHk5.js} +1 -1
  194. package/dist/client/assets/{use-org-auth-client-DuSOWyxe.js → use-org-auth-client-78hc5tZr.js} +1 -1
  195. package/dist/client/assets/{use-org-sso-CXoKTr3S.js → use-org-sso-jUgkZckC.js} +1 -1
  196. package/dist/client/assets/{use-organization-roles-D_rCFTW_.js → use-organization-roles-qaxMca2d.js} +1 -1
  197. package/dist/client/assets/{use-organization-settings-BCCgRBeV.js → use-organization-settings-CAjKqcdX.js} +1 -1
  198. package/dist/client/assets/{use-registry-connections-DOJD57ws.js → use-registry-connections-_aQP169R.js} +1 -1
  199. package/dist/client/assets/{use-secrets-BguPJ3cT.js → use-secrets-5pFvjn9g.js} +1 -1
  200. package/dist/client/assets/{use-status-sounds-BZN_H008.js → use-status-sounds-DsJk8IAV.js} +1 -1
  201. package/dist/client/assets/{use-tags-K0KZ6UkP.js → use-tags-D3Ojs8FP.js} +1 -1
  202. package/dist/client/assets/{use-view-mode-lq_qIRrU.js → use-view-mode-BietNG32.js} +1 -1
  203. package/dist/client/assets/{use-virtual-mcp-DsD1JZ2j.js → use-virtual-mcp-DMQ6qusi.js} +1 -1
  204. package/dist/client/assets/useInfiniteQuery-CGXVV3AW.js +1 -0
  205. package/dist/client/assets/{useQueries-BfWi4zNC.js → useQueries-DEBifvHi.js} +1 -1
  206. package/dist/client/assets/{useRouterState-tKZBLbIg.js → useRouterState-DJFwCWcS.js} +1 -1
  207. package/dist/client/assets/useSuspenseInfiniteQuery-C79RU5LF.js +1 -0
  208. package/dist/client/assets/{users-DE8cqWNg.js → users-BXk_XHMc.js} +1 -1
  209. package/dist/client/assets/{variant-calendar-Dc16VLtk.js → variant-calendar-DbevQtk2.js} +1 -1
  210. package/dist/client/assets/{view-mode-toggle-Dyr3AnIy.js → view-mode-toggle-B8X6cl1e.js} +1 -1
  211. package/dist/client/index.html +1 -1
  212. package/dist/server/cli.js +2 -2
  213. package/dist/server/server.js +2 -2
  214. package/package.json +1 -1
  215. package/dist/client/assets/project-app-view-BvWGuQWX.js +0 -1
  216. package/dist/client/assets/record-editor-Cvoeqas7.js +0 -1
  217. package/dist/client/assets/registry-QhOwVdle.js +0 -2
  218. package/dist/client/assets/store-registry-CEnZlA-O.js +0 -2
  219. package/dist/client/assets/useInfiniteQuery-FeHDwsAH.js +0 -1
  220. package/dist/client/assets/useSuspenseInfiniteQuery-BF4TEIT_.js +0 -1
@@ -1543,7 +1543,7 @@ ${Z}
1543
1543
 
1544
1544
  Use this to continue with the user's request \u2014 do NOT call subtask again for this.`:`The background subtask you started completed but produced no usable output${X==="length"?" (it hit its step limit)":""}. Continue with the user's request without calling subtask again for this.`;return{models:G,reactionNudge:Q}}}};$O.registerWorkflow(_K4,{name:"backgroundToolWorkflow"})});async function vK4($,Z,X){let G=await ox({kind:X.kind,ctx:$,organization:Z,virtualMcp:X.virtualMcp,mcpClient:X.mcpClient,provider:X.provider,models:X.models,messages:X.messages,abortSignal:X.abortSignal,temperature:X.temperature,planMode:X.planMode,isDecopilot:X.isDecopilot,systemAgentInstructions:X.systemAgentInstructions,currentThreadId:X.currentThreadId,user:X.user,userContext:X.userContext,codingWorkspace:X.codingWorkspace,writer:X.writer,subtaskParams:{provider:X.provider,organization:Z,models:X.models,codingWorkspace:X.codingWorkspace},prepareStep:X.prepareStep,onStepFinish:X.onStepFinish,passthroughClient:X.passthroughClient,connectionsData:X.connectionsData,extraTools:X.extraTools,toolOutputMap:X.toolOutputMap,additionalSystemMessages:X.additionalSystemMessages,activeToolNames:X.activeToolNames,stepLimit:X.stepLimit});return{result:G.result,error:G.error,span:G.span,assembledSystemMessages:G.assembledSystemMessages}}function kW$($){let{ctx:Z,organization:X,modelRuntime:G,sideChannel:Y,cleanup:Q}=$,J=BW$(Z,Y.writer),W=wW$(Z);return{toolRuntime:{buildEnvironmentTools:async({input:H,onChildUsage:F})=>{let U=mx(H),w=new Map,O=[],{resolveArgs:D,onToolCalled:L,onPrOpened:E}=Pw0(Z,H.threadId),z=await KW$(H,Z,{writer:Y.writer,toolOutputMap:w,pendingImages:O,threadId:H.threadId,resolveArgs:D,onToolCalled:L,onPrOpened:E,mcpForAgent:async(A,P)=>{let q=U.virtualMcp,S=null;if(q.id&&H.user.id&&S5(q.metadata)[H.user.id])S=await PV(Z,q.id,H.user.id,U.branch??void 0).catch(()=>null);return mN(q,Z,P?.superUser??!1,{listTimeoutMs:P?.listTimeoutMs,includeSkillsCatalog:!0,additionalConnections:S?[S]:[]})},provider:G.thinking.provider,imageProvider:G.image?.provider??G.thinking.provider,webSearchProvider:G.webSearch?.provider??G.thinking.provider,deepResearchProvider:G.deepResearch?.provider??G.thinking.provider,backgroundDispatcher:MW$({threadId:H.threadId,orgId:H.organizationId,userId:H.user.id,agentId:H.agent.id,temperature:H.temperature,toolApprovalLevel:H.toolApprovalLevel,branch:U.branch??null,runMetadata:Z.metadata.runMetadata}),htmlArtifactBuffer:W,onChildUsage:F}),j={tools:z.tools,passthroughTools:z.passthroughTools,builtInTools:z.builtInTools,connectionsBlockTools:z.connectionsBlockTools,toolAnnotations:z.toolAnnotations,connectionTitleMap:z.connectionTitleMap,serverInstructions:z.serverInstructions,passthroughClient:z.passthroughClient,toolOutputMap:w,writer:Y.writer,pendingImages:O,sideChunks:Y.stream,closeSideChunks:Y.close,onStepFinish:async()=>{await W.flush(),await J.sweep()},close:z.close};return Q.close=z.close,j},runEngine:(H)=>vK4(Z,X,H)},telemetry:{recordLlmCall:(H)=>XJ$({ctx:Z,...H}),monitorLlmCall:(H)=>$J$({ctx:Z,...H,requestId:Z.metadata.requestId,userAgent:Z.metadata.userAgent??null})}}}var SW$=B(()=>{ZJ$();GJ$();Kx();Jw0();RG();NW$();on0();OW$();DW$();Aw0();hw0();ix()});function uw0($){if($.providerId==="openai-compatible")try{let Z=JSON.parse($.apiKey);return{kind:"secret",providerId:$.providerId,apiKey:Z.apiKey??"",modelId:$.modelId,...Z.baseUrl?{baseUrl:Z.baseUrl}:{}}}catch{return{kind:"secret",providerId:$.providerId,apiKey:$.apiKey,modelId:$.modelId}}return{kind:"secret",providerId:$.providerId,apiKey:$.apiKey,modelId:$.modelId}}var VW$=B(()=>{QW();tv()});var CW$=B(()=>{VW$()});var _W$=B(()=>{Sn0();SW$();CW$();mQ$(($)=>{let Z=$.ctx;return kW$({...$,ctx:Z,organization:Z.organization})})});function cw0(){return crypto.randomUUID()}function ZO($,Z){return`error-${$}:${Z}`}class vW${thread;organization_id;storage;defaultWindowSize;constructor($){this.thread=$.thread,this.organization_id=$.thread.organization_id,this.storage=$.storage,this.defaultWindowSize=$.defaultWindowSize??50}async loadHistory($){let Z=$??this.defaultWindowSize,{chronological:X,isWindowed:G}=this.thread.message_storage_version===2?await this.loadWindowedFromParts(Z):await this.loadWindowedFromMessages(Z),Y=X.find((K)=>K.role!=="system");if(!Y||Y.role==="user")return X;let Q=Y,J=G?"[Context: earlier turns in this conversation were truncated. The messages below continue the thread \u2014 pick up from there.]":"[Context: this thread opens with your message \u2014 you spoke first to greet the user, and the user has not spoken before it. Their reply follows.]";return[{id:`${this.thread.id}-msg-prefix`,thread_id:this.thread.id,role:"user",parts:[{type:"text",text:J}],metadata:void 0,created_at:Q.created_at,updated_at:Q.updated_at},...X]}async loadWindowedFromMessages($){let{messages:Z,total:X}=await this.storage.listMessages(this.thread.id,{limit:$,sort:"desc"});return{chronological:[...Z].reverse(),isWindowed:X>Z.length}}async loadWindowedFromParts($){let{messages:Z,total:X}=await this.storage.messageParts().loadWindow(this.thread.id,{limit:$});return{chronological:Z.map((Y)=>({id:Y.id,thread_id:this.thread.id,role:Y.role,parts:Y.parts,metadata:Y.metadata??void 0,created_at:Y.created_at,updated_at:Y.created_at})),isWindowed:X>Z.length}}}async function lw0($,Z){let{thread_id:X,defaultWindowSize:G}=Z;if(!X)throw Error("createMemory: thread_id is required");let Y=await $.get(X);if(!Y)throw Error(`Thread not found: ${X}`);return new vW$({thread:Y,storage:$,defaultWindowSize:G})}function bK4($,Z){let X=$.filter((Q)=>Q.parts&&Q.parts.length>0),G=X.findIndex((Q)=>Q.id===Z.id);return G>=0?[...X.slice(0,G),Z]:[...X,Z]}async function fK4($){return[...$.systemMessages,...bK4($.history,$.userMessage)]}async function bW$($){let Z=$.isSubagent?[]:await(await lw0($.ctx.storage.threads,{thread_id:$.threadId,organization_id:$.ctx.organization?.id??"",userId:$.ctx.auth.user?.id??"",defaultWindowSize:$.windowSize??UQ})).loadHistory($.windowSize??UQ),X=await fK4({history:Z,userMessage:$.userMessage,systemMessages:$.systemMessages});return Dw0(X,$.ctx)}var fW$=B(()=>{cU();px()});function dw0($){return{id:$.id,role:$.role,parts:$.parts,metadata:$.metadata??void 0}}var kp0=()=>{};function xW$($,Z){let X=$.thinking.capabilities;if(!((X?.vision??!1)||(X?.file??!1))){if(Z.some((Q)=>Q.parts?.some((J)=>J.type==="file")))throw new G$(400,{message:"This model does not support file uploads. Please change the model and try again."})}}var yW$=B(()=>{jJ()});function mw0($){return $.sandboxProviderKind==="agent-sandbox"&&$.harnessId==="decopilot"}function gW$($){return $.harnessId==="decopilot"&&($.sandboxProviderKind==null||$.sandboxProviderKind==="agent-sandbox")}function yK4($){return{type:"data-run-status",id:"run-status",data:{stage:$}}}function hW$($){if(!$||typeof $!=="object")return!1;return $.type==="data-run-status"}async function w3($,Z,X){if(!$)return;try{await $.publishRawChunk(Z,yK4(X))}catch{}}var xK4,Wp,Xq9;var $y=B(()=>{xK4=["waiting-runner","starting-run","waiting-capacity","gathering-context","preparing-tools","starting-assistant","analyzing-scope"],Wp=["gathering-context","preparing-tools","starting-assistant","analyzing-scope"],Xq9=new Set(xK4)});function gK4($){return{type:"data-user-message",data:$}}function uW$($){if(!$||typeof $!=="object")return!1;return $.type==="data-user-message"}async function cW$($,Z,X){if(!$)return;try{await $.publishRawChunk(Z,gK4(X))}catch{}}class Kp{intervalMs;emitFn;sleepFn;controller=null;stopped=!1;constructor($){this.intervalMs=$.intervalMs??hK4,this.emitFn=$.emit,this.sleepFn=$.sleepFn??a$}arm(){if(this.stopped)return;this.controller?.abort();let $=new AbortController;this.controller=$,this.wait($.signal)}async wait($){try{await this.sleepFn(this.intervalMs,{signal:$})}catch{return}if(this.stopped||$.aborted)return;try{await this.emitFn()}catch{this.stop();return}if(!this.stopped&&!$.aborted)this.arm()}stop(){if(this.stopped)return;this.stopped=!0,this.controller?.abort(),this.controller=null}}function lW$($=Date.now){return{type:"data-liveness",data:{t:$()},transient:!0}}var hK4=30000;var Sp0=B(()=>{W5()});function uK4($=Date.now){return lW$($)}async function*dW$($,Z={}){let X=()=>uK4(Z.now),G=null,Y=new Kp({intervalMs:Z.intervalMs,sleepFn:Z.sleepFn,emit:()=>G?.()}),Q=$[Symbol.asyncIterator](),J=Q.next();try{Y.arm();while(!0){let W=new Promise((N)=>{G=()=>N("heartbeat")}),K=await Promise.race([J.then((N)=>({kind:"chunk",r:N})),W.then((N)=>({kind:N}))]);if(G=null,K.kind==="heartbeat"){yield X();continue}if(Y.arm(),K.r.done)return;yield K.r.value,J=Q.next()}}finally{Y.stop(),await Q.return?.(void 0).catch(()=>{})}}var mW$=B(()=>{Sp0()});function cK4($){if(!$)return;if(!("models"in $))return;return $.models??void 0}function iW$($,Z){if(!$)return!0;if($.includes("*:*"))return!0;return $.some((X)=>X.startsWith(`${Z}:`))}function O3($,Z,X){if(!$)return!0;return $.includes("*:*")||$.includes(`${Z}:*`)||$.includes(`${Z}:${X}`)}function iw0($,Z){if($===void 0)return Z;let X=Z;if(X.image&&!O3($,X.image.credentialId,X.image.id)){let{image:G,...Y}=X;X=Y}if(X.webSearch&&!O3($,X.webSearch.credentialId,X.webSearch.id)){let{webSearch:G,...Y}=X;X=Y}if(X.deepResearch&&!O3($,X.deepResearch.credentialId,X.deepResearch.id)){let{deepResearch:G,...Y}=X;X=Y}return X}function nW$($){if(!$)return{allowAll:!0,models:{}};if($.includes("*:*"))return{allowAll:!0,models:{}};let Z={};for(let X of $){let G=X.indexOf(":");if(G===-1)continue;let Y=X.slice(0,G),Q=X.slice(G+1);if(!Z[Y])Z[Y]=[];Z[Y].push(Q)}return{allowAll:!1,models:Z}}function lK4($){if($.some((X)=>X===void 0))return;let Z=new Set;for(let X of $)for(let G of X??[])Z.add(G);return[...Z]}async function B3($,Z,X){if(!X||HQ(X))return;let G=X.split(","),Y=await $.selectFrom("organizationRole").select(["role","permission"]).where("organizationId","=",Z).where("role","in",G).execute(),Q=new Map(Y.map((W)=>[W.role,W.permission])),J=G.map((W)=>{let K=Q.get(W);if(!K)return;try{let N=JSON.parse(K);return cK4(N)}catch{return console.error(`[model-permissions] Failed to parse permissions for role: ${W}`),[]}});return lK4(J)}var Zy=B(()=>{FQ()});function Xy($,Z){let X=$.capabilities?{...$.capabilities.vision!==void 0?{vision:$.capabilities.vision}:{},...$.capabilities.text!==void 0?{text:$.capabilities.text}:{},...$.capabilities.reasoning!==void 0?{reasoning:$.capabilities.reasoning}:{}}:void 0;return{id:$.id,...$.title!==void 0?{title:$.title}:{},...$.provider!==void 0?{provider:$.provider}:{},credentialId:Z,...$.limits?{limits:$.limits}:{},...X&&Object.keys(X).length>0?{capabilities:X}:{}}}function pW$($){let Z=$.credentialId,X=Xy($.thinking,Z);return{thinking:{...X,title:X.title??X.id},...$.fast?{fast:Xy($.fast,Z)}:{},...$.smart?{smart:Xy($.smart,Z)}:{},...$.image?{image:Xy($.image,$.image.credentialId??Z)}:{},...$.webSearch?{webSearch:Xy($.webSearch,$.webSearch.credentialId??Z)}:{},...$.deepResearch?{deepResearch:Xy($.deepResearch,$.deepResearch.credentialId??Z)}:{}}}function dK4($,Z=[]){if($==="stop")return"completed";if($==="tool-calls"){let X=Z.some((Y)=>Y.type==="tool-user_ask"&&Y.state==="input-available"),G=Z.some((Y)=>Y.state==="approval-requested");return X||G?"requires_action":"completed"}return"failed"}function nw0($,Z=[]){if($==null)return"completed";return dK4($,Z)}function Vp0(){return d0().podName}var tW$=B(()=>{V$()});function mK4($){let Z=null;return new ReadableStream({async pull(X){try{Z??=$().getReader();let{done:G,value:Y}=await Z.read();if(G)X.close();else X.enqueue(Y)}catch(G){X.error(G)}},async cancel(X){await Z?.cancel(X)}},{highWaterMark:0})}function iK4($){let Z=$.startSeq??0;async function*X(){for await(let G of $.chunks)yield{seq:++Z,chunk:G}}return new ReadableStream({async start(G){try{let Y=await $.loadOriginalMessages?.();await fw0({runId:$.runId,fenceToken:$.fenceToken,chunks:X(),errorMessageId:$.errorMessageId,originalMessages:Y,...$.initialAckSeq!==void 0?{initialAckSeq:$.initialAckSeq}:{},...$.onPublished?{onPublished:$.onPublished}:{}},{streamBuffer:$.streamBuffer,hooks:$.hooks,title:$.title}),G.close()}catch(Y){G.error(Y)}}})}async function nK4($,Z,X,G,Y){let{keyInfo:Q,apiKey:J}=await $.storage.aiProviderKeys.resolve(X,Z),W=NQ$(uw0({providerId:Q.providerId,apiKey:J,modelId:G}),Y);if(W.providerId==="openrouter"||W.providerId==="deco")return{...W,extraHeaders:{...W.extraHeaders,"HTTP-Referer":"https://studio.decocms.com","X-Title":"deco"}};return W}function Cp0($){if(!aW$.includes($))throw Error(`hosted dispatch requires one of ${aW$.join(", ")}; got ${JSON.stringify($)}`)}function sW$($){return!("messages"in $)}function eW$($,Z){if(!$.taskId)throw Error("buildDurableDispatchInput: taskId is required");let X=$.messages.filter((G)=>G.role==="system").flatMap((G)=>G.parts).filter((G)=>G.type==="text"&&typeof G.text==="string").map((G)=>G.text).join(`
1545
1545
 
1546
- `).trim();return{models:$.models,agent:$.agent,temperature:$.temperature,toolApprovalLevel:$.toolApprovalLevel,...$.toolAllowlist!==void 0?{toolAllowlist:$.toolAllowlist}:{},...$.maxAgentSteps!==void 0?{maxAgentSteps:$.maxAgentSteps}:{},...$.isSubagent!==void 0?{isSubagent:$.isSubagent}:{},...$.subtaskJobId!==void 0?{subtaskJobId:$.subtaskJobId}:{},...$.resumedFromBackground!==void 0?{resumedFromBackground:$.resumedFromBackground}:{},mode:$.mode,...$.windowSize!==void 0?{windowSize:$.windowSize}:{},...$.triggerId!==void 0?{triggerId:$.triggerId}:{},...$.runMetadata!==void 0?{runMetadata:$.runMetadata}:{},branch:Z.branch??$.branch??null,sandboxProviderKind:$.sandboxProviderKind,harnessId:$.harnessId,organizationId:$.organizationId,userId:$.userId,taskId:$.taskId,messageId:Z.messageId,...Z.runFenceToken!==void 0?{runFenceToken:Z.runFenceToken}:{},...$.isResume!==void 0?{isResume:$.isResume}:{},...X?{systemContext:X}:{}}}function pK4($,Z){let X=$.find((G)=>G.id===Z);if(!X)throw new tw("empty_request",`Persisted request message missing for messageId=${Z}`);if(X.role==="system")throw new tw("empty_request",`Persisted message ${Z} has role=system; expected non-system request message`);return X}function tK4($){let Z=$.models;return{"decopilot.agent.id":$.agent.id,"decopilot.model.id":Z.thinking.id,"decopilot.credential.id":Z.credentialId,"decopilot.organization.id":$.organizationId,"decopilot.user.id":$.userId,"decopilot.thread.id":$.taskId??""}}async function $K$($,Z,X){return X41("decopilot.dispatchRunAndWait",async(G)=>{let{taskId:Y,uiStream:Q,registrySignal:J}=await aK4($,Z,X,G),W=X.streamBuffer,K=W?await W.createTailStream(Y,$.abortSignal,{deliverPolicy:"new",closeOnDone:!0}):null;if(W&&K){let N=W.pump(Q,Y,J,$.organizationId);N.catch(()=>{});let H=K.getReader();try{while(!0){let{done:F}=await H.read();if(F)break}}finally{H.releaseLock()}await N}else{if(W)console.warn(JSON.stringify({msg:"decopilot-stream-diag",event:"producer-fallback-no-pump",taskId:Y,hasTail:!!K,note:"createTailStream returned null \u2014 draining producer stream directly; projector persistence depends on streamBuffer publish health"}));let N=Q.getReader();try{while(!0){let{done:H}=await N.read();if(H)break}}finally{N.releaseLock()}}return{taskId:Y}},tK4($))}async function oK4($,Z,X,G){let[Y,Q,J]=await Promise.all([$.storage.threads.list(G,{limit:9,agentId:X}).catch(()=>null),$.storage.interests.getForAgent(Z,X,G).catch(()=>null),$.storage.virtualMcps.list(Z).catch(()=>null)]),W={};if(Y&&Y.total>0)W.recentThreads={total:Y.total,threads:Y.threads.map((K)=>({id:K.id,title:K.title,updated_at:K.updated_at}))};if(Q&&Q.interests.length>0)W.interests=Q.interests.map((K)=>({title:K.title,summary:K.summary}));if(J)W.agents=J.map((K)=>({id:K.id,name:K.title,description:K.description,status:K.status}));return W}async function rK4({virtualMcp:$,agentId:Z,organizationId:X,ctx:G}){return $80({virtualMcp:$,agentId:Z,organizationId:X,ctx:G})}async function aK4($,Z,X,G){let{runRegistry:Y,streamBuffer:Q}=X;Cp0($.harnessId);let J=$.harnessId;if(!sW$($))$={...$,messages:$.messages.map((N)=>N.id?N:{...N,id:ld()})};let W=!1,K;try{let N=$.models;G.setAttribute("decopilot.harnessId",J),Z.sandboxPreference="agent-sandbox",G.setAttribute("decopilot.dispatchTarget.sandboxProviderKind","agent-sandbox");let H=mw0({harnessId:J,sandboxProviderKind:"agent-sandbox"}),F=pW$(N),U=await B3(Z.db,$.organizationId,Z.organization?.role??Z.auth.user?.role);if(!O3(U,F.thinking.credentialId,F.thinking.id))throw Error("Model not allowed for your role");F=iw0(U,F);let w=$.windowSize??UQ;if(!$.taskId)throw Error("dispatchRunAndWait: taskId is required");if(H)await w3(Q,$.taskId,Wp[0]);let O=await KQ$(Z,$.organizationId,Z.metadata?.runMetadata),D=(n)=>n?nK4(Z,$.organizationId,n.credentialId,n.id,O):Promise.resolve(void 0),[L,E,z,j,A,P,q,S,M]=await Promise.all([Z.storage.virtualMcps.findById($.agent.id,$.organizationId),D(F.thinking),D(F.fast),D(F.smart),D(F.image),D(F.webSearch),D(F.deepResearch),lw0(Z.storage.threads,{organization_id:$.organizationId,thread_id:$.taskId,userId:$.userId,defaultWindowSize:w}),oK4(Z,$.organizationId,$.agent.id,$.userId)]);if(H)await w3(Q,$.taskId,Wp[1]);let _=E?{thinking:E,...z?{fast:z}:{},...j?{smart:j}:{},...A?{image:A}:{},...P?{webSearch:P}:{},...q?{deepResearch:q}:{}}:void 0,l=E?$w0(E):null;if(K=S.thread.id,Z.metadata.threadId=S.thread.id,G.setAttribute("decopilot.thread.id",S.thread.id),S.thread.created_by!==$.userId)throw Error("You are not allowed to write to this thread because you are not the owner");if(l?.asyncResearch){let n=[["thinking",F.thinking.id]];if(F.fast)n.push(["fast",F.fast.id]);if(F.smart)n.push(["smart",F.smart.id]);if(F.image)n.push(["image",F.image.id]);for(let[$0,p0]of n)if(l.asyncResearch.canHandle(p0))throw Error(`Model "${p0}" can only be used as a Deep Research model. It is not usable as the ${$0} model \u2014 set it in the Deep Research slot instead.`)}let x=S.thread.message_storage_version===2?new o7({storage:Z.storage.threads.messageParts(),orgId:$.organizationId,threadId:S.thread.id,runId:S.thread.id}):null;if(!L)throw new tw("agent_not_found","Agent not found");let p=await rK4({virtualMcp:L,agentId:$.agent.id,organizationId:$.organizationId,ctx:Z});if($.isResume)await Y.execute({type:"RESUME",taskId:S.thread.id,orgId:$.organizationId,userId:$.userId,abortController:new AbortController,podId:Vp0()});else await Y.execute({type:"START",taskId:S.thread.id,orgId:$.organizationId,userId:$.userId,abortController:new AbortController,podId:Vp0(),runConfig:{models:$.models,agent:$.agent,temperature:$.temperature,toolApprovalLevel:$.toolApprovalLevel,mode:$.mode,windowSize:$.windowSize,triggerId:$.triggerId},messageId:$.messageId});W=!0,await Z.storage.threads.clearCancelRequested(S.thread.id);let d;if($.runFenceToken)d=$.runFenceToken;else d=cw0(),await Z.storage.threads.setRunFence(S.thread.id,d);let W0=Y.getAbortSignal(S.thread.id);if(!W0)throw await Y.execute({type:"FINISH",taskId:S.thread.id,threadStatus:"failed"}),Error("Run was cancelled immediately after starting");if($.abortSignal){let n=$.abortSignal;if(n.aborted)await Y.execute({type:"CANCEL",taskId:S.thread.id});else n.addEventListener("abort",()=>{Y.execute({type:"CANCEL",taskId:S.thread.id}).catch(()=>{})},{once:!0})}if(!$.isResume)Q?.purge(S.thread.id);let B0=[],P0,a;if(sW$($)){if(a=await S.loadHistory(w),P0=pK4(a,$.messageId),$.systemContext)B0=[{id:`system-${$.messageId}`,role:"system",parts:[{type:"text",text:$.systemContext}]}]}else{B0=$.messages.filter(($0)=>$0.role==="system");let n=$.messages.find(($0)=>$0.role!=="system");if(P0=n?(await Bw0([n],Z,{threadId:S.thread.id})).find(($0)=>$0.role!=="system"):void 0,!$.isResume){if(!P0)throw new tw("empty_request","No user message found in input \u2014 expected at least one non-system message");if(x)await x.emitUserMessage(P0).catch(($0)=>{console.error("[decopilot:stream] v2 user-message emit failed",$0)})}}if(P0)await cW$(Q,S.thread.id,P0);let t=[],A0=Z.organization,G0=Date.now(),L0=P0?(await Dw0([P0],Z))[0]:void 0;if(!L0||!P0)throw new tw("empty_request","No user message found in input \u2014 expected at least one non-system message");xW$($.models,[L0]);let y0=await bW$({ctx:Z,threadId:S.thread.id,userMessage:P0,windowSize:w,isSubagent:$.isSubagent===!0,systemMessages:B0}),u0={url:"",headers:{},expiresAt:0},Z0=void 0,O0=void 0,z0={cwd:null},q0=typeof p.metadata?.instructions==="string"?p.metadata.instructions:void 0,r={taskId:$.taskId,isSubagent:$.isSubagent,subtaskJobId:$.subtaskJobId,resumedFromBackground:$.resumedFromBackground,virtualMcp:p,branch:$.branch,messages:y0,modelSources:_,mcpSource:Z0,objectStorageSource:O0,userContext:M},X0={harnessId:J,threadId:S.thread.id,userMessage:L0,harness:{sessionId:void 0},workspace:z0,models:F,mcp:u0,mode:$.mode,temperature:$.temperature,toolApprovalLevel:$.toolApprovalLevel,toolAllowlist:$.toolAllowlist??null,maxAgentSteps:$.maxAgentSteps,user:{id:$.userId,email:Z.auth.user?.email??""},organizationId:$.organizationId,organizationSlug:A0.slug,agent:{id:$.agent.id,instructions:q0},triggerId:$.triggerId,currentThreadTitle:S.thread.title,runFenceToken:d};if(H)await w3(Q,$.taskId,Wp[2]);let I0=ow(J),J0=I0?await Z.storage.threads.getAckedSeq(S.thread.id):0;if(J0>0)console.log("[dispatch] resuming a sandbox-hosted turn",{runId:S.thread.id,fromSeq:J0});let U0=I0?await Z.storage.claudeSubscriptions.findLiveToken($.userId):null,E1=async function*(){let n={...X0,signal:W0};if(qn0(n,r),H)await w3(Q,S.thread.id,Wp[3]);yield*(I0?new vn0({ctx:Z,harnessId:J,virtualMcpId:p.id,...J0>0?{resume:{reason:"the Studio process driving the previous attempt stopped"}}:{},branch:await EY$(Z,{threadId:S.thread.id,agentRepo:p.metadata?.githubRepo,runBranch:$.branch}),credential:U0?{providerId:pQ$,apiKey:U0}:E?{providerId:E.providerId,apiKey:E.apiKey,...E.baseUrl?{baseUrl:E.baseUrl}:{}}:null}):new Vn0({ctx:Z,harnessId:J})).dispatch(n)},n0=mK4(()=>iK4({runId:S.thread.id,fenceToken:d,streamBuffer:Q??{publishRawChunk:async()=>!1,publishDone:async()=>!1},chunks:dW$(E1()),...I0?{startSeq:J0,initialAckSeq:J0,onPublished:(n)=>Z.storage.threads.bumpAckedSeq(S.thread.id,d,n)}:{},errorMessageId:ZO(S.thread.id,d),loadOriginalMessages:x?async()=>(await Z.storage.threads.messageParts().loadWindow(S.thread.id,{limit:1})).messages.map(dw0):void 0,title:{currentThreadTitle:S.thread.title,threadId:S.thread.id,persistTitle:async(n,$0)=>{await Z.storage.threads.update(n,{title:$0})}},hooks:{onStep:()=>{let n=Y.dispatch({type:"STEP_DONE",taskId:S.thread.id});t.push(Y.react(n).catch(($0)=>{console.error("[decopilot:stream] onStepFinish reactor failed",$0)}))},onFinish:async(n,$0)=>{let p0=t.length,Q1=performance.now();if(await Promise.allSettled(t),oW$.record(performance.now()-Q1,{phase:"settle"}),W0.aborted)return;await a$(0);let s1=rW$?yO():null,f0=performance.now(),d1=nw0($0,n?.parts);await Y.execute({type:"FINISH",taskId:S.thread.id,threadStatus:d1});let E8=performance.now()-f0;if(oW$.record(E8,{phase:"save"}),rW$&&s1){let l4=yO()??s1,h6=-1;try{h6=JSON.stringify(n)?.length??-1}catch{}console.warn(JSON.stringify({msg:"decopilot-finish-trace",threadId:S.thread.id,pendingOps:p0,saveMs:Math.round(E8),parts:n?.parts?.length??0,messageBytes:h6,rssDelta:l4.rss-s1.rss,heapUsedDelta:l4.heapUsed-s1.heapUsed,externalDelta:l4.external-s1.external}))}},onError:(n)=>{if(W0.aborted){x1.capture({distinctId:$.userId,event:"chat_message_aborted",groups:{organization:$.organizationId},properties:{organization_id:$.organizationId,thread_id:S.thread.id,agent_id:$.agent.id,model_id:F.thinking.id,mode:$.mode,duration_ms:Date.now()-G0,is_resume:$.isResume??!1}});return}console.error("[decopilot] stream error:",HH(n)),Y.execute({type:"FINISH",taskId:S.thread.id,threadStatus:"failed"}).catch(($0)=>{console.error("[decopilot:stream] onError reactor failed",$0)})}}}));return{taskId:S.thread.id,uiStream:n0,registrySignal:W0}}catch(N){if(W&&K)Y.execute({type:"FINISH",taskId:K,threadStatus:"failed"}).catch((H)=>{console.error("[decopilot:stream] catch-block reactor failed",H)});throw N}}var oW$,rW$,aW$;var pw0=B(()=>{on();Bn0();D6();nQ$();_n0();Qw0();U3();Kb();_W$();ix();Dn0();cU();fW$();ew();kp0();px();yW$();$y();Ip0();mW$();Zy();K5();tW$();W5();oW$=J8.createHistogram("decopilot.finish.duration",{description:"Wall time of onFinish flush segments, tagged by phase",unit:"ms"}),rW$=process.env.DECOPILOT_FINISH_TRACE==="1";aW$=["decopilot","claude-code"]});function ZK$($){return hW$($)||uW$($)}async function sK4($){let Z=$.getReader();try{while(!0){let{done:X}=await Z.read();if(X)break}}finally{Z.releaseLock()}}function eK4($,Z){let X=$.getReader(),G=!1,Y=()=>{if(G)return;G=!0,X.releaseLock()};return new ReadableStream({async pull(Q){try{let{done:J,value:W}=await X.read();if(J)Y(),Q.close();else Q.enqueue(W)}catch(J){Z(J),Y(),Q.error(J)}},async cancel(Q){await X.cancel(Q),Y()}})}async function XK$($){if(!$.chunks&&!$.chunkStream)throw Error("projectChunks requires chunks or chunkStream");let Z=null,X=!1,G=void 0,Y={inputTokens:0,outputTokens:0,totalTokens:0},Q=[],J=null,W=(O)=>{if(J===null)J=O;throw O},K=$.chunks?async function*(){try{for await(let O of $.chunks){if(ZK$(O))continue;yield O}}catch(O){throw Z=O,O}}():void 0,N=$.chunkStream?eK4($.chunkStream,(O)=>{Z=O}).pipeThrough(new TransformStream({transform(O,D){if(!ZK$(O))D.enqueue(O)}})):void 0,H={emitStepParts:(O)=>$.persistence.emitStepParts(O).catch(W),emitFinal:(O)=>$.persistence.emitFinal(O).catch(W),emitError:(O,D)=>$.persistence.emitError(O,D).catch(W)},{uiStream:F,whenComplete:U}=bw0({chunks:K,chunkStream:N,originalMessages:$.originalMessages??[],title:$.title?{currentThreadTitle:$.title.currentThreadTitle,threadId:$.title.threadId,persistTitle:$.title.persistTitle}:{currentThreadTitle:void 0,threadId:"projector",persistTitle:async()=>{}},persistence:H,sanitizeErrorText:$.sanitizeErrorText,errorMessageId:$.errorMessageId,generateMessageId:$.generateMessageId,hooks:{onUsage:(O)=>{Y={inputTokens:O.inputTokens,outputTokens:O.outputTokens,totalTokens:O.totalTokens}},onError:()=>{X=!0},onFinish:(O,D)=>{G=D,Q=Array.isArray(O.parts)?O.parts.filter((L)=>L!=null&&typeof L==="object"&&("type"in L)):[]}}});if(await sK4(F).catch(()=>{}),await U,J!==null)throw J;if(Z!==null)throw Z;return{failed:X&&G===void 0,finishReason:G,usage:Y,finalParts:Q}}var GK$=B(()=>{Rp0();$y()});var Np=786432;function ZN4($){if(/[.*>\s]/.test($))throw Error("Invalid NATS subject token")}function XO($){return ZN4($),`${tw0}.${$}`}function YK$($){let Z=`${$.runId}:${$.fenceToken}:${$.seq}`;return $.fragmentIndex===void 0?Z:`${Z}:frag:${$.fragmentIndex}`}function XN4($){return`${$.runId}:${$.fenceToken}:done:${$.finalSeq}`}function QK$($){if(!$)return null;let Z=Number($);return Number.isInteger(Z)&&Z>0?Z:null}function GN4($){if(!$)return null;let Z=Number($);return Number.isInteger(Z)&&Z>=0?Z:null}function YN4($){if(!$)return null;let Z=$.split(":"),[X,G,Y,Q,J]=Z;if(!X||!G||!Y)return null;if(Y==="done"){let K=QK$(Q);return Z.length===4&&K!==null?{kind:"done",runId:X,fenceToken:G,finalSeq:K}:null}if(Y==="ckpt")return null;let W=QK$(Y);if(W===null)return null;if(Z.length===3)return{kind:"chunk",runId:X,fenceToken:G,seq:W,fragmentIndex:null};if(Z.length===5&&Q==="frag"){let K=GN4(J);return K===null?null:{kind:"chunk",runId:X,fenceToken:G,seq:W,fragmentIndex:K}}return null}function vp0($,Z){let X=XO(Z.runId),G=_p0.encode(JSON.stringify({p:$}));if(G.length>$N4)return[];if(G.length<=Np)return[{subject:X,data:G,msgId:Z.dedup?YK$({runId:Z.runId,...Z.dedup}):void 0}];let Y=Math.ceil(G.length/Np),Q=[];for(let J=0;J<Y;J++)Q.push({subject:X,data:G.slice(J*Np,(J+1)*Np),headers:{[JK$]:String(J),[WK$]:String(Y)},msgId:Z.dedup?YK$({runId:Z.runId,...Z.dedup,fragmentIndex:J}):void 0});return Q}function KK$($){return{subject:XO($.runId),data:_p0.encode(JSON.stringify({done:!0,finalSeq:$.finalSeq})),msgId:XN4($)}}function NK$($){return{subject:XO($),data:_p0.encode(JSON.stringify({done:!0}))}}function QN4($){let Z=$.reduce((Y,Q)=>Y+(Q?.length??0),0),X=new Uint8Array(Z),G=0;for(let Y of $){if(!Y)continue;X.set(Y,G),G+=Y.length}return X}function ow0(){let $=null;return new TransformStream({transform(Z,X){let G=Z.headers?.get(WK$);if(!G){X.enqueue(Z);return}let Y=Number(G),Q=Number(Z.headers?.get(JK$)??"0");if(Q===0)$={total:Y,received:0,parts:Array(Y)};else if(!$||$.total!==Y)return;if(!$.parts[Q])$.received++;if($.parts[Q]=Z.data,$.received<$.total)return;let J=QN4($.parts);$=null,X.enqueue({subject:Z.subject,data:J,headers:Z.headers})}})}function JN4($){return typeof $==="number"&&Number.isInteger($)&&$>0}function KN4($){let Z=YN4($.headers?.get("Nats-Msg-Id")||void 0),X;try{X=JSON.parse(WN4.decode($.data))}catch{return null}if(!X||typeof X!=="object")return null;let G=X;if(G.done===!0)return{kind:"done",runId:Z?.kind==="done"?Z.runId:null,fenceToken:Z?.kind==="done"?Z.fenceToken:null,envelopeFinalSeq:JN4(G.finalSeq)?G.finalSeq:null,msgIdFinalSeq:Z?.kind==="done"?Z.finalSeq:null};if("p"in G)return{kind:"chunk",seq:Z?.kind==="chunk"?Z.seq:null,runId:Z?.kind==="chunk"?Z.runId:null,fenceToken:Z?.kind==="chunk"?Z.fenceToken:null,chunk:G.p};return null}function rw0(){return new TransformStream({transform($,Z){let X=KN4($);if(X)Z.enqueue(X)}})}var tw0="decopilot.stream",JK$="Dp-Frag-Idx",WK$="Dp-Frag-Total",$N4=33554432,_p0,WN4;var HK$=B(()=>{_p0=new TextEncoder;WN4=new TextDecoder});var aw0=B(()=>{HK$()});var wH="DECOPILOT_STREAMS";var bp0=B(()=>{aw0()});function FK$($,Z){return new TransformStream({transform(X,G){if(X.runId!==$||X.fenceToken!==Z)return;G.enqueue(X)}})}function UK$(){let $=1;return new TransformStream({transform(Z,X){if(Z.kind==="done"){X.enqueue(Z);return}if(Z.seq===null){X.error(Error("projector chunk missing seq"));return}if(Z.seq<$)return;if(Z.seq>$){X.error(new Hp($,Z.seq));return}$++,X.enqueue(Z)}})}function wK$($){let Z=$.getReader(),X=!1,G=0,Y=()=>{if(X)return;X=!0,Z.releaseLock()};return new ReadableStream({async pull(Q){for(;;){let{done:J,value:W}=await Z.read();if(J){await Z.cancel(),Y(),Q.error(Error("reader stopped before done"));return}let K=W;if(K.kind==="done"){if(!(K.envelopeFinalSeq!=null&&K.envelopeFinalSeq===K.msgIdFinalSeq))continue;if(K.envelopeFinalSeq!==G){await Z.cancel(),Y(),Q.error(new Hp(G+1,null));return}await Z.cancel(),Y(),Q.close();return}G=K.seq??G,Q.enqueue(K.chunk);return}},async cancel(Q){await Z.cancel(Q),Y()}})}function NN4($){if(Symbol.asyncIterator in $)return $[Symbol.asyncIterator]();let Z=$[Symbol.iterator]();return{next:async()=>Z.next(),return:async(X)=>Z.return?Z.return(X):{done:!0,value:X}}}function ew0($){let Z=NN4($.messages),X=$.idleTimeoutMs,G=!1,Y=(Q)=>{if(G)return;G=!0,Z.return?.(Q).catch(()=>{}),$.onCancel?.()};return new ReadableStream({async pull(Q){if(X===void 0){let{done:H,value:F}=await Z.next();if(H){Q.close();return}Q.enqueue(F);return}let J=new AbortController,W=Z.next().then((H)=>{return J.abort(),H}),K=a$(X,{signal:J.signal}).then(()=>"idle").catch(()=>"cancelled"),N=await Promise.race([W,K]);if(N==="idle"){Q.error(new sw0(X));return}if(N==="cancelled")return;if(N.done){Q.close();return}Q.enqueue(N.value)},async cancel(Q){Y(Q)}})}var sw0,Hp;var $O0=B(()=>{W5();sw0=class sw0 extends Error{idleTimeoutMs;constructor($){super("producer produced no output before timeout");this.idleTimeoutMs=$;this.name="StreamIdleTimeoutError"}};Hp=class Hp extends Error{expectedSeq;gotSeq;constructor($,Z){super(Z===null?`missing seq ${$} (stream ended at the fenced done)`:`missing seq ${$} (next delivered is ${Z})`);this.expectedSeq=$;this.gotSeq=Z;this.name="StreamGapError"}}});function HN4($){let X=ew0({messages:$.messages,idleTimeoutMs:$.idleTimeoutMs,onCancel:$.onDone}).pipeThrough(ow0()).pipeThrough(rw0()).pipeThrough(FK$($.runId,$.fenceToken)).pipeThrough(UK$());return wK$(X)}async function BK$($){let X=await(await $.js.consumers.get(wH,{filter_subjects:XO($.runId),deliver_policy:OK$.DeliverPolicy.All})).consume();async function*G(){try{for await(let Y of X)yield{subject:Y.subject,data:Y.data,headers:Y.headers}}finally{X.stop()}}return HN4({messages:G(),runId:$.runId,fenceToken:$.fenceToken,idleTimeoutMs:$.idleTimeoutMs,onDone:()=>X.stop()})}var OK$;var DK$=B(()=>{bp0();$O0();aw0();OK$=k(rO(),1)});async function FN4($){let X=($.requestMessageId?await $.messageParts.maxCreatedAtMsForMessage($.runId,$.requestMessageId):null)??await $.messageParts.maxCreatedAtMsForRun($.runId);return new o7({storage:$.messageParts,orgId:$.orgId,threadId:$.runId,runId:$.runId,baseTimeMs:(X??Date.now())+1})}async function LK$($){let Z=await FN4($),X=$.replaceFinal?(G)=>Z.replaceFinal(G):(G)=>Z.emitFinal(G);return{emitStepParts:(G)=>Z.emitStepParts(G),emitFinal:X,emitError:(G,Y)=>Z.emitError(G,Y)}}var EK$=B(()=>{ew()});function ZO0($,Z){UN4.add(1,{"org.id":Z??"unknown"})}var UN4;var zK$=B(()=>{K5();UN4=J8.createCounter("decopilot.projector.poison_runs",{description:"Number of decopilot runs that exhausted retries and were sent to the DLQ",unit:"{runs}"})});class fp0{intervalMs;lastBumpMs=new Map;constructor($=3000){this.intervalMs=$}shouldBump($,Z=Date.now()){let X=this.lastBumpMs.get($);if(X!==void 0&&Z-X<this.intervalMs)return!1;return this.lastBumpMs.set($,Z),!0}clear($){this.lastBumpMs.delete($)}}function jK$($,Z,X,G){return $.pipeThrough(new TransformStream({transform(Y,Q){if(X.shouldBump(Z))G();Q.enqueue(Y)},flush(){X.clear(Z)}}))}function wN4($){return`liveness: no stream events for ${Math.round($/60000)}m`}function yp0($){return $.runFenceToken!==null&&$.runFenceToken!==$.fenceToken}function AK$($){xp0=$}function TK$(){if(!xp0)throw Error("[projector-workflow] runtime not initialized \u2014 setProjectorWorkflowRuntime() must run before workflows fire");return xp0}function RK$(){return TK$()}async function IK$($,Z,X){let G=TK$(),Y=G.getJetStream();if(!Y)throw Error("JetStream unavailable");let Q=(await G.messageParts.loadWindow($.runId,{limit:500})).messages.map(dw0);return{chunkCount:0,attempts:1,outcome:await XK$({chunkStream:jK$(await BK$({js:Y,runId:$.runId,fenceToken:$.fenceToken,idleTimeoutMs:$.idleTimeoutMs}),$.runId,ON4,()=>{G.bumpProgress({runId:$.runId,orgId:Z}).catch(()=>{})}),persistence:await LK$({messageParts:G.messageParts,orgId:Z,runId:$.runId,requestMessageId:$.messageId,replaceFinal:!0}),originalMessages:Q,errorMessageId:ZO($.runId,$.fenceToken),title:{threadId:$.runId,currentThreadTitle:X,persistTitle:async(W,K)=>{await G.persistTitle($.runId,Z,K),await G.onTitleUpdated({runId:$.runId,orgId:Z,title:K})}}})}}async function PK$($,Z,X){let G=await $.resolveRun(Z).catch(()=>null);return G!==null&&G.runFenceToken===X&&["completed","failed","requires_action"].includes(G.status)}async function qK$($,Z,X){let G=await BN4($,Z);if("skip"in G)return;let Y=G.row.orgId,Q=G.row.createdBy??$.runId,J=G.row.title;try{let{outcome:W}=await X($,Y,J),K=W?.failed?"failed":nw0(W?.finishReason,W?.finalParts);if(K==="failed"){let N=W?.finishReason?`harness reported an error: ${W.finishReason}`:"harness reported an error";if(ZO0($.runId,Y),await Z.markRunFailed($.runId,Y,N,"harness"))await Z.recordFailed({runId:$.runId,orgId:Y,distinctId:Q,reason:N,kind:"harness"})}else if(K==="requires_action")await Z.markRunRequiresAction($.runId,Y),await Z.clearSynthesizedError($.runId,$.fenceToken);else{if(await Z.completeRunIfNotCompleted($.runId,Y))await Z.recordCompleted({runId:$.runId,orgId:Y,distinctId:Q,usage:W?.usage??{inputTokens:0,outputTokens:0,totalTokens:0}});await Z.clearSynthesizedError($.runId,$.fenceToken)}await Z.purgeRun($.runId,$.fenceToken)}catch(W){if(W instanceof Hp){if(await PK$(Z,$.runId,$.fenceToken)){await Z.clearSynthesizedError($.runId,$.fenceToken),await Z.purgeRun($.runId,$.fenceToken);return}let U=`stream truncated before projection could replay it: ${W.message}`;if(ZO0($.runId,Y),await Z.markRunFailed($.runId,Y,U,"projection"))await Z.recordFailed({runId:$.runId,orgId:Y,distinctId:Q,reason:U,kind:"projection"});await Z.purgeRun($.runId,$.fenceToken);return}let K=W instanceof sw0;if(K&&await PK$(Z,$.runId,$.fenceToken)){await Z.purgeRun($.runId,$.fenceToken);return}let N=K?wN4(W.idleTimeoutMs):W instanceof Error?W.message:String(W),H=K?"liveness":"projection";if(ZO0($.runId,Y),await Z.markRunFailed($.runId,Y,N,H))await Z.recordFailed({runId:$.runId,orgId:Y,distinctId:Q,reason:N,kind:H});if(K)await Z.clearSynthesizedError($.runId,$.fenceToken);throw W}}async function BN4($,Z){let X=await Z.resolveRun($.runId);if(!X)return{skip:"missing"};if(yp0({status:X.status,runFenceToken:X.runFenceToken,fenceToken:$.fenceToken}))return{skip:"stale",row:X};if(X.version!==2)return{skip:"legacy-v1",row:X};return{row:X}}var xp0=null,ON4;var gp0=B(()=>{GK$();DK$();$O0();EK$();zK$();kp0();ON4=new fp0});function MK$($,Z){switch($.type){case"START":{let X={type:"RUN_STARTED",taskId:$.taskId,orgId:$.orgId,userId:$.userId,abortController:$.abortController,runConfig:$.runConfig,podId:$.podId,messageId:$.messageId};if(Z?.status.tag==="running")return[{type:"PREVIOUS_RUN_ABORTED",taskId:$.taskId,orgId:Z.orgId},X];return[X]}case"STEP_DONE":{if(Z?.status.tag!=="running")return[];return[{type:"STEP_COMPLETED",taskId:$.taskId,orgId:Z.orgId,stepCount:Z.status.stepCount+1}]}case"FINISH":{if(Z==null||Z.status.tag!=="running")return[];let{stepCount:X}=Z.status;if($.threadStatus==="completed")return[{type:"RUN_COMPLETED",taskId:$.taskId,orgId:Z.orgId,stepCount:X}];if($.threadStatus==="requires_action")return[{type:"RUN_REQUIRES_ACTION",taskId:$.taskId,orgId:Z.orgId,stepCount:X}];return[{type:"RUN_FAILED",taskId:$.taskId,orgId:Z.orgId,reason:"error"}]}case"CANCEL":{if(Z?.status.tag!=="running")return[];return[{type:"RUN_FAILED",taskId:$.taskId,orgId:Z.orgId,reason:"cancelled"}]}case"RESUME":{if(Z?.status.tag==="running")return[];return[{type:"RUN_RESUMED",taskId:$.taskId,orgId:$.orgId,userId:$.userId,abortController:$.abortController,podId:$.podId}]}case"FORCE_FAIL":{if($.reason==="ghost")return[{type:"RUN_FAILED",taskId:$.taskId,orgId:Z?.orgId??$.orgId,reason:$.reason,expectedFenceToken:$.expectedFenceToken??null}];if(Z?.status.tag!=="running")return[];return[{type:"RUN_FAILED",taskId:$.taskId,orgId:Z.orgId,reason:$.reason}]}}}function kK$($,Z,X=new Date){switch(Z.type){case"RUN_STARTED":return{taskId:Z.taskId,orgId:Z.orgId,userId:Z.userId,status:{tag:"running",abortController:Z.abortController,stepCount:0,startedAt:X}};case"RUN_RESUMED":return{taskId:Z.taskId,orgId:Z.orgId,userId:Z.userId,status:{tag:"running",abortController:Z.abortController,stepCount:0,startedAt:X}};case"STEP_COMPLETED":if($?.status.tag!=="running")return $;return{...$,status:{...$.status,stepCount:Z.stepCount}};case"RUN_COMPLETED":return;case"RUN_REQUIRES_ACTION":return;case"RUN_FAILED":return;case"PREVIOUS_RUN_ABORTED":return}}async function SK$($,Z,X,G){let{storage:Y,sseHub:Q}=G,J=await Y.get($,Z);Q.emit(Z,r3($,X,{virtualMcpId:J?.virtual_mcp_id??void 0,createdBy:J?.created_by,triggerId:J?.trigger_id,title:J?.title,branch:J?.branch??null,harnessId:J?.harness_id??void 0,createdAt:J?.created_at,updatedAt:J?.updated_at})),Q.emit(Z,I00($,X))}async function LN4($,Z){let{storage:X,sseHub:G}=Z;switch($.type){case"RUN_STARTED":{await X.update($.taskId,$.orgId,{status:"in_progress",run_config:$.runConfig??null,run_started_at:new Date().toISOString(),last_progress_at:null,failure_reason:null,failure_kind:null});let Y=await X.get($.taskId,$.orgId);G.emit($.orgId,r3($.taskId,"in_progress",{virtualMcpId:Y?.virtual_mcp_id??void 0,createdBy:Y?.created_by,triggerId:Y?.trigger_id,title:Y?.title,branch:Y?.branch??null,harnessId:Y?.harness_id??void 0,createdAt:Y?.created_at,updatedAt:Y?.updated_at,messageId:$.messageId}));return}case"RUN_RESUMED":{await X.update($.taskId,$.orgId,{status:"in_progress",run_started_at:new Date().toISOString(),last_progress_at:null,failure_reason:null,failure_kind:null});let Y=await X.get($.taskId,$.orgId);G.emit($.orgId,r3($.taskId,"in_progress",{virtualMcpId:Y?.virtual_mcp_id??void 0,createdBy:Y?.created_by,triggerId:Y?.trigger_id,title:Y?.title,branch:Y?.branch??null,harnessId:Y?.harness_id??void 0,createdAt:Y?.created_at,updatedAt:Y?.updated_at}));return}case"STEP_COMPLETED":G.emit($.orgId,nV0($.taskId,$.stepCount));return;case"RUN_COMPLETED":await SK$($.taskId,$.orgId,"completed",Z);return;case"RUN_REQUIRES_ACTION":await SK$($.taskId,$.orgId,"requires_action",Z);return;case"RUN_FAILED":{if($.reason==="ghost"){if(!await X.forceFailIfInProgress($.taskId,$.orgId,$.expectedFenceToken))return;await X.update($.taskId,$.orgId,{run_config:null,run_started_at:null})}else{if(!await X.forceFailIfInProgress($.taskId,$.orgId))return;await X.update($.taskId,$.orgId,{run_config:null,run_started_at:null,...$.reason==="reaped"?{failure_reason:DN4,failure_kind:"stall"}:{}})}let Y=await X.get($.taskId,$.orgId);G.emit($.orgId,r3($.taskId,"failed",{virtualMcpId:Y?.virtual_mcp_id??void 0,createdBy:Y?.created_by,triggerId:Y?.trigger_id,title:Y?.title,branch:Y?.branch??null,harnessId:Y?.harness_id??void 0,createdAt:Y?.created_at,updatedAt:Y?.updated_at})),G.emit($.orgId,I00($.taskId,"failed"));return}case"PREVIOUS_RUN_ABORTED":return}}async function VK$($,Z){for(let{event:X}of $)await LN4(X,Z)}var DN4="Run stalled \u2014 no progress within the idle timeout window";var CK$=B(()=>{O8()});function _K$($){return $.now-$.lastProgressAt>$.idleTimeoutMs}function vK$($){return Math.max($.persistedLastProgressAt??Number.NEGATIVE_INFINITY,$.currentRunStartedAt)}class up0{deps;clock;states=new Map;reaperTimer=null;constructor($,Z=()=>new Date){this.deps=$;this.clock=Z;this.reaperTimer=setInterval(()=>{this.reapStaleRuns().catch((X)=>{console.error("[RunRegistry] Reaper sweep failed",X)})},EN4)}async execute($){let Z=this.dispatch($);return await this.react(Z),Z}dispatch($){let Z=this.states.get($.taskId),X=MK$($,Z),G=[];for(let Y of X){let Q=this.states.get(Y.taskId);if(Y.type==="PREVIOUS_RUN_ABORTED"||Y.type==="RUN_FAILED"){if(Q?.status.tag==="running")Q.status.abortController.abort()}let J=kK$(Q,Y,this.clock());if(J===void 0)this.states.delete(Y.taskId);else this.states.set(Y.taskId,J);if(G.push({event:Y,state:J}),zN4.has(Y.type))bK$().add(1,{"org.id":Y.orgId});else if(jN4.has(Y.type)&&Q?.status.tag==="running")bK$().add(-1,{"org.id":Y.orgId})}return G}react($){return VK$($,this.deps)}getAbortSignal($){let Z=this.states.get($);if(Z?.status.tag==="running")return Z.status.abortController.signal;return null}isRunning($){return this.states.get($)?.status.tag==="running"}async stopAll(){for(let[,$]of this.states)if($.status.tag==="running")$.status.abortController.abort();this.states.clear()}dispose(){if(this.reaperTimer)clearInterval(this.reaperTimer),this.reaperTimer=null}async reapStaleRuns(){let $=this.clock().getTime(),Z=[...this.states].filter(([,X])=>X.status.tag==="running");for(let[X,G]of Z){if(this.states.get(X)?.status.tag!=="running")continue;let Q;try{let W=await this.deps.storage.getProgress(X,G.orgId);Q=vK$({persistedLastProgressAt:W?.lastProgressAt??null,currentRunStartedAt:G.status.startedAt.getTime()})}catch(W){console.warn(`[RunRegistry] Reaper progress read failed for ${X}; skipping`,W);continue}if(!_K$({lastProgressAt:Q,now:$,idleTimeoutMs:XO0}))continue;let J=await this.deps.storage.get(X,G.orgId).catch(()=>null);if(J&&J.status!=="in_progress"){let W=this.states.get(X);if(W?.status.tag==="running")W.status.abortController.abort();this.states.delete(X);continue}console.warn(`[RunRegistry] Reaping stuck run for thread ${X} (idle > ${XO0/60000}m) ...`),PN4().add(1,{"org.id":G.orgId,reason:"idle_timeout"}),await this.execute({type:"FORCE_FAIL",taskId:X,reason:"reaped"}).catch((W)=>{console.error("[RunRegistry] Reaper execute failed",W)})}}}var EN4=300000,hp0,XO0,zN4,jN4,fK$=($)=>{let Z;return()=>Z??=$()},bK$,PN4;var cp0=B(()=>{CK$();K5();hp0=Number(process.env.RUN_IDLE_TIMEOUT_MS),XO0=Number.isFinite(hp0)&&hp0>0?hp0:600000,zN4=new Set(["RUN_STARTED","RUN_RESUMED"]),jN4=new Set(["RUN_COMPLETED","RUN_FAILED","RUN_REQUIRES_ACTION","PREVIOUS_RUN_ABORTED"]),bK$=fK$(()=>J8.createUpDownCounter("decopilot.stream.inflight",{description:"Number of in-flight decopilot stream requests",unit:"{requests}"})),PN4=fK$(()=>J8.createCounter("decopilot.run.reaped",{description:"Number of decopilot runs force-failed by the progress-based reaper",unit:"{runs}"}))});async function xK$($){let{runId:Z}=$,X=RK$(),G=await X.resolveRun(Z),Y=$.fenceToken??G?.runFenceToken;if(!G||G.version!==2||Y==null)return;if(yp0({status:G.status,runFenceToken:G.runFenceToken,fenceToken:Y}))return;if(!X.getJetStream())throw Error("JetStream unavailable for consume step");await qK$({runId:Z,fenceToken:Y,messageId:$.messageId,idleTimeoutMs:$.idleTimeoutMs??XO0},X,IK$)}var yK$=B(()=>{gp0();cp0()});var GO0,GO,gK$=()=>({active:GO.active,pending:GO.pending,max:GO0}),hK$=($)=>{if(GO.active>=GO0)console.log("[hostedHarness] run parked at concurrency cap",{active:GO.active,pending:GO.pending,max:GO0}),$?.();return GO.acquire()};var lp0=B(()=>{sn0();V$();K5();GO0=d0().decopilotMaxConcurrentHostedRuns,GO=an0(GO0);J8.createObservableGauge("hosted_runs.active",{description:"Hosted agent-loop runs executing on this pod",unit:"{runs}"}).addCallback(($)=>$.observe(GO.active));J8.createObservableGauge("hosted_runs.pending",{description:"Hosted agent-loop runs parked waiting for a slot on this pod",unit:"{runs}"}).addCallback(($)=>$.observe(GO.pending))});import{DBOS as CV}from"@dbos-inc/dbos-sdk";function ip0($){dp0=$}function cK$(){if(!dp0)throw Error("[hostedHarness] runtime not initialized \u2014 setHostedHarnessRuntime() must run before workflows fire");return dp0}async function AN4($,Z){let X=cK$(),{request:G}=$,Y=Z??await X.studioContextFactory(G.organizationId,G.userId);if(!Y)throw Error("user membership lost mid-dispatch");if(G.runMetadata)Y.metadata.runMetadata=G.runMetadata;let Q=new AbortController,J=!1,W=new Kp({emit:()=>uK$(X,$)}),K=await hK$(()=>{J=!0,uK$(X,$),W.arm()}).finally(()=>W.stop());try{if(J&&await TN4($))throw Error("run cancelled while queued for a free runner");if(tx(Y,"in_progress",$.threadId),!G.runMetadata?.taskBoardItemId)E3$(Y,$.threadId);await X.dispatchRunFn({...G,abortSignal:Q.signal},Y,X.deps)}finally{K()}}async function TN4($){try{return(await CV.getWorkflowStatus(np0($.runId,$.fenceToken)))?.status==="CANCELLED"}catch(Z){return console.error(`[hostedHarness] could not read child status for run=${$.runId} fence=${$.fenceToken}`,Z),!1}}function RN4($,Z,X,G=1){let Y=X instanceof Error?X.message:String(X);return{messageId:ZO($,Z),errorChunk:{type:"error",errorText:Y},seq:G,finalSeq:G}}function IN4($){if(!($ instanceof Error))return;let Z=$.lastAckSeq;return typeof Z==="number"?Z+1:void 0}async function qN4($,Z){let X=cK$(),{streamBuffer:G}=X.deps,{messageId:Y,errorChunk:Q,seq:J,finalSeq:W}=RN4($.runId,$.fenceToken,Z,IN4(Z));if(!G){console.error(`[hostedHarness] no streamBuffer configured; dropping terminal error for run=${$.runId} fence=${$.fenceToken} messageId=${Y}`);return}if(!await G.publishRawChunk($.runId,Q,{fenceToken:$.fenceToken,seq:J})){console.error(`[hostedHarness] failed to publish terminal error chunk for run=${$.runId} fence=${$.fenceToken} messageId=${Y}`);return}await G.publishDone($.runId,$.fenceToken,W)}async function MN4($){try{await CV.runStep(()=>AN4($),{name:"runHostedHarness",retriesAllowed:!1})}catch(Z){await CV.runStep(()=>qN4($,Z),{name:"publishHostedHarnessFailure",retriesAllowed:!0}).catch((X)=>{console.error(`[hostedHarness] could not publish terminal error for run=${$.runId} fence=${$.fenceToken}`,X)})}}function np0($,Z){return`decopilot-hosted:${$}:${Z}`}async function lK$($){return{workflowID:(await CV.startWorkflow(kN4,{workflowID:np0($.runId,$.fenceToken),queueName:IK,enqueueOptions:{queuePartitionKey:$.threadId}})($)).workflowID}}async function pp0($,Z){await CV.cancelWorkflow(np0($,Z))}var mp0=1,dp0=null,uK$=($,Z)=>w3($.deps.streamBuffer,Z.runId,"waiting-capacity"),kN4;var tp0=B(()=>{Sp0();$y();lp0();xX();kN4=CV.registerWorkflow(MN4,{name:"hostedHarnessWorkflow",maxRecoveryAttempts:1000})});import{DBOS as Gy}from"@dbos-inc/dbos-sdk";function ap0($){Cp0($)}function sp0($){op0=$}function SN4(){if(!op0)throw Error("[threadGate] runtime not initialized \u2014 setThreadGateRuntime() must run before workflows fire");return op0}function VN4($,Z=cw0){let X=$.runFenceToken;if(X)return{runFenceToken:X,claimedRequest:$,shouldPersistFence:!1};let G=Z();return{runFenceToken:G,claimedRequest:{...$,runFenceToken:G},shouldPersistFence:!0}}async function CN4($){let Z=SN4(),{request:X}=$,G=X.taskId??$.threadId;if(gW$({harnessId:X.harnessId}))await w3(Z.deps.streamBuffer,G,"starting-run");let Y=await Z.studioContextFactory(X.organizationId,X.userId);if(!Y)throw Error("user membership lost mid-dispatch");ap0(X.harnessId);let Q=X.taskId??$.threadId,{runFenceToken:J,claimedRequest:W,shouldPersistFence:K}=VN4(X);if(K)await Y.storage.threads.setRunFence(Q,J);return{runFenceToken:J,hostedEnqueue:{runId:G,fenceToken:J,threadId:$.threadId,request:W}}}async function _N4($){if($.source!=="user-message")return;let{request:Z}=$;x1.capture({distinctId:Z.userId,event:"chat_message_started",groups:{organization:Z.organizationId},properties:{organization_id:Z.organizationId,agent_id:Z.agent,mode:Z.mode,thread_id:Z.taskId??$.threadId,credential_id:Z.models.credentialId}})}async function vN4($,Z){if($.source!=="user-message")return;let{request:X}=$;x1.capture({distinctId:X.userId,event:"chat_message_failed",groups:{organization:X.organizationId},properties:{organization_id:X.organizationId,thread_id:X.taskId??$.threadId,agent_id:X.agent,model_id:X.models.thinking.id,mode:X.mode,error_category:"setup",error_message:Z}})}async function YO0($){ap0($.request.harnessId),await Gy.runStep(()=>_N4($),{name:"trackMessageStarted"});let Z;try{Z=await Gy.runStep(()=>CN4($),{name:"dispatchRunAndWait",retriesAllowed:!0}),await lK$(Z.hostedEnqueue)}catch(Y){let Q=Y instanceof Error?Y.message:String(Y);throw await Gy.runStep(()=>vN4($,Q),{name:"trackMessageFailed"}),Y}let X=$.request.taskId??$.threadId,G="messages"in $.request?void 0:$.request.messageId;return await Gy.runStep(()=>xK$({runId:X,fenceToken:Z.runFenceToken,messageId:G}),{name:"consumeRunProjection"}),{taskId:$.request.taskId??$.threadId}}async function bN4($){return YO0($)}async function UH($,Z){return ap0($.request.harnessId),{workflowID:(await Gy.startWorkflow(fN4,{queueName:oQ,enqueueOptions:{queuePartitionKey:$.threadId},workflowID:Z?.workflowID})($)).workflowID}}var rp0=1,op0=null,fN4;var dK$=B(()=>{pw0();D6();$y();yK$();tp0();fN4=Gy.registerWorkflow(bN4,{name:"threadGateWorkflow",maxRecoveryAttempts:1000})});var VV=B(()=>{dK$();tp0()});async function Fp($,Z,X){let G=Z.organizationId,Y=Z.assignedBy??Z.createdBy,Q=X.harnessId??"decopilot",J=await p7($,"smart"),W=dB(G),K=await $.storage.threads.create({organization_id:G,title:X.title,status:"in_progress",virtual_mcp_id:W,message_storage_version:2,harness_id:Q,sandbox_provider_kind:"agent-sandbox",created_by:Y}),N={...K.metadata??{},...ow(Q)?{read_only:!0}:{},...X.repo?{githubRepo:{url:X.repo.url,owner:X.repo.owner,name:X.repo.name,installationId:X.repo.installationId,connectionId:X.repo.connectionId}}:{}},H=X.repo?F3(K.id,X.repo.connectionId):ow(Q)?F3(K.id):null;await $.storage.threads.update(K.id,{metadata:N,...H?{branch:H}:{},updated_by:Y}),await $.storage.taskBoard.linkThread(Z.id,K.id,G);let F={id:crypto.randomUUID(),role:"user",parts:[{type:"text",text:X.prompt}]};return await new o7({storage:$.storage.threads.messageParts(),orgId:G,threadId:K.id,runId:K.id}).emitRequestMessage(F),await UH({threadId:K.id,source:"background-tool",request:{messages:[F],models:{credentialId:J.credentialId,thinking:{id:J.modelId,title:J.modelMeta.title}},agent:{id:W},temperature:X.temperature,toolApprovalLevel:"auto",mode:"default",organizationId:G,userId:Y,harnessId:Q,sandboxProviderKind:"agent-sandbox",...X.repo?{}:H?{branch:H}:{},taskId:K.id,runMetadata:sU0(Z)}}),{threadId:K.id}}var ep0=B(()=>{on();pw();VV();ew();O8();U3();Qw0()});function xN4($){let Z=new Map($.map((Q)=>[Q.id,Q])),X=new Map;for(let Q of cx($)){let J=mK$(Q.owner,Q.repo);X.set(J,[...X.get(J)??[],Q])}if(X.size!==1)return null;let G=[...X.values()][0],Y=G.find((Q)=>{let J=Z.get(Q.connectionId);return J?Yx(J):!1})??G[0];return{connectionId:Y.connectionId,owner:Y.owner,name:Y.repo,installationId:Y.installationId,url:`https://github.com/${Y.owner}/${Y.repo}`}}async function iK$($,Z){try{let{items:X}=await $.storage.connections.list(Z,{slug:"mcp-github"}),G=xN4(X);if(G)return{repo:G};let Y=new Map;for(let J of cx(X)){let W=mK$(J.owner,J.repo);if(!Y.has(W))Y.set(W,{connectionId:J.connectionId,repo:`${J.owner}/${J.repo}`})}let Q=Y;if(Q.size===0)return console.warn(`[task-board] claude-code skipped for org ${Z}: `+"no importable repos \u2014 running Decopilot"),null;return console.warn(`[task-board] claude-code for org ${Z}: ${Q.size} importable repos \u2014 the run picks one with TASK_ADD_REPO`),{choices:[...Q.values()]}}catch(X){return console.warn("[task-board] repo lookup for claude-code failed",X),null}}function nK$($,Z,X){let G=["You've been assigned this task. Complete it and finish with a pull request.","","You are running AUTONOMOUSLY \u2014 no human is watching, so drive this to "+"completion yourself. Make reasonable decisions and move on; do not stop to ask for confirmation.","",`Title: ${$.title}`];if($.description)G.push("","Description:",$.description);if(G.push("",Z?`The repository ${Z.owner}/${Z.name} is already cloned at your working directory, on its own branch. \`git\` and \`gh\` are authenticated.`:["Your working directory is EMPTY: this organization has several repositories, so nothing has been cloned yet. FIRST call `mcp__studio__TASK_ADD_REPO` with the connectionId of the repository this task is about. It clones that repository into your working directory and waits for the checkout, so once it returns the repository is there on its own branch and `git` and `gh` are authenticated. Do not read files, run `git`, or run `gh` before it returns; there is nothing there yet.","","Repositories in this organization:",...(X?.repoChoices??[]).map((Y)=>`- ${Y.repo} (connectionId: ${Y.connectionId})`),X?.repoChoices?.length?"Pick the one the task is about. If the task doesn't say and the names don't settle it, take the first.":"Call `mcp__studio__TASK_ADD_REPO` with no arguments to list them."].join(`
1546
+ `).trim();return{models:$.models,agent:$.agent,temperature:$.temperature,toolApprovalLevel:$.toolApprovalLevel,...$.toolAllowlist!==void 0?{toolAllowlist:$.toolAllowlist}:{},...$.maxAgentSteps!==void 0?{maxAgentSteps:$.maxAgentSteps}:{},...$.isSubagent!==void 0?{isSubagent:$.isSubagent}:{},...$.subtaskJobId!==void 0?{subtaskJobId:$.subtaskJobId}:{},...$.resumedFromBackground!==void 0?{resumedFromBackground:$.resumedFromBackground}:{},mode:$.mode,...$.windowSize!==void 0?{windowSize:$.windowSize}:{},...$.triggerId!==void 0?{triggerId:$.triggerId}:{},...$.runMetadata!==void 0?{runMetadata:$.runMetadata}:{},branch:Z.branch??$.branch??null,sandboxProviderKind:$.sandboxProviderKind,harnessId:$.harnessId,organizationId:$.organizationId,userId:$.userId,taskId:$.taskId,messageId:Z.messageId,...Z.runFenceToken!==void 0?{runFenceToken:Z.runFenceToken}:{},...$.isResume!==void 0?{isResume:$.isResume}:{},...X?{systemContext:X}:{}}}function pK4($,Z){let X=$.find((G)=>G.id===Z);if(!X)throw new tw("empty_request",`Persisted request message missing for messageId=${Z}`);if(X.role==="system")throw new tw("empty_request",`Persisted message ${Z} has role=system; expected non-system request message`);return X}function tK4($){let Z=$.models;return{"decopilot.agent.id":$.agent.id,"decopilot.model.id":Z.thinking.id,"decopilot.credential.id":Z.credentialId,"decopilot.organization.id":$.organizationId,"decopilot.user.id":$.userId,"decopilot.thread.id":$.taskId??""}}async function $K$($,Z,X){return X41("decopilot.dispatchRunAndWait",async(G)=>{let{taskId:Y,uiStream:Q,registrySignal:J}=await aK4($,Z,X,G),W=X.streamBuffer,K=W?await W.createTailStream(Y,$.abortSignal,{deliverPolicy:"new",closeOnDone:!0}):null;if(W&&K){let N=W.pump(Q,Y,J,$.organizationId);N.catch(()=>{});let H=K.getReader();try{while(!0){let{done:F}=await H.read();if(F)break}}finally{H.releaseLock()}await N}else{if(W)console.warn(JSON.stringify({msg:"decopilot-stream-diag",event:"producer-fallback-no-pump",taskId:Y,hasTail:!!K,note:"createTailStream returned null \u2014 draining producer stream directly; projector persistence depends on streamBuffer publish health"}));let N=Q.getReader();try{while(!0){let{done:H}=await N.read();if(H)break}}finally{N.releaseLock()}}return{taskId:Y}},tK4($))}async function oK4($,Z,X,G){let[Y,Q,J]=await Promise.all([$.storage.threads.list(G,{limit:9,agentId:X}).catch(()=>null),$.storage.interests.getForAgent(Z,X,G).catch(()=>null),$.storage.virtualMcps.list(Z).catch(()=>null)]),W={};if(Y&&Y.total>0)W.recentThreads={total:Y.total,threads:Y.threads.map((K)=>({id:K.id,title:K.title,updated_at:K.updated_at}))};if(Q&&Q.interests.length>0)W.interests=Q.interests.map((K)=>({title:K.title,summary:K.summary}));if(J)W.agents=J.map((K)=>({id:K.id,name:K.title,description:K.description,status:K.status}));return W}async function rK4({virtualMcp:$,agentId:Z,organizationId:X,ctx:G}){return $80({virtualMcp:$,agentId:Z,organizationId:X,ctx:G})}async function aK4($,Z,X,G){let{runRegistry:Y,streamBuffer:Q}=X;Cp0($.harnessId);let J=$.harnessId;if(!sW$($))$={...$,messages:$.messages.map((N)=>N.id?N:{...N,id:ld()})};let W=!1,K;try{let N=$.models;G.setAttribute("decopilot.harnessId",J),Z.sandboxPreference="agent-sandbox",G.setAttribute("decopilot.dispatchTarget.sandboxProviderKind","agent-sandbox");let H=mw0({harnessId:J,sandboxProviderKind:"agent-sandbox"}),F=pW$(N),U=await B3(Z.db,$.organizationId,Z.organization?.role??Z.auth.user?.role);if(!O3(U,F.thinking.credentialId,F.thinking.id))throw Error("Model not allowed for your role");F=iw0(U,F);let w=$.windowSize??UQ;if(!$.taskId)throw Error("dispatchRunAndWait: taskId is required");if(H)await w3(Q,$.taskId,Wp[0]);let O=await KQ$(Z,$.organizationId,Z.metadata?.runMetadata),D=(n)=>n?nK4(Z,$.organizationId,n.credentialId,n.id,O):Promise.resolve(void 0),[L,E,z,j,A,P,q,S,M]=await Promise.all([Z.storage.virtualMcps.findById($.agent.id,$.organizationId),D(F.thinking),D(F.fast),D(F.smart),D(F.image),D(F.webSearch),D(F.deepResearch),lw0(Z.storage.threads,{organization_id:$.organizationId,thread_id:$.taskId,userId:$.userId,defaultWindowSize:w}),oK4(Z,$.organizationId,$.agent.id,$.userId)]);if(H)await w3(Q,$.taskId,Wp[1]);let _=E?{thinking:E,...z?{fast:z}:{},...j?{smart:j}:{},...A?{image:A}:{},...P?{webSearch:P}:{},...q?{deepResearch:q}:{}}:void 0,l=E?$w0(E):null;if(K=S.thread.id,Z.metadata.threadId=S.thread.id,G.setAttribute("decopilot.thread.id",S.thread.id),S.thread.created_by!==$.userId)throw Error("You are not allowed to write to this thread because you are not the owner");if(l?.asyncResearch){let n=[["thinking",F.thinking.id]];if(F.fast)n.push(["fast",F.fast.id]);if(F.smart)n.push(["smart",F.smart.id]);if(F.image)n.push(["image",F.image.id]);for(let[$0,p0]of n)if(l.asyncResearch.canHandle(p0))throw Error(`Model "${p0}" can only be used as a Deep Research model. It is not usable as the ${$0} model \u2014 set it in the Deep Research slot instead.`)}let x=S.thread.message_storage_version===2?new o7({storage:Z.storage.threads.messageParts(),orgId:$.organizationId,threadId:S.thread.id,runId:S.thread.id}):null;if(!L)throw new tw("agent_not_found","Agent not found");let p=await rK4({virtualMcp:L,agentId:$.agent.id,organizationId:$.organizationId,ctx:Z});if($.isResume)await Y.execute({type:"RESUME",taskId:S.thread.id,orgId:$.organizationId,userId:$.userId,abortController:new AbortController,podId:Vp0()});else await Y.execute({type:"START",taskId:S.thread.id,orgId:$.organizationId,userId:$.userId,abortController:new AbortController,podId:Vp0(),runConfig:{models:$.models,agent:$.agent,temperature:$.temperature,toolApprovalLevel:$.toolApprovalLevel,mode:$.mode,windowSize:$.windowSize,triggerId:$.triggerId},messageId:$.messageId});W=!0,await Z.storage.threads.clearCancelRequested(S.thread.id);let d;if($.runFenceToken)d=$.runFenceToken;else d=cw0(),await Z.storage.threads.setRunFence(S.thread.id,d);let W0=Y.getAbortSignal(S.thread.id);if(!W0)throw await Y.execute({type:"FINISH",taskId:S.thread.id,threadStatus:"failed"}),Error("Run was cancelled immediately after starting");if($.abortSignal){let n=$.abortSignal;if(n.aborted)await Y.execute({type:"CANCEL",taskId:S.thread.id});else n.addEventListener("abort",()=>{Y.execute({type:"CANCEL",taskId:S.thread.id}).catch(()=>{})},{once:!0})}if(!$.isResume)Q?.purge(S.thread.id);let B0=[],P0,a;if(sW$($)){if(a=await S.loadHistory(w),P0=pK4(a,$.messageId),$.systemContext)B0=[{id:`system-${$.messageId}`,role:"system",parts:[{type:"text",text:$.systemContext}]}]}else{B0=$.messages.filter(($0)=>$0.role==="system");let n=$.messages.find(($0)=>$0.role!=="system");if(P0=n?(await Bw0([n],Z,{threadId:S.thread.id})).find(($0)=>$0.role!=="system"):void 0,!$.isResume){if(!P0)throw new tw("empty_request","No user message found in input \u2014 expected at least one non-system message");if(x)await x.emitUserMessage(P0).catch(($0)=>{console.error("[decopilot:stream] v2 user-message emit failed",$0)})}}if(P0)await cW$(Q,S.thread.id,P0);let t=[],A0=Z.organization,G0=Date.now(),L0=P0?(await Dw0([P0],Z))[0]:void 0;if(!L0||!P0)throw new tw("empty_request","No user message found in input \u2014 expected at least one non-system message");xW$($.models,[L0]);let y0=await bW$({ctx:Z,threadId:S.thread.id,userMessage:P0,windowSize:w,isSubagent:$.isSubagent===!0,systemMessages:B0}),u0={url:"",headers:{},expiresAt:0},Z0=void 0,O0=void 0,z0={cwd:null},q0=typeof p.metadata?.instructions==="string"?p.metadata.instructions:void 0,r={taskId:$.taskId,isSubagent:$.isSubagent,subtaskJobId:$.subtaskJobId,resumedFromBackground:$.resumedFromBackground,virtualMcp:p,branch:$.branch,messages:y0,modelSources:_,mcpSource:Z0,objectStorageSource:O0,userContext:M},X0={harnessId:J,threadId:S.thread.id,userMessage:L0,harness:{sessionId:void 0},workspace:z0,models:F,mcp:u0,mode:$.mode,temperature:$.temperature,toolApprovalLevel:$.toolApprovalLevel,toolAllowlist:$.toolAllowlist??null,maxAgentSteps:$.maxAgentSteps,user:{id:$.userId,email:Z.auth.user?.email??""},organizationId:$.organizationId,organizationSlug:A0.slug,agent:{id:$.agent.id,instructions:q0},triggerId:$.triggerId,currentThreadTitle:S.thread.title,runFenceToken:d};if(H)await w3(Q,$.taskId,Wp[2]);let I0=ow(J),J0=I0?await Z.storage.threads.getAckedSeq(S.thread.id):0;if(J0>0)console.log("[dispatch] resuming a sandbox-hosted turn",{runId:S.thread.id,fromSeq:J0});let U0=I0?await Z.storage.claudeSubscriptions.findLiveToken($.userId).catch((n)=>{return console.warn("[dispatch] claude subscription lookup failed",n),null}):null,E1=async function*(){let n={...X0,signal:W0};if(qn0(n,r),H)await w3(Q,S.thread.id,Wp[3]);yield*(I0?new vn0({ctx:Z,harnessId:J,virtualMcpId:p.id,...J0>0?{resume:{reason:"the Studio process driving the previous attempt stopped"}}:{},branch:await EY$(Z,{threadId:S.thread.id,agentRepo:p.metadata?.githubRepo,runBranch:$.branch}),credential:U0?{providerId:pQ$,apiKey:U0}:E?{providerId:E.providerId,apiKey:E.apiKey,...E.baseUrl?{baseUrl:E.baseUrl}:{}}:null}):new Vn0({ctx:Z,harnessId:J})).dispatch(n)},n0=mK4(()=>iK4({runId:S.thread.id,fenceToken:d,streamBuffer:Q??{publishRawChunk:async()=>!1,publishDone:async()=>!1},chunks:dW$(E1()),...I0?{startSeq:J0,initialAckSeq:J0,onPublished:(n)=>Z.storage.threads.bumpAckedSeq(S.thread.id,d,n)}:{},errorMessageId:ZO(S.thread.id,d),loadOriginalMessages:x?async()=>(await Z.storage.threads.messageParts().loadWindow(S.thread.id,{limit:1})).messages.map(dw0):void 0,title:{currentThreadTitle:S.thread.title,threadId:S.thread.id,persistTitle:async(n,$0)=>{await Z.storage.threads.update(n,{title:$0})}},hooks:{onStep:()=>{let n=Y.dispatch({type:"STEP_DONE",taskId:S.thread.id});t.push(Y.react(n).catch(($0)=>{console.error("[decopilot:stream] onStepFinish reactor failed",$0)}))},onFinish:async(n,$0)=>{let p0=t.length,Q1=performance.now();if(await Promise.allSettled(t),oW$.record(performance.now()-Q1,{phase:"settle"}),W0.aborted)return;await a$(0);let s1=rW$?yO():null,f0=performance.now(),d1=nw0($0,n?.parts);await Y.execute({type:"FINISH",taskId:S.thread.id,threadStatus:d1});let E8=performance.now()-f0;if(oW$.record(E8,{phase:"save"}),rW$&&s1){let l4=yO()??s1,h6=-1;try{h6=JSON.stringify(n)?.length??-1}catch{}console.warn(JSON.stringify({msg:"decopilot-finish-trace",threadId:S.thread.id,pendingOps:p0,saveMs:Math.round(E8),parts:n?.parts?.length??0,messageBytes:h6,rssDelta:l4.rss-s1.rss,heapUsedDelta:l4.heapUsed-s1.heapUsed,externalDelta:l4.external-s1.external}))}},onError:(n)=>{if(W0.aborted){x1.capture({distinctId:$.userId,event:"chat_message_aborted",groups:{organization:$.organizationId},properties:{organization_id:$.organizationId,thread_id:S.thread.id,agent_id:$.agent.id,model_id:F.thinking.id,mode:$.mode,duration_ms:Date.now()-G0,is_resume:$.isResume??!1}});return}console.error("[decopilot] stream error:",HH(n)),Y.execute({type:"FINISH",taskId:S.thread.id,threadStatus:"failed"}).catch(($0)=>{console.error("[decopilot:stream] onError reactor failed",$0)})}}}));return{taskId:S.thread.id,uiStream:n0,registrySignal:W0}}catch(N){if(W&&K)Y.execute({type:"FINISH",taskId:K,threadStatus:"failed"}).catch((H)=>{console.error("[decopilot:stream] catch-block reactor failed",H)});throw N}}var oW$,rW$,aW$;var pw0=B(()=>{on();Bn0();D6();nQ$();_n0();Qw0();U3();Kb();_W$();ix();Dn0();cU();fW$();ew();kp0();px();yW$();$y();Ip0();mW$();Zy();K5();tW$();W5();oW$=J8.createHistogram("decopilot.finish.duration",{description:"Wall time of onFinish flush segments, tagged by phase",unit:"ms"}),rW$=process.env.DECOPILOT_FINISH_TRACE==="1";aW$=["decopilot","claude-code"]});function ZK$($){return hW$($)||uW$($)}async function sK4($){let Z=$.getReader();try{while(!0){let{done:X}=await Z.read();if(X)break}}finally{Z.releaseLock()}}function eK4($,Z){let X=$.getReader(),G=!1,Y=()=>{if(G)return;G=!0,X.releaseLock()};return new ReadableStream({async pull(Q){try{let{done:J,value:W}=await X.read();if(J)Y(),Q.close();else Q.enqueue(W)}catch(J){Z(J),Y(),Q.error(J)}},async cancel(Q){await X.cancel(Q),Y()}})}async function XK$($){if(!$.chunks&&!$.chunkStream)throw Error("projectChunks requires chunks or chunkStream");let Z=null,X=!1,G=void 0,Y={inputTokens:0,outputTokens:0,totalTokens:0},Q=[],J=null,W=(O)=>{if(J===null)J=O;throw O},K=$.chunks?async function*(){try{for await(let O of $.chunks){if(ZK$(O))continue;yield O}}catch(O){throw Z=O,O}}():void 0,N=$.chunkStream?eK4($.chunkStream,(O)=>{Z=O}).pipeThrough(new TransformStream({transform(O,D){if(!ZK$(O))D.enqueue(O)}})):void 0,H={emitStepParts:(O)=>$.persistence.emitStepParts(O).catch(W),emitFinal:(O)=>$.persistence.emitFinal(O).catch(W),emitError:(O,D)=>$.persistence.emitError(O,D).catch(W)},{uiStream:F,whenComplete:U}=bw0({chunks:K,chunkStream:N,originalMessages:$.originalMessages??[],title:$.title?{currentThreadTitle:$.title.currentThreadTitle,threadId:$.title.threadId,persistTitle:$.title.persistTitle}:{currentThreadTitle:void 0,threadId:"projector",persistTitle:async()=>{}},persistence:H,sanitizeErrorText:$.sanitizeErrorText,errorMessageId:$.errorMessageId,generateMessageId:$.generateMessageId,hooks:{onUsage:(O)=>{Y={inputTokens:O.inputTokens,outputTokens:O.outputTokens,totalTokens:O.totalTokens}},onError:()=>{X=!0},onFinish:(O,D)=>{G=D,Q=Array.isArray(O.parts)?O.parts.filter((L)=>L!=null&&typeof L==="object"&&("type"in L)):[]}}});if(await sK4(F).catch(()=>{}),await U,J!==null)throw J;if(Z!==null)throw Z;return{failed:X&&G===void 0,finishReason:G,usage:Y,finalParts:Q}}var GK$=B(()=>{Rp0();$y()});var Np=786432;function ZN4($){if(/[.*>\s]/.test($))throw Error("Invalid NATS subject token")}function XO($){return ZN4($),`${tw0}.${$}`}function YK$($){let Z=`${$.runId}:${$.fenceToken}:${$.seq}`;return $.fragmentIndex===void 0?Z:`${Z}:frag:${$.fragmentIndex}`}function XN4($){return`${$.runId}:${$.fenceToken}:done:${$.finalSeq}`}function QK$($){if(!$)return null;let Z=Number($);return Number.isInteger(Z)&&Z>0?Z:null}function GN4($){if(!$)return null;let Z=Number($);return Number.isInteger(Z)&&Z>=0?Z:null}function YN4($){if(!$)return null;let Z=$.split(":"),[X,G,Y,Q,J]=Z;if(!X||!G||!Y)return null;if(Y==="done"){let K=QK$(Q);return Z.length===4&&K!==null?{kind:"done",runId:X,fenceToken:G,finalSeq:K}:null}if(Y==="ckpt")return null;let W=QK$(Y);if(W===null)return null;if(Z.length===3)return{kind:"chunk",runId:X,fenceToken:G,seq:W,fragmentIndex:null};if(Z.length===5&&Q==="frag"){let K=GN4(J);return K===null?null:{kind:"chunk",runId:X,fenceToken:G,seq:W,fragmentIndex:K}}return null}function vp0($,Z){let X=XO(Z.runId),G=_p0.encode(JSON.stringify({p:$}));if(G.length>$N4)return[];if(G.length<=Np)return[{subject:X,data:G,msgId:Z.dedup?YK$({runId:Z.runId,...Z.dedup}):void 0}];let Y=Math.ceil(G.length/Np),Q=[];for(let J=0;J<Y;J++)Q.push({subject:X,data:G.slice(J*Np,(J+1)*Np),headers:{[JK$]:String(J),[WK$]:String(Y)},msgId:Z.dedup?YK$({runId:Z.runId,...Z.dedup,fragmentIndex:J}):void 0});return Q}function KK$($){return{subject:XO($.runId),data:_p0.encode(JSON.stringify({done:!0,finalSeq:$.finalSeq})),msgId:XN4($)}}function NK$($){return{subject:XO($),data:_p0.encode(JSON.stringify({done:!0}))}}function QN4($){let Z=$.reduce((Y,Q)=>Y+(Q?.length??0),0),X=new Uint8Array(Z),G=0;for(let Y of $){if(!Y)continue;X.set(Y,G),G+=Y.length}return X}function ow0(){let $=null;return new TransformStream({transform(Z,X){let G=Z.headers?.get(WK$);if(!G){X.enqueue(Z);return}let Y=Number(G),Q=Number(Z.headers?.get(JK$)??"0");if(Q===0)$={total:Y,received:0,parts:Array(Y)};else if(!$||$.total!==Y)return;if(!$.parts[Q])$.received++;if($.parts[Q]=Z.data,$.received<$.total)return;let J=QN4($.parts);$=null,X.enqueue({subject:Z.subject,data:J,headers:Z.headers})}})}function JN4($){return typeof $==="number"&&Number.isInteger($)&&$>0}function KN4($){let Z=YN4($.headers?.get("Nats-Msg-Id")||void 0),X;try{X=JSON.parse(WN4.decode($.data))}catch{return null}if(!X||typeof X!=="object")return null;let G=X;if(G.done===!0)return{kind:"done",runId:Z?.kind==="done"?Z.runId:null,fenceToken:Z?.kind==="done"?Z.fenceToken:null,envelopeFinalSeq:JN4(G.finalSeq)?G.finalSeq:null,msgIdFinalSeq:Z?.kind==="done"?Z.finalSeq:null};if("p"in G)return{kind:"chunk",seq:Z?.kind==="chunk"?Z.seq:null,runId:Z?.kind==="chunk"?Z.runId:null,fenceToken:Z?.kind==="chunk"?Z.fenceToken:null,chunk:G.p};return null}function rw0(){return new TransformStream({transform($,Z){let X=KN4($);if(X)Z.enqueue(X)}})}var tw0="decopilot.stream",JK$="Dp-Frag-Idx",WK$="Dp-Frag-Total",$N4=33554432,_p0,WN4;var HK$=B(()=>{_p0=new TextEncoder;WN4=new TextDecoder});var aw0=B(()=>{HK$()});var wH="DECOPILOT_STREAMS";var bp0=B(()=>{aw0()});function FK$($,Z){return new TransformStream({transform(X,G){if(X.runId!==$||X.fenceToken!==Z)return;G.enqueue(X)}})}function UK$(){let $=1;return new TransformStream({transform(Z,X){if(Z.kind==="done"){X.enqueue(Z);return}if(Z.seq===null){X.error(Error("projector chunk missing seq"));return}if(Z.seq<$)return;if(Z.seq>$){X.error(new Hp($,Z.seq));return}$++,X.enqueue(Z)}})}function wK$($){let Z=$.getReader(),X=!1,G=0,Y=()=>{if(X)return;X=!0,Z.releaseLock()};return new ReadableStream({async pull(Q){for(;;){let{done:J,value:W}=await Z.read();if(J){await Z.cancel(),Y(),Q.error(Error("reader stopped before done"));return}let K=W;if(K.kind==="done"){if(!(K.envelopeFinalSeq!=null&&K.envelopeFinalSeq===K.msgIdFinalSeq))continue;if(K.envelopeFinalSeq!==G){await Z.cancel(),Y(),Q.error(new Hp(G+1,null));return}await Z.cancel(),Y(),Q.close();return}G=K.seq??G,Q.enqueue(K.chunk);return}},async cancel(Q){await Z.cancel(Q),Y()}})}function NN4($){if(Symbol.asyncIterator in $)return $[Symbol.asyncIterator]();let Z=$[Symbol.iterator]();return{next:async()=>Z.next(),return:async(X)=>Z.return?Z.return(X):{done:!0,value:X}}}function ew0($){let Z=NN4($.messages),X=$.idleTimeoutMs,G=!1,Y=(Q)=>{if(G)return;G=!0,Z.return?.(Q).catch(()=>{}),$.onCancel?.()};return new ReadableStream({async pull(Q){if(X===void 0){let{done:H,value:F}=await Z.next();if(H){Q.close();return}Q.enqueue(F);return}let J=new AbortController,W=Z.next().then((H)=>{return J.abort(),H}),K=a$(X,{signal:J.signal}).then(()=>"idle").catch(()=>"cancelled"),N=await Promise.race([W,K]);if(N==="idle"){Q.error(new sw0(X));return}if(N==="cancelled")return;if(N.done){Q.close();return}Q.enqueue(N.value)},async cancel(Q){Y(Q)}})}var sw0,Hp;var $O0=B(()=>{W5();sw0=class sw0 extends Error{idleTimeoutMs;constructor($){super("producer produced no output before timeout");this.idleTimeoutMs=$;this.name="StreamIdleTimeoutError"}};Hp=class Hp extends Error{expectedSeq;gotSeq;constructor($,Z){super(Z===null?`missing seq ${$} (stream ended at the fenced done)`:`missing seq ${$} (next delivered is ${Z})`);this.expectedSeq=$;this.gotSeq=Z;this.name="StreamGapError"}}});function HN4($){let X=ew0({messages:$.messages,idleTimeoutMs:$.idleTimeoutMs,onCancel:$.onDone}).pipeThrough(ow0()).pipeThrough(rw0()).pipeThrough(FK$($.runId,$.fenceToken)).pipeThrough(UK$());return wK$(X)}async function BK$($){let X=await(await $.js.consumers.get(wH,{filter_subjects:XO($.runId),deliver_policy:OK$.DeliverPolicy.All})).consume();async function*G(){try{for await(let Y of X)yield{subject:Y.subject,data:Y.data,headers:Y.headers}}finally{X.stop()}}return HN4({messages:G(),runId:$.runId,fenceToken:$.fenceToken,idleTimeoutMs:$.idleTimeoutMs,onDone:()=>X.stop()})}var OK$;var DK$=B(()=>{bp0();$O0();aw0();OK$=k(rO(),1)});async function FN4($){let X=($.requestMessageId?await $.messageParts.maxCreatedAtMsForMessage($.runId,$.requestMessageId):null)??await $.messageParts.maxCreatedAtMsForRun($.runId);return new o7({storage:$.messageParts,orgId:$.orgId,threadId:$.runId,runId:$.runId,baseTimeMs:(X??Date.now())+1})}async function LK$($){let Z=await FN4($),X=$.replaceFinal?(G)=>Z.replaceFinal(G):(G)=>Z.emitFinal(G);return{emitStepParts:(G)=>Z.emitStepParts(G),emitFinal:X,emitError:(G,Y)=>Z.emitError(G,Y)}}var EK$=B(()=>{ew()});function ZO0($,Z){UN4.add(1,{"org.id":Z??"unknown"})}var UN4;var zK$=B(()=>{K5();UN4=J8.createCounter("decopilot.projector.poison_runs",{description:"Number of decopilot runs that exhausted retries and were sent to the DLQ",unit:"{runs}"})});class fp0{intervalMs;lastBumpMs=new Map;constructor($=3000){this.intervalMs=$}shouldBump($,Z=Date.now()){let X=this.lastBumpMs.get($);if(X!==void 0&&Z-X<this.intervalMs)return!1;return this.lastBumpMs.set($,Z),!0}clear($){this.lastBumpMs.delete($)}}function jK$($,Z,X,G){return $.pipeThrough(new TransformStream({transform(Y,Q){if(X.shouldBump(Z))G();Q.enqueue(Y)},flush(){X.clear(Z)}}))}function wN4($){return`liveness: no stream events for ${Math.round($/60000)}m`}function yp0($){return $.runFenceToken!==null&&$.runFenceToken!==$.fenceToken}function AK$($){xp0=$}function TK$(){if(!xp0)throw Error("[projector-workflow] runtime not initialized \u2014 setProjectorWorkflowRuntime() must run before workflows fire");return xp0}function RK$(){return TK$()}async function IK$($,Z,X){let G=TK$(),Y=G.getJetStream();if(!Y)throw Error("JetStream unavailable");let Q=(await G.messageParts.loadWindow($.runId,{limit:500})).messages.map(dw0);return{chunkCount:0,attempts:1,outcome:await XK$({chunkStream:jK$(await BK$({js:Y,runId:$.runId,fenceToken:$.fenceToken,idleTimeoutMs:$.idleTimeoutMs}),$.runId,ON4,()=>{G.bumpProgress({runId:$.runId,orgId:Z}).catch(()=>{})}),persistence:await LK$({messageParts:G.messageParts,orgId:Z,runId:$.runId,requestMessageId:$.messageId,replaceFinal:!0}),originalMessages:Q,errorMessageId:ZO($.runId,$.fenceToken),title:{threadId:$.runId,currentThreadTitle:X,persistTitle:async(W,K)=>{await G.persistTitle($.runId,Z,K),await G.onTitleUpdated({runId:$.runId,orgId:Z,title:K})}}})}}async function PK$($,Z,X){let G=await $.resolveRun(Z).catch(()=>null);return G!==null&&G.runFenceToken===X&&["completed","failed","requires_action"].includes(G.status)}async function qK$($,Z,X){let G=await BN4($,Z);if("skip"in G)return;let Y=G.row.orgId,Q=G.row.createdBy??$.runId,J=G.row.title;try{let{outcome:W}=await X($,Y,J),K=W?.failed?"failed":nw0(W?.finishReason,W?.finalParts);if(K==="failed"){let N=W?.finishReason?`harness reported an error: ${W.finishReason}`:"harness reported an error";if(ZO0($.runId,Y),await Z.markRunFailed($.runId,Y,N,"harness"))await Z.recordFailed({runId:$.runId,orgId:Y,distinctId:Q,reason:N,kind:"harness"})}else if(K==="requires_action")await Z.markRunRequiresAction($.runId,Y),await Z.clearSynthesizedError($.runId,$.fenceToken);else{if(await Z.completeRunIfNotCompleted($.runId,Y))await Z.recordCompleted({runId:$.runId,orgId:Y,distinctId:Q,usage:W?.usage??{inputTokens:0,outputTokens:0,totalTokens:0}});await Z.clearSynthesizedError($.runId,$.fenceToken)}await Z.purgeRun($.runId,$.fenceToken)}catch(W){if(W instanceof Hp){if(await PK$(Z,$.runId,$.fenceToken)){await Z.clearSynthesizedError($.runId,$.fenceToken),await Z.purgeRun($.runId,$.fenceToken);return}let U=`stream truncated before projection could replay it: ${W.message}`;if(ZO0($.runId,Y),await Z.markRunFailed($.runId,Y,U,"projection"))await Z.recordFailed({runId:$.runId,orgId:Y,distinctId:Q,reason:U,kind:"projection"});await Z.purgeRun($.runId,$.fenceToken);return}let K=W instanceof sw0;if(K&&await PK$(Z,$.runId,$.fenceToken)){await Z.purgeRun($.runId,$.fenceToken);return}let N=K?wN4(W.idleTimeoutMs):W instanceof Error?W.message:String(W),H=K?"liveness":"projection";if(ZO0($.runId,Y),await Z.markRunFailed($.runId,Y,N,H))await Z.recordFailed({runId:$.runId,orgId:Y,distinctId:Q,reason:N,kind:H});if(K)await Z.clearSynthesizedError($.runId,$.fenceToken);throw W}}async function BN4($,Z){let X=await Z.resolveRun($.runId);if(!X)return{skip:"missing"};if(yp0({status:X.status,runFenceToken:X.runFenceToken,fenceToken:$.fenceToken}))return{skip:"stale",row:X};if(X.version!==2)return{skip:"legacy-v1",row:X};return{row:X}}var xp0=null,ON4;var gp0=B(()=>{GK$();DK$();$O0();EK$();zK$();kp0();ON4=new fp0});function MK$($,Z){switch($.type){case"START":{let X={type:"RUN_STARTED",taskId:$.taskId,orgId:$.orgId,userId:$.userId,abortController:$.abortController,runConfig:$.runConfig,podId:$.podId,messageId:$.messageId};if(Z?.status.tag==="running")return[{type:"PREVIOUS_RUN_ABORTED",taskId:$.taskId,orgId:Z.orgId},X];return[X]}case"STEP_DONE":{if(Z?.status.tag!=="running")return[];return[{type:"STEP_COMPLETED",taskId:$.taskId,orgId:Z.orgId,stepCount:Z.status.stepCount+1}]}case"FINISH":{if(Z==null||Z.status.tag!=="running")return[];let{stepCount:X}=Z.status;if($.threadStatus==="completed")return[{type:"RUN_COMPLETED",taskId:$.taskId,orgId:Z.orgId,stepCount:X}];if($.threadStatus==="requires_action")return[{type:"RUN_REQUIRES_ACTION",taskId:$.taskId,orgId:Z.orgId,stepCount:X}];return[{type:"RUN_FAILED",taskId:$.taskId,orgId:Z.orgId,reason:"error"}]}case"CANCEL":{if(Z?.status.tag!=="running")return[];return[{type:"RUN_FAILED",taskId:$.taskId,orgId:Z.orgId,reason:"cancelled"}]}case"RESUME":{if(Z?.status.tag==="running")return[];return[{type:"RUN_RESUMED",taskId:$.taskId,orgId:$.orgId,userId:$.userId,abortController:$.abortController,podId:$.podId}]}case"FORCE_FAIL":{if($.reason==="ghost")return[{type:"RUN_FAILED",taskId:$.taskId,orgId:Z?.orgId??$.orgId,reason:$.reason,expectedFenceToken:$.expectedFenceToken??null}];if(Z?.status.tag!=="running")return[];return[{type:"RUN_FAILED",taskId:$.taskId,orgId:Z.orgId,reason:$.reason}]}}}function kK$($,Z,X=new Date){switch(Z.type){case"RUN_STARTED":return{taskId:Z.taskId,orgId:Z.orgId,userId:Z.userId,status:{tag:"running",abortController:Z.abortController,stepCount:0,startedAt:X}};case"RUN_RESUMED":return{taskId:Z.taskId,orgId:Z.orgId,userId:Z.userId,status:{tag:"running",abortController:Z.abortController,stepCount:0,startedAt:X}};case"STEP_COMPLETED":if($?.status.tag!=="running")return $;return{...$,status:{...$.status,stepCount:Z.stepCount}};case"RUN_COMPLETED":return;case"RUN_REQUIRES_ACTION":return;case"RUN_FAILED":return;case"PREVIOUS_RUN_ABORTED":return}}async function SK$($,Z,X,G){let{storage:Y,sseHub:Q}=G,J=await Y.get($,Z);Q.emit(Z,r3($,X,{virtualMcpId:J?.virtual_mcp_id??void 0,createdBy:J?.created_by,triggerId:J?.trigger_id,title:J?.title,branch:J?.branch??null,harnessId:J?.harness_id??void 0,createdAt:J?.created_at,updatedAt:J?.updated_at})),Q.emit(Z,I00($,X))}async function LN4($,Z){let{storage:X,sseHub:G}=Z;switch($.type){case"RUN_STARTED":{await X.update($.taskId,$.orgId,{status:"in_progress",run_config:$.runConfig??null,run_started_at:new Date().toISOString(),last_progress_at:null,failure_reason:null,failure_kind:null});let Y=await X.get($.taskId,$.orgId);G.emit($.orgId,r3($.taskId,"in_progress",{virtualMcpId:Y?.virtual_mcp_id??void 0,createdBy:Y?.created_by,triggerId:Y?.trigger_id,title:Y?.title,branch:Y?.branch??null,harnessId:Y?.harness_id??void 0,createdAt:Y?.created_at,updatedAt:Y?.updated_at,messageId:$.messageId}));return}case"RUN_RESUMED":{await X.update($.taskId,$.orgId,{status:"in_progress",run_started_at:new Date().toISOString(),last_progress_at:null,failure_reason:null,failure_kind:null});let Y=await X.get($.taskId,$.orgId);G.emit($.orgId,r3($.taskId,"in_progress",{virtualMcpId:Y?.virtual_mcp_id??void 0,createdBy:Y?.created_by,triggerId:Y?.trigger_id,title:Y?.title,branch:Y?.branch??null,harnessId:Y?.harness_id??void 0,createdAt:Y?.created_at,updatedAt:Y?.updated_at}));return}case"STEP_COMPLETED":G.emit($.orgId,nV0($.taskId,$.stepCount));return;case"RUN_COMPLETED":await SK$($.taskId,$.orgId,"completed",Z);return;case"RUN_REQUIRES_ACTION":await SK$($.taskId,$.orgId,"requires_action",Z);return;case"RUN_FAILED":{if($.reason==="ghost"){if(!await X.forceFailIfInProgress($.taskId,$.orgId,$.expectedFenceToken))return;await X.update($.taskId,$.orgId,{run_config:null,run_started_at:null})}else{if(!await X.forceFailIfInProgress($.taskId,$.orgId))return;await X.update($.taskId,$.orgId,{run_config:null,run_started_at:null,...$.reason==="reaped"?{failure_reason:DN4,failure_kind:"stall"}:{}})}let Y=await X.get($.taskId,$.orgId);G.emit($.orgId,r3($.taskId,"failed",{virtualMcpId:Y?.virtual_mcp_id??void 0,createdBy:Y?.created_by,triggerId:Y?.trigger_id,title:Y?.title,branch:Y?.branch??null,harnessId:Y?.harness_id??void 0,createdAt:Y?.created_at,updatedAt:Y?.updated_at})),G.emit($.orgId,I00($.taskId,"failed"));return}case"PREVIOUS_RUN_ABORTED":return}}async function VK$($,Z){for(let{event:X}of $)await LN4(X,Z)}var DN4="Run stalled \u2014 no progress within the idle timeout window";var CK$=B(()=>{O8()});function _K$($){return $.now-$.lastProgressAt>$.idleTimeoutMs}function vK$($){return Math.max($.persistedLastProgressAt??Number.NEGATIVE_INFINITY,$.currentRunStartedAt)}class up0{deps;clock;states=new Map;reaperTimer=null;constructor($,Z=()=>new Date){this.deps=$;this.clock=Z;this.reaperTimer=setInterval(()=>{this.reapStaleRuns().catch((X)=>{console.error("[RunRegistry] Reaper sweep failed",X)})},EN4)}async execute($){let Z=this.dispatch($);return await this.react(Z),Z}dispatch($){let Z=this.states.get($.taskId),X=MK$($,Z),G=[];for(let Y of X){let Q=this.states.get(Y.taskId);if(Y.type==="PREVIOUS_RUN_ABORTED"||Y.type==="RUN_FAILED"){if(Q?.status.tag==="running")Q.status.abortController.abort()}let J=kK$(Q,Y,this.clock());if(J===void 0)this.states.delete(Y.taskId);else this.states.set(Y.taskId,J);if(G.push({event:Y,state:J}),zN4.has(Y.type))bK$().add(1,{"org.id":Y.orgId});else if(jN4.has(Y.type)&&Q?.status.tag==="running")bK$().add(-1,{"org.id":Y.orgId})}return G}react($){return VK$($,this.deps)}getAbortSignal($){let Z=this.states.get($);if(Z?.status.tag==="running")return Z.status.abortController.signal;return null}isRunning($){return this.states.get($)?.status.tag==="running"}async stopAll(){for(let[,$]of this.states)if($.status.tag==="running")$.status.abortController.abort();this.states.clear()}dispose(){if(this.reaperTimer)clearInterval(this.reaperTimer),this.reaperTimer=null}async reapStaleRuns(){let $=this.clock().getTime(),Z=[...this.states].filter(([,X])=>X.status.tag==="running");for(let[X,G]of Z){if(this.states.get(X)?.status.tag!=="running")continue;let Q;try{let W=await this.deps.storage.getProgress(X,G.orgId);Q=vK$({persistedLastProgressAt:W?.lastProgressAt??null,currentRunStartedAt:G.status.startedAt.getTime()})}catch(W){console.warn(`[RunRegistry] Reaper progress read failed for ${X}; skipping`,W);continue}if(!_K$({lastProgressAt:Q,now:$,idleTimeoutMs:XO0}))continue;let J=await this.deps.storage.get(X,G.orgId).catch(()=>null);if(J&&J.status!=="in_progress"){let W=this.states.get(X);if(W?.status.tag==="running")W.status.abortController.abort();this.states.delete(X);continue}console.warn(`[RunRegistry] Reaping stuck run for thread ${X} (idle > ${XO0/60000}m) ...`),PN4().add(1,{"org.id":G.orgId,reason:"idle_timeout"}),await this.execute({type:"FORCE_FAIL",taskId:X,reason:"reaped"}).catch((W)=>{console.error("[RunRegistry] Reaper execute failed",W)})}}}var EN4=300000,hp0,XO0,zN4,jN4,fK$=($)=>{let Z;return()=>Z??=$()},bK$,PN4;var cp0=B(()=>{CK$();K5();hp0=Number(process.env.RUN_IDLE_TIMEOUT_MS),XO0=Number.isFinite(hp0)&&hp0>0?hp0:600000,zN4=new Set(["RUN_STARTED","RUN_RESUMED"]),jN4=new Set(["RUN_COMPLETED","RUN_FAILED","RUN_REQUIRES_ACTION","PREVIOUS_RUN_ABORTED"]),bK$=fK$(()=>J8.createUpDownCounter("decopilot.stream.inflight",{description:"Number of in-flight decopilot stream requests",unit:"{requests}"})),PN4=fK$(()=>J8.createCounter("decopilot.run.reaped",{description:"Number of decopilot runs force-failed by the progress-based reaper",unit:"{runs}"}))});async function xK$($){let{runId:Z}=$,X=RK$(),G=await X.resolveRun(Z),Y=$.fenceToken??G?.runFenceToken;if(!G||G.version!==2||Y==null)return;if(yp0({status:G.status,runFenceToken:G.runFenceToken,fenceToken:Y}))return;if(!X.getJetStream())throw Error("JetStream unavailable for consume step");await qK$({runId:Z,fenceToken:Y,messageId:$.messageId,idleTimeoutMs:$.idleTimeoutMs??XO0},X,IK$)}var yK$=B(()=>{gp0();cp0()});var GO0,GO,gK$=()=>({active:GO.active,pending:GO.pending,max:GO0}),hK$=($)=>{if(GO.active>=GO0)console.log("[hostedHarness] run parked at concurrency cap",{active:GO.active,pending:GO.pending,max:GO0}),$?.();return GO.acquire()};var lp0=B(()=>{sn0();V$();K5();GO0=d0().decopilotMaxConcurrentHostedRuns,GO=an0(GO0);J8.createObservableGauge("hosted_runs.active",{description:"Hosted agent-loop runs executing on this pod",unit:"{runs}"}).addCallback(($)=>$.observe(GO.active));J8.createObservableGauge("hosted_runs.pending",{description:"Hosted agent-loop runs parked waiting for a slot on this pod",unit:"{runs}"}).addCallback(($)=>$.observe(GO.pending))});import{DBOS as CV}from"@dbos-inc/dbos-sdk";function ip0($){dp0=$}function cK$(){if(!dp0)throw Error("[hostedHarness] runtime not initialized \u2014 setHostedHarnessRuntime() must run before workflows fire");return dp0}async function AN4($,Z){let X=cK$(),{request:G}=$,Y=Z??await X.studioContextFactory(G.organizationId,G.userId);if(!Y)throw Error("user membership lost mid-dispatch");if(G.runMetadata)Y.metadata.runMetadata=G.runMetadata;let Q=new AbortController,J=!1,W=new Kp({emit:()=>uK$(X,$)}),K=await hK$(()=>{J=!0,uK$(X,$),W.arm()}).finally(()=>W.stop());try{if(J&&await TN4($))throw Error("run cancelled while queued for a free runner");if(tx(Y,"in_progress",$.threadId),!G.runMetadata?.taskBoardItemId)E3$(Y,$.threadId);await X.dispatchRunFn({...G,abortSignal:Q.signal},Y,X.deps)}finally{K()}}async function TN4($){try{return(await CV.getWorkflowStatus(np0($.runId,$.fenceToken)))?.status==="CANCELLED"}catch(Z){return console.error(`[hostedHarness] could not read child status for run=${$.runId} fence=${$.fenceToken}`,Z),!1}}function RN4($,Z,X,G=1){let Y=X instanceof Error?X.message:String(X);return{messageId:ZO($,Z),errorChunk:{type:"error",errorText:Y},seq:G,finalSeq:G}}function IN4($){if(!($ instanceof Error))return;let Z=$.lastAckSeq;return typeof Z==="number"?Z+1:void 0}async function qN4($,Z){let X=cK$(),{streamBuffer:G}=X.deps,{messageId:Y,errorChunk:Q,seq:J,finalSeq:W}=RN4($.runId,$.fenceToken,Z,IN4(Z));if(!G){console.error(`[hostedHarness] no streamBuffer configured; dropping terminal error for run=${$.runId} fence=${$.fenceToken} messageId=${Y}`);return}if(!await G.publishRawChunk($.runId,Q,{fenceToken:$.fenceToken,seq:J})){console.error(`[hostedHarness] failed to publish terminal error chunk for run=${$.runId} fence=${$.fenceToken} messageId=${Y}`);return}await G.publishDone($.runId,$.fenceToken,W)}async function MN4($){try{await CV.runStep(()=>AN4($),{name:"runHostedHarness",retriesAllowed:!1})}catch(Z){await CV.runStep(()=>qN4($,Z),{name:"publishHostedHarnessFailure",retriesAllowed:!0}).catch((X)=>{console.error(`[hostedHarness] could not publish terminal error for run=${$.runId} fence=${$.fenceToken}`,X)})}}function np0($,Z){return`decopilot-hosted:${$}:${Z}`}async function lK$($){return{workflowID:(await CV.startWorkflow(kN4,{workflowID:np0($.runId,$.fenceToken),queueName:IK,enqueueOptions:{queuePartitionKey:$.threadId}})($)).workflowID}}async function pp0($,Z){await CV.cancelWorkflow(np0($,Z))}var mp0=1,dp0=null,uK$=($,Z)=>w3($.deps.streamBuffer,Z.runId,"waiting-capacity"),kN4;var tp0=B(()=>{Sp0();$y();lp0();xX();kN4=CV.registerWorkflow(MN4,{name:"hostedHarnessWorkflow",maxRecoveryAttempts:1000})});import{DBOS as Gy}from"@dbos-inc/dbos-sdk";function ap0($){Cp0($)}function sp0($){op0=$}function SN4(){if(!op0)throw Error("[threadGate] runtime not initialized \u2014 setThreadGateRuntime() must run before workflows fire");return op0}function VN4($,Z=cw0){let X=$.runFenceToken;if(X)return{runFenceToken:X,claimedRequest:$,shouldPersistFence:!1};let G=Z();return{runFenceToken:G,claimedRequest:{...$,runFenceToken:G},shouldPersistFence:!0}}async function CN4($){let Z=SN4(),{request:X}=$,G=X.taskId??$.threadId;if(gW$({harnessId:X.harnessId}))await w3(Z.deps.streamBuffer,G,"starting-run");let Y=await Z.studioContextFactory(X.organizationId,X.userId);if(!Y)throw Error("user membership lost mid-dispatch");ap0(X.harnessId);let Q=X.taskId??$.threadId,{runFenceToken:J,claimedRequest:W,shouldPersistFence:K}=VN4(X);if(K)await Y.storage.threads.setRunFence(Q,J);return{runFenceToken:J,hostedEnqueue:{runId:G,fenceToken:J,threadId:$.threadId,request:W}}}async function _N4($){if($.source!=="user-message")return;let{request:Z}=$;x1.capture({distinctId:Z.userId,event:"chat_message_started",groups:{organization:Z.organizationId},properties:{organization_id:Z.organizationId,agent_id:Z.agent,mode:Z.mode,thread_id:Z.taskId??$.threadId,credential_id:Z.models.credentialId}})}async function vN4($,Z){if($.source!=="user-message")return;let{request:X}=$;x1.capture({distinctId:X.userId,event:"chat_message_failed",groups:{organization:X.organizationId},properties:{organization_id:X.organizationId,thread_id:X.taskId??$.threadId,agent_id:X.agent,model_id:X.models.thinking.id,mode:X.mode,error_category:"setup",error_message:Z}})}async function YO0($){ap0($.request.harnessId),await Gy.runStep(()=>_N4($),{name:"trackMessageStarted"});let Z;try{Z=await Gy.runStep(()=>CN4($),{name:"dispatchRunAndWait",retriesAllowed:!0}),await lK$(Z.hostedEnqueue)}catch(Y){let Q=Y instanceof Error?Y.message:String(Y);throw await Gy.runStep(()=>vN4($,Q),{name:"trackMessageFailed"}),Y}let X=$.request.taskId??$.threadId,G="messages"in $.request?void 0:$.request.messageId;return await Gy.runStep(()=>xK$({runId:X,fenceToken:Z.runFenceToken,messageId:G}),{name:"consumeRunProjection"}),{taskId:$.request.taskId??$.threadId}}async function bN4($){return YO0($)}async function UH($,Z){return ap0($.request.harnessId),{workflowID:(await Gy.startWorkflow(fN4,{queueName:oQ,enqueueOptions:{queuePartitionKey:$.threadId},workflowID:Z?.workflowID})($)).workflowID}}var rp0=1,op0=null,fN4;var dK$=B(()=>{pw0();D6();$y();yK$();tp0();fN4=Gy.registerWorkflow(bN4,{name:"threadGateWorkflow",maxRecoveryAttempts:1000})});var VV=B(()=>{dK$();tp0()});async function Fp($,Z,X){let G=Z.organizationId,Y=Z.assignedBy??Z.createdBy,Q=X.harnessId??"decopilot",J=await p7($,"smart"),W=dB(G),K=await $.storage.threads.create({organization_id:G,title:X.title,status:"in_progress",virtual_mcp_id:W,message_storage_version:2,harness_id:Q,sandbox_provider_kind:"agent-sandbox",created_by:Y}),N={...K.metadata??{},...ow(Q)?{read_only:!0}:{},...X.repo?{githubRepo:{url:X.repo.url,owner:X.repo.owner,name:X.repo.name,installationId:X.repo.installationId,connectionId:X.repo.connectionId}}:{}},H=X.repo?F3(K.id,X.repo.connectionId):ow(Q)?F3(K.id):null;await $.storage.threads.update(K.id,{metadata:N,...H?{branch:H}:{},updated_by:Y}),await $.storage.taskBoard.linkThread(Z.id,K.id,G);let F={id:crypto.randomUUID(),role:"user",parts:[{type:"text",text:X.prompt}]};return await new o7({storage:$.storage.threads.messageParts(),orgId:G,threadId:K.id,runId:K.id}).emitRequestMessage(F),await UH({threadId:K.id,source:"background-tool",request:{messages:[F],models:{credentialId:J.credentialId,thinking:{id:J.modelId,title:J.modelMeta.title}},agent:{id:W},temperature:X.temperature,toolApprovalLevel:"auto",mode:"default",organizationId:G,userId:Y,harnessId:Q,sandboxProviderKind:"agent-sandbox",...X.repo?{}:H?{branch:H}:{},taskId:K.id,runMetadata:sU0(Z)}}),{threadId:K.id}}var ep0=B(()=>{on();pw();VV();ew();O8();U3();Qw0()});function xN4($){let Z=new Map($.map((Q)=>[Q.id,Q])),X=new Map;for(let Q of cx($)){let J=mK$(Q.owner,Q.repo);X.set(J,[...X.get(J)??[],Q])}if(X.size!==1)return null;let G=[...X.values()][0],Y=G.find((Q)=>{let J=Z.get(Q.connectionId);return J?Yx(J):!1})??G[0];return{connectionId:Y.connectionId,owner:Y.owner,name:Y.repo,installationId:Y.installationId,url:`https://github.com/${Y.owner}/${Y.repo}`}}async function iK$($,Z){try{let{items:X}=await $.storage.connections.list(Z,{slug:"mcp-github"}),G=xN4(X);if(G)return{repo:G};let Y=new Map;for(let J of cx(X)){let W=mK$(J.owner,J.repo);if(!Y.has(W))Y.set(W,{connectionId:J.connectionId,repo:`${J.owner}/${J.repo}`})}let Q=Y;if(Q.size===0)return console.warn(`[task-board] claude-code skipped for org ${Z}: `+"no importable repos \u2014 running Decopilot"),null;return console.warn(`[task-board] claude-code for org ${Z}: ${Q.size} importable repos \u2014 the run picks one with TASK_ADD_REPO`),{choices:[...Q.values()]}}catch(X){return console.warn("[task-board] repo lookup for claude-code failed",X),null}}function nK$($,Z,X){let G=["You've been assigned this task. Complete it and finish with a pull request.","","You are running AUTONOMOUSLY \u2014 no human is watching, so drive this to "+"completion yourself. Make reasonable decisions and move on; do not stop to ask for confirmation.","",`Title: ${$.title}`];if($.description)G.push("","Description:",$.description);if(G.push("",Z?`The repository ${Z.owner}/${Z.name} is already cloned at your working directory, on its own branch. \`git\` and \`gh\` are authenticated.`:["Your working directory is EMPTY: this organization has several repositories, so nothing has been cloned yet. FIRST call `mcp__studio__TASK_ADD_REPO` with the connectionId of the repository this task is about. It clones that repository into your working directory and waits for the checkout, so once it returns the repository is there on its own branch and `git` and `gh` are authenticated. Do not read files, run `git`, or run `gh` before it returns; there is nothing there yet.","","Repositories in this organization:",...(X?.repoChoices??[]).map((Y)=>`- ${Y.repo} (connectionId: ${Y.connectionId})`),X?.repoChoices?.length?"Pick the one the task is about. If the task doesn't say and the names don't settle it, take the first.":"Call `mcp__studio__TASK_ADD_REPO` with no arguments to list them."].join(`
1547
1547
  `),""),X?.resolveConflict&&X.pr)G.push(`Pull request #${X.pr.number} (${X.pr.url}) is approved but has a MERGE CONFLICT with its base branch.`,`Check that branch out (\`gh pr checkout ${X.pr.number}\`), merge or rebase the base branch into it, resolve the conflicts, and push to update the SAME pull request \u2014 do NOT open a new one. Resolve by preserving BOTH sides' intent; never blindly discard either side, and change only what the conflict requires.`,"");else if(X?.feedback)G.push(X.pr?`A reviewer requested changes on pull request #${X.pr.number} (${X.pr.url}):`:"A reviewer requested changes on your previous work:",X.feedback,X.pr?`Check that branch out (\`gh pr checkout ${X.pr.number}\`) before editing, address the feedback, then push to update the SAME pull request \u2014 do NOT open a new one.`:"Address this feedback.","");return G.push("How to finish:","- Make the change, commit it, push the branch, and open a pull request"+(X?.pr?" \u2014 or push to the existing one, per the instruction above.":"."),"- Change only what the task needs. Don't refactor around it.",`- Then move this task to review on the board: call \`mcp__studio__TASK_BOARD_ITEM_UPDATE\` with id "${$.id}" and status "in_review". Pass ONLY the fields you are changing.`,"- If the task turns out to need no code change, say why in your final message and move it to review anyway so a human can close it out.",`- Anything a reviewer should know (a decision you made, something you found and deliberately left alone, a question) goes on the task as a comment: \`mcp__studio__TASK_BOARD_COMMENT_CREATE\` with taskBoardItemId "${$.id}". Read what's already there first with \`mcp__studio__TASK_BOARD_COMMENT_LIST\` \u2014 a comment may be addressed to you.`,"",`(task id: ${$.id})`),G.join(`
1548
1548
  `)}var mK$=($,Z)=>`${$}/${Z}`.toLowerCase();var pK$=B(()=>{oU0();_W()});async function Yy($,Z){if(Z.assigneeId!==e6)return;await Up($,Z).catch((X)=>{if(X instanceof vQ)throw X;console.error("[task-board] Super Agent enqueue failed",X)})}function yN4($,Z){return["You've been assigned this task. Complete it.","","You are running AUTONOMOUSLY \u2014 no human is watching this run, so drive it "+"to completion on your own. Use `user_ask` ONLY for a genuine, unresolvable blocker a human must clear (a missing credential/secret, or "+"a decision so ambiguous you truly cannot proceed) \u2014 that should be rare. "+"Do not ask for confirmation of a reasonable choice; make it and move on.","",`Title: ${$.title}`,$.description?`
1549
1549
  Description:
@@ -2720,7 +2720,7 @@ Do NOT require review (requiresReview = false) when the changes are low-risk, su
2720
2720
 
2721
2721
  When unsure between the two, lean toward NOT requiring review for small frontend-only diffs, and toward requiring it for anything backend or large.
2722
2722
 
2723
- Respond with the structured verdict and a short reason.`,fV$;var yV$=B(()=>{S4();pw();f$1();P06=x$1.object({requiresReview:x$1.boolean().describe("true if the changes should go through pull-request review"),reason:x$1.string().describe("One short sentence explaining the decision (max ~120 chars)")});fV$={requiresReview:!1,reason:""}});function I06($){if(!$||$.includes(".."))return!1;return R06.test($)}function gV$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!I06(Z))return null;let{__resolveType:X,...G}=$;return{resolveType:Z,payload:G}}function hV$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var R06;var uV$=B(()=>{R06=/^[\w./@-]+$/});function y$1($){let Z;try{Z=new URL($)}catch{return null}if(!Z.hostname.endsWith(".localhost"))return null;let X=Z.host;return Z.hostname="127.0.0.1",{url:Z.toString(),hostHeader:X}}function cV$($,Z){let X=$?.githubRepo;if(!X?.owner||!X?.name)return null;if(!X.connectionId)return X;if(!Z.includes(X.connectionId))return null;return X}async function lV$($,Z,X,G){if(!G.connectionId)throw new Mg("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let Y=$.organization?.id;if(!Y)throw new Mg(u7);await Px({ctx:$,connectionId:G.connectionId,organizationId:Y,forceRefresh:!0,onLegacyMintError:(H)=>{let F=H instanceof Error?H.message:u7;throw new Mg(F)}});let{cloneUrl:Q,gitUserName:J,gitUserEmail:W}=await kw(G.connectionId,G.owner,G.name,$.db,$.vault),K=_E0($),N=await Z.proxyDaemonRequest(X,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{repository:{cloneUrl:Q},identity:{userName:J,userEmail:W}},...K?{operator:K}:{}})});if(!N.ok){let H=await iw(N,q06).catch(()=>N.statusText);throw Error(`Failed to refresh sandbox git credentials (${N.status}): ${H}`)}}var q06=10485760,Mg;var dV$=B(()=>{Fw();k$1();nn();Ln();Mg=class Mg extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function k06($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!M06.test(Z))throw Error(`Invalid branch name: ${$}`)}function IC($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(V06)])}function qC($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}function g$1($,Z){let G=(vE0.get($)??Promise.resolve()).catch(()=>{}).then(Z),Y=G.catch(()=>{});return vE0.set($,Y),Y.finally(()=>{if(vE0.get($)===Y)vE0.delete($)}),G}async function SZ($,Z,X){let G=qC($);if(G instanceof Response)return G;let{claimName:Y,userId:Q,projectRef:J}=$.get("vmClaim"),W=X?.method??"POST",K=null,N=new Headers;if(X?.jsonBody!==void 0)K=X.jsonBody,N.set("content-type","application/json");else if(X?.forwardJsonBody)K=await $.req.text(),N.set("content-type","application/json");let H=X?.signal,F={method:W,headers:N,body:K,...H?{signal:H}:{}},U=async()=>{let w=await G.proxyDaemonRequest(Y,Z,F);if(X?.map404to410&&w.status===404){try{await w.body?.cancel()}catch{}if(await G.adoptLiveClaim?.({userId:Q,projectRef:J},Y))w=await G.proxyDaemonRequest(Y,Z,F);if(w.status===404){try{await w.body?.cancel()}catch{}return new Response(JSON.stringify({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."}),{status:410,headers:{"content-type":"application/json",...bY}})}}let O=await w.text(),D=X?.redactRepoDirUnlessDesktop&&G.kind!=="user-desktop"?_06(O):O,L=w.headers.get("content-type")??"application/json";return new Response(D,{status:w.status,headers:{"content-type":L,...bY}})};try{if(H){let w=U();return w.catch(()=>{}),await Promise.race([w,new Promise((D,L)=>{if(H.aborted)return L(H.reason);H.addEventListener("abort",()=>L(H.reason),{once:!0})})])}return await U()}catch(w){let O=w instanceof Error?w.message:String(w);return $.json({error:`Daemon unreachable: ${O}`},502)}}function _06($){try{let Z=JSON.parse($);if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&"repoDir"in Z)return JSON.stringify({...Z,repoDir:null})}catch{}return $}async function bE0($,Z,X,G="GET",Y){let Q=await $.proxyDaemonRequest(Z,X,{method:G,headers:new Headers,body:null});if(Q.status===404&&Y){try{await Q.body?.cancel()}catch{}if(await $.adoptLiveClaim?.(Y,Z))Q=await $.proxyDaemonRequest(Z,X,{method:G,headers:new Headers,body:null})}if(Q.status===404){try{await Q.body?.cancel()}catch{}throw Error("SANDBOX_GONE")}let J=await Q.text();if(!Q.ok)try{let W=JSON.parse(J);throw Error(W.error??`Daemon error (${Q.status})`)}catch(W){if(W instanceof Error&&W.message!==J)throw W;throw Error(`Daemon error (${Q.status})`)}return JSON.parse(J)}function v06($){return nV$.includes($)}var M06,mV$=524288,S06=65536,V06=1e4,iV$=2000,C06,vE0,bY,nV$,pV$=()=>{let $=new D1;return $.use("/:virtualMcpId/:branch/*",C06),$.post("/:virtualMcpId/:branch/write",(Z)=>SZ(Z,"/_sandbox/write",{forwardJsonBody:!0,signal:IC(Z)})),$.post("/:virtualMcpId/:branch/unlink",(Z)=>SZ(Z,"/_sandbox/unlink",{forwardJsonBody:!0,signal:IC(Z)})),$.post("/:virtualMcpId/:branch/mkdir",(Z)=>SZ(Z,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:IC(Z)})),$.post("/:virtualMcpId/:branch/rename",(Z)=>SZ(Z,"/_sandbox/rename",{forwardJsonBody:!0,signal:IC(Z)})),$.post("/:virtualMcpId/:branch/read",(Z)=>SZ(Z,"/_sandbox/read",{forwardJsonBody:!0,signal:IC(Z)})),$.post("/:virtualMcpId/:branch/glob",(Z)=>SZ(Z,"/_sandbox/glob",{forwardJsonBody:!0,signal:IC(Z)})),$.post("/:virtualMcpId/:branch/grep",(Z)=>SZ(Z,"/_sandbox/grep",{forwardJsonBody:!0,signal:IC(Z)})),$.post("/:virtualMcpId/:branch/exec/:script",async(Z)=>{let X=Z.req.param("script");if(!X)return Z.json({error:"missing script name"},400);return SZ(Z,`/_sandbox/exec/${encodeURIComponent(X)}`)}),$.post("/:virtualMcpId/:branch/exec/:script/kill",async(Z)=>{let X=Z.req.param("script");if(!X)return Z.json({error:"missing script name"},400);return SZ(Z,`/_sandbox/exec/${encodeURIComponent(X)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(Z)=>SZ(Z,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDirUnlessDesktop:!0})),$.put("/:virtualMcpId/:branch/config",(Z)=>SZ(Z,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(Z)=>{let X=Z.req.param("step");if(!X||!v06(X))return Z.json({error:`step must be one of: ${nV$.join(", ")}`},400);if(X==="start"){let G=Z.get("vmClaim");if(G.runner){let Y=e(Z.var.studioContext),Q=dU0(G.virtualMcpMetadata);try{await mU0({ctx:Z.var.studioContext,runner:G.runner,handle:G.claimName,orgId:Y.id,userId:G.callerUserId,entries:Q})}catch(J){let W=J instanceof Error?J.message:String(J);return Z.json({error:`Failed to push env to daemon: ${W}`},502)}}}return SZ(Z,`/_sandbox/setup/${X}`,{signal:Z.req.raw.signal,map404to410:!0})}),$.get("/:virtualMcpId/:branch/events",(Z)=>{let X=Z.get("vmClaim");if(!X.runner)return uH(Z,async(G)=>{await G.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this studio instance."})})});return SV$(Z,{ctx:Z.var.studioContext,claimName:X.claimName,runner:X.runner,virtualMcpId:X.virtualMcpId,branch:X.branch,userId:X.userId,projectRef:X.projectRef,virtualMcpMetadata:X.virtualMcpMetadata})}),$.get("/:virtualMcpId/:branch/git/status",(Z)=>SZ(Z,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([Z.req.raw.signal,AbortSignal.timeout(iV$)])})),$.post("/:virtualMcpId/:branch/git/status",(Z)=>SZ(Z,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([Z.req.raw.signal,AbortSignal.timeout(iV$)])})),$.post("/:virtualMcpId/:branch/git/diff",(Z)=>SZ(Z,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/git/publish",async(Z)=>{let X=qC(Z);if(X instanceof Response)return X;let{claimName:G,virtualMcpMetadata:Y,connectionIds:Q}=Z.get("vmClaim"),J=Z.var.studioContext;return g$1(G,async()=>{try{await S$1(J,X,G);let W=cV$(Y,Q);if(W)await lV$(J,X,G,W)}catch(W){if(W instanceof Mg)return Z.json({error:W.message},403,bY);let K=W instanceof Error?W.message:String(W);return Z.json({error:K},502,bY)}return SZ(Z,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",(Z)=>{let{claimName:X}=Z.get("vmClaim");return g$1(X,()=>SZ(Z,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(Z)=>{let X=qC(Z);if(X instanceof Response)return X;let{claimName:G}=Z.get("vmClaim"),Y=Z.var.studioContext;return g$1(G,async()=>{try{await S$1(Y,X,G)}catch(Q){let J=Q instanceof Error?Q.message:String(Q);return Z.json({error:J},502,bY)}return SZ(Z,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",F7({maxSize:mV$,onError:(Z)=>Z.json({error:"Payload too large"},413,bY)}),async(Z)=>{let X=qC(Z);if(X instanceof Response)return X;let{claimName:G,userId:Y,projectRef:Q}=Z.get("vmClaim"),J=Z.var.studioContext;try{let W=await Z.req.json().catch(()=>({})),K=W.status,N=W.diff,H=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[F,U]=_$1(K)&&H?[K,N]:await Promise.all([bE0(X,G,"/_sandbox/git/status","GET",{userId:Y,projectRef:Q}),bE0(X,G,"/_sandbox/git/diff","GET",{userId:Y,projectRef:Q})]),w=await bV$(J,F,U);return Z.json(w,200,bY)}catch(W){let K=W instanceof Error?W.message:String(W);if(K==="SANDBOX_GONE")return Z.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,bY);return Z.json({error:K},502,bY)}}),$.post("/:virtualMcpId/:branch/git/judge-review",F7({maxSize:mV$,onError:(Z)=>Z.json({error:"Payload too large"},413,bY)}),async(Z)=>{let X=qC(Z);if(X instanceof Response)return X;let{claimName:G,userId:Y,projectRef:Q}=Z.get("vmClaim"),J=Z.var.studioContext;try{let W=await Z.req.json().catch(()=>({})),K=W.status,N=W.diff,H=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[F,U]=_$1(K)&&H?[K,N]:await Promise.all([bE0(X,G,"/_sandbox/git/status","GET",{userId:Y,projectRef:Q}),bE0(X,G,"/_sandbox/git/diff","GET",{userId:Y,projectRef:Q})]),w=await xV$(J,F,U,typeof W.language==="string"?W.language:void 0);return Z.json(w,200,bY)}catch(W){let K=W instanceof Error?W.message:String(W);if(K==="SANDBOX_GONE")return Z.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,bY);return Z.json({error:K},502,bY)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(Z)=>{let X=qC(Z);if(X instanceof Response)return X;let{claimName:G}=Z.get("vmClaim"),Y=Z.req.query("path");if(!Y||!Y.startsWith("/")||Y.startsWith("//")||Y.includes("..")||Y.includes("\\"))return Z.json({error:"Path not allowed"},403);let Q;try{Q=await X.getPreviewUrl(G)}catch{return Z.json({error:"Preview not available"},502)}if(!Q)return Z.json({error:"Preview not available"},502);let J=Q.replace(/\/+$/,""),W=y$1(`${J}${Y}`),K;try{K=await fetch(W?.url??`${J}${Y}`,{...W?{headers:{host:W.hostHeader}}:{}})}catch{return Z.json({error:"Preview unreachable"},502)}let N;try{N=await K.text()}catch{return Z.json({error:"Preview unreachable"},502)}return new Response(N,{status:K.status,headers:{"content-type":K.headers.get("content-type")??"application/json"}})}),$.post("/:virtualMcpId/:branch/preview-invoke",F7({maxSize:S06,onError:(Z)=>Z.json({error:"Payload too large"},413)}),async(Z)=>{let X=qC(Z);if(X instanceof Response)return X;let{claimName:G}=Z.get("vmClaim"),Y;try{Y=await X.getPreviewUrl(G)}catch{return Z.json({error:"Preview not available"},502)}if(!Y)return Z.json({error:"Preview not available"},502);let Q;try{Q=await Z.req.json()}catch{return Z.json({error:"Invalid JSON body"},400)}if(!Q||typeof Q!=="object"||Array.isArray(Q))return Z.json({error:"Invalid JSON body"},400);let J=gV$(Q);if(!J)return Z.json({error:"Invalid or missing __resolveType"},400);let W=hV$(Y,J.resolveType),K=y$1(W),N;try{N=await fetch(K?.url??W,{method:"POST",headers:{"content-type":"application/json",...K?{host:K.hostHeader}:{}},body:JSON.stringify(J.payload),signal:AbortSignal.timeout(30000)})}catch{return Z.json({error:"Preview unreachable"},502)}let H;try{H=await N.text()}catch{return Z.json({error:"Preview unreachable"},502)}return new Response(H,{status:N.status,headers:{"content-type":N.headers.get("content-type")??"application/json"}})}),$};var tV$=B(()=>{u8();DC();qg();IV$();eN();MV$();U3();lw();kV$();VV$();Wn0();mn();f$1();yV$();uV$();dV$();M06=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;C06=RV$(async($,Z)=>{let X=$.var.studioContext;try{Y0(X)}catch{return $.json({error:"Unauthorized"},401)}let G=H1(X);if(!G)return $.json({error:"Unauthorized"},401);let Y;try{Y=e(X)}catch{return $.json({error:"Organization scope required"},403)}let Q=$.req.param("virtualMcpId"),J=$.req.param("branch");if(!Q||!J)return $.json({error:"virtualMcpId and branch are required"},400);try{k06(J)}catch(w){let O=w instanceof Error?w.message:String(w);return $.json({error:O},400)}let W=await X.storage.virtualMcps.findById(Q);if(!W||W.organization_id!==Y.id)return $.json({error:"Virtual MCP not found"},404);let K=Un({orgId:Y.id,virtualMcpId:Q,branch:J}),N=await WH(X,J,G),H=qV$({userId:N,projectRef:K}),F=W.metadata??null,U;try{U=(await bX(X,{userId:N,branch:J,virtualMcpMetadata:F})).provider}catch{U=null}if(!U)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:H,callerUserId:G,runner:U,virtualMcpId:Q,branch:J,userId:N,projectRef:K,virtualMcpMetadata:F,connectionIds:W.connections?.map((w)=>w.connection_id)??[]}),Z()});vE0=new Map;bY={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};nV$=["clone","install","start"]});var oV$=($)=>{let Z=new D1;if(Z.use("*",BC),Z.route("/",oL0()),Z.route("/",NM$()),Z.route("/",FV$()),Z.route("/",NV$()),Z.route("/",SE0()),Z.route("/tools",EV$()),Z.route("/",BV$()),Z.route("/",iS$({kvStorage:$.kvStorage})),Z.route("/",dS$()),Z.route("/fs",XV$({getConnection:$.getNatsConnection})),Z.route("/sandbox",pV$()),Z.route("/",JV$()),Z.route("/deco-sites",aL0()),Z.route("/sso",lL0()),Z.route("/",VE0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",ZM$()),$.mountDevAssets)Z.route("/dev-assets",sL0({orgFromPath:!0}));return Z.use("/mcp/:connectionId?",$.mcpAuth),Z.use("/mcp/:connectionId/ui-resource",$.mcpAuth),Z.use("/mcp/gateway/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/virtual-mcp/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/self",$.mcpAuth),Z.use("/mcp/task-run/:threadId",$.mcpAuth),Z.route("/",ma1()),Z.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",$.betterAuthProtectedResourceHandler),Z.get("/mcp/.well-known/oauth-protected-resource",$.betterAuthProtectedResourceHandler),Z.route("/mcp/task-run",YV$()),Z.route("/mcp",TO0()),Z.route("/mcp/self",kE0()),Z.route("/mcp",qO0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var rV$=B(()=>{u8();o01();XM$();$11();eL0();ht();p01();mS$();nS$();GV$();Pi();g01();MO0();P$1();QV$();WV$();HV$();UV$();DV$();T$1();zV$();R$1();RO0();tV$()});function f06($){return $.filter((Z)=>Z.vendors?.alias).map((Z)=>({name:Z.name,title:Z.title,description:Z.description,logo:Z.logo,category:Z.category,vendor:{alias:Z.vendors.alias,url:Z.vendors.url}}))}async function x06($,Z){let X=await fetch(`${$}/rest/v1/apps?select=name,title,description,logo,category,vendors(alias,url)`,{headers:{apikey:Z,Authorization:`Bearer ${Z}`,Accept:"application/json"},signal:AbortSignal.timeout(b06)});if(!X.ok){let G=await X.text().catch(()=>X.statusText);throw console.error(`[deco-apps] Supabase error (${X.status}): ${G.slice(0,200)}`),Error(`External service error (${X.status})`)}return await X.json()}var b06=1e4,y06=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},aV$=()=>{let $=new D1;return $.use("*",y06),$.get("/",async(Z)=>{let X=d0(),G=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!G||!Y)return Z.json({apps:[]});try{let Q=await x06(G,Y);return Z.json({apps:f06(Q)})}catch(Q){return console.error("[deco-apps] GET error:",Q),Z.json({error:"Failed to fetch apps"},502)}}),$};var sV$=B(()=>{u8();V$()});import{z as I1}from"zod";function PK($,Z="invalid_request_error",X=null,G=null){return{error:{message:$,type:Z,param:X,code:G}}}function p06($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let X=$.substring(0,Z),G=$.substring(Z+1);if(!X||!G)return null;return{credentialId:X,modelId:G}}function t06($,Z,X){try{return JSON.parse($)}catch{throw new ZC$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function o06($){let Z={};for(let X of $)if(X.role==="assistant"&&X.tool_calls)for(let G of X.tool_calls)Z[G.id]=G.function.name;return $.map((X)=>{switch(X.role){case"system":return{role:"system",content:X.content};case"user":if(typeof X.content==="string")return{role:"user",content:X.content};return{role:"user",content:X.content.map((Y)=>{if(Y.type==="text")return{type:"text",text:Y.text};return{type:"image",image:Y.image_url.url}})};case"assistant":if(X.tool_calls&&X.tool_calls.length>0)return{role:"assistant",content:X.tool_calls.map((Y)=>({type:"tool-call",toolCallId:Y.id,toolName:Y.function.name,input:t06(Y.function.arguments,Y.id,Y.function.name)}))};return{role:"assistant",content:X.content??""};case"tool":let G=Z[X.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:X.tool_call_id,toolName:G,output:{type:"text",value:X.content}}]}}})}function r06($){let Z=$.map((X)=>{let G=X.function.parameters?OY(X.function.parameters):OY({type:"object",properties:{}});return[X.function.name,_$({description:X.function.description,inputSchema:G})]});return Object.fromEntries(Z)}function a06($){if(!$)return;return{openai:{response_format:$}}}function s06(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function eV$($,Z,X,G,Y,Q){let J={model:$,messages:Z,tools:X,temperature:G.temperature,maxTokens:G.max_tokens,topP:G.top_p,frequencyPenalty:G.frequency_penalty,presencePenalty:G.presence_penalty,stopSequences:G.stop?Array.isArray(G.stop)?G.stop:[G.stop]:void 0,abortSignal:Q};return Y?{...J,providerOptions:Y}:J}function $C$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var g06=256,h06,u06,c06,l06,d06,m06,i06,n06,ZC$,XC$,GC$;var YC$=B(()=>{S4();u8();qg();zH();h06=I1.object({type:I1.literal("function"),function:I1.object({name:I1.string(),description:I1.string().optional(),parameters:I1.record(I1.string(),I1.unknown()).optional()})}),u06=I1.object({id:I1.string(),type:I1.literal("function"),function:I1.object({name:I1.string(),arguments:I1.string()})}),c06=I1.discriminatedUnion("role",[I1.object({role:I1.literal("system"),content:I1.string(),name:I1.string().optional()}),I1.object({role:I1.literal("user"),content:I1.union([I1.string(),I1.array(I1.union([I1.object({type:I1.literal("text"),text:I1.string()}),I1.object({type:I1.literal("image_url"),image_url:I1.object({url:I1.string(),detail:I1.string().optional()})})]))]),name:I1.string().optional()}),I1.object({role:I1.literal("assistant"),content:I1.string().nullable().optional(),name:I1.string().optional(),tool_calls:I1.array(u06).optional()}),I1.object({role:I1.literal("tool"),content:I1.string(),tool_call_id:I1.string()})]),l06=I1.object({type:I1.literal("text")}),d06=I1.object({type:I1.literal("json_object")}),m06=I1.object({type:I1.literal("json_schema"),json_schema:I1.object({name:I1.string(),description:I1.string().optional(),schema:I1.record(I1.string(),I1.unknown()),strict:I1.boolean().optional()})}),i06=I1.union([l06,d06,m06]),n06=I1.object({model:I1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:I1.array(c06),stream:I1.boolean().optional().default(!1),temperature:I1.number().min(0).max(2).optional(),max_tokens:I1.number().positive().optional(),top_p:I1.number().min(0).max(1).optional(),frequency_penalty:I1.number().min(-2).max(2).optional(),presence_penalty:I1.number().min(-2).max(2).optional(),stop:I1.union([I1.string(),I1.array(I1.string())]).optional(),tools:I1.array(h06).optional(),tool_choice:I1.union([I1.literal("auto"),I1.literal("none"),I1.literal("required"),I1.object({type:I1.literal("function"),function:I1.object({name:I1.string()})})]).optional(),response_format:i06.optional(),user:I1.string().optional()});ZC$=class ZC$ extends Error{constructor($){super($);this.name="MessageConversionError"}};XC$=new D1;XC$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(PK("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(PK("Organization context is required. Ensure your API key has organization metadata.","invalid_request_error","organization"),400);if((Z.organization.slug??Z.organization.id)!==X)return $.json(PK("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let G=await $.req.json(),Y=n06.safeParse(G);if(!Y.success){let L=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(PK(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let Q=Y.data,J=p06(Q.model);if(!J)return $.json(PK("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}=J,{modelId:K}=J;if(!W){let E=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((z)=>lB(z.providerId));if(!E)return $.json(PK("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=E.id}let N;try{N=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(PK(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let H=N.aiSdk.languageModel(K),F=o06(Q.messages),U=Q.tools?r06(Q.tools):void 0,w=a06(Q.response_format),O=s06(),D=Math.floor(Date.now()/1000);if(Q.stream)return uH($,async(L)=>{let E=eV$(H,F,U,Q,w,$.req.raw.signal);try{let z=qw(E),j=!1,A=0,P="",q=async()=>{if(P.length===0)return;let S=P;P="",await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Q.model,choices:[{index:0,delta:{content:S},finish_reason:null}]})})};for await(let S of z.fullStream){if(!j&&(S.type==="text-delta"||S.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Q.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),j=!0;if(S.type==="text-delta"){if(P+=S.text,P.length>=g06)await q()}else if(S.type==="tool-call"){await q();let M=A++;await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Q.model,choices:[{index:0,delta:{tool_calls:[{index:M,id:S.toolCallId,type:"function",function:{name:S.toolName,arguments:JSON.stringify(S.input)}}]},finish_reason:null}]})})}else if(S.type==="finish")await q(),await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Q.model,choices:[{index:0,delta:{},finish_reason:$C$(S.finishReason)}],usage:S.totalUsage?{prompt_tokens:S.totalUsage.inputTokens??0,completion_tokens:S.totalUsage.outputTokens??0,total_tokens:S.totalUsage.totalTokens??0}:void 0})})}await q(),await L.writeSSE({data:"[DONE]"})}catch(z){let j=z;console.error("[openai-compat:stream] Error:",j.message),await L.writeSSE({data:JSON.stringify({error:{message:j.message,type:"server_error"}})})}});else{let L=eV$(H,F,U,Q,w,$.req.raw.signal),E=await Rw(L),z={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)z.tool_calls=E.toolCalls.map((j)=>({id:j.toolCallId,type:"function",function:{name:j.toolName,arguments:JSON.stringify("input"in j?j.input:{})}})),z.content=null;return $.json({id:O,object:"chat.completion",created:D,model:Q.model,choices:[{index:0,message:z,finish_reason:$C$(E.finishReason)}],usage:{prompt_tokens:E.usage?.inputTokens??0,completion_tokens:E.usage?.outputTokens??0,total_tokens:E.usage?.totalTokens??0}})}}catch(G){let Y=G;if(Y.name==="AbortError")return $.json(PK("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(PK(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(PK(Y.message,"server_error"),500)}});GC$=XC$});var JC$;var QC$=B(()=>{JC$={name:"decocms",version:"4.177.1",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.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":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@nats-io/jwt":"0.0.10-5","@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:"^6.0.208","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 Z16(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??$16}}var WC$,$16="https://ph.studio.decocms.com",KC$;var NC$=B(()=>{u8();DC0();AV();OZ();V$();v01();QC$();WC$=new D1;WC$.get("/",($)=>{let Z={version:JC$.version,theme:$M1(),...pB().logo&&{logo:pB().logo},...aW()&&{internalUrl:X21()},...d0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!d0().firecrawlApiKey,auth:Dq$(),posthog:Z16(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!aW()&&d0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});KC$=WC$});function kg($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function h$1($){return(kg($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function FC$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(kg($))}&sz=${Z}`}function HC$($,Z){let X=$.trim();if(X.length<=Z)return X;let G=X.slice(0,Z-1),Y=G.lastIndexOf(" ");return`${(Y>Z*0.6?G.slice(0,Y):G).trimEnd()}\u2026`}function UC$($){let{brand:Z,domain:X,score:G,verdict:Y}=$,Q=typeof G==="number"?`${Z} commerce report \u2014 ${Math.round(G)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,J=`See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,W=Y?.trim()?HC$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):HC$(`How does ${X} really perform? ${J}`,200);return{title:Q,description:W}}import{z as h0}from"zod";var MC,X16,G16,Y16,Q16,wC$;var OC$=B(()=>{MC=h0.enum(["good","bad","neutral"]),X16=h0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},h0.object({kind:h0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:h0.coerce.string().optional(),tone:MC.optional(),muted:h0.boolean().optional(),delta:h0.coerce.string().optional(),deltaDir:h0.enum(["up","down","neutral"]).optional(),points:h0.array(h0.coerce.number()).optional(),label:h0.coerce.string().optional()}).transform(($)=>{if($.kind==="badge"&&$.label==null)$.label=$.value??"";if($.kind==="score"){let Z=Number($.value);if(Number.isNaN(Z))return{...$,kind:"text"}}return $})),G16=h0.preprocess(($)=>{let Z=$;if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&Array.isArray(Z.cells))Z=Z.cells;if(Array.isArray(Z)&&Z.length===1&&Array.isArray(Z[0]))Z=Z[0];if(Array.isArray(Z))return Z;if(Z&&typeof Z==="object")return Object.values(Z);return Z},h0.array(X16)),Y16={key:h0.coerce.string(),title:h0.coerce.string(),eyebrow:h0.coerce.string().optional(),headline:h0.coerce.string(),annotation:h0.coerce.string().optional(),methodology:h0.coerce.string().optional(),sources:h0.array(h0.object({name:h0.coerce.string(),logoUrl:h0.coerce.string()})).optional()},Q16=h0.discriminatedUnion("template",[h0.object({template:h0.literal("cover"),score:h0.object({value:h0.coerce.number(),max:h0.coerce.number().optional(),grade:h0.coerce.string().optional(),label:h0.coerce.string().optional()}).optional(),brandImage:h0.coerce.string().optional(),screenshot:h0.coerce.string().optional(),mobileScreenshot:h0.coerce.string().optional()}),h0.object({template:h0.literal("cta"),ctaUrl:h0.coerce.string().optional(),ctaLabel:h0.coerce.string().optional(),bullets:h0.array(h0.coerce.string()).optional()}),h0.object({template:h0.literal("series"),points:h0.array(h0.coerce.number()).min(2),xLabels:h0.array(h0.coerce.string()).min(1),unit:h0.coerce.string().optional(),callout:h0.object({index:h0.coerce.number(),value:h0.coerce.string(),tone:MC.optional()})}),h0.object({template:h0.literal("threshold"),value:h0.coerce.string().default(""),metricLabel:h0.coerce.string().optional(),ratio:h0.coerce.number(),thresholdRatio:h0.coerce.number().optional(),thresholdLabel:h0.coerce.string().default(""),tone:MC.optional()}),h0.object({template:h0.literal("stats"),stats:h0.array(h0.object({value:h0.coerce.string(),label:h0.coerce.string(),tone:MC.optional()})).min(1)}),h0.object({template:h0.literal("bars"),items:h0.array(h0.object({value:h0.coerce.string(),label:h0.coerce.string(),ratio:h0.coerce.number(),tone:MC.optional()})).min(1)}),h0.object({template:h0.literal("gauges"),gauges:h0.array(h0.object({label:h0.coerce.string(),value:h0.coerce.string(),status:h0.enum(["good","warn","bad"]).catch("warn"),caption:h0.coerce.string().optional(),ratio:h0.coerce.number().optional()})).min(1)}),h0.object({template:h0.literal("checklist"),checks:h0.array(h0.object({label:h0.coerce.string(),status:h0.enum(["pass","fail","warn"]).catch("fail"),value:h0.coerce.string().optional()})).min(1)}),h0.object({template:h0.literal("table"),columns:h0.array(h0.object({label:h0.coerce.string(),align:h0.enum(["left","right"]).optional()})).min(1),rows:h0.array(G16).min(1),highlightRow:h0.coerce.number().optional()}),h0.object({template:h0.literal("products"),products:h0.array(h0.object({name:h0.coerce.string(),price:h0.coerce.string().optional(),image:h0.coerce.string().optional(),url:h0.coerce.string().optional()})).min(1)}),h0.object({template:h0.literal("list"),entries:h0.array(h0.object({label:h0.coerce.string(),severity:h0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:h0.coerce.number().optional()}),h0.object({template:h0.literal("keywords"),volumeLabel:h0.coerce.string().optional(),keywords:h0.array(h0.object({term:h0.coerce.string(),volume:h0.coerce.string(),position:h0.coerce.number().catch(0)})).min(1)}),h0.object({template:h0.literal("competitor"),metricLabel:h0.coerce.string().optional(),competitors:h0.array(h0.object({name:h0.coerce.string(),value:h0.coerce.string(),tone:MC.optional(),isYou:h0.boolean().optional()})).min(1)}),h0.object({template:h0.literal("scorecard"),rivalLabel:h0.coerce.string().optional(),dimensions:h0.array(h0.object({label:h0.coerce.string(),you:h0.coerce.string(),rival:h0.coerce.string().optional(),rivalName:h0.coerce.string().optional(),tone:MC.optional()})).min(1)})]),wC$=h0.object({...Y16,template:Q16})});function fE0($){let Z=[],X=[...$.sections].sort((G,Y)=>G.position-Y.position).map((G)=>{let Y=wC$.safeParse(G.props);if(Y.success)return Y.data;let Q=Y.error.issues[0];return Z.push({section_type:G.section_type,position:G.position,reason:Q?`${Q.path.join(".")||"(root)"}: ${Q.message}`:"contract violation"}),null}).filter((G)=>G!==null);return{deck:{meta:{...$.meta,scores:$.summary?.scores},slides:X},drops:Z}}var u$1=B(()=>{OC$()});import{join as BC$}from"path";async function W16($){try{let Z=await fetch(`${NW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(J16)});if(!Z.ok)return null;let X=await Z.json(),{deck:G}=fE0(X);if(!G.slides.length)return null;let Y=G.slides.find((W)=>W.template.template==="cover"),Q=Y?.template,J=Q&&Q.template==="cover"?Q:void 0;return{brand:G.meta.brand?.trim()||h$1($),score:G.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function fY($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function K16($,Z){let X=kg($),G=Z?.brand?.trim()||h$1(X),Y=FC$(X,128),J=`${(d0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=UC$({brand:G,domain:X,score:Z?.score,verdict:Z?.verdict}),N=`${J}/og.png`,H=`${G} commerce report by decocms`;return[`<title>${fY(W)}</title>`,`<meta name="description" content="${fY(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="${fY(W)}" />`,`<meta property="og:description" content="${fY(K)}" />`,`<meta property="og:url" content="${fY(J)}" />`,`<meta property="og:image" content="${fY(N)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${fY(H)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${fY(W)}" />`,`<meta name="twitter:description" content="${fY(K)}" />`,`<meta name="twitter:image" content="${fY(N)}" />`,`<meta name="twitter:image:alt" content="${fY(H)}" />`,`<link rel="canonical" href="${fY(J)}" />`,`<link rel="icon" href="${fY(Y)}" sizes="any" />`].join(`
2723
+ Respond with the structured verdict and a short reason.`,fV$;var yV$=B(()=>{S4();pw();f$1();P06=x$1.object({requiresReview:x$1.boolean().describe("true if the changes should go through pull-request review"),reason:x$1.string().describe("One short sentence explaining the decision (max ~120 chars)")});fV$={requiresReview:!1,reason:""}});function I06($){if(!$||$.includes(".."))return!1;return R06.test($)}function gV$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!I06(Z))return null;let{__resolveType:X,...G}=$;return{resolveType:Z,payload:G}}function hV$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var R06;var uV$=B(()=>{R06=/^[\w./@-]+$/});function y$1($){let Z;try{Z=new URL($)}catch{return null}if(!Z.hostname.endsWith(".localhost"))return null;let X=Z.host;return Z.hostname="127.0.0.1",{url:Z.toString(),hostHeader:X}}function cV$($,Z){let X=$?.githubRepo;if(!X?.owner||!X?.name)return null;if(!X.connectionId)return X;if(!Z.includes(X.connectionId))return null;return X}async function lV$($,Z,X,G){if(!G.connectionId)throw new Mg("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let Y=$.organization?.id;if(!Y)throw new Mg(u7);await Px({ctx:$,connectionId:G.connectionId,organizationId:Y,forceRefresh:!0,onLegacyMintError:(H)=>{let F=H instanceof Error?H.message:u7;throw new Mg(F)}});let{cloneUrl:Q,gitUserName:J,gitUserEmail:W}=await kw(G.connectionId,G.owner,G.name,$.db,$.vault),K=_E0($),N=await Z.proxyDaemonRequest(X,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{repository:{cloneUrl:Q},identity:{userName:J,userEmail:W}},...K?{operator:K}:{}})});if(!N.ok){let H=await iw(N,q06).catch(()=>N.statusText);throw Error(`Failed to refresh sandbox git credentials (${N.status}): ${H}`)}}var q06=10485760,Mg;var dV$=B(()=>{Fw();k$1();nn();Ln();Mg=class Mg extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function k06($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!M06.test(Z))throw Error(`Invalid branch name: ${$}`)}function IC($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(V06)])}function qC($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}function g$1($,Z){let G=(vE0.get($)??Promise.resolve()).catch(()=>{}).then(Z),Y=G.catch(()=>{});return vE0.set($,Y),Y.finally(()=>{if(vE0.get($)===Y)vE0.delete($)}),G}async function SZ($,Z,X){let G=qC($);if(G instanceof Response)return G;let{claimName:Y,userId:Q,projectRef:J}=$.get("vmClaim"),W=X?.method??"POST",K=null,N=new Headers;if(X?.jsonBody!==void 0)K=X.jsonBody,N.set("content-type","application/json");else if(X?.forwardJsonBody)K=await $.req.text(),N.set("content-type","application/json");let H=X?.signal,F={method:W,headers:N,body:K,...H?{signal:H}:{}},U=async()=>{let w=await G.proxyDaemonRequest(Y,Z,F);if(X?.map404to410&&w.status===404){try{await w.body?.cancel()}catch{}if(await G.adoptLiveClaim?.({userId:Q,projectRef:J},Y))w=await G.proxyDaemonRequest(Y,Z,F);if(w.status===404){try{await w.body?.cancel()}catch{}return new Response(JSON.stringify({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."}),{status:410,headers:{"content-type":"application/json",...bY}})}}let O=await w.text(),D=X?.redactRepoDirUnlessDesktop&&G.kind!=="user-desktop"?_06(O):O,L=w.headers.get("content-type")??"application/json";return new Response(D,{status:w.status,headers:{"content-type":L,...bY}})};try{if(H){let w=U();return w.catch(()=>{}),await Promise.race([w,new Promise((D,L)=>{if(H.aborted)return L(H.reason);H.addEventListener("abort",()=>L(H.reason),{once:!0})})])}return await U()}catch(w){let O=w instanceof Error?w.message:String(w);return $.json({error:`Daemon unreachable: ${O}`},502)}}function _06($){try{let Z=JSON.parse($);if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&"repoDir"in Z)return JSON.stringify({...Z,repoDir:null})}catch{}return $}async function bE0($,Z,X,G="GET",Y){let Q=await $.proxyDaemonRequest(Z,X,{method:G,headers:new Headers,body:null});if(Q.status===404&&Y){try{await Q.body?.cancel()}catch{}if(await $.adoptLiveClaim?.(Y,Z))Q=await $.proxyDaemonRequest(Z,X,{method:G,headers:new Headers,body:null})}if(Q.status===404){try{await Q.body?.cancel()}catch{}throw Error("SANDBOX_GONE")}let J=await Q.text();if(!Q.ok)try{let W=JSON.parse(J);throw Error(W.error??`Daemon error (${Q.status})`)}catch(W){if(W instanceof Error&&W.message!==J)throw W;throw Error(`Daemon error (${Q.status})`)}return JSON.parse(J)}function v06($){return nV$.includes($)}var M06,mV$=524288,S06=65536,V06=1e4,iV$=2000,C06,vE0,bY,nV$,pV$=()=>{let $=new D1;return $.use("/:virtualMcpId/:branch/*",C06),$.post("/:virtualMcpId/:branch/write",(Z)=>SZ(Z,"/_sandbox/write",{forwardJsonBody:!0,signal:IC(Z)})),$.post("/:virtualMcpId/:branch/unlink",(Z)=>SZ(Z,"/_sandbox/unlink",{forwardJsonBody:!0,signal:IC(Z)})),$.post("/:virtualMcpId/:branch/mkdir",(Z)=>SZ(Z,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:IC(Z)})),$.post("/:virtualMcpId/:branch/rename",(Z)=>SZ(Z,"/_sandbox/rename",{forwardJsonBody:!0,signal:IC(Z)})),$.post("/:virtualMcpId/:branch/read",(Z)=>SZ(Z,"/_sandbox/read",{forwardJsonBody:!0,signal:IC(Z)})),$.post("/:virtualMcpId/:branch/glob",(Z)=>SZ(Z,"/_sandbox/glob",{forwardJsonBody:!0,signal:IC(Z)})),$.post("/:virtualMcpId/:branch/grep",(Z)=>SZ(Z,"/_sandbox/grep",{forwardJsonBody:!0,signal:IC(Z)})),$.post("/:virtualMcpId/:branch/exec/:script",async(Z)=>{let X=Z.req.param("script");if(!X)return Z.json({error:"missing script name"},400);return SZ(Z,`/_sandbox/exec/${encodeURIComponent(X)}`)}),$.post("/:virtualMcpId/:branch/exec/:script/kill",async(Z)=>{let X=Z.req.param("script");if(!X)return Z.json({error:"missing script name"},400);return SZ(Z,`/_sandbox/exec/${encodeURIComponent(X)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(Z)=>SZ(Z,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDirUnlessDesktop:!0})),$.put("/:virtualMcpId/:branch/config",(Z)=>SZ(Z,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(Z)=>{let X=Z.req.param("step");if(!X||!v06(X))return Z.json({error:`step must be one of: ${nV$.join(", ")}`},400);if(X==="start"){let G=Z.get("vmClaim");if(G.runner){let Y=e(Z.var.studioContext),Q=dU0(G.virtualMcpMetadata);try{await mU0({ctx:Z.var.studioContext,runner:G.runner,handle:G.claimName,orgId:Y.id,userId:G.callerUserId,entries:Q})}catch(J){let W=J instanceof Error?J.message:String(J);return Z.json({error:`Failed to push env to daemon: ${W}`},502)}}}return SZ(Z,`/_sandbox/setup/${X}`,{signal:Z.req.raw.signal,map404to410:!0})}),$.get("/:virtualMcpId/:branch/events",(Z)=>{let X=Z.get("vmClaim");if(!X.runner)return uH(Z,async(G)=>{await G.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this studio instance."})})});return SV$(Z,{ctx:Z.var.studioContext,claimName:X.claimName,runner:X.runner,virtualMcpId:X.virtualMcpId,branch:X.branch,userId:X.userId,projectRef:X.projectRef,virtualMcpMetadata:X.virtualMcpMetadata})}),$.get("/:virtualMcpId/:branch/git/status",(Z)=>SZ(Z,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([Z.req.raw.signal,AbortSignal.timeout(iV$)])})),$.post("/:virtualMcpId/:branch/git/status",(Z)=>SZ(Z,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([Z.req.raw.signal,AbortSignal.timeout(iV$)])})),$.post("/:virtualMcpId/:branch/git/diff",(Z)=>SZ(Z,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/git/publish",async(Z)=>{let X=qC(Z);if(X instanceof Response)return X;let{claimName:G,virtualMcpMetadata:Y,connectionIds:Q}=Z.get("vmClaim"),J=Z.var.studioContext;return g$1(G,async()=>{try{await S$1(J,X,G);let W=cV$(Y,Q);if(W)await lV$(J,X,G,W)}catch(W){if(W instanceof Mg)return Z.json({error:W.message},403,bY);let K=W instanceof Error?W.message:String(W);return Z.json({error:K},502,bY)}return SZ(Z,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",(Z)=>{let{claimName:X}=Z.get("vmClaim");return g$1(X,()=>SZ(Z,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(Z)=>{let X=qC(Z);if(X instanceof Response)return X;let{claimName:G}=Z.get("vmClaim"),Y=Z.var.studioContext;return g$1(G,async()=>{try{await S$1(Y,X,G)}catch(Q){let J=Q instanceof Error?Q.message:String(Q);return Z.json({error:J},502,bY)}return SZ(Z,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",F7({maxSize:mV$,onError:(Z)=>Z.json({error:"Payload too large"},413,bY)}),async(Z)=>{let X=qC(Z);if(X instanceof Response)return X;let{claimName:G,userId:Y,projectRef:Q}=Z.get("vmClaim"),J=Z.var.studioContext;try{let W=await Z.req.json().catch(()=>({})),K=W.status,N=W.diff,H=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[F,U]=_$1(K)&&H?[K,N]:await Promise.all([bE0(X,G,"/_sandbox/git/status","GET",{userId:Y,projectRef:Q}),bE0(X,G,"/_sandbox/git/diff","GET",{userId:Y,projectRef:Q})]),w=await bV$(J,F,U);return Z.json(w,200,bY)}catch(W){let K=W instanceof Error?W.message:String(W);if(K==="SANDBOX_GONE")return Z.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,bY);return Z.json({error:K},502,bY)}}),$.post("/:virtualMcpId/:branch/git/judge-review",F7({maxSize:mV$,onError:(Z)=>Z.json({error:"Payload too large"},413,bY)}),async(Z)=>{let X=qC(Z);if(X instanceof Response)return X;let{claimName:G,userId:Y,projectRef:Q}=Z.get("vmClaim"),J=Z.var.studioContext;try{let W=await Z.req.json().catch(()=>({})),K=W.status,N=W.diff,H=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[F,U]=_$1(K)&&H?[K,N]:await Promise.all([bE0(X,G,"/_sandbox/git/status","GET",{userId:Y,projectRef:Q}),bE0(X,G,"/_sandbox/git/diff","GET",{userId:Y,projectRef:Q})]),w=await xV$(J,F,U,typeof W.language==="string"?W.language:void 0);return Z.json(w,200,bY)}catch(W){let K=W instanceof Error?W.message:String(W);if(K==="SANDBOX_GONE")return Z.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,bY);return Z.json({error:K},502,bY)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(Z)=>{let X=qC(Z);if(X instanceof Response)return X;let{claimName:G}=Z.get("vmClaim"),Y=Z.req.query("path");if(!Y||!Y.startsWith("/")||Y.startsWith("//")||Y.includes("..")||Y.includes("\\"))return Z.json({error:"Path not allowed"},403);let Q;try{Q=await X.getPreviewUrl(G)}catch{return Z.json({error:"Preview not available"},502)}if(!Q)return Z.json({error:"Preview not available"},502);let J=Q.replace(/\/+$/,""),W=y$1(`${J}${Y}`),K;try{K=await fetch(W?.url??`${J}${Y}`,{...W?{headers:{host:W.hostHeader}}:{}})}catch{return Z.json({error:"Preview unreachable"},502)}let N;try{N=await K.text()}catch{return Z.json({error:"Preview unreachable"},502)}return new Response(N,{status:K.status,headers:{"content-type":K.headers.get("content-type")??"application/json"}})}),$.post("/:virtualMcpId/:branch/preview-invoke",F7({maxSize:S06,onError:(Z)=>Z.json({error:"Payload too large"},413)}),async(Z)=>{let X=qC(Z);if(X instanceof Response)return X;let{claimName:G}=Z.get("vmClaim"),Y;try{Y=await X.getPreviewUrl(G)}catch{return Z.json({error:"Preview not available"},502)}if(!Y)return Z.json({error:"Preview not available"},502);let Q;try{Q=await Z.req.json()}catch{return Z.json({error:"Invalid JSON body"},400)}if(!Q||typeof Q!=="object"||Array.isArray(Q))return Z.json({error:"Invalid JSON body"},400);let J=gV$(Q);if(!J)return Z.json({error:"Invalid or missing __resolveType"},400);let W=hV$(Y,J.resolveType),K=y$1(W),N;try{N=await fetch(K?.url??W,{method:"POST",headers:{"content-type":"application/json",...K?{host:K.hostHeader}:{}},body:JSON.stringify(J.payload),signal:AbortSignal.timeout(30000)})}catch{return Z.json({error:"Preview unreachable"},502)}let H;try{H=await N.text()}catch{return Z.json({error:"Preview unreachable"},502)}return new Response(H,{status:N.status,headers:{"content-type":N.headers.get("content-type")??"application/json"}})}),$};var tV$=B(()=>{u8();DC();qg();IV$();eN();MV$();U3();lw();kV$();VV$();Wn0();mn();f$1();yV$();uV$();dV$();M06=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;C06=RV$(async($,Z)=>{let X=$.var.studioContext;try{Y0(X)}catch{return $.json({error:"Unauthorized"},401)}let G=H1(X);if(!G)return $.json({error:"Unauthorized"},401);let Y;try{Y=e(X)}catch{return $.json({error:"Organization scope required"},403)}let Q=$.req.param("virtualMcpId"),J=$.req.param("branch");if(!Q||!J)return $.json({error:"virtualMcpId and branch are required"},400);try{k06(J)}catch(w){let O=w instanceof Error?w.message:String(w);return $.json({error:O},400)}let W=await X.storage.virtualMcps.findById(Q);if(!W||W.organization_id!==Y.id)return $.json({error:"Virtual MCP not found"},404);let K=Un({orgId:Y.id,virtualMcpId:Q,branch:J}),N=await WH(X,J,G),H=qV$({userId:N,projectRef:K}),F=W.metadata??null,U;try{U=(await bX(X,{userId:N,branch:J,virtualMcpMetadata:F})).provider}catch{U=null}if(!U)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:H,callerUserId:G,runner:U,virtualMcpId:Q,branch:J,userId:N,projectRef:K,virtualMcpMetadata:F,connectionIds:W.connections?.map((w)=>w.connection_id)??[]}),Z()});vE0=new Map;bY={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};nV$=["clone","install","start"]});var oV$=($)=>{let Z=new D1;if(Z.use("*",BC),Z.route("/",oL0()),Z.route("/",NM$()),Z.route("/",FV$()),Z.route("/",NV$()),Z.route("/",SE0()),Z.route("/tools",EV$()),Z.route("/",BV$()),Z.route("/",iS$({kvStorage:$.kvStorage})),Z.route("/",dS$()),Z.route("/fs",XV$({getConnection:$.getNatsConnection})),Z.route("/sandbox",pV$()),Z.route("/",JV$()),Z.route("/deco-sites",aL0()),Z.route("/sso",lL0()),Z.route("/",VE0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",ZM$()),$.mountDevAssets)Z.route("/dev-assets",sL0({orgFromPath:!0}));return Z.use("/mcp/:connectionId?",$.mcpAuth),Z.use("/mcp/:connectionId/ui-resource",$.mcpAuth),Z.use("/mcp/gateway/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/virtual-mcp/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/self",$.mcpAuth),Z.use("/mcp/task-run/:threadId",$.mcpAuth),Z.route("/",ma1()),Z.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",$.betterAuthProtectedResourceHandler),Z.get("/mcp/.well-known/oauth-protected-resource",$.betterAuthProtectedResourceHandler),Z.route("/mcp/task-run",YV$()),Z.route("/mcp",TO0()),Z.route("/mcp/self",kE0()),Z.route("/mcp",qO0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var rV$=B(()=>{u8();o01();XM$();$11();eL0();ht();p01();mS$();nS$();GV$();Pi();g01();MO0();P$1();QV$();WV$();HV$();UV$();DV$();T$1();zV$();R$1();RO0();tV$()});function f06($){return $.filter((Z)=>Z.vendors?.alias).map((Z)=>({name:Z.name,title:Z.title,description:Z.description,logo:Z.logo,category:Z.category,vendor:{alias:Z.vendors.alias,url:Z.vendors.url}}))}async function x06($,Z){let X=await fetch(`${$}/rest/v1/apps?select=name,title,description,logo,category,vendors(alias,url)`,{headers:{apikey:Z,Authorization:`Bearer ${Z}`,Accept:"application/json"},signal:AbortSignal.timeout(b06)});if(!X.ok){let G=await X.text().catch(()=>X.statusText);throw console.error(`[deco-apps] Supabase error (${X.status}): ${G.slice(0,200)}`),Error(`External service error (${X.status})`)}return await X.json()}var b06=1e4,y06=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},aV$=()=>{let $=new D1;return $.use("*",y06),$.get("/",async(Z)=>{let X=d0(),G=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!G||!Y)return Z.json({apps:[]});try{let Q=await x06(G,Y);return Z.json({apps:f06(Q)})}catch(Q){return console.error("[deco-apps] GET error:",Q),Z.json({error:"Failed to fetch apps"},502)}}),$};var sV$=B(()=>{u8();V$()});import{z as I1}from"zod";function PK($,Z="invalid_request_error",X=null,G=null){return{error:{message:$,type:Z,param:X,code:G}}}function p06($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let X=$.substring(0,Z),G=$.substring(Z+1);if(!X||!G)return null;return{credentialId:X,modelId:G}}function t06($,Z,X){try{return JSON.parse($)}catch{throw new ZC$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function o06($){let Z={};for(let X of $)if(X.role==="assistant"&&X.tool_calls)for(let G of X.tool_calls)Z[G.id]=G.function.name;return $.map((X)=>{switch(X.role){case"system":return{role:"system",content:X.content};case"user":if(typeof X.content==="string")return{role:"user",content:X.content};return{role:"user",content:X.content.map((Y)=>{if(Y.type==="text")return{type:"text",text:Y.text};return{type:"image",image:Y.image_url.url}})};case"assistant":if(X.tool_calls&&X.tool_calls.length>0)return{role:"assistant",content:X.tool_calls.map((Y)=>({type:"tool-call",toolCallId:Y.id,toolName:Y.function.name,input:t06(Y.function.arguments,Y.id,Y.function.name)}))};return{role:"assistant",content:X.content??""};case"tool":let G=Z[X.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:X.tool_call_id,toolName:G,output:{type:"text",value:X.content}}]}}})}function r06($){let Z=$.map((X)=>{let G=X.function.parameters?OY(X.function.parameters):OY({type:"object",properties:{}});return[X.function.name,_$({description:X.function.description,inputSchema:G})]});return Object.fromEntries(Z)}function a06($){if(!$)return;return{openai:{response_format:$}}}function s06(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function eV$($,Z,X,G,Y,Q){let J={model:$,messages:Z,tools:X,temperature:G.temperature,maxTokens:G.max_tokens,topP:G.top_p,frequencyPenalty:G.frequency_penalty,presencePenalty:G.presence_penalty,stopSequences:G.stop?Array.isArray(G.stop)?G.stop:[G.stop]:void 0,abortSignal:Q};return Y?{...J,providerOptions:Y}:J}function $C$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var g06=256,h06,u06,c06,l06,d06,m06,i06,n06,ZC$,XC$,GC$;var YC$=B(()=>{S4();u8();qg();zH();h06=I1.object({type:I1.literal("function"),function:I1.object({name:I1.string(),description:I1.string().optional(),parameters:I1.record(I1.string(),I1.unknown()).optional()})}),u06=I1.object({id:I1.string(),type:I1.literal("function"),function:I1.object({name:I1.string(),arguments:I1.string()})}),c06=I1.discriminatedUnion("role",[I1.object({role:I1.literal("system"),content:I1.string(),name:I1.string().optional()}),I1.object({role:I1.literal("user"),content:I1.union([I1.string(),I1.array(I1.union([I1.object({type:I1.literal("text"),text:I1.string()}),I1.object({type:I1.literal("image_url"),image_url:I1.object({url:I1.string(),detail:I1.string().optional()})})]))]),name:I1.string().optional()}),I1.object({role:I1.literal("assistant"),content:I1.string().nullable().optional(),name:I1.string().optional(),tool_calls:I1.array(u06).optional()}),I1.object({role:I1.literal("tool"),content:I1.string(),tool_call_id:I1.string()})]),l06=I1.object({type:I1.literal("text")}),d06=I1.object({type:I1.literal("json_object")}),m06=I1.object({type:I1.literal("json_schema"),json_schema:I1.object({name:I1.string(),description:I1.string().optional(),schema:I1.record(I1.string(),I1.unknown()),strict:I1.boolean().optional()})}),i06=I1.union([l06,d06,m06]),n06=I1.object({model:I1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:I1.array(c06),stream:I1.boolean().optional().default(!1),temperature:I1.number().min(0).max(2).optional(),max_tokens:I1.number().positive().optional(),top_p:I1.number().min(0).max(1).optional(),frequency_penalty:I1.number().min(-2).max(2).optional(),presence_penalty:I1.number().min(-2).max(2).optional(),stop:I1.union([I1.string(),I1.array(I1.string())]).optional(),tools:I1.array(h06).optional(),tool_choice:I1.union([I1.literal("auto"),I1.literal("none"),I1.literal("required"),I1.object({type:I1.literal("function"),function:I1.object({name:I1.string()})})]).optional(),response_format:i06.optional(),user:I1.string().optional()});ZC$=class ZC$ extends Error{constructor($){super($);this.name="MessageConversionError"}};XC$=new D1;XC$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(PK("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(PK("Organization context is required. Ensure your API key has organization metadata.","invalid_request_error","organization"),400);if((Z.organization.slug??Z.organization.id)!==X)return $.json(PK("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let G=await $.req.json(),Y=n06.safeParse(G);if(!Y.success){let L=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(PK(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let Q=Y.data,J=p06(Q.model);if(!J)return $.json(PK("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}=J,{modelId:K}=J;if(!W){let E=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((z)=>lB(z.providerId));if(!E)return $.json(PK("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=E.id}let N;try{N=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(PK(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let H=N.aiSdk.languageModel(K),F=o06(Q.messages),U=Q.tools?r06(Q.tools):void 0,w=a06(Q.response_format),O=s06(),D=Math.floor(Date.now()/1000);if(Q.stream)return uH($,async(L)=>{let E=eV$(H,F,U,Q,w,$.req.raw.signal);try{let z=qw(E),j=!1,A=0,P="",q=async()=>{if(P.length===0)return;let S=P;P="",await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Q.model,choices:[{index:0,delta:{content:S},finish_reason:null}]})})};for await(let S of z.fullStream){if(!j&&(S.type==="text-delta"||S.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Q.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),j=!0;if(S.type==="text-delta"){if(P+=S.text,P.length>=g06)await q()}else if(S.type==="tool-call"){await q();let M=A++;await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Q.model,choices:[{index:0,delta:{tool_calls:[{index:M,id:S.toolCallId,type:"function",function:{name:S.toolName,arguments:JSON.stringify(S.input)}}]},finish_reason:null}]})})}else if(S.type==="finish")await q(),await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Q.model,choices:[{index:0,delta:{},finish_reason:$C$(S.finishReason)}],usage:S.totalUsage?{prompt_tokens:S.totalUsage.inputTokens??0,completion_tokens:S.totalUsage.outputTokens??0,total_tokens:S.totalUsage.totalTokens??0}:void 0})})}await q(),await L.writeSSE({data:"[DONE]"})}catch(z){let j=z;console.error("[openai-compat:stream] Error:",j.message),await L.writeSSE({data:JSON.stringify({error:{message:j.message,type:"server_error"}})})}});else{let L=eV$(H,F,U,Q,w,$.req.raw.signal),E=await Rw(L),z={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)z.tool_calls=E.toolCalls.map((j)=>({id:j.toolCallId,type:"function",function:{name:j.toolName,arguments:JSON.stringify("input"in j?j.input:{})}})),z.content=null;return $.json({id:O,object:"chat.completion",created:D,model:Q.model,choices:[{index:0,message:z,finish_reason:$C$(E.finishReason)}],usage:{prompt_tokens:E.usage?.inputTokens??0,completion_tokens:E.usage?.outputTokens??0,total_tokens:E.usage?.totalTokens??0}})}}catch(G){let Y=G;if(Y.name==="AbortError")return $.json(PK("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(PK(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(PK(Y.message,"server_error"),500)}});GC$=XC$});var JC$;var QC$=B(()=>{JC$={name:"decocms",version:"4.177.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 migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.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":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@nats-io/jwt":"0.0.10-5","@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:"^6.0.208","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 Z16(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??$16}}var WC$,$16="https://ph.studio.decocms.com",KC$;var NC$=B(()=>{u8();DC0();AV();OZ();V$();v01();QC$();WC$=new D1;WC$.get("/",($)=>{let Z={version:JC$.version,theme:$M1(),...pB().logo&&{logo:pB().logo},...aW()&&{internalUrl:X21()},...d0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!d0().firecrawlApiKey,auth:Dq$(),posthog:Z16(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!aW()&&d0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});KC$=WC$});function kg($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function h$1($){return(kg($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function FC$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(kg($))}&sz=${Z}`}function HC$($,Z){let X=$.trim();if(X.length<=Z)return X;let G=X.slice(0,Z-1),Y=G.lastIndexOf(" ");return`${(Y>Z*0.6?G.slice(0,Y):G).trimEnd()}\u2026`}function UC$($){let{brand:Z,domain:X,score:G,verdict:Y}=$,Q=typeof G==="number"?`${Z} commerce report \u2014 ${Math.round(G)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,J=`See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,W=Y?.trim()?HC$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):HC$(`How does ${X} really perform? ${J}`,200);return{title:Q,description:W}}import{z as h0}from"zod";var MC,X16,G16,Y16,Q16,wC$;var OC$=B(()=>{MC=h0.enum(["good","bad","neutral"]),X16=h0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},h0.object({kind:h0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:h0.coerce.string().optional(),tone:MC.optional(),muted:h0.boolean().optional(),delta:h0.coerce.string().optional(),deltaDir:h0.enum(["up","down","neutral"]).optional(),points:h0.array(h0.coerce.number()).optional(),label:h0.coerce.string().optional()}).transform(($)=>{if($.kind==="badge"&&$.label==null)$.label=$.value??"";if($.kind==="score"){let Z=Number($.value);if(Number.isNaN(Z))return{...$,kind:"text"}}return $})),G16=h0.preprocess(($)=>{let Z=$;if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&Array.isArray(Z.cells))Z=Z.cells;if(Array.isArray(Z)&&Z.length===1&&Array.isArray(Z[0]))Z=Z[0];if(Array.isArray(Z))return Z;if(Z&&typeof Z==="object")return Object.values(Z);return Z},h0.array(X16)),Y16={key:h0.coerce.string(),title:h0.coerce.string(),eyebrow:h0.coerce.string().optional(),headline:h0.coerce.string(),annotation:h0.coerce.string().optional(),methodology:h0.coerce.string().optional(),sources:h0.array(h0.object({name:h0.coerce.string(),logoUrl:h0.coerce.string()})).optional()},Q16=h0.discriminatedUnion("template",[h0.object({template:h0.literal("cover"),score:h0.object({value:h0.coerce.number(),max:h0.coerce.number().optional(),grade:h0.coerce.string().optional(),label:h0.coerce.string().optional()}).optional(),brandImage:h0.coerce.string().optional(),screenshot:h0.coerce.string().optional(),mobileScreenshot:h0.coerce.string().optional()}),h0.object({template:h0.literal("cta"),ctaUrl:h0.coerce.string().optional(),ctaLabel:h0.coerce.string().optional(),bullets:h0.array(h0.coerce.string()).optional()}),h0.object({template:h0.literal("series"),points:h0.array(h0.coerce.number()).min(2),xLabels:h0.array(h0.coerce.string()).min(1),unit:h0.coerce.string().optional(),callout:h0.object({index:h0.coerce.number(),value:h0.coerce.string(),tone:MC.optional()})}),h0.object({template:h0.literal("threshold"),value:h0.coerce.string().default(""),metricLabel:h0.coerce.string().optional(),ratio:h0.coerce.number(),thresholdRatio:h0.coerce.number().optional(),thresholdLabel:h0.coerce.string().default(""),tone:MC.optional()}),h0.object({template:h0.literal("stats"),stats:h0.array(h0.object({value:h0.coerce.string(),label:h0.coerce.string(),tone:MC.optional()})).min(1)}),h0.object({template:h0.literal("bars"),items:h0.array(h0.object({value:h0.coerce.string(),label:h0.coerce.string(),ratio:h0.coerce.number(),tone:MC.optional()})).min(1)}),h0.object({template:h0.literal("gauges"),gauges:h0.array(h0.object({label:h0.coerce.string(),value:h0.coerce.string(),status:h0.enum(["good","warn","bad"]).catch("warn"),caption:h0.coerce.string().optional(),ratio:h0.coerce.number().optional()})).min(1)}),h0.object({template:h0.literal("checklist"),checks:h0.array(h0.object({label:h0.coerce.string(),status:h0.enum(["pass","fail","warn"]).catch("fail"),value:h0.coerce.string().optional()})).min(1)}),h0.object({template:h0.literal("table"),columns:h0.array(h0.object({label:h0.coerce.string(),align:h0.enum(["left","right"]).optional()})).min(1),rows:h0.array(G16).min(1),highlightRow:h0.coerce.number().optional()}),h0.object({template:h0.literal("products"),products:h0.array(h0.object({name:h0.coerce.string(),price:h0.coerce.string().optional(),image:h0.coerce.string().optional(),url:h0.coerce.string().optional()})).min(1)}),h0.object({template:h0.literal("list"),entries:h0.array(h0.object({label:h0.coerce.string(),severity:h0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:h0.coerce.number().optional()}),h0.object({template:h0.literal("keywords"),volumeLabel:h0.coerce.string().optional(),keywords:h0.array(h0.object({term:h0.coerce.string(),volume:h0.coerce.string(),position:h0.coerce.number().catch(0)})).min(1)}),h0.object({template:h0.literal("competitor"),metricLabel:h0.coerce.string().optional(),competitors:h0.array(h0.object({name:h0.coerce.string(),value:h0.coerce.string(),tone:MC.optional(),isYou:h0.boolean().optional()})).min(1)}),h0.object({template:h0.literal("scorecard"),rivalLabel:h0.coerce.string().optional(),dimensions:h0.array(h0.object({label:h0.coerce.string(),you:h0.coerce.string(),rival:h0.coerce.string().optional(),rivalName:h0.coerce.string().optional(),tone:MC.optional()})).min(1)})]),wC$=h0.object({...Y16,template:Q16})});function fE0($){let Z=[],X=[...$.sections].sort((G,Y)=>G.position-Y.position).map((G)=>{let Y=wC$.safeParse(G.props);if(Y.success)return Y.data;let Q=Y.error.issues[0];return Z.push({section_type:G.section_type,position:G.position,reason:Q?`${Q.path.join(".")||"(root)"}: ${Q.message}`:"contract violation"}),null}).filter((G)=>G!==null);return{deck:{meta:{...$.meta,scores:$.summary?.scores},slides:X},drops:Z}}var u$1=B(()=>{OC$()});import{join as BC$}from"path";async function W16($){try{let Z=await fetch(`${NW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(J16)});if(!Z.ok)return null;let X=await Z.json(),{deck:G}=fE0(X);if(!G.slides.length)return null;let Y=G.slides.find((W)=>W.template.template==="cover"),Q=Y?.template,J=Q&&Q.template==="cover"?Q:void 0;return{brand:G.meta.brand?.trim()||h$1($),score:G.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function fY($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function K16($,Z){let X=kg($),G=Z?.brand?.trim()||h$1(X),Y=FC$(X,128),J=`${(d0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=UC$({brand:G,domain:X,score:Z?.score,verdict:Z?.verdict}),N=`${J}/og.png`,H=`${G} commerce report by decocms`;return[`<title>${fY(W)}</title>`,`<meta name="description" content="${fY(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="${fY(W)}" />`,`<meta property="og:description" content="${fY(K)}" />`,`<meta property="og:url" content="${fY(J)}" />`,`<meta property="og:image" content="${fY(N)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${fY(H)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${fY(W)}" />`,`<meta name="twitter:description" content="${fY(K)}" />`,`<meta name="twitter:image" content="${fY(N)}" />`,`<meta name="twitter:image:alt" content="${fY(H)}" />`,`<link rel="canonical" href="${fY(J)}" />`,`<link rel="icon" href="${fY(Y)}" sizes="any" />`].join(`
2724
2724
  `)}function N16($,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}
2725
2725
  </head>`)}function DC$($){let Z=new D1;return Z.get("/:domain/og.png",async(X)=>{let G=kg(X.req.param("domain")),Y=async()=>{let Q=$?Bun.file(BC$($,"report-og-fallback.png")):null;if(!Q||!await Q.exists())return X.notFound();return X.body(new Uint8Array(await Q.arrayBuffer()),200,{"Content-Type":"image/png","Cache-Control":"public, max-age=0, s-maxage=3600"})};try{let Q=await fetch(`${NW({})}/api/v2/public/diagnostics/${encodeURIComponent(G)}/og.png`,{signal:AbortSignal.timeout(H16)}),J=Q.headers.get("content-type")??"";if(!Q.ok||!J.startsWith("image/")||!Q.body)return Y();return X.body(Q.body,200,{"Content-Type":J,"Cache-Control":"public, max-age=0, s-maxage=604800"})}catch{return Y()}}),Z.get("/:domain",async(X)=>{let G=X.req.param("domain"),Y=$?BC$($,"index.html"):null,Q=Y?Bun.file(Y):null;if(!Q||!await Q.exists())return X.notFound();let J=await Q.text();try{let W=await W16(kg(G)),K=K16(G,W);return X.html(N16(J,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return X.html(J)}}),Z}var J16=2500,H16=1e4;var LC$=B(()=>{u8();u$1();zD();V$()});function Uo($,Z){return fetch(`${NW({})}${$}`,Z)}async function F16($,Z,X){let G=new URLSearchParams;if(Z)G.set("pw",Z);if(X)G.set("lang",X);let Y=G.toString()?`?${G.toString()}`:"",Q=await Uo(`/api/v2/public/diagnostics/${encodeURIComponent($)}${Y}`,{headers:{Accept:"application/json"}});if(Q.status===404)return{status:"not_found",deck:null,scanned_at:null,drops:[]};if(!Q.ok)throw Error(`report read HTTP ${Q.status}`);let J=await Q.json(),{deck:W,drops:K}=fE0(J);return{status:W.slides.length?"ready":"empty",deck:W,scanned_at:J.scanned_at,drops:K}}var U16,S3,xE0=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},EC$;var zC$=B(()=>{u8();RQ();zD();u$1();U16=new Set(["complete","errored","terminated","unknown"]),S3=new D1;S3.use("*",async($,Z)=>{let X=await L8.api.getSession({headers:$.req.raw.headers});$.set("reportUser",X?.user?.id?{email:X.user.email}:void 0),await Z(),$.header("Cache-Control","private, no-store"),$.header("Vary","Cookie");return});S3.use("/run",xE0);S3.use("/status",xE0);S3.use("/link-token/*",xE0);S3.use("/suggest",xE0);S3.get("/site/:domain",async($)=>{let Z=$.req.param("domain").trim();if(!Z)return $.json({error:"domain is required"},400);let X=$.get("reportUser"),G=$.req.query("key")?.trim()||void 0,Y=$.req.query("lang")?.trim()||void 0;try{let Q=await F16(Z,G,Y);if($.header("Cache-Control","private, no-store"),X||!Q.deck)return $.json(Q);return $.json({...Q,deck:{...Q.deck,slides:Q.deck.slides.slice(0,1)},truncated:Q.status==="ready"})}catch{return $.json({error:"report read failed"},502)}});S3.post("/run",async($)=>{let Z=$.get("reportUser"),X;try{X=await $.req.json()}catch{return $.json({error:"invalid JSON"},400)}let G=typeof X.domain==="string"?X.domain.trim():"";if(!G)return $.json({error:"domain is required"},400);let Y=Z.email,Q=typeof X.distinctId==="string"&&X.distinctId.trim()&&X.distinctId.length<=200?X.distinctId.trim():void 0;try{let J=await Uo("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${ED({})}`},body:JSON.stringify({url:G,email:Y,distinct_id:Q})});if(!J.ok)return $.json({error:`run HTTP ${J.status}`},502);let W=await J.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)}});S3.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let X=await Uo(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${ED({})}`}});if(!X.ok)return $.json({error:`status HTTP ${X.status}`},502);let Y=(await X.json()).status??"unknown",Q={done:U16.has(Y),status:Y};return $.json(Q)}catch{return $.json({error:"status failed"},502)}});S3.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let X=await Uo(`/api/v2/public/link-tokens/${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(X.status===404)return $.json(null);if(!X.ok)return $.json({error:`link token HTTP ${X.status}`},502);return $.json(await X.json())}catch{return $.json({error:"link token resolve failed"},502)}});S3.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let X=await Uo(`/api/v2/public/suggest?q=${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(!X.ok)return $.json({suggestions:[]});let G=await X.json();return $.json({suggestions:Array.isArray(G.suggestions)?G.suggestions:[]})}catch{return $.json({suggestions:[]})}});EC$=S3});import{createHmac as w16,timingSafeEqual as O16}from"crypto";function jC$($,Z,X,G=Date.now()){if(!Z||!X)return!1;let Y,Q=[];for(let N of Z.split(",")){let H=N.indexOf("=");if(H<=0)continue;let F=N.slice(0,H).trim(),U=N.slice(H+1).trim();if(F==="t")Y=U;else if(F==="v1")Q.push(U)}if(!Y||Q.length===0)return!1;let J=Number(Y);if(!Number.isFinite(J)||Math.abs(G/1000-J)>B16)return!1;let W=w16("sha256",X).update(`${Y}.${$}`).digest("hex"),K=Buffer.from(W,"hex");return Q.some((N)=>{let H=Buffer.from(N,"hex");return K.length===H.length&&O16(K,H)})}function PC$($){let Z;try{Z=JSON.parse($)}catch{return null}let X=pQ(Z),G=pQ(pQ(X?.data)?.object);if(!X||typeof X.type!=="string"||!G)return null;return{id:AK(X.id),type:X.type,created:typeof X.created==="number"?X.created:void 0,livemode:typeof X.livemode==="boolean"?X.livemode:void 0,data:{object:G}}}function D16($){switch($){case"active":case"trialing":return"active";case"past_due":return"past_due";default:return"canceled"}}function AK($){return typeof $==="string"?$:void 0}function pQ($){return typeof $==="object"&&$!==null?$:void 0}function yE0($){return typeof $==="number"?new Date($*1000):null}function d$1($){return AK($)??AK(pQ($)?.id)}function L16($){return d$1($.subscription)??AK(pQ(pQ($.parent)?.subscription_details)?.subscription)}function E16($){let Z=yE0($.current_period_end);if(Z)return Z;let X=pQ($.items)?.data;if(!Array.isArray(X))return null;let G=0;for(let Y of X){let Q=pQ(Y)?.current_period_end;if(typeof Q==="number"&&Q>G)G=Q}return G>0?new Date(G*1000):null}function c$1($,Z){let X=yE0($.created);return!!X&&!!Z.lastStripeEventAt&&X<Z.lastStripeEventAt}function l$1($,Z){let X=yE0($.created);if(!X)return;return Z.lastStripeEventAt&&Z.lastStripeEventAt>X?void 0:X}async function z16($,Z){let X=Z.data.object;switch(Z.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":{let G=AK(pQ(X.metadata)?.orgId);if(!G)return{handled:!1,reason:"no orgId"};if(AK(pQ(X.metadata)?.kind)==="topup"){if(X.mode!=="payment")return{handled:!1,reason:"topup with wrong mode"};if(AK(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let J=AK(X.id);if(!J)return console.error("stripe webhook: topup session without id",{eventId:Z.id,organizationId:G}),{handled:!1,reason:"topup session without id"};let W=Number(pQ(X.metadata)?.creditCents);if(!Number.isInteger(W)||W<=0)return console.error("stripe webhook: paid topup with bad metadata \u2014 credit NOT applied",{eventId:Z.id,organizationId:G,creditCents:pQ(X.metadata)?.creditCents}),{handled:!1,reason:"bad topup metadata"};return{handled:!0,organizationId:G,topUp:{creditCents:W,referenceId:`stripe-topup:${J}`}}}if(X.mode!=="subscription")return{handled:!1,reason:"not a subscription checkout"};if(AK(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let Y=await $.getBilling(G);if(!Y)return{handled:!1,reason:"unknown org"};let Q=d$1(X.subscription);if(Y.stripeSubscriptionId&&Q&&Y.stripeSubscriptionId!==Q)return console.error("stripe webhook: refused checkout rebind",{organizationId:G,eventId:Z.id}),{handled:!1,reason:"org already bound to another subscription",orphanSubscriptionId:Q};if(c$1(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(G,{stripeCustomerId:d$1(X.customer),stripeSubscriptionId:Q,status:"active",lastStripeEventAt:l$1(Z,Y)}),{handled:!0,organizationId:G}}case"customer.subscription.updated":case"customer.subscription.deleted":{let G=AK(X.id);if(!G)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(G);if(!Y)return{handled:!1,reason:"unknown subscription"};let Q=Z.type==="customer.subscription.deleted";if(!Q&&c$1(Z,Y))return{handled:!1,reason:"stale event"};let J=Q?"canceled":D16(X.status);return await $.updateStripeState(Y.organizationId,{status:J,currentPeriodEnd:E16(X),...Q&&{stripeSubscriptionId:null},lastStripeEventAt:l$1(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}case"invoice.paid":{let G=L16(X);if(!G)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(G);if(!Y)return{handled:!1,reason:"unknown subscription"};if(c$1(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Y.organizationId,{status:"active",currentPeriodEnd:yE0(X.period_end),lastStripeEventAt:l$1(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}default:return{handled:!1,reason:`unhandled event ${Z.type}`}}}async function AC$($){let Z=new SN(p8().db),X=await z16(Z,$);if(X.handled&&X.topUp)await qH$({organizationId:X.organizationId,amountCents:X.topUp.creditCents,referenceId:X.topUp.referenceId});if(!X.handled&&X.orphanSubscriptionId)try{await C0$(X.orphanSubscriptionId),console.error("stripe webhook: canceled orphan subscription",{subscriptionId:X.orphanSubscriptionId,eventId:$.id})}catch(G){if(!(G instanceof G3&&(G.status===400||G.status===404)))throw G}return X}var B16=300;var TC$=B(()=>{GQ();pi();zo0()});var j16=1048576,m$1;var RC$=B(()=>{u8();DC();V$();TC$();m$1=new D1;m$1.post("/webhook",F7({maxSize:j16,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=d0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let X=await $.req.text();if(!jC$(X,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let Y=PC$(X);if(!Y)return $.json({error:"invalid payload"},400);let Q=await AC$(Y);return console.log("stripe webhook",{eventId:Y.id,type:Y.type,livemode:Y.livemode,...Q}),$.json({received:!0})})});function IC$($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var qC$,P16,A16,MC$;var kC$=B(()=>{u8();jJ();px();Uv();qC$=new D1,P16=["range","if-none-match","if-modified-since"],A16=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];qC$.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),X=Z.organization?.id;if(!Z.auth?.user?.id){if(Wg($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new G$(401,{message:"Authentication required"})}if(!X)throw new G$(401,{message:"Organization context required"});let G=$.req.path.replace(/^.*\/files\//,"");if(!G)throw new G$(400,{message:"Missing file key"});let Y=await Zp(G,Z);if(!Y)throw new G$(503,{message:"Object storage not configured"});if(Y.startsWith("data:")&&zJ()){let K=Y.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new G$(500,{message:"Invalid data URL from storage"});let[,N,H]=K,F=Buffer.from(H,"base64"),U=new Headers({"Content-Type":N,"Cache-Control":"private, max-age=86400"});return IC$(U,N),new Response(F,{status:200,headers:U})}let Q=new Headers;for(let K of P16){let N=$.req.header(K);if(N)Q.set(K,N)}let J=await fetch(Y,{headers:Q});if(J.status===403||J.status===404)throw new G$(404,{message:"File not found"});if(!J.ok&&J.status!==304&&J.status!==416)throw console.error(`[files] upstream storage error ${J.status} for key:`,G),new G$(502,{message:"Upstream storage error"});let W=new Headers;for(let K of A16){let N=J.headers.get(K);if(N)W.set(K,N)}return W.set("Cache-Control","private, max-age=86400"),IC$(W,W.get("content-type")??""),new Response(J.body,{status:J.status,headers:W})});MC$=qC$});var wo=C((kC)=>{var T16=kC&&kC.__createBinding||(Object.create?function($,Z,X,G){if(G===void 0)G=X;var Y=Object.getOwnPropertyDescriptor(Z,X);if(!Y||("get"in Y?!Z.__esModule:Y.writable||Y.configurable))Y={enumerable:!0,get:function(){return Z[X]}};Object.defineProperty($,G,Y)}:function($,Z,X,G){if(G===void 0)G=X;$[G]=Z[X]}),R16=kC&&kC.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))T16(Z,$,X)};Object.defineProperty(kC,"__esModule",{value:!0});R16(pG(),kC)});var CC$=C((SC$)=>{Object.defineProperty(SC$,"__esModule",{value:!0});SC$.version=void 0;SC$.version="3.4.0"});var bC$=C((TK)=>{var I16=TK&&TK.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(TK,"__esModule",{value:!0});TK.NodeTransport=TK.VERSION=void 0;TK.nodeResolveHost=C16;var g6=wo(),q16=j0("net"),i$1=j0("tls"),M16=j0("path"),_C$=j0("fs"),k16=I16(j0("dns")),S16=CC$();TK.VERSION=S16.version;var V16="nats.js";class vC${socket;version;lang;yields=[];signal=(0,g6.deferred)();closedNotification=(0,g6.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=V16,this.version=TK.VERSION}async connect($,Z){this.tlsName=$.tlsName,this.options=Z;let{tls:X}=this.options,{handshakeFirst:G}=X||{};try{if(G===!0)this.socket=await this.tlsFirst($);else this.socket=await this.dial($);if(this.done)this.socket?.destroy();let Y=await this.peekInfo();(0,g6.checkOptions)(Y,Z);let{tls_required:Q,tls_available:J}=Y,W=J===!0&&Z.tls!==null;if(!G&&(Q||W))this.socket=await this.startTLS();if(this.done)this.socket?.destroy();if(Q&&this.socket.encrypted!==!0)throw g6.errors.InvalidArgumentError.format("tls","is not available on this server");return this.connected=!0,this.setupHandlers(),this.signal.resolve(),Promise.resolve()}catch(Y){let Q=Y;if(!Q)Q=new g6.errors.ConnectionError("error connecting - node provided an undefined error");let{code:J}=Q,W=J==="ECONNREFUSED"?new g6.errors.ConnectionError("connection refused",{cause:Q}):Q;throw this.socket?.destroy(),W}}dial($){let Z=(0,g6.deferred)(),X,G=(0,q16.createConnection)($.port,$.hostname,()=>{Z.resolve(G),G.removeAllListeners()});return G.on("error",(Y)=>{X=Y}),G.on("close",()=>{G.removeAllListeners(),Z.reject(X)}),G.setNoDelay(!0),Z}get isClosed(){return this.done}close($){return this._closed($,!1)}peekInfo(){let $=(0,g6.deferred)(),Z;return this.socket.on("data",(X)=>{this.yields.push(X);let G=g6.DataBuffer.concat(...this.yields),Y=(0,g6.extractProtocolMessage)(G);if(Y!=="")try{let Q=g6.INFO.exec(Y);if(!Q)throw Error("unexpected response from server");let J=JSON.parse(Q[1]);$.resolve(J)}catch(Q){$.reject(Q)}finally{this.socket.removeAllListeners()}}),this.socket.on("error",(X)=>{Z=X}),this.socket.on("close",()=>{this.socket.removeAllListeners(),$.reject(Z)}),$}loadFile($){if(!$)return Promise.resolve();let Z=(0,g6.deferred)();try{if($=(0,M16.resolve)($),!(0,_C$.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,_C$.readFile)($,(X,G)=>{if(X)return Z.reject(X);Z.resolve(G)})}catch(X){Z.reject(X)}return Z}async loadClientCerts(){let $={},{certFile:Z,cert:X,caFile:G,ca:Y,keyFile:Q,key:J}=this.options.tls;try{if(Z){let W=await this.loadFile(Z);if(W)$.cert=W}else if(X)$.cert=X;if(Q){let W=await this.loadFile(Q);if(W)$.key=W}else if(J)$.key=J;if(G){let W=await this.loadFile(G);if(W)$.ca=[W]}else if(Y)$.ca=Y;return Promise.resolve($)}catch(W){return Promise.reject(W)}}async tlsFirst($){let Z,X={servername:this.tlsName,rejectUnauthorized:!0};if(this.socket)X.socket=this.socket;if(typeof this.options.tls==="object")try{let Y=await this.loadClientCerts()||{};X=(0,g6.extend)(X,this.options.tls,Y)}catch(Y){return Promise.reject(new g6.errors.ConnectionError(Y.message,{cause:Y}))}let G=(0,g6.deferred)();try{let Y=(0,i$1.connect)($.port,$.hostname,X,()=>{Y.removeAllListeners(),G.resolve(Y)});Y.on("error",(Q)=>{Z=Q}),Y.on("secureConnect",()=>{if(X.rejectUnauthorized===!1)return;if(!Y.authorized)throw Y.authorizationError}),Y.on("close",()=>{G.reject(Z),Y.removeAllListeners()}),Y.setNoDelay(!0)}catch(Y){G.reject(new g6.errors.ConnectionError(Y.message,{cause:Y}))}return G}async startTLS(){let $,Z={socket:this.socket,servername:this.tlsName,rejectUnauthorized:!0};if(typeof this.options.tls==="object")try{let G=await this.loadClientCerts()||{};Z=(0,g6.extend)(Z,this.options.tls,G)}catch(G){return Promise.reject(new g6.errors.ConnectionError(G.message,{cause:G}))}let X=(0,g6.deferred)();try{let G=(0,i$1.connect)(Z,()=>{G.removeAllListeners(),X.resolve(G)});G.on("error",(Y)=>{$=Y}),G.on("secureConnect",()=>{if(Z.rejectUnauthorized===!1)return;if(!G.authorized)throw G.authorizationError}),G.on("close",()=>{X.reject($),G.removeAllListeners()})}catch(G){X.reject(new g6.errors.ConnectionError(G.message,{cause:G}))}return X}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,g6.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,g6.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 i$1.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,g6.render)($)}`);let Z=(0,g6.deferred)();try{this.socket.write($,(X)=>{if(X){if(this.options.debug)console.error(`!!! ${(0,g6.render)($)}: ${X}`);return Z.reject(X)}return Z.resolve()})}catch(X){if(this.options.debug)console.error(`!!! ${(0,g6.render)($)}: ${X}`);Z.reject(X)}return Z}send($){this._send($).catch((X)=>{})}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(X){if(this.options.debug)console.log("transport close terminated with an error",X)}try{if(this.socket)this.socket.removeAllListeners(),this.socket?.destroy(),this.socket=void 0}catch(X){console.log(X)}this.done=!0,this.closedNotification.resolve(this.closeError)}closed(){return this.closedNotification}}TK.NodeTransport=vC$;function C16($){let Z=(0,g6.deferred)();return k16.default.lookup($,{all:!0},(X,G)=>{if(X){Z.reject(X);return}let Y=[];for(let Q of G)Y.push(Q.address);if(Y.length===0)Y.push($);Z.resolve(Y)}),Z}});var hC$=C((gC$)=>{Object.defineProperty(gC$,"__esModule",{value:!0});gC$.connect=_16;var fC$=bC$(),xC$=wo(),yC$=wo();function _16($={}){if((0,yC$.hasWsProtocol)($))return Promise.reject(yC$.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,xC$.setTransportFactory)({factory:()=>{return new fC$.NodeTransport},dnsResolveFn:fC$.nodeResolveHost}),xC$.NatsConnectionImpl.connect($)}});var uC$=C((cH)=>{var b16=cH&&cH.__createBinding||(Object.create?function($,Z,X,G){if(G===void 0)G=X;var Y=Object.getOwnPropertyDescriptor(Z,X);if(!Y||("get"in Y?!Z.__esModule:Y.writable||Y.configurable))Y={enumerable:!0,get:function(){return Z[X]}};Object.defineProperty($,G,Y)}:function($,Z,X,G){if(G===void 0)G=X;$[G]=Z[X]}),f16=cH&&cH.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))b16(Z,$,X)};Object.defineProperty(cH,"__esModule",{value:!0});cH.connect=void 0;var x16=hC$();Object.defineProperty(cH,"connect",{enumerable:!0,get:function(){return x16.connect}});f16(wo(),cH)});function mC$($){let Z=$?.connectFn??u16,X=null,G=null,Y=!1,Q=!1,J=!1,W=[];function K(){return X!==null&&!X.isClosed()&&!X.isDraining()&&!J}function N(){console.log(`[NatsProvider] fireReady: ${W.length} callbacks`);for(let U of W)try{U()}catch{}}function H(U){(async()=>{for await(let w of U.status())if(w.type==="disconnect")console.log("[NatsProvider] Disconnected"),J=!0;else if(w.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),J=!1,G=null,N()})().catch(()=>{})}async function F(U,w){let O=0;while(!Q)try{X=await Z({servers:U,timeout:h16,reconnect:!0,maxReconnectAttempts:-1,...w?{authenticator:w}:{}}),console.log(`[NatsProvider] Connected to ${X.getServer()} after ${O} attempt(s)`),G=null,J=!1,H(X),N();return}catch{O++;let D=cG(g16,y16,O-1,2,0.5);await a$(D)}}return{init(U,w){if(Y)return;Y=!0,Q=!1;let O=w?.creds?cC$.credsAuthenticator(new TextEncoder().encode(w.creds)):void 0;F(U,O).catch(()=>{})},isConnected(){return K()},getConnection(){return K()?X:null},getJetStream(){if(!K())return null;if(!G)G=dC$.jetstream(X);return G},onReady(U){if(W.push(U),K())try{U()}catch{}},async drain(){if(Q=!0,Y=!1,G=null,J=!1,X){let U=X;X=null,await U.drain().catch(()=>{})}}}}function u16($){return lC$.connect($)}var cC$,lC$,dC$,y16=100,g16=3000,h16=3000;var iC$=B(()=>{W5();cC$=k(Zh(),1),lC$=k(uC$(),1),dC$=k(rO(),1)});function n$1($,Z){return`${$}.${Z}`}class p$1{cache;constructor($){this.cache=Gg({ttlMs:$?.ttlMs??c16,maxSize:$?.maxSize??l16})}async get($,Z){return this.cache.get(n$1($,Z))??null}async set($,Z,X){this.cache.set(n$1($,Z),X)}async invalidate($,Z){this.cache.delete(n$1($,Z))}teardown(){this.cache.clear()}}var c16=600000,l16=5000;var nC$=()=>{};function gE0($,Z){return`${$}:${Z}`}function t$1($){let Z=Gg({ttlMs:$?.ttlMs??d16,maxSize:$?.maxSize??m16}),X=$?.getConnection,G=crypto.randomUUID(),Y=new TextEncoder,Q=new TextDecoder,J=null;function W(K,N){let H=X?.();if(!H)return;try{H.publish(pC$,Y.encode(JSON.stringify({organizationId:K,keyId:N,originId:G})))}catch(F){console.warn("[ProviderKeyCache] Publish failed (non-critical):",F)}}return{get(K,N){return Z.get(gE0(K,N))},set(K,N,H){Z.set(gE0(K,N),H)},invalidate(K,N){Z.delete(gE0(K,N)),W(K,N)},start(){if(J)return;let K=X?.();if(!K)return;J=K.subscribe(pC$),(async()=>{for await(let N of J)try{let H=JSON.parse(Q.decode(N.data));if(H.originId===G)continue;Z.delete(gE0(H.organizationId,H.keyId))}catch{}})().catch(console.error)},teardown(){J?.unsubscribe(),J=null,Z.clear()}}}var pC$="studio.ai-provider-keys.invalidate",d16=30000,m16=5000;var tC$=()=>{};class o$1{options;subscriptions=[];onCancel=null;encoder=new TextEncoder;originId=crypto.randomUUID();seenMessageIds=new Set;constructor($){this.options=$}async start($){if($)this.onCancel=$;if(this.subscriptions.length>0)return;if(!this.onCancel)return;let Z=this.options.getConnection();if(!Z)return;let X=new TextDecoder;this.subscriptions=oC$.map((G)=>Z.subscribe(G));for(let G of this.subscriptions)(async()=>{for await(let Y of G)try{let Q=JSON.parse(X.decode(Y.data));if(Q.originId===this.originId)continue;if(Q.messageId&&this.hasSeen(Q.messageId))continue;this.onCancel?.(Q.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 X=this.encoder.encode(JSON.stringify({taskId:$,originId:this.originId,messageId:crypto.randomUUID()}));for(let G of oC$)Z.publish(G,X)}catch(Z){console.warn("[NatsCancelBroadcast] Publish failed (non-critical):",Z)}}publishControlFrame($,Z){}async stop(){for(let $ of this.subscriptions)$.unsubscribe();this.subscriptions=[],this.seenMessageIds.clear(),this.onCancel=null}hasSeen($){if(this.seenMessageIds.has($))return!0;if(this.seenMessageIds.add($),this.seenMessageIds.size>1000){let Z=this.seenMessageIds.values().next().value;if(Z)this.seenMessageIds.delete(Z)}return!1}}var oC$;var rC$=B(()=>{oC$=["studio.decopilot.cancel","mesh.decopilot.cancel"]});var aC$=($)=>{let Z;return()=>Z??=$()},r$1,a$1;var sC$=B(()=>{K5();r$1=aC$(()=>J8.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),a$1=aC$(()=>J8.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function a16(){return{name:wH,subjects:[`${tw0}.>`],storage:V3.StorageType.File,max_age:p16,max_bytes:o16,max_msgs_per_subject:r16,discard:V3.DiscardPolicy.Old,retention:V3.RetentionPolicy.Limits,duplicate_window:t16,num_replicas:1}}class Z_${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 eC$($){let Z=$_$.headers();for(let[X,G]of Object.entries($))Z.set(X,G);return Z}function Z$6($,Z){let X=0;return{publish(G,Y,Q,J){G.publish(Y,Q,J?{headers:J}:void 0).catch((W)=>{if(X++,n16().add(1,{"org.id":Z??"unknown"}),X===1||X%100===0)console.warn(`[Decopilot] JetStream publish failed for thread ${$} (${X} total):`,W)})},get errorCount(){return X}}}function X$6($){if(!($ instanceof Error))return!1;if($.name==="TimeoutError")return!0;return/timeout|no responders|503/i.test($.message)}class s$1{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=a16(),X=await lG(async()=>{let G=this.options.getJetStreamManager?await this.options.getJetStreamManager():await V3.jetstreamManager($);try{await G.streams.info(wH),await G.streams.update(wH,Z)}catch(Y){if(Y instanceof Error&&Y.message.includes("stream not found"))await G.streams.add(Z);else if(Y instanceof Error&&/can ?not change.*storage|storage type/i.test(Y.message))await G.streams.delete(wH),await G.streams.add(Z);else throw Y}return G},{maxAttempts:5,minTimeout:250,maxTimeout:4000,jitter:0.5,isRetriable:X$6});this.js=this.options.getJetStream(),this.jsm=X,console.log(`[Decopilot] StreamBuffer.init ${this.js?"ready":"degraded (js=null)"}`)}pump($,Z,X,G){let Y=this.js;if(!Y)return console.warn(`[Decopilot] pump: JetStream client unavailable for thread ${Z}; chunks NOT published to NATS`),Promise.resolve();let Q=Z$6(Z,G),J=!1,W=()=>{if(J)return;J=!0;let N=NK$(Z);Y.publish(N.subject,N.data).catch(()=>{})};X.addEventListener("abort",W,{once:!0});let K=(N)=>{let H=performance.now(),F=vp0(N,{runId:Z}),U=performance.now()-H;if(r$1().record(U),a$1().add(1,{"org.id":G??"unknown"}),$$6?.record(U,F.reduce((w,O)=>w+O.data.length,0)),F.length===0){console.warn(`[Decopilot] dropping oversized stream chunk for thread ${Z}`);return}for(let w of F)Q.publish(Y,w.subject,w.data,w.headers?eC$(w.headers):void 0)};return(async()=>{let N=$.getReader(),H=0,F=0,U;try{while(!0){let{done:w,value:O}=await N.read();if(w)break;if(K(O),F++,++H>=64)H=0,await new Promise((D)=>setImmediate(D))}}catch(w){U=w,console.warn(`[Decopilot] stream pump error for thread ${Z}:`,w?.message??w)}finally{if(N.releaseLock(),W(),e16)console.warn(JSON.stringify({msg:"decopilot-stream-diag",event:"pump-done",taskId:Z,publishedChunks:F,publishErrors:Q.errorCount}))}if(U!==void 0)throw U})()}async publishRawChunk($,Z,X){let G=this.js;if(!G)return!1;let Y=performance.now(),Q=vp0(Z,{runId:$,dedup:X});if(r$1().record(performance.now()-Y),a$1().add(1),Q.length===0)return console.warn(`[Decopilot] dropping oversized raw chunk for thread ${$} (> MAX_CHUNKED_BYTES)`),!0;for(let J of Q)await G.publish(J.subject,J.data,{...J.headers?{headers:eC$(J.headers)}:{},...J.msgId?{msgID:J.msgId}:{}});return!0}async publishDone($,Z,X){let G=this.js;if(!G)return!1;let Y=KK$({runId:$,fenceToken:Z,finalSeq:X});return await G.publish(Y.subject,Y.data,{msgID:Y.msgId}),!0}async createTailStream($,Z,X){let G=this.js;if(!G)return console.warn(`[Decopilot] createTailStream: JetStream client unavailable for thread ${$}; no live tail`),null;let Y=X?.deliverPolicy==="new"?V3.DeliverPolicy.New:V3.DeliverPolicy.All,Q=X?.closeOnDone??!1,J=XO($),W;try{W=await(await G.consumers.get(wH,{filter_subjects:J,deliver_policy:Y})).consume()}catch(D){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",D?.message??D),null}let H=ew0({messages:async function*(){try{for await(let D of W)yield{subject:D.subject,data:D.data,headers:D.headers}}finally{W.stop()}}(),onCancel:()=>W.stop()}).pipeThrough(ow0()).pipeThrough(rw0()).getReader(),F=!1,U=()=>{if(F)return;F=!0;try{H.releaseLock()}catch{}},w=!1,O=()=>{if(w)return;w=!0,W.stop(),H.cancel().catch(()=>{}),U()};return Z?.addEventListener("abort",O,{once:!0}),new ReadableStream({async pull(D){for(;;){let{done:L,value:E}=await H.read();if(L){O(),D.close();return}let z=E;if(z.kind==="done"){if(Q){O(),D.close();return}continue}D.enqueue(z.chunk);return}},cancel(){O()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge(wH,{filter:XO($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var V3,$_$,i16=($)=>{let Z;return()=>Z??=$()},n16,p16=86400000000000,t16=120000000000,o16=4294967296,r16=500000,s16,e16,$$6;var X_$=B(()=>{W5();bp0();$O0();aw0();K5();sC$();V3=k(rO(),1),$_$=k(Zh(),1),n16=i16(()=>J8.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"}));s16=process.env.STREAM_ENCODE_TRACE==="1",e16=process.env.DECOPILOT_STREAM_TRACE==="1";$$6=s16?new Z_$:null});function hE0($,Z,X,G){if(!G)return!1;return $.emit(Z,r3(X,G.status,{title:G.title??void 0,virtualMcpId:G.virtual_mcp_id??void 0,createdBy:G.created_by??void 0,triggerId:G.trigger_id??null,branch:G.branch??null,harnessId:G.harness_id??void 0,createdAt:G.created_at,updatedAt:G.updated_at})),!0}var G_$=B(()=>{O8()});class e$1{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}}import{readdir as G$6,rm as uE0}from"fs/promises";import{join as cE0}from"path";async function lE0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-Y$6),Z.setUTCHours(0,0,0,0);let X=0;try{let G=await SC($);for(let Y of G)if(/^\d{4}$/.test(Y))X+=await Y_$($,Y,Z);else if(!Y.startsWith(".")){let Q=cE0($,Y),J=await SC(Q);for(let K of J){if(!/^\d{4}$/.test(K))continue;X+=await Y_$(Q,K,Z)}if((await SC(Q)).length===0)await uE0(Q,{recursive:!0,force:!0})}}catch(G){console.warn("monitoring retention cleanup failed:",G)}return X}async function Y_$($,Z,X){let G=0,Y=cE0($,Z),Q=await SC(Y);for(let W of Q){if(!/^\d{2}$/.test(W))continue;let K=cE0(Y,W),N=await SC(K);for(let F of N){if(!/^\d{2}$/.test(F))continue;let U=new Date(`${Z}-${W}-${F}T00:00:00Z`);if(isNaN(U.getTime()))continue;if(U<X){let w=cE0(K,F);await uE0(w,{recursive:!0,force:!0}),G++}}if((await SC(K)).length===0)await uE0(K,{recursive:!0,force:!0})}if((await SC(Y)).length===0)await uE0(Y,{recursive:!0,force:!0});return G}async function SC($){try{return(await G$6($)).filter((X)=>!X.startsWith("."))}catch{return[]}}var Y$6=30;var $81=()=>{};import{DBOS as Z81,SchedulerMode as Q$6}from"@dbos-inc/dbos-sdk";async function W$6(){let $=[rQ(),VC(),MK()],Z=0;for(let X of $)try{Z+=await lE0(X)}catch(G){console.error("[monitoring-retention] cleanup failed:",G)}return console.log(`[monitoring-retention] deleted ${Z} day-dir(s) across ${$.length} signal dir(s)`),{deleted:Z,dirs:$.length}}async function K$6($,Z){await Z81.runStep(()=>W$6(),{name:"monitoringRetention"})}function J_$(){if(Q_$)return;Q_$=!0;let $=Z81.registerWorkflow(K$6,{name:"monitoringRetentionWorkflow"});Z81.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:J$6,mode:Q$6.ExactlyOncePerIntervalWhenActive})}var J$6="23 4 * * *",Q_$=!1;var W_$=B(()=>{dG();$81()});function K_$($){return async(Z,X)=>{let G=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","=",X).where("member.organizationId","=",Z).executeTakeFirst();if(!G)return console.warn(`[automationContextFactory] User ${X} not found in org ${Z} \u2014 returning null`),null;let Y=await Hw.create();Y.auth.user={id:X,role:G.role},Y.organization={id:G.orgId,slug:G.orgSlug,name:G.orgName};let Q=await Jc0($.db,Z,G.role);return Y.boundAuth=Qc0({auth:Y.authInstance,headers:new Headers,role:G.role,permissions:Q,userId:X}),Y.access=new iD(X,void 0,Y.boundAuth,G.role,"self"),$50(Y,{id:G.orgId,slug:G.orgSlug}),Y}}var N_$=B(()=>{nD();Ei()});function N$6(){return{services:[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}],migrationsStatus:"pending",serverUrl:null,logs:[]}}function F$6(){for(let $ of H$6)$()}function H_$($){let Z=[...X81.logs,$];X81={...X81,logs:Z.length>500?Z.slice(-500):Z},F$6()}function G81(){return U$6}var X81,H$6,U$6=!1;var Y81=B(()=>{X81=N$6(),H$6=new Set});import{EventEmitter as w$6}from"events";var Q81;var F_$=B(()=>{Y81();Q81=new w$6;Q81.on("request",($)=>{H_$($)})});function U_$(){return async($,Z)=>{let X=Date.now(),G=$.req.method,Y=$.req.path;if(Y==="/api/auth/get-session"||Y.includes("favicon")){await Z();return}let Q="",J=!1;if(Y.startsWith("/mcp")&&G==="POST"){J=!0;try{if($.req.header("Content-Type")?.includes("application/json")){let U=await $.req.raw.clone().json();if(U.method==="tools/call"&&U.params?.name){let w=Sg(U.params.name),O=U.params.arguments||{},D=Object.keys(O).map((E)=>Sg(E)),L=D.length>0?D.slice(0,3).join(",")+(D.length>3?"\u2026":""):"";Q=`${p6.tool}${w}${p6.dim}(${L})${p6.reset}`}else if(U.method)Q=`${p6.dim}${Sg(U.method)}${p6.reset}`}}catch{}}let W=Sg(Y);if(Y.startsWith("/mcp/conn_")){let H=Y.split("/")[2]??"";W=`/mcp/${p6.mcp}${Sg(H.slice(0,12))}\u2026${p6.reset}`}else if(Y==="/mcp")W=`${p6.mcp}/mcp${p6.reset}`;else if(Y==="/mcp/registry")W=`${p6.mcp}/mcp/registry${p6.reset}`;let K=B$6(G),N=J?"\u25C0":"\u2190";if(!G81())console.log(`${p6.dim}${N}${p6.reset} ${K}${G}${p6.reset} ${W}${Q?` ${Q}`:""}`);try{await Z()}finally{let H=Date.now()-X,F=$.res.status,U=O$6(F),w=H<1000?`${H}ms`:`${(H/1000).toFixed(1)}s`,O=J?"\u25B6":"\u2192";if(!G81())console.log(`${p6.dim}${O}${p6.reset} ${K}${G}${p6.reset} ${W}${Q?` ${Q}`:""} ${U}${F}${p6.reset} ${p6.duration}${w}${p6.reset}`);Q81.emit("request",{method:G,path:Sg(Y),status:F,duration:H,timestamp:new Date})}}}var p6,O$6=($)=>{if($>=500)return p6.serverError;if($>=400)return p6.clientError;if($>=300)return p6.redirect;return p6.ok},B$6=($)=>{return p6[$]||p6.reset},Sg=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var w_$=B(()=>{Y81();F_$();p6={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 L_$}from"crypto";import{mkdir as D$6,readdir as L$6,rm as O_$,stat as E_$}from"fs/promises";import{join as W81,relative as E$6}from"path";import{z as L$}from"zod";function j_$($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return W81(z$6,Z)}function P_$($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function J81($,Z){let X=j_$($),G=P_$(Z);return W81(X,G)}function j$6($,Z,X,G){let Y=d0().encryptionKey||"dev-secret",Q=`${$}:${Z}:${X}:${G}`;return L_$("sha256",Y).update(Q).digest("hex")}function D_$($,Z,X,G,Y){let Q=Math.floor(Date.now()/1000)+G,J=j$6(Z,X,Q,Y),W=new URL(`/api/dev-assets/${Z}/${P_$(X)}`,$);return W.searchParams.set("expires",Q.toString()),W.searchParams.set("signature",J),W.searchParams.set("method",Y),W.toString()}function A_$($,Z,X){let G=`${$}:${Z.getTime()}:${X}`;return`"${L_$("md5","etag").update(G).digest("hex")}"`}async function T_$($,Z,X,G,Y){try{let Q=await L$6($,{withFileTypes:!0});for(let J of Q){let W=W81($,J.name),N=E$6(Z,W).replace(/\\/g,"/");if(X&&!N.startsWith(X))continue;if(J.isDirectory())if(G){let H=N+"/";if(!X||H.startsWith(X)){if(!(X?N.slice(X.length):N).includes("/"))Y.commonPrefixes.add(H)}}else await T_$(W,Z,X,G,Y);else if(J.isFile()){if(G&&X){let H=N.slice(X.length);if(H.includes(G)){let F=H.indexOf(G),U=X+H.slice(0,F+1);Y.commonPrefixes.add(U);continue}}try{let H=await E_$(W);Y.objects.push({key:N,size:H.size,lastModified:H.mtime.toISOString(),etag:A_$(W,H.mtime,H.size)})}catch{}}}}catch{}}function R_$($,Z){let G=e($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:L$.object({prefix:L$.string().optional(),maxKeys:L$.number().optional().default(1000),continuationToken:L$.string().optional(),delimiter:L$.string().optional()}),outputSchema:L$.object({objects:L$.array(L$.object({key:L$.string(),size:L$.number(),lastModified:L$.string(),etag:L$.string()})),nextContinuationToken:L$.string().optional(),isTruncated:L$.boolean(),commonPrefixes:L$.array(L$.string()).optional()}),handler:async(Y)=>{let Q=Y,J=Q.prefix||"",W=Q.maxKeys??1000,K=Q.delimiter,N=Q.continuationToken,H=j_$(G);await D$6(H,{recursive:!0});let F={objects:[],commonPrefixes:new Set};await T_$(H,H,J,K,F),F.objects.sort((L,E)=>L.key.localeCompare(E.key));let U=0;if(N){if(U=F.objects.findIndex((L)=>L.key>N),U===-1)U=F.objects.length}let w=F.objects.slice(U,U+W),O=U+W<F.objects.length,D=O?w[w.length-1]?.key:void 0;return{objects:w,isTruncated:O,nextContinuationToken:D,commonPrefixes:Array.from(F.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:L$.object({key:L$.string()}),outputSchema:L$.object({contentType:L$.string().optional(),contentLength:L$.number(),lastModified:L$.string(),etag:L$.string(),metadata:L$.record(L$.string(),L$.string()).optional()}),handler:async(Y)=>{let Q=Y,J=J81(G,Q.key),W=await E_$(J);return{contentType:X11(Q.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:A_$(J,W.mtime,W.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:L$.object({key:L$.string(),expiresIn:L$.number().optional()}),outputSchema:L$.object({url:L$.string(),expiresIn:L$.number()}),handler:async(Y)=>{let Q=Y,J=Q.expiresIn??B_$;return{url:D_$(Z,G,Q.key,J,"GET"),expiresIn:J}}},{name:"PUT_PRESIGNED_URL",description:"Generate a presigned URL for uploading a file to local storage",inputSchema:L$.object({key:L$.string(),expiresIn:L$.number().optional(),contentType:L$.string().optional()}),outputSchema:L$.object({url:L$.string(),expiresIn:L$.number()}),handler:async(Y)=>{let Q=Y,J=Q.expiresIn??B_$;return{url:D_$(Z,G,Q.key,J,"PUT"),expiresIn:J}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:L$.object({key:L$.string()}),outputSchema:L$.object({success:L$.boolean(),key:L$.string()}),handler:async(Y)=>{let Q=Y,J=J81(G,Q.key);try{return await O_$(J),{success:!0,key:Q.key}}catch{return{success:!1,key:Q.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:L$.object({keys:L$.array(L$.string()).max(1000)}),outputSchema:L$.object({deleted:L$.array(L$.string()),errors:L$.array(L$.object({key:L$.string(),message:L$.string()}))}),handler:async(Y)=>{let Q=Y,J=[],W=[];return await Promise.all(Q.keys.map(async(K)=>{let N=J81(G,K);try{await O_$(N),J.push(K)}catch(H){W.push({key:K,message:H instanceof Error?H.message:"Unknown error"})}})),{deleted:J,errors:W}}}]}async function K81($,Z,X){let G=R_$(Z,X),Y=new JW({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:s6});for(let J of G){let W="shape"in J.inputSchema?J.inputSchema.shape:L$.object({}).shape,K=J.outputSchema&&"shape"in J.outputSchema?J.outputSchema.shape:L$.object({}).shape;Y.registerTool(J.name,{description:J.description??"",inputSchema:W,outputSchema:K,annotations:J.annotations,_meta:J._meta},async(N)=>{try{let H=await J.handler(N);return{content:[{type:"text",text:JSON.stringify(H)}],structuredContent:H}}catch(H){return{content:[{type:"text",text:`Error: ${H.message}`}],isError:!0}}})}let Q=new yX({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await Y.connect(Q),gQ(Y,Q,$,"mcp:dev-assets")}async function I_$($,Z,X,G){let Q=R_$(X,G).find((J)=>J.name===$);if(!Q)return{content:[{type:"text",text:`Tool not found: ${$}`}],isError:!0};try{let J=await Q.handler(Z);return{content:[{type:"text",text:JSON.stringify(J)}]}}catch(J){return{content:[{type:"text",text:J instanceof Error?J.message:String(J)}],isError:!0}}}var z$6="./data/assets",B_$=3600,z_$,q_$;var M_$=B(()=>{V$();Ky();u8();$l();bV();PX();eL0();z_$=new D1;z_$.all("/",async($)=>{let Z=$.get("studioContext"),X=new URL($.req.url),G=`${X.protocol}//${X.host}`;return K81($.req.raw,Z,G)});q_$=z_$});var k_$={};N4(k_$,{mountDevRoutes:()=>P$6});function P$6($,Z){$.all("/mcp/:connectionId{.*_dev-assets$}",Z,async(G)=>{let Y=G.get("studioContext"),Q=new URL(G.req.url),J=`${Q.protocol}//${Q.host}`;return K81(G.req.raw,Y,J)}),$.all("/mcp/:connectionId{.*_dev-assets$}/call-tool/:toolName",Z,async(G)=>{let Y=G.get("studioContext"),Q=new URL(G.req.url),J=`${Q.protocol}//${Q.host}`,W=G.req.param("toolName");if(!W)return G.json({error:"Missing tool name"},400);let K=await G.req.json(),N=await I_$(W,K,Y,J);if(N.isError)return G.json(N.content,500);return G.json(N.content)}),$.use("/mcp/dev-assets",Z),$.route("/mcp/dev-assets",q_$);let X=new D1;X.use("*",M3({mountPath:"/api/dev-assets"})),X.route("/",sL0({orgFromPath:!1})),$.route("/api/dev-assets",X)}var S_$=B(()=>{u8();t01();eL0();M_$()});import{sql as A$6}from"kysely";import{randomUUID as V_$}from"crypto";import{z as T$6}from"zod";async function I$6($){let Z=new Date().toISOString(),X=V_$(),G=x4.SELF($.organizationId),Y="registry.publish_request.created",Q={requestId:$.request.id,requestedId:$.request.requested_id,title:$.request.title,status:$.request.status,createdAt:$.request.created_at,requester:{name:$.request.requester_name,email:$.request.requester_email}};await $.db.insertInto("events").values({id:X,organization_id:$.organizationId,type:"registry.publish_request.created",source:G,specversion:"1.0",subject:$.request.id,time:Z,datacontenttype:"application/json",dataschema:null,data:JSON.stringify(Q),cron:null,status:"pending",attempts:0,last_error:null,next_retry_at:null,created_at:Z,updated_at:Z}).execute();let J=await $.db.selectFrom("event_subscriptions").select(["id"]).where("organization_id","=",$.organizationId).where("enabled","=",1).where("event_type","=","registry.publish_request.created").where((W)=>W.or([W("publisher","is",null),W("publisher","=",G)])).execute();if(J.length>0)await $.db.insertInto("event_deliveries").values(J.map((W)=>({id:V_$(),event_id:X,subscription_id:W.id,status:"pending",attempts:0,last_error:null,delivered_at:null,next_retry_at:null,created_at:Z}))).execute();try{await A$6`SELECT
2726
2726
  pg_notify('studio_events', ${X}),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "decocms",
3
- "version": "4.177.1",
3
+ "version": "4.177.2",
4
4
  "description": "Deco CMS — Self-hostable MCP Gateway for managing AI connections and tools",
5
5
  "author": "Deco team",
6
6
  "repository": {