decocms 4.158.2 → 4.158.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (220) hide show
  1. package/dist/client/assets/{AlertCircle-qIC_xSrj.js → AlertCircle-YkJszhyi.js} +1 -1
  2. package/dist/client/assets/{AreaChart-HkmLkZy2.js → AreaChart-D6sbwDYG.js} +1 -1
  3. package/dist/client/assets/{ArrowUp-Dv6dW9X3.js → ArrowUp-DPqqjxMs.js} +1 -1
  4. package/dist/client/assets/{ArrowUpRight-CQVsRNYA.js → ArrowUpRight-DCcGUPRq.js} +1 -1
  5. package/dist/client/assets/{Check-Dw0yb53j.js → Check-BanZqVS6.js} +1 -1
  6. package/dist/client/assets/{CheckCircle-Dud6wUS9.js → CheckCircle-CiwBnetw.js} +1 -1
  7. package/dist/client/assets/{ChevronDown-DvIRW9jR.js → ChevronDown-CUX5BVRH.js} +1 -1
  8. package/dist/client/assets/{ChevronRight-C9FO0Ghk.js → ChevronRight-D7bdokHb.js} +1 -1
  9. package/dist/client/assets/{ChevronUp-C8zQGFtm.js → ChevronUp-BvwOltu0.js} +1 -1
  10. package/dist/client/assets/{Copy01-DBF2xtLX.js → Copy01-D8PXcQlN.js} +1 -1
  11. package/dist/client/assets/{CpuChip01-Bm59eh5F.js → CpuChip01-Sn9YZC9Z.js} +1 -1
  12. package/dist/client/assets/{DotsVertical-A7mKqECE.js → DotsVertical-Dh5AhfNj.js} +1 -1
  13. package/dist/client/assets/{Eye-BQPVNie2.js → Eye-BjzBo9pu.js} +1 -1
  14. package/dist/client/assets/{FilterLines-CLE41-vv.js → FilterLines-EqTRXCN6.js} +1 -1
  15. package/dist/client/assets/{HardDrive-Iz7lTyC4.js → HardDrive-CXeNKlS_.js} +1 -1
  16. package/dist/client/assets/{Key01-Dj3z1dEv.js → Key01-B_NmjlUq.js} +1 -1
  17. package/dist/client/assets/{LayoutLeft-DMB2s9jy.js → LayoutLeft-BJ-rrVM8.js} +1 -1
  18. package/dist/client/assets/{LinkExternal01-BiWFfTiD.js → LinkExternal01-B6_9NVrP.js} +1 -1
  19. package/dist/client/assets/{LogOut01-CmE_ZaFu.js → LogOut01-CPJ6BI1C.js} +1 -1
  20. package/dist/client/assets/{Monitor01-DpjnSDYR.js → Monitor01-BW-aur37.js} +1 -1
  21. package/dist/client/assets/{Palette-Cl97ZzbL.js → Palette-SJkRJpeD.js} +1 -1
  22. package/dist/client/assets/{Play-BpgcQFKU.js → Play-CdlOcV-y.js} +1 -1
  23. package/dist/client/assets/{Plus-sJs2USHB.js → Plus-CCR2dl91.js} +1 -1
  24. package/dist/client/assets/{SearchLg-DEgv-uG-.js → SearchLg-BROgsk9l.js} +1 -1
  25. package/dist/client/assets/{SearchMd-D9FDebLE.js → SearchMd-BBtCjgk8.js} +1 -1
  26. package/dist/client/assets/{Settings02-Bl_0yVE7.js → Settings02--NDw0tr0.js} +1 -1
  27. package/dist/client/assets/{Shield01-BO8-H5xY.js → Shield01-Ss0yQTUj.js} +1 -1
  28. package/dist/client/assets/{Star01-o2L6nHqw.js → Star01-CntjezXG.js} +1 -1
  29. package/dist/client/assets/{Stars01-CuVmQ4th.js → Stars01-lkb5ewEZ.js} +1 -1
  30. package/dist/client/assets/{Stars02-DgSFkiw6.js → Stars02-C2Cbwy_X.js} +1 -1
  31. package/dist/client/assets/{Sun-DL-zXPtw.js → Sun-MMOSzKiH.js} +1 -1
  32. package/dist/client/assets/{SwitchHorizontal01-DC3YBwC_.js → SwitchHorizontal01-3z68UsWg.js} +1 -1
  33. package/dist/client/assets/{Tool01-DVkbgDKg.js → Tool01-B1U6TeQ7.js} +1 -1
  34. package/dist/client/assets/{Tool02-GyxJVdhs.js → Tool02-FCeFZNlp.js} +1 -1
  35. package/dist/client/assets/{Trash01-IiY64zb7.js → Trash01-CUyl1xYR.js} +1 -1
  36. package/dist/client/assets/{TrendUp01-BnywZeMt.js → TrendUp01-CHXXVD4m.js} +1 -1
  37. package/dist/client/assets/{Upload01-CHdkzkYk.js → Upload01-ZeBMj0BP.js} +1 -1
  38. package/dist/client/assets/{User01-Dic8NL9t.js → User01-PMJPa_tN.js} +1 -1
  39. package/dist/client/assets/{Users01-CxHLm5J9.js → Users01-CqQx5tIk.js} +1 -1
  40. package/dist/client/assets/{Users03-C-Rx_Rc3.js → Users03-BxaRzrtC.js} +1 -1
  41. package/dist/client/assets/{X-DTAX3OCa.js → X-Fy7AbE7F.js} +1 -1
  42. package/dist/client/assets/{XCircle-u8Vikw7a.js → XCircle-CWLIEPUH.js} +1 -1
  43. package/dist/client/assets/{XClose-DV1DPWGC.js → XClose-Bp_RaZDo.js} +1 -1
  44. package/dist/client/assets/{Zap-C9po9Mov.js → Zap-CXlonpRe.js} +1 -1
  45. package/dist/client/assets/{ZapSquare-yY2i-ZE0.js → ZapSquare-BmTk-klu.js} +1 -1
  46. package/dist/client/assets/{access-gate-DKcnqzVk.js → access-gate-CiM6cp0o.js} +1 -1
  47. package/dist/client/assets/{add-section-modal-BuZ_NECI.js → add-section-modal-BCa7yMsN.js} +1 -1
  48. package/dist/client/assets/{agent-icon-DwBPTcr7.js → agent-icon-DAE-QVSX.js} +1 -1
  49. package/dist/client/assets/{agents-list-CNvUWwLk.js → agents-list-BF4lfGs_.js} +1 -1
  50. package/dist/client/assets/{ai-providers-BjmN_iJH.js → ai-providers-BzSQnJv2.js} +1 -1
  51. package/dist/client/assets/{alert-CiHMyreR.js → alert-BwjwMJ_u.js} +1 -1
  52. package/dist/client/assets/{alert-dialog-Ds78S35S.js → alert-dialog-Bejl4UZW.js} +1 -1
  53. package/dist/client/assets/{app-editor-CJiIIYx0.js → app-editor-Dp-AZe52.js} +1 -1
  54. package/dist/client/assets/{auth-B-WF-Fyk.js → auth-CSGt0fLM.js} +1 -1
  55. package/dist/client/assets/{auth-catchall-dNvPV8tq.js → auth-catchall-C6mjSaOw.js} +1 -1
  56. package/dist/client/assets/{auth-entry-Dl0epUp1.js → auth-entry-B8bklg_Y.js} +1 -1
  57. package/dist/client/assets/{auth-split-layout-9KD_aCez.js → auth-split-layout-KfT9Fgv_.js} +1 -1
  58. package/dist/client/assets/{authenticate-and-persist-oauth-BSdP7jbF.js → authenticate-and-persist-oauth-DTurxjpA.js} +1 -1
  59. package/dist/client/assets/{automation-list-row-Dwbyv5TT.js → automation-list-row-als2Xpcd.js} +1 -1
  60. package/dist/client/assets/{automation-runs-DRI95Blq.js → automation-runs-dOAA8A_J.js} +1 -1
  61. package/dist/client/assets/{automations-CiegP5qa.js → automations-VwnKPcQS.js} +1 -1
  62. package/dist/client/assets/{avatar-CksInPMf.js → avatar-B4ZEWEhO.js} +1 -1
  63. package/dist/client/assets/{badge-BQ6hSN97.js → badge-DoTrxPvS.js} +1 -1
  64. package/dist/client/assets/{block-document-DtApBc50.js → block-document-CdPdyXou.js} +1 -1
  65. package/dist/client/assets/{brand-context-hq-Z_9qV.js → brand-context-Cb1cYLDv.js} +1 -1
  66. package/dist/client/assets/{buckets-DZEZvm_j.js → buckets-BOqpTdJo.js} +1 -1
  67. package/dist/client/assets/{bulk-category-panel-_IbwEONi.js → bulk-category-panel-CZZu1CRx.js} +1 -1
  68. package/dist/client/assets/{calendar-Dh6Ay4oq.js → calendar-1BAMPIfo.js} +1 -1
  69. package/dist/client/assets/{capability-load-error-DmwIYHnQ.js → capability-load-error-CCEEpuHJ.js} +1 -1
  70. package/dist/client/assets/{card-CSjRjipe.js → card-CISWuoNN.js} +1 -1
  71. package/dist/client/assets/{category-editor-BIqEh4Eq.js → category-editor-DGLGlS3L.js} +1 -1
  72. package/dist/client/assets/{chat-context-D64R7wZr.js → chat-context-CoSeVfqX.js} +1 -1
  73. package/dist/client/assets/{checkbox-CPbhbD1e.js → checkbox-hIdnOQby.js} +1 -1
  74. package/dist/client/assets/{cli-auth-success-CIKWin3h.js → cli-auth-success-BqjCvyB5.js} +1 -1
  75. package/dist/client/assets/{collection-detail-Cso7X5xa.js → collection-detail-053oVNcD.js} +1 -1
  76. package/dist/client/assets/{collection-display-button-0fTpEpjG.js → collection-display-button-BEHwBZFo.js} +1 -1
  77. package/dist/client/assets/{collection-search-BwFX8J9H.js → collection-search-Dza0Wnqg.js} +1 -1
  78. package/dist/client/assets/{collection-table-wrapper-zuHVMAKO.js → collection-table-wrapper-BJ75h_ci.js} +1 -1
  79. package/dist/client/assets/{collection-tabs-CvyLDMWR.js → collection-tabs-BQWDYbtI.js} +1 -1
  80. package/dist/client/assets/{command-57yejGBk.js → command-EKXrfvyu.js} +1 -1
  81. package/dist/client/assets/{commerce-onboarding-CfO1R-2I.js → commerce-onboarding-DlJYxHQw.js} +1 -1
  82. package/dist/client/assets/{companions-core-DFao4P_s.js → companions-core-CvQj41-P.js} +1 -1
  83. package/dist/client/assets/{connect-CNm71Hjc.js → connect-Dis7hEDy.js} +1 -1
  84. package/dist/client/assets/{connection-QATUkG05.js → connection-BZEuAZZC.js} +1 -1
  85. package/dist/client/assets/{connection-card-DrJZGb5B.js → connection-card-D9VnLzY1.js} +1 -1
  86. package/dist/client/assets/{connection-detail-C5oyVr86.js → connection-detail-DkCZJSCg.js} +1 -1
  87. package/dist/client/assets/{connection-form-helpers-DrZpyl95.js → connection-form-helpers-CwB0lnHg.js} +1 -1
  88. package/dist/client/assets/{connections-D3o8P-Wb.js → connections-DFaFU1nP.js} +1 -1
  89. package/dist/client/assets/{decopilot-sse-pool-s13SK9y4.js → decopilot-sse-pool-ddxDh-T3.js} +1 -1
  90. package/dist/client/assets/{dialog-C7c6o6FP.js → dialog-BAhwXLtu.js} +1 -1
  91. package/dist/client/assets/{domain-settings-Mv5ZBGq6.js → domain-settings-3XVvFKO7.js} +1 -1
  92. package/dist/client/assets/{drawer-BKO67Xux.js → drawer-BQd2nFSf.js} +1 -1
  93. package/dist/client/assets/{dropdown-menu-CbU2D-c0.js → dropdown-menu-8-9RMyUq.js} +1 -1
  94. package/dist/client/assets/{empty-state-c2j5Ds6E.js → empty-state-C-PMtz9f.js} +1 -1
  95. package/dist/client/assets/{extract-connection-data-CHzJzImj.js → extract-connection-data-BZa8p_H-.js} +1 -1
  96. package/dist/client/assets/{file-explorer-DjGGJJmb.js → file-explorer-DXY03oX6.js} +1 -1
  97. package/dist/client/assets/{form-4dv9_c-3.js → form-BvU3JKee.js} +1 -1
  98. package/dist/client/assets/{general-DmeeYFiw.js → general-CP6LTcbJ.js} +1 -1
  99. package/dist/client/assets/{github-repo-picker-BDJbJq_X.js → github-repo-picker-Df-OSUFw.js} +1 -1
  100. package/dist/client/assets/{hooks-CQZEoVeJ.js → hooks-8r52ZzPh.js} +1 -1
  101. package/dist/client/assets/{index-C_siJ8jb.js → index-B6Z7PR0c.js} +3 -3
  102. package/dist/client/assets/{index-DoiyHa2I.js → index-BoLS04lq.js} +1 -1
  103. package/dist/client/assets/{index-DK327Z1m.js → index-Bvfh6gNn.js} +1 -1
  104. package/dist/client/assets/{index-C02mImEU.js → index-C4i4dW_0.js} +1 -1
  105. package/dist/client/assets/{index-BHj_z9is.js → index-CHYDq1Mt.js} +1 -1
  106. package/dist/client/assets/{index-BUR03TdS.js → index-CfOvqDrF.js} +5 -5
  107. package/dist/client/assets/{index-Bd5TxvXq.js → index-CqSKWTR6.js} +1 -1
  108. package/dist/client/assets/{index-ObaO_KTB.js → index-CxoHON83.js} +1 -1
  109. package/dist/client/assets/{index-DhhX5FGH.js → index-DWIeHGtm.js} +1 -1
  110. package/dist/client/assets/{index-kTQ08f_V.js → index-DxOAuh92.js} +1 -1
  111. package/dist/client/assets/{index-redirect-BM56RLHI.js → index-redirect-DzgwSAE0.js} +1 -1
  112. package/dist/client/assets/{index-CCKcgzR3.js → index-xLZV-a-I.js} +3 -3
  113. package/dist/client/assets/{input-C0DYQwT4.js → input-BojcyffB.js} +1 -1
  114. package/dist/client/assets/{integration-icon-qI9RoW2h.js → integration-icon-CArxB5uE.js} +1 -1
  115. package/dist/client/assets/{invite-member-dialog-BuemHTqS.js → invite-member-dialog-B8ckXtQt.js} +1 -1
  116. package/dist/client/assets/{label-DwTm1B-u.js → label-CkgoFapr.js} +1 -1
  117. package/dist/client/assets/{layout-BdY4uzlC.js → layout-C-sM6rKc.js} +1 -1
  118. package/dist/client/assets/{login-BdD1Za0l.js → login-B4ADCVAk.js} +1 -1
  119. package/dist/client/assets/{mcp-oauth-Che7vtan.js → mcp-oauth-CHnOKcYw.js} +1 -1
  120. package/dist/client/assets/{members-CymT0WFw.js → members-faZAtqbf.js} +1 -1
  121. package/dist/client/assets/{monaco-editor-Cyh8g4ki.js → monaco-editor-CcMhH2ul.js} +1 -1
  122. package/dist/client/assets/{monitoring-stats-row-ym6EVlnJ.js → monitoring-stats-row-BmU63u-K.js} +1 -1
  123. package/dist/client/assets/{multi-select-D7N-MiN0.js → multi-select-D9AH5ZXR.js} +1 -1
  124. package/dist/client/assets/{oauth-callback-BUEw7QDH.js → oauth-callback-B8FYxv5p.js} +1 -1
  125. package/dist/client/assets/{oauth-callback-ai-provider-DRD_6RrT.js → oauth-callback-ai-provider-D_wc92xB.js} +1 -1
  126. package/dist/client/assets/{onboarding-r5XtoSLm.js → onboarding-DPHO6jJq.js} +1 -1
  127. package/dist/client/assets/{org-layout-DC_k-BB6.js → org-layout-DnsmheU0.js} +1 -1
  128. package/dist/client/assets/{organization-choice-D7ScNtlb.js → organization-choice-C8DRHLSZ.js} +1 -1
  129. package/dist/client/assets/{orgs-CFErd6sg.js → orgs-DGcaLxGF.js} +1 -1
  130. package/dist/client/assets/{page-seo-form-hYazo0Jj.js → page-seo-form-DtArubh-.js} +1 -1
  131. package/dist/client/assets/{popover-Gmg5lY4q.js → popover-DVFAT0c-.js} +1 -1
  132. package/dist/client/assets/{post-editor-COrFDOZo.js → post-editor-CIF81oIw.js} +1 -1
  133. package/dist/client/assets/{primitives-CE6etn75.js → primitives-w9Lg9eWu.js} +1 -1
  134. package/dist/client/assets/{profile-C7W3wF9h.js → profile-cEVpZAUx.js} +1 -1
  135. package/dist/client/assets/project-app-view-CatDRucp.js +1 -0
  136. package/dist/client/assets/record-editor-CnhwCwUv.js +1 -0
  137. package/dist/client/assets/{redirect-editor-5lNy5HsW.js → redirect-editor-CprSKjFX.js} +1 -1
  138. package/dist/client/assets/registry-jo0U30T7.js +2 -0
  139. package/dist/client/assets/{registry-layout-CC2oyVmB.js → registry-layout-CjC8MD0g.js} +1 -1
  140. package/dist/client/assets/{reports-DTetgeJj.js → reports-Bmfny53H.js} +1 -1
  141. package/dist/client/assets/{require-capability-DMai0dE_.js → require-capability-KV0-YKXW.js} +1 -1
  142. package/dist/client/assets/{required-auth-layout-BNLV3Z9n.js → required-auth-layout-B8V_mVLF.js} +1 -1
  143. package/dist/client/assets/{reset-password-BC57Hkeq.js → reset-password-BSgfWKYU.js} +1 -1
  144. package/dist/client/assets/{roles-las8u9fW.js → roles-BKKRsW49.js} +1 -1
  145. package/dist/client/assets/{search-input-C83eu_0r.js → search-input-zOnTA2ZC.js} +1 -1
  146. package/dist/client/assets/{secrets-TEsTjL46.js → secrets-BO1pYpF8.js} +1 -1
  147. package/dist/client/assets/{sections-editor-C2Om6EFx.js → sections-editor-DIrENEAq.js} +1 -1
  148. package/dist/client/assets/{select-model-urZAnlWP.js → select-model-irlX9OHt.js} +1 -1
  149. package/dist/client/assets/{select-CBqI6EKt.js → select-vILxxytl.js} +1 -1
  150. package/dist/client/assets/{self-tool-result-BU8ra_BU.js → self-tool-result-CLRYKd2s.js} +1 -1
  151. package/dist/client/assets/{seo-editor-CGrEOztm.js → seo-editor-RmjyGTpd.js} +1 -1
  152. package/dist/client/assets/{settings-layout-B6UunhIC.js → settings-layout-jRIjhxbU.js} +1 -1
  153. package/dist/client/assets/{settings-section-BkCa2hSF.js → settings-section-DN6dwCrb.js} +1 -1
  154. package/dist/client/assets/{shell-controls-DvqqvSsN.js → shell-controls-BMNXpy_H.js} +1 -1
  155. package/dist/client/assets/{shell-layout-DK_eY-ht.js → shell-layout-DPwXTcE5.js} +1 -1
  156. package/dist/client/assets/{sidebar-DY8K_17u.js → sidebar-BNYlE7AV.js} +1 -1
  157. package/dist/client/assets/{skeleton-DNroJ5d2.js → skeleton-6qQI888K.js} +1 -1
  158. package/dist/client/assets/{spinner-CNTd4wtK.js → spinner-o1rRSgzv.js} +1 -1
  159. package/dist/client/assets/{sso-DbH0TO7h.js → sso-CYHJYar5.js} +1 -1
  160. package/dist/client/assets/{store-DzjFcyTL.js → store-WWl5qYba.js} +1 -1
  161. package/dist/client/assets/store-registry-CJKalEyT.js +2 -0
  162. package/dist/client/assets/{studio-tools-Dnhpj5qh.js → studio-tools-BtWoNkcq.js} +1 -1
  163. package/dist/client/assets/{switch-D7HAjvDx.js → switch-D3xI7duw.js} +1 -1
  164. package/dist/client/assets/{tab-id-DxO0cBtb.js → tab-id-DiqmaBy2.js} +1 -1
  165. package/dist/client/assets/{table-BE4QKzOE.js → table-rGuxqPwr.js} +1 -1
  166. package/dist/client/assets/{tabs-O9QjcYrv.js → tabs-BmMYATnP.js} +1 -1
  167. package/dist/client/assets/{textarea-DFBGfRuK.js → textarea-BJt8cC6S.js} +1 -1
  168. package/dist/client/assets/{toggle-group-BtPvM55s.js → toggle-group-B6JAyI2q.js} +1 -1
  169. package/dist/client/assets/{toolbar-Cpvuujer.js → toolbar-CkCyMacW.js} +1 -1
  170. package/dist/client/assets/{tooltip-D9s1yr4p.js → tooltip-BkG8gKDz.js} +1 -1
  171. package/dist/client/assets/{use-ai-providers-CQPjpXWl.js → use-ai-providers-DsZYnQg7.js} +1 -1
  172. package/dist/client/assets/{use-automations-CKUnBMBC.js → use-automations-DE2_NNy6.js} +1 -1
  173. package/dist/client/assets/{use-autosave-Dg87V8v1.js → use-autosave-8Cxke91M.js} +1 -1
  174. package/dist/client/assets/{use-capability-BHSV9gBd.js → use-capability-D0DkHssD.js} +1 -1
  175. package/dist/client/assets/{use-clock-tick-cqkvm-Ef.js → use-clock-tick-CXln3MAa.js} +1 -1
  176. package/dist/client/assets/{use-connection-Cy658_xM.js → use-connection-CwxutjPh.js} +1 -1
  177. package/dist/client/assets/{use-copy-CVhZVr-U.js → use-copy-C3D96rny.js} +1 -1
  178. package/dist/client/assets/{use-create-virtual-mcp-Bi8HgMn7.js → use-create-virtual-mcp-6r2-LHL3.js} +1 -1
  179. package/dist/client/assets/{use-debounced-autosave-Ch2W7ZiY.js → use-debounced-autosave-CU83xIiP.js} +1 -1
  180. package/dist/client/assets/{use-debounced-value-DOn4Suao.js → use-debounced-value-DcuInD5Y.js} +1 -1
  181. package/dist/client/assets/{use-deco-credits-C98B9sz1.js → use-deco-credits-Ch8Vm2Gh.js} +1 -1
  182. package/dist/client/assets/{use-decopilot-events-DHxI6exQ.js → use-decopilot-events-CzpHE_oH.js} +1 -1
  183. package/dist/client/assets/{use-delete-connection-DJ9n74qf.js → use-delete-connection-BBWErgtv.js} +1 -1
  184. package/dist/client/assets/{use-deployment-admin-BqcUjJTV.js → use-deployment-admin-Bu5Ua4e6.js} +1 -1
  185. package/dist/client/assets/{use-file-configs-D9dmpUrg.js → use-file-configs-DhMqka3s.js} +1 -1
  186. package/dist/client/assets/{use-infinite-scroll-Hu8-0kRx.js → use-infinite-scroll-CqngkeUq.js} +1 -1
  187. package/dist/client/assets/{use-join-requests-DcUe6bm_.js → use-join-requests-C8pWePHr.js} +1 -1
  188. package/dist/client/assets/{use-mcp-auth-status-CkEtujGJ.js → use-mcp-auth-status-Do6e__rE.js} +1 -1
  189. package/dist/client/assets/{use-mcp-client-D51gNtSm.js → use-mcp-client-CpQD6Mz_.js} +1 -1
  190. package/dist/client/assets/{use-mcp-tools-B1FxPgHp.js → use-mcp-tools-B9hG9X55.js} +1 -1
  191. package/dist/client/assets/{use-members-0ZMl36LX.js → use-members-DWfet2FQ.js} +1 -1
  192. package/dist/client/assets/{use-mobile-Be620oYx.js → use-mobile-4pnpeHV9.js} +1 -1
  193. package/dist/client/assets/{use-navigate-to-agent-Czj1eRPz.js → use-navigate-to-agent-RjkB7mVO.js} +1 -1
  194. package/dist/client/assets/{use-org-auth-client-J_HWXHei.js → use-org-auth-client-BppvrEHw.js} +1 -1
  195. package/dist/client/assets/{use-org-sso-0BdA3rsr.js → use-org-sso-C6r7r7Z-.js} +1 -1
  196. package/dist/client/assets/{use-organization-roles-CYDjrcGS.js → use-organization-roles-CFZWX9hz.js} +1 -1
  197. package/dist/client/assets/{use-organization-settings-Dx8YLTtr.js → use-organization-settings-M5Zt0kWH.js} +1 -1
  198. package/dist/client/assets/{use-registry-connections-CZVi37FP.js → use-registry-connections-C7i_uv3Z.js} +1 -1
  199. package/dist/client/assets/{use-secrets-C2jMKR1n.js → use-secrets-BgeMMiZf.js} +1 -1
  200. package/dist/client/assets/{use-status-sounds-3jCuX-9T.js → use-status-sounds-BZR8_RrZ.js} +1 -1
  201. package/dist/client/assets/{use-tags-D6OOOtp7.js → use-tags-BHi49oJt.js} +1 -1
  202. package/dist/client/assets/{use-view-mode-CfanfKcA.js → use-view-mode-DmoOwGW1.js} +1 -1
  203. package/dist/client/assets/{use-virtual-mcp-DQmehG0S.js → use-virtual-mcp-CaUP1Uqm.js} +1 -1
  204. package/dist/client/assets/useInfiniteQuery-Dekopob7.js +1 -0
  205. package/dist/client/assets/{useQueries-BRhSLBW5.js → useQueries-DcjddpQA.js} +1 -1
  206. package/dist/client/assets/{useRouterState-BTPqZkPv.js → useRouterState-Bo_NQVoe.js} +1 -1
  207. package/dist/client/assets/useSuspenseInfiniteQuery-DqjaZzvF.js +1 -0
  208. package/dist/client/assets/{users-DetSWk8v.js → users-CvweS0eq.js} +1 -1
  209. package/dist/client/assets/{variant-calendar-B7KPrNWl.js → variant-calendar-CvrAdj38.js} +1 -1
  210. package/dist/client/assets/{view-mode-toggle-BmJXsKF6.js → view-mode-toggle-8krhraza.js} +1 -1
  211. package/dist/client/index.html +1 -1
  212. package/dist/server/cli.js +2 -2
  213. package/dist/server/server.js +2 -2
  214. package/package.json +1 -1
  215. package/dist/client/assets/project-app-view-Drm83BNO.js +0 -1
  216. package/dist/client/assets/record-editor-Cd1O7CW0.js +0 -1
  217. package/dist/client/assets/registry-CA8KXJkV.js +0 -2
  218. package/dist/client/assets/store-registry-Bcjy_qj0.js +0 -2
  219. package/dist/client/assets/useInfiniteQuery-CazF2pt1.js +0 -1
  220. package/dist/client/assets/useSuspenseInfiniteQuery-BKzWCoNd.js +0 -1
