decocms 3.21.1 → 3.21.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (230) hide show
  1. package/dist/client/assets/{AlertCircle-Di-V3umI.js → AlertCircle-GyiOEtAj.js} +1 -1
  2. package/dist/client/assets/{ArrowUpRight-C-T2gJLi.js → ArrowUpRight-DlUPHWCe.js} +1 -1
  3. package/dist/client/assets/{Check-BNom5dOo.js → Check-COv5M0lh.js} +1 -1
  4. package/dist/client/assets/{CheckCircle-DrDyiPu_.js → CheckCircle-ChsHFiFQ.js} +1 -1
  5. package/dist/client/assets/{ChevronDown-B21_IsL3.js → ChevronDown-BdEaOOXp.js} +1 -1
  6. package/dist/client/assets/{ChevronLeft-Ctye75GL.js → ChevronLeft-B8kAn6JD.js} +1 -1
  7. package/dist/client/assets/{ChevronRight-GBMV5yJO.js → ChevronRight-o4nZK4mj.js} +1 -1
  8. package/dist/client/assets/{ChevronUp-CGGIgndb.js → ChevronUp-y4zusQsp.js} +1 -1
  9. package/dist/client/assets/{Container-BowdgJ62.js → Container-CqLkbSjr.js} +1 -1
  10. package/dist/client/assets/{DotsVertical-C1UpLbMK.js → DotsVertical-W4F6Fa4e.js} +1 -1
  11. package/dist/client/assets/{Eye-CCL1jvke.js → Eye-f801Ko_Z.js} +1 -1
  12. package/dist/client/assets/{FilterLines-CLU1cvnm.js → FilterLines-CdYz7NJH.js} +1 -1
  13. package/dist/client/assets/{Globe01-Ca2CDUqL.js → Globe01-BfG_Acce.js} +1 -1
  14. package/dist/client/assets/{HardDrive-BRJbxTgf.js → HardDrive-D9UXv7dX.js} +1 -1
  15. package/dist/client/assets/{Key01-B0KHYY9A.js → Key01-B5dV9ECL.js} +1 -1
  16. package/dist/client/assets/{LayoutLeft-DQjoJnlv.js → LayoutLeft-B60p8Um4.js} +1 -1
  17. package/dist/client/assets/{LinkExternal01-BmWxPEFc.js → LinkExternal01-6cFTncDa.js} +1 -1
  18. package/dist/client/assets/{Monitor01-CCpw9YsU.js → Monitor01-Cc4WDpkR.js} +1 -1
  19. package/dist/client/assets/{Palette-DljqRkOL.js → Palette--vnxJff4.js} +1 -1
  20. package/dist/client/assets/{Play-BWZ7aOd4.js → Play-C7HtzLaD.js} +1 -1
  21. package/dist/client/assets/{Plus-BW-TIinL.js → Plus-LwySGDxB.js} +1 -1
  22. package/dist/client/assets/{RefreshCcw01-DoQ2Q5nQ.js → RefreshCcw01-CqQ0_ss_.js} +1 -1
  23. package/dist/client/assets/{SearchMd-BrE4Lp2d.js → SearchMd-MshnFe0l.js} +1 -1
  24. package/dist/client/assets/{Settings02-CnuG-oH5.js → Settings02-StPTnFMx.js} +1 -1
  25. package/dist/client/assets/{Shield01-BAt9OJkk.js → Shield01-T0cQG3gR.js} +1 -1
  26. package/dist/client/assets/{Star01-f8rMlJ5U.js → Star01-DBs_rPC7.js} +1 -1
  27. package/dist/client/assets/{Stars01-GUKoSsGN.js → Stars01-DHlDpyBS.js} +1 -1
  28. package/dist/client/assets/{Stars02-DApbfWB6.js → Stars02-B2A2nE0X.js} +1 -1
  29. package/dist/client/assets/{Sun-BupjfBtR.js → Sun-Deye0C8A.js} +1 -1
  30. package/dist/client/assets/{SwitchHorizontal01-CBvA0yYX.js → SwitchHorizontal01-CXh2-ORd.js} +1 -1
  31. package/dist/client/assets/{Tool01-BGucVzDk.js → Tool01-nSGgZsVX.js} +1 -1
  32. package/dist/client/assets/{Trash01-DOwZGPnm.js → Trash01-DZfkybKU.js} +1 -1
  33. package/dist/client/assets/{Upload01-ypYRbiXm.js → Upload01-rVUdt3iJ.js} +1 -1
  34. package/dist/client/assets/{User01-iRKM2KTq.js → User01-NlAzTddi.js} +1 -1
  35. package/dist/client/assets/{Users01-CQjxMYXj.js → Users01-DaydqXQC.js} +1 -1
  36. package/dist/client/assets/{Users03-Gpc8Fhl9.js → Users03-BRSJ5vR7.js} +1 -1
  37. package/dist/client/assets/{X-D2-T6h59.js → X-BN3arG6T.js} +1 -1
  38. package/dist/client/assets/{XCircle-BD7UyEOF.js → XCircle-xmKSYZKr.js} +1 -1
  39. package/dist/client/assets/{XClose-qC7X4hjJ.js → XClose-1qd9ainB.js} +1 -1
  40. package/dist/client/assets/{Zap-BxPmO3d7.js → Zap-CYUIBMS-.js} +1 -1
  41. package/dist/client/assets/{ZapSquare-DMyX_8RQ.js → ZapSquare-DsZrIKGl.js} +1 -1
  42. package/dist/client/assets/{ZoomOut-CrNlxKNu.js → ZoomOut-CVKSaoni.js} +1 -1
  43. package/dist/client/assets/{access-gate-BxaFZysE.js → access-gate-CweS51cI.js} +1 -1
  44. package/dist/client/assets/{accordion-DBdAn4Yd.js → accordion-Bl7Yi6C4.js} +1 -1
  45. package/dist/client/assets/{add-section-modal-Cp9ANpKI.js → add-section-modal-uFfZJI5Z.js} +1 -1
  46. package/dist/client/assets/{agent-capabilities-DZnx6uxN.js → agent-capabilities-D2XTyDA4.js} +1 -1
  47. package/dist/client/assets/{agent-icon-DwlI421o.js → agent-icon-K7-2Vanq.js} +1 -1
  48. package/dist/client/assets/{agent-icons-BpY_PoEJ.js → agent-icons-CeKYocvB.js} +1 -1
  49. package/dist/client/assets/{agents-list-7MDTRjEP.js → agents-list-SW53IbcR.js} +1 -1
  50. package/dist/client/assets/{ai-providers-DCVu5rlW.js → ai-providers-CRMVj1sW.js} +1 -1
  51. package/dist/client/assets/{alert-9Uyq7_Yx.js → alert-CyRuR44t.js} +1 -1
  52. package/dist/client/assets/{alert-dialog-Di87pvaw.js → alert-dialog-CJQaL6p3.js} +1 -1
  53. package/dist/client/assets/app-editor-DrKlBV5m.js +1 -0
  54. package/dist/client/assets/{auth-catchall-6sVJF5kF.js → auth-catchall-C0LPYH9l.js} +1 -1
  55. package/dist/client/assets/{auth-split-layout-BB9gPhYr.js → auth-split-layout-B0BicaKX.js} +1 -1
  56. package/dist/client/assets/{automation-list-row-CeYc1MAT.js → automation-list-row-DO-WP7Ai.js} +1 -1
  57. package/dist/client/assets/{automation-runs-bcYQjbYn.js → automation-runs-eraj829k.js} +1 -1
  58. package/dist/client/assets/{automations-OmisaDZA.js → automations-BVY79yPk.js} +1 -1
  59. package/dist/client/assets/{avatar-DpEGkmVF.js → avatar-BdxyYnNK.js} +1 -1
  60. package/dist/client/assets/{badge-CRBv_-v0.js → badge-CS2sZUxN.js} +1 -1
  61. package/dist/client/assets/{brand-context-BHMKdNZS.js → brand-context-CjWlWxwt.js} +1 -1
  62. package/dist/client/assets/{buckets-DdExZ8vz.js → buckets-BGHRc7Um.js} +1 -1
  63. package/dist/client/assets/{calendar-04oidYi0.js → calendar-DczL_N_A.js} +1 -1
  64. package/dist/client/assets/{capability-load-error-DQKXVSLb.js → capability-load-error-DNJuBq-F.js} +1 -1
  65. package/dist/client/assets/{card-DjCUI9mK.js → card-Br94nOKg.js} +1 -1
  66. package/dist/client/assets/{chat-context-DCjkCe-V.js → chat-context-DA35HLXS.js} +1 -1
  67. package/dist/client/assets/{checkbox-C0J6d59Z.js → checkbox-CqOCOG6Q.js} +1 -1
  68. package/dist/client/assets/{cli-auth-success-GR8P7inl.js → cli-auth-success-BVqxZix5.js} +1 -1
  69. package/dist/client/assets/{collection-detail-BLTHo14O.js → collection-detail-CynKMc1R.js} +1 -1
  70. package/dist/client/assets/{collection-display-button-vdVt1x-Y.js → collection-display-button-Cv9SNAbw.js} +1 -1
  71. package/dist/client/assets/{collection-search-C9e8ytlm.js → collection-search-ChKSSxmH.js} +1 -1
  72. package/dist/client/assets/{collection-table-wrapper-Ci3rF5jl.js → collection-table-wrapper-DGk9I-x6.js} +1 -1
  73. package/dist/client/assets/{collection-tabs-DcsnhXJW.js → collection-tabs-C5s6I9ON.js} +1 -1
  74. package/dist/client/assets/{collections-CFguVIuY.js → collections-Dk6dLEYA.js} +1 -1
  75. package/dist/client/assets/{command-CHlhuzJ_.js → command-BS0mokMv.js} +1 -1
  76. package/dist/client/assets/{connect-desktop-dialog-BSK9XSHH.js → connect-desktop-dialog-DpF_sI6h.js} +1 -1
  77. package/dist/client/assets/{connection-card-DO9d3YRC.js → connection-card-CFu6MAht.js} +1 -1
  78. package/dist/client/assets/{connection-detail-SHOkB3xQ.js → connection-detail-Bavv4Ydp.js} +1 -1
  79. package/dist/client/assets/{connection-form-helpers-C3edNmoP.js → connection-form-helpers-C3EFMKqC.js} +1 -1
  80. package/dist/client/assets/{connections-qKkqyM04.js → connections-BTIddADu.js} +1 -1
  81. package/dist/client/assets/{decopilot-sse-pool-BN3Fz4g5.js → decopilot-sse-pool-CZFgZ3nE.js} +1 -1
  82. package/dist/client/assets/{dialog-fdhgLhBf.js → dialog-CL1BseA9.js} +1 -1
  83. package/dist/client/assets/{domain-settings-DGN8lQXh.js → domain-settings-BnveJoGD.js} +1 -1
  84. package/dist/client/assets/{drawer-nppIIpnE.js → drawer-C9J2FQkF.js} +1 -1
  85. package/dist/client/assets/{dropdown-menu-X3z-hQ2M.js → dropdown-menu-DVje-EoW.js} +1 -1
  86. package/dist/client/assets/{dynamic-plugin-layout-DIHhoFb_.js → dynamic-plugin-layout-WHfaSv1Y.js} +1 -1
  87. package/dist/client/assets/{empty-state-Bq6HhNrq.js → empty-state-Bv1Z9MXv.js} +1 -1
  88. package/dist/client/assets/{empty-state-CQXcLTIH.js → empty-state-DpAFEVjw.js} +1 -1
  89. package/dist/client/assets/{extract-connection-data-D6z7oijb.js → extract-connection-data-CrV9u96Z.js} +1 -1
  90. package/dist/client/assets/{features-G1sVG-es.js → features-BEAGHXsv.js} +1 -1
  91. package/dist/client/assets/{file-explorer-DXIRGCbx.js → file-explorer-BwsVi5Sn.js} +1 -1
  92. package/dist/client/assets/{file-type-icon-B0iXSarG.js → file-type-icon-DVYPih9c.js} +1 -1
  93. package/dist/client/assets/{files-BBuiWUw0.js → files-10ME_3JG.js} +1 -1
  94. package/dist/client/assets/{form-l2US6lAY.js → form-4UXcNbUg.js} +1 -1
  95. package/dist/client/assets/{general-Che5cJxu.js → general-CWwyMwhB.js} +1 -1
  96. package/dist/client/assets/{generate-id-RYRfDJEO.js → generate-id-CVdT0fIQ.js} +1 -1
  97. package/dist/client/assets/{github-repo-picker-Bt39LytD.js → github-repo-picker-DD8wItvg.js} +1 -1
  98. package/dist/client/assets/{header-tab-button-D5FVHg7C.js → header-tab-button-DgECRSSy.js} +1 -1
  99. package/dist/client/assets/{hover-card-CrD42WSD.js → hover-card-BA4UtY_2.js} +1 -1
  100. package/dist/client/assets/{image-field-DmZve0TW.js → image-field-U7AFL_og.js} +1 -1
  101. package/dist/client/assets/{index-BmZqEyVY.js → index-4cfzvyaB.js} +1 -1
  102. package/dist/client/assets/{index-DwykyBcY.js → index-BBFvsGUO.js} +1 -1
  103. package/dist/client/assets/{index-Cm05rD4S.js → index-BK7hwLt0.js} +1 -1
  104. package/dist/client/assets/{index-DeDtw-b1.js → index-BKKTxT9B.js} +1 -1
  105. package/dist/client/assets/{index-BOMHJPUn.js → index-BQ89iNpK.js} +1 -1
  106. package/dist/client/assets/{index-D-CqRT4O.js → index-BQoodOft.js} +1 -1
  107. package/dist/client/assets/{index-BUe0rEg1.js → index-CAfQQdyv.js} +1 -1
  108. package/dist/client/assets/{index-BYXBOiLY.js → index-COXkGBKF.js} +1 -1
  109. package/dist/client/assets/{index-Bu_CNCUZ.js → index-CuZbHxuM.js} +1 -1
  110. package/dist/client/assets/{index-D6idVW2n.js → index-DC5ykVbq.js} +3 -3
  111. package/dist/client/assets/{index-DWvdSxPM.js → index-DD8pNQTz.js} +1 -1
  112. package/dist/client/assets/{index-Doc3AWor.js → index-DYMkejmQ.js} +1 -1
  113. package/dist/client/assets/{index-CwDq8vs6.js → index-DinTmsRi.js} +4 -4
  114. package/dist/client/assets/{index-Cw0f814h.js → index-DsK69xEH.js} +1 -1
  115. package/dist/client/assets/{index-C5tgiUEv.js → index-_z9AfqD0.js} +1 -1
  116. package/dist/client/assets/{index-redirect-BqoA6RVo.js → index-redirect-BYXba1LQ.js} +1 -1
  117. package/dist/client/assets/{infiniteQueryObserver-VyVFnsqY.js → infiniteQueryObserver-BFBhoWbn.js} +1 -1
  118. package/dist/client/assets/{input-ChQ639sE.js → input-CmdQXS7m.js} +1 -1
  119. package/dist/client/assets/{integration-icon-b2Rlb-Sb.js → integration-icon-DubrPseB.js} +1 -1
  120. package/dist/client/assets/{label-rvaNBf1n.js → label-BeKFq4Z_.js} +1 -1
  121. package/dist/client/assets/{layout-DmZgycrJ.js → layout-8ZlqaeBv.js} +1 -1
  122. package/dist/client/assets/{login-DFkji89I.js → login-Xkc831VM.js} +1 -1
  123. package/dist/client/assets/{members-Bm9cIL-1.js → members-8soouHex.js} +1 -1
  124. package/dist/client/assets/{monaco-editor-B2W8v7r6.js → monaco-editor-B-nbM8Ue.js} +1 -1
  125. package/dist/client/assets/{monitoring-stats-row-DdYAhJ5V.js → monitoring-stats-row-pLl4ltj8.js} +1 -1
  126. package/dist/client/assets/{oauth-callback-ai-provider-CKDYX_RF.js → oauth-callback-ai-provider-DgTV983m.js} +1 -1
  127. package/dist/client/assets/{oauth-callback-C9xoFbd7.js → oauth-callback-m-HDC-da.js} +1 -1
  128. package/dist/client/assets/{onboarding-CzS2cVPB.js → onboarding-CJD62kRn.js} +1 -1
  129. package/dist/client/assets/{org-install-BaqJ9XwL.js → org-install-rd8eLbo7.js} +1 -1
  130. package/dist/client/assets/{org-layout-S59SENMd.js → org-layout-DeIWaN_p.js} +1 -1
  131. package/dist/client/assets/{org-plugin-layout-CqsI9Bed.js → org-plugin-layout-LtGGGoMB.js} +1 -1
  132. package/dist/client/assets/{page-seo-form-EuEyknEc.js → page-seo-form-BkwbUlnR.js} +1 -1
  133. package/dist/client/assets/page-seo-sheet-j1sLOOHG.js +1 -0
  134. package/dist/client/assets/{pair-Bt2SA9Qp.js → pair-DE0D0Wie.js} +1 -1
  135. package/dist/client/assets/{plugin-empty-state-DSQFLxwe.js → plugin-empty-state-CyD0C1Bf.js} +1 -1
  136. package/dist/client/assets/{plugin-header-DMRgUsQl.js → plugin-header-W1I2_V_j.js} +1 -1
  137. package/dist/client/assets/{plugin-layout-TXD29kdN.js → plugin-layout-B4yAz-3-.js} +1 -1
  138. package/dist/client/assets/{popover-Rt3fpbO3.js → popover-Dp3QS8N6.js} +1 -1
  139. package/dist/client/assets/{post-editor-Divs3dwJ.js → post-editor-DR83fZSH.js} +1 -1
  140. package/dist/client/assets/{primitives-XpLpFjB8.js → primitives-iMjdQad6.js} +1 -1
  141. package/dist/client/assets/{profile-CHjI4ygW.js → profile-eau3k4Po.js} +1 -1
  142. package/dist/client/assets/{project-app-view-DHaXTs5T.js → project-app-view-CRvOiu2b.js} +1 -1
  143. package/dist/client/assets/record-editor-B-ZWb752.js +1 -0
  144. package/dist/client/assets/registry-B8CD131L.js +2 -0
  145. package/dist/client/assets/{registry-layout-C7DwnK5e.js → registry-layout-BmSXJxoZ.js} +1 -1
  146. package/dist/client/assets/{require-capability-B4l3wBea.js → require-capability-bCqnmJfy.js} +1 -1
  147. package/dist/client/assets/{required-auth-layout-CfzfhqYN.js → required-auth-layout-D7jgv78c.js} +1 -1
  148. package/dist/client/assets/{reset-password-BZ5l6irC.js → reset-password-D28fxRQV.js} +1 -1
  149. package/dist/client/assets/{resizable-CA7mW65R.js → resizable-Cd48I16F.js} +1 -1
  150. package/dist/client/assets/{roles-6C_YTupk.js → roles-gGKNgLrN.js} +1 -1
  151. package/dist/client/assets/save-referenced-block-BX18LfXg.js +1 -0
  152. package/dist/client/assets/{save-status-KIo_EK3u.js → save-status-B5l1r2yt.js} +1 -1
  153. package/dist/client/assets/{schema-form-0q7FWymW.js → schema-form-DoBelrVG.js} +1 -1
  154. package/dist/client/assets/{scroll-area-S5xU4-3T.js → scroll-area-P07qVNiz.js} +1 -1
  155. package/dist/client/assets/{search-input-bjsIuW3e.js → search-input-BC00SFbU.js} +1 -1
  156. package/dist/client/assets/{secrets-oJC26E57.js → secrets-C14kJLTf.js} +1 -1
  157. package/dist/client/assets/{sections-editor-BJkalQrn.js → sections-editor-BXkiyOGf.js} +1 -1
  158. package/dist/client/assets/{select-model-BfrrA0rU.js → select-model-D5qi4yVr.js} +1 -1
  159. package/dist/client/assets/{select-D-XBS65u.js → select-n15H_mpn.js} +1 -1
  160. package/dist/client/assets/{seo-editor-DQqMio2v.js → seo-editor-D-F0mviD.js} +1 -1
  161. package/dist/client/assets/{settings-layout-mMyfgzSB.js → settings-layout-pqyPhxP-.js} +1 -1
  162. package/dist/client/assets/{settings-section-DOJ8w47S.js → settings-section-Tanq8jyR.js} +1 -1
  163. package/dist/client/assets/{sheet-BdF_K2dB.js → sheet-D4rfwRUO.js} +1 -1
  164. package/dist/client/assets/{shell-controls-BDGVwZm0.js → shell-controls-mDSWSVmf.js} +1 -1
  165. package/dist/client/assets/{shell-layout-652GQgyj.js → shell-layout-BwqpmibN.js} +1 -1
  166. package/dist/client/assets/{shell-route-loading-DWdfT9on.js → shell-route-loading-BcS4ogVM.js} +1 -1
  167. package/dist/client/assets/{sidebar-faIWOpU7.js → sidebar-BROkYxtG.js} +1 -1
  168. package/dist/client/assets/{skeleton-CrWdoD9s.js → skeleton-DWOWMile.js} +1 -1
  169. package/dist/client/assets/{sortable.esm-DaLbqREa.js → sortable.esm-QhdKIQMp.js} +1 -1
  170. package/dist/client/assets/{spinner-Ba6MQmcV.js → spinner-CtVtBijD.js} +1 -1
  171. package/dist/client/assets/{sso-BtgDVu5D.js → sso-iKeLtq8V.js} +1 -1
  172. package/dist/client/assets/{store-De54zr2A.js → store-D_M-OYO8.js} +1 -1
  173. package/dist/client/assets/store-registry-DrWHKBnR.js +2 -0
  174. package/dist/client/assets/{switch-Djy20jDK.js → switch-QoxQ4Dp8.js} +1 -1
  175. package/dist/client/assets/{tab-id-DKNFO22m.js → tab-id-CNkO3hVN.js} +1 -1
  176. package/dist/client/assets/{table-Cy6WVAuu.js → table-BsrEIQdy.js} +1 -1
  177. package/dist/client/assets/{tabs-DI8qnoXf.js → tabs-kJyWL6V1.js} +1 -1
  178. package/dist/client/assets/{task-status-qWqGiUC6.js → task-status-j0388nBE.js} +1 -1
  179. package/dist/client/assets/{textarea-FwxJbyLj.js → textarea-IFOxZRFP.js} +1 -1
  180. package/dist/client/assets/{toggle-group-DLxiboB7.js → toggle-group--w1kOZWe.js} +1 -1
  181. package/dist/client/assets/{toolbar-CMgp-9VS.js → toolbar-BBxreRsk.js} +1 -1
  182. package/dist/client/assets/{tools-list-C_1FwcZ2.js → tools-list-DJXjW2l9.js} +1 -1
  183. package/dist/client/assets/{tooltip-BwAS3LmD.js → tooltip-D7cmoHaE.js} +1 -1
  184. package/dist/client/assets/{types-DpLGHfBV.js → types-BmGja53h.js} +1 -1
  185. package/dist/client/assets/{use-ai-providers-D_70D2KF.js → use-ai-providers--CmHEwAc.js} +1 -1
  186. package/dist/client/assets/{use-automations-Bm_GDiS0.js → use-automations-BuOkYpgz.js} +1 -1
  187. package/dist/client/assets/{use-capability-BTcvzwTt.js → use-capability-CxysHd_P.js} +1 -1
  188. package/dist/client/assets/{use-collections-B1ftgmsC.js → use-collections-BOfrARHt.js} +1 -1
  189. package/dist/client/assets/{use-connection-f6XTkb53.js → use-connection-n0123jPK.js} +1 -1
  190. package/dist/client/assets/{use-copy-N9ijygLT.js → use-copy-B0vwFN4z.js} +1 -1
  191. package/dist/client/assets/{use-create-virtual-mcp-DmpPKskK.js → use-create-virtual-mcp-D-CNGeek.js} +1 -1
  192. package/dist/client/assets/{use-debounced-autosave-ChNaRP5S.js → use-debounced-autosave-D2Tk122B.js} +1 -1
  193. package/dist/client/assets/{use-delete-connection-BwrylBgL.js → use-delete-connection-C4A0wxBY.js} +1 -1
  194. package/dist/client/assets/{use-file-configs-Iu1ZGjUX.js → use-file-configs-CyyHbhaI.js} +1 -1
  195. package/dist/client/assets/{use-infinite-scroll-D4clS4iX.js → use-infinite-scroll-CdSYgiPG.js} +1 -1
  196. package/dist/client/assets/{use-list-state-BDMoY8GZ.js → use-list-state-eagOZcTM.js} +1 -1
  197. package/dist/client/assets/{use-mcp-client-Dutz6IKN.js → use-mcp-client-DyuH8eE6.js} +1 -1
  198. package/dist/client/assets/{use-mcp-prompts-DkrNbGZU.js → use-mcp-prompts-Bwn_S6iL.js} +1 -1
  199. package/dist/client/assets/{use-mcp-tools-Dk5wX_Q8.js → use-mcp-tools-DC6ktQK8.js} +1 -1
  200. package/dist/client/assets/{use-members-73l6yAni.js → use-members-BzP8QLPf.js} +1 -1
  201. package/dist/client/assets/{use-navigate-to-agent-QL4LtHJV.js → use-navigate-to-agent-B09CyGqp.js} +1 -1
  202. package/dist/client/assets/{use-org-auth-client-CAvzSle5.js → use-org-auth-client-DHC5iDX4.js} +1 -1
  203. package/dist/client/assets/{use-org-sso-C7T4CeXS.js → use-org-sso-qSbMZg_F.js} +1 -1
  204. package/dist/client/assets/{use-organization-roles-CzFjc3MW.js → use-organization-roles-SRzyOUnT.js} +1 -1
  205. package/dist/client/assets/{use-organization-settings-t-yCPHX9.js → use-organization-settings-B4dvDS7R.js} +1 -1
  206. package/dist/client/assets/{use-registry-connections-CZ4ax3LX.js → use-registry-connections-Bds9Ypgx.js} +1 -1
  207. package/dist/client/assets/{use-secrets-Dor672jC.js → use-secrets-CnpydoP_.js} +1 -1
  208. package/dist/client/assets/{use-status-sounds-J2lGW499.js → use-status-sounds-CK6N7rMv.js} +1 -1
  209. package/dist/client/assets/{use-view-mode-EyZ_szat.js → use-view-mode-RCfU_Ov_.js} +1 -1
  210. package/dist/client/assets/{use-virtual-mcp-BW5609Gn.js → use-virtual-mcp-Dey3T-Qn.js} +1 -1
  211. package/dist/client/assets/useInfiniteQuery-DMrx4YUI.js +1 -0
  212. package/dist/client/assets/{useRouterState-vIbEdlN4.js → useRouterState-Suijaaey.js} +1 -1
  213. package/dist/client/assets/useSuspenseInfiniteQuery-BEThz4gg.js +1 -0
  214. package/dist/client/assets/{user-CkUI6Rtf.js → user-CZuNKuKE.js} +1 -1
  215. package/dist/client/assets/{view-mode-toggle-B0zSaOcF.js → view-mode-toggle-DB4LJ27d.js} +1 -1
  216. package/dist/client/assets/{workflow-CRNBsay_.js → workflow-DdHZO7TR.js} +1 -1
  217. package/dist/client/assets/workflow-detail-DelfG9w7.js +1 -0
  218. package/dist/client/index.html +1 -1
  219. package/dist/server/cli.js +15 -8
  220. package/dist/server/server.js +4 -4
  221. package/package.json +1 -1
  222. package/dist/client/assets/app-editor-BTJdqNFO.js +0 -1
  223. package/dist/client/assets/page-seo-sheet-IswGsmwS.js +0 -1
  224. package/dist/client/assets/record-editor-BVLo6guS.js +0 -1
  225. package/dist/client/assets/registry-BYK9j9rQ.js +0 -2
  226. package/dist/client/assets/save-referenced-block-DgXF7K9R.js +0 -1
  227. package/dist/client/assets/store-registry-BBl5JK8R.js +0 -2
  228. package/dist/client/assets/useInfiniteQuery-C4mxsTCl.js +0 -1
  229. package/dist/client/assets/useSuspenseInfiniteQuery-B8vt_oPd.js +0 -1
  230. package/dist/client/assets/workflow-detail-DSkokxeb.js +0 -1
@@ -100485,7 +100485,11 @@ Preview:
100485
100485
  })
100486
100486
  ];
100487
100487
  });
100488
- return { tools: Object.fromEntries(toolEntries), nameMap };
100488
+ return {
100489
+ tools: Object.fromEntries(toolEntries),
100490
+ nameMap,
100491
+ rawTools: list.tools
100492
+ };
100489
100493
  }
100490
100494
 
100491
100495
  // ../harness/src/decopilot/built-in-tools/user-ask.ts
