decocms 4.83.0 → 4.83.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 (231) hide show
  1. package/dist/client/assets/{AlertCircle-DPEsW7A8.js → AlertCircle-C-LWGksh.js} +1 -1
  2. package/dist/client/assets/{AreaChart-BDBkVxFA.js → AreaChart-BuQ7pYh_.js} +1 -1
  3. package/dist/client/assets/{ArrowUp-B_VVATf8.js → ArrowUp-BeEo8zxR.js} +1 -1
  4. package/dist/client/assets/{ArrowUpRight-DPt871Ex.js → ArrowUpRight-Cpd1Kvoc.js} +1 -1
  5. package/dist/client/assets/{CheckCircle-Bhjgrg4k.js → CheckCircle-D6vue6JR.js} +1 -1
  6. package/dist/client/assets/{ChevronDown-ClEtq8UA.js → ChevronDown-Chms7f47.js} +1 -1
  7. package/dist/client/assets/{ChevronRight-B9DmLAKh.js → ChevronRight-DGKhdwsU.js} +1 -1
  8. package/dist/client/assets/{ChevronUp-Y_qcNB-R.js → ChevronUp-B2kc02W-.js} +1 -1
  9. package/dist/client/assets/{Copy01-tOHQDVdb.js → Copy01-BLPcoB-x.js} +1 -1
  10. package/dist/client/assets/{DotsVertical-CmHvBgAo.js → DotsVertical-Bv_Wu1PR.js} +1 -1
  11. package/dist/client/assets/{Eye-DkqzK9v4.js → Eye--S6NkM5F.js} +1 -1
  12. package/dist/client/assets/{FilterLines-Da90Z39y.js → FilterLines-CVyIbk7P.js} +1 -1
  13. package/dist/client/assets/{Globe01-BptLpR6D.js → Globe01-D8U_-ef0.js} +1 -1
  14. package/dist/client/assets/{Globe04-5erCJGew.js → Globe04-Cf7fSPDC.js} +1 -1
  15. package/dist/client/assets/{HardDrive-BWMqpfxS.js → HardDrive-BDXue_9V.js} +1 -1
  16. package/dist/client/assets/{Image01-XM4bpaLw.js → Image01-BOJVTyLq.js} +1 -1
  17. package/dist/client/assets/{Key01-ByxRAii_.js → Key01-DgOZ1Vl-.js} +1 -1
  18. package/dist/client/assets/{LayoutLeft-B9Jd6ymK.js → LayoutLeft-uipFY-Sc.js} +1 -1
  19. package/dist/client/assets/{LinkExternal01-CKVW-eEM.js → LinkExternal01-Cq7tHe_6.js} +1 -1
  20. package/dist/client/assets/{Monitor01-ClZ2KmM9.js → Monitor01-C0kqyHBJ.js} +1 -1
  21. package/dist/client/assets/{Package-CDoMKJ25.js → Package-2_HSkxNk.js} +1 -1
  22. package/dist/client/assets/{Palette-Dj74Mlc6.js → Palette-DUf6RWjx.js} +1 -1
  23. package/dist/client/assets/{Play-D5sDqr8I.js → Play-D27HpOrJ.js} +1 -1
  24. package/dist/client/assets/{Plus-JOcsz2OW.js → Plus-CX4xPpn4.js} +1 -1
  25. package/dist/client/assets/{SearchLg-BHMKxNfO.js → SearchLg-EiBSceY9.js} +1 -1
  26. package/dist/client/assets/{SearchMd-C-NJ_45S.js → SearchMd-CjaEgvWB.js} +1 -1
  27. package/dist/client/assets/{Settings02-CVFCJqEn.js → Settings02-5t6-pGmO.js} +1 -1
  28. package/dist/client/assets/{Shield01-Bj6HGuxh.js → Shield01-DxxbOkrj.js} +1 -1
  29. package/dist/client/assets/{Star01-QG8pK1yw.js → Star01-DBLmagOx.js} +1 -1
  30. package/dist/client/assets/{Stars01-DqPZujie.js → Stars01-D-dD7V12.js} +1 -1
  31. package/dist/client/assets/{Stars02-D1eOi134.js → Stars02-BHQ6SybJ.js} +1 -1
  32. package/dist/client/assets/{Sun-DHI7Rs1S.js → Sun-7RqH2_Dg.js} +1 -1
  33. package/dist/client/assets/{SwitchHorizontal01-D8ShLQwH.js → SwitchHorizontal01-Dm27fxw8.js} +1 -1
  34. package/dist/client/assets/{Tool01-C6ssLf07.js → Tool01-Bk7pamHg.js} +1 -1
  35. package/dist/client/assets/{Tool02-BHHNM_g4.js → Tool02-CngweHED.js} +1 -1
  36. package/dist/client/assets/{Trash01-BtophoGC.js → Trash01-Bi1KaIxH.js} +1 -1
  37. package/dist/client/assets/{TrendUp01-WOe5Y0pM.js → TrendUp01-DsSWSiUz.js} +1 -1
  38. package/dist/client/assets/{Upload01-CXhKVCP8.js → Upload01-BWPUocl6.js} +1 -1
  39. package/dist/client/assets/{User01-uwH1s6Qn.js → User01-s23e9wZl.js} +1 -1
  40. package/dist/client/assets/{Users01-suVU8oKl.js → Users01-CNMhmtlD.js} +1 -1
  41. package/dist/client/assets/{Users03-Zrh5Q_ci.js → Users03-CTnD7KhC.js} +1 -1
  42. package/dist/client/assets/{X-BolYo4iB.js → X-CLk-1WTe.js} +1 -1
  43. package/dist/client/assets/{XCircle-CnJ70X3w.js → XCircle-2O_4kWp7.js} +1 -1
  44. package/dist/client/assets/{XClose-BdaQO-2_.js → XClose-DSEAQFLe.js} +1 -1
  45. package/dist/client/assets/{Zap-BzNhtsnx.js → Zap-BAgOs3IO.js} +1 -1
  46. package/dist/client/assets/{ZapSquare-DMvgJwuD.js → ZapSquare-T3uj9o0S.js} +1 -1
  47. package/dist/client/assets/{ZoomOut-B5XPtpBa.js → ZoomOut-B7mxhvah.js} +1 -1
  48. package/dist/client/assets/{access-gate-CjWAQSdR.js → access-gate-avJTtHpg.js} +1 -1
  49. package/dist/client/assets/{add-section-modal-CyW16nLc.js → add-section-modal-BL-x5qaG.js} +1 -1
  50. package/dist/client/assets/{agent-icon-BGgFt2fk.js → agent-icon-D18juLx-.js} +1 -1
  51. package/dist/client/assets/{agents-list-MwwVi6Ba.js → agents-list-DLkLGDrw.js} +1 -1
  52. package/dist/client/assets/{ai-providers-DAP6QknZ.js → ai-providers-KsLhnp0X.js} +1 -1
  53. package/dist/client/assets/{alert-Beqn0Fvg.js → alert-Bele4j8y.js} +1 -1
  54. package/dist/client/assets/{alert-dialog-CwKyb2j-.js → alert-dialog-BNeEAttR.js} +1 -1
  55. package/dist/client/assets/{app-editor-DseSILWA.js → app-editor-B0BrwnQg.js} +1 -1
  56. package/dist/client/assets/{auth-D4bTHSVX.js → auth-D4yHRD2-.js} +1 -1
  57. package/dist/client/assets/{auth-catchall-BKLc7QKI.js → auth-catchall-CNZ3D5s7.js} +1 -1
  58. package/dist/client/assets/{auth-entry-1PWVON9e.js → auth-entry-C-qYM8sO.js} +1 -1
  59. package/dist/client/assets/{auth-split-layout-B6cSVZVN.js → auth-split-layout-DYTsk60r.js} +1 -1
  60. package/dist/client/assets/{authenticate-and-persist-oauth-Bt8Gm2rH.js → authenticate-and-persist-oauth-BlDhuvWq.js} +1 -1
  61. package/dist/client/assets/{automation-list-row-P3Wfaud1.js → automation-list-row-XKqqDi6F.js} +1 -1
  62. package/dist/client/assets/{automation-runs-0Gp5Pl3p.js → automation-runs-C0y-Gi-l.js} +25 -25
  63. package/dist/client/assets/{automations-B1Pch092.js → automations-DdZPK7BE.js} +1 -1
  64. package/dist/client/assets/{autosend-kl7RNqnt.js → autosend-Pu6JcU1z.js} +1 -1
  65. package/dist/client/assets/{avatar-BxCDP7Ot.js → avatar-CB-s6LW3.js} +1 -1
  66. package/dist/client/assets/{badge-CJKB36w7.js → badge-D2OV8wRl.js} +1 -1
  67. package/dist/client/assets/{block-document-BNPa3FEr.js → block-document-CMsWkopF.js} +1 -1
  68. package/dist/client/assets/{brand-context-D3Rlfh4r.js → brand-context-DWWqlpVW.js} +1 -1
  69. package/dist/client/assets/{buckets-eqtPNxJ7.js → buckets-Bml_f-qW.js} +1 -1
  70. package/dist/client/assets/{bulk-category-panel-CzrR4JyW.js → bulk-category-panel-CwTU2Dke.js} +1 -1
  71. package/dist/client/assets/{calendar-DeTvDsBF.js → calendar-Cy0H8dDP.js} +1 -1
  72. package/dist/client/assets/{capability-load-error-DB_oh7IY.js → capability-load-error-C8Uwu5_s.js} +1 -1
  73. package/dist/client/assets/{card-9tKE7GXF.js → card-BJLhqcLf.js} +1 -1
  74. package/dist/client/assets/{category-editor-BQbsXApg.js → category-editor-CfWwzNXf.js} +1 -1
  75. package/dist/client/assets/{chat-context-CwNi3A6G.js → chat-context-BzGsRBEi.js} +1 -1
  76. package/dist/client/assets/{checkbox-Diqx1FoE.js → checkbox-fY0uDGwg.js} +1 -1
  77. package/dist/client/assets/{cli-auth-success-DvYAFC0B.js → cli-auth-success-B08QkmvU.js} +1 -1
  78. package/dist/client/assets/{collection-detail-Cv0k2_GT.js → collection-detail-BZt_Ibwr.js} +1 -1
  79. package/dist/client/assets/{collection-display-button-hHnJ4_g2.js → collection-display-button-Cc0b3ED_.js} +1 -1
  80. package/dist/client/assets/{collection-search-kUG_oKbb.js → collection-search-Bv843kn7.js} +1 -1
  81. package/dist/client/assets/{collection-table-wrapper-B9yKUfMg.js → collection-table-wrapper-DjmKYjAk.js} +1 -1
  82. package/dist/client/assets/{collection-tabs-BTDZrBXn.js → collection-tabs-B6yGaiCr.js} +1 -1
  83. package/dist/client/assets/{command-N0I3WfMj.js → command-DWwqFTuu.js} +1 -1
  84. package/dist/client/assets/{commerce-onboarding-BySa1y-W.js → commerce-onboarding-dLv4vpps.js} +1 -1
  85. package/dist/client/assets/{companions-core-CXFBjxtL.js → companions-core-NOLgowrv.js} +1 -1
  86. package/dist/client/assets/{connect-desktop-dialog-ChBtls8K.js → connect-desktop-dialog-DEpb0pcU.js} +1 -1
  87. package/dist/client/assets/{connection-card-D0_c6gO9.js → connection-card-o0DDUNHv.js} +1 -1
  88. package/dist/client/assets/{connection-detail-BE-m8wny.js → connection-detail-Cswj6S4W.js} +1 -1
  89. package/dist/client/assets/{connection-form-helpers-BYaB09EC.js → connection-form-helpers-EPDDGUte.js} +1 -1
  90. package/dist/client/assets/{connections-BFAOtXPe.js → connections-6qWoAdqX.js} +1 -1
  91. package/dist/client/assets/{decopilot-sse-pool-BLGL0LsS.js → decopilot-sse-pool-D-2tGt-o.js} +1 -1
  92. package/dist/client/assets/{dialog-BxyVzjQ3.js → dialog-BFqbrhnG.js} +1 -1
  93. package/dist/client/assets/{domain-settings-BK0JpUz3.js → domain-settings-IW5nZczN.js} +1 -1
  94. package/dist/client/assets/{drawer-CQKQzuhR.js → drawer-Cl_dvusi.js} +1 -1
  95. package/dist/client/assets/{dropdown-menu-BScjo8--.js → dropdown-menu-EfeTZxQL.js} +1 -1
  96. package/dist/client/assets/{empty-state-es2nRb_j.js → empty-state-DQOY2xmV.js} +1 -1
  97. package/dist/client/assets/{extract-connection-data-C2_0wEKz.js → extract-connection-data-C6T0yo3M.js} +1 -1
  98. package/dist/client/assets/{file-explorer-ipUahnFG.js → file-explorer-BIc5X5VW.js} +1 -1
  99. package/dist/client/assets/{file-type-icon-L2ARwYHI.js → file-type-icon-D2keXo94.js} +1 -1
  100. package/dist/client/assets/{files-CEyq4COK.js → files-CSH75kzv.js} +1 -1
  101. package/dist/client/assets/{form-BBrmDTao.js → form-CGKisGk6.js} +1 -1
  102. package/dist/client/assets/{general-mpELEztz.js → general-BfoX5LCV.js} +1 -1
  103. package/dist/client/assets/{github-repo-picker-ClgZW6LI.js → github-repo-picker-BRMhPL_0.js} +1 -1
  104. package/dist/client/assets/{hooks-faeU6CoI.js → hooks-BSMoXVbD.js} +1 -1
  105. package/dist/client/assets/{index-DJmEqij6.js → index-BCsh3PYH.js} +1 -1
  106. package/dist/client/assets/{index-D521UaSg.js → index-BKqtjTbw.js} +1 -1
  107. package/dist/client/assets/{index-CesmbZpg.js → index-BmwqFaiy.js} +5 -5
  108. package/dist/client/assets/{index-DNRNEGzF.js → index-ByT194y-.js} +1 -1
  109. package/dist/client/assets/{index-CxWNtx9x.js → index-CAIYhjul.js} +3 -3
  110. package/dist/client/assets/{index-BXoUOnNS.js → index-CUgYJaPV.js} +1 -1
  111. package/dist/client/assets/{index-DIB09EG-.js → index-CXCcDBTq.js} +1 -1
  112. package/dist/client/assets/{index-D1EuIdjV.js → index-ChtsFoQQ.js} +1 -1
  113. package/dist/client/assets/{index-DxY7xoBM.js → index-D2HwJQV5.js} +2 -2
  114. package/dist/client/assets/{index-DI-ckLEU.js → index-DSgOediN.js} +1 -1
  115. package/dist/client/assets/{index-8daa3oHu.js → index-DrJmHyyo.js} +1 -1
  116. package/dist/client/assets/{index-B7DxR0_h.js → index-H4hcES42.js} +1 -1
  117. package/dist/client/assets/{index-HF6wstce.js → index-Rb2bYeF_.js} +1 -1
  118. package/dist/client/assets/{index-DU67rOKJ.js → index-S3X52veH.js} +1 -1
  119. package/dist/client/assets/{index-redirect-B1CSBKQb.js → index-redirect-CEHG6qWB.js} +1 -1
  120. package/dist/client/assets/{input-C9EhK1Lu.js → input-Dzav8ivG.js} +1 -1
  121. package/dist/client/assets/{integration-icon-Bz3MOu79.js → integration-icon-Db96f3jT.js} +1 -1
  122. package/dist/client/assets/{invite-member-dialog-B4o_u0Yn.js → invite-member-dialog-9O6Lre1u.js} +1 -1
  123. package/dist/client/assets/{label-JPT2W8Pg.js → label-DaAsoL9V.js} +1 -1
  124. package/dist/client/assets/{layout-DDwESlPa.js → layout-Br8401sd.js} +1 -1
  125. package/dist/client/assets/{login-CyRsInne.js → login-DceebZPc.js} +1 -1
  126. package/dist/client/assets/{mcp-oauth-DUn-Fuzj.js → mcp-oauth-Bzb4iSTT.js} +1 -1
  127. package/dist/client/assets/{members-C17VYqOT.js → members-DJky7gY8.js} +1 -1
  128. package/dist/client/assets/{monaco-editor-DYNno9ow.js → monaco-editor-c4RVis_9.js} +1 -1
  129. package/dist/client/assets/{monitoring-stats-row-B1B3SvpD.js → monitoring-stats-row-CgDrRjXa.js} +1 -1
  130. package/dist/client/assets/{multi-select-CTnDksvV.js → multi-select-DswivzJU.js} +1 -1
  131. package/dist/client/assets/{oauth-callback-C2RnV8Ra.js → oauth-callback-N8Kmr_2u.js} +1 -1
  132. package/dist/client/assets/{oauth-callback-ai-provider-qznLDLZZ.js → oauth-callback-ai-provider-B07g_XT9.js} +1 -1
  133. package/dist/client/assets/{onboarding-DUVBk0XQ.js → onboarding-BKAjTwg-.js} +1 -1
  134. package/dist/client/assets/{org-install-DQ2uKUYH.js → org-install-HCB4vzUC.js} +1 -1
  135. package/dist/client/assets/{org-layout-Bln5VKHy.js → org-layout-C0Q-q-fX.js} +1 -1
  136. package/dist/client/assets/{organization-choice-BzUmyMzq.js → organization-choice-D9DKvqVz.js} +1 -1
  137. package/dist/client/assets/{orgs-CQnP3RnF.js → orgs-BrqG5BVm.js} +1 -1
  138. package/dist/client/assets/{page-seo-form-BtLUHPsW.js → page-seo-form-DZCzqL8q.js} +1 -1
  139. package/dist/client/assets/page-seo-sheet-MkscnSYp.js +1 -0
  140. package/dist/client/assets/{popover-BPf7qyUL.js → popover-Zrs8wv0F.js} +1 -1
  141. package/dist/client/assets/{post-editor-BLwE05et.js → post-editor-CdSGWiLa.js} +1 -1
  142. package/dist/client/assets/{primitives-DdZDjvVV.js → primitives-CSHAedU0.js} +1 -1
  143. package/dist/client/assets/{profile-8a3_1Shi.js → profile-L8yVo8jE.js} +1 -1
  144. package/dist/client/assets/project-app-view-D7_4EXf8.js +1 -0
  145. package/dist/client/assets/record-editor-sr_hR6uA.js +1 -0
  146. package/dist/client/assets/redirect-editor-DYiAiFDJ.js +1 -0
  147. package/dist/client/assets/registry-2F4l4D0M.js +2 -0
  148. package/dist/client/assets/{registry-layout-DTk5e6HH.js → registry-layout-ftVzyud_.js} +2 -2
  149. package/dist/client/assets/{reports-qdBRQ4pV.js → reports--rTbu3V7.js} +1 -1
  150. package/dist/client/assets/{require-capability-Bspi0oGk.js → require-capability-BYn5Rk3O.js} +1 -1
  151. package/dist/client/assets/{required-auth-layout-0AnIaBaR.js → required-auth-layout-CoT_XXkN.js} +1 -1
  152. package/dist/client/assets/{reset-password-D0qvkNvH.js → reset-password-CgNFAvmH.js} +1 -1
  153. package/dist/client/assets/{roles-BwrRDzH5.js → roles-DMRweu6k.js} +1 -1
  154. package/dist/client/assets/{search-input-Bdl49Lyd.js → search-input-Cq8-y1F0.js} +1 -1
  155. package/dist/client/assets/{secrets-BGFKYnKe.js → secrets-CmPAp_up.js} +1 -1
  156. package/dist/client/assets/{sections-editor-BKlLtB36.js → sections-editor-wyl18rw9.js} +1 -1
  157. package/dist/client/assets/select-model-DI8jnYOT.js +4 -0
  158. package/dist/client/assets/{select-BjS6pi0R.js → select-peZlJuYe.js} +1 -1
  159. package/dist/client/assets/{self-tool-result-CzsRIvtg.js → self-tool-result-DYrHsoN8.js} +1 -1
  160. package/dist/client/assets/{seo-editor-CMScpL2i.js → seo-editor-BJVKSK5H.js} +1 -1
  161. package/dist/client/assets/{settings-layout-Cbmu_dvI.js → settings-layout-CPUHm_YX.js} +1 -1
  162. package/dist/client/assets/{settings-section-C5ntTZ3s.js → settings-section-B1GgY2if.js} +1 -1
  163. package/dist/client/assets/{shell-controls-CZu8nt18.js → shell-controls-C_p4ZmTF.js} +1 -1
  164. package/dist/client/assets/{shell-layout-ElsOHGco.js → shell-layout-CTslVDtx.js} +1 -1
  165. package/dist/client/assets/{sidebar-Du3GhEXu.js → sidebar-BjlDvhlo.js} +1 -1
  166. package/dist/client/assets/{skeleton-DYrRZj58.js → skeleton-DeOjoVUO.js} +1 -1
  167. package/dist/client/assets/{sso-DwHclfbW.js → sso-D363gW46.js} +1 -1
  168. package/dist/client/assets/{store-D1pr97wp.js → store-DvP7myd4.js} +1 -1
  169. package/dist/client/assets/store-registry-r9GmOZET.js +2 -0
  170. package/dist/client/assets/{studio-tools-HHcBk3Yy.js → studio-tools-C0-5Z8k5.js} +1 -1
  171. package/dist/client/assets/{switch-Co9VnPF1.js → switch-DG2ijYXZ.js} +1 -1
  172. package/dist/client/assets/{table-7Pa2oc8U.js → table-fSAZqdik.js} +1 -1
  173. package/dist/client/assets/{tabs-DIYXMj-h.js → tabs-59hacXBf.js} +1 -1
  174. package/dist/client/assets/{textarea-azsnX4mp.js → textarea-B9TUwSCj.js} +1 -1
  175. package/dist/client/assets/{toggle-group-_FACvaFN.js → toggle-group-CP4FEYCM.js} +1 -1
  176. package/dist/client/assets/{toolbar-WAIhuPvK.js → toolbar-Bn_kiKpu.js} +1 -1
  177. package/dist/client/assets/{toolbar-icon-button-CFa583yL.js → toolbar-icon-button-DChgCAZk.js} +1 -1
  178. package/dist/client/assets/{tooltip-CTQ3jqyw.js → tooltip-DBcnpVTx.js} +1 -1
  179. package/dist/client/assets/{use-ai-providers-C3gvqXwZ.js → use-ai-providers-B0J5EZdH.js} +1 -1
  180. package/dist/client/assets/{use-automations-CV0g4TCD.js → use-automations-CajzdSeA.js} +1 -1
  181. package/dist/client/assets/{use-autosave-BUYSmKJl.js → use-autosave-BvYo7aS2.js} +1 -1
  182. package/dist/client/assets/{use-capability-DzMeZG_B.js → use-capability-CEtXiCRz.js} +1 -1
  183. package/dist/client/assets/{use-clock-tick-4n-sf8En.js → use-clock-tick-r_qU_UzB.js} +1 -1
  184. package/dist/client/assets/{use-collections-CR5m--3v.js → use-collections-DHkHvLr2.js} +1 -1
  185. package/dist/client/assets/{use-connection-Bja1yNlO.js → use-connection-DRK2N5z2.js} +1 -1
  186. package/dist/client/assets/{use-copy-BV3KPbyw.js → use-copy-BHgKL0On.js} +1 -1
  187. package/dist/client/assets/{use-create-virtual-mcp-Uhf3saYW.js → use-create-virtual-mcp-DaHNk0Ix.js} +1 -1
  188. package/dist/client/assets/{use-debounced-autosave-CrTBH0r8.js → use-debounced-autosave-CBxkub0J.js} +1 -1
  189. package/dist/client/assets/{use-debounced-value-DiZ6agyj.js → use-debounced-value-Bc5YBXDl.js} +1 -1
  190. package/dist/client/assets/{use-deco-credits-CrWRWg5d.js → use-deco-credits-CbUWlpHm.js} +1 -1
  191. package/dist/client/assets/{use-decopilot-events-By89abVN.js → use-decopilot-events-lkWlYZO4.js} +1 -1
  192. package/dist/client/assets/{use-delete-connection-rmpivgwt.js → use-delete-connection-Bz-L6aVH.js} +1 -1
  193. package/dist/client/assets/{use-deployment-admin-Dx9ZkF6I.js → use-deployment-admin-BmRZ12zi.js} +1 -1
  194. package/dist/client/assets/{use-file-configs-CKVr-c7q.js → use-file-configs-CRDwG08w.js} +1 -1
  195. package/dist/client/assets/{use-infinite-scroll-B1UJmYzB.js → use-infinite-scroll-C_OzT98l.js} +1 -1
  196. package/dist/client/assets/{use-join-requests-C6fMCeHB.js → use-join-requests-x3YhuWSS.js} +1 -1
  197. package/dist/client/assets/{use-mcp-auth-status-wzWeSyhc.js → use-mcp-auth-status-RbS9dxNI.js} +1 -1
  198. package/dist/client/assets/{use-mcp-client-CodYj4lk.js → use-mcp-client-BRDJsS2i.js} +1 -1
  199. package/dist/client/assets/{use-mcp-tools-DhezZmhh.js → use-mcp-tools-TLy2HClY.js} +1 -1
  200. package/dist/client/assets/{use-members-C5exRENp.js → use-members-T2DIW2PV.js} +1 -1
  201. package/dist/client/assets/{use-mobile-DmC5AwHK.js → use-mobile-COWtBi3l.js} +1 -1
  202. package/dist/client/assets/{use-navigate-to-agent-VNxYrStf.js → use-navigate-to-agent-DWAHU44q.js} +1 -1
  203. package/dist/client/assets/{use-org-auth-client-C-_6T-I_.js → use-org-auth-client-BICeQnTF.js} +1 -1
  204. package/dist/client/assets/{use-org-sso-D9Zrv9Ex.js → use-org-sso-Bd_0B726.js} +1 -1
  205. package/dist/client/assets/{use-organization-roles-kfhFanV-.js → use-organization-roles-DobbYYRj.js} +1 -1
  206. package/dist/client/assets/{use-organization-settings-C02fN1Pg.js → use-organization-settings-BJBqMmWF.js} +1 -1
  207. package/dist/client/assets/{use-registry-app-CntYFu2c.js → use-registry-app-C_q3DUZv.js} +1 -1
  208. package/dist/client/assets/{use-registry-connections-CSTpfPSI.js → use-registry-connections-CmUf1QlB.js} +1 -1
  209. package/dist/client/assets/{use-secrets-59JvHtO0.js → use-secrets-O5sD2Bgz.js} +1 -1
  210. package/dist/client/assets/{use-status-sounds-CrVwkBda.js → use-status-sounds-B96xiiHa.js} +1 -1
  211. package/dist/client/assets/{use-view-mode-Ba0ZEqUw.js → use-view-mode-BJOrvC1j.js} +1 -1
  212. package/dist/client/assets/{use-virtual-mcp-Bs6Z3XqB.js → use-virtual-mcp-63tB8KYL.js} +1 -1
  213. package/dist/client/assets/useInfiniteQuery-BSKFC7YM.js +1 -0
  214. package/dist/client/assets/{useRouterState-BStHehOf.js → useRouterState-BNyrcIx8.js} +1 -1
  215. package/dist/client/assets/useSuspenseInfiniteQuery-Cwnl9Xjp.js +1 -0
  216. package/dist/client/assets/{users-DXYde7XY.js → users-DWHrGlvz.js} +1 -1
  217. package/dist/client/assets/{variant-calendar-BlhvVxku.js → variant-calendar-BVX3kYfI.js} +1 -1
  218. package/dist/client/assets/{view-mode-toggle-Behabpts.js → view-mode-toggle-DBojFra_.js} +1 -1
  219. package/dist/client/index.html +1 -1
  220. package/dist/server/cli.js +5 -5
  221. package/dist/server/server.js +5 -5
  222. package/package.json +1 -1
  223. package/dist/client/assets/page-seo-sheet-DG0rFMaK.js +0 -1
  224. package/dist/client/assets/project-app-view-C5gaZj3T.js +0 -1
  225. package/dist/client/assets/record-editor-DvEIA6tV.js +0 -1
  226. package/dist/client/assets/redirect-editor-BplQQqRM.js +0 -1
  227. package/dist/client/assets/registry-Bq_80-6l.js +0 -2
  228. package/dist/client/assets/select-model-Bj5d_bo2.js +0 -4
  229. package/dist/client/assets/store-registry-Q6zoLWY_.js +0 -2
  230. package/dist/client/assets/useInfiniteQuery-GqUtQwTk.js +0 -1
  231. package/dist/client/assets/useSuspenseInfiniteQuery-oEtZEsYD.js +0 -1