@@ -83546,7 +83546,7 @@ ${w}`;v(B);return}if(c(null,F),t.strategy==="count"){if($--,$===0)v()}if(t.strat
83546
83546
  `);function v(d){if(t===void 0)return!0;let D=Jq(d),_=D&&Jq(t)?Uou(t):t,N=D?Uou(d):Tou(d),Z=srt(_,N);return Z===""||!Z.startsWith("..")&&!art(Z)}return{upsert(d){f.run({$handle:d.handle,$status:d.status,$sandboxPath:d.sandboxPath,$port:d.port??null,$previewUrl:d.previewUrl??null,$repoCloneUrl:d.repoCloneUrl??null,$branch:d.branch??null,$projectName:d.projectName??null,$error:d.error??null,$now:Date.now()})},list(){return l.all().map(_6i)},reconcile(){let d=Date.now();for(let D of l.all().map(_6i)){if(!v(D.sandboxPath)){E.run({$handle:D.handle,$now:d});continue}if(!Jq(D.sandboxPath)){c.run({$handle:D.handle,$now:d});continue}if(D.status==="spawning"||D.status==="ready"||D.status==="failed"||D.status==="missing")w.run({$handle:D.handle,$now:d})}return l.all().map(_6i)},prune(d){let D=[],_=[],N=this.reconcile();for(let Z of N){if(!v(Z.sandboxPath)){_.push({handle:Z.handle,sandboxPath:Z.sandboxPath,reason:"outside_root",deletedFiles:!1});continue}if(d.missing&&Z.status==="missing"){$.run({$handle:Z.handle}),D.push({handle:Z.handle,sandboxPath:Z.sandboxPath,reason:"missing",deletedFiles:!1});continue}if(!d.merged||!Jq(Z.sandboxPath))continue;if(Z.branch===null||Z.branch.trim()===""){_.push({handle:Z.handle,sandboxPath:Z.sandboxPath,reason:"no_branch",deletedFiles:!1});continue}if(!R_(Z.sandboxPath,["rev-parse","--is-inside-work-tree"]).ok){_.push({handle:Z.handle,sandboxPath:Z.sandboxPath,reason:"git_unavailable",deletedFiles:!1});continue}let B=R_(Z.sandboxPath,["status","--porcelain"]);if(!B.ok){_.push({handle:Z.handle,sandboxPath:Z.sandboxPath,reason:"git_unavailable",deletedFiles:!1});continue}if(B.stdout.trim()!==""){_.push({handle:Z.handle,sandboxPath:Z.sandboxPath,reason:"dirty_worktree",deletedFiles:!1});continue}let F=Pou(Z.sandboxPath,Z.branch);if(F===null){_.push({handle:Z.handle,sandboxPath:Z.sandboxPath,reason:"git_unavailable",deletedFiles:!1});continue}if(!F){_.push({handle:Z.handle,sandboxPath:Z.sandboxPath,reason:"branch_not_merged",deletedFiles:!1});continue}mrt(Z.sandboxPath,{recursive:!0,force:!0}),$.run({$handle:Z.handle}),D.push({handle:Z.handle,sandboxPath:Z.sandboxPath,reason:"merged",deletedFiles:!0})}return{removed:D,skipped:_}},delete(d){$.run({$handle:d})},inspect(d){let D=h.get({$handle:d});if(D===null)return null;let _=_6i(D),N=0,Z=null;if(Jq(_.sandboxPath)&&R_(_.sandboxPath,["rev-parse","--is-inside-work-tree"]).ok){let B=R_(_.sandboxPath,["status","--porcelain"]);if(B.ok){let F=B.stdout.trim();N=F===""?0:F.split(`
83547
83547
  `).length}if(_.branch!==null&&_.branch.trim()!=="")Z=Pou(_.sandboxPath,_.branch)}return{handle:_.handle,branch:_.branch,sandboxPath:_.sandboxPath,dirtyCount:N,merged:Z}},close(){u.close()}}}var iCi=()=>{};function tmt(i,u){return u?[["umount","-f",i]]:[["fusermount","-uz",i],["umount","-l",i]]}function Gou(i,u){if(process.platform==="win32")return;for(let t of tmt(i,u))if(Bun.spawnSync(t,{stdout:"ignore",stderr:"ignore",timeout:5000}).exitCode===0)break}var Iou=()=>{};import{existsSync as fmt,readdirSync as lmt}from"fs";import{rm as Emt}from"fs/promises";import{join as xou}from"path";async function kou(i,u={}){let t=u.detach??cmt,f=u.exists??fmt,l=u.readdir??((w)=>lmt(w)),E=u.rm??((w)=>Emt(w,{recursive:!0,force:!0})),c=xou(i,"org");if(f(c))for(let w of l(c))t(xou(c,w));await E(i)}var cmt=(i)=>Gou(i,process.platform==="darwin");var jou=O(()=>{Iou()});import{join as wmt}from"path";function Xou(i){let u=i.purge??kou;return{stopSandbox(t){return i.provider.deleteSandbox(t)},inspectSandbox(t){return i.registry.inspect(t)},async removeSandbox(t){try{return await F1(async()=>{if(await i.provider.deleteSandbox(t),i.provider.hasHandle(t))throw Error("Can't delete \u2014 run in progress");let l=i.registry.inspect(t)?.sandboxPath??wmt(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 z6?f.cause:f;return{ok:!1,error:l instanceof Error?l.message:String(l)}}}}}var Jou=O(()=>{Z4();jou()});import{randomBytes as $mt}from"crypto";import{mkdir as hmt}from"fs/promises";import{createServer as vmt}from"net";import{join as dmt}from"path";function Kou(i,u){return Error(`sandbox failed to start: ${i}`,{cause:u})}function You(i){if(!(i instanceof Error))return!1;return i.name==="TimeoutError"||/timed out|timeout|operation was aborted|aborted/i.test(i.message)}function Wou(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 Dmt(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 _mt(i){return{repoCloneUrl:i.repo?.cloneUrl??null,branch:i.repo?.branch??null,projectName:Dmt(i.repo?.cloneUrl)}}function Lou(i){let u=i.maxSandboxes??20,t=new Map,f=i.pickPort??Nmt,l=i.fetchImpl??fetch,E=i.resolvePreviewUrl??((N,Z)=>`http://127.0.0.1:${Z}`),c=(N)=>dmt(i.dataDir,"sandboxes",N),w=(N)=>{try{i.registry?.upsert(N)}catch(Z){console.warn(`[user-desktop] failed to persist sandbox lifecycle handle=${N.handle} status=${N.status}:`,Z)}},$=(N)=>{try{i.onEvent?.(N)}catch{}},h=async(N)=>{let Z=new AbortController,B=setTimeout(()=>Z.abort(),1500);try{let F=await l(`${N}/health`,{signal:Z.signal});if(!F.ok)console.warn(`[user-desktop] probe ${N}/health \u2192 ${F.status} (treating as dead)`);return F.ok}catch(F){return console.warn(`[user-desktop] probe ${N}/health failed: ${F instanceof Error?F.message:String(F)} (treating as dead)`),!1}finally{clearTimeout(B)}},v=(N)=>{console.warn(`[user-desktop] evicting dead daemon handle=${N.handle} port=${N.port}`);try{N.process.kill("SIGTERM")}catch{}if(t.get(N.handle)===N)t.delete(N.handle),w({handle:N.handle,status:"stopped",sandboxPath:c(N.handle),port:null,previewUrl:null,...N.registryMetadata,error:null}),$({handle:N.handle,phase:"evicted"})},d=new Map;function D(){if(t.size<u)return;let N=[...t.values()].filter((B)=>B.activeDispatchCount===0).sort((B,F)=>B.lastUsedAt-F.lastUsedAt);if(N.length===0){console.warn(`[user-desktop] at cap ${t.size}/${u} but every sandbox is pinned (active dispatch) \u2014 exceeding cap temporarily`);return}let Z=N[0];console.log(`[user-desktop] evicting LRU victim handle=${Z.handle} port=${Z.port} (cap ${u} reached, size=${t.size})`);try{Z.process.kill("SIGTERM")}catch{}t.delete(Z.handle),w({handle:Z.handle,status:"stopped",sandboxPath:c(Z.handle),port:null,previewUrl:null,...Z.registryMetadata,error:null}),$({handle:Z.handle,phase:"evicted"})}let _=async(N)=>{let Z=_mt(N),B=c(N.handle);w({handle:N.handle,status:"spawning",sandboxPath:B,port:null,previewUrl:null,...Z,error:null}),$({handle:N.handle,phase:"spawning",sandboxPath:B,projectName:Z.projectName,branch:Z.branch}),D();let F,g=null,U;try{await hmt(B,{recursive:!0}),console.log(`[user-desktop] ensure handle=${N.handle} repo=${N.repo?.cloneUrl??"(none)"} branch=${N.repo?.branch??"(none)"} runtime=${N.workload?.runtime??"(autodetect)"} pm=${N.workload?.packageManager??"(autodetect)"}`),U=$mt(24).toString("hex");let[k,I]=await Promise.all([f(),f()]);F=k,console.log(`[user-desktop] spawn handle=${N.handle} port=${F} devPort=${I} workdir=${B}`),g=await Promise.resolve(i.spawnDaemon({workdir:B,handle:N.handle,port:F,daemonToken:U,offloadAllowedHosts:N.offloadAllowedHosts??[],offloadAllowSameHostDev:N.offloadAllowSameHostDev??!1,orgFsConfigJson:N.orgFsConfigJson}));try{await i.waitForHealth(F)}catch(j){throw Kou("the sandbox didn't come online in time",j)}console.log(`[user-desktop] healthy handle=${N.handle} port=${F} \u2014 posting config`);try{await i.postConfig(F,I,{repo:N.repo,workload:N.workload,operator:N.operator},U)}catch(j){throw Kou(You(j)?"configuration timed out":"the sandbox rejected its configuration",j)}}catch(k){if((You(k)?console.warn:console.error)(`[user-desktop] sandbox bring-up failed handle=${N.handle} port=${F??"(none)"}${g?" (killing daemon)":""}:`,k),g)try{g.kill("SIGKILL")}catch{}throw $({handle:N.handle,phase:"failed",error:Wou(k),sandboxPath:B,projectName:Z.projectName,branch:Z.branch}),w({handle:N.handle,status:"failed",sandboxPath:B,port:null,previewUrl:null,...Z,error:Wou(k)}),k}if(!g||F===void 0)throw Error("sandbox bring-up invariant violated");let T=`http://127.0.0.1:${F}`,A=E(N.handle,F);console.log(`[user-desktop] ready handle=${N.handle} port=${F} sandboxApiUrl=${T} previewUrl=${A}`);let G={handle:N.handle,port:F,process:g,sandboxApiUrl:T,previewUrl:A,lastUsedAt:Date.now(),activeDispatchCount:0,daemonToken:U,registryMetadata:Z};if(t.set(N.handle,G),w({handle:N.handle,status:"ready",sandboxPath:B,port:F,previewUrl:A,...Z,error:null}),$({handle:N.handle,phase:"ready",port:F,previewUrl:A,sandboxPath:B,projectName:Z.projectName,branch:Z.branch}),g.exited)g.exited.then(()=>{if(t.get(N.handle)===G)console.warn(`[user-desktop] daemon process exited unexpectedly handle=${N.handle} port=${F} \u2014 removing from cache`),t.delete(N.handle),w({handle:N.handle,status:"stopped",sandboxPath:B,port:null,previewUrl:null,...Z,error:null}),$({handle:N.handle,phase:"evicted"});else console.log(`[user-desktop] daemon process exited handle=${N.handle} port=${F} (already replaced/removed)`)});return{sandboxApiUrl:T,previewUrl:A,port:F}};return{async ensureSandbox(N){let Z=t.get(N.handle);if(Z){if(await h(Z.sandboxApiUrl))return console.log(`[user-desktop] cache hit handle=${N.handle} port=${Z.port} (alive)`),Z.lastUsedAt=Date.now(),{sandboxApiUrl:Z.sandboxApiUrl,previewUrl:Z.previewUrl,port:Z.port};console.warn(`[user-desktop] cache stale handle=${N.handle} port=${Z.port} \u2014 respawning`),v(Z)}let B=d.get(N.handle);if(B)return console.log(`[user-desktop] joining in-flight ensure handle=${N.handle}`),B;let F=_(N).finally(()=>{d.delete(N.handle)});return d.set(N.handle,F),F},proxyPort(N){let Z=t.get(N);if(Z)Z.lastUsedAt=Date.now();return Z?.port??null},getDaemonToken(N){return t.get(N)?.daemonToken??null},hasHandle(N){return t.has(N)||d.has(N)},recordHit(N){let Z=t.get(N);if(Z)Z.lastUsedAt=Date.now()},acquireDispatch(N){let Z=t.get(N);if(!Z)return()=>{};Z.activeDispatchCount+=1;let B=!1;return()=>{if(B)return;B=!0;let F=t.get(N);if(F)F.activeDispatchCount=Math.max(0,F.activeDispatchCount-1)}},listSandboxes(){return[...t.values()]},async deleteSandbox(N){let Z=t.get(N);if(!Z){console.log(`[user-desktop] delete handle=${N} (not found, no-op)`);return}if(Z.activeDispatchCount>0){console.warn(`[user-desktop] delete handle=${N} port=${Z.port} REFUSED \u2014 ${Z.activeDispatchCount} active dispatch(es) in flight`);return}console.log(`[user-desktop] delete handle=${N} port=${Z.port}`);try{Z.process.kill("SIGTERM")}catch{}t.delete(N),w({handle:N,status:"stopped",sandboxPath:c(N),port:null,previewUrl:null,repoCloneUrl:null,branch:null,projectName:null,error:null}),$({handle:N,phase:"deleted"})},async shutdown(){console.log(`[user-desktop] shutdown \u2014 killing ${t.size} sandbox(es)`);for(let N of t.values())try{N.process.kill("SIGTERM")}catch{}t.clear()}}}function Nmt(){return new Promise((i,u)=>{let t=vmt();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 Sou=()=>{};import{randomUUID as Omt}from"crypto";import{hostname as Zmt}from"os";async function Qou(i){let u=Zmt()||void 0;i.monitor?.onMachine?.(u??"this machine");let t=Zqu(i.dataDir,{outFd:i.logFd,perSandboxLog:i.perSandboxLogs,hotReload:i.hotReload}),f=O6i({path:N6i(i.dataDir),managedSandboxRoot:`${i.dataDir}/sandboxes`}),l=!1,E=()=>{if(l)return;l=!0;try{f.close()}catch{}};try{let c=0,w=Lou({dataDir:i.dataDir,registry:f,resolvePreviewUrl:(j,C)=>c>0?`http://${j}.localhost:${c}`:`http://127.0.0.1:${C}`,spawnDaemon:async(j)=>{let C={DAEMON_BOOT_ID:Omt(),APP_ROOT:j.workdir,PROXY_PORT:String(j.port),DAEMON_TOKEN:j.daemonToken,OFFLOAD_ALLOWED_HOSTS:j.offloadAllowedHosts.join(","),...j.offloadAllowSameHostDev?{OFFLOAD_ALLOW_SAME_HOST_DEV:"1"}:{}};if(j.orgFsConfigJson){let S=await Uqu(i.dataDir);if(S)C.ORGFS_CONFIG=j.orgFsConfigJson,C.ORGFS_RCLONE_PATH=S}let K=await t({workdir:j.workdir,env:C,daemonPort:j.port});return{port:j.port,kill:(S)=>K.kill(S),exited:K.exited.then(()=>{return})}},postConfig:async(j,C,K,S)=>{let V={port:C};if(K.workload)V.runtime=K.workload.runtime,V.packageManager={name:K.workload.packageManager,...K.workload.packageManagerPath?{path:K.workload.packageManagerPath}:{}};let Q={application:V},fi=Uh(K.operator??null);if(fi)Q.operator=fi;if(K.repo)Q.git={repository:{cloneUrl:K.repo.cloneUrl,branch:K.repo.branch,...K.repo.submoduleCredentials&&K.repo.submoduleCredentials.length>0?{submoduleCredentials:K.repo.submoduleCredentials}:{}},...K.repo.userName&&K.repo.userEmail?{identity:{userName:K.repo.userName,userEmail:K.repo.userEmail}}:{}};await j_(`http://127.0.0.1:${j}`,S,Q)},waitForHealth:async(j)=>{await _li(`http://127.0.0.1:${j}`)},maxSandboxes:20,onEvent:i.monitor?.onEvent}),$=await $ou({port:i.port,lookupSandboxPort:(j)=>w.proxyPort(j)});c=$.port,console.log(`Local ingress listening on http://127.0.0.1:${$.port} (use http://<handle>.localhost:${$.port}/)`),i.monitor?.onIngress?.($.port);let h=Aqu({provider:w}),v=async()=>{let j=await k_({dataDir:i.dataDir,target:i.clusterBaseUrl});if(!j)throw Object.assign(Error(`Session for ${i.clusterBaseUrl} is no longer valid \u2014 run \`deco auth login --target ${i.clusterBaseUrl}\` and restart \`deco link\`.`),{fatal:!0});return j.accessToken},d=await Fou(i.dataDir),D=process.env.npm_package_version??"0.0.0",_=await pbi(),N=Zou(_,{onChange:(j)=>{console.log(`[link-daemon] capabilities detected: +${j.join(",")} (now: ${_.join(",")})`)}}),Z=bRi({path:`${i.dataDir}/link/outbox.sqlite`});Z.clear();let B=()=>{},F=new AbortController,g={clusterBaseUrl:i.clusterBaseUrl,getAccessToken:v,provider:w,outbox:Z,controlHandler:h,capabilities:_,machineId:d,cliVersion:D,previewPort:$.port,onConnected:()=>{i.monitor?.onCluster?.("linked"),console.log(`Linked to ${i.clusterBaseUrl}`)},onShutdown:()=>B(),runLifetimeSignal:F.signal};console.log(`[link-daemon] transport=tunnel cluster=${i.clusterBaseUrl}`);let U=await aau(g);console.log("[link-daemon] active transport=tunnel");let T,A=new Promise((j)=>{T=j}),G=!1,k=async()=>{if(G)return;G=!0,F.abort(),console.log(`
83548
83548
  Shutting down\u2026`),N();try{await U.close()}catch{}try{await $.stop()}catch{}try{await w.shutdown()}catch{}try{Z.close()}catch{}E(),T(0)};process.on("SIGINT",()=>void k()),process.on("SIGTERM",()=>void k()),B=()=>{console.log("Disconnect requested from the Studio web UI \u2014 shutting down. Run `bunx decocms@latest link` to reconnect."),k()},U.closed.then(()=>{if(i.monitor?.onCluster?.("closed"),!G)console.error("Cluster connection closed permanently; exiting."),k()});let I=Xou({provider:w,registry:f,dataDir:i.dataDir});return{stopped:A,stop:k,stopSandbox:I.stopSandbox,removeSandbox:I.removeSandbox,inspectSandbox:I.inspectSandbox}}catch(c){throw E(),c}}var Hou=O(()=>{LRi();uq();Bqu();Tqu();Pqu();CRi();oau();hou();Bou();gou();iq();iCi();Jou();Sou()});function uCi(i){return i.map((u)=>typeof u==="string"?u:String(u)).join(" ")}import{createServer as Bmt}from"net";async function gmt(i){for(let u of Fmt)if(await tCi(i,u))return u;return null}async function zou(i,{intervalMs:u=1000,sleepFn:t=I0}={}){for(;;){let f=await gmt(i);if(f)return f;await t(u)}}function tCi(i,u){return new Promise((t)=>{let f=Bmt();f.once("error",(l)=>{t(l.code==="EADDRINUSE")}),f.listen(i,u,()=>{f.close(()=>t(!1))})})}var Fmt;var fCi=O(()=>{Z4();Fmt=["localhost","127.0.0.1","0.0.0.0"]});function Rou(i){return typeof i==="object"&&i!==null&&"code"in i&&i.code==="EADDRINUSE"}function Umt(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 nou(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`:","",` ${Umt(i,u)}`].join(`
83549
- `)}var lCi;var bou=O(()=>{lCi=class lCi extends Error{port;code="EADDRINUSE";constructor(i){super(`Port ${i} is already in use.`);this.port=i;this.name="PortInUseError"}}});var JS;var Z6i=O(()=>{JS={name:"decocms",version:"4.158.2",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts","smoke:link":"bun run scripts/smoke-link.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@anthropic-ai/claude-agent-sdk":"^0.3.181","@duckdb/node-api":"^1.5.0-r.1","@openai/codex":"0.144.3","@openai/codex-darwin-arm64":"npm:@openai/codex@0.144.3-darwin-arm64","@openai/codex-darwin-x64":"npm:@openai/codex@0.144.3-darwin-x64","@openai/codex-linux-arm64":"npm:@openai/codex@0.144.3-linux-arm64","@openai/codex-linux-x64":"npm:@openai/codex@0.144.3-linux-x64","@openai/codex-win32-arm64":"npm:@openai/codex@0.144.3-win32-arm64","@openai/codex-win32-x64":"npm:@openai/codex@0.144.3-win32-x64"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","@resvg/resvg-js":"^2.6.2","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","node-pty":"^1.0.0","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6",satori:"^0.28.2"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/harness":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@decocms/tunnel":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",vite:"^7.2.1",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});var Kq={};Ti(Kq,{printBanner:()=>Pmt,bannerLines:()=>Cou,BANNER_LINES:()=>B6i,BANNER_GRADIENT:()=>F6i});function Amt(i){let u=Number.parseInt(i.slice(1),16);return[u>>16&255,u>>8&255,u&255]}function Cou(i){let u=B6i.map((t,f)=>{let[l,E,c]=Amt(F6i[f]);return`\x1B[38;2;${l};${E};${c}m${t}\x1B[39m`});if(i!==void 0)u.push(`\x1B[2m v${i}\x1B[22m`);return u}function Pmt(i){console.log("");for(let u of Cou(i))console.log(u);console.log("")}var B6i,F6i;var KS=O(()=>{B6i=[" \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 "],F6i=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"]});import{Box as ymt,Text as Mou}from"ink";import{jsx as Gmt,jsxs as qou}from"react/jsx-runtime";function g6i({version:i}){return qou(ymt,{flexDirection:"column",marginTop:1,children:[B6i.map((u,t)=>Gmt(Mou,{color:F6i[t],children:u},t)),qou(Mou,{dimColor:!0,children:[" v",i]})]})}var ECi=O(()=>{KS()});function Vou(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 YS(i){return[...i.values()].map((u)=>u.handle).sort((u,t)=>u.localeCompare(t))}function rou(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 mou(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 hCi={};Ti(hCi,{subscribeLinkState:()=>cCi,setSelectedHandle:()=>wCi,setRemoving:()=>A6i,setPersistedSandboxes:()=>Lmt,setPendingConfirm:()=>Wq,setMachine:()=>Jmt,setLogPath:()=>Ymt,setLinkActions:()=>Wmt,setIngress:()=>Xmt,setDaemonError:()=>Kmt,setClusterUrl:()=>jmt,setCluster:()=>kmt,setActionError:()=>T6i,resetLinkStateForTests:()=>Qmt,removeSandboxRow:()=>$Ci,pushSandboxEvent:()=>Smt,getLinkState:()=>Yq,applySandboxEvent:()=>eou});function xmt(i){return i==="spawning"||i==="ready"||i==="failed"}function eou(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 aou(){return{cluster:"connecting",clusterUrl:null,ingressUrl:null,ingressPort:null,machine:null,cap:Imt,sandboxes:new Map,daemonError:null,logPath:null,selectedHandle:null,pendingConfirm:null,removingHandles:new Set,actionError:null,actions:null}}function r3(){for(let i of U6i)i()}function Yq(){return Ef}function cCi(i){return U6i.add(i),()=>U6i.delete(i)}function kmt(i){Ef={...Ef,cluster:i},r3()}function jmt(i){Ef={...Ef,clusterUrl:i},r3()}function Xmt(i,u){Ef={...Ef,ingressPort:i,ingressUrl:u},r3()}function Jmt(i){Ef={...Ef,machine:i},r3()}function Kmt(i){Ef={...Ef,daemonError:i},r3()}function Ymt(i){Ef={...Ef,logPath:i},r3()}function wCi(i){Ef={...Ef,selectedHandle:i},r3()}function Wq(i){Ef={...Ef,pendingConfirm:i},r3()}function T6i(i){Ef={...Ef,actionError:i},r3()}function A6i(i,u){if(Ef.removingHandles.has(i)===u)return;let t=new Set(Ef.removingHandles);if(u)t.add(i);else t.delete(i);Ef={...Ef,removingHandles:t},r3()}function Wmt(i){Ef={...Ef,actions:i},r3()}function $Ci(i){let u=YS(Ef.sandboxes),t=mou(u,i,Ef.selectedHandle),f=new Map(Ef.sandboxes);f.delete(i);let l=new Set(Ef.removingHandles);l.delete(i),Ef={...Ef,sandboxes:f,selectedHandle:t,pendingConfirm:null,removingHandles:l},r3()}function Lmt(i){let u=new Map;for(let t of i)u.set(t.handle,{handle:t.handle,port:t.port,previewUrl:t.previewUrl,status:t.status,error:t.error,projectName:t.projectName,branch:t.branch,sandboxPath:t.sandboxPath});for(let[t,f]of Ef.sandboxes)if(xmt(f.status))u.set(t,f);Ef={...Ef,sandboxes:u},r3()}function Smt(i){Ef={...Ef,sandboxes:eou(Ef.sandboxes,i)},r3()}function Qmt(){Ef=aou(),U6i.clear()}var Imt=20,Ef,U6i;var Lq=O(()=>{Ef=aou(),U6i=new Set});import{spawn as Hmt}from"child_process";function zmt(i){if(i==="darwin")return"open";if(i==="win32")return"start";return"xdg-open"}function oou(i,u=process.platform){let t=zmt(u);try{Hmt(t,[i],{stdio:"ignore",detached:!0}).unref()}catch{}}var sou=()=>{};function pou(i,u={}){let t=u.openUrl??oou,f=Yq(),l=YS(f.sandboxes),E=f.selectedHandle!==null&&l.includes(f.selectedHandle)?f.selectedHandle:l[0]??null,c=f.actions;switch(i.type){case"move":wCi(rou(l,f.selectedHandle,i.delta));return;case"open":{if(E===null)return;let w=f.sandboxes.get(E);if(w?.status==="ready"&&w.previewUrl)t(w.previewUrl);return}case"stop":if(E!==null&&c)c.stopSandbox(E);return;case"delete":{if(E===null||!c)return;let w=c.inspectSandbox(E),$=f.sandboxes.get(E);T6i(null),Wq({handle:E,branch:w?.branch??$?.branch??null,dirtyCount:w?.dirtyCount??0,merged:w?.merged??null});return}case"confirmYes":{let w=f.pendingConfirm;if(Wq(null),w===null||!c)return;A6i(w.handle,!0),c.removeSandbox(w.handle).then(($)=>{if($.ok)$Ci(w.handle);else A6i(w.handle,!1),T6i($.error)});return}case"confirmNo":Wq(null);return;case"quit":if(c)c.quit();return}}var isu=O(()=>{Lq();sou()});function usu(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 tsu={};Ti(tsu,{LinkApp:()=>Cmt});import{Box as C1,Text as vl,useInput as Rmt}from"ink";import{useSyncExternalStore as nmt}from"react";import{jsx as Xf,jsxs as Jh}from"react/jsx-runtime";function bmt(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 Cmt(){let i=nmt(cCi,Yq),u=[...i.sandboxes.values()].sort((l,E)=>l.handle.localeCompare(E.handle)),t=YS(i.sandboxes),f=i.selectedHandle!==null&&t.includes(i.selectedHandle)?i.selectedHandle:t[0]??null;return Rmt((l,E)=>{let c=usu(l,E,i.pendingConfirm!==null);if(c!==null)pou(c)}),Jh(C1,{flexDirection:"column",children:[Xf(g6i,{version:JS.version}),Xf(C1,{marginBottom:1,children:Xf(vl,{dimColor:!0,children:"\u2500".repeat(80)})}),Xf(C1,{children:i.cluster==="linked"?Jh(vl,{color:"green",children:["\u2713 Connected to ",i.clusterUrl??"deco"]}):i.cluster==="connecting"?Jh(vl,{color:"yellow",children:["\u25CC Connecting to ",i.clusterUrl??"deco","\u2026"]}):Jh(vl,{color:"red",children:["\u2717 Disconnected from ",i.clusterUrl??"deco"]})}),Xf(C1,{children:i.ingressUrl?Jh(vl,{color:"green",children:["\u2713 Serving at ",i.ingressUrl]}):Xf(vl,{dimColor:!0,children:"\u25CC Starting local server\u2026"})}),Xf(C1,{marginBottom:1,children:Xf(vl,{dimColor:!0,children:`${"Computer".padEnd(16)}${i.machine??"this computer"} \xB7 ${u.length} of ${i.cap} previews`})}),u.length===0?Xf(vl,{dimColor:!0,children:"No previews running yet."}):Jh(C1,{flexDirection:"column",children:[Jh(C1,{children:[Xf(C1,{width:2,flexShrink:0}),Xf(C1,{width:WS.project,flexShrink:0,marginRight:1,children:Xf(vl,{dimColor:!0,wrap:"truncate-end",children:"PROJECT"})}),Xf(C1,{width:WS.branch,flexShrink:0,marginRight:1,children:Xf(vl,{dimColor:!0,wrap:"truncate-end",children:"BRANCH"})}),Xf(C1,{width:WS.status,flexShrink:0,marginRight:1,children:Xf(vl,{dimColor:!0,wrap:"truncate-end",children:"STATUS"})}),Xf(C1,{flexGrow:1,children:Xf(vl,{dimColor:!0,wrap:"truncate-end",children:"PREVIEW URL"})})]}),u.map((l)=>{let E=bmt(l,i.removingHandles.has(l.handle)),c=l.handle===f;return Jh(C1,{children:[Xf(C1,{width:2,flexShrink:0,children:Xf(vl,{color:"cyan",children:c?"\u203A":" "})}),Xf(C1,{width:WS.project,flexShrink:0,marginRight:1,children:Xf(vl,{bold:c,wrap:"truncate-end",children:l.projectName??l.handle})}),Xf(C1,{width:WS.branch,flexShrink:0,marginRight:1,children:Xf(vl,{bold:c,wrap:"truncate-end",children:l.branch??"\u2014"})}),Xf(C1,{width:WS.status,flexShrink:0,marginRight:1,children:Xf(vl,{color:E.color,bold:c,wrap:"truncate-end",children:E.text})}),Xf(C1,{flexGrow:1,children:Xf(vl,{dimColor:!0,wrap:"truncate-end",children:l.previewUrl??"\u2014"})})]},l.handle)})]}),i.daemonError?Xf(C1,{marginTop:1,children:Jh(vl,{color:"red",children:["\u26A0 ",i.daemonError]})}):null,i.logPath?Xf(C1,{marginTop:1,children:Jh(vl,{dimColor:!0,children:["Logs: ",i.logPath]})}):null,i.pendingConfirm?Xf(C1,{marginTop:1,children:Xf(vl,{color:"yellow",children:Vou(i.pendingConfirm)})}):null,i.actionError?Xf(C1,{marginTop:1,children:Jh(vl,{color:"red",children:["\u2717 ",i.actionError]})}):null,Xf(C1,{marginTop:1,children:Xf(vl,{dimColor:!0,children:"\u2191\u2193 move \xB7 s stop \xB7 d delete \xB7 o open \xB7 q quit"})})]})}var WS;var fsu=O(()=>{Z6i();ECi();isu();Lq();WS={project:18,branch:22,status:14}});var lsu={};Ti(lsu,{runLinkCommand:()=>omt});import{closeSync as Mmt,mkdirSync as qmt,openSync as Vmt,writeSync as rmt}from"fs";import{homedir as mmt}from"os";import{join as vCi}from"path";function emt(i,u){let t={log:console.log,warn:console.warn,error:console.error},f=(l)=>{if(u===void 0)return;try{rmt(u,`${uCi(l)}
83549
+ `)}var lCi;var bou=O(()=>{lCi=class lCi extends Error{port;code="EADDRINUSE";constructor(i){super(`Port ${i} is already in use.`);this.port=i;this.name="PortInUseError"}}});var JS;var Z6i=O(()=>{JS={name:"decocms",version:"4.158.3",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts","smoke:link":"bun run scripts/smoke-link.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@anthropic-ai/claude-agent-sdk":"^0.3.181","@duckdb/node-api":"^1.5.0-r.1","@openai/codex":"0.144.3","@openai/codex-darwin-arm64":"npm:@openai/codex@0.144.3-darwin-arm64","@openai/codex-darwin-x64":"npm:@openai/codex@0.144.3-darwin-x64","@openai/codex-linux-arm64":"npm:@openai/codex@0.144.3-linux-arm64","@openai/codex-linux-x64":"npm:@openai/codex@0.144.3-linux-x64","@openai/codex-win32-arm64":"npm:@openai/codex@0.144.3-win32-arm64","@openai/codex-win32-x64":"npm:@openai/codex@0.144.3-win32-x64"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","@resvg/resvg-js":"^2.6.2","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","node-pty":"^1.0.0","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6",satori:"^0.28.2"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/harness":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@decocms/tunnel":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",vite:"^7.2.1",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});var Kq={};Ti(Kq,{printBanner:()=>Pmt,bannerLines:()=>Cou,BANNER_LINES:()=>B6i,BANNER_GRADIENT:()=>F6i});function Amt(i){let u=Number.parseInt(i.slice(1),16);return[u>>16&255,u>>8&255,u&255]}function Cou(i){let u=B6i.map((t,f)=>{let[l,E,c]=Amt(F6i[f]);return`\x1B[38;2;${l};${E};${c}m${t}\x1B[39m`});if(i!==void 0)u.push(`\x1B[2m v${i}\x1B[22m`);return u}function Pmt(i){console.log("");for(let u of Cou(i))console.log(u);console.log("")}var B6i,F6i;var KS=O(()=>{B6i=[" \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 "],F6i=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"]});import{Box as ymt,Text as Mou}from"ink";import{jsx as Gmt,jsxs as qou}from"react/jsx-runtime";function g6i({version:i}){return qou(ymt,{flexDirection:"column",marginTop:1,children:[B6i.map((u,t)=>Gmt(Mou,{color:F6i[t],children:u},t)),qou(Mou,{dimColor:!0,children:[" v",i]})]})}var ECi=O(()=>{KS()});function Vou(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 YS(i){return[...i.values()].map((u)=>u.handle).sort((u,t)=>u.localeCompare(t))}function rou(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 mou(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 hCi={};Ti(hCi,{subscribeLinkState:()=>cCi,setSelectedHandle:()=>wCi,setRemoving:()=>A6i,setPersistedSandboxes:()=>Lmt,setPendingConfirm:()=>Wq,setMachine:()=>Jmt,setLogPath:()=>Ymt,setLinkActions:()=>Wmt,setIngress:()=>Xmt,setDaemonError:()=>Kmt,setClusterUrl:()=>jmt,setCluster:()=>kmt,setActionError:()=>T6i,resetLinkStateForTests:()=>Qmt,removeSandboxRow:()=>$Ci,pushSandboxEvent:()=>Smt,getLinkState:()=>Yq,applySandboxEvent:()=>eou});function xmt(i){return i==="spawning"||i==="ready"||i==="failed"}function eou(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 aou(){return{cluster:"connecting",clusterUrl:null,ingressUrl:null,ingressPort:null,machine:null,cap:Imt,sandboxes:new Map,daemonError:null,logPath:null,selectedHandle:null,pendingConfirm:null,removingHandles:new Set,actionError:null,actions:null}}function r3(){for(let i of U6i)i()}function Yq(){return Ef}function cCi(i){return U6i.add(i),()=>U6i.delete(i)}function kmt(i){Ef={...Ef,cluster:i},r3()}function jmt(i){Ef={...Ef,clusterUrl:i},r3()}function Xmt(i,u){Ef={...Ef,ingressPort:i,ingressUrl:u},r3()}function Jmt(i){Ef={...Ef,machine:i},r3()}function Kmt(i){Ef={...Ef,daemonError:i},r3()}function Ymt(i){Ef={...Ef,logPath:i},r3()}function wCi(i){Ef={...Ef,selectedHandle:i},r3()}function Wq(i){Ef={...Ef,pendingConfirm:i},r3()}function T6i(i){Ef={...Ef,actionError:i},r3()}function A6i(i,u){if(Ef.removingHandles.has(i)===u)return;let t=new Set(Ef.removingHandles);if(u)t.add(i);else t.delete(i);Ef={...Ef,removingHandles:t},r3()}function Wmt(i){Ef={...Ef,actions:i},r3()}function $Ci(i){let u=YS(Ef.sandboxes),t=mou(u,i,Ef.selectedHandle),f=new Map(Ef.sandboxes);f.delete(i);let l=new Set(Ef.removingHandles);l.delete(i),Ef={...Ef,sandboxes:f,selectedHandle:t,pendingConfirm:null,removingHandles:l},r3()}function Lmt(i){let u=new Map;for(let t of i)u.set(t.handle,{handle:t.handle,port:t.port,previewUrl:t.previewUrl,status:t.status,error:t.error,projectName:t.projectName,branch:t.branch,sandboxPath:t.sandboxPath});for(let[t,f]of Ef.sandboxes)if(xmt(f.status))u.set(t,f);Ef={...Ef,sandboxes:u},r3()}function Smt(i){Ef={...Ef,sandboxes:eou(Ef.sandboxes,i)},r3()}function Qmt(){Ef=aou(),U6i.clear()}var Imt=20,Ef,U6i;var Lq=O(()=>{Ef=aou(),U6i=new Set});import{spawn as Hmt}from"child_process";function zmt(i){if(i==="darwin")return"open";if(i==="win32")return"start";return"xdg-open"}function oou(i,u=process.platform){let t=zmt(u);try{Hmt(t,[i],{stdio:"ignore",detached:!0}).unref()}catch{}}var sou=()=>{};function pou(i,u={}){let t=u.openUrl??oou,f=Yq(),l=YS(f.sandboxes),E=f.selectedHandle!==null&&l.includes(f.selectedHandle)?f.selectedHandle:l[0]??null,c=f.actions;switch(i.type){case"move":wCi(rou(l,f.selectedHandle,i.delta));return;case"open":{if(E===null)return;let w=f.sandboxes.get(E);if(w?.status==="ready"&&w.previewUrl)t(w.previewUrl);return}case"stop":if(E!==null&&c)c.stopSandbox(E);return;case"delete":{if(E===null||!c)return;let w=c.inspectSandbox(E),$=f.sandboxes.get(E);T6i(null),Wq({handle:E,branch:w?.branch??$?.branch??null,dirtyCount:w?.dirtyCount??0,merged:w?.merged??null});return}case"confirmYes":{let w=f.pendingConfirm;if(Wq(null),w===null||!c)return;A6i(w.handle,!0),c.removeSandbox(w.handle).then(($)=>{if($.ok)$Ci(w.handle);else A6i(w.handle,!1),T6i($.error)});return}case"confirmNo":Wq(null);return;case"quit":if(c)c.quit();return}}var isu=O(()=>{Lq();sou()});function usu(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 tsu={};Ti(tsu,{LinkApp:()=>Cmt});import{Box as C1,Text as vl,useInput as Rmt}from"ink";import{useSyncExternalStore as nmt}from"react";import{jsx as Xf,jsxs as Jh}from"react/jsx-runtime";function bmt(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 Cmt(){let i=nmt(cCi,Yq),u=[...i.sandboxes.values()].sort((l,E)=>l.handle.localeCompare(E.handle)),t=YS(i.sandboxes),f=i.selectedHandle!==null&&t.includes(i.selectedHandle)?i.selectedHandle:t[0]??null;return Rmt((l,E)=>{let c=usu(l,E,i.pendingConfirm!==null);if(c!==null)pou(c)}),Jh(C1,{flexDirection:"column",children:[Xf(g6i,{version:JS.version}),Xf(C1,{marginBottom:1,children:Xf(vl,{dimColor:!0,children:"\u2500".repeat(80)})}),Xf(C1,{children:i.cluster==="linked"?Jh(vl,{color:"green",children:["\u2713 Connected to ",i.clusterUrl??"deco"]}):i.cluster==="connecting"?Jh(vl,{color:"yellow",children:["\u25CC Connecting to ",i.clusterUrl??"deco","\u2026"]}):Jh(vl,{color:"red",children:["\u2717 Disconnected from ",i.clusterUrl??"deco"]})}),Xf(C1,{children:i.ingressUrl?Jh(vl,{color:"green",children:["\u2713 Serving at ",i.ingressUrl]}):Xf(vl,{dimColor:!0,children:"\u25CC Starting local server\u2026"})}),Xf(C1,{marginBottom:1,children:Xf(vl,{dimColor:!0,children:`${"Computer".padEnd(16)}${i.machine??"this computer"} \xB7 ${u.length} of ${i.cap} previews`})}),u.length===0?Xf(vl,{dimColor:!0,children:"No previews running yet."}):Jh(C1,{flexDirection:"column",children:[Jh(C1,{children:[Xf(C1,{width:2,flexShrink:0}),Xf(C1,{width:WS.project,flexShrink:0,marginRight:1,children:Xf(vl,{dimColor:!0,wrap:"truncate-end",children:"PROJECT"})}),Xf(C1,{width:WS.branch,flexShrink:0,marginRight:1,children:Xf(vl,{dimColor:!0,wrap:"truncate-end",children:"BRANCH"})}),Xf(C1,{width:WS.status,flexShrink:0,marginRight:1,children:Xf(vl,{dimColor:!0,wrap:"truncate-end",children:"STATUS"})}),Xf(C1,{flexGrow:1,children:Xf(vl,{dimColor:!0,wrap:"truncate-end",children:"PREVIEW URL"})})]}),u.map((l)=>{let E=bmt(l,i.removingHandles.has(l.handle)),c=l.handle===f;return Jh(C1,{children:[Xf(C1,{width:2,flexShrink:0,children:Xf(vl,{color:"cyan",children:c?"\u203A":" "})}),Xf(C1,{width:WS.project,flexShrink:0,marginRight:1,children:Xf(vl,{bold:c,wrap:"truncate-end",children:l.projectName??l.handle})}),Xf(C1,{width:WS.branch,flexShrink:0,marginRight:1,children:Xf(vl,{bold:c,wrap:"truncate-end",children:l.branch??"\u2014"})}),Xf(C1,{width:WS.status,flexShrink:0,marginRight:1,children:Xf(vl,{color:E.color,bold:c,wrap:"truncate-end",children:E.text})}),Xf(C1,{flexGrow:1,children:Xf(vl,{dimColor:!0,wrap:"truncate-end",children:l.previewUrl??"\u2014"})})]},l.handle)})]}),i.daemonError?Xf(C1,{marginTop:1,children:Jh(vl,{color:"red",children:["\u26A0 ",i.daemonError]})}):null,i.logPath?Xf(C1,{marginTop:1,children:Jh(vl,{dimColor:!0,children:["Logs: ",i.logPath]})}):null,i.pendingConfirm?Xf(C1,{marginTop:1,children:Xf(vl,{color:"yellow",children:Vou(i.pendingConfirm)})}):null,i.actionError?Xf(C1,{marginTop:1,children:Jh(vl,{color:"red",children:["\u2717 ",i.actionError]})}):null,Xf(C1,{marginTop:1,children:Xf(vl,{dimColor:!0,children:"\u2191\u2193 move \xB7 s stop \xB7 d delete \xB7 o open \xB7 q quit"})})]})}var WS;var fsu=O(()=>{Z6i();ECi();isu();Lq();WS={project:18,branch:22,status:14}});var lsu={};Ti(lsu,{runLinkCommand:()=>omt});import{closeSync as Mmt,mkdirSync as qmt,openSync as Vmt,writeSync as rmt}from"fs";import{homedir as mmt}from"os";import{join as vCi}from"path";function emt(i,u){let t={log:console.log,warn:console.warn,error:console.error},f=(l)=>{if(u===void 0)return;try{rmt(u,`${uCi(l)}
83550
83550
  `)}catch{}};return console.log=(...l)=>f(l),console.warn=(...l)=>f(l),console.error=(...l)=>{f(l),i(uCi(l))},()=>{console.log=t.log,console.warn=t.warn,console.error=t.error}}async function amt(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 omt(i={}){let u=i.port??5174,t=i.dataDir??process.env.DATA_DIR??process.env.DECOCMS_HOME??vCi(mmt(),"deco"),f=i.clusterBaseUrl??process.env.STUDIO_CLUSTER_URL??process.env.MESH_CLUSTER_URL??"https://studio.decocms.com",l,E,c,w=()=>{if(c===void 0)return;try{c.close()}catch{}finally{c=void 0}};try{if(await tCi(u,"127.0.0.1"))throw new lCi(u);let $=vCi(t,"sandboxes");c=O6i({path:N6i(t),managedSandboxRoot:$});let h=await hli({dataDir:t,intent:"Link",target:f});if(process.env.DECOCMS_LINK_MANAGED!=="1")await amt(f,h.accessToken);let v=c.reconcile();if(i.prune){let N=c.prune({missing:!0,merged:!0});if(!i.tui)console.log(`Pruned local sandboxes: removed ${N.removed.length}, skipped ${N.skipped.length}.`);v=c.reconcile()}let d;if(i.tui){let{render:N}=await import("ink"),{createElement:Z}=await import("react"),{LinkApp:B}=await Promise.resolve().then(() => (fsu(),tsu)),{pushSandboxEvent:F,setCluster:g,setClusterUrl:U,setDaemonError:T,setIngress:A,setLogPath:G,setMachine:k,setPersistedSandboxes:I}=await Promise.resolve().then(() => (Lq(),hCi));qmt(t,{recursive:!0});let j=vCi(t,"link.log");E=Vmt(j,"w"),G(j),I(v),U(f),g("connecting"),d={onEvent:(C)=>F(C),onIngress:(C)=>A(C,`http://127.0.0.1:${C}`),onCluster:(C)=>g(C),onMachine:(C)=>k(C)},l=emt(T,E),N(Z(B),{patchConsole:!1})}else if(i.banner!==!1){let{printBanner:N}=await Promise.resolve().then(() => (KS(),Kq));N(i.version??"0.0.0")}w();let D=process.env.DECOCMS_LINK_MANAGED!=="1",_=await Qou({port:u,clusterBaseUrl:f,dataDir:t,session:h,monitor:d,logFd:E,perSandboxLogs:D,hotReload:i.hotReload});if(i.tui){let{setLinkActions:N}=await Promise.resolve().then(() => (Lq(),hCi));N({stopSandbox:_.stopSandbox,removeSandbox:_.removeSandbox,inspectSandbox:_.inspectSandbox,quit:_.stop})}return await _.stopped}catch($){return l?.(),console.error(Rou($)?nou(u):$ instanceof Error?$.message:String($)),1}finally{if(l?.(),E!==void 0)try{Mmt(E)}catch{}w()}}var Esu=O(()=>{WRi();Hou();fCi();bou();iCi()});var ZCi={};Ti(ZCi,{resolveDevLinkClusterUrl:()=>uet,populateDevLinkToxiProxy:()=>dsu,isDevLinkToxiProxyEnabled:()=>iet,ensureDevLinkToxiProxy:()=>wet,buildDevLinkToxiProxyConfig:()=>hsu,DEV_LINK_TOXIPROXY_SERVICE_NAME:()=>wsu,DEV_LINK_TOXIPROXY_PROXY_NAME:()=>$su});function iet(i=process.env){return i.DECO_DEV_LINK_TOXIPROXY==="1"}function dCi(i,u){if(!Number.isInteger(i)||i<1||i>65535)throw Error(`${u} must be an integer port in 1..65535`);return i}function hsu(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=dCi(i.apiPort,"apiPort"),f=dCi(i.listenPort,"listenPort");if(u.port.length===0)throw Error("serverUrl must include an explicit valid port");let l=dCi(Number.parseInt(u.port,10),"upstreamPort"),E=`http://127.0.0.1:${l}`,c=`http://127.0.0.1:${f}`;return{serviceName:wsu,proxyName:$su,apiUrl:`http://127.0.0.1:${t}`,listen:`0.0.0.0:${f}`,upstream:`host.docker.internal:${l}`,publicTargetUrl:E,clusterUrl:c,logLine:`[dev-link-toxiproxy] ready: ${c} -> ${E}`}}function uet(i){return i.toxiproxy?.clusterUrl??i.serverUrl}async function DCi(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 OCi(i){if(i instanceof Error)return i.name==="Error"?i.message:`${i.name}: ${i.message}`;return String(i)}function vsu(i){if(!(i instanceof Error))return!1;if(i.name==="TimeoutError")return!0;return vsu(i.cause)}async function _Ci(i,u,t,f){try{return await i(t,f)}catch(l){throw Error(`ToxiProxy ${u} failed for ${t}: ${OCi(l)}`,{cause:l})}}async function dsu(i,u=fetch){let t=`${i.apiUrl}/reset`,f=await _Ci(u,"reset",t,{method:"POST"});await DCi(f,"reset",t);let l=`${i.apiUrl}/populate`,E=await _Ci(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 DCi(E,"populate",l)}async function tet(i,u){let t=`${i.apiUrl}/version`;try{await F1(async()=>{let f=await _Ci(u,"readiness check",t,{method:"GET",signal:AbortSignal.timeout(pmt)});await DCi(f,"readiness check",t)},{maxAttempts:smt,minTimeout:csu,maxTimeout:csu,multiplier:1,jitter:0,isRetriable:(f)=>!vsu(f)})}catch(f){let l=f instanceof z6?f.cause:f;throw Error(`ToxiProxy API did not become ready at ${t}: ${OCi(l)}`,{cause:l})}}async function fet(i){if(i===null)return"";return await new Response(i).text()}async function NCi(i,u={}){let t=["docker",...i].join(" "),f=(()=>{try{return Bun.spawn(["docker",...i],{stdout:"ignore",stderr:"pipe"})}catch(w){throw Error(`Docker command failed to start (${t}): ${OCi(w)}`,{cause:w})}})(),[l,E]=await Promise.all([f.exited,fet(f.stderr)]);if(l===0||u.ignoreFailure===!0)return;let c=E.trim().length>0?`: ${E.trim()}`:"";throw Error(`Docker command failed (${t}) with exit ${l}${c}`)}async function Eet(i,u){let t=`deco-dev-link-toxiproxy-${i}`;await NCi(["rm","-f",t],{ignoreFailure:!0}),await NCi(["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 cet(i,u){let t=`deco-dev-link-toxiproxy-${i}`;await NCi(["rm","-f",t],{ignoreFailure:!0})}async function wet(i){let u=hsu(i),t=i.startDaemon??Eet,f=i.stopDaemon??(i.startDaemon===void 0?cet:void 0);await t(i.apiPort,i.listenPort);let l=i.fetchImpl??fetch;try{await tet(u,l),await dsu(u,l)}catch(E){if(f!==void 0)try{await f(i.apiPort,i.listenPort)}catch{}throw E}return{config:u,stop:async()=>{if(f!==void 0)await f(i.apiPort,i.listenPort)}}}var wsu="ToxiProxy",$su="dev_link_studio",smt=20,csu=100,pmt=100;var BCi=O(()=>{Z4()});var Dsu={};Ti(Dsu,{migrateBetterAuth:()=>FCi});import{getMigrations as $et}from"better-auth/db";import{sso as het}from"@better-auth/sso";import{organization as vet}from"@decocms/better-auth/plugins";import{admin as det,apiKey as Det,jwt as _et,magicLink as Net,mcp as Oet,openAPI as Zet}from"better-auth/plugins";import{emailOTP as Bet}from"better-auth/plugins/email-otp";async function FCi(i){let t={database:mM(i||y_()),plugins:[vet({dynamicAccessControl:{enabled:!0,enableCustomResources:!0}}),det(),Det(),_et(),Zet(),Oet({loginPage:"/login"}),het(),Net({sendMagicLink:async()=>{}}),Bet({sendVerificationOTP:async()=>{}})]},{toBeAdded:f,toBeCreated:l,runMigrations:E}=await $et(t);if(!f.length&&!l.length)return"up to date";return await E(),`${l.length+f.length} table(s) migrated`}var gCi=O(()=>{C6()});var UCi={};Ti(UCi,{up:()=>Fet,down:()=>get});import{sql as g8}from"kysely";async function Fet(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(g8`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(u)=>u.notNull().defaultTo(g8`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(g8`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(u)=>u.notNull().defaultTo(g8`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(g8`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(g8`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(g8`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(g8`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(g8`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(u)=>u.notNull().defaultTo(g8`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 get(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 _su=()=>{};var TCi={};Ti(TCi,{up:()=>Uet,down:()=>Tet});import{sql as Nsu}from"kysely";async function Uet(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(Nsu`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(u)=>u.notNull().defaultTo(Nsu`CURRENT_TIMESTAMP`)).execute()}async function Tet(i){await i.schema.dropTable("organization_settings").execute()}var Osu=()=>{};var ACi={};Ti(ACi,{up:()=>Aet,down:()=>Pet});async function Aet(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 Pet(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 PCi={};Ti(PCi,{up:()=>yet,down:()=>Get});async function yet(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 Get(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 yCi={};Ti(yCi,{up:()=>Iet,down:()=>xet});async function Iet(i){await i.schema.alterTable("connections").addColumn("configuration_state","text").execute(),await i.schema.alterTable("connections").addColumn("configuration_scopes","text").execute()}async function xet(i){await i.schema.alterTable("connections").dropColumn("configuration_state").execute(),await i.schema.alterTable("connections").dropColumn("configuration_scopes").execute()}var GCi={};Ti(GCi,{up:()=>jet,down:()=>Xet});import{sql as ket}from"kysely";async function jet(i){await i.schema.alterTable("organization_settings").addColumn("sidebar_items",ket`text`).execute()}async function Xet(i){await i.schema.alterTable("organization_settings").dropColumn("sidebar_items").execute()}var Zsu=()=>{};var ICi={};Ti(ICi,{up:()=>Jet,down:()=>Ket});async function Jet(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 Ket(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 xCi={};Ti(xCi,{up:()=>Yet,down:()=>Wet});import{sql as Sq}from"kysely";async function Yet(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(Sq`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(u)=>u.notNull().defaultTo(Sq`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(Sq`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(u)=>u.notNull().defaultTo(Sq`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(Sq`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 Wet(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 Bsu=()=>{};var kCi={};Ti(kCi,{up:()=>Qet,down:()=>Het});import{sql as Let}from"kysely";async function Qet(i){await i.schema.dropTable("audit_logs").ifExists().execute()}async function Het(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(Let`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 Fsu=()=>{};var jCi={};Ti(jCi,{up:()=>zet,down:()=>Ret});import{sql as P6i}from"kysely";async function zet(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(P6i`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(u)=>u.notNull().defaultTo(P6i`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(P6i`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 P6i`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 Ret(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 gsu=()=>{};var XCi={};Ti(XCi,{up:()=>net,down:()=>bet});async function net(i){await i.schema.alterTable("gateways").addColumn("icon","text").execute()}async function bet(i){await i.schema.alterTable("gateways").dropColumn("icon").execute()}var JCi={};Ti(JCi,{up:()=>Cet,down:()=>Met});import{sql as y6i}from"kysely";async function Cet(i){await i.schema.alterTable("gateways").addColumn("tool_selection_mode","text",(u)=>u.notNull().defaultTo("inclusion")).execute(),await y6i`
83551
83551
  UPDATE gateways
83552
83552
  SET tool_selection_mode = CASE
@@ -85745,7 +85745,7 @@ ${u.description}
85745
85745
  Task description:
85746
85746
  ${u.description}
85747
85747
  `:"","How to work:","- Call `TASK_BOARD_ITEM_PRS_GET` with the task id below to find the pull request under review, then load its repository to inspect / exercise the change.","- Do NOT push commits or change the code yourself. You are reviewing, not implementing.",`- End the run by calling \`TASK_BOARD_REVIEW_DECISION\` exactly once with the task id, reviewer "${t}", the reviewToken below, and your decision:`," - `approve` when it's good to ship. Include a short summary of what you verified."," - `request_changes` when something is wrong or missing. Include specific, actionable notes \u2014 the task goes back to the Super Agent with your notes.","- The reviewToken proves you are this reviewer \u2014 pass it through EXACTLY as given. Without it your approval won't count toward an automatic merge.","",`(task id: ${u.id})`,`(reviewToken: ${f})`].join(`
85748
- `);await jvi(i,u,{title:`${Do[t]}: ${u.title}`,prompt:E,temperature:0.3}),await Gd(i,{taskBoardItemId:u.id,action:"review_requested",actorId:null,data:{reviewer:t}});let c=await i.storage.taskBoard.getById(u.id,l);if(c)u6(l,c)}var xzf,kzf;var Nlu=O(()=>{m2();Wg();yw();llu();xzf=new Set(["completed","failed","expired"]),kzf={qa:"You are the QA Agent. Your job is to confirm the task ACTUALLY SOLVED THE "+"PROBLEM \u2014 not to review code style. Exercise the feature/behavior the task "+"describes (use the PR's preview / dev server when available), check the acceptance criteria implied by the title and description, and look for regressions in the affected flow. Judge outcomes, not the diff.",code_review:"You are the Code Reviewer. Review the code changes for correctness, security, and quality. FIRST look for a review skill/command appropriate to this repository's stack (e.g. a `/review`, `code-review`, or `security-review` skill, or the repo's CONTRIBUTING/review guidelines) and use it. Read the diff critically and flag concrete issues with file/line references."}});import{z as Kvi}from"zod";async function Wvi(i,u,t,f){if(t){let c=await i.storage.connections.findById(t,u);if(c&&c.status==="active")return c}let{items:l}=await i.storage.connections.list(u,{slug:"mcp-github"}),E=l.filter((c)=>c.status==="active");if(f){let c=E.find((w)=>{let $=Z3(w);return $?.owner===f.owner&&$?.repo===f.name});if(c)return c}return E.find((c)=>Z3(c)===null)??E[0]??null}function Lvi(i){if(!i||typeof i!=="object")return null;let u=i;if(u.isError)return null;if(u.structuredContent&&typeof u.structuredContent==="object"&&Object.keys(u.structuredContent).length>0)return u.structuredContent;let t=u.content?.find((f)=>f.type==="text")?.text;if(!t)return null;try{return JSON.parse(t)}catch{return null}}function Zlu(i){let u;try{u=new URL(i).hostname.toLowerCase()}catch{return!1}return u==="deco.site"||u.endsWith(".decocdn.com")||u.endsWith(".deco-cx.workers.dev")||u.endsWith(".deco.site")}function Kzf(i){if(!i||!Array.isArray(i.statuses))return null;let u=i.statuses.map((t)=>t&&typeof t==="object"?t:null).filter((t)=>!!t&&typeof t.target_url==="string"&&Zlu(t.target_url));if(u.length===0)return null;return u.find((t)=>t.state==="success")?.target_url??u[0].target_url}function Yzf(i){let u=Array.isArray(i)?i:Array.isArray(i?.comments)?i.comments:Array.isArray(i?.items)?i.items:[];for(let t of u){let f=t&&typeof t.body==="string"?t.body:"";if(!f)continue;let l=f.match(/href=['"]([^'"]+)['"][^>]*>\s*Branch Preview/i);if(l?.[1]&&Zlu(l[1]))return l[1];let E=(f.match(/https?:\/\/[^\s"'<>)\]]+/g)??[]).find((c)=>Zlu(c));if(E)return E}return null}function PI0(i){if(!i)return null;if((typeof i.total_count==="number"?i.total_count:null)===0)return null;switch(i.state){case"success":return"passing";case"failure":case"error":return"failing";case"pending":return"pending";default:return null}}function GI0(i){let u=Array.isArray(i)?i:Array.isArray(i?.check_runs)?i.check_runs:[];if(u.length===0)return null;let t=!1,f=!1;for(let l of u){if(!l||typeof l!=="object")continue;let{status:E,conclusion:c}=l;if(E!=="completed")f=!0;else if(typeof c==="string"&&yI0.has(c))t=!0}if(t)return"failing";if(f)return"pending";return"passing"}function II0(i,u){if(i==="failing"||u==="failing")return"failing";if(i==="pending"||u==="pending")return"pending";if(i==="passing"||u==="passing")return"passing";return null}function Wzf(i){let u=Array.isArray(i)?i:Array.isArray(i?.check_runs)?i.check_runs:[],t=[];for(let f of u){if(!f||typeof f!=="object")continue;let l=f;t.push({id:typeof l.id==="number"?l.id:null,name:typeof l.name==="string"?l.name:"",status:typeof l.status==="string"?l.status:"completed",conclusion:typeof l.conclusion==="string"?l.conclusion:null,detailsUrl:typeof l.html_url==="string"?l.html_url:typeof l.details_url==="string"?l.details_url:null})}return t}function Lzf(i){return i.status==="completed"&&i.conclusion!=null&&yI0.has(i.conclusion)}async function Szf(i,u,t){try{let l=Lvi(await i.callTool({name:"GET_CHECK_RUN",arguments:{owner:u.repoOwner,repo:u.repoName,checkRunId:t}},void 0,{timeout:Yvi}))?.output,E=typeof l?.summary==="string"?l.summary:null,c=typeof l?.text==="string"?l.text:null;return E??c??null}catch{return null}}async function xI0(i,u,t){let f=await Wvi(i,u,t.connectionId,{owner:t.repoOwner,name:t.repoName});if(!f)return null;let l=await Nl(f,i,!0),E=async(c)=>Lvi(await l.callTool({name:"pull_request_read",arguments:{method:c,owner:t.repoOwner,repo:t.repoName,pullNumber:t.number}},void 0,{timeout:Yvi}));try{let c=null;try{c=PI0(await E("get_status"))}catch{}try{c=II0(c,GI0(await E("get_check_runs")))}catch{}return c}finally{await l.close().catch(()=>{})}}async function Qzf(i,u){let t=async(h)=>{try{return Lvi(await i.callTool({name:"pull_request_read",arguments:{method:h,owner:u.repoOwner,repo:u.repoName,pullNumber:u.number}},void 0,{timeout:Yvi}))}catch{return null}},[f,l,E]=await Promise.all([t("get_status"),t("get_check_runs"),t("get_comments")]),c=II0(PI0(f),GI0(l)),w=Kzf(f)??Yzf(E),$=await Promise.all(Wzf(l).map(async(h)=>({name:h.name,status:h.status,conclusion:h.conclusion,detailsUrl:h.detailsUrl,summary:Lzf(h)&&h.id!=null?await Szf(i,u,h.id):null})));return{checksStatus:c,checks:$,previewUrl:w}}async function Hzf(i,u,t){let f=await Wvi(i,u,t.connectionId,{owner:t.repoOwner,name:t.repoName});if(!f)return Olu;let l=await Nl(f,i,!0);try{let[E,c]=await Promise.all([l.callTool({name:"pull_request_read",arguments:{method:"get",owner:t.repoOwner,repo:t.repoName,pullNumber:t.number}},void 0,{timeout:Yvi}),Qzf(l,t)]),w=Lvi(E);if(!w)return Olu;let $=w.state,h=$==="open";return{title:typeof w.title==="string"?w.title:null,body:typeof w.body==="string"?w.body:null,state:$==="closed"?"closed":h?"open":null,draft:typeof w.draft==="boolean"?w.draft:null,merged:typeof w.merged==="boolean"?w.merged:null,checksStatus:h?c.checksStatus:null,checks:h?c.checks:[],previewUrl:h?c.previewUrl:null}}catch{return Olu}finally{await l.close().catch(()=>{})}}var Yvi=8000,Olu,yI0,Blu;var Flu=O(()=>{uu();n2();H2();m2();Fd();yw();Nlu();m1u();Olu={title:null,body:null,state:null,draft:null,merged:null,checksStatus:null,checks:[],previewUrl:null};yI0=new Set(["failure","cancelled","timed_out","action_required","startup_failure","stale"]);Blu=p({name:"TASK_BOARD_ITEM_PRS_GET",description:"Get the GitHub pull requests linked to a task board item, each enriched with live state (title, open/closed, draft, merged) fetched from GitHub.",annotations:{title:"Get Task Board Item Pull Requests",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:Kvi.object({taskBoardItemId:Kvi.string()}),outputSchema:Kvi.object({prs:Kvi.array(iT0)}),handler:async({taskBoardItemId:i},u)=>{gi(u),await u.access.check();let t=u.organization?.id;if(!t)throw Error("Organization ID required (no active organization in context)");let f=await u.storage.taskBoard.getById(i,t);for(let $ of f?.threads??[]){let h=$.lastMessage?Gvi($.lastMessage):null;if(!h)continue;try{await u.storage.taskBoard.linkPr({taskBoardItemId:i,organizationId:t,url:h.url,prNumber:h.number,repoOwner:h.owner,repoName:h.repo,connectionId:null})}catch(v){console.error("[task-board] PR recovery from thread text failed",v)}}let l=await u.storage.taskBoard.listPrs(i,t),E=await Promise.all(l.map(async($)=>{let h=await Hzf(u,t,$);return{url:$.url,number:$.number,repoOwner:$.repoOwner,repoName:$.repoName,createdAt:$.createdAt,...h}})),c=E.find(($)=>$.state==="open"&&!$.merged),w=c!=null&&c.checksStatus!=="pending"&&c.checksStatus!=="failing";if(f&&f.status==="in_review"&&f.assigneeId===LE&&w)await _lu(u,f).catch(($)=>{console.error("[task-board] reviewer auto-handoff failed",$)});if(E.some(($)=>$.merged))try{if(f&&f.status!=="done"){let $=await u.storage.taskBoard.update(i,t,{status:"done"},f.updatedBy);u6(t,$)}}catch($){console.error("[task-board] merge\u2192done reconcile failed",$)}return{prs:E}}})});async function Svi(i,u,t){let l=(await i.storage.taskBoard.listPrs(t,u))[0];if(!l)return!1;let E=await xI0(i,u,l);if(E==="failing"||E==="pending")return console.warn(`[task-board] merge blocked \u2014 checks ${E} on PR #${l.number}`),!1;let c=await Wvi(i,u,l.connectionId,{owner:l.repoOwner,name:l.repoName});if(!c)return!1;let w=await Nl(c,i,!0);try{return!(await w.callTool({name:"merge_pull_request",arguments:{owner:l.repoOwner,repo:l.repoName,pullNumber:l.number}},void 0,{timeout:zzf}))?.isError}catch($){return console.error("[task-board] merge PR failed",$),!1}finally{await w.close().catch(()=>{})}}var zzf=15000;var glu=O(()=>{n2();Flu()});import{z as qN}from"zod";async function Rzf(i,u,t){let l=(await i.storage.organizationSettings.get(u))?.flags??{},E=iR.filter((w)=>l[uR[w]]===!0),c=await i.storage.taskBoard.listActivity(t,u);return bhi(c,E,{verifiedOnly:!0})}var Ulu;var kI0=O(()=>{uu();m2();Fd();Wg();yw();Yo();glu();Ulu=p({name:"TASK_BOARD_REVIEW_DECISION",description:"Record a reviewer's decision for a task under review. `approve` marks the pull request approved by that reviewer (and, once EVERY enabled reviewer has approved, merges it when the org enabled auto-merge, advancing the task to Done); `request_changes` hands the task back to the Super Agent with your notes so it can fix the PR.",annotations:{title:"Review Decision",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!0},inputSchema:qN.object({taskBoardItemId:qN.string(),reviewer:qN.enum(["qa","code_review"]).describe("Which reviewer you are: `qa` (QA Agent) or `code_review` (Code Reviewer)."),reviewToken:qN.string().optional().describe("The reviewToken from your prompt \u2014 proves you are this reviewer. "+"Pass it through exactly; an approval without a valid token is recorded but does NOT count toward an automatic merge."),decision:qN.enum(["approve","request_changes"]),notes:qN.string().min(1).describe("For approve: a short summary of what you verified. For request_changes: specific, actionable feedback the Super Agent must address.")}),outputSchema:qN.object({status:e2,merged:qN.boolean().describe("True when this approval completed the review and merged the PR.")}),handler:async({taskBoardItemId:i,reviewer:u,reviewToken:t,decision:f,notes:l},E)=>{gi(E),await E.access.check();let c=E.organization?.id;if(!c)throw Error("Organization ID required (no active organization in context)");let w=await E.storage.taskBoard.getById(i,c);if(!w)throw Error(`Task board item not found: ${i}`);let h=(t?await E.storage.taskBoard.resolveReviewClaimByToken(i,t):null)?.reviewer===u;if(f==="request_changes"){let Z=await E.storage.taskBoard.update(i,c,{status:"in_progress"},w.updatedBy);await Gd(E,{taskBoardItemId:i,action:"review_changes_requested",actorId:null,data:{reviewer:u,notes:l,verified:h}}),u6(c,Z);let F=(await E.storage.taskBoard.listPrs(i,c))[0];return await Elu(E,Z,{feedback:`${Do[u]}: ${l}`,pr:F?{number:F.number,url:F.url}:void 0}),{status:Z.status,merged:!1}}if(await Gd(E,{taskBoardItemId:i,action:"review_approved",actorId:null,data:{reviewer:u,notes:l,verified:h}}),!await Rzf(E,c,i)){let Z=await E.storage.taskBoard.getById(i,c)??w;return u6(c,Z),{status:Z.status,merged:!1}}let _=(await E.storage.organizationSettings.get(c))?.flags?.auto_merge===!0?await Svi(E,c,i):!1,N=_?await E.storage.taskBoard.update(i,c,{status:"done"},w.updatedBy):await E.storage.taskBoard.getById(i,c)??w;if(_)await Gd(E,{taskBoardItemId:i,action:"status_changed",actorId:null,data:{from:w.status,to:"done"}});return u6(c,N),{status:N.status,merged:_}}})});import{z as Qvi}from"zod";function nzf(i,u,t){if(i!=="in_review")return!1;return t.length===0||bhi(u,t)}var Tlu;var jI0=O(()=>{uu();m2();Fd();Wg();yw();glu();Tlu=p({name:"TASK_BOARD_PROMOTE_TO_PRODUCTION",description:"Ship a reviewed task: merge its open pull request and move the task to Done. Used by the board's 'Ship to production' button after the enabled reviewers approved, when auto-merge is off (a human does the final merge).",annotations:{title:"Ship to Production",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!0},inputSchema:Qvi.object({taskBoardItemId:Qvi.string()}),outputSchema:Qvi.object({status:e2,merged:Qvi.boolean().describe("True when the PR was merged.")}),handler:async({taskBoardItemId:i},u)=>{gi(u),await u.access.check();let t=u.organization?.id;if(!t)throw Error("Organization ID required (no active organization in context)");let f=await u.storage.taskBoard.getById(i,t);if(!f)throw Error(`Task board item not found: ${i}`);let E=(await u.storage.organizationSettings.get(t))?.flags??{},c=iR.filter((v)=>E[uR[v]]===!0),w=await u.storage.taskBoard.listActivity(i,t);if(!nzf(f.status,w,c))throw Error("Task is not ready to ship: it must be In Review with every enabled reviewer approved");if(!await Svi(u,t,i))return{status:f.status,merged:!1};let h=await u.storage.taskBoard.update(i,t,{status:"done"},f.updatedBy);if(f.status!=="done")await Gd(u,{taskBoardItemId:i,action:"status_changed",actorId:null,data:{from:f.status,to:"done"}});return u6(t,h),{status:h.status,merged:!0}}})});var XI0=O(()=>{BI0();UI0();TI0();AI0();Flu();kI0();jI0();Wg()});import{z as p2}from"zod";var Alu;var JI0=O(()=>{uu();Alu=p({name:"TAGS_LIST",description:"List all tags available in the organization.",annotations:{title:"List Tags",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:p2.object({}),outputSchema:p2.object({tags:p2.array(p2.object({id:p2.string(),organizationId:p2.string(),name:p2.string(),color:p2.string().nullable(),createdAt:p2.string().describe("ISO 8601 timestamp")}))}),handler:async(i,u)=>{gi(u),await u.access.check();let t=Bi(u);return{tags:(await u.storage.tags.listOrgTags(t.id)).map((l)=>({...l,createdAt:l.createdAt instanceof Date?l.createdAt.toISOString():String(l.createdAt)}))}}})});import{z as Id}from"zod";var Plu;var KI0=O(()=>{uu();Plu=p({name:"TAGS_CREATE",description:"Create a new tag, usable on organization members and task board items.",annotations:{title:"Create Tag",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:Id.object({name:Id.string().min(1).max(50).describe("Tag name"),color:Id.string().regex(/^#[0-9a-fA-F]{6}$/).nullable().optional().describe('Hex color the tag renders its dot with, e.g. "#3b82f6"')}),outputSchema:Id.object({tag:Id.object({id:Id.string(),organizationId:Id.string(),name:Id.string(),color:Id.string().nullable(),createdAt:Id.string().describe("ISO 8601 timestamp")})}),handler:async(i,u)=>{gi(u),await u.access.check();let t=Bi(u),f=await u.storage.tags.createTag(t.id,i.name,i.color);return{tag:{...f,createdAt:f.createdAt instanceof Date?f.createdAt.toISOString():String(f.createdAt)}}}})});import{z as Hvi}from"zod";var ylu;var YI0=O(()=>{uu();ylu=p({name:"TAGS_DELETE",description:"Delete a tag and automatically remove it from all assigned members.",annotations:{title:"Delete Tag",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:Hvi.object({tagId:Hvi.string().describe("Tag ID to delete")}),outputSchema:Hvi.object({success:Hvi.boolean()}),handler:async(i,u)=>{gi(u),await u.access.check();let t=Bi(u),f=await u.storage.tags.getTag(i.tagId);if(!f)throw Error("Tag not found");if(f.organizationId!==t.id)throw Error("Tag does not belong to this organization");return await u.storage.tags.deleteTag(i.tagId),{success:!0}}})});import{z as xd}from"zod";var Glu;var WI0=O(()=>{uu();Glu=p({name:"MEMBER_TAGS_GET",description:"Get all tags currently assigned to a specific member.",annotations:{title:"Get Member Tags",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:xd.object({memberId:xd.string().describe("Member ID")}),outputSchema:xd.object({tags:xd.array(xd.object({id:xd.string(),organizationId:xd.string(),name:xd.string(),color:xd.string().nullable(),createdAt:xd.string().describe("ISO 8601 timestamp")}))}),handler:async(i,u)=>{gi(u),await u.access.check();let t=Bi(u);if(!await u.storage.tags.verifyMemberOrg(i.memberId,t.id))throw Error(`Member not found in this organization: ${i.memberId}`);return{tags:(await u.storage.tags.getMemberTags(i.memberId)).map((E)=>({...E,createdAt:E.createdAt instanceof Date?E.createdAt.toISOString():String(E.createdAt)}))}}})});import{z as M5}from"zod";var Ilu;var LI0=O(()=>{uu();Ilu=p({name:"MEMBER_TAGS_SET",description:"Replace all tags on a member with the given set. Pass empty array to clear.",annotations:{title:"Set Member Tags",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:M5.object({memberId:M5.string().describe("Member ID"),tagIds:M5.array(M5.string()).describe("Array of tag IDs to assign")}),outputSchema:M5.object({success:M5.boolean(),tags:M5.array(M5.object({id:M5.string(),organizationId:M5.string(),name:M5.string(),createdAt:M5.string().describe("ISO 8601 timestamp")}))}),handler:async(i,u)=>{gi(u),await u.access.check();let t=Bi(u);if(!await u.storage.tags.verifyMemberOrg(i.memberId,t.id))throw Error(`Member not found in this organization: ${i.memberId}`);for(let E of i.tagIds){let c=await u.storage.tags.getTag(E);if(!c)throw Error(`Tag not found: ${E}`);if(c.organizationId!==t.id)throw Error(`Tag does not belong to this organization: ${E}`)}return await u.storage.tags.setMemberTags(i.memberId,i.tagIds),{success:!0,tags:(await u.storage.tags.getMemberTags(i.memberId)).map((E)=>({...E,createdAt:E.createdAt instanceof Date?E.createdAt.toISOString():String(E.createdAt)}))}}})});var SI0=O(()=>{JI0();KI0();YI0();WI0();LI0()});function q5(i,u=Date.now()){let t=i.status;if(t==="in_progress"){let f=new Date(i.updated_at).getTime(),l=i.last_progress_at?new Date(i.last_progress_at).getTime():Number.NaN,E=Math.max(Number.isFinite(f)?f:Number.NEGATIVE_INFINITY,Number.isFinite(l)?l:Number.NEGATIVE_INFINITY);if(!Number.isFinite(E)||u-E>1800000)t="expired"}return{id:i.id,organization_id:i.organization_id,title:i.title,description:i.description,created_at:i.created_at,updated_at:i.updated_at,created_by:i.created_by,updated_by:i.updated_by,hidden:i.hidden??!1,status:t,virtual_mcp_id:i.virtual_mcp_id||void 0,trigger_id:i.trigger_id,branch:i.branch,sandbox_provider_kind:i.sandbox_provider_kind,harness_id:i.harness_id,metadata:i.metadata&&Object.keys(i.metadata).length>0?i.metadata:void 0,run_config:i.run_config}}var xlu;var QI0=O(()=>{xlu=["in_progress","requires_action","failed","completed"]});import{z as S0}from"zod";var HI0,Mzf,zI0,kd,RI0,nI0;var Lg=O(()=>{QI0();HI0=S0.object({id:S0.string().describe("Unique message ID"),thread_id:S0.string().describe("ID of the parent thread"),metadata:S0.unknown().optional().describe("Optional message metadata"),parts:S0.array(S0.record(S0.string(),S0.unknown())).describe("Message content parts (AI SDK UIMessagePart format)"),role:S0.enum(["user","assistant","system"]).describe("Message role"),created_at:S0.string().datetime().describe("Timestamp of creation"),updated_at:S0.string().datetime().describe("Timestamp of last update")}),Mzf=S0.object({toolName:S0.string().describe("Fully qualified tool name"),appId:S0.string().describe("App ID that owns the tool"),args:S0.record(S0.string(),S0.unknown()).describe("Arguments used when expanding the tool"),expandedAt:S0.string().datetime().describe("When the tool was expanded")}),zI0=S0.object({expanded_tools:S0.array(Mzf).optional()}).catchall(S0.unknown()),kd=S0.object({id:S0.string().describe("Unique thread ID"),organization_id:S0.string().describe("Organization this thread belongs to"),title:S0.string().describe("Thread title"),description:S0.string().nullable().describe("Thread description"),created_at:S0.string().datetime().describe("Timestamp of creation"),updated_at:S0.string().datetime().describe("Timestamp of last update"),hidden:S0.boolean().optional().describe("Whether the thread is hidden"),status:S0.enum([...xlu,"expired"]).describe("Thread execution status. 'expired' is virtual -- computed at read time for stale in_progress threads"),created_by:S0.string().describe("User ID who created the thread"),updated_by:S0.string().optional().describe("User ID who last updated the thread"),virtual_mcp_id:S0.string().optional().describe("Virtual MCP (agent) this thread was initiated with"),trigger_id:S0.string().nullable().optional().describe("Automation trigger that created this thread; null/absent for human-initiated threads."),branch:S0.string().nullable().optional().describe("Git branch this thread is pinned to (GitHub-linked vms only)"),sandbox_provider_kind:S0.string().nullable().optional().describe("Pinned on first message; identifies which sandbox provider to dispatch to (e.g. 'agent-sandbox', 'user-desktop')."),harness_id:S0.string().nullable().optional().describe("Pinned on first message; selects which harness runs the thread (e.g. 'claude-code', 'codex', 'decopilot')."),metadata:zI0.optional().describe("Free-form per-thread UI state (e.g. expanded_tools)"),run_config:S0.record(S0.string(),S0.unknown()).nullable().optional().describe("Persisted run configuration (contains agent and model info)")}),RI0=S0.object({id:S0.string().optional().describe("Optional custom ID for the thread"),title:S0.string().optional().describe("Thread title"),description:S0.string().nullish().describe("Thread description"),virtual_mcp_id:S0.string().describe("Virtual MCP (agent) this thread is bound to"),branch:S0.string().min(1).optional().describe("Preferred branch. Used only when the vMCP has a githubRepo; ignored otherwise. When omitted, the server picks the most-recently-touched branch from the user's sandboxMap, falling back to a freshly generated name.")}),nI0=S0.object({title:S0.string().optional().describe("New thread title"),description:S0.string().nullish().describe("New thread description"),hidden:S0.boolean().optional().describe("Whether the thread is hidden"),status:S0.enum(xlu).optional().describe("New thread status (user-set override). 'expired' is a computed virtual status and cannot be set directly."),metadata:zI0.optional().describe("Full replacement of the thread's metadata object"),branch:S0.string().min(1).nullish().describe("New git branch for this thread"),virtual_mcp_id:S0.string().optional().describe("Re-point the thread at a different agent. Only meaningful for an unsent thread (changing the recipient of a new chat); the UI restricts it accordingly.")})});function qzf(i){return(i??"").normalize("NFKD").replace(/[\u0300-\u036F]/g,"").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||"user"}function zvi(i){return i?.name||i?.email?.split("@")[0]||void 0}function Rvi(i){let u=qzf(i),t=Date.now().toString(36).split("").reverse().join("");return`${u}-${t}`}import{z as bI0}from"zod";function mzf(i,u){let t=i?.[u];if(!t)return;return Object.entries(t).sort(([,l],[,E])=>{let c=Math.max(0,...Object.values(l).map(($)=>$.createdAt??0));return Math.max(0,...Object.values(E).map(($)=>$.createdAt??0))-c})[0]?.[0]}var Vzf,rzf,klu;var CI0=O(()=>{z4();uu();Lg();c3();Vzf=bI0.object({data:RI0.describe("Data for the new thread (id is auto-generated if not provided)")}),rzf=bI0.object({item:kd.describe("The created thread entity")});klu=p({name:"COLLECTION_THREADS_CREATE",description:"Create a new thread for organizing messages and conversations.",annotations:{title:"Create Thread",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:Vzf,outputSchema:rzf,handler:async(i,u)=>{gi(u);let t=Bi(u);await u.access.check();let f=Yu(u);if(!f)throw Error("User ID required to create thread");let{data:l}=i,E=l.id??Df("thrd"),c=await u.storage.virtualMcps.findById(l.virtual_mcp_id,t.id);if(!c||c.organization_id!==t.id)throw Error(`Virtual MCP not found: ${l.virtual_mcp_id}`);let w=c.metadata,$=w?.githubRepo,h=null;if($)h=l.branch??mzf(w?.sandboxMap,f)??Rvi(zvi(u.auth.user));let v=await u.storage.threads.create({id:E,organization_id:t.id,title:l.title,description:l.description,virtual_mcp_id:l.virtual_mcp_id,branch:h,created_by:f});if(v.isNew)mu.capture({distinctId:f,event:"chat_started",groups:{organization:t.id},properties:{organization_id:t.id,thread_id:E,has_title:!!i.data.title,created_via:"tool"}});return{item:q5(v)}}})});import{z as k$}from"zod";var ezf,azf,Sg;var jlu=O(()=>{z5();uu();Lg();ezf=Tv.extend({where:k$.object({created_by:k$.string().optional(),trigger_ids:k$.array(k$.string()).optional(),virtual_mcp_id:k$.string().optional(),hidden:k$.boolean().optional(),has_trigger:k$.boolean().optional()}).optional(),startDate:k$.string().datetime().optional().describe("Filter threads updated at or after this ISO timestamp"),endDate:k$.string().datetime().optional().describe("Filter threads updated at or before this ISO timestamp"),search:k$.string().optional().describe("Full-text search on thread title (case-insensitive)"),status:k$.string().optional().describe("Filter by thread status (e.g. completed, failed, in_progress)"),userId:k$.string().optional().describe("Filter by the user who created the thread"),agentId:k$.string().optional().describe("Filter by agent (connection or virtual MCP) ID")}),azf=b2(kd),Sg=p({name:"COLLECTION_THREADS_LIST",description:"List threads with filtering, sorting, and pagination.",annotations:{title:"List Threads",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:ezf,outputSchema:azf,handler:async(i,u)=>{await u.access.check();let t=u.auth.user?.id;if(!t)throw Error("User ID required to list threads");Bi(u);let f=i.offset??0,l=i.limit??100,E=i.where?.trigger_ids,c=i.where?.virtual_mcp_id,w=i.userId??(i.where?.created_by==="me"?t:i.where?.created_by),{threads:$,total:h}=E?.length?await u.storage.threads.listByTriggerIds(E,{limit:l,offset:f}):await u.storage.threads.list(w,{limit:l,offset:f,virtualMcpId:c,startDate:i.startDate,endDate:i.endDate,search:i.search,status:i.status,agentId:i.agentId,includeArchived:i.where?.hidden,hasTrigger:i.where?.has_trigger}),v=f+l<h,d=Date.now();return{items:$.map((D)=>q5(D,d)),totalCount:h,hasMore:v}}})});var ozf,Qg;var Xlu=O(()=>{z5();uu();Lg();ozf=oa(kd),Qg=p({name:"COLLECTION_THREADS_GET",description:"Get a thread's details and metadata by ID.",annotations:{title:"Get Thread",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:aa,outputSchema:ozf,handler:async(i,u)=>{gi(u),Bi(u),await u.access.check();let t=await u.storage.threads.get(i.id);if(!t)return{item:null};return{item:q5(t)}}})});import{z as Jlu}from"zod";var szf,pzf,Klu;var MI0=O(()=>{z4();uu();Lg();szf=Jlu.object({id:Jlu.string().describe("ID of the thread to update"),data:nI0.describe("Partial thread data to update")}),pzf=Jlu.object({item:kd.describe("The updated thread entity")}),Klu=p({name:"COLLECTION_THREADS_UPDATE",description:"Update a thread's title, description, or visibility.",annotations:{title:"Update Thread",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:szf,outputSchema:pzf,handler:async(i,u)=>{gi(u);let t=Bi(u);await u.access.check();let f=Yu(u);if(!f)throw Error("User ID required to update thread");let{id:l,data:E}=i,c=await u.storage.threads.get(l);if(!c)throw Error("Thread not found in organization");if(E.virtual_mcp_id!==void 0){let h=await u.storage.virtualMcps.findById(E.virtual_mcp_id,t.id);if(!h||h.organization_id!==t.id)throw Error(`Virtual MCP not found: ${E.virtual_mcp_id}`)}if(E.branch===null&&c.virtual_mcp_id){if((await u.storage.virtualMcps.findById(c.virtual_mcp_id,Bi(u).id))?.metadata?.githubRepo)throw Error("Cannot set branch=null on a github-linked thread (vMCP has githubRepo)")}let w={title:E.title,description:E.description,hidden:E.hidden,updated_by:f};if(E.status)w.status=E.status;if(E.metadata!==void 0)w.metadata=E.metadata;if(E.branch!==void 0)w.branch=E.branch;if(E.virtual_mcp_id!==void 0)w.virtual_mcp_id=E.virtual_mcp_id;let $=await u.storage.threads.update(l,w);if(E.hidden!==void 0&&E.hidden!==c.hidden)mu.capture({distinctId:f,event:E.hidden?"chat_archived":"chat_unarchived",groups:{organization:t.id},properties:{organization_id:t.id,thread_id:l}});return{item:q5($)}}})});var Ylu;var qI0=O(()=>{z5();Lg();z4();uu();Ylu=p({name:"COLLECTION_THREADS_DELETE",description:"Permanently delete a thread and all its messages.",annotations:{title:"Delete Thread",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:sa,outputSchema:pa(kd),handler:async(i,u)=>{gi(u);let t=Bi(u);await u.access.check();let f=await u.storage.threads.get(i.id);if(!f)throw Error(`Thread not found: ${i.id}`);await u.storage.threads.delete(i.id);let l=Yu(u);if(l)mu.capture({distinctId:l,event:"chat_deleted",groups:{organization:t.id},properties:{organization_id:t.id,thread_id:i.id}});return{item:q5(f)}}})});import{z as iRf}from"zod";function VI0(i){if(!i)return null;if("field"in i&&i.field[0]==="thread_id"&&i.operator==="eq")return String(i.value);if("conditions"in i&&(i.operator==="and"||i.operator==="or"))for(let u of i.conditions){let t=VI0(u);if(t)return t}return null}var uRf,tRf,Hg;var Wlu=O(()=>{z5();uu();Lg();uRf=Tv.extend({thread_id:iRf.string().optional().describe("ID of the thread to list messages for (required)")}),tRf=b2(HI0),Hg=p({name:"COLLECTION_THREAD_MESSAGES_LIST",description:"List messages in a thread with pagination. Requires thread_id. Returns messages in chronological order.",annotations:{title:"List Thread Messages",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:uRf,outputSchema:tRf,handler:async(i,u)=>{Bi(u),await u.access.check();let t=i.thread_id??VI0(i.where);if(!t)throw Error("thread_id is required (provide as top-level param or in where clause)");let f=i.offset??0,l=i.limit??100,E=i.orderBy?.[0]?.direction??"asc",c=await u.storage.threads.get(t);if(!c)return{items:[],totalCount:0,hasMore:!1};if(c.message_storage_version===2){let{messages:v,total:d}=await u.storage.threads.messageParts().loadWindow(t,{limit:l,offset:f});return{items:v.map((D)=>({id:D.id,thread_id:t,role:D.role,parts:D.parts,metadata:D.metadata??null,created_at:D.created_at,updated_at:D.created_at})),totalCount:d,hasMore:f+l<d}}let{messages:w,total:$}=await u.storage.threads.listMessages(t,{limit:l,offset:f,sort:E}),h=f+l<$;return{items:w,totalCount:$,hasMore:h}}})});function rI0(i){return i!==null}function nvi(i,u){if(i===null)return!0;return i===u}import{z as mI0}from"zod";function i7(i){return i==="cluster"?"agent-sandbox":i}function Slu(i){return`${i.userId}:${i.projectRef}`}var Llu,fRf;var bvi=O(()=>{Llu=mI0.enum(["ts","go"]),fRf=mI0.enum(["agent-sandbox","user-desktop"])});class Cvi{map=new Map;async run(i,u){let t=this.map.get(i);if(t)return t;let f=u();this.map.set(i,f);try{return await f}finally{this.map.delete(i)}}}function Mvi(i,u,t,f){if(!i)return f(null);if(!i.withLock)return f(i);return i.withLock(u,t,f)}import{createHash as lRf}from"crypto";function cRf(i,u=16){return lRf("sha256").update(Slu(i)).digest("hex").slice(0,u)}function VN(i,u){let t=cRf(i),f=wRf(u);return f?`${f}-${t}`:`s-${t}`}function wRf(i){if(!i)return"";return(i.split("/").pop()??"").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,ERf).replace(/-+$/g,"")}var ERf=24;var eI0=O(()=>{bvi()});function qvi(i,u){let t=i.replace(/\/+$/,"");if(t.includes("{handle}"))return`${t.replace("{handle}",u)}/`;try{let f=new URL(t);return f.hostname=`${u}.${f.hostname}`,`${f.toString()}/`}catch{return`${t}/${u}/`}}function Qlu(i){let u=i.repo,t=u?{repository:{cloneUrl:u.cloneUrl,repoName:u.displayName??$Rf(u.cloneUrl),...u.branch?{branch:u.branch}:{},...u.submoduleCredentials&&u.submoduleCredentials.length>0?{submoduleCredentials:u.submoduleCredentials}:{}},identity:{userName:u.userName,userEmail:u.userEmail}}:void 0,f=i.tenant,l=Uh({userName:f?.userName,userEmail:f?.userEmail})??void 0,E=i.packageManager?{name:i.packageManager.name,...i.packageManager.path?{path:i.packageManager.path}:{}}:void 0,c=E?{packageManager:E,runtime:i.runtime,...i.port!==void 0?{port:i.port}:{}}:void 0;if(!t&&!c&&!l)return null;return{...t?{git:t}:{},...l?{operator:l}:{},...c?{application:c}:{}}}function $Rf(i){try{let u=new URL(i);return u.pathname.replace(/^\/+/,"").replace(/\.git$/,"")||u.hostname}catch{return i}}var aI0=O(()=>{vli()});function hRf(i){try{return new URL(i).username.length>0}catch{return!1}}function Hlu(i){let u=i.repo?.cloneUrl;if(!u||!hRf(u))return null;return{git:{repository:{cloneUrl:u}}}}var Vvi=O(()=>{eI0();aI0()});function zg(i){if("threadId"in i){if(!i.threadId)throw Error("composeSandboxRef: threadId required");return`thread:${i.threadId}`}if(!i.orgId||!i.virtualMcpId||!i.branch)throw Error("composeSandboxRef: orgId, virtualMcpId and branch are all required for agent refs");return`agent:${i.orgId}:${i.virtualMcpId}:${i.branch}`}function vRf(i){return(typeof i.timeout==="number"&&i.timeout>0?Math.min(i.timeout,120000):30000)+15000}function dRf(i,u){if(i.aborted)return u.catch(()=>{}),Promise.reject(i.reason??Error("aborted"));return new Promise((t,f)=>{let l=()=>{u.catch(()=>{}),f(i.reason??Error("aborted"))};i.addEventListener("abort",l,{once:!0}),u.then(t,f).finally(()=>{i.removeEventListener("abort",l)})})}async function DRf(i,u,t,f,l="POST",E){let c=E?.timeoutMs??vRf(f??{}),w=AbortSignal.timeout(c),$=E?.signal?AbortSignal.any([E.signal,w]):w,h,v;try{let D={method:l,headers:new Headers({"content-type":"application/json"}),body:null,signal:$};if(l!=="GET"&&f!==null)D.body=JSON.stringify(f);({res:h,rawText:v}=await dRf($,(async()=>{let _=await i.proxyDaemonRequest(u,t,D);return{res:_,rawText:await _.text()}})()))}catch(D){if(E?.signal?.aborted)throw D;if(w.aborted)throw Error(`Sandbox ${l} ${t} timed out after ${Math.round(c/1000)}s \u2014 the sandbox may be overloaded or its filesystem stalled. Retry, or use a smaller operation.`);throw new Wo(D)}let d;try{d=JSON.parse(v)}catch{console.error("[sandbox-fs-hooks] Failed to parse JSON response runner=%s path=%s status=%d rawText=%s",i.kind,t,h.status,v.slice(0,2000));let D=h.status>=500?" (server error)":h.status===0?" (no response)":"";throw Error(`Daemon ${t} returned invalid JSON (HTTP ${h.status}${D}): ${v.slice(0,800)}`)}if(!h.ok){console.error("[sandbox-fs-hooks] Non-OK response runner=%s path=%s status=%d body=%s",i.kind,t,h.status,v.slice(0,2000));let D=d.error??`Daemon ${t} failed (${h.status})`;if(h.status===404&&D==="sandbox not found")throw new Wo(Error(D),!0);throw Error(D)}return d}function _Rf(i){let u=[];for(let t of i.split(`
85748
+ `);await jvi(i,u,{title:`${Do[t]}: ${u.title}`,prompt:E,temperature:0.3}),await Gd(i,{taskBoardItemId:u.id,action:"review_requested",actorId:null,data:{reviewer:t}});let c=await i.storage.taskBoard.getById(u.id,l);if(c)u6(l,c)}var xzf,kzf;var Nlu=O(()=>{m2();Wg();yw();llu();xzf=new Set(["completed","failed","expired"]),kzf={qa:"You are the QA Agent. Your job is to confirm the task ACTUALLY SOLVED THE "+"PROBLEM \u2014 not to review code style. Exercise the feature/behavior the task "+"describes (use the PR's preview / dev server when available), check the acceptance criteria implied by the title and description, and look for regressions in the affected flow. Judge outcomes, not the diff.",code_review:"You are the Code Reviewer. Review the code changes for correctness, security, and quality. FIRST look for a review skill/command appropriate to this repository's stack (e.g. a `/review`, `code-review`, or `security-review` skill, or the repo's CONTRIBUTING/review guidelines) and use it. Read the diff critically and flag concrete issues with file/line references."}});import{z as Kvi}from"zod";async function Wvi(i,u,t,f){if(t){let c=await i.storage.connections.findById(t,u);if(c&&c.status==="active")return c}let{items:l}=await i.storage.connections.list(u,{slug:"mcp-github"}),E=l.filter((c)=>c.status==="active");if(f){let c=E.find((w)=>{let $=Z3(w);return $?.owner===f.owner&&$?.repo===f.name});if(c)return c}return E.find((c)=>Z3(c)===null)??E[0]??null}function Lvi(i){if(!i||typeof i!=="object")return null;let u=i;if(u.isError)return null;if(u.structuredContent&&typeof u.structuredContent==="object"&&Object.keys(u.structuredContent).length>0)return u.structuredContent;let t=u.content?.find((f)=>f.type==="text")?.text;if(!t)return null;try{return JSON.parse(t)}catch{return null}}function Zlu(i){let u;try{u=new URL(i).hostname.toLowerCase()}catch{return!1}return u==="deco.site"||u.endsWith(".decocdn.com")||u.endsWith(".deco-cx.workers.dev")||u.endsWith(".deco.site")}function Kzf(i){if(!i||!Array.isArray(i.statuses))return null;let u=i.statuses.map((t)=>t&&typeof t==="object"?t:null).filter((t)=>!!t&&typeof t.target_url==="string"&&Zlu(t.target_url));if(u.length===0)return null;return u.find((t)=>t.state==="success")?.target_url??u[0].target_url}function Yzf(i){let u=Array.isArray(i)?i:Array.isArray(i?.comments)?i.comments:Array.isArray(i?.items)?i.items:[];for(let t of u){let f=t&&typeof t.body==="string"?t.body:"";if(!f)continue;let l=f.match(/href=['"]([^'"]+)['"][^>]*>\s*Branch Preview/i);if(l?.[1]&&Zlu(l[1]))return l[1];let E=(f.match(/https?:\/\/[^\s"'<>)\]]+/g)??[]).find((c)=>Zlu(c));if(E)return E}return null}function PI0(i){if(!i)return null;if((typeof i.total_count==="number"?i.total_count:null)===0)return null;switch(i.state){case"success":return"passing";case"failure":case"error":return"failing";case"pending":return"pending";default:return null}}function GI0(i){let u=Array.isArray(i)?i:Array.isArray(i?.check_runs)?i.check_runs:[];if(u.length===0)return null;let t=!1,f=!1;for(let l of u){if(!l||typeof l!=="object")continue;let{status:E,conclusion:c}=l;if(E!=="completed")f=!0;else if(typeof c==="string"&&yI0.has(c))t=!0}if(t)return"failing";if(f)return"pending";return"passing"}function II0(i,u){if(i==="failing"||u==="failing")return"failing";if(i==="pending"||u==="pending")return"pending";if(i==="passing"||u==="passing")return"passing";return null}function Wzf(i){let u=Array.isArray(i)?i:Array.isArray(i?.check_runs)?i.check_runs:[],t=[];for(let f of u){if(!f||typeof f!=="object")continue;let l=f;t.push({id:typeof l.id==="number"?l.id:null,name:typeof l.name==="string"?l.name:"",status:typeof l.status==="string"?l.status:"completed",conclusion:typeof l.conclusion==="string"?l.conclusion:null,detailsUrl:typeof l.html_url==="string"?l.html_url:typeof l.details_url==="string"?l.details_url:null})}return t}function Lzf(i){return i.status==="completed"&&i.conclusion!=null&&yI0.has(i.conclusion)}async function Szf(i,u,t){try{let l=Lvi(await i.callTool({name:"GET_CHECK_RUN",arguments:{owner:u.repoOwner,repo:u.repoName,checkRunId:t}},void 0,{timeout:Yvi}))?.output,E=typeof l?.summary==="string"?l.summary:null,c=typeof l?.text==="string"?l.text:null;return E??c??null}catch{return null}}async function xI0(i,u,t){let f=await Wvi(i,u,t.connectionId,{owner:t.repoOwner,name:t.repoName});if(!f)return null;let l=await Nl(f,i,!0),E=async(c)=>Lvi(await l.callTool({name:"pull_request_read",arguments:{method:c,owner:t.repoOwner,repo:t.repoName,pullNumber:t.number}},void 0,{timeout:Yvi}));try{let c=null;try{c=PI0(await E("get_status"))}catch{}try{c=II0(c,GI0(await E("get_check_runs")))}catch{}return c}finally{await l.close().catch(()=>{})}}async function Qzf(i,u){let t=async(h)=>{try{return Lvi(await i.callTool({name:"pull_request_read",arguments:{method:h,owner:u.repoOwner,repo:u.repoName,pullNumber:u.number}},void 0,{timeout:Yvi}))}catch{return null}},[f,l,E]=await Promise.all([t("get_status"),t("get_check_runs"),t("get_comments")]),c=II0(PI0(f),GI0(l)),w=Kzf(f)??Yzf(E),$=await Promise.all(Wzf(l).map(async(h)=>({name:h.name,status:h.status,conclusion:h.conclusion,detailsUrl:h.detailsUrl,summary:Lzf(h)&&h.id!=null?await Szf(i,u,h.id):null})));return{checksStatus:c,checks:$,previewUrl:w}}async function Hzf(i,u,t){let f=await Wvi(i,u,t.connectionId,{owner:t.repoOwner,name:t.repoName});if(!f)return Olu;let l=await Nl(f,i,!0);try{let[E,c]=await Promise.all([l.callTool({name:"pull_request_read",arguments:{method:"get",owner:t.repoOwner,repo:t.repoName,pullNumber:t.number}},void 0,{timeout:Yvi}),Qzf(l,t)]),w=Lvi(E);if(!w)return Olu;let $=w.state,h=$==="open";return{title:typeof w.title==="string"?w.title:null,body:typeof w.body==="string"?w.body:null,state:$==="closed"?"closed":h?"open":null,draft:typeof w.draft==="boolean"?w.draft:null,merged:typeof w.merged==="boolean"?w.merged:null,checksStatus:h?c.checksStatus:null,checks:h?c.checks:[],previewUrl:h?c.previewUrl:null}}catch{return Olu}finally{await l.close().catch(()=>{})}}var Yvi=8000,Olu,yI0,Blu;var Flu=O(()=>{uu();n2();H2();m2();Fd();yw();Nlu();m1u();Olu={title:null,body:null,state:null,draft:null,merged:null,checksStatus:null,checks:[],previewUrl:null};yI0=new Set(["failure","cancelled","timed_out","action_required","startup_failure","stale"]);Blu=p({name:"TASK_BOARD_ITEM_PRS_GET",description:"Get the GitHub pull requests linked to a task board item, each enriched with live state (title, open/closed, draft, merged) fetched from GitHub.",annotations:{title:"Get Task Board Item Pull Requests",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:Kvi.object({taskBoardItemId:Kvi.string()}),outputSchema:Kvi.object({prs:Kvi.array(iT0)}),handler:async({taskBoardItemId:i},u)=>{gi(u),await u.access.check();let t=u.organization?.id;if(!t)throw Error("Organization ID required (no active organization in context)");let f=await u.storage.taskBoard.getById(i,t);for(let $ of f?.threads??[]){let h=$.lastMessage?Gvi($.lastMessage):null;if(!h)continue;try{await u.storage.taskBoard.linkPr({taskBoardItemId:i,organizationId:t,url:h.url,prNumber:h.number,repoOwner:h.owner,repoName:h.repo,connectionId:null})}catch(v){console.error("[task-board] PR recovery from thread text failed",v)}}let l=await u.storage.taskBoard.listPrs(i,t),E=await Promise.all(l.map(async($)=>{let h=await Hzf(u,t,$);return{url:$.url,number:$.number,repoOwner:$.repoOwner,repoName:$.repoName,createdAt:$.createdAt,...h}})),c=E.find(($)=>$.state==="open"&&!$.merged),w=c!=null&&c.checksStatus!=="pending"&&c.checksStatus!=="failing";if(f&&f.status==="in_review"&&f.assigneeId===LE&&w)await _lu(u,f).catch(($)=>{console.error("[task-board] reviewer auto-handoff failed",$)});if(E.some(($)=>$.merged))try{if(f&&f.status!=="done"){let $=await u.storage.taskBoard.update(i,t,{status:"done"},f.updatedBy);u6(t,$)}}catch($){console.error("[task-board] merge\u2192done reconcile failed",$)}return{prs:E}}})});async function Svi(i,u,t){let l=(await i.storage.taskBoard.listPrs(t,u))[0];if(!l)return!1;let E=await xI0(i,u,l);if(E==="failing"||E==="pending")return console.warn(`[task-board] merge blocked \u2014 checks ${E} on PR #${l.number}`),!1;let c=await Wvi(i,u,l.connectionId,{owner:l.repoOwner,name:l.repoName});if(!c)return!1;let w=await Nl(c,i,!0);try{return!(await w.callTool({name:"merge_pull_request",arguments:{owner:l.repoOwner,repo:l.repoName,pullNumber:l.number}},void 0,{timeout:zzf}))?.isError}catch($){return console.error("[task-board] merge PR failed",$),!1}finally{await w.close().catch(()=>{})}}var zzf=15000;var glu=O(()=>{n2();Flu()});import{z as qN}from"zod";async function Rzf(i,u,t){let l=(await i.storage.organizationSettings.get(u))?.flags??{},E=iR.filter((w)=>l[uR[w]]===!0),c=await i.storage.taskBoard.listActivity(t,u);return bhi(c,E,{verifiedOnly:!0})}var Ulu;var kI0=O(()=>{uu();m2();Fd();Wg();yw();Yo();glu();Ulu=p({name:"TASK_BOARD_REVIEW_DECISION",description:"Record a reviewer's decision for a task under review. `approve` marks the pull request approved by that reviewer (and, once EVERY enabled reviewer has approved, merges it when the org enabled auto-merge, advancing the task to Done); `request_changes` hands the task back to the Super Agent with your notes so it can fix the PR.",annotations:{title:"Review Decision",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!0},inputSchema:qN.object({taskBoardItemId:qN.string(),reviewer:qN.enum(["qa","code_review"]).describe("Which reviewer you are: `qa` (QA Agent) or `code_review` (Code Reviewer)."),reviewToken:qN.string().optional().describe("The reviewToken from your prompt \u2014 proves you are this reviewer. "+"Pass it through exactly; an approval without a valid token is recorded but does NOT count toward an automatic merge."),decision:qN.enum(["approve","request_changes"]),notes:qN.string().min(1).describe("For approve: a short summary of what you verified. For request_changes: specific, actionable feedback the Super Agent must address.")}),outputSchema:qN.object({status:e2,merged:qN.boolean().describe("True when this approval completed the review and merged the PR.")}),handler:async({taskBoardItemId:i,reviewer:u,reviewToken:t,decision:f,notes:l},E)=>{gi(E),await E.access.check();let c=E.organization?.id;if(!c)throw Error("Organization ID required (no active organization in context)");let w=await E.storage.taskBoard.getById(i,c);if(!w)throw Error(`Task board item not found: ${i}`);let h=(t?await E.storage.taskBoard.resolveReviewClaimByToken(i,t):null)?.reviewer===u;if(f==="request_changes"){let Z=await E.storage.taskBoard.update(i,c,{status:"in_progress"},w.updatedBy);await Gd(E,{taskBoardItemId:i,action:"review_changes_requested",actorId:null,data:{reviewer:u,notes:l,verified:h}}),u6(c,Z);let F=(await E.storage.taskBoard.listPrs(i,c))[0];return await Elu(E,Z,{feedback:`${Do[u]}: ${l}`,pr:F?{number:F.number,url:F.url}:void 0}),{status:Z.status,merged:!1}}if(await Gd(E,{taskBoardItemId:i,action:"review_approved",actorId:null,data:{reviewer:u,notes:l,verified:h}}),!await Rzf(E,c,i)){let Z=await E.storage.taskBoard.getById(i,c)??w;return u6(c,Z),{status:Z.status,merged:!1}}let _=(await E.storage.organizationSettings.get(c))?.flags?.auto_merge===!0?await Svi(E,c,i):!1,N=_?await E.storage.taskBoard.update(i,c,{status:"done"},w.updatedBy):await E.storage.taskBoard.getById(i,c)??w;if(_)await Gd(E,{taskBoardItemId:i,action:"status_changed",actorId:null,data:{from:w.status,to:"done"}});return u6(c,N),{status:N.status,merged:_}}})});import{z as Qvi}from"zod";function nzf(i,u,t){if(i!=="in_review")return!1;return t.length===0||bhi(u,t)}var Tlu;var jI0=O(()=>{uu();m2();Fd();Wg();yw();glu();Tlu=p({name:"TASK_BOARD_PROMOTE_TO_PRODUCTION",description:"Ship a reviewed task: merge its open pull request and move the task to Done. Used by the board's 'Ship to production' button after the enabled reviewers approved, when auto-merge is off (a human does the final merge).",annotations:{title:"Ship to Production",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!0},inputSchema:Qvi.object({taskBoardItemId:Qvi.string()}),outputSchema:Qvi.object({status:e2,merged:Qvi.boolean().describe("True when the PR was merged.")}),handler:async({taskBoardItemId:i},u)=>{gi(u),await u.access.check();let t=u.organization?.id;if(!t)throw Error("Organization ID required (no active organization in context)");let f=await u.storage.taskBoard.getById(i,t);if(!f)throw Error(`Task board item not found: ${i}`);let E=(await u.storage.organizationSettings.get(t))?.flags??{},c=iR.filter((v)=>E[uR[v]]===!0),w=await u.storage.taskBoard.listActivity(i,t);if(!nzf(f.status,w,c))throw Error("Task is not ready to ship: it must be In Review with every enabled reviewer approved");if(!await Svi(u,t,i))return{status:f.status,merged:!1};let h=await u.storage.taskBoard.update(i,t,{status:"done"},f.updatedBy);if(f.status!=="done")await Gd(u,{taskBoardItemId:i,action:"status_changed",actorId:null,data:{from:f.status,to:"done"}});return u6(t,h),{status:h.status,merged:!0}}})});var XI0=O(()=>{BI0();UI0();TI0();AI0();Flu();kI0();jI0();Wg()});import{z as p2}from"zod";var Alu;var JI0=O(()=>{uu();Alu=p({name:"TAGS_LIST",description:"List all tags available in the organization.",annotations:{title:"List Tags",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:p2.object({}),outputSchema:p2.object({tags:p2.array(p2.object({id:p2.string(),organizationId:p2.string(),name:p2.string(),color:p2.string().nullable(),createdAt:p2.string().describe("ISO 8601 timestamp")}))}),handler:async(i,u)=>{gi(u),await u.access.check();let t=Bi(u);return{tags:(await u.storage.tags.listOrgTags(t.id)).map((l)=>({...l,createdAt:l.createdAt instanceof Date?l.createdAt.toISOString():String(l.createdAt)}))}}})});import{z as Id}from"zod";var Plu;var KI0=O(()=>{uu();Plu=p({name:"TAGS_CREATE",description:"Create a new tag, usable on organization members and task board items.",annotations:{title:"Create Tag",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:Id.object({name:Id.string().min(1).max(50).describe("Tag name"),color:Id.string().regex(/^#[0-9a-fA-F]{6}$/).nullable().optional().describe('Hex color the tag renders its dot with, e.g. "#3b82f6"')}),outputSchema:Id.object({tag:Id.object({id:Id.string(),organizationId:Id.string(),name:Id.string(),color:Id.string().nullable(),createdAt:Id.string().describe("ISO 8601 timestamp")})}),handler:async(i,u)=>{gi(u),await u.access.check();let t=Bi(u),f=await u.storage.tags.createTag(t.id,i.name,i.color);return{tag:{...f,createdAt:f.createdAt instanceof Date?f.createdAt.toISOString():String(f.createdAt)}}}})});import{z as Hvi}from"zod";var ylu;var YI0=O(()=>{uu();ylu=p({name:"TAGS_DELETE",description:"Delete a tag and automatically remove it from all assigned members.",annotations:{title:"Delete Tag",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:Hvi.object({tagId:Hvi.string().describe("Tag ID to delete")}),outputSchema:Hvi.object({success:Hvi.boolean()}),handler:async(i,u)=>{gi(u),await u.access.check();let t=Bi(u),f=await u.storage.tags.getTag(i.tagId);if(!f)throw Error("Tag not found");if(f.organizationId!==t.id)throw Error("Tag does not belong to this organization");return await u.storage.tags.deleteTag(i.tagId),{success:!0}}})});import{z as xd}from"zod";var Glu;var WI0=O(()=>{uu();Glu=p({name:"MEMBER_TAGS_GET",description:"Get all tags currently assigned to a specific member.",annotations:{title:"Get Member Tags",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:xd.object({memberId:xd.string().describe("Member ID")}),outputSchema:xd.object({tags:xd.array(xd.object({id:xd.string(),organizationId:xd.string(),name:xd.string(),color:xd.string().nullable(),createdAt:xd.string().describe("ISO 8601 timestamp")}))}),handler:async(i,u)=>{gi(u),await u.access.check();let t=Bi(u);if(!await u.storage.tags.verifyMemberOrg(i.memberId,t.id))throw Error(`Member not found in this organization: ${i.memberId}`);return{tags:(await u.storage.tags.getMemberTags(i.memberId)).map((E)=>({...E,createdAt:E.createdAt instanceof Date?E.createdAt.toISOString():String(E.createdAt)}))}}})});import{z as M5}from"zod";var Ilu;var LI0=O(()=>{uu();Ilu=p({name:"MEMBER_TAGS_SET",description:"Replace all tags on a member with the given set. Pass empty array to clear.",annotations:{title:"Set Member Tags",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:M5.object({memberId:M5.string().describe("Member ID"),tagIds:M5.array(M5.string()).describe("Array of tag IDs to assign")}),outputSchema:M5.object({success:M5.boolean(),tags:M5.array(M5.object({id:M5.string(),organizationId:M5.string(),name:M5.string(),createdAt:M5.string().describe("ISO 8601 timestamp")}))}),handler:async(i,u)=>{gi(u),await u.access.check();let t=Bi(u);if(!await u.storage.tags.verifyMemberOrg(i.memberId,t.id))throw Error(`Member not found in this organization: ${i.memberId}`);for(let E of i.tagIds){let c=await u.storage.tags.getTag(E);if(!c)throw Error(`Tag not found: ${E}`);if(c.organizationId!==t.id)throw Error(`Tag does not belong to this organization: ${E}`)}return await u.storage.tags.setMemberTags(i.memberId,i.tagIds),{success:!0,tags:(await u.storage.tags.getMemberTags(i.memberId)).map((E)=>({...E,createdAt:E.createdAt instanceof Date?E.createdAt.toISOString():String(E.createdAt)}))}}})});var SI0=O(()=>{JI0();KI0();YI0();WI0();LI0()});function q5(i,u=Date.now()){let t=i.status;if(t==="in_progress"){let f=new Date(i.updated_at).getTime(),l=i.last_progress_at?new Date(i.last_progress_at).getTime():Number.NaN,E=Math.max(Number.isFinite(f)?f:Number.NEGATIVE_INFINITY,Number.isFinite(l)?l:Number.NEGATIVE_INFINITY);if(!Number.isFinite(E)||u-E>1800000)t="expired"}return{id:i.id,organization_id:i.organization_id,title:i.title,description:i.description,created_at:i.created_at,updated_at:i.updated_at,created_by:i.created_by,updated_by:i.updated_by,hidden:i.hidden??!1,status:t,virtual_mcp_id:i.virtual_mcp_id||void 0,trigger_id:i.trigger_id,branch:i.branch,sandbox_provider_kind:i.sandbox_provider_kind,harness_id:i.harness_id,metadata:i.metadata&&Object.keys(i.metadata).length>0?i.metadata:void 0,run_config:i.run_config}}var xlu;var QI0=O(()=>{xlu=["in_progress","requires_action","failed","completed"]});import{z as S0}from"zod";var HI0,Mzf,zI0,kd,RI0,nI0;var Lg=O(()=>{QI0();HI0=S0.object({id:S0.string().describe("Unique message ID"),thread_id:S0.string().describe("ID of the parent thread"),metadata:S0.unknown().optional().describe("Optional message metadata"),parts:S0.array(S0.record(S0.string(),S0.unknown())).describe("Message content parts (AI SDK UIMessagePart format)"),role:S0.enum(["user","assistant","system"]).describe("Message role"),created_at:S0.string().datetime().describe("Timestamp of creation"),updated_at:S0.string().datetime().describe("Timestamp of last update")}),Mzf=S0.object({toolName:S0.string().describe("Fully qualified tool name"),appId:S0.string().describe("App ID that owns the tool"),args:S0.record(S0.string(),S0.unknown()).describe("Arguments used when expanding the tool"),expandedAt:S0.string().datetime().describe("When the tool was expanded")}),zI0=S0.object({expanded_tools:S0.array(Mzf).optional()}).catchall(S0.unknown()),kd=S0.object({id:S0.string().describe("Unique thread ID"),organization_id:S0.string().describe("Organization this thread belongs to"),title:S0.string().describe("Thread title"),description:S0.string().nullable().describe("Thread description"),created_at:S0.string().datetime().describe("Timestamp of creation"),updated_at:S0.string().datetime().describe("Timestamp of last update"),hidden:S0.boolean().optional().describe("Whether the thread is hidden"),status:S0.enum([...xlu,"expired"]).describe("Thread execution status. 'expired' is virtual -- computed at read time for stale in_progress threads"),created_by:S0.string().describe("User ID who created the thread"),updated_by:S0.string().optional().describe("User ID who last updated the thread"),virtual_mcp_id:S0.string().optional().describe("Virtual MCP (agent) this thread was initiated with"),trigger_id:S0.string().nullable().optional().describe("Automation trigger that created this thread; null/absent for human-initiated threads."),branch:S0.string().nullable().optional().describe("Git branch this thread is pinned to (GitHub-linked vms only)"),sandbox_provider_kind:S0.string().nullable().optional().describe("Pinned on first message; identifies which sandbox provider to dispatch to (e.g. 'agent-sandbox', 'user-desktop')."),harness_id:S0.string().nullable().optional().describe("Pinned on first message; selects which harness runs the thread (e.g. 'claude-code', 'codex', 'decopilot')."),metadata:zI0.optional().describe("Free-form per-thread UI state (e.g. expanded_tools)"),run_config:S0.record(S0.string(),S0.unknown()).nullable().optional().describe("Persisted run configuration (contains agent and model info)")}),RI0=S0.object({id:S0.string().optional().describe("Optional custom ID for the thread"),title:S0.string().optional().describe("Thread title"),description:S0.string().nullish().describe("Thread description"),virtual_mcp_id:S0.string().describe("Virtual MCP (agent) this thread is bound to"),branch:S0.string().min(1).optional().describe("Preferred branch. Used only when the vMCP has a githubRepo; ignored otherwise. When omitted, the server picks the most-recently-touched branch from the user's sandboxMap, falling back to a freshly generated name.")}),nI0=S0.object({title:S0.string().optional().describe("New thread title"),description:S0.string().nullish().describe("New thread description"),hidden:S0.boolean().optional().describe("Whether the thread is hidden"),status:S0.enum(xlu).optional().describe("New thread status (user-set override). 'expired' is a computed virtual status and cannot be set directly."),metadata:zI0.optional().describe("Full replacement of the thread's metadata object"),branch:S0.string().min(1).nullish().describe("New git branch for this thread"),virtual_mcp_id:S0.string().optional().describe("Re-point the thread at a different agent. Only meaningful for an unsent thread (changing the recipient of a new chat); the UI restricts it accordingly.")})});function qzf(i){return(i??"").normalize("NFKD").replace(/[\u0300-\u036F]/g,"").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||"user"}function zvi(i){return i?.name||i?.email?.split("@")[0]||void 0}function Rvi(i){let u=qzf(i),t=Date.now().toString(36).split("").reverse().join("");return`${u}-${t}`}import{z as bI0}from"zod";function mzf(i,u){let t=i?.[u];if(!t)return;return Object.entries(t).sort(([,l],[,E])=>{let c=Math.max(0,...Object.values(l).map(($)=>$.createdAt??0));return Math.max(0,...Object.values(E).map(($)=>$.createdAt??0))-c})[0]?.[0]}var Vzf,rzf,klu;var CI0=O(()=>{z4();uu();Lg();c3();Vzf=bI0.object({data:RI0.describe("Data for the new thread (id is auto-generated if not provided)")}),rzf=bI0.object({item:kd.describe("The created thread entity")});klu=p({name:"COLLECTION_THREADS_CREATE",description:"Create a new thread for organizing messages and conversations.",annotations:{title:"Create Thread",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:Vzf,outputSchema:rzf,handler:async(i,u)=>{gi(u);let t=Bi(u);await u.access.check();let f=Yu(u);if(!f)throw Error("User ID required to create thread");let{data:l}=i,E=l.id??Df("thrd"),c=await u.storage.virtualMcps.findById(l.virtual_mcp_id,t.id);if(!c||c.organization_id!==t.id)throw Error(`Virtual MCP not found: ${l.virtual_mcp_id}`);let w=c.metadata,$=w?.githubRepo,h=null;if($)h=l.branch??mzf(w?.sandboxMap,f)??Rvi(zvi(u.auth.user));let v=await u.storage.threads.create({id:E,organization_id:t.id,title:l.title,description:l.description,virtual_mcp_id:l.virtual_mcp_id,branch:h,created_by:f});if(v.isNew)mu.capture({distinctId:f,event:"chat_started",groups:{organization:t.id},properties:{organization_id:t.id,thread_id:E,has_title:!!i.data.title,created_via:"tool"}});return{item:q5(v)}}})});import{z as k$}from"zod";var ezf,azf,Sg;var jlu=O(()=>{z5();uu();Lg();ezf=Tv.extend({where:k$.object({created_by:k$.string().optional(),trigger_ids:k$.array(k$.string()).optional(),virtual_mcp_id:k$.string().optional(),hidden:k$.boolean().optional(),has_trigger:k$.boolean().optional()}).optional(),startDate:k$.string().datetime().optional().describe("Filter threads updated at or after this ISO timestamp"),endDate:k$.string().datetime().optional().describe("Filter threads updated at or before this ISO timestamp"),search:k$.string().optional().describe("Full-text search on thread title (case-insensitive)"),status:k$.string().optional().describe("Filter by thread status (e.g. completed, failed, in_progress)"),userId:k$.string().optional().describe("Filter by the user who created the thread"),agentId:k$.string().optional().describe("Filter by agent (connection or virtual MCP) ID")}),azf=b2(kd),Sg=p({name:"COLLECTION_THREADS_LIST",description:"List threads with filtering, sorting, and pagination.",annotations:{title:"List Threads",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:ezf,outputSchema:azf,handler:async(i,u)=>{await u.access.check();let t=u.auth.user?.id;if(!t)throw Error("User ID required to list threads");Bi(u);let f=i.offset??0,l=i.limit??100,E=i.where?.trigger_ids,c=i.where?.virtual_mcp_id,w=i.userId??(i.where?.created_by==="me"?t:i.where?.created_by),{threads:$,total:h}=E?.length?await u.storage.threads.listByTriggerIds(E,{limit:l,offset:f}):await u.storage.threads.list(w,{limit:l,offset:f,virtualMcpId:c,startDate:i.startDate,endDate:i.endDate,search:i.search,status:i.status,agentId:i.agentId,includeArchived:i.where?.hidden,hasTrigger:i.where?.has_trigger}),v=f+l<h,d=Date.now();return{items:$.map((D)=>q5(D,d)),totalCount:h,hasMore:v}}})});var ozf,Qg;var Xlu=O(()=>{z5();uu();Lg();ozf=oa(kd),Qg=p({name:"COLLECTION_THREADS_GET",description:"Get a thread's details and metadata by ID.",annotations:{title:"Get Thread",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:aa,outputSchema:ozf,handler:async(i,u)=>{gi(u),Bi(u),await u.access.check();let t=await u.storage.threads.get(i.id);if(!t)return{item:null};return{item:q5(t)}}})});import{z as Jlu}from"zod";var szf,pzf,Klu;var MI0=O(()=>{z4();uu();Lg();szf=Jlu.object({id:Jlu.string().describe("ID of the thread to update"),data:nI0.describe("Partial thread data to update")}),pzf=Jlu.object({item:kd.describe("The updated thread entity")}),Klu=p({name:"COLLECTION_THREADS_UPDATE",description:"Update a thread's title, description, or visibility.",annotations:{title:"Update Thread",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:szf,outputSchema:pzf,handler:async(i,u)=>{gi(u);let t=Bi(u);await u.access.check();let f=Yu(u);if(!f)throw Error("User ID required to update thread");let{id:l,data:E}=i,c=await u.storage.threads.get(l);if(!c)throw Error("Thread not found in organization");if(E.virtual_mcp_id!==void 0){let h=await u.storage.virtualMcps.findById(E.virtual_mcp_id,t.id);if(!h||h.organization_id!==t.id)throw Error(`Virtual MCP not found: ${E.virtual_mcp_id}`)}if(E.branch===null&&c.virtual_mcp_id){if((await u.storage.virtualMcps.findById(c.virtual_mcp_id,t.id))?.metadata?.githubRepo)throw Error("Cannot set branch=null on a github-linked thread (vMCP has githubRepo)")}let w={title:E.title,description:E.description,hidden:E.hidden,updated_by:f};if(E.status)w.status=E.status;if(E.metadata!==void 0)w.metadata=E.metadata;if(E.branch!==void 0)w.branch=E.branch;if(E.virtual_mcp_id!==void 0)w.virtual_mcp_id=E.virtual_mcp_id;let $=await u.storage.threads.update(l,w);if(E.hidden!==void 0&&E.hidden!==c.hidden)mu.capture({distinctId:f,event:E.hidden?"chat_archived":"chat_unarchived",groups:{organization:t.id},properties:{organization_id:t.id,thread_id:l}});return{item:q5($)}}})});var Ylu;var qI0=O(()=>{z5();Lg();z4();uu();Ylu=p({name:"COLLECTION_THREADS_DELETE",description:"Permanently delete a thread and all its messages.",annotations:{title:"Delete Thread",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:sa,outputSchema:pa(kd),handler:async(i,u)=>{gi(u);let t=Bi(u);await u.access.check();let f=await u.storage.threads.get(i.id);if(!f)throw Error(`Thread not found: ${i.id}`);await u.storage.threads.delete(i.id);let l=Yu(u);if(l)mu.capture({distinctId:l,event:"chat_deleted",groups:{organization:t.id},properties:{organization_id:t.id,thread_id:i.id}});return{item:q5(f)}}})});import{z as iRf}from"zod";function VI0(i){if(!i)return null;if("field"in i&&i.field[0]==="thread_id"&&i.operator==="eq")return String(i.value);if("conditions"in i&&(i.operator==="and"||i.operator==="or"))for(let u of i.conditions){let t=VI0(u);if(t)return t}return null}var uRf,tRf,Hg;var Wlu=O(()=>{z5();uu();Lg();uRf=Tv.extend({thread_id:iRf.string().optional().describe("ID of the thread to list messages for (required)")}),tRf=b2(HI0),Hg=p({name:"COLLECTION_THREAD_MESSAGES_LIST",description:"List messages in a thread with pagination. Requires thread_id. Returns messages in chronological order.",annotations:{title:"List Thread Messages",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:uRf,outputSchema:tRf,handler:async(i,u)=>{Bi(u),await u.access.check();let t=i.thread_id??VI0(i.where);if(!t)throw Error("thread_id is required (provide as top-level param or in where clause)");let f=i.offset??0,l=i.limit??100,E=i.orderBy?.[0]?.direction??"asc",c=await u.storage.threads.get(t);if(!c)return{items:[],totalCount:0,hasMore:!1};if(c.message_storage_version===2){let{messages:v,total:d}=await u.storage.threads.messageParts().loadWindow(t,{limit:l,offset:f});return{items:v.map((D)=>({id:D.id,thread_id:t,role:D.role,parts:D.parts,metadata:D.metadata??null,created_at:D.created_at,updated_at:D.created_at})),totalCount:d,hasMore:f+l<d}}let{messages:w,total:$}=await u.storage.threads.listMessages(t,{limit:l,offset:f,sort:E}),h=f+l<$;return{items:w,totalCount:$,hasMore:h}}})});function rI0(i){return i!==null}function nvi(i,u){if(i===null)return!0;return i===u}import{z as mI0}from"zod";function i7(i){return i==="cluster"?"agent-sandbox":i}function Slu(i){return`${i.userId}:${i.projectRef}`}var Llu,fRf;var bvi=O(()=>{Llu=mI0.enum(["ts","go"]),fRf=mI0.enum(["agent-sandbox","user-desktop"])});class Cvi{map=new Map;async run(i,u){let t=this.map.get(i);if(t)return t;let f=u();this.map.set(i,f);try{return await f}finally{this.map.delete(i)}}}function Mvi(i,u,t,f){if(!i)return f(null);if(!i.withLock)return f(i);return i.withLock(u,t,f)}import{createHash as lRf}from"crypto";function cRf(i,u=16){return lRf("sha256").update(Slu(i)).digest("hex").slice(0,u)}function VN(i,u){let t=cRf(i),f=wRf(u);return f?`${f}-${t}`:`s-${t}`}function wRf(i){if(!i)return"";return(i.split("/").pop()??"").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,ERf).replace(/-+$/g,"")}var ERf=24;var eI0=O(()=>{bvi()});function qvi(i,u){let t=i.replace(/\/+$/,"");if(t.includes("{handle}"))return`${t.replace("{handle}",u)}/`;try{let f=new URL(t);return f.hostname=`${u}.${f.hostname}`,`${f.toString()}/`}catch{return`${t}/${u}/`}}function Qlu(i){let u=i.repo,t=u?{repository:{cloneUrl:u.cloneUrl,repoName:u.displayName??$Rf(u.cloneUrl),...u.branch?{branch:u.branch}:{},...u.submoduleCredentials&&u.submoduleCredentials.length>0?{submoduleCredentials:u.submoduleCredentials}:{}},identity:{userName:u.userName,userEmail:u.userEmail}}:void 0,f=i.tenant,l=Uh({userName:f?.userName,userEmail:f?.userEmail})??void 0,E=i.packageManager?{name:i.packageManager.name,...i.packageManager.path?{path:i.packageManager.path}:{}}:void 0,c=E?{packageManager:E,runtime:i.runtime,...i.port!==void 0?{port:i.port}:{}}:void 0;if(!t&&!c&&!l)return null;return{...t?{git:t}:{},...l?{operator:l}:{},...c?{application:c}:{}}}function $Rf(i){try{let u=new URL(i);return u.pathname.replace(/^\/+/,"").replace(/\.git$/,"")||u.hostname}catch{return i}}var aI0=O(()=>{vli()});function hRf(i){try{return new URL(i).username.length>0}catch{return!1}}function Hlu(i){let u=i.repo?.cloneUrl;if(!u||!hRf(u))return null;return{git:{repository:{cloneUrl:u}}}}var Vvi=O(()=>{eI0();aI0()});function zg(i){if("threadId"in i){if(!i.threadId)throw Error("composeSandboxRef: threadId required");return`thread:${i.threadId}`}if(!i.orgId||!i.virtualMcpId||!i.branch)throw Error("composeSandboxRef: orgId, virtualMcpId and branch are all required for agent refs");return`agent:${i.orgId}:${i.virtualMcpId}:${i.branch}`}function vRf(i){return(typeof i.timeout==="number"&&i.timeout>0?Math.min(i.timeout,120000):30000)+15000}function dRf(i,u){if(i.aborted)return u.catch(()=>{}),Promise.reject(i.reason??Error("aborted"));return new Promise((t,f)=>{let l=()=>{u.catch(()=>{}),f(i.reason??Error("aborted"))};i.addEventListener("abort",l,{once:!0}),u.then(t,f).finally(()=>{i.removeEventListener("abort",l)})})}async function DRf(i,u,t,f,l="POST",E){let c=E?.timeoutMs??vRf(f??{}),w=AbortSignal.timeout(c),$=E?.signal?AbortSignal.any([E.signal,w]):w,h,v;try{let D={method:l,headers:new Headers({"content-type":"application/json"}),body:null,signal:$};if(l!=="GET"&&f!==null)D.body=JSON.stringify(f);({res:h,rawText:v}=await dRf($,(async()=>{let _=await i.proxyDaemonRequest(u,t,D);return{res:_,rawText:await _.text()}})()))}catch(D){if(E?.signal?.aborted)throw D;if(w.aborted)throw Error(`Sandbox ${l} ${t} timed out after ${Math.round(c/1000)}s \u2014 the sandbox may be overloaded or its filesystem stalled. Retry, or use a smaller operation.`);throw new Wo(D)}let d;try{d=JSON.parse(v)}catch{console.error("[sandbox-fs-hooks] Failed to parse JSON response runner=%s path=%s status=%d rawText=%s",i.kind,t,h.status,v.slice(0,2000));let D=h.status>=500?" (server error)":h.status===0?" (no response)":"";throw Error(`Daemon ${t} returned invalid JSON (HTTP ${h.status}${D}): ${v.slice(0,800)}`)}if(!h.ok){console.error("[sandbox-fs-hooks] Non-OK response runner=%s path=%s status=%d body=%s",i.kind,t,h.status,v.slice(0,2000));let D=d.error??`Daemon ${t} failed (${h.status})`;if(h.status===404&&D==="sandbox not found")throw new Wo(Error(D),!0);throw Error(D)}return d}function _Rf(i){let u=[];for(let t of i.split(`
85749
85749
  `)){if(!t)continue;let f=t.indexOf(":");if(f<0)continue;let l=t.indexOf(":",f+1);if(l<0)continue;let E=t.slice(0,f),c=Number.parseInt(t.slice(f+1,l),10);if(!Number.isFinite(c))continue;u.push({file:E,line:c,text:t.slice(l+1)})}return u}function zlu(i,u){let{ensureHandle:t,invalidateHandle:f,canAutoRestart:l}=u,E=(w)=>{let $=w instanceof Error?w.message:String(w);return l?`Sandbox is unreachable and auto-restart did not recover it: ${$}`:"The sandbox is not running. Ask the user to start it by clicking the server button (left side of the header bar)."},c=async(w,$,h="POST",v)=>{let d=async(_)=>DRf(i,_,w,$,h,{signal:v,timeoutMs:u.opTimeoutMs}),D=await t();try{return await d(D)}catch(_){if(!(_ instanceof Wo))throw _;if(!l&&!_.gone)throw Error(E(_.cause??_));console.warn(`[sandbox-fs-hooks] daemon ${w} unreachable \u2014 reaping sandbox and retrying once`,_.cause??_);try{await f({force:_.gone})}catch(Z){console.warn("[sandbox-fs-hooks] invalidateHandle failed",Z)}let N;try{N=await t()}catch(Z){throw Error(`Failed to restart sandbox: ${Z instanceof Error?Z.message:String(Z)}`)}try{return await d(N)}catch(Z){if(Z instanceof Wo)throw Error(E(Z.cause??Z));throw Z}}};return{onProxy:(w,$,h,v)=>c(w,$,h,v),onRead:async(w)=>{return(await c("/_sandbox/read",{path:w})).content},onWrite:async(w,$)=>{await c("/_sandbox/write",{path:w,content:$})},onEdit:async(w,$)=>{for(let h of $)await c("/_sandbox/edit",{path:w,old_string:h.oldText,new_string:h.newText,replace_all:h.replaceAll===!0})},onBash:async(w,$)=>{return await c("/_sandbox/bash",{command:w,...$?.cwd!==void 0?{cwd:$.cwd}:{},...$?.timeoutMs!==void 0?{timeout:$.timeoutMs}:{}})},onGlob:async(w)=>{return(await c("/_sandbox/glob",{pattern:w})).files},onGrep:async(w,$)=>{let h=await c("/_sandbox/grep",{pattern:w,output_mode:"content",...$?.path!==void 0?{path:$.path}:{},...$?.glob!==void 0?{glob:$.glob}:{},...$?.caseInsensitive?{ignore_case:!0}:{}});return _Rf(h.results)}}}var Wo;var oI0=O(()=>{Wo=class Wo extends Error{code="DAEMON_UNREACHABLE";gone;constructor(i,u=!1){super(i instanceof Error?i.message:"Daemon proxy failed");if(this.gone=u,i instanceof Error)this.cause=i}}});function NRf(i){return i==="agent-sandbox"||i==="cluster"||i==="user-desktop"}function Jv(){let i=process.env.STUDIO_SANDBOX_PROVIDER,u=i&&i.length>0?i:"user-desktop";if(!NRf(u))throw Error(`Unknown STUDIO_SANDBOX_PROVIDER="${i}" \u2014 expected "agent-sandbox", "cluster", or "user-desktop".`);return i7(u)}var V5=O(()=>{bvi();bvi();Vvi();oI0()});function ZR(i){return i7(i.sandboxProviderKind)==="user-desktop"?{sandboxProviderKind:"user-desktop"}:{sandboxProviderKind:"agent-sandbox"}}var rvi=O(()=>{V5()});function Rlu(i){let u=new AbortController,t=BR.get(i);if(!t)t=new Set,BR.set(i,t);return t.add(u),u}function nlu(i,u){let t=BR.get(i);if(!t)return;if(t.delete(u),t.size===0)BR.delete(i)}function mvi(i){let u=BR.get(i);if(!u)return;for(let t of u)t.abort();BR.delete(i)}var BR;var evi=O(()=>{BR=new Map});function QE(i){return`studio-storage://${i}`}function Lo(i){if(i.startsWith("studio-storage://"))return i.slice(17);if(i.startsWith("mesh-storage://"))return i.slice(15);return null}function blu(){return/(?:studio|mesh)-storage:\/\/([^\s"'<>[\]]+)/g}var Rg="https://chrome.browserless.io",ng=32000;import{z as jd}from"zod";function BRf(i,u=!1){return{...i&&u?{clip:{x:0,y:0,width:ux0.width,height:avi}}:{fullPage:i},type:"jpeg",quality:ZRf}}function pI0(i){if(i[0]!==255||i[1]!==216)return null;let u=new DataView(i.buffer,i.byteOffset,i.byteLength),t=2;while(t+9<i.length){if(i[t]!==255)return null;let f=i[t+1];if(f>=192&&f<=207&&![196,200,204].includes(f))return u.getUint16(t+5);t+=2+u.getUint16(t+2)}return null}function ovi(i){if(i>sI0){let u=(i/1048576).toFixed(1),t=sI0/1048576;throw Error(`Reference image too large: ${u} MB (max ${t} MB). Use a smaller image.`)}}function URf(i,u){let t;try{t=new URL(i)}catch{throw Error("Invalid image URL")}if(t.protocol!=="https:"&&!(u&&t.protocol==="http:"))throw Error("Image URL must use HTTPS");for(let f of gRf)if(f.test(t.hostname))throw Error("Image URL must not point to a private network address")}async function ix0(i,u){if(!u?.getBytes)throw Error("Object storage read is not available");if(u.head){let{size:f}=await u.head(i);ovi(f)}let t=await u.getBytes(i);return ovi(t.byteLength),t}async function TRf(i,u){let t=Lo(i);if(t!==null)return ix0(t,u.objectStorage);let f=i.match(ORf);if(f)return ix0(f[1],u.objectStorage);if(i.startsWith("data:")){let c=i.match(/^data:[^;]+;base64,(.+)$/s);if(!c)throw Error("Invalid data: URI");let w=Buffer.from(c[1],"base64");return ovi(w.byteLength),w}URf(i,u.allowHttpExternalUrls===!0);let l=await fetch(i,{signal:u.abortSignal});if(!l.ok)throw Error(`Failed to fetch image from ${i}: ${l.status}`);let E=new Uint8Array(await l.arrayBuffer());return ovi(E.byteLength),E}async function Clu(i,u){let{provider:t,imageModelInfo:f,objectStorage:l}=u,E=t.aiSdk.imageModel(f.id),c=i.referenceImages&&i.referenceImages.length>0,w=c?await Promise.all(i.referenceImages.map((_)=>{let N=_.uri??_.url;if(!N)throw Error("Reference image missing uri");return TRf(N,u)})):[],$=c?{text:i.prompt,images:w}:i.prompt,h=await Nvi({model:E,prompt:$,n:i.n??1,...i.aspectRatio?{aspectRatio:i.aspectRatio}:{},...u.abortSignal?{abortSignal:u.abortSignal}:{}});if(!l)throw Error("Object storage is unavailable; cannot persist the generated image.");let v=i.n??1,d=h.images.length>v?h.images.slice(-v):h.images;return{success:!0,images:await Promise.all(d.map(async(_)=>{let N=_.mediaType??"image/png",Z=N.split("/")[1]??"png",B=`generated-images/${crypto.randomUUID()}.${Z}`,F=Uint8Array.from(atob(_.base64),(g)=>g.charCodeAt(0));return await l.put(B,F,{contentType:N}),{uri:QE(B),mediaType:N}})),prompt:i.prompt,model:f.id,usage:{inputTokens:h.usage.inputTokens??0,outputTokens:h.usage.outputTokens??0},usedReferenceImages:c?i.referenceImages.length:0}}function svi(i,u){return b0({description:"Generate an image from a text description, optionally using reference images. Use this when the user asks you to create, generate, draw, or design an image. If the user has attached images and wants to modify or use them as a reference, pass them as referenceImages. "+"The image is displayed automatically by the UI \u2014 do NOT include image URLs or markdown images in your response.",inputSchema:Zi(bg),execute:async(t,f)=>{let l=performance.now();try{return await Clu(t,u)}finally{i.write({type:"data-tool-metadata",id:f.toolCallId,data:{latencyMs:performance.now()-l}})}}})}function pvi(i,u){let{objectStorage:t,toolOutputMap:f,pendingImages:l}=u;return b0({description:"Take a screenshot of a web page. Use this when you need to visually see a website, check its layout, verify a deployment, or inspect a page's appearance. "+"The screenshot is displayed automatically by the UI \u2014 do NOT include image URLs or markdown images in your response.",inputSchema:Zi(FRf),execute:async(E,c)=>{let w=performance.now();try{let $=u.browserlessToken??process.env.BROWSERLESS_TOKEN;if(!$)return{success:!1,error:"BROWSERLESS_TOKEN is not configured."};let h=E.fullPage??!1,v=async(g)=>await fetch(`${Rg}/screenshot?token=${encodeURIComponent($)}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({url:E.url,options:BRf(h,g),viewport:ux0})}),d=await v(!1);if(!d.ok){let g=await d.text().catch(()=>"Unknown error");return{success:!1,error:`Browserless screenshot failed (${d.status}): ${g}`,url:E.url}}let D=new Uint8Array(await d.arrayBuffer()),_=pI0(D);if(h&&_!==null&&_>avi){d=await v(!0);let g=d.ok?new Uint8Array(await d.arrayBuffer()):null;if(!g||(pI0(g)??0)>avi)return{success:!1,error:`Full-page screenshot of ${E.url} is ${_}px tall, over the ${avi}px limit, and the clipped retry did not come back within it. Retry with fullPage: false.`,url:E.url};D=g}let N="image/jpeg",Z=`screenshots/${crypto.randomUUID()}.jpg`,B,F=null;if(t)try{await t.put(Z,D,{contentType:N}),B=QE(Z),F=await t.presignedGetUrl?.(Z,600)??null}catch(g){console.error("[take-screenshot] Failed to upload, using data: URI fallback",g),B=`data:${N};base64,${Buffer.from(D).toString("base64")}`}else B=`data:${N};base64,${Buffer.from(D).toString("base64")}`;if(!F)F=B.startsWith("data:")?B:`data:${N};base64,${Buffer.from(D).toString("base64")}`;return l.push({url:F,mediaType:N,pageUrl:E.url}),f.set(c.toolCallId,`Screenshot of ${E.url} stored at ${B}`),{success:!0,image:{uri:B,mediaType:N},url:E.url}}finally{i.write({type:"data-tool-metadata",id:c.toolCallId,data:{latencyMs:performance.now()-w}})}},toModelOutput({output:E}){if(!E.success)return{type:"text",value:E.error??"Screenshot failed"};return{type:"text",value:`Screenshot of ${E.url} captured successfully. The image is attached below.`}}})}var ORf,sI0=20971520,ux0,ZRf=80,avi=7000,bg,FRf,gRf;var Cg=O(()=>{Zf();Zf();ORf=/\/api\/[^/]+\/files\/([^?#]+)/,ux0={width:1280,height:800};bg=jd.object({prompt:jd.string().max(1e4).describe("Detailed description of the image to generate. Be specific about style, composition, colors, and subject matter."),referenceImages:jd.array(jd.object({uri:jd.string().describe("URI of the reference image (e.g. studio-storage://generated-images/uuid.png).")})).optional().describe("Reference images to use as input for image-to-image generation. Pass the URI of any image from the conversation (uploaded files, previously generated images, etc.) when the user wants to modify, transform, or use an existing image as a starting point."),aspectRatio:jd.enum(["1:1","16:9","9:16","4:3","3:4","3:2","2:3"]).optional().describe("Aspect ratio for the generated image. Defaults to 1:1."),n:jd.number().int().min(1).max(4).optional().describe("Number of images to generate. Defaults to 1.")}),FRf=jd.object({url:jd.string().url().describe("The URL of the web page to screenshot."),fullPage:jd.boolean().optional().describe("When true, captures the full scrollable page instead of just the viewport. Defaults to false.")}),gRf=[/^127\./,/^10\./,/^172\.(1[6-9]|2\d|3[01])\./,/^192\.168\./,/^169\.254\./,/^0\./,/^\[::1\]$/,/^\[fd/,/^\[fe80:/,/^\[::ffff:/i,/^localhost$/i]});function j$(i){if(i instanceof Error)return i.message;if(typeof i==="object"&&i!==null)try{return JSON.stringify(i)}catch{return"[unserializable object]"}return String(i)}function tx0(i){let t=i.split(/\.\s+/).filter((l)=>!/https?:\/\//i.test(l)&&!/openrouter/i.test(l));if(t.length===0)return i;let f=t.join(". ").trim();return f.endsWith(".")?f:`${f}.`}function fx0(i){if(i instanceof Error)return{message:i.message,statusCode:i.statusCode};if(typeof i==="object"&&i!==null){let u=i,t=typeof u.message==="string"?u.message:j$(i),f=typeof u.statusCode==="number"?u.statusCode:typeof u.code==="number"?u.code:void 0;return{message:t,statusCode:f}}return{message:String(i)}}function i8i(i){let{message:u,statusCode:t}=fx0(i),f=u.toLowerCase();return t===402||f.includes("credit")||f.includes("insufficient funds")||f.includes("insufficient balance")||f.includes("billing")||f.includes("quota exceeded")||f.includes("key limit")||f.includes("payment required")}function ARf(i){let u=i.toLowerCase();if(u.includes("circuit breaker is open"))return"A connected app is temporarily unreachable \u2014 it'll keep retrying. Try again in a moment.";if(!(u.includes("error posting to endpoint")||u.includes("streamable http error")))return null;if(/unauthorized|authentication required|forbidden|\b401\b|\b403\b/.test(u))return"A connected app needs to be re-authenticated before it can be used. Reconnect it, then try again.";return"Couldn't reach a connected app. Try again in a moment."}function lx0(i){let{message:u}=fx0(i),t=ARf(u);if(t)return t;if(i8i(i))return`[CREDITS] ${tx0(u)}`;return tx0(u)}function Ex0(i){let u=i.indexOf(Mlu);if(u===-1)return{baseId:i,signature:null};return{baseId:i.slice(0,u),signature:i.slice(u+Mlu.length)}}function PRf(i,u){return`${i}${Mlu}${u}`}function yRf(i,u){return{...i,google:{...i?.google??{},thoughtSignature:u}}}function GRf(i){let u=i?.google?.thoughtSignature;return typeof u==="string"?u:null}function cx0(i){let{baseId:u,signature:t}=Ex0(i.toolCallId);if(t===null)return i;return{...i,toolCallId:u,providerMetadata:yRf(i.providerMetadata,t)}}function IRf(i){switch(i.type){case"tool-input-start":case"tool-input-delta":case"tool-input-end":{let{baseId:u,signature:t}=Ex0(i.id);return t===null?i:{...i,id:u}}case"tool-call":return cx0(i);default:return i}}function xRf(i){let u=new Map;for(let f of i.prompt){if(f.role!=="assistant")continue;for(let l of f.content){if(l.type!=="tool-call")continue;let E=GRf(l.providerOptions);if(E)u.set(l.toolCallId,E)}}if(u.size===0)return i;let t=i.prompt.map((f)=>{if(f.role!=="assistant"&&f.role!=="tool")return f;let l=f.content.map((E)=>{if(E.type!=="tool-call"&&E.type!=="tool-result")return E;let c=u.get(E.toolCallId);return c?{...E,toolCallId:PRf(E.toolCallId,c)}:E});return{...f,content:l}});return{...i,prompt:t}}function kRf(){return{specificationVersion:"v3",transformParams:async({params:i})=>xRf(i),wrapStream:async({doStream:i})=>{let{stream:u,...t}=await i();return{...t,stream:u.pipeThrough(new TransformStream({transform(f,l){l.enqueue(IRf(f))}}))}},wrapGenerate:async({doGenerate:i})=>{let u=await i(),t=u.content.map((f)=>f.type==="tool-call"?cx0(f):f);return{...u,content:t}}}}function wx0(i){return Jg({model:i,middleware:kRf()})}var Mlu="__thought__";var $x0=O(()=>{Zf()});function XRf(i,u){return Jg({model:i,middleware:{specificationVersion:"v3",wrapStream:async({doStream:f,params:l})=>{try{return await f()}catch(E){if(!i8i(E))throw E;return u.doStream(l)}},wrapGenerate:async({doGenerate:f,params:l})=>{try{return await f()}catch(E){if(!i8i(E))throw E;return u.doGenerate(l)}}}})}function u8i(i,u){let t={};if(u.capabilities?.reasoning!==!1)t.reasoning={enabled:!0,effort:"medium"};let f=i.info?.id==="openrouter"&&u.id!==qlu;if(f)t.models=[u.id,qlu];let l=(w,$)=>$&&Object.keys($).length>0?i.aiSdk.languageModel(w,$):i.aiSdk.languageModel(w),E=l(u.id,t),c=f?XRf(E,l(qlu)):E;return i.info?.id&&jRf.has(i.info.id)?wx0(c):c}var qlu="openrouter/free",jRf;var Vlu=O(()=>{Zf();$x0();jRf=new Set(["openai-compatible","openrouter","deco","llmapi"])});function hx0(i,u){if(!u)return i;let t=new Set(u);return Object.fromEntries(Object.entries(i).filter(([f])=>t.has(f)))}function vx0(i,u){let t=i?.maxOutputTokens??32768,f=i?.contextWindow;if(!f)return t;let l=f-u*2;return Math.max(1024,Math.min(t,l))}var t8i=300000;import{z as rlu}from"zod";function f8i(i){let{toolOutputMap:u}=i;return b0({description:"Filter a tool output that was too large to display inline. Returns all lines matching the given regular expression pattern (grep-like). You may call this tool multiple times with different patterns to extract different pieces of information.",inputExamples:[{input:{tool_call_id:"id_1",pattern:"error|warning"}},{input:{tool_call_id:"id_2",pattern:'"status":\\s*"failed"'}}],inputSchema:Zi(rlu.object({tool_call_id:rlu.string(),pattern:rlu.string().min(1).describe("Regular expression pattern to filter tool output lines. Returns all matching lines.")})),execute:async({tool_call_id:t,pattern:f})=>{if(!u.has(t))return{result:`Tool output not found for tool call id: ${t}. Available ids: ${[...u.keys()].join(", ")||"(none)"}`,matchCount:0,totalLines:0};let l=u.get(t),E;try{E=new RegExp(f)}catch{return{result:`Invalid regex pattern: ${f}`,matchCount:0,totalLines:0}}let c=l.split(`
85750
85750
  `),w=c.filter((v)=>E.test(v)),$=w.join(`
85751
85751
  `),h=Wc($);if(h>rN){let v=U3($);return{result:`Output is still too long (${h} tokens), use a more specific pattern to reduce output.