decocms 4.72.0 → 4.72.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 (232) hide show
  1. package/dist/client/assets/{AlertCircle-BsC8nZWr.js → AlertCircle-ByBCiqKB.js} +1 -1
  2. package/dist/client/assets/{AreaChart-DXVec5ct.js → AreaChart-BI0I4Ppq.js} +1 -1
  3. package/dist/client/assets/{ArrowUp-DaXSepSv.js → ArrowUp-ByYzOCim.js} +1 -1
  4. package/dist/client/assets/{ArrowUpRight-_6fIYPXr.js → ArrowUpRight-bzoxt9p8.js} +1 -1
  5. package/dist/client/assets/{Check-DE1N-rrB.js → Check-HTVpA4p1.js} +1 -1
  6. package/dist/client/assets/{CheckCircle-nXqqS90B.js → CheckCircle-DjPfWLKl.js} +1 -1
  7. package/dist/client/assets/{ChevronDown-CjrjTSlA.js → ChevronDown-DP2FJuCW.js} +1 -1
  8. package/dist/client/assets/{ChevronRight-Dg8Umhcl.js → ChevronRight-ZJK5BM1-.js} +1 -1
  9. package/dist/client/assets/{ChevronUp-dE-sQ31o.js → ChevronUp-CgGHK9HJ.js} +1 -1
  10. package/dist/client/assets/{Circle-C8QUcHw5.js → Circle-7izIVcsR.js} +1 -1
  11. package/dist/client/assets/{DotsVertical-DCmNe1Vp.js → DotsVertical-C4Zezcv2.js} +1 -1
  12. package/dist/client/assets/{Eye-Du6-0RrT.js → Eye-C1sMKajK.js} +1 -1
  13. package/dist/client/assets/{FilterLines-CeA_m-Jn.js → FilterLines-3aw0CY5E.js} +1 -1
  14. package/dist/client/assets/{Flag01-BF8eQjMD.js → Flag01-DcRM5q1C.js} +1 -1
  15. package/dist/client/assets/{Globe01-Zujrr6mL.js → Globe01-DT864WlC.js} +1 -1
  16. package/dist/client/assets/{Globe04-DkSPCiAs.js → Globe04-EItN49Uy.js} +1 -1
  17. package/dist/client/assets/{HardDrive-D7cHPH_m.js → HardDrive-D2GUS0Qz.js} +1 -1
  18. package/dist/client/assets/{Key01-4mOzm_Ve.js → Key01-DK4hbjEO.js} +1 -1
  19. package/dist/client/assets/{LayoutLeft-DG3nl2dW.js → LayoutLeft-C5txNoe8.js} +1 -1
  20. package/dist/client/assets/{LinkExternal01-W9O8d8pD.js → LinkExternal01-DeqEyWEm.js} +1 -1
  21. package/dist/client/assets/{List-CSg3OvoN.js → List-BdZn4mFB.js} +1 -1
  22. package/dist/client/assets/{Monitor01-CQbicat8.js → Monitor01-K5RkPuES.js} +1 -1
  23. package/dist/client/assets/{Package-D5sboyyc.js → Package-XvqhUoDi.js} +1 -1
  24. package/dist/client/assets/{Palette-Cg7z9HJj.js → Palette-Td18xlyZ.js} +1 -1
  25. package/dist/client/assets/{Play-ByNPAhfH.js → Play-BDn2qAlu.js} +1 -1
  26. package/dist/client/assets/{Plus-VhmjIXHo.js → Plus-DqtLAmHa.js} +1 -1
  27. package/dist/client/assets/{SearchLg-3xCIsiS8.js → SearchLg-DxHDbs0K.js} +1 -1
  28. package/dist/client/assets/{SearchMd-89f8S5h5.js → SearchMd-CdBgMmXA.js} +1 -1
  29. package/dist/client/assets/{Settings02-BA2Bgs46.js → Settings02-DEAh_DT6.js} +1 -1
  30. package/dist/client/assets/{Shield01-AHPPT8YR.js → Shield01-dj09LnbE.js} +1 -1
  31. package/dist/client/assets/{Star01-DCs2qYAN.js → Star01-DtKCKhjn.js} +1 -1
  32. package/dist/client/assets/{Stars01-BAwyvppl.js → Stars01-B1VQUilg.js} +1 -1
  33. package/dist/client/assets/{Stars02-CpLorSOz.js → Stars02-Co9H-HBz.js} +1 -1
  34. package/dist/client/assets/{Sun-D_epwUcu.js → Sun-QqDe-E1B.js} +1 -1
  35. package/dist/client/assets/{SwitchHorizontal01-CBZXM18q.js → SwitchHorizontal01-C6m25wvW.js} +1 -1
  36. package/dist/client/assets/{Tool01-C8erJop6.js → Tool01-BjTjc1wh.js} +1 -1
  37. package/dist/client/assets/{Tool02-D10WSkUp.js → Tool02-DEgRWOZe.js} +1 -1
  38. package/dist/client/assets/{Trash01-DPAogoLk.js → Trash01-CgH2Xu1T.js} +1 -1
  39. package/dist/client/assets/{TrendUp01-BSBREk2N.js → TrendUp01-zbSYjm9k.js} +1 -1
  40. package/dist/client/assets/{Upload01--oXdVcK-.js → Upload01-CszhNxUd.js} +1 -1
  41. package/dist/client/assets/{User01-B2sIsQIR.js → User01-C5unDYhX.js} +1 -1
  42. package/dist/client/assets/{UserPlus01-thSOZiKs.js → UserPlus01-Cp0uzbD2.js} +1 -1
  43. package/dist/client/assets/{Users01-DqZNgN0k.js → Users01-BcikhJfb.js} +1 -1
  44. package/dist/client/assets/{Users03-DdbRbY0F.js → Users03-C-rX5qrp.js} +1 -1
  45. package/dist/client/assets/{X-DdGWtY4h.js → X-mDOEL8z7.js} +1 -1
  46. package/dist/client/assets/{XCircle-2rFOreXI.js → XCircle-DolRLvoN.js} +1 -1
  47. package/dist/client/assets/{XClose-Bavkzzu5.js → XClose-B_df4uSV.js} +1 -1
  48. package/dist/client/assets/{Zap-vOHApHdK.js → Zap-BxqbSAmo.js} +1 -1
  49. package/dist/client/assets/{ZapSquare-CVINA5zR.js → ZapSquare-opAhBrNo.js} +1 -1
  50. package/dist/client/assets/{ZoomOut-gw_JkVrF.js → ZoomOut-BAgZXjYN.js} +1 -1
  51. package/dist/client/assets/{access-gate-3_aSuDwo.js → access-gate-nYIMk1Ax.js} +1 -1
  52. package/dist/client/assets/{add-section-modal-CX64WIR4.js → add-section-modal-D9KFl6cA.js} +1 -1
  53. package/dist/client/assets/{agent-icon-CfXOdxpO.js → agent-icon-CyXwOhxa.js} +1 -1
  54. package/dist/client/assets/{agents-list-BiZuWSCa.js → agents-list-DKESyf5R.js} +1 -1
  55. package/dist/client/assets/{ai-providers-CkgN1LvQ.js → ai-providers-BmW-h5_h.js} +1 -1
  56. package/dist/client/assets/{alert-BoFqw1wP.js → alert-BE4pPomm.js} +1 -1
  57. package/dist/client/assets/{alert-dialog-BIAk_Dwq.js → alert-dialog-EgP6niMw.js} +1 -1
  58. package/dist/client/assets/app-editor-DFp3TUDK.js +1 -0
  59. package/dist/client/assets/{auth-catchall-8ShBKuNl.js → auth-catchall-CqXIKcng.js} +1 -1
  60. package/dist/client/assets/{auth-entry-C5v9lKS0.js → auth-entry-C5eWF52H.js} +1 -1
  61. package/dist/client/assets/{auth-split-layout-Bt1HD1KO.js → auth-split-layout-DEZlvBMh.js} +1 -1
  62. package/dist/client/assets/{auth-CCS6b9Rr.js → auth-xbCJi39A.js} +1 -1
  63. package/dist/client/assets/{authenticate-and-persist-oauth-qbTYLY6M.js → authenticate-and-persist-oauth-BMNwMmAj.js} +1 -1
  64. package/dist/client/assets/{automation-list-row-C8IVJY2n.js → automation-list-row-CNPVJKDB.js} +1 -1
  65. package/dist/client/assets/{automation-runs-B_AzYFqV.js → automation-runs-BrAZdZn6.js} +1 -1
  66. package/dist/client/assets/{automations-CN6e1GWl.js → automations-1sb-bW_9.js} +1 -1
  67. package/dist/client/assets/{autosend-CMlFuQmC.js → autosend-CC491WEW.js} +1 -1
  68. package/dist/client/assets/{avatar-DxDlFOEL.js → avatar-CBSgn8Tn.js} +1 -1
  69. package/dist/client/assets/{badge-G2VCw2eR.js → badge-Dgl1dSWq.js} +1 -1
  70. package/dist/client/assets/{block-document-DQMoPmRE.js → block-document-DZfn47Vv.js} +1 -1
  71. package/dist/client/assets/{brand-context-DVcyFXoP.js → brand-context-BpIRAQfd.js} +1 -1
  72. package/dist/client/assets/{buckets-kCM9_v7F.js → buckets-CYqr15Gu.js} +1 -1
  73. package/dist/client/assets/{bulk-category-panel-4smLJInh.js → bulk-category-panel-DaGYJFZ2.js} +1 -1
  74. package/dist/client/assets/{calendar-UwVHt9_y.js → calendar-DtZ36eG9.js} +1 -1
  75. package/dist/client/assets/{capability-load-error-DAU1rfwy.js → capability-load-error-DKk21fnQ.js} +1 -1
  76. package/dist/client/assets/{card-DqZPyczF.js → card-DgjJGkWr.js} +1 -1
  77. package/dist/client/assets/{category-editor-8vNCzZOe.js → category-editor-BIo2yBu8.js} +1 -1
  78. package/dist/client/assets/{chat-context-DDOfVCRk.js → chat-context-BTyBzQFH.js} +1 -1
  79. package/dist/client/assets/{checkbox-Jq3ex1yu.js → checkbox-BJv9sq-q.js} +1 -1
  80. package/dist/client/assets/{cli-auth-success-BJmu4_R5.js → cli-auth-success-DGLXjlUv.js} +1 -1
  81. package/dist/client/assets/{collection-detail-C0HGpwZc.js → collection-detail-CBwnVygA.js} +1 -1
  82. package/dist/client/assets/{collection-display-button-SCB-OgTo.js → collection-display-button-B58oGez4.js} +1 -1
  83. package/dist/client/assets/{collection-search-DQEO3wjV.js → collection-search-CTKwU4DT.js} +1 -1
  84. package/dist/client/assets/{collection-table-wrapper-BB4sZz_Y.js → collection-table-wrapper-VYn6zPir.js} +1 -1
  85. package/dist/client/assets/{collection-tabs-2lDwWw0l.js → collection-tabs-DM27wkZU.js} +1 -1
  86. package/dist/client/assets/{command-QaF4OmvC.js → command-CMaINJIs.js} +1 -1
  87. package/dist/client/assets/{commerce-onboarding-DFadBZn6.js → commerce-onboarding-DiMa4pyJ.js} +1 -1
  88. package/dist/client/assets/{companions-core-GL_X6eWA.js → companions-core-Bo-W_fm7.js} +1 -1
  89. package/dist/client/assets/{connect-desktop-dialog-ZvXk0_dj.js → connect-desktop-dialog-KqGLsruV.js} +1 -1
  90. package/dist/client/assets/{connection-card-Dv8G2fkf.js → connection-card-p5woNpPL.js} +1 -1
  91. package/dist/client/assets/{connection-detail-DMFBps3Z.js → connection-detail-D6QXgBV2.js} +1 -1
  92. package/dist/client/assets/{connection-form-helpers-wdETwcED.js → connection-form-helpers-BOaetESA.js} +1 -1
  93. package/dist/client/assets/{connections-B_ASGwUK.js → connections-B0RWhk8Q.js} +1 -1
  94. package/dist/client/assets/{decopilot-sse-pool-OfjeaVbD.js → decopilot-sse-pool-DQL401QF.js} +1 -1
  95. package/dist/client/assets/{dialog-C9E3l4IS.js → dialog-DPTAPgNV.js} +1 -1
  96. package/dist/client/assets/{domain-settings-B0RK6WyD.js → domain-settings-mCQtajjn.js} +1 -1
  97. package/dist/client/assets/{drawer-Bb0G_85-.js → drawer-DeXSMxBA.js} +1 -1
  98. package/dist/client/assets/{dropdown-menu-VuIg-h-p.js → dropdown-menu-FPqLLz-n.js} +1 -1
  99. package/dist/client/assets/{empty-state-DQe5vkGu.js → empty-state-xWLZ2eZc.js} +1 -1
  100. package/dist/client/assets/{extract-connection-data-Cd6vD8zx.js → extract-connection-data-Dm0lbsif.js} +1 -1
  101. package/dist/client/assets/{file-explorer-0O2f8UxH.js → file-explorer-IEntfMzq.js} +1 -1
  102. package/dist/client/assets/{file-type-icon-BNXL2Vn9.js → file-type-icon-BWa_J5_r.js} +1 -1
  103. package/dist/client/assets/{files-BigoYGet.js → files-Dvdxw-C4.js} +1 -1
  104. package/dist/client/assets/{form-CtOfgAQ3.js → form-eZMSU-U6.js} +1 -1
  105. package/dist/client/assets/{general-BqqEhOAV.js → general-BSQSVJFY.js} +1 -1
  106. package/dist/client/assets/{github-repo-picker-DYvTm397.js → github-repo-picker-BROJzTPQ.js} +1 -1
  107. package/dist/client/assets/{hooks-CeKluV_o.js → hooks-6uUQw8C_.js} +1 -1
  108. package/dist/client/assets/{index-tsAf0dhZ.js → index-3B7w3S2F.js} +2 -2
  109. package/dist/client/assets/{index-GSr-NenG.js → index-B4zRpWC1.js} +1 -1
  110. package/dist/client/assets/{index-BTMxpebN.js → index-BFFzCRS9.js} +1 -1
  111. package/dist/client/assets/{index-RbJTMKhv.js → index-BKPBegF_.js} +1 -1
  112. package/dist/client/assets/{index-D8mm9--h.js → index-BnPMKhI3.js} +1 -1
  113. package/dist/client/assets/{index-D6aGlAXi.js → index-CZeTMF4a.js} +1 -1
  114. package/dist/client/assets/{index-B6kZkd0S.js → index-C_UKaIla.js} +1 -1
  115. package/dist/client/assets/{index-CH9sttvb.js → index-CoGxwL7l.js} +1 -1
  116. package/dist/client/assets/{index-C3Ynb0Sd.js → index-DHLmUnrM.js} +5 -5
  117. package/dist/client/assets/{index-x4ljvAiA.js → index-Ddeo1WM2.js} +1 -1
  118. package/dist/client/assets/{index-jJVRMwbQ.js → index-DeuS50TV.js} +1 -1
  119. package/dist/client/assets/{index-B189ztSx.js → index-DtqfR5Qd.js} +1 -1
  120. package/dist/client/assets/{index-CZvyAS3p.js → index-DvLE3v8k.js} +1 -1
  121. package/dist/client/assets/{index-Ca0DkdM7.js → index-NdOF7DAS.js} +3 -3
  122. package/dist/client/assets/{index-redirect-Clnt5gvg.js → index-redirect-BMCVjE9O.js} +1 -1
  123. package/dist/client/assets/{input-BhjuvdUF.js → input-zBZ4DgDP.js} +1 -1
  124. package/dist/client/assets/{integration-icon-BYH-vvKp.js → integration-icon-DykNdsSZ.js} +1 -1
  125. package/dist/client/assets/{invite-member-dialog-BCEEBRzw.js → invite-member-dialog-Bdnif9D6.js} +1 -1
  126. package/dist/client/assets/{label-un5WcTpQ.js → label-BEAS39uu.js} +1 -1
  127. package/dist/client/assets/{layout-DhlARmxO.js → layout-BF1SaClV.js} +1 -1
  128. package/dist/client/assets/{login-BLbE10S9.js → login-B7QToRsO.js} +1 -1
  129. package/dist/client/assets/{mcp-oauth-BQgJAE7G.js → mcp-oauth-C5mY9Wco.js} +1 -1
  130. package/dist/client/assets/{members-Cq-gqjR_.js → members-Wh0CTmSG.js} +1 -1
  131. package/dist/client/assets/{monaco-editor-ClbA9JnX.js → monaco-editor-CT21TZSl.js} +1 -1
  132. package/dist/client/assets/{monitoring-stats-row-WM8n5Je8.js → monitoring-stats-row-BOve2eh4.js} +1 -1
  133. package/dist/client/assets/{oauth-callback-D38jGSX9.js → oauth-callback-DyQyeQSC.js} +1 -1
  134. package/dist/client/assets/{oauth-callback-ai-provider-Dzin4xMo.js → oauth-callback-ai-provider-hn0-CvkZ.js} +1 -1
  135. package/dist/client/assets/{onboarding-CDr5n4MZ.js → onboarding-Dl0TNFA_.js} +1 -1
  136. package/dist/client/assets/{org-install-BpUuo3Az.js → org-install-KB-RI8mO.js} +1 -1
  137. package/dist/client/assets/{org-layout-B4wRbgbm.js → org-layout-GoX_k2tJ.js} +1 -1
  138. package/dist/client/assets/{organization-choice-Fdr3aTWy.js → organization-choice-CwNef7oe.js} +1 -1
  139. package/dist/client/assets/{orgs--6BVv1Sy.js → orgs-E9rlvbKV.js} +1 -1
  140. package/dist/client/assets/{page-seo-form-CHkvgUEz.js → page-seo-form-BZ3m9IIS.js} +1 -1
  141. package/dist/client/assets/page-seo-sheet-CHH1sPKT.js +1 -0
  142. package/dist/client/assets/{popover-Bwhodz7Q.js → popover-CW9y-q2H.js} +1 -1
  143. package/dist/client/assets/{post-editor-B6jAjlVr.js → post-editor-Doi2xnhC.js} +1 -1
  144. package/dist/client/assets/{primitives-DUq-XMSu.js → primitives-YSrEbm7N.js} +1 -1
  145. package/dist/client/assets/{profile-BETaQXUq.js → profile-ZLa_zj-v.js} +1 -1
  146. package/dist/client/assets/project-app-view-CVrygiTs.js +1 -0
  147. package/dist/client/assets/record-editor-_m2-vBlx.js +1 -0
  148. package/dist/client/assets/redirect-editor-CBXxSNbY.js +1 -0
  149. package/dist/client/assets/registry-DOgiK96v.js +2 -0
  150. package/dist/client/assets/{registry-layout-BQu29tLU.js → registry-layout-DF8wUvPw.js} +1 -1
  151. package/dist/client/assets/{reports-B_-A0nY-.js → reports-BnJeQ4g2.js} +1 -1
  152. package/dist/client/assets/{require-capability-XiFI3UPl.js → require-capability-C6GCyR0Q.js} +1 -1
  153. package/dist/client/assets/{required-auth-layout-RSPYG868.js → required-auth-layout-DQknUSbe.js} +1 -1
  154. package/dist/client/assets/{reset-password-H_LU6JRa.js → reset-password-BNvf6Xxy.js} +1 -1
  155. package/dist/client/assets/{roles-MBb2OlYf.js → roles-Bf184cYv.js} +1 -1
  156. package/dist/client/assets/{search-input-Bngy_Lhn.js → search-input-BUzTBcnJ.js} +1 -1
  157. package/dist/client/assets/{secrets-7aHDpCaa.js → secrets-Bvjy-FZU.js} +1 -1
  158. package/dist/client/assets/{sections-editor-TnoePPd4.js → sections-editor-DGgqJ-J7.js} +1 -1
  159. package/dist/client/assets/{select-model-BAX8jIVy.js → select-model-Cz0bq4qm.js} +1 -1
  160. package/dist/client/assets/{select-CigP_EOz.js → select-sRWADeqn.js} +1 -1
  161. package/dist/client/assets/{self-tool-result-DblZsq5x.js → self-tool-result-Bfo9nOzY.js} +1 -1
  162. package/dist/client/assets/{seo-editor-IhKlMb1c.js → seo-editor-DdM7NtNr.js} +1 -1
  163. package/dist/client/assets/{settings-layout-BE4m0nq3.js → settings-layout-B9Z77nEt.js} +1 -1
  164. package/dist/client/assets/{settings-section-BK_41ejJ.js → settings-section-CQbeJndy.js} +1 -1
  165. package/dist/client/assets/{shell-controls-CxdIhyeF.js → shell-controls-BO9-QP5U.js} +1 -1
  166. package/dist/client/assets/{shell-layout-BKQmbEiu.js → shell-layout-4MJ9_aLq.js} +1 -1
  167. package/dist/client/assets/{sidebar-CVjKtfcv.js → sidebar-B7kZ9zKG.js} +1 -1
  168. package/dist/client/assets/{skeleton-keH4LhnJ.js → skeleton-DSrLXHTO.js} +1 -1
  169. package/dist/client/assets/{sso-DysqzG13.js → sso-B07-BWTN.js} +1 -1
  170. package/dist/client/assets/{store-DBjyS9bp.js → store-CQRHqjPq.js} +1 -1
  171. package/dist/client/assets/store-registry-CY3beEqC.js +2 -0
  172. package/dist/client/assets/{studio-tools-BVz_1opu.js → studio-tools-B8sW30No.js} +1 -1
  173. package/dist/client/assets/{switch-D1HL8NCt.js → switch-CppAT8uS.js} +1 -1
  174. package/dist/client/assets/{table-DBHuyW7n.js → table-CW4fBcey.js} +1 -1
  175. package/dist/client/assets/{tabs-BECYmtlT.js → tabs-DzYXYhGE.js} +1 -1
  176. package/dist/client/assets/{textarea-5S5WVXg_.js → textarea-BexryihF.js} +1 -1
  177. package/dist/client/assets/{toggle-group-CUbG7099.js → toggle-group-BzvG2qVj.js} +1 -1
  178. package/dist/client/assets/{toolbar-CRaHoAer.js → toolbar-TUI1uFUV.js} +1 -1
  179. package/dist/client/assets/{toolbar-icon-button-CbjY_JSh.js → toolbar-icon-button-XX6J_GcF.js} +1 -1
  180. package/dist/client/assets/{tools-list-D8rpV7nG.js → tools-list-Bpsj2zsa.js} +1 -1
  181. package/dist/client/assets/{tooltip-BJtRk5Mu.js → tooltip-Dh0oD9Np.js} +1 -1
  182. package/dist/client/assets/{use-ai-providers-CcKFBzod.js → use-ai-providers-BIjs_ekM.js} +1 -1
  183. package/dist/client/assets/{use-automations-BbiRSepF.js → use-automations-o0ceSj23.js} +1 -1
  184. package/dist/client/assets/{use-autosave-Bhi8sWBn.js → use-autosave-UT9QD4Ig.js} +1 -1
  185. package/dist/client/assets/{use-capability-wcWMZfGp.js → use-capability-r0dxMobw.js} +1 -1
  186. package/dist/client/assets/{use-clock-tick-2In0zhq2.js → use-clock-tick-DpgZSTVx.js} +1 -1
  187. package/dist/client/assets/{use-collections-B5Fqrjik.js → use-collections-fBsznfOB.js} +1 -1
  188. package/dist/client/assets/{use-connection-CV6UkZ4-.js → use-connection-BAT3TQ2g.js} +1 -1
  189. package/dist/client/assets/{use-copy-BQOdc3Um.js → use-copy-CtuAM4eT.js} +1 -1
  190. package/dist/client/assets/{use-create-virtual-mcp-CLOCQPUQ.js → use-create-virtual-mcp-DppQFiqo.js} +1 -1
  191. package/dist/client/assets/{use-debounced-autosave-BKl6mNix.js → use-debounced-autosave-BQjKkPcA.js} +1 -1
  192. package/dist/client/assets/{use-debounced-value-DZbvsKXZ.js → use-debounced-value-B6KZOzMt.js} +1 -1
  193. package/dist/client/assets/{use-deco-credits-TKA8MJmr.js → use-deco-credits-D8ipRh7Q.js} +1 -1
  194. package/dist/client/assets/{use-decopilot-events-Bn_FoS2M.js → use-decopilot-events-sKy4PGYV.js} +1 -1
  195. package/dist/client/assets/{use-delete-connection-CsIpm5RW.js → use-delete-connection-BYjbULGM.js} +1 -1
  196. package/dist/client/assets/{use-deployment-admin-N51R1CIP.js → use-deployment-admin-E3V_03qw.js} +1 -1
  197. package/dist/client/assets/{use-file-configs-CurvKnHP.js → use-file-configs-BXTwEoph.js} +1 -1
  198. package/dist/client/assets/{use-infinite-scroll-CymXK8ML.js → use-infinite-scroll-DUsa1aU8.js} +1 -1
  199. package/dist/client/assets/{use-join-requests-a314th3F.js → use-join-requests-C4lgEBLL.js} +1 -1
  200. package/dist/client/assets/{use-mcp-client-C9bEGRRw.js → use-mcp-client-B7M85o8B.js} +1 -1
  201. package/dist/client/assets/{use-mcp-tools-ce2c-UQS.js → use-mcp-tools-ZNBa1k65.js} +1 -1
  202. package/dist/client/assets/{use-members-rATq-L_7.js → use-members-D7cW9VTR.js} +1 -1
  203. package/dist/client/assets/{use-mobile-KncnO-Y4.js → use-mobile-CahDHUGA.js} +1 -1
  204. package/dist/client/assets/{use-navigate-to-agent-DRNpNY70.js → use-navigate-to-agent-Dr4UXoYr.js} +1 -1
  205. package/dist/client/assets/{use-org-auth-client-GdmgT9wq.js → use-org-auth-client-DnwU6IUJ.js} +1 -1
  206. package/dist/client/assets/{use-org-sso-DwbN35nZ.js → use-org-sso-CBi5gUYV.js} +1 -1
  207. package/dist/client/assets/{use-organization-roles-D0kusKYD.js → use-organization-roles-CmudBkvB.js} +1 -1
  208. package/dist/client/assets/{use-organization-settings-Olb5B_bf.js → use-organization-settings-CIZY8cRV.js} +1 -1
  209. package/dist/client/assets/{use-registry-connections-DJxK9PkD.js → use-registry-connections-CwKNMwm1.js} +1 -1
  210. package/dist/client/assets/{use-secrets-CUAuKpwV.js → use-secrets-BPudMz_v.js} +1 -1
  211. package/dist/client/assets/{use-status-sounds-uTxfq7c5.js → use-status-sounds-BJrjgi4h.js} +1 -1
  212. package/dist/client/assets/{use-view-mode-NVgkn60q.js → use-view-mode-BEbVo7vR.js} +1 -1
  213. package/dist/client/assets/{use-virtual-mcp-B6fjLcyV.js → use-virtual-mcp-DjphJcO_.js} +1 -1
  214. package/dist/client/assets/useInfiniteQuery-B5xx8bPh.js +1 -0
  215. package/dist/client/assets/{useRouterState-DAeFPRrM.js → useRouterState-Cao37saq.js} +1 -1
  216. package/dist/client/assets/useSuspenseInfiniteQuery-CwQHCH51.js +1 -0
  217. package/dist/client/assets/{users-CL5a5xRI.js → users-bGpaj6Ap.js} +1 -1
  218. package/dist/client/assets/{variant-calendar-BPf4bxiM.js → variant-calendar-Z1wPY-DB.js} +1 -1
  219. package/dist/client/assets/{view-mode-toggle-n7dAjiaw.js → view-mode-toggle-Uja7CKAQ.js} +1 -1
  220. package/dist/client/index.html +1 -1
  221. package/dist/server/cli.js +2 -2
  222. package/dist/server/server.js +2 -2
  223. package/package.json +1 -1
  224. package/dist/client/assets/app-editor-C9Y3sc8N.js +0 -1
  225. package/dist/client/assets/page-seo-sheet-BuWChHpa.js +0 -1
  226. package/dist/client/assets/project-app-view-1yFtqXKM.js +0 -1
  227. package/dist/client/assets/record-editor-BZhL8fiP.js +0 -1
  228. package/dist/client/assets/redirect-editor-DK2UNWLq.js +0 -1
  229. package/dist/client/assets/registry-BIR_p5g8.js +0 -2
  230. package/dist/client/assets/store-registry-DMIHGlwz.js +0 -2
  231. package/dist/client/assets/useInfiniteQuery-D5rdHSqa.js +0 -1
  232. package/dist/client/assets/useSuspenseInfiniteQuery-BzELVuYv.js +0 -1