@@ -101652,11 +101656,14 @@ function createDesktopToolRuntime(args) {
101652
101656
  const mcpClient = openedMcp.client;
101653
101657
  cleanup.close = openedMcp.close;
101654
101658
  try {
101655
- const { tools: passthroughTools, nameMap } = await toolsFromMCP(mcpClient, toolOutputMap, undefined, streamInput.toolApprovalLevel, {
101659
+ const {
101660
+ tools: passthroughTools,
101661
+ nameMap,
101662
+ rawTools: passthroughToolList
101663
+ } = await toolsFromMCP(mcpClient, toolOutputMap, undefined, streamInput.toolApprovalLevel, {
101656
101664
  isPlanMode: streamInput.mode === "plan",
101657
101665
  isToolVisible: isDesktopToolVisible
101658
101666
  });
101659
- const passthroughToolList = (await mcpClient.listTools()).tools;
101660
101667
  const connectionsBlockTools = [];
101661
101668
  const toolAnnotations = new Map;
101662
101669
  for (const t of passthroughToolList) {
@@ -104703,7 +104710,7 @@ ${c.stack}`;f.reject(d)}else f.resolve(_)}});return $.requestSubject=i,this.prot
104703
104710
  `);if(g===-1)return;let h=$.subarray(0,g).toString("utf8"),E=$.subarray(g+4),v=h.split(`\r
104704
104711
  `,1)[0]??"";if(!/^HTTP\/1\.[01] 101(?:\s|$)/.test(v)){q8(i,1011,t.upstreamErrorReason);try{c.end()}catch{}return}d=!0,i.data.upstream=c;let r=e9l((x,O)=>{try{if(x===1)i.send(O.toString("utf8"));else if(x===2)i.send(O);else if(x===8){let{code:y,reason:X}=C9l(O);q8(i,y,X);try{c.end()}catch{}}}catch{}});if(c.removeAllListeners("data"),E.length>0)r(E);c.on("data",(x)=>r(x));for(let x of i.data.pending)try{c.write(Nki(x,!0))}catch{}i.data.pending.length=0})}function L9l(i,t){let u=[`GET ${i} HTTP/1.1`];for(let[l,n]of Object.entries(t))u.push(`${l}: ${n}`);return u.push("",""),u.join(`\r
104705
104712
  `)}function q8(i,t,u){try{if(t!==void 0)i.close(t,u??"");else i.close()}catch{}}function Nki(i,t,u){let l,n;if(typeof i==="string")l=Buffer.from(i,"utf8"),n=1;else if(i instanceof ArrayBuffer)l=Buffer.from(i),n=2;else if(Buffer.isBuffer(i))l=i,n=2;else l=Buffer.from(i),n=2;let f=u??n,c=l.length,$=[];$.push(128|f&15);let d=t?128:0;if(c<126)$.push(d|c);else if(c<65536)$.push(d|126,c>>8&255,c&255);else $.push(d|127,0,0,0,0),$.push(c>>>24&255,c>>>16&255,c>>>8&255,c&255);let _=t?4:0,g=Buffer.allocUnsafe($.length+_+c),h=0;for(let E=0;E<$.length;E++)g[h++]=$[E];if(t){let E=YSt(4);g[h++]=E[0],g[h++]=E[1],g[h++]=E[2],g[h++]=E[3];for(let v=0;v<c;v++)g[h++]=l[v]^E[v&3]}else l.copy(g,h);return g}function C9l(i){if(i.length<2)return{code:1000,reason:""};return{code:i.readUInt16BE(0),reason:i.subarray(2).toString("utf8")}}function e9l(i){let t=Buffer.alloc(0);return(u)=>{t=t.length===0?u:Buffer.concat([t,u]);while(!0){if(t.length<2)return;let l=t[0],n=t[1],f=l&15,c=(n&128)!==0,$=n&127,d=2;if($===126){if(t.length<d+2)return;$=t[d]<<8|t[d+1],d+=2}else if($===127){if(t.length<d+8)return;$=t[d+4]*16777216+(t[d+5]<<16|t[d+6]<<8|t[d+7]),d+=8}let _=null;if(c){if(t.length<d+4)return;_=t.subarray(d,d+4),d+=4}if(t.length<d+$)return;let g=t.subarray(d,d+$);if(_){let h=Buffer.alloc($);for(let E=0;E<$;E++)h[E]=g[E]^_[E&3];g=h}t=t.subarray(d+$),i(f,g)}}}var H9l=256;var WSt=w(()=>{QSt()});function kSt(i){if(typeof i!=="string"||i.length===0)return null;let t=i.lastIndexOf(":");if(i.startsWith("["))return null;let l=(t>=0?i.slice(0,t):i).replace(/\.$/,"").toLowerCase(),n=".localhost";if(!l.endsWith(n))return null;let f=l.slice(0,-n.length);if(f.length===0)return null;if(f.includes("."))return null;return f}async function jSt(i){let t=GSt({maxPendingFrames:i.maxPendingWsFrames??M9l,backlogOverflowReason:"ingress backlog overflow"}),u=Bun.serve({port:i.port,hostname:"127.0.0.1",idleTimeout:0,async fetch(l,n){let f=l.headers.get("host"),c=kSt(f);if(!c)return new Response("not found",{status:404});let $=i.lookupSandboxPort(c);if(!$){if(l.headers.get("upgrade")==="websocket")return new Response("unknown handle",{status:404});return new Response(q9l,{status:503,headers:{"Content-Type":"text/html; charset=utf-8","Cache-Control":"no-store","Retry-After":"1"}})}if(l.headers.get("upgrade")==="websocket"){let h=new URL(l.url);if(!n.upgrade(l,{data:ASt({port:$,pathQuery:`${h.pathname}${h.search}`,protocols:PSt(l.headers)})}))return new Response("ws upgrade failed",{status:400});return}let d=new URL(l.url),_=`http://127.0.0.1:${$}${d.pathname}${d.search}`,g=new Headers(l.headers);return g.set("host",`127.0.0.1:${$}`),fetch(_,{method:l.method,headers:g,body:l.body,redirect:"manual"})},websocket:{open:t.open,message:t.message,close:t.close}});return{port:u.port??0,async stop(){u.stop(!0)}}}var M9l=256,q9l='<!DOCTYPE html><html><head><meta charset="utf-8"><title>Connecting\u2026</title><style>body{font-family:system-ui,sans-serif;display:flex;align-items:center;justify-content:center;min-height:100vh;margin:0;background:#fafafa;color:#555}div{text-align:center;max-width:420px;padding:24px}h3{margin:0 0 8px}p{margin:0;font-size:14px;color:#999;line-height:1.5}</style></head><body><div><h3>Connecting to sandbox\u2026</h3><p>Waiting for the local sandbox to come online. This page refreshes automatically.</p></div><script>setTimeout(function(){window.location.reload()},1500)</script></body></html>';var SSt=w(()=>{WSt()});async function Jki(i=p9l){let t=["decopilot-sandbox","body-offload"],[u,l]=await Promise.all([i.detectClaudeCode().catch(()=>!1),i.detectCodex().catch(()=>!1)]);if(u)t.push("claude-code");if(l)t.push("codex");return t}function a9l(i){return V9l.filter((t)=>!i.includes(t))}function m9l(i,t){let u=t.filter((l)=>!i.includes(l));return i.push(...u),u}function zSt(i,t={}){let u=t.detect??(()=>Jki()),l=setInterval(()=>{if(a9l(i).length===0)return;u().then((n)=>{let f=m9l(i,n);if(f.length>0)t.onChange?.(f)}).catch(()=>{})},t.intervalMs??60000);return l.unref?.(),()=>clearInterval(l)}async function o9l(){try{let{query:i}=await import("@anthropic-ai/claude-agent-sdk"),t=i({prompt:"",options:{maxTurns:1}}),u=await t.accountInfo();return t.return(void 0),Boolean(u.email)}catch{return!1}}async function s9l(){try{let i=Bun.spawn(["codex","--version"],{stdout:"ignore",stderr:"ignore"}),t=setTimeout(()=>i.kill(),1e4),u=await i.exited;return clearTimeout(t),u===0}catch{return!1}}var V9l,p9l;var bSt=w(()=>{V9l=["claude-code","codex"];p9l={detectClaudeCode:o9l,detectCodex:s9l}});import{randomBytes as iNl}from"crypto";import{mkdir as tNl,readFile as uNl,writeFile as lNl}from"fs/promises";import{dirname as nNl,join as fNl}from"path";function cNl(i){return fNl(i,"machine-id")}async function KSt(i){let t=cNl(i);try{let n=(await uNl(t,"utf8")).trim();if(n)return n}catch{}let u=iNl(16).toString("hex");return await tNl(nNl(t),{recursive:!0}),await lNl(t,u),u}var HSt=()=>{};import{randomBytes as $Nl}from"crypto";import{mkdir as dNl}from"fs/promises";import{createServer as _Nl}from"net";import{join as gNl}from"path";function RSt(i,t){return Error(`sandbox failed to start: ${i}`,{cause:t})}function hNl(i){if(!(i instanceof Error))return!1;return i.name==="TimeoutError"||/timed out|timeout|operation was aborted|aborted/i.test(i.message)}function ENl(i){if(i instanceof Error){let t=i.cause;if(t instanceof Error&&t.message)return t.message;return i.message}return String(i)}function LSt(i){let t=i.maxSandboxes??20,u=new Map,l=i.pickPort??vNl,n=i.fetchImpl??fetch,f=i.resolvePreviewUrl??((E,v)=>`http://127.0.0.1:${v}`),c=(E)=>{try{i.onEvent?.(E)}catch{}},$=async(E)=>{let v=new AbortController,r=setTimeout(()=>v.abort(),1500);try{let x=await n(`${E}/health`,{signal:v.signal});if(!x.ok)console.warn(`[user-desktop] probe ${E}/health \u2192 ${x.status} (treating as dead)`);return x.ok}catch(x){return console.warn(`[user-desktop] probe ${E}/health failed: ${x instanceof Error?x.message:String(x)} (treating as dead)`),!1}finally{clearTimeout(r)}},d=(E)=>{console.warn(`[user-desktop] evicting dead daemon handle=${E.handle} port=${E.port}`);try{E.process.kill("SIGTERM")}catch{}if(u.get(E.handle)===E)u.delete(E.handle),c({handle:E.handle,phase:"evicted"})},_=new Map;function g(){if(u.size<t)return;let E=[...u.values()].filter((r)=>r.activeDispatchCount===0).sort((r,x)=>r.lastUsedAt-x.lastUsedAt);if(E.length===0){console.warn(`[user-desktop] at cap ${u.size}/${t} but every sandbox is pinned (active dispatch) \u2014 exceeding cap temporarily`);return}let v=E[0];console.log(`[user-desktop] evicting LRU victim handle=${v.handle} port=${v.port} (cap ${t} reached, size=${u.size})`);try{v.process.kill("SIGTERM")}catch{}u.delete(v.handle),c({handle:v.handle,phase:"evicted"})}let h=async(E)=>{c({handle:E.handle,phase:"spawning"}),g();let v=gNl(i.dataDir,"sandboxes",E.handle);await dNl(v,{recursive:!0}),console.log(`[user-desktop] ensure handle=${E.handle} repo=${E.repo?.cloneUrl??"(none)"} branch=${E.repo?.branch??"(none)"} runtime=${E.workload?.runtime??"(autodetect)"} pm=${E.workload?.packageManager??"(autodetect)"}`);let r=$Nl(24).toString("hex"),[x,O]=await Promise.all([l(),l()]);console.log(`[user-desktop] spawn handle=${E.handle} port=${x} devPort=${O} workdir=${v}`);let y=await Promise.resolve(i.spawnDaemon({workdir:v,handle:E.handle,port:x,daemonToken:r,offloadAllowedHosts:E.offloadAllowedHosts??[],offloadAllowSameHostDev:E.offloadAllowSameHostDev??!1,orgFsConfigJson:E.orgFsConfigJson}));try{try{await i.waitForHealth(x)}catch(J){throw RSt("the sandbox didn't come online in time",J)}console.log(`[user-desktop] healthy handle=${E.handle} port=${x} \u2014 posting config`);try{await i.postConfig(x,O,{repo:E.repo,workload:E.workload,operator:E.operator},r)}catch(J){throw RSt(hNl(J)?"configuration timed out":"the sandbox rejected its configuration",J)}}catch(J){console.error(`[user-desktop] sandbox bring-up failed handle=${E.handle} port=${x} (killing daemon):`,J);try{y.kill("SIGKILL")}catch{}throw c({handle:E.handle,phase:"failed",error:ENl(J)}),J}let X=`http://127.0.0.1:${x}`,N=f(E.handle,x);console.log(`[user-desktop] ready handle=${E.handle} port=${x} sandboxApiUrl=${X} previewUrl=${N}`);let U={handle:E.handle,port:x,process:y,sandboxApiUrl:X,previewUrl:N,lastUsedAt:Date.now(),activeDispatchCount:0,daemonToken:r};if(u.set(E.handle,U),c({handle:E.handle,phase:"ready",port:x,previewUrl:N}),y.exited)y.exited.then(()=>{if(u.get(E.handle)===U)console.warn(`[user-desktop] daemon process exited unexpectedly handle=${E.handle} port=${x} \u2014 removing from cache`),u.delete(E.handle),c({handle:E.handle,phase:"evicted"});else console.log(`[user-desktop] daemon process exited handle=${E.handle} port=${x} (already replaced/removed)`)});return{sandboxApiUrl:X,previewUrl:N,port:x}};return{async ensureSandbox(E){let v=u.get(E.handle);if(v){if(await $(v.sandboxApiUrl))return console.log(`[user-desktop] cache hit handle=${E.handle} port=${v.port} (alive)`),v.lastUsedAt=Date.now(),{sandboxApiUrl:v.sandboxApiUrl,previewUrl:v.previewUrl,port:v.port};console.warn(`[user-desktop] cache stale handle=${E.handle} port=${v.port} \u2014 respawning`),d(v)}let r=_.get(E.handle);if(r)return console.log(`[user-desktop] joining in-flight ensure handle=${E.handle}`),r;let x=h(E).finally(()=>{_.delete(E.handle)});return _.set(E.handle,x),x},proxyPort(E){let v=u.get(E);if(v)v.lastUsedAt=Date.now();return v?.port??null},getDaemonToken(E){return u.get(E)?.daemonToken??null},hasHandle(E){return u.has(E)||_.has(E)},recordHit(E){let v=u.get(E);if(v)v.lastUsedAt=Date.now()},acquireDispatch(E){let v=u.get(E);if(!v)return()=>{};v.activeDispatchCount+=1;let r=!1;return()=>{if(r)return;r=!0;let x=u.get(E);if(x)x.activeDispatchCount=Math.max(0,x.activeDispatchCount-1)}},listSandboxes(){return[...u.values()]},async deleteSandbox(E){let v=u.get(E);if(!v){console.log(`[user-desktop] delete handle=${E} (not found, no-op)`);return}console.log(`[user-desktop] delete handle=${E} port=${v.port}`);try{v.process.kill("SIGTERM")}catch{}u.delete(E),c({handle:E,phase:"deleted"})},async shutdown(){console.log(`[user-desktop] shutdown \u2014 killing ${u.size} sandbox(es)`);for(let E of u.values())try{E.process.kill("SIGTERM")}catch{}u.clear()}}}function vNl(){return new Promise((i,t)=>{let u=_Nl();u.unref(),u.on("error",t),u.listen(0,"127.0.0.1",()=>{let l=u.address();if(l&&typeof l==="object"){let n=l.port;u.close(()=>i(n))}else u.close(()=>t(Error("could not allocate port")))})})}var CSt=()=>{};import{randomUUID as rNl}from"crypto";import{hostname as wNl}from"os";async function eSt(i){let t=wNl()||void 0;i.monitor?.onMachine?.(t??"this machine");let u=cAt(i.dataDir,{outFd:i.logFd,perSandboxLog:i.perSandboxLogs,hotReload:i.hotReload}),l=0,n=LSt({dataDir:i.dataDir,resolvePreviewUrl:(N,U)=>l>0?`http://${N}.localhost:${l}`:`http://127.0.0.1:${U}`,spawnDaemon:async(N)=>{let U={DAEMON_BOOT_ID:rNl(),APP_ROOT:N.workdir,PROXY_PORT:String(N.port),DAEMON_TOKEN:N.daemonToken,OFFLOAD_ALLOWED_HOSTS:N.offloadAllowedHosts.join(","),...N.offloadAllowSameHostDev?{OFFLOAD_ALLOW_SAME_HOST_DEV:"1"}:{}};if(N.orgFsConfigJson){let T=await gAt(i.dataDir);if(T)U.ORGFS_CONFIG=N.orgFsConfigJson,U.ORGFS_RCLONE_PATH=T}let J=await u({workdir:N.workdir,env:U,daemonPort:N.port});return{port:N.port,kill:(T)=>J.kill(T),exited:J.exited.then(()=>{return})}},postConfig:async(N,U,J,T)=>{let Q={port:U};if(J.workload)Q.runtime=J.workload.runtime,Q.packageManager={name:J.workload.packageManager,...J.workload.packageManagerPath?{path:J.workload.packageManagerPath}:{}};let B={application:Q},P=p6(J.operator??null);if(P)B.operator=P;if(J.repo)B.git={repository:{cloneUrl:J.repo.cloneUrl,branch:J.repo.branch},...J.repo.userName&&J.repo.userEmail?{identity:{userName:J.repo.userName,userEmail:J.repo.userEmail}}:{}};await Q8(`http://127.0.0.1:${N}`,T,B)},waitForHealth:async(N)=>{await lli(`http://127.0.0.1:${N}`)},maxSandboxes:20,onEvent:i.monitor?.onEvent}),f=await jSt({port:i.port,lookupSandboxPort:(N)=>n.proxyPort(N)});l=f.port,console.log(`Local ingress listening on http://127.0.0.1:${f.port} (use http://<handle>.localhost:${f.port}/)`),i.monitor?.onIngress?.(f.port);let c=EAt({provider:n}),$=async()=>{let N=await Sw({dataDir:i.dataDir,target:i.clusterBaseUrl});if(!N)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 N.accessToken};console.log(`[link-daemon] transport=pull cluster=${i.clusterBaseUrl}`);let d=await KSt(i.dataDir),_=process.env.npm_package_version??"0.0.0",g=await Jki(),h=zSt(g,{onChange:(N)=>{console.log(`[link-daemon] capabilities detected: +${N.join(",")} (now: ${g.join(",")})`)}}),E=Oki({path:`${i.dataDir}/link/outbox.sqlite`}),v=()=>{},r=await FSt({clusterBaseUrl:i.clusterBaseUrl,getAccessToken:$,provider:n,outbox:E,controlHandler:c,capabilities:g,machineId:d,cliVersion:_,previewPort:f.port,onConnected:()=>{i.monitor?.onCluster?.("linked"),console.log(`Linked to ${i.clusterBaseUrl} (pull transport)`)},onShutdown:()=>v()}),x,O=new Promise((N)=>{x=N}),y=!1,X=async()=>{if(y)return;y=!0,console.log(`
104706
- Shutting down\u2026`),h();try{await r.close()}catch{}try{await f.stop()}catch{}try{await n.shutdown()}catch{}try{E.close()}catch{}x(0)};return process.on("SIGINT",()=>void X()),process.on("SIGTERM",()=>void X()),v=()=>{console.log("Disconnect requested from the Studio web UI \u2014 shutting down. Run `bunx decocms link` to reconnect."),X()},r.closed.then(()=>{if(i.monitor?.onCluster?.("closed"),!y)console.error("Cluster connection closed permanently; exiting."),X()}),{stopped:O,stop:X}}var MSt=w(()=>{xGi();RH();$At();hAt();vAt();TSt();yki();SSt();bSt();HSt();HH();CSt()});function Uki(i){return i.map((t)=>typeof t==="string"?t:String(t)).join(" ")}var w0i;var Fki=w(()=>{w0i={name:"decocms",version:"3.21.1",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/mesh"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:'bun run migrate && concurrently "bun run dev:client" "bun run dev:server"',"dev:servers":'concurrently "bun run dev:client" "bun run dev:server"',"dev:client":"vite dev","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts","build:client":"bun --bun vite build","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","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","test:e2e":"playwright test","test:e2e:ui":"playwright test --ui","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 build:client && bun run build:server"},optionalDependencies:{"@anthropic-ai/claude-agent-sdk":"^0.2.141","@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.80","@ai-sdk/google":"^3.0.80","@ai-sdk/openai":"^3.0.65","@anthropic-ai/sdk":"^0.96.0","@aws-sdk/client-s3":"^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.17.6","@dnd-kit/core":"^6.3.1","@dnd-kit/sortable":"^10.0.0","@dnd-kit/utilities":"^3.2.2","@inkjs/ui":"^2.0.0","@modelcontextprotocol/ext-apps":"^1.7.1","@openrouter/ai-sdk-provider":"^2.9.0","@opentelemetry/core":"^2.6.0","@tanstack/react-virtual":"3.13.24","@xterm/addon-fit":"^0.11.0","@xterm/xterm":"^6.0.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12",nats:"^2.29.3","node-pty":"^1.0.0","posthog-js":"^1.371.1","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@ai-sdk/react":"^3.0.193","@better-auth/sso":"1.4.1","@daveyplate/better-auth-ui":"^3.2.7","@deco/ui":"workspace:*","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/harness":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/mesh-sdk":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/std":"workspace:*","@floating-ui/react":"^0.27.16","@happy-dom/global-registrator":"^20.9.0","@hookform/resolvers":"^5.2.2","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@monaco-editor/react":"^4.7.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@playwright/test":"^1.58.2","@radix-ui/react-avatar":"^1.1.10","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-dropdown-menu":"^2.1.16","@radix-ui/react-label":"^2.1.7","@radix-ui/react-select":"^2.2.6","@radix-ui/react-separator":"^1.1.7","@radix-ui/react-slot":"^1.2.3","@radix-ui/react-tabs":"^1.1.13","@rjsf/core":"^6.1.2","@rjsf/shadcn":"^6.1.2","@rjsf/utils":"^6.1.2","@rjsf/validator-ajv8":"^6.1.2","@tailwindcss/vite":"^4.1.17","@tanstack/react-query":"5.100.10","@tanstack/react-router":"1.169.2","@testing-library/jest-dom":"^6.9.1","@testing-library/react":"^16.3.2","@tiptap/core":"3.20.2","@tiptap/extension-mention":"3.20.2","@tiptap/extension-placeholder":"3.20.2","@tiptap/pm":"3.20.2","@tiptap/react":"3.20.2","@tiptap/starter-kit":"3.20.2","@tiptap/suggestion":"3.20.2","@types/bun":"^1.3.1","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@untitledui/icons":"^0.0.19","@vercel/nft":"^1.1.1","@vitejs/plugin-react":"^5.1.0",ai:"^6.0.191","babel-plugin-react-compiler":"^1.0.0","better-auth":"1.4.22","class-variance-authority":"^0.7.1",clsx:"^2.1.1",concurrently:"^9.2.1",croner:"^9.1.0","date-fns":"^4.1.0",degit:"^2.8.4",hono:"^4.10.7","input-otp":"^1.4.2",jose:"^6.0.11","lucide-react":"^0.468.0",marked:"^15.0.6","mesh-plugin-workflows":"workspace:*",nanoid:"^5.1.6",pg:"^8.16.3",prettier:"^3.4.2","react-hook-form":"^7.66.0","react-markdown":"^10.1.0","react-resizable-panels":"^2.1.7","react-syntax-highlighter":"^15.6.1",recharts:"^3.6.0","rehype-raw":"^7.0.0","remark-gfm":"^4.0.0","sass-embedded":"^1.97.2",sonner:"^2.0.7","tailwind-merge":"^3.3.1",tailwindcss:"^4.1.17",typescript:"^5.9.3",vite:"^7.2.1","vite-tsconfig-paths":"^5.1.4",zod:"^4.0.0",zustand:"^5.0.9"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","mesh","tools"],license:"MIT",publishConfig:{access:"public"}}});var vR={};Gi(vR,{printBanner:()=>ONl,bannerLines:()=>qSt,BANNER_LINES:()=>x0i,BANNER_GRADIENT:()=>D0i});function DNl(i){let t=Number.parseInt(i.slice(1),16);return[t>>16&255,t>>8&255,t&255]}function qSt(i){let t=x0i.map((u,l)=>{let[n,f,c]=DNl(D0i[l]);return`\x1B[38;2;${n};${f};${c}m${u}\x1B[39m`});if(i!==void 0)t.push(`\x1B[2m v${i}\x1B[22m`);return t}function ONl(i){console.log("");for(let t of qSt(i))console.log(t);console.log("")}var x0i,D0i;var PW=w(()=>{x0i=[" \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 "],D0i=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"]});import{Box as yNl,Text as VSt}from"ink";import{jsx as XNl,jsxs as aSt}from"react/jsx-runtime";function O0i({version:i}){return aSt(yNl,{flexDirection:"column",marginTop:1,children:[x0i.map((t,u)=>XNl(VSt,{color:D0i[u],children:t},u)),aSt(VSt,{dimColor:!0,children:[" v",i]})]})}var Tki=w(()=>{PW()});var oSt={};Gi(oSt,{subscribeLinkState:()=>Bki,setMachine:()=>FNl,setLogPath:()=>INl,setIngress:()=>UNl,setDaemonError:()=>TNl,setClusterUrl:()=>JNl,setCluster:()=>NNl,pushSandboxEvent:()=>ZNl,getLinkState:()=>Zki,applySandboxEvent:()=>mSt});function mSt(i,t){let u=new Map(i);if(t.phase==="evicted"||t.phase==="deleted")return u.delete(t.handle),u;let l=u.get(t.handle);return u.set(t.handle,{handle:t.handle,port:t.port??l?.port??null,previewUrl:t.previewUrl??l?.previewUrl??null,status:t.phase,error:t.phase==="failed"?t.error??"failed":null}),u}function V8(){for(let i of Iki)i()}function Zki(){return i$}function Bki(i){return Iki.add(i),()=>Iki.delete(i)}function NNl(i){i$={...i$,cluster:i},V8()}function JNl(i){i$={...i$,clusterUrl:i},V8()}function UNl(i,t){i$={...i$,ingressPort:i,ingressUrl:t},V8()}function FNl(i){i$={...i$,machine:i},V8()}function TNl(i){i$={...i$,daemonError:i},V8()}function INl(i){i$={...i$,logPath:i},V8()}function ZNl(i){i$={...i$,sandboxes:mSt(i$.sandboxes,i)},V8()}var i$,Iki;var Qki=w(()=>{i$={cluster:"connecting",clusterUrl:null,ingressUrl:null,ingressPort:null,machine:null,cap:20,sandboxes:new Map,daemonError:null,logPath:null},Iki=new Set});var sSt={};Gi(sSt,{LinkApp:()=>YNl});import{Box as t$,Text as u$}from"ink";import{useSyncExternalStore as BNl}from"react";import{jsx as $f,jsxs as RE}from"react/jsx-runtime";function QNl(i){if(i.status==="ready")return{color:"green",text:"\u25CF Live"};if(i.status==="spawning")return{color:"yellow",text:"\u25CC Starting\u2026"};return{color:"red",text:`\u2717 Error: ${i.error??""}`}}function YNl(){let i=BNl(Bki,Zki),t=[...i.sandboxes.values()].sort((u,l)=>u.handle.localeCompare(l.handle));return RE(t$,{flexDirection:"column",children:[$f(O0i,{version:w0i.version}),$f(t$,{marginBottom:1,children:$f(u$,{dimColor:!0,children:"\u2500".repeat(80)})}),$f(t$,{children:i.cluster==="linked"?RE(u$,{color:"green",children:["\u2713 Connected to ",i.clusterUrl??"deco"]}):i.cluster==="connecting"?RE(u$,{color:"yellow",children:["\u25CC Connecting to ",i.clusterUrl??"deco","\u2026"]}):RE(u$,{color:"red",children:["\u2717 Disconnected from ",i.clusterUrl??"deco"]})}),$f(t$,{children:i.ingressUrl?RE(u$,{color:"green",children:["\u2713 Serving at ",i.ingressUrl]}):$f(u$,{dimColor:!0,children:"\u25CC Starting local server\u2026"})}),$f(t$,{marginBottom:1,children:$f(u$,{dimColor:!0,children:`${"Computer".padEnd(16)}${i.machine??"this computer"} \xB7 ${t.length} of ${i.cap} previews`})}),t.length===0?$f(u$,{dimColor:!0,children:"No previews running yet."}):RE(t$,{flexDirection:"column",children:[RE(t$,{children:[$f(t$,{width:y0i.project,flexShrink:0,marginRight:1,children:$f(u$,{dimColor:!0,wrap:"truncate-end",children:"PROJECT"})}),$f(t$,{width:y0i.status,flexShrink:0,marginRight:1,children:$f(u$,{dimColor:!0,wrap:"truncate-end",children:"STATUS"})}),$f(t$,{flexGrow:1,children:$f(u$,{dimColor:!0,wrap:"truncate-end",children:"PREVIEW URL"})})]}),t.map((u)=>{let l=QNl(u);return RE(t$,{children:[$f(t$,{width:y0i.project,flexShrink:0,marginRight:1,children:$f(u$,{wrap:"truncate-end",children:u.handle})}),$f(t$,{width:y0i.status,flexShrink:0,marginRight:1,children:$f(u$,{color:l.color,wrap:"truncate-end",children:l.text})}),$f(t$,{flexGrow:1,children:$f(u$,{dimColor:!0,wrap:"truncate-end",children:u.previewUrl??"\u2014"})})]},u.handle)})]}),i.daemonError?$f(t$,{marginTop:1,children:RE(u$,{color:"red",children:["\u26A0 ",i.daemonError]})}):null,i.logPath?$f(t$,{marginTop:1,children:RE(u$,{dimColor:!0,children:["Logs: ",i.logPath]})}):null]})}var y0i;var pSt=w(()=>{Fki();Tki();Qki();y0i={project:18,status:14}});var tzt={};Gi(tzt,{runLinkCommand:()=>zNl});import{closeSync as PNl,mkdirSync as ANl,openSync as GNl,writeSync as WNl}from"fs";import{homedir as kNl}from"os";import{join as izt}from"path";function jNl(i,t){let u={log:console.log,warn:console.warn,error:console.error},l=(n)=>{if(t===void 0)return;try{WNl(t,`${Uki(n)}
104713
+ Shutting down\u2026`),h();try{await r.close()}catch{}try{await f.stop()}catch{}try{await n.shutdown()}catch{}try{E.close()}catch{}x(0)};return process.on("SIGINT",()=>void X()),process.on("SIGTERM",()=>void X()),v=()=>{console.log("Disconnect requested from the Studio web UI \u2014 shutting down. Run `bunx decocms link` to reconnect."),X()},r.closed.then(()=>{if(i.monitor?.onCluster?.("closed"),!y)console.error("Cluster connection closed permanently; exiting."),X()}),{stopped:O,stop:X}}var MSt=w(()=>{xGi();RH();$At();hAt();vAt();TSt();yki();SSt();bSt();HSt();HH();CSt()});function Uki(i){return i.map((t)=>typeof t==="string"?t:String(t)).join(" ")}var w0i;var Fki=w(()=>{w0i={name:"decocms",version:"3.21.2",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/mesh"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:'bun run migrate && concurrently "bun run dev:client" "bun run dev:server"',"dev:servers":'concurrently "bun run dev:client" "bun run dev:server"',"dev:client":"vite dev","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts","build:client":"bun --bun vite build","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","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","test:e2e":"playwright test","test:e2e:ui":"playwright test --ui","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 build:client && bun run build:server"},optionalDependencies:{"@anthropic-ai/claude-agent-sdk":"^0.2.141","@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.80","@ai-sdk/google":"^3.0.80","@ai-sdk/openai":"^3.0.65","@anthropic-ai/sdk":"^0.96.0","@aws-sdk/client-s3":"^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.17.6","@dnd-kit/core":"^6.3.1","@dnd-kit/sortable":"^10.0.0","@dnd-kit/utilities":"^3.2.2","@inkjs/ui":"^2.0.0","@modelcontextprotocol/ext-apps":"^1.7.1","@openrouter/ai-sdk-provider":"^2.9.0","@opentelemetry/core":"^2.6.0","@tanstack/react-virtual":"3.13.24","@xterm/addon-fit":"^0.11.0","@xterm/xterm":"^6.0.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12",nats:"^2.29.3","node-pty":"^1.0.0","posthog-js":"^1.371.1","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@ai-sdk/react":"^3.0.193","@better-auth/sso":"1.4.1","@daveyplate/better-auth-ui":"^3.2.7","@deco/ui":"workspace:*","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/harness":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/mesh-sdk":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/std":"workspace:*","@floating-ui/react":"^0.27.16","@happy-dom/global-registrator":"^20.9.0","@hookform/resolvers":"^5.2.2","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@monaco-editor/react":"^4.7.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@playwright/test":"^1.58.2","@radix-ui/react-avatar":"^1.1.10","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-dropdown-menu":"^2.1.16","@radix-ui/react-label":"^2.1.7","@radix-ui/react-select":"^2.2.6","@radix-ui/react-separator":"^1.1.7","@radix-ui/react-slot":"^1.2.3","@radix-ui/react-tabs":"^1.1.13","@rjsf/core":"^6.1.2","@rjsf/shadcn":"^6.1.2","@rjsf/utils":"^6.1.2","@rjsf/validator-ajv8":"^6.1.2","@tailwindcss/vite":"^4.1.17","@tanstack/react-query":"5.100.10","@tanstack/react-router":"1.169.2","@testing-library/jest-dom":"^6.9.1","@testing-library/react":"^16.3.2","@tiptap/core":"3.20.2","@tiptap/extension-mention":"3.20.2","@tiptap/extension-placeholder":"3.20.2","@tiptap/pm":"3.20.2","@tiptap/react":"3.20.2","@tiptap/starter-kit":"3.20.2","@tiptap/suggestion":"3.20.2","@types/bun":"^1.3.1","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@untitledui/icons":"^0.0.19","@vercel/nft":"^1.1.1","@vitejs/plugin-react":"^5.1.0",ai:"^6.0.191","babel-plugin-react-compiler":"^1.0.0","better-auth":"1.4.22","class-variance-authority":"^0.7.1",clsx:"^2.1.1",concurrently:"^9.2.1",croner:"^9.1.0","date-fns":"^4.1.0",degit:"^2.8.4",hono:"^4.10.7","input-otp":"^1.4.2",jose:"^6.0.11","lucide-react":"^0.468.0",marked:"^15.0.6","mesh-plugin-workflows":"workspace:*",nanoid:"^5.1.6",pg:"^8.16.3",prettier:"^3.4.2","react-hook-form":"^7.66.0","react-markdown":"^10.1.0","react-resizable-panels":"^2.1.7","react-syntax-highlighter":"^15.6.1",recharts:"^3.6.0","rehype-raw":"^7.0.0","remark-gfm":"^4.0.0","sass-embedded":"^1.97.2",sonner:"^2.0.7","tailwind-merge":"^3.3.1",tailwindcss:"^4.1.17",typescript:"^5.9.3",vite:"^7.2.1","vite-tsconfig-paths":"^5.1.4",zod:"^4.0.0",zustand:"^5.0.9"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","mesh","tools"],license:"MIT",publishConfig:{access:"public"}}});var vR={};Gi(vR,{printBanner:()=>ONl,bannerLines:()=>qSt,BANNER_LINES:()=>x0i,BANNER_GRADIENT:()=>D0i});function DNl(i){let t=Number.parseInt(i.slice(1),16);return[t>>16&255,t>>8&255,t&255]}function qSt(i){let t=x0i.map((u,l)=>{let[n,f,c]=DNl(D0i[l]);return`\x1B[38;2;${n};${f};${c}m${u}\x1B[39m`});if(i!==void 0)t.push(`\x1B[2m v${i}\x1B[22m`);return t}function ONl(i){console.log("");for(let t of qSt(i))console.log(t);console.log("")}var x0i,D0i;var PW=w(()=>{x0i=[" \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 "],D0i=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"]});import{Box as yNl,Text as VSt}from"ink";import{jsx as XNl,jsxs as aSt}from"react/jsx-runtime";function O0i({version:i}){return aSt(yNl,{flexDirection:"column",marginTop:1,children:[x0i.map((t,u)=>XNl(VSt,{color:D0i[u],children:t},u)),aSt(VSt,{dimColor:!0,children:[" v",i]})]})}var Tki=w(()=>{PW()});var oSt={};Gi(oSt,{subscribeLinkState:()=>Bki,setMachine:()=>FNl,setLogPath:()=>INl,setIngress:()=>UNl,setDaemonError:()=>TNl,setClusterUrl:()=>JNl,setCluster:()=>NNl,pushSandboxEvent:()=>ZNl,getLinkState:()=>Zki,applySandboxEvent:()=>mSt});function mSt(i,t){let u=new Map(i);if(t.phase==="evicted"||t.phase==="deleted")return u.delete(t.handle),u;let l=u.get(t.handle);return u.set(t.handle,{handle:t.handle,port:t.port??l?.port??null,previewUrl:t.previewUrl??l?.previewUrl??null,status:t.phase,error:t.phase==="failed"?t.error??"failed":null}),u}function V8(){for(let i of Iki)i()}function Zki(){return i$}function Bki(i){return Iki.add(i),()=>Iki.delete(i)}function NNl(i){i$={...i$,cluster:i},V8()}function JNl(i){i$={...i$,clusterUrl:i},V8()}function UNl(i,t){i$={...i$,ingressPort:i,ingressUrl:t},V8()}function FNl(i){i$={...i$,machine:i},V8()}function TNl(i){i$={...i$,daemonError:i},V8()}function INl(i){i$={...i$,logPath:i},V8()}function ZNl(i){i$={...i$,sandboxes:mSt(i$.sandboxes,i)},V8()}var i$,Iki;var Qki=w(()=>{i$={cluster:"connecting",clusterUrl:null,ingressUrl:null,ingressPort:null,machine:null,cap:20,sandboxes:new Map,daemonError:null,logPath:null},Iki=new Set});var sSt={};Gi(sSt,{LinkApp:()=>YNl});import{Box as t$,Text as u$}from"ink";import{useSyncExternalStore as BNl}from"react";import{jsx as $f,jsxs as RE}from"react/jsx-runtime";function QNl(i){if(i.status==="ready")return{color:"green",text:"\u25CF Live"};if(i.status==="spawning")return{color:"yellow",text:"\u25CC Starting\u2026"};return{color:"red",text:`\u2717 Error: ${i.error??""}`}}function YNl(){let i=BNl(Bki,Zki),t=[...i.sandboxes.values()].sort((u,l)=>u.handle.localeCompare(l.handle));return RE(t$,{flexDirection:"column",children:[$f(O0i,{version:w0i.version}),$f(t$,{marginBottom:1,children:$f(u$,{dimColor:!0,children:"\u2500".repeat(80)})}),$f(t$,{children:i.cluster==="linked"?RE(u$,{color:"green",children:["\u2713 Connected to ",i.clusterUrl??"deco"]}):i.cluster==="connecting"?RE(u$,{color:"yellow",children:["\u25CC Connecting to ",i.clusterUrl??"deco","\u2026"]}):RE(u$,{color:"red",children:["\u2717 Disconnected from ",i.clusterUrl??"deco"]})}),$f(t$,{children:i.ingressUrl?RE(u$,{color:"green",children:["\u2713 Serving at ",i.ingressUrl]}):$f(u$,{dimColor:!0,children:"\u25CC Starting local server\u2026"})}),$f(t$,{marginBottom:1,children:$f(u$,{dimColor:!0,children:`${"Computer".padEnd(16)}${i.machine??"this computer"} \xB7 ${t.length} of ${i.cap} previews`})}),t.length===0?$f(u$,{dimColor:!0,children:"No previews running yet."}):RE(t$,{flexDirection:"column",children:[RE(t$,{children:[$f(t$,{width:y0i.project,flexShrink:0,marginRight:1,children:$f(u$,{dimColor:!0,wrap:"truncate-end",children:"PROJECT"})}),$f(t$,{width:y0i.status,flexShrink:0,marginRight:1,children:$f(u$,{dimColor:!0,wrap:"truncate-end",children:"STATUS"})}),$f(t$,{flexGrow:1,children:$f(u$,{dimColor:!0,wrap:"truncate-end",children:"PREVIEW URL"})})]}),t.map((u)=>{let l=QNl(u);return RE(t$,{children:[$f(t$,{width:y0i.project,flexShrink:0,marginRight:1,children:$f(u$,{wrap:"truncate-end",children:u.handle})}),$f(t$,{width:y0i.status,flexShrink:0,marginRight:1,children:$f(u$,{color:l.color,wrap:"truncate-end",children:l.text})}),$f(t$,{flexGrow:1,children:$f(u$,{dimColor:!0,wrap:"truncate-end",children:u.previewUrl??"\u2014"})})]},u.handle)})]}),i.daemonError?$f(t$,{marginTop:1,children:RE(u$,{color:"red",children:["\u26A0 ",i.daemonError]})}):null,i.logPath?$f(t$,{marginTop:1,children:RE(u$,{dimColor:!0,children:["Logs: ",i.logPath]})}):null]})}var y0i;var pSt=w(()=>{Fki();Tki();Qki();y0i={project:18,status:14}});var tzt={};Gi(tzt,{runLinkCommand:()=>zNl});import{closeSync as PNl,mkdirSync as ANl,openSync as GNl,writeSync as WNl}from"fs";import{homedir as kNl}from"os";import{join as izt}from"path";function jNl(i,t){let u={log:console.log,warn:console.warn,error:console.error},l=(n)=>{if(t===void 0)return;try{WNl(t,`${Uki(n)}
104707
104714
  `)}catch{}};return console.log=(...n)=>l(n),console.warn=(...n)=>l(n),console.error=(...n)=>{l(n),i(Uki(n))},()=>{console.log=u.log,console.warn=u.warn,console.error=u.error}}async function SNl(i,t){let u;try{u=await fetch(`${i}/api/links/me`,{headers:{authorization:`Bearer ${t}`},signal:AbortSignal.timeout(1e4)})}catch{return}if(u.status===401||u.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 zNl(i={}){let t=i.port??5174,u=i.dataDir??process.env.DATA_DIR??process.env.DECOCMS_HOME??izt(kNl(),"deco"),l=i.clusterBaseUrl??process.env.MESH_CLUSTER_URL??"https://studio.decocms.com",n,f;try{let c=await pui({dataDir:u,intent:"Link",target:l});if(process.env.DECOCMS_LINK_MANAGED!=="1")await SNl(l,c.accessToken);let $;if(i.tui){let{render:g}=await import("ink"),{createElement:h}=await import("react"),{LinkApp:E}=await Promise.resolve().then(() => (pSt(),sSt)),{pushSandboxEvent:v,setCluster:r,setClusterUrl:x,setDaemonError:O,setIngress:y,setLogPath:X,setMachine:N}=await Promise.resolve().then(() => (Qki(),oSt));ANl(u,{recursive:!0});let U=izt(u,"link.log");f=GNl(U,"w"),X(U),x(l),r("connecting"),$={onEvent:(J)=>v(J),onIngress:(J)=>y(J,`http://127.0.0.1:${J}`),onCluster:(J)=>r(J),onMachine:(J)=>N(J)},n=jNl(O,f),g(h(E),{patchConsole:!1})}else if(i.banner!==!1){let{printBanner:g}=await Promise.resolve().then(() => (PW(),vR));g(i.version??"0.0.0")}let d=process.env.DECOCMS_LINK_MANAGED!=="1";return await(await eSt({port:t,clusterBaseUrl:l,dataDir:u,session:c,monitor:$,logFd:f,perSandboxLogs:d,hotReload:i.hotReload})).stopped}catch(c){return n?.(),console.error(c instanceof Error?c.message:String(c)),1}finally{if(n?.(),f!==void 0)try{PNl(f)}catch{}}}var uzt=w(()=>{wGi();MSt()});var kki={};Gi(kki,{resolveDevLinkClusterUrl:()=>RNl,populateDevLinkToxiProxy:()=>dzt,isDevLinkToxiProxyEnabled:()=>HNl,ensureDevLinkToxiProxy:()=>qNl,buildDevLinkToxiProxyConfig:()=>czt,DEV_LINK_TOXIPROXY_SERVICE_NAME:()=>nzt,DEV_LINK_TOXIPROXY_PROXY_NAME:()=>fzt});function HNl(i=process.env){return i.DECO_DEV_LINK_TOXIPROXY==="1"}function Yki(i,t){if(!Number.isInteger(i)||i<1||i>65535)throw Error(`${t} must be an integer port in 1..65535`);return i}function czt(i){let t=new URL(i.serverUrl);if(t.protocol!=="http:")throw Error("DECO_DEV_LINK_TOXIPROXY only supports http local Studio URLs");let u=Yki(i.apiPort,"apiPort"),l=Yki(i.listenPort,"listenPort");if(t.port.length===0)throw Error("serverUrl must include an explicit valid port");let n=Yki(Number.parseInt(t.port,10),"upstreamPort"),f=`http://127.0.0.1:${n}`,c=`http://127.0.0.1:${l}`;return{serviceName:nzt,proxyName:fzt,apiUrl:`http://127.0.0.1:${u}`,listen:`0.0.0.0:${l}`,upstream:`host.docker.internal:${n}`,publicTargetUrl:f,clusterUrl:c,logLine:`[dev-link-toxiproxy] ready: ${c} -> ${f}`}}function RNl(i){return i.toxiproxy?.clusterUrl??i.serverUrl}async function Pki(i,t,u){if(i.ok)return;let l=await i.text();throw Error(`ToxiProxy ${t} failed for ${u}: status=${i.status} statusText=${i.statusText} body=${l}`)}function Wki(i){if(i instanceof Error)return i.name==="Error"?i.message:`${i.name}: ${i.message}`;return String(i)}function $zt(i){if(!(i instanceof Error))return!1;if(i.name==="TimeoutError")return!0;return $zt(i.cause)}async function Aki(i,t,u,l){try{return await i(u,l)}catch(n){throw Error(`ToxiProxy ${t} failed for ${u}: ${Wki(n)}`,{cause:n})}}async function dzt(i,t=fetch){let u=`${i.apiUrl}/reset`,l=await Aki(t,"reset",u,{method:"POST"});await Pki(l,"reset",u);let n=`${i.apiUrl}/populate`,f=await Aki(t,"populate",n,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify([{name:i.proxyName,listen:i.listen,upstream:i.upstream,enabled:!0}])});await Pki(f,"populate",n)}async function LNl(i,t){let u=`${i.apiUrl}/version`;try{await U3(async()=>{let l=await Aki(t,"readiness check",u,{method:"GET",signal:AbortSignal.timeout(KNl)});await Pki(l,"readiness check",u)},{maxAttempts:bNl,minTimeout:lzt,maxTimeout:lzt,multiplier:1,jitter:0,isRetriable:(l)=>!$zt(l)})}catch(l){let n=l instanceof Tg?l.cause:l;throw Error(`ToxiProxy API did not become ready at ${u}: ${Wki(n)}`,{cause:n})}}async function CNl(i){if(i===null)return"";return await new Response(i).text()}async function Gki(i,t={}){let u=["docker",...i].join(" "),l=(()=>{try{return Bun.spawn(["docker",...i],{stdout:"ignore",stderr:"pipe"})}catch($){throw Error(`Docker command failed to start (${u}): ${Wki($)}`,{cause:$})}})(),[n,f]=await Promise.all([l.exited,CNl(l.stderr)]);if(n===0||t.ignoreFailure===!0)return;let c=f.trim().length>0?`: ${f.trim()}`:"";throw Error(`Docker command failed (${u}) with exit ${n}${c}`)}async function eNl(i,t){let u=`deco-dev-link-toxiproxy-${i}`;await Gki(["rm","-f",u],{ignoreFailure:!0}),await Gki(["run","--rm","-d","--name",u,"-p",`127.0.0.1:${i}:8474`,"-p",`127.0.0.1:${t}:${t}`,"ghcr.io/shopify/toxiproxy:2.12.0","-host=0.0.0.0"])}async function MNl(i,t){let u=`deco-dev-link-toxiproxy-${i}`;await Gki(["rm","-f",u],{ignoreFailure:!0})}async function qNl(i){let t=czt(i),u=i.startDaemon??eNl,l=i.stopDaemon??(i.startDaemon===void 0?MNl:void 0);await u(i.apiPort,i.listenPort);let n=i.fetchImpl??fetch;try{await LNl(t,n),await dzt(t,n)}catch(f){if(l!==void 0)try{await l(i.apiPort,i.listenPort)}catch{}throw f}return{config:t,stop:async()=>{if(l!==void 0)await l(i.apiPort,i.listenPort)}}}var nzt="ToxiProxy",fzt="dev_link_studio",bNl=20,lzt=100,KNl=100;var jki=w(()=>{H1()});var _zt={};Gi(_zt,{migrateBetterAuth:()=>Ski});import{getMigrations as VNl}from"better-auth/db";import{sso as aNl}from"@better-auth/sso";import{organization as mNl}from"@decocms/better-auth/plugins";import{admin as oNl,apiKey as sNl,jwt as pNl,magicLink as iJl,mcp as tJl,openAPI as uJl}from"better-auth/plugins";import{emailOTP as lJl}from"better-auth/plugins/email-otp";async function Ski(i){let u={database:jH(i||Gw()),plugins:[mNl({dynamicAccessControl:{enabled:!0,enableCustomResources:!0}}),oNl(),sNl(),pNl(),uJl(),tJl({loginPage:"/login"}),aNl(),iJl({sendMagicLink:async()=>{}}),lJl({sendVerificationOTP:async()=>{}})]},{toBeAdded:l,toBeCreated:n,runMigrations:f}=await VNl(u);if(!l.length&&!n.length)return"up to date";return await f(),`${n.length+l.length} table(s) migrated`}var zki=w(()=>{j$()});var bki={};Gi(bki,{up:()=>nJl,down:()=>fJl});import{sql as LE}from"kysely";async function nJl(i){await i.schema.createTable("connections").addColumn("id","text",(t)=>t.primaryKey()).addColumn("organizationId","text",(t)=>t.notNull().references("organization.id").onDelete("cascade")).addColumn("createdById","text",(t)=>t.notNull().references("user.id").onDelete("cascade")).addColumn("name","text",(t)=>t.notNull()).addColumn("description","text").addColumn("icon","text").addColumn("appName","text").addColumn("appId","text").addColumn("connectionType","text",(t)=>t.notNull()).addColumn("connectionUrl","text",(t)=>t.notNull()).addColumn("connectionToken","text").addColumn("connectionHeaders","text").addColumn("oauthConfig","text").addColumn("metadata","text").addColumn("tools","text").addColumn("bindings","text").addColumn("status","text",(t)=>t.notNull().defaultTo("active")).addColumn("createdAt","text",(t)=>t.notNull().defaultTo(LE`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(t)=>t.notNull().defaultTo(LE`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("api_keys").addColumn("id","text",(t)=>t.primaryKey()).addColumn("userId","text",(t)=>t.notNull().references("user.id").onDelete("cascade")).addColumn("name","text",(t)=>t.notNull()).addColumn("hashedKey","text",(t)=>t.notNull().unique()).addColumn("permissions","text",(t)=>t.notNull()).addColumn("expiresAt","text").addColumn("remaining","integer").addColumn("metadata","text").addColumn("createdAt","text",(t)=>t.notNull().defaultTo(LE`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(t)=>t.notNull().defaultTo(LE`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("audit_logs").addColumn("id","text",(t)=>t.primaryKey()).addColumn("organizationId","text").addColumn("userId","text",(t)=>t.references("user.id").onDelete("set null")).addColumn("connectionId","text",(t)=>t.references("connections.id").onDelete("set null")).addColumn("toolName","text",(t)=>t.notNull()).addColumn("allowed","integer",(t)=>t.notNull()).addColumn("duration","integer").addColumn("timestamp","text",(t)=>t.notNull().defaultTo(LE`CURRENT_TIMESTAMP`)).addColumn("requestMetadata","text").execute(),await i.schema.createTable("oauth_clients").addColumn("id","text",(t)=>t.primaryKey()).addColumn("clientId","text",(t)=>t.notNull().unique()).addColumn("clientSecret","text").addColumn("clientName","text",(t)=>t.notNull()).addColumn("redirectUris","text",(t)=>t.notNull()).addColumn("grantTypes","text",(t)=>t.notNull()).addColumn("scope","text").addColumn("clientUri","text").addColumn("logoUri","text").addColumn("createdAt","text",(t)=>t.notNull().defaultTo(LE`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("oauth_authorization_codes").addColumn("code","text",(t)=>t.primaryKey()).addColumn("clientId","text",(t)=>t.notNull().references("oauth_clients.clientId").onDelete("cascade")).addColumn("userId","text",(t)=>t.notNull().references("user.id").onDelete("cascade")).addColumn("redirectUri","text",(t)=>t.notNull()).addColumn("scope","text").addColumn("codeChallenge","text").addColumn("codeChallengeMethod","text").addColumn("expiresAt","text",(t)=>t.notNull()).addColumn("createdAt","text",(t)=>t.notNull().defaultTo(LE`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("oauth_refresh_tokens").addColumn("token","text",(t)=>t.primaryKey()).addColumn("clientId","text",(t)=>t.notNull().references("oauth_clients.clientId").onDelete("cascade")).addColumn("userId","text",(t)=>t.notNull().references("user.id").onDelete("cascade")).addColumn("scope","text").addColumn("expiresAt","text").addColumn("createdAt","text",(t)=>t.notNull().defaultTo(LE`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("downstream_tokens").addColumn("id","text",(t)=>t.primaryKey()).addColumn("connectionId","text",(t)=>t.notNull().references("connections.id").onDelete("cascade")).addColumn("userId","text",(t)=>t.references("user.id").onDelete("cascade")).addColumn("accessToken","text",(t)=>t.notNull()).addColumn("refreshToken","text").addColumn("scope","text").addColumn("expiresAt","text").addColumn("createdAt","text",(t)=>t.notNull().defaultTo(LE`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(t)=>t.notNull().defaultTo(LE`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 fJl(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 gzt=()=>{};var Kki={};Gi(Kki,{up:()=>cJl,down:()=>$Jl});import{sql as hzt}from"kysely";async function cJl(i){await i.schema.createTable("organization_settings").addColumn("organizationId","text",(t)=>t.primaryKey().references("organization.id").onDelete("cascade")).addColumn("modelsBindingConnectionId","text",(t)=>t.references("connections.id").onDelete("set null")).addColumn("createdAt","text",(t)=>t.notNull().defaultTo(hzt`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(t)=>t.notNull().defaultTo(hzt`CURRENT_TIMESTAMP`)).execute()}async function $Jl(i){await i.schema.dropTable("organization_settings").execute()}var Ezt=()=>{};var Hki={};Gi(Hki,{up:()=>dJl,down:()=>_Jl});async function dJl(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 _Jl(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 Rki={};Gi(Rki,{up:()=>gJl,down:()=>hJl});async function gJl(i){await i.schema.createTable("organization_settings_new").addColumn("organizationId","text",(t)=>t.primaryKey().references("organization.id").onDelete("cascade")).addColumn("createdAt","text",(t)=>t.notNull()).addColumn("updatedAt","text",(t)=>t.notNull()).execute(),await i.insertInto("organization_settings_new").columns(["organizationId","createdAt","updatedAt"]).expression((t)=>t.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 hJl(i){await i.schema.createTable("organization_settings_new").addColumn("organizationId","text",(t)=>t.primaryKey().references("organization.id").onDelete("cascade")).addColumn("modelsBindingConnectionId","text",(t)=>t.references("connections.id").onDelete("set null")).addColumn("createdAt","text",(t)=>t.notNull()).addColumn("updatedAt","text",(t)=>t.notNull()).execute(),await i.insertInto("organization_settings_new").columns(["organizationId","modelsBindingConnectionId","createdAt","updatedAt"]).expression((t)=>t.selectFrom("organization_settings").select(["organizationId",t.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 Lki={};Gi(Lki,{up:()=>EJl,down:()=>vJl});async function EJl(i){await i.schema.alterTable("connections").addColumn("configuration_state","text").execute(),await i.schema.alterTable("connections").addColumn("configuration_scopes","text").execute()}async function vJl(i){await i.schema.alterTable("connections").dropColumn("configuration_state").execute(),await i.schema.alterTable("connections").dropColumn("configuration_scopes").execute()}var Cki={};Gi(Cki,{up:()=>wJl,down:()=>xJl});import{sql as rJl}from"kysely";async function wJl(i){await i.schema.alterTable("organization_settings").addColumn("sidebar_items",rJl`text`).execute()}async function xJl(i){await i.schema.alterTable("organization_settings").dropColumn("sidebar_items").execute()}var vzt=()=>{};var eki={};Gi(eki,{up:()=>DJl,down:()=>OJl});async function DJl(i){await i.schema.createTable("monitoring_logs").addColumn("id","text",(t)=>t.primaryKey()).addColumn("organization_id","text",(t)=>t.notNull().references("organization.id").onDelete("cascade")).addColumn("connection_id","text",(t)=>t.notNull().references("connections.id").onDelete("cascade")).addColumn("connection_title","text",(t)=>t.notNull()).addColumn("tool_name","text",(t)=>t.notNull()).addColumn("input","text",(t)=>t.notNull()).addColumn("output","text",(t)=>t.notNull()).addColumn("is_error","integer",(t)=>t.notNull()).addColumn("error_message","text").addColumn("duration_ms","integer",(t)=>t.notNull()).addColumn("timestamp","text",(t)=>t.notNull()).addColumn("user_id","text").addColumn("request_id","text",(t)=>t.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 OJl(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 Mki={};Gi(Mki,{up:()=>yJl,down:()=>XJl});import{sql as rR}from"kysely";async function yJl(i){await i.schema.createTable("events").addColumn("id","text",(t)=>t.primaryKey()).addColumn("organization_id","text",(t)=>t.notNull().references("organization.id").onDelete("cascade")).addColumn("type","text",(t)=>t.notNull()).addColumn("source","text",(t)=>t.notNull()).addColumn("specversion","text",(t)=>t.notNull().defaultTo("1.0")).addColumn("subject","text").addColumn("time","text",(t)=>t.notNull()).addColumn("datacontenttype","text",(t)=>t.notNull().defaultTo("application/json")).addColumn("dataschema","text").addColumn("data","text").addColumn("cron","varchar(255)").addColumn("status","text",(t)=>t.notNull().defaultTo("pending")).addColumn("attempts","integer",(t)=>t.notNull().defaultTo(0)).addColumn("last_error","text").addColumn("next_retry_at","text").addColumn("created_at","text",(t)=>t.notNull().defaultTo(rR`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(t)=>t.notNull().defaultTo(rR`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("event_subscriptions").addColumn("id","text",(t)=>t.primaryKey()).addColumn("organization_id","text",(t)=>t.notNull().references("organization.id").onDelete("cascade")).addColumn("connection_id","text",(t)=>t.notNull().references("connections.id").onDelete("cascade")).addColumn("publisher","text").addColumn("event_type","text",(t)=>t.notNull()).addColumn("filter","text").addColumn("enabled","integer",(t)=>t.notNull().defaultTo(1)).addColumn("created_at","text",(t)=>t.notNull().defaultTo(rR`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(t)=>t.notNull().defaultTo(rR`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("event_deliveries").addColumn("id","text",(t)=>t.primaryKey()).addColumn("event_id","text",(t)=>t.notNull()).addColumn("subscription_id","text",(t)=>t.notNull().references("event_subscriptions.id").onDelete("cascade")).addColumn("status","text",(t)=>t.notNull().defaultTo("pending")).addColumn("attempts","integer",(t)=>t.notNull().defaultTo(0)).addColumn("last_error","text").addColumn("delivered_at","text").addColumn("next_retry_at","text").addColumn("created_at","text",(t)=>t.notNull().defaultTo(rR`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 XJl(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 rzt=()=>{};var qki={};Gi(qki,{up:()=>JJl,down:()=>UJl});import{sql as NJl}from"kysely";async function JJl(i){await i.schema.dropTable("audit_logs").ifExists().execute()}async function UJl(i){await i.schema.createTable("audit_logs").ifNotExists().addColumn("id","text",(t)=>t.primaryKey()).addColumn("organizationId","text").addColumn("userId","text",(t)=>t.references("user.id").onDelete("set null")).addColumn("connectionId","text",(t)=>t.references("connections.id").onDelete("set null")).addColumn("toolName","text",(t)=>t.notNull()).addColumn("allowed","integer",(t)=>t.notNull()).addColumn("duration","integer").addColumn("timestamp","text",(t)=>t.notNull().defaultTo(NJl`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 wzt=()=>{};var Vki={};Gi(Vki,{up:()=>FJl,down:()=>TJl});import{sql as X0i}from"kysely";async function FJl(i){await i.schema.createTable("gateways").addColumn("id","text",(t)=>t.primaryKey()).addColumn("organization_id","text",(t)=>t.notNull().references("organization.id").onDelete("cascade")).addColumn("title","text",(t)=>t.notNull()).addColumn("description","text").addColumn("tool_selection_strategy","text").addColumn("status","text",(t)=>t.notNull().defaultTo("active")).addColumn("is_default","integer",(t)=>t.notNull().defaultTo(0)).addColumn("created_at","text",(t)=>t.notNull().defaultTo(X0i`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(t)=>t.notNull().defaultTo(X0i`CURRENT_TIMESTAMP`)).addColumn("created_by","text",(t)=>t.notNull().references("user.id").onDelete("cascade")).addColumn("updated_by","text").execute(),await i.schema.createTable("gateway_connections").addColumn("id","text",(t)=>t.primaryKey()).addColumn("gateway_id","text",(t)=>t.notNull().references("gateways.id").onDelete("cascade")).addColumn("connection_id","text",(t)=>t.notNull().references("connections.id").onDelete("cascade")).addColumn("selected_tools","text").addColumn("created_at","text",(t)=>t.notNull().defaultTo(X0i`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 X0i`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 TJl(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 xzt=()=>{};var aki={};Gi(aki,{up:()=>IJl,down:()=>ZJl});async function IJl(i){await i.schema.alterTable("gateways").addColumn("icon","text").execute()}async function ZJl(i){await i.schema.alterTable("gateways").dropColumn("icon").execute()}var mki={};Gi(mki,{up:()=>BJl,down:()=>QJl});import{sql as N0i}from"kysely";async function BJl(i){await i.schema.alterTable("gateways").addColumn("tool_selection_mode","text",(t)=>t.notNull().defaultTo("inclusion")).execute(),await N0i`
104708
104715
  UPDATE gateways
104709
104716
  SET tool_selection_mode = CASE
@@ -107815,12 +107822,12 @@ ${g}`,matchCount:$.length,totalLines:c.length}}return{result:d,matchCount:$.leng
107815
107822
  --- truncated (${l.length-n-f} more lines) ---
107816
107823
  `,h=[...$,g,...d].join(`
107817
107824
  `);if(qlt(h)<=Mlt)return h;n=Math.floor(n*0.6)}let c=Mlt*4;return i.slice(0,c)+`
107818
- --- truncated ---`}function qlt(i){if(!i)return 0;let t=i.match(KT0)?.length??0,u=i.length-t;return Math.ceil(u/bT0)+Math.ceil(t*1.5)}function vc(i){let t=typeof i==="string"?i:JSON.stringify(i);return qlt(t)}var rD=32000,Mlt=400,bT0=4,KT0;var u3=w(()=>{fn();KT0=/[\u3000-\u303f\u3040-\u309f\u30a0-\u30ff\u4e00-\u9fff\u3400-\u4dbf\uf900-\ufaff]/g});function myi(i,t,u){if(u?.isPlanMode){if(t===!0)return!1;return"hard-block"}if(i==="auto")return!1;return t!==!0}function RT0(i){let t=i.replace(/[^a-zA-Z0-9_.\-:]/g,"_");if(t.length===0||!/^[a-zA-Z_]/.test(t))t=`_${t}`;if(t.length>128)t=t.slice(0,128);return t}function dIu(i,t){let l=`${t.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"")}_`;return i.startsWith(l)?i.slice(l.length):i}function Vlt(i){return RT0(i).replace(/-/g,"_")}function LT0(i){let t=new Map;for(let n of i){let f=typeof n._meta?.gatewayClientId==="string"?n._meta.gatewayClientId:"",c=f?dIu(n.name,f):n.name,$=Vlt(c);t.set($,(t.get($)??0)+1)}let u=new Set,l=new Map;for(let n of i){let f=typeof n._meta?.gatewayClientId==="string"?n._meta.gatewayClientId:"",c=f?dIu(n.name,f):n.name,$=Vlt(c),_=(t.get($)??0)<=1?$:Vlt(`${f}_${c}`);if(u.has(_)){let g=_.slice(0,124),h=2;while(u.has(`${g}_${h}`))h++;_=`${g}_${h}`}u.add(_),l.set(n.name,_)}return l}function CT0(i){let u=i._meta?.ui?.visibility;if(u==null)return!0;if(typeof u==="string")return u==="model";if(Array.isArray(u))return u.includes("model");return!0}async function qz(i,t,u,l="auto",n={}){let f=!n.disableOutputTruncation,$=(await i.listTools()).tools.filter((g)=>(n.isToolVisible??CT0)(g)),d=LT0($),_=$.map((g)=>{let{name:h,title:E,description:v,inputSchema:r,annotations:x,_meta:O}=g,y=d.get(h);return[y,wl({title:E??h,description:v,inputSchema:m_(r),outputSchema:void 0,needsApproval:myi(l,x?.readOnlyHint,{isPlanMode:n.isPlanMode})!==!1,execute:async(X,N)=>{let U=performance.now(),J=!1,T;try{let Q=n.resolveArgs?await n.resolveArgs(X):X,B=await i.callTool({name:g.name,arguments:Q},aE,{signal:N.abortSignal,timeout:n.timeoutMs??HT0});J=Boolean(B?.isError);try{T=Buffer.byteLength(JSON.stringify(B),"utf8")}catch{T=void 0}return B}catch(Q){throw J=!0,Q}finally{let Q=performance.now()-U;if(u)u.write({type:"data-tool-metadata",id:N.toolCallId,data:{_meta:O,annotations:x,latencyMs:Q,outputBytes:T}});n.onToolCalled?.({toolName:g.name,toolSafeName:y,annotations:x,latencyMs:Q,isError:J})}},toModelOutput:async({output:X,toolCallId:N})=>{if(f){let J=vc(X.structuredContent??X.content);if(J>rD){let T=X.structuredContent??X.content,Q;try{Q=JSON.stringify(T,null,2)}catch{Q=String(T)}t.set(N,Q);let B=Ed(Q);return{type:"text",value:`Tool call ${N} output is too long to display (${J} tokens), use the read_tool_output tool.
107825
+ --- truncated ---`}function qlt(i){if(!i)return 0;let t=i.match(KT0)?.length??0,u=i.length-t;return Math.ceil(u/bT0)+Math.ceil(t*1.5)}function vc(i){let t=typeof i==="string"?i:JSON.stringify(i);return qlt(t)}var rD=32000,Mlt=400,bT0=4,KT0;var u3=w(()=>{fn();KT0=/[\u3000-\u303f\u3040-\u309f\u30a0-\u30ff\u4e00-\u9fff\u3400-\u4dbf\uf900-\ufaff]/g});function myi(i,t,u){if(u?.isPlanMode){if(t===!0)return!1;return"hard-block"}if(i==="auto")return!1;return t!==!0}function RT0(i){let t=i.replace(/[^a-zA-Z0-9_.\-:]/g,"_");if(t.length===0||!/^[a-zA-Z_]/.test(t))t=`_${t}`;if(t.length>128)t=t.slice(0,128);return t}function dIu(i,t){let l=`${t.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"")}_`;return i.startsWith(l)?i.slice(l.length):i}function Vlt(i){return RT0(i).replace(/-/g,"_")}function LT0(i){let t=new Map;for(let n of i){let f=typeof n._meta?.gatewayClientId==="string"?n._meta.gatewayClientId:"",c=f?dIu(n.name,f):n.name,$=Vlt(c);t.set($,(t.get($)??0)+1)}let u=new Set,l=new Map;for(let n of i){let f=typeof n._meta?.gatewayClientId==="string"?n._meta.gatewayClientId:"",c=f?dIu(n.name,f):n.name,$=Vlt(c),_=(t.get($)??0)<=1?$:Vlt(`${f}_${c}`);if(u.has(_)){let g=_.slice(0,124),h=2;while(u.has(`${g}_${h}`))h++;_=`${g}_${h}`}u.add(_),l.set(n.name,_)}return l}function CT0(i){let u=i._meta?.ui?.visibility;if(u==null)return!0;if(typeof u==="string")return u==="model";if(Array.isArray(u))return u.includes("model");return!0}async function qz(i,t,u,l="auto",n={}){let f=!n.disableOutputTruncation,c=await i.listTools(),$=c.tools.filter((g)=>(n.isToolVisible??CT0)(g)),d=LT0($),_=$.map((g)=>{let{name:h,title:E,description:v,inputSchema:r,annotations:x,_meta:O}=g,y=d.get(h);return[y,wl({title:E??h,description:v,inputSchema:m_(r),outputSchema:void 0,needsApproval:myi(l,x?.readOnlyHint,{isPlanMode:n.isPlanMode})!==!1,execute:async(X,N)=>{let U=performance.now(),J=!1,T;try{let Q=n.resolveArgs?await n.resolveArgs(X):X,B=await i.callTool({name:g.name,arguments:Q},aE,{signal:N.abortSignal,timeout:n.timeoutMs??HT0});J=Boolean(B?.isError);try{T=Buffer.byteLength(JSON.stringify(B),"utf8")}catch{T=void 0}return B}catch(Q){throw J=!0,Q}finally{let Q=performance.now()-U;if(u)u.write({type:"data-tool-metadata",id:N.toolCallId,data:{_meta:O,annotations:x,latencyMs:Q,outputBytes:T}});n.onToolCalled?.({toolName:g.name,toolSafeName:y,annotations:x,latencyMs:Q,isError:J})}},toModelOutput:async({output:X,toolCallId:N})=>{if(f){let J=vc(X.structuredContent??X.content);if(J>rD){let T=X.structuredContent??X.content,Q;try{Q=JSON.stringify(T,null,2)}catch{Q=String(T)}t.set(N,Q);let B=Ed(Q);return{type:"text",value:`Tool call ${N} output is too long to display (${J} tokens), use the read_tool_output tool.
107819
107826
 
107820
107827
  Preview:
107821
107828
  ${B}`}}}if(X.isError)return{type:"error-text",value:X.content.map((T)=>T.type==="text"?T.text:null).filter(Boolean).join(`
107822
107829
  `)||"Unknown error"};if("structuredContent"in X)return{type:"json",value:X.structuredContent};return{type:"text",value:X.content.map((J)=>{if(J.type==="text")return J.text;return JSON.stringify(J)}).join(`
107823
- `)}}})]});return{tools:Object.fromEntries(_),nameMap:d}}var HT0=120000;var Ta=w(()=>{Xf();fn();u3()});function oyi(i){let t=i.get("meshContext").organization;if(!t)throw Error("Organization context is required");if((t.slug??t.id)!==i.req.param("org"))throw Error("Organization mismatch");return t}async function alt(i){let t=i.get("meshContext"),u=t.auth?.user?.id;if(!u)throw new pu(401,{message:"Unauthorized"});let l=oyi(i),n=i.req.param("threadId");if(!n)throw new pu(400,{message:"Missing thread ID"});if(/[.*>\s]/.test(n))throw new pu(400,{message:"Invalid thread ID"});let f=await t.storage.threads.get(n);if(!f)throw new pu(404,{message:"Thread not found"});return{ctx:t,organization:l,thread:f,taskId:n,userId:u}}async function _Iu(i){let t=await alt(i);if(t.thread.created_by!==t.userId)throw new pu(403,{message:"Not authorized"});return t}var gIu=w(()=>{Zh()});import{z as rf}from"zod";var eT0,MT0,hIu;var EIu=w(()=>{gr();Iy();eT0=rf.looseObject({id:rf.string().optional(),role:rf.enum(["user","assistant","system"]),parts:rf.array(rf.record(rf.string(),rf.unknown())),metadata:rf.unknown().optional()}),MT0=rf.object({windowSize:rf.number().default(q2),thread_id:rf.string()}),hIu=rf.object({messages:rf.array(eT0).min(1).refine((i)=>i.filter((t)=>t.role!=="system").length===1,{message:"Expected exactly one non-system message"}),memory:MT0.optional(),tier:U3u.optional(),agent:rf.object({id:rf.string()}).loose(),stream:rf.boolean().optional(),temperature:rf.number().default(0.5),thread_id:rf.string().optional(),branch:rf.string().nullish(),toolApprovalLevel:rf.enum(["auto","readonly"]).default("auto"),sandboxProviderKind:rf.enum(["agent-sandbox","user-desktop","cluster"]).transform((i)=>i==="cluster"?"agent-sandbox":i).nullish().describe("Pinned on first message. Subsequent messages ignore this field (the thread row carries the pinned value)."),harnessId:rf.enum(["claude-code","codex","decopilot"]).nullish().describe("Pinned on first message. Subsequent messages ignore this field."),mode:rf.enum(["default","plan","web-search","gen-image"]).default("default")}).strict()});function syi(i){vIu.set(i.id,i)}function rIu(i){return vIu.get(i)}var vIu;var mlt=w(()=>{vIu=new Map});function olt(i,t,u){let l=rIu(i);if(!l)throw Error(`No harness factory registered for id "${i}". Available ids must be registered in apps/mesh/src/harnesses/index.ts.`);return l.create(u).stream(t)}var slt=w(()=>{mlt()});class plt{ctx;harnessId;constructor(i){this.ctx=i.ctx,this.harnessId=i.harnessId}dispatch(i){return olt(this.harnessId,i,this.ctx)}}var wIu=w(()=>{slt()});function xIu(i){return`link-dispatch/${i}`}function DIu(i){return i>786432}async function OIu(i){let t=await crypto.subtle.digest("SHA-256",i);return Array.from(new Uint8Array(t)).map((u)=>u.toString(16).padStart(2,"0")).join("")}var l3=786432;function Vz(i,t){return m5(i,t)}var pyi=w(()=>{_g()});function sIu(i){if(i==null)return"unknown error";if(typeof i==="string")return i;if(i instanceof Error)return i.message;return JSON.stringify(i)}var qIu="vercel.ai.error",qT0,yIu,XIu,an,VIu="AI_APICallError",aIu,VT0,NIu,JIu,Ia,mIu="AI_EmptyResponseBodyError",oIu,aT0,UIu,FIu,pYf,pIu="AI_InvalidArgumentError",iZu,mT0,TIu,IIu,i7i,tZu="AI_InvalidPromptError",uZu,oT0,ZIu,BIu,iPf,lZu="AI_InvalidResponseDataError",nZu,sT0,QIu,YIu,tPf,fZu="AI_JSONParseError",cZu,pT0,PIu,AIu,uPf,$Zu="AI_LoadAPIKeyError",dZu,iI0,GIu,WIu,t7i,_Zu="AI_LoadSettingError",gZu,tI0,kIu,jIu,lPf,hZu="AI_NoContentGeneratedError",EZu,uI0,SIu,zIu,nPf,vZu="AI_NoSuchModelError",rZu,lI0,bIu,KIu,j6,wZu="AI_TooManyEmbeddingValuesForCallError",xZu,nI0,HIu,RIu,fPf,DZu="AI_TypeValidationError",OZu,fI0,LIu,CIu,Za,yZu="AI_UnsupportedFunctionalityError",XZu,cI0,eIu,MIu,NZu;var n3=w(()=>{qT0=Symbol.for(qIu),an=class i extends(XIu=Error,yIu=qT0,XIu){constructor({name:t,message:u,cause:l}){super(u);this[yIu]=!0,this.name=t,this.cause=l}static isInstance(t){return i.hasMarker(t,qIu)}static hasMarker(t,u){let l=Symbol.for(u);return t!=null&&typeof t==="object"&&l in t&&typeof t[l]==="boolean"&&t[l]===!0}},aIu=`vercel.ai.error.${VIu}`,VT0=Symbol.for(aIu),Ia=class extends(JIu=an,NIu=VT0,JIu){constructor({message:i,url:t,requestBodyValues:u,statusCode:l,responseHeaders:n,responseBody:f,cause:c,isRetryable:$=l!=null&&(l===408||l===409||l===429||l>=500),data:d}){super({name:VIu,message:i,cause:c});this[NIu]=!0,this.url=t,this.requestBodyValues=u,this.statusCode=l,this.responseHeaders=n,this.responseBody=f,this.isRetryable=$,this.data=d}static isInstance(i){return an.hasMarker(i,aIu)}},oIu=`vercel.ai.error.${mIu}`,aT0=Symbol.for(oIu),pYf=class extends(FIu=an,UIu=aT0,FIu){constructor({message:i="Empty response body"}={}){super({name:mIu,message:i});this[UIu]=!0}static isInstance(i){return an.hasMarker(i,oIu)}};iZu=`vercel.ai.error.${pIu}`,mT0=Symbol.for(iZu),i7i=class extends(IIu=an,TIu=mT0,IIu){constructor({message:i,cause:t,argument:u}){super({name:pIu,message:i,cause:t});this[TIu]=!0,this.argument=u}static isInstance(i){return an.hasMarker(i,iZu)}},uZu=`vercel.ai.error.${tZu}`,oT0=Symbol.for(uZu),iPf=class extends(BIu=an,ZIu=oT0,BIu){constructor({prompt:i,message:t,cause:u}){super({name:tZu,message:`Invalid prompt: ${t}`,cause:u});this[ZIu]=!0,this.prompt=i}static isInstance(i){return an.hasMarker(i,uZu)}},nZu=`vercel.ai.error.${lZu}`,sT0=Symbol.for(nZu),tPf=class extends(YIu=an,QIu=sT0,YIu){constructor({data:i,message:t=`Invalid response data: ${JSON.stringify(i)}.`}){super({name:lZu,message:t});this[QIu]=!0,this.data=i}static isInstance(i){return an.hasMarker(i,nZu)}},cZu=`vercel.ai.error.${fZu}`,pT0=Symbol.for(cZu),uPf=class extends(AIu=an,PIu=pT0,AIu){constructor({text:i,cause:t}){super({name:fZu,message:`JSON parsing failed: Text: ${i}.
107830
+ `)}}})]});return{tools:Object.fromEntries(_),nameMap:d,rawTools:c.tools}}var HT0=120000;var Ta=w(()=>{Xf();fn();u3()});function oyi(i){let t=i.get("meshContext").organization;if(!t)throw Error("Organization context is required");if((t.slug??t.id)!==i.req.param("org"))throw Error("Organization mismatch");return t}async function alt(i){let t=i.get("meshContext"),u=t.auth?.user?.id;if(!u)throw new pu(401,{message:"Unauthorized"});let l=oyi(i),n=i.req.param("threadId");if(!n)throw new pu(400,{message:"Missing thread ID"});if(/[.*>\s]/.test(n))throw new pu(400,{message:"Invalid thread ID"});let f=await t.storage.threads.get(n);if(!f)throw new pu(404,{message:"Thread not found"});return{ctx:t,organization:l,thread:f,taskId:n,userId:u}}async function _Iu(i){let t=await alt(i);if(t.thread.created_by!==t.userId)throw new pu(403,{message:"Not authorized"});return t}var gIu=w(()=>{Zh()});import{z as rf}from"zod";var eT0,MT0,hIu;var EIu=w(()=>{gr();Iy();eT0=rf.looseObject({id:rf.string().optional(),role:rf.enum(["user","assistant","system"]),parts:rf.array(rf.record(rf.string(),rf.unknown())),metadata:rf.unknown().optional()}),MT0=rf.object({windowSize:rf.number().default(q2),thread_id:rf.string()}),hIu=rf.object({messages:rf.array(eT0).min(1).refine((i)=>i.filter((t)=>t.role!=="system").length===1,{message:"Expected exactly one non-system message"}),memory:MT0.optional(),tier:U3u.optional(),agent:rf.object({id:rf.string()}).loose(),stream:rf.boolean().optional(),temperature:rf.number().default(0.5),thread_id:rf.string().optional(),branch:rf.string().nullish(),toolApprovalLevel:rf.enum(["auto","readonly"]).default("auto"),sandboxProviderKind:rf.enum(["agent-sandbox","user-desktop","cluster"]).transform((i)=>i==="cluster"?"agent-sandbox":i).nullish().describe("Pinned on first message. Subsequent messages ignore this field (the thread row carries the pinned value)."),harnessId:rf.enum(["claude-code","codex","decopilot"]).nullish().describe("Pinned on first message. Subsequent messages ignore this field."),mode:rf.enum(["default","plan","web-search","gen-image"]).default("default")}).strict()});function syi(i){vIu.set(i.id,i)}function rIu(i){return vIu.get(i)}var vIu;var mlt=w(()=>{vIu=new Map});function olt(i,t,u){let l=rIu(i);if(!l)throw Error(`No harness factory registered for id "${i}". Available ids must be registered in apps/mesh/src/harnesses/index.ts.`);return l.create(u).stream(t)}var slt=w(()=>{mlt()});class plt{ctx;harnessId;constructor(i){this.ctx=i.ctx,this.harnessId=i.harnessId}dispatch(i){return olt(this.harnessId,i,this.ctx)}}var wIu=w(()=>{slt()});function xIu(i){return`link-dispatch/${i}`}function DIu(i){return i>786432}async function OIu(i){let t=await crypto.subtle.digest("SHA-256",i);return Array.from(new Uint8Array(t)).map((u)=>u.toString(16).padStart(2,"0")).join("")}var l3=786432;function Vz(i,t){return m5(i,t)}var pyi=w(()=>{_g()});function sIu(i){if(i==null)return"unknown error";if(typeof i==="string")return i;if(i instanceof Error)return i.message;return JSON.stringify(i)}var qIu="vercel.ai.error",qT0,yIu,XIu,an,VIu="AI_APICallError",aIu,VT0,NIu,JIu,Ia,mIu="AI_EmptyResponseBodyError",oIu,aT0,UIu,FIu,pYf,pIu="AI_InvalidArgumentError",iZu,mT0,TIu,IIu,i7i,tZu="AI_InvalidPromptError",uZu,oT0,ZIu,BIu,iPf,lZu="AI_InvalidResponseDataError",nZu,sT0,QIu,YIu,tPf,fZu="AI_JSONParseError",cZu,pT0,PIu,AIu,uPf,$Zu="AI_LoadAPIKeyError",dZu,iI0,GIu,WIu,t7i,_Zu="AI_LoadSettingError",gZu,tI0,kIu,jIu,lPf,hZu="AI_NoContentGeneratedError",EZu,uI0,SIu,zIu,nPf,vZu="AI_NoSuchModelError",rZu,lI0,bIu,KIu,j6,wZu="AI_TooManyEmbeddingValuesForCallError",xZu,nI0,HIu,RIu,fPf,DZu="AI_TypeValidationError",OZu,fI0,LIu,CIu,Za,yZu="AI_UnsupportedFunctionalityError",XZu,cI0,eIu,MIu,NZu;var n3=w(()=>{qT0=Symbol.for(qIu),an=class i extends(XIu=Error,yIu=qT0,XIu){constructor({name:t,message:u,cause:l}){super(u);this[yIu]=!0,this.name=t,this.cause=l}static isInstance(t){return i.hasMarker(t,qIu)}static hasMarker(t,u){let l=Symbol.for(u);return t!=null&&typeof t==="object"&&l in t&&typeof t[l]==="boolean"&&t[l]===!0}},aIu=`vercel.ai.error.${VIu}`,VT0=Symbol.for(aIu),Ia=class extends(JIu=an,NIu=VT0,JIu){constructor({message:i,url:t,requestBodyValues:u,statusCode:l,responseHeaders:n,responseBody:f,cause:c,isRetryable:$=l!=null&&(l===408||l===409||l===429||l>=500),data:d}){super({name:VIu,message:i,cause:c});this[NIu]=!0,this.url=t,this.requestBodyValues=u,this.statusCode=l,this.responseHeaders=n,this.responseBody=f,this.isRetryable=$,this.data=d}static isInstance(i){return an.hasMarker(i,aIu)}},oIu=`vercel.ai.error.${mIu}`,aT0=Symbol.for(oIu),pYf=class extends(FIu=an,UIu=aT0,FIu){constructor({message:i="Empty response body"}={}){super({name:mIu,message:i});this[UIu]=!0}static isInstance(i){return an.hasMarker(i,oIu)}};iZu=`vercel.ai.error.${pIu}`,mT0=Symbol.for(iZu),i7i=class extends(IIu=an,TIu=mT0,IIu){constructor({message:i,cause:t,argument:u}){super({name:pIu,message:i,cause:t});this[TIu]=!0,this.argument=u}static isInstance(i){return an.hasMarker(i,iZu)}},uZu=`vercel.ai.error.${tZu}`,oT0=Symbol.for(uZu),iPf=class extends(BIu=an,ZIu=oT0,BIu){constructor({prompt:i,message:t,cause:u}){super({name:tZu,message:`Invalid prompt: ${t}`,cause:u});this[ZIu]=!0,this.prompt=i}static isInstance(i){return an.hasMarker(i,uZu)}},nZu=`vercel.ai.error.${lZu}`,sT0=Symbol.for(nZu),tPf=class extends(YIu=an,QIu=sT0,YIu){constructor({data:i,message:t=`Invalid response data: ${JSON.stringify(i)}.`}){super({name:lZu,message:t});this[QIu]=!0,this.data=i}static isInstance(i){return an.hasMarker(i,nZu)}},cZu=`vercel.ai.error.${fZu}`,pT0=Symbol.for(cZu),uPf=class extends(AIu=an,PIu=pT0,AIu){constructor({text:i,cause:t}){super({name:fZu,message:`JSON parsing failed: Text: ${i}.
107824
107831
  Error message: ${sIu(t)}`,cause:t});this[PIu]=!0,this.text=i}static isInstance(i){return an.hasMarker(i,cZu)}},dZu=`vercel.ai.error.${$Zu}`,iI0=Symbol.for(dZu),t7i=class extends(WIu=an,GIu=iI0,WIu){constructor({message:i}){super({name:$Zu,message:i});this[GIu]=!0}static isInstance(i){return an.hasMarker(i,dZu)}},gZu=`vercel.ai.error.${_Zu}`,tI0=Symbol.for(gZu),lPf=class extends(jIu=an,kIu=tI0,jIu){constructor({message:i}){super({name:_Zu,message:i});this[kIu]=!0}static isInstance(i){return an.hasMarker(i,gZu)}},EZu=`vercel.ai.error.${hZu}`,uI0=Symbol.for(EZu),nPf=class extends(zIu=an,SIu=uI0,zIu){constructor({message:i="No content generated."}={}){super({name:hZu,message:i});this[SIu]=!0}static isInstance(i){return an.hasMarker(i,EZu)}},rZu=`vercel.ai.error.${vZu}`,lI0=Symbol.for(rZu),j6=class extends(KIu=an,bIu=lI0,KIu){constructor({errorName:i=vZu,modelId:t,modelType:u,message:l=`No such ${u}: ${t}`}){super({name:i,message:l});this[bIu]=!0,this.modelId=t,this.modelType=u}static isInstance(i){return an.hasMarker(i,rZu)}},xZu=`vercel.ai.error.${wZu}`,nI0=Symbol.for(xZu),fPf=class extends(RIu=an,HIu=nI0,RIu){constructor(i){super({name:wZu,message:`Too many values for a single embedding call. The ${i.provider} model "${i.modelId}" can only embed up to ${i.maxEmbeddingsPerCall} values per call, but ${i.values.length} values were provided.`});this[HIu]=!0,this.provider=i.provider,this.modelId=i.modelId,this.maxEmbeddingsPerCall=i.maxEmbeddingsPerCall,this.values=i.values}static isInstance(i){return an.hasMarker(i,xZu)}},OZu=`vercel.ai.error.${DZu}`,fI0=Symbol.for(OZu),Za=class i extends(CIu=an,LIu=fI0,CIu){constructor({value:t,cause:u,context:l}){let n="Type validation failed";if(l==null?void 0:l.field)n+=` for ${l.field}`;if((l==null?void 0:l.entityName)||(l==null?void 0:l.entityId)){n+=" (";let f=[];if(l.entityName)f.push(l.entityName);if(l.entityId)f.push(`id: "${l.entityId}"`);n+=f.join(", "),n+=")"}super({name:DZu,message:`${n}: Value: ${JSON.stringify(t)}.
107825
107832
  Error message: ${sIu(u)}`,cause:u});this[LIu]=!0,this.value=t,this.context=l}static isInstance(t){return an.hasMarker(t,OZu)}static wrap({value:t,cause:u,context:l}){var n,f,c;if(i.isInstance(u)&&u.value===t&&((n=u.context)==null?void 0:n.field)===(l==null?void 0:l.field)&&((f=u.context)==null?void 0:f.entityName)===(l==null?void 0:l.entityName)&&((c=u.context)==null?void 0:c.entityId)===(l==null?void 0:l.entityId))return u;return new i({value:t,cause:u,context:l})}},XZu=`vercel.ai.error.${yZu}`,cI0=Symbol.for(XZu),NZu=class extends(MIu=an,eIu=cI0,MIu){constructor({functionality:i,message:t=`'${i}' functionality not supported.`}){super({name:yZu,message:t});this[eIu]=!0,this.functionality=i}static isInstance(i){return an.hasMarker(i,XZu)}}});import*as l7i from"zod/v4";import{ZodFirstPartyTypeKind as Q0}from"zod/v3";import{ZodFirstPartyTypeKind as hI0}from"zod/v3";import{ZodFirstPartyTypeKind as u7i}from"zod/v3";function n0t(i){if(i.type==="object"||Array.isArray(i.type)&&i.type.includes("object")){i.additionalProperties=!1;let{properties:u}=i;if(u!=null)for(let l of Object.keys(u))u[l]=oP(u[l])}if(i.items!=null)i.items=Array.isArray(i.items)?i.items.map(oP):oP(i.items);if(i.anyOf!=null)i.anyOf=i.anyOf.map(oP);if(i.allOf!=null)i.allOf=i.allOf.map(oP);if(i.oneOf!=null)i.oneOf=i.oneOf.map(oP);let{definitions:t}=i;if(t!=null)for(let u of Object.keys(t))t[u]=oP(t[u]);return i}function oP(i){if(typeof i==="boolean")return i;return n0t(i)}function rg(){return{}}function EI0(i,t){var u,l,n;let f={type:"array"};if(((u=i.type)==null?void 0:u._def)&&((n=(l=i.type)==null?void 0:l._def)==null?void 0:n.typeName)!==hI0.ZodAny)f.items=mn(i.type._def,{...t,currentPath:[...t.currentPath,"items"]});if(i.minLength)f.minItems=i.minLength.value;if(i.maxLength)f.maxItems=i.maxLength.value;if(i.exactLength)f.minItems=i.exactLength.value,f.maxItems=i.exactLength.value;return f}function vI0(i){let t={type:"integer",format:"int64"};if(!i.checks)return t;for(let u of i.checks)switch(u.kind){case"min":if(u.inclusive)t.minimum=u.value;else t.exclusiveMinimum=u.value;break;case"max":if(u.inclusive)t.maximum=u.value;else t.exclusiveMaximum=u.value;break;case"multipleOf":t.multipleOf=u.value;break}return t}function rI0(){return{type:"boolean"}}function BZu(i,t){return mn(i.type._def,t)}function QZu(i,t,u){let l=u!=null?u:t.dateStrategy;if(Array.isArray(l))return{anyOf:l.map((n,f)=>QZu(i,t,n))};switch(l){case"string":case"format:date-time":return{type:"string",format:"date-time"};case"format:date":return{type:"string",format:"date"};case"integer":return xI0(i)}}function DI0(i,t){return{...mn(i.innerType._def,t),default:i.defaultValue()}}function OI0(i,t){return t.effectStrategy==="input"?mn(i.schema._def,t):rg()}function yI0(i){return{type:"string",enum:Array.from(i.values)}}function NI0(i,t){let u=[mn(i.left._def,{...t,currentPath:[...t.currentPath,"allOf","0"]}),mn(i.right._def,{...t,currentPath:[...t.currentPath,"allOf","1"]})].filter((n)=>!!n),l=[];return u.forEach((n)=>{if(XI0(n))l.push(...n.allOf);else{let f=n;if("additionalProperties"in n&&n.additionalProperties===!1){let{additionalProperties:c,...$}=n;f=$}l.push(f)}}),l.length?{allOf:l}:void 0}function JI0(i){let t=typeof i.value;if(t!=="bigint"&&t!=="number"&&t!=="boolean"&&t!=="string")return{type:Array.isArray(i.value)?"array":"object"};return{type:t==="bigint"?"integer":t,const:i.value}}function YZu(i,t){let u={type:"string"};if(i.checks)for(let l of i.checks)switch(l.kind){case"min":u.minLength=typeof u.minLength==="number"?Math.max(u.minLength,l.value):l.value;break;case"max":u.maxLength=typeof u.maxLength==="number"?Math.min(u.maxLength,l.value):l.value;break;case"email":switch(t.emailStrategy){case"format:email":hE(u,"email",l.message,t);break;case"format:idn-email":hE(u,"idn-email",l.message,t);break;case"pattern:zod":vd(u,gE.email,l.message,t);break}break;case"url":hE(u,"uri",l.message,t);break;case"uuid":hE(u,"uuid",l.message,t);break;case"regex":vd(u,l.regex,l.message,t);break;case"cuid":vd(u,gE.cuid,l.message,t);break;case"cuid2":vd(u,gE.cuid2,l.message,t);break;case"startsWith":vd(u,RegExp(`^${t0t(l.value,t)}`),l.message,t);break;case"endsWith":vd(u,RegExp(`${t0t(l.value,t)}$`),l.message,t);break;case"datetime":hE(u,"date-time",l.message,t);break;case"date":hE(u,"date",l.message,t);break;case"time":hE(u,"time",l.message,t);break;case"duration":hE(u,"duration",l.message,t);break;case"length":u.minLength=typeof u.minLength==="number"?Math.max(u.minLength,l.value):l.value,u.maxLength=typeof u.maxLength==="number"?Math.min(u.maxLength,l.value):l.value;break;case"includes":{vd(u,RegExp(t0t(l.value,t)),l.message,t);break}case"ip":{if(l.version!=="v6")hE(u,"ipv4",l.message,t);if(l.version!=="v4")hE(u,"ipv6",l.message,t);break}case"base64url":vd(u,gE.base64url,l.message,t);break;case"jwt":vd(u,gE.jwt,l.message,t);break;case"cidr":{if(l.version!=="v6")vd(u,gE.ipv4Cidr,l.message,t);if(l.version!=="v4")vd(u,gE.ipv6Cidr,l.message,t);break}case"emoji":vd(u,gE.emoji(),l.message,t);break;case"ulid":{vd(u,gE.ulid,l.message,t);break}case"base64":{switch(t.base64Strategy){case"format:binary":{hE(u,"binary",l.message,t);break}case"contentEncoding:base64":{u.contentEncoding="base64";break}case"pattern:zod":{vd(u,gE.base64,l.message,t);break}}break}case"nanoid":vd(u,gE.nanoid,l.message,t);case"toLowerCase":case"toUpperCase":case"trim":break;default:}return u}function t0t(i,t){return t.patternStrategy==="escape"?FI0(i):i}function FI0(i){let t="";for(let u=0;u<i.length;u++){if(!UI0.has(i[u]))t+="\\";t+=i[u]}return t}function hE(i,t,u,l){var n;if(i.format||((n=i.anyOf)==null?void 0:n.some((f)=>f.format))){if(!i.anyOf)i.anyOf=[];if(i.format)i.anyOf.push({format:i.format}),delete i.format;i.anyOf.push({format:t,...u&&l.errorMessages&&{errorMessage:{format:u}}})}else i.format=t}function vd(i,t,u,l){var n;if(i.pattern||((n=i.allOf)==null?void 0:n.some((f)=>f.pattern))){if(!i.allOf)i.allOf=[];if(i.pattern)i.allOf.push({pattern:i.pattern}),delete i.pattern;i.allOf.push({pattern:TZu(t,l),...u&&l.errorMessages&&{errorMessage:{pattern:u}}})}else i.pattern=TZu(t,l)}function TZu(i,t){var u;if(!t.applyRegexFlags||!i.flags)return i.source;let l={i:i.flags.includes("i"),m:i.flags.includes("m"),s:i.flags.includes("s")},n=l.i?i.source.toLowerCase():i.source,f="",c=!1,$=!1,d=!1;for(let _=0;_<n.length;_++){if(c){f+=n[_],c=!1;continue}if(l.i){if($){if(n[_].match(/[a-z]/)){if(d)f+=n[_],f+=`${n[_-2]}-${n[_]}`.toUpperCase(),d=!1;else if(n[_+1]==="-"&&((u=n[_+2])==null?void 0:u.match(/[a-z]/)))f+=n[_],d=!0;else f+=`${n[_]}${n[_].toUpperCase()}`;continue}}else if(n[_].match(/[a-z]/)){f+=`[${n[_]}${n[_].toUpperCase()}]`;continue}}if(l.m){if(n[_]==="^"){f+=`(^|(?<=[\r
107826
107833
  ]))`;continue}else if(n[_]==="$"){f+=`($|(?=[\r
@@ -108117,7 +108124,7 @@ Guidelines:
108117
108124
  }
108118
108125
  return { consoleLogs, errors, evaluateResult };
108119
108126
  }
108120
- `,r=await fetch(`${pP}/function?token=${encodeURIComponent(_)}`,{method:"POST",headers:{"Content-Type":"application/javascript"},body:v});if(!r.ok){let X=await r.text().catch(()=>"Unknown error");return{success:!1,error:`Browserless function call failed (${r.status}): ${X}`,url:g.url}}let x=await r.json().catch(async()=>{return{error:`Browserless returned non-JSON response: ${(await r.text().catch(()=>"")).slice(0,200)}`}}),O=JSON.stringify(x,null,2);u.set($.toolCallId,O);let y=vc(O);if(!("error"in x)&&y>rD&&l){let X=`inspect-pages/${crypto.randomUUID()}.json`;return await l.put(X,new TextEncoder().encode(O),{contentType:"application/json"}),{success:!0,uri:z4(X),preview:Ed(O),url:g.url,tokenCount:y,consoleLogCount:x.consoleLogs?.length??0,errorCount:x.errors?.length??0,hasEvaluateResult:x.evaluateResult!=null}}return{success:!("error"in x),...x,url:g.url,tokenCount:y}}finally{i.write({type:"data-tool-metadata",id:$.toolCallId,data:{latencyMs:performance.now()-d}})}}})}function tP0(){return wl({description:"Search the web and synthesize a comprehensive research report. This tool is only available in cluster Decopilot.",inputSchema:hi(pY0),execute:async(i)=>{throw Error("web_search is only available in cluster Decopilot.")}})}function uP0(){return wl({description:"Record what the user is durably working toward (their goals/interests). This tool is only available in cluster Decopilot.",inputSchema:hi(iP0),execute:async(i)=>{throw Error("update_interests is only available in cluster Decopilot.")}})}function H7i(i){let{writer:t,toolOutputMap:u,objectStorage:l,pendingImages:n,imageTool:f,includeUnavailableClusterOnlyTools:c}=i,$={user_ask:A7i,todo_write:G7i,propose_plan:k7i,read_tool_output:ayi({toolOutputMap:u})};if(c)$.web_search=tP0(),$.update_interests=uP0();if(f)$.generate_image=S7i(t,{...f,objectStorage:l});if(process.env.BROWSERLESS_TOKEN){if($.scrape_url=AYu(t,{toolOutputMap:u,objectStorage:l,kind:"scrape"}),$.inspect_page=AYu(t,{toolOutputMap:u,objectStorage:l,kind:"inspect"}),n)$.take_screenshot=z7i(t,{objectStorage:l,toolOutputMap:u,pendingImages:n})}return $}var pY0,iP0;var lnt=w(()=>{fn();int();tnt();unt();u3();b7i();pY0=xg.object({query:xg.string().max(1e4).describe("The research query. Be specific about what information you need.")}),iP0=xg.object({interests:xg.array(xg.object({title:xg.string().max(120).describe("Short noun phrase, e.g. 'Learning Rust'"),summary:xg.string().max(500).describe("One or two sentences of context, including any progress")})).max(10)})});async function nP0(i,t,u){let{provider:l,imageProvider:n,deepResearchProvider:f,organization:c,models:$,toolApprovalLevel:d="auto",isPlanMode:_=!1,toolOutputMap:g,pendingImages:h,passthroughClient:E,vmContext:v,htmlPageBuffer:r,deckBuffer:x,taskId:O,agentId:y,onChildUsage:X}=t,N={isPlanMode:_},U=u.auth?.user?.id,J=H7i({writer:i,toolOutputMap:g,passthroughClient:E,toolApprovalLevel:d,isPlanMode:_,objectStorage:u.objectStorage});if(U)J.update_interests=EYu({write:async(B)=>{await u.storage.interests.setForAgent(B.orgId,B.agentId,B.userId,{interests:B.interests})},orgId:c.id,agentId:y,userId:U});let T=myi(d,!1,N)!==!1,Q;if(v){let B=await AQu(u,{virtualMcpId:v.virtualMcpId,branch:v.branch,userId:v.userId});Q=T7i({fs:B,htmlPageBuffer:r,deckBuffer:x,toolOutputMap:g,needsApproval:T,pendingImages:h,ctx:u,threadId:v.threadId,virtualMcpId:v.virtualMcpId}),Object.assign(J,Q)}if(l)J.subtask=p0t(i,{provider:l,organization:c,models:$,self:{id:y},needsApproval:myi(d,!1,N)!==!1,onChildUsage:X,vmTools:Q},u);if(n&&$.image&&u.objectStorage)J.generate_image=xYu(i,{provider:n,imageModelInfo:$.image,objectStorage:u.objectStorage,allowHttpExternalUrls:jt().localMode});if(f&&$.deepResearch){let B=UYu({provider:f,deepResearchModelInfo:$.deepResearch,ctx:u});J.web_search=yYu(i,{researchJob:B,toolOutputMap:g,taskId:O})}if(process.env.BROWSERLESS_TOKEN){let B={baseUrl:pP,token:process.env.BROWSERLESS_TOKEN};if(J.take_screenshot=TYu(i,{objectStorage:u.objectStorage,toolOutputMap:g,pendingImages:h}),u.objectStorage)J.scrape_url=BYu(i,{browserless:B,objectStorage:u.objectStorage,toolOutputMap:g}),J.inspect_page=YYu(i,{browserless:B,objectStorage:u.objectStorage,toolOutputMap:g})}return J}function fP0(i,t,u){let l=t.organization.id,n=u.auth?.user?.id,f={};for(let[c,$]of Object.entries(i)){let d=$,_=d.execute;if(typeof _!=="function"){f[c]=$;continue}let g=lP0[c],h=_.constructor?.name==="AsyncGeneratorFunction",E=(r,x)=>{if(!l||!n)return;Xu.capture({distinctId:n,event:"tool_called",groups:{organization:l},properties:{organization_id:l,tool_source:"builtin",tool_name:c,tool_safe_name:c,read_only:g?.readOnly??null,destructive:g?.destructive??null,idempotent:null,open_world:null,latency_ms:Math.round(r),is_error:x}})},v=h?async function*(r,x){let O=performance.now(),y=!1;try{yield*_.call(d,r,x)}catch(X){throw y=!0,X}finally{E(performance.now()-O,y)}}:async(r,x)=>{let O=performance.now(),y=!1;try{return await _.call(d,r,x)}catch(X){throw y=!0,X}finally{E(performance.now()-O,y)}};f[c]={...d,execute:v}}return f}async function GYu(i,t,u){let l=await nP0(i,t,u),n=fP0(l,t,u);if(!t.isPlanMode){let{propose_plan:f,...c}=n;return c}return n}function mQu(i){let{ctx:t,writer:u,toolOutputMap:l,subtaskParams:n,planMode:f}=i,c={user_ask:A7i,todo_write:G7i,propose_plan:k7i,read_tool_output:ayi({toolOutputMap:l})};if(n.provider)c.subtask=p0t(u,n,t);return c}var lP0;var L0t=w(()=>{U1();Ta();u3();z0t();GQu();hYu();int();tnt();vYu();unt();DYu();XYu();FYu();IYu();QYu();PYu();lnt();p0();lP0={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},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}}});function $P0(i,t,u){if(!u)return i;let l=new Set;for(let[n,f]of t)if(u.has(n)||u.has(f))l.add(f);return Object.fromEntries(Object.entries(i).filter(([n])=>l.has(n)))}function dP0(i,t){if(!t)return i;return Object.fromEntries(Object.entries(i).filter(([u])=>cP0.has(u)||t.has(u)))}async function WYu(i,t,u){let l=t.organization,n=i.mode==="plan",f=i.toolAllowlist&&i.toolAllowlist.length>0?new Set(i.toolAllowlist):null,c=await u.mcpForAgent(i.agent.id,{superUser:!0,listTimeoutMs:1000});try{let{tools:$,nameMap:d}=await qz(c,u.toolOutputMap,u.writer,i.toolApprovalLevel,{isPlanMode:n,timeoutMs:O$i,resolveArgs:u.resolveArgs,onToolCalled:u.onToolCalled}),_=$P0($,d,f),h=!i.virtualMcp.metadata.githubRepo,E=i.user.id?{virtualMcpId:i.agent.id,branch:h?"ephemeral":i.branch??`thread:${u.threadId}`,userId:i.user.id,threadId:u.threadId}:null,v=await GYu(u.writer,{provider:u.provider,imageProvider:u.imageProvider,deepResearchProvider:u.deepResearchProvider,organization:l,models:i.models,toolApprovalLevel:i.toolApprovalLevel,isPlanMode:n,toolOutputMap:u.toolOutputMap,pendingImages:u.pendingImages,passthroughClient:c,vmContext:E,htmlPageBuffer:u.htmlPageBuffer,deckBuffer:u.deckBuffer,taskId:u.threadId,agentId:i.agent.id,onChildUsage:u.onChildUsage},t),r=dP0(v,f),x=(await c.listTools()).tools,O=[],y=new Map;for(let J of x){let T=d.get(J.name);if(!T)continue;if(f&&!f.has(J.name)&&!f.has(T))continue;let Q=typeof J._meta?.gatewayClientId==="string"?J._meta.gatewayClientId:"unknown";if(O.push({rawName:J.name,safeName:T,connectionId:Q}),n)y.set(T,{readOnlyHint:J.annotations?.readOnlyHint})}let X=c.getConnectionTitleMap(),N=c.getInstructions();return{tools:{..._,...r},nameMap:d,passthroughTools:_,builtInTools:r,passthroughToolList:x,connectionsBlockTools:O,toolAnnotations:y,vmContext:E,connectionTitleMap:X,serverInstructions:N,passthroughClient:c,close:async()=>{await c.close().catch(()=>{})}}}catch($){throw await c.close().catch(()=>{}),$}}var cP0;var kYu=w(()=>{L0t();Ta();Ty();cP0=new Set(["read_tool_output","enable_tool","open_in_agent","todo_write","update_interests"])});function nnt(i){let t=_P0.exec(i);if(!t)return null;return{path:i,name:t[2],kind:t[1].toLowerCase()==="decks"?"deck":"page"}}function jYu(i,t){if(!t)return null;let u=i.replace(/^\.\//,""),l=`org/${t}/`,n=u.indexOf(l);if(n!==0&&(n<0||u[n-1]!=="/"))return null;return nnt(u.slice(n+l.length))}var _P0;var fnt=w(()=>{_P0=/^(decks|pages)\/([a-z0-9][a-z0-9._-]*)\.html$/i});function SYu(i){let t=i.orgFs,u=i.organization?.slug??null,l=i.auth?.user?.id??null;if(!t||!u||!l)return hP0;let n=ez(u),f=new Map;return{enqueue(c,$){let d=jYu(c,n);if(!d)return;f.set(d.path,$)},async flush(){if(f.size===0)return;let c=[...f.entries()];f.clear(),await Promise.allSettled(c.map(async([$,d])=>{try{await t.write(gP0,$,d,{actor:l,contentType:"text/html; charset=utf-8"})}catch(_){console.error("[deck-buffer] org-fs write failed",{path:$},_)}}))}}}var gP0="home",hP0;var zYu=w(()=>{kyi();fnt();hP0={enqueue:()=>{},flush:async()=>{}}});function bYu(i,t){let u=i.orgFs,l=i.organization?.slug??null;if(!u||!l)return{sweep:async()=>{}};let n=ez(l),f=u.latestSeq(cnt).catch((h)=>{return console.error("[deck-watcher] cursor snapshot failed",h),null}),c=null,$=!1,d=!1,_=new Map;return{sweep:async()=>{if(d)return;d=!0;try{if(!$)c=await f,$=!0;if(c===null)return;let h=new Map;for(let E=0;E<20;E++){let v=await u.changes(cnt,c,EP0);for(let r of v.entries){if(r.kind!=="file"||r.deletedAt)continue;let x=nnt(r.path);if(!x)continue;if(r.contentHash){if(_.get(x.path)===r.contentHash)continue;_.set(x.path,r.contentHash)}h.set(x.path,{volume:cnt,path:x.path,name:x.name,kind:x.kind,mountPath:`org/${n}/${x.path}`})}if(c=v.cursor,!v.hasMore)break}for(let E of h.values())t.write({type:"data-deck-updated",id:E.path,data:E})}catch(h){console.error("[deck-watcher] sweep failed",h)}finally{d=!1}}}}var cnt="home",EP0=200;var KYu=w(()=>{kyi();fnt()});function rP0(i){let t=i.replace(/^\.?\//,""),u=vP0.exec(t);if(!u)return null;return{slug:u[1],key:t}}function HYu(i,t,u){let l=u.split("/").map(encodeURIComponent).join("/");return`${i}/api/${encodeURIComponent(t)}/files/${l}`}function R7i(i){let t=new Map,u=i.logPrefix??"html-page-buffer";return{enqueue:(f,c)=>{let $=rP0(f);if(!$||!i.orgSlug)return null;return t.set($.key,{slug:$.slug,key:$.key,content:c}),{slug:$.slug,key:$.key,url:HYu(i.baseUrl,i.orgSlug,$.key),bytes:new TextEncoder().encode(c).byteLength}},flush:async()=>{if(t.size===0)return;let f=Array.from(t.values());if(t.clear(),!i.orgSlug||!i.storage){console.warn(`[${u}] flush skipped \u2014 storage unavailable`,{pendingCount:f.length,hasOrgSlug:Boolean(i.orgSlug),hasStorage:Boolean(i.storage)});return}await Promise.allSettled(f.map(async(c)=>{try{let $=new TextEncoder().encode(c.content);await i.storage.put(c.key,$,{contentType:"text/html; charset=utf-8"}),i.writer.write({type:"data-html-page-published",id:c.slug,data:{slug:c.slug,key:c.key,url:HYu(i.baseUrl,i.orgSlug,c.key),bytes:$.byteLength}})}catch($){console.error(`[${u}] PUT failed`,{key:c.key},$)}}))}}}var vP0;var $nt=w(()=>{vP0=/^pages\/([a-z0-9][a-z0-9._-]*)\.html$/i});function wP0(i){if(i.objectStorage)return i.objectStorage;let t=i.organization?.id;if(!t)return null;let u=S$();return u?T_(u,t):new Ev(t,i.baseUrl)}function RYu(i,t){return R7i({storage:wP0(i),baseUrl:i.baseUrl,orgSlug:i.organization?.slug,writer:t})}var LYu=w(()=>{gC();jw();$nt()});async function xP0(i,t,u){let l=await P7i({kind:u.kind,ctx:i,organization:t,virtualMcp:u.virtualMcp,mcpClient:u.mcpClient,provider:u.provider,models:u.models,messages:u.messages,abortSignal:u.abortSignal,temperature:u.temperature,planMode:u.planMode,isDecopilot:u.isDecopilot,systemAgentInstructions:u.systemAgentInstructions,currentThreadId:u.currentThreadId,user:u.user,userContext:u.userContext,writer:u.writer,subtaskParams:{provider:u.provider,organization:t,models:u.models},prepareStep:u.prepareStep,onStepFinish:u.onStepFinish,passthroughClient:u.passthroughClient,connectionsData:u.connectionsData,extraTools:u.extraTools,additionalSystemMessages:u.additionalSystemMessages,stepLimit:u.stepLimit});return{result:l.result,error:l.error,span:l.span,assembledSystemMessages:l.assembledSystemMessages}}function CYu(i){let{ctx:t,organization:u,modelRuntime:l,sideChannel:n,cleanup:f}=i,c=RYu(t,n.writer),$=bYu(t,n.writer),d=SYu(t);return{toolRuntime:{buildEnvironmentTools:async({input:h,onChildUsage:E})=>{let v=new Map,r=[],{resolveArgs:x,onToolCalled:O}=Q7i(t),y=await WYu(h,t,{writer:n.writer,toolOutputMap:v,pendingImages:r,threadId:h.threadId,resolveArgs:x,onToolCalled:O,mcpForAgent:(N,U)=>$r(h.virtualMcp,t,"passthrough",U?.superUser??!1,{listTimeoutMs:U?.listTimeoutMs}),provider:l.thinking.provider,imageProvider:l.image?.provider??l.thinking.provider,deepResearchProvider:l.deepResearch?.provider??l.thinking.provider,htmlPageBuffer:c,deckBuffer:d,onChildUsage:E}),X={tools:y.tools,passthroughTools:y.passthroughTools,builtInTools:y.builtInTools,connectionsBlockTools:y.connectionsBlockTools,toolAnnotations:y.toolAnnotations,connectionTitleMap:y.connectionTitleMap,serverInstructions:y.serverInstructions,passthroughClient:y.passthroughClient,writer:n.writer,pendingImages:r,sideChunks:n.stream,closeSideChunks:n.close,onStepFinish:async()=>{await c.flush().catch((N)=>{console.error("[decopilot] html-page flush failed",N)}),await d.flush(),await $.sweep()},close:y.close};return f.close=y.close,X},runEngine:(h)=>xP0(t,u,h)},telemetry:{recordLlmCall:(h)=>xQu({ctx:t,...h}),monitorLlmCall:(h)=>rQu({ctx:t,...h,requestId:t.metadata.requestId,userAgent:t.metadata.userAgent??null})}}}var eYu=w(()=>{wQu();DQu();oS();kYu();V0t();zYu();KYu();LYu();o0t()});function e7i(i){if(i.providerId==="openai-compatible")try{let t=JSON.parse(i.apiKey);return{kind:"secret",providerId:i.providerId,apiKey:t.apiKey??"",modelId:i.modelId,...t.baseUrl?{baseUrl:t.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}}async function VYu(i){if(!i)return null;return DP0(i)}function DP0(i){let t=i.fetch??fetch,u=async(n,f,c)=>{let $=await t(L7i(`${i.baseUrl}/${n}`,f),{method:"POST",headers:C7i(i.headers,{"content-type":"application/json"}),body:JSON.stringify(c)});return MYu($)},l={getBytesOrPresign:async(n,f)=>{let c=await l.head(n);if(c.size>f.presignWhenLargerThan)return{error:"FILE_TOO_LARGE",size:c.size,maxInlineSize:f.presignWhenLargerThan,presignedUrl:await l.presignedGetUrl(n,f.presignExpiresIn),contentType:c.contentType};let $=await l.getBytes(n);return{content:qYu(c.contentType)?new TextDecoder().decode($):Buffer.from($).toString("base64"),contentType:c.contentType,encoding:qYu(c.contentType)?"utf-8":"base64",size:c.size,lastModified:c.lastModified,etag:c.etag}},getBytes:async(n)=>{let f=await t(L7i(i.baseUrl,n),{method:"GET",headers:C7i(i.headers)});if(!f.ok)throw Error(`object storage API failed (${f.status})`);return new Uint8Array(await f.arrayBuffer())},put:async(n,f,c)=>{let $=typeof f==="string"?new TextEncoder().encode(f):f,d=$.buffer instanceof ArrayBuffer?$.buffer.slice($.byteOffset,$.byteOffset+$.byteLength):Uint8Array.from($).buffer,_=await t(L7i(i.baseUrl,n),{method:"PUT",headers:C7i(i.headers,{...c?.contentType?{"content-type":c.contentType}:{}}),body:d});return MYu(_)},list:async()=>{throw Error("Remote object storage list is not supported")},delete:async()=>{throw Error("Remote object storage delete is not supported")},head:async(n)=>{let f=await t(L7i(i.baseUrl,n),{method:"HEAD",headers:C7i(i.headers)});if(!f.ok)throw Error(`object storage API failed (${f.status})`);return{contentType:f.headers.get("content-type")??"application/octet-stream",size:Number(f.headers.get("content-length")??"0"),lastModified:f.headers.get("last-modified")?new Date(f.headers.get("last-modified")):void 0,etag:f.headers.get("etag")??void 0}},presignedGetUrl:async(n,f)=>(await u("presigned-get",n,{expiresIn:f})).url,presignedPutUrl:async(n,f,c)=>(await u("presigned-put",n,{expiresIn:f,contentType:c})).url};return l}async function aYu(i,t={}){if(i.kind==="in-process")return{client:i.client,close:i.close??(async()=>{})};if(t.openHttp)return t.openHttp(i);return OP0(i,t.clientInfo)}async function OP0(i,t={name:"decopilot",version:"1"}){let u=new i6(new URL(i.url),{requestInit:{headers:i.headers}}),l=new Nf(t,{capabilities:{}});return await l.connect(u),{client:l,close:async()=>{await l.close().catch(()=>{})}}}function L7i(i,t){let u=t.split("/").map(encodeURIComponent).join("/");return`${i.replace(/\/$/,"")}/${u}`}async function MYu(i){if(!i.ok){let t=`object storage API failed (${i.status})`;try{let u=await i.json();if(typeof u.error==="string")t=u.error}catch{let u=await i.text().catch(()=>"");if(u)t=u}throw Error(t)}return await i.json()}function C7i(i,t){let u=new Headers(i);for(let[l,n]of Object.entries(t??{}))u.set(l,n);return u}function qYu(i){let t=i.split(";")[0].trim();if(yP0.has(t))return!0;if(t.startsWith("text/"))return!0;return!1}var yP0;var dnt=w(()=>{yh();$O();yP0=new Set(["application/json","text/html","text/css","application/javascript","text/typescript","text/plain","text/markdown","text/csv","application/xml","image/svg+xml","application/yaml","application/toml"])});function XP0(){return{enqueue:()=>null,flush:async()=>{}}}function mYu(i){let t=H7i({writer:i.writer,toolOutputMap:i.toolOutputMap,passthroughClient:i.passthroughClient,toolApprovalLevel:i.toolApprovalLevel,isPlanMode:i.isPlanMode,objectStorage:i.ctx.objectStorage,includeUnavailableClusterOnlyTools:!0,pendingImages:i.pendingImages,imageTool:i.imageProvider&&i.imageModelInfo?{provider:i.imageProvider,imageModelInfo:i.imageModelInfo}:void 0}),u=i.isPlanMode||i.toolApprovalLevel!=="auto",l=T7i({fs:i.fs,htmlPageBuffer:i.htmlPageBuffer??XP0(),toolOutputMap:i.toolOutputMap,needsApproval:u,pendingImages:i.pendingImages,ctx:i.ctx,threadId:i.threadId,virtualMcpId:i.virtualMcpId});return{...t,...l,...i.subtask?{subtask:i.subtask}:{}}}var oYu=w(()=>{lnt();z0t()});function pYu(){if(!sYu)throw Error("[desktop] sandbox-fs builder not registered \u2014 the daemon must call "+"registerDesktopSandboxFsBuilder(buildDesktopSandboxFs) before dispatching");return sYu}var sYu;function iPu(i){let t=w$i(),u=Z7i(i.connectionsBlockTools,i.connectionTitleMap),l=i.isDecopilotAgent?x$i():i.agentInstructions,n=[t,i.planPrompt,u,jM(),i.webSearchPrompt,l].filter((f)=>Boolean(f?.trim()));return{systemMessages:I7i(n,new Date)}}var tPu=w(()=>{K0t()});import{z as _nt}from"zod";function uPu(i){let{writer:t,selfAgentId:u,models:l,needsApproval:n,runSubtask:f,onChildUsage:c}=i;return wl({description:JP0,inputSchema:hi(NP0),needsApproval:n,execute:async({prompt:$,agent_id:d},{abortSignal:_,toolCallId:g})=>{let h=performance.now(),E=d&&d!==u?d:void 0,v=await f($,E,_??new AbortController().signal);return c?.(v.usage),t.write({type:"data-tool-metadata",id:g,data:{annotations:UP0,latencyMs:performance.now()-h}}),t.write({type:"data-tool-subtask-metadata",id:g,data:{usage:v.usage,agent:E??u,models:l}}),v},toModelOutput:({output:$})=>{let d=$;if(d?.error)return{type:"error-text",value:`Subtask failed: ${d.error}`};let _=d?.text?.trim(),g=d?.finishReason==="length";if(_)return{type:"text",value:(g?`[Subtask hit step limit \u2014 partial result below; consider narrowing the task.]
108127
+ `,r=await fetch(`${pP}/function?token=${encodeURIComponent(_)}`,{method:"POST",headers:{"Content-Type":"application/javascript"},body:v});if(!r.ok){let X=await r.text().catch(()=>"Unknown error");return{success:!1,error:`Browserless function call failed (${r.status}): ${X}`,url:g.url}}let x=await r.json().catch(async()=>{return{error:`Browserless returned non-JSON response: ${(await r.text().catch(()=>"")).slice(0,200)}`}}),O=JSON.stringify(x,null,2);u.set($.toolCallId,O);let y=vc(O);if(!("error"in x)&&y>rD&&l){let X=`inspect-pages/${crypto.randomUUID()}.json`;return await l.put(X,new TextEncoder().encode(O),{contentType:"application/json"}),{success:!0,uri:z4(X),preview:Ed(O),url:g.url,tokenCount:y,consoleLogCount:x.consoleLogs?.length??0,errorCount:x.errors?.length??0,hasEvaluateResult:x.evaluateResult!=null}}return{success:!("error"in x),...x,url:g.url,tokenCount:y}}finally{i.write({type:"data-tool-metadata",id:$.toolCallId,data:{latencyMs:performance.now()-d}})}}})}function tP0(){return wl({description:"Search the web and synthesize a comprehensive research report. This tool is only available in cluster Decopilot.",inputSchema:hi(pY0),execute:async(i)=>{throw Error("web_search is only available in cluster Decopilot.")}})}function uP0(){return wl({description:"Record what the user is durably working toward (their goals/interests). This tool is only available in cluster Decopilot.",inputSchema:hi(iP0),execute:async(i)=>{throw Error("update_interests is only available in cluster Decopilot.")}})}function H7i(i){let{writer:t,toolOutputMap:u,objectStorage:l,pendingImages:n,imageTool:f,includeUnavailableClusterOnlyTools:c}=i,$={user_ask:A7i,todo_write:G7i,propose_plan:k7i,read_tool_output:ayi({toolOutputMap:u})};if(c)$.web_search=tP0(),$.update_interests=uP0();if(f)$.generate_image=S7i(t,{...f,objectStorage:l});if(process.env.BROWSERLESS_TOKEN){if($.scrape_url=AYu(t,{toolOutputMap:u,objectStorage:l,kind:"scrape"}),$.inspect_page=AYu(t,{toolOutputMap:u,objectStorage:l,kind:"inspect"}),n)$.take_screenshot=z7i(t,{objectStorage:l,toolOutputMap:u,pendingImages:n})}return $}var pY0,iP0;var lnt=w(()=>{fn();int();tnt();unt();u3();b7i();pY0=xg.object({query:xg.string().max(1e4).describe("The research query. Be specific about what information you need.")}),iP0=xg.object({interests:xg.array(xg.object({title:xg.string().max(120).describe("Short noun phrase, e.g. 'Learning Rust'"),summary:xg.string().max(500).describe("One or two sentences of context, including any progress")})).max(10)})});async function nP0(i,t,u){let{provider:l,imageProvider:n,deepResearchProvider:f,organization:c,models:$,toolApprovalLevel:d="auto",isPlanMode:_=!1,toolOutputMap:g,pendingImages:h,passthroughClient:E,vmContext:v,htmlPageBuffer:r,deckBuffer:x,taskId:O,agentId:y,onChildUsage:X}=t,N={isPlanMode:_},U=u.auth?.user?.id,J=H7i({writer:i,toolOutputMap:g,passthroughClient:E,toolApprovalLevel:d,isPlanMode:_,objectStorage:u.objectStorage});if(U)J.update_interests=EYu({write:async(B)=>{await u.storage.interests.setForAgent(B.orgId,B.agentId,B.userId,{interests:B.interests})},orgId:c.id,agentId:y,userId:U});let T=myi(d,!1,N)!==!1,Q;if(v){let B=await AQu(u,{virtualMcpId:v.virtualMcpId,branch:v.branch,userId:v.userId});Q=T7i({fs:B,htmlPageBuffer:r,deckBuffer:x,toolOutputMap:g,needsApproval:T,pendingImages:h,ctx:u,threadId:v.threadId,virtualMcpId:v.virtualMcpId}),Object.assign(J,Q)}if(l)J.subtask=p0t(i,{provider:l,organization:c,models:$,self:{id:y},needsApproval:myi(d,!1,N)!==!1,onChildUsage:X,vmTools:Q},u);if(n&&$.image&&u.objectStorage)J.generate_image=xYu(i,{provider:n,imageModelInfo:$.image,objectStorage:u.objectStorage,allowHttpExternalUrls:jt().localMode});if(f&&$.deepResearch){let B=UYu({provider:f,deepResearchModelInfo:$.deepResearch,ctx:u});J.web_search=yYu(i,{researchJob:B,toolOutputMap:g,taskId:O})}if(process.env.BROWSERLESS_TOKEN){let B={baseUrl:pP,token:process.env.BROWSERLESS_TOKEN};if(J.take_screenshot=TYu(i,{objectStorage:u.objectStorage,toolOutputMap:g,pendingImages:h}),u.objectStorage)J.scrape_url=BYu(i,{browserless:B,objectStorage:u.objectStorage,toolOutputMap:g}),J.inspect_page=YYu(i,{browserless:B,objectStorage:u.objectStorage,toolOutputMap:g})}return J}function fP0(i,t,u){let l=t.organization.id,n=u.auth?.user?.id,f={};for(let[c,$]of Object.entries(i)){let d=$,_=d.execute;if(typeof _!=="function"){f[c]=$;continue}let g=lP0[c],h=_.constructor?.name==="AsyncGeneratorFunction",E=(r,x)=>{if(!l||!n)return;Xu.capture({distinctId:n,event:"tool_called",groups:{organization:l},properties:{organization_id:l,tool_source:"builtin",tool_name:c,tool_safe_name:c,read_only:g?.readOnly??null,destructive:g?.destructive??null,idempotent:null,open_world:null,latency_ms:Math.round(r),is_error:x}})},v=h?async function*(r,x){let O=performance.now(),y=!1;try{yield*_.call(d,r,x)}catch(X){throw y=!0,X}finally{E(performance.now()-O,y)}}:async(r,x)=>{let O=performance.now(),y=!1;try{return await _.call(d,r,x)}catch(X){throw y=!0,X}finally{E(performance.now()-O,y)}};f[c]={...d,execute:v}}return f}async function GYu(i,t,u){let l=await nP0(i,t,u),n=fP0(l,t,u);if(!t.isPlanMode){let{propose_plan:f,...c}=n;return c}return n}function mQu(i){let{ctx:t,writer:u,toolOutputMap:l,subtaskParams:n,planMode:f}=i,c={user_ask:A7i,todo_write:G7i,propose_plan:k7i,read_tool_output:ayi({toolOutputMap:l})};if(n.provider)c.subtask=p0t(u,n,t);return c}var lP0;var L0t=w(()=>{U1();Ta();u3();z0t();GQu();hYu();int();tnt();vYu();unt();DYu();XYu();FYu();IYu();QYu();PYu();lnt();p0();lP0={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},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}}});function $P0(i,t,u){if(!u)return i;let l=new Set;for(let[n,f]of t)if(u.has(n)||u.has(f))l.add(f);return Object.fromEntries(Object.entries(i).filter(([n])=>l.has(n)))}function dP0(i,t){if(!t)return i;return Object.fromEntries(Object.entries(i).filter(([u])=>cP0.has(u)||t.has(u)))}async function WYu(i,t,u){let l=t.organization,n=i.mode==="plan",f=i.toolAllowlist&&i.toolAllowlist.length>0?new Set(i.toolAllowlist):null,c=await u.mcpForAgent(i.agent.id,{superUser:!0,listTimeoutMs:1000});try{let{tools:$,nameMap:d,rawTools:_}=await qz(c,u.toolOutputMap,u.writer,i.toolApprovalLevel,{isPlanMode:n,timeoutMs:O$i,resolveArgs:u.resolveArgs,onToolCalled:u.onToolCalled}),g=$P0($,d,f),E=!i.virtualMcp.metadata.githubRepo,v=i.user.id?{virtualMcpId:i.agent.id,branch:E?"ephemeral":i.branch??`thread:${u.threadId}`,userId:i.user.id,threadId:u.threadId}:null,r=await GYu(u.writer,{provider:u.provider,imageProvider:u.imageProvider,deepResearchProvider:u.deepResearchProvider,organization:l,models:i.models,toolApprovalLevel:i.toolApprovalLevel,isPlanMode:n,toolOutputMap:u.toolOutputMap,pendingImages:u.pendingImages,passthroughClient:c,vmContext:v,htmlPageBuffer:u.htmlPageBuffer,deckBuffer:u.deckBuffer,taskId:u.threadId,agentId:i.agent.id,onChildUsage:u.onChildUsage},t),x=dP0(r,f),O=[],y=new Map;for(let J of _){let T=d.get(J.name);if(!T)continue;if(f&&!f.has(J.name)&&!f.has(T))continue;let Q=typeof J._meta?.gatewayClientId==="string"?J._meta.gatewayClientId:"unknown";if(O.push({rawName:J.name,safeName:T,connectionId:Q}),n)y.set(T,{readOnlyHint:J.annotations?.readOnlyHint})}let X=c.getConnectionTitleMap(),N=c.getInstructions();return{tools:{...g,...x},nameMap:d,passthroughTools:g,builtInTools:x,passthroughToolList:_,connectionsBlockTools:O,toolAnnotations:y,vmContext:v,connectionTitleMap:X,serverInstructions:N,passthroughClient:c,close:async()=>{await c.close().catch(()=>{})}}}catch($){throw await c.close().catch(()=>{}),$}}var cP0;var kYu=w(()=>{L0t();Ta();Ty();cP0=new Set(["read_tool_output","enable_tool","open_in_agent","todo_write","update_interests"])});function nnt(i){let t=_P0.exec(i);if(!t)return null;return{path:i,name:t[2],kind:t[1].toLowerCase()==="decks"?"deck":"page"}}function jYu(i,t){if(!t)return null;let u=i.replace(/^\.\//,""),l=`org/${t}/`,n=u.indexOf(l);if(n!==0&&(n<0||u[n-1]!=="/"))return null;return nnt(u.slice(n+l.length))}var _P0;var fnt=w(()=>{_P0=/^(decks|pages)\/([a-z0-9][a-z0-9._-]*)\.html$/i});function SYu(i){let t=i.orgFs,u=i.organization?.slug??null,l=i.auth?.user?.id??null;if(!t||!u||!l)return hP0;let n=ez(u),f=new Map;return{enqueue(c,$){let d=jYu(c,n);if(!d)return;f.set(d.path,$)},async flush(){if(f.size===0)return;let c=[...f.entries()];f.clear(),await Promise.allSettled(c.map(async([$,d])=>{try{await t.write(gP0,$,d,{actor:l,contentType:"text/html; charset=utf-8"})}catch(_){console.error("[deck-buffer] org-fs write failed",{path:$},_)}}))}}}var gP0="home",hP0;var zYu=w(()=>{kyi();fnt();hP0={enqueue:()=>{},flush:async()=>{}}});function bYu(i,t){let u=i.orgFs,l=i.organization?.slug??null;if(!u||!l)return{sweep:async()=>{}};let n=ez(l),f=u.latestSeq(cnt).catch((h)=>{return console.error("[deck-watcher] cursor snapshot failed",h),null}),c=null,$=!1,d=!1,_=new Map;return{sweep:async()=>{if(d)return;d=!0;try{if(!$)c=await f,$=!0;if(c===null)return;let h=new Map;for(let E=0;E<20;E++){let v=await u.changes(cnt,c,EP0);for(let r of v.entries){if(r.kind!=="file"||r.deletedAt)continue;let x=nnt(r.path);if(!x)continue;if(r.contentHash){if(_.get(x.path)===r.contentHash)continue;_.set(x.path,r.contentHash)}h.set(x.path,{volume:cnt,path:x.path,name:x.name,kind:x.kind,mountPath:`org/${n}/${x.path}`})}if(c=v.cursor,!v.hasMore)break}for(let E of h.values())t.write({type:"data-deck-updated",id:E.path,data:E})}catch(h){console.error("[deck-watcher] sweep failed",h)}finally{d=!1}}}}var cnt="home",EP0=200;var KYu=w(()=>{kyi();fnt()});function rP0(i){let t=i.replace(/^\.?\//,""),u=vP0.exec(t);if(!u)return null;return{slug:u[1],key:t}}function HYu(i,t,u){let l=u.split("/").map(encodeURIComponent).join("/");return`${i}/api/${encodeURIComponent(t)}/files/${l}`}function R7i(i){let t=new Map,u=i.logPrefix??"html-page-buffer";return{enqueue:(f,c)=>{let $=rP0(f);if(!$||!i.orgSlug)return null;return t.set($.key,{slug:$.slug,key:$.key,content:c}),{slug:$.slug,key:$.key,url:HYu(i.baseUrl,i.orgSlug,$.key),bytes:new TextEncoder().encode(c).byteLength}},flush:async()=>{if(t.size===0)return;let f=Array.from(t.values());if(t.clear(),!i.orgSlug||!i.storage){console.warn(`[${u}] flush skipped \u2014 storage unavailable`,{pendingCount:f.length,hasOrgSlug:Boolean(i.orgSlug),hasStorage:Boolean(i.storage)});return}await Promise.allSettled(f.map(async(c)=>{try{let $=new TextEncoder().encode(c.content);await i.storage.put(c.key,$,{contentType:"text/html; charset=utf-8"}),i.writer.write({type:"data-html-page-published",id:c.slug,data:{slug:c.slug,key:c.key,url:HYu(i.baseUrl,i.orgSlug,c.key),bytes:$.byteLength}})}catch($){console.error(`[${u}] PUT failed`,{key:c.key},$)}}))}}}var vP0;var $nt=w(()=>{vP0=/^pages\/([a-z0-9][a-z0-9._-]*)\.html$/i});function wP0(i){if(i.objectStorage)return i.objectStorage;let t=i.organization?.id;if(!t)return null;let u=S$();return u?T_(u,t):new Ev(t,i.baseUrl)}function RYu(i,t){return R7i({storage:wP0(i),baseUrl:i.baseUrl,orgSlug:i.organization?.slug,writer:t})}var LYu=w(()=>{gC();jw();$nt()});async function xP0(i,t,u){let l=await P7i({kind:u.kind,ctx:i,organization:t,virtualMcp:u.virtualMcp,mcpClient:u.mcpClient,provider:u.provider,models:u.models,messages:u.messages,abortSignal:u.abortSignal,temperature:u.temperature,planMode:u.planMode,isDecopilot:u.isDecopilot,systemAgentInstructions:u.systemAgentInstructions,currentThreadId:u.currentThreadId,user:u.user,userContext:u.userContext,writer:u.writer,subtaskParams:{provider:u.provider,organization:t,models:u.models},prepareStep:u.prepareStep,onStepFinish:u.onStepFinish,passthroughClient:u.passthroughClient,connectionsData:u.connectionsData,extraTools:u.extraTools,additionalSystemMessages:u.additionalSystemMessages,stepLimit:u.stepLimit});return{result:l.result,error:l.error,span:l.span,assembledSystemMessages:l.assembledSystemMessages}}function CYu(i){let{ctx:t,organization:u,modelRuntime:l,sideChannel:n,cleanup:f}=i,c=RYu(t,n.writer),$=bYu(t,n.writer),d=SYu(t);return{toolRuntime:{buildEnvironmentTools:async({input:h,onChildUsage:E})=>{let v=new Map,r=[],{resolveArgs:x,onToolCalled:O}=Q7i(t),y=await WYu(h,t,{writer:n.writer,toolOutputMap:v,pendingImages:r,threadId:h.threadId,resolveArgs:x,onToolCalled:O,mcpForAgent:(N,U)=>$r(h.virtualMcp,t,"passthrough",U?.superUser??!1,{listTimeoutMs:U?.listTimeoutMs}),provider:l.thinking.provider,imageProvider:l.image?.provider??l.thinking.provider,deepResearchProvider:l.deepResearch?.provider??l.thinking.provider,htmlPageBuffer:c,deckBuffer:d,onChildUsage:E}),X={tools:y.tools,passthroughTools:y.passthroughTools,builtInTools:y.builtInTools,connectionsBlockTools:y.connectionsBlockTools,toolAnnotations:y.toolAnnotations,connectionTitleMap:y.connectionTitleMap,serverInstructions:y.serverInstructions,passthroughClient:y.passthroughClient,writer:n.writer,pendingImages:r,sideChunks:n.stream,closeSideChunks:n.close,onStepFinish:async()=>{await c.flush().catch((N)=>{console.error("[decopilot] html-page flush failed",N)}),await d.flush(),await $.sweep()},close:y.close};return f.close=y.close,X},runEngine:(h)=>xP0(t,u,h)},telemetry:{recordLlmCall:(h)=>xQu({ctx:t,...h}),monitorLlmCall:(h)=>rQu({ctx:t,...h,requestId:t.metadata.requestId,userAgent:t.metadata.userAgent??null})}}}var eYu=w(()=>{wQu();DQu();oS();kYu();V0t();zYu();KYu();LYu();o0t()});function e7i(i){if(i.providerId==="openai-compatible")try{let t=JSON.parse(i.apiKey);return{kind:"secret",providerId:i.providerId,apiKey:t.apiKey??"",modelId:i.modelId,...t.baseUrl?{baseUrl:t.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}}async function VYu(i){if(!i)return null;return DP0(i)}function DP0(i){let t=i.fetch??fetch,u=async(n,f,c)=>{let $=await t(L7i(`${i.baseUrl}/${n}`,f),{method:"POST",headers:C7i(i.headers,{"content-type":"application/json"}),body:JSON.stringify(c)});return MYu($)},l={getBytesOrPresign:async(n,f)=>{let c=await l.head(n);if(c.size>f.presignWhenLargerThan)return{error:"FILE_TOO_LARGE",size:c.size,maxInlineSize:f.presignWhenLargerThan,presignedUrl:await l.presignedGetUrl(n,f.presignExpiresIn),contentType:c.contentType};let $=await l.getBytes(n);return{content:qYu(c.contentType)?new TextDecoder().decode($):Buffer.from($).toString("base64"),contentType:c.contentType,encoding:qYu(c.contentType)?"utf-8":"base64",size:c.size,lastModified:c.lastModified,etag:c.etag}},getBytes:async(n)=>{let f=await t(L7i(i.baseUrl,n),{method:"GET",headers:C7i(i.headers)});if(!f.ok)throw Error(`object storage API failed (${f.status})`);return new Uint8Array(await f.arrayBuffer())},put:async(n,f,c)=>{let $=typeof f==="string"?new TextEncoder().encode(f):f,d=$.buffer instanceof ArrayBuffer?$.buffer.slice($.byteOffset,$.byteOffset+$.byteLength):Uint8Array.from($).buffer,_=await t(L7i(i.baseUrl,n),{method:"PUT",headers:C7i(i.headers,{...c?.contentType?{"content-type":c.contentType}:{}}),body:d});return MYu(_)},list:async()=>{throw Error("Remote object storage list is not supported")},delete:async()=>{throw Error("Remote object storage delete is not supported")},head:async(n)=>{let f=await t(L7i(i.baseUrl,n),{method:"HEAD",headers:C7i(i.headers)});if(!f.ok)throw Error(`object storage API failed (${f.status})`);return{contentType:f.headers.get("content-type")??"application/octet-stream",size:Number(f.headers.get("content-length")??"0"),lastModified:f.headers.get("last-modified")?new Date(f.headers.get("last-modified")):void 0,etag:f.headers.get("etag")??void 0}},presignedGetUrl:async(n,f)=>(await u("presigned-get",n,{expiresIn:f})).url,presignedPutUrl:async(n,f,c)=>(await u("presigned-put",n,{expiresIn:f,contentType:c})).url};return l}async function aYu(i,t={}){if(i.kind==="in-process")return{client:i.client,close:i.close??(async()=>{})};if(t.openHttp)return t.openHttp(i);return OP0(i,t.clientInfo)}async function OP0(i,t={name:"decopilot",version:"1"}){let u=new i6(new URL(i.url),{requestInit:{headers:i.headers}}),l=new Nf(t,{capabilities:{}});return await l.connect(u),{client:l,close:async()=>{await l.close().catch(()=>{})}}}function L7i(i,t){let u=t.split("/").map(encodeURIComponent).join("/");return`${i.replace(/\/$/,"")}/${u}`}async function MYu(i){if(!i.ok){let t=`object storage API failed (${i.status})`;try{let u=await i.json();if(typeof u.error==="string")t=u.error}catch{let u=await i.text().catch(()=>"");if(u)t=u}throw Error(t)}return await i.json()}function C7i(i,t){let u=new Headers(i);for(let[l,n]of Object.entries(t??{}))u.set(l,n);return u}function qYu(i){let t=i.split(";")[0].trim();if(yP0.has(t))return!0;if(t.startsWith("text/"))return!0;return!1}var yP0;var dnt=w(()=>{yh();$O();yP0=new Set(["application/json","text/html","text/css","application/javascript","text/typescript","text/plain","text/markdown","text/csv","application/xml","image/svg+xml","application/yaml","application/toml"])});function XP0(){return{enqueue:()=>null,flush:async()=>{}}}function mYu(i){let t=H7i({writer:i.writer,toolOutputMap:i.toolOutputMap,passthroughClient:i.passthroughClient,toolApprovalLevel:i.toolApprovalLevel,isPlanMode:i.isPlanMode,objectStorage:i.ctx.objectStorage,includeUnavailableClusterOnlyTools:!0,pendingImages:i.pendingImages,imageTool:i.imageProvider&&i.imageModelInfo?{provider:i.imageProvider,imageModelInfo:i.imageModelInfo}:void 0}),u=i.isPlanMode||i.toolApprovalLevel!=="auto",l=T7i({fs:i.fs,htmlPageBuffer:i.htmlPageBuffer??XP0(),toolOutputMap:i.toolOutputMap,needsApproval:u,pendingImages:i.pendingImages,ctx:i.ctx,threadId:i.threadId,virtualMcpId:i.virtualMcpId});return{...t,...l,...i.subtask?{subtask:i.subtask}:{}}}var oYu=w(()=>{lnt();z0t()});function pYu(){if(!sYu)throw Error("[desktop] sandbox-fs builder not registered \u2014 the daemon must call "+"registerDesktopSandboxFsBuilder(buildDesktopSandboxFs) before dispatching");return sYu}var sYu;function iPu(i){let t=w$i(),u=Z7i(i.connectionsBlockTools,i.connectionTitleMap),l=i.isDecopilotAgent?x$i():i.agentInstructions,n=[t,i.planPrompt,u,jM(),i.webSearchPrompt,l].filter((f)=>Boolean(f?.trim()));return{systemMessages:I7i(n,new Date)}}var tPu=w(()=>{K0t()});import{z as _nt}from"zod";function uPu(i){let{writer:t,selfAgentId:u,models:l,needsApproval:n,runSubtask:f,onChildUsage:c}=i;return wl({description:JP0,inputSchema:hi(NP0),needsApproval:n,execute:async({prompt:$,agent_id:d},{abortSignal:_,toolCallId:g})=>{let h=performance.now(),E=d&&d!==u?d:void 0,v=await f($,E,_??new AbortController().signal);return c?.(v.usage),t.write({type:"data-tool-metadata",id:g,data:{annotations:UP0,latencyMs:performance.now()-h}}),t.write({type:"data-tool-subtask-metadata",id:g,data:{usage:v.usage,agent:E??u,models:l}}),v},toModelOutput:({output:$})=>{let d=$;if(d?.error)return{type:"error-text",value:`Subtask failed: ${d.error}`};let _=d?.text?.trim(),g=d?.finishReason==="length";if(_)return{type:"text",value:(g?`[Subtask hit step limit \u2014 partial result below; consider narrowing the task.]
108121
108128
 
108122
108129
  `:"")+_};if(g)return{type:"text",value:"[Subtask hit step limit before producing a final report. The subagent did work but ran out of steps. Narrow the task or increase the budget.]"};return{type:"text",value:"Subtask completed (no output)."}}})}var NP0,JP0,UP0;var lPu=w(()=>{fn();NP0=_nt.object({prompt:_nt.string().min(1).max(50000).describe("The task to delegate to the subagent. Be specific and self-contained \u2014 "+"the subagent has no access to the parent conversation history."),agent_id:_nt.string().min(1).max(128).optional().describe("The ID of the agent (Virtual MCP) to delegate to. Must exist and be "+"active in the current organization. OMIT to clone yourself \u2014 a fresh "+"subagent with your exact tools and instructions but an empty context.")}),JP0=`Run a focused task in a fresh subagent that works independently and returns only its conclusion.
108123
108130
 
@@ -108129,7 +108136,7 @@ Usage notes:
108129
108136
  `+`- Every subtask call starts FRESH \u2014 no conversation history, no prior runs. Always include full context in the prompt and state exactly what to return (the specific answer/list/paths you need, not a raw dump); never use continuation phrases like 'continue' or 'as before'.
108130
108137
  `+`- Clearly tell the subagent whether you expect it to take action or just research.
108131
108138
  - To parallelize independent searches, launch multiple subtask calls in the same message.
108132
- - The subagent's output should generally be trusted.`,UP0={readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!0}});function nPu(i,t){if(!t)return i;return i.replace(/\/virtual-mcp\/[^/]+\/?$/,`/virtual-mcp/${encodeURIComponent(t)}`)}import{trace as FP0}from"@opentelemetry/api";function TP0(i){let u=i._meta?.ui?.visibility;if(u==null)return!0;if(typeof u==="string")return u==="model";if(Array.isArray(u))return u.includes("model");return!0}function IP0(i){let t=i.modelSources?.thinking?.kind==="secret"?i.modelSources.thinking:null;if(!t)throw Error("decopilot-desktop requires a secret thinking model source. The cluster must inject the chat-model credential when routing decopilot to user-desktop.");let u=i.mcpSource?.kind==="http"?i.mcpSource:{kind:"http",url:i.mcp.url,headers:i.mcp.headers,expiresAt:i.mcp.expiresAt};return{modelSource:t,mcpSource:u}}function ZP0(i,t){let{input:u}=i,l=Ba(u.mode,{isCliAgent:!1}),f=[...iPu({agentId:t.virtualMcp.id,isDecopilotAgent:t.isDecopilot,connectionsBlockTools:t.connectionsData.tools,connectionTitleMap:t.connectionsData.connectionTitleMap,agentInstructions:t.systemAgentInstructions,planPrompt:l.planPrompt,webSearchPrompt:l.webSearchInstructionPrompt}).systemMessages,...t.additionalSystemMessages],c={...i.passthroughTools,...t.extraTools},$=FP0.getTracer("decopilot-desktop").startSpan("decopilot.agent_loop",{attributes:{"decopilot.agent.id":t.virtualMcp.id,"decopilot.agent.kind":t.kind,"decopilot.organization.id":u.organizationId,"decopilot.model.id":t.models.thinking.id}}),d=ib(t.provider,t.models.thinking),_=Y7i({model:d,systemMessages:f,messages:t.messages,tools:c,prepareStep:t.prepareStep,temperature:t.temperature,maxOutputTokens:D$i(t.models.thinking.limits,vc(f)+vc(t.messages)+vc(c)),stopWhen:qv(t.stepLimit??kM),abortSignal:t.abortSignal,onStepFinish:t.onStepFinish,onError:(g,h)=>{console.error("[decopilot-desktop] stream error",h)}});return Promise.resolve(_.result.finishReason).finally(()=>$.end()),{result:_.result,error:_.error,span:$,assembledSystemMessages:f}}function fPu(i){let{input:t,mcpSource:u,modelRuntime:l,sideChannel:n,cleanup:f}=i,c=l.image?.provider??l.thinking.provider,$=i.agentOverride?.id??t.agent.id,d=void 0,_=void 0;return{buildEnvironmentTools:async({input:g})=>{let h=new Map,E=[],v=await aYu(u,{clientInfo:{name:"decopilot-desktop",version:"1"},openHttp:i.openHttp}),r=v.client;f.close=v.close;try{let{tools:x,nameMap:O}=await qz(r,h,void 0,g.toolApprovalLevel,{isPlanMode:g.mode==="plan",isToolVisible:TP0}),y=(await r.listTools()).tools,X=[],N=new Map;for(let a of y){let S=O.get(a.name);if(!S)continue;let M=typeof a._meta?.gatewayClientId==="string"?a._meta.gatewayClientId:"unknown";if(X.push({rawName:a.name,safeName:S,connectionId:M}),a.annotations?.readOnlyHint!==void 0)N.set(S,{readOnlyHint:a.annotations.readOnlyHint})}let U=await VYu(g.objectStorageSource),J=g.organizationSlug??g.projectSlug,T=g.objectStorageSource?new URL(g.objectStorageSource.baseUrl).origin:"",Q=R7i({storage:U,baseUrl:T,orgSlug:J,writer:n.writer,logPrefix:"decopilot-desktop:html-page-buffer"}),B={objectStorage:U,organization:{id:g.organizationId,slug:J},auth:{user:{id:g.user.id}},baseUrl:T},P=pYu()({virtualMcpId:$,branch:g.branch,userId:g.user.id}),H=mYu({writer:n.writer,toolOutputMap:h,passthroughClient:r,toolApprovalLevel:g.toolApprovalLevel,isPlanMode:g.mode==="plan",ctx:B,imageProvider:c,imageModelInfo:g.models.image,pendingImages:E,threadId:g.threadId,virtualMcpId:$,fs:P,htmlPageBuffer:Q,subtask:i.subtask}),j=r.getInstructions()??void 0;return d=x,_=j,{tools:{...x,...H},passthroughTools:x,builtInTools:H,connectionsBlockTools:X,toolAnnotations:N,connectionTitleMap:new Map,serverInstructions:j,passthroughClient:r,writer:n.writer,pendingImages:E,sideChunks:n.stream,closeSideChunks:n.close,onStepFinish:async()=>{await Q.flush().catch((a)=>{console.error("[decopilot-desktop] html-page flush failed",a)})},close:v.close}}catch(x){throw await v.close().catch(()=>{}),f.close=void 0,x}},runEngine:async(g)=>{if(d===void 0)throw Error("[decopilot-desktop] runEngine called before buildEnvironmentTools \u2014 "+"passthroughTools not yet assembled. This is a harness wiring bug.");let h=i.agentOverride?{...g,virtualMcp:{...g.virtualMcp,id:$},systemAgentInstructions:g.systemAgentInstructions??_}:g;return ZP0({input:t,passthroughTools:d},h)}}}function cPu(i){let{input:t,modelRuntime:u,sideChannel:l,cleanup:n,openHttp:f}=i,{mcpSource:c}=IP0(t),$=async(h,E,v)=>{let x={kind:"http",url:nPu(c.url,E),headers:c.headers,expiresAt:c.expiresAt},O=x7i(),y={},X=E?{...t,agent:{id:E},virtualMcp:{...t.virtualMcp,id:E}}:t,N=fPu({input:X,mcpSource:x,modelRuntime:u,sideChannel:O,cleanup:y,agentOverride:E?{id:E}:void 0,openHttp:f}),U={input:X,modelRuntime:u,toolRuntime:N,telemetry:void 0};try{return await EBu({prompt:h,deps:U,signal:v})}finally{O.close(),await y.close?.().catch(()=>{})}},d,_=uPu({writer:l.writer,selfAgentId:t.agent.id,models:t.models,needsApproval:t.mode==="plan"||t.toolApprovalLevel!=="auto",runSubtask:$,onChildUsage:(h)=>d?.(h)}),g=fPu({input:t,mcpSource:c,modelRuntime:u,sideChannel:l,cleanup:n,subtask:_,openHttp:f});return{buildEnvironmentTools:(h)=>{return d=h.onChildUsage,g.buildEnvironmentTools(h)},runEngine:g.runEngine}}var $Pu=w(()=>{fn();dnt();O7i();Ta();oYu();tPu();D7i();a0t();Ty();u3();O0t();lPu();$nt()});var dPu=w(()=>{dnt()});var _Pu=w(()=>{tBu();xBu();vQu();eYu();$Pu();mlt();slt();dPu();vBu((i)=>{let t=i.ctx;return CYu({...i,ctx:t,organization:t.organization})});rBu(cPu);syi(wBu);syi(iBu);syi(EQu)});function gPu(i){let t=i.type;if(typeof t!=="string")return!1;if(t==="text"||t==="reasoning")return i.state!=="streaming";if(t==="step-start")return!1;if(t.startsWith("tool-")||t==="dynamic-tool")return i.state==="output-available"||i.state==="output-error"||i.state==="output-denied";return!0}function BP0(i){let t=i.type??"";if(t==="reasoning")return"reasoning";if(t==="file")return"file";if(t.startsWith("tool-")||t==="dynamic-tool")return i.state==="output-available"||i.state==="output-error"||i.state==="output-denied"?"tool_result":"tool_call";return"text"}class gnt{ctx;base;seqByPart=new Map;emitted=new Set;finished=new Set;partKeyByRowId=new Map;finishMessageIdByRowId=new Map;nextSeq=0;constructor(i){this.ctx=i;this.base=i.baseTimeMs??Date.now()}seqFor(i){let t=this.seqByPart.get(i);if(t!==void 0)return t;let u=this.nextSeq++;return this.seqByPart.set(i,u),u}row(i,t,u,l,n,f=null){return{id:`${this.ctx.runId}:${i}:${u}`,seq:u,org_id:this.ctx.orgId,thread_id:this.ctx.threadId,run_id:this.ctx.runId,message_id:i,role:t,kind:l,payload:n,payload_ref:null,metadata:f,created_at:new Date(this.base+u).toISOString()}}emitMessageParts(i){let t=i.parts??[],u=[];for(let l=0;l<t.length;l++){let n=t[l];if(!gPu(n))continue;let f=`${i.id}#${l}`;if(this.emitted.has(f))continue;let c=this.seqFor(f),$=this.row(i.id,i.role,c,BP0(n),n);this.partKeyByRowId.set($.id,f),u.push($)}return u}markFinished(i,t,u=null){if(this.finished.has(i))return[];let l=this.seqFor(`${i}#finish`),n=this.row(i,t,l,"finish",{},u);return this.finishMessageIdByRowId.set(n.id,i),[n]}acknowledge(i){for(let t of i){let u=this.partKeyByRowId.get(t.id);if(u!==void 0)this.emitted.add(u);let l=this.finishMessageIdByRowId.get(t.id);if(l!==void 0)this.finished.add(l)}}emitUserMessage(i){return[...this.emitMessageParts(i),...this.markFinished(i.id,i.role,i.metadata??null)]}emitStepParts(i){return this.emitMessageParts(i)}emitFinal(i){return[...this.emitMessageParts(i),...this.markFinished(i.id,i.role,i.metadata??null)]}emitError(i,t){let u=`${i}#error`,l=[];if(!this.emitted.has(u)){let n=this.seqFor(u),f=this.row(i,"assistant",n,"error",{type:"text",text:`Error: ${t}`});this.partKeyByRowId.set(f.id,u),l.push(f)}return[...l,...this.markFinished(i,"assistant")]}}class tA{ctx;builder;constructor(i){this.ctx=i;this.builder=new gnt(i)}async appendBuiltRows(i){await this.ctx.storage.appendParts(i),this.builder.acknowledge(i)}async emitUserMessage(i){await this.appendBuiltRows(this.builder.emitUserMessage(i))}async emitStepParts(i){await this.appendBuiltRows(this.builder.emitStepParts(i))}async emitFinal(i){await this.appendBuiltRows(this.builder.emitFinal(i))}async emitError(i,t){await this.appendBuiltRows(this.builder.emitError(i,t))}}var M7i=()=>{};class Sa{intervalMs;lastBumpMs=new Map;constructor(i=3000){this.intervalMs=i}shouldBump(i,t=Date.now()){let u=this.lastBumpMs.get(i);if(u!==void 0&&t-u<this.intervalMs)return!1;return this.lastBumpMs.set(i,t),!0}clear(i){this.lastBumpMs.delete(i)}}class hPu{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 t=i??this.defaultWindowSize,{chronological:u,isWindowed:l}=this.thread.message_storage_version===2?await this.loadWindowedFromParts(t):await this.loadWindowedFromMessages(t),n=u.find((d)=>d.role!=="system");if(!n||n.role==="user")return u;let f=n,c=l?"[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:f.created_at,updated_at:f.updated_at},...u]}async loadWindowedFromMessages(i){let{messages:t,total:u}=await this.storage.listMessages(this.thread.id,{limit:i,sort:"desc"});return{chronological:[...t].reverse(),isWindowed:u>t.length}}async loadWindowedFromParts(i){let{messages:t,total:u}=await this.storage.messageParts().loadWindow(this.thread.id,{limit:i});return{chronological:t.map((n)=>({id:n.id,thread_id:this.thread.id,role:n.role,parts:n.parts,metadata:n.metadata??void 0,created_at:n.created_at,updated_at:n.created_at})),isWindowed:u>t.length}}async save(i){if(i.length===0)return;await this.storage.saveMessages(i)}}async function EPu(i,t){let{thread_id:u,defaultWindowSize:l}=t;if(!u)throw Error("createMemory: thread_id is required");let n=await i.get(u);if(!n)throw Error(`Thread not found: ${u}`);return new hPu({thread:n,storage:i,defaultWindowSize:l})}function vPu(i,t){let u=i.thinking.capabilities;if(!((u?.vision??!1)||(u?.file??!1))){if(t.some((f)=>f.parts?.some((c)=>c.type==="file")))throw new pu(400,{message:"This model does not support file uploads. Please change the model and try again."})}}var rPu=w(()=>{Zh()});function q7i(i){return async(t)=>{let u=null;try{u=await i.ctx.storage.threads.get(i.threadId)}catch{u=null}i.sseHub.emit(i.organizationId,t6(i.threadId,u?.status??"in_progress",{title:t,virtualMcpId:u?.virtual_mcp_id??void 0,createdBy:u?.created_by,triggerId:u?.trigger_id,branch:u?.branch??null,createdAt:u?.created_at,updatedAt:u?.updated_at}))}}var hnt=w(()=>{jl()});async function*wPu(i,t){let u=t.persistTitle??((n,f)=>t.ctx.storage.threads.update(n,{title:f}).then(()=>{})),l=!1;for await(let n of i){if(aZu(n)){console.warn("[title-interceptor] harness emitted deprecated data-title-input chunk; ignoring");continue}if(mZu(n)){if(l){console.warn("[title-interceptor] harness emitted multiple data-title-result chunks; ignoring extra");continue}if(l=!0,t.currentThreadTitle!==Fy)continue;let f=n.data.title;if(!f)continue;await u(t.threadId,f).catch((c)=>{console.error("[title-interceptor] persist failed for thread",t.threadId,c)});try{await t.onTitleUpdated?.(f)}catch(c){console.error("[title-interceptor] onTitleUpdated callback failed",c)}if(!t.isStreamFinished())try{t.writer.write({type:"data-thread-title",data:{title:f},transient:!0})}catch(c){console.error("[title-interceptor] writer.write failed",c)}continue}yield n}}var xPu=w(()=>{Iy()});function QP0(i){let t=i[Symbol.asyncIterator]();return new ReadableStream({async pull(u){try{let{value:l,done:n}=await t.next();if(n)u.close();else u.enqueue(l)}catch(l){u.error(l)}},async cancel(u){await t.return?.(u)}})}function YP0(i){let t=i.metadata?.usage;if(!t||typeof t!=="object"||Array.isArray(t))return null;let u=t,l=(n)=>typeof n==="number"?n:0;return{...u,inputTokens:l(u.inputTokens),outputTokens:l(u.outputTokens),totalTokens:l(u.totalTokens)}}function nb(i){let t=[],u=!1,l=!1,n=crypto.randomUUID(),f,c=new Promise((d)=>{f=d});return{uiStream:zV({originalMessages:i.originalMessages,execute:({writer:d})=>{let _=wPu(i.chunks,{ctx:null,isStreamFinished:()=>u,currentThreadTitle:i.title.currentThreadTitle,threadId:i.title.threadId,writer:d,onTitleUpdated:i.title.onTitleUpdated,persistTitle:i.title.persistTitle});d.merge(QP0(_))},onStepFinish:({responseMessage:d})=>{t.push(i.persistence.emitStepParts(d).catch((_)=>console.error("[consume-harness-stream] emitStepParts failed",_))),t.push(Promise.resolve(i.hooks?.onStep?.(d)).catch((_)=>console.error("[consume-harness-stream] onStep hook failed",_)))},onFinish:async({responseMessage:d,finishReason:_})=>{if(u=!0,await Promise.allSettled(t),!l)await i.persistence.emitFinal(d).catch((h)=>console.error("[consume-harness-stream] emitFinal failed",h));let g=YP0(d);if(g)await Promise.resolve(i.hooks?.onUsage?.(g)).catch((h)=>console.error("[consume-harness-stream] onUsage hook failed",h));await Promise.resolve(i.hooks?.onFinish?.(d,_)).catch((h)=>console.error("[consume-harness-stream] onFinish hook failed",h)),f()},onError:(d)=>{u=!0;let _=d instanceof Error?d.message:String(d);if(!l)l=!0,t.push(i.persistence.emitError(n,_).catch((g)=>console.error("[consume-harness-stream] emitError failed",g))),t.push(Promise.resolve(i.hooks?.onError?.(d)).catch((g)=>console.error("[consume-harness-stream] onError hook failed",g)));return i.sanitizeErrorText?i.sanitizeErrorText(d):_}}),whenComplete:c,isStreamFinished:()=>u}}var V7i=w(()=>{fn();xPu()});function za(i,t){let u=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:t,...i.limits?{limits:i.limits}:{},...u&&Object.keys(u).length>0?{capabilities:u}:{}}}function DPu(i){let t=i.credentialId,u=za(i.thinking,t);return{thinking:{...u,title:u.title??u.id},...i.fast?{fast:za(i.fast,t)}:{},...i.smart?{smart:za(i.smart,t)}:{},...i.image?{image:za(i.image,i.image.credentialId??t)}:{},...i.deepResearch?{deepResearch:za(i.deepResearch,i.deepResearch.credentialId??t)}:{}}}function OPu(i,t=[]){if(i==="stop")return t.filter((n)=>n.type==="text"&&n.text).map((n)=>n.text).join(`
108139
+ - The subagent's output should generally be trusted.`,UP0={readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!0}});function nPu(i,t){if(!t)return i;return i.replace(/\/virtual-mcp\/[^/]+\/?$/,`/virtual-mcp/${encodeURIComponent(t)}`)}import{trace as FP0}from"@opentelemetry/api";function TP0(i){let u=i._meta?.ui?.visibility;if(u==null)return!0;if(typeof u==="string")return u==="model";if(Array.isArray(u))return u.includes("model");return!0}function IP0(i){let t=i.modelSources?.thinking?.kind==="secret"?i.modelSources.thinking:null;if(!t)throw Error("decopilot-desktop requires a secret thinking model source. The cluster must inject the chat-model credential when routing decopilot to user-desktop.");let u=i.mcpSource?.kind==="http"?i.mcpSource:{kind:"http",url:i.mcp.url,headers:i.mcp.headers,expiresAt:i.mcp.expiresAt};return{modelSource:t,mcpSource:u}}function ZP0(i,t){let{input:u}=i,l=Ba(u.mode,{isCliAgent:!1}),f=[...iPu({agentId:t.virtualMcp.id,isDecopilotAgent:t.isDecopilot,connectionsBlockTools:t.connectionsData.tools,connectionTitleMap:t.connectionsData.connectionTitleMap,agentInstructions:t.systemAgentInstructions,planPrompt:l.planPrompt,webSearchPrompt:l.webSearchInstructionPrompt}).systemMessages,...t.additionalSystemMessages],c={...i.passthroughTools,...t.extraTools},$=FP0.getTracer("decopilot-desktop").startSpan("decopilot.agent_loop",{attributes:{"decopilot.agent.id":t.virtualMcp.id,"decopilot.agent.kind":t.kind,"decopilot.organization.id":u.organizationId,"decopilot.model.id":t.models.thinking.id}}),d=ib(t.provider,t.models.thinking),_=Y7i({model:d,systemMessages:f,messages:t.messages,tools:c,prepareStep:t.prepareStep,temperature:t.temperature,maxOutputTokens:D$i(t.models.thinking.limits,vc(f)+vc(t.messages)+vc(c)),stopWhen:qv(t.stepLimit??kM),abortSignal:t.abortSignal,onStepFinish:t.onStepFinish,onError:(g,h)=>{console.error("[decopilot-desktop] stream error",h)}});return Promise.resolve(_.result.finishReason).finally(()=>$.end()),{result:_.result,error:_.error,span:$,assembledSystemMessages:f}}function fPu(i){let{input:t,mcpSource:u,modelRuntime:l,sideChannel:n,cleanup:f}=i,c=l.image?.provider??l.thinking.provider,$=i.agentOverride?.id??t.agent.id,d=void 0,_=void 0;return{buildEnvironmentTools:async({input:g})=>{let h=new Map,E=[],v=await aYu(u,{clientInfo:{name:"decopilot-desktop",version:"1"},openHttp:i.openHttp}),r=v.client;f.close=v.close;try{let{tools:x,nameMap:O,rawTools:y}=await qz(r,h,void 0,g.toolApprovalLevel,{isPlanMode:g.mode==="plan",isToolVisible:TP0}),X=[],N=new Map;for(let a of y){let S=O.get(a.name);if(!S)continue;let M=typeof a._meta?.gatewayClientId==="string"?a._meta.gatewayClientId:"unknown";if(X.push({rawName:a.name,safeName:S,connectionId:M}),a.annotations?.readOnlyHint!==void 0)N.set(S,{readOnlyHint:a.annotations.readOnlyHint})}let U=await VYu(g.objectStorageSource),J=g.organizationSlug??g.projectSlug,T=g.objectStorageSource?new URL(g.objectStorageSource.baseUrl).origin:"",Q=R7i({storage:U,baseUrl:T,orgSlug:J,writer:n.writer,logPrefix:"decopilot-desktop:html-page-buffer"}),B={objectStorage:U,organization:{id:g.organizationId,slug:J},auth:{user:{id:g.user.id}},baseUrl:T},P=pYu()({virtualMcpId:$,branch:g.branch,userId:g.user.id}),H=mYu({writer:n.writer,toolOutputMap:h,passthroughClient:r,toolApprovalLevel:g.toolApprovalLevel,isPlanMode:g.mode==="plan",ctx:B,imageProvider:c,imageModelInfo:g.models.image,pendingImages:E,threadId:g.threadId,virtualMcpId:$,fs:P,htmlPageBuffer:Q,subtask:i.subtask}),j=r.getInstructions()??void 0;return d=x,_=j,{tools:{...x,...H},passthroughTools:x,builtInTools:H,connectionsBlockTools:X,toolAnnotations:N,connectionTitleMap:new Map,serverInstructions:j,passthroughClient:r,writer:n.writer,pendingImages:E,sideChunks:n.stream,closeSideChunks:n.close,onStepFinish:async()=>{await Q.flush().catch((a)=>{console.error("[decopilot-desktop] html-page flush failed",a)})},close:v.close}}catch(x){throw await v.close().catch(()=>{}),f.close=void 0,x}},runEngine:async(g)=>{if(d===void 0)throw Error("[decopilot-desktop] runEngine called before buildEnvironmentTools \u2014 "+"passthroughTools not yet assembled. This is a harness wiring bug.");let h=i.agentOverride?{...g,virtualMcp:{...g.virtualMcp,id:$},systemAgentInstructions:g.systemAgentInstructions??_}:g;return ZP0({input:t,passthroughTools:d},h)}}}function cPu(i){let{input:t,modelRuntime:u,sideChannel:l,cleanup:n,openHttp:f}=i,{mcpSource:c}=IP0(t),$=async(h,E,v)=>{let x={kind:"http",url:nPu(c.url,E),headers:c.headers,expiresAt:c.expiresAt},O=x7i(),y={},X=E?{...t,agent:{id:E},virtualMcp:{...t.virtualMcp,id:E}}:t,N=fPu({input:X,mcpSource:x,modelRuntime:u,sideChannel:O,cleanup:y,agentOverride:E?{id:E}:void 0,openHttp:f}),U={input:X,modelRuntime:u,toolRuntime:N,telemetry:void 0};try{return await EBu({prompt:h,deps:U,signal:v})}finally{O.close(),await y.close?.().catch(()=>{})}},d,_=uPu({writer:l.writer,selfAgentId:t.agent.id,models:t.models,needsApproval:t.mode==="plan"||t.toolApprovalLevel!=="auto",runSubtask:$,onChildUsage:(h)=>d?.(h)}),g=fPu({input:t,mcpSource:c,modelRuntime:u,sideChannel:l,cleanup:n,subtask:_,openHttp:f});return{buildEnvironmentTools:(h)=>{return d=h.onChildUsage,g.buildEnvironmentTools(h)},runEngine:g.runEngine}}var $Pu=w(()=>{fn();dnt();O7i();Ta();oYu();tPu();D7i();a0t();Ty();u3();O0t();lPu();$nt()});var dPu=w(()=>{dnt()});var _Pu=w(()=>{tBu();xBu();vQu();eYu();$Pu();mlt();slt();dPu();vBu((i)=>{let t=i.ctx;return CYu({...i,ctx:t,organization:t.organization})});rBu(cPu);syi(wBu);syi(iBu);syi(EQu)});function gPu(i){let t=i.type;if(typeof t!=="string")return!1;if(t==="text"||t==="reasoning")return i.state!=="streaming";if(t==="step-start")return!1;if(t.startsWith("tool-")||t==="dynamic-tool")return i.state==="output-available"||i.state==="output-error"||i.state==="output-denied";return!0}function BP0(i){let t=i.type??"";if(t==="reasoning")return"reasoning";if(t==="file")return"file";if(t.startsWith("tool-")||t==="dynamic-tool")return i.state==="output-available"||i.state==="output-error"||i.state==="output-denied"?"tool_result":"tool_call";return"text"}class gnt{ctx;base;seqByPart=new Map;emitted=new Set;finished=new Set;partKeyByRowId=new Map;finishMessageIdByRowId=new Map;nextSeq=0;constructor(i){this.ctx=i;this.base=i.baseTimeMs??Date.now()}seqFor(i){let t=this.seqByPart.get(i);if(t!==void 0)return t;let u=this.nextSeq++;return this.seqByPart.set(i,u),u}row(i,t,u,l,n,f=null){return{id:`${this.ctx.runId}:${i}:${u}`,seq:u,org_id:this.ctx.orgId,thread_id:this.ctx.threadId,run_id:this.ctx.runId,message_id:i,role:t,kind:l,payload:n,payload_ref:null,metadata:f,created_at:new Date(this.base+u).toISOString()}}emitMessageParts(i){let t=i.parts??[],u=[];for(let l=0;l<t.length;l++){let n=t[l];if(!gPu(n))continue;let f=`${i.id}#${l}`;if(this.emitted.has(f))continue;let c=this.seqFor(f),$=this.row(i.id,i.role,c,BP0(n),n);this.partKeyByRowId.set($.id,f),u.push($)}return u}markFinished(i,t,u=null){if(this.finished.has(i))return[];let l=this.seqFor(`${i}#finish`),n=this.row(i,t,l,"finish",{},u);return this.finishMessageIdByRowId.set(n.id,i),[n]}acknowledge(i){for(let t of i){let u=this.partKeyByRowId.get(t.id);if(u!==void 0)this.emitted.add(u);let l=this.finishMessageIdByRowId.get(t.id);if(l!==void 0)this.finished.add(l)}}emitUserMessage(i){return[...this.emitMessageParts(i),...this.markFinished(i.id,i.role,i.metadata??null)]}emitStepParts(i){return this.emitMessageParts(i)}emitFinal(i){return[...this.emitMessageParts(i),...this.markFinished(i.id,i.role,i.metadata??null)]}emitError(i,t){let u=`${i}#error`,l=[];if(!this.emitted.has(u)){let n=this.seqFor(u),f=this.row(i,"assistant",n,"error",{type:"text",text:`Error: ${t}`});this.partKeyByRowId.set(f.id,u),l.push(f)}return[...l,...this.markFinished(i,"assistant")]}}class tA{ctx;builder;constructor(i){this.ctx=i;this.builder=new gnt(i)}async appendBuiltRows(i){await this.ctx.storage.appendParts(i),this.builder.acknowledge(i)}async emitUserMessage(i){await this.appendBuiltRows(this.builder.emitUserMessage(i))}async emitStepParts(i){await this.appendBuiltRows(this.builder.emitStepParts(i))}async emitFinal(i){await this.appendBuiltRows(this.builder.emitFinal(i))}async emitError(i,t){await this.appendBuiltRows(this.builder.emitError(i,t))}}var M7i=()=>{};class Sa{intervalMs;lastBumpMs=new Map;constructor(i=3000){this.intervalMs=i}shouldBump(i,t=Date.now()){let u=this.lastBumpMs.get(i);if(u!==void 0&&t-u<this.intervalMs)return!1;return this.lastBumpMs.set(i,t),!0}clear(i){this.lastBumpMs.delete(i)}}class hPu{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 t=i??this.defaultWindowSize,{chronological:u,isWindowed:l}=this.thread.message_storage_version===2?await this.loadWindowedFromParts(t):await this.loadWindowedFromMessages(t),n=u.find((d)=>d.role!=="system");if(!n||n.role==="user")return u;let f=n,c=l?"[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:f.created_at,updated_at:f.updated_at},...u]}async loadWindowedFromMessages(i){let{messages:t,total:u}=await this.storage.listMessages(this.thread.id,{limit:i,sort:"desc"});return{chronological:[...t].reverse(),isWindowed:u>t.length}}async loadWindowedFromParts(i){let{messages:t,total:u}=await this.storage.messageParts().loadWindow(this.thread.id,{limit:i});return{chronological:t.map((n)=>({id:n.id,thread_id:this.thread.id,role:n.role,parts:n.parts,metadata:n.metadata??void 0,created_at:n.created_at,updated_at:n.created_at})),isWindowed:u>t.length}}async save(i){if(i.length===0)return;await this.storage.saveMessages(i)}}async function EPu(i,t){let{thread_id:u,defaultWindowSize:l}=t;if(!u)throw Error("createMemory: thread_id is required");let n=await i.get(u);if(!n)throw Error(`Thread not found: ${u}`);return new hPu({thread:n,storage:i,defaultWindowSize:l})}function vPu(i,t){let u=i.thinking.capabilities;if(!((u?.vision??!1)||(u?.file??!1))){if(t.some((f)=>f.parts?.some((c)=>c.type==="file")))throw new pu(400,{message:"This model does not support file uploads. Please change the model and try again."})}}var rPu=w(()=>{Zh()});function q7i(i){return async(t)=>{let u=null;try{u=await i.ctx.storage.threads.get(i.threadId)}catch{u=null}i.sseHub.emit(i.organizationId,t6(i.threadId,u?.status??"in_progress",{title:t,virtualMcpId:u?.virtual_mcp_id??void 0,createdBy:u?.created_by,triggerId:u?.trigger_id,branch:u?.branch??null,createdAt:u?.created_at,updatedAt:u?.updated_at}))}}var hnt=w(()=>{jl()});async function*wPu(i,t){let u=t.persistTitle??((n,f)=>t.ctx.storage.threads.update(n,{title:f}).then(()=>{})),l=!1;for await(let n of i){if(aZu(n)){console.warn("[title-interceptor] harness emitted deprecated data-title-input chunk; ignoring");continue}if(mZu(n)){if(l){console.warn("[title-interceptor] harness emitted multiple data-title-result chunks; ignoring extra");continue}if(l=!0,t.currentThreadTitle!==Fy)continue;let f=n.data.title;if(!f)continue;await u(t.threadId,f).catch((c)=>{console.error("[title-interceptor] persist failed for thread",t.threadId,c)});try{await t.onTitleUpdated?.(f)}catch(c){console.error("[title-interceptor] onTitleUpdated callback failed",c)}if(!t.isStreamFinished())try{t.writer.write({type:"data-thread-title",data:{title:f},transient:!0})}catch(c){console.error("[title-interceptor] writer.write failed",c)}continue}yield n}}var xPu=w(()=>{Iy()});function QP0(i){let t=i[Symbol.asyncIterator]();return new ReadableStream({async pull(u){try{let{value:l,done:n}=await t.next();if(n)u.close();else u.enqueue(l)}catch(l){u.error(l)}},async cancel(u){await t.return?.(u)}})}function YP0(i){let t=i.metadata?.usage;if(!t||typeof t!=="object"||Array.isArray(t))return null;let u=t,l=(n)=>typeof n==="number"?n:0;return{...u,inputTokens:l(u.inputTokens),outputTokens:l(u.outputTokens),totalTokens:l(u.totalTokens)}}function nb(i){let t=[],u=!1,l=!1,n=crypto.randomUUID(),f,c=new Promise((d)=>{f=d});return{uiStream:zV({originalMessages:i.originalMessages,execute:({writer:d})=>{let _=wPu(i.chunks,{ctx:null,isStreamFinished:()=>u,currentThreadTitle:i.title.currentThreadTitle,threadId:i.title.threadId,writer:d,onTitleUpdated:i.title.onTitleUpdated,persistTitle:i.title.persistTitle});d.merge(QP0(_))},onStepFinish:({responseMessage:d})=>{t.push(i.persistence.emitStepParts(d).catch((_)=>console.error("[consume-harness-stream] emitStepParts failed",_))),t.push(Promise.resolve(i.hooks?.onStep?.(d)).catch((_)=>console.error("[consume-harness-stream] onStep hook failed",_)))},onFinish:async({responseMessage:d,finishReason:_})=>{if(u=!0,await Promise.allSettled(t),!l)await i.persistence.emitFinal(d).catch((h)=>console.error("[consume-harness-stream] emitFinal failed",h));let g=YP0(d);if(g)await Promise.resolve(i.hooks?.onUsage?.(g)).catch((h)=>console.error("[consume-harness-stream] onUsage hook failed",h));await Promise.resolve(i.hooks?.onFinish?.(d,_)).catch((h)=>console.error("[consume-harness-stream] onFinish hook failed",h)),f()},onError:(d)=>{u=!0;let _=d instanceof Error?d.message:String(d);if(!l)l=!0,t.push(i.persistence.emitError(n,_).catch((g)=>console.error("[consume-harness-stream] emitError failed",g))),t.push(Promise.resolve(i.hooks?.onError?.(d)).catch((g)=>console.error("[consume-harness-stream] onError hook failed",g)));return i.sanitizeErrorText?i.sanitizeErrorText(d):_}}),whenComplete:c,isStreamFinished:()=>u}}var V7i=w(()=>{fn();xPu()});function za(i,t){let u=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:t,...i.limits?{limits:i.limits}:{},...u&&Object.keys(u).length>0?{capabilities:u}:{}}}function DPu(i){let t=i.credentialId,u=za(i.thinking,t);return{thinking:{...u,title:u.title??u.id},...i.fast?{fast:za(i.fast,t)}:{},...i.smart?{smart:za(i.smart,t)}:{},...i.image?{image:za(i.image,i.image.credentialId??t)}:{},...i.deepResearch?{deepResearch:za(i.deepResearch,i.deepResearch.credentialId??t)}:{}}}function OPu(i,t=[]){if(i==="stop")return t.filter((n)=>n.type==="text"&&n.text).map((n)=>n.text).join(`
108133
108140
  `).replace(/https?:\/\/[^\s)>\]]+/g,"").includes("?")?"requires_action":"completed";if(i==="tool-calls"){let u=t.some((n)=>n.type==="tool-user_ask"&&n.state==="input-available"),l=t.some((n)=>n.state==="approval-requested");return u||l?"requires_action":"completed"}return"failed"}function Ent(){return jt().podName}var yPu=w(()=>{p0()});function PP0(i,t,u){return i.pipeThrough(new TransformStream({transform(l,n){if(UPu.shouldBump(u))t.storage.threads.bumpProgress(u).catch(()=>{});n.enqueue(l)},flush(){UPu.clear(u)}}))}function AP0(i){let t=null;return new ReadableStream({async pull(u){try{t??=i().getReader();let{done:l,value:n}=await t.read();if(l)u.close();else u.enqueue(n)}catch(l){u.error(l)}},async cancel(u){await t?.cancel(u)}},{highWaterMark:0})}function vnt(i){if(i==="claude-code")return"claude-code";if(i==="codex")return"codex";return"decopilot"}function GP0(i,t){let u=!!i?.metadata?.githubRepo;if(t==="user-desktop"&&u)return{cwd:VZu};return{cwd:qZu}}function WP0(i,t){if(t!=="claude-code")return;for(let u=i.length-1;u>=0;u--){let l=i[u],n=l?.metadata;if(l?.role==="assistant"&&n?.codingAgentSessionId&&n?.codingAgentProvider==="claude-code")return n.codingAgentSessionId}return}async function kP0(i,t,u,l){let{keyInfo:n,apiKey:f}=await i.storage.aiProviderKeys.resolve(u,t);return e7i({providerId:n.providerId,apiKey:f,modelId:l})}async function jP0(i,t,u,l,n){let f=await i.boundAuth.apiKey.create({name:l,expiresIn:FPu,metadata:{organization:{id:u.id,slug:u.slug,name:u.name}}});return{url:`${n==="user-desktop"?BE():Vui()}/mcp/virtual-mcp/${t}`,headers:{Authorization:`Bearer ${f.key}`,"x-org-id":u.id},expiresAt:Date.now()+FPu*1000}}function TPu(i){let t=i.models;return{"decopilot.agent.id":i.agent.id,"decopilot.model.id":t.thinking.id,"decopilot.credential.id":t.credentialId,"decopilot.organization.id":i.organizationId,"decopilot.user.id":i.userId,"decopilot.thread.id":i.taskId??""}}async function IPu(i,t,u){return uGi("decopilot.dispatchRunAndWait",async(l)=>{let{taskId:n,uiStream:f,registrySignal:c}=await ZPu(i,t,u,l),$=u.streamBuffer,d=$?await $.createTailStream(n,i.abortSignal,{deliverPolicy:"new",closeOnDone:!0}):null;if($&&d){$.pump(f,n,c,i.organizationId);let _=d.getReader();try{while(!0){let{done:g}=await _.read();if(g)break}}finally{_.releaseLock()}}else{let _=f.getReader();try{while(!0){let{done:g}=await _.read();if(g)break}}finally{_.releaseLock()}}return{taskId:n}},TPu(i))}async function SP0(i,t,u,l){let[n,f,c]=await Promise.all([i.storage.threads.list(l,{limit:9,agentId:u}).catch(()=>null),i.storage.interests.getForAgent(t,u,l).catch(()=>null),i.storage.virtualMcps.list(t).catch(()=>null)]),$={};if(n&&n.total>0)$.recentThreads={total:n.total,threads:n.threads.map((d)=>({id:d.id,title:d.title,updated_at:d.updated_at}))};if(f&&f.interests.length>0)$.interests=f.interests.map((d)=>({title:d.title,summary:d.summary}));if(c)$.agents=c.map((d)=>({id:d.id,name:d.title,description:d.description,status:d.status}));return $}async function zP0({virtualMcp:i,agentId:t,organizationId:u,ctx:l}){let n=jci(t);if(!n)return i;let f=await _nu(n,{orgId:u,ctx:l}),c=f.selectedTools?[...f.selectedTools]:null;return{...i,metadata:{...i.metadata??{},instructions:f.instructions},connections:i.connections.map(($)=>({...$,selected_tools:c}))}}async function ZPu(i,t,u,l){let{runRegistry:n,streamBuffer:f,sseHub:c}=u;i={...i,messages:i.messages.map((_)=>_.id?_:{..._,id:SM()})};let $=!1,d;try{let _=i.models,g=await t.storage.aiProviderKeys.findById(_.credentialId,i.organizationId).catch(()=>null),h=i.harnessId??vnt(g?.providerId);l.setAttribute("decopilot.harnessId",h);let E=i.target??{sandboxProviderKind:"agent-sandbox"};if(E.sandboxProviderKind==="agent-sandbox")t.sandboxPreference="agent-sandbox",t.linkForCurrentRun=void 0;else t.sandboxPreference="user-desktop",t.linkForCurrentRun=E.link;l.setAttribute("decopilot.dispatchTarget.sandboxProviderKind",E.sandboxProviderKind);let v=DPu(_);if(h==="decopilot"){let xi=await xr(t.db,i.organizationId,t.auth.user?.role);if(!L5(xi,v.thinking.credentialId,v.thinking.id))throw Error("Model not allowed for your role");v=f_i(xi,v)}let r=i.windowSize??q2;if(!i.taskId)throw Error("dispatchRunAndWait: taskId is required");let x=(xi)=>h==="decopilot"&&xi?kP0(t,i.organizationId,xi.credentialId,xi.id):Promise.resolve(void 0),[O,y,X,N,U,J,T,Q]=await Promise.all([t.storage.virtualMcps.findById(i.agent.id,i.organizationId),x(v.thinking),x(v.fast),x(v.smart),x(v.image),x(v.deepResearch),EPu(t.storage.threads,{organization_id:i.organizationId,thread_id:i.taskId,userId:i.userId,defaultWindowSize:r}),h==="decopilot"&&E.sandboxProviderKind!=="user-desktop"?SP0(t,i.organizationId,i.agent.id,i.userId):Promise.resolve(void 0)]),B=y?{thinking:y,...X?{fast:X}:{},...N?{smart:N}:{},...U?{image:U}:{},...J?{deepResearch:J}:{}}:void 0,P=y?w7i(y):null;if(i.isResume)console.log("[decopilot:stream] resume \u2014 resolved source state",{taskId:i.taskId,harnessId:h,thinkingSourceResolved:!!y,imageSourceResolved:!!U,deepResearchSourceResolved:!!J,thinkingModelId:v.thinking.id,hasImage:!!v.image,hasDeepResearch:!!v.deepResearch});if(d=T.thread.id,t.metadata.threadId=T.thread.id,l.setAttribute("decopilot.thread.id",T.thread.id),T.thread.created_by!==i.userId)throw Error("You are not allowed to write to this thread because you are not the owner");if(P?.asyncResearch){let xi=[["thinking",v.thinking.id]];if(v.fast)xi.push(["fast",v.fast.id]);if(v.smart)xi.push(["smart",v.smart.id]);if(v.image)xi.push(["image",v.image.id]);for(let[Et,nt]of xi)if(P.asyncResearch.canHandle(nt))throw Error(`Model "${nt}" can only be used as a Deep Research model. It is not usable as the ${Et} model \u2014 set it in the Deep Research slot instead.`)}let H=async(...xi)=>{let Et=Date.now(),nt=[...new Map(xi.filter(Boolean).map((Bi)=>[Bi.id,Bi])).values()].filter((Bi)=>Bi.parts&&Bi.parts.length>0).map((Bi,_i)=>({...Bi,thread_id:T.thread.id,created_at:new Date(Et+_i).toISOString(),updated_at:new Date(Et+_i).toISOString()}));if(nt.length===0)return;await T.save(nt).catch((Bi)=>{XPu.add(1,{"org.id":i.organizationId}),console.error("[decopilot:stream] Error saving messages",Bi)})},k=T.thread.message_storage_version===2?new tA({storage:t.storage.threads.messageParts(),orgId:i.organizationId,threadId:T.thread.id,runId:T.thread.id}):null;if(!O)throw new hV("agent_not_found","Agent not found");let a=await zP0({virtualMcp:O,agentId:i.agent.id,organizationId:i.organizationId,ctx:t});if(i.isResume)await n.execute({type:"RESUME",taskId:T.thread.id,orgId:i.organizationId,userId:i.userId,abortController:new AbortController,podId:Ent()});else await n.execute({type:"START",taskId:T.thread.id,orgId:i.organizationId,userId:i.userId,abortController:new AbortController,podId:Ent(),runConfig:{models:i.models,agent:i.agent,temperature:i.temperature,toolApprovalLevel:i.toolApprovalLevel,mode:i.mode,windowSize:i.windowSize,triggerId:i.triggerId}});$=!0,await t.storage.threads.clearCancelRequested(T.thread.id);let S=crypto.randomUUID();await t.storage.threads.setRunFence(T.thread.id,S);let M=n.getAbortSignal(T.thread.id);if(!M)throw await n.execute({type:"FINISH",taskId:T.thread.id,threadStatus:"failed"}),Error("Run was cancelled immediately after starting");if(i.abortSignal){let xi=i.abortSignal;if(xi.aborted)await n.execute({type:"CANCEL",taskId:T.thread.id});else xi.addEventListener("abort",()=>{n.execute({type:"CANCEL",taskId:T.thread.id}).catch(()=>{})},{once:!0})}f?.purge(T.thread.id);let p=i.messages.filter((xi)=>xi.role==="system"),s=i.messages.find((xi)=>xi.role!=="system"),$i=s?(await nYu([s],t,{threadId:T.thread.id})).find((xi)=>xi.role!=="system"):void 0;if(!i.isResume){if(!$i)throw new hV("empty_request","No user message found in input \u2014 expected at least one non-system message");if(k)await k.emitUserMessage($i).catch((xi)=>{console.error("[decopilot:stream] v2 user-message emit failed",xi)});else await H($i)}let e=[],fi=await $Iu(T,$i,p,r),m=WP0(fi,h),di=t.organization,Oi=Date.now(),Di={inputTokens:0,outputTokens:0,totalTokens:0},Mi=await fYu(fi,t);vPu(i.models,Mi);let Ti=h==="decopilot"&&E.sandboxProviderKind!=="user-desktop"?{url:"",headers:{},expiresAt:0}:await jP0(t,i.agent.id,di,h==="claude-code"?"claude-code-session":h==="decopilot"?"decopilot-session":"codex-session",E.sandboxProviderKind),Qi=Ti.expiresAt>0?{kind:"http",url:Ti.url,headers:Ti.headers,expiresAt:Ti.expiresAt}:void 0,Vi=E.sandboxProviderKind==="user-desktop"&&di.slug?{kind:"http",baseUrl:`${BE()}/api/${encodeURIComponent(di.slug)}/object-storage`,headers:Ti.headers,expiresAt:Ti.expiresAt}:void 0,ui={harnessId:h,threadId:T.thread.id,runId:T.thread.id,resumeSessionRef:m,messages:Mi,workspace:GP0(a,E.sandboxProviderKind),models:v,modelSources:B,mcpSource:Qi,objectStorageSource:Vi,mcp:Ti,mode:i.mode,temperature:i.temperature,toolApprovalLevel:i.toolApprovalLevel,toolAllowlist:i.toolAllowlist??null,maxAgentSteps:i.maxAgentSteps,user:{id:i.userId,email:t.auth.user?.email??""},organizationId:i.organizationId,organizationSlug:di.slug,projectSlug:di.slug,virtualMcp:a,agent:{id:i.agent.id},branch:i.branch,taskId:i.taskId,triggerId:i.triggerId,currentThreadTitle:T.thread.title,runFenceToken:S,userContext:Q},ci=(xi)=>{Di={inputTokens:Di.inputTokens+xi.inputTokens,outputTokens:Di.outputTokens+xi.outputTokens,totalTokens:Di.totalTokens+xi.totalTokens}},ii=c?q7i({ctx:t,sseHub:c,threadId:T.thread.id,organizationId:i.organizationId}):void 0,o=async function*(){let xi={...ui,signal:M};if(E.sandboxProviderKind==="user-desktop")throw Error("user-desktop runs use the pull transport \u2014 dispatchRunAndWait must not run a local harness for them");yield*new plt({ctx:t,harnessId:h}).dispatch(xi)},bi=AP0(()=>PP0(nb({chunks:o(),originalMessages:fi,title:{currentThreadTitle:T.thread.title,threadId:T.thread.id,persistTitle:async(xi,Et)=>{await t.storage.threads.update(xi,{title:Et})},onTitleUpdated:ii},persistence:{emitStepParts:async(xi)=>{if(!k)return;await k.emitStepParts(xi)},emitFinal:async(xi)=>{if(k){await k.emitFinal(xi);return}await H(xi)},emitError:async(xi,Et)=>{if(M.aborted)return;let nt=wD(Et);if(k){await k.emitError(xi,nt);return}await H({id:xi,role:"assistant",parts:[{type:"text",text:`Error: ${nt}`}],metadata:{errorCategory:oz(Et)}})}},sanitizeErrorText:wD,hooks:{onUsage:ci,onStep:(xi)=>{let Et=n.dispatch({type:"STEP_DONE",taskId:T.thread.id});if(e.push(n.react(Et).catch((nt)=>{console.error("[decopilot:stream] onStepFinish reactor failed",nt)})),!k){let nt=Et[0]?.event;if(i.isResume?nt?.type==="STEP_COMPLETED":nt?.type==="STEP_COMPLETED"&&nt.stepCount%5===0)e.push(H(xi).catch((_i)=>{XPu.add(1,{"org.id":i.organizationId}),console.error("[decopilot:stream] onStepFinish save failed",_i)}))}},onFinish:async(xi,Et)=>{let nt=e.length,Bi=performance.now();if(await Promise.allSettled(e),NPu.record(performance.now()-Bi,{phase:"settle"}),M.aborted)return;await qu(0);let _i=JPu?B8():null,it=performance.now(),Xt=OPu(Et,xi?.parts);await n.execute({type:"FINISH",taskId:T.thread.id,threadStatus:Xt});let Wi=performance.now()-it;if(NPu.record(Wi,{phase:"save"}),JPu&&_i){let Nu=B8()??_i,ll=-1;try{ll=JSON.stringify(xi)?.length??-1}catch{}console.warn(JSON.stringify({msg:"decopilot-finish-trace",threadId:T.thread.id,pendingOps:nt,saveMs:Math.round(Wi),parts:xi?.parts?.length??0,messageBytes:ll,rssDelta:Nu.rss-_i.rss,heapUsedDelta:Nu.heapUsed-_i.heapUsed,externalDelta:Nu.external-_i.external}))}Xu.capture({distinctId:i.userId,event:"chat_message_completed",groups:{organization:i.organizationId},properties:{organization_id:i.organizationId,thread_id:T.thread.id,agent_id:i.agent.id,model_id:v.thinking.id,model_title:v.thinking.title,mode:i.mode,duration_ms:Date.now()-Oi,finish_reason:Et,thread_status:Xt,input_tokens:Di.inputTokens,output_tokens:Di.outputTokens,total_tokens:Di.totalTokens,is_resume:i.isResume??!1}})},onError:(xi)=>{if(M.aborted){Xu.capture({distinctId:i.userId,event:"chat_message_aborted",groups:{organization:i.organizationId},properties:{organization_id:i.organizationId,thread_id:T.thread.id,agent_id:i.agent.id,model_id:v.thinking.id,mode:i.mode,duration_ms:Date.now()-Oi,is_resume:i.isResume??!1}});return}console.error("[decopilot] stream error:",F$(xi)),Xu.capture({distinctId:i.userId,event:"chat_message_failed",groups:{organization:i.organizationId},properties:{organization_id:i.organizationId,thread_id:T.thread.id,agent_id:i.agent.id,model_id:v.thinking.id,mode:i.mode,duration_ms:Date.now()-Oi,error_category:oz(xi),error_message:xi instanceof Error?xi.message:F$(xi),is_resume:i.isResume??!1}}),n.execute({type:"FINISH",taskId:T.thread.id,threadStatus:"failed"}).catch((Et)=>{console.error("[decopilot:stream] onError reactor failed",Et)})}}}).uiStream,t,T.thread.id));return{taskId:T.thread.id,uiStream:bi,registrySignal:M,runFenceToken:S,wireHarnessInput:ui}}catch(_){if($&&d)n.execute({type:"FINISH",taskId:d,threadStatus:"failed"}).catch((g)=>{console.error("[decopilot:stream] catch-block reactor failed",g)});throw _}}async function bP0(i,t,u){if(i.target?.sandboxProviderKind!=="user-desktop")return null;let l=await t.storage.virtualMcps.findById(i.agent.id,i.organizationId).catch(()=>null);if(!l)return null;let n=l.metadata??{},f=n.githubRepo??null,c;if(f)try{let x=f.connectionId,{cloneUrl:O,gitUserName:y,gitUserEmail:X}=x?await(async()=>{return await Zz({ctx:t,connectionId:x,organizationId:i.organizationId,onLegacyMintError:(N)=>{console.warn("[pullDispatch] repo-scoped legacy token mint failed",{connectionId:x,error:N instanceof Error?N.message:String(N)})}}),Bz(x,f.owner,f.name,t.db,t.vault)})():cgi(f.owner,f.name);c={cloneUrl:O,branch:i.branch??void 0,userName:y,userEmail:X}}catch(x){console.warn(`[pullDispatch] failed to resolve clone info for agent=${i.agent.id}:`,x instanceof Error?x.message:String(x))}let{runtime:$,packageManager:d,packageManagerPath:_}=ngi(n),g;if($&&d&&($==="node"||$==="bun"||$==="deno")&&(d==="npm"||d==="pnpm"||d==="yarn"||d==="bun"||d==="deno"))g={runtime:$,packageManager:d,..._?{packageManagerPath:_}:{}};let h,E;try{if(t.objectStorage){let x=await Wyi(t.objectStorage,{isProduction:jt().nodeEnv==="production"});h=x.hosts,E=x.allowSameHostDev}}catch(x){console.warn(`[pullDispatch] failed to derive offload allowlist for agent=${i.agent.id}:`,x instanceof Error?x.message:String(x))}let v=t.organization?.slug?await jyi(t,{orgSlug:t.organization.slug,orgId:i.organizationId,baseUrl:BE()}):void 0,r=p6({userName:t.auth.user?.name,userEmail:t.auth.user?.email});return{handle:u,...c?{repo:c}:{},...g?{workload:g}:{},...r?{operator:r}:{},...h!==void 0?{offloadAllowedHosts:h}:{},...E!==void 0?{offloadAllowSameHostDev:E}:{},...v?{orgFsConfigJson:v}:{}}}async function BPu(i,t,u){return uGi("decopilot.pullDispatch",async(l)=>{let{taskId:n,runFenceToken:f,wireHarnessInput:c}=await ZPu(i,t,u,l),$=c,d=null,_=new TextEncoder().encode(JSON.stringify(c.messages)),g=_.byteLength+Buffer.byteLength(JSON.stringify({...c,messages:void 0}),"utf8");if(DIu(g))if(t.objectStorage)try{let v=crypto.randomUUID(),r=xIu(v);await t.objectStorage.put(r,_,{contentType:"application/json"}),d={url:await t.objectStorage.presignedGetUrl(r,600,{requireFetchable:!0}),bytes:_.byteLength,sha256:await OIu(_)},$={...c,messages:[]},console.log(`[pullDispatch] offloaded messages to object storage key=${r} bytes=${_.byteLength} runId=${n}`)}catch(v){console.error(`[pullDispatch] message offload failed, work item may exceed NATS limit runId=${n}:`,v instanceof Error?v.message:String(v))}else console.warn(`[pullDispatch] harnessInput exceeds NATS limit but no object storage configured \u2014 work item may be rejected runId=${n}`);let h=null;if(i.target?.sandboxProviderKind==="user-desktop")try{let v=KP0({agentId:i.agent.id,userId:i.userId,organizationId:i.organizationId,branch:i.branch??"ephemeral"});h=await bP0(i,t,v)}catch(v){console.warn(`[pullDispatch] failed to resolve sandbox config agent=${i.agent.id}:`,v instanceof Error?v.message:String(v))}let E=t.organization?.slug??null;if(!E)E=(await t.db.selectFrom("organization").select("slug").where("id","=",i.organizationId).executeTakeFirst())?.slug??null;if(!E)throw Error(`pullDispatch: could not resolve org slug for organization ${i.organizationId}`);return{taskId:n,runFenceToken:f,harnessInput:$,messagesRef:d,sandboxConfig:h,orgSlug:E}},TPu(i))}function KP0(i){let t=Jr({orgId:i.organizationId,virtualMcpId:i.agentId,branch:i.branch});return Vz({userId:i.userId,projectRef:t},i.branch)}var XPu,NPu,JPu,UPu,FPu=3600;var rnt=w(()=>{Osi();U1();wIu();VC();pyi();_g();RH();$gi();qV();_lt();p0();_Pu();w0t();Iy();Clt();M7i();B7i();rPu();hnt();V7i();yV();Ud();glt();pf();yPu();H1();XPu=t1.createCounter("decopilot.save.errors",{description:"Number of message-save failures during decopilot run dispatch (v1 and v2 paths)",unit:"{errors}"}),NPu=t1.createHistogram("decopilot.finish.duration",{description:"Wall time of onFinish flush segments, tagged by phase",unit:"ms"}),JPu=process.env.DECOPILOT_FINISH_TRACE==="1",UPu=new Sa});function QPu(i,t=15000){if(!i.body)return i;let u=RP0(i.body,t);return new Response(u,{status:i.status,statusText:i.statusText,headers:i.headers})}function RP0(i,t=15000){let u=null,l=null,n=!1,f=!1,c=()=>{if(l!==null)clearInterval(l),l=null};return new ReadableStream({async start($){u=i.getReader(),l=setInterval(()=>{if(n||f)return;try{$.enqueue(HP0)}catch{n=!0,c()}},t);try{while(!0){let{done:_,value:g}=await u.read();if(_){n=!0,c(),$.close();return}let h=g.byteLength;if(h>0)f=!(h>=2&&g[h-2]===10&&g[h-1]===10);$.enqueue(g)}}catch(_){n=!0,c();try{$.error(_)}catch{}}finally{n=!0,c();try{u.releaseLock()}catch{}}},cancel($){n=!0,c(),(u??i).cancel($).catch(()=>{})}})}var HP0;var YPu=w(()=>{HP0=new TextEncoder().encode(`: keepalive
108134
108141
 
108135
108142
  `)});function LP0(i){if(i==="claude-code")return"claude-code";if(i==="codex")return"codex";if(i==="decopilot")return"decopilot-sandbox";return null}async function PPu(i,t){if(Nr(i.sandboxProviderKind)!=="user-desktop")return{ok:!0,target:{sandboxProviderKind:"agent-sandbox"}};let l=await t.linkClaimRegistry.get(i.userId);if(!l)return{ok:!1,error:{kind:"user_desktop_link_offline"}};let n=LP0(i.harnessId);if(n&&!l.capabilities.includes(n))return{ok:!1,error:{kind:"user_desktop_link_capability_missing",activeCapabilities:l.capabilities}};return{ok:!0,target:{sandboxProviderKind:"user-desktop",link:l}}}var APu=w(()=>{_g()});function CP0(i){let t=2166136261;for(let u=0;u<i.length;u++)t^=i.charCodeAt(u),t=Math.imul(t,16777619);return(t>>>0)%100}function eP0(i){if(i==null)return 0;let t=Number.parseInt(i,10);if(Number.isNaN(t))return 0;if(t<0)return 0;if(t>100)return 100;return t}function MP0(i,t){if(t<=0)return!1;if(t>=100)return!0;return CP0(i)<t}function GPu(i){return MP0(i,eP0(process.env.STREAM_OF_RECORD_V2_PERCENT))}import{createHash as qP0}from"crypto";function xnt(i){if(i===null||typeof i!=="object")return JSON.stringify(i);if(Array.isArray(i))return`[${i.map(xnt).join(",")}]`;return`{${Object.keys(i).sort().map((l)=>`${JSON.stringify(l)}:${xnt(i[l])}`).join(",")}}`}function VP0(i){if(!i)return;if(i.role==="user"&&i.id)return i.id;return qP0("sha1").update(xnt(i)).digest("hex")}async function aP0(i){let t=oyi(i),u=await i.req.json(),l=hIu.safeParse(u);if(!l.success)throw new pu(400,{message:l.error.message});let{messages:n,...f}=l.data,c=n,{systemMessages:$,requestMessage:d}=cIu(c);return{organization:t,systemMessages:$,requestMessage:d,...f}}async function mP0(i,t,u){try{return(await i.storage.aiProviderKeys.findById(t,u))?.providerId}catch{return}}function wnt(i){let t=i.modelMeta.capabilities;return{id:i.modelId,title:i.modelMeta.title??i.modelId,provider:i.modelMeta.providerId??null,capabilities:t&&t.length>0?{vision:t.includes("vision")||t.includes("image")||void 0,text:t.includes("text")||void 0,reasoning:t.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 oP0(i,t,u){if(u==="claude-code"||u==="codex"){let c=t==="fast"||t==="smart"||t==="thinking"?t:"smart",$=pTu(u,c);if(!$)throw Error(`No model mapping for harness "${u}" tier "${c}"`);return{credentialId:`desktop:${u}`,thinking:{id:$.modelId,title:$.label,provider:u}}}let[l,n,f]=await Promise.all([sy(i,t??"smart"),uz(i,"image"),uz(i,"web_research")]);return{credentialId:l.credentialId,thinking:wnt(l),...n?{image:{...wnt(n),credentialId:n.credentialId}}:{},...f?{deepResearch:{...wnt(f),credentialId:f.credentialId}}:{}}}function sP0(i){let{taskIdInput:t,thread:u,requestedHarnessId:l,requestedSandboxProviderKind:n,requestedBranch:f}=i;if(!t||!u?.harness_id)return{harnessId:l,sandboxProviderKind:n,branch:f,locked:!1};if(l&&l!==u.harness_id)console.warn("decopilot.submit: ignored harness override on locked thread",{threadId:t,requested:l,locked:u.harness_id});return{harnessId:u.harness_id,sandboxProviderKind:u.sandbox_provider_kind??void 0,branch:u.branch??null,locked:!0}}async function pP0(i,t){let u=i.get("meshContext"),{organization:l,tier:n,agent:f,systemMessages:c,requestMessage:$,temperature:d,memory:_,thread_id:g,branch:h,toolApprovalLevel:E,mode:v,sandboxProviderKind:r,harnessId:x}=await aP0(i),O=g??_?.thread_id;if(t&&O&&O!==t)throw new pu(400,{message:"threadId in URL does not match thread_id in body"});let y=t??O,X=u.auth?.user?.id;if(!X)throw new pu(401,{message:"User ID is required"});let N=y?await u.storage.threads.get(y):null,{harnessId:U,sandboxProviderKind:J,branch:T}=sP0({taskIdInput:y,thread:N,requestedHarnessId:x,requestedSandboxProviderKind:r,requestedBranch:h}),Q=await oP0(u,n,U),B=await xr(u.db,l.id,u.auth.user?.role);if(B!==void 0&&!L5(B,Q.credentialId,Q.thinking.id))throw new pu(403,{message:"Model not allowed for your role"});let P=f_i(B,Q);return{messages:[...c,$],models:P,agent:f,temperature:d,toolApprovalLevel:E,mode:v,organizationId:l.id,userId:X,taskId:y,windowSize:_?.windowSize??q2,branch:T??null,sandboxProviderKind:J??null,harnessId:U??null}}function Dnt(i){let{cancelBroadcast:t,streamBuffer:u,runRegistry:l,linkClaimRegistry:n}=i,f=new kt;return f.get("/:org/decopilot/allowed-models",async(c)=>{try{let $=c.get("meshContext"),d=oyi(c),_=$.auth.user?.role,g=await xr($.db,d.id,_);return c.json(V2u(g))}catch($){if(console.error("[decopilot:allowed-models] Error",$),$ instanceof pu)return c.json({error:$.message},$.status);return c.json({error:$ instanceof Error?$.message:"Internal error"},500)}}),f.post("/:org/decopilot/threads/:threadId/messages",async(c)=>{try{let $=c.get("meshContext"),d=await pP0(c,c.req.param("threadId")),_=d.taskId;if(!_)throw new pu(400,{message:"threadId is required"});let g=null;try{g=await $.storage.threads?.get?.(_)??null}catch{g=null}let h=g?.branch??d.branch??"ephemeral",E=g?.sandbox_provider_kind??null,v=await mP0($,d.models.credentialId,d.organizationId),r=vnt(v),x=g?.harness_id??null;if(!E||!x){if(E=E??d.sandboxProviderKind??await Gyi(d.userId,{linkClaimRegistry:n,resolveEnvKind:Vv}),x=x??d.harnessId??r,g){let B=!1;if(g.message_storage_version!==2&&GPu(_))try{let{total:P}=await $.storage.threads.listMessages(_,{limit:1});B=P===0}catch{B=!1}try{await $.storage.threads?.update?.(_,{sandbox_provider_kind:E,harness_id:x,branch:h,...B?{message_storage_version:2}:{}})}catch(P){console.warn("[decopilot:messages] failed to persist thread pins",P)}}}let O=await PPu({harnessId:x,sandboxProviderKind:E,userId:d.userId},{linkClaimRegistry:n});if(!O.ok)return c.json({error:"link_unavailable",code:O.error.kind,activeCapabilities:O.error.kind==="user_desktop_link_capability_missing"?O.error.activeCapabilities:void 0},409);let y=O.target,{abortSignal:X,...N}=d,U={...N,target:y,harnessId:x},J=d.messages[d.messages.length-1],T=VP0(J),Q=T?`thread-run:${_}:${T}`:void 0;return await wsi({threadId:_,request:U,source:"user-message"},{workflowID:Q}),c.json({taskId:_},202)}catch($){if(console.error("[decopilot:messages] Error",$),$ instanceof tz)return c.json({error:$.message},400);if($ instanceof pu)return c.json({error:$.message},$.status);return Xu.captureException($),c.json({error:$ instanceof Error?$.message:JSON.stringify($)},500)}}),f.post("/:org/decopilot/cancel/:threadId",async(c)=>{let{ctx:$,taskId:d,thread:_,organization:g,userId:h}=await _Iu(c);if(await $.storage.threads.setCancelRequested(d,g.id),(await l.execute({type:"CANCEL",taskId:d})).some((v)=>v.event.type==="RUN_FAILED"))return t.publishControlFrame(h,{type:"cancel",runId:d}),c.json({cancelled:!0});if(t.broadcast(d),t.publishControlFrame(h,{type:"cancel",runId:d}),_.status==="in_progress")console.warn("[decopilot:cancel] Ghost run detected, force-failing",{taskId:d}),l.execute({type:"FORCE_FAIL",taskId:d,reason:"ghost",orgId:g.id}).catch((v)=>{console.error("[decopilot:cancel] Failed to force-fail ghost thread",{taskId:d,err:v})});return c.json({cancelled:!0,async:!0},202)}),f.get("/:org/decopilot/threads/:threadId/stream",async(c)=>{try{let{taskId:$,thread:d}=await alt(c),_=d.status==="in_progress"?"all":"new",g=await u.createTailStream($,c.req.raw.signal,{deliverPolicy:_});if(!g)return c.body(null,204);let h=zV({execute:async({writer:v})=>{let r=g.getReader();try{while(!0){let{done:x,value:O}=await r.read();if(x)break;v.write(O)}}finally{r.releaseLock()}}}),E=SV({stream:h,consumeSseStream:x7});return QPu(E)}catch($){if($ instanceof pu)throw $;return console.error("[decopilot:stream] Error",F$($)),c.body(null,500)}}),f}var WPu=w(()=>{Ldi();tIu();U1();fn();R0();Zh();Iy();Clt();gIu();yV();EIu();rnt();Rdi();YPu();APu();_g()});var kPu=w(()=>{WPu()});var a7i=()=>{let i=new kt;return i.post("/connections/:connectionId/oauth-token",async(t)=>{let u=t.get("meshContext"),l=t.req.param("connectionId");if(!(u.auth.user?.id??u.auth.apiKey?.userId??null))return t.json({error:"Unauthorized"},401);let f=u.organization?.id;if(!f)return t.json({error:"Organization context required"},403);let c=await u.storage.connections.findById(l,f);if(!c)return t.json({error:"Connection not found"},404);let $=await t.req.json();if(!$.accessToken)return t.json({error:"accessToken is required"},400);if($.tokenEndpoint){let v;try{v=new URL($.tokenEndpoint)}catch{return t.json({error:"tokenEndpoint must be a valid URL"},400)}if(v.protocol!=="http:"&&v.protocol!=="https:")return t.json({error:"tokenEndpoint must be an http(s) URL"},400)}let d=$.expiresIn?new Date(Date.now()+$.expiresIn*1000):null,_=$.tokenEndpoint??null;if(_?.includes("/oauth-proxy/")&&c.connection_url)try{let v=await eS(c.connection_url);if(v)try{let r=new URL(v);if(r.protocol==="http:"||r.protocol==="https:")_=v}catch{}}catch{}let g=new ef(u.db,u.vault),h={connectionId:l,accessToken:$.accessToken,refreshToken:$.refreshToken??null,scope:$.scope??null,expiresAt:d,clientId:$.clientId??null,clientSecret:$.clientSecret??null,tokenEndpoint:_},E=await g.upsert(h);return t.json({success:!0,expiresAt:E.expiresAt})}),i.delete("/connections/:connectionId/oauth-token",async(t)=>{let u=t.get("meshContext"),l=t.req.param("connectionId");if(!(u.auth.user?.id??u.auth.apiKey?.userId??null))return t.json({error:"Unauthorized"},401);let f=u.organization?.id;if(!f)return t.json({error:"Organization context required"},403);if(!await u.storage.connections.findById(l,f))return t.json({error:"Connection not found"},404);return await new ef(u.db,u.vault).delete(l),t.json({success:!0})}),i.get("/connections/:connectionId/oauth-token/status",async(t)=>{let u=t.get("meshContext"),l=t.req.param("connectionId");if(!(u.auth.user?.id??u.auth.apiKey?.userId??null))return t.json({error:"Unauthorized"},401);let f=u.organization?.id;if(!f)return t.json({error:"Organization context required"},403);if(!await u.storage.connections.findById(l,f))return t.json({error:"Connection not found"},404);let $=new ef(u.db,u.vault),d=await $.get(l);if(!d)return t.json({hasToken:!1,isExpired:!0,canRefresh:!1});let _=$.isExpired(d),g=!!d.refreshToken&&!!d.tokenEndpoint;return t.json({hasToken:!0,isExpired:_,canRefresh:g,expiresAt:d.expiresAt})}),i};var Ont=w(()=>{R0();Jdi();Wv()});var iA0,jPu=(i={})=>async(t,u)=>{await u();let n=(t.req.matchedRoutes??[]).find(($)=>$.method!=="ALL"&&!$.path.endsWith("*"));if(!n)return;if(iA0.has(n.path))return;if(n.path.startsWith("/api/:org/"))return;if(i.mountPath!==void 0&&n.basePath!==i.mountPath)return;let f=t.get("meshContext"),c=t.get("deprecatedRouteAttribution");console.log("deprecated route",{route:t.req.routePath,method:t.req.method,org:f?.organization?.slug??c?.organizationId,user:f?.auth?.user?.id,connection:c?.connectionId,ua:t.req.header("user-agent")})},DD,Dg=(i)=>jPu(i);var ynt=w(()=>{iA0=new Set(["/api/deco-sites/profile"]),DD=jPu()});function SPu(i,t){if(i instanceof pu)return i.getResponse();console.error("Server error :",i);let u=i instanceof Error?i.message:"Unknown error";return t.json({error:"Internal Server Error",message:u},500)}var zPu=w(()=>{Zh()});var fb=(i)=>{let t=i.req.header("sec-fetch-dest");if(t!==void 0)return t==="document";let u=i.req.header("accept")??"";return u.includes("text/html")&&!/text\/html\s*;\s*q\s*=\s*0/.test(u)};var uA=async(i,t)=>{let u=i.req.param("org");if(!u)return i.json({error:"org slug missing in path"},400);let l=i.get("meshContext");if(!l?.db)return i.json({error:"meshContext not initialized"},500);let n=l.db,f=await n.selectFrom("organization").select(["id","slug","name","metadata"]).where("slug","=",u).executeTakeFirst();if(!f){if(fb(i))return i.redirect(`/${encodeURIComponent(u)}`,302);return i.json({error:`organization "${u}" not found`},404)}if(M2(f)){if(fb(i))return i.redirect(`/${encodeURIComponent(u)}`,302);return i.json({error:`organization "${u}" not found`},404)}let c=l.auth?.user?.id,$;if(c){let d=await n.selectFrom("member").select(["role"]).where("userId","=",c).where("organizationId","=",f.id).executeTakeFirst();if(!d){if(fb(i))return i.redirect(`/${encodeURIComponent(f.slug)}`,302);return i.json({error:"forbidden: not a member of organization"},403)}$=d.role}return l.organization={id:f.id,slug:f.slug,name:f.name,role:$},l.access.setOrganizationId(f.id),l.access.setRole($),Ndi(l,f),await t()};var Xnt=w(()=>{LS()});var bPu="Payload Too Large",KPu,S6=(i)=>{let t=i.onError||(()=>{let l=new Response(bPu,{status:413});throw new pu(413,{res:l})}),u=i.maxSize;return async function(n,f){if(!n.req.raw.body)return f();let c=n.req.raw.headers.has("transfer-encoding"),$=n.req.raw.headers.has("content-length");if($&&!c)return parseInt(n.req.raw.headers.get("content-length")||"0",10)>u?t(n):f();let d=0,_=n.req.raw.body.getReader(),h={body:new ReadableStream({async start(E){try{for(;;){let{done:v,value:r}=await _.read();if(v)break;if(d+=r.length,d>u){E.error(new KPu(bPu));break}E.enqueue(r)}}finally{E.close()}}}),duplex:"half"};if(n.req.raw=new Request(n.req.raw,h),await f(),n.error instanceof KPu)n.res=await t(n)}};var cb=w(()=>{Zh();KPu=class extends Error{constructor(i){super(i);this.name="BodyLimitError"}}});function tA0(i){if(typeof i!=="object"||i===null||Array.isArray(i))return!1;let t=i.op;if(t!=="eq"&&t!=="contains"&&t!=="in")return!1;if(t==="in")return Array.isArray(i.value);if(t==="contains")return typeof i.value==="string";return"value"in i}function HPu(i,t){return i.toLowerCase().includes(t.toLowerCase())}function uA0(i,t){if(tA0(t)){if(t.op==="eq")return RPu(i,t.value);if(t.op==="contains"){if(typeof i==="string")return HPu(i,t.value);if(Array.isArray(i))return i.some((u)=>typeof u==="string"&&HPu(u,t.value));return!1}if(t.op==="in"){let u=t.value;if(Array.isArray(i))return i.some((l)=>u.includes(l));return u.includes(i)}return!1}if(typeof t==="object"&&t!==null)return!1;return RPu(i,t)}function RPu(i,t){if(Array.isArray(i))return i.includes(t);return i===t}class $b{storage;fire;static MAX_EVENT_PAYLOAD_BYTES=1048576;constructor(i,t){this.storage=i;this.fire=t}dispatchForEvents(i){for(let t of i)this.onEvent(t).catch((u)=>{console.error(`[AutomationDispatch] Error processing event ${t.type}:`,u)})}async onEvent(i){let u=(await this.storage.findActiveEventTriggers(i.source,i.type,i.organizationId)).filter((n)=>this.paramsMatch(n.params,i.data)),l=await Promise.allSettled(u.map((n)=>this.fire({automation:n.automation,trigger:n,contextMessages:this.buildContextMessages(i),idempotencyKey:i.id?`evt:${i.id}:trig:${n.id}`:void 0})));for(let[n,f]of l.entries()){let c=u[n];if(f.status==="rejected")console.error(`[AutomationDispatch] Trigger ${c.id} ("${c.automation.name}") REJECTED:`,f.reason)}}paramsMatch(i,t){if(!i)return!0;let u;try{u=JSON.parse(i)}catch{return!1}if(typeof u!=="object"||u===null||Array.isArray(u))return!1;let l=u;if(Object.keys(l).length===0)return!0;if(typeof t!=="object"||t===null)return!1;let n=t;return Object.entries(l).every(([f,c])=>uA0(n[f],c))}buildContextMessages(i){let t=JSON.stringify(i.data,null,2)??"null";if(t.length>$b.MAX_EVENT_PAYLOAD_BYTES)t=t.slice(0,$b.MAX_EVENT_PAYLOAD_BYTES)+`