@@ -84519,7 +84519,7 @@ ${$}`;h(N);return}if(E(null,y),t.strategy==="count"){if(w--,w===0)h()}if(t.strat
84519
84519
  `);function h(_){if(t===void 0)return!0;let v=pM(_),D=v&&pM(t)?Vmu(t):t,n=v?Vmu(_):rmu(_),O=kCt(D,n);return O===""||!O.startsWith("..")&&!ICt(O)}return{upsert(_){f.run({$handle:_.handle,$status:_.status,$sandboxPath:_.sandboxPath,$port:_.port??null,$previewUrl:_.previewUrl??null,$repoCloneUrl:_.repoCloneUrl??null,$branch:_.branch??null,$projectName:_.projectName??null,$error:_.error??null,$now:Date.now()})},list(){return l.all().map(K1i)},reconcile(){let _=Date.now();for(let v of l.all().map(K1i)){if(!h(v.sandboxPath)){c.run({$handle:v.handle,$now:_});continue}if(!pM(v.sandboxPath)){E.run({$handle:v.handle,$now:_});continue}if(v.status==="spawning"||v.status==="ready"||v.status==="failed"||v.status==="missing")$.run({$handle:v.handle,$now:_})}return l.all().map(K1i)},prune(_){let v=[],D=[],n=this.reconcile();for(let O of n){if(!h(O.sandboxPath)){D.push({handle:O.handle,sandboxPath:O.sandboxPath,reason:"outside_root",deletedFiles:!1});continue}if(_.missing&&O.status==="missing"){w.run({$handle:O.handle}),v.push({handle:O.handle,sandboxPath:O.sandboxPath,reason:"missing",deletedFiles:!1});continue}if(!_.merged||!pM(O.sandboxPath))continue;if(O.branch===null||O.branch.trim()===""){D.push({handle:O.handle,sandboxPath:O.sandboxPath,reason:"no_branch",deletedFiles:!1});continue}if(!y2(O.sandboxPath,["rev-parse","--is-inside-work-tree"]).ok){D.push({handle:O.handle,sandboxPath:O.sandboxPath,reason:"git_unavailable",deletedFiles:!1});continue}let N=y2(O.sandboxPath,["status","--porcelain"]);if(!N.ok){D.push({handle:O.handle,sandboxPath:O.sandboxPath,reason:"git_unavailable",deletedFiles:!1});continue}if(N.stdout.trim()!==""){D.push({handle:O.handle,sandboxPath:O.sandboxPath,reason:"dirty_worktree",deletedFiles:!1});continue}let y=emu(O.sandboxPath,O.branch);if(y===null){D.push({handle:O.handle,sandboxPath:O.sandboxPath,reason:"git_unavailable",deletedFiles:!1});continue}if(!y){D.push({handle:O.handle,sandboxPath:O.sandboxPath,reason:"branch_not_merged",deletedFiles:!1});continue}PCt(O.sandboxPath,{recursive:!0,force:!0}),w.run({$handle:O.handle}),v.push({handle:O.handle,sandboxPath:O.sandboxPath,reason:"merged",deletedFiles:!0})}return{removed:v,skipped:D}},delete(_){w.run({$handle:_})},inspect(_){let v=d.get({$handle:_});if(v===null)return null;let D=K1i(v),n=0,O=null;if(pM(D.sandboxPath)&&y2(D.sandboxPath,["rev-parse","--is-inside-work-tree"]).ok){let N=y2(D.sandboxPath,["status","--porcelain"]);if(N.ok){let y=N.stdout.trim();n=y===""?0:y.split(`
84520
84520
  `).length}if(D.branch!==null&&D.branch.trim()!=="")O=emu(D.sandboxPath,D.branch)}return{handle:D.handle,branch:D.branch,sandboxPath:D.sandboxPath,dirtyCount:n,merged:O}},close(){u.close()}}}var XRi=()=>{};function KCt(i,u){return u?[["umount","-f",i]]:[["fusermount","-uz",i],["umount","-l",i]]}function omu(i,u){if(process.platform==="win32")return;for(let t of KCt(i,u))if(Bun.spawnSync(t,{stdout:"ignore",stderr:"ignore",timeout:5000}).exitCode===0)break}var smu=()=>{};import{existsSync as JCt,readdirSync as XCt}from"fs";import{rm as LCt}from"fs/promises";import{join as pmu}from"path";async function ieu(i,u={}){let t=u.detach??WCt,f=u.exists??JCt,l=u.readdir??(($)=>XCt($)),c=u.rm??(($)=>LCt($,{recursive:!0,force:!0})),E=pmu(i,"org");if(f(E))for(let $ of l(E))t(pmu(E,$));await c(i)}var WCt=(i)=>omu(i,process.platform==="darwin");var ueu=g(()=>{smu()});import{join as YCt}from"path";function teu(i){let u=i.purge??ieu;return{stopSandbox(t){return i.provider.deleteSandbox(t)},inspectSandbox(t){return i.registry.inspect(t)},async removeSandbox(t){try{return await Cl(async()=>{if(await i.provider.deleteSandbox(t),i.provider.hasHandle(t))throw Error("Can't delete \u2014 run in progress");let l=i.registry.inspect(t)?.sandboxPath??YCt(i.dataDir,"sandboxes",t);await u(l)},{maxAttempts:2,minTimeout:250,jitter:0}),i.registry.delete(t),{ok:!0}}catch(f){let l=f instanceof Wc?f.cause:f;return{ok:!1,error:l instanceof Error?l.message:String(l)}}}}}var feu=g(()=>{y4();ueu()});import{randomBytes as QCt}from"crypto";import{mkdir as zCt}from"fs/promises";import{createServer as HCt}from"net";import{join as RCt}from"path";function leu(i,u){return Error(`sandbox failed to start: ${i}`,{cause:u})}function ceu(i){if(!(i instanceof Error))return!1;return i.name==="TimeoutError"||/timed out|timeout|operation was aborted|aborted/i.test(i.message)}function Eeu(i){if(i instanceof Error){let u=i.cause;if(u instanceof Error&&u.message)return u.message;return i.message}return String(i)}function bCt(i){if(!i)return null;let u=i.trim().replace(/\/+$/,"");if(!u)return null;let t=u.split(/[/:]/).filter(Boolean).at(-1);if(!t)return null;return t.replace(/\.git$/i,"")||null}function CCt(i){return{repoCloneUrl:i.repo?.cloneUrl??null,branch:i.repo?.branch??null,projectName:bCt(i.repo?.cloneUrl)}}function $eu(i){let u=i.maxSandboxes??20,t=new Map,f=i.pickPort??MCt,l=i.fetchImpl??fetch,c=i.resolvePreviewUrl??((n,O)=>`http://127.0.0.1:${O}`),E=(n)=>RCt(i.dataDir,"sandboxes",n),$=(n)=>{try{i.registry?.upsert(n)}catch(O){console.warn(`[user-desktop] failed to persist sandbox lifecycle handle=${n.handle} status=${n.status}:`,O)}},w=(n)=>{try{i.onEvent?.(n)}catch{}},d=async(n)=>{let O=new AbortController,N=setTimeout(()=>O.abort(),1500);try{let y=await l(`${n}/health`,{signal:O.signal});if(!y.ok)console.warn(`[user-desktop] probe ${n}/health \u2192 ${y.status} (treating as dead)`);return y.ok}catch(y){return console.warn(`[user-desktop] probe ${n}/health failed: ${y instanceof Error?y.message:String(y)} (treating as dead)`),!1}finally{clearTimeout(N)}},h=(n)=>{console.warn(`[user-desktop] evicting dead daemon handle=${n.handle} port=${n.port}`);try{n.process.kill("SIGTERM")}catch{}if(t.get(n.handle)===n)t.delete(n.handle),$({handle:n.handle,status:"stopped",sandboxPath:E(n.handle),port:null,previewUrl:null,...n.registryMetadata,error:null}),w({handle:n.handle,phase:"evicted"})},_=new Map;function v(){if(t.size<u)return;let n=[...t.values()].filter((N)=>N.activeDispatchCount===0).sort((N,y)=>N.lastUsedAt-y.lastUsedAt);if(n.length===0){console.warn(`[user-desktop] at cap ${t.size}/${u} but every sandbox is pinned (active dispatch) \u2014 exceeding cap temporarily`);return}let O=n[0];console.log(`[user-desktop] evicting LRU victim handle=${O.handle} port=${O.port} (cap ${u} reached, size=${t.size})`);try{O.process.kill("SIGTERM")}catch{}t.delete(O.handle),$({handle:O.handle,status:"stopped",sandboxPath:E(O.handle),port:null,previewUrl:null,...O.registryMetadata,error:null}),w({handle:O.handle,phase:"evicted"})}let D=async(n)=>{let O=CCt(n),N=E(n.handle);$({handle:n.handle,status:"spawning",sandboxPath:N,port:null,previewUrl:null,...O,error:null}),w({handle:n.handle,phase:"spawning",sandboxPath:N,projectName:O.projectName,branch:O.branch}),v();let y,Z=null,T;try{await zCt(N,{recursive:!0}),console.log(`[user-desktop] ensure handle=${n.handle} repo=${n.repo?.cloneUrl??"(none)"} branch=${n.repo?.branch??"(none)"} runtime=${n.workload?.runtime??"(autodetect)"} pm=${n.workload?.packageManager??"(autodetect)"}`),T=QCt(24).toString("hex");let[G,I]=await Promise.all([f(),f()]);y=G,console.log(`[user-desktop] spawn handle=${n.handle} port=${y} devPort=${I} workdir=${N}`),Z=await Promise.resolve(i.spawnDaemon({workdir:N,handle:n.handle,port:y,daemonToken:T,offloadAllowedHosts:n.offloadAllowedHosts??[],offloadAllowSameHostDev:n.offloadAllowSameHostDev??!1,orgFsConfigJson:n.orgFsConfigJson}));try{await i.waitForHealth(y)}catch(k){throw leu("the sandbox didn't come online in time",k)}console.log(`[user-desktop] healthy handle=${n.handle} port=${y} \u2014 posting config`);try{await i.postConfig(y,I,{repo:n.repo,workload:n.workload,operator:n.operator},T)}catch(k){throw leu(ceu(k)?"configuration timed out":"the sandbox rejected its configuration",k)}}catch(G){if((ceu(G)?console.warn:console.error)(`[user-desktop] sandbox bring-up failed handle=${n.handle} port=${y??"(none)"}${Z?" (killing daemon)":""}:`,G),Z)try{Z.kill("SIGKILL")}catch{}throw w({handle:n.handle,phase:"failed",error:Eeu(G),sandboxPath:N,projectName:O.projectName,branch:O.branch}),$({handle:n.handle,status:"failed",sandboxPath:N,port:null,previewUrl:null,...O,error:Eeu(G)}),G}if(!Z||y===void 0)throw Error("sandbox bring-up invariant violated");let B=`http://127.0.0.1:${y}`,F=c(n.handle,y);console.log(`[user-desktop] ready handle=${n.handle} port=${y} sandboxApiUrl=${B} previewUrl=${F}`);let A={handle:n.handle,port:y,process:Z,sandboxApiUrl:B,previewUrl:F,lastUsedAt:Date.now(),activeDispatchCount:0,daemonToken:T,registryMetadata:O};if(t.set(n.handle,A),$({handle:n.handle,status:"ready",sandboxPath:N,port:y,previewUrl:F,...O,error:null}),w({handle:n.handle,phase:"ready",port:y,previewUrl:F,sandboxPath:N,projectName:O.projectName,branch:O.branch}),Z.exited)Z.exited.then(()=>{if(t.get(n.handle)===A)console.warn(`[user-desktop] daemon process exited unexpectedly handle=${n.handle} port=${y} \u2014 removing from cache`),t.delete(n.handle),$({handle:n.handle,status:"stopped",sandboxPath:N,port:null,previewUrl:null,...O,error:null}),w({handle:n.handle,phase:"evicted"});else console.log(`[user-desktop] daemon process exited handle=${n.handle} port=${y} (already replaced/removed)`)});return{sandboxApiUrl:B,previewUrl:F,port:y}};return{async ensureSandbox(n){let O=t.get(n.handle);if(O){if(await d(O.sandboxApiUrl))return console.log(`[user-desktop] cache hit handle=${n.handle} port=${O.port} (alive)`),O.lastUsedAt=Date.now(),{sandboxApiUrl:O.sandboxApiUrl,previewUrl:O.previewUrl,port:O.port};console.warn(`[user-desktop] cache stale handle=${n.handle} port=${O.port} \u2014 respawning`),h(O)}let N=_.get(n.handle);if(N)return console.log(`[user-desktop] joining in-flight ensure handle=${n.handle}`),N;let y=D(n).finally(()=>{_.delete(n.handle)});return _.set(n.handle,y),y},proxyPort(n){let O=t.get(n);if(O)O.lastUsedAt=Date.now();return O?.port??null},getDaemonToken(n){return t.get(n)?.daemonToken??null},hasHandle(n){return t.has(n)||_.has(n)},recordHit(n){let O=t.get(n);if(O)O.lastUsedAt=Date.now()},acquireDispatch(n){let O=t.get(n);if(!O)return()=>{};O.activeDispatchCount+=1;let N=!1;return()=>{if(N)return;N=!0;let y=t.get(n);if(y)y.activeDispatchCount=Math.max(0,y.activeDispatchCount-1)}},listSandboxes(){return[...t.values()]},async deleteSandbox(n){let O=t.get(n);if(!O){console.log(`[user-desktop] delete handle=${n} (not found, no-op)`);return}if(O.activeDispatchCount>0){console.warn(`[user-desktop] delete handle=${n} port=${O.port} REFUSED \u2014 ${O.activeDispatchCount} active dispatch(es) in flight`);return}console.log(`[user-desktop] delete handle=${n} port=${O.port}`);try{O.process.kill("SIGTERM")}catch{}t.delete(n),$({handle:n,status:"stopped",sandboxPath:E(n),port:null,previewUrl:null,repoCloneUrl:null,branch:null,projectName:null,error:null}),w({handle:n,phase:"deleted"})},async shutdown(){console.log(`[user-desktop] shutdown \u2014 killing ${t.size} sandbox(es)`);for(let n of t.values())try{n.process.kill("SIGTERM")}catch{}t.clear()}}}function MCt(){return new Promise((i,u)=>{let t=HCt();t.unref(),t.on("error",u),t.listen(0,"127.0.0.1",()=>{let f=t.address();if(f&&typeof f==="object"){let l=f.port;t.close(()=>i(l))}else t.close(()=>u(Error("could not allocate port")))})})}var weu=()=>{};import{randomUUID as qCt}from"crypto";import{hostname as VCt}from"os";async function deu(i){let u=VCt()||void 0;i.monitor?.onMachine?.(u??"this machine");let t=bbu(i.dataDir,{outFd:i.logFd,perSandboxLog:i.perSandboxLogs,hotReload:i.hotReload}),f=X1i({path:J1i(i.dataDir),managedSandboxRoot:`${i.dataDir}/sandboxes`}),l=!1,c=()=>{if(l)return;l=!0;try{f.close()}catch{}};try{let E=0,$=$eu({dataDir:i.dataDir,registry:f,resolvePreviewUrl:(k,q)=>E>0?`http://${k}.localhost:${E}`:`http://127.0.0.1:${q}`,spawnDaemon:async(k)=>{let q={DAEMON_BOOT_ID:qCt(),APP_ROOT:k.workdir,PROXY_PORT:String(k.port),DAEMON_TOKEN:k.daemonToken,OFFLOAD_ALLOWED_HOSTS:k.offloadAllowedHosts.join(","),...k.offloadAllowSameHostDev?{OFFLOAD_ALLOW_SAME_HOST_DEV:"1"}:{}};if(k.orgFsConfigJson){let W=await Vbu(i.dataDir);if(W)q.ORGFS_CONFIG=k.orgFsConfigJson,q.ORGFS_RCLONE_PATH=W}let J=await t({workdir:k.workdir,env:q,daemonPort:k.port});return{port:k.port,kill:(W)=>J.kill(W),exited:J.exited.then(()=>{return})}},postConfig:async(k,q,J,W)=>{let r={port:q};if(J.workload)r.runtime=J.workload.runtime,r.packageManager={name:J.workload.packageManager,...J.workload.packageManagerPath?{path:J.workload.packageManagerPath}:{}};let Y={application:r},fi=_h(J.operator??null);if(fi)Y.operator=fi;if(J.repo)Y.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 $2(`http://127.0.0.1:${k}`,W,Y)},waitForHealth:async(k)=>{await Jli(`http://127.0.0.1:${k}`)},maxSandboxes:20,onEvent:i.monitor?.onEvent}),w=await Xmu({port:i.port,lookupSandboxPort:(k)=>$.proxyPort(k)});E=w.port,console.log(`Local ingress listening on http://127.0.0.1:${w.port} (use http://<handle>.localhost:${w.port}/)`),i.monitor?.onIngress?.(w.port);let d=mbu({provider:$}),h=async()=>{let k=await E2({dataDir:i.dataDir,target:i.clusterBaseUrl});if(!k)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 k.accessToken},_=await Mmu(i.dataDir),v=process.env.npm_package_version??"0.0.0",D=await JRi(),n=bmu(D,{onChange:(k)=>{console.log(`[link-daemon] capabilities detected: +${k.join(",")} (now: ${D.join(",")})`)}}),O=Bzi({path:`${i.dataDir}/link/outbox.sqlite`});O.clear();let N=()=>{},y=new AbortController,Z={clusterBaseUrl:i.clusterBaseUrl,getAccessToken:h,provider:$,outbox:O,controlHandler:d,capabilities:D,machineId:_,cliVersion:v,previewPort:w.port,onConnected:()=>{i.monitor?.onCluster?.("linked"),console.log(`Linked to ${i.clusterBaseUrl}`)},onShutdown:()=>N(),runLifetimeSignal:y.signal};console.log(`[link-daemon] transport=tunnel cluster=${i.clusterBaseUrl}`);let T=await Fmu(Z);console.log("[link-daemon] active transport=tunnel");let B,F=new Promise((k)=>{B=k}),A=!1,G=async()=>{if(A)return;A=!0,y.abort(),console.log(`
84521
84521
  Shutting down\u2026`),n();try{await T.close()}catch{}try{await w.stop()}catch{}try{await $.shutdown()}catch{}try{O.close()}catch{}c(),B(0)};process.on("SIGINT",()=>void G()),process.on("SIGTERM",()=>void G()),N=()=>{console.log("Disconnect requested from the Studio web UI \u2014 shutting down. Run `bunx decocms@latest link` to reconnect."),G()},T.closed.then(()=>{if(i.monitor?.onCluster?.("closed"),!A)console.error("Cluster connection closed permanently; exiting."),G()});let I=teu({provider:$,registry:f,dataDir:i.dataDir});return{stopped:F,stop:G,stopSandbox:I.stopSandbox,removeSandbox:I.removeSandbox,inspectSandbox:I.inspectSandbox}}catch(E){throw c(),E}}var heu=g(()=>{nzi();FM();Cbu();rbu();ebu();Fzi();Umu();Lmu();Cmu();qmu();BM();XRi();feu();weu()});function LRi(i){return i.map((u)=>typeof u==="string"?u:String(u)).join(" ")}import{createServer as rCt}from"net";async function eCt(i){for(let u of mCt)if(await WRi(i,u))return u;return null}async function _eu(i,{intervalMs:u=1000}={}){for(;;){let t=await eCt(i);if(t)return t;await O0(u)}}function WRi(i,u){return new Promise((t)=>{let f=rCt();f.once("error",(l)=>{t(l.code==="EADDRINUSE")}),f.listen(i,u,()=>{f.close(()=>t(!1))})})}var mCt;var YRi=g(()=>{y4();mCt=["localhost","127.0.0.1","0.0.0.0"]});function veu(i){return typeof i==="object"&&i!==null&&"code"in i&&i.code==="EADDRINUSE"}function aCt(i,u=process.platform){if(u==="win32")return`for /f "tokens=5" %P in ('netstat -ano ^| findstr /R /C:":${i} .*LISTENING"') do taskkill /F /PID %P`;return`kill -9 $(lsof -ti tcp:${i})`}function Deu(i,u=process.platform){return[`Port ${i} is already in use.`,"Run this command to stop the process listening on it, then retry `decocms link`:","",` ${aCt(i,u)}`].join(`
84522
- `)}var QRi;var neu=g(()=>{QRi=class QRi extends Error{port;code="EADDRINUSE";constructor(i){super(`Port ${i} is already in use.`);this.port=i;this.name="PortInUseError"}}});var uW;var L1i=g(()=>{uW={name:"decocms",version:"4.83.0",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/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:ct":"playwright test -c playwright-ct.config.ts","test:ct:ui":"playwright test -c playwright-ct.config.ts --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.3.181","@duckdb/node-api":"^1.5.0-r.1","@openai/codex":"0.144.3","@openai/codex-darwin-arm64":"npm:@openai/codex@0.144.3-darwin-arm64","@openai/codex-darwin-x64":"npm:@openai/codex@0.144.3-darwin-x64","@openai/codex-linux-arm64":"npm:@openai/codex@0.144.3-linux-arm64","@openai/codex-linux-x64":"npm:@openai/codex@0.144.3-linux-x64","@openai/codex-win32-arm64":"npm:@openai/codex@0.144.3-win32-arm64","@openai/codex-win32-x64":"npm:@openai/codex@0.144.3-win32-x64"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@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","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","@tanstack/react-virtual":"3.13.24","@tiptap/extension-text-align":"3.20.2","@xterm/addon-fit":"^0.11.0","@xterm/xterm":"^6.0.0",echarts:"^5.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","node-pty":"^1.0.0","posthog-js":"^1.371.1","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6","use-stick-to-bottom":"^1.1.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@ai-sdk/react":"^3.0.210","@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:*","@decocms/tunnel":"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","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@playwright/experimental-ct-react":"1.59.1","@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/shadcn":"^6.6.2","@rjsf/utils":"^6.6.2","@rjsf/validator-ajv8":"^6.6.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-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/google.maps":"^3.65.2","@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.208","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",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"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","mesh","tools"],license:"MIT",publishConfig:{access:"public"}}});var iq={};Xi(iq,{printBanner:()=>pCt,bannerLines:()=>geu,BANNER_LINES:()=>W1i,BANNER_GRADIENT:()=>Y1i});function sCt(i){let u=Number.parseInt(i.slice(1),16);return[u>>16&255,u>>8&255,u&255]}function geu(i){let u=W1i.map((t,f)=>{let[l,c,E]=sCt(Y1i[f]);return`\x1B[38;2;${l};${c};${E}m${t}\x1B[39m`});if(i!==void 0)u.push(`\x1B[2m v${i}\x1B[22m`);return u}function pCt(i){console.log("");for(let u of geu(i))console.log(u);console.log("")}var W1i,Y1i;var tW=g(()=>{W1i=[" \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 "],Y1i=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"]});import{Box as iMt,Text as Oeu}from"ink";import{jsx as uMt,jsxs as Neu}from"react/jsx-runtime";function Q1i({version:i}){return Neu(iMt,{flexDirection:"column",marginTop:1,children:[W1i.map((u,t)=>uMt(Oeu,{color:Y1i[t],children:u},t)),Neu(Oeu,{dimColor:!0,children:[" v",i]})]})}var zRi=g(()=>{tW()});function yeu(i){let u=i.branch??i.handle,t=[];if(i.dirtyCount>0)t.push(`${i.dirtyCount} uncommitted file${i.dirtyCount===1?"":"s"}`);if(i.merged===!1)t.push("branch not merged");return t.length>0?`\u26A0 ${t.join(", ")} \u2014 delete ${u}? (y/n)`:`Delete ${u}? (y/n)`}function fW(i){return[...i.values()].map((u)=>u.handle).sort((u,t)=>u.localeCompare(t))}function Zeu(i,u,t){if(i.length===0)return null;let f=u===null?-1:i.indexOf(u);if(f===-1)return t>0?i[0]:i[i.length-1];let l=Math.max(0,Math.min(i.length-1,f+t));return i[l]}function Teu(i,u,t){if(t!==u)return t;let f=i.indexOf(u);if(f===-1)return t;return i[f+1]??i[f-1]??null}var CRi={};Xi(CRi,{subscribeLinkState:()=>HRi,setSelectedHandle:()=>RRi,setRemoving:()=>R1i,setPersistedSandboxes:()=>_Mt,setPendingConfirm:()=>tq,setMachine:()=>$Mt,setLogPath:()=>dMt,setLinkActions:()=>hMt,setIngress:()=>EMt,setDaemonError:()=>wMt,setClusterUrl:()=>cMt,setCluster:()=>lMt,setActionError:()=>H1i,resetLinkStateForTests:()=>DMt,removeSandboxRow:()=>bRi,pushSandboxEvent:()=>vMt,getLinkState:()=>uq,applySandboxEvent:()=>Beu});function fMt(i){return i==="spawning"||i==="ready"||i==="failed"}function Beu(i,u){let t=new Map(i),f=t.get(u.handle);if(u.phase==="evicted"||u.phase==="deleted"){if(f)t.set(u.handle,{...f,port:null,previewUrl:null,status:"stopped",error:null});return t}return t.set(u.handle,{handle:u.handle,port:u.port??f?.port??null,previewUrl:u.previewUrl??f?.previewUrl??null,status:u.phase,error:u.phase==="failed"?u.error??"failed":null,projectName:u.projectName??f?.projectName??null,branch:u.branch??f?.branch??null,sandboxPath:u.sandboxPath??f?.sandboxPath??null}),t}function Feu(){return{cluster:"connecting",clusterUrl:null,ingressUrl:null,ingressPort:null,machine:null,cap:tMt,sandboxes:new Map,daemonError:null,logPath:null,selectedHandle:null,pendingConfirm:null,removingHandles:new Set,actionError:null,actions:null}}function Q$(){for(let i of z1i)i()}function uq(){return cf}function HRi(i){return z1i.add(i),()=>z1i.delete(i)}function lMt(i){cf={...cf,cluster:i},Q$()}function cMt(i){cf={...cf,clusterUrl:i},Q$()}function EMt(i,u){cf={...cf,ingressPort:i,ingressUrl:u},Q$()}function $Mt(i){cf={...cf,machine:i},Q$()}function wMt(i){cf={...cf,daemonError:i},Q$()}function dMt(i){cf={...cf,logPath:i},Q$()}function RRi(i){cf={...cf,selectedHandle:i},Q$()}function tq(i){cf={...cf,pendingConfirm:i},Q$()}function H1i(i){cf={...cf,actionError:i},Q$()}function R1i(i,u){if(cf.removingHandles.has(i)===u)return;let t=new Set(cf.removingHandles);if(u)t.add(i);else t.delete(i);cf={...cf,removingHandles:t},Q$()}function hMt(i){cf={...cf,actions:i},Q$()}function bRi(i){let u=fW(cf.sandboxes),t=Teu(u,i,cf.selectedHandle),f=new Map(cf.sandboxes);f.delete(i);let l=new Set(cf.removingHandles);l.delete(i),cf={...cf,sandboxes:f,selectedHandle:t,pendingConfirm:null,removingHandles:l},Q$()}function _Mt(i){let u=new Map;for(let t of i)u.set(t.handle,{handle:t.handle,port:t.port,previewUrl:t.previewUrl,status:t.status,error:t.error,projectName:t.projectName,branch:t.branch,sandboxPath:t.sandboxPath});for(let[t,f]of cf.sandboxes)if(fMt(f.status))u.set(t,f);cf={...cf,sandboxes:u},Q$()}function vMt(i){cf={...cf,sandboxes:Beu(cf.sandboxes,i)},Q$()}function DMt(){cf=Feu(),z1i.clear()}var tMt=20,cf,z1i;var fq=g(()=>{cf=Feu(),z1i=new Set});import{spawn as nMt}from"child_process";function gMt(i){if(i==="darwin")return"open";if(i==="win32")return"start";return"xdg-open"}function Ueu(i,u=process.platform){let t=gMt(u);try{nMt(t,[i],{stdio:"ignore",detached:!0}).unref()}catch{}}var Peu=()=>{};function Aeu(i,u={}){let t=u.openUrl??Ueu,f=uq(),l=fW(f.sandboxes),c=f.selectedHandle!==null&&l.includes(f.selectedHandle)?f.selectedHandle:l[0]??null,E=f.actions;switch(i.type){case"move":RRi(Zeu(l,f.selectedHandle,i.delta));return;case"open":{if(c===null)return;let $=f.sandboxes.get(c);if($?.status==="ready"&&$.previewUrl)t($.previewUrl);return}case"stop":if(c!==null&&E)E.stopSandbox(c);return;case"delete":{if(c===null||!E)return;let $=E.inspectSandbox(c),w=f.sandboxes.get(c);H1i(null),tq({handle:c,branch:$?.branch??w?.branch??null,dirtyCount:$?.dirtyCount??0,merged:$?.merged??null});return}case"confirmYes":{let $=f.pendingConfirm;if(tq(null),$===null||!E)return;R1i($.handle,!0),E.removeSandbox($.handle).then((w)=>{if(w.ok)bRi($.handle);else R1i($.handle,!1),H1i(w.error)});return}case"confirmNo":tq(null);return;case"quit":if(E)E.quit();return}}var Ieu=g(()=>{fq();Peu()});function xeu(i,u,t){if(t)return i==="y"||i==="Y"?{type:"confirmYes"}:{type:"confirmNo"};if(u.upArrow||i==="k")return{type:"move",delta:-1};if(u.downArrow||i==="j")return{type:"move",delta:1};if(i==="s")return{type:"stop"};if(i==="d")return{type:"delete"};if(i==="o")return{type:"open"};if(i==="q"||u.ctrl===!0&&i==="c")return{type:"quit"};return null}var keu={};Xi(keu,{LinkApp:()=>ZMt});import{Box as ql,Text as _1,useInput as OMt}from"ink";import{useSyncExternalStore as NMt}from"react";import{jsx as Gf,jsxs as Fh}from"react/jsx-runtime";function yMt(i,u){if(u)return{color:"yellow",text:"\u25CC Removing\u2026"};if(i.status==="ready")return{color:"green",text:"\u25CF Live"};if(i.status==="spawning")return{color:"yellow",text:"\u25CC Starting\u2026"};if(i.status==="stopped")return{color:"gray",text:"\u25A0 Stopped"};if(i.status==="missing")return{color:"yellow",text:"\u25A1 Missing"};if(i.status==="merged")return{color:"cyan",text:"\u2713 Merged"};if(i.status==="invalid")return{color:"red",text:"\u2717 Invalid"};if(i.status==="failed")return{color:"red",text:`\u2717 Failed: ${i.error??"failed"}`};return{color:"red",text:`\u2717 Error: ${i.error??""}`}}function ZMt(){let i=NMt(HRi,uq),u=[...i.sandboxes.values()].sort((l,c)=>l.handle.localeCompare(c.handle)),t=fW(i.sandboxes),f=i.selectedHandle!==null&&t.includes(i.selectedHandle)?i.selectedHandle:t[0]??null;return OMt((l,c)=>{let E=xeu(l,c,i.pendingConfirm!==null);if(E!==null)Aeu(E)}),Fh(ql,{flexDirection:"column",children:[Gf(Q1i,{version:uW.version}),Gf(ql,{marginBottom:1,children:Gf(_1,{dimColor:!0,children:"\u2500".repeat(80)})}),Gf(ql,{children:i.cluster==="linked"?Fh(_1,{color:"green",children:["\u2713 Connected to ",i.clusterUrl??"deco"]}):i.cluster==="connecting"?Fh(_1,{color:"yellow",children:["\u25CC Connecting to ",i.clusterUrl??"deco","\u2026"]}):Fh(_1,{color:"red",children:["\u2717 Disconnected from ",i.clusterUrl??"deco"]})}),Gf(ql,{children:i.ingressUrl?Fh(_1,{color:"green",children:["\u2713 Serving at ",i.ingressUrl]}):Gf(_1,{dimColor:!0,children:"\u25CC Starting local server\u2026"})}),Gf(ql,{marginBottom:1,children:Gf(_1,{dimColor:!0,children:`${"Computer".padEnd(16)}${i.machine??"this computer"} \xB7 ${u.length} of ${i.cap} previews`})}),u.length===0?Gf(_1,{dimColor:!0,children:"No previews running yet."}):Fh(ql,{flexDirection:"column",children:[Fh(ql,{children:[Gf(ql,{width:2,flexShrink:0}),Gf(ql,{width:lW.project,flexShrink:0,marginRight:1,children:Gf(_1,{dimColor:!0,wrap:"truncate-end",children:"PROJECT"})}),Gf(ql,{width:lW.branch,flexShrink:0,marginRight:1,children:Gf(_1,{dimColor:!0,wrap:"truncate-end",children:"BRANCH"})}),Gf(ql,{width:lW.status,flexShrink:0,marginRight:1,children:Gf(_1,{dimColor:!0,wrap:"truncate-end",children:"STATUS"})}),Gf(ql,{flexGrow:1,children:Gf(_1,{dimColor:!0,wrap:"truncate-end",children:"PREVIEW URL"})})]}),u.map((l)=>{let c=yMt(l,i.removingHandles.has(l.handle)),E=l.handle===f;return Fh(ql,{children:[Gf(ql,{width:2,flexShrink:0,children:Gf(_1,{color:"cyan",children:E?"\u203A":" "})}),Gf(ql,{width:lW.project,flexShrink:0,marginRight:1,children:Gf(_1,{bold:E,wrap:"truncate-end",children:l.projectName??l.handle})}),Gf(ql,{width:lW.branch,flexShrink:0,marginRight:1,children:Gf(_1,{bold:E,wrap:"truncate-end",children:l.branch??"\u2014"})}),Gf(ql,{width:lW.status,flexShrink:0,marginRight:1,children:Gf(_1,{color:c.color,bold:E,wrap:"truncate-end",children:c.text})}),Gf(ql,{flexGrow:1,children:Gf(_1,{dimColor:!0,wrap:"truncate-end",children:l.previewUrl??"\u2014"})})]},l.handle)})]}),i.daemonError?Gf(ql,{marginTop:1,children:Fh(_1,{color:"red",children:["\u26A0 ",i.daemonError]})}):null,i.logPath?Gf(ql,{marginTop:1,children:Fh(_1,{dimColor:!0,children:["Logs: ",i.logPath]})}):null,i.pendingConfirm?Gf(ql,{marginTop:1,children:Gf(_1,{color:"yellow",children:yeu(i.pendingConfirm)})}):null,i.actionError?Gf(ql,{marginTop:1,children:Fh(_1,{color:"red",children:["\u2717 ",i.actionError]})}):null,Gf(ql,{marginTop:1,children:Gf(_1,{dimColor:!0,children:"\u2191\u2193 move \xB7 s stop \xB7 d delete \xB7 o open \xB7 q quit"})})]})}var lW;var Geu=g(()=>{L1i();zRi();Ieu();fq();lW={project:18,branch:22,status:14}});var Seu={};Xi(Seu,{runLinkCommand:()=>xMt});import{closeSync as TMt,mkdirSync as BMt,openSync as FMt,writeSync as UMt}from"fs";import{homedir as PMt}from"os";import{join as MRi}from"path";function AMt(i,u){let t={log:console.log,warn:console.warn,error:console.error},f=(l)=>{if(u===void 0)return;try{UMt(u,`${LRi(l)}
84522
+ `)}var QRi;var neu=g(()=>{QRi=class QRi extends Error{port;code="EADDRINUSE";constructor(i){super(`Port ${i} is already in use.`);this.port=i;this.name="PortInUseError"}}});var uW;var L1i=g(()=>{uW={name:"decocms",version:"4.83.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:ct":"playwright test -c playwright-ct.config.ts","test:ct:ui":"playwright test -c playwright-ct.config.ts --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.3.181","@duckdb/node-api":"^1.5.0-r.1","@openai/codex":"0.144.3","@openai/codex-darwin-arm64":"npm:@openai/codex@0.144.3-darwin-arm64","@openai/codex-darwin-x64":"npm:@openai/codex@0.144.3-darwin-x64","@openai/codex-linux-arm64":"npm:@openai/codex@0.144.3-linux-arm64","@openai/codex-linux-x64":"npm:@openai/codex@0.144.3-linux-x64","@openai/codex-win32-arm64":"npm:@openai/codex@0.144.3-win32-arm64","@openai/codex-win32-x64":"npm:@openai/codex@0.144.3-win32-x64"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@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","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","@tanstack/react-virtual":"3.13.24","@tiptap/extension-text-align":"3.20.2","@xterm/addon-fit":"^0.11.0","@xterm/xterm":"^6.0.0",echarts:"^5.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","node-pty":"^1.0.0","posthog-js":"^1.371.1","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6","use-stick-to-bottom":"^1.1.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@ai-sdk/react":"^3.0.210","@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:*","@decocms/tunnel":"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","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@playwright/experimental-ct-react":"1.59.1","@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/shadcn":"^6.6.2","@rjsf/utils":"^6.6.2","@rjsf/validator-ajv8":"^6.6.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-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/google.maps":"^3.65.2","@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.208","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",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"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","mesh","tools"],license:"MIT",publishConfig:{access:"public"}}});var iq={};Xi(iq,{printBanner:()=>pCt,bannerLines:()=>geu,BANNER_LINES:()=>W1i,BANNER_GRADIENT:()=>Y1i});function sCt(i){let u=Number.parseInt(i.slice(1),16);return[u>>16&255,u>>8&255,u&255]}function geu(i){let u=W1i.map((t,f)=>{let[l,c,E]=sCt(Y1i[f]);return`\x1B[38;2;${l};${c};${E}m${t}\x1B[39m`});if(i!==void 0)u.push(`\x1B[2m v${i}\x1B[22m`);return u}function pCt(i){console.log("");for(let u of geu(i))console.log(u);console.log("")}var W1i,Y1i;var tW=g(()=>{W1i=[" \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 "],Y1i=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"]});import{Box as iMt,Text as Oeu}from"ink";import{jsx as uMt,jsxs as Neu}from"react/jsx-runtime";function Q1i({version:i}){return Neu(iMt,{flexDirection:"column",marginTop:1,children:[W1i.map((u,t)=>uMt(Oeu,{color:Y1i[t],children:u},t)),Neu(Oeu,{dimColor:!0,children:[" v",i]})]})}var zRi=g(()=>{tW()});function yeu(i){let u=i.branch??i.handle,t=[];if(i.dirtyCount>0)t.push(`${i.dirtyCount} uncommitted file${i.dirtyCount===1?"":"s"}`);if(i.merged===!1)t.push("branch not merged");return t.length>0?`\u26A0 ${t.join(", ")} \u2014 delete ${u}? (y/n)`:`Delete ${u}? (y/n)`}function fW(i){return[...i.values()].map((u)=>u.handle).sort((u,t)=>u.localeCompare(t))}function Zeu(i,u,t){if(i.length===0)return null;let f=u===null?-1:i.indexOf(u);if(f===-1)return t>0?i[0]:i[i.length-1];let l=Math.max(0,Math.min(i.length-1,f+t));return i[l]}function Teu(i,u,t){if(t!==u)return t;let f=i.indexOf(u);if(f===-1)return t;return i[f+1]??i[f-1]??null}var CRi={};Xi(CRi,{subscribeLinkState:()=>HRi,setSelectedHandle:()=>RRi,setRemoving:()=>R1i,setPersistedSandboxes:()=>_Mt,setPendingConfirm:()=>tq,setMachine:()=>$Mt,setLogPath:()=>dMt,setLinkActions:()=>hMt,setIngress:()=>EMt,setDaemonError:()=>wMt,setClusterUrl:()=>cMt,setCluster:()=>lMt,setActionError:()=>H1i,resetLinkStateForTests:()=>DMt,removeSandboxRow:()=>bRi,pushSandboxEvent:()=>vMt,getLinkState:()=>uq,applySandboxEvent:()=>Beu});function fMt(i){return i==="spawning"||i==="ready"||i==="failed"}function Beu(i,u){let t=new Map(i),f=t.get(u.handle);if(u.phase==="evicted"||u.phase==="deleted"){if(f)t.set(u.handle,{...f,port:null,previewUrl:null,status:"stopped",error:null});return t}return t.set(u.handle,{handle:u.handle,port:u.port??f?.port??null,previewUrl:u.previewUrl??f?.previewUrl??null,status:u.phase,error:u.phase==="failed"?u.error??"failed":null,projectName:u.projectName??f?.projectName??null,branch:u.branch??f?.branch??null,sandboxPath:u.sandboxPath??f?.sandboxPath??null}),t}function Feu(){return{cluster:"connecting",clusterUrl:null,ingressUrl:null,ingressPort:null,machine:null,cap:tMt,sandboxes:new Map,daemonError:null,logPath:null,selectedHandle:null,pendingConfirm:null,removingHandles:new Set,actionError:null,actions:null}}function Q$(){for(let i of z1i)i()}function uq(){return cf}function HRi(i){return z1i.add(i),()=>z1i.delete(i)}function lMt(i){cf={...cf,cluster:i},Q$()}function cMt(i){cf={...cf,clusterUrl:i},Q$()}function EMt(i,u){cf={...cf,ingressPort:i,ingressUrl:u},Q$()}function $Mt(i){cf={...cf,machine:i},Q$()}function wMt(i){cf={...cf,daemonError:i},Q$()}function dMt(i){cf={...cf,logPath:i},Q$()}function RRi(i){cf={...cf,selectedHandle:i},Q$()}function tq(i){cf={...cf,pendingConfirm:i},Q$()}function H1i(i){cf={...cf,actionError:i},Q$()}function R1i(i,u){if(cf.removingHandles.has(i)===u)return;let t=new Set(cf.removingHandles);if(u)t.add(i);else t.delete(i);cf={...cf,removingHandles:t},Q$()}function hMt(i){cf={...cf,actions:i},Q$()}function bRi(i){let u=fW(cf.sandboxes),t=Teu(u,i,cf.selectedHandle),f=new Map(cf.sandboxes);f.delete(i);let l=new Set(cf.removingHandles);l.delete(i),cf={...cf,sandboxes:f,selectedHandle:t,pendingConfirm:null,removingHandles:l},Q$()}function _Mt(i){let u=new Map;for(let t of i)u.set(t.handle,{handle:t.handle,port:t.port,previewUrl:t.previewUrl,status:t.status,error:t.error,projectName:t.projectName,branch:t.branch,sandboxPath:t.sandboxPath});for(let[t,f]of cf.sandboxes)if(fMt(f.status))u.set(t,f);cf={...cf,sandboxes:u},Q$()}function vMt(i){cf={...cf,sandboxes:Beu(cf.sandboxes,i)},Q$()}function DMt(){cf=Feu(),z1i.clear()}var tMt=20,cf,z1i;var fq=g(()=>{cf=Feu(),z1i=new Set});import{spawn as nMt}from"child_process";function gMt(i){if(i==="darwin")return"open";if(i==="win32")return"start";return"xdg-open"}function Ueu(i,u=process.platform){let t=gMt(u);try{nMt(t,[i],{stdio:"ignore",detached:!0}).unref()}catch{}}var Peu=()=>{};function Aeu(i,u={}){let t=u.openUrl??Ueu,f=uq(),l=fW(f.sandboxes),c=f.selectedHandle!==null&&l.includes(f.selectedHandle)?f.selectedHandle:l[0]??null,E=f.actions;switch(i.type){case"move":RRi(Zeu(l,f.selectedHandle,i.delta));return;case"open":{if(c===null)return;let $=f.sandboxes.get(c);if($?.status==="ready"&&$.previewUrl)t($.previewUrl);return}case"stop":if(c!==null&&E)E.stopSandbox(c);return;case"delete":{if(c===null||!E)return;let $=E.inspectSandbox(c),w=f.sandboxes.get(c);H1i(null),tq({handle:c,branch:$?.branch??w?.branch??null,dirtyCount:$?.dirtyCount??0,merged:$?.merged??null});return}case"confirmYes":{let $=f.pendingConfirm;if(tq(null),$===null||!E)return;R1i($.handle,!0),E.removeSandbox($.handle).then((w)=>{if(w.ok)bRi($.handle);else R1i($.handle,!1),H1i(w.error)});return}case"confirmNo":tq(null);return;case"quit":if(E)E.quit();return}}var Ieu=g(()=>{fq();Peu()});function xeu(i,u,t){if(t)return i==="y"||i==="Y"?{type:"confirmYes"}:{type:"confirmNo"};if(u.upArrow||i==="k")return{type:"move",delta:-1};if(u.downArrow||i==="j")return{type:"move",delta:1};if(i==="s")return{type:"stop"};if(i==="d")return{type:"delete"};if(i==="o")return{type:"open"};if(i==="q"||u.ctrl===!0&&i==="c")return{type:"quit"};return null}var keu={};Xi(keu,{LinkApp:()=>ZMt});import{Box as ql,Text as _1,useInput as OMt}from"ink";import{useSyncExternalStore as NMt}from"react";import{jsx as Gf,jsxs as Fh}from"react/jsx-runtime";function yMt(i,u){if(u)return{color:"yellow",text:"\u25CC Removing\u2026"};if(i.status==="ready")return{color:"green",text:"\u25CF Live"};if(i.status==="spawning")return{color:"yellow",text:"\u25CC Starting\u2026"};if(i.status==="stopped")return{color:"gray",text:"\u25A0 Stopped"};if(i.status==="missing")return{color:"yellow",text:"\u25A1 Missing"};if(i.status==="merged")return{color:"cyan",text:"\u2713 Merged"};if(i.status==="invalid")return{color:"red",text:"\u2717 Invalid"};if(i.status==="failed")return{color:"red",text:`\u2717 Failed: ${i.error??"failed"}`};return{color:"red",text:`\u2717 Error: ${i.error??""}`}}function ZMt(){let i=NMt(HRi,uq),u=[...i.sandboxes.values()].sort((l,c)=>l.handle.localeCompare(c.handle)),t=fW(i.sandboxes),f=i.selectedHandle!==null&&t.includes(i.selectedHandle)?i.selectedHandle:t[0]??null;return OMt((l,c)=>{let E=xeu(l,c,i.pendingConfirm!==null);if(E!==null)Aeu(E)}),Fh(ql,{flexDirection:"column",children:[Gf(Q1i,{version:uW.version}),Gf(ql,{marginBottom:1,children:Gf(_1,{dimColor:!0,children:"\u2500".repeat(80)})}),Gf(ql,{children:i.cluster==="linked"?Fh(_1,{color:"green",children:["\u2713 Connected to ",i.clusterUrl??"deco"]}):i.cluster==="connecting"?Fh(_1,{color:"yellow",children:["\u25CC Connecting to ",i.clusterUrl??"deco","\u2026"]}):Fh(_1,{color:"red",children:["\u2717 Disconnected from ",i.clusterUrl??"deco"]})}),Gf(ql,{children:i.ingressUrl?Fh(_1,{color:"green",children:["\u2713 Serving at ",i.ingressUrl]}):Gf(_1,{dimColor:!0,children:"\u25CC Starting local server\u2026"})}),Gf(ql,{marginBottom:1,children:Gf(_1,{dimColor:!0,children:`${"Computer".padEnd(16)}${i.machine??"this computer"} \xB7 ${u.length} of ${i.cap} previews`})}),u.length===0?Gf(_1,{dimColor:!0,children:"No previews running yet."}):Fh(ql,{flexDirection:"column",children:[Fh(ql,{children:[Gf(ql,{width:2,flexShrink:0}),Gf(ql,{width:lW.project,flexShrink:0,marginRight:1,children:Gf(_1,{dimColor:!0,wrap:"truncate-end",children:"PROJECT"})}),Gf(ql,{width:lW.branch,flexShrink:0,marginRight:1,children:Gf(_1,{dimColor:!0,wrap:"truncate-end",children:"BRANCH"})}),Gf(ql,{width:lW.status,flexShrink:0,marginRight:1,children:Gf(_1,{dimColor:!0,wrap:"truncate-end",children:"STATUS"})}),Gf(ql,{flexGrow:1,children:Gf(_1,{dimColor:!0,wrap:"truncate-end",children:"PREVIEW URL"})})]}),u.map((l)=>{let c=yMt(l,i.removingHandles.has(l.handle)),E=l.handle===f;return Fh(ql,{children:[Gf(ql,{width:2,flexShrink:0,children:Gf(_1,{color:"cyan",children:E?"\u203A":" "})}),Gf(ql,{width:lW.project,flexShrink:0,marginRight:1,children:Gf(_1,{bold:E,wrap:"truncate-end",children:l.projectName??l.handle})}),Gf(ql,{width:lW.branch,flexShrink:0,marginRight:1,children:Gf(_1,{bold:E,wrap:"truncate-end",children:l.branch??"\u2014"})}),Gf(ql,{width:lW.status,flexShrink:0,marginRight:1,children:Gf(_1,{color:c.color,bold:E,wrap:"truncate-end",children:c.text})}),Gf(ql,{flexGrow:1,children:Gf(_1,{dimColor:!0,wrap:"truncate-end",children:l.previewUrl??"\u2014"})})]},l.handle)})]}),i.daemonError?Gf(ql,{marginTop:1,children:Fh(_1,{color:"red",children:["\u26A0 ",i.daemonError]})}):null,i.logPath?Gf(ql,{marginTop:1,children:Fh(_1,{dimColor:!0,children:["Logs: ",i.logPath]})}):null,i.pendingConfirm?Gf(ql,{marginTop:1,children:Gf(_1,{color:"yellow",children:yeu(i.pendingConfirm)})}):null,i.actionError?Gf(ql,{marginTop:1,children:Fh(_1,{color:"red",children:["\u2717 ",i.actionError]})}):null,Gf(ql,{marginTop:1,children:Gf(_1,{dimColor:!0,children:"\u2191\u2193 move \xB7 s stop \xB7 d delete \xB7 o open \xB7 q quit"})})]})}var lW;var Geu=g(()=>{L1i();zRi();Ieu();fq();lW={project:18,branch:22,status:14}});var Seu={};Xi(Seu,{runLinkCommand:()=>xMt});import{closeSync as TMt,mkdirSync as BMt,openSync as FMt,writeSync as UMt}from"fs";import{homedir as PMt}from"os";import{join as MRi}from"path";function AMt(i,u){let t={log:console.log,warn:console.warn,error:console.error},f=(l)=>{if(u===void 0)return;try{UMt(u,`${LRi(l)}
84523
84523
  `)}catch{}};return console.log=(...l)=>f(l),console.warn=(...l)=>f(l),console.error=(...l)=>{f(l),i(LRi(l))},()=>{console.log=t.log,console.warn=t.warn,console.error=t.error}}async function IMt(i,u){let t;try{t=await fetch(`${i}/api/links/me`,{headers:{authorization:`Bearer ${u}`},signal:AbortSignal.timeout(1e4)})}catch{return}if(t.status===401||t.status===403)throw Error(`Authentication rejected by ${i} \u2014 the session token was not accepted. `+`Run \`deco auth login --target ${i}\` and try again.`)}async function xMt(i={}){let u=i.port??5174,t=i.dataDir??process.env.DATA_DIR??process.env.DECOCMS_HOME??MRi(PMt(),"deco"),f=i.clusterBaseUrl??process.env.MESH_CLUSTER_URL??"https://studio.decocms.com",l,c,E,$=()=>{if(E===void 0)return;try{E.close()}catch{}finally{E=void 0}};try{if(await WRi(u,"127.0.0.1"))throw new QRi(u);let w=MRi(t,"sandboxes");E=X1i({path:J1i(t),managedSandboxRoot:w});let d=await Gli({dataDir:t,intent:"Link",target:f});if(process.env.DECOCMS_LINK_MANAGED!=="1")await IMt(f,d.accessToken);let h=E.reconcile();if(i.prune){let n=E.prune({missing:!0,merged:!0});if(!i.tui)console.log(`Pruned local sandboxes: removed ${n.removed.length}, skipped ${n.skipped.length}.`);h=E.reconcile()}let _;if(i.tui){let{render:n}=await import("ink"),{createElement:O}=await import("react"),{LinkApp:N}=await Promise.resolve().then(() => (Geu(),keu)),{pushSandboxEvent:y,setCluster:Z,setClusterUrl:T,setDaemonError:B,setIngress:F,setLogPath:A,setMachine:G,setPersistedSandboxes:I}=await Promise.resolve().then(() => (fq(),CRi));BMt(t,{recursive:!0});let k=MRi(t,"link.log");c=FMt(k,"w"),A(k),I(h),T(f),Z("connecting"),_={onEvent:(q)=>y(q),onIngress:(q)=>F(q,`http://127.0.0.1:${q}`),onCluster:(q)=>Z(q),onMachine:(q)=>G(q)},l=AMt(B,c),n(O(N),{patchConsole:!1})}else if(i.banner!==!1){let{printBanner:n}=await Promise.resolve().then(() => (tW(),iq));n(i.version??"0.0.0")}$();let v=process.env.DECOCMS_LINK_MANAGED!=="1",D=await deu({port:u,clusterBaseUrl:f,dataDir:t,session:d,monitor:_,logFd:c,perSandboxLogs:v,hotReload:i.hotReload});if(i.tui){let{setLinkActions:n}=await Promise.resolve().then(() => (fq(),CRi));n({stopSandbox:D.stopSandbox,removeSandbox:D.removeSandbox,inspectSandbox:D.inspectSandbox,quit:D.stop})}return await D.stopped}catch(w){return l?.(),console.error(veu(w)?Deu(u):w instanceof Error?w.message:String(w)),1}finally{if(l?.(),c!==void 0)try{TMt(c)}catch{}$()}}var jeu=g(()=>{Dzi();heu();YRi();neu();XRi()});var aRi={};Xi(aRi,{resolveDevLinkClusterUrl:()=>jMt,populateDevLinkToxiProxy:()=>Yeu,isDevLinkToxiProxyEnabled:()=>SMt,ensureDevLinkToxiProxy:()=>WMt,buildDevLinkToxiProxyConfig:()=>Leu,DEV_LINK_TOXIPROXY_SERVICE_NAME:()=>Jeu,DEV_LINK_TOXIPROXY_PROXY_NAME:()=>Xeu});function SMt(i=process.env){return i.DECO_DEV_LINK_TOXIPROXY==="1"}function qRi(i,u){if(!Number.isInteger(i)||i<1||i>65535)throw Error(`${u} must be an integer port in 1..65535`);return i}function Leu(i){let u=new URL(i.serverUrl);if(u.protocol!=="http:")throw Error("DECO_DEV_LINK_TOXIPROXY only supports http local Studio URLs");let t=qRi(i.apiPort,"apiPort"),f=qRi(i.listenPort,"listenPort");if(u.port.length===0)throw Error("serverUrl must include an explicit valid port");let l=qRi(Number.parseInt(u.port,10),"upstreamPort"),c=`http://127.0.0.1:${l}`,E=`http://127.0.0.1:${f}`;return{serviceName:Jeu,proxyName:Xeu,apiUrl:`http://127.0.0.1:${t}`,listen:`0.0.0.0:${f}`,upstream:`host.docker.internal:${l}`,publicTargetUrl:c,clusterUrl:E,logLine:`[dev-link-toxiproxy] ready: ${E} -> ${c}`}}function jMt(i){return i.toxiproxy?.clusterUrl??i.serverUrl}async function VRi(i,u,t){if(i.ok)return;let f=await i.text();throw Error(`ToxiProxy ${u} failed for ${t}: status=${i.status} statusText=${i.statusText} body=${f}`)}function eRi(i){if(i instanceof Error)return i.name==="Error"?i.message:`${i.name}: ${i.message}`;return String(i)}function Weu(i){if(!(i instanceof Error))return!1;if(i.name==="TimeoutError")return!0;return Weu(i.cause)}async function rRi(i,u,t,f){try{return await i(t,f)}catch(l){throw Error(`ToxiProxy ${u} failed for ${t}: ${eRi(l)}`,{cause:l})}}async function Yeu(i,u=fetch){let t=`${i.apiUrl}/reset`,f=await rRi(u,"reset",t,{method:"POST"});await VRi(f,"reset",t);let l=`${i.apiUrl}/populate`,c=await rRi(u,"populate",l,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify([{name:i.proxyName,listen:i.listen,upstream:i.upstream,enabled:!0}])});await VRi(c,"populate",l)}async function KMt(i,u){let t=`${i.apiUrl}/version`;try{await Cl(async()=>{let f=await rRi(u,"readiness check",t,{method:"GET",signal:AbortSignal.timeout(GMt)});await VRi(f,"readiness check",t)},{maxAttempts:kMt,minTimeout:Keu,maxTimeout:Keu,multiplier:1,jitter:0,isRetriable:(f)=>!Weu(f)})}catch(f){let l=f instanceof Wc?f.cause:f;throw Error(`ToxiProxy API did not become ready at ${t}: ${eRi(l)}`,{cause:l})}}async function JMt(i){if(i===null)return"";return await new Response(i).text()}async function mRi(i,u={}){let t=["docker",...i].join(" "),f=(()=>{try{return Bun.spawn(["docker",...i],{stdout:"ignore",stderr:"pipe"})}catch($){throw Error(`Docker command failed to start (${t}): ${eRi($)}`,{cause:$})}})(),[l,c]=await Promise.all([f.exited,JMt(f.stderr)]);if(l===0||u.ignoreFailure===!0)return;let E=c.trim().length>0?`: ${c.trim()}`:"";throw Error(`Docker command failed (${t}) with exit ${l}${E}`)}async function XMt(i,u){let t=`deco-dev-link-toxiproxy-${i}`;await mRi(["rm","-f",t],{ignoreFailure:!0}),await mRi(["run","--rm","-d","--name",t,"-p",`127.0.0.1:${i}:8474`,"-p",`127.0.0.1:${u}:${u}`,"ghcr.io/shopify/toxiproxy:2.12.0","-host=0.0.0.0"])}async function LMt(i,u){let t=`deco-dev-link-toxiproxy-${i}`;await mRi(["rm","-f",t],{ignoreFailure:!0})}async function WMt(i){let u=Leu(i),t=i.startDaemon??XMt,f=i.stopDaemon??(i.startDaemon===void 0?LMt:void 0);await t(i.apiPort,i.listenPort);let l=i.fetchImpl??fetch;try{await KMt(u,l),await Yeu(u,l)}catch(c){if(f!==void 0)try{await f(i.apiPort,i.listenPort)}catch{}throw c}return{config:u,stop:async()=>{if(f!==void 0)await f(i.apiPort,i.listenPort)}}}var Jeu="ToxiProxy",Xeu="dev_link_studio",kMt=20,Keu=100,GMt=100;var oRi=g(()=>{y4()});var Qeu={};Xi(Qeu,{migrateBetterAuth:()=>sRi});import{getMigrations as YMt}from"better-auth/db";import{sso as QMt}from"@better-auth/sso";import{organization as zMt}from"@decocms/better-auth/plugins";import{admin as HMt,apiKey as RMt,jwt as bMt,magicLink as CMt,mcp as MMt,openAPI as qMt}from"better-auth/plugins";import{emailOTP as VMt}from"better-auth/plugins/email-otp";async function sRi(i){let t={database:gM(i||t2()),plugins:[zMt({dynamicAccessControl:{enabled:!0,enableCustomResources:!0}}),HMt(),RMt(),bMt(),qMt(),MMt({loginPage:"/login"}),QMt(),CMt({sendMagicLink:async()=>{}}),VMt({sendVerificationOTP:async()=>{}})]},{toBeAdded:f,toBeCreated:l,runMigrations:c}=await YMt(t);if(!f.length&&!l.length)return"up to date";return await c(),`${l.length+f.length} table(s) migrated`}var pRi=g(()=>{cE()});var ibi={};Xi(ibi,{up:()=>rMt,down:()=>mMt});import{sql as $v}from"kysely";async function rMt(i){await i.schema.createTable("connections").addColumn("id","text",(u)=>u.primaryKey()).addColumn("organizationId","text",(u)=>u.notNull().references("organization.id").onDelete("cascade")).addColumn("createdById","text",(u)=>u.notNull().references("user.id").onDelete("cascade")).addColumn("name","text",(u)=>u.notNull()).addColumn("description","text").addColumn("icon","text").addColumn("appName","text").addColumn("appId","text").addColumn("connectionType","text",(u)=>u.notNull()).addColumn("connectionUrl","text",(u)=>u.notNull()).addColumn("connectionToken","text").addColumn("connectionHeaders","text").addColumn("oauthConfig","text").addColumn("metadata","text").addColumn("tools","text").addColumn("bindings","text").addColumn("status","text",(u)=>u.notNull().defaultTo("active")).addColumn("createdAt","text",(u)=>u.notNull().defaultTo($v`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(u)=>u.notNull().defaultTo($v`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("api_keys").addColumn("id","text",(u)=>u.primaryKey()).addColumn("userId","text",(u)=>u.notNull().references("user.id").onDelete("cascade")).addColumn("name","text",(u)=>u.notNull()).addColumn("hashedKey","text",(u)=>u.notNull().unique()).addColumn("permissions","text",(u)=>u.notNull()).addColumn("expiresAt","text").addColumn("remaining","integer").addColumn("metadata","text").addColumn("createdAt","text",(u)=>u.notNull().defaultTo($v`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(u)=>u.notNull().defaultTo($v`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("audit_logs").addColumn("id","text",(u)=>u.primaryKey()).addColumn("organizationId","text").addColumn("userId","text",(u)=>u.references("user.id").onDelete("set null")).addColumn("connectionId","text",(u)=>u.references("connections.id").onDelete("set null")).addColumn("toolName","text",(u)=>u.notNull()).addColumn("allowed","integer",(u)=>u.notNull()).addColumn("duration","integer").addColumn("timestamp","text",(u)=>u.notNull().defaultTo($v`CURRENT_TIMESTAMP`)).addColumn("requestMetadata","text").execute(),await i.schema.createTable("oauth_clients").addColumn("id","text",(u)=>u.primaryKey()).addColumn("clientId","text",(u)=>u.notNull().unique()).addColumn("clientSecret","text").addColumn("clientName","text",(u)=>u.notNull()).addColumn("redirectUris","text",(u)=>u.notNull()).addColumn("grantTypes","text",(u)=>u.notNull()).addColumn("scope","text").addColumn("clientUri","text").addColumn("logoUri","text").addColumn("createdAt","text",(u)=>u.notNull().defaultTo($v`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("oauth_authorization_codes").addColumn("code","text",(u)=>u.primaryKey()).addColumn("clientId","text",(u)=>u.notNull().references("oauth_clients.clientId").onDelete("cascade")).addColumn("userId","text",(u)=>u.notNull().references("user.id").onDelete("cascade")).addColumn("redirectUri","text",(u)=>u.notNull()).addColumn("scope","text").addColumn("codeChallenge","text").addColumn("codeChallengeMethod","text").addColumn("expiresAt","text",(u)=>u.notNull()).addColumn("createdAt","text",(u)=>u.notNull().defaultTo($v`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("oauth_refresh_tokens").addColumn("token","text",(u)=>u.primaryKey()).addColumn("clientId","text",(u)=>u.notNull().references("oauth_clients.clientId").onDelete("cascade")).addColumn("userId","text",(u)=>u.notNull().references("user.id").onDelete("cascade")).addColumn("scope","text").addColumn("expiresAt","text").addColumn("createdAt","text",(u)=>u.notNull().defaultTo($v`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("downstream_tokens").addColumn("id","text",(u)=>u.primaryKey()).addColumn("connectionId","text",(u)=>u.notNull().references("connections.id").onDelete("cascade")).addColumn("userId","text",(u)=>u.references("user.id").onDelete("cascade")).addColumn("accessToken","text",(u)=>u.notNull()).addColumn("refreshToken","text").addColumn("scope","text").addColumn("expiresAt","text").addColumn("createdAt","text",(u)=>u.notNull().defaultTo($v`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(u)=>u.notNull().defaultTo($v`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 mMt(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 zeu=()=>{};var ubi={};Xi(ubi,{up:()=>eMt,down:()=>aMt});import{sql as Heu}from"kysely";async function eMt(i){await i.schema.createTable("organization_settings").addColumn("organizationId","text",(u)=>u.primaryKey().references("organization.id").onDelete("cascade")).addColumn("modelsBindingConnectionId","text",(u)=>u.references("connections.id").onDelete("set null")).addColumn("createdAt","text",(u)=>u.notNull().defaultTo(Heu`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(u)=>u.notNull().defaultTo(Heu`CURRENT_TIMESTAMP`)).execute()}async function aMt(i){await i.schema.dropTable("organization_settings").execute()}var Reu=()=>{};var tbi={};Xi(tbi,{up:()=>oMt,down:()=>sMt});async function oMt(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 sMt(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 fbi={};Xi(fbi,{up:()=>pMt,down:()=>iqt});async function pMt(i){await i.schema.createTable("organization_settings_new").addColumn("organizationId","text",(u)=>u.primaryKey().references("organization.id").onDelete("cascade")).addColumn("createdAt","text",(u)=>u.notNull()).addColumn("updatedAt","text",(u)=>u.notNull()).execute(),await i.insertInto("organization_settings_new").columns(["organizationId","createdAt","updatedAt"]).expression((u)=>u.selectFrom("organization_settings").select(["organizationId","createdAt","updatedAt"])).execute(),await i.schema.dropTable("organization_settings").execute(),await i.schema.alterTable("organization_settings_new").renameTo("organization_settings").execute()}async function iqt(i){await i.schema.createTable("organization_settings_new").addColumn("organizationId","text",(u)=>u.primaryKey().references("organization.id").onDelete("cascade")).addColumn("modelsBindingConnectionId","text",(u)=>u.references("connections.id").onDelete("set null")).addColumn("createdAt","text",(u)=>u.notNull()).addColumn("updatedAt","text",(u)=>u.notNull()).execute(),await i.insertInto("organization_settings_new").columns(["organizationId","modelsBindingConnectionId","createdAt","updatedAt"]).expression((u)=>u.selectFrom("organization_settings").select(["organizationId",u.val(null).as("modelsBindingConnectionId"),"createdAt","updatedAt"])).execute(),await i.schema.dropTable("organization_settings").execute(),await i.schema.alterTable("organization_settings_new").renameTo("organization_settings").execute()}var lbi={};Xi(lbi,{up:()=>uqt,down:()=>tqt});async function uqt(i){await i.schema.alterTable("connections").addColumn("configuration_state","text").execute(),await i.schema.alterTable("connections").addColumn("configuration_scopes","text").execute()}async function tqt(i){await i.schema.alterTable("connections").dropColumn("configuration_state").execute(),await i.schema.alterTable("connections").dropColumn("configuration_scopes").execute()}var cbi={};Xi(cbi,{up:()=>lqt,down:()=>cqt});import{sql as fqt}from"kysely";async function lqt(i){await i.schema.alterTable("organization_settings").addColumn("sidebar_items",fqt`text`).execute()}async function cqt(i){await i.schema.alterTable("organization_settings").dropColumn("sidebar_items").execute()}var beu=()=>{};var Ebi={};Xi(Ebi,{up:()=>Eqt,down:()=>$qt});async function Eqt(i){await i.schema.createTable("monitoring_logs").addColumn("id","text",(u)=>u.primaryKey()).addColumn("organization_id","text",(u)=>u.notNull().references("organization.id").onDelete("cascade")).addColumn("connection_id","text",(u)=>u.notNull().references("connections.id").onDelete("cascade")).addColumn("connection_title","text",(u)=>u.notNull()).addColumn("tool_name","text",(u)=>u.notNull()).addColumn("input","text",(u)=>u.notNull()).addColumn("output","text",(u)=>u.notNull()).addColumn("is_error","integer",(u)=>u.notNull()).addColumn("error_message","text").addColumn("duration_ms","integer",(u)=>u.notNull()).addColumn("timestamp","text",(u)=>u.notNull()).addColumn("user_id","text").addColumn("request_id","text",(u)=>u.notNull()).execute(),await i.schema.createIndex("monitoring_logs_org_timestamp").on("monitoring_logs").columns(["organization_id","timestamp"]).execute(),await i.schema.createIndex("monitoring_logs_connection_timestamp").on("monitoring_logs").columns(["connection_id","timestamp"]).execute(),await i.schema.createIndex("monitoring_logs_is_error").on("monitoring_logs").columns(["organization_id","is_error","timestamp"]).execute()}async function $qt(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 $bi={};Xi($bi,{up:()=>wqt,down:()=>dqt});import{sql as lq}from"kysely";async function wqt(i){await i.schema.createTable("events").addColumn("id","text",(u)=>u.primaryKey()).addColumn("organization_id","text",(u)=>u.notNull().references("organization.id").onDelete("cascade")).addColumn("type","text",(u)=>u.notNull()).addColumn("source","text",(u)=>u.notNull()).addColumn("specversion","text",(u)=>u.notNull().defaultTo("1.0")).addColumn("subject","text").addColumn("time","text",(u)=>u.notNull()).addColumn("datacontenttype","text",(u)=>u.notNull().defaultTo("application/json")).addColumn("dataschema","text").addColumn("data","text").addColumn("cron","varchar(255)").addColumn("status","text",(u)=>u.notNull().defaultTo("pending")).addColumn("attempts","integer",(u)=>u.notNull().defaultTo(0)).addColumn("last_error","text").addColumn("next_retry_at","text").addColumn("created_at","text",(u)=>u.notNull().defaultTo(lq`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(u)=>u.notNull().defaultTo(lq`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("event_subscriptions").addColumn("id","text",(u)=>u.primaryKey()).addColumn("organization_id","text",(u)=>u.notNull().references("organization.id").onDelete("cascade")).addColumn("connection_id","text",(u)=>u.notNull().references("connections.id").onDelete("cascade")).addColumn("publisher","text").addColumn("event_type","text",(u)=>u.notNull()).addColumn("filter","text").addColumn("enabled","integer",(u)=>u.notNull().defaultTo(1)).addColumn("created_at","text",(u)=>u.notNull().defaultTo(lq`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(u)=>u.notNull().defaultTo(lq`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("event_deliveries").addColumn("id","text",(u)=>u.primaryKey()).addColumn("event_id","text",(u)=>u.notNull()).addColumn("subscription_id","text",(u)=>u.notNull().references("event_subscriptions.id").onDelete("cascade")).addColumn("status","text",(u)=>u.notNull().defaultTo("pending")).addColumn("attempts","integer",(u)=>u.notNull().defaultTo(0)).addColumn("last_error","text").addColumn("delivered_at","text").addColumn("next_retry_at","text").addColumn("created_at","text",(u)=>u.notNull().defaultTo(lq`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 dqt(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 Ceu=()=>{};var wbi={};Xi(wbi,{up:()=>_qt,down:()=>vqt});import{sql as hqt}from"kysely";async function _qt(i){await i.schema.dropTable("audit_logs").ifExists().execute()}async function vqt(i){await i.schema.createTable("audit_logs").ifNotExists().addColumn("id","text",(u)=>u.primaryKey()).addColumn("organizationId","text").addColumn("userId","text",(u)=>u.references("user.id").onDelete("set null")).addColumn("connectionId","text",(u)=>u.references("connections.id").onDelete("set null")).addColumn("toolName","text",(u)=>u.notNull()).addColumn("allowed","integer",(u)=>u.notNull()).addColumn("duration","integer").addColumn("timestamp","text",(u)=>u.notNull().defaultTo(hqt`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 Meu=()=>{};var dbi={};Xi(dbi,{up:()=>Dqt,down:()=>nqt});import{sql as b1i}from"kysely";async function Dqt(i){await i.schema.createTable("gateways").addColumn("id","text",(u)=>u.primaryKey()).addColumn("organization_id","text",(u)=>u.notNull().references("organization.id").onDelete("cascade")).addColumn("title","text",(u)=>u.notNull()).addColumn("description","text").addColumn("tool_selection_strategy","text").addColumn("status","text",(u)=>u.notNull().defaultTo("active")).addColumn("is_default","integer",(u)=>u.notNull().defaultTo(0)).addColumn("created_at","text",(u)=>u.notNull().defaultTo(b1i`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(u)=>u.notNull().defaultTo(b1i`CURRENT_TIMESTAMP`)).addColumn("created_by","text",(u)=>u.notNull().references("user.id").onDelete("cascade")).addColumn("updated_by","text").execute(),await i.schema.createTable("gateway_connections").addColumn("id","text",(u)=>u.primaryKey()).addColumn("gateway_id","text",(u)=>u.notNull().references("gateways.id").onDelete("cascade")).addColumn("connection_id","text",(u)=>u.notNull().references("connections.id").onDelete("cascade")).addColumn("selected_tools","text").addColumn("created_at","text",(u)=>u.notNull().defaultTo(b1i`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 b1i`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 nqt(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 qeu=()=>{};var hbi={};Xi(hbi,{up:()=>gqt,down:()=>Oqt});async function gqt(i){await i.schema.alterTable("gateways").addColumn("icon","text").execute()}async function Oqt(i){await i.schema.alterTable("gateways").dropColumn("icon").execute()}var _bi={};Xi(_bi,{up:()=>Nqt,down:()=>yqt});import{sql as C1i}from"kysely";async function Nqt(i){await i.schema.alterTable("gateways").addColumn("tool_selection_mode","text",(u)=>u.notNull().defaultTo("inclusion")).execute(),await C1i`
84524
84524
  UPDATE gateways
84525
84525
  SET tool_selection_mode = CASE
@@ -86681,7 +86681,7 @@ Description:
86681
86681
  ${u.description}
86682
86682
  `:"","How to work:","- First decide whether this task requires changing code in a repository. Some tasks (research, answering a question, planning) don't. If it doesn't, just do the work directly \u2014 don't load a repo or open a PR.","- If it DOES need code changes: use the `load_repo` tool to load the relevant repository, then make the change, commit on a new branch, push, and open a pull request. Only then does a PR apply.","- Prefer the GitHub tool to open the PR. If it errors or targets the wrong repo, fall back to `git push` + the GitHub REST API (the auth token is embedded in the `origin` URL).","- If a dev server is running it hot-reloads your changes \u2014 don't restart it, hunt for its port, or run a full typecheck/build just to verify a small edit.","- Change only what the task needs. Don't trace the definition of a pre-existing symbol that's incidental to your change \u2014 note it in one line and move on. Prefer one or two broad searches over many narrow retries.","- If you're blocked on a decision or information only a human has, call the `user_ask` tool instead of guessing or stopping.","",`(task id: ${u.id})`].join(`
86683
86683
  `),w={id:crypto.randomUUID(),role:"user",parts:[{type:"text",text:$}]};await new v$({storage:i.storage.threads.messageParts(),orgId:t,threadId:E.id,runId:E.id}).emitRequestMessage(w),await Tg({threadId:E.id,source:"background-tool",request:{messages:[w],models:{credentialId:l.credentialId,thinking:{id:l.modelId,title:l.modelMeta.title}},agent:{id:c},temperature:0.5,toolApprovalLevel:"auto",mode:"default",organizationId:t,userId:f,taskId:E.id,runMetadata:{taskBoardItemId:u.id}}})}var Phi=g(()=>{kz();zz();EZ();jt()});import{z as Rz}from"zod";var O4u;var RF0=g(()=>{Eu();my();Rtu();Phi();I8();O4u=ti({name:"TASK_BOARD_ITEM_CREATE",description:"Create a new task board item for the organization.",annotations:{title:"Create Task Board Item",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!1},inputSchema:Rz.object({title:Rz.string().min(1),description:Rz.string().nullable().optional(),status:Xa.optional(),priority:ry.optional(),assigneeId:Rz.string().nullable().optional(),dueDate:Rz.string().datetime().nullable().optional()}),outputSchema:Rz.object({item:Iz}),handler:async(i,u)=>{ki(u),await u.access.check();let t=u.organization?.id;if(!t)throw Error("Organization ID required (no active organization in context)");if(i.assigneeId)await z3i(u,t,i.assigneeId);let f=i.assigneeId===Nd,l=await u.storage.taskBoard.create({organizationId:t,title:i.title,description:i.description??null,status:f?"todo":i.status,priority:i.priority,assigneeId:i.assigneeId??null,assignedBy:i.assigneeId?Hu(u):null,dueDate:i.dueDate??null,by:Hu(u)});return E5(t,l),await Hz(u,l),{item:l}}})});import{z as N4u}from"zod";var y4u;var bF0=g(()=>{Eu();my();y4u=ti({name:"TASK_BOARD_ITEM_LIST",description:"List all task board items for the organization.",annotations:{title:"List Task Board Items",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:N4u.object({}),outputSchema:N4u.object({items:N4u.array(Iz)}),handler:async(i,u)=>{ki(u),await u.access.check();let t=u.organization?.id;if(!t)throw Error("Organization ID required (no active organization in context)");return{items:await u.storage.taskBoard.list(t)}}})});import{z as Bg}from"zod";var Z4u;var CF0=g(()=>{Eu();my();Rtu();Phi();I8();Z4u=ti({name:"TASK_BOARD_ITEM_UPDATE",description:"Update a task board item's fields (title, description, status, priority, assignee), and/or link a chat thread to it.",annotations:{title:"Update Task Board Item",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:Bg.object({id:Bg.string(),title:Bg.string().min(1).optional(),description:Bg.string().nullable().optional(),status:Xa.optional(),priority:ry.optional(),assigneeId:Bg.string().nullable().optional(),dueDate:Bg.string().datetime().nullable().optional(),linkThreadId:Bg.string().optional()}),outputSchema:Bg.object({item:Iz}),handler:async(i,u)=>{ki(u),await u.access.check();let t=u.organization?.id;if(!t)throw Error("Organization ID required (no active organization in context)");if(i.assigneeId)await z3i(u,t,i.assigneeId);if(i.linkThreadId){if(!await u.storage.taskBoard.getById(i.id,t))throw Error(`Task board item not found: ${i.id}`);await u.storage.taskBoard.linkThread(i.id,i.linkThreadId,t)}let f=i.title!==void 0||i.description!==void 0||i.status!==void 0||i.priority!==void 0||i.assigneeId!==void 0||i.dueDate!==void 0,l=i.assigneeId!==void 0?await u.storage.taskBoard.getById(i.id,t):null,c=i.assigneeId!==void 0&&i.assigneeId!==(l?.assigneeId??null),E=c&&i.assigneeId===Nd,$;if(f)$=await u.storage.taskBoard.update(i.id,t,{title:i.title,description:i.description,status:E?"todo":i.status,priority:i.priority,assigneeId:i.assigneeId,assignedBy:c?i.assigneeId?Hu(u):null:void 0,dueDate:i.dueDate},Hu(u));else{let w=await u.storage.taskBoard.getById(i.id,t);if(!w)throw Error(`Task board item not found: ${i.id}`);$=w}if(E)E5(t,$),await Hz(u,$);else if(i.linkThreadId)E5(t,$);return{item:$}}})});import{z as Ahi}from"zod";var T4u;var MF0=g(()=>{Eu();I8();T4u=ti({name:"TASK_BOARD_ITEM_DELETE",description:"Delete a task board item.",annotations:{title:"Delete Task Board Item",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:Ahi.object({id:Ahi.string()}),outputSchema:Ahi.object({success:Ahi.boolean()}),handler:async(i,u)=>{ki(u),await u.access.check();let t=u.organization?.id;if(!t)throw Error("Organization ID required (no active organization in context)");return await u.storage.taskBoard.delete(i.id,t),KF0(t,i.id),{success:!0}}})});import{z as Ihi}from"zod";async function oJf(i,u,t){if(t){let l=await i.storage.connections.findById(t);if(l&&l.status==="active")return l}let{items:f}=await i.storage.connections.list(u,{slug:"mcp-github"});return f.find((l)=>l.status==="active")??null}function sJf(i){if(!i||typeof i!=="object")return null;let u=i;if(u.isError)return null;if(u.structuredContent&&typeof u.structuredContent==="object"&&Object.keys(u.structuredContent).length>0)return u.structuredContent;let t=u.content?.find((f)=>f.type==="text")?.text;if(!t)return null;try{return JSON.parse(t)}catch{return null}}async function pJf(i,u,t){let f=await oJf(i,u,t.connectionId);if(!f)return B4u;let l=await Nc(f,i,!0);try{let c=await l.callTool({name:"pull_request_read",arguments:{method:"get",owner:t.repoOwner,repo:t.repoName,pullNumber:t.number}},void 0,{timeout:aJf}),E=sJf(c);if(!E)return B4u;let $=E.state;return{title:typeof E.title==="string"?E.title:null,body:typeof E.body==="string"?E.body:null,state:$==="closed"?"closed":$==="open"?"open":null,draft:typeof E.draft==="boolean"?E.draft:null,merged:typeof E.merged==="boolean"?E.merged:null}}catch{return B4u}finally{await l.close().catch(()=>{})}}var aJf=8000,B4u,F4u;var qF0=g(()=>{Eu();Eg();my();B4u={title:null,body:null,state:null,draft:null,merged:null};F4u=ti({name:"TASK_BOARD_ITEM_PRS_GET",description:"Get the GitHub pull requests linked to a task board item, each enriched with live state (title, open/closed, draft, merged) fetched from GitHub.",annotations:{title:"Get Task Board Item Pull Requests",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:Ihi.object({taskBoardItemId:Ihi.string()}),outputSchema:Ihi.object({prs:Ihi.array(AN0)}),handler:async({taskBoardItemId:i},u)=>{ki(u),await u.access.check();let t=u.organization?.id;if(!t)throw Error("Organization ID required (no active organization in context)");let f=await u.storage.taskBoard.listPrs(i,t);return{prs:await Promise.all(f.map(async(c)=>{let E=await pJf(u,t,c);return{url:c.url,number:c.number,repoOwner:c.repoOwner,repoName:c.repoName,createdAt:c.createdAt,...E}}))}}})});var VF0=g(()=>{RF0();bF0();CF0();MF0();qF0()});import{z as Fg}from"zod";var U4u;var rF0=g(()=>{Eu();U4u=ti({name:"TAGS_LIST",description:"List all tags available in the organization.",annotations:{title:"List Tags",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:Fg.object({}),outputSchema:Fg.object({tags:Fg.array(Fg.object({id:Fg.string(),organizationId:Fg.string(),name:Fg.string(),createdAt:Fg.string().describe("ISO 8601 timestamp")}))}),handler:async(i,u)=>{ki(u),await u.access.check();let t=yi(u);return{tags:(await u.storage.tags.listOrgTags(t.id)).map((l)=>({...l,createdAt:l.createdAt instanceof Date?l.createdAt.toISOString():String(l.createdAt)}))}}})});import{z as Ug}from"zod";var P4u;var mF0=g(()=>{Eu();P4u=ti({name:"TAGS_CREATE",description:"Create a new tag that can be assigned to organization members.",annotations:{title:"Create Tag",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:Ug.object({name:Ug.string().min(1).max(50).describe("Tag name")}),outputSchema:Ug.object({tag:Ug.object({id:Ug.string(),organizationId:Ug.string(),name:Ug.string(),createdAt:Ug.string().describe("ISO 8601 timestamp")})}),handler:async(i,u)=>{ki(u),await u.access.check();let t=yi(u),f=await u.storage.tags.createTag(t.id,i.name);return{tag:{...f,createdAt:f.createdAt instanceof Date?f.createdAt.toISOString():String(f.createdAt)}}}})});import{z as xhi}from"zod";var A4u;var eF0=g(()=>{Eu();A4u=ti({name:"TAGS_DELETE",description:"Delete a tag and automatically remove it from all assigned members.",annotations:{title:"Delete Tag",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:xhi.object({tagId:xhi.string().describe("Tag ID to delete")}),outputSchema:xhi.object({success:xhi.boolean()}),handler:async(i,u)=>{ki(u),await u.access.check();let t=yi(u),f=await u.storage.tags.getTag(i.tagId);if(!f)throw Error("Tag not found");if(f.organizationId!==t.id)throw Error("Tag does not belong to this organization");return await u.storage.tags.deleteTag(i.tagId),{success:!0}}})});import{z as x8}from"zod";var I4u;var aF0=g(()=>{Eu();I4u=ti({name:"MEMBER_TAGS_GET",description:"Get all tags currently assigned to a specific member.",annotations:{title:"Get Member Tags",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:x8.object({memberId:x8.string().describe("Member ID")}),outputSchema:x8.object({tags:x8.array(x8.object({id:x8.string(),organizationId:x8.string(),name:x8.string(),createdAt:x8.string().describe("ISO 8601 timestamp")}))}),handler:async(i,u)=>{ki(u),await u.access.check();let t=yi(u);if(!await u.storage.tags.verifyMemberOrg(i.memberId,t.id))throw Error(`Member not found in this organization: ${i.memberId}`);return{tags:(await u.storage.tags.getMemberTags(i.memberId)).map((c)=>({...c,createdAt:c.createdAt instanceof Date?c.createdAt.toISOString():String(c.createdAt)}))}}})});import{z as L3}from"zod";var x4u;var oF0=g(()=>{Eu();x4u=ti({name:"MEMBER_TAGS_SET",description:"Replace all tags on a member with the given set. Pass empty array to clear.",annotations:{title:"Set Member Tags",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:L3.object({memberId:L3.string().describe("Member ID"),tagIds:L3.array(L3.string()).describe("Array of tag IDs to assign")}),outputSchema:L3.object({success:L3.boolean(),tags:L3.array(L3.object({id:L3.string(),organizationId:L3.string(),name:L3.string(),createdAt:L3.string().describe("ISO 8601 timestamp")}))}),handler:async(i,u)=>{ki(u),await u.access.check();let t=yi(u);if(!await u.storage.tags.verifyMemberOrg(i.memberId,t.id))throw Error(`Member not found in this organization: ${i.memberId}`);for(let c of i.tagIds){let E=await u.storage.tags.getTag(c);if(!E)throw Error(`Tag not found: ${c}`);if(E.organizationId!==t.id)throw Error(`Tag does not belong to this organization: ${c}`)}return await u.storage.tags.setMemberTags(i.memberId,i.tagIds),{success:!0,tags:(await u.storage.tags.getMemberTags(i.memberId)).map((c)=>({...c,createdAt:c.createdAt instanceof Date?c.createdAt.toISOString():String(c.createdAt)}))}}})});var sF0=g(()=>{rF0();mF0();eF0();aF0();oF0()});function $5(i,u=Date.now()){let t=i.status;if(t==="in_progress"){let f=new Date(i.updated_at).getTime(),l=i.last_progress_at?new Date(i.last_progress_at).getTime():Number.NaN,c=Math.max(Number.isFinite(f)?f:Number.NEGATIVE_INFINITY,Number.isFinite(l)?l:Number.NEGATIVE_INFINITY);if(!Number.isFinite(c)||u-c>1800000)t="expired"}return{id:i.id,organization_id:i.organization_id,title:i.title,description:i.description,created_at:i.created_at,updated_at:i.updated_at,created_by:i.created_by,updated_by:i.updated_by,hidden:i.hidden??!1,status:t,virtual_mcp_id:i.virtual_mcp_id||void 0,trigger_id:i.trigger_id,branch:i.branch,sandbox_provider_kind:i.sandbox_provider_kind,harness_id:i.harness_id,metadata:i.metadata&&Object.keys(i.metadata).length>0?i.metadata:void 0,run_config:i.run_config}}var pF0=g(()=>{jt()});import{z as K0}from"zod";var iU0,tXf,uU0,w5,tU0,fU0;var $Z=g(()=>{pF0();iU0=K0.object({id:K0.string().describe("Unique message ID"),thread_id:K0.string().describe("ID of the parent thread"),metadata:K0.unknown().optional().describe("Optional message metadata"),parts:K0.array(K0.record(K0.string(),K0.unknown())).describe("Message content parts (AI SDK UIMessagePart format)"),role:K0.enum(["user","assistant","system"]).describe("Message role"),created_at:K0.string().datetime().describe("Timestamp of creation"),updated_at:K0.string().datetime().describe("Timestamp of last update")}),tXf=K0.object({toolName:K0.string().describe("Fully qualified tool name"),appId:K0.string().describe("App ID that owns the tool"),args:K0.record(K0.string(),K0.unknown()).describe("Arguments used when expanding the tool"),expandedAt:K0.string().datetime().describe("When the tool was expanded")}),uU0=K0.object({expanded_tools:K0.array(tXf).optional()}).catchall(K0.unknown()),w5=K0.object({id:K0.string().describe("Unique thread ID"),organization_id:K0.string().describe("Organization this thread belongs to"),title:K0.string().describe("Thread title"),description:K0.string().nullable().describe("Thread description"),created_at:K0.string().datetime().describe("Timestamp of creation"),updated_at:K0.string().datetime().describe("Timestamp of last update"),hidden:K0.boolean().optional().describe("Whether the thread is hidden"),status:K0.enum([...CW,"expired"]).describe("Thread execution status. 'expired' is virtual -- computed at read time for stale in_progress threads"),created_by:K0.string().describe("User ID who created the thread"),updated_by:K0.string().optional().describe("User ID who last updated the thread"),virtual_mcp_id:K0.string().optional().describe("Virtual MCP (agent) this thread was initiated with"),trigger_id:K0.string().nullable().optional().describe("Automation trigger that created this thread; null/absent for human-initiated threads."),branch:K0.string().nullable().optional().describe("Git branch this thread is pinned to (GitHub-linked vms only)"),sandbox_provider_kind:K0.string().nullable().optional().describe("Pinned on first message; identifies which sandbox provider to dispatch to (e.g. 'agent-sandbox', 'user-desktop')."),harness_id:K0.string().nullable().optional().describe("Pinned on first message; selects which harness runs the thread (e.g. 'claude-code', 'codex', 'decopilot')."),metadata:uU0.optional().describe("Free-form per-thread UI state (e.g. expanded_tools)"),run_config:K0.record(K0.string(),K0.unknown()).nullable().optional().describe("Persisted run configuration (contains agent and model info)")}),tU0=K0.object({id:K0.string().optional().describe("Optional custom ID for the thread"),title:K0.string().optional().describe("Thread title"),description:K0.string().nullish().describe("Thread description"),virtual_mcp_id:K0.string().describe("Virtual MCP (agent) this thread is bound to"),branch:K0.string().min(1).optional().describe("Preferred branch. Used only when the vMCP has a githubRepo; ignored otherwise. When omitted, the server picks the most-recently-touched branch from the user's sandboxMap, falling back to a freshly generated name.")}),fU0=K0.object({title:K0.string().optional().describe("New thread title"),description:K0.string().nullish().describe("New thread description"),hidden:K0.boolean().optional().describe("Whether the thread is hidden"),status:K0.enum(["requires_action","failed","in_progress","completed"]).optional().describe("New thread status (user-set override). 'expired' is a computed virtual status and cannot be set directly."),metadata:uU0.optional().describe("Full replacement of the thread's metadata object"),branch:K0.string().nullish().describe("New git branch for this thread"),virtual_mcp_id:K0.string().optional().describe("Re-point the thread at a different agent. Only meaningful for an unsent thread (changing the recipient of a new chat); the UI restricts it accordingly.")})});function fXf(i){return(i??"").normalize("NFKD").replace(/[\u0300-\u036F]/g,"").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||"user"}function khi(i){let u=fXf(i),t=Date.now().toString(36).split("").reverse().join("");return`${u}-${t}`}import{z as lU0}from"zod";function EXf(i,u){let t=i?.[u];if(!t)return;return Object.entries(t).sort(([,l],[,c])=>{let E=Math.max(0,...Object.values(l).map((w)=>w.createdAt??0));return Math.max(0,...Object.values(c).map((w)=>w.createdAt??0))-E})[0]?.[0]}var lXf,cXf,k4u;var cU0=g(()=>{H4();Eu();$Z();l$();lXf=lU0.object({data:tU0.describe("Data for the new thread (id is auto-generated if not provided)")}),cXf=lU0.object({item:w5.describe("The created thread entity")});k4u=ti({name:"COLLECTION_THREADS_CREATE",description:"Create a new thread for organizing messages and conversations.",annotations:{title:"Create Thread",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:lXf,outputSchema:cXf,handler:async(i,u)=>{ki(u);let t=yi(u);await u.access.check();let f=Hu(u);if(!f)throw Error("User ID required to create thread");let{data:l}=i,c=l.id??Jf("thrd"),E=await u.storage.virtualMcps.findById(l.virtual_mcp_id,t.id);if(!E)throw Error(`Virtual MCP not found: ${l.virtual_mcp_id}`);let $=E.metadata,w=$?.githubRepo,d=null;if(w)d=l.branch??EXf($?.sandboxMap,f)??khi(u.auth.user?.name??u.auth.user?.email?.split("@")[0]);let h=await u.storage.threads.create({id:c,organization_id:t.id,title:l.title,description:l.description,virtual_mcp_id:l.virtual_mcp_id,branch:d,created_by:f});return mu.capture({distinctId:f,event:"chat_started",groups:{organization:t.id},properties:{organization_id:t.id,thread_id:c,has_title:!!i.data.title,created_via:"tool"}}),{item:$5(h)}}})});import{z as Zd}from"zod";var $Xf,wXf,wZ;var G4u=g(()=>{gd();Eu();$Z();$Xf=g_.extend({where:Zd.object({created_by:Zd.string().optional(),trigger_ids:Zd.array(Zd.string()).optional(),virtual_mcp_id:Zd.string().optional(),hidden:Zd.boolean().optional(),has_trigger:Zd.boolean().optional()}).optional(),startDate:Zd.string().datetime().optional().describe("Filter threads updated at or after this ISO timestamp"),endDate:Zd.string().datetime().optional().describe("Filter threads updated at or before this ISO timestamp"),search:Zd.string().optional().describe("Full-text search on thread title (case-insensitive)"),status:Zd.string().optional().describe("Filter by thread status (e.g. completed, failed, in_progress)"),userId:Zd.string().optional().describe("Filter by the user who created the thread"),agentId:Zd.string().optional().describe("Filter by agent (connection or virtual MCP) ID")}),wXf=N8(w5),wZ=ti({name:"COLLECTION_THREADS_LIST",description:"List threads with filtering, sorting, and pagination.",annotations:{title:"List Threads",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:$Xf,outputSchema:wXf,handler:async(i,u)=>{await u.access.check();let t=u.auth.user?.id;if(!t)throw Error("User ID required to list threads");yi(u);let f=i.offset??0,l=i.limit??100,c=i.where?.trigger_ids,E=i.where?.virtual_mcp_id,$=i.userId??(i.where?.created_by==="me"?t:i.where?.created_by),{threads:w,total:d}=c?.length?await u.storage.threads.listByTriggerIds(c,{limit:l,offset:f}):await u.storage.threads.list($,{limit:l,offset:f,virtualMcpId:E,startDate:i.startDate,endDate:i.endDate,search:i.search,status:i.status,agentId:i.agentId,includeArchived:i.where?.hidden,hasTrigger:i.where?.has_trigger}),h=f+l<d,_=Date.now();return{items:w.map((v)=>$5(v,_)),totalCount:d,hasMore:h}}})});var dXf,dZ;var S4u=g(()=>{gd();Eu();$Z();dXf=Ua(w5),dZ=ti({name:"COLLECTION_THREADS_GET",description:"Get a thread's details and metadata by ID.",annotations:{title:"Get Thread",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:Fa,outputSchema:dXf,handler:async(i,u)=>{ki(u),yi(u),await u.access.check();let t=await u.storage.threads.get(i.id);if(!t)return{item:null};return{item:$5(t)}}})});import{z as j4u}from"zod";var hXf,_Xf,K4u;var EU0=g(()=>{H4();Eu();$Z();hXf=j4u.object({id:j4u.string().describe("ID of the thread to update"),data:fU0.describe("Partial thread data to update")}),_Xf=j4u.object({item:w5.describe("The updated thread entity")}),K4u=ti({name:"COLLECTION_THREADS_UPDATE",description:"Update a thread's title, description, or visibility.",annotations:{title:"Update Thread",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:hXf,outputSchema:_Xf,handler:async(i,u)=>{ki(u);let t=yi(u);await u.access.check();let f=Hu(u);if(!f)throw Error("User ID required to update thread");let{id:l,data:c}=i,E=await u.storage.threads.get(l);if(!E)throw Error("Thread not found in organization");if(c.branch===null&&E.virtual_mcp_id){if((await u.storage.virtualMcps.findById(E.virtual_mcp_id,yi(u).id))?.metadata?.githubRepo)throw Error("Cannot set branch=null on a github-linked thread (vMCP has githubRepo)")}let $={title:c.title,description:c.description,hidden:c.hidden,updated_by:f};if(c.status)$.status=c.status;if(c.metadata!==void 0)$.metadata=c.metadata;if(c.branch!==void 0)$.branch=c.branch;if(c.virtual_mcp_id!==void 0)$.virtual_mcp_id=c.virtual_mcp_id;let w=await u.storage.threads.update(l,$);if(c.hidden!==void 0&&c.hidden!==E.hidden)mu.capture({distinctId:f,event:c.hidden?"chat_archived":"chat_unarchived",groups:{organization:t.id},properties:{organization_id:t.id,thread_id:l}});return{item:$5(w)}}})});var J4u;var $U0=g(()=>{gd();H4();Eu();$Z();J4u=ti({name:"COLLECTION_THREADS_DELETE",description:"Permanently delete a thread and all its messages.",annotations:{title:"Delete Thread",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:Pa,outputSchema:Aa(w5),handler:async(i,u)=>{ki(u);let t=yi(u);await u.access.check();let f=await u.storage.threads.get(i.id);if(!f)throw Error(`Thread not found: ${i.id}`);await u.storage.threads.delete(i.id);let l=Hu(u);if(l)mu.capture({distinctId:l,event:"chat_deleted",groups:{organization:t.id},properties:{organization_id:t.id,thread_id:i.id}});return{item:$5(f)}}})});import{z as vXf}from"zod";function wU0(i){if(!i)return null;if("field"in i&&i.field[0]==="thread_id"&&i.operator==="eq")return String(i.value);if("conditions"in i&&(i.operator==="and"||i.operator==="or"))for(let u of i.conditions){let t=wU0(u);if(t)return t}return null}var DXf,nXf,hZ;var X4u=g(()=>{gd();Eu();$Z();DXf=g_.extend({thread_id:vXf.string().optional().describe("ID of the thread to list messages for (required)")}),nXf=N8(iU0),hZ=ti({name:"COLLECTION_THREAD_MESSAGES_LIST",description:"List messages in a thread with pagination. Requires thread_id. Returns messages in chronological order.",annotations:{title:"List Thread Messages",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:DXf,outputSchema:nXf,handler:async(i,u)=>{yi(u),await u.access.check();let t=i.thread_id??wU0(i.where);if(!t)throw Error("thread_id is required (provide as top-level param or in where clause)");let f=i.offset??0,l=i.limit??100,c=i.orderBy?.[0]?.direction??"asc",E=await u.storage.threads.get(t);if(!E)return{items:[],totalCount:0,hasMore:!1};if(E.message_storage_version===2){let{messages:h,total:_}=await u.storage.threads.messageParts().loadWindow(t,{limit:l,offset:f});return{items:h.map((v)=>({id:v.id,thread_id:t,role:v.role,parts:v.parts,metadata:v.metadata??null,created_at:v.created_at,updated_at:v.created_at})),totalCount:_,hasMore:f+l<_}}let{messages:$,total:w}=await u.storage.threads.listMessages(t,{limit:l,offset:f,sort:c}),d=f+l<w;return{items:$,totalCount:w,hasMore:d}}})});function dU0(i){return i!==null}function Ghi(i,u){if(i===null)return!0;return i===u}import{z as gXf}from"zod";function k8(i){return i==="cluster"?"agent-sandbox":i}function L4u(i){return`${i.userId}:${i.projectRef}`}var OXf;var Shi=g(()=>{OXf=gXf.enum(["agent-sandbox","user-desktop"])});class jhi{map=new Map;async run(i,u){let t=this.map.get(i);if(t)return t;let f=u();this.map.set(i,f);try{return await f}finally{this.map.delete(i)}}}function Khi(i,u,t,f){if(!i)return f(null);if(!i.withLock)return f(i);return i.withLock(u,t,f)}import{createHash as NXf}from"crypto";function ZXf(i,u=16){return NXf("sha256").update(L4u(i)).digest("hex").slice(0,u)}function Pg(i,u){let t=ZXf(i),f=TXf(u);return f?`${f}-${t}`:`s-${t}`}function TXf(i){if(!i)return"";return(i.split("/").pop()??"").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,yXf).replace(/-+$/g,"")}var yXf=24;var hU0=g(()=>{Shi()});function Jhi(i,u){let t=i.replace(/\/+$/,"");if(t.includes("{handle}"))return`${t.replace("{handle}",u)}/`;try{let f=new URL(t);return f.hostname=`${u}.${f.hostname}`,`${f.toString()}/`}catch{return`${t}/${u}/`}}function W4u(i){let u=i.repo,t=u?{repository:{cloneUrl:u.cloneUrl,repoName:u.displayName??BXf(u.cloneUrl),...u.branch?{branch:u.branch}:{}},identity:{userName:u.userName,userEmail:u.userEmail}}:void 0,f=i.tenant,l=_h({userName:f?.userName,userEmail:f?.userEmail})??void 0,c=i.packageManager?{name:i.packageManager.name,...i.packageManager.path?{path:i.packageManager.path}:{}}:void 0,E=c?{packageManager:c,runtime:i.runtime,...i.port!==void 0?{port:i.port}:{}}:void 0;if(!t&&!E&&!l)return null;return{...t?{git:t}:{},...l?{operator:l}:{},...E?{application:E}:{}}}function BXf(i){try{let u=new URL(i);return u.pathname.replace(/^\/+/,"").replace(/\.git$/,"")||u.hostname}catch{return i}}var _U0=g(()=>{Sli()});function FXf(i){try{return new URL(i).username.length>0}catch{return!1}}function Y4u(i){let u=i.repo?.cloneUrl;if(!u||!FXf(u))return null;return{git:{repository:{cloneUrl:u}}}}var Xhi=g(()=>{hU0();_U0()});function G8(i){if("threadId"in i){if(!i.threadId)throw Error("composeSandboxRef: threadId required");return`thread:${i.threadId}`}if(!i.orgId||!i.virtualMcpId||!i.branch)throw Error("composeSandboxRef: orgId, virtualMcpId and branch are all required for agent refs");return`agent:${i.orgId}:${i.virtualMcpId}:${i.branch}`}function UXf(i){return(typeof i.timeout==="number"&&i.timeout>0?Math.min(i.timeout,120000):30000)+15000}function PXf(i,u){if(i.aborted)return u.catch(()=>{}),Promise.reject(i.reason??Error("aborted"));return new Promise((t,f)=>{let l=()=>{u.catch(()=>{}),f(i.reason??Error("aborted"))};i.addEventListener("abort",l,{once:!0}),u.then(t,f).finally(()=>{i.removeEventListener("abort",l)})})}async function AXf(i,u,t,f,l="POST",c){let E=c?.timeoutMs??UXf(f??{}),$=AbortSignal.timeout(E),w=c?.signal?AbortSignal.any([c.signal,$]):$,d,h;try{let v={method:l,headers:new Headers({"content-type":"application/json"}),body:null,signal:w};if(l!=="GET"&&f!==null)v.body=JSON.stringify(f);({res:d,rawText:h}=await PXf(w,(async()=>{let D=await i.proxyDaemonRequest(u,t,v);return{res:D,rawText:await D.text()}})()))}catch(v){if(c?.signal?.aborted)throw v;if($.aborted)throw Error(`Sandbox ${l} ${t} timed out after ${Math.round(E/1000)}s \u2014 the sandbox may be overloaded or its filesystem stalled. Retry, or use a smaller operation.`);throw new bz(v)}let _;try{_=JSON.parse(h)}catch{console.error("[sandbox-fs-hooks] Failed to parse JSON response runner=%s path=%s status=%d rawText=%s",i.kind,t,d.status,h.slice(0,2000));let v=d.status>=500?" (server error)":d.status===0?" (no response)":"";throw Error(`Daemon ${t} returned invalid JSON (HTTP ${d.status}${v}): ${h.slice(0,800)}`)}if(!d.ok){console.error("[sandbox-fs-hooks] Non-OK response runner=%s path=%s status=%d body=%s",i.kind,t,d.status,h.slice(0,2000));let v=_.error??`Daemon ${t} failed (${d.status})`;if(d.status===404&&v==="sandbox not found")throw new bz(Error(v));throw Error(v)}return _}function IXf(i){let u=[];for(let t of i.split(`
86684
- `)){if(!t)continue;let f=t.indexOf(":");if(f<0)continue;let l=t.indexOf(":",f+1);if(l<0)continue;let c=t.slice(0,f),E=Number.parseInt(t.slice(f+1,l),10);if(!Number.isFinite(E))continue;u.push({file:c,line:E,text:t.slice(l+1)})}return u}function Q4u(i,u){let{ensureHandle:t,invalidateHandle:f,canAutoRestart:l}=u,c=($)=>{let w=$ instanceof Error?$.message:String($);return l?`Sandbox is unreachable and auto-restart did not recover it: ${w}`:"The sandbox is not running. Ask the user to start it by clicking the server button (left side of the header bar)."},E=async($,w,d="POST",h)=>{let _=async(D)=>AXf(i,D,$,w,d,{signal:h,timeoutMs:u.opTimeoutMs}),v=await t();try{return await _(v)}catch(D){if(!(D instanceof bz)||!l){if(D instanceof bz)throw Error(c(D.cause??D));throw D}console.warn(`[sandbox-fs-hooks] daemon ${$} unreachable \u2014 reaping sandbox and retrying once`,D.cause??D);try{await f()}catch(O){console.warn("[sandbox-fs-hooks] invalidateHandle failed",O)}let n;try{n=await t()}catch(O){throw Error(`Failed to restart sandbox: ${O instanceof Error?O.message:String(O)}`)}try{return await _(n)}catch(O){if(O instanceof bz)throw Error(c(O.cause??O));throw O}}};return{onProxy:($,w,d,h)=>E($,w,d,h),onRead:async($)=>{return(await E("/_sandbox/read",{path:$})).content},onWrite:async($,w)=>{await E("/_sandbox/write",{path:$,content:w})},onEdit:async($,w)=>{for(let d of w)await E("/_sandbox/edit",{path:$,old_string:d.oldText,new_string:d.newText,replace_all:d.replaceAll===!0})},onBash:async($,w)=>{return await E("/_sandbox/bash",{command:$,...w?.cwd!==void 0?{cwd:w.cwd}:{},...w?.timeoutMs!==void 0?{timeout:w.timeoutMs}:{}})},onGlob:async($)=>{return(await E("/_sandbox/glob",{pattern:$})).files},onGrep:async($,w)=>{let d=await E("/_sandbox/grep",{pattern:$,output_mode:"content",...w?.path!==void 0?{path:w.path}:{},...w?.glob!==void 0?{glob:w.glob}:{},...w?.caseInsensitive?{ignore_case:!0}:{}});return IXf(d.results)}}}var bz;var vU0=g(()=>{bz=class bz extends Error{code="DAEMON_UNREACHABLE";constructor(i){super(i instanceof Error?i.message:"Daemon proxy failed");if(i instanceof Error)this.cause=i}}});function xXf(i){return i==="agent-sandbox"||i==="cluster"||i==="user-desktop"}function S8(){let i=process.env.STUDIO_SANDBOX_PROVIDER,u=i&&i.length>0?i:"user-desktop";if(!xXf(u))throw Error(`Unknown STUDIO_SANDBOX_PROVIDER="${i}" \u2014 expected "agent-sandbox", "cluster", or "user-desktop".`);return k8(u)}var Td=g(()=>{Shi();Shi();Xhi();vU0()});function Lhi(i){return k8(i.sandboxProviderKind)==="user-desktop"?{sandboxProviderKind:"user-desktop"}:{sandboxProviderKind:"agent-sandbox"}}var z4u=g(()=>{Td()});function H4u(i){let u=new AbortController,t=Cz.get(i);if(!t)t=new Set,Cz.set(i,t);return t.add(u),u}function R4u(i,u){let t=Cz.get(i);if(!t)return;if(t.delete(u),t.size===0)Cz.delete(i)}function Whi(i){let u=Cz.get(i);if(!u)return;for(let t of u)t.abort();Cz.delete(i)}var Cz;var Yhi=g(()=>{Cz=new Map});function X6(i){return`mesh-storage://${i}`}function uo(i){if(!i.startsWith("mesh-storage://"))return null;return i.slice(15)}function b4u(){return/mesh-storage:\/\/([^\s"'<>[\]]+)/g}var _Z="https://chrome.browserless.io",vZ=32000;import{z as d5}from"zod";function Qhi(i){if(i>DU0){let u=(i/1048576).toFixed(1),t=DU0/1048576;throw Error(`Reference image too large: ${u} MB (max ${t} MB). Use a smaller image.`)}}function JXf(i,u){let t;try{t=new URL(i)}catch{throw Error("Invalid image URL")}if(t.protocol!=="https:"&&!(u&&t.protocol==="http:"))throw Error("Image URL must use HTTPS");for(let f of KXf)if(f.test(t.hostname))throw Error("Image URL must not point to a private network address")}async function nU0(i,u){if(!u?.getBytes)throw Error("Object storage read is not available");if(u.head){let{size:f}=await u.head(i);Qhi(f)}let t=await u.getBytes(i);return Qhi(t.byteLength),t}async function XXf(i,u){let t=uo(i);if(t!==null)return nU0(t,u.objectStorage);let f=i.match(kXf);if(f)return nU0(f[1],u.objectStorage);if(i.startsWith("data:")){let E=i.match(/^data:[^;]+;base64,(.+)$/s);if(!E)throw Error("Invalid data: URI");let $=Buffer.from(E[1],"base64");return Qhi($.byteLength),$}JXf(i,u.allowHttpExternalUrls===!0);let l=await fetch(i,{signal:u.abortSignal});if(!l.ok)throw Error(`Failed to fetch image from ${i}: ${l.status}`);let c=new Uint8Array(await l.arrayBuffer());return Qhi(c.byteLength),c}async function C4u(i,u){let{provider:t,imageModelInfo:f,objectStorage:l}=u,c=t.aiSdk.imageModel(f.id),E=i.referenceImages&&i.referenceImages.length>0,$=E?await Promise.all(i.referenceImages.map((D)=>{let n=D.uri??D.url;if(!n)throw Error("Reference image missing uri");return XXf(n,u)})):[],w=E?{text:i.prompt,images:$}:i.prompt,d=await hhi({model:c,prompt:w,n:i.n??1,...i.aspectRatio?{aspectRatio:i.aspectRatio}:{},...u.abortSignal?{abortSignal:u.abortSignal}:{}});if(!l)throw Error("Object storage is unavailable; cannot persist the generated image.");let h=i.n??1,_=d.images.length>h?d.images.slice(-h):d.images;return{success:!0,images:await Promise.all(_.map(async(D)=>{let n=D.mediaType??"image/png",O=n.split("/")[1]??"png",N=`generated-images/${crypto.randomUUID()}.${O}`,y=Uint8Array.from(atob(D.base64),(Z)=>Z.charCodeAt(0));return await l.put(N,y,{contentType:n}),{uri:X6(N),mediaType:n}})),prompt:i.prompt,model:f.id,usage:{inputTokens:d.usage.inputTokens??0,outputTokens:d.usage.outputTokens??0},usedReferenceImages:E?i.referenceImages.length:0}}function zhi(i,u){return H0({description:"Generate an image from a text description, optionally using reference images. Use this when the user asks you to create, generate, draw, or design an image. If the user has attached images and wants to modify or use them as a reference, pass them as referenceImages. "+"The image is displayed automatically by the UI \u2014 do NOT include image URLs or markdown images in your response.",inputSchema:Di(DZ),execute:async(t,f)=>{let l=performance.now();try{return await C4u(t,u)}finally{i.write({type:"data-tool-metadata",id:f.toolCallId,data:{latencyMs:performance.now()-l}})}}})}function Hhi(i,u){let{objectStorage:t,toolOutputMap:f,pendingImages:l}=u;return H0({description:"Take a screenshot of a web page. Use this when you need to visually see a website, check its layout, verify a deployment, or inspect a page's appearance. "+"The screenshot is displayed automatically by the UI \u2014 do NOT include image URLs or markdown images in your response.",inputSchema:Di(jXf),execute:async(c,E)=>{let $=performance.now();try{let w=u.browserlessToken??process.env.BROWSERLESS_TOKEN;if(!w)return{success:!1,error:"BROWSERLESS_TOKEN is not configured."};let d=await fetch(`${_Z}/screenshot?token=${encodeURIComponent(w)}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({url:c.url,options:{fullPage:c.fullPage??!1,type:"jpeg",quality:SXf},viewport:GXf})});if(!d.ok){let O=await d.text().catch(()=>"Unknown error");return{success:!1,error:`Browserless screenshot failed (${d.status}): ${O}`,url:c.url}}let h=new Uint8Array(await d.arrayBuffer()),_="image/jpeg",v=`screenshots/${crypto.randomUUID()}.jpg`,D,n=null;if(t)try{await t.put(v,h,{contentType:_}),D=X6(v),n=await t.presignedGetUrl?.(v,600)??null}catch(O){console.error("[take-screenshot] Failed to upload, using data: URI fallback",O),D=`data:${_};base64,${Buffer.from(h).toString("base64")}`}else D=`data:${_};base64,${Buffer.from(h).toString("base64")}`;if(!n)n=D.startsWith("data:")?D:`data:${_};base64,${Buffer.from(h).toString("base64")}`;return l.push({url:n,mediaType:_,pageUrl:c.url}),f.set(E.toolCallId,`Screenshot of ${c.url} stored at ${D}`),{success:!0,image:{uri:D,mediaType:_},url:c.url}}finally{i.write({type:"data-tool-metadata",id:E.toolCallId,data:{latencyMs:performance.now()-$}})}},toModelOutput({output:c}){if(!c.success)return{type:"text",value:c.error??"Screenshot failed"};return{type:"text",value:`Screenshot of ${c.url} captured successfully. The image is attached below.`}}})}var kXf,DU0=20971520,GXf,SXf=80,DZ,jXf,KXf;var nZ=g(()=>{Pf();Pf();kXf=/\/api\/[^/]+\/files\/([^?#]+)/,GXf={width:1280,height:800},DZ=d5.object({prompt:d5.string().max(1e4).describe("Detailed description of the image to generate. Be specific about style, composition, colors, and subject matter."),referenceImages:d5.array(d5.object({uri:d5.string().describe("URI of the reference image (e.g. mesh-storage://generated-images/uuid.png).")})).optional().describe("Reference images to use as input for image-to-image generation. Pass the URI of any image from the conversation (uploaded files, previously generated images, etc.) when the user wants to modify, transform, or use an existing image as a starting point."),aspectRatio:d5.enum(["1:1","16:9","9:16","4:3","3:4","3:2","2:3"]).optional().describe("Aspect ratio for the generated image. Defaults to 1:1."),n:d5.number().int().min(1).max(4).optional().describe("Number of images to generate. Defaults to 1.")}),jXf=d5.object({url:d5.string().url().describe("The URL of the web page to screenshot."),fullPage:d5.boolean().optional().describe("When true, captures the full scrollable page instead of just the viewport. Defaults to false.")}),KXf=[/^127\./,/^10\./,/^172\.(1[6-9]|2\d|3[01])\./,/^192\.168\./,/^169\.254\./,/^0\./,/^\[::1\]$/,/^\[fd/,/^\[fe80:/,/^\[::ffff:/i,/^localhost$/i]});function Bd(i){if(i instanceof Error)return i.message;if(typeof i==="object"&&i!==null)try{return JSON.stringify(i)}catch{return"[unserializable object]"}return String(i)}function gU0(i){let t=i.split(/\.\s+/).filter((l)=>!/https?:\/\//i.test(l)&&!/openrouter/i.test(l));if(t.length===0)return i;let f=t.join(". ").trim();return f.endsWith(".")?f:`${f}.`}function OU0(i){if(i instanceof Error)return{message:i.message,statusCode:i.statusCode};if(typeof i==="object"&&i!==null){let u=i,t=typeof u.message==="string"?u.message:Bd(i),f=typeof u.statusCode==="number"?u.statusCode:typeof u.code==="number"?u.code:void 0;return{message:t,statusCode:f}}return{message:String(i)}}function Rhi(i){let{message:u,statusCode:t}=OU0(i),f=u.toLowerCase();return t===402||f.includes("credit")||f.includes("insufficient funds")||f.includes("insufficient balance")||f.includes("billing")||f.includes("quota exceeded")||f.includes("key limit")||f.includes("payment required")}function LXf(i){let u=i.toLowerCase();if(u.includes("circuit breaker is open"))return"A connected app is temporarily unreachable \u2014 it'll keep retrying. Try again in a moment.";if(!(u.includes("error posting to endpoint")||u.includes("streamable http error")))return null;if(/unauthorized|authentication required|forbidden|\b401\b|\b403\b/.test(u))return"A connected app needs to be re-authenticated before it can be used. Reconnect it, then try again.";return"Couldn't reach a connected app. Try again in a moment."}function NU0(i){let{message:u}=OU0(i),t=LXf(u);if(t)return t;if(Rhi(i))return`[CREDITS] ${gU0(u)}`;return gU0(u)}function yU0(i){let u=i.indexOf(M4u);if(u===-1)return{baseId:i,signature:null};return{baseId:i.slice(0,u),signature:i.slice(u+M4u.length)}}function WXf(i,u){return`${i}${M4u}${u}`}function YXf(i,u){return{...i,google:{...i?.google??{},thoughtSignature:u}}}function QXf(i){let u=i?.google?.thoughtSignature;return typeof u==="string"?u:null}function ZU0(i){let{baseId:u,signature:t}=yU0(i.toolCallId);if(t===null)return i;return{...i,toolCallId:u,providerMetadata:YXf(i.providerMetadata,t)}}function zXf(i){switch(i.type){case"tool-input-start":case"tool-input-delta":case"tool-input-end":{let{baseId:u,signature:t}=yU0(i.id);return t===null?i:{...i,id:u}}case"tool-call":return ZU0(i);default:return i}}function HXf(i){let u=new Map;for(let f of i.prompt){if(f.role!=="assistant")continue;for(let l of f.content){if(l.type!=="tool-call")continue;let c=QXf(l.providerOptions);if(c)u.set(l.toolCallId,c)}}if(u.size===0)return i;let t=i.prompt.map((f)=>{if(f.role!=="assistant"&&f.role!=="tool")return f;let l=f.content.map((c)=>{if(c.type!=="tool-call"&&c.type!=="tool-result")return c;let E=u.get(c.toolCallId);return E?{...c,toolCallId:WXf(c.toolCallId,E)}:c});return{...f,content:l}});return{...i,prompt:t}}function RXf(){return{specificationVersion:"v3",transformParams:async({params:i})=>HXf(i),wrapStream:async({doStream:i})=>{let{stream:u,...t}=await i();return{...t,stream:u.pipeThrough(new TransformStream({transform(f,l){l.enqueue(zXf(f))}}))}},wrapGenerate:async({doGenerate:i})=>{let u=await i(),t=u.content.map((f)=>f.type==="tool-call"?ZU0(f):f);return{...u,content:t}}}}function TU0(i){return cZ({model:i,middleware:RXf()})}var M4u="__thought__";var BU0=g(()=>{Pf()});function CXf(i,u){return cZ({model:i,middleware:{specificationVersion:"v3",wrapStream:async({doStream:f,params:l})=>{try{return await f()}catch(c){if(!Rhi(c))throw c;return u.doStream(l)}},wrapGenerate:async({doGenerate:f,params:l})=>{try{return await f()}catch(c){if(!Rhi(c))throw c;return u.doGenerate(l)}}}})}function bhi(i,u){let t={};if(u.capabilities?.reasoning!==!1)t.reasoning={enabled:!0,effort:"medium"};let f=i.info?.id==="openrouter"&&u.id!==q4u;if(f)t.models=[u.id,q4u];let l=($,w)=>w&&Object.keys(w).length>0?i.aiSdk.languageModel($,w):i.aiSdk.languageModel($),c=l(u.id,t),E=f?CXf(c,l(q4u)):c;return i.info?.id&&bXf.has(i.info.id)?TU0(E):E}var q4u="openrouter/free",bXf;var V4u=g(()=>{Pf();BU0();bXf=new Set(["openai-compatible","openrouter","deco","llmapi"])});function FU0(i,u){let t=i?.maxOutputTokens??32768,f=i?.contextWindow;if(!f)return t;let l=f-u*2;return Math.max(1024,Math.min(t,l))}var Chi=300000;import{z as r4u}from"zod";function Mhi(i){let{toolOutputMap:u}=i;return H0({description:"Filter a tool output that was too large to display inline. Returns all lines matching the given regular expression pattern (grep-like). You may call this tool multiple times with different patterns to extract different pieces of information.",inputExamples:[{input:{tool_call_id:"id_1",pattern:"error|warning"}},{input:{tool_call_id:"id_2",pattern:'"status":\\s*"failed"'}}],inputSchema:Di(r4u.object({tool_call_id:r4u.string(),pattern:r4u.string().min(1).describe("Regular expression pattern to filter tool output lines. Returns all matching lines.")})),execute:async({tool_call_id:t,pattern:f})=>{if(!u.has(t))return{result:`Tool output not found for tool call id: ${t}. Available ids: ${[...u.keys()].join(", ")||"(none)"}`,matchCount:0,totalLines:0};let l=u.get(t),c;try{c=new RegExp(f)}catch{return{result:`Invalid regex pattern: ${f}`,matchCount:0,totalLines:0}}let E=l.split(`
86684
+ `)){if(!t)continue;let f=t.indexOf(":");if(f<0)continue;let l=t.indexOf(":",f+1);if(l<0)continue;let c=t.slice(0,f),E=Number.parseInt(t.slice(f+1,l),10);if(!Number.isFinite(E))continue;u.push({file:c,line:E,text:t.slice(l+1)})}return u}function Q4u(i,u){let{ensureHandle:t,invalidateHandle:f,canAutoRestart:l}=u,c=($)=>{let w=$ instanceof Error?$.message:String($);return l?`Sandbox is unreachable and auto-restart did not recover it: ${w}`:"The sandbox is not running. Ask the user to start it by clicking the server button (left side of the header bar)."},E=async($,w,d="POST",h)=>{let _=async(D)=>AXf(i,D,$,w,d,{signal:h,timeoutMs:u.opTimeoutMs}),v=await t();try{return await _(v)}catch(D){if(!(D instanceof bz)||!l){if(D instanceof bz)throw Error(c(D.cause??D));throw D}console.warn(`[sandbox-fs-hooks] daemon ${$} unreachable \u2014 reaping sandbox and retrying once`,D.cause??D);try{await f()}catch(O){console.warn("[sandbox-fs-hooks] invalidateHandle failed",O)}let n;try{n=await t()}catch(O){throw Error(`Failed to restart sandbox: ${O instanceof Error?O.message:String(O)}`)}try{return await _(n)}catch(O){if(O instanceof bz)throw Error(c(O.cause??O));throw O}}};return{onProxy:($,w,d,h)=>E($,w,d,h),onRead:async($)=>{return(await E("/_sandbox/read",{path:$})).content},onWrite:async($,w)=>{await E("/_sandbox/write",{path:$,content:w})},onEdit:async($,w)=>{for(let d of w)await E("/_sandbox/edit",{path:$,old_string:d.oldText,new_string:d.newText,replace_all:d.replaceAll===!0})},onBash:async($,w)=>{return await E("/_sandbox/bash",{command:$,...w?.cwd!==void 0?{cwd:w.cwd}:{},...w?.timeoutMs!==void 0?{timeout:w.timeoutMs}:{}})},onGlob:async($)=>{return(await E("/_sandbox/glob",{pattern:$})).files},onGrep:async($,w)=>{let d=await E("/_sandbox/grep",{pattern:$,output_mode:"content",...w?.path!==void 0?{path:w.path}:{},...w?.glob!==void 0?{glob:w.glob}:{},...w?.caseInsensitive?{ignore_case:!0}:{}});return IXf(d.results)}}}var bz;var vU0=g(()=>{bz=class bz extends Error{code="DAEMON_UNREACHABLE";constructor(i){super(i instanceof Error?i.message:"Daemon proxy failed");if(i instanceof Error)this.cause=i}}});function xXf(i){return i==="agent-sandbox"||i==="cluster"||i==="user-desktop"}function S8(){let i=process.env.STUDIO_SANDBOX_PROVIDER,u=i&&i.length>0?i:"user-desktop";if(!xXf(u))throw Error(`Unknown STUDIO_SANDBOX_PROVIDER="${i}" \u2014 expected "agent-sandbox", "cluster", or "user-desktop".`);return k8(u)}var Td=g(()=>{Shi();Shi();Xhi();vU0()});function Lhi(i){return k8(i.sandboxProviderKind)==="user-desktop"?{sandboxProviderKind:"user-desktop"}:{sandboxProviderKind:"agent-sandbox"}}var z4u=g(()=>{Td()});function H4u(i){let u=new AbortController,t=Cz.get(i);if(!t)t=new Set,Cz.set(i,t);return t.add(u),u}function R4u(i,u){let t=Cz.get(i);if(!t)return;if(t.delete(u),t.size===0)Cz.delete(i)}function Whi(i){let u=Cz.get(i);if(!u)return;for(let t of u)t.abort();Cz.delete(i)}var Cz;var Yhi=g(()=>{Cz=new Map});function X6(i){return`studio-storage://${i}`}function uo(i){if(i.startsWith("studio-storage://"))return i.slice(17);if(i.startsWith("mesh-storage://"))return i.slice(15);return null}function b4u(){return/(?:studio|mesh)-storage:\/\/([^\s"'<>[\]]+)/g}var _Z="https://chrome.browserless.io",vZ=32000;import{z as d5}from"zod";function Qhi(i){if(i>DU0){let u=(i/1048576).toFixed(1),t=DU0/1048576;throw Error(`Reference image too large: ${u} MB (max ${t} MB). Use a smaller image.`)}}function JXf(i,u){let t;try{t=new URL(i)}catch{throw Error("Invalid image URL")}if(t.protocol!=="https:"&&!(u&&t.protocol==="http:"))throw Error("Image URL must use HTTPS");for(let f of KXf)if(f.test(t.hostname))throw Error("Image URL must not point to a private network address")}async function nU0(i,u){if(!u?.getBytes)throw Error("Object storage read is not available");if(u.head){let{size:f}=await u.head(i);Qhi(f)}let t=await u.getBytes(i);return Qhi(t.byteLength),t}async function XXf(i,u){let t=uo(i);if(t!==null)return nU0(t,u.objectStorage);let f=i.match(kXf);if(f)return nU0(f[1],u.objectStorage);if(i.startsWith("data:")){let E=i.match(/^data:[^;]+;base64,(.+)$/s);if(!E)throw Error("Invalid data: URI");let $=Buffer.from(E[1],"base64");return Qhi($.byteLength),$}JXf(i,u.allowHttpExternalUrls===!0);let l=await fetch(i,{signal:u.abortSignal});if(!l.ok)throw Error(`Failed to fetch image from ${i}: ${l.status}`);let c=new Uint8Array(await l.arrayBuffer());return Qhi(c.byteLength),c}async function C4u(i,u){let{provider:t,imageModelInfo:f,objectStorage:l}=u,c=t.aiSdk.imageModel(f.id),E=i.referenceImages&&i.referenceImages.length>0,$=E?await Promise.all(i.referenceImages.map((D)=>{let n=D.uri??D.url;if(!n)throw Error("Reference image missing uri");return XXf(n,u)})):[],w=E?{text:i.prompt,images:$}:i.prompt,d=await hhi({model:c,prompt:w,n:i.n??1,...i.aspectRatio?{aspectRatio:i.aspectRatio}:{},...u.abortSignal?{abortSignal:u.abortSignal}:{}});if(!l)throw Error("Object storage is unavailable; cannot persist the generated image.");let h=i.n??1,_=d.images.length>h?d.images.slice(-h):d.images;return{success:!0,images:await Promise.all(_.map(async(D)=>{let n=D.mediaType??"image/png",O=n.split("/")[1]??"png",N=`generated-images/${crypto.randomUUID()}.${O}`,y=Uint8Array.from(atob(D.base64),(Z)=>Z.charCodeAt(0));return await l.put(N,y,{contentType:n}),{uri:X6(N),mediaType:n}})),prompt:i.prompt,model:f.id,usage:{inputTokens:d.usage.inputTokens??0,outputTokens:d.usage.outputTokens??0},usedReferenceImages:E?i.referenceImages.length:0}}function zhi(i,u){return H0({description:"Generate an image from a text description, optionally using reference images. Use this when the user asks you to create, generate, draw, or design an image. If the user has attached images and wants to modify or use them as a reference, pass them as referenceImages. "+"The image is displayed automatically by the UI \u2014 do NOT include image URLs or markdown images in your response.",inputSchema:Di(DZ),execute:async(t,f)=>{let l=performance.now();try{return await C4u(t,u)}finally{i.write({type:"data-tool-metadata",id:f.toolCallId,data:{latencyMs:performance.now()-l}})}}})}function Hhi(i,u){let{objectStorage:t,toolOutputMap:f,pendingImages:l}=u;return H0({description:"Take a screenshot of a web page. Use this when you need to visually see a website, check its layout, verify a deployment, or inspect a page's appearance. "+"The screenshot is displayed automatically by the UI \u2014 do NOT include image URLs or markdown images in your response.",inputSchema:Di(jXf),execute:async(c,E)=>{let $=performance.now();try{let w=u.browserlessToken??process.env.BROWSERLESS_TOKEN;if(!w)return{success:!1,error:"BROWSERLESS_TOKEN is not configured."};let d=await fetch(`${_Z}/screenshot?token=${encodeURIComponent(w)}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({url:c.url,options:{fullPage:c.fullPage??!1,type:"jpeg",quality:SXf},viewport:GXf})});if(!d.ok){let O=await d.text().catch(()=>"Unknown error");return{success:!1,error:`Browserless screenshot failed (${d.status}): ${O}`,url:c.url}}let h=new Uint8Array(await d.arrayBuffer()),_="image/jpeg",v=`screenshots/${crypto.randomUUID()}.jpg`,D,n=null;if(t)try{await t.put(v,h,{contentType:_}),D=X6(v),n=await t.presignedGetUrl?.(v,600)??null}catch(O){console.error("[take-screenshot] Failed to upload, using data: URI fallback",O),D=`data:${_};base64,${Buffer.from(h).toString("base64")}`}else D=`data:${_};base64,${Buffer.from(h).toString("base64")}`;if(!n)n=D.startsWith("data:")?D:`data:${_};base64,${Buffer.from(h).toString("base64")}`;return l.push({url:n,mediaType:_,pageUrl:c.url}),f.set(E.toolCallId,`Screenshot of ${c.url} stored at ${D}`),{success:!0,image:{uri:D,mediaType:_},url:c.url}}finally{i.write({type:"data-tool-metadata",id:E.toolCallId,data:{latencyMs:performance.now()-$}})}},toModelOutput({output:c}){if(!c.success)return{type:"text",value:c.error??"Screenshot failed"};return{type:"text",value:`Screenshot of ${c.url} captured successfully. The image is attached below.`}}})}var kXf,DU0=20971520,GXf,SXf=80,DZ,jXf,KXf;var nZ=g(()=>{Pf();Pf();kXf=/\/api\/[^/]+\/files\/([^?#]+)/,GXf={width:1280,height:800},DZ=d5.object({prompt:d5.string().max(1e4).describe("Detailed description of the image to generate. Be specific about style, composition, colors, and subject matter."),referenceImages:d5.array(d5.object({uri:d5.string().describe("URI of the reference image (e.g. studio-storage://generated-images/uuid.png).")})).optional().describe("Reference images to use as input for image-to-image generation. Pass the URI of any image from the conversation (uploaded files, previously generated images, etc.) when the user wants to modify, transform, or use an existing image as a starting point."),aspectRatio:d5.enum(["1:1","16:9","9:16","4:3","3:4","3:2","2:3"]).optional().describe("Aspect ratio for the generated image. Defaults to 1:1."),n:d5.number().int().min(1).max(4).optional().describe("Number of images to generate. Defaults to 1.")}),jXf=d5.object({url:d5.string().url().describe("The URL of the web page to screenshot."),fullPage:d5.boolean().optional().describe("When true, captures the full scrollable page instead of just the viewport. Defaults to false.")}),KXf=[/^127\./,/^10\./,/^172\.(1[6-9]|2\d|3[01])\./,/^192\.168\./,/^169\.254\./,/^0\./,/^\[::1\]$/,/^\[fd/,/^\[fe80:/,/^\[::ffff:/i,/^localhost$/i]});function Bd(i){if(i instanceof Error)return i.message;if(typeof i==="object"&&i!==null)try{return JSON.stringify(i)}catch{return"[unserializable object]"}return String(i)}function gU0(i){let t=i.split(/\.\s+/).filter((l)=>!/https?:\/\//i.test(l)&&!/openrouter/i.test(l));if(t.length===0)return i;let f=t.join(". ").trim();return f.endsWith(".")?f:`${f}.`}function OU0(i){if(i instanceof Error)return{message:i.message,statusCode:i.statusCode};if(typeof i==="object"&&i!==null){let u=i,t=typeof u.message==="string"?u.message:Bd(i),f=typeof u.statusCode==="number"?u.statusCode:typeof u.code==="number"?u.code:void 0;return{message:t,statusCode:f}}return{message:String(i)}}function Rhi(i){let{message:u,statusCode:t}=OU0(i),f=u.toLowerCase();return t===402||f.includes("credit")||f.includes("insufficient funds")||f.includes("insufficient balance")||f.includes("billing")||f.includes("quota exceeded")||f.includes("key limit")||f.includes("payment required")}function LXf(i){let u=i.toLowerCase();if(u.includes("circuit breaker is open"))return"A connected app is temporarily unreachable \u2014 it'll keep retrying. Try again in a moment.";if(!(u.includes("error posting to endpoint")||u.includes("streamable http error")))return null;if(/unauthorized|authentication required|forbidden|\b401\b|\b403\b/.test(u))return"A connected app needs to be re-authenticated before it can be used. Reconnect it, then try again.";return"Couldn't reach a connected app. Try again in a moment."}function NU0(i){let{message:u}=OU0(i),t=LXf(u);if(t)return t;if(Rhi(i))return`[CREDITS] ${gU0(u)}`;return gU0(u)}function yU0(i){let u=i.indexOf(M4u);if(u===-1)return{baseId:i,signature:null};return{baseId:i.slice(0,u),signature:i.slice(u+M4u.length)}}function WXf(i,u){return`${i}${M4u}${u}`}function YXf(i,u){return{...i,google:{...i?.google??{},thoughtSignature:u}}}function QXf(i){let u=i?.google?.thoughtSignature;return typeof u==="string"?u:null}function ZU0(i){let{baseId:u,signature:t}=yU0(i.toolCallId);if(t===null)return i;return{...i,toolCallId:u,providerMetadata:YXf(i.providerMetadata,t)}}function zXf(i){switch(i.type){case"tool-input-start":case"tool-input-delta":case"tool-input-end":{let{baseId:u,signature:t}=yU0(i.id);return t===null?i:{...i,id:u}}case"tool-call":return ZU0(i);default:return i}}function HXf(i){let u=new Map;for(let f of i.prompt){if(f.role!=="assistant")continue;for(let l of f.content){if(l.type!=="tool-call")continue;let c=QXf(l.providerOptions);if(c)u.set(l.toolCallId,c)}}if(u.size===0)return i;let t=i.prompt.map((f)=>{if(f.role!=="assistant"&&f.role!=="tool")return f;let l=f.content.map((c)=>{if(c.type!=="tool-call"&&c.type!=="tool-result")return c;let E=u.get(c.toolCallId);return E?{...c,toolCallId:WXf(c.toolCallId,E)}:c});return{...f,content:l}});return{...i,prompt:t}}function RXf(){return{specificationVersion:"v3",transformParams:async({params:i})=>HXf(i),wrapStream:async({doStream:i})=>{let{stream:u,...t}=await i();return{...t,stream:u.pipeThrough(new TransformStream({transform(f,l){l.enqueue(zXf(f))}}))}},wrapGenerate:async({doGenerate:i})=>{let u=await i(),t=u.content.map((f)=>f.type==="tool-call"?ZU0(f):f);return{...u,content:t}}}}function TU0(i){return cZ({model:i,middleware:RXf()})}var M4u="__thought__";var BU0=g(()=>{Pf()});function CXf(i,u){return cZ({model:i,middleware:{specificationVersion:"v3",wrapStream:async({doStream:f,params:l})=>{try{return await f()}catch(c){if(!Rhi(c))throw c;return u.doStream(l)}},wrapGenerate:async({doGenerate:f,params:l})=>{try{return await f()}catch(c){if(!Rhi(c))throw c;return u.doGenerate(l)}}}})}function bhi(i,u){let t={};if(u.capabilities?.reasoning!==!1)t.reasoning={enabled:!0,effort:"medium"};let f=i.info?.id==="openrouter"&&u.id!==q4u;if(f)t.models=[u.id,q4u];let l=($,w)=>w&&Object.keys(w).length>0?i.aiSdk.languageModel($,w):i.aiSdk.languageModel($),c=l(u.id,t),E=f?CXf(c,l(q4u)):c;return i.info?.id&&bXf.has(i.info.id)?TU0(E):E}var q4u="openrouter/free",bXf;var V4u=g(()=>{Pf();BU0();bXf=new Set(["openai-compatible","openrouter","deco","llmapi"])});function FU0(i,u){let t=i?.maxOutputTokens??32768,f=i?.contextWindow;if(!f)return t;let l=f-u*2;return Math.max(1024,Math.min(t,l))}var Chi=300000;import{z as r4u}from"zod";function Mhi(i){let{toolOutputMap:u}=i;return H0({description:"Filter a tool output that was too large to display inline. Returns all lines matching the given regular expression pattern (grep-like). You may call this tool multiple times with different patterns to extract different pieces of information.",inputExamples:[{input:{tool_call_id:"id_1",pattern:"error|warning"}},{input:{tool_call_id:"id_2",pattern:'"status":\\s*"failed"'}}],inputSchema:Di(r4u.object({tool_call_id:r4u.string(),pattern:r4u.string().min(1).describe("Regular expression pattern to filter tool output lines. Returns all matching lines.")})),execute:async({tool_call_id:t,pattern:f})=>{if(!u.has(t))return{result:`Tool output not found for tool call id: ${t}. Available ids: ${[...u.keys()].join(", ")||"(none)"}`,matchCount:0,totalLines:0};let l=u.get(t),c;try{c=new RegExp(f)}catch{return{result:`Invalid regex pattern: ${f}`,matchCount:0,totalLines:0}}let E=l.split(`
86685
86685
  `),$=E.filter((h)=>c.test(h)),w=$.join(`
86686
86686
  `),d=kE(w);if(d>Ag){let h=D$(w);return{result:`Output is still too long (${d} tokens), use a more specific pattern to reduce output.
86687
86687
 
@@ -86858,7 +86858,7 @@ Clarifications: if the request is ambiguous, you may call \`user_ask\` AT MOST O
86858
86858
 
86859
86859
  Plan quality bar: include concrete details, ordered steps, risks, trade-offs, and alternatives you considered. Write for a reader with no prior context.
86860
86860
  </plan-mode>`}function Ocu(i,u){let t=i==="plan",f=i==="web-search"?"web_search":i==="deep-research"?"deep_research":i==="gen-image"?"generate_image":null,l=i==="plan"?$qf(u.isCliAgent):null;return{isPlanMode:t,forcedFirstStepTool:f,planPrompt:l,webSearchInstructionPrompt:i==="web-search"||i==="deep-research"?wqf:null}}var Eqf,wqf;var Ncu=g(()=>{Eqf=["default","plan","web-search","deep-research","gen-image"];wqf=`<web-search>
86861
- The web_search and deep_research tools stream their result directly to the user in `+"real time. After one completes, do NOT repeat, summarize, or restate the content \u2014 "+"the user can already see it. Simply confirm it succeeded and highlight key takeaways in one or two sentences. Only elaborate if the user explicitly asks.\n\nPick the right tool for the task: use `web_search` for quick, up-to-date lookups and fact-checking where a fast answer suffices; use `deep_research` for in-depth, multi-source reports where thoroughness matters more than latency.\n\n"+"For large results, the tool result contains a `uri` (mesh-storage:\u2026) instead of "+"inline content. To re-access the full research in a later turn, call `read_resource` with that URI.\n</web-search>"});async function Oj0(i){let u=[],t=[],f=(c,E)=>{if(!E?.trim())return;u.push(E),t.push(c)};if(f("base",T50()),i.kind==="agent"&&i.planMode){let{resolveModeConfig:c}=await Promise.resolve().then(() => (Ncu(),Dj0)),E=c("plan",{isCliAgent:!1});f("planMode",E.planPrompt)}let l=i.codingWorkspace;if(l&&i.user?.id&&l.branch)l={...l,isDecoSite:await oS0(i.ctx,{virtualMcpId:i.virtualMcp.id,branch:l.branch,userId:i.user.id})};if(f("codingWorkspace",Mz(l)),f("orgFs",F50(i.user?.id)),i.kind==="agent"){let E=i.user?.id,[$,w]=await Promise.all([gj0(i.ctx,"organization","MEMORY.md","org/home",E),E?gj0(i.ctx,"user",`users/${E}/MEMORY.md`,"org/home",E):Promise.resolve(null)]);f("orgMemory",$),f("userMemory",w)}if(i.kind==="agent"){if(i.isDecopilot)f("identity",B50())}else f("identity",dqf);if(f("prompts",await Ej0(i.ctx,i.organization,i.passthroughClient)),i.kind==="agent"&&(i.userContext?.agents||i.connectionsData?.tools.length)){let c=i.connectionsData?.tools.map((E)=>E.connectionId);f("agents",hj0(i.userContext?.agents??[],i.virtualMcp.id,i.virtualMcp.delegationTargetIds,c))}if(f("connections",await $j0(i.ctx,i.organization,i.connectionsData)),f("todoWrite",cpi()),f("agentInstructions",i.agentInstructions),i.kind==="agent"&&i.user)f("userContext",vj0({user:i.user,currentThreadId:i.currentThreadId,userContext:i.userContext??{}}));return ij0(u,i.date??new Date)}function hqf(i){return i==="organization"?`# Organization memory
86861
+ The web_search and deep_research tools stream their result directly to the user in `+"real time. After one completes, do NOT repeat, summarize, or restate the content \u2014 "+"the user can already see it. Simply confirm it succeeded and highlight key takeaways in one or two sentences. Only elaborate if the user explicitly asks.\n\nPick the right tool for the task: use `web_search` for quick, up-to-date lookups and fact-checking where a fast answer suffices; use `deep_research` for in-depth, multi-source reports where thoroughness matters more than latency.\n\n"+"For large results, the tool result contains a `uri` (studio-storage:\u2026) instead of "+"inline content. To re-access the full research in a later turn, call `read_resource` with that URI.\n</web-search>"});async function Oj0(i){let u=[],t=[],f=(c,E)=>{if(!E?.trim())return;u.push(E),t.push(c)};if(f("base",T50()),i.kind==="agent"&&i.planMode){let{resolveModeConfig:c}=await Promise.resolve().then(() => (Ncu(),Dj0)),E=c("plan",{isCliAgent:!1});f("planMode",E.planPrompt)}let l=i.codingWorkspace;if(l&&i.user?.id&&l.branch)l={...l,isDecoSite:await oS0(i.ctx,{virtualMcpId:i.virtualMcp.id,branch:l.branch,userId:i.user.id})};if(f("codingWorkspace",Mz(l)),f("orgFs",F50(i.user?.id)),i.kind==="agent"){let E=i.user?.id,[$,w]=await Promise.all([gj0(i.ctx,"organization","MEMORY.md","org/home",E),E?gj0(i.ctx,"user",`users/${E}/MEMORY.md`,"org/home",E):Promise.resolve(null)]);f("orgMemory",$),f("userMemory",w)}if(i.kind==="agent"){if(i.isDecopilot)f("identity",B50())}else f("identity",dqf);if(f("prompts",await Ej0(i.ctx,i.organization,i.passthroughClient)),i.kind==="agent"&&(i.userContext?.agents||i.connectionsData?.tools.length)){let c=i.connectionsData?.tools.map((E)=>E.connectionId);f("agents",hj0(i.userContext?.agents??[],i.virtualMcp.id,i.virtualMcp.delegationTargetIds,c))}if(f("connections",await $j0(i.ctx,i.organization,i.connectionsData)),f("todoWrite",cpi()),f("agentInstructions",i.agentInstructions),i.kind==="agent"&&i.user)f("userContext",vj0({user:i.user,currentThreadId:i.currentThreadId,userContext:i.userContext??{}}));return ij0(u,i.date??new Date)}function hqf(i){return i==="organization"?`# Organization memory
86862
86862
 
86863
86863
  Durable facts shared with everyone in this organization. Keep this a concise, curated index \u2014 not a log.
86864
86864
  `:`# User memory
@@ -86997,10 +86997,10 @@ Guidelines:
86997
86997
  }
86998
86998
  return { consoleLogs, errors, evaluateResult };
86999
86999
  }
87000
- `,n=await fetch(`${_Z}/function?token=${encodeURIComponent(d)}`,{method:"POST",headers:{"Content-Type":"application/javascript"},body:D});if(!n.ok){let Z=await n.text().catch(()=>"Unknown error");return{success:!1,error:`Browserless function call failed (${n.status}): ${Z}`,url:h.url}}let O=await n.json().catch(async()=>{return{error:`Browserless returned non-JSON response: ${(await n.text().catch(()=>"")).slice(0,200)}`}}),N=JSON.stringify(O,null,2);t.set($.toolCallId,N);let y=kE(N);if(!("error"in O)&&y>Ag&&f){let Z=`inspect-pages/${crypto.randomUUID()}.json`;return await f.put(Z,new TextEncoder().encode(N),{contentType:"application/json"}),{success:!0,uri:X6(Z),preview:D$(N),url:h.url,tokenCount:y,consoleLogCount:O.consoleLogs?.length??0,errorCount:O.errors?.length??0,hasEvaluateResult:O.evaluateResult!=null}}return{success:!("error"in O),...O,url:h.url,tokenCount:y}}finally{i.write({type:"data-tool-metadata",id:$.toolCallId,data:{latencyMs:performance.now()-w}})}}})}function oqf(){return H0({description:"Search the web and synthesize a comprehensive research report. This tool is only available in cluster Decopilot.",inputSchema:Di(eqf),execute:async(i)=>{throw Error("web_search is only available in cluster Decopilot.")}})}function sqf(){return H0({description:"Record what the user is durably working toward (their goals/interests). This tool is only available in cluster Decopilot.",inputSchema:Di(aqf),execute:async(i)=>{throw Error("update_interests is only available in cluster Decopilot.")}})}function hK0(i){let{writer:u,toolOutputMap:t,objectStorage:f,pendingImages:l,imageTool:c,imageBackgroundDispatcher:E,includeUnavailableClusterOnlyTools:$}=i,w={user_ask:JTi,todo_write:XTi,propose_plan:WTi,read_tool_output:Mhi({toolOutputMap:t})};if($)w.web_search=oqf(),w.update_interests=sqf();if(c)w.generate_image=Wo("generate_image",DZ,zhi(u,{...c,objectStorage:f}),E);if(process.env.BROWSERLESS_TOKEN){if(w.scrape_url=dK0(u,{toolOutputMap:t,objectStorage:f,kind:"scrape"}),w.inspect_page=dK0(u,{toolOutputMap:t,objectStorage:f,kind:"inspect"}),l)w.take_screenshot=Hhi(u,{objectStorage:f,toolOutputMap:t,pendingImages:l})}return w}var eqf,aqf;var _K0=g(()=>{Pf();Pcu();Acu();Icu();j8();nZ();xcu();eqf=xd.object({query:xd.string().max(1e4).describe("The research query. Be specific about what information you need.")}),aqf=xd.object({interests:xd.array(xd.object({title:xd.string().max(120).describe("Short noun phrase, e.g. 'Learning Rust'"),summary:xd.string().max(500).describe("One or two sentences of context, including any progress")})).max(10)})});function vK0(i){return{search_threads:H0({description:wZ.description,inputSchema:Di(wZ.inputSchema),execute:(u)=>wZ.execute(u,i)}),get_thread:H0({description:dZ.description,inputSchema:Di(dZ.inputSchema),execute:(u)=>dZ.execute(u,i)}),list_thread_messages:H0({description:hZ.description,inputSchema:Di(hZ.inputSchema),execute:(u)=>hZ.execute(u,i)})}}var DK0=g(()=>{Pf();G4u();S4u();X4u()});async function iVf(i,u,t){let{provider:f,imageProvider:l,webSearchProvider:c,deepResearchProvider:E,organization:$,models:w,toolApprovalLevel:d="auto",isPlanMode:h=!1,toolOutputMap:_,pendingImages:v,passthroughClient:D,vmContext:n,htmlArtifactBuffer:O,taskId:N,agentId:y,onChildUsage:Z,backgroundDispatcher:T}=u,B={isPlanMode:h},F=t.auth?.user?.id,A=hK0({writer:i,toolOutputMap:_,passthroughClient:D,toolApprovalLevel:d,isPlanMode:h,objectStorage:t.objectStorage});if(F)A.update_interests=Vj0({write:async(k)=>{await t.storage.interests.setForAgent(k.orgId,k.agentId,k.userId,{interests:k.interests})},orgId:$.id,agentId:y,userId:F});Object.assign(A,vK0(t));let G=kTi(d,!1,B)!==!1,I;if(n){let k=await Xo(t,{virtualMcpId:n.virtualMcpId,branch:n.branch,userId:n.userId,syncTools:n.syncTools});I=Yj0({fs:k,htmlArtifactBuffer:O,toolOutputMap:_,needsApproval:G,pendingImages:v,ctx:t,threadId:n.threadId,virtualMcpId:n.virtualMcpId}),Object.assign(A,I);let q=await bj0({ctx:t,orgId:$.id,virtualMcpId:n.virtualMcpId,userId:n.userId,threadId:n.threadId,writer:i});if(q)A.load_repo=q}if(f)A.subtask=Wo("subtask",Fcu,Ucu(i,{provider:f,organization:$,models:w,self:{id:y},currentThreadId:N,needsApproval:kTi(d,!1,B)!==!1,onChildUsage:Z,vmTools:I,parentBuiltInParams:u},t),T);if(l&&w.image&&t.objectStorage)A.generate_image=Wo("generate_image",DZ,mj0(i,{provider:l,imageModelInfo:w.image,objectStorage:t.objectStorage,allowHttpExternalUrls:yu().localMode}),T);if(c&&w.webSearch){let k=Gcu({provider:c,modelInfo:w.webSearch,ctx:t,mode:"quick",toolName:"web_search"});A.web_search=kcu(i,{researchJob:k,toolOutputMap:_,taskId:N})}if(E&&w.deepResearch){let k=Gcu({provider:E,modelInfo:w.deepResearch,ctx:t,mode:"deep",toolName:"deep_research"});A.deep_research=kcu(i,{researchJob:k,toolOutputMap:_,taskId:N,description:"Run in-depth, multi-source research and synthesize a comprehensive, cited report. Use this when the user needs thorough analysis, a literature/market review, or a question that warrants exploring many "+"sources \u2014 accuracy and depth matter more than latency. For quick "+"lookups or fact-checks, use `web_search` instead."})}if(process.env.BROWSERLESS_TOKEN){let k={baseUrl:_Z,token:process.env.BROWSERLESS_TOKEN};if(A.take_screenshot=tK0(i,{objectStorage:t.objectStorage,toolOutputMap:_,pendingImages:v}),t.objectStorage)A.scrape_url=cK0(i,{browserless:k,objectStorage:t.objectStorage,toolOutputMap:_}),A.inspect_page=$K0(i,{browserless:k,objectStorage:t.objectStorage,toolOutputMap:_})}return A}function uVf(i,u,t){let f=u.organization.id,l=t.auth?.user?.id,c={};for(let[E,$]of Object.entries(i)){let w=$,d=w.execute;if(typeof d!=="function"){c[E]=$;continue}let h=pqf[E],_=d.constructor?.name==="AsyncGeneratorFunction",v=(n,O)=>{if(!f||!l)return;mu.capture({distinctId:l,event:"tool_called",groups:{organization:f},properties:{organization_id:f,tool_source:"builtin",tool_name:E,tool_safe_name:E,read_only:h?.readOnly??null,destructive:h?.destructive??null,idempotent:null,open_world:null,latency_ms:Math.round(n),is_error:O}})},D=_?async function*(n,O){let N=performance.now(),y=!1;try{yield*d.call(w,n,O)}catch(Z){throw y=!0,Z}finally{v(performance.now()-N,y)}}:async(n,O)=>{let N=performance.now(),y=!1;try{return await d.call(w,n,O)}catch(Z){throw y=!0,Z}finally{v(performance.now()-N,y)}};c[E]={...w,execute:D}}return c}async function QTi(i,u,t){let f=await iVf(i,u,t),l=uVf(f,u,t);if(!u.isPlanMode){let{propose_plan:c,...E}=l;return E}return l}function nK0(i){let{ctx:u,writer:t,toolOutputMap:f,subtaskParams:l,planMode:c}=i,E={user_ask:JTi,todo_write:XTi,read_tool_output:Mhi({toolOutputMap:f})};if(c)E.propose_plan=WTi;if(l.provider)E.subtask=Ucu(t,l,u);return E}var pqf;var Scu=g(()=>{H4();STi();j8();Qj0();xTi();Cj0();qj0();Pcu();Acu();rj0();Icu();ej0();xcu();nZ();sj0();uK0();fK0();EK0();wK0();_K0();DK0();vt();pqf={read_tool_output:{readOnly:!0,destructive:!1},read_resource:{readOnly:!0,destructive:!1},read_prompt:{readOnly:!0,destructive:!1},web_search:{readOnly:!0,destructive:!1},deep_research:{readOnly:!0,destructive:!1},generate_image:{readOnly:!1,destructive:!1},open_in_agent:{readOnly:!1,destructive:!1},subtask:{readOnly:!1,destructive:!1},user_ask:{readOnly:!0,destructive:!1},propose_plan:{readOnly:!0,destructive:!1},enable_tool:{readOnly:!0,destructive:!1},todo_write:{readOnly:!1,destructive:!1},update_interests:{readOnly:!1,destructive:!1},load_repo:{readOnly:!1,destructive:!0},search_threads:{readOnly:!0,destructive:!1},get_thread:{readOnly:!0,destructive:!1},list_thread_messages:{readOnly:!0,destructive:!1}}});async function gK0(i){let u=new Map,{tools:t,nameMap:f}=await GTi(i.mcpClient,u,i.writer,i.toolApprovalLevel,{disableOutputTruncation:!1,isPlanMode:i.planMode,timeoutMs:Chi,resolveArgs:i.resolveArgs,onToolCalled:i.onToolCalled,onPrOpened:i.onPrOpened}),l=i.fullBuiltInParams?await QTi(i.writer,{...i.fullBuiltInParams,toolOutputMap:u},i.ctx):nK0({ctx:i.ctx,writer:i.writer,toolOutputMap:u,subtaskParams:i.subtaskParams,planMode:i.planMode}),c=i.kind==="subagent"?Object.fromEntries(Object.entries(l).filter(([$])=>!tVf.includes($))):l;return{tools:{...t,...c},toolOutputMap:u,nameMap:f}}var tVf;var OK0=g(()=>{STi();Scu();tVf=["subtask","user_ask","propose_plan"]});var HTi={};Xi(HTi,{waitForSeed:()=>dVf,seedLocalMode:()=>EVf,markSeedComplete:()=>wVf,isLocalMode:()=>Q3,getLocalAdminUser:()=>Yo,getLocalAdminPassword:()=>zTi});import{userInfo as fVf}from"os";async function zTi(){return yu().betterAuthSecret||"local-mode-default"}function NK0(){try{return fVf().username||"local"}catch{return"local"}}function lVf(i){return i.charAt(0).toUpperCase()+i.slice(1)}async function cVf(){let i=Ut(),u=await i.db.selectFrom("user").select(i.db.fn.countAll().as("count")).executeTakeFirst();return Number(u?.count??0)===0}async function EVf(){if(!await cVf())return!1;let u=NK0(),t=`${u}@localhost.mesh`,f=lVf(u),l=await zTi(),c=await Bt.api.signUpEmail({body:{email:t,password:l,name:f}});if(!c?.user?.id)throw Error("Failed to create local admin user");let E=c.user.id,$=Ut();await $.db.updateTable("user").set({role:"admin"}).where("id","=",E).execute();let w=`${u}-local`.toLowerCase().replace(/[^a-z0-9-]/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,""),d=`${f} Local`;return await $.db.updateTable("organization").set({name:d,slug:w}).where("id","in",(h)=>h.selectFrom("member").select("organizationId").where("userId","=",E)).execute(),!0}async function Yo(){let i=Ut(),u=`${NK0()}@localhost.mesh`;return i.db.selectFrom("user").where("email","=",u).selectAll().executeTakeFirst()}function Q3(){return yu().localMode}function wVf(){yK0()}function dVf(){return $Vf}var yK0,$Vf;var qg=g(()=>{cE();vt();j3();$Vf=new Promise((i)=>{if(yK0=i,!Q3())i()})});var ZK0=()=>{};function _Vf(i){return i.type==="file"&&"mediaType"in i&&typeof i.mediaType==="string"&&hVf.has(i.mediaType)}function PK0(i){let u=i.match(/^data:([^;]+);base64,(.+)$/s);if(!u)return null;let[,t,f]=u;try{let l=atob(f),c=new Uint8Array(l.length);for(let E=0;E<l.length;E++)c[E]=l.charCodeAt(E);return{mimeType:t,bytes:c}}catch{return null}}function jcu(i){return{"image/png":"png","image/jpeg":"jpg","image/gif":"gif","image/webp":"webp","image/svg+xml":"svg","application/pdf":"pdf","text/plain":"txt","text/html":"html","application/json":"json"}[i]??"bin"}async function vVf(i,u,t,f){if(!f.objectStorage)return null;try{return await f.objectStorage.put(u,i,{contentType:t}),u}catch(l){return console.error("[file-materializer] Failed to upload file:",l),null}}async function Qo(i,u){if(!u.objectStorage)return null;try{return await u.objectStorage.presignedGetUrl(i,DVf)}catch(t){return console.error("[file-materializer] Failed to generate presigned URL:",t),null}}function AK0(i){try{return decodeURIComponent(i)}catch{return i}}function BK0(i,u){let t=typeof i.filename==="string"&&i.filename.trim()?i.filename:`attachment.${jcu(u)}`,f=t.match(nVf);if(f?.[1])t=AK0(f[1]);return[...t.split(/[\\/]/).pop()??t].filter((E)=>(E.codePointAt(0)??0)>=32).join("").trim()||`attachment.${jcu(u)}`}function FK0(i,u){if(!u.has(i))return u.add(i),i;let t=i.lastIndexOf("."),f=t>0?i.slice(0,t):i,l=t>0?i.slice(t):"";for(let c=2;;c++){let E=`${f} (${c})${l}`;if(!u.has(E))return u.add(E),E}}async function UK0(i,u,t,f,l){if(!l||!f.orgFs)return console.warn("[file-materializer] uploads-volume write skipped",{hasThreadId:Boolean(l),hasOrgFs:Boolean(f.orgFs)}),null;try{let c=`${l}/${t}`;return await f.orgFs.write("uploads",c,i,{actor:f.auth?.user?.id??"unknown",contentType:u}),{key:nv("uploads",c),sandboxPath:`org/upload/${t}`}}catch(c){return console.error("[file-materializer] uploads-volume write failed:",c),null}}async function RTi(i,u,t){if(!u.organization)return i;let f=u.organization.slug;if(!f)return i;let l=i.findLastIndex((B)=>B.role==="user");if(l===-1)return i;let c=i[l],E=c.parts.filter((B)=>B.type==="file"&&("url"in B)&&typeof B.url==="string"&&B.url.startsWith("data:")),w=Boolean(t?.threadId&&u.orgFs)?c.parts.flatMap((B)=>{if(B.type!=="text"||!("text"in B)||typeof B.text!=="string")return[];let F=B.text.match(gVf);if(!F?.[1]||F[2]===void 0)return[];return[{name:AK0(F[1]),content:F[2]}]}):[];if(E.length===0&&w.length===0)return i;let d=new Set,h=E.flatMap((B)=>{if(B.type!=="file"||!("url"in B)||typeof B.url!=="string")return[];let F=PK0(B.url);if(!F)return[];let A=FK0(BK0(B,F.mimeType),d);return[{dataUrl:B.url,parsed:F,filename:A}]}),_=w.map(({name:B,content:F})=>({filename:FK0(BK0({filename:B},"text/plain"),d),content:F})),D=(await Promise.all([...h.map(async({dataUrl:B,parsed:F,filename:A})=>{let G=await UK0(F.bytes,F.mimeType,A,u,t?.threadId);if(!G)return null;return{dataUrl:B,meshStorageUrl:X6(G.key),redirectUrl:zL(u.baseUrl,f,G.key),filename:A,sandboxPath:G.sandboxPath}}),..._.map(async({filename:B,content:F})=>{let A=await UK0(new TextEncoder().encode(F),Hc(B),B,u,t?.threadId);if(!A)return null;return{dataUrl:null,meshStorageUrl:X6(A.key),redirectUrl:zL(u.baseUrl,f,A.key),filename:B,sandboxPath:A.sandboxPath}})])).filter((B)=>B!==null);if(D.length===0)return i;let n=D.map((B)=>B.sandboxPath?`- ${B.filename}: ${B.sandboxPath} (tool URL: ${B.meshStorageUrl})`:`- ${B.filename}: ${B.meshStorageUrl}`).join(`
87000
+ `,n=await fetch(`${_Z}/function?token=${encodeURIComponent(d)}`,{method:"POST",headers:{"Content-Type":"application/javascript"},body:D});if(!n.ok){let Z=await n.text().catch(()=>"Unknown error");return{success:!1,error:`Browserless function call failed (${n.status}): ${Z}`,url:h.url}}let O=await n.json().catch(async()=>{return{error:`Browserless returned non-JSON response: ${(await n.text().catch(()=>"")).slice(0,200)}`}}),N=JSON.stringify(O,null,2);t.set($.toolCallId,N);let y=kE(N);if(!("error"in O)&&y>Ag&&f){let Z=`inspect-pages/${crypto.randomUUID()}.json`;return await f.put(Z,new TextEncoder().encode(N),{contentType:"application/json"}),{success:!0,uri:X6(Z),preview:D$(N),url:h.url,tokenCount:y,consoleLogCount:O.consoleLogs?.length??0,errorCount:O.errors?.length??0,hasEvaluateResult:O.evaluateResult!=null}}return{success:!("error"in O),...O,url:h.url,tokenCount:y}}finally{i.write({type:"data-tool-metadata",id:$.toolCallId,data:{latencyMs:performance.now()-w}})}}})}function oqf(){return H0({description:"Search the web and synthesize a comprehensive research report. This tool is only available in cluster Decopilot.",inputSchema:Di(eqf),execute:async(i)=>{throw Error("web_search is only available in cluster Decopilot.")}})}function sqf(){return H0({description:"Record what the user is durably working toward (their goals/interests). This tool is only available in cluster Decopilot.",inputSchema:Di(aqf),execute:async(i)=>{throw Error("update_interests is only available in cluster Decopilot.")}})}function hK0(i){let{writer:u,toolOutputMap:t,objectStorage:f,pendingImages:l,imageTool:c,imageBackgroundDispatcher:E,includeUnavailableClusterOnlyTools:$}=i,w={user_ask:JTi,todo_write:XTi,propose_plan:WTi,read_tool_output:Mhi({toolOutputMap:t})};if($)w.web_search=oqf(),w.update_interests=sqf();if(c)w.generate_image=Wo("generate_image",DZ,zhi(u,{...c,objectStorage:f}),E);if(process.env.BROWSERLESS_TOKEN){if(w.scrape_url=dK0(u,{toolOutputMap:t,objectStorage:f,kind:"scrape"}),w.inspect_page=dK0(u,{toolOutputMap:t,objectStorage:f,kind:"inspect"}),l)w.take_screenshot=Hhi(u,{objectStorage:f,toolOutputMap:t,pendingImages:l})}return w}var eqf,aqf;var _K0=g(()=>{Pf();Pcu();Acu();Icu();j8();nZ();xcu();eqf=xd.object({query:xd.string().max(1e4).describe("The research query. Be specific about what information you need.")}),aqf=xd.object({interests:xd.array(xd.object({title:xd.string().max(120).describe("Short noun phrase, e.g. 'Learning Rust'"),summary:xd.string().max(500).describe("One or two sentences of context, including any progress")})).max(10)})});function vK0(i){return{search_threads:H0({description:wZ.description,inputSchema:Di(wZ.inputSchema),execute:(u)=>wZ.execute(u,i)}),get_thread:H0({description:dZ.description,inputSchema:Di(dZ.inputSchema),execute:(u)=>dZ.execute(u,i)}),list_thread_messages:H0({description:hZ.description,inputSchema:Di(hZ.inputSchema),execute:(u)=>hZ.execute(u,i)})}}var DK0=g(()=>{Pf();G4u();S4u();X4u()});async function iVf(i,u,t){let{provider:f,imageProvider:l,webSearchProvider:c,deepResearchProvider:E,organization:$,models:w,toolApprovalLevel:d="auto",isPlanMode:h=!1,toolOutputMap:_,pendingImages:v,passthroughClient:D,vmContext:n,htmlArtifactBuffer:O,taskId:N,agentId:y,onChildUsage:Z,backgroundDispatcher:T}=u,B={isPlanMode:h},F=t.auth?.user?.id,A=hK0({writer:i,toolOutputMap:_,passthroughClient:D,toolApprovalLevel:d,isPlanMode:h,objectStorage:t.objectStorage});if(F)A.update_interests=Vj0({write:async(k)=>{await t.storage.interests.setForAgent(k.orgId,k.agentId,k.userId,{interests:k.interests})},orgId:$.id,agentId:y,userId:F});Object.assign(A,vK0(t));let G=kTi(d,!1,B)!==!1,I;if(n){let k=await Xo(t,{virtualMcpId:n.virtualMcpId,branch:n.branch,userId:n.userId,syncTools:n.syncTools});I=Yj0({fs:k,htmlArtifactBuffer:O,toolOutputMap:_,needsApproval:G,pendingImages:v,ctx:t,threadId:n.threadId,virtualMcpId:n.virtualMcpId}),Object.assign(A,I);let q=await bj0({ctx:t,orgId:$.id,virtualMcpId:n.virtualMcpId,userId:n.userId,threadId:n.threadId,writer:i});if(q)A.load_repo=q}if(f)A.subtask=Wo("subtask",Fcu,Ucu(i,{provider:f,organization:$,models:w,self:{id:y},currentThreadId:N,needsApproval:kTi(d,!1,B)!==!1,onChildUsage:Z,vmTools:I,parentBuiltInParams:u},t),T);if(l&&w.image&&t.objectStorage)A.generate_image=Wo("generate_image",DZ,mj0(i,{provider:l,imageModelInfo:w.image,objectStorage:t.objectStorage,allowHttpExternalUrls:yu().localMode}),T);if(c&&w.webSearch){let k=Gcu({provider:c,modelInfo:w.webSearch,ctx:t,mode:"quick",toolName:"web_search"});A.web_search=kcu(i,{researchJob:k,toolOutputMap:_,taskId:N})}if(E&&w.deepResearch){let k=Gcu({provider:E,modelInfo:w.deepResearch,ctx:t,mode:"deep",toolName:"deep_research"});A.deep_research=kcu(i,{researchJob:k,toolOutputMap:_,taskId:N,description:"Run in-depth, multi-source research and synthesize a comprehensive, cited report. Use this when the user needs thorough analysis, a literature/market review, or a question that warrants exploring many "+"sources \u2014 accuracy and depth matter more than latency. For quick "+"lookups or fact-checks, use `web_search` instead."})}if(process.env.BROWSERLESS_TOKEN){let k={baseUrl:_Z,token:process.env.BROWSERLESS_TOKEN};if(A.take_screenshot=tK0(i,{objectStorage:t.objectStorage,toolOutputMap:_,pendingImages:v}),t.objectStorage)A.scrape_url=cK0(i,{browserless:k,objectStorage:t.objectStorage,toolOutputMap:_}),A.inspect_page=$K0(i,{browserless:k,objectStorage:t.objectStorage,toolOutputMap:_})}return A}function uVf(i,u,t){let f=u.organization.id,l=t.auth?.user?.id,c={};for(let[E,$]of Object.entries(i)){let w=$,d=w.execute;if(typeof d!=="function"){c[E]=$;continue}let h=pqf[E],_=d.constructor?.name==="AsyncGeneratorFunction",v=(n,O)=>{if(!f||!l)return;mu.capture({distinctId:l,event:"tool_called",groups:{organization:f},properties:{organization_id:f,tool_source:"builtin",tool_name:E,tool_safe_name:E,read_only:h?.readOnly??null,destructive:h?.destructive??null,idempotent:null,open_world:null,latency_ms:Math.round(n),is_error:O}})},D=_?async function*(n,O){let N=performance.now(),y=!1;try{yield*d.call(w,n,O)}catch(Z){throw y=!0,Z}finally{v(performance.now()-N,y)}}:async(n,O)=>{let N=performance.now(),y=!1;try{return await d.call(w,n,O)}catch(Z){throw y=!0,Z}finally{v(performance.now()-N,y)}};c[E]={...w,execute:D}}return c}async function QTi(i,u,t){let f=await iVf(i,u,t),l=uVf(f,u,t);if(!u.isPlanMode){let{propose_plan:c,...E}=l;return E}return l}function nK0(i){let{ctx:u,writer:t,toolOutputMap:f,subtaskParams:l,planMode:c}=i,E={user_ask:JTi,todo_write:XTi,read_tool_output:Mhi({toolOutputMap:f})};if(c)E.propose_plan=WTi;if(l.provider)E.subtask=Ucu(t,l,u);return E}var pqf;var Scu=g(()=>{H4();STi();j8();Qj0();xTi();Cj0();qj0();Pcu();Acu();rj0();Icu();ej0();xcu();nZ();sj0();uK0();fK0();EK0();wK0();_K0();DK0();vt();pqf={read_tool_output:{readOnly:!0,destructive:!1},read_resource:{readOnly:!0,destructive:!1},read_prompt:{readOnly:!0,destructive:!1},web_search:{readOnly:!0,destructive:!1},deep_research:{readOnly:!0,destructive:!1},generate_image:{readOnly:!1,destructive:!1},open_in_agent:{readOnly:!1,destructive:!1},subtask:{readOnly:!1,destructive:!1},user_ask:{readOnly:!0,destructive:!1},propose_plan:{readOnly:!0,destructive:!1},enable_tool:{readOnly:!0,destructive:!1},todo_write:{readOnly:!1,destructive:!1},update_interests:{readOnly:!1,destructive:!1},load_repo:{readOnly:!1,destructive:!0},search_threads:{readOnly:!0,destructive:!1},get_thread:{readOnly:!0,destructive:!1},list_thread_messages:{readOnly:!0,destructive:!1}}});async function gK0(i){let u=new Map,{tools:t,nameMap:f}=await GTi(i.mcpClient,u,i.writer,i.toolApprovalLevel,{disableOutputTruncation:!1,isPlanMode:i.planMode,timeoutMs:Chi,resolveArgs:i.resolveArgs,onToolCalled:i.onToolCalled,onPrOpened:i.onPrOpened}),l=i.fullBuiltInParams?await QTi(i.writer,{...i.fullBuiltInParams,toolOutputMap:u},i.ctx):nK0({ctx:i.ctx,writer:i.writer,toolOutputMap:u,subtaskParams:i.subtaskParams,planMode:i.planMode}),c=i.kind==="subagent"?Object.fromEntries(Object.entries(l).filter(([$])=>!tVf.includes($))):l;return{tools:{...t,...c},toolOutputMap:u,nameMap:f}}var tVf;var OK0=g(()=>{STi();Scu();tVf=["subtask","user_ask","propose_plan"]});var HTi={};Xi(HTi,{waitForSeed:()=>dVf,seedLocalMode:()=>EVf,markSeedComplete:()=>wVf,isLocalMode:()=>Q3,getLocalAdminUser:()=>Yo,getLocalAdminPassword:()=>zTi});import{userInfo as fVf}from"os";async function zTi(){return yu().betterAuthSecret||"local-mode-default"}function NK0(){try{return fVf().username||"local"}catch{return"local"}}function lVf(i){return i.charAt(0).toUpperCase()+i.slice(1)}async function cVf(){let i=Ut(),u=await i.db.selectFrom("user").select(i.db.fn.countAll().as("count")).executeTakeFirst();return Number(u?.count??0)===0}async function EVf(){if(!await cVf())return!1;let u=NK0(),t=`${u}@localhost.mesh`,f=lVf(u),l=await zTi(),c=await Bt.api.signUpEmail({body:{email:t,password:l,name:f}});if(!c?.user?.id)throw Error("Failed to create local admin user");let E=c.user.id,$=Ut();await $.db.updateTable("user").set({role:"admin"}).where("id","=",E).execute();let w=`${u}-local`.toLowerCase().replace(/[^a-z0-9-]/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,""),d=`${f} Local`;return await $.db.updateTable("organization").set({name:d,slug:w}).where("id","in",(h)=>h.selectFrom("member").select("organizationId").where("userId","=",E)).execute(),!0}async function Yo(){let i=Ut(),u=`${NK0()}@localhost.mesh`;return i.db.selectFrom("user").where("email","=",u).selectAll().executeTakeFirst()}function Q3(){return yu().localMode}function wVf(){yK0()}function dVf(){return $Vf}var yK0,$Vf;var qg=g(()=>{cE();vt();j3();$Vf=new Promise((i)=>{if(yK0=i,!Q3())i()})});var ZK0=()=>{};function _Vf(i){return i.type==="file"&&"mediaType"in i&&typeof i.mediaType==="string"&&hVf.has(i.mediaType)}function PK0(i){let u=i.match(/^data:([^;]+);base64,(.+)$/s);if(!u)return null;let[,t,f]=u;try{let l=atob(f),c=new Uint8Array(l.length);for(let E=0;E<l.length;E++)c[E]=l.charCodeAt(E);return{mimeType:t,bytes:c}}catch{return null}}function jcu(i){return{"image/png":"png","image/jpeg":"jpg","image/gif":"gif","image/webp":"webp","image/svg+xml":"svg","application/pdf":"pdf","text/plain":"txt","text/html":"html","application/json":"json"}[i]??"bin"}async function vVf(i,u,t,f){if(!f.objectStorage)return null;try{return await f.objectStorage.put(u,i,{contentType:t}),u}catch(l){return console.error("[file-materializer] Failed to upload file:",l),null}}async function Qo(i,u){if(!u.objectStorage)return null;try{return await u.objectStorage.presignedGetUrl(i,DVf)}catch(t){return console.error("[file-materializer] Failed to generate presigned URL:",t),null}}function AK0(i){try{return decodeURIComponent(i)}catch{return i}}function BK0(i,u){let t=typeof i.filename==="string"&&i.filename.trim()?i.filename:`attachment.${jcu(u)}`,f=t.match(nVf);if(f?.[1])t=AK0(f[1]);return[...t.split(/[\\/]/).pop()??t].filter((E)=>(E.codePointAt(0)??0)>=32).join("").trim()||`attachment.${jcu(u)}`}function FK0(i,u){if(!u.has(i))return u.add(i),i;let t=i.lastIndexOf("."),f=t>0?i.slice(0,t):i,l=t>0?i.slice(t):"";for(let c=2;;c++){let E=`${f} (${c})${l}`;if(!u.has(E))return u.add(E),E}}async function UK0(i,u,t,f,l){if(!l||!f.orgFs)return console.warn("[file-materializer] uploads-volume write skipped",{hasThreadId:Boolean(l),hasOrgFs:Boolean(f.orgFs)}),null;try{let c=`${l}/${t}`;return await f.orgFs.write("uploads",c,i,{actor:f.auth?.user?.id??"unknown",contentType:u}),{key:nv("uploads",c),sandboxPath:`org/upload/${t}`}}catch(c){return console.error("[file-materializer] uploads-volume write failed:",c),null}}async function RTi(i,u,t){if(!u.organization)return i;let f=u.organization.slug;if(!f)return i;let l=i.findLastIndex((B)=>B.role==="user");if(l===-1)return i;let c=i[l],E=c.parts.filter((B)=>B.type==="file"&&("url"in B)&&typeof B.url==="string"&&B.url.startsWith("data:")),w=Boolean(t?.threadId&&u.orgFs)?c.parts.flatMap((B)=>{if(B.type!=="text"||!("text"in B)||typeof B.text!=="string")return[];let F=B.text.match(gVf);if(!F?.[1]||F[2]===void 0)return[];return[{name:AK0(F[1]),content:F[2]}]}):[];if(E.length===0&&w.length===0)return i;let d=new Set,h=E.flatMap((B)=>{if(B.type!=="file"||!("url"in B)||typeof B.url!=="string")return[];let F=PK0(B.url);if(!F)return[];let A=FK0(BK0(B,F.mimeType),d);return[{dataUrl:B.url,parsed:F,filename:A}]}),_=w.map(({name:B,content:F})=>({filename:FK0(BK0({filename:B},"text/plain"),d),content:F})),D=(await Promise.all([...h.map(async({dataUrl:B,parsed:F,filename:A})=>{let G=await UK0(F.bytes,F.mimeType,A,u,t?.threadId);if(!G)return null;return{dataUrl:B,studioStorageUrl:X6(G.key),redirectUrl:zL(u.baseUrl,f,G.key),filename:A,sandboxPath:G.sandboxPath}}),..._.map(async({filename:B,content:F})=>{let A=await UK0(new TextEncoder().encode(F),Hc(B),B,u,t?.threadId);if(!A)return null;return{dataUrl:null,studioStorageUrl:X6(A.key),redirectUrl:zL(u.baseUrl,f,A.key),filename:B,sandboxPath:A.sandboxPath}})])).filter((B)=>B!==null);if(D.length===0)return i;let n=D.map((B)=>B.sandboxPath?`- ${B.filename}: ${B.sandboxPath} (tool URL: ${B.studioStorageUrl})`:`- ${B.filename}: ${B.studioStorageUrl}`).join(`
87001
87001
  `),O=D.some((B)=>B.sandboxPath)?`[Attached files \u2014 already inside your sandbox; read them at the given path. The tool URL is only for tools that take a URL argument]
87002
87002
  ${n}`:`[Uploaded files \u2014 use these URLs when calling tools]
87003
- ${n}`,N=new Map(D.flatMap((B)=>B.dataUrl?[[B.dataUrl,B.meshStorageUrl]]:[])),y=c.parts.map((B)=>{if(B.type!=="file"||!("url"in B)||typeof B.url!=="string")return B;let F=N.get(B.url);if(!F)return B;return{...B,url:F}}),Z=y.findIndex((B)=>B.type==="text"),T;if(Z!==-1)T=y.map((B,F)=>{if(F!==Z||B.type!=="text")return B;return{...B,text:`${O}
87003
+ ${n}`,N=new Map(D.flatMap((B)=>B.dataUrl?[[B.dataUrl,B.studioStorageUrl]]:[])),y=c.parts.map((B)=>{if(B.type!=="file"||!("url"in B)||typeof B.url!=="string")return B;let F=N.get(B.url);if(!F)return B;return{...B,url:F}}),Z=y.findIndex((B)=>B.type==="text"),T;if(Z!==-1)T=y.map((B,F)=>{if(F!==Z||B.type!=="text")return B;return{...B,text:`${O}
87004
87004
 
87005
87005
  ${"text"in B?B.text:""}`.trim()}});else T=[{type:"text",text:O},...y];return[...i.slice(0,l),{...c,parts:T},...i.slice(l+1)]}async function bTi(i,u){if(!u.organization)return i;let t=i.map(($)=>{let w=$.parts.filter((d)=>!_Vf(d));return w.length===$.parts.length?$:{...$,parts:w}}),f=new Set;for(let $ of t)for(let w of $.parts)if(w.type==="file"&&"url"in w&&typeof w.url==="string"){let d=uo(w.url);if(d)f.add(d)}let l=Q3(),c=new Map;if(await Promise.all(Array.from(f).map(async($)=>{let w=await Qo($,u);if(!w)return;if(l&&!w.startsWith("https://"))try{let d=await u.objectStorage.getBytes($);if(d.byteLength<=TK0){c.set($,{kind:"bytes",b64:Buffer.from(d).toString("base64")});return}console.warn(`[file-materializer] dev inline skipped (${d.byteLength}B > ${TK0}B):`,$)}catch(d){console.error("[file-materializer] dev inline read failed; passing URL through:",d)}c.set($,{kind:"url",url:w})})),c.size===0)return OVf(t,u);return t.map(($)=>{let w=$.parts.map((h)=>{if(h.type==="file"&&"url"in h&&typeof h.url==="string"){let _=uo(h.url);if(_){let v=c.get(_);if(v?.kind==="url")return{...h,url:v.url};if(v?.kind==="bytes"){let D="mediaType"in h&&typeof h.mediaType==="string"?h.mediaType:"application/octet-stream";return{...h,url:`data:${D};base64,${v.b64}`}}}}return h});return w.some((h,_)=>h!==$.parts[_])?{...$,parts:w}:$})}async function IK0(i,u){let t=new Set;if(Kcu(i,t),t.size===0)return i;let f=new Map;if(await Promise.all(Array.from(t).map(async(l)=>{let c=await Qo(l,u);if(c)f.set(l,c)})),f.size===0)return i;return Jcu(i,f)}function Kcu(i,u){if(typeof i==="string")for(let t of i.matchAll(b4u()))u.add(t[1]);else if(Array.isArray(i))for(let t of i)Kcu(t,u);else if(i!==null&&typeof i==="object")for(let t of Object.values(i))Kcu(t,u)}function Jcu(i,u){if(typeof i==="string")return i.replace(b4u(),(t,f)=>u.get(f)??X6(f));if(Array.isArray(i))return i.map((t)=>Jcu(t,u));if(i!==null&&typeof i==="object")return Object.fromEntries(Object.entries(i).map(([t,f])=>[t,Jcu(f,u)]));return i}async function OVf(i,u){let t=i.findLastIndex((d)=>d.role==="user");if(t===-1)return i;let f=i[t],l=f.parts.filter((d)=>d.type==="file"&&("url"in d)&&typeof d.url==="string"&&d.url.startsWith("data:"));if(l.length===0)return i;let E=(await Promise.all(l.map(async(d)=>{if(d.type!=="file"||!("url"in d)||typeof d.url!=="string")return null;let h=PK0(d.url);if(!h)return null;let _=jcu(h.mimeType),v=`chat-uploads/${crypto.randomUUID()}.${_}`,D=await vVf(h.bytes,v,h.mimeType,u);if(!D)return null;let n=await Qo(D,u);return n?{dataUrl:d.url,presigned:n}:null}))).filter((d)=>d!==null);if(E.length===0)return i;let $=new Map(E.map((d)=>[d.dataUrl,d.presigned])),w=f.parts.map((d)=>{if(d.type!=="file"||!("url"in d)||typeof d.url!=="string")return d;let h=$.get(d.url);return h?{...d,url:h}:d});return[...i.slice(0,t),{...f,parts:w},...i.slice(t+1)]}var hVf,DVf=604800,TK0=20971520,nVf,gVf;var DH=g(()=>{qg();Tq();uv();ZK0();hVf=new Set(["application/vnd.openxmlformats-officedocument.presentationml.presentation","application/vnd.openxmlformats-officedocument.wordprocessingml.document","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"]);nVf=/^\[file::\/\/(.+?)\]$/,gVf=/^\[file::\/\/(.+?)\]\n([\s\S]*)$/});function CTi(i,u){return{resolveArgs:(t)=>IK0(t,i),onToolCalled:(t)=>{if(!t.isError&&LF0(t.toolName))Yz(i,"in_review",u);let f=i.organization?.id,l=i.auth?.user?.id;if(!f||!l)return;mu.capture({distinctId:l,event:"tool_called",groups:{organization:f},properties:{organization_id:f,tool_source:"mcp",tool_name:t.toolName,tool_safe_name:t.toolSafeName,read_only:t.annotations?.readOnlyHint??null,destructive:t.annotations?.destructiveHint??null,idempotent:t.annotations?.idempotentHint??null,open_world:t.annotations?.openWorldHint??null,latency_ms:Math.round(t.latencyMs),is_error:t.isError}})},onPrOpened:(t)=>{Fhi(i,t.result,t.connectionId,u)}}}var Xcu=g(()=>{H4();DH();I8()});function xK0(i){if(i instanceof Error)return i.message;if(typeof i==="string")return i;if(typeof i==="object"&&i!==null){let u=i.message;if(typeof u==="string")return u;try{return JSON.stringify(i)}catch{return String(i)}}return String(i)}function kK0(i){let u,t,f=new Promise(($)=>{t=$}),l=($)=>{if(u===void 0)u=$;t(u)},E=(i.streamText??X3)({model:i.model,system:i.systemMessages,messages:i.messages,tools:i.tools,providerOptions:pS0,prepareStep:i.prepareStep,temperature:i.temperature,maxOutputTokens:i.maxOutputTokens,stopWhen:i.stopWhen,abortSignal:i.abortSignal,onStepFinish:i.onStepFinish,onError:async($)=>{let w=$.error??$,d=xK0(w);i.onError?.(d,w),l(d)},onAbort:async()=>{l(u??"Run aborted before completion.")}});return Promise.resolve(E.finishReason).then(()=>{if(u===void 0)t(void 0)}).catch(($)=>{let w=xK0($);i.onError?.(w,$),l(w)}),{result:E,error:f}}var GK0=g(()=>{Pf();gcu()});import{SpanStatusCode as Lcu,trace as NVf}from"@opentelemetry/api";async function _H(i){let u=i.tracer??NVf.getTracer("decopilot"),t=i.stepLimit??(i.kind==="agent"?Z50:W7),f=i.planMode??!1,l=i.toolApprovalLevel??"auto",c=u.startSpan("decopilot.agent_loop",{attributes:{"decopilot.agent.id":i.virtualMcp.id,"decopilot.agent.kind":i.kind,"decopilot.organization.id":i.organization.id,"decopilot.model.id":i.models.thinking.id}}),E=await Oj0({ctx:i.ctx,organization:i.organization,virtualMcp:i.virtualMcp,kind:i.kind,planMode:f,isDecopilot:i.isDecopilot,agentInstructions:i.systemAgentInstructions,currentThreadId:i.currentThreadId,user:i.user,userContext:i.userContext,codingWorkspace:i.codingWorkspace,passthroughClient:i.passthroughClient,connectionsData:i.connectionsData}),$=i.additionalSystemMessages&&i.additionalSystemMessages.length>0?[...E,...i.additionalSystemMessages]:E,{resolveArgs:w,onToolCalled:d,onPrOpened:h}=CTi(i.ctx,i.currentThreadId),{tools:_}=await gK0({kind:i.kind,ctx:i.ctx,mcpClient:i.mcpClient,writer:i.writer,planMode:f,toolApprovalLevel:l,subtaskParams:i.subtaskParams,resolveArgs:w,onToolCalled:d,onPrOpened:h,fullBuiltInParams:i.subagentBuiltInParams}),v=i.extraTools?{..._,...i.extraTools}:_,D=i.__streamText?void 0:bhi(i.provider,i.models.thinking),n=(N)=>{for(let y of N.toolCalls??[]){let Z=y.input?.command;if(y.toolName==="bash"&&Z&&WF0(Z)){Yz(i.ctx,"in_review",i.currentThreadId);let T=(N.toolResults??[]).find((B)=>B.toolCallId===y.toolCallId);Fhi(i.ctx,T?.output,null,i.currentThreadId);break}}return i.onStepFinish?.(N)},O=kK0({model:D,systemMessages:$,messages:i.messages,tools:v,prepareStep:i.prepareStep,temperature:i.temperature,maxOutputTokens:FU0(i.models.thinking.limits,kE($)+kE(i.messages)+kE(v)),stopWhen:gg(t),abortSignal:i.abortSignal,onStepFinish:n,streamText:i.__streamText,onError:(N,y)=>{if(console.error(`[runAgentLoop:${i.kind}:${i.virtualMcp.id}] Error`,N),c.setStatus({code:Lcu.ERROR,message:N}),y instanceof Error)c.recordException(y)}});return Promise.resolve(O.result.finishReason).then(()=>{c.setStatus({code:Lcu.OK})}).catch((N)=>{let y=N instanceof Error?N.message:typeof N==="string"?N:`${N}`;c.setStatus({code:Lcu.ERROR,message:y})}).finally(()=>c.end()),{result:O.result,error:O.error,span:c,assembledSystemMessages:$}}var KTi=g(()=>{Pf();V4u();j8();dy();Nj0();OK0();Xcu();I8();GK0()});function MTi(){let i=[],u=!1,t=null,f=()=>{let E=t;t=null,E?.()},l=(E)=>{if(u)return;i.push(E),f()},c=async function*(){try{while(!u||i.length>0){let E=i.shift();if(E){yield E;continue}await new Promise(($)=>{t=$})}}finally{u=!0,f()}}();return{writer:{write:(E)=>l(E),merge:async(E)=>{let $=E;if(typeof $[Symbol.asyncIterator]==="function"){for await(let d of $)l(d);return}let w=E.getReader();try{while(!0){let{value:d,done:h}=await w.read();if(h)return;l(d)}}finally{w.releaseLock()}},onError:()=>{}},stream:c,close:()=>{u=!0,f()}}}async function ZVf(i){let u=i.getReader();try{while(!0){let{done:t}=await u.read();if(t)return}}finally{u.releaseLock()}}async function qTi(i,u){let{runId:t,fenceToken:f}=i,l=i.fenceOk??(()=>!0),c=i.initialAckSeq??0,E=new Set,$;async function*w(){try{for await(let{seq:_,chunk:v}of i.chunks){if(!await l())continue;if(_<=c||E.has(_))continue;if(!await u.streamBuffer.publishRawChunk(t,v,{fenceToken:f,seq:_}))throw Error("publishRawChunk failed");E.add(_);let D=c;while(E.has(c+1))E.delete(c+1),c+=1;if(c>D)i.onPublished?.(c);yield v}}catch(_){throw $=_,_}}let{uiStream:d,whenComplete:h}=vhi({chunks:w(),originalMessages:i.originalMessages,title:{...u.title,persistTitle:async()=>{}},persistence:u.persistence??yVf,hooks:u.hooks,errorMessageId:i.errorMessageId});if(await ZVf(d),await h,$!==void 0){if($ instanceof Error)$.lastAckSeq=c;throw $}if(c>0)await u.streamBuffer.publishDone(t,f,c)}var yVf;var Wcu=g(()=>{Mfu();yVf={emitStepParts:async()=>{},emitFinal:async()=>{},emitError:async()=>{}}});import{DBOS as VK,DBOSClient as TVf}from"@dbos-inc/dbos-sdk";function KK0(i){Ycu=i}function rTi(){if(!Ycu)throw Error("[background-tool] DBOS runtime not initialized \u2014 setBackgroundToolRuntime() must run before workflows fire");return Ycu}function BVf(){return SK0??=TVf.create({systemDatabaseUrl:rTi().systemDatabaseUrl,systemDatabaseSchemaName:"dbos"}),SK0}function VTi(i){let u=i.modelMeta.capabilities;return{id:i.modelId,title:i.modelMeta.title??i.modelId,provider:i.modelMeta.providerId??null,capabilities:u&&u.length>0?{vision:u.includes("vision")||u.includes("image")||void 0,text:u.includes("text")||void 0,reasoning:u.includes("reasoning")||void 0}:void 0,limits:i.modelMeta.limits?{contextWindow:i.modelMeta.limits.contextWindow,maxOutputTokens:i.modelMeta.limits.maxOutputTokens??void 0}:void 0}}async function Qcu(i){let[u,t,f,l]=await Promise.all([T_(i,"smart"),K3(i,"image"),K3(i,"web_search"),K3(i,"deep_research")]);return{credentialId:u.credentialId,thinking:VTi(u),...t?{image:{...VTi(t),credentialId:t.credentialId}}:{},...f?{webSearch:{...VTi(f),credentialId:f.credentialId}}:{},...l?{deepResearch:{...VTi(l),credentialId:l.credentialId}}:{}}}async function mTi(i){let u=await rTi().studioContextFactory(i.orgId,i.userId);if(!u)throw Error(`[background-tool] studio context unavailable for org ${i.orgId} user ${i.userId}`);return u}function JK0(i){return{target:Lhi({sandboxProviderKind:i?.sandbox_provider_kind??"agent-sandbox"}),harnessId:i?.harness_id??"decopilot"}}function XK0(i,u){return{messages:[{id:`${i.jobId}:react-msg`,role:"user",metadata:{internal:!0},parts:[{type:"text",text:u.nudge}]}],models:u.models,agent:{id:i.agentId},temperature:i.temperature,toolApprovalLevel:i.toolApprovalLevel,mode:"default",organizationId:i.orgId,userId:i.userId,taskId:i.threadId,branch:i.branch??void 0,resumedFromBackground:!0,target:u.target,harnessId:u.harnessId??void 0}}function FVf(i){return{ctx:i,studioContext:()=>mTi(i),emitFinal:(u)=>VK.runStep(()=>xVf(i,u),{name:"appendResult"})}}function PVf(i){if(!i?.parts)return"";return i.parts.map((u)=>u&&typeof u==="object"&&u.type==="text"?u.text??"":"").filter((u)=>u.trim().length>0).join("").trim()}async function AVf(i){let u=await mTi(i),t=u.organization;if(!t)throw Error(`[background-tool] organization context unavailable for subtask (org ${i.orgId})`);let f=i.input,l=!f.agent_id||f.agent_id===i.agentId,c=l?i.agentId:f.agent_id,E=await Qcu(u),$=await u.aiProviders.activate(E.credentialId,i.orgId),w={thinking:{...E.thinking,credentialId:E.credentialId},...E.image?{image:E.image}:{},...E.webSearch?{webSearch:E.webSearch}:{},...E.deepResearch?{deepResearch:E.deepResearch}:{}},{mcpClient:d,targetKind:h,targetRef:_}=await jTi(u,i.orgId,c,{superUser:l}),v=w.image,D=w.webSearch,n=w.deepResearch,O=v?.credentialId?await u.aiProviders.activate(v.credentialId,i.orgId):null,N=D?.credentialId?await u.aiProviders.activate(D.credentialId,i.orgId):null,y=n?.credentialId?await u.aiProviders.activate(n.credentialId,i.orgId):null,Z={provider:$,imageProvider:O,webSearchProvider:N,deepResearchProvider:y,organization:t,models:w,toolApprovalLevel:i.toolApprovalLevel,isPlanMode:!1,passthroughClient:d,pendingImages:[],vmContext:h==="virtual-mcp"?{virtualMcpId:_.id,branch:_.repo?i.branch??`thread:${i.threadId}`:"ephemeral",userId:i.userId,threadId:i.threadId}:null,taskId:i.threadId,agentId:_.id,backgroundDispatcher:null},T=MTi(),B=H4u(i.threadId),F="",A="stop";try{let G=await _H({kind:"subagent",ctx:u,organization:t,virtualMcp:_,mcpClient:d,provider:$,models:w,messages:[{role:"user",content:f.prompt}],systemAgentInstructions:_.instructions,abortSignal:B.signal,stepLimit:W7,toolApprovalLevel:"auto",planMode:!1,writer:T.writer,subtaskParams:{provider:$,organization:t,models:w,needsApproval:!1},passthroughClient:d,subagentBuiltInParams:Z}),I=0,k=G.result.toUIMessageStream({generateMessageId:()=>`${i.jobId}:msg:${I++}`,messageMetadata:({part:r})=>r.type==="start"?{subtaskJobId:i.jobId}:void 0}),q=0;async function*J(){let r=k.getReader();try{while(!0){let{done:Y,value:fi}=await r.read();if(Y)break;yield{seq:++q,chunk:fi}}}finally{r.releaseLock()}}let W=new v$({storage:u.storage.threads.messageParts(),orgId:i.orgId,threadId:i.threadId,runId:i.jobId});return await qTi({runId:i.jobId,fenceToken:i.jobId,chunks:J()},{streamBuffer:rTi().streamBuffer,persistence:W,title:{threadId:i.threadId,currentThreadTitle:void 0,persistTitle:async()=>{}},hooks:{onFinish:async(r,Y)=>{let fi=PVf(r);if(fi)F=fi;if(Y)A=Y}}}),{report:F,finishReason:A,models:E}}finally{T.close(),R4u(i.threadId,B),await d.close().catch(()=>{})}}async function IVf(i){let u=await i.studioContext(),t=await Qcu(u),f=t.image;if(!f?.credentialId)throw Error("[background-tool] no image model configured for org");let l=await u.aiProviders.activate(f.credentialId,i.ctx.orgId),c=H4u(i.ctx.threadId);try{return{result:await C4u(i.ctx.input,{provider:l,imageModelInfo:{id:f.id},objectStorage:u.objectStorage,allowHttpExternalUrls:yu().localMode,abortSignal:c.signal}),models:t}}finally{R4u(i.ctx.threadId,c)}}async function xVf(i,u){let t=await mTi(i);if(!await t.storage.threads.get(i.threadId))throw Error(`[background-tool] thread ${i.threadId} not found`);await new v$({storage:t.storage.threads.messageParts(),orgId:i.orgId,threadId:i.threadId,runId:i.jobId}).emitFinal({id:`${i.jobId}:msg`,role:"assistant",parts:u})}async function LK0(i){let{snapshot:u,jobId:t,report:f}=i,l={...u,jobId:t,toolName:"subtask",input:{},toolCallId:`${t}:deliver`},c=await mTi(l),E=f.trim().length>0;await new v$({storage:c.storage.threads.messageParts(),orgId:u.orgId,threadId:u.threadId,runId:t}).emitFinal({id:`${t}:result`,role:"assistant",parts:[{type:"text",text:E?f:"_The subtask produced no output._"}],metadata:{subtaskJobId:t}});let w=await Qcu(c),{target:d,harnessId:h}=JK0(await c.storage.threads.get(u.threadId)),_=E?`The background subtask you started has completed. Its result:
87006
87006