@@ -84512,7 +84512,7 @@ ${$}`;h(N);return}if(E(null,y),t.strategy==="count"){if(w--,w===0)h()}if(t.strat
84512
84512
  `);function h(_){if(t===void 0)return!0;let v=oM(_),D=v&&oM(t)?Qmu(t):t,n=v?Qmu(_):zmu(_),O=_Ct(D,n);return O===""||!O.startsWith("..")&&!dCt(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(j1i)},reconcile(){let _=Date.now();for(let v of l.all().map(j1i)){if(!h(v.sandboxPath)){c.run({$handle:v.handle,$now:_});continue}if(!oM(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(j1i)},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||!oM(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(!O2(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=O2(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=Rmu(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}$Ct(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=j1i(v),n=0,O=null;if(oM(D.sandboxPath)&&O2(D.sandboxPath,["rev-parse","--is-inside-work-tree"]).ok){let N=O2(D.sandboxPath,["status","--porcelain"]);if(N.ok){let y=N.stdout.trim();n=y===""?0:y.split(`
84513
84513
  `).length}if(D.branch!==null&&D.branch.trim()!=="")O=Rmu(D.sandboxPath,D.branch)}return{handle:D.handle,branch:D.branch,sandboxPath:D.sandboxPath,dirtyCount:n,merged:O}},close(){u.close()}}}var KRi=()=>{};function gCt(i,u){return u?[["umount","-f",i]]:[["fusermount","-uz",i],["umount","-l",i]]}function Cmu(i,u){if(process.platform==="win32")return;for(let t of gCt(i,u))if(Bun.spawnSync(t,{stdout:"ignore",stderr:"ignore",timeout:5000}).exitCode===0)break}var Mmu=()=>{};import{existsSync as OCt,readdirSync as NCt}from"fs";import{rm as yCt}from"fs/promises";import{join as qmu}from"path";async function Vmu(i,u={}){let t=u.detach??ZCt,f=u.exists??OCt,l=u.readdir??(($)=>NCt($)),c=u.rm??(($)=>yCt($,{recursive:!0,force:!0})),E=qmu(i,"org");if(f(E))for(let $ of l(E))t(qmu(E,$));await c(i)}var ZCt=(i)=>Cmu(i,process.platform==="darwin");var rmu=g(()=>{Mmu()});import{join as TCt}from"path";function mmu(i){let u=i.purge??Vmu;return{stopSandbox(t){return i.provider.deleteSandbox(t)},inspectSandbox(t){return i.registry.inspect(t)},async removeSandbox(t){try{return await U1(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??TCt(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 emu=g(()=>{y4();rmu()});import{randomBytes as BCt}from"crypto";import{mkdir as FCt}from"fs/promises";import{createServer as UCt}from"net";import{join as PCt}from"path";function amu(i,u){return Error(`sandbox failed to start: ${i}`,{cause:u})}function ACt(i){if(!(i instanceof Error))return!1;return i.name==="TimeoutError"||/timed out|timeout|operation was aborted|aborted/i.test(i.message)}function omu(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 ICt(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 xCt(i){return{repoCloneUrl:i.repo?.cloneUrl??null,branch:i.repo?.branch??null,projectName:ICt(i.repo?.cloneUrl)}}function smu(i){let u=i.maxSandboxes??20,t=new Map,f=i.pickPort??kCt,l=i.fetchImpl??fetch,c=i.resolvePreviewUrl??((n,O)=>`http://127.0.0.1:${O}`),E=(n)=>PCt(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=xCt(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 FCt(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=BCt(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 amu("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 amu(ACt(k)?"configuration timed out":"the sandbox rejected its configuration",k)}}catch(G){if(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:omu(G),sandboxPath:N,projectName:O.projectName,branch:O.branch}),$({handle:n.handle,status:"failed",sandboxPath:N,port:null,previewUrl:null,...O,error:omu(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 kCt(){return new Promise((i,u)=>{let t=UCt();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 pmu=()=>{};import{randomUUID as GCt}from"crypto";import{hostname as SCt}from"os";async function ieu(i){let u=SCt()||void 0;i.monitor?.onMachine?.(u??"this machine");let t=Xbu(i.dataDir,{outFd:i.logFd,perSandboxLog:i.perSandboxLogs,hotReload:i.hotReload}),f=J1i({path:K1i(i.dataDir),managedSandboxRoot:`${i.dataDir}/sandboxes`}),l=!1,c=()=>{if(l)return;l=!0;try{f.close()}catch{}};try{let E=0,$=smu({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:GCt(),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 Qbu(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},li=_h(J.operator??null);if(li)Y.operator=li;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 c2(`http://127.0.0.1:${k}`,W,Y)},waitForHealth:async(k)=>{await Kli(`http://127.0.0.1:${k}`)},maxSandboxes:20,onEvent:i.monitor?.onEvent}),w=await Imu({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=Hbu({provider:$}),h=async()=>{let k=await l2({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 Wmu(i.dataDir),v=process.env.npm_package_version??"0.0.0",D=await jRi(),n=Xmu(D,{onChange:(k)=>{console.log(`[link-daemon] capabilities detected: +${k.join(",")} (now: ${D.join(",")})`)}}),O=Zzi({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 nmu(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(`
84514
84514
  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=mmu({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 ueu=g(()=>{vzi();TM();Lbu();zbu();Rbu();Tzi();gmu();xmu();Lmu();Ymu();ZM();KRi();emu();pmu()});function JRi(i){return i.map((u)=>typeof u==="string"?u:String(u)).join(" ")}import{createServer as jCt}from"net";async function JCt(i){for(let u of KCt)if(await XRi(i,u))return u;return null}async function teu(i,{intervalMs:u=1000}={}){for(;;){let t=await JCt(i);if(t)return t;await O0(u)}}function XRi(i,u){return new Promise((t)=>{let f=jCt();f.once("error",(l)=>{t(l.code==="EADDRINUSE")}),f.listen(i,u,()=>{f.close(()=>t(!1))})})}var KCt;var LRi=g(()=>{y4();KCt=["localhost","127.0.0.1","0.0.0.0"]});function feu(i){return typeof i==="object"&&i!==null&&"code"in i&&i.code==="EADDRINUSE"}function XCt(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 leu(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`:","",` ${XCt(i,u)}`].join(`
84515
- `)}var WRi;var ceu=g(()=>{WRi=class WRi extends Error{port;code="EADDRINUSE";constructor(i){super(`Port ${i} is already in use.`);this.port=i;this.name="PortInUseError"}}});var oL;var X1i=g(()=>{oL={name:"decocms",version:"4.72.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 sM={};Li(sM,{printBanner:()=>YCt,bannerLines:()=>Eeu,BANNER_LINES:()=>L1i,BANNER_GRADIENT:()=>W1i});function WCt(i){let u=Number.parseInt(i.slice(1),16);return[u>>16&255,u>>8&255,u&255]}function Eeu(i){let u=L1i.map((t,f)=>{let[l,c,E]=WCt(W1i[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 YCt(i){console.log("");for(let u of Eeu(i))console.log(u);console.log("")}var L1i,W1i;var sL=g(()=>{L1i=[" \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 "],W1i=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"]});import{Box as QCt,Text as $eu}from"ink";import{jsx as zCt,jsxs as weu}from"react/jsx-runtime";function Y1i({version:i}){return weu(QCt,{flexDirection:"column",marginTop:1,children:[L1i.map((u,t)=>zCt($eu,{color:W1i[t],children:u},t)),weu($eu,{dimColor:!0,children:[" v",i]})]})}var YRi=g(()=>{sL()});function deu(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 pL(i){return[...i.values()].map((u)=>u.handle).sort((u,t)=>u.localeCompare(t))}function heu(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 _eu(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 RRi={};Li(RRi,{subscribeLinkState:()=>QRi,setSelectedHandle:()=>zRi,setRemoving:()=>H1i,setPersistedSandboxes:()=>eCt,setPendingConfirm:()=>iq,setMachine:()=>qCt,setLogPath:()=>rCt,setLinkActions:()=>mCt,setIngress:()=>MCt,setDaemonError:()=>VCt,setClusterUrl:()=>CCt,setCluster:()=>bCt,setActionError:()=>z1i,resetLinkStateForTests:()=>oCt,removeSandboxRow:()=>HRi,pushSandboxEvent:()=>aCt,getLinkState:()=>pM,applySandboxEvent:()=>veu});function RCt(i){return i==="spawning"||i==="ready"||i==="failed"}function veu(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 Deu(){return{cluster:"connecting",clusterUrl:null,ingressUrl:null,ingressPort:null,machine:null,cap:HCt,sandboxes:new Map,daemonError:null,logPath:null,selectedHandle:null,pendingConfirm:null,removingHandles:new Set,actionError:null,actions:null}}function Q$(){for(let i of Q1i)i()}function pM(){return cf}function QRi(i){return Q1i.add(i),()=>Q1i.delete(i)}function bCt(i){cf={...cf,cluster:i},Q$()}function CCt(i){cf={...cf,clusterUrl:i},Q$()}function MCt(i,u){cf={...cf,ingressPort:i,ingressUrl:u},Q$()}function qCt(i){cf={...cf,machine:i},Q$()}function VCt(i){cf={...cf,daemonError:i},Q$()}function rCt(i){cf={...cf,logPath:i},Q$()}function zRi(i){cf={...cf,selectedHandle:i},Q$()}function iq(i){cf={...cf,pendingConfirm:i},Q$()}function z1i(i){cf={...cf,actionError:i},Q$()}function H1i(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 mCt(i){cf={...cf,actions:i},Q$()}function HRi(i){let u=pL(cf.sandboxes),t=_eu(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 eCt(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(RCt(f.status))u.set(t,f);cf={...cf,sandboxes:u},Q$()}function aCt(i){cf={...cf,sandboxes:veu(cf.sandboxes,i)},Q$()}function oCt(){cf=Deu(),Q1i.clear()}var HCt=20,cf,Q1i;var uq=g(()=>{cf=Deu(),Q1i=new Set});import{spawn as sCt}from"child_process";function pCt(i){if(i==="darwin")return"open";if(i==="win32")return"start";return"xdg-open"}function neu(i,u=process.platform){let t=pCt(u);try{sCt(t,[i],{stdio:"ignore",detached:!0}).unref()}catch{}}var geu=()=>{};function Oeu(i,u={}){let t=u.openUrl??neu,f=pM(),l=pL(f.sandboxes),c=f.selectedHandle!==null&&l.includes(f.selectedHandle)?f.selectedHandle:l[0]??null,E=f.actions;switch(i.type){case"move":zRi(heu(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);z1i(null),iq({handle:c,branch:$?.branch??w?.branch??null,dirtyCount:$?.dirtyCount??0,merged:$?.merged??null});return}case"confirmYes":{let $=f.pendingConfirm;if(iq(null),$===null||!E)return;H1i($.handle,!0),E.removeSandbox($.handle).then((w)=>{if(w.ok)HRi($.handle);else H1i($.handle,!1),z1i(w.error)});return}case"confirmNo":iq(null);return;case"quit":if(E)E.quit();return}}var Neu=g(()=>{uq();geu()});function yeu(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 Zeu={};Li(Zeu,{LinkApp:()=>fMt});import{Box as Ml,Text as h1,useInput as iMt}from"ink";import{useSyncExternalStore as uMt}from"react";import{jsx as Gf,jsxs as Fh}from"react/jsx-runtime";function tMt(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 fMt(){let i=uMt(QRi,pM),u=[...i.sandboxes.values()].sort((l,c)=>l.handle.localeCompare(c.handle)),t=pL(i.sandboxes),f=i.selectedHandle!==null&&t.includes(i.selectedHandle)?i.selectedHandle:t[0]??null;return iMt((l,c)=>{let E=yeu(l,c,i.pendingConfirm!==null);if(E!==null)Oeu(E)}),Fh(Ml,{flexDirection:"column",children:[Gf(Y1i,{version:oL.version}),Gf(Ml,{marginBottom:1,children:Gf(h1,{dimColor:!0,children:"\u2500".repeat(80)})}),Gf(Ml,{children:i.cluster==="linked"?Fh(h1,{color:"green",children:["\u2713 Connected to ",i.clusterUrl??"deco"]}):i.cluster==="connecting"?Fh(h1,{color:"yellow",children:["\u25CC Connecting to ",i.clusterUrl??"deco","\u2026"]}):Fh(h1,{color:"red",children:["\u2717 Disconnected from ",i.clusterUrl??"deco"]})}),Gf(Ml,{children:i.ingressUrl?Fh(h1,{color:"green",children:["\u2713 Serving at ",i.ingressUrl]}):Gf(h1,{dimColor:!0,children:"\u25CC Starting local server\u2026"})}),Gf(Ml,{marginBottom:1,children:Gf(h1,{dimColor:!0,children:`${"Computer".padEnd(16)}${i.machine??"this computer"} \xB7 ${u.length} of ${i.cap} previews`})}),u.length===0?Gf(h1,{dimColor:!0,children:"No previews running yet."}):Fh(Ml,{flexDirection:"column",children:[Fh(Ml,{children:[Gf(Ml,{width:2,flexShrink:0}),Gf(Ml,{width:iW.project,flexShrink:0,marginRight:1,children:Gf(h1,{dimColor:!0,wrap:"truncate-end",children:"PROJECT"})}),Gf(Ml,{width:iW.branch,flexShrink:0,marginRight:1,children:Gf(h1,{dimColor:!0,wrap:"truncate-end",children:"BRANCH"})}),Gf(Ml,{width:iW.status,flexShrink:0,marginRight:1,children:Gf(h1,{dimColor:!0,wrap:"truncate-end",children:"STATUS"})}),Gf(Ml,{flexGrow:1,children:Gf(h1,{dimColor:!0,wrap:"truncate-end",children:"PREVIEW URL"})})]}),u.map((l)=>{let c=tMt(l,i.removingHandles.has(l.handle)),E=l.handle===f;return Fh(Ml,{children:[Gf(Ml,{width:2,flexShrink:0,children:Gf(h1,{color:"cyan",children:E?"\u203A":" "})}),Gf(Ml,{width:iW.project,flexShrink:0,marginRight:1,children:Gf(h1,{bold:E,wrap:"truncate-end",children:l.projectName??l.handle})}),Gf(Ml,{width:iW.branch,flexShrink:0,marginRight:1,children:Gf(h1,{bold:E,wrap:"truncate-end",children:l.branch??"\u2014"})}),Gf(Ml,{width:iW.status,flexShrink:0,marginRight:1,children:Gf(h1,{color:c.color,bold:E,wrap:"truncate-end",children:c.text})}),Gf(Ml,{flexGrow:1,children:Gf(h1,{dimColor:!0,wrap:"truncate-end",children:l.previewUrl??"\u2014"})})]},l.handle)})]}),i.daemonError?Gf(Ml,{marginTop:1,children:Fh(h1,{color:"red",children:["\u26A0 ",i.daemonError]})}):null,i.logPath?Gf(Ml,{marginTop:1,children:Fh(h1,{dimColor:!0,children:["Logs: ",i.logPath]})}):null,i.pendingConfirm?Gf(Ml,{marginTop:1,children:Gf(h1,{color:"yellow",children:deu(i.pendingConfirm)})}):null,i.actionError?Gf(Ml,{marginTop:1,children:Fh(h1,{color:"red",children:["\u2717 ",i.actionError]})}):null,Gf(Ml,{marginTop:1,children:Gf(h1,{dimColor:!0,children:"\u2191\u2193 move \xB7 s stop \xB7 d delete \xB7 o open \xB7 q quit"})})]})}var iW;var Teu=g(()=>{X1i();YRi();Neu();uq();iW={project:18,branch:22,status:14}});var Beu={};Li(Beu,{runLinkCommand:()=>_Mt});import{closeSync as lMt,mkdirSync as cMt,openSync as EMt,writeSync as $Mt}from"fs";import{homedir as wMt}from"os";import{join as bRi}from"path";function dMt(i,u){let t={log:console.log,warn:console.warn,error:console.error},f=(l)=>{if(u===void 0)return;try{$Mt(u,`${JRi(l)}
84515
+ `)}var WRi;var ceu=g(()=>{WRi=class WRi extends Error{port;code="EADDRINUSE";constructor(i){super(`Port ${i} is already in use.`);this.port=i;this.name="PortInUseError"}}});var oL;var X1i=g(()=>{oL={name:"decocms",version:"4.72.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 sM={};Li(sM,{printBanner:()=>YCt,bannerLines:()=>Eeu,BANNER_LINES:()=>L1i,BANNER_GRADIENT:()=>W1i});function WCt(i){let u=Number.parseInt(i.slice(1),16);return[u>>16&255,u>>8&255,u&255]}function Eeu(i){let u=L1i.map((t,f)=>{let[l,c,E]=WCt(W1i[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 YCt(i){console.log("");for(let u of Eeu(i))console.log(u);console.log("")}var L1i,W1i;var sL=g(()=>{L1i=[" \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 "],W1i=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"]});import{Box as QCt,Text as $eu}from"ink";import{jsx as zCt,jsxs as weu}from"react/jsx-runtime";function Y1i({version:i}){return weu(QCt,{flexDirection:"column",marginTop:1,children:[L1i.map((u,t)=>zCt($eu,{color:W1i[t],children:u},t)),weu($eu,{dimColor:!0,children:[" v",i]})]})}var YRi=g(()=>{sL()});function deu(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 pL(i){return[...i.values()].map((u)=>u.handle).sort((u,t)=>u.localeCompare(t))}function heu(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 _eu(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 RRi={};Li(RRi,{subscribeLinkState:()=>QRi,setSelectedHandle:()=>zRi,setRemoving:()=>H1i,setPersistedSandboxes:()=>eCt,setPendingConfirm:()=>iq,setMachine:()=>qCt,setLogPath:()=>rCt,setLinkActions:()=>mCt,setIngress:()=>MCt,setDaemonError:()=>VCt,setClusterUrl:()=>CCt,setCluster:()=>bCt,setActionError:()=>z1i,resetLinkStateForTests:()=>oCt,removeSandboxRow:()=>HRi,pushSandboxEvent:()=>aCt,getLinkState:()=>pM,applySandboxEvent:()=>veu});function RCt(i){return i==="spawning"||i==="ready"||i==="failed"}function veu(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 Deu(){return{cluster:"connecting",clusterUrl:null,ingressUrl:null,ingressPort:null,machine:null,cap:HCt,sandboxes:new Map,daemonError:null,logPath:null,selectedHandle:null,pendingConfirm:null,removingHandles:new Set,actionError:null,actions:null}}function Q$(){for(let i of Q1i)i()}function pM(){return cf}function QRi(i){return Q1i.add(i),()=>Q1i.delete(i)}function bCt(i){cf={...cf,cluster:i},Q$()}function CCt(i){cf={...cf,clusterUrl:i},Q$()}function MCt(i,u){cf={...cf,ingressPort:i,ingressUrl:u},Q$()}function qCt(i){cf={...cf,machine:i},Q$()}function VCt(i){cf={...cf,daemonError:i},Q$()}function rCt(i){cf={...cf,logPath:i},Q$()}function zRi(i){cf={...cf,selectedHandle:i},Q$()}function iq(i){cf={...cf,pendingConfirm:i},Q$()}function z1i(i){cf={...cf,actionError:i},Q$()}function H1i(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 mCt(i){cf={...cf,actions:i},Q$()}function HRi(i){let u=pL(cf.sandboxes),t=_eu(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 eCt(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(RCt(f.status))u.set(t,f);cf={...cf,sandboxes:u},Q$()}function aCt(i){cf={...cf,sandboxes:veu(cf.sandboxes,i)},Q$()}function oCt(){cf=Deu(),Q1i.clear()}var HCt=20,cf,Q1i;var uq=g(()=>{cf=Deu(),Q1i=new Set});import{spawn as sCt}from"child_process";function pCt(i){if(i==="darwin")return"open";if(i==="win32")return"start";return"xdg-open"}function neu(i,u=process.platform){let t=pCt(u);try{sCt(t,[i],{stdio:"ignore",detached:!0}).unref()}catch{}}var geu=()=>{};function Oeu(i,u={}){let t=u.openUrl??neu,f=pM(),l=pL(f.sandboxes),c=f.selectedHandle!==null&&l.includes(f.selectedHandle)?f.selectedHandle:l[0]??null,E=f.actions;switch(i.type){case"move":zRi(heu(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);z1i(null),iq({handle:c,branch:$?.branch??w?.branch??null,dirtyCount:$?.dirtyCount??0,merged:$?.merged??null});return}case"confirmYes":{let $=f.pendingConfirm;if(iq(null),$===null||!E)return;H1i($.handle,!0),E.removeSandbox($.handle).then((w)=>{if(w.ok)HRi($.handle);else H1i($.handle,!1),z1i(w.error)});return}case"confirmNo":iq(null);return;case"quit":if(E)E.quit();return}}var Neu=g(()=>{uq();geu()});function yeu(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 Zeu={};Li(Zeu,{LinkApp:()=>fMt});import{Box as Ml,Text as h1,useInput as iMt}from"ink";import{useSyncExternalStore as uMt}from"react";import{jsx as Gf,jsxs as Fh}from"react/jsx-runtime";function tMt(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 fMt(){let i=uMt(QRi,pM),u=[...i.sandboxes.values()].sort((l,c)=>l.handle.localeCompare(c.handle)),t=pL(i.sandboxes),f=i.selectedHandle!==null&&t.includes(i.selectedHandle)?i.selectedHandle:t[0]??null;return iMt((l,c)=>{let E=yeu(l,c,i.pendingConfirm!==null);if(E!==null)Oeu(E)}),Fh(Ml,{flexDirection:"column",children:[Gf(Y1i,{version:oL.version}),Gf(Ml,{marginBottom:1,children:Gf(h1,{dimColor:!0,children:"\u2500".repeat(80)})}),Gf(Ml,{children:i.cluster==="linked"?Fh(h1,{color:"green",children:["\u2713 Connected to ",i.clusterUrl??"deco"]}):i.cluster==="connecting"?Fh(h1,{color:"yellow",children:["\u25CC Connecting to ",i.clusterUrl??"deco","\u2026"]}):Fh(h1,{color:"red",children:["\u2717 Disconnected from ",i.clusterUrl??"deco"]})}),Gf(Ml,{children:i.ingressUrl?Fh(h1,{color:"green",children:["\u2713 Serving at ",i.ingressUrl]}):Gf(h1,{dimColor:!0,children:"\u25CC Starting local server\u2026"})}),Gf(Ml,{marginBottom:1,children:Gf(h1,{dimColor:!0,children:`${"Computer".padEnd(16)}${i.machine??"this computer"} \xB7 ${u.length} of ${i.cap} previews`})}),u.length===0?Gf(h1,{dimColor:!0,children:"No previews running yet."}):Fh(Ml,{flexDirection:"column",children:[Fh(Ml,{children:[Gf(Ml,{width:2,flexShrink:0}),Gf(Ml,{width:iW.project,flexShrink:0,marginRight:1,children:Gf(h1,{dimColor:!0,wrap:"truncate-end",children:"PROJECT"})}),Gf(Ml,{width:iW.branch,flexShrink:0,marginRight:1,children:Gf(h1,{dimColor:!0,wrap:"truncate-end",children:"BRANCH"})}),Gf(Ml,{width:iW.status,flexShrink:0,marginRight:1,children:Gf(h1,{dimColor:!0,wrap:"truncate-end",children:"STATUS"})}),Gf(Ml,{flexGrow:1,children:Gf(h1,{dimColor:!0,wrap:"truncate-end",children:"PREVIEW URL"})})]}),u.map((l)=>{let c=tMt(l,i.removingHandles.has(l.handle)),E=l.handle===f;return Fh(Ml,{children:[Gf(Ml,{width:2,flexShrink:0,children:Gf(h1,{color:"cyan",children:E?"\u203A":" "})}),Gf(Ml,{width:iW.project,flexShrink:0,marginRight:1,children:Gf(h1,{bold:E,wrap:"truncate-end",children:l.projectName??l.handle})}),Gf(Ml,{width:iW.branch,flexShrink:0,marginRight:1,children:Gf(h1,{bold:E,wrap:"truncate-end",children:l.branch??"\u2014"})}),Gf(Ml,{width:iW.status,flexShrink:0,marginRight:1,children:Gf(h1,{color:c.color,bold:E,wrap:"truncate-end",children:c.text})}),Gf(Ml,{flexGrow:1,children:Gf(h1,{dimColor:!0,wrap:"truncate-end",children:l.previewUrl??"\u2014"})})]},l.handle)})]}),i.daemonError?Gf(Ml,{marginTop:1,children:Fh(h1,{color:"red",children:["\u26A0 ",i.daemonError]})}):null,i.logPath?Gf(Ml,{marginTop:1,children:Fh(h1,{dimColor:!0,children:["Logs: ",i.logPath]})}):null,i.pendingConfirm?Gf(Ml,{marginTop:1,children:Gf(h1,{color:"yellow",children:deu(i.pendingConfirm)})}):null,i.actionError?Gf(Ml,{marginTop:1,children:Fh(h1,{color:"red",children:["\u2717 ",i.actionError]})}):null,Gf(Ml,{marginTop:1,children:Gf(h1,{dimColor:!0,children:"\u2191\u2193 move \xB7 s stop \xB7 d delete \xB7 o open \xB7 q quit"})})]})}var iW;var Teu=g(()=>{X1i();YRi();Neu();uq();iW={project:18,branch:22,status:14}});var Beu={};Li(Beu,{runLinkCommand:()=>_Mt});import{closeSync as lMt,mkdirSync as cMt,openSync as EMt,writeSync as $Mt}from"fs";import{homedir as wMt}from"os";import{join as bRi}from"path";function dMt(i,u){let t={log:console.log,warn:console.warn,error:console.error},f=(l)=>{if(u===void 0)return;try{$Mt(u,`${JRi(l)}
84516
84516
  `)}catch{}};return console.log=(...l)=>f(l),console.warn=(...l)=>f(l),console.error=(...l)=>{f(l),i(JRi(l))},()=>{console.log=t.log,console.warn=t.warn,console.error=t.error}}async function hMt(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 _Mt(i={}){let u=i.port??5174,t=i.dataDir??process.env.DATA_DIR??process.env.DECOCMS_HOME??bRi(wMt(),"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 XRi(u,"127.0.0.1"))throw new WRi(u);let w=bRi(t,"sandboxes");E=J1i({path:K1i(t),managedSandboxRoot:w});let d=await kli({dataDir:t,intent:"Link",target:f});if(process.env.DECOCMS_LINK_MANAGED!=="1")await hMt(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(() => (Teu(),Zeu)),{pushSandboxEvent:y,setCluster:Z,setClusterUrl:T,setDaemonError:B,setIngress:F,setLogPath:A,setMachine:G,setPersistedSandboxes:I}=await Promise.resolve().then(() => (uq(),RRi));cMt(t,{recursive:!0});let k=bRi(t,"link.log");c=EMt(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=dMt(B,c),n(O(N),{patchConsole:!1})}else if(i.banner!==!1){let{printBanner:n}=await Promise.resolve().then(() => (sL(),sM));n(i.version??"0.0.0")}$();let v=process.env.DECOCMS_LINK_MANAGED!=="1",D=await ieu({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(() => (uq(),RRi));n({stopSandbox:D.stopSandbox,removeSandbox:D.removeSandbox,inspectSandbox:D.inspectSandbox,quit:D.stop})}return await D.stopped}catch(w){return l?.(),console.error(feu(w)?leu(u):w instanceof Error?w.message:String(w)),1}finally{if(l?.(),c!==void 0)try{lMt(c)}catch{}$()}}var Feu=g(()=>{_zi();ueu();LRi();ceu();KRi()});var mRi={};Li(mRi,{resolveDevLinkClusterUrl:()=>gMt,populateDevLinkToxiProxy:()=>keu,isDevLinkToxiProxyEnabled:()=>nMt,ensureDevLinkToxiProxy:()=>TMt,buildDevLinkToxiProxyConfig:()=>Ieu,DEV_LINK_TOXIPROXY_SERVICE_NAME:()=>Peu,DEV_LINK_TOXIPROXY_PROXY_NAME:()=>Aeu});function nMt(i=process.env){return i.DECO_DEV_LINK_TOXIPROXY==="1"}function CRi(i,u){if(!Number.isInteger(i)||i<1||i>65535)throw Error(`${u} must be an integer port in 1..65535`);return i}function Ieu(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=CRi(i.apiPort,"apiPort"),f=CRi(i.listenPort,"listenPort");if(u.port.length===0)throw Error("serverUrl must include an explicit valid port");let l=CRi(Number.parseInt(u.port,10),"upstreamPort"),c=`http://127.0.0.1:${l}`,E=`http://127.0.0.1:${f}`;return{serviceName:Peu,proxyName:Aeu,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 gMt(i){return i.toxiproxy?.clusterUrl??i.serverUrl}async function MRi(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 rRi(i){if(i instanceof Error)return i.name==="Error"?i.message:`${i.name}: ${i.message}`;return String(i)}function xeu(i){if(!(i instanceof Error))return!1;if(i.name==="TimeoutError")return!0;return xeu(i.cause)}async function qRi(i,u,t,f){try{return await i(t,f)}catch(l){throw Error(`ToxiProxy ${u} failed for ${t}: ${rRi(l)}`,{cause:l})}}async function keu(i,u=fetch){let t=`${i.apiUrl}/reset`,f=await qRi(u,"reset",t,{method:"POST"});await MRi(f,"reset",t);let l=`${i.apiUrl}/populate`,c=await qRi(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 MRi(c,"populate",l)}async function OMt(i,u){let t=`${i.apiUrl}/version`;try{await U1(async()=>{let f=await qRi(u,"readiness check",t,{method:"GET",signal:AbortSignal.timeout(DMt)});await MRi(f,"readiness check",t)},{maxAttempts:vMt,minTimeout:Ueu,maxTimeout:Ueu,multiplier:1,jitter:0,isRetriable:(f)=>!xeu(f)})}catch(f){let l=f instanceof Wc?f.cause:f;throw Error(`ToxiProxy API did not become ready at ${t}: ${rRi(l)}`,{cause:l})}}async function NMt(i){if(i===null)return"";return await new Response(i).text()}async function VRi(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}): ${rRi($)}`,{cause:$})}})(),[l,c]=await Promise.all([f.exited,NMt(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 yMt(i,u){let t=`deco-dev-link-toxiproxy-${i}`;await VRi(["rm","-f",t],{ignoreFailure:!0}),await VRi(["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 ZMt(i,u){let t=`deco-dev-link-toxiproxy-${i}`;await VRi(["rm","-f",t],{ignoreFailure:!0})}async function TMt(i){let u=Ieu(i),t=i.startDaemon??yMt,f=i.stopDaemon??(i.startDaemon===void 0?ZMt:void 0);await t(i.apiPort,i.listenPort);let l=i.fetchImpl??fetch;try{await OMt(u,l),await keu(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 Peu="ToxiProxy",Aeu="dev_link_studio",vMt=20,Ueu=100,DMt=100;var eRi=g(()=>{y4()});var Geu={};Li(Geu,{migrateBetterAuth:()=>aRi});import{getMigrations as BMt}from"better-auth/db";import{sso as FMt}from"@better-auth/sso";import{organization as UMt}from"@decocms/better-auth/plugins";import{admin as PMt,apiKey as AMt,jwt as IMt,magicLink as xMt,mcp as kMt,openAPI as GMt}from"better-auth/plugins";import{emailOTP as SMt}from"better-auth/plugins/email-otp";async function aRi(i){let t={database:DM(i||i2()),plugins:[UMt({dynamicAccessControl:{enabled:!0,enableCustomResources:!0}}),PMt(),AMt(),IMt(),GMt(),kMt({loginPage:"/login"}),FMt(),xMt({sendMagicLink:async()=>{}}),SMt({sendVerificationOTP:async()=>{}})]},{toBeAdded:f,toBeCreated:l,runMigrations:c}=await BMt(t);if(!f.length&&!l.length)return"up to date";return await c(),`${l.length+f.length} table(s) migrated`}var oRi=g(()=>{lE()});var sRi={};Li(sRi,{up:()=>jMt,down:()=>KMt});import{sql as $v}from"kysely";async function jMt(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 KMt(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 Seu=()=>{};var pRi={};Li(pRi,{up:()=>JMt,down:()=>XMt});import{sql as jeu}from"kysely";async function JMt(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(jeu`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(u)=>u.notNull().defaultTo(jeu`CURRENT_TIMESTAMP`)).execute()}async function XMt(i){await i.schema.dropTable("organization_settings").execute()}var Keu=()=>{};var ibi={};Li(ibi,{up:()=>LMt,down:()=>WMt});async function LMt(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 WMt(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 ubi={};Li(ubi,{up:()=>YMt,down:()=>QMt});async function YMt(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 QMt(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 tbi={};Li(tbi,{up:()=>zMt,down:()=>HMt});async function zMt(i){await i.schema.alterTable("connections").addColumn("configuration_state","text").execute(),await i.schema.alterTable("connections").addColumn("configuration_scopes","text").execute()}async function HMt(i){await i.schema.alterTable("connections").dropColumn("configuration_state").execute(),await i.schema.alterTable("connections").dropColumn("configuration_scopes").execute()}var fbi={};Li(fbi,{up:()=>bMt,down:()=>CMt});import{sql as RMt}from"kysely";async function bMt(i){await i.schema.alterTable("organization_settings").addColumn("sidebar_items",RMt`text`).execute()}async function CMt(i){await i.schema.alterTable("organization_settings").dropColumn("sidebar_items").execute()}var Jeu=()=>{};var lbi={};Li(lbi,{up:()=>MMt,down:()=>qMt});async function MMt(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 qMt(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 cbi={};Li(cbi,{up:()=>VMt,down:()=>rMt});import{sql as tq}from"kysely";async function VMt(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(tq`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(u)=>u.notNull().defaultTo(tq`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(tq`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(u)=>u.notNull().defaultTo(tq`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(tq`CURRENT_TIMESTAMP`)).execute(),await i.schema.createIndex("idx_events_org_status").on("events").columns(["organization_id","status"]).execute(),await i.schema.createIndex("idx_events_source").on("events").columns(["source"]).execute(),await i.schema.createIndex("idx_events_type").on("events").columns(["type"]).execute(),await i.schema.createIndex("idx_events_retry").on("events").columns(["status","next_retry_at"]).execute(),await i.schema.createIndex("idx_subscriptions_connection").on("event_subscriptions").columns(["connection_id"]).execute(),await i.schema.createIndex("idx_subscriptions_type").on("event_subscriptions").columns(["event_type"]).execute(),await i.schema.createIndex("idx_subscriptions_org_enabled").on("event_subscriptions").columns(["organization_id","enabled"]).execute(),await i.schema.createIndex("idx_subscriptions_unique").on("event_subscriptions").columns(["connection_id","event_type","publisher","filter"]).unique().execute(),await i.schema.createIndex("idx_deliveries_event").on("event_deliveries").columns(["event_id"]).execute(),await i.schema.createIndex("idx_deliveries_subscription_status").on("event_deliveries").columns(["subscription_id","status"]).execute(),await i.schema.createIndex("idx_deliveries_retry").on("event_deliveries").columns(["status","next_retry_at"]).execute()}async function rMt(i){await i.schema.dropIndex("idx_deliveries_retry").execute(),await i.schema.dropIndex("idx_deliveries_subscription_status").execute(),await i.schema.dropIndex("idx_deliveries_event").execute(),await i.schema.dropIndex("idx_subscriptions_unique").execute(),await i.schema.dropIndex("idx_subscriptions_org_enabled").execute(),await i.schema.dropIndex("idx_subscriptions_type").execute(),await i.schema.dropIndex("idx_subscriptions_connection").execute(),await i.schema.dropIndex("idx_events_retry").execute(),await i.schema.dropIndex("idx_events_type").execute(),await i.schema.dropIndex("idx_events_source").execute(),await i.schema.dropIndex("idx_events_org_status").execute(),await i.schema.dropTable("event_deliveries").execute(),await i.schema.dropTable("event_subscriptions").execute(),await i.schema.dropTable("events").execute()}var Xeu=()=>{};var Ebi={};Li(Ebi,{up:()=>eMt,down:()=>aMt});import{sql as mMt}from"kysely";async function eMt(i){await i.schema.dropTable("audit_logs").ifExists().execute()}async function aMt(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(mMt`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 Leu=()=>{};var $bi={};Li($bi,{up:()=>oMt,down:()=>sMt});import{sql as R1i}from"kysely";async function oMt(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(R1i`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(u)=>u.notNull().defaultTo(R1i`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(R1i`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 R1i`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 sMt(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 Weu=()=>{};var wbi={};Li(wbi,{up:()=>pMt,down:()=>iqt});async function pMt(i){await i.schema.alterTable("gateways").addColumn("icon","text").execute()}async function iqt(i){await i.schema.alterTable("gateways").dropColumn("icon").execute()}var dbi={};Li(dbi,{up:()=>uqt,down:()=>tqt});import{sql as b1i}from"kysely";async function uqt(i){await i.schema.alterTable("gateways").addColumn("tool_selection_mode","text",(u)=>u.notNull().defaultTo("inclusion")).execute(),await b1i`
84517
84517
  UPDATE gateways
84518
84518
  SET tool_selection_mode = CASE
@@ -86597,7 +86597,7 @@ ${d}`:d;return{...E,description:h,inputExamples:t?void 0:E.inputExamples}});retu
86597
86597
  `)},flush(i){i.enqueue(`data: [DONE]
86598
86598
 
86599
86599
  `)}})}},Afu={"content-type":"text/event-stream","cache-control":"no-cache",connection:"keep-alive","x-vercel-ai-ui-message-stream":"v1","x-accel-buffering":"no"};ba=Ou.record(Ou.string(),ey.optional()),Ifu=Xi(()=>Di(Ou.union([Ou.strictObject({type:Ou.literal("text-start"),id:Ou.string(),providerMetadata:Z0.optional()}),Ou.strictObject({type:Ou.literal("text-delta"),id:Ou.string(),delta:Ou.string(),providerMetadata:Z0.optional()}),Ou.strictObject({type:Ou.literal("text-end"),id:Ou.string(),providerMetadata:Z0.optional()}),Ou.strictObject({type:Ou.literal("error"),errorText:Ou.string()}),Ou.strictObject({type:Ou.literal("tool-input-start"),toolCallId:Ou.string(),toolName:Ou.string(),providerExecuted:Ou.boolean().optional(),providerMetadata:Z0.optional(),toolMetadata:ba.optional(),dynamic:Ou.boolean().optional(),title:Ou.string().optional()}),Ou.strictObject({type:Ou.literal("tool-input-delta"),toolCallId:Ou.string(),inputTextDelta:Ou.string()}),Ou.strictObject({type:Ou.literal("tool-input-available"),toolCallId:Ou.string(),toolName:Ou.string(),input:Ou.unknown(),providerExecuted:Ou.boolean().optional(),providerMetadata:Z0.optional(),toolMetadata:ba.optional(),dynamic:Ou.boolean().optional(),title:Ou.string().optional()}),Ou.strictObject({type:Ou.literal("tool-input-error"),toolCallId:Ou.string(),toolName:Ou.string(),input:Ou.unknown(),providerExecuted:Ou.boolean().optional(),providerMetadata:Z0.optional(),toolMetadata:ba.optional(),dynamic:Ou.boolean().optional(),errorText:Ou.string(),title:Ou.string().optional()}),Ou.strictObject({type:Ou.literal("tool-approval-request"),approvalId:Ou.string(),toolCallId:Ou.string(),signature:Ou.string().optional()}),Ou.strictObject({type:Ou.literal("tool-output-available"),toolCallId:Ou.string(),output:Ou.unknown(),providerExecuted:Ou.boolean().optional(),providerMetadata:Z0.optional(),toolMetadata:ba.optional(),dynamic:Ou.boolean().optional(),preliminary:Ou.boolean().optional()}),Ou.strictObject({type:Ou.literal("tool-output-error"),toolCallId:Ou.string(),errorText:Ou.string(),providerExecuted:Ou.boolean().optional(),providerMetadata:Z0.optional(),toolMetadata:ba.optional(),dynamic:Ou.boolean().optional()}),Ou.strictObject({type:Ou.literal("tool-output-denied"),toolCallId:Ou.string()}),Ou.strictObject({type:Ou.literal("reasoning-start"),id:Ou.string(),providerMetadata:Z0.optional()}),Ou.strictObject({type:Ou.literal("reasoning-delta"),id:Ou.string(),delta:Ou.string(),providerMetadata:Z0.optional()}),Ou.strictObject({type:Ou.literal("reasoning-end"),id:Ou.string(),providerMetadata:Z0.optional()}),Ou.strictObject({type:Ou.literal("source-url"),sourceId:Ou.string(),url:Ou.string(),title:Ou.string().optional(),providerMetadata:Z0.optional()}),Ou.strictObject({type:Ou.literal("source-document"),sourceId:Ou.string(),mediaType:Ou.string(),title:Ou.string(),filename:Ou.string().optional(),providerMetadata:Z0.optional()}),Ou.strictObject({type:Ou.literal("file"),url:Ou.string(),mediaType:Ou.string(),providerMetadata:Z0.optional()}),Ou.strictObject({type:Ou.custom((i)=>typeof i==="string"&&i.startsWith("data-"),{message:'Type must start with "data-"'}),id:Ou.string().optional(),data:Ou.unknown(),transient:Ou.boolean().optional()}),Ou.strictObject({type:Ou.literal("start-step")}),Ou.strictObject({type:Ou.literal("finish-step")}),Ou.strictObject({type:Ou.literal("start"),messageId:Ou.string().optional(),messageMetadata:Ou.unknown().optional()}),Ou.strictObject({type:Ou.literal("finish"),finishReason:Ou.enum(["stop","length","content-filter","tool-calls","error","other"]).optional(),messageMetadata:Ou.unknown().optional()}),Ou.strictObject({type:Ou.literal("abort"),reason:Ou.string().optional()}),Ou.strictObject({type:Ou.literal("message-metadata"),messageMetadata:Ou.unknown()})])));Ujf=J3;Pjf=qa;Ijf=l_({prefix:"aitxt",size:24}),xjf={file:!0,source:!0,"text-start":!0,"text-end":!0,"text-delta":!0,"reasoning-start":!0,"reasoning-end":!0,"reasoning-delta":!0,"tool-input-start":!0,"tool-input-end":!0,"tool-input-delta":!0,"tool-approval-request":!0,"tool-call":!0,"tool-result":!0,"tool-error":!0,"stream-start":!1,"response-metadata":!1,finish:!1,error:!1,raw:!1};hw=Zi.record(Zi.string(),ey.optional()),Kjf=Xi(()=>Di(Zi.array(Zi.object({id:Zi.string(),role:Zi.enum(["system","user","assistant"]),metadata:Zi.unknown().optional(),parts:Zi.array(Zi.union([Zi.object({type:Zi.literal("text"),text:Zi.string(),state:Zi.enum(["streaming","done"]).optional(),providerMetadata:Z0.optional()}),Zi.object({type:Zi.literal("reasoning"),text:Zi.string(),state:Zi.enum(["streaming","done"]).optional(),providerMetadata:Z0.optional()}),Zi.object({type:Zi.literal("source-url"),sourceId:Zi.string(),url:Zi.string(),title:Zi.string().optional(),providerMetadata:Z0.optional()}),Zi.object({type:Zi.literal("source-document"),sourceId:Zi.string(),mediaType:Zi.string(),title:Zi.string(),filename:Zi.string().optional(),providerMetadata:Z0.optional()}),Zi.object({type:Zi.literal("file"),mediaType:Zi.string(),filename:Zi.string().optional(),url:Zi.string(),providerMetadata:Z0.optional()}),Zi.object({type:Zi.literal("step-start")}),Zi.object({type:Zi.string().startsWith("data-"),id:Zi.string().optional(),data:Zi.unknown()}),Zi.object({type:Zi.literal("dynamic-tool"),toolName:Zi.string(),toolCallId:Zi.string(),toolMetadata:hw.optional(),state:Zi.literal("input-streaming"),input:Zi.unknown().optional(),providerExecuted:Zi.boolean().optional(),callProviderMetadata:Z0.optional(),output:Zi.never().optional(),errorText:Zi.never().optional(),approval:Zi.never().optional()}),Zi.object({type:Zi.literal("dynamic-tool"),toolName:Zi.string(),toolCallId:Zi.string(),toolMetadata:hw.optional(),state:Zi.literal("input-available"),input:Zi.unknown(),providerExecuted:Zi.boolean().optional(),output:Zi.never().optional(),errorText:Zi.never().optional(),callProviderMetadata:Z0.optional(),approval:Zi.never().optional()}),Zi.object({type:Zi.literal("dynamic-tool"),toolName:Zi.string(),toolCallId:Zi.string(),toolMetadata:hw.optional(),state:Zi.literal("approval-requested"),input:Zi.unknown(),providerExecuted:Zi.boolean().optional(),output:Zi.never().optional(),errorText:Zi.never().optional(),callProviderMetadata:Z0.optional(),approval:Zi.object({id:Zi.string(),approved:Zi.never().optional(),reason:Zi.never().optional(),signature:Zi.string().optional()})}),Zi.object({type:Zi.literal("dynamic-tool"),toolName:Zi.string(),toolCallId:Zi.string(),toolMetadata:hw.optional(),state:Zi.literal("approval-responded"),input:Zi.unknown(),providerExecuted:Zi.boolean().optional(),output:Zi.never().optional(),errorText:Zi.never().optional(),callProviderMetadata:Z0.optional(),approval:Zi.object({id:Zi.string(),approved:Zi.boolean(),reason:Zi.string().optional(),signature:Zi.string().optional()})}),Zi.object({type:Zi.literal("dynamic-tool"),toolName:Zi.string(),toolCallId:Zi.string(),toolMetadata:hw.optional(),state:Zi.literal("output-available"),input:Zi.unknown(),providerExecuted:Zi.boolean().optional(),output:Zi.unknown(),errorText:Zi.never().optional(),callProviderMetadata:Z0.optional(),resultProviderMetadata:Z0.optional(),preliminary:Zi.boolean().optional(),approval:Zi.object({id:Zi.string(),approved:Zi.literal(!0),reason:Zi.string().optional(),signature:Zi.string().optional()}).optional()}),Zi.object({type:Zi.literal("dynamic-tool"),toolName:Zi.string(),toolCallId:Zi.string(),toolMetadata:hw.optional(),state:Zi.literal("output-error"),input:Zi.unknown().optional(),rawInput:Zi.unknown().optional(),providerExecuted:Zi.boolean().optional(),output:Zi.never().optional(),errorText:Zi.string(),callProviderMetadata:Z0.optional(),resultProviderMetadata:Z0.optional(),approval:Zi.object({id:Zi.string(),approved:Zi.literal(!0),reason:Zi.string().optional(),signature:Zi.string().optional()}).optional()}),Zi.object({type:Zi.literal("dynamic-tool"),toolName:Zi.string(),toolCallId:Zi.string(),toolMetadata:hw.optional(),state:Zi.literal("output-denied"),input:Zi.unknown(),providerExecuted:Zi.boolean().optional(),output:Zi.never().optional(),errorText:Zi.never().optional(),callProviderMetadata:Z0.optional(),approval:Zi.object({id:Zi.string(),approved:Zi.literal(!1),reason:Zi.string().optional(),signature:Zi.string().optional()})}),Zi.object({type:Zi.string().startsWith("tool-"),toolCallId:Zi.string(),toolMetadata:hw.optional(),state:Zi.literal("input-streaming"),providerExecuted:Zi.boolean().optional(),callProviderMetadata:Z0.optional(),input:Zi.unknown().optional(),output:Zi.never().optional(),errorText:Zi.never().optional(),approval:Zi.never().optional()}),Zi.object({type:Zi.string().startsWith("tool-"),toolCallId:Zi.string(),toolMetadata:hw.optional(),state:Zi.literal("input-available"),providerExecuted:Zi.boolean().optional(),input:Zi.unknown(),output:Zi.never().optional(),errorText:Zi.never().optional(),callProviderMetadata:Z0.optional(),approval:Zi.never().optional()}),Zi.object({type:Zi.string().startsWith("tool-"),toolCallId:Zi.string(),toolMetadata:hw.optional(),state:Zi.literal("approval-requested"),input:Zi.unknown(),providerExecuted:Zi.boolean().optional(),output:Zi.never().optional(),errorText:Zi.never().optional(),callProviderMetadata:Z0.optional(),approval:Zi.object({id:Zi.string(),approved:Zi.never().optional(),reason:Zi.never().optional(),signature:Zi.string().optional()})}),Zi.object({type:Zi.string().startsWith("tool-"),toolCallId:Zi.string(),toolMetadata:hw.optional(),state:Zi.literal("approval-responded"),input:Zi.unknown(),providerExecuted:Zi.boolean().optional(),output:Zi.never().optional(),errorText:Zi.never().optional(),callProviderMetadata:Z0.optional(),approval:Zi.object({id:Zi.string(),approved:Zi.boolean(),reason:Zi.string().optional(),signature:Zi.string().optional()})}),Zi.object({type:Zi.string().startsWith("tool-"),toolCallId:Zi.string(),toolMetadata:hw.optional(),state:Zi.literal("output-available"),providerExecuted:Zi.boolean().optional(),input:Zi.unknown(),output:Zi.unknown(),errorText:Zi.never().optional(),callProviderMetadata:Z0.optional(),resultProviderMetadata:Z0.optional(),preliminary:Zi.boolean().optional(),approval:Zi.object({id:Zi.string(),approved:Zi.literal(!0),reason:Zi.string().optional(),signature:Zi.string().optional()}).optional()}),Zi.object({type:Zi.string().startsWith("tool-"),toolCallId:Zi.string(),toolMetadata:hw.optional(),state:Zi.literal("output-error"),providerExecuted:Zi.boolean().optional(),input:Zi.unknown().optional(),rawInput:Zi.unknown().optional(),output:Zi.never().optional(),errorText:Zi.string(),callProviderMetadata:Z0.optional(),resultProviderMetadata:Z0.optional(),approval:Zi.object({id:Zi.string(),approved:Zi.literal(!0),reason:Zi.string().optional(),signature:Zi.string().optional()}).optional()}),Zi.object({type:Zi.string().startsWith("tool-"),toolCallId:Zi.string(),toolMetadata:hw.optional(),state:Zi.literal("output-denied"),providerExecuted:Zi.boolean().optional(),input:Zi.unknown(),output:Zi.never().optional(),errorText:Zi.never().optional(),callProviderMetadata:Z0.optional(),approval:Zi.object({id:Zi.string(),approved:Zi.literal(!1),reason:Zi.string().optional(),signature:Zi.string().optional()})})])).nonempty("Message must contain at least one part")})).nonempty("Messages array must not be empty")));Rjf=dhi,bjf={type:"no-schema",jsonSchema:async()=>{return},async validatePartialResult({value:i,textDelta:u}){return{success:!0,value:{partial:i,textDelta:u}}},async validateFinalResult(i,u){return i===void 0?{success:!1,error:new vw({message:"No object generated: response did not match schema.",text:u.text,response:u.response,usage:u.usage,finishReason:u.finishReason})}:{success:!0,value:i}},createElementStream(){throw new Ff({functionality:"element streams in no-schema mode"})}};Vjf=l_({prefix:"aiobj",size:24});ojf=l_({prefix:"aiobj",size:24});iKf=class extends vg{constructor({data:i,mediaType:u}){super({data:i,mediaType:u});let t="mp3";if(u){let f=u.split("/");if(f.length===2){if(u!=="audio/mpeg")t=f[1]}}if(!t)throw Error("Audio format must be provided or determinable from media type");this.format=t}};fKf={word:/\S+\s+/m,line:/\n+/m};cKf=Jfu();UKf=ZB0,BB0=`vercel.ai.error.${TB0}`,PKf=Symbol.for(BB0),UB0=class extends Lf{constructor({modelId:i,modelType:u,providerId:t,availableProviders:f,message:l=`No such provider: ${t} (available providers: ${f.join()})`}){super({errorName:TB0,modelId:i,modelType:u,message:l});this[FB0]=!0,this.providerId=t,this.availableProviders=f}static isInstance(i){return Bu.hasMarker(i,BB0)}};FB0=PKf;AKf=PB0;kKf=Jfu();IB0=class extends Wfu{constructor(i={}){super(i)}processResponseStream(i){return $8({stream:i,schema:Ifu}).pipeThrough(new TransformStream({async transform(u,t){if(!u.success)throw u.error;t.enqueue(u.value)}}))}};zKf=class extends Wfu{constructor(i={}){super(i)}processResponseStream(i){return QKf({stream:i.pipeThrough(new TextDecoderStream)})}}});function hhi(i){return{type:"data-title-result",data:{title:i},transient:!0}}function Qfu(i){return i.type==="data-title-input"}function zfu(i){return i.type==="data-title-result"}async function*xB0(i,u){let t=u.persistTitle??((l,c)=>u.ctx.storage.threads.update(l,{title:c}).then(()=>{})),f=!1;for await(let l of i){if(Qfu(l)){console.warn("[title-interceptor] harness emitted deprecated data-title-input chunk; ignoring");continue}if(zfu(l)){if(f){console.warn("[title-interceptor] harness emitted multiple data-title-result chunks; ignoring extra");continue}if(f=!0,u.currentThreadTitle!==l8)continue;let c=l.data.title;if(!c)continue;await t(u.threadId,c).catch((E)=>{console.error("[title-interceptor] persist failed for thread",u.threadId,E)});try{await u.onTitleUpdated?.(c)}catch(E){console.error("[title-interceptor] onTitleUpdated callback failed",E)}if(!u.isStreamFinished())try{u.writer.write({type:"data-thread-title",data:{title:c},transient:!0})}catch(E){console.error("[title-interceptor] writer.write failed",E)}continue}yield l}}function kB0(i,u){let t=u.persistTitle??((l,c)=>u.ctx.storage.threads.update(l,{title:c}).then(()=>{})),f=!1;return i.pipeThrough(new TransformStream({async transform(l,c){if(Qfu(l)){console.warn("[title-interceptor] harness emitted deprecated data-title-input chunk; ignoring");return}if(zfu(l)){if(f){console.warn("[title-interceptor] harness emitted multiple data-title-result chunks; ignoring extra");return}if(f=!0,u.currentThreadTitle!==l8)return;let E=l.data.title;if(!E)return;await t(u.threadId,E).catch(($)=>{console.error("[title-interceptor] persist failed for thread",u.threadId,$)});try{await u.onTitleUpdated?.(E)}catch($){console.error("[title-interceptor] onTitleUpdated callback failed",$)}if(!u.isStreamFinished())try{u.writer.write({type:"data-thread-title",data:{title:E},transient:!0})}catch($){console.error("[title-interceptor] writer.write failed",$)}return}c.enqueue(l)}}))}var GB0=g(()=>{W7()});function HKf(i){let u=i[Symbol.asyncIterator]();return new ReadableStream({async pull(t){try{let{value:f,done:l}=await u.next();if(l)t.close();else t.enqueue(f)}catch(f){t.error(f)}},async cancel(t){await u.return?.(t)}})}function RKf(i,u){let t=i.getReader(),f=!1,l=()=>{if(f)return;f=!0,t.releaseLock()};return new ReadableStream({async pull(c){try{let{done:E,value:$}=await t.read();if(E)l(),c.close();else c.enqueue($)}catch(E){u(),l(),c.error(E)}},async cancel(c){await t.cancel(c),l()}})}function bKf(i){let u=i.metadata?.usage;if(!u||typeof u!=="object"||Array.isArray(u))return null;let t=u,f=(l)=>typeof l==="number"?l:0;return{...t,inputTokens:f(t.inputTokens),outputTokens:f(t.outputTokens),totalTokens:f(t.totalTokens)}}function _hi(i){let u=[],t=!1,f=!1,l=!1,c=!0,E=i.errorMessageId??crypto.randomUUID(),$,w=new Promise((Z)=>{$=Z});if(!i.chunks&&!i.chunkStream)throw Error("consumeHarnessStream requires chunks or chunkStream");let d=i.chunks?async function*(){try{yield*i.chunks}catch(Z){throw l=!0,Z}}():null,h=i.chunkStream?RKf(i.chunkStream,()=>{l=!0}):null,_=i.originalMessages?.at(-1),v=!i.generateMessageId&&_?.role==="assistant"?_.id:void 0,D=new Map,n=null,O=(Z)=>{if(i.generateMessageId){let T=D.get(Z);if(T===void 0)T=i.generateMessageId(),D.set(Z,T);return T}if(n===null)n=Z;return v&&Z===n?v:Z},N=(Z)=>({...Z,id:O(Z.id)});return{uiStream:Sfu({originalMessages:i.originalMessages,execute:({writer:Z})=>{let T={ctx:null,isStreamFinished:()=>t,currentThreadTitle:i.title.currentThreadTitle,threadId:i.title.threadId,writer:Z,onTitleUpdated:i.title.onTitleUpdated,persistTitle:i.title.persistTitle};if(h){Z.merge(kB0(h,T));return}let B=xB0(d,T);Z.merge(HKf(B))},onStepFinish:({responseMessage:Z})=>{let T=N(Z);u.push(i.persistence.emitStepParts(T).catch((B)=>{c=!1,console.error("[consume-harness-stream] emitStepParts failed",B)})),u.push(Promise.resolve(i.hooks?.onStep?.(T)).catch((B)=>console.error("[consume-harness-stream] onStep hook failed",B)))},onFinish:async({responseMessage:Z,finishReason:T})=>{t=!0,await Promise.allSettled(u);let B=N(Z);if(!f){if(T)B.metadata={...B.metadata??{},finishReason:T};await i.persistence.emitFinal(B).catch((A)=>{c=!1,console.error("[consume-harness-stream] emitFinal failed",A)})}let F=bKf(B);if(F)await Promise.resolve(i.hooks?.onUsage?.(F)).catch((A)=>console.error("[consume-harness-stream] onUsage hook failed",A));if(!l)await Promise.resolve(i.hooks?.onFinish?.(B,T,{persistenceOk:c})).catch((A)=>console.error("[consume-harness-stream] onFinish hook failed",A));$()},onError:(Z)=>{t=!0;let T=Z instanceof Error?Z.message:String(Z);if(!f)f=!0,u.push(i.persistence.emitError(E,T).catch((B)=>{c=!1,console.error("[consume-harness-stream] emitError failed",B)})),u.push(Promise.resolve(i.hooks?.onError?.(Z)).catch((B)=>console.error("[consume-harness-stream] onError hook failed",B)));return i.sanitizeErrorText?i.sanitizeErrorText(Z):T}}),whenComplete:w,isStreamFinished:()=>t}}var Hfu=g(()=>{Pf();GB0()});function CKf(i){return{type:"data-user-message",data:i}}function SB0(i){if(!i||typeof i!=="object")return!1;return i.type==="data-user-message"}async function jB0(i,u,t){if(!i)return;try{await i.publishRawChunk(u,CKf(t))}catch{}}function KB0(i){return nN0(i)||SB0(i)}async function MKf(i){let u=i.getReader();try{while(!0){let{done:t}=await u.read();if(t)break}}finally{u.releaseLock()}}function qKf(i,u){let t=i.getReader(),f=!1,l=()=>{if(f)return;f=!0,t.releaseLock()};return new ReadableStream({async pull(c){try{let{done:E,value:$}=await t.read();if(E)l(),c.close();else c.enqueue($)}catch(E){u(E),l(),c.error(E)}},async cancel(c){await t.cancel(c),l()}})}async function JB0(i){if(!i.chunks&&!i.chunkStream)throw Error("projectChunks requires chunks or chunkStream");let u=null,t=!1,f=void 0,l={inputTokens:0,outputTokens:0,totalTokens:0},c=[],E=null,$=(n)=>{if(E===null)E=n;throw n},w=i.chunks?async function*(){try{for await(let n of i.chunks){if(KB0(n))continue;yield n}}catch(n){throw u=n,n}}():void 0,d=i.chunkStream?qKf(i.chunkStream,(n)=>{u=n}).pipeThrough(new TransformStream({transform(n,O){if(!KB0(n))O.enqueue(n)}})):void 0,h={emitStepParts:(n)=>i.persistence.emitStepParts(n).catch($),emitFinal:(n)=>i.persistence.emitFinal(n).catch($),emitError:(n,O)=>i.persistence.emitError(n,O).catch($)},{uiStream:_,whenComplete:v}=_hi({chunks:w,chunkStream:d,originalMessages:i.originalMessages??[],title:i.title?{currentThreadTitle:i.title.currentThreadTitle,threadId:i.title.threadId,persistTitle:i.title.persistTitle}:{currentThreadTitle:void 0,threadId:"projector",persistTitle:async()=>{}},persistence:h,sanitizeErrorText:i.sanitizeErrorText,errorMessageId:i.errorMessageId,generateMessageId:i.generateMessageId,hooks:{onUsage:(n)=>{l={inputTokens:n.inputTokens,outputTokens:n.outputTokens,totalTokens:n.totalTokens}},onError:()=>{t=!0},onFinish:(n,O)=>{f=O,c=Array.isArray(n.parts)?n.parts.filter((N)=>N!=null&&typeof N==="object"&&("type"in N)):[]}}});if(await MKf(_).catch(()=>{}),await v,E!==null)throw E;if(u!==null)throw u;return{failed:t&&f===void 0,finishReason:f,usage:l,finalParts:c}}var XB0=g(()=>{Hfu();Xa()});var P8="DECOPILOT_STREAMS";var Rfu=()=>{};function LB0(i,u){return new TransformStream({transform(t,f){if(t.runId!==i||t.fenceToken!==u)return;f.enqueue(t)}})}function WB0(){let i=1;return new TransformStream({transform(u,t){if(u.kind==="done"){t.enqueue(u);return}if(u.seq===null){t.error(Error("projector chunk missing seq"));return}if(u.seq<i)return;if(u.seq>i){t.error(new oa(i,u.seq));return}i++,t.enqueue(u)}})}function YB0(i){let u=i.getReader(),t=!1,f=0,l=()=>{if(t)return;t=!0,u.releaseLock()};return new ReadableStream({async pull(c){for(;;){let{done:E,value:$}=await u.read();if(E){await u.cancel(),l(),c.error(Error("reader stopped before done"));return}let w=$;if(w.kind==="done"){if(!(w.envelopeFinalSeq!=null&&w.envelopeFinalSeq===w.msgIdFinalSeq))continue;if(w.envelopeFinalSeq!==f){await u.cancel(),l(),c.error(new oa(f+1,null));return}await u.cancel(),l(),c.close();return}f=w.seq??f,c.enqueue(w.chunk);return}},async cancel(c){await u.cancel(c),l()}})}function VKf(i){if(Symbol.asyncIterator in i)return i[Symbol.asyncIterator]();let u=i[Symbol.iterator]();return{next:async()=>u.next(),return:async(t)=>u.return?u.return(t):{done:!0,value:t}}}function Dhi(i){let u=VKf(i.messages),t=i.idleTimeoutMs,f=!1,l=(c)=>{if(f)return;f=!0,u.return?.(c).catch(()=>{}),i.onCancel?.()};return new ReadableStream({async pull(c){if(t===void 0){let{done:h,value:_}=await u.next();if(h){c.close();return}c.enqueue(_);return}let E=new AbortController,$=u.next().then((h)=>{return E.abort(),h}),w=O0(t,{signal:E.signal}).then(()=>"idle").catch(()=>"cancelled"),d=await Promise.race([$,w]);if(d==="idle"){c.error(new vhi(t));return}if(d==="cancelled")return;if(d.done){c.close();return}c.enqueue(d.value)},async cancel(c){l(c)}})}var vhi,oa;var nhi=g(()=>{y4();vhi=class vhi extends Error{idleTimeoutMs;constructor(i){super("producer produced no output before timeout");this.idleTimeoutMs=i;this.name="StreamIdleTimeoutError"}};oa=class oa extends Error{expectedSeq;gotSeq;constructor(i,u){super(u===null?`missing seq ${i} (stream ended at the fenced done)`:`missing seq ${i} (next delivered is ${u})`);this.expectedSeq=i;this.gotSeq=u;this.name="StreamGapError"}}});function rKf(i){let t=Dhi({messages:i.messages,idleTimeoutMs:i.idleTimeoutMs,onCancel:i.onDone}).pipeThrough(x1i()).pipeThrough(k1i()).pipeThrough(LB0(i.runId,i.fenceToken)).pipeThrough(WB0());return YB0(t)}async function zB0(i){let t=await(await i.js.consumers.get(P8,{filter_subjects:g2(i.runId),deliver_policy:QB0.DeliverPolicy.All})).consume();async function*f(){try{for await(let l of t)yield{subject:l.subject,data:l.data,headers:l.headers}}finally{t.stop()}}return rKf({messages:f(),runId:i.runId,fenceToken:i.fenceToken,idleTimeoutMs:i.idleTimeoutMs,onDone:()=>t.stop()})}var QB0;var HB0=g(()=>{Rfu();nhi();G1i();QB0=S(n2(),1)});function Cfu(i){let u=i.type;if(typeof u!=="string")return!1;if(u==="text"||u==="reasoning")return i.state!=="streaming";if(u==="step-start")return!1;if(u.startsWith("tool-")||u==="dynamic-tool")return i.state==="approval-requested"||u==="tool-user_ask"&&i.state==="input-available"||i.state==="output-available"||i.state==="output-error"||i.state==="output-denied";return!0}function bfu(i){let u=i.type??"";if(u==="reasoning")return"reasoning";if(u==="file")return"file";if(u.startsWith("tool-")||u==="dynamic-tool")return i.state==="output-available"||i.state==="output-error"||i.state==="output-denied"?"tool_result":"tool_call";return"text"}class Mfu{ctx;base;seqByPart=new Map;emitted=new Set;finished=new Set;partKeyByRowId=new Map;finishMessageIdByRowId=new Map;nextSeq=0;constructor(i){this.ctx=i;this.base=i.baseTimeMs??Date.now()}hasEmittedContentFor(i){let u=`${i}#`;for(let t of this.emitted)if(t.startsWith(u))return!0;return!1}seqFor(i){let u=this.seqByPart.get(i);if(u!==void 0)return u;let t=this.nextSeq++;return this.seqByPart.set(i,t),t}row(i,u,t,f,l,c=null){return{id:`${this.ctx.runId}:${i}:${t}`,seq:t,org_id:this.ctx.orgId,thread_id:this.ctx.threadId,run_id:this.ctx.runId,message_id:i,role:u,kind:f,payload:l,payload_ref:null,metadata:c,created_at:new Date(this.base+t).toISOString()}}emitMessageParts(i){let u=i.parts??[],t=[];for(let f=0;f<u.length;f++){let l=u[f];if(!Cfu(l))continue;let c=`${i.id}#${f}`;if(this.emitted.has(c))continue;let E=this.seqFor(c),$=this.row(i.id,i.role,E,bfu(l),l);this.partKeyByRowId.set($.id,c),t.push($)}return t}emitRequestMessageParts(i){let u=i.parts??[],t=[];for(let f=0;f<u.length;f++){let l=u[f],c=`${i.id}#${f}`,E=this.seqFor(c),$=this.row(i.id,i.role,E,bfu(l),l);this.partKeyByRowId.set($.id,c),t.push($)}return t}markFinished(i,u,t=null){if(this.finished.has(i))return[];let f=this.seqFor(`${i}#finish`),l=this.row(i,u,f,"finish",{},t);return this.finishMessageIdByRowId.set(l.id,i),[l]}markRequestFinished(i,u,t=null){let f=this.seqFor(`${i}#finish`),l=this.row(i,u,f,"finish",{},t);return this.finishMessageIdByRowId.set(l.id,i),[l]}acknowledge(i){for(let u of i){let t=this.partKeyByRowId.get(u.id);if(t!==void 0)this.emitted.add(t);let f=this.finishMessageIdByRowId.get(u.id);if(f!==void 0)this.finished.add(f)}}emitUserMessage(i){return[...this.emitMessageParts(i),...this.markFinished(i.id,i.role,i.metadata??null)]}emitRequestMessage(i){return[...this.emitRequestMessageParts(i),...this.markRequestFinished(i.id,i.role,i.metadata??null)]}emitStepParts(i){return this.emitMessageParts(i)}emitFinal(i){let u=this.emitMessageParts(i);if(u.length===0&&!this.hasEmittedContentFor(i.id))return u;return[...u,...this.markFinished(i.id,i.role,i.metadata??null)]}emitFinalSnapshot(i){let u=i.parts??[],t=[];for(let c=0;c<u.length;c++){let E=u[c];if(!Cfu(E))continue;let $=`${i.id}#${c}`,w=this.seqFor($),d=this.row(i.id,i.role,w,bfu(E),E);this.partKeyByRowId.set(d.id,$),t.push(d)}if(t.length===0&&!this.hasEmittedContentFor(i.id))return t;let f=this.seqFor(`${i.id}#finish`),l=this.row(i.id,i.role,f,"finish",{},i.metadata??null);return this.finishMessageIdByRowId.set(l.id,i.id),[...t,l]}emitError(i,u){let t=`${i}#error`,f=[];if(!this.emitted.has(t)){let l=this.seqFor(t),c=this.row(i,"assistant",l,"error",{type:"text",text:`Error: ${u}`});this.partKeyByRowId.set(c.id,t),f.push(c)}return[...f,...this.markFinished(i,"assistant")]}}class Nd{ctx;builder;constructor(i){this.ctx=i;this.builder=new Mfu(i)}async appendBuiltRows(i){await this.ctx.storage.appendParts(i),this.builder.acknowledge(i)}async emitUserMessage(i){await this.appendBuiltRows(this.builder.emitUserMessage(i))}async emitRequestMessage(i){let u=this.builder.emitRequestMessage(i);await this.ctx.storage.replaceMessageParts(this.ctx.threadId,i.id,u),this.builder.acknowledge(u)}async emitStepParts(i){await this.appendBuiltRows(this.builder.emitStepParts(i))}async emitFinal(i){await this.appendBuiltRows(this.builder.emitFinal(i))}async replaceFinal(i){let u=this.builder.emitFinalSnapshot(i);await this.ctx.storage.replaceMessageParts(this.ctx.threadId,i.id,u),this.builder.acknowledge(u)}async emitError(i,u){await this.appendBuiltRows(this.builder.emitError(i,u))}}var Xz=()=>{};async function mKf(i){let t=(i.requestMessageId?await i.messageParts.maxCreatedAtMsForMessage(i.runId,i.requestMessageId):null)??await i.messageParts.maxCreatedAtMsForRun(i.runId);return new Nd({storage:i.messageParts,orgId:i.orgId,threadId:i.runId,runId:i.runId,baseTimeMs:(t??Date.now())+1})}async function RB0(i){let u=await mKf(i),t=i.replaceFinal?(f)=>u.replaceFinal(f):(f)=>u.emitFinal(f);return{emitStepParts:(f)=>u.emitStepParts(f),emitFinal:t,emitError:(f,l)=>u.emitError(f,l)}}var bB0=g(()=>{Xz()});function ghi(i,u){eKf.add(1,{"org.id":u??"unknown"})}var eKf;var CB0=g(()=>{jl();eKf=Bt.createCounter("decopilot.projector.poison_runs",{description:"Number of decopilot runs that exhausted retries and were sent to the DLQ",unit:"{runs}"})});class qfu{intervalMs;lastBumpMs=new Map;constructor(i=3000){this.intervalMs=i}shouldBump(i,u=Date.now()){let t=this.lastBumpMs.get(i);if(t!==void 0&&u-t<this.intervalMs)return!1;return this.lastBumpMs.set(i,u),!0}clear(i){this.lastBumpMs.delete(i)}}function MB0(i,u,t,f){return i.pipeThrough(new TransformStream({transform(l,c){if(t.shouldBump(u))f();c.enqueue(l)},flush(){t.clear(u)}}))}function Ohi(i,u=[]){if(i==="stop")return u.filter((l)=>l.type==="text"&&l.text).map((l)=>l.text).join(`
86600
- `).replace(/https?:\/\/[^\s)>\]]+/g,"").includes("?")?"requires_action":"completed";if(i==="tool-calls"){let t=u.some((l)=>l.type==="tool-user_ask"&&l.state==="input-available"),f=u.some((l)=>l.state==="approval-requested");return t||f?"requires_action":"completed"}return"failed"}function Ng(i,u){return`error-${i}:${u}`}function Nhi(i){return{id:i.id,role:i.role,parts:i.parts,metadata:i.metadata??void 0}}var Vfu=()=>{};function aKf(i){return`liveness: no stream events for ${Math.round(i/60000)}m`}function mfu(i){return i.runFenceToken!==null&&i.runFenceToken!==i.fenceToken}function qB0(i){rfu=i}function VB0(){if(!rfu)throw Error("[projector-workflow] runtime not initialized \u2014 setProjectorWorkflowRuntime() must run before workflows fire");return rfu}function rB0(){return VB0()}async function mB0(i,u,t){let f=VB0(),l=f.getJetStream();if(!l)throw Error("JetStream unavailable");let c=(await f.messageParts.loadWindow(i.runId,{limit:500})).messages.map(Nhi);return{chunkCount:0,attempts:1,outcome:await JB0({chunkStream:MB0(await zB0({js:l,runId:i.runId,fenceToken:i.fenceToken,idleTimeoutMs:i.idleTimeoutMs}),i.runId,oKf,()=>{f.bumpProgress({runId:i.runId,orgId:u}).catch(()=>{})}),persistence:await RB0({messageParts:f.messageParts,orgId:u,runId:i.runId,requestMessageId:i.messageId,replaceFinal:!0}),originalMessages:c,errorMessageId:Ng(i.runId,i.fenceToken),title:{threadId:i.runId,currentThreadTitle:t,persistTitle:async($,w)=>{await f.persistTitle(i.runId,u,w),await f.onTitleUpdated({runId:i.runId,orgId:u,title:w})}}})}}async function eB0(i,u,t){let f=await sKf(i,u);if("skip"in f)return;let l=f.row.orgId,c=f.row.createdBy??i.runId,E=f.row.title;try{let{outcome:$}=await t(i,l,E),w=$?.failed?"failed":$?.finishReason==null?"completed":Ohi($.finishReason,$.finalParts);if(w==="failed"){let d=$?.finishReason?`harness reported an error: ${$.finishReason}`:"harness reported an error";if(ghi(i.runId,l),await u.markRunFailed(i.runId,l,d,"harness"))await u.recordFailed({runId:i.runId,orgId:l,distinctId:c,reason:d,kind:"harness"})}else if(w==="requires_action")await u.markRunRequiresAction(i.runId,l),await u.clearSynthesizedError(i.runId,i.fenceToken);else{if(await u.completeRunIfNotCompleted(i.runId,l))await u.recordCompleted({runId:i.runId,orgId:l,distinctId:c,usage:$?.usage??{inputTokens:0,outputTokens:0,totalTokens:0}});await u.clearSynthesizedError(i.runId,i.fenceToken)}await u.purgeRun(i.runId,i.fenceToken)}catch($){if($ instanceof oa){let v=`stream truncated before projection could replay it: ${$.message}`;if(ghi(i.runId,l),await u.markRunFailed(i.runId,l,v,"projection"))await u.recordFailed({runId:i.runId,orgId:l,distinctId:c,reason:v,kind:"projection"});await u.purgeRun(i.runId,i.fenceToken);return}let w=$ instanceof vhi;if(w){let v=await u.resolveRun(i.runId).catch(()=>null);if(v!==null&&v.runFenceToken===i.fenceToken&&["completed","failed","requires_action"].includes(v.status)){await u.purgeRun(i.runId,i.fenceToken);return}}let d=w?aKf($.idleTimeoutMs):$ instanceof Error?$.message:String($),h=w?"liveness":"projection";if(ghi(i.runId,l),await u.markRunFailed(i.runId,l,d,h))await u.recordFailed({runId:i.runId,orgId:l,distinctId:c,reason:d,kind:h});throw $}}async function sKf(i,u){let t=await u.resolveRun(i.runId);if(!t)return{skip:"missing"};if(mfu({status:t.status,runFenceToken:t.runFenceToken,fenceToken:i.fenceToken}))return{skip:"stale",row:t};if(t.version!==2)return{skip:"legacy-v1",row:t};return{row:t}}var rfu=null,oKf;var efu=g(()=>{XB0();HB0();nhi();bB0();CB0();Vfu();oKf=new qfu});function aB0(i,u){switch(i.type){case"START":{let t={type:"RUN_STARTED",taskId:i.taskId,orgId:i.orgId,userId:i.userId,abortController:i.abortController,runConfig:i.runConfig,podId:i.podId,messageId:i.messageId};if(u?.status.tag==="running")return[{type:"PREVIOUS_RUN_ABORTED",taskId:i.taskId,orgId:u.orgId},t];return[t]}case"STEP_DONE":{if(u?.status.tag!=="running")return[];return[{type:"STEP_COMPLETED",taskId:i.taskId,orgId:u.orgId,stepCount:u.status.stepCount+1}]}case"FINISH":{if(u==null||u.status.tag!=="running")return[];let{stepCount:t}=u.status;if(i.threadStatus==="completed")return[{type:"RUN_COMPLETED",taskId:i.taskId,orgId:u.orgId,stepCount:t}];if(i.threadStatus==="requires_action")return[{type:"RUN_REQUIRES_ACTION",taskId:i.taskId,orgId:u.orgId,stepCount:t}];return[{type:"RUN_FAILED",taskId:i.taskId,orgId:u.orgId,reason:"error"}]}case"CANCEL":{if(u?.status.tag!=="running")return[];return[{type:"RUN_FAILED",taskId:i.taskId,orgId:u.orgId,reason:"cancelled"}]}case"RESUME":{if(u?.status.tag==="running")return[];return[{type:"RUN_RESUMED",taskId:i.taskId,orgId:i.orgId,userId:i.userId,abortController:i.abortController,podId:i.podId}]}case"FORCE_FAIL":{if(i.reason==="ghost")return[{type:"RUN_FAILED",taskId:i.taskId,orgId:u?.orgId??i.orgId,reason:i.reason}];if(u?.status.tag!=="running")return[];return[{type:"RUN_FAILED",taskId:i.taskId,orgId:u.orgId,reason:i.reason}]}}}function oB0(i,u,t=new Date){switch(u.type){case"RUN_STARTED":return{taskId:u.taskId,orgId:u.orgId,userId:u.userId,status:{tag:"running",abortController:u.abortController,stepCount:0,startedAt:t}};case"RUN_RESUMED":return{taskId:u.taskId,orgId:u.orgId,userId:u.userId,status:{tag:"running",abortController:u.abortController,stepCount:0,startedAt:t}};case"STEP_COMPLETED":if(i?.status.tag!=="running")return i;return{...i,status:{...i.status,stepCount:u.stepCount}};case"RUN_COMPLETED":return;case"RUN_REQUIRES_ACTION":return;case"RUN_FAILED":return;case"PREVIOUS_RUN_ABORTED":return}}async function sB0(i,u,t,f){let{storage:l,sseHub:c}=f,E=await l.get(i,u);c.emit(u,Rh(i,t,{virtualMcpId:E?.virtual_mcp_id??void 0,createdBy:E?.created_by,triggerId:E?.trigger_id,title:E?.title,branch:E?.branch??null,createdAt:E?.created_at,updatedAt:E?.updated_at})),c.emit(u,OV(i,t))}async function iJf(i,u){let{storage:t,sseHub:f}=u;switch(i.type){case"RUN_STARTED":{await t.update(i.taskId,i.orgId,{status:"in_progress",run_config:i.runConfig??null,run_started_at:new Date().toISOString(),last_progress_at:null,failure_reason:null,failure_kind:null});let l=await t.get(i.taskId,i.orgId);f.emit(i.orgId,Rh(i.taskId,"in_progress",{virtualMcpId:l?.virtual_mcp_id??void 0,createdBy:l?.created_by,triggerId:l?.trigger_id,title:l?.title,branch:l?.branch??null,createdAt:l?.created_at,updatedAt:l?.updated_at,messageId:i.messageId}));return}case"RUN_RESUMED":{await t.update(i.taskId,i.orgId,{run_started_at:new Date().toISOString()});let l=await t.get(i.taskId,i.orgId);f.emit(i.orgId,Rh(i.taskId,"in_progress",{virtualMcpId:l?.virtual_mcp_id??void 0,createdBy:l?.created_by,triggerId:l?.trigger_id,title:l?.title,branch:l?.branch??null,createdAt:l?.created_at,updatedAt:l?.updated_at}));return}case"STEP_COMPLETED":f.emit(i.orgId,m6i(i.taskId,i.stepCount));return;case"RUN_COMPLETED":await sB0(i.taskId,i.orgId,"completed",u);return;case"RUN_REQUIRES_ACTION":await sB0(i.taskId,i.orgId,"requires_action",u);return;case"RUN_FAILED":{if(i.reason==="ghost"){if(!await t.forceFailIfInProgress(i.taskId,i.orgId))return;await t.update(i.taskId,i.orgId,{run_config:null,run_started_at:null})}else await t.update(i.taskId,i.orgId,{status:"failed",run_config:null,run_started_at:null,...i.reason==="reaped"?{failure_reason:pKf,failure_kind:"stall"}:{}});let l=await t.get(i.taskId,i.orgId);f.emit(i.orgId,Rh(i.taskId,"failed",{virtualMcpId:l?.virtual_mcp_id??void 0,createdBy:l?.created_by,triggerId:l?.trigger_id,title:l?.title,branch:l?.branch??null,createdAt:l?.created_at,updatedAt:l?.updated_at})),f.emit(i.orgId,OV(i.taskId,"failed"));return}case"PREVIOUS_RUN_ABORTED":return}}async function pB0(i,u){for(let{event:t}of i)await iJf(t,u)}var pKf="Run stalled \u2014 no progress within the idle timeout window";var iF0=g(()=>{Rt()});function uF0(i){return i.now-i.lastProgressAt>i.idleTimeoutMs}function tF0(i){return Math.max(i.persistedLastProgressAt??Number.NEGATIVE_INFINITY,i.currentRunStartedAt)}class ofu{deps;clock;states=new Map;reaperTimer=null;constructor(i,u=()=>new Date){this.deps=i;this.clock=u;this.reaperTimer=setInterval(()=>{this.reapStaleRuns().catch((t)=>{console.error("[RunRegistry] Reaper sweep failed",t)})},uJf)}async execute(i){let u=this.dispatch(i);return await this.react(u),u}dispatch(i){let u=this.states.get(i.taskId),t=aB0(i,u),f=[];for(let l of t){let c=this.states.get(l.taskId);if(l.type==="PREVIOUS_RUN_ABORTED"||l.type==="RUN_FAILED"){if(c?.status.tag==="running")c.status.abortController.abort()}let E=oB0(c,l,this.clock());if(E===void 0)this.states.delete(l.taskId);else this.states.set(l.taskId,E);if(f.push({event:l,state:E}),tJf.has(l.type))fF0().add(1,{"org.id":l.orgId});else if(fJf.has(l.type)&&c?.status.tag==="running")fF0().add(-1,{"org.id":l.orgId})}return f}react(i){return pB0(i,this.deps)}getAbortSignal(i){let u=this.states.get(i);if(u?.status.tag==="running")return u.status.abortController.signal;return null}isRunning(i){return this.states.get(i)?.status.tag==="running"}async stopAll(){for(let[,i]of this.states)if(i.status.tag==="running")i.status.abortController.abort();this.states.clear()}dispose(){if(this.reaperTimer)clearInterval(this.reaperTimer),this.reaperTimer=null}async reapStaleRuns(){let i=this.clock().getTime(),u=[...this.states].filter(([,t])=>t.status.tag==="running");for(let[t,f]of u){if(this.states.get(t)?.status.tag!=="running")continue;let c;try{let $=await this.deps.storage.getProgress(t,f.orgId);c=tF0({persistedLastProgressAt:$?.lastProgressAt??null,currentRunStartedAt:f.status.startedAt.getTime()})}catch($){console.warn(`[RunRegistry] Reaper progress read failed for ${t}; skipping`,$);continue}if(!uF0({lastProgressAt:c,now:i,idleTimeoutMs:yhi}))continue;let E=await this.deps.storage.get(t,f.orgId).catch(()=>null);if(E&&E.status!=="in_progress"){let $=this.states.get(t);if($?.status.tag==="running")$.status.abortController.abort();this.states.delete(t);continue}console.warn(`[RunRegistry] Reaping stuck run for thread ${t} (idle > ${yhi/60000}m) ...`),lJf().add(1,{"org.id":f.orgId,reason:"idle_timeout"}),await this.execute({type:"FORCE_FAIL",taskId:t,reason:"reaped"}).catch(($)=>{console.error("[RunRegistry] Reaper execute failed",$)})}}}var uJf=300000,afu,yhi,tJf,fJf,lF0=(i)=>{let u;return()=>u??=i()},fF0,lJf;var sfu=g(()=>{iF0();jl();afu=Number(process.env.RUN_IDLE_TIMEOUT_MS),yhi=Number.isFinite(afu)&&afu>0?afu:600000,tJf=new Set(["RUN_STARTED","RUN_RESUMED"]),fJf=new Set(["RUN_COMPLETED","RUN_FAILED","RUN_REQUIRES_ACTION","PREVIOUS_RUN_ABORTED"]),fF0=lF0(()=>Bt.createUpDownCounter("decopilot.stream.inflight",{description:"Number of in-flight decopilot stream requests",unit:"{requests}"})),lJf=lF0(()=>Bt.createCounter("decopilot.run.reaped",{description:"Number of decopilot runs force-failed by the progress-based reaper",unit:"{runs}"}))});async function cF0(i){let{runId:u}=i,t=rB0(),f=await t.resolveRun(u),l=i.fenceToken??f?.runFenceToken;if(!f||f.version!==2||l==null)return;if(mfu({status:f.status,runFenceToken:f.runFenceToken,fenceToken:l}))return;if(!t.getJetStream())throw Error("JetStream unavailable for consume step");await eB0({runId:u,fenceToken:l,messageId:i.messageId,idleTimeoutMs:i.idleTimeoutMs??yhi},t,mB0)}var EF0=g(()=>{efu();sfu()});function pfu(i){let u=Number.isFinite(i)?Math.max(1,i):1,t=0,f=[];return{async acquire(){if(t<u)t++;else await new Promise((c)=>f.push(c));let l=!1;return()=>{if(l)return;l=!0;let c=f.shift();if(c)c();else t--}},get active(){return t},get pending(){return f.length}}}var cJf,$F0=()=>cJf.acquire();var i4u=g(()=>{cJf=pfu(Number(process.env.DECOPILOT_MAX_CONCURRENT_SUBAGENTS??4))});var u4u,Zhi,yg,wF0=()=>({active:yg.active,pending:yg.pending,max:Zhi}),dF0=()=>{if(yg.active>=Zhi)console.log("[hostedHarness] run parked at concurrency cap",{active:yg.active,pending:yg.pending,max:Zhi});return yg.acquire()};var t4u=g(()=>{i4u();jl();u4u=Number(process.env.DECOPILOT_MAX_CONCURRENT_HOSTED_RUNS),Zhi=Number.isFinite(u4u)&&u4u>0?u4u:3,yg=pfu(Zhi);Bt.createObservableGauge("hosted_runs.active",{description:"Hosted agent-loop runs executing on this pod",unit:"{runs}"}).addCallback((i)=>i.observe(yg.active));Bt.createObservableGauge("hosted_runs.pending",{description:"Hosted agent-loop runs parked waiting for a slot on this pod",unit:"{runs}"}).addCallback((i)=>i.observe(yg.pending))});function hF0(i){let u=i[1],t=i[2],f=Number(i[3]);return{owner:u,repo:t,number:f,url:`https://github.com/${u}/${t}/pull/${f}`}}function _F0(i){let u=i.length>200000?i.slice(0,200000):i,t=EJf.exec(u);if(t&&Number(t[3])>0)return hF0(t);let f=$Jf.exec(u);if(f&&Number(f[3])>0)return hF0(f);return null}function vF0(i){if(i==null)return null;if(typeof i==="string")return _F0(i);let u;try{u=JSON.stringify(i)}catch{return null}return u?_F0(u):null}var EJf,$Jf;var DF0=g(()=>{EJf=/https?:\/\/github\.com\/([^/\s"']+)\/([^/\s"']+)\/pull\/(\d+)/,$Jf=/https?:\/\/api\.github\.com\/repos\/([^/\s"']+)\/([^/\s"']+)\/pulls\/(\d+)/});class OF0{listeners=new Map;totalCount=0;strategy=null;started=!1;async start(i){if(this.started){if(!i)return;await this.stop()}this.strategy=i,await this.strategy.start((u,t)=>this.localEmit(u,t)),this.started=!0}async stop(){if(!this.started||!this.strategy)return;await this.strategy.stop(),this.started=!1}add(i){if(this.totalCount>=gF0)return console.warn(`[SSEHub] Total connection limit reached (${gF0})`),null;let u=this.listeners.get(i.organizationId);if(!u)u=new Map,this.listeners.set(i.organizationId,u);if(u.size>=nF0)return console.warn(`[SSEHub] Per-org connection limit reached for ${i.organizationId} (${nF0})`),null;return u.set(i.id,i),this.totalCount++,i.id}remove(i,u){let t=this.listeners.get(i);if(!t)return;if(t.delete(u)){if(this.totalCount--,t.size===0)this.listeners.delete(i)}}emit(i,u){if(this.strategy)this.strategy.broadcast(i,u);else this.localEmit(i,u)}countForOrg(i){return this.listeners.get(i)?.size??0}get count(){return this.totalCount}localEmit(i,u){let t=this.listeners.get(i);if(!t||t.size===0)return;for(let f of t.values()){if(f.typePatterns&&!wJf(u.type,f.typePatterns))continue;try{f.push(u)}catch{this.remove(i,f.id)}}}}function wJf(i,u){for(let t of u){if(t===i)return!0;if(t.endsWith(".*")){let f=t.slice(0,-1);if(i.startsWith(f))return!0}}return!1}var nF0=50,gF0=500,z1;var Thi=g(()=>{jl();z1=new OF0;Bt.createObservableGauge("sse_hub.connections",{description:"Active SSE listeners held by this pod",unit:"{connections}"}).addCallback((i)=>i.observe(z1.count))});function sa(i,u){z1.emit(i,{id:crypto.randomUUID(),type:hN0,source:"task-board",subject:u.id,data:u,time:new Date().toISOString()})}function dJf(i,u){return i?[i]:u}async function yF0(i,u,t){let f=i.metadata?.runMetadata?.taskBoardItemId,l=!f&&t?await i.storage.taskBoard.linkedTaskIds(t,u):[];return dJf(f,l)}async function Lz(i,u,t){let f=i.organization?.id;if(!f)return;try{for(let l of await yF0(i,f,t)){let c=await i.storage.taskBoard.getById(l,f);if(!c||NF0[u]<=NF0[c.status])continue;let E=await i.storage.taskBoard.update(l,f,{status:u},i.auth?.user?.id??c.updatedBy);sa(f,E)}}catch(l){console.error("[task-board] run transition failed",l)}}async function Bhi(i,u,t,f){let l=i.organization?.id;if(!l)return;try{let c=vF0(u);if(!c)return;let E=await yF0(i,l,f);for(let $ of E)await i.storage.taskBoard.linkPr({taskBoardItemId:$,organizationId:l,url:c.url,prNumber:c.number,repoOwner:c.owner,repoName:c.repo,connectionId:t??null})}catch(c){console.error("[task-board] PR capture failed",c)}}async function f4u(i,u,t){try{let f=await i.advanceLinkedTasksToReviewOnThreadFinish(u,t);for(let l of f)sa(t,l)}catch(f){console.error("[task-board] thread-finish transition failed",f)}}async function ZF0(i,u){let t=i.organization?.id;if(!t)return;try{let f=await i.storage.taskBoard.reopenLinkedTasksOnThreadRun(u,t);for(let l of f)sa(t,l)}catch(f){console.error("[task-board] thread-run reopen failed",f)}}function TF0(i){return i.includes("create_pull_request")||i.includes("createPullRequest")}function BF0(i){if(hJf.test(i))return!0;return _Jf.test(i)&&vJf.test(i)}var NF0,hJf,_Jf,vJf;var Wz=g(()=>{DF0();Thi();NF0={triage:0,todo:1,in_progress:2,in_review:3,done:4};hJf=/\bgh\s+pr\s+create\b/,_Jf=/api\.github\.com\/repos\/[^\s"']+\/pulls\b/,vJf=/(?:-X|--request)\s+POST/});import{DBOS as pa}from"@dbos-inc/dbos-sdk";function E4u(i){l4u=i}function FF0(){if(!l4u)throw Error("[hostedHarness] runtime not initialized \u2014 setHostedHarnessRuntime() must run before workflows fire");return l4u}async function DJf(i,u){let t=FF0(),{request:f}=i,l=u??await t.studioContextFactory(f.organizationId,f.userId);if(!l)throw Error("user membership lost mid-dispatch");if(f.runMetadata)l.metadata.runMetadata=f.runMetadata;if(Lz(l,"in_progress",i.threadId),!f.runMetadata?.taskBoardItemId)ZF0(l,i.threadId);let c=new AbortController,E=await dF0();try{await t.dispatchRunFn({...f,abortSignal:c.signal},l,t.deps)}finally{E()}}function nJf(i,u,t,f=1){let l=t instanceof Error?t.message:String(t);return{messageId:Ng(i,u),errorChunk:{type:"error",errorText:l},seq:f,finalSeq:f}}function gJf(i){if(!(i instanceof Error))return;let u=i.lastAckSeq;return typeof u==="number"?u+1:void 0}async function OJf(i,u){let t=FF0(),{streamBuffer:f}=t.deps,{messageId:l,errorChunk:c,seq:E,finalSeq:$}=nJf(i.runId,i.fenceToken,u,gJf(u));if(!f){console.error(`[hostedHarness] no streamBuffer configured; dropping terminal error for run=${i.runId} fence=${i.fenceToken} messageId=${l}`);return}if(!await f.publishRawChunk(i.runId,c,{fenceToken:i.fenceToken,seq:E})){console.error(`[hostedHarness] failed to publish terminal error chunk for run=${i.runId} fence=${i.fenceToken} messageId=${l}`);return}await f.publishDone(i.runId,i.fenceToken,$)}async function NJf(i){try{await pa.runStep(()=>DJf(i),{name:"runHostedHarness",retriesAllowed:!1})}catch(u){await pa.runStep(()=>OJf(i,u),{name:"publishHostedHarnessFailure",retriesAllowed:!0}).catch((t)=>{console.error(`[hostedHarness] could not publish terminal error for run=${i.runId} fence=${i.fenceToken}`,t)})}}function UF0(i,u){return`decopilot-hosted:${i}:${u}`}async function PF0(i){return{workflowID:(await pa.startWorkflow(yJf,{workflowID:UF0(i.runId,i.fenceToken),queueName:jD,enqueueOptions:{queuePartitionKey:i.threadId}})(i)).workflowID}}async function $4u(i,u){await pa.cancelWorkflow(UF0(i,u))}var c4u=1,l4u=null,yJf;var w4u=g(()=>{t4u();Wz();yJf=pa.registerWorkflow(NJf,{name:"hostedHarnessWorkflow",maxRecoveryAttempts:1000})});import{DBOS as Yz}from"@dbos-inc/dbos-sdk";function ZJf(i){if(i.harnessId==="decopilot")return"cluster";if(i.isLinkCapable&&i.sandboxProviderKind==="user-desktop")return"sandbox";if((i.harnessId==="claude-code"||i.harnessId==="codex")&&i.sandboxProviderKind==="agent-sandbox")throw Error(`not implemented: CLI harness "${i.harnessId}" on an agent-sandbox (cloud-CLI is a planned follow-up)`);return"cluster"}function _4u(i){d4u=i}function TJf(){if(!d4u)throw Error("[threadGate] runtime not initialized \u2014 setThreadGateRuntime() must run before workflows fire");return d4u}function BJf(i,u=H3i){let t=i.runFenceToken;if(t)return{runFenceToken:t,claimedRequest:i,shouldPersistFence:!1};let f=u();return{runFenceToken:f,claimedRequest:{...i,runFenceToken:f},shouldPersistFence:!0}}async function FJf(i){let u=TJf(),{request:t}=i,f=t.taskId??i.threadId;if(DN0({harnessId:t.harnessId,sandboxProviderKind:t.target?.sandboxProviderKind}))await B8(u.deps.streamBuffer,f,"starting-run");let l=await u.studioContextFactory(t.organizationId,t.userId);if(!l)throw Error("user membership lost mid-dispatch");let c=u.workPublisher,E=u.prepareLinkWorkFn!=null&&c!=null,$=ZJf({isLinkCapable:E,sandboxProviderKind:t.target?.sandboxProviderKind,harnessId:t.harnessId}),w=t.taskId??i.threadId,{runFenceToken:d,claimedRequest:h,shouldPersistFence:_}=BJf(t);if(_)await l.storage.threads.setRunFence(w,d);if($==="cluster")return{runFenceToken:d,hostedEnqueue:{runId:f,fenceToken:d,threadId:i.threadId,request:h}};let v=i.timeoutMs??u.runTimeoutMs,D=new AbortController,n=v!=null?setTimeout(()=>D.abort(),v):null;try{let{taskId:O,runFenceToken:N,harnessInput:y,messagesRef:Z,sandboxConfig:T,orgSlug:B}=await u.prepareLinkWorkFn({...h,abortSignal:D.signal},l,u.deps);if(N!==d)throw Error(`prepareLinkWorkFn returned fence ${N}; expected ${d}`);let F={runId:O,threadId:t.taskId??i.threadId,orgId:t.organizationId,userId:t.userId,runFenceToken:N,harnessInput:y,...T?{sandbox:T}:{},orgSlug:B,...Z?{messagesRef:Z}:{}};try{await c.publish(t.userId,F,{signal:D.signal})}catch(A){return console.error(`[thread-gate] link work publish failed for run=${O}; marking failed`,A),await l.storage.threads.forceFailIfInProgress(O),{runFenceToken:d}}}finally{if(n!==null)clearTimeout(n)}return{runFenceToken:d}}async function UJf(i){if(i.source!=="user-message")return;let{request:u}=i;mu.capture({distinctId:u.userId,event:"chat_message_started",groups:{organization:u.organizationId},properties:{organization_id:u.organizationId,agent_id:u.agent,mode:u.mode,thread_id:u.taskId??i.threadId,credential_id:u.models.credentialId}})}async function PJf(i,u){if(i.source!=="user-message")return;let{request:t}=i;mu.capture({distinctId:t.userId,event:"chat_message_failed",groups:{organization:t.organizationId},properties:{organization_id:t.organizationId,thread_id:t.taskId??i.threadId,agent_id:t.agent,model_id:t.models.thinking.id,mode:t.mode,error_category:"setup",error_message:u}})}async function Fhi(i){await Yz.runStep(()=>UJf(i),{name:"trackMessageStarted"});let u;try{let l=i.request.target?.sandboxProviderKind!=="user-desktop";if(u=await Yz.runStep(()=>FJf(i),{name:"dispatchRunAndWait",retriesAllowed:l}),u.hostedEnqueue)await PF0(u.hostedEnqueue)}catch(l){let c=l instanceof Error?l.message:String(l);throw await Yz.runStep(()=>PJf(i,c),{name:"trackMessageFailed"}),l}let t=i.request.taskId??i.threadId,f="messages"in i.request?void 0:i.request.messageId;return await Yz.runStep(()=>cF0({runId:t,fenceToken:u.runFenceToken,messageId:f}),{name:"consumeRunProjection"}),{taskId:i.request.taskId??i.threadId}}async function AJf(i){return Fhi(i)}async function Zg(i,u){return{workflowID:(await Yz.startWorkflow(IJf,{queueName:Ih,enqueueOptions:{queuePartitionKey:i.threadId},workflowID:u?.workflowID})(i)).workflowID}}var h4u=1,d4u=null,IJf;var AF0=g(()=>{H4();Xa();EF0();w4u();IJf=Yz.registerWorkflow(AJf,{name:"threadGateWorkflow",maxRecoveryAttempts:1000})});var Qz=g(()=>{AF0();w4u()});async function zz(i,u){if(u.assigneeId!==gd)return;sa(u.organizationId,u),await xJf(i,u).catch((t)=>{console.error("[task-board] Super Agent enqueue failed",t)})}async function xJf(i,u){let t=u.organizationId,f=u.assignedBy??u.createdBy,l=await T_(i,"smart"),c=KW(t),E=await i.storage.threads.create({organization_id:t,title:`Super Agent: ${u.title}`,status:"in_progress",virtual_mcp_id:c,message_storage_version:2,created_by:f});await i.storage.taskBoard.linkThread(u.id,E.id,t);let $=["You've been assigned this task. Complete it.","",`Title: ${u.title}`,u.description?`
86600
+ `).replace(/https?:\/\/[^\s)>\]]+/g,"").includes("?")?"requires_action":"completed";if(i==="tool-calls"){let t=u.some((l)=>l.type==="tool-user_ask"&&l.state==="input-available"),f=u.some((l)=>l.state==="approval-requested");return t||f?"requires_action":"completed"}return"failed"}function Ng(i,u){return`error-${i}:${u}`}function Nhi(i){return{id:i.id,role:i.role,parts:i.parts,metadata:i.metadata??void 0}}var Vfu=()=>{};function aKf(i){return`liveness: no stream events for ${Math.round(i/60000)}m`}function mfu(i){return i.runFenceToken!==null&&i.runFenceToken!==i.fenceToken}function qB0(i){rfu=i}function VB0(){if(!rfu)throw Error("[projector-workflow] runtime not initialized \u2014 setProjectorWorkflowRuntime() must run before workflows fire");return rfu}function rB0(){return VB0()}async function mB0(i,u,t){let f=VB0(),l=f.getJetStream();if(!l)throw Error("JetStream unavailable");let c=(await f.messageParts.loadWindow(i.runId,{limit:500})).messages.map(Nhi);return{chunkCount:0,attempts:1,outcome:await JB0({chunkStream:MB0(await zB0({js:l,runId:i.runId,fenceToken:i.fenceToken,idleTimeoutMs:i.idleTimeoutMs}),i.runId,oKf,()=>{f.bumpProgress({runId:i.runId,orgId:u}).catch(()=>{})}),persistence:await RB0({messageParts:f.messageParts,orgId:u,runId:i.runId,requestMessageId:i.messageId,replaceFinal:!0}),originalMessages:c,errorMessageId:Ng(i.runId,i.fenceToken),title:{threadId:i.runId,currentThreadTitle:t,persistTitle:async($,w)=>{await f.persistTitle(i.runId,u,w),await f.onTitleUpdated({runId:i.runId,orgId:u,title:w})}}})}}async function eB0(i,u,t){let f=await sKf(i,u);if("skip"in f)return;let l=f.row.orgId,c=f.row.createdBy??i.runId,E=f.row.title;try{let{outcome:$}=await t(i,l,E),w=$?.failed?"failed":$?.finishReason==null?"completed":Ohi($.finishReason,$.finalParts);if(w==="failed"){let d=$?.finishReason?`harness reported an error: ${$.finishReason}`:"harness reported an error";if(ghi(i.runId,l),await u.markRunFailed(i.runId,l,d,"harness"))await u.recordFailed({runId:i.runId,orgId:l,distinctId:c,reason:d,kind:"harness"})}else if(w==="requires_action")await u.markRunRequiresAction(i.runId,l),await u.clearSynthesizedError(i.runId,i.fenceToken);else{if(await u.completeRunIfNotCompleted(i.runId,l))await u.recordCompleted({runId:i.runId,orgId:l,distinctId:c,usage:$?.usage??{inputTokens:0,outputTokens:0,totalTokens:0}});await u.clearSynthesizedError(i.runId,i.fenceToken)}await u.purgeRun(i.runId,i.fenceToken)}catch($){if($ instanceof oa){let v=`stream truncated before projection could replay it: ${$.message}`;if(ghi(i.runId,l),await u.markRunFailed(i.runId,l,v,"projection"))await u.recordFailed({runId:i.runId,orgId:l,distinctId:c,reason:v,kind:"projection"});await u.purgeRun(i.runId,i.fenceToken);return}let w=$ instanceof vhi;if(w){let v=await u.resolveRun(i.runId).catch(()=>null);if(v!==null&&v.runFenceToken===i.fenceToken&&["completed","failed","requires_action"].includes(v.status)){await u.purgeRun(i.runId,i.fenceToken);return}}let d=w?aKf($.idleTimeoutMs):$ instanceof Error?$.message:String($),h=w?"liveness":"projection";if(ghi(i.runId,l),await u.markRunFailed(i.runId,l,d,h))await u.recordFailed({runId:i.runId,orgId:l,distinctId:c,reason:d,kind:h});throw $}}async function sKf(i,u){let t=await u.resolveRun(i.runId);if(!t)return{skip:"missing"};if(mfu({status:t.status,runFenceToken:t.runFenceToken,fenceToken:i.fenceToken}))return{skip:"stale",row:t};if(t.version!==2)return{skip:"legacy-v1",row:t};return{row:t}}var rfu=null,oKf;var efu=g(()=>{XB0();HB0();nhi();bB0();CB0();Vfu();oKf=new qfu});function aB0(i,u){switch(i.type){case"START":{let t={type:"RUN_STARTED",taskId:i.taskId,orgId:i.orgId,userId:i.userId,abortController:i.abortController,runConfig:i.runConfig,podId:i.podId,messageId:i.messageId};if(u?.status.tag==="running")return[{type:"PREVIOUS_RUN_ABORTED",taskId:i.taskId,orgId:u.orgId},t];return[t]}case"STEP_DONE":{if(u?.status.tag!=="running")return[];return[{type:"STEP_COMPLETED",taskId:i.taskId,orgId:u.orgId,stepCount:u.status.stepCount+1}]}case"FINISH":{if(u==null||u.status.tag!=="running")return[];let{stepCount:t}=u.status;if(i.threadStatus==="completed")return[{type:"RUN_COMPLETED",taskId:i.taskId,orgId:u.orgId,stepCount:t}];if(i.threadStatus==="requires_action")return[{type:"RUN_REQUIRES_ACTION",taskId:i.taskId,orgId:u.orgId,stepCount:t}];return[{type:"RUN_FAILED",taskId:i.taskId,orgId:u.orgId,reason:"error"}]}case"CANCEL":{if(u?.status.tag!=="running")return[];return[{type:"RUN_FAILED",taskId:i.taskId,orgId:u.orgId,reason:"cancelled"}]}case"RESUME":{if(u?.status.tag==="running")return[];return[{type:"RUN_RESUMED",taskId:i.taskId,orgId:i.orgId,userId:i.userId,abortController:i.abortController,podId:i.podId}]}case"FORCE_FAIL":{if(i.reason==="ghost")return[{type:"RUN_FAILED",taskId:i.taskId,orgId:u?.orgId??i.orgId,reason:i.reason}];if(u?.status.tag!=="running")return[];return[{type:"RUN_FAILED",taskId:i.taskId,orgId:u.orgId,reason:i.reason}]}}}function oB0(i,u,t=new Date){switch(u.type){case"RUN_STARTED":return{taskId:u.taskId,orgId:u.orgId,userId:u.userId,status:{tag:"running",abortController:u.abortController,stepCount:0,startedAt:t}};case"RUN_RESUMED":return{taskId:u.taskId,orgId:u.orgId,userId:u.userId,status:{tag:"running",abortController:u.abortController,stepCount:0,startedAt:t}};case"STEP_COMPLETED":if(i?.status.tag!=="running")return i;return{...i,status:{...i.status,stepCount:u.stepCount}};case"RUN_COMPLETED":return;case"RUN_REQUIRES_ACTION":return;case"RUN_FAILED":return;case"PREVIOUS_RUN_ABORTED":return}}async function sB0(i,u,t,f){let{storage:l,sseHub:c}=f,E=await l.get(i,u);c.emit(u,Rh(i,t,{virtualMcpId:E?.virtual_mcp_id??void 0,createdBy:E?.created_by,triggerId:E?.trigger_id,title:E?.title,branch:E?.branch??null,createdAt:E?.created_at,updatedAt:E?.updated_at})),c.emit(u,OV(i,t))}async function iJf(i,u){let{storage:t,sseHub:f}=u;switch(i.type){case"RUN_STARTED":{await t.update(i.taskId,i.orgId,{status:"in_progress",run_config:i.runConfig??null,run_started_at:new Date().toISOString(),last_progress_at:null,failure_reason:null,failure_kind:null});let l=await t.get(i.taskId,i.orgId);f.emit(i.orgId,Rh(i.taskId,"in_progress",{virtualMcpId:l?.virtual_mcp_id??void 0,createdBy:l?.created_by,triggerId:l?.trigger_id,title:l?.title,branch:l?.branch??null,createdAt:l?.created_at,updatedAt:l?.updated_at,messageId:i.messageId}));return}case"RUN_RESUMED":{await t.update(i.taskId,i.orgId,{status:"in_progress",run_started_at:new Date().toISOString(),last_progress_at:null,failure_reason:null,failure_kind:null});let l=await t.get(i.taskId,i.orgId);f.emit(i.orgId,Rh(i.taskId,"in_progress",{virtualMcpId:l?.virtual_mcp_id??void 0,createdBy:l?.created_by,triggerId:l?.trigger_id,title:l?.title,branch:l?.branch??null,createdAt:l?.created_at,updatedAt:l?.updated_at}));return}case"STEP_COMPLETED":f.emit(i.orgId,m6i(i.taskId,i.stepCount));return;case"RUN_COMPLETED":await sB0(i.taskId,i.orgId,"completed",u);return;case"RUN_REQUIRES_ACTION":await sB0(i.taskId,i.orgId,"requires_action",u);return;case"RUN_FAILED":{if(i.reason==="ghost"){if(!await t.forceFailIfInProgress(i.taskId,i.orgId))return;await t.update(i.taskId,i.orgId,{run_config:null,run_started_at:null})}else await t.update(i.taskId,i.orgId,{status:"failed",run_config:null,run_started_at:null,...i.reason==="reaped"?{failure_reason:pKf,failure_kind:"stall"}:{}});let l=await t.get(i.taskId,i.orgId);f.emit(i.orgId,Rh(i.taskId,"failed",{virtualMcpId:l?.virtual_mcp_id??void 0,createdBy:l?.created_by,triggerId:l?.trigger_id,title:l?.title,branch:l?.branch??null,createdAt:l?.created_at,updatedAt:l?.updated_at})),f.emit(i.orgId,OV(i.taskId,"failed"));return}case"PREVIOUS_RUN_ABORTED":return}}async function pB0(i,u){for(let{event:t}of i)await iJf(t,u)}var pKf="Run stalled \u2014 no progress within the idle timeout window";var iF0=g(()=>{Rt()});function uF0(i){return i.now-i.lastProgressAt>i.idleTimeoutMs}function tF0(i){return Math.max(i.persistedLastProgressAt??Number.NEGATIVE_INFINITY,i.currentRunStartedAt)}class ofu{deps;clock;states=new Map;reaperTimer=null;constructor(i,u=()=>new Date){this.deps=i;this.clock=u;this.reaperTimer=setInterval(()=>{this.reapStaleRuns().catch((t)=>{console.error("[RunRegistry] Reaper sweep failed",t)})},uJf)}async execute(i){let u=this.dispatch(i);return await this.react(u),u}dispatch(i){let u=this.states.get(i.taskId),t=aB0(i,u),f=[];for(let l of t){let c=this.states.get(l.taskId);if(l.type==="PREVIOUS_RUN_ABORTED"||l.type==="RUN_FAILED"){if(c?.status.tag==="running")c.status.abortController.abort()}let E=oB0(c,l,this.clock());if(E===void 0)this.states.delete(l.taskId);else this.states.set(l.taskId,E);if(f.push({event:l,state:E}),tJf.has(l.type))fF0().add(1,{"org.id":l.orgId});else if(fJf.has(l.type)&&c?.status.tag==="running")fF0().add(-1,{"org.id":l.orgId})}return f}react(i){return pB0(i,this.deps)}getAbortSignal(i){let u=this.states.get(i);if(u?.status.tag==="running")return u.status.abortController.signal;return null}isRunning(i){return this.states.get(i)?.status.tag==="running"}async stopAll(){for(let[,i]of this.states)if(i.status.tag==="running")i.status.abortController.abort();this.states.clear()}dispose(){if(this.reaperTimer)clearInterval(this.reaperTimer),this.reaperTimer=null}async reapStaleRuns(){let i=this.clock().getTime(),u=[...this.states].filter(([,t])=>t.status.tag==="running");for(let[t,f]of u){if(this.states.get(t)?.status.tag!=="running")continue;let c;try{let $=await this.deps.storage.getProgress(t,f.orgId);c=tF0({persistedLastProgressAt:$?.lastProgressAt??null,currentRunStartedAt:f.status.startedAt.getTime()})}catch($){console.warn(`[RunRegistry] Reaper progress read failed for ${t}; skipping`,$);continue}if(!uF0({lastProgressAt:c,now:i,idleTimeoutMs:yhi}))continue;let E=await this.deps.storage.get(t,f.orgId).catch(()=>null);if(E&&E.status!=="in_progress"){let $=this.states.get(t);if($?.status.tag==="running")$.status.abortController.abort();this.states.delete(t);continue}console.warn(`[RunRegistry] Reaping stuck run for thread ${t} (idle > ${yhi/60000}m) ...`),lJf().add(1,{"org.id":f.orgId,reason:"idle_timeout"}),await this.execute({type:"FORCE_FAIL",taskId:t,reason:"reaped"}).catch(($)=>{console.error("[RunRegistry] Reaper execute failed",$)})}}}var uJf=300000,afu,yhi,tJf,fJf,lF0=(i)=>{let u;return()=>u??=i()},fF0,lJf;var sfu=g(()=>{iF0();jl();afu=Number(process.env.RUN_IDLE_TIMEOUT_MS),yhi=Number.isFinite(afu)&&afu>0?afu:600000,tJf=new Set(["RUN_STARTED","RUN_RESUMED"]),fJf=new Set(["RUN_COMPLETED","RUN_FAILED","RUN_REQUIRES_ACTION","PREVIOUS_RUN_ABORTED"]),fF0=lF0(()=>Bt.createUpDownCounter("decopilot.stream.inflight",{description:"Number of in-flight decopilot stream requests",unit:"{requests}"})),lJf=lF0(()=>Bt.createCounter("decopilot.run.reaped",{description:"Number of decopilot runs force-failed by the progress-based reaper",unit:"{runs}"}))});async function cF0(i){let{runId:u}=i,t=rB0(),f=await t.resolveRun(u),l=i.fenceToken??f?.runFenceToken;if(!f||f.version!==2||l==null)return;if(mfu({status:f.status,runFenceToken:f.runFenceToken,fenceToken:l}))return;if(!t.getJetStream())throw Error("JetStream unavailable for consume step");await eB0({runId:u,fenceToken:l,messageId:i.messageId,idleTimeoutMs:i.idleTimeoutMs??yhi},t,mB0)}var EF0=g(()=>{efu();sfu()});function pfu(i){let u=Number.isFinite(i)?Math.max(1,i):1,t=0,f=[];return{async acquire(){if(t<u)t++;else await new Promise((c)=>f.push(c));let l=!1;return()=>{if(l)return;l=!0;let c=f.shift();if(c)c();else t--}},get active(){return t},get pending(){return f.length}}}var cJf,$F0=()=>cJf.acquire();var i4u=g(()=>{cJf=pfu(Number(process.env.DECOPILOT_MAX_CONCURRENT_SUBAGENTS??4))});var u4u,Zhi,yg,wF0=()=>({active:yg.active,pending:yg.pending,max:Zhi}),dF0=()=>{if(yg.active>=Zhi)console.log("[hostedHarness] run parked at concurrency cap",{active:yg.active,pending:yg.pending,max:Zhi});return yg.acquire()};var t4u=g(()=>{i4u();jl();u4u=Number(process.env.DECOPILOT_MAX_CONCURRENT_HOSTED_RUNS),Zhi=Number.isFinite(u4u)&&u4u>0?u4u:3,yg=pfu(Zhi);Bt.createObservableGauge("hosted_runs.active",{description:"Hosted agent-loop runs executing on this pod",unit:"{runs}"}).addCallback((i)=>i.observe(yg.active));Bt.createObservableGauge("hosted_runs.pending",{description:"Hosted agent-loop runs parked waiting for a slot on this pod",unit:"{runs}"}).addCallback((i)=>i.observe(yg.pending))});function hF0(i){let u=i[1],t=i[2],f=Number(i[3]);return{owner:u,repo:t,number:f,url:`https://github.com/${u}/${t}/pull/${f}`}}function _F0(i){let u=i.length>200000?i.slice(0,200000):i,t=EJf.exec(u);if(t&&Number(t[3])>0)return hF0(t);let f=$Jf.exec(u);if(f&&Number(f[3])>0)return hF0(f);return null}function vF0(i){if(i==null)return null;if(typeof i==="string")return _F0(i);let u;try{u=JSON.stringify(i)}catch{return null}return u?_F0(u):null}var EJf,$Jf;var DF0=g(()=>{EJf=/https?:\/\/github\.com\/([^/\s"']+)\/([^/\s"']+)\/pull\/(\d+)/,$Jf=/https?:\/\/api\.github\.com\/repos\/([^/\s"']+)\/([^/\s"']+)\/pulls\/(\d+)/});class OF0{listeners=new Map;totalCount=0;strategy=null;started=!1;async start(i){if(this.started){if(!i)return;await this.stop()}this.strategy=i,await this.strategy.start((u,t)=>this.localEmit(u,t)),this.started=!0}async stop(){if(!this.started||!this.strategy)return;await this.strategy.stop(),this.started=!1}add(i){if(this.totalCount>=gF0)return console.warn(`[SSEHub] Total connection limit reached (${gF0})`),null;let u=this.listeners.get(i.organizationId);if(!u)u=new Map,this.listeners.set(i.organizationId,u);if(u.size>=nF0)return console.warn(`[SSEHub] Per-org connection limit reached for ${i.organizationId} (${nF0})`),null;return u.set(i.id,i),this.totalCount++,i.id}remove(i,u){let t=this.listeners.get(i);if(!t)return;if(t.delete(u)){if(this.totalCount--,t.size===0)this.listeners.delete(i)}}emit(i,u){if(this.strategy)this.strategy.broadcast(i,u);else this.localEmit(i,u)}countForOrg(i){return this.listeners.get(i)?.size??0}get count(){return this.totalCount}localEmit(i,u){let t=this.listeners.get(i);if(!t||t.size===0)return;for(let f of t.values()){if(f.typePatterns&&!wJf(u.type,f.typePatterns))continue;try{f.push(u)}catch{this.remove(i,f.id)}}}}function wJf(i,u){for(let t of u){if(t===i)return!0;if(t.endsWith(".*")){let f=t.slice(0,-1);if(i.startsWith(f))return!0}}return!1}var nF0=50,gF0=500,z1;var Thi=g(()=>{jl();z1=new OF0;Bt.createObservableGauge("sse_hub.connections",{description:"Active SSE listeners held by this pod",unit:"{connections}"}).addCallback((i)=>i.observe(z1.count))});function sa(i,u){z1.emit(i,{id:crypto.randomUUID(),type:hN0,source:"task-board",subject:u.id,data:u,time:new Date().toISOString()})}function dJf(i,u){return i?[i]:u}async function yF0(i,u,t){let f=i.metadata?.runMetadata?.taskBoardItemId,l=!f&&t?await i.storage.taskBoard.linkedTaskIds(t,u):[];return dJf(f,l)}async function Lz(i,u,t){let f=i.organization?.id;if(!f)return;try{for(let l of await yF0(i,f,t)){let c=await i.storage.taskBoard.getById(l,f);if(!c||NF0[u]<=NF0[c.status])continue;let E=await i.storage.taskBoard.update(l,f,{status:u},i.auth?.user?.id??c.updatedBy);sa(f,E)}}catch(l){console.error("[task-board] run transition failed",l)}}async function Bhi(i,u,t,f){let l=i.organization?.id;if(!l)return;try{let c=vF0(u);if(!c)return;let E=await yF0(i,l,f);for(let $ of E)await i.storage.taskBoard.linkPr({taskBoardItemId:$,organizationId:l,url:c.url,prNumber:c.number,repoOwner:c.owner,repoName:c.repo,connectionId:t??null})}catch(c){console.error("[task-board] PR capture failed",c)}}async function f4u(i,u,t){try{let f=await i.advanceLinkedTasksToReviewOnThreadFinish(u,t);for(let l of f)sa(t,l)}catch(f){console.error("[task-board] thread-finish transition failed",f)}}async function ZF0(i,u){let t=i.organization?.id;if(!t)return;try{let f=await i.storage.taskBoard.reopenLinkedTasksOnThreadRun(u,t);for(let l of f)sa(t,l)}catch(f){console.error("[task-board] thread-run reopen failed",f)}}function TF0(i){return i.includes("create_pull_request")||i.includes("createPullRequest")}function BF0(i){if(hJf.test(i))return!0;return _Jf.test(i)&&vJf.test(i)}var NF0,hJf,_Jf,vJf;var Wz=g(()=>{DF0();Thi();NF0={triage:0,todo:1,in_progress:2,in_review:3,done:4};hJf=/\bgh\s+pr\s+create\b/,_Jf=/api\.github\.com\/repos\/[^\s"']+\/pulls\b/,vJf=/(?:-X|--request)\s+POST/});import{DBOS as pa}from"@dbos-inc/dbos-sdk";function E4u(i){l4u=i}function FF0(){if(!l4u)throw Error("[hostedHarness] runtime not initialized \u2014 setHostedHarnessRuntime() must run before workflows fire");return l4u}async function DJf(i,u){let t=FF0(),{request:f}=i,l=u??await t.studioContextFactory(f.organizationId,f.userId);if(!l)throw Error("user membership lost mid-dispatch");if(f.runMetadata)l.metadata.runMetadata=f.runMetadata;if(Lz(l,"in_progress",i.threadId),!f.runMetadata?.taskBoardItemId)ZF0(l,i.threadId);let c=new AbortController,E=await dF0();try{await t.dispatchRunFn({...f,abortSignal:c.signal},l,t.deps)}finally{E()}}function nJf(i,u,t,f=1){let l=t instanceof Error?t.message:String(t);return{messageId:Ng(i,u),errorChunk:{type:"error",errorText:l},seq:f,finalSeq:f}}function gJf(i){if(!(i instanceof Error))return;let u=i.lastAckSeq;return typeof u==="number"?u+1:void 0}async function OJf(i,u){let t=FF0(),{streamBuffer:f}=t.deps,{messageId:l,errorChunk:c,seq:E,finalSeq:$}=nJf(i.runId,i.fenceToken,u,gJf(u));if(!f){console.error(`[hostedHarness] no streamBuffer configured; dropping terminal error for run=${i.runId} fence=${i.fenceToken} messageId=${l}`);return}if(!await f.publishRawChunk(i.runId,c,{fenceToken:i.fenceToken,seq:E})){console.error(`[hostedHarness] failed to publish terminal error chunk for run=${i.runId} fence=${i.fenceToken} messageId=${l}`);return}await f.publishDone(i.runId,i.fenceToken,$)}async function NJf(i){try{await pa.runStep(()=>DJf(i),{name:"runHostedHarness",retriesAllowed:!1})}catch(u){await pa.runStep(()=>OJf(i,u),{name:"publishHostedHarnessFailure",retriesAllowed:!0}).catch((t)=>{console.error(`[hostedHarness] could not publish terminal error for run=${i.runId} fence=${i.fenceToken}`,t)})}}function UF0(i,u){return`decopilot-hosted:${i}:${u}`}async function PF0(i){return{workflowID:(await pa.startWorkflow(yJf,{workflowID:UF0(i.runId,i.fenceToken),queueName:jD,enqueueOptions:{queuePartitionKey:i.threadId}})(i)).workflowID}}async function $4u(i,u){await pa.cancelWorkflow(UF0(i,u))}var c4u=1,l4u=null,yJf;var w4u=g(()=>{t4u();Wz();yJf=pa.registerWorkflow(NJf,{name:"hostedHarnessWorkflow",maxRecoveryAttempts:1000})});import{DBOS as Yz}from"@dbos-inc/dbos-sdk";function ZJf(i){if(i.harnessId==="decopilot")return"cluster";if(i.isLinkCapable&&i.sandboxProviderKind==="user-desktop")return"sandbox";if((i.harnessId==="claude-code"||i.harnessId==="codex")&&i.sandboxProviderKind==="agent-sandbox")throw Error(`not implemented: CLI harness "${i.harnessId}" on an agent-sandbox (cloud-CLI is a planned follow-up)`);return"cluster"}function _4u(i){d4u=i}function TJf(){if(!d4u)throw Error("[threadGate] runtime not initialized \u2014 setThreadGateRuntime() must run before workflows fire");return d4u}function BJf(i,u=H3i){let t=i.runFenceToken;if(t)return{runFenceToken:t,claimedRequest:i,shouldPersistFence:!1};let f=u();return{runFenceToken:f,claimedRequest:{...i,runFenceToken:f},shouldPersistFence:!0}}async function FJf(i){let u=TJf(),{request:t}=i,f=t.taskId??i.threadId;if(DN0({harnessId:t.harnessId,sandboxProviderKind:t.target?.sandboxProviderKind}))await B8(u.deps.streamBuffer,f,"starting-run");let l=await u.studioContextFactory(t.organizationId,t.userId);if(!l)throw Error("user membership lost mid-dispatch");let c=u.workPublisher,E=u.prepareLinkWorkFn!=null&&c!=null,$=ZJf({isLinkCapable:E,sandboxProviderKind:t.target?.sandboxProviderKind,harnessId:t.harnessId}),w=t.taskId??i.threadId,{runFenceToken:d,claimedRequest:h,shouldPersistFence:_}=BJf(t);if(_)await l.storage.threads.setRunFence(w,d);if($==="cluster")return{runFenceToken:d,hostedEnqueue:{runId:f,fenceToken:d,threadId:i.threadId,request:h}};let v=i.timeoutMs??u.runTimeoutMs,D=new AbortController,n=v!=null?setTimeout(()=>D.abort(),v):null;try{let{taskId:O,runFenceToken:N,harnessInput:y,messagesRef:Z,sandboxConfig:T,orgSlug:B}=await u.prepareLinkWorkFn({...h,abortSignal:D.signal},l,u.deps);if(N!==d)throw Error(`prepareLinkWorkFn returned fence ${N}; expected ${d}`);let F={runId:O,threadId:t.taskId??i.threadId,orgId:t.organizationId,userId:t.userId,runFenceToken:N,harnessInput:y,...T?{sandbox:T}:{},orgSlug:B,...Z?{messagesRef:Z}:{}};try{await c.publish(t.userId,F,{signal:D.signal})}catch(A){return console.error(`[thread-gate] link work publish failed for run=${O}; marking failed`,A),await l.storage.threads.forceFailIfInProgress(O),{runFenceToken:d}}}finally{if(n!==null)clearTimeout(n)}return{runFenceToken:d}}async function UJf(i){if(i.source!=="user-message")return;let{request:u}=i;mu.capture({distinctId:u.userId,event:"chat_message_started",groups:{organization:u.organizationId},properties:{organization_id:u.organizationId,agent_id:u.agent,mode:u.mode,thread_id:u.taskId??i.threadId,credential_id:u.models.credentialId}})}async function PJf(i,u){if(i.source!=="user-message")return;let{request:t}=i;mu.capture({distinctId:t.userId,event:"chat_message_failed",groups:{organization:t.organizationId},properties:{organization_id:t.organizationId,thread_id:t.taskId??i.threadId,agent_id:t.agent,model_id:t.models.thinking.id,mode:t.mode,error_category:"setup",error_message:u}})}async function Fhi(i){await Yz.runStep(()=>UJf(i),{name:"trackMessageStarted"});let u;try{let l=i.request.target?.sandboxProviderKind!=="user-desktop";if(u=await Yz.runStep(()=>FJf(i),{name:"dispatchRunAndWait",retriesAllowed:l}),u.hostedEnqueue)await PF0(u.hostedEnqueue)}catch(l){let c=l instanceof Error?l.message:String(l);throw await Yz.runStep(()=>PJf(i,c),{name:"trackMessageFailed"}),l}let t=i.request.taskId??i.threadId,f="messages"in i.request?void 0:i.request.messageId;return await Yz.runStep(()=>cF0({runId:t,fenceToken:u.runFenceToken,messageId:f}),{name:"consumeRunProjection"}),{taskId:i.request.taskId??i.threadId}}async function AJf(i){return Fhi(i)}async function Zg(i,u){return{workflowID:(await Yz.startWorkflow(IJf,{queueName:Ih,enqueueOptions:{queuePartitionKey:i.threadId},workflowID:u?.workflowID})(i)).workflowID}}var h4u=1,d4u=null,IJf;var AF0=g(()=>{H4();Xa();EF0();w4u();IJf=Yz.registerWorkflow(AJf,{name:"threadGateWorkflow",maxRecoveryAttempts:1000})});var Qz=g(()=>{AF0();w4u()});async function zz(i,u){if(u.assigneeId!==gd)return;sa(u.organizationId,u),await xJf(i,u).catch((t)=>{console.error("[task-board] Super Agent enqueue failed",t)})}async function xJf(i,u){let t=u.organizationId,f=u.assignedBy??u.createdBy,l=await T_(i,"smart"),c=KW(t),E=await i.storage.threads.create({organization_id:t,title:`Super Agent: ${u.title}`,status:"in_progress",virtual_mcp_id:c,message_storage_version:2,created_by:f});await i.storage.taskBoard.linkThread(u.id,E.id,t);let $=["You've been assigned this task. Complete it.","",`Title: ${u.title}`,u.description?`
86601
86601
  Description:
86602
86602
  ${u.description}
86603
86603
  `:"","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(`