decocms 4.150.4 → 4.150.6

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 (221) hide show
  1. package/dist/client/assets/{AlertCircle-DTjquTrK.js → AlertCircle-BLe8hWH4.js} +1 -1
  2. package/dist/client/assets/{AreaChart-BXmrHuOS.js → AreaChart-zSNFFwAC.js} +1 -1
  3. package/dist/client/assets/{ArrowUp-C_RbLm19.js → ArrowUp-Cg1PcxSw.js} +1 -1
  4. package/dist/client/assets/{ArrowUpRight-Bgytz22C.js → ArrowUpRight-BJwCcOxQ.js} +1 -1
  5. package/dist/client/assets/{Check-Dns2c6Pe.js → Check-C66d-U6n.js} +1 -1
  6. package/dist/client/assets/{CheckCircle-moO4E3Pd.js → CheckCircle-DYRXAM_e.js} +1 -1
  7. package/dist/client/assets/{ChevronDown-Tys9SsIT.js → ChevronDown-Mb4ZiCqq.js} +1 -1
  8. package/dist/client/assets/{ChevronRight-ClNdXo6E.js → ChevronRight-DZ1xgPBq.js} +1 -1
  9. package/dist/client/assets/{ChevronUp-B8jNRGSm.js → ChevronUp-_ibroypu.js} +1 -1
  10. package/dist/client/assets/{Copy01-CU-w216i.js → Copy01-hjh64NAj.js} +1 -1
  11. package/dist/client/assets/{CpuChip01-CuupaCsN.js → CpuChip01-Dv6wDxgu.js} +1 -1
  12. package/dist/client/assets/{DotsVertical-01u7hyT5.js → DotsVertical-BThLCenq.js} +1 -1
  13. package/dist/client/assets/{Eye-B6QNwZfk.js → Eye-ByQOJZ4X.js} +1 -1
  14. package/dist/client/assets/{FilterLines-BRMYqGE1.js → FilterLines-D4Tyxb8r.js} +1 -1
  15. package/dist/client/assets/{HardDrive-IIAfnN7r.js → HardDrive-DypKeC1Y.js} +1 -1
  16. package/dist/client/assets/{Key01-D56HyrYp.js → Key01-BD-ODMFn.js} +1 -1
  17. package/dist/client/assets/{LayoutLeft-CPGTnCZU.js → LayoutLeft-CGUVeIhe.js} +1 -1
  18. package/dist/client/assets/{LinkExternal01-dNR13sFy.js → LinkExternal01-CGfs8ZfX.js} +1 -1
  19. package/dist/client/assets/{LogOut01-C07Nl-bH.js → LogOut01-Dur6OZCF.js} +1 -1
  20. package/dist/client/assets/{Monitor01-Ubwy69Fy.js → Monitor01-BG-C4aqq.js} +1 -1
  21. package/dist/client/assets/{Palette-hMb2kP_c.js → Palette-BE2kpJnA.js} +1 -1
  22. package/dist/client/assets/{Play-BL78n60V.js → Play-DPa1p0I9.js} +1 -1
  23. package/dist/client/assets/{Plus-B3gJnzuO.js → Plus-CNk8H3z9.js} +1 -1
  24. package/dist/client/assets/{SearchLg-DhvOuE0-.js → SearchLg-BlmiBvj_.js} +1 -1
  25. package/dist/client/assets/{SearchMd-BLYySQIw.js → SearchMd-6tES9q7B.js} +1 -1
  26. package/dist/client/assets/{Settings02-BFa2mTNh.js → Settings02-CDwBMb94.js} +1 -1
  27. package/dist/client/assets/{Shield01-CZo9_r2S.js → Shield01-BdlfnX3J.js} +1 -1
  28. package/dist/client/assets/{Star01-C9x3Su1w.js → Star01-DqQG9zSG.js} +1 -1
  29. package/dist/client/assets/{Stars01-CC0wV3Nx.js → Stars01-p7fciFaR.js} +1 -1
  30. package/dist/client/assets/{Stars02-Cb-iJvXW.js → Stars02-CbbZeO5L.js} +1 -1
  31. package/dist/client/assets/{Sun-CcONFEfR.js → Sun-BeK9pDU1.js} +1 -1
  32. package/dist/client/assets/{SwitchHorizontal01-Cx37rdU2.js → SwitchHorizontal01-Bxci5qnO.js} +1 -1
  33. package/dist/client/assets/{Tool01-D7iuvGFJ.js → Tool01-Y-Kb7S1w.js} +1 -1
  34. package/dist/client/assets/{Tool02-ByjOLKI2.js → Tool02-DC3_zn6i.js} +1 -1
  35. package/dist/client/assets/{Trash01-CiPGnldi.js → Trash01-Dr-s3vUw.js} +1 -1
  36. package/dist/client/assets/{TrendUp01-lA0Lvdp_.js → TrendUp01-BYik_ZI1.js} +1 -1
  37. package/dist/client/assets/{Upload01-OX7F4voU.js → Upload01-CVdJhkzw.js} +1 -1
  38. package/dist/client/assets/{User01-YOmoXJGu.js → User01-BgWQdt24.js} +1 -1
  39. package/dist/client/assets/{Users01-BeeYOzxV.js → Users01-D70wWsAK.js} +1 -1
  40. package/dist/client/assets/{Users03-B5s8YvRc.js → Users03-BW6KqpP7.js} +1 -1
  41. package/dist/client/assets/{X-DBOS7r3S.js → X-ChpzsfaC.js} +1 -1
  42. package/dist/client/assets/{XCircle-DUjAvWnb.js → XCircle-DVtPpos3.js} +1 -1
  43. package/dist/client/assets/{XClose-uNckWCz9.js → XClose-c42AM-jK.js} +1 -1
  44. package/dist/client/assets/{Zap-BLRYQTIt.js → Zap-IHN5VQ6e.js} +1 -1
  45. package/dist/client/assets/{ZapSquare-xmkoMn7X.js → ZapSquare-B0bqUfXv.js} +1 -1
  46. package/dist/client/assets/{access-gate-XVhbpoxy.js → access-gate-hsU5hsww.js} +1 -1
  47. package/dist/client/assets/{add-section-modal-2gWJRg19.js → add-section-modal-DOM_v8i2.js} +1 -1
  48. package/dist/client/assets/{agent-icon-CAUHBfW4.js → agent-icon-CS2thkw6.js} +1 -1
  49. package/dist/client/assets/{agents-list-B3KIIZ8c.js → agents-list-VTum7HGR.js} +1 -1
  50. package/dist/client/assets/{ai-providers-Bgy7BySr.js → ai-providers-Bz8X3nke.js} +1 -1
  51. package/dist/client/assets/{alert-CZEzrgN2.js → alert-BYB5iWsw.js} +1 -1
  52. package/dist/client/assets/{alert-dialog-D4-tJrWc.js → alert-dialog-2QLzpWDM.js} +1 -1
  53. package/dist/client/assets/{app-editor-CQh1Mxgi.js → app-editor-cE6i3Pwt.js} +1 -1
  54. package/dist/client/assets/{auth-DLvKR-oW.js → auth-CvbPW4WE.js} +1 -1
  55. package/dist/client/assets/{auth-catchall-SxF2tMT6.js → auth-catchall-DqH9z8eD.js} +1 -1
  56. package/dist/client/assets/{auth-entry-D0vXB9U-.js → auth-entry-C_4vtM3S.js} +1 -1
  57. package/dist/client/assets/{auth-split-layout-XrKLbaYe.js → auth-split-layout-BLjSz4D0.js} +1 -1
  58. package/dist/client/assets/{authenticate-and-persist-oauth-CPUxemKr.js → authenticate-and-persist-oauth-Di-zOmLg.js} +1 -1
  59. package/dist/client/assets/{automation-list-row-C1QkJRmc.js → automation-list-row-mxre20rZ.js} +1 -1
  60. package/dist/client/assets/{automation-runs-BP2HQSMl.js → automation-runs-D72-Ieqb.js} +1 -1
  61. package/dist/client/assets/{automations-2Z80LrOL.js → automations-BHq6qkwl.js} +1 -1
  62. package/dist/client/assets/{avatar-Cp11uPnq.js → avatar-DF6rgq2x.js} +1 -1
  63. package/dist/client/assets/{badge-DZEFMINc.js → badge-C-FU_V43.js} +1 -1
  64. package/dist/client/assets/{block-document-DJaxeaHu.js → block-document-CAxm-bC8.js} +1 -1
  65. package/dist/client/assets/{brand-context-BQLwG1sk.js → brand-context-CvWtidrl.js} +1 -1
  66. package/dist/client/assets/{buckets-BTjJCtaA.js → buckets-ETgLeW5L.js} +1 -1
  67. package/dist/client/assets/{bulk-category-panel-BE_Fi8je.js → bulk-category-panel-PT0QysBP.js} +1 -1
  68. package/dist/client/assets/{calendar-d9OJELhO.js → calendar-BaJa4r0a.js} +1 -1
  69. package/dist/client/assets/{capability-load-error-CLrQQQL6.js → capability-load-error-D2D-Kxx5.js} +1 -1
  70. package/dist/client/assets/{card-B1SlHP18.js → card-BQZ-t3Pi.js} +1 -1
  71. package/dist/client/assets/{category-editor-DmHVdEM4.js → category-editor-B9ISNbVa.js} +1 -1
  72. package/dist/client/assets/{chat-context-BSsWMhXR.js → chat-context-DfmTavsV.js} +1 -1
  73. package/dist/client/assets/{checkbox-blTthb_w.js → checkbox-Dv9bZAuW.js} +1 -1
  74. package/dist/client/assets/{cli-auth-success-2PYSple7.js → cli-auth-success-DIiCJIBm.js} +1 -1
  75. package/dist/client/assets/{collection-detail-DmkqZ5KP.js → collection-detail-Bz5jauoA.js} +1 -1
  76. package/dist/client/assets/{collection-display-button-BSkmpV6C.js → collection-display-button-Ba9EcYnD.js} +1 -1
  77. package/dist/client/assets/{collection-search-lN6Cz3Vq.js → collection-search-f15iG83W.js} +1 -1
  78. package/dist/client/assets/{collection-table-wrapper-CGVWvOoV.js → collection-table-wrapper-B3ZegJpO.js} +1 -1
  79. package/dist/client/assets/{collection-tabs-B_bEWIMS.js → collection-tabs-nLQy5eke.js} +1 -1
  80. package/dist/client/assets/{command-DJEzQEc-.js → command-CmWoMr4U.js} +1 -1
  81. package/dist/client/assets/{commerce-onboarding-Bn3zcYnn.js → commerce-onboarding-Deklvj45.js} +1 -1
  82. package/dist/client/assets/{companions-core-X9hhII14.js → companions-core-Cf6202Jo.js} +1 -1
  83. package/dist/client/assets/{connect-M7szAnSj.js → connect-CaWE-rqh.js} +1 -1
  84. package/dist/client/assets/{connection-D5e6QSqD.js → connection-DSlXVeey.js} +1 -1
  85. package/dist/client/assets/{connection-card-CdR4Hjjd.js → connection-card-BArHW6gK.js} +1 -1
  86. package/dist/client/assets/{connection-detail-_TM8VOyY.js → connection-detail-CeStws1e.js} +1 -1
  87. package/dist/client/assets/{connection-form-helpers-CMLafiF2.js → connection-form-helpers-DWzqf1F5.js} +1 -1
  88. package/dist/client/assets/{connections-B71Rrl76.js → connections-BvaTpQki.js} +1 -1
  89. package/dist/client/assets/{decopilot-sse-pool-DvpSsfO0.js → decopilot-sse-pool-BlpaGxI7.js} +1 -1
  90. package/dist/client/assets/{dialog-BKsM-_ty.js → dialog-DbLZjJ-9.js} +1 -1
  91. package/dist/client/assets/{domain-settings-KnXPsIKC.js → domain-settings-C0FIYFx6.js} +1 -1
  92. package/dist/client/assets/{drawer-C3ySVHPO.js → drawer-DqRAXdxV.js} +1 -1
  93. package/dist/client/assets/{dropdown-menu-BOosQCKo.js → dropdown-menu-BcDEmiF4.js} +1 -1
  94. package/dist/client/assets/{empty-state-Yd3uikaK.js → empty-state-BwsCqisr.js} +1 -1
  95. package/dist/client/assets/{extract-connection-data-DBKBY2DO.js → extract-connection-data-BVj50AbC.js} +1 -1
  96. package/dist/client/assets/{file-explorer-tSZaxorQ.js → file-explorer-BAM6q7qM.js} +1 -1
  97. package/dist/client/assets/{form-7PUQGVWb.js → form-B6SAo7xa.js} +1 -1
  98. package/dist/client/assets/{general-BQLAilMm.js → general-FquR5YpX.js} +1 -1
  99. package/dist/client/assets/{github-repo-picker-LSrDvfra.js → github-repo-picker-H2CtmDj3.js} +1 -1
  100. package/dist/client/assets/{hooks-dXrX1ifh.js → hooks-DMz5Ig14.js} +1 -1
  101. package/dist/client/assets/{index-DhUACU_F.js → index-9TuQTAfe.js} +1 -1
  102. package/dist/client/assets/{index-BXpMNetJ.js → index-BHoyTAiG.js} +1 -1
  103. package/dist/client/assets/{index-fhesSFXa.js → index-BUc2Fsln.js} +1 -1
  104. package/dist/client/assets/{index-k5RBNCDf.js → index-BgYlDWUx.js} +1 -1
  105. package/dist/client/assets/{index-THgqetzw.js → index-BrHasj-a.js} +4 -4
  106. package/dist/client/assets/{index-C-FF6Oyi.js → index-C-rmoXp2.js} +3 -3
  107. package/dist/client/assets/{index-FipZjjSd.js → index-CbxUyJ4A.js} +1 -1
  108. package/dist/client/assets/{index-DFZL_gYC.js → index-DF4Edyiy.js} +1 -1
  109. package/dist/client/assets/{index-KbL_drb4.js → index-DGfnINoz.js} +1 -1
  110. package/dist/client/assets/{index-Dgu2Vpgr.js → index-DT4U63d1.js} +37 -37
  111. package/dist/client/assets/{index-B7E5jDaS.js → index-DYqx86dP.js} +1 -1
  112. package/dist/client/assets/{index-redirect-C7v0tQkO.js → index-redirect-CcSdacM5.js} +1 -1
  113. package/dist/client/assets/{input-lozpQHHu.js → input-D9XG9vfc.js} +1 -1
  114. package/dist/client/assets/{integration-icon-DLqzR71a.js → integration-icon-oacvQdgy.js} +1 -1
  115. package/dist/client/assets/{invite-member-dialog-BK8_nU5D.js → invite-member-dialog-CZO4PPtL.js} +1 -1
  116. package/dist/client/assets/{label-BHh6uR9Q.js → label-DQudYnWp.js} +1 -1
  117. package/dist/client/assets/{layout-CVO9-v6r.js → layout-CcstRZk4.js} +1 -1
  118. package/dist/client/assets/{login-BO1GPVdu.js → login-BVZLYPuM.js} +1 -1
  119. package/dist/client/assets/{mcp-oauth-B-mM8bX2.js → mcp-oauth-Ds135nEM.js} +1 -1
  120. package/dist/client/assets/{members-BZzgkWfy.js → members-DfMgYnQA.js} +1 -1
  121. package/dist/client/assets/{monaco-editor-Cfqzc-8w.js → monaco-editor-CPJ-bmlQ.js} +1 -1
  122. package/dist/client/assets/{monitoring-stats-row-BzXx_eKv.js → monitoring-stats-row-cYTWmM72.js} +1 -1
  123. package/dist/client/assets/{multi-select-9hlGjhzz.js → multi-select-PSfFytas.js} +1 -1
  124. package/dist/client/assets/{oauth-callback-DTtEChwC.js → oauth-callback-Nx47Y29E.js} +1 -1
  125. package/dist/client/assets/{oauth-callback-ai-provider-CQ_u2Jm1.js → oauth-callback-ai-provider-BitkQ57B.js} +1 -1
  126. package/dist/client/assets/{onboarding-BzhQXIUY.js → onboarding-D6Trjyyf.js} +1 -1
  127. package/dist/client/assets/{org-install-_nJomANu.js → org-install-D-ttSd5u.js} +1 -1
  128. package/dist/client/assets/{org-layout-gfvnKDyg.js → org-layout-BCxldWXd.js} +1 -1
  129. package/dist/client/assets/{organization-choice-fz82Zhx8.js → organization-choice-szbrkMio.js} +1 -1
  130. package/dist/client/assets/{orgs-OO6LdEDN.js → orgs-QIpNnvu3.js} +1 -1
  131. package/dist/client/assets/{page-seo-form-FEC9DgJs.js → page-seo-form-D4KBoA7N.js} +1 -1
  132. package/dist/client/assets/{popover-CXjrMSw4.js → popover-DAEX4Y8p.js} +1 -1
  133. package/dist/client/assets/{post-editor-DaAB3sPQ.js → post-editor-3C7Y9Upz.js} +1 -1
  134. package/dist/client/assets/{primitives-DLg7fu6K.js → primitives-DFi3fGsD.js} +1 -1
  135. package/dist/client/assets/{profile-CKqNnO3L.js → profile-CxU_rshG.js} +1 -1
  136. package/dist/client/assets/project-app-view-C2z0eR_A.js +1 -0
  137. package/dist/client/assets/record-editor-Ddn7EOUp.js +1 -0
  138. package/dist/client/assets/{redirect-editor-Dgn7lqDs.js → redirect-editor-DyURxmPI.js} +1 -1
  139. package/dist/client/assets/registry-Bje1Q7Yo.js +2 -0
  140. package/dist/client/assets/{registry-layout-D46I0UMg.js → registry-layout-C5nuolrz.js} +1 -1
  141. package/dist/client/assets/{reports-aojMnw1Q.js → reports-CZKPWZTL.js} +1 -1
  142. package/dist/client/assets/{require-capability-jlNhkTb6.js → require-capability-BdWfHRQd.js} +1 -1
  143. package/dist/client/assets/{required-auth-layout-R3pnumOj.js → required-auth-layout-uhFDE4fT.js} +1 -1
  144. package/dist/client/assets/{reset-password-D0q-th4_.js → reset-password-CG9gn86T.js} +1 -1
  145. package/dist/client/assets/{roles-DwHjRTS_.js → roles-CghOtqeh.js} +1 -1
  146. package/dist/client/assets/{search-input-mQjjHRqZ.js → search-input-B63zCUNX.js} +1 -1
  147. package/dist/client/assets/{secrets-D6sNIB6g.js → secrets-CS_Egnum.js} +1 -1
  148. package/dist/client/assets/{sections-editor-CPNQXr9a.js → sections-editor-CPA3S634.js} +1 -1
  149. package/dist/client/assets/{select-C1_7MrrX.js → select-BusQzL5-.js} +1 -1
  150. package/dist/client/assets/{select-model-BXeJJeNe.js → select-model-38Tyj_l5.js} +1 -1
  151. package/dist/client/assets/{self-tool-result-rdFZlvBc.js → self-tool-result-DfsSCdEs.js} +1 -1
  152. package/dist/client/assets/{seo-editor-BtBWG2vp.js → seo-editor-CFcy2J6C.js} +1 -1
  153. package/dist/client/assets/{settings-layout-BscWQQeN.js → settings-layout-DNTc_fHd.js} +1 -1
  154. package/dist/client/assets/{settings-section-Ed6F2WGu.js → settings-section-CLvOHToU.js} +1 -1
  155. package/dist/client/assets/{shell-controls-AtSbxQ9D.js → shell-controls-DT1if_K1.js} +1 -1
  156. package/dist/client/assets/{shell-layout-CUR6yOq-.js → shell-layout-C43emkJF.js} +1 -1
  157. package/dist/client/assets/{sidebar-BGbzDXr_.js → sidebar-DZHQWxPw.js} +1 -1
  158. package/dist/client/assets/{skeleton-vF_x3eWZ.js → skeleton-CPINkfgU.js} +1 -1
  159. package/dist/client/assets/{spinner-elZlai98.js → spinner-BGohqj-w.js} +1 -1
  160. package/dist/client/assets/{sso-B1YEXDzc.js → sso-C7oaxsKD.js} +1 -1
  161. package/dist/client/assets/{store-hKyCRaph.js → store-BAow9F2_.js} +1 -1
  162. package/dist/client/assets/store-registry-C-fRZvWf.js +2 -0
  163. package/dist/client/assets/{studio-tools-BvDeY2Lo.js → studio-tools-BZL4IdEq.js} +1 -1
  164. package/dist/client/assets/{switch-Du2_QzTg.js → switch-Dtim1lDy.js} +1 -1
  165. package/dist/client/assets/{tab-id-JenI7Odu.js → tab-id-B8fIRhZg.js} +1 -1
  166. package/dist/client/assets/{table-x2c6Pdi4.js → table-BZZiOHV0.js} +1 -1
  167. package/dist/client/assets/{tabs-mJBYrWlc.js → tabs-BUEtiIEa.js} +1 -1
  168. package/dist/client/assets/{textarea-IxMMo1Wd.js → textarea-By9gdj0r.js} +1 -1
  169. package/dist/client/assets/{toggle-group-BZBw0hKn.js → toggle-group-DPa8iGyH.js} +1 -1
  170. package/dist/client/assets/{toolbar-BKdNDIaH.js → toolbar-xKH3rerl.js} +1 -1
  171. package/dist/client/assets/{tooltip-ydp7540T.js → tooltip-C51ozFMJ.js} +1 -1
  172. package/dist/client/assets/{use-ai-providers-BKoVdYIR.js → use-ai-providers-xfQObWUq.js} +1 -1
  173. package/dist/client/assets/{use-automations-Cbph7N0j.js → use-automations-HiZ0OJsu.js} +1 -1
  174. package/dist/client/assets/{use-autosave-0ks8GWhg.js → use-autosave-a3exT1Oh.js} +1 -1
  175. package/dist/client/assets/{use-capability-ohi-NDa2.js → use-capability-hfeK2rgT.js} +1 -1
  176. package/dist/client/assets/{use-clock-tick-BWPSm4QE.js → use-clock-tick-HRDak-Z4.js} +1 -1
  177. package/dist/client/assets/{use-connection-B3zwqmOM.js → use-connection-C9ftdaPl.js} +1 -1
  178. package/dist/client/assets/{use-copy-CadQ4GTt.js → use-copy-DKrdP2qq.js} +1 -1
  179. package/dist/client/assets/{use-create-virtual-mcp-Dwjgmype.js → use-create-virtual-mcp-Cfde_O-Z.js} +1 -1
  180. package/dist/client/assets/{use-debounced-autosave-DZjx9e1o.js → use-debounced-autosave-vJk6nAvG.js} +1 -1
  181. package/dist/client/assets/{use-debounced-value-B7WDykY3.js → use-debounced-value-BMWvVnj9.js} +1 -1
  182. package/dist/client/assets/{use-deco-credits-D-OAu1B7.js → use-deco-credits-TNxZ8IBN.js} +1 -1
  183. package/dist/client/assets/{use-decopilot-events-_F542Ow4.js → use-decopilot-events-ClPx_NS9.js} +1 -1
  184. package/dist/client/assets/{use-delete-connection-DCYFUQQ9.js → use-delete-connection-D42R87ik.js} +1 -1
  185. package/dist/client/assets/{use-deployment-admin-BLsN25B5.js → use-deployment-admin-DF3Njh0u.js} +1 -1
  186. package/dist/client/assets/{use-file-configs-AU8ZBjy7.js → use-file-configs-OB2Ez-9j.js} +1 -1
  187. package/dist/client/assets/{use-infinite-scroll-Ca8lEh5t.js → use-infinite-scroll-BLfE5Zch.js} +1 -1
  188. package/dist/client/assets/{use-join-requests-C_AV2WPf.js → use-join-requests-CMkZLzRC.js} +1 -1
  189. package/dist/client/assets/{use-mcp-auth-status-C01Nvxgg.js → use-mcp-auth-status-D3fTJdZj.js} +1 -1
  190. package/dist/client/assets/{use-mcp-client-B3iWdLa8.js → use-mcp-client-BGDPULEx.js} +1 -1
  191. package/dist/client/assets/{use-mcp-tools-DJnHPzkz.js → use-mcp-tools-BrxjaRqS.js} +1 -1
  192. package/dist/client/assets/{use-members-CKdOjNRN.js → use-members-CM8j1Wbe.js} +1 -1
  193. package/dist/client/assets/{use-mobile-Dnz9IUlf.js → use-mobile-Dpl9vdlg.js} +1 -1
  194. package/dist/client/assets/{use-navigate-to-agent-DOL8zg4L.js → use-navigate-to-agent-tKspePKp.js} +1 -1
  195. package/dist/client/assets/{use-org-auth-client-UOYwn4Tw.js → use-org-auth-client-Eox-GIlJ.js} +1 -1
  196. package/dist/client/assets/{use-org-sso-oyqJGuYe.js → use-org-sso-BI-w8w9v.js} +1 -1
  197. package/dist/client/assets/{use-organization-roles-C8vIfGb-.js → use-organization-roles-ClqhOUA5.js} +1 -1
  198. package/dist/client/assets/{use-organization-settings-C5L3Xtp2.js → use-organization-settings-Cv0yKeck.js} +1 -1
  199. package/dist/client/assets/{use-registry-connections-BlstzWOE.js → use-registry-connections-DM8Erzs9.js} +1 -1
  200. package/dist/client/assets/{use-secrets-CufpBwD2.js → use-secrets-q5e7jrk4.js} +1 -1
  201. package/dist/client/assets/{use-status-sounds-G7ifNzp9.js → use-status-sounds-CADDlBST.js} +1 -1
  202. package/dist/client/assets/{use-tags-B3b9FAI4.js → use-tags-CslM5QGl.js} +1 -1
  203. package/dist/client/assets/{use-view-mode-D8yNzl-W.js → use-view-mode-D05AEdaH.js} +1 -1
  204. package/dist/client/assets/{use-virtual-mcp-B4IBQNll.js → use-virtual-mcp-Basz7IFM.js} +1 -1
  205. package/dist/client/assets/useInfiniteQuery-C1hAFEU9.js +1 -0
  206. package/dist/client/assets/{useQueries-Bf_u2aEG.js → useQueries-B9riC6Vz.js} +1 -1
  207. package/dist/client/assets/{useRouterState-8mB78CkW.js → useRouterState-CUJVIn2y.js} +1 -1
  208. package/dist/client/assets/useSuspenseInfiniteQuery-BReB8ctg.js +1 -0
  209. package/dist/client/assets/{users-DYkva5mS.js → users-BSzN3Sgu.js} +1 -1
  210. package/dist/client/assets/{variant-calendar-lkfMxqtr.js → variant-calendar-CCvZGYLm.js} +1 -1
  211. package/dist/client/assets/{view-mode-toggle-7lUC7xD-.js → view-mode-toggle-D1NAIkzU.js} +1 -1
  212. package/dist/client/index.html +1 -1
  213. package/dist/server/cli.js +5 -5
  214. package/dist/server/server.js +5 -5
  215. package/package.json +1 -1
  216. package/dist/client/assets/project-app-view-CUxC4D9q.js +0 -1
  217. package/dist/client/assets/record-editor-CjDlKsNP.js +0 -1
  218. package/dist/client/assets/registry-BVmFFYL8.js +0 -2
  219. package/dist/client/assets/store-registry-Bkh2WPCf.js +0 -2
  220. package/dist/client/assets/useInfiniteQuery-x5tDdtWN.js +0 -1
  221. package/dist/client/assets/useSuspenseInfiniteQuery-rZqLQHwD.js +0 -1
@@ -83448,7 +83448,7 @@ ${w}`;v(B);return}if(c(null,F),t.strategy==="count"){if($--,$===0)v()}if(t.strat
83448
83448
  `);function v(d){if(t===void 0)return!0;let D=yq(d),_=D&&yq(t)?bau(t):t,N=D?bau(d):Cau(d),Z=crt(_,N);return Z===""||!Z.startsWith("..")&&!lrt(Z)}return{upsert(d){f.run({$handle:d.handle,$status:d.status,$sandboxPath:d.sandboxPath,$port:d.port??null,$previewUrl:d.previewUrl??null,$repoCloneUrl:d.repoCloneUrl??null,$branch:d.branch??null,$projectName:d.projectName??null,$error:d.error??null,$now:Date.now()})},list(){return l.all().map(l6i)},reconcile(){let d=Date.now();for(let D of l.all().map(l6i)){if(!v(D.sandboxPath)){E.run({$handle:D.handle,$now:d});continue}if(!yq(D.sandboxPath)){c.run({$handle:D.handle,$now:d});continue}if(D.status==="spawning"||D.status==="ready"||D.status==="failed"||D.status==="missing")w.run({$handle:D.handle,$now:d})}return l.all().map(l6i)},prune(d){let D=[],_=[],N=this.reconcile();for(let Z of N){if(!v(Z.sandboxPath)){_.push({handle:Z.handle,sandboxPath:Z.sandboxPath,reason:"outside_root",deletedFiles:!1});continue}if(d.missing&&Z.status==="missing"){$.run({$handle:Z.handle}),D.push({handle:Z.handle,sandboxPath:Z.sandboxPath,reason:"missing",deletedFiles:!1});continue}if(!d.merged||!yq(Z.sandboxPath))continue;if(Z.branch===null||Z.branch.trim()===""){_.push({handle:Z.handle,sandboxPath:Z.sandboxPath,reason:"no_branch",deletedFiles:!1});continue}if(!K_(Z.sandboxPath,["rev-parse","--is-inside-work-tree"]).ok){_.push({handle:Z.handle,sandboxPath:Z.sandboxPath,reason:"git_unavailable",deletedFiles:!1});continue}let B=K_(Z.sandboxPath,["status","--porcelain"]);if(!B.ok){_.push({handle:Z.handle,sandboxPath:Z.sandboxPath,reason:"git_unavailable",deletedFiles:!1});continue}if(B.stdout.trim()!==""){_.push({handle:Z.handle,sandboxPath:Z.sandboxPath,reason:"dirty_worktree",deletedFiles:!1});continue}let F=qau(Z.sandboxPath,Z.branch);if(F===null){_.push({handle:Z.handle,sandboxPath:Z.sandboxPath,reason:"git_unavailable",deletedFiles:!1});continue}if(!F){_.push({handle:Z.handle,sandboxPath:Z.sandboxPath,reason:"branch_not_merged",deletedFiles:!1});continue}trt(Z.sandboxPath,{recursive:!0,force:!0}),$.run({$handle:Z.handle}),D.push({handle:Z.handle,sandboxPath:Z.sandboxPath,reason:"merged",deletedFiles:!0})}return{removed:D,skipped:_}},delete(d){$.run({$handle:d})},inspect(d){let D=h.get({$handle:d});if(D===null)return null;let _=l6i(D),N=0,Z=null;if(yq(_.sandboxPath)&&K_(_.sandboxPath,["rev-parse","--is-inside-work-tree"]).ok){let B=K_(_.sandboxPath,["status","--porcelain"]);if(B.ok){let F=B.stdout.trim();N=F===""?0:F.split(`
83449
83449
  `).length}if(_.branch!==null&&_.branch.trim()!=="")Z=qau(_.sandboxPath,_.branch)}return{handle:_.handle,branch:_.branch,sandboxPath:_.sandboxPath,dirtyCount:N,merged:Z}},close(){u.close()}}}var Kbi=()=>{};function vrt(i,u){return u?[["umount","-f",i]]:[["fusermount","-uz",i],["umount","-l",i]]}function rau(i,u){if(process.platform==="win32")return;for(let t of vrt(i,u))if(Bun.spawnSync(t,{stdout:"ignore",stderr:"ignore",timeout:5000}).exitCode===0)break}var mau=()=>{};import{existsSync as drt,readdirSync as Drt}from"fs";import{rm as _rt}from"fs/promises";import{join as eau}from"path";async function aau(i,u={}){let t=u.detach??Nrt,f=u.exists??drt,l=u.readdir??((w)=>Drt(w)),E=u.rm??((w)=>_rt(w,{recursive:!0,force:!0})),c=eau(i,"org");if(f(c))for(let w of l(c))t(eau(c,w));await E(i)}var Nrt=(i)=>rau(i,process.platform==="darwin");var oau=O(()=>{mau()});import{join as Ort}from"path";function sau(i){let u=i.purge??aau;return{stopSandbox(t){return i.provider.deleteSandbox(t)},inspectSandbox(t){return i.registry.inspect(t)},async removeSandbox(t){try{return await F1(async()=>{if(await i.provider.deleteSandbox(t),i.provider.hasHandle(t))throw Error("Can't delete \u2014 run in progress");let l=i.registry.inspect(t)?.sandboxPath??Ort(i.dataDir,"sandboxes",t);await u(l)},{maxAttempts:2,minTimeout:250,jitter:0}),i.registry.delete(t),{ok:!0}}catch(f){let l=f instanceof H6?f.cause:f;return{ok:!1,error:l instanceof Error?l.message:String(l)}}}}}var pau=O(()=>{Z4();oau()});import{randomBytes as Zrt}from"crypto";import{mkdir as Brt}from"fs/promises";import{createServer as Frt}from"net";import{join as grt}from"path";function iou(i,u){return Error(`sandbox failed to start: ${i}`,{cause:u})}function uou(i){if(!(i instanceof Error))return!1;return i.name==="TimeoutError"||/timed out|timeout|operation was aborted|aborted/i.test(i.message)}function tou(i){if(i instanceof Error){let u=i.cause;if(u instanceof Error&&u.message)return u.message;return i.message}return String(i)}function Urt(i){if(!i)return null;let u=i.trim().replace(/\/+$/,"");if(!u)return null;let t=u.split(/[/:]/).filter(Boolean).at(-1);if(!t)return null;return t.replace(/\.git$/i,"")||null}function Trt(i){return{repoCloneUrl:i.repo?.cloneUrl??null,branch:i.repo?.branch??null,projectName:Urt(i.repo?.cloneUrl)}}function fou(i){let u=i.maxSandboxes??20,t=new Map,f=i.pickPort??Art,l=i.fetchImpl??fetch,E=i.resolvePreviewUrl??((N,Z)=>`http://127.0.0.1:${Z}`),c=(N)=>grt(i.dataDir,"sandboxes",N),w=(N)=>{try{i.registry?.upsert(N)}catch(Z){console.warn(`[user-desktop] failed to persist sandbox lifecycle handle=${N.handle} status=${N.status}:`,Z)}},$=(N)=>{try{i.onEvent?.(N)}catch{}},h=async(N)=>{let Z=new AbortController,B=setTimeout(()=>Z.abort(),1500);try{let F=await l(`${N}/health`,{signal:Z.signal});if(!F.ok)console.warn(`[user-desktop] probe ${N}/health \u2192 ${F.status} (treating as dead)`);return F.ok}catch(F){return console.warn(`[user-desktop] probe ${N}/health failed: ${F instanceof Error?F.message:String(F)} (treating as dead)`),!1}finally{clearTimeout(B)}},v=(N)=>{console.warn(`[user-desktop] evicting dead daemon handle=${N.handle} port=${N.port}`);try{N.process.kill("SIGTERM")}catch{}if(t.get(N.handle)===N)t.delete(N.handle),w({handle:N.handle,status:"stopped",sandboxPath:c(N.handle),port:null,previewUrl:null,...N.registryMetadata,error:null}),$({handle:N.handle,phase:"evicted"})},d=new Map;function D(){if(t.size<u)return;let N=[...t.values()].filter((B)=>B.activeDispatchCount===0).sort((B,F)=>B.lastUsedAt-F.lastUsedAt);if(N.length===0){console.warn(`[user-desktop] at cap ${t.size}/${u} but every sandbox is pinned (active dispatch) \u2014 exceeding cap temporarily`);return}let Z=N[0];console.log(`[user-desktop] evicting LRU victim handle=${Z.handle} port=${Z.port} (cap ${u} reached, size=${t.size})`);try{Z.process.kill("SIGTERM")}catch{}t.delete(Z.handle),w({handle:Z.handle,status:"stopped",sandboxPath:c(Z.handle),port:null,previewUrl:null,...Z.registryMetadata,error:null}),$({handle:Z.handle,phase:"evicted"})}let _=async(N)=>{let Z=Trt(N),B=c(N.handle);w({handle:N.handle,status:"spawning",sandboxPath:B,port:null,previewUrl:null,...Z,error:null}),$({handle:N.handle,phase:"spawning",sandboxPath:B,projectName:Z.projectName,branch:Z.branch}),D();let F,g=null,U;try{await Brt(B,{recursive:!0}),console.log(`[user-desktop] ensure handle=${N.handle} repo=${N.repo?.cloneUrl??"(none)"} branch=${N.repo?.branch??"(none)"} runtime=${N.workload?.runtime??"(autodetect)"} pm=${N.workload?.packageManager??"(autodetect)"}`),U=Zrt(24).toString("hex");let[k,I]=await Promise.all([f(),f()]);F=k,console.log(`[user-desktop] spawn handle=${N.handle} port=${F} devPort=${I} workdir=${B}`),g=await Promise.resolve(i.spawnDaemon({workdir:B,handle:N.handle,port:F,daemonToken:U,offloadAllowedHosts:N.offloadAllowedHosts??[],offloadAllowSameHostDev:N.offloadAllowSameHostDev??!1,orgFsConfigJson:N.orgFsConfigJson}));try{await i.waitForHealth(F)}catch(j){throw iou("the sandbox didn't come online in time",j)}console.log(`[user-desktop] healthy handle=${N.handle} port=${F} \u2014 posting config`);try{await i.postConfig(F,I,{repo:N.repo,workload:N.workload,operator:N.operator},U)}catch(j){throw iou(uou(j)?"configuration timed out":"the sandbox rejected its configuration",j)}}catch(k){if((uou(k)?console.warn:console.error)(`[user-desktop] sandbox bring-up failed handle=${N.handle} port=${F??"(none)"}${g?" (killing daemon)":""}:`,k),g)try{g.kill("SIGKILL")}catch{}throw $({handle:N.handle,phase:"failed",error:tou(k),sandboxPath:B,projectName:Z.projectName,branch:Z.branch}),w({handle:N.handle,status:"failed",sandboxPath:B,port:null,previewUrl:null,...Z,error:tou(k)}),k}if(!g||F===void 0)throw Error("sandbox bring-up invariant violated");let T=`http://127.0.0.1:${F}`,A=E(N.handle,F);console.log(`[user-desktop] ready handle=${N.handle} port=${F} sandboxApiUrl=${T} previewUrl=${A}`);let G={handle:N.handle,port:F,process:g,sandboxApiUrl:T,previewUrl:A,lastUsedAt:Date.now(),activeDispatchCount:0,daemonToken:U,registryMetadata:Z};if(t.set(N.handle,G),w({handle:N.handle,status:"ready",sandboxPath:B,port:F,previewUrl:A,...Z,error:null}),$({handle:N.handle,phase:"ready",port:F,previewUrl:A,sandboxPath:B,projectName:Z.projectName,branch:Z.branch}),g.exited)g.exited.then(()=>{if(t.get(N.handle)===G)console.warn(`[user-desktop] daemon process exited unexpectedly handle=${N.handle} port=${F} \u2014 removing from cache`),t.delete(N.handle),w({handle:N.handle,status:"stopped",sandboxPath:B,port:null,previewUrl:null,...Z,error:null}),$({handle:N.handle,phase:"evicted"});else console.log(`[user-desktop] daemon process exited handle=${N.handle} port=${F} (already replaced/removed)`)});return{sandboxApiUrl:T,previewUrl:A,port:F}};return{async ensureSandbox(N){let Z=t.get(N.handle);if(Z){if(await h(Z.sandboxApiUrl))return console.log(`[user-desktop] cache hit handle=${N.handle} port=${Z.port} (alive)`),Z.lastUsedAt=Date.now(),{sandboxApiUrl:Z.sandboxApiUrl,previewUrl:Z.previewUrl,port:Z.port};console.warn(`[user-desktop] cache stale handle=${N.handle} port=${Z.port} \u2014 respawning`),v(Z)}let B=d.get(N.handle);if(B)return console.log(`[user-desktop] joining in-flight ensure handle=${N.handle}`),B;let F=_(N).finally(()=>{d.delete(N.handle)});return d.set(N.handle,F),F},proxyPort(N){let Z=t.get(N);if(Z)Z.lastUsedAt=Date.now();return Z?.port??null},getDaemonToken(N){return t.get(N)?.daemonToken??null},hasHandle(N){return t.has(N)||d.has(N)},recordHit(N){let Z=t.get(N);if(Z)Z.lastUsedAt=Date.now()},acquireDispatch(N){let Z=t.get(N);if(!Z)return()=>{};Z.activeDispatchCount+=1;let B=!1;return()=>{if(B)return;B=!0;let F=t.get(N);if(F)F.activeDispatchCount=Math.max(0,F.activeDispatchCount-1)}},listSandboxes(){return[...t.values()]},async deleteSandbox(N){let Z=t.get(N);if(!Z){console.log(`[user-desktop] delete handle=${N} (not found, no-op)`);return}if(Z.activeDispatchCount>0){console.warn(`[user-desktop] delete handle=${N} port=${Z.port} REFUSED \u2014 ${Z.activeDispatchCount} active dispatch(es) in flight`);return}console.log(`[user-desktop] delete handle=${N} port=${Z.port}`);try{Z.process.kill("SIGTERM")}catch{}t.delete(N),w({handle:N,status:"stopped",sandboxPath:c(N),port:null,previewUrl:null,repoCloneUrl:null,branch:null,projectName:null,error:null}),$({handle:N,phase:"deleted"})},async shutdown(){console.log(`[user-desktop] shutdown \u2014 killing ${t.size} sandbox(es)`);for(let N of t.values())try{N.process.kill("SIGTERM")}catch{}t.clear()}}}function Art(){return new Promise((i,u)=>{let t=Frt();t.unref(),t.on("error",u),t.listen(0,"127.0.0.1",()=>{let f=t.address();if(f&&typeof f==="object"){let l=f.port;t.close(()=>i(l))}else t.close(()=>u(Error("could not allocate port")))})})}var lou=()=>{};import{randomUUID as yrt}from"crypto";import{hostname as Prt}from"os";async function Eou(i){let u=Prt()||void 0;i.monitor?.onMachine?.(u??"this machine");let t=HMu(i.dataDir,{outFd:i.logFd,perSandboxLog:i.perSandboxLogs,hotReload:i.hotReload}),f=c6i({path:E6i(i.dataDir),managedSandboxRoot:`${i.dataDir}/sandboxes`}),l=!1,E=()=>{if(l)return;l=!0;try{f.close()}catch{}};try{let c=0,w=fou({dataDir:i.dataDir,registry:f,resolvePreviewUrl:(j,C)=>c>0?`http://${j}.localhost:${c}`:`http://127.0.0.1:${C}`,spawnDaemon:async(j)=>{let C={DAEMON_BOOT_ID:yrt(),APP_ROOT:j.workdir,PROXY_PORT:String(j.port),DAEMON_TOKEN:j.daemonToken,OFFLOAD_ALLOWED_HOSTS:j.offloadAllowedHosts.join(","),...j.offloadAllowSameHostDev?{OFFLOAD_ALLOW_SAME_HOST_DEV:"1"}:{}};if(j.orgFsConfigJson){let S=await bMu(i.dataDir);if(S)C.ORGFS_CONFIG=j.orgFsConfigJson,C.ORGFS_RCLONE_PATH=S}let K=await t({workdir:j.workdir,env:C,daemonPort:j.port});return{port:j.port,kill:(S)=>K.kill(S),exited:K.exited.then(()=>{return})}},postConfig:async(j,C,K,S)=>{let r={port:C};if(K.workload)r.runtime=K.workload.runtime,r.packageManager={name:K.workload.packageManager,...K.workload.packageManagerPath?{path:K.workload.packageManagerPath}:{}};let Q={application:r},ui=gh(K.operator??null);if(ui)Q.operator=ui;if(K.repo)Q.git={repository:{cloneUrl:K.repo.cloneUrl,branch:K.repo.branch,...K.repo.submoduleCredentials&&K.repo.submoduleCredentials.length>0?{submoduleCredentials:K.repo.submoduleCredentials}:{}},...K.repo.userName&&K.repo.userEmail?{identity:{userName:K.repo.userName,userEmail:K.repo.userEmail}}:{}};await T_(`http://127.0.0.1:${j}`,S,Q)},waitForHealth:async(j)=>{await lli(`http://127.0.0.1:${j}`)},maxSandboxes:20,onEvent:i.monitor?.onEvent}),$=await Xau({port:i.port,lookupSandboxPort:(j)=>w.proxyPort(j)});c=$.port,console.log(`Local ingress listening on http://127.0.0.1:${$.port} (use http://<handle>.localhost:${$.port}/)`),i.monitor?.onIngress?.($.port);let h=MMu({provider:w}),v=async()=>{let j=await U_({dataDir:i.dataDir,target:i.clusterBaseUrl});if(!j)throw Object.assign(Error(`Session for ${i.clusterBaseUrl} is no longer valid \u2014 run \`deco auth login --target ${i.clusterBaseUrl}\` and restart \`deco link\`.`),{fatal:!0});return j.accessToken},d=await nau(i.dataDir),D=process.env.npm_package_version??"0.0.0",_=await Jbi(),N=Hau(_,{onChange:(j)=>{console.log(`[link-daemon] capabilities detected: +${j.join(",")} (now: ${_.join(",")})`)}}),Z=Uni({path:`${i.dataDir}/link/outbox.sqlite`});Z.clear();let B=()=>{},F=new AbortController,g={clusterBaseUrl:i.clusterBaseUrl,getAccessToken:v,provider:w,outbox:Z,controlHandler:h,capabilities:_,machineId:d,cliVersion:D,previewPort:$.port,onConnected:()=>{i.monitor?.onCluster?.("linked"),console.log(`Linked to ${i.clusterBaseUrl}`)},onShutdown:()=>B(),runLifetimeSignal:F.signal};console.log(`[link-daemon] transport=tunnel cluster=${i.clusterBaseUrl}`);let U=await Fau(g);console.log("[link-daemon] active transport=tunnel");let T,A=new Promise((j)=>{T=j}),G=!1,k=async()=>{if(G)return;G=!0,F.abort(),console.log(`
83450
83450
  Shutting down\u2026`),N();try{await U.close()}catch{}try{await $.stop()}catch{}try{await w.shutdown()}catch{}try{Z.close()}catch{}E(),T(0)};process.on("SIGINT",()=>void k()),process.on("SIGTERM",()=>void k()),B=()=>{console.log("Disconnect requested from the Studio web UI \u2014 shutting down. Run `bunx decocms@latest link` to reconnect."),k()},U.closed.then(()=>{if(i.monitor?.onCluster?.("closed"),!G)console.error("Cluster connection closed permanently; exiting."),k()});let I=sau({provider:w,registry:f,dataDir:i.dataDir});return{stopped:A,stop:k,stopSandbox:I.stopSandbox,removeSandbox:I.removeSandbox,inspectSandbox:I.inspectSandbox}}catch(c){throw E(),c}}var cou=O(()=>{_ni();rM();zMu();CMu();qMu();Tni();gau();Jau();zau();Rau();VM();Kbi();pau();lou()});function Ybi(i){return i.map((u)=>typeof u==="string"?u:String(u)).join(" ")}import{createServer as Grt}from"net";async function xrt(i){for(let u of Irt)if(await Wbi(i,u))return u;return null}async function wou(i,{intervalMs:u=1000,sleepFn:t=P0}={}){for(;;){let f=await xrt(i);if(f)return f;await t(u)}}function Wbi(i,u){return new Promise((t)=>{let f=Grt();f.once("error",(l)=>{t(l.code==="EADDRINUSE")}),f.listen(i,u,()=>{f.close(()=>t(!1))})})}var Irt;var Lbi=O(()=>{Z4();Irt=["localhost","127.0.0.1","0.0.0.0"]});function $ou(i){return typeof i==="object"&&i!==null&&"code"in i&&i.code==="EADDRINUSE"}function krt(i,u=process.platform){if(u==="win32")return`for /f "tokens=5" %P in ('netstat -ano ^| findstr /R /C:":${i} .*LISTENING"') do taskkill /F /PID %P`;return`kill -9 $(lsof -ti tcp:${i})`}function hou(i,u=process.platform){return[`Port ${i} is already in use.`,"Run this command to stop the process listening on it, then retry `decocms link`:","",` ${krt(i,u)}`].join(`
83451
- `)}var Sbi;var vou=O(()=>{Sbi=class Sbi extends Error{port;code="EADDRINUSE";constructor(i){super(`Port ${i} is already in use.`);this.port=i;this.name="PortInUseError"}}});var GS;var w6i=O(()=>{GS={name:"decocms",version:"4.150.4",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","smoke:link":"bun run scripts/smoke-link.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@anthropic-ai/claude-agent-sdk":"^0.3.181","@duckdb/node-api":"^1.5.0-r.1","@openai/codex":"0.144.3","@openai/codex-darwin-arm64":"npm:@openai/codex@0.144.3-darwin-arm64","@openai/codex-darwin-x64":"npm:@openai/codex@0.144.3-darwin-x64","@openai/codex-linux-arm64":"npm:@openai/codex@0.144.3-linux-arm64","@openai/codex-linux-x64":"npm:@openai/codex@0.144.3-linux-x64","@openai/codex-win32-arm64":"npm:@openai/codex@0.144.3-win32-arm64","@openai/codex-win32-x64":"npm:@openai/codex@0.144.3-win32-x64"},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","@resvg/resvg-js":"^2.6.2","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","node-pty":"^1.0.0","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6",satori:"^0.28.2"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/harness":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@decocms/tunnel":"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",vite:"^7.2.1",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"}}});var Pq={};yi(Pq,{printBanner:()=>Jrt,bannerLines:()=>dou,BANNER_LINES:()=>$6i,BANNER_GRADIENT:()=>h6i});function Xrt(i){let u=Number.parseInt(i.slice(1),16);return[u>>16&255,u>>8&255,u&255]}function dou(i){let u=$6i.map((t,f)=>{let[l,E,c]=Xrt(h6i[f]);return`\x1B[38;2;${l};${E};${c}m${t}\x1B[39m`});if(i!==void 0)u.push(`\x1B[2m v${i}\x1B[22m`);return u}function Jrt(i){console.log("");for(let u of dou(i))console.log(u);console.log("")}var $6i,h6i;var IS=O(()=>{$6i=[" \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588 ","\u2591\u2591\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588 \u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588\u2588\u2588 "," \u2591\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2588 \u2591 \u2588\u2588\u2588 \u2591\u2591\u2591 \u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2591\u2591\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591 \u2588\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588 "," \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2591\u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2591 ","\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591 "],h6i=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"]});import{Box as Krt,Text as Dou}from"ink";import{jsx as Yrt,jsxs as _ou}from"react/jsx-runtime";function v6i({version:i}){return _ou(Krt,{flexDirection:"column",marginTop:1,children:[$6i.map((u,t)=>Yrt(Dou,{color:h6i[t],children:u},t)),_ou(Dou,{dimColor:!0,children:[" v",i]})]})}var Qbi=O(()=>{IS()});function Nou(i){let u=i.branch??i.handle,t=[];if(i.dirtyCount>0)t.push(`${i.dirtyCount} uncommitted file${i.dirtyCount===1?"":"s"}`);if(i.merged===!1)t.push("branch not merged");return t.length>0?`\u26A0 ${t.join(", ")} \u2014 delete ${u}? (y/n)`:`Delete ${u}? (y/n)`}function xS(i){return[...i.values()].map((u)=>u.handle).sort((u,t)=>u.localeCompare(t))}function Oou(i,u,t){if(i.length===0)return null;let f=u===null?-1:i.indexOf(u);if(f===-1)return t>0?i[0]:i[i.length-1];let l=Math.max(0,Math.min(i.length-1,f+t));return i[l]}function Zou(i,u,t){if(t!==u)return t;let f=i.indexOf(u);if(f===-1)return t;return i[f+1]??i[f-1]??null}var Rbi={};yi(Rbi,{subscribeLinkState:()=>Hbi,setSelectedHandle:()=>zbi,setRemoving:()=>_6i,setPersistedSandboxes:()=>Crt,setPendingConfirm:()=>Iq,setMachine:()=>zrt,setLogPath:()=>Rrt,setLinkActions:()=>brt,setIngress:()=>Hrt,setDaemonError:()=>nrt,setClusterUrl:()=>Qrt,setCluster:()=>Srt,setActionError:()=>D6i,resetLinkStateForTests:()=>qrt,removeSandboxRow:()=>nbi,pushSandboxEvent:()=>Mrt,getLinkState:()=>Gq,applySandboxEvent:()=>Bou});function Lrt(i){return i==="spawning"||i==="ready"||i==="failed"}function Bou(i,u){let t=new Map(i),f=t.get(u.handle);if(u.phase==="evicted"||u.phase==="deleted"){if(f)t.set(u.handle,{...f,port:null,previewUrl:null,status:"stopped",error:null});return t}return t.set(u.handle,{handle:u.handle,port:u.port??f?.port??null,previewUrl:u.previewUrl??f?.previewUrl??null,status:u.phase,error:u.phase==="failed"?u.error??"failed":null,projectName:u.projectName??f?.projectName??null,branch:u.branch??f?.branch??null,sandboxPath:u.sandboxPath??f?.sandboxPath??null}),t}function Fou(){return{cluster:"connecting",clusterUrl:null,ingressUrl:null,ingressPort:null,machine:null,cap:Wrt,sandboxes:new Map,daemonError:null,logPath:null,selectedHandle:null,pendingConfirm:null,removingHandles:new Set,actionError:null,actions:null}}function b3(){for(let i of d6i)i()}function Gq(){return Ef}function Hbi(i){return d6i.add(i),()=>d6i.delete(i)}function Srt(i){Ef={...Ef,cluster:i},b3()}function Qrt(i){Ef={...Ef,clusterUrl:i},b3()}function Hrt(i,u){Ef={...Ef,ingressPort:i,ingressUrl:u},b3()}function zrt(i){Ef={...Ef,machine:i},b3()}function nrt(i){Ef={...Ef,daemonError:i},b3()}function Rrt(i){Ef={...Ef,logPath:i},b3()}function zbi(i){Ef={...Ef,selectedHandle:i},b3()}function Iq(i){Ef={...Ef,pendingConfirm:i},b3()}function D6i(i){Ef={...Ef,actionError:i},b3()}function _6i(i,u){if(Ef.removingHandles.has(i)===u)return;let t=new Set(Ef.removingHandles);if(u)t.add(i);else t.delete(i);Ef={...Ef,removingHandles:t},b3()}function brt(i){Ef={...Ef,actions:i},b3()}function nbi(i){let u=xS(Ef.sandboxes),t=Zou(u,i,Ef.selectedHandle),f=new Map(Ef.sandboxes);f.delete(i);let l=new Set(Ef.removingHandles);l.delete(i),Ef={...Ef,sandboxes:f,selectedHandle:t,pendingConfirm:null,removingHandles:l},b3()}function Crt(i){let u=new Map;for(let t of i)u.set(t.handle,{handle:t.handle,port:t.port,previewUrl:t.previewUrl,status:t.status,error:t.error,projectName:t.projectName,branch:t.branch,sandboxPath:t.sandboxPath});for(let[t,f]of Ef.sandboxes)if(Lrt(f.status))u.set(t,f);Ef={...Ef,sandboxes:u},b3()}function Mrt(i){Ef={...Ef,sandboxes:Bou(Ef.sandboxes,i)},b3()}function qrt(){Ef=Fou(),d6i.clear()}var Wrt=20,Ef,d6i;var xq=O(()=>{Ef=Fou(),d6i=new Set});import{spawn as Vrt}from"child_process";function rrt(i){if(i==="darwin")return"open";if(i==="win32")return"start";return"xdg-open"}function gou(i,u=process.platform){let t=rrt(u);try{Vrt(t,[i],{stdio:"ignore",detached:!0}).unref()}catch{}}var Uou=()=>{};function Tou(i,u={}){let t=u.openUrl??gou,f=Gq(),l=xS(f.sandboxes),E=f.selectedHandle!==null&&l.includes(f.selectedHandle)?f.selectedHandle:l[0]??null,c=f.actions;switch(i.type){case"move":zbi(Oou(l,f.selectedHandle,i.delta));return;case"open":{if(E===null)return;let w=f.sandboxes.get(E);if(w?.status==="ready"&&w.previewUrl)t(w.previewUrl);return}case"stop":if(E!==null&&c)c.stopSandbox(E);return;case"delete":{if(E===null||!c)return;let w=c.inspectSandbox(E),$=f.sandboxes.get(E);D6i(null),Iq({handle:E,branch:w?.branch??$?.branch??null,dirtyCount:w?.dirtyCount??0,merged:w?.merged??null});return}case"confirmYes":{let w=f.pendingConfirm;if(Iq(null),w===null||!c)return;_6i(w.handle,!0),c.removeSandbox(w.handle).then(($)=>{if($.ok)nbi(w.handle);else _6i(w.handle,!1),D6i($.error)});return}case"confirmNo":Iq(null);return;case"quit":if(c)c.quit();return}}var Aou=O(()=>{xq();Uou()});function you(i,u,t){if(t)return i==="y"||i==="Y"?{type:"confirmYes"}:{type:"confirmNo"};if(u.upArrow||i==="k")return{type:"move",delta:-1};if(u.downArrow||i==="j")return{type:"move",delta:1};if(i==="s")return{type:"stop"};if(i==="d")return{type:"delete"};if(i==="o")return{type:"open"};if(i==="q"||u.ctrl===!0&&i==="c")return{type:"quit"};return null}var Pou={};yi(Pou,{LinkApp:()=>ort});import{Box as C1,Text as vl,useInput as mrt}from"ink";import{useSyncExternalStore as ert}from"react";import{jsx as Xf,jsxs as Xh}from"react/jsx-runtime";function art(i,u){if(u)return{color:"yellow",text:"\u25CC Removing\u2026"};if(i.status==="ready")return{color:"green",text:"\u25CF Live"};if(i.status==="spawning")return{color:"yellow",text:"\u25CC Starting\u2026"};if(i.status==="stopped")return{color:"gray",text:"\u25A0 Stopped"};if(i.status==="missing")return{color:"yellow",text:"\u25A1 Missing"};if(i.status==="merged")return{color:"cyan",text:"\u2713 Merged"};if(i.status==="invalid")return{color:"red",text:"\u2717 Invalid"};if(i.status==="failed")return{color:"red",text:`\u2717 Failed: ${i.error??"failed"}`};return{color:"red",text:`\u2717 Error: ${i.error??""}`}}function ort(){let i=ert(Hbi,Gq),u=[...i.sandboxes.values()].sort((l,E)=>l.handle.localeCompare(E.handle)),t=xS(i.sandboxes),f=i.selectedHandle!==null&&t.includes(i.selectedHandle)?i.selectedHandle:t[0]??null;return mrt((l,E)=>{let c=you(l,E,i.pendingConfirm!==null);if(c!==null)Tou(c)}),Xh(C1,{flexDirection:"column",children:[Xf(v6i,{version:GS.version}),Xf(C1,{marginBottom:1,children:Xf(vl,{dimColor:!0,children:"\u2500".repeat(80)})}),Xf(C1,{children:i.cluster==="linked"?Xh(vl,{color:"green",children:["\u2713 Connected to ",i.clusterUrl??"deco"]}):i.cluster==="connecting"?Xh(vl,{color:"yellow",children:["\u25CC Connecting to ",i.clusterUrl??"deco","\u2026"]}):Xh(vl,{color:"red",children:["\u2717 Disconnected from ",i.clusterUrl??"deco"]})}),Xf(C1,{children:i.ingressUrl?Xh(vl,{color:"green",children:["\u2713 Serving at ",i.ingressUrl]}):Xf(vl,{dimColor:!0,children:"\u25CC Starting local server\u2026"})}),Xf(C1,{marginBottom:1,children:Xf(vl,{dimColor:!0,children:`${"Computer".padEnd(16)}${i.machine??"this computer"} \xB7 ${u.length} of ${i.cap} previews`})}),u.length===0?Xf(vl,{dimColor:!0,children:"No previews running yet."}):Xh(C1,{flexDirection:"column",children:[Xh(C1,{children:[Xf(C1,{width:2,flexShrink:0}),Xf(C1,{width:kS.project,flexShrink:0,marginRight:1,children:Xf(vl,{dimColor:!0,wrap:"truncate-end",children:"PROJECT"})}),Xf(C1,{width:kS.branch,flexShrink:0,marginRight:1,children:Xf(vl,{dimColor:!0,wrap:"truncate-end",children:"BRANCH"})}),Xf(C1,{width:kS.status,flexShrink:0,marginRight:1,children:Xf(vl,{dimColor:!0,wrap:"truncate-end",children:"STATUS"})}),Xf(C1,{flexGrow:1,children:Xf(vl,{dimColor:!0,wrap:"truncate-end",children:"PREVIEW URL"})})]}),u.map((l)=>{let E=art(l,i.removingHandles.has(l.handle)),c=l.handle===f;return Xh(C1,{children:[Xf(C1,{width:2,flexShrink:0,children:Xf(vl,{color:"cyan",children:c?"\u203A":" "})}),Xf(C1,{width:kS.project,flexShrink:0,marginRight:1,children:Xf(vl,{bold:c,wrap:"truncate-end",children:l.projectName??l.handle})}),Xf(C1,{width:kS.branch,flexShrink:0,marginRight:1,children:Xf(vl,{bold:c,wrap:"truncate-end",children:l.branch??"\u2014"})}),Xf(C1,{width:kS.status,flexShrink:0,marginRight:1,children:Xf(vl,{color:E.color,bold:c,wrap:"truncate-end",children:E.text})}),Xf(C1,{flexGrow:1,children:Xf(vl,{dimColor:!0,wrap:"truncate-end",children:l.previewUrl??"\u2014"})})]},l.handle)})]}),i.daemonError?Xf(C1,{marginTop:1,children:Xh(vl,{color:"red",children:["\u26A0 ",i.daemonError]})}):null,i.logPath?Xf(C1,{marginTop:1,children:Xh(vl,{dimColor:!0,children:["Logs: ",i.logPath]})}):null,i.pendingConfirm?Xf(C1,{marginTop:1,children:Xf(vl,{color:"yellow",children:Nou(i.pendingConfirm)})}):null,i.actionError?Xf(C1,{marginTop:1,children:Xh(vl,{color:"red",children:["\u2717 ",i.actionError]})}):null,Xf(C1,{marginTop:1,children:Xf(vl,{dimColor:!0,children:"\u2191\u2193 move \xB7 s stop \xB7 d delete \xB7 o open \xB7 q quit"})})]})}var kS;var Gou=O(()=>{w6i();Qbi();Aou();xq();kS={project:18,branch:22,status:14}});var Iou={};yi(Iou,{runLinkCommand:()=>Emt});import{closeSync as srt,mkdirSync as prt,openSync as imt,writeSync as umt}from"fs";import{homedir as tmt}from"os";import{join as bbi}from"path";function fmt(i,u){let t={log:console.log,warn:console.warn,error:console.error},f=(l)=>{if(u===void 0)return;try{umt(u,`${Ybi(l)}
83451
+ `)}var Sbi;var vou=O(()=>{Sbi=class Sbi extends Error{port;code="EADDRINUSE";constructor(i){super(`Port ${i} is already in use.`);this.port=i;this.name="PortInUseError"}}});var GS;var w6i=O(()=>{GS={name:"decocms",version:"4.150.6",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","smoke:link":"bun run scripts/smoke-link.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@anthropic-ai/claude-agent-sdk":"^0.3.181","@duckdb/node-api":"^1.5.0-r.1","@openai/codex":"0.144.3","@openai/codex-darwin-arm64":"npm:@openai/codex@0.144.3-darwin-arm64","@openai/codex-darwin-x64":"npm:@openai/codex@0.144.3-darwin-x64","@openai/codex-linux-arm64":"npm:@openai/codex@0.144.3-linux-arm64","@openai/codex-linux-x64":"npm:@openai/codex@0.144.3-linux-x64","@openai/codex-win32-arm64":"npm:@openai/codex@0.144.3-win32-arm64","@openai/codex-win32-x64":"npm:@openai/codex@0.144.3-win32-x64"},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","@resvg/resvg-js":"^2.6.2","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","node-pty":"^1.0.0","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6",satori:"^0.28.2"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/harness":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@decocms/tunnel":"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",vite:"^7.2.1",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"}}});var Pq={};yi(Pq,{printBanner:()=>Jrt,bannerLines:()=>dou,BANNER_LINES:()=>$6i,BANNER_GRADIENT:()=>h6i});function Xrt(i){let u=Number.parseInt(i.slice(1),16);return[u>>16&255,u>>8&255,u&255]}function dou(i){let u=$6i.map((t,f)=>{let[l,E,c]=Xrt(h6i[f]);return`\x1B[38;2;${l};${E};${c}m${t}\x1B[39m`});if(i!==void 0)u.push(`\x1B[2m v${i}\x1B[22m`);return u}function Jrt(i){console.log("");for(let u of dou(i))console.log(u);console.log("")}var $6i,h6i;var IS=O(()=>{$6i=[" \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588 ","\u2591\u2591\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588 \u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588\u2588\u2588 "," \u2591\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2588 \u2591 \u2588\u2588\u2588 \u2591\u2591\u2591 \u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2591\u2591\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591 \u2588\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588 "," \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2591\u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2591 ","\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591 "],h6i=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"]});import{Box as Krt,Text as Dou}from"ink";import{jsx as Yrt,jsxs as _ou}from"react/jsx-runtime";function v6i({version:i}){return _ou(Krt,{flexDirection:"column",marginTop:1,children:[$6i.map((u,t)=>Yrt(Dou,{color:h6i[t],children:u},t)),_ou(Dou,{dimColor:!0,children:[" v",i]})]})}var Qbi=O(()=>{IS()});function Nou(i){let u=i.branch??i.handle,t=[];if(i.dirtyCount>0)t.push(`${i.dirtyCount} uncommitted file${i.dirtyCount===1?"":"s"}`);if(i.merged===!1)t.push("branch not merged");return t.length>0?`\u26A0 ${t.join(", ")} \u2014 delete ${u}? (y/n)`:`Delete ${u}? (y/n)`}function xS(i){return[...i.values()].map((u)=>u.handle).sort((u,t)=>u.localeCompare(t))}function Oou(i,u,t){if(i.length===0)return null;let f=u===null?-1:i.indexOf(u);if(f===-1)return t>0?i[0]:i[i.length-1];let l=Math.max(0,Math.min(i.length-1,f+t));return i[l]}function Zou(i,u,t){if(t!==u)return t;let f=i.indexOf(u);if(f===-1)return t;return i[f+1]??i[f-1]??null}var Rbi={};yi(Rbi,{subscribeLinkState:()=>Hbi,setSelectedHandle:()=>zbi,setRemoving:()=>_6i,setPersistedSandboxes:()=>Crt,setPendingConfirm:()=>Iq,setMachine:()=>zrt,setLogPath:()=>Rrt,setLinkActions:()=>brt,setIngress:()=>Hrt,setDaemonError:()=>nrt,setClusterUrl:()=>Qrt,setCluster:()=>Srt,setActionError:()=>D6i,resetLinkStateForTests:()=>qrt,removeSandboxRow:()=>nbi,pushSandboxEvent:()=>Mrt,getLinkState:()=>Gq,applySandboxEvent:()=>Bou});function Lrt(i){return i==="spawning"||i==="ready"||i==="failed"}function Bou(i,u){let t=new Map(i),f=t.get(u.handle);if(u.phase==="evicted"||u.phase==="deleted"){if(f)t.set(u.handle,{...f,port:null,previewUrl:null,status:"stopped",error:null});return t}return t.set(u.handle,{handle:u.handle,port:u.port??f?.port??null,previewUrl:u.previewUrl??f?.previewUrl??null,status:u.phase,error:u.phase==="failed"?u.error??"failed":null,projectName:u.projectName??f?.projectName??null,branch:u.branch??f?.branch??null,sandboxPath:u.sandboxPath??f?.sandboxPath??null}),t}function Fou(){return{cluster:"connecting",clusterUrl:null,ingressUrl:null,ingressPort:null,machine:null,cap:Wrt,sandboxes:new Map,daemonError:null,logPath:null,selectedHandle:null,pendingConfirm:null,removingHandles:new Set,actionError:null,actions:null}}function b3(){for(let i of d6i)i()}function Gq(){return Ef}function Hbi(i){return d6i.add(i),()=>d6i.delete(i)}function Srt(i){Ef={...Ef,cluster:i},b3()}function Qrt(i){Ef={...Ef,clusterUrl:i},b3()}function Hrt(i,u){Ef={...Ef,ingressPort:i,ingressUrl:u},b3()}function zrt(i){Ef={...Ef,machine:i},b3()}function nrt(i){Ef={...Ef,daemonError:i},b3()}function Rrt(i){Ef={...Ef,logPath:i},b3()}function zbi(i){Ef={...Ef,selectedHandle:i},b3()}function Iq(i){Ef={...Ef,pendingConfirm:i},b3()}function D6i(i){Ef={...Ef,actionError:i},b3()}function _6i(i,u){if(Ef.removingHandles.has(i)===u)return;let t=new Set(Ef.removingHandles);if(u)t.add(i);else t.delete(i);Ef={...Ef,removingHandles:t},b3()}function brt(i){Ef={...Ef,actions:i},b3()}function nbi(i){let u=xS(Ef.sandboxes),t=Zou(u,i,Ef.selectedHandle),f=new Map(Ef.sandboxes);f.delete(i);let l=new Set(Ef.removingHandles);l.delete(i),Ef={...Ef,sandboxes:f,selectedHandle:t,pendingConfirm:null,removingHandles:l},b3()}function Crt(i){let u=new Map;for(let t of i)u.set(t.handle,{handle:t.handle,port:t.port,previewUrl:t.previewUrl,status:t.status,error:t.error,projectName:t.projectName,branch:t.branch,sandboxPath:t.sandboxPath});for(let[t,f]of Ef.sandboxes)if(Lrt(f.status))u.set(t,f);Ef={...Ef,sandboxes:u},b3()}function Mrt(i){Ef={...Ef,sandboxes:Bou(Ef.sandboxes,i)},b3()}function qrt(){Ef=Fou(),d6i.clear()}var Wrt=20,Ef,d6i;var xq=O(()=>{Ef=Fou(),d6i=new Set});import{spawn as Vrt}from"child_process";function rrt(i){if(i==="darwin")return"open";if(i==="win32")return"start";return"xdg-open"}function gou(i,u=process.platform){let t=rrt(u);try{Vrt(t,[i],{stdio:"ignore",detached:!0}).unref()}catch{}}var Uou=()=>{};function Tou(i,u={}){let t=u.openUrl??gou,f=Gq(),l=xS(f.sandboxes),E=f.selectedHandle!==null&&l.includes(f.selectedHandle)?f.selectedHandle:l[0]??null,c=f.actions;switch(i.type){case"move":zbi(Oou(l,f.selectedHandle,i.delta));return;case"open":{if(E===null)return;let w=f.sandboxes.get(E);if(w?.status==="ready"&&w.previewUrl)t(w.previewUrl);return}case"stop":if(E!==null&&c)c.stopSandbox(E);return;case"delete":{if(E===null||!c)return;let w=c.inspectSandbox(E),$=f.sandboxes.get(E);D6i(null),Iq({handle:E,branch:w?.branch??$?.branch??null,dirtyCount:w?.dirtyCount??0,merged:w?.merged??null});return}case"confirmYes":{let w=f.pendingConfirm;if(Iq(null),w===null||!c)return;_6i(w.handle,!0),c.removeSandbox(w.handle).then(($)=>{if($.ok)nbi(w.handle);else _6i(w.handle,!1),D6i($.error)});return}case"confirmNo":Iq(null);return;case"quit":if(c)c.quit();return}}var Aou=O(()=>{xq();Uou()});function you(i,u,t){if(t)return i==="y"||i==="Y"?{type:"confirmYes"}:{type:"confirmNo"};if(u.upArrow||i==="k")return{type:"move",delta:-1};if(u.downArrow||i==="j")return{type:"move",delta:1};if(i==="s")return{type:"stop"};if(i==="d")return{type:"delete"};if(i==="o")return{type:"open"};if(i==="q"||u.ctrl===!0&&i==="c")return{type:"quit"};return null}var Pou={};yi(Pou,{LinkApp:()=>ort});import{Box as C1,Text as vl,useInput as mrt}from"ink";import{useSyncExternalStore as ert}from"react";import{jsx as Xf,jsxs as Xh}from"react/jsx-runtime";function art(i,u){if(u)return{color:"yellow",text:"\u25CC Removing\u2026"};if(i.status==="ready")return{color:"green",text:"\u25CF Live"};if(i.status==="spawning")return{color:"yellow",text:"\u25CC Starting\u2026"};if(i.status==="stopped")return{color:"gray",text:"\u25A0 Stopped"};if(i.status==="missing")return{color:"yellow",text:"\u25A1 Missing"};if(i.status==="merged")return{color:"cyan",text:"\u2713 Merged"};if(i.status==="invalid")return{color:"red",text:"\u2717 Invalid"};if(i.status==="failed")return{color:"red",text:`\u2717 Failed: ${i.error??"failed"}`};return{color:"red",text:`\u2717 Error: ${i.error??""}`}}function ort(){let i=ert(Hbi,Gq),u=[...i.sandboxes.values()].sort((l,E)=>l.handle.localeCompare(E.handle)),t=xS(i.sandboxes),f=i.selectedHandle!==null&&t.includes(i.selectedHandle)?i.selectedHandle:t[0]??null;return mrt((l,E)=>{let c=you(l,E,i.pendingConfirm!==null);if(c!==null)Tou(c)}),Xh(C1,{flexDirection:"column",children:[Xf(v6i,{version:GS.version}),Xf(C1,{marginBottom:1,children:Xf(vl,{dimColor:!0,children:"\u2500".repeat(80)})}),Xf(C1,{children:i.cluster==="linked"?Xh(vl,{color:"green",children:["\u2713 Connected to ",i.clusterUrl??"deco"]}):i.cluster==="connecting"?Xh(vl,{color:"yellow",children:["\u25CC Connecting to ",i.clusterUrl??"deco","\u2026"]}):Xh(vl,{color:"red",children:["\u2717 Disconnected from ",i.clusterUrl??"deco"]})}),Xf(C1,{children:i.ingressUrl?Xh(vl,{color:"green",children:["\u2713 Serving at ",i.ingressUrl]}):Xf(vl,{dimColor:!0,children:"\u25CC Starting local server\u2026"})}),Xf(C1,{marginBottom:1,children:Xf(vl,{dimColor:!0,children:`${"Computer".padEnd(16)}${i.machine??"this computer"} \xB7 ${u.length} of ${i.cap} previews`})}),u.length===0?Xf(vl,{dimColor:!0,children:"No previews running yet."}):Xh(C1,{flexDirection:"column",children:[Xh(C1,{children:[Xf(C1,{width:2,flexShrink:0}),Xf(C1,{width:kS.project,flexShrink:0,marginRight:1,children:Xf(vl,{dimColor:!0,wrap:"truncate-end",children:"PROJECT"})}),Xf(C1,{width:kS.branch,flexShrink:0,marginRight:1,children:Xf(vl,{dimColor:!0,wrap:"truncate-end",children:"BRANCH"})}),Xf(C1,{width:kS.status,flexShrink:0,marginRight:1,children:Xf(vl,{dimColor:!0,wrap:"truncate-end",children:"STATUS"})}),Xf(C1,{flexGrow:1,children:Xf(vl,{dimColor:!0,wrap:"truncate-end",children:"PREVIEW URL"})})]}),u.map((l)=>{let E=art(l,i.removingHandles.has(l.handle)),c=l.handle===f;return Xh(C1,{children:[Xf(C1,{width:2,flexShrink:0,children:Xf(vl,{color:"cyan",children:c?"\u203A":" "})}),Xf(C1,{width:kS.project,flexShrink:0,marginRight:1,children:Xf(vl,{bold:c,wrap:"truncate-end",children:l.projectName??l.handle})}),Xf(C1,{width:kS.branch,flexShrink:0,marginRight:1,children:Xf(vl,{bold:c,wrap:"truncate-end",children:l.branch??"\u2014"})}),Xf(C1,{width:kS.status,flexShrink:0,marginRight:1,children:Xf(vl,{color:E.color,bold:c,wrap:"truncate-end",children:E.text})}),Xf(C1,{flexGrow:1,children:Xf(vl,{dimColor:!0,wrap:"truncate-end",children:l.previewUrl??"\u2014"})})]},l.handle)})]}),i.daemonError?Xf(C1,{marginTop:1,children:Xh(vl,{color:"red",children:["\u26A0 ",i.daemonError]})}):null,i.logPath?Xf(C1,{marginTop:1,children:Xh(vl,{dimColor:!0,children:["Logs: ",i.logPath]})}):null,i.pendingConfirm?Xf(C1,{marginTop:1,children:Xf(vl,{color:"yellow",children:Nou(i.pendingConfirm)})}):null,i.actionError?Xf(C1,{marginTop:1,children:Xh(vl,{color:"red",children:["\u2717 ",i.actionError]})}):null,Xf(C1,{marginTop:1,children:Xf(vl,{dimColor:!0,children:"\u2191\u2193 move \xB7 s stop \xB7 d delete \xB7 o open \xB7 q quit"})})]})}var kS;var Gou=O(()=>{w6i();Qbi();Aou();xq();kS={project:18,branch:22,status:14}});var Iou={};yi(Iou,{runLinkCommand:()=>Emt});import{closeSync as srt,mkdirSync as prt,openSync as imt,writeSync as umt}from"fs";import{homedir as tmt}from"os";import{join as bbi}from"path";function fmt(i,u){let t={log:console.log,warn:console.warn,error:console.error},f=(l)=>{if(u===void 0)return;try{umt(u,`${Ybi(l)}
83452
83452
  `)}catch{}};return console.log=(...l)=>f(l),console.warn=(...l)=>f(l),console.error=(...l)=>{f(l),i(Ybi(l))},()=>{console.log=t.log,console.warn=t.warn,console.error=t.error}}async function lmt(i,u){let t;try{t=await fetch(`${i}/api/links/me`,{headers:{authorization:`Bearer ${u}`},signal:AbortSignal.timeout(1e4)})}catch{return}if(t.status===401||t.status===403)throw Error(`Authentication rejected by ${i} \u2014 the session token was not accepted. `+`Run \`deco auth login --target ${i}\` and try again.`)}async function Emt(i={}){let u=i.port??5174,t=i.dataDir??process.env.DATA_DIR??process.env.DECOCMS_HOME??bbi(tmt(),"deco"),f=i.clusterBaseUrl??process.env.STUDIO_CLUSTER_URL??process.env.MESH_CLUSTER_URL??"https://studio.decocms.com",l,E,c,w=()=>{if(c===void 0)return;try{c.close()}catch{}finally{c=void 0}};try{if(await Wbi(u,"127.0.0.1"))throw new Sbi(u);let $=bbi(t,"sandboxes");c=c6i({path:E6i(t),managedSandboxRoot:$});let h=await ili({dataDir:t,intent:"Link",target:f});if(process.env.DECOCMS_LINK_MANAGED!=="1")await lmt(f,h.accessToken);let v=c.reconcile();if(i.prune){let N=c.prune({missing:!0,merged:!0});if(!i.tui)console.log(`Pruned local sandboxes: removed ${N.removed.length}, skipped ${N.skipped.length}.`);v=c.reconcile()}let d;if(i.tui){let{render:N}=await import("ink"),{createElement:Z}=await import("react"),{LinkApp:B}=await Promise.resolve().then(() => (Gou(),Pou)),{pushSandboxEvent:F,setCluster:g,setClusterUrl:U,setDaemonError:T,setIngress:A,setLogPath:G,setMachine:k,setPersistedSandboxes:I}=await Promise.resolve().then(() => (xq(),Rbi));prt(t,{recursive:!0});let j=bbi(t,"link.log");E=imt(j,"w"),G(j),I(v),U(f),g("connecting"),d={onEvent:(C)=>F(C),onIngress:(C)=>A(C,`http://127.0.0.1:${C}`),onCluster:(C)=>g(C),onMachine:(C)=>k(C)},l=fmt(T,E),N(Z(B),{patchConsole:!1})}else if(i.banner!==!1){let{printBanner:N}=await Promise.resolve().then(() => (IS(),Pq));N(i.version??"0.0.0")}w();let D=process.env.DECOCMS_LINK_MANAGED!=="1",_=await Eou({port:u,clusterBaseUrl:f,dataDir:t,session:h,monitor:d,logFd:E,perSandboxLogs:D,hotReload:i.hotReload});if(i.tui){let{setLinkActions:N}=await Promise.resolve().then(() => (xq(),Rbi));N({stopSandbox:_.stopSandbox,removeSandbox:_.removeSandbox,inspectSandbox:_.inspectSandbox,quit:_.stop})}return await _.stopped}catch($){return l?.(),console.error($ou($)?hou(u):$ instanceof Error?$.message:String($)),1}finally{if(l?.(),E!==void 0)try{srt(E)}catch{}w()}}var xou=O(()=>{Dni();cou();Lbi();vou();Kbi()});var mbi={};yi(mbi,{resolveDevLinkClusterUrl:()=>hmt,populateDevLinkToxiProxy:()=>You,isDevLinkToxiProxyEnabled:()=>$mt,ensureDevLinkToxiProxy:()=>Nmt,buildDevLinkToxiProxyConfig:()=>Jou,DEV_LINK_TOXIPROXY_SERVICE_NAME:()=>jou,DEV_LINK_TOXIPROXY_PROXY_NAME:()=>Xou});function $mt(i=process.env){return i.DECO_DEV_LINK_TOXIPROXY==="1"}function Cbi(i,u){if(!Number.isInteger(i)||i<1||i>65535)throw Error(`${u} must be an integer port in 1..65535`);return i}function Jou(i){let u=new URL(i.serverUrl);if(u.protocol!=="http:")throw Error("DECO_DEV_LINK_TOXIPROXY only supports http local Studio URLs");let t=Cbi(i.apiPort,"apiPort"),f=Cbi(i.listenPort,"listenPort");if(u.port.length===0)throw Error("serverUrl must include an explicit valid port");let l=Cbi(Number.parseInt(u.port,10),"upstreamPort"),E=`http://127.0.0.1:${l}`,c=`http://127.0.0.1:${f}`;return{serviceName:jou,proxyName:Xou,apiUrl:`http://127.0.0.1:${t}`,listen:`0.0.0.0:${f}`,upstream:`host.docker.internal:${l}`,publicTargetUrl:E,clusterUrl:c,logLine:`[dev-link-toxiproxy] ready: ${c} -> ${E}`}}function hmt(i){return i.toxiproxy?.clusterUrl??i.serverUrl}async function Mbi(i,u,t){if(i.ok)return;let f=await i.text();throw Error(`ToxiProxy ${u} failed for ${t}: status=${i.status} statusText=${i.statusText} body=${f}`)}function rbi(i){if(i instanceof Error)return i.name==="Error"?i.message:`${i.name}: ${i.message}`;return String(i)}function Kou(i){if(!(i instanceof Error))return!1;if(i.name==="TimeoutError")return!0;return Kou(i.cause)}async function qbi(i,u,t,f){try{return await i(t,f)}catch(l){throw Error(`ToxiProxy ${u} failed for ${t}: ${rbi(l)}`,{cause:l})}}async function You(i,u=fetch){let t=`${i.apiUrl}/reset`,f=await qbi(u,"reset",t,{method:"POST"});await Mbi(f,"reset",t);let l=`${i.apiUrl}/populate`,E=await qbi(u,"populate",l,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify([{name:i.proxyName,listen:i.listen,upstream:i.upstream,enabled:!0}])});await Mbi(E,"populate",l)}async function vmt(i,u){let t=`${i.apiUrl}/version`;try{await F1(async()=>{let f=await qbi(u,"readiness check",t,{method:"GET",signal:AbortSignal.timeout(wmt)});await Mbi(f,"readiness check",t)},{maxAttempts:cmt,minTimeout:kou,maxTimeout:kou,multiplier:1,jitter:0,isRetriable:(f)=>!Kou(f)})}catch(f){let l=f instanceof H6?f.cause:f;throw Error(`ToxiProxy API did not become ready at ${t}: ${rbi(l)}`,{cause:l})}}async function dmt(i){if(i===null)return"";return await new Response(i).text()}async function Vbi(i,u={}){let t=["docker",...i].join(" "),f=(()=>{try{return Bun.spawn(["docker",...i],{stdout:"ignore",stderr:"pipe"})}catch(w){throw Error(`Docker command failed to start (${t}): ${rbi(w)}`,{cause:w})}})(),[l,E]=await Promise.all([f.exited,dmt(f.stderr)]);if(l===0||u.ignoreFailure===!0)return;let c=E.trim().length>0?`: ${E.trim()}`:"";throw Error(`Docker command failed (${t}) with exit ${l}${c}`)}async function Dmt(i,u){let t=`deco-dev-link-toxiproxy-${i}`;await Vbi(["rm","-f",t],{ignoreFailure:!0}),await Vbi(["run","--rm","-d","--name",t,"-p",`127.0.0.1:${i}:8474`,"-p",`127.0.0.1:${u}:${u}`,"ghcr.io/shopify/toxiproxy:2.12.0","-host=0.0.0.0"])}async function _mt(i,u){let t=`deco-dev-link-toxiproxy-${i}`;await Vbi(["rm","-f",t],{ignoreFailure:!0})}async function Nmt(i){let u=Jou(i),t=i.startDaemon??Dmt,f=i.stopDaemon??(i.startDaemon===void 0?_mt:void 0);await t(i.apiPort,i.listenPort);let l=i.fetchImpl??fetch;try{await vmt(u,l),await You(u,l)}catch(E){if(f!==void 0)try{await f(i.apiPort,i.listenPort)}catch{}throw E}return{config:u,stop:async()=>{if(f!==void 0)await f(i.apiPort,i.listenPort)}}}var jou="ToxiProxy",Xou="dev_link_studio",cmt=20,kou=100,wmt=100;var ebi=O(()=>{Z4()});var Wou={};yi(Wou,{migrateBetterAuth:()=>abi});import{getMigrations as Omt}from"better-auth/db";import{sso as Zmt}from"@better-auth/sso";import{organization as Bmt}from"@decocms/better-auth/plugins";import{admin as Fmt,apiKey as gmt,jwt as Umt,magicLink as Tmt,mcp as Amt,openAPI as ymt}from"better-auth/plugins";import{emailOTP as Pmt}from"better-auth/plugins/email-otp";async function abi(i){let t={database:nM(i||Z_()),plugins:[Bmt({dynamicAccessControl:{enabled:!0,enableCustomResources:!0}}),Fmt(),gmt(),Umt(),ymt(),Amt({loginPage:"/login"}),Zmt(),Tmt({sendMagicLink:async()=>{}}),Pmt({sendVerificationOTP:async()=>{}})]},{toBeAdded:f,toBeCreated:l,runMigrations:E}=await Omt(t);if(!f.length&&!l.length)return"up to date";return await E(),`${l.length+f.length} table(s) migrated`}var obi=O(()=>{b6()});var sbi={};yi(sbi,{up:()=>Gmt,down:()=>Imt});import{sql as Fd}from"kysely";async function Gmt(i){await i.schema.createTable("connections").addColumn("id","text",(u)=>u.primaryKey()).addColumn("organizationId","text",(u)=>u.notNull().references("organization.id").onDelete("cascade")).addColumn("createdById","text",(u)=>u.notNull().references("user.id").onDelete("cascade")).addColumn("name","text",(u)=>u.notNull()).addColumn("description","text").addColumn("icon","text").addColumn("appName","text").addColumn("appId","text").addColumn("connectionType","text",(u)=>u.notNull()).addColumn("connectionUrl","text",(u)=>u.notNull()).addColumn("connectionToken","text").addColumn("connectionHeaders","text").addColumn("oauthConfig","text").addColumn("metadata","text").addColumn("tools","text").addColumn("bindings","text").addColumn("status","text",(u)=>u.notNull().defaultTo("active")).addColumn("createdAt","text",(u)=>u.notNull().defaultTo(Fd`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(u)=>u.notNull().defaultTo(Fd`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("api_keys").addColumn("id","text",(u)=>u.primaryKey()).addColumn("userId","text",(u)=>u.notNull().references("user.id").onDelete("cascade")).addColumn("name","text",(u)=>u.notNull()).addColumn("hashedKey","text",(u)=>u.notNull().unique()).addColumn("permissions","text",(u)=>u.notNull()).addColumn("expiresAt","text").addColumn("remaining","integer").addColumn("metadata","text").addColumn("createdAt","text",(u)=>u.notNull().defaultTo(Fd`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(u)=>u.notNull().defaultTo(Fd`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("audit_logs").addColumn("id","text",(u)=>u.primaryKey()).addColumn("organizationId","text").addColumn("userId","text",(u)=>u.references("user.id").onDelete("set null")).addColumn("connectionId","text",(u)=>u.references("connections.id").onDelete("set null")).addColumn("toolName","text",(u)=>u.notNull()).addColumn("allowed","integer",(u)=>u.notNull()).addColumn("duration","integer").addColumn("timestamp","text",(u)=>u.notNull().defaultTo(Fd`CURRENT_TIMESTAMP`)).addColumn("requestMetadata","text").execute(),await i.schema.createTable("oauth_clients").addColumn("id","text",(u)=>u.primaryKey()).addColumn("clientId","text",(u)=>u.notNull().unique()).addColumn("clientSecret","text").addColumn("clientName","text",(u)=>u.notNull()).addColumn("redirectUris","text",(u)=>u.notNull()).addColumn("grantTypes","text",(u)=>u.notNull()).addColumn("scope","text").addColumn("clientUri","text").addColumn("logoUri","text").addColumn("createdAt","text",(u)=>u.notNull().defaultTo(Fd`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("oauth_authorization_codes").addColumn("code","text",(u)=>u.primaryKey()).addColumn("clientId","text",(u)=>u.notNull().references("oauth_clients.clientId").onDelete("cascade")).addColumn("userId","text",(u)=>u.notNull().references("user.id").onDelete("cascade")).addColumn("redirectUri","text",(u)=>u.notNull()).addColumn("scope","text").addColumn("codeChallenge","text").addColumn("codeChallengeMethod","text").addColumn("expiresAt","text",(u)=>u.notNull()).addColumn("createdAt","text",(u)=>u.notNull().defaultTo(Fd`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("oauth_refresh_tokens").addColumn("token","text",(u)=>u.primaryKey()).addColumn("clientId","text",(u)=>u.notNull().references("oauth_clients.clientId").onDelete("cascade")).addColumn("userId","text",(u)=>u.notNull().references("user.id").onDelete("cascade")).addColumn("scope","text").addColumn("expiresAt","text").addColumn("createdAt","text",(u)=>u.notNull().defaultTo(Fd`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("downstream_tokens").addColumn("id","text",(u)=>u.primaryKey()).addColumn("connectionId","text",(u)=>u.notNull().references("connections.id").onDelete("cascade")).addColumn("userId","text",(u)=>u.references("user.id").onDelete("cascade")).addColumn("accessToken","text",(u)=>u.notNull()).addColumn("refreshToken","text").addColumn("scope","text").addColumn("expiresAt","text").addColumn("createdAt","text",(u)=>u.notNull().defaultTo(Fd`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(u)=>u.notNull().defaultTo(Fd`CURRENT_TIMESTAMP`)).execute(),await i.schema.createIndex("idx_connections_organizationId").on("connections").column("organizationId").execute(),await i.schema.createIndex("idx_audit_logs_organizationId").on("audit_logs").column("organizationId").execute(),await i.schema.createIndex("idx_audit_logs_userId").on("audit_logs").column("userId").execute(),await i.schema.createIndex("idx_audit_logs_timestamp").on("audit_logs").column("timestamp").execute()}async function Imt(i){await i.schema.dropTable("downstream_tokens").execute(),await i.schema.dropTable("oauth_refresh_tokens").execute(),await i.schema.dropTable("oauth_authorization_codes").execute(),await i.schema.dropTable("oauth_clients").execute(),await i.schema.dropTable("audit_logs").execute(),await i.schema.dropTable("api_keys").execute(),await i.schema.dropTable("connections").execute()}var Lou=()=>{};var pbi={};yi(pbi,{up:()=>xmt,down:()=>kmt});import{sql as Sou}from"kysely";async function xmt(i){await i.schema.createTable("organization_settings").addColumn("organizationId","text",(u)=>u.primaryKey().references("organization.id").onDelete("cascade")).addColumn("modelsBindingConnectionId","text",(u)=>u.references("connections.id").onDelete("set null")).addColumn("createdAt","text",(u)=>u.notNull().defaultTo(Sou`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(u)=>u.notNull().defaultTo(Sou`CURRENT_TIMESTAMP`)).execute()}async function kmt(i){await i.schema.dropTable("organization_settings").execute()}var Qou=()=>{};var iCi={};yi(iCi,{up:()=>jmt,down:()=>Xmt});async function jmt(i){await i.schema.alterTable("connections").renameColumn("name","title").execute(),await i.schema.alterTable("connections").renameColumn("createdById","created_by").execute(),await i.schema.alterTable("connections").renameColumn("createdAt","created_at").execute(),await i.schema.alterTable("connections").renameColumn("updatedAt","updated_at").execute(),await i.schema.alterTable("connections").renameColumn("organizationId","organization_id").execute(),await i.schema.alterTable("connections").renameColumn("connectionType","connection_type").execute(),await i.schema.alterTable("connections").renameColumn("connectionUrl","connection_url").execute(),await i.schema.alterTable("connections").renameColumn("connectionToken","connection_token").execute(),await i.schema.alterTable("connections").renameColumn("connectionHeaders","connection_headers").execute(),await i.schema.alterTable("connections").renameColumn("oauthConfig","oauth_config").execute(),await i.schema.alterTable("connections").renameColumn("appName","app_name").execute(),await i.schema.alterTable("connections").renameColumn("appId","app_id").execute()}async function Xmt(i){await i.schema.alterTable("connections").renameColumn("title","name").execute(),await i.schema.alterTable("connections").renameColumn("created_by","createdById").execute(),await i.schema.alterTable("connections").renameColumn("created_at","createdAt").execute(),await i.schema.alterTable("connections").renameColumn("updated_at","updatedAt").execute(),await i.schema.alterTable("connections").renameColumn("organization_id","organizationId").execute(),await i.schema.alterTable("connections").renameColumn("connection_type","connectionType").execute(),await i.schema.alterTable("connections").renameColumn("connection_url","connectionUrl").execute(),await i.schema.alterTable("connections").renameColumn("connection_token","connectionToken").execute(),await i.schema.alterTable("connections").renameColumn("connection_headers","connectionHeaders").execute(),await i.schema.alterTable("connections").renameColumn("oauth_config","oauthConfig").execute(),await i.schema.alterTable("connections").renameColumn("app_name","appName").execute(),await i.schema.alterTable("connections").renameColumn("app_id","appId").execute()}var uCi={};yi(uCi,{up:()=>Jmt,down:()=>Kmt});async function Jmt(i){await i.schema.createTable("organization_settings_new").addColumn("organizationId","text",(u)=>u.primaryKey().references("organization.id").onDelete("cascade")).addColumn("createdAt","text",(u)=>u.notNull()).addColumn("updatedAt","text",(u)=>u.notNull()).execute(),await i.insertInto("organization_settings_new").columns(["organizationId","createdAt","updatedAt"]).expression((u)=>u.selectFrom("organization_settings").select(["organizationId","createdAt","updatedAt"])).execute(),await i.schema.dropTable("organization_settings").execute(),await i.schema.alterTable("organization_settings_new").renameTo("organization_settings").execute()}async function Kmt(i){await i.schema.createTable("organization_settings_new").addColumn("organizationId","text",(u)=>u.primaryKey().references("organization.id").onDelete("cascade")).addColumn("modelsBindingConnectionId","text",(u)=>u.references("connections.id").onDelete("set null")).addColumn("createdAt","text",(u)=>u.notNull()).addColumn("updatedAt","text",(u)=>u.notNull()).execute(),await i.insertInto("organization_settings_new").columns(["organizationId","modelsBindingConnectionId","createdAt","updatedAt"]).expression((u)=>u.selectFrom("organization_settings").select(["organizationId",u.val(null).as("modelsBindingConnectionId"),"createdAt","updatedAt"])).execute(),await i.schema.dropTable("organization_settings").execute(),await i.schema.alterTable("organization_settings_new").renameTo("organization_settings").execute()}var tCi={};yi(tCi,{up:()=>Ymt,down:()=>Wmt});async function Ymt(i){await i.schema.alterTable("connections").addColumn("configuration_state","text").execute(),await i.schema.alterTable("connections").addColumn("configuration_scopes","text").execute()}async function Wmt(i){await i.schema.alterTable("connections").dropColumn("configuration_state").execute(),await i.schema.alterTable("connections").dropColumn("configuration_scopes").execute()}var fCi={};yi(fCi,{up:()=>Smt,down:()=>Qmt});import{sql as Lmt}from"kysely";async function Smt(i){await i.schema.alterTable("organization_settings").addColumn("sidebar_items",Lmt`text`).execute()}async function Qmt(i){await i.schema.alterTable("organization_settings").dropColumn("sidebar_items").execute()}var Hou=()=>{};var lCi={};yi(lCi,{up:()=>Hmt,down:()=>zmt});async function Hmt(i){await i.schema.createTable("monitoring_logs").addColumn("id","text",(u)=>u.primaryKey()).addColumn("organization_id","text",(u)=>u.notNull().references("organization.id").onDelete("cascade")).addColumn("connection_id","text",(u)=>u.notNull().references("connections.id").onDelete("cascade")).addColumn("connection_title","text",(u)=>u.notNull()).addColumn("tool_name","text",(u)=>u.notNull()).addColumn("input","text",(u)=>u.notNull()).addColumn("output","text",(u)=>u.notNull()).addColumn("is_error","integer",(u)=>u.notNull()).addColumn("error_message","text").addColumn("duration_ms","integer",(u)=>u.notNull()).addColumn("timestamp","text",(u)=>u.notNull()).addColumn("user_id","text").addColumn("request_id","text",(u)=>u.notNull()).execute(),await i.schema.createIndex("monitoring_logs_org_timestamp").on("monitoring_logs").columns(["organization_id","timestamp"]).execute(),await i.schema.createIndex("monitoring_logs_connection_timestamp").on("monitoring_logs").columns(["connection_id","timestamp"]).execute(),await i.schema.createIndex("monitoring_logs_is_error").on("monitoring_logs").columns(["organization_id","is_error","timestamp"]).execute()}async function zmt(i){await i.schema.dropIndex("monitoring_logs_is_error").execute(),await i.schema.dropIndex("monitoring_logs_connection_timestamp").execute(),await i.schema.dropIndex("monitoring_logs_org_timestamp").execute(),await i.schema.dropTable("monitoring_logs").execute()}var ECi={};yi(ECi,{up:()=>nmt,down:()=>Rmt});import{sql as kq}from"kysely";async function nmt(i){await i.schema.createTable("events").addColumn("id","text",(u)=>u.primaryKey()).addColumn("organization_id","text",(u)=>u.notNull().references("organization.id").onDelete("cascade")).addColumn("type","text",(u)=>u.notNull()).addColumn("source","text",(u)=>u.notNull()).addColumn("specversion","text",(u)=>u.notNull().defaultTo("1.0")).addColumn("subject","text").addColumn("time","text",(u)=>u.notNull()).addColumn("datacontenttype","text",(u)=>u.notNull().defaultTo("application/json")).addColumn("dataschema","text").addColumn("data","text").addColumn("cron","varchar(255)").addColumn("status","text",(u)=>u.notNull().defaultTo("pending")).addColumn("attempts","integer",(u)=>u.notNull().defaultTo(0)).addColumn("last_error","text").addColumn("next_retry_at","text").addColumn("created_at","text",(u)=>u.notNull().defaultTo(kq`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(u)=>u.notNull().defaultTo(kq`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("event_subscriptions").addColumn("id","text",(u)=>u.primaryKey()).addColumn("organization_id","text",(u)=>u.notNull().references("organization.id").onDelete("cascade")).addColumn("connection_id","text",(u)=>u.notNull().references("connections.id").onDelete("cascade")).addColumn("publisher","text").addColumn("event_type","text",(u)=>u.notNull()).addColumn("filter","text").addColumn("enabled","integer",(u)=>u.notNull().defaultTo(1)).addColumn("created_at","text",(u)=>u.notNull().defaultTo(kq`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(u)=>u.notNull().defaultTo(kq`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("event_deliveries").addColumn("id","text",(u)=>u.primaryKey()).addColumn("event_id","text",(u)=>u.notNull()).addColumn("subscription_id","text",(u)=>u.notNull().references("event_subscriptions.id").onDelete("cascade")).addColumn("status","text",(u)=>u.notNull().defaultTo("pending")).addColumn("attempts","integer",(u)=>u.notNull().defaultTo(0)).addColumn("last_error","text").addColumn("delivered_at","text").addColumn("next_retry_at","text").addColumn("created_at","text",(u)=>u.notNull().defaultTo(kq`CURRENT_TIMESTAMP`)).execute(),await i.schema.createIndex("idx_events_org_status").on("events").columns(["organization_id","status"]).execute(),await i.schema.createIndex("idx_events_source").on("events").columns(["source"]).execute(),await i.schema.createIndex("idx_events_type").on("events").columns(["type"]).execute(),await i.schema.createIndex("idx_events_retry").on("events").columns(["status","next_retry_at"]).execute(),await i.schema.createIndex("idx_subscriptions_connection").on("event_subscriptions").columns(["connection_id"]).execute(),await i.schema.createIndex("idx_subscriptions_type").on("event_subscriptions").columns(["event_type"]).execute(),await i.schema.createIndex("idx_subscriptions_org_enabled").on("event_subscriptions").columns(["organization_id","enabled"]).execute(),await i.schema.createIndex("idx_subscriptions_unique").on("event_subscriptions").columns(["connection_id","event_type","publisher","filter"]).unique().execute(),await i.schema.createIndex("idx_deliveries_event").on("event_deliveries").columns(["event_id"]).execute(),await i.schema.createIndex("idx_deliveries_subscription_status").on("event_deliveries").columns(["subscription_id","status"]).execute(),await i.schema.createIndex("idx_deliveries_retry").on("event_deliveries").columns(["status","next_retry_at"]).execute()}async function Rmt(i){await i.schema.dropIndex("idx_deliveries_retry").execute(),await i.schema.dropIndex("idx_deliveries_subscription_status").execute(),await i.schema.dropIndex("idx_deliveries_event").execute(),await i.schema.dropIndex("idx_subscriptions_unique").execute(),await i.schema.dropIndex("idx_subscriptions_org_enabled").execute(),await i.schema.dropIndex("idx_subscriptions_type").execute(),await i.schema.dropIndex("idx_subscriptions_connection").execute(),await i.schema.dropIndex("idx_events_retry").execute(),await i.schema.dropIndex("idx_events_type").execute(),await i.schema.dropIndex("idx_events_source").execute(),await i.schema.dropIndex("idx_events_org_status").execute(),await i.schema.dropTable("event_deliveries").execute(),await i.schema.dropTable("event_subscriptions").execute(),await i.schema.dropTable("events").execute()}var zou=()=>{};var cCi={};yi(cCi,{up:()=>Cmt,down:()=>Mmt});import{sql as bmt}from"kysely";async function Cmt(i){await i.schema.dropTable("audit_logs").ifExists().execute()}async function Mmt(i){await i.schema.createTable("audit_logs").ifNotExists().addColumn("id","text",(u)=>u.primaryKey()).addColumn("organizationId","text").addColumn("userId","text",(u)=>u.references("user.id").onDelete("set null")).addColumn("connectionId","text",(u)=>u.references("connections.id").onDelete("set null")).addColumn("toolName","text",(u)=>u.notNull()).addColumn("allowed","integer",(u)=>u.notNull()).addColumn("duration","integer").addColumn("timestamp","text",(u)=>u.notNull().defaultTo(bmt`CURRENT_TIMESTAMP`)).addColumn("requestMetadata","text").execute(),await i.schema.createIndex("idx_audit_logs_organizationId").on("audit_logs").column("organizationId").execute(),await i.schema.createIndex("idx_audit_logs_userId").on("audit_logs").column("userId").execute(),await i.schema.createIndex("idx_audit_logs_timestamp").on("audit_logs").column("timestamp").execute()}var nou=()=>{};var wCi={};yi(wCi,{up:()=>qmt,down:()=>Vmt});import{sql as N6i}from"kysely";async function qmt(i){await i.schema.createTable("gateways").addColumn("id","text",(u)=>u.primaryKey()).addColumn("organization_id","text",(u)=>u.notNull().references("organization.id").onDelete("cascade")).addColumn("title","text",(u)=>u.notNull()).addColumn("description","text").addColumn("tool_selection_strategy","text").addColumn("status","text",(u)=>u.notNull().defaultTo("active")).addColumn("is_default","integer",(u)=>u.notNull().defaultTo(0)).addColumn("created_at","text",(u)=>u.notNull().defaultTo(N6i`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(u)=>u.notNull().defaultTo(N6i`CURRENT_TIMESTAMP`)).addColumn("created_by","text",(u)=>u.notNull().references("user.id").onDelete("cascade")).addColumn("updated_by","text").execute(),await i.schema.createTable("gateway_connections").addColumn("id","text",(u)=>u.primaryKey()).addColumn("gateway_id","text",(u)=>u.notNull().references("gateways.id").onDelete("cascade")).addColumn("connection_id","text",(u)=>u.notNull().references("connections.id").onDelete("cascade")).addColumn("selected_tools","text").addColumn("created_at","text",(u)=>u.notNull().defaultTo(N6i`CURRENT_TIMESTAMP`)).execute(),await i.schema.createIndex("idx_gateways_org").on("gateways").columns(["organization_id"]).execute(),await i.schema.createIndex("idx_gateways_org_status").on("gateways").columns(["organization_id","status"]).execute(),await N6i`CREATE UNIQUE INDEX idx_gateways_default_per_org ON gateways (organization_id) WHERE is_default = 1`.execute(i),await i.schema.createIndex("idx_gateway_connections_gateway").on("gateway_connections").columns(["gateway_id"]).execute(),await i.schema.createIndex("idx_gateway_connections_connection").on("gateway_connections").columns(["connection_id"]).execute(),await i.schema.createIndex("idx_gateway_connections_unique").on("gateway_connections").columns(["gateway_id","connection_id"]).unique().execute()}async function Vmt(i){await i.schema.dropIndex("idx_gateway_connections_unique").execute(),await i.schema.dropIndex("idx_gateway_connections_connection").execute(),await i.schema.dropIndex("idx_gateway_connections_gateway").execute(),await i.schema.dropIndex("idx_gateways_default_per_org").execute(),await i.schema.dropIndex("idx_gateways_org_status").execute(),await i.schema.dropIndex("idx_gateways_org").execute(),await i.schema.dropTable("gateway_connections").execute(),await i.schema.dropTable("gateways").execute()}var Rou=()=>{};var $Ci={};yi($Ci,{up:()=>rmt,down:()=>mmt});async function rmt(i){await i.schema.alterTable("gateways").addColumn("icon","text").execute()}async function mmt(i){await i.schema.alterTable("gateways").dropColumn("icon").execute()}var hCi={};yi(hCi,{up:()=>emt,down:()=>amt});import{sql as O6i}from"kysely";async function emt(i){await i.schema.alterTable("gateways").addColumn("tool_selection_mode","text",(u)=>u.notNull().defaultTo("inclusion")).execute(),await O6i`
83453
83453
  UPDATE gateways
83454
83454
  SET tool_selection_mode = CASE
@@ -85954,12 +85954,12 @@ Guidelines:
85954
85954
  }
85955
85955
  return { consoleLogs, errors, evaluateResult };
85956
85956
  }
85957
- `,N=await fetch(`${Wg}/function?token=${encodeURIComponent(h)}`,{method:"POST",headers:{"Content-Type":"application/javascript"},body:_});if(!N.ok){let g=await N.text().catch(()=>"Unknown error");return{success:!1,error:`Browserless function call failed (${N.status}): ${g}`,url:v.url}}let Z=await N.json().catch(async()=>{return{error:`Browserless returned non-JSON response: ${(await N.text().catch(()=>"")).slice(0,200)}`}}),B=JSON.stringify(Z,null,2);t.set(w.toolCallId,B);let F=Kc(B);if(!("error"in Z)&&F>bN&&f){let g=`inspect-pages/${crypto.randomUUID()}.json`;return await f.put(g,new TextEncoder().encode(B),{contentType:"application/json"}),{success:!0,uri:LE(g),preview:B3(B),url:v.url,tokenCount:F,consoleLogCount:Z.consoleLogs?.length??0,errorCount:Z.errors?.length??0,hasEvaluateResult:Z.evaluateResult!=null}}return{success:!("error"in Z),...Z,url:v.url,tokenCount:F}}finally{i.write({type:"data-tool-metadata",id:w.toolCallId,data:{latencyMs:performance.now()-$}})}}})}function Taf(){return b0({description:"Search the web and synthesize a comprehensive research report. This tool is only available in cluster Decopilot.",inputSchema:Ni(gaf),execute:async(i)=>{throw Error("web_search is only available in cluster Decopilot.")}})}function Aaf(){return b0({description:"Record what the user is durably working toward (their goals/interests). This tool is only available in cluster Decopilot.",inputSchema:Ni(Uaf),execute:async(i)=>{throw Error("update_interests is only available in cluster Decopilot.")}})}function BL0(i){let{writer:u,toolOutputMap:t,objectStorage:f,pendingImages:l,imageTool:E,imageBackgroundDispatcher:c,includeUnavailableClusterOnlyTools:w}=i,$={user_ask:GTi,todo_write:ITi,propose_plan:kTi,read_tool_output:Svi({toolOutputMap:t})};if(w)$.web_search=Taf(),$.update_interests=Aaf();if(E)$.generate_image=ts("generate_image",Sg,Jvi(u,{...E,objectStorage:f}),c);if(process.env.BROWSERLESS_TOKEN){if($.scrape_url=ZL0(u,{toolOutputMap:t,objectStorage:f,kind:"scrape"}),$.inspect_page=ZL0(u,{toolOutputMap:t,objectStorage:f,kind:"inspect"}),l)$.take_screenshot=Kvi(u,{objectStorage:f,toolOutputMap:t,pendingImages:l})}return $}var gaf,Uaf;var FL0=O(()=>{Of();MEu();qEu();VEu();e2();Qg();rEu();gaf=X$.object({query:X$.string().max(1e4).describe("The research query. Be specific about what information you need.")}),Uaf=X$.object({interests:X$.array(X$.object({title:X$.string().max(120).describe("Short noun phrase, e.g. 'Learning Rust'"),summary:X$.string().max(500).describe("One or two sentences of context, including any progress")})).max(10)})});function gL0(i){return{search_threads:b0({description:Xg.description,inputSchema:Ni(Xg.inputSchema),execute:(u)=>Xg.execute(u,i)}),get_thread:b0({description:Jg.description,inputSchema:Ni(Jg.inputSchema),execute:(u)=>Jg.execute(u,i)}),list_thread_messages:b0({description:Kg.description,inputSchema:Ni(Kg.inputSchema),execute:(u)=>Kg.execute(u,i)})}}var UL0=O(()=>{Of();V1u();r1u();o1u()});async function Paf(i,u,t){let{provider:f,imageProvider:l,webSearchProvider:E,deepResearchProvider:c,organization:w,models:$,toolApprovalLevel:h="auto",isPlanMode:v=!1,toolOutputMap:d,pendingImages:D,passthroughClient:_,vmContext:N,htmlArtifactBuffer:Z,taskId:B,agentId:F,onChildUsage:g,backgroundDispatcher:U}=u,T={isPlanMode:v},A=t.auth?.user?.id,G=BL0({writer:i,toolOutputMap:d,passthroughClient:_,toolApprovalLevel:h,isPlanMode:v,objectStorage:t.objectStorage});if(A)G.update_interests=sW0({write:async(j)=>{await t.storage.interests.setForAgent(j.orgId,j.agentId,j.userId,{interests:j.interests})},orgId:w.id,agentId:F,userId:A});Object.assign(G,gL0(t));let k=UTi(h,!1,T)!==!1,I;if(N){let j=await Kn(t,{virtualMcpId:N.virtualMcpId,branch:N.branch,userId:N.userId,syncTools:N.syncTools}),C=MW0(j);I=bW0({fs:C.fs,htmlArtifactBuffer:Z,toolOutputMap:d,needsApproval:k,pendingImages:D,ctx:t,threadId:N.threadId,virtualMcpId:N.virtualMcpId}),Object.assign(G,I);let K=await mW0({ctx:t,orgId:w.id,virtualMcpId:N.virtualMcpId,userId:N.userId,threadId:N.threadId,writer:i,rebindFs:async(S)=>{C.swap(await Kn(t,{virtualMcpId:N.virtualMcpId,branch:S,userId:N.userId,syncTools:N.syncTools}))}});if(K)G.load_repo=K}if(f)G.subtask=ts("subtask",bEu,CEu(i,{provider:f,organization:w,models:$,self:{id:F},currentThreadId:B,needsApproval:UTi(h,!1,T)!==!1,onChildUsage:g,vmTools:I,parentBuiltInParams:u},t),U,(j)=>fL0(B,j));if(l&&$.image&&t.objectStorage)G.generate_image=ts("generate_image",Sg,iL0(i,{provider:l,imageModelInfo:$.image,objectStorage:t.objectStorage,allowHttpExternalUrls:vu().localMode}),U);if(E&&$.webSearch){let j=oEu({provider:E,modelInfo:$.webSearch,ctx:t,mode:"quick",toolName:"web_search"});G.web_search=aEu(i,{researchJob:j,toolOutputMap:d,taskId:B})}if(c&&$.deepResearch){let j=oEu({provider:c,modelInfo:$.deepResearch,ctx:t,mode:"deep",toolName:"deep_research"});G.deep_research=aEu(i,{researchJob:j,toolOutputMap:d,taskId:B,description:"Run in-depth, multi-source research and synthesize a comprehensive, cited report. Use this when the user needs thorough analysis, a literature/market review, or a question that warrants exploring many "+"sources \u2014 accuracy and depth matter more than latency. For quick "+"lookups or fact-checks, use `web_search` instead."})}if(process.env.BROWSERLESS_TOKEN){let j={baseUrl:Wg,token:process.env.BROWSERLESS_TOKEN};if(G.take_screenshot=hL0(i,{objectStorage:t.objectStorage,toolOutputMap:d,pendingImages:D}),t.objectStorage)G.scrape_url=DL0(i,{browserless:j,objectStorage:t.objectStorage,toolOutputMap:d}),G.inspect_page=NL0(i,{browserless:j,objectStorage:t.objectStorage,toolOutputMap:d})}return G}function Gaf(i,u,t){let f=u.organization.id,l=t.auth?.user?.id,E={};for(let[c,w]of Object.entries(i)){let $=w,h=$.execute;if(typeof h!=="function"){E[c]=w;continue}let v=yaf[c],d=h.constructor?.name==="AsyncGeneratorFunction",D=(N,Z)=>{if(!f||!l)return;mu.capture({distinctId:l,event:"tool_called",groups:{organization:f},properties:{organization_id:f,tool_source:"builtin",tool_name:c,tool_safe_name:c,read_only:v?.readOnly??null,destructive:v?.destructive??null,idempotent:null,open_world:null,latency_ms:Math.round(N),is_error:Z}})},_=d?async function*(N,Z){let B=performance.now(),F=!1;try{yield*h.call($,N,Z)}catch(g){throw F=!0,g}finally{D(performance.now()-B,F)}}:async(N,Z)=>{let B=performance.now(),F=!1;try{return await h.call($,N,Z)}catch(g){throw F=!0,g}finally{D(performance.now()-B,F)}};E[c]={...$,execute:_}}return E}async function XTi(i,u,t){let f=await Paf(i,u,t),l=Gaf(f,u,t);if(!u.isPlanMode){let{propose_plan:E,...c}=l;return c}return l}function TL0(i){let{ctx:u,writer:t,toolOutputMap:f,subtaskParams:l,planMode:E}=i,c={user_ask:GTi,todo_write:ITi,read_tool_output:Svi({toolOutputMap:f})};if(E)c.propose_plan=kTi;if(l.provider)c.subtask=CEu(t,l,u);return c}var yaf;var sEu=O(()=>{z4();ATi();e2();CW0();gTi();eW0();oW0();MEu();qEu();pW0();VEu();uL0();rEu();eEu();Qg();EL0();$L0();vL0();_L0();OL0();FL0();UL0();R0();yaf={read_tool_output:{readOnly:!0,destructive:!1},read_resource:{readOnly:!0,destructive:!1},read_prompt:{readOnly:!0,destructive:!1},web_search:{readOnly:!0,destructive:!1},deep_research:{readOnly:!0,destructive:!1},generate_image:{readOnly:!1,destructive:!1},open_in_agent:{readOnly:!1,destructive:!1},subtask:{readOnly:!1,destructive:!1},user_ask:{readOnly:!0,destructive:!1},propose_plan:{readOnly:!0,destructive:!1},enable_tool:{readOnly:!0,destructive:!1},todo_write:{readOnly:!1,destructive:!1},update_interests:{readOnly:!1,destructive:!1},load_repo:{readOnly:!1,destructive:!0},search_threads:{readOnly:!0,destructive:!1},get_thread:{readOnly:!0,destructive:!1},list_thread_messages:{readOnly:!0,destructive:!1}}});async function AL0(i){let u=new Map,{tools:t,nameMap:f}=await TTi(i.mcpClient,u,i.writer,i.toolApprovalLevel,{disableOutputTruncation:!1,isPlanMode:i.planMode,timeoutMs:Lvi,resolveArgs:i.resolveArgs,onToolCalled:i.onToolCalled,onPrOpened:i.onPrOpened}),l=i.fullBuiltInParams?await XTi(i.writer,{...i.fullBuiltInParams,toolOutputMap:u},i.ctx):TL0({ctx:i.ctx,writer:i.writer,toolOutputMap:u,subtaskParams:i.subtaskParams,planMode:i.planMode}),E=i.kind==="subagent"?Object.fromEntries(Object.entries(l).filter(([w])=>!Iaf.includes(w))):l;return{tools:{...t,...E},toolOutputMap:u,nameMap:f}}var Iaf;var yL0=O(()=>{ATi();sEu();Iaf=["subtask","user_ask","propose_plan"]});var KTi={};yi(KTi,{waitForSeed:()=>Waf,seedLocalMode:()=>Jaf,markSeedComplete:()=>Yaf,isLocalMode:()=>r5,getLocalAdminUser:()=>ls,getLocalAdminPassword:()=>JTi});import{userInfo as xaf}from"os";async function JTi(){return vu().betterAuthSecret||"local-mode-default"}function GL0(){try{return xaf().username||"local"}catch{return"local"}}function jaf(i){return i.charAt(0).toUpperCase()+i.slice(1)}async function Xaf(){let i=e0(),u=await i.db.selectFrom("user").select(i.db.fn.countAll().as("count")).executeTakeFirst();return Number(u?.count??0)===0}async function Jaf(){if(!await Xaf())return!1;let u=GL0(),t=`${u}@${PL0}`,f=jaf(u),l=await JTi(),E=await dt.api.signUpEmail({body:{email:t,password:l,name:f}});if(!E?.user?.id)throw Error("Failed to create local admin user");let c=E.user.id,w=e0();await w.db.updateTable("user").set({role:"admin"}).where("id","=",c).execute();let $=`${u}-local`.toLowerCase().replace(/[^a-z0-9-]/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,""),h=`${f} Local`;return await w.db.updateTable("organization").set({name:h,slug:$}).where("id","in",(v)=>v.selectFrom("member").select("organizationId").where("userId","=",c)).execute(),!0}async function ls(){let i=e0(),u=GL0(),t=await i.db.selectFrom("user").where("email","=",`${u}@${PL0}`).selectAll().executeTakeFirst();if(t)return t;return i.db.selectFrom("user").where("email","=",`${u}@${kaf}`).selectAll().executeTakeFirst()}function r5(){return vu().localMode}function Yaf(){IL0()}function Waf(){return Kaf}var PL0="localhost.studio",kaf="localhost.mesh",IL0,Kaf;var dO=O(()=>{b6();R0();F$();Kaf=new Promise((i)=>{if(IL0=i,!r5())i()})});var xL0=()=>{};function Saf(i){return i.type==="file"&&"mediaType"in i&&typeof i.mediaType==="string"&&Laf.has(i.mediaType)}function KL0(i){let u=i.match(/^data:([^;]+);base64,(.+)$/s);if(!u)return null;let[,t,f]=u;try{let l=atob(f),E=new Uint8Array(l.length);for(let c=0;c<l.length;c++)E[c]=l.charCodeAt(c);return{mimeType:t,bytes:E}}catch{return null}}function pEu(i){return{"image/png":"png","image/jpeg":"jpg","image/gif":"gif","image/webp":"webp","image/svg+xml":"svg","application/pdf":"pdf","text/plain":"txt","text/html":"html","application/json":"json"}[i]??"bin"}async function Qaf(i,u,t,f){if(!f.objectStorage)return null;try{return await f.objectStorage.put(u,i,{contentType:t}),u}catch(l){return console.error("[file-materializer] Failed to upload file:",l),null}}async function Es(i,u){if(!u.objectStorage)return null;try{return await u.objectStorage.presignedGetUrl(i,Haf)}catch(t){return console.error("[file-materializer] Failed to generate presigned URL:",t),null}}function YL0(i){try{return decodeURIComponent(i)}catch{return i}}function jL0(i,u){let t=typeof i.filename==="string"&&i.filename.trim()?i.filename:`attachment.${pEu(u)}`,f=t.match(zaf);if(f?.[1])t=YL0(f[1]);return[...t.split(/[\\/]/).pop()??t].filter((c)=>(c.codePointAt(0)??0)>=32).join("").trim()||`attachment.${pEu(u)}`}function XL0(i,u){if(!u.has(i))return u.add(i),i;let t=i.lastIndexOf("."),f=t>0?i.slice(0,t):i,l=t>0?i.slice(t):"";for(let E=2;;E++){let c=`${f} (${E})${l}`;if(!u.has(c))return u.add(c),c}}async function JL0(i,u,t,f,l){if(!l||!f.orgFs)return console.warn("[file-materializer] uploads-volume write skipped",{hasThreadId:Boolean(l),hasOrgFs:Boolean(f.orgFs)}),null;try{let E=`${l}/${t}`;return await f.orgFs.write("uploads",E,i,{actor:f.auth?.user?.id??"unknown",contentType:u}),{key:Gd("uploads",E),sandboxPath:`org/upload/${t}`}}catch(E){return console.error("[file-materializer] uploads-volume write failed:",E),null}}async function YTi(i,u,t){if(!u.organization)return i;let f=u.organization.slug;if(!f)return i;let l=i.findLastIndex((T)=>T.role==="user");if(l===-1)return i;let E=i[l],c=E.parts.filter((T)=>T.type==="file"&&("url"in T)&&typeof T.url==="string"&&T.url.startsWith("data:")),$=Boolean(t?.threadId&&u.orgFs)?E.parts.flatMap((T)=>{if(T.type!=="text"||!("text"in T)||typeof T.text!=="string")return[];let A=T.text.match(naf);if(!A?.[1]||A[2]===void 0)return[];return[{name:YL0(A[1]),content:A[2]}]}):[];if(c.length===0&&$.length===0)return i;let h=new Set,v=c.flatMap((T)=>{if(T.type!=="file"||!("url"in T)||typeof T.url!=="string")return[];let A=KL0(T.url);if(!A)return[];let G=XL0(jL0(T,A.mimeType),h);return[{dataUrl:T.url,parsed:A,filename:G}]}),d=$.map(({name:T,content:A})=>({filename:XL0(jL0({filename:T},"text/plain"),h),content:A})),_=(await Promise.all([...v.map(async({dataUrl:T,parsed:A,filename:G})=>{let k=await JL0(A.bytes,A.mimeType,G,u,t?.threadId);if(!k)return null;return{dataUrl:T,studioStorageUrl:LE(k.key),redirectUrl:hS(u.baseUrl,f,k.key),filename:G,sandboxPath:k.sandboxPath}}),...d.map(async({filename:T,content:A})=>{let G=await JL0(new TextEncoder().encode(A),C6(T),T,u,t?.threadId);if(!G)return null;return{dataUrl:null,studioStorageUrl:LE(G.key),redirectUrl:hS(u.baseUrl,f,G.key),filename:T,sandboxPath:G.sandboxPath}})])).filter((T)=>T!==null);if(_.length===0)return i;let N=_.map((T)=>T.sandboxPath?`- ${T.filename}: ${T.sandboxPath} (tool URL: ${T.studioStorageUrl})`:`- ${T.filename}: ${T.studioStorageUrl}`).join(`
85957
+ `,N=await fetch(`${Wg}/function?token=${encodeURIComponent(h)}`,{method:"POST",headers:{"Content-Type":"application/javascript"},body:_});if(!N.ok){let g=await N.text().catch(()=>"Unknown error");return{success:!1,error:`Browserless function call failed (${N.status}): ${g}`,url:v.url}}let Z=await N.json().catch(async()=>{return{error:`Browserless returned non-JSON response: ${(await N.text().catch(()=>"")).slice(0,200)}`}}),B=JSON.stringify(Z,null,2);t.set(w.toolCallId,B);let F=Kc(B);if(!("error"in Z)&&F>bN&&f){let g=`inspect-pages/${crypto.randomUUID()}.json`;return await f.put(g,new TextEncoder().encode(B),{contentType:"application/json"}),{success:!0,uri:LE(g),preview:B3(B),url:v.url,tokenCount:F,consoleLogCount:Z.consoleLogs?.length??0,errorCount:Z.errors?.length??0,hasEvaluateResult:Z.evaluateResult!=null}}return{success:!("error"in Z),...Z,url:v.url,tokenCount:F}}finally{i.write({type:"data-tool-metadata",id:w.toolCallId,data:{latencyMs:performance.now()-$}})}}})}function Taf(){return b0({description:"Search the web and synthesize a comprehensive research report. This tool is only available in cluster Decopilot.",inputSchema:Ni(gaf),execute:async(i)=>{throw Error("web_search is only available in cluster Decopilot.")}})}function Aaf(){return b0({description:"Record what the user is durably working toward (their goals/interests). This tool is only available in cluster Decopilot.",inputSchema:Ni(Uaf),execute:async(i)=>{throw Error("update_interests is only available in cluster Decopilot.")}})}function BL0(i){let{writer:u,toolOutputMap:t,objectStorage:f,pendingImages:l,imageTool:E,imageBackgroundDispatcher:c,includeUnavailableClusterOnlyTools:w}=i,$={user_ask:GTi,todo_write:ITi,propose_plan:kTi,read_tool_output:Svi({toolOutputMap:t})};if(w)$.web_search=Taf(),$.update_interests=Aaf();if(E)$.generate_image=ts("generate_image",Sg,Jvi(u,{...E,objectStorage:f}),c);if(process.env.BROWSERLESS_TOKEN){if($.scrape_url=ZL0(u,{toolOutputMap:t,objectStorage:f,kind:"scrape"}),$.inspect_page=ZL0(u,{toolOutputMap:t,objectStorage:f,kind:"inspect"}),l)$.take_screenshot=Kvi(u,{objectStorage:f,toolOutputMap:t,pendingImages:l})}return $}var gaf,Uaf;var FL0=O(()=>{Of();MEu();qEu();VEu();e2();Qg();rEu();gaf=X$.object({query:X$.string().max(1e4).describe("The research query. Be specific about what information you need.")}),Uaf=X$.object({interests:X$.array(X$.object({title:X$.string().max(120).describe("Short noun phrase, e.g. 'Learning Rust'"),summary:X$.string().max(500).describe("One or two sentences of context, including any progress")})).max(10)})});function gL0(i){return{search_threads:b0({description:Xg.description,inputSchema:Ni(Xg.inputSchema),execute:(u)=>Xg.execute(u,i)}),get_thread:b0({description:Jg.description,inputSchema:Ni(Jg.inputSchema),execute:(u)=>Jg.execute(u,i)}),list_thread_messages:b0({description:Kg.description,inputSchema:Ni(Kg.inputSchema),execute:(u)=>Kg.execute(u,i)})}}var UL0=O(()=>{Of();V1u();r1u();o1u()});async function Paf(i,u,t){let{provider:f,imageProvider:l,webSearchProvider:E,deepResearchProvider:c,organization:w,models:$,toolApprovalLevel:h="auto",isPlanMode:v=!1,toolOutputMap:d,pendingImages:D,passthroughClient:_,vmContext:N,htmlArtifactBuffer:Z,taskId:B,agentId:F,onChildUsage:g,backgroundDispatcher:U}=u,T={isPlanMode:v},A=t.auth?.user?.id,G=BL0({writer:i,toolOutputMap:d,passthroughClient:_,toolApprovalLevel:h,isPlanMode:v,objectStorage:t.objectStorage});if(A)G.update_interests=sW0({write:async(j)=>{await t.storage.interests.setForAgent(j.orgId,j.agentId,j.userId,{interests:j.interests})},orgId:w.id,agentId:F,userId:A});Object.assign(G,gL0(t));let k=UTi(h,!1,T)!==!1,I;if(N){let j=await Kn(t,{virtualMcpId:N.virtualMcpId,branch:N.branch,userId:N.userId,syncTools:N.syncTools}),C=MW0(j);I=bW0({fs:C.fs,htmlArtifactBuffer:Z,toolOutputMap:d,needsApproval:k,pendingImages:D,ctx:t,threadId:N.threadId,virtualMcpId:N.virtualMcpId}),Object.assign(G,I);let K=await mW0({ctx:t,orgId:w.id,virtualMcpId:N.virtualMcpId,userId:N.userId,threadId:N.threadId,writer:i,rebindFs:async(S)=>{C.swap(await Kn(t,{virtualMcpId:N.virtualMcpId,branch:S,userId:N.userId,syncTools:N.syncTools}))}});if(K)G.load_repo=K}if(f)G.subtask=ts("subtask",bEu,CEu(i,{provider:f,organization:w,models:$,self:{id:F},currentThreadId:B,needsApproval:UTi(h,!1,T)!==!1,onChildUsage:g,vmTools:I,parentBuiltInParams:u},t),U,(j)=>fL0(B,j));if(l&&$.image&&t.objectStorage)G.generate_image=ts("generate_image",Sg,iL0(i,{provider:l,imageModelInfo:$.image,objectStorage:t.objectStorage,allowHttpExternalUrls:vu().localMode}),U);if(E&&$.webSearch){let j=oEu({provider:E,modelInfo:$.webSearch,ctx:t,mode:"quick",toolName:"web_search"});G.web_search=aEu(i,{researchJob:j,toolOutputMap:d,taskId:B})}if(c&&$.deepResearch){let j=oEu({provider:c,modelInfo:$.deepResearch,ctx:t,mode:"deep",toolName:"deep_research"});G.deep_research=aEu(i,{researchJob:j,toolOutputMap:d,taskId:B,description:"Run in-depth, multi-source research and synthesize a comprehensive, cited report. Use this when the user needs thorough analysis, a literature/market review, or a question that warrants exploring many "+"sources \u2014 accuracy and depth matter more than latency. For quick "+"lookups or fact-checks, use `web_search` instead."})}if(process.env.BROWSERLESS_TOKEN){let j={baseUrl:Wg,token:process.env.BROWSERLESS_TOKEN};if(G.take_screenshot=hL0(i,{objectStorage:t.objectStorage,toolOutputMap:d,pendingImages:D}),t.objectStorage)G.scrape_url=DL0(i,{browserless:j,objectStorage:t.objectStorage,toolOutputMap:d}),G.inspect_page=NL0(i,{browserless:j,objectStorage:t.objectStorage,toolOutputMap:d})}return G}function Gaf(i,u,t){let f=u.organization.id,l=t.auth?.user?.id,E={};for(let[c,w]of Object.entries(i)){let $=w,h=$.execute;if(typeof h!=="function"){E[c]=w;continue}let v=yaf[c],d=h.constructor?.name==="AsyncGeneratorFunction",D=(N,Z)=>{if(!f||!l)return;mu.capture({distinctId:l,event:"tool_called",groups:{organization:f},properties:{organization_id:f,tool_source:"builtin",tool_name:c,tool_safe_name:c,read_only:v?.readOnly??null,destructive:v?.destructive??null,idempotent:null,open_world:null,latency_ms:Math.round(N),is_error:Z}})},_=d?async function*(N,Z){let B=performance.now(),F=!1;try{yield*h.call($,N,Z)}catch(g){throw F=!0,g}finally{D(performance.now()-B,F)}}:async(N,Z)=>{let B=performance.now(),F=!1;try{return await h.call($,N,Z)}catch(g){throw F=!0,g}finally{D(performance.now()-B,F)}};E[c]={...$,execute:_}}return E}async function XTi(i,u,t){let f=await Paf(i,u,t),l=Gaf(f,u,t);if(!u.isPlanMode){let{propose_plan:E,...c}=l;return c}return l}function TL0(i){let{ctx:u,writer:t,toolOutputMap:f,subtaskParams:l,planMode:E}=i,c={user_ask:GTi,todo_write:ITi,read_tool_output:Svi({toolOutputMap:f})};if(E)c.propose_plan=kTi;if(l.provider)c.subtask=CEu(t,l,u);return c}var yaf;var sEu=O(()=>{z4();ATi();e2();CW0();gTi();eW0();oW0();MEu();qEu();pW0();VEu();uL0();rEu();eEu();Qg();EL0();$L0();vL0();_L0();OL0();FL0();UL0();R0();yaf={read_tool_output:{readOnly:!0,destructive:!1},read_resource:{readOnly:!0,destructive:!1},read_prompt:{readOnly:!0,destructive:!1},web_search:{readOnly:!0,destructive:!1},deep_research:{readOnly:!0,destructive:!1},generate_image:{readOnly:!1,destructive:!1},open_in_agent:{readOnly:!1,destructive:!1},subtask:{readOnly:!1,destructive:!1},user_ask:{readOnly:!0,destructive:!1},propose_plan:{readOnly:!0,destructive:!1},enable_tool:{readOnly:!0,destructive:!1},todo_write:{readOnly:!1,destructive:!1},update_interests:{readOnly:!1,destructive:!1},load_repo:{readOnly:!1,destructive:!0},search_threads:{readOnly:!0,destructive:!1},get_thread:{readOnly:!0,destructive:!1},list_thread_messages:{readOnly:!0,destructive:!1}}});async function AL0(i){let u=i.toolOutputMap??new Map,{tools:t,nameMap:f}=await TTi(i.mcpClient,u,i.writer,i.toolApprovalLevel,{disableOutputTruncation:!1,isPlanMode:i.planMode,timeoutMs:Lvi,resolveArgs:i.resolveArgs,onToolCalled:i.onToolCalled,onPrOpened:i.onPrOpened}),l=i.fullBuiltInParams?await XTi(i.writer,{...i.fullBuiltInParams,toolOutputMap:u},i.ctx):TL0({ctx:i.ctx,writer:i.writer,toolOutputMap:u,subtaskParams:i.subtaskParams,planMode:i.planMode}),E=i.kind==="subagent"?Object.fromEntries(Object.entries(l).filter(([w])=>!Iaf.includes(w))):l;return{tools:{...t,...E},toolOutputMap:u,nameMap:f}}var Iaf;var yL0=O(()=>{ATi();sEu();Iaf=["subtask","user_ask","propose_plan"]});var KTi={};yi(KTi,{waitForSeed:()=>Waf,seedLocalMode:()=>Jaf,markSeedComplete:()=>Yaf,isLocalMode:()=>r5,getLocalAdminUser:()=>ls,getLocalAdminPassword:()=>JTi});import{userInfo as xaf}from"os";async function JTi(){return vu().betterAuthSecret||"local-mode-default"}function GL0(){try{return xaf().username||"local"}catch{return"local"}}function jaf(i){return i.charAt(0).toUpperCase()+i.slice(1)}async function Xaf(){let i=e0(),u=await i.db.selectFrom("user").select(i.db.fn.countAll().as("count")).executeTakeFirst();return Number(u?.count??0)===0}async function Jaf(){if(!await Xaf())return!1;let u=GL0(),t=`${u}@${PL0}`,f=jaf(u),l=await JTi(),E=await dt.api.signUpEmail({body:{email:t,password:l,name:f}});if(!E?.user?.id)throw Error("Failed to create local admin user");let c=E.user.id,w=e0();await w.db.updateTable("user").set({role:"admin"}).where("id","=",c).execute();let $=`${u}-local`.toLowerCase().replace(/[^a-z0-9-]/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,""),h=`${f} Local`;return await w.db.updateTable("organization").set({name:h,slug:$}).where("id","in",(v)=>v.selectFrom("member").select("organizationId").where("userId","=",c)).execute(),!0}async function ls(){let i=e0(),u=GL0(),t=await i.db.selectFrom("user").where("email","=",`${u}@${PL0}`).selectAll().executeTakeFirst();if(t)return t;return i.db.selectFrom("user").where("email","=",`${u}@${kaf}`).selectAll().executeTakeFirst()}function r5(){return vu().localMode}function Yaf(){IL0()}function Waf(){return Kaf}var PL0="localhost.studio",kaf="localhost.mesh",IL0,Kaf;var dO=O(()=>{b6();R0();F$();Kaf=new Promise((i)=>{if(IL0=i,!r5())i()})});var xL0=()=>{};function Saf(i){return i.type==="file"&&"mediaType"in i&&typeof i.mediaType==="string"&&Laf.has(i.mediaType)}function KL0(i){let u=i.match(/^data:([^;]+);base64,(.+)$/s);if(!u)return null;let[,t,f]=u;try{let l=atob(f),E=new Uint8Array(l.length);for(let c=0;c<l.length;c++)E[c]=l.charCodeAt(c);return{mimeType:t,bytes:E}}catch{return null}}function pEu(i){return{"image/png":"png","image/jpeg":"jpg","image/gif":"gif","image/webp":"webp","image/svg+xml":"svg","application/pdf":"pdf","text/plain":"txt","text/html":"html","application/json":"json"}[i]??"bin"}async function Qaf(i,u,t,f){if(!f.objectStorage)return null;try{return await f.objectStorage.put(u,i,{contentType:t}),u}catch(l){return console.error("[file-materializer] Failed to upload file:",l),null}}async function Es(i,u){if(!u.objectStorage)return null;try{return await u.objectStorage.presignedGetUrl(i,Haf)}catch(t){return console.error("[file-materializer] Failed to generate presigned URL:",t),null}}function YL0(i){try{return decodeURIComponent(i)}catch{return i}}function jL0(i,u){let t=typeof i.filename==="string"&&i.filename.trim()?i.filename:`attachment.${pEu(u)}`,f=t.match(zaf);if(f?.[1])t=YL0(f[1]);return[...t.split(/[\\/]/).pop()??t].filter((c)=>(c.codePointAt(0)??0)>=32).join("").trim()||`attachment.${pEu(u)}`}function XL0(i,u){if(!u.has(i))return u.add(i),i;let t=i.lastIndexOf("."),f=t>0?i.slice(0,t):i,l=t>0?i.slice(t):"";for(let E=2;;E++){let c=`${f} (${E})${l}`;if(!u.has(c))return u.add(c),c}}async function JL0(i,u,t,f,l){if(!l||!f.orgFs)return console.warn("[file-materializer] uploads-volume write skipped",{hasThreadId:Boolean(l),hasOrgFs:Boolean(f.orgFs)}),null;try{let E=`${l}/${t}`;return await f.orgFs.write("uploads",E,i,{actor:f.auth?.user?.id??"unknown",contentType:u}),{key:Gd("uploads",E),sandboxPath:`org/upload/${t}`}}catch(E){return console.error("[file-materializer] uploads-volume write failed:",E),null}}async function YTi(i,u,t){if(!u.organization)return i;let f=u.organization.slug;if(!f)return i;let l=i.findLastIndex((T)=>T.role==="user");if(l===-1)return i;let E=i[l],c=E.parts.filter((T)=>T.type==="file"&&("url"in T)&&typeof T.url==="string"&&T.url.startsWith("data:")),$=Boolean(t?.threadId&&u.orgFs)?E.parts.flatMap((T)=>{if(T.type!=="text"||!("text"in T)||typeof T.text!=="string")return[];let A=T.text.match(naf);if(!A?.[1]||A[2]===void 0)return[];return[{name:YL0(A[1]),content:A[2]}]}):[];if(c.length===0&&$.length===0)return i;let h=new Set,v=c.flatMap((T)=>{if(T.type!=="file"||!("url"in T)||typeof T.url!=="string")return[];let A=KL0(T.url);if(!A)return[];let G=XL0(jL0(T,A.mimeType),h);return[{dataUrl:T.url,parsed:A,filename:G}]}),d=$.map(({name:T,content:A})=>({filename:XL0(jL0({filename:T},"text/plain"),h),content:A})),_=(await Promise.all([...v.map(async({dataUrl:T,parsed:A,filename:G})=>{let k=await JL0(A.bytes,A.mimeType,G,u,t?.threadId);if(!k)return null;return{dataUrl:T,studioStorageUrl:LE(k.key),redirectUrl:hS(u.baseUrl,f,k.key),filename:G,sandboxPath:k.sandboxPath}}),...d.map(async({filename:T,content:A})=>{let G=await JL0(new TextEncoder().encode(A),C6(T),T,u,t?.threadId);if(!G)return null;return{dataUrl:null,studioStorageUrl:LE(G.key),redirectUrl:hS(u.baseUrl,f,G.key),filename:T,sandboxPath:G.sandboxPath}})])).filter((T)=>T!==null);if(_.length===0)return i;let N=_.map((T)=>T.sandboxPath?`- ${T.filename}: ${T.sandboxPath} (tool URL: ${T.studioStorageUrl})`:`- ${T.filename}: ${T.studioStorageUrl}`).join(`
85958
85958
  `),Z=_.some((T)=>T.sandboxPath)?`[Attached files \u2014 already inside your sandbox; read them at the given path. The tool URL is only for tools that take a URL argument]
85959
85959
  ${N}`:`[Uploaded files \u2014 use these URLs when calling tools]
85960
85960
  ${N}`,B=new Map(_.flatMap((T)=>T.dataUrl?[[T.dataUrl,T.studioStorageUrl]]:[])),F=E.parts.map((T)=>{if(T.type!=="file"||!("url"in T)||typeof T.url!=="string")return T;let A=B.get(T.url);if(!A)return T;return{...T,url:A}}),g=F.findIndex((T)=>T.type==="text"),U;if(g!==-1)U=F.map((T,A)=>{if(A!==g||T.type!=="text")return T;return{...T,text:`${Z}
85961
85961
 
85962
- ${"text"in T?T.text:""}`.trim()}});else U=[{type:"text",text:Z},...F];return[...i.slice(0,l),{...E,parts:U},...i.slice(l+1)]}async function WTi(i,u){if(!u.organization)return i;let t=i.map((w)=>{let $=w.parts.filter((h)=>!Saf(h));return $.length===w.parts.length?w:{...w,parts:$}}),f=new Set;for(let w of t)for(let $ of w.parts)if($.type==="file"&&"url"in $&&typeof $.url==="string"){let h=Go($.url);if(h)f.add(h)}let l=r5(),E=new Map;if(await Promise.all(Array.from(f).map(async(w)=>{let $=await Es(w,u);if(!$)return;if(l&&!$.startsWith("https://"))try{let h=await u.objectStorage.getBytes(w);if(h.byteLength<=kL0){E.set(w,{kind:"bytes",b64:Buffer.from(h).toString("base64")});return}console.warn(`[file-materializer] dev inline skipped (${h.byteLength}B > ${kL0}B):`,w)}catch(h){console.error("[file-materializer] dev inline read failed; passing URL through:",h)}E.set(w,{kind:"url",url:$})})),E.size===0)return Raf(t,u);return t.map((w)=>{let $=w.parts.map((v)=>{if(v.type==="file"&&"url"in v&&typeof v.url==="string"){let d=Go(v.url);if(d){let D=E.get(d);if(D?.kind==="url")return{...v,url:D.url};if(D?.kind==="bytes"){let _="mediaType"in v&&typeof v.mediaType==="string"?v.mediaType:"application/octet-stream";return{...v,url:`data:${_};base64,${D.b64}`}}}}return v});return $.some((v,d)=>v!==w.parts[d])?{...w,parts:$}:w})}async function WL0(i,u){let t=new Set;if(icu(i,t),t.size===0)return i;let f=new Map;if(await Promise.all(Array.from(t).map(async(l)=>{let E=await Es(l,u);if(E)f.set(l,E)})),f.size===0)return i;return ucu(i,f)}function icu(i,u){if(typeof i==="string")for(let t of i.matchAll(Elu()))u.add(t[1]);else if(Array.isArray(i))for(let t of i)icu(t,u);else if(i!==null&&typeof i==="object")for(let t of Object.values(i))icu(t,u)}function ucu(i,u){if(typeof i==="string")return i.replace(Elu(),(t,f)=>u.get(f)??LE(f));if(Array.isArray(i))return i.map((t)=>ucu(t,u));if(i!==null&&typeof i==="object")return Object.fromEntries(Object.entries(i).map(([t,f])=>[t,ucu(f,u)]));return i}async function Raf(i,u){let t=i.findLastIndex((h)=>h.role==="user");if(t===-1)return i;let f=i[t],l=f.parts.filter((h)=>h.type==="file"&&("url"in h)&&typeof h.url==="string"&&h.url.startsWith("data:"));if(l.length===0)return i;let c=(await Promise.all(l.map(async(h)=>{if(h.type!=="file"||!("url"in h)||typeof h.url!=="string")return null;let v=KL0(h.url);if(!v)return null;let d=pEu(v.mimeType),D=`chat-uploads/${crypto.randomUUID()}.${d}`,_=await Qaf(v.bytes,D,v.mimeType,u);if(!_)return null;let N=await Es(_,u);return N?{dataUrl:h.url,presigned:N}:null}))).filter((h)=>h!==null);if(c.length===0)return i;let w=new Map(c.map((h)=>[h.dataUrl,h.presigned])),$=f.parts.map((h)=>{if(h.type!=="file"||!("url"in h)||typeof h.url!=="string")return h;let v=w.get(h.url);return v?{...h,url:v}:h});return[...i.slice(0,t),{...f,parts:$},...i.slice(t+1)]}var Laf,Haf=604800,kL0=20971520,zaf,naf;var Qn=O(()=>{dO();qq();Dd();xL0();Laf=new Set(["application/vnd.openxmlformats-officedocument.presentationml.presentation","application/vnd.openxmlformats-officedocument.wordprocessingml.document","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"]);zaf=/^\[file::\/\/(.+?)\]$/,naf=/^\[file::\/\/(.+?)\]\n([\s\S]*)$/});function LTi(i,u){return{resolveArgs:(t)=>WL0(t,i),onToolCalled:(t)=>{if(!t.isError&&xG0(t.toolName))cn(i,"in_review",u);let f=i.organization?.id,l=i.auth?.user?.id;if(!f||!l)return;mu.capture({distinctId:l,event:"tool_called",groups:{organization:f},properties:{organization_id:f,tool_source:"mcp",tool_name:t.toolName,tool_safe_name:t.toolSafeName,read_only:t.annotations?.readOnlyHint??null,destructive:t.annotations?.destructiveHint??null,idempotent:t.annotations?.idempotentHint??null,open_world:t.annotations?.openWorldHint??null,latency_ms:Math.round(t.latencyMs),is_error:t.isError}})},onPrOpened:(t)=>{dvi(i,t.result,t.connectionId,u)}}}var tcu=O(()=>{z4();Qn();jv()});function LL0(i){if(i instanceof Error)return i.message;if(typeof i==="string")return i;if(typeof i==="object"&&i!==null){let u=i.message;if(typeof u==="string")return u;try{return JSON.stringify(i)}catch{return String(i)}}return String(i)}function SL0(i){let u,t,f=new Promise((w)=>{t=w}),l=(w)=>{if(u===void 0)u=w;t(u)},c=(i.streamText??n5)({model:i.model,system:i.systemMessages,messages:i.messages,tools:i.tools,providerOptions:lW0,prepareStep:i.prepareStep,temperature:i.temperature,maxOutputTokens:i.maxOutputTokens,stopWhen:i.stopWhen,abortSignal:i.abortSignal,onStepFinish:i.onStepFinish,onError:async(w)=>{let $=w.error??w,h=LL0($);i.onError?.(h,$),l(h)},onAbort:async()=>{l(u??"Run aborted before completion.")}});return Promise.resolve(c.finishReason).then(()=>{if(u===void 0)t(void 0)}).catch((w)=>{let $=LL0(w);i.onError?.($,w),l($)}),{result:c,error:f}}var QL0=O(()=>{Of();LEu()});import{SpanStatusCode as fcu,trace as baf}from"@opentelemetry/api";async function Ln(i){let u=i.tracer??baf.getTracer("decopilot"),t=i.stepLimit??(i.kind==="agent"?r20:e9),f=i.planMode??!1,l=i.toolApprovalLevel??"auto",E=u.startSpan("decopilot.agent_loop",{attributes:{"decopilot.agent.id":i.virtualMcp.id,"decopilot.agent.kind":i.kind,"decopilot.organization.id":i.organization.id,"decopilot.model.id":i.models.thinking.id}}),c=await TW0({ctx:i.ctx,organization:i.organization,virtualMcp:i.virtualMcp,kind:i.kind,planMode:f,isDecopilot:i.isDecopilot,agentInstructions:i.systemAgentInstructions,currentThreadId:i.currentThreadId,user:i.user,userContext:i.userContext,codingWorkspace:i.codingWorkspace,passthroughClient:i.passthroughClient,connectionsData:i.connectionsData}),w=i.additionalSystemMessages&&i.additionalSystemMessages.length>0?[...c,...i.additionalSystemMessages]:c,{resolveArgs:$,onToolCalled:h,onPrOpened:v}=LTi(i.ctx,i.currentThreadId),{tools:d}=await AL0({kind:i.kind,ctx:i.ctx,mcpClient:i.mcpClient,writer:i.writer,planMode:f,toolApprovalLevel:l,subtaskParams:i.subtaskParams,resolveArgs:$,onToolCalled:h,onPrOpened:v,fullBuiltInParams:i.subagentBuiltInParams}),D=i.extraTools?{...d,...i.extraTools}:d,_=i.__streamText?void 0:Wvi(i.provider,i.models.thinking),N=(B)=>{for(let F of B.toolCalls??[]){let g=F.input?.command;if(F.toolName==="bash"&&g&&kG0(g)){cn(i.ctx,"in_review",i.currentThreadId);let U=(B.toolResults??[]).find((T)=>T.toolCallId===F.toolCallId);dvi(i.ctx,U?.output,null,i.currentThreadId);break}}return i.onStepFinish?.(B)},Z=SL0({model:_,systemMessages:w,messages:i.messages,tools:D,prepareStep:i.prepareStep,temperature:i.temperature,maxOutputTokens:gI0(i.models.thinking.limits,Kc(w)+Kc(i.messages)+Kc(FI0(D,i.activeToolNames))),stopWhen:WN(t),abortSignal:i.abortSignal,onStepFinish:N,streamText:i.__streamText,onError:(B,F)=>{if(console.error(`[runAgentLoop:${i.kind}:${i.virtualMcp.id}] Error`,B),E.setStatus({code:fcu.ERROR,message:B}),F instanceof Error)E.recordException(F)}});return Promise.resolve(Z.result.finishReason).then(()=>{E.setStatus({code:fcu.OK})}).catch((B)=>{let F=B instanceof Error?B.message:typeof B==="string"?B:`${B}`;E.setStatus({code:fcu.ERROR,message:F})}).finally(()=>E.end()),{result:Z.result,error:Z.error,span:E,assembledSystemMessages:w}}var PTi=O(()=>{Of();hlu();e2();JF();AW0();yL0();tcu();jv();QL0()});function STi(){let i=[],u=!1,t=null,f=()=>{let c=t;t=null,c?.()},l=(c)=>{if(u)return;i.push(c),f()},E=async function*(){try{while(!u||i.length>0){let c=i.shift();if(c){yield c;continue}await new Promise((w)=>{t=w})}}finally{u=!0,f()}}();return{writer:{write:(c)=>l(c),merge:async(c)=>{let w=c;if(typeof w[Symbol.asyncIterator]==="function"){for await(let h of w)l(h);return}let $=c.getReader();try{while(!0){let{value:h,done:v}=await $.read();if(v)return;l(h)}}finally{$.releaseLock()}},onError:()=>{}},stream:E,close:()=>{u=!0,f()}}}async function Maf(i){let u=i.getReader();try{while(!0){let{done:t}=await u.read();if(t)return}}finally{u.releaseLock()}}async function QTi(i,u){let{runId:t,fenceToken:f}=i,l=i.fenceOk??(()=>!0),E=i.initialAckSeq??0,c=new Set,w;async function*$(){try{for await(let{seq:d,chunk:D}of i.chunks){if(!await l())continue;if(d<=E||c.has(d))continue;if(!await u.streamBuffer.publishRawChunk(t,D,{fenceToken:f,seq:d}))throw Error("publishRawChunk failed");c.add(d);let _=E;while(c.has(E+1))c.delete(E+1),E+=1;if(E>_)i.onPublished?.(E);yield D}}catch(d){throw w=d,d}}let{uiStream:h,whenComplete:v}=ivi({chunks:$(),originalMessages:i.originalMessages,title:{...u.title,persistTitle:async()=>{}},persistence:u.persistence??Caf,hooks:u.hooks,errorMessageId:i.errorMessageId});if(await Maf(h),await v,w!==void 0){if(w instanceof Error)w.lastAckSeq=E;throw w}if(E>0)await u.streamBuffer.publishDone(t,f,E)}var Caf;var lcu=O(()=>{l1u();Caf={emitStepParts:async()=>{},emitFinal:async()=>{},emitError:async()=>{}}});import{DBOS as NY,DBOSClient as qaf}from"@dbos-inc/dbos-sdk";function nL0(i){Ecu=i}function zTi(){if(!Ecu)throw Error("[background-tool] DBOS runtime not initialized \u2014 setBackgroundToolRuntime() must run before workflows fire");return Ecu}function Vaf(){return HL0??=qaf.create({systemDatabaseUrl:zTi().systemDatabaseUrl,systemDatabaseSchemaName:"dbos"}),HL0}function HTi(i){let u=i.modelMeta.capabilities;return{id:i.modelId,title:i.modelMeta.title??i.modelId,provider:i.modelMeta.providerId??null,capabilities:u&&u.length>0?{vision:u.includes("vision")||u.includes("image")||void 0,text:u.includes("text")||void 0,reasoning:u.includes("reasoning")||void 0}:void 0,limits:i.modelMeta.limits?{contextWindow:i.modelMeta.limits.contextWindow,maxOutputTokens:i.modelMeta.limits.maxOutputTokens??void 0}:void 0}}async function ccu(i){let[u,t,f,l]=await Promise.all([Z3(i,"smart"),H5(i,"image"),H5(i,"web_search"),H5(i,"deep_research")]);return{credentialId:u.credentialId,thinking:HTi(u),...t?{image:{...HTi(t),credentialId:t.credentialId}}:{},...f?{webSearch:{...HTi(f),credentialId:f.credentialId}}:{},...l?{deepResearch:{...HTi(l),credentialId:l.credentialId}}:{}}}async function nTi(i){let u=await zTi().studioContextFactory(i.orgId,i.userId);if(!u)throw Error(`[background-tool] studio context unavailable for org ${i.orgId} user ${i.userId}`);return u}function RL0(i){return{target:Ivi({sandboxProviderKind:i?.sandbox_provider_kind??"agent-sandbox"}),harnessId:i?.harness_id??"decopilot"}}function bL0(i,u){return{messages:[{id:`${i.jobId}:react-msg`,role:"user",metadata:{internal:!0},parts:[{type:"text",text:u.nudge}]}],models:u.models,agent:{id:i.agentId},temperature:i.temperature,toolApprovalLevel:i.toolApprovalLevel,mode:"default",organizationId:i.orgId,userId:i.userId,taskId:i.threadId,branch:i.branch??void 0,resumedFromBackground:!0,target:u.target,harnessId:u.harnessId??void 0}}function raf(i){return{ctx:i,studioContext:()=>nTi(i),emitFinal:(u)=>NY.runStep(()=>saf(i,u),{name:"appendResult"})}}function eaf(i){if(!i?.parts)return"";return i.parts.map((u)=>u&&typeof u==="object"&&u.type==="text"?u.text??"":"").filter((u)=>u.trim().length>0).join("").trim()}async function aaf(i){let u=await nTi(i),t=u.organization;if(!t)throw Error(`[background-tool] organization context unavailable for subtask (org ${i.orgId})`);let f=i.input,l=!f.agent_id||f.agent_id===i.agentId,E=l?i.agentId:f.agent_id,c=await ccu(u),w=await u.aiProviders.activate(c.credentialId,i.orgId),$={thinking:{...c.thinking,credentialId:c.credentialId},...c.image?{image:c.image}:{},...c.webSearch?{webSearch:c.webSearch}:{},...c.deepResearch?{deepResearch:c.deepResearch}:{}},{mcpClient:h,targetKind:v,targetRef:d}=await yTi(u,i.orgId,E,{superUser:l}),D=$.image,_=$.webSearch,N=$.deepResearch,Z=D?.credentialId?await u.aiProviders.activate(D.credentialId,i.orgId):null,B=_?.credentialId?await u.aiProviders.activate(_.credentialId,i.orgId):null,F=N?.credentialId?await u.aiProviders.activate(N.credentialId,i.orgId):null,g={provider:w,imageProvider:Z,webSearchProvider:B,deepResearchProvider:F,organization:t,models:$,toolApprovalLevel:i.toolApprovalLevel,isPlanMode:!1,passthroughClient:h,pendingImages:[],vmContext:v==="virtual-mcp"?{virtualMcpId:d.id,branch:d.repo?i.branch??`thread:${i.threadId}`:"ephemeral",userId:i.userId,threadId:i.threadId}:null,taskId:i.threadId,agentId:d.id,backgroundDispatcher:null},U=STi(),T=flu(i.threadId),A="",G="stop";try{let k=await Ln({kind:"subagent",ctx:u,organization:t,virtualMcp:d,mcpClient:h,provider:w,models:$,messages:[{role:"user",content:f.prompt}],systemAgentInstructions:d.instructions,abortSignal:T.signal,stepLimit:e9,toolApprovalLevel:"auto",planMode:!1,writer:U.writer,subtaskParams:{provider:w,organization:t,models:$,needsApproval:!1},passthroughClient:h,subagentBuiltInParams:g}),I=0,j=k.result.toUIMessageStream({generateMessageId:()=>`${i.jobId}:msg:${I++}`,messageMetadata:({part:r})=>r.type==="start"?{subtaskJobId:i.jobId}:void 0}),C=0;async function*K(){let r=j.getReader();try{while(!0){let{done:Q,value:ui}=await r.read();if(Q)break;yield{seq:++C,chunk:ui}}}finally{r.releaseLock()}}let S=new WE({storage:u.storage.threads.messageParts(),orgId:i.orgId,threadId:i.threadId,runId:i.jobId});return await QTi({runId:i.jobId,fenceToken:i.jobId,chunks:K()},{streamBuffer:zTi().streamBuffer,persistence:S,title:{threadId:i.threadId,currentThreadTitle:void 0,persistTitle:async()=>{}},hooks:{onFinish:async(r,Q)=>{let ui=eaf(r);if(ui)A=ui;if(Q)G=Q}}}),{report:A,finishReason:G,models:c}}finally{U.close(),llu(i.threadId,T),await h.close().catch(()=>{})}}async function oaf(i){let u=await i.studioContext(),t=await ccu(u),f=t.image;if(!f?.credentialId)throw Error("[background-tool] no image model configured for org");let l=await u.aiProviders.activate(f.credentialId,i.ctx.orgId),E=flu(i.ctx.threadId);try{return{result:await clu(i.ctx.input,{provider:l,imageModelInfo:{id:f.id},objectStorage:u.objectStorage,allowHttpExternalUrls:vu().localMode,abortSignal:E.signal}),models:t}}finally{llu(i.ctx.threadId,E)}}async function saf(i,u){let t=await nTi(i);if(!await t.storage.threads.get(i.threadId))throw Error(`[background-tool] thread ${i.threadId} not found`);await new WE({storage:t.storage.threads.messageParts(),orgId:i.orgId,threadId:i.threadId,runId:i.jobId}).emitFinal({id:`${i.jobId}:msg`,role:"assistant",parts:u})}async function CL0(i){let{snapshot:u,jobId:t,report:f}=i,l={...u,jobId:t,toolName:"subtask",input:{},toolCallId:`${t}:deliver`},E=await nTi(l),c=f.trim().length>0;await new WE({storage:E.storage.threads.messageParts(),orgId:u.orgId,threadId:u.threadId,runId:t}).emitFinal({id:`${t}:result`,role:"assistant",parts:[{type:"text",text:c?f:"_The subtask produced no output._"}],metadata:{subtaskJobId:t}});let $=await ccu(E),{target:h,harnessId:v}=RL0(await E.storage.threads.get(u.threadId)),d=c?`The background subtask you started has completed. Its result:
85962
+ ${"text"in T?T.text:""}`.trim()}});else U=[{type:"text",text:Z},...F];return[...i.slice(0,l),{...E,parts:U},...i.slice(l+1)]}async function WTi(i,u){if(!u.organization)return i;let t=i.map((w)=>{let $=w.parts.filter((h)=>!Saf(h));return $.length===w.parts.length?w:{...w,parts:$}}),f=new Set;for(let w of t)for(let $ of w.parts)if($.type==="file"&&"url"in $&&typeof $.url==="string"){let h=Go($.url);if(h)f.add(h)}let l=r5(),E=new Map;if(await Promise.all(Array.from(f).map(async(w)=>{let $=await Es(w,u);if(!$)return;if(l&&!$.startsWith("https://"))try{let h=await u.objectStorage.getBytes(w);if(h.byteLength<=kL0){E.set(w,{kind:"bytes",b64:Buffer.from(h).toString("base64")});return}console.warn(`[file-materializer] dev inline skipped (${h.byteLength}B > ${kL0}B):`,w)}catch(h){console.error("[file-materializer] dev inline read failed; passing URL through:",h)}E.set(w,{kind:"url",url:$})})),E.size===0)return Raf(t,u);return t.map((w)=>{let $=w.parts.map((v)=>{if(v.type==="file"&&"url"in v&&typeof v.url==="string"){let d=Go(v.url);if(d){let D=E.get(d);if(D?.kind==="url")return{...v,url:D.url};if(D?.kind==="bytes"){let _="mediaType"in v&&typeof v.mediaType==="string"?v.mediaType:"application/octet-stream";return{...v,url:`data:${_};base64,${D.b64}`}}}}return v});return $.some((v,d)=>v!==w.parts[d])?{...w,parts:$}:w})}async function WL0(i,u){let t=new Set;if(icu(i,t),t.size===0)return i;let f=new Map;if(await Promise.all(Array.from(t).map(async(l)=>{let E=await Es(l,u);if(E)f.set(l,E)})),f.size===0)return i;return ucu(i,f)}function icu(i,u){if(typeof i==="string")for(let t of i.matchAll(Elu()))u.add(t[1]);else if(Array.isArray(i))for(let t of i)icu(t,u);else if(i!==null&&typeof i==="object")for(let t of Object.values(i))icu(t,u)}function ucu(i,u){if(typeof i==="string")return i.replace(Elu(),(t,f)=>u.get(f)??LE(f));if(Array.isArray(i))return i.map((t)=>ucu(t,u));if(i!==null&&typeof i==="object")return Object.fromEntries(Object.entries(i).map(([t,f])=>[t,ucu(f,u)]));return i}async function Raf(i,u){let t=i.findLastIndex((h)=>h.role==="user");if(t===-1)return i;let f=i[t],l=f.parts.filter((h)=>h.type==="file"&&("url"in h)&&typeof h.url==="string"&&h.url.startsWith("data:"));if(l.length===0)return i;let c=(await Promise.all(l.map(async(h)=>{if(h.type!=="file"||!("url"in h)||typeof h.url!=="string")return null;let v=KL0(h.url);if(!v)return null;let d=pEu(v.mimeType),D=`chat-uploads/${crypto.randomUUID()}.${d}`,_=await Qaf(v.bytes,D,v.mimeType,u);if(!_)return null;let N=await Es(_,u);return N?{dataUrl:h.url,presigned:N}:null}))).filter((h)=>h!==null);if(c.length===0)return i;let w=new Map(c.map((h)=>[h.dataUrl,h.presigned])),$=f.parts.map((h)=>{if(h.type!=="file"||!("url"in h)||typeof h.url!=="string")return h;let v=w.get(h.url);return v?{...h,url:v}:h});return[...i.slice(0,t),{...f,parts:$},...i.slice(t+1)]}var Laf,Haf=604800,kL0=20971520,zaf,naf;var Qn=O(()=>{dO();qq();Dd();xL0();Laf=new Set(["application/vnd.openxmlformats-officedocument.presentationml.presentation","application/vnd.openxmlformats-officedocument.wordprocessingml.document","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"]);zaf=/^\[file::\/\/(.+?)\]$/,naf=/^\[file::\/\/(.+?)\]\n([\s\S]*)$/});function LTi(i,u){return{resolveArgs:(t)=>WL0(t,i),onToolCalled:(t)=>{if(!t.isError&&xG0(t.toolName))cn(i,"in_review",u);let f=i.organization?.id,l=i.auth?.user?.id;if(!f||!l)return;mu.capture({distinctId:l,event:"tool_called",groups:{organization:f},properties:{organization_id:f,tool_source:"mcp",tool_name:t.toolName,tool_safe_name:t.toolSafeName,read_only:t.annotations?.readOnlyHint??null,destructive:t.annotations?.destructiveHint??null,idempotent:t.annotations?.idempotentHint??null,open_world:t.annotations?.openWorldHint??null,latency_ms:Math.round(t.latencyMs),is_error:t.isError}})},onPrOpened:(t)=>{dvi(i,t.result,t.connectionId,u)}}}var tcu=O(()=>{z4();Qn();jv()});function LL0(i){if(i instanceof Error)return i.message;if(typeof i==="string")return i;if(typeof i==="object"&&i!==null){let u=i.message;if(typeof u==="string")return u;try{return JSON.stringify(i)}catch{return String(i)}}return String(i)}function SL0(i){let u,t,f=new Promise((w)=>{t=w}),l=(w)=>{if(u===void 0)u=w;t(u)},c=(i.streamText??n5)({model:i.model,system:i.systemMessages,messages:i.messages,tools:i.tools,providerOptions:lW0,prepareStep:i.prepareStep,temperature:i.temperature,maxOutputTokens:i.maxOutputTokens,stopWhen:i.stopWhen,abortSignal:i.abortSignal,onStepFinish:i.onStepFinish,onError:async(w)=>{let $=w.error??w,h=LL0($);i.onError?.(h,$),l(h)},onAbort:async()=>{l(u??"Run aborted before completion.")}});return Promise.resolve(c.finishReason).then(()=>{if(u===void 0)t(void 0)}).catch((w)=>{let $=LL0(w);i.onError?.($,w),l($)}),{result:c,error:f}}var QL0=O(()=>{Of();LEu()});import{SpanStatusCode as fcu,trace as baf}from"@opentelemetry/api";async function Ln(i){let u=i.tracer??baf.getTracer("decopilot"),t=i.stepLimit??(i.kind==="agent"?r20:e9),f=i.planMode??!1,l=i.toolApprovalLevel??"auto",E=u.startSpan("decopilot.agent_loop",{attributes:{"decopilot.agent.id":i.virtualMcp.id,"decopilot.agent.kind":i.kind,"decopilot.organization.id":i.organization.id,"decopilot.model.id":i.models.thinking.id}}),c=await TW0({ctx:i.ctx,organization:i.organization,virtualMcp:i.virtualMcp,kind:i.kind,planMode:f,isDecopilot:i.isDecopilot,agentInstructions:i.systemAgentInstructions,currentThreadId:i.currentThreadId,user:i.user,userContext:i.userContext,codingWorkspace:i.codingWorkspace,passthroughClient:i.passthroughClient,connectionsData:i.connectionsData}),w=i.additionalSystemMessages&&i.additionalSystemMessages.length>0?[...c,...i.additionalSystemMessages]:c,{resolveArgs:$,onToolCalled:h,onPrOpened:v}=LTi(i.ctx,i.currentThreadId),{tools:d}=await AL0({kind:i.kind,ctx:i.ctx,mcpClient:i.mcpClient,writer:i.writer,planMode:f,toolApprovalLevel:l,subtaskParams:i.subtaskParams,resolveArgs:$,onToolCalled:h,onPrOpened:v,fullBuiltInParams:i.subagentBuiltInParams,toolOutputMap:i.toolOutputMap}),D=i.extraTools?{...d,...i.extraTools}:d,_=i.__streamText?void 0:Wvi(i.provider,i.models.thinking),N=(B)=>{for(let F of B.toolCalls??[]){let g=F.input?.command;if(F.toolName==="bash"&&g&&kG0(g)){cn(i.ctx,"in_review",i.currentThreadId);let U=(B.toolResults??[]).find((T)=>T.toolCallId===F.toolCallId);dvi(i.ctx,U?.output,null,i.currentThreadId);break}}return i.onStepFinish?.(B)},Z=SL0({model:_,systemMessages:w,messages:i.messages,tools:D,prepareStep:i.prepareStep,temperature:i.temperature,maxOutputTokens:gI0(i.models.thinking.limits,Kc(w)+Kc(i.messages)+Kc(FI0(D,i.activeToolNames))),stopWhen:WN(t),abortSignal:i.abortSignal,onStepFinish:N,streamText:i.__streamText,onError:(B,F)=>{if(console.error(`[runAgentLoop:${i.kind}:${i.virtualMcp.id}] Error`,B),E.setStatus({code:fcu.ERROR,message:B}),F instanceof Error)E.recordException(F)}});return Promise.resolve(Z.result.finishReason).then(()=>{E.setStatus({code:fcu.OK})}).catch((B)=>{let F=B instanceof Error?B.message:typeof B==="string"?B:`${B}`;E.setStatus({code:fcu.ERROR,message:F})}).finally(()=>E.end()),{result:Z.result,error:Z.error,span:E,assembledSystemMessages:w}}var PTi=O(()=>{Of();hlu();e2();JF();AW0();yL0();tcu();jv();QL0()});function STi(){let i=[],u=!1,t=null,f=()=>{let c=t;t=null,c?.()},l=(c)=>{if(u)return;i.push(c),f()},E=async function*(){try{while(!u||i.length>0){let c=i.shift();if(c){yield c;continue}await new Promise((w)=>{t=w})}}finally{u=!0,f()}}();return{writer:{write:(c)=>l(c),merge:async(c)=>{let w=c;if(typeof w[Symbol.asyncIterator]==="function"){for await(let h of w)l(h);return}let $=c.getReader();try{while(!0){let{value:h,done:v}=await $.read();if(v)return;l(h)}}finally{$.releaseLock()}},onError:()=>{}},stream:E,close:()=>{u=!0,f()}}}async function Maf(i){let u=i.getReader();try{while(!0){let{done:t}=await u.read();if(t)return}}finally{u.releaseLock()}}async function QTi(i,u){let{runId:t,fenceToken:f}=i,l=i.fenceOk??(()=>!0),E=i.initialAckSeq??0,c=new Set,w;async function*$(){try{for await(let{seq:d,chunk:D}of i.chunks){if(!await l())continue;if(d<=E||c.has(d))continue;if(!await u.streamBuffer.publishRawChunk(t,D,{fenceToken:f,seq:d}))throw Error("publishRawChunk failed");c.add(d);let _=E;while(c.has(E+1))c.delete(E+1),E+=1;if(E>_)i.onPublished?.(E);yield D}}catch(d){throw w=d,d}}let{uiStream:h,whenComplete:v}=ivi({chunks:$(),originalMessages:i.originalMessages,title:{...u.title,persistTitle:async()=>{}},persistence:u.persistence??Caf,hooks:u.hooks,errorMessageId:i.errorMessageId});if(await Maf(h),await v,w!==void 0){if(w instanceof Error)w.lastAckSeq=E;throw w}if(E>0)await u.streamBuffer.publishDone(t,f,E)}var Caf;var lcu=O(()=>{l1u();Caf={emitStepParts:async()=>{},emitFinal:async()=>{},emitError:async()=>{}}});import{DBOS as NY,DBOSClient as qaf}from"@dbos-inc/dbos-sdk";function nL0(i){Ecu=i}function zTi(){if(!Ecu)throw Error("[background-tool] DBOS runtime not initialized \u2014 setBackgroundToolRuntime() must run before workflows fire");return Ecu}function Vaf(){return HL0??=qaf.create({systemDatabaseUrl:zTi().systemDatabaseUrl,systemDatabaseSchemaName:"dbos"}),HL0}function HTi(i){let u=i.modelMeta.capabilities;return{id:i.modelId,title:i.modelMeta.title??i.modelId,provider:i.modelMeta.providerId??null,capabilities:u&&u.length>0?{vision:u.includes("vision")||u.includes("image")||void 0,text:u.includes("text")||void 0,reasoning:u.includes("reasoning")||void 0}:void 0,limits:i.modelMeta.limits?{contextWindow:i.modelMeta.limits.contextWindow,maxOutputTokens:i.modelMeta.limits.maxOutputTokens??void 0}:void 0}}async function ccu(i){let[u,t,f,l]=await Promise.all([Z3(i,"smart"),H5(i,"image"),H5(i,"web_search"),H5(i,"deep_research")]);return{credentialId:u.credentialId,thinking:HTi(u),...t?{image:{...HTi(t),credentialId:t.credentialId}}:{},...f?{webSearch:{...HTi(f),credentialId:f.credentialId}}:{},...l?{deepResearch:{...HTi(l),credentialId:l.credentialId}}:{}}}async function nTi(i){let u=await zTi().studioContextFactory(i.orgId,i.userId);if(!u)throw Error(`[background-tool] studio context unavailable for org ${i.orgId} user ${i.userId}`);return u}function RL0(i){return{target:Ivi({sandboxProviderKind:i?.sandbox_provider_kind??"agent-sandbox"}),harnessId:i?.harness_id??"decopilot"}}function bL0(i,u){return{messages:[{id:`${i.jobId}:react-msg`,role:"user",metadata:{internal:!0},parts:[{type:"text",text:u.nudge}]}],models:u.models,agent:{id:i.agentId},temperature:i.temperature,toolApprovalLevel:i.toolApprovalLevel,mode:"default",organizationId:i.orgId,userId:i.userId,taskId:i.threadId,branch:i.branch??void 0,resumedFromBackground:!0,target:u.target,harnessId:u.harnessId??void 0}}function raf(i){return{ctx:i,studioContext:()=>nTi(i),emitFinal:(u)=>NY.runStep(()=>saf(i,u),{name:"appendResult"})}}function eaf(i){if(!i?.parts)return"";return i.parts.map((u)=>u&&typeof u==="object"&&u.type==="text"?u.text??"":"").filter((u)=>u.trim().length>0).join("").trim()}async function aaf(i){let u=await nTi(i),t=u.organization;if(!t)throw Error(`[background-tool] organization context unavailable for subtask (org ${i.orgId})`);let f=i.input,l=!f.agent_id||f.agent_id===i.agentId,E=l?i.agentId:f.agent_id,c=await ccu(u),w=await u.aiProviders.activate(c.credentialId,i.orgId),$={thinking:{...c.thinking,credentialId:c.credentialId},...c.image?{image:c.image}:{},...c.webSearch?{webSearch:c.webSearch}:{},...c.deepResearch?{deepResearch:c.deepResearch}:{}},{mcpClient:h,targetKind:v,targetRef:d}=await yTi(u,i.orgId,E,{superUser:l}),D=$.image,_=$.webSearch,N=$.deepResearch,Z=D?.credentialId?await u.aiProviders.activate(D.credentialId,i.orgId):null,B=_?.credentialId?await u.aiProviders.activate(_.credentialId,i.orgId):null,F=N?.credentialId?await u.aiProviders.activate(N.credentialId,i.orgId):null,g={provider:w,imageProvider:Z,webSearchProvider:B,deepResearchProvider:F,organization:t,models:$,toolApprovalLevel:i.toolApprovalLevel,isPlanMode:!1,passthroughClient:h,pendingImages:[],vmContext:v==="virtual-mcp"?{virtualMcpId:d.id,branch:d.repo?i.branch??`thread:${i.threadId}`:"ephemeral",userId:i.userId,threadId:i.threadId}:null,taskId:i.threadId,agentId:d.id,backgroundDispatcher:null},U=STi(),T=flu(i.threadId),A="",G="stop";try{let k=await Ln({kind:"subagent",ctx:u,organization:t,virtualMcp:d,mcpClient:h,provider:w,models:$,messages:[{role:"user",content:f.prompt}],systemAgentInstructions:d.instructions,abortSignal:T.signal,stepLimit:e9,toolApprovalLevel:"auto",planMode:!1,writer:U.writer,subtaskParams:{provider:w,organization:t,models:$,needsApproval:!1},passthroughClient:h,subagentBuiltInParams:g}),I=0,j=k.result.toUIMessageStream({generateMessageId:()=>`${i.jobId}:msg:${I++}`,messageMetadata:({part:r})=>r.type==="start"?{subtaskJobId:i.jobId}:void 0}),C=0;async function*K(){let r=j.getReader();try{while(!0){let{done:Q,value:ui}=await r.read();if(Q)break;yield{seq:++C,chunk:ui}}}finally{r.releaseLock()}}let S=new WE({storage:u.storage.threads.messageParts(),orgId:i.orgId,threadId:i.threadId,runId:i.jobId});return await QTi({runId:i.jobId,fenceToken:i.jobId,chunks:K()},{streamBuffer:zTi().streamBuffer,persistence:S,title:{threadId:i.threadId,currentThreadTitle:void 0,persistTitle:async()=>{}},hooks:{onFinish:async(r,Q)=>{let ui=eaf(r);if(ui)A=ui;if(Q)G=Q}}}),{report:A,finishReason:G,models:c}}finally{U.close(),llu(i.threadId,T),await h.close().catch(()=>{})}}async function oaf(i){let u=await i.studioContext(),t=await ccu(u),f=t.image;if(!f?.credentialId)throw Error("[background-tool] no image model configured for org");let l=await u.aiProviders.activate(f.credentialId,i.ctx.orgId),E=flu(i.ctx.threadId);try{return{result:await clu(i.ctx.input,{provider:l,imageModelInfo:{id:f.id},objectStorage:u.objectStorage,allowHttpExternalUrls:vu().localMode,abortSignal:E.signal}),models:t}}finally{llu(i.ctx.threadId,E)}}async function saf(i,u){let t=await nTi(i);if(!await t.storage.threads.get(i.threadId))throw Error(`[background-tool] thread ${i.threadId} not found`);await new WE({storage:t.storage.threads.messageParts(),orgId:i.orgId,threadId:i.threadId,runId:i.jobId}).emitFinal({id:`${i.jobId}:msg`,role:"assistant",parts:u})}async function CL0(i){let{snapshot:u,jobId:t,report:f}=i,l={...u,jobId:t,toolName:"subtask",input:{},toolCallId:`${t}:deliver`},E=await nTi(l),c=f.trim().length>0;await new WE({storage:E.storage.threads.messageParts(),orgId:u.orgId,threadId:u.threadId,runId:t}).emitFinal({id:`${t}:result`,role:"assistant",parts:[{type:"text",text:c?f:"_The subtask produced no output._"}],metadata:{subtaskJobId:t}});let $=await ccu(E),{target:h,harnessId:v}=RL0(await E.storage.threads.get(u.threadId)),d=c?`The background subtask you started has completed. Its result:
85963
85963
 
85964
85964
  ${f}
85965
85965
 
@@ -87069,7 +87069,7 @@ Usage notes:
87069
87069
  - Built-in tools (user_ask, subtask, read_tool_output, read_prompt, read_resource, sandbox) are always available and do not need enabling.`,inputSchema:xA4,execute:async({tools:f})=>{let l=[],E=[],c=[];for(let w of f){if(!u.has(w)){E.push(w);continue}if(t?.isPlanMode){if(t.toolAnnotations?.get(w)?.readOnlyHint!==!0){c.push(w);continue}}i.add(w),l.push(w)}return{enabled:l,...E.length>0&&{not_found:E},...c.length>0&&{blocked:c,blocked_reason:"These tools cannot be enabled in plan mode \u2014 they have side effects."}}}})}var xA4;var Mit=O(()=>{Of();xA4=qvu.object({tools:qvu.array(qvu.string()).min(1).describe("Tool ids to enable, taken verbatim from <available-connections>.")})});function qit(i,u){let t=new Set;for(let f of i){if(f.role!=="assistant")continue;for(let l of f.parts){let E=l;if((E.toolName==="enable_tool"||E.toolName==="enable_tools")&&E.result){let c=E.result;if(Array.isArray(c.enabled))for(let w of c.enabled){let $=w.replace(/[^a-zA-Z0-9_]/g,"_");if(u.has($))t.add($);else if(u.has(w))t.add(w)}}}}return t}function Vit(i){let u=i.modeConfig.forcedFirstStepTool&&i.modeConfig.forcedFirstStepTool in i.streamTools?i.modeConfig.forcedFirstStepTool:null,t=0;return(f)=>{let l=f.messages,E=t===0;t++;let c=l;if(i.pendingImages.length>0){let h=i.pendingImages.splice(0,i.pendingImages.length),v=[];for(let d of h)if(v.push({type:"text",text:d.label??(d.pageUrl?`[Screenshot of ${d.pageUrl}]`:"[Image]")}),d.url.startsWith("data:")){let D=d.url.match(/^data:([^;]+);base64,(.+)$/s);if(D)v.push({type:"image",image:D[2],mimeType:D[1]})}else v.push({type:"image",image:new URL(d.url)});c=[...l,{role:"user",content:v}]}let w=[...i.builtInToolNames,...i.hasEnableTool?["enable_tool"]:[],...i.enabledTools];if(i.modeConfig.isPlanMode)w=w.filter((h)=>{if(i.builtInToolNames.includes(h)||i.hasEnableTool&&h==="enable_tool")return!0;return i.toolAnnotations.get(h)?.readOnlyHint===!0});let $=u&&E?u:null;return{activeTools:w,messages:c,...$&&{toolChoice:{type:"tool",toolName:$}}}}}function kA4(){let i=[],u=!1,t=null;return{push(f){if(u)return;if(t){let l=t;t=null,l({done:!1,value:f})}else i.push(f)},next(){if(i.length>0){let f=i.shift();return Promise.resolve({done:!1,value:f})}if(u)return Promise.resolve({done:!0});return new Promise((f)=>{t=f})},close(){if(u=!0,t){let f=t;t=null,f({done:!0})}}}}async function*rit(i){let{input:u,tools:t,runEngine:f,extras:l}=i,E=l.runContext,{provider:c,titleProvider:w,titleModel:$,registrySignal:h,processedSystemMessages:v,processedMessages:d,originalMessages:D,threadId:_,writer:N,telemetry:Z}=l,B=SEu(u.mode,{isCliAgent:!1}),F,g=!1,U=kA4(),T=MR({currentThreadTitle:l.currentThreadTitle,kind:l.kind}),A=bR(d),G=(()=>{if(!T)return[];let bi=new Set,Gu=[],t0=(If,N4)=>{if(!N4||bi.has(N4.id))return;bi.add(N4.id),Gu.push(()=>Wvi(If,N4))};return t0(w??c,$),t0(c,u.models.fast),t0(c,u.models.smart),t0(c,u.models.thinking),Gu})(),k=T?qR({abortSignal:h,models:G,userMessage:A}):null,I=k?k.promise.then((bi)=>{return bi?phi(bi):null}).catch((bi)=>{return console.warn("[decopilot:title] title generation failed",P$(bi)),null}):Promise.resolve(null),j=null,C=l.usageAccumulator??CR();F=Date.now();let K=new Set(Object.keys(t.passthroughTools)),S=Object.keys(t.builtInTools),Q=l.kind==="subtask"||E?.isSubagent===!0?new Set(K):qit(D,K),ui={...t.tools,...t.connectionsBlockTools.length>0?{enable_tool:Cit(Q,K,{isPlanMode:B.isPlanMode,toolAnnotations:t.toolAnnotations})}:{}},hi=Vit({modeConfig:B,streamTools:ui,builtInToolNames:S,enabledTools:Q,toolAnnotations:t.toolAnnotations,pendingImages:l.pendingImages,hasEnableTool:t.connectionsBlockTools.length>0}),li=Q.size>0?{role:"system",content:`<currently-enabled-tools>
87070
87070
  ${[...Q].sort().join(`
87071
87071
  `)}
87072
- </currently-enabled-tools>`}:null,ii=E?.virtualMcp.metadata,a=u.workspace.cwd==="/repo"?{repo:u.workspace.repo,branch:u.workspace.branch,cwd:u.workspace.cwd,workspaceKind:"github"}:void 0,Zi=await f({kind:E?.isSubagent?"subagent":"agent",virtualMcp:{id:u.agent.id,repo:ii?.githubRepo??void 0,delegationTargetIds:ii?.subAgents},mcpClient:t.passthroughClient,provider:c,models:u.models,messages:d,abortSignal:h,temperature:u.temperature,planMode:B.isPlanMode,isDecopilot:Xd(u.agent.id)!==null,codingWorkspace:a,systemAgentInstructions:t.serverInstructions,currentThreadId:_,user:{id:u.user.id,email:u.user.email},userContext:E?.userContext,writer:N,prepareStep:hi,onStepFinish:l.onStepFinish,passthroughClient:t.passthroughClient,connectionsData:{tools:t.connectionsBlockTools,connectionTitleMap:t.connectionTitleMap},extraTools:{...t.builtInTools,...t.connectionsBlockTools.length>0&&ui.enable_tool?{enable_tool:ui.enable_tool}:{}},additionalSystemMessages:[...v,...li?[li]:[]],activeToolNames:[...S,..."enable_tool"in ui?["enable_tool"]:[],...Q],stepLimit:l.stepLimit??u.maxAgentSteps}),Ei=Zi.result,Vi=Promise.resolve(Ei.finishReason).then(async(bi)=>{let[Gu,t0,If,N4]=await Promise.all([Ei.totalUsage,Ei.usage,Ei.request,Ei.response]);if(await Zi.error!==void 0)return;Zi.span.setAttribute("decopilot.llm.inputTokens",Gu.inputTokens??0),Zi.span.setAttribute("decopilot.llm.outputTokens",Gu.outputTokens??0),Zi.span.setAttribute("decopilot.llm.finishReason",bi);let ti=C.cacheTotals();Zi.span.setAttribute("decopilot.cache.read_tokens",ti.read),Zi.span.setAttribute("decopilot.cache.write_tokens",ti.write);let du=ti.input>0?ti.read/ti.input:0;Zi.span.setAttribute("decopilot.cache.hit_ratio",du);let lt=Date.now()-(F??Date.now());if(g=!0,Z?.recordLlmCall({organizationId:u.organizationId,modelId:u.models.thinking.id,durationMs:lt,isError:!1,inputTokens:Gu.inputTokens,outputTokens:Gu.outputTokens,cacheReadTokens:ti.read,cacheWriteTokens:ti.write}),Z?.monitorLlmCall({organizationId:u.organizationId,agentId:u.agent.id,modelId:u.models.thinking.id,modelTitle:u.models.thinking.title??u.models.thinking.id,credentialId:u.models.thinking.credentialId,taskId:_,durationMs:lt,isError:!1,finishReason:bi,usage:{inputTokens:t0.inputTokens??0,outputTokens:t0.outputTokens??0,totalTokens:t0.totalTokens??0},totalUsage:{inputTokens:Gu.inputTokens??0,outputTokens:Gu.outputTokens??0,totalTokens:Gu.totalTokens??0},cost:C.cost(),request:If,response:N4,userId:u.user.id}),h.aborted)return}).catch(async(bi)=>{let Gu=bi instanceof Error?bi:Error(P$(bi));if(console.error("[decopilot:stream] Error",Gu.message),h.aborted)return;if(!g){let t0=Date.now()-(F??Date.now());g=!0,Z?.recordLlmCall({organizationId:u.organizationId,modelId:u.models.thinking.id,durationMs:t0,isError:!0,errorType:Gu.name}),Z?.monitorLlmCall({organizationId:u.organizationId,agentId:u.agent.id,modelId:u.models.thinking.id,modelTitle:u.models.thinking.title??u.models.thinking.id,credentialId:u.models.thinking.credentialId,taskId:_,durationMs:t0,isError:!0,errorMessage:Gu.message,userId:u.user.id})}}).catch((bi)=>{console.error("[decopilot:stream] finish metrics failed",bi)}),Ci=Zi.error.then(async(bi)=>{if(!h.aborted||g)return null;let Gu=await Ei.steps;if(!Gu.length||g)return null;g=!0;let t0=Date.now()-(F??Date.now()),If=Gu.reduce((du,lt)=>({inputTokens:du.inputTokens+(lt.usage.inputTokens??0),outputTokens:du.outputTokens+(lt.usage.outputTokens??0),totalTokens:du.totalTokens+(lt.usage.totalTokens??0)}),{inputTokens:0,outputTokens:0,totalTokens:0}),N4=Gu[Gu.length-1].usage,fl=C.cacheTotals();if(Z?.recordLlmCall({organizationId:u.organizationId,modelId:u.models.thinking.id,durationMs:t0,isError:!1,inputTokens:If.inputTokens,outputTokens:If.outputTokens,cacheReadTokens:fl.read,cacheWriteTokens:fl.write}),Z?.monitorLlmCall({organizationId:u.organizationId,agentId:u.agent.id,modelId:u.models.thinking.id,modelTitle:u.models.thinking.title??u.models.thinking.id,credentialId:u.models.thinking.credentialId,taskId:_,durationMs:t0,isError:!1,finishReason:"abort",usage:{inputTokens:N4.inputTokens??0,outputTokens:N4.outputTokens??0,totalTokens:N4.totalTokens??0},totalUsage:If,cost:C.cost(),request:void 0,response:void 0,userId:u.user.id}),If.totalTokens<=0)return null;let ti=C.cost();return{type:"message-metadata",messageMetadata:{usage:{inputTokens:If.inputTokens,outputTokens:If.outputTokens,totalTokens:If.totalTokens,cachedInputTokens:fl.read,inputTokenDetails:{cacheReadTokens:fl.read,cacheWriteTokens:fl.write,noCacheTokens:If.inputTokens-fl.read-fl.write},...ti>0&&{providerMetadata:{openrouter:{usage:{cost:ti}}}}}}}}).then((bi)=>bi).catch((bi)=>{return console.error("[decopilot:stream] abort metadata failed",bi),null}),Wi=Ei.toUIMessageStream({originalMessages:D,generateMessageId:G2,onError:(bi)=>_I0(bi),messageMetadata:({part:bi})=>{if(bi.type==="start")return{agent:{id:u.agent.id??null},models:{credentialId:u.models.thinking.credentialId,thinking:{...u.models.thinking,title:u.models.thinking.title??u.models.thinking.id,provider:u.models.thinking.provider??void 0}},created_at:new Date,_request:{systemSections:Zi.assembledSystemMessages.map((Gu)=>({chars:Gu.content.length,preview:Gu.content.slice(0,80).replace(/\s+/g," ")})),tools:Object.keys(ui).length,activeTools:S.length+("enable_tool"in ui?1:0)+Q.size},thread_id:_,...E?.subtaskJobId?{subtaskJobId:E.subtaskJobId}:{},...E?.resumedFromBackground?{resumedFromBackground:!0}:{}};if(bi.type==="reasoning-start"){if(j===null)j=new Date;return{reasoning_start_at:j}}if(bi.type==="reasoning-end")return{reasoning_end_at:new Date};if(bi.type==="finish-step")return C.addStep(bi.usage,bi.providerMetadata),{usage:C.buildStepUsage()};if(bi.type==="finish"){let Gu=C.buildFinalUsage({totalUsage:bi.totalUsage,providerKey:u.models.thinking.provider,fallbackProviderMetadata:bi.providerMetadata});return Gu?{usage:Gu}:{}}return}})[Symbol.asyncIterator](),Ii=l.sideChunks?.[Symbol.asyncIterator](),Bi=!1,$i=k===null,ci=!1,Yi=!1,m=!1,fi=Ii===void 0,oi=!1,ki=Wi.next().then((bi)=>({kind:"main",value:bi})),ji=U.next().then((bi)=>({kind:"queue",value:bi})),n=Ii?Ii.next().then((bi)=>({kind:"side",value:bi})):null,_i=I.then((bi)=>({kind:"title",value:bi})),Qi=Vi.then(()=>({kind:"finish-metrics"})),uu=Ci.then((bi)=>({kind:"abort-metadata",value:bi}));try{while(!Bi||!$i||!ci||!Yi||!m||!fi){if(Bi&&$i&&ci&&Yi&&!oi)l.closeSideChunks?.(),U.close(),oi=!0;let bi=[];if(!m)bi.push(ji);if(!Bi)bi.push(ki);if(!$i)bi.push(_i);if(!ci)bi.push(Qi);if(!Yi)bi.push(uu);if(!fi&&n)bi.push(n);let Gu=await Promise.race(bi);if(Gu.kind==="main"){if(Gu.value.done){if(Bi=!0,!$i)k?.finish();continue}yield Gu.value.value,ki=Wi.next().then((t0)=>({kind:"main",value:t0}))}else if(Gu.kind==="title"){if($i=!0,Gu.value)yield Gu.value}else if(Gu.kind==="finish-metrics")ci=!0;else if(Gu.kind==="abort-metadata"){if(Yi=!0,Gu.value)yield Gu.value}else if(Gu.kind==="side"){if(Gu.value.done){fi=!0;continue}yield Gu.value.value,n=Ii?.next().then((t0)=>({kind:"side",value:t0}))??null}else{if(Gu.value.done){m=!0;continue}yield Gu.value.value,ji=U.next().then((t0)=>({kind:"queue",value:t0}))}}}finally{if(!$i)k?.finish();l.closeSideChunks?.(),await Wi.return?.().catch(()=>{}),await Ii?.return?.().catch(()=>{}),U.close()}}var mit=O(()=>{Mit();jGi();sm();QEu();WGi();hlu();LGi();kGi();Rt()});function eit(i){if(i<1)throw Error("Semaphore cap must be >= 1");let u=i,t=[];function f(l){return l.reason??Error("Semaphore acquire aborted")}return{acquire(l){if(l?.aborted)return Promise.reject(f(l));if(u>0)return u-=1,Promise.resolve();return new Promise((E,c)=>{let w={resolve:E,reject:c,cleanup:()=>{}},$=()=>{let h=t.indexOf(w);if(h!==-1)t.splice(h,1);w.cleanup(),c(f(l))};if(l)l.addEventListener("abort",$,{once:!0}),w.cleanup=()=>l.removeEventListener("abort",$);t.push(w)})},release(){let l=t.shift();if(l){l.cleanup(),l.resolve();return}if(u+=1,u>i)u=i},available(){return u}}}function Vvu(i,u){ait.set(i,u)}function rvu(i){return ait.get(i)}function VR(i){let u=rvu(i);if(!u)throw Error("Decopilot requires process-local run context. Dispatch must attach DecopilotRunContext before invoking the Decopilot harness.");return u}var ait;var rR=O(()=>{ait=new WeakMap});function oit(i,u){let t=i.modelSources?.thinking??null;if(!t||t.kind!=="secret")throw Error("Decopilot core requires a secret thinking model source. Dispatch must resolve the selected model credential before invoking Decopilot.");let f=u(t),l=(v)=>{let d=i.models[v];if(!d)return;let D=i.modelSources?.[v];if(D&&D.kind!=="secret")throw Error("Decopilot core requires secret modelSources for all resolved slots.");return{model:d,provider:D&&D.kind==="secret"?u(D):f}},E=l("fast"),c=l("smart"),w=l("image"),$=l("webSearch"),h=l("deepResearch");return{thinking:{model:i.models.thinking,provider:f},...E?{fast:E}:{},...c?{smart:c}:{},...w?{image:w}:{},...$?{webSearch:$}:{},...h?{deepResearch:h}:{}}}async function*sit(i){let{input:u,modelRuntime:t,toolRuntime:f,telemetry:l}=i,E=rvu(u),c=i.kind==="subtask",w=CR(),$=c?void 0:(B)=>w.addExternal(B),h=await f.buildEnvironmentTools({input:u,onChildUsage:$});if(c)XA4(h);let{systemMessages:v,messages:d,originalMessages:D}=await $it(E?.messages??[u.userMessage],{windowSize:y5,models:u.models,tools:h.tools}),_=d,N=u.models.fast??u.models.smart??u.models.thinking,Z=(u.models.fast?t.fast?.provider:void 0)??(u.models.smart?t.smart?.provider:void 0)??t.thinking.provider;yield*rit({input:u,tools:h,runEngine:f.runEngine,extras:{provider:t.thinking.provider,titleProvider:Z,titleModel:N,registrySignal:u.signal??new AbortController().signal,processedSystemMessages:v,processedMessages:_,originalMessages:D,threadId:u.threadId,currentThreadTitle:u.currentThreadTitle??"",pendingImages:h.pendingImages,writer:h.writer,sideChunks:h.sideChunks,closeSideChunks:h.closeSideChunks,onStepFinish:h.onStepFinish,telemetry:l,kind:i.kind,stepLimit:c?e9:void 0,usageAccumulator:w,runContext:E}})}function XA4(i){if("subtask"in i.tools){let{subtask:u,...t}=i.tools;i.tools=t}if("subtask"in i.builtInTools){let{subtask:u,...t}=i.builtInTools;i.builtInTools=t}}var jA4=4,jz6;var pit=O(()=>{mit();hit();JF();jGi();rR();jz6=eit(jA4)});function JA4(i){return"storage"in i}function iut(i){mvu=i}var mvu,uut;var tut=O(()=>{Mvu();pit();rR();uut={id:"decopilot",create(i){return{id:"decopilot",async*stream(u){let t=VR(u),f=oit({models:u.models,modelSources:t.modelSources},HGi),l=STi(),E={};if(!JA4(i))throw Error("[decopilot] desktop dispatch is not supported");if(!mvu)throw Error("[decopilot] cluster environment builder not registered \u2014 "+"apps/api/src/harnesses must be imported before dispatching the decopilot harness in cluster mode");let c=mvu({ctx:i,modelRuntime:f,sideChannel:l,cleanup:E});try{yield*sit({input:u,modelRuntime:f,toolRuntime:c.toolRuntime,telemetry:c.telemetry,kind:"main"})}finally{l.close(),await E.close?.().catch(()=>{})}}}}}});import{spawn as But}from"child_process";import{randomUUID as evu,randomBytes as zz6}from"crypto";import{createRequire as Fut}from"module";import{mkdtempSync as svu,writeFileSync as gut,rmSync as bGi,readFileSync as KA4}from"fs";import{tmpdir as pvu}from"os";import fut,{join as mR,dirname as YA4}from"path";import{z as H}from"zod";import{EventEmitter as WA4}from"events";import LA4 from"readline";function Wp(i){if(i===!1)return QA4;if(i===void 0)return SA4;return i}function Uut(i,u=!1){if(u)return i;return{debug:()=>{},info:()=>{},warn:i.warn.bind(i),error:i.error.bind(i)}}function Tut(i){return HA4.test(i)}function fdu(i){return zA4.test(i)}function eR(i){if(!Tut(i))throw Error(`Invalid MCP server name '${i}'. Names must match /^[A-Za-z0-9_-]+$/.`);return i}function Aut(i){if(!fdu(i))throw Error(`Invalid config override key '${i}'. Keys must match /^[A-Za-z0-9_-]+(?:\\.[A-Za-z0-9_-]+)*$/.`);return i}function Jut(i){let u=[];if(i&&typeof i==="object"){let{issues:t,errors:f}=i;if(Array.isArray(t))u=t;else if(Array.isArray(f))u=f}return u.map((t)=>{let f=Array.isArray(t?.path)?t.path.join("."):"",l=t?.message||"Invalid value";return`${f?f+": ":""}${l}`})}function mA4(i,u){if(!i.success)return{valid:!1,warnings:u,errors:Jut(i.error)};return{valid:!0,warnings:u,errors:[]}}function lut(i){let u=[],t=qA4.safeParse(i);if(!t.success)return mA4(t,u);let f=t.data;if(f.fullAuto&&f.dangerouslyBypassApprovalsAndSandbox)u.push("Both fullAuto and dangerouslyBypassApprovalsAndSandbox specified; fullAuto takes precedence.");return{valid:!0,warnings:u,errors:[]}}function Eut(i){let u=[],t=VA4.safeParse(i);if(!t.success)return{valid:!1,warnings:u,errors:Jut(t.error)};let f=t.data;if(f.autoApprove&&f.approvalPolicy!==void 0)u.push("autoApprove overrides approvalPolicy for server-initiated approval requests.");if(f.threadMode==="persistent"&&f.resume)u.push("threadMode=persistent ignores resume when an explicit thread is already active.");return{valid:!0,warnings:u,errors:[]}}function eA4(i){if(!i||i.trim()==="")return"Model ID cannot be empty";return}function idu(i){if(i===void 0)return"";if(typeof i==="string")return i;try{return JSON.stringify(i)}catch{return"[unserializable]"}}function Kut(i){switch(i.type){case"text":return{text:i.value,warnings:[]};case"json":return{text:idu(i.value),warnings:[]};case"execution-denied":return{text:i.reason?`Execution denied: ${i.reason}`:"Execution denied",warnings:[]};case"error-text":return{text:`Tool error: ${i.value}`,warnings:[]};case"error-json":return{text:`Tool error: ${idu(i.value)}`,warnings:[]};case"content":{let u=[];return{text:i.value.map((f)=>{if(f.type==="text")return f.text;if(f.type==="file-data")return`[file-data: ${f.mediaType}${f.filename?`, ${f.filename}`:""}]`;if(f.type==="file-url")return`[file-url: ${f.url}]`;if(f.type==="file-id")return"[file-id]";if(f.type==="image-data")return`[image-data: ${f.mediaType}]`;if(f.type==="image-url")return`[image-url: ${f.url}]`;if(f.type==="image-file-id")return"[image-file-id]";return u.push({type:"unsupported",feature:`tool-result.content.${String(f.type)}`,details:`Unsupported tool content part "${String(f.type)}".`}),"[unsupported-tool-content-part]"}).filter((f)=>f.length>0).join(`
87072
+ </currently-enabled-tools>`}:null,ii=E?.virtualMcp.metadata,a=u.workspace.cwd==="/repo"?{repo:u.workspace.repo,branch:u.workspace.branch,cwd:u.workspace.cwd,workspaceKind:"github"}:void 0,Zi=await f({kind:E?.isSubagent?"subagent":"agent",virtualMcp:{id:u.agent.id,repo:ii?.githubRepo??void 0,delegationTargetIds:ii?.subAgents},mcpClient:t.passthroughClient,provider:c,models:u.models,messages:d,abortSignal:h,temperature:u.temperature,planMode:B.isPlanMode,isDecopilot:Xd(u.agent.id)!==null,codingWorkspace:a,systemAgentInstructions:t.serverInstructions,currentThreadId:_,user:{id:u.user.id,email:u.user.email},userContext:E?.userContext,writer:N,prepareStep:hi,onStepFinish:l.onStepFinish,passthroughClient:t.passthroughClient,connectionsData:{tools:t.connectionsBlockTools,connectionTitleMap:t.connectionTitleMap},toolOutputMap:t.toolOutputMap,extraTools:{...t.builtInTools,...t.connectionsBlockTools.length>0&&ui.enable_tool?{enable_tool:ui.enable_tool}:{}},additionalSystemMessages:[...v,...li?[li]:[]],activeToolNames:[...S,..."enable_tool"in ui?["enable_tool"]:[],...Q],stepLimit:l.stepLimit??u.maxAgentSteps}),Ei=Zi.result,Vi=Promise.resolve(Ei.finishReason).then(async(bi)=>{let[Gu,t0,If,N4]=await Promise.all([Ei.totalUsage,Ei.usage,Ei.request,Ei.response]);if(await Zi.error!==void 0)return;Zi.span.setAttribute("decopilot.llm.inputTokens",Gu.inputTokens??0),Zi.span.setAttribute("decopilot.llm.outputTokens",Gu.outputTokens??0),Zi.span.setAttribute("decopilot.llm.finishReason",bi);let ti=C.cacheTotals();Zi.span.setAttribute("decopilot.cache.read_tokens",ti.read),Zi.span.setAttribute("decopilot.cache.write_tokens",ti.write);let du=ti.input>0?ti.read/ti.input:0;Zi.span.setAttribute("decopilot.cache.hit_ratio",du);let lt=Date.now()-(F??Date.now());if(g=!0,Z?.recordLlmCall({organizationId:u.organizationId,modelId:u.models.thinking.id,durationMs:lt,isError:!1,inputTokens:Gu.inputTokens,outputTokens:Gu.outputTokens,cacheReadTokens:ti.read,cacheWriteTokens:ti.write}),Z?.monitorLlmCall({organizationId:u.organizationId,agentId:u.agent.id,modelId:u.models.thinking.id,modelTitle:u.models.thinking.title??u.models.thinking.id,credentialId:u.models.thinking.credentialId,taskId:_,durationMs:lt,isError:!1,finishReason:bi,usage:{inputTokens:t0.inputTokens??0,outputTokens:t0.outputTokens??0,totalTokens:t0.totalTokens??0},totalUsage:{inputTokens:Gu.inputTokens??0,outputTokens:Gu.outputTokens??0,totalTokens:Gu.totalTokens??0},cost:C.cost(),request:If,response:N4,userId:u.user.id}),h.aborted)return}).catch(async(bi)=>{let Gu=bi instanceof Error?bi:Error(P$(bi));if(console.error("[decopilot:stream] Error",Gu.message),h.aborted)return;if(!g){let t0=Date.now()-(F??Date.now());g=!0,Z?.recordLlmCall({organizationId:u.organizationId,modelId:u.models.thinking.id,durationMs:t0,isError:!0,errorType:Gu.name}),Z?.monitorLlmCall({organizationId:u.organizationId,agentId:u.agent.id,modelId:u.models.thinking.id,modelTitle:u.models.thinking.title??u.models.thinking.id,credentialId:u.models.thinking.credentialId,taskId:_,durationMs:t0,isError:!0,errorMessage:Gu.message,userId:u.user.id})}}).catch((bi)=>{console.error("[decopilot:stream] finish metrics failed",bi)}),Ci=Zi.error.then(async(bi)=>{if(!h.aborted||g)return null;let Gu=await Ei.steps;if(!Gu.length||g)return null;g=!0;let t0=Date.now()-(F??Date.now()),If=Gu.reduce((du,lt)=>({inputTokens:du.inputTokens+(lt.usage.inputTokens??0),outputTokens:du.outputTokens+(lt.usage.outputTokens??0),totalTokens:du.totalTokens+(lt.usage.totalTokens??0)}),{inputTokens:0,outputTokens:0,totalTokens:0}),N4=Gu[Gu.length-1].usage,fl=C.cacheTotals();if(Z?.recordLlmCall({organizationId:u.organizationId,modelId:u.models.thinking.id,durationMs:t0,isError:!1,inputTokens:If.inputTokens,outputTokens:If.outputTokens,cacheReadTokens:fl.read,cacheWriteTokens:fl.write}),Z?.monitorLlmCall({organizationId:u.organizationId,agentId:u.agent.id,modelId:u.models.thinking.id,modelTitle:u.models.thinking.title??u.models.thinking.id,credentialId:u.models.thinking.credentialId,taskId:_,durationMs:t0,isError:!1,finishReason:"abort",usage:{inputTokens:N4.inputTokens??0,outputTokens:N4.outputTokens??0,totalTokens:N4.totalTokens??0},totalUsage:If,cost:C.cost(),request:void 0,response:void 0,userId:u.user.id}),If.totalTokens<=0)return null;let ti=C.cost();return{type:"message-metadata",messageMetadata:{usage:{inputTokens:If.inputTokens,outputTokens:If.outputTokens,totalTokens:If.totalTokens,cachedInputTokens:fl.read,inputTokenDetails:{cacheReadTokens:fl.read,cacheWriteTokens:fl.write,noCacheTokens:If.inputTokens-fl.read-fl.write},...ti>0&&{providerMetadata:{openrouter:{usage:{cost:ti}}}}}}}}).then((bi)=>bi).catch((bi)=>{return console.error("[decopilot:stream] abort metadata failed",bi),null}),Wi=Ei.toUIMessageStream({originalMessages:D,generateMessageId:G2,onError:(bi)=>_I0(bi),messageMetadata:({part:bi})=>{if(bi.type==="start")return{agent:{id:u.agent.id??null},models:{credentialId:u.models.thinking.credentialId,thinking:{...u.models.thinking,title:u.models.thinking.title??u.models.thinking.id,provider:u.models.thinking.provider??void 0}},created_at:new Date,_request:{systemSections:Zi.assembledSystemMessages.map((Gu)=>({chars:Gu.content.length,preview:Gu.content.slice(0,80).replace(/\s+/g," ")})),tools:Object.keys(ui).length,activeTools:S.length+("enable_tool"in ui?1:0)+Q.size},thread_id:_,...E?.subtaskJobId?{subtaskJobId:E.subtaskJobId}:{},...E?.resumedFromBackground?{resumedFromBackground:!0}:{}};if(bi.type==="reasoning-start"){if(j===null)j=new Date;return{reasoning_start_at:j}}if(bi.type==="reasoning-end")return{reasoning_end_at:new Date};if(bi.type==="finish-step")return C.addStep(bi.usage,bi.providerMetadata),{usage:C.buildStepUsage()};if(bi.type==="finish"){let Gu=C.buildFinalUsage({totalUsage:bi.totalUsage,providerKey:u.models.thinking.provider,fallbackProviderMetadata:bi.providerMetadata});return Gu?{usage:Gu}:{}}return}})[Symbol.asyncIterator](),Ii=l.sideChunks?.[Symbol.asyncIterator](),Bi=!1,$i=k===null,ci=!1,Yi=!1,m=!1,fi=Ii===void 0,oi=!1,ki=Wi.next().then((bi)=>({kind:"main",value:bi})),ji=U.next().then((bi)=>({kind:"queue",value:bi})),n=Ii?Ii.next().then((bi)=>({kind:"side",value:bi})):null,_i=I.then((bi)=>({kind:"title",value:bi})),Qi=Vi.then(()=>({kind:"finish-metrics"})),uu=Ci.then((bi)=>({kind:"abort-metadata",value:bi}));try{while(!Bi||!$i||!ci||!Yi||!m||!fi){if(Bi&&$i&&ci&&Yi&&!oi)l.closeSideChunks?.(),U.close(),oi=!0;let bi=[];if(!m)bi.push(ji);if(!Bi)bi.push(ki);if(!$i)bi.push(_i);if(!ci)bi.push(Qi);if(!Yi)bi.push(uu);if(!fi&&n)bi.push(n);let Gu=await Promise.race(bi);if(Gu.kind==="main"){if(Gu.value.done){if(Bi=!0,!$i)k?.finish();continue}yield Gu.value.value,ki=Wi.next().then((t0)=>({kind:"main",value:t0}))}else if(Gu.kind==="title"){if($i=!0,Gu.value)yield Gu.value}else if(Gu.kind==="finish-metrics")ci=!0;else if(Gu.kind==="abort-metadata"){if(Yi=!0,Gu.value)yield Gu.value}else if(Gu.kind==="side"){if(Gu.value.done){fi=!0;continue}yield Gu.value.value,n=Ii?.next().then((t0)=>({kind:"side",value:t0}))??null}else{if(Gu.value.done){m=!0;continue}yield Gu.value.value,ji=U.next().then((t0)=>({kind:"queue",value:t0}))}}}finally{if(!$i)k?.finish();l.closeSideChunks?.(),await Wi.return?.().catch(()=>{}),await Ii?.return?.().catch(()=>{}),U.close()}}var mit=O(()=>{Mit();jGi();sm();QEu();WGi();hlu();LGi();kGi();Rt()});function eit(i){if(i<1)throw Error("Semaphore cap must be >= 1");let u=i,t=[];function f(l){return l.reason??Error("Semaphore acquire aborted")}return{acquire(l){if(l?.aborted)return Promise.reject(f(l));if(u>0)return u-=1,Promise.resolve();return new Promise((E,c)=>{let w={resolve:E,reject:c,cleanup:()=>{}},$=()=>{let h=t.indexOf(w);if(h!==-1)t.splice(h,1);w.cleanup(),c(f(l))};if(l)l.addEventListener("abort",$,{once:!0}),w.cleanup=()=>l.removeEventListener("abort",$);t.push(w)})},release(){let l=t.shift();if(l){l.cleanup(),l.resolve();return}if(u+=1,u>i)u=i},available(){return u}}}function Vvu(i,u){ait.set(i,u)}function rvu(i){return ait.get(i)}function VR(i){let u=rvu(i);if(!u)throw Error("Decopilot requires process-local run context. Dispatch must attach DecopilotRunContext before invoking the Decopilot harness.");return u}var ait;var rR=O(()=>{ait=new WeakMap});function oit(i,u){let t=i.modelSources?.thinking??null;if(!t||t.kind!=="secret")throw Error("Decopilot core requires a secret thinking model source. Dispatch must resolve the selected model credential before invoking Decopilot.");let f=u(t),l=(v)=>{let d=i.models[v];if(!d)return;let D=i.modelSources?.[v];if(D&&D.kind!=="secret")throw Error("Decopilot core requires secret modelSources for all resolved slots.");return{model:d,provider:D&&D.kind==="secret"?u(D):f}},E=l("fast"),c=l("smart"),w=l("image"),$=l("webSearch"),h=l("deepResearch");return{thinking:{model:i.models.thinking,provider:f},...E?{fast:E}:{},...c?{smart:c}:{},...w?{image:w}:{},...$?{webSearch:$}:{},...h?{deepResearch:h}:{}}}async function*sit(i){let{input:u,modelRuntime:t,toolRuntime:f,telemetry:l}=i,E=rvu(u),c=i.kind==="subtask",w=CR(),$=c?void 0:(B)=>w.addExternal(B),h=await f.buildEnvironmentTools({input:u,onChildUsage:$});if(c)XA4(h);let{systemMessages:v,messages:d,originalMessages:D}=await $it(E?.messages??[u.userMessage],{windowSize:y5,models:u.models,tools:h.tools}),_=d,N=u.models.fast??u.models.smart??u.models.thinking,Z=(u.models.fast?t.fast?.provider:void 0)??(u.models.smart?t.smart?.provider:void 0)??t.thinking.provider;yield*rit({input:u,tools:h,runEngine:f.runEngine,extras:{provider:t.thinking.provider,titleProvider:Z,titleModel:N,registrySignal:u.signal??new AbortController().signal,processedSystemMessages:v,processedMessages:_,originalMessages:D,threadId:u.threadId,currentThreadTitle:u.currentThreadTitle??"",pendingImages:h.pendingImages,writer:h.writer,sideChunks:h.sideChunks,closeSideChunks:h.closeSideChunks,onStepFinish:h.onStepFinish,telemetry:l,kind:i.kind,stepLimit:c?e9:void 0,usageAccumulator:w,runContext:E}})}function XA4(i){if("subtask"in i.tools){let{subtask:u,...t}=i.tools;i.tools=t}if("subtask"in i.builtInTools){let{subtask:u,...t}=i.builtInTools;i.builtInTools=t}}var jA4=4,jz6;var pit=O(()=>{mit();hit();JF();jGi();rR();jz6=eit(jA4)});function JA4(i){return"storage"in i}function iut(i){mvu=i}var mvu,uut;var tut=O(()=>{Mvu();pit();rR();uut={id:"decopilot",create(i){return{id:"decopilot",async*stream(u){let t=VR(u),f=oit({models:u.models,modelSources:t.modelSources},HGi),l=STi(),E={};if(!JA4(i))throw Error("[decopilot] desktop dispatch is not supported");if(!mvu)throw Error("[decopilot] cluster environment builder not registered \u2014 "+"apps/api/src/harnesses must be imported before dispatching the decopilot harness in cluster mode");let c=mvu({ctx:i,modelRuntime:f,sideChannel:l,cleanup:E});try{yield*sit({input:u,modelRuntime:f,toolRuntime:c.toolRuntime,telemetry:c.telemetry,kind:"main"})}finally{l.close(),await E.close?.().catch(()=>{})}}}}}});import{spawn as But}from"child_process";import{randomUUID as evu,randomBytes as zz6}from"crypto";import{createRequire as Fut}from"module";import{mkdtempSync as svu,writeFileSync as gut,rmSync as bGi,readFileSync as KA4}from"fs";import{tmpdir as pvu}from"os";import fut,{join as mR,dirname as YA4}from"path";import{z as H}from"zod";import{EventEmitter as WA4}from"events";import LA4 from"readline";function Wp(i){if(i===!1)return QA4;if(i===void 0)return SA4;return i}function Uut(i,u=!1){if(u)return i;return{debug:()=>{},info:()=>{},warn:i.warn.bind(i),error:i.error.bind(i)}}function Tut(i){return HA4.test(i)}function fdu(i){return zA4.test(i)}function eR(i){if(!Tut(i))throw Error(`Invalid MCP server name '${i}'. Names must match /^[A-Za-z0-9_-]+$/.`);return i}function Aut(i){if(!fdu(i))throw Error(`Invalid config override key '${i}'. Keys must match /^[A-Za-z0-9_-]+(?:\\.[A-Za-z0-9_-]+)*$/.`);return i}function Jut(i){let u=[];if(i&&typeof i==="object"){let{issues:t,errors:f}=i;if(Array.isArray(t))u=t;else if(Array.isArray(f))u=f}return u.map((t)=>{let f=Array.isArray(t?.path)?t.path.join("."):"",l=t?.message||"Invalid value";return`${f?f+": ":""}${l}`})}function mA4(i,u){if(!i.success)return{valid:!1,warnings:u,errors:Jut(i.error)};return{valid:!0,warnings:u,errors:[]}}function lut(i){let u=[],t=qA4.safeParse(i);if(!t.success)return mA4(t,u);let f=t.data;if(f.fullAuto&&f.dangerouslyBypassApprovalsAndSandbox)u.push("Both fullAuto and dangerouslyBypassApprovalsAndSandbox specified; fullAuto takes precedence.");return{valid:!0,warnings:u,errors:[]}}function Eut(i){let u=[],t=VA4.safeParse(i);if(!t.success)return{valid:!1,warnings:u,errors:Jut(t.error)};let f=t.data;if(f.autoApprove&&f.approvalPolicy!==void 0)u.push("autoApprove overrides approvalPolicy for server-initiated approval requests.");if(f.threadMode==="persistent"&&f.resume)u.push("threadMode=persistent ignores resume when an explicit thread is already active.");return{valid:!0,warnings:u,errors:[]}}function eA4(i){if(!i||i.trim()==="")return"Model ID cannot be empty";return}function idu(i){if(i===void 0)return"";if(typeof i==="string")return i;try{return JSON.stringify(i)}catch{return"[unserializable]"}}function Kut(i){switch(i.type){case"text":return{text:i.value,warnings:[]};case"json":return{text:idu(i.value),warnings:[]};case"execution-denied":return{text:i.reason?`Execution denied: ${i.reason}`:"Execution denied",warnings:[]};case"error-text":return{text:`Tool error: ${i.value}`,warnings:[]};case"error-json":return{text:`Tool error: ${idu(i.value)}`,warnings:[]};case"content":{let u=[];return{text:i.value.map((f)=>{if(f.type==="text")return f.text;if(f.type==="file-data")return`[file-data: ${f.mediaType}${f.filename?`, ${f.filename}`:""}]`;if(f.type==="file-url")return`[file-url: ${f.url}]`;if(f.type==="file-id")return"[file-id]";if(f.type==="image-data")return`[image-data: ${f.mediaType}]`;if(f.type==="image-url")return`[image-url: ${f.url}]`;if(f.type==="image-file-id")return"[image-file-id]";return u.push({type:"unsupported",feature:`tool-result.content.${String(f.type)}`,details:`Unsupported tool content part "${String(f.type)}".`}),"[unsupported-tool-content-part]"}).filter((f)=>f.length>0).join(`
87073
87073
  `),warnings:u}}default:return{text:"[unsupported-tool-result-output]",warnings:[{type:"unsupported",feature:`tool-result.output.${String(i.type)}`,details:`Unsupported tool result output type "${String(i.type)}".`}]}}}function cut(i){if(typeof i!=="object"||i===null)return null;let u=i,t=u.type==="file",f=t?u.mediaType||"image/png":u.mimeType||"image/png";if(t&&!f.toLowerCase().startsWith("image/"))return null;let l=t?u.data:u.image;if(typeof l==="string")return Jp(l,f);if(typeof l==="object"&&l!==null&&l instanceof URL){if(l.protocol==="data:"){let E=l.toString();return Jp(E,f)}return null}if(Buffer.isBuffer(l)){let E=l.toString("base64");return{data:`data:${f};base64,${E}`,mimeType:f}}if(aA4(l)){let c=Buffer.from(l).toString("base64");return{data:`data:${f};base64,${c}`,mimeType:f}}if(t&&typeof u.url==="string")return Jp(u.url,f);if(!t&&typeof u.data==="string")return Jp(u.data,f);if(!t&&typeof u.url==="string")return Jp(u.url,f);return null}function Jp(i,u){let t=i.trim();if(/^file:\/\//i.test(t))return null;if(/^https?:\/\//i.test(t))return null;if(t.startsWith("data:")){let l=t.match(/^data:([^;,]+);base64,([^,]+)$/);if(!l)return null;let E=tdu(l[2]??"");if(!E)return null;let c=l[1]||u;return{data:`data:${c};base64,${E}`,mimeType:c}}let f=tdu(t);if(!f)return null;return{data:`data:${u};base64,${f}`,mimeType:u}}function aA4(i){if(i instanceof ArrayBuffer)return!0;return i instanceof Uint8Array}function Yut(i){let u=svu(mR(pvu(),"codex-img-")),t=oA4(i.mimeType),f=mR(u,`image.${t}`),l=i.data.match(/^data:[^;]+;base64,(.+)$/);if(!l)throw Error("Invalid data URL format: expected data:[type];base64,[data]");let E=tdu(l[1]??"");if(!E)throw Error("Invalid base64 image payload");let c=Buffer.from(E,"base64");return gut(f,c),f}function udu(i){for(let u of i)try{bGi(u,{force:!0});let t=u.replace(/[/\\][^/\\]+$/,"");if(t.includes("codex-img-"))bGi(t,{force:!0,recursive:!0})}catch{}}function oA4(i){if(!i)return"png";return{"image/png":"png","image/jpeg":"jpg","image/jpg":"jpg","image/gif":"gif","image/webp":"webp","image/bmp":"bmp","image/svg+xml":"svg"}[i.toLowerCase()]||i.split("/")[1]||"png"}function tdu(i){let u=i.replace(/\s+/g,"");if(!u)return null;if(!/^[A-Za-z0-9+/]*={0,2}$/.test(u))return null;if(u.length%4===1)return null;let t=u.padEnd(Math.ceil(u.length/4)*4,"=");try{if(Buffer.from(t,"base64").toString("base64")!==t)return null;return t}catch{return null}}function wut(i){return/^https?:\/\//i.test(i.trim())}function Kp(i){if(i instanceof URL)return i.protocol==="file:";if(typeof i==="string")return/^file:\/\//i.test(i.trim());return!1}function avu(i){if(i instanceof URL){let u=i.toString();return wut(u)?u:void 0}if(typeof i==="string")return wut(i)?i.trim():void 0;return}function sA4(i){return i.toLowerCase().startsWith("image/")}function cdu(i){return i.type==="file"&&typeof i.mediaType==="string"}function Wut(i){return i.type==="image"}function pA4(i){if(cdu(i)){if(!sA4(i.mediaType))return{kind:"unsupported",warning:`Unsupported file mediaType "${i.mediaType}"; only image/* is supported.`};let u=avu(i.data);if(u)return{kind:"remote",url:u};let t=cut(i);if(t)return{kind:"local",image:t};if(Kp(i.data)||Kp(i.url))return{kind:"unsupported",warning:"file:// image URLs are not supported."};return{kind:"unsupported",warning:"Unsupported image format in message."}}if(Wut(i)){let u=avu(i.image)??avu(i.url);if(u)return{kind:"remote",url:u};let t=cut(i);if(t)return{kind:"local",image:t};if(Kp(i.image)||Kp(i.url)||Kp(i.data))return{kind:"unsupported",warning:"file:// image URLs are not supported."};return{kind:"unsupported",warning:"Unsupported image format in message."}}return}function wdu(i){return i.type==="text"&&typeof i.text==="string"}function iy4(i){return i.type==="reasoning"&&typeof i.text==="string"}function uy4(i){let u=i;return i.type==="tool-call"&&typeof u.toolName==="string"&&typeof u.toolCallId==="string"&&"input"in u}function Lut(i){let u=i;return i.type==="tool-result"&&typeof u.toolName==="string"&&u.output!==void 0}function ty4(i){let u=i;return i.type==="tool-approval-response"&&typeof u.approvalId==="string"&&typeof u.approved==="boolean"&&(u.reason===void 0||typeof u.reason==="string")}function fy4(i){let u=[];for(let t of i){if(t.role!=="system")continue;if(typeof t.content==="string"){let f=t.content.trim();if(f.length>0)u.push(f);continue}for(let f of t.content){if(!wdu(f))continue;let l=f.text.trim();if(l.length>0)u.push(l)}}if(u.length===0)return;return u.join(`
87074
87074
 
87075
87075
  `)}function Sut(i){let u=[],t=[],f=[],l=[],E=!1;for(let c of i){if(c.role!=="user")continue;if(typeof c.content==="string"){let h=c.content.trim();if(h.length>0)l.push(h);continue}let w=[];for(let h of c.content){if(wdu(h)){let v=h.text.trim();if(v.length>0)w.push(v);continue}if(cdu(h)||Wut(h)){let v=pA4(h);if(!v)continue;if(E=!0,v.kind==="local")t.push(v.image);else if(v.kind==="remote")f.push(v.url);else u.push({type:"unsupported",feature:`prompt.user.${h.type}`,details:v.warning});continue}u.push({type:"unsupported",feature:`prompt.user.${h.type}`,details:`Unsupported user content part "${h.type}".`})}let $=w.join(`
@@ -87087,7 +87087,7 @@ ${[...Q].sort().join(`
87087
87087
  ${i.agentInstructions.trim()}
87088
87088
  </agent-instructions>`:null,KGi,Yn(i.now??new Date)].filter((t)=>Boolean(t?.trim()));return u.length>0?u.join(`
87089
87089
 
87090
- `):void 0}var i0t;var u0t=O(()=>{Of();sm();put();Rvu();kGi();nvu();Cvu();WGi();LGi();i0t={id:"codex",create(i){return{id:"codex",async*stream(u){let t=ddu(u.models.thinking.id),f=IGi(u.workspace.cwd),l=nP4({workspace:u.workspace,agentInstructions:u.agent.instructions});console.log(`[codex] stream start model=${t} cwd=${f??"(default)"} mcpUrl=${u.mcp.url} mode=${u.mode}`);let{model:E,provider:c}=vdu(t,zP4(u,f,l));try{let w=await xGi([u.userMessage]),h=MR({currentThreadTitle:u.currentThreadTitle})?(()=>{let{model:N,provider:Z}=vdu(ddu("codex:gpt-5.6-luna"),{toolApprovalLevel:"readonly",isPlanMode:!0,cwd:f}),B=qR({abortSignal:u.signal,models:[()=>N],userMessage:bR(w)}),F=B.promise.finally(()=>Z.close().catch(()=>{}));return{handle:B,closed:F}})():null,v=h?.handle??null,d=n5({model:E,messages:w,abortSignal:u.signal,allowSystemInMessages:!0}),D=XGi({input:u,providerName:"codex",providerMetadataKey:"codex-app-server",extractSessionId:(N)=>typeof N?.threadId==="string"?N.threadId:void 0}),_=d.toUIMessageStream({generateMessageId:G2,messageMetadata:D});try{let N=v?YGi(_,v):_;for await(let Z of N)yield Z}catch(N){if(u.harness.sessionId&&SGi(N))throw new Xp(N);throw N}finally{v?.finish(),await h?.closed.catch(()=>{})}}finally{await c.close().catch(()=>{})}}}}}});import{context as RP4,trace as bP4}from"@opentelemetry/api";function t0t(i){CP4({...i,tracer:i.ctx.tracer})}function CP4(i){try{if(!i.organizationId)return;let u=i.tracer.startSpan(Qzi),t=bP4.setSpan(RP4.active(),u),f=i.totalUsage??i.usage;Ka({type:tS,organizationId:i.organizationId,connectionId:Y1i,toolName:i.modelId,toolArguments:{model:i.modelId,credentialId:i.credentialId,threadId:i.taskId,...i.request?.body!==void 0?{requestBody:i.request.body}:{}},result:{...i.usage??{},...i.totalUsage?{totalUsage:i.totalUsage}:{},...i.cost!==void 0?{cost:i.cost}:{},...i.finishReason?{finishReason:i.finishReason}:{},...i.response?{responseId:i.response.id,responseModelId:i.response.modelId,responseTimestamp:i.response.timestamp,messages:i.response.messages}:{},logType:tS},duration:i.durationMs,isError:i.isError,errorMessage:i.errorMessage??null,userId:i.userId,requestId:i.requestId,userAgent:i.userAgent??null,virtualMcpId:i.agentId??null,properties:{model_title:i.modelTitle,credential_id:i.credentialId,thread_id:i.taskId,log_type:tS,...i.response?{response_id:i.response.id}:{},...f?{input_tokens:String(f.inputTokens),output_tokens:String(f.outputTokens),total_tokens:String(f.totalTokens)}:{},...i.cost!==void 0?{cost:String(i.cost)}:{}}},t),u.end()}catch{}}var f0t=O(()=>{C5i();qw()});function l0t(i){let{ctx:u,organizationId:t,modelId:f,durationMs:l,isError:E,inputTokens:c,outputTokens:w,cacheReadTokens:$,cacheWriteTokens:h}=i;if(!t||!f)return;let v={"connection.id":Y1i,"tool.name":f,"organization.id":t,status:E?"error":"success","error.type":E?i.errorType||"Error":""};if(u.meter.createHistogram("tool.execution.duration",{description:"Duration of tool executions in milliseconds",unit:"ms"}).record(l,v),u.meter.createCounter("tool.execution.count",{description:"Number of tool executions"}).add(1,v),c!=null||w!=null)u.meter.createCounter("tool.execution.tokens",{description:"Number of tokens used by LLM calls"}).add((c??0)+(w??0),v);if(($??0)>0)u.meter.createCounter("tool.execution.cache_tokens",{description:"LLM cache tokens by kind (read/write)"}).add($,{...v,kind:"read"});if((h??0)>0)u.meter.createCounter("tool.execution.cache_tokens",{description:"LLM cache tokens by kind (read/write)"}).add(h,{...v,kind:"write"})}var E0t=O(()=>{qw()});function qP4(i,u,t){if(!t)return i;let f=new Set;for(let[l,E]of u)if(t.has(l)||t.has(E))f.add(E);return Object.fromEntries(Object.entries(i).filter(([l])=>f.has(l)))}function VP4(i,u){if(!u)return i;return Object.fromEntries(Object.entries(i).filter(([t])=>MP4.has(t)||u.has(t)))}async function c0t(i,u,t){let f=VR(i),l=u.organization,E=i.mode==="plan",c=i.toolAllowlist&&i.toolAllowlist.length>0?new Set(i.toolAllowlist):null,w=await t.mcpForAgent(i.agent.id,{superUser:!0,listTimeoutMs:1000});try{let{tools:$,nameMap:h,rawTools:v}=await TTi(w,t.toolOutputMap,t.writer,i.toolApprovalLevel,{isPlanMode:E,timeoutMs:Lvi,resolveArgs:t.resolveArgs,onToolCalled:t.onToolCalled,onPrOpened:t.onPrOpened}),d=qP4($,h,c),D=f.virtualMcp.metadata,_=await po(u,t.threadId),Z=!(_??D.githubRepo),B=i.user.id?{virtualMcpId:i.agent.id,branch:_?dTi(t.threadId,_.connectionId):Z?"ephemeral":f.branch??`thread:${t.threadId}`,userId:i.user.id,threadId:t.threadId,syncTools:!0}:null,F=await XTi(t.writer,{provider:t.provider,imageProvider:t.imageProvider,webSearchProvider:t.webSearchProvider,deepResearchProvider:t.deepResearchProvider,organization:l,models:i.models,toolApprovalLevel:i.toolApprovalLevel,isPlanMode:E,toolOutputMap:t.toolOutputMap,pendingImages:t.pendingImages,passthroughClient:w,vmContext:B,htmlArtifactBuffer:t.htmlArtifactBuffer,taskId:t.threadId,agentId:i.agent.id,onChildUsage:t.onChildUsage,backgroundDispatcher:t.backgroundDispatcher},u),g=VP4(F,c),U=[],T=new Map;for(let I of v){let j=h.get(I.name);if(!j)continue;if(c&&!c.has(I.name)&&!c.has(j))continue;let C=typeof I._meta?.gatewayClientId==="string"?I._meta.gatewayClientId:"unknown";if(U.push({rawName:I.name,safeName:j,connectionId:C}),E)T.set(j,{readOnlyHint:I.annotations?.readOnlyHint})}let A=w.getConnectionTitleMap(),G=w.getInstructions();return{tools:{...d,...g},nameMap:h,passthroughTools:d,builtInTools:g,passthroughToolList:v,connectionsBlockTools:U,toolAnnotations:T,vmContext:B,connectionTitleMap:A,serverInstructions:G,passthroughClient:w,close:async()=>{await w.close().catch(()=>{})}}}catch($){throw await w.close().catch(()=>{}),$}}var MP4;var w0t=O(()=>{wO();sEu();ATi();rR();MP4=new Set(["read_tool_output","enable_tool","open_in_agent","todo_write","update_interests"])});function $0t(i){let u=rP4.exec(i);if(!u)return null;return{path:i,name:u[2],kind:u[1].toLowerCase()==="decks"?"deck":"page"}}function h0t(i,u){if(i.kind!=="file"||i.deletedAt)return null;let t=u.threadId!=null&&i.threadId===u.threadId,f=i.threadId==null&&i.updatedBy===u.ownerId;if(!t&&!f)return null;return $0t(i.path)}function v0t(i,u){if(!u)return null;let t=i.replace(/^\.\//,""),f=`org/${u}/`,l=t.indexOf(f);if(l!==0&&(l<0||t[l-1]!=="/"))return null;return $0t(t.slice(l+f.length))}var rP4;var Ddu=O(()=>{rP4=/^(decks|pages)\/([a-z0-9][a-z0-9._-]*)\.html$/i});function d0t(i){let u=i.orgFs,t=i.organization?.slug??null,f=i.auth?.user?.id??null;if(!u||!t||!f)return eP4;let l=$g,E=i.metadata?.threadId??null,c=new Map;return{enqueue(w,$){let h=v0t(w,l);if(!h)return;c.set(h.path,$)},async flush(){if(c.size===0)return;let w=[...c.entries()];c.clear(),await Promise.allSettled(w.map(async([$,h])=>{try{await u.write(mP4,$,h,{actor:f,contentType:"text/html; charset=utf-8",threadId:E})}catch(v){console.error("[deck-buffer] org-fs write failed",{path:$},v)}}))}}}var mP4="home",eP4;var D0t=O(()=>{m5i();Ddu();eP4={enqueue:()=>{},flush:async()=>{}}});function _0t(i,u){let t=i.orgFs,f=i.organization?.slug??null,l=i.auth?.user?.id??null;if(!t||!f||!l)return{sweep:async()=>{}};let E=$g,c={threadId:i.metadata?.threadId??null,ownerId:l},w=t.latestSeq(_du).catch((_)=>{return console.error("[deck-watcher] cursor snapshot failed",_),null}),$=null,h=!1,v=!1,d=new Map;return{sweep:async()=>{if(v)return;v=!0;try{if(!h)$=await w,h=!0;if($===null)return;let _=new Map;for(let N=0;N<20;N++){let Z=await t.changes(_du,$,aP4);for(let B of Z.entries){let F=h0t(B,c);if(!F)continue;if(B.contentHash){if(d.get(F.path)===B.contentHash)continue;d.set(F.path,B.contentHash)}_.set(F.path,{volume:_du,path:F.path,name:F.name,kind:F.kind,mountPath:`org/${E}/${F.path}`})}if($=Z.cursor,!Z.hasMore)break}for(let N of _.values())u.write({type:"data-deck-updated",id:N.path,data:N})}catch(_){console.error("[deck-watcher] sweep failed",_)}finally{v=!1}}}}var _du="home",aP4=200;var N0t=O(()=>{m5i();Ddu()});async function oP4(i,u,t){let f=await Ln({kind:t.kind,ctx:i,organization:u,virtualMcp:t.virtualMcp,mcpClient:t.mcpClient,provider:t.provider,models:t.models,messages:t.messages,abortSignal:t.abortSignal,temperature:t.temperature,planMode:t.planMode,isDecopilot:t.isDecopilot,systemAgentInstructions:t.systemAgentInstructions,currentThreadId:t.currentThreadId,user:t.user,userContext:t.userContext,codingWorkspace:t.codingWorkspace,writer:t.writer,subtaskParams:{provider:t.provider,organization:u,models:t.models,codingWorkspace:t.codingWorkspace},prepareStep:t.prepareStep,onStepFinish:t.onStepFinish,passthroughClient:t.passthroughClient,connectionsData:t.connectionsData,extraTools:t.extraTools,additionalSystemMessages:t.additionalSystemMessages,activeToolNames:t.activeToolNames,stepLimit:t.stepLimit});return{result:f.result,error:f.error,span:f.span,assembledSystemMessages:f.assembledSystemMessages}}function O0t(i){let{ctx:u,organization:t,modelRuntime:f,sideChannel:l,cleanup:E}=i,c=_0t(u,l.writer),w=d0t(u);return{toolRuntime:{buildEnvironmentTools:async({input:v,onChildUsage:d})=>{let D=VR(v),_=new Map,N=[],{resolveArgs:Z,onToolCalled:B,onPrOpened:F}=LTi(u,v.threadId),g=await c0t(v,u,{writer:l.writer,toolOutputMap:_,pendingImages:N,threadId:v.threadId,resolveArgs:Z,onToolCalled:B,onPrOpened:F,mcpForAgent:async(T,A)=>{let G=D.virtualMcp,k=null;if(G.id&&v.user.id&&o1(G.metadata)[v.user.id])k=await BY(u,G.id,v.user.id,D.branch??void 0).catch(()=>null);return S2(G,u,A?.superUser??!1,{listTimeoutMs:A?.listTimeoutMs,includeSkillsCatalog:!0,additionalConnections:k?[k]:[]})},provider:f.thinking.provider,imageProvider:f.image?.provider??f.thinking.provider,webSearchProvider:f.webSearch?.provider??f.thinking.provider,deepResearchProvider:f.deepResearch?.provider??f.thinking.provider,backgroundDispatcher:RTi({threadId:v.threadId,orgId:v.organizationId,userId:v.user.id,agentId:v.agent.id,temperature:v.temperature,toolApprovalLevel:v.toolApprovalLevel,branch:D.branch??null}),htmlArtifactBuffer:w,onChildUsage:d}),U={tools:g.tools,passthroughTools:g.passthroughTools,builtInTools:g.builtInTools,connectionsBlockTools:g.connectionsBlockTools,toolAnnotations:g.toolAnnotations,connectionTitleMap:g.connectionTitleMap,serverInstructions:g.serverInstructions,passthroughClient:g.passthroughClient,writer:l.writer,pendingImages:N,sideChunks:l.stream,closeSideChunks:l.close,onStepFinish:async()=>{await w.flush(),await c.sweep()},close:g.close};return E.close=g.close,U},runEngine:(v)=>oP4(u,t,v)},telemetry:{recordLlmCall:(v)=>l0t({ctx:u,...v}),monitorLlmCall:(v)=>t0t({ctx:u,...v,requestId:u.metadata.requestId,userAgent:u.metadata.userAgent??null})}}}var Z0t=O(()=>{f0t();E0t();bz();eTi();G$();w0t();tcu();D0t();N0t();PTi();Hn();rR()});function qGi(i){if(i.providerId==="openai-compatible")try{let u=JSON.parse(i.apiKey);return{kind:"secret",providerId:i.providerId,apiKey:u.apiKey??"",modelId:i.modelId,...u.baseUrl?{baseUrl:u.baseUrl}:{}}}catch{return{kind:"secret",providerId:i.providerId,apiKey:i.apiKey,modelId:i.modelId}}return{kind:"secret",providerId:i.providerId,apiKey:i.apiKey,modelId:i.modelId}}var B0t=O(()=>{zd();MQ()});var F0t=O(()=>{B0t()});var g0t=O(()=>{bit();tut();u0t();Z0t();xvu();jvu();F0t();iut((i)=>{let u=i.ctx;return O0t({...i,ctx:u,organization:u.organization})});yGi(uut);yGi(Rit);yGi(i0t)});function Ndu(i){if(i==="codex")return"codex";if(i==="claude-code")return"claude-code";return}function U0t(i){return Ndu(i)!==void 0}class T0t{thread;organization_id;storage;defaultWindowSize;constructor(i){this.thread=i.thread,this.organization_id=i.thread.organization_id,this.storage=i.storage,this.defaultWindowSize=i.defaultWindowSize??50}async loadHistory(i){let u=i??this.defaultWindowSize,{chronological:t,isWindowed:f}=this.thread.message_storage_version===2?await this.loadWindowedFromParts(u):await this.loadWindowedFromMessages(u),l=t.find(($)=>$.role!=="system");if(!l||l.role==="user")return t;let E=l,c=f?"[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:c}],metadata:void 0,created_at:E.created_at,updated_at:E.updated_at},...t]}async loadWindowedFromMessages(i){let{messages:u,total:t}=await this.storage.listMessages(this.thread.id,{limit:i,sort:"desc"});return{chronological:[...u].reverse(),isWindowed:t>u.length}}async loadWindowedFromParts(i){let{messages:u,total:t}=await this.storage.messageParts().loadWindow(this.thread.id,{limit:i});return{chronological:u.map((l)=>({id:l.id,thread_id:this.thread.id,role:l.role,parts:l.parts,metadata:l.metadata??void 0,created_at:l.created_at,updated_at:l.created_at})),isWindowed:t>u.length}}}async function VGi(i,u){let{thread_id:t,defaultWindowSize:f}=u;if(!t)throw Error("createMemory: thread_id is required");let l=await i.get(t);if(!l)throw Error(`Thread not found: ${t}`);return new T0t({thread:l,storage:i,defaultWindowSize:f})}function sP4(i,u){let t=i.filter((E)=>E.parts&&E.parts.length>0),f=t.findIndex((E)=>E.id===u.id);return f>=0?[...t.slice(0,f),u]:[...t,u]}async function pP4(i){return[...i.systemMessages,...sP4(i.history,i.userMessage)]}async function A0t(i){let u=i.isSubagent?[]:await(await VGi(i.ctx.storage.threads,{thread_id:i.threadId,organization_id:i.ctx.organization?.id??"",userId:i.ctx.auth.user?.id??"",defaultWindowSize:i.windowSize??y5})).loadHistory(i.windowSize??y5),t=await pP4({history:u,userMessage:i.userMessage,systemMessages:i.systemMessages});return WTi(t,i.ctx)}var y0t=O(()=>{a9();Qn()});function P0t(i,u){let t=i.thinking.capabilities;if(!((t?.vision??!1)||(t?.file??!1))){if(u.some((E)=>E.parts?.some((c)=>c.type==="file")))throw new G0(400,{message:"This model does not support file uploads. Please change the model and try again."})}}var G0t=O(()=>{bh()});function iG4(i=Date.now){return oli(i)}async function*I0t(i,u={}){let t=()=>iG4(u.now),f=null,l=new OB({intervalMs:u.intervalMs,sleepFn:u.sleepFn,emit:()=>f?.()}),E=i[Symbol.asyncIterator](),c=E.next();try{l.arm();while(!0){let w=new Promise((h)=>{f=()=>h("heartbeat")}),$=await Promise.race([c.then((h)=>({kind:"chunk",r:h})),w.then((h)=>({kind:h}))]);if(f=null,$.kind==="heartbeat"){yield t();continue}if(l.arm(),$.r.done)return;yield $.r.value,c=E.next()}}finally{l.stop(),await E.return?.(void 0).catch(()=>{})}}var x0t=O(()=>{sli()});function aR(i,u){let t=i.capabilities?{...i.capabilities.vision!==void 0?{vision:i.capabilities.vision}:{},...i.capabilities.text!==void 0?{text:i.capabilities.text}:{},...i.capabilities.reasoning!==void 0?{reasoning:i.capabilities.reasoning}:{}}:void 0;return{id:i.id,...i.title!==void 0?{title:i.title}:{},...i.provider!==void 0?{provider:i.provider}:{},credentialId:u,...i.limits?{limits:i.limits}:{},...t&&Object.keys(t).length>0?{capabilities:t}:{}}}function k0t(i){let u=i.credentialId,t=aR(i.thinking,u);return{thinking:{...t,title:t.title??t.id},...i.fast?{fast:aR(i.fast,u)}:{},...i.smart?{smart:aR(i.smart,u)}:{},...i.image?{image:aR(i.image,i.image.credentialId??u)}:{},...i.webSearch?{webSearch:aR(i.webSearch,i.webSearch.credentialId??u)}:{},...i.deepResearch?{deepResearch:aR(i.deepResearch,i.deepResearch.credentialId??u)}:{}}}function uG4(i,u){for(let t=i.length-1;t>=0;t--){let f=i[t],l=f?.metadata;if(f?.role==="assistant"&&l?.codingAgentSessionId&&l?.codingAgentProvider===u)return t}return-1}function j0t(i,u){let t=Ndu(u);if(!t)return;let f=uG4(i,t);if(f===-1)return;return i[f]?.metadata?.codingAgentSessionId}var X0t=()=>{};function Odu(){return vu().podName}var J0t=O(()=>{R0()});function tG4(i){let u=null;return new ReadableStream({async pull(t){try{u??=i().getReader();let{done:f,value:l}=await u.read();if(f)t.close();else t.enqueue(l)}catch(f){t.error(f)}},async cancel(t){await u?.cancel(t)}},{highWaterMark:0})}function fG4(i){let u=0;async function*t(){for await(let f of i.chunks)yield{seq:++u,chunk:f}}return new ReadableStream({async start(f){try{let l=await i.loadOriginalMessages?.();await QTi({runId:i.runId,fenceToken:i.fenceToken,chunks:t(),errorMessageId:i.errorMessageId,originalMessages:l},{streamBuffer:i.streamBuffer,hooks:i.hooks,title:i.title}),f.close()}catch(l){f.error(l)}}})}function Zdu(i){if(i==="claude-code")return"claude-code";if(i==="codex")return"codex";return"decopilot"}function lG4(i){let u=i.virtualMcp?.metadata?.githubRepo,t=u&&typeof u.owner==="string"&&typeof u.name==="string"?{owner:u.owner,name:u.name,connectedGithub:Boolean(u.connectionId)}:void 0;if(!t)return{cwd:null};if(i.cwd!==pY)return{cwd:null};return{cwd:pY,repo:t,branch:i.branch??null}}async function EG4(i,u,t,f){let{keyInfo:l,apiKey:E}=await i.storage.aiProviderKeys.resolve(t,u),c=qGi({providerId:l.providerId,apiKey:E,modelId:f});if(c.providerId==="openrouter"||c.providerId==="deco")return{...c,extraHeaders:{...c.extraHeaders,"HTTP-Referer":"https://studio.decocms.com","X-Title":"deco"}};return c}function W0t(i){return!("messages"in i)}function L0t(i,u){if(!i.taskId)throw Error("buildDurableDispatchInput: taskId is required");let t=i.messages.filter((f)=>f.role==="system").flatMap((f)=>f.parts).filter((f)=>f.type==="text"&&typeof f.text==="string").map((f)=>f.text).join(`
87090
+ `):void 0}var i0t;var u0t=O(()=>{Of();sm();put();Rvu();kGi();nvu();Cvu();WGi();LGi();i0t={id:"codex",create(i){return{id:"codex",async*stream(u){let t=ddu(u.models.thinking.id),f=IGi(u.workspace.cwd),l=nP4({workspace:u.workspace,agentInstructions:u.agent.instructions});console.log(`[codex] stream start model=${t} cwd=${f??"(default)"} mcpUrl=${u.mcp.url} mode=${u.mode}`);let{model:E,provider:c}=vdu(t,zP4(u,f,l));try{let w=await xGi([u.userMessage]),h=MR({currentThreadTitle:u.currentThreadTitle})?(()=>{let{model:N,provider:Z}=vdu(ddu("codex:gpt-5.6-luna"),{toolApprovalLevel:"readonly",isPlanMode:!0,cwd:f}),B=qR({abortSignal:u.signal,models:[()=>N],userMessage:bR(w)}),F=B.promise.finally(()=>Z.close().catch(()=>{}));return{handle:B,closed:F}})():null,v=h?.handle??null,d=n5({model:E,messages:w,abortSignal:u.signal,allowSystemInMessages:!0}),D=XGi({input:u,providerName:"codex",providerMetadataKey:"codex-app-server",extractSessionId:(N)=>typeof N?.threadId==="string"?N.threadId:void 0}),_=d.toUIMessageStream({generateMessageId:G2,messageMetadata:D});try{let N=v?YGi(_,v):_;for await(let Z of N)yield Z}catch(N){if(u.harness.sessionId&&SGi(N))throw new Xp(N);throw N}finally{v?.finish(),await h?.closed.catch(()=>{})}}finally{await c.close().catch(()=>{})}}}}}});import{context as RP4,trace as bP4}from"@opentelemetry/api";function t0t(i){CP4({...i,tracer:i.ctx.tracer})}function CP4(i){try{if(!i.organizationId)return;let u=i.tracer.startSpan(Qzi),t=bP4.setSpan(RP4.active(),u),f=i.totalUsage??i.usage;Ka({type:tS,organizationId:i.organizationId,connectionId:Y1i,toolName:i.modelId,toolArguments:{model:i.modelId,credentialId:i.credentialId,threadId:i.taskId,...i.request?.body!==void 0?{requestBody:i.request.body}:{}},result:{...i.usage??{},...i.totalUsage?{totalUsage:i.totalUsage}:{},...i.cost!==void 0?{cost:i.cost}:{},...i.finishReason?{finishReason:i.finishReason}:{},...i.response?{responseId:i.response.id,responseModelId:i.response.modelId,responseTimestamp:i.response.timestamp,messages:i.response.messages}:{},logType:tS},duration:i.durationMs,isError:i.isError,errorMessage:i.errorMessage??null,userId:i.userId,requestId:i.requestId,userAgent:i.userAgent??null,virtualMcpId:i.agentId??null,properties:{model_title:i.modelTitle,credential_id:i.credentialId,thread_id:i.taskId,log_type:tS,...i.response?{response_id:i.response.id}:{},...f?{input_tokens:String(f.inputTokens),output_tokens:String(f.outputTokens),total_tokens:String(f.totalTokens)}:{},...i.cost!==void 0?{cost:String(i.cost)}:{}}},t),u.end()}catch{}}var f0t=O(()=>{C5i();qw()});function l0t(i){let{ctx:u,organizationId:t,modelId:f,durationMs:l,isError:E,inputTokens:c,outputTokens:w,cacheReadTokens:$,cacheWriteTokens:h}=i;if(!t||!f)return;let v={"connection.id":Y1i,"tool.name":f,"organization.id":t,status:E?"error":"success","error.type":E?i.errorType||"Error":""};if(u.meter.createHistogram("tool.execution.duration",{description:"Duration of tool executions in milliseconds",unit:"ms"}).record(l,v),u.meter.createCounter("tool.execution.count",{description:"Number of tool executions"}).add(1,v),c!=null||w!=null)u.meter.createCounter("tool.execution.tokens",{description:"Number of tokens used by LLM calls"}).add((c??0)+(w??0),v);if(($??0)>0)u.meter.createCounter("tool.execution.cache_tokens",{description:"LLM cache tokens by kind (read/write)"}).add($,{...v,kind:"read"});if((h??0)>0)u.meter.createCounter("tool.execution.cache_tokens",{description:"LLM cache tokens by kind (read/write)"}).add(h,{...v,kind:"write"})}var E0t=O(()=>{qw()});function qP4(i,u,t){if(!t)return i;let f=new Set;for(let[l,E]of u)if(t.has(l)||t.has(E))f.add(E);return Object.fromEntries(Object.entries(i).filter(([l])=>f.has(l)))}function VP4(i,u){if(!u)return i;return Object.fromEntries(Object.entries(i).filter(([t])=>MP4.has(t)||u.has(t)))}async function c0t(i,u,t){let f=VR(i),l=u.organization,E=i.mode==="plan",c=i.toolAllowlist&&i.toolAllowlist.length>0?new Set(i.toolAllowlist):null,w=await t.mcpForAgent(i.agent.id,{superUser:!0,listTimeoutMs:1000});try{let{tools:$,nameMap:h,rawTools:v}=await TTi(w,t.toolOutputMap,t.writer,i.toolApprovalLevel,{isPlanMode:E,timeoutMs:Lvi,resolveArgs:t.resolveArgs,onToolCalled:t.onToolCalled,onPrOpened:t.onPrOpened}),d=qP4($,h,c),D=f.virtualMcp.metadata,_=await po(u,t.threadId),Z=!(_??D.githubRepo),B=i.user.id?{virtualMcpId:i.agent.id,branch:_?dTi(t.threadId,_.connectionId):Z?"ephemeral":f.branch??`thread:${t.threadId}`,userId:i.user.id,threadId:t.threadId,syncTools:!0}:null,F=await XTi(t.writer,{provider:t.provider,imageProvider:t.imageProvider,webSearchProvider:t.webSearchProvider,deepResearchProvider:t.deepResearchProvider,organization:l,models:i.models,toolApprovalLevel:i.toolApprovalLevel,isPlanMode:E,toolOutputMap:t.toolOutputMap,pendingImages:t.pendingImages,passthroughClient:w,vmContext:B,htmlArtifactBuffer:t.htmlArtifactBuffer,taskId:t.threadId,agentId:i.agent.id,onChildUsage:t.onChildUsage,backgroundDispatcher:t.backgroundDispatcher},u),g=VP4(F,c),U=[],T=new Map;for(let I of v){let j=h.get(I.name);if(!j)continue;if(c&&!c.has(I.name)&&!c.has(j))continue;let C=typeof I._meta?.gatewayClientId==="string"?I._meta.gatewayClientId:"unknown";if(U.push({rawName:I.name,safeName:j,connectionId:C}),E)T.set(j,{readOnlyHint:I.annotations?.readOnlyHint})}let A=w.getConnectionTitleMap(),G=w.getInstructions();return{tools:{...d,...g},nameMap:h,passthroughTools:d,builtInTools:g,passthroughToolList:v,connectionsBlockTools:U,toolAnnotations:T,vmContext:B,connectionTitleMap:A,serverInstructions:G,passthroughClient:w,close:async()=>{await w.close().catch(()=>{})}}}catch($){throw await w.close().catch(()=>{}),$}}var MP4;var w0t=O(()=>{wO();sEu();ATi();rR();MP4=new Set(["read_tool_output","enable_tool","open_in_agent","todo_write","update_interests"])});function $0t(i){let u=rP4.exec(i);if(!u)return null;return{path:i,name:u[2],kind:u[1].toLowerCase()==="decks"?"deck":"page"}}function h0t(i,u){if(i.kind!=="file"||i.deletedAt)return null;let t=u.threadId!=null&&i.threadId===u.threadId,f=i.threadId==null&&i.updatedBy===u.ownerId;if(!t&&!f)return null;return $0t(i.path)}function v0t(i,u){if(!u)return null;let t=i.replace(/^\.\//,""),f=`org/${u}/`,l=t.indexOf(f);if(l!==0&&(l<0||t[l-1]!=="/"))return null;return $0t(t.slice(l+f.length))}var rP4;var Ddu=O(()=>{rP4=/^(decks|pages)\/([a-z0-9][a-z0-9._-]*)\.html$/i});function d0t(i){let u=i.orgFs,t=i.organization?.slug??null,f=i.auth?.user?.id??null;if(!u||!t||!f)return eP4;let l=$g,E=i.metadata?.threadId??null,c=new Map;return{enqueue(w,$){let h=v0t(w,l);if(!h)return;c.set(h.path,$)},async flush(){if(c.size===0)return;let w=[...c.entries()];c.clear(),await Promise.allSettled(w.map(async([$,h])=>{try{await u.write(mP4,$,h,{actor:f,contentType:"text/html; charset=utf-8",threadId:E})}catch(v){console.error("[deck-buffer] org-fs write failed",{path:$},v)}}))}}}var mP4="home",eP4;var D0t=O(()=>{m5i();Ddu();eP4={enqueue:()=>{},flush:async()=>{}}});function _0t(i,u){let t=i.orgFs,f=i.organization?.slug??null,l=i.auth?.user?.id??null;if(!t||!f||!l)return{sweep:async()=>{}};let E=$g,c={threadId:i.metadata?.threadId??null,ownerId:l},w=t.latestSeq(_du).catch((_)=>{return console.error("[deck-watcher] cursor snapshot failed",_),null}),$=null,h=!1,v=!1,d=new Map;return{sweep:async()=>{if(v)return;v=!0;try{if(!h)$=await w,h=!0;if($===null)return;let _=new Map;for(let N=0;N<20;N++){let Z=await t.changes(_du,$,aP4);for(let B of Z.entries){let F=h0t(B,c);if(!F)continue;if(B.contentHash){if(d.get(F.path)===B.contentHash)continue;d.set(F.path,B.contentHash)}_.set(F.path,{volume:_du,path:F.path,name:F.name,kind:F.kind,mountPath:`org/${E}/${F.path}`})}if($=Z.cursor,!Z.hasMore)break}for(let N of _.values())u.write({type:"data-deck-updated",id:N.path,data:N})}catch(_){console.error("[deck-watcher] sweep failed",_)}finally{v=!1}}}}var _du="home",aP4=200;var N0t=O(()=>{m5i();Ddu()});async function oP4(i,u,t){let f=await Ln({kind:t.kind,ctx:i,organization:u,virtualMcp:t.virtualMcp,mcpClient:t.mcpClient,provider:t.provider,models:t.models,messages:t.messages,abortSignal:t.abortSignal,temperature:t.temperature,planMode:t.planMode,isDecopilot:t.isDecopilot,systemAgentInstructions:t.systemAgentInstructions,currentThreadId:t.currentThreadId,user:t.user,userContext:t.userContext,codingWorkspace:t.codingWorkspace,writer:t.writer,subtaskParams:{provider:t.provider,organization:u,models:t.models,codingWorkspace:t.codingWorkspace},prepareStep:t.prepareStep,onStepFinish:t.onStepFinish,passthroughClient:t.passthroughClient,connectionsData:t.connectionsData,extraTools:t.extraTools,toolOutputMap:t.toolOutputMap,additionalSystemMessages:t.additionalSystemMessages,activeToolNames:t.activeToolNames,stepLimit:t.stepLimit});return{result:f.result,error:f.error,span:f.span,assembledSystemMessages:f.assembledSystemMessages}}function O0t(i){let{ctx:u,organization:t,modelRuntime:f,sideChannel:l,cleanup:E}=i,c=_0t(u,l.writer),w=d0t(u);return{toolRuntime:{buildEnvironmentTools:async({input:v,onChildUsage:d})=>{let D=VR(v),_=new Map,N=[],{resolveArgs:Z,onToolCalled:B,onPrOpened:F}=LTi(u,v.threadId),g=await c0t(v,u,{writer:l.writer,toolOutputMap:_,pendingImages:N,threadId:v.threadId,resolveArgs:Z,onToolCalled:B,onPrOpened:F,mcpForAgent:async(T,A)=>{let G=D.virtualMcp,k=null;if(G.id&&v.user.id&&o1(G.metadata)[v.user.id])k=await BY(u,G.id,v.user.id,D.branch??void 0).catch(()=>null);return S2(G,u,A?.superUser??!1,{listTimeoutMs:A?.listTimeoutMs,includeSkillsCatalog:!0,additionalConnections:k?[k]:[]})},provider:f.thinking.provider,imageProvider:f.image?.provider??f.thinking.provider,webSearchProvider:f.webSearch?.provider??f.thinking.provider,deepResearchProvider:f.deepResearch?.provider??f.thinking.provider,backgroundDispatcher:RTi({threadId:v.threadId,orgId:v.organizationId,userId:v.user.id,agentId:v.agent.id,temperature:v.temperature,toolApprovalLevel:v.toolApprovalLevel,branch:D.branch??null}),htmlArtifactBuffer:w,onChildUsage:d}),U={tools:g.tools,passthroughTools:g.passthroughTools,builtInTools:g.builtInTools,connectionsBlockTools:g.connectionsBlockTools,toolAnnotations:g.toolAnnotations,connectionTitleMap:g.connectionTitleMap,serverInstructions:g.serverInstructions,passthroughClient:g.passthroughClient,toolOutputMap:_,writer:l.writer,pendingImages:N,sideChunks:l.stream,closeSideChunks:l.close,onStepFinish:async()=>{await w.flush(),await c.sweep()},close:g.close};return E.close=g.close,U},runEngine:(v)=>oP4(u,t,v)},telemetry:{recordLlmCall:(v)=>l0t({ctx:u,...v}),monitorLlmCall:(v)=>t0t({ctx:u,...v,requestId:u.metadata.requestId,userAgent:u.metadata.userAgent??null})}}}var Z0t=O(()=>{f0t();E0t();bz();eTi();G$();w0t();tcu();D0t();N0t();PTi();Hn();rR()});function qGi(i){if(i.providerId==="openai-compatible")try{let u=JSON.parse(i.apiKey);return{kind:"secret",providerId:i.providerId,apiKey:u.apiKey??"",modelId:i.modelId,...u.baseUrl?{baseUrl:u.baseUrl}:{}}}catch{return{kind:"secret",providerId:i.providerId,apiKey:i.apiKey,modelId:i.modelId}}return{kind:"secret",providerId:i.providerId,apiKey:i.apiKey,modelId:i.modelId}}var B0t=O(()=>{zd();MQ()});var F0t=O(()=>{B0t()});var g0t=O(()=>{bit();tut();u0t();Z0t();xvu();jvu();F0t();iut((i)=>{let u=i.ctx;return O0t({...i,ctx:u,organization:u.organization})});yGi(uut);yGi(Rit);yGi(i0t)});function Ndu(i){if(i==="codex")return"codex";if(i==="claude-code")return"claude-code";return}function U0t(i){return Ndu(i)!==void 0}class T0t{thread;organization_id;storage;defaultWindowSize;constructor(i){this.thread=i.thread,this.organization_id=i.thread.organization_id,this.storage=i.storage,this.defaultWindowSize=i.defaultWindowSize??50}async loadHistory(i){let u=i??this.defaultWindowSize,{chronological:t,isWindowed:f}=this.thread.message_storage_version===2?await this.loadWindowedFromParts(u):await this.loadWindowedFromMessages(u),l=t.find(($)=>$.role!=="system");if(!l||l.role==="user")return t;let E=l,c=f?"[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:c}],metadata:void 0,created_at:E.created_at,updated_at:E.updated_at},...t]}async loadWindowedFromMessages(i){let{messages:u,total:t}=await this.storage.listMessages(this.thread.id,{limit:i,sort:"desc"});return{chronological:[...u].reverse(),isWindowed:t>u.length}}async loadWindowedFromParts(i){let{messages:u,total:t}=await this.storage.messageParts().loadWindow(this.thread.id,{limit:i});return{chronological:u.map((l)=>({id:l.id,thread_id:this.thread.id,role:l.role,parts:l.parts,metadata:l.metadata??void 0,created_at:l.created_at,updated_at:l.created_at})),isWindowed:t>u.length}}}async function VGi(i,u){let{thread_id:t,defaultWindowSize:f}=u;if(!t)throw Error("createMemory: thread_id is required");let l=await i.get(t);if(!l)throw Error(`Thread not found: ${t}`);return new T0t({thread:l,storage:i,defaultWindowSize:f})}function sP4(i,u){let t=i.filter((E)=>E.parts&&E.parts.length>0),f=t.findIndex((E)=>E.id===u.id);return f>=0?[...t.slice(0,f),u]:[...t,u]}async function pP4(i){return[...i.systemMessages,...sP4(i.history,i.userMessage)]}async function A0t(i){let u=i.isSubagent?[]:await(await VGi(i.ctx.storage.threads,{thread_id:i.threadId,organization_id:i.ctx.organization?.id??"",userId:i.ctx.auth.user?.id??"",defaultWindowSize:i.windowSize??y5})).loadHistory(i.windowSize??y5),t=await pP4({history:u,userMessage:i.userMessage,systemMessages:i.systemMessages});return WTi(t,i.ctx)}var y0t=O(()=>{a9();Qn()});function P0t(i,u){let t=i.thinking.capabilities;if(!((t?.vision??!1)||(t?.file??!1))){if(u.some((E)=>E.parts?.some((c)=>c.type==="file")))throw new G0(400,{message:"This model does not support file uploads. Please change the model and try again."})}}var G0t=O(()=>{bh()});function iG4(i=Date.now){return oli(i)}async function*I0t(i,u={}){let t=()=>iG4(u.now),f=null,l=new OB({intervalMs:u.intervalMs,sleepFn:u.sleepFn,emit:()=>f?.()}),E=i[Symbol.asyncIterator](),c=E.next();try{l.arm();while(!0){let w=new Promise((h)=>{f=()=>h("heartbeat")}),$=await Promise.race([c.then((h)=>({kind:"chunk",r:h})),w.then((h)=>({kind:h}))]);if(f=null,$.kind==="heartbeat"){yield t();continue}if(l.arm(),$.r.done)return;yield $.r.value,c=E.next()}}finally{l.stop(),await E.return?.(void 0).catch(()=>{})}}var x0t=O(()=>{sli()});function aR(i,u){let t=i.capabilities?{...i.capabilities.vision!==void 0?{vision:i.capabilities.vision}:{},...i.capabilities.text!==void 0?{text:i.capabilities.text}:{},...i.capabilities.reasoning!==void 0?{reasoning:i.capabilities.reasoning}:{}}:void 0;return{id:i.id,...i.title!==void 0?{title:i.title}:{},...i.provider!==void 0?{provider:i.provider}:{},credentialId:u,...i.limits?{limits:i.limits}:{},...t&&Object.keys(t).length>0?{capabilities:t}:{}}}function k0t(i){let u=i.credentialId,t=aR(i.thinking,u);return{thinking:{...t,title:t.title??t.id},...i.fast?{fast:aR(i.fast,u)}:{},...i.smart?{smart:aR(i.smart,u)}:{},...i.image?{image:aR(i.image,i.image.credentialId??u)}:{},...i.webSearch?{webSearch:aR(i.webSearch,i.webSearch.credentialId??u)}:{},...i.deepResearch?{deepResearch:aR(i.deepResearch,i.deepResearch.credentialId??u)}:{}}}function uG4(i,u){for(let t=i.length-1;t>=0;t--){let f=i[t],l=f?.metadata;if(f?.role==="assistant"&&l?.codingAgentSessionId&&l?.codingAgentProvider===u)return t}return-1}function j0t(i,u){let t=Ndu(u);if(!t)return;let f=uG4(i,t);if(f===-1)return;return i[f]?.metadata?.codingAgentSessionId}var X0t=()=>{};function Odu(){return vu().podName}var J0t=O(()=>{R0()});function tG4(i){let u=null;return new ReadableStream({async pull(t){try{u??=i().getReader();let{done:f,value:l}=await u.read();if(f)t.close();else t.enqueue(l)}catch(f){t.error(f)}},async cancel(t){await u?.cancel(t)}},{highWaterMark:0})}function fG4(i){let u=0;async function*t(){for await(let f of i.chunks)yield{seq:++u,chunk:f}}return new ReadableStream({async start(f){try{let l=await i.loadOriginalMessages?.();await QTi({runId:i.runId,fenceToken:i.fenceToken,chunks:t(),errorMessageId:i.errorMessageId,originalMessages:l},{streamBuffer:i.streamBuffer,hooks:i.hooks,title:i.title}),f.close()}catch(l){f.error(l)}}})}function Zdu(i){if(i==="claude-code")return"claude-code";if(i==="codex")return"codex";return"decopilot"}function lG4(i){let u=i.virtualMcp?.metadata?.githubRepo,t=u&&typeof u.owner==="string"&&typeof u.name==="string"?{owner:u.owner,name:u.name,connectedGithub:Boolean(u.connectionId)}:void 0;if(!t)return{cwd:null};if(i.cwd!==pY)return{cwd:null};return{cwd:pY,repo:t,branch:i.branch??null}}async function EG4(i,u,t,f){let{keyInfo:l,apiKey:E}=await i.storage.aiProviderKeys.resolve(t,u),c=qGi({providerId:l.providerId,apiKey:E,modelId:f});if(c.providerId==="openrouter"||c.providerId==="deco")return{...c,extraHeaders:{...c.extraHeaders,"HTTP-Referer":"https://studio.decocms.com","X-Title":"deco"}};return c}function W0t(i){return!("messages"in i)}function L0t(i,u){if(!i.taskId)throw Error("buildDurableDispatchInput: taskId is required");let t=i.messages.filter((f)=>f.role==="system").flatMap((f)=>f.parts).filter((f)=>f.type==="text"&&typeof f.text==="string").map((f)=>f.text).join(`
87091
87091
 
87092
87092
  `).trim();return{models:i.models,agent:i.agent,temperature:i.temperature,toolApprovalLevel:i.toolApprovalLevel,...i.toolAllowlist!==void 0?{toolAllowlist:i.toolAllowlist}:{},...i.maxAgentSteps!==void 0?{maxAgentSteps:i.maxAgentSteps}:{},...i.isSubagent!==void 0?{isSubagent:i.isSubagent}:{},...i.subtaskJobId!==void 0?{subtaskJobId:i.subtaskJobId}:{},...i.resumedFromBackground!==void 0?{resumedFromBackground:i.resumedFromBackground}:{},mode:i.mode,...i.windowSize!==void 0?{windowSize:i.windowSize}:{},...i.triggerId!==void 0?{triggerId:i.triggerId}:{},...i.runMetadata!==void 0?{runMetadata:i.runMetadata}:{},branch:u.branch??i.branch??null,sandboxProviderKind:u.sandboxProviderKind??i.sandboxProviderKind??null,harnessId:u.harnessId??i.harnessId??null,...u.target?{target:u.target}:{},organizationId:i.organizationId,userId:i.userId,taskId:i.taskId,messageId:u.messageId,...u.runFenceToken!==void 0?{runFenceToken:u.runFenceToken}:{},...i.isResume!==void 0?{isResume:i.isResume}:{},...t?{systemContext:t}:{}}}function cG4(i,u){let t=i.find((f)=>f.id===u);if(!t)throw new DO("empty_request",`Persisted request message missing for messageId=${u}`);if(t.role==="system")throw new DO("empty_request",`Persisted message ${u} has role=system; expected non-system request message`);return t}function S0t(i){let u=i.models;return{"decopilot.agent.id":i.agent.id,"decopilot.model.id":u.thinking.id,"decopilot.credential.id":u.credentialId,"decopilot.organization.id":i.organizationId,"decopilot.user.id":i.userId,"decopilot.thread.id":i.taskId??""}}async function Q0t(i,u,t){return pzi("decopilot.dispatchRunAndWait",async(f)=>{let{taskId:l,uiStream:E,registrySignal:c}=await H0t(i,u,t,f),w=t.streamBuffer,$=w?await w.createTailStream(l,i.abortSignal,{deliverPolicy:"new",closeOnDone:!0}):null;if(w&&$){let h=w.pump(E,l,c,i.organizationId);h.catch(()=>{});let v=$.getReader();try{while(!0){let{done:d}=await v.read();if(d)break}}finally{v.releaseLock()}await h}else{if(w)console.warn(JSON.stringify({msg:"decopilot-stream-diag",event:"producer-fallback-no-pump",taskId:l,hasTail:!!$,note:"createTailStream returned null \u2014 draining producer stream directly; projector persistence depends on streamBuffer publish health"}));let h=E.getReader();try{while(!0){let{done:v}=await h.read();if(v)break}}finally{h.releaseLock()}}return{taskId:l}},S0t(i))}async function wG4(i,u,t,f){let[l,E,c]=await Promise.all([i.storage.threads.list(f,{limit:9,agentId:t}).catch(()=>null),i.storage.interests.getForAgent(u,t,f).catch(()=>null),i.storage.virtualMcps.list(u).catch(()=>null)]),w={};if(l&&l.total>0)w.recentThreads={total:l.total,threads:l.threads.map(($)=>({id:$.id,title:$.title,updated_at:$.updated_at}))};if(E&&E.interests.length>0)w.interests=E.interests.map(($)=>({title:$.title,summary:$.summary}));if(c)w.agents=c.map(($)=>({id:$.id,name:$.title,description:$.description,status:$.status}));return w}async function $G4({virtualMcp:i,agentId:u,organizationId:t,ctx:f}){return H3i({virtualMcp:i,agentId:u,organizationId:t,ctx:f})}async function H0t(i,u,t,f){let{runRegistry:l,streamBuffer:E}=t;if(!W0t(i))i={...i,messages:i.messages.map(($)=>$.id?$:{...$,id:G2()})};let c=!1,w;try{let $=i.models,h=await u.storage.aiProviderKeys.findById($.credentialId,i.organizationId).catch(()=>null),v=i.harnessId??Zdu(h?.providerId);f.setAttribute("decopilot.harnessId",v);let d=i.target??{sandboxProviderKind:"agent-sandbox"};if(d.sandboxProviderKind==="agent-sandbox")u.sandboxPreference="agent-sandbox";else u.sandboxPreference="user-desktop";f.setAttribute("decopilot.dispatchTarget.sandboxProviderKind",d.sandboxProviderKind);let D=khi({harnessId:v,sandboxProviderKind:d.sandboxProviderKind}),_=k0t($);if(v==="decopilot"){let ji=await Hv(u.db,i.organizationId,u.organization?.role??u.auth.user?.role);if(!Qv(ji,_.thinking.credentialId,_.thinking.id))throw Error("Model not allowed for your role");_=cAi(ji,_)}let N=i.windowSize??y5;if(!i.taskId)throw Error("dispatchRunAndWait: taskId is required");if(D)await Gv(E,i.taskId,fo[0]);let Z=(ji)=>v==="decopilot"&&ji?EG4(u,i.organizationId,ji.credentialId,ji.id):Promise.resolve(void 0),[B,F,g,U,T,A,G,k,I]=await Promise.all([u.storage.virtualMcps.findById(i.agent.id,i.organizationId),Z(_.thinking),Z(_.fast),Z(_.smart),Z(_.image),Z(_.webSearch),Z(_.deepResearch),VGi(u.storage.threads,{organization_id:i.organizationId,thread_id:i.taskId,userId:i.userId,defaultWindowSize:N}),v==="decopilot"?wG4(u,i.organizationId,i.agent.id,i.userId):Promise.resolve(void 0)]);if(D)await Gv(E,i.taskId,fo[1]);let j=F?{thinking:F,...g?{fast:g}:{},...U?{smart:U}:{},...T?{image:T}:{},...A?{webSearch:A}:{},...G?{deepResearch:G}:{}}:void 0,C=F?HGi(F):null;if(w=k.thread.id,u.metadata.threadId=k.thread.id,f.setAttribute("decopilot.thread.id",k.thread.id),k.thread.created_by!==i.userId)throw Error("You are not allowed to write to this thread because you are not the owner");if(C?.asyncResearch){let ji=[["thinking",_.thinking.id]];if(_.fast)ji.push(["fast",_.fast.id]);if(_.smart)ji.push(["smart",_.smart.id]);if(_.image)ji.push(["image",_.image.id]);for(let[n,_i]of ji)if(C.asyncResearch.canHandle(_i))throw Error(`Model "${_i}" can only be used as a Deep Research model. It is not usable as the ${n} model \u2014 set it in the Deep Research slot instead.`)}let S=k.thread.message_storage_version===2?new WE({storage:u.storage.threads.messageParts(),orgId:i.organizationId,threadId:k.thread.id,runId:k.thread.id}):null;if(!B)throw new DO("agent_not_found","Agent not found");let r=await $G4({virtualMcp:B,agentId:i.agent.id,organizationId:i.organizationId,ctx:u});if(i.isResume)await l.execute({type:"RESUME",taskId:k.thread.id,orgId:i.organizationId,userId:i.userId,abortController:new AbortController,podId:Odu()});else await l.execute({type:"START",taskId:k.thread.id,orgId:i.organizationId,userId:i.userId,abortController:new AbortController,podId:Odu(),runConfig:{models:i.models,agent:i.agent,temperature:i.temperature,toolApprovalLevel:i.toolApprovalLevel,mode:i.mode,windowSize:i.windowSize,triggerId:i.triggerId},messageId:i.messageId});c=!0,await u.storage.threads.clearCancelRequested(k.thread.id);let Q;if(i.runFenceToken)Q=i.runFenceToken;else Q=jhi(),await u.storage.threads.setRunFence(k.thread.id,Q);let ui=l.getAbortSignal(k.thread.id);if(!ui)throw await l.execute({type:"FINISH",taskId:k.thread.id,threadStatus:"failed"}),Error("Run was cancelled immediately after starting");if(i.abortSignal){let ji=i.abortSignal;if(ji.aborted)await l.execute({type:"CANCEL",taskId:k.thread.id});else ji.addEventListener("abort",()=>{l.execute({type:"CANCEL",taskId:k.thread.id}).catch(()=>{})},{once:!0})}if(!i.isResume)E?.purge(k.thread.id);let hi=[],li,ii;if(W0t(i)){if(ii=await k.loadHistory(N),li=cG4(ii,i.messageId),i.systemContext)hi=[{id:`system-${i.messageId}`,role:"system",parts:[{type:"text",text:i.systemContext}]}]}else{hi=i.messages.filter((n)=>n.role==="system");let ji=i.messages.find((n)=>n.role!=="system");if(li=ji?(await YTi([ji],u,{threadId:k.thread.id})).find((n)=>n.role!=="system"):void 0,!i.isResume){if(!li)throw new DO("empty_request","No user message found in input \u2014 expected at least one non-system message");if(S)await S.emitUserMessage(li).catch((n)=>{console.error("[decopilot:stream] v2 user-message emit failed",n)})}}if(li)await HP0(E,k.thread.id,li);let a=[],Zi=U0t(v)&&d.sandboxProviderKind==="user-desktop",Ei=Zi?ii??await k.loadHistory(N):void 0,Ji=Zi?j0t(Ei??[],v):void 0,Vi=u.organization,ri=Date.now(),Ci=li?(await WTi([li],u))[0]:void 0;if(!Ci||!li)throw new DO("empty_request","No user message found in input \u2014 expected at least one non-system message");P0t(i.models,[Ci]);let Di=v==="decopilot"?await A0t({ctx:u,threadId:k.thread.id,userMessage:li,windowSize:N,isSubagent:i.isSubagent===!0,systemMessages:hi}):void 0,Ii=v==="decopilot"?{url:"",headers:{},expiresAt:0}:await Hvi(u,i.agent.id,Vi,v==="claude-code"?"claude-code-session":"codex-session",d.sandboxProviderKind),Bi=Ii.expiresAt>0?{kind:"http",url:Ii.url,headers:Ii.headers,expiresAt:Ii.expiresAt}:void 0,$i=v!=="decopilot"&&d.sandboxProviderKind==="user-desktop"&&Vi.slug?{kind:"http",baseUrl:`${FE()}/api/${encodeURIComponent(Vi.slug)}/object-storage`,headers:Ii.headers,expiresAt:Ii.expiresAt}:void 0,ci=lG4({virtualMcp:r,branch:i.branch,cwd:d.sandboxProviderKind==="user-desktop"?pY:null}),Yi=typeof r.metadata?.instructions==="string"?r.metadata.instructions:void 0,m={taskId:i.taskId,isSubagent:i.isSubagent,subtaskJobId:i.subtaskJobId,resumedFromBackground:i.resumedFromBackground,virtualMcp:r,branch:i.branch,messages:Di,modelSources:j,mcpSource:Bi,objectStorageSource:$i,userContext:I},fi={harnessId:v,threadId:k.thread.id,userMessage:Ci,harness:{sessionId:Ji},workspace:ci,models:_,mcp:Ii,mode:i.mode,temperature:i.temperature,toolApprovalLevel:i.toolApprovalLevel,toolAllowlist:i.toolAllowlist??null,maxAgentSteps:i.maxAgentSteps,user:{id:i.userId,email:u.auth.user?.email??""},organizationId:i.organizationId,organizationSlug:Vi.slug,agent:{id:i.agent.id,instructions:Yi},triggerId:i.triggerId,currentThreadTitle:k.thread.title,runFenceToken:Q};if(D)await Gv(E,i.taskId,fo[2]);let oi=async function*(){if(v!=="decopilot")throw Error(`dispatchRunAndWait runs cluster-hosted decopilot only; got "${v}" \u2014 CLI harnesses use the link transport or are rejected at the gate`);let ji={...fi,signal:ui};if(Vvu(ji,m),D)await Gv(E,k.thread.id,fo[3]);yield*new Xvu({ctx:u,harnessId:v}).dispatch(ji)},ki=tG4(()=>fG4({runId:k.thread.id,fenceToken:Q,streamBuffer:E??{publishRawChunk:async()=>!1,publishDone:async()=>!1},chunks:I0t(oi()),errorMessageId:HN(k.thread.id,Q),loadOriginalMessages:S?async()=>(await u.storage.threads.messageParts().loadWindow(k.thread.id,{limit:1})).messages.map(cvi):void 0,title:{currentThreadTitle:k.thread.title,threadId:k.thread.id,persistTitle:async(ji,n)=>{await u.storage.threads.update(ji,{title:n})}},hooks:{onStep:()=>{let ji=l.dispatch({type:"STEP_DONE",taskId:k.thread.id});a.push(l.react(ji).catch((n)=>{console.error("[decopilot:stream] onStepFinish reactor failed",n)}))},onFinish:async(ji,n)=>{let _i=a.length,Qi=performance.now();if(await Promise.allSettled(a),K0t.record(performance.now()-Qi,{phase:"settle"}),ui.aborted)return;await P0(0);let uu=Y0t?pZ():null,bi=performance.now(),Gu=Evi(n,ji?.parts);await l.execute({type:"FINISH",taskId:k.thread.id,threadStatus:Gu});let t0=performance.now()-bi;if(K0t.record(t0,{phase:"save"}),Y0t&&uu){let If=pZ()??uu,N4=-1;try{N4=JSON.stringify(ji)?.length??-1}catch{}console.warn(JSON.stringify({msg:"decopilot-finish-trace",threadId:k.thread.id,pendingOps:_i,saveMs:Math.round(t0),parts:ji?.parts?.length??0,messageBytes:N4,rssDelta:If.rss-uu.rss,heapUsedDelta:If.heapUsed-uu.heapUsed,externalDelta:If.external-uu.external}))}},onError:(ji)=>{if(ui.aborted){mu.capture({distinctId:i.userId,event:"chat_message_aborted",groups:{organization:i.organizationId},properties:{organization_id:i.organizationId,thread_id:k.thread.id,agent_id:i.agent.id,model_id:_.thinking.id,mode:i.mode,duration_ms:Date.now()-ri,is_resume:i.isResume??!1}});return}console.error("[decopilot] stream error:",P$(ji)),l.execute({type:"FINISH",taskId:k.thread.id,threadStatus:"failed"}).catch((n)=>{console.error("[decopilot:stream] onError reactor failed",n)})}}}));return{taskId:k.thread.id,uiStream:ki,registrySignal:ui,runFenceToken:Q,wireHarnessInput:fi}}catch($){if(c&&w)l.execute({type:"FINISH",taskId:w,threadStatus:"failed"}).catch((h)=>{console.error("[decopilot:stream] catch-block reactor failed",h)});throw $}}async function hG4(i,u,t){if(i.target?.sandboxProviderKind!=="user-desktop")return null;let f=await u.storage.virtualMcps.findById(i.agent.id,i.organizationId).catch(()=>null);if(!f)return null;let l=f.metadata??{},E=l.githubRepo??null,c;if(E)try{let Z=E.connectionId,{cloneUrl:B,gitUserName:F,gitUserEmail:g}=Z?await(async()=>{return await _n({ctx:u,connectionId:Z,organizationId:i.organizationId,forceRefresh:!0,onLegacyMintError:(U)=>{console.warn("[prepareLinkWorkDispatch] repo-scoped legacy token mint failed",{connectionId:Z,error:U instanceof Error?U.message:String(U)})}}),qN(Z,E.owner,E.name,u.db,u.vault)})():nvi(E.owner,E.name);c={cloneUrl:B,branch:i.branch??void 0,userName:F,userEmail:g}}catch(Z){console.warn(`[prepareLinkWorkDispatch] failed to resolve clone info for agent=${i.agent.id}:`,Z instanceof Error?Z.message:String(Z))}let{runtime:w,packageManager:$,packageManagerPath:h}=NTi(l),v;if(w&&$&&(w==="node"||w==="bun"||w==="deno")&&($==="npm"||$==="pnpm"||$==="yarn"||$==="bun"||$==="deno"))v={runtime:w,packageManager:$,...h?{packageManagerPath:h}:{}};let d,D;try{if(u.objectStorage){let Z=await ZTi(u.objectStorage,{isProduction:vu().nodeEnv==="production"});d=Z.hosts,D=Z.allowSameHostDev}}catch(Z){console.warn(`[prepareLinkWorkDispatch] failed to derive offload allowlist for agent=${i.agent.id}:`,Z instanceof Error?Z.message:String(Z))}let _=u.organization?.slug?await e5i(u,{orgSlug:u.organization.slug,orgId:i.organizationId,baseUrl:FE()}):void 0,N=gh({userName:u.auth.user?.name,userEmail:u.auth.user?.email});return{handle:t,...c?{repo:c}:{},...v?{workload:v}:{},...N?{operator:N}:{},...d!==void 0?{offloadAllowedHosts:d}:{},...D!==void 0?{offloadAllowSameHostDev:D}:{},..._?{orgFsConfigJson:_}:{}}}async function z0t(i,u,t){return pzi("decopilot.prepareLinkWorkDispatch",async(f)=>{let{taskId:l,runFenceToken:E,wireHarnessInput:c}=await H0t(i,u,t,f),w=async(N)=>{throw await t.runRegistry.execute({type:"FINISH",taskId:l,threadStatus:"failed"}),Error(N)},$=c,h=null,v=Buffer.byteLength(JSON.stringify(c),"utf8");if(qeu(v))await w("prepareLinkWorkDispatch: harnessInput exceeds the link payload limit and v3 userMessage offload is not implemented");let d=null;if(i.target?.sandboxProviderKind==="user-desktop")try{let N=i.branch??"ephemeral",Z=vG4({agentId:i.agent.id,userId:await f7(u,N,i.userId),organizationId:i.organizationId,branch:N});d=await hG4(i,u,Z)}catch(N){console.warn(`[prepareLinkWorkDispatch] failed to resolve sandbox config agent=${i.agent.id}:`,N instanceof Error?N.message:String(N))}let D=u.organization?.slug??null;if(!D)D=(await u.db.selectFrom("organization").select("slug").where("id","=",i.organizationId).executeTakeFirst())?.slug??null;let _=D;if(!_)return await w(`prepareLinkWorkDispatch: could not resolve org slug for organization ${i.organizationId}`);return{taskId:l,runFenceToken:E,harnessInput:$,messagesRef:null,sandboxConfig:d,orgSlug:_}},S0t(i))}function vG4(i){let u=Yg({orgId:i.organizationId,virtualMcpId:i.agentId,branch:i.branch});return PGi({userId:i.userId,projectRef:u},i.branch)}var K0t,Y0t;var Bdu=O(()=>{Dcu();z4();Bit();VQ();Jvu();M5();rM();xo();Jn();wO();YEu();R0();g0t();rR();Mvu();a9();y0t();QN();v1u();Qn();G0t();az();lcu();x0t();Vn();X0t();Ml();_lu();Rz();J1();J0t();Z4();K0t=yt.createHistogram("decopilot.finish.duration",{description:"Wall time of onFinish flush segments, tagged by phase",unit:"ms"}),Y0t=process.env.DECOPILOT_FINISH_TRACE==="1"});function Fdu(i,u=1e4){if(!i.body)return i;let t=_G4(i.body,u);return new Response(t,{status:i.status,statusText:i.statusText,headers:i.headers})}function _G4(i,u=1e4,t=DG4){let f=null,l=null,E=!1,c=!1,w=()=>{if(l!==null)t.clearInterval(l),l=null};return new ReadableStream({async start($){f=i.getReader();let h=()=>{if(E||c)return;try{$.enqueue(dG4)}catch{E=!0,w()}};l=t.setInterval(h,u);try{while(!0){let{done:v,value:d}=await f.read();if(v){E=!0,w(),$.close();return}let D=d.byteLength;if(D>0)c=!(D>=2&&d[D-2]===10&&d[D-1]===10);$.enqueue(d)}}catch(v){E=!0,w();try{$.error(v)}catch{}}finally{E=!0,w();try{f.releaseLock()}catch{}}},cancel($){E=!0,w(),(f??i).cancel($).catch(()=>{})}})}var dG4,DG4;var n0t=O(()=>{dG4=new TextEncoder().encode(`: keepalive
87093
87093